aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Centeno2021-04-09 20:38:21 +0000
committerArthur Centeno2021-04-09 20:38:21 +0000
commite2b04a322f26670782fe7f7c39bcebc508fdabdd (patch)
treea51c32bae4d544cc0beea19f455ccc52f0544a4c
parent187cd40bd3273b50d2813bfccf98bfadbb8c14ff (diff)
parentef51e08753defdfc7f3e67f8788cd1362d2cf631 (diff)
downloadgenenetwork2-e2b04a322f26670782fe7f7c39bcebc508fdabdd.tar.gz
Merge branch 'testing' of github.com:genenetwork/genenetwork2 into acenteno
-rw-r--r--.github/ISSUE_TEMPLATE/bug_report.md28
-rw-r--r--.github/ISSUE_TEMPLATE/feature_request.md30
-rw-r--r--.github/ISSUE_TEMPLATE/user_story.md12
-rw-r--r--.github/PULL_REQUEST_TEMPLATE.md17
-rw-r--r--.github/workflows/main.yml66
-rw-r--r--.gitignore2
-rw-r--r--README.md69
-rw-r--r--api_readme.md155
-rwxr-xr-xbin/genenetwork28
-rw-r--r--doc/GUIX-Reproducible-from-source.org6
-rw-r--r--doc/README.org518
-rw-r--r--doc/development.org55
-rw-r--r--doc/docker-container.org89
-rw-r--r--doc/testing.org66
-rw-r--r--etc/default_settings.py4
-rw-r--r--jquery.qtip.css623
-rwxr-xr-xscripts/maintenance/QTL_Reaper_v6.py10
-rw-r--r--scripts/maintenance/Update_Case_Attributes_MySQL_tab.py2
-rwxr-xr-xscripts/maintenance/delete_genotypes.py16
-rwxr-xr-xscripts/maintenance/delete_phenotypes.py14
-rwxr-xr-xscripts/maintenance/load_genotypes.py20
-rwxr-xr-xscripts/maintenance/load_phenotypes.py40
-rwxr-xr-xscripts/maintenance/readProbeSetMean_v7.py292
-rwxr-xr-xscripts/maintenance/readProbeSetSE_v7.py508
-rw-r--r--setup.py2
-rw-r--r--test/__init__.py (renamed from wqflask/cfg/__init__.py)0
-rw-r--r--test/requests/link_checker.py92
-rw-r--r--test/requests/links_scraper/genelinks.py133
-rw-r--r--test/requests/main_web_functionality.py24
-rw-r--r--test/requests/mapping_tests.py13
-rw-r--r--test/requests/navigation_tests.py1
-rwxr-xr-xtest/requests/test-website.py15
-rw-r--r--test/unittest/test_registration.py27
-rw-r--r--webtests/browser_run.py4
-rw-r--r--webtests/correlation_matrix_test.py2
-rw-r--r--webtests/correlation_test.py2
-rw-r--r--webtests/marker_regression_test.py2
-rw-r--r--webtests/show_trait_js_test.py2
-rw-r--r--webtests/test_runner.py4
-rw-r--r--wqflask/.coveragerc28
-rw-r--r--wqflask/base/GeneralObject.py78
-rw-r--r--wqflask/base/data_set.py507
-rw-r--r--wqflask/base/mrna_assay_tissue_data.py7
-rw-r--r--wqflask/base/species.py9
-rw-r--r--wqflask/base/trait.py444
-rw-r--r--wqflask/base/webqtlCaseData.py41
-rw-r--r--wqflask/base/webqtlConfig.py8
-rw-r--r--wqflask/cfg/default_settings.py1
-rw-r--r--wqflask/db/call.py21
-rw-r--r--wqflask/db/webqtlDatabaseFunction.py8
-rw-r--r--wqflask/maintenance/convert_dryad_to_bimbam.py3
-rw-r--r--wqflask/maintenance/convert_geno_to_bimbam.py3
-rw-r--r--wqflask/maintenance/gen_select_dataset.py22
-rw-r--r--wqflask/maintenance/generate_kinship_from_bimbam.py3
-rw-r--r--wqflask/maintenance/generate_probesetfreeze_file.py4
-rw-r--r--wqflask/maintenance/geno_to_json.py3
-rw-r--r--wqflask/maintenance/get_group_samplelists.py2
-rw-r--r--wqflask/maintenance/print_benchmark.py4
-rw-r--r--wqflask/maintenance/quantile_normalize.py17
-rw-r--r--wqflask/maintenance/set_resource_defaults.py164
-rw-r--r--wqflask/mock/es_double.py15
-rw-r--r--wqflask/run_gunicorn.py2
-rw-r--r--wqflask/runserver.py20
-rw-r--r--wqflask/tests/__init__.py (renamed from wqflask/mock/__init__.py)0
-rw-r--r--wqflask/tests/integration/__init__.py0
-rw-r--r--wqflask/tests/integration/test_markdown_routes.py21
-rw-r--r--wqflask/tests/unit/__init__.py0
-rw-r--r--wqflask/tests/unit/base/__init__.py0
-rw-r--r--wqflask/tests/unit/base/data.py110
-rw-r--r--wqflask/tests/unit/base/test_data_set.py181
-rw-r--r--wqflask/tests/unit/base/test_general_object.py40
-rw-r--r--wqflask/tests/unit/base/test_trait.py241
-rw-r--r--wqflask/tests/unit/base/test_webqtl_case_data.py39
-rw-r--r--wqflask/tests/unit/utility/__init__.py0
-rw-r--r--wqflask/tests/unit/utility/test_authentication_tools.py189
-rw-r--r--wqflask/tests/unit/utility/test_chunks.py19
-rw-r--r--wqflask/tests/unit/utility/test_corestats.py55
-rw-r--r--wqflask/tests/unit/utility/test_corr_result_helpers.py32
-rw-r--r--wqflask/tests/unit/utility/test_formatting.py33
-rw-r--r--wqflask/tests/unit/utility/test_hmac.py51
-rw-r--r--wqflask/tests/unit/utility/test_type_checking.py54
-rw-r--r--wqflask/tests/unit/wqflask/__init__.py0
-rw-r--r--wqflask/tests/unit/wqflask/api/__init__.py0
-rw-r--r--wqflask/tests/unit/wqflask/api/test_correlation.py153
-rw-r--r--wqflask/tests/unit/wqflask/api/test_gen_menu.py414
-rw-r--r--wqflask/tests/unit/wqflask/api/test_mapping.py108
-rw-r--r--wqflask/tests/unit/wqflask/correlation/__init__.py0
-rw-r--r--wqflask/tests/unit/wqflask/correlation/test_correlation_functions.py20
-rw-r--r--wqflask/tests/unit/wqflask/correlation/test_show_corr_results.py98
-rw-r--r--wqflask/tests/unit/wqflask/marker_regression/__init__.py0
-rw-r--r--wqflask/tests/unit/wqflask/marker_regression/test_display_mapping_results.py156
-rw-r--r--wqflask/tests/unit/wqflask/marker_regression/test_gemma_mapping.py181
-rw-r--r--wqflask/tests/unit/wqflask/marker_regression/test_plink_mapping.py85
-rw-r--r--wqflask/tests/unit/wqflask/marker_regression/test_qtlreaper_mapping.py21
-rw-r--r--wqflask/tests/unit/wqflask/marker_regression/test_rqtl_mapping.py48
-rw-r--r--wqflask/tests/unit/wqflask/marker_regression/test_run_mapping.py289
-rw-r--r--wqflask/tests/unit/wqflask/show_trait/__init__.py0
-rw-r--r--wqflask/tests/unit/wqflask/show_trait/test_export_trait_data.py212
-rw-r--r--wqflask/tests/unit/wqflask/snp_browser/__init__.py0
-rw-r--r--wqflask/tests/unit/wqflask/snp_browser/test_snp_browser.py105
-rw-r--r--wqflask/tests/unit/wqflask/test_collect.py73
-rw-r--r--wqflask/tests/unit/wqflask/test_markdown_routes.py54
-rw-r--r--wqflask/tests/unit/wqflask/test_pbkdf2.py61
-rw-r--r--wqflask/tests/unit/wqflask/test_server_side.py31
-rw-r--r--wqflask/tests/unit/wqflask/test_user_login.py21
-rw-r--r--wqflask/tests/unit/wqflask/test_user_session.py15
-rw-r--r--wqflask/tests/wqflask/show_trait/testSampleList.py16
-rw-r--r--wqflask/tests/wqflask/show_trait/test_show_trait.py278
-rw-r--r--wqflask/utility/Plot.py127
-rw-r--r--wqflask/utility/__init__.py4
-rw-r--r--wqflask/utility/after.py4
-rw-r--r--wqflask/utility/authentication_tools.py145
-rw-r--r--wqflask/utility/benchmark.py6
-rw-r--r--wqflask/utility/chunks.py65
-rw-r--r--wqflask/utility/corr_result_helpers.py26
-rw-r--r--wqflask/utility/db_tools.py12
-rw-r--r--wqflask/utility/elasticsearch_tools.py2
-rw-r--r--wqflask/utility/formatting.py29
-rw-r--r--wqflask/utility/gen_geno_ob.py6
-rw-r--r--wqflask/utility/genofile_parser.py1
-rw-r--r--wqflask/utility/helper_functions.py17
-rw-r--r--wqflask/utility/hmac.py17
-rw-r--r--wqflask/utility/logger.py26
-rw-r--r--wqflask/utility/pillow_utils.py27
-rw-r--r--wqflask/utility/redis_tools.py271
-rw-r--r--wqflask/utility/startup_config.py4
-rw-r--r--wqflask/utility/svg.py692
-rw-r--r--wqflask/utility/temp_data.py3
-rw-r--r--wqflask/utility/tools.py44
-rw-r--r--wqflask/utility/type_checking.py24
-rw-r--r--wqflask/utility/webqtlUtil.py24
-rw-r--r--wqflask/wqflask/__init__.py55
-rw-r--r--wqflask/wqflask/api/correlation.py472
-rw-r--r--wqflask/wqflask/api/gen_menu.py199
-rw-r--r--wqflask/wqflask/api/mapping.py6
-rw-r--r--wqflask/wqflask/api/router.py51
-rw-r--r--wqflask/wqflask/collect.py67
-rw-r--r--wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py25
-rw-r--r--wqflask/wqflask/correlation/corr_scatter_plot.py42
-rw-r--r--wqflask/wqflask/correlation/correlation_functions.py36
-rw-r--r--wqflask/wqflask/correlation/show_corr_results.py300
-rw-r--r--wqflask/wqflask/correlation_matrix/show_corr_matrix.py318
-rw-r--r--wqflask/wqflask/ctl/ctl_analysis.py22
-rw-r--r--wqflask/wqflask/db_info.py138
-rw-r--r--wqflask/wqflask/do_search.py21
-rw-r--r--wqflask/wqflask/docs.py10
-rw-r--r--wqflask/wqflask/export_traits.py125
-rw-r--r--wqflask/wqflask/external_tools/send_to_bnw.py4
-rw-r--r--wqflask/wqflask/external_tools/send_to_geneweaver.py12
-rw-r--r--wqflask/wqflask/external_tools/send_to_webgestalt.py6
-rw-r--r--wqflask/wqflask/group_manager.py155
-rw-r--r--wqflask/wqflask/gsearch.py71
-rw-r--r--wqflask/wqflask/heatmap/heatmap.py45
-rw-r--r--wqflask/wqflask/interval_analyst/GeneUtil.py8
-rw-r--r--wqflask/wqflask/markdown_routes.py126
-rw-r--r--wqflask/wqflask/marker_regression/display_mapping_results.py1535
-rw-r--r--wqflask/wqflask/marker_regression/gemma_mapping.py262
-rw-r--r--wqflask/wqflask/marker_regression/plink_mapping.py40
-rw-r--r--wqflask/wqflask/marker_regression/qtlreaper_mapping.py90
-rw-r--r--wqflask/wqflask/marker_regression/rqtl_mapping.py72
-rw-r--r--wqflask/wqflask/marker_regression/run_mapping.py209
-rw-r--r--wqflask/wqflask/model.py10
-rw-r--r--wqflask/wqflask/network_graph/network_graph.py133
-rw-r--r--wqflask/wqflask/news.py4
-rw-r--r--wqflask/wqflask/parser.py21
-rw-r--r--wqflask/wqflask/pbkdf2.py146
-rw-r--r--wqflask/wqflask/resource_manager.py136
-rw-r--r--wqflask/wqflask/search_results.py150
-rw-r--r--wqflask/wqflask/send_mail.py2
-rw-r--r--wqflask/wqflask/server_side.py93
-rw-r--r--wqflask/wqflask/show_trait/SampleList.py178
-rw-r--r--wqflask/wqflask/show_trait/export_trait_data.py38
-rw-r--r--wqflask/wqflask/show_trait/show_trait.py108
-rw-r--r--wqflask/wqflask/snp_browser/snp_browser.py82
-rw-r--r--wqflask/wqflask/static/Congenic.pngbin0 -> 56578 bytes
-rw-r--r--wqflask/wqflask/static/fonts/README1
-rw-r--r--wqflask/wqflask/static/fonts/arial.ttfbin0 -> 151232 bytes
-rw-r--r--wqflask/wqflask/static/fonts/courbd.ttfbin0 -> 181388 bytes
-rw-r--r--wqflask/wqflask/static/fonts/fnt_bs.ttfbin0 -> 20988 bytes
-rw-r--r--wqflask/wqflask/static/fonts/tahoma.ttfbin0 -> 249012 bytes
-rw-r--r--wqflask/wqflask/static/fonts/trebucbd.ttfbin0 -> 123828 bytes
-rw-r--r--wqflask/wqflask/static/fonts/verdana.ttfbin0 -> 139640 bytes
-rw-r--r--wqflask/wqflask/static/fonts/verdanab.ttfbin0 -> 156340 bytes
-rw-r--r--wqflask/wqflask/static/gif/error/m001.gifbin0 -> 273531 bytes
-rw-r--r--wqflask/wqflask/static/gif/error/m002.gifbin0 -> 1799777 bytes
-rw-r--r--wqflask/wqflask/static/gif/error/m003.gifbin0 -> 2238947 bytes
-rw-r--r--wqflask/wqflask/static/gif/error/m004.gifbin0 -> 2090274 bytes
-rw-r--r--wqflask/wqflask/static/gif/error/m005.gifbin0 -> 947565 bytes
-rw-r--r--wqflask/wqflask/static/gif/error/m006.gifbin0 -> 121116 bytes
-rw-r--r--wqflask/wqflask/static/gif/error/m007.gifbin0 -> 41670 bytes
-rw-r--r--wqflask/wqflask/static/gif/error/m008.gifbin0 -> 732023 bytes
-rw-r--r--wqflask/wqflask/static/gif/error/mouse-wheel.gifbin0 -> 2001764 bytes
-rw-r--r--wqflask/wqflask/static/images/Belknap_Fig1_1998.pngbin0 -> 117246 bytes
-rw-r--r--wqflask/wqflask/static/images/Chrna1vsMyf6.gifbin0 -> 59529 bytes
-rw-r--r--wqflask/wqflask/static/images/Congenic.pngbin0 -> 56578 bytes
-rw-r--r--wqflask/wqflask/static/images/Normal_Plot.gifbin0 -> 47289 bytes
-rw-r--r--wqflask/wqflask/static/images/SilverFig3_2.pngbin0 -> 61570 bytes
-rw-r--r--wqflask/wqflask/static/images/SilverFig3_6.pngbin0 -> 22017 bytes
-rw-r--r--wqflask/wqflask/static/images/Winsorize1.pngbin0 -> 15117 bytes
-rw-r--r--wqflask/wqflask/static/images/Winsorize3.pngbin0 -> 17317 bytes
-rw-r--r--wqflask/wqflask/static/images/edit.pngbin0 -> 2452 bytes
-rw-r--r--wqflask/wqflask/static/new/css/bootstrap-custom.css7558
-rw-r--r--wqflask/wqflask/static/new/css/broken_links.css5
-rw-r--r--wqflask/wqflask/static/new/css/colorbox.css238
-rw-r--r--wqflask/wqflask/static/new/css/docs.css1080
-rw-r--r--wqflask/wqflask/static/new/css/main.css4
-rw-r--r--wqflask/wqflask/static/new/css/markdown.css108
-rw-r--r--wqflask/wqflask/static/new/css/marker_regression.css8
-rw-r--r--wqflask/wqflask/static/new/css/non-responsive.css114
-rw-r--r--wqflask/wqflask/static/new/css/show_trait.css227
-rw-r--r--wqflask/wqflask/static/new/css/snp_browser.css6
-rw-r--r--wqflask/wqflask/static/new/css/trait_list.css54
-rw-r--r--wqflask/wqflask/static/new/javascript/auto_hide_column.js21
-rw-r--r--wqflask/wqflask/static/new/javascript/dataset_select_menu_orig.js46
-rw-r--r--wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js5
-rw-r--r--wqflask/wqflask/static/new/javascript/draw_probability_plot.js1
-rw-r--r--wqflask/wqflask/static/new/javascript/get_covariates_from_collection.js54
-rw-r--r--wqflask/wqflask/static/new/javascript/get_traits_from_collection.js92
-rw-r--r--wqflask/wqflask/static/new/javascript/group_manager.js38
-rw-r--r--wqflask/wqflask/static/new/javascript/init_genome_browser.js2
-rw-r--r--wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js228
-rw-r--r--wqflask/wqflask/static/new/javascript/lodheatmap.js6
-rw-r--r--wqflask/wqflask/static/new/javascript/panelutil.js1
-rw-r--r--wqflask/wqflask/static/new/javascript/password_strength.js51
-rw-r--r--wqflask/wqflask/static/new/javascript/search_results.js352
-rw-r--r--wqflask/wqflask/static/new/javascript/show_trait.js692
-rw-r--r--wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js546
-rw-r--r--wqflask/wqflask/static/new/javascript/stats.js2
-rw-r--r--wqflask/wqflask/static/new/js_external/chroma.js2464
-rw-r--r--wqflask/wqflask/static/new/js_external/d3-tip.min.js1
-rw-r--r--wqflask/wqflask/static/new/js_external/jquery.cookie.js72
-rw-r--r--wqflask/wqflask/static/new/js_external/jscolor.js1855
-rw-r--r--wqflask/wqflask/static/new/js_external/json2.js486
-rw-r--r--wqflask/wqflask/static/new/js_external/jstat.min.js2
-rw-r--r--wqflask/wqflask/static/new/js_external/jszip.min.js14
-rw-r--r--wqflask/wqflask/static/new/js_external/md5.min.js2
-rw-r--r--wqflask/wqflask/static/new/js_external/parsley.min.js35
-rw-r--r--wqflask/wqflask/static/new/js_external/plotly-latest.min.js7
-rw-r--r--wqflask/wqflask/static/new/js_external/shapiro-wilk.js197
-rw-r--r--wqflask/wqflask/static/new/js_external/typeahead.bundle.js2451
-rw-r--r--wqflask/wqflask/static/new/js_external/underscore-min.js32
-rw-r--r--wqflask/wqflask/static/new/js_external/underscore.string.min.js1
-rw-r--r--wqflask/wqflask/static/new/js_external/zxcvbn/zxcvbn-async.js1
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/css/demo_page.css122
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/css/demo_table.css577
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/css/demo_table_jui.css501
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables.css471
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables.min.css1
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables_themeroller.css416
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/extensions/buttons.bootstrap.css89
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/extensions/buttons.colVis.min.js5
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/extensions/buttons.dataTables.css297
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.buttons.min.js35
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.colReorder.js1372
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.colResize.js846
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.colResize2.js943
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.fixedHeader.css4
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.fixedHeader.min.js14
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/extensions/scroller.dataTables.min.css1
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/images/Sorting icons.psdbin27490 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/images/back_disabled.pngbin1361 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/images/back_enabled.pngbin1379 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/images/back_enabled_hover.pngbin1375 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/images/favicon.icobin894 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/images/forward_disabled.pngbin1363 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/images/forward_enabled.pngbin1380 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/images/forward_enabled_hover.pngbin1379 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/images/sort_asc.pngbin1118 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/images/sort_asc_disabled.pngbin1050 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/images/sort_both.pngbin1136 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/images/sort_desc.pngbin1127 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/images/sort_desc_disabled.pngbin1045 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/js/dataTables.formattedNumbers.js14
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/js/dataTables.naturalSort.js68
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/js/dataTables.scientific.js13
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/js/jquery.dataTables.js15278
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/js/jquery.dataTables.min.js166
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/js/jquery.js5
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/DataTables.js284
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/api/api.internal.js130
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/api/api.methods.js1294
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/api/api.static.js98
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/core/core.ajax.js185
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/core/core.columns.js373
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/core/core.constructor.js428
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/core/core.data.js634
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/core/core.draw.js792
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/core/core.filter.js399
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/core/core.info.js111
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/core/core.init.js153
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/core/core.length.js122
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/core/core.page.js119
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/core/core.processing.js44
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/core/core.scrolling.js511
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/core/core.sizing.js403
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/core/core.sort.js451
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/core/core.state.js216
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/core/core.support.js346
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/ext/ext.classes.js112
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/ext/ext.paging.js262
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/ext/ext.sorting.js86
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/ext/ext.types.js88
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/model/model.column.js263
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/model/model.defaults.columns.js759
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/model/model.defaults.js1952
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/model/model.ext.js528
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/model/model.row.js64
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/model/model.search.js40
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/src/model/model.settings.js882
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/controller.js94
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/controller.php100
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/index.html7
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/performance/draw.html482
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/performance/large.php108
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/performance/page.html477
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/performance/sort.html477
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/-complex_header.php469
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/2512.php464
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/6776.php116
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/complex_header_2.php485
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/deferred_table.php132
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/dom_data.php465
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/dom_data_th.php465
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/dom_data_two_headers.php472
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/dymanic_table.php45
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/empty_table.php55
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/html_table.php66
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/js_data.php124
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/js_data_mixed_types.php124
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/two_tables.php227
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests/1_dom/_zero_config.js437
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/-complex_header.js52
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/-iDraw.js41
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2512.js17
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2530-2.js15
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2530.js29
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2569.js36
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2600.js44
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2608.js54
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2635.js40
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2746-stable-sort.js199
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2799.js14
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2840-restore-table-width.js19
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2914-state-save-sort.js39
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/5396-fnUpdate-arrays.js103
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/5508-xscroll-zero-content.js23
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/6776-scrolling-table-grows.js64
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/_zero_config.js437
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aaSorting.js183
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aaSortingFixed.js60
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bSearchable.js67
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bSortable.js105
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bUseRendered.js145
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bVisible.js132
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bVisible2.js268
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.fnRender.js176
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.iDataSort.js88
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.sClass.js111
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.sName.js27
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.sTitle.js78
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.sWidth.js84
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoSearchCols.js112
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/asStripClasses.js106
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bAutoWidth.js138
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bFilter.js40
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bInfiniteScroll.js130
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bInfo.js40
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bJQueryUI.js40
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bLengthChange.js71
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bPaginate.js55
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bProcessing.js99
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bServerSide.js18
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bSort.js101
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bSortCellsTop.js77
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bSortClasses.js128
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnCookieCallback.js97
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnCreatedCell.js151
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnCreatedRow.js115
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnDeleteRow.js30
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnDrawCallback.js80
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnFilter.js16
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnFooterCallback.js227
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnHeaderCallback.js227
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnInfoCallback.js115
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnInitComplete.js94
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnRowCallback.js105
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnSetColumnVis.js120
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnSetColumnVis2.js236
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/html-autodetect-sort.js57
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/iDisplayLength.js76
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.oPaginate.js80
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sInfo.js109
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sInfoEmpty.js75
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sInfoPostFix.js73
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sLengthMenu.js106
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sProcessing.js47
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sSearch.js66
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sUrl.js59
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sZeroRecords.js45
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oSearch.js101
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/sAjaxSource.js18
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/sDom.js319
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/sPaginationType.js122
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/sScrollXY.js63
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/th_in_body.js437
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/6872-default-content-missing-props.js285
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/8549--string-sorting-nonstrings.js47
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/_zero_config.js440
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aaSorting.js198
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aaSortingFixed.js64
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.bSearchable.js71
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.bSortable.js109
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.bUseRendered.js148
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.bVisible.js110
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.fnRender.js156
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.iDataSort.js90
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.sClass.js115
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.sName.js28
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.sTitle.js82
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.sWidth.js87
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoSearchCols.js119
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/asStripClasses.js100
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bAutoWidth.js142
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bFilter.js44
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bInfo.js44
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bLengthChange.js75
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bPaginate.js59
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bProcessing.js103
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bServerSide.js20
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bSort.js99
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bSortClasses.js132
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnCreatedCell.js158
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnCreatedRow.js121
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnDrawCallback.js85
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnFooterCallback.js240
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnHeaderCallback.js240
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnInitComplete.js83
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnRowCallback.js112
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/iDisplayLength.js81
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/js_data_mixed_types.js392
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.oPaginate.js84
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sInfo.js117
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sInfoEmpty.js79
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sInfoPostFix.js78
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sLengthMenu.js111
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sProcessing.js49
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sSearch.js70
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sUrl.js62
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sZeroRecords.js48
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oSearch.js108
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/sAjaxSource.js20
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/sDom.js262
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/sPaginationType.js125
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/_zero_config.js440
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aaSorting.js198
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aaSortingFixed.js67
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.bSearchable.js76
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.bSortable.js109
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.bUseRendered.js148
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.bVisible.js124
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.fnRender.js156
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.iDataSort.js90
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.sClass.js115
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.sName.js28
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.sTitle.js82
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.sWidth.js87
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoSearchCols.js119
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/asStripClasses.js105
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bAutoWidth.js142
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bFilter.js44
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bInfo.js44
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bLengthChange.js75
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bPaginate.js59
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bProcessing.js103
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bServerSide.js20
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bSort.js99
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bSortClasses.js132
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnCreatedCell.js183
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnCreatedRow.js142
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnDrawCallback.js98
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnHeaderCallback.js191
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnInitComplete.js100
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnRowCallback.js112
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnServerData.js64
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/iDisplayLength.js81
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.oPaginate.js84
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sInfo.js117
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoEmpty.js79
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoPostFix.js78
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sLengthMenu.js111
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sLoadingRecords.js65
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sProcessing.js49
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sSearch.js70
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sUrl.js62
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sZeroRecords.js48
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oSearch.js108
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sAjaxDataProp.js139
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sAjaxDataProp2.js139
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sAjaxSource.js22
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sDom.js262
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sPaginationType.js134
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/-iDraw.js44
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/2440.js32
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/2569.js47
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/2600.js47
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/_zero_config.js424
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aaSorting.js212
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aaSortingFixed.js67
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.bSearchable.js25
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.bSortable.js112
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.bUseRendered.js43
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.bVisible.js123
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.fnRender.js162
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.sClass.js118
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.sName.js29
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.sTitle.js85
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.sWidth.js90
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoSearchCols.js70
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/asStripClasses.js109
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bAutoWidth.js145
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bFilter.js47
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bInfiniteScroll.js168
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bInfo.js47
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bLengthChange.js78
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bPaginate.js62
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bProcessing.js106
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bServerSide.js21
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bSort.js102
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bSortClasses.js135
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnCreatedCell.js190
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnCreatedRow.js148
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnDrawCallback.js89
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnHeaderCallback.js191
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnInitComplete.js89
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnRowCallback.js118
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/iDeferLoading.js95
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/iDisplayLength.js85
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.oPaginate.js86
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sInfo.js124
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoEmpty.js82
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoPostFix.js82
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sLengthMenu.js115
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sProcessing.js51
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sSearch.js73
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sUrl.js64
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sZeroRecords.js58
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oSearch.js100
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/sAjaxDataProp.js146
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/sAjaxSource.js23
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/sDom.js269
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/sPaginationType.js138
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config.js847
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_arrays_subobjects.js961
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_deep.js1075
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_null_source.js458
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects.js847
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects_subarrays.js961
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aaSorting.js296
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aaSortingFixed.js88
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSearchable.js83
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSortable.js116
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bUseRendered.js155
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bVisible.js131
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.fnRender.js177
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.iDataSort.js90
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sClass.js122
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sName.js28
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sTitle.js89
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sWidth.js87
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoSearchCols.js161
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/asStripClasses.js133
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bAutoWidth.js163
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bFilter.js65
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bInfo.js65
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bLengthChange.js96
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bPaginate.js80
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bProcessing.js124
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bServerSide.js27
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bSort.js120
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bSortClasses.js153
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnDrawCallback.js126
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnHeaderCallback.js254
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnInitComplete.js135
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnRowCallback.js154
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnServerData.js92
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/iDisplayLength.js109
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.oPaginate.js98
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfo.js166
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoEmpty.js100
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoPostFix.js106
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sLengthMenu.js139
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sProcessing.js63
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sSearch.js91
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sUrl.js76
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sZeroRecords.js62
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oSearch.js150
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/sAjaxSource.js29
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/sDom.js311
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/sPaginationType.js148
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/_zero_config.js403
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aaSorting.js212
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aaSortingFixed.js70
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSearchable.js79
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSortable.js112
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bUseRendered.js151
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bVisible.js127
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.fnRender.js190
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.iDataSort.js92
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sClass.js118
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sName.js29
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sTitle.js85
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sWidth.js90
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoSearchCols.js125
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/asStripClasses.js109
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bAutoWidth.js145
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bFilter.js47
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bInfo.js47
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bLengthChange.js78
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bPaginate.js62
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bProcessing.js106
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bServerSide.js21
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bSort.js102
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bSortClasses.js135
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnDrawCallback.js102
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnHeaderCallback.js200
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnInitComplete.js105
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnRowCallback.js118
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnServerData.js68
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/iDisplayLength.js85
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.oPaginate.js86
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfo.js124
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoEmpty.js82
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoPostFix.js82
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sLengthMenu.js115
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sProcessing.js51
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sSearch.js73
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sUrl.js64
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sZeroRecords.js50
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oSearch.js114
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp.js140
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp2.js140
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sAjaxSource.js23
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sDom.js269
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sPaginationType.js136
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/unit_testing/unit_test.js409
-rw-r--r--wqflask/wqflask/static/new/packages/noUiSlider/nouislider.css162
-rw-r--r--wqflask/wqflask/static/new/packages/noUiSlider/nouislider.js1629
-rw-r--r--wqflask/wqflask/static/new/packages/noUiSlider/nouislider.pips.css98
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/css/bootstrap-responsive.css1109
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/css/bootstrap-responsive.min.css9
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/css/bootstrap-theme.css457
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/css/bootstrap-theme.css.map1
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/css/bootstrap-theme.min.css5
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css6392
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css.map1
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/css/bootstrap.min.css5
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/css/docs.css980
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/css/non-responsive.css107
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/fonts/glyphicons-halflings-regular.eotbin20335 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/fonts/glyphicons-halflings-regular.svg229
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/fonts/glyphicons-halflings-regular.ttfbin41280 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/fonts/glyphicons-halflings-regular.woffbin23320 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/img/bs-docs-masthead-pattern.pngbin6450 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/img/glyphicons-halflings-white.pngbin8777 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/img/glyphicons-halflings.pngbin12799 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/js/bootstrap.js2276
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/js/bootstrap.min.js7
-rw-r--r--wqflask/wqflask/static/packages/colorbox/README.md456
-rw-r--r--wqflask/wqflask/static/packages/colorbox/colorbox.ai1811
-rw-r--r--wqflask/wqflask/static/packages/colorbox/colorbox.jquery.json29
-rw-r--r--wqflask/wqflask/static/packages/colorbox/component.json8
-rw-r--r--wqflask/wqflask/static/packages/colorbox/content/ajax.html11
-rw-r--r--wqflask/wqflask/static/packages/colorbox/content/daisy.jpgbin106088 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/content/daisy@2x.jpgbin354739 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/content/homer.jpgbin8917 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/content/marylou.jpgbin55125 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/content/ohoopee1.jpgbin74827 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/content/ohoopee2.jpgbin117411 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/content/ohoopee3.jpgbin71514 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example1/colorbox.css69
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example1/images/border.pngbin112 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example1/images/controls.pngbin2893 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example1/images/loading.gifbin9427 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example1/images/loading_background.pngbin157 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example1/images/overlay.pngbin182 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example1/index.html95
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example2/colorbox.css49
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example2/images/controls.pngbin570 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example2/images/loading.gifbin9427 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example2/index.html95
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example3/colorbox.css44
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example3/images/controls.pngbin1633 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example3/images/loading.gifbin9427 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example3/index.html95
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example4/colorbox.css65
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example4/images/border1.pngbin1057 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example4/images/border2.pngbin170 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example4/images/loading.gifbin9427 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example4/index.html95
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example5/colorbox.css57
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example5/images/border.pngbin163 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example5/images/controls.pngbin2033 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example5/images/loading.gifbin9427 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example5/images/loading_background.pngbin166 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/colorbox/example5/index.html95
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-ar.js15
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-bg16
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-cs.js14
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-da.js16
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-de.js15
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-es.js13
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-fa.js18
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-fi.js15
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-fr.js15
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-hr.js15
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-hu.js15
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-it.js15
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-ja.js15
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-kr.js15
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-lv.js16
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-nl.js15
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-no.js16
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-pl.js16
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-pt-br.js15
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-ro.js15
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-ru.js16
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-sk.js13
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-tr.js19
-rw-r--r--wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-zh-CN.js15
-rw-r--r--wqflask/wqflask/static/packages/colorbox/jquery.colorbox-min.js6
-rw-r--r--wqflask/wqflask/static/packages/colorbox/jquery.colorbox.js1026
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/.gitignore2
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/Cakefile11
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/LICENSE20
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/README.md123
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/bower.json52
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/index.js1
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.da.js29
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.de.js28
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.en.js29
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.es.js29
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.fr.js29
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.ja.js29
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.pt-br.js29
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.zh-cn.js29
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/timeago.js194
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/package.json21
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.da.coffee21
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.de.coffee21
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.en.coffee21
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.es.coffee22
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.fr.coffee21
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.ja.coffee21
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.pt-br.coffee21
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.zh-cn.coffee21
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/timeago.coffee152
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/index.html48
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/lib/jasmine-html.js616
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/lib/jasmine.css81
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/lib/jasmine.js2529
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/lib/jquery.js9046
-rw-r--r--wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/specs/timeago_spec.js322
-rw-r--r--wqflask/wqflask/static/packages/purescript_genome_browser/css/purescript-genetics-browser.css1
-rw-r--r--wqflask/wqflask/static/packages/purescript_genome_browser/js/purescript-genetics-browser.js659
l---------wqflask/wqflask/static/packages/smart-time-ago1
-rw-r--r--wqflask/wqflask/static/packages/underscore/underscore-min.js1
-rw-r--r--wqflask/wqflask/submit_bnw.py4
-rw-r--r--wqflask/wqflask/templates/admin/change_resource_owner.html116
-rw-r--r--wqflask/wqflask/templates/admin/create_group.html89
-rw-r--r--wqflask/wqflask/templates/admin/group_manager.html121
-rw-r--r--wqflask/wqflask/templates/admin/ind_user_manager.html2
-rw-r--r--wqflask/wqflask/templates/admin/manage_resource.html108
-rw-r--r--wqflask/wqflask/templates/admin/manage_user.html79
-rw-r--r--wqflask/wqflask/templates/admin/search_for_groups.html134
-rw-r--r--wqflask/wqflask/templates/admin/set_group_privileges.html102
-rw-r--r--wqflask/wqflask/templates/admin/view_group.html247
-rw-r--r--wqflask/wqflask/templates/base.html86
-rw-r--r--wqflask/wqflask/templates/collections/add.html5
-rw-r--r--wqflask/wqflask/templates/collections/list.html24
-rw-r--r--wqflask/wqflask/templates/collections/not_logged_in.html4
-rw-r--r--wqflask/wqflask/templates/collections/view.html161
-rw-r--r--wqflask/wqflask/templates/comparison_bar_chart.html10
-rw-r--r--wqflask/wqflask/templates/corr_scatterplot.html136
-rw-r--r--wqflask/wqflask/templates/correlation_matrix.html38
-rw-r--r--wqflask/wqflask/templates/correlation_page.html713
-rw-r--r--wqflask/wqflask/templates/credits.html4
-rw-r--r--wqflask/wqflask/templates/ctl_results.html23
-rw-r--r--wqflask/wqflask/templates/data_sharing.html18
-rw-r--r--wqflask/wqflask/templates/docedit.html2
-rw-r--r--wqflask/wqflask/templates/email/verification.txt7
-rw-r--r--wqflask/wqflask/templates/environment.html160
-rw-r--r--wqflask/wqflask/templates/environments.html83
-rw-r--r--wqflask/wqflask/templates/facilities.html24
-rw-r--r--wqflask/wqflask/templates/glossary.html23
-rw-r--r--wqflask/wqflask/templates/gsearch_gene.html53
-rw-r--r--wqflask/wqflask/templates/gsearch_pheno.html53
-rw-r--r--wqflask/wqflask/templates/heatmap.html8
-rw-r--r--wqflask/wqflask/templates/index_page.html15
-rwxr-xr-xwqflask/wqflask/templates/index_page_orig.html25
-rw-r--r--wqflask/wqflask/templates/info_page.html92
-rw-r--r--wqflask/wqflask/templates/links.html461
-rw-r--r--wqflask/wqflask/templates/loading.html13
-rw-r--r--wqflask/wqflask/templates/mapping_results.html293
-rw-r--r--wqflask/wqflask/templates/network_graph.html25
-rw-r--r--wqflask/wqflask/templates/new_security/forgot_password.html2
-rw-r--r--wqflask/wqflask/templates/new_security/forgot_password_step2.html4
-rw-r--r--wqflask/wqflask/templates/new_security/login_user.html2
-rw-r--r--wqflask/wqflask/templates/new_security/not_authenticated.html11
-rw-r--r--wqflask/wqflask/templates/new_security/password_reset.html3
-rw-r--r--wqflask/wqflask/templates/new_security/register_user.html3
-rw-r--r--wqflask/wqflask/templates/new_security/registered.html3
-rw-r--r--wqflask/wqflask/templates/new_security/thank_you.html4
-rw-r--r--wqflask/wqflask/templates/new_security/verification_still_needed.html4
-rw-r--r--wqflask/wqflask/templates/pair_scan_results.html16
-rw-r--r--wqflask/wqflask/templates/policies.html31
-rw-r--r--wqflask/wqflask/templates/reference.html1497
-rw-r--r--wqflask/wqflask/templates/references.html19
-rw-r--r--wqflask/wqflask/templates/search_result_page.html321
-rw-r--r--wqflask/wqflask/templates/set_group_privileges.html77
-rw-r--r--wqflask/wqflask/templates/show_trait.html358
-rw-r--r--wqflask/wqflask/templates/show_trait_calculate_correlations.html184
-rw-r--r--wqflask/wqflask/templates/show_trait_details.html41
-rw-r--r--wqflask/wqflask/templates/show_trait_edit_data.html85
-rwxr-xr-xwqflask/wqflask/templates/show_trait_mapping_tools.html311
-rw-r--r--wqflask/wqflask/templates/show_trait_statistics.html229
-rw-r--r--wqflask/wqflask/templates/show_trait_transform_and_filter.html192
-rw-r--r--wqflask/wqflask/templates/snp_browser.html152
-rw-r--r--wqflask/wqflask/templates/tool_buttons.html35
-rw-r--r--wqflask/wqflask/templates/tutorials.html1
-rw-r--r--wqflask/wqflask/update_search_results.py2
-rw-r--r--wqflask/wqflask/user_login.py87
-rw-r--r--wqflask/wqflask/user_manager.py79
-rw-r--r--wqflask/wqflask/user_session.py46
-rw-r--r--wqflask/wqflask/views.py325
-rw-r--r--wqflask/wqflask/wgcna/wgcna_analysis.py201
835 files changed, 24366 insertions, 128256 deletions
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 00000000..af60c290
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,28 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: '[Bug] Bug Title'
+labels: ''
+assignees: ''
+
+---
+
+**Describe the bug**
+<!-- A clear and concise description of what the bug is. -->
+
+**To Reproduce**
+<!-- Steps to reproduce the behavior -->
+
+**Expected behavior**
+<!-- A clear and concise description of what you expected to happen. -->
+
+**Screenshots**
+<!-- If applicable, add screenshots to help explain your problem. -->
+
+**Environment setup (please complete the following information):**
+<!-- - OS: [e.g. Linux] -->
+<!-- - Guix Version (optional) -->
+<!-- - [Anything else you think is relevant] -->
+
+**Additional context**
+<!-- Add any other context about the problem here. -->
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 00000000..813974c1
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,30 @@
+---
+name: Feature request
+about: Suggest a new feature for this project(Very Specific)
+title: '[Feature] My-cool-feature'
+labels: ''
+assignees: ''
+
+---
+
+## Is your feature request related to a problem? Please describe.
+<!-- A clear and concise description of what the problem is. -->
+<!-- Example: I'm always frustrated when [...] -->
+
+## Describe the solution you'd like
+<!-- A clear and concise description of what you want to happen. -->
+
+## Describe alternatives you've considered
+<!-- A clear and concise description of any alternative solutions or features you've considered. -->
+
+## User Stories (optional)
+<!-- Example: -->
+<!-- As a _[role or persona]_, I want _[goal/ need]_ so that _[why]_ -->
+<!-- **Feature:** _[Brief description of feature]_ -->
+<!-- _[Any additional descriptions on feature]_ -->
+<!-- **Scenario:**
+Please use _[Gherkin](https://cucumber.io/docs/gherkin/reference/)_
+here -->
+
+## Additional context
+<!-- Add any other context or screenshots about the feature request here. -->
diff --git a/.github/ISSUE_TEMPLATE/user_story.md b/.github/ISSUE_TEMPLATE/user_story.md
new file mode 100644
index 00000000..d46976ba
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/user_story.md
@@ -0,0 +1,12 @@
+---
+name: User Story
+about: Suggest an idea for this project
+title: ['Feature] My-cool-new-feature'
+labels: ''
+assignees: ''
+
+---
+<!-- As a _[role or persona]_, I want _[goal/ need]_ so that _[why]_ -->
+<!-- **Feature:** _[Brief description of feature]_ -->
+<!-- _[Any additional descriptions on feature]_ -->
+<!-- **Scenario:** Please use _[Gherkin](https://cucumber.io/docs/gherkin/reference/)_ here -->
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 00000000..926b0548
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,17 @@
+#### Description
+<!--Brief description of the PR. What does this PR do? -->
+
+#### How should this be tested?
+<!-- What should you do to test this PR? Is there any manual quality
+assurance checks that should be done. What are the expectations -->
+
+#### Any background context you want to provide?
+<!-- Anything the reviewer should be aware of ahead of testing -->
+
+#### What are the relevant pivotal tracker stories?
+<!-- Does this PR track anything anywhere? -->
+
+#### Screenshots (if appropriate)
+
+#### Questions
+<!-- Are there any questions for the reviewer -->
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 00000000..a36abc0a
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,66 @@
+name: tests
+
+# Run actions when pushing to the testing branch or when you create a
+# PR against it
+on:
+ push:
+ branches: [ testing ]
+ pull_request:
+ branches: [ testing ]
+
+jobs:
+ unittest:
+ runs-on: ubuntu-latest
+ container: bonfacekilz/python3-genenetwork2:ad741c1
+
+ steps:
+ # First start with mariadb set then checkout. The checkout gives
+ # the mysqld enough time to start
+ - name: Set up mariadb
+ run: |
+ mysql_install_db --user=mysql --datadir=/usr/local/mysql
+ # Wait for the mysqld_safe process to start
+ mysqld_safe --user=mysql --datadir=/usr/local/mysql &
+
+ # Use v1 of checkout since v2 fails
+ - name: Checkout Project
+ uses: actions/checkout@v1
+
+ # Redis is required by some of the tests 6379
+ - name: Start Redis
+ run: |
+ /gn2-profile/bin/screen -dmLS redisconn /gn2-profile/bin/redis-server
+
+ # Redis is required by some of the tests 6379
+ - name: Bootstrap tables
+ run: |
+ mysql -u root -e "SHOW DATABASES;"
+ mysql -u root -e "CREATE DATABASE db_webqtl_s;"
+ mysql -u root -e "CREATE USER 'gn2'@'localhost' IDENTIFIED BY 'mysql_password';"
+ mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'gn2'@'localhost';FLUSH PRIVILEGES;"
+
+ - name: Run the unit tests
+ run: |
+ env GN2_PROFILE=/gn2-profile \
+ TMPDIR=/tmp SERVER_PORT=5004 \
+ WEBSERVER_MODE=DEBUG LOG_LEVEL=DEBUG \
+ GENENETWORK_FILES=/genotype_files/ bin/genenetwork2 \
+ etc/default_settings.py -c -m unittest discover -v
+
+ - name: Start Genenetwork as a Background Task
+ run: |
+ env GN2_PROFILE=/gn2-profile \
+ TMPDIR=/tmp SERVER_PORT=5004 \
+ WEBSERVER_MODE=DEBUG LOG_LEVEL=DEBUG \
+ GENENETWORK_FILES=/genotype_files/ bin/genenetwork2 \
+ etc/default_settings.py&
+
+ - name: Test for Broken Links
+ run: |
+
+ env GN2_PROFILE=/gn2-profile \
+ TMPDIR=/tmp\
+ WEBSERVER_MODE=DEBUG LOG_LEVEL=DEBUG \
+ GENENETWORK_FILES=/genotype_files/ bin/genenetwork2 \
+ etc/default_settings.py -c /__w/genenetwork2/genenetwork2/test/requests/links_scraper/genelinks.py
+
diff --git a/.gitignore b/.gitignore
index 701623e7..8183b308 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,5 @@ dist/
EGG-INFO/
wqflask/output/*
wqflask/wqflask/static/output/*
+wqflask/.coverage
+wqflask/coverage_html_report \ No newline at end of file
diff --git a/README.md b/README.md
index 47519118..bfb16ddb 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,14 @@
[![DOI](https://zenodo.org/badge/5591/genenetwork/genenetwork2.svg)](https://zenodo.org/badge/latestdoi/5591/genenetwork/genenetwork2) [![JOSS](http://joss.theoj.org/papers/10.21105/joss.00025/status.svg)](http://joss.theoj.org/papers/10.21105/joss.00025)
+[![Actions Status](https://github.com/genenetwork/genenetwork2/workflows/tests/badge.svg)](https://github.com/genenetwork/genenetwork2/actions)
# GeneNetwork
-This repository contains the source code for the GeneNetwork (GN)
-server http://gn2.genenetwork.org/ (version 2 aka GN2). GN is a Web
-2.0 style framework with included tools for doing genetics online
-using high-throughput data. GN is used for a wide range of studies. An
-exhaustive list of publications mentioning GN and its previous
-incarnation WebQTL can be found
-[here](http://www.genenetwork.org/reference.html).
+This repository contains the current source code for GeneNetwork (GN)
+(https://www.genenetwork.org/ (version 2). GN2 is a Web
+2.0-style framework that includes data and computational tools for online genetics and genomic analysis of
+many different populations and many types of molecular, cellular, and physiological data.
+The system is used by scientists and clinians in the field of precision health care and systems genetics.
+GN and its predecessors have been in operation since Jan 1994, making it one of the longest-lived web services in biomedical research (https://en.wikipedia.org/wiki/GeneNetwork, and see a partial list of publications using GN and its predecessor, WebQTL (https://genenetwork.org/references/).
## Install
@@ -19,7 +19,8 @@ developers). See the [installation docs](doc/README.org).
## Run
-Once installed GN2 can be run online through a browser interface
+Once having installed GN2 it can be run through a browser
+interface
```sh
genenetwork2
@@ -35,14 +36,26 @@ For full examples (you may need to set a number of environment
variables), including running scripts and a Python REPL, also see the
startup script [./bin/genenetwork2](https://github.com/genenetwork/genenetwork2/blob/testing/bin/genenetwork2).
-Also Mysql and Elasticsearch need to be running, see
+Also mariadb and redis need to be running, see
[INSTALL](./doc/README.org).
## Testing
+To have tests pass, the redis and mariadb instance should be running, because of
+asserts sprinkled in the code base.
+
+Right now, the only tests running in CI are unittests. Please make
+sure the existing unittests are green when submitting a PR.
+
+See
+[./bin/genenetwork2](https://github.com/genenetwork/genenetwork2/blob/testing/doc/docker-container.org)
+for more details.
+
+#### Mechanical Rob
+
We are building 'Mechanical Rob' automated testing using Python
-[requests](https://github.com/genenetwork/genenetwork2/tree/master/test/lib)
-which can be run with something like
+[requests](https://github.com/genenetwork/genenetwork2/tree/testing/test/requests)
+which can be run with:
```sh
env GN2_PROFILE=~/opt/gn-latest ./bin/genenetwork2 ./etc/default_settings.py -c ../test/requests/test-website.py -a http://localhost:5003
@@ -54,6 +67,32 @@ and executes test-website.py in a Python interpreter. The -a switch
says to run all tests and the URL points to the running GN2 http
server.
+#### Unit tests
+
+To run unittests, first `cd` into the genenetwork2 directory:
+
+```sh
+# You can use the coverage tool to run the tests
+# You could omit the -v which makes the output verbose
+runcmd coverage run -m unittest discover -v
+
+# Alternatively, you could run the unittests using:
+runpython -m unittest discover -v
+
+# To generate a report in wqflask/coverage_html_report/:
+runcmd coverage html
+```
+
+The `runcmd` and `runpython` are shell aliases defined in the following way:
+
+```sh
+alias runpython="env GN2_PROFILE=~/opt/gn-latest TMPDIR=/tmp SERVER_PORT=5004 GENENETWORK_FILES=/gnu/data/gn2_data/ ./bin/genenetwork2
+
+alias runcmd="time env GN2_PROFILE=~/opt/gn-latest TMPDIR=//tmp SERVER_PORT=5004 GENENETWORK_FILES=/gnu/data/gn2_data/ ./bin/genenetwork2 ./etc/default_settings.py -cli"
+```
+
+Replace some of the env variables as per your use case.
+
## Documentation
User documentation can be found
@@ -73,10 +112,10 @@ Contribute to GN2 source code by forking the
[github repository](https://github.com/genenetwork/genenetwork2/) with
git and sending us pull requests.
-For development GN2 has a
-[mailing list](http://listserv.uthsc.edu/mailman/listinfo/genenetwork-dev)
-and an active IRC channel #genenetwork on freenode.net with a
-[web interface](http://webchat.freenode.net/).
+For development GN2 has a [mailing
+list](http://listserv.uthsc.edu/mailman/listinfo/genenetwork-dev) and
+an active IRC channel #genenetwork on freenode.net with a [web
+interface](http://webchat.freenode.net/).
## License
diff --git a/api_readme.md b/api_readme.md
new file mode 100644
index 00000000..96e8b246
--- /dev/null
+++ b/api_readme.md
@@ -0,0 +1,155 @@
+# API Query Documentation #
+---
+# Fetching Dataset/Trait info/data #
+---
+## Fetch Species List ##
+
+To get a list of species with data available in GN (and their associated names and ids):
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/species
+[ { "FullName": "Mus musculus", "Id": 1, "Name": "mouse", "TaxonomyId": 10090 }, ... { "FullName": "Populus trichocarpa", "Id": 10, "Name": "poplar", "TaxonomyId": 3689 } ]
+```
+
+Or to get a single species info:
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/species/mouse
+```
+OR
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/species/mouse.json
+```
+
+*For all queries where the last field is a user-specified name/ID, there will be the option to append a file format type. Currently there is only JSON (and it will default to JSON if none is provided), but other formats will be added later*
+
+## Fetch Groups/RISets ##
+
+This query can optionally filter by species:
+
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/groups (for all species)
+```
+OR
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/mouse/groups (for just mouse groups/RISets)
+[ { "DisplayName": "BXD", "FullName": "BXD RI Family", "GeneticType": "riset", "Id": 1, "MappingMethodId": "1", "Name": "BXD", "SpeciesId": 1, "public": 2 }, ... { "DisplayName": "AIL LGSM F34 and F39-43 (GBS)", "FullName": "AIL LGSM F34 and F39-43 (GBS)", "GeneticType": "intercross", "Id": 72, "MappingMethodId": "2", "Name": "AIL-LGSM-F34-F39-43-GBS", "SpeciesId": 1, "public": 2 } ]
+```
+
+## Fetch Genotypes for Group/RISet ##
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/genotypes/BXD
+```
+Returns a CSV file with metadata in the first few rows, sample/strain names as columns, and markers as rows. Currently only works for genotypes we have stored in .geno files; I'll add the option to download BIMBAM files soon.
+
+## Fetch Datasets ##
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/datasets/bxd
+```
+OR
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/datasets/mouse/bxd
+[ { "AvgID": 1, "CreateTime": "Fri, 01 Aug 2003 00:00:00 GMT", "DataScale": "log2", "FullName": "UTHSC/ETHZ/EPFL BXD Liver Polar Metabolites Extraction A, CD Cohorts (Mar 2017) log2", "Id": 1, "Long_Abbreviation": "BXDMicroArray_ProbeSet_August03", "ProbeFreezeId": 3, "ShortName": "Brain U74Av2 08/03 MAS5", "Short_Abbreviation": "Br_U_0803_M", "confidentiality": 0, "public": 0 }, ... { "AvgID": 3, "CreateTime": "Tue, 14 Aug 2018 00:00:00 GMT", "DataScale": "log2", "FullName": "EPFL/LISP BXD CD Liver Affy Mouse Gene 1.0 ST (Aug18) RMA", "Id": 859, "Long_Abbreviation": "EPFLMouseLiverCDRMAApr18", "ProbeFreezeId": 181, "ShortName": "EPFL/LISP BXD CD Liver Affy Mouse Gene 1.0 ST (Aug18) RMA", "Short_Abbreviation": "EPFLMouseLiverCDRMA0818", "confidentiality": 0, "public": 1 } ]
+```
+(I added the option to specify species just in case we end up with the same group name across multiple species at some point, though it's currently unnecessary)
+
+## Fetch Sample Data for Dataset ##
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/sample_data/HSNIH-PalmerPublish.csv
+```
+
+Returns a CSV file with sample/strain names as the columns and trait IDs as rows
+
+## Fetch Individual Dataset Info ##
+### For mRNA Assay/"ProbeSet" ###
+
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/dataset/HC_M2_0606_P
+```
+OR
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/dataset/bxd/HC_M2_0606_P```
+{ "confidential": 0, "data_scale": "log2", "dataset_type": "mRNA expression", "full_name": "Hippocampus Consortium M430v2 (Jun06) PDNN", "id": 112, "name": "HC_M2_0606_P", "public": 2, "short_name": "Hippocampus M430v2 BXD 06/06 PDNN", "tissue": "Hippocampus mRNA", "tissue_id": 9 }
+```
+(This also has the option to specify group/riset)
+
+### For "Phenotypes" (basically non-mRNA Expression; stuff like weight, sex, etc) ###
+For these traits, the query fetches publication info and takes the group and phenotype 'ID' as input. For example:
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/dataset/bxd/10001
+{ "dataset_type": "phenotype", "description": "Central nervous system, morphology: Cerebellum weight, whole, bilateral in adults of both sexes [mg]", "id": 10001, "name": "CBLWT2", "pubmed_id": 11438585, "title": "Genetic control of the mouse cerebellum: identification of quantitative trait loci modulating size and architecture", "year": "2001" }
+```
+
+## Fetch Sample Data for Single Trait ##
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/sample_data/HC_M2_0606_P/1436869_at
+[ { "data_id": 23415463, "sample_name": "129S1/SvImJ", "sample_name_2": "129S1/SvImJ", "se": 0.123, "value": 8.201 }, { "data_id": 23415463, "sample_name": "A/J", "sample_name_2": "A/J", "se": 0.046, "value": 8.413 }, { "data_id": 23415463, "sample_name": "AKR/J", "sample_name_2": "AKR/J", "se": 0.134, "value": 8.856 }, ... ]
+```
+
+## Fetch Trait Info (Name, Description, Location, etc) ##
+### For mRNA Expression/"ProbeSet" ###
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/trait/HC_M2_0606_P/1436869_at
+{ "additive": -0.214087568058076, "alias": "HHG1; HLP3; HPE3; SMMCI; Dsh; Hhg1", "chr": "5", "description": "sonic hedgehog (hedgehog)", "id": 99602, "locus": "rs8253327", "lrs": 12.7711275309832, "mb": 28.457155, "mean": 9.27909090909091, "name": "1436869_at", "p_value": 0.306, "se": null, "symbol": "Shh" }
+```
+
+### For "Phenotypes" ###
+For phenotypes this just gets the max LRS, its location, and additive effect (as calculated by qtlreaper)
+
+Since each group/riset only has one phenotype "dataset", this query takes either the group/riset name or the group/riset name + "Publish" (for example "BXDPublish", which is the dataset name in the DB) as input
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/trait/BXD/10001
+{ "additive": 2.39444435069444, "id": 4, "locus": "rs48756159", "lrs": 13.4974911471087 }
+```
+
+---
+
+# Analyses #
+---
+## Mapping ##
+Currently two mapping tools can be used - GEMMA and R/qtl. qtlreaper will be added later with Christian Fischer's RUST implementation - https://github.com/chfi/rust-qtlreaper
+
+Each method's query takes the following parameters respectively (more will be added):
+### GEMMA ###
+* trait_id (*required*) - ID for trait being mapped
+* db (*required*) - DB name for trait above (Short_Abbreviation listed when you query for datasets)
+* use_loco - Whether to use LOCO (leave one chromosome out) method (default = false)
+* maf - minor allele frequency (default = 0.01)
+
+Example query:
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/mapping?trait_id=10015&db=BXDPublish&method=gemma&use_loco=true
+```
+
+### R/qtl ###
+(See the R/qtl guide for information on some of these options - http://www.rqtl.org/manual/qtl-manual.pdf)
+* trait_id (*required*) - ID for trait being mapped
+* db (*required*) - DB name for trait above (Short_Abbreviation listed when you query for datasets)
+* rqtl_method - hk (default) | ehk | em | imp | mr | mr-imp | mr-argmax ; Corresponds to the "method" option for the R/qtl scanone function.
+* rqtl_model - normal (default) | binary | 2-part | np ; corresponds to the "model" option for the R/qtl scanone function
+* num_perm - number of permutations; 0 by default
+* control_marker - Name of marker to use as control; this relies on the user knowing the name of the marker they want to use as a covariate
+* interval_mapping - Whether to use interval mapping; "false" by default
+* pair_scan - *NYI*
+
+Example query:
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/mapping?trait_id=1418701_at&db=HC_M2_0606_P&method=rqtl&num_perm=100
+```
+
+Some combinations of methods/models may not make sense. The R/qtl manual should be referred to for any questions on its use (specifically the scanone function in this case)
+
+## Calculate Correlation ##
+Currently only Sample and Tissue correlations are implemented
+
+This query currently takes the following parameters (though more will be added):
+* trait_id (*required*) - ID for trait used for correlation
+* db (*required*) - DB name for the trait above (this is the Short_Abbreviation listed when you query for datasets)
+* target_db (*required*) - Target DB name to be correlated against
+* type - sample (default) | tissue
+* method - pearson (default) | spearman
+* return - Number of results to return (default = 500)
+
+Example query:
+```
+curl http://gn2-zach.genenetwork.org/api/v_pre1/correlation?trait_id=1427571_at&db=HC_M2_0606_P&target_db=BXDPublish&type=sample&return_count=100
+[ { "#_strains": 6, "p_value": 0.004804664723032055, "sample_r": -0.942857142857143, "trait": 20511 }, { "#_strains": 6, "p_value": 0.004804664723032055, "sample_r": -0.942857142857143, "trait": 20724 }, { "#_strains": 12, "p_value": 1.8288943424888848e-05, "sample_r": -0.9233615170820528, "trait": 13536 }, { "#_strains": 7, "p_value": 0.006807187408935392, "sample_r": 0.8928571428571429, "trait": 10157 }, { "#_strains": 7, "p_value": 0.006807187408935392, "sample_r": -0.8928571428571429, "trait": 20392 }, ... ]
+```
diff --git a/bin/genenetwork2 b/bin/genenetwork2
index 3ae08e0a..5f4e0f9a 100755
--- a/bin/genenetwork2
+++ b/bin/genenetwork2
@@ -60,7 +60,7 @@ GN2_ID=$(cat /etc/hostname):$(basename $GN2_BASE_DIR)
echo GN2_BASE_DIR=$GN2_BASE_DIR
-GUIX_SITE=$GN2_BASE_DIR/lib/python2.7/site-packages
+GUIX_SITE=$GN2_BASE_DIR/lib/python3.8/site-packages
if [ -d $GUIX_SITE ]; then
echo INFO: GN2 is running from GNU Guix
GN2_BASE_DIR=$GUIX_SITE
@@ -105,7 +105,7 @@ echo GN2_SETTINGS=$settings
# if [ -z $ELASTICSEARCH_PROFILE ]; then
# echo -e "WARNING: Elastic Search profile has not been set - use ELASTICSEARCH_PROFILE";
# else
-# PYTHONPATH="$PYTHONPATH${PYTHONPATH:+:}$ELASTICSEARCH_PROFILE/lib/python2.7/site-packages"
+# PYTHONPATH="$PYTHONPATH${PYTHONPATH:+:}$ELASTICSEARCH_PROFILE/lib/python3.8/site-packages"
# fi
if [ -z $GN2_PROFILE ] ; then
@@ -121,7 +121,7 @@ if [ -z $GN2_PROFILE ]; then
read -p "PRESS [ENTER] TO CONTINUE..."
else
export PATH=$GN2_PROFILE/bin:$PATH
- export PYTHONPATH="$GN2_PROFILE/lib/python2.7/site-packages" # never inject another PYTHONPATH!!
+ export PYTHONPATH="$GN2_PROFILE/lib/python3.8/site-packages" # never inject another PYTHONPATH!!
export R_LIBS_SITE=$GN2_PROFILE/site-library
export JS_GUIX_PATH=$GN2_PROFILE/share/genenetwork2/javascript
export GUIX_GTK3_PATH="$GN2_PROFILE/lib/gtk-3.0"
@@ -154,7 +154,7 @@ if [ ! -d $R_LIBS_SITE ] ; then
fi
# We may change this one:
-export PYTHONPATH=$GN2_BASE_DIR/wqflask:$PYTHONPATH
+export PYTHONPATH=$PYTHON_GN_PATH:$GN2_BASE_DIR/wqflask:$PYTHONPATH
# Our UNIX TMPDIR defaults to /tmp - change this on a shared server
if [ -z $TMPDIR ]; then
diff --git a/doc/GUIX-Reproducible-from-source.org b/doc/GUIX-Reproducible-from-source.org
index 19e4d14f..fffa9571 100644
--- a/doc/GUIX-Reproducible-from-source.org
+++ b/doc/GUIX-Reproducible-from-source.org
@@ -167,7 +167,7 @@ the Guix suggested environment vars. Check the output of
#+begin_src bash
guix package --search-paths
-export PYTHONPATH="/root/.guix-profile/lib/python2.7/site-packages"
+export PYTHONPATH="/root/.guix-profile/lib/python3.8/site-packages"
export R_LIBS_SITE="/root/.guix-profile/site-library/"
#+end_src
@@ -265,7 +265,7 @@ software.
If something is not working, take a hint from the settings file
that comes in the Guix installation. It sits in something like
-: cat ~/.guix-profile/lib/python2.7/site-packages/genenetwork2-2.0-py2.7.egg/etc/default_settings.py
+: cat ~/.guix-profile/lib/python3.8/site-packages/genenetwork2-2.0-py2.7.egg/etc/default_settings.py
** Set up nginx port forwarding
@@ -380,7 +380,7 @@ After setting the paths for the server
#+begin_src bash
export PATH=~/.guix-profile/bin:$PATH
-export PYTHONPATH="$HOME/.guix-profile/lib/python2.7/site-packages"
+export PYTHONPATH="$HOME/.guix-profile/lib/python3.8/site-packages"
export R_LIBS_SITE="$HOME/.guix-profile/site-library/"
export GUIX_GTK3_PATH="$HOME/.guix-profile/lib/gtk-3.0"
export GI_TYPELIB_PATH="$HOME/.guix-profile/lib/girepository-1.0"
diff --git a/doc/README.org b/doc/README.org
index c2ef2d57..43c92e3c 100644
--- a/doc/README.org
+++ b/doc/README.org
@@ -4,9 +4,12 @@
- [[#introduction][Introduction]]
- [[#install][Install]]
- [[#running-gn2][Running GN2]]
+ - [[#run-gn-proxy][Run gn-proxy]]
+ - [[#run-redis][Run Redis]]
- [[#run-mariadb-server][Run MariaDB server]]
- [[#install-mariadb-with-gnu-guix][Install MariaDB with GNU GUIx]]
- [[#load-the-small-database-in-mysql][Load the small database in MySQL]]
+ - [[#get-genotype-files][Get genotype files]]
- [[#gn2-dependency-graph][GN2 Dependency Graph]]
- [[#working-with-the-gn2-source-code][Working with the GN2 source code]]
- [[#read-more][Read more]]
@@ -16,7 +19,6 @@
- [[#cant-run-a-module][Can't run a module]]
- [[#rpy2-error-show-now-found][Rpy2 error 'show' now found]]
- [[#mysql-cant-connect-server-through-socket-error][Mysql can't connect server through socket ERROR]]
- - [[#irc-session][IRC session]]
- [[#notes][NOTES]]
- [[#deploying-gn2-official][Deploying GN2 official]]
@@ -57,28 +59,39 @@ or you can set environment variables to override individual parameters, e.g.
the debug and logging switches can be particularly useful when
developing GN2.
-* Running Redis
+* Run gn-proxy
-Install redis. Make sure you add the setting:
+GeneNetwork requires a separate gn-proxy server which handles
+authorisation and access control. For instructions see the [[https://github.com/genenetwork/gn-proxy][README]].
-: appendonly yes
+* Run Redis
+
+Redis part of GN2 deployment and will be started by the ./bin/genenetwork2
+startup script.
* Run MariaDB server
** Install MariaDB with GNU GUIx
-/Note: we moved to MariaDB/
-
These are the steps you can take to install a fresh installation of
mariadb (which comes as part of the GNU Guix genenetwork2 install).
-As root configure and run
+As root configure the Guix profile
+
+: . ~/opt/genenetwork2/etc/profile
+
+and run for example
#+BEGIN_SRC bash
adduser mariadb && addgroup mariadb
-mysqld --datadir=/home/mariadb/database --initialize-insecure
-mkdir -p /var/run/mariadbd
-chown mariadb.mariadb /var/run/mariadbd
-mysqld -u mariadb --datadir=/home/mariadb/database/mariadb --explicit_defaults_for_timestamp -P 12048"
+mkdir -p /export2/mariadb/database
+chown mariadb.mariadb -R /export2/mariadb/
+mkdir -p /var/run/mysqld
+chown mariadb.mariadb /var/run/mysqld
+su mariadb
+mysql --version
+ mysql Ver 15.1 Distrib 10.1.45-MariaDB, for Linux (x86_64) using readline 5.1
+mysql_install_db --user=mariadb --datadir=/export2/mariadb/database
+mysqld -u mariadb --datadir=/exportdb/mariadb/database/mariadb --explicit_defaults_for_timestamp -P 12048"
#+END_SRC
If you want to run as root you may have to set
@@ -120,21 +133,22 @@ material.
Download one database from
-[[http://files.genenetwork.org/raw_database/]]
-
-[[https://s3.amazonaws.com/genenetwork2/db_webqtl_s.zip]]
+http://ipfs.genenetwork.org/ipfs/QmRUmYu6ogxEdzZeE8PuXMGCDa8M3y2uFcfo4zqQRbpxtk
-Check the md5sum.
+After installation unzip the database binary in the MySQL directory
-After installation inflate the database binary in the MySQL directory
-
-: cd ~/mysql
-: chown -R mysql:mysql db_webqtl_s/
-: chmod 700 db_webqtl_s/
-: chmod 660 db_webqtl_s/*
+#+BEGIN_SRC sh
+cd ~/mysql
+p7zip -d db_webqtl_s.7z
+chown -R mysql:mysql db_webqtl_s/
+chmod 700 db_webqtl_s/
+chmod 660 db_webqtl_s/*
+#+END_SRC
restart MySQL service (mysqld). Login as root
+: mysql_upgrade -u root --force
+
: myslq -u root
and
@@ -151,7 +165,7 @@ and
Set permissions and match password in your settings file below:
-: mysql> grant all privileges on db_webqtl_s.* to gn2@"localhost" identified by 'mysql_password';
+: mysql> grant all privileges on db_webqtl_s.* to gn2@"localhost" identified by 'webqtl';
You may need to change "localhost" to whatever domain you are
connecting from (mysql will give an error).
@@ -163,6 +177,17 @@ configuration (see below).
Note for the plant database you can rename it to db_webqtl_s, or
change the settings in etc/default_settings.py to match your path.
+* Get genotype files
+
+The script looks for genotype files. You can find them in
+http://ipfs.genenetwork.org/ipfs/QmXQy3DAUWJuYxubLHLkPMNCEVq1oV7844xWG2d1GSPFPL
+
+#+BEGIN_SRC sh
+mkdir -p $HOME/genotype_files
+cd $HOME/genotype_files
+
+#+END_SRC
+
* GN2 Dependency Graph
Graph of all runtime dependencies as installed by GNU Guix.
@@ -193,7 +218,7 @@ information given by guix:
On one system:
-: export PYTHONPATH="$HOME/.guix-profile/lib/python2.7/site-packages"
+: export PYTHONPATH="$HOME/.guix-profile/lib/python3.8/site-packages"
: export R_LIBS_SITE="$HOME/.guix-profile/site-library/"
: export GEM_PATH="$HOME/.guix-profile/lib/ruby/gems/2.2.0"
@@ -249,439 +274,30 @@ if that works run genenetwork after setting SQL_URI to something like
: export SQL_URI=mysql://gn2:mysql_password@127.0.0.1/db_webqtl_s
-
-* IRC session
-
-Here an IRC session where we installed GN2 from scratch using GNU Guix
-and a download of the test database.
-
-#+begin_src
-<pjotrp> time to get binary install sorted :) [07:03]
-<pjotrp> Guix is designed for distributed installation servers
-<pjotrp> we have one on guix.genenetwork.org
-<pjotrp> it contains all the prebuild packages
-<pjotrp> for GN
-<user01> okay [07:04]
-<pjotrp> let's step back however [07:05]
-<pjotrp> I presume the environment is set with all guix package --search-paths
-<pjotrp> right?
-<user01> yep
-<user01> set to the ones in ~/.guix-profile/
-<pjotrp> good, and you are in gn-deploy-guix repo [07:06]
-<user01> yep [07:07]
-<pjotrp> git log shows
-
-Author: David Thompson <dthompson2@worcester.edu>
-Date: Sun Mar 27 21:20:19 2016 -0400
-
-<user01> yes
-<pjotrp> env GUIX_PACKAGE_PATH=../guix-bioinformatics ./pre-inst-env guix
- package -A genenetwork2 [07:08]
-<pjotrp> shows
-
-genenetwork2 2.0-a8fcff4 out ../guix-bioinformatics/gn/packages/genenetwork.scm:144:2
-genenetwork2-database-small 1.0 out ../guix-bioinformatics/gn/packages/genenetwork.scm:270:4
-genenetwork2-files-small 1.0 out ../guix-bioinformatics/gn/packages/genenetwork.scm:228:4
-
-<user01> yeah [07:09]
-<pjotrp> OK, we are in sync. This means we should be able to install the exact
- same software
-<pjotrp> I need to start up my guix daemon - I usually run it in a screen
-<pjotrp> screen -S guix-daemon
-<user01> hah, I don't have screen installed yet [07:11]
-<pjotrp> comes with guix ;) [07:12]
-<pjotrp> no worries, you can run it any way you want
-<pjotrp> $HOME/.guix-profile/bin/guix-daemon --build-users-group=guixbuild
-<user01> then something's weird, because it says I don't have it
-<pjotrp> oh, you need to install it first [07:13]
-<pjotrp> guix package -A screen
-<pjotrp> screen 4.3.1 out gnu/packages/screen.scm:34:2
-<pjotrp> but you can skip this install, for now
-<user01> alright [07:14]
-<pjotrp> env GUIX_PACKAGE_PATH=../guix-bioinformatics ./pre-inst-env guix
- package -i genenetwork2 --dry-run
-<pjotrp> substitute: updating list of substitutes from
- 'https://mirror.hydra.gnu.org'... 79.1%
-<pjotrp> you see that?
-<pjotrp> followed by [07:15]
-substitute: updating list of substitutes from
-'https://hydra.gnu.org'... 100.0%
-The following derivations would be built:
- /gnu/store/rk7nw0rjqqsha958m649wrykadx6mmhl-profile.drv
-
-/gnu/store/7b0qjybvfx8syzvfs7p5rdablwhbkbvs-module-import-compiled.drv
- /gnu/store/cy9zahbbf23d3cqyy404lk9f50z192kp-module-import.drv
- /gnu/store/ibdn603i8grf0jziy5gjsly34wx82lmk-gtk-icon-themes.drv
-
-<pjotrp> which should have the same HASH values /gnu/store/7b0qjybvf... etc.
- [07:16]
-<user01> profile has a different hash
-<pjotrp> but the next ones?
-<user01> they're the same
-<pjotrp> not sure why profile differs. Do you see the contact with
- mirror.hydra.org? [07:17]
-<user01> yeah
-<pjotrp> OK, that means you set the key correctly for that one :)
-<pjotrp> alright we are at the same state now. You can see most packages need
- to be rebuild because they are no longer cached as binaries on hydra
- [07:18]
-<pjotrp> things move fast...
-<user01> hehe
-<pjotrp> let me also do the same on my laptop - which I have staged before
- [07:19]
-<pjotrp> btw, to set the path I often do [07:20]
-<pjotrp> export
- PATH="/home/wrk/.guix-profile/bin:/home/wrk/.guix-profile/sbin":$PATH
-<pjotrp> to keep things like 'screen' from Debian
-<pjotrp> Once past building guix itself that is normally OK [07:21]
-<user01> ah, okay
-<user01> will do that
-<pjotrp> the guix build requires certain versions of tools, so you don't want
- to mix foreign tools in [07:23]
-<user01> makes sense [07:24]
-<pjotrp> On my laptop I am trying the main updating list of substitutes from
- 'http://hydra.gnu.org'... 10.5% [07:27]
-<pjotrp> it is a bit slow, but let's see if there is a difference with the
- mirror
-<pjotrp> you can see there are two servers here. Actually with recent daemons,
- if the mirror fails it will try the main server [07:28]
-<pjotrp> I documented the use of a caching server here [07:29]
-<pjotrp> https://github.com/pjotrp/guix-notes/blob/master/REPRODUCIBLE.org
-<pjotrp> this is exactly what we are doing now
-<user01> alrighty [07:35]
-<pjotrp> To see if a remote server has a guix server running it should respond
- [07:36]
-<pjotrp> lynx http://guix.genenetwork.org:8080 --dump
-<pjotrp> Resource not found: /
-<pjotrp>
-<pjotrp> you see that?
-<user01> yes [07:37]
-<pjotrp> good. The main hydra server is too slow. So on my laptop I forced
- using the mirror with [07:38]
-<pjotrp> env GUIX_PACKAGE_PATH=../guix-bioinformatics/ ./pre-inst-env guix
- package -i genenetwork2 --dry-run
- --substitute-urls="http://mirror.hydra.gnu.org"
-<pjotrp>
-<pjotrp> the list looks the same to me [07:40]
-<user01> me too
-<pjotrp> note that some packages will be built and some downloaded, right?
- [07:41]
-<user01> yes
-<pjotrp> atlas is actually a binary on my system [07:43]
-<pjotrp> I mean in that list
-<pjotrp> so, it should not build. Same as yours?
-<user01> yeah, atlas and r-gtable are the ones to be downloaded
-<pjotrp> You should not have seen that error ;)
-<pjotrp> we should try and install it this way, try [07:44]
-<pjotrp> env GUIX_PACKAGE_PATH=../guix-bioinformatics ./pre-inst-env guix
- package -i genenetwork2 --cores=4 --max-jobs=4 --keep-going [07:46]
-<pjotrp> set CPUs and max-jobs to something sensible
-<pjotrp> Does your VM have multiple cores?
-<pjotrp> note you can always press Ctrl-C during install
-<user01> it doesn't, I'll reboot it and give it another core [07:47]
-<user02> Hey [07:48]
-<user02> I'm here
-<user02> Will be stepping away for some breakfast
-<pjotrp> Can you do the same as us
-<pjotrp> Can you see the irc log
-<user02> Alright
-<user02> Yes, I can
-<user02> Please email me a copy in five minutes
-<pjotrp> user01: so when I use the GN server [07:56]
-<pjotrp> env GUIX_PACKAGE_PATH=../guix-bioinformatics ./pre-inst-env guix
- package -i genenetwork2 --dry-run
- --substitute-urls=http://guix.genenetwork.org:8080
-<pjotrp> I don't need to build anything [07:57]
-<pjotrp> (this won't work for you, yet)
-<pjotrp> to get it to work you need to 'trust' it [07:58]
-<pjotrp> but, first get the build going
-<pjotrp> I'll have a coffee while you and get building
-<user01> yeah it's doing its thing now [08:01]
-<pjotrp> cool [08:02]
-<pjotrp> in a separate terminal you can try and install with the gn mirror
- [08:05]
-<pjotrp> I'll send you the public key and you can paste it as said
- https://github.com/pjotrp/guix-notes/blob/master/REPRODUCIBLE.org
- [08:06]
-<user01> alright
-<pjotrp> should be in the E-mail [08:09]
-<pjotrp> getting it working it kinda nasty since the server gives no feedback
-<pjotrp> it works when you see no more in the build list ;) [08:11]
-<pjotrp> btw, you can install software in parallel. Guix does that.
-<pjotrp> even the same packages
-<pjotrp> so keep building ;)
-<pjotrp> try and do this with Debian...
-<pjotrp> coffee for me [08:12]
-<user01> the first build failed [08:15]
-<pjotrp> OK, Dennis fixed that one yesterday [08:27]
-<pjotrp> the problem is that sometime source tarballs disappear [08:28]
-<pjotrp> R is notorious for that
-<user01> haha, that's inconvenient..
-<pjotrp> well, it is good that Guix catches them
-<pjotrp> but we do not cache sources
-<pjotrp> binaries are cached - to some degree - so we don't have to rebuild
- those [08:29]
-<pjotrp> time to use the guix cache at guix.genenetwork.org
-<pjotrp> try and install the key (it is in the E-mail)
-<pjotrp> and see what this lists [08:31]
-<pjotrp> env GUIX_PACKAGE_PATH=../guix-bioinformatics ./pre-inst-env guix
- package -i genenetwork2
- --substitute-urls=http://guix.genenetwork.org --dry-run
-<pjotrp> should be all binary installs
-<user01> it's not.. [08:32]
-<user01> if I remove --substitute-urls, the list changes, does that mean I
- have the key set up correctly at least? [08:33]
-<pjotrp> dunno [08:35]
-<pjotrp> how many packages does it want to build?
-<pjotrp> should be zero
-<user01> four
-<pjotrp> Ah, that is OK - those are default profile things
-<user01> genenetwork2 is among the ones to be downloaded so [08:36]
-<pjotrp> remove --dry-run
-<pjotrp> yeah, good sign :)
-<pjotrp> we'll still hit a snag, but run it
-<pjotrp> should be fast
-<user01> doing it [08:37]
-<user01> it worked! [08:38]
-<user01> I think [08:39]
-<pjotrp> heh [08:40]
-<pjotrp> you mean it is finished?
-<user01> yep
-<pjotrp> type genenetwork2
-<user01> complains about not being able to connect to the database [08:41]
-<pjotrp> last snag :)
-<pjotrp> no database
-<pjotrp> well, we succeeded in installing a same-byte install of a very
- complex system :) [08:42]
-<pjotrp> (always take time to congratulate yourself)
-<pjotrp> now we need to install mysql
-<user01> hehe :)
-<pjotrp> this can be done throug guix or through debian [08:43]
-<pjotrp> the latter is a bit easier here, so let's do that
-<pjotrp> fun note: you can mix debian and guix
-<pjotrp> Follow instructions on [08:44]
-<pjotrp>
- https://github.com/genenetwork/genenetwork2/tree/staging/doc#run-mysql-server
-<pjotrp> apt-get install mysql-common [08:45]
-<pjotrp> may do it
-<pjotrp> You can also install with guix, but I need to document that
-<pjotrp> btw your internet must be fast :) [08:46]
-<user01> hehe it is ;)
-<pjotrp> when the database is installed [08:48]
-<pjotrp> be sure to set the password as instructed [08:50]
-<pjotrp> when mysql is set the genenetwork2 command should fire up the web
- server on localhost:5003 [08:58]
-<pjotrp> btw my internet is way slower :) [09:00]
-<user02> I'm back [09:04]
-<user02> fixed router firmware upgrade problem
-<user02> unbricking
-<pjotrp> tssk [09:07]
-<user02> I'll never leave routers to update themselves again [09:08]
-<user02> self-brick highway
-<user02> Resuming [09:09]
-<pjotrp> auto-updates are evil
-<pjotrp> always switch them off
-<pjotrp> user02: can you install genenetwork like user has done? [09:10]
-<pjotrp> pretty well documented here now :)
-<user02> Yes I can [09:11]
-<user02> Already installed key
-<pjotrp> user02: you are getting binary packages only now? [09:13]
-<user02> That's the sanest way to go now
-<user02> seriously
-<pjotrp> everything should be pre-built from guix.genenetwork.org
-<pjotrp> you are downloading?
-<user02> yes [09:15]
-<pjotrp> cool. Maybe an idea to set up a server
-<pjotrp> for your own use
-<user02> Stuck at downloading preprocesscore
-<pjotrp> should not [09:24]
-<pjotrp> what does env GUIX_PACKAGE_PATH=../guix-bioinformatics/
- ./pre-inst-env guix package -i genenetwork2
- --substitute-urls="http://guix.genenetwork.org" --dry-run
- [09:25]
-<pjotrp> say for r-prepocesscore
-<pjotrp> download or build?
-<pjotrp> mine says download [09:26]
-<user02> it only lists the derivatives to be built
-<user02> nothing else happens [09:27]
-<pjotrp> OK, so there is a problem
-<pjotrp> your key may not be working
-<pjotrp> everything should be listed as 'to be download' [09:28]
-<user02> Hmm
-<user02> Ah
-<user02> I know where I messed up
-<pjotrp> where?
-<user02> I did add the key
-<user02> However
-<pjotrp> (I am documenting)
-<user02> I did not tell guix to trust it
-<pjotrp> yes
-<pjotrp> and there is another potential problem
-<user02> Remember the documentation on installing guix?
-<user02> You have to tell guix to trust the default key [09:29]
-<user02> Right?
-<user02> So in this case
-<pjotrp> read the IRC log
-<user02> That step is mandatory
-<pjotrp> user01: how are you doing?
-<pjotrp> user02:
- https://github.com/pjotrp/guix-notes/blob/master/REPRODUCIBLE.org#using-gnu-guix-archive
- [09:30]
-<user01> a little bit left on the db download
-<pjotrp> user02: you should see no more building
-<pjotrp> user02: another issue may be that you updated r-preprocesscore
- package in guix-buinformatics [09:32]
-<pjotrp> all downstream packages will want to rebuild
-<user02> no, not really
-<user02> It's not even installed
-<pjotrp> checkout a branch of the the old version - make sure we are in synch
-<pjotrp> should be at
- /gnu/store/y1f3r2xs3fhyadd46nd2aqbr2p9qv2ra-r-biocpreprocesscore-1.32.0
- [09:33]
-<pjotrp>
-<user03> pjotrp: Possibly we should use the archive utility of Guix to do
- deployment to avoid such out-of-sync differences :) [09:34]
-<pjotrp> maybe. I did not get archive to update profiles properly [09:37]
-<pjotrp> Also it is good that they get to understand guix
- this way
-<pjotrp> carved in stone, eh [09:38]
-<user02> Yeah, all good [09:39]
-<user02> My mistake was skipping the guix archive part
-<user02> Can we begin with the install?
-<user02> It's telling me of derivatives that will be downloaded [09:40]
-<user02> So we're good
-<user02> Here goes
-<pjotrp> yeeha [09:42]
-<user02> pjotrp, where is this guix.genenetwork.org located at?
-<pjotrp> Tennessee
-<user02> It's...it's....sloooooooowwwwwwwwwwwwww
-<pjotrp> not from Europe
-<pjotrp> is it downloading at all?
-<user02> It should be extended
-<user02> Yes...like at 100KB/s [09:43]
-<user02> tear-jerker
-<user02> Verizon problems
-<user02> who's the host?
-<pjotrp> I am getting 500Kb/s
-<pjotrp> UT
-<user02> Guix's servers can run off more than one server, right?
-<user02> I'd like to host that particular server here
-<user02> For speed
-<pjotrp> yes
-<user02> Sooner or later
-<user02> It will be a necessity [09:45]
-<pjotrp> exactly what I am doing - this is our server
-<pjotrp> guix.genenetwork.org:8080
-<user02> All done installing [09:46]
-<pjotrp> what?
-<user02> Now the databases
-<pjotrp> what do you mean by slow exactly?
-<user02> Yes, it's installed
-<pjotrp> can you run genenetwork2
-<user02> setting variables
-<user02> If I try running it now, it will fail as I don't have the DBs [09:47]
-<pjotrp> cool - you had a lot of prebuilt packages already
-<pjotrp> OK, follow the instructions I wrote above
-<user01> now everything seems to be working for me :)
-<user02> OK
-<pjotrp> user01: excellent!
-<pjotrp> you see a webserver?
-<user01> yep, can connect to localhost:5003 [09:48]
-<pjotrp> So now you are running a guix copy of GN2
-<pjotrp> you can see where it lives with `which genenetwork2` or ls -l
- ~/.guix-profile/bin/genenetwork2 [09:49]
-<pjotrp>
- /gnu/store/1kma5xszvzsvmbb4k699h7gvdncw901i-genenetwork2-2.0-a8fcff4/bin/genenetwork2
-<pjotrp> it is a script
-<pjotrp> written by guix, open it [09:50]
-<pjotrp> inside it points to paths and our script at
-<pjotrp>
- /gnu/store/1kma5xszvzsvmbb4k699h7gvdncw901i-genenetwork2-2.0-a8fcff4/bin/.genenetwork2-real
-<pjotrp> if you open that you can see how the webserver is started [09:51]
-<pjotrp> next step is to run a recent version of GN2
-<user01> okay [09:52]
-<pjotrp> See
- https://github.com/genenetwork/genenetwork2/tree/staging/doc#run-your-own-copy-of-gn2
-<pjotrp> but do not checkout that genetwork2_diet
-<pjotrp> we reverted to the main tree
-<pjotrp> clone git@github.com:genenetwork/genenetwork2.git [09:53]
-<pjotrp> instead and checkout the staging branch
-<pjotrp> that is effectively my branch [09:54]
-<pjotrp> when that is done you should be able to fire up the webserver from
- there [09:55]
-<pjotrp> using ./bin/genenetwork2
-<user02> now installing DBs
-<user02> Downloading
-<pjotrp> annoyingly the source tree is ~700Mb [09:56]
-<user02> Can it also be done by installing the guix package
- genenetwork2-database-small?
-<pjotrp> I changed it in the diet version to 8Mb, but I had to revert
-<user01> I need to make my VM bigger...
-<pjotrp> user02: not ready [09:57]
-<user02> ok
-<pjotrp> user01: sorry
-<pjotrp> user01: you could mount a local dir inside the VM for development
-<pjotrp> that would allow you to use MAC tools for editing
-<pjotrp> just an idea
-<user01> yeah, I figure I'll do something like that
-<pjotrp> do you use emacs? [09:58]
-<user01> yep
-<pjotrp> that can also run on remote files over ssh
-<pjotrp> that's an alternative
-<pjotrp> kudos for using emacs :), wdyt user03
-<user02> 79 minutes to go downloading the db
-<pjotrp> user02: sorry about that [09:59]
-<pjotrp> it is 2GB
-<user02> user, you can also mount the directory via sshfs
-<user02> Mac OSX runs OpenSSH
-<pjotrp> user02: sopa
-<user02> You can therefore mount a directory outside the VM to the VM via
- sshfs [10:00]
-<pjotrp> yes, 3 options now
-<user02> That way, you can set up a VM only for it's logic
-<user02> Apps + the OS it runs [10:01]
-<user02> For data, let it reside on physical host accessible via sshfs
-<user02> Use this Arch wiki reference:
- https://wiki.archlinux.org/index.php/SSHFS
-<user02> I edited that last somewhere in 2015, may have been updated since
- then
-<user01> alright, cool! [10:04]
-<pjotrp> user01: you are almost done [10:06]
-<pjotrp> I wrote an elixir package for guix :)
-<pjotrp> env GUIX_PACKAGE_PATH=../guix-bioinformatics/ ./pre-inst-env guix
- package -A elixir
- --substitute-urls="http://guix.genenetwork.org" [10:08]
-<pjotrp> elixir 1.2.3 out
- ../guix-bioinformatics/gn/packages/elixir.scm:31:2
-<pjotrp>
-<pjotrp> I am building it on guix.genenetwork.org right now [10:09]
-<user01> nice [10:10]
-#+end_src
-
* NOTES
** Deploying GN2 official
Let's see how fast we can deploy a second copy of GN2.
-- [-] Base install
- + [X] First install a Debian server with GNU Guix on board
- + [X] Get Guix build going
- - [X] Build the correct version of Guix
- - [X] Check out the correct gn-stable version of guix-bioinformatics http://git.genenetwork.org/pjotrp/guix-bioinformatics
- - [X] guix package -i genenetwork2 -p /usr/local/guix-profiles/gn2-stable
- + [X] Create a gn2 user and home with space
- + [X] Install redis (currently debian)
- - [X] add to systemd
- - [X] update redis.cnf
- - [X] update database
- + [X] Install mariadb (currently debian mariadb-server)
- - [X] add to systemd
- - [X] system stop mysql
- - [X] update mysql.cnf
- - [X] update database (see gn-services/services/mariadb.md)
- - [X] check tables
- + [ ] run gn2 (rust-qtlreaper not working)
- + [X] update nginx
+- [ ] Base install
+ + [ ] First install a Debian server with GNU Guix on board
+ + [ ] Get Guix build going
+ - [ ] Build the correct version of Guix
+ - [ ] Check out the correct gn-stable version of guix-bioinformatics http://git.genenetwork.org/pjotrp/guix-bioinformatics
+ - [ ] guix package -i genenetwork2 -p /usr/local/guix-profiles/gn2-stable
+ + [ ] Create a gn2 user and home with space
+ + [ ] Install redis
+ - [ ] add to systemd
+ - [ ] update redis.cnf
+ - [ ] update database
+ + [ ] Install mariadb (currently debian mariadb-server)
+ - [ ] add to systemd
+ - [ ] system stop mysql
+ - [ ] update mysql.cnf
+ - [ ] update database (see gn-services/services/mariadb.md)
+ - [ ] check tables
+ + [ ] run gn2
+ + [ ] update nginx
+ [ ] install genenetwork3
- [ ] add to systemd
diff --git a/doc/development.org b/doc/development.org
index 5e6e318b..cd3beea3 100644
--- a/doc/development.org
+++ b/doc/development.org
@@ -41,3 +41,58 @@ JS_GN_PATH (3) is for development purposes. By default is is set to
$HOME/genenetwork/javascript. Say you are working on an updated
version of a JS module not yet in (1) you can simply check out that
module in that path and it should show up.
+
+* Python modules
+
+Python modules are automatically found in the Guix profile.
+
+For development purposes it may be useful to try some Python package.
+Obviously this is only a temporary measure and when you decide to
+include the package it should be packaged in [[http://git.genenetwork.org/guix-bioinformatics/guix-bioinformatics][our GNU Guix software
+stack]]!
+
+To add packages you need to make sure the correct Python is used (currently
+Python 2.7) to install a package. E.g..
+
+#+BEGIN_SRC sh
+python --version
+ Python 2.7.16
+pip --version
+ pip 18.1 from /usr/lib/python2.7/dist-packages/pip (python 2.7)
+#+END_SRC
+
+You can install a Python package locally with pip, e.g.
+
+#+BEGIN_SRC sh
+pip install hjson
+#+END_SRC
+
+This installed in ~$HOME/.local/lib/python3.8/site-packages~. To add
+the search path for GeneNetwork use the environment variable
+
+#+BEGIN_SRC sh
+export PYTHON_GN_PATH=$HOME/.local/lib/python3.8/site-packages
+#+END_SRC
+
+Now you should be able to do
+
+#+BEGIN_SRC python
+import hjson
+#+END_SRC
+
+In fact you can kick off a Python shell with something like
+
+#+BEGIN_SRC python
+env SERVER_PORT=5013 WEBSERVER_MODE=DEBUG LOG_LEVEL=DEBUG \
+ SQL_URI=mysql://gn2:webqtl@localhost/db_webqtl_s \
+ GN2_PROFILE=~/opt/genenetwork2 \
+ ./bin/genenetwork2 ./etc/default_settings.py -c
+Python 2.7.17 (default, Jan 1 1970, 00:00:01)
+[GCC 7.5.0] on linux2
+Type "help", "copyright", "credits" or "license" for more information.
+>>> import hjson
+#+END_SRC
+
+It should now also work in GN2.
+
+* TODO External tools
diff --git a/doc/docker-container.org b/doc/docker-container.org
new file mode 100644
index 00000000..ec91824a
--- /dev/null
+++ b/doc/docker-container.org
@@ -0,0 +1,89 @@
+#+TITLE: Genenetwork2 Dockerized
+
+* Table of Contents :TOC:
+- [[#introduction][Introduction]]
+- [[#creating-the-docker-images][Creating the Docker Images]]
+- [[#pushing-to-dockerhub][Pushing to DockerHub]]
+
+* Introduction
+
+The CI(Continuous Integration) system for Genenetwork2 uses [[https://github.com/features/actions][Github
+Actions]]. As such, it's important to have a way to run tests using
+facilities provided by GUIX in a reproducible way. This project
+leverages GUIX to generate a docker container from which the unittests
+are ran from.
+
+Find instructions on how to set docker up inside GUIX [[https://github.com/pjotrp/guix-notes/blob/master/CONTAINERS.org#run-docker][here]]. This
+document will not get into that. It's assumed that you have a working
+docker setup.
+
+The rest of this document outlines how the docker container used in
+the CI builds was created.
+
+* Creating the Docker Images
+
+The general idea is that GUIX is used to generate a set of binaries,
+which will be added to a base mariaDB image.
+
+First create the gn2 tar archive by running:
+
+#+begin_src sh
+# For the Python 2 version:
+env GUIX_PACKAGE_PATH="/home/bonface/projects/guix-bioinformatics:/home/bonface/projects/guix-past/modules" \
+ ./pre-inst-env guix pack --no-grafts\
+ -S /gn2-profile=/ \
+ screen genenetwork2
+
+# For the Python 3 version:
+env GUIX_PACKAGE_PATH="/home/bonface/projects/guix-bioinformatics:/home/bonface/projects/guix-past/modules" \
+ ./pre-inst-env guix pack --no-grafts\
+ -S /gn2-profile=/ \
+ screen python3-genenetwork2
+ #+end_src
+
+The output will look something similar to:
+
+: /gnu/store/x3m77vwaqcwba24p5s4lrb7w2ii16lj9-tarball-pack.tar.gz
+
+Now create a folder from which will host the following dockerfile. You
+can name this file Dockerfile. Note that mariadb is the base image
+since it already has mariadb installed for us.
+
+#+begin_src conf :mkdirp yes :tangle ~/docker/Dockerfile
+FROM mariadb:latest
+
+COPY ./gn2.tar.gz /tmp/gn2.tar.gz
+RUN tar -xzf /tmp/gn2.tar.gz -C / && rm -f /tmp/gn2.tar.gz && \
+ mkdir -p /usr/local/mysql /genotype_files/genotype/json
+#+end_src
+
+Build the image(Note the fullstop at the end):
+
+: sudo docker build -t python2-genenetwork2:latest -f Dockerfile .
+
+To load the image interactively you've just created:
+
+: docker run -ti "python2-genenetwork2:latest" bash
+
+Assuming you have a docker instance running, you could always run
+commands in it e.g:
+
+: docker run "python2-genenetwork2:latest" python --version
+
+* Pushing to DockerHub
+
+We use DockerHub to store the docker images from which we use on our
+CI environment using Github Actions.
+
+To push to dockerhub, first get the image name by running =docker
+images=. Push to dockerhub using a command similar to:
+
+: docker push bonfacekilz/python2-genenetwork2:latest
+
+Right now, we have 2 images on DockerHub:
+
+- https://hub.docker.com/repository/docker/bonfacekilz/python2-genenetwork2:
+ Contains the python2 version of gn2. Don't use this. Please use the
+ python3 image!
+- https://hub.docker.com/repository/docker/bonfacekilz/python3-genenetwork2:
+ Contains the python3 version of gn2.
diff --git a/doc/testing.org b/doc/testing.org
index 1d5cc8b8..d5ab117d 100644
--- a/doc/testing.org
+++ b/doc/testing.org
@@ -1,43 +1,67 @@
#+TITLE: Testing GN2
* Table of Contents :TOC:
- - [[#introduction][Introduction]]
- - [[#run-tests][Run tests]]
- - [[#setup][Setup]]
- - [[#running][Running]]
+- [[#introduction][Introduction]]
+- [[#run-tests][Run tests]]
+ - [[#setup][Setup]]
+ - [[#running][Running]]
* Introduction
-For integration testing we currently use the brilliant Ruby Mechanize
-gem against the small database; a setup we call mechanical Rob because
-it emulates someone clicking through the website and checking results.
+For integration testing, we currently use [[https://github.com/genenetwork/genenetwork2/tree/testing/test/requests][Mechanica Rob]] against the
+small [[https://github.com/genenetwork/genenetwork2/blob/testing/doc/database.org][database]]; a setup we call Mechanical Rob because it emulates
+someone clicking through the website and checking results.
-These scripts invoke calls to a running webserver and test the
-response. If a page changes or is broken tests will break and we are
-informed. In principle, Mechanical Rob is run before code merges are
-committed to the main server.
+These scripts invoke calls to a running webserver and test the response.
+If a page changes or breaks, tests will fail. In principle, Mechanical
+Rob runs before code merges get committed to the main server.
-In the future we may move to Python mechanize - it'll be easy to mix
-the Ruby and Python versions.
+For unit tests, we use python's =unittest= framework. Coverage reports
+get generated using [[https://coverage.readthedocs.io/en/coverage-5.2.1/][coverage.py]] which you could also use to run
+unit tests. When adding new functionality, it is advisable to add
+unit tests.
* Run tests
** Setup
-Mechanize is not yet included in Guix deployment.
+Everything required for testing is already package with guix:
+: ./pre-ins-env guix package -i genenetwork2 -p ~/opt/genenetwork2
** Running
-Run the tests from the root of the genenetwork2 source tree as, for
-example,
+Run the tests from the root of the genenetwork2 source tree as. Ensure
+that Redis and Mariadb are running.
-: ./bin/test-website http://localhost:5003/ (default)
+To run Mechanical Rob:
+: time env GN2_PROFILE=~/opt/genenetwork2 TMPDIR=~/tmp SERVER_PORT=5004 GENENETWORK_FILES=/gnu/data/gn2_data/ ./bin/genenetwork2 ./etc/default_settings.py -c ~/projects/genenetwork2/test/requests/test-website.py -a http://localhost:5004
-If you are using the small deployment database you can use
+Use these aliases for the following examples.
-: ./bin/test-website --skip -n
+#+begin_src sh
+alias runpython="env GN2_PROFILE=~/opt/gn-latest TMPDIR=/tmp SERVER_PORT=5004 GENENETWORK_FILES=/gnu/data/gn2_data/ ./bin/genenetwork2
-To run individual tests on localhost you can do
+alias runcmd="time env GN2_PROFILE=~/opt/gn-latest TMPDIR=//tmp SERVER_PORT=5004 GENENETWORK_FILES=/gnu/data/gn2_data/ ./bin/genenetwork2 ./etc/default_settings.py -cli"
+#+end_src
-: ruby -Itest -Itest/lib test/lib/mapping.rb --name="/Mapping/"
+You could use them in your =.bashrc= or =.zshrc= file.
+
+To run unit tests:
+
+: runpython -m unittest discover -v
+
+Or alternatively using the coverage tool:
+
+: runcmd coverage run -m unittest discover -v
+
+To generate a html coverage report in =wqflask/coverage_html_report/=
+
+: runcmd coverage html
+
+To output the report to =STDOUT=:
+
+: runcmd coverage report
+
+All the configs for running the coverage tool are in
+=wqflask/.coveragerc=
diff --git a/etc/default_settings.py b/etc/default_settings.py
index f368237b..27522187 100644
--- a/etc/default_settings.py
+++ b/etc/default_settings.py
@@ -19,12 +19,12 @@
#
# For GNU Guix deployment also check the paths in
#
-# ~/.guix-profile/lib/python2.7/site-packages/genenetwork2-2.0-py2.7.egg/etc/default_settings.py
+# ~/.guix-profile/lib/python3.8/site-packages/genenetwork2-2.0-py2.7.egg/etc/default_settings.py
import os
import sys
-GN_VERSION = open("../etc/VERSION","r").read()
+GN_VERSION = open("../etc/VERSION", "r").read()
GN_SERVER_URL = "http://localhost:8880/" # REST API server
# ---- MySQL
diff --git a/jquery.qtip.css b/jquery.qtip.css
deleted file mode 100644
index c2dcb306..00000000
--- a/jquery.qtip.css
+++ /dev/null
@@ -1,623 +0,0 @@
-/*
- * qTip2 - Pretty powerful tooltips - v2.2.0
- * http://qtip2.com
- *
- * Copyright (c) 2013 Craig Michael Thompson
- * Released under the MIT, GPL licenses
- * http://jquery.org/license
- *
- * Date: Thu Nov 21 2013 08:34 GMT+0000
- * Plugins: tips modal viewport svg imagemap ie6
- * Styles: basic css3
- */
-.qtip{
- position: absolute;
- left: -28000px;
- top: -28000px;
- display: none;
-
- max-width: 280px;
- min-width: 50px;
-
- font-size: 10.5px;
- line-height: 12px;
-
- direction: ltr;
-
- box-shadow: none;
- padding: 0;
-}
-
- .qtip-content{
- position: relative;
- padding: 5px 9px;
- overflow: hidden;
-
- text-align: left;
- word-wrap: break-word;
- }
-
- .qtip-titlebar{
- position: relative;
- padding: 5px 35px 5px 10px;
- overflow: hidden;
-
- border-width: 0 0 1px;
- font-weight: bold;
- }
-
- .qtip-titlebar + .qtip-content{ border-top-width: 0 !important; }
-
- /* Default close button class */
- .qtip-close{
- position: absolute;
- right: -9px; top: -9px;
-
- cursor: pointer;
- outline: medium none;
-
- border-width: 1px;
- border-style: solid;
- border-color: transparent;
- }
-
- .qtip-titlebar .qtip-close{
- right: 4px; top: 50%;
- margin-top: -9px;
- }
-
- * html .qtip-titlebar .qtip-close{ top: 16px; } /* IE fix */
-
- .qtip-titlebar .ui-icon,
- .qtip-icon .ui-icon{
- display: block;
- text-indent: -1000em;
- direction: ltr;
- }
-
- .qtip-icon, .qtip-icon .ui-icon{
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- text-decoration: none;
- }
-
- .qtip-icon .ui-icon{
- width: 18px;
- height: 14px;
-
- line-height: 14px;
- text-align: center;
- text-indent: 0;
- font: normal bold 10px/13px Tahoma,sans-serif;
-
- color: inherit;
- background: transparent none no-repeat -100em -100em;
- }
-
-/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */
-.qtip-focus{}
-
-/* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */
-.qtip-hover{}
-
-/* Default tooltip style */
-.qtip-default{
- border-width: 1px;
- border-style: solid;
- border-color: #F1D031;
-
- background-color: #FFFFA3;
- color: #555;
-}
-
- .qtip-default .qtip-titlebar{
- background-color: #FFEF93;
- }
-
- .qtip-default .qtip-icon{
- border-color: #CCC;
- background: #F1F1F1;
- color: #777;
- }
-
- .qtip-default .qtip-titlebar .qtip-close{
- border-color: #AAA;
- color: #111;
- }
-
-
-
-/*! Light tooltip style */
-.qtip-light{
- background-color: white;
- border-color: #E2E2E2;
- color: #454545;
-}
-
- .qtip-light .qtip-titlebar{
- background-color: #f1f1f1;
- }
-
-
-/*! Dark tooltip style */
-.qtip-dark{
- background-color: #505050;
- border-color: #303030;
- color: #f3f3f3;
-}
-
- .qtip-dark .qtip-titlebar{
- background-color: #404040;
- }
-
- .qtip-dark .qtip-icon{
- border-color: #444;
- }
-
- .qtip-dark .qtip-titlebar .ui-state-hover{
- border-color: #303030;
- }
-
-
-/*! Cream tooltip style */
-.qtip-cream{
- background-color: #FBF7AA;
- border-color: #F9E98E;
- color: #A27D35;
-}
-
- .qtip-cream .qtip-titlebar{
- background-color: #F0DE7D;
- }
-
- .qtip-cream .qtip-close .qtip-icon{
- background-position: -82px 0;
- }
-
-
-/*! Red tooltip style */
-.qtip-red{
- background-color: #F78B83;
- border-color: #D95252;
- color: #912323;
-}
-
- .qtip-red .qtip-titlebar{
- background-color: #F06D65;
- }
-
- .qtip-red .qtip-close .qtip-icon{
- background-position: -102px 0;
- }
-
- .qtip-red .qtip-icon{
- border-color: #D95252;
- }
-
- .qtip-red .qtip-titlebar .ui-state-hover{
- border-color: #D95252;
- }
-
-
-/*! Green tooltip style */
-.qtip-green{
- background-color: #CAED9E;
- border-color: #90D93F;
- color: #3F6219;
-}
-
- .qtip-green .qtip-titlebar{
- background-color: #B0DE78;
- }
-
- .qtip-green .qtip-close .qtip-icon{
- background-position: -42px 0;
- }
-
-
-/*! Blue tooltip style */
-.qtip-blue{
- background-color: #E5F6FE;
- border-color: #ADD9ED;
- color: #5E99BD;
-}
-
- .qtip-blue .qtip-titlebar{
- background-color: #D0E9F5;
- }
-
- .qtip-blue .qtip-close .qtip-icon{
- background-position: -2px 0;
- }
-
-
-
-.qtip-shadow{
- -webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
- -moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
- box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
-}
-
-/* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */
-.qtip-rounded,
-.qtip-tipsy,
-.qtip-bootstrap{
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- border-radius: 5px;
-}
-
-.qtip-rounded .qtip-titlebar{
- -moz-border-radius: 4px 4px 0 0;
- -webkit-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
-}
-
-/* Youtube tooltip style */
-.qtip-youtube{
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
-
- -webkit-box-shadow: 0 0 3px #333;
- -moz-box-shadow: 0 0 3px #333;
- box-shadow: 0 0 3px #333;
-
- color: white;
- border-width: 0;
-
- background: #4A4A4A;
- background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black));
- background-image: -webkit-linear-gradient(top,#4A4A4A 0,black 100%);
- background-image: -moz-linear-gradient(top,#4A4A4A 0,black 100%);
- background-image: -ms-linear-gradient(top,#4A4A4A 0,black 100%);
- background-image: -o-linear-gradient(top,#4A4A4A 0,black 100%);
-}
-
- .qtip-youtube .qtip-titlebar{
- background-color: #4A4A4A;
- background-color: rgba(0,0,0,0);
- }
-
- .qtip-youtube .qtip-content{
- padding: .75em;
- font: 12px arial,sans-serif;
-
- filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);
- -ms-filter: "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);";
- }
-
- .qtip-youtube .qtip-icon{
- border-color: #222;
- }
-
- .qtip-youtube .qtip-titlebar .ui-state-hover{
- border-color: #303030;
- }
-
-
-/* jQuery TOOLS Tooltip style */
-.qtip-jtools{
- background: #232323;
- background: rgba(0, 0, 0, 0.7);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#717171), to(#232323));
- background-image: -moz-linear-gradient(top, #717171, #232323);
- background-image: -webkit-linear-gradient(top, #717171, #232323);
- background-image: -ms-linear-gradient(top, #717171, #232323);
- background-image: -o-linear-gradient(top, #717171, #232323);
-
- border: 2px solid #ddd;
- border: 2px solid rgba(241,241,241,1);
-
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
-
- -webkit-box-shadow: 0 0 12px #333;
- -moz-box-shadow: 0 0 12px #333;
- box-shadow: 0 0 12px #333;
-}
-
- /* IE Specific */
- .qtip-jtools .qtip-titlebar{
- background-color: transparent;
- filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A);
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)";
- }
- .qtip-jtools .qtip-content{
- filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323);
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)";
- }
-
- .qtip-jtools .qtip-titlebar,
- .qtip-jtools .qtip-content{
- background: transparent;
- color: white;
- border: 0 dashed transparent;
- }
-
- .qtip-jtools .qtip-icon{
- border-color: #555;
- }
-
- .qtip-jtools .qtip-titlebar .ui-state-hover{
- border-color: #333;
- }
-
-
-/* Cluetip style */
-.qtip-cluetip{
- -webkit-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
- -moz-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
- box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
-
- background-color: #D9D9C2;
- color: #111;
- border: 0 dashed transparent;
-}
-
- .qtip-cluetip .qtip-titlebar{
- background-color: #87876A;
- color: white;
- border: 0 dashed transparent;
- }
-
- .qtip-cluetip .qtip-icon{
- border-color: #808064;
- }
-
- .qtip-cluetip .qtip-titlebar .ui-state-hover{
- border-color: #696952;
- color: #696952;
- }
-
-
-/* Tipsy style */
-.qtip-tipsy{
- background: black;
- background: rgba(0, 0, 0, .87);
-
- color: white;
- border: 0 solid transparent;
-
- font-size: 11px;
- font-family: 'Lucida Grande', sans-serif;
- font-weight: bold;
- line-height: 16px;
- text-shadow: 0 1px black;
-}
-
- .qtip-tipsy .qtip-titlebar{
- padding: 6px 35px 0 10px;
- background-color: transparent;
- }
-
- .qtip-tipsy .qtip-content{
- padding: 6px 10px;
- }
-
- .qtip-tipsy .qtip-icon{
- border-color: #222;
- text-shadow: none;
- }
-
- .qtip-tipsy .qtip-titlebar .ui-state-hover{
- border-color: #303030;
- }
-
-
-/* Tipped style */
-.qtip-tipped{
- border: 3px solid #959FA9;
-
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
-
- background-color: #F9F9F9;
- color: #454545;
-
- font-weight: normal;
- font-family: serif;
-}
-
- .qtip-tipped .qtip-titlebar{
- border-bottom-width: 0;
-
- color: white;
- background: #3A79B8;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D));
- background-image: -webkit-linear-gradient(top, #3A79B8, #2E629D);
- background-image: -moz-linear-gradient(top, #3A79B8, #2E629D);
- background-image: -ms-linear-gradient(top, #3A79B8, #2E629D);
- background-image: -o-linear-gradient(top, #3A79B8, #2E629D);
- filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D);
- -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)";
- }
-
- .qtip-tipped .qtip-icon{
- border: 2px solid #285589;
- background: #285589;
- }
-
- .qtip-tipped .qtip-icon .ui-icon{
- background-color: #FBFBFB;
- color: #555;
- }
-
-
-/**
- * Twitter Bootstrap style.
- *
- * Tested with IE 8, IE 9, Chrome 18, Firefox 9, Opera 11.
- * Does not work with IE 7.
- */
-.qtip-bootstrap{
- /** Taken from Bootstrap body */
- font-size: 14px;
- line-height: 20px;
- color: #333333;
-
- /** Taken from Bootstrap .popover */
- padding: 1px;
- background-color: #ffffff;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, 0.2);
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- -webkit-background-clip: padding-box;
- -moz-background-clip: padding;
- background-clip: padding-box;
-}
-
- .qtip-bootstrap .qtip-titlebar{
- /** Taken from Bootstrap .popover-title */
- padding: 8px 14px;
- margin: 0;
- font-size: 14px;
- font-weight: normal;
- line-height: 18px;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- -webkit-border-radius: 5px 5px 0 0;
- -moz-border-radius: 5px 5px 0 0;
- border-radius: 5px 5px 0 0;
- }
-
- .qtip-bootstrap .qtip-titlebar .qtip-close{
- /**
- * Overrides qTip2:
- * .qtip-titlebar .qtip-close{
- * [...]
- * right: 4px;
- * top: 50%;
- * [...]
- * border-style: solid;
- * }
- */
- right: 11px;
- top: 45%;
- border-style: none;
- }
-
- .qtip-bootstrap .qtip-content{
- /** Taken from Bootstrap .popover-content */
- padding: 9px 14px;
- }
-
- .qtip-bootstrap .qtip-icon{
- /**
- * Overrides qTip2:
- * .qtip-default .qtip-icon {
- * border-color: #CCC;
- * background: #F1F1F1;
- * color: #777;
- * }
- */
- background: transparent;
- }
-
- .qtip-bootstrap .qtip-icon .ui-icon{
- /**
- * Overrides qTip2:
- * .qtip-icon .ui-icon{
- * width: 18px;
- * height: 14px;
- * }
- */
- width: auto;
- height: auto;
-
- /* Taken from Bootstrap .close */
- float: right;
- font-size: 20px;
- font-weight: bold;
- line-height: 18px;
- color: #000000;
- text-shadow: 0 1px 0 #ffffff;
- opacity: 0.2;
- filter: alpha(opacity=20);
- }
-
- .qtip-bootstrap .qtip-icon .ui-icon:hover{
- /* Taken from Bootstrap .close:hover */
- color: #000000;
- text-decoration: none;
- cursor: pointer;
- opacity: 0.4;
- filter: alpha(opacity=40);
- }
-
-
-/* IE9 fix - removes all filters */
-.qtip:not(.ie9haxors) div.qtip-content,
-.qtip:not(.ie9haxors) div.qtip-titlebar{
- filter: none;
- -ms-filter: none;
-}
-
-
-
-.qtip .qtip-tip{
- margin: 0 auto;
- overflow: hidden;
- z-index: 10;
-
-}
-
- /* Opera bug #357 - Incorrect tip position
- https://github.com/Craga89/qTip2/issues/367 */
- x:-o-prefocus, .qtip .qtip-tip{
- visibility: hidden;
- }
-
- .qtip .qtip-tip,
- .qtip .qtip-tip .qtip-vml,
- .qtip .qtip-tip canvas{
- position: absolute;
-
- color: #123456;
- background: transparent;
- border: 0 dashed transparent;
- }
-
- .qtip .qtip-tip canvas{ top: 0; left: 0; }
-
- .qtip .qtip-tip .qtip-vml{
- behavior: url(#default#VML);
- display: inline-block;
- visibility: visible;
- }
-
-#qtip-overlay{
- position: fixed;
- left: 0; top: 0;
- width: 100%; height: 100%;
-}
-
- /* Applied to modals with show.modal.blur set to true */
- #qtip-overlay.blurs{ cursor: pointer; }
-
- /* Change opacity of overlay here */
- #qtip-overlay div{
- position: absolute;
- left: 0; top: 0;
- width: 100%; height: 100%;
-
- background-color: black;
-
- opacity: 0.7;
- filter:alpha(opacity=70);
- -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
- }
-
-
-
-.qtipmodal-ie6fix{
- position: absolute !important;
-} \ No newline at end of file
diff --git a/scripts/maintenance/QTL_Reaper_v6.py b/scripts/maintenance/QTL_Reaper_v6.py
index e50dbd40..35f2d1a1 100755
--- a/scripts/maintenance/QTL_Reaper_v6.py
+++ b/scripts/maintenance/QTL_Reaper_v6.py
@@ -7,7 +7,7 @@ import reaper
import MySQLdb
import time
-con = MySQLdb.Connect(db='db_webqtl',user='username',passwd='', host="localhost")
+con = MySQLdb.Connect(db='db_webqtl', user='username', passwd='', host="localhost")
cursor = con.cursor()
genotypeDir = '/gnshare/gn/web/genotypes/'
@@ -23,7 +23,7 @@ for item in results:
ProbeSetFreezeIds=sys.argv[1:]
if ProbeSetFreezeIds:
#####convert the Ids to integer
- ProbeSetFreezeIds=map(int, ProbeSetFreezeIds)
+ ProbeSetFreezeIds=list(map(int, ProbeSetFreezeIds))
else:
#####get all of the dataset that need be updated
@@ -53,7 +53,7 @@ for ProbeSetFreezeId in ProbeSetFreezeIds:
#if InbredSetId==12:
# InbredSetId=2
- print ProbeSetFreezeId, InbredSets[InbredSetId]
+ print((ProbeSetFreezeId, InbredSets[InbredSetId]))
genotype_1.read(InbredSets[InbredSetId])
locuses = []
@@ -102,7 +102,7 @@ for ProbeSetFreezeId in ProbeSetFreezeIds:
kj += 1
if kj%1000==0:
- print ProbeSetFreezeId, InbredSets[InbredSetId],kj
+ print((ProbeSetFreezeId, InbredSets[InbredSetId], kj))
- print ProbeSetFreezeIds
+ print(ProbeSetFreezeIds)
diff --git a/scripts/maintenance/Update_Case_Attributes_MySQL_tab.py b/scripts/maintenance/Update_Case_Attributes_MySQL_tab.py
index 0f8602c9..bf796df4 100644
--- a/scripts/maintenance/Update_Case_Attributes_MySQL_tab.py
+++ b/scripts/maintenance/Update_Case_Attributes_MySQL_tab.py
@@ -24,4 +24,4 @@ for row in csv_data:
#close the connection to the database.
mydb.commit()
cursor.close()
-print "Done" \ No newline at end of file
+print("Done") \ No newline at end of file
diff --git a/scripts/maintenance/delete_genotypes.py b/scripts/maintenance/delete_genotypes.py
index fa693f0f..b7f83758 100755
--- a/scripts/maintenance/delete_genotypes.py
+++ b/scripts/maintenance/delete_genotypes.py
@@ -8,26 +8,26 @@ import genotypes
def main(argv):
# config
config = utilities.get_config(argv[1])
- print "config:"
+ print("config:")
for item in config.items('config'):
- print "\t%s" % (str(item))
+ print(("\t%s" % (str(item))))
# var
- print "variable:"
+ print("variable:")
inbredsetid = config.get('config', 'inbredsetid')
- print "\tinbredsetid: %s" % inbredsetid
+ print(("\tinbredsetid: %s" % inbredsetid))
# datafile
datafile = open(config.get('config', 'datafile'), 'r')
datafile = csv.reader(datafile, delimiter='\t', quotechar='"')
- datafile.next()
+ next(datafile)
delrowcount = 0
for row in datafile:
if len(row) == 0:
continue
genoname = row[0]
delrowcount += genotypes.delete(genoname, inbredsetid)
- print "deleted %d genotypes" % (delrowcount)
+ print(("deleted %d genotypes" % (delrowcount)))
if __name__ == "__main__":
- print "command line arguments:\n\t%s" % sys.argv
+ print(("command line arguments:\n\t%s" % sys.argv))
main(sys.argv)
- print "exit successfully"
+ print("exit successfully")
diff --git a/scripts/maintenance/delete_phenotypes.py b/scripts/maintenance/delete_phenotypes.py
index 326c466e..60dbec61 100755
--- a/scripts/maintenance/delete_phenotypes.py
+++ b/scripts/maintenance/delete_phenotypes.py
@@ -8,13 +8,13 @@ import phenotypes
def main(argv):
# config
config = utilities.get_config(argv[1])
- print "config:"
+ print("config:")
for item in config.items('config'):
- print "\t%s" % (str(item))
+ print(("\t%s" % (str(item))))
# var
- print "variable:"
+ print("variable:")
inbredsetid = config.get('config', 'inbredsetid')
- print "\tinbredsetid: %s" % inbredsetid
+ print(("\tinbredsetid: %s" % inbredsetid))
# datafile
datafile = open(config.get('config', 'datafile'), 'r')
datafile = csv.reader(datafile, delimiter='\t', quotechar='"')
@@ -27,9 +27,9 @@ def main(argv):
except:
continue
delrowcount += phenotypes.delete(publishxrefid=publishxrefid, inbredsetid=inbredsetid)
- print "deleted %d phenotypes" % (delrowcount)
+ print(("deleted %d phenotypes" % (delrowcount)))
if __name__ == "__main__":
- print "command line arguments:\n\t%s" % sys.argv
+ print(("command line arguments:\n\t%s" % sys.argv))
main(sys.argv)
- print "exit successfully"
+ print("exit successfully")
diff --git a/scripts/maintenance/load_genotypes.py b/scripts/maintenance/load_genotypes.py
index 338483f4..51278d48 100755
--- a/scripts/maintenance/load_genotypes.py
+++ b/scripts/maintenance/load_genotypes.py
@@ -8,7 +8,7 @@ def main(argv):
config = utilities.get_config(argv[1])
print("config file:")
for item in config.items('config'):
- print("\t%s" % str(item))
+ print(("\t%s" % str(item)))
parse_genofile(config, fetch_parameters(config))
def fetch_parameters(config):
@@ -19,8 +19,8 @@ def fetch_parameters(config):
config_dic['dataid'] = datastructure.get_nextdataid_genotype()
config_dic['genofile'] = config.get('config', 'genofile')
print("config dictionary:")
- for k, v in config_dic.items():
- print("\t%s: %s" % (k, v))
+ for k, v in list(config_dic.items()):
+ print(("\t%s: %s" % (k, v)))
return config_dic
def parse_genofile(config, config_dic):
@@ -42,10 +42,10 @@ def parse_genofile(config, config_dic):
if line.lower().startswith("chr"):
#
print("geno file meta dictionary:")
- for k, v in meta_dic.items():
- print("\t%s: %s" % (k, v))
+ for k, v in list(meta_dic.items()):
+ print(("\t%s: %s" % (k, v)))
#
- print("geno file head:\n\t%s" % line)
+ print(("geno file head:\n\t%s" % line))
strainnames = line.split()[4:]
config_dic['strains'] = datastructure.get_strains_bynames(inbredsetid=config_dic['inbredsetid'], strainnames=strainnames, updatestrainxref="yes")
continue
@@ -81,7 +81,7 @@ def check_or_insert_geno(config_dic, marker_dic):
result = cursor.fetchone()
if result:
genoid = result[0]
- print("get geno record: %d" % genoid)
+ print(("get geno record: %d" % genoid))
else:
sql = """
INSERT INTO Geno
@@ -95,7 +95,7 @@ def check_or_insert_geno(config_dic, marker_dic):
cursor.execute(sql, (config_dic['speciesid'], marker_dic['locus'], marker_dic['locus'], marker_dic['chromosome'], marker_dic['mb']))
rowcount = cursor.rowcount
genoid = con.insert_id()
- print("INSERT INTO Geno: %d record: %d" % (rowcount, genoid))
+ print(("INSERT INTO Geno: %d record: %d" % (rowcount, genoid)))
return genoid
def check_genoxref(config_dic, marker_dic):
@@ -146,9 +146,9 @@ def insert_genoxref(config_dic, marker_dic):
"""
cursor.execute(sql, (config_dic['genofreezeid'], marker_dic['genoid'], config_dic['dataid'], marker_dic['cm'], 'N'))
rowcount = cursor.rowcount
- print("INSERT INTO GenoXRef: %d record" % (rowcount))
+ print(("INSERT INTO GenoXRef: %d record" % (rowcount)))
if __name__ == "__main__":
- print("command line arguments:\n\t%s" % sys.argv)
+ print(("command line arguments:\n\t%s" % sys.argv))
main(sys.argv)
print("exit successfully")
diff --git a/scripts/maintenance/load_phenotypes.py b/scripts/maintenance/load_phenotypes.py
index c3c6570b..759d2eec 100755
--- a/scripts/maintenance/load_phenotypes.py
+++ b/scripts/maintenance/load_phenotypes.py
@@ -7,37 +7,37 @@ import datastructure
def main(argv):
# config
config = utilities.get_config(argv[1])
- print "config:"
+ print("config:")
for item in config.items('config'):
- print "\t%s" % (str(item))
+ print(("\t%s" % (str(item))))
# var
inbredsetid = config.get('config', 'inbredsetid')
- print "inbredsetid: %s" % inbredsetid
+ print(("inbredsetid: %s" % inbredsetid))
species = datastructure.get_species(inbredsetid)
speciesid = species[0]
- print "speciesid: %s" % speciesid
+ print(("speciesid: %s" % speciesid))
dataid = datastructure.get_nextdataid_phenotype()
- print "next data id: %s" % dataid
+ print(("next data id: %s" % dataid))
cursor, con = utilities.get_cursor()
# datafile
datafile = open(config.get('config', 'datafile'), 'r')
phenotypedata = csv.reader(datafile, delimiter='\t', quotechar='"')
- phenotypedata_head = phenotypedata.next()
- print "phenotypedata head:\n\t%s" % phenotypedata_head
+ phenotypedata_head = next(phenotypedata)
+ print(("phenotypedata head:\n\t%s" % phenotypedata_head))
strainnames = phenotypedata_head[1:]
strains = datastructure.get_strains_bynames(inbredsetid=inbredsetid, strainnames=strainnames, updatestrainxref="yes")
# metafile
metafile = open(config.get('config', 'metafile'), 'r')
phenotypemeta = csv.reader(metafile, delimiter='\t', quotechar='"')
- phenotypemeta_head = phenotypemeta.next()
- print "phenotypemeta head:\n\t%s" % phenotypemeta_head
- print
+ phenotypemeta_head = next(phenotypemeta)
+ print(("phenotypemeta head:\n\t%s" % phenotypemeta_head))
+ print()
# load
for metarow in phenotypemeta:
#
- datarow_value = phenotypedata.next()
- datarow_se = phenotypedata.next()
- datarow_n = phenotypedata.next()
+ datarow_value = next(phenotypedata)
+ datarow_se = next(phenotypedata)
+ datarow_n = next(phenotypedata)
# Phenotype
sql = """
INSERT INTO Phenotype
@@ -67,7 +67,7 @@ def main(argv):
))
rowcount = cursor.rowcount
phenotypeid = con.insert_id()
- print "INSERT INTO Phenotype: %d record: %d" % (rowcount, phenotypeid)
+ print(("INSERT INTO Phenotype: %d record: %d" % (rowcount, phenotypeid)))
# Publication
publicationid = None # reset
pubmed_id = utilities.to_db_string(metarow[0], None)
@@ -81,7 +81,7 @@ def main(argv):
re = cursor.fetchone()
if re:
publicationid = re[0]
- print "get Publication record: %d" % publicationid
+ print(("get Publication record: %d" % publicationid))
if not publicationid:
sql = """
INSERT INTO Publication
@@ -109,7 +109,7 @@ def main(argv):
))
rowcount = cursor.rowcount
publicationid = con.insert_id()
- print "INSERT INTO Publication: %d record: %d" % (rowcount, publicationid)
+ print(("INSERT INTO Publication: %d record: %d" % (rowcount, publicationid)))
# data
for index, strain in enumerate(strains):
#
@@ -158,14 +158,14 @@ def main(argv):
cursor.execute(sql, (inbredsetid, phenotypeid, publicationid, dataid, ""))
rowcount = cursor.rowcount
publishxrefid = con.insert_id()
- print "INSERT INTO PublishXRef: %d record: %d" % (rowcount, publishxrefid)
+ print(("INSERT INTO PublishXRef: %d record: %d" % (rowcount, publishxrefid)))
# for loop next
dataid += 1
- print
+ print()
# release
con.close()
if __name__ == "__main__":
- print "command line arguments:\n\t%s" % sys.argv
+ print(("command line arguments:\n\t%s" % sys.argv))
main(sys.argv)
- print "exit successfully"
+ print("exit successfully")
diff --git a/scripts/maintenance/readProbeSetMean_v7.py b/scripts/maintenance/readProbeSetMean_v7.py
index e9c8f25c..43f084f4 100755
--- a/scripts/maintenance/readProbeSetMean_v7.py
+++ b/scripts/maintenance/readProbeSetMean_v7.py
@@ -9,19 +9,17 @@ import sys
import MySQLdb
import getpass
import time
-#import pdb
-#pdb.set_trace()
########################################################################
def translateAlias(str):
- if str == "B6":
- return "C57BL/6J"
- elif str == "D2":
- return "DBA/2J"
- else:
- return str
+ if str == "B6":
+ return "C57BL/6J"
+ elif str == "D2":
+ return "DBA/2J"
+ else:
+ return str
########################################################################
#
@@ -29,23 +27,25 @@ def translateAlias(str):
#
########################################################################
+
dataStart = 1
-GeneChipId = int( raw_input("Enter GeneChipId:") )
-ProbeSetFreezeId = int( raw_input("Enter ProbeSetFreezeId:") )
-input_file_name = raw_input("Enter file name with suffix:")
+GeneChipId = int(input("Enter GeneChipId:"))
+ProbeSetFreezeId = int(input("Enter ProbeSetFreezeId:"))
+input_file_name = input("Enter file name with suffix:")
fp = open("%s" % input_file_name, 'rb')
try:
- passwd = getpass.getpass('Please enter mysql password here : ')
- con = MySQLdb.Connect(db='db_webqtl',host='localhost', user='username',passwd=passwd)
+ passwd = getpass.getpass('Please enter mysql password here : ')
+ con = MySQLdb.Connect(db='db_webqtl', host='localhost',
+ user='username', passwd=passwd)
- db = con.cursor()
- print "You have successfully connected to mysql.\n"
+ db = con.cursor()
+ print("You have successfully connected to mysql.\n")
except:
- print "You entered incorrect password.\n"
- sys.exit(0)
+ print("You entered incorrect password.\n")
+ sys.exit(0)
time0 = time.time()
@@ -55,163 +55,163 @@ time0 = time.time()
# generate the gene list of expression data here
#
#########################################################################
-print 'Checking if each line have same number of members'
+print('Checking if each line have same number of members')
GeneList = []
isCont = 1
header = fp.readline()
-header = string.split(string.strip(header),'\t')
-header = map(string.strip, header)
+header = header.strip().split('\t')
+header = [x.strip() for x in header]
nfield = len(header)
line = fp.readline()
-kj=0
+kj = 0
while line:
- line2 = string.split(string.strip(line),'\t')
- line2 = map(string.strip, line2)
- if len(line2) != nfield:
- print "Error : " + line
- isCont = 0
+ line2 = line.strip().split('\t')
+ line2 = [x.strip() for x in line2]
+ if len(line2) != nfield:
+ print(("Error : " + line))
+ isCont = 0
- GeneList.append(line2[0])
- line = fp.readline()
+ GeneList.append(line2[0])
+ line = fp.readline()
- kj+=1
- if kj%100000 == 0:
- print 'checked ',kj,' lines'
+ kj += 1
+ if kj % 100000 == 0:
+ print(('checked ', kj, ' lines'))
-GeneList = map(string.lower, GeneList)
-GeneList.sort()
-
-if isCont==0:
- sys.exit(0)
+GeneList = sorted(map(string.lower, GeneList))
+if isCont == 0:
+ sys.exit(0)
-print 'used ',time.time()-time0,' seconds'
+
+print(('used ', time.time()-time0, ' seconds'))
#########################################################################
#
# Check if each strain exist in database
# generate the string id list of expression data here
#
#########################################################################
-print 'Checking if each strain exist in database'
+print('Checking if each strain exist in database')
isCont = 1
fp.seek(0)
header = fp.readline()
-header = string.split(string.strip(header),'\t')
-header = map(string.strip, header)
-header = map(translateAlias, header)
+header = header.strip().split('\t')
+header = [x.strip() for x in header]
+header = list(map(translateAlias, header))
header = header[dataStart:]
Ids = []
for item in header:
- try:
- db.execute('select Id from Strain where Name = "%s"' % item)
- Ids.append(db.fetchall()[0][0])
- except:
- print item,'does not exist, check the if the strain name is correct'
- isCont=0
+ try:
+ db.execute('select Id from Strain where Name = "%s"' % item)
+ Ids.append(db.fetchall()[0][0])
+ except:
+ print((item, 'does not exist, check the if the strain name is correct'))
+ isCont = 0
-if isCont==0:
- sys.exit(0)
+if isCont == 0:
+ sys.exit(0)
-print 'used ',time.time()-time0,' seconds'
+print(('used ', time.time()-time0, ' seconds'))
########################################################################
#
# Check if each ProbeSet exist in database
#
########################################################################
-print 'Check if each ProbeSet exist in database'
+print('Check if each ProbeSet exist in database')
##---- find PID is name or target ----##
line = fp.readline()
line = fp.readline()
-line2 = string.split(string.strip(line),'\t')
-line2 = map(string.strip, line2)
+line2 = line.strip().split('\t')
+line2 = [x.strip() for x in line2]
PId = line2[0]
-db.execute('select Id from ProbeSet where Name="%s" and ChipId=%d' % (PId, GeneChipId) )
+db.execute('select Id from ProbeSet where Name="%s" and ChipId=%d' %
+ (PId, GeneChipId))
results = db.fetchall()
IdStr = 'TargetId'
-if len(results)>0:
- IdStr = 'Name'
+if len(results) > 0:
+ IdStr = 'Name'
##---- get Name/TargetId list from database ----##
-db.execute('select distinct(%s) from ProbeSet where ChipId=%d order by %s' % (IdStr, GeneChipId, IdStr))
+db.execute('select distinct(%s) from ProbeSet where ChipId=%d order by %s' % (
+ IdStr, GeneChipId, IdStr))
results = db.fetchall()
-
+
Names = []
for item in results:
- Names.append(item[0])
-
-print Names
+ Names.append(item[0])
-Names = map(string.lower, Names)
+print(Names)
-Names.sort() # -- Fixed the lower case problem of ProbeSets affx-mur_b2_at doesn't exist --#
+Names = sorted(map(string.lower, Names))
##---- compare genelist with names ----##
-x=y=0
-x1=-1
-GeneList2=[]
-while x<len(GeneList) and y<len(Names):
- if GeneList[x]==Names[y]:
- x += 1
- y += 1
- elif GeneList[x]<Names[y]:
- if x!=x1:
- GeneList2.append(GeneList[x])
- x1 = x
- x += 1
- elif GeneList[x]>Names[y]:
- y += 1
-
- if x%100000==0:
- print 'check Name, checked %d lines'%x
-
-while x<len(GeneList):
- GeneList2.append(GeneList[x])
- x += 1
-
-isCont=1
+x = y = 0
+x1 = -1
+GeneList2 = []
+while x < len(GeneList) and y < len(Names):
+ if GeneList[x] == Names[y]:
+ x += 1
+ y += 1
+ elif GeneList[x] < Names[y]:
+ if x != x1:
+ GeneList2.append(GeneList[x])
+ x1 = x
+ x += 1
+ elif GeneList[x] > Names[y]:
+ y += 1
+
+ if x % 100000 == 0:
+ print(('check Name, checked %d lines' % x))
+
+while x < len(GeneList):
+ GeneList2.append(GeneList[x])
+ x += 1
+
+isCont = 1
ferror = open("ProbeSetError.txt", "wb")
for item in GeneList2:
- ferror.write(item + " doesn't exist \n")
- print item, " doesn't exist, check if the ProbeSet name is correct"
- isCont = 0
-
-if isCont==0:
- sys.exit(0)
+ ferror.write(item + " doesn't exist \n")
+ print((item, " doesn't exist, check if the ProbeSet name is correct"))
+ isCont = 0
+
+if isCont == 0:
+ sys.exit(0)
-print 'used ',time.time()-time0,' seconds'
+print(('used ', time.time()-time0, ' seconds'))
#########################################################################
#
# Insert data into database
#
#########################################################################
-print 'getting ProbeSet/Id'
+print('getting ProbeSet/Id')
#---- get Name/Id map ----#
-db.execute('select %s, Id from ProbeSet where ChipId=%d order by %s' % (IdStr, GeneChipId, IdStr))
+db.execute('select %s, Id from ProbeSet where ChipId=%d order by %s' %
+ (IdStr, GeneChipId, IdStr))
results = db.fetchall()
NameIds = {}
for item in results:
- NameIds[item[0]] = item[1]
-print 'used ',time.time()-time0,' seconds'
+ NameIds[item[0]] = item[1]
+print(('used ', time.time()-time0, ' seconds'))
-print 'inserting data'
+print('inserting data')
##---- get old max dataId ----##
db.execute('select max(Id) from ProbeSetData')
maxDataId = int(db.fetchall()[0][0])
bmax = maxDataId
-print "old_max = %d\n" % bmax
+print(("old_max = %d\n" % bmax))
##---- insert data ----##
fp.seek(0)
@@ -222,53 +222,51 @@ kj = 0
values1 = []
values2 = []
while line:
- line2 = string.split(string.strip(line),'\t')
- line2 = map(string.strip, line2)
- PId = line2[0]
- recordId = NameIds[PId]
-
- maxDataId += 1
- datasorig = line2[dataStart:]
-
- ###### Data Table items ######
- i=0
- for item in datasorig:
- try:
- values1.append('(%d,%d,%s)' % (maxDataId, Ids[i], float(item)))
- except:
- pass
- i += 1
-
- values2.append("(%d,%d,%d)" % (ProbeSetFreezeId, recordId, maxDataId))
-
-
- ##---- insert into table ----##
- kj += 1
- if kj % 100 == 0:
- cmd = ','.join(values1)
- cmd = 'insert into ProbeSetData values %s' % cmd
- db.execute(cmd)
-
- cmd = ','.join(values2)
- cmd = 'insert into ProbeSetXRef(ProbeSetFreezeId, ProbeSetId, DataId) values %s' % cmd
- db.execute(cmd)
-
- values1=[]
- values2=[]
- print 'Inserted ', kj,' lines'
- print 'used ',time.time()-time0,' seconds'
-
- line = fp.readline()
-
-
-
-if len(values1)>0:
- cmd = ','.join(values1)
- cmd = 'insert into ProbeSetData values %s' % cmd
- db.execute(cmd)
-
- cmd = ','.join(values2)
- cmd = 'insert into ProbeSetXRef(ProbeSetFreezeId, ProbeSetId, DataId) values %s' % cmd
- db.execute(cmd)
+ line2 = line.strip().split('\t')
+ line2 = [x.strip() for x in line2]
+ PId = line2[0]
+ recordId = NameIds[PId]
+
+ maxDataId += 1
+ datasorig = line2[dataStart:]
+
+ ###### Data Table items ######
+ i = 0
+ for item in datasorig:
+ try:
+ values1.append('(%d,%d,%s)' % (maxDataId, Ids[i], float(item)))
+ except:
+ pass
+ i += 1
+
+ values2.append("(%d,%d,%d)" % (ProbeSetFreezeId, recordId, maxDataId))
+
+ ##---- insert into table ----##
+ kj += 1
+ if kj % 100 == 0:
+ cmd = ','.join(values1)
+ cmd = 'insert into ProbeSetData values %s' % cmd
+ db.execute(cmd)
+
+ cmd = ','.join(values2)
+ cmd = 'insert into ProbeSetXRef(ProbeSetFreezeId, ProbeSetId, DataId) values %s' % cmd
+ db.execute(cmd)
+
+ values1 = []
+ values2 = []
+ print(('Inserted ', kj, ' lines'))
+ print(('used ', time.time()-time0, ' seconds'))
+
+ line = fp.readline()
+
+
+if len(values1) > 0:
+ cmd = ','.join(values1)
+ cmd = 'insert into ProbeSetData values %s' % cmd
+ db.execute(cmd)
+
+ cmd = ','.join(values2)
+ cmd = 'insert into ProbeSetXRef(ProbeSetFreezeId, ProbeSetId, DataId) values %s' % cmd
+ db.execute(cmd)
con.close()
diff --git a/scripts/maintenance/readProbeSetSE_v7.py b/scripts/maintenance/readProbeSetSE_v7.py
index fd6f0bb8..2cfe2e07 100755
--- a/scripts/maintenance/readProbeSetSE_v7.py
+++ b/scripts/maintenance/readProbeSetSE_v7.py
@@ -1,254 +1,254 @@
-#!/usr/bin/python2
-"""This script use the nearest marker to the transcript as control, increasing permutation rounds according to the p-value"""
-########################################################################
-# Last Updated Sep 27, 2011 by Xiaodong
-# This version fix the bug that incorrectly exclude the first 2 probesetIDs
-########################################################################
-
-import string
-import sys
-import MySQLdb
-import getpass
-import time
-
-
-def translateAlias(str):
- if str == "B6":
- return "C57BL/6J"
- elif str == "D2":
- return "DBA/2J"
- else:
- return str
-
-########################################################################
-#
-# Indicate Data Start Position, ProbeFreezeId, GeneChipId, DataFile
-#
-########################################################################
-
-dataStart = 1
-
-GeneChipId = int( raw_input("Enter GeneChipId:") )
-ProbeSetFreezeId = int( raw_input("Enter ProbeSetFreezeId:") )
-input_file_name = raw_input("Enter file name with suffix:")
-
-fp = open("%s" % input_file_name, 'rb')
-
-
-try:
- passwd = getpass.getpass('Please enter mysql password here : ')
- con = MySQLdb.Connect(db='db_webqtl',host='localhost', user='username',passwd=passwd)
-
- db = con.cursor()
- print "You have successfully connected to mysql.\n"
-except:
- print "You entered incorrect password.\n"
- sys.exit(0)
-
-time0 = time.time()
-########################################################################
-#
-# Indicate Data Start Position, ProbeFreezeId, GeneChipId, DataFile
-#
-########################################################################
-
-#GeneChipId = 4
-#dataStart = 1
-#ProbeSetFreezeId = 359 #JAX Liver 6C Affy M430 2.0 (Jul11) MDP
-#fp = open("GSE10493_AllSamples_6C_Z_AvgSE.txt", 'rb')
-
-
-#########################################################################
-#
-# Check if each line have same number of members
-# generate the gene list of expression data here
-#
-#########################################################################
-print 'Checking if each line have same number of members'
-
-GeneList = []
-isCont = 1
-header = fp.readline()
-header = string.split(string.strip(header),'\t')
-header = map(string.strip, header)
-nfield = len(header)
-line = fp.readline()
-
-kj=0
-while line:
- line2 = string.split(string.strip(line),'\t')
- line2 = map(string.strip, line2)
- if len(line2) != nfield:
- print "Error : " + line
- isCont = 0
-
- GeneList.append(line2[0])
- line = fp.readline()
-
- kj+=1
- if kj%100000 == 0:
- print 'checked ',kj,' lines'
-
-GeneList = map(string.lower, GeneList)
-GeneList.sort()
-
-if isCont==0:
- sys.exit(0)
-
-
-print 'used ',time.time()-time0,' seconds'
-#########################################################################
-#
-# Check if each strain exist in database
-# generate the string id list of expression data here
-#
-#########################################################################
-print 'Checking if each strain exist in database'
-
-isCont = 1
-fp.seek(0)
-header = fp.readline()
-header = string.split(string.strip(header),'\t')
-header = map(string.strip, header)
-header = map(translateAlias, header)
-header = header[dataStart:]
-Ids = []
-for item in header:
- try:
- db.execute('select Id from Strain where Name = "%s"' % item)
- Ids.append(db.fetchall()[0][0])
- except:
- print item,'does not exist, check the if the strain name is correct'
- isCont=0
-
-if isCont==0:
- sys.exit(0)
-
-
-print 'used ',time.time()-time0,' seconds'
-########################################################################
-#
-# Check if each ProbeSet exist in database
-#
-########################################################################
-print 'Check if each ProbeSet exist in database'
-
-##---- find PID is name or target ----##
-line = fp.readline()
-line = fp.readline()
-line2 = string.split(string.strip(line),'\t')
-line2 = map(string.strip, line2)
-PId = line2[0]
-
-db.execute('select Id from ProbeSet where Name="%s" and ChipId=%d' % (PId, GeneChipId))
-results = db.fetchall()
-IdStr = 'TargetId'
-if len(results)>0:
- IdStr = 'Name'
-
-
-##---- get Name/TargetId list from database ----##
-db.execute('select distinct(%s) from ProbeSet where ChipId=%d order by %s' % (IdStr, GeneChipId, IdStr))
-results = db.fetchall()
-
-Names = []
-for item in results:
- Names.append(item[0])
-Names = map(string.lower, Names)
-Names.sort() # -- Fixed the lower case problem of ProbeSets affx-mur_b2_at doesn't exist --#
-
-##---- compare genelist with names ----##
-x=y=0
-x1=-1
-GeneList2=[]
-while x<len(GeneList) and y<len(Names):
- if GeneList[x]==Names[y]:
- x += 1
- y += 1
- elif GeneList[x]<Names[y]:
- if x!=x1:
- GeneList2.append(GeneList[x])
- x1 = x
- x += 1
- elif GeneList[x]>Names[y]:
- y += 1
-
- if x%100000==0:
- print 'check Name, checked %d lines'%x
-
-while x<len(GeneList):
- GeneList2.append(GeneList[x])
- x += 1
-
-isCont=1
-ferror = open("ProbeSetError.txt", "wb")
-for item in GeneList2:
- ferror.write(item + " doesn't exist \n")
- print item, " doesn't exist"
- isCont = 0
-
-if isCont==0:
- sys.exit(0)
-
-
-print 'used ',time.time()-time0,' seconds'
-#############################
-#Insert new Data into SE
-############################
-db.execute("""
- select ProbeSet.%s, ProbeSetXRef.DataId from ProbeSet, ProbeSetXRef
- where ProbeSet.Id=ProbeSetXRef.ProbeSetId and ProbeSetXRef.ProbeSetFreezeId=%d"""
- % (IdStr, ProbeSetFreezeId))
-results = db.fetchall()
-
-ProbeNameId = {}
-for Name, Id in results:
- ProbeNameId[Name] = Id
-
-ferror = open("ProbeError.txt", "wb")
-
-DataValues = []
-
-fp.seek(0) #XZ add this line
-line = fp.readline() #XZ add this line
-line = fp.readline()
-
-kj = 0
-while line:
- line2 = string.split(string.strip(line),'\t')
- line2 = map(string.strip, line2)
-
- CellId = line2[0]
- if not ProbeNameId.has_key(CellId):
- ferror.write(CellId + " doesn't exist\n")
- print CellId, " doesn't exist"
- else:
- DataId = ProbeNameId[CellId]
- datasorig = line2[dataStart:]
-
- i = 0
- for item in datasorig:
- if item != '':
- value = '('+str(DataId)+','+str(Ids[i])+','+str(item)+')'
- DataValues.append(value)
- i += 1
-
- kj += 1
- if kj % 100 == 0:
- Dataitems = ','.join(DataValues)
- cmd = 'insert ProbeSetSE values %s' % Dataitems
- db.execute(cmd)
-
- DataValues = []
- print 'inserted ',kj,' lines'
- print 'used ',time.time()-time0,' seconds'
- line = fp.readline()
-
-if len(DataValues)>0:
- DataValues = ','.join(DataValues)
- cmd = 'insert ProbeSetSE values %s' % DataValues
- db.execute(cmd)
-
-con.close()
-
-
+#!/usr/bin/python2
+"""This script use the nearest marker to the transcript as control, increasing permutation rounds according to the p-value"""
+########################################################################
+# Last Updated Sep 27, 2011 by Xiaodong
+# This version fix the bug that incorrectly exclude the first 2 probesetIDs
+########################################################################
+
+import string
+import sys
+import MySQLdb
+import getpass
+import time
+
+
+def translateAlias(str):
+ if str == "B6":
+ return "C57BL/6J"
+ elif str == "D2":
+ return "DBA/2J"
+ else:
+ return str
+
+########################################################################
+#
+# Indicate Data Start Position, ProbeFreezeId, GeneChipId, DataFile
+#
+########################################################################
+
+
+dataStart = 1
+
+GeneChipId = int(input("Enter GeneChipId:"))
+ProbeSetFreezeId = int(input("Enter ProbeSetFreezeId:"))
+input_file_name = input("Enter file name with suffix:")
+
+fp = open("%s" % input_file_name, 'rb')
+
+
+try:
+ passwd = getpass.getpass('Please enter mysql password here : ')
+ con = MySQLdb.Connect(db='db_webqtl', host='localhost',
+ user='username', passwd=passwd)
+
+ db = con.cursor()
+ print("You have successfully connected to mysql.\n")
+except:
+ print("You entered incorrect password.\n")
+ sys.exit(0)
+
+time0 = time.time()
+########################################################################
+#
+# Indicate Data Start Position, ProbeFreezeId, GeneChipId, DataFile
+#
+########################################################################
+
+#GeneChipId = 4
+#dataStart = 1
+# ProbeSetFreezeId = 359 #JAX Liver 6C Affy M430 2.0 (Jul11) MDP
+#fp = open("GSE10493_AllSamples_6C_Z_AvgSE.txt", 'rb')
+
+
+#########################################################################
+#
+# Check if each line have same number of members
+# generate the gene list of expression data here
+#
+#########################################################################
+print('Checking if each line have same number of members')
+
+GeneList = []
+isCont = 1
+header = fp.readline()
+header = header.strip().split('\t')
+header = [item.strip() for item in header]
+nfield = len(header)
+line = fp.readline()
+
+kj = 0
+while line:
+ line2 = line.strip().split('\t')
+ line2 = [item.strip() for item in line2]
+ if len(line2) != nfield:
+ isCont = 0
+ print(("Error : " + line))
+
+ GeneList.append(line2[0])
+ line = fp.readline()
+
+ kj += 1
+ if kj % 100000 == 0:
+ print(('checked ', kj, ' lines'))
+
+GeneList = sorted(map(string.lower, GeneList))
+
+if isCont == 0:
+ sys.exit(0)
+
+
+print(('used ', time.time()-time0, ' seconds'))
+#########################################################################
+#
+# Check if each strain exist in database
+# generate the string id list of expression data here
+#
+#########################################################################
+print('Checking if each strain exist in database')
+
+isCont = 1
+fp.seek(0)
+header = fp.readline()
+header = header.strip().split('\t')
+header = [item.strip() for item in header]
+header = list(map(translateAlias, header))
+header = header[dataStart:]
+Ids = []
+for item in header:
+ try:
+ db.execute('select Id from Strain where Name = "%s"' % item)
+ Ids.append(db.fetchall()[0][0])
+ except:
+ isCont = 0
+ print((item, 'does not exist, check the if the strain name is correct'))
+
+if isCont == 0:
+ sys.exit(0)
+
+
+print(('used ', time.time()-time0, ' seconds'))
+########################################################################
+#
+# Check if each ProbeSet exist in database
+#
+########################################################################
+print('Check if each ProbeSet exist in database')
+
+##---- find PID is name or target ----##
+line = fp.readline()
+line = fp.readline()
+line2 = line.strip().split('\t')
+line2 = [x.strip() for x in line2]
+PId = line2[0]
+
+db.execute('select Id from ProbeSet where Name="%s" and ChipId=%d' %
+ (PId, GeneChipId))
+results = db.fetchall()
+IdStr = 'TargetId'
+if len(results) > 0:
+ IdStr = 'Name'
+
+
+##---- get Name/TargetId list from database ----##
+db.execute('select distinct(%s) from ProbeSet where ChipId=%d order by %s' % (
+ IdStr, GeneChipId, IdStr))
+results = db.fetchall()
+
+Names = []
+for item in results:
+ Names.append(item[0])
+ Names = sorted(map(string.lower, Names))
+
+##---- compare genelist with names ----##
+x = y = 0
+x1 = -1
+GeneList2 = []
+while x < len(GeneList) and y < len(Names):
+ if GeneList[x] == Names[y]:
+ x += 1
+ y += 1
+ elif GeneList[x] < Names[y]:
+ if x != x1:
+ GeneList2.append(GeneList[x])
+ x1 = x
+ x += 1
+ elif GeneList[x] > Names[y]:
+ y += 1
+
+ if x % 100000 == 0:
+ print(('check Name, checked %d lines' % x))
+
+while x < len(GeneList):
+ GeneList2.append(GeneList[x])
+ x += 1
+
+isCont = 1
+ferror = open("ProbeSetError.txt", "wb")
+for item in GeneList2:
+ ferror.write(item + " doesn't exist \n")
+ isCont = 0
+
+ print((item, " doesn't exist"))
+if isCont == 0:
+ sys.exit(0)
+
+
+print(('used ', time.time()-time0, ' seconds'))
+#############################
+# Insert new Data into SE
+############################
+db.execute("""
+ select ProbeSet.%s, ProbeSetXRef.DataId from ProbeSet, ProbeSetXRef
+ where ProbeSet.Id=ProbeSetXRef.ProbeSetId and ProbeSetXRef.ProbeSetFreezeId=%d"""
+ % (IdStr, ProbeSetFreezeId))
+results = db.fetchall()
+
+ProbeNameId = {}
+for Name, Id in results:
+ ProbeNameId[Name] = Id
+
+ferror = open("ProbeError.txt", "wb")
+
+DataValues = []
+
+fp.seek(0) # XZ add this line
+line = fp.readline() # XZ add this line
+line = fp.readline()
+
+kj = 0
+while line:
+ line2 = line.strip().split('\t')
+ line2 = [x.strip() for x in line2]
+
+ CellId = line2[0]
+ if CellId not in ProbeNameId:
+ ferror.write(CellId + " doesn't exist\n")
+ else:
+ DataId = ProbeNameId[CellId]
+ datasorig = line2[dataStart:]
+
+ i = 0
+ for item in datasorig:
+ if item != '':
+ value = '('+str(DataId)+','+str(Ids[i])+','+str(item)+')'
+ DataValues.append(value)
+ i += 1
+
+ kj += 1
+ if kj % 100 == 0:
+ Dataitems = ','.join(DataValues)
+ cmd = 'insert ProbeSetSE values %s' % Dataitems
+ db.execute(cmd)
+
+ DataValues = []
+ line = fp.readline()
+ print((CellId, " doesn't exist"))
+ print(('inserted ', kj, ' lines'))
+ print(('used ', time.time()-time0, ' seconds'))
+
+if len(DataValues) > 0:
+ DataValues = ','.join(DataValues)
+ cmd = 'insert ProbeSetSE values %s' % DataValues
+ db.execute(cmd)
+
+con.close()
diff --git a/setup.py b/setup.py
index a9b71fab..8436dcd3 100644
--- a/setup.py
+++ b/setup.py
@@ -9,7 +9,7 @@ setup(name='genenetwork2',
url = "https://github.com/genenetwork/genenetwork2/blob/master/README.md",
description = 'Website and tools for genetics.',
include_package_data=True,
- packages=['wqflask','etc'],
+ packages=['wqflask', 'etc'],
scripts=['bin/genenetwork2'],
# package_data = {
# 'etc': ['*.py']
diff --git a/wqflask/cfg/__init__.py b/test/__init__.py
index e69de29b..e69de29b 100644
--- a/wqflask/cfg/__init__.py
+++ b/test/__init__.py
diff --git a/test/requests/link_checker.py b/test/requests/link_checker.py
index 715f330c..feae6526 100644
--- a/test/requests/link_checker.py
+++ b/test/requests/link_checker.py
@@ -1,4 +1,3 @@
-from __future__ import print_function
import re
import requests
from lxml.html import parse
@@ -23,12 +22,9 @@ def is_in_page_link(link):
return pattern.match(link)
def get_links(doc):
- return filter(
- lambda x: not (
+ return [x for x in [y.get("href") for y in doc.cssselect("a")] if not (
is_root_link(x)
- or is_mailto_link(x))
- , map(lambda y: y.get("href")
- , doc.cssselect("a")))
+ or is_mailto_link(x))]
def verify_link(link):
if link[0] == "#":
@@ -52,14 +48,29 @@ def verify_link(link):
if DO_FAIL:
raise ex
+
+def verify_static_file(link):
+ print("verifying "+link)
+ try:
+ result = requests.get(link, timeout=20, verify=False)
+ if (result.status_code == 200 and
+ result.content.find(bytes("Error: 404 Not Found", "utf-8")) <= 0):
+ print(link+" ==> OK")
+ else:
+ print("ERROR: link {}".format(link))
+ raise Exception("Failed verify")
+ except ConnectionError as ex:
+ print("ERROR: ", link, ex)
+
+
def check_page(host, start_url):
print("")
print("Checking links host "+host+" in page `"+start_url+"`")
doc = parse(start_url).getroot()
links = get_links(doc)
- in_page_links = filter(is_in_page_link, links)
- internal_links = filter(is_internal_link, links)
- external_links = filter(lambda x: not (is_internal_link(x) or is_in_page_link(x)), links)
+ in_page_links = list(filter(is_in_page_link, links))
+ internal_links = list(filter(is_internal_link, links))
+ external_links = [x for x in links if not (is_internal_link(x) or is_in_page_link(x))]
for link in internal_links:
verify_link(host+link)
@@ -79,3 +90,66 @@ def check_links(args_obj, parser):
check_page(
host,
host+"/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P")
+
+
+def check_packaged_js_files(args_obj, parser):
+ host = args_obj.host
+ js_files = [
+ # Datatables Extensions:
+ "/css/DataTablesExtensions/buttonsBootstrap/css/buttons.bootstrap.css",
+ "/js/DataTablesExtensions/buttons/js/dataTables.buttons.min.js",
+ "/css/DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css",
+ "/js/DataTablesExtensions/buttons/js/dataTables.buttons.min.js",
+ "/js/DataTablesExtensions/colResize/dataTables.colResize.js",
+ "/js/DataTablesExtensions/colReorder/js/dataTables.colReorder.js",
+ "/js/DataTablesExtensions/buttons/js/buttons.colVis.min.js",
+ "/js/DataTablesExtensions/scroller/js/dataTables.scroller.min.js",
+ "/js/DataTables/js/jquery.dataTables.js",
+ "/js/DataTablesExtensions/scrollerStyle/css/scroller.dataTables.min.css",
+ # Datatables plugins:
+ "/js/DataTablesExtensions/plugins/sorting/natural.js",
+ "/js/DataTablesExtensions/plugins/sorting/scientific.js",
+ # Other js libraries
+ "/js/chroma/chroma.min.js",
+ "/js/d3-tip/d3-tip.js",
+ "/js/d3js/d3.min.js",
+ "/js/js_alt/underscore.min.js",
+ "/js/nvd3/nv.d3.min.css",
+ "/js/qtip2/jquery.qtip.min.js",
+ "/js/js_alt/md5.min.js",
+ "/js/bootstrap/js/bootstrap.min.js",
+ "/css/bootstrap/css/bootstrap.css",
+ "/js/jquery-ui/jquery-ui.min.js",
+ "/js/jquery-cookie/jquery.cookie.js",
+ "/js/jquery/jquery.min.js",
+ "/js/typeahead/typeahead.bundle.js",
+ "/js/underscore-string/underscore.string.min.js",
+ "/js/js_alt/jstat.min.js",
+ "/js/js_alt/parsley.min.js",
+ "/js/js_alt/timeago.min.js",
+ "/js/plotly/plotly.min.js",
+ "/js/ckeditor/ckeditor.js",
+ "/js/jszip/jszip.min.js",
+ "/js/jscolor/jscolor.js",
+ "/js/DataTables/js/jquery.js",
+ "/css/DataTables/css/jquery.dataTables.css",
+ "/js/colorbox/jquery.colorbox-min.js",
+ "/css/nouislider/nouislider.min.css",
+ "/js/nouislider/nouislider.js",
+ "/js/purescript-genome-browser/js/purescript-genetics-browser.js",
+ "/js/purescript-genome-browser/css/purescript-genetics-browser.css",
+ "/js/cytoscape/cytoscape.min.js",
+ "/js/cytoscape-panzoom/cytoscape-panzoom.js",
+ "/js/cytoscape-panzoom/cytoscape.js-panzoom.css",
+ "/js/cytoscape-qtip/cytoscape-qtip.js",
+ "/css/d3-tip/d3-tip.css",
+ "/js/zxcvbn/zxcvbn.js",
+ "/js/javascript-twitter-post-fetcher/js/twitterFetcher_min.js",
+ "/js/DataTables/images/sort_asc_disabled.png",
+ "/js/DataTables/images/sort_desc_disabled.png",
+ "/js/shapiro-wilk/shapiro-wilk.js",
+ ]
+
+ print("Checking links")
+ for link in js_files:
+ verify_static_file(host+link)
diff --git a/test/requests/links_scraper/genelinks.py b/test/requests/links_scraper/genelinks.py
new file mode 100644
index 00000000..12300f4a
--- /dev/null
+++ b/test/requests/links_scraper/genelinks.py
@@ -0,0 +1,133 @@
+import re
+import requests
+import urllib3
+import os
+import logging
+
+from urllib.request import urlopen as uReq
+from bs4 import BeautifulSoup as soup
+from urllib.parse import urljoin
+from urllib.parse import urlparse
+
+
+PORT = os.environ.get("PORT", "5004")
+TEMPLATE_PATH = "../wqflask/wqflask/templates"
+
+BROKEN_LINKS = set()
+
+
+def search_templates():
+ """searches for broken links in templates"""
+ html_parsed_pages = []
+ for subdir, dirs, files in os.walk(TEMPLATE_PATH):
+ for file in files:
+ file_path = os.path.join(subdir, file)
+ if file_path.endswith(".html"):
+ parsed_page = soup(
+ open(file_path, encoding="utf8"), "html.parser")
+ html_parsed_pages.append(parsed_page)
+
+ return html_parsed_pages
+
+
+def is_valid_link(url_link):
+ try:
+ result = urlparse(url_link)
+ return all([result.scheme, result.netloc, result.path])
+ except Exception as e:
+ return False
+
+
+def test_link(link):
+ print(f'Checking -->{link}')
+ results = None
+ try:
+
+ results = requests.get(link, verify=False, timeout=10)
+ status_code = results.status_code
+
+ except Exception as e:
+ status_code = 408
+
+ return int(status_code) > 403
+
+
+def fetch_css_links(parsed_page):
+ print("fetching css links")
+ for link in parsed_page.findAll("link"):
+ full_path = None
+
+ link_url = link.attrs.get("href")
+ if is_valid_link(link_url):
+ full_path = link_url
+
+ elif re.match(r"^/css", link_url) or re.match(r"^/js", link_url):
+ full_path = urljoin('http://localhost:5004/', link_url)
+
+ if full_path is not None:
+ if test_link(full_path):
+ BROKEN_LINKS.add(full_path)
+
+
+def fetch_html_links(parsed_page):
+ print("fetching a tags ")
+
+ for link in parsed_page.findAll("a"):
+ full_path = None
+ link_url = link.attrs.get("href")
+ if re.match(r"^/", link_url):
+ full_path = urljoin('http://localhost:5004/', link_url)
+
+ elif is_valid_link(link_url):
+ full_path = link_url
+
+ if full_path is not None:
+ if test_link(full_path):
+ BROKEN_LINKS.add(full_path)
+
+
+def fetch_script_tags(parsed_page):
+ print("--->fetching js links")
+ for link in parsed_page.findAll("script"):
+ js_link = link.attrs.get("src")
+ if js_link is not None:
+ if is_valid_link(js_link):
+ raise SystemExit("Failed,the library should be packaged in guix.\
+ Please contact,http://genenetwork.org/ for more details")
+
+ elif re.match(r"^/css", js_link) or re.match(r"^/js", js_link):
+ full_path = urljoin('http://localhost:5004/', js_link)
+ if test_link(full_path):
+ BROKEN_LINKS.add(full_path)
+
+
+def fetch_page_links(page_url):
+
+ urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
+ html_page = uReq(page_url)
+ parsed_page = soup(html_page, "html.parser")
+
+ fetch_script_tags(parsed_page=parsed_page)
+ fetch_css_links(parsed_page=parsed_page)
+ fetch_html_links(parsed_page=parsed_page)
+
+
+def webpages_to_check():
+ pages = [f"http://localhost:{PORT}/"]
+
+ return pages
+
+
+if __name__ == '__main__':
+ # results = search_templates()
+
+ for page in webpages_to_check():
+ fetch_page_links(page)
+ if len(BROKEN_LINKS) > 0:
+ print("THE LINKS BELOW ARE BROKEN>>>>>>>>>>>>>")
+ for link in BROKEN_LINKS:
+ print(link)
+
+ if len(BROKEN_LINKS) > 0:
+ raise SystemExit(
+ "The links Above are broken.Please contact genenetwork.org<<<<<<<<")
diff --git a/test/requests/main_web_functionality.py b/test/requests/main_web_functionality.py
index 7b89b833..28033ad5 100644
--- a/test/requests/main_web_functionality.py
+++ b/test/requests/main_web_functionality.py
@@ -1,9 +1,7 @@
-from __future__ import print_function
-import re
import requests
from lxml.html import parse
from link_checker import check_page
-from requests.exceptions import ConnectionError
+
def check_home(url):
doc = parse(url).getroot()
@@ -13,17 +11,20 @@ def check_home(url):
def check_search_page(host):
data = dict(
- species="mouse"
- , group="BXD"
- , type="Hippocampus mRNA"
- , dataset="HC_M2_0606_P"
- , search_terms_or=""
- , search_terms_and="MEAN=(15 16) LRS=(23 46)")
+ species="mouse",
+ group="BXD",
+ type="Hippocampus mRNA",
+ dataset="HC_M2_0606_P",
+ search_terms_or="",
+ search_terms_and="MEAN=(15 16) LRS=(23 46)")
result = requests.get(host+"/search", params=data)
- found = result.text.find("/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P")
+ found = result.text.find("records were found")
assert(found >= 0)
+ assert(result.status_code == 200)
print("OK")
- check_traits_page(host, "/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P")
+ check_traits_page(host, ("/show_trait?trait_id=1435395_"
+ "s_at&dataset=HC_M2_0606_P"))
+
def check_traits_page(host, traits_url):
doc = parse(host+traits_url).getroot()
@@ -32,6 +33,7 @@ def check_traits_page(host, traits_url):
print("OK")
check_page(host, host+traits_url)
+
def check_main_web_functionality(args_obj, parser):
print("")
print("Checking main web functionality...")
diff --git a/test/requests/mapping_tests.py b/test/requests/mapping_tests.py
index 6de81bfe..19b22c21 100644
--- a/test/requests/mapping_tests.py
+++ b/test/requests/mapping_tests.py
@@ -1,4 +1,3 @@
-from __future__ import print_function
import re
import copy
import json
@@ -15,9 +14,9 @@ def check_R_qtl_tool_selection(host, data):
print("")
print("R/qtl mapping tool selection")
headers = {"Content-Type": "application/x-www-form-urlencoded"}
- page = requests.post(host+"/marker_regression", data=data, headers=headers)
+ page = requests.post(host+"/loading", data=data, headers=headers)
doc = fromstring(page.text)
- form = doc.forms[1]
+ form = doc.forms[0]
assert form.fields["dataset"] == "HC_M2_0606_P"
assert form.fields["value:BXD1"] == "15.034"
@@ -25,9 +24,9 @@ def check_CIM_tool_selection(host, data):
print("")
print("CIM mapping tool selection (using reaper)")
data["method"] = "reaper"
- page = requests.post(host+"/marker_regression", data=data)
+ page = requests.post(host+"/loading", data=data)
doc = fromstring(page.text)
- form = doc.forms[1]
+ form = doc.forms[0]
assert form.fields["dataset"] == "HC_M2_0606_P"
assert form.fields["value:BXD1"] == "15.034"
@@ -37,6 +36,6 @@ def check_mapping(args_obj, parser):
host = args_obj.host
data = load_data_from_file()
- check_pylmm_tool_selection(host, copy.deepcopy(data))
- check_R_qtl_tool_selection(host, copy.deepcopy(data)) ## Why does this fail?
+ # check_pylmm_tool_selection(host, copy.deepcopy(data)) ## Not defined
+ check_R_qtl_tool_selection(host, copy.deepcopy(data))
check_CIM_tool_selection(host, copy.deepcopy(data))
diff --git a/test/requests/navigation_tests.py b/test/requests/navigation_tests.py
index eda27324..6b91c1fd 100644
--- a/test/requests/navigation_tests.py
+++ b/test/requests/navigation_tests.py
@@ -1,4 +1,3 @@
-from __future__ import print_function
import re
import requests
from lxml.html import parse
diff --git a/test/requests/test-website.py b/test/requests/test-website.py
index b2e09bc4..8bfb47c2 100755
--- a/test/requests/test-website.py
+++ b/test/requests/test-website.py
@@ -3,9 +3,10 @@
# env GN2_PROFILE=/home/wrk/opt/gn-latest ./bin/genenetwork2 ./etc/default_settings.py -c ../test/requests/test-website.py http://localhost:5003
#
# Mostly to pick up the Guix GN2_PROFILE and python modules
-from __future__ import print_function
+
import argparse
from link_checker import check_links
+from link_checker import check_packaged_js_files
from mapping_tests import check_mapping
from navigation_tests import check_navigation
from main_web_functionality import check_main_web_functionality
@@ -30,6 +31,7 @@ def run_all(args_obj, parser):
link_checker.DO_FAIL = args_obj.fail
check_main_web_functionality(args_obj, parser)
check_links(args_obj, parser)
+ check_packaged_js_files(args_obj, parser)
check_mapping(args_obj, parser)
# TODO: Add other functions as they are created.
@@ -104,16 +106,7 @@ parser.add_argument("-i", "--integration-tests", dest="accumulate"
, action="store_const", const=integration_tests, default=print_help
, help="Runs integration tests.")
-# Navigation tests deactivated since system relies on Javascript
-# parser.add_argument("-n", "--navigation", dest="accumulate"
-# , action="store_const", const=check_navigation, default=print_help
-# , help="Checks for navigation.")
-
-# parser.add_argument("-s", "--skip-broken", dest="accumulate"
-# , action="store_const", const=dummy, default=print_help
-# , help="Skip tests that are known to be broken.")
-
args = parser.parse_args()
-# print("The arguments object: ", args)
+
args.accumulate(args, parser)
diff --git a/test/unittest/test_registration.py b/test/unittest/test_registration.py
deleted file mode 100644
index 98d0cdff..00000000
--- a/test/unittest/test_registration.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Run test with something like
-#
-# env GN2_PROFILE=~/opt/gn-latest GENENETWORK_FILES=$HOME/gn2_data ./bin/genenetwork2 ./etc/default_settings.py -c ../test/unittest/test_registration.py
-#
-
-import unittest
-import mock.es_double as es
-from wqflask.user_manager import RegisterUser
-
-class TestRegisterUser(unittest.TestCase):
- def setUp(self):
- self.es = es.ESDouble()
-
- def testRegisterUserWithCorrectData(self):
- data = {
- "email_address": "user@example.com"
- , "full_name": "A.N. Other"
- , "organization": "Some Organisation"
- , "password": "testing"
- , "password_confirm": "testing"
- , "es_connection": self.es
- }
- result = RegisterUser(data)
- self.assertEqual(len(result.errors), 0, "Errors were not expected")
-
-if __name__ == "__main__":
- unittest.main()
diff --git a/webtests/browser_run.py b/webtests/browser_run.py
index 2ec299c5..7ee540b7 100644
--- a/webtests/browser_run.py
+++ b/webtests/browser_run.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, division, print_function
-
__all__ = ('sleep', 'testmod', 'test')
from doctest import testmod
@@ -71,4 +69,4 @@ class Test(object):
-test = Test() \ No newline at end of file
+test = Test()
diff --git a/webtests/correlation_matrix_test.py b/webtests/correlation_matrix_test.py
index 8529c265..97114890 100644
--- a/webtests/correlation_matrix_test.py
+++ b/webtests/correlation_matrix_test.py
@@ -65,8 +65,6 @@ text: 0.608\n71
"""
-from __future__ import absolute_import, division, print_function
-
from browser_run import *
testmod()
diff --git a/webtests/correlation_test.py b/webtests/correlation_test.py
index aad3a69f..311bb847 100644
--- a/webtests/correlation_test.py
+++ b/webtests/correlation_test.py
@@ -44,8 +44,6 @@ text: 1.000
"""
-from __future__ import absolute_import, division, print_function
-
from browser_run import *
testmod()
diff --git a/webtests/marker_regression_test.py b/webtests/marker_regression_test.py
index c4f76f53..9b4a4acb 100644
--- a/webtests/marker_regression_test.py
+++ b/webtests/marker_regression_test.py
@@ -48,8 +48,6 @@ text: 11.511
"""
-from __future__ import absolute_import, division, print_function
-
from browser_run import *
testmod()
diff --git a/webtests/show_trait_js_test.py b/webtests/show_trait_js_test.py
index 0fd2c16c..34ffd3b7 100644
--- a/webtests/show_trait_js_test.py
+++ b/webtests/show_trait_js_test.py
@@ -35,8 +35,6 @@ style: display: none;
"""
-from __future__ import absolute_import, division, print_function
-
from browser_run import *
testmod()
diff --git a/webtests/test_runner.py b/webtests/test_runner.py
index ef6d0d69..b5b590a6 100644
--- a/webtests/test_runner.py
+++ b/webtests/test_runner.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, division, print_function
-
import unittest
import doctest
import glob
@@ -25,4 +23,4 @@ def main():
runner.run(suite)
if __name__ == '__main__':
- main() \ No newline at end of file
+ main()
diff --git a/wqflask/.coveragerc b/wqflask/.coveragerc
new file mode 100644
index 00000000..939e51b9
--- /dev/null
+++ b/wqflask/.coveragerc
@@ -0,0 +1,28 @@
+[run]
+branch = True
+
+[report]
+omit =
+ */site-packages/*
+ tests/*
+# Regexes for lines to exclude from consideration
+exclude_lines =
+# Have to re-enable the standard pragma
+ pragma: no cover
+
+ # Don't complain about missing debug-only code:
+ def __repr__
+ if self\.debug
+
+ # Don't complain if tests don't hit defensive assertion code:
+ raise AssertionError
+ raise NotImplementedError
+
+ # Don't complain if non-runnable code isn't run:
+ if 0:
+ if __name__ == .__main__.:
+
+ignore_errors = False
+
+[html]
+directory = coverage_html_report \ No newline at end of file
diff --git a/wqflask/base/GeneralObject.py b/wqflask/base/GeneralObject.py
index 02a1ef06..249195e2 100644
--- a/wqflask/base/GeneralObject.py
+++ b/wqflask/base/GeneralObject.py
@@ -25,44 +25,42 @@
# Last updated by GeneNetwork Core Team 2010/10/20
class GeneralObject:
- """
- Base class to define an Object.
- a = [Spam(1, 4), Spam(9, 3), Spam(4,6)]
- a.sort(lambda x, y: cmp(x.eggs, y.eggs))
- """
+ """
+ Base class to define an Object.
+ a = [Spam(1, 4), Spam(9, 3), Spam(4,6)]
+ a.sort(key = lambda x: x.eggs)
+ """
- def __init__(self, *args, **kw):
- self.contents = list(args)
- for name, value in kw.items():
- setattr(self, name, value)
-
- def __setitem__(self, key, value):
- setattr(self, key, value)
-
- def __getitem__(self, key):
- return getattr(self, key)
-
- def __getattr__(self, key):
- if key in self.__dict__.keys():
- return self.__dict__[key]
- else:
- return eval("self.__dict__.%s" % key)
-
- def __len__(self):
- return len(self.__dict__) - 1
-
- def __str__(self):
- s = ''
- for key in self.__dict__.keys():
- if key != 'contents':
- s += '%s = %s\n' % (key,self.__dict__[key])
- return s
-
- def __repr__(self):
- s = ''
- for key in self.__dict__.keys():
- s += '%s = %s\n' % (key,self.__dict__[key])
- return s
-
- def __cmp__(self,other):
- return len(self.__dict__.keys()).__cmp__(len(other.__dict__.keys())) \ No newline at end of file
+ def __init__(self, *args, **kw):
+ self.contents = list(args)
+ for name, value in list(kw.items()):
+ setattr(self, name, value)
+
+ def __setitem__(self, key, value):
+ setattr(self, key, value)
+
+ def __getitem__(self, key):
+ return getattr(self, key)
+
+ def __getattr__(self, key):
+ return eval("self.__dict__.%s" % key)
+
+ def __len__(self):
+ return len(self.__dict__) - 1
+
+ def __str__(self):
+ s = ''
+ for key in list(self.__dict__.keys()):
+ if key != 'contents':
+ s += '%s = %s\n' % (key, self.__dict__[key])
+ return s
+
+ def __repr__(self):
+ s = ''
+ for key in list(self.__dict__.keys()):
+ s += '%s = %s\n' % (key, self.__dict__[key])
+ return s
+
+ def __eq__(self, other):
+ return (len(list(self.__dict__.keys())) ==
+ len(list(other.__dict__.keys())))
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index 1457ba8d..178234fe 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -18,7 +18,24 @@
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import absolute_import, print_function, division
+from db.call import fetchall, fetchone, fetch1
+from utility.logger import getLogger
+from utility.tools import USE_GN_SERVER, USE_REDIS, flat_files, flat_file_exists, GN2_BASE_URL
+from db.gn_server import menu_main
+from pprint import pformat as pf
+from utility.db_tools import escape
+from utility.db_tools import mescape
+from utility.db_tools import create_in_clause
+from maintenance import get_group_samplelists
+from utility.tools import locate, locate_ignore_error, flat_files
+from utility import gen_geno_ob
+from utility import chunks
+from utility.benchmark import Bench
+from utility import webqtlUtil
+from db import webqtlDatabaseFunction
+from base import species
+from base import webqtlConfig
+from flask import Flask, g
import os
import math
import string
@@ -28,43 +45,24 @@ import codecs
import json
import requests
import gzip
-import cPickle as pickle
+import pickle as pickle
import itertools
from redis import Redis
-Redis = Redis()
-
-from flask import Flask, g
-import reaper
+r = Redis()
-from base import webqtlConfig
-from base import species
-from db import webqtlDatabaseFunction
-from utility import webqtlUtil
-from utility.benchmark import Bench
-from utility import chunks
-from utility import gen_geno_ob
-from utility.tools import locate, locate_ignore_error, flat_files
-
-from wqflask.api import gen_menu
-
-from maintenance import get_group_samplelists
-
-from MySQLdb import escape_string as escape
-from pprint import pformat as pf
-from db.gn_server import menu_main
-from db.call import fetchall,fetchone,fetch1
-
-from utility.tools import USE_GN_SERVER, USE_REDIS, flat_files, flat_file_exists, GN2_BASE_URL
-from utility.logger import getLogger
-logger = getLogger(__name__ )
+logger = getLogger(__name__)
# Used by create_database to instantiate objects
# Each subclass will add to this
DS_NAME_MAP = {}
-def create_dataset(dataset_name, dataset_type = None, get_samplelist = True, group_name = None):
+
+def create_dataset(dataset_name, dataset_type=None, get_samplelist=True, group_name=None):
+ if dataset_name == "Temp":
+ dataset_type = "Temp"
+
if not dataset_type:
dataset_type = Dataset_Getter(dataset_name)
@@ -75,9 +73,10 @@ def create_dataset(dataset_name, dataset_type = None, get_samplelist = True, gro
else:
return dataset_class(dataset_name, get_samplelist)
-class Dataset_Types(object):
- def __init__(self):
+class DatasetType:
+
+ def __init__(self, redis_instance):
"""Create a dictionary of samples where the value is set to Geno,
Publish or ProbeSet. E.g.
@@ -92,14 +91,15 @@ Publish or ProbeSet. E.g.
'B139_K_1206_R': 'ProbeSet' ...
"""
+ self.redis_instance = redis_instance
self.datasets = {}
-
- data = Redis.get("dataset_structure")
+ data = self.redis_instance.get("dataset_structure")
if data:
self.datasets = json.loads(data)
- else: #ZS: I don't think this should ever run unless Redis is emptied
+ else: # ZS: I don't think this should ever run unless Redis is emptied
try:
- data = json.loads(requests.get(GN2_BASE_URL + "/api/v_pre1/gen_dropdown", timeout = 5).content)
+ data = json.loads(requests.get(
+ GN2_BASE_URL + "/api/v_pre1/gen_dropdown", timeout=5).content)
for species in data['datasets']:
for group in data['datasets'][species]:
for dataset_type in data['datasets'][species][group]:
@@ -115,81 +115,71 @@ Publish or ProbeSet. E.g.
except:
pass
- Redis.set("dataset_structure", json.dumps(self.datasets))
+ self.redis_instance.set("dataset_structure", json.dumps(self.datasets))
- # Set LOG_LEVEL_DEBUG=5 to see the following:
- logger.debugf(5, "datasets",self.datasets)
+ def set_dataset_key(self, t, name):
+ """If name is not in the object's dataset dictionary, set it, and update
+ dataset_structure in Redis
- def __call__(self, name):
- if name not in self.datasets:
- mrna_expr_query = """
- SELECT
- ProbeSetFreeze.Id
- FROM
- ProbeSetFreeze
- WHERE
- ProbeSetFreeze.Name = "{0}"
- """.format(name)
-
- results = g.db.execute(mrna_expr_query).fetchall()
- if len(results):
- self.datasets[name] = "ProbeSet"
- Redis.set("dataset_structure", json.dumps(self.datasets))
- return self.datasets[name]
+ args:
+ t: Type of dataset structure which can be: 'mrna_expr', 'pheno',
+ 'other_pheno', 'geno'
+ name: The name of the key to inserted in the datasets dictionary
+ """
+ sql_query_mapping = {
+ 'mrna_expr': ("""SELECT ProbeSetFreeze.Id FROM """ +
+ """ProbeSetFreeze WHERE ProbeSetFreeze.Name = "{}" """),
+ 'pheno': ("""SELECT InfoFiles.GN_AccesionId """ +
+ """FROM InfoFiles, PublishFreeze, InbredSet """ +
+ """WHERE InbredSet.Name = '{}' AND """ +
+ """PublishFreeze.InbredSetId = InbredSet.Id AND """ +
+ """InfoFiles.InfoPageName = PublishFreeze.Name"""),
+ 'other_pheno': ("""SELECT PublishFreeze.Name """ +
+ """FROM PublishFreeze, InbredSet """ +
+ """WHERE InbredSet.Name = '{}' AND """ +
+ """PublishFreeze.InbredSetId = InbredSet.Id"""),
+ 'geno': ("""SELECT GenoFreeze.Id FROM GenoFreeze WHERE """ +
+ """GenoFreeze.Name = "{}" """)
+ }
+
+ dataset_name_mapping = {
+ "mrna_expr": "ProbeSet",
+ "pheno": "Publish",
+ "other_pheno": "Publish",
+ "geno": "Geno",
+ }
+
+ group_name = name
+ if t in ['pheno', 'other_pheno']:
group_name = name.replace("Publish", "")
- pheno_query = """SELECT InfoFiles.GN_AccesionId
- FROM InfoFiles, PublishFreeze, InbredSet
- WHERE InbredSet.Name = '{0}' AND
- PublishFreeze.InbredSetId = InbredSet.Id AND
- InfoFiles.InfoPageName = PublishFreeze.Name""".format(group_name)
-
- results = g.db.execute(pheno_query).fetchall()
- if len(results):
- self.datasets[name] = "Publish"
- Redis.set("dataset_structure", json.dumps(self.datasets))
- return self.datasets[name]
-
- #ZS: For when there isn't an InfoFiles ID; not sure if this and the preceding query are both necessary
- other_pheno_query = """SELECT PublishFreeze.Name
- FROM PublishFreeze, InbredSet
- WHERE InbredSet.Name = '{}' AND
- PublishFreeze.InbredSetId = InbredSet.Id""".format(group_name)
-
- results = g.db.execute(other_pheno_query).fetchall()
- if len(results):
- self.datasets[name] = "Publish"
- Redis.set("dataset_structure", json.dumps(self.datasets))
- return self.datasets[name]
-
- geno_query = """
- SELECT
- GenoFreeze.Id
- FROM
- GenoFreeze
- WHERE
- GenoFreeze.Name = "{0}"
- """.format(name)
-
- results = g.db.execute(geno_query).fetchall()
- if len(results):
- self.datasets[name] = "Geno"
- Redis.set("dataset_structure", json.dumps(self.datasets))
- return self.datasets[name]
-
- #ZS: It shouldn't ever reach this
- return None
- else:
- return self.datasets[name]
+ results = g.db.execute(sql_query_mapping[t].format(group_name)).fetchone()
+ if results:
+ self.datasets[name] = dataset_name_mapping[t]
+ self.redis_instance.set("dataset_structure", json.dumps(self.datasets))
+ return True
+
+ return None
+
+ def __call__(self, name):
+
+ if name not in self.datasets:
+ for t in ["mrna_expr", "pheno", "other_pheno", "geno"]:
+ # This has side-effects, with the end result being a truth-y value
+ if(self.set_dataset_key(t, name)):
+ break
+ return self.datasets.get(name, None) # Return None if name has not been set
+
# Do the intensive work at startup one time only
-Dataset_Getter = Dataset_Types()
+Dataset_Getter = DatasetType(r)
+
def create_datasets_list():
if USE_REDIS:
key = "all_datasets"
- result = Redis.get(key)
+ result = r.get(key)
if result:
logger.debug("Redis cache hit")
@@ -205,38 +195,25 @@ def create_datasets_list():
for dataset_type in type_dict:
query = "SELECT Name FROM {}".format(type_dict[dataset_type])
for result in fetchall(query):
- #The query at the beginning of this function isn't
- #necessary here, but still would rather just reuse
- #it logger.debug("type: {}\tname:
- #{}".format(dataset_type, result.Name))
+ # The query at the beginning of this function isn't
+ # necessary here, but still would rather just reuse
+ # it logger.debug("type: {}\tname:
+ # {}".format(dataset_type, result.Name))
dataset = create_dataset(result.Name, dataset_type)
datasets.append(dataset)
if USE_REDIS:
- Redis.set(key, pickle.dumps(datasets, pickle.HIGHEST_PROTOCOL))
- Redis.expire(key, 60*60)
+ r.set(key, pickle.dumps(datasets, pickle.HIGHEST_PROTOCOL))
+ r.expire(key, 60*60)
return datasets
-def create_in_clause(items):
- """Create an in clause for mysql"""
- in_clause = ', '.join("'{}'".format(x) for x in mescape(*items))
- in_clause = '( {} )'.format(in_clause)
- return in_clause
-
-
-def mescape(*items):
- """Multiple escape"""
- escaped = [escape(str(item)) for item in items]
- #logger.debug("escaped is:", escaped)
- return escaped
-
-
class Markers(object):
"""Todo: Build in cacheing so it saves us reading the same file more than once"""
+
def __init__(self, name):
- json_data_fh = open(locate(name + ".json",'genotype/json'))
+ json_data_fh = open(locate(name + ".json", 'genotype/json'))
markers = []
with open("%s/%s_snps.txt" % (flat_files('genotype/bimbam'), name), 'r') as bimbam_fh:
@@ -266,12 +243,12 @@ class Markers(object):
logger.debug("length of self.markers:", len(self.markers))
logger.debug("length of p_values:", len(p_values))
- if type(p_values) is list:
+ if isinstance(p_values, list):
# THIS IS only needed for the case when we are limiting the number of p-values calculated
- #if len(self.markers) > len(p_values):
+ # if len(self.markers) > len(p_values):
# self.markers = self.markers[:len(p_values)]
- for marker, p_value in itertools.izip(self.markers, p_values):
+ for marker, p_value in zip(self.markers, p_values):
if not p_value:
continue
marker['p_value'] = float(p_value)
@@ -280,9 +257,9 @@ class Markers(object):
marker['lrs_value'] = 0
else:
marker['lod_score'] = -math.log10(marker['p_value'])
- #Using -log(p) for the LRS; need to ask Rob how he wants to get LRS from p-values
+ # Using -log(p) for the LRS; need to ask Rob how he wants to get LRS from p-values
marker['lrs_value'] = -math.log10(marker['p_value']) * 4.61
- elif type(p_values) is dict:
+ elif isinstance(p_values, dict):
filtered_markers = []
for marker in self.markers:
#logger.debug("marker[name]", marker['name'])
@@ -295,18 +272,20 @@ class Markers(object):
marker['lrs_value'] = 0
else:
marker['lod_score'] = -math.log10(marker['p_value'])
- #Using -log(p) for the LRS; need to ask Rob how he wants to get LRS from p-values
- marker['lrs_value'] = -math.log10(marker['p_value']) * 4.61
+ # Using -log(p) for the LRS; need to ask Rob how he wants to get LRS from p-values
+ marker['lrs_value'] = - \
+ math.log10(marker['p_value']) * 4.61
filtered_markers.append(marker)
- #else:
+ # else:
#logger.debug("marker {} NOT in p_values".format(i))
- #self.markers.remove(marker)
+ # self.markers.remove(marker)
#del self.markers[i]
self.markers = filtered_markers
+
class HumanMarkers(Markers):
- def __init__(self, name, specified_markers = []):
+ def __init__(self, name, specified_markers=[]):
marker_data_fh = open(flat_files('mapping') + '/' + name + '.bim')
self.markers = []
for line in marker_data_fh:
@@ -329,7 +308,6 @@ class HumanMarkers(Markers):
#logger.debug("markers is: ", pf(self.markers))
-
def add_pvalues(self, p_values):
super(HumanMarkers, self).add_pvalues(p_values)
@@ -342,12 +320,15 @@ class DatasetGroup(object):
has multiple datasets associated with it.
"""
+
def __init__(self, dataset, name=None):
"""This sets self.group and self.group_id"""
if name == None:
- self.name, self.id, self.genetic_type = fetchone(dataset.query_for_group)
+ self.name, self.id, self.genetic_type = fetchone(
+ dataset.query_for_group)
else:
- self.name, self.id, self.genetic_type = fetchone("SELECT InbredSet.Name, InbredSet.Id, InbredSet.GeneticType FROM InbredSet where Name='%s'" % name)
+ self.name, self.id, self.genetic_type = fetchone(
+ "SELECT InbredSet.Name, InbredSet.Id, InbredSet.GeneticType FROM InbredSet where Name='%s'" % name)
if self.name == 'BXD300':
self.name = "BXD"
@@ -366,7 +347,8 @@ class DatasetGroup(object):
def get_mapping_methods(self):
- mapping_id = g.db.execute("select MappingMethodId from InbredSet where Name= '%s'" % self.name).fetchone()[0]
+ mapping_id = g.db.execute(
+ "select MappingMethodId from InbredSet where Name= '%s'" % self.name).fetchone()[0]
if mapping_id == "1":
mapping_names = ["GEMMA", "QTLReaper", "R/qtl"]
elif mapping_id == "2":
@@ -423,22 +405,23 @@ class DatasetGroup(object):
result = None
key = "samplelist:v3:" + self.name
if USE_REDIS:
- result = Redis.get(key)
+ result = r.get(key)
if result is not None:
self.samplelist = json.loads(result)
else:
logger.debug("Cache not hit")
- genotype_fn = locate_ignore_error(self.name+".geno",'genotype')
+ genotype_fn = locate_ignore_error(self.name+".geno", 'genotype')
if genotype_fn:
- self.samplelist = get_group_samplelists.get_samplelist("geno", genotype_fn)
+ self.samplelist = get_group_samplelists.get_samplelist(
+ "geno", genotype_fn)
else:
self.samplelist = None
if USE_REDIS:
- Redis.set(key, json.dumps(self.samplelist))
- Redis.expire(key, 60*5)
+ r.set(key, json.dumps(self.samplelist))
+ r.expire(key, 60*5)
def all_samples_ordered(self):
result = []
@@ -448,32 +431,29 @@ class DatasetGroup(object):
def read_genotype_file(self, use_reaper=False):
'''Read genotype from .geno file instead of database'''
- #genotype_1 is Dataset Object without parents and f1
- #genotype_2 is Dataset Object with parents and f1 (not for intercross)
+ # genotype_1 is Dataset Object without parents and f1
+ # genotype_2 is Dataset Object with parents and f1 (not for intercross)
#genotype_1 = reaper.Dataset()
# reaper barfs on unicode filenames, so here we ensure it's a string
if self.genofile:
- if "RData" in self.genofile: #ZS: This is a temporary fix; I need to change the way the JSON files that point to multiple genotype files are structured to point to other file types like RData
- full_filename = str(locate(self.genofile.split(".")[0] + ".geno", 'genotype'))
+ if "RData" in self.genofile: # ZS: This is a temporary fix; I need to change the way the JSON files that point to multiple genotype files are structured to point to other file types like RData
+ full_filename = str(
+ locate(self.genofile.split(".")[0] + ".geno", 'genotype'))
else:
full_filename = str(locate(self.genofile, 'genotype'))
else:
full_filename = str(locate(self.name + '.geno', 'genotype'))
-
- if use_reaper:
- genotype_1 = reaper.Dataset()
- genotype_1.read(full_filename)
- else:
- genotype_1 = gen_geno_ob.genotype(full_filename)
+ genotype_1 = gen_geno_ob.genotype(full_filename)
if genotype_1.type == "group" and self.parlist:
- genotype_2 = genotype_1.add(Mat=self.parlist[0], Pat=self.parlist[1]) #, F1=_f1)
+ genotype_2 = genotype_1.add(
+ Mat=self.parlist[0], Pat=self.parlist[1]) # , F1=_f1)
else:
genotype_2 = genotype_1
- #determine default genotype object
+ # determine default genotype object
if self.incparentsf1 and genotype_1.type != "intercross":
genotype = genotype_2
else:
@@ -484,27 +464,21 @@ class DatasetGroup(object):
return genotype
-def datasets(group_name, this_group = None):
+
+def datasets(group_name, this_group=None):
key = "group_dataset_menu:v2:" + group_name
- logger.debug("key is2:", key)
dataset_menu = []
- logger.debug("[tape4] webqtlConfig.PUBLICTHRESH:", webqtlConfig.PUBLICTHRESH)
- logger.debug("[tape4] type webqtlConfig.PUBLICTHRESH:", type(webqtlConfig.PUBLICTHRESH))
the_results = fetchall('''
(SELECT '#PublishFreeze',PublishFreeze.FullName,PublishFreeze.Name
FROM PublishFreeze,InbredSet
WHERE PublishFreeze.InbredSetId = InbredSet.Id
and InbredSet.Name = '%s'
- and PublishFreeze.public > %s
- and PublishFreeze.confidentiality < 1
ORDER BY PublishFreeze.Id ASC)
UNION
(SELECT '#GenoFreeze',GenoFreeze.FullName,GenoFreeze.Name
FROM GenoFreeze, InbredSet
WHERE GenoFreeze.InbredSetId = InbredSet.Id
- and InbredSet.Name = '%s'
- and GenoFreeze.public > %s
- and GenoFreeze.confidentiality < 1)
+ and InbredSet.Name = '%s')
UNION
(SELECT Tissue.Name, ProbeSetFreeze.FullName,ProbeSetFreeze.Name
FROM ProbeSetFreeze, ProbeFreeze, InbredSet, Tissue
@@ -512,16 +486,15 @@ def datasets(group_name, this_group = None):
and ProbeFreeze.TissueId = Tissue.Id
and ProbeFreeze.InbredSetId = InbredSet.Id
and InbredSet.Name like %s
- and ProbeSetFreeze.public > %s
- and ProbeSetFreeze.confidentiality < 1
ORDER BY Tissue.Name, ProbeSetFreeze.OrderList DESC)
- ''' % (group_name, webqtlConfig.PUBLICTHRESH,
- group_name, webqtlConfig.PUBLICTHRESH,
- "'" + group_name + "'", webqtlConfig.PUBLICTHRESH))
+ ''' % (group_name,
+ group_name,
+ "'" + group_name + "'"))
sorted_results = sorted(the_results, key=lambda kv: kv[0])
- pheno_inserted = False #ZS: This is kind of awkward, but need to ensure Phenotypes show up before Genotypes in dropdown
+ # ZS: This is kind of awkward, but need to ensure Phenotypes show up before Genotypes in dropdown
+ pheno_inserted = False
geno_inserted = False
for dataset_item in sorted_results:
tissue_name = dataset_item[0]
@@ -529,13 +502,16 @@ def datasets(group_name, this_group = None):
dataset_short = dataset_item[2]
if tissue_name in ['#PublishFreeze', '#GenoFreeze']:
if tissue_name == '#PublishFreeze' and (dataset_short == group_name + 'Publish'):
- dataset_menu.insert(0, dict(tissue=None, datasets=[(dataset, dataset_short)]))
+ dataset_menu.insert(
+ 0, dict(tissue=None, datasets=[(dataset, dataset_short)]))
pheno_inserted = True
elif pheno_inserted and tissue_name == '#GenoFreeze':
- dataset_menu.insert(1, dict(tissue=None, datasets=[(dataset, dataset_short)]))
+ dataset_menu.insert(
+ 1, dict(tissue=None, datasets=[(dataset, dataset_short)]))
geno_inserted = True
else:
- dataset_menu.append(dict(tissue=None, datasets=[(dataset, dataset_short)]))
+ dataset_menu.append(
+ dict(tissue=None, datasets=[(dataset, dataset_short)]))
else:
tissue_already_exists = False
for i, tissue_dict in enumerate(dataset_menu):
@@ -548,11 +524,11 @@ def datasets(group_name, this_group = None):
dataset_menu[i]['datasets'].append((dataset, dataset_short))
else:
dataset_menu.append(dict(tissue=tissue_name,
- datasets=[(dataset, dataset_short)]))
+ datasets=[(dataset, dataset_short)]))
if USE_REDIS:
- Redis.set(key, pickle.dumps(dataset_menu, pickle.HIGHEST_PROTOCOL))
- Redis.expire(key, 60*5)
+ r.set(key, pickle.dumps(dataset_menu, pickle.HIGHEST_PROTOCOL))
+ r.expire(key, 60*5)
if this_group != None:
this_group._datasets = dataset_menu
@@ -560,6 +536,7 @@ def datasets(group_name, this_group = None):
else:
return dataset_menu
+
class DataSet(object):
"""
DataSet class defines a dataset in webqtl, can be either Microarray,
@@ -567,7 +544,7 @@ class DataSet(object):
"""
- def __init__(self, name, get_samplelist = True, group_name = None):
+ def __init__(self, name, get_samplelist=True, group_name=None):
assert name, "Need a name"
self.name = name
@@ -575,22 +552,23 @@ class DataSet(object):
self.shortname = None
self.fullname = None
self.type = None
- self.data_scale = None #ZS: For example log2
+ self.data_scale = None # ZS: For example log2
self.setup()
- if self.type == "Temp": #Need to supply group name as input if temp trait
- self.group = DatasetGroup(self, name=group_name) # sets self.group and self.group_id and gets genotype
+ if self.type == "Temp": # Need to supply group name as input if temp trait
+ # sets self.group and self.group_id and gets genotype
+ self.group = DatasetGroup(self, name=group_name)
else:
self.check_confidentiality()
self.retrieve_other_names()
- self.group = DatasetGroup(self) # sets self.group and self.group_id and gets genotype
+ # sets self.group and self.group_id and gets genotype
+ self.group = DatasetGroup(self)
self.accession_id = self.get_accession_id()
if get_samplelist == True:
- self.group.get_samplelist()
+ self.group.get_samplelist()
self.species = species.TheSpecies(self)
-
def get_desc(self):
"""Gets overridden later, at least for Temp...used by trait's get_given_name"""
return None
@@ -637,29 +615,26 @@ class DataSet(object):
"""
-
try:
if self.type == "ProbeSet":
query_args = tuple(escape(x) for x in (
- str(webqtlConfig.PUBLICTHRESH),
self.name,
self.name,
self.name))
self.id, self.name, self.fullname, self.shortname, self.data_scale, self.tissue = fetch1("""
-SELECT ProbeSetFreeze.Id, ProbeSetFreeze.Name, ProbeSetFreeze.FullName, ProbeSetFreeze.ShortName, ProbeSetFreeze.DataScale, Tissue.Name
-FROM ProbeSetFreeze, ProbeFreeze, Tissue
-WHERE ProbeSetFreeze.public > %s
-AND ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id
-AND ProbeFreeze.TissueId = Tissue.Id
-AND (ProbeSetFreeze.Name = '%s' OR ProbeSetFreeze.FullName = '%s' OR ProbeSetFreeze.ShortName = '%s')
- """ % (query_args),"/dataset/"+self.name+".json",
- lambda r: (r["id"],r["name"],r["full_name"],r["short_name"],r["data_scale"],r["tissue"])
+ SELECT ProbeSetFreeze.Id, ProbeSetFreeze.Name, ProbeSetFreeze.FullName, ProbeSetFreeze.ShortName, ProbeSetFreeze.DataScale, Tissue.Name
+ FROM ProbeSetFreeze, ProbeFreeze, Tissue
+ WHERE ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id
+ AND ProbeFreeze.TissueId = Tissue.Id
+ AND (ProbeSetFreeze.Name = '%s' OR ProbeSetFreeze.FullName = '%s' OR ProbeSetFreeze.ShortName = '%s')
+ """ % (query_args), "/dataset/"+self.name+".json",
+ lambda r: (r["id"], r["name"], r["full_name"],
+ r["short_name"], r["data_scale"], r["tissue"])
)
else:
query_args = tuple(escape(x) for x in (
(self.type + "Freeze"),
- str(webqtlConfig.PUBLICTHRESH),
self.name,
self.name,
self.name))
@@ -668,12 +643,12 @@ AND (ProbeSetFreeze.Name = '%s' OR ProbeSetFreeze.FullName = '%s' OR ProbeSetFre
self.id, self.name, self.fullname, self.shortname = fetchone("""
SELECT Id, Name, FullName, ShortName
FROM %s
- WHERE public > %s AND
- (Name = '%s' OR FullName = '%s' OR ShortName = '%s')
- """ % (query_args))
+ WHERE (Name = '%s' OR FullName = '%s' OR ShortName = '%s')
+ """ % (query_args))
except TypeError:
- logger.debug("Dataset {} is not yet available in GeneNetwork.".format(self.name))
+ logger.debug(
+ "Dataset {} is not yet available in GeneNetwork.".format(self.name))
pass
def get_trait_data(self, sample_list=None):
@@ -713,7 +688,7 @@ AND (ProbeSetFreeze.Name = '%s' OR ProbeSetFreeze.FullName = '%s' OR ProbeSetFre
else:
query = "SELECT {}.Name,".format(escape(dataset_type))
data_start_pos = 1
- query += string.join(temp, ', ')
+ query += ', '.join(temp)
query += ' FROM ({}, {}XRef, {}Freeze) '.format(*mescape(dataset_type,
self.type,
self.type))
@@ -731,7 +706,7 @@ AND (ProbeSetFreeze.Name = '%s' OR ProbeSetFreeze.FullName = '%s' OR ProbeSetFre
and {}.Id = {}XRef.{}Id
order by {}.Id
""".format(*mescape(self.type, self.type, self.type, self.name,
- dataset_type, self.type, dataset_type, dataset_type))
+ dataset_type, self.type, dataset_type, dataset_type))
else:
query += """
WHERE {}XRef.{}FreezeId = {}Freeze.Id
@@ -739,13 +714,9 @@ AND (ProbeSetFreeze.Name = '%s' OR ProbeSetFreeze.FullName = '%s' OR ProbeSetFre
and {}.Id = {}XRef.{}Id
order by {}.Id
""".format(*mescape(self.type, self.type, self.type, self.type,
- self.name, dataset_type, self.type, self.type, dataset_type))
+ self.name, dataset_type, self.type, self.type, dataset_type))
- #logger.debug("trait data query: ", query)
-
- logger.sql(query)
results = g.db.execute(query).fetchall()
- #logger.debug("query results:", results)
trait_sample_data.append(results)
trait_count = len(trait_sample_data[0])
@@ -759,6 +730,7 @@ AND (ProbeSetFreeze.Name = '%s' OR ProbeSetFreeze.FullName = '%s' OR ProbeSetFre
self.trait_data[trait_name] += (
trait_sample_data[chunk_counter][trait_counter][data_start_pos:])
+
class PhenotypeDataSet(DataSet):
DS_NAME_MAP['Publish'] = 'PhenotypeDataSet'
@@ -768,16 +740,16 @@ class PhenotypeDataSet(DataSet):
# Fields in the database table
self.search_fields = ['Phenotype.Post_publication_description',
- 'Phenotype.Pre_publication_description',
- 'Phenotype.Pre_publication_abbreviation',
- 'Phenotype.Post_publication_abbreviation',
- 'PublishXRef.mean',
- 'Phenotype.Lab_code',
- 'Publication.PubMed_ID',
- 'Publication.Abstract',
- 'Publication.Title',
- 'Publication.Authors',
- 'PublishXRef.Id']
+ 'Phenotype.Pre_publication_description',
+ 'Phenotype.Pre_publication_abbreviation',
+ 'Phenotype.Post_publication_abbreviation',
+ 'PublishXRef.mean',
+ 'Phenotype.Lab_code',
+ 'Publication.PubMed_ID',
+ 'Publication.Abstract',
+ 'Publication.Title',
+ 'Publication.Authors',
+ 'PublishXRef.Id']
# Figure out what display_fields is
self.display_fields = ['name', 'group_code',
@@ -799,13 +771,13 @@ class PhenotypeDataSet(DataSet):
# Fields displayed in the search results table header
self.header_fields = ['Index',
- 'Record',
- 'Description',
- 'Authors',
- 'Year',
- 'Max LRS',
- 'Max LRS Location',
- 'Additive Effect']
+ 'Record',
+ 'Description',
+ 'Authors',
+ 'Year',
+ 'Max LRS',
+ 'Max LRS Location',
+ 'Additive Effect']
self.type = 'Publish'
@@ -823,7 +795,7 @@ class PhenotypeDataSet(DataSet):
# (Urgently?) Need to write this
pass
- def get_trait_info(self, trait_list, species = ''):
+ def get_trait_info(self, trait_list, species=''):
for this_trait in trait_list:
if not this_trait.haveinfo:
@@ -831,9 +803,9 @@ class PhenotypeDataSet(DataSet):
description = this_trait.post_publication_description
- #If the dataset is confidential and the user has access to confidential
- #phenotype traits, then display the pre-publication description instead
- #of the post-publication description
+ # If the dataset is confidential and the user has access to confidential
+ # phenotype traits, then display the pre-publication description instead
+ # of the post-publication description
if this_trait.confidential:
this_trait.description_display = ""
continue # for now, because no authorization features
@@ -858,7 +830,7 @@ class PhenotypeDataSet(DataSet):
if this_trait.pubmed_id:
this_trait.pubmed_link = webqtlConfig.PUBMEDLINK_URL % this_trait.pubmed_id
- #LRS and its location
+ # LRS and its location
this_trait.LRS_score_repr = "N/A"
this_trait.LRS_location_repr = "N/A"
@@ -878,7 +850,8 @@ class PhenotypeDataSet(DataSet):
LRS_Mb = result[1]
this_trait.LRS_score_repr = LRS_score_repr = '%3.1f' % this_trait.lrs
- this_trait.LRS_location_repr = LRS_location_repr = 'Chr%s: %.6f' % (LRS_Chr, float(LRS_Mb))
+ this_trait.LRS_location_repr = LRS_location_repr = 'Chr%s: %.6f' % (
+ LRS_Chr, float(LRS_Mb))
def retrieve_sample_data(self, trait):
query = """
@@ -945,12 +918,13 @@ class GenotypeDataSet(DataSet):
this_trait.retrieveInfo()
if this_trait.chr and this_trait.mb:
- this_trait.location_repr = 'Chr%s: %.6f' % (this_trait.chr, float(this_trait.mb) )
+ this_trait.location_repr = 'Chr%s: %.6f' % (
+ this_trait.chr, float(this_trait.mb))
def retrieve_sample_data(self, trait):
query = """
SELECT
- Strain.Name, GenoData.value, GenoSE.error, GenoData.Id, Strain.Name2
+ Strain.Name, GenoData.value, GenoSE.error, "N/A", Strain.Name2
FROM
(GenoData, GenoFreeze, Strain, Geno, GenoXRef)
left join GenoSE on
@@ -1014,14 +988,14 @@ class MrnaAssayDataSet(DataSet):
# Fields displayed in the search results table header
self.header_fields = ['Index',
- 'Record',
- 'Symbol',
- 'Description',
- 'Location',
- 'Mean',
- 'Max LRS',
- 'Max LRS Location',
- 'Additive Effect']
+ 'Record',
+ 'Symbol',
+ 'Description',
+ 'Location',
+ 'Mean',
+ 'Max LRS',
+ 'Max LRS Location',
+ 'Additive Effect']
# Todo: Obsolete or rename this field
self.type = 'ProbeSet'
@@ -1037,7 +1011,6 @@ class MrnaAssayDataSet(DataSet):
ProbeSetFreeze.Name = "%s"
''' % escape(self.name)
-
def check_confidentiality(self):
return geno_mrna_confidentiality(self)
@@ -1055,10 +1028,12 @@ class MrnaAssayDataSet(DataSet):
if not this_trait.symbol:
this_trait.symbol = "N/A"
- #XZ, 12/08/2008: description
- #XZ, 06/05/2009: Rob asked to add probe target description
- description_string = unicode(str(this_trait.description).strip(codecs.BOM_UTF8), 'utf-8')
- target_string = unicode(str(this_trait.probe_target_description).strip(codecs.BOM_UTF8), 'utf-8')
+ # XZ, 12/08/2008: description
+ # XZ, 06/05/2009: Rob asked to add probe target description
+ description_string = str(
+ str(this_trait.description).strip(codecs.BOM_UTF8), 'utf-8')
+ target_string = str(
+ str(this_trait.probe_target_description).strip(codecs.BOM_UTF8), 'utf-8')
if len(description_string) > 1 and description_string != 'None':
description_display = description_string
@@ -1073,11 +1048,12 @@ class MrnaAssayDataSet(DataSet):
this_trait.description_display = description_display
if this_trait.chr and this_trait.mb:
- this_trait.location_repr = 'Chr%s: %.6f' % (this_trait.chr, float(this_trait.mb))
+ this_trait.location_repr = 'Chr%s: %.6f' % (
+ this_trait.chr, float(this_trait.mb))
- #Get mean expression value
+ # Get mean expression value
query = (
- """select ProbeSetXRef.mean from ProbeSetXRef, ProbeSet
+ """select ProbeSetXRef.mean from ProbeSetXRef, ProbeSet
where ProbeSetXRef.ProbeSetFreezeId = %s and
ProbeSet.Id = ProbeSetXRef.ProbeSetId and
ProbeSet.Name = '%s'
@@ -1093,11 +1069,11 @@ class MrnaAssayDataSet(DataSet):
if mean:
this_trait.mean = "%2.3f" % mean
- #LRS and its location
+ # LRS and its location
this_trait.LRS_score_repr = 'N/A'
this_trait.LRS_location_repr = 'N/A'
- #Max LRS and its Locus location
+ # Max LRS and its Locus location
if this_trait.lrs and this_trait.locus:
query = """
select Geno.Chr, Geno.Mb from Geno, Species
@@ -1111,18 +1087,22 @@ class MrnaAssayDataSet(DataSet):
if result:
lrs_chr, lrs_mb = result
this_trait.LRS_score_repr = '%3.1f' % this_trait.lrs
- this_trait.LRS_location_repr = 'Chr%s: %.6f' % (lrs_chr, float(lrs_mb))
+ this_trait.LRS_location_repr = 'Chr%s: %.6f' % (
+ lrs_chr, float(lrs_mb))
return trait_list
def retrieve_sample_data(self, trait):
query = """
SELECT
- Strain.Name, ProbeSetData.value, ProbeSetSE.error, ProbeSetData.Id, Strain.Name2
+ Strain.Name, ProbeSetData.value, ProbeSetSE.error, NStrain.count, Strain.Name2
FROM
(ProbeSetData, ProbeSetFreeze, Strain, ProbeSet, ProbeSetXRef)
left join ProbeSetSE on
(ProbeSetSE.DataId = ProbeSetData.Id AND ProbeSetSE.StrainId = ProbeSetData.StrainId)
+ left join NStrain on
+ (NStrain.DataId = ProbeSetData.Id AND
+ NStrain.StrainId = ProbeSetData.StrainId)
WHERE
ProbeSet.Name = '%s' AND ProbeSetXRef.ProbeSetId = ProbeSet.Id AND
ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id AND
@@ -1173,47 +1153,12 @@ class TempDataSet(DataSet):
self.shortname = 'Temp'
- @staticmethod
- def handle_pca(desc):
- if 'PCA' in desc:
- # Todo: Modernize below lines
- desc = desc[desc.rindex(':')+1:].strip()
- else:
- desc = desc[:desc.index('entered')].strip()
- return desc
-
- def get_desc(self):
- query = 'SELECT description FROM Temp WHERE Name=%s' % self.name
- logger.sql(query)
- g.db.execute(query)
- desc = g.db.fetchone()[0]
- desc = self.handle_pca(desc)
- return desc
-
- def retrieve_sample_data(self, trait):
- query = """
- SELECT
- Strain.Name, TempData.value, TempData.SE, TempData.NStrain, TempData.Id
- FROM
- TempData, Temp, Strain
- WHERE
- TempData.StrainId = Strain.Id AND
- TempData.Id = Temp.DataId AND
- Temp.name = '%s'
- Order BY
- Strain.Name
- """ % escape(trait.name)
-
- logger.sql(query)
- results = g.db.execute(query).fetchall()
-
-
def geno_mrna_confidentiality(ob):
dataset_table = ob.type + "Freeze"
#logger.debug("dataset_table [%s]: %s" % (type(dataset_table), dataset_table))
query = '''SELECT Id, Name, FullName, confidentiality,
- AuthorisedUsers FROM %s WHERE Name = "%s"''' % (dataset_table,ob.name)
+ AuthorisedUsers FROM %s WHERE Name = "%s"''' % (dataset_table, ob.name)
logger.sql(query)
result = g.db.execute(query)
diff --git a/wqflask/base/mrna_assay_tissue_data.py b/wqflask/base/mrna_assay_tissue_data.py
index 6fec5dcd..f1929518 100644
--- a/wqflask/base/mrna_assay_tissue_data.py
+++ b/wqflask/base/mrna_assay_tissue_data.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import collections
from flask import g
@@ -7,9 +5,8 @@ from flask import g
from utility import db_tools
from utility import Bunch
-from MySQLdb import escape_string as escape
+from utility.db_tools import escape
-from pprint import pformat as pf
from utility.logger import getLogger
logger = getLogger(__name__ )
@@ -92,4 +89,4 @@ class MrnaAssayTissueData(object):
else:
symbol_values_dict[result.Symbol.lower()].append(result.value)
- return symbol_values_dict \ No newline at end of file
+ return symbol_values_dict
diff --git a/wqflask/base/species.py b/wqflask/base/species.py
index 6d99af65..2771d116 100644
--- a/wqflask/base/species.py
+++ b/wqflask/base/species.py
@@ -1,14 +1,7 @@
-from __future__ import absolute_import, print_function, division
-
import collections
from flask import Flask, g
-#from MySQLdb import escape_string as escape
-
-from utility import Bunch
-
-from pprint import pformat as pf
from utility.logger import getLogger
logger = getLogger(__name__ )
@@ -59,4 +52,4 @@ class Chromosomes(object):
results = g.db.execute(query).fetchall()
for item in results:
- self.chromosomes[item.OrderId] = IndChromosome(item.Name, item.Length) \ No newline at end of file
+ self.chromosomes[item.OrderId] = IndChromosome(item.Name, item.Length)
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index e454c593..df96d46e 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -1,31 +1,55 @@
-from __future__ import absolute_import, division, print_function
-
-import string
-import resource
-import codecs
import requests
-
-import redis
-Redis = redis.StrictRedis()
+import simplejson as json
+from wqflask import app
from base import webqtlConfig
from base.webqtlCaseData import webqtlCaseData
from base.data_set import create_dataset
-from db import webqtlDatabaseFunction
-from utility import webqtlUtil
from utility import hmac
+from utility.authentication_tools import check_resource_availability
from utility.tools import GN2_BASE_URL
+from utility.redis_tools import get_redis_conn, get_resource_id
-from wqflask import app
+from utility.db_tools import escape
-import simplejson as json
-from MySQLdb import escape_string as escape
-from pprint import pformat as pf
-
-from flask import Flask, g, request, url_for
+from flask import g, request, url_for
from utility.logger import getLogger
-logger = getLogger(__name__ )
+
+logger = getLogger(__name__)
+
+Redis = get_redis_conn()
+
+
+def create_trait(**kw):
+ assert bool(kw.get('dataset')) != bool(
+ kw.get('dataset_name')), "Needs dataset ob. or name"
+
+ assert bool(kw.get('name')), "Needs trait name"
+
+ if kw.get('dataset_name'):
+ if kw.get('dataset_name') != "Temp":
+ dataset = create_dataset(kw.get('dataset_name'))
+ else:
+ dataset = kw.get('dataset')
+
+ if dataset.type == 'Publish':
+ permissions = check_resource_availability(
+ dataset, kw.get('name'))
+ else:
+ permissions = check_resource_availability(dataset)
+
+ if permissions['data'] != "no-access":
+ the_trait = GeneralTrait(**kw)
+ if the_trait.dataset.type != "Temp":
+ the_trait = retrieve_trait_info(
+ the_trait,
+ the_trait.dataset,
+ get_qtl_info=kw.get('get_qtl_info'))
+ return the_trait
+ else:
+ return None
+
class GeneralTrait(object):
"""
@@ -36,12 +60,17 @@ class GeneralTrait(object):
def __init__(self, get_qtl_info=False, get_sample_info=True, **kw):
# xor assertion
- assert bool(kw.get('dataset')) != bool(kw.get('dataset_name')), "Needs dataset ob. or name";
- self.name = kw.get('name') # Trait ID, ProbeSet ID, Published ID, etc.
+ assert bool(kw.get('dataset')) != bool(
+ kw.get('dataset_name')), "Needs dataset ob. or name"
+ # Trait ID, ProbeSet ID, Published ID, etc.
+ self.name = kw.get('name')
if kw.get('dataset_name'):
if kw.get('dataset_name') == "Temp":
temp_group = self.name.split("_")[2]
- self.dataset = create_dataset(dataset_name = "Temp", dataset_type = "Temp", group_name = temp_group)
+ self.dataset = create_dataset(
+ dataset_name="Temp",
+ dataset_type="Temp",
+ group_name=temp_group)
else:
self.dataset = create_dataset(kw.get('dataset_name'))
else:
@@ -49,8 +78,10 @@ class GeneralTrait(object):
self.cellid = kw.get('cellid')
self.identification = kw.get('identification', 'un-named trait')
self.haveinfo = kw.get('haveinfo', False)
- self.sequence = kw.get('sequence') # Blat sequence, available for ProbeSet
+ # Blat sequence, available for ProbeSet
+ self.sequence = kw.get('sequence')
self.data = kw.get('data', {})
+ self.view = True
# Sets defaults
self.locus = None
@@ -74,11 +105,10 @@ class GeneralTrait(object):
elif len(name2) == 3:
self.dataset, self.name, self.cellid = name2
- # Todo: These two lines are necessary most of the time, but perhaps not all of the time
- # So we could add a simple if statement to short-circuit this if necessary
- if self.dataset.type != "Temp":
- self = retrieve_trait_info(self, self.dataset, get_qtl_info=get_qtl_info)
- if get_sample_info != False:
+ # Todo: These two lines are necessary most of the time, but
+ # perhaps not all of the time So we could add a simple if
+ # statement to short-circuit this if necessary
+ if get_sample_info is not False:
self = retrieve_sample_data(self, self.dataset)
def export_informative(self, include_variance=0):
@@ -91,18 +121,18 @@ class GeneralTrait(object):
vals = []
the_vars = []
sample_aliases = []
- for sample_name, sample_data in self.data.items():
- if sample_data.value != None:
- if not include_variance or sample_data.variance != None:
+ for sample_name, sample_data in list(self.data.items()):
+ if sample_data.value is not None:
+ if not include_variance or sample_data.variance is not None:
samples.append(sample_name)
vals.append(sample_data.value)
the_vars.append(sample_data.variance)
sample_aliases.append(sample_data.name2)
- return samples, vals, the_vars, sample_aliases
+ return samples, vals, the_vars, sample_aliases
@property
def description_fmt(self):
- '''Return a text formated description'''
+ """Return a text formated description"""
if self.dataset.type == 'ProbeSet':
if self.description:
formatted = self.description
@@ -117,31 +147,38 @@ class GeneralTrait(object):
formatted = self.post_publication_description
else:
formatted = "Not available"
+ if isinstance(formatted, bytes):
+ formatted = formatted.decode("utf-8")
return formatted
@property
def alias_fmt(self):
- '''Return a text formatted alias'''
+ """Return a text formatted alias"""
alias = 'Not available'
- if self.alias:
- alias = string.replace(self.alias, ";", " ")
- alias = string.join(string.split(alias), ", ")
+ if getattr(self, "alias", None):
+ alias = self.alias.replace(";", " ")
+ alias = ", ".join(alias.split())
return alias
@property
def wikidata_alias_fmt(self):
- '''Return a text formatted alias'''
+ """Return a text formatted alias"""
alias = 'Not available'
if self.symbol:
- human_response = requests.get(GN2_BASE_URL + "gn3/gene/aliases/" + self.symbol.upper())
- mouse_response = requests.get(GN2_BASE_URL + "gn3/gene/aliases/" + self.symbol.capitalize())
- other_response = requests.get(GN2_BASE_URL + "gn3/gene/aliases/" + self.symbol.lower())
+ human_response = requests.get(
+ GN2_BASE_URL + "gn3/gene/aliases/" + self.symbol.upper())
+ mouse_response = requests.get(
+ GN2_BASE_URL + "gn3/gene/aliases/" + self.symbol.capitalize())
+ other_response = requests.get(
+ GN2_BASE_URL + "gn3/gene/aliases/" + self.symbol.lower())
if human_response and mouse_response and other_response:
- alias_list = json.loads(human_response.content) + json.loads(mouse_response.content) + json.loads(other_response.content)
+ alias_list = json.loads(human_response.content) + json.loads(
+ mouse_response.content) + \
+ json.loads(other_response.content)
filtered_aliases = []
seen = set()
@@ -155,33 +192,34 @@ class GeneralTrait(object):
return alias
-
@property
def location_fmt(self):
- '''Return a text formatted location
+ """Return a text formatted location
- While we're at it we set self.location in case we need it later (do we?)
+ While we're at it we set self.location in case we need it
+ later (do we?)
- '''
+ """
if self.chr and self.mb:
- self.location = 'Chr %s @ %s Mb' % (self.chr,self.mb)
+ self.location = 'Chr %s @ %s Mb' % (self.chr, self.mb)
elif self.chr:
self.location = 'Chr %s @ Unknown position' % (self.chr)
else:
self.location = 'Not available'
fmt = self.location
- ##XZ: deal with direction
+ # XZ: deal with direction
if self.strand_probe == '+':
fmt += (' on the plus strand ')
elif self.strand_probe == '-':
fmt += (' on the minus strand ')
return fmt
-
+
+
def retrieve_sample_data(trait, dataset, samplelist=None):
- if samplelist == None:
+ if samplelist is None:
samplelist = []
if dataset.type == "Temp":
@@ -197,55 +235,69 @@ def retrieve_sample_data(trait, dataset, samplelist=None):
all_samples_ordered = dataset.group.all_samples_ordered()
for i, item in enumerate(results):
try:
- trait.data[all_samples_ordered[i]] = webqtlCaseData(all_samples_ordered[i], float(item))
+ trait.data[all_samples_ordered[i]] = webqtlCaseData(
+ all_samples_ordered[i], float(item))
except:
pass
else:
for item in results:
name, value, variance, num_cases, name2 = item
if not samplelist or (samplelist and name in samplelist):
- trait.data[name] = webqtlCaseData(*item) #name, value, variance, num_cases)
+ # name, value, variance, num_cases)
+ trait.data[name] = webqtlCaseData(*item)
return trait
+
@app.route("/trait/get_sample_data")
def get_sample_data():
params = request.args
trait = params['trait']
dataset = params['dataset']
- trait_ob = GeneralTrait(name=trait, dataset_name=dataset)
-
- trait_dict = {}
- trait_dict['name'] = trait
- trait_dict['db'] = dataset
- trait_dict['type'] = trait_ob.dataset.type
- trait_dict['group'] = trait_ob.dataset.group.name
- trait_dict['tissue'] = trait_ob.dataset.tissue
- trait_dict['species'] = trait_ob.dataset.group.species
- trait_dict['url'] = url_for('show_trait_page', trait_id = trait, dataset = dataset)
- trait_dict['description'] = trait_ob.description_display
- if trait_ob.dataset.type == "ProbeSet":
- trait_dict['symbol'] = trait_ob.symbol
- trait_dict['location'] = trait_ob.location_repr
- elif trait_ob.dataset.type == "Publish":
- if trait_ob.pubmed_id:
- trait_dict['pubmed_link'] = trait_ob.pubmed_link
- trait_dict['pubmed_text'] = trait_ob.pubmed_text
-
- return json.dumps([trait_dict, {key: value.value for key, value in trait_ob.data.iteritems() }])
-
+ trait_ob = create_trait(name=trait, dataset_name=dataset)
+ if trait_ob:
+ trait_dict = {}
+ trait_dict['name'] = trait
+ trait_dict['db'] = dataset
+ trait_dict['type'] = trait_ob.dataset.type
+ trait_dict['group'] = trait_ob.dataset.group.name
+ trait_dict['tissue'] = trait_ob.dataset.tissue
+ trait_dict['species'] = trait_ob.dataset.group.species
+ trait_dict['url'] = url_for(
+ 'show_trait_page', trait_id=trait, dataset=dataset)
+ if trait_ob.dataset.type == "ProbeSet":
+ trait_dict['symbol'] = trait_ob.symbol
+ trait_dict['location'] = trait_ob.location_repr
+ trait_dict['description'] = trait_ob.description_display
+ elif trait_ob.dataset.type == "Publish":
+ trait_dict['description'] = trait_ob.description_display
+ if trait_ob.pubmed_id:
+ trait_dict['pubmed_link'] = trait_ob.pubmed_link
+ trait_dict['pubmed_text'] = trait_ob.pubmed_text
+ else:
+ trait_dict['location'] = trait_ob.location_repr
+
+ return json.dumps([trait_dict, {key: value.value for
+ key, value in list(
+ trait_ob.data.items())}])
+ else:
+ return None
+
+
def jsonable(trait):
"""Return a dict suitable for using as json
Actual turning into json doesn't happen here though"""
- dataset = create_dataset(dataset_name = trait.dataset.name, dataset_type = trait.dataset.type, group_name = trait.dataset.group.name)
-
+ dataset = create_dataset(dataset_name=trait.dataset.name,
+ dataset_type=trait.dataset.type,
+ group_name=trait.dataset.group.name)
+
if dataset.type == "ProbeSet":
return dict(name=trait.name,
symbol=trait.symbol,
dataset=dataset.name,
- dataset_name = dataset.shortname,
+ dataset_name=dataset.shortname,
description=trait.description_display,
mean=trait.mean,
location=trait.location_repr,
@@ -257,7 +309,7 @@ def jsonable(trait):
if trait.pubmed_id:
return dict(name=trait.name,
dataset=dataset.name,
- dataset_name = dataset.shortname,
+ dataset_name=dataset.shortname,
description=trait.description_display,
abbreviation=trait.abbreviation,
authors=trait.authors,
@@ -270,7 +322,7 @@ def jsonable(trait):
else:
return dict(name=trait.name,
dataset=dataset.name,
- dataset_name = dataset.shortname,
+ dataset_name=dataset.shortname,
description=trait.description_display,
abbreviation=trait.abbreviation,
authors=trait.authors,
@@ -282,19 +334,20 @@ def jsonable(trait):
elif dataset.type == "Geno":
return dict(name=trait.name,
dataset=dataset.name,
- dataset_name = dataset.shortname,
+ dataset_name=dataset.shortname,
location=trait.location_repr
)
else:
return dict()
+
def jsonable_table_row(trait, dataset_name, index):
"""Return a list suitable for json and intended to be displayed in a table
Actual turning into json doesn't happen here though"""
dataset = create_dataset(dataset_name)
-
+
if dataset.type == "ProbeSet":
if trait.mean == "":
mean = "N/A"
@@ -306,11 +359,13 @@ def jsonable_table_row(trait, dataset_name, index):
additive = "%.3f" % round(float(trait.additive), 2)
return ['<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + hmac.data_hmac('{}:{}'.format(str(trait.name), dataset.name)) + '">',
index,
- '<a href="/show_trait?trait_id='+str(trait.name)+'&dataset='+dataset.name+'">'+str(trait.name)+'</a>',
+ '<a href="/show_trait?trait_id=' +
+ str(trait.name)+'&dataset='+dataset.name +
+ '">'+str(trait.name)+'</a>',
trait.symbol,
trait.description_display,
trait.location_repr,
- mean,
+ mean,
trait.LRS_score_repr,
trait.LRS_location_repr,
additive]
@@ -322,7 +377,9 @@ def jsonable_table_row(trait, dataset_name, index):
if trait.pubmed_id:
return ['<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + hmac.data_hmac('{}:{}'.format(str(trait.name), dataset.name)) + '">',
index,
- '<a href="/show_trait?trait_id='+str(trait.name)+'&dataset='+dataset.name+'">'+str(trait.name)+'</a>',
+ '<a href="/show_trait?trait_id=' +
+ str(trait.name)+'&dataset='+dataset.name +
+ '">'+str(trait.name)+'</a>',
trait.description_display,
trait.authors,
'<a href="' + trait.pubmed_link + '">' + trait.pubmed_text + '</href>',
@@ -332,7 +389,9 @@ def jsonable_table_row(trait, dataset_name, index):
else:
return ['<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + hmac.data_hmac('{}:{}'.format(str(trait.name), dataset.name)) + '">',
index,
- '<a href="/show_trait?trait_id='+str(trait.name)+'&dataset='+dataset.name+'">'+str(trait.name)+'</a>',
+ '<a href="/show_trait?trait_id=' +
+ str(trait.name)+'&dataset='+dataset.name +
+ '">'+str(trait.name)+'</a>',
trait.description_display,
trait.authors,
trait.pubmed_text,
@@ -342,95 +401,106 @@ def jsonable_table_row(trait, dataset_name, index):
elif dataset.type == "Geno":
return ['<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + hmac.data_hmac('{}:{}'.format(str(trait.name), dataset.name)) + '">',
index,
- '<a href="/show_trait?trait_id='+str(trait.name)+'&dataset='+dataset.name+'">'+str(trait.name)+'</a>',
+ '<a href="/show_trait?trait_id=' +
+ str(trait.name)+'&dataset='+dataset.name +
+ '">'+str(trait.name)+'</a>',
trait.location_repr]
else:
return dict()
+
def retrieve_trait_info(trait, dataset, get_qtl_info=False):
assert dataset, "Dataset doesn't exist"
-
+
+ resource_id = get_resource_id(dataset, trait.name)
if dataset.type == 'Publish':
- query = """
- SELECT
- PublishXRef.Id, InbredSet.InbredSetCode, Publication.PubMed_ID,
- Phenotype.Pre_publication_description, Phenotype.Post_publication_description, Phenotype.Original_description,
- Phenotype.Pre_publication_abbreviation, Phenotype.Post_publication_abbreviation, PublishXRef.mean,
- Phenotype.Lab_code, Phenotype.Submitter, Phenotype.Owner, Phenotype.Authorized_Users,
- Publication.Authors, Publication.Title, Publication.Abstract,
- Publication.Journal, Publication.Volume, Publication.Pages,
- Publication.Month, Publication.Year, PublishXRef.Sequence,
- Phenotype.Units, PublishXRef.comments
- FROM
- PublishXRef, Publication, Phenotype, PublishFreeze, InbredSet
- WHERE
- PublishXRef.Id = %s AND
- Phenotype.Id = PublishXRef.PhenotypeId AND
- Publication.Id = PublishXRef.PublicationId AND
- PublishXRef.InbredSetId = PublishFreeze.InbredSetId AND
- PublishXRef.InbredSetId = InbredSet.Id AND
- PublishFreeze.Id = %s
- """ % (trait.name, dataset.id)
+ the_url = "http://localhost:8080/run-action?resource={}&user={}&branch=data&action=view".format(
+ resource_id, g.user_session.user_id)
+ else:
+ the_url = "http://localhost:8080/run-action?resource={}&user={}&branch=data&action=view&trait={}".format(
+ resource_id, g.user_session.user_id, trait.name)
- logger.sql(query)
- trait_info = g.db.execute(query).fetchone()
-
-
- #XZ, 05/08/2009: Xiaodong add this block to use ProbeSet.Id to find the probeset instead of just using ProbeSet.Name
- #XZ, 05/08/2009: to avoid the problem of same probeset name from different platforms.
- elif dataset.type == 'ProbeSet':
- display_fields_string = ', ProbeSet.'.join(dataset.display_fields)
- display_fields_string = 'ProbeSet.' + display_fields_string
- query = """
- SELECT %s
- FROM ProbeSet, ProbeSetFreeze, ProbeSetXRef
- WHERE
- ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id AND
- ProbeSetXRef.ProbeSetId = ProbeSet.Id AND
- ProbeSetFreeze.Name = '%s' AND
- ProbeSet.Name = '%s'
- """ % (escape(display_fields_string),
- escape(dataset.name),
- escape(str(trait.name)))
- logger.sql(query)
- trait_info = g.db.execute(query).fetchone()
- #XZ, 05/08/2009: We also should use Geno.Id to find marker instead of just using Geno.Name
- # to avoid the problem of same marker name from different species.
- elif dataset.type == 'Geno':
- display_fields_string = string.join(dataset.display_fields,',Geno.')
- display_fields_string = 'Geno.' + display_fields_string
- query = """
- SELECT %s
- FROM Geno, GenoFreeze, GenoXRef
- WHERE
- GenoXRef.GenoFreezeId = GenoFreeze.Id AND
- GenoXRef.GenoId = Geno.Id AND
- GenoFreeze.Name = '%s' AND
- Geno.Name = '%s'
- """ % (escape(display_fields_string),
- escape(dataset.name),
- escape(trait.name))
- logger.sql(query)
- trait_info = g.db.execute(query).fetchone()
- else: #Temp type
- query = """SELECT %s FROM %s WHERE Name = %s"""
- logger.sql(query)
- trait_info = g.db.execute(query,
- (string.join(dataset.display_fields,','),
- dataset.type, trait.name)).fetchone()
+ try:
+ response = requests.get(the_url).content
+ trait_info = json.loads(response)
+ except: # ZS: I'm assuming the trait is viewable if the try fails for some reason; it should never reach this point unless the user has privileges, since that's dealt with in create_trait
+ if dataset.type == 'Publish':
+ query = """
+ SELECT
+ PublishXRef.Id, InbredSet.InbredSetCode, Publication.PubMed_ID,
+ CAST(Phenotype.Pre_publication_description AS BINARY),
+ CAST(Phenotype.Post_publication_description AS BINARY),
+ CAST(Phenotype.Original_description AS BINARY),
+ CAST(Phenotype.Pre_publication_abbreviation AS BINARY),
+ CAST(Phenotype.Post_publication_abbreviation AS BINARY), PublishXRef.mean,
+ Phenotype.Lab_code, Phenotype.Submitter, Phenotype.Owner, Phenotype.Authorized_Users,
+ CAST(Publication.Authors AS BINARY), CAST(Publication.Title AS BINARY), CAST(Publication.Abstract AS BINARY),
+ CAST(Publication.Journal AS BINARY), Publication.Volume, Publication.Pages,
+ Publication.Month, Publication.Year, PublishXRef.Sequence,
+ Phenotype.Units, PublishXRef.comments
+ FROM
+ PublishXRef, Publication, Phenotype, PublishFreeze, InbredSet
+ WHERE
+ PublishXRef.Id = %s AND
+ Phenotype.Id = PublishXRef.PhenotypeId AND
+ Publication.Id = PublishXRef.PublicationId AND
+ PublishXRef.InbredSetId = PublishFreeze.InbredSetId AND
+ PublishXRef.InbredSetId = InbredSet.Id AND
+ PublishFreeze.Id = %s
+ """ % (trait.name, dataset.id)
+
+ logger.sql(query)
+ trait_info = g.db.execute(query).fetchone()
+
+ # XZ, 05/08/2009: Xiaodong add this block to use ProbeSet.Id to find the probeset instead of just using ProbeSet.Name
+ # XZ, 05/08/2009: to avoid the problem of same probeset name from different platforms.
+ elif dataset.type == 'ProbeSet':
+ display_fields_string = ', ProbeSet.'.join(dataset.display_fields)
+ display_fields_string = 'ProbeSet.' + display_fields_string
+ query = """
+ SELECT %s
+ FROM ProbeSet, ProbeSetFreeze, ProbeSetXRef
+ WHERE
+ ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id AND
+ ProbeSetXRef.ProbeSetId = ProbeSet.Id AND
+ ProbeSetFreeze.Name = '%s' AND
+ ProbeSet.Name = '%s'
+ """ % (escape(display_fields_string),
+ escape(dataset.name),
+ escape(str(trait.name)))
+ logger.sql(query)
+ trait_info = g.db.execute(query).fetchone()
+ # XZ, 05/08/2009: We also should use Geno.Id to find marker instead of just using Geno.Name
+ # to avoid the problem of same marker name from different species.
+ elif dataset.type == 'Geno':
+ display_fields_string = ',Geno.'.join(dataset.display_fields)
+ display_fields_string = 'Geno.' + display_fields_string
+ query = """
+ SELECT %s
+ FROM Geno, GenoFreeze, GenoXRef
+ WHERE
+ GenoXRef.GenoFreezeId = GenoFreeze.Id AND
+ GenoXRef.GenoId = Geno.Id AND
+ GenoFreeze.Name = '%s' AND
+ Geno.Name = '%s'
+ """ % (escape(display_fields_string),
+ escape(dataset.name),
+ escape(trait.name))
+ logger.sql(query)
+ trait_info = g.db.execute(query).fetchone()
+ else: # Temp type
+ query = """SELECT %s FROM %s WHERE Name = %s"""
+ logger.sql(query)
+ trait_info = g.db.execute(query,
+ ','.join(dataset.display_fields),
+ dataset.type, trait.name).fetchone()
if trait_info:
trait.haveinfo = True
-
- #XZ: assign SQL query result to trait attributes.
for i, field in enumerate(dataset.display_fields):
holder = trait_info[i]
- # if isinstance(trait_info[i], basestring):
- # logger.debug("HOLDER:", holder)
- # logger.debug("HOLDER2:", holder.decode(encoding='latin1'))
- # holder = unicode(trait_info[i], "utf-8", "ignore")
- if isinstance(trait_info[i], basestring):
- holder = holder.encode('latin1')
+ if isinstance(holder, bytes):
+ holder = holder.decode("utf-8", errors="ignore")
setattr(trait, field, holder)
if dataset.type == 'Publish':
@@ -443,29 +513,18 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
description = trait.post_publication_description
- #If the dataset is confidential and the user has access to confidential
- #phenotype traits, then display the pre-publication description instead
- #of the post-publication description
- if trait.confidential:
+ # If the dataset is confidential and the user has access to confidential
+ # phenotype traits, then display the pre-publication description instead
+ # of the post-publication description
+ trait.description_display = "N/A"
+ if not trait.pubmed_id:
trait.abbreviation = trait.pre_publication_abbreviation
- trait.description_display = trait.pre_publication_description
-
- #if not webqtlUtil.hasAccessToConfidentialPhenotypeTrait(
- # privilege=self.dataset.privilege,
- # userName=self.dataset.userName,
- # authorized_users=self.authorized_users):
- #
- # description = self.pre_publication_description
+ if trait.pre_publication_description:
+ trait.description_display = trait.pre_publication_description
else:
trait.abbreviation = trait.post_publication_abbreviation
if description:
trait.description_display = description.strip()
- else:
- trait.description_display = ""
-
- trait.abbreviation = unicode(str(trait.abbreviation).strip(codecs.BOM_UTF8), 'utf-8', errors="replace")
- trait.description_display = unicode(str(trait.description_display).strip(codecs.BOM_UTF8), 'utf-8', errors="replace")
- trait.authors = unicode(str(trait.authors).strip(codecs.BOM_UTF8), 'utf-8', errors="replace")
if not trait.year.isdigit():
trait.pubmed_text = "N/A"
@@ -476,16 +535,17 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
trait.pubmed_link = webqtlConfig.PUBMEDLINK_URL % trait.pubmed_id
if dataset.type == 'ProbeSet' and dataset.group:
- description_string = unicode(str(trait.description).strip(codecs.BOM_UTF8), 'utf-8')
- target_string = unicode(str(trait.probe_target_description).strip(codecs.BOM_UTF8), 'utf-8')
+ description_string = trait.description
+ target_string = trait.probe_target_description
- if len(description_string) > 1 and description_string != 'None':
+ if str(description_string or "") != "" and description_string != 'None':
description_display = description_string
else:
description_display = trait.symbol
- if (len(description_display) > 1 and description_display != 'N/A' and
- len(target_string) > 1 and target_string != 'None'):
+ if (str(description_display or "") != "" and
+ description_display != 'N/A' and
+ str(target_string or "") != "" and target_string != 'None'):
description_display = description_display + '; ' + target_string.strip()
# Save it for the jinja2 template
@@ -493,15 +553,17 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
trait.location_repr = 'N/A'
if trait.chr and trait.mb:
- trait.location_repr = 'Chr%s: %.6f' % (trait.chr, float(trait.mb))
+ trait.location_repr = 'Chr%s: %.6f' % (
+ trait.chr, float(trait.mb))
elif dataset.type == "Geno":
trait.location_repr = 'N/A'
if trait.chr and trait.mb:
- trait.location_repr = 'Chr%s: %.6f' % (trait.chr, float(trait.mb))
+ trait.location_repr = 'Chr%s: %.6f' % (
+ trait.chr, float(trait.mb))
if get_qtl_info:
- #LRS and its location
+ # LRS and its location
trait.LRS_score_repr = "N/A"
trait.LRS_location_repr = "N/A"
trait.locus = trait.locus_chr = trait.locus_mb = trait.lrs = trait.pvalue = trait.additive = ""
@@ -571,12 +633,12 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
trait.locus = trait.locus_chr = trait.locus_mb = trait.additive = ""
else:
trait.locus = trait.lrs = trait.additive = ""
-
- if (dataset.type == 'Publish' or dataset.type == "ProbeSet") and trait.locus_chr != "" and trait.locus_mb != "":
- trait.LRS_location_repr = LRS_location_repr = 'Chr%s: %.6f' % (trait.locus_chr, float(trait.locus_mb))
- if trait.lrs != "":
+ if (dataset.type == 'Publish' or dataset.type == "ProbeSet") and str(trait.locus_chr or "") != "" and str(trait.locus_mb or "") != "":
+ trait.LRS_location_repr = LRS_location_repr = 'Chr%s: %.6f' % (
+ trait.locus_chr, float(trait.locus_mb))
+ if str(trait.lrs or "") != "":
trait.LRS_score_repr = LRS_score_repr = '%3.1f' % trait.lrs
else:
- raise KeyError, `trait.name`+' information is not found in the database.'
-
- return trait \ No newline at end of file
+ raise KeyError(repr(trait.name) +
+ ' information is not found in the database.')
+ return trait
diff --git a/wqflask/base/webqtlCaseData.py b/wqflask/base/webqtlCaseData.py
index d8487f01..aa55470f 100644
--- a/wqflask/base/webqtlCaseData.py
+++ b/wqflask/base/webqtlCaseData.py
@@ -19,8 +19,7 @@
# This module is used by GeneNetwork project (www.genenetwork.org)
#
# Created by GeneNetwork Core Team 2010/08/10
-#
-# Last updated by GeneNetwork Core Team 2010/10/20
+
from utility.logger import getLogger
logger = getLogger(__name__)
@@ -29,7 +28,7 @@ import utility.tools
utility.tools.show_settings()
-class webqtlCaseData(object):
+class webqtlCaseData:
"""one case data in one trait"""
def __init__(self, name, value=None, variance=None, num_cases=None, name2=None):
@@ -43,44 +42,40 @@ class webqtlCaseData(object):
self.outlier = None # Not set to True/False until later
def __repr__(self):
- str = "<webqtlCaseData> "
- if self.value != None:
- str += "value=%2.3f" % self.value
- if self.variance != None:
- str += " variance=%2.3f" % self.variance
+ case_data_string = "<webqtlCaseData> "
+ if self.value is not None:
+ case_data_string += "value=%2.3f" % self.value
+ if self.variance is not None:
+ case_data_string += " variance=%2.3f" % self.variance
if self.num_cases:
- str += " ndata=%s" % self.num_cases
+ case_data_string += " ndata=%s" % self.num_cases
if self.name:
- str += " name=%s" % self.name
+ case_data_string += " name=%s" % self.name
if self.name2:
- str += " name2=%s" % self.name2
- return str
+ case_data_string += " name2=%s" % self.name2
+ return case_data_string
@property
def class_outlier(self):
"""Template helper"""
if self.outlier:
return "outlier"
- else:
- return ""
+ return ""
@property
def display_value(self):
- if self.value != None:
+ if self.value is not None:
return "%2.3f" % self.value
- else:
- return "x"
+ return "x"
@property
def display_variance(self):
- if self.variance != None:
+ if self.variance is not None:
return "%2.3f" % self.variance
- else:
- return "x"
+ return "x"
@property
def display_num_cases(self):
- if self.num_cases != None:
+ if self.num_cases is not None:
return "%s" % self.num_cases
- else:
- return "x"
+ return "x" \ No newline at end of file
diff --git a/wqflask/base/webqtlConfig.py b/wqflask/base/webqtlConfig.py
index 55407123..bb8704a5 100644
--- a/wqflask/base/webqtlConfig.py
+++ b/wqflask/base/webqtlConfig.py
@@ -17,6 +17,10 @@ DEBUG = 1
#USER privilege
USERDICT = {'guest':1,'user':2, 'admin':3, 'root':4}
+#Set privileges
+SUPER_PRIVILEGES = {'data': 'edit', 'metadata': 'edit', 'admin': 'edit-admins'}
+DEFAULT_PRIVILEGES = {'data': 'view', 'metadata': 'view', 'admin': 'not-admin'}
+
#minimum number of informative strains
KMININFORMATIVE = 5
@@ -59,6 +63,8 @@ OPEN_TARGETS_URL = "https://genetics.opentargets.org/gene/%s"
UNIPROT_URL = "https://www.uniprot.org/uniprot/%s"
RGD_URL = "https://rgd.mcw.edu/rgdweb/elasticResults.html?term=%s&category=Gene&species=%s"
PHENOGEN_URL = "https://phenogen.org/gene.jsp?speciesCB=Rn&auto=Y&geneTxt=%s&genomeVer=rn6&section=geneEQTL"
+RRID_MOUSE_URL = "https://www.jax.org/strain/%s"
+RRID_RAT_URL = "https://rgd.mcw.edu/rgdweb/report/strain/main.html?id=%s"
# Temporary storage (note that this TMPDIR can be set as an
# environment variable - use utility.tools.TEMPDIR when you
@@ -81,7 +87,7 @@ assert_writable_dir(GENERATED_TEXT_DIR)
# Flat file directories
GENODIR = flat_files('genotype')+'/'
assert_dir(GENODIR)
-assert_dir(GENODIR+'bimbam') # for gemma
+# assert_dir(GENODIR+'bimbam') # for gemma
# JSON genotypes are OBSOLETE
JSON_GENODIR = flat_files('genotype/json')+'/'
diff --git a/wqflask/cfg/default_settings.py b/wqflask/cfg/default_settings.py
deleted file mode 100644
index 5af61d5a..00000000
--- a/wqflask/cfg/default_settings.py
+++ /dev/null
@@ -1 +0,0 @@
-# no longer in use
diff --git a/wqflask/db/call.py b/wqflask/db/call.py
index 1a1b3adc..0971d2a2 100644
--- a/wqflask/db/call.py
+++ b/wqflask/db/call.py
@@ -3,7 +3,10 @@
from flask import g
import string
-import urllib2
+try: # Python2 support
+ import urllib.request, urllib.error, urllib.parse
+except:
+ import urllib2
import json
from utility.tools import USE_GN_SERVER, LOG_SQL, GN_SERVER_URL
from utility.benchmark import Bench
@@ -26,8 +29,8 @@ GN_SERVER result when set (which should return a Tuple)
else:
res2 = result,
if LOG_SQL:
- logger.debug("Replaced SQL call",query)
- logger.debug(path,res2)
+ logger.debug("Replaced SQL call", query)
+ logger.debug(path, res2)
return res2
else:
return fetchone(query)
@@ -37,7 +40,7 @@ def fetchone(query):
original fetchone, but with logging)
"""
- with Bench("SQL",LOG_SQL):
+ with Bench("SQL", LOG_SQL):
def helper(query):
res = g.db.execute(query)
return res.fetchone()
@@ -48,7 +51,7 @@ def fetchall(query):
original fetchall, but with logging)
"""
- with Bench("SQL",LOG_SQL):
+ with Bench("SQL", LOG_SQL):
def helper(query):
res = g.db.execute(query)
return res.fetchall()
@@ -58,8 +61,12 @@ def gn_server(path):
"""Return JSON record by calling GN_SERVER
"""
- with Bench("GN_SERVER",LOG_SQL):
- res = urllib2.urlopen(GN_SERVER_URL+path)
+ with Bench("GN_SERVER", LOG_SQL):
+ res = ()
+ try:
+ res = urllib.request.urlopen(GN_SERVER_URL+path)
+ except:
+ res = urllib2.urlopen(GN_SERVER_URL+path)
rest = res.read()
res2 = json.loads(rest)
logger.debug(res2)
diff --git a/wqflask/db/webqtlDatabaseFunction.py b/wqflask/db/webqtlDatabaseFunction.py
index 8a9dc79d..2805febd 100644
--- a/wqflask/db/webqtlDatabaseFunction.py
+++ b/wqflask/db/webqtlDatabaseFunction.py
@@ -35,13 +35,13 @@ def retrieve_species(group):
"""Get the species of a group (e.g. returns string "mouse" on "BXD"
"""
- result = fetch1("select Species.Name from Species, InbredSet where InbredSet.Name = '%s' and InbredSet.SpeciesId = Species.Id" % (group),"/cross/"+group+".json",lambda r: (r["species"],))[0]
- logger.debug("retrieve_species result:",result)
+ result = fetch1("select Species.Name from Species, InbredSet where InbredSet.Name = '%s' and InbredSet.SpeciesId = Species.Id" % (group), "/cross/"+group+".json", lambda r: (r["species"],))[0]
+ logger.debug("retrieve_species result:", result)
return result
def retrieve_species_id(group):
- result = fetch1("select SpeciesId from InbredSet where Name = '%s'" % (group),"/cross/"+group+".json",lambda r: (r["species_id"],))[0]
- logger.debug("retrieve_species_id result:",result)
+ result = fetch1("select SpeciesId from InbredSet where Name = '%s'" % (group), "/cross/"+group+".json", lambda r: (r["species_id"],))[0]
+ logger.debug("retrieve_species_id result:", result)
return result
diff --git a/wqflask/maintenance/convert_dryad_to_bimbam.py b/wqflask/maintenance/convert_dryad_to_bimbam.py
index e833b395..12ce35e9 100644
--- a/wqflask/maintenance/convert_dryad_to_bimbam.py
+++ b/wqflask/maintenance/convert_dryad_to_bimbam.py
@@ -6,7 +6,6 @@ Convert data dryad files to a BIMBAM _geno and _snps file
"""
-from __future__ import print_function, division, absolute_import
import sys
sys.path.append("..")
@@ -67,4 +66,4 @@ def convert_dryad_to_bimbam(filename):
if __name__=="__main__":
input_filename = "/home/zas1024/cfw_data/" + sys.argv[1] + ".txt"
- convert_dryad_to_bimbam(input_filename) \ No newline at end of file
+ convert_dryad_to_bimbam(input_filename)
diff --git a/wqflask/maintenance/convert_geno_to_bimbam.py b/wqflask/maintenance/convert_geno_to_bimbam.py
index 528b98cf..d49742f2 100644
--- a/wqflask/maintenance/convert_geno_to_bimbam.py
+++ b/wqflask/maintenance/convert_geno_to_bimbam.py
@@ -9,7 +9,6 @@ code
"""
-from __future__ import print_function, division, absolute_import
import sys
sys.path.append("..")
import os
@@ -187,4 +186,4 @@ if __name__=="__main__":
#convertob = ConvertGenoFile("/home/zas1024/gene/genotype_files/genotypes/SRxSHRSPF2.geno", "/home/zas1024/gene/genotype_files/new_genotypes/SRxSHRSPF2.json")
#convertob.convert()
ConvertGenoFile.process_all(Old_Geno_Directory, New_Geno_Directory)
- #ConvertGenoFiles(Geno_Directory) \ No newline at end of file
+ #ConvertGenoFiles(Geno_Directory)
diff --git a/wqflask/maintenance/gen_select_dataset.py b/wqflask/maintenance/gen_select_dataset.py
index 647e58a2..544e2fd1 100644
--- a/wqflask/maintenance/gen_select_dataset.py
+++ b/wqflask/maintenance/gen_select_dataset.py
@@ -30,18 +30,10 @@ It needs to be run manually when database has been changed. Run it as
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import print_function, division
-
-#from flask import config
-#
-#cdict = {}
-#config = config.Config(cdict).from_envvar('WQFLASK_SETTINGS')
-#print("cdict is:", cdict)
-
import sys
# NEW: Note we prepend the current path - otherwise a guix instance of GN2 may be used instead
-sys.path.insert(0,'./')
+sys.path.insert(0, './')
# NEW: import app to avoid a circular dependency on utility.tools
from wqflask import app
@@ -50,7 +42,7 @@ from utility.tools import locate, locate_ignore_error, TEMPDIR, SQL_URI
import MySQLdb
import simplejson as json
-import urlparse
+import urllib.parse
#import sqlalchemy as sa
@@ -66,7 +58,7 @@ from pprint import pformat as pf
def parse_db_uri():
"""Converts a database URI to the db name, host name, user name, and password"""
- parsed_uri = urlparse.urlparse(SQL_URI)
+ parsed_uri = urllib.parse.urlparse(SQL_URI)
db_conn_info = dict(
db = parsed_uri.path[1:],
@@ -108,7 +100,7 @@ def get_types(groups):
"""Build types list"""
types = {}
#print("Groups: ", pf(groups))
- for species, group_dict in groups.iteritems():
+ for species, group_dict in list(groups.items()):
types[species] = {}
for group_name, _group_full_name in group_dict:
# make group an alias to shorten the code
@@ -195,9 +187,9 @@ def build_types(species, group):
def get_datasets(types):
"""Build datasets list"""
datasets = {}
- for species, group_dict in types.iteritems():
+ for species, group_dict in list(types.items()):
datasets[species] = {}
- for group, type_list in group_dict.iteritems():
+ for group, type_list in list(group_dict.items()):
datasets[species][group] = {}
for type_name in type_list:
these_datasets = build_datasets(species, group, type_name[0])
@@ -319,4 +311,4 @@ def _test_it():
if __name__ == '__main__':
Conn = MySQLdb.Connect(**parse_db_uri())
Cursor = Conn.cursor()
- main() \ No newline at end of file
+ main()
diff --git a/wqflask/maintenance/generate_kinship_from_bimbam.py b/wqflask/maintenance/generate_kinship_from_bimbam.py
index b53f5dda..60257b28 100644
--- a/wqflask/maintenance/generate_kinship_from_bimbam.py
+++ b/wqflask/maintenance/generate_kinship_from_bimbam.py
@@ -8,7 +8,6 @@ and uses GEMMA to generate their corresponding kinship/relatedness matrix file
"""
-from __future__ import print_function, division, absolute_import
import sys
sys.path.append("..")
import os
@@ -58,4 +57,4 @@ if __name__=="__main__":
Bimbam_Directory = """/export/local/home/zas1024/genotype_files/genotype/bimbam/"""
GenerateKinshipMatrices.process_all(Geno_Directory, Bimbam_Directory)
- #./gemma -g /home/zas1024/genotype_files/genotype/bimbam/BXD_geno.txt -p /home/zas1024/genotype_files/genotype/bimbam/BXD_pheno.txt -gk 1 -o BXD \ No newline at end of file
+ #./gemma -g /home/zas1024/genotype_files/genotype/bimbam/BXD_geno.txt -p /home/zas1024/genotype_files/genotype/bimbam/BXD_pheno.txt -gk 1 -o BXD
diff --git a/wqflask/maintenance/generate_probesetfreeze_file.py b/wqflask/maintenance/generate_probesetfreeze_file.py
index b7b2dc8e..b1e41e9a 100644
--- a/wqflask/maintenance/generate_probesetfreeze_file.py
+++ b/wqflask/maintenance/generate_probesetfreeze_file.py
@@ -1,7 +1,5 @@
#!/usr/bin/python
-from __future__ import absolute_import, print_function, division
-
import sys
# sys.path.insert(0, "..") - why?
@@ -82,7 +80,7 @@ def get_probeset_vals(cursor, dataset_name):
def trim_strains(strains, probeset_vals):
trimmed_strains = []
#print("probeset_vals is:", pf(probeset_vals))
- first_probeset = list(probeset_vals.itervalues())[0]
+ first_probeset = list(probeset_vals.values())[0]
print("\n**** first_probeset is:", pf(first_probeset))
for strain in strains:
print("\n**** strain is:", pf(strain))
diff --git a/wqflask/maintenance/geno_to_json.py b/wqflask/maintenance/geno_to_json.py
index 9579812a..7e7fd241 100644
--- a/wqflask/maintenance/geno_to_json.py
+++ b/wqflask/maintenance/geno_to_json.py
@@ -9,7 +9,6 @@ code
"""
-from __future__ import print_function, division, absolute_import
import sys
sys.path.append("..")
import os
@@ -194,4 +193,4 @@ if __name__=="__main__":
ConvertGenoFile.process_all(Old_Geno_Directory, New_Geno_Directory)
#ConvertGenoFiles(Geno_Directory)
- #process_csv(Input_File, Output_File) \ No newline at end of file
+ #process_csv(Input_File, Output_File)
diff --git a/wqflask/maintenance/get_group_samplelists.py b/wqflask/maintenance/get_group_samplelists.py
index fb22898a..3f9d0278 100644
--- a/wqflask/maintenance/get_group_samplelists.py
+++ b/wqflask/maintenance/get_group_samplelists.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import os
import glob
import gzip
diff --git a/wqflask/maintenance/print_benchmark.py b/wqflask/maintenance/print_benchmark.py
index ae327cf3..b24ce4f1 100644
--- a/wqflask/maintenance/print_benchmark.py
+++ b/wqflask/maintenance/print_benchmark.py
@@ -1,7 +1,5 @@
#!/usr/bin/python
-from __future__ import absolute_import, print_function, division
-
import time
from pprint import pformat as pf
@@ -40,4 +38,4 @@ def new_main():
print(pf(TheCounter.Counters))
if __name__ == '__main__':
- new_main() \ No newline at end of file
+ new_main()
diff --git a/wqflask/maintenance/quantile_normalize.py b/wqflask/maintenance/quantile_normalize.py
index 41a3aad8..701b2b50 100644
--- a/wqflask/maintenance/quantile_normalize.py
+++ b/wqflask/maintenance/quantile_normalize.py
@@ -1,12 +1,7 @@
-from __future__ import absolute_import, print_function, division
-
import sys
-sys.path.insert(0,'./')
-
-from itertools import izip
-
+sys.path.insert(0, './')
import MySQLdb
-import urlparse
+import urllib.parse
import numpy as np
import pandas as pd
@@ -22,7 +17,7 @@ from utility.tools import ELASTICSEARCH_HOST, ELASTICSEARCH_PORT, SQL_URI
def parse_db_uri():
"""Converts a database URI to the db name, host name, user name, and password"""
- parsed_uri = urlparse.urlparse(SQL_URI)
+ parsed_uri = urllib.parse.urlparse(SQL_URI)
db_conn_info = dict(
db = parsed_uri.path[1:],
@@ -37,7 +32,7 @@ def create_dataframe(input_file):
with open(input_file) as f:
ncols = len(f.readline().split("\t"))
- input_array = np.loadtxt(open(input_file, "rb"), delimiter="\t", skiprows=1, usecols=range(1, ncols))
+ input_array = np.loadtxt(open(input_file, "rb"), delimiter="\t", skiprows=1, usecols=list(range(1, ncols)))
return pd.DataFrame(input_array)
#This function taken from https://github.com/ShawnLYU/Quantile_Normalize
@@ -60,7 +55,7 @@ def set_data(dataset_name):
sample_list = []
with open(orig_file, 'r') as orig_fh, open('/home/zas1024/cfw_data/quant_norm.csv', 'r') as quant_fh:
- for i, (line1, line2) in enumerate(izip(orig_fh, quant_fh)):
+ for i, (line1, line2) in enumerate(zip(orig_fh, quant_fh)):
trait_dict = {}
sample_list = []
if i == 0:
@@ -126,4 +121,4 @@ if __name__ == '__main__':
}
)
- print(response) \ No newline at end of file
+ print(response)
diff --git a/wqflask/maintenance/set_resource_defaults.py b/wqflask/maintenance/set_resource_defaults.py
new file mode 100644
index 00000000..4177c124
--- /dev/null
+++ b/wqflask/maintenance/set_resource_defaults.py
@@ -0,0 +1,164 @@
+"""
+
+Script that sets default resource access masks for use with the DB proxy
+
+Defaults will be:
+Owner - omni_gn
+Mask - Public/non-confidential: { data: "view",
+ metadata: "view",
+ admin: "not-admin" }
+ Private/confidentia: { data: "no-access",
+ metadata: "no-access",
+ admin: "not-admin" }
+
+To run:
+./bin/genenetwork2 ~/my_settings.py -c ./wqflask/maintenance/gen_select_dataset.py
+
+"""
+
+import sys
+import json
+
+# NEW: Note we prepend the current path - otherwise a guix instance of GN2 may be used instead
+sys.path.insert(0, './')
+
+# NEW: import app to avoid a circular dependency on utility.tools
+from wqflask import app
+
+from utility import hmac
+from utility.tools import SQL_URI
+from utility.redis_tools import get_redis_conn, get_user_id, add_resource, get_resources, get_resource_info
+Redis = get_redis_conn()
+
+import MySQLdb
+
+import urllib.parse
+
+from utility.logger import getLogger
+logger = getLogger(__name__)
+
+def parse_db_uri():
+ """Converts a database URI to the db name, host name, user name, and password"""
+
+ parsed_uri = urllib.parse.urlparse(SQL_URI)
+
+ db_conn_info = dict(
+ db = parsed_uri.path[1:],
+ host = parsed_uri.hostname,
+ user = parsed_uri.username,
+ passwd = parsed_uri.password)
+
+ print(db_conn_info)
+ return db_conn_info
+
+def insert_probeset_resources(default_owner_id):
+ current_resources = Redis.hgetall("resources")
+ Cursor.execute(""" SELECT
+ ProbeSetFreeze.Id, ProbeSetFreeze.Name, ProbeSetFreeze.confidentiality, ProbeSetFreeze.public
+ FROM
+ ProbeSetFreeze""")
+
+ resource_results = Cursor.fetchall()
+ for i, resource in enumerate(resource_results):
+ resource_ob = {}
+ resource_ob['name'] = resource[1]
+ resource_ob['owner_id'] = default_owner_id
+ resource_ob['data'] = { "dataset" : str(resource[0])}
+ resource_ob['type'] = "dataset-probeset"
+ if resource[2] < 1 and resource[3] > 0:
+ resource_ob['default_mask'] = { "data": "view",
+ "metadata": "view",
+ "admin": "not-admin"}
+ else:
+ resource_ob['default_mask'] = { "data": "no-access",
+ "metadata": "no-access",
+ "admin": "not-admin"}
+ resource_ob['group_masks'] = {}
+
+ add_resource(resource_ob, update=False)
+
+def insert_publish_resources(default_owner_id):
+ current_resources = Redis.hgetall("resources")
+ Cursor.execute(""" SELECT
+ PublishXRef.Id, PublishFreeze.Id, InbredSet.InbredSetCode
+ FROM
+ PublishXRef, PublishFreeze, InbredSet, Publication
+ WHERE
+ PublishFreeze.InbredSetId = PublishXRef.InbredSetId AND
+ InbredSet.Id = PublishXRef.InbredSetId AND
+ Publication.Id = PublishXRef.PublicationId""")
+
+ resource_results = Cursor.fetchall()
+ for resource in resource_results:
+ if resource[2]:
+ resource_ob = {}
+ if resource[2]:
+ resource_ob['name'] = resource[2] + "_" + str(resource[0])
+ else:
+ resource_ob['name'] = str(resource[0])
+ resource_ob['owner_id'] = default_owner_id
+ resource_ob['data'] = { "dataset" : str(resource[1]) ,
+ "trait" : str(resource[0])}
+ resource_ob['type'] = "dataset-publish"
+ resource_ob['default_mask'] = { "data": "view",
+ "metadata": "view",
+ "admin": "not-admin"}
+
+ resource_ob['group_masks'] = {}
+
+ add_resource(resource_ob, update=False)
+ else:
+ continue
+
+def insert_geno_resources(default_owner_id):
+ current_resources = Redis.hgetall("resources")
+ Cursor.execute(""" SELECT
+ GenoFreeze.Id, GenoFreeze.ShortName, GenoFreeze.confidentiality
+ FROM
+ GenoFreeze""")
+
+ resource_results = Cursor.fetchall()
+ for i, resource in enumerate(resource_results):
+ resource_ob = {}
+ resource_ob['name'] = resource[1]
+ if resource[1] == "HET3-ITPGeno":
+ resource_ob['owner_id'] = "c5ce8c56-78a6-474f-bcaf-7129d97f56ae"
+ else:
+ resource_ob['owner_id'] = default_owner_id
+ resource_ob['data'] = { "dataset" : str(resource[0]) }
+ resource_ob['type'] = "dataset-geno"
+ if resource[2] < 1:
+ resource_ob['default_mask'] = { "data": "view",
+ "metadata": "view",
+ "admin": "not-admin"}
+ else:
+ resource_ob['default_mask'] = { "data": "no-access",
+ "metadata": "no-access",
+ "admin": "not-admin"}
+ resource_ob['group_masks'] = {}
+
+ add_resource(resource_ob, update=False)
+
+def insert_resources(default_owner_id):
+ current_resources = get_resources()
+ print("START")
+ insert_publish_resources(default_owner_id)
+ print("AFTER PUBLISH")
+ insert_geno_resources(default_owner_id)
+ print("AFTER GENO")
+ insert_probeset_resources(default_owner_id)
+ print("AFTER PROBESET")
+
+def main():
+ """Generates and outputs (as json file) the data for the main dropdown menus on the home page"""
+
+ Redis.delete("resources")
+
+ owner_id = "c5ce8c56-78a6-474f-bcaf-7129d97f56ae"
+
+ insert_resources(owner_id)
+
+if __name__ == '__main__':
+ Conn = MySQLdb.Connect(**parse_db_uri())
+ Cursor = Conn.cursor()
+ main()
diff --git a/wqflask/mock/es_double.py b/wqflask/mock/es_double.py
deleted file mode 100644
index 6ef8a1b9..00000000
--- a/wqflask/mock/es_double.py
+++ /dev/null
@@ -1,15 +0,0 @@
-class ESDouble(object):
- def __init__(self):
- self.items = {}
-
- def ping(self):
- return true
-
- def create(self, index, doc_type, body, id):
- self.items["index"] = {doc_type: {"id": id, "_source": data}}
-
- def search(self, index, doc_type, body):
- return {
- "hits": {
- "hits": self.items[index][doc_type][body]
- }}
diff --git a/wqflask/run_gunicorn.py b/wqflask/run_gunicorn.py
index adffdca3..58108e03 100644
--- a/wqflask/run_gunicorn.py
+++ b/wqflask/run_gunicorn.py
@@ -7,7 +7,7 @@
# from flask import Flask
# application = Flask(__name__)
-print "===> Starting up Gunicorn process"
+print("===> Starting up Gunicorn process")
from wqflask import app
from utility.startup_config import app_config
diff --git a/wqflask/runserver.py b/wqflask/runserver.py
index 15572d97..df957bd9 100644
--- a/wqflask/runserver.py
+++ b/wqflask/runserver.py
@@ -8,28 +8,20 @@
# /sbin/iptables -A INPUT -p tcp -i eth0 -s ! 71.236.239.43 --dport 5003 -j DROP
from wqflask import app
-
+from utility.startup_config import app_config
+from utility.tools import WEBSERVER_MODE, SERVER_PORT
import logging
-import utility.logger
-logger = utility.logger.getLogger(__name__ )
-
-import signal
-signal.signal(signal.SIGPIPE, signal.SIG_DFL)
-BLUE = '\033[94m'
+BLUE = '\033[94m'
GREEN = '\033[92m'
-BOLD = '\033[1m'
-ENDC = '\033[0m'
-
-from utility.startup_config import app_config
+BOLD = '\033[1m'
+ENDC = '\033[0m'
app_config()
werkzeug_logger = logging.getLogger('werkzeug')
-from utility.tools import WEBSERVER_MODE, SERVER_PORT
-
if WEBSERVER_MODE == 'DEBUG':
app.run(host='0.0.0.0',
port=SERVER_PORT,
@@ -47,7 +39,7 @@ elif WEBSERVER_MODE == 'DEV':
threaded=False,
processes=0,
use_reloader=True)
-else: # staging/production modes
+else: # staging/production modes
app.run(host='0.0.0.0',
port=SERVER_PORT,
debug=False,
diff --git a/wqflask/mock/__init__.py b/wqflask/tests/__init__.py
index e69de29b..e69de29b 100644
--- a/wqflask/mock/__init__.py
+++ b/wqflask/tests/__init__.py
diff --git a/wqflask/tests/integration/__init__.py b/wqflask/tests/integration/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/wqflask/tests/integration/__init__.py
diff --git a/wqflask/tests/integration/test_markdown_routes.py b/wqflask/tests/integration/test_markdown_routes.py
new file mode 100644
index 00000000..5e3e5045
--- /dev/null
+++ b/wqflask/tests/integration/test_markdown_routes.py
@@ -0,0 +1,21 @@
+"Integration tests for markdown routes"
+import unittest
+
+from bs4 import BeautifulSoup
+
+from wqflask import app
+
+
+class TestGenMenu(unittest.TestCase):
+ """Tests for glossary"""
+
+ def setUp(self):
+ self.app = app.test_client()
+
+ def tearDown(self):
+ pass
+
+ def test_glossary_page(self):
+ """Test that the glossary page is rendered properly"""
+ response = self.app.get('/glossary', follow_redirects=True)
+ pass
diff --git a/wqflask/tests/unit/__init__.py b/wqflask/tests/unit/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/wqflask/tests/unit/__init__.py
diff --git a/wqflask/tests/unit/base/__init__.py b/wqflask/tests/unit/base/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/wqflask/tests/unit/base/__init__.py
diff --git a/wqflask/tests/unit/base/data.py b/wqflask/tests/unit/base/data.py
new file mode 100644
index 00000000..06a5a989
--- /dev/null
+++ b/wqflask/tests/unit/base/data.py
@@ -0,0 +1,110 @@
+gen_menu_json = """
+{
+ "datasets": {
+ "human": {
+ "HLC": {
+ "Liver mRNA": [
+ [
+ "320",
+ "HLC_0311",
+ "GSE9588 Human Liver Normal (Mar11) Both Sexes"
+ ]
+ ],
+ "Phenotypes": [
+ [
+ "635",
+ "HLCPublish",
+ "HLC Published Phenotypes"
+ ]
+ ]
+ }
+ },
+ "mouse": {
+ "BXD": {
+ "Genotypes": [
+ [
+ "600",
+ "BXDGeno",
+ "BXD Genotypes"
+ ]
+ ],
+ "Hippocampus mRNA": [
+ [
+ "112",
+ "HC_M2_0606_P",
+ "Hippocampus Consortium M430v2 (Jun06) PDNN"
+ ]
+ ],
+ "Phenotypes": [
+ [
+ "602",
+ "BXDPublish",
+ "BXD Published Phenotypes"
+ ]
+ ]
+ }
+ }
+ },
+ "groups": {
+ "human": [
+ [
+ "HLC",
+ "Liver: Normal Gene Expression with Genotypes (Merck)",
+ "Family:None"
+ ]
+ ],
+ "mouse": [
+ [
+ "BXD",
+ "BXD",
+ "Family:None"
+ ]
+ ]
+ },
+ "species": [
+ [
+ "human",
+ "Human"
+ ],
+ [
+ "mouse",
+ "Mouse"
+ ]
+ ],
+ "types": {
+ "human": {
+ "HLC": [
+ [
+ "Phenotypes",
+ "Traits and Cofactors",
+ "Phenotypes"
+ ],
+ [
+ "Liver mRNA",
+ "Liver mRNA",
+ "Molecular Trait Datasets"
+ ]
+ ]
+ },
+ "mouse": {
+ "BXD": [
+ [
+ "Phenotypes",
+ "Traits and Cofactors",
+ "Phenotypes"
+ ],
+ [
+ "Genotypes",
+ "DNA Markers and SNPs",
+ "Genotypes"
+ ],
+ [
+ "Hippocampus mRNA",
+ "Hippocampus mRNA",
+ "Molecular Trait Datasets"
+ ]
+ ]
+ }
+ }
+}
+"""
diff --git a/wqflask/tests/unit/base/test_data_set.py b/wqflask/tests/unit/base/test_data_set.py
new file mode 100644
index 00000000..96563a16
--- /dev/null
+++ b/wqflask/tests/unit/base/test_data_set.py
@@ -0,0 +1,181 @@
+"""Tests for wqflask/base/data_set.py"""
+
+import unittest
+from unittest import mock
+
+from wqflask import app
+from .data import gen_menu_json
+from base.data_set import DatasetType
+
+
+class TestDataSetTypes(unittest.TestCase):
+ """Tests for the DataSetType class"""
+
+ def setUp(self):
+ self.test_dataset = """
+ {
+ "AD-cases-controls-MyersGeno": "Geno",
+ "AD-cases-controls-MyersPublish": "Publish",
+ "AKXDGeno": "Geno",
+ "AXBXAGeno": "Geno",
+ "AXBXAPublish": "Publish",
+ "Aging-Brain-UCIPublish": "Publish",
+ "All Phenotypes": "Publish",
+ "B139_K_1206_M": "ProbeSet",
+ "B139_K_1206_R": "ProbeSet"
+ }
+ """
+ self.app_context = app.app_context()
+ self.app_context.push()
+
+ def tearDown(self):
+ self.app_context.pop()
+
+ @mock.patch('base.data_set.g')
+ def test_data_set_type(self, db_mock):
+ """Test that DatasetType returns correctly if the Redis Instance is not empty
+ and the name variable exists in the dictionary
+
+ """
+ with app.app_context():
+ db_mock.get = mock.Mock()
+ redis_mock = mock.Mock()
+ redis_mock.get.return_value = self.test_dataset
+ self.assertEqual(DatasetType(redis_mock)
+ ("All Phenotypes"), "Publish")
+ redis_mock.get.assert_called_once_with("dataset_structure")
+
+ @mock.patch('base.data_set.requests.get')
+ def test_data_set_type_with_empty_redis(self, request_mock):
+ """Test that DatasetType returns correctly if the Redis Instance is empty and
+ the name variable exists in the dictionary
+
+ """
+ with app.app_context():
+ request_mock.return_value.content = gen_menu_json
+ redis_mock = mock.Mock()
+ redis_mock.get.return_value = None
+ data_set = DatasetType(redis_mock)
+ self.assertEqual(data_set("BXDGeno"), "Geno")
+ self.assertEqual(data_set("BXDPublish"), "Publish")
+ self.assertEqual(data_set("HLC_0311"), "ProbeSet")
+
+ redis_mock.set.assert_called_once_with(
+ "dataset_structure",
+ ('{"HLC_0311": "ProbeSet", '
+ '"HLCPublish": "Publish", '
+ '"BXDGeno": "Geno", '
+ '"HC_M2_0606_P": "ProbeSet", '
+ '"BXDPublish": "Publish"}'))
+
+ @mock.patch('base.data_set.g')
+ def test_set_dataset_key_mrna(self, db_mock):
+ with app.app_context():
+ db_mock.db.execute.return_value.fetchone.return_value = [1, 2, 3]
+ redis_mock = mock.Mock()
+ redis_mock.get.return_value = self.test_dataset
+ data_set = DatasetType(redis_mock)
+ data_set.set_dataset_key("mrna_expr", "Test")
+ self.assertEqual(data_set("Test"), "ProbeSet")
+ redis_mock.set.assert_called_once_with(
+ "dataset_structure",
+ ('{"AD-cases-controls-MyersGeno": "Geno", '
+ '"AD-cases-controls-MyersPublish": "Publish", '
+ '"AKXDGeno": "Geno", '
+ '"AXBXAGeno": "Geno", '
+ '"AXBXAPublish": "Publish", '
+ '"Aging-Brain-UCIPublish": "Publish", '
+ '"All Phenotypes": "Publish", '
+ '"B139_K_1206_M": "ProbeSet", '
+ '"B139_K_1206_R": "ProbeSet", '
+ '"Test": "ProbeSet"}'))
+
+ db_mock.db.execute.assert_called_with(
+ ("SELECT ProbeSetFreeze.Id FROM ProbeSetFreeze " +
+ "WHERE ProbeSetFreeze.Name = \"Test\" ")
+ )
+
+ @mock.patch('base.data_set.g')
+ def test_set_dataset_key_pheno(self, db_mock):
+ with app.app_context():
+ db_mock.db.execute.return_value.fetchone.return_value = [1, 2, 3]
+ redis_mock = mock.Mock()
+ redis_mock.get.return_value = self.test_dataset
+ data_set = DatasetType(redis_mock)
+ data_set.set_dataset_key("pheno", "Test")
+ self.assertEqual(data_set("Test"), "Publish")
+ redis_mock.set.assert_called_once_with(
+ "dataset_structure",
+ ('{"AD-cases-controls-MyersGeno": "Geno", '
+ '"AD-cases-controls-MyersPublish": "Publish", '
+ '"AKXDGeno": "Geno", '
+ '"AXBXAGeno": "Geno", '
+ '"AXBXAPublish": "Publish", '
+ '"Aging-Brain-UCIPublish": "Publish", '
+ '"All Phenotypes": "Publish", '
+ '"B139_K_1206_M": "ProbeSet", '
+ '"B139_K_1206_R": "ProbeSet", '
+ '"Test": "Publish"}'))
+ db_mock.db.execute.assert_called_with(
+ ("SELECT InfoFiles.GN_AccesionId "
+ "FROM InfoFiles, PublishFreeze, InbredSet "
+ "WHERE InbredSet.Name = 'Test' AND "
+ "PublishFreeze.InbredSetId = InbredSet.Id AND "
+ "InfoFiles.InfoPageName = PublishFreeze.Name")
+ )
+
+ @mock.patch('base.data_set.g')
+ def test_set_dataset_other_pheno(self, db_mock):
+ with app.app_context():
+ db_mock.db.execute.return_value.fetchone.return_value = [1, 2, 3]
+ redis_mock = mock.Mock()
+ redis_mock.get.return_value = self.test_dataset
+ data_set = DatasetType(redis_mock)
+ data_set.set_dataset_key("other_pheno", "Test")
+ self.assertEqual(data_set("Test"), "Publish")
+
+ redis_mock.set.assert_called_once_with(
+ "dataset_structure",
+ ('{"AD-cases-controls-MyersGeno": "Geno", '
+ '"AD-cases-controls-MyersPublish": "Publish", '
+ '"AKXDGeno": "Geno", '
+ '"AXBXAGeno": "Geno", '
+ '"AXBXAPublish": "Publish", '
+ '"Aging-Brain-UCIPublish": "Publish", '
+ '"All Phenotypes": "Publish", '
+ '"B139_K_1206_M": "ProbeSet", '
+ '"B139_K_1206_R": "ProbeSet", '
+ '"Test": "Publish"}'))
+
+ db_mock.db.execute.assert_called_with(
+ ("SELECT PublishFreeze.Name " +
+ "FROM PublishFreeze, InbredSet " +
+ "WHERE InbredSet.Name = 'Test' AND "
+ "PublishFreeze.InbredSetId = InbredSet.Id")
+ )
+
+ @mock.patch('base.data_set.g')
+ def test_set_dataset_geno(self, db_mock):
+ with app.app_context():
+ db_mock.db.execute.return_value.fetchone.return_value = [1, 2, 3]
+ redis_mock = mock.Mock()
+ redis_mock.get.return_value = self.test_dataset
+ data_set = DatasetType(redis_mock)
+ data_set.set_dataset_key("geno", "Test")
+ self.assertEqual(data_set("Test"), "Geno")
+ redis_mock.set.assert_called_once_with(
+ "dataset_structure",
+ ('{"AD-cases-controls-MyersGeno": "Geno", '
+ '"AD-cases-controls-MyersPublish": "Publish", '
+ '"AKXDGeno": "Geno", '
+ '"AXBXAGeno": "Geno", '
+ '"AXBXAPublish": "Publish", '
+ '"Aging-Brain-UCIPublish": "Publish", '
+ '"All Phenotypes": "Publish", '
+ '"B139_K_1206_M": "ProbeSet", '
+ '"B139_K_1206_R": "ProbeSet", '
+ '"Test": "Geno"}'))
+
+ db_mock.db.execute.assert_called_with(
+ ("SELECT GenoFreeze.Id FROM "
+ "GenoFreeze WHERE GenoFreeze.Name = \"Test\" "))
diff --git a/wqflask/tests/unit/base/test_general_object.py b/wqflask/tests/unit/base/test_general_object.py
new file mode 100644
index 00000000..00fd3c72
--- /dev/null
+++ b/wqflask/tests/unit/base/test_general_object.py
@@ -0,0 +1,40 @@
+import unittest
+
+from base.GeneralObject import GeneralObject
+
+
+class TestGeneralObjectTests(unittest.TestCase):
+ """
+ Test the GeneralObject base class
+ """
+
+ def test_object_contents(self):
+ """Test whether base contents are stored properly"""
+ test_obj = GeneralObject("a", "b", "c")
+ self.assertEqual("abc", ''.join(test_obj.contents))
+ self.assertEqual(len(test_obj), 0)
+
+ def test_object_dict(self):
+ """Test whether the base class is printed properly"""
+ test_obj = GeneralObject("a", name="test", value=1)
+ self.assertEqual(str(test_obj), "name = test\nvalue = 1\n")
+ self.assertEqual(
+ repr(test_obj), "contents = ['a']\nname = test\nvalue = 1\n")
+ self.assertEqual(len(test_obj), 2)
+ self.assertEqual(test_obj["value"], 1)
+ test_obj["test"] = 1
+ self.assertEqual(test_obj["test"], 1)
+
+ def test_get_attribute(self):
+ "Test that getattr works"
+ test_obj = GeneralObject("a", name="test", value=1)
+ self.assertEqual(getattr(test_obj, "value", None), 1)
+ self.assertEqual(getattr(test_obj, "non-existent", None), None)
+
+ def test_object_comparisons(self):
+ "Test that 2 objects of the same length are equal"
+ test_obj1 = GeneralObject("a", name="test", value=1)
+ test_obj2 = GeneralObject("b", name="test2", value=2)
+ test_obj3 = GeneralObject("a", name="test", x=1, y=2)
+ self.assertTrue(test_obj1 == test_obj2)
+ self.assertFalse(test_obj1 == test_obj3)
diff --git a/wqflask/tests/unit/base/test_trait.py b/wqflask/tests/unit/base/test_trait.py
new file mode 100644
index 00000000..826ccefd
--- /dev/null
+++ b/wqflask/tests/unit/base/test_trait.py
@@ -0,0 +1,241 @@
+# -*- coding: utf-8 -*-
+"""Tests wqflask/base/trait.py"""
+import unittest
+from unittest import mock
+
+from wqflask import app
+from base.trait import GeneralTrait
+from base.trait import retrieve_trait_info
+
+
+class TestResponse:
+ """Mock Test Response after a request"""
+ @property
+ def content(self):
+ """Mock the content from Requests.get(params).content"""
+ return "[1, 2, 3, 4]"
+
+
+class TestNilResponse:
+ """Mock Test Response after a request"""
+ @property
+ def content(self):
+ """Mock the content from Requests.get(params).content"""
+ return "{}"
+
+
+class MockTrait(GeneralTrait):
+ @property
+ def wikidata_alias_fmt(self):
+ return "Mock alias"
+
+
+class TestRetrieveTraitInfo(unittest.TestCase):
+ """Tests for 'retrieve_trait_info'"""
+
+ def setUp(self):
+ self.app_context = app.app_context()
+ self.app_context.push()
+
+ def tearDown(self):
+ self.app_context.pop()
+
+ def test_retrieve_trait_info_with_empty_dataset(self):
+ """Test that an exception is raised when dataset is empty"""
+ with self.assertRaises(AssertionError):
+ retrieve_trait_info(trait=mock.MagicMock(),
+ dataset={})
+
+ @mock.patch('base.trait.requests.get')
+ @mock.patch('base.trait.g', mock.Mock())
+ def test_retrieve_trait_info_with_empty_trait_info(self,
+ requests_mock):
+ """Empty trait info"""
+ requests_mock.return_value = TestNilResponse()
+ with self.assertRaises(KeyError):
+ retrieve_trait_info(trait=mock.MagicMock(),
+ dataset=mock.MagicMock())
+
+ @mock.patch('base.trait.requests.get')
+ @mock.patch('base.trait.g', mock.Mock())
+ def test_retrieve_trait_info_with_non_empty_trait_info(self,
+ requests_mock):
+ """Test that attributes are set"""
+ mock_dataset = mock.MagicMock()
+ requests_mock.return_value = TestResponse()
+ type(mock_dataset).display_fields = mock.PropertyMock(
+ return_value=["a", "b", "c", "d"])
+ test_trait = retrieve_trait_info(trait=MockTrait(dataset=mock_dataset),
+ dataset=mock_dataset)
+ self.assertEqual(test_trait.a, 1)
+ self.assertEqual(test_trait.b, 2)
+ self.assertEqual(test_trait.c, 3)
+ self.assertEqual(test_trait.d, 4)
+
+ @mock.patch('base.trait.requests.get')
+ @mock.patch('base.trait.g', mock.Mock())
+ def test_retrieve_trait_info_utf8_parsing(self,
+ requests_mock):
+ """Test that utf-8 strings are parsed correctly"""
+ utf_8_string = "test_string"
+ mock_dataset = mock.MagicMock()
+ requests_mock.return_value = TestResponse()
+ type(mock_dataset).display_fields = mock.PropertyMock(
+ return_value=["a", "b", "c", "d"])
+ type(mock_dataset).type = 'Publish'
+
+ mock_trait = MockTrait(
+ dataset=mock_dataset,
+ pre_publication_description=utf_8_string
+ )
+ trait_attrs = {
+ "group_code": "test_code",
+ "pre_publication_description": "test_pre_pub",
+ "pre_publication_abbreviation": "ファイルを画é¢æ¯Žã«è¦‹ã¦è¡Œãã«ã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使ã„ã¾ã™ã€‚",
+ "post_publication_description": None,
+ "pubmed_id": None,
+ 'year': "2020",
+ "authors": "Jane Doe ã‹ã„ã¨",
+ }
+ for key, val in list(trait_attrs.items()):
+ setattr(mock_trait, key, val)
+ test_trait = retrieve_trait_info(trait=mock_trait,
+ dataset=mock_dataset)
+ self.assertEqual(test_trait.abbreviation,
+ "ファイルを画é¢æ¯Žã«è¦‹ã¦è¡Œãã«ã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使ã„ã¾ã™ã€‚")
+ self.assertEqual(test_trait.authors,
+ "Jane Doe ã‹ã„ã¨")
+
+ @mock.patch('base.trait.requests.get')
+ @mock.patch('base.trait.g')
+ @mock.patch('base.trait.get_resource_id')
+ def test_retrieve_trait_info_with_non_empty_lrs(self,
+ resource_id_mock,
+ g_mock,
+ requests_mock):
+ """Test retrieve trait info when lrs has a value"""
+ resource_id_mock.return_value = 1
+ g_mock.db.execute.return_value.fetchone = mock.Mock()
+ g_mock.db.execute.return_value.fetchone.side_effect = [
+ [1, 2, 3, 4], # trait_info = g.db.execute(query).fetchone()
+ [1, 2.37, 3, 4, 5], # trait_qtl = g.db.execute(query).fetchone()
+ [2.7333, 2.1204] # trait_info = g.db.execute(query).fetchone()
+ ]
+ requests_mock.return_value = None
+
+ mock_dataset = mock.MagicMock()
+ type(mock_dataset).display_fields = mock.PropertyMock(
+ return_value=["a", "b", "c", "d"])
+ type(mock_dataset).type = "ProbeSet"
+ type(mock_dataset).name = "RandomName"
+
+ mock_trait = MockTrait(
+ dataset=mock_dataset,
+ pre_publication_description="test_string"
+ )
+ trait_attrs = {
+ "description": "some description",
+ "probe_target_description": "some description",
+ "cellid": False,
+ "chr": 2.733,
+ "mb": 2.1204
+ }
+
+ for key, val in list(trait_attrs.items()):
+ setattr(mock_trait, key, val)
+ test_trait = retrieve_trait_info(trait=mock_trait,
+ dataset=mock_dataset,
+ get_qtl_info=True)
+ self.assertEqual(test_trait.LRS_score_repr,
+ "2.4")
+
+ @mock.patch('base.trait.requests.get')
+ @mock.patch('base.trait.g')
+ @mock.patch('base.trait.get_resource_id')
+ def test_retrieve_trait_info_with_empty_lrs_field(self,
+ resource_id_mock,
+ g_mock,
+ requests_mock):
+ """Test retrieve trait info with empty lrs field"""
+ resource_id_mock.return_value = 1
+ g_mock.db.execute.return_value.fetchone = mock.Mock()
+ g_mock.db.execute.return_value.fetchone.side_effect = [
+ [1, 2, 3, 4], # trait_info = g.db.execute(query).fetchone()
+ [1, None, 3, 4, 5], # trait_qtl = g.db.execute(query).fetchone()
+ [2, 3] # trait_info = g.db.execute(query).fetchone()
+ ]
+ requests_mock.return_value = None
+
+ mock_dataset = mock.MagicMock()
+ type(mock_dataset).display_fields = mock.PropertyMock(
+ return_value=["a", "b", "c", "d"])
+ type(mock_dataset).type = "ProbeSet"
+ type(mock_dataset).name = "RandomName"
+
+ mock_trait = MockTrait(
+ dataset=mock_dataset,
+ pre_publication_description="test_string"
+ )
+ trait_attrs = {
+ "description": "some description",
+ "probe_target_description": "some description",
+ "cellid": False,
+ "chr": 2.733,
+ "mb": 2.1204
+ }
+
+ for key, val in list(trait_attrs.items()):
+ setattr(mock_trait, key, val)
+ test_trait = retrieve_trait_info(trait=mock_trait,
+ dataset=mock_dataset,
+ get_qtl_info=True)
+ self.assertEqual(test_trait.LRS_score_repr,
+ "N/A")
+ self.assertEqual(test_trait.LRS_location_repr,
+ "Chr2: 3.000000")
+
+ @mock.patch('base.trait.requests.get')
+ @mock.patch('base.trait.g')
+ @mock.patch('base.trait.get_resource_id')
+ def test_retrieve_trait_info_with_empty_chr_field(self,
+ resource_id_mock,
+ g_mock,
+ requests_mock):
+ """Test retrieve trait info with empty chr field"""
+ resource_id_mock.return_value = 1
+ g_mock.db.execute.return_value.fetchone = mock.Mock()
+ g_mock.db.execute.return_value.fetchone.side_effect = [
+ [1, 2, 3, 4], # trait_info = g.db.execute(query).fetchone()
+ [1, 2, 3, 4, 5], # trait_qtl = g.db.execute(query).fetchone()
+ [None, 3] # trait_info = g.db.execute(query).fetchone()
+ ]
+
+ requests_mock.return_value = None
+
+ mock_dataset = mock.MagicMock()
+ type(mock_dataset).display_fields = mock.PropertyMock(
+ return_value=["a", "b", "c", "d"])
+ type(mock_dataset).type = "ProbeSet"
+ type(mock_dataset).name = "RandomName"
+
+ mock_trait = MockTrait(
+ dataset=mock_dataset,
+ pre_publication_description="test_string"
+ )
+ trait_attrs = {
+ "description": "some description",
+ "probe_target_description": "some description",
+ "cellid": False,
+ "chr": 2.733,
+ "mb": 2.1204
+ }
+
+ for key, val in list(trait_attrs.items()):
+ setattr(mock_trait, key, val)
+ test_trait = retrieve_trait_info(trait=mock_trait,
+ dataset=mock_dataset,
+ get_qtl_info=True)
+ self.assertEqual(test_trait.LRS_score_repr,
+ "N/A")
+ self.assertEqual(test_trait.LRS_location_repr,
+ "N/A")
diff --git a/wqflask/tests/unit/base/test_webqtl_case_data.py b/wqflask/tests/unit/base/test_webqtl_case_data.py
new file mode 100644
index 00000000..8e8ba482
--- /dev/null
+++ b/wqflask/tests/unit/base/test_webqtl_case_data.py
@@ -0,0 +1,39 @@
+"""Tests for wqflask/base/webqtlCaseData.py"""
+import unittest
+
+from wqflask import app # Required because of utility.tools in webqtlCaseData.py
+from base.webqtlCaseData import webqtlCaseData
+
+class TestWebqtlCaseData(unittest.TestCase):
+ """Tests for WebqtlCaseData class"""
+
+ def setUp(self):
+ self.w = webqtlCaseData(name="Test",
+ value=0,
+ variance=0.0,
+ num_cases=10,
+ name2="Test2")
+
+ def test_webqtl_case_data_repr(self):
+ self.assertEqual(
+ repr(self.w),
+ "<webqtlCaseData> value=0.000 variance=0.000 ndata=10 name=Test name2=Test2"
+ )
+
+ def test_class_outlier(self):
+ self.assertEqual(self.w.class_outlier, "")
+
+ def test_display_value(self):
+ self.assertEqual(self.w.display_value, "0.000")
+ self.w.value = None
+ self.assertEqual(self.w.display_value, "x")
+
+ def test_display_variance(self):
+ self.assertEqual(self.w.display_variance, "0.000")
+ self.w.variance = None
+ self.assertEqual(self.w.display_variance, "x")
+
+ def test_display_num_cases(self):
+ self.assertEqual(self.w.display_num_cases, "10")
+ self.w.num_cases = None
+ self.assertEqual(self.w.display_num_cases, "x")
diff --git a/wqflask/tests/unit/utility/__init__.py b/wqflask/tests/unit/utility/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/wqflask/tests/unit/utility/__init__.py
diff --git a/wqflask/tests/unit/utility/test_authentication_tools.py b/wqflask/tests/unit/utility/test_authentication_tools.py
new file mode 100644
index 00000000..42dcae88
--- /dev/null
+++ b/wqflask/tests/unit/utility/test_authentication_tools.py
@@ -0,0 +1,189 @@
+"""Tests for authentication tools"""
+import unittest
+from unittest import mock
+
+from utility.authentication_tools import check_resource_availability
+from utility.authentication_tools import add_new_resource
+
+class TestResponse:
+ """Mock Test Response after a request"""
+ @property
+ def content(self):
+ """Mock the content from Requests.get(params).content"""
+ return '["foo"]'
+
+
+class TestUser:
+ """Mock user"""
+ @property
+ def user_id(self):
+ """Mockes user id. Used in Flask.g.user_session.user_id"""
+ return b"Jane"
+
+
+class TestUserSession:
+ """Mock user session"""
+ @property
+ def user_session(self):
+ """Mock user session. Mocks Flask.g.user_session object"""
+ return TestUser()
+
+
+def mock_add_resource(resource_ob, update=False):
+ return resource_ob
+
+
+class TestCheckResourceAvailability(unittest.TestCase):
+ """Test methods related to checking the resource availability"""
+ @mock.patch('utility.authentication_tools.add_new_resource')
+ @mock.patch('utility.authentication_tools.Redis')
+ @mock.patch('utility.authentication_tools.g', TestUserSession())
+ @mock.patch('utility.authentication_tools.get_resource_id')
+ def test_check_resource_availability_default_mask(
+ self,
+ resource_id_mock,
+ redis_mock,
+ add_new_resource_mock):
+ """Test the resource availability with default mask"""
+
+ resource_id_mock.return_value = 1
+ redis_mock.smembers.return_value = []
+ test_dataset = mock.MagicMock()
+ type(test_dataset).type = mock.PropertyMock(return_value="Test")
+ add_new_resource_mock.return_value = {"default_mask": 2}
+ self.assertEqual(check_resource_availability(test_dataset), 2)
+
+ @mock.patch('utility.authentication_tools.requests.get')
+ @mock.patch('utility.authentication_tools.add_new_resource')
+ @mock.patch('utility.authentication_tools.Redis')
+ @mock.patch('utility.authentication_tools.g', TestUserSession())
+ @mock.patch('utility.authentication_tools.get_resource_id')
+ def test_check_resource_availability_non_default_mask(
+ self,
+ resource_id_mock,
+ redis_mock,
+ add_new_resource_mock,
+ requests_mock):
+ """Test the resource availability with non-default mask"""
+ resource_id_mock.return_value = 1
+ redis_mock.smembers.return_value = []
+ add_new_resource_mock.return_value = {"default_mask": 2}
+ requests_mock.return_value = TestResponse()
+ test_dataset = mock.MagicMock()
+ type(test_dataset).type = mock.PropertyMock(return_value="Test")
+ self.assertEqual(check_resource_availability(test_dataset),
+ ['foo'])
+
+ @mock.patch('utility.authentication_tools.webqtlConfig.SUPER_PRIVILEGES',
+ "SUPERUSER")
+ @mock.patch('utility.authentication_tools.requests.get')
+ @mock.patch('utility.authentication_tools.add_new_resource')
+ @mock.patch('utility.authentication_tools.Redis')
+ @mock.patch('utility.authentication_tools.g', TestUserSession())
+ @mock.patch('utility.authentication_tools.get_resource_id')
+ def test_check_resource_availability_of_super_user(
+ self,
+ resource_id_mock,
+ redis_mock,
+ add_new_resource_mock,
+ requests_mock):
+ """Test the resource availability if the user is the super user"""
+ resource_id_mock.return_value = 1
+ redis_mock.smembers.return_value = [b"Jane"]
+ add_new_resource_mock.return_value = {"default_mask": 2}
+ requests_mock.return_value = TestResponse()
+ test_dataset = mock.MagicMock()
+ type(test_dataset).type = mock.PropertyMock(return_value="Test")
+ self.assertEqual(check_resource_availability(test_dataset),
+ "SUPERUSER")
+
+ @mock.patch('utility.authentication_tools.webqtlConfig.DEFAULT_PRIVILEGES',
+ "John Doe")
+ def test_check_resource_availability_string_dataset(self):
+ """Test the resource availability if the dataset is a string"""
+ self.assertEqual(check_resource_availability("Test"),
+ "John Doe")
+
+ @mock.patch('utility.authentication_tools.webqtlConfig.DEFAULT_PRIVILEGES',
+ "John Doe")
+ def test_check_resource_availability_temp(self):
+ """Test the resource availability if the dataset is a string"""
+ test_dataset = mock.MagicMock()
+ type(test_dataset).type = mock.PropertyMock(return_value="Temp")
+ self.assertEqual(check_resource_availability(test_dataset),
+ "John Doe")
+
+
+class TestAddNewResource(unittest.TestCase):
+ """Test cases for add_new_resource method"""
+ @mock.patch('utility.authentication_tools.webqtlConfig.DEFAULT_PRIVILEGES',
+ "John Doe")
+ @mock.patch('utility.authentication_tools.add_resource', mock_add_resource)
+ @mock.patch('utility.authentication_tools.get_group_code')
+ def test_add_new_resource_if_publish_datatype(self, group_code_mock):
+ """Test add_new_resource if dataset type is 'publish'"""
+ group_code_mock.return_value = "Test"
+ test_dataset = mock.MagicMock()
+ type(test_dataset).type = mock.PropertyMock(return_value="Publish")
+ type(test_dataset).id = mock.PropertyMock(return_value=10)
+ expected_value = {
+ "owner_id": "none",
+ "default_mask": "John Doe",
+ "group_masks": {},
+ "name": "Test_None",
+ "data": {
+ "dataset": 10,
+ "trait": None
+ },
+ "type": "dataset-publish"
+ }
+ self.assertEqual(add_new_resource(test_dataset),
+ expected_value)
+
+ @mock.patch('utility.authentication_tools.webqtlConfig.DEFAULT_PRIVILEGES',
+ "John Doe")
+ @mock.patch('utility.authentication_tools.add_resource', mock_add_resource)
+ @mock.patch('utility.authentication_tools.get_group_code')
+ def test_add_new_resource_if_geno_datatype(self, group_code_mock):
+ """Test add_new_resource if dataset type is 'geno'"""
+ group_code_mock.return_value = "Test"
+ test_dataset = mock.MagicMock()
+ type(test_dataset).name = mock.PropertyMock(return_value="Geno")
+ type(test_dataset).type = mock.PropertyMock(return_value="Geno")
+ type(test_dataset).id = mock.PropertyMock(return_value=20)
+ expected_value = {
+ "owner_id": "none",
+ "default_mask": "John Doe",
+ "group_masks": {},
+ "name": "Geno",
+ "data": {
+ "dataset": 20,
+ },
+ "type": "dataset-geno"
+ }
+ self.assertEqual(add_new_resource(test_dataset),
+ expected_value)
+
+ @mock.patch('utility.authentication_tools.webqtlConfig.DEFAULT_PRIVILEGES',
+ "John Doe")
+ @mock.patch('utility.authentication_tools.add_resource', mock_add_resource)
+ @mock.patch('utility.authentication_tools.get_group_code')
+ def test_add_new_resource_if_other_datatype(self, group_code_mock):
+ """Test add_new_resource if dataset type is not 'geno' or 'publish'"""
+ group_code_mock.return_value = "Test"
+ test_dataset = mock.MagicMock()
+ type(test_dataset).name = mock.PropertyMock(return_value="Geno")
+ type(test_dataset).type = mock.PropertyMock(return_value="other")
+ type(test_dataset).id = mock.PropertyMock(return_value=20)
+ expected_value = {
+ "owner_id": "none",
+ "default_mask": "John Doe",
+ "group_masks": {},
+ "name": "Geno",
+ "data": {
+ "dataset": 20,
+ },
+ "type": "dataset-probeset"
+ }
+ self.assertEqual(add_new_resource(test_dataset),
+ expected_value)
diff --git a/wqflask/tests/unit/utility/test_chunks.py b/wqflask/tests/unit/utility/test_chunks.py
new file mode 100644
index 00000000..8d90a1ec
--- /dev/null
+++ b/wqflask/tests/unit/utility/test_chunks.py
@@ -0,0 +1,19 @@
+"""Test chunking"""
+
+import unittest
+
+from utility.chunks import divide_into_chunks
+
+
+class TestChunks(unittest.TestCase):
+ "Test Utility method for chunking"
+ def test_divide_into_chunks(self):
+ "Check that a list is chunked correctly"
+ self.assertEqual(divide_into_chunks([1, 2, 7, 3, 22, 8, 5, 22, 333], 3),
+ [[1, 2, 7], [3, 22, 8], [5, 22, 333]])
+ self.assertEqual(divide_into_chunks([1, 2, 7, 3, 22, 8, 5, 22, 333], 4),
+ [[1, 2, 7], [3, 22, 8], [5, 22, 333]])
+ self.assertEqual(divide_into_chunks([1, 2, 7, 3, 22, 8, 5, 22, 333], 5),
+ [[1, 2], [7, 3], [22, 8], [5, 22], [333]])
+ self.assertEqual(divide_into_chunks([], 5),
+ [[]])
diff --git a/wqflask/tests/unit/utility/test_corestats.py b/wqflask/tests/unit/utility/test_corestats.py
new file mode 100644
index 00000000..cf91a248
--- /dev/null
+++ b/wqflask/tests/unit/utility/test_corestats.py
@@ -0,0 +1,55 @@
+"""Test Core Stats"""
+
+import unittest
+
+from utility.corestats import Stats
+
+
+class TestChunks(unittest.TestCase):
+ "Test Utility method for chunking"
+
+ def setUp(self):
+ self.stat_test = Stats((x for x in range(1, 11)))
+
+ def test_stats_sum(self):
+ """ Test sequence sum """
+ self.assertEqual(self.stat_test.sum(), 55)
+ self.stat_test = Stats([])
+ self.assertEqual(self.stat_test.sum(), None)
+
+ def test_stats_count(self):
+ """ Test sequence count """
+ self.assertEqual(self.stat_test.count(), 10)
+ self.stat_test = Stats([])
+ self.assertEqual(self.stat_test.count(), 0)
+
+ def test_stats_min(self):
+ """ Test min value in sequence"""
+ self.assertEqual(self.stat_test.min(), 1)
+ self.stat_test = Stats([])
+ self.assertEqual(self.stat_test.min(), None)
+
+ def test_stats_max(self):
+ """ Test max value in sequence """
+ self.assertEqual(self.stat_test.max(), 10)
+ self.stat_test = Stats([])
+ self.assertEqual(self.stat_test.max(), None)
+
+ def test_stats_avg(self):
+ """ Test avg of sequence """
+ self.assertEqual(self.stat_test.avg(), 5.5)
+ self.stat_test = Stats([])
+ self.assertEqual(self.stat_test.avg(), None)
+
+ def test_stats_stdev(self):
+ """ Test standard deviation of sequence """
+ self.assertEqual(self.stat_test.stdev(), 3.0276503540974917)
+ self.stat_test = Stats([])
+ self.assertEqual(self.stat_test.stdev(), None)
+
+ def test_stats_percentile(self):
+ """ Test percentile of sequence """
+ self.assertEqual(self.stat_test.percentile(20), 3.0)
+ self.assertEqual(self.stat_test.percentile(101), None)
+ self.stat_test = Stats([])
+ self.assertEqual(self.stat_test.percentile(20), None)
diff --git a/wqflask/tests/unit/utility/test_corr_result_helpers.py b/wqflask/tests/unit/utility/test_corr_result_helpers.py
new file mode 100644
index 00000000..e196fbdf
--- /dev/null
+++ b/wqflask/tests/unit/utility/test_corr_result_helpers.py
@@ -0,0 +1,32 @@
+""" Test correlation helper methods """
+
+import unittest
+from utility.corr_result_helpers import normalize_values, common_keys, normalize_values_with_samples
+
+
+class TestCorrelationHelpers(unittest.TestCase):
+ """Test methods for normalising lists"""
+
+ def test_normalize_values(self):
+ """Test that a list is normalised correctly"""
+ self.assertEqual(
+ normalize_values([2.3, None, None, 3.2, 4.1, 5], [
+ 3.4, 7.2, 1.3, None, 6.2, 4.1]),
+ ([2.3, 4.1, 5], [3.4, 6.2, 4.1], 3)
+ )
+
+ def test_common_keys(self):
+ """Test that common keys are returned as a list"""
+ a = dict(BXD1=9.113, BXD2=9.825, BXD14=8.985, BXD15=9.300)
+ b = dict(BXD1=9.723, BXD3=9.825, BXD14=9.124, BXD16=9.300)
+ self.assertEqual(sorted(common_keys(a, b)), ['BXD1', 'BXD14'])
+
+ def test_normalize_values_with_samples(self):
+ """Test that a sample(dict) is normalised correctly"""
+ self.assertEqual(
+ normalize_values_with_samples(
+ dict(BXD1=9.113, BXD2=9.825, BXD14=8.985,
+ BXD15=9.300, BXD20=9.300),
+ dict(BXD1=9.723, BXD3=9.825, BXD14=9.124, BXD16=9.300)),
+ (({'BXD1': 9.113, 'BXD14': 8.985}, {'BXD1': 9.723, 'BXD14': 9.124}, 2))
+ )
diff --git a/wqflask/tests/unit/utility/test_formatting.py b/wqflask/tests/unit/utility/test_formatting.py
new file mode 100644
index 00000000..9d3033d1
--- /dev/null
+++ b/wqflask/tests/unit/utility/test_formatting.py
@@ -0,0 +1,33 @@
+import unittest
+from utility.formatting import numify, commify
+
+
+class TestFormatting(unittest.TestCase):
+ """Test formatting numbers by numifying or commifying"""
+
+ def test_numify(self):
+ "Test that a number is correctly converted to a English readable string"
+ self.assertEqual(numify(1, 'item', 'items'),
+ 'one item')
+ self.assertEqual(numify(2, 'book'), 'two')
+ self.assertEqual(numify(2, 'book', 'books'), 'two books')
+ self.assertEqual(numify(0, 'book', 'books'), 'zero books')
+ self.assertEqual(numify(0), 'zero')
+ self.assertEqual(numify(5), 'five')
+ self.assertEqual(numify(14, 'book', 'books'), '14 books')
+ self.assertEqual(numify(999, 'book', 'books'), '999 books')
+ self.assertEqual(numify(1000000, 'book', 'books'), '1,000,000 books')
+ self.assertEqual(numify(1956), '1956')
+
+ def test_commify(self):
+ "Test that commas are added correctly"
+ self.assertEqual(commify(1), '1')
+ self.assertEqual(commify(123), '123')
+ self.assertEqual(commify(1234), '1234')
+ self.assertEqual(commify(12345), '12,345')
+ self.assertEqual(commify(1234567890), '1,234,567,890')
+ self.assertEqual(commify(123.0), '123.0')
+ self.assertEqual(commify(1234.5), '1234.5')
+ self.assertEqual(commify(1234.56789), '1234.56789')
+ self.assertEqual(commify(123456.789), '123,456.789')
+ self.assertEqual(commify(None), None)
diff --git a/wqflask/tests/unit/utility/test_hmac.py b/wqflask/tests/unit/utility/test_hmac.py
new file mode 100644
index 00000000..13d6261d
--- /dev/null
+++ b/wqflask/tests/unit/utility/test_hmac.py
@@ -0,0 +1,51 @@
+"""Test hmac utility functions"""
+
+import unittest
+from unittest import mock
+
+from utility.hmac import data_hmac
+from utility.hmac import url_for_hmac
+from utility.hmac import hmac_creation
+
+
+class TestHmacUtil(unittest.TestCase):
+ """Test Utility method for hmac creation"""
+
+ @mock.patch("utility.hmac.app.config", {'SECRET_HMAC_CODE': "secret"})
+ def test_hmac_creation(self):
+ """Test hmac creation with a utf-8 string"""
+ self.assertEqual(hmac_creation("ファイ"), "7410466338cfe109e946")
+
+ @mock.patch("utility.hmac.app.config",
+ {'SECRET_HMAC_CODE': ('\x08\xdf\xfa\x93N\x80'
+ '\xd9\\H@\\\x9f`\x98d^'
+ '\xb4a;\xc6OM\x946a\xbc'
+ '\xfc\x80:*\xebc')})
+ def test_hmac_creation_with_cookie(self):
+ """Test hmac creation with a cookie"""
+ cookie = "3f4c1dbf-5b56-4260-87d6-f35445bda37e:af4fcf5eace9e7c864ce"
+ uuid_, _, signature = cookie.partition(":")
+ self.assertEqual(
+ hmac_creation(uuid_),
+ "af4fcf5eace9e7c864ce")
+
+ @mock.patch("utility.hmac.app.config", {'SECRET_HMAC_CODE': "secret"})
+ def test_data_hmac(self):
+ """Test data_hmac fn with a utf-8 string"""
+ self.assertEqual(data_hmac("ファイ"), "ファイ:7410466338cfe109e946")
+
+ @mock.patch("utility.hmac.app.config", {'SECRET_HMAC_CODE': "secret"})
+ @mock.patch("utility.hmac.url_for")
+ def test_url_for_hmac_with_plain_url(self, mock_url):
+ """Test url_for_hmac without params"""
+ mock_url.return_value = "https://mock_url.com/ファイ/"
+ self.assertEqual(url_for_hmac("ファイ"),
+ "https://mock_url.com/ファイ/?hm=05bc39e659b1948f41e7")
+
+ @mock.patch("utility.hmac.app.config", {'SECRET_HMAC_CODE': "secret"})
+ @mock.patch("utility.hmac.url_for")
+ def test_url_for_hmac_with_param_in_url(self, mock_url):
+ """Test url_for_hmac with params"""
+ mock_url.return_value = "https://mock_url.com/?ファイ=1"
+ self.assertEqual(url_for_hmac("ファイ"),
+ "https://mock_url.com/?ファイ=1&hm=4709c1708270644aed79")
diff --git a/wqflask/tests/unit/utility/test_type_checking.py b/wqflask/tests/unit/utility/test_type_checking.py
new file mode 100644
index 00000000..48d110c7
--- /dev/null
+++ b/wqflask/tests/unit/utility/test_type_checking.py
@@ -0,0 +1,54 @@
+import unittest
+from utility.type_checking import is_float
+from utility.type_checking import is_int
+from utility.type_checking import is_str
+from utility.type_checking import get_float
+from utility.type_checking import get_int
+from utility.type_checking import get_string
+
+
+class TestTypeChecking(unittest.TestCase):
+ def test_is_float(self):
+ floats = [2, 1.2, '3.1']
+ not_floats = ["String", None, [], ()]
+ for flt in floats:
+ results = is_float(flt)
+ self.assertTrue(results)
+ for nflt in not_floats:
+ results = is_float(nflt)
+ self.assertFalse(results)
+
+ def test_is_int(self):
+ int_values = [1, 1.1]
+ not_int_values = ["string", None, [], "1.1"]
+ for int_val in int_values:
+ results = is_int(int_val)
+ self.assertTrue(results)
+ for not_int in not_int_values:
+ results = is_int(not_int)
+ self.assertFalse(results)
+
+ def test_is_str(self):
+ string_values = [1, False, [], {}, "string_value"]
+ falsey_values = [None]
+ for string_val in string_values:
+ results = is_str(string_val)
+ self.assertTrue(results)
+ for non_string in falsey_values:
+ results = is_str(non_string)
+ self.assertFalse(results)
+
+ def test_get_float(self):
+ vars_object = {"min_value": "12"}
+ results = get_float(vars_object, "min_value")
+ self.assertEqual(results, 12.0)
+
+ def test_get_int(self):
+ vars_object = {"lx_value": "1"}
+ results = get_int(vars_object, "lx_value")
+ self.assertEqual(results, 1)
+
+ def test_get_string(self):
+ string_object = {"mx_value": 1}
+ results = get_string(string_object, "mx_value")
+ self.assertEqual(results, "1") \ No newline at end of file
diff --git a/wqflask/tests/unit/wqflask/__init__.py b/wqflask/tests/unit/wqflask/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/__init__.py
diff --git a/wqflask/tests/unit/wqflask/api/__init__.py b/wqflask/tests/unit/wqflask/api/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/api/__init__.py
diff --git a/wqflask/tests/unit/wqflask/api/test_correlation.py b/wqflask/tests/unit/wqflask/api/test_correlation.py
new file mode 100644
index 00000000..d0264b87
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/api/test_correlation.py
@@ -0,0 +1,153 @@
+import unittest
+from unittest import mock
+from wqflask import app
+from collections import OrderedDict
+from wqflask.api.correlation import init_corr_params
+from wqflask.api.correlation import convert_to_mouse_gene_id
+from wqflask.api.correlation import do_literature_correlation_for_all_traits
+from wqflask.api.correlation import get_sample_r_and_p_values
+from wqflask.api.correlation import calculate_results
+
+
+class AttributeSetter:
+ def __init__(self, obj):
+ for k, v in obj.items():
+ setattr(self, k, v)
+
+
+class MockDataset(AttributeSetter):
+ def get_trait_data(self):
+ return None
+
+ def retrieve_genes(self, id=None):
+ return {
+ "TT-1": "GH-1",
+ "TT-2": "GH-2",
+ "TT-3": "GH-3"
+
+ }
+
+
+class TestCorrelations(unittest.TestCase):
+ def setUp(self):
+ self.app_context = app.app_context()
+ self.app_context.push()
+
+ def tearDown(self):
+ self.app_context.pop()
+
+ def test_init_corr_params(self):
+ start_vars = {
+ "return_count": "3",
+ "type": "T1",
+ "method": "spearman"
+ }
+
+ corr_params_results = init_corr_params(start_vars=start_vars)
+ expected_results = {
+ "return_count": 3,
+ "type": "T1",
+ "method": "spearman"
+ }
+
+ self.assertEqual(corr_params_results, expected_results)
+
+ @mock.patch("wqflask.api.correlation.g")
+ def test_convert_to_mouse_gene_id(self, mock_db):
+
+ results = convert_to_mouse_gene_id(species="Other", gene_id="")
+ self.assertEqual(results, None)
+
+ rat_species_results = convert_to_mouse_gene_id(
+ species="rat", gene_id="GH1")
+
+ mock_db.db.execute.return_value.fetchone.side_effect = [
+ AttributeSetter({"mouse": "MG-1"}), AttributeSetter({"mouse": "MG-2"})]
+
+ self.assertEqual(convert_to_mouse_gene_id(
+ species="mouse", gene_id="MG-4"), "MG-4")
+ self.assertEqual(convert_to_mouse_gene_id(
+ species="rat", gene_id="R1"), "MG-1")
+ self.assertEqual(convert_to_mouse_gene_id(
+ species="human", gene_id="H1"), "MG-2")
+
+ @mock.patch("wqflask.api.correlation.g")
+ @mock.patch("wqflask.api.correlation.convert_to_mouse_gene_id")
+ def test_do_literature_correlation_for_all_traits(self, mock_convert_to_mouse_geneid, mock_db):
+ mock_convert_to_mouse_geneid.side_effect = [
+ "MG-1", "MG-2;", "MG-3", "MG-4"]
+
+ trait_geneid_dict = {
+ "TT-1": "GH-1",
+ "TT-2": "GH-2",
+ "TT-3": "GH-3"
+
+ }
+ mock_db.db.execute.return_value.fetchone.side_effect = [AttributeSetter(
+ {"value": "V1"}), AttributeSetter({"value": "V2"}), AttributeSetter({"value": "V3"})]
+
+ this_trait = AttributeSetter({"geneid": "GH-1"})
+
+ target_dataset = AttributeSetter(
+ {"group": AttributeSetter({"species": "rat"})})
+ results = do_literature_correlation_for_all_traits(
+ this_trait=this_trait, target_dataset=target_dataset, trait_geneid_dict=trait_geneid_dict, corr_params={})
+
+ expected_results = {'TT-1': ['GH-1', 0],
+ 'TT-2': ['GH-2', 'V1'], 'TT-3': ['GH-3', 'V2']}
+ self.assertEqual(results, expected_results)
+
+ @mock.patch("wqflask.api.correlation.corr_result_helpers.normalize_values")
+ def test_get_sample_r_and_p_values(self, mock_normalize):
+
+ group = AttributeSetter(
+ {"samplelist": ["S1", "S2", "S3", "S4", "S5", "S6", "S7"]})
+ target_dataset = AttributeSetter({"group": group})
+
+ target_vals = [3.4, 6.2, 4.1, 3.4, 1.2, 5.6]
+ trait_data = {"S1": AttributeSetter({"value": 2.3}), "S2": AttributeSetter({"value": 1.1}),
+ "S3": AttributeSetter(
+ {"value": 6.3}), "S4": AttributeSetter({"value": 3.6}), "S5": AttributeSetter({"value": 4.1}),
+ "S6": AttributeSetter({"value": 5.0})}
+ this_trait = AttributeSetter({"data": trait_data})
+ mock_normalize.return_value = ([2.3, 1.1, 6.3, 3.6, 4.1, 5.0],
+ [3.4, 6.2, 4.1, 3.4, 1.2, 5.6], 6)
+ mock_normalize.side_effect = [([2.3, 1.1, 6.3, 3.6, 4.1, 5.0],
+ [3.4, 6.2, 4.1, 3.4, 1.2, 5.6], 6),
+ ([2.3, 1.1, 6.3, 3.6, 4.1, 5.0],
+ [3.4, 6.2, 4.1, 3.4, 1.2, 5.6], 6),
+ ([2.3, 1.1, 1.4], [3.4, 6.2, 4.1], 3)]
+
+ results_pearsonr = get_sample_r_and_p_values(this_trait=this_trait, this_dataset={
+ }, target_vals=target_vals, target_dataset=target_dataset, type="pearson")
+ results_spearmanr = get_sample_r_and_p_values(this_trait=this_trait, this_dataset={
+ }, target_vals=target_vals, target_dataset=target_dataset, type="spearman")
+ results_num_overlap = get_sample_r_and_p_values(this_trait=this_trait, this_dataset={
+ }, target_vals=target_vals, target_dataset=target_dataset, type="pearson")
+ expected_pearsonr = [-0.21618688834430866, 0.680771605997119, 6]
+ expected_spearmanr = [-0.11595420713048969, 0.826848213385815, 6]
+ for i, val in enumerate(expected_pearsonr):
+ self.assertAlmostEqual(val, results_pearsonr[i],4)
+ for i, val in enumerate(expected_spearmanr):
+ self.assertAlmostEqual(val, results_spearmanr[i],4)
+ self.assertEqual(results_num_overlap, None)
+
+ @mock.patch("wqflask.api.correlation.do_literature_correlation_for_all_traits")
+ def test_calculate_results(self, literature_correlation):
+
+ literature_correlation.return_value = {
+ 'TT-1': ['GH-1', 0], 'TT-2': ['GH-2', 3], 'TT-3': ['GH-3', 1]}
+
+ this_dataset = MockDataset(
+ {"group": AttributeSetter({"species": "rat"})})
+ target_dataset = MockDataset(
+ {"group": AttributeSetter({"species": "rat"})})
+ this_trait = AttributeSetter({"geneid": "GH-1"})
+ corr_params = {"type": "literature"}
+ sorted_results = calculate_results(
+ this_trait=this_trait, this_dataset=this_dataset, target_dataset=target_dataset, corr_params=corr_params)
+ expected_results = {'TT-2': ['GH-2', 3],
+ 'TT-3': ['GH-3', 1], 'TT-1': ['GH-1', 0]}
+
+ self.assertTrue(isinstance(sorted_results, OrderedDict))
+ self.assertEqual(dict(sorted_results), expected_results)
diff --git a/wqflask/tests/unit/wqflask/api/test_gen_menu.py b/wqflask/tests/unit/wqflask/api/test_gen_menu.py
new file mode 100644
index 00000000..57eb1650
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/api/test_gen_menu.py
@@ -0,0 +1,414 @@
+"""Test cases for wqflask.api.gen_menu"""
+import unittest
+from unittest import mock
+
+from wqflask import app
+from wqflask.api.gen_menu import gen_dropdown_json
+from wqflask.api.gen_menu import get_species
+from wqflask.api.gen_menu import get_groups
+from wqflask.api.gen_menu import get_types
+from wqflask.api.gen_menu import get_datasets
+from wqflask.api.gen_menu import phenotypes_exist
+from wqflask.api.gen_menu import genotypes_exist
+from wqflask.api.gen_menu import build_datasets
+from wqflask.api.gen_menu import build_types
+
+
+class TestGenMenu(unittest.TestCase):
+ """Tests for the gen_menu module"""
+
+ def setUp(self):
+ self.app_context = app.app_context()
+ self.app_context.push()
+ self.test_group = {
+ 'mouse': [
+ ['H_T1',
+ 'H_T',
+ 'Family:DescriptionA'
+ ],
+ ['H_T2', "H_T'", 'Family:None']
+ ],
+ 'human': [
+ ['BXD', 'BXD', 'Family:None'],
+ ['HLC', 'Liver: Normal Gene Expression with Genotypes (Merck)',
+ 'Family:Test']
+ ]
+ }
+
+ self.test_type = {
+ 'mouse': {
+ 'H_T2': [('Phenotypes',
+ 'Traits and Cofactors',
+ 'Phenotypes'),
+ ('Genotypes',
+ 'DNA Markers and SNPs',
+ 'Genotypes'),
+ ['M', 'M', 'Molecular Trait Datasets']],
+ 'H_T1': [('Phenotypes',
+ 'Traits and Cofactors',
+ 'Phenotypes'),
+ ('Genotypes',
+ 'DNA Markers and SNPs',
+ 'Genotypes'),
+ ['M', 'M', 'Molecular Trait Datasets']]
+ },
+ 'human': {
+ 'HLC': [('Phenotypes',
+ 'Traits and Cofactors',
+ 'Phenotypes'),
+ ('Genotypes',
+ 'DNA Markers and SNPs',
+ 'Genotypes'),
+ ['M', 'M', 'Molecular Trait Datasets']],
+ 'BXD': [('Phenotypes',
+ 'Traits and Cofactors',
+ 'Phenotypes'),
+ ('Genotypes',
+ 'DNA Markers and SNPs',
+ 'Genotypes'),
+ ['M', 'M', 'Molecular Trait Datasets']]
+ }
+ }
+
+ def tearDown(self):
+ self.app_context.pop()
+
+ @mock.patch('wqflask.api.gen_menu.g')
+ def test_get_species(self, db_mock):
+ """Test that assertion is raised when dataset and dataset_name
+ are defined"""
+ db_mock.db.execute.return_value.fetchall.return_value = (
+ ('human', 'Human'),
+ ('mouse', 'Mouse'))
+ self.assertEqual(get_species(),
+ [['human', 'Human'], ['mouse', 'Mouse']])
+ db_mock.db.execute.assert_called_once_with(
+ "SELECT Name, MenuName FROM Species ORDER BY OrderId"
+ )
+
+ @mock.patch('wqflask.api.gen_menu.g')
+ def test_get_groups(self, db_mock):
+ """Test that species groups are grouped correctly"""
+ db_mock.db.execute.return_value.fetchall.side_effect = [
+ # Mouse
+ (('BXD', 'BXD', None),
+ ('HLC', 'Liver: Normal Gene Expression with Genotypes (Merck)',
+ 'Test')),
+ # Human
+ (('H_T1', "H_T", "DescriptionA"),
+ ('H_T2', "H_T'", None))
+ ]
+
+ self.assertEqual(get_groups([["human", "Human"], ["mouse", "Mouse"]]),
+ self.test_group)
+
+ for name in ["mouse", "human"]:
+ db_mock.db.execute.assert_any_call(
+ ("SELECT InbredSet.Name, InbredSet.FullName, " +
+ "IFNULL(InbredSet.Family, 'None') " +
+ "FROM InbredSet, Species WHERE Species.Name " +
+ "= '{}' AND InbredSet.SpeciesId = Species.Id GROUP by " +
+ "InbredSet.Name ORDER BY IFNULL(InbredSet.FamilyOrder, " +
+ "InbredSet.FullName) ASC, IFNULL(InbredSet.Family, " +
+ "InbredSet.FullName) ASC, InbredSet.FullName ASC, " +
+ "InbredSet.MenuOrderId ASC").format(name)
+ )
+
+ @mock.patch('wqflask.api.gen_menu.g')
+ def test_phenotypes_exist_called_with_correct_query(self, db_mock):
+ """Test that phenotypes_exist is called with the correct query"""
+ db_mock.db.execute.return_value.fetchone.return_value = None
+ phenotypes_exist("test")
+ db_mock.db.execute.assert_called_with(
+ "SELECT Name FROM PublishFreeze "
+ "WHERE PublishFreeze.Name = 'testPublish'"
+ )
+
+ @mock.patch('wqflask.api.gen_menu.g')
+ def test_phenotypes_exist_with_falsy_values(self, db_mock):
+ """Test that phenotype check returns correctly when given
+ a None value"""
+ for x in [None, False, (), [], ""]:
+ db_mock.db.execute.return_value.fetchone.return_value = x
+ self.assertFalse(phenotypes_exist("test"))
+
+ @mock.patch('wqflask.api.gen_menu.g')
+ def test_phenotypes_exist_with_truthy_value(self, db_mock):
+ """Test that phenotype check returns correctly when given Truthy """
+ for x in ["x", ("result"), ["result"], [1]]:
+ db_mock.db.execute.return_value.fetchone.return_value = (x)
+ self.assertTrue(phenotypes_exist("test"))
+
+ @mock.patch('wqflask.api.gen_menu.g')
+ def test_genotypes_exist_called_with_correct_query(self, db_mock):
+ """Test that genotypes_exist is called with the correct query"""
+ db_mock.db.execute.return_value.fetchone.return_value = None
+ genotypes_exist("test")
+ db_mock.db.execute.assert_called_with(
+ "SELECT Name FROM GenoFreeze WHERE GenoFreeze.Name = 'testGeno'"
+ )
+
+ @mock.patch('wqflask.api.gen_menu.g')
+ def test_genotypes_exist_with_falsy_values(self, db_mock):
+ """Test that genotype check returns correctly when given
+ a None value"""
+ for x in [None, False, (), [], ""]:
+ db_mock.db.execute.return_value.fetchone.return_value = x
+ self.assertFalse(genotypes_exist("test"))
+
+ @mock.patch('wqflask.api.gen_menu.g')
+ def test_genotypes_exist_with_truthy_value(self, db_mock):
+ """Test that genotype check returns correctly when given Truthy """
+ for x in ["x", ("result"), ["result"], [1]]:
+ db_mock.db.execute.return_value.fetchone.return_value = (x)
+ self.assertTrue(phenotypes_exist("test"))
+
+ @mock.patch('wqflask.api.gen_menu.g')
+ def test_build_datasets_with_type_phenotypes(self, db_mock):
+ """Test that correct dataset is returned for a phenotype type"""
+ db_mock.db.execute.return_value.fetchall.return_value = (
+ (602, "BXDPublish", "BXD Published Phenotypes"),
+ )
+ self.assertEqual(build_datasets("Mouse", "BXD", "Phenotypes"),
+ [['602', "BXDPublish", "BXD Published Phenotypes"]])
+ db_mock.db.execute.assert_called_with(
+ "SELECT InfoFiles.GN_AccesionId, PublishFreeze.Name, " +
+ "PublishFreeze.FullName FROM InfoFiles, PublishFreeze, " +
+ "InbredSet WHERE InbredSet.Name = 'BXD' AND " +
+ "PublishFreeze.InbredSetId = InbredSet.Id AND " +
+ "InfoFiles.InfoPageName = PublishFreeze.Name " +
+ "ORDER BY PublishFreeze.CreateTime ASC"
+ )
+ self.assertEqual(build_datasets("Mouse", "MDP", "Phenotypes"),
+ [['602', "BXDPublish", "Mouse Phenome Database"]])
+
+ db_mock.db.execute.return_value.fetchall.return_value = ()
+ db_mock.db.execute.return_value.fetchone.return_value = (
+ "BXDPublish", "Mouse Phenome Database"
+ )
+ self.assertEqual(build_datasets("Mouse", "MDP", "Phenotypes"),
+ [["None", "BXDPublish", "Mouse Phenome Database"]])
+
+ @mock.patch('wqflask.api.gen_menu.g')
+ def test_build_datasets_with_type_phenotypes_and_no_results(self, db_mock):
+ """Test that correct dataset is returned for a phenotype type with no
+ results
+
+ """
+ db_mock.db.execute.return_value.fetchall.return_value = None
+ db_mock.db.execute.return_value.fetchone.return_value = (121,
+ "text value")
+ self.assertEqual(build_datasets("Mouse", "BXD", "Phenotypes"),
+ [["None", "121", "text value"]])
+ db_mock.db.execute.assert_called_with(
+ "SELECT PublishFreeze.Name, PublishFreeze.FullName "
+ "FROM PublishFreeze, InbredSet "
+ "WHERE InbredSet.Name = 'BXD' AND "
+ "PublishFreeze.InbredSetId = InbredSet.Id "
+ "ORDER BY PublishFreeze.CreateTime ASC"
+ )
+
+ @mock.patch('wqflask.api.gen_menu.g')
+ def test_build_datasets_with_type_genotypes(self, db_mock):
+ """Test that correct dataset is returned for a phenotype type"""
+ db_mock.db.execute.return_value.fetchone.return_value = (
+ 635, "HLCPublish", "HLC Published Genotypes"
+ )
+
+ self.assertEqual(build_datasets("Mouse", "HLC", "Genotypes"),
+ [["635", "HLCGeno", "HLC Genotypes"]])
+ db_mock.db.execute.assert_called_with(
+ "SELECT InfoFiles.GN_AccesionId FROM InfoFiles, "
+ "GenoFreeze, InbredSet WHERE InbredSet.Name = 'HLC' AND "
+ "GenoFreeze.InbredSetId = InbredSet.Id AND "
+ "InfoFiles.InfoPageName = GenoFreeze.ShortName " +
+ "ORDER BY GenoFreeze.CreateTime DESC"
+ )
+ db_mock.db.execute.return_value.fetchone.return_value = ()
+ self.assertEqual(build_datasets("Mouse", "HLC", "Genotypes"),
+ [["None", "HLCGeno", "HLC Genotypes"]])
+
+ @mock.patch('wqflask.api.gen_menu.g')
+ def test_build_datasets_with_type_mrna(self, db_mock):
+ """Test that correct dataset is returned for a mRNA
+ expression/ Probeset"""
+ db_mock.db.execute.return_value.fetchall.return_value = (
+ (112, "HC_M2_0606_P",
+ "Hippocampus Consortium M430v2 (Jun06) PDNN"), )
+ self.assertEqual(build_datasets("Mouse", "HLC", "mRNA"), [[
+ "112", 'HC_M2_0606_P', "Hippocampus Consortium M430v2 (Jun06) PDNN"
+ ]])
+ db_mock.db.execute.assert_called_once_with(
+ "SELECT ProbeSetFreeze.Id, ProbeSetFreeze.Name, " +
+ "ProbeSetFreeze.FullName FROM ProbeSetFreeze, " +
+ "ProbeFreeze, InbredSet, Tissue, Species WHERE " +
+ "Species.Name = 'Mouse' AND Species.Id = " +
+ "InbredSet.SpeciesId AND InbredSet.Name = 'HLC' AND " +
+ "ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id AND " +
+ "Tissue.Name = 'mRNA' AND ProbeFreeze.TissueId = " +
+ "Tissue.Id AND ProbeFreeze.InbredSetId = InbredSet.Id AND " +
+ "ProbeSetFreeze.public > 0 " +
+ "ORDER BY -ProbeSetFreeze.OrderList DESC, ProbeSetFreeze.CreateTime DESC")
+
+ @mock.patch('wqflask.api.gen_menu.build_datasets')
+ @mock.patch('wqflask.api.gen_menu.g')
+ def test_build_types(self, db_mock, datasets_mock):
+ """Test that correct tissue metadata is returned"""
+ datasets_mock.return_value = [
+ ["112", 'HC_M2_0606_P',
+ "Hippocampus Consortium M430v2 (Jun06) PDNN"]
+ ]
+ db_mock.db.execute.return_value.fetchall.return_value = (
+ ('Mouse Tissue'), ('Human Tissue'), ('Rat Tissue')
+ )
+ self.assertEqual(build_types('mouse', 'random group'),
+ [['M', 'M', 'Molecular Traits'],
+ ['H', 'H', 'Molecular Traits'],
+ ['R', 'R', 'Molecular Traits']])
+ db_mock.db.execute.assert_called_once_with(
+ "SELECT DISTINCT Tissue.Name " +
+ "FROM ProbeFreeze, ProbeSetFreeze, InbredSet, " +
+ "Tissue, Species WHERE Species.Name = 'mouse' " +
+ "AND Species.Id = InbredSet.SpeciesId AND " +
+ "InbredSet.Name = 'random group' AND " +
+ "ProbeFreeze.TissueId = Tissue.Id AND " +
+ "ProbeFreeze.InbredSetId = InbredSet.Id AND " +
+ "ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id " +
+ "ORDER BY Tissue.Name"
+ )
+
+ @mock.patch('wqflask.api.gen_menu.build_types')
+ @mock.patch('wqflask.api.gen_menu.genotypes_exist')
+ @mock.patch('wqflask.api.gen_menu.phenotypes_exist')
+ def test_get_types_with_existing_genotype_and_phenotypes(
+ self,
+ phenotypes_exist_mock,
+ genotypes_exist_mock,
+ build_types_mock):
+ """Test that build types are constructed correctly if phenotypes and genotypes
+ exist
+
+ """
+ phenotypes_exist_mock.return_value = True
+ genotypes_exist_mock.return_value = True
+
+ expected_result = self.test_type
+
+ build_types_mock.return_value = [
+ ['M', 'M', 'Molecular Trait Datasets']
+ ]
+ self.assertEqual(get_types(self.test_group), expected_result)
+
+ @mock.patch('wqflask.api.gen_menu.build_types')
+ @mock.patch('wqflask.api.gen_menu.genotypes_exist')
+ @mock.patch('wqflask.api.gen_menu.phenotypes_exist')
+ def test_get_types_with_buildtype_and_non_existent_genotype_and_phenotypes(
+ self,
+ phenotypes_exist_mock,
+ genotypes_exist_mock,
+ build_types_mock):
+ """Test that build types are constructed correctly if phenotypes_exist and
+ genotypes_exist are false but build_type is falsy
+
+ """
+ phenotypes_exist_mock.return_value = False
+ genotypes_exist_mock.return_value = False
+
+ build_types_mock.return_value = []
+ self.assertEqual(get_types(self.test_group), {
+ 'mouse': {},
+ 'human': {}
+ })
+
+ @mock.patch('wqflask.api.gen_menu.build_types')
+ @mock.patch('wqflask.api.gen_menu.genotypes_exist')
+ @mock.patch('wqflask.api.gen_menu.phenotypes_exist')
+ def test_get_types_with_non_existent_genotype_phenotypes_and_buildtype(
+ self,
+ phenotypes_exist_mock,
+ genotypes_exist_mock,
+ build_types_mock):
+ """Test that build types are constructed correctly if phenotypes_exist,
+ genotypes_exist and build_types are truthy
+
+ """
+ phenotypes_exist_mock.return_value = False
+ genotypes_exist_mock.return_value = False
+
+ build_types_mock.return_value = [
+ ['M', 'M', 'Molecular Trait Datasets']
+ ]
+ expected_result = {
+ 'mouse': {
+ 'H_T2': [['M', 'M', 'Molecular Trait Datasets']],
+ 'H_T1': [['M', 'M', 'Molecular Trait Datasets']]},
+ 'human': {
+ 'HLC': [['M', 'M', 'Molecular Trait Datasets']],
+ 'BXD': [['M', 'M', 'Molecular Trait Datasets']]}}
+ self.assertEqual(get_types(self.test_group),
+ expected_result)
+
+ @mock.patch('wqflask.api.gen_menu.build_datasets')
+ def test_get_datasets_with_existent_datasets(self,
+ build_datasets_mock):
+ """Test correct dataset is returned with existent build_datasets"""
+ build_datasets_mock.return_value = "Test"
+ expected_result = {
+ 'mouse': {
+ 'H_T2': {'Genotypes': 'Test',
+ 'M': 'Test',
+ 'Phenotypes': 'Test'},
+ 'H_T1': {'Genotypes': 'Test',
+ 'M': 'Test',
+ 'Phenotypes': 'Test'}},
+ 'human': {'HLC': {'Genotypes': 'Test',
+ 'M': 'Test',
+ 'Phenotypes': 'Test'},
+ 'BXD': {'Genotypes': 'Test',
+ 'M': 'Test',
+ 'Phenotypes': 'Test'}}}
+ self.assertEqual(get_datasets(self.test_type),
+ expected_result)
+
+ @mock.patch('wqflask.api.gen_menu.build_datasets')
+ def test_get_datasets_with_non_existent_datasets(self,
+ build_datasets_mock):
+ """Test correct dataset is returned with non-existent build_datasets"""
+ build_datasets_mock.return_value = None
+ expected_result = {
+ 'mouse': {
+ 'H_T2': {},
+ 'H_T1': {}},
+ 'human': {'HLC': {},
+ 'BXD': {}}}
+ self.assertEqual(get_datasets(self.test_type),
+ expected_result)
+
+ @mock.patch('wqflask.api.gen_menu.get_datasets')
+ @mock.patch('wqflask.api.gen_menu.get_types')
+ @mock.patch('wqflask.api.gen_menu.get_groups')
+ @mock.patch('wqflask.api.gen_menu.get_species')
+ def test_gen_dropdown_json(self,
+ species_mock,
+ groups_mock,
+ types_mock,
+ datasets_mock):
+ "Test that the correct dictionary is constructed properly"
+ species_mock.return_value = ("speciesA speciesB speciesC speciesD"
+ .split(" "))
+ datasets_mock.return_value = ("datasetA datasetB datasetC datasetD"
+ .split(" "))
+ groups_mock.return_value = ("groupA groupB groupC groupD"
+ .split(" "))
+ types_mock.return_value = ("typeA typeB typeC typeD"
+ .split(" "))
+ datasets_mock.return_value = ("datasetA datasetB datasetC datasetD"
+ .split(" "))
+
+ expected_result = {
+ 'datasets': ['datasetA', 'datasetB', 'datasetC', 'datasetD'],
+ 'types': ['typeA', 'typeB', 'typeC', 'typeD'],
+ 'groups': ['groupA', 'groupB', 'groupC', 'groupD'],
+ 'species': ['speciesA', 'speciesB', 'speciesC', 'speciesD']}
+
+ self.assertEqual(gen_dropdown_json(), expected_result)
diff --git a/wqflask/tests/unit/wqflask/api/test_mapping.py b/wqflask/tests/unit/wqflask/api/test_mapping.py
new file mode 100644
index 00000000..b094294a
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/api/test_mapping.py
@@ -0,0 +1,108 @@
+import unittest
+from unittest import mock
+from wqflask.api.mapping import initialize_parameters
+from wqflask.api.mapping import do_mapping_for_api
+
+
+class AttributeSetter:
+ def __init__(self, obj):
+ for key, value in obj.items():
+ setattr(self, key, value)
+
+
+class MockGroup(AttributeSetter):
+ def get_marker(self):
+ self.markers = []
+
+
+class TestMapping(unittest.TestCase):
+
+ def test_initialize_parameters(self):
+ expected_results = {
+ "format": "json",
+ "limit_to": False,
+ "mapping_method": "gemma",
+ "maf": 0.01,
+ "use_loco": True,
+ "num_perm": 0,
+ "perm_check": False
+ }
+
+ results = initialize_parameters(
+ start_vars={}, dataset={}, this_trait={})
+ self.assertEqual(results, expected_results)
+
+ start_vars = {
+ "format": "F1",
+ "limit_to": "1",
+ "mapping_method": "rqtl",
+ "control_marker": True,
+ "pair_scan": "true",
+ "interval_mapping": "true",
+ "use_loco": "true",
+ "num_perm": "14"
+
+ }
+
+ results_2 = initialize_parameters(
+ start_vars=start_vars, dataset={}, this_trait={})
+ expected_results = {
+ "format": "F1",
+ "limit_to": 1,
+ "mapping_method": "gemma",
+ "maf": 0.01,
+ "use_loco": True,
+ "num_perm": 14,
+ "perm_check": "ON"
+ }
+
+ self.assertEqual(results_2, expected_results)
+
+ @mock.patch("wqflask.api.mapping.rqtl_mapping.run_rqtl_geno")
+ @mock.patch("wqflask.api.mapping.gemma_mapping.run_gemma")
+ @mock.patch("wqflask.api.mapping.initialize_parameters")
+ @mock.patch("wqflask.api.mapping.retrieve_sample_data")
+ @mock.patch("wqflask.api.mapping.create_trait")
+ @mock.patch("wqflask.api.mapping.data_set.create_dataset")
+ def test_do_mapping_for_api(self, mock_create_dataset, mock_trait, mock_retrieve_sample, mock_param, run_gemma, run_rqtl_geno):
+ start_vars = {
+ "db": "Temp",
+ "trait_id": "dewf3232rff2",
+ "format": "F1",
+ "mapping_method": "gemma",
+ "use_loco": True
+
+ }
+ sampleList = ["S1", "S2", "S3", "S4"]
+ samplelist = ["S1", "S2", "S4"]
+ dataset = AttributeSetter({"group": samplelist})
+ this_trait = AttributeSetter({})
+ trait_data = AttributeSetter({
+ "data": {
+ "item1": AttributeSetter({"name": "S1", "value": "S1_value"}),
+ "item2": AttributeSetter({"name": "S2", "value": "S2_value"}),
+ "item3": AttributeSetter({"name": "S3", "value": "S3_value"}),
+
+ }
+ })
+ trait = AttributeSetter({
+ "data": trait_data
+ })
+
+ dataset.return_value = dataset
+ mock_trait.return_value = this_trait
+
+ mock_retrieve_sample.return_value = trait
+ mock_param.return_value = {
+ "format": "F1",
+ "limit_to": False,
+ "mapping_method": "gemma",
+ "maf": 0.01,
+ "use_loco": "True",
+ "num_perm": 14,
+ "perm_check": "ON"
+ }
+
+ run_gemma.return_value = ["results"]
+ results = do_mapping_for_api(start_vars=start_vars)
+ self.assertEqual(results, ("results", None))
diff --git a/wqflask/tests/unit/wqflask/correlation/__init__.py b/wqflask/tests/unit/wqflask/correlation/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/correlation/__init__.py
diff --git a/wqflask/tests/unit/wqflask/correlation/test_correlation_functions.py b/wqflask/tests/unit/wqflask/correlation/test_correlation_functions.py
new file mode 100644
index 00000000..44d2e0fc
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/correlation/test_correlation_functions.py
@@ -0,0 +1,20 @@
+import unittest
+from unittest import mock
+from wqflask.correlation.correlation_functions import get_trait_symbol_and_tissue_values
+from wqflask.correlation.correlation_functions import cal_zero_order_corr_for_tiss
+
+
+class TestCorrelationFunctions(unittest.TestCase):
+
+ @mock.patch("wqflask.correlation.correlation_functions.MrnaAssayTissueData")
+ def test_get_trait_symbol_and_tissue_values(self, mock_class):
+ """test for getting trait symbol and tissue_values"""
+ mock_class_instance = mock_class.return_value
+ mock_class_instance.gene_symbols = ["k1", "k2", "k3"]
+ mock_class_instance.get_symbol_values_pairs.return_value = {
+ "k1": ["v1", "v2", "v3"], "k2": ["v2", "v3"], "k3": ["k3"]}
+ results = get_trait_symbol_and_tissue_values(
+ symbol_list=["k1", "k2", "k3"])
+ mock_class.assert_called_with(gene_symbols=['k1', 'k2', 'k3'])
+ self.assertEqual({"k1": ["v1", "v2", "v3"], "k2": [
+ "v2", "v3"], "k3": ["k3"]}, results)
diff --git a/wqflask/tests/unit/wqflask/correlation/test_show_corr_results.py b/wqflask/tests/unit/wqflask/correlation/test_show_corr_results.py
new file mode 100644
index 00000000..33601990
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/correlation/test_show_corr_results.py
@@ -0,0 +1,98 @@
+import unittest
+from unittest import mock
+from wqflask.correlation.show_corr_results import get_header_fields
+from wqflask.correlation.show_corr_results import generate_corr_json
+
+
+class AttributeSetter:
+ def __init__(self, trait_obj):
+ for key, value in trait_obj.items():
+ setattr(self, key, value)
+
+
+class TestShowCorrResults(unittest.TestCase):
+ def test_get_header_fields(self):
+ expected = [
+ ['Index',
+ 'Record',
+ 'Symbol',
+ 'Description',
+ 'Location',
+ 'Mean',
+ 'Sample rho',
+ 'N',
+ 'Sample p(rho)',
+ 'Lit rho',
+ 'Tissue rho',
+ 'Tissue p(rho)',
+ 'Max LRS',
+ 'Max LRS Location',
+ 'Additive Effect'],
+
+ ['Index',
+ 'ID',
+ 'Location',
+ 'Sample r',
+ 'N',
+ 'Sample p(r)']
+
+ ]
+ result1 = get_header_fields("ProbeSet", "spearman")
+ result2 = get_header_fields("Other", "Other")
+ self.assertEqual(result1, expected[0])
+ self.assertEqual(result2, expected[1])
+
+ @mock.patch("wqflask.correlation.show_corr_results.hmac.data_hmac")
+ def test_generate_corr_json(self, mock_data_hmac):
+ mock_data_hmac.return_value = "hajsdiau"
+
+ dataset = AttributeSetter({"name": "the_name"})
+ this_trait = AttributeSetter(
+ {"name": "trait_test", "dataset": dataset})
+ target_dataset = AttributeSetter({"type": "Publish"})
+ corr_trait_1 = AttributeSetter({
+ "name": "trait_1",
+ "dataset": AttributeSetter({"name": "dataset_1"}),
+ "view": True,
+ "abbreviation": "T1",
+ "description_display": "Trait I description",
+ "authors": "JM J,JYEW",
+ "pubmed_id": "34n4nn31hn43",
+ "pubmed_text": "2016",
+ "pubmed_link": "https://www.load",
+ "lod_score": "",
+ "mean": "",
+ "LRS_location_repr": "BXBS",
+ "additive": "",
+ "sample_r": 10.5,
+ "num_overlap": 2,
+ "sample_p": 5
+
+
+
+
+ })
+ corr_results = [corr_trait_1]
+
+ dataset_type_other = {
+ "location": "cx-3-4",
+ "sample_4": 12.32,
+ "num_overlap": 3,
+ "sample_p": 10.34
+ }
+
+ expected_results = '[{"index": 1, "trait_id": "trait_1", "dataset": "dataset_1", "hmac": "hajsdiau", "abbreviation_display": "T1", "description": "Trait I description", "mean": "N/A", "authors_display": "JM J,JYEW", "additive": "N/A", "pubmed_id": "34n4nn31hn43", "year": "2016", "lod_score": "N/A", "lrs_location": "BXBS", "sample_r": "10.500", "num_overlap": 2, "sample_p": "5.000e+00"}]'
+
+ results1 = generate_corr_json(corr_results=corr_results, this_trait=this_trait,
+ dataset=dataset, target_dataset=target_dataset, for_api=True)
+ self.assertEqual(expected_results, results1)
+
+ def test_generate_corr_json_view_false(self):
+ trait = AttributeSetter({"view": False})
+ corr_results = [trait]
+ this_trait = AttributeSetter({"name": "trait_test"})
+ dataset = AttributeSetter({"name": "the_name"})
+
+ results_where_view_is_false = generate_corr_json(
+ corr_results=corr_results, this_trait=this_trait, dataset={}, target_dataset={}, for_api=False)
+ self.assertEqual(results_where_view_is_false, "[]")
diff --git a/wqflask/tests/unit/wqflask/marker_regression/__init__.py b/wqflask/tests/unit/wqflask/marker_regression/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/marker_regression/__init__.py
diff --git a/wqflask/tests/unit/wqflask/marker_regression/test_display_mapping_results.py b/wqflask/tests/unit/wqflask/marker_regression/test_display_mapping_results.py
new file mode 100644
index 00000000..8ae0f09f
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/marker_regression/test_display_mapping_results.py
@@ -0,0 +1,156 @@
+import unittest
+
+import htmlgen as HT
+from wqflask.marker_regression.display_mapping_results import (
+ DisplayMappingResults,
+ HtmlGenWrapper
+)
+
+
+class TestDisplayMappingResults(unittest.TestCase):
+ """Basic Methods to test Mapping Results"""
+ def test_pil_colors(self):
+ """Test that colors use PILLOW color format"""
+ self.assertEqual(DisplayMappingResults.CLICKABLE_WEBQTL_REGION_COLOR,
+ (245, 211, 211))
+
+
+class TestHtmlGenWrapper(unittest.TestCase):
+ """Test Wrapper around HTMLGen"""
+ def test_create_image(self):
+ """Test HT.Image method"""
+ self.assertEqual(
+ str(HtmlGenWrapper.create_image_tag(src="test.png",
+ alt="random",
+ border="0",
+ width="10",
+ height="13",
+ usemap="#webqtlmap")),
+ ("""<img alt="random" border="0" height="13" """
+ """src="test.png" usemap="#webqtlmap" """
+ """width="10"/>""")
+ )
+
+ def test_create_form(self):
+ """Test HT.Form method"""
+ test_form = HtmlGenWrapper.create_form_tag(
+ cgi="/testing/",
+ enctype='multipart/form-data',
+ name="formName",
+ submit=HtmlGenWrapper.create_input_tag(type_='hidden', name='Default_Name')
+ )
+ test_image = HtmlGenWrapper.create_image_tag(
+ src="test.png",
+ alt="random",
+ border="0",
+ width="10",
+ height="13",
+ usemap="#webqtlmap"
+ )
+ self.assertEqual(
+ str(test_form).replace("\n", ""),
+ ("""<form action="/testing/" enctype="multipart/form-data" """
+ """method="POST" """
+ """name="formName"><input name="Default_Name" """
+ """type="hidden"/></form>"""))
+ hddn = {
+ 'FormID': 'showDatabase',
+ 'ProbeSetID': '_',
+ 'database': "TestGeno",
+ 'CellID': '_',
+ 'RISet': "Test",
+ 'incparentsf1': 'ON'
+ }
+ for key in hddn.keys():
+ test_form.append(
+ HtmlGenWrapper.create_input_tag(
+ name=key,
+ value=hddn[key],
+ type_='hidden'))
+ test_form.append(test_image)
+
+ self.assertEqual(str(test_form).replace("\n", ""), (
+ """<form action="/testing/" enctype="multipart/form-data" """
+ """method="POST" name="formName">"""
+ """<input name="Default_Name" type="hidden"/>"""
+ """<input name="FormID" type="hidden" value="showDatabase"/>"""
+ """<input name="ProbeSetID" type="hidden" value="_"/>"""
+ """<input name="database" type="hidden" value="TestGeno"/>"""
+ """<input name="CellID" type="hidden" value="_"/>"""
+ """<input name="RISet" type="hidden" value="Test"/>"""
+ """<input name="incparentsf1" type="hidden" value="ON"/>"""
+ """<img alt="random" border="0" height="13" src="test.png" """
+ """usemap="#webqtlmap" width="10"/>"""
+ """</form>"""))
+
+ def test_create_paragraph(self):
+ """Test HT.Paragraph method"""
+ test_p_element = HtmlGenWrapper.create_p_tag(id="smallSize")
+ par_text = (
+ "Mapping using genotype data as "
+ "a trait will result in infinity LRS at one locus. "
+ "In order to display the result properly, all LRSs "
+ "higher than 100 are capped at 100."
+ )
+ self.assertEqual(
+ str(test_p_element),
+ """<p id="smallSize"></p>"""
+ )
+ test_p_element.append(HtmlGenWrapper.create_br_tag())
+ test_p_element.append(par_text)
+ self.assertEqual(
+ str(test_p_element),
+ """<p id="smallSize"><br/>{}</p>""".format(par_text)
+ )
+
+ def test_create_br_tag(self):
+ """Test HT.BR() method"""
+ self.assertEqual(str(HtmlGenWrapper.create_br_tag()),
+ "<br/>")
+
+ def test_create_input_tag(self):
+ """Test HT.Input method"""
+ self.assertEqual(
+ str(HtmlGenWrapper.create_input_tag(
+ type_="hidden",
+ name="name",
+ value="key",
+ Class="trait trait_")).replace("\n", ""),
+ ("""<input class="trait trait_" name="name" """
+ """type="hidden" value="key"/>"""))
+
+ def test_create_map_tag(self):
+ """Test HT.Map method"""
+ self.assertEqual(str(HtmlGenWrapper.create_map_tag(
+ name="WebqTLImageMap")).replace("\n", ""),
+ """<map name="WebqTLImageMap"></map>""")
+ gifmap = HtmlGenWrapper.create_map_tag(name="test")
+ gifmap.append(HtmlGenWrapper.create_area_tag(shape="rect",
+ coords='1 2 3', href='#area1'))
+ gifmap.append(HtmlGenWrapper.create_area_tag(shape="rect",
+ coords='1 2 3', href='#area2'))
+ self.assertEqual(
+ str(gifmap).replace("\n", ""),
+ ("""<map name="test">"""
+ """<area coords="1 2 3" """
+ """href="#area1" shape="rect"/>"""
+ """<area coords="1 2 3" href="#area2" shape="rect"/>"""
+ """</map>"""))
+
+ def test_create_area_tag(self):
+ """Test HT.Area method"""
+ self.assertEqual(
+ str(HtmlGenWrapper.create_area_tag(
+ shape="rect",
+ coords="1 2",
+ href="http://test.com",
+ title="Some Title")).replace("\n", ""),
+ ("""<area coords="1 2" href="http://test.com" """
+ """shape="rect" title="Some Title"/>"""))
+
+ def test_create_link_tag(self):
+ """Test HT.HREF method"""
+ self.assertEqual(
+ str(HtmlGenWrapper.create_link_tag(
+ "www.test.com", "test", target="_blank")).replace("\n", ""),
+ """<a href="www.test.com" target="_blank">test</a>""")
diff --git a/wqflask/tests/unit/wqflask/marker_regression/test_gemma_mapping.py b/wqflask/tests/unit/wqflask/marker_regression/test_gemma_mapping.py
new file mode 100644
index 00000000..fe2569b8
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/marker_regression/test_gemma_mapping.py
@@ -0,0 +1,181 @@
+# test for wqflask/marker_regression/gemma_mapping.py
+import unittest
+import random
+from unittest import mock
+from wqflask.marker_regression.gemma_mapping import run_gemma
+from wqflask.marker_regression.gemma_mapping import gen_pheno_txt_file
+from wqflask.marker_regression.gemma_mapping import gen_covariates_file
+from wqflask.marker_regression.gemma_mapping import parse_loco_output
+
+
+class AttributeSetter:
+ def __init__(self, obj):
+ for key, val in obj.items():
+ setattr(self, key, val)
+
+
+class MockGroup(AttributeSetter):
+ def get_samplelist(self):
+ return None
+
+
+class TestGemmaMapping(unittest.TestCase):
+
+ @mock.patch("wqflask.marker_regression.gemma_mapping.parse_loco_output")
+ def test_run_gemma_firstrun_set_false(self, mock_parse_loco):
+ """add tests for gemma function where first run is set to false"""
+ dataset = AttributeSetter(
+ {"group": AttributeSetter({"genofile": "genofile.geno"})})
+
+ output_file = "file1"
+ mock_parse_loco.return_value = []
+ this_trait = AttributeSetter({"name": "t1"})
+
+ result = run_gemma(this_trait=this_trait, this_dataset=dataset, samples=[], vals=[
+ ], covariates="", use_loco=True, first_run=False, output_files=output_file)
+
+ expected_results = ([], "file1")
+ self.assertEqual(expected_results, result)
+
+ @mock.patch("wqflask.marker_regression.gemma_mapping.webqtlConfig.GENERATED_IMAGE_DIR", "/home/user/img")
+ @mock.patch("wqflask.marker_regression.gemma_mapping.GEMMAOPTS", "-debug")
+ @mock.patch("wqflask.marker_regression.gemma_mapping.GEMMA_WRAPPER_COMMAND", "ghc")
+ @mock.patch("wqflask.marker_regression.gemma_mapping.TEMPDIR", "/home/user/data/")
+ @mock.patch("wqflask.marker_regression.gemma_mapping.parse_loco_output")
+ @mock.patch("wqflask.marker_regression.gemma_mapping.flat_files")
+ @mock.patch("wqflask.marker_regression.gemma_mapping.gen_covariates_file")
+ @mock.patch("wqflask.marker_regression.run_mapping.random.choice")
+ @mock.patch("wqflask.marker_regression.gemma_mapping.os")
+ @mock.patch("wqflask.marker_regression.gemma_mapping.gen_pheno_txt_file")
+ def test_run_gemma_firstrun_set_true(self, mock_gen_pheno_txt, mock_os, mock_choice, mock_gen_covar, mock_flat_files,mock_parse_loco):
+ """add tests for run_gemma where first run is set to true"""
+ this_chromosomes={}
+ for i in range(1, 5):
+ this_chromosomes[f'CH{i}']=(AttributeSetter({"name": f"CH{i}"}))
+ chromosomes = AttributeSetter({"chromosomes": this_chromosomes})
+
+ dataset_group = MockGroup(
+ {"name": "GP1", "genofile": "file_geno"})
+ dataset = AttributeSetter({"group": dataset_group, "name": "dataset1_name",
+ "species": AttributeSetter({"chromosomes": chromosomes})})
+ trait = AttributeSetter({"name": "trait1"})
+ samples = []
+ mock_gen_pheno_txt.return_value = None
+ mock_os.path.isfile.return_value = True
+ mock_gen_covar.return_value = None
+ mock_choice.return_value = "R"
+ mock_flat_files.return_value = "/home/genotype/bimbam"
+ mock_parse_loco.return_value = []
+ results = run_gemma(this_trait=trait, this_dataset=dataset, samples=[
+ ], vals=[], covariates="", use_loco=True)
+ self.assertEqual(mock_os.system.call_count,2)
+ mock_gen_pheno_txt.assert_called_once()
+ mock_parse_loco.assert_called_once_with(dataset, "GP1_GWA_RRRRRR",True)
+ mock_os.path.isfile.assert_called_once_with(
+ ('/home/user/imgfile_output.assoc.txt'))
+ self.assertEqual(mock_flat_files.call_count, 4)
+ self.assertEqual(results, ([], "GP1_GWA_RRRRRR"))
+
+ @mock.patch("wqflask.marker_regression.gemma_mapping.TEMPDIR", "/home/user/data")
+ def test_gen_pheno_txt_file(self):
+ """add tests for generating pheno txt file"""
+ with mock.patch("builtins.open", mock.mock_open())as mock_open:
+ gen_pheno_txt_file(this_dataset={}, genofile_name="", vals=[
+ "x", "w", "q", "we", "R"], trait_filename="fitr.re")
+ mock_open.assert_called_once_with(
+ '/home/user/data/gn2/fitr.re.txt', 'w')
+ filehandler = mock_open()
+ values = ["x", "w", "q", "we", "R"]
+ write_calls = [mock.call('NA\n'), mock.call('w\n'), mock.call(
+ 'q\n'), mock.call('we\n'), mock.call('R\n')]
+
+ filehandler.write.assert_has_calls(write_calls)
+
+ @mock.patch("wqflask.marker_regression.gemma_mapping.flat_files")
+ @mock.patch("wqflask.marker_regression.gemma_mapping.create_trait")
+ @mock.patch("wqflask.marker_regression.gemma_mapping.create_dataset")
+ def test_gen_covariates_file(self, create_dataset, create_trait, flat_files):
+ """add tests for generating covariates files"""
+ covariates = "X1:X2,Y1:Y2,M1:M3,V1:V2"
+ samplelist = ["X1", "X2", "X3", "X4"]
+ create_dataset_side_effect = []
+ create_trait_side_effect = []
+
+ for i in range(4):
+ create_dataset_side_effect.append(AttributeSetter({"name": f'name_{i}'}))
+ create_trait_side_effect.append(
+ AttributeSetter({"data": [f'data_{i}']}))
+
+ create_dataset.side_effect = create_trait_side_effect
+ create_trait.side_effect = create_trait_side_effect
+
+ group = MockGroup({"name": "group_X", "samplelist": samplelist})
+ this_dataset = AttributeSetter({"group": group})
+ flat_files.return_value = "Home/Genenetwork"
+
+ with mock.patch("builtins.open", mock.mock_open())as mock_open:
+ gen_covariates_file(this_dataset=this_dataset, covariates=covariates,
+ samples=["x1", "x2", "X3"])
+
+ create_dataset.assert_has_calls(
+ [mock.call('X2'), mock.call('Y2'), mock.call('M3'), mock.call('V2')])
+ mock_calls = []
+ trait_names = ["X1", "Y1", "M1", "V1"]
+
+ for i, trait in enumerate(create_trait_side_effect):
+ mock_calls.append(
+ mock.call(dataset=trait, name=trait_names[i], cellid=None))
+
+ create_trait.assert_has_calls(mock_calls)
+
+ flat_files.assert_called_once_with('mapping')
+ mock_open.assert_called_once_with(
+ 'Home/Genenetwork/group_X_covariates.txt', 'w')
+ filehandler = mock_open()
+ filehandler.write.assert_has_calls([mock.call(
+ '-9\t'), mock.call('-9\t'), mock.call('-9\t'), mock.call('-9\t'), mock.call('\n')])
+
+ @mock.patch("wqflask.marker_regression.gemma_mapping.TEMPDIR", "/home/tmp")
+ @mock.patch("wqflask.marker_regression.gemma_mapping.os")
+ @mock.patch("wqflask.marker_regression.gemma_mapping.json")
+ def test_parse_loco_outputfile_found(self, mock_json, mock_os):
+ """add tests for parse loco output file found"""
+ mock_json.load.return_value = {
+ "files": [["file_name", "user", "~/file1"],
+ ["file_name", "user", "~/file2"]]
+ }
+ return_file="""X/Y\tM1\t28.457155\tQ\tE\tA\tMMB\t23.3\tW\t0.9\t0.85\t
+chr4\tM2\t12\tQ\tE\tMMB\tR\t24\tW\t0.87\t0.5
+Y\tM4\t12\tQ\tE\tMMB\tR\t11.6\tW\t0.21\t0.7
+X\tM5\t12\tQ\tE\tMMB\tR\t21.1\tW\t0.65\t0.6"""
+
+ return_file_2 = """chr\tother\t21322\tQ\tE\tA\tP\tMMB\tCDE\t0.5\t0.4"""
+ mock_os.path.isfile.return_value = True
+ file_to_write = """{"files":["file_1","file_2"]}"""
+ with mock.patch("builtins.open") as mock_open:
+
+ handles = (mock.mock_open(read_data="gwas").return_value, mock.mock_open(
+ read_data=return_file).return_value, mock.mock_open(read_data=return_file_2).return_value)
+ mock_open.side_effect = handles
+ results = parse_loco_output(
+ this_dataset={}, gwa_output_filename=".xw/")
+ expected_results= [
+ {'name': 'M1', 'chr': 'X/Y', 'Mb': 2.8457155e-05, 'p_value': 0.85, 'additive': 23.3, 'lod_score': 0.07058107428570727},
+ {'name': 'M2', 'chr': 4, 'Mb': 1.2e-05, 'p_value': 0.5, 'additive': 24.0, 'lod_score': 0.3010299956639812},
+ {'name': 'M4', 'chr': 'Y', 'Mb': 1.2e-05, 'p_value': 0.7, 'additive': 11.6, 'lod_score': 0.1549019599857432},
+ {'name': 'M5', 'chr': 'X', 'Mb': 1.2e-05, 'p_value': 0.6, 'additive': 21.1, 'lod_score': 0.22184874961635637}]
+
+ self.assertEqual(expected_results, results)
+
+ @mock.patch("wqflask.marker_regression.gemma_mapping.TEMPDIR", "/home/tmp")
+ @mock.patch("wqflask.marker_regression.gemma_mapping.os")
+ def test_parse_loco_outputfile_not_found(self, mock_os):
+ """add tests for parse loco output where output file not found"""
+
+ mock_os.path.isfile.return_value = False
+ file_to_write = """{"files":["file_1","file_2"]}"""
+
+ with mock.patch("builtins.open", mock.mock_open(read_data=file_to_write)) as mock_open:
+ results = parse_loco_output(
+ this_dataset={}, gwa_output_filename=".xw/")
+ self.assertEqual(results, [])
diff --git a/wqflask/tests/unit/wqflask/marker_regression/test_plink_mapping.py b/wqflask/tests/unit/wqflask/marker_regression/test_plink_mapping.py
new file mode 100644
index 00000000..5eec93f1
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/marker_regression/test_plink_mapping.py
@@ -0,0 +1,85 @@
+# test for wqflask/marker_regression/plink_mapping.py
+import unittest
+from unittest import mock
+from wqflask.marker_regression.plink_mapping import build_line_list
+from wqflask.marker_regression.plink_mapping import get_samples_from_ped_file
+from wqflask.marker_regression.plink_mapping import flat_files
+from wqflask.marker_regression.plink_mapping import gen_pheno_txt_file_plink
+from wqflask.marker_regression.plink_mapping import parse_plink_output
+
+
+class AttributeSetter:
+ def __init__(self, obj):
+ for key, val in obj.items():
+ setattr(self, key, val)
+class TestPlinkMapping(unittest.TestCase):
+
+
+ def test_build_line_list(self):
+ """test for building line list"""
+ line_1 = "this is line one test"
+ irregular_line = " this is an, irregular line "
+ exp_line1 = ["this", "is", "line", "one", "test"]
+
+ results = build_line_list(irregular_line)
+ self.assertEqual(exp_line1, build_line_list(line_1))
+ self.assertEqual([], build_line_list())
+ self.assertEqual(["this", "is", "an,", "irregular", "line"], results)
+
+ @mock.patch("wqflask.marker_regression.plink_mapping.flat_files")
+ def test_get_samples_from_ped_file(self, mock_flat_files):
+ """test for getting samples from ped file"""
+ dataset = AttributeSetter({"group": AttributeSetter({"name": "n_1"})})
+ file_sample = """Expected_1\tline test
+Expected_2\there
+ Expected_3\tthree"""
+ mock_flat_files.return_value = "/home/user/"
+ with mock.patch("builtins.open", mock.mock_open(read_data=file_sample)) as mock_open:
+ results = get_samples_from_ped_file(dataset)
+ mock_flat_files.assert_called_once_with("mapping")
+ mock_open.assert_called_once_with("/home/user/n_1.ped", "r")
+ self.assertEqual(
+ ["Expected_1", "Expected_2", "Expected_3"], results)
+
+ @mock.patch("wqflask.marker_regression.plink_mapping.TMPDIR", "/home/user/data/")
+ @mock.patch("wqflask.marker_regression.plink_mapping.get_samples_from_ped_file")
+ def test_gen_pheno_txt_file_plink(self, mock_samples):
+ """test for getting gen_pheno txt file"""
+ mock_samples.return_value = ["Expected_1", "Expected_2", "Expected_3"]
+
+ trait = AttributeSetter({"name": "TX"})
+ dataset = AttributeSetter({"group": AttributeSetter({"name": "n_1"})})
+ vals = ["value=K1", "value=K2", "value=K3"]
+ with mock.patch("builtins.open", mock.mock_open()) as mock_open:
+ results = gen_pheno_txt_file_plink(this_trait=trait, dataset=dataset,
+ vals=vals, pheno_filename="ph_file")
+ mock_open.assert_called_once_with(
+ "/home/user/data/ph_file.txt", "wb")
+ filehandler = mock_open()
+ calls_expected = [mock.call('FID\tIID\tTX\n'),
+ mock.call('Expected_1\tExpected_1\tK1\nExpected_2\tExpected_2\tK2\nExpected_3\tExpected_3\tK3\n')]
+
+ filehandler.write.assert_has_calls(calls_expected)
+
+ filehandler.close.assert_called_once()
+
+ @mock.patch("wqflask.marker_regression.plink_mapping.TMPDIR", "/home/user/data/")
+ @mock.patch("wqflask.marker_regression.plink_mapping.build_line_list")
+ def test_parse_plink_output(self, mock_line_list):
+ """test for parsing plink output"""
+ chromosomes = [0, 34, 110, 89, 123, 23, 2]
+ species = AttributeSetter(
+ {"name": "S1", "chromosomes": AttributeSetter({"chromosomes": chromosomes})})
+
+ fake_file = """0 AACCAT T98.6 0.89\n2 AATA B45 0.3\n121 ACG B56.4 NA"""
+
+ mock_line_list.side_effect = [["0", "AACCAT", "T98.6", "0.89"], [
+ "2", "AATA", "B45", "0.3"], ["121", "ACG", "B56.4", "NA"]]
+ with mock.patch("builtins.open", mock.mock_open(read_data=fake_file)) as mock_open:
+ parse_results = parse_plink_output(
+ output_filename="P1_file", species=species)
+ mock_open.assert_called_once_with(
+ "/home/user/data/P1_file.qassoc", "rb")
+ expected = (2, {'AACCAT': 0.89, 'AATA': 0.3})
+
+ self.assertEqual(parse_results, expected)
diff --git a/wqflask/tests/unit/wqflask/marker_regression/test_qtlreaper_mapping.py b/wqflask/tests/unit/wqflask/marker_regression/test_qtlreaper_mapping.py
new file mode 100644
index 00000000..b47f877a
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/marker_regression/test_qtlreaper_mapping.py
@@ -0,0 +1,21 @@
+import unittest
+from unittest import mock
+from wqflask.marker_regression.qtlreaper_mapping import gen_pheno_txt_file
+
+#issues some methods in genofile object are not defined
+#modify samples should equal to vals
+class TestQtlReaperMapping(unittest.TestCase):
+ @mock.patch("wqflask.marker_regression.qtlreaper_mapping.TEMPDIR", "/home/user/data")
+ def test_gen_pheno_txt_file(self):
+ vals=["V1","x","V4","V3","x"]
+ samples=["S1","S2","S3","S4","S5"]
+ trait_filename="trait_file"
+ with mock.patch("builtins.open", mock.mock_open())as mock_open:
+ gen_pheno_txt_file(samples=samples,vals=vals,trait_filename=trait_filename)
+ mock_open.assert_called_once_with("/home/user/data/gn2/trait_file.txt","w")
+ filehandler=mock_open()
+ write_calls= [mock.call('Trait\t'),mock.call('S1\tS3\tS4\n'),mock.call('T1\t'),mock.call('V1\tV4\tV3')]
+
+ filehandler.write.assert_has_calls(write_calls)
+
+
diff --git a/wqflask/tests/unit/wqflask/marker_regression/test_rqtl_mapping.py b/wqflask/tests/unit/wqflask/marker_regression/test_rqtl_mapping.py
new file mode 100644
index 00000000..c585f1df
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/marker_regression/test_rqtl_mapping.py
@@ -0,0 +1,48 @@
+import unittest
+from unittest import mock
+from wqflask import app
+from wqflask.marker_regression.rqtl_mapping import get_trait_data_type
+from wqflask.marker_regression.rqtl_mapping import sanitize_rqtl_phenotype
+from wqflask.marker_regression.rqtl_mapping import sanitize_rqtl_names
+
+class TestRqtlMapping(unittest.TestCase):
+
+ def setUp(self):
+ self.app_context=app.app_context()
+ self.app_context.push()
+
+ def tearDown(self):
+ self.app_context.pop()
+
+
+ @mock.patch("wqflask.marker_regression.rqtl_mapping.g")
+ @mock.patch("wqflask.marker_regression.rqtl_mapping.logger")
+ def test_get_trait_data(self,mock_logger,mock_db):
+ """test for getting trait data_type return True"""
+ query_value="""SELECT value FROM TraitMetadata WHERE type='trait_data_type'"""
+ mock_db.db.execute.return_value.fetchone.return_value=["""{"type":"trait_data_type","name":"T1","traid_id":"fer434f"}"""]
+ results=get_trait_data_type("traid_id")
+ mock_db.db.execute.assert_called_with(query_value)
+ self.assertEqual(results,"fer434f")
+
+ def test_sanitize_rqtl_phenotype(self):
+ """test for sanitizing rqtl phenotype"""
+ vals=['f',"x","r","x","x"]
+ results=sanitize_rqtl_phenotype(vals)
+ expected_phenotype_string='c(f,NA,r,NA,NA)'
+
+ self.assertEqual(results,expected_phenotype_string)
+
+ def test_sanitize_rqtl_names(self):
+ """test for sanitzing rqtl names"""
+ vals=['f',"x","r","x","x"]
+ expected_sanitized_name="c('f',NA,'r',NA,NA)"
+ results=sanitize_rqtl_names(vals)
+ self.assertEqual(expected_sanitized_name,results)
+
+
+
+
+
+
+
diff --git a/wqflask/tests/unit/wqflask/marker_regression/test_run_mapping.py b/wqflask/tests/unit/wqflask/marker_regression/test_run_mapping.py
new file mode 100644
index 00000000..a29d8cfb
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/marker_regression/test_run_mapping.py
@@ -0,0 +1,289 @@
+import unittest
+import datetime
+from unittest import mock
+
+from wqflask.marker_regression.run_mapping import get_genofile_samplelist
+from wqflask.marker_regression.run_mapping import geno_db_exists
+from wqflask.marker_regression.run_mapping import write_input_for_browser
+from wqflask.marker_regression.run_mapping import export_mapping_results
+from wqflask.marker_regression.run_mapping import trim_markers_for_figure
+from wqflask.marker_regression.run_mapping import get_perm_strata
+from wqflask.marker_regression.run_mapping import get_chr_lengths
+
+
+class AttributeSetter:
+ def __init__(self, obj):
+ for k, v in obj.items():
+ setattr(self, k, v)
+
+
+class MockGroup(AttributeSetter):
+
+ def get_genofiles(self):
+ return [{"location": "~/genofiles/g1_file", "sample_list": ["S1", "S2", "S3", "S4"]}]
+
+
+class TestRunMapping(unittest.TestCase):
+ def setUp(self):
+
+ self.group = MockGroup(
+ {"genofile": "~/genofiles/g1_file", "name": "GP1_", "species": "Human"})
+ chromosomes = {
+ "3": AttributeSetter({
+ "name": "C1",
+ "length": "0.04"
+ }),
+ "4": AttributeSetter({
+ "name": "C2",
+ "length": "0.03"
+ }),
+ "5": AttributeSetter({
+ "name": "C4",
+ "length": "0.01"
+ })
+ }
+ self.dataset = AttributeSetter(
+ {"fullname": "dataser_1", "group": self.group, "type": "ProbeSet"})
+
+ self.chromosomes = AttributeSetter({"chromosomes": chromosomes})
+ self.trait = AttributeSetter(
+ {"symbol": "IGFI", "chr": "X1", "mb": 123313})
+
+ def tearDown(self):
+ self.dataset = AttributeSetter(
+ {"group": {"location": "~/genofiles/g1_file"}})
+
+ def test_get_genofile_samplelist(self):
+
+ results_1 = get_genofile_samplelist(self.dataset)
+ self.assertEqual(results_1, ["S1", "S2", "S3", "S4"])
+ self.group.genofile = "~/genofiles/g2_file"
+ result_2 = get_genofile_samplelist(self.dataset)
+ self.assertEqual(result_2, [])
+
+ @mock.patch("wqflask.marker_regression.run_mapping.data_set")
+ def test_if_geno_db_exists(self, mock_data_set):
+ mock_data_set.create_dataset.side_effect = [
+ AttributeSetter({}), Exception()]
+ results_no_error = geno_db_exists(self.dataset)
+ results_with_error = geno_db_exists(self.dataset)
+
+ self.assertEqual(mock_data_set.create_dataset.call_count, 2)
+ self.assertEqual(results_with_error, "False")
+ self.assertEqual(results_no_error, "True")
+
+ def test_trim_markers_for_figure(self):
+
+ markers = [{
+ "name": "MK1",
+ "chr": "C1",
+ "cM": "1",
+ "Mb": "12000",
+ "genotypes": [],
+ "dominance":"TT",
+ "additive":"VA",
+ "lod_score":0.5
+ },
+ {
+ "name": "MK2",
+ "chr": "C2",
+ "cM": "15",
+ "Mb": "10000",
+ "genotypes": [],
+ "lod_score":0.7
+ },
+ {
+ "name": "MK1",
+ "chr": "C3",
+ "cM": "45",
+ "Mb": "1",
+ "genotypes": [],
+ "dominance":"Tt",
+ "additive":"VE",
+ "lod_score":1
+ }]
+
+ marker_2 = [{
+ "name": "MK1",
+ "chr": "C1",
+ "cM": "1",
+ "Mb": "12000",
+ "genotypes": [],
+ "dominance":"TT",
+ "additive":"VA",
+ "p_wald":4.6
+ }]
+ results = trim_markers_for_figure(markers)
+ result_2 = trim_markers_for_figure(marker_2)
+ expected = [
+ {
+ "name": "MK1",
+ "chr": "C1",
+ "cM": "1",
+ "Mb": "12000",
+ "genotypes": [],
+ "dominance":"TT",
+ "additive":"VA",
+ "lod_score":0.5
+ },
+ {
+ "name": "MK1",
+ "chr": "C3",
+ "cM": "45",
+ "Mb": "1",
+ "genotypes": [],
+ "dominance":"Tt",
+ "additive":"VE",
+ "lod_score":1
+ }
+
+ ]
+ self.assertEqual(results, expected)
+ self.assertEqual(result_2, marker_2)
+
+ def test_export_mapping_results(self):
+ """test for exporting mapping results"""
+ datetime_mock = mock.Mock(wraps=datetime.datetime)
+ datetime_mock.now.return_value = datetime.datetime(
+ 2019, 9, 1, 10, 12, 12)
+
+ markers = [{
+ "name": "MK1",
+ "chr": "C1",
+ "cM": "1",
+ "Mb": "12000",
+ "genotypes": [],
+ "dominance":"TT",
+ "additive":"VA",
+ "lod_score":3
+ },
+ {
+ "name": "MK2",
+ "chr": "C2",
+ "cM": "15",
+ "Mb": "10000",
+ "genotypes": [],
+ "lod_score":7
+ },
+ {
+ "name": "MK1",
+ "chr": "C3",
+ "cM": "45",
+ "Mb": "1",
+ "genotypes": [],
+ "dominance":"Tt",
+ "additive":"VE",
+ "lod_score":7
+ }]
+
+ with mock.patch("builtins.open", mock.mock_open()) as mock_open:
+
+ with mock.patch("wqflask.marker_regression.run_mapping.datetime.datetime", new=datetime_mock):
+ export_mapping_results(dataset=self.dataset, trait=self.trait, markers=markers,
+ results_path="~/results", mapping_scale="physic", score_type="-log(p)",
+ transform="qnorm", covariates="Dataset1:Trait1,Dataset2:Trait2", n_samples="100")
+
+ write_calls = [
+ mock.call('Time/Date: 09/01/19 / 10:12:12\n'),
+ mock.call('Population: Human GP1_\n'), mock.call(
+ 'Data Set: dataser_1\n'),
+ mock.call('N Samples: 100\n'), mock.call('Transform - Quantile Normalized\n'),
+ mock.call('Gene Symbol: IGFI\n'), mock.call(
+ 'Location: X1 @ 123313 Mb\n'),
+ mock.call('Cofactors (dataset - trait):\n'),
+ mock.call('Trait1 - Dataset1\n'),
+ mock.call('Trait2 - Dataset2\n'),
+ mock.call('\n'), mock.call('Name,Chr,'),
+ mock.call('Mb,-log(p)'), mock.call('Cm,-log(p)'),
+ mock.call(',Additive'), mock.call(',Dominance'),
+ mock.call('\n'), mock.call('MK1,C1,'),
+ mock.call('12000,'), mock.call('1,'),
+ mock.call('3'), mock.call(',VA'),
+ mock.call(',TT'), mock.call('\n'),
+ mock.call('MK2,C2,'), mock.call('10000,'),
+ mock.call('15,'), mock.call('7'),
+ mock.call('\n'), mock.call('MK1,C3,'),
+ mock.call('1,'), mock.call('45,'),
+ mock.call('7'), mock.call(',VE'),
+ mock.call(',Tt')
+
+ ]
+ mock_open.assert_called_once_with("~/results", "w+")
+ filehandler = mock_open()
+ filehandler.write.assert_has_calls(write_calls)
+
+ @mock.patch("wqflask.marker_regression.run_mapping.random.choice")
+ def test_write_input_for_browser(self, mock_choice):
+ """test for writing input for browser"""
+ mock_choice.side_effect = ["F", "i", "l", "e", "s", "x"]
+ with mock.patch("builtins.open", mock.mock_open()) as mock_open:
+ expected = ['GP1__Filesx_GWAS', 'GP1__Filesx_ANNOT']
+
+ results = write_input_for_browser(
+ this_dataset=self.dataset, gwas_results={}, annotations={})
+ self.assertEqual(results, expected)
+
+ def test_get_perm_strata(self):
+ categorical_vars = ["C1", "C2", "W1"]
+ used_samples = ["S1", "S2"]
+ sample_list = AttributeSetter({"sample_attribute_values": {
+ "S1": {
+ "C1": "c1_value",
+ "C2": "c2_value",
+ "W1": "w1_value"
+
+ },
+ "S2": {
+ "W1": "w2_value",
+ "W2": "w2_value"
+
+ },
+ "S3": {
+
+ "C1": "c1_value",
+ "C2": "c2_value"
+
+ },
+
+ }})
+
+ results = get_perm_strata(this_trait={}, sample_list=sample_list,
+ categorical_vars=categorical_vars, used_samples=used_samples)
+ self.assertEqual(results, [2, 1])
+
+ def test_get_chr_length(self):
+ """test for getting chromosome length"""
+ chromosomes = AttributeSetter({"chromosomes": self.chromosomes})
+ dataset = AttributeSetter({"species": chromosomes})
+ results = get_chr_lengths(
+ mapping_scale="physic", mapping_method="reaper", dataset=dataset, qtl_results=[])
+ chr_lengths = []
+ for key, chromo in self.chromosomes.chromosomes.items():
+ chr_lengths.append({"chr": chromo.name, "size": chromo.length})
+
+ self.assertEqual(chr_lengths, results)
+
+ qtl_results = [{
+ "chr": "16",
+ "cM": "0.2"
+ },
+ {
+ "chr": "12",
+ "cM": "0.5"
+ },
+ {
+ "chr": "18",
+ "cM": "0.1"
+ },
+ {
+ "chr": "22",
+ "cM": "0.4"
+ },
+ ]
+
+ result_with_other_mapping_scale = get_chr_lengths(
+ mapping_scale="other", mapping_method="reaper", dataset=dataset, qtl_results=qtl_results)
+ expected_value = [{'chr': '1', 'size': '0'}, {
+ 'chr': '16', 'size': '500000.0'}, {'chr': '18', 'size': '400000.0'}]
+
+ self.assertEqual(result_with_other_mapping_scale, expected_value)
diff --git a/wqflask/tests/unit/wqflask/show_trait/__init__.py b/wqflask/tests/unit/wqflask/show_trait/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/show_trait/__init__.py
diff --git a/wqflask/tests/unit/wqflask/show_trait/test_export_trait_data.py b/wqflask/tests/unit/wqflask/show_trait/test_export_trait_data.py
new file mode 100644
index 00000000..41761944
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/show_trait/test_export_trait_data.py
@@ -0,0 +1,212 @@
+import unittest
+from unittest import mock
+from wqflask.show_trait.export_trait_data import dict_to_sorted_list
+from wqflask.show_trait.export_trait_data import cmp_samples
+from wqflask.show_trait.export_trait_data import export_sample_table
+from wqflask.show_trait.export_trait_data import get_export_metadata
+
+
+class AttributesSetter:
+ def __init__(self, obj):
+ for key, value in obj.items():
+ setattr(self, key, value)
+
+
+class TestExportTraits(unittest.TestCase):
+ """Test methods related to converting dict to sortedlist"""
+ @mock.patch("wqflask.show_trait.export_trait_data.create_trait")
+ @mock.patch("wqflask.show_trait.export_trait_data.data_set")
+ def test_get_export_metadata_no_publish(self, mock_dataset, mock_trait):
+ """test for exporting metadata with no publish"""
+ mock_dataset_attributes = AttributesSetter(
+ {"type": "no_publish", "dataset_name": "Temp", "name": "Temp"})
+
+ mock_nested_attributes = AttributesSetter({"name": "name"})
+ mock_dataset_attributes.group = mock_nested_attributes
+ mock_dataset.create_dataset.return_value = mock_dataset_attributes
+ mock_trait.return_value = AttributesSetter({"symbol": "", "description_display": "Description",
+ "title": "research1", "journal": "", "authors": ""})
+
+ results = get_export_metadata("random_id", "Temp")
+ expected = [["Record ID: random_id"],
+ ["Trait URL: http://genenetwork.org/show_trait?trait_id=random_id&dataset=Temp"],
+ ["Dataset: Temp"],
+ ["Group: name"], []]
+
+ mock_dataset.create_dataset.assert_called_with("Temp")
+ mock_trait.assert_called_with(
+ dataset=mock_dataset_attributes, name="random_id", cellid=None, get_qtl_info=False)
+ self.assertEqual(results, expected)
+
+ @mock.patch("wqflask.show_trait.export_trait_data.create_trait")
+ @mock.patch("wqflask.show_trait.export_trait_data.data_set")
+ def test_get_export_metadata_with_publish(self, data_mock, trait_mock):
+ """test for exporting metadata with dataset.type=Publish"""
+ mock_dataset_attributes = AttributesSetter({"type": "Publish", "dataset_name": "Temp",
+ "name": "Temp", "description_display": "Description goes here"})
+
+ mock_nested_attributes = AttributesSetter({"name": "name"})
+ mock_dataset_attributes.group = mock_nested_attributes
+ data_mock.create_dataset.return_value = mock_dataset_attributes
+ trait_instance = AttributesSetter({"symbol": "", "description_display": "Description",
+ "title": "research1", "journal": "", "authors": ""})
+ trait_mock.return_value = trait_instance
+
+ results = get_export_metadata(
+ "29ae0615-0d77-4814-97c7-c9e91f6bfd7b", "Temp")
+
+ expected = [['Phenotype ID: 29ae0615-0d77-4814-97c7-c9e91f6bfd7b'],
+ ['Phenotype URL: http://genenetwork.org/show_trait?trait_id=29ae0615-0d77-4814-97c7-c9e91f6bfd7b&dataset=Temp'], [
+ 'Group: name'], ['Phenotype: Description'],
+ ['Authors: N/A'], ['Title: research1'],
+ ['Journal: N/A'], ['Dataset Link: http://gn1.genenetwork.org/webqtl/main.py?FormID=sharinginfo&InfoPageName=Temp'], []]
+
+ self.assertEqual(results, expected)
+
+ @mock.patch("wqflask.show_trait.export_trait_data.dict_to_sorted_list")
+ @mock.patch("wqflask.show_trait.export_trait_data.get_export_metadata")
+ def test_export_sample_table(self, exp_metadata, dict_list):
+ """test for exporting sample table"""
+ targs_obj = {
+ "export_data": """{
+ "primary_samples": [
+ {
+ "other": "germanotta",
+ "name": "Sauroniops",
+ "se":{
+ "name":"S2"
+ },
+ "num_cases":{
+ "k1":"value"
+
+ }
+ }
+ ],
+ "other_samples": [
+ {
+ "se": 1,
+ "num_cases": 4,
+ "value": 6,
+ "name": 3
+ }
+ ]
+ }""",
+ "trait_display_name": "Hair_color",
+ "trait_id": "23177fdc-312e-4084-ad0c-f3eae785fff5",
+ "dataset": {
+ }
+ }
+ exp_metadata.return_value = [
+ ["Phenotype ID:0a2be192-57f5-400b-bbbd-0cf50135995f"], ['Group:gp1'],
+ ["Phenotype:p1"], [
+ "Authors:N/A"],
+ ["Title:research1"],
+ ["Journal:N/A"],
+ ["Dataset Link: http://gn1.genenetwork.org/webqtl/main.py?FormID=sharinginfo&InfoPageName=name1"], []]
+ expected = ('Hair_color',
+ [['Phenotype ID:0a2be192-57f5-400b-bbbd-0cf50135995f'],
+ ['Group:gp1'],
+ ['Phenotype:p1'],
+ ['Authors:N/A'],
+ ['Title:research1'],
+ ['Journal:N/A'],
+ ['Dataset Link: '
+ 'http://gn1.genenetwork.org/webqtl/main.py?FormID=sharinginfo&InfoPageName=name1'],
+ [],
+ ['Name', 'Value', 'SE', 'N'],
+ ['Sauroniops', 'germanotta'],
+ [3, 6, 1, 4]])
+
+ dict_list.side_effect = [['Sauroniops', 'germanotta'], [3, 6, 1, 4]]
+
+ self.assertEqual(export_sample_table(targs_obj), expected)
+ exp_metadata.assert_called_with(
+ "23177fdc-312e-4084-ad0c-f3eae785fff5", {})
+ self.assertEqual(dict_list.call_count, 2)
+
+ def test_dict_to_sortedlist(self):
+ """test for conversion of dict to sorted list"""
+ sample1 = {
+ "other": "exp1",
+ "name": "exp2"
+ }
+ sample2 = {
+ "se": 1,
+ "num_cases": 4,
+ "value": 6,
+ "name": 3
+
+ }
+ rever = {
+ "name": 3,
+ "value": 6,
+ "num_cases": 4,
+ "se": 1
+ }
+ oneItem = {
+ "item1": "one"
+ }
+
+ self.assertEqual(["exp2", "exp1"], dict_to_sorted_list(sample1))
+ self.assertEqual([3, 6, 1, 4], dict_to_sorted_list(sample2))
+ self.assertEqual([3, 6, 1, 4], dict_to_sorted_list(rever))
+ self.assertEqual(["one"], dict_to_sorted_list(oneItem))
+ """test that the func returns the values not the keys"""
+ self.assertFalse(["other", "name"] == dict_to_sorted_list(sample1))
+
+ def test_cmp_samples(self):
+ """test for comparing samples function"""
+ sampleA = [
+ [
+ ("value", "other"),
+ ("name", "test_name")
+ ]
+ ]
+ sampleB = [
+ [
+ ("value", "other"),
+ ("unknown", "test_name")
+ ]
+ ]
+ sampleC = [
+ [("other", "value"),
+ ("name", "value")
+ ],
+ [
+ ("name", "value"),
+ ("value", "name")
+ ],
+ [
+ ("other", "value"),
+ ("name", "value"
+ )],
+ [
+ ("name", "name1"),
+ ("se", "valuex")
+ ],
+ [(
+ "value", "name1"),
+ ("se", "valuex")
+ ],
+ [(
+ "other", "name1"),
+ ("se", "valuex"
+ )
+ ],
+ [(
+ "name", "name_val"),
+ ("num_cases", "num_val")
+ ],
+ [(
+ "other_a", "val_a"),
+ ("other_b", "val"
+ )
+ ]
+ ]
+ results = [cmp_samples(val[0], val[1]) for val in sampleA]
+ resultB = [cmp_samples(val[0], val[1]) for val in sampleB]
+ resultC = [cmp_samples(val[0], val[1]) for val in sampleC]
+
+ self.assertEqual(1, *results)
+ self.assertEqual(-1, *resultB)
+ self.assertEqual([1, -1, 1, -1, -1, 1, -1, -1], resultC)
diff --git a/wqflask/tests/unit/wqflask/snp_browser/__init__.py b/wqflask/tests/unit/wqflask/snp_browser/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/snp_browser/__init__.py
diff --git a/wqflask/tests/unit/wqflask/snp_browser/test_snp_browser.py b/wqflask/tests/unit/wqflask/snp_browser/test_snp_browser.py
new file mode 100644
index 00000000..ce3e7b83
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/snp_browser/test_snp_browser.py
@@ -0,0 +1,105 @@
+import unittest
+from unittest import mock
+from wqflask import app
+from wqflask.snp_browser.snp_browser import get_gene_id
+from wqflask.snp_browser.snp_browser import get_gene_id_name_dict
+from wqflask.snp_browser.snp_browser import check_if_in_gene
+from wqflask.snp_browser.snp_browser import get_browser_sample_lists
+from wqflask.snp_browser.snp_browser import get_header_list
+
+
+class TestSnpBrowser(unittest.TestCase):
+ def setUp(self):
+ self.app_context = app.app_context()
+ self.app_context.push()
+
+ def tearDown(self):
+ self.app_context.pop()
+
+ def test_get_header_list(self):
+ empty_columns = {"snp_source": "false", "conservation_score": "true", "gene_name": "false",
+ "transcript": "false", "exon": "false", "domain_2": "true", "function": "false", "function_details": "true"}
+ strains = {"mouse": ["S1", "S2", "S3", "S4", "S5"], "rat": []}
+ expected_results = ([['Index', 'SNP ID', 'Chr', 'Mb', 'Alleles', 'ConScore',
+ 'Domain 1', 'Domain 2', 'Details'],
+ ['S1', 'S2', 'S3', 'S4', 'S5']], 5,
+ ['index', 'snp_name', 'chr', 'mb_formatted', 'alleles',
+ 'conservation_score', 'domain_1', 'domain_2',
+ 'function_details', 'S1', 'S2', 'S3', 'S4', 'S5'])
+
+ results_with_snp = get_header_list(
+ variant_type="SNP", strains=strains, species="Mouse", empty_columns=empty_columns)
+ results_with_indel = get_header_list(
+ variant_type="InDel", strains=strains, species="rat", empty_columns=[])
+ expected_results_with_indel = (
+ ['Index', 'ID', 'Type', 'InDel Chr', 'Mb Start',
+ 'Mb End', 'Strand', 'Size', 'Sequence', 'Source'], 0,
+ ['index', 'indel_name', 'indel_type', 'indel_chr', 'indel_mb_s',
+ 'indel_mb_e', 'indel_strand', 'indel_size', 'indel_sequence', 'source_name'])
+
+ self.assertEqual(expected_results, results_with_snp)
+ self.assertEqual(expected_results_with_indel, results_with_indel)
+
+ @mock.patch("wqflask.snp_browser.snp_browser.g")
+ def test_get_gene_id(self, mock_db):
+ mock_db.db.execute.return_value.fetchone.return_value = "517d729f-aa13-4413-a885-40a3f7ff768a"
+ db_query_value = """
+ SELECT
+ geneId
+ FROM
+ GeneList
+ WHERE
+ SpeciesId = c9c0f59e-1259-4cba-91e6-831ef1a99c83 AND geneSymbol = 'INSR'
+ """
+ results = get_gene_id(
+ species_id="c9c0f59e-1259-4cba-91e6-831ef1a99c83", gene_name="INSR")
+ mock_db.db.execute.assert_called_once_with(db_query_value)
+ self.assertEqual(results, "517d729f-aa13-4413-a885-40a3f7ff768a")
+
+ @mock.patch("wqflask.snp_browser.snp_browser.g")
+ def test_gene_id_name_dict(self, mock_db):
+ no_gene_names = []
+ self.assertEqual("", get_gene_id_name_dict(
+ species_id="fregb343bui43g4", gene_name_list=no_gene_names))
+ gene_name_list = ["GH1", "GH2", "GH3"]
+ mock_db.db.execute.return_value.fetchall.side_effect = [[], [("fsdf43-fseferger-f22", "GH1"), ("1sdf43-fsewferger-f22", "GH2"),
+ ("fwdj43-fstferger-f22", "GH3")]]
+ no_results = get_gene_id_name_dict(
+ species_id="ret3-32rf32", gene_name_list=gene_name_list)
+ results_found = get_gene_id_name_dict(
+ species_id="ret3-32rf32", gene_name_list=gene_name_list)
+ expected_found = {'GH1': 'fsdf43-fseferger-f22',
+ 'GH2': '1sdf43-fsewferger-f22', 'GH3': 'fwdj43-fstferger-f22'}
+ db_query_value = """
+ SELECT
+ geneId, geneSymbol
+ FROM
+ GeneList
+ WHERE
+ SpeciesId = ret3-32rf32 AND geneSymbol in ('GH1','GH2','GH3')
+ """
+ mock_db.db.execute.assert_called_with(db_query_value)
+ self.assertEqual(results_found, expected_found)
+ self.assertEqual(no_results, {})
+
+ @mock.patch("wqflask.snp_browser.snp_browser.g")
+ def test_check_if_in_gene(self, mock_db):
+ mock_db.db.execute.return_value.fetchone.side_effect = [
+ ("fsdf-232sdf-sdf", "GHA"), ""]
+ results_found = check_if_in_gene(
+ species_id="517d729f-aa13-4413-a885-40a3f7ff768a", chr="CH1", mb=12.09)
+ db_query_value = """SELECT geneId, geneSymbol
+ FROM GeneList
+ WHERE SpeciesId = 517d729f-aa13-4413-a885-40a3f7ff768a AND chromosome = 'CH1' AND
+ (txStart < 12.09 AND txEnd > 12.09); """
+ gene_not_found = check_if_in_gene(
+ species_id="517d729f-aa13-4413-a885-40a3f7ff768a", chr="CH1", mb=12.09)
+ mock_db.db.execute.assert_called_with(db_query_value)
+ self.assertEqual(gene_not_found, "")
+
+ @mock.patch("wqflask.snp_browser.snp_browser.g")
+ def test_get_browser_sample_lists(self, mock_db):
+ mock_db.db.execute.return_value.fetchall.return_value = []
+
+ results = get_browser_sample_lists(species_id="12")
+ self.assertEqual(results, {'mouse': [], 'rat': []})
diff --git a/wqflask/tests/unit/wqflask/test_collect.py b/wqflask/tests/unit/wqflask/test_collect.py
new file mode 100644
index 00000000..9a36132d
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/test_collect.py
@@ -0,0 +1,73 @@
+"""Test cases for some methods in collect.py"""
+
+import unittest
+from unittest import mock
+
+from flask import Flask
+from wqflask.collect import process_traits
+
+app = Flask(__name__)
+
+
+class MockSession:
+ """Helper class for mocking wqflask.collect.g.user_session.logged_in"""
+ def __init__(self, is_logged_in=False):
+ self.is_logged_in = is_logged_in
+
+ @property
+ def logged_in(self):
+ return self.is_logged_in
+
+
+class MockFlaskG:
+ """Helper class for mocking wqflask.collect.g.user_session"""
+ def __init__(self, is_logged_in=False):
+ self.is_logged_in = is_logged_in
+
+ @property
+ def user_session(self):
+ if self.is_logged_in:
+ return MockSession(is_logged_in=True)
+ return MockSession()
+
+
+class TestCollect(unittest.TestCase):
+
+ def setUp(self):
+ self.app_context = app.app_context()
+ self.app_context.push()
+
+ def tearDown(self):
+ self.app_context.pop()
+
+ @mock.patch("wqflask.collect.g", MockFlaskG())
+ def test_process_traits_with_bytestring(self):
+ """
+ Test that the correct traits are returned when the user is logged
+ out and bytes are used.
+ """
+ self.assertEqual(process_traits(
+ b'1452452_at:HC_M2_0606_P:163d04f7db7c9e110de6,'
+ b'1452447_at:HC_M2_0606_P:eeece8fceb67072debea,'
+ b'1451401_a_at:HC_M2_0606_P:a043d23b3b3906d8318e,'
+ b'1429252_at:HC_M2_0606_P:6fa378b349bc9180e8f5'),
+ set(['1429252_at:HC_M2_0606_P',
+ '1451401_a_at:HC_M2_0606_P',
+ '1452447_at:HC_M2_0606_P',
+ '1452452_at:HC_M2_0606_P']))
+
+ @mock.patch("wqflask.collect.g", MockFlaskG())
+ def test_process_traits_with_normal_string(self):
+ """
+ Test that the correct traits are returned when the user is logged
+ out and a normal string is used.
+ """
+ self.assertEqual(process_traits(
+ '1452452_at:HC_M2_0606_P:163d04f7db7c9e110de6,'
+ '1452447_at:HC_M2_0606_P:eeece8fceb67072debea,'
+ '1451401_a_at:HC_M2_0606_P:a043d23b3b3906d8318e,'
+ '1429252_at:HC_M2_0606_P:6fa378b349bc9180e8f5'),
+ set(['1429252_at:HC_M2_0606_P',
+ '1451401_a_at:HC_M2_0606_P',
+ '1452447_at:HC_M2_0606_P',
+ '1452452_at:HC_M2_0606_P']))
diff --git a/wqflask/tests/unit/wqflask/test_markdown_routes.py b/wqflask/tests/unit/wqflask/test_markdown_routes.py
new file mode 100644
index 00000000..90e0f17c
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/test_markdown_routes.py
@@ -0,0 +1,54 @@
+"""Test functions in markdown utils"""
+
+import unittest
+from unittest import mock
+
+from dataclasses import dataclass
+from wqflask.markdown_routes import render_markdown
+
+
+@dataclass
+class MockRequests404:
+ status_code: int = 404
+
+
+@dataclass
+class MockRequests200:
+ status_code: int = 200
+ content: str = b"""
+# Glossary
+This is some content
+
+## Sub-heading
+This is another sub-heading"""
+
+
+class TestMarkdownRoutesFunctions(unittest.TestCase):
+ """Test cases for functions in markdown_routes"""
+
+ @mock.patch('wqflask.markdown_routes.requests.get')
+ def test_render_markdown_when_fetching_locally(self, requests_mock):
+ requests_mock.return_value = MockRequests404()
+ markdown_content = render_markdown("general/glossary/glossary.md")
+ requests_mock.assert_called_with(
+ "https://raw.githubusercontent.com"
+ "/genenetwork/gn-docs/"
+ "master/general/"
+ "glossary/glossary.md")
+ self.assertRegexpMatches(markdown_content,
+ "Content for general/glossary/glossary.md not available.")
+
+ @mock.patch('wqflask.markdown_routes.requests.get')
+ def test_render_markdown_when_fetching_remotely(self, requests_mock):
+ requests_mock.return_value = MockRequests200()
+ markdown_content = render_markdown("general/glossary/glossary.md")
+ requests_mock.assert_called_with(
+ "https://raw.githubusercontent.com"
+ "/genenetwork/gn-docs/"
+ "master/general/"
+ "glossary/glossary.md")
+ self.assertEqual("""<h1>Glossary</h1>
+<p>This is some content</p>
+<h2>Sub-heading</h2>
+<p>This is another sub-heading</p>""",
+ markdown_content)
diff --git a/wqflask/tests/unit/wqflask/test_pbkdf2.py b/wqflask/tests/unit/wqflask/test_pbkdf2.py
new file mode 100644
index 00000000..7ad6c83e
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/test_pbkdf2.py
@@ -0,0 +1,61 @@
+"""Test cases pbkdf2"""
+
+import unittest
+from wqflask.pbkdf2 import pbkdf2_hex
+
+
+class TestPbkdf2(unittest.TestCase):
+ def test_pbkdf2_hex(self):
+ """
+ Test pbkdf2_hex function
+ """
+
+ for password, salt, iterations, keylen, expected_value in [
+ ('password', b'salt', 1, 20,
+ '0c60c80f961f0e71f3a9b524af6012062fe037a6'),
+ ('password', b'salt', 2, 20,
+ 'ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957'),
+ ('password', b'salt', 4096, 20,
+ '4b007901b765489abead49d926f721d065a429c1'),
+ ('passwordPASSWORDpassword',
+ b'saltSALTsaltSALTsaltSALTsaltSALTsalt',
+ 4096, 25,
+ '3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038'),
+ ('pass\x00word', b'sa\x00lt', 4096, 16,
+ '56fa6aa75548099dcc37d7f03425e0c3'),
+ ('password', b'ATHENA.MIT.EDUraeburn', 1, 16,
+ 'cdedb5281bb2f801565a1122b2563515'),
+ ('password', b'ATHENA.MIT.EDUraeburn', 1, 32,
+ ('cdedb5281bb2f80'
+ '1565a1122b256351'
+ '50ad1f7a04bb9f3a33'
+ '3ecc0e2e1f70837')),
+ ('password', b'ATHENA.MIT.EDUraeburn', 2, 16,
+ '01dbee7f4a9e243e988b62c73cda935d'),
+ ('password', b'ATHENA.MIT.EDUraeburn', 2, 32,
+ ('01dbee7f4a9e243e9'
+ '88b62c73cda935da05'
+ '378b93244ec8f48a99'
+ 'e61ad799d86')),
+ ('password', b'ATHENA.MIT.EDUraeburn', 1200, 32,
+ ('5c08eb61fdf71e'
+ '4e4ec3cf6ba1f55'
+ '12ba7e52ddbc5e51'
+ '42f708a31e2e62b1e13')),
+ ('X' * 64, b'pass phrase equals block size', 1200, 32,
+ ('139c30c0966bc32ba'
+ '55fdbf212530ac9c5'
+ 'ec59f1a452f5cc9ad'
+ '940fea0598ed1')),
+ ('X' * 65, b'pass phrase exceeds block size', 1200, 32,
+ ('9ccad6d468770cd'
+ '51b10e6a68721be6'
+ '11a8b4d282601db3'
+ 'b36be9246915ec82a'))
+ ]:
+ self.assertEqual(
+ pbkdf2_hex(data=password,
+ salt=salt,
+ iterations=iterations,
+ keylen=keylen),
+ expected_value)
diff --git a/wqflask/tests/unit/wqflask/test_server_side.py b/wqflask/tests/unit/wqflask/test_server_side.py
new file mode 100644
index 00000000..4f91d8ca
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/test_server_side.py
@@ -0,0 +1,31 @@
+import unittest
+
+from wqflask.server_side import ServerSideTable
+
+
+class TestServerSideTableTests(unittest.TestCase):
+ """
+ Test the ServerSideTable class
+
+ test table:
+ first, second, third
+ 'd', 4, 'zz'
+ 'b', 2, 'aa'
+ 'c', 1, 'ss'
+ """
+
+ def test_get_page(self):
+ rows_count = 3
+ table_rows = [
+ {'first': 'd', 'second': 4, 'third': 'zz'},
+ {'first': 'b', 'second': 2, 'third': 'aa'},
+ {'first': 'c', 'second': 1, 'third': 'ss'},
+ ]
+ headers = ['first', 'second', 'third']
+ request_args = {'sEcho': '1', 'iSortCol_0': '1', 'iSortingCols': '1', 'sSortDir_0': 'asc', 'iDisplayStart': '0', 'iDisplayLength': '3'}
+
+ test_page = ServerSideTable(rows_count, table_rows, headers, request_args).get_page()
+ self.assertEqual(test_page['sEcho'], '1')
+ self.assertEqual(test_page['iTotalRecords'], 'nan')
+ self.assertEqual(test_page['iTotalDisplayRecords'], '3')
+ self.assertEqual(test_page['data'], [{'first': 'b', 'second': 2, 'third': 'aa'}, {'first': 'c', 'second': 1, 'third': 'ss'}, {'first': 'd', 'second': 4, 'third': 'zz'}])
diff --git a/wqflask/tests/unit/wqflask/test_user_login.py b/wqflask/tests/unit/wqflask/test_user_login.py
new file mode 100644
index 00000000..61cd9ab9
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/test_user_login.py
@@ -0,0 +1,21 @@
+"""Test cases for some methods in login.py"""
+
+import unittest
+from wqflask.user_login import encode_password
+
+
+class TestUserLogin(unittest.TestCase):
+ def test_encode_password(self):
+ """
+ Test encode password
+ """
+ pass_gen_fields = {
+ "salt": "salt",
+ "hashfunc": "sha1",
+ "iterations": 4096,
+ "keylength": 20,
+ }
+ self.assertEqual(
+ encode_password(pass_gen_fields,
+ "password").get("password"),
+ '4b007901b765489abead49d926f721d065a429c1')
diff --git a/wqflask/tests/unit/wqflask/test_user_session.py b/wqflask/tests/unit/wqflask/test_user_session.py
new file mode 100644
index 00000000..ebb0334a
--- /dev/null
+++ b/wqflask/tests/unit/wqflask/test_user_session.py
@@ -0,0 +1,15 @@
+"""Test cases for some methods in user_session.py"""
+
+import unittest
+from wqflask.user_session import verify_cookie
+
+
+class TestUserSession(unittest.TestCase):
+ def test_verify_cookie(self):
+ """
+ Test cookie verification
+ """
+ self.assertEqual(
+ "3f4c1dbf-5b56-4260-87d6-f35445bda37e",
+ verify_cookie(("3f4c1dbf-5b56-4260-87d6-"
+ "f35445bda37e:af4fcf5eace9e7c864ce")))
diff --git a/wqflask/tests/wqflask/show_trait/testSampleList.py b/wqflask/tests/wqflask/show_trait/testSampleList.py
new file mode 100644
index 00000000..34c51e3e
--- /dev/null
+++ b/wqflask/tests/wqflask/show_trait/testSampleList.py
@@ -0,0 +1,16 @@
+import unittest
+import re
+from unittest import mock
+from wqflask.show_trait.SampleList import natural_sort
+
+
+class TestSampleList(unittest.TestCase):
+ def test_natural_sort(self):
+ "Sort the list into natural alphanumeric order."
+
+ characters_list = ["z", "f", "q", "s", "t", "a", "g"]
+ names_list = ["temp1", "publish", "Sample", "Dataset"]
+ sorted_list_a=natural_sort(characters_list)
+ sorted_list_b=natural_sort(names_list)
+ self.assertEqual(sorted_list_a, ["a", "f", "g", "q", "s", "t", "z"])
+ self.assertEqual(sorted_list_b,["Dataset", "Sample", "publish", "temp1"])
diff --git a/wqflask/tests/wqflask/show_trait/test_show_trait.py b/wqflask/tests/wqflask/show_trait/test_show_trait.py
new file mode 100644
index 00000000..8c866874
--- /dev/null
+++ b/wqflask/tests/wqflask/show_trait/test_show_trait.py
@@ -0,0 +1,278 @@
+"""test for wqflask/show_trait/test_show_trait.py"""
+import unittest
+from unittest import mock
+from wqflask import app
+from wqflask.show_trait.show_trait import check_if_attr_exists
+from wqflask.show_trait.show_trait import get_ncbi_summary
+from wqflask.show_trait.show_trait import has_num_cases
+from wqflask.show_trait.show_trait import get_table_widths
+from wqflask.show_trait.show_trait import get_categorical_variables
+from wqflask.show_trait.show_trait import get_trait_units
+from wqflask.show_trait.show_trait import get_nearest_marker
+from wqflask.show_trait.show_trait import get_genotype_scales
+from wqflask.show_trait.show_trait import requests
+from wqflask.show_trait.show_trait import get_scales_from_genofile
+
+
+class TraitObject:
+ def __init__(self, obj):
+ for key, value in obj.items():
+ setattr(self, key, value)
+
+
+class TestTraits(unittest.TestCase):
+ def setUp(self):
+ self.app_context = app.app_context()
+ self.app_context.push()
+
+ def tearDown(self):
+ self.app_context.pop()
+
+ def test_check_if_attr_exists_truthy(self):
+ """"test if attributes exists with true return"""
+ trait_obj = TraitObject({"id_type": "id"})
+ trait_obj2 = TraitObject({"sample_name": ['samp1']})
+ results = check_if_attr_exists(trait_obj, "id_type")
+ result2 = check_if_attr_exists(trait_obj2, "sample_name")
+ self.assertIsInstance(trait_obj, TraitObject)
+ self.assertTrue(results)
+ self.assertTrue(result2)
+
+ def test_check_if_attr_exists_empty_attr(self):
+ """test if attributes exists with false return"""
+ trait_obj = TraitObject({"sample": ""})
+ trait_obj2 = TraitObject({"group": None})
+ result = check_if_attr_exists(trait_obj, "sample")
+ result2 = check_if_attr_exists(trait_obj, "group")
+ self.assertFalse(result)
+ self.assertFalse(result2)
+
+ def test_check_if_attr_exists_falsey(self):
+ """check if attribute exists with empty attributes"""
+ trait_obj = TraitObject({})
+ results = check_if_attr_exists(trait_obj, "any")
+ self.assertFalse(results)
+
+ @mock.patch("wqflask.show_trait.show_trait.requests.get")
+ @mock.patch("wqflask.show_trait.show_trait.check_if_attr_exists")
+ def test_get_ncbi_summary_request_success(self, mock_exists, mock_get):
+ """test for getting ncbi summary with
+ successful request"""
+ trait = TraitObject({"geneid": "id"})
+ mock_exists.return_value = True
+ content_json_string = """{
+ "result":{
+ "id":{
+ "summary":"this is a summary of the geneid"
+ }
+ }
+ }
+ """
+ get_return_obj = TraitObject({"content": content_json_string})
+ mock_get.return_value = get_return_obj
+ results = get_ncbi_summary(trait)
+ mock_exists.assert_called_once()
+ mock_get.assert_called_once_with(f"http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=gene&id={trait.geneid}&retmode=json")
+
+ self.assertEqual(results, "this is a summary of the geneid")
+
+ @mock.patch("wqflask.show_trait.show_trait.requests.get")
+ @mock.patch("wqflask.show_trait.show_trait.check_if_attr_exists")
+ def test_get_ncbi_summary_request_fail(self, mock_exists, mock_get_fail):
+ """test for getting ncbi summary with request fail"""
+ trait = TraitObject({"geneid": "id"})
+ mock_exists.return_value = True
+ mock_get_fail.side_effect = Exception("an error occurred")
+ content_json_string = """{
+ "result":{
+ "id":{
+ "summary":"this is a summary of the geneid"
+ }
+ }
+ }
+ """
+ results = get_ncbi_summary(trait)
+ self.assertEqual(results, None)
+
+ def test_hash_num_cases_is_probeset(self):
+ """test for hash num_cases with dataset.type set to Probeset"""
+ create_dataset = TraitObject({"type": "ProbeSet"})
+ create_trait = TraitObject({"dataset": create_dataset})
+ self.assertFalse(has_num_cases(create_trait))
+
+ def test_hash_num_cases_no_probeset(self):
+ """test for hash num cases with dataset.type not Probeset"""
+ create_dataset = TraitObject({"type": "Temp"})
+ construct_data = {
+ "nm1": TraitObject({"num_cases": False}),
+ "nm2": TraitObject({"num_cases": True}),
+ "nm3": TraitObject({"num_cases": False})
+ }
+ construct_data2 = {
+ "nm1": TraitObject({"num_cases": False}),
+ "nm2": TraitObject({"num_cases": False}),
+ "nm3": TraitObject({"num_cases": False})
+ }
+ create_trait = TraitObject(
+ {"dataset": create_dataset, "data": construct_data})
+ create_trait2 = TraitObject(
+ {"dataset": create_dataset, "data": construct_data2})
+
+ results = has_num_cases(create_trait)
+ self.assertTrue(has_num_cases(create_trait))
+ self.assertFalse(has_num_cases(create_trait2))
+
+ def test_get_table_widths(self):
+ """test for getting table widths"""
+ sample_groups = [TraitObject({'se_exists': True, "attributes": ["attr1", "attr2", "attr3"]}
+ ), TraitObject(
+ {"se_exists": False, "attributes": ["at1", "at2"]
+ })]
+
+ results_with_numcase = get_table_widths(sample_groups, True)
+ result_no_numcase = get_table_widths(sample_groups, False)
+
+ results_one_sample = get_table_widths(
+ [TraitObject({"se_exists": True, "attributes": []})], True)
+ expected_with_numcase = (450, "750px")
+ expected_no_numcase = (450, "670px")
+ expected_one_sample = (250, "540px")
+ self.assertEqual(results_with_numcase, expected_with_numcase)
+ self.assertEqual(result_no_numcase, expected_no_numcase)
+ self.assertEqual(results_one_sample,
+ expected_one_sample)
+
+ def test_get_categorical_variables_no_sample_attributes(self):
+ """test for getting categorical variable names with no samples"""
+ trait = TraitObject({})
+ sample_list = TraitObject({"se_exists": True, "attributes": []})
+ self.assertEqual(get_categorical_variables(trait, sample_list), [])
+
+ def test_get_categorical_variables_with_sample_attributes(self):
+ """test for getting categorical variable names with no samples"""
+ this_trait = TraitObject({"data": {
+ "Gene1": TraitObject({"extra_attributes": {"ex1": "ex1value"}}),
+ "Gene2": TraitObject({"extra_attributes": {"ex2": "ex2value"}}),
+ "Gene3": TraitObject({"extra_attributes": {"ex3": "ex3value"}})
+ }})
+ sample_list = TraitObject({"attributes": {
+ "sample_attribute_1": TraitObject({"name": "ex1"}),
+ "sample_attribute_2": TraitObject({"name": "ex2"}),
+ "sample_attribute_3": TraitObject({"name": "ex3"}),
+ "sample_attribute_4": TraitObject({"name": "not_in_extra_attributes"})
+ }})
+ results = get_categorical_variables(this_trait, sample_list)
+ self.assertEqual(
+ ["ex1", "ex2", "ex3", "not_in_extra_attributes"], results)
+
+ def test_get_trait_units(self):
+ """test for getting trait units"""
+ trait = TraitObject(
+ {"description_fmt": "[this is a description] another test [N/A]"})
+ trait_no_unit_type = TraitObject({"description_fmt": ""})
+ results = get_trait_units(trait)
+ results_no_unit = get_trait_units(trait_no_unit_type)
+ self.assertEqual(results, "this is a descriptionN/A")
+ self.assertEqual(results_no_unit, "Value")
+
+ @mock.patch("wqflask.show_trait.show_trait.g")
+ def test_get_nearest_marker(self, mock_db):
+ """test for getting nearest marker with non-empty db"""
+
+ mock_db.db.execute.return_value.fetchall.return_value = [
+ ["Geno1", "Geno2"], ["Geno3"]]
+
+ trait = TraitObject({"locus_chr": "test_chr", "locus_mb": "test_mb"})
+ group_name = TraitObject({"name": "group_name"})
+ this_db = TraitObject({"group": group_name})
+ results_with_item_db = get_nearest_marker(trait, this_db)
+ called_with_value = """SELECT Geno.Name
+ FROM Geno, GenoXRef, GenoFreeze
+ WHERE Geno.Chr = 'test_chr' AND
+ GenoXRef.GenoId = Geno.Id AND
+ GenoFreeze.Id = GenoXRef.GenoFreezeId AND
+ GenoFreeze.Name = 'group_nameGeno'
+ ORDER BY ABS( Geno.Mb - test_mb) LIMIT 1"""
+
+ mock_db.db.execute.assert_called_with(called_with_value)
+
+ self.assertEqual(results_with_item_db, "Geno1")
+
+ @mock.patch("wqflask.show_trait.show_trait.g")
+ def test_get_nearest_marker_empty_db(self, mock_db):
+ """test for getting nearest marker with empty db"""
+ mock_db.db.execute.return_value.fetchall.return_value = []
+ trait = TraitObject({"locus_chr": "test_chr", "locus_mb": "test_mb"})
+ group_name = TraitObject({"name": "group_name"})
+ this_db = TraitObject({"group": group_name})
+ results_empty_db = get_nearest_marker(trait, this_db)
+ mock_db.db.execute.assert_called_once()
+ self.assertEqual(results_empty_db, "")
+
+ @mock.patch("wqflask.show_trait.show_trait.get_scales_from_genofile")
+ def test_get_genotype_scales_with_genofile_is_list(self, mock_get_scales):
+ """test for getting genotype scales with genofile as list """
+ # where genofile is instance of list
+ genofiles_list = [{"filename": "file1", "location": "~/data/files/f1"},
+ {"filename": "file2", "location": "~/data/files/f2"},
+ {"filename": "file3", "location": "~/data/files/f3"}]
+
+ mock_get_scales.side_effect = [[["morgan", "cM"]],
+ [["morgan", "cM"]],
+ [["physic", "Mb"]]]
+
+ results = get_genotype_scales(genofiles_list)
+ expected_results = {
+ "~/data/files/f1": [["morgan", "cM"]],
+ "~/data/files/f2": [["morgan", "cM"]],
+ "~/data/files/f3": [["physic", "Mb"]]
+ }
+
+ multiple_calls = [mock.call('~/data/files/f1'), mock.call('~/data/files/f2'),
+ mock.call('~/data/files/f3')]
+ mock_get_scales.assert_has_calls(multiple_calls)
+ self.assertEqual(results, expected_results)
+
+ @mock.patch("wqflask.show_trait.show_trait.get_scales_from_genofile")
+ def test_genotype_scales_with_genofile_other(self, mock_get_scales):
+ """test for getting genotype scales with genofile as a string"""
+ file_location = "~/another_file_location"
+ mock_get_scales.return_value = [["physic", "Mb"]]
+ expected_results = {f"{file_location}": [["physic", "Mb"]]}
+ self.assertEqual(get_genotype_scales(file_location), expected_results)
+ mock_get_scales.assert_called_once_with(file_location)
+
+
+ @mock.patch("wqflask.show_trait.show_trait.locate_ignore_error")
+ def test_get_scales_from_genofile_found(self, mock_ignore_location):
+ """"add test for get scales from genofile where file is found"""
+ mock_ignore_location.return_value = True
+ geno_file = """
+ #sample line with no @scales:other\n
+ #sample line @scales and :separated by semicolon\n
+ This attempts to check whether\n
+ """
+
+ geno_file_string = "@line start with @ and has @scale:morgan"
+
+ file_location = "~/data/file.geno"
+
+ mock_open_geno_file = mock.mock_open(read_data=geno_file)
+ with mock.patch("builtins.open", mock_open_geno_file):
+ results = get_scales_from_genofile(file_location)
+ self.assertEqual(results, [["morgan", "cM"]])
+
+ mock_open_string = mock.mock_open(read_data=geno_file_string)
+
+ with mock.patch("builtins.open", mock_open_string):
+ result2 = get_scales_from_genofile(file_location)
+ self.assertEqual([['morgan', 'cM']], result2)
+
+ @mock.patch("wqflask.show_trait.show_trait.locate_ignore_error")
+ def test_get_scales_from_genofile_not_found(self, mock_location_ignore):
+ mock_location_ignore.return_value = False
+
+ expected_results = [["physic", "Mb"]]
+ results = get_scales_from_genofile("~/data/file")
+ mock_location_ignore.assert_called_once_with("~/data/file", "genotype")
+ self.assertEqual(results, expected_results)
diff --git a/wqflask/utility/Plot.py b/wqflask/utility/Plot.py
index cce8435d..61f408d2 100644
--- a/wqflask/utility/Plot.py
+++ b/wqflask/utility/Plot.py
@@ -24,32 +24,35 @@
#
# Last updated by GeneNetwork Core Team 2010/10/20
-from __future__ import print_function
-
-import piddle as pid
-from pprint import pformat as pf
+from PIL import ImageColor
+from PIL import ImageDraw
+from PIL import ImageFont
from math import *
-import random
-import sys, os
-from numarray import linear_algebra as la
-from numarray import ones, array, dot, swapaxes
-
-import reaper
-import webqtlUtil
-import corestats
+import utility.corestats as corestats
from base import webqtlConfig
-
+from utility.pillow_utils import draw_rotated_text
import utility.logger
logger = utility.logger.getLogger(__name__ )
+# ---- Define common colours ---- #
+BLUE = ImageColor.getrgb("blue")
+BLACK = ImageColor.getrgb("black")
+# ---- END: Define common colours ---- #
+
+# ---- FONT FILES ---- #
+VERDANA_FILE = "./wqflask/static/fonts/verdana.ttf"
+COUR_FILE = "./wqflask/static/fonts/courbd.ttf"
+TAHOMA_FILE = "./wqflask/static/fonts/tahoma.ttf"
+# ---- END: FONT FILES ---- #
+
def cformat(d, rank=0):
'custom string format'
strD = "%2.6f" % d
if rank == 0:
- while strD[-1] in ('0','.'):
+ while strD[-1] in ('0', '.'):
if strD[-1] == '0' and strD[-2] == '.' and len(strD) <= 4:
break
elif strD[-1] == '.':
@@ -77,7 +80,7 @@ def frange(start, end=None, inc=1.0):
# Need to adjust the count. AFAICT, it always comes up one short.
count += 1
L = [start] * count
- for i in xrange(1, count):
+ for i in range(1, count):
L[i] = start + i * inc
return L
@@ -88,7 +91,7 @@ def find_outliers(vals):
>>> find_outliers([3.504, 5.234, 6.123, 7.234, 3.542, 5.341, 7.852, 4.555, 12.537])
(11.252500000000001, 0.5364999999999993)
- >>> >>> find_outliers([9,12,15,17,31,50,7,5,6,8])
+ >>> find_outliers([9,12,15,17,31,50,7,5,6,8])
(32.0, -8.0)
If there are no vals, returns None for the upper and lower bounds,
@@ -116,7 +119,8 @@ def find_outliers(vals):
# parameter: data is either object returned by reaper permutation function (called by MarkerRegressionPage.py)
# or the first object returned by direct (pair-scan) permu function (called by DirectPlotPage.py)
-def plotBar(canvas, data, barColor=pid.blue, axesColor=pid.black, labelColor=pid.black, XLabel=None, YLabel=None, title=None, offset= (60, 20, 40, 40), zoom = 1):
+def plotBar(canvas, data, barColor=BLUE, axesColor=BLACK, labelColor=BLACK, XLabel=None, YLabel=None, title=None, offset= (60, 20, 40, 40), zoom = 1):
+ im_drawer = ImageDraw.Draw(canvas)
xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
@@ -152,7 +156,7 @@ def plotBar(canvas, data, barColor=pid.blue, axesColor=pid.black, labelColor=pid
j = int((item-xLow)/step)
Count[j] += 1
- yLow, yTop, stepY=detScale(0,max(Count))
+ yLow, yTop, stepY=detScale(0, max(Count))
#draw data
xScale = plotWidth/(xTop-xLow)
@@ -163,67 +167,91 @@ def plotBar(canvas, data, barColor=pid.blue, axesColor=pid.black, labelColor=pid
if count:
xc = (dataXY[i]-xLow)*xScale+xLeftOffset
yc =-(count-yLow)*yScale+yTopOffset+plotHeight
- canvas.drawRect(xc+2,yc,xc+barWidth-2,yTopOffset+plotHeight,edgeColor=barColor,fillColor=barColor)
+ im_drawer.rectangle(
+ xy=((xc+2, yc), (xc+barWidth-2, yTopOffset+plotHeight)),
+ outline=barColor, fill=barColor)
#draw drawing region
- canvas.drawRect(xLeftOffset, yTopOffset, xLeftOffset+plotWidth, yTopOffset+plotHeight)
+ im_drawer.rectangle(
+ xy=((xLeftOffset, yTopOffset), (xLeftOffset+plotWidth, yTopOffset+plotHeight))
+ )
#draw scale
- scaleFont=pid.Font(ttf="cour",size=11,bold=1)
+ scaleFont=ImageFont.truetype(font=COUR_FILE, size=11)
x=xLow
for i in range(int(stepX)+1):
xc=xLeftOffset+(x-xLow)*xScale
- canvas.drawLine(xc,yTopOffset+plotHeight,xc,yTopOffset+plotHeight+5, color=axesColor)
+ im_drawer.line(
+ xy=((xc, yTopOffset+plotHeight), (xc, yTopOffset+plotHeight+5)),
+ fill=axesColor)
strX = cformat(d=x, rank=0)
- canvas.drawString(strX,xc-canvas.stringWidth(strX,font=scaleFont)/2,yTopOffset+plotHeight+14,font=scaleFont)
+ im_drawer.text(
+ text=strX,
+ xy=(xc-im_drawer.textsize(strX, font=scaleFont)[0]/2,
+ yTopOffset+plotHeight+14), font=scaleFont)
x+= (xTop - xLow)/stepX
y=yLow
for i in range(int(stepY)+1):
yc=yTopOffset+plotHeight-(y-yLow)*yScale
- canvas.drawLine(xLeftOffset,yc,xLeftOffset-5,yc, color=axesColor)
+ im_drawer.line(xy=((xLeftOffset, yc), (xLeftOffset-5, yc)), fill=axesColor)
strY = "%d" %y
- canvas.drawString(strY,xLeftOffset-canvas.stringWidth(strY,font=scaleFont)-6,yc+5,font=scaleFont)
+ im_drawer.text(
+ text=strY,
+ xy=(xLeftOffset-im_drawer.textsize(strY, font=scaleFont)[0]-6, yc+5),
+ font=scaleFont)
y+= (yTop - yLow)/stepY
#draw label
- labelFont=pid.Font(ttf="tahoma",size=17,bold=0)
+ labelFont=ImageFont.truetype(font=TAHOMA_FILE, size=17)
if XLabel:
- canvas.drawString(XLabel,xLeftOffset+(plotWidth-canvas.stringWidth(XLabel,font=labelFont))/2.0,
- yTopOffset+plotHeight+yBottomOffset-10,font=labelFont,color=labelColor)
+ im_drawer.text(
+ text=XLabel,
+ xy=(xLeftOffset+(
+ plotWidth-im_drawer.textsize(XLabel, font=labelFont)[0])/2.0,
+ yTopOffset+plotHeight+yBottomOffset-10),
+ font=labelFont, fill=labelColor)
if YLabel:
- canvas.drawString(YLabel, 19, yTopOffset+plotHeight-(plotHeight-canvas.stringWidth(YLabel,font=labelFont))/2.0,
- font=labelFont,color=labelColor,angle=90)
-
- labelFont=pid.Font(ttf="verdana",size=16,bold=0)
+ draw_rotated_text(canvas, text=YLabel,
+ xy=(19,
+ yTopOffset+plotHeight-(
+ plotHeight-im_drawer.textsize(
+ YLabel, font=labelFont)[0])/2.0),
+ font=labelFont, fill=labelColor, angle=90)
+
+ labelFont=ImageFont.truetype(font=VERDANA_FILE, size=16)
if title:
- canvas.drawString(title,xLeftOffset+(plotWidth-canvas.stringWidth(title,font=labelFont))/2.0,
- 20,font=labelFont,color=labelColor)
+ im_drawer.text(
+ text=title,
+ xy=(xLeftOffset+(plotWidth-im_drawer.textsize(
+ title, font=labelFont)[0])/2.0,
+ 20),
+ font=labelFont, fill=labelColor)
# This function determines the scale of the plot
-def detScaleOld(min,max):
+def detScaleOld(min, max):
if min>=max:
return None
elif min == -1.0 and max == 1.0:
- return [-1.2,1.2,12]
+ return [-1.2, 1.2, 12]
else:
a=max-min
b=floor(log10(a))
- c=pow(10.0,b)
+ c=pow(10.0, b)
if a < c*5.0:
c/=2.0
#print a,b,c
low=c*floor(min/c)
high=c*ceil(max/c)
- return [low,high,round((high-low)/c)]
+ return [low, high, round((high-low)/c)]
def detScale(min=0,max=0):
if min>=max:
return None
elif min == -1.0 and max == 1.0:
- return [-1.2,1.2,12]
+ return [-1.2, 1.2, 12]
else:
a=max-min
if max != 0:
@@ -235,7 +263,7 @@ def detScale(min=0,max=0):
min -= 0.1*a
a=max-min
b=floor(log10(a))
- c=pow(10.0,b)
+ c=pow(10.0, b)
low=c*floor(min/c)
high=c*ceil(max/c)
n = round((high-low)/c)
@@ -253,7 +281,7 @@ def detScale(min=0,max=0):
high=c*ceil(max/c)
n = round((high-low)/c)
- return [low,high,n]
+ return [low, high, n]
def bluefunc(x):
return 1.0 / (1.0 + exp(-10*(x-0.6)))
@@ -262,21 +290,26 @@ def redfunc(x):
return 1.0 / (1.0 + exp(10*(x-0.5)))
def greenfunc(x):
- return 1 - pow(redfunc(x+0.2),2) - bluefunc(x-0.3)
+ return 1 - pow(redfunc(x+0.2), 2) - bluefunc(x-0.3)
def colorSpectrum(n=100):
multiple = 10
if n == 1:
- return [pid.Color(1,0,0)]
+ return [ImageColor.getrgb("rgb(100%,0%,0%)")]
elif n == 2:
- return [pid.Color(1,0,0),pid.Color(0,0,1)]
+ return [ImageColor.getrgb("100%,0%,0%)"),
+ ImageColor.getrgb("rgb(0%,0%,100%)")]
elif n == 3:
- return [pid.Color(1,0,0),pid.Color(0,1,0),pid.Color(0,0,1)]
+ return [ImageColor.getrgb("rgb(100%,0%,0%)"),
+ ImageColor.getrgb("rgb(0%,100%,0%)"),
+ ImageColor.getrgb("rgb(0%,0%,100%)")]
N = n*multiple
out = [None]*N;
for i in range(N):
x = float(i)/N
- out[i] = pid.Color(redfunc(x), greenfunc(x), bluefunc(x));
+ out[i] = ImageColor.getrgb("rgb({}%,{}%,{}%".format(
+ *[int(i*100) for i in (
+ redfunc(x), greenfunc(x), bluefunc(x))]))
out2 = [out[0]]
step = N/float(n-1)
j = 0
@@ -292,4 +325,4 @@ def _test():
if __name__=="__main__":
- _test() \ No newline at end of file
+ _test()
diff --git a/wqflask/utility/__init__.py b/wqflask/utility/__init__.py
index d9856eed..204ff59a 100644
--- a/wqflask/utility/__init__.py
+++ b/wqflask/utility/__init__.py
@@ -19,7 +19,7 @@ class Struct(object):
'''
def __init__(self, obj):
- for k, v in obj.iteritems():
+ for k, v in list(obj.items()):
if isinstance(v, dict):
setattr(self, k, Struct(v))
else:
@@ -30,6 +30,6 @@ class Struct(object):
def __repr__(self):
return '{%s}' % str(', '.join('%s : %s' % (k, repr(v)) for
- (k, v) in self.__dict__.iteritems()))
+ (k, v) in list(self.__dict__.items())))
diff --git a/wqflask/utility/after.py b/wqflask/utility/after.py
index b628a0a4..06091ecb 100644
--- a/wqflask/utility/after.py
+++ b/wqflask/utility/after.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division, absolute_import
-
"""
See: http://flask.pocoo.org/docs/patterns/deferredcallbacks/#deferred-callbacks
@@ -13,4 +11,4 @@ def after_this_request(f):
if not hasattr(g, 'after_request_callbacks'):
g.after_request_callbacks = []
g.after_request_callbacks.append(f)
- return f \ No newline at end of file
+ return f
diff --git a/wqflask/utility/authentication_tools.py b/wqflask/utility/authentication_tools.py
new file mode 100644
index 00000000..672b36d5
--- /dev/null
+++ b/wqflask/utility/authentication_tools.py
@@ -0,0 +1,145 @@
+import json
+import requests
+
+from flask import g
+from base import webqtlConfig
+
+
+from utility.redis_tools import (get_redis_conn,
+ get_resource_info,
+ get_resource_id,
+ add_resource)
+Redis = get_redis_conn()
+
+def check_resource_availability(dataset, trait_id=None):
+ # At least for now assume temporary entered traits are accessible
+ if type(dataset) == str or dataset.type == "Temp":
+ return webqtlConfig.DEFAULT_PRIVILEGES
+
+ resource_id = get_resource_id(dataset, trait_id)
+
+ # ZS: This should never be false, but it's technically possible if
+ # a non-Temp dataset somehow had a type other than
+ # Publish/ProbeSet/Geno
+ if resource_id:
+ resource_info = get_resource_info(resource_id)
+
+ # ZS: If resource isn't already in redis, add it with default
+ # privileges
+ if not resource_info:
+ resource_info = add_new_resource(dataset, trait_id)
+
+ # ZS: Check if super-user - we should probably come up with some
+ # way to integrate this into the proxy
+ if g.user_session.user_id in Redis.smembers("super_users"):
+ return webqtlConfig.SUPER_PRIVILEGES
+
+ response = None
+
+ the_url = "http://localhost:8080/available?resource={}&user={}".format(
+ resource_id, g.user_session.user_id)
+
+ try:
+ response = json.loads(requests.get(the_url).content)
+ except:
+ response = resource_info['default_mask']
+
+ return response
+
+
+def add_new_resource(dataset, trait_id=None):
+ resource_ob = {
+ 'owner_id': "none", # webqtlConfig.DEFAULT_OWNER_ID,
+ 'default_mask': webqtlConfig.DEFAULT_PRIVILEGES,
+ 'group_masks': {}
+ }
+
+ if dataset.type == "Publish":
+ group_code = get_group_code(dataset)
+ if group_code is None:
+ group_code = ""
+ resource_ob['name'] = group_code + "_" + str(trait_id)
+ resource_ob['data'] = {
+ 'dataset': dataset.id,
+ 'trait': trait_id
+ }
+ resource_ob['type'] = 'dataset-publish'
+ elif dataset.type == "Geno":
+ resource_ob['name'] = dataset.name
+ resource_ob['data'] = {
+ 'dataset': dataset.id
+ }
+ resource_ob['type'] = 'dataset-geno'
+ else:
+ resource_ob['name'] = dataset.name
+ resource_ob['data'] = {
+ 'dataset': dataset.id
+ }
+ resource_ob['type'] = 'dataset-probeset'
+
+ resource_info = add_resource(resource_ob, update=False)
+
+ return resource_info
+
+
+def get_group_code(dataset):
+ results = g.db.execute(
+ "SELECT InbredSetCode from InbredSet where Name='{}'".format(
+ dataset.group.name)).fetchone()
+ if results[0]:
+ return results[0]
+ else:
+ return ""
+
+
+def check_admin(resource_id=None):
+ the_url = "http://localhost:8080/available?resource={}&user={}".format(
+ resource_id, g.user_session.user_id)
+ try:
+ response = json.loads(requests.get(the_url).content)['admin']
+ except:
+ resource_info = get_resource_info(resource_id)
+ response = resource_info['default_mask']['admin']
+
+ if type(response) is list:
+ if 'edit-admins' in response:
+ return 'edit_admins'
+ elif 'edit-access' in response:
+ return 'edit-access'
+
+ return response
+
+
+def check_owner(dataset=None, trait_id=None, resource_id=None):
+ if resource_id:
+ resource_info = get_resource_info(resource_id)
+ if g.user_session.user_id == resource_info['owner_id']:
+ return resource_id
+ else:
+ resource_id = get_resource_id(dataset, trait_id)
+ if resource_id:
+ resource_info = get_resource_info(resource_id)
+ if g.user_session.user_id == resource_info['owner_id']:
+ return resource_id
+
+ return False
+
+
+def check_owner_or_admin(dataset=None, trait_id=None, resource_id=None):
+ if not resource_id:
+ if dataset.type == "Temp":
+ return "not-admin"
+ else:
+ resource_id = get_resource_id(dataset, trait_id)
+
+ if g.user_session.user_id in Redis.smembers("super_users"):
+ return "owner"
+
+ resource_info = get_resource_info(resource_id)
+ if resource_info:
+ if g.user_session.user_id == resource_info['owner_id']:
+ return "owner"
+ else:
+ return check_admin(resource_id)
+
+ return "not-admin"
diff --git a/wqflask/utility/benchmark.py b/wqflask/utility/benchmark.py
index 8f1c916b..ea5a0ab6 100644
--- a/wqflask/utility/benchmark.py
+++ b/wqflask/utility/benchmark.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division, absolute_import
-
import collections
import inspect
import time
@@ -38,9 +36,9 @@ class Bench(object):
@classmethod
def report(cls):
- total_time = sum((time_taken for time_taken in cls.entries.itervalues()))
+ total_time = sum((time_taken for time_taken in list(cls.entries.values())))
print("\nTiming report\n")
- for name, time_taken in cls.entries.iteritems():
+ for name, time_taken in list(cls.entries.items()):
percent = int(round((time_taken/total_time) * 100))
print("[{}%] {}: {}".format(percent, name, time_taken))
print()
diff --git a/wqflask/utility/chunks.py b/wqflask/utility/chunks.py
index b0e33c08..9a7db102 100644
--- a/wqflask/utility/chunks.py
+++ b/wqflask/utility/chunks.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import math
import time
@@ -31,66 +29,3 @@ def divide_into_chunks(the_list, number_chunks):
chunks.append(the_list[counter:counter+chunksize])
return chunks
-
-def _confirm_chunk(original, result):
- all_chunked = []
- for chunk in result:
- all_chunked.extend(chunk)
- print("length of all chunked:", len(all_chunked))
- assert original == all_chunked, "You didn't chunk right"
-
-
-def _chunk_test(divide_func):
- import random
- random.seed(7)
-
- number_exact = 0
- total_amount_off = 0
-
- for test in range(1, 1001):
- print("\n\ntest:", test)
- number_chunks = random.randint(1, 20)
- number_elements = random.randint(0, 100)
- the_list = list(range(1, number_elements))
- result = divide_func(the_list, number_chunks)
-
- print("Dividing list of length {} into approximately {} chunks - got {} chunks".format(
- len(the_list), number_chunks, len(result)))
- print("result:", result)
-
- _confirm_chunk(the_list, result)
-
- amount_off = abs(number_chunks - len(result))
- if amount_off == 0:
- number_exact += 1
- else:
- total_amount_off += amount_off
-
-
- print("\n{} exact out of {} [Total amount off: {}]".format(number_exact,
- test,
- total_amount_off))
- assert number_exact == 558
- assert total_amount_off == 1580
- return number_exact, total_amount_off
-
-
-def _main():
- info = dict()
- #funcs = (("sam", sam_divide_into_chunks), ("zach", zach_divide_into_chunks))
- funcs = (("only one", divide_into_chunks),)
- for name, func in funcs:
- start = time.time()
- number_exact, total_amount_off = _chunk_test(func)
- took = time.time() - start
- info[name] = dict(number_exact=number_exact,
- total_amount_off=total_amount_off,
- took=took)
-
- print("info is:", info)
-
-if __name__ == '__main__':
- _main()
- print("\nConfirming doctests...")
- import doctest
- doctest.testmod()
diff --git a/wqflask/utility/corr_result_helpers.py b/wqflask/utility/corr_result_helpers.py
index b543c589..ea3ababf 100644
--- a/wqflask/utility/corr_result_helpers.py
+++ b/wqflask/utility/corr_result_helpers.py
@@ -14,15 +14,11 @@ def normalize_values(a_values, b_values):
min_length = min(len(a_values), len(b_values))
a_new = []
b_new = []
- for counter in range(min_length):
- if (a_values[counter] or a_values[counter] == 0) and (b_values[counter] or b_values[counter] == 0):
- a_new.append(a_values[counter])
- b_new.append(b_values[counter])
-
- num_overlap = len(a_new)
- assert num_overlap == len(b_new), "Lengths should be the same"
-
- return a_new, b_new, num_overlap
+ for a, b in zip(a_values, b_values):
+ if not (a == None or b == None):
+ a_new.append(a)
+ b_new.append(b)
+ return a_new, b_new, len(a_new)
def common_keys(a_samples, b_samples):
@@ -37,20 +33,10 @@ def common_keys(a_samples, b_samples):
def normalize_values_with_samples(a_samples, b_samples):
common_samples = common_keys(a_samples, b_samples)
-
a_new = {}
b_new = {}
for sample in common_samples:
a_new[sample] = a_samples[sample]
b_new[sample] = b_samples[sample]
- num_overlap = len(a_new)
- assert num_overlap == len(b_new), "Lengths should be the same"
-
- return a_new, b_new, num_overlap
-
-
-
-if __name__ == '__main__':
- import doctest
- doctest.testmod() \ No newline at end of file
+ return a_new, b_new, len(a_new)
diff --git a/wqflask/utility/db_tools.py b/wqflask/utility/db_tools.py
index 4034f39c..6e19778f 100644
--- a/wqflask/utility/db_tools.py
+++ b/wqflask/utility/db_tools.py
@@ -1,6 +1,5 @@
-from __future__ import absolute_import, print_function, division
+from MySQLdb import escape_string as escape_
-from MySQLdb import escape_string as escape
def create_in_clause(items):
"""Create an in clause for mysql"""
@@ -8,8 +7,11 @@ def create_in_clause(items):
in_clause = '( {} )'.format(in_clause)
return in_clause
+
def mescape(*items):
"""Multiple escape"""
- escaped = [escape(str(item)) for item in items]
- #print("escaped is:", escaped)
- return escaped
+ return [escape_(str(item)).decode('utf8') for item in items]
+
+
+def escape(string_):
+ return escape_(string_).decode('utf8')
diff --git a/wqflask/utility/elasticsearch_tools.py b/wqflask/utility/elasticsearch_tools.py
index 15cdd0bc..a5580811 100644
--- a/wqflask/utility/elasticsearch_tools.py
+++ b/wqflask/utility/elasticsearch_tools.py
@@ -59,7 +59,7 @@ def get_elasticsearch_connection(for_user=True):
try:
assert(ELASTICSEARCH_HOST)
assert(ELASTICSEARCH_PORT)
- logger.info("ES HOST",ELASTICSEARCH_HOST)
+ logger.info("ES HOST", ELASTICSEARCH_HOST)
es = Elasticsearch([{
"host": ELASTICSEARCH_HOST, "port": ELASTICSEARCH_PORT
diff --git a/wqflask/utility/formatting.py b/wqflask/utility/formatting.py
index e53dda22..1da3e9b7 100644
--- a/wqflask/utility/formatting.py
+++ b/wqflask/utility/formatting.py
@@ -28,21 +28,20 @@ def numify(number, singular=None, plural=None):
'12,334 hippopotami'
"""
- num_repr = {1 : "one",
- 2 : "two",
- 3 : "three",
- 4 : "four",
- 5 : "five",
- 6 : "six",
- 7 : "seven",
- 8 : "eight",
- 9 : "nine",
- 10 : "ten",
- 11 : "eleven",
- 12 : "twelve"}
-
- #Below line commented out cause doesn't work in Python 2.4
- #assert all((singular, plural)) or not any((singular, plural)), "Need to pass two words or none"
+ num_repr = {0: "zero",
+ 1: "one",
+ 2: "two",
+ 3: "three",
+ 4: "four",
+ 5: "five",
+ 6: "six",
+ 7: "seven",
+ 8: "eight",
+ 9: "nine",
+ 10: "ten",
+ 11: "eleven",
+ 12: "twelve"}
+
if number == 1:
word = singular
else:
diff --git a/wqflask/utility/gen_geno_ob.py b/wqflask/utility/gen_geno_ob.py
index 23b0b650..81085ffe 100644
--- a/wqflask/utility/gen_geno_ob.py
+++ b/wqflask/utility/gen_geno_ob.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, division, print_function
-
import utility.logger
logger = utility.logger.getLogger(__name__ )
@@ -175,7 +173,7 @@ class Locus(object):
start_pos = 3
for allele in marker_row[start_pos:]:
- if allele in geno_table.keys():
+ if allele in list(geno_table.keys()):
self.genotype.append(geno_table[allele])
else: #ZS: Some genotype appears that isn't specified in the metadata, make it unknown
- self.genotype.append("U") \ No newline at end of file
+ self.genotype.append("U")
diff --git a/wqflask/utility/genofile_parser.py b/wqflask/utility/genofile_parser.py
index af306731..0b736176 100644
--- a/wqflask/utility/genofile_parser.py
+++ b/wqflask/utility/genofile_parser.py
@@ -1,7 +1,6 @@
# CTL analysis for GN2
# Author / Maintainer: Danny Arends <Danny.Arends@gmail.com>
-from __future__ import print_function, division, absolute_import
import sys
import os
import glob
diff --git a/wqflask/utility/helper_functions.py b/wqflask/utility/helper_functions.py
index e7c04fef..7eb7f013 100644
--- a/wqflask/utility/helper_functions.py
+++ b/wqflask/utility/helper_functions.py
@@ -1,7 +1,5 @@
-from __future__ import absolute_import, print_function, division
-
-from base.trait import GeneralTrait
from base import data_set
+from base.trait import create_trait
from base.species import TheSpecies
from utility import hmac
@@ -11,10 +9,9 @@ from flask import Flask, g
import logging
logger = logging.getLogger(__name__ )
-
def get_species_dataset_trait(self, start_vars):
#assert type(read_genotype) == type(bool()), "Expecting boolean value for read_genotype"
- if "temp_trait" in start_vars.keys():
+ if "temp_trait" in list(start_vars.keys()):
if start_vars['temp_trait'] == "True":
self.dataset = data_set.create_dataset(dataset_name = "Temp", dataset_type = "Temp", group_name = start_vars['group'])
else:
@@ -24,7 +21,7 @@ def get_species_dataset_trait(self, start_vars):
logger.debug("After creating dataset")
self.species = TheSpecies(dataset=self.dataset)
logger.debug("After creating species")
- self.this_trait = GeneralTrait(dataset=self.dataset,
+ self.this_trait = create_trait(dataset=self.dataset,
name=start_vars['trait_id'],
cellid=None,
get_qtl_info=True)
@@ -34,9 +31,8 @@ def get_species_dataset_trait(self, start_vars):
#self.dataset.group.read_genotype_file()
#self.genotype = self.dataset.group.genotype
-
def get_trait_db_obs(self, trait_db_list):
- if isinstance(trait_db_list, basestring):
+ if isinstance(trait_db_list, str):
trait_db_list = trait_db_list.split(",")
self.trait_list = []
@@ -49,10 +45,11 @@ def get_trait_db_obs(self, trait_db_list):
dataset_ob = data_set.create_dataset(dataset_name=dataset_name, dataset_type="Temp", group_name=trait_name.split("_")[2])
else:
dataset_ob = data_set.create_dataset(dataset_name)
- trait_ob = GeneralTrait(dataset=dataset_ob,
+ trait_ob = create_trait(dataset=dataset_ob,
name=trait_name,
cellid=None)
- self.trait_list.append((trait_ob, dataset_ob))
+ if trait_ob:
+ self.trait_list.append((trait_ob, dataset_ob))
def get_species_groups():
diff --git a/wqflask/utility/hmac.py b/wqflask/utility/hmac.py
index d8a0eace..29891677 100644
--- a/wqflask/utility/hmac.py
+++ b/wqflask/utility/hmac.py
@@ -1,16 +1,18 @@
-from __future__ import print_function, division, absolute_import
-
import hmac
import hashlib
+from flask import url_for
+
from wqflask import app
+
def hmac_creation(stringy):
"""Helper function to create the actual hmac"""
secret = app.config['SECRET_HMAC_CODE']
-
- hmaced = hmac.new(secret, stringy, hashlib.sha1)
+ hmaced = hmac.new(bytearray(secret, "latin-1"),
+ bytearray(stringy, "utf-8"),
+ hashlib.sha1)
hm = hmaced.hexdigest()
# ZS: Leaving the below comment here to ask Pjotr about
# "Conventional wisdom is that you don't lose much in terms of security if you throw away up to half of the output."
@@ -18,10 +20,12 @@ def hmac_creation(stringy):
hm = hm[:20]
return hm
+
def data_hmac(stringy):
- """Takes arbitray data string and appends :hmac so we know data hasn't been tampered with"""
+ """Takes arbitrary data string and appends :hmac so we know data hasn't been tampered with"""
return stringy + ":" + hmac_creation(stringy)
+
def url_for_hmac(endpoint, **values):
"""Like url_for but adds an hmac at the end to insure the url hasn't been tampered with"""
@@ -34,5 +38,6 @@ def url_for_hmac(endpoint, **values):
combiner = "?"
return url + combiner + "hm=" + hm
+
app.jinja_env.globals.update(url_for_hmac=url_for_hmac,
- data_hmac=data_hmac) \ No newline at end of file
+ data_hmac=data_hmac)
diff --git a/wqflask/utility/logger.py b/wqflask/utility/logger.py
index 510b1041..e904eb94 100644
--- a/wqflask/utility/logger.py
+++ b/wqflask/utility/logger.py
@@ -42,10 +42,10 @@ class GNLogger:
"""
- def __init__(self,name):
+ def __init__(self, name):
self.logger = logging.getLogger(name)
- def setLevel(self,value):
+ def setLevel(self, value):
"""Set the undelying log level"""
self.logger.setLevel(value)
@@ -54,7 +54,7 @@ class GNLogger:
level=num to filter on LOG_LEVEL_DEBUG.
"""
- self.collect(self.logger.debug,*args)
+ self.collect(self.logger.debug, *args)
def debug20(self,*args):
"""Call logging.debug for multiple args. Use level=num to filter on
@@ -63,15 +63,15 @@ LOG_LEVEL_DEBUG (NYI).
"""
if level <= LOG_LEVEL_DEBUG:
if self.logger.getEffectiveLevel() < 20:
- self.collect(self.logger.debug,*args)
+ self.collect(self.logger.debug, *args)
def info(self,*args):
"""Call logging.info for multiple args"""
- self.collect(self.logger.info,*args)
+ self.collect(self.logger.info, *args)
def warning(self,*args):
"""Call logging.warning for multiple args"""
- self.collect(self.logger.warning,*args)
+ self.collect(self.logger.warning, *args)
# self.logger.warning(self.collect(*args))
def error(self,*args):
@@ -79,13 +79,13 @@ LOG_LEVEL_DEBUG (NYI).
now = datetime.datetime.utcnow()
time_str = now.strftime('%H:%M:%S UTC %Y%m%d')
l = [time_str]+list(args)
- self.collect(self.logger.error,*l)
+ self.collect(self.logger.error, *l)
def infof(self,*args):
"""Call logging.info for multiple args lazily"""
# only evaluate function when logging
if self.logger.getEffectiveLevel() < 30:
- self.collectf(self.logger.debug,*args)
+ self.collectf(self.logger.debug, *args)
def debugf(self,level=0,*args):
"""Call logging.debug for multiple args lazily and handle
@@ -95,15 +95,15 @@ LOG_LEVEL_DEBUG (NYI).
# only evaluate function when logging
if level <= LOG_LEVEL_DEBUG:
if self.logger.getEffectiveLevel() < 20:
- self.collectf(self.logger.debug,*args)
+ self.collectf(self.logger.debug, *args)
def sql(self, sqlcommand, fun = None):
"""Log SQL command, optionally invoking a timed fun"""
if LOG_SQL:
caller = stack()[1][3]
- if caller in ['fetchone','fetch1','fetchall']:
+ if caller in ['fetchone', 'fetch1', 'fetchall']:
caller = stack()[2][3]
- self.info(caller,sqlcommand)
+ self.info(caller, sqlcommand)
if fun:
result = fun(sqlcommand)
if LOG_SQL:
@@ -119,7 +119,7 @@ LOG_LEVEL_DEBUG (NYI).
if isinstance(a, str):
out = out + a
else:
- out = out + pf(a,width=160)
+ out = out + pf(a, width=160)
fun(out)
def collectf(self,fun,*args):
@@ -134,7 +134,7 @@ LOG_LEVEL_DEBUG (NYI).
if isinstance(a, str):
out = out + a
else:
- out = out + pf(a,width=160)
+ out = out + pf(a, width=160)
fun(out)
# Get the module logger. You can override log levels at the
diff --git a/wqflask/utility/pillow_utils.py b/wqflask/utility/pillow_utils.py
new file mode 100644
index 00000000..c486abba
--- /dev/null
+++ b/wqflask/utility/pillow_utils.py
@@ -0,0 +1,27 @@
+from PIL import Image, ImageColor, ImageDraw, ImageFont
+
+from utility.tools import TEMPDIR
+
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
+BLACK = ImageColor.getrgb("black")
+WHITE = ImageColor.getrgb("white")
+
+# def draw_rotated_text(canvas: Image, text: str, font: ImageFont, xy: tuple, fill: ImageColor=BLACK, angle: int=-90):
+def draw_rotated_text(canvas, text, font, xy, fill=BLACK, angle=-90):
+ # type: (Image, str, ImageFont, tuple, ImageColor, int)
+ """Utility function draw rotated text"""
+ tmp_img = Image.new("RGBA", font.getsize(text), color=(0, 0, 0, 0))
+ draw_text = ImageDraw.Draw(tmp_img)
+ draw_text.text(text=text, xy=(0, 0), font=font, fill=fill)
+ tmp_img2 = tmp_img.rotate(angle, expand=1)
+ tmp_img2.save("/{0}/{1}.png".format(TEMPDIR, text), format="png")
+ canvas.paste(im=tmp_img2, box=tuple([int(i) for i in xy]))
+
+# def draw_open_polygon(canvas: Image, xy: tuple, fill: ImageColor=WHITE, outline: ImageColor=BLACK):
+def draw_open_polygon(canvas, xy, fill=None, outline=BLACK, width=0):
+ # type: (Image, tuple, ImageColor, ImageColor)
+ draw_ctx = ImageDraw.Draw(canvas)
+ draw_ctx.polygon(xy, fill=fill)
+ draw_ctx.line(xy, fill=outline, width=width)
diff --git a/wqflask/utility/redis_tools.py b/wqflask/utility/redis_tools.py
index ca42f7b7..8052035f 100644
--- a/wqflask/utility/redis_tools.py
+++ b/wqflask/utility/redis_tools.py
@@ -1,17 +1,22 @@
-from __future__ import print_function, division, absolute_import
-
+import uuid
import simplejson as json
+import datetime
-import redis # used for collections
-Redis = redis.StrictRedis()
-
-import logging
-
-from flask import (render_template, flash)
+import redis # used for collections
+from utility.hmac import hmac_creation
from utility.logger import getLogger
logger = getLogger(__name__)
+
+def get_redis_conn():
+ Redis = redis.StrictRedis(port=6379)
+ return Redis
+
+
+Redis = get_redis_conn()
+
+
def is_redis_available():
try:
Redis.ping()
@@ -19,8 +24,14 @@ def is_redis_available():
return False
return True
+
+def load_json_from_redis(item_list, column_value):
+ return json.loads(item_list[column_value])
+
+
def get_user_id(column_name, column_value):
user_list = Redis.hgetall("users")
+ key_list = []
for key in user_list:
user_ob = json.loads(user_list[key])
if column_name in user_ob and user_ob[column_name] == column_value:
@@ -28,6 +39,7 @@ def get_user_id(column_name, column_value):
return None
+
def get_user_by_unique_column(column_name, column_value):
item_details = None
@@ -38,16 +50,42 @@ def get_user_by_unique_column(column_name, column_value):
if column_name in user_ob and user_ob[column_name] == column_value:
item_details = user_ob
else:
- item_details = json.loads(user_list[column_value])
+ item_details = load_json_from_redis(user_list, column_value)
return item_details
+
+def get_users_like_unique_column(column_name, column_value):
+ """Like previous function, but this only checks if the input is a
+ subset of a field and can return multiple results
+
+ """
+ matched_users = []
+
+ if column_value != "":
+ user_list = Redis.hgetall("users")
+ if column_name != "user_id":
+ for key in user_list:
+ user_ob = json.loads(user_list[key])
+ if "user_id" not in user_ob:
+ set_user_attribute(key, "user_id", key)
+ user_ob["user_id"] = key
+ if column_name in user_ob:
+ if column_value in user_ob[column_name]:
+ matched_users.append(user_ob)
+ else:
+ matched_users.append(load_json_from_redis(user_list, column_value))
+
+ return matched_users
+
+
def set_user_attribute(user_id, column_name, column_value):
user_info = json.loads(Redis.hget("users", user_id))
user_info[column_name] = column_value
Redis.hset("users", user_id, json.dumps(user_info))
+
def get_user_collections(user_id):
collections = None
collections = Redis.hget("collections", user_id)
@@ -57,45 +95,64 @@ def get_user_collections(user_id):
else:
return []
+
def save_user(user, user_id):
Redis.hset("users", user_id, json.dumps(user))
+
def save_collections(user_id, collections_ob):
Redis.hset("collections", user_id, collections_ob)
+
def save_verification_code(user_email, code):
Redis.hset("verification_codes", code, user_email)
+
def check_verification_code(code):
email_address = None
user_details = None
email_address = Redis.hget("verification_codes", code)
- return email_address
if email_address:
- user_details = get_user_by_unique_column('email_address', email_address)
- return user_details
+ user_details = get_user_by_unique_column(
+ 'email_address', email_address)
+ if user_details:
+ return user_details
+ else:
+ return None
else:
return None
- flash("Invalid code: Password reset code does not exist or might have expired!", "error")
+
def get_user_groups(user_id):
- #ZS: Get the groups where a user is an admin or a member and return lists corresponding to those two sets of groups
- admin_group_ids = [] #ZS: Group IDs where user is an admin
- user_group_ids = [] #ZS: Group IDs where user is a regular user
+ # ZS: Get the groups where a user is an admin or a member and
+ # return lists corresponding to those two sets of groups
+ admin_group_ids = [] # ZS: Group IDs where user is an admin
+ user_group_ids = [] # ZS: Group IDs where user is a regular user
groups_list = Redis.hgetall("groups")
for key in groups_list:
- group_ob = json.loads(groups_list[key])
- group_admins = set(group_ob['admins'])
- group_users = set(group_ob['users'])
- if user_id in group_admins:
- admin_group_ids.append(group_ob['id'])
- elif user_id in group_users:
- user_group_ids.append(group_ob['id'])
- else:
+ try:
+ group_ob = json.loads(groups_list[key])
+ group_admins = set([this_admin.encode('utf-8') if this_admin else None for this_admin in group_ob['admins']])
+ group_members = set([this_member.encode('utf-8') if this_member else None for this_member in group_ob['members']])
+ if user_id in group_admins:
+ admin_group_ids.append(group_ob['id'])
+ elif user_id in group_members:
+ user_group_ids.append(group_ob['id'])
+ else:
+ continue
+ except:
continue
- return admin_group_ids, user_group_ids
+ admin_groups = []
+ user_groups = []
+ for the_id in admin_group_ids:
+ admin_groups.append(get_group_info(the_id))
+ for the_id in user_group_ids:
+ user_groups.append(get_group_info(the_id))
+
+ return admin_groups, user_groups
+
def get_group_info(group_id):
group_json = Redis.hget("groups", group_id)
@@ -105,23 +162,71 @@ def get_group_info(group_id):
return group_info
-def create_group(admin_member_ids, user_member_ids = [], group_name = ""):
+
+def get_group_by_unique_column(column_name, column_value):
+ """ Get group by column; not sure if there's a faster way to do this """
+
+ matched_groups = []
+
+ all_group_list = Redis.hgetall("groups")
+ for key in all_group_list:
+ group_info = json.loads(all_group_list[key])
+ # ZS: Since these fields are lists, search in the list
+ if column_name == "admins" or column_name == "members":
+ if column_value in group_info[column_name]:
+ matched_groups.append(group_info)
+ else:
+ if group_info[column_name] == column_value:
+ matched_groups.append(group_info)
+
+ return matched_groups
+
+
+def get_groups_like_unique_column(column_name, column_value):
+ """Like previous function, but this only checks if the input is a
+ subset of a field and can return multiple results
+
+ """
+ matched_groups = []
+
+ if column_value != "":
+ group_list = Redis.hgetall("groups")
+ if column_name != "group_id":
+ for key in group_list:
+ group_info = json.loads(group_list[key])
+ # ZS: Since these fields are lists, search in the list
+ if column_name == "admins" or column_name == "members":
+ if column_value in group_info[column_name]:
+ matched_groups.append(group_info)
+ else:
+ if column_name in group_info:
+ if column_value in group_info[column_name]:
+ matched_groups.append(group_info)
+ else:
+ matched_groups.append(load_json_from_redis(group_list, column_value))
+
+ return matched_groups
+
+
+def create_group(admin_user_ids, member_user_ids=[],
+ group_name="Default Group Name"):
group_id = str(uuid.uuid4())
new_group = {
- "id" : group_id,
- "admins": admin_member_ids,
- "users" : user_member_ids,
- "name" : group_name,
+ "id": group_id,
+ "admins": admin_user_ids,
+ "members": member_user_ids,
+ "name": group_name,
"created_timestamp": datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
"changed_timestamp": datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
}
- Redis.hset("groups", group_id, new_group)
+ Redis.hset("groups", group_id, json.dumps(new_group))
return new_group
+
def delete_group(user_id, group_id):
- #ZS: If user is an admin of a group, remove it from the groups hash
+ # ZS: If user is an admin of a group, remove it from the groups hash
group_info = get_group_info(group_id)
if user_id in group_info["admins"]:
Redis.hdel("groups", group_id)
@@ -129,13 +234,19 @@ def delete_group(user_id, group_id):
else:
None
-def add_users_to_group(user_id, group_id, user_emails = [], admins = False): #ZS "admins" is just to indicate whether the users should be added to the groups admins or regular users set
+
+# ZS "admins" is just to indicate whether the users should be added to
+# the groups admins or regular users set
+def add_users_to_group(user_id, group_id, user_emails=[], admins=False):
group_info = get_group_info(group_id)
- if user_id in group_info["admins"]: #ZS: Just to make sure that the user is an admin for the group, even though they shouldn't be able to reach this point unless they are
+ # ZS: Just to make sure that the user is an admin for the group,
+ # even though they shouldn't be able to reach this point unless
+ # they are
+ if user_id in group_info["admins"]:
if admins:
group_users = set(group_info["admins"])
else:
- group_users = set(group_info["users"])
+ group_users = set(group_info["members"])
for email in user_emails:
user_id = get_user_id("email_address", email)
@@ -144,27 +255,105 @@ def add_users_to_group(user_id, group_id, user_emails = [], admins = False): #ZS
if admins:
group_info["admins"] = list(group_users)
else:
- group_info["users"] = list(group_users)
+ group_info["members"] = list(group_users)
- group_info["changed_timestamp"] = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
+ group_info["changed_timestamp"] = datetime.datetime.utcnow().strftime(
+ '%b %d %Y %I:%M%p')
Redis.hset("groups", group_id, json.dumps(group_info))
return group_info
else:
return None
-def remove_users_from_group(user_id, users_to_remove_ids, group_id, user_type = "users"): #ZS: User type is because I assume admins can remove other admins
+
+# ZS: User type is because I assume admins can remove other admins
+def remove_users_from_group(user_id,
+ users_to_remove_ids,
+ group_id,
+ user_type="members"):
group_info = get_group_info(group_id)
+
if user_id in group_info["admins"]:
+ users_to_remove_set = set(users_to_remove_ids)
+ # ZS: Make sure an admin can't remove themselves from a group,
+ # since I imagine we don't want groups to be able to become
+ # admin-less
+ if user_type == "admins" and user_id in users_to_remove_set:
+ users_to_remove_set.remove(user_id)
group_users = set(group_info[user_type])
- group_users -= set(users_to_remove_ids)
+ group_users -= users_to_remove_set
group_info[user_type] = list(group_users)
- group_info["changed_timestamp"] = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
+ group_info["changed_timestamp"] = datetime.datetime.utcnow().strftime(
+ '%b %d %Y %I:%M%p')
Redis.hset("groups", group_id, json.dumps(group_info))
+
def change_group_name(user_id, group_id, new_name):
group_info = get_group_info(group_id)
if user_id in group_info["admins"]:
group_info["name"] = new_name
+ Redis.hset("groups", group_id, json.dumps(group_info))
return group_info
else:
- return None \ No newline at end of file
+ return None
+
+
+def get_resources():
+ resource_list = Redis.hgetall("resources")
+ return resource_list
+
+
+def get_resource_id(dataset, trait_id=None):
+ resource_id = False
+ if dataset.type == "Publish":
+ if trait_id:
+ resource_id = hmac_creation("{}:{}:{}".format(
+ 'dataset-publish', dataset.id, trait_id))
+ elif dataset.type == "ProbeSet":
+ resource_id = hmac_creation(
+ "{}:{}".format('dataset-probeset', dataset.id))
+ elif dataset.type == "Geno":
+ resource_id = hmac_creation(
+ "{}:{}".format('dataset-geno', dataset.id))
+
+ return resource_id
+
+
+def get_resource_info(resource_id):
+ resource_info = Redis.hget("resources", resource_id)
+ if resource_info:
+ return json.loads(resource_info)
+ else:
+ return None
+
+
+def add_resource(resource_info, update=True):
+ if 'trait' in resource_info['data']:
+ resource_id = hmac_creation('{}:{}:{}'.format(
+ str(resource_info['type']), str(
+ resource_info['data']['dataset']),
+ str(resource_info['data']['trait'])))
+ else:
+ resource_id = hmac_creation('{}:{}'.format(
+ str(resource_info['type']), str(resource_info['data']['dataset'])))
+
+ if update or not Redis.hexists("resources", resource_id):
+ Redis.hset("resources", resource_id, json.dumps(resource_info))
+
+ return resource_info
+
+
+def add_access_mask(resource_id, group_id, access_mask):
+ the_resource = get_resource_info(resource_id)
+ the_resource['group_masks'][group_id] = access_mask
+
+ Redis.hset("resources", resource_id, json.dumps(the_resource))
+
+ return the_resource
+
+
+def change_resource_owner(resource_id, new_owner_id):
+ the_resource = get_resource_info(resource_id)
+ the_resource['owner_id'] = new_owner_id
+
+ Redis.delete("resource")
+ Redis.hset("resources", resource_id, json.dumps(the_resource))
diff --git a/wqflask/utility/startup_config.py b/wqflask/utility/startup_config.py
index 817284dd..f1aaebb6 100644
--- a/wqflask/utility/startup_config.py
+++ b/wqflask/utility/startup_config.py
@@ -27,7 +27,7 @@ def app_config():
port = get_setting_int("SERVER_PORT")
if get_setting_bool("USE_GN_SERVER"):
- print("GN2 API server URL is ["+BLUE+get_setting("GN_SERVER_URL")+ENDC+"]")
+ print(("GN2 API server URL is ["+BLUE+get_setting("GN_SERVER_URL")+ENDC+"]"))
import requests
page = requests.get(get_setting("GN_SERVER_URL"))
if page.status_code != 200:
@@ -36,4 +36,4 @@ def app_config():
# import utility.elasticsearch_tools as es
# es.test_elasticsearch_connection()
- print("GN2 is running. Visit %s[http://localhost:%s/%s](%s)" % (BLUE,str(port),ENDC,get_setting("WEBSERVER_URL")))
+ print(("GN2 is running. Visit %s[http://localhost:%s/%s](%s)" % (BLUE, str(port), ENDC, get_setting("WEBSERVER_URL"))))
diff --git a/wqflask/utility/svg.py b/wqflask/utility/svg.py
index db13b9d1..b92cc2d1 100644
--- a/wqflask/utility/svg.py
+++ b/wqflask/utility/svg.py
@@ -25,54 +25,56 @@
# Last updated by GeneNetwork Core Team 2010/10/20
#!/usr/bin/env python
-##Copyright (c) 2002, Fedor Baart & Hans de Wit (Stichting Farmaceutische Kengetallen)
-##All rights reserved.
+# Copyright (c) 2002, Fedor Baart & Hans de Wit (Stichting Farmaceutische Kengetallen)
+# All rights reserved.
##
-##Redistribution and use in source and binary forms, with or without modification,
-##are permitted provided that the following conditions are met:
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
##
-##Redistributions of source code must retain the above copyright notice, this
-##list of conditions and the following disclaimer.
+# Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
##
-##Redistributions in binary form must reproduce the above copyright notice,
-##this list of conditions and the following disclaimer in the documentation and/or
-##other materials provided with the distribution.
+# Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation and/or
+# other materials provided with the distribution.
##
-##Neither the name of the Stichting Farmaceutische Kengetallen nor the names of
-##its contributors may be used to endorse or promote products derived from this
-##software without specific prior written permission.
+# Neither the name of the Stichting Farmaceutische Kengetallen nor the names of
+# its contributors may be used to endorse or promote products derived from this
+# software without specific prior written permission.
##
-##THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-##AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-##IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-##DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-##FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-##DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-##SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-##CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-##OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-##OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Thanks to Gerald Rosennfellner for his help and useful comments.
-##Thanks to Gerald Rosennfellner for his help and useful comments.
-
-__doc__="""Use SVGdraw to generate your SVGdrawings.
+import sys
+import exceptions
+__doc__ = """Use SVGdraw to generate your SVGdrawings.
SVGdraw uses an object model drawing and a method toXML to create SVG graphics
by using easy to use classes and methods usualy you start by creating a drawing eg
d=drawing()
- #then you create a SVG root element
+ # then you create a SVG root element
s=svg()
- #then you add some elements eg a circle and add it to the svg root element
+ # then you add some elements eg a circle and add it to the svg root element
c=circle()
- #you can supply attributes by using named arguments.
+ # you can supply attributes by using named arguments.
c=circle(fill='red',stroke='blue')
- #or by updating the attributes attribute:
+ # or by updating the attributes attribute:
c.attributes['stroke-width']=1
s.addElement(c)
- #then you add the svg root element to the drawing
+ # then you add the svg root element to the drawing
d.setSVG(s)
- #and finaly you xmlify the drawing
+ # and finaly you xmlify the drawing
d.toXml()
@@ -82,7 +84,7 @@ This module was created using the SVG specification of www.w3c.org and the
O'Reilly (www.oreilly.com) python books as information sources. A svg viewer
is available from www.adobe.com"""
-__version__="1.0"
+__version__ = "1.0"
# there are two possibilities to generate svg:
# via a dom implementation and directly using <element>text</element> strings
@@ -93,33 +95,34 @@ __version__="1.0"
# Note that PyXML is required for using the dom implementation.
# It is also possible to use the standard minidom. But I didn't try that one.
# Anyway the text based approach is about 60 times faster than using the full dom implementation.
-use_dom_implementation=0
+use_dom_implementation = 0
-import exceptions
-if use_dom_implementation<>0:
+if use_dom_implementation != 0:
try:
from xml.dom import implementation
from xml.dom.ext import PrettyPrint
except:
- raise exceptions.ImportError, "PyXML is required for using the dom implementation"
-#The implementation is used for the creating the XML document.
-#The prettyprint module is used for converting the xml document object to a xml file
+ raise exceptions.ImportError(
+ "PyXML is required for using the dom implementation")
+# The implementation is used for the creating the XML document.
+# The prettyprint module is used for converting the xml document object to a xml file
+
+assert sys.version_info[0] >= 2
+if sys.version_info[1] < 2:
+ True = 1
+ False = 0
+ file = open
+
+sys.setrecursionlimit = 50
+# The recursion limit is set conservative so mistakes like s=svg() s.addElement(s)
+# won't eat up too much processor time.
+
+# the following code is pasted form xml.sax.saxutils
+# it makes it possible to run the code without the xml sax package installed
+# To make it possible to have <rubbish> in your text elements, it is necessary to escape the texts
+
-import sys
-assert sys.version_info[0]>=2
-if sys.version_info[1]<2:
- True=1
- False=0
- file=open
-
-sys.setrecursionlimit=50
-#The recursion limit is set conservative so mistakes like s=svg() s.addElement(s)
-#won't eat up too much processor time.
-
-#the following code is pasted form xml.sax.saxutils
-#it makes it possible to run the code without the xml sax package installed
-#To make it possible to have <rubbish> in your text elements, it is necessary to escape the texts
def _escape(data, entities={}):
"""Escape &, <, and > in a string of data.
@@ -127,13 +130,14 @@ def _escape(data, entities={}):
the optional entities parameter. The keys and values must all be
strings; each key will be replaced with its corresponding value.
"""
- #data = data.replace("&", "&amp;")
+ # data = data.replace("&", "&amp;")
data = data.replace("<", "&lt;")
data = data.replace(">", "&gt;")
- for chars, entity in entities.items():
+ for chars, entity in list(entities.items()):
data = data.replace(chars, entity)
return data
+
def _quoteattr(data, entities={}):
"""Escape and quote an attribute value.
@@ -156,96 +160,121 @@ def _quoteattr(data, entities={}):
return data
-
def _xypointlist(a):
"""formats a list of xy pairs"""
- s=''
- for e in a: #this could be done more elegant
- s+=str(e)[1:-1] +' '
+ s = ''
+ for e in a: # this could be done more elegant
+ s += str(e)[1:-1] + ' '
return s
+
def _viewboxlist(a):
"""formats a tuple"""
- s=''
+ s = ''
for e in a:
- s+=str(e)+' '
+ s += str(e)+' '
return s
+
def _pointlist(a):
"""formats a list of numbers"""
return str(a)[1:-1]
+
class pathdata:
"""class used to create a pathdata object which can be used for a path.
although most methods are pretty straightforward it might be useful to look at the SVG specification."""
- #I didn't test the methods below.
- def __init__(self,x=None,y=None):
- self.path=[]
+ # I didn't test the methods below.
+
+ def __init__(self, x=None, y=None):
+ self.path = []
if x is not None and y is not None:
self.path.append('M '+str(x)+' '+str(y))
+
def closepath(self):
"""ends the path"""
self.path.append('z')
- def move(self,x,y):
+
+ def move(self, x, y):
"""move to absolute"""
self.path.append('M '+str(x)+' '+str(y))
- def relmove(self,x,y):
+
+ def relmove(self, x, y):
"""move to relative"""
self.path.append('m '+str(x)+' '+str(y))
- def line(self,x,y):
+
+ def line(self, x, y):
"""line to absolute"""
self.path.append('L '+str(x)+' '+str(y))
- def relline(self,x,y):
+
+ def relline(self, x, y):
"""line to relative"""
self.path.append('l '+str(x)+' '+str(y))
- def hline(self,x):
+
+ def hline(self, x):
"""horizontal line to absolute"""
self.path.append('H'+str(x))
- def relhline(self,x):
+
+ def relhline(self, x):
"""horizontal line to relative"""
self.path.append('h'+str(x))
- def vline(self,y):
+
+ def vline(self, y):
"""verical line to absolute"""
self.path.append('V'+str(y))
- def relvline(self,y):
+
+ def relvline(self, y):
"""vertical line to relative"""
self.path.append('v'+str(y))
- def bezier(self,x1,y1,x2,y2,x,y):
+
+ def bezier(self, x1, y1, x2, y2, x, y):
"""bezier with xy1 and xy2 to xy absolut"""
- self.path.append('C'+str(x1)+','+str(y1)+' '+str(x2)+','+str(y2)+' '+str(x)+','+str(y))
- def relbezier(self,x1,y1,x2,y2,x,y):
+ self.path.append('C'+str(x1)+','+str(y1)+' '+str(x2) +
+ ','+str(y2)+' '+str(x)+','+str(y))
+
+ def relbezier(self, x1, y1, x2, y2, x, y):
"""bezier with xy1 and xy2 to xy relative"""
- self.path.append('c'+str(x1)+','+str(y1)+' '+str(x2)+','+str(y2)+' '+str(x)+','+str(y))
- def smbezier(self,x2,y2,x,y):
+ self.path.append('c'+str(x1)+','+str(y1)+' '+str(x2) +
+ ','+str(y2)+' '+str(x)+','+str(y))
+
+ def smbezier(self, x2, y2, x, y):
"""smooth bezier with xy2 to xy absolut"""
self.path.append('S'+str(x2)+','+str(y2)+' '+str(x)+','+str(y))
- def relsmbezier(self,x2,y2,x,y):
+
+ def relsmbezier(self, x2, y2, x, y):
"""smooth bezier with xy2 to xy relative"""
self.path.append('s'+str(x2)+','+str(y2)+' '+str(x)+','+str(y))
- def qbezier(self,x1,y1,x,y):
+
+ def qbezier(self, x1, y1, x, y):
"""quadratic bezier with xy1 to xy absolut"""
self.path.append('Q'+str(x1)+','+str(y1)+' '+str(x)+','+str(y))
- def relqbezier(self,x1,y1,x,y):
+
+ def relqbezier(self, x1, y1, x, y):
"""quadratic bezier with xy1 to xy relative"""
self.path.append('q'+str(x1)+','+str(y1)+' '+str(x)+','+str(y))
- def smqbezier(self,x,y):
+
+ def smqbezier(self, x, y):
"""smooth quadratic bezier to xy absolut"""
self.path.append('T'+str(x)+','+str(y))
- def relsmqbezier(self,x,y):
+
+ def relsmqbezier(self, x, y):
"""smooth quadratic bezier to xy relative"""
self.path.append('t'+str(x)+','+str(y))
- def ellarc(self,rx,ry,xrot,laf,sf,x,y):
+
+ def ellarc(self, rx, ry, xrot, laf, sf, x, y):
"""elliptival arc with rx and ry rotating with xrot using large-arc-flag and sweep-flag to xy absolut"""
- self.path.append('A'+str(rx)+','+str(ry)+' '+str(xrot)+' '+str(laf)+' '+str(sf)+' '+str(x)+' '+str(y))
- def relellarc(self,rx,ry,xrot,laf,sf,x,y):
+ self.path.append('A'+str(rx)+','+str(ry)+' '+str(xrot) +
+ ' '+str(laf)+' '+str(sf)+' '+str(x)+' '+str(y))
+
+ def relellarc(self, rx, ry, xrot, laf, sf, x, y):
"""elliptival arc with rx and ry rotating with xrot using large-arc-flag and sweep-flag to xy relative"""
- self.path.append('a'+str(rx)+','+str(ry)+' '+str(xrot)+' '+str(laf)+' '+str(sf)+' '+str(x)+' '+str(y))
+ self.path.append('a'+str(rx)+','+str(ry)+' '+str(xrot) +
+ ' '+str(laf)+' '+str(sf)+' '+str(x)+' '+str(y))
+
def __repr__(self):
return ' '.join(self.path)
-
-
class SVGelement:
"""SVGelement(type,attributes,elements,text,namespace,**args)
Creates a arbitrary svg element and is intended to be subclassed not used on its own.
@@ -256,52 +285,56 @@ class SVGelement:
namespace. Note the elements==None, if elements = None:self.elements=[] construction.
This is done because if you default to elements=[] every object has a reference
to the same empty list."""
- def __init__(self,type='',attributes=None,elements=None,text='',namespace='',cdata=None, **args):
- self.type=type
- if attributes==None:
- self.attributes={}
+
+ def __init__(self, type='', attributes=None, elements=None, text='', namespace='', cdata=None, **args):
+ self.type = type
+ if attributes == None:
+ self.attributes = {}
else:
- self.attributes=attributes
- if elements==None:
- self.elements=[]
+ self.attributes = attributes
+ if elements == None:
+ self.elements = []
else:
- self.elements=elements
- self.text=text
- self.namespace=namespace
- self.cdata=cdata
- for arg in args.keys():
+ self.elements = elements
+ self.text = text
+ self.namespace = namespace
+ self.cdata = cdata
+ for arg in list(args.keys()):
arg2 = arg.replace("__", ":")
arg2 = arg2.replace("_", "-")
- self.attributes[arg2]=args[arg]
- def addElement(self,SVGelement):
+ self.attributes[arg2] = args[arg]
+
+ def addElement(self, SVGelement):
"""adds an element to a SVGelement
SVGelement.addElement(SVGelement)
"""
self.elements.append(SVGelement)
- def toXml(self,level,f):
+ def toXml(self, level, f):
f.write('\t'*level)
f.write('<'+self.type)
- for attkey in self.attributes.keys():
- f.write(' '+_escape(str(attkey))+'='+_quoteattr(str(self.attributes[attkey])))
+ for attkey in list(self.attributes.keys()):
+ f.write(' '+_escape(str(attkey))+'=' +
+ _quoteattr(str(self.attributes[attkey])))
if self.namespace:
- f.write(' xmlns="'+ _escape(str(self.namespace))+'" xmlns:xlink="http://www.w3.org/1999/xlink"')
+ f.write(' xmlns="' + _escape(str(self.namespace)) +
+ '" xmlns:xlink="http://www.w3.org/1999/xlink"')
if self.elements or self.text or self.cdata:
f.write('>')
if self.elements:
f.write('\n')
for element in self.elements:
- element.toXml(level+1,f)
+ element.toXml(level+1, f)
if self.cdata:
f.write('\n'+'\t'*(level+1)+'<![CDATA[')
for line in self.cdata.splitlines():
f.write('\n'+'\t'*(level+2)+line)
f.write('\n'+'\t'*(level+1)+']]>\n')
if self.text:
- if type(self.text)==type(''): #If the text is only text
+ if isinstance(self.text, type('')): # If the text is only text
f.write(_escape(str(self.text)))
- else: #If the text is a spannedtext class
+ else: # If the text is a spannedtext class
f.write(str(self.text))
if self.elements:
f.write('\t'*level+'</'+self.type+'>\n')
@@ -312,6 +345,7 @@ class SVGelement:
else:
f.write('/>\n')
+
class tspan(SVGelement):
"""ts=tspan(text='',**args)
@@ -323,19 +357,22 @@ class tspan(SVGelement):
st.addtspan(ts)
t=text(3,5,st)
"""
- def __init__(self,text=None,**args):
- SVGelement.__init__(self,'tspan',**args)
- if self.text<>None:
- self.text=text
+
+ def __init__(self, text=None, **args):
+ SVGelement.__init__(self, 'tspan', **args)
+ if self.text != None:
+ self.text = text
+
def __repr__(self):
- s="<tspan"
- for key,value in self.attributes.items():
- s+= ' %s="%s"' % (key,value)
- s+='>'
- s+=self.text
- s+='</tspan>'
+ s = "<tspan"
+ for key, value in list(self.attributes.items()):
+ s += ' %s="%s"' % (key, value)
+ s += '>'
+ s += self.text
+ s += '</tspan>'
return s
+
class tref(SVGelement):
"""tr=tref(link='',**args)
@@ -346,16 +383,19 @@ class tref(SVGelement):
st.addtref(tr)
t=text(3,5,st)
"""
- def __init__(self,link,**args):
- SVGelement.__init__(self,'tref',{'xlink:href':link},**args)
+
+ def __init__(self, link, **args):
+ SVGelement.__init__(self, 'tref', {'xlink:href': link}, **args)
+
def __repr__(self):
- s="<tref"
+ s = "<tref"
- for key,value in self.attributes.items():
- s+= ' %s="%s"' % (key,value)
- s+='/>'
+ for key, value in list(self.attributes.items()):
+ s += ' %s="%s"' % (key, value)
+ s += '/>'
return s
+
class spannedtext:
"""st=spannedtext(textlist=[])
@@ -374,46 +414,49 @@ class spannedtext:
st.addtext('This text is not bold')
t=text(3,5,st)
"""
- def __init__(self,textlist=None):
- if textlist==None:
- self.textlist=[]
+
+ def __init__(self, textlist=None):
+ if textlist == None:
+ self.textlist = []
else:
- self.textlist=textlist
- def addtext(self,text=''):
+ self.textlist = textlist
+
+ def addtext(self, text=''):
self.textlist.append(text)
- def addtspan(self,tspan):
+
+ def addtspan(self, tspan):
self.textlist.append(tspan)
- def addtref(self,tref):
+
+ def addtref(self, tref):
self.textlist.append(tref)
+
def __repr__(self):
- s=""
+ s = ""
for element in self.textlist:
- s+=str(element)
+ s += str(element)
return s
+
class rect(SVGelement):
"""r=rect(width,height,x,y,fill,stroke,stroke_width,**args)
a rectangle is defined by a width and height and a xy pair
"""
- def __init__(self,x=None,y=None,width=None,height=None,fill=None,stroke=None,stroke_width=None,**args):
- if width==None or height==None:
- if width<>None:
- raise ValueError, 'height is required'
- if height<>None:
- raise ValueError, 'width is required'
- else:
- raise ValueError, 'both height and width are required'
- SVGelement.__init__(self,'rect',{'width':width,'height':height},**args)
- if x<>None:
+
+ def __init__(self, x=None, y=None, width=None, height=None, fill=None, stroke=None, stroke_width=None, **args):
+ if width == None or height == None:
+ raise ValueError('both height and width are required')
+
+ SVGelement.__init__(self, 'rect', {'width':width,'height':height}, **args)
+ if x!=None:
self.attributes['x']=x
- if y<>None:
+ if y!=None:
self.attributes['y']=y
- if fill<>None:
+ if fill!=None:
self.attributes['fill']=fill
- if stroke<>None:
+ if stroke!=None:
self.attributes['stroke']=stroke
- if stroke_width<>None:
+ if stroke_width!=None:
self.attributes['stroke-width']=stroke_width
class ellipse(SVGelement):
@@ -423,22 +466,18 @@ class ellipse(SVGelement):
"""
def __init__(self,cx=None,cy=None,rx=None,ry=None,fill=None,stroke=None,stroke_width=None,**args):
if rx==None or ry== None:
- if rx<>None:
- raise ValueError, 'rx is required'
- if ry<>None:
- raise ValueError, 'ry is required'
- else:
- raise ValueError, 'both rx and ry are required'
- SVGelement.__init__(self,'ellipse',{'rx':rx,'ry':ry},**args)
- if cx<>None:
+ raise ValueError('both rx and ry are required')
+
+ SVGelement.__init__(self, 'ellipse', {'rx':rx,'ry':ry}, **args)
+ if cx!=None:
self.attributes['cx']=cx
- if cy<>None:
+ if cy!=None:
self.attributes['cy']=cy
- if fill<>None:
+ if fill!=None:
self.attributes['fill']=fill
- if stroke<>None:
+ if stroke!=None:
self.attributes['stroke']=stroke
- if stroke_width<>None:
+ if stroke_width!=None:
self.attributes['stroke-width']=stroke_width
@@ -449,17 +488,17 @@ class circle(SVGelement):
"""
def __init__(self,cx=None,cy=None,r=None,fill=None,stroke=None,stroke_width=None,**args):
if r==None:
- raise ValueError, 'r is required'
- SVGelement.__init__(self,'circle',{'r':r},**args)
- if cx<>None:
+ raise ValueError('r is required')
+ SVGelement.__init__(self, 'circle', {'r':r}, **args)
+ if cx!=None:
self.attributes['cx']=cx
- if cy<>None:
+ if cy!=None:
self.attributes['cy']=cy
- if fill<>None:
+ if fill!=None:
self.attributes['fill']=fill
- if stroke<>None:
+ if stroke!=None:
self.attributes['stroke']=stroke
- if stroke_width<>None:
+ if stroke_width!=None:
self.attributes['stroke-width']=stroke_width
class point(circle):
@@ -469,7 +508,7 @@ class point(circle):
very small rectangle if you use many points because a circle is difficult to render.
"""
def __init__(self,x,y,fill='black',**args):
- circle.__init__(self,x,y,1,fill,**args)
+ circle.__init__(self, x, y, 1, fill, **args)
class line(SVGelement):
"""l=line(x1,y1,x2,y2,stroke,stroke_width,**args)
@@ -477,18 +516,18 @@ class line(SVGelement):
A line is defined by a begin x,y pair and an end x,y pair
"""
def __init__(self,x1=None,y1=None,x2=None,y2=None,stroke=None,stroke_width=None,**args):
- SVGelement.__init__(self,'line',**args)
- if x1<>None:
+ SVGelement.__init__(self, 'line', **args)
+ if x1!=None:
self.attributes['x1']=x1
- if y1<>None:
+ if y1!=None:
self.attributes['y1']=y1
- if x2<>None:
+ if x2!=None:
self.attributes['x2']=x2
- if y2<>None:
+ if y2!=None:
self.attributes['y2']=y2
- if stroke_width<>None:
+ if stroke_width!=None:
self.attributes['stroke-width']=stroke_width
- if stroke<>None:
+ if stroke!=None:
self.attributes['stroke']=stroke
class polyline(SVGelement):
@@ -497,12 +536,12 @@ class polyline(SVGelement):
a polyline is defined by a list of xy pairs
"""
def __init__(self,points,fill=None,stroke=None,stroke_width=None,**args):
- SVGelement.__init__(self,'polyline',{'points':_xypointlist(points)},**args)
- if fill<>None:
+ SVGelement.__init__(self, 'polyline', {'points':_xypointlist(points)}, **args)
+ if fill!=None:
self.attributes['fill']=fill
- if stroke_width<>None:
+ if stroke_width!=None:
self.attributes['stroke-width']=stroke_width
- if stroke<>None:
+ if stroke!=None:
self.attributes['stroke']=stroke
class polygon(SVGelement):
@@ -511,12 +550,12 @@ class polygon(SVGelement):
a polygon is defined by a list of xy pairs
"""
def __init__(self,points,fill=None,stroke=None,stroke_width=None,**args):
- SVGelement.__init__(self,'polygon',{'points':_xypointlist(points)},**args)
- if fill<>None:
+ SVGelement.__init__(self, 'polygon', {'points':_xypointlist(points)}, **args)
+ if fill!=None:
self.attributes['fill']=fill
- if stroke_width<>None:
+ if stroke_width!=None:
self.attributes['stroke-width']=stroke_width
- if stroke<>None:
+ if stroke!=None:
self.attributes['stroke']=stroke
class path(SVGelement):
@@ -525,14 +564,14 @@ class path(SVGelement):
a path is defined by a path object and optional width, stroke and fillcolor
"""
def __init__(self,pathdata,fill=None,stroke=None,stroke_width=None,id=None,**args):
- SVGelement.__init__(self,'path',{'d':str(pathdata)},**args)
- if stroke<>None:
+ SVGelement.__init__(self, 'path', {'d':str(pathdata)}, **args)
+ if stroke!=None:
self.attributes['stroke']=stroke
- if fill<>None:
+ if fill!=None:
self.attributes['fill']=fill
- if stroke_width<>None:
+ if stroke_width!=None:
self.attributes['stroke-width']=stroke_width
- if id<>None:
+ if id!=None:
self.attributes['id']=id
@@ -542,18 +581,18 @@ class text(SVGelement):
a text element can bge used for displaying text on the screen
"""
def __init__(self,x=None,y=None,text=None,font_size=None,font_family=None,text_anchor=None,**args):
- SVGelement.__init__(self,'text',**args)
- if x<>None:
+ SVGelement.__init__(self, 'text', **args)
+ if x!=None:
self.attributes['x']=x
- if y<>None:
+ if y!=None:
self.attributes['y']=y
- if font_size<>None:
+ if font_size!=None:
self.attributes['font-size']=font_size
- if font_family<>None:
+ if font_family!=None:
self.attributes['font-family']=font_family
- if text<>None:
+ if text!=None:
self.text=text
- if text_anchor<>None:
+ if text_anchor!=None:
self.attributes['text-anchor']=text_anchor
@@ -563,8 +602,8 @@ class textpath(SVGelement):
a textpath places a text on a path which is referenced by a link.
"""
def __init__(self,link,text=None,**args):
- SVGelement.__init__(self,'textPath',{'xlink:href':link},**args)
- if text<>None:
+ SVGelement.__init__(self, 'textPath', {'xlink:href':link}, **args)
+ if text!=None:
self.text=text
class pattern(SVGelement):
@@ -575,16 +614,16 @@ class pattern(SVGelement):
in x and y to cover the areas to be painted.
"""
def __init__(self,x=None,y=None,width=None,height=None,patternUnits=None,**args):
- SVGelement.__init__(self,'pattern',**args)
- if x<>None:
+ SVGelement.__init__(self, 'pattern', **args)
+ if x!=None:
self.attributes['x']=x
- if y<>None:
+ if y!=None:
self.attributes['y']=y
- if width<>None:
+ if width!=None:
self.attributes['width']=width
- if height<>None:
+ if height!=None:
self.attributes['height']=height
- if patternUnits<>None:
+ if patternUnits!=None:
self.attributes['patternUnits']=patternUnits
class title(SVGelement):
@@ -594,8 +633,8 @@ class title(SVGelement):
add at least one to the root svg element
"""
def __init__(self,text=None,**args):
- SVGelement.__init__(self,'title',**args)
- if text<>None:
+ SVGelement.__init__(self, 'title', **args)
+ if text!=None:
self.text=text
class description(SVGelement):
@@ -605,8 +644,8 @@ class description(SVGelement):
Add this element before adding other elements.
"""
def __init__(self,text=None,**args):
- SVGelement.__init__(self,'desc',**args)
- if text<>None:
+ SVGelement.__init__(self, 'desc', **args)
+ if text!=None:
self.text=text
class lineargradient(SVGelement):
@@ -616,16 +655,16 @@ class lineargradient(SVGelement):
stop elements van be added to define the gradient colors.
"""
def __init__(self,x1=None,y1=None,x2=None,y2=None,id=None,**args):
- SVGelement.__init__(self,'linearGradient',**args)
- if x1<>None:
+ SVGelement.__init__(self, 'linearGradient', **args)
+ if x1!=None:
self.attributes['x1']=x1
- if y1<>None:
+ if y1!=None:
self.attributes['y1']=y1
- if x2<>None:
+ if x2!=None:
self.attributes['x2']=x2
- if y2<>None:
+ if y2!=None:
self.attributes['y2']=y2
- if id<>None:
+ if id!=None:
self.attributes['id']=id
class radialgradient(SVGelement):
@@ -635,18 +674,18 @@ class radialgradient(SVGelement):
stop elements van be added to define the gradient colors.
"""
def __init__(self,cx=None,cy=None,r=None,fx=None,fy=None,id=None,**args):
- SVGelement.__init__(self,'radialGradient',**args)
- if cx<>None:
+ SVGelement.__init__(self, 'radialGradient', **args)
+ if cx!=None:
self.attributes['cx']=cx
- if cy<>None:
+ if cy!=None:
self.attributes['cy']=cy
- if r<>None:
+ if r!=None:
self.attributes['r']=r
- if fx<>None:
+ if fx!=None:
self.attributes['fx']=fx
- if fy<>None:
+ if fy!=None:
self.attributes['fy']=fy
- if id<>None:
+ if id!=None:
self.attributes['id']=id
class stop(SVGelement):
@@ -655,8 +694,8 @@ class stop(SVGelement):
Puts a stop color at the specified radius
"""
def __init__(self,offset,stop_color=None,**args):
- SVGelement.__init__(self,'stop',{'offset':offset},**args)
- if stop_color<>None:
+ SVGelement.__init__(self, 'stop', {'offset':offset}, **args)
+ if stop_color!=None:
self.attributes['stop-color']=stop_color
class style(SVGelement):
@@ -665,7 +704,7 @@ class style(SVGelement):
Add a CDATA element to this element for defing in line stylesheets etc..
"""
def __init__(self,type,cdata=None,**args):
- SVGelement.__init__(self,'style',{'type':type},cdata=cdata, **args)
+ SVGelement.__init__(self, 'style', {'type':type}, cdata=cdata, **args)
class image(SVGelement):
@@ -675,16 +714,11 @@ class image(SVGelement):
"""
def __init__(self,url,x=None,y=None,width=None,height=None,**args):
if width==None or height==None:
- if width<>None:
- raise ValueError, 'height is required'
- if height<>None:
- raise ValueError, 'width is required'
- else:
- raise ValueError, 'both height and width are required'
- SVGelement.__init__(self,'image',{'xlink:href':url,'width':width,'height':height},**args)
- if x<>None:
+ raise ValueError('both height and width are required')
+ SVGelement.__init__(self, 'image', {'xlink:href':url,'width':width,'height':height}, **args)
+ if x!=None:
self.attributes['x']=x
- if y<>None:
+ if y!=None:
self.attributes['y']=y
class cursor(SVGelement):
@@ -693,7 +727,7 @@ class cursor(SVGelement):
defines a custom cursor for a element or a drawing
"""
def __init__(self,url,**args):
- SVGelement.__init__(self,'cursor',{'xlink:href':url},**args)
+ SVGelement.__init__(self, 'cursor', {'xlink:href':url}, **args)
class marker(SVGelement):
@@ -703,18 +737,18 @@ class marker(SVGelement):
add an element to it which should be used as a marker.
"""
def __init__(self,id=None,viewBox=None,refx=None,refy=None,markerWidth=None,markerHeight=None,**args):
- SVGelement.__init__(self,'marker',**args)
- if id<>None:
+ SVGelement.__init__(self, 'marker', **args)
+ if id!=None:
self.attributes['id']=id
- if viewBox<>None:
+ if viewBox!=None:
self.attributes['viewBox']=_viewboxlist(viewBox)
- if refx<>None:
+ if refx!=None:
self.attributes['refX']=refx
- if refy<>None:
+ if refy!=None:
self.attributes['refY']=refy
- if markerWidth<>None:
+ if markerWidth!=None:
self.attributes['markerWidth']=markerWidth
- if markerHeight<>None:
+ if markerHeight!=None:
self.attributes['markerHeight']=markerHeight
class group(SVGelement):
@@ -724,8 +758,8 @@ class group(SVGelement):
g.addElement(SVGelement)
"""
def __init__(self,id=None,**args):
- SVGelement.__init__(self,'g',**args)
- if id<>None:
+ SVGelement.__init__(self, 'g', **args)
+ if id!=None:
self.attributes['id']=id
class symbol(SVGelement):
@@ -738,10 +772,10 @@ class symbol(SVGelement):
"""
def __init__(self,id=None,viewBox=None,**args):
- SVGelement.__init__(self,'symbol',**args)
- if id<>None:
+ SVGelement.__init__(self, 'symbol', **args)
+ if id!=None:
self.attributes['id']=id
- if viewBox<>None:
+ if viewBox!=None:
self.attributes['viewBox']=_viewboxlist(viewBox)
class defs(SVGelement):
@@ -750,7 +784,7 @@ class defs(SVGelement):
container for defining elements
"""
def __init__(self,**args):
- SVGelement.__init__(self,'defs',**args)
+ SVGelement.__init__(self, 'defs', **args)
class switch(SVGelement):
"""sw=switch(**args)
@@ -760,7 +794,7 @@ class switch(SVGelement):
Refer to the SVG specification for details.
"""
def __init__(self,**args):
- SVGelement.__init__(self,'switch',**args)
+ SVGelement.__init__(self, 'switch', **args)
class use(SVGelement):
@@ -769,15 +803,15 @@ class use(SVGelement):
references a symbol by linking to its id and its position, height and width
"""
def __init__(self,link,x=None,y=None,width=None,height=None,**args):
- SVGelement.__init__(self,'use',{'xlink:href':link},**args)
- if x<>None:
+ SVGelement.__init__(self, 'use', {'xlink:href':link}, **args)
+ if x!=None:
self.attributes['x']=x
- if y<>None:
+ if y!=None:
self.attributes['y']=y
- if width<>None:
+ if width!=None:
self.attributes['width']=width
- if height<>None:
+ if height!=None:
self.attributes['height']=height
@@ -788,15 +822,15 @@ class link(SVGelement):
a.addElement(SVGelement)
"""
def __init__(self,link='',**args):
- SVGelement.__init__(self,'a',{'xlink:href':link},**args)
+ SVGelement.__init__(self, 'a', {'xlink:href':link}, **args)
class view(SVGelement):
"""v=view(id,**args)
a view can be used to create a view with different attributes"""
def __init__(self,id=None,**args):
- SVGelement.__init__(self,'view',**args)
- if id<>None:
+ SVGelement.__init__(self, 'view', **args)
+ if id!=None:
self.attributes['id']=id
class script(SVGelement):
@@ -806,7 +840,7 @@ class script(SVGelement):
"""
def __init__(self,type,cdata=None,**args):
- SVGelement.__init__(self,'script',{'type':type},cdata=cdata,**args)
+ SVGelement.__init__(self, 'script', {'type':type}, cdata=cdata, **args)
class animate(SVGelement):
"""an=animate(attribute,from,to,during,**args)
@@ -814,12 +848,12 @@ class animate(SVGelement):
animates an attribute.
"""
def __init__(self,attribute,fr=None,to=None,dur=None,**args):
- SVGelement.__init__(self,'animate',{'attributeName':attribute},**args)
- if fr<>None:
+ SVGelement.__init__(self, 'animate', {'attributeName':attribute}, **args)
+ if fr!=None:
self.attributes['from']=fr
- if to<>None:
+ if to!=None:
self.attributes['to']=to
- if dur<>None:
+ if dur!=None:
self.attributes['dur']=dur
class animateMotion(SVGelement):
@@ -828,10 +862,10 @@ class animateMotion(SVGelement):
animates a SVGelement over the given path in dur seconds
"""
def __init__(self,pathdata,dur,**args):
- SVGelement.__init__(self,'animateMotion',**args)
- if pathdata<>None:
+ SVGelement.__init__(self, 'animateMotion', **args)
+ if pathdata!=None:
self.attributes['path']=str(pathdata)
- if dur<>None:
+ if dur!=None:
self.attributes['dur']=dur
class animateTransform(SVGelement):
@@ -840,15 +874,15 @@ class animateTransform(SVGelement):
transform an element from and to a value.
"""
def __init__(self,type=None,fr=None,to=None,dur=None,**args):
- SVGelement.__init__(self,'animateTransform',{'attributeName':'transform'},**args)
- #As far as I know the attributeName is always transform
- if type<>None:
+ SVGelement.__init__(self, 'animateTransform', {'attributeName':'transform'}, **args)
+ # As far as I know the attributeName is always transform
+ if type!=None:
self.attributes['type']=type
- if fr<>None:
+ if fr!=None:
self.attributes['from']=fr
- if to<>None:
+ if to!=None:
self.attributes['to']=to
- if dur<>None:
+ if dur!=None:
self.attributes['dur']=dur
class animateColor(SVGelement):
"""ac=animateColor(attribute,type,from,to,dur,**args)
@@ -856,14 +890,14 @@ class animateColor(SVGelement):
Animates the color of a element
"""
def __init__(self,attribute,type=None,fr=None,to=None,dur=None,**args):
- SVGelement.__init__(self,'animateColor',{'attributeName':attribute},**args)
- if type<>None:
+ SVGelement.__init__(self, 'animateColor', {'attributeName':attribute}, **args)
+ if type!=None:
self.attributes['type']=type
- if fr<>None:
+ if fr!=None:
self.attributes['from']=fr
- if to<>None:
+ if to!=None:
self.attributes['to']=to
- if dur<>None:
+ if dur!=None:
self.attributes['dur']=dur
class set(SVGelement):
"""st=set(attribute,to,during,**args)
@@ -871,10 +905,10 @@ class set(SVGelement):
sets an attribute to a value for a
"""
def __init__(self,attribute,to=None,dur=None,**args):
- SVGelement.__init__(self,'set',{'attributeName':attribute},**args)
- if to<>None:
+ SVGelement.__init__(self, 'set', {'attributeName':attribute}, **args)
+ if to!=None:
self.attributes['to']=to
- if dur<>None:
+ if dur!=None:
self.attributes['dur']=dur
@@ -895,12 +929,12 @@ class svg(SVGelement):
d.toXml()
"""
def __init__(self,viewBox=None, width=None, height=None,**args):
- SVGelement.__init__(self,'svg',**args)
- if viewBox<>None:
+ SVGelement.__init__(self, 'svg', **args)
+ if viewBox!=None:
self.attributes['viewBox']=_viewboxlist(viewBox)
- if width<>None:
+ if width!=None:
self.attributes['width']=width
- if height<>None:
+ if height!=None:
self.attributes['height']=height
self.namespace="http://www.w3.org/2000/svg"
@@ -918,27 +952,27 @@ class drawing:
def __init__(self, entity={}):
self.svg=None
self.entity = entity
- def setSVG(self,svg):
+ def setSVG(self, svg):
self.svg=svg
- #Voeg een element toe aan de grafiek toe.
+ # Voeg een element toe aan de grafiek toe.
if use_dom_implementation==0:
def toXml(self, filename='',compress=False):
- import cStringIO
- xml=cStringIO.StringIO()
+ import io
+ xml=io.StringIO()
xml.write("<?xml version='1.0' encoding='UTF-8'?>\n")
xml.write("<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\" \"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd\"")
if self.entity:
xml.write(" [\n")
- for item in self.entity.keys():
+ for item in list(self.entity.keys()):
xml.write("<!ENTITY %s \"%s\">\n" % (item, self.entity[item]))
xml.write("]")
xml.write(">\n")
- self.svg.toXml(0,xml)
+ self.svg.toXml(0, xml)
if not filename:
if compress:
import gzip
- f=cStringIO.StringIO()
- zf=gzip.GzipFile(fileobj=f,mode='wb')
+ f=io.StringIO()
+ zf=gzip.GzipFile(fileobj=f, mode='wb')
zf.write(xml.getvalue())
zf.close()
f.seek(0)
@@ -948,11 +982,11 @@ class drawing:
else:
if filename[-4:]=='svgz':
import gzip
- f=gzip.GzipFile(filename=filename,mode="wb", compresslevel=9)
+ f=gzip.GzipFile(filename=filename, mode="wb", compresslevel=9)
f.write(xml.getvalue())
f.close()
else:
- f=file(filename,'w')
+ f=file(filename, 'w')
f.write(xml.getvalue())
f.close()
@@ -963,40 +997,40 @@ class drawing:
writes a svg drawing to the screen or to a file
compresses if filename ends with svgz or if compress is true
"""
- doctype = implementation.createDocumentType('svg',"-//W3C//DTD SVG 1.0//EN""",'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd ')
+ doctype = implementation.createDocumentType('svg', "-//W3C//DTD SVG 1.0//EN""", 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd ')
global root
- #root is defined global so it can be used by the appender. Its also possible to use it as an arugument but
- #that is a bit messy.
- root=implementation.createDocument(None,None,doctype)
- #Create the xml document.
+ # root is defined global so it can be used by the appender. Its also possible to use it as an arugument but
+ # that is a bit messy.
+ root=implementation.createDocument(None, None, doctype)
+ # Create the xml document.
global appender
- def appender(element,elementroot):
+ def appender(element, elementroot):
"""This recursive function appends elements to an element and sets the attributes
and type. It stops when alle elements have been appended"""
if element.namespace:
- e=root.createElementNS(element.namespace,element.type)
+ e=root.createElementNS(element.namespace, element.type)
else:
e=root.createElement(element.type)
if element.text:
textnode=root.createTextNode(element.text)
e.appendChild(textnode)
- for attribute in element.attributes.keys(): #in element.attributes is supported from python 2.2
- e.setAttribute(attribute,str(element.attributes[attribute]))
+ for attribute in list(element.attributes.keys()): #in element.attributes is supported from python 2.2
+ e.setAttribute(attribute, str(element.attributes[attribute]))
if element.elements:
for el in element.elements:
- e=appender(el,e)
+ e=appender(el, e)
elementroot.appendChild(e)
return elementroot
- root=appender(self.svg,root)
+ root=appender(self.svg, root)
if not filename:
- import cStringIO
- xml=cStringIO.StringIO()
- PrettyPrint(root,xml)
+ import io
+ xml=io.StringIO()
+ PrettyPrint(root, xml)
if compress:
import gzip
- f=cStringIO.StringIO()
- zf=gzip.GzipFile(fileobj=f,mode='wb')
+ f=io.StringIO()
+ zf=gzip.GzipFile(fileobj=f, mode='wb')
zf.write(xml.getvalue())
zf.close()
f.seek(0)
@@ -1007,23 +1041,23 @@ class drawing:
try:
if filename[-4:]=='svgz':
import gzip
- import cStringIO
- xml=cStringIO.StringIO()
- PrettyPrint(root,xml)
- f=gzip.GzipFile(filename=filename,mode='wb',compresslevel=9)
+ import io
+ xml=io.StringIO()
+ PrettyPrint(root, xml)
+ f=gzip.GzipFile(filename=filename, mode='wb', compresslevel=9)
f.write(xml.getvalue())
f.close()
else:
- f=open(filename,'w')
- PrettyPrint(root,f)
+ f=open(filename, 'w')
+ PrettyPrint(root, f)
f.close()
except:
- print "Cannot write SVG file: " + filename
+ print(("Cannot write SVG file: " + filename))
def validate(self):
try:
import xml.parsers.xmlproc.xmlval
except:
- raise exceptions.ImportError,'PyXml is required for validating SVG'
+ raise exceptions.ImportError('PyXml is required for validating SVG')
svg=self.toXml()
xv=xml.parsers.xmlproc.xmlval.XMLValidator()
try:
@@ -1031,38 +1065,38 @@ class drawing:
except:
raise Exception("SVG is not well formed, see messages above")
else:
- print "SVG well formed"
+ print("SVG well formed")
if __name__=='__main__':
d=drawing()
- s=svg((0,0,100,100))
- r=rect(-100,-100,300,300,'cyan')
+ s=svg((0, 0, 100, 100))
+ r=rect(-100, -100, 300, 300, 'cyan')
s.addElement(r)
t=title('SVGdraw Demo')
s.addElement(t)
g=group('animations')
- e=ellipse(0,0,5,2)
+ e=ellipse(0, 0, 5, 2)
g.addElement(e)
- c=circle(0,0,1,'red')
+ c=circle(0, 0, 1, 'red')
g.addElement(c)
- pd=pathdata(0,-10)
+ pd=pathdata(0, -10)
for i in range(6):
- pd.relsmbezier(10,5,0,10)
- pd.relsmbezier(-10,5,0,10)
- an=animateMotion(pd,10)
+ pd.relsmbezier(10, 5, 0, 10)
+ pd.relsmbezier(-10, 5, 0, 10)
+ an=animateMotion(pd, 10)
an.attributes['rotate']='auto-reverse'
an.attributes['repeatCount']="indefinite"
g.addElement(an)
s.addElement(g)
- for i in range(20,120,20):
- u=use('#animations',i,0)
+ for i in range(20, 120, 20):
+ u=use('#animations', i, 0)
s.addElement(u)
- for i in range(0,120,20):
- for j in range(5,105,10):
- c=circle(i,j,1,'red','black',.5)
+ for i in range(0, 120, 20):
+ for j in range(5, 105, 10):
+ c=circle(i, j, 1, 'red', 'black', .5)
s.addElement(c)
d.setSVG(s)
- print d.toXml()
+ print((d.toXml()))
diff --git a/wqflask/utility/temp_data.py b/wqflask/utility/temp_data.py
index 5bf700c9..4144ae00 100644
--- a/wqflask/utility/temp_data.py
+++ b/wqflask/utility/temp_data.py
@@ -1,4 +1,3 @@
-from __future__ import print_function, division, absolute_import
from redis import Redis
import simplejson as json
@@ -20,6 +19,6 @@ class TempData(object):
if __name__ == "__main__":
redis = Redis()
- for key in redis.keys():
+ for key in list(redis.keys()):
for field in redis.hkeys(key):
print("{}.{}={}".format(key, field, redis.hget(key, field)))
diff --git a/wqflask/utility/tools.py b/wqflask/utility/tools.py
index 89d88516..65df59c3 100644
--- a/wqflask/utility/tools.py
+++ b/wqflask/utility/tools.py
@@ -15,7 +15,7 @@ OVERRIDES = {}
def app_set(command_id, value):
"""Set application wide value"""
- app.config.setdefault(command_id,value)
+ app.config.setdefault(command_id, value)
return value
def get_setting(command_id,guess=None):
@@ -45,7 +45,7 @@ def get_setting(command_id,guess=None):
def value(command):
if command:
# sys.stderr.write("Found "+command+"\n")
- app_set(command_id,command)
+ app_set(command_id, command)
return command
else:
return None
@@ -68,7 +68,7 @@ def get_setting(command_id,guess=None):
def get_setting_bool(id):
v = get_setting(id)
- if v not in [0,False,'False','FALSE',None]:
+ if v not in [0, False, 'False', 'FALSE', None]:
return True
return False
@@ -108,16 +108,16 @@ def js_path(module=None):
raise "No JS path found for "+module+" (if not in Guix check JS_GN_PATH)"
def reaper_command(guess=None):
- return get_setting("REAPER_COMMAND",guess)
+ return get_setting("REAPER_COMMAND", guess)
def gemma_command(guess=None):
- return assert_bin(get_setting("GEMMA_COMMAND",guess))
+ return assert_bin(get_setting("GEMMA_COMMAND", guess))
def gemma_wrapper_command(guess=None):
- return assert_bin(get_setting("GEMMA_WRAPPER_COMMAND",guess))
+ return assert_bin(get_setting("GEMMA_WRAPPER_COMMAND", guess))
def plink_command(guess=None):
- return assert_bin(get_setting("PLINK_COMMAND",guess))
+ return assert_bin(get_setting("PLINK_COMMAND", guess))
def flat_file_exists(subdir):
base = get_setting("GENENETWORK_FILES")
@@ -180,7 +180,7 @@ def locate(name, subdir=None):
raise Exception("Can not locate "+name+" in "+base)
def locate_phewas(name, subdir=None):
- return locate(name,'/phewas/'+subdir)
+ return locate(name, '/phewas/'+subdir)
def locate_ignore_error(name, subdir=None):
"""
@@ -204,7 +204,7 @@ def tempdir():
"""
Get UNIX TMPDIR by default
"""
- return valid_path(get_setting("TMPDIR","/tmp"))
+ return valid_path(get_setting("TMPDIR", "/tmp"))
BLUE = '\033[94m'
GREEN = '\033[92m'
@@ -214,20 +214,20 @@ ENDC = '\033[0m'
def show_settings():
from utility.tools import LOG_LEVEL
- print("Set global log level to "+BLUE+LOG_LEVEL+ENDC)
+ print(("Set global log level to "+BLUE+LOG_LEVEL+ENDC))
log_level = getattr(logging, LOG_LEVEL.upper())
logging.basicConfig(level=log_level)
logger.info(OVERRIDES)
logger.info(BLUE+"Mr. Mojo Risin 2"+ENDC)
- print "runserver.py: ****** Webserver configuration - k,v pairs from app.config ******"
- keylist = app.config.keys()
+ keylist = list(app.config.keys())
+ print("runserver.py: ****** Webserver configuration - k,v pairs from app.config ******")
keylist.sort()
for k in keylist:
try:
- print("%s: %s%s%s%s" % (k,BLUE,BOLD,get_setting(k),ENDC))
+ print(("%s: %s%s%s%s" % (k, BLUE, BOLD, get_setting(k), ENDC)))
except:
- print("%s: %s%s%s%s" % (k,GREEN,BOLD,app.config[k],ENDC))
+ print(("%s: %s%s%s%s" % (k, GREEN, BOLD, app.config[k], ENDC)))
# Cached values
@@ -267,11 +267,11 @@ ORCID_CLIENT_SECRET = get_setting('ORCID_CLIENT_SECRET')
ORCID_AUTH_URL = None
if ORCID_CLIENT_ID != 'UNKNOWN' and ORCID_CLIENT_SECRET:
ORCID_AUTH_URL = "https://orcid.org/oauth/authorize?response_type=code&scope=/authenticate&show_login=true&client_id=" + \
- ORCID_CLIENT_ID+"&client_secret="+ORCID_CLIENT_SECRET
+ ORCID_CLIENT_ID+"&client_secret="+ORCID_CLIENT_SECRET + "&redirect_uri=" + GN2_BRANCH_URL + "n/login/orcid_oauth2"
ORCID_TOKEN_URL = get_setting('ORCID_TOKEN_URL')
-# ELASTICSEARCH_HOST = get_setting('ELASTICSEARCH_HOST')
-# ELASTICSEARCH_PORT = get_setting('ELASTICSEARCH_PORT')
+ELASTICSEARCH_HOST = get_setting('ELASTICSEARCH_HOST')
+ELASTICSEARCH_PORT = get_setting('ELASTICSEARCH_PORT')
# import utility.elasticsearch_tools as es
# es.test_elasticsearch_connection()
@@ -279,10 +279,10 @@ SMTP_CONNECT = get_setting('SMTP_CONNECT')
SMTP_USERNAME = get_setting('SMTP_USERNAME')
SMTP_PASSWORD = get_setting('SMTP_PASSWORD')
-REAPER_COMMAND = app_set("REAPER_COMMAND",reaper_command())
-GEMMA_COMMAND = app_set("GEMMA_COMMAND",gemma_command())
+REAPER_COMMAND = app_set("REAPER_COMMAND", reaper_command())
+GEMMA_COMMAND = app_set("GEMMA_COMMAND", gemma_command())
assert(GEMMA_COMMAND is not None)
-PLINK_COMMAND = app_set("PLINK_COMMAND",plink_command())
+PLINK_COMMAND = app_set("PLINK_COMMAND", plink_command())
GEMMA_WRAPPER_COMMAND = gemma_wrapper_command()
TEMPDIR = tempdir() # defaults to UNIX TMPDIR
assert_dir(TEMPDIR)
@@ -295,11 +295,11 @@ assert_dir(JS_GUIX_PATH+'/cytoscape-panzoom')
CSS_PATH = JS_GUIX_PATH # The CSS is bundled together with the JS
# assert_dir(JS_PATH)
-JS_TWITTER_POST_FETCHER_PATH = get_setting("JS_TWITTER_POST_FETCHER_PATH",js_path("javascript-twitter-post-fetcher"))
+JS_TWITTER_POST_FETCHER_PATH = get_setting("JS_TWITTER_POST_FETCHER_PATH", js_path("javascript-twitter-post-fetcher"))
assert_dir(JS_TWITTER_POST_FETCHER_PATH)
assert_file(JS_TWITTER_POST_FETCHER_PATH+"/js/twitterFetcher_min.js")
-JS_CYTOSCAPE_PATH = get_setting("JS_CYTOSCAPE_PATH",js_path("cytoscape"))
+JS_CYTOSCAPE_PATH = get_setting("JS_CYTOSCAPE_PATH", js_path("cytoscape"))
assert_dir(JS_CYTOSCAPE_PATH)
assert_file(JS_CYTOSCAPE_PATH+'/cytoscape.min.js')
diff --git a/wqflask/utility/type_checking.py b/wqflask/utility/type_checking.py
index f15b17e2..6b029317 100644
--- a/wqflask/utility/type_checking.py
+++ b/wqflask/utility/type_checking.py
@@ -23,20 +23,20 @@ def is_str(value):
except:
return False
-def get_float(vars,name,default=None):
- if name in vars:
- if is_float(vars[name]):
- return float(vars[name])
+def get_float(vars_obj,name,default=None):
+ if name in vars_obj:
+ if is_float(vars_obj[name]):
+ return float(vars_obj[name])
return default
-def get_int(vars,name,default=None):
- if name in vars:
- if is_int(vars[name]):
- return float(vars[name])
+def get_int(vars_obj,name,default=None):
+ if name in vars_obj:
+ if is_int(vars_obj[name]):
+ return float(vars_obj[name])
return default
-def get_string(vars,name,default=None):
- if name in vars:
- if not vars[name] is None:
- return str(vars[name])
+def get_string(vars_obj,name,default=None):
+ if name in vars_obj:
+ if not vars_obj[name] is None:
+ return str(vars_obj[name])
return default
diff --git a/wqflask/utility/webqtlUtil.py b/wqflask/utility/webqtlUtil.py
index 53661ae4..5681fadf 100644
--- a/wqflask/utility/webqtlUtil.py
+++ b/wqflask/utility/webqtlUtil.py
@@ -41,22 +41,22 @@ ParInfo ={
'C57BL-6JxC57BL-6NJF2':['', '', 'C57BL/6J', 'C57BL/6NJ'],
'BXD300':['B6D2F1', 'D2B6F1', 'C57BL/6J', 'DBA/2J'],
'B6BTBRF2':['B6BTBRF1', 'BTBRB6F1', 'C57BL/6J', 'BTBRT<+>tf/J'],
-'BHHBF2':['B6HF2','HB6F2','C57BL/6J','C3H/HeJ'],
-'BHF2':['B6HF2','HB6F2','C57BL/6J','C3H/HeJ'],
+'BHHBF2':['B6HF2', 'HB6F2', 'C57BL/6J', 'C3H/HeJ'],
+'BHF2':['B6HF2', 'HB6F2', 'C57BL/6J', 'C3H/HeJ'],
'B6D2F2':['B6D2F1', 'D2B6F1', 'C57BL/6J', 'DBA/2J'],
'BDF2-1999':['B6D2F2', 'D2B6F2', 'C57BL/6J', 'DBA/2J'],
'BDF2-2005':['B6D2F1', 'D2B6F1', 'C57BL/6J', 'DBA/2J'],
-'CTB6F2':['CTB6F2','B6CTF2','C57BL/6J','Castaneous'],
+'CTB6F2':['CTB6F2', 'B6CTF2', 'C57BL/6J', 'Castaneous'],
'CXB':['CBF1', 'BCF1', 'C57BL/6ByJ', 'BALB/cByJ'],
'AXBXA':['ABF1', 'BAF1', 'C57BL/6J', 'A/J'],
'AXB':['ABF1', 'BAF1', 'C57BL/6J', 'A/J'],
'BXA':['BAF1', 'ABF1', 'C57BL/6J', 'A/J'],
'LXS':['LSF1', 'SLF1', 'ISS', 'ILS'],
'HXBBXH':['SHR_BNF1', 'BN_SHRF1', 'BN-Lx/Cub', 'SHR/OlaIpcv'],
-'BayXSha':['BayXShaF1', 'ShaXBayF1', 'Bay-0','Shahdara'],
-'ColXBur':['ColXBurF1', 'BurXColF1', 'Col-0','Bur-0'],
-'ColXCvi':['ColXCviF1', 'CviXColF1', 'Col-0','Cvi'],
-'SXM':['SMF1', 'MSF1', 'Steptoe','Morex'],
+'BayXSha':['BayXShaF1', 'ShaXBayF1', 'Bay-0', 'Shahdara'],
+'ColXBur':['ColXBurF1', 'BurXColF1', 'Col-0', 'Bur-0'],
+'ColXCvi':['ColXCviF1', 'CviXColF1', 'Col-0', 'Cvi'],
+'SXM':['SMF1', 'MSF1', 'Steptoe', 'Morex'],
'HRDP':['SHR_BNF1', 'BN_SHRF1', 'BN-Lx/Cub', 'SHR/OlaIpcv']
}
@@ -64,7 +64,7 @@ ParInfo ={
# Accessory Functions
#########################################
-def genRandStr(prefix = "", length=8, chars=string.letters+string.digits):
+def genRandStr(prefix = "", length=8, chars=string.ascii_letters+string.digits):
from random import choice
_str = prefix[:]
for i in range(length):
@@ -91,7 +91,7 @@ def readLineCSV(line): ### dcrowell July 2008
returnList[0]=returnList[0][1:]
return returnList
-def cmpEigenValue(A,B):
+def cmpEigenValue(A, B):
try:
if A[0] > B[0]:
return -1
@@ -107,7 +107,7 @@ def hasAccessToConfidentialPhenotypeTrait(privilege, userName, authorized_users)
if webqtlConfig.USERDICT[privilege] > webqtlConfig.USERDICT['user']:
access_to_confidential_phenotype_trait = 1
else:
- AuthorizedUsersList=map(string.strip, string.split(authorized_users, ','))
- if AuthorizedUsersList.__contains__(userName):
+ AuthorizedUsersList=[x.strip() for x in authorized_users.split(',')]
+ if userName in AuthorizedUsersList:
access_to_confidential_phenotype_trait = 1
- return access_to_confidential_phenotype_trait \ No newline at end of file
+ return access_to_confidential_phenotype_trait
diff --git a/wqflask/wqflask/__init__.py b/wqflask/wqflask/__init__.py
index 62e98b36..0564cfa7 100644
--- a/wqflask/wqflask/__init__.py
+++ b/wqflask/wqflask/__init__.py
@@ -1,25 +1,52 @@
-from __future__ import absolute_import, division, print_function
-
-import sys
+"""Entry point for flask app"""
+# pylint: disable=C0413,E0611
+import time
import jinja2
+from flask import g
from flask import Flask
from utility import formatting
-
-import logging
-logger = logging.getLogger(__name__ )
-logging.basicConfig(level=logging.INFO)
+from wqflask.markdown_routes import glossary_blueprint
+from wqflask.markdown_routes import references_blueprint
+from wqflask.markdown_routes import links_blueprint
+from wqflask.markdown_routes import policies_blueprint
+from wqflask.markdown_routes import environments_blueprint
+from wqflask.markdown_routes import facilities_blueprint
app = Flask(__name__)
-app.config.from_object('cfg.default_settings') # Get the defaults from cfg.default_settings
-app.config.from_envvar('GN2_SETTINGS') # See http://flask.pocoo.org/docs/config/#configuring-from-files
+# See http://flask.pocoo.org/docs/config/#configuring-from-files
# Note no longer use the badly named WQFLASK_OVERRIDES (nyi)
-
+app.config.from_envvar('GN2_SETTINGS')
app.jinja_env.globals.update(
- undefined = jinja2.StrictUndefined,
- numify = formatting.numify
-)
+ undefined=jinja2.StrictUndefined,
+ numify=formatting.numify)
+
+# Registering blueprints
+app.register_blueprint(glossary_blueprint, url_prefix="/glossary")
+app.register_blueprint(references_blueprint, url_prefix="/references")
+app.register_blueprint(links_blueprint, url_prefix="/links")
+app.register_blueprint(policies_blueprint, url_prefix="/policies")
+app.register_blueprint(environments_blueprint, url_prefix="/environments")
+app.register_blueprint(facilities_blueprint, url_prefix="/facilities")
+
+@app.before_request
+def before_request():
+ g.request_start_time = time.time()
+ g.request_time = lambda: "%.5fs" % (time.time() - g.request_start_time)
+
from wqflask.api import router
-import wqflask.views \ No newline at end of file
+from wqflask import group_manager
+from wqflask import resource_manager
+from wqflask import search_results
+from wqflask import export_traits
+from wqflask import gsearch
+from wqflask import update_search_results
+from wqflask import docs
+from wqflask import news
+from wqflask import db_info
+from wqflask import user_login
+from wqflask import user_session
+
+import wqflask.views
diff --git a/wqflask/wqflask/api/correlation.py b/wqflask/wqflask/api/correlation.py
index 66eb94ac..f5b50dcd 100644
--- a/wqflask/wqflask/api/correlation.py
+++ b/wqflask/wqflask/api/correlation.py
@@ -1,237 +1,235 @@
-from __future__ import absolute_import, division, print_function
-
-import collections
-
-import scipy
-
-from MySQLdb import escape_string as escape
-
-from flask import g
-
-from base import data_set
-from base.trait import GeneralTrait, retrieve_sample_data
-
-from wqflask.correlation.show_corr_results import generate_corr_json
-from wqflask.correlation import correlation_functions
-
-from utility import webqtlUtil, helper_functions, corr_result_helpers
-from utility.benchmark import Bench
-
-import utility.logger
-logger = utility.logger.getLogger(__name__ )
-
-def do_correlation(start_vars):
- assert('db' in start_vars)
- assert('target_db' in start_vars)
- assert('trait_id' in start_vars)
-
- this_dataset = data_set.create_dataset(dataset_name = start_vars['db'])
- target_dataset = data_set.create_dataset(dataset_name = start_vars['target_db'])
- this_trait = GeneralTrait(dataset = this_dataset, name = start_vars['trait_id'])
- this_trait = retrieve_sample_data(this_trait, this_dataset)
-
- corr_params = init_corr_params(start_vars)
-
- corr_results = calculate_results(this_trait, this_dataset, target_dataset, corr_params)
- #corr_results = collections.OrderedDict(sorted(corr_results.items(), key=lambda t: -abs(t[1][0])))
-
- final_results = []
- for _trait_counter, trait in enumerate(corr_results.keys()[:corr_params['return_count']]):
- if corr_params['type'] == "tissue":
- [sample_r, num_overlap, sample_p, symbol] = corr_results[trait]
- result_dict = {
- "trait" : trait,
- "sample_r" : sample_r,
- "#_strains" : num_overlap,
- "p_value" : sample_p,
- "symbol" : symbol
- }
- elif corr_params['type'] == "literature" or corr_params['type'] == "lit":
- [gene_id, sample_r] = corr_results[trait]
- result_dict = {
- "trait" : trait,
- "sample_r" : sample_r,
- "gene_id" : gene_id
- }
- else:
- [sample_r, sample_p, num_overlap] = corr_results[trait]
- result_dict = {
- "trait" : trait,
- "sample_r" : sample_r,
- "#_strains" : num_overlap,
- "p_value" : sample_p
- }
-
- final_results.append(result_dict)
-
- # json_corr_results = generate_corr_json(final_corr_results, this_trait, this_dataset, target_dataset, for_api = True)
-
- return final_results
-
-def calculate_results(this_trait, this_dataset, target_dataset, corr_params):
- corr_results = {}
-
- target_dataset.get_trait_data()
-
- if corr_params['type'] == "tissue":
- trait_symbol_dict = this_dataset.retrieve_genes("Symbol")
- corr_results = do_tissue_correlation_for_all_traits(this_trait, trait_symbol_dict, corr_params)
- sorted_results = collections.OrderedDict(sorted(corr_results.items(),
- key=lambda t: -abs(t[1][1])))
- elif corr_params['type'] == "literature" or corr_params['type'] == "lit": #ZS: Just so a user can use either "lit" or "literature"
- trait_geneid_dict = this_dataset.retrieve_genes("GeneId")
- corr_results = do_literature_correlation_for_all_traits(this_trait, this_dataset, trait_geneid_dict, corr_params)
- sorted_results = collections.OrderedDict(sorted(corr_results.items(),
- key=lambda t: -abs(t[1][1])))
- else:
- for target_trait, target_vals in target_dataset.trait_data.iteritems():
- result = get_sample_r_and_p_values(this_trait, this_dataset, target_vals, target_dataset, corr_params['type'])
- if result is not None:
- corr_results[target_trait] = result
-
- sorted_results = collections.OrderedDict(sorted(corr_results.items(), key=lambda t: -abs(t[1][0])))
-
- return sorted_results
-
-def do_tissue_correlation_for_all_traits(this_trait, trait_symbol_dict, corr_params, tissue_dataset_id=1):
- #Gets tissue expression values for the primary trait
- primary_trait_tissue_vals_dict = correlation_functions.get_trait_symbol_and_tissue_values(symbol_list = [this_trait.symbol])
-
- if this_trait.symbol.lower() in primary_trait_tissue_vals_dict:
- primary_trait_tissue_values = primary_trait_tissue_vals_dict[this_trait.symbol.lower()]
-
- corr_result_tissue_vals_dict = correlation_functions.get_trait_symbol_and_tissue_values(symbol_list=trait_symbol_dict.values())
-
- tissue_corr_data = {}
- for trait, symbol in trait_symbol_dict.iteritems():
- if symbol and symbol.lower() in corr_result_tissue_vals_dict:
- this_trait_tissue_values = corr_result_tissue_vals_dict[symbol.lower()]
-
- result = correlation_functions.cal_zero_order_corr_for_tiss(primary_trait_tissue_values,
- this_trait_tissue_values,
- corr_params['method'])
-
- tissue_corr_data[trait] = [result[0], result[1], result[2], symbol]
-
- return tissue_corr_data
-
-def do_literature_correlation_for_all_traits(this_trait, target_dataset, trait_geneid_dict, corr_params):
- input_trait_mouse_gene_id = convert_to_mouse_gene_id(target_dataset.group.species.lower(), this_trait.geneid)
-
- lit_corr_data = {}
- for trait, gene_id in trait_geneid_dict.iteritems():
- mouse_gene_id = convert_to_mouse_gene_id(target_dataset.group.species.lower(), gene_id)
-
- if mouse_gene_id and str(mouse_gene_id).find(";") == -1:
- result = g.db.execute(
- """SELECT value
- FROM LCorrRamin3
- WHERE GeneId1='%s' and
- GeneId2='%s'
- """ % (escape(mouse_gene_id), escape(input_trait_mouse_gene_id))
- ).fetchone()
- if not result:
- result = g.db.execute("""SELECT value
- FROM LCorrRamin3
- WHERE GeneId2='%s' and
- GeneId1='%s'
- """ % (escape(mouse_gene_id), escape(input_trait_mouse_gene_id))
- ).fetchone()
- if result:
- lit_corr = result.value
- lit_corr_data[trait] = [gene_id, lit_corr]
- else:
- lit_corr_data[trait] = [gene_id, 0]
- else:
- lit_corr_data[trait] = [gene_id, 0]
-
- return lit_corr_data
-
-def get_sample_r_and_p_values(this_trait, this_dataset, target_vals, target_dataset, type):
- """
- Calculates the sample r (or rho) and p-value
-
- Given a primary trait and a target trait's sample values,
- calculates either the pearson r or spearman rho and the p-value
- using the corresponding scipy functions.
- """
-
- this_trait_vals = []
- shared_target_vals = []
- for i, sample in enumerate(target_dataset.group.samplelist):
- if sample in this_trait.data:
- this_sample_value = this_trait.data[sample].value
- target_sample_value = target_vals[i]
- this_trait_vals.append(this_sample_value)
- shared_target_vals.append(target_sample_value)
-
- this_trait_vals, shared_target_vals, num_overlap = corr_result_helpers.normalize_values(this_trait_vals, shared_target_vals)
-
- if type == 'pearson':
- sample_r, sample_p = scipy.stats.pearsonr(this_trait_vals, shared_target_vals)
- else:
- sample_r, sample_p = scipy.stats.spearmanr(this_trait_vals, shared_target_vals)
-
- if num_overlap > 5:
- if scipy.isnan(sample_r):
- return None
- else:
- return [sample_r, sample_p, num_overlap]
-
-def convert_to_mouse_gene_id(species=None, gene_id=None):
- """If the species is rat or human, translate the gene_id to the mouse geneid
-
- If there is no input gene_id or there's no corresponding mouse gene_id, return None
-
- """
- if not gene_id:
- return None
-
- mouse_gene_id = None
-
- if species == 'mouse':
- mouse_gene_id = gene_id
-
- elif species == 'rat':
-
- query = """SELECT mouse
- FROM GeneIDXRef
- WHERE rat='%s'""" % escape(gene_id)
-
- result = g.db.execute(query).fetchone()
- if result != None:
- mouse_gene_id = result.mouse
-
- elif species == 'human':
-
- query = """SELECT mouse
- FROM GeneIDXRef
- WHERE human='%s'""" % escape(gene_id)
-
- result = g.db.execute(query).fetchone()
- if result != None:
- mouse_gene_id = result.mouse
-
- return mouse_gene_id
-
-def init_corr_params(start_vars):
- method = "pearson"
- if 'method' in start_vars:
- method = start_vars['method']
-
- type = "sample"
- if 'type' in start_vars:
- type = start_vars['type']
-
- return_count = 500
- if 'return_count' in start_vars:
- assert(start_vars['return_count'].isdigit())
- return_count = int(start_vars['return_count'])
-
- corr_params = {
- 'method' : method,
- 'type' : type,
- 'return_count' : return_count
- }
-
- return corr_params \ No newline at end of file
+import collections
+
+import scipy
+
+from utility.db_tools import escape
+
+from flask import g
+
+from base import data_set
+from base.trait import create_trait, retrieve_sample_data
+
+from wqflask.correlation.show_corr_results import generate_corr_json
+from wqflask.correlation import correlation_functions
+
+from utility import webqtlUtil, helper_functions, corr_result_helpers
+from utility.benchmark import Bench
+
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
+def do_correlation(start_vars):
+ assert('db' in start_vars)
+ assert('target_db' in start_vars)
+ assert('trait_id' in start_vars)
+
+ this_dataset = data_set.create_dataset(dataset_name = start_vars['db'])
+ target_dataset = data_set.create_dataset(dataset_name = start_vars['target_db'])
+ this_trait = create_trait(dataset = this_dataset, name = start_vars['trait_id'])
+ this_trait = retrieve_sample_data(this_trait, this_dataset)
+
+ corr_params = init_corr_params(start_vars)
+
+ corr_results = calculate_results(this_trait, this_dataset, target_dataset, corr_params)
+ #corr_results = collections.OrderedDict(sorted(corr_results.items(), key=lambda t: -abs(t[1][0])))
+
+ final_results = []
+ for _trait_counter, trait in enumerate(list(corr_results.keys())[:corr_params['return_count']]):
+ if corr_params['type'] == "tissue":
+ [sample_r, num_overlap, sample_p, symbol] = corr_results[trait]
+ result_dict = {
+ "trait" : trait,
+ "sample_r" : sample_r,
+ "#_strains" : num_overlap,
+ "p_value" : sample_p,
+ "symbol" : symbol
+ }
+ elif corr_params['type'] == "literature" or corr_params['type'] == "lit":
+ [gene_id, sample_r] = corr_results[trait]
+ result_dict = {
+ "trait" : trait,
+ "sample_r" : sample_r,
+ "gene_id" : gene_id
+ }
+ else:
+ [sample_r, sample_p, num_overlap] = corr_results[trait]
+ result_dict = {
+ "trait" : trait,
+ "sample_r" : sample_r,
+ "#_strains" : num_overlap,
+ "p_value" : sample_p
+ }
+
+ final_results.append(result_dict)
+
+ # json_corr_results = generate_corr_json(final_corr_results, this_trait, this_dataset, target_dataset, for_api = True)
+
+ return final_results
+
+def calculate_results(this_trait, this_dataset, target_dataset, corr_params):
+ corr_results = {}
+
+ target_dataset.get_trait_data()
+
+ if corr_params['type'] == "tissue":
+ trait_symbol_dict = this_dataset.retrieve_genes("Symbol")
+ corr_results = do_tissue_correlation_for_all_traits(this_trait, trait_symbol_dict, corr_params)
+ sorted_results = collections.OrderedDict(sorted(list(corr_results.items()),
+ key=lambda t: -abs(t[1][1])))
+ elif corr_params['type'] == "literature" or corr_params['type'] == "lit": #ZS: Just so a user can use either "lit" or "literature"
+ trait_geneid_dict = this_dataset.retrieve_genes("GeneId")
+ corr_results = do_literature_correlation_for_all_traits(this_trait, this_dataset, trait_geneid_dict, corr_params)
+ sorted_results = collections.OrderedDict(sorted(list(corr_results.items()),
+ key=lambda t: -abs(t[1][1])))
+ else:
+ for target_trait, target_vals in list(target_dataset.trait_data.items()):
+ result = get_sample_r_and_p_values(this_trait, this_dataset, target_vals, target_dataset, corr_params['type'])
+ if result is not None:
+ corr_results[target_trait] = result
+
+ sorted_results = collections.OrderedDict(sorted(list(corr_results.items()), key=lambda t: -abs(t[1][0])))
+
+ return sorted_results
+
+def do_tissue_correlation_for_all_traits(this_trait, trait_symbol_dict, corr_params, tissue_dataset_id=1):
+ #Gets tissue expression values for the primary trait
+ primary_trait_tissue_vals_dict = correlation_functions.get_trait_symbol_and_tissue_values(symbol_list = [this_trait.symbol])
+
+ if this_trait.symbol.lower() in primary_trait_tissue_vals_dict:
+ primary_trait_tissue_values = primary_trait_tissue_vals_dict[this_trait.symbol.lower()]
+
+ corr_result_tissue_vals_dict = correlation_functions.get_trait_symbol_and_tissue_values(symbol_list=list(trait_symbol_dict.values()))
+
+ tissue_corr_data = {}
+ for trait, symbol in list(trait_symbol_dict.items()):
+ if symbol and symbol.lower() in corr_result_tissue_vals_dict:
+ this_trait_tissue_values = corr_result_tissue_vals_dict[symbol.lower()]
+
+ result = correlation_functions.cal_zero_order_corr_for_tiss(primary_trait_tissue_values,
+ this_trait_tissue_values,
+ corr_params['method'])
+
+ tissue_corr_data[trait] = [result[0], result[1], result[2], symbol]
+
+ return tissue_corr_data
+
+def do_literature_correlation_for_all_traits(this_trait, target_dataset, trait_geneid_dict, corr_params):
+ input_trait_mouse_gene_id = convert_to_mouse_gene_id(target_dataset.group.species.lower(), this_trait.geneid)
+
+ lit_corr_data = {}
+ for trait, gene_id in list(trait_geneid_dict.items()):
+ mouse_gene_id = convert_to_mouse_gene_id(target_dataset.group.species.lower(), gene_id)
+
+ if mouse_gene_id and str(mouse_gene_id).find(";") == -1:
+ result = g.db.execute(
+ """SELECT value
+ FROM LCorrRamin3
+ WHERE GeneId1='%s' and
+ GeneId2='%s'
+ """ % (escape(mouse_gene_id), escape(input_trait_mouse_gene_id))
+ ).fetchone()
+ if not result:
+ result = g.db.execute("""SELECT value
+ FROM LCorrRamin3
+ WHERE GeneId2='%s' and
+ GeneId1='%s'
+ """ % (escape(mouse_gene_id), escape(input_trait_mouse_gene_id))
+ ).fetchone()
+ if result:
+ lit_corr = result.value
+ lit_corr_data[trait] = [gene_id, lit_corr]
+ else:
+ lit_corr_data[trait] = [gene_id, 0]
+ else:
+ lit_corr_data[trait] = [gene_id, 0]
+
+ return lit_corr_data
+
+def get_sample_r_and_p_values(this_trait, this_dataset, target_vals, target_dataset, type):
+ """
+ Calculates the sample r (or rho) and p-value
+
+ Given a primary trait and a target trait's sample values,
+ calculates either the pearson r or spearman rho and the p-value
+ using the corresponding scipy functions.
+ """
+
+ this_trait_vals = []
+ shared_target_vals = []
+ for i, sample in enumerate(target_dataset.group.samplelist):
+ if sample in this_trait.data:
+ this_sample_value = this_trait.data[sample].value
+ target_sample_value = target_vals[i]
+ this_trait_vals.append(this_sample_value)
+ shared_target_vals.append(target_sample_value)
+
+ this_trait_vals, shared_target_vals, num_overlap = corr_result_helpers.normalize_values(this_trait_vals, shared_target_vals)
+
+ if type == 'pearson':
+ sample_r, sample_p = scipy.stats.pearsonr(this_trait_vals, shared_target_vals)
+ else:
+ sample_r, sample_p = scipy.stats.spearmanr(this_trait_vals, shared_target_vals)
+
+ if num_overlap > 5:
+ if scipy.isnan(sample_r):
+ return None
+ else:
+ return [sample_r, sample_p, num_overlap]
+
+def convert_to_mouse_gene_id(species=None, gene_id=None):
+ """If the species is rat or human, translate the gene_id to the mouse geneid
+
+ If there is no input gene_id or there's no corresponding mouse gene_id, return None
+
+ """
+ if not gene_id:
+ return None
+
+ mouse_gene_id = None
+
+ if species == 'mouse':
+ mouse_gene_id = gene_id
+
+ elif species == 'rat':
+
+ query = """SELECT mouse
+ FROM GeneIDXRef
+ WHERE rat='%s'""" % escape(gene_id)
+
+ result = g.db.execute(query).fetchone()
+ if result != None:
+ mouse_gene_id = result.mouse
+
+ elif species == 'human':
+
+ query = """SELECT mouse
+ FROM GeneIDXRef
+ WHERE human='%s'""" % escape(gene_id)
+
+ result = g.db.execute(query).fetchone()
+ if result != None:
+ mouse_gene_id = result.mouse
+
+ return mouse_gene_id
+
+def init_corr_params(start_vars):
+ method = "pearson"
+ if 'method' in start_vars:
+ method = start_vars['method']
+
+ type = "sample"
+ if 'type' in start_vars:
+ type = start_vars['type']
+
+ return_count = 500
+ if 'return_count' in start_vars:
+ assert(start_vars['return_count'].isdigit())
+ return_count = int(start_vars['return_count'])
+
+ corr_params = {
+ 'method' : method,
+ 'type' : type,
+ 'return_count' : return_count
+ }
+
+ return corr_params
diff --git a/wqflask/wqflask/api/gen_menu.py b/wqflask/wqflask/api/gen_menu.py
index c7bcb65d..18afc5ad 100644
--- a/wqflask/wqflask/api/gen_menu.py
+++ b/wqflask/wqflask/api/gen_menu.py
@@ -1,21 +1,10 @@
-from __future__ import print_function, division
-
-import sys
-
from flask import g
-from utility.tools import locate, locate_ignore_error, TEMPDIR, SQL_URI
-from utility.benchmark import Bench
-
-import MySQLdb
-
-import urlparse
-
-import utility.logger
-logger = utility.logger.getLogger(__name__ )
def gen_dropdown_json():
- """Generates and outputs (as json file) the data for the main dropdown menus on the home page"""
+ """Generates and outputs (as json file) the data for the main dropdown menus on
+ the home page
+ """
species = get_species()
groups = get_groups(species)
@@ -29,11 +18,11 @@ def gen_dropdown_json():
return data
+
def get_species():
"""Build species list"""
- results = g.db.execute("""SELECT Name, MenuName
- FROM Species
- ORDER BY OrderId""").fetchall()
+ results = g.db.execute(
+ "SELECT Name, MenuName FROM Species ORDER BY OrderId").fetchall()
species = []
for result in results:
@@ -41,75 +30,78 @@ def get_species():
return species
+
def get_groups(species):
"""Build groups list"""
groups = {}
for species_name, _species_full_name in species:
groups[species_name] = []
- results = g.db.execute("""SELECT InbredSet.Name, InbredSet.FullName, IFNULL(InbredSet.Family, 'None')
- FROM InbredSet, Species
- WHERE Species.Name = '{}' AND
- InbredSet.SpeciesId = Species.Id
- GROUP by InbredSet.Name
- ORDER BY IFNULL(InbredSet.FamilyOrder, InbredSet.FullName) ASC, IFNULL(InbredSet.Family, InbredSet.FullName) ASC, InbredSet.FullName ASC, InbredSet.MenuOrderId ASC""".format(species_name)).fetchall()
+ results = g.db.execute(
+ ("SELECT InbredSet.Name, InbredSet.FullName, "
+ "IFNULL(InbredSet.Family, 'None') "
+ "FROM InbredSet, Species WHERE Species.Name = '{}' "
+ "AND InbredSet.SpeciesId = Species.Id GROUP by InbredSet.Name "
+ "ORDER BY IFNULL(InbredSet.FamilyOrder, InbredSet.FullName) "
+ "ASC, IFNULL(InbredSet.Family, InbredSet.FullName) ASC, "
+ "InbredSet.FullName ASC, InbredSet.MenuOrderId ASC")
+ .format(species_name)).fetchall()
for result in results:
family_name = "Family:" + str(result[2])
- groups[species_name].append([str(result[0]), str(result[1]), family_name])
+ groups[species_name].append(
+ [str(result[0]), str(result[1]), family_name])
return groups
+
def get_types(groups):
"""Build types list"""
types = {}
- for species, group_dict in groups.iteritems():
+ for species, group_dict in list(groups.items()):
types[species] = {}
for group_name, _group_full_name, _family_name in group_dict:
if phenotypes_exist(group_name):
- types[species][group_name] = [("Phenotypes", "Phenotypes")]
+ types[species][group_name] = [
+ ("Phenotypes", "Traits and Cofactors", "Phenotypes")]
if genotypes_exist(group_name):
if group_name in types[species]:
- types[species][group_name] += [("Genotypes", "Genotypes")]
+ types[species][group_name] += [
+ ("Genotypes", "DNA Markers and SNPs", "Genotypes")]
else:
- types[species][group_name] = [("Genotypes", "Genotypes")]
+ types[species][group_name] = [
+ ("Genotypes", "DNA Markers and SNPs", "Genotypes")]
if group_name in types[species]:
types_list = build_types(species, group_name)
if len(types_list) > 0:
types[species][group_name] += types_list
- else:
- if not phenotypes_exist(group_name) and not genotypes_exist(group_name):
- types[species].pop(group_name, None)
- groups[species] = list(group for group in groups[species] if group[0] != group_name)
- else: #ZS: This whole else statement might be unnecessary, need to check
+ else:
types_list = build_types(species, group_name)
if len(types_list) > 0:
types[species][group_name] = types_list
else:
types[species].pop(group_name, None)
- groups[species] = list(group for group in groups[species] if group[0] != group_name)
+ groups[species] = list(
+ group for group in groups[species]
+ if group[0] != group_name)
return types
+
def phenotypes_exist(group_name):
- results = g.db.execute("""SELECT Name
- FROM PublishFreeze
- WHERE PublishFreeze.Name = '{}'""".format(group_name+"Publish")).fetchone()
+ results = g.db.execute(
+ ("SELECT Name FROM PublishFreeze "
+ "WHERE PublishFreeze.Name = "
+ "'{}'").format(group_name+"Publish")).fetchone()
+ return bool(results)
- if results != None:
- return True
- else:
- return False
def genotypes_exist(group_name):
- results = g.db.execute("""SELECT Name
- FROM GenoFreeze
- WHERE GenoFreeze.Name = '{}'""".format(group_name+"Geno")).fetchone()
+ results = g.db.execute(
+ ("SELECT Name FROM GenoFreeze " +
+ "WHERE GenoFreeze.Name = '{}'").format(group_name+"Geno")).fetchone()
+ return bool(results)
- if results != None:
- return True
- else:
- return False
def build_types(species, group):
"""Fetches tissues
@@ -119,37 +111,36 @@ def build_types(species, group):
"""
- query = """SELECT DISTINCT Tissue.Name
- FROM ProbeFreeze, ProbeSetFreeze, InbredSet, Tissue, Species
- WHERE Species.Name = '{0}' AND
- Species.Id = InbredSet.SpeciesId AND
- InbredSet.Name = '{1}' AND
- ProbeFreeze.TissueId = Tissue.Id AND
- ProbeFreeze.InbredSetId = InbredSet.Id AND
- ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id AND
- ProbeSetFreeze.public > 0 AND
- ProbeSetFreeze.confidentiality < 1
- ORDER BY Tissue.Name""".format(species, group)
+ query = ("SELECT DISTINCT Tissue.Name "
+ "FROM ProbeFreeze, ProbeSetFreeze, InbredSet, "
+ "Tissue, Species WHERE Species.Name = '{0}' "
+ "AND Species.Id = InbredSet.SpeciesId AND "
+ "InbredSet.Name = '{1}' AND ProbeFreeze.TissueId = "
+ "Tissue.Id AND ProbeFreeze.InbredSetId = InbredSet.Id "
+ "AND ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id "
+ "ORDER BY Tissue.Name").format(species, group)
results = []
for result in g.db.execute(query).fetchall():
- if len(result):
+ if bool(result):
these_datasets = build_datasets(species, group, result[0])
if len(these_datasets) > 0:
- results.append([str(result[0]), str(result[0])])
+ results.append([str(result[0]), str(result[0]),
+ "Molecular Traits"])
return results
+
def get_datasets(types):
"""Build datasets list"""
datasets = {}
- for species, group_dict in types.iteritems():
+ for species, group_dict in list(types.items()):
datasets[species] = {}
- for group, type_list in group_dict.iteritems():
+ for group, type_list in list(group_dict.items()):
datasets[species][group] = {}
for type_name in type_list:
these_datasets = build_datasets(species, group, type_name[0])
- if len(these_datasets) > 0:
+ if bool(these_datasets):
datasets[species][group][type_name[0]] = these_datasets
return datasets
@@ -160,29 +151,30 @@ def build_datasets(species, group, type_name):
dataset_text = dataset_value = None
datasets = []
if type_name == "Phenotypes":
- results = g.db.execute("""SELECT InfoFiles.GN_AccesionId, PublishFreeze.Name, PublishFreeze.FullName
- FROM InfoFiles, PublishFreeze, InbredSet
- WHERE InbredSet.Name = '{}' AND
- PublishFreeze.InbredSetId = InbredSet.Id AND
- InfoFiles.InfoPageName = PublishFreeze.Name
- ORDER BY PublishFreeze.CreateTime ASC""".format(group)).fetchall()
-
- if len(results) > 0:
+ results = g.db.execute(
+ ("SELECT InfoFiles.GN_AccesionId, PublishFreeze.Name, "
+ "PublishFreeze.FullName FROM InfoFiles, PublishFreeze, "
+ "InbredSet WHERE InbredSet.Name = '{}' AND "
+ "PublishFreeze.InbredSetId = InbredSet.Id AND "
+ "InfoFiles.InfoPageName = PublishFreeze.Name "
+ "ORDER BY PublishFreeze.CreateTime ASC").format(group)).fetchall()
+ if bool(results):
for result in results:
dataset_id = str(result[0])
dataset_value = str(result[1])
+ dataset_text = str(result[2])
if group == 'MDP':
dataset_text = "Mouse Phenome Database"
- else:
- #dataset_text = "%s Phenotypes" % group
- dataset_text = str(result[2])
+
datasets.append([dataset_id, dataset_value, dataset_text])
else:
- result = g.db.execute("""SELECT PublishFreeze.Name, PublishFreeze.FullName
- FROM PublishFreeze, InbredSet
- WHERE InbredSet.Name = '{}' AND
- PublishFreeze.InbredSetId = InbredSet.Id
- ORDER BY PublishFreeze.CreateTime ASC""".format(group)).fetchone()
+ result = g.db.execute(
+ ("SELECT PublishFreeze.Name, PublishFreeze.FullName "
+ "FROM PublishFreeze, InbredSet "
+ "WHERE InbredSet.Name = '{}' AND "
+ "PublishFreeze.InbredSetId = InbredSet.Id "
+ "ORDER BY PublishFreeze.CreateTime ASC")
+ .format(group)).fetchone()
dataset_id = "None"
dataset_value = str(result[0])
@@ -190,33 +182,34 @@ def build_datasets(species, group, type_name):
datasets.append([dataset_id, dataset_value, dataset_text])
elif type_name == "Genotypes":
- results = g.db.execute("""SELECT InfoFiles.GN_AccesionId
- FROM InfoFiles, GenoFreeze, InbredSet
- WHERE InbredSet.Name = '{}' AND
- GenoFreeze.InbredSetId = InbredSet.Id AND
- InfoFiles.InfoPageName = GenoFreeze.ShortName AND
- GenoFreeze.public > 0 AND
- GenoFreeze.confidentiality < 1
- ORDER BY GenoFreeze.CreateTime DESC""".format(group)).fetchone()
-
- if results != None:
+ results = g.db.execute(
+ ("SELECT InfoFiles.GN_AccesionId " +
+ "FROM InfoFiles, GenoFreeze, InbredSet " +
+ "WHERE InbredSet.Name = '{}' AND " +
+ "GenoFreeze.InbredSetId = InbredSet.Id AND " +
+ "InfoFiles.InfoPageName = GenoFreeze.ShortName " +
+ "ORDER BY GenoFreeze.CreateTime DESC").format(group)).fetchone()
+
+ dataset_id = "None"
+ if bool(results):
dataset_id = str(results[0])
- else:
- dataset_id = "None"
+
dataset_value = "%sGeno" % group
dataset_text = "%s Genotypes" % group
datasets.append([dataset_id, dataset_value, dataset_text])
- else: # for mRNA expression/ProbeSet
- results = g.db.execute("""SELECT ProbeSetFreeze.Id, ProbeSetFreeze.Name, ProbeSetFreeze.FullName
- FROM ProbeSetFreeze, ProbeFreeze, InbredSet, Tissue, Species
- WHERE Species.Name = '{0}' AND
- Species.Id = InbredSet.SpeciesId AND
- InbredSet.Name = '{1}' AND
- ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and Tissue.Name = '{2}' AND
- ProbeFreeze.TissueId = Tissue.Id and ProbeFreeze.InbredSetId = InbredSet.Id AND
- ProbeSetFreeze.confidentiality < 1 and ProbeSetFreeze.public > 0
- ORDER BY ProbeSetFreeze.CreateTime DESC""".format(species, group, type_name)).fetchall()
+ else: # for mRNA expression/ProbeSet
+ results = g.db.execute(
+ ("SELECT ProbeSetFreeze.Id, ProbeSetFreeze.Name, "
+ "ProbeSetFreeze.FullName FROM ProbeSetFreeze, "
+ "ProbeFreeze, InbredSet, Tissue, Species WHERE "
+ "Species.Name = '{0}' AND Species.Id = "
+ "InbredSet.SpeciesId AND InbredSet.Name = '{1}' "
+ "AND ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id "
+ "AND Tissue.Name = '{2}' AND ProbeFreeze.TissueId = "
+ "Tissue.Id AND ProbeFreeze.InbredSetId = InbredSet.Id "
+ "AND ProbeSetFreeze.public > 0 "
+ "ORDER BY -ProbeSetFreeze.OrderList DESC, ProbeSetFreeze.CreateTime DESC").format(species, group, type_name)).fetchall()
datasets = []
for dataset_info in results:
@@ -225,4 +218,4 @@ def build_datasets(species, group, type_name):
this_dataset_info.append(str(info))
datasets.append(this_dataset_info)
- return datasets \ No newline at end of file
+ return datasets
diff --git a/wqflask/wqflask/api/mapping.py b/wqflask/wqflask/api/mapping.py
index d830cefc..d59a69df 100644
--- a/wqflask/wqflask/api/mapping.py
+++ b/wqflask/wqflask/api/mapping.py
@@ -1,10 +1,8 @@
-from __future__ import absolute_import, division, print_function
-
import string
from base import data_set
from base import webqtlConfig
-from base.trait import GeneralTrait, retrieve_sample_data
+from base.trait import create_trait, retrieve_sample_data
from utility import helper_functions
from wqflask.marker_regression import gemma_mapping, rqtl_mapping, qtlreaper_mapping, plink_mapping
@@ -18,7 +16,7 @@ def do_mapping_for_api(start_vars):
dataset = data_set.create_dataset(dataset_name = start_vars['db'])
dataset.group.get_markers()
- this_trait = GeneralTrait(dataset = dataset, name = start_vars['trait_id'])
+ this_trait = create_trait(dataset = dataset, name = start_vars['trait_id'])
this_trait = retrieve_sample_data(this_trait, dataset)
samples = []
diff --git a/wqflask/wqflask/api/router.py b/wqflask/wqflask/api/router.py
index 6324cabe..60e163f2 100644
--- a/wqflask/wqflask/api/router.py
+++ b/wqflask/wqflask/api/router.py
@@ -1,16 +1,21 @@
# GN2 API
-from __future__ import absolute_import, division, print_function
+import os
+import io
+import csv
+import json
+import datetime
+import requests
-import os, io, csv, json, datetime, requests, yaml
-import zlib
from zipfile import ZipFile, ZIP_DEFLATED
-import StringIO
import flask
-from flask import g, Response, request, make_response, render_template, send_from_directory, jsonify, redirect, send_file
-import sqlalchemy
+from flask import g
+from flask import request
+from flask import make_response
+from flask import send_file
+
from wqflask import app
from wqflask.api import correlation, mapping, gen_menu
@@ -308,7 +313,7 @@ def fetch_traits(dataset_name, file_format = "json"):
else:
filename = dataset_name + "_trait_ids.csv"
- si = StringIO.StringIO()
+ si = io.StringIO()
csv_writer = csv.writer(si)
csv_writer.writerows([[trait_id] for trait_id in trait_ids])
output = make_response(si.getvalue())
@@ -322,7 +327,7 @@ def fetch_traits(dataset_name, file_format = "json"):
else:
filename = dataset_name + "_trait_names.csv"
- si = StringIO.StringIO()
+ si = io.StringIO()
csv_writer = csv.writer(si)
csv_writer.writerows([[trait_name] for trait_name in trait_names])
output = make_response(si.getvalue())
@@ -413,7 +418,7 @@ def fetch_traits(dataset_name, file_format = "json"):
for result in g.db.execute(final_query).fetchall():
results_list.append(result)
- si = StringIO.StringIO()
+ si = io.StringIO()
csv_writer = csv.writer(si)
csv_writer.writerows(results_list)
output = make_response(si.getvalue())
@@ -517,9 +522,9 @@ def all_sample_data(dataset_name, file_format = "csv"):
line_list.append("x")
results_list.append(line_list)
- results_list = map(list, zip(*results_list))
+ results_list = list(map(list, zip(*results_list)))
- si = StringIO.StringIO()
+ si = io.StringIO()
csv_writer = csv.writer(si)
csv_writer.writerows(results_list)
output = make_response(si.getvalue())
@@ -558,10 +563,10 @@ def trait_sample_data(dataset_name, trait_name, file_format = "json"):
sample_list = []
for sample in sample_data:
sample_dict = {
- "sample_name" : sample[0],
- "sample_name_2" : sample[1],
- "value" : sample[2],
- "data_id" : sample[3],
+ "sample_name": sample[0],
+ "sample_name_2": sample[1],
+ "value": sample[2],
+ "data_id": sample[3],
}
if sample[4]:
sample_dict["se"] = sample[4]
@@ -706,7 +711,7 @@ def get_mapping_results():
if format == "csv":
filename = "mapping_" + datetime.datetime.utcnow().strftime("%b_%d_%Y_%I:%M%p") + ".csv"
- si = StringIO.StringIO()
+ si = io.StringIO()
csv_writer = csv.writer(si)
csv_writer.writerows(results)
output = make_response(si.getvalue())
@@ -732,7 +737,7 @@ def get_genotypes(group_name, file_format="csv", dataset_name=None):
if request.args['limit_to'].isdigit():
limit_num = int(request.args['limit_to'])
- si = StringIO.StringIO()
+ si = io.StringIO()
if file_format == "csv" or file_format == "geno":
filename = group_name + ".geno"
@@ -864,18 +869,20 @@ def get_dataset_trait_ids(dataset_name, start_vars):
query = """
SELECT
- PublishXRef.PhenotypeId
+ PublishXRef.PhenotypeId, PublishXRef.Id, InbredSet.InbredSetCode
FROM
- PublishXRef
+ PublishXRef, InbredSet
WHERE
- PublishXRef.InbredSetId = "{0}"
+ PublishXRef.InbredSetId = "{0}" AND
+ InbredSet.Id = PublishXRef.InbredSetId
{1}
""".format(dataset_id, limit_string)
results = g.db.execute(query).fetchall()
trait_ids = [result[0] for result in results]
- trait_names = trait_ids
+ trait_names = [str(result[2]) + "_" + str(result[1]) for result in results]
+
return trait_ids, trait_names, data_type, dataset_id
else:
@@ -966,4 +973,4 @@ def get_group_id(group_name):
if group_id:
return group_id[0]
else:
- return None \ No newline at end of file
+ return None
diff --git a/wqflask/wqflask/collect.py b/wqflask/wqflask/collect.py
index b22e0004..0291f2b8 100644
--- a/wqflask/wqflask/collect.py
+++ b/wqflask/wqflask/collect.py
@@ -1,45 +1,34 @@
-from __future__ import print_function, division, absolute_import
-
-
-import os
import hashlib
import datetime
-import time
-
-import uuid
-import hashlib
-import base64
-
-import urlparse
-
import simplejson as json
-import redis
-Redis = redis.StrictRedis()
-
-from flask import (Flask, g, render_template, url_for, request, make_response,
- redirect, flash, jsonify)
+from flask import g
+from flask import render_template
+from flask import url_for
+from flask import request
+from flask import redirect
+from flask import flash
from wqflask import app
-
-from pprint import pformat as pf
-
-from wqflask.database import db_session
-
-from wqflask import model
-
-from utility import Bunch, Struct, hmac
+from utility import hmac
from utility.formatting import numify
+from utility.redis_tools import get_redis_conn
-from base import trait
+from base.trait import create_trait
+from base.trait import retrieve_trait_info
+from base.trait import jsonable
from base.data_set import create_dataset
-import logging
from utility.logger import getLogger
+
logger = getLogger(__name__)
+Redis = get_redis_conn()
+
def process_traits(unprocessed_traits):
- if isinstance(unprocessed_traits, basestring):
+ if isinstance(unprocessed_traits, bytes):
+ unprocessed_traits = unprocessed_traits.decode('utf-8').split(",")
+ else: # It's a string
unprocessed_traits = unprocessed_traits.split(",")
traits = set()
for trait in unprocessed_traits:
@@ -126,7 +115,8 @@ def collections_new():
g.user_session.add_traits_to_collection(collection_id, traits)
return redirect(url_for('view_collection', uc_id=collection_id))
else:
- CauseAnError
+ # CauseAnError
+ pass
def create_new(collection_name):
params = request.args
@@ -158,15 +148,12 @@ def remove_traits():
params = request.form
uc_id = params['uc_id']
- traits_to_remove = params.getlist('traits[]')
+ traits_to_remove = params['trait_list']
traits_to_remove = process_traits(traits_to_remove)
- logger.debug("\n\n after processing, traits_to_remove:", traits_to_remove)
members_now = g.user_session.remove_traits_from_collection(uc_id, traits_to_remove)
- # We need to return something so we'll return this...maybe in the future
- # we can use it to check the results
- return str(len(members_now))
+ return redirect(url_for("view_collection", uc_id=uc_id))
@app.route("/collections/delete", methods=('POST',))
@@ -197,25 +184,27 @@ def view_collection():
params = request.args
uc_id = params['uc_id']
- uc = (collection for collection in g.user_session.user_collections if collection["id"] == uc_id).next()
+ uc = next((collection for collection in g.user_session.user_collections if collection["id"] == uc_id))
traits = uc["members"]
trait_obs = []
json_version = []
for atrait in traits:
+ if ':' not in atrait:
+ continue
name, dataset_name = atrait.split(':')
if dataset_name == "Temp":
group = name.split("_")[2]
dataset = create_dataset(dataset_name, dataset_type = "Temp", group_name = group)
- trait_ob = trait.GeneralTrait(name=name, dataset=dataset)
+ trait_ob = create_trait(name=name, dataset=dataset)
else:
dataset = create_dataset(dataset_name)
- trait_ob = trait.GeneralTrait(name=name, dataset=dataset)
- trait_ob = trait.retrieve_trait_info(trait_ob, dataset, get_qtl_info=True)
+ trait_ob = create_trait(name=name, dataset=dataset)
+ trait_ob = retrieve_trait_info(trait_ob, dataset, get_qtl_info=True)
trait_obs.append(trait_ob)
- json_version.append(trait.jsonable(trait_ob))
+ json_version.append(jsonable(trait_ob))
collection_info = dict(trait_obs=trait_obs,
uc = uc)
diff --git a/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py b/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py
index 21eb1493..92de6073 100644
--- a/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py
+++ b/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py
@@ -18,37 +18,16 @@
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import absolute_import, print_function, division
-
-import sys
-# sys.path.append(".") Never do this in a webserver!
-
-import string
-import cPickle
-import os
-import time
-import pp
-import math
-import collections
-import resource
-
-
from pprint import pformat as pf
-import reaper
-
-from base.trait import GeneralTrait
+from base.trait import create_trait
from base import data_set
from utility import webqtlUtil, helper_functions, corr_result_helpers
-from db import webqtlDatabaseFunction
import utility.webqtlUtil #this is for parallel computing only.
from wqflask.correlation import correlation_functions
-from utility.benchmark import Bench
from MySQLdb import escape_string as escape
-from pprint import pformat as pf
-
from flask import Flask, g
@@ -108,7 +87,7 @@ class ComparisonBarChart(object):
trait_name, dataset_name = trait_db.split(":")
#print("dataset_name:", dataset_name)
dataset_ob = data_set.create_dataset(dataset_name)
- trait_ob = GeneralTrait(dataset=dataset_ob,
+ trait_ob = create_trait(dataset=dataset_ob,
name=trait_name,
cellid=None)
self.trait_list.append((trait_ob, dataset_ob))
diff --git a/wqflask/wqflask/correlation/corr_scatter_plot.py b/wqflask/wqflask/correlation/corr_scatter_plot.py
index dfb81c54..c87776bb 100644
--- a/wqflask/wqflask/correlation/corr_scatter_plot.py
+++ b/wqflask/wqflask/correlation/corr_scatter_plot.py
@@ -1,10 +1,8 @@
-from __future__ import absolute_import, print_function, division
-
import math
from flask import g
-from base.trait import GeneralTrait
+from base.trait import create_trait, retrieve_sample_data
from base import data_set
from utility import corr_result_helpers
from scipy import stats
@@ -17,23 +15,41 @@ class CorrScatterPlot(object):
"""Page that displays a correlation scatterplot with a line fitted to it"""
def __init__(self, params):
- self.data_set_1 = data_set.create_dataset(params['dataset_1'])
- self.data_set_2 = data_set.create_dataset(params['dataset_2'])
- #self.data_set_3 = data_set.create_dataset(params['dataset_3'])
- self.trait_1 = GeneralTrait(name=params['trait_1'], dataset=self.data_set_1)
- self.trait_2 = GeneralTrait(name=params['trait_2'], dataset=self.data_set_2)
- #self.trait_3 = GeneralTrait(name=params['trait_3'], dataset=self.data_set_3)
+ if "Temp" in params['dataset_1']:
+ self.dataset_1 = data_set.create_dataset(dataset_name = "Temp", dataset_type = "Temp", group_name = params['dataset_1'].split("_")[1])
+ else:
+ self.dataset_1 = data_set.create_dataset(params['dataset_1'])
+ if "Temp" in params['dataset_2']:
+ self.dataset_2 = data_set.create_dataset(dataset_name = "Temp", dataset_type = "Temp", group_name = params['dataset_2'].split("_")[1])
+ else:
+ self.dataset_2 = data_set.create_dataset(params['dataset_2'])
+
+ #self.dataset_3 = data_set.create_dataset(params['dataset_3'])
+ self.trait_1 = create_trait(name=params['trait_1'], dataset=self.dataset_1)
+ self.trait_2 = create_trait(name=params['trait_2'], dataset=self.dataset_2)
+ #self.trait_3 = create_trait(name=params['trait_3'], dataset=self.dataset_3)
+
+ self.method = params['method']
+
+ primary_samples = self.dataset_1.group.samplelist
+ if self.dataset_1.group.parlist != None:
+ primary_samples += self.dataset_1.group.parlist
+ if self.dataset_1.group.f1list != None:
+ primary_samples += self.dataset_1.group.f1list
+
+ self.trait_1 = retrieve_sample_data(self.trait_1, self.dataset_1, primary_samples)
+ self.trait_2 = retrieve_sample_data(self.trait_2, self.dataset_2, primary_samples)
samples_1, samples_2, num_overlap = corr_result_helpers.normalize_values_with_samples(self.trait_1.data, self.trait_2.data)
self.data = []
- self.indIDs = samples_1.keys()
+ self.indIDs = list(samples_1.keys())
vals_1 = []
- for sample in samples_1.keys():
+ for sample in list(samples_1.keys()):
vals_1.append(samples_1[sample].value)
self.data.append(vals_1)
vals_2 = []
- for sample in samples_2.keys():
+ for sample in list(samples_2.keys()):
vals_2.append(samples_2[sample].value)
self.data.append(vals_2)
@@ -121,4 +137,4 @@ def get_intercept_coords(slope, intercept, x_range, y_range):
intercept_coords.append([x1, y1])
intercept_coords.append([x2, y2])
- return intercept_coords \ No newline at end of file
+ return intercept_coords
diff --git a/wqflask/wqflask/correlation/correlation_functions.py b/wqflask/wqflask/correlation/correlation_functions.py
index 06dec795..fd7691d4 100644
--- a/wqflask/wqflask/correlation/correlation_functions.py
+++ b/wqflask/wqflask/correlation/correlation_functions.py
@@ -24,8 +24,6 @@
#
# Last updated by NL 2011/03/23
-from __future__ import absolute_import, print_function, division
-
import math
import rpy2.robjects
import string
@@ -50,12 +48,12 @@ from flask import Flask, g
def cal_zero_order_corr_for_tiss (primaryValue=[], targetValue=[], method='pearson'):
- R_primary = rpy2.robjects.FloatVector(range(len(primaryValue)))
+ R_primary = rpy2.robjects.FloatVector(list(range(len(primaryValue))))
N = len(primaryValue)
for i in range(len(primaryValue)):
R_primary[i] = primaryValue[i]
- R_target = rpy2.robjects.FloatVector(range(len(targetValue)))
+ R_target = rpy2.robjects.FloatVector(list(range(len(targetValue))))
for i in range(len(targetValue)):
R_target[i]=targetValue[i]
@@ -73,34 +71,6 @@ def cal_zero_order_corr_for_tiss (primaryValue=[], targetValue=[], method='pears
return corr_result
-###########################################################################
-#Input: cursor, symbolList (list), dataIdDict(Dict)
-#output: symbolValuepairDict (dictionary):one dictionary of Symbol and Value Pair,
-# key is symbol, value is one list of expression values of one probeSet;
-#function: get one dictionary whose key is gene symbol and value is tissue expression data (list type).
-#Attention! All keys are lower case!
-###########################################################################
-def get_symbol_value_pairs(tissue_data):
- id_list = [tissue_data[symbol.lower()].data_id for item in tissue_data]
-
- symbol_value_pairs = {}
- value_list=[]
-
- query = """SELECT value, id
- FROM TissueProbeSetData
- WHERE Id IN {}""".format(create_in_clause(id_list))
-
- try :
- results = g.db.execute(query).fetchall()
- for result in results:
- value_list.append(result.value)
- symbol_value_pairs[symbol] = value_list
- except:
- symbol_value_pairs[symbol] = None
-
- return symbol_value_pairs
-
-
########################################################################################################
#input: cursor, symbolList (list), dataIdDict(Dict): key is symbol
#output: SymbolValuePairDict(dictionary):one dictionary of Symbol and Value Pair.
@@ -114,4 +84,4 @@ def get_trait_symbol_and_tissue_values(symbol_list=None):
tissue_data = MrnaAssayTissueData(gene_symbols=symbol_list)
if len(tissue_data.gene_symbols):
- return tissue_data.get_symbol_values_pairs() \ No newline at end of file
+ return tissue_data.get_symbol_values_pairs()
diff --git a/wqflask/wqflask/correlation/show_corr_results.py b/wqflask/wqflask/correlation/show_corr_results.py
index b099b83d..fb4dc4f4 100644
--- a/wqflask/wqflask/correlation/show_corr_results.py
+++ b/wqflask/wqflask/correlation/show_corr_results.py
@@ -18,53 +18,36 @@
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import absolute_import, print_function, division
-
-import sys
-
-import string
-import cPickle
-import os
-import time
-import pp
-import math
import collections
-import resource
import json
-
import scipy
import numpy
import rpy2.robjects as ro # R Objects
-import rpy2.rinterface as ri
-
-from rpy2.robjects.packages import importr
-utils = importr("utils")
+import utility.logger
+import utility.webqtlUtil
-from pprint import pformat as pf
+from base.trait import create_trait
-import reaper
+from rpy2.robjects.packages import importr
-from base import webqtlConfig
-from utility.THCell import THCell
-from utility.TDCell import TDCell
-from base.trait import GeneralTrait
from base import data_set
-from utility import webqtlUtil, helper_functions, corr_result_helpers, hmac
-from db import webqtlDatabaseFunction
-import utility.webqtlUtil #this is for parallel computing only.
+from utility import helper_functions
+from utility import corr_result_helpers
+from utility import hmac
+
from wqflask.correlation import correlation_functions
from utility.benchmark import Bench
-import utility.webqtlUtil
-from utility.type_checking import is_float, is_int, is_str, get_float, get_int, get_string
-
-from MySQLdb import escape_string as escape
-from pprint import pformat as pf
+from utility.type_checking import is_str
+from utility.type_checking import get_float
+from utility.type_checking import get_int
+from utility.type_checking import get_string
+from utility.db_tools import escape
-from flask import Flask, g
+from flask import g
-import utility.logger
-logger = utility.logger.getLogger(__name__ )
+utils = importr("utils")
+logger = utility.logger.getLogger(__name__)
METHOD_LIT = "3"
METHOD_TISSUE_PEARSON = "4"
@@ -74,6 +57,7 @@ TISSUE_METHODS = [METHOD_TISSUE_PEARSON, METHOD_TISSUE_RANK]
TISSUE_MOUSE_DB = 1
+
class CorrelationResults(object):
def __init__(self, start_vars):
# get trait list from db (database name)
@@ -87,7 +71,6 @@ class CorrelationResults(object):
assert('corr_sample_method' in start_vars)
assert('corr_samples_group' in start_vars)
assert('corr_dataset' in start_vars)
- #assert('min_expr' in start_vars)
assert('corr_return_results' in start_vars)
if 'loc_chr' in start_vars:
assert('min_loc_mb' in start_vars)
@@ -97,32 +80,31 @@ class CorrelationResults(object):
if start_vars['dataset'] == "Temp":
self.dataset = data_set.create_dataset(dataset_name = "Temp", dataset_type = "Temp", group_name = start_vars['group'])
self.trait_id = start_vars['trait_id']
- self.this_trait = GeneralTrait(dataset=self.dataset,
+ self.this_trait = create_trait(dataset=self.dataset,
name=self.trait_id,
cellid=None)
else:
helper_functions.get_species_dataset_trait(self, start_vars)
- #self.dataset.group.read_genotype_file()
-
corr_samples_group = start_vars['corr_samples_group']
self.sample_data = {}
self.corr_type = start_vars['corr_type']
self.corr_method = start_vars['corr_sample_method']
- self.min_expr = get_float(start_vars,'min_expr')
- self.p_range_lower = get_float(start_vars,'p_range_lower',-1.0)
- self.p_range_upper = get_float(start_vars,'p_range_upper',1.0)
+ self.min_expr = get_float(start_vars, 'min_expr')
+ self.p_range_lower = get_float(start_vars, 'p_range_lower', -1.0)
+ self.p_range_upper = get_float(start_vars, 'p_range_upper', 1.0)
if ('loc_chr' in start_vars and
'min_loc_mb' in start_vars and
'max_loc_mb' in start_vars):
- self.location_chr = get_string(start_vars,'loc_chr')
- self.min_location_mb = get_int(start_vars,'min_loc_mb')
- self.max_location_mb = get_int(start_vars,'max_loc_mb')
+ self.location_type = get_string(start_vars, 'location_type')
+ self.location_chr = get_string(start_vars, 'loc_chr')
+ self.min_location_mb = get_int(start_vars, 'min_loc_mb')
+ self.max_location_mb = get_int(start_vars, 'max_loc_mb')
else:
- self.location_chr = self.min_location_mb = self.max_location_mb = None
+ self.location_type = self.location_chr = self.min_location_mb = self.max_location_mb = None
self.get_formatted_corr_type()
self.return_number = int(start_vars['corr_return_results'])
@@ -147,10 +129,10 @@ class CorrelationResults(object):
if corr_samples_group == 'samples_other':
primary_samples = [x for x in primary_samples if x not in (
self.dataset.group.parlist + self.dataset.group.f1list)]
- self.process_samples(start_vars, self.this_trait.data.keys(), primary_samples)
+ self.process_samples(start_vars, list(self.this_trait.data.keys()), primary_samples)
self.target_dataset = data_set.create_dataset(start_vars['corr_dataset'])
- self.target_dataset.get_trait_data(self.sample_data.keys())
+ self.target_dataset.get_trait_data(list(self.sample_data.keys()))
self.header_fields = get_header_fields(self.target_dataset.type, self.corr_method)
@@ -170,56 +152,66 @@ class CorrelationResults(object):
tissue_corr_data = self.do_tissue_correlation_for_all_traits()
if tissue_corr_data != None:
- for trait in tissue_corr_data.keys()[:self.return_number]:
+ for trait in list(tissue_corr_data.keys())[:self.return_number]:
self.get_sample_r_and_p_values(trait, self.target_dataset.trait_data[trait])
else:
- for trait, values in self.target_dataset.trait_data.iteritems():
+ for trait, values in list(self.target_dataset.trait_data.items()):
self.get_sample_r_and_p_values(trait, values)
elif self.corr_type == "lit":
self.trait_geneid_dict = self.dataset.retrieve_genes("GeneId")
lit_corr_data = self.do_lit_correlation_for_all_traits()
- for trait in lit_corr_data.keys()[:self.return_number]:
+ for trait in list(lit_corr_data.keys())[:self.return_number]:
self.get_sample_r_and_p_values(trait, self.target_dataset.trait_data[trait])
elif self.corr_type == "sample":
- for trait, values in self.target_dataset.trait_data.iteritems():
+ for trait, values in list(self.target_dataset.trait_data.items()):
self.get_sample_r_and_p_values(trait, values)
- self.correlation_data = collections.OrderedDict(sorted(self.correlation_data.items(),
+ self.correlation_data = collections.OrderedDict(sorted(list(self.correlation_data.items()),
key=lambda t: -abs(t[1][0])))
- if self.target_dataset.type == "ProbeSet" or self.target_dataset.type == "Geno":
- #ZS: Convert min/max chromosome to an int for the location range option
- range_chr_as_int = None
- for order_id, chr_info in self.dataset.species.chromosomes.chromosomes.iteritems():
- if 'loc_chr' in start_vars:
- if chr_info.name == self.location_chr:
- range_chr_as_int = order_id
-
- for _trait_counter, trait in enumerate(self.correlation_data.keys()[:self.return_number]):
- trait_object = GeneralTrait(dataset=self.target_dataset, name=trait, get_qtl_info=True, get_sample_info=False)
-
- if self.target_dataset.type == "ProbeSet" or self.target_dataset.type == "Geno":
- #ZS: Convert trait chromosome to an int for the location range option
- chr_as_int = 0
- for order_id, chr_info in self.dataset.species.chromosomes.chromosomes.iteritems():
+
+ #ZS: Convert min/max chromosome to an int for the location range option
+ range_chr_as_int = None
+ for order_id, chr_info in list(self.dataset.species.chromosomes.chromosomes.items()):
+ if 'loc_chr' in start_vars:
+ if chr_info.name == self.location_chr:
+ range_chr_as_int = order_id
+
+ for _trait_counter, trait in enumerate(list(self.correlation_data.keys())[:self.return_number]):
+ trait_object = create_trait(dataset=self.target_dataset, name=trait, get_qtl_info=True, get_sample_info=False)
+ if not trait_object:
+ continue
+
+ chr_as_int = 0
+ for order_id, chr_info in list(self.dataset.species.chromosomes.chromosomes.items()):
+ if self.location_type == "highest_lod":
+ if chr_info.name == trait_object.locus_chr:
+ chr_as_int = order_id
+ else:
if chr_info.name == trait_object.chr:
chr_as_int = order_id
if (float(self.correlation_data[trait][0]) >= self.p_range_lower and
float(self.correlation_data[trait][0]) <= self.p_range_upper):
- if self.target_dataset.type == "ProbeSet" or self.target_dataset.type == "Geno":
-
+ if (self.target_dataset.type == "ProbeSet" or self.target_dataset.type == "Publish") and bool(trait_object.mean):
if (self.min_expr != None) and (float(trait_object.mean) < self.min_expr):
continue
- elif range_chr_as_int != None and (chr_as_int != range_chr_as_int):
+
+ if range_chr_as_int != None and (chr_as_int != range_chr_as_int):
+ continue
+ if self.location_type == "highest_lod":
+ if (self.min_location_mb != None) and (float(trait_object.locus_mb) < float(self.min_location_mb)):
+ continue
+ if (self.max_location_mb != None) and (float(trait_object.locus_mb) > float(self.max_location_mb)):
continue
- elif (self.min_location_mb != None) and (float(trait_object.mb) < float(self.min_location_mb)):
+ else:
+ if (self.min_location_mb != None) and (float(trait_object.mb) < float(self.min_location_mb)):
continue
- elif (self.max_location_mb != None) and (float(trait_object.mb) > float(self.max_location_mb)):
+ if (self.max_location_mb != None) and (float(trait_object.mb) > float(self.max_location_mb)):
continue
(trait_object.sample_r,
@@ -235,9 +227,8 @@ class CorrelationResults(object):
trait_object.tissue_pvalue = tissue_corr_data[trait][2]
elif self.corr_type == "lit":
trait_object.lit_corr = lit_corr_data[trait][1]
- self.correlation_results.append(trait_object)
- self.target_dataset.get_trait_info(self.correlation_results, self.target_dataset.group.species)
+ self.correlation_results.append(trait_object)
if self.corr_type != "lit" and self.dataset.type == "ProbeSet" and self.target_dataset.type == "ProbeSet":
self.do_lit_correlation_for_trait_list()
@@ -300,14 +291,14 @@ class CorrelationResults(object):
#print("trait_gene_symbols: ", pf(trait_gene_symbols.values()))
corr_result_tissue_vals_dict= correlation_functions.get_trait_symbol_and_tissue_values(
- symbol_list=self.trait_symbol_dict.values())
+ symbol_list=list(self.trait_symbol_dict.values()))
#print("corr_result_tissue_vals: ", pf(corr_result_tissue_vals_dict))
#print("trait_gene_symbols: ", pf(trait_gene_symbols))
tissue_corr_data = {}
- for trait, symbol in self.trait_symbol_dict.iteritems():
+ for trait, symbol in list(self.trait_symbol_dict.items()):
if symbol and symbol.lower() in corr_result_tissue_vals_dict:
this_trait_tissue_values = corr_result_tissue_vals_dict[symbol.lower()]
@@ -317,7 +308,7 @@ class CorrelationResults(object):
tissue_corr_data[trait] = [symbol, result[0], result[2]]
- tissue_corr_data = collections.OrderedDict(sorted(tissue_corr_data.items(),
+ tissue_corr_data = collections.OrderedDict(sorted(list(tissue_corr_data.items()),
key=lambda t: -abs(t[1][1])))
return tissue_corr_data
@@ -362,7 +353,7 @@ class CorrelationResults(object):
input_trait_mouse_gene_id = self.convert_to_mouse_gene_id(self.dataset.group.species.lower(), self.this_trait.geneid)
lit_corr_data = {}
- for trait, gene_id in self.trait_geneid_dict.iteritems():
+ for trait, gene_id in list(self.trait_geneid_dict.items()):
mouse_gene_id = self.convert_to_mouse_gene_id(self.dataset.group.species.lower(), gene_id)
if mouse_gene_id and str(mouse_gene_id).find(";") == -1:
@@ -390,7 +381,7 @@ class CorrelationResults(object):
else:
lit_corr_data[trait] = [gene_id, 0]
- lit_corr_data = collections.OrderedDict(sorted(lit_corr_data.items(),
+ lit_corr_data = collections.OrderedDict(sorted(list(lit_corr_data.items()),
key=lambda t: -abs(t[1][1])))
return lit_corr_data
@@ -451,15 +442,15 @@ class CorrelationResults(object):
self.this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(self.this_trait_vals, target_vals)
- #ZS: 2015 could add biweight correlation, see http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3465711/
- if self.corr_method == 'bicor':
- sample_r, sample_p = do_bicor(self.this_trait_vals, target_vals)
- elif self.corr_method == 'pearson':
- sample_r, sample_p = scipy.stats.pearsonr(self.this_trait_vals, target_vals)
- else:
- sample_r, sample_p = scipy.stats.spearmanr(self.this_trait_vals, target_vals)
-
if num_overlap > 5:
+ #ZS: 2015 could add biweight correlation, see http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3465711/
+ if self.corr_method == 'bicor':
+ sample_r, sample_p = do_bicor(self.this_trait_vals, target_vals)
+ elif self.corr_method == 'pearson':
+ sample_r, sample_p = scipy.stats.pearsonr(self.this_trait_vals, target_vals)
+ else:
+ sample_r, sample_p = scipy.stats.spearmanr(self.this_trait_vals, target_vals)
+
if numpy.isnan(sample_r):
pass
else:
@@ -469,13 +460,13 @@ class CorrelationResults(object):
if not excluded_samples:
excluded_samples = ()
+ sample_val_dict = json.loads(start_vars['sample_vals'])
for sample in sample_names:
if sample not in excluded_samples:
- # print("Looking for",sample,"in",start_vars)
- value = start_vars.get('value:' + sample)
- if value:
- if not value.strip().lower() == 'x':
- self.sample_data[str(sample)] = float(value)
+ value = sample_val_dict[sample]
+ if not value.strip().lower() == 'x':
+ self.sample_data[str(sample)] = float(value)
+
def do_bicor(this_trait_vals, target_trait_vals):
r_library = ro.r["library"] # Map the library function
@@ -496,76 +487,88 @@ def do_bicor(this_trait_vals, target_trait_vals):
def generate_corr_json(corr_results, this_trait, dataset, target_dataset, for_api = False):
results_list = []
for i, trait in enumerate(corr_results):
+ if trait.view == False:
+ continue
results_dict = {}
- if not for_api:
- results_dict['checkbox'] = "<INPUT TYPE='checkbox' NAME='searchResult' class='checkbox trait_checkbox' style='padding-right: 0px;' VALUE='" + hmac.hmac_creation('{}:{}'.format(trait.name, trait.dataset.name)) + "'>"
- results_dict['index'] = i + 1
- results_dict['trait_id'] = "<a href='/show_trait?trait_id="+str(trait.name)+"&dataset="+str(dataset.name)+"'>"+str(trait.name)+"</a>"
- else:
- results_dict['trait_id'] = trait.name
+ results_dict['index'] = i + 1
+ results_dict['trait_id'] = trait.name
+ results_dict['dataset'] = trait.dataset.name
+ results_dict['hmac'] = hmac.data_hmac('{}:{}'.format(trait.name, trait.dataset.name))
if target_dataset.type == "ProbeSet":
results_dict['symbol'] = trait.symbol
- results_dict['description'] = trait.description_display
+ results_dict['description'] = "N/A"
results_dict['location'] = trait.location_repr
- results_dict['mean'] = float(trait.mean)
- if trait.LRS_score_repr != "N/A":
- results_dict['lrs_score'] = "%.1f" % float(trait.LRS_score_repr)
- else:
- results_dict['lrs_score'] = "N/A"
+ results_dict['mean'] = "N/A"
+ results_dict['additive'] = "N/A"
+ if bool(trait.description_display):
+ results_dict['description'] = trait.description_display
+ if bool(trait.mean):
+ results_dict['mean'] = f"{float(trait.mean):.3f}"
+ try:
+ results_dict['lod_score'] = f"{float(trait.LRS_score_repr) / 4.61:.1f}"
+ except:
+ results_dict['lod_score'] = "N/A"
results_dict['lrs_location'] = trait.LRS_location_repr
- if trait.additive != "":
- results_dict['additive'] = "%0.3f" % float(trait.additive)
- else:
- results_dict['additive'] = "N/A"
- if for_api:
- results_dict['sample_r'] = "%0.3f" % float(trait.sample_r)
- else:
- results_dict['sample_r'] = "<a target='_blank' href='corr_scatter_plot?dataset_1=" + str(dataset.name) + "&dataset_2=" + str(trait.dataset.name) + "&trait_1=" + str(this_trait.name) + "&trait_2=" + str(trait.name) + "'>" + "%0.3f" % float(trait.sample_r) + "</a>"
+ if bool(trait.additive):
+ results_dict['additive'] = f"{float(trait.additive):.3f}"
+ results_dict['sample_r'] = f"{float(trait.sample_r):.3f}"
results_dict['num_overlap'] = trait.num_overlap
- results_dict['sample_p'] = "%0.3e" % float(trait.sample_p)
- if trait.lit_corr == "" or trait.lit_corr == 0:
- results_dict['lit_corr'] = "--"
- else:
- results_dict['lit_corr'] = "%0.3f" % float(trait.lit_corr)
- if trait.tissue_corr == "" or trait.tissue_corr == 0:
- results_dict['tissue_corr'] = "--"
- else:
- results_dict['tissue_corr'] = "%0.3f" % float(trait.tissue_corr)
+ results_dict['sample_p'] = f"{float(trait.sample_p):.3e}"
+ results_dict['lit_corr'] = "--"
+ results_dict['tissue_corr'] = "--"
+ results_dict['tissue_pvalue'] = "--"
+ if bool(trait.lit_corr):
+ results_dict['lit_corr'] = f"{float(trait.lit_corr):.3f}"
+ if bool(trait.tissue_corr):
+ results_dict['tissue_corr'] = f"{float(trait.tissue_corr):.3f}"
+ results_dict['tissue_pvalue'] = f"{float(trait.tissue_pvalue):.3e}"
elif target_dataset.type == "Publish":
- results_dict['description'] = trait.description_display
- results_dict['authors'] = trait.authors
- if trait.pubmed_id:
+ results_dict['abbreviation_display'] = "N/A"
+ results_dict['description'] = "N/A"
+ results_dict['mean'] = "N/A"
+ results_dict['authors_display'] = "N/A"
+ results_dict['additive'] = "N/A"
+ if for_api:
+ results_dict['pubmed_id'] = "N/A"
+ results_dict['year'] = "N/A"
+ else:
+ results_dict['pubmed_link'] = "N/A"
+ results_dict['pubmed_text'] = "N/A"
+
+ if bool(trait.abbreviation):
+ results_dict['abbreviation_display'] = trait.abbreviation
+ if bool(trait.description_display):
+ results_dict['description'] = trait.description_display
+ if bool(trait.mean):
+ results_dict['mean'] = f"{float(trait.mean):.3f}"
+ if bool(trait.authors):
+ authors_list = trait.authors.split(',')
+ if len(authors_list) > 6:
+ results_dict['authors_display'] = ", ".join(authors_list[:6]) + ", et al."
+ else:
+ results_dict['authors_display'] = trait.authors
+ if bool(trait.pubmed_id):
if for_api:
results_dict['pubmed_id'] = trait.pubmed_id
results_dict['year'] = trait.pubmed_text
else:
- results_dict['pubmed'] = "<a href='" + trait.pubmed_link + "'> " + trait.pubmed_text + "</a>"
- else:
- if for_api:
- results_dict['pubmed_id'] = "N/A"
- results_dict['year'] = "N/A"
- else:
- results_dict['pubmed'] = "N/A"
- results_dict['lrs_score'] = trait.LRS_score_repr
+ results_dict['pubmed_link'] = trait.pubmed_link
+ results_dict['pubmed_text'] = trait.pubmed_text
+ try:
+ results_dict['lod_score'] = f"{float(trait.LRS_score_repr) / 4.61:.1f}"
+ except:
+ results_dict['lod_score'] = "N/A"
results_dict['lrs_location'] = trait.LRS_location_repr
- if trait.additive != "":
- results_dict['additive'] = "%0.3f" % float(trait.additive)
- else:
- results_dict['additive'] = "N/A"
- if for_api:
- results_dict['sample_r'] = "%0.3f" % trait.sample_r
- else:
- results_dict['sample_r'] = "<a target='_blank' href='corr_scatter_plot?dataset_1=" + str(dataset.name) + "&dataset_2=" + str(trait.dataset.name) + "&trait_1=" + str(this_trait.name) + "&trait_2=" + str(trait.name) + "'>" + "%0.3f" % trait.sample_r + "</a>"
+ if bool(trait.additive):
+ results_dict['additive'] = f"{float(trait.additive):.3f}"
+ results_dict['sample_r'] = f"{float(trait.sample_r):.3f}"
results_dict['num_overlap'] = trait.num_overlap
- results_dict['sample_p'] = "%0.3e" % float(trait.sample_p)
+ results_dict['sample_p'] = f"{float(trait.sample_p):.3e}"
else:
- results_dict['lrs_location'] = trait.LRS_location_repr
- if for_api:
- results_dict['sample_r'] = "%0.3f" % trait.sample_r
- else:
- results_dict['sample_r'] = "<a target='_blank' href='corr_scatter_plot?dataset_1=" + str(dataset.name) + "&dataset_2=" + str(trait.dataset.name) + "&trait_1=" + str(this_trait.name) + "&trait_2=" + str(trait.name) + "'>" + "%0.3f" % float(trait.sample_r) + "</a>"
+ results_dict['location'] = trait.location_repr
+ results_dict['sample_r'] = f"{float(trait.sample_r):.3f}"
results_dict['num_overlap'] = trait.num_overlap
- results_dict['sample_p'] = "%0.3e" % float(trait.sample_p)
+ results_dict['sample_p'] = f"{float(trait.sample_p):.3e}"
results_list.append(results_dict)
@@ -611,6 +614,7 @@ def get_header_fields(data_type, corr_method):
'Record',
'Abbreviation',
'Description',
+ 'Mean',
'Authors',
'Year',
'Sample rho',
@@ -624,6 +628,7 @@ def get_header_fields(data_type, corr_method):
'Record',
'Abbreviation',
'Description',
+ 'Mean',
'Authors',
'Year',
'Sample r',
@@ -649,4 +654,5 @@ def get_header_fields(data_type, corr_method):
'N',
'Sample p(r)']
- return header_fields \ No newline at end of file
+ return header_fields
+
diff --git a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
index b5c45d05..f77761d8 100644
--- a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
+++ b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
@@ -18,52 +18,28 @@
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import absolute_import, print_function, division
-
-import sys
-# sys.path.append(".") Never do this in a webserver!
-
-import string
-import cPickle
-import os
import datetime
-import time
-import pp
import math
-import collections
-import resource
+import random
+import string
import numpy as np
import scipy
-
-from rpy2.robjects.packages import importr
import rpy2.robjects as robjects
+from rpy2.robjects.packages import importr
-from pprint import pformat as pf
-
-import reaper
-
-import redis
-Redis = redis.StrictRedis()
-
-from utility.THCell import THCell
-from utility.TDCell import TDCell
-from base.trait import GeneralTrait
from base import data_set
-from utility import webqtlUtil, helper_functions, corr_result_helpers
-from db import webqtlDatabaseFunction
-import utility.webqtlUtil #this is for parallel computing only.
-from wqflask.correlation import correlation_functions
-from utility.benchmark import Bench
-
-from MySQLdb import escape_string as escape
-
-from pprint import pformat as pf
+from base.webqtlConfig import GENERATED_TEXT_DIR
+from functools import reduce
+from functools import cmp_to_key
+from utility import webqtlUtil
+from utility import helper_functions
+from utility import corr_result_helpers
+from utility.redis_tools import get_redis_conn
-from flask import Flask, g, url_for
+Redis = get_redis_conn()
+THIRTY_DAYS = 60 * 60 * 24 * 30
-import utility.logger
-logger = utility.logger.getLogger(__name__ )
class CorrelationMatrix(object):
@@ -78,11 +54,7 @@ class CorrelationMatrix(object):
self.do_PCA = True
this_group = self.trait_list[0][1].group.name #ZS: Getting initial group name before verifying all traits are in the same group in the following loop
for trait_db in self.trait_list:
- if trait_db[1].group.name != this_group:
- self.insufficient_shared_samples = True
- break
- else:
- this_group = trait_db[1].group.name
+ this_group = trait_db[1].group.name
this_trait = trait_db[0]
self.traits.append(this_trait)
this_sample_data = this_trait.data
@@ -91,133 +63,117 @@ class CorrelationMatrix(object):
if sample not in self.all_sample_list:
self.all_sample_list.append(sample)
- if self.insufficient_shared_samples:
- pass
- else:
- self.sample_data = []
- for trait_db in self.trait_list:
- this_trait = trait_db[0]
- this_sample_data = this_trait.data
+ self.sample_data = []
+ for trait_db in self.trait_list:
+ this_trait = trait_db[0]
+ this_sample_data = this_trait.data
- this_trait_vals = []
- for sample in self.all_sample_list:
- if sample in this_sample_data:
- this_trait_vals.append(this_sample_data[sample].value)
- else:
- this_trait_vals.append('')
- self.sample_data.append(this_trait_vals)
-
- if len(this_trait_vals) < len(self.trait_list): #Shouldn't do PCA if there are more traits than observations/samples
- self.do_PCA = False
-
- self.lowest_overlap = 8 #ZS: Variable set to the lowest overlapping samples in order to notify user, or 8, whichever is lower (since 8 is when we want to display warning)
-
- self.corr_results = []
- self.pca_corr_results = []
- self.shared_samples_list = self.all_sample_list
- for trait_db in self.trait_list:
- this_trait = trait_db[0]
- this_db = trait_db[1]
-
- this_db_samples = this_db.group.all_samples_ordered()
- this_sample_data = this_trait.data
-
- corr_result_row = []
- pca_corr_result_row = []
- is_spearman = False #ZS: To determine if it's above or below the diagonal
- for target in self.trait_list:
- target_trait = target[0]
- target_db = target[1]
- target_samples = target_db.group.all_samples_ordered()
- target_sample_data = target_trait.data
-
- this_trait_vals = []
- target_vals = []
- for index, sample in enumerate(target_samples):
- if (sample in this_sample_data) and (sample in target_sample_data):
- sample_value = this_sample_data[sample].value
- target_sample_value = target_sample_data[sample].value
- this_trait_vals.append(sample_value)
- target_vals.append(target_sample_value)
- else:
- if sample in self.shared_samples_list:
- self.shared_samples_list.remove(sample)
-
- this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(this_trait_vals, target_vals)
-
- if num_overlap < self.lowest_overlap:
- self.lowest_overlap = num_overlap
- if num_overlap == 0:
- corr_result_row.append([target_trait, 0, num_overlap])
- pca_corr_result_row.append(0)
- else:
- pearson_r, pearson_p = scipy.stats.pearsonr(this_trait_vals, target_vals)
- if is_spearman == False:
- sample_r, sample_p = pearson_r, pearson_p
- if sample_r == 1:
- is_spearman = True
- else:
- sample_r, sample_p = scipy.stats.spearmanr(this_trait_vals, target_vals)
-
- corr_result_row.append([target_trait, sample_r, num_overlap])
- pca_corr_result_row.append(pearson_r)
-
- self.corr_results.append(corr_result_row)
- self.pca_corr_results.append(pca_corr_result_row)
-
- self.trait_data_array = []
- for trait_db in self.trait_list:
- this_trait = trait_db[0]
- this_db = trait_db[1]
- this_db_samples = this_db.group.all_samples_ordered()
- this_sample_data = this_trait.data
+ this_trait_vals = []
+ for sample in self.all_sample_list:
+ if sample in this_sample_data:
+ this_trait_vals.append(this_sample_data[sample].value)
+ else:
+ this_trait_vals.append('')
+ self.sample_data.append(this_trait_vals)
+
+ if len(this_trait_vals) < len(self.trait_list): #Shouldn't do PCA if there are more traits than observations/samples
+ self.do_PCA = False
+
+ self.lowest_overlap = 8 #ZS: Variable set to the lowest overlapping samples in order to notify user, or 8, whichever is lower (since 8 is when we want to display warning)
+
+ self.corr_results = []
+ self.pca_corr_results = []
+ self.shared_samples_list = self.all_sample_list
+ for trait_db in self.trait_list:
+ this_trait = trait_db[0]
+ this_db = trait_db[1]
+
+ this_db_samples = this_db.group.all_samples_ordered()
+ this_sample_data = this_trait.data
+
+ corr_result_row = []
+ pca_corr_result_row = []
+ is_spearman = False #ZS: To determine if it's above or below the diagonal
+ for target in self.trait_list:
+ target_trait = target[0]
+ target_db = target[1]
+ target_samples = target_db.group.all_samples_ordered()
+ target_sample_data = target_trait.data
this_trait_vals = []
- for index, sample in enumerate(this_db_samples):
- if (sample in this_sample_data) and (sample in self.shared_samples_list):
+ target_vals = []
+ for index, sample in enumerate(target_samples):
+ if (sample in this_sample_data) and (sample in target_sample_data):
sample_value = this_sample_data[sample].value
+ target_sample_value = target_sample_data[sample].value
this_trait_vals.append(sample_value)
- self.trait_data_array.append(this_trait_vals)
+ target_vals.append(target_sample_value)
+ else:
+ if sample in self.shared_samples_list:
+ self.shared_samples_list.remove(sample)
+
+ this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(this_trait_vals, target_vals)
+
+ if num_overlap < self.lowest_overlap:
+ self.lowest_overlap = num_overlap
+ if num_overlap < 2:
+ corr_result_row.append([target_trait, 0, num_overlap])
+ pca_corr_result_row.append(0)
+ else:
+ pearson_r, pearson_p = scipy.stats.pearsonr(this_trait_vals, target_vals)
+ if is_spearman == False:
+ sample_r, sample_p = pearson_r, pearson_p
+ if sample_r == 1:
+ is_spearman = True
+ else:
+ sample_r, sample_p = scipy.stats.spearmanr(this_trait_vals, target_vals)
+
+ corr_result_row.append([target_trait, sample_r, num_overlap])
+ pca_corr_result_row.append(pearson_r)
+
+ self.corr_results.append(corr_result_row)
+ self.pca_corr_results.append(pca_corr_result_row)
+ self.export_filename, self.export_filepath = export_corr_matrix(self.corr_results)
+
+ self.trait_data_array = []
+ for trait_db in self.trait_list:
+ this_trait = trait_db[0]
+ this_db = trait_db[1]
+ this_db_samples = this_db.group.all_samples_ordered()
+ this_sample_data = this_trait.data
+
+ this_trait_vals = []
+ for index, sample in enumerate(this_db_samples):
+ if (sample in this_sample_data) and (sample in self.shared_samples_list):
+ sample_value = this_sample_data[sample].value
+ this_trait_vals.append(sample_value)
+ self.trait_data_array.append(this_trait_vals)
+
+ groups = []
+ for sample in self.all_sample_list:
+ groups.append(1)
+
+ try:
corr_result_eigen = np.linalg.eig(np.array(self.pca_corr_results))
corr_eigen_value, corr_eigen_vectors = sortEigenVectors(corr_result_eigen)
- groups = []
- for sample in self.all_sample_list:
- groups.append(1)
-
- try:
- if self.do_PCA == True:
- self.pca_works = "True"
- self.pca_trait_ids = []
- pca = self.calculate_pca(range(len(self.traits)), corr_eigen_value, corr_eigen_vectors)
- self.loadings_array = self.process_loadings()
- else:
- self.pca_works = "False"
- except:
+ if self.do_PCA == True:
+ self.pca_works = "True"
+ self.pca_trait_ids = []
+ pca = self.calculate_pca(list(range(len(self.traits))), corr_eigen_value, corr_eigen_vectors)
+ self.loadings_array = self.process_loadings()
+ else:
self.pca_works = "False"
+ except:
+ self.pca_works = "False"
- self.js_data = dict(traits = [trait.name for trait in self.traits],
- groups = groups,
- cols = range(len(self.traits)),
- rows = range(len(self.traits)),
- samples = self.all_sample_list,
- sample_data = self.sample_data,)
- # corr_results = [result[1] for result in result_row for result_row in self.corr_results])
-
- def get_trait_db_obs(self, trait_db_list):
-
- self.trait_list = []
- for i, trait_db in enumerate(trait_db_list):
- if i == (len(trait_db_list) - 1):
- break
- trait_name, dataset_name = trait_db.split(":")
- #print("dataset_name:", dataset_name)
- dataset_ob = data_set.create_dataset(dataset_name)
- trait_ob = GeneralTrait(dataset=dataset_ob,
- name=trait_name,
- cellid=None)
- self.trait_list.append((trait_ob, dataset_ob))
+ self.js_data = dict(traits = [trait.name for trait in self.traits],
+ groups = groups,
+ cols = list(range(len(self.traits))),
+ rows = list(range(len(self.traits))),
+ samples = self.all_sample_list,
+ sample_data = self.sample_data,)
def calculate_pca(self, cols, corr_eigen_value, corr_eigen_vectors):
base = importr('base')
@@ -257,7 +213,7 @@ class CorrelationMatrix(object):
this_vals_string += "x "
this_vals_string = this_vals_string[:-1]
- Redis.set(trait_id, this_vals_string)
+ Redis.set(trait_id, this_vals_string, ex=THIRTY_DAYS)
self.pca_trait_ids.append(trait_id)
return pca
@@ -277,6 +233,36 @@ class CorrelationMatrix(object):
loadings_array.append(loadings_row)
return loadings_array
+def export_corr_matrix(corr_results):
+ corr_matrix_filename = "corr_matrix_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
+ matrix_export_path = "{}{}.csv".format(GENERATED_TEXT_DIR, corr_matrix_filename)
+ with open(matrix_export_path, "w+") as output_file:
+ output_file.write("Time/Date: " + datetime.datetime.now().strftime("%x / %X") + "\n")
+ output_file.write("\n")
+ output_file.write("Correlation ")
+ for i, item in enumerate(corr_results[0]):
+ output_file.write("Trait" + str(i + 1) + ": " + str(item[0].dataset.name) + "::" + str(item[0].name) + "\t")
+ output_file.write("\n")
+ for i, row in enumerate(corr_results):
+ output_file.write("Trait" + str(i + 1) + ": " + str(row[0][0].dataset.name) + "::" + str(row[0][0].name) + "\t")
+ for item in row:
+ output_file.write(str(item[1]) + "\t")
+ output_file.write("\n")
+
+ output_file.write("\n")
+ output_file.write("\n")
+ output_file.write("N ")
+ for i, item in enumerate(corr_results[0]):
+ output_file.write("Trait" + str(i) + ": " + str(item[0].dataset.name) + "::" + str(item[0].name) + "\t")
+ output_file.write("\n")
+ for i, row in enumerate(corr_results):
+ output_file.write("Trait" + str(i) + ": " + str(row[0][0].dataset.name) + "::" + str(row[0][0].name) + "\t")
+ for item in row:
+ output_file.write(str(item[2]) + "\t")
+ output_file.write("\n")
+
+ return corr_matrix_filename, matrix_export_path
+
def zScore(trait_data_array):
NN = len(trait_data_array[0])
if NN < 10:
@@ -285,14 +271,14 @@ def zScore(trait_data_array):
i = 0
for data in trait_data_array:
N = len(data)
- S = reduce(lambda x,y: x+y, data, 0.)
- SS = reduce(lambda x,y: x+y*y, data, 0.)
+ S = reduce(lambda x, y: x+y, data, 0.)
+ SS = reduce(lambda x, y: x+y*y, data, 0.)
mean = S/N
var = SS - S*S/N
stdev = math.sqrt(var/(N-1))
if stdev == 0:
stdev = 1e-100
- data2 = map(lambda x:(x-mean)/stdev,data)
+ data2 = [(x-mean)/stdev for x in data]
trait_data_array[i] = data2
i += 1
return trait_data_array
@@ -304,16 +290,16 @@ def sortEigenVectors(vector):
combines = []
i = 0
for item in eigenValues:
- combines.append([eigenValues[i],eigenVectors[i]])
+ combines.append([eigenValues[i], eigenVectors[i]])
i += 1
- combines.sort(webqtlUtil.cmpEigenValue)
+ sorted(combines, key=cmp_to_key(webqtlUtil.cmpEigenValue))
A = []
B = []
for item in combines:
A.append(item[0])
B.append(item[1])
- sum = reduce(lambda x,y: x+y, A, 0.0)
- A = map(lambda x:x*100.0/sum, A)
+ sum = reduce(lambda x, y: x+y, A, 0.0)
+ A = [x*100.0/sum for x in A]
return [A, B]
except:
- return [] \ No newline at end of file
+ return []
diff --git a/wqflask/wqflask/ctl/ctl_analysis.py b/wqflask/wqflask/ctl/ctl_analysis.py
index 4415b86a..72b4f3a3 100644
--- a/wqflask/wqflask/ctl/ctl_analysis.py
+++ b/wqflask/wqflask/ctl/ctl_analysis.py
@@ -17,7 +17,7 @@ import csv
import itertools
from base import data_set
-from base import trait as TRAIT
+from base.trait import create_trait, retrieve_sample_data
from utility import helper_functions
from utility.tools import locate, GN2_BRANCH_URL
@@ -122,10 +122,10 @@ class CTL(object):
logger.debug("retrieving data for", trait)
if trait != "":
ts = trait.split(':')
- gt = TRAIT.GeneralTrait(name = ts[0], dataset_name = ts[1])
- gt = TRAIT.retrieve_sample_data(gt, dataset, individuals)
+ gt = create_trait(name = ts[0], dataset_name = ts[1])
+ gt = retrieve_sample_data(gt, dataset, individuals)
for ind in individuals:
- if ind in gt.data.keys():
+ if ind in list(gt.data.keys()):
traits.append(gt.data[ind].value)
else:
traits.append("-999")
@@ -143,7 +143,7 @@ class CTL(object):
#r_write_table(rPheno, "~/outputGN/pheno.csv")
# Perform the CTL scan
- res = self.r_CTLscan(rGeno, rPheno, strategy = strategy, nperm = nperm, parametric = parametric, ncores = 6)
+ res = self.r_CTLscan(rGeno, rPheno, strategy = strategy, nperm = nperm, parametric = parametric, nthreads=6)
# Get significant interactions
significant = self.r_CTLsignificant(res, significance = significance)
@@ -175,26 +175,26 @@ class CTL(object):
sys.stdout.flush()
# Create the interactive graph for cytoscape visualization (Nodes and Edges)
- if not type(significant) == ri.RNULLType:
+ if not isinstance(significant, ri.RNULLType):
for x in range(len(significant[0])):
logger.debug(significant[0][x], significant[1][x], significant[2][x]) # Debug to console
tsS = significant[0][x].split(':') # Source
tsT = significant[2][x].split(':') # Target
- gtS = TRAIT.GeneralTrait(name = tsS[0], dataset_name = tsS[1]) # Retrieve Source info from the DB
- gtT = TRAIT.GeneralTrait(name = tsT[0], dataset_name = tsT[1]) # Retrieve Target info from the DB
+ gtS = create_trait(name = tsS[0], dataset_name = tsS[1]) # Retrieve Source info from the DB
+ gtT = create_trait(name = tsT[0], dataset_name = tsT[1]) # Retrieve Target info from the DB
self.addNode(gtS)
self.addNode(gtT)
self.addEdge(gtS, gtT, significant, x)
- significant[0][x] = gtS.symbol + " (" + gtS.name + ")" # Update the trait name for the displayed table
- significant[2][x] = gtT.symbol + " (" + gtT.name + ")" # Update the trait name for the displayed table
+ significant[0][x] = "{} ({})".format(gtS.symbol, gtS.name) # Update the trait name for the displayed table
+ significant[2][x] = "{} ({})".format(gtT.symbol, gtT.name) # Update the trait name for the displayed table
self.elements = json.dumps(self.nodes_list + self.edges_list)
def loadImage(self, path, name):
imgfile = open(self.results[path], 'rb')
imgdata = imgfile.read()
- imgB64 = imgdata.encode("base64")
+ imgB64 = base64.b64encode(imgdata)
bytesarray = array.array('B', imgB64)
self.results[name] = bytesarray
diff --git a/wqflask/wqflask/db_info.py b/wqflask/wqflask/db_info.py
new file mode 100644
index 00000000..f420b472
--- /dev/null
+++ b/wqflask/wqflask/db_info.py
@@ -0,0 +1,138 @@
+import http.client
+import urllib.request
+import urllib.error
+import urllib.parse
+import re
+
+from flask import Flask, g
+
+from utility.logger import getLogger
+logger = getLogger(__name__)
+
+
+class InfoPage(object):
+ def __init__(self, start_vars):
+ self.info = None
+ self.gn_accession_id = None
+ if 'gn_accession_id' in start_vars:
+ self.gn_accession_id = start_vars['gn_accession_id']
+ self.info_page_name = start_vars['info_page_name']
+
+ self.get_info()
+ self.get_datasets_list()
+
+ def get_info(self, create=False):
+ query_base = ("SELECT InfoPageName, GN_AccesionId, Species.MenuName, Species.TaxonomyId, Tissue.Name, InbredSet.Name, " +
+ "GeneChip.GeneChipName, GeneChip.GeoPlatform, AvgMethod.Name, Datasets.DatasetName, Datasets.GeoSeries, " +
+ "Datasets.PublicationTitle, DatasetStatus.DatasetStatusName, Datasets.Summary, Datasets.AboutCases, " +
+ "Datasets.AboutTissue, Datasets.AboutDataProcessing, Datasets.Acknowledgment, Datasets.ExperimentDesign, " +
+ "Datasets.Contributors, Datasets.Citation, Datasets.Notes, Investigators.FirstName, Investigators.LastName, " +
+ "Investigators.Address, Investigators.City, Investigators.State, Investigators.ZipCode, Investigators.Country, " +
+ "Investigators.Phone, Investigators.Email, Investigators.Url, Organizations.OrganizationName, " +
+ "InvestigatorId, DatasetId, DatasetStatusId, Datasets.AboutPlatform, InfoFileTitle, Specifics " +
+ "FROM InfoFiles " +
+ "LEFT JOIN Species USING (SpeciesId) " +
+ "LEFT JOIN Tissue USING (TissueId) " +
+ "LEFT JOIN InbredSet USING (InbredSetId) " +
+ "LEFT JOIN GeneChip USING (GeneChipId) " +
+ "LEFT JOIN AvgMethod USING (AvgMethodId) " +
+ "LEFT JOIN Datasets USING (DatasetId) " +
+ "LEFT JOIN Investigators USING (InvestigatorId) " +
+ "LEFT JOIN Organizations USING (OrganizationId) " +
+ "LEFT JOIN DatasetStatus USING (DatasetStatusId) WHERE ")
+
+ if self.gn_accession_id:
+ final_query = query_base + \
+ "GN_AccesionId = {}".format(self.gn_accession_id)
+ results = g.db.execute(final_query).fetchone()
+ if self.info_page_name and not results:
+ final_query = query_base + \
+ "InfoPageName={}".format(self.info_page_name)
+ elif self.info_page_name:
+ final_query = query_base + \
+ "InfoPageName={}".format(self.info_page_name)
+ results = g.db.execute(final_query).fetchone()
+ else:
+ raise 'No correct parameter found'
+
+ if results:
+ self.info = process_query_results(results)
+
+ if (not results or len(results) < 1) and self.info_page_name and create:
+ insert_sql = "INSERT INTO InfoFiles SET InfoFiles.InfoPageName={}".format(
+ self.info_page_name)
+ return self.get_info()
+
+ if not self.gn_accession_id and self.info:
+ self.gn_accession_id = self.info['accession_id']
+ if not self.info_page_name and self.info:
+ self.info_page_name = self.info['info_page_name']
+
+ def get_datasets_list(self):
+ self.filelist = []
+ try:
+ response = urllib.request.urlopen(
+ "http://datafiles.genenetwork.org/download/GN%s" % self.gn_accession_id)
+ data = response.read()
+
+ matches = re.findall(r"<tr>.+?</tr>", data, re.DOTALL)
+ for i, match in enumerate(matches):
+ if i == 0:
+ continue
+ cells = re.findall(r"<td.+?>.+?</td>", match, re.DOTALL)
+ full_filename = re.search(
+ r"<a href=\"(.+?)\"", cells[1], re.DOTALL).group(1).strip()
+ filename = full_filename.split("/")[-1]
+ filesize = re.search(r">(.+?)<", cells[2]).group(1).strip()
+ filedate = "N/A" # ZS: Since we can't get it for now
+
+ self.filelist.append([filename, filedate, filesize])
+ except Exception as e:
+ pass
+
+def process_query_results(results):
+ info_ob = {
+ 'info_page_name': results[0],
+ 'accession_id': results[1],
+ 'menu_name': results[2],
+ 'taxonomy_id': results[3],
+ 'tissue_name': results[4],
+ 'group_name': results[5],
+ 'gene_chip_name': results[6],
+ 'geo_platform': results[7],
+ 'avg_method_name': results[8],
+ 'dataset_name': results[9],
+ 'geo_series': results[10],
+ 'publication_title': results[11],
+ 'dataset_status_name': results[12],
+ 'dataset_summary': results[13],
+ 'about_cases': results[14],
+ 'about_tissue': results[15],
+ 'about_data_processing': results[16],
+ 'acknowledgement': results[17],
+ 'experiment_design': results[18],
+ 'contributors': results[19],
+ 'citation': results[20],
+ 'notes': results[21],
+ 'investigator_firstname': results[22],
+ 'investigator_lastname': results[23],
+ 'investigator_address': results[24],
+ 'investigator_city': results[25],
+ 'investigator_state': results[26],
+ 'investigator_zipcode': results[27],
+ 'investigator_country': results[28],
+ 'investigator_phone': results[29],
+ 'investigator_email': results[30],
+ 'investigator_url': results[31],
+ 'organization_name': results[32],
+ 'investigator_id': results[33],
+ 'dataset_id': results[34],
+ 'dataset_status_is': results[35],
+ 'about_platform': results[36],
+ 'info_file_title': results[37],
+ 'specifics': results[38]
+ }
+
+ return info_ob
+
+
diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py
index b0ca5ced..00636563 100644
--- a/wqflask/wqflask/do_search.py
+++ b/wqflask/wqflask/do_search.py
@@ -1,16 +1,13 @@
-from __future__ import print_function, division
-
import string
import requests
import json
from flask import Flask, g
-from MySQLdb import escape_string as escape
+from utility.db_tools import escape
from pprint import pformat as pf
import sys
-# sys.path.append("..") Never in a running webserver
from db import webqtlDatabaseFunction
from utility.tools import GN2_BASE_URL
@@ -19,6 +16,7 @@ import logging
from utility.logger import getLogger
logger = getLogger(__name__)
+
class DoSearch(object):
"""Parent class containing parameters/functions used for all searches"""
@@ -34,10 +32,7 @@ class DoSearch(object):
self.search_type = search_type
if self.dataset:
- logger.debug("self.dataset is boo: ", type(self.dataset), pf(self.dataset))
- logger.debug("self.dataset.group is: ", pf(self.dataset.group))
#Get group information for dataset and the species id
-
self.species_id = webqtlDatabaseFunction.retrieve_species_id(self.dataset.group.name)
def execute(self, query):
@@ -49,15 +44,11 @@ class DoSearch(object):
def handle_wildcard(self, str):
keyword = str.strip()
- keyword = keyword.replace("*",".*")
- keyword = keyword.replace("?",".")
+ keyword = keyword.replace("*", ".*")
+ keyword = keyword.replace("?", ".")
return keyword
- #def escape(self, stringy):
- # """Shorter name than self.db_conn.escape_string"""
- # return escape(str(stringy))
-
def mescape(self, *items):
"""Multiple escape"""
escaped = [escape(str(item)) for item in items]
@@ -71,8 +62,6 @@ class DoSearch(object):
@classmethod
def get_search(cls, search_type):
- logger.debug("search_types are:", pf(cls.search_types))
-
search_type_string = search_type['dataset_type']
if 'key' in search_type and search_type['key'] != None:
search_type_string += '_' + search_type['key']
@@ -648,7 +637,7 @@ class CisTransLrsSearch(DoSearch):
escape(self.dataset.type),
chromosome)
else:
- location_clause = "(ABS(%s.Mb-Geno.Mb) %s %s and %s.Chr = Geno.Chr) or (%s.Chr != Geno.Chr)" % (escape(self.dataset.type), the_operator, escape(str(self.mb_buffer)), escape(self.dataset.type))
+ location_clause = "(ABS(%s.Mb-Geno.Mb) %s %s and %s.Chr = Geno.Chr) or (%s.Chr != Geno.Chr)" % (escape(self.dataset.type), the_operator, escape(str(self.mb_buffer)), escape(self.dataset.type), escape(self.dataset.type))
where_clause = sub_clause + """
%sXRef.Locus = Geno.name and
Geno.SpeciesId = %s and
diff --git a/wqflask/wqflask/docs.py b/wqflask/wqflask/docs.py
index 0187f32e..23fc3cad 100644
--- a/wqflask/wqflask/docs.py
+++ b/wqflask/wqflask/docs.py
@@ -1,4 +1,4 @@
-from __future__ import absolute_import, print_function, division
+import codecs
from flask import g
@@ -9,7 +9,7 @@ class Docs(object):
def __init__(self, entry, start_vars={}):
sql = """
- SELECT Docs.title, Docs.content
+ SELECT Docs.title, CAST(Docs.content AS BINARY)
FROM Docs
WHERE Docs.entry LIKE %s
"""
@@ -19,8 +19,10 @@ class Docs(object):
self.title = self.entry.capitalize()
self.content = ""
else:
+
self.title = result[0]
- self.content = result[1]
+ self.content = result[1].decode("utf-8")
+
self.editable = "false"
# ZS: Removing option to edit to see if text still gets vandalized
@@ -40,4 +42,4 @@ def update_text(start_vars):
sql = "UPDATE Docs SET content='{0}' WHERE entry='{1}';".format(content, start_vars['entry_type'])
g.db.execute(sql)
except:
- pass \ No newline at end of file
+ pass
diff --git a/wqflask/wqflask/export_traits.py b/wqflask/wqflask/export_traits.py
index 2d96c05a..6fb760e0 100644
--- a/wqflask/wqflask/export_traits.py
+++ b/wqflask/wqflask/export_traits.py
@@ -1,27 +1,31 @@
-from __future__ import print_function, division
-
import csv
import xlsxwriter
-import StringIO
+import io
import datetime
+import itertools
+
+from zipfile import ZipFile, ZIP_DEFLATED
import simplejson as json
+from base.trait import create_trait, retrieve_trait_info
+
from pprint import pformat as pf
+from utility.logger import getLogger
+logger = getLogger(__name__ )
+
def export_search_results_csv(targs):
table_data = json.loads(targs['export_data'])
- table_headers = table_data['headers']
table_rows = table_data['rows']
- buff = StringIO.StringIO()
- writer = csv.writer(buff)
-
+ now = datetime.datetime.now()
+ time_str = now.strftime('%H:%M_%d%B%Y')
if 'file_name' in targs:
- file_name = targs['file_name']
+ zip_file_name = targs['file_name'] + "_export_" + time_str
else:
- file_name = "table_export.csv"
+ zip_file_name = "export_" + time_str
metadata = []
@@ -40,19 +44,100 @@ def export_search_results_csv(targs):
if targs['filter_term'] != "None":
metadata.append(["Search Filter Terms: " + targs['filter_term']])
metadata.append(["Exported Row Number: " + str(len(table_rows))])
+ metadata.append(["Funding for The GeneNetwork: NIGMS (R01 GM123489, 2017-2021), NIDA (P30 DA044223, 2017-2022), NIA (R01AG043930, 2013-2018), NIAAA (U01 AA016662, U01 AA013499, U24 AA013513, U01 AA014425, 2006-2017), NIDA/NIMH/NIAAA (P20-DA 21131, 2001-2012), NCI MMHCC (U01CA105417), NCRR/BIRN (U24 RR021760)"])
+ metadata.append([])
+
+ trait_list = []
+ for trait in table_rows:
+ trait_name, dataset_name, _hash = trait.split(":")
+ trait_ob = create_trait(name=trait_name, dataset_name=dataset_name)
+ trait_ob = retrieve_trait_info(trait_ob, trait_ob.dataset, get_qtl_info=True)
+ trait_list.append(trait_ob)
+
+ table_headers = ['Index', 'URL', 'Species', 'Group', 'Dataset', 'Record ID', 'Symbol', 'Description', 'ProbeTarget', 'PubMed_ID', 'Chr', 'Mb', 'Alias', 'Gene_ID', 'Homologene_ID', 'UniGene_ID', 'Strand_Probe', 'Probe_set_specificity', 'Probe_set_BLAT_score', 'Probe_set_BLAT_Mb_start', 'Probe_set_BLAT_Mb_end', 'QTL_Chr', 'QTL_Mb', 'Locus_at_Peak', 'Max_LRS', 'P_value_of_MAX', 'Mean_Expression']
+
+ traits_by_group = sort_traits_by_group(trait_list)
+
+ file_list = []
+ for group in list(traits_by_group.keys()):
+ group_traits = traits_by_group[group]
+ buff = io.StringIO()
+ writer = csv.writer(buff)
+ csv_rows = []
+
+ sample_headers = []
+ for sample in group_traits[0].dataset.group.samplelist:
+ sample_headers.append(sample)
+ sample_headers.append(sample + "_SE")
+
+ full_headers = table_headers + sample_headers
+
+ for metadata_row in metadata:
+ writer.writerow(metadata_row)
+
+ csv_rows.append(full_headers)
+
+ for i, trait in enumerate(group_traits):
+ if getattr(trait, "symbol", None):
+ trait_symbol = getattr(trait, "symbol")
+ elif getattr(trait, "abbreviation", None):
+ trait_symbol = getattr(trait, "abbreviation")
+ else:
+ trait_symbol = "N/A"
+ row_contents = [
+ i + 1,
+ "https://genenetwork.org/show_trait?trait_id=" + str(trait.name) + "&dataset=" + str(trait.dataset.name),
+ trait.dataset.group.species,
+ trait.dataset.group.name,
+ trait.dataset.name,
+ trait.name,
+ trait_symbol,
+ getattr(trait, "description_display", "N/A"),
+ getattr(trait, "probe_target_description", "N/A"),
+ getattr(trait, "pubmed_id", "N/A"),
+ getattr(trait, "chr", "N/A"),
+ getattr(trait, "mb", "N/A"),
+ trait.alias_fmt,
+ getattr(trait, "geneid", "N/A"),
+ getattr(trait, "homologeneid", "N/A"),
+ getattr(trait, "unigeneid", "N/A"),
+ getattr(trait, "strand_probe", "N/A"),
+ getattr(trait, "probe_set_specificity", "N/A"),
+ getattr(trait, "probe_set_blat_score", "N/A"),
+ getattr(trait, "probe_set_blat_mb_start", "N/A"),
+ getattr(trait, "probe_set_blat_mb_end", "N/A"),
+ getattr(trait, "locus_chr", "N/A"),
+ getattr(trait, "locus_mb", "N/A"),
+ getattr(trait, "locus", "N/A"),
+ getattr(trait, "lrs", "N/A"),
+ getattr(trait, "pvalue", "N/A"),
+ getattr(trait, "mean", "N/A")
+ ]
+
+ for sample in trait.dataset.group.samplelist:
+ if sample in trait.data:
+ row_contents += [trait.data[sample].value, trait.data[sample].variance]
+ else:
+ row_contents += ["x", "x"]
+
+ csv_rows.append(row_contents)
+
+ csv_rows = list(map(list, itertools.zip_longest(*[row for row in csv_rows])))
+ writer.writerows(csv_rows)
+ csv_data = buff.getvalue()
+ buff.close()
- for metadata_row in metadata:
- writer.writerow(metadata_row)
+ file_name = group + "_traits.csv"
+ file_list.append([file_name, csv_data])
- writer.writerow([])
+ return file_list
- writer.writerow(table_headers)
- for trait_info in table_rows:
- writer.writerow(trait_info)
+def sort_traits_by_group(trait_list=[]):
+ traits_by_group = {}
+ for trait in trait_list:
+ if trait.dataset.group.name not in list(traits_by_group.keys()):
+ traits_by_group[trait.dataset.group.name] = []
- writer.writerow([])
- writer.writerow(["Funding for The GeneNetwork: NIAAA (U01AA13499, U24AA13513), NIDA, NIMH, and NIAAA (P20-DA21131), NCI MMHCC (U01CA105417), and NCRR (U01NR 105417)"])
- csv_data = buff.getvalue()
- buff.close()
+ traits_by_group[trait.dataset.group.name].append(trait)
- return csv_data, file_name \ No newline at end of file
+ return traits_by_group
diff --git a/wqflask/wqflask/external_tools/send_to_bnw.py b/wqflask/wqflask/external_tools/send_to_bnw.py
index 68efd10d..efa17f05 100644
--- a/wqflask/wqflask/external_tools/send_to_bnw.py
+++ b/wqflask/wqflask/external_tools/send_to_bnw.py
@@ -18,8 +18,6 @@
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import absolute_import, print_function, division
-
from base.trait import GeneralTrait
from utility import helper_functions, corr_result_helpers
@@ -69,4 +67,4 @@ class SendToBNW(object):
if has_none:
continue
self.form_value += ",".join(str(cell) for cell in row)
- self.form_value += ";" \ No newline at end of file
+ self.form_value += ";"
diff --git a/wqflask/wqflask/external_tools/send_to_geneweaver.py b/wqflask/wqflask/external_tools/send_to_geneweaver.py
index 7a5dba73..4c958a88 100644
--- a/wqflask/wqflask/external_tools/send_to_geneweaver.py
+++ b/wqflask/wqflask/external_tools/send_to_geneweaver.py
@@ -18,8 +18,6 @@
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import absolute_import, print_function, division
-
import string
from flask import Flask, g
@@ -54,10 +52,10 @@ class SendToGeneWeaver(object):
trait_name_list = get_trait_name_list(self.trait_list)
self.hidden_vars = {
- 'client' : "genenetwork",
- 'species' : species_name,
- 'idtype' : self.chip_name,
- 'list' : string.join(trait_name_list, ","),
+ 'client': "genenetwork",
+ 'species': species_name,
+ 'idtype': self.chip_name,
+ 'list': ",".join(trait_name_list),
}
def get_trait_name_list(trait_list):
@@ -109,4 +107,4 @@ def test_chip(trait_list):
chip_name = '%s_NA' % result[0]
return chip_name
- return chip_name \ No newline at end of file
+ return chip_name
diff --git a/wqflask/wqflask/external_tools/send_to_webgestalt.py b/wqflask/wqflask/external_tools/send_to_webgestalt.py
index 30ca024f..2f068792 100644
--- a/wqflask/wqflask/external_tools/send_to_webgestalt.py
+++ b/wqflask/wqflask/external_tools/send_to_webgestalt.py
@@ -18,8 +18,6 @@
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import absolute_import, print_function, division
-
import string
from flask import Flask, g
@@ -49,7 +47,7 @@ class SendToWebGestalt(object):
id_type = "entrezgene"
self.hidden_vars = {
- 'gene_list' : string.join(gene_id_list, "\n"),
+ 'gene_list' : "\n".join(gene_id_list),
'id_type' : "entrezgene",
'ref_set' : "genome",
'enriched_database_category' : "geneontology",
@@ -123,4 +121,4 @@ def gen_gene_id_list(trait_list):
trait_name_list.append(trait.name)
retrieve_trait_info(trait, trait.dataset)
gene_id_list.append(str(trait.geneid))
- return trait_name_list, gene_id_list \ No newline at end of file
+ return trait_name_list, gene_id_list
diff --git a/wqflask/wqflask/group_manager.py b/wqflask/wqflask/group_manager.py
new file mode 100644
index 00000000..69ee9623
--- /dev/null
+++ b/wqflask/wqflask/group_manager.py
@@ -0,0 +1,155 @@
+import random, string
+
+from flask import (Flask, g, render_template, url_for, request, make_response,
+ redirect, flash)
+
+from wqflask import app
+from wqflask.user_login import send_verification_email, send_invitation_email, basic_info, set_password
+
+from utility.redis_tools import get_user_groups, get_group_info, save_user, create_group, delete_group, add_users_to_group, remove_users_from_group, \
+ change_group_name, save_verification_code, check_verification_code, get_user_by_unique_column, get_resources, get_resource_info
+
+from utility.logger import getLogger
+logger = getLogger(__name__)
+
+@app.route("/groups/manage", methods=('GET', 'POST'))
+def manage_groups():
+ params = request.form if request.form else request.args
+ if "add_new_group" in params:
+ return redirect(url_for('add_group'))
+ else:
+ admin_groups, member_groups = get_user_groups(g.user_session.user_id)
+ return render_template("admin/group_manager.html", admin_groups=admin_groups, member_groups=member_groups)
+
+@app.route("/groups/view", methods=('GET', 'POST'))
+def view_group():
+ params = request.form if request.form else request.args
+ group_id = params['id']
+ group_info = get_group_info(group_id)
+ admins_info = []
+ user_is_admin = False
+ if g.user_session.user_id in group_info['admins']:
+ user_is_admin = True
+ for user_id in group_info['admins']:
+ if user_id:
+ user_info = get_user_by_unique_column("user_id", user_id)
+ admins_info.append(user_info)
+ members_info = []
+ for user_id in group_info['members']:
+ if user_id:
+ user_info = get_user_by_unique_column("user_id", user_id)
+ members_info.append(user_info)
+
+ #ZS: This whole part might not scale well with many resources
+ resources_info = []
+ all_resources = get_resources()
+ for resource_id in all_resources:
+ resource_info = get_resource_info(resource_id)
+ group_masks = resource_info['group_masks']
+ if group_id in group_masks:
+ this_resource = {}
+ privileges = group_masks[group_id]
+ this_resource['id'] = resource_id
+ this_resource['name'] = resource_info['name']
+ this_resource['data'] = privileges['data']
+ this_resource['metadata'] = privileges['metadata']
+ this_resource['admin'] = privileges['admin']
+ resources_info.append(this_resource)
+
+ return render_template("admin/view_group.html", group_info=group_info, admins=admins_info, members=members_info, user_is_admin=user_is_admin, resources=resources_info)
+
+@app.route("/groups/remove", methods=('POST',))
+def remove_groups():
+ group_ids_to_remove = request.form['selected_group_ids']
+ for group_id in group_ids_to_remove.split(":"):
+ delete_group(g.user_session.user_id, group_id)
+
+ return redirect(url_for('manage_groups'))
+
+@app.route("/groups/remove_users", methods=('POST',))
+def remove_users():
+ group_id = request.form['group_id']
+ admin_ids_to_remove = request.form['selected_admin_ids']
+ member_ids_to_remove = request.form['selected_member_ids']
+
+ remove_users_from_group(g.user_session.user_id, admin_ids_to_remove.split(":"), group_id, user_type="admins")
+ remove_users_from_group(g.user_session.user_id, member_ids_to_remove.split(":"), group_id, user_type="members")
+
+ return redirect(url_for('view_group', id=group_id))
+
+@app.route("/groups/add_<path:user_type>", methods=('POST',))
+def add_users(user_type='members'):
+ group_id = request.form['group_id']
+ if user_type == "admins":
+ user_emails = request.form['admin_emails_to_add'].split(",")
+ add_users_to_group(g.user_session.user_id, group_id, user_emails, admins = True)
+ elif user_type == "members":
+ user_emails = request.form['member_emails_to_add'].split(",")
+ add_users_to_group(g.user_session.user_id, group_id, user_emails, admins = False)
+
+ return redirect(url_for('view_group', id=group_id))
+
+@app.route("/groups/change_name", methods=('POST',))
+def change_name():
+ group_id = request.form['group_id']
+ new_name = request.form['new_name']
+ group_info = change_group_name(g.user_session.user_id, group_id, new_name)
+
+ return new_name
+
+@app.route("/groups/create", methods=('GET', 'POST'))
+def add_or_edit_group():
+ params = request.form if request.form else request.args
+ if "group_name" in params:
+ member_user_ids = set()
+ admin_user_ids = set()
+ admin_user_ids.add(g.user_session.user_id) #ZS: Always add the user creating the group as an admin
+ if "admin_emails_to_add" in params:
+ admin_emails = params['admin_emails_to_add'].split(",")
+ for email in admin_emails:
+ user_details = get_user_by_unique_column("email_address", email)
+ if user_details:
+ admin_user_ids.add(user_details['user_id'])
+ #send_group_invites(params['group_id'], user_email_list = admin_emails, user_type="admins")
+ if "member_emails_to_add" in params:
+ member_emails = params['member_emails_to_add'].split(",")
+ for email in member_emails:
+ user_details = get_user_by_unique_column("email_address", email)
+ if user_details:
+ member_user_ids.add(user_details['user_id'])
+ #send_group_invites(params['group_id'], user_email_list = user_emails, user_type="members")
+
+ create_group(list(admin_user_ids), list(member_user_ids), params['group_name'])
+ return redirect(url_for('manage_groups'))
+ else:
+ return render_template("admin/create_group.html")
+
+#ZS: Will integrate this later, for now just letting users be added directly
+def send_group_invites(group_id, user_email_list = [], user_type="members"):
+ for user_email in user_email_list:
+ user_details = get_user_by_unique_column("email_address", user_email)
+ if user_details:
+ group_info = get_group_info(group_id)
+ #ZS: Probably not necessary since the group should normally always exist if group_id is being passed here,
+ # but it's technically possible to hit it if Redis is cleared out before submitting the new users or something
+ if group_info:
+ #ZS: Don't add user if they're already an admin or if they're being added a regular user and are already a regular user,
+ # but do add them if they're a regular user and are added as an admin
+ if (user_details['user_id'] in group_info['admins']) or \
+ ((user_type == "members") and (user_details['user_id'] in group_info['members'])):
+ continue
+ else:
+ send_verification_email(user_details, template_name = "email/group_verification.txt", key_prefix = "verification_code", subject = "You've been invited to join a GeneNetwork user group")
+ else:
+ temp_password = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
+ user_details = {
+ 'user_id': str(uuid.uuid4()),
+ 'email_address': user_email,
+ 'registration_info': basic_info(),
+ 'password': set_password(temp_password),
+ 'confirmed': 0
+ }
+ save_user(user_details, user_details['user_id'])
+ send_invitation_email(user_email, temp_password)
+
+#@app.route()
diff --git a/wqflask/wqflask/gsearch.py b/wqflask/wqflask/gsearch.py
index 04e3d578..907f1180 100644
--- a/wqflask/wqflask/gsearch.py
+++ b/wqflask/wqflask/gsearch.py
@@ -1,18 +1,19 @@
-from __future__ import absolute_import, print_function, division
-
import json
+import datetime as dt
+from types import SimpleNamespace
from flask import Flask, g
from base.data_set import create_dataset
-from base.trait import GeneralTrait
+from base.trait import create_trait
from db import webqtlDatabaseFunction
from base import webqtlConfig
from utility import hmac
-from utility.type_checking import is_float, is_int, is_str, get_float, get_int, get_string
from utility.benchmark import Bench
+from utility.authentication_tools import check_resource_availability
+from utility.type_checking import is_float, is_int, is_str, get_float, get_int, get_string
from utility.logger import getLogger
logger = getLogger(__name__)
@@ -37,22 +38,26 @@ class GSearch(object):
ProbeSetFreeze.FullName AS probesetfreeze_fullname,
ProbeSet.Name AS probeset_name,
ProbeSet.Symbol AS probeset_symbol,
- ProbeSet.`description` AS probeset_description,
+ CAST(ProbeSet.`description` AS BINARY) AS probeset_description,
ProbeSet.Chr AS chr,
ProbeSet.Mb AS mb,
ProbeSetXRef.Mean AS mean,
ProbeSetXRef.LRS AS lrs,
ProbeSetXRef.`Locus` AS locus,
ProbeSetXRef.`pValue` AS pvalue,
- ProbeSetXRef.`additive` AS additive
- FROM Species, InbredSet, ProbeSetXRef, ProbeSet, ProbeFreeze, ProbeSetFreeze, Tissue
- WHERE InbredSet.`SpeciesId`=Species.`Id`
- AND ProbeFreeze.InbredSetId=InbredSet.`Id`
- AND ProbeFreeze.`TissueId`=Tissue.`Id`
- AND ProbeSetFreeze.ProbeFreezeId=ProbeFreeze.Id
- AND ( MATCH (ProbeSet.Name,ProbeSet.description,ProbeSet.symbol,alias,GenbankId, UniGeneId, Probe_Target_Description) AGAINST ('%s' IN BOOLEAN MODE) )
- AND ProbeSet.Id = ProbeSetXRef.ProbeSetId
- AND ProbeSetXRef.ProbeSetFreezeId=ProbeSetFreeze.Id
+ ProbeSetXRef.`additive` AS additive,
+ ProbeSetFreeze.Id AS probesetfreeze_id,
+ Geno.Chr as geno_chr,
+ Geno.Mb as geno_mb
+ FROM Species
+ INNER JOIN InbredSet ON InbredSet.`SpeciesId`=Species.`Id`
+ INNER JOIN ProbeFreeze ON ProbeFreeze.InbredSetId=InbredSet.`Id`
+ INNER JOIN Tissue ON ProbeFreeze.`TissueId`=Tissue.`Id`
+ INNER JOIN ProbeSetFreeze ON ProbeSetFreeze.ProbeFreezeId=ProbeFreeze.Id
+ INNER JOIN ProbeSetXRef ON ProbeSetXRef.ProbeSetFreezeId=ProbeSetFreeze.Id
+ INNER JOIN ProbeSet ON ProbeSet.Id = ProbeSetXRef.ProbeSetId
+ LEFT JOIN Geno ON ProbeSetXRef.Locus = Geno.Name AND Geno.SpeciesId = Species.Id
+ WHERE ( MATCH (ProbeSet.Name,ProbeSet.description,ProbeSet.symbol,ProbeSet.alias,ProbeSet.GenbankId, ProbeSet.UniGeneId, ProbeSet.Probe_Target_Description) AGAINST ('%s' IN BOOLEAN MODE) )
AND ProbeSetFreeze.confidentiality < 1
AND ProbeSetFreeze.public > 0
ORDER BY species_name, inbredset_name, tissue_name, probesetfreeze_name, probeset_name
@@ -63,6 +68,7 @@ class GSearch(object):
re = g.db.execute(sql).fetchall()
trait_list = []
+ dataset_to_permissions = {}
with Bench("Creating trait objects"):
for i, line in enumerate(re):
this_trait = {}
@@ -92,14 +98,26 @@ class GSearch(object):
this_trait['additive'] = "N/A"
if line[14] != "" and line[14] != None:
this_trait['additive'] = '%.3f' % line[14]
+ this_trait['dataset_id'] = line[15]
+ this_trait['locus_chr'] = line[16]
+ this_trait['locus_mb'] = line[17]
+
+ dataset_ob = SimpleNamespace(id=this_trait["dataset_id"], type="ProbeSet",species=this_trait["species"])
+ if dataset_ob.id not in dataset_to_permissions:
+ permissions = check_resource_availability(dataset_ob)
+ dataset_to_permissions[dataset_ob.id] = permissions
+ else:
+ pemissions = dataset_to_permissions[dataset_ob.id]
+ if type(permissions['data']) is list:
+ if "view" not in permissions['data']:
+ continue
+ else:
+ if permissions['data'] == 'no-access':
+ continue
- #dataset = create_dataset(line[3], "ProbeSet", get_samplelist=False)
- #trait_id = line[4]
- #with Bench("Building trait object"):
- trait_ob = GeneralTrait(dataset_name=this_trait['dataset'], name=this_trait['name'], get_qtl_info=True, get_sample_info=False)
max_lrs_text = "N/A"
- if trait_ob.locus_chr != "" and trait_ob.locus_mb != "":
- max_lrs_text = "Chr" + str(trait_ob.locus_chr) + ": " + str(trait_ob.locus_mb)
+ if this_trait['locus_chr'] != None and this_trait['locus_mb'] != None:
+ max_lrs_text = "Chr" + str(this_trait['locus_chr']) + ": " + str(this_trait['locus_mb'])
this_trait['max_lrs_text'] = max_lrs_text
trait_list.append(this_trait)
@@ -135,8 +153,8 @@ class GSearch(object):
PublishFreeze.`Name`,
PublishFreeze.`FullName`,
PublishXRef.`Id`,
- Phenotype.`Pre_publication_description`,
- Phenotype.`Post_publication_description`,
+ CAST(Phenotype.`Pre_publication_description` AS BINARY),
+ CAST(Phenotype.`Post_publication_description` AS BINARY),
Publication.`Authors`,
Publication.`Year`,
Publication.`PubMed_ID`,
@@ -188,7 +206,7 @@ class GSearch(object):
else:
this_trait['description'] = "N/A"
if line[13] != None and line[13] != "":
- this_trait['mean'] = line[13]
+ this_trait['mean'] = f"{line[13]:.3f}"
else:
this_trait['mean'] = "N/A"
this_trait['authors'] = line[7]
@@ -210,13 +228,12 @@ class GSearch(object):
if line[11] != "" and line[11] != None:
this_trait['additive'] = '%.3f' % line[11]
- #dataset = create_dataset(line[2], "Publish")
- #trait_id = line[3]
- #this_trait = GeneralTrait(dataset=dataset, name=trait_id, get_qtl_info=True, get_sample_info=False)
this_trait['max_lrs_text'] = "N/A"
+ trait_ob = create_trait(dataset_name=this_trait['dataset'], name=this_trait['name'], get_qtl_info=True, get_sample_info=False)
+ if not trait_ob:
+ continue
if this_trait['dataset'] == this_trait['group'] + "Publish":
try:
- trait_ob = GeneralTrait(dataset_name=this_trait['dataset'], name=this_trait['name'], get_qtl_info=True, get_sample_info=False)
if trait_ob.locus_chr != "" and trait_ob.locus_mb != "":
this_trait['max_lrs_text'] = "Chr" + str(trait_ob.locus_chr) + ": " + str(trait_ob.locus_mb)
except:
diff --git a/wqflask/wqflask/heatmap/heatmap.py b/wqflask/wqflask/heatmap/heatmap.py
index e82aa0ef..cca5a4fc 100644
--- a/wqflask/wqflask/heatmap/heatmap.py
+++ b/wqflask/wqflask/heatmap/heatmap.py
@@ -1,48 +1,17 @@
-from __future__ import absolute_import, print_function, division
-
-import sys
-# sys.path.append(".") Never in a running webserver
-
import string
-import cPickle
import os
-import datetime
-import time
-import pp
-import math
import random
-import collections
-import resource
-
-import scipy
-import numpy as np
-
-from pprint import pformat as pf
-
-import reaper
-
-from base.trait import GeneralTrait
-from base import data_set
from base import species
from base import webqtlConfig
from utility import helper_functions
-from utility import Plot, Bunch
-from utility import temp_data
-from utility.tools import flat_files, REAPER_COMMAND, TEMPDIR
-
-from MySQLdb import escape_string as escape
-
-import cPickle as pickle
-import simplejson as json
-
-from pprint import pformat as pf
+from utility.tools import flat_files, REAPER_COMMAND, TEMPDIR
from redis import Redis
-Redis = Redis()
-
from flask import Flask, g
-
from utility.logger import getLogger
+
+Redis = Redis()
+
logger = getLogger(__name__ )
class Heatmap(object):
@@ -62,7 +31,7 @@ class Heatmap(object):
chrnames = []
self.species = species.TheSpecies(dataset=self.trait_list[0][1])
- for key in self.species.chromosomes.chromosomes.keys():
+ for key in list(self.species.chromosomes.chromosomes.keys()):
chrnames.append([self.species.chromosomes.chromosomes[key].name, self.species.chromosomes.chromosomes[key].mb_length])
for trait_db in self.trait_list:
@@ -95,7 +64,7 @@ class Heatmap(object):
pos = []
markernames = []
- for trait in self.trait_results.keys():
+ for trait in list(self.trait_results.keys()):
lodnames.append(trait)
self.dataset.group.get_markers()
@@ -207,4 +176,4 @@ def parse_reaper_output(gwa_filename):
marker['additive'] = float(line.split("\t")[6])
marker_obs.append(marker)
- return marker_obs \ No newline at end of file
+ return marker_obs
diff --git a/wqflask/wqflask/interval_analyst/GeneUtil.py b/wqflask/wqflask/interval_analyst/GeneUtil.py
index 2c60dd70..d0dd7aea 100644
--- a/wqflask/wqflask/interval_analyst/GeneUtil.py
+++ b/wqflask/wqflask/interval_analyst/GeneUtil.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import string
from flask import Flask, g
@@ -24,7 +22,7 @@ def loadGenes(chrName, diffCol, startMb, endMb, species='mouse'):
##List current Species and other Species
speciesId = speciesDict[species]
- otherSpecies = map(lambda X: [X, speciesDict[X]], speciesDict.keys())
+ otherSpecies = [[X, speciesDict[X]] for X in list(speciesDict.keys())]
otherSpecies.remove([species, speciesId])
results = g.db.execute("""
@@ -33,7 +31,7 @@ def loadGenes(chrName, diffCol, startMb, endMb, species='mouse'):
Chromosome = '%s' AND
((TxStart > %f and TxStart <= %f) OR (TxEnd > %f and TxEnd <= %f))
ORDER BY txStart
- """ % (string.join(fetchFields, ", "),
+ """ % (", ".join(fetchFields),
speciesId, chrName,
startMb, endMb,
startMb, endMb)).fetchall()
@@ -68,7 +66,7 @@ def loadGenes(chrName, diffCol, startMb, endMb, species='mouse'):
othSpec, othSpecId = item
newdict2 = {}
- resultsOther = g.db.execute("SELECT %s FROM GeneList WHERE SpeciesId = %d AND geneSymbol= '%s' LIMIT 1" % (string.join(fetchFields, ", "),
+ resultsOther = g.db.execute("SELECT %s FROM GeneList WHERE SpeciesId = %d AND geneSymbol= '%s' LIMIT 1" % (", ".join(fetchFields),
othSpecId,
newdict["GeneSymbol"])).fetchone()
diff --git a/wqflask/wqflask/markdown_routes.py b/wqflask/wqflask/markdown_routes.py
new file mode 100644
index 00000000..ebf75807
--- /dev/null
+++ b/wqflask/wqflask/markdown_routes.py
@@ -0,0 +1,126 @@
+"""Markdown routes
+
+Render pages from github, or if they are unavailable, look for it else where
+"""
+import requests
+import markdown
+import os
+import sys
+
+from bs4 import BeautifulSoup
+
+from flask import send_from_directory
+from flask import Blueprint
+from flask import render_template
+
+glossary_blueprint = Blueprint('glossary_blueprint', __name__)
+references_blueprint = Blueprint("references_blueprint", __name__)
+environments_blueprint = Blueprint("environments_blueprint", __name__)
+links_blueprint = Blueprint("links_blueprint", __name__)
+policies_blueprint = Blueprint("policies_blueprint", __name__)
+facilities_blueprint = Blueprint("facilities_blueprint", __name__)
+
+
+def render_markdown(file_name, is_remote_file=True):
+ """Try to fetch the file name from Github and if that fails, try to
+look for it inside the file system """
+ github_url = ("https://raw.githubusercontent.com/"
+ "genenetwork/gn-docs/master/")
+
+ if not is_remote_file:
+ text = ""
+ with open(file_name, "r", encoding="utf-8") as input_file:
+ text = input_file.read()
+ return markdown.markdown(text,
+ extensions=['tables'])
+
+ md_content = requests.get(f"{github_url}{file_name}")
+
+ if md_content.status_code == 200:
+ return markdown.markdown(md_content.content.decode("utf-8"),
+ extensions=['tables'])
+
+ return (f"\nContent for {file_name} not available. "
+ "Please check "
+ "(here to see where content exists)"
+ "[https://github.com/genenetwork/gn-docs]. "
+ "Please reach out to the gn2 team to have a look at this")
+
+
+def get_file_from_python_search_path(pathname_suffix):
+ cands = [os.path.join(d, pathname_suffix) for d in sys.path]
+ try:
+ return list(filter(os.path.exists, cands))[0]
+ except IndexError:
+ return None
+
+
+@glossary_blueprint.route('/')
+def glossary():
+ return render_template(
+ "glossary.html",
+ rendered_markdown=render_markdown("general/glossary/glossary.md")), 200
+
+
+@references_blueprint.route('/')
+def references():
+ return render_template(
+ "references.html",
+ rendered_markdown=render_markdown("general/references/references.md")), 200
+
+
+@environments_blueprint.route("/")
+def environments():
+
+ md_file = get_file_from_python_search_path("wqflask/DEPENDENCIES.md")
+ svg_file = get_file_from_python_search_path(
+ "wqflask/dependency-graph.html")
+ svg_data = None
+ if svg_file:
+ with open(svg_file, 'r') as f:
+ svg_data = "".join(
+ BeautifulSoup(f.read(),
+ 'lxml').body.script.contents)
+
+ if md_file is not None:
+ return (
+ render_template("environment.html",
+ svg_data=svg_data,
+ rendered_markdown=render_markdown(
+ md_file,
+ is_remote_file=False)),
+ 200
+ )
+ # Fallback: Fetch file from server
+ return (render_template(
+ "environment.html",
+ svg_data=None,
+ rendered_markdown=render_markdown(
+ "general/environments/environments.md")),
+ 200)
+
+
+@environments_blueprint.route('/svg-dependency-graph')
+def svg_graph():
+ directory, file_name, _ = get_file_from_python_search_path(
+ "wqflask/dependency-graph.svg").partition("dependency-graph.svg")
+ return send_from_directory(directory, file_name)
+
+
+@links_blueprint.route("/")
+def links():
+ return render_template(
+ "links.html",
+ rendered_markdown=render_markdown("general/links/links.md")), 200
+
+
+@policies_blueprint.route("/")
+def policies():
+ return render_template(
+ "policies.html",
+ rendered_markdown=render_markdown("general/policies/policies.md")), 200
+
+
+@facilities_blueprint.route("/")
+def facilities():
+ return render_template("facilities.html", rendered_markdown=render_markdown("general/help/facilities.md")), 200
diff --git a/wqflask/wqflask/marker_regression/display_mapping_results.py b/wqflask/wqflask/marker_regression/display_mapping_results.py
index a648667b..6a5fe2f6 100644
--- a/wqflask/wqflask/marker_regression/display_mapping_results.py
+++ b/wqflask/wqflask/marker_regression/display_mapping_results.py
@@ -24,45 +24,145 @@
#
# Last updated by Zach 12/14/2010
-import datetime
import string
from math import *
-import piddle as pid
-import sys,os
-import cPickle
-import httplib
+from PIL import Image
+from PIL import ImageDraw
+from PIL import ImageFont
+from PIL import ImageColor
+import os
import json
from flask import Flask, g
-from htmlgen import HTMLgen2 as HT
+import htmlgen as HT
from base import webqtlConfig
from base.GeneralObject import GeneralObject
from utility import webqtlUtil
-from utility import helper_functions
from utility import Plot
from utility.benchmark import Bench
from wqflask.interval_analyst import GeneUtil
-from base.webqtlConfig import TMPDIR, GENERATED_TEXT_DIR, GENERATED_IMAGE_DIR
+from base.webqtlConfig import GENERATED_IMAGE_DIR
+from utility.pillow_utils import draw_rotated_text, draw_open_polygon
import utility.logger
+try: # Only import this for Python3
+ from functools import reduce
+except:
+ pass
logger = utility.logger.getLogger(__name__ )
-#########################################
-# Inteval Mapping Plot Page
-#########################################
+RED = ImageColor.getrgb("red")
+BLUE = ImageColor.getrgb("blue")
+GRAY = ImageColor.getrgb("gray")
+GOLD = ImageColor.getrgb("gold")
+BLACK = ImageColor.getrgb("black")
+GREEN = ImageColor.getrgb("green")
+PURPLE = ImageColor.getrgb("purple")
+ORANGE = ImageColor.getrgb("orange")
+YELLOW = ImageColor.getrgb("yellow")
+DARKRED = ImageColor.getrgb("darkred")
+DARKBLUE = ImageColor.getrgb("darkblue")
+DARKGRAY = ImageColor.getrgb("darkgray")
+DEEPPINK = ImageColor.getrgb("deeppink")
+DARKGREEN = ImageColor.getrgb("darkgreen")
+GAINSBORO = ImageColor.getrgb("gainsboro")
+LIGHTBLUE = ImageColor.getrgb("lightblue")
+DARKORANGE = ImageColor.getrgb("darkorange")
+DARKVIOLET = ImageColor.getrgb("darkviolet")
+MEDIUMPURPLE = ImageColor.getrgb("mediumpurple")
+# ---- END: Define common colours ---- #
+
+# ZS: List of distinct colors for manhattan plot if user selects "varied"
+COLOR_CODES = ["#FF0000", "#00FF00", "#0000FF", "#FFFF00", "#FF00FF", "#00FFFF",
+ "#000000", "#800000", "#008000", "#000080", "#808000", "#800080",
+ "#008080", "#808080", "#C00000", "#00C000", "#0000C0", "#C0C000",
+ "#C000C0", "#00C0C0", "#C0C0C0", "#400000", "#004000", "#000040"]
+
+DISTINCT_COLOR_LIST = [ImageColor.getrgb(color) for color in COLOR_CODES]
+
+# ---- FONT FILES ---- #
+VERDANA_FILE = "./wqflask/static/fonts/verdana.ttf"
+VERDANA_BOLD_FILE = "./wqflask/static/fonts/verdanab.ttf"
+TREBUC_FILE = "./wqflask/static/fonts/trebucbd.ttf"
+FNT_BS_FILE = "./wqflask/static/fonts/fnt_bs.ttf"
+ARIAL_FILE = "./wqflask/static/fonts/arial.ttf"
+
+assert(os.path.isfile(VERDANA_FILE))
+
+
+class HtmlGenWrapper:
+ """Wrapper Methods for HTML gen"""
+ @staticmethod
+ def create_image_tag(**kwargs):
+ image = HT.Image("", "")
+ for key, value in list(kwargs.items()):
+ image.set_attribute(key, value)
+ return image
+
+ @staticmethod
+ def create_form_tag(**kwargs):
+ form = HT.Form("POST", "") # Default method is POST
+
+ for key, value in list(kwargs.items()):
+ if key == "submit":
+ form.append(value)
+ continue
+ form.set_attribute(key.replace("cgi", "action"), str(value))
+ return form
+
+ @staticmethod
+ def create_p_tag(**kwargs):
+ paragraph = HT.Paragraph()
+ for key, value in list(kwargs.items()):
+ paragraph.set_attribute(key, value)
+ return paragraph
+
+ @staticmethod
+ def create_br_tag():
+ return HT.VoidElement("br")
+
+ @staticmethod
+ def create_input_tag(**kwargs):
+ input_ = HT.Input()
+ for key, value in list(kwargs.items()):
+ input_.set_attribute(key.lower().replace("_", ""), value)
+ return input_
+
+ @staticmethod
+ def create_area_tag(**kwargs):
+ area = HT.VoidElement("area")
+ for key, value in list(kwargs.items()):
+ area.set_attribute(key, value)
+ return area
+
+ @staticmethod
+ def create_link_tag(href, content, **kwargs):
+ link = HT.Link(href, content)
+ for key, value in list(kwargs.items()):
+ link.set_attribute(key, value)
+ return link
+
+ @staticmethod
+ def create_map_tag(**kwargs):
+ map_ = HT.Element("map")
+ for key, value in list(kwargs.items()):
+ map_.set_attribute(key, value)
+ return map_
+
+
class DisplayMappingResults(object):
+ """Inteval Mapping Plot Page"""
cMGraphInterval = 5
GRAPH_MIN_WIDTH = 900
- GRAPH_MAX_WIDTH = 10000 # Don't set this too high
+ GRAPH_MAX_WIDTH = 10000 # Don't set this too high
GRAPH_DEFAULT_WIDTH = 1280
MULT_GRAPH_DEFAULT_WIDTH = 2000
MULT_GRAPH_MIN_WIDTH = 1400
MULT_GRAPH_DEFAULT_WIDTH = 1600
GRAPH_DEFAULT_HEIGHT = 600
-
# Display order:
# UCSC BAND =========
# ENSEMBL BAND -=-=-=
@@ -73,22 +173,27 @@ class DisplayMappingResults(object):
BAND_HEIGHT = 10
BAND_HEIGHT = 10
- NUM_GENE_ROWS = 10
- EACH_GENE_HEIGHT = 6 # number of pixels tall, for each gene to display
+ NUM_GENE_ROWS = 10
+ EACH_GENE_HEIGHT = 6 # number of pixels tall, for each gene to display
EACH_GENE_ARROW_WIDTH = 5
EACH_GENE_ARROW_SPACING = 14
DRAW_DETAIL_MB = 4
DRAW_UTR_LABELS_MB = 4
- qmarkImg = HT.Image('/images/qmarkBoxBlue.gif', width=10, height=13, border=0, alt='Glossary')
- # Note that "qmark.gif" is a similar, smaller, rounded-edges question mark. It doesn't look
- # like the ones on the image, though, which is why we don't use it here.
+ qmarkImg = HtmlGenWrapper.create_image_tag(
+ src='/images/qmarkBoxBlue.gif',
+ width="10", height="13", border="0", alt='Glossary'
+ )
+
+ # Note that "qmark.gif" is a similar, smaller, rounded-edges
+ # question mark. It doesn't look like the ones on the image,
+ # though, which is why we don't use it here.
HELP_WINDOW_NAME = 'helpWind'
- ## BEGIN HaplotypeAnalyst
+ # BEGIN HaplotypeAnalyst
NR_INDIVIDUALS = 0
- ## END HaplotypeAnalyst
+ # END HaplotypeAnalyst
ALEX_DEBUG_BOOL_PRINT_GENE_LIST = 1
@@ -96,47 +201,47 @@ class DisplayMappingResults(object):
LODFACTOR = 4.61
- SNP_COLOR = pid.orange # Color for the SNP "seismograph"
- TRANSCRIPT_LOCATION_COLOR = pid.mediumpurple
+ SNP_COLOR = ORANGE # Color for the SNP "seismograph"
+ TRANSCRIPT_LOCATION_COLOR = MEDIUMPURPLE
- BOOTSTRAP_BOX_COLOR = pid.yellow
- LRS_COLOR = pid.HexColor(0x0000FF)
- SIGNIFICANT_COLOR = pid.HexColor(0xEBC7C7)
- SUGGESTIVE_COLOR = pid.gainsboro
+ BOOTSTRAP_BOX_COLOR = YELLOW
+ LRS_COLOR = ImageColor.getrgb("#0000FF")
+ SIGNIFICANT_COLOR = ImageColor.getrgb("#EBC7C7")
+ SUGGESTIVE_COLOR = GAINSBORO
SIGNIFICANT_WIDTH = 5
SUGGESTIVE_WIDTH = 5
- ADDITIVE_COLOR_POSITIVE = pid.green
- ADDITIVE_COLOR_NEGATIVE = pid.orange
- DOMINANCE_COLOR_POSITIVE = pid.darkviolet
- DOMINANCE_COLOR_NEGATIVE = pid.red
+ ADDITIVE_COLOR_POSITIVE = GREEN
+ ADDITIVE_COLOR_NEGATIVE = ORANGE
+ DOMINANCE_COLOR_POSITIVE = DARKVIOLET
+ DOMINANCE_COLOR_NEGATIVE = RED
- ## BEGIN HaplotypeAnalyst
- HAPLOTYPE_POSITIVE = pid.green
- HAPLOTYPE_NEGATIVE = pid.red
- HAPLOTYPE_HETEROZYGOUS = pid.blue
- HAPLOTYPE_RECOMBINATION = pid.darkgray
- ## END HaplotypeAnalyst
+ # BEGIN HaplotypeAnalyst
+ HAPLOTYPE_POSITIVE = GREEN
+ HAPLOTYPE_NEGATIVE = RED
+ HAPLOTYPE_HETEROZYGOUS = BLUE
+ HAPLOTYPE_RECOMBINATION = DARKGRAY
+ # END HaplotypeAnalyst
- TOP_RIGHT_INFO_COLOR = pid.black
+ TOP_RIGHT_INFO_COLOR = BLACK
- CLICKABLE_WEBQTL_REGION_COLOR = pid.HexColor(0xF5D3D3)
- CLICKABLE_WEBQTL_REGION_OUTLINE_COLOR = pid.HexColor(0xFCE9E9)
- CLICKABLE_WEBQTL_TEXT_COLOR = pid.HexColor(0x912828)
+ CLICKABLE_WEBQTL_REGION_COLOR = ImageColor.getrgb("#F5D3D3")
+ CLICKABLE_WEBQTL_REGION_OUTLINE_COLOR = ImageColor.getrgb("#FCE9E9")
+ CLICKABLE_WEBQTL_TEXT_COLOR = ImageColor.getrgb("#912828")
- CLICKABLE_PHENOGEN_REGION_COLOR = pid.HexColor(0xA2FB94)
- CLICKABLE_PHENOGEN_REGION_OUTLINE_COLOR = pid.HexColor(0xCEFEC7)
- CLICKABLE_PHENOGEN_TEXT_COLOR = pid.HexColor(0x1FD504)
+ CLICKABLE_PHENOGEN_REGION_COLOR = ImageColor.getrgb("#A2FB94")
+ CLICKABLE_PHENOGEN_REGION_OUTLINE_COLOR = ImageColor.getrgb("#CEFEC7")
+ CLICKABLE_PHENOGEN_TEXT_COLOR = ImageColor.getrgb("#1FD504")
- CLICKABLE_UCSC_REGION_COLOR = pid.HexColor(0xDDDDEE)
- CLICKABLE_UCSC_REGION_OUTLINE_COLOR = pid.HexColor(0xEDEDFF)
- CLICKABLE_UCSC_TEXT_COLOR = pid.HexColor(0x333366)
+ CLICKABLE_UCSC_REGION_COLOR = ImageColor.getrgb("#DDDDEE")
+ CLICKABLE_UCSC_REGION_OUTLINE_COLOR = ImageColor.getrgb("#EDEDFF")
+ CLICKABLE_UCSC_TEXT_COLOR = ImageColor.getrgb("#333366")
- CLICKABLE_ENSEMBL_REGION_COLOR = pid.HexColor(0xEEEEDD)
- CLICKABLE_ENSEMBL_REGION_OUTLINE_COLOR = pid.HexColor(0xFEFEEE)
- CLICKABLE_ENSEMBL_TEXT_COLOR = pid.HexColor(0x555500)
+ CLICKABLE_ENSEMBL_REGION_COLOR = ImageColor.getrgb("#EEEEDD")
+ CLICKABLE_ENSEMBL_REGION_OUTLINE_COLOR = ImageColor.getrgb("#FEFEEE")
+ CLICKABLE_ENSEMBL_TEXT_COLOR = ImageColor.getrgb("#555500")
- GRAPH_BACK_LIGHT_COLOR = pid.HexColor(0xFBFBFF)
- GRAPH_BACK_DARK_COLOR = pid.HexColor(0xF1F1F9)
+ GRAPH_BACK_LIGHT_COLOR = ImageColor.getrgb("#FBFBFF")
+ GRAPH_BACK_DARK_COLOR = ImageColor.getrgb("#F1F1F9")
HELP_PAGE_REF = '/glossary.html'
@@ -147,7 +252,7 @@ class DisplayMappingResults(object):
self.dataset = start_vars['dataset']
self.this_trait = start_vars['this_trait']
- self.n_samples = start_vars['num_vals']
+ self.n_samples = start_vars['n_samples']
self.species = start_vars['species']
self.genofile_string = ""
if 'genofile_string' in start_vars:
@@ -163,9 +268,11 @@ class DisplayMappingResults(object):
self.temp_trait = "True"
self.group = start_vars['group']
- #Needing for form submission when doing single chr mapping or remapping after changing options
- self.samples = start_vars['samples']
- self.vals = start_vars['vals']
+ # Needing for form submission when doing single chr
+ # mapping or remapping after changing options
+ self.sample_vals = start_vars['sample_vals']
+ self.sample_vals_dict = json.loads(self.sample_vals)
+
self.transform = start_vars['transform']
self.mapping_method = start_vars['mapping_method']
self.mapping_results_path = start_vars['mapping_results_path']
@@ -174,9 +281,9 @@ class DisplayMappingResults(object):
self.mapmodel_rqtl_geno = start_vars['model']
self.pair_scan = start_vars['pair_scan']
- #if self.mapping_method != "gemma" and self.mapping_method != "plink":
self.js_data = start_vars['js_data']
- self.trimmed_markers = start_vars['trimmed_markers'] #Top markers to display in table
+ # Top markers to display in table
+ self.trimmed_markers = start_vars['trimmed_markers']
if self.dataset.group.species == "rat":
self._ucscDb = "rn6"
@@ -188,15 +295,21 @@ class DisplayMappingResults(object):
#####################################
# Options
#####################################
- #Mapping options
+ # Mapping options
if start_vars['mapping_scale'] != "":
self.plotScale = start_vars['mapping_scale']
else:
self.plotScale = "physic"
self.manhattan_plot = start_vars['manhattan_plot']
-
- if 'permCheck' in start_vars.keys():
+ if self.manhattan_plot:
+ self.color_scheme = "alternating"
+ if 'color_scheme' in start_vars:
+ self.color_scheme = start_vars['color_scheme']
+ if self.color_scheme == "single":
+ self.manhattan_single_color = ImageColor.getrgb("#" + start_vars['manhattan_single_color'])
+
+ if 'permCheck' in list(start_vars.keys()):
self.permChecked = start_vars['permCheck']
else:
self.permChecked = False
@@ -209,42 +322,48 @@ class DisplayMappingResults(object):
else:
self.nperm = 0
- if 'bootCheck' in start_vars.keys():
+ if 'bootCheck' in list(start_vars.keys()):
self.bootChecked = start_vars['bootCheck']
else:
self.bootChecked = False
- if 'num_bootstrap' in start_vars.keys():
+ if 'num_bootstrap' in list(start_vars.keys()):
self.nboot = int(start_vars['num_bootstrap'])
else:
self.nboot = 0
- if 'bootstrap_results' in start_vars.keys():
+ if 'bootstrap_results' in list(start_vars.keys()):
self.bootResult = start_vars['bootstrap_results']
else:
self.bootResult = []
- if 'do_control' in start_vars.keys():
+ if 'do_control' in list(start_vars.keys()):
self.doControl = start_vars['do_control']
else:
self.doControl = "false"
- if 'control_marker' in start_vars.keys():
+ if 'control_marker' in list(start_vars.keys()):
self.controlLocus = start_vars['control_marker']
else:
self.controlLocus = ""
- if 'covariates' in start_vars.keys():
+ if 'covariates' in list(start_vars.keys()):
self.covariates = start_vars['covariates']
- if 'maf' in start_vars.keys():
+ if 'maf' in list(start_vars.keys()):
self.maf = start_vars['maf']
else:
self.maf = ""
- if 'output_files' in start_vars.keys():
+ if 'output_files' in list(start_vars.keys()):
self.output_files = start_vars['output_files']
- if 'use_loco' in start_vars.keys() and self.mapping_method == "gemma":
+ if 'use_loco' in list(start_vars.keys()) and self.mapping_method == "gemma":
self.use_loco = start_vars['use_loco']
- if 'reaper_version' in start_vars.keys() and self.mapping_method == "reaper":
+ if 'reaper_version' in list(start_vars.keys()) and self.mapping_method == "reaper":
self.reaper_version = start_vars['reaper_version']
if 'output_files' in start_vars:
- self.output_files = ",".join(start_vars['output_files'])
+ self.output_files = ",".join([(the_file if the_file is not None else "") for the_file in start_vars['output_files']])
+
+ self.categorical_vars = ""
+ self.perm_strata = ""
+ if 'perm_strata' in list(start_vars.keys()) and 'categorical_vars' in list(start_vars.keys()):
+ self.categorical_vars = start_vars['categorical_vars']
+ self.perm_strata = start_vars['perm_strata']
self.selectedChr = int(start_vars['selected_chr'])
@@ -284,7 +403,7 @@ class DisplayMappingResults(object):
self.graphWidth = self.MULT_GRAPH_DEFAULT_WIDTH
## BEGIN HaplotypeAnalyst
- if 'haplotypeAnalystCheck' in start_vars.keys():
+ if 'haplotypeAnalystCheck' in list(start_vars.keys()):
self.haplotypeAnalystChecked = start_vars['haplotypeAnalystCheck']
else:
self.haplotypeAnalystChecked = False
@@ -292,25 +411,25 @@ class DisplayMappingResults(object):
self.graphHeight = self.GRAPH_DEFAULT_HEIGHT
self.dominanceChecked = False
- if 'LRSCheck' in start_vars.keys():
+ if 'LRSCheck' in list(start_vars.keys()):
self.LRS_LOD = start_vars['LRSCheck']
else:
self.LRS_LOD = start_vars['score_type']
self.intervalAnalystChecked = True
self.draw2X = False
- if 'additiveCheck' in start_vars.keys():
+ if 'additiveCheck' in list(start_vars.keys()):
self.additiveChecked = start_vars['additiveCheck']
else:
self.additiveChecked = False
- if 'viewLegend' in start_vars.keys():
+ if 'viewLegend' in list(start_vars.keys()):
self.legendChecked = start_vars['viewLegend']
else:
self.legendChecked = False
- if 'showSNP' in start_vars.keys():
+ if 'showSNP' in list(start_vars.keys()):
self.SNPChecked = start_vars['showSNP']
else:
self.SNPChecked = False
- if 'showGenes' in start_vars.keys():
+ if 'showGenes' in list(start_vars.keys()):
self.geneChecked = start_vars['showGenes']
else:
self.geneChecked = False
@@ -350,9 +469,9 @@ class DisplayMappingResults(object):
Chr_Length.Name in (%s)
Order by
Chr_Length.OrderId
- """ % (self.dataset.group.name, string.join(map(lambda X: "'%s'" % X[0], self.ChrList[1:]), ", ")))
+ """ % (self.dataset.group.name, ", ".join(["'%s'" % X[0] for X in self.ChrList[1:]])))
- self.ChrLengthMbList = map(lambda x: x[0]/1000000.0, self.ChrLengthMbList)
+ self.ChrLengthMbList = [x[0]/1000000.0 for x in self.ChrLengthMbList]
self.ChrLengthMbSum = reduce(lambda x, y:x+y, self.ChrLengthMbList, 0.0)
if self.ChrLengthMbList:
self.MbGraphInterval = self.ChrLengthMbSum/(len(self.ChrLengthMbList)*12) #Empirical Mb interval
@@ -374,16 +493,15 @@ class DisplayMappingResults(object):
## count the amount of individuals to be plotted, and increase self.graphHeight
if self.haplotypeAnalystChecked and self.selectedChr > -1:
thisTrait = self.this_trait
- _strains, _vals, _vars, _aliases = thisTrait.export_informative()
smd=[]
- for ii, _val in enumerate(self.vals):
- if _val != "x":
- temp = GeneralObject(name=self.samples[ii], value=float(_val))
+ for sample in self.sample_vals_dict.keys():
+ if self.sample_vals_dict[sample] != "x":
+ temp = GeneralObject(name=sample, value=float(self.sample_vals_dict[sample]))
smd.append(temp)
else:
continue
samplelist = list(self.genotype.prgy)
- for j,_geno in enumerate (self.genotype[0][1].genotype):
+ for j, _geno in enumerate (self.genotype[0][1].genotype):
for item in smd:
if item.name == samplelist[j]:
self.NR_INDIVIDUALS = self.NR_INDIVIDUALS + 1
@@ -400,7 +518,7 @@ class DisplayMappingResults(object):
RISet = self.dataset.group.name
if RISet in ('AXB', 'BXA', 'AXBXA'):
self.diffCol = ['B6J', 'A/J']
- elif RISet in ('BXD', 'BXD300', 'B6D2F2', 'BDF2-2005', 'BDF2-1999', 'BHHBF2', 'BXD-Harvested'):
+ elif RISet in ('BXD', 'BXD300', 'B6D2F2', 'BDF2-2005', 'BDF2-1999', 'BHHBF2', 'BXD-Harvested', 'BXD-Longevity', 'BXD-AE', 'B6D2RI', 'BXD-Bone', 'DOD-BXD-GWI', 'BXD-Heart-Metals', 'UTHSC-Cannabinoid'):
self.diffCol = ['B6J', 'D2J']
elif RISet in ('CXB'):
self.diffCol = ['CBY', 'B6J']
@@ -460,32 +578,47 @@ class DisplayMappingResults(object):
# Plots goes here
################################################################
showLocusForm = ""
- intCanvas = pid.PILCanvas(size=(self.graphWidth, self.graphHeight))
+ intCanvas = Image.new("RGBA", size=(self.graphWidth, self.graphHeight))
with Bench("Drawing Plot"):
gifmap = self.plotIntMapping(intCanvas, startMb = self.startMb, endMb = self.endMb, showLocusForm= showLocusForm)
self.gifmap = gifmap.__str__()
self.filename= webqtlUtil.genRandStr("Itvl_")
- intCanvas.save(os.path.join(webqtlConfig.GENERATED_IMAGE_DIR, self.filename), format='png')
- intImg=HT.Image('/image/'+self.filename+'.png', border=0, usemap='#WebQTLImageMap')
+ intCanvas.save(
+ "{}.png".format(
+ os.path.join(webqtlConfig.GENERATED_IMAGE_DIR, self.filename)),
+ format='png')
+ intImg = HtmlGenWrapper.create_image_tag(
+ src="/image/{}.png".format(self.filename),
+ border="0", usemap='#WebQTLImageMap'
+ )
#Scales plot differently for high resolution
if self.draw2X:
- intCanvasX2 = pid.PILCanvas(size=(self.graphWidth*2,self.graphHeight*2))
+ intCanvasX2 = Image.new("RGBA", size=(self.graphWidth*2, self.graphHeight*2))
gifmapX2 = self.plotIntMapping(intCanvasX2, startMb = self.startMb, endMb = self.endMb, showLocusForm= showLocusForm, zoom=2)
- intCanvasX2.save(os.path.join(webqtlConfig.GENERATED_IMAGE_DIR, self.filename+"X2"), format='png')
+ intCanvasX2.save(
+ "{}.png".format(
+ os.path.join(webqtlConfig.GENERATED_IMAGE_DIR,
+ self.filename+"X2")),
+ format='png')
################################################################
# Outputs goes here
################################################################
#this form is used for opening Locus page or trait page, only available for genetic mapping
if showLocusForm:
- showLocusForm = HT.Form(cgi= os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), enctype='multipart/form-data',
- name=showLocusForm, submit=HT.Input(type='hidden'))
+ showLocusForm = HtmlGenWrapper.create_form_tag(
+ cgi=os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE),
+ enctype='multipart/form-data',
+ name=showLocusForm,
+ submit=HtmlGenWrapper.create_input_tag(type_='hidden'))
+
hddn = {'FormID':'showDatabase', 'ProbeSetID':'_','database':fd.RISet+"Geno",'CellID':'_', 'RISet':fd.RISet, 'incparentsf1':'ON'}
for key in hddn.keys():
- showLocusForm.append(HT.Input(name=key, value=hddn[key], type='hidden'))
+ showLocusForm.append(HtmlGenWrapper.create_input_tag(
+ name=key, value=hddn[key], type_='hidden'))
showLocusForm.append(intImg)
else:
showLocusForm = intImg
@@ -496,22 +629,26 @@ class DisplayMappingResults(object):
################################################################
# footnote goes here
################################################################
- btminfo = HT.Paragraph(Id="smallsize") #Small('More information about this graph is available here.')
+ # Small('More information about this graph is available here.')
+ btminfo = HtmlGenWrapper.create_p_tag(id="smallsize")
if self.traitList and self.traitList[0].dataset and self.traitList[0].dataset.type == 'Geno':
- btminfo.append(HT.BR(), 'Mapping using genotype data as a trait will result in infinity LRS at one locus. In order to display the result properly, all LRSs higher than 100 are capped at 100.')
+ btminfo.append(HtmlGenWrapper.create_br_tag())
+ btminfo.append('Mapping using genotype data as a trait will result in infinity LRS at one locus. In order to display the result properly, all LRSs higher than 100 are capped at 100.')
- def plotIntMapping(self, canvas, offset= (80, 120, 20, 100), zoom = 1, startMb = None, endMb = None, showLocusForm = ""):
+ def plotIntMapping(self, canvas, offset= (80, 120, 90, 100), zoom = 1, startMb = None, endMb = None, showLocusForm = ""):
+ im_drawer = ImageDraw.Draw(canvas)
#calculating margins
xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
if self.multipleInterval:
yTopOffset = max(90, yTopOffset)
else:
if self.legendChecked:
+ yTopOffset += 10
if self.covariates != "" and self.controlLocus and self.doControl != "false":
- yTopOffset = max(120, yTopOffset)
- else:
- yTopOffset = max(100, yTopOffset)
+ yTopOffset += 20
+ if len(self.transform) > 0:
+ yTopOffset += 5
else:
pass
@@ -554,15 +691,15 @@ class DisplayMappingResults(object):
if zoom == 2:
drawAreaHeight -= 60
- #Image map
- gifmap = HT.Map(name = "WebQTLImageMap")
+ # Image map
+ gifmap = HtmlGenWrapper.create_map_tag(name="WebQTLImageMap")
newoffset = (xLeftOffset, xRightOffset, yTopOffset, yBottomOffset)
# Draw the alternating-color background first and get plotXScale
plotXScale = self.drawGraphBackground(canvas, gifmap, offset=newoffset, zoom= zoom, startMb=startMb, endMb = endMb)
#draw bootstap
- if self.bootChecked and not self.multipleInterval and not self.manhattan_plot:
+ if self.bootChecked and not self.multipleInterval:
self.drawBootStrapResult(canvas, self.nboot, drawAreaHeight, plotXScale, offset=newoffset, zoom= zoom, startMb=startMb, endMb = endMb)
# Draw clickable region and gene band if selected
@@ -595,6 +732,7 @@ class DisplayMappingResults(object):
return gifmap
def drawBootStrapResult(self, canvas, nboot, drawAreaHeight, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
+ im_drawer = ImageDraw.Draw(canvas)
xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
@@ -608,31 +746,34 @@ class DisplayMappingResults(object):
#break bootstrap result into groups
BootCoord = []
i = 0
+ previous_chr = None
+ previous_chr_as_int = 0
startX = xLeftOffset
+ BootChrCoord = []
if self.selectedChr == -1: #ZS: If viewing full genome/all chromosomes
- for j, _chr in enumerate(self.genotype):
- BootCoord.append( [])
- for _locus in _chr:
+ for i, result in enumerate(self.qtlresults):
+ if result['chr'] != previous_chr:
+ previous_chr = result['chr']
+ previous_chr_as_int += 1
+ if previous_chr_as_int != 1:
+ BootCoord.append(BootChrCoord)
+ BootChrCoord = []
+ startX += (self.ChrLengthDistList[previous_chr_as_int - 2] + self.GraphInterval)*plotXScale
+ if self.plotScale == 'physic':
+ Xc = startX + (result['Mb']-self.startMb)*plotXScale
+ else:
+ Xc = startX + (result['cM']-self.qtlresults[0]['cM'])*plotXScale
+ BootChrCoord.append([Xc, self.bootResult[i]])
+ else:
+ for i, result in enumerate(self.qtlresults):
+ if str(result['chr']) == str(self.ChrList[self.selectedChr][0]):
if self.plotScale == 'physic':
- Xc = startX + (_locus.Mb-self.startMb)*plotXScale
+ Xc = startX + (result['Mb']-self.startMb)*plotXScale
else:
- Xc = startX + (_locus.cM-_chr[0].cM)*plotXScale
- BootCoord[-1].append([Xc, self.bootResult[i]])
- i += 1
- startX += (self.ChrLengthDistList[j] + self.GraphInterval)*plotXScale
- else:
- for j, _chr in enumerate(self.genotype):
- if _chr.name == self.ChrList[self.selectedChr][0]:
- BootCoord.append( [])
- for _locus in _chr:
- if _chr.name == self.ChrList[self.selectedChr][0]:
- if self.plotScale == 'physic':
- Xc = startX + (_locus.Mb-startMb)*plotXScale
- else:
- Xc = startX + (_locus.cM-_chr[0].cM)*plotXScale
- BootCoord[-1].append([Xc, self.bootResult[i]])
- i += 1
+ Xc = startX + (result['cM']-self.qtlresults[0]['cM'])*plotXScale
+ BootChrCoord.append([Xc, self.bootResult[i]])
+ BootCoord = [BootChrCoord]
#reduce bootResult
if self.selectedChr > -1:
@@ -681,8 +822,10 @@ class DisplayMappingResults(object):
if item[1] > xLeftOffset+plotWidth:
item[1] = xLeftOffset+plotWidth
if item[0] != item[1]:
- canvas.drawRect(item[0], yZero, item[1], yZero - item[2]*bootHeightThresh/maxBootCount,
- fillColor=self.BOOTSTRAP_BOX_COLOR)
+ im_drawer.rectangle(
+ xy=((item[0], yZero),
+ (item[1], yZero - item[2]*bootHeightThresh/maxBootCount)),
+ fill=self.BOOTSTRAP_BOX_COLOR, outline=BLACK)
###draw boot scale
highestPercent = (maxBootCount*100.0)/nboot
@@ -691,26 +834,46 @@ class DisplayMappingResults(object):
bootScale = bootScale[:-1] + [highestPercent]
bootOffset = 50*fontZoom
- bootScaleFont=pid.Font(ttf="verdana",size=13*fontZoom,bold=0)
- canvas.drawRect(canvas.size[0]-bootOffset,yZero-bootHeightThresh,canvas.size[0]-bootOffset-15*zoom,yZero,fillColor = pid.yellow)
- canvas.drawLine(canvas.size[0]-bootOffset+4, yZero, canvas.size[0]-bootOffset, yZero, color=pid.black)
- canvas.drawString('0%' ,canvas.size[0]-bootOffset+10,yZero+5,font=bootScaleFont,color=pid.black)
+ bootScaleFont=ImageFont.truetype(font=VERDANA_FILE, size=13*fontZoom)
+ im_drawer.rectangle(
+ xy=((canvas.size[0]-bootOffset, yZero-bootHeightThresh),
+ (canvas.size[0]-bootOffset-15*zoom, yZero)),
+ fill = YELLOW, outline=BLACK)
+ im_drawer.line(
+ xy=((canvas.size[0]-bootOffset+4, yZero),
+ (canvas.size[0]-bootOffset, yZero)),
+ fill=BLACK)
+ TEXT_Y_DISPLACEMENT = -8
+ im_drawer.text(xy=(canvas.size[0]-bootOffset+10, yZero+TEXT_Y_DISPLACEMENT), text='0%',
+ font=bootScaleFont, fill=BLACK)
+
for item in bootScale:
if item == 0:
continue
bootY = yZero-bootHeightThresh*item/highestPercent
- canvas.drawLine(canvas.size[0]-bootOffset+4,bootY,canvas.size[0]-bootOffset,bootY,color=pid.black)
- canvas.drawString('%2.1f'%item ,canvas.size[0]-bootOffset+10,bootY+5,font=bootScaleFont,color=pid.black)
+ im_drawer.line(
+ xy=((canvas.size[0]-bootOffset+4, bootY),
+ (canvas.size[0]-bootOffset, bootY)),
+ fill=BLACK)
+ im_drawer.text(xy=(canvas.size[0]-bootOffset+10, bootY+TEXT_Y_DISPLACEMENT),
+ text='%2.1f'%item, font=bootScaleFont, fill=BLACK)
if self.legendChecked:
- startPosY = 30
- nCol = 2
- smallLabelFont = pid.Font(ttf="trebuc", size=12*fontZoom, bold=1)
- leftOffset = xLeftOffset+(nCol-1)*200
- canvas.drawRect(leftOffset,startPosY-6, leftOffset+12,startPosY+6, fillColor=pid.yellow)
- canvas.drawString('Frequency of the Peak LRS',leftOffset+ 20, startPosY+5,font=smallLabelFont,color=pid.black)
+ if hasattr(self.traitList[0], 'chr') and hasattr(self.traitList[0], 'mb'):
+ startPosY = 30
+ else:
+ startPosY = 15
+ smallLabelFont = ImageFont.truetype(font=TREBUC_FILE, size=12*fontZoom)
+ leftOffset = canvas.size[0] - xRightOffset - 190
+ im_drawer.rectangle(
+ xy=((leftOffset, startPosY-6), (leftOffset+12, startPosY+6)),
+ fill=YELLOW, outline=BLACK)
+ im_drawer.text(xy=(canvas.size[0] - xRightOffset - 170, startPosY+TEXT_Y_DISPLACEMENT),
+ text='Frequency of the Peak LRS',
+ font=smallLabelFont, fill=BLACK)
def drawProbeSetPosition(self, canvas, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
+ im_drawer = ImageDraw.Draw(canvas)
if len(self.traitList) != 1:
return
@@ -778,20 +941,11 @@ class DisplayMappingResults(object):
break
if locPixel >= 0 and self.plotScale == 'physic':
traitPixel = ((locPixel, yZero), (locPixel-7, yZero+14), (locPixel+7, yZero+14))
- canvas.drawPolygon(traitPixel, edgeColor=pid.black, fillColor=self.TRANSCRIPT_LOCATION_COLOR, closed=1)
-
- if self.legendChecked:
- startPosY = 15
- nCol = 2
- smallLabelFont = pid.Font(ttf="trebuc", size=12*fontZoom, bold=1)
- if self.manhattan_plot:
- leftOffset = xLeftOffset
- else:
- leftOffset = xLeftOffset+(nCol-1)*200*fontZoom
- canvas.drawPolygon(((leftOffset+7, startPosY-7), (leftOffset, startPosY+7), (leftOffset+14, startPosY+7)), edgeColor=pid.black, fillColor=self.TRANSCRIPT_LOCATION_COLOR, closed=1)
- canvas.drawString("Sequence Site", (leftOffset+15), (startPosY+5), smallLabelFont, self.TOP_RIGHT_INFO_COLOR)
+ draw_open_polygon(canvas, xy=traitPixel, outline=BLACK,
+ fill=self.TRANSCRIPT_LOCATION_COLOR)
def drawSNPTrackNew(self, canvas, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
+ im_drawer = ImageDraw.Draw(canvas)
if self.plotScale != 'physic' or self.selectedChr == -1 or not self.diffCol:
return
@@ -829,12 +983,15 @@ class DisplayMappingResults(object):
if maxCount>0:
for i in range(xLeftOffset, xLeftOffset + plotWidth):
snpDensity = float(SNPCounts[i-xLeftOffset]*SNP_HEIGHT_MODIFIER/maxCount)
- canvas.drawLine(i, drawSNPLocationY+(snpDensity)*zoom, i, drawSNPLocationY-(snpDensity)*zoom, color=self.SNP_COLOR, width=1)
+ im_drawer.line(
+ xy=((i, drawSNPLocationY+(snpDensity)*zoom),
+ (i, drawSNPLocationY-(snpDensity)*zoom)),
+ fill=self.SNP_COLOR, width=1)
def drawMultiTraitName(self, fd, canvas, gifmap, showLocusForm, offset= (40, 120, 80, 10), zoom = 1):
nameWidths = []
yPaddingTop = 10
- colorFont=pid.Font(ttf="trebuc",size=12,bold=1)
+ colorFont=ImageFont.truetype(font=TREBUC_FILE, size=12)
if len(self.qtlresults) >20 and self.selectedChr > -1:
rightShift = 20
rightShiftStep = 60
@@ -853,66 +1010,130 @@ class DisplayMappingResults(object):
rightShift += rightShiftStep
name = thisTrait.displayName()
- nameWidth = canvas.stringWidth(name,font=colorFont)
+ nameWidth, nameHeight = im_drawer.textsize(name, font=colorFont)
nameWidths.append(nameWidth)
- canvas.drawRect(rightShift,yPaddingTop+kstep*15, rectWidth+rightShift,yPaddingTop+10+kstep*15, fillColor=thisLRSColor)
- canvas.drawString(name,rectWidth+2+rightShift,yPaddingTop+10+kstep*15,font=colorFont,color=pid.black)
+ im_drawer.rectangle(
+ xy=((rightShift, yPaddingTop+kstep*15),
+ (rectWidth+rightShift, yPaddingTop+10+kstep*15)),
+ fill=thisLRSColor, outline=BLACK)
+ im_drawer.text(
+ text=name, xy=(rectWidth+2+rightShift, yPaddingTop+10+kstep*15),
+ font=colorFont, fill=BLACK)
if thisTrait.db:
- COORDS = "%d,%d,%d,%d" %(rectWidth+2+rightShift,yPaddingTop+kstep*15,rectWidth+2+rightShift+nameWidth,yPaddingTop+10+kstep*15,)
+ COORDS = "%d,%d,%d,%d" %(rectWidth+2+rightShift, yPaddingTop+kstep*15, rectWidth+2+rightShift+nameWidth, yPaddingTop+10+kstep*15,)
HREF= "javascript:showDatabase3('%s','%s','%s','');" % (showLocusForm, thisTrait.db.name, thisTrait.name)
- Areas = HT.Area(shape='rect',coords=COORDS,href=HREF)
- gifmap.areas.append(Areas)
+ Areas = HtmlGenWrapper.create_area_tag(shape='rect', coords=COORDS, href=HREF)
+ gifmap.append(Areas) ### TODO
def drawLegendPanel(self, canvas, offset= (40, 120, 80, 10), zoom = 1):
+ im_drawer = ImageDraw.Draw(canvas)
xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
yZero = canvas.size[1] - yBottomOffset
+ TEXT_Y_DISPLACEMENT = -8
fontZoom = zoom
if zoom == 2:
fontZoom = 1.5
- labelFont=pid.Font(ttf="trebuc",size=12*fontZoom, bold=1)
+ labelFont=ImageFont.truetype(font=TREBUC_FILE, size=12*fontZoom)
startPosY = 15
stepPosY = 12*fontZoom
+
+ startPosX = canvas.size[0] - xRightOffset - 415
+ if hasattr(self.traitList[0], 'chr') and hasattr(self.traitList[0], 'mb'):
+ startPosY = 15
+ nCol = 2
+ smallLabelFont = ImageFont.truetype(font=TREBUC_FILE, size=12*fontZoom)
+
+ leftOffset = canvas.size[0] - xRightOffset - 190
+ draw_open_polygon(
+ canvas,
+ xy=(
+ (leftOffset + 6, startPosY-7),
+ (leftOffset - 1, startPosY+7),
+ (leftOffset + 13, startPosY+7)),
+ outline=BLACK, fill=self.TRANSCRIPT_LOCATION_COLOR
+ )
+ TEXT_Y_DISPLACEMENT = -8
+ im_drawer.text(
+ text="Sequence Site",
+ xy=(leftOffset + 20, startPosY+TEXT_Y_DISPLACEMENT), font=smallLabelFont,
+ fill=self.TOP_RIGHT_INFO_COLOR)
+
if self.manhattan_plot != True:
- canvas.drawLine(xLeftOffset,startPosY,xLeftOffset+32,startPosY,color=self.LRS_COLOR, width=2)
- canvas.drawString(self.LRS_LOD, xLeftOffset+40,startPosY+5,font=labelFont,color=pid.black)
+ im_drawer.line(
+ xy=((startPosX, startPosY), (startPosX+32, startPosY)),
+ fill=self.LRS_COLOR, width=2)
+ im_drawer.text(
+ text=self.LRS_LOD, xy=(startPosX+40, startPosY+TEXT_Y_DISPLACEMENT),
+ font=labelFont, fill=BLACK)
startPosY += stepPosY
if self.additiveChecked:
- startPosX = xLeftOffset
- canvas.drawLine(startPosX,startPosY,startPosX+17,startPosY,color=self.ADDITIVE_COLOR_POSITIVE, width=2)
- canvas.drawLine(startPosX+18,startPosY,startPosX+32,startPosY,color=self.ADDITIVE_COLOR_NEGATIVE, width=2)
- canvas.drawString('Additive Effect',startPosX+40,startPosY+5,font=labelFont,color=pid.black)
+ im_drawer.line(
+ xy=((startPosX, startPosY), (startPosX+17, startPosY)),
+ fill=self.ADDITIVE_COLOR_POSITIVE, width=2)
+ im_drawer.line(
+ xy=((startPosX+18, startPosY), (startPosX+32, startPosY)),
+ fill=self.ADDITIVE_COLOR_NEGATIVE, width=2)
+ im_drawer.text(
+ text='Additive Effect', xy=(startPosX+40, startPosY+TEXT_Y_DISPLACEMENT),
+ font=labelFont, fill=BLACK)
+ startPosY += stepPosY
if self.genotype.type == 'intercross' and self.dominanceChecked:
- startPosX = xLeftOffset
+ im_drawer.line(
+ xy=((startPosX, startPosY), (startPosX+17, startPosY)),
+ fill=self.DOMINANCE_COLOR_POSITIVE, width=4)
+ im_drawer.line(
+ xy=((startPosX+18, startPosY), (startPosX+35, startPosY)),
+ fill=self.DOMINANCE_COLOR_NEGATIVE, width=4)
+ im_drawer.text(
+ text='Dominance Effect', xy=(startPosX+42, startPosY+5),
+ font=labelFont, fill=BLACK)
startPosY += stepPosY
- canvas.drawLine(startPosX,startPosY,startPosX+17,startPosY,color=self.DOMINANCE_COLOR_POSITIVE, width=4)
- canvas.drawLine(startPosX+18,startPosY,startPosX+35,startPosY,color=self.DOMINANCE_COLOR_NEGATIVE, width=4)
- canvas.drawString('Dominance Effect',startPosX+42,startPosY+5,font=labelFont,color=pid.black)
if self.haplotypeAnalystChecked:
+ im_drawer.line(
+ xy=((startPosX-34, startPosY), (startPosX-17, startPosY)),
+ fill=self.HAPLOTYPE_POSITIVE, width=4)
+ im_drawer.line(
+ xy=((startPosX-17, startPosY), (startPosX, startPosY)),
+ fill=self.HAPLOTYPE_NEGATIVE, width=4)
+ im_drawer.line(
+ xy=((startPosX, startPosY), (startPosX+17, startPosY)),
+ fill=self.HAPLOTYPE_HETEROZYGOUS, width=4)
+ im_drawer.line(
+ xy=((startPosX+17, startPosY), (startPosX+34, startPosY)),
+ fill=self.HAPLOTYPE_RECOMBINATION, width=4)
+ im_drawer.text(
+ text='Haplotypes (Pat, Mat, Het, Unk)',
+ xy=(startPosX+41, startPosY+TEXT_Y_DISPLACEMENT), font=labelFont, fill=BLACK)
startPosY += stepPosY
- startPosX = xLeftOffset
- canvas.drawLine(startPosX,startPosY,startPosX+17,startPosY,color=self.HAPLOTYPE_POSITIVE, width=4)
- canvas.drawLine(startPosX+18,startPosY,startPosX+35,startPosY,color=self.HAPLOTYPE_NEGATIVE, width=4)
- canvas.drawLine(startPosX+36,startPosY,startPosX+53,startPosY,color=self.HAPLOTYPE_HETEROZYGOUS, width=4)
- canvas.drawLine(startPosX+54,startPosY,startPosX+67,startPosY,color=self.HAPLOTYPE_RECOMBINATION, width=4)
- canvas.drawString('Haplotypes (Pat, Mat, Het, Unk)',startPosX+76,startPosY+5,font=labelFont,color=pid.black)
if self.permChecked and self.nperm > 0:
- startPosY += stepPosY
- startPosX = xLeftOffset
- canvas.drawLine(startPosX, startPosY, startPosX + 32, startPosY, color=self.SIGNIFICANT_COLOR, width=self.SIGNIFICANT_WIDTH)
- canvas.drawLine(startPosX, startPosY + stepPosY, startPosX + 32, startPosY + stepPosY, color=self.SUGGESTIVE_COLOR, width=self.SUGGESTIVE_WIDTH)
- canvas.drawString('Significant %s = %2.2f' % (self.LRS_LOD, self.significant),xLeftOffset+42,startPosY +5,font=labelFont,color=pid.black)
- canvas.drawString('Suggestive %s = %2.2f' % (self.LRS_LOD, self.suggestive),xLeftOffset+42,startPosY + 5 +stepPosY,font=labelFont,color=pid.black)
+ thisStartX = startPosX
+ if self.multipleInterval and not self.bootChecked:
+ thisStartX = canvas.size[0] - xRightOffset - 205
+ im_drawer.line(
+ xy=((thisStartX, startPosY), ( startPosX + 32, startPosY)),
+ fill=self.SIGNIFICANT_COLOR, width=self.SIGNIFICANT_WIDTH)
+ im_drawer.line(
+ xy=((thisStartX, startPosY + stepPosY), ( startPosX + 32, startPosY + stepPosY)),
+ fill=self.SUGGESTIVE_COLOR, width=self.SUGGESTIVE_WIDTH)
+ im_drawer.text(
+ text='Significant %s = %2.2f' % (self.LRS_LOD, self.significant),
+ xy=(thisStartX+40, startPosY+TEXT_Y_DISPLACEMENT), font=labelFont, fill=BLACK)
+ im_drawer.text(
+ text='Suggestive %s = %2.2f' % (self.LRS_LOD, self.suggestive),
+ xy=(thisStartX+40, startPosY + TEXT_Y_DISPLACEMENT +stepPosY), font=labelFont,
+ fill=BLACK)
+
+ labelFont = ImageFont.truetype(font=VERDANA_FILE, size=12*fontZoom)
+ labelColor = BLACK
- labelFont = pid.Font(ttf="verdana",size=12*fontZoom)
- labelColor = pid.black
if self.dataset.type == "Publish" or self.dataset.type == "Geno":
dataset_label = self.dataset.fullname
else:
@@ -954,6 +1175,7 @@ class DisplayMappingResults(object):
else:
string3 += 'no control for other QTLs'
+ y_constant = 10
if self.this_trait.name:
if self.selectedChr == -1:
identification = "Mapping on All Chromosomes for "
@@ -973,20 +1195,57 @@ class DisplayMappingResults(object):
identification += "Trait: %s" % (self.this_trait.name)
identification += " with %s samples" % (self.n_samples)
- d = 4+ max(canvas.stringWidth(identification, font=labelFont), canvas.stringWidth(string1, font=labelFont), canvas.stringWidth(string2, font=labelFont))
- canvas.drawString(identification,canvas.size[0] - xRightOffset-d,20*fontZoom,font=labelFont,color=labelColor)
- else:
- d = 4+ max(canvas.stringWidth(string1, font=labelFont), canvas.stringWidth(string2, font=labelFont))
- canvas.drawString(string1,canvas.size[0] - xRightOffset-d,35*fontZoom,font=labelFont,color=labelColor)
- canvas.drawString(string2,canvas.size[0] - xRightOffset-d,50*fontZoom,font=labelFont,color=labelColor)
- canvas.drawString(string3,canvas.size[0] - xRightOffset-d,65*fontZoom,font=labelFont,color=labelColor)
- if string4 != '':
- canvas.drawString(string4,canvas.size[0] - xRightOffset-d,80*fontZoom,font=labelFont,color=labelColor)
- canvas.drawString("Created at: " + str(datetime.datetime.now()).split('.')[0], canvas.size[0] - xRightOffset-d,95*fontZoom,font=labelFont,color=labelColor)
+ d = 4+ max(
+ im_drawer.textsize(identification, font=labelFont)[0],
+ im_drawer.textsize(string1, font=labelFont)[0],
+ im_drawer.textsize(string2, font=labelFont)[0])
+ im_drawer.text(
+ text=identification,
+ xy=(xLeftOffset, y_constant*fontZoom), font=labelFont,
+ fill=labelColor)
+ y_constant += 15
else:
- canvas.drawString("Created at: " + str(datetime.datetime.now()).split('.')[0], canvas.size[0] - xRightOffset-d,80*fontZoom,font=labelFont,color=labelColor)
+ d = 4+ max(
+ im_drawer.textsize(string1, font=labelFont)[0],
+ im_drawer.textsize(string2, font=labelFont)[0])
+
+ if len(self.transform) > 0:
+ transform_text = "Transform - "
+ if self.transform == "qnorm":
+ transform_text += "Quantile Normalized"
+ elif self.transform == "log2" or self.transform == "log10":
+ transform_text += self.transform.capitalize()
+ elif self.transform == "sqrt":
+ transform_text += "Square Root"
+ elif self.transform == "zscore":
+ transform_text += "Z-Score"
+ elif self.transform == "invert":
+ transform_text += "Invert +/-"
+
+ im_drawer.text(
+ text=transform_text, xy=(xLeftOffset, y_constant*fontZoom),
+ font=labelFont, fill=labelColor)
+ y_constant += 15
+ im_drawer.text(
+ text=string1, xy=(xLeftOffset, y_constant*fontZoom),
+ font=labelFont, fill=labelColor)
+ y_constant += 15
+ im_drawer.text(
+ text=string2, xy=(xLeftOffset, y_constant*fontZoom),
+ font=labelFont, fill=labelColor)
+ y_constant += 15
+ if string3 != '':
+ im_drawer.text(
+ text=string3, xy=(xLeftOffset, y_constant*fontZoom),
+ font=labelFont, fill=labelColor)
+ y_constant += 15
+ if string4 != '':
+ im_drawer.text(
+ text=string4, xy=(xLeftOffset, y_constant*fontZoom),
+ font=labelFont, fill=labelColor)
def drawGeneBand(self, canvas, gifmap, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
+ im_drawer = ImageDraw.Draw(canvas)
if self.plotScale != 'physic' or self.selectedChr == -1 or not self.geneCol:
return
@@ -1009,8 +1268,8 @@ class DisplayMappingResults(object):
tenPercentLength = geneLength*0.0001
SNPdensity = theGO["snpCount"]/geneLength
- exonStarts = map(float, theGO['exonStarts'].split(",")[:-1])
- exonEnds = map(float, theGO['exonEnds'].split(",")[:-1])
+ exonStarts = list(map(float, theGO['exonStarts'].split(",")[:-1]))
+ exonEnds = list(map(float, theGO['exonEnds'].split(",")[:-1]))
cdsStart = theGO['cdsStart']
cdsEnd = theGO['cdsEnd']
accession = theGO['NM_ID']
@@ -1036,19 +1295,19 @@ class DisplayMappingResults(object):
densities=[1.0000000000000001e-05, 0.094094033555233408, 0.3306166377816987, 0.88246026851027781, 2.6690084029581951, 4.1, 61.0]
if SNPdensity < densities[0]:
- myColor = pid.black
+ myColor = BLACK
elif SNPdensity < densities[1]:
- myColor = pid.purple
+ myColor = PURPLE
elif SNPdensity < densities[2]:
- myColor = pid.darkblue
+ myColor = DARKBLUE
elif SNPdensity < densities[3]:
- myColor = pid.darkgreen
+ myColor = DARKGREEN
elif SNPdensity < densities[4]:
- myColor = pid.gold
+ myColor = GOLD
elif SNPdensity < densities[5]:
- myColor = pid.darkorange
+ myColor = DARKORANGE
else:
- myColor = pid.darkred
+ myColor = DARKRED
outlineColor = myColor
fillColor = myColor
@@ -1080,14 +1339,14 @@ class DisplayMappingResults(object):
elif (geneStartPix < xLeftOffset):
geneStartPix = xLeftOffset; # clip the first in-range gene
- outlineColor = pid.darkblue
- fillColor = pid.darkblue
+ outlineColor = DARKBLUE
+ fillColor = DARKBLUE
TITLE = "Gene: %s\nFrom %2.3f to %2.3f Mb (%s)" % (geneSymbol, float(txStart), float(txEnd), strand)
# NL: 06-02-2011 Rob required to change this link for gene related
HREF=geneNCBILink %geneSymbol
else:
- outlineColor = pid.orange
- fillColor = pid.orange
+ outlineColor = ORANGE
+ fillColor = ORANGE
TITLE = "Gene: %s" % geneSymbol
#Draw Genes
@@ -1099,11 +1358,15 @@ class DisplayMappingResults(object):
#draw the detail view
if self.endMb - self.startMb <= self.DRAW_DETAIL_MB and geneEndPix - geneStartPix > self.EACH_GENE_ARROW_SPACING * 3:
- utrColor = pid.Color(0.66, 0.66, 0.66)
- arrowColor = pid.Color(0.7, 0.7, 0.7)
+ utrColor = ImageColor.getrgb("rgb(66%, 66%, 66%)")
+ arrowColor = ImageColor.getrgb("rgb(70%, 70%, 70%)")
#draw the line that runs the entire length of the gene
- canvas.drawLine(geneStartPix, geneYLocation + self.EACH_GENE_HEIGHT/2*zoom, geneEndPix, geneYLocation + self.EACH_GENE_HEIGHT/2*zoom, color=outlineColor, width=1)
+ im_drawer.line(
+ xy=(
+ (geneStartPix, geneYLocation + self.EACH_GENE_HEIGHT/2*zoom),
+ ( geneEndPix, geneYLocation + self.EACH_GENE_HEIGHT/2*zoom)),
+ fill=outlineColor, width=1)
#draw the arrows
if geneEndPix - geneStartPix < 1:
@@ -1114,11 +1377,30 @@ class DisplayMappingResults(object):
if (xCoord % self.EACH_GENE_ARROW_SPACING == 0 and xCoord + self.EACH_GENE_ARROW_SPACING < geneEndPix-geneStartPix) or xCoord == 0:
if strand == "+":
- canvas.drawLine(geneStartPix + xCoord, geneYLocation, geneStartPix + xCoord + self.EACH_GENE_ARROW_WIDTH, geneYLocation +(self.EACH_GENE_HEIGHT / 2)*zoom, color=arrowColor, width=1)
- canvas.drawLine(geneStartPix + xCoord, geneYLocation + self.EACH_GENE_HEIGHT*zoom, geneStartPix + xCoord+self.EACH_GENE_ARROW_WIDTH, geneYLocation + (self.EACH_GENE_HEIGHT / 2) * zoom, color=arrowColor, width=1)
+ im_drawer.line(
+ xy=((geneStartPix + xCoord, geneYLocation),
+ (geneStartPix + xCoord + self.EACH_GENE_ARROW_WIDTH,
+ geneYLocation +(self.EACH_GENE_HEIGHT / 2)*zoom)),
+ fill=arrowColor, width=1)
+ im_drawer.line(
+ xy=((geneStartPix + xCoord,
+ geneYLocation + self.EACH_GENE_HEIGHT*zoom),
+ (geneStartPix + xCoord+self.EACH_GENE_ARROW_WIDTH,
+ geneYLocation + (self.EACH_GENE_HEIGHT / 2) * zoom)),
+ fill=arrowColor, width=1)
else:
- canvas.drawLine(geneStartPix + xCoord + self.EACH_GENE_ARROW_WIDTH, geneYLocation, geneStartPix + xCoord, geneYLocation +(self.EACH_GENE_HEIGHT / 2)*zoom, color=arrowColor, width=1)
- canvas.drawLine(geneStartPix + xCoord + self.EACH_GENE_ARROW_WIDTH, geneYLocation + self.EACH_GENE_HEIGHT*zoom, geneStartPix + xCoord, geneYLocation + (self.EACH_GENE_HEIGHT / 2)*zoom, color=arrowColor, width=1)
+ im_drawer.line(
+ xy=((geneStartPix + xCoord + self.EACH_GENE_ARROW_WIDTH,
+ geneYLocation),
+ ( geneStartPix + xCoord,
+ geneYLocation +(self.EACH_GENE_HEIGHT / 2)*zoom)),
+ fill=arrowColor, width=1)
+ im_drawer.line(
+ xy=((geneStartPix + xCoord + self.EACH_GENE_ARROW_WIDTH,
+ geneYLocation + self.EACH_GENE_HEIGHT*zoom),
+ ( geneStartPix + xCoord,
+ geneYLocation + (self.EACH_GENE_HEIGHT / 2)*zoom)),
+ fill=arrowColor, width=1)
#draw the blocks for the exon regions
for i in range(0, len(exonStarts)):
@@ -1132,7 +1414,10 @@ class DisplayMappingResults(object):
exonEndPix = xLeftOffset + plotWidth
if (exonStartPix > xLeftOffset + plotWidth):
exonStartPix = xLeftOffset + plotWidth
- canvas.drawRect(exonStartPix, geneYLocation, exonEndPix, (geneYLocation + self.EACH_GENE_HEIGHT*zoom), edgeColor = outlineColor, fillColor = fillColor)
+ im_drawer.rectangle(
+ xy=((exonStartPix, geneYLocation),
+ (exonEndPix, (geneYLocation + self.EACH_GENE_HEIGHT*zoom))),
+ outline = outlineColor, fill = fillColor)
#draw gray blocks for 3' and 5' UTR blocks
if cdsStart and cdsEnd:
@@ -1146,14 +1431,16 @@ class DisplayMappingResults(object):
utrEndPix = xLeftOffset + plotWidth
if (utrStartPix > xLeftOffset + plotWidth):
utrStartPix = xLeftOffset + plotWidth
- #canvas.drawRect(utrStartPix, geneYLocation, utrEndPix, (geneYLocation+self.EACH_GENE_HEIGHT*zoom), edgeColor=utrColor, fillColor =utrColor)
if self.endMb - self.startMb <= self.DRAW_UTR_LABELS_MB:
if strand == "-":
labelText = "3'"
else:
labelText = "5'"
- canvas.drawString(labelText, utrStartPix-9, geneYLocation+self.EACH_GENE_HEIGHT, pid.Font(face="helvetica", size=2))
+ im_drawer.text(
+ text=labelText,
+ xy=(utrStartPix-9, geneYLocation+self.EACH_GENE_HEIGHT),
+ font=ImageFont.truetype(font=ARIAL_FILE, size=2))
#the second UTR region
@@ -1167,22 +1454,33 @@ class DisplayMappingResults(object):
utrEndPix = xLeftOffset + plotWidth
if (utrStartPix > xLeftOffset + plotWidth):
utrStartPix = xLeftOffset + plotWidth
- #canvas.drawRect(utrStartPix, geneYLocation, utrEndPix, (geneYLocation+self.EACH_GENE_HEIGHT*zoom), edgeColor=utrColor, fillColor =utrColor)
if self.endMb - self.startMb <= self.DRAW_UTR_LABELS_MB:
if strand == "-":
labelText = "5'"
else:
labelText = "3'"
- canvas.drawString(labelText, utrEndPix+2, geneYLocation+self.EACH_GENE_HEIGHT, pid.Font(face="helvetica", size=2))
+ im_drawer.text(
+ text=labelText,
+ xy=(utrEndPix+2, geneYLocation+self.EACH_GENE_HEIGHT),
+ font=ImageFont.truetype(font=ARIAL_FILE, size=2))
#draw the genes as rectangles
else:
- canvas.drawRect(geneStartPix, geneYLocation, geneEndPix, (geneYLocation + self.EACH_GENE_HEIGHT*zoom), edgeColor = outlineColor, fillColor = fillColor)
+ im_drawer.rectangle(
+ xy=((geneStartPix, geneYLocation),
+ (geneEndPix, (geneYLocation + self.EACH_GENE_HEIGHT*zoom))),
+ outline= outlineColor, fill = fillColor)
COORDS = "%d, %d, %d, %d" %(geneStartPix, geneYLocation, geneEndPix, (geneYLocation + self.EACH_GENE_HEIGHT))
# NL: 06-02-2011 Rob required to display NCBI info in a new window
- gifmap.areas.append(HT.Area(shape='rect',coords=COORDS,href=HREF, title=TITLE,target="_blank"))
+ gifmap.append(
+ HtmlGenWrapper.create_area_tag(
+ shape='rect',
+ coords=COORDS,
+ href=HREF,
+ title=TITLE,
+ target="_blank"))
## BEGIN HaplotypeAnalyst
def drawHaplotypeBand(self, canvas, gifmap, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
@@ -1195,25 +1493,26 @@ class DisplayMappingResults(object):
yPaddingTop = yTopOffset
thisTrait = self.this_trait
- _strains, _vals, _vars, _aliases = thisTrait.export_informative()
+
+ samplelist = list(self.genotype.prgy)
smd=[]
- for ii, _val in enumerate(self.vals):
- if _val != "x":
- temp = GeneralObject(name=self.samples[ii], value=float(_val))
+ for sample in self.sample_vals_dict.keys():
+ if self.sample_vals_dict[sample] != "x" and sample in samplelist:
+ temp = GeneralObject(name=sample, value=float(self.sample_vals_dict[sample]))
smd.append(temp)
else:
continue
- smd.sort(lambda A, B: cmp(A.value, B.value))
+ smd.sort(key = lambda A: A.value)
smd.reverse()
- samplelist = list(self.genotype.prgy)
-
oldgeneEndPix = -1
#Initializing plotRight, error before
plotRight = xRightOffset
+ im_drawer = ImageDraw.Draw(canvas)
+
#### find out PlotRight
for _chr in self.genotype:
if _chr.name == self.ChrList[self.selectedChr][0]:
@@ -1281,7 +1580,7 @@ class DisplayMappingResults(object):
drawit = 1
if drawit == 1:
- myColor = pid.darkblue
+ myColor = DARKBLUE
outlineColor = myColor
fillColor = myColor
@@ -1304,18 +1603,15 @@ class DisplayMappingResults(object):
for k, _geno in enumerate (_chr[j].genotype):
plotbxd=0
- for item in smd:
- if item.name == samplelist[k]:
- plotbxd=1
+ if samplelist[k] in [item.name for item in smd]:
+ plotbxd=1
if (plotbxd == 1):
ind = 0
- counter = 0
- for item in smd:
- counter = counter + 1
- if item.name == samplelist[k]:
- ind = counter
- maxind=max(ind,maxind)
+ if samplelist[k] in [item.name for item in smd]:
+ ind = [item.name for item in smd].index(samplelist[k])
+
+ maxind=max(ind, maxind)
# lines
if (oldgeno[k] == -1 and _geno == -1):
@@ -1327,29 +1623,55 @@ class DisplayMappingResults(object):
else:
mylineColor = self.HAPLOTYPE_RECOMBINATION # XZ: Unknown
- canvas.drawLine(drawStart, geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom, drawEnd, geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom, color = mylineColor, width=zoom*(self.EACH_GENE_HEIGHT+2))
+ im_drawer.line(
+ xy=((drawStart,
+ geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom),
+ (drawEnd,
+ geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom)),
+ fill= mylineColor, width=zoom*(self.EACH_GENE_HEIGHT+2))
- fillColor=pid.black
- outlineColor=pid.black
+ fillColor=BLACK
+ outlineColor=BLACK
if lastGene == 0:
- canvas.drawRect(geneStartPix, geneYLocation+2*ind*self.EACH_GENE_HEIGHT*zoom, geneEndPix, geneYLocation+2*ind*self.EACH_GENE_HEIGHT+ 2*self.EACH_GENE_HEIGHT*zoom, edgeColor = outlineColor, fillColor = fillColor)
+ im_drawer.rectangle(
+ xy=((geneStartPix,
+ geneYLocation+2*ind*self.EACH_GENE_HEIGHT*zoom),
+ (geneEndPix,
+ geneYLocation+2*ind*self.EACH_GENE_HEIGHT+ 2*self.EACH_GENE_HEIGHT*zoom)),
+ outline=outlineColor, fill=fillColor)
COORDS = "%d, %d, %d, %d" %(geneStartPix, geneYLocation+ind*self.EACH_GENE_HEIGHT, geneEndPix+1, (geneYLocation + ind*self.EACH_GENE_HEIGHT))
TITLE = "Strain: %s, marker (%s) \n Position %2.3f Mb." % (samplelist[k], _chr[j].name, float(txStart))
HREF = ''
- gifmap.areas.append(HT.Area(shape='rect',coords=COORDS,href=HREF, title=TITLE))
+ gifmap.append(
+ HtmlGenWrapper.create_area_tag(
+ shape='rect',
+ coords=COORDS,
+ href=HREF,
+ title=TITLE))
# if there are no more markers in a chromosome, the plotRight value calculated above will be before the plotWidth
# resulting in some empty space on the right side of the plot area. This draws an "unknown" bar from plotRight to the edge.
if (plotRight < (xLeftOffset + plotWidth - 3)) and (lastGene == 0):
drawEnd = xLeftOffset + plotWidth - 6
mylineColor = self.HAPLOTYPE_RECOMBINATION
- canvas.drawLine(plotRight, geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom, drawEnd, geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom, color = mylineColor, width=zoom*(self.EACH_GENE_HEIGHT+2))
+ im_drawer.line(
+ xy=((plotRight,
+ geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom),
+ (drawEnd,
+ geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom)),
+ fill= mylineColor, width=zoom*(self.EACH_GENE_HEIGHT+2))
if lastGene == 0:
- canvas.drawString("%s" % (_chr[j].name), geneStartPix , geneYLocation+17+2*maxind*self.EACH_GENE_HEIGHT*zoom, font=pid.Font(ttf="verdana", size=12, bold=0), color=pid.black, angle=-90)
+ draw_rotated_text(
+ canvas, text="%s" % (_chr[j].name),
+ font=ImageFont.truetype(font=VERDANA_FILE,
+ size=12),
+ xy=(geneStartPix,
+ geneYLocation+17+2*maxind*self.EACH_GENE_HEIGHT*zoom),
+ fill=BLACK, angle=-90)
oldgeneEndPix = geneEndPix;
oldgeno = _chr[j].genotype
@@ -1362,28 +1684,31 @@ class DisplayMappingResults(object):
for j, _geno in enumerate(_chr[1].genotype):
plotbxd=0
- for item in smd:
- if item.name == samplelist[j]:
- plotbxd=1
+ if samplelist[j] in [item.name for item in smd]:
+ plotbxd=1
if (plotbxd == 1):
-
- ind = 0
- counter = 0
- expr = 0
- for item in smd:
- counter = counter + 1
- if item.name == samplelist[j]:
- ind = counter
- expr = item.value
+ ind = [item.name for item in smd].index(samplelist[j]) - 1
+ expr = smd[ind].value
# Place where font is hardcoded
- canvas.drawString("%s" % (samplelist[j]), (xLeftOffset + plotWidth + 10) , geneYLocation+8+2*ind*self.EACH_GENE_HEIGHT*zoom, font=pid.Font(ttf="verdana", size=12, bold=0), color=pid.black)
- canvas.drawString("%2.2f" % (expr), (xLeftOffset + plotWidth + 60) , geneYLocation+8+2*ind*self.EACH_GENE_HEIGHT*zoom, font=pid.Font(ttf="verdana", size=12, bold=0), color=pid.black)
+ im_drawer.text(
+ text="%s" % (samplelist[j]),
+ xy=((xLeftOffset + plotWidth + 10),
+ geneYLocation+11+2*ind*self.EACH_GENE_HEIGHT*zoom),
+ font=ImageFont.truetype(font=VERDANA_FILE, size=12),
+ fill=BLACK)
+ im_drawer.text(
+ text="%2.2f" % (expr),
+ xy=((xLeftOffset + plotWidth + 60),
+ geneYLocation+11+2*ind*self.EACH_GENE_HEIGHT*zoom),
+ font=ImageFont.truetype(font=VERDANA_FILE, size=12),
+ fill=BLACK)
## END HaplotypeAnalyst
def drawClickBand(self, canvas, gifmap, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
+ im_drawer = ImageDraw.Draw(canvas)
if self.plotScale != 'physic' or self.selectedChr == -1:
return
@@ -1399,7 +1724,7 @@ class DisplayMappingResults(object):
# but it makes the HTML huge, and takes forever to render the page in the first place)
# Draw the bands that you can click on to go to UCSC / Ensembl
MAX_CLICKABLE_REGION_DIVISIONS = 100
- clickableRegionLabelFont=pid.Font(ttf="verdana", size=9, bold=0)
+ clickableRegionLabelFont=ImageFont.truetype(font=VERDANA_FILE, size=9)
pixelStep = max(5, int(float(plotWidth)/MAX_CLICKABLE_REGION_DIVISIONS))
# pixelStep: every N pixels, we make a new clickable area for the user to go to that area of the genome.
@@ -1424,9 +1749,6 @@ class DisplayMappingResults(object):
for pixel in range(xLeftOffset, xLeftOffset + plotWidth, pixelStep):
calBase = self.kONE_MILLION*(startMb + (endMb-startMb)*(pixel-xLeftOffset-0.0)/plotWidth)
- if pixel == (xLeftOffset + pixelStep*2):
- logger.debug("CALBASE:", calBase)
- logger.debug("FLANKING:", flankingWidthInBases)
xBrowse1 = pixel
xBrowse2 = min(xLeftOffset + plotWidth, (pixel + pixelStep - 1))
@@ -1435,9 +1757,20 @@ class DisplayMappingResults(object):
WEBQTL_HREF = "javascript:rangeView('%s', %f, %f)" % (self.selectedChr - 1, max(0, (calBase-webqtlZoomWidth))/1000000.0, (calBase+webqtlZoomWidth)/1000000.0)
WEBQTL_TITLE = "Click to view this section of the genome in WebQTL"
- gifmap.areas.append(HT.Area(shape='rect',coords=WEBQTL_COORDS,href=WEBQTL_HREF, title=WEBQTL_TITLE))
- canvas.drawRect(xBrowse1, paddingTop, xBrowse2, (paddingTop + self.BAND_HEIGHT), edgeColor=self.CLICKABLE_WEBQTL_REGION_COLOR, fillColor=self.CLICKABLE_WEBQTL_REGION_COLOR)
- canvas.drawLine(xBrowse1, paddingTop, xBrowse1, (paddingTop + self.BAND_HEIGHT), color=self.CLICKABLE_WEBQTL_REGION_OUTLINE_COLOR)
+ gifmap.append(
+ HtmlGenWrapper.create_area_tag(
+ shape='rect',
+ coords=WEBQTL_COORDS,
+ href=WEBQTL_HREF,
+ title=WEBQTL_TITLE))
+ im_drawer.rectangle(
+ xy=((xBrowse1, paddingTop),
+ (xBrowse2, (paddingTop + self.BAND_HEIGHT))),
+ outline=self.CLICKABLE_WEBQTL_REGION_COLOR,
+ fill=self.CLICKABLE_WEBQTL_REGION_COLOR)
+ im_drawer.line(
+ xy=((xBrowse1, paddingTop), ( xBrowse1, (paddingTop + self.BAND_HEIGHT))),
+ fill=self.CLICKABLE_WEBQTL_REGION_OUTLINE_COLOR)
if self.dataset.group.species == "mouse" or self.dataset.group.species == "rat":
PHENOGEN_COORDS = "%d, %d, %d, %d" % (xBrowse1, phenogenPaddingTop, xBrowse2, (phenogenPaddingTop+self.BAND_HEIGHT))
@@ -1446,9 +1779,20 @@ class DisplayMappingResults(object):
else:
PHENOGEN_HREF = "https://phenogen.org/gene.jsp?speciesCB=Mm&auto=Y&geneTxt=chr%s:%d-%d&genomeVer=mm10" % (self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases)
PHENOGEN_TITLE = "Click to view this section of the genome in PhenoGen"
- gifmap.areas.append(HT.Area(shape='rect',coords=PHENOGEN_COORDS,href=PHENOGEN_HREF, title=PHENOGEN_TITLE))
- canvas.drawRect(xBrowse1, phenogenPaddingTop, xBrowse2, (phenogenPaddingTop+self.BAND_HEIGHT), edgeColor=self.CLICKABLE_PHENOGEN_REGION_COLOR, fillColor=self.CLICKABLE_PHENOGEN_REGION_COLOR)
- canvas.drawLine(xBrowse1, phenogenPaddingTop, xBrowse1, (phenogenPaddingTop+self.BAND_HEIGHT), color=self.CLICKABLE_PHENOGEN_REGION_OUTLINE_COLOR)
+ gifmap.append(
+ HtmlGenWrapper.create_area_tag(
+ shape='rect',
+ coords=PHENOGEN_COORDS,
+ href=PHENOGEN_HREF,
+ title=PHENOGEN_TITLE))
+ im_drawer.rectangle(
+ xy=((xBrowse1, phenogenPaddingTop),
+ (xBrowse2, (phenogenPaddingTop+self.BAND_HEIGHT))),
+ outline=self.CLICKABLE_PHENOGEN_REGION_COLOR,
+ fill=self.CLICKABLE_PHENOGEN_REGION_COLOR)
+ im_drawer.line(
+ xy=((xBrowse1, phenogenPaddingTop), ( xBrowse1, (phenogenPaddingTop+self.BAND_HEIGHT))),
+ fill=self.CLICKABLE_PHENOGEN_REGION_OUTLINE_COLOR)
UCSC_COORDS = "%d, %d, %d, %d" %(xBrowse1, ucscPaddingTop, xBrowse2, (ucscPaddingTop+self.BAND_HEIGHT))
if self.dataset.group.species == "mouse":
@@ -1456,9 +1800,21 @@ class DisplayMappingResults(object):
else:
UCSC_HREF = "http://genome.ucsc.edu/cgi-bin/hgTracks?db=%s&position=chr%s:%d-%d" % (self._ucscDb, self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases)
UCSC_TITLE = "Click to view this section of the genome in the UCSC Genome Browser"
- gifmap.areas.append(HT.Area(shape='rect',coords=UCSC_COORDS,href=UCSC_HREF, title=UCSC_TITLE))
- canvas.drawRect(xBrowse1, ucscPaddingTop, xBrowse2, (ucscPaddingTop+self.BAND_HEIGHT), edgeColor=self.CLICKABLE_UCSC_REGION_COLOR, fillColor=self.CLICKABLE_UCSC_REGION_COLOR)
- canvas.drawLine(xBrowse1, ucscPaddingTop, xBrowse1, (ucscPaddingTop+self.BAND_HEIGHT), color=self.CLICKABLE_UCSC_REGION_OUTLINE_COLOR)
+ gifmap.append(
+ HtmlGenWrapper.create_area_tag(
+ shape='rect',
+ coords=UCSC_COORDS,
+ href=UCSC_HREF,
+ title=UCSC_TITLE))
+ im_drawer.rectangle(
+ xy=((xBrowse1, ucscPaddingTop),
+ (xBrowse2, (ucscPaddingTop+self.BAND_HEIGHT))),
+ outline=self.CLICKABLE_UCSC_REGION_COLOR,
+ fill=self.CLICKABLE_UCSC_REGION_COLOR)
+ im_drawer.line(
+ xy=((xBrowse1, ucscPaddingTop),
+ (xBrowse1, (ucscPaddingTop+self.BAND_HEIGHT))),
+ fill=self.CLICKABLE_UCSC_REGION_OUTLINE_COLOR)
ENSEMBL_COORDS = "%d, %d, %d, %d" %(xBrowse1, ensemblPaddingTop, xBrowse2, (ensemblPaddingTop+self.BAND_HEIGHT))
if self.dataset.group.species == "mouse":
@@ -1466,33 +1822,62 @@ class DisplayMappingResults(object):
else:
ENSEMBL_HREF = "http://www.ensembl.org/Rattus_norvegicus/contigview?chr=%s&start=%d&end=%d" % (self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases)
ENSEMBL_TITLE = "Click to view this section of the genome in the Ensembl Genome Browser"
- gifmap.areas.append(HT.Area(shape='rect',coords=ENSEMBL_COORDS,href=ENSEMBL_HREF, title=ENSEMBL_TITLE))
- canvas.drawRect(xBrowse1, ensemblPaddingTop, xBrowse2, (ensemblPaddingTop+self.BAND_HEIGHT), edgeColor=self.CLICKABLE_ENSEMBL_REGION_COLOR, fillColor=self.CLICKABLE_ENSEMBL_REGION_COLOR)
- canvas.drawLine(xBrowse1, ensemblPaddingTop, xBrowse1, (ensemblPaddingTop+self.BAND_HEIGHT), color=self.CLICKABLE_ENSEMBL_REGION_OUTLINE_COLOR)
+ gifmap.append(HtmlGenWrapper.create_area_tag(
+ shape='rect',
+ coords=ENSEMBL_COORDS,
+ href=ENSEMBL_HREF,
+ title=ENSEMBL_TITLE))
+ im_drawer.rectangle(
+ xy=((xBrowse1, ensemblPaddingTop),
+ (xBrowse2, (ensemblPaddingTop+self.BAND_HEIGHT))),
+ outline=self.CLICKABLE_ENSEMBL_REGION_COLOR,
+ fill=self.CLICKABLE_ENSEMBL_REGION_COLOR)
+ im_drawer.line(
+ xy=((xBrowse1, ensemblPaddingTop),
+ (xBrowse1, (ensemblPaddingTop+self.BAND_HEIGHT))),
+ fill=self.CLICKABLE_ENSEMBL_REGION_OUTLINE_COLOR)
# end for
- canvas.drawString("Click to view the corresponding section of the genome in an 8x expanded WebQTL map", (xLeftOffset + 10), paddingTop + self.BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_WEBQTL_TEXT_COLOR)
+ im_drawer.text(
+ text="Click to view the corresponding section of the genome in an 8x expanded WebQTL map",
+ xy=((xLeftOffset + 10), paddingTop),# + self.BAND_HEIGHT/2),
+ font=clickableRegionLabelFont,
+ fill=self.CLICKABLE_WEBQTL_TEXT_COLOR)
if self.dataset.group.species == "mouse" or self.dataset.group.species == "rat":
- canvas.drawString("Click to view the corresponding section of the genome in PhenoGen", (xLeftOffset + 10), phenogenPaddingTop + self.BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_PHENOGEN_TEXT_COLOR)
- canvas.drawString("Click to view the corresponding section of the genome in the UCSC Genome Browser", (xLeftOffset + 10), ucscPaddingTop + self.BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_UCSC_TEXT_COLOR)
- canvas.drawString("Click to view the corresponding section of the genome in the Ensembl Genome Browser", (xLeftOffset+10), ensemblPaddingTop + self.BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_ENSEMBL_TEXT_COLOR)
+ im_drawer.text(
+ text="Click to view the corresponding section of the genome in PhenoGen",
+ xy=((xLeftOffset + 10), phenogenPaddingTop),# + self.BAND_HEIGHT/2),
+ font=clickableRegionLabelFont, fill=self.CLICKABLE_PHENOGEN_TEXT_COLOR)
+ im_drawer.text(
+ text="Click to view the corresponding section of the genome in the UCSC Genome Browser",
+ xy=((xLeftOffset + 10), ucscPaddingTop),# + self.BAND_HEIGHT/2),
+ font=clickableRegionLabelFont, fill=self.CLICKABLE_UCSC_TEXT_COLOR)
+ im_drawer.text(
+ text="Click to view the corresponding section of the genome in the Ensembl Genome Browser",
+ xy=((xLeftOffset+10), ensemblPaddingTop),# + self.BAND_HEIGHT/2),
+ font=clickableRegionLabelFont, fill=self.CLICKABLE_ENSEMBL_TEXT_COLOR)
#draw the gray text
- chrFont = pid.Font(ttf="verdana", size=26*zoom, bold=1)
- traitFont = pid.Font(ttf="verdana", size=14, bold=0)
- chrX = xLeftOffset + plotWidth - 2 - canvas.stringWidth("Chr %s" % self.ChrList[self.selectedChr][0], font=chrFont)
- canvas.drawString("Chr %s" % self.ChrList[self.selectedChr][0], chrX, ensemblPaddingTop-5, font=chrFont, color=pid.gray)
+ chrFont = ImageFont.truetype(font=VERDANA_BOLD_FILE, size=26*zoom)
+ chrX = xLeftOffset + plotWidth - 2 - im_drawer.textsize(
+ "Chr %s" % self.ChrList[self.selectedChr][0], font=chrFont)[0]
+ im_drawer.text(
+ text="Chr %s" % self.ChrList[self.selectedChr][0],
+ xy=(chrX, phenogenPaddingTop), font=chrFont, fill=GRAY)
# end of drawBrowserClickableRegions
else:
#draw the gray text
- chrFont = pid.Font(ttf="verdana", size=26*zoom, bold=1)
- traitFont = pid.Font(ttf="verdana", size=14, bold=0)
- chrX = xLeftOffset + (plotWidth - canvas.stringWidth("Chr %s" % currentChromosome, font=chrFont))/2
- canvas.drawString("Chr %s" % currentChromosome, chrX, 32, font=chrFont, color=pid.gray)
+ chrFont = ImageFont.truetype(font=VERDANA_FILE, size=26*zoom)
+ chrX = xLeftOffset + (plotWidth - im_drawer.textsize(
+ "Chr %s" % currentChromosome, font=chrFont)[0])/2
+ im_drawer.text(
+ text="Chr %s" % currentChromosome, xy=(chrX, 32), font=chrFont,
+ fill=GRAY)
# end of drawBrowserClickableRegions
pass
def drawXAxis(self, canvas, drawAreaHeight, gifmap, plotXScale, showLocusForm, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
+ im_drawer = ImageDraw.Draw(canvas)
xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
@@ -1503,21 +1888,21 @@ class DisplayMappingResults(object):
#Parameters
NUM_MINOR_TICKS = 5 # Number of minor ticks between major ticks
- X_MAJOR_TICK_THICKNESS = 2
+ X_MAJOR_TICK_THICKNESS = 3
X_MINOR_TICK_THICKNESS = 1
X_AXIS_THICKNESS = 1*zoom
# ======= Alex: Draw the X-axis labels (megabase location)
- MBLabelFont = pid.Font(ttf="verdana", size=15*zoom, bold=0)
+ MBLabelFont = ImageFont.truetype(font=VERDANA_FILE, size=15*zoom)
xMajorTickHeight = 10 * zoom # How high the tick extends below the axis
xMinorTickHeight = 5*zoom
- xAxisTickMarkColor = pid.black
- xAxisLabelColor = pid.black
+ xAxisTickMarkColor = BLACK
+ xAxisLabelColor = BLACK
fontHeight = 12*fontZoom # How tall the font that we're using is
- spacingFromLabelToAxis = 5
+ spacingFromLabelToAxis = 10
if self.plotScale == 'physic':
- strYLoc = yZero + spacingFromLabelToAxis + canvas.fontHeight(MBLabelFont)
+ strYLoc = yZero + MBLabelFont.font.height/2
###Physical single chromosome view
if self.selectedChr > -1:
XScale = Plot.detScale(startMb, endMb)
@@ -1538,13 +1923,21 @@ class DisplayMappingResults(object):
continue
Xc = xLeftOffset + plotXScale*(_Mb - startMb)
if counter % NUM_MINOR_TICKS == 0: # Draw a MAJOR mark, not just a minor tick mark
- canvas.drawLine(Xc, yZero, Xc, yZero+xMajorTickHeight, color=xAxisTickMarkColor, width=X_MAJOR_TICK_THICKNESS) # Draw the MAJOR tick mark
+ im_drawer.line(xy=((Xc, yZero),
+ (Xc, yZero+xMajorTickHeight)),
+ fill=xAxisTickMarkColor,
+ width=X_MAJOR_TICK_THICKNESS) # Draw the MAJOR tick mark
labelStr = str(formatStr % _Mb) # What Mbase location to put on the label
- strWidth = canvas.stringWidth(labelStr, font=MBLabelFont)
+ strWidth, strHeight = im_drawer.textsize(labelStr, font=MBLabelFont)
drawStringXc = (Xc - (strWidth / 2.0))
- canvas.drawString(labelStr, drawStringXc, strYLoc, font=MBLabelFont, color=xAxisLabelColor, angle=0)
+ im_drawer.text(xy=(drawStringXc, strYLoc),
+ text=labelStr, font=MBLabelFont,
+ fill=xAxisLabelColor)
else:
- canvas.drawLine(Xc, yZero, Xc, yZero+xMinorTickHeight, color=xAxisTickMarkColor, width=X_MINOR_TICK_THICKNESS) # Draw the MINOR tick mark
+ im_drawer.line(xy=((Xc, yZero),
+ (Xc, yZero+xMinorTickHeight)),
+ fill=xAxisTickMarkColor,
+ width=X_MINOR_TICK_THICKNESS) # Draw the MINOR tick mark
###Physical genome wide view
else:
@@ -1559,17 +1952,28 @@ class DisplayMappingResults(object):
else:
distScale = 5
for j, tickdists in enumerate(range(distScale, int(ceil(distLen)), distScale)):
- canvas.drawLine(startPosX + tickdists*plotXScale, yZero, startPosX + tickdists*plotXScale, yZero + 7, color=pid.black, width=1*zoom)
+ im_drawer.line(
+ xy=((startPosX+tickdists*plotXScale, yZero),
+ (startPosX+tickdists*plotXScale, yZero + 7)),
+ fill=BLACK, width=1*zoom)
if j % 2 == 0:
- canvas.drawString(str(tickdists), startPosX+tickdists*plotXScale, yZero + 10*zoom, color=pid.black, font=MBLabelFont, angle=270)
+ draw_rotated_text(
+ canvas, text=str(tickdists), font=MBLabelFont,
+ xy=(startPosX+tickdists*plotXScale,
+ yZero+10*zoom), fill=BLACK, angle=270)
startPosX += (self.ChrLengthDistList[i]+self.GraphInterval)*plotXScale
- megabaseLabelFont = pid.Font(ttf="verdana", size=18*zoom*1.5, bold=0)
- canvas.drawString("Megabases", xLeftOffset + (plotWidth - canvas.stringWidth("Megabases", font=megabaseLabelFont))/2,
- strYLoc + canvas.fontHeight(MBLabelFont)+ 10*(zoom%2) + 10, font=megabaseLabelFont, color=pid.black)
+ megabaseLabelFont = ImageFont.truetype(font=VERDANA_FILE, size=int(18*zoom*1.5))
+ im_drawer.text(
+ text="Megabases",
+ xy=(
+ xLeftOffset+(plotWidth-im_drawer.textsize(
+ "Megabases", font=megabaseLabelFont)[0])/2,
+ strYLoc+MBLabelFont.font.height+10*(zoom%2)),
+ font=megabaseLabelFont, fill=BLACK)
pass
else:
- strYLoc = yZero + spacingFromLabelToAxis + canvas.fontHeight(MBLabelFont) + 8
+ strYLoc = yZero + spacingFromLabelToAxis + MBLabelFont.font.height/2
ChrAInfo = []
preLpos = -1
distinctCount = 0.0
@@ -1613,13 +2017,13 @@ class DisplayMappingResults(object):
LRectWidth = 10
LRectHeight = 3
offsetA = -stepA
- lineColor = pid.lightblue
+ lineColor = LIGHTBLUE
startPosX = xLeftOffset
for j, ChrInfo in enumerate(ChrAInfo):
preLpos = -1
for i, item in enumerate(ChrInfo):
- Lname,Lpos = item
+ Lname, Lpos = item
if Lpos != preLpos:
offsetA += stepA
differ = 1
@@ -1632,37 +2036,58 @@ class DisplayMappingResults(object):
else:
Zorder = 0
if differ:
- canvas.drawLine(startPosX+Lpos,yZero,xLeftOffset+offsetA,\
- yZero+25, color=lineColor)
- canvas.drawLine(xLeftOffset+offsetA,yZero+25,xLeftOffset+offsetA,\
- yZero+40+Zorder*(LRectWidth+3),color=lineColor)
- rectColor = pid.orange
+ im_drawer.line(
+ xy=((startPosX+Lpos, yZero), (xLeftOffset+offsetA,\
+ yZero+25)),
+ fill=lineColor)
+ im_drawer.line(
+ xy=((xLeftOffset+offsetA, yZero+25), (xLeftOffset+offsetA,\
+ yZero+40+Zorder*(LRectWidth+3))),
+ fill=lineColor)
+ rectColor = ORANGE
else:
- canvas.drawLine(xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3)-3,\
- xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3),color=lineColor)
- rectColor = pid.deeppink
- canvas.drawRect(xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3),\
- xLeftOffset+offsetA-LRectHeight,yZero+40+Zorder*(LRectWidth+3)+LRectWidth,\
- edgeColor=rectColor,fillColor=rectColor,edgeWidth = 0)
+ im_drawer.line(
+ xy=((xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3)-3), (\
+ xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3))),
+ fill=lineColor)
+ rectColor = DEEPPINK
+ im_drawer.rectangle(
+ xy=((xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3)),
+ (xLeftOffset+offsetA-LRectHeight,
+ yZero+40+Zorder*(LRectWidth+3)+LRectWidth)),
+ outline=rectColor, fill=rectColor, width = 0)
COORDS="%d,%d,%d,%d"%(xLeftOffset+offsetA-LRectHeight, yZero+40+Zorder*(LRectWidth+3),\
xLeftOffset+offsetA,yZero+40+Zorder*(LRectWidth+3)+LRectWidth)
- HREF="/show_trait?trait_id=%s&dataset=%s" % (Lname, self.dataset.group.name+"Geno")
+ HREF = "/show_trait?trait_id=%s&dataset=%s" % (Lname, self.dataset.group.name+"Geno")
#HREF="javascript:showDatabase3('%s','%s','%s','');" % (showLocusForm,fd.RISet+"Geno", Lname)
- Areas=HT.Area(shape='rect', coords=COORDS, href=HREF, target="_blank", title="Locus : " + Lname)
- gifmap.areas.append(Areas)
+ Areas = HtmlGenWrapper.create_area_tag(
+ shape='rect',
+ coords=COORDS,
+ href=HREF,
+ target="_blank",
+ title="Locus : {}".format(Lname))
+ gifmap.append(Areas)
##piddle bug
if j == 0:
- canvas.drawLine(startPosX,yZero,startPosX,yZero+40, color=lineColor)
+ im_drawer.line(
+ xy=((startPosX, yZero), (startPosX, yZero+40)),
+ fill=lineColor)
startPosX += (self.ChrLengthDistList[j]+self.GraphInterval)*plotXScale
- centimorganLabelFont = pid.Font(ttf="verdana", size=18*zoom*1.5, bold=0)
- canvas.drawString("Centimorgans", xLeftOffset + (plotWidth - canvas.stringWidth("Megabases", font=centimorganLabelFont))/2,
- strYLoc + canvas.fontHeight(MBLabelFont)+ 10*(zoom%2) + 10, font=centimorganLabelFont, color=pid.black)
+ centimorganLabelFont = ImageFont.truetype(font=VERDANA_FILE, size=int(18*zoom*1.5))
+ im_drawer.text(
+ text="Centimorgans",
+ xy=(xLeftOffset+(plotWidth-im_drawer.textsize(
+ "Centimorgans", font=centimorganLabelFont)[0])/2,
+ strYLoc + MBLabelFont.font.height+ 10*(zoom%2)),
+ font=centimorganLabelFont, fill=BLACK)
- canvas.drawLine(xLeftOffset, yZero, xLeftOffset+plotWidth, yZero, color=pid.black, width=X_AXIS_THICKNESS) # Draw the X axis itself
+ im_drawer.line(xy=((xLeftOffset, yZero), (xLeftOffset+plotWidth, yZero)),
+ fill=BLACK, width=X_AXIS_THICKNESS) # Draw the X axis itself
def drawQTL(self, canvas, drawAreaHeight, gifmap, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
+ im_drawer = ImageDraw.Draw(canvas)
xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
@@ -1682,7 +2107,7 @@ class DisplayMappingResults(object):
if self.lrsMax <= 0: #sliding scale
if "lrs_value" in self.qtlresults[0]:
LRS_LOD_Max = max([result['lrs_value'] for result in self.qtlresults])
- if self.LRS_LOD == "LOD" or self.LRS_LOD == "-log(p)":
+ if self.LRS_LOD == "LOD" or self.LRS_LOD == "-logP":
LRS_LOD_Max = LRS_LOD_Max / self.LODFACTOR
if self.permChecked and self.nperm > 0 and not self.multipleInterval:
self.significant = min(self.significant / self.LODFACTOR, webqtlConfig.MAXLRS)
@@ -1708,11 +2133,7 @@ class DisplayMappingResults(object):
pass
if self.permChecked and self.nperm > 0 and not self.multipleInterval:
- if self.significant > LRS_LOD_Max:
- LRS_LOD_Max = self.significant * 1.1
- #LRS_LOD_Max = max(self.significant, LRS_LOD_Max)
- else:
- LRS_LOD_Max = 1.15*LRS_LOD_Max
+ LRS_LOD_Max = max(self.significant, LRS_LOD_Max)
#genotype trait will give infinite LRS
LRS_LOD_Max = min(LRS_LOD_Max, webqtlConfig.MAXLRS)
@@ -1727,13 +2148,21 @@ class DisplayMappingResults(object):
js_data['max_score'] = LRS_LOD_Max
self.js_data = json.dumps(js_data)
- LRSScaleFont=pid.Font(ttf="verdana", size=16*zoom, bold=0)
- LRSLODFont=pid.Font(ttf="verdana", size=18*zoom*1.5, bold=0)
+ LRSScaleFont=ImageFont.truetype(font=VERDANA_FILE, size=16*zoom)
+ LRSLODFont=ImageFont.truetype(font=VERDANA_FILE, size=int(18*zoom*1.5))
yZero = yTopOffset + plotHeight
- LRSHeightThresh = drawAreaHeight
- AdditiveHeightThresh = drawAreaHeight/2
- DominanceHeightThresh = drawAreaHeight/2
+ # LRSHeightThresh = drawAreaHeight
+ # AdditiveHeightThresh = drawAreaHeight/2
+ # DominanceHeightThresh = drawAreaHeight/2
+ if self.selectedChr == 1:
+ LRSHeightThresh = drawAreaHeight - yTopOffset + 30*(zoom - 1)
+ AdditiveHeightThresh = LRSHeightThresh/2
+ DominanceHeightThresh = LRSHeightThresh/2
+ else:
+ LRSHeightThresh = drawAreaHeight
+ AdditiveHeightThresh = drawAreaHeight/2
+ DominanceHeightThresh = drawAreaHeight/2
# LRSHeightThresh = (yZero - yTopOffset + 30*(zoom - 1))
# AdditiveHeightThresh = LRSHeightThresh/2
# DominanceHeightThresh = LRSHeightThresh/2
@@ -1748,41 +2177,61 @@ class DisplayMappingResults(object):
LRSScale = 1.0
LRSAxisList = Plot.frange(LRSScale, LRS_LOD_Max, LRSScale)
- #make sure the user's value appears on the y-axis
- #update by NL 6-21-2011: round the LOD value to 100 when LRS_LOD_Max is equal to 460
- LRSAxisList.append(ceil(LRS_LOD_Max))
#ZS: Convert to int if all axis values are whole numbers
all_int = True
for item in LRSAxisList:
- if item.is_integer():
+ if isinstance(item, int):
continue
else:
all_int = False
break
+ # TODO(PIL): Convert from PIL
+ # if all_int:
+ # max_lrs_width = canvas.stringWidth("%d" % LRS_LOD_Max, font=LRSScaleFont) + 40
+ # else:
+ # max_lrs_width = canvas.stringWidth("%2.1f" % LRS_LOD_Max, font=LRSScaleFont) + 30
+ #draw the "LRS" or "LOD" string to the left of the axis
+ LRSScaleFont=ImageFont.truetype(font=VERDANA_FILE, size=16*zoom)
+ LRSLODFont=ImageFont.truetype(font=VERDANA_FILE, size=int(18*zoom*1.5))
+ yZero = yTopOffset + plotHeight
+
+ # TEXT_X_DISPLACEMENT = -20
+ #TEXT_Y_DISPLACEMENT = -215
if all_int:
- max_lrs_width = canvas.stringWidth("%d" % LRS_LOD_Max, font=LRSScaleFont) + 40
+ TEXT_X_DISPLACEMENT = -12
else:
- max_lrs_width = canvas.stringWidth("%2.1f" % LRS_LOD_Max, font=LRSScaleFont) + 30
-
- #draw the "LRS" or "LOD" string to the left of the axis
- canvas.drawString(self.LRS_LOD, xLeftOffset - max_lrs_width - 15*(zoom-1), \
- yZero - 150 - 300*(zoom - 1), font=LRSLODFont, color=pid.black, angle=90)
+ TEXT_X_DISPLACEMENT = -30
+ if self.LRS_LOD == "-logP":
+ TEXT_Y_DISPLACEMENT = -242
+ else:
+ TEXT_Y_DISPLACEMENT = -210
+ draw_rotated_text(
+ canvas, text=self.LRS_LOD, font=LRSLODFont,
+ xy=(xLeftOffset - im_drawer.textsize(
+ "999.99", font=LRSScaleFont)[0] - 15*(zoom-1) + TEXT_X_DISPLACEMENT,
+ yZero + TEXT_Y_DISPLACEMENT - 300*(zoom - 1)),
+ fill=BLACK, angle=90)
for item in LRSAxisList:
if LRS_LOD_Max == 0.0:
LRS_LOD_Max = 0.000001
yTopOffset + 30*(zoom - 1)
yLRS = yZero - (item/LRS_LOD_Max) * LRSHeightThresh
- #yLRS = yZero - (item/LRSAxisList[-1]) * LRSHeightThresh
- canvas.drawLine(xLeftOffset, yLRS, xLeftOffset - 4, yLRS, color=self.LRS_COLOR, width=1*zoom)
+ im_drawer.line(xy=((xLeftOffset, yLRS), (xLeftOffset-4, yLRS)),
+ fill=self.LRS_COLOR, width=1*zoom)
if all_int:
scaleStr = "%d" % item
else:
scaleStr = "%2.1f" % item
#Draw the LRS/LOD Y axis label
- canvas.drawString(scaleStr, xLeftOffset-4-canvas.stringWidth(scaleStr, font=LRSScaleFont)-5, yLRS+3, font=LRSScaleFont, color=self.LRS_COLOR)
+ TEXT_Y_DISPLACEMENT = -10
+ im_drawer.text(
+ text=scaleStr,
+ xy=(xLeftOffset-4-im_drawer.textsize(scaleStr, font=LRSScaleFont)[0]-5,
+ yLRS+TEXT_Y_DISPLACEMENT),
+ font=LRSScaleFont, fill=self.LRS_COLOR)
if self.permChecked and self.nperm > 0 and not self.multipleInterval:
significantY = yZero - self.significant*LRSHeightThresh/LRS_LOD_Max
@@ -1797,22 +2246,38 @@ class DisplayMappingResults(object):
#ZS: I don't know if what I did here with this inner function is clever or overly complicated, but it's the only way I could think of to avoid duplicating the code inside this function
def add_suggestive_significant_lines_and_legend(start_pos_x, chr_length_dist):
rightEdge = int(start_pos_x + chr_length_dist*plotXScale - self.SUGGESTIVE_WIDTH/1.5)
- canvas.drawLine(start_pos_x+self.SUGGESTIVE_WIDTH/1.5, suggestiveY, rightEdge, suggestiveY, color=self.SUGGESTIVE_COLOR,
- width=self.SUGGESTIVE_WIDTH*zoom, clipX=(xLeftOffset, xLeftOffset + plotWidth-2))
- canvas.drawLine(start_pos_x+self.SUGGESTIVE_WIDTH/1.5, significantY, rightEdge, significantY, color=self.SIGNIFICANT_COLOR,
- width=self.SIGNIFICANT_WIDTH*zoom, clipX=(xLeftOffset, xLeftOffset + plotWidth-2))
+ im_drawer.line(
+ xy=((start_pos_x+self.SUGGESTIVE_WIDTH/1.5, suggestiveY),
+ (rightEdge, suggestiveY)),
+ fill=self.SUGGESTIVE_COLOR, width=self.SUGGESTIVE_WIDTH*zoom
+ #,clipX=(xLeftOffset, xLeftOffset + plotWidth-2)
+ )
+ im_drawer.line(
+ xy=((start_pos_x+self.SUGGESTIVE_WIDTH/1.5, significantY),
+ (rightEdge, significantY)),
+ fill=self.SIGNIFICANT_COLOR,
+ width=self.SIGNIFICANT_WIDTH*zoom
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth-2)
+ )
sugg_coords = "%d, %d, %d, %d" % (start_pos_x, suggestiveY-2, rightEdge + 2*zoom, suggestiveY+2)
sig_coords = "%d, %d, %d, %d" % (start_pos_x, significantY-2, rightEdge + 2*zoom, significantY+2)
+
if self.LRS_LOD == 'LRS':
sugg_title = "Suggestive LRS = %0.2f" % self.suggestive
sig_title = "Significant LRS = %0.2f" % self.significant
else:
sugg_title = "Suggestive LOD = %0.2f" % (self.suggestive/4.61)
sig_title = "Significant LOD = %0.2f" % (self.significant/4.61)
- Areas1 = HT.Area(shape='rect',coords=sugg_coords,title=sugg_title)
- Areas2 = HT.Area(shape='rect',coords=sig_coords,title=sig_title)
- gifmap.areas.append(Areas1)
- gifmap.areas.append(Areas2)
+ Areas1 = HtmlGenWrapper.create_area_tag(
+ shape='rect',
+ coords=sugg_coords,
+ title=sugg_title)
+ Areas2 = HtmlGenWrapper.create_area_tag(
+ shape='rect',
+ coords=sig_coords,
+ title=sig_title)
+ gifmap.append(Areas1)
+ gifmap.append(Areas2)
start_pos_x += (chr_length_dist+self.GraphInterval)*plotXScale
return start_pos_x
@@ -1831,8 +2296,8 @@ class DisplayMappingResults(object):
lrsEdgeWidth = 1
else:
if self.additiveChecked:
- additiveMax = max(map(lambda X : abs(X['additive']), self.qtlresults))
- lrsEdgeWidth = 2
+ additiveMax = max([abs(X['additive']) for X in self.qtlresults])
+ lrsEdgeWidth = 3
if zoom == 2:
lrsEdgeWidth = 2 * lrsEdgeWidth
@@ -1841,7 +2306,7 @@ class DisplayMappingResults(object):
AdditiveCoordXY = []
DominanceCoordXY = []
- symbolFont = pid.Font(ttf="fnt_bs", size=5,bold=0) #ZS: For Manhattan Plot
+ symbolFont = ImageFont.truetype(font=FNT_BS_FILE, size=5) #ZS: For Manhattan Plot
previous_chr = 1
previous_chr_as_int = 0
@@ -1853,7 +2318,14 @@ class DisplayMappingResults(object):
thisLRSColor = self.colorCollection[0]
if qtlresult['chr'] != previous_chr and self.selectedChr == -1:
if self.manhattan_plot != True:
- canvas.drawPolygon(LRSCoordXY,edgeColor=thisLRSColor,closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ # im_drawer.polygon(
+ # xy=LRSCoordXY,
+ # outline=thisLRSColor
+ # # , closed=0, edgeWidth=lrsEdgeWidth,
+ # # clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ # )
+ draw_open_polygon(canvas, xy=LRSCoordXY,
+ outline=thisLRSColor, width=lrsEdgeWidth)
if not self.multipleInterval and self.additiveChecked:
plusColor = self.ADDITIVE_COLOR_POSITIVE
@@ -1868,22 +2340,58 @@ class DisplayMappingResults(object):
else:
Xcm = (yZero-Yc0)/((Yc-Yc0)/(Xc-Xc0)) +Xc0
if Yc0 < yZero:
- canvas.drawLine(Xc0, Yc0, Xcm, yZero, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
- canvas.drawLine(Xcm, yZero, Xc, yZero-(Yc-yZero), color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, Yc0), (Xcm, yZero)),
+ fill=plusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
+ im_drawer.line(
+ xy=((Xcm, yZero), (Xc, yZero-(Yc-yZero))),
+ fill=minusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
else:
- canvas.drawLine(Xc0, yZero - (Yc0-yZero), Xcm, yZero, color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
- canvas.drawLine(Xcm, yZero, Xc, Yc, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, yZero-(Yc0-yZero)),
+ (Xcm, yZero)),
+ fill=minusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
+ im_drawer.line(
+ xy=((Xcm, yZero), (Xc, Yc)),
+ fill=plusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
elif (Yc0-yZero)*(Yc-yZero) > 0:
if Yc < yZero:
- canvas.drawLine(Xc0, Yc0, Xc, Yc, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, Yc0), (Xc, Yc)),
+ fill=plusColor,
+ width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
else:
- canvas.drawLine(Xc0, yZero - (Yc0-yZero), Xc, yZero - (Yc-yZero), color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, yZero - (Yc0-yZero)),
+ (Xc, yZero - (Yc-yZero))),
+ fill=minusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
else:
minYc = min(Yc-yZero, Yc0-yZero)
if minYc < 0:
- canvas.drawLine(Xc0, Yc0, Xc, Yc, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, Yc0), (Xc, Yc)),
+ fill=plusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
else:
- canvas.drawLine(Xc0, yZero - (Yc0-yZero), Xc, yZero - (Yc-yZero), color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, yZero - (Yc0-yZero)),
+ (Xc, yZero - (Yc-yZero))),
+ fill=minusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
LRSCoordXY = []
AdditiveCoordXY = []
@@ -1894,7 +2402,7 @@ class DisplayMappingResults(object):
startPosX += newStartPosX
oldStartPosX = newStartPosX
- #ZS: This is beause the chromosome value stored in qtlresult['chr'] can be (for example) either X or 20 depending upon the mapping method/scale used
+ #ZS: This is because the chromosome value stored in qtlresult['chr'] can be (for example) either X or 20 depending upon the mapping method/scale used
this_chr = str(self.ChrList[self.selectedChr][0])
if self.plotScale != "physic":
this_chr = str(self.ChrList[self.selectedChr][1]+1)
@@ -1921,7 +2429,7 @@ class DisplayMappingResults(object):
if 'lrs_value' in qtlresult:
- if self.LRS_LOD == "LOD" or self.LRS_LOD == "-log(p)":
+ if self.LRS_LOD == "LOD" or self.LRS_LOD == "-logP":
if qtlresult['lrs_value'] > 460 or qtlresult['lrs_value']=='inf':
#Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/(LRSAxisList[-1]*self.LODFACTOR)
Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/(LRS_LOD_Max*self.LODFACTOR)
@@ -1948,19 +2456,22 @@ class DisplayMappingResults(object):
Yc = yZero - qtlresult['lod_score']*LRSHeightThresh/LRS_LOD_Max
if self.manhattan_plot == True:
- if self.selectedChr == -1 and (previous_chr_as_int % 2 == 1):
- point_color = pid.red
+ if self.color_scheme == "single":
+ point_color = self.manhattan_single_color
+ elif self.color_scheme == "varied":
+ point_color = DISTINCT_COLOR_LIST[previous_chr_as_int]
else:
- point_color = pid.blue
-
- final_x_pos = Xc-canvas.stringWidth("5",font=symbolFont)/2+1
- if final_x_pos > (xLeftOffset + plotWidth):
- continue
- #break ZS: This is temporary until issue with sorting for GEMMA is fixed
- elif final_x_pos < xLeftOffset:
- continue
- else:
- canvas.drawString("5", final_x_pos,Yc+2,color=point_color, font=symbolFont)
+ if self.selectedChr == -1 and (previous_chr_as_int % 2 == 1):
+ point_color = RED
+ else:
+ point_color = BLUE
+
+ im_drawer.text(
+ text="5",
+ xy=(
+ Xc-im_drawer.textsize("5", font=symbolFont)[0]/2+1,
+ Yc-4),
+ fill=point_color, font=symbolFont)
else:
LRSCoordXY.append((Xc, Yc))
@@ -1973,7 +2484,13 @@ class DisplayMappingResults(object):
m += 1
if self.manhattan_plot != True:
- canvas.drawPolygon(LRSCoordXY,edgeColor=thisLRSColor,closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ # im_drawer.polygon(
+ # xy=LRSCoordXY,
+ # outline=thisLRSColor
+ # #, closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ # )
+ draw_open_polygon(canvas, xy=LRSCoordXY, outline=thisLRSColor,
+ width=lrsEdgeWidth)
if not self.multipleInterval and self.additiveChecked:
plusColor = self.ADDITIVE_COLOR_POSITIVE
@@ -1988,22 +2505,57 @@ class DisplayMappingResults(object):
else:
Xcm = (yZero-Yc0)/((Yc-Yc0)/(Xc-Xc0)) +Xc0
if Yc0 < yZero:
- canvas.drawLine(Xc0, Yc0, Xcm, yZero, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
- canvas.drawLine(Xcm, yZero, Xc, yZero-(Yc-yZero), color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, Yc0), (Xcm, yZero)),
+ fill=plusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
+ im_drawer.line(
+ xy=((Xcm, yZero), (Xc, yZero-(Yc-yZero))),
+ fill=minusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
else:
- canvas.drawLine(Xc0, yZero - (Yc0-yZero), Xcm, yZero, color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
- canvas.drawLine(Xcm, yZero, Xc, Yc, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, yZero - (Yc0-yZero)),
+ (Xcm, yZero)),
+ fill=minusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
+ im_drawer.line(
+ xy=((Xcm, yZero), (Xc, Yc)),
+ fill=plusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
elif (Yc0-yZero)*(Yc-yZero) > 0:
if Yc < yZero:
- canvas.drawLine(Xc0, Yc0, Xc, Yc, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, Yc0), (Xc, Yc)), fill=plusColor,
+ width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
else:
- canvas.drawLine(Xc0, yZero - (Yc0-yZero), Xc, yZero - (Yc-yZero), color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, yZero-(Yc0-yZero)),
+ (Xc, yZero-(Yc-yZero))),
+ fill=minusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
else:
minYc = min(Yc-yZero, Yc0-yZero)
if minYc < 0:
- canvas.drawLine(Xc0, Yc0, Xc, Yc, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, Yc0), (Xc, Yc)),
+ fill=plusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
else:
- canvas.drawLine(Xc0, yZero - (Yc0-yZero), Xc, yZero - (Yc-yZero), color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, yZero - (Yc0-yZero)),
+ (Xc, yZero - (Yc-yZero))),
+ fill=minusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
if not self.multipleInterval and INTERCROSS and self.dominanceChecked:
plusColor = self.DOMINANCE_COLOR_POSITIVE
@@ -2018,42 +2570,88 @@ class DisplayMappingResults(object):
else:
Xcm = (yZero-Yc0)/((Yc-Yc0)/(Xc-Xc0)) +Xc0
if Yc0 < yZero:
- canvas.drawLine(Xc0, Yc0, Xcm, yZero, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
- canvas.drawLine(Xcm, yZero, Xc, yZero-(Yc-yZero), color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, Yc0), (Xcm, yZero)),
+ fill=plusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
+ im_drawer.line(
+ xy=((Xcm, yZero), (Xc, yZero-(Yc-yZero))),
+ fill=minusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
else:
- canvas.drawLine(Xc0, yZero - (Yc0-yZero), Xcm, yZero, color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
- canvas.drawLine(Xcm, yZero, Xc, Yc, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, yZero - (Yc0-yZero)), (Xcm, yZero)),
+ fill=minusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
+ im_drawer.line(
+ xy=((Xcm, yZero), (Xc, Yc)),
+ fill=plusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
elif (Yc0-yZero)*(Yc-yZero) > 0:
if Yc < yZero:
- canvas.drawLine(Xc0, Yc0, Xc, Yc, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, Yc0), (Xc, Yc)),
+ fill=plusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
else:
- canvas.drawLine(Xc0, yZero - (Yc0-yZero), Xc, yZero - (Yc-yZero), color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, yZero - (Yc0-yZero)),
+ (Xc, yZero - (Yc-yZero))),
+ fill=minusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
else:
minYc = min(Yc-yZero, Yc0-yZero)
if minYc < 0:
- canvas.drawLine(Xc0, Yc0, Xc, Yc, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, Yc0), (Xc, Yc)),
+ fill=plusColor, width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
else:
- canvas.drawLine(Xc0, yZero - (Yc0-yZero), Xc, yZero - (Yc-yZero), color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
+ im_drawer.line(
+ xy=((Xc0, yZero - (Yc0-yZero)),
+ (Xc, yZero - (Yc-yZero))), fill=minusColor,
+ width=lineWidth
+ #, clipX=(xLeftOffset, xLeftOffset + plotWidth)
+ )
###draw additive scale
if not self.multipleInterval and self.additiveChecked:
- additiveScaleFont=pid.Font(ttf="verdana",size=16*zoom,bold=0)
- additiveScale = Plot.detScaleOld(0,additiveMax)
+ additiveScaleFont=ImageFont.truetype(font=VERDANA_FILE, size=16*zoom)
+ additiveScale = Plot.detScaleOld(0, additiveMax)
additiveStep = (additiveScale[1]-additiveScale[0])/additiveScale[2]
additiveAxisList = Plot.frange(0, additiveScale[1], additiveStep)
addPlotScale = AdditiveHeightThresh/additiveMax
+ TEXT_Y_DISPLACEMENT = -8
additiveAxisList.append(additiveScale[1])
for item in additiveAxisList:
additiveY = yZero - item*addPlotScale
- canvas.drawLine(xLeftOffset + plotWidth,additiveY,xLeftOffset+4+ plotWidth,additiveY,color=self.ADDITIVE_COLOR_POSITIVE, width=1*zoom)
+ im_drawer.line(
+ xy=((xLeftOffset + plotWidth, additiveY),
+ (xLeftOffset+4+ plotWidth, additiveY)),
+ fill=self.ADDITIVE_COLOR_POSITIVE, width=1*zoom)
scaleStr = "%2.3f" % item
- canvas.drawString(scaleStr,xLeftOffset + plotWidth +6,additiveY+5,font=additiveScaleFont,color=self.ADDITIVE_COLOR_POSITIVE)
+ im_drawer.text(
+ text=scaleStr,
+ xy=(xLeftOffset + plotWidth +6, additiveY+TEXT_Y_DISPLACEMENT),
+ font=additiveScaleFont, fill=self.ADDITIVE_COLOR_POSITIVE)
- canvas.drawLine(xLeftOffset+plotWidth,additiveY,xLeftOffset+plotWidth,yZero,color=self.ADDITIVE_COLOR_POSITIVE, width=1*zoom)
+ im_drawer.line(
+ xy=((xLeftOffset+plotWidth, additiveY),
+ (xLeftOffset+plotWidth, yZero)),
+ fill=self.ADDITIVE_COLOR_POSITIVE, width=1*zoom)
- canvas.drawLine(xLeftOffset, yZero, xLeftOffset, yTopOffset + 30*(zoom - 1), color=self.LRS_COLOR, width=1*zoom) #the blue line running up the y axis
+ im_drawer.line(
+ xy=((xLeftOffset, yZero), (xLeftOffset, yTopOffset + 30*(zoom - 1))),
+ fill=self.LRS_COLOR, width=1*zoom) #the blue line running up the y axis
def drawGraphBackground(self, canvas, gifmap, offset= (80, 120, 80, 50), zoom = 1, startMb = None, endMb = None):
@@ -2061,6 +2659,7 @@ class DisplayMappingResults(object):
##multiple Chromosome view
##single Chromosome Physical
##single Chromosome Genetic
+ im_drawer = ImageDraw.Draw(canvas)
xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
@@ -2087,8 +2686,10 @@ class DisplayMappingResults(object):
else:
theBackColor = self.GRAPH_BACK_LIGHT_COLOR
i += 1
- canvas.drawRect(startPix, yTopOffset, min(startPix+spacingAmt, xLeftOffset+plotWidth), \
- yBottom, edgeColor=theBackColor, fillColor=theBackColor)
+ im_drawer.rectangle(
+ [(startPix, yTopOffset),
+ (min(startPix+spacingAmt, xLeftOffset+plotWidth), yBottom)],
+ outline=theBackColor, fill=theBackColor)
drawRegionDistance = self.ChrLengthDistList[self.ChrList[self.selectedChr][1]]
self.ChrLengthDistList = [drawRegionDistance]
@@ -2105,7 +2706,7 @@ class DisplayMappingResults(object):
chrFontZoom = 2
else:
chrFontZoom = 1
- chrLabelFont=pid.Font(ttf="verdana",size=24*chrFontZoom,bold=0)
+ chrLabelFont=ImageFont.truetype(font=VERDANA_FILE, size=24*chrFontZoom)
for i, _chr in enumerate(self.genotype):
if (i % 2 == 0):
@@ -2114,21 +2715,29 @@ class DisplayMappingResults(object):
theBackColor = self.GRAPH_BACK_LIGHT_COLOR
#draw the shaded boxes and the sig/sug thick lines
- canvas.drawRect(startPosX, yTopOffset, startPosX + self.ChrLengthDistList[i]*plotXScale, \
- yBottom, edgeColor=pid.gainsboro,fillColor=theBackColor)
+ im_drawer.rectangle(
+ ((startPosX, yTopOffset),
+ (startPosX + self.ChrLengthDistList[i]*plotXScale, yBottom)),
+ outline=GAINSBORO,
+ fill=theBackColor)
- chrNameWidth = canvas.stringWidth(_chr.name, font=chrLabelFont)
+ chrNameWidth, chrNameHeight = im_drawer.textsize(_chr.name, font=chrLabelFont)
chrStartPix = startPosX + (self.ChrLengthDistList[i]*plotXScale -chrNameWidth)/2
chrEndPix = startPosX + (self.ChrLengthDistList[i]*plotXScale +chrNameWidth)/2
- canvas.drawString(_chr.name, chrStartPix, yTopOffset + 20 ,font = chrLabelFont,color=pid.black)
- COORDS = "%d,%d,%d,%d" %(chrStartPix, yTopOffset, chrEndPix,yTopOffset +20)
+ TEXT_Y_DISPLACEMENT = 0
+ im_drawer.text(xy=(chrStartPix, yTopOffset + TEXT_Y_DISPLACEMENT),
+ text=_chr.name, font=chrLabelFont, fill=BLACK)
+ COORDS = "%d,%d,%d,%d" %(chrStartPix, yTopOffset, chrEndPix, yTopOffset +20)
#add by NL 09-03-2010
- HREF = "javascript:chrView(%d,%s);" % (i,self.ChrLengthMbList)
+ HREF = "javascript:chrView(%d,%s);" % (i, self.ChrLengthMbList)
#HREF = "javascript:changeView(%d,%s);" % (i,self.ChrLengthMbList)
- Areas = HT.Area(shape='rect',coords=COORDS,href=HREF)
- gifmap.areas.append(Areas)
+ Areas = HtmlGenWrapper.create_area_tag(
+ shape='rect',
+ coords=COORDS,
+ href=HREF)
+ gifmap.append(Areas)
startPosX += (self.ChrLengthDistList[i]+self.GraphInterval)*plotXScale
return plotXScale
@@ -2137,7 +2746,7 @@ class DisplayMappingResults(object):
#########################################
# Permutation Graph
#########################################
- myCanvas = pid.PILCanvas(size=(500,300))
+ myCanvas = Image.new("RGBA", size=(500, 300))
if 'lod_score' in self.qtlresults[0] and self.LRS_LOD == "LRS":
perm_output = [value*4.61 for value in self.perm_output]
elif 'lod_score' not in self.qtlresults[0] and self.LRS_LOD == "LOD":
@@ -2147,7 +2756,8 @@ class DisplayMappingResults(object):
filename= webqtlUtil.genRandStr("Reg_")
Plot.plotBar(myCanvas, perm_output, XLabel=self.LRS_LOD, YLabel='Frequency', title=' Histogram of Permutation Test')
- myCanvas.save(GENERATED_IMAGE_DIR+filename, format='gif')
+ myCanvas.save("{}.gif".format(GENERATED_IMAGE_DIR+filename),
+ format='gif')
return filename
@@ -2212,7 +2822,11 @@ class DisplayMappingResults(object):
tableIterationsCnt = tableIterationsCnt + 1
this_row = [] #container for the cells of each row
- selectCheck = HT.Input(type="checkbox", name="selectCheck", value=theGO["GeneSymbol"], Class="checkbox trait_checkbox") #checkbox for each row
+ selectCheck = HtmlGenWrapper.create_input_tag(
+ type_="checkbox",
+ name="selectCheck",
+ value=theGO["GeneSymbol"],
+ Class="checkbox trait_checkbox") # checkbox for each row
geneLength = (theGO["TxEnd"] - theGO["TxStart"])*1000.0
tenPercentLength = geneLength*0.0001
@@ -2223,9 +2837,17 @@ class DisplayMappingResults(object):
geneIdString = 'http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids=%s' % theGO["GeneID"]
if theGO["snpCount"]:
- snpString = HT.Href(url="http://genenetwork.org/webqtl/main.py?FormID=snpBrowser&chr=%s&start=%s&end=%s&geneName=%s&s1=%d&s2=%d" % (theGO["Chromosome"],
- theGO["TxStart"], theGO["TxEnd"], theGO["GeneSymbol"], self.diffCol[0], self.diffCol[1]),
- text=theGO["snpCount"], target="_blank", Class="normalsize")
+ snpString = HT.Link(
+ (f"http://genenetwork.org/webqtl/main.py?FormID=snpBrowser&"
+ f"chr={theGO['Chromosome']}&"
+ f"start={theGO['TxStart']}&"
+ f"end={theGO['TxEnd']}&"
+ f"geneName={theGO['GeneSymbol']}&"
+ f"s1={self.diffCol[0]}&s2=%d"),
+ str(theGO["snpCount"]) # The text to display
+ )
+ snpString.set_blank_target()
+ snpString.set_attribute("class", "normalsize")
else:
snpString = 0
@@ -2266,45 +2888,78 @@ class DisplayMappingResults(object):
else:
chr_as_int = int(theGO["Chromosome"]) - 1
if refGene:
- literatureCorrelationString = str(self.getLiteratureCorrelation(self.cursor,refGene,theGO['GeneID']) or "N/A")
+ literatureCorrelationString = str(self.getLiteratureCorrelation(self.cursor, refGene, theGO['GeneID']) or "N/A")
this_row = [selectCheck.__str__(),
str(tableIterationsCnt),
- HT.Href(geneIdString, theGO["GeneSymbol"], target="_blank").__str__(),
- HT.Href(mouseStartString, "%0.6f" % txStart, target="_blank").__str__(),
- HT.Href("javascript:rangeView('%s', %f, %f)" % (str(chr_as_int), txStart-tenPercentLength, txEnd+tenPercentLength), "%0.3f" % geneLength).__str__(),
+ str(HtmlGenWrapper.create_link_tag(
+ geneIdString,
+ theGO["GeneSymbol"],
+ target="_blank")
+ ),
+ str(HtmlGenWrapper.create_link_tag(
+ mouseStartString,
+ "{:.6f}".format(txStart),
+ target="_blank")
+ ),
+ str(HtmlGenWrapper.create_link_tag(
+ "javascript:rangeView('{}', {:f}, {:f})".format(
+ str(chr_as_int),
+ txStart-tenPercentLength,
+ txEnd+tenPercentLength),
+ "{:.3f}".format(geneLength))),
snpString,
snpDensityStr,
avgExpr,
humanChr,
- HT.Href(humanStartString, humanStartDisplay, target="_blank").__str__(),
+ str(HtmlGenWrapper.create_link_tag(
+ humanStartString,
+ humanStartDisplay,
+ target="_blank")),
literatureCorrelationString,
geneDescription]
else:
this_row = [selectCheck.__str__(),
str(tableIterationsCnt),
- HT.Href(geneIdString, theGO["GeneSymbol"], target="_blank").__str__(),
- HT.Href(mouseStartString, "%0.6f" % txStart, target="_blank").__str__(),
- HT.Href("javascript:rangeView('%s', %f, %f)" % (str(chr_as_int), txStart-tenPercentLength, txEnd+tenPercentLength), "%0.3f" % geneLength).__str__(),
+ str(HtmlGenWrapper.create_link_tag(
+ geneIdString, theGO["GeneSymbol"],
+ target="_blank")),
+ str(HtmlGenWrapper.create_link_tag(
+ mouseStartString,
+ "{:.6f}".format(txStart),
+ target="_blank")),
+ str(HtmlGenWrapper.create_link_tag(
+ "javascript:rangeView('{}', {:f}, {:f})".format(
+ str(chr_as_int),
+ txStart-tenPercentLength,
+ txEnd+tenPercentLength),
+ "{:.3f}".format(geneLength))),
snpString,
snpDensityStr,
avgExpr,
humanChr,
- HT.Href(humanStartString, humanStartDisplay, target="_blank").__str__(),
+ str(HtmlGenWrapper.create_link_tag(
+ humanStartString,
+ humanStartDisplay,
+ target="_blank")),
geneDescription]
gene_table_body.append(this_row)
elif self.dataset.group.species == 'rat':
for gIndex, theGO in enumerate(geneCol):
- this_row = [] #container for the cells of each row
- selectCheck = HT.Input(type="checkbox", name="selectCheck", Class="checkbox trait_checkbox").__str__() #checkbox for each row
-
- #ZS: May want to get this working again later
- #webqtlSearch = HT.Href(os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE)+"?cmd=sch&gene=%s&alias=1&species=rat" % theGO["GeneSymbol"], ">>", target="_blank").__str__()
+ this_row = [] # container for the cells of each row
+ selectCheck = str(HtmlGenWrapper.create_input_tag(
+ type_="checkbox",
+ name="selectCheck",
+ Class="checkbox trait_checkbox")) # checkbox for each row
if theGO["GeneID"] != "":
- geneSymbolNCBI = HT.Href("http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids=%s" % theGO["GeneID"], theGO["GeneSymbol"], Class="normalsize", target="_blank").__str__()
+ geneSymbolNCBI = str(HtmlGenWrapper.create_link_tag(
+ "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids={}".format(theGO["GeneID"]),
+ theGO["GeneSymbol"],
+ Class="normalsize",
+ target="_blank"))
else:
geneSymbolNCBI = theGO["GeneSymbol"]
@@ -2344,7 +2999,9 @@ class DisplayMappingResults(object):
str(gIndex+1),
geneSymbolNCBI,
"%0.6f" % theGO["TxStart"],
- HT.Href(geneLengthURL, "%0.3f" % (geneLength*1000.0)).__str__(),
+ str(HtmlGenWrapper.create_link_tag(
+ geneLengthURL,
+ "{:.3f}".format(geneLength*1000.0))),
avgExprVal,
mouseChr,
mouseTxStart,
@@ -2366,11 +3023,11 @@ class DisplayMappingResults(object):
lCorr = None
try:
query = 'SELECT Value FROM LCorrRamin3 WHERE GeneId1 = %s and GeneId2 = %s'
- for x,y in [(geneId1,geneId2),(geneId2,geneId1)]:
- cursor.execute(query,(x,y))
+ for x, y in [(geneId1, geneId2), (geneId2, geneId1)]:
+ cursor.execute(query, (x, y))
lCorr = cursor.fetchone()
if lCorr:
lCorr = lCorr[0]
break
except: raise #lCorr = None
- return lCorr \ No newline at end of file
+ return lCorr
diff --git a/wqflask/wqflask/marker_regression/gemma_mapping.py b/wqflask/wqflask/marker_regression/gemma_mapping.py
index e2b15c26..83ebcdf9 100644
--- a/wqflask/wqflask/marker_regression/gemma_mapping.py
+++ b/wqflask/wqflask/marker_regression/gemma_mapping.py
@@ -1,127 +1,145 @@
-import os, math, string, random, json
+import os
+import math
+import string
+import random
+import json
from base import webqtlConfig
-from base.trait import GeneralTrait
+from base.trait import create_trait
from base.data_set import create_dataset
-from utility.tools import flat_files, GEMMA_COMMAND, GEMMA_WRAPPER_COMMAND, TEMPDIR, WEBSERVER_MODE
+from utility.tools import flat_files
+from utility.tools import GEMMA_WRAPPER_COMMAND
+from utility.tools import TEMPDIR
+from utility.tools import WEBSERVER_MODE
import utility.logger
-logger = utility.logger.getLogger(__name__ )
+logger = utility.logger.getLogger(__name__)
GEMMAOPTS = "-debug"
if WEBSERVER_MODE == 'PROD':
- GEMMAOPTS = "-no-check"
+ GEMMAOPTS = "-no-check"
+
+
+def generate_random_n_string(n):
+ return ''.join(random.choice(string.ascii_uppercase + string.digits)
+ for _ in range(n))
-def run_gemma(this_trait, this_dataset, samples, vals, covariates, use_loco, maf=0.01, first_run=True, output_files=None):
- """Generates p-values for each marker using GEMMA"""
- if this_dataset.group.genofile != None:
+def run_gemma(this_trait, this_dataset, samples, vals, covariates, use_loco,
+ maf=0.01, first_run=True, output_files=None):
+ """Generates p-values for each marker using GEMMA"""
+ if this_dataset.group.genofile is not None:
genofile_name = this_dataset.group.genofile[:-5]
else:
genofile_name = this_dataset.group.name
if first_run:
- trait_filename = str(this_trait.name) + "_" + str(this_dataset.name) + "_pheno"
- gen_pheno_txt_file(this_dataset, genofile_name, vals, trait_filename)
-
- if not os.path.isfile("{}{}_output.assoc.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, genofile_name)):
- open("{}{}_output.assoc.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, genofile_name), "w+")
-
- k_output_filename = this_dataset.group.name + "_K_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
- gwa_output_filename = this_dataset.group.name + "_GWA_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
-
- this_chromosomes = this_dataset.species.chromosomes.chromosomes
- chr_list_string = ""
- for i in range(len(this_chromosomes)):
- if i < (len(this_chromosomes) - 1):
- chr_list_string += this_chromosomes[i+1].name + ","
- else:
- chr_list_string += this_chromosomes[i+1].name
-
- if covariates != "":
- gen_covariates_file(this_dataset, covariates, samples)
-
- if use_loco == "True":
- generate_k_command = GEMMA_WRAPPER_COMMAND + ' --json --loco ' + chr_list_string + ' -- ' + GEMMAOPTS + ' -g %s/%s_geno.txt -p %s/gn2/%s.txt -a %s/%s_snps.txt -gk > %s/gn2/%s.json' % (flat_files('genotype/bimbam'),
- genofile_name,
- TEMPDIR,
- trait_filename,
- flat_files('genotype/bimbam'),
- genofile_name,
- TEMPDIR,
- k_output_filename)
- logger.debug("k_command:" + generate_k_command)
- os.system(generate_k_command)
-
- gemma_command = GEMMA_WRAPPER_COMMAND + ' --json --loco --input %s/gn2/%s.json -- ' % (TEMPDIR, k_output_filename) + GEMMAOPTS + ' -g %s/%s_geno.txt -p %s/gn2/%s.txt' % (flat_files('genotype/bimbam'),
- genofile_name,
- TEMPDIR,
- trait_filename)
- if covariates != "":
- gemma_command += ' -c %s/%s_covariates.txt -a %s/%s_snps.txt -lmm 2 -maf %s > %s/gn2/%s.json' % (flat_files('mapping'),
- this_dataset.group.name,
- flat_files('genotype/bimbam'),
- genofile_name,
- maf,
- TEMPDIR,
- gwa_output_filename)
- else:
- gemma_command += ' -a %s/%s_snps.txt -lmm 2 -maf %s > %s/gn2/%s.json' % (flat_files('genotype/bimbam'),
- genofile_name,
- maf,
- TEMPDIR,
- gwa_output_filename)
-
- else:
- generate_k_command = GEMMA_WRAPPER_COMMAND + ' --json -- ' + GEMMAOPTS + ' -g %s/%s_geno.txt -p %s/gn2/%s.txt -a %s/%s_snps.txt -gk > %s/gn2/%s.json' % (flat_files('genotype/bimbam'),
- genofile_name,
- TEMPDIR,
- trait_filename,
- flat_files('genotype/bimbam'),
- genofile_name,
- TEMPDIR,
- k_output_filename)
-
- logger.debug("k_command:" + generate_k_command)
- os.system(generate_k_command)
-
- gemma_command = GEMMA_WRAPPER_COMMAND + ' --json --input %s/gn2/%s.json -- ' % (TEMPDIR, k_output_filename) + GEMMAOPTS + ' -a %s/%s_snps.txt -lmm 2 -g %s/%s_geno.txt -p %s/gn2/%s.txt' % (flat_files('genotype/bimbam'),
- genofile_name,
- flat_files('genotype/bimbam'),
- genofile_name,
- TEMPDIR,
- trait_filename)
-
-
- if covariates != "":
- gemma_command += ' -c %s/%s_covariates.txt > %s/gn2/%s.json' % (flat_files('mapping'), this_dataset.group.name, TEMPDIR, gwa_output_filename)
- else:
- gemma_command += ' > %s/gn2/%s.json' % (TEMPDIR, gwa_output_filename)
-
-
- logger.debug("gemma_command:" + gemma_command)
- os.system(gemma_command)
+ trait_filename = (f"{str(this_dataset.group.name)}_"
+ f"{str(this_trait.name)}_"
+ f"{generate_random_n_string(6)}")
+ gen_pheno_txt_file(this_dataset, genofile_name, vals, trait_filename)
+
+ if not os.path.isfile(f"{webqtlConfig.GENERATED_IMAGE_DIR}"
+ f"{genofile_name}_output.assoc.txt"):
+ open((f"{webqtlConfig.GENERATED_IMAGE_DIR}"
+ f"{genofile_name}_output.assoc.txt"),
+ "w+")
+
+ k_output_filename = (f"{this_dataset.group.name}_K_"
+ f"{generate_random_n_string(6)}")
+ gwa_output_filename = (f"{this_dataset.group.name}_GWA_"
+ f"{generate_random_n_string(6)}")
+
+ this_chromosomes = this_dataset.species.chromosomes.chromosomes
+ this_chromosomes_name = [this_chromosomes[chromosome].name
+ for chromosome in this_chromosomes]
+
+ chr_list_string = ",".join(this_chromosomes_name)
+ if covariates != "":
+ gen_covariates_file(this_dataset, covariates, samples)
+ if use_loco == "True":
+ generate_k_command = (f"{GEMMA_WRAPPER_COMMAND} --json --loco "
+ f"{chr_list_string} -- {GEMMAOPTS} "
+ f"-g {flat_files('genotype/bimbam')}/"
+ f"{genofile_name}_geno.txt -p "
+ f"{TEMPDIR}/gn2/{trait_filename}.txt -a "
+ f"{flat_files('genotype/bimbam')}/"
+ f"{genofile_name}_snps.txt -gk > "
+ f"{TEMPDIR}/gn2/{k_output_filename}.json")
+ os.system(generate_k_command)
+
+ gemma_command = (f"{GEMMA_WRAPPER_COMMAND} --json --loco "
+ f"--input {TEMPDIR}/gn2/{k_output_filename}.json "
+ f"-- {GEMMAOPTS} "
+ f"-g {flat_files('genotype/bimbam')}/"
+ f"{genofile_name}_geno.txt "
+ f"-p {TEMPDIR}/gn2/{trait_filename}.txt ")
+ if covariates != "":
+ gemma_command += (f"-c {flat_files('mapping')}/"
+ f"{this_dataset.group.name}_covariates.txt "
+ f"-a {flat_files('genotype/bimbam')}/"
+ f"{genofile_name}_snps.txt "
+ f"-lmm 9 -maf {maf} > {TEMPDIR}/gn2/"
+ f"{gwa_output_filename}.json")
+ else:
+ gemma_command += (f"-a {flat_files('genotype/bimbam')}/"
+ f"{genofile_name}_snps.txt -lmm 9 -maf "
+ f"{maf} > "
+ f"{TEMPDIR}/gn2/{gwa_output_filename}.json")
+
+ else:
+ generate_k_command = (f"{GEMMA_WRAPPER_COMMAND} --json -- "
+ f"{GEMMAOPTS} "
+ f" -g {flat_files('genotype/bimbam')}/"
+ f"{genofile_name}_geno.txt -p "
+ f"{TEMPDIR}/gn2/{trait_filename}.txt -a "
+ f"{flat_files('genotype/bimbam')}/"
+ f"{genofile_name}_snps.txt -gk > "
+ f"{TEMPDIR}/gn2/{k_output_filename}.json")
+
+ os.system(generate_k_command)
+
+ gemma_command = (f"{GEMMA_WRAPPER_COMMAND} --json --input "
+ f"{TEMPDIR}/gn2/{k_output_filename}.json -- "
+ f"{GEMMAOPTS} "
+ f"-a {flat_files('genotype/bimbam')}/"
+ f"{genofile_name}_snps.txt "
+ f"-lmm 9 -g {flat_files('genotype/bimbam')}/"
+ f"{genofile_name}_geno.txt -p "
+ f"{TEMPDIR}/gn2/{trait_filename}.txt ")
+
+ if covariates != "":
+ gemma_command += (f" -c {flat_files('mapping')}/"
+ f"{this_dataset.group.name}"
+ f"_covariates.txt > "
+ f"{TEMPDIR}/gn2/{gwa_output_filename}.json")
+ else:
+ gemma_command += f" > {TEMPDIR}/gn2/{gwa_output_filename}.json"
+
+ os.system(gemma_command)
else:
- gwa_output_filename = output_files
+ gwa_output_filename = output_files
if use_loco == "True":
marker_obs = parse_loco_output(this_dataset, gwa_output_filename)
return marker_obs, gwa_output_filename
else:
- marker_obs = parse_loco_output(this_dataset, gwa_output_filename)
+ marker_obs = parse_loco_output(
+ this_dataset, gwa_output_filename, use_loco)
return marker_obs, gwa_output_filename
+
def gen_pheno_txt_file(this_dataset, genofile_name, vals, trait_filename):
"""Generates phenotype file for GEMMA"""
- current_file_data = []
- with open("{}/gn2/{}.txt".format(TEMPDIR, trait_filename), "w") as outfile:
+ with open(f"{TEMPDIR}/gn2/{trait_filename}.txt", "w") as outfile:
for value in vals:
if value == "x":
outfile.write("NA\n")
else:
outfile.write(value + "\n")
+
def gen_covariates_file(this_dataset, covariates, samples):
covariate_list = covariates.split(",")
covariate_data_object = []
@@ -129,16 +147,12 @@ def gen_covariates_file(this_dataset, covariates, samples):
this_covariate_data = []
trait_name = covariate.split(":")[0]
dataset_ob = create_dataset(covariate.split(":")[1])
- trait_ob = GeneralTrait(dataset=dataset_ob,
+ trait_ob = create_trait(dataset=dataset_ob,
name=trait_name,
cellid=None)
-
- #trait_samples = this_dataset.group.all_samples_ordered()
this_dataset.group.get_samplelist()
trait_samples = this_dataset.group.samplelist
- logger.debug("SAMPLES:", trait_samples)
trait_sample_data = trait_ob.data
- logger.debug("SAMPLE DATA:", trait_sample_data)
for index, sample in enumerate(trait_samples):
if sample in samples:
if sample in trait_sample_data:
@@ -148,51 +162,20 @@ def gen_covariates_file(this_dataset, covariates, samples):
this_covariate_data.append("-9")
covariate_data_object.append(this_covariate_data)
- with open("{}/{}_covariates.txt".format(flat_files('mapping'), this_dataset.group.name), "w") as outfile:
+ with open((f"{flat_files('mapping')}/"
+ f"{this_dataset.group.name}_covariates.txt"),
+ "w") as outfile:
for i in range(len(covariate_data_object[0])):
for this_covariate in covariate_data_object:
outfile.write(str(this_covariate[i]) + "\t")
outfile.write("\n")
-def parse_gemma_output(genofile_name):
- included_markers = []
- p_values = []
- marker_obs = []
-
- with open("{}{}_output.assoc.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, genofile_name)) as output_file:
- for line in output_file:
- if line.startswith("chr\t"):
- continue
- else:
- marker = {}
- marker['name'] = line.split("\t")[1]
- if line.split("\t")[0] != "X" and line.split("\t")[0] != "X/Y":
- if "chr" in line.split("\t")[0]:
- marker['chr'] = int(line.split("\t")[0][3:])
- else:
- marker['chr'] = int(line.split("\t")[0])
- else:
- marker['chr'] = line.split("\t")[0]
- marker['Mb'] = float(line.split("\t")[2]) / 1000000
- marker['p_value'] = float(line.split("\t")[9])
- if math.isnan(marker['p_value']) or (marker['p_value'] <= 0):
- marker['lod_score'] = 0
- #marker['lrs_value'] = 0
- else:
- marker['lod_score'] = -math.log10(marker['p_value'])
- #marker['lrs_value'] = -math.log10(marker['p_value']) * 4.61
- marker_obs.append(marker)
-
- included_markers.append(line.split("\t")[1])
- p_values.append(float(line.split("\t")[9]))
-
- return marker_obs
-def parse_loco_output(this_dataset, gwa_output_filename):
+def parse_loco_output(this_dataset, gwa_output_filename, loco="True"):
output_filelist = []
- with open("{}/gn2/".format(TEMPDIR) + gwa_output_filename + ".json") as data_file:
- data = json.load(data_file)
+ with open(f"{TEMPDIR}/gn2/{gwa_output_filename}.json") as data_file:
+ data = json.load(data_file)
files = data['files']
for file in files:
@@ -203,10 +186,8 @@ def parse_loco_output(this_dataset, gwa_output_filename):
marker_obs = []
previous_chr = 0
- no_results = False
for this_file in output_filelist:
if not os.path.isfile(this_file):
- no_results = True
break
with open(this_file) as output_file:
for line in output_file:
@@ -220,20 +201,19 @@ def parse_loco_output(this_dataset, gwa_output_filename):
marker['chr'] = int(line.split("\t")[0][3:])
else:
marker['chr'] = int(line.split("\t")[0])
- if marker['chr'] > previous_chr:
+ if marker['chr'] > int(previous_chr):
previous_chr = marker['chr']
- elif marker['chr'] < previous_chr:
+ elif marker['chr'] < int(previous_chr):
break
else:
marker['chr'] = line.split("\t")[0]
marker['Mb'] = float(line.split("\t")[2]) / 1000000
- marker['p_value'] = float(line.split("\t")[9])
+ marker['p_value'] = float(line.split("\t")[10])
+ marker['additive'] = float(line.split("\t")[7])
if math.isnan(marker['p_value']) or (marker['p_value'] <= 0):
marker['lod_score'] = 0
- #marker['lrs_value'] = 0
else:
marker['lod_score'] = -math.log10(marker['p_value'])
- #marker['lrs_value'] = -math.log10(marker['p_value']) * 4.61
marker_obs.append(marker)
included_markers.append(line.split("\t")[1])
diff --git a/wqflask/wqflask/marker_regression/plink_mapping.py b/wqflask/wqflask/marker_regression/plink_mapping.py
index 2f327faf..5d675c38 100644
--- a/wqflask/wqflask/marker_regression/plink_mapping.py
+++ b/wqflask/wqflask/marker_regression/plink_mapping.py
@@ -9,11 +9,11 @@ import utility.logger
logger = utility.logger.getLogger(__name__ )
def run_plink(this_trait, dataset, species, vals, maf):
- plink_output_filename = webqtlUtil.genRandStr("%s_%s_"%(dataset.group.name, this_trait.name))
+ plink_output_filename = webqtlUtil.genRandStr(f"{dataset.group.name}_{this_trait.name}_")
gen_pheno_txt_file(dataset, vals)
- plink_command = PLINK_COMMAND + ' --noweb --bfile %s/%s --no-pheno --no-fid --no-parents --no-sex --maf %s --out %s%s --assoc ' % (
- flat_files('mapping'), dataset.group.name, maf, TMPDIR, plink_output_filename)
+
+ plink_command = f"{PLINK_COMMAND} --noweb --bfile {flat_files('mapping')}/{dataset.group.name} --no-pheno --no-fid --no-parents --no-sex --maf {maf} --out { TMPDIR}{plink_output_filename} --assoc "
logger.debug("plink_command:", plink_command)
os.system(plink_command)
@@ -29,12 +29,12 @@ def gen_pheno_txt_file(this_dataset, vals):
"""Generates phenotype file for GEMMA/PLINK"""
current_file_data = []
- with open("{}/{}.fam".format(flat_files('mapping'), this_dataset.group.name), "r") as outfile:
+ with open(f"{flat_files('mapping')}/{this_dataset.group.name}.fam", "r") as outfile:
for i, line in enumerate(outfile):
split_line = line.split()
current_file_data.append(split_line)
- with open("{}/{}.fam".format(flat_files('mapping'), this_dataset.group.name), "w") as outfile:
+ with open(f"{flat_files('mapping')}/{this_dataset.group.name}.fam","w") as outfile:
for i, line in enumerate(current_file_data):
if vals[i] == "x":
this_val = -9
@@ -44,8 +44,8 @@ def gen_pheno_txt_file(this_dataset, vals):
def gen_pheno_txt_file_plink(this_trait, dataset, vals, pheno_filename = ''):
ped_sample_list = get_samples_from_ped_file(dataset)
- output_file = open("%s%s.txt" % (TMPDIR, pheno_filename), "wb")
- header = 'FID\tIID\t%s\n' % this_trait.name
+ output_file = open(f"{TMPDIR}{pheno_filename}.txt", "wb")
+ header = f"FID\tIID\t{this_trait.name}\n"
output_file.write(header)
new_value_list = []
@@ -54,7 +54,7 @@ def gen_pheno_txt_file_plink(this_trait, dataset, vals, pheno_filename = ''):
for i, sample in enumerate(ped_sample_list):
try:
value = vals[i]
- value = str(value).replace('value=','')
+ value = str(value).replace('value=', '')
value = value.strip()
except:
value = -9999
@@ -65,7 +65,7 @@ def gen_pheno_txt_file_plink(this_trait, dataset, vals, pheno_filename = ''):
for i, sample in enumerate(ped_sample_list):
j = i+1
value = new_value_list[i]
- new_line += '%s\t%s\t%s\n'%(sample, sample, value)
+ new_line += f"{sample}\t{sample}\t{value}\n"
if j%1000 == 0:
output_file.write(newLine)
@@ -78,13 +78,13 @@ def gen_pheno_txt_file_plink(this_trait, dataset, vals, pheno_filename = ''):
# get strain name from ped file in order
def get_samples_from_ped_file(dataset):
- ped_file= open("{}{}.ped".format(flat_files('mapping'), dataset.group.name),"r")
+ ped_file= open(f"{flat_files('mapping')}{dataset.group.name}.ped","r")
line = ped_file.readline()
sample_list=[]
while line:
- lineList = string.split(string.strip(line), '\t')
- lineList = map(string.strip, lineList)
+ lineList = line.strip().split('\t')
+ lineList = [item.strip() for item in lineList]
sample_name = lineList[0]
sample_list.append(sample_name)
@@ -98,7 +98,7 @@ def parse_plink_output(output_filename, species):
threshold_p_value = 1
- result_fp = open("%s%s.qassoc"% (TMPDIR, output_filename), "rb")
+ result_fp = open(f"{TMPDIR}{output_filename}.qassoc","rb")
line = result_fp.readline()
@@ -111,7 +111,7 @@ def parse_plink_output(output_filename, species):
line_list = build_line_list(line=line)
# only keep the records whose chromosome name is in db
- if species.chromosomes.chromosomes.has_key(int(line_list[0])) and line_list[-1] and line_list[-1].strip()!='NA':
+ if int(line_list[0]) in species.chromosomes.chromosomes and line_list[-1] and line_list[-1].strip()!='NA':
chr_name = species.chromosomes.chromosomes[int(line_list[0])]
snp = line_list[1]
@@ -121,7 +121,7 @@ def parse_plink_output(output_filename, species):
if p_value < threshold_p_value:
p_value_dict[snp] = float(p_value)
- if plink_results.has_key(chr_name):
+ if chr_name in plink_results:
value_list = plink_results[chr_name]
# pvalue range is [0,1]
@@ -154,9 +154,9 @@ def parse_plink_output(output_filename, species):
# function: convert line from str to list;
# output: lineList list
#######################################################
-def build_line_list(line=None):
- line_list = string.split(string.strip(line),' ')# irregular number of whitespaces between columns
- line_list = [item for item in line_list if item <>'']
- line_list = map(string.strip, line_list)
+def build_line_list(line=""):
+ line_list = line.strip().split(' ')# irregular number of whitespaces between columns
+ line_list = [item for item in line_list if item !='']
+ line_list = [item.strip() for item in line_list]
- return line_list \ No newline at end of file
+ return line_list
diff --git a/wqflask/wqflask/marker_regression/qtlreaper_mapping.py b/wqflask/wqflask/marker_regression/qtlreaper_mapping.py
index 0c560582..8341ee55 100644
--- a/wqflask/wqflask/marker_regression/qtlreaper_mapping.py
+++ b/wqflask/wqflask/marker_regression/qtlreaper_mapping.py
@@ -17,34 +17,45 @@ def run_reaper(this_trait, this_dataset, samples, vals, json_data, num_perm, boo
else:
genofile_name = this_dataset.group.name
- trait_filename = str(this_trait.name) + "_" + str(this_dataset.name) + "_pheno"
+ trait_filename =f"{str(this_trait.name)}_{str(this_dataset.name)}_pheno"
gen_pheno_txt_file(samples, vals, trait_filename)
- output_filename = this_dataset.group.name + "_GWA_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
+ output_filename = (f"{this_dataset.group.name}_GWA_"+
+ ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
+ )
bootstrap_filename = None
permu_filename = None
opt_list = []
if boot_check and num_bootstrap > 0:
- bootstrap_filename = this_dataset.group.name + "_BOOTSTRAP_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
+ bootstrap_filename = (f"{this_dataset.group.name}_BOOTSTRAP_" +
+ ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
+ )
opt_list.append("-b")
- opt_list.append("--n_bootstrap " + str(num_bootstrap))
- opt_list.append("--bootstrap_output " + webqtlConfig.GENERATED_IMAGE_DIR + bootstrap_filename + ".txt")
+ opt_list.append(f"--n_bootstrap {str(num_bootstrap)}")
+ opt_list.append(f"--bootstrap_output {webqtlConfig.GENERATED_IMAGE_DIR}{bootstrap_filename}.txt")
if num_perm > 0:
- permu_filename = this_dataset.group.name + "_PERM_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
+ permu_filename =("{this_dataset.group.name}_PERM_" +
+ ''.join(random.choice(string.ascii_uppercase +
+ string.digits) for _ in range(6))
+ )
opt_list.append("-n " + str(num_perm))
opt_list.append("--permu_output " + webqtlConfig.GENERATED_IMAGE_DIR + permu_filename + ".txt")
if control_marker != "" and do_control == "true":
opt_list.append("-c " + control_marker)
+ if manhattan_plot != True:
+ opt_list.append("--interval 1")
- reaper_command = REAPER_COMMAND + ' --geno {0}/{1}.geno --traits {2}/gn2/{3}.txt {4} -o {5}{6}.txt'.format(flat_files('genotype'),
- genofile_name,
- TEMPDIR,
- trait_filename,
- " ".join(opt_list),
- webqtlConfig.GENERATED_IMAGE_DIR,
- output_filename)
+ reaper_command = (REAPER_COMMAND +
+ ' --geno {0}/{1}.geno --traits {2}/gn2/{3}.txt {4} -o {5}{6}.txt'.format(flat_files('genotype'),
+
+ genofile_name,
+ TEMPDIR,
+ trait_filename,
+ " ".join(opt_list),
+ webqtlConfig.GENERATED_IMAGE_DIR,
+ output_filename))
logger.debug("reaper_command:" + reaper_command)
os.system(reaper_command)
@@ -59,12 +70,13 @@ def run_reaper(this_trait, this_dataset, samples, vals, json_data, num_perm, boo
suggestive = permu_vals[int(num_perm*0.37-1)]
significant = permu_vals[int(num_perm*0.95-1)]
- return marker_obs, permu_vals, suggestive, significant, bootstrap_vals, [output_filename, permu_filename, bootstrap_filename]
+ return (marker_obs, permu_vals, suggestive, significant, bootstrap_vals,
+ [output_filename, permu_filename, bootstrap_filename])
def gen_pheno_txt_file(samples, vals, trait_filename):
"""Generates phenotype file for GEMMA"""
- with open("{}/gn2/{}.txt".format(TEMPDIR, trait_filename), "w") as outfile:
+ with open(f"{TEMPDIR}/gn2/{trait_filename}.txt","w") as outfile:
outfile.write("Trait\t")
filtered_sample_list = []
@@ -85,9 +97,17 @@ def parse_reaper_output(gwa_filename, permu_filename, bootstrap_filename):
p_values = []
marker_obs = []
- with open("{}{}.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, gwa_filename)) as output_file:
+ only_cm = False
+ only_mb = False
+
+ with open(f"{webqtlConfig.GENERATED_IMAGE_DIR}{gwa_filename}.txt") as output_file:
for line in output_file:
if line.startswith("ID\t"):
+ if len(line.split("\t")) < 8:
+ if 'cM' in line.split("\t"):
+ only_cm = True
+ else:
+ only_mb = True
continue
else:
marker = {}
@@ -96,16 +116,30 @@ def parse_reaper_output(gwa_filename, permu_filename, bootstrap_filename):
marker['chr'] = int(line.split("\t")[2])
except:
marker['chr'] = line.split("\t")[2]
- marker['cM'] = float(line.split("\t")[3])
- if float(line.split("\t")[4]) > 1000:
- marker['Mb'] = float(line.split("\t")[4])/1000000
+ if only_cm or only_mb:
+ if only_cm:
+ marker['cM'] = float(line.split("\t")[3])
+ else:
+ if float(line.split("\t")[3]) > 1000:
+ marker['Mb'] = float(line.split("\t")[3])/1000000
+ else:
+ marker['Mb'] = float(line.split("\t")[3])
+ if float(line.split("\t")[6]) != 1:
+ marker['p_value'] = float(line.split("\t")[6])
+ marker['lrs_value'] = float(line.split("\t")[4])
+ marker['lod_score'] = marker['lrs_value'] / 4.61
+ marker['additive'] = float(line.split("\t")[5])
else:
- marker['Mb'] = float(line.split("\t")[4])
- if float(line.split("\t")[7]) != 1:
- marker['p_value'] = float(line.split("\t")[7])
- marker['lrs_value'] = float(line.split("\t")[5])
- marker['lod_score'] = marker['lrs_value'] / 4.61
- marker['additive'] = float(line.split("\t")[6])
+ marker['cM'] = float(line.split("\t")[3])
+ if float(line.split("\t")[4]) > 1000:
+ marker['Mb'] = float(line.split("\t")[4])/1000000
+ else:
+ marker['Mb'] = float(line.split("\t")[4])
+ if float(line.split("\t")[7]) != 1:
+ marker['p_value'] = float(line.split("\t")[7])
+ marker['lrs_value'] = float(line.split("\t")[5])
+ marker['lod_score'] = marker['lrs_value'] / 4.61
+ marker['additive'] = float(line.split("\t")[6])
marker_obs.append(marker)
#ZS: Results have to be reordered because the new reaper returns results sorted alphabetically by chr for some reason, resulting in chr 1 being followed by 10, etc
@@ -113,13 +147,13 @@ def parse_reaper_output(gwa_filename, permu_filename, bootstrap_filename):
permu_vals = []
if permu_filename:
- with open("{}{}.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, permu_filename)) as permu_file:
+ with open(f"{webqtlConfig.GENERATED_IMAGE_DIR}{permu_filename}.txt") as permu_file:
for line in permu_file:
permu_vals.append(float(line))
bootstrap_vals = []
if bootstrap_filename:
- with open("{}{}.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, bootstrap_filename)) as bootstrap_file:
+ with open(f"{webqtlConfig.GENERATED_IMAGE_DIR}{bootstrap_filename}.txt") as bootstrap_file:
for line in bootstrap_file:
bootstrap_vals.append(int(line))
@@ -228,4 +262,4 @@ def natural_sort(marker_list):
"""
convert = lambda text: int(text) if text.isdigit() else text.lower()
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', str(marker_list[key]['chr'])) ]
- return sorted(range(len(marker_list)), key = alphanum_key) \ No newline at end of file
+ return sorted(list(range(len(marker_list))), key = alphanum_key) \ No newline at end of file
diff --git a/wqflask/wqflask/marker_regression/rqtl_mapping.py b/wqflask/wqflask/marker_regression/rqtl_mapping.py
index e4a4d127..4117a0e5 100644
--- a/wqflask/wqflask/marker_regression/rqtl_mapping.py
+++ b/wqflask/wqflask/marker_regression/rqtl_mapping.py
@@ -6,7 +6,7 @@ import json
from flask import g
from base.webqtlConfig import TMPDIR
-from base.trait import GeneralTrait
+from base.trait import create_trait
from base.data_set import create_dataset
from utility import webqtlUtil
from utility.tools import locate, TEMPDIR
@@ -42,7 +42,7 @@ def run_rqtl_geno(vals, samples, dataset, mapping_scale, method, model, permChec
png = ro.r["png"] # Map the png function
dev_off = ro.r["dev.off"] # Map the device off function
- print(r_library("qtl")) # Load R/qtl
+ print((r_library("qtl"))) # Load R/qtl
logger.info("QTL library loaded");
@@ -86,7 +86,6 @@ def run_rqtl_geno(vals, samples, dataset, mapping_scale, method, model, permChec
cross_object = add_phenotype(cross_object, pheno_string, "the_pheno") # Add the phenotype
cross_object = add_names(cross_object, names_string, "the_names") # Add the phenotype
logger.info("Added pheno and names");
- # Scan for QTLs
marker_covars = create_marker_covariates(control_marker, cross_object) # Create the additive covariate markers
logger.info("Marker covars done");
if cofactors != "":
@@ -95,9 +94,6 @@ def run_rqtl_geno(vals, samples, dataset, mapping_scale, method, model, permChec
ro.r('all_covars <- cbind(marker_covars, trait_covars)')
else:
ro.r('all_covars <- marker_covars')
- #logger.info("Saving");
- #ro.r('save.image(file = "/home/dannya/gn2-danny/cross.RData")')
- #logger.info("Saving Done");
covars = ro.r['all_covars']
#DEBUG to save the session object to file
if pair_scan:
@@ -115,6 +111,7 @@ def run_rqtl_geno(vals, samples, dataset, mapping_scale, method, model, permChec
else:
if do_control == "true" or cofactors != "":
logger.info("Using covariate"); result_data_frame = scanone(cross_object, pheno = "the_pheno", addcovar = covars, model=model, method=method)
+ ro.r('save.image(file = "/home/zas1024/gn2-zach/itp_cofactor_test.RData")')
else:
logger.info("No covariates"); result_data_frame = scanone(cross_object, pheno = "the_pheno", model=model, method=method)
@@ -159,7 +156,7 @@ def generate_cross_from_geno(dataset, scale_units): # TODO: Need to figur
toskip = which(unlist(lapply(header, function(x){ length(grep("Chr\t", x)) })) == 1)-1 # Major hack to skip the geno headers
type <- getGenoCode(header, 'type')
if(type == '4-way'){
- genocodes <- c('1','2','3','4')
+ genocodes <- NULL
} else {
genocodes <- c(getGenoCode(header, 'mat'), getGenoCode(header, 'het'), getGenoCode(header, 'pat')) # Get the genotype codes
}
@@ -174,7 +171,7 @@ def generate_cross_from_geno(dataset, scale_units): # TODO: Need to figur
require(qtl)
if(type == '4-way'){
cat('Loading in as 4-WAY\n')
- cross = read.cross(file=out, 'csvr', genotypes=genocodes, crosstype="4way", convertXdata=FALSE) # Load the created cross file using R/qtl read.cross
+ cross = read.cross(file=out, 'csvr', genotypes=NULL, crosstype="4way") # Load the created cross file using R/qtl read.cross
}else if(type == 'f2'){
cat('Loading in as F2\n')
cross = read.cross(file=out, 'csvr', genotypes=genocodes, crosstype="f2") # Load the created cross file using R/qtl read.cross
@@ -295,7 +292,7 @@ def add_cofactors(cross, this_dataset, covariates, samples):
covar_as_string = "c("
trait_name = covariate.split(":")[0]
dataset_ob = create_dataset(covariate.split(":")[1])
- trait_ob = GeneralTrait(dataset=dataset_ob,
+ trait_ob = create_trait(dataset=dataset_ob,
name=trait_name,
cellid=None)
@@ -321,38 +318,39 @@ def add_cofactors(cross, this_dataset, covariates, samples):
datatype = get_trait_data_type(covariate)
logger.info("Covariate: " + covariate + " is of type: " + datatype);
if(datatype == "categorical"): # Cat variable
- logger.info("call of add_categorical_covar");
- cross, col_names = add_categorical_covar(cross, covar_as_string, i) # Expand and add it to the cross
- logger.info("add_categorical_covar returned");
- for z, col_name in enumerate(col_names): # Go through the additional covar names
+ logger.info("call of add_categorical_covar");
+ cross, col_names = add_categorical_covar(cross, covar_as_string, i) # Expand and add it to the cross
+ logger.info("add_categorical_covar returned");
+ for z, col_name in enumerate(col_names): # Go through the additional covar names
+ if i < (len(covariate_list) - 1):
+ covar_name_string += '"' + col_name + '", '
+ else:
+ if(z < (len(col_names) -1)):
+ covar_name_string += '"' + col_name + '", '
+ else:
+ covar_name_string += '"' + col_name + '"'
+ else:
+ col_name = "covar_" + str(i)
+ cross = add_phenotype(cross, covar_as_string, col_name)
if i < (len(covariate_list) - 1):
- covar_name_string += '"' + col_name + '", '
- else:
- if(z < (len(col_names) -1)):
covar_name_string += '"' + col_name + '", '
- else:
+ else:
covar_name_string += '"' + col_name + '"'
- logger.info("covar_name_string:" + covar_name_string);
- else:
- col_name = "covar_" + str(i)
- cross = add_phenotype(cross, covar_as_string, col_name)
- if i < (len(covariate_list) - 1):
- covar_name_string += '"' + col_name + '", '
- else:
- covar_name_string += '"' + col_name + '"'
-
covar_name_string += ")"
- logger.info("covar_name_string:" + covar_name_string);
covars_ob = pull_var("trait_covars", cross, covar_name_string)
return cross, covars_ob
def create_marker_covariates(control_marker, cross):
ro.globalenv["the_cross"] = cross
ro.r('genotypes <- pull.geno(the_cross)') # Get the genotype matrix
- userinputS = control_marker.replace(" ", "").split(",") # TODO: sanitize user input, Never Ever trust a user
- covariate_names = ', '.join('"{0}"'.format(w) for w in userinputS)
- ro.r('covnames <- c(' + covariate_names + ')')
+ userinput_sanitized = control_marker.replace(" ", "").split(",") # TODO: sanitize user input, Never Ever trust a user
+ logger.debug(userinput_sanitized)
+ if len(userinput_sanitized) > 0:
+ covariate_names = ', '.join('"{0}"'.format(w) for w in userinput_sanitized)
+ ro.r('covnames <- c(' + covariate_names + ')')
+ else:
+ ro.r('covnames <- c()')
ro.r('covInGeno <- which(covnames %in% colnames(genotypes))')
ro.r('covnames <- covnames[covInGeno]')
ro.r("cat('covnames (purged): ', covnames,'\n')")
@@ -404,16 +402,4 @@ def process_rqtl_results(result, species_name): # TODO: how to make this
marker['lod_score'] = output[i][2]
qtl_results.append(marker)
- return qtl_results
-
-def get_trait_data_type(trait_db_string):
- # Get a trait's type (numeric, categorical, etc) from the DB
- the_query = "SELECT value FROM TraitMetadata WHERE type='trait_data_type'"
- results_json = g.db.execute(the_query).fetchone()
-
- results_ob = json.loads(results_json[0])
-
- if trait_db_string in results_ob:
- return results_ob[trait_db_string]
- else:
- return "numeric"
+ return qtl_results \ No newline at end of file
diff --git a/wqflask/wqflask/marker_regression/run_mapping.py b/wqflask/wqflask/marker_regression/run_mapping.py
index 5f7710ab..8f051c14 100644
--- a/wqflask/wqflask/marker_regression/run_mapping.py
+++ b/wqflask/wqflask/marker_regression/run_mapping.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
from base.trait import GeneralTrait
from base import data_set #import create_dataset
@@ -18,7 +16,7 @@ import uuid
import rpy2.robjects as ro
import numpy as np
-import cPickle as pickle
+import pickle as pickle
import itertools
import simplejson as json
@@ -73,58 +71,27 @@ class RunMapping(object):
all_samples_ordered = self.dataset.group.all_samples_ordered()
self.vals = []
- if 'samples' in start_vars:
- self.samples = start_vars['samples'].split(",")
- if (len(genofile_samplelist) != 0):
- for sample in genofile_samplelist:
- if sample in self.samples:
- value = start_vars.get('value:' + sample)
- if value:
- self.vals.append(value)
- else:
- self.vals.append("x")
- else:
- for sample in self.samples:
- value = start_vars.get('value:' + sample)
- if value:
- self.vals.append(value)
+ self.samples = []
+ self.sample_vals = start_vars['sample_vals']
+ sample_val_dict = json.loads(self.sample_vals)
+ samples = sample_val_dict.keys()
+ if (len(genofile_samplelist) != 0):
+ for sample in genofile_samplelist:
+ self.samples.append(sample)
+ if sample in samples:
+ self.vals.append(sample_val_dict[sample])
+ else:
+ self.vals.append("x")
else:
- self.samples = []
- if (len(genofile_samplelist) != 0):
- for sample in genofile_samplelist:
- if sample in self.dataset.group.samplelist:
- in_trait_data = False
- for item in self.this_trait.data:
- if self.this_trait.data[item].name == sample:
- value = start_vars['value:' + self.this_trait.data[item].name]
- self.samples.append(self.this_trait.data[item].name)
- self.vals.append(value)
- in_trait_data = True
- break
- if not in_trait_data:
- value = start_vars.get('value:' + sample)
- if value:
- self.samples.append(sample)
- self.vals.append(value)
- else:
- self.vals.append("x")
- else:
- for sample in self.dataset.group.samplelist: # sample is actually the name of an individual
- in_trait_data = False
- for item in self.this_trait.data:
- if self.this_trait.data[item].name == sample:
- value = start_vars['value:' + self.this_trait.data[item].name]
- self.samples.append(self.this_trait.data[item].name)
- self.vals.append(value)
- in_trait_data = True
- break
- if not in_trait_data:
- value = start_vars.get('value:' + sample)
- if value:
- self.samples.append(sample)
- self.vals.append(value)
-
- self.num_vals = len(self.vals)
+ for sample in self.dataset.group.samplelist:
+ if sample in samples:
+ self.vals.append(sample_val_dict[sample])
+ self.samples.append(sample)
+
+ if 'n_samples' in start_vars:
+ self.n_samples = start_vars['n_samples']
+ else:
+ self.n_samples = len([val for val in self.vals if val != "x"])
#ZS: Check if genotypes exist in the DB in order to create links for markers
@@ -137,10 +104,15 @@ class RunMapping(object):
mapping_results_filename = self.dataset.group.name + "_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
self.mapping_results_path = "{}{}.csv".format(webqtlConfig.GENERATED_IMAGE_DIR, mapping_results_filename)
- if start_vars['manhattan_plot'] == "True":
- self.manhattan_plot = True
- else:
- self.manhattan_plot = False
+ self.manhattan_plot = False
+ if 'manhattan_plot' in start_vars:
+ if start_vars['manhattan_plot'].lower() != "false":
+ self.color_scheme = "alternating"
+ if "color_scheme" in start_vars:
+ self.color_scheme = start_vars['color_scheme']
+ if self.color_scheme == "single":
+ self.manhattan_single_color = start_vars['manhattan_single_color']
+ self.manhattan_plot = True
self.maf = start_vars['maf'] # Minor allele frequency
if "use_loco" in start_vars:
@@ -161,7 +133,8 @@ class RunMapping(object):
self.num_perm = 0
self.perm_output = []
self.bootstrap_results = []
- self.covariates = start_vars['covariates'] if "covariates" in start_vars else None
+ self.covariates = start_vars['covariates'] if "covariates" in start_vars else ""
+ self.categorical_vars = []
#ZS: This is passed to GN1 code for single chr mapping
self.selected_chr = -1
@@ -226,7 +199,7 @@ class RunMapping(object):
self.output_files = start_vars['output_files']
if 'first_run' in start_vars: #ZS: check if first run so existing result files can be used if it isn't (for example zooming on a chromosome, etc)
self.first_run = False
- self.score_type = "-log(p)"
+ self.score_type = "-logP"
self.manhattan_plot = True
with Bench("Running GEMMA"):
if self.use_loco == "True":
@@ -325,7 +298,7 @@ class RunMapping(object):
self.control_marker,
self.manhattan_plot)
elif self.mapping_method == "plink":
- self.score_type = "-log(p)"
+ self.score_type = "-logP"
self.manhattan_plot = True
results = plink_mapping.run_plink(self.this_trait, self.dataset, self.species, self.vals, self.maf)
#results = self.run_plink()
@@ -343,7 +316,7 @@ class RunMapping(object):
if marker['chr1'] > 0 or marker['chr1'] == "X" or marker['chr1'] == "X/Y":
if marker['chr1'] > highest_chr or marker['chr1'] == "X" or marker['chr1'] == "X/Y":
highest_chr = marker['chr1']
- if 'lod_score' in marker.keys():
+ if 'lod_score' in list(marker.keys()):
self.qtl_results.append(marker)
self.trimmed_markers = results
@@ -370,10 +343,15 @@ class RunMapping(object):
self.annotations_for_browser = []
highest_chr = 1 #This is needed in order to convert the highest chr to X/Y
for marker in results:
+ if 'Mb' in marker:
+ this_ps = marker['Mb']*1000000
+ else:
+ this_ps = marker['cM']*1000000
+
browser_marker = dict(
chr = str(marker['chr']),
rs = marker['name'],
- ps = marker['Mb']*1000000,
+ ps = this_ps,
url = "/show_trait?trait_id=" + marker['name'] + "&dataset=" + self.dataset.group.name + "Geno"
)
@@ -382,7 +360,7 @@ class RunMapping(object):
name = str(marker['name']),
chr = str(marker['chr']),
rs = marker['name'],
- pos = marker['Mb']*1000000,
+ pos = this_ps,
url = "/show_trait?trait_id=" + marker['name'] + "&dataset=" + self.dataset.group.name + "Geno"
)
else:
@@ -390,11 +368,9 @@ class RunMapping(object):
name = str(marker['name']),
chr = str(marker['chr']),
rs = marker['name'],
- pos = marker['Mb']*1000000
+ pos = this_ps
)
- #if 'p_value' in marker:
- # logger.debug("P EXISTS:", marker['p_value'])
- #else:
+
if 'lrs_value' in marker and marker['lrs_value'] > 0:
browser_marker['p_wald'] = 10**-(marker['lrs_value']/4.61)
elif 'lod_score' in marker and marker['lod_score'] > 0:
@@ -404,14 +380,22 @@ class RunMapping(object):
self.results_for_browser.append(browser_marker)
self.annotations_for_browser.append(annot_marker)
- if marker['chr'] > 0 or marker['chr'] == "X" or marker['chr'] == "X/Y":
- if marker['chr'] > highest_chr or marker['chr'] == "X" or marker['chr'] == "X/Y":
+ if str(marker['chr']) > '0' or str(marker['chr']) == "X" or str(marker['chr']) == "X/Y":
+ if str(marker['chr']) > str(highest_chr) or str(marker['chr']) == "X" or str(marker['chr']) == "X/Y":
highest_chr = marker['chr']
if ('lod_score' in marker.keys()) or ('lrs_value' in marker.keys()):
+ if 'Mb' in marker.keys():
+ marker['display_pos'] = "Chr" + str(marker['chr']) + ": " + "{:.6f}".format(marker['Mb'])
+ elif 'cM' in marker.keys():
+ marker['display_pos'] = "Chr" + str(marker['chr']) + ": " + "{:.3f}".format(marker['cM'])
+ else:
+ marker['display_pos'] = "N/A"
self.qtl_results.append(marker)
+ total_markers = len(self.qtl_results)
+
with Bench("Exporting Results"):
- export_mapping_results(self.dataset, self.this_trait, self.qtl_results, self.mapping_results_path, self.mapping_scale, self.score_type)
+ export_mapping_results(self.dataset, self.this_trait, self.qtl_results, self.mapping_results_path, self.mapping_scale, self.score_type, self.transform, self.covariates, self.n_samples)
with Bench("Trimming Markers for Figure"):
if len(self.qtl_results) > 30000:
@@ -467,18 +451,21 @@ class RunMapping(object):
#mapping_scale = self.mapping_scale,
#chromosomes = chromosome_mb_lengths,
#qtl_results = self.qtl_results,
+ categorical_vars = self.categorical_vars,
chr_lengths = chr_lengths,
num_perm = self.num_perm,
perm_results = self.perm_output,
significant = significant_for_browser,
browser_files = browser_files,
- selected_chr = this_chr
+ selected_chr = this_chr,
+ total_markers = total_markers
)
else:
self.js_data = dict(
chr_lengths = chr_lengths,
browser_files = browser_files,
- selected_chr = this_chr
+ selected_chr = this_chr,
+ total_markers = total_markers
)
def run_rqtl_plink(self):
@@ -517,44 +504,70 @@ class RunMapping(object):
trimmed_genotype_data.append(new_genotypes)
return trimmed_genotype_data
-def export_mapping_results(dataset, trait, markers, results_path, mapping_scale, score_type):
+def export_mapping_results(dataset, trait, markers, results_path, mapping_scale, score_type, transform, covariates, n_samples):
with open(results_path, "w+") as output_file:
output_file.write("Time/Date: " + datetime.datetime.now().strftime("%x / %X") + "\n")
output_file.write("Population: " + dataset.group.species.title() + " " + dataset.group.name + "\n")
output_file.write("Data Set: " + dataset.fullname + "\n")
+ output_file.write("N Samples: " + str(n_samples) + "\n")
+ if len(transform) > 0:
+ transform_text = "Transform - "
+ if transform == "qnorm":
+ transform_text += "Quantile Normalized"
+ elif transform == "log2" or transform == "log10":
+ transform_text += transform.capitalize()
+ elif transform == "sqrt":
+ transform_text += "Square Root"
+ elif transform == "zscore":
+ transform_text += "Z-Score"
+ elif transform == "invert":
+ transform_text += "Invert +/-"
+ else:
+ transform_text = ""
+ output_file.write(transform_text + "\n")
if dataset.type == "ProbeSet":
output_file.write("Gene Symbol: " + trait.symbol + "\n")
output_file.write("Location: " + str(trait.chr) + " @ " + str(trait.mb) + " Mb\n")
+ if len(covariates) > 0:
+ output_file.write("Cofactors (dataset - trait):\n")
+ for covariate in covariates.split(","):
+ trait_name = covariate.split(":")[0]
+ dataset_name = covariate.split(":")[1]
+ output_file.write(dataset_name + " - " + trait_name + "\n")
output_file.write("\n")
output_file.write("Name,Chr,")
- if score_type.lower() == "-log(p)":
- score_type = "'-log(p)"
- if mapping_scale == "physic":
+ if score_type.lower() == "-logP":
+ score_type = "-logP"
+ if 'Mb' in markers[0]:
output_file.write("Mb," + score_type)
- else:
+ if 'cM' in markers[0]:
output_file.write("Cm," + score_type)
- if "additive" in markers[0].keys():
+ if "additive" in list(markers[0].keys()):
output_file.write(",Additive")
- if "dominance" in markers[0].keys():
+ if "dominance" in list(markers[0].keys()):
output_file.write(",Dominance")
output_file.write("\n")
for i, marker in enumerate(markers):
- output_file.write(marker['name'] + "," + str(marker['chr']) + "," + str(marker['Mb']) + ",")
+ output_file.write(marker['name'] + "," + str(marker['chr']) + ",")
+ if 'Mb' in marker:
+ output_file.write(str(marker['Mb']) + ",")
+ if 'cM' in marker:
+ output_file.write(str(marker['cM']) + ",")
if "lod_score" in marker.keys():
output_file.write(str(marker['lod_score']))
else:
output_file.write(str(marker['lrs_value']))
- if "additive" in marker.keys():
+ if "additive" in list(marker.keys()):
output_file.write("," + str(marker['additive']))
- if "dominance" in marker.keys():
+ if "dominance" in list(marker.keys()):
output_file.write("," + str(marker['dominance']))
if i < (len(markers) - 1):
output_file.write("\n")
def trim_markers_for_figure(markers):
- if 'p_wald' in markers[0].keys():
+ if 'p_wald' in list(markers[0].keys()):
score_type = 'p_wald'
- elif 'lod_score' in markers[0].keys():
+ elif 'lod_score' in list(markers[0].keys()):
score_type = 'lod_score'
else:
score_type = 'lrs_value'
@@ -612,7 +625,7 @@ def trim_markers_for_figure(markers):
return filtered_markers
def trim_markers_for_table(markers):
- if 'lod_score' in markers[0].keys():
+ if 'lod_score' in list(markers[0].keys()):
sorted_markers = sorted(markers, key=lambda k: k['lod_score'], reverse=True)
else:
sorted_markers = sorted(markers, key=lambda k: k['lrs_value'], reverse=True)
@@ -664,16 +677,22 @@ def get_chr_lengths(mapping_scale, mapping_method, dataset, qtl_results):
except:
chr_as_num = 20
if chr_as_num > this_chr or i == (len(qtl_results) - 1):
- chr_lengths.append({ "chr": str(this_chr), "size": str(highest_pos)})
- this_chr = chr_as_num
- highest_pos = 0
+ if i == (len(qtl_results) - 1):
+ if mapping_method == "reaper":
+ highest_pos = float(result['cM']) * 1000000
+ else:
+ highest_pos = float(result['Mb']) * 1000000
+ chr_lengths.append({ "chr": str(this_chr), "size": str(highest_pos)})
+ else:
+ chr_lengths.append({ "chr": str(this_chr), "size": str(highest_pos)})
+ this_chr = chr_as_num
else:
if mapping_method == "reaper":
if float(result['cM']) > highest_pos:
- highest_pos = float(result['cM'])
+ highest_pos = float(result['cM']) * 1000000
else:
if float(result['Mb']) > highest_pos:
- highest_pos = float(result['Mb'])
+ highest_pos = float(result['Mb']) * 1000000
return chr_lengths
@@ -690,10 +709,10 @@ def get_genofile_samplelist(dataset):
def get_perm_strata(this_trait, sample_list, categorical_vars, used_samples):
perm_strata_strings = []
for sample in used_samples:
- if sample in sample_list.sample_attribute_values.keys():
+ if sample in list(sample_list.sample_attribute_values.keys()):
combined_string = ""
for var in categorical_vars:
- if var in sample_list.sample_attribute_values[sample].keys():
+ if var in list(sample_list.sample_attribute_values[sample].keys()):
combined_string += str(sample_list.sample_attribute_values[sample][var])
else:
combined_string += "NA"
@@ -702,8 +721,8 @@ def get_perm_strata(this_trait, sample_list, categorical_vars, used_samples):
perm_strata_strings.append(combined_string)
- d = dict([(y,x+1) for x,y in enumerate(sorted(set(perm_strata_strings)))])
+ d = dict([(y, x+1) for x, y in enumerate(sorted(set(perm_strata_strings)))])
list_to_numbers = [d[x] for x in perm_strata_strings]
perm_strata = list_to_numbers
- return perm_strata \ No newline at end of file
+ return perm_strata
diff --git a/wqflask/wqflask/model.py b/wqflask/wqflask/model.py
index 38117a8e..772f74e4 100644
--- a/wqflask/wqflask/model.py
+++ b/wqflask/wqflask/model.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division, absolute_import
-
import uuid
import datetime
@@ -18,7 +16,7 @@ from wqflask.database import Base, init_db
class User(Base):
__tablename__ = "user"
- id = Column(Unicode(36), primary_key=True, default=lambda: unicode(uuid.uuid4()))
+ id = Column(Unicode(36), primary_key=True, default=lambda: str(uuid.uuid4()))
email_address = Column(Unicode(50), unique=True, nullable=False)
# Todo: Turn on strict mode for Mysql
@@ -120,7 +118,7 @@ class User(Base):
class Login(Base):
__tablename__ = "login"
- id = Column(Unicode(36), primary_key=True, default=lambda: unicode(uuid.uuid4()))
+ id = Column(Unicode(36), primary_key=True, default=lambda: str(uuid.uuid4()))
user = Column(Unicode(36), ForeignKey('user.id'))
timestamp = Column(DateTime(), default=lambda: datetime.datetime.utcnow())
ip_address = Column(Unicode(39))
@@ -138,7 +136,7 @@ class Login(Base):
class UserCollection(Base):
__tablename__ = "user_collection"
- id = Column(Unicode(36), primary_key=True, default=lambda: unicode(uuid.uuid4()))
+ id = Column(Unicode(36), primary_key=True, default=lambda: str(uuid.uuid4()))
user = Column(Unicode(36), ForeignKey('user.id'))
# I'd prefer this to not have a length, but for the index below it needs one
@@ -168,4 +166,4 @@ def display_collapsible(number):
def user_uuid():
"""Unique cookie for a user"""
- user_uuid = request.cookies.get('user_uuid') \ No newline at end of file
+ user_uuid = request.cookies.get('user_uuid')
diff --git a/wqflask/wqflask/network_graph/network_graph.py b/wqflask/wqflask/network_graph/network_graph.py
index 152e4168..1d5316a2 100644
--- a/wqflask/wqflask/network_graph/network_graph.py
+++ b/wqflask/wqflask/network_graph/network_graph.py
@@ -1,4 +1,4 @@
-## Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
+# Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License
@@ -18,52 +18,21 @@
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import absolute_import, print_function, division
-
-import sys
-
-import string
-import cPickle
-import os
-import time
-import pp
-import math
-import collections
-import resource
-
import scipy
-
import simplejson as json
-from rpy2.robjects.packages import importr
-import rpy2.robjects as robjects
-
-from pprint import pformat as pf
-
-import reaper
-
-from utility.THCell import THCell
-from utility.TDCell import TDCell
-from base.trait import GeneralTrait
+from base.trait import create_trait
from base import data_set
-from utility import webqtlUtil, helper_functions, corr_result_helpers
+from utility import helper_functions
+from utility import corr_result_helpers
from utility.tools import GN2_BRANCH_URL
-from db import webqtlDatabaseFunction
-import utility.webqtlUtil #this is for parallel computing only.
-from wqflask.correlation import correlation_functions
-from utility.benchmark import Bench
-
-from MySQLdb import escape_string as escape
-
-from pprint import pformat as pf
-
-from flask import Flask, g
class NetworkGraph(object):
def __init__(self, start_vars):
- trait_db_list = [trait.strip() for trait in start_vars['trait_list'].split(',')]
+ trait_db_list = [trait.strip()
+ for trait in start_vars['trait_list'].split(',')]
helper_functions.get_trait_db_obs(self, trait_db_list)
@@ -91,7 +60,8 @@ class NetworkGraph(object):
this_trait_vals.append('')
self.sample_data.append(this_trait_vals)
- self.lowest_overlap = 8 #ZS: Variable set to the lowest overlapping samples in order to notify user, or 8, whichever is lower (since 8 is when we want to display warning)
+ # ZS: Variable set to the lowest overlapping samples in order to notify user, or 8, whichever is lower (since 8 is when we want to display warning)
+ self.lowest_overlap = 8
self.nodes_list = []
self.edges_list = []
@@ -103,9 +73,9 @@ class NetworkGraph(object):
this_sample_data = this_trait.data
corr_result_row = []
- is_spearman = False #ZS: To determine if it's above or below the diagonal
+ is_spearman = False # ZS: To determine if it's above or below the diagonal
- max_corr = 0 #ZS: Used to determine whether node should be hidden when correlation coefficient slider is used
+ max_corr = 0 # ZS: Used to determine whether node should be hidden when correlation coefficient slider is used
for target in self.trait_list:
target_trait = target[0]
@@ -124,20 +94,23 @@ class NetworkGraph(object):
this_trait_vals.append(sample_value)
target_vals.append(target_sample_value)
- this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(this_trait_vals, target_vals)
+ this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(
+ this_trait_vals, target_vals)
if num_overlap < self.lowest_overlap:
self.lowest_overlap = num_overlap
- if num_overlap == 0:
+ if num_overlap < 2:
continue
else:
- pearson_r, pearson_p = scipy.stats.pearsonr(this_trait_vals, target_vals)
+ pearson_r, pearson_p = scipy.stats.pearsonr(
+ this_trait_vals, target_vals)
if is_spearman == False:
sample_r, sample_p = pearson_r, pearson_p
if sample_r == 1:
continue
else:
- sample_r, sample_p = scipy.stats.spearmanr(this_trait_vals, target_vals)
+ sample_r, sample_p = scipy.stats.spearmanr(
+ this_trait_vals, target_vals)
if -1 <= sample_r < -0.7:
color = "#0000ff"
@@ -155,44 +128,44 @@ class NetworkGraph(object):
color = "#ffa500"
width = 2
elif 0.7 <= sample_r <= 1:
- color = "#ff0000"
- width = 3
+ color = "#ff0000"
+ width = 3
else:
color = "#000000"
- width = 0
+ width = 0
if abs(sample_r) > max_corr:
max_corr = abs(sample_r)
- edge_data = {'id' : str(this_trait.name) + '_to_' + str(target_trait.name),
- 'source' : str(this_trait.name) + ":" + str(this_trait.dataset.name),
- 'target' : str(target_trait.name) + ":" + str(target_trait.dataset.name),
- 'correlation' : round(sample_r, 3),
- 'abs_corr' : abs(round(sample_r, 3)),
- 'p_value' : round(sample_p, 3),
- 'overlap' : num_overlap,
- 'color' : color,
- 'width' : width }
+ edge_data = {'id': str(this_trait.name) + '_to_' + str(target_trait.name),
+ 'source': str(this_trait.name) + ":" + str(this_trait.dataset.name),
+ 'target': str(target_trait.name) + ":" + str(target_trait.dataset.name),
+ 'correlation': round(sample_r, 3),
+ 'abs_corr': abs(round(sample_r, 3)),
+ 'p_value': round(sample_p, 3),
+ 'overlap': num_overlap,
+ 'color': color,
+ 'width': width}
- edge_dict = { 'data' : edge_data }
+ edge_dict = {'data': edge_data}
self.edges_list.append(edge_dict)
if trait_db[1].type == "ProbeSet":
- node_dict = { 'data' : {'id' : str(this_trait.name) + ":" + str(this_trait.dataset.name),
- 'label' : this_trait.symbol,
- 'symbol' : this_trait.symbol,
- 'geneid' : this_trait.geneid,
- 'omim' : this_trait.omim,
- 'max_corr' : max_corr } }
+ node_dict = {'data': {'id': str(this_trait.name) + ":" + str(this_trait.dataset.name),
+ 'label': this_trait.symbol,
+ 'symbol': this_trait.symbol,
+ 'geneid': this_trait.geneid,
+ 'omim': this_trait.omim,
+ 'max_corr': max_corr}}
elif trait_db[1].type == "Publish":
- node_dict = { 'data' : {'id' : str(this_trait.name) + ":" + str(this_trait.dataset.name),
- 'label' : this_trait.name,
- 'max_corr' : max_corr } }
+ node_dict = {'data': {'id': str(this_trait.name) + ":" + str(this_trait.dataset.name),
+ 'label': this_trait.name,
+ 'max_corr': max_corr}}
else:
- node_dict = { 'data' : {'id' : str(this_trait.name) + ":" + str(this_trait.dataset.name),
- 'label' : this_trait.name,
- 'max_corr' : max_corr } }
+ node_dict = {'data': {'id': str(this_trait.name) + ":" + str(this_trait.dataset.name),
+ 'label': this_trait.name,
+ 'max_corr': max_corr}}
self.nodes_list.append(node_dict)
self.elements = json.dumps(self.nodes_list + self.edges_list)
@@ -202,13 +175,13 @@ class NetworkGraph(object):
for sample in self.all_sample_list:
groups.append(1)
- self.js_data = dict(traits = [trait.name for trait in self.traits],
- groups = groups,
- cols = range(len(self.traits)),
- rows = range(len(self.traits)),
- samples = self.all_sample_list,
- sample_data = self.sample_data,
- elements = self.elements,)
+ self.js_data = dict(traits=[trait.name for trait in self.traits],
+ groups=groups,
+ cols=list(range(len(self.traits))),
+ rows=list(range(len(self.traits))),
+ samples=self.all_sample_list,
+ sample_data=self.sample_data,
+ elements=self.elements,)
def get_trait_db_obs(self, trait_db_list):
self.trait_list = []
@@ -217,7 +190,7 @@ class NetworkGraph(object):
break
trait_name, dataset_name = trait_db.split(":")
dataset_ob = data_set.create_dataset(dataset_name)
- trait_ob = GeneralTrait(dataset=dataset_ob,
- name=trait_name,
- cellid=None)
- self.trait_list.append((trait_ob, dataset_ob)) \ No newline at end of file
+ trait_ob = create_trait(dataset=dataset_ob,
+ name=trait_name,
+ cellid=None)
+ self.trait_list.append((trait_ob, dataset_ob))
diff --git a/wqflask/wqflask/news.py b/wqflask/wqflask/news.py
index 8bc6b889..0675ec4b 100644
--- a/wqflask/wqflask/news.py
+++ b/wqflask/wqflask/news.py
@@ -1,7 +1,3 @@
-from __future__ import absolute_import, print_function, division
-import sys
-reload(sys)
-sys.setdefaultencoding('utf8')
from flask import g
class News(object):
diff --git a/wqflask/wqflask/parser.py b/wqflask/wqflask/parser.py
index 1ca5ecff..dcd328c9 100644
--- a/wqflask/wqflask/parser.py
+++ b/wqflask/wqflask/parser.py
@@ -17,8 +17,6 @@ be acceptable.]
"""
-from __future__ import print_function, division
-
import re
from pprint import pformat as pf
@@ -34,11 +32,10 @@ def parse(pstring):
pstring = re.split(r"""(?:(\w+\s*=\s*[\('"\[][^)'"]*[\)\]'"]) | # LRS=(1 2 3), cisLRS=[4 5 6], etc
(\w+\s*[=:\>\<][\w\*]+) | # wiki=bar, GO:foobar, etc
(".*?") | ('.*?') | # terms in quotes, i.e. "brain weight"
- ([\w\*]+)) # shh, brain, etc """, pstring,
+ ([\w\*\?]+)) # shh, brain, etc """, pstring,
flags=re.VERBOSE)
pstring = [item.strip() for item in pstring if item and item.strip()]
- logger.debug("pstring:", pstring)
items = []
@@ -78,22 +75,6 @@ def parse(pstring):
logger.debug("* items are:", pf(items) + "\n")
return(items)
- #def encregexp(self,str):
- # if not str:
- # return []
- # else:
- # wildcardkeyword = str.strip()
- # wildcardkeyword = string.replace(wildcardkeyword,',',' ')
- # wildcardkeyword = string.replace(wildcardkeyword,';',' ')
- # wildcardkeyword = wildcardkeyword.split()
- # NNN = len(wildcardkeyword)
- # for i in range(NNN):
- # keyword = wildcardkeyword[i]
- # keyword = string.replace(keyword,"*",".*")
- # keyword = string.replace(keyword,"?",".")
- # wildcardkeyword[i] = keyword#'[[:<:]]'+ keyword+'[[:>:]]'
- # return wildcardkeyword
-
if __name__ == '__main__':
parse("foo=[3 2 1]")
diff --git a/wqflask/wqflask/pbkdf2.py b/wqflask/wqflask/pbkdf2.py
index f7f61a09..6346df03 100644
--- a/wqflask/wqflask/pbkdf2.py
+++ b/wqflask/wqflask/pbkdf2.py
@@ -1,140 +1,20 @@
-# -*- coding: utf-8 -*-
-"""
- pbkdf2
- ~~~~~~
-
- This module implements pbkdf2 for Python. It also has some basic
- tests that ensure that it works. The implementation is straightforward
- and uses stdlib only stuff and can be easily be copy/pasted into
- your favourite application.
-
- Use this as replacement for bcrypt that does not need a c implementation
- of a modified blowfish crypto algo.
-
- Example usage:
-
- >>> pbkdf2_hex('what i want to hash', 'the random salt')
- 'fa7cc8a2b0a932f8e6ea42f9787e9d36e592e0c222ada6a9'
-
- How to use this:
-
- 1. Use a constant time string compare function to compare the stored hash
- with the one you're generating::
-
- def safe_str_cmp(a, b):
- if len(a) != len(b):
- return False
- rv = 0
- for x, y in izip(a, b):
- rv |= ord(x) ^ ord(y)
- return rv == 0
-
- 2. Use `os.urandom` to generate a proper salt of at least 8 byte.
- Use a unique salt per hashed password.
-
- 3. Store ``algorithm$salt:costfactor$hash`` in the database so that
- you can upgrade later easily to a different algorithm if you need
- one. For instance ``PBKDF2-256$thesalt:10000$deadbeef...``.
-
-
- :copyright: (c) Copyright 2011 by Armin Ronacher.
- :license: BSD, see LICENSE for more details.
-"""
-import hmac
import hashlib
-from struct import Struct
-from operator import xor
-from itertools import izip, starmap
-
-_pack_int = Struct('>I').pack
+from werkzeug.security import safe_str_cmp as ssc
-
-def pbkdf2_hex(data, salt, iterations=1000, keylen=24, hashfunc=None):
- """Like :func:`pbkdf2_bin` but returns a hex encoded string."""
- return pbkdf2_bin(data, salt, iterations, keylen, hashfunc).encode('hex')
-
-
-def pbkdf2_bin(data, salt, iterations=1000, keylen=24, hashfunc=None):
- """Returns a binary digest for the PBKDF2 hash algorithm of `data`
- with the given `salt`. It iterates `iterations` time and produces a
- key of `keylen` bytes. By default SHA-1 is used as hash function,
- a different hashlib `hashfunc` can be provided.
+# Replace this because it just wraps around Python3's internal
+# functions. Added this during migration.
+def pbkdf2_hex(data, salt, iterations=1000, keylen=24, hashfunc="sha1"):
+ """Wrapper function of python's hashlib.pbkdf2_hmac.
"""
- hashfunc = hashfunc or hashlib.sha1
- mac = hmac.new(data, None, hashfunc)
- def _pseudorandom(x, mac=mac):
- h = mac.copy()
- h.update(x)
- return map(ord, h.digest())
- buf = []
- for block in xrange(1, -(-keylen // mac.digest_size) + 1):
- rv = u = _pseudorandom(salt + _pack_int(block))
- for i in xrange(iterations - 1):
- u = _pseudorandom(''.join(map(chr, u)))
- rv = list(starmap(xor, izip(rv, u)))
- buf.extend(rv)
- return ''.join(map(chr, buf))[:keylen]
-
-
-def safe_str_cmp(a, b):
- if len(a) != len(b):
- return False
- rv = 0
- for x, y in izip(a, b):
- rv |= ord(x) ^ ord(y)
- return rv == 0
+ dk = hashlib.pbkdf2_hmac(hashfunc,
+ bytes(data, "utf-8"), # password
+ salt,
+ iterations,
+ keylen)
+ return dk.hex()
-def test():
- failed = []
- def check(data, salt, iterations, keylen, expected):
- rv = pbkdf2_hex(data, salt, iterations, keylen)
- if rv != expected:
- print 'Test failed:'
- print ' Expected: %s' % expected
- print ' Got: %s' % rv
- print ' Parameters:'
- print ' data=%s' % data
- print ' salt=%s' % salt
- print ' iterations=%d' % iterations
- print
- failed.append(1)
-
- # From RFC 6070
- check('password', 'salt', 1, 20,
- '0c60c80f961f0e71f3a9b524af6012062fe037a6')
- check('password', 'salt', 2, 20,
- 'ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957')
- check('password', 'salt', 4096, 20,
- '4b007901b765489abead49d926f721d065a429c1')
- check('passwordPASSWORDpassword', 'saltSALTsaltSALTsaltSALTsaltSALTsalt',
- 4096, 25, '3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038')
- check('pass\x00word', 'sa\x00lt', 4096, 16,
- '56fa6aa75548099dcc37d7f03425e0c3')
- # This one is from the RFC but it just takes for ages
- ##check('password', 'salt', 16777216, 20,
- ## 'eefe3d61cd4da4e4e9945b3d6ba2158c2634e984')
-
- # From Crypt-PBKDF2
- check('password', 'ATHENA.MIT.EDUraeburn', 1, 16,
- 'cdedb5281bb2f801565a1122b2563515')
- check('password', 'ATHENA.MIT.EDUraeburn', 1, 32,
- 'cdedb5281bb2f801565a1122b25635150ad1f7a04bb9f3a333ecc0e2e1f70837')
- check('password', 'ATHENA.MIT.EDUraeburn', 2, 16,
- '01dbee7f4a9e243e988b62c73cda935d')
- check('password', 'ATHENA.MIT.EDUraeburn', 2, 32,
- '01dbee7f4a9e243e988b62c73cda935da05378b93244ec8f48a99e61ad799d86')
- check('password', 'ATHENA.MIT.EDUraeburn', 1200, 32,
- '5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13')
- check('X' * 64, 'pass phrase equals block size', 1200, 32,
- '139c30c0966bc32ba55fdbf212530ac9c5ec59f1a452f5cc9ad940fea0598ed1')
- check('X' * 65, 'pass phrase exceeds block size', 1200, 32,
- '9ccad6d468770cd51b10e6a68721be611a8b4d282601db3b36be9246915ec82a')
-
- raise SystemExit(bool(failed))
-
-
-if __name__ == '__main__':
- test()
+def safe_str_cmp(a, b):
+ return ssc(a, b)
diff --git a/wqflask/wqflask/resource_manager.py b/wqflask/wqflask/resource_manager.py
new file mode 100644
index 00000000..7d51a83d
--- /dev/null
+++ b/wqflask/wqflask/resource_manager.py
@@ -0,0 +1,136 @@
+import json
+
+from flask import (Flask, g, render_template, url_for, request, make_response,
+ redirect, flash)
+
+from wqflask import app
+
+from utility.authentication_tools import check_owner_or_admin
+from utility.redis_tools import get_resource_info, get_group_info, get_groups_like_unique_column, get_user_id, get_user_by_unique_column, get_users_like_unique_column, add_access_mask, add_resource, change_resource_owner
+
+from utility.logger import getLogger
+logger = getLogger(__name__)
+
+@app.route("/resources/manage", methods=('GET', 'POST'))
+def manage_resource():
+ params = request.form if request.form else request.args
+ if 'resource_id' in request.args:
+ resource_id = request.args['resource_id']
+ admin_status = check_owner_or_admin(resource_id=resource_id)
+
+ resource_info = get_resource_info(resource_id)
+ group_masks = resource_info['group_masks']
+ group_masks_with_names = get_group_names(group_masks)
+ default_mask = resource_info['default_mask']['data']
+ owner_id = resource_info['owner_id']
+
+ owner_display_name = None
+ if owner_id != "none":
+ try: #ZS: User IDs are sometimes stored in Redis as bytes and sometimes as strings, so this is just to avoid any errors for the time being
+ owner_id = str.encode(owner_id)
+ except:
+ pass
+ owner_info = get_user_by_unique_column("user_id", owner_id)
+ if 'name' in owner_info:
+ owner_display_name = owner_info['full_name']
+ elif 'user_name' in owner_info:
+ owner_display_name = owner_info['user_name']
+ elif 'email_address' in owner_info:
+ owner_display_name = owner_info['email_address']
+
+ return render_template("admin/manage_resource.html", owner_name = owner_display_name, resource_id = resource_id, resource_info=resource_info, default_mask=default_mask, group_masks=group_masks_with_names, admin_status=admin_status)
+
+@app.route("/search_for_users", methods=('POST',))
+def search_for_user():
+ params = request.form
+ user_list = []
+ user_list += get_users_like_unique_column("full_name", params['user_name'])
+ user_list += get_users_like_unique_column("email_address", params['user_email'])
+
+ return json.dumps(user_list)
+
+@app.route("/search_for_groups", methods=('POST',))
+def search_for_groups():
+ params = request.form
+ group_list = []
+ group_list += get_groups_like_unique_column("id", params['group_id'])
+ group_list += get_groups_like_unique_column("name", params['group_name'])
+
+ user_list = []
+ user_list += get_users_like_unique_column("full_name", params['user_name'])
+ user_list += get_users_like_unique_column("email_address", params['user_email'])
+ for user in user_list:
+ group_list += get_groups_like_unique_column("admins", user['user_id'])
+ group_list += get_groups_like_unique_column("members", user['user_id'])
+
+ return json.dumps(group_list)
+
+@app.route("/resources/change_owner", methods=('POST',))
+def change_owner():
+ resource_id = request.form['resource_id']
+ if 'new_owner' in request.form:
+ admin_status = check_owner_or_admin(resource_id=resource_id)
+ if admin_status == "owner":
+ new_owner_id = request.form['new_owner']
+ change_resource_owner(resource_id, new_owner_id)
+ flash("The resource's owner has beeen changed.", "alert-info")
+ return redirect(url_for("manage_resource", resource_id=resource_id))
+ else:
+ flash("You lack the permissions to make this change.", "error")
+ return redirect(url_for("manage_resource", resource_id=resource_id))
+ else:
+ return render_template("admin/change_resource_owner.html", resource_id = resource_id)
+
+@app.route("/resources/change_default_privileges", methods=('POST',))
+def change_default_privileges():
+ resource_id = request.form['resource_id']
+ admin_status = check_owner_or_admin(resource_id=resource_id)
+ if admin_status == "owner" or admin_status == "edit-admins":
+ resource_info = get_resource_info(resource_id)
+ default_mask = resource_info['default_mask']
+ if request.form['open_to_public'] == "True":
+ default_mask['data'] = 'view'
+ else:
+ default_mask['data'] = 'no-access'
+ resource_info['default_mask'] = default_mask
+ add_resource(resource_info)
+ flash("Your changes have been saved.", "alert-info")
+ return redirect(url_for("manage_resource", resource_id=resource_id))
+ else:
+ return redirect(url_for("no_access_page"))
+
+@app.route("/resources/add_group", methods=('POST',))
+def add_group_to_resource():
+ resource_id = request.form['resource_id']
+ admin_status = check_owner_or_admin(resource_id=resource_id)
+ if admin_status == "owner" or admin_status == "edit-admins" or admin_status == "edit-access":
+ if 'selected_group' in request.form:
+ group_id = request.form['selected_group']
+ resource_info = get_resource_info(resource_id)
+ default_privileges = resource_info['default_mask']
+ return render_template("admin/set_group_privileges.html", resource_id = resource_id, group_id = group_id, default_privileges = default_privileges)
+ elif all(key in request.form for key in ('data_privilege', 'metadata_privilege', 'admin_privilege')):
+ group_id = request.form['group_id']
+ group_name = get_group_info(group_id)['name']
+ access_mask = {
+ 'data': request.form['data_privilege'],
+ 'metadata': request.form['metadata_privilege'],
+ 'admin': request.form['admin_privilege']
+ }
+ add_access_mask(resource_id, group_id, access_mask)
+ flash("Privileges have been added for group {}.".format(group_name), "alert-info")
+ return redirect(url_for("manage_resource", resource_id=resource_id))
+ else:
+ return render_template("admin/search_for_groups.html", resource_id = resource_id)
+ else:
+ return redirect(url_for("no_access_page"))
+
+def get_group_names(group_masks):
+ group_masks_with_names = {}
+ for group_id, group_mask in list(group_masks.items()):
+ this_mask = group_mask
+ group_name = get_group_info(group_id)['name']
+ this_mask['name'] = group_name
+ group_masks_with_names[group_id] = this_mask
+
+ return group_masks_with_names
diff --git a/wqflask/wqflask/search_results.py b/wqflask/wqflask/search_results.py
index 8f702d58..f23c0582 100644
--- a/wqflask/wqflask/search_results.py
+++ b/wqflask/wqflask/search_results.py
@@ -1,15 +1,7 @@
-# from __future__ import absolute_import, print_function, division
-
-
-import os
-import cPickle
import re
import uuid
from math import *
import time
-import math
-import datetime
-import collections
import re
import requests
@@ -18,18 +10,16 @@ from pprint import pformat as pf
import json
from base.data_set import create_dataset
-from base import trait
+from base.trait import create_trait
from wqflask import parser
from wqflask import do_search
-from utility import webqtlUtil,tools
from db import webqtlDatabaseFunction
-from flask import render_template, Flask, g
+from flask import Flask, g
-from utility import formatting
-from utility import hmac
+from utility import hmac, helper_functions
from utility.tools import GN2_BASE_URL
-from utility.type_checking import is_float, is_int, is_str, get_float, get_int, get_string
+from utility.type_checking import is_str
from utility.logger import getLogger
logger = getLogger(__name__ )
@@ -38,9 +28,9 @@ class SearchResultPage(object):
#maxReturn = 3000
def __init__(self, kw):
- """This class gets invoked after hitting submit on the main menu (in
-views.py).
-
+ """
+ This class gets invoked after hitting submit on the main menu (in
+ views.py).
"""
###########################################
@@ -61,7 +51,7 @@ views.py).
search = self.search_terms
self.original_search_string = self.search_terms
# check for dodgy search terms
- rx = re.compile(r'.*\W(href|http|sql|select|update)\W.*',re.IGNORECASE)
+ rx = re.compile(r'.*\W(href|http|sql|select|update)\W.*', re.IGNORECASE)
if rx.match(search):
logger.info("Regex failed search")
self.search_term_exists = False
@@ -86,10 +76,15 @@ views.py).
try:
self.search()
except:
- self.search_term_exists = False
- if self.search_term_exists:
- self.gen_search_result()
+ self.search_term_exists = False
+ self.too_many_results = False
+ if self.search_term_exists:
+ if len(self.results) > 50000:
+ self.trait_list = []
+ self.too_many_results = True
+ else:
+ self.gen_search_result()
def gen_search_result(self):
"""
@@ -113,50 +108,70 @@ views.py).
trait_dict = {}
trait_id = result[0]
- trait_dict['index'] = index + 1
- this_trait = trait.GeneralTrait(dataset=self.dataset, name=trait_id, get_qtl_info=True, get_sample_info=False)
- trait_dict['name'] = this_trait.name
- if this_trait.dataset.type == "Publish":
- trait_dict['display_name'] = this_trait.display_name
- else:
- trait_dict['display_name'] = this_trait.name
- trait_dict['dataset'] = this_trait.dataset.name
- trait_dict['hmac'] = hmac.data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name))
- if this_trait.dataset.type == "ProbeSet":
- trait_dict['symbol'] = this_trait.symbol
- trait_dict['description'] = this_trait.description_display.decode('utf-8', 'replace')
- trait_dict['location'] = this_trait.location_repr
- trait_dict['mean'] = "N/A"
- trait_dict['additive'] = "N/A"
- if this_trait.mean != "" and this_trait.mean != None:
- trait_dict['mean'] = '%.3f' % this_trait.mean
- trait_dict['lrs_score'] = this_trait.LRS_score_repr
- trait_dict['lrs_location'] = this_trait.LRS_location_repr
- if this_trait.additive != "":
- trait_dict['additive'] = '%.3f' % this_trait.additive
- elif this_trait.dataset.type == "Geno":
- trait_dict['location'] = this_trait.location_repr
- elif this_trait.dataset.type == "Publish":
- trait_dict['description'] = this_trait.description_display
- trait_dict['authors'] = this_trait.authors
- trait_dict['pubmed_id'] = "N/A"
- if this_trait.pubmed_id:
- trait_dict['pubmed_id'] = this_trait.pubmed_id
- trait_dict['pubmed_link'] = this_trait.pubmed_link
- trait_dict['pubmed_text'] = this_trait.pubmed_text
- trait_dict['mean'] = "N/A"
- if this_trait.mean != "" and this_trait.mean != None:
- trait_dict['mean'] = '%.3f' % this_trait.mean
- trait_dict['lrs_score'] = this_trait.LRS_score_repr
- trait_dict['lrs_location'] = this_trait.LRS_location_repr
- trait_dict['additive'] = "N/A"
- if this_trait.additive != "":
- trait_dict['additive'] = '%.3f' % this_trait.additive
- trait_list.append(trait_dict)
- #json_trait_list.append(trait.jsonable_table_row(this_trait, self.dataset.name, index + 1))
-
- self.trait_list = json.dumps(trait_list)
- #self.json_trait_list = json.dumps(json_trait_list)
+ this_trait = create_trait(dataset=self.dataset, name=trait_id, get_qtl_info=True, get_sample_info=False)
+ if this_trait:
+ trait_dict['index'] = index + 1
+ trait_dict['name'] = this_trait.name
+ if this_trait.dataset.type == "Publish":
+ trait_dict['display_name'] = this_trait.display_name
+ else:
+ trait_dict['display_name'] = this_trait.name
+ trait_dict['dataset'] = this_trait.dataset.name
+ trait_dict['hmac'] = hmac.data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name))
+ if this_trait.dataset.type == "ProbeSet":
+ trait_dict['symbol'] = this_trait.symbol
+ trait_dict['description'] = "N/A"
+ if this_trait.description_display:
+ trait_dict['description'] = this_trait.description_display
+ trait_dict['location'] = this_trait.location_repr
+ trait_dict['mean'] = "N/A"
+ trait_dict['additive'] = "N/A"
+ if this_trait.mean != "" and this_trait.mean != None:
+ trait_dict['mean'] = f"{this_trait.mean:.3f}"
+ try:
+ trait_dict['lod_score'] = f"{float(this_trait.LRS_score_repr) / 4.61:.1f}"
+ except:
+ trait_dict['lod_score'] = "N/A"
+ trait_dict['lrs_location'] = this_trait.LRS_location_repr
+ if this_trait.additive != "":
+ trait_dict['additive'] = f"{this_trait.additive:.3f}"
+ elif this_trait.dataset.type == "Geno":
+ trait_dict['location'] = this_trait.location_repr
+ elif this_trait.dataset.type == "Publish":
+ trait_dict['description'] = "N/A"
+ if this_trait.description_display:
+ trait_dict['description'] = this_trait.description_display
+ trait_dict['authors'] = this_trait.authors
+ trait_dict['pubmed_id'] = "N/A"
+ if this_trait.pubmed_id:
+ trait_dict['pubmed_id'] = this_trait.pubmed_id
+ trait_dict['pubmed_link'] = this_trait.pubmed_link
+ trait_dict['pubmed_text'] = this_trait.pubmed_text
+ trait_dict['mean'] = "N/A"
+ if this_trait.mean != "" and this_trait.mean != None:
+ trait_dict['mean'] = f"{this_trait.mean:.3f}"
+ try:
+ trait_dict['lod_score'] = f"{float(this_trait.LRS_score_repr) / 4.61:.1f}"
+ except:
+ trait_dict['lod_score'] = "N/A"
+ trait_dict['lrs_location'] = this_trait.LRS_location_repr
+ trait_dict['additive'] = "N/A"
+ if this_trait.additive != "":
+ trait_dict['additive'] = f"{this_trait.additive:.3f}"
+ # Convert any bytes in dict to a normal utf-8 string
+ for key in trait_dict.keys():
+ if isinstance(trait_dict[key], bytes):
+ trait_dict[key] = trait_dict[key].decode('utf-8')
+ trait_list.append(trait_dict)
+
+ self.trait_list = trait_list
+
+ if self.dataset.type == "ProbeSet":
+ self.header_data_names = ['index', 'display_name', 'symbol', 'description', 'location', 'mean', 'lrs_score', 'lrs_location', 'additive']
+ elif self.dataset.type == "Publish":
+ self.header_data_names = ['index', 'display_name', 'description', 'mean', 'authors', 'pubmed_text', 'lrs_score', 'lrs_location', 'additive']
+ elif self.dataset.type == "Geno":
+ self.header_data_names = ['index', 'display_name', 'location']
def search(self):
"""
@@ -234,7 +249,6 @@ views.py).
self.header_fields = the_search.header_fields
def get_search_ob(self, a_search):
- logger.debug("[kodak] item is:", pf(a_search))
search_term = a_search['search_term']
search_operator = a_search['separator']
search_type = {}
@@ -243,12 +257,10 @@ views.py).
search_type['key'] = a_search['key'].upper()
else:
search_type['key'] = None
- logger.debug("search_type is:", pf(search_type))
search_ob = do_search.DoSearch.get_search(search_type)
if search_ob:
search_class = getattr(do_search, search_ob)
- logger.debug("search_class is: ", pf(search_class))
the_search = search_class(search_term,
search_operator,
self.dataset,
@@ -278,7 +290,7 @@ def get_GO_symbols(a_search):
def insert_newlines(string, every=64):
""" This is because it is seemingly impossible to change the width of the description column, so I'm just manually adding line breaks """
lines = []
- for i in xrange(0, len(string), every):
+ for i in range(0, len(string), every):
lines.append(string[i:i+every])
return '\n'.join(lines)
diff --git a/wqflask/wqflask/send_mail.py b/wqflask/wqflask/send_mail.py
index bf5d0dd8..86e8a558 100644
--- a/wqflask/wqflask/send_mail.py
+++ b/wqflask/wqflask/send_mail.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, division, print_function
-
import datetime
import time
diff --git a/wqflask/wqflask/server_side.py b/wqflask/wqflask/server_side.py
new file mode 100644
index 00000000..5f764767
--- /dev/null
+++ b/wqflask/wqflask/server_side.py
@@ -0,0 +1,93 @@
+# handles server side table processing
+
+
+
+class ServerSideTable(object):
+ """
+ This class is used to do server-side processing
+ on the DataTables table such as paginating, sorting,
+ filtering(not implemented) etc. This takes the load off
+ the client-side and reduces the size of data interchanged.
+
+ Usage:
+ ServerSideTable(table_data, request_values)
+ where,
+ `table_data` must have data members
+ `rows_count` as number of rows in the table,
+ `table_rows` as data rows of the table,
+ `header_data_names` as headers names of the table.
+
+ `request_values` must have request arguments values
+ including the DataTables server-side processing arguments.
+
+ Have a look at snp_browser_table() function in
+ wqflask/wqflask/views.py for reference use.
+ """
+
+ def __init__(self, rows_count, table_rows, header_data_names, request_values):
+ self.request_values = request_values
+ self.sEcho = self.request_values['sEcho']
+
+ self.rows_count = rows_count
+ self.table_rows = table_rows
+ self.header_data_names = header_data_names
+
+ self.sort_rows()
+ self.paginate_rows()
+
+ def sort_rows(self):
+ """
+ Sorts the rows taking in to account the column (or columns) that the
+ user has selected.
+ """
+ def is_reverse(str_direction):
+ """ Maps the 'desc' and 'asc' words to True or False. """
+ return True if str_direction == 'desc' else False
+
+ if (self.request_values['iSortCol_0'] != "") and (int(self.request_values['iSortingCols']) > 0):
+ for i in range(0, int(self.request_values['iSortingCols'])):
+ column_number = int(self.request_values['iSortCol_' + str(i)])
+ column_name = self.header_data_names[column_number - 1]
+ sort_direction = self.request_values['sSortDir_' + str(i)]
+ self.table_rows = sorted(self.table_rows,
+ key=lambda x: x[column_name],
+ reverse=is_reverse(sort_direction))
+
+ def paginate_rows(self):
+ """
+ Selects a subset of the filtered and sorted data based on if the table
+ has pagination, the current page and the size of each page.
+ """
+ def requires_pagination():
+ """ Check if the table is going to be paginated """
+ if self.request_values['iDisplayStart'] != "":
+ if int(self.request_values['iDisplayLength']) != -1:
+ return True
+ return False
+
+ if not requires_pagination():
+ return
+
+ start = int(self.request_values['iDisplayStart'])
+ length = int(self.request_values['iDisplayLength'])
+
+ # if search returns only one page
+ if len(self.table_rows) <= length:
+ # display only one page
+ self.table_rows = self.table_rows[start:]
+ else:
+ limit = -len(self.table_rows) + start + length
+ if limit < 0:
+ # display pagination
+ self.table_rows = self.table_rows[start:limit]
+ else:
+ # display last page of pagination
+ self.table_rows = self.table_rows[start:]
+
+ def get_page(self):
+ output = {}
+ output['sEcho'] = str(self.sEcho)
+ output['iTotalRecords'] = str(float('Nan'))
+ output['iTotalDisplayRecords'] = str(self.rows_count)
+ output['data'] = self.table_rows
+ return output
diff --git a/wqflask/wqflask/show_trait/SampleList.py b/wqflask/wqflask/show_trait/SampleList.py
index ad78ebcc..857e4456 100644
--- a/wqflask/wqflask/show_trait/SampleList.py
+++ b/wqflask/wqflask/show_trait/SampleList.py
@@ -1,76 +1,96 @@
-from __future__ import absolute_import, print_function, division
-
-from flask import Flask, g
-
-from base import webqtlCaseData
-from utility import webqtlUtil, Plot, Bunch
-from base.trait import GeneralTrait
+import re
+import itertools
-import numpy as np
-from scipy import stats
+from flask import g
+from base import webqtlCaseData, webqtlConfig
from pprint import pformat as pf
-import simplejson as json
-
-import itertools
-
-import utility.logger
-logger = utility.logger.getLogger(__name__ )
+from utility import Plot
+from utility import Bunch
class SampleList(object):
def __init__(self,
dataset,
sample_names,
this_trait,
- sample_group_type = "primary",
- header = "Samples"):
+ sample_group_type="primary",
+ header="Samples"):
self.dataset = dataset
self.this_trait = this_trait
self.sample_group_type = sample_group_type # primary or other
self.header = header
- self.sample_list = [] # The actual list
+ self.sample_list = [] # The actual list
self.sample_attribute_values = {}
self.get_attributes()
- #self.sample_qnorm = get_transform_vals(self.dataset, this_trait)
-
if self.this_trait and self.dataset:
self.get_extra_attribute_values()
for counter, sample_name in enumerate(sample_names, 1):
sample_name = sample_name.replace("_2nd_", "")
- if type(self.this_trait) is list: #ZS: self.this_trait will be a list if it is a Temp trait
- if counter <= len(self.this_trait) and str(self.this_trait[counter-1]).upper() != 'X':
- sample = webqtlCaseData.webqtlCaseData(name=sample_name, value=float(self.this_trait[counter-1]))
- else:
- sample = webqtlCaseData.webqtlCaseData(name=sample_name)
+ # ZS: self.this_trait will be a list if it is a Temp trait
+ if isinstance(self.this_trait, list):
+ sample = webqtlCaseData.webqtlCaseData(name=sample_name)
+ if counter <= len(self.this_trait):
+ if isinstance(self.this_trait[counter-1], (bytes, bytearray)):
+ if (self.this_trait[counter-1].decode("utf-8").lower() != 'x'):
+ sample = webqtlCaseData.webqtlCaseData(
+ name=sample_name,
+ value=float(self.this_trait[counter-1]))
+ else:
+ if (self.this_trait[counter-1].lower() != 'x'):
+ sample = webqtlCaseData.webqtlCaseData(
+ name=sample_name,
+ value=float(self.this_trait[counter-1]))
else:
- #ZS - If there's no value for the sample/strain, create the sample object (so samples with no value are still displayed in the table)
+ # ZS - If there's no value for the sample/strain,
+ # create the sample object (so samples with no value
+ # are still displayed in the table)
try:
sample = self.this_trait.data[sample_name]
except KeyError:
- #logger.debug("No sample %s, let's create it now" % sample_name)
sample = webqtlCaseData.webqtlCaseData(name=sample_name)
sample.extra_info = {}
- if self.dataset.group.name == 'AXBXA' and sample_name in ('AXB18/19/20','AXB13/14','BXA8/17'):
+ if (self.dataset.group.name == 'AXBXA' and
+ sample_name in ('AXB18/19/20', 'AXB13/14', 'BXA8/17')):
sample.extra_info['url'] = "/mouseCross.html#AXB/BXA"
sample.extra_info['css_class'] = "fs12"
sample.this_id = str(counter)
- #### For extra attribute columns; currently only used by several datasets - Zach
+ # ZS: For extra attribute columns; currently only used by
+ # several datasets
if self.sample_attribute_values:
- sample.extra_attributes = self.sample_attribute_values.get(sample_name, {})
- #logger.debug("sample.extra_attributes is", pf(sample.extra_attributes))
+ sample.extra_attributes = self.sample_attribute_values.get(
+ sample_name, {})
+
+ #ZS: Add a url so RRID case attributes can be displayed as links
+ if 'rrid' in sample.extra_attributes:
+ if self.dataset.group.species == "mouse":
+ if len(sample.extra_attributes['rrid'].split(":")) > 1:
+ the_rrid = sample.extra_attributes['rrid'].split(":")[1]
+ sample.extra_attributes['rrid'] = [sample.extra_attributes['rrid']]
+ sample.extra_attributes['rrid'].append(webqtlConfig.RRID_MOUSE_URL % the_rrid)
+ elif self.dataset.group.species == "rat":
+ if len(str(sample.extra_attributes['rrid'])):
+ the_rrid = sample.extra_attributes['rrid'].split("_")[1]
+ sample.extra_attributes['rrid'] = [sample.extra_attributes['rrid']]
+ sample.extra_attributes['rrid'].append(webqtlConfig.RRID_RAT_URL % the_rrid)
self.sample_list.append(sample)
- #logger.debug("attribute vals are", pf(self.sample_attribute_values))
+ self.se_exists = any(sample.variance for sample in self.sample_list)
+ self.num_cases_exists = any(
+ sample.num_cases for sample in self.sample_list)
+
+ first_attr_col = self.get_first_attr_col()
+ for sample in self.sample_list:
+ sample.first_attr_col = first_attr_col
self.do_outliers()
@@ -78,7 +98,8 @@ class SampleList(object):
return "<SampleList> --> %s" % (pf(self.__dict__))
def do_outliers(self):
- values = [sample.value for sample in self.sample_list if sample.value != None]
+ values = [sample.value for sample in self.sample_list
+ if sample.value is not None]
upper_bound, lower_bound = Plot.find_outliers(values)
for sample in self.sample_list:
@@ -99,17 +120,16 @@ class SampleList(object):
FROM CaseAttribute, CaseAttributeXRefNew
WHERE CaseAttributeXRefNew.CaseAttributeId = CaseAttribute.Id
AND CaseAttributeXRefNew.InbredSetId = %s
- ORDER BY CaseAttribute.Name''', (str(self.dataset.group.id),))
+ ORDER BY lower(CaseAttribute.Name)''', (str(self.dataset.group.id),))
self.attributes = {}
for attr, values in itertools.groupby(results.fetchall(), lambda row: (row.Id, row.Name)):
key, name = attr
- #logger.debug("radish: %s - %s" % (key, name))
self.attributes[key] = Bunch()
self.attributes[key].name = name
- self.attributes[key].distinct_values = [item.Value for item in values]
- self.attributes[key].distinct_values.sort(key=natural_sort_key)
-
+ self.attributes[key].distinct_values = [
+ item.Value for item in values]
+ self.attributes[key].distinct_values=natural_sort(self.attributes[key].distinct_values)
all_numbers = True
for value in self.attributes[key].distinct_values:
try:
@@ -141,68 +161,34 @@ class SampleList(object):
for item in items:
attribute_value = item.Value
- #ZS: If it's an int, turn it into one for sorting
- #(for example, 101 would be lower than 80 if they're strings instead of ints)
+ # ZS: If it's an int, turn it into one for sorting
+ # (for example, 101 would be lower than 80 if
+ # they're strings instead of ints)
try:
attribute_value = int(attribute_value)
except ValueError:
pass
- attribute_values[self.attributes[item.Id].name] = attribute_value
+ attribute_values[self.attributes[item.Id].name.lower()] = attribute_value
self.sample_attribute_values[sample_name] = attribute_values
- def se_exists(self):
- """Returns true if SE values exist for any samples, otherwise false"""
-
- return any(sample.variance for sample in self.sample_list)
-
-# def get_transform_vals(dataset, trait):
-# es = get_elasticsearch_connection(for_user=False)
-
-# logger.info("DATASET NAME:", dataset.name)
-
-# query = '{"bool": {"must": [{"match": {"name": "%s"}}, {"match": {"dataset": "%s"}}]}}' % (trait.name, dataset.name)
-
-# es_body = {
-# "query": {
-# "bool": {
-# "must": [
-# {
-# "match": {
-# "name": "%s" % (trait.name)
-# }
-# },
-# {
-# "match": {
-# "dataset": "%s" % (dataset.name)
-# }
-# }
-# ]
-# }
-# }
-# }
-
-# response = es.search( index = "traits", doc_type = "trait", body = es_body )
-# logger.info("THE RESPONSE:", response)
-# results = response['hits']['hits']
-
-# if len(results) > 0:
-# samples = results[0]['_source']['samples']
-
-# sample_dict = {}
-# for sample in samples:
-# sample_dict[sample['name']] = sample['qnorm']
-
-# #logger.info("SAMPLE DICT:", sample_dict)
-# return sample_dict
-# else:
-# return None
-
-def natural_sort_key(x):
- """Get expected results when using as a key for sort - ints or strings are sorted properly"""
-
- try:
- x = int(x)
- except ValueError:
- pass
- return x
+ def get_first_attr_col(self):
+ first_attr_col = 4
+ if self.se_exists:
+ first_attr_col += 2
+ if self.num_cases_exists:
+ first_attr_col += 1
+
+ return first_attr_col
+
+
+def natural_sort(a_list, key=lambda s: s):
+ """
+ Sort the list into natural alphanumeric order.
+ """
+ def get_alphanum_key_func(key):
+ def convert(text): return int(text) if text.isdigit() else text
+ return lambda s: [convert(c) for c in re.split('([0-9]+)', key(s))]
+ sort_key = get_alphanum_key_func(key)
+ sorted_list = sorted(a_list, key=sort_key)
+ return sorted_list
diff --git a/wqflask/wqflask/show_trait/export_trait_data.py b/wqflask/wqflask/show_trait/export_trait_data.py
index 107f87c6..379b746c 100644
--- a/wqflask/wqflask/show_trait/export_trait_data.py
+++ b/wqflask/wqflask/show_trait/export_trait_data.py
@@ -1,10 +1,8 @@
-from __future__ import print_function, division
-
import simplejson as json
from pprint import pformat as pf
-
-from base.trait import GeneralTrait
+from functools import cmp_to_key
+from base.trait import create_trait
from base import data_set
def export_sample_table(targs):
@@ -16,17 +14,23 @@ def export_sample_table(targs):
final_sample_data = meta_data
+ column_headers = ["Name", "Value"]
+ if any(sample["se"] for sample in sample_data['primary_samples']):
+ column_headers.append("SE")
+ if any(sample["num_cases"] for sample in sample_data['primary_samples']):
+ column_headers.append("N")
+
+ final_sample_data.append(column_headers)
for sample_group in ['primary_samples', 'other_samples']:
for row in sample_data[sample_group]:
sorted_row = dict_to_sorted_list(row)
- print("sorted_row is:", pf(sorted_row))
final_sample_data.append(sorted_row)
return trait_name, final_sample_data
def get_export_metadata(trait_id, dataset_name):
dataset = data_set.create_dataset(dataset_name)
- this_trait = GeneralTrait(dataset=dataset,
+ this_trait = create_trait(dataset=dataset,
name=trait_id,
cellid=None,
get_qtl_info=False)
@@ -37,18 +41,26 @@ def get_export_metadata(trait_id, dataset_name):
metadata.append(["Phenotype URL: " + "http://genenetwork.org/show_trait?trait_id=" + trait_id + "&dataset=" + dataset_name])
metadata.append(["Group: " + dataset.group.name])
metadata.append(["Phenotype: " + this_trait.description_display.replace(",", "\",\"")])
- metadata.append(["Authors: " + this_trait.authors])
- metadata.append(["Title: " + this_trait.title])
- metadata.append(["Journal: " + this_trait.journal])
+ metadata.append(["Authors: " + (this_trait.authors if this_trait.authors else "N/A")])
+ metadata.append(["Title: " + (this_trait.title if this_trait.title else "N/A")])
+ metadata.append(["Journal: " + (this_trait.journal if this_trait.journal else "N/A")])
metadata.append(["Dataset Link: http://gn1.genenetwork.org/webqtl/main.py?FormID=sharinginfo&InfoPageName=" + dataset.name])
- metadata.append([])
+ else:
+ metadata.append(["Record ID: " + trait_id])
+ metadata.append(["Trait URL: " + "http://genenetwork.org/show_trait?trait_id=" + trait_id + "&dataset=" + dataset_name])
+ if this_trait.symbol:
+ metadata.append(["Symbol: " + this_trait.symbol])
+ metadata.append(["Dataset: " + dataset.name])
+ metadata.append(["Group: " + dataset.group.name])
+
+ metadata.append([])
return metadata
def dict_to_sorted_list(dictionary):
- sorted_list = [item for item in dictionary.iteritems()]
- sorted_list = sorted(sorted_list, cmp=cmp_samples)
+ sorted_list = [item for item in list(dictionary.items())]
+ sorted_list = sorted(sorted_list, key=cmp_to_key(cmp_samples))
sorted_values = [item[1] for item in sorted_list]
return sorted_values
@@ -71,4 +83,4 @@ def cmp_samples(a, b):
else:
return 1
else:
- return -1 \ No newline at end of file
+ return -1
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index 29b2f77e..878c41c0 100644
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -1,18 +1,13 @@
-from __future__ import absolute_import, print_function, division
-
import string
import os
import datetime
-import cPickle
+import pickle
import uuid
import requests
import json as json
from collections import OrderedDict
-import redis
-Redis = redis.StrictRedis()
-
import numpy as np
import scipy.stats as ss
@@ -21,11 +16,15 @@ from flask import Flask, g
from base import webqtlConfig
from base import webqtlCaseData
from wqflask.show_trait.SampleList import SampleList
-from utility import webqtlUtil, Plot, Bunch, helper_functions
-from utility.tools import locate_ignore_error
-from base.trait import GeneralTrait
+from base.trait import create_trait
from base import data_set
from db import webqtlDatabaseFunction
+from utility import webqtlUtil, Plot, Bunch, helper_functions
+from utility.authentication_tools import check_owner_or_admin
+from utility.tools import locate_ignore_error
+from utility.redis_tools import get_redis_conn, get_resource_id
+Redis = get_redis_conn()
+ONE_YEAR = 60 * 60 * 24 * 365
from pprint import pformat as pf
@@ -42,38 +41,43 @@ logger = getLogger(__name__ )
class ShowTrait(object):
def __init__(self, kw):
- logger.debug("in ShowTrait, kw are:", kw)
-
if 'trait_id' in kw and kw['dataset'] != "Temp":
self.temp_trait = False
self.trait_id = kw['trait_id']
helper_functions.get_species_dataset_trait(self, kw)
+ self.resource_id = get_resource_id(self.dataset, self.trait_id)
+ self.admin_status = check_owner_or_admin(resource_id=self.resource_id)
elif 'group' in kw:
self.temp_trait = True
self.trait_id = "Temp_"+kw['species']+ "_" + kw['group'] + "_" + datetime.datetime.now().strftime("%m%d%H%M%S")
self.temp_species = kw['species']
self.temp_group = kw['group']
self.dataset = data_set.create_dataset(dataset_name = "Temp", dataset_type = "Temp", group_name = self.temp_group)
+
# Put values in Redis so they can be looked up later if added to a collection
- Redis.set(self.trait_id, kw['trait_paste'])
+ Redis.set(self.trait_id, kw['trait_paste'], ex=ONE_YEAR)
self.trait_vals = kw['trait_paste'].split()
- self.this_trait = GeneralTrait(dataset=self.dataset,
+ self.this_trait = create_trait(dataset=self.dataset,
name=self.trait_id,
cellid=None)
+
+ self.admin_status = check_owner_or_admin(dataset=self.dataset, trait_id=self.trait_id)
else:
self.temp_trait = True
self.trait_id = kw['trait_id']
self.temp_species = self.trait_id.split("_")[1]
self.temp_group = self.trait_id.split("_")[2]
self.dataset = data_set.create_dataset(dataset_name = "Temp", dataset_type = "Temp", group_name = self.temp_group)
- self.this_trait = GeneralTrait(dataset=self.dataset,
+ self.this_trait = create_trait(dataset=self.dataset,
name=self.trait_id,
cellid=None)
+
self.trait_vals = Redis.get(self.trait_id).split()
+ self.admin_status = check_owner_or_admin(dataset=self.dataset, trait_id=self.trait_id)
#ZS: Get verify/rna-seq link URLs
try:
- blatsequence = self.this_trait.sequence
+ blatsequence = self.this_trait.blatseq
if not blatsequence:
#XZ, 06/03/2009: ProbeSet name is not unique among platforms. We should use ProbeSet Id instead.
query1 = """SELECT Probe.Sequence, Probe.Name
@@ -94,6 +98,7 @@ class ShowTrait(object):
#--------Hongqiang add this part in order to not only blat ProbeSet, but also blat Probe
blatsequence = '%3E' + self.this_trait.name + '%0A' + blatsequence + '%0A'
+
#XZ, 06/03/2009: ProbeSet name is not unique among platforms. We should use ProbeSet Id instead.
query2 = """SELECT Probe.Sequence, Probe.Name
FROM Probe, ProbeSet, ProbeSetFreeze, ProbeSetXRef
@@ -106,7 +111,7 @@ class ShowTrait(object):
seqs = g.db.execute(query2).fetchall()
for seqt in seqs:
if int(seqt[1][-1]) %2 == 1:
- blatsequence += '%3EProbe_' + string.strip(seqt[1]) + '%0A' + string.strip(seqt[0]) + '%0A'
+ blatsequence += '%3EProbe_' + seqt[1].strip() + '%0A' + seqt[0].strip() + '%0A'
if self.dataset.group.species == "rat":
self.UCSC_BLAT_URL = webqtlConfig.UCSC_BLAT % ('rat', 'rn6', blatsequence)
@@ -144,6 +149,7 @@ class ShowTrait(object):
#self.nearest_marker1 = ""
#self.nearest_marker2 = ""
+
self.make_sample_lists()
self.qnorm_vals = quantile_normalize_vals(self.sample_groups)
@@ -181,8 +187,6 @@ class ShowTrait(object):
self.has_num_cases = has_num_cases(self.this_trait)
- self.stats_table_width, self.trait_table_width = get_table_widths(self.sample_groups, self.has_num_cases)
-
#ZS: Needed to know whether to display bar chart + get max sample name length in order to set table column width
self.num_values = 0
self.binary = "true" #ZS: So it knows whether to display the Binary R/qtl mapping method, which doesn't work unless all values are 0 or 1
@@ -201,6 +205,8 @@ class ShowTrait(object):
sample_column_width = max_samplename_width * 8
+ self.stats_table_width, self.trait_table_width = get_table_widths(self.sample_groups, sample_column_width, self.has_num_cases)
+
if self.num_values >= 5000:
self.maf = 0.01
else:
@@ -223,8 +229,8 @@ class ShowTrait(object):
hddn = OrderedDict()
if self.dataset.group.allsamples:
- hddn['allsamples'] = string.join(self.dataset.group.allsamples, ' ')
- hddn['primary_samples'] = string.join(self.primary_sample_names, ',')
+ hddn['allsamples'] = ','.join(self.dataset.group.allsamples)
+ hddn['primary_samples'] = ','.join(self.primary_sample_names)
hddn['trait_id'] = self.trait_id
hddn['trait_display_name'] = self.this_trait.display_name
hddn['dataset'] = self.dataset.name
@@ -253,7 +259,7 @@ class ShowTrait(object):
hddn['export_data'] = ""
hddn['export_format'] = "excel"
if len(self.scales_in_geno) < 2:
- hddn['mapping_scale'] = self.scales_in_geno[self.scales_in_geno.keys()[0]][0]
+ hddn['mapping_scale'] = self.scales_in_geno[list(self.scales_in_geno.keys())[0]][0][0]
# We'll need access to this_trait and hddn in the Jinja2 Template, so we put it inside self
self.hddn = hddn
@@ -263,11 +269,14 @@ class ShowTrait(object):
short_description = short_description,
unit_type = trait_units,
dataset_type = self.dataset.type,
+ species = self.dataset.group.species,
scales_in_geno = self.scales_in_geno,
data_scale = self.dataset.data_scale,
sample_group_types = self.sample_group_types,
sample_lists = sample_lists,
- attribute_names = self.sample_groups[0].attributes,
+ se_exists = self.sample_groups[0].se_exists,
+ has_num_cases = self.has_num_cases,
+ attributes = self.sample_groups[0].attributes,
categorical_vars = ",".join(categorical_var_list),
num_values = self.num_values,
qnorm_values = self.qnorm_vals,
@@ -364,8 +373,8 @@ class ShowTrait(object):
this_group = self.dataset.group.name
# We're checking a string here!
- assert isinstance(this_group, basestring), "We need a string type thing here"
- if this_group[:3] == 'BXD' and this_group != "BXD-Harvested":
+ assert isinstance(this_group, str), "We need a string type thing here"
+ if this_group[:3] == 'BXD' and this_group != "BXD-Longevity" and this_group != "BXD-AE":
this_group = 'BXD'
if this_group:
@@ -387,6 +396,7 @@ class ShowTrait(object):
return_results_menu_selected = return_results_menu_selected,)
def make_sample_lists(self):
+
all_samples_ordered = self.dataset.group.all_samples_ordered()
parent_f1_samples = []
@@ -395,13 +405,19 @@ class ShowTrait(object):
primary_sample_names = list(all_samples_ordered)
+
if not self.temp_trait:
other_sample_names = []
- for sample in self.this_trait.data.keys():
- if (self.this_trait.data[sample].name2 in primary_sample_names) and (self.this_trait.data[sample].name not in primary_sample_names):
- primary_sample_names.append(self.this_trait.data[sample].name)
- primary_sample_names.remove(self.this_trait.data[sample].name2)
- elif sample not in all_samples_ordered:
+
+ for sample in list(self.this_trait.data.keys()):
+ if (self.this_trait.data[sample].name2 != self.this_trait.data[sample].name):
+ if ((self.this_trait.data[sample].name2 in primary_sample_names) and
+ (self.this_trait.data[sample].name not in primary_sample_names)):
+ primary_sample_names.append(self.this_trait.data[sample].name)
+ primary_sample_names.remove(self.this_trait.data[sample].name2)
+
+ all_samples_set = set(all_samples_ordered)
+ if sample not in all_samples_set:
all_samples_ordered.append(sample)
other_sample_names.append(sample)
@@ -414,6 +430,7 @@ class ShowTrait(object):
primary_header = "%s Only" % (self.dataset.group.name)
else:
primary_header = "Samples"
+
primary_samples = SampleList(dataset = self.dataset,
sample_names=primary_sample_names,
this_trait=self.this_trait,
@@ -446,6 +463,7 @@ class ShowTrait(object):
self.primary_sample_names = primary_sample_names
self.dataset.group.allsamples = all_samples_ordered
+
def quantile_normalize_vals(sample_groups):
def normf(trait_vals):
ranked_vals = ss.rankdata(trait_vals)
@@ -484,6 +502,7 @@ def quantile_normalize_vals(sample_groups):
return qnorm_by_group
+
def get_z_scores(sample_groups):
zscore_by_group = []
for sample_type in sample_groups:
@@ -508,11 +527,10 @@ def get_z_scores(sample_groups):
return zscore_by_group
+
def get_nearest_marker(this_trait, this_db):
this_chr = this_trait.locus_chr
- logger.debug("this_chr:", this_chr)
this_mb = this_trait.locus_mb
- logger.debug("this_mb:", this_mb)
#One option is to take flanking markers, another is to take the two (or one) closest
query = """SELECT Geno.Name
FROM Geno, GenoXRef, GenoFreeze
@@ -523,7 +541,6 @@ def get_nearest_marker(this_trait, this_db):
ORDER BY ABS( Geno.Mb - {}) LIMIT 1""".format(this_chr, this_db.group.name+"Geno", this_mb)
logger.sql(query)
result = g.db.execute(query).fetchall()
- logger.debug("result:", result)
if result == []:
return ""
@@ -531,32 +548,35 @@ def get_nearest_marker(this_trait, this_db):
else:
return result[0][0]
-def get_table_widths(sample_groups, has_num_cases=False):
+
+def get_table_widths(sample_groups, sample_column_width, has_num_cases=False):
stats_table_width = 250
if len(sample_groups) > 1:
stats_table_width = 450
- trait_table_width = 380
- if sample_groups[0].se_exists():
- trait_table_width += 70
+ trait_table_width = 300 + sample_column_width
+ if sample_groups[0].se_exists:
+ trait_table_width += 80
if has_num_cases:
- trait_table_width += 30
- trait_table_width += len(sample_groups[0].attributes)*70
+ trait_table_width += 80
+ trait_table_width += len(sample_groups[0].attributes)*88
trait_table_width = str(trait_table_width) + "px"
return stats_table_width, trait_table_width
+
def has_num_cases(this_trait):
has_n = False
if this_trait.dataset.type != "ProbeSet" and this_trait.dataset.type != "Geno":
- for name, sample in this_trait.data.iteritems():
+ for name, sample in list(this_trait.data.items()):
if sample.num_cases:
has_n = True
break
return has_n
+
def get_trait_units(this_trait):
unit_type = ""
inside_brackets = False
@@ -576,6 +596,7 @@ def get_trait_units(this_trait):
return unit_type
+
def check_if_attr_exists(the_trait, id_type):
if hasattr(the_trait, id_type):
if getattr(the_trait, id_type) == None or getattr(the_trait, id_type) == "":
@@ -585,6 +606,7 @@ def check_if_attr_exists(the_trait, id_type):
else:
return False
+
def get_ncbi_summary(this_trait):
if check_if_attr_exists(this_trait, 'geneid'):
#ZS: Need to switch this try/except to something that checks the output later
@@ -597,13 +619,14 @@ def get_ncbi_summary(this_trait):
else:
return None
+
def get_categorical_variables(this_trait, sample_list):
categorical_var_list = []
if len(sample_list.attributes) > 0:
for attribute in sample_list.attributes:
attribute_vals = []
- for sample_name in this_trait.data.keys():
+ for sample_name in list(this_trait.data.keys()):
if sample_list.attributes[attribute].name in this_trait.data[sample_name].extra_attributes:
attribute_vals.append(this_trait.data[sample_name].extra_attributes[sample_list.attributes[attribute].name])
else:
@@ -615,9 +638,10 @@ def get_categorical_variables(this_trait, sample_list):
return categorical_var_list
+
def get_genotype_scales(genofiles):
geno_scales = {}
- if type(genofiles) is list:
+ if isinstance(genofiles, list):
for the_file in genofiles:
file_location = the_file['location']
geno_scales[file_location] = get_scales_from_genofile(file_location)
@@ -626,6 +650,7 @@ def get_genotype_scales(genofiles):
return geno_scales
+
def get_scales_from_genofile(file_location):
geno_path = locate_ignore_error(file_location, 'genotype')
@@ -678,6 +703,7 @@ def get_scales_from_genofile(file_location):
if i > first_marker_line + 10:
break
+
#ZS: This assumes that both won't be all zero, since if that's the case mapping shouldn't be an option to begin with
if mb_all_zero:
return [["morgan", "cM"]]
diff --git a/wqflask/wqflask/snp_browser/snp_browser.py b/wqflask/wqflask/snp_browser/snp_browser.py
index 73ab8798..a52399a2 100644
--- a/wqflask/wqflask/snp_browser/snp_browser.py
+++ b/wqflask/wqflask/snp_browser/snp_browser.py
@@ -1,12 +1,10 @@
-from __future__ import absolute_import, print_function, division
-
from flask import Flask, g, url_for
import string
-import piddle as pid
+from PIL import (Image)
from utility.logger import getLogger
-logger = getLogger(__name__ )
+logger = getLogger(__name__)
from base import species
from base import webqtlConfig
@@ -16,21 +14,21 @@ class SnpBrowser(object):
def __init__(self, start_vars):
self.strain_lists = get_browser_sample_lists()
self.initialize_parameters(start_vars)
- self.limit_number = 10000
if self.first_run == "false":
self.filtered_results = self.get_browser_results()
+ self.table_rows = self.get_table_rows()
+ self.rows_count = len(self.table_rows)
- if len(self.filtered_results) <= self.limit_number:
- self.table_rows = self.get_table_rows()
- else:
- self.empty_columns = None
+ del self.filtered_results
+
+ if 'sEcho' not in start_vars:
self.table_rows = []
if self.limit_strains == "true":
- self.header_fields, self.empty_field_count = get_header_list(variant_type = self.variant_type, strains = self.chosen_strains, empty_columns = self.empty_columns)
+ self.header_fields, self.empty_field_count, self.header_data_names = get_header_list(variant_type = self.variant_type, strains = self.chosen_strains, empty_columns = self.empty_columns)
else:
- self.header_fields, self.empty_field_count = get_header_list(variant_type = self.variant_type, strains = self.strain_lists, species = self.species_name, empty_columns = self.empty_columns)
+ self.header_fields, self.empty_field_count, self.header_data_names = get_header_list(variant_type = self.variant_type, strains = self.strain_lists, species = self.species_name, empty_columns = self.empty_columns)
def initialize_parameters(self, start_vars):
if 'first_run' in start_vars:
@@ -370,19 +368,19 @@ class SnpBrowser(object):
#ZS: list of booleans representing which columns are entirely empty, so they aren't displayed on the page; only including ones that are sometimes empty (since there's always a location, etc)
self.empty_columns = {
- "snp_source": "false",
- "conservation_score": "false",
- "gene_name": "false",
- "transcript": "false",
- "exon": "false",
- "domain_2": "false",
- "function": "false",
- "function_details": "false"
- }
+ "snp_source": "false",
+ "conservation_score": "false",
+ "gene_name": "false",
+ "transcript": "false",
+ "exon": "false",
+ "domain_2": "false",
+ "function": "false",
+ "function_details": "false"
+ }
the_rows = []
for i, result in enumerate(self.filtered_results):
- this_row = []
+ this_row = {}
if self.variant_type == "SNP":
snp_name, rs, chr, mb, alleles, gene, transcript, exon, domain, function, function_details, snp_source, conservation_score, snp_id = result[:14]
allele_value_list = result[14:]
@@ -458,8 +456,8 @@ class SnpBrowser(object):
function_list = []
if function_details:
- function_list = string.split(string.strip(function_details), ",")
- function_list = map(string.strip, function_list)
+ function_list = function_details.strip().split(",")
+ function_list = [item.strip() for item in function_list]
function_list[0] = function_list[0].title()
function_details = ", ".join(item for item in function_list)
function_details = function_details.replace("_", " ")
@@ -477,7 +475,7 @@ class SnpBrowser(object):
the_bases = []
for j, item in enumerate(allele_value_list):
- if item and isinstance(item, basestring):
+ if item and isinstance(item, str):
this_base = [str(item), base_color_dict[item]]
else:
this_base = ""
@@ -522,13 +520,10 @@ class SnpBrowser(object):
"source_name": str(source_name)
}
#this_row = [indel_name, indel_chr, indel_mb_s, indel_mb_e, indel_strand, indel_type, indel_size, indel_sequence, source_name]
- else:
- this_row = {}
the_rows.append(this_row)
return the_rows
-
def include_record(self, domain, function, snp_source, conservation_score):
""" Decide whether to add this record """
@@ -612,7 +607,7 @@ class SnpBrowser(object):
this_allele_list = []
for item in self.allele_list:
- if item and isinstance(item, basestring) and (item.lower() not in this_allele_list) and (item != "-"):
+ if item and isinstance(item, str) and (item.lower() not in this_allele_list) and (item != "-"):
this_allele_list.append(item.lower())
total_allele_count = len(this_allele_list)
@@ -629,7 +624,7 @@ class SnpBrowser(object):
canvas_width = 900
canvas_height = 200
- snp_canvas = pid.PILCanvas(size=(canvas_width, canvas_height))
+ snp_canvas = Image.new("RGBA", size=(canvas_width, canvas_height))
left_offset, right_offset, top_offset, bottom_offset = (30, 30, 40, 50)
plot_width = canvas_width - left_offset - right_offset
plot_height = canvas_height - top_offset - bottom_offset
@@ -676,9 +671,13 @@ def get_header_list(variant_type, strains, species = None, empty_columns = None)
empty_field_count = 0 #ZS: This is an awkward way of letting the javascript know the index where the allele value columns start; there's probably a better way of doing this
header_fields = []
+ header_data_names = []
if variant_type == "SNP":
header_fields.append(['Index', 'SNP ID', 'Chr', 'Mb', 'Alleles', 'Source', 'ConScore', 'Gene', 'Transcript', 'Exon', 'Domain 1', 'Domain 2', 'Function', 'Details'])
+ header_data_names = ['index', 'snp_name', 'chr', 'mb_formatted', 'alleles', 'snp_source', 'conservation_score', 'gene_name', 'transcript', 'exon', 'domain_1', 'domain_2', 'function', 'function_details']
+
header_fields.append(strain_list)
+ header_data_names += strain_list
if empty_columns != None:
if empty_columns['snp_source'] == "false":
@@ -705,11 +704,16 @@ def get_header_list(variant_type, strains, species = None, empty_columns = None)
if empty_columns['function_details'] == "false":
empty_field_count += 1
header_fields[0].remove('Details')
+
+ for col in empty_columns.keys():
+ if empty_columns[col] == "false":
+ header_data_names.remove(col)
elif variant_type == "InDel":
header_fields = ['Index', 'ID', 'Type', 'InDel Chr', 'Mb Start', 'Mb End', 'Strand', 'Size', 'Sequence', 'Source']
+ header_data_names = ['index', 'indel_name', 'indel_type', 'indel_chr', 'indel_mb_s', 'indel_mb_e', 'indel_strand', 'indel_size', 'indel_sequence', 'source_name']
- return header_fields, empty_field_count
+ return header_fields, empty_field_count, header_data_names
def get_effect_details_by_category(effect_name = None, effect_value = None):
gene_list = []
@@ -724,12 +728,12 @@ def get_effect_details_by_category(effect_name = None, effect_value = None):
new_codon_group_list = ['Start Gained']
codon_effect_group_list = ['Start Lost', 'Stop Gained', 'Stop Lost', 'Nonsynonymous', 'Synonymous']
- effect_detail_list = string.split(string.strip(effect_value), '|')
- effect_detail_list = map(string.strip, effect_detail_list)
+ effect_detail_list = effect_value.strip().split('|')
+ effect_detail_list = [item.strip() for item in effect_detail_list]
for index, item in enumerate(effect_detail_list):
- item_list = string.split(string.strip(item), ',')
- item_list = map(string.strip, item_list)
+ item_list = item.strip().split(',')
+ item_list = [item.strip() for item in item_list]
gene_id = item_list[0]
gene_name = item_list[1]
@@ -748,13 +752,13 @@ def get_effect_details_by_category(effect_name = None, effect_value = None):
if effect_name in new_codon_group_list:
new_codon = item_list[6]
tmp_list = [biotype, new_codon]
- function_detail_list.append(string.join(tmp_list, ", "))
+ function_detail_list.append(", ".join(tmp_list))
elif effect_name in codon_effect_group_list:
old_new_AA = item_list[6]
old_new_codon = item_list[7]
codon_num = item_list[8]
tmp_list = [biotype, old_new_AA, old_new_codon, codon_num]
- function_detail_list.append(string.join(tmp_list, ", "))
+ function_detail_list.append(", ".join(tmp_list))
else:
function_detail_list.append(biotype)
@@ -854,7 +858,7 @@ def get_gene_id_name_dict(species_id, gene_name_list):
if len(gene_name_list) == 0:
return ""
gene_name_str_list = ["'" + gene_name + "'" for gene_name in gene_name_list]
- gene_name_str = string.join(gene_name_str_list, ",")
+ gene_name_str = ",".join(gene_name_str_list)
query = """
SELECT
@@ -870,8 +874,6 @@ def get_gene_id_name_dict(species_id, gene_name_list):
if len(results) > 0:
for item in results:
gene_id_name_dict[item[1]] = item[0]
- else:
- pass
return gene_id_name_dict
@@ -885,7 +887,7 @@ def check_if_in_gene(species_id, chr, mb):
query = """SELECT geneId,geneSymbol
FROM GeneList
WHERE chromosome = '{0}' AND
- (txStart < {1} AND txEnd > {1}); """.format(species_id, chr, mb)
+ (txStart < {1} AND txEnd > {1}); """.format(chr, mb)
result = g.db.execute(query).fetchone()
diff --git a/wqflask/wqflask/static/Congenic.png b/wqflask/wqflask/static/Congenic.png
new file mode 100644
index 00000000..8cd489a4
--- /dev/null
+++ b/wqflask/wqflask/static/Congenic.png
Binary files differ
diff --git a/wqflask/wqflask/static/fonts/README b/wqflask/wqflask/static/fonts/README
new file mode 100644
index 00000000..75a3e444
--- /dev/null
+++ b/wqflask/wqflask/static/fonts/README
@@ -0,0 +1 @@
+These fonts are used by pillow for 'interval mapping'
diff --git a/wqflask/wqflask/static/fonts/arial.ttf b/wqflask/wqflask/static/fonts/arial.ttf
new file mode 100644
index 00000000..bf0d4a95
--- /dev/null
+++ b/wqflask/wqflask/static/fonts/arial.ttf
Binary files differ
diff --git a/wqflask/wqflask/static/fonts/courbd.ttf b/wqflask/wqflask/static/fonts/courbd.ttf
new file mode 100644
index 00000000..c8081467
--- /dev/null
+++ b/wqflask/wqflask/static/fonts/courbd.ttf
Binary files differ
diff --git a/wqflask/wqflask/static/fonts/fnt_bs.ttf b/wqflask/wqflask/static/fonts/fnt_bs.ttf
new file mode 100644
index 00000000..712c38cf
--- /dev/null
+++ b/wqflask/wqflask/static/fonts/fnt_bs.ttf
Binary files differ
diff --git a/wqflask/wqflask/static/fonts/tahoma.ttf b/wqflask/wqflask/static/fonts/tahoma.ttf
new file mode 100644
index 00000000..bb314be3
--- /dev/null
+++ b/wqflask/wqflask/static/fonts/tahoma.ttf
Binary files differ
diff --git a/wqflask/wqflask/static/fonts/trebucbd.ttf b/wqflask/wqflask/static/fonts/trebucbd.ttf
new file mode 100644
index 00000000..1ab1ae0a
--- /dev/null
+++ b/wqflask/wqflask/static/fonts/trebucbd.ttf
Binary files differ
diff --git a/wqflask/wqflask/static/fonts/verdana.ttf b/wqflask/wqflask/static/fonts/verdana.ttf
new file mode 100644
index 00000000..754a9b7b
--- /dev/null
+++ b/wqflask/wqflask/static/fonts/verdana.ttf
Binary files differ
diff --git a/wqflask/wqflask/static/fonts/verdanab.ttf b/wqflask/wqflask/static/fonts/verdanab.ttf
new file mode 100644
index 00000000..1a99258f
--- /dev/null
+++ b/wqflask/wqflask/static/fonts/verdanab.ttf
Binary files differ
diff --git a/wqflask/wqflask/static/gif/error/m001.gif b/wqflask/wqflask/static/gif/error/m001.gif
new file mode 100644
index 00000000..81c8ba26
--- /dev/null
+++ b/wqflask/wqflask/static/gif/error/m001.gif
Binary files differ
diff --git a/wqflask/wqflask/static/gif/error/m002.gif b/wqflask/wqflask/static/gif/error/m002.gif
new file mode 100644
index 00000000..7232c58b
--- /dev/null
+++ b/wqflask/wqflask/static/gif/error/m002.gif
Binary files differ
diff --git a/wqflask/wqflask/static/gif/error/m003.gif b/wqflask/wqflask/static/gif/error/m003.gif
new file mode 100644
index 00000000..2384ceb6
--- /dev/null
+++ b/wqflask/wqflask/static/gif/error/m003.gif
Binary files differ
diff --git a/wqflask/wqflask/static/gif/error/m004.gif b/wqflask/wqflask/static/gif/error/m004.gif
new file mode 100644
index 00000000..d77c708d
--- /dev/null
+++ b/wqflask/wqflask/static/gif/error/m004.gif
Binary files differ
diff --git a/wqflask/wqflask/static/gif/error/m005.gif b/wqflask/wqflask/static/gif/error/m005.gif
new file mode 100644
index 00000000..1b2de7ec
--- /dev/null
+++ b/wqflask/wqflask/static/gif/error/m005.gif
Binary files differ
diff --git a/wqflask/wqflask/static/gif/error/m006.gif b/wqflask/wqflask/static/gif/error/m006.gif
new file mode 100644
index 00000000..f354a4cc
--- /dev/null
+++ b/wqflask/wqflask/static/gif/error/m006.gif
Binary files differ
diff --git a/wqflask/wqflask/static/gif/error/m007.gif b/wqflask/wqflask/static/gif/error/m007.gif
new file mode 100644
index 00000000..ba2eeb37
--- /dev/null
+++ b/wqflask/wqflask/static/gif/error/m007.gif
Binary files differ
diff --git a/wqflask/wqflask/static/gif/error/m008.gif b/wqflask/wqflask/static/gif/error/m008.gif
new file mode 100644
index 00000000..4cdec5cb
--- /dev/null
+++ b/wqflask/wqflask/static/gif/error/m008.gif
Binary files differ
diff --git a/wqflask/wqflask/static/gif/error/mouse-wheel.gif b/wqflask/wqflask/static/gif/error/mouse-wheel.gif
new file mode 100644
index 00000000..164220e7
--- /dev/null
+++ b/wqflask/wqflask/static/gif/error/mouse-wheel.gif
Binary files differ
diff --git a/wqflask/wqflask/static/images/Belknap_Fig1_1998.png b/wqflask/wqflask/static/images/Belknap_Fig1_1998.png
new file mode 100644
index 00000000..46305fa1
--- /dev/null
+++ b/wqflask/wqflask/static/images/Belknap_Fig1_1998.png
Binary files differ
diff --git a/wqflask/wqflask/static/images/Chrna1vsMyf6.gif b/wqflask/wqflask/static/images/Chrna1vsMyf6.gif
new file mode 100644
index 00000000..881a08e8
--- /dev/null
+++ b/wqflask/wqflask/static/images/Chrna1vsMyf6.gif
Binary files differ
diff --git a/wqflask/wqflask/static/images/Congenic.png b/wqflask/wqflask/static/images/Congenic.png
new file mode 100644
index 00000000..8cd489a4
--- /dev/null
+++ b/wqflask/wqflask/static/images/Congenic.png
Binary files differ
diff --git a/wqflask/wqflask/static/images/Normal_Plot.gif b/wqflask/wqflask/static/images/Normal_Plot.gif
new file mode 100644
index 00000000..dc239f8e
--- /dev/null
+++ b/wqflask/wqflask/static/images/Normal_Plot.gif
Binary files differ
diff --git a/wqflask/wqflask/static/images/SilverFig3_2.png b/wqflask/wqflask/static/images/SilverFig3_2.png
new file mode 100644
index 00000000..5b4b2c70
--- /dev/null
+++ b/wqflask/wqflask/static/images/SilverFig3_2.png
Binary files differ
diff --git a/wqflask/wqflask/static/images/SilverFig3_6.png b/wqflask/wqflask/static/images/SilverFig3_6.png
new file mode 100644
index 00000000..5b91d991
--- /dev/null
+++ b/wqflask/wqflask/static/images/SilverFig3_6.png
Binary files differ
diff --git a/wqflask/wqflask/static/images/Winsorize1.png b/wqflask/wqflask/static/images/Winsorize1.png
new file mode 100644
index 00000000..f3a65f29
--- /dev/null
+++ b/wqflask/wqflask/static/images/Winsorize1.png
Binary files differ
diff --git a/wqflask/wqflask/static/images/Winsorize3.png b/wqflask/wqflask/static/images/Winsorize3.png
new file mode 100644
index 00000000..a9ed95d6
--- /dev/null
+++ b/wqflask/wqflask/static/images/Winsorize3.png
Binary files differ
diff --git a/wqflask/wqflask/static/images/edit.png b/wqflask/wqflask/static/images/edit.png
new file mode 100644
index 00000000..571b08cd
--- /dev/null
+++ b/wqflask/wqflask/static/images/edit.png
Binary files differ
diff --git a/wqflask/wqflask/static/new/css/bootstrap-custom.css b/wqflask/wqflask/static/new/css/bootstrap-custom.css
new file mode 100644
index 00000000..7c8549e1
--- /dev/null
+++ b/wqflask/wqflask/static/new/css/bootstrap-custom.css
@@ -0,0 +1,7558 @@
+/*!
+ * Bootstrap v3.3.0 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+html {
+ font-family: sans-serif;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+body {
+ margin: 0;
+}
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+ vertical-align: baseline;
+}
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+[hidden],
+template {
+ display: none;
+}
+
+a {
+ background-color: transparent;
+}
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+b,
+strong {
+ font-weight: bold;
+}
+
+dfn {
+ font-style: italic;
+}
+
+h1 {
+ margin: .67em 0;
+ font-size: 2em;
+}
+
+mark {
+ color: #000;
+ background: #ff0;
+}
+
+small {
+ font-size: 80%;
+}
+
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -.5em;
+}
+
+sub {
+ bottom: -.25em;
+}
+
+img {
+ border: 0;
+}
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+figure {
+ margin: 1em 40px;
+}
+
+hr {
+ height: 0;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+pre {
+ overflow: auto;
+}
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ margin: 0;
+ font: inherit;
+ color: inherit;
+}
+
+button {
+ overflow: visible;
+}
+
+button,
+select {
+ text-transform: none;
+}
+
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer;
+}
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+
+input {
+ line-height: normal;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0;
+}
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+input[type="search"] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
+}
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+fieldset {
+ padding: .35em .625em .75em;
+ margin: 0 2px;
+ border: 1px solid #c0c0c0;
+}
+
+legend {
+ padding: 0;
+ border: 0;
+}
+
+textarea {
+ overflow: auto;
+}
+
+optgroup {
+ font-weight: bold;
+}
+
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+
+td,
+th {
+ padding: 0;
+}
+
+/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
+@media print {
+
+ *,
+ *:before,
+ *:after {
+ color: #000 !important;
+ text-shadow: none !important;
+ background: transparent !important;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
+ }
+
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+
+ a[href]:after {
+ content: " ("attr(href) ")";
+ }
+
+ abbr[title]:after {
+ content: " ("attr(title) ")";
+ }
+
+ a[href^="#"]:after,
+ a[href^="javascript:"]:after {
+ content: "";
+ }
+
+ pre,
+ blockquote {
+ border: 1px solid #999;
+
+ page-break-inside: avoid;
+ }
+
+ thead {
+ display: table-header-group;
+ }
+
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+
+ img {
+ max-width: 100% !important;
+ }
+
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+
+ select {
+ background: #fff !important;
+ }
+
+ .navbar {
+ display: none;
+ }
+
+ .btn>.caret,
+ .dropup>.btn>.caret {
+ border-top-color: #000 !important;
+ }
+
+ .label {
+ border: 1px solid #000;
+ }
+
+ .table {
+ border-collapse: collapse !important;
+ }
+
+ .table td,
+ .table th {
+ background-color: #fff !important;
+ }
+
+ .table-bordered th,
+ .table-bordered td {
+ border: 1px solid #000 !important;
+ }
+}
+
+@font-face {
+ font-family: 'Glyphicons Halflings';
+
+ src: url('../fonts/glyphicons-halflings-regular.eot');
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
+}
+
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
+
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.glyphicon-asterisk:before {
+ content: "\2a";
+}
+
+.glyphicon-plus:before {
+ content: "\2b";
+}
+
+.glyphicon-euro:before,
+.glyphicon-eur:before {
+ content: "\20ac";
+}
+
+.glyphicon-minus:before {
+ content: "\2212";
+}
+
+.glyphicon-cloud:before {
+ content: "\2601";
+}
+
+.glyphicon-envelope:before {
+ content: "\2709";
+}
+
+.glyphicon-pencil:before {
+ content: "\270f";
+}
+
+.glyphicon-glass:before {
+ content: "\e001";
+}
+
+.glyphicon-music:before {
+ content: "\e002";
+}
+
+.glyphicon-search:before {
+ content: "\e003";
+}
+
+.glyphicon-heart:before {
+ content: "\e005";
+}
+
+.glyphicon-star:before {
+ content: "\e006";
+}
+
+.glyphicon-star-empty:before {
+ content: "\e007";
+}
+
+.glyphicon-user:before {
+ content: "\e008";
+}
+
+.glyphicon-film:before {
+ content: "\e009";
+}
+
+.glyphicon-th-large:before {
+ content: "\e010";
+}
+
+.glyphicon-th:before {
+ content: "\e011";
+}
+
+.glyphicon-th-list:before {
+ content: "\e012";
+}
+
+.glyphicon-ok:before {
+ content: "\e013";
+}
+
+.glyphicon-remove:before {
+ content: "\e014";
+}
+
+.glyphicon-zoom-in:before {
+ content: "\e015";
+}
+
+.glyphicon-zoom-out:before {
+ content: "\e016";
+}
+
+.glyphicon-off:before {
+ content: "\e017";
+}
+
+.glyphicon-signal:before {
+ content: "\e018";
+}
+
+.glyphicon-cog:before {
+ content: "\e019";
+}
+
+.glyphicon-trash:before {
+ content: "\e020";
+}
+
+.glyphicon-home:before {
+ content: "\e021";
+}
+
+.glyphicon-file:before {
+ content: "\e022";
+}
+
+.glyphicon-time:before {
+ content: "\e023";
+}
+
+.glyphicon-road:before {
+ content: "\e024";
+}
+
+.glyphicon-download-alt:before {
+ content: "\e025";
+}
+
+.glyphicon-download:before {
+ content: "\e026";
+}
+
+.glyphicon-upload:before {
+ content: "\e027";
+}
+
+.glyphicon-inbox:before {
+ content: "\e028";
+}
+
+.glyphicon-play-circle:before {
+ content: "\e029";
+}
+
+.glyphicon-repeat:before {
+ content: "\e030";
+}
+
+.glyphicon-refresh:before {
+ content: "\e031";
+}
+
+.glyphicon-list-alt:before {
+ content: "\e032";
+}
+
+.glyphicon-lock:before {
+ content: "\e033";
+}
+
+.glyphicon-flag:before {
+ content: "\e034";
+}
+
+.glyphicon-headphones:before {
+ content: "\e035";
+}
+
+.glyphicon-volume-off:before {
+ content: "\e036";
+}
+
+.glyphicon-volume-down:before {
+ content: "\e037";
+}
+
+.glyphicon-volume-up:before {
+ content: "\e038";
+}
+
+.glyphicon-qrcode:before {
+ content: "\e039";
+}
+
+.glyphicon-barcode:before {
+ content: "\e040";
+}
+
+.glyphicon-tag:before {
+ content: "\e041";
+}
+
+.glyphicon-tags:before {
+ content: "\e042";
+}
+
+.glyphicon-book:before {
+ content: "\e043";
+}
+
+.glyphicon-bookmark:before {
+ content: "\e044";
+}
+
+.glyphicon-print:before {
+ content: "\e045";
+}
+
+.glyphicon-camera:before {
+ content: "\e046";
+}
+
+.glyphicon-font:before {
+ content: "\e047";
+}
+
+.glyphicon-bold:before {
+ content: "\e048";
+}
+
+.glyphicon-italic:before {
+ content: "\e049";
+}
+
+.glyphicon-text-height:before {
+ content: "\e050";
+}
+
+.glyphicon-text-width:before {
+ content: "\e051";
+}
+
+.glyphicon-align-left:before {
+ content: "\e052";
+}
+
+.glyphicon-align-center:before {
+ content: "\e053";
+}
+
+.glyphicon-align-right:before {
+ content: "\e054";
+}
+
+.glyphicon-align-justify:before {
+ content: "\e055";
+}
+
+.glyphicon-list:before {
+ content: "\e056";
+}
+
+.glyphicon-indent-left:before {
+ content: "\e057";
+}
+
+.glyphicon-indent-right:before {
+ content: "\e058";
+}
+
+.glyphicon-facetime-video:before {
+ content: "\e059";
+}
+
+.glyphicon-picture:before {
+ content: "\e060";
+}
+
+.glyphicon-map-marker:before {
+ content: "\e062";
+}
+
+.glyphicon-adjust:before {
+ content: "\e063";
+}
+
+.glyphicon-tint:before {
+ content: "\e064";
+}
+
+.glyphicon-edit:before {
+ content: "\e065";
+}
+
+.glyphicon-share:before {
+ content: "\e066";
+}
+
+.glyphicon-check:before {
+ content: "\e067";
+}
+
+.glyphicon-move:before {
+ content: "\e068";
+}
+
+.glyphicon-step-backward:before {
+ content: "\e069";
+}
+
+.glyphicon-fast-backward:before {
+ content: "\e070";
+}
+
+.glyphicon-backward:before {
+ content: "\e071";
+}
+
+.glyphicon-play:before {
+ content: "\e072";
+}
+
+.glyphicon-pause:before {
+ content: "\e073";
+}
+
+.glyphicon-stop:before {
+ content: "\e074";
+}
+
+.glyphicon-forward:before {
+ content: "\e075";
+}
+
+.glyphicon-fast-forward:before {
+ content: "\e076";
+}
+
+.glyphicon-step-forward:before {
+ content: "\e077";
+}
+
+.glyphicon-eject:before {
+ content: "\e078";
+}
+
+.glyphicon-chevron-left:before {
+ content: "\e079";
+}
+
+.glyphicon-chevron-right:before {
+ content: "\e080";
+}
+
+.glyphicon-plus-sign:before {
+ content: "\e081";
+}
+
+.glyphicon-minus-sign:before {
+ content: "\e082";
+}
+
+.glyphicon-remove-sign:before {
+ content: "\e083";
+}
+
+.glyphicon-ok-sign:before {
+ content: "\e084";
+}
+
+.glyphicon-question-sign:before {
+ content: "\e085";
+}
+
+.glyphicon-info-sign:before {
+ content: "\e086";
+}
+
+.glyphicon-screenshot:before {
+ content: "\e087";
+}
+
+.glyphicon-remove-circle:before {
+ content: "\e088";
+}
+
+.glyphicon-ok-circle:before {
+ content: "\e089";
+}
+
+.glyphicon-ban-circle:before {
+ content: "\e090";
+}
+
+.glyphicon-arrow-left:before {
+ content: "\e091";
+}
+
+.glyphicon-arrow-right:before {
+ content: "\e092";
+}
+
+.glyphicon-arrow-up:before {
+ content: "\e093";
+}
+
+.glyphicon-arrow-down:before {
+ content: "\e094";
+}
+
+.glyphicon-share-alt:before {
+ content: "\e095";
+}
+
+.glyphicon-resize-full:before {
+ content: "\e096";
+}
+
+.glyphicon-resize-small:before {
+ content: "\e097";
+}
+
+.glyphicon-exclamation-sign:before {
+ content: "\e101";
+}
+
+.glyphicon-gift:before {
+ content: "\e102";
+}
+
+.glyphicon-leaf:before {
+ content: "\e103";
+}
+
+.glyphicon-fire:before {
+ content: "\e104";
+}
+
+.glyphicon-eye-open:before {
+ content: "\e105";
+}
+
+.glyphicon-eye-close:before {
+ content: "\e106";
+}
+
+.glyphicon-warning-sign:before {
+ content: "\e107";
+}
+
+.glyphicon-plane:before {
+ content: "\e108";
+}
+
+.glyphicon-calendar:before {
+ content: "\e109";
+}
+
+.glyphicon-random:before {
+ content: "\e110";
+}
+
+.glyphicon-comment:before {
+ content: "\e111";
+}
+
+.glyphicon-magnet:before {
+ content: "\e112";
+}
+
+.glyphicon-chevron-up:before {
+ content: "\e113";
+}
+
+.glyphicon-chevron-down:before {
+ content: "\e114";
+}
+
+.glyphicon-retweet:before {
+ content: "\e115";
+}
+
+.glyphicon-shopping-cart:before {
+ content: "\e116";
+}
+
+.glyphicon-folder-close:before {
+ content: "\e117";
+}
+
+.glyphicon-folder-open:before {
+ content: "\e118";
+}
+
+.glyphicon-resize-vertical:before {
+ content: "\e119";
+}
+
+.glyphicon-resize-horizontal:before {
+ content: "\e120";
+}
+
+.glyphicon-hdd:before {
+ content: "\e121";
+}
+
+.glyphicon-bullhorn:before {
+ content: "\e122";
+}
+
+.glyphicon-bell:before {
+ content: "\e123";
+}
+
+.glyphicon-certificate:before {
+ content: "\e124";
+}
+
+.glyphicon-thumbs-up:before {
+ content: "\e125";
+}
+
+.glyphicon-thumbs-down:before {
+ content: "\e126";
+}
+
+.glyphicon-hand-right:before {
+ content: "\e127";
+}
+
+.glyphicon-hand-left:before {
+ content: "\e128";
+}
+
+.glyphicon-hand-up:before {
+ content: "\e129";
+}
+
+.glyphicon-hand-down:before {
+ content: "\e130";
+}
+
+.glyphicon-circle-arrow-right:before {
+ content: "\e131";
+}
+
+.glyphicon-circle-arrow-left:before {
+ content: "\e132";
+}
+
+.glyphicon-circle-arrow-up:before {
+ content: "\e133";
+}
+
+.glyphicon-circle-arrow-down:before {
+ content: "\e134";
+}
+
+.glyphicon-globe:before {
+ content: "\e135";
+}
+
+.glyphicon-wrench:before {
+ content: "\e136";
+}
+
+.glyphicon-tasks:before {
+ content: "\e137";
+}
+
+.glyphicon-filter:before {
+ content: "\e138";
+}
+
+.glyphicon-briefcase:before {
+ content: "\e139";
+}
+
+.glyphicon-fullscreen:before {
+ content: "\e140";
+}
+
+.glyphicon-dashboard:before {
+ content: "\e141";
+}
+
+.glyphicon-paperclip:before {
+ content: "\e142";
+}
+
+.glyphicon-heart-empty:before {
+ content: "\e143";
+}
+
+.glyphicon-link:before {
+ content: "\e144";
+}
+
+.glyphicon-phone:before {
+ content: "\e145";
+}
+
+.glyphicon-pushpin:before {
+ content: "\e146";
+}
+
+.glyphicon-usd:before {
+ content: "\e148";
+}
+
+.glyphicon-gbp:before {
+ content: "\e149";
+}
+
+.glyphicon-sort:before {
+ content: "\e150";
+}
+
+.glyphicon-sort-by-alphabet:before {
+ content: "\e151";
+}
+
+.glyphicon-sort-by-alphabet-alt:before {
+ content: "\e152";
+}
+
+.glyphicon-sort-by-order:before {
+ content: "\e153";
+}
+
+.glyphicon-sort-by-order-alt:before {
+ content: "\e154";
+}
+
+.glyphicon-sort-by-attributes:before {
+ content: "\e155";
+}
+
+.glyphicon-sort-by-attributes-alt:before {
+ content: "\e156";
+}
+
+.glyphicon-unchecked:before {
+ content: "\e157";
+}
+
+.glyphicon-expand:before {
+ content: "\e158";
+}
+
+.glyphicon-collapse-down:before {
+ content: "\e159";
+}
+
+.glyphicon-collapse-up:before {
+ content: "\e160";
+}
+
+.glyphicon-log-in:before {
+ content: "\e161";
+}
+
+.glyphicon-flash:before {
+ content: "\e162";
+}
+
+.glyphicon-log-out:before {
+ content: "\e163";
+}
+
+.glyphicon-new-window:before {
+ content: "\e164";
+}
+
+.glyphicon-record:before {
+ content: "\e165";
+}
+
+.glyphicon-save:before {
+ content: "\e166";
+}
+
+.glyphicon-open:before {
+ content: "\e167";
+}
+
+.glyphicon-saved:before {
+ content: "\e168";
+}
+
+.glyphicon-import:before {
+ content: "\e169";
+}
+
+.glyphicon-export:before {
+ content: "\e170";
+}
+
+.glyphicon-send:before {
+ content: "\e171";
+}
+
+.glyphicon-floppy-disk:before {
+ content: "\e172";
+}
+
+.glyphicon-floppy-saved:before {
+ content: "\e173";
+}
+
+.glyphicon-floppy-remove:before {
+ content: "\e174";
+}
+
+.glyphicon-floppy-save:before {
+ content: "\e175";
+}
+
+.glyphicon-floppy-open:before {
+ content: "\e176";
+}
+
+.glyphicon-credit-card:before {
+ content: "\e177";
+}
+
+.glyphicon-transfer:before {
+ content: "\e178";
+}
+
+.glyphicon-cutlery:before {
+ content: "\e179";
+}
+
+.glyphicon-header:before {
+ content: "\e180";
+}
+
+.glyphicon-compressed:before {
+ content: "\e181";
+}
+
+.glyphicon-earphone:before {
+ content: "\e182";
+}
+
+.glyphicon-phone-alt:before {
+ content: "\e183";
+}
+
+.glyphicon-tower:before {
+ content: "\e184";
+}
+
+.glyphicon-stats:before {
+ content: "\e185";
+}
+
+.glyphicon-sd-video:before {
+ content: "\e186";
+}
+
+.glyphicon-hd-video:before {
+ content: "\e187";
+}
+
+.glyphicon-subtitles:before {
+ content: "\e188";
+}
+
+.glyphicon-sound-stereo:before {
+ content: "\e189";
+}
+
+.glyphicon-sound-dolby:before {
+ content: "\e190";
+}
+
+.glyphicon-sound-5-1:before {
+ content: "\e191";
+}
+
+.glyphicon-sound-6-1:before {
+ content: "\e192";
+}
+
+.glyphicon-sound-7-1:before {
+ content: "\e193";
+}
+
+.glyphicon-copyright-mark:before {
+ content: "\e194";
+}
+
+.glyphicon-registration-mark:before {
+ content: "\e195";
+}
+
+.glyphicon-cloud-download:before {
+ content: "\e197";
+}
+
+.glyphicon-cloud-upload:before {
+ content: "\e198";
+}
+
+.glyphicon-tree-conifer:before {
+ content: "\e199";
+}
+
+.glyphicon-tree-deciduous:before {
+ content: "\e200";
+}
+
+* {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+*:before,
+*:after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+html {
+ font-size: 10px;
+
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #000;
+ background-color: #fff;
+}
+
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+
+a {
+ color: #3071a9;
+ text-decoration: none;
+}
+
+a:hover,
+a:focus {
+ color: #2a6496;
+ text-decoration: underline;
+}
+
+a:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+figure {
+ margin: 0;
+}
+
+img {
+ vertical-align: middle;
+}
+
+.img-responsive,
+.thumbnail>img,
+.thumbnail a>img,
+.carousel-inner>.item>img,
+.carousel-inner>.item>a>img {
+ display: block;
+ max-width: 100%;
+ height: auto;
+}
+
+.img-rounded {
+ border-radius: 6px;
+}
+
+.img-thumbnail {
+ display: inline-block;
+ max-width: 100%;
+ height: auto;
+ padding: 4px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ -o-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+}
+
+.img-circle {
+ border-radius: 50%;
+}
+
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee;
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+}
+
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+ font-family: inherit;
+ font-weight: 500;
+ line-height: 1.1;
+ color: inherit;
+}
+
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small,
+.h1 small,
+.h2 small,
+.h3 small,
+.h4 small,
+.h5 small,
+.h6 small,
+h1 .small,
+h2 .small,
+h3 .small,
+h4 .small,
+h5 .small,
+h6 .small,
+.h1 .small,
+.h2 .small,
+.h3 .small,
+.h4 .small,
+.h5 .small,
+.h6 .small {
+ font-weight: normal;
+ line-height: 1;
+ color: #777;
+}
+
+h1,
+.h1,
+h2,
+.h2,
+h3,
+.h3 {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+h1 small,
+.h1 small,
+h2 small,
+.h2 small,
+h3 small,
+.h3 small,
+h1 .small,
+.h1 .small,
+h2 .small,
+.h2 .small,
+h3 .small,
+.h3 .small {
+ font-size: 65%;
+}
+
+h4,
+.h4,
+h5,
+.h5,
+h6,
+.h6 {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+h4 small,
+.h4 small,
+h5 small,
+.h5 small,
+h6 small,
+.h6 small,
+h4 .small,
+.h4 .small,
+h5 .small,
+.h5 .small,
+h6 .small,
+.h6 .small {
+ font-size: 75%;
+}
+
+h1,
+.h1 {
+ font-size: 30px;
+}
+
+h2,
+.h2 {
+ font-size: 24px;
+}
+
+h3,
+.h3 {
+ font-size: 18px;
+}
+
+h4,
+.h4 {
+ font-size: 14px;
+}
+
+h5,
+.h5 {
+ font-size: 12px;
+}
+
+h6,
+.h6 {
+ font-size: 10px;
+}
+
+p {
+ margin: 0 0 10px;
+}
+
+.lead {
+ margin-bottom: 20px;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 1.4;
+}
+
+@media (min-width: 768px) {
+ .lead {
+ font-size: 21px;
+ }
+}
+
+small,
+.small {
+ font-size: 85%;
+}
+
+mark,
+.mark {
+ padding: .2em;
+ background-color: #fcf8e3;
+}
+
+.text-left {
+ text-align: left;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.text-justify {
+ text-align: justify;
+}
+
+.text-nowrap {
+ white-space: nowrap;
+}
+
+.text-lowercase {
+ text-transform: lowercase;
+}
+
+.text-uppercase {
+ text-transform: uppercase;
+}
+
+.text-capitalize {
+ text-transform: capitalize;
+}
+
+.text-muted {
+ color: #777;
+}
+
+.text-primary {
+ color: #428bca;
+}
+
+a.text-primary:hover {
+ color: #3071a9;
+}
+
+.text-success {
+ color: #3c763d;
+}
+
+a.text-success:hover {
+ color: #2b542c;
+}
+
+.text-info {
+ color: #31708f;
+}
+
+a.text-info:hover {
+ color: #245269;
+}
+
+.text-warning {
+ color: #8a6d3b;
+}
+
+a.text-warning:hover {
+ color: #66512c;
+}
+
+.text-danger {
+ color: #a94442;
+}
+
+a.text-danger:hover {
+ color: #843534;
+}
+
+.bg-primary {
+ color: #fff;
+ background-color: #428bca;
+}
+
+a.bg-primary:hover {
+ background-color: #3071a9;
+}
+
+.bg-success {
+ background-color: #dff0d8;
+}
+
+a.bg-success:hover {
+ background-color: #c1e2b3;
+}
+
+.bg-info {
+ background-color: #d9edf7;
+}
+
+a.bg-info:hover {
+ background-color: #afd9ee;
+}
+
+.bg-warning {
+ background-color: #fcf8e3;
+}
+
+a.bg-warning:hover {
+ background-color: #f7ecb5;
+}
+
+.bg-danger {
+ background-color: #f2dede;
+}
+
+a.bg-danger:hover {
+ background-color: #e4b9b9;
+}
+
+.page-header {
+ padding-bottom: 9px;
+ margin: 10px 0 10px;
+ border-bottom: 1px solid #eee;
+}
+
+ul,
+ol {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+
+ul ul,
+ol ul,
+ul ol,
+ol ol {
+ margin-bottom: 0;
+}
+
+.list-unstyled {
+ padding-left: 0;
+ list-style: none;
+}
+
+.list-inline {
+ padding-left: 0;
+ margin-left: -5px;
+ list-style: none;
+}
+
+.list-inline>li {
+ display: inline-block;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+
+dl {
+ margin-top: 0;
+ margin-bottom: 20px;
+}
+
+dt,
+dd {
+ line-height: 1.42857143;
+}
+
+dt {
+ font-weight: bold;
+}
+
+dd {
+ margin-left: 0;
+}
+
+@media (min-width: 768px) {
+ .dl-horizontal dt {
+ float: left;
+ width: 160px;
+ overflow: hidden;
+ clear: left;
+ text-align: right;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ .dl-horizontal dd {
+ margin-left: 180px;
+ }
+}
+
+abbr[title],
+abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted #777;
+}
+
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase;
+}
+
+blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #eee;
+}
+
+blockquote p:last-child,
+blockquote ul:last-child,
+blockquote ol:last-child {
+ margin-bottom: 0;
+}
+
+blockquote footer,
+blockquote small,
+blockquote .small {
+ display: block;
+ font-size: 80%;
+ line-height: 1.42857143;
+ color: #777;
+}
+
+blockquote footer:before,
+blockquote small:before,
+blockquote .small:before {
+ content: '\2014 \00A0';
+}
+
+.blockquote-reverse,
+blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ text-align: right;
+ border-right: 5px solid #eee;
+ border-left: 0;
+}
+
+.blockquote-reverse footer:before,
+blockquote.pull-right footer:before,
+.blockquote-reverse small:before,
+blockquote.pull-right small:before,
+.blockquote-reverse .small:before,
+blockquote.pull-right .small:before {
+ content: '';
+}
+
+.blockquote-reverse footer:after,
+blockquote.pull-right footer:after,
+.blockquote-reverse small:after,
+blockquote.pull-right small:after,
+.blockquote-reverse .small:after,
+blockquote.pull-right .small:after {
+ content: '\00A0 \2014';
+}
+
+address {
+ margin-bottom: 20px;
+ font-style: normal;
+ line-height: 1.42857143;
+}
+
+code,
+kbd,
+pre,
+samp {
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #c7254e;
+ background-color: #f9f2f4;
+ border-radius: 4px;
+}
+
+kbd {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #fff;
+ background-color: #333;
+ border-radius: 3px;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+}
+
+kbd kbd {
+ padding: 0;
+ font-size: 100%;
+ font-weight: bold;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ color: #333;
+ word-break: break-all;
+ word-wrap: break-word;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+
+pre code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border-radius: 0;
+}
+
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll;
+}
+
+.container {
+ padding-right: 15px;
+ padding-left: 15px;
+}
+
+/*
+@media (min-width: 768px) {
+ .container {
+ width: 750px;
+ }
+}
+@media (min-width: 992px) {
+ .container {
+ width: 970px;
+ }
+}
+@media (min-width: 1200px) {
+ .container {
+ width: 1170px;
+ }
+}*/
+
+.container-fluid {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.row {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+.col-xs-1,
+.col-sm-1,
+.col-md-1,
+.col-lg-1,
+.col-xs-2,
+.col-sm-2,
+.col-md-2,
+.col-lg-2,
+.col-xs-3,
+.col-sm-3,
+.col-md-3,
+.col-lg-3,
+.col-xs-4,
+.col-sm-4,
+.col-md-4,
+.col-lg-4,
+.col-xs-5,
+.col-sm-5,
+.col-md-5,
+.col-lg-5,
+.col-xs-6,
+.col-sm-6,
+.col-md-6,
+.col-lg-6,
+.col-xs-7,
+.col-sm-7,
+.col-md-7,
+.col-lg-7,
+.col-xs-8,
+.col-sm-8,
+.col-md-8,
+.col-lg-8,
+.col-xs-9,
+.col-sm-9,
+.col-md-9,
+.col-lg-9,
+.col-xs-10,
+.col-sm-10,
+.col-md-10,
+.col-lg-10,
+.col-xs-11,
+.col-sm-11,
+.col-md-11,
+.col-lg-11,
+.col-xs-12,
+.col-sm-12,
+.col-md-12,
+.col-lg-12 {
+ position: relative;
+ min-height: 1px;
+ padding-right: 15px;
+ padding-left: 15px;
+}
+
+.col-xs-1,
+.col-xs-2,
+.col-xs-3,
+.col-xs-4,
+.col-xs-5,
+.col-xs-6,
+.col-xs-7,
+.col-xs-8,
+.col-xs-9,
+.col-xs-10,
+.col-xs-11,
+.col-xs-12 {
+ float: left;
+}
+
+.col-xs-12 {
+ width: 100%;
+}
+
+.col-xs-11 {
+ width: 91.66666667%;
+}
+
+.col-xs-10 {
+ width: 83.33333333%;
+}
+
+.col-xs-9 {
+ width: 75%;
+}
+
+.col-xs-8 {
+ width: 66.66666667%;
+}
+
+.col-xs-7 {
+ width: 58.33333333%;
+}
+
+.col-xs-6 {
+ width: 50%;
+}
+
+.col-xs-5 {
+ width: 41.66666667%;
+}
+
+.col-xs-4 {
+ width: 33.33333333%;
+}
+
+.col-xs-3 {
+ width: 25%;
+}
+
+.col-xs-2 {
+ width: 16.66666667%;
+}
+
+.col-xs-1 {
+ width: 8.33333333%;
+}
+
+.col-xs-pull-12 {
+ right: 100%;
+}
+
+.col-xs-pull-11 {
+ right: 91.66666667%;
+}
+
+.col-xs-pull-10 {
+ right: 83.33333333%;
+}
+
+.col-xs-pull-9 {
+ right: 75%;
+}
+
+.col-xs-pull-8 {
+ right: 66.66666667%;
+}
+
+.col-xs-pull-7 {
+ right: 58.33333333%;
+}
+
+.col-xs-pull-6 {
+ right: 50%;
+}
+
+.col-xs-pull-5 {
+ right: 41.66666667%;
+}
+
+.col-xs-pull-4 {
+ right: 33.33333333%;
+}
+
+.col-xs-pull-3 {
+ right: 25%;
+}
+
+.col-xs-pull-2 {
+ right: 16.66666667%;
+}
+
+.col-xs-pull-1 {
+ right: 8.33333333%;
+}
+
+.col-xs-pull-0 {
+ right: auto;
+}
+
+.col-xs-push-12 {
+ left: 100%;
+}
+
+.col-xs-push-11 {
+ left: 91.66666667%;
+}
+
+.col-xs-push-10 {
+ left: 83.33333333%;
+}
+
+.col-xs-push-9 {
+ left: 75%;
+}
+
+.col-xs-push-8 {
+ left: 66.66666667%;
+}
+
+.col-xs-push-7 {
+ left: 58.33333333%;
+}
+
+.col-xs-push-6 {
+ left: 50%;
+}
+
+.col-xs-push-5 {
+ left: 41.66666667%;
+}
+
+.col-xs-push-4 {
+ left: 33.33333333%;
+}
+
+.col-xs-push-3 {
+ left: 25%;
+}
+
+.col-xs-push-2 {
+ left: 16.66666667%;
+}
+
+.col-xs-push-1 {
+ left: 8.33333333%;
+}
+
+.col-xs-push-0 {
+ left: auto;
+}
+
+.col-xs-offset-12 {
+ margin-left: 100%;
+}
+
+.col-xs-offset-11 {
+ margin-left: 91.66666667%;
+}
+
+.col-xs-offset-10 {
+ margin-left: 83.33333333%;
+}
+
+.col-xs-offset-9 {
+ margin-left: 75%;
+}
+
+.col-xs-offset-8 {
+ margin-left: 66.66666667%;
+}
+
+.col-xs-offset-7 {
+ margin-left: 58.33333333%;
+}
+
+.col-xs-offset-6 {
+ margin-left: 50%;
+}
+
+.col-xs-offset-5 {
+ margin-left: 41.66666667%;
+}
+
+.col-xs-offset-4 {
+ margin-left: 33.33333333%;
+}
+
+.col-xs-offset-3 {
+ margin-left: 25%;
+}
+
+.col-xs-offset-2 {
+ margin-left: 16.66666667%;
+}
+
+.col-xs-offset-1 {
+ margin-left: 8.33333333%;
+}
+
+.col-xs-offset-0 {
+ margin-left: 0;
+}
+
+/*
+@media (min-width: 768px) {
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+ float: left;
+ }
+ .col-sm-12 {
+ width: 100%;
+ }
+ .col-sm-11 {
+ width: 91.66666667%;
+ }
+ .col-sm-10 {
+ width: 83.33333333%;
+ }
+ .col-sm-9 {
+ width: 75%;
+ }
+ .col-sm-8 {
+ width: 66.66666667%;
+ }
+ .col-sm-7 {
+ width: 58.33333333%;
+ }
+ .col-sm-6 {
+ width: 50%;
+ }
+ .col-sm-5 {
+ width: 41.66666667%;
+ }
+ .col-sm-4 {
+ width: 33.33333333%;
+ }
+ .col-sm-3 {
+ width: 25%;
+ }
+ .col-sm-2 {
+ width: 16.66666667%;
+ }
+ .col-sm-1 {
+ width: 8.33333333%;
+ }
+ .col-sm-pull-12 {
+ right: 100%;
+ }
+ .col-sm-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-sm-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-sm-pull-9 {
+ right: 75%;
+ }
+ .col-sm-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-sm-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-sm-pull-6 {
+ right: 50%;
+ }
+ .col-sm-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-sm-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-sm-pull-3 {
+ right: 25%;
+ }
+ .col-sm-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-sm-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-sm-pull-0 {
+ right: auto;
+ }
+ .col-sm-push-12 {
+ left: 100%;
+ }
+ .col-sm-push-11 {
+ left: 91.66666667%;
+ }
+ .col-sm-push-10 {
+ left: 83.33333333%;
+ }
+ .col-sm-push-9 {
+ left: 75%;
+ }
+ .col-sm-push-8 {
+ left: 66.66666667%;
+ }
+ .col-sm-push-7 {
+ left: 58.33333333%;
+ }
+ .col-sm-push-6 {
+ left: 50%;
+ }
+ .col-sm-push-5 {
+ left: 41.66666667%;
+ }
+ .col-sm-push-4 {
+ left: 33.33333333%;
+ }
+ .col-sm-push-3 {
+ left: 25%;
+ }
+ .col-sm-push-2 {
+ left: 16.66666667%;
+ }
+ .col-sm-push-1 {
+ left: 8.33333333%;
+ }
+ .col-sm-push-0 {
+ left: auto;
+ }
+ .col-sm-offset-12 {
+ margin-left: 100%;
+ }
+ .col-sm-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-sm-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-sm-offset-9 {
+ margin-left: 75%;
+ }
+ .col-sm-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-sm-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-sm-offset-6 {
+ margin-left: 50%;
+ }
+ .col-sm-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-sm-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-sm-offset-3 {
+ margin-left: 25%;
+ }
+ .col-sm-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-sm-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-sm-offset-0 {
+ margin-left: 0;
+ }
+}
+@media (min-width: 992px) {
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+ float: left;
+ }
+ .col-md-12 {
+ width: 100%;
+ }
+ .col-md-11 {
+ width: 91.66666667%;
+ }
+ .col-md-10 {
+ width: 83.33333333%;
+ }
+ .col-md-9 {
+ width: 75%;
+ }
+ .col-md-8 {
+ width: 66.66666667%;
+ }
+ .col-md-7 {
+ width: 58.33333333%;
+ }
+ .col-md-6 {
+ width: 50%;
+ }
+ .col-md-5 {
+ width: 41.66666667%;
+ }
+ .col-md-4 {
+ width: 33.33333333%;
+ }
+ .col-md-3 {
+ width: 25%;
+ }
+ .col-md-2 {
+ width: 16.66666667%;
+ }
+ .col-md-1 {
+ width: 8.33333333%;
+ }
+ .col-md-pull-12 {
+ right: 100%;
+ }
+ .col-md-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-md-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-md-pull-9 {
+ right: 75%;
+ }
+ .col-md-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-md-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-md-pull-6 {
+ right: 50%;
+ }
+ .col-md-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-md-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-md-pull-3 {
+ right: 25%;
+ }
+ .col-md-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-md-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-md-pull-0 {
+ right: auto;
+ }
+ .col-md-push-12 {
+ left: 100%;
+ }
+ .col-md-push-11 {
+ left: 91.66666667%;
+ }
+ .col-md-push-10 {
+ left: 83.33333333%;
+ }
+ .col-md-push-9 {
+ left: 75%;
+ }
+ .col-md-push-8 {
+ left: 66.66666667%;
+ }
+ .col-md-push-7 {
+ left: 58.33333333%;
+ }
+ .col-md-push-6 {
+ left: 50%;
+ }
+ .col-md-push-5 {
+ left: 41.66666667%;
+ }
+ .col-md-push-4 {
+ left: 33.33333333%;
+ }
+ .col-md-push-3 {
+ left: 25%;
+ }
+ .col-md-push-2 {
+ left: 16.66666667%;
+ }
+ .col-md-push-1 {
+ left: 8.33333333%;
+ }
+ .col-md-push-0 {
+ left: auto;
+ }
+ .col-md-offset-12 {
+ margin-left: 100%;
+ }
+ .col-md-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-md-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-md-offset-9 {
+ margin-left: 75%;
+ }
+ .col-md-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-md-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-md-offset-6 {
+ margin-left: 50%;
+ }
+ .col-md-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-md-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-md-offset-3 {
+ margin-left: 25%;
+ }
+ .col-md-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-md-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-md-offset-0 {
+ margin-left: 0;
+ }
+}
+@media (min-width: 1200px) {
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+ float: left;
+ }
+ .col-lg-12 {
+ width: 100%;
+ }
+ .col-lg-11 {
+ width: 91.66666667%;
+ }
+ .col-lg-10 {
+ width: 83.33333333%;
+ }
+ .col-lg-9 {
+ width: 75%;
+ }
+ .col-lg-8 {
+ width: 66.66666667%;
+ }
+ .col-lg-7 {
+ width: 58.33333333%;
+ }
+ .col-lg-6 {
+ width: 50%;
+ }
+ .col-lg-5 {
+ width: 41.66666667%;
+ }
+ .col-lg-4 {
+ width: 33.33333333%;
+ }
+ .col-lg-3 {
+ width: 25%;
+ }
+ .col-lg-2 {
+ width: 16.66666667%;
+ }
+ .col-lg-1 {
+ width: 8.33333333%;
+ }
+ .col-lg-pull-12 {
+ right: 100%;
+ }
+ .col-lg-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-lg-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-lg-pull-9 {
+ right: 75%;
+ }
+ .col-lg-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-lg-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-lg-pull-6 {
+ right: 50%;
+ }
+ .col-lg-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-lg-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-lg-pull-3 {
+ right: 25%;
+ }
+ .col-lg-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-lg-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-lg-pull-0 {
+ right: auto;
+ }
+ .col-lg-push-12 {
+ left: 100%;
+ }
+ .col-lg-push-11 {
+ left: 91.66666667%;
+ }
+ .col-lg-push-10 {
+ left: 83.33333333%;
+ }
+ .col-lg-push-9 {
+ left: 75%;
+ }
+ .col-lg-push-8 {
+ left: 66.66666667%;
+ }
+ .col-lg-push-7 {
+ left: 58.33333333%;
+ }
+ .col-lg-push-6 {
+ left: 50%;
+ }
+ .col-lg-push-5 {
+ left: 41.66666667%;
+ }
+ .col-lg-push-4 {
+ left: 33.33333333%;
+ }
+ .col-lg-push-3 {
+ left: 25%;
+ }
+ .col-lg-push-2 {
+ left: 16.66666667%;
+ }
+ .col-lg-push-1 {
+ left: 8.33333333%;
+ }
+ .col-lg-push-0 {
+ left: auto;
+ }
+ .col-lg-offset-12 {
+ margin-left: 100%;
+ }
+ .col-lg-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-lg-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-lg-offset-9 {
+ margin-left: 75%;
+ }
+ .col-lg-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-lg-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-lg-offset-6 {
+ margin-left: 50%;
+ }
+ .col-lg-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-lg-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-lg-offset-3 {
+ margin-left: 25%;
+ }
+ .col-lg-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-lg-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-lg-offset-0 {
+ margin-left: 0;
+ }
+}
+*/
+
+table {
+ background-color: transparent;
+}
+
+caption {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ color: #777;
+ text-align: left;
+}
+
+th {
+ text-align: left;
+}
+
+.table {
+ //width: 100%;
+ //max-width: 100%;
+ margin-bottom: 20px;
+}
+
+.table>thead>tr>th,
+.table>tbody>tr>th,
+.table>tfoot>tr>th,
+.table>thead>tr>td,
+.table>tbody>tr>td,
+.table>tfoot>tr>td {
+ padding: 8px;
+ line-height: 1.42857143;
+ vertical-align: top;
+ border-top: 1px solid #ddd;
+}
+
+.table>thead>tr>th {
+ vertical-align: middle;
+ border-bottom: 2px solid #ddd;
+}
+
+.table>caption+thead>tr:first-child>th,
+.table>colgroup+thead>tr:first-child>th,
+.table>thead:first-child>tr:first-child>th,
+.table>caption+thead>tr:first-child>td,
+.table>colgroup+thead>tr:first-child>td,
+.table>thead:first-child>tr:first-child>td {
+ border-top: 0;
+}
+
+.table>tbody+tbody {
+ border-top: 2px solid #ddd;
+}
+
+.table .table {
+ background-color: #fff;
+}
+
+.table-condensed>thead>tr>th,
+.table-condensed>tbody>tr>th,
+.table-condensed>tfoot>tr>th,
+.table-condensed>thead>tr>td,
+.table-condensed>tbody>tr>td,
+.table-condensed>tfoot>tr>td {
+ padding: 5px;
+}
+
+.table-bordered {
+ border: 1px solid #000;
+}
+
+.table-bordered>thead>tr>th,
+.table-bordered>tbody>tr>th,
+.table-bordered>tfoot>tr>th,
+.table-bordered>thead>tr>td,
+.table-bordered>tbody>tr>td,
+.table-bordered>tfoot>tr>td {
+ border: 1px solid #000;
+}
+
+.table-bordered>thead>tr>th,
+.table-bordered>thead>tr>td {
+ border-bottom-width: 2px;
+}
+
+.table-striped>tbody>tr:nth-child(odd) {
+ background-color: #f9f9f9;
+}
+
+.table-hover>tbody>tr:hover {
+ background-color: #f5f5f5;
+}
+
+table col[class*="col-"] {
+ position: static;
+ display: table-column;
+ float: none;
+}
+
+table td[class*="col-"],
+table th[class*="col-"] {
+ position: static;
+ display: table-cell;
+ float: none;
+}
+
+.table>thead>tr>td.active,
+.table>tbody>tr>td.active,
+.table>tfoot>tr>td.active,
+.table>thead>tr>th.active,
+.table>tbody>tr>th.active,
+.table>tfoot>tr>th.active,
+.table>thead>tr.active>td,
+.table>tbody>tr.active>td,
+.table>tfoot>tr.active>td,
+.table>thead>tr.active>th,
+.table>tbody>tr.active>th,
+.table>tfoot>tr.active>th {
+ background-color: #f5f5f5;
+}
+
+.table-hover>tbody>tr>td.active:hover,
+.table-hover>tbody>tr>th.active:hover,
+.table-hover>tbody>tr.active:hover>td,
+.table-hover>tbody>tr:hover>.active,
+.table-hover>tbody>tr.active:hover>th {
+ background-color: #e8e8e8;
+}
+
+.table>thead>tr>td.success,
+.table>tbody>tr>td.success,
+.table>tfoot>tr>td.success,
+.table>thead>tr>th.success,
+.table>tbody>tr>th.success,
+.table>tfoot>tr>th.success,
+.table>thead>tr.success>td,
+.table>tbody>tr.success>td,
+.table>tfoot>tr.success>td,
+.table>thead>tr.success>th,
+.table>tbody>tr.success>th,
+.table>tfoot>tr.success>th {
+ background-color: #dff0d8;
+}
+
+.table-hover>tbody>tr>td.success:hover,
+.table-hover>tbody>tr>th.success:hover,
+.table-hover>tbody>tr.success:hover>td,
+.table-hover>tbody>tr:hover>.success,
+.table-hover>tbody>tr.success:hover>th {
+ background-color: #d0e9c6;
+}
+
+.table>thead>tr>td.info,
+.table>tbody>tr>td.info,
+.table>tfoot>tr>td.info,
+.table>thead>tr>th.info,
+.table>tbody>tr>th.info,
+.table>tfoot>tr>th.info,
+.table>thead>tr.info>td,
+.table>tbody>tr.info>td,
+.table>tfoot>tr.info>td,
+.table>thead>tr.info>th,
+.table>tbody>tr.info>th,
+.table>tfoot>tr.info>th {
+ background-color: #d9edf7;
+}
+
+.table-hover>tbody>tr>td.info:hover,
+.table-hover>tbody>tr>th.info:hover,
+.table-hover>tbody>tr.info:hover>td,
+.table-hover>tbody>tr:hover>.info,
+.table-hover>tbody>tr.info:hover>th {
+ background-color: #c4e3f3;
+}
+
+.table>thead>tr>td.warning,
+.table>tbody>tr>td.warning,
+.table>tfoot>tr>td.warning,
+.table>thead>tr>th.warning,
+.table>tbody>tr>th.warning,
+.table>tfoot>tr>th.warning,
+.table>thead>tr.warning>td,
+.table>tbody>tr.warning>td,
+.table>tfoot>tr.warning>td,
+.table>thead>tr.warning>th,
+.table>tbody>tr.warning>th,
+.table>tfoot>tr.warning>th {
+ background-color: #fcf8e3;
+}
+
+.table-hover>tbody>tr>td.warning:hover,
+.table-hover>tbody>tr>th.warning:hover,
+.table-hover>tbody>tr.warning:hover>td,
+.table-hover>tbody>tr:hover>.warning,
+.table-hover>tbody>tr.warning:hover>th {
+ background-color: #faf2cc;
+}
+
+.table>thead>tr>td.danger,
+.table>tbody>tr>td.danger,
+.table>tfoot>tr>td.danger,
+.table>thead>tr>th.danger,
+.table>tbody>tr>th.danger,
+.table>tfoot>tr>th.danger,
+.table>thead>tr.danger>td,
+.table>tbody>tr.danger>td,
+.table>tfoot>tr.danger>td,
+.table>thead>tr.danger>th,
+.table>tbody>tr.danger>th,
+.table>tfoot>tr.danger>th {
+ background-color: #f2dede;
+}
+
+.table-hover>tbody>tr>td.danger:hover,
+.table-hover>tbody>tr>th.danger:hover,
+.table-hover>tbody>tr.danger:hover>td,
+.table-hover>tbody>tr:hover>.danger,
+.table-hover>tbody>tr.danger:hover>th {
+ background-color: #ebcccc;
+}
+
+.table-responsive {
+ min-height: .01%;
+ overflow-x: auto;
+}
+
+@media screen and (max-width: 767px) {
+ .table-responsive {
+ width: 100%;
+ margin-bottom: 15px;
+ overflow-y: hidden;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ border: 1px solid #ddd;
+ }
+
+ .table-responsive>.table {
+ margin-bottom: 0;
+ }
+
+ .table-responsive>.table>thead>tr>th,
+ .table-responsive>.table>tbody>tr>th,
+ .table-responsive>.table>tfoot>tr>th,
+ .table-responsive>.table>thead>tr>td,
+ .table-responsive>.table>tbody>tr>td,
+ .table-responsive>.table>tfoot>tr>td {
+ white-space: nowrap;
+ }
+
+ .table-responsive>.table-bordered {
+ border: 0;
+ }
+
+ .table-responsive>.table-bordered>thead>tr>th:first-child,
+ .table-responsive>.table-bordered>tbody>tr>th:first-child,
+ .table-responsive>.table-bordered>tfoot>tr>th:first-child,
+ .table-responsive>.table-bordered>thead>tr>td:first-child,
+ .table-responsive>.table-bordered>tbody>tr>td:first-child,
+ .table-responsive>.table-bordered>tfoot>tr>td:first-child {
+ border-left: 0;
+ }
+
+ .table-responsive>.table-bordered>thead>tr>th:last-child,
+ .table-responsive>.table-bordered>tbody>tr>th:last-child,
+ .table-responsive>.table-bordered>tfoot>tr>th:last-child,
+ .table-responsive>.table-bordered>thead>tr>td:last-child,
+ .table-responsive>.table-bordered>tbody>tr>td:last-child,
+ .table-responsive>.table-bordered>tfoot>tr>td:last-child {
+ border-right: 0;
+ }
+
+ .table-responsive>.table-bordered>tbody>tr:last-child>th,
+ .table-responsive>.table-bordered>tfoot>tr:last-child>th,
+ .table-responsive>.table-bordered>tbody>tr:last-child>td,
+ .table-responsive>.table-bordered>tfoot>tr:last-child>td {
+ border-bottom: 0;
+ }
+}
+
+fieldset {
+ min-width: 0;
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: inherit;
+ color: #333;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+label {
+ display: inline-block;
+ max-width: 100%;
+ margin-bottom: 5px;
+ font-weight: bold;
+}
+
+input[type="search"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+input[type="radio"],
+input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9;
+ line-height: normal;
+}
+
+input[type="file"] {
+ display: block;
+}
+
+input[type="range"] {
+ display: block;
+ width: 100%;
+}
+
+select[multiple],
+select[size] {
+ height: auto;
+}
+
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+output {
+ display: block;
+ padding-top: 7px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+}
+
+.form-control {
+ display: block;
+ width: 100%;
+ height: 34px;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #000;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
+ -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+
+.form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
+}
+
+.form-control::-moz-placeholder {
+ color: #999;
+ opacity: 1;
+}
+
+.form-control:-ms-input-placeholder {
+ color: #999;
+}
+
+.form-control::-webkit-input-placeholder {
+ color: #999;
+}
+
+.form-control[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+ cursor: not-allowed;
+ background-color: #eee;
+ opacity: 1;
+}
+
+textarea.form-control {
+ height: auto;
+}
+
+input[type="search"] {
+ -webkit-appearance: none;
+}
+
+input[type="date"],
+input[type="time"],
+input[type="datetime-local"],
+input[type="month"] {
+ line-height: 34px;
+ line-height: 1.42857143 \0;
+}
+
+input[type="date"].input-sm,
+input[type="time"].input-sm,
+input[type="datetime-local"].input-sm,
+input[type="month"].input-sm {
+ line-height: 30px;
+ line-height: 1.5 \0;
+}
+
+input[type="date"].input-lg,
+input[type="time"].input-lg,
+input[type="datetime-local"].input-lg,
+input[type="month"].input-lg {
+ line-height: 46px;
+ line-height: 1.33 \0;
+}
+
+_:-ms-fullscreen,
+:root input[type="date"],
+_:-ms-fullscreen,
+:root input[type="time"],
+_:-ms-fullscreen,
+:root input[type="datetime-local"],
+_:-ms-fullscreen,
+:root input[type="month"] {
+ line-height: 1.42857143;
+}
+
+_:-ms-fullscreen.input-sm,
+:root input[type="date"].input-sm,
+_:-ms-fullscreen.input-sm,
+:root input[type="time"].input-sm,
+_:-ms-fullscreen.input-sm,
+:root input[type="datetime-local"].input-sm,
+_:-ms-fullscreen.input-sm,
+:root input[type="month"].input-sm {
+ line-height: 1.5;
+}
+
+_:-ms-fullscreen.input-lg,
+:root input[type="date"].input-lg,
+_:-ms-fullscreen.input-lg,
+:root input[type="time"].input-lg,
+_:-ms-fullscreen.input-lg,
+:root input[type="datetime-local"].input-lg,
+_:-ms-fullscreen.input-lg,
+:root input[type="month"].input-lg {
+ line-height: 1.33;
+}
+
+.form-group {
+ margin-bottom: 15px;
+}
+
+.radio,
+.checkbox {
+ position: relative;
+ display: block;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.radio label,
+.checkbox label {
+ min-height: 20px;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ cursor: pointer;
+}
+
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+ position: absolute;
+ margin-top: 4px \9;
+ margin-left: -20px;
+}
+
+.radio+.radio,
+.checkbox+.checkbox {
+ margin-top: -5px;
+}
+
+.radio-inline,
+.checkbox-inline {
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ vertical-align: middle;
+ cursor: pointer;
+}
+
+.radio-inline+.radio-inline,
+.checkbox-inline+.checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px;
+}
+
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+input[type="radio"].disabled,
+input[type="checkbox"].disabled,
+fieldset[disabled] input[type="radio"],
+fieldset[disabled] input[type="checkbox"] {
+ cursor: not-allowed;
+}
+
+.radio-inline.disabled,
+.checkbox-inline.disabled,
+fieldset[disabled] .radio-inline,
+fieldset[disabled] .checkbox-inline {
+ cursor: not-allowed;
+}
+
+.radio.disabled label,
+.checkbox.disabled label,
+fieldset[disabled] .radio label,
+fieldset[disabled] .checkbox label {
+ cursor: not-allowed;
+}
+
+.form-control-static {
+ padding-top: 7px;
+ padding-bottom: 7px;
+ margin-bottom: 0;
+}
+
+.form-control-static.input-lg,
+.form-control-static.input-sm {
+ padding-right: 0;
+ padding-left: 0;
+}
+
+.input-sm,
+.form-group-sm .form-control {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+select.input-sm,
+select.form-group-sm .form-control {
+ height: 30px;
+ line-height: 30px;
+}
+
+textarea.input-sm,
+textarea.form-group-sm .form-control,
+select[multiple].input-sm,
+select[multiple].form-group-sm .form-control {
+ height: auto;
+}
+
+.input-lg,
+.form-group-lg .form-control {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+
+select.input-lg,
+select.form-group-lg .form-control {
+ height: 46px;
+ line-height: 46px;
+}
+
+textarea.input-lg,
+textarea.form-group-lg .form-control,
+select[multiple].input-lg,
+select[multiple].form-group-lg .form-control {
+ height: auto;
+}
+
+.has-feedback {
+ position: relative;
+}
+
+.has-feedback .form-control {
+ padding-right: 42.5px;
+}
+
+.form-control-feedback {
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 2;
+ display: block;
+ width: 34px;
+ height: 34px;
+ line-height: 34px;
+ text-align: center;
+ pointer-events: none;
+}
+
+.input-lg+.form-control-feedback {
+ width: 46px;
+ height: 46px;
+ line-height: 46px;
+}
+
+.input-sm+.form-control-feedback {
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+}
+
+.has-success .help-block,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline,
+.has-success.radio label,
+.has-success.checkbox label,
+.has-success.radio-inline label,
+.has-success.checkbox-inline label {
+ color: #3c763d;
+}
+
+.has-success .form-control {
+ border-color: #3c763d;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+
+.has-success .form-control:focus {
+ border-color: #2b542c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+}
+
+.has-success .input-group-addon {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #3c763d;
+}
+
+.has-success .form-control-feedback {
+ color: #3c763d;
+}
+
+.has-warning .help-block,
+.has-warning .control-label,
+.has-warning .radio,
+.has-warning .checkbox,
+.has-warning .radio-inline,
+.has-warning .checkbox-inline,
+.has-warning.radio label,
+.has-warning.checkbox label,
+.has-warning.radio-inline label,
+.has-warning.checkbox-inline label {
+ color: #8a6d3b;
+}
+
+.has-warning .form-control {
+ border-color: #8a6d3b;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+
+.has-warning .form-control:focus {
+ border-color: #66512c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+}
+
+.has-warning .input-group-addon {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #8a6d3b;
+}
+
+.has-warning .form-control-feedback {
+ color: #8a6d3b;
+}
+
+.has-error .help-block,
+.has-error .control-label,
+.has-error .radio,
+.has-error .checkbox,
+.has-error .radio-inline,
+.has-error .checkbox-inline,
+.has-error.radio label,
+.has-error.checkbox label,
+.has-error.radio-inline label,
+.has-error.checkbox-inline label {
+ color: #a94442;
+}
+
+.has-error .form-control {
+ border-color: #a94442;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+
+.has-error .form-control:focus {
+ border-color: #843534;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+}
+
+.has-error .input-group-addon {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #a94442;
+}
+
+.has-error .form-control-feedback {
+ color: #a94442;
+}
+
+.has-feedback label~.form-control-feedback {
+ top: 25px;
+}
+
+.has-feedback label.sr-only~.form-control-feedback {
+ top: 0;
+}
+
+.help-block {
+ display: block;
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: #737373;
+}
+
+@media (min-width: 768px) {
+ .form-inline .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .form-inline .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+
+ .form-inline .form-control-static {
+ display: inline-block;
+ }
+
+ .form-inline .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+
+ .form-inline .input-group .input-group-addon,
+ .form-inline .input-group .input-group-btn,
+ .form-inline .input-group .form-control {
+ width: auto;
+ }
+
+ .form-inline .input-group>.form-control {
+ width: 100%;
+ }
+
+ .form-inline .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .form-inline .radio,
+ .form-inline .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .form-inline .radio label,
+ .form-inline .checkbox label {
+ padding-left: 0;
+ }
+
+ .form-inline .radio input[type="radio"],
+ .form-inline .checkbox input[type="checkbox"] {
+ position: relative;
+ margin-left: 0;
+ }
+
+ .form-inline .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+
+.form-horizontal .radio,
+.form-horizontal .checkbox,
+.form-horizontal .radio-inline,
+.form-horizontal .checkbox-inline {
+ padding-top: 7px;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.form-horizontal .radio,
+.form-horizontal .checkbox {
+ min-height: 27px;
+}
+
+.form-horizontal .form-group {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+.form-horizontal .control-label {
+ padding-top: 7px;
+ margin-bottom: 0;
+ text-align: right;
+}
+
+.form-horizontal .has-feedback .form-control-feedback {
+ right: 15px;
+}
+
+@media (min-width: 768px) {
+ .form-horizontal .form-group-lg .control-label {
+ padding-top: 14.3px;
+ }
+}
+
+@media (min-width: 768px) {
+ .form-horizontal .form-group-sm .control-label {
+ padding-top: 6px;
+ }
+}
+
+.btn {
+ display: inline-block;
+ padding: 6px 12px;
+ margin-bottom: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ -ms-touch-action: manipulation;
+ touch-action: manipulation;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+
+.btn:focus,
+.btn:active:focus,
+.btn.active:focus,
+.btn.focus,
+.btn:active.focus,
+.btn.active.focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+.btn:hover,
+.btn:focus,
+.btn.focus {
+ color: #333;
+ text-decoration: none;
+}
+
+.btn:active,
+.btn.active {
+ background-image: none;
+ outline: 0;
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+
+.btn.disabled,
+.btn[disabled],
+fieldset[disabled] .btn {
+ pointer-events: none;
+ cursor: not-allowed;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ opacity: .65;
+}
+
+.btn-default {
+ color: #333;
+ background-color: #fff;
+ border-color: #ccc;
+}
+
+.btn-default:hover,
+.btn-default:focus,
+.btn-default.focus,
+.btn-default:active,
+.btn-default.active,
+.open>.dropdown-toggle.btn-default {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
+
+.btn-default:active,
+.btn-default.active,
+.open>.dropdown-toggle.btn-default {
+ background-image: none;
+}
+
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+ background-color: #fff;
+ border-color: #ccc;
+}
+
+.btn-default .badge {
+ color: #fff;
+ background-color: #333;
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #369;
+ border-color: #357ebd;
+}
+
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary.focus,
+.btn-primary:active,
+.btn-primary.active,
+.open>.dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #3071a9;
+ border-color: #285e8e;
+}
+
+.btn-primary:active,
+.btn-primary.active,
+.open>.dropdown-toggle.btn-primary {
+ background-image: none;
+}
+
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+ background-color: #428bca;
+ border-color: #357ebd;
+}
+
+.btn-primary .badge {
+ color: #428bca;
+ background-color: #fff;
+}
+
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+
+.btn-success:hover,
+.btn-success:focus,
+.btn-success.focus,
+.btn-success:active,
+.btn-success.active,
+.open>.dropdown-toggle.btn-success {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #398439;
+}
+
+.btn-success:active,
+.btn-success.active,
+.open>.dropdown-toggle.btn-success {
+ background-image: none;
+}
+
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+
+.btn-success .badge {
+ color: #5cb85c;
+ background-color: #fff;
+}
+
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+
+.btn-info:hover,
+.btn-info:focus,
+.btn-info.focus,
+.btn-info:active,
+.btn-info.active,
+.open>.dropdown-toggle.btn-info {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #269abc;
+}
+
+.btn-info:active,
+.btn-info.active,
+.open>.dropdown-toggle.btn-info {
+ background-image: none;
+}
+
+.btn-info.disabled,
+.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+
+.btn-info .badge {
+ color: #5bc0de;
+ background-color: #fff;
+}
+
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+
+.btn-warning:hover,
+.btn-warning:focus,
+.btn-warning.focus,
+.btn-warning:active,
+.btn-warning.active,
+.open>.dropdown-toggle.btn-warning {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #d58512;
+}
+
+.btn-warning:active,
+.btn-warning.active,
+.open>.dropdown-toggle.btn-warning {
+ background-image: none;
+}
+
+.btn-warning.disabled,
+.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+
+.btn-warning .badge {
+ color: #f0ad4e;
+ background-color: #fff;
+}
+
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+
+.btn-danger:hover,
+.btn-danger:focus,
+.btn-danger.focus,
+.btn-danger:active,
+.btn-danger.active,
+.open>.dropdown-toggle.btn-danger {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #ac2925;
+}
+
+.btn-danger:active,
+.btn-danger.active,
+.open>.dropdown-toggle.btn-danger {
+ background-image: none;
+}
+
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+
+.btn-danger .badge {
+ color: #d9534f;
+ background-color: #fff;
+}
+
+.btn-link {
+ font-weight: normal;
+ color: #428bca;
+ border-radius: 0;
+}
+
+.btn-link,
+.btn-link:active,
+.btn-link.active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.btn-link,
+.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+ border-color: transparent;
+}
+
+.btn-link:hover,
+.btn-link:focus {
+ color: #2a6496;
+ text-decoration: underline;
+ background-color: transparent;
+}
+
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+ color: #777;
+ text-decoration: none;
+}
+
+.btn-lg,
+.btn-group-lg>.btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+
+.btn-sm,
+.btn-group-sm>.btn {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+.btn-xs,
+.btn-group-xs>.btn {
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+.btn-block {
+ display: block;
+ width: 100%;
+}
+
+.btn-block+.btn-block {
+ margin-top: 5px;
+}
+
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+ width: 100%;
+}
+
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity .15s linear;
+ -o-transition: opacity .15s linear;
+ transition: opacity .15s linear;
+}
+
+.fade.in {
+ opacity: 1;
+}
+
+.collapse {
+ display: none;
+ visibility: hidden;
+}
+
+.collapse.in {
+ display: block;
+ visibility: visible;
+}
+
+tr.collapse.in {
+ display: table-row;
+}
+
+tbody.collapse.in {
+ display: table-row-group;
+}
+
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition-timing-function: ease;
+ -o-transition-timing-function: ease;
+ transition-timing-function: ease;
+ -webkit-transition-duration: .35s;
+ -o-transition-duration: .35s;
+ transition-duration: .35s;
+ -webkit-transition-property: height, visibility;
+ -o-transition-property: height, visibility;
+ transition-property: height, visibility;
+}
+
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px solid;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+}
+
+.dropdown {
+ position: relative;
+}
+
+.dropdown-toggle:focus {
+ outline: 0;
+}
+
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ font-size: 14px;
+ text-align: left;
+ list-style: none;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+}
+
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+
+.dropdown-menu>li>a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.42857143;
+ color: #333;
+ white-space: nowrap;
+}
+
+.dropdown-menu>li>a:hover,
+.dropdown-menu>li>a:focus {
+ color: #262626;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+
+.dropdown-menu>.active>a,
+.dropdown-menu>.active>a:hover,
+.dropdown-menu>.active>a:focus {
+ color: #fff;
+ text-decoration: none;
+ background-color: #428bca;
+ outline: 0;
+}
+
+.dropdown-menu>.disabled>a,
+.dropdown-menu>.disabled>a:hover,
+.dropdown-menu>.disabled>a:focus {
+ color: #777;
+}
+
+.dropdown-menu>.disabled>a:hover,
+.dropdown-menu>.disabled>a:focus {
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.open>.dropdown-menu {
+ display: block;
+}
+
+.open>a {
+ outline: 0;
+}
+
+.dropdown-menu-right {
+ right: 0;
+ left: auto;
+}
+
+.dropdown-menu-left {
+ right: auto;
+ left: 0;
+}
+
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.42857143;
+ color: #777;
+ white-space: nowrap;
+}
+
+.dropdown-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 990;
+}
+
+.pull-right>.dropdown-menu {
+ right: 0;
+ left: auto;
+}
+
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+ content: "";
+ border-top: 0;
+ border-bottom: 4px solid;
+}
+
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 1px;
+}
+
+@media (min-width: 768px) {
+ .navbar-right .dropdown-menu {
+ right: 0;
+ left: auto;
+ }
+
+ .navbar-right .dropdown-menu-left {
+ right: auto;
+ left: 0;
+ }
+}
+
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.btn-group>.btn,
+.btn-group-vertical>.btn {
+ position: relative;
+ float: left;
+}
+
+.btn-group>.btn:hover,
+.btn-group-vertical>.btn:hover,
+.btn-group>.btn:focus,
+.btn-group-vertical>.btn:focus,
+.btn-group>.btn:active,
+.btn-group-vertical>.btn:active,
+.btn-group>.btn.active,
+.btn-group-vertical>.btn.active {
+ z-index: 2;
+}
+
+.btn-group>.btn:focus,
+.btn-group-vertical>.btn:focus {
+ outline: 0;
+}
+
+.btn-group .btn+.btn,
+.btn-group .btn+.btn-group,
+.btn-group .btn-group+.btn,
+.btn-group .btn-group+.btn-group {
+ margin-left: -1px;
+}
+
+.btn-toolbar {
+ margin-left: -5px;
+}
+
+.btn-toolbar .btn-group,
+.btn-toolbar .input-group {
+ float: left;
+}
+
+.btn-toolbar>.btn,
+.btn-toolbar>.btn-group,
+.btn-toolbar>.input-group {
+ margin-left: 5px;
+}
+
+.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0;
+}
+
+.btn-group>.btn:first-child {
+ margin-left: 0;
+}
+
+.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.btn-group>.btn:last-child:not(:first-child),
+.btn-group>.dropdown-toggle:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group>.btn-group {
+ float: left;
+}
+
+.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn {
+ border-radius: 0;
+}
+
+.btn-group>.btn-group:first-child>.btn:last-child,
+.btn-group>.btn-group:first-child>.dropdown-toggle {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.btn-group>.btn-group:last-child>.btn:first-child {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+
+.btn-group>.btn+.dropdown-toggle {
+ padding-right: 8px;
+ padding-left: 8px;
+}
+
+.btn-group>.btn-lg+.dropdown-toggle {
+ padding-right: 12px;
+ padding-left: 12px;
+}
+
+.btn-group.open .dropdown-toggle {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+
+.btn-group.open .dropdown-toggle.btn-link {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.btn .caret {
+ margin-left: 0;
+}
+
+.btn-lg .caret {
+ border-width: 5px 5px 0;
+ border-bottom-width: 0;
+}
+
+.dropup .btn-lg .caret {
+ border-width: 0 5px 5px;
+}
+
+.btn-group-vertical>.btn,
+.btn-group-vertical>.btn-group,
+.btn-group-vertical>.btn-group>.btn {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+}
+
+.btn-group-vertical>.btn-group>.btn {
+ float: none;
+}
+
+.btn-group-vertical>.btn+.btn,
+.btn-group-vertical>.btn+.btn-group,
+.btn-group-vertical>.btn-group+.btn,
+.btn-group-vertical>.btn-group+.btn-group {
+ margin-top: -1px;
+ margin-left: 0;
+}
+
+.btn-group-vertical>.btn:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+
+.btn-group-vertical>.btn:first-child:not(:last-child) {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group-vertical>.btn:last-child:not(:first-child) {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 4px;
+}
+
+.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn {
+ border-radius: 0;
+}
+
+.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,
+.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate;
+}
+
+.btn-group-justified>.btn,
+.btn-group-justified>.btn-group {
+ display: table-cell;
+ float: none;
+ width: 1%;
+}
+
+.btn-group-justified>.btn-group .btn {
+ width: 100%;
+}
+
+.btn-group-justified>.btn-group .dropdown-menu {
+ left: auto;
+}
+
+[data-toggle="buttons"]>.btn input[type="radio"],
+[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],
+[data-toggle="buttons"]>.btn input[type="checkbox"],
+[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"] {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ pointer-events: none;
+}
+
+.input-group {
+ position: relative;
+ display: table;
+ border-collapse: separate;
+}
+
+.input-group[class*="col-"] {
+ float: none;
+ padding-right: 0;
+ padding-left: 0;
+}
+
+.input-group .form-control {
+ position: relative;
+ z-index: 2;
+ float: left;
+ width: 100%;
+ margin-bottom: 0;
+}
+
+.input-group-lg>.form-control,
+.input-group-lg>.input-group-addon,
+.input-group-lg>.input-group-btn>.btn {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+
+select.input-group-lg>.form-control,
+select.input-group-lg>.input-group-addon,
+select.input-group-lg>.input-group-btn>.btn {
+ height: 46px;
+ line-height: 46px;
+}
+
+textarea.input-group-lg>.form-control,
+textarea.input-group-lg>.input-group-addon,
+textarea.input-group-lg>.input-group-btn>.btn,
+select[multiple].input-group-lg>.form-control,
+select[multiple].input-group-lg>.input-group-addon,
+select[multiple].input-group-lg>.input-group-btn>.btn {
+ height: auto;
+}
+
+.input-group-sm>.form-control,
+.input-group-sm>.input-group-addon,
+.input-group-sm>.input-group-btn>.btn {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+select.input-group-sm>.form-control,
+select.input-group-sm>.input-group-addon,
+select.input-group-sm>.input-group-btn>.btn {
+ height: 30px;
+ line-height: 30px;
+}
+
+textarea.input-group-sm>.form-control,
+textarea.input-group-sm>.input-group-addon,
+textarea.input-group-sm>.input-group-btn>.btn,
+select[multiple].input-group-sm>.form-control,
+select[multiple].input-group-sm>.input-group-addon,
+select[multiple].input-group-sm>.input-group-btn>.btn {
+ height: auto;
+}
+
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+ display: table-cell;
+}
+
+.input-group-addon:not(:first-child):not(:last-child),
+.input-group-btn:not(:first-child):not(:last-child),
+.input-group .form-control:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+
+.input-group-addon,
+.input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+.input-group-addon {
+ padding: 6px 12px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1;
+ color: #555;
+ text-align: center;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+
+.input-group-addon.input-sm {
+ padding: 5px 10px;
+ font-size: 12px;
+ border-radius: 3px;
+}
+
+.input-group-addon.input-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ border-radius: 6px;
+}
+
+.input-group-addon input[type="radio"],
+.input-group-addon input[type="checkbox"] {
+ margin-top: 0;
+}
+
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child>.btn,
+.input-group-btn:first-child>.btn-group>.btn,
+.input-group-btn:first-child>.dropdown-toggle,
+.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),
+.input-group-btn:last-child>.btn-group:not(:last-child)>.btn {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.input-group-addon:first-child {
+ border-right: 0;
+}
+
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:last-child>.btn,
+.input-group-btn:last-child>.btn-group>.btn,
+.input-group-btn:last-child>.dropdown-toggle,
+.input-group-btn:first-child>.btn:not(:first-child),
+.input-group-btn:first-child>.btn-group:not(:first-child)>.btn {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.input-group-addon:last-child {
+ border-left: 0;
+}
+
+.input-group-btn {
+ position: relative;
+ font-size: 0;
+ white-space: nowrap;
+}
+
+.input-group-btn>.btn {
+ position: relative;
+}
+
+.input-group-btn>.btn+.btn {
+ margin-left: -1px;
+}
+
+.input-group-btn>.btn:hover,
+.input-group-btn>.btn:focus,
+.input-group-btn>.btn:active {
+ z-index: 2;
+}
+
+.input-group-btn:first-child>.btn,
+.input-group-btn:first-child>.btn-group {
+ margin-right: -1px;
+}
+
+.input-group-btn:last-child>.btn,
+.input-group-btn:last-child>.btn-group {
+ margin-left: -1px;
+}
+
+.nav {
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none;
+}
+
+.nav>li {
+ margin-right: 10px;
+ position: relative;
+ display: block;
+}
+
+.nav>li>a {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+}
+
+.nav>li>a:hover,
+.nav>li>a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+
+.nav>li.disabled>a {
+ color: #777;
+}
+
+.nav>li.disabled>a:hover,
+.nav>li.disabled>a:focus {
+ color: #777;
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+}
+
+.nav .open>a,
+.nav .open>a:hover,
+.nav .open>a:focus {
+ background-color: #eee;
+ border-color: #428bca;
+}
+
+.nav .nav-divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+
+.nav>li>a>img {
+ max-width: none;
+}
+
+.nav-tabs {
+ border-bottom: 1px solid #ddd;
+}
+
+.nav-tabs>li {
+ float: left;
+ margin-bottom: -1px;
+}
+
+.nav-tabs>li>a {
+ margin-right: 2px;
+ line-height: 1.42857143;
+ border: 1px solid transparent;
+ border-radius: 4px 4px 0 0;
+}
+
+.nav-tabs>li>a:hover {
+ border-color: #eee #eee #ddd;
+}
+
+.nav-tabs>li.active>a,
+.nav-tabs>li.active>a:hover,
+.nav-tabs>li.active>a:focus {
+ color: #555;
+ cursor: default;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+}
+
+.nav-tabs.nav-justified {
+ width: 100%;
+ border-bottom: 0;
+}
+
+.nav-tabs.nav-justified>li {
+ float: none;
+}
+
+.nav-tabs.nav-justified>li>a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+
+.nav-tabs.nav-justified>.dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+
+.nav-tabs.nav-justified>li {
+ display: table-cell;
+ width: 1%;
+}
+
+.nav-tabs.nav-justified>li>a {
+ margin-bottom: 0;
+}
+
+.nav-tabs.nav-justified>li>a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+
+.nav-tabs.nav-justified>.active>a,
+.nav-tabs.nav-justified>.active>a:hover,
+.nav-tabs.nav-justified>.active>a:focus {
+ border: 1px solid #ddd;
+}
+
+.nav-tabs.nav-justified>li>a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+}
+
+.nav-tabs.nav-justified>.active>a,
+.nav-tabs.nav-justified>.active>a:hover,
+.nav-tabs.nav-justified>.active>a:focus {
+ border-bottom-color: #fff;
+}
+
+.nav-pills>li {
+ float: left;
+}
+
+.nav-pills>li>a {
+ border-radius: 4px;
+}
+
+.nav-pills>li+li {
+ margin-left: 2px;
+}
+
+.nav-pills>li.active>a,
+.nav-pills>li.active>a:hover,
+.nav-pills>li.active>a:focus {
+ color: #fff;
+ background-color: #3071a9;
+ /* Tab cell background color */
+}
+
+.nav-stacked>li {
+ float: none;
+}
+
+.nav-stacked>li+li {
+ margin-top: 2px;
+ margin-left: 0;
+}
+
+.nav-justified {
+ width: 100%;
+}
+
+.nav-justified>li {
+ float: none;
+}
+
+.nav-justified>li>a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+
+.nav-justified>.dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+
+.nav-justified>li {
+ display: table-cell;
+ width: 1%;
+}
+
+.nav-justified>li>a {
+ margin-bottom: 0;
+}
+
+.nav-tabs-justified {
+ border-bottom: 0;
+}
+
+.nav-tabs-justified>li>a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+
+.nav-tabs-justified>.active>a,
+.nav-tabs-justified>.active>a:hover,
+.nav-tabs-justified>.active>a:focus {
+ border: 1px solid #ddd;
+}
+
+.nav-tabs-justified>li>a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+}
+
+.nav-tabs-justified>.active>a,
+.nav-tabs-justified>.active>a:hover,
+.nav-tabs-justified>.active>a:focus {
+ border-bottom-color: #fff;
+}
+
+.tab-content>.tab-pane {
+ display: none;
+ visibility: hidden;
+}
+
+.tab-content>.active {
+ display: block;
+ visibility: visible;
+}
+
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.navbar {
+ position: relative;
+ min-height: 30px;
+ border: 1px solid transparent;
+}
+
+/*
+@media (min-width: 768px) {
+ .navbar {
+ border-radius: 4px;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-header {
+ float: left;
+ }
+}
+*/
+
+.navbar-collapse {
+ padding-right: 15px;
+ padding-left: 15px;
+ overflow-x: visible;
+ -webkit-overflow-scrolling: touch;
+ border-top: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+}
+
+.navbar-collapse.in {
+ overflow-y: auto;
+}
+
+/*
+@media (min-width: 768px) {
+ .navbar-collapse {
+ width: auto;
+ border-top: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ .navbar-collapse.collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0;
+ overflow: visible !important;
+ visibility: visible !important;
+ }
+ .navbar-collapse.in {
+ overflow-y: visible;
+ }
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-static-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ padding-right: 0;
+ padding-left: 0;
+ }
+}
+*/
+
+.navbar-fixed-top .navbar-collapse,
+.navbar-fixed-bottom .navbar-collapse {
+ max-height: 340px;
+}
+
+@media (max-device-width: 480px) and (orientation: landscape) {
+
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ max-height: 200px;
+ }
+}
+
+.container>.navbar-header,
+.container-fluid>.navbar-header,
+.container>.navbar-collapse,
+.container-fluid>.navbar-collapse {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+@media (min-width: 768px) {
+
+ .container>.navbar-header,
+ .container-fluid>.navbar-header,
+ .container>.navbar-collapse,
+ .container-fluid>.navbar-collapse {
+ margin-right: 0;
+ margin-left: 0;
+ }
+}
+
+.navbar-static-top {
+ z-index: 1000;
+ border-width: 0 0 1px;
+}
+
+@media (min-width: 768px) {
+ .navbar-static-top {
+ border-radius: 0;
+ }
+}
+
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+}
+
+@media (min-width: 768px) {
+
+ .navbar-fixed-top,
+ .navbar-fixed-bottom {
+ border-radius: 0;
+ }
+}
+
+.navbar-fixed-top {
+ top: 0;
+ border-width: 0 0 1px;
+}
+
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0;
+ border-width: 1px 0 0;
+}
+
+.navbar-brand {
+ float: left;
+ height: 30px;
+ padding: 6px 15px;
+ font-size: 15px;
+ line-height: 18px;
+}
+
+.navbar-brand:hover,
+.navbar-brand:focus {
+ text-decoration: none;
+}
+
+.navbar-brand>img {
+ display: block;
+}
+
+@media (min-width: 768px) {
+
+ .navbar>.container .navbar-brand,
+ .navbar>.container-fluid .navbar-brand {
+ margin-left: -15px;
+ }
+}
+
+.navbar-toggle {
+ position: relative;
+ float: right;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-right: 15px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+
+.navbar-toggle:focus {
+ outline: 0;
+}
+
+.navbar-toggle .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px;
+}
+
+.navbar-toggle .icon-bar+.icon-bar {
+ margin-top: 4px;
+}
+
+@media (min-width: 768px) {
+ .navbar-toggle {
+ display: none;
+ }
+}
+
+.navbar-nav {
+ margin: 7.5px -15px;
+}
+
+.navbar-nav>li>a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px;
+}
+
+.navbar-nav>li,
+.navbar-nav {
+ float: left !important;
+}
+
+.navbar-nav.navbar-right:last-child {
+ margin-right: -15px !important;
+}
+
+.navbar-right {
+ float: right !important;
+}
+
+/*
+@media (max-width: 767px) {
+ .navbar-nav .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ .navbar-nav .open .dropdown-menu > li > a,
+ .navbar-nav .open .dropdown-menu .dropdown-header {
+ padding: 5px 15px 5px 25px;
+ }
+ .navbar-nav .open .dropdown-menu > li > a {
+ line-height: 20px;
+ }
+ .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-nav .open .dropdown-menu > li > a:focus {
+ background-image: none;
+ }
+}
+
+ .navbar-nav {
+ float: left;
+ margin: 0;
+ }
+ .navbar-nav > li {
+ float: left;
+ }
+ .navbar-nav > li > a {
+ padding-top: 15px;
+ padding-bottom: 15px;
+ }
+
+.navbar-form {
+ padding: 10px 15px;
+ margin-top: 8px;
+ margin-right: -15px;
+ margin-bottom: 8px;
+ margin-left: -15px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+}
+@media (min-width: 768px) {
+ .navbar-form .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+ .navbar-form .form-control-static {
+ display: inline-block;
+ }
+ .navbar-form .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+ .navbar-form .input-group .input-group-addon,
+ .navbar-form .input-group .input-group-btn,
+ .navbar-form .input-group .form-control {
+ width: auto;
+ }
+ .navbar-form .input-group > .form-control {
+ width: 100%;
+ }
+ .navbar-form .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .radio,
+ .navbar-form .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .radio label,
+ .navbar-form .checkbox label {
+ padding-left: 0;
+ }
+ .navbar-form .radio input[type="radio"],
+ .navbar-form .checkbox input[type="checkbox"] {
+ position: relative;
+ margin-left: 0;
+ }
+ .navbar-form .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+@media (max-width: 767px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px;
+ }
+ .navbar-form .form-group:last-child {
+ margin-bottom: 0;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-form {
+ width: auto;
+ padding-top: 0;
+ padding-bottom: 0;
+ margin-right: 0;
+ margin-left: 0;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+}
+*/
+
+.navbar-nav>li>.dropdown-menu {
+ margin-top: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.navbar-btn {
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+
+.navbar-btn.btn-sm {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.navbar-btn.btn-xs {
+ margin-top: 14px;
+ margin-bottom: 14px;
+}
+
+.navbar-text {
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+
+.navbar-text {
+ float: left;
+ margin-right: 15px;
+ margin-left: 15px;
+}
+
+
+.navbar-left {
+ float: left !important;
+}
+
+.navbar-right {
+ float: right !important;
+ margin-right: -15px;
+}
+
+.navbar-right~.navbar-right {
+ margin-right: 0;
+}
+
+.navbar-default {
+ background-color: #f8f8f8;
+ border-color: #e7e7e7;
+}
+
+.navbar-default .navbar-brand {
+ color: #777;
+}
+
+.navbar-default .navbar-brand:hover,
+.navbar-default .navbar-brand:focus {
+ color: #5e5e5e;
+ background-color: transparent;
+}
+
+.navbar-default .navbar-text {
+ color: #777;
+}
+
+.navbar-default .navbar-nav>li>a {
+ color: #777;
+}
+
+.navbar-default .navbar-nav>li>a:hover,
+.navbar-default .navbar-nav>li>a:focus {
+ color: #333;
+ background-color: transparent;
+}
+
+.navbar-default .navbar-nav>.active>a,
+.navbar-default .navbar-nav>.active>a:hover,
+.navbar-default .navbar-nav>.active>a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+
+.navbar-default .navbar-nav>.disabled>a,
+.navbar-default .navbar-nav>.disabled>a:hover,
+.navbar-default .navbar-nav>.disabled>a:focus {
+ color: #ccc;
+ background-color: transparent;
+}
+
+.navbar-default .navbar-toggle {
+ border-color: #ddd;
+}
+
+.navbar-default .navbar-toggle:hover,
+.navbar-default .navbar-toggle:focus {
+ background-color: #ddd;
+}
+
+.navbar-default .navbar-toggle .icon-bar {
+ background-color: #888;
+}
+
+.navbar-default .navbar-collapse,
+.navbar-default .navbar-form {
+ border-color: #e7e7e7;
+}
+
+.navbar-default .navbar-nav>.open>a,
+.navbar-default .navbar-nav>.open>a:hover,
+.navbar-default .navbar-nav>.open>a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+
+@media (max-width: 767px) {
+ .navbar-default .navbar-nav .open .dropdown-menu>li>a {
+ color: #777;
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus {
+ color: #333;
+ background-color: transparent;
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu>.active>a,
+ .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,
+ .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus {
+ color: #ccc;
+ background-color: transparent;
+ }
+}
+
+.navbar-default .navbar-link {
+ color: #777;
+}
+
+.navbar-default .navbar-link:hover {
+ color: #333;
+}
+
+.navbar-default .btn-link {
+ color: #777;
+}
+
+.navbar-default .btn-link:hover,
+.navbar-default .btn-link:focus {
+ color: #333;
+}
+
+.navbar-default .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-default .btn-link:hover,
+.navbar-default .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-default .btn-link:focus {
+ color: #ccc;
+}
+
+.navbar-inverse {
+ background-color: #336699;
+ border-color: #080808;
+}
+
+.navbar-inverse .navbar-brand {
+ color: #ffffff;
+}
+
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+ color: #ffffff;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-text {
+ color: #ffffff;
+}
+
+.navbar-inverse .navbar-nav>li>a {
+ color: #ffffff;
+}
+
+.navbar-inverse .navbar-nav>li>a:hover,
+.navbar-inverse .navbar-nav>li>a:focus {
+ color: #ffffff;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-nav>.active>a,
+.navbar-inverse .navbar-nav>.active>a:hover,
+.navbar-inverse .navbar-nav>.active>a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+
+.navbar-inverse .navbar-nav>.disabled>a,
+.navbar-inverse .navbar-nav>.disabled>a:hover,
+.navbar-inverse .navbar-nav>.disabled>a:focus {
+ color: #444;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-toggle {
+ border-color: #333;
+}
+
+.navbar-inverse .navbar-toggle:hover,
+.navbar-inverse .navbar-toggle:focus {
+ background-color: #333;
+}
+
+.navbar-inverse .navbar-toggle .icon-bar {
+ background-color: #fff;
+}
+
+.navbar-inverse .navbar-collapse,
+.navbar-inverse .navbar-form {
+ border-color: #101010;
+}
+
+.navbar-inverse .navbar-nav>.open>a,
+.navbar-inverse .navbar-nav>.open>a:hover,
+.navbar-inverse .navbar-nav>.open>a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+
+@media (max-width: 767px) {
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header {
+ border-color: #080808;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+ background-color: #080808;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu>li>a {
+ color: #9d9d9d;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus {
+ color: #fff;
+ background-color: transparent;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus {
+ color: #fff;
+ background-color: #080808;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus {
+ color: #444;
+ background-color: transparent;
+ }
+}
+
+.navbar-inverse .navbar-link {
+ color: #9d9d9d;
+}
+
+.navbar-inverse .navbar-link:hover {
+ color: #fff;
+}
+
+.navbar-inverse .btn-link {
+ color: #9d9d9d;
+}
+
+.navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link:focus {
+ color: #fff;
+}
+
+.navbar-inverse .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-inverse .btn-link:focus {
+ color: #444;
+}
+
+.breadcrumb {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+}
+
+.breadcrumb>li {
+ display: inline-block;
+}
+
+.breadcrumb>li+li:before {
+ padding: 0 5px;
+ color: #ccc;
+ content: "/\00a0";
+}
+
+.breadcrumb>.active {
+ color: #777;
+}
+
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 4px;
+}
+
+.pagination>li {
+ display: inline;
+}
+
+.pagination>li>a,
+.pagination>li>span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ margin-left: -1px;
+ line-height: 1.42857143;
+ color: #428bca;
+ text-decoration: none;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+
+.pagination>li:first-child>a,
+.pagination>li:first-child>span {
+ margin-left: 0;
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+
+.pagination>li:last-child>a,
+.pagination>li:last-child>span {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+
+.pagination>li>a:hover,
+.pagination>li>span:hover,
+.pagination>li>a:focus,
+.pagination>li>span:focus {
+ color: #2a6496;
+ background-color: #eee;
+ border-color: #ddd;
+}
+
+.pagination>.active>a,
+.pagination>.active>span,
+.pagination>.active>a:hover,
+.pagination>.active>span:hover,
+.pagination>.active>a:focus,
+.pagination>.active>span:focus {
+ z-index: 2;
+ color: #fff;
+ cursor: default;
+ background-color: #3071a9;
+ border-color: #428bca;
+}
+
+.pagination>.disabled>span,
+.pagination>.disabled>span:hover,
+.pagination>.disabled>span:focus,
+.pagination>.disabled>a,
+.pagination>.disabled>a:hover,
+.pagination>.disabled>a:focus {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #fff;
+ border-color: #ddd;
+}
+
+.pagination-lg>li>a,
+.pagination-lg>li>span {
+ padding: 10px 16px;
+ font-size: 18px;
+}
+
+.pagination-lg>li:first-child>a,
+.pagination-lg>li:first-child>span {
+ border-top-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+}
+
+.pagination-lg>li:last-child>a,
+.pagination-lg>li:last-child>span {
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+}
+
+.pagination-sm>li>a,
+.pagination-sm>li>span {
+ padding: 5px 10px;
+ font-size: 12px;
+}
+
+.pagination-sm>li:first-child>a,
+.pagination-sm>li:first-child>span {
+ border-top-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.pagination-sm>li:last-child>a,
+.pagination-sm>li:last-child>span {
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+
+.pager {
+ padding-left: 0;
+ margin: 20px 0;
+ text-align: center;
+ list-style: none;
+}
+
+.pager li {
+ display: inline;
+}
+
+.pager li>a,
+.pager li>span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 15px;
+}
+
+.pager li>a:hover,
+.pager li>a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+
+.pager .next>a,
+.pager .next>span {
+ float: right;
+}
+
+.pager .previous>a,
+.pager .previous>span {
+ float: left;
+}
+
+.pager .disabled>a,
+.pager .disabled>a:hover,
+.pager .disabled>a:focus,
+.pager .disabled>span {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #fff;
+}
+
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em;
+}
+
+a.label:hover,
+a.label:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.label:empty {
+ display: none;
+}
+
+.btn .label {
+ position: relative;
+ top: -1px;
+}
+
+.label-default {
+ background-color: #777;
+}
+
+.label-default[href]:hover,
+.label-default[href]:focus {
+ background-color: #5e5e5e;
+}
+
+.label-primary {
+ background-color: #428bca;
+}
+
+.label-primary[href]:hover,
+.label-primary[href]:focus {
+ background-color: #3071a9;
+}
+
+.label-success {
+ background-color: #5cb85c;
+}
+
+.label-success[href]:hover,
+.label-success[href]:focus {
+ background-color: #449d44;
+}
+
+.label-info {
+ background-color: #5bc0de;
+}
+
+.label-info[href]:hover,
+.label-info[href]:focus {
+ background-color: #31b0d5;
+}
+
+.label-warning {
+ background-color: #f0ad4e;
+}
+
+.label-warning[href]:hover,
+.label-warning[href]:focus {
+ background-color: #ec971f;
+}
+
+.label-danger {
+ background-color: #d9534f;
+}
+
+.label-danger[href]:hover,
+.label-danger[href]:focus {
+ background-color: #c9302c;
+}
+
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: 12px;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ background-color: #777;
+ border-radius: 10px;
+}
+
+.badge:empty {
+ display: none;
+}
+
+.btn .badge {
+ position: relative;
+ top: -1px;
+}
+
+.btn-xs .badge {
+ top: 0;
+ padding: 1px 5px;
+}
+
+a.badge:hover,
+a.badge:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+a.list-group-item.active>.badge,
+.nav-pills>.active>a>.badge {
+ color: #3071a9;
+ background-color: #fff;
+}
+
+.nav-pills>li>a>.badge {
+ margin-left: 3px;
+}
+
+.jumbotron {
+ margin-bottom: 10px;
+ color: inherit;
+ background-color: #eee;
+}
+
+.jumbotron h1,
+.jumbotron .h1 {
+ color: inherit;
+}
+
+.jumbotron p {
+ margin-bottom: 15px;
+ font-size: 21px;
+ font-weight: 200;
+}
+
+.jumbotron>hr {
+ border-top-color: #d5d5d5;
+}
+
+.container .jumbotron,
+.container-fluid .jumbotron {
+ border-radius: 6px;
+}
+
+.jumbotron .container {
+ max-width: 100%;
+}
+
+/*@media screen and (min-width: 768px) {
+ .jumbotron {
+ padding: 48px 0;
+ }
+ .container .jumbotron {
+ padding-right: 60px;
+ padding-left: 60px;
+ }
+ .jumbotron h1,
+ .jumbotron .h1 {
+ font-size: 63px;
+ }
+}*/
+
+.thumbnail {
+ display: block;
+ padding: 4px;
+ margin-bottom: 20px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: border .2s ease-in-out;
+ -o-transition: border .2s ease-in-out;
+ transition: border .2s ease-in-out;
+}
+
+.thumbnail>img,
+.thumbnail a>img {
+ margin-right: auto;
+ margin-left: auto;
+}
+
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+ border-color: #428bca;
+}
+
+.thumbnail .caption {
+ padding: 9px;
+ color: #333;
+}
+
+.alert {
+ padding: 10px;
+ margin-bottom: 5px;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+
+.alert h4 {
+ margin-top: 0;
+ color: inherit;
+}
+
+.alert .alert-link {
+ font-weight: bold;
+}
+
+.alert>p,
+.alert>ul {
+ margin-bottom: 0;
+}
+
+.alert>p+p {
+ margin-top: 5px;
+}
+
+.alert-dismissable,
+.alert-dismissible {
+ padding-right: 35px;
+}
+
+.alert-dismissable .close,
+.alert-dismissible .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+}
+
+.alert-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+
+.alert-success hr {
+ border-top-color: #c9e2b3;
+}
+
+.alert-success .alert-link {
+ color: #2b542c;
+}
+
+.alert-info {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+
+.alert-info hr {
+ border-top-color: #a6e1ec;
+}
+
+.alert-info .alert-link {
+ color: #245269;
+}
+
+.alert-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+
+.alert-warning hr {
+ border-top-color: #f7e1b5;
+}
+
+.alert-warning .alert-link {
+ color: #66512c;
+}
+
+.alert-danger {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+
+.alert-danger hr {
+ border-top-color: #e4b9c0;
+}
+
+.alert-danger .alert-link {
+ color: #843534;
+}
+
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+
+ to {
+ background-position: 0 0;
+ }
+}
+
+@-o-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+
+ to {
+ background-position: 0 0;
+ }
+}
+
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+
+ to {
+ background-position: 0 0;
+ }
+}
+
+.progress {
+ height: 20px;
+ margin-bottom: 20px;
+ overflow: hidden;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+}
+
+.progress-bar {
+ float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ line-height: 20px;
+ color: #fff;
+ text-align: center;
+ background-color: #428bca;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ -webkit-transition: width .6s ease;
+ -o-transition: width .6s ease;
+ transition: width .6s ease;
+}
+
+.progress-striped .progress-bar,
+.progress-bar-striped {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ -webkit-background-size: 40px 40px;
+ background-size: 40px 40px;
+}
+
+.progress.active .progress-bar,
+.progress-bar.active {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ -o-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
+}
+
+.progress-bar-success {
+ background-color: #5cb85c;
+}
+
+.progress-striped .progress-bar-success {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+
+.progress-bar-info {
+ background-color: #5bc0de;
+}
+
+.progress-striped .progress-bar-info {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+
+.progress-bar-warning {
+ background-color: #f0ad4e;
+}
+
+.progress-striped .progress-bar-warning {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+
+.progress-bar-danger {
+ background-color: #d9534f;
+}
+
+.progress-striped .progress-bar-danger {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+
+.media {
+ margin-top: 15px;
+}
+
+.media:first-child {
+ margin-top: 0;
+}
+
+.media-right,
+.media>.pull-right {
+ padding-left: 10px;
+}
+
+.media-left,
+.media>.pull-left {
+ padding-right: 10px;
+}
+
+.media-left,
+.media-right,
+.media-body {
+ display: table-cell;
+ vertical-align: top;
+}
+
+.media-middle {
+ vertical-align: middle;
+}
+
+.media-bottom {
+ vertical-align: bottom;
+}
+
+.media-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+
+.media-list {
+ padding-left: 0;
+ list-style: none;
+}
+
+.list-group {
+ padding-left: 0;
+ margin-bottom: 20px;
+}
+
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ margin-bottom: -1px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+
+.list-group-item:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+
+.list-group-item>.badge {
+ float: right;
+}
+
+.list-group-item>.badge+.badge {
+ margin-right: 5px;
+}
+
+a.list-group-item {
+ color: #555;
+}
+
+a.list-group-item .list-group-item-heading {
+ color: #333;
+}
+
+a.list-group-item:hover,
+a.list-group-item:focus {
+ color: #555;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+
+.list-group-item.disabled,
+.list-group-item.disabled:hover,
+.list-group-item.disabled:focus {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #eee;
+}
+
+.list-group-item.disabled .list-group-item-heading,
+.list-group-item.disabled:hover .list-group-item-heading,
+.list-group-item.disabled:focus .list-group-item-heading {
+ color: inherit;
+}
+
+.list-group-item.disabled .list-group-item-text,
+.list-group-item.disabled:hover .list-group-item-text,
+.list-group-item.disabled:focus .list-group-item-text {
+ color: #777;
+}
+
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca;
+}
+
+.list-group-item.active .list-group-item-heading,
+.list-group-item.active:hover .list-group-item-heading,
+.list-group-item.active:focus .list-group-item-heading,
+.list-group-item.active .list-group-item-heading>small,
+.list-group-item.active:hover .list-group-item-heading>small,
+.list-group-item.active:focus .list-group-item-heading>small,
+.list-group-item.active .list-group-item-heading>.small,
+.list-group-item.active:hover .list-group-item-heading>.small,
+.list-group-item.active:focus .list-group-item-heading>.small {
+ color: inherit;
+}
+
+.list-group-item.active .list-group-item-text,
+.list-group-item.active:hover .list-group-item-text,
+.list-group-item.active:focus .list-group-item-text {
+ color: #e1edf7;
+}
+
+.list-group-item-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+}
+
+a.list-group-item-success {
+ color: #3c763d;
+}
+
+a.list-group-item-success .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item-success:hover,
+a.list-group-item-success:focus {
+ color: #3c763d;
+ background-color: #d0e9c6;
+}
+
+a.list-group-item-success.active,
+a.list-group-item-success.active:hover,
+a.list-group-item-success.active:focus {
+ color: #fff;
+ background-color: #3c763d;
+ border-color: #3c763d;
+}
+
+.list-group-item-info {
+ color: #31708f;
+ background-color: #d9edf7;
+}
+
+a.list-group-item-info {
+ color: #31708f;
+}
+
+a.list-group-item-info .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item-info:hover,
+a.list-group-item-info:focus {
+ color: #31708f;
+ background-color: #c4e3f3;
+}
+
+a.list-group-item-info.active,
+a.list-group-item-info.active:hover,
+a.list-group-item-info.active:focus {
+ color: #fff;
+ background-color: #31708f;
+ border-color: #31708f;
+}
+
+.list-group-item-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+}
+
+a.list-group-item-warning {
+ color: #8a6d3b;
+}
+
+a.list-group-item-warning .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item-warning:hover,
+a.list-group-item-warning:focus {
+ color: #8a6d3b;
+ background-color: #faf2cc;
+}
+
+a.list-group-item-warning.active,
+a.list-group-item-warning.active:hover,
+a.list-group-item-warning.active:focus {
+ color: #fff;
+ background-color: #8a6d3b;
+ border-color: #8a6d3b;
+}
+
+.list-group-item-danger {
+ color: #a94442;
+ background-color: #f2dede;
+}
+
+a.list-group-item-danger {
+ color: #a94442;
+}
+
+a.list-group-item-danger .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item-danger:hover,
+a.list-group-item-danger:focus {
+ color: #a94442;
+ background-color: #ebcccc;
+}
+
+a.list-group-item-danger.active,
+a.list-group-item-danger.active:hover,
+a.list-group-item-danger.active:focus {
+ color: #fff;
+ background-color: #a94442;
+ border-color: #a94442;
+}
+
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3;
+}
+
+.panel {
+ margin-bottom: 20px;
+ background-color: #fff;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+}
+
+.panel-body {
+ padding: 15px;
+}
+
+.panel-heading {
+ padding: 10px 15px;
+ border-bottom: 1px solid transparent;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+ cursor: pointer;
+}
+
+.panel-heading>.dropdown .dropdown-toggle {
+ color: inherit;
+}
+
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 16px;
+ color: inherit;
+}
+
+.panel-title>a {
+ color: inherit;
+}
+
+.panel-footer {
+ padding: 10px 15px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.panel>.list-group,
+.panel>.panel-collapse>.list-group {
+ margin-bottom: 0;
+}
+
+.panel>.list-group .list-group-item,
+.panel>.panel-collapse>.list-group .list-group-item {
+ border-width: 1px 0;
+ border-radius: 0;
+}
+
+.panel>.list-group:first-child .list-group-item:first-child,
+.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child {
+ border-top: 0;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.panel>.list-group:last-child .list-group-item:last-child,
+.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child {
+ border-bottom: 0;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.panel-heading+.list-group .list-group-item:first-child {
+ border-top-width: 0;
+}
+
+.list-group+.panel-footer {
+ border-top-width: 0;
+}
+
+.panel>.table,
+.panel>.table-responsive>.table,
+.panel>.panel-collapse>.table {
+ margin-bottom: 0;
+}
+
+.panel>.table caption,
+.panel>.table-responsive>.table caption,
+.panel>.panel-collapse>.table caption {
+ padding-right: 15px;
+ padding-left: 15px;
+}
+
+.panel>.table:first-child,
+.panel>.table-responsive:first-child>.table:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.panel>.table:first-child>thead:first-child>tr:first-child,
+.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,
+.panel>.table:first-child>tbody:first-child>tr:first-child,
+.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,
+.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,
+.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,
+.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,
+.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,
+.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,
+.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,
+.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child {
+ border-top-left-radius: 3px;
+}
+
+.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,
+.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,
+.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,
+.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,
+.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,
+.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,
+.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,
+.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child {
+ border-top-right-radius: 3px;
+}
+
+.panel>.table:last-child,
+.panel>.table-responsive:last-child>.table:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.panel>.table:last-child>tbody:last-child>tr:last-child,
+.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,
+.panel>.table:last-child>tfoot:last-child>tr:last-child,
+.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,
+.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,
+.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,
+.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,
+.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,
+.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,
+.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,
+.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child {
+ border-bottom-left-radius: 3px;
+}
+
+.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,
+.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,
+.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,
+.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,
+.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,
+.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,
+.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,
+.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child {
+ border-bottom-right-radius: 3px;
+}
+
+.panel>.panel-body+.table,
+.panel>.panel-body+.table-responsive,
+.panel>.table+.panel-body,
+.panel>.table-responsive+.panel-body {
+ border-top: 1px solid #ddd;
+}
+
+.panel>.table>tbody:first-child>tr:first-child th,
+.panel>.table>tbody:first-child>tr:first-child td {
+ border-top: 0;
+}
+
+.panel>.table-bordered,
+.panel>.table-responsive>.table-bordered {
+ border: 0;
+}
+
+.panel>.table-bordered>thead>tr>th:first-child,
+.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,
+.panel>.table-bordered>tbody>tr>th:first-child,
+.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,
+.panel>.table-bordered>tfoot>tr>th:first-child,
+.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,
+.panel>.table-bordered>thead>tr>td:first-child,
+.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,
+.panel>.table-bordered>tbody>tr>td:first-child,
+.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,
+.panel>.table-bordered>tfoot>tr>td:first-child,
+.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child {
+ border-left: 0;
+}
+
+.panel>.table-bordered>thead>tr>th:last-child,
+.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,
+.panel>.table-bordered>tbody>tr>th:last-child,
+.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,
+.panel>.table-bordered>tfoot>tr>th:last-child,
+.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,
+.panel>.table-bordered>thead>tr>td:last-child,
+.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,
+.panel>.table-bordered>tbody>tr>td:last-child,
+.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,
+.panel>.table-bordered>tfoot>tr>td:last-child,
+.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child {
+ border-right: 0;
+}
+
+.panel>.table-bordered>thead>tr:first-child>td,
+.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,
+.panel>.table-bordered>tbody>tr:first-child>td,
+.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,
+.panel>.table-bordered>thead>tr:first-child>th,
+.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,
+.panel>.table-bordered>tbody>tr:first-child>th,
+.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th {
+ border-bottom: 0;
+}
+
+.panel>.table-bordered>tbody>tr:last-child>td,
+.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,
+.panel>.table-bordered>tfoot>tr:last-child>td,
+.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,
+.panel>.table-bordered>tbody>tr:last-child>th,
+.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,
+.panel>.table-bordered>tfoot>tr:last-child>th,
+.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th {
+ border-bottom: 0;
+}
+
+.panel>.table-responsive {
+ margin-bottom: 0;
+ border: 0;
+}
+
+.panel-group {
+ margin-bottom: 20px;
+}
+
+.panel-group .panel {
+ margin-bottom: 0;
+ border-radius: 4px;
+}
+
+.panel-group .panel+.panel {
+ margin-top: 5px;
+}
+
+.panel-group .panel-heading {
+ border-bottom: 0;
+}
+
+.panel-group .panel-heading+.panel-collapse>.panel-body,
+.panel-group .panel-heading+.panel-collapse>.list-group {
+ border-top: 1px solid #ddd;
+}
+
+.panel-group .panel-footer {
+ border-top: 0;
+}
+
+.panel-group .panel-footer+.panel-collapse .panel-body {
+ border-bottom: 1px solid #ddd;
+}
+
+.panel-default {
+ border-color: #ddd;
+}
+
+.panel-default>.panel-heading {
+ color: #333;
+ background-color: #f5f5f5;
+ border-color: #ddd;
+}
+
+.panel-default>.panel-heading+.panel-collapse>.panel-body {
+ border-top-color: #ddd;
+}
+
+.panel-default>.panel-heading .badge {
+ color: #f5f5f5;
+ background-color: #333;
+}
+
+.panel-default>.panel-footer+.panel-collapse>.panel-body {
+ border-bottom-color: #ddd;
+}
+
+.panel-primary {
+ border-color: #428bca;
+}
+
+.panel-primary>.panel-heading {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca;
+}
+
+.panel-primary>.panel-heading+.panel-collapse>.panel-body {
+ border-top-color: #428bca;
+}
+
+.panel-primary>.panel-heading .badge {
+ color: #428bca;
+ background-color: #fff;
+}
+
+.panel-primary>.panel-footer+.panel-collapse>.panel-body {
+ border-bottom-color: #428bca;
+}
+
+.panel-success {
+ border-color: #d6e9c6;
+}
+
+.panel-success>.panel-heading {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+
+.panel-success>.panel-heading+.panel-collapse>.panel-body {
+ border-top-color: #d6e9c6;
+}
+
+.panel-success>.panel-heading .badge {
+ color: #dff0d8;
+ background-color: #3c763d;
+}
+
+.panel-success>.panel-footer+.panel-collapse>.panel-body {
+ border-bottom-color: #d6e9c6;
+}
+
+.panel-info {
+ border-color: #bce8f1;
+}
+
+.panel-info>.panel-heading {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+
+.panel-info>.panel-heading+.panel-collapse>.panel-body {
+ border-top-color: #bce8f1;
+}
+
+.panel-info>.panel-heading .badge {
+ color: #d9edf7;
+ background-color: #31708f;
+}
+
+.panel-info>.panel-footer+.panel-collapse>.panel-body {
+ border-bottom-color: #bce8f1;
+}
+
+.panel-warning {
+ border-color: #faebcc;
+}
+
+.panel-warning>.panel-heading {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+
+.panel-warning>.panel-heading+.panel-collapse>.panel-body {
+ border-top-color: #faebcc;
+}
+
+.panel-warning>.panel-heading .badge {
+ color: #fcf8e3;
+ background-color: #8a6d3b;
+}
+
+.panel-warning>.panel-footer+.panel-collapse>.panel-body {
+ border-bottom-color: #faebcc;
+}
+
+.panel-danger {
+ border-color: #ebccd1;
+}
+
+.panel-danger>.panel-heading {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+
+.panel-danger>.panel-heading+.panel-collapse>.panel-body {
+ border-top-color: #ebccd1;
+}
+
+.panel-danger>.panel-heading .badge {
+ color: #f2dede;
+ background-color: #a94442;
+}
+
+.panel-danger>.panel-footer+.panel-collapse>.panel-body {
+ border-bottom-color: #ebccd1;
+}
+
+.embed-responsive {
+ position: relative;
+ display: block;
+ height: 0;
+ padding: 0;
+ overflow: hidden;
+}
+
+.embed-responsive .embed-responsive-item,
+.embed-responsive iframe,
+.embed-responsive embed,
+.embed-responsive object,
+.embed-responsive video {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 0;
+}
+
+.embed-responsive.embed-responsive-16by9 {
+ padding-bottom: 56.25%;
+}
+
+.embed-responsive.embed-responsive-4by3 {
+ padding-bottom: 75%;
+}
+
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+}
+
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, .15);
+}
+
+.well-lg {
+ padding: 24px;
+ border-radius: 6px;
+}
+
+.well-sm {
+ padding: 9px;
+ border-radius: 3px;
+}
+
+.close {
+ float: right;
+ font-size: 21px;
+ font-weight: bold;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ filter: alpha(opacity=20);
+ opacity: .2;
+}
+
+.close:hover,
+.close:focus {
+ color: #000;
+ text-decoration: none;
+ cursor: pointer;
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+
+button.close {
+ -webkit-appearance: none;
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+}
+
+.modal-open {
+ overflow: hidden;
+}
+
+.modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ display: none;
+ overflow: hidden;
+ -webkit-overflow-scrolling: touch;
+ outline: 0;
+}
+
+.modal.fade .modal-dialog {
+ -webkit-transition: -webkit-transform .3s ease-out;
+ -o-transition: -o-transform .3s ease-out;
+ transition: transform .3s ease-out;
+ -webkit-transform: translate(0, -25%);
+ -ms-transform: translate(0, -25%);
+ -o-transform: translate(0, -25%);
+ transform: translate(0, -25%);
+}
+
+.modal.in .modal-dialog {
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ -o-transform: translate(0, 0);
+ transform: translate(0, 0);
+}
+
+.modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px;
+}
+
+.modal-content {
+ position: relative;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ outline: 0;
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+ box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background-color: #000;
+}
+
+.modal-backdrop.fade {
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+
+.modal-backdrop.in {
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+
+.modal-header {
+ min-height: 16.42857143px;
+ padding: 15px;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+.modal-header .close {
+ margin-top: -2px;
+}
+
+.modal-title {
+ margin: 0;
+ line-height: 1.42857143;
+}
+
+.modal-body {
+ position: relative;
+ padding: 15px;
+}
+
+.modal-footer {
+ padding: 15px;
+ text-align: right;
+ border-top: 1px solid #e5e5e5;
+}
+
+.modal-footer .btn+.btn {
+ margin-bottom: 0;
+ margin-left: 5px;
+}
+
+.modal-footer .btn-group .btn+.btn {
+ margin-left: -1px;
+}
+
+.modal-footer .btn-block+.btn-block {
+ margin-left: 0;
+}
+
+.modal-scrollbar-measure {
+ position: absolute;
+ top: -9999px;
+ width: 50px;
+ height: 50px;
+ overflow: scroll;
+}
+
+@media (min-width: 768px) {
+ .modal-dialog {
+ width: 600px;
+ margin: 30px auto;
+ }
+
+ .modal-content {
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ }
+
+ .modal-sm {
+ width: 300px;
+ }
+}
+
+@media (min-width: 992px) {
+ .modal-lg {
+ width: 900px;
+ }
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1070;
+ display: block;
+ font-size: 12px;
+ line-height: 1.4;
+ visibility: visible;
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+
+.tooltip.in {
+ filter: alpha(opacity=90);
+ opacity: .9;
+}
+
+.tooltip.top {
+ padding: 5px 0;
+ margin-top: -3px;
+}
+
+.tooltip.right {
+ padding: 0 5px;
+ margin-left: 3px;
+}
+
+.tooltip.bottom {
+ padding: 5px 0;
+ margin-top: 3px;
+}
+
+.tooltip.left {
+ padding: 0 5px;
+ margin-left: -3px;
+}
+
+.tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: #fff;
+ text-align: center;
+ text-decoration: none;
+ background-color: #000;
+ border-radius: 4px;
+}
+
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+
+.tooltip.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+
+.tooltip.top-left .tooltip-arrow {
+ bottom: 0;
+ left: 5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+
+.tooltip.top-right .tooltip-arrow {
+ right: 5px;
+ bottom: 0;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-width: 5px 5px 5px 0;
+ border-right-color: #000;
+}
+
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-width: 5px 0 5px 5px;
+ border-left-color: #000;
+}
+
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+
+.tooltip.bottom-left .tooltip-arrow {
+ top: 0;
+ left: 5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+
+.tooltip.bottom-right .tooltip-arrow {
+ top: 0;
+ right: 5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1060;
+ display: none;
+ max-width: 276px;
+ padding: 1px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: left;
+ white-space: normal;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+}
+
+.popover.top {
+ margin-top: -10px;
+}
+
+.popover.right {
+ margin-left: 10px;
+}
+
+.popover.bottom {
+ margin-top: 10px;
+}
+
+.popover.left {
+ margin-left: -10px;
+}
+
+.popover-title {
+ padding: 8px 14px;
+ margin: 0;
+ font-size: 14px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-radius: 5px 5px 0 0;
+}
+
+.popover-content {
+ padding: 9px 14px;
+}
+
+.popover>.arrow,
+.popover>.arrow:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+
+.popover>.arrow {
+ border-width: 11px;
+}
+
+.popover>.arrow:after {
+ content: "";
+ border-width: 10px;
+}
+
+.popover.top>.arrow {
+ bottom: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-color: #999;
+ border-top-color: rgba(0, 0, 0, .25);
+ border-bottom-width: 0;
+}
+
+.popover.top>.arrow:after {
+ bottom: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-color: #fff;
+ border-bottom-width: 0;
+}
+
+.popover.right>.arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-right-color: #999;
+ border-right-color: rgba(0, 0, 0, .25);
+ border-left-width: 0;
+}
+
+.popover.right>.arrow:after {
+ bottom: -10px;
+ left: 1px;
+ content: " ";
+ border-right-color: #fff;
+ border-left-width: 0;
+}
+
+.popover.bottom>.arrow {
+ top: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-width: 0;
+ border-bottom-color: #999;
+ border-bottom-color: rgba(0, 0, 0, .25);
+}
+
+.popover.bottom>.arrow:after {
+ top: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-width: 0;
+ border-bottom-color: #fff;
+}
+
+.popover.left>.arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-right-width: 0;
+ border-left-color: #999;
+ border-left-color: rgba(0, 0, 0, .25);
+}
+
+.popover.left>.arrow:after {
+ right: 1px;
+ bottom: -10px;
+ content: " ";
+ border-right-width: 0;
+ border-left-color: #fff;
+}
+
+.carousel {
+ position: relative;
+}
+
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden;
+}
+
+.carousel-inner>.item {
+ position: relative;
+ display: none;
+ -webkit-transition: .6s ease-in-out left;
+ -o-transition: .6s ease-in-out left;
+ transition: .6s ease-in-out left;
+}
+
+.carousel-inner>.item>img,
+.carousel-inner>.item>a>img {
+ line-height: 1;
+}
+
+@media all and (transform-3d),
+(-webkit-transform-3d) {
+ .carousel-inner>.item {
+ -webkit-transition: -webkit-transform .6s ease-in-out;
+ -o-transition: -o-transform .6s ease-in-out;
+ transition: transform .6s ease-in-out;
+
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-perspective: 1000;
+ perspective: 1000;
+ }
+
+ .carousel-inner>.item.next,
+ .carousel-inner>.item.active.right {
+ left: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+
+ .carousel-inner>.item.prev,
+ .carousel-inner>.item.active.left {
+ left: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+
+ .carousel-inner>.item.next.left,
+ .carousel-inner>.item.prev.right,
+ .carousel-inner>.item.active {
+ left: 0;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.carousel-inner>.active,
+.carousel-inner>.next,
+.carousel-inner>.prev {
+ display: block;
+}
+
+.carousel-inner>.active {
+ left: 0;
+}
+
+.carousel-inner>.next,
+.carousel-inner>.prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+
+.carousel-inner>.next {
+ left: 100%;
+}
+
+.carousel-inner>.prev {
+ left: -100%;
+}
+
+.carousel-inner>.next.left,
+.carousel-inner>.prev.right {
+ left: 0;
+}
+
+.carousel-inner>.active.left {
+ left: -100%;
+}
+
+.carousel-inner>.active.right {
+ left: 100%;
+}
+
+.carousel-control {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 15%;
+ font-size: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+
+.carousel-control.left {
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+
+.carousel-control.right {
+ right: 0;
+ left: auto;
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+
+.carousel-control:hover,
+.carousel-control:focus {
+ color: #fff;
+ text-decoration: none;
+ filter: alpha(opacity=90);
+ outline: 0;
+ opacity: .9;
+}
+
+.carousel-control .icon-prev,
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-left,
+.carousel-control .glyphicon-chevron-right {
+ position: absolute;
+ top: 50%;
+ z-index: 5;
+ display: inline-block;
+}
+
+.carousel-control .icon-prev,
+.carousel-control .glyphicon-chevron-left {
+ left: 50%;
+ margin-left: -10px;
+}
+
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-right {
+ right: 50%;
+ margin-right: -10px;
+}
+
+.carousel-control .icon-prev,
+.carousel-control .icon-next {
+ width: 20px;
+ height: 20px;
+ margin-top: -10px;
+ font-family: serif;
+}
+
+.carousel-control .icon-prev:before {
+ content: '\2039';
+}
+
+.carousel-control .icon-next:before {
+ content: '\203a';
+}
+
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ padding-left: 0;
+ margin-left: -30%;
+ text-align: center;
+ list-style: none;
+}
+
+.carousel-indicators li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ cursor: pointer;
+ background-color: #000 \9;
+ background-color: rgba(0, 0, 0, 0);
+ border: 1px solid #fff;
+ border-radius: 10px;
+}
+
+.carousel-indicators .active {
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ background-color: #fff;
+}
+
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 20px;
+ left: 15%;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+}
+
+.carousel-caption .btn {
+ text-shadow: none;
+}
+
+/*
+@media screen and (min-width: 768px) {
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-prev,
+ .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ font-size: 30px;
+ }
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .icon-prev {
+ margin-left: -15px;
+ }
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-next {
+ margin-right: -15px;
+ }
+ .carousel-caption {
+ right: 20%;
+ left: 20%;
+ padding-bottom: 30px;
+ }
+ .carousel-indicators {
+ bottom: 20px;
+ }
+}
+*/
+.clearfix:before,
+.clearfix:after,
+.dl-horizontal dd:before,
+.dl-horizontal dd:after,
+.container:before,
+.container:after,
+.container-fluid:before,
+.container-fluid:after,
+.row:before,
+.row:after,
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after,
+.btn-toolbar:before,
+.btn-toolbar:after,
+.btn-group-vertical>.btn-group:before,
+.btn-group-vertical>.btn-group:after,
+.nav:before,
+.nav:after,
+.navbar:before,
+.navbar:after,
+.navbar-header:before,
+.navbar-header:after,
+.navbar-collapse:before,
+.navbar-collapse:after,
+.pager:before,
+.pager:after,
+.panel-body:before,
+.panel-body:after,
+.modal-footer:before,
+.modal-footer:after {
+ display: table;
+ content: " ";
+}
+
+.clearfix:after,
+.dl-horizontal dd:after,
+.container:after,
+.container-fluid:after,
+.row:after,
+.form-horizontal .form-group:after,
+.btn-toolbar:after,
+.btn-group-vertical>.btn-group:after,
+.nav:after,
+.navbar:after,
+.navbar-header:after,
+.navbar-collapse:after,
+.pager:after,
+.panel-body:after,
+.modal-footer:after {
+ clear: both;
+}
+
+.center-block {
+ display: block;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.pull-right {
+ float: right !important;
+}
+
+.pull-left {
+ float: left !important;
+}
+
+.hide {
+ display: none !important;
+}
+
+.show {
+ display: block !important;
+}
+
+.invisible {
+ visibility: hidden;
+}
+
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+
+.hidden {
+ display: none !important;
+ visibility: hidden !important;
+}
+
+.affix {
+ position: fixed;
+}
+
+@-ms-viewport {
+ width: device-width;
+}
+
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+ display: none !important;
+}
+
+.visible-xs-block,
+.visible-xs-inline,
+.visible-xs-inline-block,
+.visible-sm-block,
+.visible-sm-inline,
+.visible-sm-inline-block,
+.visible-md-block,
+.visible-md-inline,
+.visible-md-inline-block,
+.visible-lg-block,
+.visible-lg-inline,
+.visible-lg-inline-block {
+ display: none !important;
+}
+
+/*
+@media (max-width: 767px) {
+ .visible-xs {
+ display: block !important;
+ }
+ table.visible-xs {
+ display: table;
+ }
+ tr.visible-xs {
+ display: table-row !important;
+ }
+ th.visible-xs,
+ td.visible-xs {
+ display: table-cell !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-block {
+ display: block !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-inline {
+ display: inline !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm {
+ display: block !important;
+ }
+ table.visible-sm {
+ display: table;
+ }
+ tr.visible-sm {
+ display: table-row !important;
+ }
+ th.visible-sm,
+ td.visible-sm {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-block {
+ display: block !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md {
+ display: block !important;
+ }
+ table.visible-md {
+ display: table;
+ }
+ tr.visible-md {
+ display: table-row !important;
+ }
+ th.visible-md,
+ td.visible-md {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-block {
+ display: block !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg {
+ display: block !important;
+ }
+ table.visible-lg {
+ display: table;
+ }
+ tr.visible-lg {
+ display: table-row !important;
+ }
+ th.visible-lg,
+ td.visible-lg {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-block {
+ display: block !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (max-width: 767px) {
+ .hidden-xs {
+ display: none !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-sm {
+ display: none !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-md {
+ display: none !important;
+ }
+}
+@media (min-width: 1200px) {
+ .hidden-lg {
+ display: none !important;
+ }
+}
+.visible-print {
+ display: none !important;
+}
+@media print {
+ .visible-print {
+ display: block !important;
+ }
+ table.visible-print {
+ display: table;
+ }
+ tr.visible-print {
+ display: table-row !important;
+ }
+ th.visible-print,
+ td.visible-print {
+ display: table-cell !important;
+ }
+}
+*/
+.visible-print-block {
+ display: none !important;
+}
+
+@media print {
+ .visible-print-block {
+ display: block !important;
+ }
+}
+
+.visible-print-inline {
+ display: none !important;
+}
+
+@media print {
+ .visible-print-inline {
+ display: inline !important;
+ }
+}
+
+.visible-print-inline-block {
+ display: none !important;
+}
+
+@media print {
+ .visible-print-inline-block {
+ display: inline-block !important;
+ }
+}
+
+@media print {
+ .hidden-print {
+ display: none !important;
+ }
+}
+
+/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/css/broken_links.css b/wqflask/wqflask/static/new/css/broken_links.css
new file mode 100644
index 00000000..676f32d9
--- /dev/null
+++ b/wqflask/wqflask/static/new/css/broken_links.css
@@ -0,0 +1,5 @@
+
+.broken_link{
+ color:red;
+ text-decoration: underline;
+} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/css/colorbox.css b/wqflask/wqflask/static/new/css/colorbox.css
new file mode 100644
index 00000000..8b9fb388
--- /dev/null
+++ b/wqflask/wqflask/static/new/css/colorbox.css
@@ -0,0 +1,238 @@
+/*
+ Colorbox Core Style:
+ The following CSS is consistent between example themes and should not be altered.
+*/
+#colorbox,
+#cboxOverlay,
+#cboxWrapper {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 9999;
+ overflow: hidden;
+}
+
+#cboxOverlay {
+ position: fixed;
+ width: 100%;
+ height: 100%;
+}
+
+#cboxMiddleLeft,
+#cboxBottomLeft {
+ clear: left;
+}
+
+#cboxContent {
+ position: relative;
+}
+
+#cboxLoadedContent {
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+}
+
+#cboxTitle {
+ margin: 0;
+}
+
+#cboxLoadingOverlay,
+#cboxLoadingGraphic {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+#cboxPrevious,
+#cboxNext,
+#cboxClose,
+#cboxSlideshow {
+ cursor: pointer;
+}
+
+.cboxPhoto {
+ float: left;
+ margin: auto;
+ border: 0;
+ display: block;
+ max-width: none;
+ -ms-interpolation-mode: bicubic;
+}
+
+.cboxIframe {
+ width: 100%;
+ height: 100%;
+ display: block;
+ border: 0;
+}
+
+#colorbox,
+#cboxContent,
+#cboxLoadedContent {
+ box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box;
+}
+
+/*
+ User Style:
+ Change the following styles to modify the appearance of Colorbox. They are
+ ordered & tabbed in a way that represents the nesting of the generated HTML.
+*/
+#cboxOverlay {
+ background: #fff;
+}
+
+#colorbox {
+ outline: 0;
+}
+
+#cboxTopLeft {
+ width: 25px;
+ height: 25px;
+ background: url(images/border1.png) no-repeat 0 0;
+}
+
+#cboxTopCenter {
+ height: 25px;
+ background: url(images/border1.png) repeat-x 0 -50px;
+}
+
+#cboxTopRight {
+ width: 25px;
+ height: 25px;
+ background: url(images/border1.png) no-repeat -25px 0;
+}
+
+#cboxBottomLeft {
+ width: 25px;
+ height: 25px;
+ background: url(images/border1.png) no-repeat 0 -25px;
+}
+
+#cboxBottomCenter {
+ height: 25px;
+ background: url(images/border1.png) repeat-x 0 -75px;
+}
+
+#cboxBottomRight {
+ width: 25px;
+ height: 25px;
+ background: url(images/border1.png) no-repeat -25px -25px;
+}
+
+#cboxMiddleLeft {
+ width: 25px;
+ background: url(images/border2.png) repeat-y 0 0;
+}
+
+#cboxMiddleRight {
+ width: 25px;
+ background: url(images/border2.png) repeat-y -25px 0;
+}
+
+#cboxContent {
+ background: #fff;
+ overflow: hidden;
+}
+
+.cboxIframe {
+ background: #fff;
+}
+
+#cboxError {
+ padding: 50px;
+ border: 1px solid #ccc;
+}
+
+#cboxLoadedContent {
+ margin-bottom: 20px;
+}
+
+#cboxTitle {
+ position: absolute;
+ bottom: 0px;
+ left: 0;
+ text-align: center;
+ width: 100%;
+ color: #999;
+}
+
+#cboxCurrent {
+ position: absolute;
+ bottom: 0px;
+ left: 100px;
+ color: #999;
+}
+
+#cboxLoadingOverlay {
+ background: #fff url(images/loading.gif) no-repeat 5px 5px;
+}
+
+/* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
+#cboxPrevious,
+#cboxNext,
+#cboxSlideshow,
+#cboxClose {
+ border: 0;
+ padding: 0;
+ margin: 0;
+ overflow: visible;
+ width: auto;
+ background: none;
+}
+
+/* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
+#cboxPrevious:active,
+#cboxNext:active,
+#cboxSlideshow:active,
+#cboxClose:active {
+ outline: 0;
+}
+
+#cboxSlideshow {
+ position: absolute;
+ bottom: 0px;
+ right: 42px;
+ color: #444;
+}
+
+#cboxPrevious {
+ position: absolute;
+ bottom: 0px;
+ left: 0;
+ color: #444;
+}
+
+#cboxNext {
+ position: absolute;
+ bottom: 0px;
+ left: 63px;
+ color: #444;
+}
+
+#cboxClose {
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ display: block;
+ color: #444;
+}
+
+/*
+ The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
+ when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9.
+ See: http://jacklmoore.com/notes/ie-transparency-problems/
+*/
+.cboxIE #cboxTopLeft,
+.cboxIE #cboxTopCenter,
+.cboxIE #cboxTopRight,
+.cboxIE #cboxBottomLeft,
+.cboxIE #cboxBottomCenter,
+.cboxIE #cboxBottomRight,
+.cboxIE #cboxMiddleLeft,
+.cboxIE #cboxMiddleRight {
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF, endColorstr=#00FFFFFF);
+} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/css/docs.css b/wqflask/wqflask/static/new/css/docs.css
new file mode 100644
index 00000000..665559e6
--- /dev/null
+++ b/wqflask/wqflask/static/new/css/docs.css
@@ -0,0 +1,1080 @@
+/* Add additional stylesheets below
+-------------------------------------------------- */
+/*
+ Bootstrap's documentation styles
+ Special styles for presenting Bootstrap's documentation and examples
+*/
+
+
+
+/* Body and structure
+-------------------------------------------------- */
+
+body {
+ position: relative;
+ padding-top: 0px;
+}
+
+/* Code in headings */
+h3 code {
+ font-size: 14px;
+ font-weight: normal;
+}
+
+
+
+/* Tweak navbar brand link to be super sleek
+-------------------------------------------------- */
+/*
+body > .navbar {
+ font-size: 12px;
+ font-weight: bold;
+}
+*/
+
+/* Change the docs' brand */
+
+body>.navbar .navbar-brand {
+ padding-right: 20px;
+ padding-left: 20px;
+ margin-left: 20px;
+ float: left;
+ font-weight: bold;
+ color: #ffffff;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, .1), 0 0 30px rgba(255, 255, 255, .125);
+ -webkit-transition: all .2s linear;
+ -moz-transition: all .2s linear;
+ transition: all .2s linear;
+}
+
+body>.navbar .brand:hover {
+ text-decoration: none;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, .1), 0 0 30px rgba(255, 255, 255, .4);
+}
+
+
+/* Sections
+-------------------------------------------------- */
+
+/* padding for in-page bookmarks and fixed navbar */
+section {
+ padding-top: 0px;
+}
+
+section>.page-header,
+section>.lead {
+ color: #5a5a5a;
+}
+
+section>ul li {
+ margin-bottom: 5px;
+}
+
+/* Separators (hr) */
+.bs-docs-separator {
+ margin: 40px 0 39px;
+}
+
+/* Faded out hr */
+hr.soften {
+ height: 1px;
+ margin: 70px 0;
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0), rgba(0, 0, 0, .1), rgba(0, 0, 0, 0));
+ background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0), rgba(0, 0, 0, .1), rgba(0, 0, 0, 0));
+ background-image: -ms-linear-gradient(left, rgba(0, 0, 0, 0), rgba(0, 0, 0, .1), rgba(0, 0, 0, 0));
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0), rgba(0, 0, 0, .1), rgba(0, 0, 0, 0));
+ border: 0;
+}
+
+
+
+/* Jumbotrons
+-------------------------------------------------- */
+
+/* Base class
+------------------------- */
+.jumbotron {
+ position: relative;
+ padding: 0px 0;
+ color: black;
+ text-align: left;
+ text-shadow: 0 1px 3px rgba(0, 0, 0, .4), 0 0 30px rgba(0, 0, 0, .075);
+ background: #d5d5d5;
+ /* Old browsers */
+
+}
+
+.jumbotron h1 {
+ font-size: 60px;
+ font-weight: bold;
+ letter-spacing: -1px;
+ line-height: 1;
+}
+
+.jumbotron p {
+ font-size: 20px;
+ font-weight: 300;
+ line-height: 20px;
+ margin-bottom: 10px;
+}
+
+/* Link styles (used on .masthead-links as well) */
+.jumbotron a {
+ color: #336699;
+ color: rgba(255, 255, 255, .5);
+ -webkit-transition: all .2s ease-in-out;
+ -moz-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+}
+
+.jumbotron a:hover {
+ color: #336699;
+ text-shadow: 0 0 10px rgba(255, 255, 255, .25);
+}
+
+/* Download button */
+.masthead .btn {
+ padding: 14px 24px;
+ font-size: 24px;
+ font-weight: 200;
+ color: #fff;
+ /* redeclare to override the `.jumbotron a` */
+ border: 0;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 5px rgba(0, 0, 0, .25);
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 5px rgba(0, 0, 0, .25);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 5px rgba(0, 0, 0, .25);
+ -webkit-transition: none;
+ -moz-transition: none;
+ transition: none;
+}
+
+.masthead .btn:hover {
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 5px rgba(0, 0, 0, .25);
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 5px rgba(0, 0, 0, .25);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 5px rgba(0, 0, 0, .25);
+}
+
+.masthead .btn:active {
+ -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, .1), 0 1px 0 rgba(255, 255, 255, .1);
+}
+
+
+/* Pattern overlay
+------------------------- */
+.jumbotron .container {
+ position: relative;
+ z-index: 2;
+}
+
+.jumbotron:after {
+ content: '';
+ display: block;
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ /*background: url(../img/bs-docs-masthead-pattern.png) repeat center center;*/
+ opacity: .4;
+}
+
+/* Masthead (docs home)
+------------------------- */
+.masthead {
+ padding: 70px 0 80px;
+ margin-bottom: 0;
+ color: #fff;
+}
+
+.masthead h1 {
+ font-size: 120px;
+ line-height: 1;
+ letter-spacing: -2px;
+}
+
+.masthead p {
+ font-size: 40px;
+ font-weight: 200;
+ line-height: 1.25;
+}
+
+/* Textual links in masthead */
+.masthead-links {
+ margin: 0;
+ list-style: none;
+}
+
+.masthead-links li {
+ display: inline;
+ padding: 0 10px;
+ color: rgba(255, 255, 255, .25);
+}
+
+/* Social proof buttons from GitHub & Twitter */
+.bs-docs-social {
+ padding: 15px 0;
+ text-align: center;
+ background-color: #f5f5f5;
+ border-top: 1px solid #fff;
+ border-bottom: 1px solid #ddd;
+}
+
+/* Quick links on Home */
+.bs-docs-social-buttons {
+ margin-left: 0;
+ margin-bottom: 0;
+ padding-left: 0;
+ list-style: none;
+}
+
+.bs-docs-social-buttons li {
+ display: inline-block;
+ padding: 5px 8px;
+ line-height: 1;
+ *display: inline;
+ *zoom: 1;
+}
+
+/* Subhead (other pages)
+------------------------- */
+.subhead {
+ text-align: left;
+ border-bottom: 1px solid #ddd;
+}
+
+.subhead h1 {
+ font-size: 30px;
+}
+
+.subhead p {
+ margin-bottom: 10px;
+}
+
+.subhead .navbar {
+ display: none;
+}
+
+
+
+/* Marketing section of Overview
+-------------------------------------------------- */
+
+.marketing {
+ text-align: center;
+ color: #5a5a5a;
+}
+
+.marketing h1 {
+ margin: 60px 0 10px;
+ font-size: 60px;
+ font-weight: 200;
+ line-height: 1;
+ letter-spacing: -1px;
+}
+
+.marketing h2 {
+ font-weight: 200;
+ margin-bottom: 5px;
+}
+
+.marketing p {
+ font-size: 16px;
+ line-height: 1.5;
+}
+
+.marketing .marketing-byline {
+ margin-bottom: 40px;
+ font-size: 20px;
+ font-weight: 300;
+ line-height: 25px;
+ color: #999;
+}
+
+.marketing img {
+ display: block;
+ margin: 0 auto 30px;
+}
+
+
+
+/* Footer
+-------------------------------------------------- */
+
+.footer {
+ padding: 70px 0;
+ margin-top: 70px;
+ border-top: 1px solid #e5e5e5;
+ background-color: #f5f5f5;
+}
+
+.footer p {
+ margin-bottom: 0;
+ color: #777;
+}
+
+.footer-links {
+ margin: 10px 0;
+}
+
+.footer-links li {
+ display: inline;
+ margin-right: 10px;
+}
+
+
+
+/* Special grid styles
+-------------------------------------------------- */
+
+.show-grid {
+ margin-top: 10px;
+ margin-bottom: 20px;
+}
+
+.show-grid [class*="span"] {
+ background-color: #eee;
+ text-align: center;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ min-height: 40px;
+ line-height: 40px;
+}
+
+.show-grid:hover [class*="span"] {
+ background: #ddd;
+}
+
+.show-grid .show-grid {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.show-grid .show-grid [class*="span"] {
+ background-color: #ccc;
+}
+
+
+
+/* Mini layout previews
+-------------------------------------------------- */
+.mini-layout {
+ border: 1px solid #ddd;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+ -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+}
+
+.mini-layout,
+.mini-layout .mini-layout-body,
+.mini-layout.fluid .mini-layout-sidebar {
+ height: 300px;
+}
+
+.mini-layout {
+ margin-bottom: 20px;
+ padding: 9px;
+}
+
+.mini-layout div {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.mini-layout .mini-layout-body {
+ background-color: #dceaf4;
+ margin: 0 auto;
+ width: 70%;
+}
+
+.mini-layout.fluid .mini-layout-sidebar,
+.mini-layout.fluid .mini-layout-header,
+.mini-layout.fluid .mini-layout-body {
+ float: left;
+}
+
+.mini-layout.fluid .mini-layout-sidebar {
+ background-color: #bbd8e9;
+ width: 20%;
+}
+
+.mini-layout.fluid .mini-layout-body {
+ width: 77.5%;
+ margin-left: 2.5%;
+}
+
+
+
+/* Download page
+-------------------------------------------------- */
+
+.download .page-header {
+ margin-top: 36px;
+}
+
+.page-header .toggle-all {
+ margin-top: 5px;
+}
+
+/* Space out h3s when following a section */
+.download h3 {
+ margin-bottom: 5px;
+}
+
+.download-builder input+h3,
+.download-builder .checkbox+h3 {
+ margin-top: 9px;
+}
+
+/* Fields for variables */
+.download-builder input[type=text] {
+ margin-bottom: 9px;
+ font-family: Menlo, Monaco, "Courier New", monospace;
+ font-size: 12px;
+ color: #d14;
+}
+
+.download-builder input[type=text]:focus {
+ background-color: #fff;
+}
+
+/* Custom, larger checkbox labels */
+.download .checkbox {
+ padding: 6px 10px 6px 25px;
+ font-size: 13px;
+ line-height: 18px;
+ color: #555;
+ background-color: #f9f9f9;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ cursor: pointer;
+}
+
+.download .checkbox:hover {
+ color: #333;
+ background-color: #f5f5f5;
+}
+
+.download .checkbox small {
+ font-size: 12px;
+ color: #777;
+}
+
+/* Variables section */
+#variables label {
+ margin-bottom: 0;
+}
+
+/* Giant download button */
+.download-btn {
+ margin: 36px 0 108px;
+}
+
+#download p,
+#download h4 {
+ max-width: 50%;
+ margin: 0 auto;
+ color: #999;
+ text-align: center;
+}
+
+#download h4 {
+ margin-bottom: 0;
+}
+
+#download p {
+ margin-bottom: 18px;
+}
+
+.download-btn .btn {
+ display: block;
+ width: auto;
+ padding: 19px 24px;
+ margin-bottom: 27px;
+ font-size: 30px;
+ line-height: 1;
+ text-align: center;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+
+
+
+/* Misc
+-------------------------------------------------- */
+
+/* Make tables spaced out a bit more */
+h2+table,
+h3+table,
+h4+table,
+h2+.row {
+ margin-top: 5px;
+}
+
+/* Example sites showcase */
+.example-sites {
+ xmargin-left: 20px;
+}
+
+.example-sites img {
+ max-width: 100%;
+ margin: 0 auto;
+}
+
+.scrollspy-example {
+ height: 200px;
+ overflow: auto;
+ position: relative;
+}
+
+
+/* Fake the :focus state to demo it */
+.focused {
+ border-color: rgba(82, 168, 236, .8);
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .1), 0 0 8px rgba(82, 168, 236, .6);
+ -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .1), 0 0 8px rgba(82, 168, 236, .6);
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, .1), 0 0 8px rgba(82, 168, 236, .6);
+ outline: 0;
+}
+
+/* For input sizes, make them display block */
+.docs-input-sizes select,
+.docs-input-sizes input[type=text] {
+ display: block;
+ margin-bottom: 9px;
+}
+
+/* Icons
+------------------------- */
+.the-icons {
+ margin-left: 0;
+ list-style: none;
+}
+
+.the-icons li {
+ float: left;
+ width: 25%;
+ line-height: 25px;
+}
+
+.the-icons i:hover {
+ background-color: rgba(255, 0, 0, .25);
+}
+
+/* Example page
+------------------------- */
+.bootstrap-examples p {
+ font-size: 13px;
+ line-height: 18px;
+}
+
+.bootstrap-examples .thumbnail {
+ margin-bottom: 9px;
+ background-color: #fff;
+}
+
+
+
+/* Bootstrap code examples
+-------------------------------------------------- */
+
+/* Base class */
+.bs-docs-example {
+ position: relative;
+ margin: 15px 0;
+ padding: 39px 19px 14px;
+ *padding-top: 19px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+
+/* Remove spacing between an example and it's code */
+.bs-docs-example+.prettyprint {
+ margin-top: -20px;
+ padding-top: 15px;
+}
+
+/* Tweak examples
+------------------------- */
+.bs-docs-example>p:last-child {
+ margin-bottom: 0;
+}
+
+.bs-docs-example .table,
+.bs-docs-example .progress,
+.bs-docs-example .well,
+.bs-docs-example .alert,
+.bs-docs-example .hero-unit,
+.bs-docs-example .pagination,
+.bs-docs-example .navbar,
+.bs-docs-example>.nav,
+.bs-docs-example blockquote {
+ margin-bottom: 5px;
+}
+
+.bs-docs-example .pagination {
+ margin-top: 0;
+}
+
+.bs-navbar-top-example,
+.bs-navbar-bottom-example {
+ z-index: 1;
+ padding: 0;
+ height: 90px;
+ overflow: hidden;
+ /* cut the drop shadows off */
+}
+
+.bs-navbar-top-example .navbar-fixed-top,
+.bs-navbar-bottom-example .navbar-fixed-bottom {
+ margin-left: 0;
+ margin-right: 0;
+}
+
+.bs-navbar-top-example {
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+
+.bs-navbar-top-example:after {
+ top: auto;
+ bottom: -1px;
+ -webkit-border-radius: 0 4px 0 4px;
+ -moz-border-radius: 0 4px 0 4px;
+ border-radius: 0 4px 0 4px;
+}
+
+.bs-navbar-bottom-example {
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+
+.bs-navbar-bottom-example .navbar {
+ margin-bottom: 0;
+}
+
+form.bs-docs-example {
+ padding-bottom: 19px;
+}
+
+/* Images */
+.bs-docs-example-images img {
+ margin: 10px;
+ display: inline-block;
+}
+
+/* Tooltips */
+.bs-docs-tooltip-examples {
+ text-align: center;
+ margin: 0 0 10px;
+ list-style: none;
+}
+
+.bs-docs-tooltip-examples li {
+ display: inline;
+ padding: 0 10px;
+}
+
+/* Popovers */
+.bs-docs-example-popover {
+ padding-bottom: 24px;
+ background-color: #f9f9f9;
+}
+
+.bs-docs-example-popover .popover {
+ position: relative;
+ display: block;
+ float: left;
+ width: 260px;
+ margin: 20px;
+}
+
+
+
+/* Responsive docs
+-------------------------------------------------- */
+
+/* Utility classes table
+------------------------- */
+.responsive-utilities th small {
+ display: block;
+ font-weight: normal;
+ color: #999;
+}
+
+.responsive-utilities tbody th {
+ font-weight: normal;
+}
+
+.responsive-utilities td {
+ text-align: center;
+}
+
+.responsive-utilities td.is-visible {
+ color: #468847;
+ background-color: #dff0d8 !important;
+}
+
+.responsive-utilities td.is-hidden {
+ color: #ccc;
+ background-color: #f9f9f9 !important;
+}
+
+/* Responsive tests
+------------------------- */
+.responsive-utilities-test {
+ margin-top: 5px;
+ margin-left: 0;
+ list-style: none;
+ overflow: hidden;
+ /* clear floats */
+}
+
+.responsive-utilities-test li {
+ position: relative;
+ float: left;
+ width: 25%;
+ height: 43px;
+ font-size: 14px;
+ font-weight: bold;
+ line-height: 43px;
+ color: #999;
+ text-align: center;
+ border: 1px solid #ddd;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.responsive-utilities-test li+li {
+ margin-left: 10px;
+}
+
+.responsive-utilities-test span {
+ position: absolute;
+ top: -1px;
+ left: -1px;
+ right: -1px;
+ bottom: -1px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.responsive-utilities-test span {
+ color: #468847;
+ background-color: #dff0d8;
+ border: 1px solid #d6e9c6;
+}
+
+
+
+/* Sidenav for Docs
+-------------------------------------------------- */
+
+.bs-docs-sidenav {
+ width: 228px;
+ margin: 30px 0 0;
+ padding: 0;
+ background-color: #fff;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, .065);
+ -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, .065);
+ box-shadow: 0 1px 4px rgba(0, 0, 0, .065);
+}
+
+.bs-docs-sidenav>li>a {
+ display: block;
+ *width: 190px;
+ margin: 0 0 -1px;
+ padding: 8px 14px;
+ border: 1px solid #e5e5e5;
+}
+
+.bs-docs-sidenav>li:first-child>a {
+ -webkit-border-radius: 6px 6px 0 0;
+ -moz-border-radius: 6px 6px 0 0;
+ border-radius: 6px 6px 0 0;
+}
+
+.bs-docs-sidenav>li:last-child>a {
+ -webkit-border-radius: 0 0 6px 6px;
+ -moz-border-radius: 0 0 6px 6px;
+ border-radius: 0 0 6px 6px;
+}
+
+.bs-docs-sidenav>.active>a {
+ position: relative;
+ z-index: 2;
+ padding: 9px 15px;
+ border: 0;
+ text-shadow: 0 1px 0 rgba(0, 0, 0, .15);
+ -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, .1), inset -1px 0 0 rgba(0, 0, 0, .1);
+ -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, .1), inset -1px 0 0 rgba(0, 0, 0, .1);
+ box-shadow: inset 1px 0 0 rgba(0, 0, 0, .1), inset -1px 0 0 rgba(0, 0, 0, .1);
+}
+
+/* Chevrons */
+.bs-docs-sidenav .icon-chevron-right {
+ float: right;
+ margin-top: 2px;
+ margin-right: -6px;
+ opacity: .25;
+}
+
+.bs-docs-sidenav>li>a:hover {
+ background-color: #f5f5f5;
+}
+
+.bs-docs-sidenav a:hover .icon-chevron-right {
+ opacity: .5;
+}
+
+.bs-docs-sidenav .active .icon-chevron-right,
+.bs-docs-sidenav .active a:hover .icon-chevron-right {
+ background-image: url(../img/glyphicons-halflings-white.png);
+ opacity: 1;
+}
+
+.bs-docs-sidenav.affix {
+ top: 40px;
+}
+
+.bs-docs-sidenav.affix-bottom {
+ position: absolute;
+ top: auto;
+ bottom: 270px;
+}
+
+
+
+
+/* Responsive
+-------------------------------------------------- */
+
+/* Desktop large
+------------------------- */
+@media (min-width: 1200px) {
+ .bs-docs-container {
+ max-width: 970px;
+ }
+
+ .bs-docs-sidenav {
+ width: 258px;
+ }
+}
+
+/* Desktop
+------------------------- */
+@media (max-width: 980px) {
+
+ /* Unfloat brand */
+ body>.navbar-fixed-top .brand {
+ float: left;
+ margin-left: 0;
+ padding-left: 10px;
+ padding-right: 10px;
+ }
+
+ /* Inline-block quick links for more spacing */
+ .quick-links li {
+ display: inline-block;
+ margin: 5px;
+ }
+
+ /* When affixed, space properly */
+ .bs-docs-sidenav {
+ top: 0;
+ margin-top: 30px;
+ margin-right: 0;
+ }
+}
+
+/* Tablet to desktop
+------------------------- */
+@media (min-width: 768px) and (max-width: 980px) {
+
+ /* Remove any padding from the body */
+ body {
+ padding-top: 0;
+ }
+
+ /* Widen masthead and social buttons to fill body padding */
+ .jumbotron {
+ margin-top: -20px;
+ /* Offset bottom margin on .navbar */
+ }
+
+ /* Adjust sidenav width */
+ .bs-docs-sidenav {
+ width: 166px;
+ margin-top: 20px;
+ }
+
+ .bs-docs-sidenav.affix {
+ top: 0;
+ }
+}
+
+/* Tablet
+------------------------- */
+@media (max-width: 767px) {
+
+ /* Remove any padding from the body */
+ body {
+ padding-top: 0;
+ }
+
+ /* Widen masthead and social buttons to fill body padding */
+ .jumbotron {
+ padding: 40px 20px;
+ margin-top: -20px;
+ /* Offset bottom margin on .navbar */
+ margin-right: -20px;
+ margin-left: -20px;
+ }
+
+ .masthead h1 {
+ font-size: 90px;
+ }
+
+ .masthead p,
+ .masthead .btn {
+ font-size: 24px;
+ }
+
+ .marketing .span4 {
+ margin-bottom: 40px;
+ }
+
+ .bs-docs-social {
+ margin: 0 -20px;
+ }
+
+ /* Space out the show-grid examples */
+ .show-grid [class*="span"] {
+ margin-bottom: 5px;
+ }
+
+ /* Sidenav */
+ .bs-docs-sidenav {
+ width: auto;
+ margin-bottom: 20px;
+ }
+
+ .bs-docs-sidenav.affix {
+ position: static;
+ width: auto;
+ top: 0;
+ }
+
+ /* Unfloat the back to top link in footer */
+ .footer {
+ margin-left: -20px;
+ margin-right: -20px;
+ padding-left: 20px;
+ padding-right: 20px;
+ }
+
+ .footer p {
+ margin-bottom: 9px;
+ }
+}
+
+/* Landscape phones
+------------------------- */
+@media (max-width: 480px) {
+
+ /* Remove padding above jumbotron */
+ body {
+ padding-top: 0;
+ }
+
+ /* Change up some type stuff */
+ h2 small {
+ display: block;
+ }
+
+ /* Downsize the jumbotrons */
+ .jumbotron h1 {
+ font-size: 40px;
+ }
+
+ .jumbotron p,
+ .jumbotron .btn {
+ font-size: 20px;
+ }
+
+ .jumbotron .btn {
+ display: block;
+ margin: 0 auto;
+ }
+
+ /* center align subhead text like the masthead */
+ .subhead h1,
+ .subhead p {
+ text-align: left;
+ }
+
+ /* Marketing on home */
+ .marketing h1 {
+ font-size: 40px;
+ }
+
+ /* center example sites */
+ .example-sites {
+ margin-left: 0;
+ }
+
+ .example-sites>li {
+ float: none;
+ display: block;
+ max-width: 280px;
+ margin: 0 auto 18px;
+ text-align: center;
+ }
+
+ .example-sites .thumbnail>img {
+ max-width: 270px;
+ }
+
+ /* Do our best to make tables work in narrow viewports */
+ table code {
+ white-space: normal;
+ word-wrap: break-word;
+ word-break: break-all;
+ }
+
+ /* Modal example */
+ .modal-example .modal {
+ position: relative;
+ top: auto;
+ right: auto;
+ bottom: auto;
+ left: auto;
+ }
+
+ /* Unfloat the back to top in footer to prevent odd text wrapping */
+ .footer .pull-right {
+ float: none;
+ }
+} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/css/main.css b/wqflask/wqflask/static/new/css/main.css
index 097cd997..d5fb8a61 100644
--- a/wqflask/wqflask/static/new/css/main.css
+++ b/wqflask/wqflask/static/new/css/main.css
@@ -33,4 +33,8 @@
.collapsing {
overflow: hidden!important;
}
+}
+
+.checkbox {
+ min-height: 20px;
} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/css/markdown.css b/wqflask/wqflask/static/new/css/markdown.css
new file mode 100644
index 00000000..859fe7fc
--- /dev/null
+++ b/wqflask/wqflask/static/new/css/markdown.css
@@ -0,0 +1,108 @@
+#markdown {
+ padding: 20px;
+}
+
+#markdown h2,
+#markdown h3,
+#markdown h4,
+#markdown h5 {
+ font-weight: bold;
+}
+
+#markdown img {
+ display: block;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.github-btn-container {
+ margin: 20px 10px;
+ display: flex;
+ width: 90vw;
+ justify-content: flex-end;
+}
+
+.github-btn {
+ display: flex;
+ justify-content: center;
+ border: 3px solid #357ebd;
+ background: lightgrey;
+ padding: 3px 4px;
+ width: 200px;
+ border-radius: 16px;
+}
+
+.github-btn a {
+ align-self: center;
+ font-weight: bold;
+ color: #357ebd;
+}
+
+.github-btn a img {
+ height: 40px;
+ width: 40px;
+ padding-left:5px;
+}
+
+
+.container {
+ width: 80vw;
+ margin: auto;
+ max-width: 80vw;
+
+}
+
+.container p {
+ font-size: 17px;
+ word-spacing: 0.2em;
+}
+
+.graph-legend h1 {
+ text-align: center;
+}
+
+.graph-legend,
+#guix-graph,
+#guix-svg-graph{
+ width: 90%;
+ margin: 10px auto;
+}
+
+#guix-graph {
+ border: solid 2px black;
+}
+
+#guix-svg-graph img {
+ width: 100%;
+}
+
+#markdown table {
+ width: 100%;
+}
+
+#markdown td {
+ padding: 1em;
+ text-align: left;
+}
+
+#markdown th {
+ text-align: center;
+}
+
+#markdown table,
+#markdown td,
+#markdown th {
+ border: solid 2px black;
+}
+
+#markdown td,
+#markdown th {
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+
+@media(max-width:650px) {
+ .container {
+ width: 100vw;
+ }
+}
diff --git a/wqflask/wqflask/static/new/css/marker_regression.css b/wqflask/wqflask/static/new/css/marker_regression.css
index f1a26a83..9f56b63d 100644
--- a/wqflask/wqflask/static/new/css/marker_regression.css
+++ b/wqflask/wqflask/static/new/css/marker_regression.css
@@ -48,10 +48,10 @@ table.dataTable thead th{
}
table.dataTable thead .sorting_asc {
- background-image: url("../packages/DataTables/images/sort_asc_disabled.png");
+ background-image: url("/js/DataTables/images/sort_asc_disabled.png");
}
table.dataTable thead .sorting_desc {
- background-image: url("../packages/DataTables/images/sort_desc_disabled.png");
+ background-image: url("/js/DataTables/images/sort_desc_disabled.png");
}
table.dataTable thead th {
@@ -62,6 +62,10 @@ table.dataTable tbody td {
padding: 4px 20px 2px 10px;
}
+table.dataTable tbody tr.selected {
+ background-color: #ffee99;
+}
+
table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
border-top: 1px solid #ccc;
border-right: 1px solid #ccc;
diff --git a/wqflask/wqflask/static/new/css/non-responsive.css b/wqflask/wqflask/static/new/css/non-responsive.css
new file mode 100644
index 00000000..a4bcddd2
--- /dev/null
+++ b/wqflask/wqflask/static/new/css/non-responsive.css
@@ -0,0 +1,114 @@
+/* Template-specific stuff
+ *
+ * Customizations just for the template; these are not necessary for anything
+ * with disabling the responsiveness.
+ */
+
+/* Account for fixed navbar */
+body {
+ //min-width: 1200px;
+ padding-top: 70px;
+ padding-bottom: 30px;
+}
+
+/* Finesse the page header spacing */
+.page-header {
+ margin-bottom: 10px;
+}
+
+.page-header .lead {
+ margin-bottom: 10px;
+}
+
+
+/* Non-responsive overrides
+ *
+ * Utilitze the following CSS to disable the responsive-ness of the container,
+ * grid system, and navbar.
+ */
+
+/* Reset the container */
+.container {
+ width: 100%;
+ max-width: none !important;
+}
+
+
+.container .navbar-header,
+.container .navbar-collapse {
+ margin-right: 0;
+ margin-left: 0;
+}
+
+/* Always float the navbar header */
+.navbar-header {
+ float: left;
+}
+
+/* Undo the collapsing navbar */
+.navbar-collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0;
+ overflow: visible !important;
+}
+
+.navbar-toggle {
+ display: none;
+}
+
+.navbar-collapse {
+ border-top: 0;
+}
+
+/* Always apply the floated nav */
+.navbar-nav {
+ float: left;
+ margin: 0;
+}
+
+.navbar-nav>li {
+ float: left;
+}
+
+.navbar-nav>li>a {
+ padding: 5px;
+}
+
+/* Redeclare since we override the float above */
+.navbar-nav.navbar-right {
+ float: right;
+}
+
+/* Undo custom dropdowns */
+.navbar .navbar-nav .open .dropdown-menu {
+ position: absolute;
+ float: left;
+ background-color: #fff;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-width: 0 1px 1px;
+ border-radius: 0 0 4px 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+}
+
+.navbar-default .navbar-nav .open .dropdown-menu>li>a {
+ color: #333;
+}
+
+.navbar .navbar-nav .open .dropdown-menu>li>a:hover,
+.navbar .navbar-nav .open .dropdown-menu>li>a:focus,
+.navbar .navbar-nav .open .dropdown-menu>.active>a,
+.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,
+.navbar .navbar-nav .open .dropdown-menu>.active>a:focus {
+ color: #fff !important;
+ background-color: #3071a9 !important;
+}
+
+.navbar .navbar-nav .open .dropdown-menu>.disabled>a,
+.navbar .navbar-nav .open .dropdown-menu>.disabled>a:hover,
+.navbar .navbar-nav .open .dropdown-menu>.disabled>a:focus {
+ color: #999 !important;
+ background-color: transparent !important;
+} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/css/show_trait.css b/wqflask/wqflask/static/new/css/show_trait.css
index d3e6672a..27404801 100644
--- a/wqflask/wqflask/static/new/css/show_trait.css
+++ b/wqflask/wqflask/static/new/css/show_trait.css
@@ -1,17 +1,17 @@
tr .outlier {
- background-color: #ffff99;
+ background-color: #ffff99;
}
table.dataTable tbody tr.selected {
- background-color: #ffee99;
+ background-color: #ffee99;
}
#bar_chart_container {
- overflow-x:scroll;
+ overflow-x:scroll;
}
div.sample_group {
- overflow: auto; # needed because it contains float dataTable wrapper
+ overflow: auto; # needed because it contains float dataTable wrapper
}
.js-plotly-plot .plotly .modebar {
@@ -25,18 +25,23 @@ table.dataTable thead th, table.dataTable tfoot th{
}
table.dataTable thead .sorting_asc {
- background-image: url("../packages/DataTables/images/sort_asc_disabled.png");
+ background-image: url("/js/DataTables/images/sort_asc_disabled.png");
}
table.dataTable thead .sorting_desc {
- background-image: url("../packages/DataTables/images/sort_desc_disabled.png");
+ background-image: url("/js/DataTables/images/sort_desc_disabled.png");
}
table.dataTable thead th, table.dataTable tfoot {
padding: 4px 18px 4px 10px;
}
+/* Header for a column with a numeric value that should be right-aligned */
+table.dataTable thead th div.numeric_header {
+ text-align: right;
+}
+
table.dataTable tbody td {
- padding: 4px 20px 2px 10px;
+ padding: 2px 15px 0px 10px;
}
table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
@@ -46,4 +51,212 @@ table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
table.dataTable.cell-border tbody tr th:first-child,
table.dataTable.cell-border tbody tr td:first-child {
border-left: 1px solid #ccc;
+}
+
+.checkbox {
+ min-height: 20px;
+}
+
+.trait_value_input {
+ text-align: right;
+}
+
+.glyphicon {
+ position: relative;
+ top: 2px;
+}
+
+.showtrait-main-div {
+ min-width: 1100px;
+}
+
+table.dataTable tbody td.column_name-Checkbox {
+ padding: 1px 0px 0px 9px; /* The left padding here is because text-align:center does not seem to be working properly. No idea why this is. */
+ text-align: center;
+ vertical-align: middle;
+}
+
+table.dataTable tbody td.column_name-Index {
+ padding: 2px 4px 0px 2px;
+ text-align: right;
+}
+
+/* the column with +/- in it that appears in the table when there's an SE column */
+table.dataTable tbody td.column_name-PlusMinus {
+ padding-left: 2px;
+ padding-right: 2px;
+ text-align: center;
+}
+
+table.dataTable tbody td.column_name-Value, table.dataTable tbody td.column_name-SE, table.dataTable tbody td.column_name-num_cases {
+ text-align: right;
+}
+
+div.btn-toolbar {
+ margin-bottom:15px;
+}
+
+/* div containing the form options for each segment of the trait page - correlations, statistics, mapping, etc */
+div.section-form-div {
+ padding: 20px;
+}
+
+table.left-float {
+ float: left;
+}
+
+div.scatterplot-btn-div {
+ margin-bottom:40px;
+}
+
+div.correlation-main {
+ min-width: 1200px;
+}
+
+div.correlation-options {
+ min-width: 700px;
+}
+
+.min-expr-field {
+ width: 70px;
+}
+
+div.p-range-slider {
+ width: 200px;
+ margin-left: 15px;
+}
+
+span.p-range-lower {
+ margin-top: 5px;
+ font: 400 12px Arial;
+ color: #888;
+ display: inline-block;
+}
+
+span.p-range-upper {
+ font: 400 12px Arial;
+ color: #888;
+ display: inline-block;
+ margin: 5px 0px 0px 170px;
+}
+
+input.corr-location {
+ width: 50px;
+ display: inline;
+}
+
+div.block-div {
+ margin-bottom: 10px;
+}
+
+div.block-div-2 {
+ margin-top:10px;
+ margin-bottom:10px;
+}
+
+div.normalize-div {
+ margin-top:10px;
+}
+
+div.mapping-main {
+ min-width: 1200px;
+}
+div.mapping-options {
+ min-width: 500px;
+}
+
+div.covar-options {
+ padding-top: 7px;
+}
+
+.control-label {
+ text-align: right;
+}
+
+.chr-select, .maf-select, .scale-select, .reaper-ver-select {
+ width: 80px;
+}
+
+span.covar-text {
+ font-size: 13px;
+ font-weight: 400;
+}
+
+div.select-covar-div {
+ margin-bottom: 10px;
+}
+
+.select-covar-button {
+ width: 80px;
+ padding-right: 10px;
+}
+
+.selected-covariates {
+ overflow-y: scroll;
+ resize: none;
+ width: 200px;
+}
+
+.cofactor-input {
+ width: 160px;
+ display: inline-block;
+}
+
+.no-control-radio {
+ margin-left: 10px;
+}
+
+.map-method-text {
+ margin-top: 20px;
+}
+
+.rqtl-description {
+ padding-top: 40px;
+ display: none;
+}
+
+div.sample-table-container {
+ padding-bottom: 10px;
+}
+
+div.sample-table-search-container {
+ display: inline;
+ height: 40px;
+}
+
+input.sample-table-search {
+ width: 200px;
+ display: inline;
+ float: left;
+ vertical-align: top;
+}
+
+div.sample-table-export-container {
+ padding-left: 10px;
+ display: inline;
+}
+
+div.export-code-container {
+ padding-top: 20px;
+ width: 600px;
+ display: none;
+}
+
+.export-code-field {
+ padding-top: 0px;
+ padding-bottom: 0px;
+ height: 150px;
+}
+
+table.sample-table {
+ float: left;
+ width:100%;
+}
+
+input.trait-value-input {
+ text-align: right;
+}
+
+div.inline-div {
+ display: inline;
} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/css/snp_browser.css b/wqflask/wqflask/static/new/css/snp_browser.css
index 30fe9a59..a7942d2a 100644
--- a/wqflask/wqflask/static/new/css/snp_browser.css
+++ b/wqflask/wqflask/static/new/css/snp_browser.css
@@ -6,6 +6,10 @@ table.dataTable thead th {
vertical-align: bottom;
}
+table.dataTable tbody tr.selected {
+ background-color: #ffee99;
+}
+
table.dataTable thead .sorting,
table.dataTable thead .sorting_asc,
table.dataTable thead .sorting_desc,
@@ -18,7 +22,7 @@ table.dataTable thead .sorting_desc_disabled {
table.dataTable thead th{
border-right: 1px solid white;
color: white;
- background-color: royalblue;
+ background-color: #369;
}
table.dataTable tbody td {
diff --git a/wqflask/wqflask/static/new/css/trait_list.css b/wqflask/wqflask/static/new/css/trait_list.css
new file mode 100644
index 00000000..c7249721
--- /dev/null
+++ b/wqflask/wqflask/static/new/css/trait_list.css
@@ -0,0 +1,54 @@
+div.tool-button-container {
+ min-width: 950px;
+}
+
+div.collection-table-options {
+ min-width: 1100px;
+}
+
+div.show-hide-container {
+ margin-bottom: 5px;
+ margin-top: 10px;
+}
+
+button.active {
+ background: #BEBEBE;
+ -webkit-box-shadow: inset 0px 0px 5px #c1c1c1;
+ -moz-box-shadow: inset 0px 0px 5px #c1c1c1;
+ box-shadow: inset 0px 0px 5px #c1c1c1;
+ outline: none;
+}
+
+div.dts {
+ display:block !important
+}
+
+div.dts div.dts_loading {
+ z-index:1
+}
+
+div.dts div.dts_label {
+ position:absolute;
+ right:10px;
+ background:rgba(0,0,0,0.8);
+ color:white;
+ box-shadow:3px 3px 10px rgba(0,0,0,0.5);
+ text-align:right;
+ border-radius:3px;
+ padding:0.4em;
+ z-index:2;
+ display:none
+}
+
+div.dts div.dataTables_scrollBody {
+ background:repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, #fff 10px, #fff 20px)
+}
+
+div.dts div.dataTables_scrollBody table {
+ z-index:2
+}
+
+div.dts div.dataTables_paginate,div.dts div.dataTables_length{
+ display:none
+}
+
diff --git a/wqflask/wqflask/static/new/javascript/auto_hide_column.js b/wqflask/wqflask/static/new/javascript/auto_hide_column.js
new file mode 100644
index 00000000..1a4dc039
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/auto_hide_column.js
@@ -0,0 +1,21 @@
+ function filterDatatable(datatable){
+ let invalidColumns=[]
+ let columnCount=datatable.columns().header().length;
+ let numberOfRows=datatable.rows().count();
+ for (let col=0; col<columnCount; col++){
+ colObj = datatable.column(col).nodes().to$();
+ allNAs = true;
+ for (let i=0;i<numberOfRows;i++){
+ cellContent = colObj[i].childNodes[0].data
+ if (cellContent != "N/A" && cellContent != ""){
+ allNAs = false;
+ break;
+ }
+ }
+ if (allNAs){
+ invalidColumns.push(col)
+ }
+ }
+ return datatable.columns(invalidColumns).visible(false);
+
+ } \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/dataset_select_menu_orig.js b/wqflask/wqflask/static/new/javascript/dataset_select_menu_orig.js
index ee7be68c..1d4a94d9 100644
--- a/wqflask/wqflask/static/new/javascript/dataset_select_menu_orig.js
+++ b/wqflask/wqflask/static/new/javascript/dataset_select_menu_orig.js
@@ -81,11 +81,17 @@ redo_dropdown = function(dropdown, items) {
this_opt_group.append($("<option />").val(item[0]).text(item[1]));
} else if (current_family != "" && item[2] == current_family){
this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ if (_i == group_family_list.length - 1){
+ _results.push(dropdown.append(this_opt_group))
+ }
} else if (current_family != "" && item[2] != current_family && item[2] != "None"){
current_family = item[2]
_results.push(dropdown.append(this_opt_group))
this_opt_group = $("<optgroup label=\"" + current_family + "\">")
this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ if (_i == group_family_list.length - 1){
+ _results.push(dropdown.append(this_opt_group))
+ }
} else if (current_family != "" && this_opt_group != null && item[2] == "None"){
_results.push(dropdown.append(this_opt_group))
current_family = ""
@@ -94,6 +100,43 @@ redo_dropdown = function(dropdown, items) {
_results.push(dropdown.append($("<option />").val(item[0]).text(item[1])));
}
}
+ } else if (dropdown.attr('id') == "type"){
+ type_family_list = [];
+ for (_i = 0, _len = items.length; _i < _len; _i++) {
+ item = items[_i];
+ type_family_list.push([item[0], item[1], item[2]])
+ }
+
+ current_family = ""
+ this_opt_group = null
+ for (_i = 0, _len = type_family_list.length; _i < _len; _i++) {
+ item = type_family_list[_i];
+ if (item[2] != "None" && current_family == ""){
+ current_family = item[2]
+ this_opt_group = $("<optgroup label=\"" + item[2] + "\">")
+ this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ if (_i == type_family_list.length - 1){
+ _results.push(dropdown.append(this_opt_group))
+ }
+ } else if (current_family != "" && item[2] == current_family){
+ this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ if (_i == type_family_list.length - 1){
+ _results.push(dropdown.append(this_opt_group))
+ }
+ } else if (current_family != "" && item[2] != current_family && item[2] != "None"){
+ current_family = item[2]
+ _results.push(dropdown.append(this_opt_group))
+ this_opt_group = $("<optgroup label=\"" + current_family + "\">")
+ this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ if (_i == type_family_list.length - 1){
+ _results.push(dropdown.append(this_opt_group))
+ }
+ } else {
+ _results.push(dropdown.append(this_opt_group))
+ current_family = ""
+ _results.push(dropdown.append($("<option />").val(item[0]).text(item[1])));
+ }
+ }
} else {
for (_i = 0, _len = items.length; _i < _len; _i++) {
item = items[_i];
@@ -104,6 +147,7 @@ redo_dropdown = function(dropdown, items) {
}
}
}
+
return _results;
};
$('#species').change((function(_this) {
@@ -135,7 +179,7 @@ group_info = function() {
var group, species, url;
species = $('#species').val();
group = $('#group').val();
- url = "/" + species + "Cross.html#" + group;
+ url = "http://gn1.genenetwork.org/" + species + "Cross.html#" + group;
return open_window(url, "Group Info");
};
$('#group_info').click(group_info);
diff --git a/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js b/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js
index 956e0467..1bae8773 100644
--- a/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js
+++ b/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js
@@ -337,14 +337,13 @@ function getdata() {
continue
}
+ sizev = 10;
+ datav = 0;
if (size_cofactor_vals.length > 0){
if (cofactor_samples.indexOf(js_data.indIDs[j])) {
datav = size_cofactor_vals[j]
sizev = map1to2(datamin, datamax, sizemin, sizemax, datav);
}
- } else {
- datav = 0;
- sizev = 10;
}
x_values.push(js_data.data[0][j])
diff --git a/wqflask/wqflask/static/new/javascript/draw_probability_plot.js b/wqflask/wqflask/static/new/javascript/draw_probability_plot.js
index 3d756303..1b944d4f 100644
--- a/wqflask/wqflask/static/new/javascript/draw_probability_plot.js
+++ b/wqflask/wqflask/static/new/javascript/draw_probability_plot.js
@@ -118,7 +118,6 @@
};
};
data = [make_data('samples_primary'), make_data('samples_other')];
- console.log("THE DATA IS:", data);
d3.select("#prob_plot_container svg").datum(data).call(chart);
if (js_data.trait_symbol != null) {
$("#prob_plot_title").html("<h3>" + js_data.trait_symbol + ": " + js_data.trait_id + "</h3>");
diff --git a/wqflask/wqflask/static/new/javascript/get_covariates_from_collection.js b/wqflask/wqflask/static/new/javascript/get_covariates_from_collection.js
index 8cd6dac3..3e414034 100644
--- a/wqflask/wqflask/static/new/javascript/get_covariates_from_collection.js
+++ b/wqflask/wqflask/static/new/javascript/get_covariates_from_collection.js
@@ -37,29 +37,31 @@ $('#trait_table').dataTable( {
"orderClasses": true
} );
-$('#collection_table').dataTable( {
- "createdRow": function ( row, data, index ) {
- if ($('td', row).eq(2).text().length > 40) {
- $('td', row).eq(2).text($('td', row).eq(2).text().substring(0, 40));
- $('td', row).eq(2).text($('td', row).eq(2).text() + '...')
- }
- if ($('td', row).eq(4).text().length > 50) {
- $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 50));
- $('td', row).eq(4).text($('td', row).eq(4).text() + '...')
- }
- },
- "columnDefs": [ {
- "targets": 0,
- "orderable": false
- } ],
- "order": [[1, "asc" ]],
- "sDom": "ZRtr",
- "iDisplayLength": -1,
- "autoWidth": true,
- "bSortClasses": false,
- "paging": false,
- "orderClasses": true
-} );
+if ( ! $.fn.DataTable.isDataTable( '#collection_table' ) ) {
+ $('#collection_table').dataTable( {
+ "createdRow": function ( row, data, index ) {
+ if ($('td', row).eq(2).text().length > 40) {
+ $('td', row).eq(2).text($('td', row).eq(2).text().substring(0, 40));
+ $('td', row).eq(2).text($('td', row).eq(2).text() + '...')
+ }
+ if ($('td', row).eq(4).text().length > 50) {
+ $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 50));
+ $('td', row).eq(4).text($('td', row).eq(4).text() + '...')
+ }
+ },
+ "columnDefs": [ {
+ "targets": 0,
+ "orderable": false
+ } ],
+ "order": [[1, "asc" ]],
+ "sDom": "ZRtr",
+ "iDisplayLength": -1,
+ "autoWidth": true,
+ "bSortClasses": false,
+ "paging": false,
+ "orderClasses": true
+ } );
+}
collection_click = function() {
var this_collection_url;
@@ -102,7 +104,7 @@ submit_click = function() {
//covariates_display_string = covariates_display_string.substring(0, covariates_display_string.length - 2)
$("input[name=covariates]").val(covariates_string)
- $(".selected_covariates").val(covariates_display_string)
+ $(".selected-covariates").val(covariates_display_string)
return $.colorbox.close();
};
@@ -110,9 +112,9 @@ submit_click = function() {
trait_click = function() {
var dataset, this_trait_url, trait;
trait = $(this).parent().find('.trait').text();
- dataset = $(this).parent().find('.dataset').text();
+ dataset = $(this).parent().find('.dataset').data("dataset");
$("input[name=covariates]").val(trait + ":" + dataset)
- $(".selected_covariates").text(trait)
+ $(".selected-covariates").text(trait)
return $.colorbox.close();
};
diff --git a/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js b/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js
index 6f03b98f..626357d4 100644
--- a/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js
+++ b/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js
@@ -2,10 +2,6 @@
var add_trait_data, assemble_into_json, back_to_collections, collection_click, collection_list, color_by_trait, create_trait_data_csv, get_this_trait_vals, get_trait_data, process_traits, selected_traits, submit_click, this_trait_data, trait_click,
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
-console.log("before get_traits_from_collection");
-
-//collection_list = null;
-
this_trait_data = null;
selected_traits = {};
@@ -41,33 +37,35 @@ $('#trait_table').dataTable( {
"orderClasses": true
} );
-$('#collection_table').dataTable( {
- "createdRow": function ( row, data, index ) {
- if ($('td', row).eq(2).text().length > 40) {
- $('td', row).eq(2).text($('td', row).eq(2).text().substring(0, 40));
- $('td', row).eq(2).text($('td', row).eq(2).text() + '...')
- }
- if ($('td', row).eq(4).text().length > 50) {
- $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 50));
- $('td', row).eq(4).text($('td', row).eq(4).text() + '...')
- }
- },
- "columnDefs": [ {
- "targets": 0,
- "orderable": false
- } ],
- "order": [[1, "asc" ]],
- "sDom": "ZRtr",
- "iDisplayLength": -1,
- "autoWidth": true,
- "bSortClasses": false,
- "paging": false,
- "orderClasses": true
-} );
+if ( ! $.fn.DataTable.isDataTable( '#collection_table' ) ) {
+ $('#collection_table').dataTable( {
+ "createdRow": function ( row, data, index ) {
+ if ($('td', row).eq(2).text().length > 40) {
+ $('td', row).eq(2).text($('td', row).eq(2).text().substring(0, 40));
+ $('td', row).eq(2).text($('td', row).eq(2).text() + '...')
+ }
+ if ($('td', row).eq(4).text().length > 50) {
+ $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 50));
+ $('td', row).eq(4).text($('td', row).eq(4).text() + '...')
+ }
+ },
+ "columnDefs": [ {
+ "targets": 0,
+ "orderable": false
+ } ],
+ "order": [[1, "asc" ]],
+ "sDom": "ZRtr",
+ "iDisplayLength": -1,
+ "autoWidth": true,
+ "bSortClasses": false,
+ "paging": false,
+ "orderClasses": true
+ } );
+}
collection_click = function() {
var this_collection_url;
- //console.log("Clicking on:", $(this));
+
this_collection_url = $(this).find('.collection_name').prop("href");
this_collection_url += "&json";
collection_list = $("#collections_holder").html();
@@ -85,9 +83,7 @@ submit_click = function() {
$('#collections_holder').find('input[type=checkbox]:checked').each(function() {
var this_dataset, this_trait, this_trait_url;
this_trait = $(this).parents('tr').find('.trait').text();
- console.log("this_trait is:", this_trait);
this_dataset = $(this).parents('tr').find('.dataset').text();
- console.log("this_dataset is:", this_dataset);
this_trait_url = "/trait/get_sample_data?trait=" + this_trait + "&dataset=" + this_dataset;
return $.ajax({
dataType: "json",
@@ -145,7 +141,7 @@ create_trait_data_csv = function(selected_traits) {
}
all_vals.push(this_trait_vals);
}
- console.log("all_vals:", all_vals);
+
trait_vals_csv = trait_names.join(",");
trait_vals_csv += "\n";
for (index = _k = 0, _len2 = samples.length; _k < _len2; index = ++_k) {
@@ -166,7 +162,7 @@ create_trait_data_csv = function(selected_traits) {
trait_click = function() {
var dataset, this_trait_url, trait;
- console.log("Clicking on:", $(this));
+
trait = $(this).parent().find('.trait').text();
dataset = $(this).parent().find('.dataset').text();
this_trait_url = "/trait/get_sample_data?trait=" + trait + "&dataset=" + dataset;
@@ -180,7 +176,6 @@ trait_click = function() {
trait_row_click = function() {
var dataset, this_trait_url, trait;
- console.log("Clicking on:", $(this));
trait = $(this).find('.trait').text();
dataset = $(this).find('.dataset').data("dataset");
this_trait_url = "/trait/get_sample_data?trait=" + trait + "&dataset=" + dataset;
@@ -206,13 +201,17 @@ populate_cofactor_info = function(trait_info) {
if (trait_info['type'] == "ProbeSet"){
$('#cofactor1_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['tissue'] + " " + trait_info['db'] + ": " + trait_info['name'])
$('#cofactor1_description').text("[" + trait_info['symbol'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
- } else {
+ } else if (trait_info['type'] == "Publish") {
$('#cofactor1_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
if ('pubmed_link' in trait_info) {
$('#cofactor1_description').html('<a href=\"' + trait_info['pubmed_link'] + '\">PubMed: ' + trait_info['pubmed_text'] + '</a><br>' + trait_info['description'])
} else {
- $('#cofactor1_description').html('PubMed: ' + trait_info['pubmed_text'] + '<br>' + trait_info['description'])
+ $('#cofactor1_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor1_description').text("[" + trait_info['name'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
}
+ } else {
+ $('#cofactor1_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor1_description').text("[" + trait_info['name'] + " on " + trait_info['location'] + " Mb]\n")
}
$('#select_cofactor1').text("Change Cofactor 1");
$('#cofactor1_info_container').css("display", "inline");
@@ -222,13 +221,17 @@ populate_cofactor_info = function(trait_info) {
if (trait_info['type'] == "ProbeSet"){
$('#cofactor2_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['tissue'] + " " + trait_info['db'] + ": " + trait_info['name'])
$('#cofactor2_description').text("[" + trait_info['symbol'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
- } else {
+ } else if (trait_info['type'] == "Publish") {
$('#cofactor2_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
if ('pubmed_link' in trait_info) {
$('#cofactor2_description').html('<a href=\"' + trait_info['pubmed_link'] + '\">PubMed: ' + trait_info['pubmed_text'] + '</a><br>' + trait_info['description'])
} else {
- $('#cofactor2_description').html('PubMed: ' + trait_info['pubmed_text'] + '<br>' + trait_info['description'])
+ $('#cofactor2_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor2_description').text("[" + trait_info['name'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
}
+ } else {
+ $('#cofactor2_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor2_description').text("[" + trait_info['name'] + " on " + trait_info['location'] + " Mb]\n")
}
$('#select_cofactor2').text("Change Cofactor 2");
$('#cofactor2_info_container').css("display", "inline");
@@ -238,13 +241,17 @@ populate_cofactor_info = function(trait_info) {
if (trait_info['type'] == "ProbeSet"){
$('#cofactor3_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['tissue'] + " " + trait_info['db'] + ": " + trait_info['name'])
$('#cofactor3_description').text("[" + trait_info['symbol'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
- } else {
+ } else if (trait_info['type'] == "Publish") {
$('#cofactor3_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
if ('pubmed_link' in trait_info) {
$('#cofactor3_description').html('<a href=\"' + trait_info['pubmed_link'] + '\">PubMed: ' + trait_info['pubmed_text'] + '</a><br>' + trait_info['description'])
} else {
- $('#cofactor3_description').html('PubMed: ' + trait_info['pubmed_text'] + '<br>' + trait_info['description'])
+ $('#cofactor3_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor3_description').text("[" + trait_info['name'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
}
+ } else {
+ $('#cofactor3_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor3_description').text("[" + trait_info['name'] + " on " + trait_info['location'] + " Mb]\n")
}
$('#select_cofactor3').text("Change Cofactor 3");
$('#cofactor3_info_container').css("display", "inline");
@@ -254,7 +261,6 @@ populate_cofactor_info = function(trait_info) {
get_trait_data = function(trait_data, textStatus, jqXHR) {
var sample, samples, this_trait_vals, trait_sample_data, vals, _i, _len;
trait_sample_data = trait_data[1];
- console.log("IN GET TRAIT DATA")
if ( $('input[name=allsamples]').length ) {
samples = $('input[name=allsamples]').val().split(" ");
} else {
@@ -360,13 +366,11 @@ assemble_into_json = function(this_trait_vals) {
};
color_by_trait = function(trait_sample_data, textStatus, jqXHR) {
- console.log('in color_by_trait:', trait_sample_data);
return root.bar_chart.color_by_trait(trait_sample_data);
};
process_traits = function(trait_data, textStatus, jqXHR) {
var the_html, trait, _i, _len;
- console.log('in process_traits with trait_data:', trait_data);
the_html = "<button id='back_to_collections' class='btn btn-inverse btn-small'>";
the_html += "<i class='icon-white icon-arrow-left'></i> Back </button>";
the_html += " <button id='submit' class='btn btn-primary btn-small'> Submit </button>";
@@ -395,13 +399,11 @@ process_traits = function(trait_data, textStatus, jqXHR) {
};
back_to_collections = function() {
- collection_list_html = $('#collection_list_html').html()
- $("#collections_holder").html(collection_list_html);
+ $("#collections_holder").html(collection_list);
$(document).on("click", ".collection_line", collection_click);
return $('#collections_holder').colorbox.resize();
};
-console.log("inside get_traits_from_collection");
$(".collection_line").on("click", collection_click);
$("#submit").on("click", submit_click);
if ($('#scatterplot2').length){
diff --git a/wqflask/wqflask/static/new/javascript/group_manager.js b/wqflask/wqflask/static/new/javascript/group_manager.js
new file mode 100644
index 00000000..4c172cbf
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/group_manager.js
@@ -0,0 +1,38 @@
+$('#add_to_admins').click(function() {
+ add_emails('admin')
+})
+
+$('#add_to_members').click(function() {
+ add_emails('member')
+})
+
+$('#clear_admins').click(function(){
+ clear_emails('admin')
+})
+
+$('#clear_members').click(function(){
+ clear_emails('member')
+})
+
+
+function add_emails(user_type){
+ var email_address = $('input[name=user_email]').val();
+ var email_list_string = $('input[name=' + user_type + '_emails_to_add]').val().trim()
+ console.log(email_list_string)
+ if (email_list_string == ""){
+ var email_set = new Set();
+ } else {
+ var email_set = new Set(email_list_string.split(","))
+ }
+ email_set.add(email_address)
+
+ $('input[name=' + user_type + '_emails_to_add]').val(Array.from(email_set).join(','))
+
+ var emails_display_string = Array.from(email_set).join('\n')
+ $('.added_' + user_type + 's').val(emails_display_string)
+}
+
+function clear_emails(user_type){
+ $('input[name=' + user_type + '_emails_to_add]').val("")
+ $('.added_' + user_type + 's').val("")
+} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/init_genome_browser.js b/wqflask/wqflask/static/new/javascript/init_genome_browser.js
index 2552fb04..508f5bf2 100644
--- a/wqflask/wqflask/static/new/javascript/init_genome_browser.js
+++ b/wqflask/wqflask/static/new/javascript/init_genome_browser.js
@@ -1,5 +1,3 @@
-console.log("THE FILES:", js_data.browser_files)
-
snps_filename = "/browser_input?filename=" + js_data.browser_files[0]
annot_filename = "/browser_input?filename=" + js_data.browser_files[1]
diff --git a/wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js b/wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js
new file mode 100644
index 00000000..05e4d547
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js
@@ -0,0 +1,228 @@
+// ZS: This file initializes the tables for the show_trait page
+
+// ZS: This variable is just created to get the column position of the first case attribute (if case attributes exist), since it's needed to set the row classes in createdRow for the DataTable
+var attribute_start_pos = 3;
+if (js_data.se_exists) {
+ attribute_start_pos += 2;
+}
+if (js_data.has_num_cases === true) {
+ attribute_start_pos += 1;
+}
+
+build_columns = function() {
+ let column_list = [
+ {
+ 'data': null,
+ 'orderDataType': "dom-checkbox",
+ 'searchable' : false,
+ 'render': function(data, type, row, meta) {
+ return '<input type="checkbox" name="searchResult" class="checkbox edit_sample_checkbox" value="">'
+ }
+ },
+ {
+ 'title': "ID",
+ 'type': "natural",
+ 'searchable' : false,
+ 'data': "this_id"
+ },
+ {
+ 'title': "Sample",
+ 'type': "natural",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ return '<span class="edit_sample_sample_name">' + data.name + '</span>'
+ }
+ },
+ {
+ 'title': "<div style='text-align: right;'>Value</div>",
+ 'orderDataType': "dom-input",
+ 'type': "cust-txt",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.value == null) {
+ return '<input type="text" data-value="x" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_value" value="x" size=6 maxlength=6>'
+ } else {
+ return '<input type="text" data-value="' + data.value.toFixed(3) + '" data-qnorm="' + js_data['qnorm_values'][0][parseInt(data.this_id) - 1] + '" data-zscore="' + js_data['zscore_values'][0][parseInt(data.this_id) - 1] + '" name="value:' + data.name + '" class="trait_value_input edit_sample_value" value="' + data.value.toFixed(3) + '" size=6 maxlength=6>'
+ }
+ }
+ }
+ ];
+
+ if (js_data.se_exists) {
+ column_list.push(
+ {
+ 'bSortable': false,
+ 'type': "natural",
+ 'data': null,
+ 'searchable' : false,
+ 'render': function(data, type, row, meta) {
+ return '±'
+ }
+ },
+ {
+ 'title': "<div style='text-align: right;'>SE</div>",
+ 'orderDataType': "dom-input",
+ 'type': "cust-txt",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.variance == null) {
+ return '<input type="text" data-value="x" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" class="trait_value_input edit_sample_se" value="x" size=6 maxlength=6>'
+ } else {
+ return '<input type="text" data-value="' + data.variance.toFixed(3) + '" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" class="trait_value_input edit_sample_se" value="' + data.variance.toFixed(3) + '" size=6 maxlength=6>'
+ }
+ }
+ }
+ );
+ }
+
+ if (js_data.has_num_cases === true) {
+ column_list.push(
+ {
+ 'title': "<div style='text-align: right;'>N</div>",
+ 'orderDataType': "dom-input",
+ 'type': "cust-txt",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.num_cases == null || data.num_cases == undefined) {
+ return '<input type="text" data-value="x" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" class="trait_value_input edit_sample_num_cases" value="x" size=4 maxlength=4>'
+ } else {
+ return '<input type="text" data-value="' + data.num_cases + '" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" class="trait_value_input edit_sample_num_cases" value="' + data.num_cases + '" size=4 maxlength=4>'
+ }
+ }
+ }
+ );
+ }
+
+ attr_keys = Object.keys(js_data.attributes).sort((a, b) => (js_data.attributes[a].name.toLowerCase() > js_data.attributes[b].name.toLowerCase()) ? 1 : -1)
+ for (i = 0; i < attr_keys.length; i++){
+ column_list.push(
+ {
+ 'title': "<div style='text-align: " + js_data.attributes[attr_keys[i]].alignment + "'>" + js_data.attributes[attr_keys[i]].name + "</div>",
+ 'type': "natural",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ attr_name = Object.keys(data.extra_attributes).sort()[meta.col - data.first_attr_col]
+
+ if (attr_name != null && attr_name != undefined){
+ if (Array.isArray(data.extra_attributes[attr_name])){
+ return '<a href="' + data.extra_attributes[attr_name][1] + '">' + data.extra_attributes[attr_name][0] + '</a>'
+ } else {
+ return data.extra_attributes[attr_name]
+ }
+ } else {
+ return ""
+ }
+ }
+ }
+ )
+ }
+ return column_list
+}
+
+var primary_table = $('#samples_primary').DataTable( {
+ 'initComplete': function(settings, json) {
+ $('.edit_sample_value').change(function() {
+ edit_data_change();
+ });
+ },
+ 'createdRow': function ( row, data, index ) {
+ $(row).attr('id', "Primary_" + data.this_id)
+ $(row).addClass("value_se");
+ if (data.outlier) {
+ $(row).addClass("outlier");
+ }
+ $('td', row).eq(1).addClass("column_name-Index")
+ $('td', row).eq(2).addClass("column_name-Sample")
+ $('td', row).eq(3).addClass("column_name-Value")
+ if (js_data.se_exists) {
+ $('td', row).eq(5).addClass("column_name-SE")
+ if (js_data.has_num_cases === true) {
+ $('td', row).eq(6).addClass("column_name-num_cases")
+ } else {
+ if (js_data.has_num_cases === true) {
+ $('td', row).eq(4).addClass("column_name-num_cases")
+ }
+ }
+ } else {
+ if (js_data.has_num_cases === true) {
+ $('td', row).eq(4).addClass("column_name-num_cases")
+ }
+ }
+
+ for (i=0; i < attr_keys.length; i++) {
+ $('td', row).eq(attribute_start_pos + i).addClass("column_name-" + js_data.attributes[attr_keys[i]].name)
+ $('td', row).eq(attribute_start_pos + i).attr("style", "text-align: " + js_data.attributes[attr_keys[i]].alignment + "; padding-top: 2px; padding-bottom: 0px;")
+ }
+ },
+ 'data': js_data['sample_lists'][0],
+ 'columns': build_columns(),
+ 'order': [[1, "asc"]],
+ 'sDom': "Ztr",
+ 'autoWidth': true,
+ 'orderClasses': true,
+ "scrollY": "100vh",
+ 'scroller': true,
+ 'scrollCollapse': true
+} );
+
+primary_table.draw(); //ZS: This makes the table adjust its height properly on initial load
+
+primary_table.on( 'order.dt search.dt draw.dt', function () {
+ primary_table.column(1, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {
+ cell.innerHTML = i+1;
+ } );
+} ).draw();
+
+$('#primary_searchbox').on( 'keyup', function () {
+ primary_table.search($(this).val()).draw();
+} );
+
+if (js_data.sample_lists.length > 1){
+ var other_table = $('#samples_other').DataTable( {
+ 'initComplete': function(settings, json) {
+ $('.edit_sample_value').change(function() {
+ edit_data_change();
+ });
+ },
+ 'createdRow': function ( row, data, index ) {
+ $(row).attr('id', "Primary_" + data.this_id)
+ $(row).addClass("value_se");
+ if (data.outlier) {
+ $(row).addClass("outlier");
+ }
+ $('td', row).eq(1).addClass("column_name-Index")
+ $('td', row).eq(2).addClass("column_name-Sample")
+ $('td', row).eq(3).addClass("column_name-Value")
+ if (js_data.se_exists) {
+ $('td', row).eq(5).addClass("column_name-SE")
+ if (js_data.has_num_cases === true) {
+ $('td', row).eq(6).addClass("column_name-num_cases")
+ } else {
+ if (js_data.has_num_cases === true) {
+ $('td', row).eq(4).addClass("column_name-num_cases")
+ }
+ }
+ } else {
+ if (js_data.has_num_cases === true) {
+ $('td', row).eq(4).addClass("column_name-num_cases")
+ }
+ }
+
+ for (i=0; i < attr_keys.length; i++) {
+ $('td', row).eq(attribute_start_pos + i + 1).addClass("column_name-" + js_data.attributes[attr_keys[i]].name)
+ $('td', row).eq(attribute_start_pos + i + 1).attr("style", "text-align: " + js_data.attributes[attr_keys[i]].alignment + "; padding-top: 2px; padding-bottom: 0px;")
+ }
+ },
+ 'data': js_data['sample_lists'][1],
+ 'columns': build_columns(),
+ 'order': [[1, "asc"]],
+ 'sDom': "Ztr",
+ 'autoWidth': true,
+ 'orderClasses': true,
+ "scrollY": "100vh",
+ 'scroller': true,
+ 'scrollCollapse': true
+ } );
+
+ other_table.draw(); //ZS: This makes the table adjust its height properly on initial load
+} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/lodheatmap.js b/wqflask/wqflask/static/new/javascript/lodheatmap.js
index 965a1d53..b82c95ad 100644
--- a/wqflask/wqflask/static/new/javascript/lodheatmap.js
+++ b/wqflask/wqflask/static/new/javascript/lodheatmap.js
@@ -44,7 +44,9 @@ lodheatmap = function() {
_ref = data.chrnames;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
chr = _ref[_i];
- xLR[chr[0]] = getLeftRight(data.posByChr[chr[0]]);
+ if (data.posByChr[chr[0]].length > 0){
+ xLR[chr[0]] = getLeftRight(data.posByChr[chr[0]]);
+ }
}
zmin = 0;
zmax = 0;
@@ -144,7 +146,7 @@ lodheatmap = function() {
}).attr("stroke", "none").attr("stroke-width", "1").on("mouseover.paneltip", function(d) {
yaxis.select("text#yaxis" + d.lodindex).attr("opacity", 1);
d3.select(this).attr("stroke", "black");
- return celltip.show(d);
+ return celltip.show(d, this);
}).on("mouseout.paneltip", function(d) {
yaxis.select("text#yaxis" + d.lodindex).attr("opacity", 0);
d3.select(this).attr("stroke", "none");
diff --git a/wqflask/wqflask/static/new/javascript/panelutil.js b/wqflask/wqflask/static/new/javascript/panelutil.js
index 3c715c81..ea55a7cf 100644
--- a/wqflask/wqflask/static/new/javascript/panelutil.js
+++ b/wqflask/wqflask/static/new/javascript/panelutil.js
@@ -159,7 +159,6 @@ chrscales = function(data, width, chrGap, leftMargin, pad4heatmap, mappingScale)
if (mappingScale == "morgan") {
max_pos = d3.max(data.posByChr[chr[0]])
- console.log("max_pos:", max_pos)
data.xscale[chr[0]] = d3.scale.linear().domain([chrStart[i], max_pos]).range([data.chrStart[i], data.chrEnd[i]]);
}
else {
diff --git a/wqflask/wqflask/static/new/javascript/password_strength.js b/wqflask/wqflask/static/new/javascript/password_strength.js
index aed7c8d0..a8a45f7d 100644
--- a/wqflask/wqflask/static/new/javascript/password_strength.js
+++ b/wqflask/wqflask/static/new/javascript/password_strength.js
@@ -1,4 +1,5 @@
// Generated by CoffeeScript 1.8.0
+
$(function() {
var word_score;
$("#password").keyup(function() {
@@ -6,33 +7,51 @@ $(function() {
passtext = $(this).val();
result = zxcvbn(passtext);
if (passtext.length < 6) {
- $("#password_strength").html('');
- return $("#password_alert").fadeOut();
+ let error_message = `<strong style="color:red;">the password must have a length greater than six characters</strong>`
+ $("#password_strength").html(error_message);
+ return $("#password_alert").fadeIn();
} else {
word = word_score(result.score);
- crack_time = result.crack_time_display;
+ crack_time = result.crack_times_display.online_throttling_100_per_hour;
if (crack_time === "instant") {
crack_time = "a second";
}
- display = "This is " + word + " password. It can be cracked in " + crack_time + ".";
+ display = `This is ${word} password.`
$("#password_strength").html(display);
return $("#password_alert").fadeIn();
}
});
return word_score = function(num_score) {
- var mapping, result;
num_score = parseInt(num_score);
console.log("num_score is:", num_score);
- mapping = {
- 0: "a <strong>terrible</strong>",
- 1: "a <strong>bad</strong>",
- 2: "a <strong>mediocre</strong>",
- 3: "a <strong>good</strong>",
- 4: "an <strong>excellent</strong>"
- };
- console.log("mapping is:", mapping);
- result = mapping[num_score];
- console.log("result is:", result);
- return result;
+
+ let passwordFeedback = {
+ 0:{
+ color:"#cc1818",
+ feedback:"a weak"
+ },
+
+ 1:{
+ color:"#cc1818",
+ feedback:"a bad"
+ },
+
+ 2:{
+ color:"#f59105",
+ feedback:"a mediocre"
+ },
+
+ 3:{
+ color:"#44ba34",
+ feedback:"a strong"
+ },
+ 4:{
+ color:"green",
+ feedback:"a stronger"
+ }
+ }
+
+ let mappingResult = `<strong style="color:${passwordFeedback[num_score].color};">${passwordFeedback[num_score].feedback}</strong>`
+ return mappingResult;
};
});
diff --git a/wqflask/wqflask/static/new/javascript/search_results.js b/wqflask/wqflask/static/new/javascript/search_results.js
index 8fa698b4..ecb1220d 100644
--- a/wqflask/wqflask/static/new/javascript/search_results.js
+++ b/wqflask/wqflask/static/new/javascript/search_results.js
@@ -1,42 +1,87 @@
+change_buttons = function(check_node = 0) {
+ var button, buttons, item, num_checked, text, _i, _j, _k, _l, _len, _len2, _len3, _len4, _results, _results2;
+ buttons = ["#add", "#remove"];
+
+ num_checked = 0
+ table_api = $('#trait_table').DataTable();
+ check_cells = table_api.column(0).nodes().to$();
+ for (let i = 0; i < check_cells.length; i++) {
+ if (check_cells[i].childNodes[check_node].checked){
+ num_checked += 1
+ }
+ }
+
+ if (num_checked === 0) {
+ for (_i = 0, _len = buttons.length; _i < _len; _i++) {
+ button = buttons[_i];
+ $(button).prop("disabled", true);
+ }
+ } else {
+ for (_j = 0, _len2 = buttons.length; _j < _len2; _j++) {
+ button = buttons[_j];
+ $(button).prop("disabled", false);
+ }
+ }
+};
+
$(function() {
- var add, change_buttons, checked_traits, deselect_all, invert, remove, removed_traits, select_all;
+ var add, checked_traits, deselect_all, invert, remove, removed_traits, select_all;
checked_traits = null;
select_all = function() {
- console.log("selected_all");
- $(".trait_checkbox").each(function() {
- $(this).prop('checked', true);
- if (!$(this).closest('tr').hasClass('selected')) {
- $(this).closest('tr').addClass('selected')
- }
- });
+ table_api = $('#trait_table').DataTable();
+
+ check_cells = table_api.column(0).nodes().to$();
+ for (let i = 0; i < check_cells.length; i++) {
+ check_cells[i].childNodes[0].checked = true;
+ }
+
+ check_rows = table_api.rows().nodes();
+ for (let i =0; i < check_rows.length; i++) {
+ check_rows[i].classList.add("selected");
+ }
+
+ change_buttons();
};
deselect_all = function() {
- $(".trait_checkbox").each(function() {
- $(this).prop('checked', false);
- if ($(this).closest('tr').hasClass('selected')) {
- $(this).closest('tr').removeClass('selected')
- }
- });
+ table_api = $('#trait_table').DataTable();
+
+ check_cells = table_api.column(0).nodes().to$();
+ for (let i = 0; i < check_cells.length; i++) {
+ check_cells[i].childNodes[0].checked = false;
+ }
+
+ check_rows = table_api.rows().nodes();
+ for (let i =0; i < check_rows.length; i++) {
+ check_rows[i].classList.remove("selected")
+ }
+
+ change_buttons();
};
invert = function() {
- $(".trait_checkbox").each(function() {
- if ($(this).prop('checked') == true) {
- $(this).prop('checked', false)
- }
- else {
- $(this).prop('checked', true)
- }
+ table_api = $('#trait_table').DataTable();
- if ($(this).closest('tr').hasClass('selected')) {
- $(this).closest('tr').removeClass('selected')
- }
- else {
- $(this).closest('tr').addClass('selected')
- }
- });
+ check_cells = table_api.column(0).nodes().to$();
+ for (let i = 0; i < check_cells.length; i++) {
+ if (check_cells[i].childNodes[0].checked){
+ check_cells[i].childNodes[0].checked = false;
+ } else {
+ check_cells[i].childNodes[0].checked = true;
+ }
+ }
+
+ check_rows = table_api.rows().nodes();
+ for (let i =0; i < check_rows.length; i++) {
+ if (check_rows[i].classList.contains("selected")){
+ check_rows[i].classList.remove("selected")
+ } else {
+ check_rows[i].classList.add("selected")
+ }
+ }
+
+ change_buttons();
};
$('#searchbox').keyup(function(){
@@ -50,50 +95,42 @@ $(function() {
$('#select_top').keyup(function(){
num_rows = $(this).val()
+
if (num_rows = parseInt(num_rows)){
- i = 0
- $('#trait_table > tbody > tr').each(function(){
- if (i < num_rows) {
- $(this).find('.trait_checkbox').prop("checked", true)
- if (!$(this).closest('tr').hasClass('selected')) {
- $(this).closest('tr').addClass('selected')
- }
- }
- else {
- if ($(this).closest('tr').hasClass('selected')) {
- $(this).closest('tr').removeClass('selected')
- $(this).find('.trait_checkbox').prop("checked", false)
- }
- }
- i += 1
- });
- }
- else {
- $('#trait_table > tbody > tr').each(function(){
- $(this).closest('tr').removeClass('selected')
- $(this).find('.trait_checkbox').prop("checked", false)
- });
- }
- change_buttons();
- });
+ table_api = $('#trait_table').DataTable();
- $('.trait_checkbox:checkbox').change(function() {
- change_buttons()
+ check_cells = table_api.column(0).nodes().to$();
+ for (let i = 0; i < num_rows; i++) {
+ check_cells[i].childNodes[0].checked = true;
+ }
- if ($(this).is(":checked")) {
- if (!$(this).closest('tr').hasClass('selected')) {
- $(this).closest('tr').addClass('selected')
+ check_rows = table_api.rows().nodes();
+ for (let i=0; i < num_rows; i++) {
+ if (check_rows[i].classList.contains("selected")){
+ continue
+ } else {
+ check_rows[i].classList.add("selected")
+ }
+ }
+ for (let i = num_rows; i < check_rows.length; i++){
+ check_cells[i].childNodes[0].checked = false;
+ if (check_rows[i].classList.contains("selected")){
+ check_rows[i].classList.remove("selected")
+ }
}
}
else {
- if ($(this).closest('tr').hasClass('selected')) {
- $(this).closest('tr').removeClass('selected')
+ for (let i = 0; i < check_rows.length; i++){
+ check_cells[i].childNodes[0].checked = false;
+ if (check_rows[i].classList.contains("selected")){
+ check_rows[i].classList.remove("selected")
}
+ }
}
-
+ change_buttons();
});
- add = function() {
+ add_to_collection = function() {
var traits;
traits = $("#trait_table input:checked").map(function() {
return $(this).val();
@@ -117,69 +154,18 @@ $(function() {
};
removed_traits = function() {
- console.log('in removed_traits with checked_traits:', checked_traits);
return checked_traits.closest("tr").fadeOut();
};
- change_buttons = function() {
- var button, buttons, item, num_checked, text, _i, _j, _k, _l, _len, _len2, _len3, _len4, _results, _results2;
- buttons = ["#add", "#remove"];
- num_checked = $('.trait_checkbox:checked').length;
- if (num_checked === 0) {
- for (_i = 0, _len = buttons.length; _i < _len; _i++) {
- button = buttons[_i];
- $(button).prop("disabled", true);
- }
- } else {
- for (_j = 0, _len2 = buttons.length; _j < _len2; _j++) {
- button = buttons[_j];
- $(button).prop("disabled", false);
- }
- }
- };
-
- remove = function() {
- var traits, uc_id;
- checked_traits = $("#trait_table input:checked");
- traits = checked_traits.map(function() {
- return $(this).val();
- }).get();
- console.log("checked length is:", traits.length);
- console.log("checked is:", traits);
- if ( $("#uc_id").length ) {
- uc_id = $("#uc_id").val();
- return $.ajax({
- type: "POST",
- url: "/collections/remove",
- data: {
- uc_id: uc_id,
- traits: traits
- },
- success: removed_traits
- });
- }
- else {
- collection_name = $("#collection_name").val();
- return $.ajax({
- type: "POST",
- url: "/collections/remove",
- data: {
- collection_name: collection_name,
- traits: traits
- },
- success: removed_traits
- });
- }
- };
submit_bnw = function() {
- trait_data = get_traits_from_table("trait_table", "submit_bnw")
+ trait_data = submit_traits_to_export_or_bnw("trait_table", "submit_bnw")
}
export_traits = function() {
- trait_data = get_traits_from_table("trait_table", "export_csv")
+ trait_data = submit_traits_to_export_or_bnw("trait_table", "export_csv")
};
- get_traits_from_table = function(table_name, destination) {
+ submit_traits_to_export_or_bnw = function(table_name, destination) {
trait_table = $('#'+table_name);
table_dict = {};
@@ -191,30 +177,23 @@ $(function() {
});
table_dict['headers'] = headers;
- rows = [];
- trait_table.find('tbody tr').each(function (i, tr) {
- if (trait_table.find('input[name="searchResult"]:checked').length > 0) {
- if ($(this).find('input[name="searchResult"]').is(':checked')){
- this_row = [];
- $(tr).find('td').each(function(j, td){
- if ($(td).data('export')){
- this_row.push($(td).data('export'));
- }
- });
- rows.push(this_row);
- }
+ selected_rows = [];
+ all_rows = []; //ZS: If no rows are checked, export all
+ table_api = $('#' + table_name).DataTable();
+ check_cells = table_api.column(0).nodes().to$();
+ for (let i = 0; i < check_cells.length; i++) {
+ this_node = check_cells[i].childNodes[0];
+ all_rows.push(this_node.value)
+ if (this_node.checked){
+ selected_rows.push(this_node.value)
}
- else {
- this_row = [];
- $(tr).find('td').each(function(j, td){
- if ($(td).data('export')){
- this_row.push($(td).data('export'));
- }
- });
- rows.push(this_row);
- }
- });
- table_dict['rows'] = rows;
+ }
+
+ if (selected_rows.length > 0){
+ table_dict['rows'] = selected_rows;
+ } else {
+ table_dict['rows'] = all_rows;
+ }
json_table_dict = JSON.stringify(table_dict);
$('input[name=export_data]').val(json_table_dict);
@@ -227,55 +206,58 @@ $(function() {
$('#export_form').submit();
};
- $("#corr_matrix").on("click", function() {
- traits = $("#trait_table input:checked").map(function() {
+ get_traits_from_table = function(){
+ traits = $("#trait_table input:checked").map(function() {
+ return $(this).val();
+ }).get();
+ if (traits.length == 0){
+ num_traits = $("#trait_table input").length
+ if (num_traits <= 100){
+ traits = $("#trait_table input").map(function() {
return $(this).val();
- }).get();
+ }).get();
+ }
+ }
+ return traits
+ }
+
+ $("#corr_matrix").on("click", function() {
+ traits = get_traits_from_table()
$("#trait_list").val(traits)
$("input[name=tool_used]").val("Correlation Matrix")
$("input[name=form_url]").val($(this).data("url"))
return submit_special("/loading")
});
$("#network_graph").on("click", function() {
- traits = $("#trait_table input:checked").map(function() {
- return $(this).val();
- }).get();
+ traits = get_traits_from_table()
$("#trait_list").val(traits)
$("input[name=tool_used]").val("Network Graph")
$("input[name=form_url]").val($(this).data("url"))
return submit_special("/loading")
});
$("#wgcna_setup").on("click", function() {
- traits = $("#trait_table input:checked").map(function() {
- return $(this).val();
- }).get();
+ traits = get_traits_from_table()
$("#trait_list").val(traits)
$("input[name=tool_used]").val("WGCNA Setup")
$("input[name=form_url]").val($(this).data("url"))
return submit_special("/loading")
});
$("#ctl_setup").on("click", function() {
- traits = $("#trait_table input:checked").map(function() {
- return $(this).val();
- }).get();
+ traits = get_traits_from_table()
$("#trait_list").val(traits)
$("input[name=tool_used]").val("CTL Setup")
$("input[name=form_url]").val($(this).data("url"))
return submit_special("/loading")
});
$("#heatmap").on("click", function() {
- traits = $("#trait_table input:checked").map(function() {
- return $(this).val();
- }).get();
+ traits = get_traits_from_table()
$("#trait_list").val(traits)
$("input[name=tool_used]").val("Heatmap")
$("input[name=form_url]").val($(this).data("url"))
return submit_special("/loading")
});
$("#comp_bar_chart").on("click", function() {
- traits = $("#trait_table input:checked").map(function() {
- return $(this).val();
- }).get();
+ traits = get_traits_from_table()
$("#trait_list").val(traits)
$("input[name=tool_used]").val("Comparison Bar Chart")
$("input[name=form_url]").val($(this).data("url"))
@@ -283,9 +265,7 @@ $(function() {
});
$("#send_to_webgestalt, #send_to_bnw, #send_to_geneweaver").on("click", function() {
- traits = $("#trait_table input:checked").map(function() {
- return $(this).val();
- }).get();
+ traits = get_traits_from_table()
$("#trait_list").val(traits)
url = $(this).data("url")
return submit_special(url)
@@ -295,9 +275,55 @@ $(function() {
$("#select_all").click(select_all);
$("#deselect_all").click(deselect_all);
$("#invert").click(invert);
- $("#add").click(add);
- $("#remove").click(remove);
+ $("#add").click(add_to_collection);
$("#submit_bnw").click(submit_bnw);
$("#export_traits").click(export_traits);
- $('.trait_checkbox, .btn').click(change_buttons);
+
+ let naturalAsc = $.fn.dataTableExt.oSort["natural-ci-asc"]
+ let naturalDesc = $.fn.dataTableExt.oSort["natural-ci-desc"]
+
+ let na_equivalent_vals = ["N/A", "--", ""]; //ZS: Since there are multiple values that should be treated the same as N/A
+
+ function extract_inner_text(the_string){
+ var span = document.createElement('span');
+ span.innerHTML = the_string;
+ return span.textContent || span.innerText;
+ }
+
+ function sort_NAs(a, b, sort_function){
+ if ( na_equivalent_vals.includes(a) && na_equivalent_vals.includes(b)) {
+ return 0;
+ }
+ if (na_equivalent_vals.includes(a)){
+ return 1
+ }
+ if (na_equivalent_vals.includes(b)) {
+ return -1;
+ }
+ return sort_function(a, b)
+ }
+
+ $.extend( $.fn.dataTableExt.oSort, {
+ "natural-minus-na-asc": function (a, b) {
+ return sort_NAs(extract_inner_text(a), extract_inner_text(b), naturalAsc)
+ },
+ "natural-minus-na-desc": function (a, b) {
+ return sort_NAs(extract_inner_text(a), extract_inner_text(b), naturalDesc)
+ }
+ });
+
+ $.fn.dataTable.ext.order['dom-checkbox'] = function ( settings, col )
+ {
+ return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
+ return $('input', td).prop('checked') ? '1' : '0';
+ } );
+ };
+
+ $.fn.dataTable.ext.order['dom-inner-text'] = function ( settings, col )
+ {
+ return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
+ return $(td).text();
+ } );
+ }
+
}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/show_trait.js b/wqflask/wqflask/static/new/javascript/show_trait.js
index c0b2e6db..9d356570 100644
--- a/wqflask/wqflask/static/new/javascript/show_trait.js
+++ b/wqflask/wqflask/static/new/javascript/show_trait.js
@@ -94,33 +94,15 @@ add = function() {
$('#add_to_collection').click(add);
sample_lists = js_data.sample_lists;
sample_group_types = js_data.sample_group_types;
-d3.select("#select_compare_trait").on("click", (function(_this) {
- return function() {
- $('.scatter-matrix-container').remove();
- return open_trait_selection();
- };
-})(this));
-d3.select("#select_covariates").on("click", (function(_this) {
- return function() {
- return open_covariate_selection();
- };
-})(this));
-$("#remove_covariates").click(function () {
- $("input[name=covariates]").val("")
- $(".selected_covariates").val("")
-});
+
$(".select_covariates").click(function () {
open_covariate_selection();
});
$(".remove_covariates").click(function () {
$("input[name=covariates]").val("")
- $(".selected_covariates").val("")
+ $(".selected-covariates").val("")
});
-d3.select("#clear_compare_trait").on("click", (function(_this) {
- return function() {
- return $('.scatter-matrix-container').remove();
- };
-})(this));
+
open_trait_selection = function() {
return $('#collections_holder').load('/collections/list?color_by_trait #collections_list', (function(_this) {
return function() {
@@ -233,6 +215,8 @@ update_histogram = function() {
if ($('input[name="transform"]').val() != ""){
root.histogram_layout['xaxis']['title'] = "<b>" + js_data.unit_type + " (" + $('input[name="transform"]').val() + ")</b>"
+ } else {
+ root.histogram_layout['xaxis']['title'] = "<b>" + js_data.unit_type + "</b>"
}
Plotly.newPlot('histogram', root.histogram_data, root.histogram_layout, root.modebar_options);
@@ -281,6 +265,8 @@ update_bar_chart = function() {
if ($('input[name="transform"]').val() != ""){
root.bar_layout['yaxis']['title'] = "<b>" + js_data.unit_type + " (" + $('input[name="transform"]').val() + ")</b>"
+ } else {
+ root.bar_layout['yaxis']['title'] = "<b>" + js_data.unit_type + "</b>"
}
root.bar_data[0]['y'] = trait_vals
@@ -322,6 +308,8 @@ update_box_plot = function() {
if ($('input[name="transform"]').val() != ""){
root.box_layout['yaxis']['title'] = "<b>" + js_data.unit_type + " (" + $('input[name="transform"]').val() + ")</b>"
+ } else {
+ root.box_layout['yaxis']['title'] = "<b>" + js_data.unit_type + "</b>"
}
Plotly.newPlot('box_plot', root.box_data, root.box_layout, root.modebar_options)
@@ -353,6 +341,8 @@ update_violin_plot = function() {
if ($('input[name="transform"]').val() != ""){
root.violin_layout['yaxis']['title'] = "<b>" + js_data.unit_type + " (" + $('input[name="transform"]').val() + ")</b>"
+ } else {
+ root.violin_layout['yaxis']['title'] = "<b>" + js_data.unit_type + "</b>"
}
Plotly.newPlot('violin_plot', root.violin_data, root.violin_layout, root.modebar_options)
@@ -427,6 +417,25 @@ process_id = function() {
}
return processed;
};
+
+fetch_sample_values = function() {
+ // This is meant to fetch all sample values using DataTables API, since they can't all be submitted with the form when using Scroller (and this should also be faster)
+ sample_val_dict = {};
+
+ table = 'samples_primary';
+ if ($('#' + table).length){
+ table_api = $('#' + table).DataTable();
+ val_nodes = table_api.column(3).nodes().to$();
+ for (_j = 0; _j < val_nodes.length; _j++){
+ sample_name = val_nodes[_j].childNodes[0].name.split(":")[1]
+ sample_val = val_nodes[_j].childNodes[0].value
+ sample_val_dict[sample_name] = sample_val
+ }
+ }
+
+ return sample_val_dict;
+}
+
edit_data_change = function() {
var already_seen, checkbox, name, real_dict, real_value, real_variance, row, rows, sample_sets, table, tables, _i, _j, _len, _len1;
already_seen = {};
@@ -440,38 +449,48 @@ edit_data_change = function() {
samples_other: {},
samples_all: {}
};
+
tables = ['samples_primary', 'samples_other'];
for (_i = 0, _len = tables.length; _i < _len; _i++) {
table = tables[_i];
- rows = $("#" + table).find('tr');
- for (_j = 0, _len1 = rows.length; _j < _len1; _j++) {
- row = rows[_j];
- name = $(row).find('.edit_sample_sample_name').html();
- name = $.trim(name);
- real_value = $(row).find('.edit_sample_value').val();
- checkbox = $(row).find(".edit_sample_checkbox");
- if (is_number(real_value) && real_value !== "") {
- real_value = parseFloat(real_value);
- sample_sets[table].add_value(real_value);
- real_variance = $(row).find('.edit_sample_se').val();
- if (is_number(real_variance)) {
- real_variance = parseFloat(real_variance);
- } else {
- real_variance = null;
- }
- real_dict = {
- value: real_value,
- variance: real_variance
- };
- root.selected_samples[table][name] = real_dict;
- if (!(name in already_seen)) {
- sample_sets['samples_all'].add_value(real_value);
- root.selected_samples['samples_all'][name] = real_dict;
- already_seen[name] = true;
+ if ($('#' + table).length){
+ table_api = $('#' + table).DataTable();
+ sample_vals = [];
+ name_nodes = table_api.column(2).nodes().to$();
+ val_nodes = table_api.column(3).nodes().to$();
+ var_nodes = table_api.column(5).nodes().to$();
+ for (_j = 0; _j < val_nodes.length; _j++){
+ sample_val = val_nodes[_j].childNodes[0].value
+ sample_name = $.trim(name_nodes[_j].childNodes[0].textContent)
+ if (is_number(sample_val) && sample_val !== "") {
+ sample_val = parseFloat(sample_val);
+ sample_sets[table].add_value(sample_val);
+ try {
+ sample_var = var_nodes[_j].childNodes[0].value
+ if (is_number(sample_var)) {
+ sample_var = parseFloat(sample_var)
+ } else {
+ sample_var = null;
+ }
+ } catch {
+ sample_var = null;
+ }
+ sample_dict = {
+ value: sample_val,
+ variance: sample_var
+ }
+ root.selected_samples[table][sample_name] = sample_dict;
+ if (!(sample_name in already_seen)) {
+ sample_sets['samples_all'].add_value(sample_val);
+ root.selected_samples['samples_all'][sample_name] = sample_dict;
+ already_seen[sample_name] = true;
+ }
}
}
}
+
}
+
update_stat_values(sample_sets);
if ($('#histogram').hasClass('js-plotly-plot')){
@@ -490,6 +509,7 @@ edit_data_change = function() {
return update_prob_plot();
}
};
+
show_hide_outliers = function() {
var label;
label = $('#show_hide_outliers').val();
@@ -500,6 +520,7 @@ show_hide_outliers = function() {
return console.log("Should be now Hide Outliers");
}
};
+
on_corr_method_change = function() {
var corr_method;
corr_method = $('select[name=corr_type]').val();
@@ -513,13 +534,56 @@ on_corr_method_change = function() {
};
$('select[name=corr_type]').change(on_corr_method_change);
+on_dataset_change = function() {
+ let dataset_type = $('select[name=corr_dataset] option:selected').data('type');
+ let location_type = $('select[name=location_type] option:selected').val();
+
+ if (dataset_type == "mrna_assay"){
+ $('#min_expr_filter').show();
+ $('select[name=location_type] option:disabled').prop('disabled', false)
+ }
+ else if (dataset_type == "pheno"){
+ $('#min_expr_filter').show();
+ $('select[name=location_type]>option:eq(0)').prop('disabled', true).attr('selected', false);
+ $('select[name=location_type]>option:eq(1)').prop('disabled', false).attr('selected', true);
+ }
+ else {
+ $('#min_expr_filter').hide();
+ $('select[name=location_type]>option:eq(0)').prop('disabled', false).attr('selected', true);
+ $('select[name=location_type]>option:eq(1)').prop('disabled', true).attr('selected', false);
+ }
+}
+
+$('select[name=corr_dataset]').change(on_dataset_change);
+$('select[name=location_type]').change(on_dataset_change);
+
submit_special = function(url) {
+ $("input[name=sample_vals]").val(JSON.stringify(fetch_sample_values()))
$("#trait_data_form").attr("action", url);
- return $("#trait_data_form").submit();
+ $("#trait_data_form").submit();
};
-var corr_input_list = ['corr_type', 'primary_samples', 'trait_id', 'dataset', 'group', 'tool_used', 'form_url', 'corr_sample_method', 'corr_samples_group', 'corr_dataset', 'min_expr',
- 'corr_return_results', 'loc_chr', 'min_loc_mb', 'max_loc_mb', 'p_range_lower', 'p_range_upper']
+get_table_contents_for_form_submit = function(form_id) {
+ // Borrowed code from - https://stackoverflow.com/questions/31418047/how-to-post-data-for-the-whole-table-using-jquery-datatables
+ let this_form = $("#" + form_id);
+ var params = primary_table.$('input').serializeArray();
+
+ $.each(params, function(){
+ // If element doesn't exist in DOM
+ if(!$.contains(document, this_form[this.name])){
+ // Create a hidden element
+ this_form.append(
+ $('<input>')
+ .attr('type', 'hidden')
+ .attr('name', this.name)
+ .val(this.value)
+ );
+ }
+ });
+}
+
+var corr_input_list = ['sample_vals', 'corr_type', 'primary_samples', 'trait_id', 'dataset', 'group', 'tool_used', 'form_url', 'corr_sample_method', 'corr_samples_group', 'corr_dataset', 'min_expr',
+ 'corr_return_results', 'location_type', 'loc_chr', 'min_loc_mb', 'max_loc_mb', 'p_range_lower', 'p_range_upper']
$(".corr_compute").on("click", (function(_this) {
return function() {
@@ -537,63 +601,81 @@ create_value_dropdown = function(value) {
populate_sample_attributes_values_dropdown = function() {
var attribute_info, key, sample_attributes, selected_attribute, value, _i, _len, _ref, _ref1, _results;
$('#attribute_values').empty();
- sample_attributes = {};
- _ref = js_data.attribute_names;
- for (key in _ref) {
- if (!__hasProp.call(_ref, key)) continue;
- attribute_info = _ref[key];
- sample_attributes[attribute_info.name] = attribute_info.distinct_values;
+ sample_attributes = [];
+
+ var attributes_as_list = Object.keys(js_data.attributes).map(function(key) {
+ return [key, js_data.attributes[key].name.toLowerCase()];
+ });
+
+ attributes_as_list.sort(function(first, second) {
+ if (second[1] > first[1]){
+ return -1
+ }
+ if (first[1] > second[1]){
+ return 1
+ }
+ return 0
+ });
+
+ for (i=0; i < attributes_as_list.length; i++) {
+ attribute_info = js_data.attributes[attributes_as_list[i][0]]
+ sample_attributes.push(attribute_info.distinct_values);
}
- selected_attribute = $('#exclude_menu').val().replace("_", " ");
- _ref1 = sample_attributes[selected_attribute];
+
+ selected_attribute = $('#exclude_column').val()
+ _ref1 = sample_attributes[selected_attribute - 1];
_results = [];
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
value = _ref1[_i];
- _results.push($(create_value_dropdown(value)).appendTo($('#attribute_values')));
+ if (value != ""){
+ _results.push($(create_value_dropdown(value)).appendTo($('#attribute_values')));
+ }
}
return _results;
};
-if (Object.keys(js_data.attribute_names).length > 0) {
+
+if (Object.keys(js_data.attributes).length){
populate_sample_attributes_values_dropdown();
}
-$('#exclude_menu').change(populate_sample_attributes_values_dropdown);
+
+$('#exclude_column').change(populate_sample_attributes_values_dropdown);
block_by_attribute_value = function() {
var attribute_name, cell_class, exclude_by_value;
- attribute_name = $('#exclude_menu').val();
+
+ let exclude_group = $('#exclude_by_attr_group').val();
+ let exclude_column = $('#exclude_column').val();
+
+ if (exclude_group === "other") {
+ var table_api = $('#samples_other').DataTable();
+ } else {
+ var table_api = $('#samples_primary').DataTable();
+ }
+
exclude_by_value = $('#attribute_values').val();
- cell_class = ".column_name-" + attribute_name;
- return $(cell_class).each((function(_this) {
- return function(index, element) {
- var row;
- if ($.trim($(element).text()) === exclude_by_value) {
- row = $(element).parent('tr');
- return $(row).find(".trait_value_input").val("x");
- }
- };
- })(this));
+
+ let val_nodes = table_api.column(3).nodes().to$();
+ let exclude_val_nodes = table_api.column(attribute_start_pos + parseInt(exclude_column)).nodes().to$();
+
+ for (i = 0; i < exclude_val_nodes.length; i++) {
+ let this_col_value = exclude_val_nodes[i].childNodes[0].data;
+ let this_val_node = val_nodes[i].childNodes[0];
+
+ if (this_col_value == exclude_by_value){
+ this_val_node.value = "x";
+ }
+ }
+
+ edit_data_change();
};
-$('#exclude_group').click(block_by_attribute_value);
+$('#exclude_by_attr').click(block_by_attribute_value);
+
block_by_index = function() {
- var end_index, error, index, index_list, index_set, index_string, start_index, _i, _j, _k, _len, _len1, _ref, _results;
+ var end_index, error, index, index_list, index_set, index_string, start_index, _i, _j, _k, _len, _len1, _ref;
index_string = $('#remove_samples_field').val();
index_list = [];
_ref = index_string.split(",");
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
index_set = _ref[_i];
- /*
- if (index_set.indexOf('<') !== -1) {
- try {
- start_index = parseInt(index_set.split("<")[0]);
- end_index = parseInt(index_set.split("<")[1]);
- for (index = _j = start_index; start_index <= end_index ? _j <= end_index : _j >= end_index; index = start_index <= end_index ? ++_j : --_j) {
- index_list.push(index);
- }
- } catch (_error) {
- error = _error;
- alert("Syntax error");
- }
- }
- */
if (index_set.indexOf('-') !== -1) {
try {
start_index = parseInt(index_set.split("-")[0]);
@@ -610,210 +692,312 @@ block_by_index = function() {
index_list.push(index);
}
}
- _results = [];
+
+ let block_group = $('#block_group').val();
+ if (block_group === "other") {
+ table_api = $('#samples_other').DataTable();
+ } else {
+ table_api = $('#samples_primary').DataTable();
+ }
+ val_nodes = table_api.column(3).nodes().to$();
for (_k = 0, _len1 = index_list.length; _k < _len1; _k++) {
index = index_list[_k];
- if ($('#block_group').val() === "primary") {
- _results.push($('#samples_primary').find('td.column_name-Index').filter(function() { return $(this).text() == index.toString() }).closest('tr').find('.trait_value_input').val("x"));
- } else if ($('#block_group').val() === "other") {
- _results.push($('#samples_other').find('td.column_name-Index').filter(function() { return $(this).text() == index.toString() }).closest('tr').find('.trait_value_input').val("x"));
+ val_nodes[index - 1].childNodes[0].value = "x";
+
+ }
+};
+
+filter_by_value = function() {
+ let filter_logic = $('#filter_logic').val();
+ let filter_column = $('#filter_column').val();
+ let filter_value = $('#filter_value').val();
+ let block_group = $('#filter_group').val();
+
+ if (block_group === "other") {
+ var table_api = $('#samples_other').DataTable();
+ } else {
+ var table_api = $('#samples_primary').DataTable();
+ }
+
+ let val_nodes = table_api.column(3).nodes().to$();
+ if (filter_column == "value"){
+ var filter_val_nodes = table_api.column(3).nodes().to$();
+ }
+ else if (filter_column == "stderr"){
+ var filter_val_nodes = table_api.column(5).nodes().to$();
+ }
+ else if (!isNaN(filter_column)){
+ var filter_val_nodes = table_api.column(attribute_start_pos + parseInt(filter_column)).nodes().to$();
+ }
+ else {
+ return false
+ }
+
+ for (i = 0; i < filter_val_nodes.length; i++) {
+ if (filter_column == "value" || filter_column == "stderr"){
+ var this_col_value = filter_val_nodes[i].childNodes[0].value;
} else {
- _results.push(void 0);
+ var this_col_value = filter_val_nodes[i].childNodes[0].data;
+ }
+ let this_val_node = val_nodes[i].childNodes[0];
+
+ if(!isNaN(this_col_value) && !isNaN(filter_value)) {
+ if (filter_logic == "greater_than"){
+ if (parseFloat(this_col_value) <= parseFloat(filter_value)){
+ this_val_node.value = "x";
+ }
+ }
+ else if (filter_logic == "less_than"){
+ if (parseFloat(this_col_value) >= parseFloat(filter_value)){
+ this_val_node.value = "x";
+ }
+ }
+ else if (filter_logic == "greater_or_equal"){
+ if (parseFloat(this_col_value) < parseFloat(filter_value)){
+ this_val_node.value = "x";
+ }
+ }
+ else if (filter_logic == "less_or_equal"){
+ if (parseFloat(this_col_value) > parseFloat(filter_value)){
+ this_val_node.value = "x";
+ }
+ }
}
}
- return _results;
};
-$('#block_by_index').click(block_by_index);
+
+hide_no_value_filter = function( settings, data, dataIndex ) {
+ this_value = table_api.column(3).nodes().to$()[dataIndex].childNodes[0].value;
+ if (this_value == "x"){
+ return false
+ } else {
+ return true
+ }
+}
hide_no_value = function() {
- return $('.value_se').each((function(_this) {
- return function(_index, element) {
- if ($(element).find('.trait_value_input').val() === 'x') {
- return $(element).hide();
+ tables = ['samples_primary', 'samples_other'];
+ filter_active = $(this).data("active");
+ for (_i = 0, _len = tables.length; _i < _len; _i++) {
+ table = tables[_i];
+ if ($('#' + table).length) {
+ table_api = $('#' + table).DataTable();
+ if (filter_active == "true"){
+ $(this).val("Hide No Value")
+ table_api.draw();
+ $(this).data("active", "false");
+ } else {
+ $(this).val("Show No Value")
+ $.fn.dataTable.ext.search.push(hide_no_value_filter);
+ table_api.search();
+ table_api.draw();
+ $.fn.dataTable.ext.search.splice($.fn.dataTable.ext.search.indexOf(hide_no_value_filter, 1));
+ $(this).data("active", "true");
}
- };
- })(this));
+ }
+ }
};
$('#hide_no_value').click(hide_no_value);
+
block_outliers = function() {
return $('.outlier').each((function(_this) {
return function(_index, element) {
- return $(element).find('.trait_value_input').val('x');
+ return $(element).find('.trait-value-input').val('x');
};
})(this));
};
$('#block_outliers').click(block_outliers);
+
reset_samples_table = function() {
$('input[name="transform"]').val("");
$('span[name="transform_text"]').text("")
- return $('.trait_value_input').each((function(_this) {
- return function(_index, element) {
- $(element).val($(element).data('value'));
- return $(element).parents('.value_se').show();
- };
- })(this));
+ $('#hide_no_value').val("Hide No Value")
+ tables = ['samples_primary', 'samples_other'];
+ for (_i = 0, _len = tables.length; _i < _len; _i++) {
+ table = tables[_i];
+ if ($('#' + table).length) {
+ table_api = $('#' + table).DataTable();
+ val_nodes = table_api.column(3).nodes().to$();
+ for (i = 0; i < val_nodes.length; i++) {
+ this_node = val_nodes[i].childNodes[0];
+ this_node.value = this_node.attributes["data-value"].value;
+ }
+ if (js_data.se_exists){
+ se_nodes = table_api.column(5).nodes().to$();
+ for (i = 0; i < val_nodes.length; i++) {
+ this_node = val_nodes[i].childNodes[0];
+ this_node.value = this_node.attributes["data-value"].value;
+ }
+ }
+ table_api.draw();
+ }
+ }
};
$('.reset').click(function() {
reset_samples_table();
+ $('input[name="transform"]').val("");
edit_data_change();
});
-log2_normalize_data = function(zero_to_one_vals_exist) {
- return $('.trait_value_input').each((function(_this) {
- return function(_index, element) {
- current_value = $(element).data("value")
- if(isNaN(current_value)) {
- return current_value
- } else {
- if (zero_to_one_vals_exist){
- current_value = parseFloat(current_value) + 1;
+check_for_zero_to_one_vals = function() {
+ tables = ['samples_primary', 'samples_other'];
+ for (_i = 0, _len = tables.length; _i < _len; _i++) {
+ table = tables[_i];
+ if ($('#' + table).length) {
+ table_api = $('#' + table).DataTable();
+ val_nodes = table_api.column(3).nodes().to$();
+ for (i = 0; i < val_nodes.length; i++) {
+ this_node = val_nodes[i].childNodes[0];
+ if(!isNaN(this_node.value)) {
+ if (0 <= this_node.value && this_node.value < 1){
+ return true
+ }
}
- $(element).val(Math.log2(current_value).toFixed(3));
- return Math.log2(current_value).toFixed(3)
}
- };
- })(this));
-};
+ }
+ }
+ return false
+}
-log10_normalize_data = function(zero_to_one_vals_exist) {
- return $('.trait_value_input').each((function(_this) {
- return function(_index, element) {
- current_value = $(element).data("value")
- if(isNaN(current_value)) {
- return current_value
- } else {
- if (zero_to_one_vals_exist){
- current_value = parseFloat(current_value) + 1;
- }
- $(element).val(Math.log10(current_value).toFixed(3));
- return Math.log10(current_value).toFixed(3)
- }
- };
- })(this));
+log2_data = function(this_node) {
+ current_value = this_node.value;
+ original_value = this_node.attributes['data-value'].value;
+ if(!isNaN(current_value) && !isNaN(original_value)) {
+ if (zero_to_one_vals_exist){
+ original_value = parseFloat(original_value) + 1;
+ }
+ this_node.value = Math.log2(original_value).toFixed(3);
+ }
};
+log10_data = function() {
+ current_value = this_node.value;
+ original_value = this_node.attributes['data-value'].value;
+ if(!isNaN(current_value) && !isNaN(original_value)) {
+ if (zero_to_one_vals_exist){
+ original_value = parseFloat(original_value) + 1;
+ }
+ this_node.value = Math.log10(original_value).toFixed(3);
+ }
+};
-sqrt_normalize_data = function() {
- return $('.edit_sample_value').each((function(_this) {
- return function(_index, element) {
- current_value = parseFloat($(element).data("value")) + 1;
- if(isNaN(current_value)) {
- return current_value
- } else {
- $(element).val(Math.sqrt(current_value).toFixed(3));
- return Math.sqrt(current_value).toFixed(3)
- }
- };
- })(this));
+sqrt_data = function() {
+ current_value = this_node.value;
+ original_value = this_node.attributes['data-value'].value;
+ if(!isNaN(current_value) && !isNaN(original_value)) {
+ if (zero_to_one_vals_exist){
+ original_value = parseFloat(original_value) + 1;
+ }
+ this_node.value = Math.sqrt(original_value).toFixed(3);
+ }
};
invert_data = function() {
- return $('.edit_sample_value').each((function(_this) {
- return function(_index, element) {
- current_value = parseFloat($(element).val());
- if(isNaN(current_value)) {
- return current_value
- } else {
- $(element).val(-(current_value));
- return -(current_value)
- }
- };
- })(this));
+ current_value = this_node.value;
+ if(!isNaN(current_value)) {
+ this_node.value = parseFloat(-(current_value)).toFixed(3);
+ }
};
-
qnorm_data = function() {
- return $('.edit_sample_value').each((function(_this) {
- return function(_index, element) {
- current_value = parseFloat($(element).data("value")) + 1;
- if(isNaN(current_value)) {
- return current_value
- } else {
- $(element).val($(element).data("qnorm"));
- return $(element).data("qnorm");
- }
- };
- })(this));
+ current_value = this_node.value;
+ qnorm_value = this_node.attributes['data-qnorm'].value;
+ if(!isNaN(current_value)) {
+ this_node.value = qnorm_value;
+ }
};
zscore_data = function() {
- return $('.edit_sample_value').each((function(_this) {
- return function(_index, element) {
- current_value = parseFloat($(element).data("value")) + 1;
- if(isNaN(current_value)) {
- return current_value
- } else {
- $(element).val($(element).data("zscore"));
- return $(element).data("zscore");
- }
- };
- })(this));
+ current_value = this_node.value;
+ zscore_value = this_node.attributes['data-zscore'].value;
+ if(!isNaN(current_value)) {
+ this_node.value = zscore_value;
+ }
};
-check_for_zero_to_one_vals = function() {
- zero_to_one_vals_exist = false
- $('.trait_value_input').each(function() {
- current_value = $(this).data("value")
- if(isNaN(current_value)) {
- return true;
- } else {
- current_value = parseFloat(current_value)
- if (0 <= current_value && current_value < 1){
- zero_to_one_vals_exist = true
- return false
+do_transform = function(transform_type) {
+ tables = ['samples_primary', 'samples_other'];
+ for (_i = 0, _len = tables.length; _i < _len; _i++) {
+ table = tables[_i];
+ if ($('#' + table).length) {
+ table_api = $('#' + table).DataTable();
+ val_nodes = table_api.column(3).nodes().to$();
+ for (i = 0; i < val_nodes.length; i++) {
+ this_node = val_nodes[i].childNodes[0]
+ if (transform_type == "log2"){
+ log2_data(this_node)
+ }
+ if (transform_type == "log10"){
+ log10_data(this_node)
+ }
+ if (transform_type == "sqrt"){
+ sqrt_data(this_node)
+ }
+ if (transform_type == "invert"){
+ invert_data(this_node)
+ }
+ if (transform_type == "qnorm"){
+ qnorm_data(this_node)
+ }
+ if (transform_type == "zscore"){
+ zscore_data(this_node)
+ }
}
}
- });
- return zero_to_one_vals_exist
+ }
}
normalize_data = function() {
if ($('#norm_method option:selected').val() == 'log2' || $('#norm_method option:selected').val() == 'log10'){
if ($('input[name="transform"]').val() != "log2" && $('#norm_method option:selected').val() == 'log2') {
- log2_normalize_data(zero_to_one_vals_exist)
+ do_transform("log2")
$('input[name="transform"]').val("log2")
- $('span[name="transform_text"]').text(" - log2 transformed")
+ $('span[name="transform_text"]').text(" - log2 Transformed")
} else {
if ($('input[name="transform"]').val() != "log10" && $('#norm_method option:selected').val() == 'log10'){
- log10_normalize_data(zero_to_one_vals_exist)
+ do_transform("log10")
$('input[name="transform"]').val("log10")
- $('span[name="transform_text"]').text(" - log10 transformed")
+ $('span[name="transform_text"]').text(" - log10 Transformed")
}
}
}
else if ($('#norm_method option:selected').val() == 'sqrt'){
if ($('input[name="transform"]').val() != "sqrt") {
- sqrt_normalize_data()
+ do_transform("sqrt")
$('input[name="transform"]').val("sqrt")
- $('span[name="transform_text"]').text(" - Square Root transformed")
+ $('span[name="transform_text"]').text(" - Square Root Transformed")
}
}
else if ($('#norm_method option:selected').val() == 'invert'){
- invert_data()
+ do_transform("invert")
$('input[name="transform"]').val("inverted")
- $('span[name="transform_text"]').text(" - Inverted")
+ if ($('span[name="transform_text"]:eq(0)').text() != ""){
+ current_text = $('span[name="transform_text"]:eq(0)').text();
+ $('span[name="transform_text"]').text(current_text + " and Inverted");
+ } else {
+ $('span[name="transform_text"]').text(" - Inverted")
+ }
}
else if ($('#norm_method option:selected').val() == 'qnorm'){
if ($('input[name="transform"]').val() != "qnorm") {
- qnorm_data()
+ do_transform("qnorm")
$('input[name="transform"]').val("qnorm")
$('span[name="transform_text"]').text(" - Quantile Normalized")
}
}
else if ($('#norm_method option:selected').val() == 'zscore'){
if ($('input[name="transform"]').val() != "zscore") {
- zscore_data()
+ do_transform("zscore")
$('input[name="transform"]').val("zscore")
$('span[name="transform_text"]').text(" - Z-Scores")
}
}
}
-zero_to_one_vals_exist = false
+zero_to_one_vals_exist = check_for_zero_to_one_vals();
show_transform_warning = function() {
transform_type = $('#norm_method option:selected').val()
- zero_to_one_vals_exist = check_for_zero_to_one_vals();
if (transform_type == "log2" || transform_type == "log10"){
if (zero_to_one_vals_exist){
$('#transform_alert').css("display", "block")
@@ -833,7 +1017,7 @@ $('#normalize').hover(function(){
$('#normalize').click(normalize_data)
switch_qnorm_data = function() {
- return $('.trait_value_input').each((function(_this) {
+ return $('.trait-value-input').each((function(_this) {
return function(_index, element) {
transform_val = $(element).data('transform')
if (transform_val != "") {
@@ -844,30 +1028,69 @@ switch_qnorm_data = function() {
})(this));
};
$('#qnorm').click(switch_qnorm_data);
+
get_sample_table_data = function(table_name) {
var samples;
samples = [];
- $('#' + table_name).find('.value_se').each((function(_this) {
- return function(_index, element) {
- var attribute_info, key, row_data, _ref;
- row_data = {};
- row_data.name = $.trim($(element).find('.column_name-Sample').text());
- row_data.value = $(element).find('.edit_sample_value:eq(0)').val();
- if ($(element).find('.edit_sample_se').length > 0) {
- row_data.se = $(element).find('.edit_sample_se').val();
+
+ var se_exists = false;
+ var n_exists = false;
+
+ if ($('#' + table_name).length){
+ table_api = $('#' + table_name).DataTable();
+ sample_vals = [];
+
+ name_nodes = table_api.column(2).nodes().to$();
+ val_nodes = table_api.column(3).nodes().to$();
+ if (js_data.se_exists){
+ var_nodes = table_api.column(5).nodes().to$();
+ if (js_data.has_num_cases) {
+ n_nodes = table_api.column(6).nodes().to$();
}
- if ($(element).find('.edit_sample_num_cases').length > 0) {
- row_data.num_cases = $(element).find('.edit_sample_num_cases').val();
+ } else {
+ if (js_data.has_num_cases){
+ n_nodes = table_api.column(4).nodes().to$();
}
- _ref = js_data.attribute_names;
- for (key in _ref) {
- if (!__hasProp.call(_ref, key)) continue;
- attribute_info = _ref[key];
- row_data[attribute_info.name] = $.trim($(element).find('.column_name-' + attribute_info.name.replace(" ", "_").replace("/", "\\/")).text());
+ }
+
+ for (_j = 0; _j < val_nodes.length; _j++){
+ sample_val = val_nodes[_j].childNodes[0].value
+ sample_name = $.trim(name_nodes[_j].childNodes[0].textContent)
+ if (is_number(sample_val) && sample_val !== "") {
+ sample_val = parseFloat(sample_val);
+ if (typeof var_nodes == 'undefined'){
+ sample_var = null;
+ } else {
+ sample_var = var_nodes[_j].childNodes[0].value;
+ if (is_number(sample_var)) {
+ sample_var = parseFloat(sample_var);
+ se_exists = true;
+ } else {
+ sample_var = null;
+ }
+ }
+ if (typeof n_nodes == 'undefined'){
+ sample_n = null;
+ } else {
+ sample_n = n_nodes[_j].childNodes[0].value;
+ if (is_number(sample_n)) {
+ n_exists = true;
+ sample_n = parseInt(sample_n);
+ } else {
+ sample_n = null;
+ }
+ }
+ row_dict = {
+ name: sample_name,
+ value: sample_val,
+ se: sample_var,
+ num_cases: sample_n
+ }
+ samples.push(row_dict)
}
- return samples.push(row_data);
- };
- })(this));
+ }
+ }
+
return samples;
};
export_sample_table_data = function() {
@@ -1103,7 +1326,7 @@ if (js_data.num_values < 256) {
margin: {
l: left_margin,
r: 30,
- t: 30,
+ t: 100,
b: bottom_margin
}
};
@@ -1447,8 +1670,17 @@ $('.stats_panel').click(function() {
edit_data_change();
}
});
-$('#edit_sample_lists').change(edit_data_change);
-$('#block_by_index').click(edit_data_change);
+
+$('#block_by_index').click(function(){
+ block_by_index();
+ edit_data_change();
+});
+
+$('#filter_by_value').click(function(){
+ filter_by_value();
+ edit_data_change();
+})
+
$('#exclude_group').click(edit_data_change);
$('#block_outliers').click(edit_data_change);
$('#reset').click(edit_data_change);
diff --git a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
index 01da3f74..3ae52975 100644
--- a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
+++ b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
@@ -1,308 +1,298 @@
-// Generated by CoffeeScript 1.8.0
-(function() {
- var block_outliers, composite_mapping_fields, do_ajax_post, get_progress, mapping_method_fields, open_mapping_results, outlier_text, showalert, submit_special, toggle_enable_disable, update_time_remaining;
+var block_outliers, composite_mapping_fields, do_ajax_post, get_progress, mapping_method_fields, open_mapping_results, outlier_text, showalert, submit_special, toggle_enable_disable, update_time_remaining;
- submit_special = function(url) {
- console.log("In submit_special");
- $("#trait_data_form").attr("action", url);
- return $("#trait_data_form").submit();
- };
-
- update_time_remaining = function(percent_complete) {
- var minutes_remaining, now, period, total_seconds_remaining;
- now = new Date();
- period = now.getTime() - root.start_time;
- console.log("period is:", period);
- if (period > 8000) {
- total_seconds_remaining = (period / percent_complete * (100 - percent_complete)) / 1000;
- minutes_remaining = Math.round(total_seconds_remaining / 60);
- if (minutes_remaining < 3) {
- return $('#time_remaining').text(Math.round(total_seconds_remaining) + " seconds remaining");
- } else {
- return $('#time_remaining').text(minutes_remaining + " minutes remaining");
- }
+update_time_remaining = function(percent_complete) {
+ var minutes_remaining, now, period, total_seconds_remaining;
+ now = new Date();
+ period = now.getTime() - root.start_time;
+ console.log("period is:", period);
+ if (period > 8000) {
+ total_seconds_remaining = (period / percent_complete * (100 - percent_complete)) / 1000;
+ minutes_remaining = Math.round(total_seconds_remaining / 60);
+ if (minutes_remaining < 3) {
+ return $('#time_remaining').text(Math.round(total_seconds_remaining) + " seconds remaining");
+ } else {
+ return $('#time_remaining').text(minutes_remaining + " minutes remaining");
}
- };
+ }
+};
- get_progress = function() {
- var params, params_str, temp_uuid, url;
- console.log("temp_uuid:", $("#temp_uuid").val());
- temp_uuid = $("#temp_uuid").val();
- params = {
- key: temp_uuid
- };
- params_str = $.param(params);
- url = "/get_temp_data?" + params_str;
- console.log("url:", url);
- $.ajax({
- type: "GET",
- url: url,
- success: (function(_this) {
- return function(progress_data) {
- var percent_complete;
- percent_complete = progress_data['percent_complete'];
- console.log("in get_progress data:", progress_data);
- $('#marker_regression_progress').css("width", percent_complete + "%");
- if (root.start_time) {
- if (!isNaN(percent_complete)) {
- return update_time_remaining(percent_complete);
- }
- } else {
- return root.start_time = new Date().getTime();
- }
- };
- })(this)
- });
- return false;
+get_progress = function() {
+ var params, params_str, temp_uuid, url;
+ console.log("temp_uuid:", $("#temp_uuid").val());
+ temp_uuid = $("#temp_uuid").val();
+ params = {
+ key: temp_uuid
};
-
- block_outliers = function() {
- return $('.outlier').each((function(_this) {
- return function(_index, element) {
- return $(element).find('.trait_value_input').val('x');
+ params_str = $.param(params);
+ url = "/get_temp_data?" + params_str;
+ console.log("url:", url);
+ $.ajax({
+ type: "GET",
+ url: url,
+ success: (function(_this) {
+ return function(progress_data) {
+ var percent_complete;
+ percent_complete = progress_data['percent_complete'];
+ console.log("in get_progress data:", progress_data);
+ $('#marker_regression_progress').css("width", percent_complete + "%");
+ if (root.start_time) {
+ if (!isNaN(percent_complete)) {
+ return update_time_remaining(percent_complete);
+ }
+ } else {
+ return root.start_time = new Date().getTime();
+ }
};
- })(this));
- };
-
- do_ajax_post = function(url, form_data) {
- $.ajax({
- type: "POST",
- url: url,
- data: form_data,
- error: (function(_this) {
- return function(xhr, ajaxOptions, thrownError) {
- alert("Sorry, an error occurred");
- console.log(xhr);
- clearInterval(_this.my_timer);
- $('#progress_bar_container').modal('hide');
- $('#static_progress_bar_container').modal('hide');
- return $("body").html("We got an error.");
- };
- })(this),
- success: (function(_this) {
- return function(data) {
- clearInterval(_this.my_timer);
- $('#progress_bar_container').modal('hide');
- $('#static_progress_bar_container').modal('hide');
- return open_mapping_results(data);
- };
- })(this)
- });
- console.log("settingInterval");
- this.my_timer = setInterval(get_progress, 1000);
- return false;
- };
-
- open_mapping_results = function(data) {
- return $.colorbox({
- html: data,
- href: "#mapping_results_holder",
- height: "90%",
- width: "90%",
- onComplete: (function(_this) {
- return function() {
- var filename, getSvgXml;
- root.create_lod_chart();
- filename = "lod_chart_" + js_data.this_trait;
- getSvgXml = function() {
- var svg;
- svg = $("#topchart").find("svg")[0];
- return (new XMLSerializer).serializeToString(svg);
- };
- $("#exportform > #export").click(function() {
- var form, svg_xml;
- svg_xml = getSvgXml();
- form = $("#exportform");
- form.find("#data").val(svg_xml);
- form.find("#filename").val(filename);
- return form.submit();
- });
- return $("#exportpdfform > #export_pdf").click(function() {
- var form, svg_xml;
- svg_xml = getSvgXml();
- form = $("#exportpdfform");
- form.find("#data").val(svg_xml);
- form.find("#filename").val(filename);
- return form.submit();
- });
- };
- })(this)
- });
- };
-
- outlier_text = "One or more outliers exist in this data set. Please review values before mapping. Including outliers when mapping may lead to misleading results.";
- showalert = function(message, alerttype) {
- return $('#outlier_alert_placeholder').append('<div id="mapping_alert" class="alert ' + alerttype + '"><a class="close" data-dismiss="alert">�</a><span>' + message + '</span></div>');
- };
-
- $('#suggestive').hide();
+ })(this)
+ });
+ return false;
+};
- $('input[name=display_all]').change((function(_this) {
- return function() {
- console.log("check");
- if ($('input[name=display_all]:checked').val() === "False") {
- return $('#suggestive').show();
- } else {
- return $('#suggestive').hide();
- }
+block_outliers = function() {
+ return $('.outlier').each((function(_this) {
+ return function(_index, element) {
+ return $(element).find('.trait_value_input').val('x');
};
})(this));
+};
- //ZS: This is a list of inputs to be passed to the loading page, since not all inputs on the trait page are relevant to mapping
- var mapping_input_list = ['temp_uuid', 'trait_id', 'dataset', 'tool_used', 'form_url', 'method', 'transform', 'trimmed_markers', 'selected_chr', 'chromosomes', 'mapping_scale',
- 'score_type', 'suggestive', 'significant', 'num_perm', 'permCheck', 'perm_output', 'perm_strata', 'categorical_vars', 'num_bootstrap', 'bootCheck', 'bootstrap_results',
- 'LRSCheck', 'covariates', 'maf', 'use_loco', 'manhattan_plot', 'control_marker', 'control_marker_db', 'do_control', 'genofile',
- 'pair_scan', 'startMb', 'endMb', 'graphWidth', 'lrsMax', 'additiveCheck', 'showSNP', 'showGenes', 'viewLegend', 'haplotypeAnalystCheck',
- 'mapmethod_rqtl_geno', 'mapmodel_rqtl_geno', 'temp_trait', 'group', 'species', 'reaper_version', 'primary_samples']
-
- $(".rqtl_tab, #rqtl_geno_compute").on("click", (function(_this) {
- return function() {
- if ($(this).hasClass('active') || $(this).attr('id') == "rqtl_geno_compute"){
- var form_data, url;
- url = "/loading";
- $('input[name=method]').val("rqtl_geno");
- $('input[name=selected_chr]').val($('#chr_rqtl_geno').val());
- $('input[name=mapping_scale]').val($('#scale_rqtl_geno').val());
- $('input[name=genofile]').val($('#genofile_rqtl_geno').val());
- $('input[name=num_perm]').val($('input[name=num_perm_rqtl_geno]').val());
- $('input[name=categorical_vars]').val(js_data.categorical_vars)
- $('input[name=manhattan_plot]').val($('input[name=manhattan_plot_rqtl]:checked').val());
- $('input[name=control_marker]').val($('input[name=control_rqtl_geno]').val());
- $('input[name=do_control]').val($('input[name=do_control_rqtl]:checked').val());
- $('input[name=tool_used]').val("Mapping");
- $('input[name=form_url]').val("/run_mapping");
- $('input[name=wanted_inputs]').val(mapping_input_list.join(","));
- return submit_special(url);
- } else {
- return true
- }
- };
- })(this));
-
- $(".gemma_tab, #gemma_compute").on("click", (function(_this) {
- return function() {
- if ($(this).hasClass('active') || $(this).attr('id') == "gemma_compute"){
- var form_data, url;
- console.log("RUNNING GEMMA");
- url = "/loading";
- $('input[name=method]').val("gemma");
- $('input[name=selected_chr]').val($('#chr_gemma').val());
- $('input[name=num_perm]').val(0);
- $('input[name=genofile]').val($('#genofile_gemma').val());
- $('input[name=maf]').val($('input[name=maf_gemma]').val());
- $('input[name=tool_used]').val("Mapping");
- $('input[name=form_url]').val("/run_mapping");
- $('input[name=wanted_inputs]').val(mapping_input_list.join(","));
- return submit_special(url);
- } else {
- return true
- }
- };
- })(this));
+do_ajax_post = function(url, form_data) {
+ $.ajax({
+ type: "POST",
+ url: url,
+ data: form_data,
+ error: (function(_this) {
+ return function(xhr, ajaxOptions, thrownError) {
+ alert("Sorry, an error occurred");
+ console.log(xhr);
+ clearInterval(_this.my_timer);
+ $('#progress_bar_container').modal('hide');
+ $('#static_progress_bar_container').modal('hide');
+ return $("body").html("We got an error.");
+ };
+ })(this),
+ success: (function(_this) {
+ return function(data) {
+ clearInterval(_this.my_timer);
+ $('#progress_bar_container').modal('hide');
+ $('#static_progress_bar_container').modal('hide');
+ return open_mapping_results(data);
+ };
+ })(this)
+ });
+ console.log("settingInterval");
+ this.my_timer = setInterval(get_progress, 1000);
+ return false;
+};
- $(".reaper_tab, #interval_mapping_compute").on("click", (function(_this) {
- return function() {
- if ($(this).hasClass('active') || $(this).attr('id') == "interval_mapping_compute"){
- var form_data, url;
- console.log("In interval mapping");
- url = "/loading";
- $('input[name=method]').val("reaper");
- $('input[name=selected_chr]').val($('#chr_reaper').val());
- $('input[name=mapping_scale]').val($('#scale_reaper').val());
- $('input[name=genofile]').val($('#genofile_reaper').val());
- $('input[name=num_perm]').val($('input[name=num_perm_reaper]').val());
- $('input[name=control_marker]').val($('input[name=control_reaper]').val());
- $('input[name=do_control]').val($('input[name=do_control_reaper]:checked').val());
- $('input[name=manhattan_plot]').val($('input[name=manhattan_plot_reaper]:checked').val());
- $('input[name=mapping_display_all]').val($('input[name=display_all_reaper]'));
- $('input[name=suggestive]').val($('input[name=suggestive_reaper]'));
- $('input[name=tool_used]').val("Mapping");
- $('input[name=form_url]').val("/run_mapping");
- $('input[name=wanted_inputs]').val(mapping_input_list.join(","));
- return submit_special(url);
- } else {
- return true
- }
- };
- })(this));
+open_mapping_results = function(data) {
+ return $.colorbox({
+ html: data,
+ href: "#mapping_results_holder",
+ height: "90%",
+ width: "90%",
+ onComplete: (function(_this) {
+ return function() {
+ var filename, getSvgXml;
+ root.create_lod_chart();
+ filename = "lod_chart_" + js_data.this_trait;
+ getSvgXml = function() {
+ var svg;
+ svg = $("#topchart").find("svg")[0];
+ return (new XMLSerializer).serializeToString(svg);
+ };
+ $("#exportform > #export").click(function() {
+ var form, svg_xml;
+ svg_xml = getSvgXml();
+ form = $("#exportform");
+ form.find("#data").val(svg_xml);
+ form.find("#filename").val(filename);
+ return form.submit();
+ });
+ return $("#exportpdfform > #export_pdf").click(function() {
+ var form, svg_xml;
+ svg_xml = getSvgXml();
+ form = $("#exportpdfform");
+ form.find("#data").val(svg_xml);
+ form.find("#filename").val(filename);
+ return form.submit();
+ });
+ };
+ })(this)
+ });
+};
- $("#interval_mapping_compute, #gemma_compute, rqtl_geno_compute").on("mouseover", (function(_this) {
- return function() {
- if ($(".outlier").length && $(".outlier-alert").length < 1) {
- return showalert(outlier_text, "alert-success outlier-alert");
- }
- };
- })(this));
+outlier_text = "One or more outliers exist in this data set. Please review values before mapping. Including outliers when mapping may lead to misleading results.";
+showalert = function(message, alerttype) {
+ return $('#outlier_alert_placeholder').append('<div id="mapping_alert" class="alert ' + alerttype + '"><a class="close" data-dismiss="alert">�</a><span>' + message + '</span></div>');
+};
- composite_mapping_fields = function() {
- return $(".composite_fields").toggle();
- };
+$('#suggestive').hide();
- mapping_method_fields = function() {
- return $(".mapping_method_fields").toggle();
+$('input[name=display_all]').change((function(_this) {
+ return function() {
+ console.log("check");
+ if ($('input[name=display_all]:checked').val() === "False") {
+ return $('#suggestive').show();
+ } else {
+ return $('#suggestive').hide();
+ }
};
+})(this));
- $("#use_composite_choice").change(composite_mapping_fields);
-
- $("#mapping_method_choice").change(mapping_method_fields);
+//ZS: This is a list of inputs to be passed to the loading page, since not all inputs on the trait page are relevant to mapping
+var mapping_input_list = ['temp_uuid', 'trait_id', 'dataset', 'tool_used', 'form_url', 'method', 'transform', 'trimmed_markers', 'selected_chr', 'chromosomes', 'mapping_scale', 'sample_vals',
+ 'score_type', 'suggestive', 'significant', 'num_perm', 'permCheck', 'perm_output', 'perm_strata', 'categorical_vars', 'num_bootstrap', 'bootCheck', 'bootstrap_results',
+ 'LRSCheck', 'covariates', 'maf', 'use_loco', 'manhattan_plot', 'control_marker', 'control_marker_db', 'do_control', 'genofile',
+ 'pair_scan', 'startMb', 'endMb', 'graphWidth', 'lrsMax', 'additiveCheck', 'showSNP', 'showGenes', 'viewLegend', 'haplotypeAnalystCheck',
+ 'mapmethod_rqtl_geno', 'mapmodel_rqtl_geno', 'temp_trait', 'group', 'species', 'reaper_version', 'primary_samples']
- $("#mapmodel_rqtl_geno").change(function() {
- if ($(this).val() == "np"){
- $("#mapmethod_rqtl_geno").attr('disabled', 'disabled');
- $("#mapmethod_rqtl_geno").css('background-color', '#CCC');
- $("#missing_geno").attr('disabled', 'disabled');
- $("#missing_geno").css('background-color', '#CCC');
+$(".rqtl-tab, #rqtl_geno_compute").on("click", (function(_this) {
+ return function() {
+ if ($(this).hasClass('active') || $(this).attr('id') == "rqtl_geno_compute"){
+ var form_data, url;
+ url = "/loading";
+ $('input[name=method]').val("rqtl_geno");
+ $('input[name=selected_chr]').val($('#chr_rqtl_geno').val());
+ $('input[name=mapping_scale]').val($('#scale_rqtl_geno').val());
+ $('input[name=genofile]').val($('#genofile_rqtl_geno').val());
+ $('input[name=num_perm]').val($('input[name=num_perm_rqtl_geno]').val());
+ $('input[name=categorical_vars]').val(js_data.categorical_vars)
+ $('input[name=manhattan_plot]').val($('input[name=manhattan_plot_rqtl]:checked').val());
+ $('input[name=control_marker]').val($('input[name=control_rqtl_geno]').val());
+ $('input[name=do_control]').val($('input[name=do_control_rqtl]:checked').val());
+ $('input[name=tool_used]').val("Mapping");
+ $('input[name=form_url]').val("/run_mapping");
+ $('input[name=wanted_inputs]').val(mapping_input_list.join(","));
+ return submit_special(url);
} else {
- $("#mapmethod_rqtl_geno").removeAttr('disabled');
- $("#mapmethod_rqtl_geno").css('background-color', '#FFF');
- $("#missing_geno").removeAttr('disabled');
- $("#missing_geno").css('background-color', '#FFF');
+ return true
}
- });
+ };
+})(this));
- $("#mapmethod_rqtl_geno").change(function() {
- if ($(this).val() == "mr"){
- $("#missing_geno_div").css('display', 'block');
+$(".gemma-tab, #gemma_compute").on("click", (function(_this) {
+ return function() {
+ if ($(this).hasClass('active') || $(this).attr('id') == "gemma_compute"){
+ var form_data, url;
+ console.log("RUNNING GEMMA");
+ url = "/loading";
+ $('input[name=method]').val("gemma");
+ $('input[name=selected_chr]').val($('#chr_gemma').val());
+ $('input[name=num_perm]').val(0);
+ $('input[name=genofile]').val($('#genofile_gemma').val());
+ $('input[name=maf]').val($('input[name=maf_gemma]').val());
+ $('input[name=tool_used]').val("Mapping");
+ $('input[name=form_url]').val("/run_mapping");
+ $('input[name=wanted_inputs]').val(mapping_input_list.join(","));
+ return submit_special(url);
} else {
- $("#missing_geno_div").css('display', 'none');
+ return true
}
- });
+ };
+})(this));
- $("li.mapping_tab").click(function() {
- if ($(this).hasClass("rqtl")){
- $(".rqtl_description").css("display", "block");
+$(".reaper-tab, #interval_mapping_compute").on("click", (function(_this) {
+ return function() {
+ if ($(this).hasClass('active') || $(this).attr('id') == "interval_mapping_compute"){
+ var form_data, url;
+ console.log("In interval mapping");
+ url = "/loading";
+ $('input[name=method]').val("reaper");
+ $('input[name=selected_chr]').val($('#chr_reaper').val());
+ $('input[name=mapping_scale]').val($('#scale_reaper').val());
+ $('input[name=genofile]').val($('#genofile_reaper').val());
+ $('input[name=num_perm]').val($('input[name=num_perm_reaper]').val());
+ $('input[name=control_marker]').val($('input[name=control_reaper]').val());
+ $('input[name=do_control]').val($('input[name=do_control_reaper]:checked').val());
+ $('input[name=manhattan_plot]').val($('input[name=manhattan_plot_reaper]:checked').val());
+ $('input[name=mapping_display_all]').val($('input[name=display_all_reaper]'));
+ $('input[name=suggestive]').val($('input[name=suggestive_reaper]'));
+ $('input[name=tool_used]').val("Mapping");
+ $('input[name=form_url]').val("/run_mapping");
+ $('input[name=wanted_inputs]').val(mapping_input_list.join(","));
+ return submit_special(url);
} else {
- $(".rqtl_description").css("display", "none");
+ return true
}
- });
+ };
+})(this));
- toggle_enable_disable = function(elem) {
- return $(elem).prop("disabled", !$(elem).prop("disabled"));
+$("#interval_mapping_compute, #gemma_compute, rqtl_geno_compute").on("mouseover", (function(_this) {
+ return function() {
+ if ($(".outlier").length && $(".outlier-alert").length < 1) {
+ return showalert(outlier_text, "alert-success outlier-alert");
+ }
};
+})(this));
- $("#choose_closet_control").change(function() {
- return toggle_enable_disable("#control_locus");
- });
+composite_mapping_fields = function() {
+ return $(".composite_fields").toggle();
+};
- $("#display_all_lrs").change(function() {
- return toggle_enable_disable("#suggestive_lrs");
- });
+mapping_method_fields = function() {
+ return $(".mapping_method_fields").toggle();
+};
- $('#genofile_rqtl_geno').change(function() {
- geno_location = $(this).children("option:selected").val().split(":")[0]
- $('#scale_rqtl_geno').empty()
- the_scales = js_data.scales_in_geno[geno_location]
- for (var i = 0; i < the_scales.length; i++){
- $('#scale_rqtl_geno').append($("<option></option>").attr("value", the_scales[i][0]).text(the_scales[i][1]));
- }
- });
- $('#genofile_reaper').change(function() {
- geno_location = $(this).children("option:selected").val().split(":")[0]
- $('#scale_reaper').empty()
- the_scales = js_data.scales_in_geno[geno_location]
- for (var i = 0; i < the_scales.length; i++){
- $('#scale_reaper').append($("<option></option>").attr("value", the_scales[i][0]).text(the_scales[i][1]));
- }
- });
+$("#use_composite_choice").change(composite_mapping_fields);
+
+$("#mapping_method_choice").change(mapping_method_fields);
+
+$("#mapmodel_rqtl_geno").change(function() {
+ if ($(this).val() == "np"){
+ $("#mapmethod_rqtl_geno").attr('disabled', 'disabled');
+ $("#mapmethod_rqtl_geno").css('background-color', '#CCC');
+ $("#missing_geno").attr('disabled', 'disabled');
+ $("#missing_geno").css('background-color', '#CCC');
+ } else {
+ $("#mapmethod_rqtl_geno").removeAttr('disabled');
+ $("#mapmethod_rqtl_geno").css('background-color', '#FFF');
+ $("#missing_geno").removeAttr('disabled');
+ $("#missing_geno").css('background-color', '#FFF');
+ }
+});
+
+$("#mapmethod_rqtl_geno").change(function() {
+ if ($(this).val() == "mr"){
+ $("#missing_geno_div").css('display', 'block');
+ } else {
+ $("#missing_geno_div").css('display', 'none');
+ }
+});
+
+$("li.mapping-tab").click(function() {
+ if ($(this).hasClass("rqtl")){
+ $(".rqtl_description").css("display", "block");
+ } else {
+ $(".rqtl_description").css("display", "none");
+ }
+});
+
+toggle_enable_disable = function(elem) {
+ return $(elem).prop("disabled", !$(elem).prop("disabled"));
+};
+
+$("#choose_closet_control").change(function() {
+ return toggle_enable_disable("#control_locus");
+});
+
+$("#display_all_lrs").change(function() {
+ return toggle_enable_disable("#suggestive_lrs");
+});
-}).call(this);
+$('#genofile_rqtl_geno').change(function() {
+ geno_location = $(this).children("option:selected").val().split(":")[0]
+ $('#scale_rqtl_geno').empty()
+ the_scales = js_data.scales_in_geno[geno_location]
+ for (var i = 0; i < the_scales.length; i++){
+ $('#scale_rqtl_geno').append($("<option></option>").attr("value", the_scales[i][0]).text(the_scales[i][1]));
+ }
+});
+$('#genofile_reaper').change(function() {
+ geno_location = $(this).children("option:selected").val().split(":")[0]
+ $('#scale_reaper').empty()
+ the_scales = js_data.scales_in_geno[geno_location]
+ for (var i = 0; i < the_scales.length; i++){
+ $('#scale_reaper').append($("<option></option>").attr("value", the_scales[i][0]).text(the_scales[i][1]));
+ }
+});
diff --git a/wqflask/wqflask/static/new/javascript/stats.js b/wqflask/wqflask/static/new/javascript/stats.js
index 4df03412..6c443ab3 100644
--- a/wqflask/wqflask/static/new/javascript/stats.js
+++ b/wqflask/wqflask/static/new/javascript/stats.js
@@ -91,8 +91,6 @@ Stats = (function() {
Stats.prototype.interquartile = function() {
var iq, length, q1, q3;
length = this.the_values.length;
- console.log("in interquartile the_values are:", this.the_values);
- console.log("length is:", length);
if (js_data.dataset_type == "ProbeSet" && js_data.data_scale == "linear_positive") {
q1 = Math.log2(this.the_values[Math.floor(length * .25)]);
q3 = Math.log2(this.the_values[Math.floor(length * .75)]);
diff --git a/wqflask/wqflask/static/new/js_external/chroma.js b/wqflask/wqflask/static/new/js_external/chroma.js
deleted file mode 100644
index 575e752f..00000000
--- a/wqflask/wqflask/static/new/js_external/chroma.js
+++ /dev/null
@@ -1,2464 +0,0 @@
-/**
- * @license
- *
- * chroma.js - JavaScript library for color conversions
- *
- * Copyright (c) 2011-2015, Gregor Aisch
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * 3. The name Gregor Aisch may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL GREGOR AISCH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-(function() {
- var Color, DEG2RAD, LAB_CONSTANTS, PI, PITHIRD, RAD2DEG, TWOPI, _guess_formats, _guess_formats_sorted, _input, _interpolators, abs, atan2, bezier, blend, blend_f, brewer, burn, chroma, clip_rgb, cmyk2rgb, colors, cos, css2rgb, darken, dodge, each, floor, hex2rgb, hsi2rgb, hsl2css, hsl2rgb, hsv2rgb, interpolate, interpolate_hsx, interpolate_lab, interpolate_num, interpolate_rgb, lab2lch, lab2rgb, lab_xyz, lch2lab, lch2rgb, lighten, limit, log, luminance_x, m, max, multiply, normal, num2rgb, overlay, pow, rgb2cmyk, rgb2css, rgb2hex, rgb2hsi, rgb2hsl, rgb2hsv, rgb2lab, rgb2lch, rgb2luminance, rgb2num, rgb2temperature, rgb2xyz, rgb_xyz, rnd, root, round, screen, sin, sqrt, temperature2rgb, type, unpack, w3cx11, xyz_lab, xyz_rgb,
- slice = [].slice;
-
- type = (function() {
-
- /*
- for browser-safe type checking+
- ported from jQuery's $.type
- */
- var classToType, len, name, o, ref;
- classToType = {};
- ref = "Boolean Number String Function Array Date RegExp Undefined Null".split(" ");
- for (o = 0, len = ref.length; o < len; o++) {
- name = ref[o];
- classToType["[object " + name + "]"] = name.toLowerCase();
- }
- return function(obj) {
- var strType;
- strType = Object.prototype.toString.call(obj);
- return classToType[strType] || "object";
- };
- })();
-
- limit = function(x, min, max) {
- if (min == null) {
- min = 0;
- }
- if (max == null) {
- max = 1;
- }
- if (x < min) {
- x = min;
- }
- if (x > max) {
- x = max;
- }
- return x;
- };
-
- unpack = function(args) {
- if (args.length >= 3) {
- return [].slice.call(args);
- } else {
- return args[0];
- }
- };
-
- clip_rgb = function(rgb) {
- var i;
- for (i in rgb) {
- if (i < 3) {
- if (rgb[i] < 0) {
- rgb[i] = 0;
- }
- if (rgb[i] > 255) {
- rgb[i] = 255;
- }
- } else if (i === 3) {
- if (rgb[i] < 0) {
- rgb[i] = 0;
- }
- if (rgb[i] > 1) {
- rgb[i] = 1;
- }
- }
- }
- return rgb;
- };
-
- PI = Math.PI, round = Math.round, cos = Math.cos, floor = Math.floor, pow = Math.pow, log = Math.log, sin = Math.sin, sqrt = Math.sqrt, atan2 = Math.atan2, max = Math.max, abs = Math.abs;
-
- TWOPI = PI * 2;
-
- PITHIRD = PI / 3;
-
- DEG2RAD = PI / 180;
-
- RAD2DEG = 180 / PI;
-
- chroma = function() {
- if (arguments[0] instanceof Color) {
- return arguments[0];
- }
- return (function(func, args, ctor) {
- ctor.prototype = func.prototype;
- var child = new ctor, result = func.apply(child, args);
- return Object(result) === result ? result : child;
- })(Color, arguments, function(){});
- };
-
- _interpolators = [];
-
- if ((typeof module !== "undefined" && module !== null) && (module.exports != null)) {
- module.exports = chroma;
- }
-
- if (typeof define === 'function' && define.amd) {
- define([], function() {
- return chroma;
- });
- } else {
- root = typeof exports !== "undefined" && exports !== null ? exports : this;
- root.chroma = chroma;
- }
-
- chroma.version = '1.1.1';
-
-
- /**
- chroma.js
-
- Copyright (c) 2011-2013, Gregor Aisch
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- * The name Gregor Aisch may not be used to endorse or promote products
- derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL GREGOR AISCH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- @source: https://github.com/gka/chroma.js
- */
-
- _input = {};
-
- _guess_formats = [];
-
- _guess_formats_sorted = false;
-
- Color = (function() {
- function Color() {
- var arg, args, chk, len, len1, me, mode, o, w;
- me = this;
- args = [];
- for (o = 0, len = arguments.length; o < len; o++) {
- arg = arguments[o];
- if (arg != null) {
- args.push(arg);
- }
- }
- mode = args[args.length - 1];
- if (_input[mode] != null) {
- me._rgb = clip_rgb(_input[mode](unpack(args.slice(0, -1))));
- } else {
- if (!_guess_formats_sorted) {
- _guess_formats = _guess_formats.sort(function(a, b) {
- return b.p - a.p;
- });
- _guess_formats_sorted = true;
- }
- for (w = 0, len1 = _guess_formats.length; w < len1; w++) {
- chk = _guess_formats[w];
- mode = chk.test.apply(chk, args);
- if (mode) {
- break;
- }
- }
- if (mode) {
- me._rgb = clip_rgb(_input[mode].apply(_input, args));
- }
- }
- if (me._rgb == null) {
- console.warn('unknown format: ' + args);
- }
- if (me._rgb == null) {
- me._rgb = [0, 0, 0];
- }
- if (me._rgb.length === 3) {
- me._rgb.push(1);
- }
- }
-
- Color.prototype.alpha = function(alpha) {
- if (arguments.length) {
- this._rgb[3] = alpha;
- return this;
- }
- return this._rgb[3];
- };
-
- Color.prototype.toString = function() {
- return this.name();
- };
-
- return Color;
-
- })();
-
- chroma._input = _input;
-
-
- /**
- ColorBrewer colors for chroma.js
-
- Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The
- Pennsylvania State University.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software distributed
- under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
- CONDITIONS OF ANY KIND, either express or implied. See the License for the
- specific language governing permissions and limitations under the License.
-
- @preserve
- */
-
- chroma.brewer = brewer = {
- OrRd: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'],
- PuBu: ['#fff7fb', '#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858'],
- BuPu: ['#f7fcfd', '#e0ecf4', '#bfd3e6', '#9ebcda', '#8c96c6', '#8c6bb1', '#88419d', '#810f7c', '#4d004b'],
- Oranges: ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704'],
- BuGn: ['#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45', '#006d2c', '#00441b'],
- YlOrBr: ['#ffffe5', '#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02', '#993404', '#662506'],
- YlGn: ['#ffffe5', '#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443', '#006837', '#004529'],
- Reds: ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d'],
- RdPu: ['#fff7f3', '#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e', '#7a0177', '#49006a'],
- Greens: ['#f7fcf5', '#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b'],
- YlGnBu: ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#253494', '#081d58'],
- Purples: ['#fcfbfd', '#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d'],
- GnBu: ['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081'],
- Greys: ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525', '#000000'],
- YlOrRd: ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a', '#e31a1c', '#bd0026', '#800026'],
- PuRd: ['#f7f4f9', '#e7e1ef', '#d4b9da', '#c994c7', '#df65b0', '#e7298a', '#ce1256', '#980043', '#67001f'],
- Blues: ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b'],
- PuBuGn: ['#fff7fb', '#ece2f0', '#d0d1e6', '#a6bddb', '#67a9cf', '#3690c0', '#02818a', '#016c59', '#014636'],
- Spectral: ['#9e0142', '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#e6f598', '#abdda4', '#66c2a5', '#3288bd', '#5e4fa2'],
- RdYlGn: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#d9ef8b', '#a6d96a', '#66bd63', '#1a9850', '#006837'],
- RdBu: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#f7f7f7', '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', '#053061'],
- PiYG: ['#8e0152', '#c51b7d', '#de77ae', '#f1b6da', '#fde0ef', '#f7f7f7', '#e6f5d0', '#b8e186', '#7fbc41', '#4d9221', '#276419'],
- PRGn: ['#40004b', '#762a83', '#9970ab', '#c2a5cf', '#e7d4e8', '#f7f7f7', '#d9f0d3', '#a6dba0', '#5aae61', '#1b7837', '#00441b'],
- RdYlBu: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695'],
- BrBG: ['#543005', '#8c510a', '#bf812d', '#dfc27d', '#f6e8c3', '#f5f5f5', '#c7eae5', '#80cdc1', '#35978f', '#01665e', '#003c30'],
- RdGy: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#ffffff', '#e0e0e0', '#bababa', '#878787', '#4d4d4d', '#1a1a1a'],
- PuOr: ['#7f3b08', '#b35806', '#e08214', '#fdb863', '#fee0b6', '#f7f7f7', '#d8daeb', '#b2abd2', '#8073ac', '#542788', '#2d004b'],
- Set2: ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f', '#e5c494', '#b3b3b3'],
- Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666'],
- Set1: ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf', '#999999'],
- Set3: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'],
- Dark2: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'],
- Paired: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'],
- Pastel2: ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae', '#f1e2cc', '#cccccc'],
- Pastel1: ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6', '#ffffcc', '#e5d8bd', '#fddaec', '#f2f2f2']
- };
-
-
- /**
- X11 color names
-
- http://www.w3.org/TR/css3-color/#svg-color
- */
-
- w3cx11 = {
- indigo: "#4b0082",
- gold: "#ffd700",
- hotpink: "#ff69b4",
- firebrick: "#b22222",
- indianred: "#cd5c5c",
- yellow: "#ffff00",
- mistyrose: "#ffe4e1",
- darkolivegreen: "#556b2f",
- olive: "#808000",
- darkseagreen: "#8fbc8f",
- pink: "#ffc0cb",
- tomato: "#ff6347",
- lightcoral: "#f08080",
- orangered: "#ff4500",
- navajowhite: "#ffdead",
- lime: "#00ff00",
- palegreen: "#98fb98",
- darkslategrey: "#2f4f4f",
- greenyellow: "#adff2f",
- burlywood: "#deb887",
- seashell: "#fff5ee",
- mediumspringgreen: "#00fa9a",
- fuchsia: "#ff00ff",
- papayawhip: "#ffefd5",
- blanchedalmond: "#ffebcd",
- chartreuse: "#7fff00",
- dimgray: "#696969",
- black: "#000000",
- peachpuff: "#ffdab9",
- springgreen: "#00ff7f",
- aquamarine: "#7fffd4",
- white: "#ffffff",
- orange: "#ffa500",
- lightsalmon: "#ffa07a",
- darkslategray: "#2f4f4f",
- brown: "#a52a2a",
- ivory: "#fffff0",
- dodgerblue: "#1e90ff",
- peru: "#cd853f",
- lawngreen: "#7cfc00",
- chocolate: "#d2691e",
- crimson: "#dc143c",
- forestgreen: "#228b22",
- darkgrey: "#a9a9a9",
- lightseagreen: "#20b2aa",
- cyan: "#00ffff",
- mintcream: "#f5fffa",
- silver: "#c0c0c0",
- antiquewhite: "#faebd7",
- mediumorchid: "#ba55d3",
- skyblue: "#87ceeb",
- gray: "#808080",
- darkturquoise: "#00ced1",
- goldenrod: "#daa520",
- darkgreen: "#006400",
- floralwhite: "#fffaf0",
- darkviolet: "#9400d3",
- darkgray: "#a9a9a9",
- moccasin: "#ffe4b5",
- saddlebrown: "#8b4513",
- grey: "#808080",
- darkslateblue: "#483d8b",
- lightskyblue: "#87cefa",
- lightpink: "#ffb6c1",
- mediumvioletred: "#c71585",
- slategrey: "#708090",
- red: "#ff0000",
- deeppink: "#ff1493",
- limegreen: "#32cd32",
- darkmagenta: "#8b008b",
- palegoldenrod: "#eee8aa",
- plum: "#dda0dd",
- turquoise: "#40e0d0",
- lightgrey: "#d3d3d3",
- lightgoldenrodyellow: "#fafad2",
- darkgoldenrod: "#b8860b",
- lavender: "#e6e6fa",
- maroon: "#800000",
- yellowgreen: "#9acd32",
- sandybrown: "#f4a460",
- thistle: "#d8bfd8",
- violet: "#ee82ee",
- navy: "#000080",
- magenta: "#ff00ff",
- dimgrey: "#696969",
- tan: "#d2b48c",
- rosybrown: "#bc8f8f",
- olivedrab: "#6b8e23",
- blue: "#0000ff",
- lightblue: "#add8e6",
- ghostwhite: "#f8f8ff",
- honeydew: "#f0fff0",
- cornflowerblue: "#6495ed",
- slateblue: "#6a5acd",
- linen: "#faf0e6",
- darkblue: "#00008b",
- powderblue: "#b0e0e6",
- seagreen: "#2e8b57",
- darkkhaki: "#bdb76b",
- snow: "#fffafa",
- sienna: "#a0522d",
- mediumblue: "#0000cd",
- royalblue: "#4169e1",
- lightcyan: "#e0ffff",
- green: "#008000",
- mediumpurple: "#9370db",
- midnightblue: "#191970",
- cornsilk: "#fff8dc",
- paleturquoise: "#afeeee",
- bisque: "#ffe4c4",
- slategray: "#708090",
- darkcyan: "#008b8b",
- khaki: "#f0e68c",
- wheat: "#f5deb3",
- teal: "#008080",
- darkorchid: "#9932cc",
- deepskyblue: "#00bfff",
- salmon: "#fa8072",
- darkred: "#8b0000",
- steelblue: "#4682b4",
- palevioletred: "#db7093",
- lightslategray: "#778899",
- aliceblue: "#f0f8ff",
- lightslategrey: "#778899",
- lightgreen: "#90ee90",
- orchid: "#da70d6",
- gainsboro: "#dcdcdc",
- mediumseagreen: "#3cb371",
- lightgray: "#d3d3d3",
- mediumturquoise: "#48d1cc",
- lemonchiffon: "#fffacd",
- cadetblue: "#5f9ea0",
- lightyellow: "#ffffe0",
- lavenderblush: "#fff0f5",
- coral: "#ff7f50",
- purple: "#800080",
- aqua: "#00ffff",
- whitesmoke: "#f5f5f5",
- mediumslateblue: "#7b68ee",
- darkorange: "#ff8c00",
- mediumaquamarine: "#66cdaa",
- darksalmon: "#e9967a",
- beige: "#f5f5dc",
- blueviolet: "#8a2be2",
- azure: "#f0ffff",
- lightsteelblue: "#b0c4de",
- oldlace: "#fdf5e6",
- rebeccapurple: "#663399"
- };
-
- chroma.colors = colors = w3cx11;
-
- lab2rgb = function() {
- var a, args, b, g, l, r, x, y, z;
- args = unpack(arguments);
- l = args[0], a = args[1], b = args[2];
- y = (l + 16) / 116;
- x = isNaN(a) ? y : y + a / 500;
- z = isNaN(b) ? y : y - b / 200;
- y = LAB_CONSTANTS.Yn * lab_xyz(y);
- x = LAB_CONSTANTS.Xn * lab_xyz(x);
- z = LAB_CONSTANTS.Zn * lab_xyz(z);
- r = xyz_rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z);
- g = xyz_rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z);
- b = xyz_rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z);
- r = limit(r, 0, 255);
- g = limit(g, 0, 255);
- b = limit(b, 0, 255);
- return [r, g, b, args.length > 3 ? args[3] : 1];
- };
-
- xyz_rgb = function(r) {
- return round(255 * (r <= 0.00304 ? 12.92 * r : 1.055 * pow(r, 1 / 2.4) - 0.055));
- };
-
- lab_xyz = function(t) {
- if (t > LAB_CONSTANTS.t1) {
- return t * t * t;
- } else {
- return LAB_CONSTANTS.t2 * (t - LAB_CONSTANTS.t0);
- }
- };
-
- LAB_CONSTANTS = {
- Kn: 18,
- Xn: 0.950470,
- Yn: 1,
- Zn: 1.088830,
- t0: 0.137931034,
- t1: 0.206896552,
- t2: 0.12841855,
- t3: 0.008856452
- };
-
- rgb2lab = function() {
- var b, g, r, ref, ref1, x, y, z;
- ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
- ref1 = rgb2xyz(r, g, b), x = ref1[0], y = ref1[1], z = ref1[2];
- return [116 * y - 16, 500 * (x - y), 200 * (y - z)];
- };
-
- rgb_xyz = function(r) {
- if ((r /= 255) <= 0.04045) {
- return r / 12.92;
- } else {
- return pow((r + 0.055) / 1.055, 2.4);
- }
- };
-
- xyz_lab = function(t) {
- if (t > LAB_CONSTANTS.t3) {
- return pow(t, 1 / 3);
- } else {
- return t / LAB_CONSTANTS.t2 + LAB_CONSTANTS.t0;
- }
- };
-
- rgb2xyz = function() {
- var b, g, r, ref, x, y, z;
- ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
- r = rgb_xyz(r);
- g = rgb_xyz(g);
- b = rgb_xyz(b);
- x = xyz_lab((0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / LAB_CONSTANTS.Xn);
- y = xyz_lab((0.2126729 * r + 0.7151522 * g + 0.0721750 * b) / LAB_CONSTANTS.Yn);
- z = xyz_lab((0.0193339 * r + 0.1191920 * g + 0.9503041 * b) / LAB_CONSTANTS.Zn);
- return [x, y, z];
- };
-
- chroma.lab = function() {
- return (function(func, args, ctor) {
- ctor.prototype = func.prototype;
- var child = new ctor, result = func.apply(child, args);
- return Object(result) === result ? result : child;
- })(Color, slice.call(arguments).concat(['lab']), function(){});
- };
-
- _input.lab = lab2rgb;
-
- Color.prototype.lab = function() {
- return rgb2lab(this._rgb);
- };
-
- bezier = function(colors) {
- var I, I0, I1, c, lab0, lab1, lab2, lab3, ref, ref1, ref2;
- colors = (function() {
- var len, o, results;
- results = [];
- for (o = 0, len = colors.length; o < len; o++) {
- c = colors[o];
- results.push(chroma(c));
- }
- return results;
- })();
- if (colors.length === 2) {
- ref = (function() {
- var len, o, results;
- results = [];
- for (o = 0, len = colors.length; o < len; o++) {
- c = colors[o];
- results.push(c.lab());
- }
- return results;
- })(), lab0 = ref[0], lab1 = ref[1];
- I = function(t) {
- var i, lab;
- lab = (function() {
- var o, results;
- results = [];
- for (i = o = 0; o <= 2; i = ++o) {
- results.push(lab0[i] + t * (lab1[i] - lab0[i]));
- }
- return results;
- })();
- return chroma.lab.apply(chroma, lab);
- };
- } else if (colors.length === 3) {
- ref1 = (function() {
- var len, o, results;
- results = [];
- for (o = 0, len = colors.length; o < len; o++) {
- c = colors[o];
- results.push(c.lab());
- }
- return results;
- })(), lab0 = ref1[0], lab1 = ref1[1], lab2 = ref1[2];
- I = function(t) {
- var i, lab;
- lab = (function() {
- var o, results;
- results = [];
- for (i = o = 0; o <= 2; i = ++o) {
- results.push((1 - t) * (1 - t) * lab0[i] + 2 * (1 - t) * t * lab1[i] + t * t * lab2[i]);
- }
- return results;
- })();
- return chroma.lab.apply(chroma, lab);
- };
- } else if (colors.length === 4) {
- ref2 = (function() {
- var len, o, results;
- results = [];
- for (o = 0, len = colors.length; o < len; o++) {
- c = colors[o];
- results.push(c.lab());
- }
- return results;
- })(), lab0 = ref2[0], lab1 = ref2[1], lab2 = ref2[2], lab3 = ref2[3];
- I = function(t) {
- var i, lab;
- lab = (function() {
- var o, results;
- results = [];
- for (i = o = 0; o <= 2; i = ++o) {
- results.push((1 - t) * (1 - t) * (1 - t) * lab0[i] + 3 * (1 - t) * (1 - t) * t * lab1[i] + 3 * (1 - t) * t * t * lab2[i] + t * t * t * lab3[i]);
- }
- return results;
- })();
- return chroma.lab.apply(chroma, lab);
- };
- } else if (colors.length === 5) {
- I0 = bezier(colors.slice(0, 3));
- I1 = bezier(colors.slice(2, 5));
- I = function(t) {
- if (t < 0.5) {
- return I0(t * 2);
- } else {
- return I1((t - 0.5) * 2);
- }
- };
- }
- return I;
- };
-
- chroma.bezier = function(colors) {
- var f;
- f = bezier(colors);
- f.scale = function() {
- return chroma.scale(f);
- };
- return f;
- };
-
-
- /*
- chroma.js
-
- Copyright (c) 2011-2013, Gregor Aisch
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- * The name Gregor Aisch may not be used to endorse or promote products
- derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL GREGOR AISCH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- @source: https://github.com/gka/chroma.js
- */
-
- chroma.cubehelix = function(start, rotations, hue, gamma, lightness) {
- var dh, dl, f;
- if (start == null) {
- start = 300;
- }
- if (rotations == null) {
- rotations = -1.5;
- }
- if (hue == null) {
- hue = 1;
- }
- if (gamma == null) {
- gamma = 1;
- }
- if (lightness == null) {
- lightness = [0, 1];
- }
- dl = lightness[1] - lightness[0];
- dh = 0;
- f = function(fract) {
- var a, amp, b, cos_a, g, h, l, r, sin_a;
- a = TWOPI * ((start + 120) / 360 + rotations * fract);
- l = pow(lightness[0] + dl * fract, gamma);
- h = dh !== 0 ? hue[0] + fract * dh : hue;
- amp = h * l * (1 - l) / 2;
- cos_a = cos(a);
- sin_a = sin(a);
- r = l + amp * (-0.14861 * cos_a + 1.78277 * sin_a);
- g = l + amp * (-0.29227 * cos_a - 0.90649 * sin_a);
- b = l + amp * (+1.97294 * cos_a);
- return chroma(clip_rgb([r * 255, g * 255, b * 255]));
- };
- f.start = function(s) {
- if (s == null) {
- return start;
- }
- start = s;
- return f;
- };
- f.rotations = function(r) {
- if (r == null) {
- return rotations;
- }
- rotations = r;
- return f;
- };
- f.gamma = function(g) {
- if (g == null) {
- return gamma;
- }
- gamma = g;
- return f;
- };
- f.hue = function(h) {
- if (h == null) {
- return hue;
- }
- hue = h;
- if (type(hue) === 'array') {
- dh = hue[1] - hue[0];
- if (dh === 0) {
- hue = hue[1];
- }
- } else {
- dh = 0;
- }
- return f;
- };
- f.lightness = function(h) {
- if (h == null) {
- return lightness;
- }
- lightness = h;
- if (type(lightness) === 'array') {
- dl = lightness[1] - lightness[0];
- if (dl === 0) {
- lightness = lightness[1];
- }
- } else {
- dl = 0;
- }
- return f;
- };
- f.scale = function() {
- return chroma.scale(f);
- };
- f.hue(hue);
- return f;
- };
-
- chroma.random = function() {
- var code, digits, i, o;
- digits = '0123456789abcdef';
- code = '#';
- for (i = o = 0; o < 6; i = ++o) {
- code += digits.charAt(floor(Math.random() * 16));
- }
- return new Color(code);
- };
-
- _input.rgb = function() {
- var k, ref, results, v;
- ref = unpack(arguments);
- results = [];
- for (k in ref) {
- v = ref[k];
- results.push(v);
- }
- return results;
- };
-
- chroma.rgb = function() {
- return (function(func, args, ctor) {
- ctor.prototype = func.prototype;
- var child = new ctor, result = func.apply(child, args);
- return Object(result) === result ? result : child;
- })(Color, slice.call(arguments).concat(['rgb']), function(){});
- };
-
- Color.prototype.rgb = function() {
- return this._rgb.slice(0, 3);
- };
-
- Color.prototype.rgba = function() {
- return this._rgb;
- };
-
- _guess_formats.push({
- p: 15,
- test: function(n) {
- var a;
- a = unpack(arguments);
- if (type(a) === 'array' && a.length === 3) {
- return 'rgb';
- }
- if (a.length === 4 && type(a[3]) === "number" && a[3] >= 0 && a[3] <= 1) {
- return 'rgb';
- }
- }
- });
-
- hex2rgb = function(hex) {
- var a, b, g, r, rgb, u;
- if (hex.match(/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/)) {
- if (hex.length === 4 || hex.length === 7) {
- hex = hex.substr(1);
- }
- if (hex.length === 3) {
- hex = hex.split("");
- hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
- }
- u = parseInt(hex, 16);
- r = u >> 16;
- g = u >> 8 & 0xFF;
- b = u & 0xFF;
- return [r, g, b, 1];
- }
- if (hex.match(/^#?([A-Fa-f0-9]{8})$/)) {
- if (hex.length === 9) {
- hex = hex.substr(1);
- }
- u = parseInt(hex, 16);
- r = u >> 24 & 0xFF;
- g = u >> 16 & 0xFF;
- b = u >> 8 & 0xFF;
- a = round((u & 0xFF) / 0xFF * 100) / 100;
- return [r, g, b, a];
- }
- if ((_input.css != null) && (rgb = _input.css(hex))) {
- return rgb;
- }
- throw "unknown color: " + hex;
- };
-
- rgb2hex = function(channels, mode) {
- var a, b, g, hxa, r, str, u;
- if (mode == null) {
- mode = 'rgb';
- }
- r = channels[0], g = channels[1], b = channels[2], a = channels[3];
- u = r << 16 | g << 8 | b;
- str = "000000" + u.toString(16);
- str = str.substr(str.length - 6);
- hxa = '0' + round(a * 255).toString(16);
- hxa = hxa.substr(hxa.length - 2);
- return "#" + (function() {
- switch (mode.toLowerCase()) {
- case 'rgba':
- return str + hxa;
- case 'argb':
- return hxa + str;
- default:
- return str;
- }
- })();
- };
-
- _input.hex = function(h) {
- return hex2rgb(h);
- };
-
- chroma.hex = function() {
- return (function(func, args, ctor) {
- ctor.prototype = func.prototype;
- var child = new ctor, result = func.apply(child, args);
- return Object(result) === result ? result : child;
- })(Color, slice.call(arguments).concat(['hex']), function(){});
- };
-
- Color.prototype.hex = function(mode) {
- if (mode == null) {
- mode = 'rgb';
- }
- return rgb2hex(this._rgb, mode);
- };
-
- _guess_formats.push({
- p: 10,
- test: function(n) {
- if (arguments.length === 1 && type(n) === "string") {
- return 'hex';
- }
- }
- });
-
- hsl2rgb = function() {
- var args, b, c, g, h, i, l, o, r, ref, s, t1, t2, t3;
- args = unpack(arguments);
- h = args[0], s = args[1], l = args[2];
- if (s === 0) {
- r = g = b = l * 255;
- } else {
- t3 = [0, 0, 0];
- c = [0, 0, 0];
- t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;
- t1 = 2 * l - t2;
- h /= 360;
- t3[0] = h + 1 / 3;
- t3[1] = h;
- t3[2] = h - 1 / 3;
- for (i = o = 0; o <= 2; i = ++o) {
- if (t3[i] < 0) {
- t3[i] += 1;
- }
- if (t3[i] > 1) {
- t3[i] -= 1;
- }
- if (6 * t3[i] < 1) {
- c[i] = t1 + (t2 - t1) * 6 * t3[i];
- } else if (2 * t3[i] < 1) {
- c[i] = t2;
- } else if (3 * t3[i] < 2) {
- c[i] = t1 + (t2 - t1) * ((2 / 3) - t3[i]) * 6;
- } else {
- c[i] = t1;
- }
- }
- ref = [round(c[0] * 255), round(c[1] * 255), round(c[2] * 255)], r = ref[0], g = ref[1], b = ref[2];
- }
- if (args.length > 3) {
- return [r, g, b, args[3]];
- } else {
- return [r, g, b];
- }
- };
-
- rgb2hsl = function(r, g, b) {
- var h, l, min, ref, s;
- if (r !== void 0 && r.length >= 3) {
- ref = r, r = ref[0], g = ref[1], b = ref[2];
- }
- r /= 255;
- g /= 255;
- b /= 255;
- min = Math.min(r, g, b);
- max = Math.max(r, g, b);
- l = (max + min) / 2;
- if (max === min) {
- s = 0;
- h = Number.NaN;
- } else {
- s = l < 0.5 ? (max - min) / (max + min) : (max - min) / (2 - max - min);
- }
- if (r === max) {
- h = (g - b) / (max - min);
- } else if (g === max) {
- h = 2 + (b - r) / (max - min);
- } else if (b === max) {
- h = 4 + (r - g) / (max - min);
- }
- h *= 60;
- if (h < 0) {
- h += 360;
- }
- return [h, s, l];
- };
-
- chroma.hsl = function() {
- return (function(func, args, ctor) {
- ctor.prototype = func.prototype;
- var child = new ctor, result = func.apply(child, args);
- return Object(result) === result ? result : child;
- })(Color, slice.call(arguments).concat(['hsl']), function(){});
- };
-
- _input.hsl = hsl2rgb;
-
- Color.prototype.hsl = function() {
- return rgb2hsl(this._rgb);
- };
-
- hsv2rgb = function() {
- var args, b, f, g, h, i, p, q, r, ref, ref1, ref2, ref3, ref4, ref5, s, t, v;
- args = unpack(arguments);
- h = args[0], s = args[1], v = args[2];
- v *= 255;
- if (s === 0) {
- r = g = b = v;
- } else {
- if (h === 360) {
- h = 0;
- }
- if (h > 360) {
- h -= 360;
- }
- if (h < 0) {
- h += 360;
- }
- h /= 60;
- i = floor(h);
- f = h - i;
- p = v * (1 - s);
- q = v * (1 - s * f);
- t = v * (1 - s * (1 - f));
- switch (i) {
- case 0:
- ref = [v, t, p], r = ref[0], g = ref[1], b = ref[2];
- break;
- case 1:
- ref1 = [q, v, p], r = ref1[0], g = ref1[1], b = ref1[2];
- break;
- case 2:
- ref2 = [p, v, t], r = ref2[0], g = ref2[1], b = ref2[2];
- break;
- case 3:
- ref3 = [p, q, v], r = ref3[0], g = ref3[1], b = ref3[2];
- break;
- case 4:
- ref4 = [t, p, v], r = ref4[0], g = ref4[1], b = ref4[2];
- break;
- case 5:
- ref5 = [v, p, q], r = ref5[0], g = ref5[1], b = ref5[2];
- }
- }
- r = round(r);
- g = round(g);
- b = round(b);
- return [r, g, b, args.length > 3 ? args[3] : 1];
- };
-
- rgb2hsv = function() {
- var b, delta, g, h, min, r, ref, s, v;
- ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
- min = Math.min(r, g, b);
- max = Math.max(r, g, b);
- delta = max - min;
- v = max / 255.0;
- if (max === 0) {
- h = Number.NaN;
- s = 0;
- } else {
- s = delta / max;
- if (r === max) {
- h = (g - b) / delta;
- }
- if (g === max) {
- h = 2 + (b - r) / delta;
- }
- if (b === max) {
- h = 4 + (r - g) / delta;
- }
- h *= 60;
- if (h < 0) {
- h += 360;
- }
- }
- return [h, s, v];
- };
-
- chroma.hsv = function() {
- return (function(func, args, ctor) {
- ctor.prototype = func.prototype;
- var child = new ctor, result = func.apply(child, args);
- return Object(result) === result ? result : child;
- })(Color, slice.call(arguments).concat(['hsv']), function(){});
- };
-
- _input.hsv = hsv2rgb;
-
- Color.prototype.hsv = function() {
- return rgb2hsv(this._rgb);
- };
-
- num2rgb = function(num) {
- var b, g, r;
- if (type(num) === "number" && num >= 0 && num <= 0xFFFFFF) {
- r = num >> 16;
- g = (num >> 8) & 0xFF;
- b = num & 0xFF;
- return [r, g, b, 1];
- }
- console.warn("unknown num color: " + num);
- return [0, 0, 0, 1];
- };
-
- rgb2num = function() {
- var b, g, r, ref;
- ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
- return (r << 16) + (g << 8) + b;
- };
-
- chroma.num = function(num) {
- return new Color(num, 'num');
- };
-
- Color.prototype.num = function(mode) {
- if (mode == null) {
- mode = 'rgb';
- }
- return rgb2num(this._rgb, mode);
- };
-
- _input.num = num2rgb;
-
- _guess_formats.push({
- p: 10,
- test: function(n) {
- if (arguments.length === 1 && type(n) === "number" && n >= 0 && n <= 0xFFFFFF) {
- return 'num';
- }
- }
- });
-
- css2rgb = function(css) {
- var aa, ab, hsl, i, m, o, rgb, w;
- css = css.toLowerCase();
- if ((chroma.colors != null) && chroma.colors[css]) {
- return hex2rgb(chroma.colors[css]);
- }
- if (m = css.match(/rgb\(\s*(\-?\d+),\s*(\-?\d+)\s*,\s*(\-?\d+)\s*\)/)) {
- rgb = m.slice(1, 4);
- for (i = o = 0; o <= 2; i = ++o) {
- rgb[i] = +rgb[i];
- }
- rgb[3] = 1;
- } else if (m = css.match(/rgba\(\s*(\-?\d+),\s*(\-?\d+)\s*,\s*(\-?\d+)\s*,\s*([01]|[01]?\.\d+)\)/)) {
- rgb = m.slice(1, 5);
- for (i = w = 0; w <= 3; i = ++w) {
- rgb[i] = +rgb[i];
- }
- } else if (m = css.match(/rgb\(\s*(\-?\d+(?:\.\d+)?)%,\s*(\-?\d+(?:\.\d+)?)%\s*,\s*(\-?\d+(?:\.\d+)?)%\s*\)/)) {
- rgb = m.slice(1, 4);
- for (i = aa = 0; aa <= 2; i = ++aa) {
- rgb[i] = round(rgb[i] * 2.55);
- }
- rgb[3] = 1;
- } else if (m = css.match(/rgba\(\s*(\-?\d+(?:\.\d+)?)%,\s*(\-?\d+(?:\.\d+)?)%\s*,\s*(\-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)/)) {
- rgb = m.slice(1, 5);
- for (i = ab = 0; ab <= 2; i = ++ab) {
- rgb[i] = round(rgb[i] * 2.55);
- }
- rgb[3] = +rgb[3];
- } else if (m = css.match(/hsl\(\s*(\-?\d+(?:\.\d+)?),\s*(\-?\d+(?:\.\d+)?)%\s*,\s*(\-?\d+(?:\.\d+)?)%\s*\)/)) {
- hsl = m.slice(1, 4);
- hsl[1] *= 0.01;
- hsl[2] *= 0.01;
- rgb = hsl2rgb(hsl);
- rgb[3] = 1;
- } else if (m = css.match(/hsla\(\s*(\-?\d+(?:\.\d+)?),\s*(\-?\d+(?:\.\d+)?)%\s*,\s*(\-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)/)) {
- hsl = m.slice(1, 4);
- hsl[1] *= 0.01;
- hsl[2] *= 0.01;
- rgb = hsl2rgb(hsl);
- rgb[3] = +m[4];
- }
- return rgb;
- };
-
- rgb2css = function(rgba) {
- var mode;
- mode = rgba[3] < 1 ? 'rgba' : 'rgb';
- if (mode === 'rgb') {
- return mode + '(' + rgba.slice(0, 3).map(round).join(',') + ')';
- } else if (mode === 'rgba') {
- return mode + '(' + rgba.slice(0, 3).map(round).join(',') + ',' + rgba[3] + ')';
- } else {
-
- }
- };
-
- rnd = function(a) {
- return round(a * 100) / 100;
- };
-
- hsl2css = function(hsl, alpha) {
- var mode;
- mode = alpha < 1 ? 'hsla' : 'hsl';
- hsl[0] = rnd(hsl[0] || 0);
- hsl[1] = rnd(hsl[1] * 100) + '%';
- hsl[2] = rnd(hsl[2] * 100) + '%';
- if (mode === 'hsla') {
- hsl[3] = alpha;
- }
- return mode + '(' + hsl.join(',') + ')';
- };
-
- _input.css = function(h) {
- return css2rgb(h);
- };
-
- chroma.css = function() {
- return (function(func, args, ctor) {
- ctor.prototype = func.prototype;
- var child = new ctor, result = func.apply(child, args);
- return Object(result) === result ? result : child;
- })(Color, slice.call(arguments).concat(['css']), function(){});
- };
-
- Color.prototype.css = function(mode) {
- if (mode == null) {
- mode = 'rgb';
- }
- if (mode.slice(0, 3) === 'rgb') {
- return rgb2css(this._rgb);
- } else if (mode.slice(0, 3) === 'hsl') {
- return hsl2css(this.hsl(), this.alpha());
- }
- };
-
- _input.named = function(name) {
- return hex2rgb(w3cx11[name]);
- };
-
- _guess_formats.push({
- p: 20,
- test: function(n) {
- if (arguments.length === 1 && (w3cx11[n] != null)) {
- return 'named';
- }
- }
- });
-
- Color.prototype.name = function(n) {
- var h, k;
- if (arguments.length) {
- if (w3cx11[n]) {
- this._rgb = hex2rgb(w3cx11[n]);
- }
- this._rgb[3] = 1;
- this;
- }
- h = this.hex();
- for (k in w3cx11) {
- if (h === w3cx11[k]) {
- return k;
- }
- }
- return h;
- };
-
- lch2lab = function() {
-
- /*
- Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel.
- These formulas were invented by David Dalrymple to obtain maximum contrast without going
- out of gamut if the parameters are in the range 0-1.
-
- A saturation multiplier was added by Gregor Aisch
- */
- var c, h, l, ref;
- ref = unpack(arguments), l = ref[0], c = ref[1], h = ref[2];
- h = h * DEG2RAD;
- return [l, cos(h) * c, sin(h) * c];
- };
-
- lch2rgb = function() {
- var L, a, args, b, c, g, h, l, r, ref, ref1;
- args = unpack(arguments);
- l = args[0], c = args[1], h = args[2];
- ref = lch2lab(l, c, h), L = ref[0], a = ref[1], b = ref[2];
- ref1 = lab2rgb(L, a, b), r = ref1[0], g = ref1[1], b = ref1[2];
- return [limit(r, 0, 255), limit(g, 0, 255), limit(b, 0, 255), args.length > 3 ? args[3] : 1];
- };
-
- lab2lch = function() {
- var a, b, c, h, l, ref;
- ref = unpack(arguments), l = ref[0], a = ref[1], b = ref[2];
- c = sqrt(a * a + b * b);
- h = (atan2(b, a) * RAD2DEG + 360) % 360;
- if (round(c * 10000) === 0) {
- h = Number.NaN;
- }
- return [l, c, h];
- };
-
- rgb2lch = function() {
- var a, b, g, l, r, ref, ref1;
- ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
- ref1 = rgb2lab(r, g, b), l = ref1[0], a = ref1[1], b = ref1[2];
- return lab2lch(l, a, b);
- };
-
- chroma.lch = function() {
- var args;
- args = unpack(arguments);
- return new Color(args, 'lch');
- };
-
- chroma.hcl = function() {
- var args;
- args = unpack(arguments);
- return new Color(args, 'hcl');
- };
-
- _input.lch = lch2rgb;
-
- _input.hcl = function() {
- var c, h, l, ref;
- ref = unpack(arguments), h = ref[0], c = ref[1], l = ref[2];
- return lch2rgb([l, c, h]);
- };
-
- Color.prototype.lch = function() {
- return rgb2lch(this._rgb);
- };
-
- Color.prototype.hcl = function() {
- return rgb2lch(this._rgb).reverse();
- };
-
- rgb2cmyk = function(mode) {
- var b, c, f, g, k, m, r, ref, y;
- if (mode == null) {
- mode = 'rgb';
- }
- ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
- r = r / 255;
- g = g / 255;
- b = b / 255;
- k = 1 - Math.max(r, Math.max(g, b));
- f = k < 1 ? 1 / (1 - k) : 0;
- c = (1 - r - k) * f;
- m = (1 - g - k) * f;
- y = (1 - b - k) * f;
- return [c, m, y, k];
- };
-
- cmyk2rgb = function() {
- var alpha, args, b, c, g, k, m, r, y;
- args = unpack(arguments);
- c = args[0], m = args[1], y = args[2], k = args[3];
- alpha = args.length > 4 ? args[4] : 1;
- if (k === 1) {
- return [0, 0, 0, alpha];
- }
- r = c >= 1 ? 0 : round(255 * (1 - c) * (1 - k));
- g = m >= 1 ? 0 : round(255 * (1 - m) * (1 - k));
- b = y >= 1 ? 0 : round(255 * (1 - y) * (1 - k));
- return [r, g, b, alpha];
- };
-
- _input.cmyk = function() {
- return cmyk2rgb(unpack(arguments));
- };
-
- chroma.cmyk = function() {
- return (function(func, args, ctor) {
- ctor.prototype = func.prototype;
- var child = new ctor, result = func.apply(child, args);
- return Object(result) === result ? result : child;
- })(Color, slice.call(arguments).concat(['cmyk']), function(){});
- };
-
- Color.prototype.cmyk = function() {
- return rgb2cmyk(this._rgb);
- };
-
- _input.gl = function() {
- var i, k, o, rgb, v;
- rgb = (function() {
- var ref, results;
- ref = unpack(arguments);
- results = [];
- for (k in ref) {
- v = ref[k];
- results.push(v);
- }
- return results;
- }).apply(this, arguments);
- for (i = o = 0; o <= 2; i = ++o) {
- rgb[i] *= 255;
- }
- return rgb;
- };
-
- chroma.gl = function() {
- return (function(func, args, ctor) {
- ctor.prototype = func.prototype;
- var child = new ctor, result = func.apply(child, args);
- return Object(result) === result ? result : child;
- })(Color, slice.call(arguments).concat(['gl']), function(){});
- };
-
- Color.prototype.gl = function() {
- var rgb;
- rgb = this._rgb;
- return [rgb[0] / 255, rgb[1] / 255, rgb[2] / 255, rgb[3]];
- };
-
- rgb2luminance = function(r, g, b) {
- var ref;
- ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
- r = luminance_x(r);
- g = luminance_x(g);
- b = luminance_x(b);
- return 0.2126 * r + 0.7152 * g + 0.0722 * b;
- };
-
- luminance_x = function(x) {
- x /= 255;
- if (x <= 0.03928) {
- return x / 12.92;
- } else {
- return pow((x + 0.055) / 1.055, 2.4);
- }
- };
-
- _interpolators = [];
-
- interpolate = function(col1, col2, f, m) {
- var interpol, len, o, res;
- if (f == null) {
- f = 0.5;
- }
- if (m == null) {
- m = 'rgb';
- }
-
- /*
- interpolates between colors
- f = 0 --> me
- f = 1 --> col
- */
- if (type(col1) !== 'object') {
- col1 = chroma(col1);
- }
- if (type(col2) !== 'object') {
- col2 = chroma(col2);
- }
- for (o = 0, len = _interpolators.length; o < len; o++) {
- interpol = _interpolators[o];
- if (m === interpol[0]) {
- res = interpol[1](col1, col2, f, m);
- break;
- }
- }
- if (res == null) {
- throw "color mode " + m + " is not supported";
- }
- res.alpha(col1.alpha() + f * (col2.alpha() - col1.alpha()));
- return res;
- };
-
- chroma.interpolate = interpolate;
-
- Color.prototype.interpolate = function(col2, f, m) {
- return interpolate(this, col2, f, m);
- };
-
- chroma.mix = interpolate;
-
- Color.prototype.mix = Color.prototype.interpolate;
-
- interpolate_rgb = function(col1, col2, f, m) {
- var xyz0, xyz1;
- xyz0 = col1._rgb;
- xyz1 = col2._rgb;
- return new Color(xyz0[0] + f * (xyz1[0] - xyz0[0]), xyz0[1] + f * (xyz1[1] - xyz0[1]), xyz0[2] + f * (xyz1[2] - xyz0[2]), m);
- };
-
- _interpolators.push(['rgb', interpolate_rgb]);
-
- Color.prototype.luminance = function(lum, mode) {
- var cur_lum, eps, max_iter, test;
- if (mode == null) {
- mode = 'rgb';
- }
- if (!arguments.length) {
- return rgb2luminance(this._rgb);
- }
- if (lum === 0) {
- this._rgb = [0, 0, 0, this._rgb[3]];
- } else if (lum === 1) {
- this._rgb = [255, 255, 255, this._rgb[3]];
- } else {
- eps = 1e-7;
- max_iter = 20;
- test = function(l, h) {
- var lm, m;
- m = l.interpolate(h, 0.5, mode);
- lm = m.luminance();
- if (Math.abs(lum - lm) < eps || !max_iter--) {
- return m;
- }
- if (lm > lum) {
- return test(l, m);
- }
- return test(m, h);
- };
- cur_lum = rgb2luminance(this._rgb);
- this._rgb = (cur_lum > lum ? test(chroma('black'), this) : test(this, chroma('white'))).rgba();
- }
- return this;
- };
-
- temperature2rgb = function(kelvin) {
- var b, g, r, temp;
- temp = kelvin / 100;
- if (temp < 66) {
- r = 255;
- g = -155.25485562709179 - 0.44596950469579133 * (g = temp - 2) + 104.49216199393888 * log(g);
- b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp - 10) + 115.67994401066147 * log(b);
- } else {
- r = 351.97690566805693 + 0.114206453784165 * (r = temp - 55) - 40.25366309332127 * log(r);
- g = 325.4494125711974 + 0.07943456536662342 * (g = temp - 50) - 28.0852963507957 * log(g);
- b = 255;
- }
- return clip_rgb([r, g, b]);
- };
-
- rgb2temperature = function() {
- var b, eps, g, maxTemp, minTemp, r, ref, rgb, temp;
- ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
- minTemp = 1000;
- maxTemp = 40000;
- eps = 0.4;
- while (maxTemp - minTemp > eps) {
- temp = (maxTemp + minTemp) * 0.5;
- rgb = temperature2rgb(temp);
- if ((rgb[2] / rgb[0]) >= (b / r)) {
- maxTemp = temp;
- } else {
- minTemp = temp;
- }
- }
- return round(temp);
- };
-
- chroma.temperature = chroma.kelvin = function() {
- return (function(func, args, ctor) {
- ctor.prototype = func.prototype;
- var child = new ctor, result = func.apply(child, args);
- return Object(result) === result ? result : child;
- })(Color, slice.call(arguments).concat(['temperature']), function(){});
- };
-
- _input.temperature = _input.kelvin = _input.K = temperature2rgb;
-
- Color.prototype.temperature = function() {
- return rgb2temperature(this._rgb);
- };
-
- Color.prototype.kelvin = Color.prototype.temperature;
-
- chroma.contrast = function(a, b) {
- var l1, l2, ref, ref1;
- if ((ref = type(a)) === 'string' || ref === 'number') {
- a = new Color(a);
- }
- if ((ref1 = type(b)) === 'string' || ref1 === 'number') {
- b = new Color(b);
- }
- l1 = a.luminance();
- l2 = b.luminance();
- if (l1 > l2) {
- return (l1 + 0.05) / (l2 + 0.05);
- } else {
- return (l2 + 0.05) / (l1 + 0.05);
- }
- };
-
- Color.prototype.get = function(modechan) {
- var channel, i, me, mode, ref, src;
- me = this;
- ref = modechan.split('.'), mode = ref[0], channel = ref[1];
- src = me[mode]();
- if (channel) {
- i = mode.indexOf(channel);
- if (i > -1) {
- return src[i];
- } else {
- return console.warn('unknown channel ' + channel + ' in mode ' + mode);
- }
- } else {
- return src;
- }
- };
-
- Color.prototype.set = function(modechan, value) {
- var channel, i, me, mode, ref, src;
- me = this;
- ref = modechan.split('.'), mode = ref[0], channel = ref[1];
- if (channel) {
- src = me[mode]();
- i = mode.indexOf(channel);
- if (i > -1) {
- if (type(value) === 'string') {
- switch (value.charAt(0)) {
- case '+':
- src[i] += +value;
- break;
- case '-':
- src[i] += +value;
- break;
- case '*':
- src[i] *= +(value.substr(1));
- break;
- case '/':
- src[i] /= +(value.substr(1));
- break;
- default:
- src[i] = +value;
- }
- } else {
- src[i] = value;
- }
- } else {
- console.warn('unknown channel ' + channel + ' in mode ' + mode);
- }
- } else {
- src = value;
- }
- me._rgb = chroma(src, mode).alpha(me.alpha())._rgb;
- return me;
- };
-
- Color.prototype.darken = function(amount) {
- var lab, me;
- if (amount == null) {
- amount = 1;
- }
- me = this;
- lab = me.lab();
- lab[0] -= LAB_CONSTANTS.Kn * amount;
- return chroma.lab(lab).alpha(me.alpha());
- };
-
- Color.prototype.brighten = function(amount) {
- if (amount == null) {
- amount = 1;
- }
- return this.darken(-amount);
- };
-
- Color.prototype.darker = Color.prototype.darken;
-
- Color.prototype.brighter = Color.prototype.brighten;
-
- Color.prototype.saturate = function(amount) {
- var lch, me;
- if (amount == null) {
- amount = 1;
- }
- me = this;
- lch = me.lch();
- lch[1] += amount * LAB_CONSTANTS.Kn;
- if (lch[1] < 0) {
- lch[1] = 0;
- }
- return chroma.lch(lch).alpha(me.alpha());
- };
-
- Color.prototype.desaturate = function(amount) {
- if (amount == null) {
- amount = 1;
- }
- return this.saturate(-amount);
- };
-
- Color.prototype.premultiply = function() {
- var a, rgb;
- rgb = this.rgb();
- a = this.alpha();
- return chroma(rgb[0] * a, rgb[1] * a, rgb[2] * a, a);
- };
-
- blend = function(bottom, top, mode) {
- if (!blend[mode]) {
- throw 'unknown blend mode ' + mode;
- }
- return blend[mode](bottom, top);
- };
-
- blend_f = function(f) {
- return function(bottom, top) {
- var c0, c1;
- c0 = chroma(top).rgb();
- c1 = chroma(bottom).rgb();
- return chroma(f(c0, c1), 'rgb');
- };
- };
-
- each = function(f) {
- return function(c0, c1) {
- var i, o, out;
- out = [];
- for (i = o = 0; o <= 3; i = ++o) {
- out[i] = f(c0[i], c1[i]);
- }
- return out;
- };
- };
-
- normal = function(a, b) {
- return a;
- };
-
- multiply = function(a, b) {
- return a * b / 255;
- };
-
- darken = function(a, b) {
- if (a > b) {
- return b;
- } else {
- return a;
- }
- };
-
- lighten = function(a, b) {
- if (a > b) {
- return a;
- } else {
- return b;
- }
- };
-
- screen = function(a, b) {
- return 255 * (1 - (1 - a / 255) * (1 - b / 255));
- };
-
- overlay = function(a, b) {
- if (b < 128) {
- return 2 * a * b / 255;
- } else {
- return 255 * (1 - 2 * (1 - a / 255) * (1 - b / 255));
- }
- };
-
- burn = function(a, b) {
- return 255 * (1 - (1 - b / 255) / (a / 255));
- };
-
- dodge = function(a, b) {
- if (a === 255) {
- return 255;
- }
- a = 255 * (b / 255) / (1 - a / 255);
- if (a > 255) {
- return 255;
- } else {
- return a;
- }
- };
-
- blend.normal = blend_f(each(normal));
-
- blend.multiply = blend_f(each(multiply));
-
- blend.screen = blend_f(each(screen));
-
- blend.overlay = blend_f(each(overlay));
-
- blend.darken = blend_f(each(darken));
-
- blend.lighten = blend_f(each(lighten));
-
- blend.dodge = blend_f(each(dodge));
-
- blend.burn = blend_f(each(burn));
-
- chroma.blend = blend;
-
- chroma.analyze = function(data) {
- var len, o, r, val;
- r = {
- min: Number.MAX_VALUE,
- max: Number.MAX_VALUE * -1,
- sum: 0,
- values: [],
- count: 0
- };
- for (o = 0, len = data.length; o < len; o++) {
- val = data[o];
- if ((val != null) && !isNaN(val)) {
- r.values.push(val);
- r.sum += val;
- if (val < r.min) {
- r.min = val;
- }
- if (val > r.max) {
- r.max = val;
- }
- r.count += 1;
- }
- }
- r.domain = [r.min, r.max];
- r.limits = function(mode, num) {
- return chroma.limits(r, mode, num);
- };
- return r;
- };
-
- chroma.scale = function(colors, positions) {
- var _classes, _colorCache, _colors, _correctLightness, _domain, _fixed, _max, _min, _mode, _nacol, _out, _padding, _pos, _spread, classifyValue, f, getClass, getColor, resetCache, setColors, tmap;
- _mode = 'rgb';
- _nacol = chroma('#ccc');
- _spread = 0;
- _fixed = false;
- _domain = [0, 1];
- _pos = [];
- _padding = [0, 0];
- _classes = false;
- _colors = [];
- _out = false;
- _min = 0;
- _max = 1;
- _correctLightness = false;
- _colorCache = {};
- setColors = function(colors) {
- var c, col, o, ref, ref1, ref2, w;
- if (colors == null) {
- colors = ['#fff', '#000'];
- }
- if ((colors != null) && type(colors) === 'string' && (((ref = chroma.brewer) != null ? ref[colors] : void 0) != null)) {
- colors = chroma.brewer[colors];
- }
- if (type(colors) === 'array') {
- colors = colors.slice(0);
- for (c = o = 0, ref1 = colors.length - 1; 0 <= ref1 ? o <= ref1 : o >= ref1; c = 0 <= ref1 ? ++o : --o) {
- col = colors[c];
- if (type(col) === "string") {
- colors[c] = chroma(col);
- }
- }
- _pos.length = 0;
- for (c = w = 0, ref2 = colors.length - 1; 0 <= ref2 ? w <= ref2 : w >= ref2; c = 0 <= ref2 ? ++w : --w) {
- _pos.push(c / (colors.length - 1));
- }
- }
- resetCache();
- return _colors = colors;
- };
- getClass = function(value) {
- var i, n;
- if (_classes != null) {
- n = _classes.length - 1;
- i = 0;
- while (i < n && value >= _classes[i]) {
- i++;
- }
- return i - 1;
- }
- return 0;
- };
- tmap = function(t) {
- return t;
- };
- classifyValue = function(value) {
- var i, maxc, minc, n, val;
- val = value;
- if (_classes.length > 2) {
- n = _classes.length - 1;
- i = getClass(value);
- minc = _classes[0] + (_classes[1] - _classes[0]) * (0 + _spread * 0.5);
- maxc = _classes[n - 1] + (_classes[n] - _classes[n - 1]) * (1 - _spread * 0.5);
- val = _min + ((_classes[i] + (_classes[i + 1] - _classes[i]) * 0.5 - minc) / (maxc - minc)) * (_max - _min);
- }
- return val;
- };
- getColor = function(val, bypassMap) {
- var c, col, i, k, o, p, ref, t;
- if (bypassMap == null) {
- bypassMap = false;
- }
- if (isNaN(val)) {
- return _nacol;
- }
- if (!bypassMap) {
- if (_classes && _classes.length > 2) {
- c = getClass(val);
- t = c / (_classes.length - 2);
- t = _padding[0] + (t * (1 - _padding[0] - _padding[1]));
- } else if (_max !== _min) {
- t = (val - _min) / (_max - _min);
- t = _padding[0] + (t * (1 - _padding[0] - _padding[1]));
- t = Math.min(1, Math.max(0, t));
- } else {
- t = 1;
- }
- } else {
- t = val;
- }
- if (!bypassMap) {
- t = tmap(t);
- }
- k = Math.floor(t * 10000);
- if (_colorCache[k]) {
- col = _colorCache[k];
- } else {
- if (type(_colors) === 'array') {
- for (i = o = 0, ref = _pos.length - 1; 0 <= ref ? o <= ref : o >= ref; i = 0 <= ref ? ++o : --o) {
- p = _pos[i];
- if (t <= p) {
- col = _colors[i];
- break;
- }
- if (t >= p && i === _pos.length - 1) {
- col = _colors[i];
- break;
- }
- if (t > p && t < _pos[i + 1]) {
- t = (t - p) / (_pos[i + 1] - p);
- col = chroma.interpolate(_colors[i], _colors[i + 1], t, _mode);
- break;
- }
- }
- } else if (type(_colors) === 'function') {
- col = _colors(t);
- }
- _colorCache[k] = col;
- }
- return col;
- };
- resetCache = function() {
- return _colorCache = {};
- };
- setColors(colors);
- f = function(v) {
- var c;
- c = chroma(getColor(v));
- if (_out && c[_out]) {
- return c[_out]();
- } else {
- return c;
- }
- };
- f.classes = function(classes) {
- var d;
- if (classes != null) {
- if (type(classes) === 'array') {
- _classes = classes;
- _domain = [classes[0], classes[classes.length - 1]];
- } else {
- d = chroma.analyze(_domain);
- if (classes === 0) {
- _classes = [d.min, d.max];
- } else {
- _classes = chroma.limits(d, 'e', classes);
- }
- }
- return f;
- }
- return _classes;
- };
- f.domain = function(domain) {
- var c, d, k, len, o, ref, w;
- if (!arguments.length) {
- return _domain;
- }
- _min = domain[0];
- _max = domain[domain.length - 1];
- _pos = [];
- k = _colors.length;
- if (domain.length === k && _min !== _max) {
- for (o = 0, len = domain.length; o < len; o++) {
- d = domain[o];
- _pos.push((d - _min) / (_max - _min));
- }
- } else {
- for (c = w = 0, ref = k - 1; 0 <= ref ? w <= ref : w >= ref; c = 0 <= ref ? ++w : --w) {
- _pos.push(c / (k - 1));
- }
- }
- _domain = [_min, _max];
- return f;
- };
- f.mode = function(_m) {
- if (!arguments.length) {
- return _mode;
- }
- _mode = _m;
- resetCache();
- return f;
- };
- f.range = function(colors, _pos) {
- setColors(colors, _pos);
- return f;
- };
- f.out = function(_o) {
- _out = _o;
- return f;
- };
- f.spread = function(val) {
- if (!arguments.length) {
- return _spread;
- }
- _spread = val;
- return f;
- };
- f.correctLightness = function(v) {
- if (v == null) {
- v = true;
- }
- _correctLightness = v;
- resetCache();
- if (_correctLightness) {
- tmap = function(t) {
- var L0, L1, L_actual, L_diff, L_ideal, max_iter, pol, t0, t1;
- L0 = getColor(0, true).lab()[0];
- L1 = getColor(1, true).lab()[0];
- pol = L0 > L1;
- L_actual = getColor(t, true).lab()[0];
- L_ideal = L0 + (L1 - L0) * t;
- L_diff = L_actual - L_ideal;
- t0 = 0;
- t1 = 1;
- max_iter = 20;
- while (Math.abs(L_diff) > 1e-2 && max_iter-- > 0) {
- (function() {
- if (pol) {
- L_diff *= -1;
- }
- if (L_diff < 0) {
- t0 = t;
- t += (t1 - t) * 0.5;
- } else {
- t1 = t;
- t += (t0 - t) * 0.5;
- }
- L_actual = getColor(t, true).lab()[0];
- return L_diff = L_actual - L_ideal;
- })();
- }
- return t;
- };
- } else {
- tmap = function(t) {
- return t;
- };
- }
- return f;
- };
- f.padding = function(p) {
- if (p != null) {
- if (type(p) === 'number') {
- p = [p, p];
- }
- _padding = p;
- return f;
- } else {
- return _padding;
- }
- };
- f.colors = function() {
- var dd, dm, i, numColors, o, out, ref, results, samples, w;
- numColors = 0;
- out = 'hex';
- if (arguments.length === 1) {
- if (type(arguments[0]) === 'string') {
- out = arguments[0];
- } else {
- numColors = arguments[0];
- }
- }
- if (arguments.length === 2) {
- numColors = arguments[0], out = arguments[1];
- }
- if (numColors) {
- dm = _domain[0];
- dd = _domain[1] - dm;
- return (function() {
- results = [];
- for (var o = 0; 0 <= numColors ? o < numColors : o > numColors; 0 <= numColors ? o++ : o--){ results.push(o); }
- return results;
- }).apply(this).map(function(i) {
- return f(dm + i / (numColors - 1) * dd)[out]();
- });
- }
- colors = [];
- samples = [];
- if (_classes && _classes.length > 2) {
- for (i = w = 1, ref = _classes.length; 1 <= ref ? w < ref : w > ref; i = 1 <= ref ? ++w : --w) {
- samples.push((_classes[i - 1] + _classes[i]) * 0.5);
- }
- } else {
- samples = _domain;
- }
- return samples.map(function(v) {
- return f(v)[out]();
- });
- };
- return f;
- };
-
- if (chroma.scales == null) {
- chroma.scales = {};
- }
-
- chroma.scales.cool = function() {
- return chroma.scale([chroma.hsl(180, 1, .9), chroma.hsl(250, .7, .4)]);
- };
-
- chroma.scales.hot = function() {
- return chroma.scale(['#000', '#f00', '#ff0', '#fff'], [0, .25, .75, 1]).mode('rgb');
- };
-
- chroma.analyze = function(data, key, filter) {
- var add, k, len, o, r, val, visit;
- r = {
- min: Number.MAX_VALUE,
- max: Number.MAX_VALUE * -1,
- sum: 0,
- values: [],
- count: 0
- };
- if (filter == null) {
- filter = function() {
- return true;
- };
- }
- add = function(val) {
- if ((val != null) && !isNaN(val)) {
- r.values.push(val);
- r.sum += val;
- if (val < r.min) {
- r.min = val;
- }
- if (val > r.max) {
- r.max = val;
- }
- r.count += 1;
- }
- };
- visit = function(val, k) {
- if (filter(val, k)) {
- if ((key != null) && type(key) === 'function') {
- return add(key(val));
- } else if ((key != null) && type(key) === 'string' || type(key) === 'number') {
- return add(val[key]);
- } else {
- return add(val);
- }
- }
- };
- if (type(data) === 'array') {
- for (o = 0, len = data.length; o < len; o++) {
- val = data[o];
- visit(val);
- }
- } else {
- for (k in data) {
- val = data[k];
- visit(val, k);
- }
- }
- r.domain = [r.min, r.max];
- r.limits = function(mode, num) {
- return chroma.limits(r, mode, num);
- };
- return r;
- };
-
- chroma.limits = function(data, mode, num) {
- var aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, assignments, best, centroids, cluster, clusterSizes, dist, i, j, kClusters, limits, max_log, min, min_log, mindist, n, nb_iters, newCentroids, o, p, pb, pr, ref, ref1, ref10, ref11, ref12, ref13, ref14, ref2, ref3, ref4, ref5, ref6, ref7, ref8, ref9, repeat, sum, tmpKMeansBreaks, value, values, w;
- if (mode == null) {
- mode = 'equal';
- }
- if (num == null) {
- num = 7;
- }
- if (type(data) === 'array') {
- data = chroma.analyze(data);
- }
- min = data.min;
- max = data.max;
- sum = data.sum;
- values = data.values.sort(function(a, b) {
- return a - b;
- });
- limits = [];
- if (mode.substr(0, 1) === 'c') {
- limits.push(min);
- limits.push(max);
- }
- if (mode.substr(0, 1) === 'e') {
- limits.push(min);
- for (i = o = 1, ref = num - 1; 1 <= ref ? o <= ref : o >= ref; i = 1 <= ref ? ++o : --o) {
- limits.push(min + (i / num) * (max - min));
- }
- limits.push(max);
- } else if (mode.substr(0, 1) === 'l') {
- if (min <= 0) {
- throw 'Logarithmic scales are only possible for values > 0';
- }
- min_log = Math.LOG10E * log(min);
- max_log = Math.LOG10E * log(max);
- limits.push(min);
- for (i = w = 1, ref1 = num - 1; 1 <= ref1 ? w <= ref1 : w >= ref1; i = 1 <= ref1 ? ++w : --w) {
- limits.push(pow(10, min_log + (i / num) * (max_log - min_log)));
- }
- limits.push(max);
- } else if (mode.substr(0, 1) === 'q') {
- limits.push(min);
- for (i = aa = 1, ref2 = num - 1; 1 <= ref2 ? aa <= ref2 : aa >= ref2; i = 1 <= ref2 ? ++aa : --aa) {
- p = values.length * i / num;
- pb = floor(p);
- if (pb === p) {
- limits.push(values[pb]);
- } else {
- pr = p - pb;
- limits.push(values[pb] * pr + values[pb + 1] * (1 - pr));
- }
- }
- limits.push(max);
- } else if (mode.substr(0, 1) === 'k') {
-
- /*
- implementation based on
- http://code.google.com/p/figue/source/browse/trunk/figue.js#336
- simplified for 1-d input values
- */
- n = values.length;
- assignments = new Array(n);
- clusterSizes = new Array(num);
- repeat = true;
- nb_iters = 0;
- centroids = null;
- centroids = [];
- centroids.push(min);
- for (i = ab = 1, ref3 = num - 1; 1 <= ref3 ? ab <= ref3 : ab >= ref3; i = 1 <= ref3 ? ++ab : --ab) {
- centroids.push(min + (i / num) * (max - min));
- }
- centroids.push(max);
- while (repeat) {
- for (j = ac = 0, ref4 = num - 1; 0 <= ref4 ? ac <= ref4 : ac >= ref4; j = 0 <= ref4 ? ++ac : --ac) {
- clusterSizes[j] = 0;
- }
- for (i = ad = 0, ref5 = n - 1; 0 <= ref5 ? ad <= ref5 : ad >= ref5; i = 0 <= ref5 ? ++ad : --ad) {
- value = values[i];
- mindist = Number.MAX_VALUE;
- for (j = ae = 0, ref6 = num - 1; 0 <= ref6 ? ae <= ref6 : ae >= ref6; j = 0 <= ref6 ? ++ae : --ae) {
- dist = abs(centroids[j] - value);
- if (dist < mindist) {
- mindist = dist;
- best = j;
- }
- }
- clusterSizes[best]++;
- assignments[i] = best;
- }
- newCentroids = new Array(num);
- for (j = af = 0, ref7 = num - 1; 0 <= ref7 ? af <= ref7 : af >= ref7; j = 0 <= ref7 ? ++af : --af) {
- newCentroids[j] = null;
- }
- for (i = ag = 0, ref8 = n - 1; 0 <= ref8 ? ag <= ref8 : ag >= ref8; i = 0 <= ref8 ? ++ag : --ag) {
- cluster = assignments[i];
- if (newCentroids[cluster] === null) {
- newCentroids[cluster] = values[i];
- } else {
- newCentroids[cluster] += values[i];
- }
- }
- for (j = ah = 0, ref9 = num - 1; 0 <= ref9 ? ah <= ref9 : ah >= ref9; j = 0 <= ref9 ? ++ah : --ah) {
- newCentroids[j] *= 1 / clusterSizes[j];
- }
- repeat = false;
- for (j = ai = 0, ref10 = num - 1; 0 <= ref10 ? ai <= ref10 : ai >= ref10; j = 0 <= ref10 ? ++ai : --ai) {
- if (newCentroids[j] !== centroids[i]) {
- repeat = true;
- break;
- }
- }
- centroids = newCentroids;
- nb_iters++;
- if (nb_iters > 200) {
- repeat = false;
- }
- }
- kClusters = {};
- for (j = aj = 0, ref11 = num - 1; 0 <= ref11 ? aj <= ref11 : aj >= ref11; j = 0 <= ref11 ? ++aj : --aj) {
- kClusters[j] = [];
- }
- for (i = ak = 0, ref12 = n - 1; 0 <= ref12 ? ak <= ref12 : ak >= ref12; i = 0 <= ref12 ? ++ak : --ak) {
- cluster = assignments[i];
- kClusters[cluster].push(values[i]);
- }
- tmpKMeansBreaks = [];
- for (j = al = 0, ref13 = num - 1; 0 <= ref13 ? al <= ref13 : al >= ref13; j = 0 <= ref13 ? ++al : --al) {
- tmpKMeansBreaks.push(kClusters[j][0]);
- tmpKMeansBreaks.push(kClusters[j][kClusters[j].length - 1]);
- }
- tmpKMeansBreaks = tmpKMeansBreaks.sort(function(a, b) {
- return a - b;
- });
- limits.push(tmpKMeansBreaks[0]);
- for (i = am = 1, ref14 = tmpKMeansBreaks.length - 1; am <= ref14; i = am += 2) {
- if (!isNaN(tmpKMeansBreaks[i])) {
- limits.push(tmpKMeansBreaks[i]);
- }
- }
- }
- return limits;
- };
-
- hsi2rgb = function(h, s, i) {
-
- /*
- borrowed from here:
- http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/hsi2rgb.cpp
- */
- var args, b, g, r;
- args = unpack(arguments);
- h = args[0], s = args[1], i = args[2];
- h /= 360;
- if (h < 1 / 3) {
- b = (1 - s) / 3;
- r = (1 + s * cos(TWOPI * h) / cos(PITHIRD - TWOPI * h)) / 3;
- g = 1 - (b + r);
- } else if (h < 2 / 3) {
- h -= 1 / 3;
- r = (1 - s) / 3;
- g = (1 + s * cos(TWOPI * h) / cos(PITHIRD - TWOPI * h)) / 3;
- b = 1 - (r + g);
- } else {
- h -= 2 / 3;
- g = (1 - s) / 3;
- b = (1 + s * cos(TWOPI * h) / cos(PITHIRD - TWOPI * h)) / 3;
- r = 1 - (g + b);
- }
- r = limit(i * r * 3);
- g = limit(i * g * 3);
- b = limit(i * b * 3);
- return [r * 255, g * 255, b * 255, args.length > 3 ? args[3] : 1];
- };
-
- rgb2hsi = function() {
-
- /*
- borrowed from here:
- http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/rgb2hsi.cpp
- */
- var b, g, h, i, min, r, ref, s;
- ref = unpack(arguments), r = ref[0], g = ref[1], b = ref[2];
- TWOPI = Math.PI * 2;
- r /= 255;
- g /= 255;
- b /= 255;
- min = Math.min(r, g, b);
- i = (r + g + b) / 3;
- s = 1 - min / i;
- if (s === 0) {
- h = 0;
- } else {
- h = ((r - g) + (r - b)) / 2;
- h /= Math.sqrt((r - g) * (r - g) + (r - b) * (g - b));
- h = Math.acos(h);
- if (b > g) {
- h = TWOPI - h;
- }
- h /= TWOPI;
- }
- return [h * 360, s, i];
- };
-
- chroma.hsi = function() {
- return (function(func, args, ctor) {
- ctor.prototype = func.prototype;
- var child = new ctor, result = func.apply(child, args);
- return Object(result) === result ? result : child;
- })(Color, slice.call(arguments).concat(['hsi']), function(){});
- };
-
- _input.hsi = hsi2rgb;
-
- Color.prototype.hsi = function() {
- return rgb2hsi(this._rgb);
- };
-
- interpolate_hsx = function(col1, col2, f, m) {
- var dh, hue, hue0, hue1, lbv, lbv0, lbv1, res, sat, sat0, sat1, xyz0, xyz1;
- if (m === 'hsl') {
- xyz0 = col1.hsl();
- xyz1 = col2.hsl();
- } else if (m === 'hsv') {
- xyz0 = col1.hsv();
- xyz1 = col2.hsv();
- } else if (m === 'hsi') {
- xyz0 = col1.hsi();
- xyz1 = col2.hsi();
- } else if (m === 'lch' || m === 'hcl') {
- m = 'hcl';
- xyz0 = col1.hcl();
- xyz1 = col2.hcl();
- }
- if (m.substr(0, 1) === 'h') {
- hue0 = xyz0[0], sat0 = xyz0[1], lbv0 = xyz0[2];
- hue1 = xyz1[0], sat1 = xyz1[1], lbv1 = xyz1[2];
- }
- if (!isNaN(hue0) && !isNaN(hue1)) {
- if (hue1 > hue0 && hue1 - hue0 > 180) {
- dh = hue1 - (hue0 + 360);
- } else if (hue1 < hue0 && hue0 - hue1 > 180) {
- dh = hue1 + 360 - hue0;
- } else {
- dh = hue1 - hue0;
- }
- hue = hue0 + f * dh;
- } else if (!isNaN(hue0)) {
- hue = hue0;
- if ((lbv1 === 1 || lbv1 === 0) && m !== 'hsv') {
- sat = sat0;
- }
- } else if (!isNaN(hue1)) {
- hue = hue1;
- if ((lbv0 === 1 || lbv0 === 0) && m !== 'hsv') {
- sat = sat1;
- }
- } else {
- hue = Number.NaN;
- }
- if (sat == null) {
- sat = sat0 + f * (sat1 - sat0);
- }
- lbv = lbv0 + f * (lbv1 - lbv0);
- return res = chroma[m](hue, sat, lbv);
- };
-
- _interpolators = _interpolators.concat((function() {
- var len, o, ref, results;
- ref = ['hsv', 'hsl', 'hsi', 'hcl', 'lch'];
- results = [];
- for (o = 0, len = ref.length; o < len; o++) {
- m = ref[o];
- results.push([m, interpolate_hsx]);
- }
- return results;
- })());
-
- interpolate_num = function(col1, col2, f, m) {
- var n1, n2;
- n1 = col1.num();
- n2 = col2.num();
- return chroma.num(n1 + (n2 - n1) * f, 'num');
- };
-
- _interpolators.push(['num', interpolate_num]);
-
- interpolate_lab = function(col1, col2, f, m) {
- var res, xyz0, xyz1;
- xyz0 = col1.lab();
- xyz1 = col2.lab();
- return res = new Color(xyz0[0] + f * (xyz1[0] - xyz0[0]), xyz0[1] + f * (xyz1[1] - xyz0[1]), xyz0[2] + f * (xyz1[2] - xyz0[2]), m);
- };
-
- _interpolators.push(['lab', interpolate_lab]);
-
-}).call(this); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/js_external/d3-tip.min.js b/wqflask/wqflask/static/new/js_external/d3-tip.min.js
deleted file mode 100644
index d881b1dc..00000000
--- a/wqflask/wqflask/static/new/js_external/d3-tip.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(t,e){"function"==typeof define&&define.amd?define(["d3"],e):t.d3.tip=e(t.d3)}(this,function(t){return function(){function e(t){w=m(t),T=w.createSVGPoint(),document.body.appendChild(v)}function n(){return"n"}function r(){return[0,0]}function o(){return" "}function l(){var t=d();return{top:t.n.y-v.offsetHeight,left:t.n.x-v.offsetWidth/2}}function s(){var t=d();return{top:t.s.y,left:t.s.x-v.offsetWidth/2}}function f(){var t=d();return{top:t.e.y-v.offsetHeight/2,left:t.e.x}}function i(){var t=d();return{top:t.w.y-v.offsetHeight/2,left:t.w.x-v.offsetWidth}}function u(){var t=d();return{top:t.nw.y-v.offsetHeight,left:t.nw.x-v.offsetWidth}}function a(){var t=d();return{top:t.ne.y-v.offsetHeight,left:t.ne.x}}function c(){var t=d();return{top:t.sw.y,left:t.sw.x-v.offsetWidth}}function p(){var t=d();return{top:t.se.y,left:t.e.x}}function y(){var e=t.select(document.createElement("div"));return e.style({position:"absolute",top:0,opacity:0,"pointer-events":"none","box-sizing":"border-box"}),e.node()}function m(t){return t=t.node(),"svg"==t.tagName.toLowerCase()?t:t.ownerSVGElement}function d(){var e=b||t.event.target,n={},r=e.getScreenCTM(),o=e.getBBox(),l=o.width,s=o.height,f=o.x,i=o.y;return T.x=f,T.y=i,n.nw=T.matrixTransform(r),T.x+=l,n.ne=T.matrixTransform(r),T.y+=s,n.se=T.matrixTransform(r),T.x-=l,n.sw=T.matrixTransform(r),T.y-=s/2,n.w=T.matrixTransform(r),T.x+=l,n.e=T.matrixTransform(r),T.x-=l/2,T.y-=s/2,n.n=T.matrixTransform(r),T.y+=s,n.s=T.matrixTransform(r),n}var g=n,h=r,x=o,v=y(),w=null,T=null,b=null;e.show=function(){var n=Array.prototype.slice.call(arguments);n[n.length-1]instanceof SVGElement&&(b=n.pop());var r,o=x.apply(this,n),l=h.apply(this,n),s=g.apply(this,n),f=t.select(v),i=H.length,u=document.documentElement.scrollTop||document.body.scrollTop,a=document.documentElement.scrollLeft||document.body.scrollLeft;for(f.html(o).style({opacity:1,"pointer-events":"all"});i--;)f.classed(H[i],!1);return r=E.get(s).apply(this),f.classed(s,!0).style({top:r.top+l[0]+u+"px",left:r.left+l[1]+a+"px"}),e},e.hide=function(){return nodel=t.select(v),nodel.style({opacity:0,"pointer-events":"none"}),e},e.attr=function(n){if(arguments.length<2&&"string"==typeof n)return t.select(v).attr(n);var r=Array.prototype.slice.call(arguments);return t.selection.prototype.attr.apply(t.select(v),r),e},e.style=function(n){if(arguments.length<2&&"string"==typeof n)return t.select(v).style(n);var r=Array.prototype.slice.call(arguments);return t.selection.prototype.style.apply(t.select(v),r),e},e.direction=function(n){return arguments.length?(g=null==n?n:t.functor(n),e):g},e.offset=function(n){return arguments.length?(h=null==n?n:t.functor(n),e):h},e.html=function(n){return arguments.length?(x=null==n?n:t.functor(n),e):x};var E=t.map({n:l,s:s,e:f,w:i,nw:u,ne:a,sw:c,se:p}),H=E.keys();return e}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/js_external/jquery.cookie.js b/wqflask/wqflask/static/new/js_external/jquery.cookie.js
deleted file mode 100644
index 2d4c05a8..00000000
--- a/wqflask/wqflask/static/new/js_external/jquery.cookie.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*!
- * jQuery Cookie Plugin v1.3
- * https://github.com/carhartl/jquery-cookie
- *
- * Copyright 2011, Klaus Hartl
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.opensource.org/licenses/GPL-2.0
- */
-(function ($, document, undefined) {
-
- var pluses = /\+/g;
-
- function raw(s) {
- return s;
- }
-
- function decoded(s) {
- return decodeURIComponent(s.replace(pluses, ' '));
- }
-
- var config = $.cookie = function (key, value, options) {
-
- // write
- if (value !== undefined) {
- options = $.extend({}, config.defaults, options);
-
- if (value === null) {
- options.expires = -1;
- }
-
- if (typeof options.expires === 'number') {
- var days = options.expires, t = options.expires = new Date();
- t.setDate(t.getDate() + days);
- }
-
- value = config.json ? JSON.stringify(value) : String(value);
-
- return (document.cookie = [
- encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value),
- options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
- options.path ? '; path=' + options.path : '',
- options.domain ? '; domain=' + options.domain : '',
- options.secure ? '; secure' : ''
- ].join(''));
- }
-
- // read
- var decode = config.raw ? raw : decoded;
- var cookies = document.cookie.split('; ');
- for (var i = 0, l = cookies.length; i < l; i++) {
- var parts = cookies[i].split('=');
- if (decode(parts.shift()) === key) {
- var cookie = decode(parts.join('='));
- return config.json ? JSON.parse(cookie) : cookie;
- }
- }
-
- return null;
- };
-
- config.defaults = {};
-
- $.removeCookie = function (key, options) {
- if ($.cookie(key) !== null) {
- $.cookie(key, null, options);
- return true;
- }
- return false;
- };
-
-})(jQuery, document);
diff --git a/wqflask/wqflask/static/new/js_external/jscolor.js b/wqflask/wqflask/static/new/js_external/jscolor.js
deleted file mode 100644
index 5c77177d..00000000
--- a/wqflask/wqflask/static/new/js_external/jscolor.js
+++ /dev/null
@@ -1,1855 +0,0 @@
-/**
- * jscolor - JavaScript Color Picker
- *
- * @link http://jscolor.com
- * @license For open source use: GPLv3
- * For commercial use: JSColor Commercial License
- * @author Jan Odvarko
- * @version 2.0.5
- *
- * See usage examples at http://jscolor.com/examples/
- */
-
-
-"use strict";
-
-
-if (!window.jscolor) { window.jscolor = (function () {
-
-
-var jsc = {
-
-
- register : function () {
- jsc.attachDOMReadyEvent(jsc.init);
- jsc.attachEvent(document, 'mousedown', jsc.onDocumentMouseDown);
- jsc.attachEvent(document, 'touchstart', jsc.onDocumentTouchStart);
- jsc.attachEvent(window, 'resize', jsc.onWindowResize);
- },
-
-
- init : function () {
- if (jsc.jscolor.lookupClass) {
- jsc.jscolor.installByClassName(jsc.jscolor.lookupClass);
- }
- },
-
-
- tryInstallOnElements : function (elms, className) {
- var matchClass = new RegExp('(^|\\s)(' + className + ')(\\s*(\\{[^}]*\\})|\\s|$)', 'i');
-
- for (var i = 0; i < elms.length; i += 1) {
- if (elms[i].type !== undefined && elms[i].type.toLowerCase() == 'color') {
- if (jsc.isColorAttrSupported) {
- // skip inputs of type 'color' if supported by the browser
- continue;
- }
- }
- var m;
- if (!elms[i].jscolor && elms[i].className && (m = elms[i].className.match(matchClass))) {
- var targetElm = elms[i];
- var optsStr = null;
-
- var dataOptions = jsc.getDataAttr(targetElm, 'jscolor');
- if (dataOptions !== null) {
- optsStr = dataOptions;
- } else if (m[4]) {
- optsStr = m[4];
- }
-
- var opts = {};
- if (optsStr) {
- try {
- opts = (new Function ('return (' + optsStr + ')'))();
- } catch(eParseError) {
- jsc.warn('Error parsing jscolor options: ' + eParseError + ':\n' + optsStr);
- }
- }
- targetElm.jscolor = new jsc.jscolor(targetElm, opts);
- }
- }
- },
-
-
- isColorAttrSupported : (function () {
- var elm = document.createElement('input');
- if (elm.setAttribute) {
- elm.setAttribute('type', 'color');
- if (elm.type.toLowerCase() == 'color') {
- return true;
- }
- }
- return false;
- })(),
-
-
- isCanvasSupported : (function () {
- var elm = document.createElement('canvas');
- return !!(elm.getContext && elm.getContext('2d'));
- })(),
-
-
- fetchElement : function (mixed) {
- return typeof mixed === 'string' ? document.getElementById(mixed) : mixed;
- },
-
-
- isElementType : function (elm, type) {
- return elm.nodeName.toLowerCase() === type.toLowerCase();
- },
-
-
- getDataAttr : function (el, name) {
- var attrName = 'data-' + name;
- var attrValue = el.getAttribute(attrName);
- if (attrValue !== null) {
- return attrValue;
- }
- return null;
- },
-
-
- attachEvent : function (el, evnt, func) {
- if (el.addEventListener) {
- el.addEventListener(evnt, func, false);
- } else if (el.attachEvent) {
- el.attachEvent('on' + evnt, func);
- }
- },
-
-
- detachEvent : function (el, evnt, func) {
- if (el.removeEventListener) {
- el.removeEventListener(evnt, func, false);
- } else if (el.detachEvent) {
- el.detachEvent('on' + evnt, func);
- }
- },
-
-
- _attachedGroupEvents : {},
-
-
- attachGroupEvent : function (groupName, el, evnt, func) {
- if (!jsc._attachedGroupEvents.hasOwnProperty(groupName)) {
- jsc._attachedGroupEvents[groupName] = [];
- }
- jsc._attachedGroupEvents[groupName].push([el, evnt, func]);
- jsc.attachEvent(el, evnt, func);
- },
-
-
- detachGroupEvents : function (groupName) {
- if (jsc._attachedGroupEvents.hasOwnProperty(groupName)) {
- for (var i = 0; i < jsc._attachedGroupEvents[groupName].length; i += 1) {
- var evt = jsc._attachedGroupEvents[groupName][i];
- jsc.detachEvent(evt[0], evt[1], evt[2]);
- }
- delete jsc._attachedGroupEvents[groupName];
- }
- },
-
-
- attachDOMReadyEvent : function (func) {
- var fired = false;
- var fireOnce = function () {
- if (!fired) {
- fired = true;
- func();
- }
- };
-
- if (document.readyState === 'complete') {
- setTimeout(fireOnce, 1); // async
- return;
- }
-
- if (document.addEventListener) {
- document.addEventListener('DOMContentLoaded', fireOnce, false);
-
- // Fallback
- window.addEventListener('load', fireOnce, false);
-
- } else if (document.attachEvent) {
- // IE
- document.attachEvent('onreadystatechange', function () {
- if (document.readyState === 'complete') {
- document.detachEvent('onreadystatechange', arguments.callee);
- fireOnce();
- }
- })
-
- // Fallback
- window.attachEvent('onload', fireOnce);
-
- // IE7/8
- if (document.documentElement.doScroll && window == window.top) {
- var tryScroll = function () {
- if (!document.body) { return; }
- try {
- document.documentElement.doScroll('left');
- fireOnce();
- } catch (e) {
- setTimeout(tryScroll, 1);
- }
- };
- tryScroll();
- }
- }
- },
-
-
- warn : function (msg) {
- if (window.console && window.console.warn) {
- window.console.warn(msg);
- }
- },
-
-
- preventDefault : function (e) {
- if (e.preventDefault) { e.preventDefault(); }
- e.returnValue = false;
- },
-
-
- captureTarget : function (target) {
- // IE
- if (target.setCapture) {
- jsc._capturedTarget = target;
- jsc._capturedTarget.setCapture();
- }
- },
-
-
- releaseTarget : function () {
- // IE
- if (jsc._capturedTarget) {
- jsc._capturedTarget.releaseCapture();
- jsc._capturedTarget = null;
- }
- },
-
-
- fireEvent : function (el, evnt) {
- if (!el) {
- return;
- }
- if (document.createEvent) {
- var ev = document.createEvent('HTMLEvents');
- ev.initEvent(evnt, true, true);
- el.dispatchEvent(ev);
- } else if (document.createEventObject) {
- var ev = document.createEventObject();
- el.fireEvent('on' + evnt, ev);
- } else if (el['on' + evnt]) { // alternatively use the traditional event model
- el['on' + evnt]();
- }
- },
-
-
- classNameToList : function (className) {
- return className.replace(/^\s+|\s+$/g, '').split(/\s+/);
- },
-
-
- // The className parameter (str) can only contain a single class name
- hasClass : function (elm, className) {
- if (!className) {
- return false;
- }
- return -1 != (' ' + elm.className.replace(/\s+/g, ' ') + ' ').indexOf(' ' + className + ' ');
- },
-
-
- // The className parameter (str) can contain multiple class names separated by whitespace
- setClass : function (elm, className) {
- var classList = jsc.classNameToList(className);
- for (var i = 0; i < classList.length; i += 1) {
- if (!jsc.hasClass(elm, classList[i])) {
- elm.className += (elm.className ? ' ' : '') + classList[i];
- }
- }
- },
-
-
- // The className parameter (str) can contain multiple class names separated by whitespace
- unsetClass : function (elm, className) {
- var classList = jsc.classNameToList(className);
- for (var i = 0; i < classList.length; i += 1) {
- var repl = new RegExp(
- '^\\s*' + classList[i] + '\\s*|' +
- '\\s*' + classList[i] + '\\s*$|' +
- '\\s+' + classList[i] + '(\\s+)',
- 'g'
- );
- elm.className = elm.className.replace(repl, '$1');
- }
- },
-
-
- getStyle : function (elm) {
- return window.getComputedStyle ? window.getComputedStyle(elm) : elm.currentStyle;
- },
-
-
- setStyle : (function () {
- var helper = document.createElement('div');
- var getSupportedProp = function (names) {
- for (var i = 0; i < names.length; i += 1) {
- if (names[i] in helper.style) {
- return names[i];
- }
- }
- };
- var props = {
- borderRadius: getSupportedProp(['borderRadius', 'MozBorderRadius', 'webkitBorderRadius']),
- boxShadow: getSupportedProp(['boxShadow', 'MozBoxShadow', 'webkitBoxShadow'])
- };
- return function (elm, prop, value) {
- switch (prop.toLowerCase()) {
- case 'opacity':
- var alphaOpacity = Math.round(parseFloat(value) * 100);
- elm.style.opacity = value;
- elm.style.filter = 'alpha(opacity=' + alphaOpacity + ')';
- break;
- default:
- elm.style[props[prop]] = value;
- break;
- }
- };
- })(),
-
-
- setBorderRadius : function (elm, value) {
- jsc.setStyle(elm, 'borderRadius', value || '0');
- },
-
-
- setBoxShadow : function (elm, value) {
- jsc.setStyle(elm, 'boxShadow', value || 'none');
- },
-
-
- getElementPos : function (e, relativeToViewport) {
- var x=0, y=0;
- var rect = e.getBoundingClientRect();
- x = rect.left;
- y = rect.top;
- if (!relativeToViewport) {
- var viewPos = jsc.getViewPos();
- x += viewPos[0];
- y += viewPos[1];
- }
- return [x, y];
- },
-
-
- getElementSize : function (e) {
- return [e.offsetWidth, e.offsetHeight];
- },
-
-
- // get pointer's X/Y coordinates relative to viewport
- getAbsPointerPos : function (e) {
- if (!e) { e = window.event; }
- var x = 0, y = 0;
- if (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) {
- // touch devices
- x = e.changedTouches[0].clientX;
- y = e.changedTouches[0].clientY;
- } else if (typeof e.clientX === 'number') {
- x = e.clientX;
- y = e.clientY;
- }
- return { x: x, y: y };
- },
-
-
- // get pointer's X/Y coordinates relative to target element
- getRelPointerPos : function (e) {
- if (!e) { e = window.event; }
- var target = e.target || e.srcElement;
- var targetRect = target.getBoundingClientRect();
-
- var x = 0, y = 0;
-
- var clientX = 0, clientY = 0;
- if (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) {
- // touch devices
- clientX = e.changedTouches[0].clientX;
- clientY = e.changedTouches[0].clientY;
- } else if (typeof e.clientX === 'number') {
- clientX = e.clientX;
- clientY = e.clientY;
- }
-
- x = clientX - targetRect.left;
- y = clientY - targetRect.top;
- return { x: x, y: y };
- },
-
-
- getViewPos : function () {
- var doc = document.documentElement;
- return [
- (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0),
- (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)
- ];
- },
-
-
- getViewSize : function () {
- var doc = document.documentElement;
- return [
- (window.innerWidth || doc.clientWidth),
- (window.innerHeight || doc.clientHeight),
- ];
- },
-
-
- redrawPosition : function () {
-
- if (jsc.picker && jsc.picker.owner) {
- var thisObj = jsc.picker.owner;
-
- var tp, vp;
-
- if (thisObj.fixed) {
- // Fixed elements are positioned relative to viewport,
- // therefore we can ignore the scroll offset
- tp = jsc.getElementPos(thisObj.targetElement, true); // target pos
- vp = [0, 0]; // view pos
- } else {
- tp = jsc.getElementPos(thisObj.targetElement); // target pos
- vp = jsc.getViewPos(); // view pos
- }
-
- var ts = jsc.getElementSize(thisObj.targetElement); // target size
- var vs = jsc.getViewSize(); // view size
- var ps = jsc.getPickerOuterDims(thisObj); // picker size
- var a, b, c;
- switch (thisObj.position.toLowerCase()) {
- case 'left': a=1; b=0; c=-1; break;
- case 'right':a=1; b=0; c=1; break;
- case 'top': a=0; b=1; c=-1; break;
- default: a=0; b=1; c=1; break;
- }
- var l = (ts[b]+ps[b])/2;
-
- // compute picker position
- if (!thisObj.smartPosition) {
- var pp = [
- tp[a],
- tp[b]+ts[b]-l+l*c
- ];
- } else {
- var pp = [
- -vp[a]+tp[a]+ps[a] > vs[a] ?
- (-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) :
- tp[a],
- -vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ?
- (-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) :
- (tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c)
- ];
- }
-
- var x = pp[a];
- var y = pp[b];
- var positionValue = thisObj.fixed ? 'fixed' : 'absolute';
- var contractShadow =
- (pp[0] + ps[0] > tp[0] || pp[0] < tp[0] + ts[0]) &&
- (pp[1] + ps[1] < tp[1] + ts[1]);
-
- jsc._drawPosition(thisObj, x, y, positionValue, contractShadow);
- }
- },
-
-
- _drawPosition : function (thisObj, x, y, positionValue, contractShadow) {
- var vShadow = contractShadow ? 0 : thisObj.shadowBlur; // px
-
- jsc.picker.wrap.style.position = positionValue;
- jsc.picker.wrap.style.left = x + 'px';
- jsc.picker.wrap.style.top = y + 'px';
-
- jsc.setBoxShadow(
- jsc.picker.boxS,
- thisObj.shadow ?
- new jsc.BoxShadow(0, vShadow, thisObj.shadowBlur, 0, thisObj.shadowColor) :
- null);
- },
-
-
- getPickerDims : function (thisObj) {
- var displaySlider = !!jsc.getSliderComponent(thisObj);
- var dims = [
- 2 * thisObj.insetWidth + 2 * thisObj.padding + thisObj.width +
- (displaySlider ? 2 * thisObj.insetWidth + jsc.getPadToSliderPadding(thisObj) + thisObj.sliderSize : 0),
- 2 * thisObj.insetWidth + 2 * thisObj.padding + thisObj.height +
- (thisObj.closable ? 2 * thisObj.insetWidth + thisObj.padding + thisObj.buttonHeight : 0)
- ];
- return dims;
- },
-
-
- getPickerOuterDims : function (thisObj) {
- var dims = jsc.getPickerDims(thisObj);
- return [
- dims[0] + 2 * thisObj.borderWidth,
- dims[1] + 2 * thisObj.borderWidth
- ];
- },
-
-
- getPadToSliderPadding : function (thisObj) {
- return Math.max(thisObj.padding, 1.5 * (2 * thisObj.pointerBorderWidth + thisObj.pointerThickness));
- },
-
-
- getPadYComponent : function (thisObj) {
- switch (thisObj.mode.charAt(1).toLowerCase()) {
- case 'v': return 'v'; break;
- }
- return 's';
- },
-
-
- getSliderComponent : function (thisObj) {
- if (thisObj.mode.length > 2) {
- switch (thisObj.mode.charAt(2).toLowerCase()) {
- case 's': return 's'; break;
- case 'v': return 'v'; break;
- }
- }
- return null;
- },
-
-
- onDocumentMouseDown : function (e) {
- if (!e) { e = window.event; }
- var target = e.target || e.srcElement;
-
- if (target._jscLinkedInstance) {
- if (target._jscLinkedInstance.showOnClick) {
- target._jscLinkedInstance.show();
- }
- } else if (target._jscControlName) {
- jsc.onControlPointerStart(e, target, target._jscControlName, 'mouse');
- } else {
- // Mouse is outside the picker controls -> hide the color picker!
- if (jsc.picker && jsc.picker.owner) {
- jsc.picker.owner.hide();
- }
- }
- },
-
-
- onDocumentTouchStart : function (e) {
- if (!e) { e = window.event; }
- var target = e.target || e.srcElement;
-
- if (target._jscLinkedInstance) {
- if (target._jscLinkedInstance.showOnClick) {
- target._jscLinkedInstance.show();
- }
- } else if (target._jscControlName) {
- jsc.onControlPointerStart(e, target, target._jscControlName, 'touch');
- } else {
- if (jsc.picker && jsc.picker.owner) {
- jsc.picker.owner.hide();
- }
- }
- },
-
-
- onWindowResize : function (e) {
- jsc.redrawPosition();
- },
-
-
- onParentScroll : function (e) {
- // hide the picker when one of the parent elements is scrolled
- if (jsc.picker && jsc.picker.owner) {
- jsc.picker.owner.hide();
- }
- },
-
-
- _pointerMoveEvent : {
- mouse: 'mousemove',
- touch: 'touchmove'
- },
- _pointerEndEvent : {
- mouse: 'mouseup',
- touch: 'touchend'
- },
-
-
- _pointerOrigin : null,
- _capturedTarget : null,
-
-
- onControlPointerStart : function (e, target, controlName, pointerType) {
- var thisObj = target._jscInstance;
-
- jsc.preventDefault(e);
- jsc.captureTarget(target);
-
- var registerDragEvents = function (doc, offset) {
- jsc.attachGroupEvent('drag', doc, jsc._pointerMoveEvent[pointerType],
- jsc.onDocumentPointerMove(e, target, controlName, pointerType, offset));
- jsc.attachGroupEvent('drag', doc, jsc._pointerEndEvent[pointerType],
- jsc.onDocumentPointerEnd(e, target, controlName, pointerType));
- };
-
- registerDragEvents(document, [0, 0]);
-
- if (window.parent && window.frameElement) {
- var rect = window.frameElement.getBoundingClientRect();
- var ofs = [-rect.left, -rect.top];
- registerDragEvents(window.parent.window.document, ofs);
- }
-
- var abs = jsc.getAbsPointerPos(e);
- var rel = jsc.getRelPointerPos(e);
- jsc._pointerOrigin = {
- x: abs.x - rel.x,
- y: abs.y - rel.y
- };
-
- switch (controlName) {
- case 'pad':
- // if the slider is at the bottom, move it up
- switch (jsc.getSliderComponent(thisObj)) {
- case 's': if (thisObj.hsv[1] === 0) { thisObj.fromHSV(null, 100, null); }; break;
- case 'v': if (thisObj.hsv[2] === 0) { thisObj.fromHSV(null, null, 100); }; break;
- }
- jsc.setPad(thisObj, e, 0, 0);
- break;
-
- case 'sld':
- jsc.setSld(thisObj, e, 0);
- break;
- }
-
- jsc.dispatchFineChange(thisObj);
- },
-
-
- onDocumentPointerMove : function (e, target, controlName, pointerType, offset) {
- return function (e) {
- var thisObj = target._jscInstance;
- switch (controlName) {
- case 'pad':
- if (!e) { e = window.event; }
- jsc.setPad(thisObj, e, offset[0], offset[1]);
- jsc.dispatchFineChange(thisObj);
- break;
-
- case 'sld':
- if (!e) { e = window.event; }
- jsc.setSld(thisObj, e, offset[1]);
- jsc.dispatchFineChange(thisObj);
- break;
- }
- }
- },
-
-
- onDocumentPointerEnd : function (e, target, controlName, pointerType) {
- return function (e) {
- var thisObj = target._jscInstance;
- jsc.detachGroupEvents('drag');
- jsc.releaseTarget();
- // Always dispatch changes after detaching outstanding mouse handlers,
- // in case some user interaction will occur in user's onchange callback
- // that would intrude with current mouse events
- jsc.dispatchChange(thisObj);
- };
- },
-
-
- dispatchChange : function (thisObj) {
- if (thisObj.valueElement) {
- if (jsc.isElementType(thisObj.valueElement, 'input')) {
- jsc.fireEvent(thisObj.valueElement, 'change');
- }
- }
- },
-
-
- dispatchFineChange : function (thisObj) {
- if (thisObj.onFineChange) {
- var callback;
- if (typeof thisObj.onFineChange === 'string') {
- callback = new Function (thisObj.onFineChange);
- } else {
- callback = thisObj.onFineChange;
- }
- callback.call(thisObj);
- }
- },
-
-
- setPad : function (thisObj, e, ofsX, ofsY) {
- var pointerAbs = jsc.getAbsPointerPos(e);
- var x = ofsX + pointerAbs.x - jsc._pointerOrigin.x - thisObj.padding - thisObj.insetWidth;
- var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.insetWidth;
-
- var xVal = x * (360 / (thisObj.width - 1));
- var yVal = 100 - (y * (100 / (thisObj.height - 1)));
-
- switch (jsc.getPadYComponent(thisObj)) {
- case 's': thisObj.fromHSV(xVal, yVal, null, jsc.leaveSld); break;
- case 'v': thisObj.fromHSV(xVal, null, yVal, jsc.leaveSld); break;
- }
- },
-
-
- setSld : function (thisObj, e, ofsY) {
- var pointerAbs = jsc.getAbsPointerPos(e);
- var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.insetWidth;
-
- var yVal = 100 - (y * (100 / (thisObj.height - 1)));
-
- switch (jsc.getSliderComponent(thisObj)) {
- case 's': thisObj.fromHSV(null, yVal, null, jsc.leavePad); break;
- case 'v': thisObj.fromHSV(null, null, yVal, jsc.leavePad); break;
- }
- },
-
-
- _vmlNS : 'jsc_vml_',
- _vmlCSS : 'jsc_vml_css_',
- _vmlReady : false,
-
-
- initVML : function () {
- if (!jsc._vmlReady) {
- // init VML namespace
- var doc = document;
- if (!doc.namespaces[jsc._vmlNS]) {
- doc.namespaces.add(jsc._vmlNS, 'urn:schemas-microsoft-com:vml');
- }
- if (!doc.styleSheets[jsc._vmlCSS]) {
- var tags = ['shape', 'shapetype', 'group', 'background', 'path', 'formulas', 'handles', 'fill', 'stroke', 'shadow', 'textbox', 'textpath', 'imagedata', 'line', 'polyline', 'curve', 'rect', 'roundrect', 'oval', 'arc', 'image'];
- var ss = doc.createStyleSheet();
- ss.owningElement.id = jsc._vmlCSS;
- for (var i = 0; i < tags.length; i += 1) {
- ss.addRule(jsc._vmlNS + '\\:' + tags[i], 'behavior:url(#default#VML);');
- }
- }
- jsc._vmlReady = true;
- }
- },
-
-
- createPalette : function () {
-
- var paletteObj = {
- elm: null,
- draw: null
- };
-
- if (jsc.isCanvasSupported) {
- // Canvas implementation for modern browsers
-
- var canvas = document.createElement('canvas');
- var ctx = canvas.getContext('2d');
-
- var drawFunc = function (width, height, type) {
- canvas.width = width;
- canvas.height = height;
-
- ctx.clearRect(0, 0, canvas.width, canvas.height);
-
- var hGrad = ctx.createLinearGradient(0, 0, canvas.width, 0);
- hGrad.addColorStop(0 / 6, '#F00');
- hGrad.addColorStop(1 / 6, '#FF0');
- hGrad.addColorStop(2 / 6, '#0F0');
- hGrad.addColorStop(3 / 6, '#0FF');
- hGrad.addColorStop(4 / 6, '#00F');
- hGrad.addColorStop(5 / 6, '#F0F');
- hGrad.addColorStop(6 / 6, '#F00');
-
- ctx.fillStyle = hGrad;
- ctx.fillRect(0, 0, canvas.width, canvas.height);
-
- var vGrad = ctx.createLinearGradient(0, 0, 0, canvas.height);
- switch (type.toLowerCase()) {
- case 's':
- vGrad.addColorStop(0, 'rgba(255,255,255,0)');
- vGrad.addColorStop(1, 'rgba(255,255,255,1)');
- break;
- case 'v':
- vGrad.addColorStop(0, 'rgba(0,0,0,0)');
- vGrad.addColorStop(1, 'rgba(0,0,0,1)');
- break;
- }
- ctx.fillStyle = vGrad;
- ctx.fillRect(0, 0, canvas.width, canvas.height);
- };
-
- paletteObj.elm = canvas;
- paletteObj.draw = drawFunc;
-
- } else {
- // VML fallback for IE 7 and 8
-
- jsc.initVML();
-
- var vmlContainer = document.createElement('div');
- vmlContainer.style.position = 'relative';
- vmlContainer.style.overflow = 'hidden';
-
- var hGrad = document.createElement(jsc._vmlNS + ':fill');
- hGrad.type = 'gradient';
- hGrad.method = 'linear';
- hGrad.angle = '90';
- hGrad.colors = '16.67% #F0F, 33.33% #00F, 50% #0FF, 66.67% #0F0, 83.33% #FF0'
-
- var hRect = document.createElement(jsc._vmlNS + ':rect');
- hRect.style.position = 'absolute';
- hRect.style.left = -1 + 'px';
- hRect.style.top = -1 + 'px';
- hRect.stroked = false;
- hRect.appendChild(hGrad);
- vmlContainer.appendChild(hRect);
-
- var vGrad = document.createElement(jsc._vmlNS + ':fill');
- vGrad.type = 'gradient';
- vGrad.method = 'linear';
- vGrad.angle = '180';
- vGrad.opacity = '0';
-
- var vRect = document.createElement(jsc._vmlNS + ':rect');
- vRect.style.position = 'absolute';
- vRect.style.left = -1 + 'px';
- vRect.style.top = -1 + 'px';
- vRect.stroked = false;
- vRect.appendChild(vGrad);
- vmlContainer.appendChild(vRect);
-
- var drawFunc = function (width, height, type) {
- vmlContainer.style.width = width + 'px';
- vmlContainer.style.height = height + 'px';
-
- hRect.style.width =
- vRect.style.width =
- (width + 1) + 'px';
- hRect.style.height =
- vRect.style.height =
- (height + 1) + 'px';
-
- // Colors must be specified during every redraw, otherwise IE won't display
- // a full gradient during a subsequential redraw
- hGrad.color = '#F00';
- hGrad.color2 = '#F00';
-
- switch (type.toLowerCase()) {
- case 's':
- vGrad.color = vGrad.color2 = '#FFF';
- break;
- case 'v':
- vGrad.color = vGrad.color2 = '#000';
- break;
- }
- };
-
- paletteObj.elm = vmlContainer;
- paletteObj.draw = drawFunc;
- }
-
- return paletteObj;
- },
-
-
- createSliderGradient : function () {
-
- var sliderObj = {
- elm: null,
- draw: null
- };
-
- if (jsc.isCanvasSupported) {
- // Canvas implementation for modern browsers
-
- var canvas = document.createElement('canvas');
- var ctx = canvas.getContext('2d');
-
- var drawFunc = function (width, height, color1, color2) {
- canvas.width = width;
- canvas.height = height;
-
- ctx.clearRect(0, 0, canvas.width, canvas.height);
-
- var grad = ctx.createLinearGradient(0, 0, 0, canvas.height);
- grad.addColorStop(0, color1);
- grad.addColorStop(1, color2);
-
- ctx.fillStyle = grad;
- ctx.fillRect(0, 0, canvas.width, canvas.height);
- };
-
- sliderObj.elm = canvas;
- sliderObj.draw = drawFunc;
-
- } else {
- // VML fallback for IE 7 and 8
-
- jsc.initVML();
-
- var vmlContainer = document.createElement('div');
- vmlContainer.style.position = 'relative';
- vmlContainer.style.overflow = 'hidden';
-
- var grad = document.createElement(jsc._vmlNS + ':fill');
- grad.type = 'gradient';
- grad.method = 'linear';
- grad.angle = '180';
-
- var rect = document.createElement(jsc._vmlNS + ':rect');
- rect.style.position = 'absolute';
- rect.style.left = -1 + 'px';
- rect.style.top = -1 + 'px';
- rect.stroked = false;
- rect.appendChild(grad);
- vmlContainer.appendChild(rect);
-
- var drawFunc = function (width, height, color1, color2) {
- vmlContainer.style.width = width + 'px';
- vmlContainer.style.height = height + 'px';
-
- rect.style.width = (width + 1) + 'px';
- rect.style.height = (height + 1) + 'px';
-
- grad.color = color1;
- grad.color2 = color2;
- };
-
- sliderObj.elm = vmlContainer;
- sliderObj.draw = drawFunc;
- }
-
- return sliderObj;
- },
-
-
- leaveValue : 1<<0,
- leaveStyle : 1<<1,
- leavePad : 1<<2,
- leaveSld : 1<<3,
-
-
- BoxShadow : (function () {
- var BoxShadow = function (hShadow, vShadow, blur, spread, color, inset) {
- this.hShadow = hShadow;
- this.vShadow = vShadow;
- this.blur = blur;
- this.spread = spread;
- this.color = color;
- this.inset = !!inset;
- };
-
- BoxShadow.prototype.toString = function () {
- var vals = [
- Math.round(this.hShadow) + 'px',
- Math.round(this.vShadow) + 'px',
- Math.round(this.blur) + 'px',
- Math.round(this.spread) + 'px',
- this.color
- ];
- if (this.inset) {
- vals.push('inset');
- }
- return vals.join(' ');
- };
-
- return BoxShadow;
- })(),
-
-
- //
- // Usage:
- // var myColor = new jscolor(<targetElement> [, <options>])
- //
-
- jscolor : function (targetElement, options) {
-
- // General options
- //
- this.value = null; // initial HEX color. To change it later, use methods fromString(), fromHSV() and fromRGB()
- this.valueElement = targetElement; // element that will be used to display and input the color code
- this.styleElement = targetElement; // element that will preview the picked color using CSS backgroundColor
- this.required = true; // whether the associated text <input> can be left empty
- this.refine = true; // whether to refine the entered color code (e.g. uppercase it and remove whitespace)
- this.hash = false; // whether to prefix the HEX color code with # symbol
- this.uppercase = true; // whether to show the color code in upper case
- this.onFineChange = null; // called instantly every time the color changes (value can be either a function or a string with javascript code)
- this.activeClass = 'jscolor-active'; // class to be set to the target element when a picker window is open on it
- this.overwriteImportant = false; // whether to overwrite colors of styleElement using !important
- this.minS = 0; // min allowed saturation (0 - 100)
- this.maxS = 100; // max allowed saturation (0 - 100)
- this.minV = 0; // min allowed value (brightness) (0 - 100)
- this.maxV = 100; // max allowed value (brightness) (0 - 100)
-
- // Accessing the picked color
- //
- this.hsv = [0, 0, 100]; // read-only [0-360, 0-100, 0-100]
- this.rgb = [255, 255, 255]; // read-only [0-255, 0-255, 0-255]
-
- // Color Picker options
- //
- this.width = 181; // width of color palette (in px)
- this.height = 101; // height of color palette (in px)
- this.showOnClick = true; // whether to display the color picker when user clicks on its target element
- this.mode = 'HSV'; // HSV | HVS | HS | HV - layout of the color picker controls
- this.position = 'bottom'; // left | right | top | bottom - position relative to the target element
- this.smartPosition = true; // automatically change picker position when there is not enough space for it
- this.sliderSize = 16; // px
- this.crossSize = 8; // px
- this.closable = false; // whether to display the Close button
- this.closeText = 'Close';
- this.buttonColor = '#000000'; // CSS color
- this.buttonHeight = 18; // px
- this.padding = 12; // px
- this.backgroundColor = '#FFFFFF'; // CSS color
- this.borderWidth = 1; // px
- this.borderColor = '#BBBBBB'; // CSS color
- this.borderRadius = 8; // px
- this.insetWidth = 1; // px
- this.insetColor = '#BBBBBB'; // CSS color
- this.shadow = true; // whether to display shadow
- this.shadowBlur = 15; // px
- this.shadowColor = 'rgba(0,0,0,0.2)'; // CSS color
- this.pointerColor = '#4C4C4C'; // px
- this.pointerBorderColor = '#FFFFFF'; // px
- this.pointerBorderWidth = 1; // px
- this.pointerThickness = 2; // px
- this.zIndex = 1000;
- this.container = null; // where to append the color picker (BODY element by default)
-
-
- for (var opt in options) {
- if (options.hasOwnProperty(opt)) {
- this[opt] = options[opt];
- }
- }
-
-
- this.hide = function () {
- if (isPickerOwner()) {
- detachPicker();
- }
- };
-
-
- this.show = function () {
- drawPicker();
- };
-
-
- this.redraw = function () {
- if (isPickerOwner()) {
- drawPicker();
- }
- };
-
-
- this.importColor = function () {
- if (!this.valueElement) {
- this.exportColor();
- } else {
- if (jsc.isElementType(this.valueElement, 'input')) {
- if (!this.refine) {
- if (!this.fromString(this.valueElement.value, jsc.leaveValue)) {
- if (this.styleElement) {
- this.styleElement.style.backgroundImage = this.styleElement._jscOrigStyle.backgroundImage;
- this.styleElement.style.backgroundColor = this.styleElement._jscOrigStyle.backgroundColor;
- this.styleElement.style.color = this.styleElement._jscOrigStyle.color;
- }
- this.exportColor(jsc.leaveValue | jsc.leaveStyle);
- }
- } else if (!this.required && /^\s*$/.test(this.valueElement.value)) {
- this.valueElement.value = '';
- if (this.styleElement) {
- this.styleElement.style.backgroundImage = this.styleElement._jscOrigStyle.backgroundImage;
- this.styleElement.style.backgroundColor = this.styleElement._jscOrigStyle.backgroundColor;
- this.styleElement.style.color = this.styleElement._jscOrigStyle.color;
- }
- this.exportColor(jsc.leaveValue | jsc.leaveStyle);
-
- } else if (this.fromString(this.valueElement.value)) {
- // managed to import color successfully from the value -> OK, don't do anything
- } else {
- this.exportColor();
- }
- } else {
- // not an input element -> doesn't have any value
- this.exportColor();
- }
- }
- };
-
-
- this.exportColor = function (flags) {
- if (!(flags & jsc.leaveValue) && this.valueElement) {
- var value = this.toString();
- if (this.uppercase) { value = value.toUpperCase(); }
- if (this.hash) { value = '#' + value; }
-
- if (jsc.isElementType(this.valueElement, 'input')) {
- this.valueElement.value = value;
- } else {
- this.valueElement.innerHTML = value;
- }
- }
- if (!(flags & jsc.leaveStyle)) {
- if (this.styleElement) {
- var bgColor = '#' + this.toString();
- var fgColor = this.isLight() ? '#000' : '#FFF';
-
- this.styleElement.style.backgroundImage = 'none';
- this.styleElement.style.backgroundColor = bgColor;
- this.styleElement.style.color = fgColor;
-
- if (this.overwriteImportant) {
- this.styleElement.setAttribute('style',
- 'background: ' + bgColor + ' !important; ' +
- 'color: ' + fgColor + ' !important;'
- );
- }
- }
- }
- if (!(flags & jsc.leavePad) && isPickerOwner()) {
- redrawPad();
- }
- if (!(flags & jsc.leaveSld) && isPickerOwner()) {
- redrawSld();
- }
- };
-
-
- // h: 0-360
- // s: 0-100
- // v: 0-100
- //
- this.fromHSV = function (h, s, v, flags) { // null = don't change
- if (h !== null) {
- if (isNaN(h)) { return false; }
- h = Math.max(0, Math.min(360, h));
- }
- if (s !== null) {
- if (isNaN(s)) { return false; }
- s = Math.max(0, Math.min(100, this.maxS, s), this.minS);
- }
- if (v !== null) {
- if (isNaN(v)) { return false; }
- v = Math.max(0, Math.min(100, this.maxV, v), this.minV);
- }
-
- this.rgb = HSV_RGB(
- h===null ? this.hsv[0] : (this.hsv[0]=h),
- s===null ? this.hsv[1] : (this.hsv[1]=s),
- v===null ? this.hsv[2] : (this.hsv[2]=v)
- );
-
- this.exportColor(flags);
- };
-
-
- // r: 0-255
- // g: 0-255
- // b: 0-255
- //
- this.fromRGB = function (r, g, b, flags) { // null = don't change
- if (r !== null) {
- if (isNaN(r)) { return false; }
- r = Math.max(0, Math.min(255, r));
- }
- if (g !== null) {
- if (isNaN(g)) { return false; }
- g = Math.max(0, Math.min(255, g));
- }
- if (b !== null) {
- if (isNaN(b)) { return false; }
- b = Math.max(0, Math.min(255, b));
- }
-
- var hsv = RGB_HSV(
- r===null ? this.rgb[0] : r,
- g===null ? this.rgb[1] : g,
- b===null ? this.rgb[2] : b
- );
- if (hsv[0] !== null) {
- this.hsv[0] = Math.max(0, Math.min(360, hsv[0]));
- }
- if (hsv[2] !== 0) {
- this.hsv[1] = hsv[1]===null ? null : Math.max(0, this.minS, Math.min(100, this.maxS, hsv[1]));
- }
- this.hsv[2] = hsv[2]===null ? null : Math.max(0, this.minV, Math.min(100, this.maxV, hsv[2]));
-
- // update RGB according to final HSV, as some values might be trimmed
- var rgb = HSV_RGB(this.hsv[0], this.hsv[1], this.hsv[2]);
- this.rgb[0] = rgb[0];
- this.rgb[1] = rgb[1];
- this.rgb[2] = rgb[2];
-
- this.exportColor(flags);
- };
-
-
- this.fromString = function (str, flags) {
- var m;
- if (m = str.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i)) {
- // HEX notation
- //
-
- if (m[1].length === 6) {
- // 6-char notation
- this.fromRGB(
- parseInt(m[1].substr(0,2),16),
- parseInt(m[1].substr(2,2),16),
- parseInt(m[1].substr(4,2),16),
- flags
- );
- } else {
- // 3-char notation
- this.fromRGB(
- parseInt(m[1].charAt(0) + m[1].charAt(0),16),
- parseInt(m[1].charAt(1) + m[1].charAt(1),16),
- parseInt(m[1].charAt(2) + m[1].charAt(2),16),
- flags
- );
- }
- return true;
-
- } else if (m = str.match(/^\W*rgba?\(([^)]*)\)\W*$/i)) {
- var params = m[1].split(',');
- var re = /^\s*(\d*)(\.\d+)?\s*$/;
- var mR, mG, mB;
- if (
- params.length >= 3 &&
- (mR = params[0].match(re)) &&
- (mG = params[1].match(re)) &&
- (mB = params[2].match(re))
- ) {
- var r = parseFloat((mR[1] || '0') + (mR[2] || ''));
- var g = parseFloat((mG[1] || '0') + (mG[2] || ''));
- var b = parseFloat((mB[1] || '0') + (mB[2] || ''));
- this.fromRGB(r, g, b, flags);
- return true;
- }
- }
- return false;
- };
-
-
- this.toString = function () {
- return (
- (0x100 | Math.round(this.rgb[0])).toString(16).substr(1) +
- (0x100 | Math.round(this.rgb[1])).toString(16).substr(1) +
- (0x100 | Math.round(this.rgb[2])).toString(16).substr(1)
- );
- };
-
-
- this.toHEXString = function () {
- return '#' + this.toString().toUpperCase();
- };
-
-
- this.toRGBString = function () {
- return ('rgb(' +
- Math.round(this.rgb[0]) + ',' +
- Math.round(this.rgb[1]) + ',' +
- Math.round(this.rgb[2]) + ')'
- );
- };
-
-
- this.isLight = function () {
- return (
- 0.213 * this.rgb[0] +
- 0.715 * this.rgb[1] +
- 0.072 * this.rgb[2] >
- 255 / 2
- );
- };
-
-
- this._processParentElementsInDOM = function () {
- if (this._linkedElementsProcessed) { return; }
- this._linkedElementsProcessed = true;
-
- var elm = this.targetElement;
- do {
- // If the target element or one of its parent nodes has fixed position,
- // then use fixed positioning instead
- //
- // Note: In Firefox, getComputedStyle returns null in a hidden iframe,
- // that's why we need to check if the returned style object is non-empty
- var currStyle = jsc.getStyle(elm);
- if (currStyle && currStyle.position.toLowerCase() === 'fixed') {
- this.fixed = true;
- }
-
- if (elm !== this.targetElement) {
- // Ensure to attach onParentScroll only once to each parent element
- // (multiple targetElements can share the same parent nodes)
- //
- // Note: It's not just offsetParents that can be scrollable,
- // that's why we loop through all parent nodes
- if (!elm._jscEventsAttached) {
- jsc.attachEvent(elm, 'scroll', jsc.onParentScroll);
- elm._jscEventsAttached = true;
- }
- }
- } while ((elm = elm.parentNode) && !jsc.isElementType(elm, 'body'));
- };
-
-
- // r: 0-255
- // g: 0-255
- // b: 0-255
- //
- // returns: [ 0-360, 0-100, 0-100 ]
- //
- function RGB_HSV (r, g, b) {
- r /= 255;
- g /= 255;
- b /= 255;
- var n = Math.min(Math.min(r,g),b);
- var v = Math.max(Math.max(r,g),b);
- var m = v - n;
- if (m === 0) { return [ null, 0, 100 * v ]; }
- var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m);
- return [
- 60 * (h===6?0:h),
- 100 * (m/v),
- 100 * v
- ];
- }
-
-
- // h: 0-360
- // s: 0-100
- // v: 0-100
- //
- // returns: [ 0-255, 0-255, 0-255 ]
- //
- function HSV_RGB (h, s, v) {
- var u = 255 * (v / 100);
-
- if (h === null) {
- return [ u, u, u ];
- }
-
- h /= 60;
- s /= 100;
-
- var i = Math.floor(h);
- var f = i%2 ? h-i : 1-(h-i);
- var m = u * (1 - s);
- var n = u * (1 - s * f);
- switch (i) {
- case 6:
- case 0: return [u,n,m];
- case 1: return [n,u,m];
- case 2: return [m,u,n];
- case 3: return [m,n,u];
- case 4: return [n,m,u];
- case 5: return [u,m,n];
- }
- }
-
-
- function detachPicker () {
- jsc.unsetClass(THIS.targetElement, THIS.activeClass);
- jsc.picker.wrap.parentNode.removeChild(jsc.picker.wrap);
- delete jsc.picker.owner;
- }
-
-
- function drawPicker () {
-
- // At this point, when drawing the picker, we know what the parent elements are
- // and we can do all related DOM operations, such as registering events on them
- // or checking their positioning
- THIS._processParentElementsInDOM();
-
- if (!jsc.picker) {
- jsc.picker = {
- owner: null,
- wrap : document.createElement('div'),
- box : document.createElement('div'),
- boxS : document.createElement('div'), // shadow area
- boxB : document.createElement('div'), // border
- pad : document.createElement('div'),
- padB : document.createElement('div'), // border
- padM : document.createElement('div'), // mouse/touch area
- padPal : jsc.createPalette(),
- cross : document.createElement('div'),
- crossBY : document.createElement('div'), // border Y
- crossBX : document.createElement('div'), // border X
- crossLY : document.createElement('div'), // line Y
- crossLX : document.createElement('div'), // line X
- sld : document.createElement('div'),
- sldB : document.createElement('div'), // border
- sldM : document.createElement('div'), // mouse/touch area
- sldGrad : jsc.createSliderGradient(),
- sldPtrS : document.createElement('div'), // slider pointer spacer
- sldPtrIB : document.createElement('div'), // slider pointer inner border
- sldPtrMB : document.createElement('div'), // slider pointer middle border
- sldPtrOB : document.createElement('div'), // slider pointer outer border
- btn : document.createElement('div'),
- btnT : document.createElement('span') // text
- };
-
- jsc.picker.pad.appendChild(jsc.picker.padPal.elm);
- jsc.picker.padB.appendChild(jsc.picker.pad);
- jsc.picker.cross.appendChild(jsc.picker.crossBY);
- jsc.picker.cross.appendChild(jsc.picker.crossBX);
- jsc.picker.cross.appendChild(jsc.picker.crossLY);
- jsc.picker.cross.appendChild(jsc.picker.crossLX);
- jsc.picker.padB.appendChild(jsc.picker.cross);
- jsc.picker.box.appendChild(jsc.picker.padB);
- jsc.picker.box.appendChild(jsc.picker.padM);
-
- jsc.picker.sld.appendChild(jsc.picker.sldGrad.elm);
- jsc.picker.sldB.appendChild(jsc.picker.sld);
- jsc.picker.sldB.appendChild(jsc.picker.sldPtrOB);
- jsc.picker.sldPtrOB.appendChild(jsc.picker.sldPtrMB);
- jsc.picker.sldPtrMB.appendChild(jsc.picker.sldPtrIB);
- jsc.picker.sldPtrIB.appendChild(jsc.picker.sldPtrS);
- jsc.picker.box.appendChild(jsc.picker.sldB);
- jsc.picker.box.appendChild(jsc.picker.sldM);
-
- jsc.picker.btn.appendChild(jsc.picker.btnT);
- jsc.picker.box.appendChild(jsc.picker.btn);
-
- jsc.picker.boxB.appendChild(jsc.picker.box);
- jsc.picker.wrap.appendChild(jsc.picker.boxS);
- jsc.picker.wrap.appendChild(jsc.picker.boxB);
- }
-
- var p = jsc.picker;
-
- var displaySlider = !!jsc.getSliderComponent(THIS);
- var dims = jsc.getPickerDims(THIS);
- var crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize);
- var padToSliderPadding = jsc.getPadToSliderPadding(THIS);
- var borderRadius = Math.min(
- THIS.borderRadius,
- Math.round(THIS.padding * Math.PI)); // px
- var padCursor = 'crosshair';
-
- // wrap
- p.wrap.style.clear = 'both';
- p.wrap.style.width = (dims[0] + 2 * THIS.borderWidth) + 'px';
- p.wrap.style.height = (dims[1] + 2 * THIS.borderWidth) + 'px';
- p.wrap.style.zIndex = THIS.zIndex;
-
- // picker
- p.box.style.width = dims[0] + 'px';
- p.box.style.height = dims[1] + 'px';
-
- p.boxS.style.position = 'absolute';
- p.boxS.style.left = '0';
- p.boxS.style.top = '0';
- p.boxS.style.width = '100%';
- p.boxS.style.height = '100%';
- jsc.setBorderRadius(p.boxS, borderRadius + 'px');
-
- // picker border
- p.boxB.style.position = 'relative';
- p.boxB.style.border = THIS.borderWidth + 'px solid';
- p.boxB.style.borderColor = THIS.borderColor;
- p.boxB.style.background = THIS.backgroundColor;
- jsc.setBorderRadius(p.boxB, borderRadius + 'px');
-
- // IE hack:
- // If the element is transparent, IE will trigger the event on the elements under it,
- // e.g. on Canvas or on elements with border
- p.padM.style.background =
- p.sldM.style.background =
- '#FFF';
- jsc.setStyle(p.padM, 'opacity', '0');
- jsc.setStyle(p.sldM, 'opacity', '0');
-
- // pad
- p.pad.style.position = 'relative';
- p.pad.style.width = THIS.width + 'px';
- p.pad.style.height = THIS.height + 'px';
-
- // pad palettes (HSV and HVS)
- p.padPal.draw(THIS.width, THIS.height, jsc.getPadYComponent(THIS));
-
- // pad border
- p.padB.style.position = 'absolute';
- p.padB.style.left = THIS.padding + 'px';
- p.padB.style.top = THIS.padding + 'px';
- p.padB.style.border = THIS.insetWidth + 'px solid';
- p.padB.style.borderColor = THIS.insetColor;
-
- // pad mouse area
- p.padM._jscInstance = THIS;
- p.padM._jscControlName = 'pad';
- p.padM.style.position = 'absolute';
- p.padM.style.left = '0';
- p.padM.style.top = '0';
- p.padM.style.width = (THIS.padding + 2 * THIS.insetWidth + THIS.width + padToSliderPadding / 2) + 'px';
- p.padM.style.height = dims[1] + 'px';
- p.padM.style.cursor = padCursor;
-
- // pad cross
- p.cross.style.position = 'absolute';
- p.cross.style.left =
- p.cross.style.top =
- '0';
- p.cross.style.width =
- p.cross.style.height =
- crossOuterSize + 'px';
-
- // pad cross border Y and X
- p.crossBY.style.position =
- p.crossBX.style.position =
- 'absolute';
- p.crossBY.style.background =
- p.crossBX.style.background =
- THIS.pointerBorderColor;
- p.crossBY.style.width =
- p.crossBX.style.height =
- (2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px';
- p.crossBY.style.height =
- p.crossBX.style.width =
- crossOuterSize + 'px';
- p.crossBY.style.left =
- p.crossBX.style.top =
- (Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2) - THIS.pointerBorderWidth) + 'px';
- p.crossBY.style.top =
- p.crossBX.style.left =
- '0';
-
- // pad cross line Y and X
- p.crossLY.style.position =
- p.crossLX.style.position =
- 'absolute';
- p.crossLY.style.background =
- p.crossLX.style.background =
- THIS.pointerColor;
- p.crossLY.style.height =
- p.crossLX.style.width =
- (crossOuterSize - 2 * THIS.pointerBorderWidth) + 'px';
- p.crossLY.style.width =
- p.crossLX.style.height =
- THIS.pointerThickness + 'px';
- p.crossLY.style.left =
- p.crossLX.style.top =
- (Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2)) + 'px';
- p.crossLY.style.top =
- p.crossLX.style.left =
- THIS.pointerBorderWidth + 'px';
-
- // slider
- p.sld.style.overflow = 'hidden';
- p.sld.style.width = THIS.sliderSize + 'px';
- p.sld.style.height = THIS.height + 'px';
-
- // slider gradient
- p.sldGrad.draw(THIS.sliderSize, THIS.height, '#000', '#000');
-
- // slider border
- p.sldB.style.display = displaySlider ? 'block' : 'none';
- p.sldB.style.position = 'absolute';
- p.sldB.style.right = THIS.padding + 'px';
- p.sldB.style.top = THIS.padding + 'px';
- p.sldB.style.border = THIS.insetWidth + 'px solid';
- p.sldB.style.borderColor = THIS.insetColor;
-
- // slider mouse area
- p.sldM._jscInstance = THIS;
- p.sldM._jscControlName = 'sld';
- p.sldM.style.display = displaySlider ? 'block' : 'none';
- p.sldM.style.position = 'absolute';
- p.sldM.style.right = '0';
- p.sldM.style.top = '0';
- p.sldM.style.width = (THIS.sliderSize + padToSliderPadding / 2 + THIS.padding + 2 * THIS.insetWidth) + 'px';
- p.sldM.style.height = dims[1] + 'px';
- p.sldM.style.cursor = 'default';
-
- // slider pointer inner and outer border
- p.sldPtrIB.style.border =
- p.sldPtrOB.style.border =
- THIS.pointerBorderWidth + 'px solid ' + THIS.pointerBorderColor;
-
- // slider pointer outer border
- p.sldPtrOB.style.position = 'absolute';
- p.sldPtrOB.style.left = -(2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px';
- p.sldPtrOB.style.top = '0';
-
- // slider pointer middle border
- p.sldPtrMB.style.border = THIS.pointerThickness + 'px solid ' + THIS.pointerColor;
-
- // slider pointer spacer
- p.sldPtrS.style.width = THIS.sliderSize + 'px';
- p.sldPtrS.style.height = sliderPtrSpace + 'px';
-
- // the Close button
- function setBtnBorder () {
- var insetColors = THIS.insetColor.split(/\s+/);
- var outsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1];
- p.btn.style.borderColor = outsetColor;
- }
- p.btn.style.display = THIS.closable ? 'block' : 'none';
- p.btn.style.position = 'absolute';
- p.btn.style.left = THIS.padding + 'px';
- p.btn.style.bottom = THIS.padding + 'px';
- p.btn.style.padding = '0 15px';
- p.btn.style.height = THIS.buttonHeight + 'px';
- p.btn.style.border = THIS.insetWidth + 'px solid';
- setBtnBorder();
- p.btn.style.color = THIS.buttonColor;
- p.btn.style.font = '12px sans-serif';
- p.btn.style.textAlign = 'center';
- try {
- p.btn.style.cursor = 'pointer';
- } catch(eOldIE) {
- p.btn.style.cursor = 'hand';
- }
- p.btn.onmousedown = function () {
- THIS.hide();
- };
- p.btnT.style.lineHeight = THIS.buttonHeight + 'px';
- p.btnT.innerHTML = '';
- p.btnT.appendChild(document.createTextNode(THIS.closeText));
-
- // place pointers
- redrawPad();
- redrawSld();
-
- // If we are changing the owner without first closing the picker,
- // make sure to first deal with the old owner
- if (jsc.picker.owner && jsc.picker.owner !== THIS) {
- jsc.unsetClass(jsc.picker.owner.targetElement, THIS.activeClass);
- }
-
- // Set the new picker owner
- jsc.picker.owner = THIS;
-
- // The redrawPosition() method needs picker.owner to be set, that's why we call it here,
- // after setting the owner
- if (jsc.isElementType(container, 'body')) {
- jsc.redrawPosition();
- } else {
- jsc._drawPosition(THIS, 0, 0, 'relative', false);
- }
-
- if (p.wrap.parentNode != container) {
- container.appendChild(p.wrap);
- }
-
- jsc.setClass(THIS.targetElement, THIS.activeClass);
- }
-
-
- function redrawPad () {
- // redraw the pad pointer
- switch (jsc.getPadYComponent(THIS)) {
- case 's': var yComponent = 1; break;
- case 'v': var yComponent = 2; break;
- }
- var x = Math.round((THIS.hsv[0] / 360) * (THIS.width - 1));
- var y = Math.round((1 - THIS.hsv[yComponent] / 100) * (THIS.height - 1));
- var crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize);
- var ofs = -Math.floor(crossOuterSize / 2);
- jsc.picker.cross.style.left = (x + ofs) + 'px';
- jsc.picker.cross.style.top = (y + ofs) + 'px';
-
- // redraw the slider
- switch (jsc.getSliderComponent(THIS)) {
- case 's':
- var rgb1 = HSV_RGB(THIS.hsv[0], 100, THIS.hsv[2]);
- var rgb2 = HSV_RGB(THIS.hsv[0], 0, THIS.hsv[2]);
- var color1 = 'rgb(' +
- Math.round(rgb1[0]) + ',' +
- Math.round(rgb1[1]) + ',' +
- Math.round(rgb1[2]) + ')';
- var color2 = 'rgb(' +
- Math.round(rgb2[0]) + ',' +
- Math.round(rgb2[1]) + ',' +
- Math.round(rgb2[2]) + ')';
- jsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2);
- break;
- case 'v':
- var rgb = HSV_RGB(THIS.hsv[0], THIS.hsv[1], 100);
- var color1 = 'rgb(' +
- Math.round(rgb[0]) + ',' +
- Math.round(rgb[1]) + ',' +
- Math.round(rgb[2]) + ')';
- var color2 = '#000';
- jsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2);
- break;
- }
- }
-
-
- function redrawSld () {
- var sldComponent = jsc.getSliderComponent(THIS);
- if (sldComponent) {
- // redraw the slider pointer
- switch (sldComponent) {
- case 's': var yComponent = 1; break;
- case 'v': var yComponent = 2; break;
- }
- var y = Math.round((1 - THIS.hsv[yComponent] / 100) * (THIS.height - 1));
- jsc.picker.sldPtrOB.style.top = (y - (2 * THIS.pointerBorderWidth + THIS.pointerThickness) - Math.floor(sliderPtrSpace / 2)) + 'px';
- }
- }
-
-
- function isPickerOwner () {
- return jsc.picker && jsc.picker.owner === THIS;
- }
-
-
- function blurValue () {
- THIS.importColor();
- }
-
-
- // Find the target element
- if (typeof targetElement === 'string') {
- var id = targetElement;
- var elm = document.getElementById(id);
- if (elm) {
- this.targetElement = elm;
- } else {
- jsc.warn('Could not find target element with ID \'' + id + '\'');
- }
- } else if (targetElement) {
- this.targetElement = targetElement;
- } else {
- jsc.warn('Invalid target element: \'' + targetElement + '\'');
- }
-
- if (this.targetElement._jscLinkedInstance) {
- jsc.warn('Cannot link jscolor twice to the same element. Skipping.');
- return;
- }
- this.targetElement._jscLinkedInstance = this;
-
- // Find the value element
- this.valueElement = jsc.fetchElement(this.valueElement);
- // Find the style element
- this.styleElement = jsc.fetchElement(this.styleElement);
-
- var THIS = this;
- var container =
- this.container ?
- jsc.fetchElement(this.container) :
- document.getElementsByTagName('body')[0];
- var sliderPtrSpace = 3; // px
-
- // For BUTTON elements it's important to stop them from sending the form when clicked
- // (e.g. in Safari)
- if (jsc.isElementType(this.targetElement, 'button')) {
- if (this.targetElement.onclick) {
- var origCallback = this.targetElement.onclick;
- this.targetElement.onclick = function (evt) {
- origCallback.call(this, evt);
- return false;
- };
- } else {
- this.targetElement.onclick = function () { return false; };
- }
- }
-
- /*
- var elm = this.targetElement;
- do {
- // If the target element or one of its offsetParents has fixed position,
- // then use fixed positioning instead
- //
- // Note: In Firefox, getComputedStyle returns null in a hidden iframe,
- // that's why we need to check if the returned style object is non-empty
- var currStyle = jsc.getStyle(elm);
- if (currStyle && currStyle.position.toLowerCase() === 'fixed') {
- this.fixed = true;
- }
-
- if (elm !== this.targetElement) {
- // attach onParentScroll so that we can recompute the picker position
- // when one of the offsetParents is scrolled
- if (!elm._jscEventsAttached) {
- jsc.attachEvent(elm, 'scroll', jsc.onParentScroll);
- elm._jscEventsAttached = true;
- }
- }
- } while ((elm = elm.offsetParent) && !jsc.isElementType(elm, 'body'));
- */
-
- // valueElement
- if (this.valueElement) {
- if (jsc.isElementType(this.valueElement, 'input')) {
- var updateField = function () {
- THIS.fromString(THIS.valueElement.value, jsc.leaveValue);
- jsc.dispatchFineChange(THIS);
- };
- jsc.attachEvent(this.valueElement, 'keyup', updateField);
- jsc.attachEvent(this.valueElement, 'input', updateField);
- jsc.attachEvent(this.valueElement, 'blur', blurValue);
- this.valueElement.setAttribute('autocomplete', 'off');
- }
- }
-
- // styleElement
- if (this.styleElement) {
- this.styleElement._jscOrigStyle = {
- backgroundImage : this.styleElement.style.backgroundImage,
- backgroundColor : this.styleElement.style.backgroundColor,
- color : this.styleElement.style.color
- };
- }
-
- if (this.value) {
- // Try to set the color from the .value option and if unsuccessful,
- // export the current color
- this.fromString(this.value) || this.exportColor();
- } else {
- this.importColor();
- }
- }
-
-};
-
-
-//================================
-// Public properties and methods
-//================================
-
-
-// By default, search for all elements with class="jscolor" and install a color picker on them.
-//
-// You can change what class name will be looked for by setting the property jscolor.lookupClass
-// anywhere in your HTML document. To completely disable the automatic lookup, set it to null.
-//
-jsc.jscolor.lookupClass = 'jscolor';
-
-
-jsc.jscolor.installByClassName = function (className) {
- var inputElms = document.getElementsByTagName('input');
- var buttonElms = document.getElementsByTagName('button');
-
- jsc.tryInstallOnElements(inputElms, className);
- jsc.tryInstallOnElements(buttonElms, className);
-};
-
-
-jsc.register();
-
-
-return jsc.jscolor;
-
-
-})(); }
diff --git a/wqflask/wqflask/static/new/js_external/json2.js b/wqflask/wqflask/static/new/js_external/json2.js
deleted file mode 100644
index c7745df8..00000000
--- a/wqflask/wqflask/static/new/js_external/json2.js
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- json2.js
- 2012-10-08
-
- Public Domain.
-
- NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
-
- See http://www.JSON.org/js.html
-
-
- This code should be minified before deployment.
- See http://javascript.crockford.com/jsmin.html
-
- USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
- NOT CONTROL.
-
-
- This file creates a global JSON object containing two methods: stringify
- and parse.
-
- JSON.stringify(value, replacer, space)
- value any JavaScript value, usually an object or array.
-
- replacer an optional parameter that determines how object
- values are stringified for objects. It can be a
- function or an array of strings.
-
- space an optional parameter that specifies the indentation
- of nested structures. If it is omitted, the text will
- be packed without extra whitespace. If it is a number,
- it will specify the number of spaces to indent at each
- level. If it is a string (such as '\t' or '&nbsp;'),
- it contains the characters used to indent at each level.
-
- This method produces a JSON text from a JavaScript value.
-
- When an object value is found, if the object contains a toJSON
- method, its toJSON method will be called and the result will be
- stringified. A toJSON method does not serialize: it returns the
- value represented by the name/value pair that should be serialized,
- or undefined if nothing should be serialized. The toJSON method
- will be passed the key associated with the value, and this will be
- bound to the value
-
- For example, this would serialize Dates as ISO strings.
-
- Date.prototype.toJSON = function (key) {
- function f(n) {
- // Format integers to have at least two digits.
- return n < 10 ? '0' + n : n;
- }
-
- return this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z';
- };
-
- You can provide an optional replacer method. It will be passed the
- key and value of each member, with this bound to the containing
- object. The value that is returned from your method will be
- serialized. If your method returns undefined, then the member will
- be excluded from the serialization.
-
- If the replacer parameter is an array of strings, then it will be
- used to select the members to be serialized. It filters the results
- such that only members with keys listed in the replacer array are
- stringified.
-
- Values that do not have JSON representations, such as undefined or
- functions, will not be serialized. Such values in objects will be
- dropped; in arrays they will be replaced with null. You can use
- a replacer function to replace those with JSON values.
- JSON.stringify(undefined) returns undefined.
-
- The optional space parameter produces a stringification of the
- value that is filled with line breaks and indentation to make it
- easier to read.
-
- If the space parameter is a non-empty string, then that string will
- be used for indentation. If the space parameter is a number, then
- the indentation will be that many spaces.
-
- Example:
-
- text = JSON.stringify(['e', {pluribus: 'unum'}]);
- // text is '["e",{"pluribus":"unum"}]'
-
-
- text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
- // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
-
- text = JSON.stringify([new Date()], function (key, value) {
- return this[key] instanceof Date ?
- 'Date(' + this[key] + ')' : value;
- });
- // text is '["Date(---current time---)"]'
-
-
- JSON.parse(text, reviver)
- This method parses a JSON text to produce an object or array.
- It can throw a SyntaxError exception.
-
- The optional reviver parameter is a function that can filter and
- transform the results. It receives each of the keys and values,
- and its return value is used instead of the original value.
- If it returns what it received, then the structure is not modified.
- If it returns undefined then the member is deleted.
-
- Example:
-
- // Parse the text. Values that look like ISO date strings will
- // be converted to Date objects.
-
- myData = JSON.parse(text, function (key, value) {
- var a;
- if (typeof value === 'string') {
- a =
-/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
- if (a) {
- return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
- +a[5], +a[6]));
- }
- }
- return value;
- });
-
- myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
- var d;
- if (typeof value === 'string' &&
- value.slice(0, 5) === 'Date(' &&
- value.slice(-1) === ')') {
- d = new Date(value.slice(5, -1));
- if (d) {
- return d;
- }
- }
- return value;
- });
-
-
- This is a reference implementation. You are free to copy, modify, or
- redistribute.
-*/
-
-/*jslint evil: true, regexp: true */
-
-/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
- call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
- getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
- lastIndex, length, parse, prototype, push, replace, slice, stringify,
- test, toJSON, toString, valueOf
-*/
-
-
-// Create a JSON object only if one does not already exist. We create the
-// methods in a closure to avoid creating global variables.
-
-if (typeof JSON !== 'object') {
- JSON = {};
-}
-
-(function () {
- 'use strict';
-
- function f(n) {
- // Format integers to have at least two digits.
- return n < 10 ? '0' + n : n;
- }
-
- if (typeof Date.prototype.toJSON !== 'function') {
-
- Date.prototype.toJSON = function (key) {
-
- return isFinite(this.valueOf())
- ? this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z'
- : null;
- };
-
- String.prototype.toJSON =
- Number.prototype.toJSON =
- Boolean.prototype.toJSON = function (key) {
- return this.valueOf();
- };
- }
-
- var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- gap,
- indent,
- meta = { // table of character substitutions
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\f': '\\f',
- '\r': '\\r',
- '"' : '\\"',
- '\\': '\\\\'
- },
- rep;
-
-
- function quote(string) {
-
-// If the string contains no control characters, no quote characters, and no
-// backslash characters, then we can safely slap some quotes around it.
-// Otherwise we must also replace the offending characters with safe escape
-// sequences.
-
- escapable.lastIndex = 0;
- return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
- var c = meta[a];
- return typeof c === 'string'
- ? c
- : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- }) + '"' : '"' + string + '"';
- }
-
-
- function str(key, holder) {
-
-// Produce a string from holder[key].
-
- var i, // The loop counter.
- k, // The member key.
- v, // The member value.
- length,
- mind = gap,
- partial,
- value = holder[key];
-
-// If the value has a toJSON method, call it to obtain a replacement value.
-
- if (value && typeof value === 'object' &&
- typeof value.toJSON === 'function') {
- value = value.toJSON(key);
- }
-
-// If we were called with a replacer function, then call the replacer to
-// obtain a replacement value.
-
- if (typeof rep === 'function') {
- value = rep.call(holder, key, value);
- }
-
-// What happens next depends on the value's type.
-
- switch (typeof value) {
- case 'string':
- return quote(value);
-
- case 'number':
-
-// JSON numbers must be finite. Encode non-finite numbers as null.
-
- return isFinite(value) ? String(value) : 'null';
-
- case 'boolean':
- case 'null':
-
-// If the value is a boolean or null, convert it to a string. Note:
-// typeof null does not produce 'null'. The case is included here in
-// the remote chance that this gets fixed someday.
-
- return String(value);
-
-// If the type is 'object', we might be dealing with an object or an array or
-// null.
-
- case 'object':
-
-// Due to a specification blunder in ECMAScript, typeof null is 'object',
-// so watch out for that case.
-
- if (!value) {
- return 'null';
- }
-
-// Make an array to hold the partial results of stringifying this object value.
-
- gap += indent;
- partial = [];
-
-// Is the value an array?
-
- if (Object.prototype.toString.apply(value) === '[object Array]') {
-
-// The value is an array. Stringify every element. Use null as a placeholder
-// for non-JSON values.
-
- length = value.length;
- for (i = 0; i < length; i += 1) {
- partial[i] = str(i, value) || 'null';
- }
-
-// Join all of the elements together, separated with commas, and wrap them in
-// brackets.
-
- v = partial.length === 0
- ? '[]'
- : gap
- ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
- : '[' + partial.join(',') + ']';
- gap = mind;
- return v;
- }
-
-// If the replacer is an array, use it to select the members to be stringified.
-
- if (rep && typeof rep === 'object') {
- length = rep.length;
- for (i = 0; i < length; i += 1) {
- if (typeof rep[i] === 'string') {
- k = rep[i];
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- } else {
-
-// Otherwise, iterate through all of the keys in the object.
-
- for (k in value) {
- if (Object.prototype.hasOwnProperty.call(value, k)) {
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- }
-
-// Join all of the member texts together, separated with commas,
-// and wrap them in braces.
-
- v = partial.length === 0
- ? '{}'
- : gap
- ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
- : '{' + partial.join(',') + '}';
- gap = mind;
- return v;
- }
- }
-
-// If the JSON object does not yet have a stringify method, give it one.
-
- if (typeof JSON.stringify !== 'function') {
- JSON.stringify = function (value, replacer, space) {
-
-// The stringify method takes a value and an optional replacer, and an optional
-// space parameter, and returns a JSON text. The replacer can be a function
-// that can replace values, or an array of strings that will select the keys.
-// A default replacer method can be provided. Use of the space parameter can
-// produce text that is more easily readable.
-
- var i;
- gap = '';
- indent = '';
-
-// If the space parameter is a number, make an indent string containing that
-// many spaces.
-
- if (typeof space === 'number') {
- for (i = 0; i < space; i += 1) {
- indent += ' ';
- }
-
-// If the space parameter is a string, it will be used as the indent string.
-
- } else if (typeof space === 'string') {
- indent = space;
- }
-
-// If there is a replacer, it must be a function or an array.
-// Otherwise, throw an error.
-
- rep = replacer;
- if (replacer && typeof replacer !== 'function' &&
- (typeof replacer !== 'object' ||
- typeof replacer.length !== 'number')) {
- throw new Error('JSON.stringify');
- }
-
-// Make a fake root object containing our value under the key of ''.
-// Return the result of stringifying the value.
-
- return str('', {'': value});
- };
- }
-
-
-// If the JSON object does not yet have a parse method, give it one.
-
- if (typeof JSON.parse !== 'function') {
- JSON.parse = function (text, reviver) {
-
-// The parse method takes a text and an optional reviver function, and returns
-// a JavaScript value if the text is a valid JSON text.
-
- var j;
-
- function walk(holder, key) {
-
-// The walk method is used to recursively walk the resulting structure so
-// that modifications can be made.
-
- var k, v, value = holder[key];
- if (value && typeof value === 'object') {
- for (k in value) {
- if (Object.prototype.hasOwnProperty.call(value, k)) {
- v = walk(value, k);
- if (v !== undefined) {
- value[k] = v;
- } else {
- delete value[k];
- }
- }
- }
- }
- return reviver.call(holder, key, value);
- }
-
-
-// Parsing happens in four stages. In the first stage, we replace certain
-// Unicode characters with escape sequences. JavaScript handles many characters
-// incorrectly, either silently deleting them, or treating them as line endings.
-
- text = String(text);
- cx.lastIndex = 0;
- if (cx.test(text)) {
- text = text.replace(cx, function (a) {
- return '\\u' +
- ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- });
- }
-
-// In the second stage, we run the text against regular expressions that look
-// for non-JSON patterns. We are especially concerned with '()' and 'new'
-// because they can cause invocation, and '=' because it can cause mutation.
-// But just to be safe, we want to reject all unexpected forms.
-
-// We split the second stage into 4 regexp operations in order to work around
-// crippling inefficiencies in IE's and Safari's regexp engines. First we
-// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
-// replace all simple value tokens with ']' characters. Third, we delete all
-// open brackets that follow a colon or comma or that begin the text. Finally,
-// we look to see that the remaining characters are only whitespace or ']' or
-// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
-
- if (/^[\],:{}\s]*$/
- .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
- .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
- .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
-
-// In the third stage we use the eval function to compile the text into a
-// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
-// in JavaScript: it can begin a block or an object literal. We wrap the text
-// in parens to eliminate the ambiguity.
-
- j = eval('(' + text + ')');
-
-// In the optional fourth stage, we recursively walk the new structure, passing
-// each name/value pair to a reviver function for possible transformation.
-
- return typeof reviver === 'function'
- ? walk({'': j}, '')
- : j;
- }
-
-// If the text is not JSON parseable, then a SyntaxError is thrown.
-
- throw new SyntaxError('JSON.parse');
- };
- }
-}());
diff --git a/wqflask/wqflask/static/new/js_external/jstat.min.js b/wqflask/wqflask/static/new/js_external/jstat.min.js
deleted file mode 100644
index 28de9c1a..00000000
--- a/wqflask/wqflask/static/new/js_external/jstat.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-this.j$=this.jStat=function(a,b){function f(b,c){var d=b>c?b:c;return a.pow(10,17-~~(a.log(d>0?d:-d)*a.LOG10E))}function h(a){return e.call(a)==="[object Function]"}function i(a){return typeof a=="number"&&a===a}function j(a){return c.apply([],a)}function k(){return new k._init(arguments)}function l(){return 0}function m(){return 1}function n(a,b){return a===b?1:0}var c=Array.prototype.concat,d=Array.prototype.slice,e=Object.prototype.toString,g=Array.isArray||function(b){return e.call(b)==="[object Array]"};k.fn=k.prototype,k._init=function(b){var c;if(g(b[0]))if(g(b[0][0])){h(b[1])&&(b[0]=k.map(b[0],b[1]));for(c=0;c<b[0].length;c++)this[c]=b[0][c];this.length=b[0].length}else this[0]=h(b[1])?k.map(b[0],b[1]):b[0],this.length=1;else if(i(b[0]))this[0]=k.seq.apply(null,b),this.length=1;else{if(b[0]instanceof k)return k(b[0].toArray());this[0]=[],this.length=1}return this},k._init.prototype=k.prototype,k._init.constructor=k,k.utils={calcRdx:f,isArray:g,isFunction:h,isNumber:i,toVector:j},k.extend=function(b){var c,d;if(arguments.length===1){for(d in b)k[d]=b[d];return this}for(c=1;c<arguments.length;c++)for(d in arguments[c])b[d]=arguments[c][d];return b},k.rows=function(b){return b.length||1},k.cols=function(b){return b[0].length||1},k.dimensions=function(b){return{rows:k.rows(b),cols:k.cols(b)}},k.row=function(b,c){return b[c]},k.col=function(b,c){var d=new Array(b.length);for(var e=0;e<b.length;e++)d[e]=[b[e][c]];return d},k.diag=function(b){var c=k.rows(b),d=new Array(c);for(var e=0;e<c;e++)d[e]=[b[e][e]];return d},k.antidiag=function(b){var c=k.rows(b)-1,d=new Array(c);for(var e=0;c>=0;c--,e++)d[e]=[b[e][c]];return d},k.transpose=function(b){var c=[],d,e,f,h,i;g(b[0])||(b=[b]),e=b.length,f=b[0].length;for(i=0;i<f;i++){d=new Array(e);for(h=0;h<e;h++)d[h]=b[h][i];c.push(d)}return c.length===1?c[0]:c},k.map=function(b,c,d){var e,f,h,i,j;g(b[0])||(b=[b]),f=b.length,h=b[0].length,i=d?b:new Array(f);for(e=0;e<f;e++){i[e]||(i[e]=new Array(h));for(j=0;j<h;j++)i[e][j]=c(b[e][j],e,j)}return i.length===1?i[0]:i},k.cumreduce=function(b,c,d){var e,f,h,i,j;g(b[0])||(b=[b]),f=b.length,h=b[0].length,i=d?b:new Array(f);for(e=0;e<f;e++){i[e]||(i[e]=new Array(h)),h>0&&(i[e][0]=b[e][0]);for(j=1;j<h;j++)i[e][j]=c(i[e][j-1],b[e][j])}return i.length===1?i[0]:i},k.alter=function(b,c){return k.map(b,c,!0)},k.create=function(b,c,d){var e=new Array(b),f,g;h(c)&&(d=c,c=b);for(f=0;f<b;f++){e[f]=new Array(c);for(g=0;g<c;g++)e[f][g]=d(f,g)}return e},k.zeros=function(b,c){return i(c)||(c=b),k.create(b,c,l)},k.ones=function(b,c){return i(c)||(c=b),k.create(b,c,m)},k.rand=function(c,d){return i(d)||(d=c),k.create(c,d,a.random)},k.identity=function(b,c){return i(c)||(c=b),k.create(b,c,n)},k.symmetric=function(b){var c=!0,d=b.length,e,f;if(b.length!==b[0].length)return!1;for(e=0;e<d;e++)for(f=0;f<d;f++)if(b[f][e]!==b[e][f])return!1;return!0},k.clear=function(b){return k.alter(b,l)},k.seq=function(b,c,d,e){h(e)||(e=!1);var g=[],i=f(b,c),j=(c*i-b*i)/((d-1)*i),k=b,l;for(l=0;k<=c;l++,k=(b*i+j*i*l)/i)g.push(e?e(k,l):k);return g};var o=k.prototype;return o.length=0,o.push=Array.prototype.push,o.sort=Array.prototype.sort,o.splice=Array.prototype.splice,o.slice=Array.prototype.slice,o.toArray=function(){return this.length>1?d.call(this):d.call(this)[0]},o.map=function(b,c){return k(k.map(this,b,c))},o.cumreduce=function(b,c){return k(k.cumreduce(this,b,c))},o.alter=function(b){return k.alter(this,b),this},function(a){for(var b=0;b<a.length;b++)(function(a){o[a]=function(b){var c=this,d;return b?(setTimeout(function(){b.call(c,o[a].call(c))}),this):(d=k[a](this),g(d)?k(d):d)}})(a[b])}("transpose clear symmetric rows cols dimensions diag antidiag".split(" ")),function(a){for(var b=0;b<a.length;b++)(function(a){o[a]=function(b,c){var d=this;return c?(setTimeout(function(){c.call(d,o[a].call(d,b))}),this):k(k[a](this,b))}})(a[b])}("row col".split(" ")),function(a){for(var b=0;b<a.length;b++)(function(a){o[a]=new Function("return jStat(jStat."+a+".apply(null, arguments));")})(a[b])}("create zeros ones rand identity".split(" ")),k}(Math),function(a,b){function d(a,b){return a-b}function e(a,c,d){return b.max(c,b.min(a,d))}var c=a.utils.isFunction;a.sum=function g(a){var g=0,b=a.length,c;while(--b>=0)g+=a[b];return g},a.sumsqrd=function(b){var c=0,d=b.length;while(--d>=0)c+=b[d]*b[d];return c},a.sumsqerr=function(c){var d=a.mean(c),e=0,f=c.length,g;while(--f>=0)g=c[f]-d,e+=g*g;return e},a.product=function(b){var c=1,d=b.length;while(--d>=0)c*=b[d];return c},a.min=function(b){var c=b[0],d=0;while(++d<b.length)b[d]<c&&(c=b[d]);return c},a.max=function(b){var c=b[0],d=0;while(++d<b.length)b[d]>c&&(c=b[d]);return c},a.mean=function(c){return a.sum(c)/c.length},a.meansqerr=function(c){return a.sumsqerr(c)/c.length},a.geomean=function(d){return b.pow(a.product(d),1/d.length)},a.median=function(b){var c=b.length,e=b.slice().sort(d);return c&1?e[c/2|0]:(e[c/2-1]+e[c/2])/2},a.cumsum=function(c){return a.cumreduce(c,function(a,b){return a+b})},a.cumprod=function(c){return a.cumreduce(c,function(a,b){return a*b})},a.diff=function(b){var c=[],d=b.length,e;for(e=1;e<d;e++)c.push(b[e]-b[e-1]);return c},a.mode=function(b){var c=b.length,e=b.slice().sort(d),f=1,g=0,h=0,i=[],j;for(j=0;j<c;j++)e[j]===e[j+1]?f++:(f>g?(i=[e[j]],g=f,h=0):f===g&&(i.push(e[j]),h++),f=1);return h===0?i[0]:i},a.range=function(c){return a.max(c)-a.min(c)},a.variance=function(c,d){return a.sumsqerr(c)/(c.length-(d?1:0))},a.stdev=function(d,e){return b.sqrt(a.variance(d,e))},a.meandev=function(d){var e=0,f=a.mean(d),g;for(g=d.length-1;g>=0;g--)e+=b.abs(d[g]-f);return e/d.length},a.meddev=function(d){var e=0,f=a.median(d),g;for(g=d.length-1;g>=0;g--)e+=b.abs(d[g]-f);return e/d.length},a.coeffvar=function(c){return a.stdev(c)/a.mean(c)},a.quartiles=function(c){var e=c.length,f=c.slice().sort(d);return[f[b.round(e/4)-1],f[b.round(e/2)-1],f[b.round(e*3/4)-1]]},a.quantiles=function(c,f,g,h){var i=c.slice().sort(d),j=[f.length],k=c.length,l,m,n,o,p,q;typeof g=="undefined"&&(g=3/8),typeof h=="undefined"&&(h=3/8);for(l=0;l<f.length;l++)m=f[l],n=g+m*(1-g-h),o=k*m+n,p=b.floor(e(o,1,k-1)),q=e(o-p,0,1),j[l]=(1-q)*i[p-1]+q*i[p];return j},a.percentileOfScore=function(b,c,d){var e=0,f=b.length,g=!1,h,i;d==="strict"&&(g=!0);for(i=0;i<f;i++)h=b[i],(g&&h<c||!g&&h<=c)&&e++;return e/f},a.histogram=function(d,e){var f=a.min(d),g=e||4,h=(a.max(d)-f)/g,i=d.length,e=[],j;for(j=0;j<g;j++)e[j]=0;for(j=0;j<i;j++)e[b.min(b.floor((d[j]-f)/h),g-1)]+=1;return e},a.covariance=function(c,d){var e=a.mean(c),f=a.mean(d),g=c.length,h=new Array(g),i;for(i=0;i<g;i++)h[i]=(c[i]-e)*(d[i]-f);return a.sum(h)/(g-1)},a.corrcoeff=function(c,d){return a.covariance(c,d)/a.stdev(c,1)/a.stdev(d,1)},a.stanMoment=function(d,e){var f=a.mean(d),g=a.stdev(d),h=d.length,j=0;for(i=0;i<h;i++)j+=b.pow((d[i]-f)/g,e);return j/d.length},a.skewness=function(c){return a.stanMoment(c,3)},a.kurtosis=function(c){return a.stanMoment(c,4)-3};var f=a.prototype;(function(b){for(var d=0;d<b.length;d++)(function(b){f[b]=function(d,e){var g=[],h=0,i=this;c(d)&&(e=d,d=!1);if(e)return setTimeout(function(){e.call(i,f[b].call(i,d))}),this;if(this.length>1){i=d===!0?this:this.transpose();for(;h<i.length;h++)g[h]=a[b](i[h]);return g}return a[b](this[0],d)}})(b[d])})("cumsum cumprod".split(" ")),function(b){for(var d=0;d<b.length;d++)(function(b){f[b]=function(d,e){var g=[],h=0,i=this;c(d)&&(e=d,d=!1);if(e)return setTimeout(function(){e.call(i,f[b].call(i,d))}),this;if(this.length>1){i=d===!0?this:this.transpose();for(;h<i.length;h++)g[h]=a[b](i[h]);return d===!0?a[b](a.utils.toVector(g)):g}return a[b](this[0],d)}})(b[d])}("sum sumsqrd sumsqerr product min max mean meansqerr geomean median diff mode range variance stdev meandev meddev coeffvar quartiles histogram skewness kurtosis".split(" ")),function(b){for(var d=0;d<b.length;d++)(function(b){f[b]=function(){var d=[],e=0,g=this,h=Array.prototype.slice.call(arguments);if(c(h[h.length-1])){var i=h[h.length-1],j=h.slice(0,h.length-1);return setTimeout(function(){i.call(g,f[b].apply(g,j))}),this}var i=undefined,k=function(d){return a[b].apply(g,[d].concat(h))};if(this.length>1){g=g.transpose();for(;e<g.length;e++)d[e]=k(g[e]);return d}return k(this[0])}})(b[d])}("quantiles percentileOfScore".split(" "))}(this.jStat,Math),function(a,b){a.gammaln=function(c){var d=0,e=[76.18009172947146,-86.50532032941678,24.01409824083091,-1.231739572450155,.001208650973866179,-0.000005395239384953],f=1.000000000190015,g,h,i;i=(h=g=c)+5.5,i-=(g+.5)*b.log(i);for(;d<6;d++)f+=e[d]/++h;return b.log(2.5066282746310007*f/g)-i},a.gammafn=function(c){var d=[-1.716185138865495,24.76565080557592,-379.80425647094563,629.3311553128184,866.9662027904133,-31451.272968848367,-36144.413418691176,66456.14382024054],e=[-30.8402300119739,315.35062697960416,-1015.1563674902192,-3107.771671572311,22538.11842098015,4755.846277527881,-134659.9598649693,-115132.2596755535],f=!1,g=0,h=0,i=0,j=c,k,l,m,n,o,p;if(j<=0){n=j%1+3.6e-16;if(n)f=(j&1?-1:1)*b.PI/b.sin(b.PI*n),j=1-j;else return Infinity}m=j,j<1?l=j++:l=(j-=g=(j|0)-1)-1;for(k=0;k<8;++k)i=(i+d[k])*l,h=h*l+e[k];n=i/h+1;if(m<j)n/=m;else if(m>j)for(k=0;k<g;++k)n*=j,j++;return f&&(n=f/n),n},a.gammap=function(c,d){return a.lowRegGamma(c,d)*a.gammafn(c)},a.lowRegGamma=function(d,e){var f=a.gammaln(d),g=d,h=1/d,i=h,j=e+1-d,k=1/1e-30,l=1/j,m=l,n=1,o=-~(b.log(d>=1?d:1/d)*8.5+d*.4+17),p,q;if(e<0||d<=0)return NaN;if(e<d+1){for(;n<=o;n++)h+=i*=e/++g;return h*b.exp(-e+d*b.log(e)-f)}for(;n<=o;n++)p=-n*(n-d),j+=2,l=p*l+j,k=j+p/k,l=1/l,m*=l*k;return 1-m*b.exp(-e+d*b.log(e)-f)},a.factorialln=function(c){return c<0?NaN:a.gammaln(c+1)},a.factorial=function(c){return c<0?NaN:a.gammafn(c+1)},a.combination=function(d,e){return d>170||e>170?b.exp(a.combinationln(d,e)):a.factorial(d)/a.factorial(e)/a.factorial(d-e)},a.combinationln=function(c,d){return a.factorialln(c)-a.factorialln(d)-a.factorialln(c-d)},a.permutation=function(c,d){return a.factorial(c)/a.factorial(c-d)},a.betafn=function(d,e){return d<=0||e<=0?undefined:d+e>170?b.exp(a.betaln(d,e)):a.gammafn(d)*a.gammafn(e)/a.gammafn(d+e)},a.betaln=function(c,d){return a.gammaln(c)+a.gammaln(d)-a.gammaln(c+d)},a.betacf=function(c,d,e){var f=1e-30,g=1,h=d+e,i=d+1,j=d-1,k=1,l=1-h*c/i,m,n,o,p;b.abs(l)<f&&(l=f),l=1/l,p=l;for(;g<=100;g++){m=2*g,n=g*(e-g)*c/((j+m)*(d+m)),l=1+n*l,b.abs(l)<f&&(l=f),k=1+n/k,b.abs(k)<f&&(k=f),l=1/l,p*=l*k,n=-(d+g)*(h+g)*c/((d+m)*(i+m)),l=1+n*l,b.abs(l)<f&&(l=f),k=1+n/k,b.abs(k)<f&&(k=f),l=1/l,o=l*k,p*=o;if(b.abs(o-1)<3e-7)break}return p},a.gammapinv=function(d,e){var f=0,g=e-1,h=1e-8,i=a.gammaln(e),j,k,l,m,n,o,p;if(d>=1)return b.max(100,e+100*b.sqrt(e));if(d<=0)return 0;e>1?(o=b.log(g),p=b.exp(g*(o-1)-i),n=d<.5?d:1-d,l=b.sqrt(-2*b.log(n)),j=(2.30753+l*.27061)/(1+l*(.99229+l*.04481))-l,d<.5&&(j=-j),j=b.max(.001,e*b.pow(1-1/(9*e)-j/(3*b.sqrt(e)),3))):(l=1-e*(.253+e*.12),d<l?j=b.pow(d/l,1/e):j=1-b.log(1-(d-l)/(1-l)));for(;f<12;f++){if(j<=0)return 0;k=a.lowRegGamma(e,j)-d,e>1?l=p*b.exp(-(j-g)+g*(b.log(j)-o)):l=b.exp(-j+g*b.log(j)-i),m=k/l,j-=l=m/(1-.5*b.min(1,m*((e-1)/j-1))),j<=0&&(j=.5*(j+l));if(b.abs(l)<h*j)break}return j},a.erf=function(c){var d=[-1.3026537197817094,.6419697923564902,.019476473204185836,-0.00956151478680863,-0.000946595344482036,.000366839497852761,42523324806907e-18,-0.000020278578112534,-0.000001624290004647,130365583558e-17,1.5626441722e-8,-8.5238095915e-8,6.529054439e-9,5.059343495e-9,-9.91364156e-10,-2.27365122e-10,9.6467911e-11,2.394038e-12,-6.886027e-12,8.94487e-13,3.13092e-13,-1.12708e-13,3.81e-16,7.106e-15,-1.523e-15,-9.4e-17,1.21e-16,-2.8e-17],e=d.length-1,f=!1,g=0,h=0,i,j,k,l;c<0&&(c=-c,f=!0),i=2/(2+c),j=4*i-2;for(;e>0;e--)k=g,g=j*g-h+d[e],h=k;return l=i*b.exp(-c*c+.5*(d[0]+j*g)-h),f?l-1:1-l},a.erfc=function(c){return 1-a.erf(c)},a.erfcinv=function(d){var e=0,f,g,h,i;if(d>=2)return-100;if(d<=0)return 100;i=d<1?d:2-d,h=b.sqrt(-2*b.log(i/2)),f=-0.70711*((2.30753+h*.27061)/(1+h*(.99229+h*.04481))-h);for(;e<2;e++)g=a.erfc(f)-i,f+=g/(1.1283791670955126*b.exp(-f*f)-f*g);return d<1?f:-f},a.ibetainv=function(d,e,f){var g=1e-8,h=e-1,i=f-1,j=0,k,l,m,n,o,p,q,r,s,t,u;if(d<=0)return 0;if(d>=1)return 1;e>=1&&f>=1?(m=d<.5?d:1-d,n=b.sqrt(-2*b.log(m)),q=(2.30753+n*.27061)/(1+n*(.99229+n*.04481))-n,d<.5&&(q=-q),r=(q*q-3)/6,s=2/(1/(2*e-1)+1/(2*f-1)),t=q*b.sqrt(r+s)/s-(1/(2*f-1)-1/(2*e-1))*(r+5/6-2/(3*s)),q=e/(e+f*b.exp(2*t))):(k=b.log(e/(e+f)),l=b.log(f/(e+f)),n=b.exp(e*k)/e,o=b.exp(f*l)/f,t=n+o,d<n/t?q=b.pow(e*t*d,1/e):q=1-b.pow(f*t*(1-d),1/f)),u=-a.gammaln(e)-a.gammaln(f)+a.gammaln(e+f);for(;j<10;j++){if(q===0||q===1)return q;p=a.ibeta(q,e,f)-d,n=b.exp(h*b.log(q)+i*b.log(1-q)+u),o=p/n,q-=n=o/(1-.5*b.min(1,o*(h/q-i/(1-q)))),q<=0&&(q=.5*(q+n)),q>=1&&(q=.5*(q+n+1));if(b.abs(n)<g*q&&j>0)break}return q},a.ibeta=function(d,e,f){var g=d===0||d===1?0:b.exp(a.gammaln(e+f)-a.gammaln(e)-a.gammaln(f)+e*b.log(d)+f*b.log(1-d));return d<0||d>1?!1:d<(e+1)/(e+f+2)?g*a.betacf(d,e,f)/e:1-g*a.betacf(1-d,f,e)/f},a.randn=function(d,e){var f,g,h,i,j,k;e||(e=d);if(d)return a.create(d,e,function(){return a.randn()});do f=b.random(),g=1.7156*(b.random()-.5),h=f-.449871,i=b.abs(g)+.386595,j=h*h+i*(.196*i-.25472*h);while(j>.27597&&(j>.27846||g*g>-4*b.log(f)*f*f));return g/f},a.randg=function(d,e,f){var g=d,h,i,j,k,l,m;f||(f=e),d||(d=1);if(e)return m=a.zeros(e,f),m.alter(function(){return a.randg(d)}),m;d<1&&(d+=1),h=d-1/3,i=1/b.sqrt(9*h);do{do l=a.randn(),k=1+i*l;while(k<=0);k=k*k*k,j=b.random()}while(j>1-.331*b.pow(l,4)&&b.log(j)>.5*l*l+h*(1-k+b.log(k)));if(d==g)return h*k;do j=b.random();while(j===0);return b.pow(j,1/g)*h*k},function(b){for(var c=0;c<b.length;c++)(function(b){a.fn[b]=function(){return a(a.map(this,function(c){return a[b](c)}))}})(b[c])}("gammaln gammafn factorial factorialln".split(" ")),function(b){for(var c=0;c<b.length;c++)(function(b){a.fn[b]=function(){return a(a[b].apply(null,arguments))}})(b[c])}("randn".split(" "))}(this.jStat,Math),function(a,b){(function(b){for(var c=0;c<b.length;c++)(function(b){a[b]=function(a,b,c){return this instanceof arguments.callee?(this._a=a,this._b=b,this._c=c,this):new arguments.callee(a,b,c)},a.fn[b]=function(c,d,e){var f=a[b](c,d,e);return f.data=this,f},a[b].prototype.sample=function(c){var d=this._a,e=this._b,f=this._c;return c?a.alter(c,function(){return a[b].sample(d,e,f)}):a[b].sample(d,e,f)},function(c){for(var d=0;d<c.length;d++)(function(c){a[b].prototype[c]=function(d){var e=this._a,f=this._b,g=this._c;return!d&&d!==0&&(d=this.data),typeof d!="number"?a.fn.map.call(d,function(d){return a[b][c](d,e,f,g)}):a[b][c](d,e,f,g)}})(c[d])}("pdf cdf inv".split(" ")),function(c){for(var d=0;d<c.length;d++)(function(c){a[b].prototype[c]=function(){return a[b][c](this._a,this._b,this._c)}})(c[d])}("mean median mode variance".split(" "))})(b[c])})("beta centralF cauchy chisquare exponential gamma invgamma kumaraswamy lognormal noncentralt normal pareto studentt weibull uniform binomial negbin hypgeom poisson triangular".split(" ")),a.extend(a.beta,{pdf:function(d,e,f){return d>1||d<0?0:e==1&&f==1?1:e<512||f<512?b.pow(d,e-1)*b.pow(1-d,f-1)/a.betafn(e,f):b.exp((e-1)*b.log(d)+(f-1)*b.log(1-d)-a.betaln(e,f))},cdf:function(c,d,e){return c>1||c<0?(c>1)*1:a.ibeta(c,d,e)},inv:function(c,d,e){return a.ibetainv(c,d,e)},mean:function(b,c){return b/(b+c)},median:function(b,c){throw new Error("median not yet implemented")},mode:function(b,c){return(b-1)/(b+c-2)},sample:function(c,d){var e=a.randg(c);return e/(e+a.randg(d))},variance:function(c,d){return c*d/(b.pow(c+d,2)*(c+d+1))}}),a.extend(a.centralF,{pdf:function(d,e,f){var g,h,i;return d<0?undefined:e<=2?e===1&&f===1?Infinity:e===2&&f===1?1:b.sqrt(b.pow(e*d,e)*b.pow(f,f)/b.pow(e*d+f,e+f))/(d*a.betafn(e/2,f/2)):(g=e*d/(f+d*e),h=f/(f+d*e),i=e*h/2,i*a.binomial.pdf((e-2)/2,(e+f-2)/2,g))},cdf:function(c,d,e){return a.ibeta(d*c/(d*c+e),d/2,e/2)},inv:function(c,d,e){return e/(d*(1/a.ibetainv(c,d/2,e/2)-1))},mean:function(b,c){return c>2?c/(c-2):undefined},mode:function(b,c){return b>2?c*(b-2)/(b*(c+2)):undefined},sample:function(c,d){var e=a.randg(c/2)*2,f=a.randg(d/2)*2;return e/c/(f/d)},variance:function(b,c){return c<=4?undefined:2*c*c*(b+c-2)/(b*(c-2)*(c-2)*(c-4))}}),a.extend(a.cauchy,{pdf:function(c,d,e){return e/(b.pow(c-d,2)+b.pow(e,2))/b.PI},cdf:function(c,d,e){return b.atan((c-d)/e)/b.PI+.5},inv:function(a,c,d){return c+d*b.tan(b.PI*(a-.5))},median:function(b,c){return b},mode:function(b,c){return b},sample:function(d,e){return a.randn()*b.sqrt(1/(2*a.randg(.5)))*e+d}}),a.extend(a.chisquare,{pdf:function(d,e){return d===0?0:b.exp((e/2-1)*b.log(d)-d/2-e/2*b.log(2)-a.gammaln(e/2))},cdf:function(c,d){return a.lowRegGamma(d/2,c/2)},inv:function(b,c){return 2*a.gammapinv(b,.5*c)},mean:function(a){return a},median:function(c){return c*b.pow(1-2/(9*c),3)},mode:function(b){return b-2>0?b-2:0},sample:function(c){return a.randg(c/2)*2},variance:function(b){return 2*b}}),a.extend(a.exponential,{pdf:function(c,d){return c<0?0:d*b.exp(-d*c)},cdf:function(c,d){return c<0?0:1-b.exp(-d*c)},inv:function(a,c){return-b.log(1-a)/c},mean:function(a){return 1/a},median:function(a){return 1/a*b.log(2)},mode:function(b){return 0},sample:function(c){return-1/c*b.log(b.random())},variance:function(a){return b.pow(a,-2)}}),a.extend(a.gamma,{pdf:function(d,e,f){return b.exp((e-1)*b.log(d)-d/f-a.gammaln(e)-e*b.log(f))},cdf:function(c,d,e){return a.lowRegGamma(d,c/e)},inv:function(b,c,d){return a.gammapinv(b,c)*d},mean:function(a,b){return a*b},mode:function(b,c){return b>1?(b-1)*c:undefined},sample:function(c,d){return a.randg(c)*d},variance:function(b,c){return b*c*c}}),a.extend(a.invgamma,{pdf:function(d,e,f){return b.exp(-(e+1)*b.log(d)-f/d-a.gammaln(e)+e*b.log(f))},cdf:function(c,d,e){return 1-a.lowRegGamma(d,e/c)},inv:function(b,c,d){return d/a.gammapinv(1-b,c)},mean:function(a,b){return a>1?b/(a-1):undefined},mode:function(b,c){return c/(b+1)},sample:function(c,d){return d/a.randg(c)},variance:function(b,c){return b<=2?undefined:c*c/((b-1)*(b-1)*(b-2))}}),a.extend(a.kumaraswamy,{pdf:function(c,d,e){return b.exp(b.log(d)+b.log(e)+(d-1)*b.log(c)+(e-1)*b.log(1-b.pow(c,d)))},cdf:function(c,d,e){return 1-b.pow(1-b.pow(c,d),e)},mean:function(b,c){return c*a.gammafn(1+1/b)*a.gammafn(c)/a.gammafn(1+1/b+c)},median:function(c,d){return b.pow(1-b.pow(2,-1/d),1/c)},mode:function(c,d){return c>=1&&d>=1&&c!==1&&d!==1?b.pow((c-1)/(c*d-1),1/c):undefined},variance:function(b,c){throw new Error("variance not yet implemented")}}),a.extend(a.lognormal,{pdf:function(c,d,e){return b.exp(-b.log(c)-.5*b.log(2*b.PI)-b.log(e)-b.pow(b.log(c)-d,2)/(2*e*e))},cdf:function(d,e,f){return.5+.5*a.erf((b.log(d)-e)/b.sqrt(2*f*f))},inv:function(c,d,e){return b.exp(-1.4142135623730951*e*a.erfcinv(2*c)+d)},mean:function(c,d){return b.exp(c+d*d/2)},median:function(c,d){return b.exp(c)},mode:function(c,d){return b.exp(c-d*d)},sample:function(d,e){return b.exp(a.randn()*e+d)},variance:function(c,d){return(b.exp(d*d)-1)*b.exp(2*c+d*d)}}),a.extend(a.noncentralt,{pdf:function(d,e,f){var g=1e-14;return b.abs(f)<g?a.studentt.pdf(d,e):b.abs(d)<g?b.exp(a.gammaln((e+1)/2)-f*f/2-.5*b.log(b.PI*e)-a.gammaln(e/2)):e/d*(a.noncentralt.cdf(d*b.sqrt(1+2/e),e+2,f)-a.noncentralt.cdf(d,e,f))},cdf:function(d,e,f){var g=1e-14,h=200;if(b.abs(f)<g)return a.studentt.cdf(d,e);var i=!1;d<0&&(i=!0,f=-f);var j=a.normal.cdf(-f,0,1),k=g+1,l=k,m=d*d/(d*d+e),n=0,o=b.exp(-f*f/2),p=b.exp(-f*f/2-.5*b.log(2)-a.gammaln(1.5))*f;while(n<h||l>g||k>g)l=k,n>0&&(o*=f*f/(2*n),p*=f*f/(2*(n+.5))),k=o*a.beta.cdf(m,n+.5,e/2)+p*a.beta.cdf(m,n+1,e/2),j+=.5*k,n++;return i?1-j:j}}),a.extend(a.normal,{pdf:function(c,d,e){return b.exp(-0.5*b.log(2*b.PI)-b.log(e)-b.pow(c-d,2)/(2*e*e))},cdf:function(d,e,f){return.5*(1+a.erf((d-e)/b.sqrt(2*f*f)))},inv:function(b,c,d){return-1.4142135623730951*d*a.erfcinv(2*b)+c},mean:function(a,b){return a},median:function(b,c){return b},mode:function(a,b){return a},sample:function(c,d){return a.randn()*d+c},variance:function(a,b){return b*b}}),a.extend(a.pareto,{pdf:function(c,d,e){return c<d?undefined:e*b.pow(d,e)/b.pow(c,e+1)},cdf:function(c,d,e){return 1-b.pow(d/c,e)},mean:function(c,d){return d<=1?undefined:d*b.pow(c,d)/(d-1)},median:function(c,d){return c*d*b.SQRT2},mode:function(b,c){return b},variance:function(a,c){return c<=2?undefined:a*a*c/(b.pow(c-1,2)*(c-2))}}),a.extend(a.studentt,{pdf:function(d,e){return e=e>1e+100?1e+100:e,1/(b.sqrt(e)*a.betafn(.5,e/2))*b.pow(1+d*d/e,-((e+1)/2))},cdf:function(d,e){var f=e/2;return a.ibeta((d+b.sqrt(d*d+e))/(2*b.sqrt(d*d+e)),f,f)},inv:function(c,d){var e=a.ibetainv(2*b.min(c,1-c),.5*d,.5);return e=b.sqrt(d*(1-e)/e),c>.5?e:-e},mean:function(b){return b>1?0:undefined},median:function(b){return 0},mode:function(b){return 0},sample:function(d){return a.randn()*b.sqrt(d/(2*a.randg(d/2)))},variance:function(b){return b>2?b/(b-2):b>1?Infinity:undefined}}),a.extend(a.weibull,{pdf:function(c,d,e){return c<0?0:e/d*b.pow(c/d,e-1)*b.exp(-b.pow(c/d,e))},cdf:function(c,d,e){return c<0?0:1-b.exp(-b.pow(c/d,e))},inv:function(a,c,d){return c*b.pow(-b.log(1-a),1/d)},mean:function(b,c){return b*a.gammafn(1+1/c)},median:function(c,d){return c*b.pow(b.log(2),1/d)},mode:function(c,d){return d<=1?undefined:c*b.pow((d-1)/d,1/d)},sample:function(c,d){return c*b.pow(-b.log(b.random()),1/d)},variance:function(d,e){return d*d*a.gammafn(1+2/e)-b.pow(this.mean(d,e),2)}}),a.extend(a.uniform,{pdf:function(b,c,d){return b<c||b>d?0:1/(d-c)},cdf:function(b,c,d){return b<c?0:b<d?(b-c)/(d-c):1},inv:function(a,b,c){return b+a*(c-b)},mean:function(b,c){return.5*(b+c)},median:function(c,d){return a.mean(c,d)},mode:function(b,c){throw new Error("mode is not yet implemented")},sample:function(c,d){return c/2+d/2+(d/2-c/2)*(2*b.random()-1)},variance:function(c,d){return b.pow(d-c,2)/12}}),a.extend(a.binomial,{pdf:function(d,e,f){return f===0||f===1?e*f===d?1:0:a.combination(e,d)*b.pow(f,d)*b.pow(1-f,e-d)},cdf:function(c,d,e){var f=[],g=0;if(c<0)return 0;if(c<d){for(;g<=c;g++)f[g]=a.binomial.pdf(g,d,e);return a.sum(f)}return 1}}),a.extend(a.negbin,{pdf:function(d,e,f){return d!==d|0?!1:d<0?0:a.combination(d+e-1,e-1)*b.pow(1-f,d)*b.pow(f,e)},cdf:function(c,d,e){var f=0,g=0;if(c<0)return 0;for(;g<=c;g++)f+=a.negbin.pdf(g,d,e);return f}}),a.extend(a.hypgeom,{pdf:function(d,e,f,g){if(d!==d|0)return!1;if(d<0||d<f-(e-g))return 0;if(d>g||d>f)return 0;if(f*2>e)return g*2>e?a.hypgeom.pdf(e-f-g+d,e,e-f,e-g):a.hypgeom.pdf(g-d,e,e-f,g);if(g*2>e)return a.hypgeom.pdf(f-d,e,f,e-g);if(f<g)return a.hypgeom.pdf(d,e,g,f);var h=1,i=0;for(var j=0;j<d;j++){while(h>1&&i<g)h*=1-f/(e-i),i++;h*=(g-j)*(f-j)/((j+1)*(e-f-g+j+1))}for(;i<g;i++)h*=1-f/(e-i);return b.min(1,b.max(0,h))},cdf:function(d,e,f,g){if(d<0||d<f-(e-g))return 0;if(d>=g||d>=f)return 1;if(f*2>e)return g*2>e?a.hypgeom.cdf(e-f-g+d,e,e-f,e-g):1-a.hypgeom.cdf(g-d-1,e,e-f,g);if(g*2>e)return 1-a.hypgeom.cdf(f-d-1,e,f,e-g);if(f<g)return a.hypgeom.cdf(d,e,g,f);var h=1,i=1,j=0;for(var k=0;k<d;k++){while(h>1&&j<g){var l=1-f/(e-j);i*=l,h*=l,j++}i*=(g-k)*(f-k)/((k+1)*(e-f-g+k+1)),h+=i}for(;j<g;j++)h*=1-f/(e-j);return b.min(1,b.max(0,h))}}),a.extend(a.poisson,{pdf:function(d,e){return b.pow(e,d)*b.exp(-e)/a.factorial(d)},cdf:function(c,d){var e=[],f=0;if(c<0)return 0;for(;f<=c;f++)e.push(a.poisson.pdf(f,d));return a.sum(e)},mean:function(a){return a},variance:function(a){return a},sample:function(c){var d=1,e=0,f=b.exp(-c);do e++,d*=b.random();while(d>f);return e-1}}),a.extend(a.triangular,{pdf:function(b,c,d,e){return d<=c||e<c||e>d?undefined:b<c||b>d?0:b<=e?e===c?1:2*(b-c)/((d-c)*(e-c)):e===d?1:2*(d-b)/((d-c)*(d-e))},cdf:function(c,d,e,f){return e<=d||f<d||f>e?undefined:c<d?0:c<=f?b.pow(c-d,2)/((e-d)*(f-d)):1-b.pow(e-c,2)/((e-d)*(e-f))},mean:function(b,c,d){return(b+c+d)/3},median:function(c,d,e){if(e<=(c+d)/2)return d-b.sqrt((d-c)*(d-e))/b.sqrt(2);if(e>(c+d)/2)return c+b.sqrt((d-c)*(e-c))/b.sqrt(2)},mode:function(b,c,d){return d},sample:function(c,d,e){var f=b.random();return f<(e-c)/(d-c)?c+b.sqrt(f*(d-c)*(e-c)):d-b.sqrt((1-f)*(d-c)*(d-e))},variance:function(b,c,d){return(b*b+c*c+d*d-b*c-b*d-c*d)/18}})}(this.jStat,Math),function(a,b){var d=Array.prototype.push,e=a.utils.isArray;a.extend({add:function(c,d){return e(d)?(e(d[0])||(d=[d]),a.map(c,function(a,b,c){return a+d[b][c]})):a.map(c,function(a){return a+d})},subtract:function(c,d){return e(d)?(e(d[0])||(d=[d]),a.map(c,function(a,b,c){return a-d[b][c]||0})):a.map(c,function(a){return a-d})},divide:function(c,d){return e(d)?(e(d[0])||(d=[d]),a.multiply(c,a.inv(d))):a.map(c,function(a){return a/d})},multiply:function(c,d){var f,g,h,i,j=c.length,k=c[0].length,l=a.zeros(j,h=e(d)?d[0].length:k),m=0;if(e(d)){for(;m<h;m++)for(f=0;f<j;f++){i=0;for(g=0;g<k;g++)i+=c[f][g]*d[g][m];l[f][m]=i}return j===1&&m===1?l[0][0]:l}return a.map(c,function(a){return a*d})},dot:function(c,d){e(c[0])||(c=[c]),e(d[0])||(d=[d]);var f=c[0].length===1&&c.length!==1?a.transpose(c):c,g=d[0].length===1&&d.length!==1?a.transpose(d):d,h=[],i=0,j=f.length,k=f[0].length,l,m;for(;i<j;i++){h[i]=[],l=0;for(m=0;m<k;m++)l+=f[i][m]*g[i][m];h[i]=l}return h.length===1?h[0]:h},pow:function(d,e){return a.map(d,function(a){return b.pow(a,e)})},exp:function(d){return a.map(d,function(a){return b.exp(a)})},log:function(d){return a.map(d,function(a){return b.log(a)})},abs:function(d){return a.map(d,function(a){return b.abs(a)})},norm:function(c,d){var f=0,g=0;isNaN(d)&&(d=2),e(c[0])&&(c=c[0]);for(;g<c.length;g++)f+=b.pow(b.abs(c[g]),d);return b.pow(f,1/d)},angle:function(d,e){return b.acos(a.dot(d,e)/(a.norm(d)*a.norm(e)))},aug:function(b,c){var e=b.slice(),f=0;for(;f<e.length;f++)d.apply(e[f],c[f]);return e},inv:function(c){var d=c.length,e=c[0].length,f=a.identity(d,e),g=a.gauss_jordan(c,f),h=[],i=0,j;for(;i<d;i++){h[i]=[];for(j=e;j<g[0].length;j++)h[i][j-e]=g[i][j]}return h},det:function(b){var c=b.length,d=c*2,e=new Array(d),f=c-1,g=d-1,h=f-c+1,i=g,j=0,k=0,l;if(c===2)return b[0][0]*b[1][1]-b[0][1]*b[1][0];for(;j<d;j++)e[j]=1;for(j=0;j<c;j++){for(l=0;l<c;l++)e[h<0?h+c:h]*=b[j][l],e[i<c?i+c:i]*=b[j][l],h++,i--;h=--f-c+1,i=--g}for(j=0;j<c;j++)k+=e[j];for(;j<d;j++)k-=e[j];return k},gauss_elimination:function(d,e){var f=0,g=0,h=d.length,i=d[0].length,j=1,k=0,l=[],m,n,o,p;d=a.aug(d,e),m=d[0].length;for(f=0;f<h;f++){n=d[f][f],g=f;for(p=f+1;p<i;p++)n<b.abs(d[p][f])&&(n=d[p][f],g=p);if(g!=f)for(p=0;p<m;p++)o=d[f][p],d[f][p]=d[g][p],d[g][p]=o;for(g=f+1;g<h;g++){j=d[g][f]/d[f][f];for(p=f;p<m;p++)d[g][p]=d[g][p]-j*d[f][p]}}for(f=h-1;f>=0;f--){k=0;for(g=f+1;g<=h-1;g++)k+=l[g]*d[f][g];l[f]=(d[f][m-1]-k)/d[f][f]}return l},gauss_jordan:function(e,f){var g=a.aug(e,f),h=g.length,i=g[0].length;for(var j=0;j<h;j++){var k=j;for(var l=j+1;l<h;l++)b.abs(g[l][j])>b.abs(g[k][j])&&(k=l);var m=g[j];g[j]=g[k],g[k]=m;for(var l=j+1;l<h;l++){c=g[l][j]/g[j][j];for(var n=j;n<i;n++)g[l][n]-=g[j][n]*c}}for(var j=h-1;j>=0;j--){c=g[j][j];for(var l=0;l<j;l++)for(var n=i-1;n>j-1;n--)g[l][n]-=g[j][n]*g[l][j]/c;g[j][j]/=c;for(var n=h;n<i;n++)g[j][n]/=c}return g},lu:function(b,c){throw new Error("lu not yet implemented")},cholesky:function(b,c){throw new Error("cholesky not yet implemented")},gauss_jacobi:function(d,e,f,g){var h=0,i=0,j=d.length,k=[],l=[],m=[],n,o,p,q;for(;h<j;h++){k[h]=[],l[h]=[],m[h]=[];for(i=0;i<j;i++)h>i?(k[h][i]=d[h][i],l[h][i]=m[h][i]=0):h<i?(l[h][i]=d[h][i],k[h][i]=m[h][i]=0):(m[h][i]=d[h][i],k[h][i]=l[h][i]=0)}p=a.multiply(a.multiply(a.inv(m),a.add(k,l)),-1),o=a.multiply(a.inv(m),e),n=f,q=a.add(a.multiply(p,f),o),h=2;while(b.abs(a.norm(a.subtract(q,n)))>g)n=q,q=a.add(a.multiply(p,n),o),h++;return q},gauss_seidel:function(d,e,f,g){var h=0,i=d.length,j=[],k=[],l=[],m,n,o,p,q;for(;h<i;h++){j[h]=[],k[h]=[],l[h]=[];for(m=0;m<i;m++)h>m?(j[h][m]=d[h][m],k[h][m]=l[h][m]=0):h<m?(k[h][m]=d[h][m],j[h][m]=l[h][m]=0):(l[h][m]=d[h][m],j[h][m]=k[h][m]=0)}p=a.multiply(a.multiply(a.inv(a.add(l,j)),k),-1),o=a.multiply(a.inv(a.add(l,j)),e),n=f,q=a.add(a.multiply(p,f),o),h=2;while(b.abs(a.norm(a.subtract(q,n)))>g)n=q,q=a.add(a.multiply(p,n),o),h+=1;return q},SOR:function(d,e,f,g,h){var i=0,j=d.length,k=[],l=[],m=[],n,o,p,q,r;for(;i<j;i++){k[i]=[],l[i]=[],m[i]=[];for(n=0;n<j;n++)i>n?(k[i][n]=d[i][n],l[i][n]=m[i][n]=0):i<n?(l[i][n]=d[i][n],k[i][n]=m[i][n]=0):(m[i][n]=d[i][n],k[i][n]=l[i][n]=0)}q=a.multiply(a.inv(a.add(m,a.multiply(k,h))),a.subtract(a.multiply(m,1-h),a.multiply(l,h))),p=a.multiply(a.multiply(a.inv(a.add(m,a.multiply(k,h))),e),h),o=f,r=a.add(a.multiply(q,f),p),i=2;while(b.abs(a.norm(a.subtract(r,o)))>g)o=r,r=a.add(a.multiply(q,o),p),i++;return r},householder:function(d){var e=d.length,f=d[0].length,g=0,h=[],i=[],j,k,l,m,n;for(;g<e-1;g++){j=0;for(m=g+1;m<f;m++)j+=d[m][g]*d[m][g];n=d[g+1][g]>0?-1:1,j=n*b.sqrt(j),k=b.sqrt((j*j-d[g+1][g]*j)/2),h=a.zeros(e,1),h[g+1][0]=(d[g+1][g]-j)/(2*k);for(l=g+2;l<e;l++)h[l][0]=d[l][g]/(2*k);i=a.subtract(a.identity(e,f),a.multiply(a.multiply(h,a.transpose(h)),2)),d=a.multiply(i,a.multiply(d,i))}return d},QR:function(d,e){var f=d.length,g=d[0].length,h=0,i=[],j=[],k=[],l,m,n,o,p,q;for(;h<f-1;h++){m=0;for(l=h+1;l<g;l++)m+=d[l][h]*d[l][h];p=d[h+1][h]>0?-1:1,m=p*b.sqrt(m),n=b.sqrt((m*m-d[h+1][h]*m)/2),i=a.zeros(f,1),i[h+1][0]=(d[h+1][h]-m)/(2*n);for(o=h+2;o<f;o++)i[o][0]=d[o][h]/(2*n);j=a.subtract(a.identity(f,g),a.multiply(a.multiply(i,a.transpose(i)),2)),d=a.multiply(j,d),e=a.multiply(j,e)}for(h=f-1;h>=0;h--){q=0;for(l=h+1;l<=g-1;l++)q=k[l]*d[h][l];k[h]=e[h][0]/d[h][h]}return k},jacobi:function(d){var e=1,f=0,g=d.length,h=a.identity(g,g),i=[],j,k,l,m,n,o,p,q;while(e===1){f++,o=d[0][1],m=0,n=1;for(k=0;k<g;k++)for(l=0;l<g;l++)k!=l&&o<b.abs(d[k][l])&&(o=b.abs(d[k][l]),m=k,n=l);d[m][m]===d[n][n]?p=d[m][n]>0?b.PI/4:-b.PI/4:p=b.atan(2*d[m][n]/(d[m][m]-d[n][n]))/2,q=a.identity(g,g),q[m][m]=b.cos(p),q[m][n]=-b.sin(p),q[n][m]=b.sin(p),q[n][n]=b.cos(p),h=a.multiply(h,q),j=a.multiply(a.multiply(a.inv(q),d),q),d=j,e=0;for(k=1;k<g;k++)for(l=1;l<g;l++)k!=l&&b.abs(d[k][l])>.001&&(e=1)}for(k=0;k<g;k++)i.push(d[k][k]);return[h,i]},rungekutta:function(b,c,d,e,f,g){var h,i,j,k,l;if(g===2)while(e<=d)h=c*b(e,f),i=c*b(e+c,f+h),j=f+(h+i)/2,f=j,e+=c;if(g===4)while(e<=d)h=c*b(e,f),i=c*b(e+c/2,f+h/2),k=c*b(e+c/2,f+i/2),l=c*b(e+c,f+k),j=f+(h+2*i+2*k+l)/6,f=j,e+=c;return f},romberg:function(c,d,e,f){var g=0,h=(e-d)/2,i=[],j=[],k=[],l,m,n,o,p,q;while(g<f/2){p=c(d);for(n=d,o=0;n<=e;n+=h,o++)i[o]=n;l=i.length;for(n=1;n<l-1;n++)p+=(n%2!==0?4:2)*c(i[n]);p=h/3*(p+c(e)),k[g]=p,h/=2,g++}m=k.length,l=1;while(m!==1){for(n=0;n<m-1;n++)j[n]=(b.pow(4,l)*k[n+1]-k[n])/(b.pow(4,l)-1);m=j.length,k=j,j=[],l++}return k},richardson:function(c,d,e,f){function g(a,b){var c=0,d=a.length,e;for(;c<d;c++)a[c]===b&&(e=c);return e}var h=c.length,i=b.abs(e-c[g(c,e)+1]),j=0,k=[],l=[],m,n,o,p,q;while(f>=i)m=g(c,e+f),n=g(c,e),k[j]=(d[m]-2*d[n]+d[2*n-m])/(f*f),f/=2,j++;p=k.length,o=1;while(p!=1){for(q=0;q<p-1;q++)l[q]=(b.pow(4,o)*k[q+1]-k[q])/(b.pow(4,o)-1);p=l.length,k=l,l=[],o++}return k},simpson:function(b,c,d,e){var f=(d-c)/e,g=b(c),h=[],i=c,j=0,k=1,l;for(;i<=d;i+=f,j++)h[j]=i;l=h.length;for(;k<l-1;k++)g+=(k%2!==0?4:2)*b(h[k]);return f/3*(g+b(d))},hermite:function(b,c,d,e){var f=b.length,g=0,h=0,i=[],j=[],k=[],l=[],m;for(;h<f;h++){i[h]=1;for(m=0;m<f;m++)h!=m&&(i[h]*=(e-b[m])/(b[h]-b[m]));j[h]=0;for(m=0;m<f;m++)h!=m&&(j[h]+=1/(b[h]-b[m]));k[h]=(1-2*(e-b[h])*j[h])*i[h]*i[h],l[h]=(e-b[h])*i[h]*i[h],g+=k[h]*c[h]+l[h]*d[h]}return g},lagrange:function(b,c,d){var e=0,f=0,g,h,i=b.length;for(;f<i;f++){h=c[f];for(g=0;g<i;g++)f!=g&&(h*=(d-b[g])/(b[f]-b[g]));e+=h}return e},cubic_spline:function(c,d,e){var f=c.length,g=0,h,i=[],j=[],k=[],l=[],m=[],n=[],o=[];for(;g<f-1;g++)m[g]=c[g+1]-c[g];k[0]=0;for(g=1;g<f-1;g++)k[g]=3/m[g]*(d[g+1]-d[g])-3/m[g-1]*(d[g]-d[g-1]);for(g=1;g<f-1;g++)i[g]=[],j[g]=[],i[g][g-1]=m[g-1],i[g][g]=2*(m[g-1]+m[g]),i[g][g+1]=m[g],j[g][0]=k[g];l=a.multiply(a.inv(i),j);for(h=0;h<f-1;h++)n[h]=(d[h+1]-d[h])/m[h]-m[h]*(l[h+1][0]+2*l[h][0])/3,o[h]=(l[h+1][0]-l[h][0])/(3*m[h]);for(h=0;h<f;h++)if(c[h]>e)break;return h-=1,d[h]+(e-c[h])*n[h]+a.sq(e-c[h])*l[h]+(e-c[h])*a.sq(e-c[h])*o[h]},gauss_quadrature:function(){throw new Error("gauss_quadrature not yet implemented")},PCA:function(c){var d=c.length,e=c[0].length,f=!1,g=0,h,i,j=[],k=[],l=[],m=[],n=[],o=[],p=[],q=[],r=[],s=[];for(g=0;g<d;g++)j[g]=a.sum(c[g])/e;for(g=0;g<e;g++){p[g]=[];for(h=0;h<d;h++)p[g][h]=c[h][g]-j[h]}p=a.transpose(p);for(g=0;g<d;g++){q[g]=[];for(h=0;h<d;h++)q[g][h]=a.dot([p[g]],[p[h]])/(e-1)}l=a.jacobi(q),r=l[0],k=l[1],s=a.transpose(r);for(g=0;g<k.length;g++)for(h=g;h<k.length;h++)k[g]<k[h]&&(i=k[g],k[g]=k[h],k[h]=i,m=s[g],s[g]=s[h],s[h]=m);o=a.transpose(p);for(g=0;g<d;g++){n[g]=[];for(h=0;h<o.length;h++)n[g][h]=a.dot([s[g]],[o[h]])}return[c,k,s,n]}}),function(b){for(var c=0;c<b.length;c++)(function(b){a.fn[b]=function(c,d){var e=this;return d?(setTimeout(function(){d.call(e,a.fn[b].call(e,c))},15),this):typeof a[b](this,c)=="number"?a[b](this,c):a(a[b](this,c))}})(b[c])}("add divide multiply subtract dot pow exp log abs norm angle".split
-(" "))}(this.jStat,Math),function(a,b){var c=[].slice,d=a.utils.isNumber;a.extend({zscore:function(){var e=c.call(arguments);return d(e[1])?(e[0]-e[1])/e[2]:(e[0]-a.mean(e[1]))/a.stdev(e[1],e[2])},ztest:function(){var f=c.call(arguments);if(f.length===4){if(d(f[1])){var g=a.zscore(f[0],f[1],f[2]);return f[3]===1?a.normal.cdf(-b.abs(g),0,1):a.normal.cdf(-b.abs(g),0,1)*2}var g=f[0];return f[2]===1?a.normal.cdf(-b.abs(g),0,1):a.normal.cdf(-b.abs(g),0,1)*2}var g=a.zscore(f[0],f[1],f[3]);return f[1]===1?a.normal.cdf(-b.abs(g),0,1):a.normal.cdf(-b.abs(g),0,1)*2}}),a.extend(a.fn,{zscore:function(b,c){return(b-this.mean())/this.stdev(c)},ztest:function(d,e,f){var g=b.abs(this.zscore(d,f));return e===1?a.normal.cdf(-g,0,1):a.normal.cdf(-g,0,1)*2}}),a.extend({tscore:function(){var e=c.call(arguments);return e.length===4?(e[0]-e[1])/(e[2]/b.sqrt(e[3])):(e[0]-a.mean(e[1]))/(a.stdev(e[1],!0)/b.sqrt(e[1].length))},ttest:function(){var f=c.call(arguments),g;return f.length===5?(g=b.abs(a.tscore(f[0],f[1],f[2],f[3])),f[4]===1?a.studentt.cdf(-g,f[3]-1):a.studentt.cdf(-g,f[3]-1)*2):d(f[1])?(g=b.abs(f[0]),f[2]==1?a.studentt.cdf(-g,f[1]-1):a.studentt.cdf(-g,f[1]-1)*2):(g=b.abs(a.tscore(f[0],f[1])),f[2]==1?a.studentt.cdf(-g,f[1].length-1):a.studentt.cdf(-g,f[1].length-1)*2)}}),a.extend(a.fn,{tscore:function(c){return(c-this.mean())/(this.stdev(!0)/b.sqrt(this.cols()))},ttest:function(d,e){return e===1?1-a.studentt.cdf(b.abs(this.tscore(d)),this.cols()-1):a.studentt.cdf(-b.abs(this.tscore(d)),this.cols()-1)*2}}),a.extend({anovafscore:function(){var e=c.call(arguments),f,g,h,i,j,k,l,m;if(e.length===1){j=new Array(e[0].length);for(l=0;l<e[0].length;l++)j[l]=e[0][l];e=j}if(e.length===2)return a.variance(e[0])/a.variance(e[1]);g=new Array;for(l=0;l<e.length;l++)g=g.concat(e[l]);h=a.mean(g),f=0;for(l=0;l<e.length;l++)f+=e[l].length*b.pow(a.mean(e[l])-h,2);f/=e.length-1,k=0;for(l=0;l<e.length;l++){i=a.mean(e[l]);for(m=0;m<e[l].length;m++)k+=b.pow(e[l][m]-i,2)}return k/=g.length-e.length,f/k},anovaftest:function(){var e=c.call(arguments),f,g,h,i;if(d(e[0]))return 1-a.centralF.cdf(e[0],e[1],e[2]);anovafscore=a.anovafscore(e),f=e.length-1,h=0;for(i=0;i<e.length;i++)h+=e[i].length;return g=h-f-1,1-a.centralF.cdf(anovafscore,f,g)},ftest:function(c,d,e){return 1-a.centralF.cdf(c,d,e)}}),a.extend(a.fn,{anovafscore:function(){return a.anovafscore(this.toArray())},anovaftes:function(){var c=0,d;for(d=0;d<this.length;d++)c+=this[d].length;return a.ftest(this.anovafscore(),this.length-1,c-this.length)}}),a.extend({normalci:function(){var e=c.call(arguments),f=new Array(2),g;return e.length===4?g=b.abs(a.normal.inv(e[1]/2,0,1)*e[2]/b.sqrt(e[3])):g=b.abs(a.normal.inv(e[1]/2,0,1)*a.stdev(e[2])/b.sqrt(e[2].length)),f[0]=e[0]-g,f[1]=e[0]+g,f},tci:function(){var e=c.call(arguments),f=new Array(2),g;return e.length===4?g=b.abs(a.studentt.inv(e[1]/2,e[3]-1)*e[2]/b.sqrt(e[3])):g=b.abs(a.studentt.inv(e[1]/2,e[2].length-1)*a.stdev(e[2],!0)/b.sqrt(e[2].length)),f[0]=e[0]-g,f[1]=e[0]+g,f},significant:function(b,c){return b<c}}),a.extend(a.fn,{normalci:function(c,d){return a.normalci(c,d,this.toArray())},tci:function(c,d){return a.tci(c,d,this.toArray())}})}(this.jStat,Math); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/js_external/jszip.min.js b/wqflask/wqflask/static/new/js_external/jszip.min.js
deleted file mode 100644
index a09f35b8..00000000
--- a/wqflask/wqflask/static/new/js_external/jszip.min.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*!
-
-JSZip - A Javascript class for generating and reading zip files
-<http://stuartk.com/jszip>
-
-(c) 2009-2014 Stuart Knightley <stuart [at] stuartk.com>
-Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.
-
-JSZip uses the library pako released under the MIT license :
-https://github.com/nodeca/pako/blob/master/LICENSE
-*/
-!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;"undefined"!=typeof window?b=window:"undefined"!=typeof global?b=global:"undefined"!=typeof self&&(b=self),b.JSZip=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){"use strict";var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";c.encode=function(a){for(var b,c,e,f,g,h,i,j="",k=0;k<a.length;)b=a.charCodeAt(k++),c=a.charCodeAt(k++),e=a.charCodeAt(k++),f=b>>2,g=(3&b)<<4|c>>4,h=(15&c)<<2|e>>6,i=63&e,isNaN(c)?h=i=64:isNaN(e)&&(i=64),j=j+d.charAt(f)+d.charAt(g)+d.charAt(h)+d.charAt(i);return j},c.decode=function(a){var b,c,e,f,g,h,i,j="",k=0;for(a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");k<a.length;)f=d.indexOf(a.charAt(k++)),g=d.indexOf(a.charAt(k++)),h=d.indexOf(a.charAt(k++)),i=d.indexOf(a.charAt(k++)),b=f<<2|g>>4,c=(15&g)<<4|h>>2,e=(3&h)<<6|i,j+=String.fromCharCode(b),64!=h&&(j+=String.fromCharCode(c)),64!=i&&(j+=String.fromCharCode(e));return j}},{}],2:[function(a,b){"use strict";function c(){this.compressedSize=0,this.uncompressedSize=0,this.crc32=0,this.compressionMethod=null,this.compressedContent=null}c.prototype={getContent:function(){return null},getCompressedContent:function(){return null}},b.exports=c},{}],3:[function(a,b,c){"use strict";c.STORE={magic:"\x00\x00",compress:function(a){return a},uncompress:function(a){return a},compressInputType:null,uncompressInputType:null},c.DEFLATE=a("./flate")},{"./flate":8}],4:[function(a,b){"use strict";var c=a("./utils"),d=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];b.exports=function(a,b){if("undefined"==typeof a||!a.length)return 0;var e="string"!==c.getTypeOf(a);"undefined"==typeof b&&(b=0);var f=0,g=0,h=0;b=-1^b;for(var i=0,j=a.length;j>i;i++)h=e?a[i]:a.charCodeAt(i),g=255&(b^h),f=d[g],b=b>>>8^f;return-1^b}},{"./utils":21}],5:[function(a,b){"use strict";function c(){this.data=null,this.length=0,this.index=0}var d=a("./utils");c.prototype={checkOffset:function(a){this.checkIndex(this.index+a)},checkIndex:function(a){if(this.length<a||0>a)throw new Error("End of data reached (data length = "+this.length+", asked index = "+a+"). Corrupted zip ?")},setIndex:function(a){this.checkIndex(a),this.index=a},skip:function(a){this.setIndex(this.index+a)},byteAt:function(){},readInt:function(a){var b,c=0;for(this.checkOffset(a),b=this.index+a-1;b>=this.index;b--)c=(c<<8)+this.byteAt(b);return this.index+=a,c},readString:function(a){return d.transformTo("string",this.readData(a))},readData:function(){},lastIndexOfSignature:function(){},readDate:function(){var a=this.readInt(4);return new Date((a>>25&127)+1980,(a>>21&15)-1,a>>16&31,a>>11&31,a>>5&63,(31&a)<<1)}},b.exports=c},{"./utils":21}],6:[function(a,b,c){"use strict";c.base64=!1,c.binary=!1,c.dir=!1,c.createFolders=!1,c.date=null,c.compression=null,c.compressionOptions=null,c.comment=null,c.unixPermissions=null,c.dosPermissions=null},{}],7:[function(a,b,c){"use strict";var d=a("./utils");c.string2binary=function(a){return d.string2binary(a)},c.string2Uint8Array=function(a){return d.transformTo("uint8array",a)},c.uint8Array2String=function(a){return d.transformTo("string",a)},c.string2Blob=function(a){var b=d.transformTo("arraybuffer",a);return d.arrayBuffer2Blob(b)},c.arrayBuffer2Blob=function(a){return d.arrayBuffer2Blob(a)},c.transformTo=function(a,b){return d.transformTo(a,b)},c.getTypeOf=function(a){return d.getTypeOf(a)},c.checkSupport=function(a){return d.checkSupport(a)},c.MAX_VALUE_16BITS=d.MAX_VALUE_16BITS,c.MAX_VALUE_32BITS=d.MAX_VALUE_32BITS,c.pretty=function(a){return d.pretty(a)},c.findCompression=function(a){return d.findCompression(a)},c.isRegExp=function(a){return d.isRegExp(a)}},{"./utils":21}],8:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,e=a("pako");c.uncompressInputType=d?"uint8array":"array",c.compressInputType=d?"uint8array":"array",c.magic="\b\x00",c.compress=function(a,b){return e.deflateRaw(a,{level:b.level||-1})},c.uncompress=function(a){return e.inflateRaw(a)}},{pako:24}],9:[function(a,b){"use strict";function c(a,b){return this instanceof c?(this.files={},this.comment=null,this.root="",a&&this.load(a,b),void(this.clone=function(){var a=new c;for(var b in this)"function"!=typeof this[b]&&(a[b]=this[b]);return a})):new c(a,b)}var d=a("./base64");c.prototype=a("./object"),c.prototype.load=a("./load"),c.support=a("./support"),c.defaults=a("./defaults"),c.utils=a("./deprecatedPublicUtils"),c.base64={encode:function(a){return d.encode(a)},decode:function(a){return d.decode(a)}},c.compressions=a("./compressions"),b.exports=c},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(a,b){"use strict";var c=a("./base64"),d=a("./zipEntries");b.exports=function(a,b){var e,f,g,h;for(b=b||{},b.base64&&(a=c.decode(a)),f=new d(a,b),e=f.files,g=0;g<e.length;g++)h=e[g],this.file(h.fileName,h.decompressed,{binary:!0,optimizedBinaryString:!0,date:h.date,dir:h.dir,comment:h.fileComment.length?h.fileComment:null,unixPermissions:h.unixPermissions,dosPermissions:h.dosPermissions,createFolders:b.createFolders});return f.zipComment.length&&(this.comment=f.zipComment),this}},{"./base64":1,"./zipEntries":22}],11:[function(a,b){(function(a){"use strict";b.exports=function(b,c){return new a(b,c)},b.exports.test=function(b){return a.isBuffer(b)}}).call(this,"undefined"!=typeof Buffer?Buffer:void 0)},{}],12:[function(a,b){"use strict";function c(a){this.data=a,this.length=this.data.length,this.index=0}var d=a("./uint8ArrayReader");c.prototype=new d,c.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.index,this.index+a);return this.index+=a,b},b.exports=c},{"./uint8ArrayReader":18}],13:[function(a,b){"use strict";var c=a("./support"),d=a("./utils"),e=a("./crc32"),f=a("./signature"),g=a("./defaults"),h=a("./base64"),i=a("./compressions"),j=a("./compressedObject"),k=a("./nodeBuffer"),l=a("./utf8"),m=a("./stringWriter"),n=a("./uint8ArrayWriter"),o=function(a){if(a._data instanceof j&&(a._data=a._data.getContent(),a.options.binary=!0,a.options.base64=!1,"uint8array"===d.getTypeOf(a._data))){var b=a._data;a._data=new Uint8Array(b.length),0!==b.length&&a._data.set(b,0)}return a._data},p=function(a){var b=o(a),e=d.getTypeOf(b);return"string"===e?!a.options.binary&&c.nodebuffer?k(b,"utf-8"):a.asBinary():b},q=function(a){var b=o(this);return null===b||"undefined"==typeof b?"":(this.options.base64&&(b=h.decode(b)),b=a&&this.options.binary?D.utf8decode(b):d.transformTo("string",b),a||this.options.binary||(b=d.transformTo("string",D.utf8encode(b))),b)},r=function(a,b,c){this.name=a,this.dir=c.dir,this.date=c.date,this.comment=c.comment,this.unixPermissions=c.unixPermissions,this.dosPermissions=c.dosPermissions,this._data=b,this.options=c,this._initialMetadata={dir:c.dir,date:c.date}};r.prototype={asText:function(){return q.call(this,!0)},asBinary:function(){return q.call(this,!1)},asNodeBuffer:function(){var a=p(this);return d.transformTo("nodebuffer",a)},asUint8Array:function(){var a=p(this);return d.transformTo("uint8array",a)},asArrayBuffer:function(){return this.asUint8Array().buffer}};var s=function(a,b){var c,d="";for(c=0;b>c;c++)d+=String.fromCharCode(255&a),a>>>=8;return d},t=function(){var a,b,c={};for(a=0;a<arguments.length;a++)for(b in arguments[a])arguments[a].hasOwnProperty(b)&&"undefined"==typeof c[b]&&(c[b]=arguments[a][b]);return c},u=function(a){return a=a||{},a.base64!==!0||null!==a.binary&&void 0!==a.binary||(a.binary=!0),a=t(a,g),a.date=a.date||new Date,null!==a.compression&&(a.compression=a.compression.toUpperCase()),a},v=function(a,b,c){var e,f=d.getTypeOf(b);if(c=u(c),"string"==typeof c.unixPermissions&&(c.unixPermissions=parseInt(c.unixPermissions,8)),c.unixPermissions&&16384&c.unixPermissions&&(c.dir=!0),c.dosPermissions&&16&c.dosPermissions&&(c.dir=!0),c.dir&&(a=x(a)),c.createFolders&&(e=w(a))&&y.call(this,e,!0),c.dir||null===b||"undefined"==typeof b)c.base64=!1,c.binary=!1,b=null,f=null;else if("string"===f)c.binary&&!c.base64&&c.optimizedBinaryString!==!0&&(b=d.string2binary(b));else{if(c.base64=!1,c.binary=!0,!(f||b instanceof j))throw new Error("The data of '"+a+"' is in an unsupported format !");"arraybuffer"===f&&(b=d.transformTo("uint8array",b))}var g=new r(a,b,c);return this.files[a]=g,g},w=function(a){"/"==a.slice(-1)&&(a=a.substring(0,a.length-1));var b=a.lastIndexOf("/");return b>0?a.substring(0,b):""},x=function(a){return"/"!=a.slice(-1)&&(a+="/"),a},y=function(a,b){return b="undefined"!=typeof b?b:!1,a=x(a),this.files[a]||v.call(this,a,null,{dir:!0,createFolders:b}),this.files[a]},z=function(a,b,c){var f,g=new j;return a._data instanceof j?(g.uncompressedSize=a._data.uncompressedSize,g.crc32=a._data.crc32,0===g.uncompressedSize||a.dir?(b=i.STORE,g.compressedContent="",g.crc32=0):a._data.compressionMethod===b.magic?g.compressedContent=a._data.getCompressedContent():(f=a._data.getContent(),g.compressedContent=b.compress(d.transformTo(b.compressInputType,f),c))):(f=p(a),(!f||0===f.length||a.dir)&&(b=i.STORE,f=""),g.uncompressedSize=f.length,g.crc32=e(f),g.compressedContent=b.compress(d.transformTo(b.compressInputType,f),c)),g.compressedSize=g.compressedContent.length,g.compressionMethod=b.magic,g},A=function(a,b){var c=a;return a||(c=b?16893:33204),(65535&c)<<16},B=function(a){return 63&(a||0)},C=function(a,b,c,g,h){var i,j,k,m,n=(c.compressedContent,d.transformTo("string",l.utf8encode(b.name))),o=b.comment||"",p=d.transformTo("string",l.utf8encode(o)),q=n.length!==b.name.length,r=p.length!==o.length,t=b.options,u="",v="",w="";k=b._initialMetadata.dir!==b.dir?b.dir:t.dir,m=b._initialMetadata.date!==b.date?b.date:t.date;var x=0,y=0;k&&(x|=16),"UNIX"===h?(y=798,x|=A(b.unixPermissions,k)):(y=20,x|=B(b.dosPermissions,k)),i=m.getHours(),i<<=6,i|=m.getMinutes(),i<<=5,i|=m.getSeconds()/2,j=m.getFullYear()-1980,j<<=4,j|=m.getMonth()+1,j<<=5,j|=m.getDate(),q&&(v=s(1,1)+s(e(n),4)+n,u+="up"+s(v.length,2)+v),r&&(w=s(1,1)+s(this.crc32(p),4)+p,u+="uc"+s(w.length,2)+w);var z="";z+="\n\x00",z+=q||r?"\x00\b":"\x00\x00",z+=c.compressionMethod,z+=s(i,2),z+=s(j,2),z+=s(c.crc32,4),z+=s(c.compressedSize,4),z+=s(c.uncompressedSize,4),z+=s(n.length,2),z+=s(u.length,2);var C=f.LOCAL_FILE_HEADER+z+n+u,D=f.CENTRAL_FILE_HEADER+s(y,2)+z+s(p.length,2)+"\x00\x00\x00\x00"+s(x,4)+s(g,4)+n+u+p;return{fileRecord:C,dirRecord:D,compressedObject:c}},D={load:function(){throw new Error("Load method is not defined. Is the file jszip-load.js included ?")},filter:function(a){var b,c,d,e,f=[];for(b in this.files)this.files.hasOwnProperty(b)&&(d=this.files[b],e=new r(d.name,d._data,t(d.options)),c=b.slice(this.root.length,b.length),b.slice(0,this.root.length)===this.root&&a(c,e)&&f.push(e));return f},file:function(a,b,c){if(1===arguments.length){if(d.isRegExp(a)){var e=a;return this.filter(function(a,b){return!b.dir&&e.test(a)})}return this.filter(function(b,c){return!c.dir&&b===a})[0]||null}return a=this.root+a,v.call(this,a,b,c),this},folder:function(a){if(!a)return this;if(d.isRegExp(a))return this.filter(function(b,c){return c.dir&&a.test(b)});var b=this.root+a,c=y.call(this,b),e=this.clone();return e.root=c.name,e},remove:function(a){a=this.root+a;var b=this.files[a];if(b||("/"!=a.slice(-1)&&(a+="/"),b=this.files[a]),b&&!b.dir)delete this.files[a];else for(var c=this.filter(function(b,c){return c.name.slice(0,a.length)===a}),d=0;d<c.length;d++)delete this.files[c[d].name];return this},generate:function(a){a=t(a||{},{base64:!0,compression:"STORE",compressionOptions:null,type:"base64",platform:"DOS",comment:null,mimeType:"application/zip"}),d.checkSupport(a.type),("darwin"===a.platform||"freebsd"===a.platform||"linux"===a.platform||"sunos"===a.platform)&&(a.platform="UNIX"),"win32"===a.platform&&(a.platform="DOS");var b,c,e=[],g=0,j=0,k=d.transformTo("string",this.utf8encode(a.comment||this.comment||""));for(var l in this.files)if(this.files.hasOwnProperty(l)){var o=this.files[l],p=o.options.compression||a.compression.toUpperCase(),q=i[p];if(!q)throw new Error(p+" is not a valid compression method !");var r=o.options.compressionOptions||a.compressionOptions||{},u=z.call(this,o,q,r),v=C.call(this,l,o,u,g,a.platform);g+=v.fileRecord.length+u.compressedSize,j+=v.dirRecord.length,e.push(v)}var w="";w=f.CENTRAL_DIRECTORY_END+"\x00\x00\x00\x00"+s(e.length,2)+s(e.length,2)+s(j,4)+s(g,4)+s(k.length,2)+k;var x=a.type.toLowerCase();for(b="uint8array"===x||"arraybuffer"===x||"blob"===x||"nodebuffer"===x?new n(g+j+w.length):new m(g+j+w.length),c=0;c<e.length;c++)b.append(e[c].fileRecord),b.append(e[c].compressedObject.compressedContent);for(c=0;c<e.length;c++)b.append(e[c].dirRecord);b.append(w);var y=b.finalize();switch(a.type.toLowerCase()){case"uint8array":case"arraybuffer":case"nodebuffer":return d.transformTo(a.type.toLowerCase(),y);case"blob":return d.arrayBuffer2Blob(d.transformTo("arraybuffer",y),a.mimeType);case"base64":return a.base64?h.encode(y):y;default:return y}},crc32:function(a,b){return e(a,b)},utf8encode:function(a){return d.transformTo("string",l.utf8encode(a))},utf8decode:function(a){return l.utf8decode(a)}};b.exports=D},{"./base64":1,"./compressedObject":2,"./compressions":3,"./crc32":4,"./defaults":6,"./nodeBuffer":11,"./signature":14,"./stringWriter":16,"./support":17,"./uint8ArrayWriter":19,"./utf8":20,"./utils":21}],14:[function(a,b,c){"use strict";c.LOCAL_FILE_HEADER="PK",c.CENTRAL_FILE_HEADER="PK",c.CENTRAL_DIRECTORY_END="PK",c.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",c.ZIP64_CENTRAL_DIRECTORY_END="PK",c.DATA_DESCRIPTOR="PK\b"},{}],15:[function(a,b){"use strict";function c(a,b){this.data=a,b||(this.data=e.string2binary(this.data)),this.length=this.data.length,this.index=0}var d=a("./dataReader"),e=a("./utils");c.prototype=new d,c.prototype.byteAt=function(a){return this.data.charCodeAt(a)},c.prototype.lastIndexOfSignature=function(a){return this.data.lastIndexOf(a)},c.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.index,this.index+a);return this.index+=a,b},b.exports=c},{"./dataReader":5,"./utils":21}],16:[function(a,b){"use strict";var c=a("./utils"),d=function(){this.data=[]};d.prototype={append:function(a){a=c.transformTo("string",a),this.data.push(a)},finalize:function(){return this.data.join("")}},b.exports=d},{"./utils":21}],17:[function(a,b,c){(function(a){"use strict";if(c.base64=!0,c.array=!0,c.string=!0,c.arraybuffer="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array,c.nodebuffer="undefined"!=typeof a,c.uint8array="undefined"!=typeof Uint8Array,"undefined"==typeof ArrayBuffer)c.blob=!1;else{var b=new ArrayBuffer(0);try{c.blob=0===new Blob([b],{type:"application/zip"}).size}catch(d){try{var e=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,f=new e;f.append(b),c.blob=0===f.getBlob("application/zip").size}catch(d){c.blob=!1}}}}).call(this,"undefined"!=typeof Buffer?Buffer:void 0)},{}],18:[function(a,b){"use strict";function c(a){a&&(this.data=a,this.length=this.data.length,this.index=0)}var d=a("./dataReader");c.prototype=new d,c.prototype.byteAt=function(a){return this.data[a]},c.prototype.lastIndexOfSignature=function(a){for(var b=a.charCodeAt(0),c=a.charCodeAt(1),d=a.charCodeAt(2),e=a.charCodeAt(3),f=this.length-4;f>=0;--f)if(this.data[f]===b&&this.data[f+1]===c&&this.data[f+2]===d&&this.data[f+3]===e)return f;return-1},c.prototype.readData=function(a){if(this.checkOffset(a),0===a)return new Uint8Array(0);var b=this.data.subarray(this.index,this.index+a);return this.index+=a,b},b.exports=c},{"./dataReader":5}],19:[function(a,b){"use strict";var c=a("./utils"),d=function(a){this.data=new Uint8Array(a),this.index=0};d.prototype={append:function(a){0!==a.length&&(a=c.transformTo("uint8array",a),this.data.set(a,this.index),this.index+=a.length)},finalize:function(){return this.data}},b.exports=d},{"./utils":21}],20:[function(a,b,c){"use strict";for(var d=a("./utils"),e=a("./support"),f=a("./nodeBuffer"),g=new Array(256),h=0;256>h;h++)g[h]=h>=252?6:h>=248?5:h>=240?4:h>=224?3:h>=192?2:1;g[254]=g[254]=1;var i=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=e.uint8array?new Uint8Array(i):new Array(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},j=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return 0>c?b:0===c?b:c+g[a[c]]>b?c:b},k=function(a){var b,c,e,f,h=a.length,i=new Array(2*h);for(c=0,b=0;h>b;)if(e=a[b++],128>e)i[c++]=e;else if(f=g[e],f>4)i[c++]=65533,b+=f-1;else{for(e&=2===f?31:3===f?15:7;f>1&&h>b;)e=e<<6|63&a[b++],f--;f>1?i[c++]=65533:65536>e?i[c++]=e:(e-=65536,i[c++]=55296|e>>10&1023,i[c++]=56320|1023&e)}return i.length!==c&&(i.subarray?i=i.subarray(0,c):i.length=c),d.applyFromCharCode(i)};c.utf8encode=function(a){return e.nodebuffer?f(a,"utf-8"):i(a)},c.utf8decode=function(a){if(e.nodebuffer)return d.transformTo("nodebuffer",a).toString("utf-8");a=d.transformTo(e.uint8array?"uint8array":"array",a);for(var b=[],c=0,f=a.length,g=65536;f>c;){var h=j(a,Math.min(c+g,f));b.push(e.uint8array?k(a.subarray(c,h)):k(a.slice(c,h))),c=h}return b.join("")}},{"./nodeBuffer":11,"./support":17,"./utils":21}],21:[function(a,b,c){"use strict";function d(a){return a}function e(a,b){for(var c=0;c<a.length;++c)b[c]=255&a.charCodeAt(c);return b}function f(a){var b=65536,d=[],e=a.length,f=c.getTypeOf(a),g=0,h=!0;try{switch(f){case"uint8array":String.fromCharCode.apply(null,new Uint8Array(0));break;case"nodebuffer":String.fromCharCode.apply(null,j(0))}}catch(i){h=!1}if(!h){for(var k="",l=0;l<a.length;l++)k+=String.fromCharCode(a[l]);return k}for(;e>g&&b>1;)try{d.push("array"===f||"nodebuffer"===f?String.fromCharCode.apply(null,a.slice(g,Math.min(g+b,e))):String.fromCharCode.apply(null,a.subarray(g,Math.min(g+b,e)))),g+=b}catch(i){b=Math.floor(b/2)}return d.join("")}function g(a,b){for(var c=0;c<a.length;c++)b[c]=a[c];return b}var h=a("./support"),i=a("./compressions"),j=a("./nodeBuffer");c.string2binary=function(a){for(var b="",c=0;c<a.length;c++)b+=String.fromCharCode(255&a.charCodeAt(c));return b},c.arrayBuffer2Blob=function(a,b){c.checkSupport("blob"),b=b||"application/zip";try{return new Blob([a],{type:b})}catch(d){try{var e=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,f=new e;return f.append(a),f.getBlob(b)}catch(d){throw new Error("Bug : can't construct the Blob.")}}},c.applyFromCharCode=f;var k={};k.string={string:d,array:function(a){return e(a,new Array(a.length))},arraybuffer:function(a){return k.string.uint8array(a).buffer},uint8array:function(a){return e(a,new Uint8Array(a.length))},nodebuffer:function(a){return e(a,j(a.length))}},k.array={string:f,array:d,arraybuffer:function(a){return new Uint8Array(a).buffer},uint8array:function(a){return new Uint8Array(a)},nodebuffer:function(a){return j(a)}},k.arraybuffer={string:function(a){return f(new Uint8Array(a))},array:function(a){return g(new Uint8Array(a),new Array(a.byteLength))},arraybuffer:d,uint8array:function(a){return new Uint8Array(a)},nodebuffer:function(a){return j(new Uint8Array(a))}},k.uint8array={string:f,array:function(a){return g(a,new Array(a.length))},arraybuffer:function(a){return a.buffer},uint8array:d,nodebuffer:function(a){return j(a)}},k.nodebuffer={string:f,array:function(a){return g(a,new Array(a.length))},arraybuffer:function(a){return k.nodebuffer.uint8array(a).buffer},uint8array:function(a){return g(a,new Uint8Array(a.length))},nodebuffer:d},c.transformTo=function(a,b){if(b||(b=""),!a)return b;c.checkSupport(a);var d=c.getTypeOf(b),e=k[d][a](b);return e},c.getTypeOf=function(a){return"string"==typeof a?"string":"[object Array]"===Object.prototype.toString.call(a)?"array":h.nodebuffer&&j.test(a)?"nodebuffer":h.uint8array&&a instanceof Uint8Array?"uint8array":h.arraybuffer&&a instanceof ArrayBuffer?"arraybuffer":void 0},c.checkSupport=function(a){var b=h[a.toLowerCase()];if(!b)throw new Error(a+" is not supported by this browser")},c.MAX_VALUE_16BITS=65535,c.MAX_VALUE_32BITS=-1,c.pretty=function(a){var b,c,d="";for(c=0;c<(a||"").length;c++)b=a.charCodeAt(c),d+="\\x"+(16>b?"0":"")+b.toString(16).toUpperCase();return d},c.findCompression=function(a){for(var b in i)if(i.hasOwnProperty(b)&&i[b].magic===a)return i[b];return null},c.isRegExp=function(a){return"[object RegExp]"===Object.prototype.toString.call(a)}},{"./compressions":3,"./nodeBuffer":11,"./support":17}],22:[function(a,b){"use strict";function c(a,b){this.files=[],this.loadOptions=b,a&&this.load(a)}var d=a("./stringReader"),e=a("./nodeBufferReader"),f=a("./uint8ArrayReader"),g=a("./utils"),h=a("./signature"),i=a("./zipEntry"),j=a("./support"),k=a("./object");c.prototype={checkSignature:function(a){var b=this.reader.readString(4);if(b!==a)throw new Error("Corrupted zip or bug : unexpected signature ("+g.pretty(b)+", expected "+g.pretty(a)+")")},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2),this.zipComment=this.reader.readString(this.zipCommentLength),this.zipComment=k.utf8decode(this.zipComment)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.versionMadeBy=this.reader.readString(2),this.versionNeeded=this.reader.readInt(2),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var a,b,c,d=this.zip64EndOfCentralSize-44,e=0;d>e;)a=this.reader.readInt(2),b=this.reader.readInt(4),c=this.reader.readString(b),this.zip64ExtensibleData[a]={id:a,length:b,value:c}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var a,b;for(a=0;a<this.files.length;a++)b=this.files[a],this.reader.setIndex(b.localHeaderOffset),this.checkSignature(h.LOCAL_FILE_HEADER),b.readLocalPart(this.reader),b.handleUTF8(),b.processAttributes()},readCentralDir:function(){var a;for(this.reader.setIndex(this.centralDirOffset);this.reader.readString(4)===h.CENTRAL_FILE_HEADER;)a=new i({zip64:this.zip64},this.loadOptions),a.readCentralPart(this.reader),this.files.push(a)},readEndOfCentral:function(){var a=this.reader.lastIndexOfSignature(h.CENTRAL_DIRECTORY_END);if(-1===a){var b=!0;try{this.reader.setIndex(0),this.checkSignature(h.LOCAL_FILE_HEADER),b=!1}catch(c){}throw new Error(b?"Can't find end of central directory : is this a zip file ? If it is, see http://stuk.github.io/jszip/documentation/howto/read_zip.html":"Corrupted zip : can't find end of central directory")}if(this.reader.setIndex(a),this.checkSignature(h.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===g.MAX_VALUE_16BITS||this.diskWithCentralDirStart===g.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===g.MAX_VALUE_16BITS||this.centralDirRecords===g.MAX_VALUE_16BITS||this.centralDirSize===g.MAX_VALUE_32BITS||this.centralDirOffset===g.MAX_VALUE_32BITS){if(this.zip64=!0,a=this.reader.lastIndexOfSignature(h.ZIP64_CENTRAL_DIRECTORY_LOCATOR),-1===a)throw new Error("Corrupted zip : can't find the ZIP64 end of central directory locator");this.reader.setIndex(a),this.checkSignature(h.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(h.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}},prepareReader:function(a){var b=g.getTypeOf(a);this.reader="string"!==b||j.uint8array?"nodebuffer"===b?new e(a):new f(g.transformTo("uint8array",a)):new d(a,this.loadOptions.optimizedBinaryString)},load:function(a){this.prepareReader(a),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},b.exports=c},{"./nodeBufferReader":12,"./object":13,"./signature":14,"./stringReader":15,"./support":17,"./uint8ArrayReader":18,"./utils":21,"./zipEntry":23}],23:[function(a,b){"use strict";function c(a,b){this.options=a,this.loadOptions=b}var d=a("./stringReader"),e=a("./utils"),f=a("./compressedObject"),g=a("./object"),h=0,i=3;c.prototype={isEncrypted:function(){return 1===(1&this.bitFlag)},useUTF8:function(){return 2048===(2048&this.bitFlag)},prepareCompressedContent:function(a,b,c){return function(){var d=a.index;a.setIndex(b);var e=a.readData(c);return a.setIndex(d),e}},prepareContent:function(a,b,c,d,f){return function(){var a=e.transformTo(d.uncompressInputType,this.getCompressedContent()),b=d.uncompress(a);if(b.length!==f)throw new Error("Bug : uncompressed data size mismatch");return b}},readLocalPart:function(a){var b,c;if(a.skip(22),this.fileNameLength=a.readInt(2),c=a.readInt(2),this.fileName=a.readString(this.fileNameLength),a.skip(c),-1==this.compressedSize||-1==this.uncompressedSize)throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize == -1 || uncompressedSize == -1)");if(b=e.findCompression(this.compressionMethod),null===b)throw new Error("Corrupted zip : compression "+e.pretty(this.compressionMethod)+" unknown (inner file : "+this.fileName+")");if(this.decompressed=new f,this.decompressed.compressedSize=this.compressedSize,this.decompressed.uncompressedSize=this.uncompressedSize,this.decompressed.crc32=this.crc32,this.decompressed.compressionMethod=this.compressionMethod,this.decompressed.getCompressedContent=this.prepareCompressedContent(a,a.index,this.compressedSize,b),this.decompressed.getContent=this.prepareContent(a,a.index,this.compressedSize,b,this.uncompressedSize),this.loadOptions.checkCRC32&&(this.decompressed=e.transformTo("string",this.decompressed.getContent()),g.crc32(this.decompressed)!==this.crc32))throw new Error("Corrupted zip : CRC32 mismatch")},readCentralPart:function(a){if(this.versionMadeBy=a.readInt(2),this.versionNeeded=a.readInt(2),this.bitFlag=a.readInt(2),this.compressionMethod=a.readString(2),this.date=a.readDate(),this.crc32=a.readInt(4),this.compressedSize=a.readInt(4),this.uncompressedSize=a.readInt(4),this.fileNameLength=a.readInt(2),this.extraFieldsLength=a.readInt(2),this.fileCommentLength=a.readInt(2),this.diskNumberStart=a.readInt(2),this.internalFileAttributes=a.readInt(2),this.externalFileAttributes=a.readInt(4),this.localHeaderOffset=a.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");this.fileName=a.readString(this.fileNameLength),this.readExtraFields(a),this.parseZIP64ExtraField(a),this.fileComment=a.readString(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var a=this.versionMadeBy>>8;this.dir=16&this.externalFileAttributes?!0:!1,a===h&&(this.dosPermissions=63&this.externalFileAttributes),a===i&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileName.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var a=new d(this.extraFields[1].value);this.uncompressedSize===e.MAX_VALUE_32BITS&&(this.uncompressedSize=a.readInt(8)),this.compressedSize===e.MAX_VALUE_32BITS&&(this.compressedSize=a.readInt(8)),this.localHeaderOffset===e.MAX_VALUE_32BITS&&(this.localHeaderOffset=a.readInt(8)),this.diskNumberStart===e.MAX_VALUE_32BITS&&(this.diskNumberStart=a.readInt(4))}},readExtraFields:function(a){var b,c,d,e=a.index;for(this.extraFields=this.extraFields||{};a.index<e+this.extraFieldsLength;)b=a.readInt(2),c=a.readInt(2),d=a.readString(c),this.extraFields[b]={id:b,length:c,value:d}},handleUTF8:function(){if(this.useUTF8())this.fileName=g.utf8decode(this.fileName),this.fileComment=g.utf8decode(this.fileComment);else{var a=this.findExtraFieldUnicodePath();null!==a&&(this.fileName=a);var b=this.findExtraFieldUnicodeComment();null!==b&&(this.fileComment=b)}},findExtraFieldUnicodePath:function(){var a=this.extraFields[28789];if(a){var b=new d(a.value);return 1!==b.readInt(1)?null:g.crc32(this.fileName)!==b.readInt(4)?null:g.utf8decode(b.readString(a.length-5))
-}return null},findExtraFieldUnicodeComment:function(){var a=this.extraFields[25461];if(a){var b=new d(a.value);return 1!==b.readInt(1)?null:g.crc32(this.fileComment)!==b.readInt(4)?null:g.utf8decode(b.readString(a.length-5))}return null}},b.exports=c},{"./compressedObject":2,"./object":13,"./stringReader":15,"./utils":21}],24:[function(a,b){"use strict";var c=a("./lib/utils/common").assign,d=a("./lib/deflate"),e=a("./lib/inflate"),f=a("./lib/zlib/constants"),g={};c(g,d,e,f),b.exports=g},{"./lib/deflate":25,"./lib/inflate":26,"./lib/utils/common":27,"./lib/zlib/constants":30}],25:[function(a,b,c){"use strict";function d(a,b){var c=new s(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function e(a,b){return b=b||{},b.raw=!0,d(a,b)}function f(a,b){return b=b||{},b.gzip=!0,d(a,b)}var g=a("./zlib/deflate.js"),h=a("./utils/common"),i=a("./utils/strings"),j=a("./zlib/messages"),k=a("./zlib/zstream"),l=0,m=4,n=0,o=1,p=-1,q=0,r=8,s=function(a){this.options=h.assign({level:p,method:r,chunkSize:16384,windowBits:15,memLevel:8,strategy:q,to:""},a||{});var b=this.options;b.raw&&b.windowBits>0?b.windowBits=-b.windowBits:b.gzip&&b.windowBits>0&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=g.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(c!==n)throw new Error(j[c]);b.header&&g.deflateSetHeader(this.strm,b.header)};s.prototype.push=function(a,b){var c,d,e=this.strm,f=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?m:l,e.input="string"==typeof a?i.string2buf(a):a,e.next_in=0,e.avail_in=e.input.length;do{if(0===e.avail_out&&(e.output=new h.Buf8(f),e.next_out=0,e.avail_out=f),c=g.deflate(e,d),c!==o&&c!==n)return this.onEnd(c),this.ended=!0,!1;(0===e.avail_out||0===e.avail_in&&d===m)&&this.onData("string"===this.options.to?i.buf2binstring(h.shrinkBuf(e.output,e.next_out)):h.shrinkBuf(e.output,e.next_out))}while((e.avail_in>0||0===e.avail_out)&&c!==o);return d===m?(c=g.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===n):!0},s.prototype.onData=function(a){this.chunks.push(a)},s.prototype.onEnd=function(a){a===n&&(this.result="string"===this.options.to?this.chunks.join(""):h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Deflate=s,c.deflate=d,c.deflateRaw=e,c.gzip=f},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(a,b,c){"use strict";function d(a,b){var c=new m(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function e(a,b){return b=b||{},b.raw=!0,d(a,b)}var f=a("./zlib/inflate.js"),g=a("./utils/common"),h=a("./utils/strings"),i=a("./zlib/constants"),j=a("./zlib/messages"),k=a("./zlib/zstream"),l=a("./zlib/gzheader"),m=function(a){this.options=g.assign({chunkSize:16384,windowBits:0,to:""},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)),!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0===(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=f.inflateInit2(this.strm,b.windowBits);if(c!==i.Z_OK)throw new Error(j[c]);this.header=new l,f.inflateGetHeader(this.strm,this.header)};m.prototype.push=function(a,b){var c,d,e,j,k,l=this.strm,m=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?i.Z_FINISH:i.Z_NO_FLUSH,l.input="string"==typeof a?h.binstring2buf(a):a,l.next_in=0,l.avail_in=l.input.length;do{if(0===l.avail_out&&(l.output=new g.Buf8(m),l.next_out=0,l.avail_out=m),c=f.inflate(l,i.Z_NO_FLUSH),c!==i.Z_STREAM_END&&c!==i.Z_OK)return this.onEnd(c),this.ended=!0,!1;l.next_out&&(0===l.avail_out||c===i.Z_STREAM_END||0===l.avail_in&&d===i.Z_FINISH)&&("string"===this.options.to?(e=h.utf8border(l.output,l.next_out),j=l.next_out-e,k=h.buf2string(l.output,e),l.next_out=j,l.avail_out=m-j,j&&g.arraySet(l.output,l.output,e,j,0),this.onData(k)):this.onData(g.shrinkBuf(l.output,l.next_out)))}while(l.avail_in>0&&c!==i.Z_STREAM_END);return c===i.Z_STREAM_END&&(d=i.Z_FINISH),d===i.Z_FINISH?(c=f.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===i.Z_OK):!0},m.prototype.onData=function(a){this.chunks.push(a)},m.prototype.onEnd=function(a){a===i.Z_OK&&(this.result="string"===this.options.to?this.chunks.join(""):g.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=m,c.inflate=d,c.inflateRaw=e,c.ungzip=d},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;c.assign=function(a){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var c=b.shift();if(c){if("object"!=typeof c)throw new TypeError(c+"must be non-object");for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}}return a},c.shrinkBuf=function(a,b){return a.length===b?a:a.subarray?a.subarray(0,b):(a.length=b,a)};var e={arraySet:function(a,b,c,d,e){if(b.subarray&&a.subarray)return void a.set(b.subarray(c,c+d),e);for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){var b,c,d,e,f,g;for(d=0,b=0,c=a.length;c>b;b++)d+=a[b].length;for(g=new Uint8Array(d),e=0,b=0,c=a.length;c>b;b++)f=a[b],g.set(f,e),e+=f.length;return g}},f={arraySet:function(a,b,c,d,e){for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){return[].concat.apply([],a)}};c.setTyped=function(a){a?(c.Buf8=Uint8Array,c.Buf16=Uint16Array,c.Buf32=Int32Array,c.assign(c,e)):(c.Buf8=Array,c.Buf16=Array,c.Buf32=Array,c.assign(c,f))},c.setTyped(d)},{}],28:[function(a,b,c){"use strict";function d(a,b){if(65537>b&&(a.subarray&&g||!a.subarray&&f))return String.fromCharCode.apply(null,e.shrinkBuf(a,b));for(var c="",d=0;b>d;d++)c+=String.fromCharCode(a[d]);return c}var e=a("./common"),f=!0,g=!0;try{String.fromCharCode.apply(null,[0])}catch(h){f=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(h){g=!1}for(var i=new e.Buf8(256),j=0;256>j;j++)i[j]=j>=252?6:j>=248?5:j>=240?4:j>=224?3:j>=192?2:1;i[254]=i[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=new e.Buf8(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;d>c;c++)b[c]=a.charCodeAt(c);return b},c.buf2string=function(a,b){var c,e,f,g,h=b||a.length,j=new Array(2*h);for(e=0,c=0;h>c;)if(f=a[c++],128>f)j[e++]=f;else if(g=i[f],g>4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&h>c;)f=f<<6|63&a[c++],g--;g>1?j[e++]=65533:65536>f?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return 0>c?b:0===c?b:c+i[a[c]]>b?c:b}},{"./common":27}],29:[function(a,b){"use strict";function c(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do e=e+b[d++]|0,f=f+e|0;while(--g);e%=65521,f%=65521}return e|f<<16|0}b.exports=c},{}],30:[function(a,b){b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(a,b){"use strict";function c(){for(var a,b=[],c=0;256>c;c++){a=c;for(var d=0;8>d;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}function d(a,b,c,d){var f=e,g=d+c;a=-1^a;for(var h=d;g>h;h++)a=a>>>8^f[255&(a^b[h])];return-1^a}var e=c();b.exports=d},{}],32:[function(a,b,c){"use strict";function d(a,b){return a.msg=G[b],b}function e(a){return(a<<1)-(a>4?9:0)}function f(a){for(var b=a.length;--b>=0;)a[b]=0}function g(a){var b=a.state,c=b.pending;c>a.avail_out&&(c=a.avail_out),0!==c&&(C.arraySet(a.output,b.pending_buf,b.pending_out,c,a.next_out),a.next_out+=c,b.pending_out+=c,a.total_out+=c,a.avail_out-=c,b.pending-=c,0===b.pending&&(b.pending_out=0))}function h(a,b){D._tr_flush_block(a,a.block_start>=0?a.block_start:-1,a.strstart-a.block_start,b),a.block_start=a.strstart,g(a.strm)}function i(a,b){a.pending_buf[a.pending++]=b}function j(a,b){a.pending_buf[a.pending++]=b>>>8&255,a.pending_buf[a.pending++]=255&b}function k(a,b,c,d){var e=a.avail_in;return e>d&&(e=d),0===e?0:(a.avail_in-=e,C.arraySet(b,a.input,a.next_in,e,c),1===a.state.wrap?a.adler=E(a.adler,b,e,c):2===a.state.wrap&&(a.adler=F(a.adler,b,e,c)),a.next_in+=e,a.total_in+=e,e)}function l(a,b){var c,d,e=a.max_chain_length,f=a.strstart,g=a.prev_length,h=a.nice_match,i=a.strstart>a.w_size-jb?a.strstart-(a.w_size-jb):0,j=a.window,k=a.w_mask,l=a.prev,m=a.strstart+ib,n=j[f+g-1],o=j[f+g];a.prev_length>=a.good_match&&(e>>=2),h>a.lookahead&&(h=a.lookahead);do if(c=b,j[c+g]===o&&j[c+g-1]===n&&j[c]===j[f]&&j[++c]===j[f+1]){f+=2,c++;do;while(j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&m>f);if(d=ib-(m-f),f=m-ib,d>g){if(a.match_start=b,g=d,d>=h)break;n=j[f+g-1],o=j[f+g]}}while((b=l[b&k])>i&&0!==--e);return g<=a.lookahead?g:a.lookahead}function m(a){var b,c,d,e,f,g=a.w_size;do{if(e=a.window_size-a.lookahead-a.strstart,a.strstart>=g+(g-jb)){C.arraySet(a.window,a.window,g,g,0),a.match_start-=g,a.strstart-=g,a.block_start-=g,c=a.hash_size,b=c;do d=a.head[--b],a.head[b]=d>=g?d-g:0;while(--c);c=g,b=c;do d=a.prev[--b],a.prev[b]=d>=g?d-g:0;while(--c);e+=g}if(0===a.strm.avail_in)break;if(c=k(a.strm,a.window,a.strstart+a.lookahead,e),a.lookahead+=c,a.lookahead+a.insert>=hb)for(f=a.strstart-a.insert,a.ins_h=a.window[f],a.ins_h=(a.ins_h<<a.hash_shift^a.window[f+1])&a.hash_mask;a.insert&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[f+hb-1])&a.hash_mask,a.prev[f&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=f,f++,a.insert--,!(a.lookahead+a.insert<hb)););}while(a.lookahead<jb&&0!==a.strm.avail_in)}function n(a,b){var c=65535;for(c>a.pending_buf_size-5&&(c=a.pending_buf_size-5);;){if(a.lookahead<=1){if(m(a),0===a.lookahead&&b===H)return sb;if(0===a.lookahead)break}a.strstart+=a.lookahead,a.lookahead=0;var d=a.block_start+c;if((0===a.strstart||a.strstart>=d)&&(a.lookahead=a.strstart-d,a.strstart=d,h(a,!1),0===a.strm.avail_out))return sb;if(a.strstart-a.block_start>=a.w_size-jb&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.strstart>a.block_start&&(h(a,!1),0===a.strm.avail_out)?sb:sb}function o(a,b){for(var c,d;;){if(a.lookahead<jb){if(m(a),a.lookahead<jb&&b===H)return sb;if(0===a.lookahead)break}if(c=0,a.lookahead>=hb&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart),0!==c&&a.strstart-c<=a.w_size-jb&&(a.match_length=l(a,c)),a.match_length>=hb)if(d=D._tr_tally(a,a.strstart-a.match_start,a.match_length-hb),a.lookahead-=a.match_length,a.match_length<=a.max_lazy_match&&a.lookahead>=hb){a.match_length--;do a.strstart++,a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart;while(0!==--a.match_length);a.strstart++}else a.strstart+=a.match_length,a.match_length=0,a.ins_h=a.window[a.strstart],a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+1])&a.hash_mask;else d=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++;if(d&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=a.strstart<hb-1?a.strstart:hb-1,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function p(a,b){for(var c,d,e;;){if(a.lookahead<jb){if(m(a),a.lookahead<jb&&b===H)return sb;if(0===a.lookahead)break}if(c=0,a.lookahead>=hb&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart),a.prev_length=a.match_length,a.prev_match=a.match_start,a.match_length=hb-1,0!==c&&a.prev_length<a.max_lazy_match&&a.strstart-c<=a.w_size-jb&&(a.match_length=l(a,c),a.match_length<=5&&(a.strategy===S||a.match_length===hb&&a.strstart-a.match_start>4096)&&(a.match_length=hb-1)),a.prev_length>=hb&&a.match_length<=a.prev_length){e=a.strstart+a.lookahead-hb,d=D._tr_tally(a,a.strstart-1-a.prev_match,a.prev_length-hb),a.lookahead-=a.prev_length-1,a.prev_length-=2;do++a.strstart<=e&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart);while(0!==--a.prev_length);if(a.match_available=0,a.match_length=hb-1,a.strstart++,d&&(h(a,!1),0===a.strm.avail_out))return sb}else if(a.match_available){if(d=D._tr_tally(a,0,a.window[a.strstart-1]),d&&h(a,!1),a.strstart++,a.lookahead--,0===a.strm.avail_out)return sb}else a.match_available=1,a.strstart++,a.lookahead--}return a.match_available&&(d=D._tr_tally(a,0,a.window[a.strstart-1]),a.match_available=0),a.insert=a.strstart<hb-1?a.strstart:hb-1,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function q(a,b){for(var c,d,e,f,g=a.window;;){if(a.lookahead<=ib){if(m(a),a.lookahead<=ib&&b===H)return sb;if(0===a.lookahead)break}if(a.match_length=0,a.lookahead>=hb&&a.strstart>0&&(e=a.strstart-1,d=g[e],d===g[++e]&&d===g[++e]&&d===g[++e])){f=a.strstart+ib;do;while(d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&f>e);a.match_length=ib-(f-e),a.match_length>a.lookahead&&(a.match_length=a.lookahead)}if(a.match_length>=hb?(c=D._tr_tally(a,1,a.match_length-hb),a.lookahead-=a.match_length,a.strstart+=a.match_length,a.match_length=0):(c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++),c&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function r(a,b){for(var c;;){if(0===a.lookahead&&(m(a),0===a.lookahead)){if(b===H)return sb;break}if(a.match_length=0,c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++,c&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function s(a){a.window_size=2*a.w_size,f(a.head),a.max_lazy_match=B[a.level].max_lazy,a.good_match=B[a.level].good_length,a.nice_match=B[a.level].nice_length,a.max_chain_length=B[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=hb-1,a.match_available=0,a.ins_h=0}function t(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Y,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new C.Buf16(2*fb),this.dyn_dtree=new C.Buf16(2*(2*db+1)),this.bl_tree=new C.Buf16(2*(2*eb+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new C.Buf16(gb+1),this.heap=new C.Buf16(2*cb+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new C.Buf16(2*cb+1),f(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function u(a){var b;return a&&a.state?(a.total_in=a.total_out=0,a.data_type=X,b=a.state,b.pending=0,b.pending_out=0,b.wrap<0&&(b.wrap=-b.wrap),b.status=b.wrap?lb:qb,a.adler=2===b.wrap?0:1,b.last_flush=H,D._tr_init(b),M):d(a,O)}function v(a){var b=u(a);return b===M&&s(a.state),b}function w(a,b){return a&&a.state?2!==a.state.wrap?O:(a.state.gzhead=b,M):O}function x(a,b,c,e,f,g){if(!a)return O;var h=1;if(b===R&&(b=6),0>e?(h=0,e=-e):e>15&&(h=2,e-=16),1>f||f>Z||c!==Y||8>e||e>15||0>b||b>9||0>g||g>V)return d(a,O);8===e&&(e=9);var i=new t;return a.state=i,i.strm=a,i.wrap=h,i.gzhead=null,i.w_bits=e,i.w_size=1<<i.w_bits,i.w_mask=i.w_size-1,i.hash_bits=f+7,i.hash_size=1<<i.hash_bits,i.hash_mask=i.hash_size-1,i.hash_shift=~~((i.hash_bits+hb-1)/hb),i.window=new C.Buf8(2*i.w_size),i.head=new C.Buf16(i.hash_size),i.prev=new C.Buf16(i.w_size),i.lit_bufsize=1<<f+6,i.pending_buf_size=4*i.lit_bufsize,i.pending_buf=new C.Buf8(i.pending_buf_size),i.d_buf=i.lit_bufsize>>1,i.l_buf=3*i.lit_bufsize,i.level=b,i.strategy=g,i.method=c,v(a)}function y(a,b){return x(a,b,Y,$,_,W)}function z(a,b){var c,h,k,l;if(!a||!a.state||b>L||0>b)return a?d(a,O):O;if(h=a.state,!a.output||!a.input&&0!==a.avail_in||h.status===rb&&b!==K)return d(a,0===a.avail_out?Q:O);if(h.strm=a,c=h.last_flush,h.last_flush=b,h.status===lb)if(2===h.wrap)a.adler=0,i(h,31),i(h,139),i(h,8),h.gzhead?(i(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),i(h,255&h.gzhead.time),i(h,h.gzhead.time>>8&255),i(h,h.gzhead.time>>16&255),i(h,h.gzhead.time>>24&255),i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(i(h,255&h.gzhead.extra.length),i(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(a.adler=F(a.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=mb):(i(h,0),i(h,0),i(h,0),i(h,0),i(h,0),i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,wb),h.status=qb);else{var m=Y+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=T||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=kb),m+=31-m%31,h.status=qb,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===mb)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=nb)}else h.status=nb;if(h.status===nb)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindex<h.gzhead.name.length?255&h.gzhead.name.charCodeAt(h.gzindex++):0,i(h,l)}while(0!==l);h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=ob)}else h.status=ob;if(h.status===ob)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindex<h.gzhead.comment.length?255&h.gzhead.comment.charCodeAt(h.gzindex++):0,i(h,l)}while(0!==l);h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=pb)}else h.status=pb;if(h.status===pb&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=qb)):h.status=qb),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,M}else if(0===a.avail_in&&e(b)<=e(c)&&b!==K)return d(a,Q);if(h.status===rb&&0!==a.avail_in)return d(a,Q);if(0!==a.avail_in||0!==h.lookahead||b!==H&&h.status!==rb){var o=h.strategy===T?r(h,b):h.strategy===U?q(h,b):B[h.level].func(h,b);if((o===ub||o===vb)&&(h.status=rb),o===sb||o===ub)return 0===a.avail_out&&(h.last_flush=-1),M;if(o===tb&&(b===I?D._tr_align(h):b!==L&&(D._tr_stored_block(h,0,0,!1),b===J&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,M}return b!==K?M:h.wrap<=0?N:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?M:N)}function A(a){var b;return a&&a.state?(b=a.state.status,b!==lb&&b!==mb&&b!==nb&&b!==ob&&b!==pb&&b!==qb&&b!==rb?d(a,O):(a.state=null,b===qb?d(a,P):M)):O}var B,C=a("../utils/common"),D=a("./trees"),E=a("./adler32"),F=a("./crc32"),G=a("./messages"),H=0,I=1,J=3,K=4,L=5,M=0,N=1,O=-2,P=-3,Q=-5,R=-1,S=1,T=2,U=3,V=4,W=0,X=2,Y=8,Z=9,$=15,_=8,ab=29,bb=256,cb=bb+1+ab,db=30,eb=19,fb=2*cb+1,gb=15,hb=3,ib=258,jb=ib+hb+1,kb=32,lb=42,mb=69,nb=73,ob=91,pb=103,qb=113,rb=666,sb=1,tb=2,ub=3,vb=4,wb=3,xb=function(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e};B=[new xb(0,0,0,0,n),new xb(4,4,8,4,o),new xb(4,5,16,8,o),new xb(4,6,32,32,o),new xb(4,4,16,16,p),new xb(8,16,32,32,p),new xb(8,16,128,128,p),new xb(8,32,128,256,p),new xb(32,128,258,1024,p),new xb(32,258,258,4096,p)],c.deflateInit=y,c.deflateInit2=x,c.deflateReset=v,c.deflateResetKeep=u,c.deflateSetHeader=w,c.deflate=z,c.deflateEnd=A,c.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(a,b){"use strict";function c(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}b.exports=c},{}],34:[function(a,b){"use strict";var c=30,d=12;b.exports=function(a,b){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C;e=a.state,f=a.next_in,B=a.input,g=f+(a.avail_in-5),h=a.next_out,C=a.output,i=h-(b-a.avail_out),j=h+(a.avail_out-257),k=e.dmax,l=e.wsize,m=e.whave,n=e.wnext,o=e.window,p=e.hold,q=e.bits,r=e.lencode,s=e.distcode,t=(1<<e.lenbits)-1,u=(1<<e.distbits)-1;a:do{15>q&&(p+=B[f++]<<q,q+=8,p+=B[f++]<<q,q+=8),v=r[p&t];b:for(;;){if(w=v>>>24,p>>>=w,q-=w,w=v>>>16&255,0===w)C[h++]=65535&v;else{if(!(16&w)){if(0===(64&w)){v=r[(65535&v)+(p&(1<<w)-1)];continue b}if(32&w){e.mode=d;break a}a.msg="invalid literal/length code",e.mode=c;break a}x=65535&v,w&=15,w&&(w>q&&(p+=B[f++]<<q,q+=8),x+=p&(1<<w)-1,p>>>=w,q-=w),15>q&&(p+=B[f++]<<q,q+=8,p+=B[f++]<<q,q+=8),v=s[p&u];c:for(;;){if(w=v>>>24,p>>>=w,q-=w,w=v>>>16&255,!(16&w)){if(0===(64&w)){v=s[(65535&v)+(p&(1<<w)-1)];continue c}a.msg="invalid distance code",e.mode=c;break a}if(y=65535&v,w&=15,w>q&&(p+=B[f++]<<q,q+=8,w>q&&(p+=B[f++]<<q,q+=8)),y+=p&(1<<w)-1,y>k){a.msg="invalid distance too far back",e.mode=c;break a}if(p>>>=w,q-=w,w=h-i,y>w){if(w=y-w,w>m&&e.sane){a.msg="invalid distance too far back",e.mode=c;break a}if(z=0,A=o,0===n){if(z+=l-w,x>w){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}else if(w>n){if(z+=l+n-w,w-=n,x>w){x-=w;do C[h++]=o[z++];while(--w);if(z=0,x>n){w=n,x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}}else if(z+=n-w,x>w){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}for(;x>2;)C[h++]=A[z++],C[h++]=A[z++],C[h++]=A[z++],x-=3;x&&(C[h++]=A[z++],x>1&&(C[h++]=A[z++]))}else{z=h-y;do C[h++]=C[z++],C[h++]=C[z++],C[h++]=C[z++],x-=3;while(x>2);x&&(C[h++]=C[z++],x>1&&(C[h++]=C[z++]))}break}}break}}while(g>f&&j>h);x=q>>3,f-=x,q-=x<<3,p&=(1<<q)-1,a.next_in=f,a.next_out=h,a.avail_in=g>f?5+(g-f):5-(f-g),a.avail_out=j>h?257+(j-h):257-(h-j),e.hold=p,e.bits=q}},{}],35:[function(a,b,c){"use strict";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=K,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new r.Buf32(ob),b.distcode=b.distdyn=new r.Buf32(pb),b.sane=1,b.back=-1,C):F}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):F}function h(a,b){var c,d;return a&&a.state?(d=a.state,0>b?(c=0,b=-b):(c=(b>>4)+1,48>b&&(b&=15)),b&&(8>b||b>15)?F:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):F}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==C&&(a.state=null),c):F}function j(a){return i(a,rb)}function k(a){if(sb){var b;for(p=new r.Buf32(512),q=new r.Buf32(32),b=0;144>b;)a.lens[b++]=8;for(;256>b;)a.lens[b++]=9;for(;280>b;)a.lens[b++]=7;for(;288>b;)a.lens[b++]=8;for(v(x,a.lens,0,288,p,0,a.work,{bits:9}),b=0;32>b;)a.lens[b++]=5;v(y,a.lens,0,32,q,0,a.work,{bits:5}),sb=!1}a.lencode=p,a.lenbits=9,a.distcode=q,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<<f.wbits,f.wnext=0,f.whave=0,f.window=new r.Buf8(f.wsize)),d>=f.wsize?(r.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),r.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(r.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whave<f.wsize&&(f.whave+=e))),0}function m(a,b){var c,e,f,g,h,i,j,m,n,o,p,q,ob,pb,qb,rb,sb,tb,ub,vb,wb,xb,yb,zb,Ab=0,Bb=new r.Buf8(4),Cb=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!a||!a.state||!a.output||!a.input&&0!==a.avail_in)return F;c=a.state,c.mode===V&&(c.mode=W),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,o=i,p=j,xb=C;a:for(;;)switch(c.mode){case K:if(0===c.wrap){c.mode=W;break}for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(2&c.wrap&&35615===m){c.check=0,Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0),m=0,n=0,c.mode=L;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=lb;break}if((15&m)!==J){a.msg="unknown compression method",c.mode=lb;break}if(m>>>=4,n-=4,wb=(15&m)+8,0===c.wbits)c.wbits=wb;else if(wb>c.wbits){a.msg="invalid window size",c.mode=lb;break}c.dmax=1<<wb,a.adler=c.check=1,c.mode=512&m?T:V,m=0,n=0;break;case L:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(c.flags=m,(255&c.flags)!==J){a.msg="unknown compression method",c.mode=lb;break}if(57344&c.flags){a.msg="unknown header flags set",c.mode=lb;break}c.head&&(c.head.text=m>>8&1),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0)),m=0,n=0,c.mode=M;case M:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.head&&(c.head.time=m),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,Bb[2]=m>>>16&255,Bb[3]=m>>>24&255,c.check=t(c.check,Bb,4,0)),m=0,n=0,c.mode=N;case N:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.head&&(c.head.xflags=255&m,c.head.os=m>>8),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0)),m=0,n=0,c.mode=O;case O:if(1024&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.length=m,c.head&&(c.head.extra_len=m),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=P;case P:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wb=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),r.arraySet(c.head.extra,e,g,q,wb)),512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=Q;case Q:if(2048&c.flags){if(0===i)break a;q=0;do wb=e[g+q++],c.head&&wb&&c.length<65536&&(c.head.name+=String.fromCharCode(wb));while(wb&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wb)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=R;case R:if(4096&c.flags){if(0===i)break a;q=0;do wb=e[g+q++],c.head&&wb&&c.length<65536&&(c.head.comment+=String.fromCharCode(wb));while(wb&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wb)break a}else c.head&&(c.head.comment=null);c.mode=S;case S:if(512&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m!==(65535&c.check)){a.msg="header crc mismatch",c.mode=lb;break}m=0,n=0}c.head&&(c.head.hcrc=c.flags>>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=V;break;case T:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}a.adler=c.check=d(m),m=0,n=0,c.mode=U;case U:if(0===c.havedict)return a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,E;a.adler=c.check=1,c.mode=V;case V:if(b===A||b===B)break a;case W:if(c.last){m>>>=7&n,n-=7&n,c.mode=ib;break}for(;3>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}switch(c.last=1&m,m>>>=1,n-=1,3&m){case 0:c.mode=X;break;case 1:if(k(c),c.mode=bb,b===B){m>>>=2,n-=2;break a}break;case 2:c.mode=$;break;case 3:a.msg="invalid block type",c.mode=lb}m>>>=2,n-=2;break;case X:for(m>>>=7&n,n-=7&n;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if((65535&m)!==(m>>>16^65535)){a.msg="invalid stored block lengths",c.mode=lb;break}if(c.length=65535&m,m=0,n=0,c.mode=Y,b===B)break a;case Y:c.mode=Z;case Z:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;r.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=V;break;case $:for(;14>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(c.nlen=(31&m)+257,m>>>=5,n-=5,c.ndist=(31&m)+1,m>>>=5,n-=5,c.ncode=(15&m)+4,m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=lb;break}c.have=0,c.mode=_;case _:for(;c.have<c.ncode;){for(;3>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.lens[Cb[c.have++]]=7&m,m>>>=3,n-=3}for(;c.have<19;)c.lens[Cb[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,yb={bits:c.lenbits},xb=v(w,c.lens,0,19,c.lencode,0,c.work,yb),c.lenbits=yb.bits,xb){a.msg="invalid code lengths set",c.mode=lb;break}c.have=0,c.mode=ab;case ab:for(;c.have<c.nlen+c.ndist;){for(;Ab=c.lencode[m&(1<<c.lenbits)-1],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(16>sb)m>>>=qb,n-=qb,c.lens[c.have++]=sb;else{if(16===sb){for(zb=qb+2;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m>>>=qb,n-=qb,0===c.have){a.msg="invalid bit length repeat",c.mode=lb;break}wb=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sb){for(zb=qb+3;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=qb,n-=qb,wb=0,q=3+(7&m),m>>>=3,n-=3}else{for(zb=qb+7;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=qb,n-=qb,wb=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=lb;break}for(;q--;)c.lens[c.have++]=wb}}if(c.mode===lb)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=lb;break}if(c.lenbits=9,yb={bits:c.lenbits},xb=v(x,c.lens,0,c.nlen,c.lencode,0,c.work,yb),c.lenbits=yb.bits,xb){a.msg="invalid literal/lengths set",c.mode=lb;break}if(c.distbits=6,c.distcode=c.distdyn,yb={bits:c.distbits},xb=v(y,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,yb),c.distbits=yb.bits,xb){a.msg="invalid distances set",c.mode=lb;break}if(c.mode=bb,b===B)break a;case bb:c.mode=cb;case cb:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,u(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===V&&(c.back=-1);
-break}for(c.back=0;Ab=c.lencode[m&(1<<c.lenbits)-1],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(rb&&0===(240&rb)){for(tb=qb,ub=rb,vb=sb;Ab=c.lencode[vb+((m&(1<<tb+ub)-1)>>tb)],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=tb+qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=tb,n-=tb,c.back+=tb}if(m>>>=qb,n-=qb,c.back+=qb,c.length=sb,0===rb){c.mode=hb;break}if(32&rb){c.back=-1,c.mode=V;break}if(64&rb){a.msg="invalid literal/length code",c.mode=lb;break}c.extra=15&rb,c.mode=db;case db:if(c.extra){for(zb=c.extra;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.length+=m&(1<<c.extra)-1,m>>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=eb;case eb:for(;Ab=c.distcode[m&(1<<c.distbits)-1],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(0===(240&rb)){for(tb=qb,ub=rb,vb=sb;Ab=c.distcode[vb+((m&(1<<tb+ub)-1)>>tb)],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=tb+qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=tb,n-=tb,c.back+=tb}if(m>>>=qb,n-=qb,c.back+=qb,64&rb){a.msg="invalid distance code",c.mode=lb;break}c.offset=sb,c.extra=15&rb,c.mode=fb;case fb:if(c.extra){for(zb=c.extra;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.offset+=m&(1<<c.extra)-1,m>>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=lb;break}c.mode=gb;case gb:if(0===j)break a;if(q=p-j,c.offset>q){if(q=c.offset-q,q>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=lb;break}q>c.wnext?(q-=c.wnext,ob=c.wsize-q):ob=c.wnext-q,q>c.length&&(q=c.length),pb=c.window}else pb=f,ob=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do f[h++]=pb[ob++];while(--q);0===c.length&&(c.mode=cb);break;case hb:if(0===j)break a;f[h++]=c.length,j--,c.mode=cb;break;case ib:if(c.wrap){for(;32>n;){if(0===i)break a;i--,m|=e[g++]<<n,n+=8}if(p-=j,a.total_out+=p,c.total+=p,p&&(a.adler=c.check=c.flags?t(c.check,f,p,h-p):s(c.check,f,p,h-p)),p=j,(c.flags?m:d(m))!==c.check){a.msg="incorrect data check",c.mode=lb;break}m=0,n=0}c.mode=jb;case jb:if(c.wrap&&c.flags){for(;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m!==(4294967295&c.total)){a.msg="incorrect length check",c.mode=lb;break}m=0,n=0}c.mode=kb;case kb:xb=D;break a;case lb:xb=G;break a;case mb:return H;case nb:default:return F}return a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,(c.wsize||p!==a.avail_out&&c.mode<lb&&(c.mode<ib||b!==z))&&l(a,a.output,a.next_out,p-a.avail_out)?(c.mode=mb,H):(o-=a.avail_in,p-=a.avail_out,a.total_in+=o,a.total_out+=p,c.total+=p,c.wrap&&p&&(a.adler=c.check=c.flags?t(c.check,f,p,a.next_out-p):s(c.check,f,p,a.next_out-p)),a.data_type=c.bits+(c.last?64:0)+(c.mode===V?128:0)+(c.mode===bb||c.mode===Y?256:0),(0===o&&0===p||b===z)&&xb===C&&(xb=I),xb)}function n(a){if(!a||!a.state)return F;var b=a.state;return b.window&&(b.window=null),a.state=null,C}function o(a,b){var c;return a&&a.state?(c=a.state,0===(2&c.wrap)?F:(c.head=b,b.done=!1,C)):F}var p,q,r=a("../utils/common"),s=a("./adler32"),t=a("./crc32"),u=a("./inffast"),v=a("./inftrees"),w=0,x=1,y=2,z=4,A=5,B=6,C=0,D=1,E=2,F=-2,G=-3,H=-4,I=-5,J=8,K=1,L=2,M=3,N=4,O=5,P=6,Q=7,R=8,S=9,T=10,U=11,V=12,W=13,X=14,Y=15,Z=16,$=17,_=18,ab=19,bb=20,cb=21,db=22,eb=23,fb=24,gb=25,hb=26,ib=27,jb=28,kb=29,lb=30,mb=31,nb=32,ob=852,pb=592,qb=15,rb=qb,sb=!0;c.inflateReset=g,c.inflateReset2=h,c.inflateResetKeep=f,c.inflateInit=j,c.inflateInit2=i,c.inflate=m,c.inflateEnd=n,c.inflateGetHeader=o,c.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./inffast":34,"./inftrees":36}],36:[function(a,b){"use strict";var c=a("../utils/common"),d=15,e=852,f=592,g=0,h=1,i=2,j=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],k=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],l=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],m=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];b.exports=function(a,b,n,o,p,q,r,s){var t,u,v,w,x,y,z,A,B,C=s.bits,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=null,O=0,P=new c.Buf16(d+1),Q=new c.Buf16(d+1),R=null,S=0;for(D=0;d>=D;D++)P[D]=0;for(E=0;o>E;E++)P[b[n+E]]++;for(H=C,G=d;G>=1&&0===P[G];G--);if(H>G&&(H=G),0===G)return p[q++]=20971520,p[q++]=20971520,s.bits=1,0;for(F=1;G>F&&0===P[F];F++);for(F>H&&(H=F),K=1,D=1;d>=D;D++)if(K<<=1,K-=P[D],0>K)return-1;if(K>0&&(a===g||1!==G))return-1;for(Q[1]=0,D=1;d>D;D++)Q[D+1]=Q[D]+P[D];for(E=0;o>E;E++)0!==b[n+E]&&(r[Q[b[n+E]]++]=E);if(a===g?(N=R=r,y=19):a===h?(N=j,O-=257,R=k,S-=257,y=256):(N=l,R=m,y=-1),M=0,E=0,D=F,x=q,I=H,J=0,v=-1,L=1<<H,w=L-1,a===h&&L>e||a===i&&L>f)return 1;for(var T=0;;){T++,z=D-J,r[E]<y?(A=0,B=r[E]):r[E]>y?(A=R[S+r[E]],B=N[O+r[E]]):(A=96,B=0),t=1<<D-J,u=1<<I,F=u;do u-=t,p[x+(M>>J)+u]=z<<24|A<<16|B|0;while(0!==u);for(t=1<<D-1;M&t;)t>>=1;if(0!==t?(M&=t-1,M+=t):M=0,E++,0===--P[D]){if(D===G)break;D=b[n+r[E]]}if(D>H&&(M&w)!==v){for(0===J&&(J=H),x+=F,I=D-J,K=1<<I;G>I+J&&(K-=P[I+J],!(0>=K));)I++,K<<=1;if(L+=1<<I,a===h&&L>e||a===i&&L>f)return 1;v=M&w,p[v]=H<<24|I<<16|x-q|0}}return 0!==M&&(p[x+M]=D-J<<24|64<<16|0),s.bits=H,0}},{"../utils/common":27}],37:[function(a,b){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a){return 256>a?gb[a]:gb[256+(a>>>7)]}function f(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function g(a,b,c){a.bi_valid>V-c?(a.bi_buf|=b<<a.bi_valid&65535,f(a,a.bi_buf),a.bi_buf=b>>V-a.bi_valid,a.bi_valid+=c-V):(a.bi_buf|=b<<a.bi_valid&65535,a.bi_valid+=c)}function h(a,b,c){g(a,c[2*b],c[2*b+1])}function i(a,b){var c=0;do c|=1&a,a>>>=1,c<<=1;while(--b>0);return c>>>1}function j(a){16===a.bi_valid?(f(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function k(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;U>=f;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;T>c;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)e=a.heap[--c],e>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function l(a,b,c){var d,e,f=new Array(U+1),g=0;for(d=1;U>=d;d++)f[d]=g=g+c[d-1]<<1;for(e=0;b>=e;e++){var h=a[2*e+1];0!==h&&(a[2*e]=i(f[h]++,h))}}function m(){var a,b,c,d,e,f=new Array(U+1);for(c=0,d=0;O-1>d;d++)for(ib[d]=c,a=0;a<1<<_[d];a++)hb[c++]=d;for(hb[c-1]=d,e=0,d=0;16>d;d++)for(jb[d]=e,a=0;a<1<<ab[d];a++)gb[e++]=d;for(e>>=7;R>d;d++)for(jb[d]=e<<7,a=0;a<1<<ab[d]-7;a++)gb[256+e++]=d;for(b=0;U>=b;b++)f[b]=0;for(a=0;143>=a;)eb[2*a+1]=8,a++,f[8]++;for(;255>=a;)eb[2*a+1]=9,a++,f[9]++;for(;279>=a;)eb[2*a+1]=7,a++,f[7]++;for(;287>=a;)eb[2*a+1]=8,a++,f[8]++;for(l(eb,Q+1,f),a=0;R>a;a++)fb[2*a+1]=5,fb[2*a]=i(a,5);kb=new nb(eb,_,P+1,Q,U),lb=new nb(fb,ab,0,R,U),mb=new nb(new Array(0),bb,0,S,W)}function n(a){var b;for(b=0;Q>b;b++)a.dyn_ltree[2*b]=0;for(b=0;R>b;b++)a.dyn_dtree[2*b]=0;for(b=0;S>b;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*X]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function o(a){a.bi_valid>8?f(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function p(a,b,c,d){o(a),d&&(f(a,c),f(a,~c)),E.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function q(a,b,c,d){var e=2*b,f=2*c;return a[e]<a[f]||a[e]===a[f]&&d[b]<=d[c]}function r(a,b,c){for(var d=a.heap[c],e=c<<1;e<=a.heap_len&&(e<a.heap_len&&q(b,a.heap[e+1],a.heap[e],a.depth)&&e++,!q(b,d,a.heap[e],a.depth));)a.heap[c]=a.heap[e],c=e,e<<=1;a.heap[c]=d}function s(a,b,c){var d,f,i,j,k=0;if(0!==a.last_lit)do d=a.pending_buf[a.d_buf+2*k]<<8|a.pending_buf[a.d_buf+2*k+1],f=a.pending_buf[a.l_buf+k],k++,0===d?h(a,f,b):(i=hb[f],h(a,i+P+1,b),j=_[i],0!==j&&(f-=ib[i],g(a,f,j)),d--,i=e(d),h(a,i,c),j=ab[i],0!==j&&(d-=jb[i],g(a,d,j)));while(k<a.last_lit);h(a,X,b)}function t(a,b){var c,d,e,f=b.dyn_tree,g=b.stat_desc.static_tree,h=b.stat_desc.has_stree,i=b.stat_desc.elems,j=-1;for(a.heap_len=0,a.heap_max=T,c=0;i>c;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=2>j?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)r(a,f,c);e=i;do c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],r(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,r(a,f,1);while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],k(a,b),l(f,j,a.bl_count)}function u(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;c>=d;d++)e=g,g=b[2*(d+1)+1],++h<i&&e===g||(j>h?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*Y]++):10>=h?a.bl_tree[2*Z]++:a.bl_tree[2*$]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function v(a,b,c){var d,e,f=-1,i=b[1],j=0,k=7,l=4;for(0===i&&(k=138,l=3),d=0;c>=d;d++)if(e=i,i=b[2*(d+1)+1],!(++j<k&&e===i)){if(l>j){do h(a,e,a.bl_tree);while(0!==--j)}else 0!==e?(e!==f&&(h(a,e,a.bl_tree),j--),h(a,Y,a.bl_tree),g(a,j-3,2)):10>=j?(h(a,Z,a.bl_tree),g(a,j-3,3)):(h(a,$,a.bl_tree),g(a,j-11,7));j=0,f=e,0===i?(k=138,l=3):e===i?(k=6,l=3):(k=7,l=4)}}function w(a){var b;for(u(a,a.dyn_ltree,a.l_desc.max_code),u(a,a.dyn_dtree,a.d_desc.max_code),t(a,a.bl_desc),b=S-1;b>=3&&0===a.bl_tree[2*cb[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*cb[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;P>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){pb||(m(),pb=!0),a.l_desc=new ob(a.dyn_ltree,kb),a.d_desc=new ob(a.dyn_dtree,lb),a.bl_desc=new ob(a.bl_tree,mb),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,X,eb),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,eb,fb)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(hb[c]+P+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a("../utils/common"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=3,N=258,O=29,P=256,Q=P+1+O,R=30,S=19,T=2*Q+1,U=15,V=16,W=7,X=256,Y=16,Z=17,$=18,_=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ab=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],bb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],cb=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],db=512,eb=new Array(2*(Q+2));d(eb);var fb=new Array(2*R);d(fb);var gb=new Array(db);d(gb);var hb=new Array(N-M+1);d(hb);var ib=new Array(O);d(ib);var jb=new Array(R);d(jb);var kb,lb,mb,nb=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},ob=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},pb=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{"../utils/common":27}],39:[function(a,b){"use strict";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/js_external/md5.min.js b/wqflask/wqflask/static/new/js_external/md5.min.js
deleted file mode 100644
index 7d8a3f53..00000000
--- a/wqflask/wqflask/static/new/js_external/md5.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function r(n,t){return n<<t|n>>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<<r%32,n[14+(r+64>>>9<<4)]=r;var e,i,a,d,h,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e<n.length;e+=16)i=l,a=g,d=v,h=m,g=f(g=f(g=f(g=f(g=c(g=c(g=c(g=c(g=u(g=u(g=u(g=u(g=o(g=o(g=o(g=o(g,v=o(v,m=o(m,l=o(l,g,v,m,n[e],7,-680876936),g,v,n[e+1],12,-389564586),l,g,n[e+2],17,606105819),m,l,n[e+3],22,-1044525330),v=o(v,m=o(m,l=o(l,g,v,m,n[e+4],7,-176418897),g,v,n[e+5],12,1200080426),l,g,n[e+6],17,-1473231341),m,l,n[e+7],22,-45705983),v=o(v,m=o(m,l=o(l,g,v,m,n[e+8],7,1770035416),g,v,n[e+9],12,-1958414417),l,g,n[e+10],17,-42063),m,l,n[e+11],22,-1990404162),v=o(v,m=o(m,l=o(l,g,v,m,n[e+12],7,1804603682),g,v,n[e+13],12,-40341101),l,g,n[e+14],17,-1502002290),m,l,n[e+15],22,1236535329),v=u(v,m=u(m,l=u(l,g,v,m,n[e+1],5,-165796510),g,v,n[e+6],9,-1069501632),l,g,n[e+11],14,643717713),m,l,n[e],20,-373897302),v=u(v,m=u(m,l=u(l,g,v,m,n[e+5],5,-701558691),g,v,n[e+10],9,38016083),l,g,n[e+15],14,-660478335),m,l,n[e+4],20,-405537848),v=u(v,m=u(m,l=u(l,g,v,m,n[e+9],5,568446438),g,v,n[e+14],9,-1019803690),l,g,n[e+3],14,-187363961),m,l,n[e+8],20,1163531501),v=u(v,m=u(m,l=u(l,g,v,m,n[e+13],5,-1444681467),g,v,n[e+2],9,-51403784),l,g,n[e+7],14,1735328473),m,l,n[e+12],20,-1926607734),v=c(v,m=c(m,l=c(l,g,v,m,n[e+5],4,-378558),g,v,n[e+8],11,-2022574463),l,g,n[e+11],16,1839030562),m,l,n[e+14],23,-35309556),v=c(v,m=c(m,l=c(l,g,v,m,n[e+1],4,-1530992060),g,v,n[e+4],11,1272893353),l,g,n[e+7],16,-155497632),m,l,n[e+10],23,-1094730640),v=c(v,m=c(m,l=c(l,g,v,m,n[e+13],4,681279174),g,v,n[e],11,-358537222),l,g,n[e+3],16,-722521979),m,l,n[e+6],23,76029189),v=c(v,m=c(m,l=c(l,g,v,m,n[e+9],4,-640364487),g,v,n[e+12],11,-421815835),l,g,n[e+15],16,530742520),m,l,n[e+2],23,-995338651),v=f(v,m=f(m,l=f(l,g,v,m,n[e],6,-198630844),g,v,n[e+7],10,1126891415),l,g,n[e+14],15,-1416354905),m,l,n[e+5],21,-57434055),v=f(v,m=f(m,l=f(l,g,v,m,n[e+12],6,1700485571),g,v,n[e+3],10,-1894986606),l,g,n[e+10],15,-1051523),m,l,n[e+1],21,-2054922799),v=f(v,m=f(m,l=f(l,g,v,m,n[e+8],6,1873313359),g,v,n[e+15],10,-30611744),l,g,n[e+6],15,-1560198380),m,l,n[e+13],21,1309151649),v=f(v,m=f(m,l=f(l,g,v,m,n[e+4],6,-145523070),g,v,n[e+11],10,-1120210379),l,g,n[e+2],15,718787259),m,l,n[e+9],21,-343485551),l=t(l,i),g=t(g,a),v=t(v,d),m=t(m,h);return[l,g,v,m]}function a(n){var t,r="",e=32*n.length;for(t=0;t<e;t+=8)r+=String.fromCharCode(n[t>>5]>>>t%32&255);return r}function d(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var e=8*n.length;for(t=0;t<e;t+=8)r[t>>5]|=(255&n.charCodeAt(t/8))<<t%32;return r}function h(n){return a(i(d(n),8*n.length))}function l(n,t){var r,e,o=d(n),u=[],c=[];for(u[15]=c[15]=void 0,o.length>16&&(o=i(o,8*n.length)),r=0;r<16;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(d(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="";for(r=0;r<n.length;r+=1)t=n.charCodeAt(r),e+="0123456789abcdef".charAt(t>>>4&15)+"0123456789abcdef".charAt(15&t);return e}function v(n){return unescape(encodeURIComponent(n))}function m(n){return h(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this);
-//# sourceMappingURL=md5.min.js.map \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/js_external/parsley.min.js b/wqflask/wqflask/static/new/js_external/parsley.min.js
deleted file mode 100644
index ab85c683..00000000
--- a/wqflask/wqflask/static/new/js_external/parsley.min.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Parsley dist/parsley.min.js build version 1.1.18 http://parsleyjs.org */
-!function(d){var h=function(a){this.messages={defaultMessage:"This value seems to be invalid.",type:{email:"This value should be a valid email.",url:"This value should be a valid url.",urlstrict:"This value should be a valid url.",number:"This value should be a valid number.",digits:"This value should be digits.",dateIso:"This value should be a valid date (YYYY-MM-DD).",alphanum:"This value should be alphanumeric.",phone:"This value should be a valid phone number."},notnull:"This value should not be null.",
-notblank:"This value should not be blank.",required:"This value is required.",regexp:"This value seems to be invalid.",min:"This value should be greater than or equal to %s.",max:"This value should be lower than or equal to %s.",range:"This value should be between %s and %s.",minlength:"This value is too short. It should have %s characters or more.",maxlength:"This value is too long. It should have %s characters or less.",rangelength:"This value length is invalid. It should be between %s and %s characters long.",
-mincheck:"You must select at least %s choices.",maxcheck:"You must select %s choices or less.",rangecheck:"You must select between %s and %s choices.",equalto:"This value should be the same."};this.init(a)};h.prototype={constructor:h,validators:{notnull:function(a){return 0<a.length},notblank:function(a){return"string"===typeof a&&""!==a.replace(/^\s+/g,"").replace(/\s+$/g,"")},required:function(a){if("object"===typeof a){for(var b in a)if(this.required(a[b]))return!0;return!1}return this.notnull(a)&&
-this.notblank(a)},type:function(a,b){var c;switch(b){case "number":c=/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/;break;case "digits":c=/^\d+$/;break;case "alphanum":c=/^\w+$/;break;case "email":c=/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))){2,6}$/i;
-break;case "url":a=/(https?|s?ftp|git)/i.test(a)?a:"http://"+a;case "urlstrict":c=/^(https?|s?ftp|git):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i;
-break;case "dateIso":c=/^(\d{4})\D?(0[1-9]|1[0-2])\D?([12]\d|0[1-9]|3[01])$/;break;case "phone":c=/^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$/;break;default:return!1}return""!==a?c.test(a):!1},regexp:function(a,b,c){return RegExp(b,c.options.regexpFlag||"").test(a)},minlength:function(a,b){return a.length>=b},maxlength:function(a,b){return a.length<=b},rangelength:function(a,b){return this.minlength(a,b[0])&&this.maxlength(a,b[1])},
-min:function(a,b){return Number(a)>=b},max:function(a,b){return Number(a)<=b},range:function(a,b){return a>=b[0]&&a<=b[1]},equalto:function(a,b,c){c.options.validateIfUnchanged=!0;return a===d(b).val()},remote:function(a,b,c){var f={},g={};f[c.$element.attr("name")]=a;"undefined"!==typeof c.options.remoteDatatype&&(g={dataType:c.options.remoteDatatype});var m=function(a,b){"undefined"!==typeof b&&("undefined"!==typeof c.Validator.messages.remote&&b!==c.Validator.messages.remote)&&d(c.ulError+" .remote").remove();
-c.updtConstraint({name:"remote",valid:a},b);c.manageValidationResult()},n=function(a){if("object"===typeof a)return a;try{a=d.parseJSON(a)}catch(b){}return a},e=function(a){return"object"===typeof a&&null!==a?"undefined"!==typeof a.error?a.error:"undefined"!==typeof a.message?a.message:null:null};d.ajax(d.extend({},{url:b,data:f,type:c.options.remoteMethod||"GET",success:function(a){a=n(a);m(1===a||!0===a||"object"===typeof a&&null!==a&&"undefined"!==typeof a.success,e(a))},error:function(a){a=n(a);
-m(!1,e(a))}},g));return null},mincheck:function(a,b){return this.minlength(a,b)},maxcheck:function(a,b){return this.maxlength(a,b)},rangecheck:function(a,b){return this.rangelength(a,b)}},init:function(a){var b=a.validators;a=a.messages;for(var c in b)this.addValidator(c,b[c]);for(c in a)this.addMessage(c,a[c])},formatMesssage:function(a,b){if("object"===typeof b){for(var c in b)a=this.formatMesssage(a,b[c]);return a}return"string"===typeof a?a.replace(/%s/i,b):""},addValidator:function(a,b){this.validators[a]=
-b},addMessage:function(a,b,c){if("undefined"!==typeof c&&!0===c)this.messages.type[a]=b;else if("type"===a)for(var d in b)this.messages.type[d]=b[d];else this.messages[a]=b}};var j=function(a,b,c){this.options=b;this.Validator=new h(b);if("ParsleyFieldMultiple"===c)return this;this.init(a,c||"ParsleyField")};j.prototype={constructor:j,init:function(a,b){this.type=b;this.valid=!0;this.element=a;this.validatedOnce=!1;this.$element=d(a);this.val=this.$element.val();this.isRequired=!1;this.constraints=
-{};"undefined"===typeof this.isRadioOrCheckbox&&(this.isRadioOrCheckbox=!1,this.hash=this.generateHash(),this.errorClassHandler=this.options.errors.classHandler(a,this.isRadioOrCheckbox)||this.$element);this.ulErrorManagement();this.bindHtml5Constraints();this.addConstraints();this.hasConstraints()&&this.bindValidationEvents()},setParent:function(a){this.$parent=d(a)},getParent:function(){return this.$parent},bindHtml5Constraints:function(){if(this.$element.hasClass("required")||this.$element.prop("required"))this.options.required=
-!0;"undefined"!==typeof this.$element.attr("type")&&RegExp(this.$element.attr("type"),"i").test("email url number range")&&(this.options.type=this.$element.attr("type"),RegExp(this.options.type,"i").test("number range")&&(this.options.type="number","undefined"!==typeof this.$element.attr("min")&&this.$element.attr("min").length&&(this.options.min=this.$element.attr("min")),"undefined"!==typeof this.$element.attr("max")&&this.$element.attr("max").length&&(this.options.max=this.$element.attr("max"))));
-"string"===typeof this.$element.attr("pattern")&&this.$element.attr("pattern").length&&(this.options.regexp=this.$element.attr("pattern"))},addConstraints:function(){for(var a in this.options){var b={};b[a]=this.options[a];this.addConstraint(b,!0)}},addConstraint:function(a,b){for(var c in a)c=c.toLowerCase(),"function"===typeof this.Validator.validators[c]&&(this.constraints[c]={name:c,requirements:a[c],valid:null},"required"===c&&(this.isRequired=!0),this.addCustomConstraintMessage(c));"undefined"===
-typeof b&&this.bindValidationEvents()},updateConstraint:function(a,b){for(var c in a)this.updtConstraint({name:c,requirements:a[c],valid:null},b)},updtConstraint:function(a,b){this.constraints[a.name]=d.extend(!0,this.constraints[a.name],a);"string"===typeof b&&(this.Validator.messages[a.name]=b);this.bindValidationEvents()},removeConstraint:function(a){a=a.toLowerCase();delete this.constraints[a];"required"===a&&(this.isRequired=!1);this.hasConstraints()?this.bindValidationEvents():"ParsleyForm"===
-typeof this.getParent()?this.getParent().removeItem(this.$element):this.destroy()},addCustomConstraintMessage:function(a){var b=a+("type"===a&&"undefined"!==typeof this.options[a]?this.options[a].charAt(0).toUpperCase()+this.options[a].substr(1):"")+"Message";"undefined"!==typeof this.options[b]&&this.Validator.addMessage("type"===a?this.options[a]:a,this.options[b],"type"===a)},bindValidationEvents:function(){this.valid=null;this.$element.addClass("parsley-validated");this.$element.off("."+this.type);
-this.options.remote&&!/change/i.test(this.options.trigger)&&(this.options.trigger=!this.options.trigger?"change":" change");var a=(!this.options.trigger?"":this.options.trigger)+(/key/i.test(this.options.trigger)?"":" keyup");this.$element.is("select")&&(a+=/change/i.test(a)?"":" change");a=a.replace(/^\s+/g,"").replace(/\s+$/g,"");this.$element.on((a+" ").split(" ").join("."+this.type+" "),!1,d.proxy(this.eventValidation,this))},generateHash:function(){return"parsley-"+(Math.random()+"").substring(2)},
-getHash:function(){return this.hash},getVal:function(){return this.$element.data("value")||this.$element.val()},eventValidation:function(a){var b=this.getVal();if("keyup"===a.type&&!/keyup/i.test(this.options.trigger)&&!this.validatedOnce||"change"===a.type&&!/change/i.test(this.options.trigger)&&!this.validatedOnce||!this.isRadioOrCheckbox&&this.getLength(b)<this.options.validationMinlength&&!this.validatedOnce)return!0;this.validate()},getLength:function(a){return!a||!a.hasOwnProperty("length")?
-0:a.length},isValid:function(){return this.validate(!1)},hasConstraints:function(){for(var a in this.constraints)return!0;return!1},validate:function(a){var b=this.getVal(),c=null;if(!this.hasConstraints())return null;if(this.options.listeners.onFieldValidate(this.element,this)||""===b&&!this.isRequired)return this.reset(),null;if(!this.needsValidation(b))return this.valid;c=this.applyValidators();("undefined"!==typeof a?a:this.options.showErrors)&&this.manageValidationResult();return c},needsValidation:function(a){if(!this.options.validateIfUnchanged&&
-null!==this.valid&&this.val===a&&this.validatedOnce)return!1;this.val=a;return this.validatedOnce=!0},applyValidators:function(){var a=null,b;for(b in this.constraints){var c=this.Validator.validators[this.constraints[b].name](this.val,this.constraints[b].requirements,this);!1===c?(a=!1,this.constraints[b].valid=a,this.options.listeners.onFieldError(this.element,this.constraints,this)):!0===c&&(this.constraints[b].valid=!0,a=!1!==a,!1===this.options.listeners.onFieldSuccess(this.element,this.constraints,
-this)&&(a=!1))}return a},manageValidationResult:function(){var a=null,b;for(b in this.constraints)!1===this.constraints[b].valid?(this.manageError(this.constraints[b]),a=!1):!0===this.constraints[b].valid&&(this.removeError(this.constraints[b].name),a=!1!==a);this.valid=a;if(!0===this.valid)return this.removeErrors(),this.errorClassHandler.removeClass(this.options.errorClass).addClass(this.options.successClass),!0;if(!1===this.valid)return this.errorClassHandler.removeClass(this.options.successClass).addClass(this.options.errorClass),
-!1;this.ulError&&0===d(this.ulError).children().length&&this.removeErrors();return a},ulErrorManagement:function(){this.ulError="#"+this.hash;this.ulTemplate=d(this.options.errors.errorsWrapper).attr("id",this.hash).addClass("parsley-error-list")},removeError:function(a){a=this.ulError+" ."+a;var b=this;this.options.animate?d(a).fadeOut(this.options.animateDuration,function(){d(this).remove();b.ulError&&0===d(b.ulError).children().length&&b.removeErrors()}):d(a).remove()},addError:function(a){for(var b in a){var c=
-d(this.options.errors.errorElem).addClass(b);d(this.ulError).append(this.options.animate?d(c).html(a[b]).hide().fadeIn(this.options.animateDuration):d(c).html(a[b]))}},removeErrors:function(){this.options.animate?d(this.ulError).fadeOut(this.options.animateDuration,function(){d(this).remove()}):d(this.ulError).remove()},reset:function(){this.valid=null;this.removeErrors();this.validatedOnce=!1;this.errorClassHandler.removeClass(this.options.successClass).removeClass(this.options.errorClass);for(var a in this.constraints)this.constraints[a].valid=
-null;return this},manageError:function(a){d(this.ulError).length||this.manageErrorContainer();if(!("required"===a.name&&null!==this.getVal()&&0<this.getVal().length)&&(!this.isRequired||!("required"!==a.name&&(null===this.getVal()||0===this.getVal().length)))){var b=a.name,c=!1!==this.options.errorMessage?"custom-error-message":b,f={};a=!1!==this.options.errorMessage?this.options.errorMessage:"type"===a.name?this.Validator.messages[b][a.requirements]:"undefined"===typeof this.Validator.messages[b]?
-this.Validator.messages.defaultMessage:this.Validator.formatMesssage(this.Validator.messages[b],a.requirements);d(this.ulError+" ."+c).length||(f[c]=a,this.addError(f))}},manageErrorContainer:function(){var a=this.options.errorContainer||this.options.errors.container(this.element,this.isRadioOrCheckbox),b=this.options.animate?this.ulTemplate.show():this.ulTemplate;"undefined"!==typeof a?d(a).append(b):!this.isRadioOrCheckbox?this.$element.after(b):this.$element.parent().after(b)},addListener:function(a){for(var b in a)this.options.listeners[b]=
-a[b]},destroy:function(){this.$element.removeClass("parsley-validated");this.reset().$element.off("."+this.type).removeData(this.type)}};var l=function(a,b,c){this.initMultiple(a,b);this.inherit(a,b);this.Validator=new h(b);this.init(a,c||"ParsleyFieldMultiple")};l.prototype={constructor:l,initMultiple:function(a,b){this.element=a;this.$element=d(a);this.group=b.group||!1;this.hash=this.getName();this.siblings=this.group?'[data-group="'+this.group+'"]':'input[name="'+this.$element.attr("name")+'"]';
-this.isRadioOrCheckbox=!0;this.isRadio=this.$element.is("input[type=radio]");this.isCheckbox=this.$element.is("input[type=checkbox]");this.errorClassHandler=b.errors.classHandler(a,this.isRadioOrCheckbox)||this.$element.parent()},inherit:function(a,b){var c=new j(a,b,"ParsleyFieldMultiple"),d;for(d in c)"undefined"===typeof this[d]&&(this[d]=c[d])},getName:function(){if(this.group)return"parsley-"+this.group;if("undefined"===typeof this.$element.attr("name"))throw"A radio / checkbox input must have a data-group attribute or a name to be Parsley validated !";
-return"parsley-"+this.$element.attr("name").replace(/(:|\.|\[|\])/g,"")},getVal:function(){if(this.isRadio)return d(this.siblings+":checked").val()||"";if(this.isCheckbox){var a=[];d(this.siblings+":checked").each(function(){a.push(d(this).val())});return a}},bindValidationEvents:function(){this.valid=null;this.$element.addClass("parsley-validated");this.$element.off("."+this.type);var a=this,b=(!this.options.trigger?"":this.options.trigger)+(/change/i.test(this.options.trigger)?"":" change"),b=b.replace(/^\s+/g,
-"").replace(/\s+$/g,"");d(this.siblings).each(function(){d(this).on(b.split(" ").join("."+a.type+" "),!1,d.proxy(a.eventValidation,a))})}};var k=function(a,b,c){this.init(a,b,c||"parsleyForm")};k.prototype={constructor:k,init:function(a,b,c){this.type=c;this.items=[];this.$element=d(a);this.options=b;var f=this;this.$element.find(b.inputs).each(function(){f.addItem(this)});this.$element.on("submit."+this.type,!1,d.proxy(this.validate,this))},addListener:function(a){for(var b in a)if(/Field/.test(b))for(var c=
-0;c<this.items.length;c++)this.items[c].addListener(a);else this.options.listeners[b]=a[b]},addItem:function(a){if(d(a).is(this.options.excluded))return!1;a=d(a).parsley(this.options);a.setParent(this);this.items.push(a)},removeItem:function(a){a=d(a).parsley();for(var b=0;b<this.items.length;b++)if(this.items[b].hash===a.hash)return this.items[b].destroy(),this.items.splice(b,1),!0;return!1},validate:function(a){var b=!0;this.focusedField=!1;for(var c=0;c<this.items.length;c++)if("undefined"!==typeof this.items[c]&&
-!1===this.items[c].validate()&&(b=!1,!this.focusedField&&"first"===this.options.focus||"last"===this.options.focus))this.focusedField=this.items[c].$element;this.focusedField&&!b&&this.focusedField.focus();a=this.options.listeners.onFormSubmit(b,a,this);return"undefined"!==typeof a?a:b},isValid:function(){for(var a=0;a<this.items.length;a++)if(!1===this.items[a].isValid())return!1;return!0},removeErrors:function(){for(var a=0;a<this.items.length;a++)this.items[a].parsley("reset")},destroy:function(){for(var a=
-0;a<this.items.length;a++)this.items[a].destroy();this.$element.off("."+this.type).removeData(this.type)},reset:function(){for(var a=0;a<this.items.length;a++)this.items[a].reset()}};d.fn.parsley=function(a,b){function c(c,g){var e=d(c).data(g);if(!e){switch(g){case "parsleyForm":e=new k(c,f,"parsleyForm");break;case "parsleyField":e=new j(c,f,"parsleyField");break;case "parsleyFieldMultiple":e=new l(c,f,"parsleyFieldMultiple");break;default:return}d(c).data(g,e)}return"string"===typeof a&&"function"===
-typeof e[a]?(e=e[a](b),"undefined"!==typeof e?e:d(c)):e}var f=d.extend(!0,{},d.fn.parsley.defaults,"undefined"!==typeof window.ParsleyConfig?window.ParsleyConfig:{},a,this.data()),g=null;d(this).is("form")||!0===d(this).data("bind")?g=c(d(this),"parsleyForm"):d(this).is(f.inputs)&&!d(this).is(f.excluded)&&(g=c(d(this),!d(this).is("input[type=radio], input[type=checkbox]")?"parsleyField":"parsleyFieldMultiple"));return"function"===typeof b?b():g};d.fn.parsley.Constructor=k;d.fn.parsley.defaults={inputs:"input, textarea, select",
-excluded:"input[type=hidden], input[type=file], :disabled",trigger:!1,animate:!0,animateDuration:300,focus:"first",validationMinlength:3,successClass:"parsley-success",errorClass:"parsley-error",errorMessage:!1,validators:{},showErrors:!0,messages:{},validateIfUnchanged:!1,errors:{classHandler:function(){},container:function(){},errorsWrapper:"<ul></ul>",errorElem:"<li></li>"},listeners:{onFieldValidate:function(){return!1},onFormSubmit:function(){},onFieldError:function(){},onFieldSuccess:function(){}}};
-d(window).on("load",function(){d('[data-validate="parsley"]').each(function(){d(this).parsley()})})}(window.jQuery||window.Zepto);
diff --git a/wqflask/wqflask/static/new/js_external/plotly-latest.min.js b/wqflask/wqflask/static/new/js_external/plotly-latest.min.js
deleted file mode 100644
index dde07672..00000000
--- a/wqflask/wqflask/static/new/js_external/plotly-latest.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
-* plotly.js v1.53.0
-* Copyright 2012-2020, Plotly, Inc.
-* All rights reserved.
-* Licensed under the MIT license
-*/
-!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Plotly=t()}}(function(){return function(){return function t(e,r,n){function a(o,s){if(!r[o]){if(!e[o]){var l="function"==typeof require&&require;if(!s&&l)return l(o,!0);if(i)return i(o,!0);var c=new Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var u=r[o]={exports:{}};e[o][0].call(u.exports,function(t){return a(e[o][1][t]||t)},u,u.exports,t,e,r,n)}return r[o].exports}for(var i="function"==typeof require&&require,o=0;o<n.length;o++)a(n[o]);return a}}()({1:[function(t,e,r){"use strict";var n=t("../src/lib"),a={"X,X div":"direction:ltr;font-family:'Open Sans', verdana, arial, sans-serif;margin:0;padding:0;","X input,X button":"font-family:'Open Sans', verdana, arial, sans-serif;","X input:focus,X button:focus":"outline:none;","X a":"text-decoration:none;","X a:hover":"text-decoration:none;","X .crisp":"shape-rendering:crispEdges;","X .user-select-none":"-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;","X svg":"overflow:hidden;","X svg a":"fill:#447adb;","X svg a:hover":"fill:#3c6dc5;","X .main-svg":"position:absolute;top:0;left:0;pointer-events:none;","X .main-svg .draglayer":"pointer-events:all;","X .cursor-default":"cursor:default;","X .cursor-pointer":"cursor:pointer;","X .cursor-crosshair":"cursor:crosshair;","X .cursor-move":"cursor:move;","X .cursor-col-resize":"cursor:col-resize;","X .cursor-row-resize":"cursor:row-resize;","X .cursor-ns-resize":"cursor:ns-resize;","X .cursor-ew-resize":"cursor:ew-resize;","X .cursor-sw-resize":"cursor:sw-resize;","X .cursor-s-resize":"cursor:s-resize;","X .cursor-se-resize":"cursor:se-resize;","X .cursor-w-resize":"cursor:w-resize;","X .cursor-e-resize":"cursor:e-resize;","X .cursor-nw-resize":"cursor:nw-resize;","X .cursor-n-resize":"cursor:n-resize;","X .cursor-ne-resize":"cursor:ne-resize;","X .cursor-grab":"cursor:-webkit-grab;cursor:grab;","X .modebar":"position:absolute;top:2px;right:2px;","X .ease-bg":"-webkit-transition:background-color 0.3s ease 0s;-moz-transition:background-color 0.3s ease 0s;-ms-transition:background-color 0.3s ease 0s;-o-transition:background-color 0.3s ease 0s;transition:background-color 0.3s ease 0s;","X .modebar--hover>:not(.watermark)":"opacity:0;-webkit-transition:opacity 0.3s ease 0s;-moz-transition:opacity 0.3s ease 0s;-ms-transition:opacity 0.3s ease 0s;-o-transition:opacity 0.3s ease 0s;transition:opacity 0.3s ease 0s;","X:hover .modebar--hover .modebar-group":"opacity:1;","X .modebar-group":"float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;","X .modebar-btn":"position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;","X .modebar-btn svg":"position:relative;top:2px;","X .modebar.vertical":"display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;","X .modebar.vertical svg":"top:-1px;","X .modebar.vertical .modebar-group":"display:block;float:none;padding-left:0px;padding-bottom:8px;","X .modebar.vertical .modebar-group .modebar-btn":"display:block;text-align:center;","X [data-title]:before,X [data-title]:after":"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;","X [data-title]:hover:before,X [data-title]:hover:after":"display:block;opacity:1;","X [data-title]:before":"content:'';position:absolute;background:transparent;border:6px solid transparent;z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;","X [data-title]:after":"content:attr(data-title);background:#69738a;color:white;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;","X .vertical [data-title]:before,X .vertical [data-title]:after":"top:0%;right:200%;","X .vertical [data-title]:before":"border:6px solid transparent;border-left-color:#69738a;margin-top:8px;margin-right:-30px;","X .select-outline":"fill:none;stroke-width:1;shape-rendering:crispEdges;","X .select-outline-1":"stroke:white;","X .select-outline-2":"stroke:black;stroke-dasharray:2px 2px;",Y:"font-family:'Open Sans';position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;","Y p":"margin:0;","Y .notifier-note":"min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140,151,175,0.9);color:#fff;padding:10px;overflow-wrap:break-word;word-wrap:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;","Y .notifier-close":"color:#fff;opacity:0.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;","Y .notifier-close:hover":"color:#444;text-decoration:none;cursor:pointer;"};for(var i in a){var o=i.replace(/^,/," ,").replace(/X/g,".js-plotly-plot .plotly").replace(/Y/g,".plotly-notifier");n.addStyleRule(o,a[i])}},{"../src/lib":717}],2:[function(t,e,r){"use strict";e.exports=t("../src/transforms/aggregate")},{"../src/transforms/aggregate":1297}],3:[function(t,e,r){"use strict";e.exports=t("../src/traces/bar")},{"../src/traces/bar":864}],4:[function(t,e,r){"use strict";e.exports=t("../src/traces/barpolar")},{"../src/traces/barpolar":877}],5:[function(t,e,r){"use strict";e.exports=t("../src/traces/box")},{"../src/traces/box":887}],6:[function(t,e,r){"use strict";e.exports=t("../src/components/calendars")},{"../src/components/calendars":589}],7:[function(t,e,r){"use strict";e.exports=t("../src/traces/candlestick")},{"../src/traces/candlestick":896}],8:[function(t,e,r){"use strict";e.exports=t("../src/traces/carpet")},{"../src/traces/carpet":915}],9:[function(t,e,r){"use strict";e.exports=t("../src/traces/choropleth")},{"../src/traces/choropleth":929}],10:[function(t,e,r){"use strict";e.exports=t("../src/traces/choroplethmapbox")},{"../src/traces/choroplethmapbox":936}],11:[function(t,e,r){"use strict";e.exports=t("../src/traces/cone")},{"../src/traces/cone":942}],12:[function(t,e,r){"use strict";e.exports=t("../src/traces/contour")},{"../src/traces/contour":957}],13:[function(t,e,r){"use strict";e.exports=t("../src/traces/contourcarpet")},{"../src/traces/contourcarpet":968}],14:[function(t,e,r){"use strict";e.exports=t("../src/core")},{"../src/core":695}],15:[function(t,e,r){"use strict";e.exports=t("../src/traces/densitymapbox")},{"../src/traces/densitymapbox":976}],16:[function(t,e,r){"use strict";e.exports=t("../src/transforms/filter")},{"../src/transforms/filter":1298}],17:[function(t,e,r){"use strict";e.exports=t("../src/traces/funnel")},{"../src/traces/funnel":986}],18:[function(t,e,r){"use strict";e.exports=t("../src/traces/funnelarea")},{"../src/traces/funnelarea":995}],19:[function(t,e,r){"use strict";e.exports=t("../src/transforms/groupby")},{"../src/transforms/groupby":1299}],20:[function(t,e,r){"use strict";e.exports=t("../src/traces/heatmap")},{"../src/traces/heatmap":1008}],21:[function(t,e,r){"use strict";e.exports=t("../src/traces/heatmapgl")},{"../src/traces/heatmapgl":1017}],22:[function(t,e,r){"use strict";e.exports=t("../src/traces/histogram")},{"../src/traces/histogram":1029}],23:[function(t,e,r){"use strict";e.exports=t("../src/traces/histogram2d")},{"../src/traces/histogram2d":1035}],24:[function(t,e,r){"use strict";e.exports=t("../src/traces/histogram2dcontour")},{"../src/traces/histogram2dcontour":1039}],25:[function(t,e,r){"use strict";e.exports=t("../src/traces/image")},{"../src/traces/image":1046}],26:[function(t,e,r){"use strict";var n=t("./core");n.register([t("./bar"),t("./box"),t("./heatmap"),t("./histogram"),t("./histogram2d"),t("./histogram2dcontour"),t("./contour"),t("./scatterternary"),t("./violin"),t("./funnel"),t("./waterfall"),t("./image"),t("./pie"),t("./sunburst"),t("./treemap"),t("./funnelarea"),t("./scatter3d"),t("./surface"),t("./isosurface"),t("./volume"),t("./mesh3d"),t("./cone"),t("./streamtube"),t("./scattergeo"),t("./choropleth"),t("./scattergl"),t("./splom"),t("./pointcloud"),t("./heatmapgl"),t("./parcoords"),t("./parcats"),t("./scattermapbox"),t("./choroplethmapbox"),t("./densitymapbox"),t("./sankey"),t("./indicator"),t("./table"),t("./carpet"),t("./scattercarpet"),t("./contourcarpet"),t("./ohlc"),t("./candlestick"),t("./scatterpolar"),t("./scatterpolargl"),t("./barpolar")]),n.register([t("./aggregate"),t("./filter"),t("./groupby"),t("./sort")]),n.register([t("./calendars")]),e.exports=n},{"./aggregate":2,"./bar":3,"./barpolar":4,"./box":5,"./calendars":6,"./candlestick":7,"./carpet":8,"./choropleth":9,"./choroplethmapbox":10,"./cone":11,"./contour":12,"./contourcarpet":13,"./core":14,"./densitymapbox":15,"./filter":16,"./funnel":17,"./funnelarea":18,"./groupby":19,"./heatmap":20,"./heatmapgl":21,"./histogram":22,"./histogram2d":23,"./histogram2dcontour":24,"./image":25,"./indicator":27,"./isosurface":28,"./mesh3d":29,"./ohlc":30,"./parcats":31,"./parcoords":32,"./pie":33,"./pointcloud":34,"./sankey":35,"./scatter3d":36,"./scattercarpet":37,"./scattergeo":38,"./scattergl":39,"./scattermapbox":40,"./scatterpolar":41,"./scatterpolargl":42,"./scatterternary":43,"./sort":44,"./splom":45,"./streamtube":46,"./sunburst":47,"./surface":48,"./table":49,"./treemap":50,"./violin":51,"./volume":52,"./waterfall":53}],27:[function(t,e,r){"use strict";e.exports=t("../src/traces/indicator")},{"../src/traces/indicator":1054}],28:[function(t,e,r){"use strict";e.exports=t("../src/traces/isosurface")},{"../src/traces/isosurface":1060}],29:[function(t,e,r){"use strict";e.exports=t("../src/traces/mesh3d")},{"../src/traces/mesh3d":1065}],30:[function(t,e,r){"use strict";e.exports=t("../src/traces/ohlc")},{"../src/traces/ohlc":1070}],31:[function(t,e,r){"use strict";e.exports=t("../src/traces/parcats")},{"../src/traces/parcats":1079}],32:[function(t,e,r){"use strict";e.exports=t("../src/traces/parcoords")},{"../src/traces/parcoords":1089}],33:[function(t,e,r){"use strict";e.exports=t("../src/traces/pie")},{"../src/traces/pie":1100}],34:[function(t,e,r){"use strict";e.exports=t("../src/traces/pointcloud")},{"../src/traces/pointcloud":1109}],35:[function(t,e,r){"use strict";e.exports=t("../src/traces/sankey")},{"../src/traces/sankey":1115}],36:[function(t,e,r){"use strict";e.exports=t("../src/traces/scatter3d")},{"../src/traces/scatter3d":1152}],37:[function(t,e,r){"use strict";e.exports=t("../src/traces/scattercarpet")},{"../src/traces/scattercarpet":1159}],38:[function(t,e,r){"use strict";e.exports=t("../src/traces/scattergeo")},{"../src/traces/scattergeo":1167}],39:[function(t,e,r){"use strict";e.exports=t("../src/traces/scattergl")},{"../src/traces/scattergl":1180}],40:[function(t,e,r){"use strict";e.exports=t("../src/traces/scattermapbox")},{"../src/traces/scattermapbox":1190}],41:[function(t,e,r){"use strict";e.exports=t("../src/traces/scatterpolar")},{"../src/traces/scatterpolar":1198}],42:[function(t,e,r){"use strict";e.exports=t("../src/traces/scatterpolargl")},{"../src/traces/scatterpolargl":1205}],43:[function(t,e,r){"use strict";e.exports=t("../src/traces/scatterternary")},{"../src/traces/scatterternary":1213}],44:[function(t,e,r){"use strict";e.exports=t("../src/transforms/sort")},{"../src/transforms/sort":1301}],45:[function(t,e,r){"use strict";e.exports=t("../src/traces/splom")},{"../src/traces/splom":1222}],46:[function(t,e,r){"use strict";e.exports=t("../src/traces/streamtube")},{"../src/traces/streamtube":1230}],47:[function(t,e,r){"use strict";e.exports=t("../src/traces/sunburst")},{"../src/traces/sunburst":1238}],48:[function(t,e,r){"use strict";e.exports=t("../src/traces/surface")},{"../src/traces/surface":1247}],49:[function(t,e,r){"use strict";e.exports=t("../src/traces/table")},{"../src/traces/table":1255}],50:[function(t,e,r){"use strict";e.exports=t("../src/traces/treemap")},{"../src/traces/treemap":1264}],51:[function(t,e,r){"use strict";e.exports=t("../src/traces/violin")},{"../src/traces/violin":1276}],52:[function(t,e,r){"use strict";e.exports=t("../src/traces/volume")},{"../src/traces/volume":1284}],53:[function(t,e,r){"use strict";e.exports=t("../src/traces/waterfall")},{"../src/traces/waterfall":1292}],54:[function(t,e,r){"use strict";e.exports=function(t){var e=(t=t||{}).eye||[0,0,1],r=t.center||[0,0,0],s=t.up||[0,1,0],l=t.distanceLimits||[0,1/0],c=t.mode||"turntable",u=n(),h=a(),f=i();return u.setDistanceLimits(l[0],l[1]),u.lookAt(0,e,r,s),h.setDistanceLimits(l[0],l[1]),h.lookAt(0,e,r,s),f.setDistanceLimits(l[0],l[1]),f.lookAt(0,e,r,s),new o({turntable:u,orbit:h,matrix:f},c)};var n=t("turntable-camera-controller"),a=t("orbit-camera-controller"),i=t("matrix-camera-controller");function o(t,e){this._controllerNames=Object.keys(t),this._controllerList=this._controllerNames.map(function(e){return t[e]}),this._mode=e,this._active=t[e],this._active||(this._mode="turntable",this._active=t.turntable),this.modes=this._controllerNames,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}var s=o.prototype;[["flush",1],["idle",1],["lookAt",4],["rotate",4],["pan",4],["translate",4],["setMatrix",2],["setDistanceLimits",2],["setDistance",2]].forEach(function(t){for(var e=t[0],r=[],n=0;n<t[1];++n)r.push("a"+n);var a="var cc=this._controllerList;for(var i=0;i<cc.length;++i){cc[i]."+t[0]+"("+r.join()+")}";s[e]=Function.apply(null,r.concat(a))}),s.recalcMatrix=function(t){this._active.recalcMatrix(t)},s.getDistance=function(t){return this._active.getDistance(t)},s.getDistanceLimits=function(t){return this._active.getDistanceLimits(t)},s.lastT=function(){return this._active.lastT()},s.setMode=function(t){if(t!==this._mode){var e=this._controllerNames.indexOf(t);if(!(e<0)){var r=this._active,n=this._controllerList[e],a=Math.max(r.lastT(),n.lastT());r.recalcMatrix(a),n.setMatrix(a,r.computedMatrix),this._active=n,this._mode=t,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}}},s.getMode=function(){return this._mode}},{"matrix-camera-controller":434,"orbit-camera-controller":457,"turntable-camera-controller":540}],55:[function(t,e,r){var n,a;n=this,a=function(t,e,r,n,a){"use strict";function i(t){return t.target.depth}function o(t,e){return t.sourceLinks.length?t.depth:e-1}function s(t){return function(){return t}}a=a&&a.hasOwnProperty("default")?a.default:a;var l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};function c(t,e){return h(t.source,e.source)||t.index-e.index}function u(t,e){return h(t.target,e.target)||t.index-e.index}function h(t,e){return t.partOfCycle===e.partOfCycle?t.y0-e.y0:"top"===t.circularLinkType||"bottom"===e.circularLinkType?-1:1}function f(t){return t.value}function p(t){return(t.y0+t.y1)/2}function d(t){return p(t.source)}function g(t){return p(t.target)}function v(t){return t.index}function m(t){return t.nodes}function y(t){return t.links}function x(t,e){var r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function b(t,e){return e(t)}var _=25,w=10,k=.3;function T(t,e){var r=0,n=0;t.links.forEach(function(a){a.circular&&(a.source.circularLinkType||a.target.circularLinkType?a.circularLinkType=a.source.circularLinkType?a.source.circularLinkType:a.target.circularLinkType:a.circularLinkType=r<n?"top":"bottom","top"==a.circularLinkType?r+=1:n+=1,t.nodes.forEach(function(t){b(t,e)!=b(a.source,e)&&b(t,e)!=b(a.target,e)||(t.circularLinkType=a.circularLinkType)}))}),t.links.forEach(function(t){t.circular&&(t.source.circularLinkType==t.target.circularLinkType&&(t.circularLinkType=t.source.circularLinkType),Y(t,e)&&(t.circularLinkType=t.source.circularLinkType))})}function M(t){var e=Math.abs(t.y1-t.y0),r=Math.abs(t.target.x0-t.source.x1);return Math.atan(r/e)}function A(t,e){var r=0;t.sourceLinks.forEach(function(t){r=t.circular&&!Y(t,e)?r+1:r});var n=0;return t.targetLinks.forEach(function(t){n=t.circular&&!Y(t,e)?n+1:n}),r+n}function S(t){var e=t.source.sourceLinks,r=0;e.forEach(function(t){r=t.circular?r+1:r});var n=t.target.targetLinks,a=0;return n.forEach(function(t){a=t.circular?a+1:a}),!(r>1||a>1)}function E(t,e,r){return t.sort(C),t.forEach(function(n,a){var i,o,s=0;if(Y(n,r)&&S(n))n.circularPathData.verticalBuffer=s+n.width/2;else{for(var l=0;l<a;l++)if(i=t[a],o=t[l],!(i.source.column<o.target.column||i.target.column>o.source.column)){var c=t[l].circularPathData.verticalBuffer+t[l].width/2+e;s=c>s?c:s}n.circularPathData.verticalBuffer=s+n.width/2}}),t}function L(t,r,a,i){var o=e.min(t.links,function(t){return t.source.y0});t.links.forEach(function(t){t.circular&&(t.circularPathData={})}),E(t.links.filter(function(t){return"top"==t.circularLinkType}),r,i),E(t.links.filter(function(t){return"bottom"==t.circularLinkType}),r,i),t.links.forEach(function(e){if(e.circular){if(e.circularPathData.arcRadius=e.width+w,e.circularPathData.leftNodeBuffer=5,e.circularPathData.rightNodeBuffer=5,e.circularPathData.sourceWidth=e.source.x1-e.source.x0,e.circularPathData.sourceX=e.source.x0+e.circularPathData.sourceWidth,e.circularPathData.targetX=e.target.x0,e.circularPathData.sourceY=e.y0,e.circularPathData.targetY=e.y1,Y(e,i)&&S(e))e.circularPathData.leftSmallArcRadius=w+e.width/2,e.circularPathData.leftLargeArcRadius=w+e.width/2,e.circularPathData.rightSmallArcRadius=w+e.width/2,e.circularPathData.rightLargeArcRadius=w+e.width/2,"bottom"==e.circularLinkType?(e.circularPathData.verticalFullExtent=e.source.y1+_+e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.rightLargeArcRadius):(e.circularPathData.verticalFullExtent=e.source.y0-_-e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.rightLargeArcRadius);else{var s=e.source.column,l=e.circularLinkType,c=t.links.filter(function(t){return t.source.column==s&&t.circularLinkType==l});"bottom"==e.circularLinkType?c.sort(O):c.sort(P);var u=0;c.forEach(function(t,n){t.circularLinkID==e.circularLinkID&&(e.circularPathData.leftSmallArcRadius=w+e.width/2+u,e.circularPathData.leftLargeArcRadius=w+e.width/2+n*r+u),u+=t.width}),s=e.target.column,c=t.links.filter(function(t){return t.target.column==s&&t.circularLinkType==l}),"bottom"==e.circularLinkType?c.sort(I):c.sort(z),u=0,c.forEach(function(t,n){t.circularLinkID==e.circularLinkID&&(e.circularPathData.rightSmallArcRadius=w+e.width/2+u,e.circularPathData.rightLargeArcRadius=w+e.width/2+n*r+u),u+=t.width}),"bottom"==e.circularLinkType?(e.circularPathData.verticalFullExtent=Math.max(a,e.source.y1,e.target.y1)+_+e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.rightLargeArcRadius):(e.circularPathData.verticalFullExtent=o-_-e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.rightLargeArcRadius)}e.circularPathData.leftInnerExtent=e.circularPathData.sourceX+e.circularPathData.leftNodeBuffer,e.circularPathData.rightInnerExtent=e.circularPathData.targetX-e.circularPathData.rightNodeBuffer,e.circularPathData.leftFullExtent=e.circularPathData.sourceX+e.circularPathData.leftLargeArcRadius+e.circularPathData.leftNodeBuffer,e.circularPathData.rightFullExtent=e.circularPathData.targetX-e.circularPathData.rightLargeArcRadius-e.circularPathData.rightNodeBuffer}if(e.circular)e.path=function(t){var e="";e="top"==t.circularLinkType?"M"+t.circularPathData.sourceX+" "+t.circularPathData.sourceY+" L"+t.circularPathData.leftInnerExtent+" "+t.circularPathData.sourceY+" A"+t.circularPathData.leftLargeArcRadius+" "+t.circularPathData.leftSmallArcRadius+" 0 0 0 "+t.circularPathData.leftFullExtent+" "+(t.circularPathData.sourceY-t.circularPathData.leftSmallArcRadius)+" L"+t.circularPathData.leftFullExtent+" "+t.circularPathData.verticalLeftInnerExtent+" A"+t.circularPathData.leftLargeArcRadius+" "+t.circularPathData.leftLargeArcRadius+" 0 0 0 "+t.circularPathData.leftInnerExtent+" "+t.circularPathData.verticalFullExtent+" L"+t.circularPathData.rightInnerExtent+" "+t.circularPathData.verticalFullExtent+" A"+t.circularPathData.rightLargeArcRadius+" "+t.circularPathData.rightLargeArcRadius+" 0 0 0 "+t.circularPathData.rightFullExtent+" "+t.circularPathData.verticalRightInnerExtent+" L"+t.circularPathData.rightFullExtent+" "+(t.circularPathData.targetY-t.circularPathData.rightSmallArcRadius)+" A"+t.circularPathData.rightLargeArcRadius+" "+t.circularPathData.rightSmallArcRadius+" 0 0 0 "+t.circularPathData.rightInnerExtent+" "+t.circularPathData.targetY+" L"+t.circularPathData.targetX+" "+t.circularPathData.targetY:"M"+t.circularPathData.sourceX+" "+t.circularPathData.sourceY+" L"+t.circularPathData.leftInnerExtent+" "+t.circularPathData.sourceY+" A"+t.circularPathData.leftLargeArcRadius+" "+t.circularPathData.leftSmallArcRadius+" 0 0 1 "+t.circularPathData.leftFullExtent+" "+(t.circularPathData.sourceY+t.circularPathData.leftSmallArcRadius)+" L"+t.circularPathData.leftFullExtent+" "+t.circularPathData.verticalLeftInnerExtent+" A"+t.circularPathData.leftLargeArcRadius+" "+t.circularPathData.leftLargeArcRadius+" 0 0 1 "+t.circularPathData.leftInnerExtent+" "+t.circularPathData.verticalFullExtent+" L"+t.circularPathData.rightInnerExtent+" "+t.circularPathData.verticalFullExtent+" A"+t.circularPathData.rightLargeArcRadius+" "+t.circularPathData.rightLargeArcRadius+" 0 0 1 "+t.circularPathData.rightFullExtent+" "+t.circularPathData.verticalRightInnerExtent+" L"+t.circularPathData.rightFullExtent+" "+(t.circularPathData.targetY+t.circularPathData.rightSmallArcRadius)+" A"+t.circularPathData.rightLargeArcRadius+" "+t.circularPathData.rightSmallArcRadius+" 0 0 1 "+t.circularPathData.rightInnerExtent+" "+t.circularPathData.targetY+" L"+t.circularPathData.targetX+" "+t.circularPathData.targetY;return e}(e);else{var h=n.linkHorizontal().source(function(t){return[t.source.x0+(t.source.x1-t.source.x0),t.y0]}).target(function(t){return[t.target.x0,t.y1]});e.path=h(e)}})}function C(t,e){return D(t)==D(e)?"bottom"==t.circularLinkType?O(t,e):P(t,e):D(e)-D(t)}function P(t,e){return t.y0-e.y0}function O(t,e){return e.y0-t.y0}function z(t,e){return t.y1-e.y1}function I(t,e){return e.y1-t.y1}function D(t){return t.target.column-t.source.column}function R(t){return t.target.x0-t.source.x1}function F(t,e){var r=M(t),n=R(e)/Math.tan(r);return"up"==G(t)?t.y1+n:t.y1-n}function B(t,e){var r=M(t),n=R(e)/Math.tan(r);return"up"==G(t)?t.y1-n:t.y1+n}function N(t,e,r,n){t.links.forEach(function(a){if(!a.circular&&a.target.column-a.source.column>1){var i=a.source.column+1,o=a.target.column-1,s=1,l=o-i+1;for(s=1;i<=o;i++,s++)t.nodes.forEach(function(o){if(o.column==i){var c,u=s/(l+1),h=Math.pow(1-u,3),f=3*u*Math.pow(1-u,2),p=3*Math.pow(u,2)*(1-u),d=Math.pow(u,3),g=h*a.y0+f*a.y0+p*a.y1+d*a.y1,v=g-a.width/2,m=g+a.width/2;v>o.y0&&v<o.y1?(c=o.y1-v+10,c="bottom"==o.circularLinkType?c:-c,o=V(o,c,e,r),t.nodes.forEach(function(t){b(t,n)!=b(o,n)&&t.column==o.column&&j(o,t)&&V(t,c,e,r)})):m>o.y0&&m<o.y1?(c=m-o.y0+10,o=V(o,c,e,r),t.nodes.forEach(function(t){b(t,n)!=b(o,n)&&t.column==o.column&&t.y0<o.y1&&t.y1>o.y1&&V(t,c,e,r)})):v<o.y0&&m>o.y1&&(c=m-o.y0+10,o=V(o,c,e,r),t.nodes.forEach(function(t){b(t,n)!=b(o,n)&&t.column==o.column&&t.y0<o.y1&&t.y1>o.y1&&V(t,c,e,r)}))}})}})}function j(t,e){return t.y0>e.y0&&t.y0<e.y1||(t.y1>e.y0&&t.y1<e.y1||t.y0<e.y0&&t.y1>e.y1)}function V(t,e,r,n){return t.y0+e>=r&&t.y1+e<=n&&(t.y0=t.y0+e,t.y1=t.y1+e,t.targetLinks.forEach(function(t){t.y1=t.y1+e}),t.sourceLinks.forEach(function(t){t.y0=t.y0+e})),t}function U(t,e,r,n){t.nodes.forEach(function(a){n&&a.y+(a.y1-a.y0)>e&&(a.y=a.y-(a.y+(a.y1-a.y0)-e));var i=t.links.filter(function(t){return b(t.source,r)==b(a,r)}),o=i.length;o>1&&i.sort(function(t,e){if(!t.circular&&!e.circular){if(t.target.column==e.target.column)return t.y1-e.y1;if(!H(t,e))return t.y1-e.y1;if(t.target.column>e.target.column){var r=B(e,t);return t.y1-r}if(e.target.column>t.target.column)return B(t,e)-e.y1}return t.circular&&!e.circular?"top"==t.circularLinkType?-1:1:e.circular&&!t.circular?"top"==e.circularLinkType?1:-1:t.circular&&e.circular?t.circularLinkType===e.circularLinkType&&"top"==t.circularLinkType?t.target.column===e.target.column?t.target.y1-e.target.y1:e.target.column-t.target.column:t.circularLinkType===e.circularLinkType&&"bottom"==t.circularLinkType?t.target.column===e.target.column?e.target.y1-t.target.y1:t.target.column-e.target.column:"top"==t.circularLinkType?-1:1:void 0});var s=a.y0;i.forEach(function(t){t.y0=s+t.width/2,s+=t.width}),i.forEach(function(t,e){if("bottom"==t.circularLinkType){for(var r=e+1,n=0;r<o;r++)n+=i[r].width;t.y0=a.y1-n-t.width/2}})})}function q(t,e,r){t.nodes.forEach(function(e){var n=t.links.filter(function(t){return b(t.target,r)==b(e,r)}),a=n.length;a>1&&n.sort(function(t,e){if(!t.circular&&!e.circular){if(t.source.column==e.source.column)return t.y0-e.y0;if(!H(t,e))return t.y0-e.y0;if(e.source.column<t.source.column){var r=F(e,t);return t.y0-r}if(t.source.column<e.source.column)return F(t,e)-e.y0}return t.circular&&!e.circular?"top"==t.circularLinkType?-1:1:e.circular&&!t.circular?"top"==e.circularLinkType?1:-1:t.circular&&e.circular?t.circularLinkType===e.circularLinkType&&"top"==t.circularLinkType?t.source.column===e.source.column?t.source.y1-e.source.y1:t.source.column-e.source.column:t.circularLinkType===e.circularLinkType&&"bottom"==t.circularLinkType?t.source.column===e.source.column?t.source.y1-e.source.y1:e.source.column-t.source.column:"top"==t.circularLinkType?-1:1:void 0});var i=e.y0;n.forEach(function(t){t.y1=i+t.width/2,i+=t.width}),n.forEach(function(t,r){if("bottom"==t.circularLinkType){for(var i=r+1,o=0;i<a;i++)o+=n[i].width;t.y1=e.y1-o-t.width/2}})})}function H(t,e){return G(t)==G(e)}function G(t){return t.y0-t.y1>0?"up":"down"}function Y(t,e){return b(t.source,e)==b(t.target,e)}t.sankeyCircular=function(){var t,n,i=0,b=0,M=1,S=1,E=24,C=v,P=o,O=m,z=y,I=32,D=2,R=null;function F(){var o={nodes:O.apply(null,arguments),links:z.apply(null,arguments)};!function(t){t.nodes.forEach(function(t,e){t.index=e,t.sourceLinks=[],t.targetLinks=[]});var e=r.map(t.nodes,C);t.links.forEach(function(t,r){t.index=r;var n=t.source,a=t.target;"object"!==("undefined"==typeof n?"undefined":l(n))&&(n=t.source=x(e,n)),"object"!==("undefined"==typeof a?"undefined":l(a))&&(a=t.target=x(e,a)),n.sourceLinks.push(t),a.targetLinks.push(t)})}(o),function(t,e,r){var n=0;if(null===r){for(var i=[],o=0;o<t.links.length;o++){var s=t.links[o],l=s.source.index,c=s.target.index;i[l]||(i[l]=[]),i[c]||(i[c]=[]),-1===i[l].indexOf(c)&&i[l].push(c)}var u=a(i);u.sort(function(t,e){return t.length-e.length});var h={};for(o=0;o<u.length;o++){var f=u[o],p=f.slice(-2);h[p[0]]||(h[p[0]]={}),h[p[0]][p[1]]=!0}t.links.forEach(function(t){var e=t.target.index,r=t.source.index;e===r||h[r]&&h[r][e]?(t.circular=!0,t.circularLinkID=n,n+=1):t.circular=!1})}else t.links.forEach(function(t){t.source[r]<t.target[r]?t.circular=!1:(t.circular=!0,t.circularLinkID=n,n+=1)})}(o,0,R),function(t){t.nodes.forEach(function(t){t.partOfCycle=!1,t.value=Math.max(e.sum(t.sourceLinks,f),e.sum(t.targetLinks,f)),t.sourceLinks.forEach(function(e){e.circular&&(t.partOfCycle=!0,t.circularLinkType=e.circularLinkType)}),t.targetLinks.forEach(function(e){e.circular&&(t.partOfCycle=!0,t.circularLinkType=e.circularLinkType)})})}(o),function(t){var e,r,n;for(e=t.nodes,r=[],n=0;e.length;++n,e=r,r=[])e.forEach(function(t){t.depth=n,t.sourceLinks.forEach(function(t){r.indexOf(t.target)<0&&!t.circular&&r.push(t.target)})});for(e=t.nodes,r=[],n=0;e.length;++n,e=r,r=[])e.forEach(function(t){t.height=n,t.targetLinks.forEach(function(t){r.indexOf(t.source)<0&&!t.circular&&r.push(t.source)})});t.nodes.forEach(function(t){t.column=Math.floor(P.call(null,t,n))})}(o),T(o,C),function(a,o,s){var l=r.nest().key(function(t){return t.column}).sortKeys(e.ascending).entries(a.nodes).map(function(t){return t.values});(function(r){if(n){var o=1/0;l.forEach(function(t){var e=S*n/(t.length+1);o=e<o?e:o}),t=o}var s=e.min(l,function(r){return(S-b-(r.length-1)*t)/e.sum(r,f)});s*=k,a.links.forEach(function(t){t.width=t.value*s});var c=function(t){var r=0,n=0,a=0,i=0,o=e.max(t.nodes,function(t){return t.column});return t.links.forEach(function(t){t.circular&&("top"==t.circularLinkType?r+=t.width:n+=t.width,0==t.target.column&&(i+=t.width),t.source.column==o&&(a+=t.width))}),{top:r=r>0?r+_+w:r,bottom:n=n>0?n+_+w:n,left:i=i>0?i+_+w:i,right:a=a>0?a+_+w:a}}(a),u=function(t,r){var n=e.max(t.nodes,function(t){return t.column}),a=M-i,o=S-b,s=a+r.right+r.left,l=o+r.top+r.bottom,c=a/s,u=o/l;return i=i*c+r.left,M=0==r.right?M:M*c,b=b*u+r.top,S*=u,t.nodes.forEach(function(t){t.x0=i+t.column*((M-i-E)/n),t.x1=t.x0+E}),u}(a,c);s*=u,a.links.forEach(function(t){t.width=t.value*s}),l.forEach(function(t){var e=t.length;t.forEach(function(t,n){t.depth==l.length-1&&1==e?(t.y0=S/2-t.value*s,t.y1=t.y0+t.value*s):0==t.depth&&1==e?(t.y0=S/2-t.value*s,t.y1=t.y0+t.value*s):t.partOfCycle?0==A(t,r)?(t.y0=S/2+n,t.y1=t.y0+t.value*s):"top"==t.circularLinkType?(t.y0=b+n,t.y1=t.y0+t.value*s):(t.y0=S-t.value*s-n,t.y1=t.y0+t.value*s):0==c.top||0==c.bottom?(t.y0=(S-b)/e*n,t.y1=t.y0+t.value*s):(t.y0=(S-b)/2-e/2+n,t.y1=t.y0+t.value*s)})})})(s),m();for(var c=1,u=o;u>0;--u)v(c*=.99,s),m();function v(t,r){var n=l.length;l.forEach(function(a){var i=a.length,o=a[0].depth;a.forEach(function(a){var s;if(a.sourceLinks.length||a.targetLinks.length)if(a.partOfCycle&&A(a,r)>0);else if(0==o&&1==i)s=a.y1-a.y0,a.y0=S/2-s/2,a.y1=S/2+s/2;else if(o==n-1&&1==i)s=a.y1-a.y0,a.y0=S/2-s/2,a.y1=S/2+s/2;else{var l=e.mean(a.sourceLinks,g),c=e.mean(a.targetLinks,d),u=((l&&c?(l+c)/2:l||c)-p(a))*t;a.y0+=u,a.y1+=u}})})}function m(){l.forEach(function(e){var r,n,a,i=b,o=e.length;for(e.sort(h),a=0;a<o;++a)r=e[a],(n=i-r.y0)>0&&(r.y0+=n,r.y1+=n),i=r.y1+t;if((n=i-t-S)>0)for(i=r.y0-=n,r.y1-=n,a=o-2;a>=0;--a)r=e[a],(n=r.y1+t-i)>0&&(r.y0-=n,r.y1-=n),i=r.y0})}}(o,I,C),B(o);for(var s=0;s<4;s++)U(o,S,C),q(o,0,C),N(o,b,S,C),U(o,S,C),q(o,0,C);return function(t,r,n){var a=t.nodes,i=t.links,o=!1,s=!1;if(i.forEach(function(t){"top"==t.circularLinkType?o=!0:"bottom"==t.circularLinkType&&(s=!0)}),0==o||0==s){var l=e.min(a,function(t){return t.y0}),c=e.max(a,function(t){return t.y1}),u=c-l,h=n-r,f=h/u;a.forEach(function(t){var e=(t.y1-t.y0)*f;t.y0=(t.y0-l)*f,t.y1=t.y0+e}),i.forEach(function(t){t.y0=(t.y0-l)*f,t.y1=(t.y1-l)*f,t.width=t.width*f})}}(o,b,S),L(o,D,S,C),o}function B(t){t.nodes.forEach(function(t){t.sourceLinks.sort(u),t.targetLinks.sort(c)}),t.nodes.forEach(function(t){var e=t.y0,r=e,n=t.y1,a=n;t.sourceLinks.forEach(function(t){t.circular?(t.y0=n-t.width/2,n-=t.width):(t.y0=e+t.width/2,e+=t.width)}),t.targetLinks.forEach(function(t){t.circular?(t.y1=a-t.width/2,a-=t.width):(t.y1=r+t.width/2,r+=t.width)})})}return F.nodeId=function(t){return arguments.length?(C="function"==typeof t?t:s(t),F):C},F.nodeAlign=function(t){return arguments.length?(P="function"==typeof t?t:s(t),F):P},F.nodeWidth=function(t){return arguments.length?(E=+t,F):E},F.nodePadding=function(e){return arguments.length?(t=+e,F):t},F.nodes=function(t){return arguments.length?(O="function"==typeof t?t:s(t),F):O},F.links=function(t){return arguments.length?(z="function"==typeof t?t:s(t),F):z},F.size=function(t){return arguments.length?(i=b=0,M=+t[0],S=+t[1],F):[M-i,S-b]},F.extent=function(t){return arguments.length?(i=+t[0][0],M=+t[1][0],b=+t[0][1],S=+t[1][1],F):[[i,b],[M,S]]},F.iterations=function(t){return arguments.length?(I=+t,F):I},F.circularLinkGap=function(t){return arguments.length?(D=+t,F):D},F.nodePaddingRatio=function(t){return arguments.length?(n=+t,F):n},F.sortNodes=function(t){return arguments.length?(R=t,F):R},F.update=function(t){return T(t,C),B(t),t.links.forEach(function(t){t.circular&&(t.circularLinkType=t.y0+t.y1<S?"top":"bottom",t.source.circularLinkType=t.circularLinkType,t.target.circularLinkType=t.circularLinkType)}),U(t,S,C,!1),q(t,0,C),L(t,D,S,C),t},F},t.sankeyCenter=function(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?e.min(t.sourceLinks,i)-1:0},t.sankeyLeft=function(t){return t.depth},t.sankeyRight=function(t,e){return e-1-t.height},t.sankeyJustify=o,Object.defineProperty(t,"__esModule",{value:!0})},"object"==typeof r&&"undefined"!=typeof e?a(r,t("d3-array"),t("d3-collection"),t("d3-shape"),t("elementary-circuits-directed-graph")):a(n.d3=n.d3||{},n.d3,n.d3,n.d3,null)},{"d3-array":154,"d3-collection":155,"d3-shape":163,"elementary-circuits-directed-graph":175}],56:[function(t,e,r){var n,a;n=this,a=function(t,e,r,n){"use strict";function a(t){return t.target.depth}function i(t,e){return t.sourceLinks.length?t.depth:e-1}function o(t){return function(){return t}}function s(t,e){return c(t.source,e.source)||t.index-e.index}function l(t,e){return c(t.target,e.target)||t.index-e.index}function c(t,e){return t.y0-e.y0}function u(t){return t.value}function h(t){return(t.y0+t.y1)/2}function f(t){return h(t.source)*t.value}function p(t){return h(t.target)*t.value}function d(t){return t.index}function g(t){return t.nodes}function v(t){return t.links}function m(t,e){var r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function y(t){return[t.source.x1,t.y0]}function x(t){return[t.target.x0,t.y1]}t.sankey=function(){var t=0,n=0,a=1,y=1,x=24,b=8,_=d,w=i,k=g,T=v,M=32,A=2/3;function S(){var i={nodes:k.apply(null,arguments),links:T.apply(null,arguments)};return function(t){t.nodes.forEach(function(t,e){t.index=e,t.sourceLinks=[],t.targetLinks=[]});var e=r.map(t.nodes,_);t.links.forEach(function(t,r){t.index=r;var n=t.source,a=t.target;"object"!=typeof n&&(n=t.source=m(e,n)),"object"!=typeof a&&(a=t.target=m(e,a)),n.sourceLinks.push(t),a.targetLinks.push(t)})}(i),function(t){t.nodes.forEach(function(t){t.value=Math.max(e.sum(t.sourceLinks,u),e.sum(t.targetLinks,u))})}(i),function(e){var r,n,i;for(r=e.nodes,n=[],i=0;r.length;++i,r=n,n=[])r.forEach(function(t){t.depth=i,t.sourceLinks.forEach(function(t){n.indexOf(t.target)<0&&n.push(t.target)})});for(r=e.nodes,n=[],i=0;r.length;++i,r=n,n=[])r.forEach(function(t){t.height=i,t.targetLinks.forEach(function(t){n.indexOf(t.source)<0&&n.push(t.source)})});var o=(a-t-x)/(i-1);e.nodes.forEach(function(e){e.x1=(e.x0=t+Math.max(0,Math.min(i-1,Math.floor(w.call(null,e,i))))*o)+x})}(i),function(t){var a=r.nest().key(function(t){return t.x0}).sortKeys(e.ascending).entries(t.nodes).map(function(t){return t.values});(function(){var r=e.max(a,function(t){return t.length}),i=A*(y-n)/(r-1);b>i&&(b=i);var o=e.min(a,function(t){return(y-n-(t.length-1)*b)/e.sum(t,u)});a.forEach(function(t){t.forEach(function(t,e){t.y1=(t.y0=e)+t.value*o})}),t.links.forEach(function(t){t.width=t.value*o})})(),d();for(var i=1,o=M;o>0;--o)l(i*=.99),d(),s(i),d();function s(t){a.forEach(function(r){r.forEach(function(r){if(r.targetLinks.length){var n=(e.sum(r.targetLinks,f)/e.sum(r.targetLinks,u)-h(r))*t;r.y0+=n,r.y1+=n}})})}function l(t){a.slice().reverse().forEach(function(r){r.forEach(function(r){if(r.sourceLinks.length){var n=(e.sum(r.sourceLinks,p)/e.sum(r.sourceLinks,u)-h(r))*t;r.y0+=n,r.y1+=n}})})}function d(){a.forEach(function(t){var e,r,a,i=n,o=t.length;for(t.sort(c),a=0;a<o;++a)e=t[a],(r=i-e.y0)>0&&(e.y0+=r,e.y1+=r),i=e.y1+b;if((r=i-b-y)>0)for(i=e.y0-=r,e.y1-=r,a=o-2;a>=0;--a)e=t[a],(r=e.y1+b-i)>0&&(e.y0-=r,e.y1-=r),i=e.y0})}}(i),E(i),i}function E(t){t.nodes.forEach(function(t){t.sourceLinks.sort(l),t.targetLinks.sort(s)}),t.nodes.forEach(function(t){var e=t.y0,r=e;t.sourceLinks.forEach(function(t){t.y0=e+t.width/2,e+=t.width}),t.targetLinks.forEach(function(t){t.y1=r+t.width/2,r+=t.width})})}return S.update=function(t){return E(t),t},S.nodeId=function(t){return arguments.length?(_="function"==typeof t?t:o(t),S):_},S.nodeAlign=function(t){return arguments.length?(w="function"==typeof t?t:o(t),S):w},S.nodeWidth=function(t){return arguments.length?(x=+t,S):x},S.nodePadding=function(t){return arguments.length?(b=+t,S):b},S.nodes=function(t){return arguments.length?(k="function"==typeof t?t:o(t),S):k},S.links=function(t){return arguments.length?(T="function"==typeof t?t:o(t),S):T},S.size=function(e){return arguments.length?(t=n=0,a=+e[0],y=+e[1],S):[a-t,y-n]},S.extent=function(e){return arguments.length?(t=+e[0][0],a=+e[1][0],n=+e[0][1],y=+e[1][1],S):[[t,n],[a,y]]},S.iterations=function(t){return arguments.length?(M=+t,S):M},S},t.sankeyCenter=function(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?e.min(t.sourceLinks,a)-1:0},t.sankeyLeft=function(t){return t.depth},t.sankeyRight=function(t,e){return e-1-t.height},t.sankeyJustify=i,t.sankeyLinkHorizontal=function(){return n.linkHorizontal().source(y).target(x)},Object.defineProperty(t,"__esModule",{value:!0})},"object"==typeof r&&"undefined"!=typeof e?a(r,t("d3-array"),t("d3-collection"),t("d3-shape")):a(n.d3=n.d3||{},n.d3,n.d3,n.d3)},{"d3-array":154,"d3-collection":155,"d3-shape":163}],57:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=t("@turf/meta"),a=6378137;function i(t){var e=0;if(t&&t.length>0){e+=Math.abs(o(t[0]));for(var r=1;r<t.length;r++)e-=Math.abs(o(t[r]))}return e}function o(t){var e,r,n,i,o,l,c=0,u=t.length;if(u>2){for(l=0;l<u;l++)l===u-2?(n=u-2,i=u-1,o=0):l===u-1?(n=u-1,i=0,o=1):(n=l,i=l+1,o=l+2),e=t[n],r=t[i],c+=(s(t[o][0])-s(e[0]))*Math.sin(s(r[1]));c=c*a*a/2}return c}function s(t){return t*Math.PI/180}r.default=function(t){return n.geomReduce(t,function(t,e){return t+function(t){var e,r=0;switch(t.type){case"Polygon":return i(t.coordinates);case"MultiPolygon":for(e=0;e<t.coordinates.length;e++)r+=i(t.coordinates[e]);return r;case"Point":case"MultiPoint":case"LineString":case"MultiLineString":return 0}return 0}(e)},0)}},{"@turf/meta":61}],58:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=t("@turf/meta");r.default=function(t){var e=[1/0,1/0,-1/0,-1/0];return n.coordEach(t,function(t){e[0]>t[0]&&(e[0]=t[0]),e[1]>t[1]&&(e[1]=t[1]),e[2]<t[0]&&(e[2]=t[0]),e[3]<t[1]&&(e[3]=t[1])}),e}},{"@turf/meta":61}],59:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=t("@turf/meta"),a=t("@turf/helpers");r.default=function(t,e){void 0===e&&(e={});var r=0,i=0,o=0;return n.coordEach(t,function(t){r+=t[0],i+=t[1],o++}),a.point([r/o,i/o],e.properties)}},{"@turf/helpers":60,"@turf/meta":61}],60:[function(t,e,r){"use strict";function n(t,e,r){void 0===r&&(r={});var n={type:"Feature"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=e||{},n.geometry=t,n}function a(t,e,r){return void 0===r&&(r={}),n({type:"Point",coordinates:t},e,r)}function i(t,e,r){void 0===r&&(r={});for(var a=0,i=t;a<i.length;a++){var o=i[a];if(o.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");for(var s=0;s<o[o.length-1].length;s++)if(o[o.length-1][s]!==o[0][s])throw new Error("First and last Position are not equivalent.")}return n({type:"Polygon",coordinates:t},e,r)}function o(t,e,r){if(void 0===r&&(r={}),t.length<2)throw new Error("coordinates must be an array of two or more positions");return n({type:"LineString",coordinates:t},e,r)}function s(t,e){void 0===e&&(e={});var r={type:"FeatureCollection"};return e.id&&(r.id=e.id),e.bbox&&(r.bbox=e.bbox),r.features=t,r}function l(t,e,r){return void 0===r&&(r={}),n({type:"MultiLineString",coordinates:t},e,r)}function c(t,e,r){return void 0===r&&(r={}),n({type:"MultiPoint",coordinates:t},e,r)}function u(t,e,r){return void 0===r&&(r={}),n({type:"MultiPolygon",coordinates:t},e,r)}function h(t,e){void 0===e&&(e="kilometers");var n=r.factors[e];if(!n)throw new Error(e+" units is invalid");return t*n}function f(t,e){void 0===e&&(e="kilometers");var n=r.factors[e];if(!n)throw new Error(e+" units is invalid");return t/n}function p(t){return 180*(t%(2*Math.PI))/Math.PI}function d(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)&&!/^\s*$/.test(t)}Object.defineProperty(r,"__esModule",{value:!0}),r.earthRadius=6371008.8,r.factors={centimeters:100*r.earthRadius,centimetres:100*r.earthRadius,degrees:r.earthRadius/111325,feet:3.28084*r.earthRadius,inches:39.37*r.earthRadius,kilometers:r.earthRadius/1e3,kilometres:r.earthRadius/1e3,meters:r.earthRadius,metres:r.earthRadius,miles:r.earthRadius/1609.344,millimeters:1e3*r.earthRadius,millimetres:1e3*r.earthRadius,nauticalmiles:r.earthRadius/1852,radians:1,yards:r.earthRadius/1.0936},r.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/r.earthRadius,yards:1/1.0936},r.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:3.86e-7,millimeters:1e6,millimetres:1e6,yards:1.195990046},r.feature=n,r.geometry=function(t,e,r){switch(void 0===r&&(r={}),t){case"Point":return a(e).geometry;case"LineString":return o(e).geometry;case"Polygon":return i(e).geometry;case"MultiPoint":return c(e).geometry;case"MultiLineString":return l(e).geometry;case"MultiPolygon":return u(e).geometry;default:throw new Error(t+" is invalid")}},r.point=a,r.points=function(t,e,r){return void 0===r&&(r={}),s(t.map(function(t){return a(t,e)}),r)},r.polygon=i,r.polygons=function(t,e,r){return void 0===r&&(r={}),s(t.map(function(t){return i(t,e)}),r)},r.lineString=o,r.lineStrings=function(t,e,r){return void 0===r&&(r={}),s(t.map(function(t){return o(t,e)}),r)},r.featureCollection=s,r.multiLineString=l,r.multiPoint=c,r.multiPolygon=u,r.geometryCollection=function(t,e,r){return void 0===r&&(r={}),n({type:"GeometryCollection",geometries:t},e,r)},r.round=function(t,e){if(void 0===e&&(e=0),e&&!(e>=0))throw new Error("precision must be a positive number");var r=Math.pow(10,e||0);return Math.round(t*r)/r},r.radiansToLength=h,r.lengthToRadians=f,r.lengthToDegrees=function(t,e){return p(f(t,e))},r.bearingToAzimuth=function(t){var e=t%360;return e<0&&(e+=360),e},r.radiansToDegrees=p,r.degreesToRadians=function(t){return t%360*Math.PI/180},r.convertLength=function(t,e,r){if(void 0===e&&(e="kilometers"),void 0===r&&(r="kilometers"),!(t>=0))throw new Error("length must be a positive number");return h(f(t,e),r)},r.convertArea=function(t,e,n){if(void 0===e&&(e="meters"),void 0===n&&(n="kilometers"),!(t>=0))throw new Error("area must be a positive number");var a=r.areaFactors[e];if(!a)throw new Error("invalid original units");var i=r.areaFactors[n];if(!i)throw new Error("invalid final units");return t/a*i},r.isNumber=d,r.isObject=function(t){return!!t&&t.constructor===Object},r.validateBBox=function(t){if(!t)throw new Error("bbox is required");if(!Array.isArray(t))throw new Error("bbox must be an Array");if(4!==t.length&&6!==t.length)throw new Error("bbox must be an Array of 4 or 6 numbers");t.forEach(function(t){if(!d(t))throw new Error("bbox must only contain numbers")})},r.validateId=function(t){if(!t)throw new Error("id is required");if(-1===["string","number"].indexOf(typeof t))throw new Error("id must be a number or a string")},r.radians2degrees=function(){throw new Error("method has been renamed to `radiansToDegrees`")},r.degrees2radians=function(){throw new Error("method has been renamed to `degreesToRadians`")},r.distanceToDegrees=function(){throw new Error("method has been renamed to `lengthToDegrees`")},r.distanceToRadians=function(){throw new Error("method has been renamed to `lengthToRadians`")},r.radiansToDistance=function(){throw new Error("method has been renamed to `radiansToLength`")},r.bearingToAngle=function(){throw new Error("method has been renamed to `bearingToAzimuth`")},r.convertDistance=function(){throw new Error("method has been renamed to `convertLength`")}},{}],61:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=t("@turf/helpers");function a(t,e,r){if(null!==t)for(var n,i,o,s,l,c,u,h,f=0,p=0,d=t.type,g="FeatureCollection"===d,v="Feature"===d,m=g?t.features.length:1,y=0;y<m;y++){l=(h=!!(u=g?t.features[y].geometry:v?t.geometry:t)&&"GeometryCollection"===u.type)?u.geometries.length:1;for(var x=0;x<l;x++){var b=0,_=0;if(null!==(s=h?u.geometries[x]:u)){c=s.coordinates;var w=s.type;switch(f=!r||"Polygon"!==w&&"MultiPolygon"!==w?0:1,w){case null:break;case"Point":if(!1===e(c,p,y,b,_))return!1;p++,b++;break;case"LineString":case"MultiPoint":for(n=0;n<c.length;n++){if(!1===e(c[n],p,y,b,_))return!1;p++,"MultiPoint"===w&&b++}"LineString"===w&&b++;break;case"Polygon":case"MultiLineString":for(n=0;n<c.length;n++){for(i=0;i<c[n].length-f;i++){if(!1===e(c[n][i],p,y,b,_))return!1;p++}"MultiLineString"===w&&b++,"Polygon"===w&&_++}"Polygon"===w&&b++;break;case"MultiPolygon":for(n=0;n<c.length;n++){for(_=0,i=0;i<c[n].length;i++){for(o=0;o<c[n][i].length-f;o++){if(!1===e(c[n][i][o],p,y,b,_))return!1;p++}_++}b++}break;case"GeometryCollection":for(n=0;n<s.geometries.length;n++)if(!1===a(s.geometries[n],e,r))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function i(t,e){var r;switch(t.type){case"FeatureCollection":for(r=0;r<t.features.length&&!1!==e(t.features[r].properties,r);r++);break;case"Feature":e(t.properties,0)}}function o(t,e){if("Feature"===t.type)e(t,0);else if("FeatureCollection"===t.type)for(var r=0;r<t.features.length&&!1!==e(t.features[r],r);r++);}function s(t,e){var r,n,a,i,o,s,l,c,u,h,f=0,p="FeatureCollection"===t.type,d="Feature"===t.type,g=p?t.features.length:1;for(r=0;r<g;r++){for(s=p?t.features[r].geometry:d?t.geometry:t,c=p?t.features[r].properties:d?t.properties:{},u=p?t.features[r].bbox:d?t.bbox:void 0,h=p?t.features[r].id:d?t.id:void 0,o=(l=!!s&&"GeometryCollection"===s.type)?s.geometries.length:1,a=0;a<o;a++)if(null!==(i=l?s.geometries[a]:s))switch(i.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":if(!1===e(i,f,c,u,h))return!1;break;case"GeometryCollection":for(n=0;n<i.geometries.length;n++)if(!1===e(i.geometries[n],f,c,u,h))return!1;break;default:throw new Error("Unknown Geometry Type")}else if(!1===e(null,f,c,u,h))return!1;f++}}function l(t,e){s(t,function(t,r,a,i,o){var s,l=null===t?null:t.type;switch(l){case null:case"Point":case"LineString":case"Polygon":return!1!==e(n.feature(t,a,{bbox:i,id:o}),r,0)&&void 0}switch(l){case"MultiPoint":s="Point";break;case"MultiLineString":s="LineString";break;case"MultiPolygon":s="Polygon"}for(var c=0;c<t.coordinates.length;c++){var u={type:s,coordinates:t.coordinates[c]};if(!1===e(n.feature(u,a),r,c))return!1}})}function c(t,e){l(t,function(t,r,i){var o=0;if(t.geometry){var s=t.geometry.type;if("Point"!==s&&"MultiPoint"!==s){var l,c=0,u=0,h=0;return!1!==a(t,function(a,s,f,p,d){if(void 0===l||r>c||p>u||d>h)return l=a,c=r,u=p,h=d,void(o=0);var g=n.lineString([l,a],t.properties);if(!1===e(g,r,i,d,o))return!1;o++,l=a})&&void 0}}})}function u(t,e){if(!t)throw new Error("geojson is required");l(t,function(t,r,a){if(null!==t.geometry){var i=t.geometry.type,o=t.geometry.coordinates;switch(i){case"LineString":if(!1===e(t,r,a,0,0))return!1;break;case"Polygon":for(var s=0;s<o.length;s++)if(!1===e(n.lineString(o[s],t.properties),r,a,s))return!1}}})}r.coordEach=a,r.coordReduce=function(t,e,r,n){var i=r;return a(t,function(t,n,a,o,s){i=0===n&&void 0===r?t:e(i,t,n,a,o,s)},n),i},r.propEach=i,r.propReduce=function(t,e,r){var n=r;return i(t,function(t,a){n=0===a&&void 0===r?t:e(n,t,a)}),n},r.featureEach=o,r.featureReduce=function(t,e,r){var n=r;return o(t,function(t,a){n=0===a&&void 0===r?t:e(n,t,a)}),n},r.coordAll=function(t){var e=[];return a(t,function(t){e.push(t)}),e},r.geomEach=s,r.geomReduce=function(t,e,r){var n=r;return s(t,function(t,a,i,o,s){n=0===a&&void 0===r?t:e(n,t,a,i,o,s)}),n},r.flattenEach=l,r.flattenReduce=function(t,e,r){var n=r;return l(t,function(t,a,i){n=0===a&&0===i&&void 0===r?t:e(n,t,a,i)}),n},r.segmentEach=c,r.segmentReduce=function(t,e,r){var n=r,a=!1;return c(t,function(t,i,o,s,l){n=!1===a&&void 0===r?t:e(n,t,i,o,s,l),a=!0}),n},r.lineEach=u,r.lineReduce=function(t,e,r){var n=r;return u(t,function(t,a,i,o){n=0===a&&void 0===r?t:e(n,t,a,i,o)}),n},r.findSegment=function(t,e){if(e=e||{},!n.isObject(e))throw new Error("options is invalid");var r,a=e.featureIndex||0,i=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.segmentIndex||0,l=e.properties;switch(t.type){case"FeatureCollection":a<0&&(a=t.features.length+a),l=l||t.features[a].properties,r=t.features[a].geometry;break;case"Feature":l=l||t.properties,r=t.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":r=t;break;default:throw new Error("geojson is invalid")}if(null===r)return null;var c=r.coordinates;switch(r.type){case"Point":case"MultiPoint":return null;case"LineString":return s<0&&(s=c.length+s-1),n.lineString([c[s],c[s+1]],l,e);case"Polygon":return o<0&&(o=c.length+o),s<0&&(s=c[o].length+s-1),n.lineString([c[o][s],c[o][s+1]],l,e);case"MultiLineString":return i<0&&(i=c.length+i),s<0&&(s=c[i].length+s-1),n.lineString([c[i][s],c[i][s+1]],l,e);case"MultiPolygon":return i<0&&(i=c.length+i),o<0&&(o=c[i].length+o),s<0&&(s=c[i][o].length-s-1),n.lineString([c[i][o][s],c[i][o][s+1]],l,e)}throw new Error("geojson is invalid")},r.findPoint=function(t,e){if(e=e||{},!n.isObject(e))throw new Error("options is invalid");var r,a=e.featureIndex||0,i=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.coordIndex||0,l=e.properties;switch(t.type){case"FeatureCollection":a<0&&(a=t.features.length+a),l=l||t.features[a].properties,r=t.features[a].geometry;break;case"Feature":l=l||t.properties,r=t.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":r=t;break;default:throw new Error("geojson is invalid")}if(null===r)return null;var c=r.coordinates;switch(r.type){case"Point":return n.point(c,l,e);case"MultiPoint":return i<0&&(i=c.length+i),n.point(c[i],l,e);case"LineString":return s<0&&(s=c.length+s),n.point(c[s],l,e);case"Polygon":return o<0&&(o=c.length+o),s<0&&(s=c[o].length+s),n.point(c[o][s],l,e);case"MultiLineString":return i<0&&(i=c.length+i),s<0&&(s=c[i].length+s),n.point(c[i][s],l,e);case"MultiPolygon":return i<0&&(i=c.length+i),o<0&&(o=c[i].length+o),s<0&&(s=c[i][o].length-s),n.point(c[i][o][s],l,e)}throw new Error("geojson is invalid")}},{"@turf/helpers":60}],62:[function(t,e,r){"use strict";var n="undefined"==typeof WeakMap?t("weak-map"):WeakMap,a=t("gl-buffer"),i=t("gl-vao"),o=new n;e.exports=function(t){var e=o.get(t),r=e&&(e._triangleBuffer.handle||e._triangleBuffer.buffer);if(!r||!t.isBuffer(r)){var n=a(t,new Float32Array([-1,-1,-1,4,4,-1]));(e=i(t,[{buffer:n,type:t.FLOAT,size:2}]))._triangleBuffer=n,o.set(t,e)}e.bind(),t.drawArrays(t.TRIANGLES,0,3),e.unbind()}},{"gl-buffer":244,"gl-vao":329,"weak-map":550}],63:[function(t,e,r){e.exports=function(t){var e=0,r=0,n=0,a=0;return t.map(function(t){var i=(t=t.slice())[0],o=i.toUpperCase();if(i!=o)switch(t[0]=o,i){case"a":t[6]+=n,t[7]+=a;break;case"v":t[1]+=a;break;case"h":t[1]+=n;break;default:for(var s=1;s<t.length;)t[s++]+=n,t[s++]+=a}switch(o){case"Z":n=e,a=r;break;case"H":n=t[1];break;case"V":a=t[1];break;case"M":n=e=t[1],a=r=t[2];break;default:n=t[t.length-2],a=t[t.length-1]}return t})}},{}],64:[function(t,e,r){var n=t("pad-left");e.exports=function(t,e,r){e="number"==typeof e?e:1,r=r||": ";var a=t.split(/\r?\n/),i=String(a.length+e-1).length;return a.map(function(t,a){var o=a+e,s=String(o).length,l=n(o,i-s);return l+r+t}).join("\n")}},{"pad-left":458}],65:[function(t,e,r){"use strict";e.exports=function(t){var e=t.length;if(0===e)return[];if(1===e)return[0];for(var r=t[0].length,n=[t[0]],i=[0],o=1;o<e;++o)if(n.push(t[o]),a(n,r)){if(i.push(o),i.length===r+1)return i}else n.pop();return i};var n=t("robust-orientation");function a(t,e){for(var r=new Array(e+1),a=0;a<t.length;++a)r[a]=t[a];for(a=0;a<=t.length;++a){for(var i=t.length;i<=e;++i){for(var o=new Array(e),s=0;s<e;++s)o[s]=Math.pow(i+1-a,s);r[i]=o}if(n.apply(void 0,r))return!0}return!1}},{"robust-orientation":508}],66:[function(t,e,r){"use strict";e.exports=function(t,e){return n(e).filter(function(r){for(var n=new Array(r.length),i=0;i<r.length;++i)n[i]=e[r[i]];return a(n)*t<1})};var n=t("delaunay-triangulate"),a=t("circumradius")},{circumradius:116,"delaunay-triangulate":167}],67:[function(t,e,r){e.exports=function(t,e){return a(n(t,e))};var n=t("alpha-complex"),a=t("simplicial-complex-boundary")},{"alpha-complex":66,"simplicial-complex-boundary":515}],68:[function(t,e,r){"use strict";e.exports=function(t,e){if(!t||null==t.length)throw Error("Argument should be an array");e=null==e?1:Math.floor(e);for(var r=Array(2*e),n=0;n<e;n++){for(var a=-1/0,i=1/0,o=n,s=t.length;o<s;o+=e)t[o]>a&&(a=t[o]),t[o]<i&&(i=t[o]);r[n]=i,r[e+n]=a}return r}},{}],69:[function(t,e,r){e.exports=function(t,e){var r="number"==typeof t,n="number"==typeof e;r&&!n?(e=t,t=0):r||n||(t=0,e=0);var a=(e|=0)-(t|=0);if(a<0)throw new Error("array length must be positive");for(var i=new Array(a),o=0,s=t;o<a;o++,s++)i[o]=s;return i}},{}],70:[function(t,e,r){(function(r){"use strict";var n=t("object-assign");function a(t,e){if(t===e)return 0;for(var r=t.length,n=e.length,a=0,i=Math.min(r,n);a<i;++a)if(t[a]!==e[a]){r=t[a],n=e[a];break}return r<n?-1:n<r?1:0}function i(t){return r.Buffer&&"function"==typeof r.Buffer.isBuffer?r.Buffer.isBuffer(t):!(null==t||!t._isBuffer)}var o=t("util/"),s=Object.prototype.hasOwnProperty,l=Array.prototype.slice,c="foo"===function(){}.name;function u(t){return Object.prototype.toString.call(t)}function h(t){return!i(t)&&("function"==typeof r.ArrayBuffer&&("function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):!!t&&(t instanceof DataView||!!(t.buffer&&t.buffer instanceof ArrayBuffer))))}var f=e.exports=y,p=/\s*function\s+([^\(\s]*)\s*/;function d(t){if(o.isFunction(t)){if(c)return t.name;var e=t.toString().match(p);return e&&e[1]}}function g(t,e){return"string"==typeof t?t.length<e?t:t.slice(0,e):t}function v(t){if(c||!o.isFunction(t))return o.inspect(t);var e=d(t);return"[Function"+(e?": "+e:"")+"]"}function m(t,e,r,n,a){throw new f.AssertionError({message:r,actual:t,expected:e,operator:n,stackStartFunction:a})}function y(t,e){t||m(t,!0,e,"==",f.ok)}function x(t,e,r,n){if(t===e)return!0;if(i(t)&&i(e))return 0===a(t,e);if(o.isDate(t)&&o.isDate(e))return t.getTime()===e.getTime();if(o.isRegExp(t)&&o.isRegExp(e))return t.source===e.source&&t.global===e.global&&t.multiline===e.multiline&&t.lastIndex===e.lastIndex&&t.ignoreCase===e.ignoreCase;if(null!==t&&"object"==typeof t||null!==e&&"object"==typeof e){if(h(t)&&h(e)&&u(t)===u(e)&&!(t instanceof Float32Array||t instanceof Float64Array))return 0===a(new Uint8Array(t.buffer),new Uint8Array(e.buffer));if(i(t)!==i(e))return!1;var s=(n=n||{actual:[],expected:[]}).actual.indexOf(t);return-1!==s&&s===n.expected.indexOf(e)||(n.actual.push(t),n.expected.push(e),function(t,e,r,n){if(null==t||null==e)return!1;if(o.isPrimitive(t)||o.isPrimitive(e))return t===e;if(r&&Object.getPrototypeOf(t)!==Object.getPrototypeOf(e))return!1;var a=b(t),i=b(e);if(a&&!i||!a&&i)return!1;if(a)return t=l.call(t),e=l.call(e),x(t,e,r);var s,c,u=k(t),h=k(e);if(u.length!==h.length)return!1;for(u.sort(),h.sort(),c=u.length-1;c>=0;c--)if(u[c]!==h[c])return!1;for(c=u.length-1;c>=0;c--)if(s=u[c],!x(t[s],e[s],r,n))return!1;return!0}(t,e,r,n))}return r?t===e:t==e}function b(t){return"[object Arguments]"==Object.prototype.toString.call(t)}function _(t,e){if(!t||!e)return!1;if("[object RegExp]"==Object.prototype.toString.call(e))return e.test(t);try{if(t instanceof e)return!0}catch(t){}return!Error.isPrototypeOf(e)&&!0===e.call({},t)}function w(t,e,r,n){var a;if("function"!=typeof e)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(n=r,r=null),a=function(t){var e;try{t()}catch(t){e=t}return e}(e),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),t&&!a&&m(a,r,"Missing expected exception"+n);var i="string"==typeof n,s=!t&&a&&!r;if((!t&&o.isError(a)&&i&&_(a,r)||s)&&m(a,r,"Got unwanted exception"+n),t&&a&&r&&!_(a,r)||!t&&a)throw a}f.AssertionError=function(t){var e;this.name="AssertionError",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=g(v((e=this).actual),128)+" "+e.operator+" "+g(v(e.expected),128),this.generatedMessage=!0);var r=t.stackStartFunction||m;if(Error.captureStackTrace)Error.captureStackTrace(this,r);else{var n=new Error;if(n.stack){var a=n.stack,i=d(r),o=a.indexOf("\n"+i);if(o>=0){var s=a.indexOf("\n",o+1);a=a.substring(s+1)}this.stack=a}}},o.inherits(f.AssertionError,Error),f.fail=m,f.ok=y,f.equal=function(t,e,r){t!=e&&m(t,e,r,"==",f.equal)},f.notEqual=function(t,e,r){t==e&&m(t,e,r,"!=",f.notEqual)},f.deepEqual=function(t,e,r){x(t,e,!1)||m(t,e,r,"deepEqual",f.deepEqual)},f.deepStrictEqual=function(t,e,r){x(t,e,!0)||m(t,e,r,"deepStrictEqual",f.deepStrictEqual)},f.notDeepEqual=function(t,e,r){x(t,e,!1)&&m(t,e,r,"notDeepEqual",f.notDeepEqual)},f.notDeepStrictEqual=function t(e,r,n){x(e,r,!0)&&m(e,r,n,"notDeepStrictEqual",t)},f.strictEqual=function(t,e,r){t!==e&&m(t,e,r,"===",f.strictEqual)},f.notStrictEqual=function(t,e,r){t===e&&m(t,e,r,"!==",f.notStrictEqual)},f.throws=function(t,e,r){w(!0,t,e,r)},f.doesNotThrow=function(t,e,r){w(!1,t,e,r)},f.ifError=function(t){if(t)throw t},f.strict=n(function t(e,r){e||m(e,!0,r,"==",t)},f,{equal:f.strictEqual,deepEqual:f.deepStrictEqual,notEqual:f.notStrictEqual,notDeepEqual:f.notDeepStrictEqual}),f.strict.strict=f.strict;var k=Object.keys||function(t){var e=[];for(var r in t)s.call(t,r)&&e.push(r);return e}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"object-assign":455,"util/":73}],71:[function(t,e,r){"function"==typeof Object.create?e.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},{}],72:[function(t,e,r){e.exports=function(t){return t&&"object"==typeof t&&"function"==typeof t.copy&&"function"==typeof t.fill&&"function"==typeof t.readUInt8}},{}],73:[function(t,e,r){(function(e,n){var a=/%[sdj%]/g;r.format=function(t){if(!m(t)){for(var e=[],r=0;r<arguments.length;r++)e.push(s(arguments[r]));return e.join(" ")}r=1;for(var n=arguments,i=n.length,o=String(t).replace(a,function(t){if("%%"===t)return"%";if(r>=i)return t;switch(t){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(t){return"[Circular]"}default:return t}}),l=n[r];r<i;l=n[++r])g(l)||!b(l)?o+=" "+l:o+=" "+s(l);return o},r.deprecate=function(t,a){if(y(n.process))return function(){return r.deprecate(t,a).apply(this,arguments)};if(!0===e.noDeprecation)return t;var i=!1;return function(){if(!i){if(e.throwDeprecation)throw new Error(a);e.traceDeprecation?console.trace(a):console.error(a),i=!0}return t.apply(this,arguments)}};var i,o={};function s(t,e){var n={seen:[],stylize:c};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),d(e)?n.showHidden=e:e&&r._extend(n,e),y(n.showHidden)&&(n.showHidden=!1),y(n.depth)&&(n.depth=2),y(n.colors)&&(n.colors=!1),y(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=l),u(n,t,n.depth)}function l(t,e){var r=s.styles[e];return r?"\x1b["+s.colors[r][0]+"m"+t+"\x1b["+s.colors[r][1]+"m":t}function c(t,e){return t}function u(t,e,n){if(t.customInspect&&e&&k(e.inspect)&&e.inspect!==r.inspect&&(!e.constructor||e.constructor.prototype!==e)){var a=e.inspect(n,t);return m(a)||(a=u(t,a,n)),a}var i=function(t,e){if(y(e))return t.stylize("undefined","undefined");if(m(e)){var r="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(r,"string")}if(v(e))return t.stylize(""+e,"number");if(d(e))return t.stylize(""+e,"boolean");if(g(e))return t.stylize("null","null")}(t,e);if(i)return i;var o=Object.keys(e),s=function(t){var e={};return t.forEach(function(t,r){e[t]=!0}),e}(o);if(t.showHidden&&(o=Object.getOwnPropertyNames(e)),w(e)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return h(e);if(0===o.length){if(k(e)){var l=e.name?": "+e.name:"";return t.stylize("[Function"+l+"]","special")}if(x(e))return t.stylize(RegExp.prototype.toString.call(e),"regexp");if(_(e))return t.stylize(Date.prototype.toString.call(e),"date");if(w(e))return h(e)}var c,b="",T=!1,M=["{","}"];(p(e)&&(T=!0,M=["[","]"]),k(e))&&(b=" [Function"+(e.name?": "+e.name:"")+"]");return x(e)&&(b=" "+RegExp.prototype.toString.call(e)),_(e)&&(b=" "+Date.prototype.toUTCString.call(e)),w(e)&&(b=" "+h(e)),0!==o.length||T&&0!=e.length?n<0?x(e)?t.stylize(RegExp.prototype.toString.call(e),"regexp"):t.stylize("[Object]","special"):(t.seen.push(e),c=T?function(t,e,r,n,a){for(var i=[],o=0,s=e.length;o<s;++o)S(e,String(o))?i.push(f(t,e,r,n,String(o),!0)):i.push("");return a.forEach(function(a){a.match(/^\d+$/)||i.push(f(t,e,r,n,a,!0))}),i}(t,e,n,s,o):o.map(function(r){return f(t,e,n,s,r,T)}),t.seen.pop(),function(t,e,r){if(t.reduce(function(t,e){return 0,e.indexOf("\n")>=0&&0,t+e.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60)return r[0]+(""===e?"":e+"\n ")+" "+t.join(",\n ")+" "+r[1];return r[0]+e+" "+t.join(", ")+" "+r[1]}(c,b,M)):M[0]+b+M[1]}function h(t){return"["+Error.prototype.toString.call(t)+"]"}function f(t,e,r,n,a,i){var o,s,l;if((l=Object.getOwnPropertyDescriptor(e,a)||{value:e[a]}).get?s=l.set?t.stylize("[Getter/Setter]","special"):t.stylize("[Getter]","special"):l.set&&(s=t.stylize("[Setter]","special")),S(n,a)||(o="["+a+"]"),s||(t.seen.indexOf(l.value)<0?(s=g(r)?u(t,l.value,null):u(t,l.value,r-1)).indexOf("\n")>-1&&(s=i?s.split("\n").map(function(t){return" "+t}).join("\n").substr(2):"\n"+s.split("\n").map(function(t){return" "+t}).join("\n")):s=t.stylize("[Circular]","special")),y(o)){if(i&&a.match(/^\d+$/))return s;(o=JSON.stringify(""+a)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(o=o.substr(1,o.length-2),o=t.stylize(o,"name")):(o=o.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),o=t.stylize(o,"string"))}return o+": "+s}function p(t){return Array.isArray(t)}function d(t){return"boolean"==typeof t}function g(t){return null===t}function v(t){return"number"==typeof t}function m(t){return"string"==typeof t}function y(t){return void 0===t}function x(t){return b(t)&&"[object RegExp]"===T(t)}function b(t){return"object"==typeof t&&null!==t}function _(t){return b(t)&&"[object Date]"===T(t)}function w(t){return b(t)&&("[object Error]"===T(t)||t instanceof Error)}function k(t){return"function"==typeof t}function T(t){return Object.prototype.toString.call(t)}function M(t){return t<10?"0"+t.toString(10):t.toString(10)}r.debuglog=function(t){if(y(i)&&(i=e.env.NODE_DEBUG||""),t=t.toUpperCase(),!o[t])if(new RegExp("\\b"+t+"\\b","i").test(i)){var n=e.pid;o[t]=function(){var e=r.format.apply(r,arguments);console.error("%s %d: %s",t,n,e)}}else o[t]=function(){};return o[t]},r.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},r.isArray=p,r.isBoolean=d,r.isNull=g,r.isNullOrUndefined=function(t){return null==t},r.isNumber=v,r.isString=m,r.isSymbol=function(t){return"symbol"==typeof t},r.isUndefined=y,r.isRegExp=x,r.isObject=b,r.isDate=_,r.isError=w,r.isFunction=k,r.isPrimitive=function(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||"undefined"==typeof t},r.isBuffer=t("./support/isBuffer");var A=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function S(t,e){return Object.prototype.hasOwnProperty.call(t,e)}r.log=function(){var t,e;console.log("%s - %s",(t=new Date,e=[M(t.getHours()),M(t.getMinutes()),M(t.getSeconds())].join(":"),[t.getDate(),A[t.getMonth()],e].join(" ")),r.format.apply(r,arguments))},r.inherits=t("inherits"),r._extend=function(t,e){if(!e||!b(e))return t;for(var r=Object.keys(e),n=r.length;n--;)t[r[n]]=e[r[n]];return t}}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":72,_process:483,inherits:71}],74:[function(t,e,r){e.exports=function(t){return atob(t)}},{}],75:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r=e.length,i=new Array(r+1),o=0;o<r;++o){for(var s=new Array(r+1),l=0;l<=r;++l)s[l]=t[l][o];i[o]=s}i[r]=new Array(r+1);for(var o=0;o<=r;++o)i[r][o]=1;for(var c=new Array(r+1),o=0;o<r;++o)c[o]=e[o];c[r]=1;var u=n(i,c),h=a(u[r+1]);0===h&&(h=1);for(var f=new Array(r+1),o=0;o<=r;++o)f[o]=a(u[o])/h;return f};var n=t("robust-linear-solve");function a(t){for(var e=0,r=0;r<t.length;++r)e+=t[r];return e}},{"robust-linear-solve":507}],76:[function(t,e,r){"use strict";r.byteLength=function(t){var e=c(t),r=e[0],n=e[1];return 3*(r+n)/4-n},r.toByteArray=function(t){var e,r,n=c(t),o=n[0],s=n[1],l=new i(function(t,e,r){return 3*(e+r)/4-r}(0,o,s)),u=0,h=s>0?o-4:o;for(r=0;r<h;r+=4)e=a[t.charCodeAt(r)]<<18|a[t.charCodeAt(r+1)]<<12|a[t.charCodeAt(r+2)]<<6|a[t.charCodeAt(r+3)],l[u++]=e>>16&255,l[u++]=e>>8&255,l[u++]=255&e;2===s&&(e=a[t.charCodeAt(r)]<<2|a[t.charCodeAt(r+1)]>>4,l[u++]=255&e);1===s&&(e=a[t.charCodeAt(r)]<<10|a[t.charCodeAt(r+1)]<<4|a[t.charCodeAt(r+2)]>>2,l[u++]=e>>8&255,l[u++]=255&e);return l},r.fromByteArray=function(t){for(var e,r=t.length,a=r%3,i=[],o=0,s=r-a;o<s;o+=16383)i.push(u(t,o,o+16383>s?s:o+16383));1===a?(e=t[r-1],i.push(n[e>>2]+n[e<<4&63]+"==")):2===a&&(e=(t[r-2]<<8)+t[r-1],i.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"="));return i.join("")};for(var n=[],a=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,l=o.length;s<l;++s)n[s]=o[s],a[o.charCodeAt(s)]=s;function c(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function u(t,e,r){for(var a,i,o=[],s=e;s<r;s+=3)a=(t[s]<<16&16711680)+(t[s+1]<<8&65280)+(255&t[s+2]),o.push(n[(i=a)>>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return o.join("")}a["-".charCodeAt(0)]=62,a["_".charCodeAt(0)]=63},{}],77:[function(t,e,r){"use strict";var n=t("./lib/rationalize");e.exports=function(t,e){return n(t[0].mul(e[1]).add(e[0].mul(t[1])),t[1].mul(e[1]))}},{"./lib/rationalize":87}],78:[function(t,e,r){"use strict";e.exports=function(t,e){return t[0].mul(e[1]).cmp(e[0].mul(t[1]))}},{}],79:[function(t,e,r){"use strict";var n=t("./lib/rationalize");e.exports=function(t,e){return n(t[0].mul(e[1]),t[1].mul(e[0]))}},{"./lib/rationalize":87}],80:[function(t,e,r){"use strict";var n=t("./is-rat"),a=t("./lib/is-bn"),i=t("./lib/num-to-bn"),o=t("./lib/str-to-bn"),s=t("./lib/rationalize"),l=t("./div");e.exports=function t(e,r){if(n(e))return r?l(e,t(r)):[e[0].clone(),e[1].clone()];var c=0;var u,h;if(a(e))u=e.clone();else if("string"==typeof e)u=o(e);else{if(0===e)return[i(0),i(1)];if(e===Math.floor(e))u=i(e);else{for(;e!==Math.floor(e);)e*=Math.pow(2,256),c-=256;u=i(e)}}if(n(r))u.mul(r[1]),h=r[0].clone();else if(a(r))h=r.clone();else if("string"==typeof r)h=o(r);else if(r)if(r===Math.floor(r))h=i(r);else{for(;r!==Math.floor(r);)r*=Math.pow(2,256),c+=256;h=i(r)}else h=i(1);c>0?u=u.ushln(c):c<0&&(h=h.ushln(-c));return s(u,h)}},{"./div":79,"./is-rat":81,"./lib/is-bn":85,"./lib/num-to-bn":86,"./lib/rationalize":87,"./lib/str-to-bn":88}],81:[function(t,e,r){"use strict";var n=t("./lib/is-bn");e.exports=function(t){return Array.isArray(t)&&2===t.length&&n(t[0])&&n(t[1])}},{"./lib/is-bn":85}],82:[function(t,e,r){"use strict";var n=t("bn.js");e.exports=function(t){return t.cmp(new n(0))}},{"bn.js":96}],83:[function(t,e,r){"use strict";var n=t("./bn-sign");e.exports=function(t){var e=t.length,r=t.words,a=0;if(1===e)a=r[0];else if(2===e)a=r[0]+67108864*r[1];else for(var i=0;i<e;i++){var o=r[i];a+=o*Math.pow(67108864,i)}return n(t)*a}},{"./bn-sign":82}],84:[function(t,e,r){"use strict";var n=t("double-bits"),a=t("bit-twiddle").countTrailingZeros;e.exports=function(t){var e=a(n.lo(t));if(e<32)return e;var r=a(n.hi(t));if(r>20)return 52;return r+32}},{"bit-twiddle":94,"double-bits":169}],85:[function(t,e,r){"use strict";t("bn.js");e.exports=function(t){return t&&"object"==typeof t&&Boolean(t.words)}},{"bn.js":96}],86:[function(t,e,r){"use strict";var n=t("bn.js"),a=t("double-bits");e.exports=function(t){var e=a.exponent(t);return e<52?new n(t):new n(t*Math.pow(2,52-e)).ushln(e-52)}},{"bn.js":96,"double-bits":169}],87:[function(t,e,r){"use strict";var n=t("./num-to-bn"),a=t("./bn-sign");e.exports=function(t,e){var r=a(t),i=a(e);if(0===r)return[n(0),n(1)];if(0===i)return[n(0),n(0)];i<0&&(t=t.neg(),e=e.neg());var o=t.gcd(e);if(o.cmpn(1))return[t.div(o),e.div(o)];return[t,e]}},{"./bn-sign":82,"./num-to-bn":86}],88:[function(t,e,r){"use strict";var n=t("bn.js");e.exports=function(t){return new n(t)}},{"bn.js":96}],89:[function(t,e,r){"use strict";var n=t("./lib/rationalize");e.exports=function(t,e){return n(t[0].mul(e[0]),t[1].mul(e[1]))}},{"./lib/rationalize":87}],90:[function(t,e,r){"use strict";var n=t("./lib/bn-sign");e.exports=function(t){return n(t[0])*n(t[1])}},{"./lib/bn-sign":82}],91:[function(t,e,r){"use strict";var n=t("./lib/rationalize");e.exports=function(t,e){return n(t[0].mul(e[1]).sub(t[1].mul(e[0])),t[1].mul(e[1]))}},{"./lib/rationalize":87}],92:[function(t,e,r){"use strict";var n=t("./lib/bn-to-num"),a=t("./lib/ctz");e.exports=function(t){var e=t[0],r=t[1];if(0===e.cmpn(0))return 0;var i=e.abs().divmod(r.abs()),o=i.div,s=n(o),l=i.mod,c=e.negative!==r.negative?-1:1;if(0===l.cmpn(0))return c*s;if(s){var u=a(s)+4,h=n(l.ushln(u).divRound(r));return c*(s+h*Math.pow(2,-u))}var f=r.bitLength()-l.bitLength()+53,h=n(l.ushln(f).divRound(r));return f<1023?c*h*Math.pow(2,-f):(h*=Math.pow(2,-1023),c*h*Math.pow(2,1023-f))}},{"./lib/bn-to-num":83,"./lib/ctz":84}],93:[function(t,e,r){"use strict";function n(t,e,r,n,a,i){var o=["function ",t,"(a,l,h,",n.join(","),"){",i?"":"var i=",r?"l-1":"h+1",";while(l<=h){var m=(l+h)>>>1,x=a",a?".get(m)":"[m]"];return i?e.indexOf("c")<0?o.push(";if(x===y){return m}else if(x<=y){"):o.push(";var p=c(x,y);if(p===0){return m}else if(p<=0){"):o.push(";if(",e,"){i=m;"),r?o.push("l=m+1}else{h=m-1}"):o.push("h=m-1}else{l=m+1}"),o.push("}"),i?o.push("return -1};"):o.push("return i};"),o.join("")}function a(t,e,r,a){return new Function([n("A","x"+t+"y",e,["y"],!1,a),n("B","x"+t+"y",e,["y"],!0,a),n("P","c(x,y)"+t+"0",e,["y","c"],!1,a),n("Q","c(x,y)"+t+"0",e,["y","c"],!0,a),"function dispatchBsearch",r,"(a,y,c,l,h){if(a.shape){if(typeof(c)==='function'){return Q(a,(l===undefined)?0:l|0,(h===undefined)?a.shape[0]-1:h|0,y,c)}else{return B(a,(c===undefined)?0:c|0,(l===undefined)?a.shape[0]-1:l|0,y)}}else{if(typeof(c)==='function'){return P(a,(l===undefined)?0:l|0,(h===undefined)?a.length-1:h|0,y,c)}else{return A(a,(c===undefined)?0:c|0,(l===undefined)?a.length-1:l|0,y)}}}return dispatchBsearch",r].join(""))()}e.exports={ge:a(">=",!1,"GE"),gt:a(">",!1,"GT"),lt:a("<",!0,"LT"),le:a("<=",!0,"LE"),eq:a("-",!0,"EQ",!0)}},{}],94:[function(t,e,r){"use strict";function n(t){var e=32;return(t&=-t)&&e--,65535&t&&(e-=16),16711935&t&&(e-=8),252645135&t&&(e-=4),858993459&t&&(e-=2),1431655765&t&&(e-=1),e}r.INT_BITS=32,r.INT_MAX=2147483647,r.INT_MIN=-1<<31,r.sign=function(t){return(t>0)-(t<0)},r.abs=function(t){var e=t>>31;return(t^e)-e},r.min=function(t,e){return e^(t^e)&-(t<e)},r.max=function(t,e){return t^(t^e)&-(t<e)},r.isPow2=function(t){return!(t&t-1||!t)},r.log2=function(t){var e,r;return e=(t>65535)<<4,e|=r=((t>>>=e)>255)<<3,e|=r=((t>>>=r)>15)<<2,(e|=r=((t>>>=r)>3)<<1)|(t>>>=r)>>1},r.log10=function(t){return t>=1e9?9:t>=1e8?8:t>=1e7?7:t>=1e6?6:t>=1e5?5:t>=1e4?4:t>=1e3?3:t>=100?2:t>=10?1:0},r.popCount=function(t){return 16843009*((t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135)>>>24},r.countTrailingZeros=n,r.nextPow2=function(t){return t+=0===t,--t,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)+1},r.prevPow2=function(t){return t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)-(t>>>1)},r.parity=function(t){return t^=t>>>16,t^=t>>>8,t^=t>>>4,27030>>>(t&=15)&1};var a=new Array(256);!function(t){for(var e=0;e<256;++e){var r=e,n=e,a=7;for(r>>>=1;r;r>>>=1)n<<=1,n|=1&r,--a;t[e]=n<<a&255}}(a),r.reverse=function(t){return a[255&t]<<24|a[t>>>8&255]<<16|a[t>>>16&255]<<8|a[t>>>24&255]},r.interleave2=function(t,e){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t&=65535)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e&=65535)|e<<8))|e<<4))|e<<2))|e<<1))<<1},r.deinterleave2=function(t,e){return(t=65535&((t=16711935&((t=252645135&((t=858993459&((t=t>>>e&1431655765)|t>>>1))|t>>>2))|t>>>4))|t>>>16))<<16>>16},r.interleave3=function(t,e,r){return t=1227133513&((t=3272356035&((t=251719695&((t=4278190335&((t&=1023)|t<<16))|t<<8))|t<<4))|t<<2),(t|=(e=1227133513&((e=3272356035&((e=251719695&((e=4278190335&((e&=1023)|e<<16))|e<<8))|e<<4))|e<<2))<<1)|(r=1227133513&((r=3272356035&((r=251719695&((r=4278190335&((r&=1023)|r<<16))|r<<8))|r<<4))|r<<2))<<2},r.deinterleave3=function(t,e){return(t=1023&((t=4278190335&((t=251719695&((t=3272356035&((t=t>>>e&1227133513)|t>>>2))|t>>>4))|t>>>8))|t>>>16))<<22>>22},r.nextCombination=function(t){var e=t|t-1;return e+1|(~e&-~e)-1>>>n(t)+1}},{}],95:[function(t,e,r){"use strict";var n=t("clamp");e.exports=function(t,e){e||(e={});var r,o,s,l,c,u,h,f,p,d,g,v=null==e.cutoff?.25:e.cutoff,m=null==e.radius?8:e.radius,y=e.channel||0;if(ArrayBuffer.isView(t)||Array.isArray(t)){if(!e.width||!e.height)throw Error("For raw data width and height should be provided by options");r=e.width,o=e.height,l=t,u=e.stride?e.stride:Math.floor(t.length/r/o)}else window.HTMLCanvasElement&&t instanceof window.HTMLCanvasElement?(h=(f=t).getContext("2d"),r=f.width,o=f.height,p=h.getImageData(0,0,r,o),l=p.data,u=4):window.CanvasRenderingContext2D&&t instanceof window.CanvasRenderingContext2D?(f=t.canvas,h=t,r=f.width,o=f.height,p=h.getImageData(0,0,r,o),l=p.data,u=4):window.ImageData&&t instanceof window.ImageData&&(p=t,r=t.width,o=t.height,l=p.data,u=4);if(s=Math.max(r,o),window.Uint8ClampedArray&&l instanceof window.Uint8ClampedArray||window.Uint8Array&&l instanceof window.Uint8Array)for(c=l,l=Array(r*o),d=0,g=c.length;d<g;d++)l[d]=c[d*u+y]/255;else if(1!==u)throw Error("Raw data can have only 1 value per pixel");var x=Array(r*o),b=Array(r*o),_=Array(s),w=Array(s),k=Array(s+1),T=Array(s);for(d=0,g=r*o;d<g;d++){var M=l[d];x[d]=1===M?0:0===M?a:Math.pow(Math.max(0,.5-M),2),b[d]=1===M?a:0===M?0:Math.pow(Math.max(0,M-.5),2)}i(x,r,o,_,w,T,k),i(b,r,o,_,w,T,k);var A=window.Float32Array?new Float32Array(r*o):new Array(r*o);for(d=0,g=r*o;d<g;d++)A[d]=n(1-((x[d]-b[d])/m+v),0,1);return A};var a=1e20;function i(t,e,r,n,a,i,s){for(var l=0;l<e;l++){for(var c=0;c<r;c++)n[c]=t[c*e+l];for(o(n,a,i,s,r),c=0;c<r;c++)t[c*e+l]=a[c]}for(c=0;c<r;c++){for(l=0;l<e;l++)n[l]=t[c*e+l];for(o(n,a,i,s,e),l=0;l<e;l++)t[c*e+l]=Math.sqrt(a[l])}}function o(t,e,r,n,i){r[0]=0,n[0]=-a,n[1]=+a;for(var o=1,s=0;o<i;o++){for(var l=(t[o]+o*o-(t[r[s]]+r[s]*r[s]))/(2*o-2*r[s]);l<=n[s];)s--,l=(t[o]+o*o-(t[r[s]]+r[s]*r[s]))/(2*o-2*r[s]);r[++s]=o,n[s]=l,n[s+1]=+a}for(o=0,s=0;o<i;o++){for(;n[s+1]<o;)s++;e[o]=(o-r[s])*(o-r[s])+t[r[s]]}}},{clamp:117}],96:[function(t,e,r){!function(e,r){"use strict";function n(t,e){if(!t)throw new Error(e||"Assertion failed")}function a(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function i(t,e,r){if(i.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var o;"object"==typeof e?e.exports=i:r.BN=i,i.BN=i,i.wordSize=26;try{o=t("buffer").Buffer}catch(t){}function s(t,e,r){for(var n=0,a=Math.min(t.length,r),i=e;i<a;i++){var o=t.charCodeAt(i)-48;n<<=4,n|=o>=49&&o<=54?o-49+10:o>=17&&o<=22?o-17+10:15&o}return n}function l(t,e,r,n){for(var a=0,i=Math.min(t.length,r),o=e;o<i;o++){var s=t.charCodeAt(o)-48;a*=n,a+=s>=49?s-49+10:s>=17?s-17+10:s}return a}i.isBN=function(t){return t instanceof i||null!==t&&"object"==typeof t&&t.constructor.wordSize===i.wordSize&&Array.isArray(t.words)},i.max=function(t,e){return t.cmp(e)>0?t:e},i.min=function(t,e){return t.cmp(e)<0?t:e},i.prototype._init=function(t,e,r){if("number"==typeof t)return this._initNumber(t,e,r);if("object"==typeof t)return this._initArray(t,e,r);"hex"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36);var a=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&a++,16===e?this._parseHex(t,a):this._parseBase(t,e,a),"-"===t[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),e,r)},i.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(n(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),e,r)},i.prototype._initArray=function(t,e,r){if(n("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var a=0;a<this.length;a++)this.words[a]=0;var i,o,s=0;if("be"===r)for(a=t.length-1,i=0;a>=0;a-=3)o=t[a]|t[a-1]<<8|t[a-2]<<16,this.words[i]|=o<<s&67108863,this.words[i+1]=o>>>26-s&67108863,(s+=24)>=26&&(s-=26,i++);else if("le"===r)for(a=0,i=0;a<t.length;a+=3)o=t[a]|t[a+1]<<8|t[a+2]<<16,this.words[i]|=o<<s&67108863,this.words[i+1]=o>>>26-s&67108863,(s+=24)>=26&&(s-=26,i++);return this.strip()},i.prototype._parseHex=function(t,e){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var n,a,i=0;for(r=t.length-6,n=0;r>=e;r-=6)a=s(t,r,r+6),this.words[n]|=a<<i&67108863,this.words[n+1]|=a>>>26-i&4194303,(i+=24)>=26&&(i-=26,n++);r+6!==e&&(a=s(t,e,r+6),this.words[n]|=a<<i&67108863,this.words[n+1]|=a>>>26-i&4194303),this.strip()},i.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,a=1;a<=67108863;a*=e)n++;n--,a=a/e|0;for(var i=t.length-r,o=i%n,s=Math.min(i,i-o)+r,c=0,u=r;u<s;u+=n)c=l(t,u,u+n,e),this.imuln(a),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c);if(0!==o){var h=1;for(c=l(t,u,t.length,e),u=0;u<o;u++)h*=e;this.imuln(h),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c)}},i.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},i.prototype.clone=function(){var t=new i(null);return this.copy(t),t},i.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},i.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},i.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},i.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var c=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],u=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function f(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var a=0|t.words[0],i=0|e.words[0],o=a*i,s=67108863&o,l=o/67108864|0;r.words[0]=s;for(var c=1;c<n;c++){for(var u=l>>>26,h=67108863&l,f=Math.min(c,e.length-1),p=Math.max(0,c-t.length+1);p<=f;p++){var d=c-p|0;u+=(o=(a=0|t.words[d])*(i=0|e.words[p])+h)/67108864|0,h=67108863&o}r.words[c]=0|h,l=0|u}return 0!==l?r.words[c]=0|l:r.length--,r.strip()}i.prototype.toString=function(t,e){var r;if(e=0|e||1,16===(t=t||10)||"hex"===t){r="";for(var a=0,i=0,o=0;o<this.length;o++){var s=this.words[o],l=(16777215&(s<<a|i)).toString(16);r=0!==(i=s>>>24-a&16777215)||o!==this.length-1?c[6-l.length]+l+r:l+r,(a+=2)>=26&&(a-=26,o--)}for(0!==i&&(r=i.toString(16)+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(t===(0|t)&&t>=2&&t<=36){var f=u[t],p=h[t];r="";var d=this.clone();for(d.negative=0;!d.isZero();){var g=d.modn(p).toString(t);r=(d=d.idivn(p)).isZero()?g+r:c[f-g.length]+g+r}for(this.isZero()&&(r="0"+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},i.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},i.prototype.toJSON=function(){return this.toString(16)},i.prototype.toBuffer=function(t,e){return n("undefined"!=typeof o),this.toArrayLike(o,t,e)},i.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},i.prototype.toArrayLike=function(t,e,r){var a=this.byteLength(),i=r||Math.max(1,a);n(a<=i,"byte array longer than desired length"),n(i>0,"Requested array length <= 0"),this.strip();var o,s,l="le"===e,c=new t(i),u=this.clone();if(l){for(s=0;!u.isZero();s++)o=u.andln(255),u.iushrn(8),c[s]=o;for(;s<i;s++)c[s]=0}else{for(s=0;s<i-a;s++)c[s]=0;for(s=0;!u.isZero();s++)o=u.andln(255),u.iushrn(8),c[i-s-1]=o}return c},Math.clz32?i.prototype._countBits=function(t){return 32-Math.clz32(t)}:i.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},i.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},i.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},i.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},i.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},i.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},i.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},i.prototype.isNeg=function(){return 0!==this.negative},i.prototype.neg=function(){return this.clone().ineg()},i.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},i.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},i.prototype.ior=function(t){return n(0==(this.negative|t.negative)),this.iuor(t)},i.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},i.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},i.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},i.prototype.iand=function(t){return n(0==(this.negative|t.negative)),this.iuand(t)},i.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},i.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},i.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;n<r.length;n++)this.words[n]=e.words[n]^r.words[n];if(this!==e)for(;n<e.length;n++)this.words[n]=e.words[n];return this.length=e.length,this.strip()},i.prototype.ixor=function(t){return n(0==(this.negative|t.negative)),this.iuxor(t)},i.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},i.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},i.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var a=0;a<e;a++)this.words[a]=67108863&~this.words[a];return r>0&&(this.words[a]=~this.words[a]&67108863>>26-r),this.strip()},i.prototype.notn=function(t){return this.clone().inotn(t)},i.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,a=t%26;return this._expand(r+1),this.words[r]=e?this.words[r]|1<<a:this.words[r]&~(1<<a),this.strip()},i.prototype.iadd=function(t){var e,r,n;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();this.length>t.length?(r=this,n=t):(r=t,n=this);for(var a=0,i=0;i<n.length;i++)e=(0|r.words[i])+(0|n.words[i])+a,this.words[i]=67108863&e,a=e>>>26;for(;0!==a&&i<r.length;i++)e=(0|r.words[i])+a,this.words[i]=67108863&e,a=e>>>26;if(this.length=r.length,0!==a)this.words[this.length]=a,this.length++;else if(r!==this)for(;i<r.length;i++)this.words[i]=r.words[i];return this},i.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},i.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,n,a=this.cmp(t);if(0===a)return this.negative=0,this.length=1,this.words[0]=0,this;a>0?(r=this,n=t):(r=t,n=this);for(var i=0,o=0;o<n.length;o++)i=(e=(0|r.words[o])-(0|n.words[o])+i)>>26,this.words[o]=67108863&e;for(;0!==i&&o<r.length;o++)i=(e=(0|r.words[o])+i)>>26,this.words[o]=67108863&e;if(0===i&&o<r.length&&r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this.length=Math.max(this.length,o),r!==this&&(this.negative=1),this.strip()},i.prototype.sub=function(t){return this.clone().isub(t)};var p=function(t,e,r){var n,a,i,o=t.words,s=e.words,l=r.words,c=0,u=0|o[0],h=8191&u,f=u>>>13,p=0|o[1],d=8191&p,g=p>>>13,v=0|o[2],m=8191&v,y=v>>>13,x=0|o[3],b=8191&x,_=x>>>13,w=0|o[4],k=8191&w,T=w>>>13,M=0|o[5],A=8191&M,S=M>>>13,E=0|o[6],L=8191&E,C=E>>>13,P=0|o[7],O=8191&P,z=P>>>13,I=0|o[8],D=8191&I,R=I>>>13,F=0|o[9],B=8191&F,N=F>>>13,j=0|s[0],V=8191&j,U=j>>>13,q=0|s[1],H=8191&q,G=q>>>13,Y=0|s[2],W=8191&Y,X=Y>>>13,Z=0|s[3],J=8191&Z,K=Z>>>13,Q=0|s[4],$=8191&Q,tt=Q>>>13,et=0|s[5],rt=8191&et,nt=et>>>13,at=0|s[6],it=8191&at,ot=at>>>13,st=0|s[7],lt=8191&st,ct=st>>>13,ut=0|s[8],ht=8191&ut,ft=ut>>>13,pt=0|s[9],dt=8191&pt,gt=pt>>>13;r.negative=t.negative^e.negative,r.length=19;var vt=(c+(n=Math.imul(h,V))|0)+((8191&(a=(a=Math.imul(h,U))+Math.imul(f,V)|0))<<13)|0;c=((i=Math.imul(f,U))+(a>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(d,V),a=(a=Math.imul(d,U))+Math.imul(g,V)|0,i=Math.imul(g,U);var mt=(c+(n=n+Math.imul(h,H)|0)|0)+((8191&(a=(a=a+Math.imul(h,G)|0)+Math.imul(f,H)|0))<<13)|0;c=((i=i+Math.imul(f,G)|0)+(a>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(m,V),a=(a=Math.imul(m,U))+Math.imul(y,V)|0,i=Math.imul(y,U),n=n+Math.imul(d,H)|0,a=(a=a+Math.imul(d,G)|0)+Math.imul(g,H)|0,i=i+Math.imul(g,G)|0;var yt=(c+(n=n+Math.imul(h,W)|0)|0)+((8191&(a=(a=a+Math.imul(h,X)|0)+Math.imul(f,W)|0))<<13)|0;c=((i=i+Math.imul(f,X)|0)+(a>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(b,V),a=(a=Math.imul(b,U))+Math.imul(_,V)|0,i=Math.imul(_,U),n=n+Math.imul(m,H)|0,a=(a=a+Math.imul(m,G)|0)+Math.imul(y,H)|0,i=i+Math.imul(y,G)|0,n=n+Math.imul(d,W)|0,a=(a=a+Math.imul(d,X)|0)+Math.imul(g,W)|0,i=i+Math.imul(g,X)|0;var xt=(c+(n=n+Math.imul(h,J)|0)|0)+((8191&(a=(a=a+Math.imul(h,K)|0)+Math.imul(f,J)|0))<<13)|0;c=((i=i+Math.imul(f,K)|0)+(a>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(k,V),a=(a=Math.imul(k,U))+Math.imul(T,V)|0,i=Math.imul(T,U),n=n+Math.imul(b,H)|0,a=(a=a+Math.imul(b,G)|0)+Math.imul(_,H)|0,i=i+Math.imul(_,G)|0,n=n+Math.imul(m,W)|0,a=(a=a+Math.imul(m,X)|0)+Math.imul(y,W)|0,i=i+Math.imul(y,X)|0,n=n+Math.imul(d,J)|0,a=(a=a+Math.imul(d,K)|0)+Math.imul(g,J)|0,i=i+Math.imul(g,K)|0;var bt=(c+(n=n+Math.imul(h,$)|0)|0)+((8191&(a=(a=a+Math.imul(h,tt)|0)+Math.imul(f,$)|0))<<13)|0;c=((i=i+Math.imul(f,tt)|0)+(a>>>13)|0)+(bt>>>26)|0,bt&=67108863,n=Math.imul(A,V),a=(a=Math.imul(A,U))+Math.imul(S,V)|0,i=Math.imul(S,U),n=n+Math.imul(k,H)|0,a=(a=a+Math.imul(k,G)|0)+Math.imul(T,H)|0,i=i+Math.imul(T,G)|0,n=n+Math.imul(b,W)|0,a=(a=a+Math.imul(b,X)|0)+Math.imul(_,W)|0,i=i+Math.imul(_,X)|0,n=n+Math.imul(m,J)|0,a=(a=a+Math.imul(m,K)|0)+Math.imul(y,J)|0,i=i+Math.imul(y,K)|0,n=n+Math.imul(d,$)|0,a=(a=a+Math.imul(d,tt)|0)+Math.imul(g,$)|0,i=i+Math.imul(g,tt)|0;var _t=(c+(n=n+Math.imul(h,rt)|0)|0)+((8191&(a=(a=a+Math.imul(h,nt)|0)+Math.imul(f,rt)|0))<<13)|0;c=((i=i+Math.imul(f,nt)|0)+(a>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(L,V),a=(a=Math.imul(L,U))+Math.imul(C,V)|0,i=Math.imul(C,U),n=n+Math.imul(A,H)|0,a=(a=a+Math.imul(A,G)|0)+Math.imul(S,H)|0,i=i+Math.imul(S,G)|0,n=n+Math.imul(k,W)|0,a=(a=a+Math.imul(k,X)|0)+Math.imul(T,W)|0,i=i+Math.imul(T,X)|0,n=n+Math.imul(b,J)|0,a=(a=a+Math.imul(b,K)|0)+Math.imul(_,J)|0,i=i+Math.imul(_,K)|0,n=n+Math.imul(m,$)|0,a=(a=a+Math.imul(m,tt)|0)+Math.imul(y,$)|0,i=i+Math.imul(y,tt)|0,n=n+Math.imul(d,rt)|0,a=(a=a+Math.imul(d,nt)|0)+Math.imul(g,rt)|0,i=i+Math.imul(g,nt)|0;var wt=(c+(n=n+Math.imul(h,it)|0)|0)+((8191&(a=(a=a+Math.imul(h,ot)|0)+Math.imul(f,it)|0))<<13)|0;c=((i=i+Math.imul(f,ot)|0)+(a>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(O,V),a=(a=Math.imul(O,U))+Math.imul(z,V)|0,i=Math.imul(z,U),n=n+Math.imul(L,H)|0,a=(a=a+Math.imul(L,G)|0)+Math.imul(C,H)|0,i=i+Math.imul(C,G)|0,n=n+Math.imul(A,W)|0,a=(a=a+Math.imul(A,X)|0)+Math.imul(S,W)|0,i=i+Math.imul(S,X)|0,n=n+Math.imul(k,J)|0,a=(a=a+Math.imul(k,K)|0)+Math.imul(T,J)|0,i=i+Math.imul(T,K)|0,n=n+Math.imul(b,$)|0,a=(a=a+Math.imul(b,tt)|0)+Math.imul(_,$)|0,i=i+Math.imul(_,tt)|0,n=n+Math.imul(m,rt)|0,a=(a=a+Math.imul(m,nt)|0)+Math.imul(y,rt)|0,i=i+Math.imul(y,nt)|0,n=n+Math.imul(d,it)|0,a=(a=a+Math.imul(d,ot)|0)+Math.imul(g,it)|0,i=i+Math.imul(g,ot)|0;var kt=(c+(n=n+Math.imul(h,lt)|0)|0)+((8191&(a=(a=a+Math.imul(h,ct)|0)+Math.imul(f,lt)|0))<<13)|0;c=((i=i+Math.imul(f,ct)|0)+(a>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(D,V),a=(a=Math.imul(D,U))+Math.imul(R,V)|0,i=Math.imul(R,U),n=n+Math.imul(O,H)|0,a=(a=a+Math.imul(O,G)|0)+Math.imul(z,H)|0,i=i+Math.imul(z,G)|0,n=n+Math.imul(L,W)|0,a=(a=a+Math.imul(L,X)|0)+Math.imul(C,W)|0,i=i+Math.imul(C,X)|0,n=n+Math.imul(A,J)|0,a=(a=a+Math.imul(A,K)|0)+Math.imul(S,J)|0,i=i+Math.imul(S,K)|0,n=n+Math.imul(k,$)|0,a=(a=a+Math.imul(k,tt)|0)+Math.imul(T,$)|0,i=i+Math.imul(T,tt)|0,n=n+Math.imul(b,rt)|0,a=(a=a+Math.imul(b,nt)|0)+Math.imul(_,rt)|0,i=i+Math.imul(_,nt)|0,n=n+Math.imul(m,it)|0,a=(a=a+Math.imul(m,ot)|0)+Math.imul(y,it)|0,i=i+Math.imul(y,ot)|0,n=n+Math.imul(d,lt)|0,a=(a=a+Math.imul(d,ct)|0)+Math.imul(g,lt)|0,i=i+Math.imul(g,ct)|0;var Tt=(c+(n=n+Math.imul(h,ht)|0)|0)+((8191&(a=(a=a+Math.imul(h,ft)|0)+Math.imul(f,ht)|0))<<13)|0;c=((i=i+Math.imul(f,ft)|0)+(a>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(B,V),a=(a=Math.imul(B,U))+Math.imul(N,V)|0,i=Math.imul(N,U),n=n+Math.imul(D,H)|0,a=(a=a+Math.imul(D,G)|0)+Math.imul(R,H)|0,i=i+Math.imul(R,G)|0,n=n+Math.imul(O,W)|0,a=(a=a+Math.imul(O,X)|0)+Math.imul(z,W)|0,i=i+Math.imul(z,X)|0,n=n+Math.imul(L,J)|0,a=(a=a+Math.imul(L,K)|0)+Math.imul(C,J)|0,i=i+Math.imul(C,K)|0,n=n+Math.imul(A,$)|0,a=(a=a+Math.imul(A,tt)|0)+Math.imul(S,$)|0,i=i+Math.imul(S,tt)|0,n=n+Math.imul(k,rt)|0,a=(a=a+Math.imul(k,nt)|0)+Math.imul(T,rt)|0,i=i+Math.imul(T,nt)|0,n=n+Math.imul(b,it)|0,a=(a=a+Math.imul(b,ot)|0)+Math.imul(_,it)|0,i=i+Math.imul(_,ot)|0,n=n+Math.imul(m,lt)|0,a=(a=a+Math.imul(m,ct)|0)+Math.imul(y,lt)|0,i=i+Math.imul(y,ct)|0,n=n+Math.imul(d,ht)|0,a=(a=a+Math.imul(d,ft)|0)+Math.imul(g,ht)|0,i=i+Math.imul(g,ft)|0;var Mt=(c+(n=n+Math.imul(h,dt)|0)|0)+((8191&(a=(a=a+Math.imul(h,gt)|0)+Math.imul(f,dt)|0))<<13)|0;c=((i=i+Math.imul(f,gt)|0)+(a>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(B,H),a=(a=Math.imul(B,G))+Math.imul(N,H)|0,i=Math.imul(N,G),n=n+Math.imul(D,W)|0,a=(a=a+Math.imul(D,X)|0)+Math.imul(R,W)|0,i=i+Math.imul(R,X)|0,n=n+Math.imul(O,J)|0,a=(a=a+Math.imul(O,K)|0)+Math.imul(z,J)|0,i=i+Math.imul(z,K)|0,n=n+Math.imul(L,$)|0,a=(a=a+Math.imul(L,tt)|0)+Math.imul(C,$)|0,i=i+Math.imul(C,tt)|0,n=n+Math.imul(A,rt)|0,a=(a=a+Math.imul(A,nt)|0)+Math.imul(S,rt)|0,i=i+Math.imul(S,nt)|0,n=n+Math.imul(k,it)|0,a=(a=a+Math.imul(k,ot)|0)+Math.imul(T,it)|0,i=i+Math.imul(T,ot)|0,n=n+Math.imul(b,lt)|0,a=(a=a+Math.imul(b,ct)|0)+Math.imul(_,lt)|0,i=i+Math.imul(_,ct)|0,n=n+Math.imul(m,ht)|0,a=(a=a+Math.imul(m,ft)|0)+Math.imul(y,ht)|0,i=i+Math.imul(y,ft)|0;var At=(c+(n=n+Math.imul(d,dt)|0)|0)+((8191&(a=(a=a+Math.imul(d,gt)|0)+Math.imul(g,dt)|0))<<13)|0;c=((i=i+Math.imul(g,gt)|0)+(a>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(B,W),a=(a=Math.imul(B,X))+Math.imul(N,W)|0,i=Math.imul(N,X),n=n+Math.imul(D,J)|0,a=(a=a+Math.imul(D,K)|0)+Math.imul(R,J)|0,i=i+Math.imul(R,K)|0,n=n+Math.imul(O,$)|0,a=(a=a+Math.imul(O,tt)|0)+Math.imul(z,$)|0,i=i+Math.imul(z,tt)|0,n=n+Math.imul(L,rt)|0,a=(a=a+Math.imul(L,nt)|0)+Math.imul(C,rt)|0,i=i+Math.imul(C,nt)|0,n=n+Math.imul(A,it)|0,a=(a=a+Math.imul(A,ot)|0)+Math.imul(S,it)|0,i=i+Math.imul(S,ot)|0,n=n+Math.imul(k,lt)|0,a=(a=a+Math.imul(k,ct)|0)+Math.imul(T,lt)|0,i=i+Math.imul(T,ct)|0,n=n+Math.imul(b,ht)|0,a=(a=a+Math.imul(b,ft)|0)+Math.imul(_,ht)|0,i=i+Math.imul(_,ft)|0;var St=(c+(n=n+Math.imul(m,dt)|0)|0)+((8191&(a=(a=a+Math.imul(m,gt)|0)+Math.imul(y,dt)|0))<<13)|0;c=((i=i+Math.imul(y,gt)|0)+(a>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(B,J),a=(a=Math.imul(B,K))+Math.imul(N,J)|0,i=Math.imul(N,K),n=n+Math.imul(D,$)|0,a=(a=a+Math.imul(D,tt)|0)+Math.imul(R,$)|0,i=i+Math.imul(R,tt)|0,n=n+Math.imul(O,rt)|0,a=(a=a+Math.imul(O,nt)|0)+Math.imul(z,rt)|0,i=i+Math.imul(z,nt)|0,n=n+Math.imul(L,it)|0,a=(a=a+Math.imul(L,ot)|0)+Math.imul(C,it)|0,i=i+Math.imul(C,ot)|0,n=n+Math.imul(A,lt)|0,a=(a=a+Math.imul(A,ct)|0)+Math.imul(S,lt)|0,i=i+Math.imul(S,ct)|0,n=n+Math.imul(k,ht)|0,a=(a=a+Math.imul(k,ft)|0)+Math.imul(T,ht)|0,i=i+Math.imul(T,ft)|0;var Et=(c+(n=n+Math.imul(b,dt)|0)|0)+((8191&(a=(a=a+Math.imul(b,gt)|0)+Math.imul(_,dt)|0))<<13)|0;c=((i=i+Math.imul(_,gt)|0)+(a>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(B,$),a=(a=Math.imul(B,tt))+Math.imul(N,$)|0,i=Math.imul(N,tt),n=n+Math.imul(D,rt)|0,a=(a=a+Math.imul(D,nt)|0)+Math.imul(R,rt)|0,i=i+Math.imul(R,nt)|0,n=n+Math.imul(O,it)|0,a=(a=a+Math.imul(O,ot)|0)+Math.imul(z,it)|0,i=i+Math.imul(z,ot)|0,n=n+Math.imul(L,lt)|0,a=(a=a+Math.imul(L,ct)|0)+Math.imul(C,lt)|0,i=i+Math.imul(C,ct)|0,n=n+Math.imul(A,ht)|0,a=(a=a+Math.imul(A,ft)|0)+Math.imul(S,ht)|0,i=i+Math.imul(S,ft)|0;var Lt=(c+(n=n+Math.imul(k,dt)|0)|0)+((8191&(a=(a=a+Math.imul(k,gt)|0)+Math.imul(T,dt)|0))<<13)|0;c=((i=i+Math.imul(T,gt)|0)+(a>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(B,rt),a=(a=Math.imul(B,nt))+Math.imul(N,rt)|0,i=Math.imul(N,nt),n=n+Math.imul(D,it)|0,a=(a=a+Math.imul(D,ot)|0)+Math.imul(R,it)|0,i=i+Math.imul(R,ot)|0,n=n+Math.imul(O,lt)|0,a=(a=a+Math.imul(O,ct)|0)+Math.imul(z,lt)|0,i=i+Math.imul(z,ct)|0,n=n+Math.imul(L,ht)|0,a=(a=a+Math.imul(L,ft)|0)+Math.imul(C,ht)|0,i=i+Math.imul(C,ft)|0;var Ct=(c+(n=n+Math.imul(A,dt)|0)|0)+((8191&(a=(a=a+Math.imul(A,gt)|0)+Math.imul(S,dt)|0))<<13)|0;c=((i=i+Math.imul(S,gt)|0)+(a>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,n=Math.imul(B,it),a=(a=Math.imul(B,ot))+Math.imul(N,it)|0,i=Math.imul(N,ot),n=n+Math.imul(D,lt)|0,a=(a=a+Math.imul(D,ct)|0)+Math.imul(R,lt)|0,i=i+Math.imul(R,ct)|0,n=n+Math.imul(O,ht)|0,a=(a=a+Math.imul(O,ft)|0)+Math.imul(z,ht)|0,i=i+Math.imul(z,ft)|0;var Pt=(c+(n=n+Math.imul(L,dt)|0)|0)+((8191&(a=(a=a+Math.imul(L,gt)|0)+Math.imul(C,dt)|0))<<13)|0;c=((i=i+Math.imul(C,gt)|0)+(a>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(B,lt),a=(a=Math.imul(B,ct))+Math.imul(N,lt)|0,i=Math.imul(N,ct),n=n+Math.imul(D,ht)|0,a=(a=a+Math.imul(D,ft)|0)+Math.imul(R,ht)|0,i=i+Math.imul(R,ft)|0;var Ot=(c+(n=n+Math.imul(O,dt)|0)|0)+((8191&(a=(a=a+Math.imul(O,gt)|0)+Math.imul(z,dt)|0))<<13)|0;c=((i=i+Math.imul(z,gt)|0)+(a>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(B,ht),a=(a=Math.imul(B,ft))+Math.imul(N,ht)|0,i=Math.imul(N,ft);var zt=(c+(n=n+Math.imul(D,dt)|0)|0)+((8191&(a=(a=a+Math.imul(D,gt)|0)+Math.imul(R,dt)|0))<<13)|0;c=((i=i+Math.imul(R,gt)|0)+(a>>>13)|0)+(zt>>>26)|0,zt&=67108863;var It=(c+(n=Math.imul(B,dt))|0)+((8191&(a=(a=Math.imul(B,gt))+Math.imul(N,dt)|0))<<13)|0;return c=((i=Math.imul(N,gt))+(a>>>13)|0)+(It>>>26)|0,It&=67108863,l[0]=vt,l[1]=mt,l[2]=yt,l[3]=xt,l[4]=bt,l[5]=_t,l[6]=wt,l[7]=kt,l[8]=Tt,l[9]=Mt,l[10]=At,l[11]=St,l[12]=Et,l[13]=Lt,l[14]=Ct,l[15]=Pt,l[16]=Ot,l[17]=zt,l[18]=It,0!==c&&(l[19]=c,r.length++),r};function d(t,e,r){return(new g).mulp(t,e,r)}function g(t,e){this.x=t,this.y=e}Math.imul||(p=f),i.prototype.mulTo=function(t,e){var r=this.length+t.length;return 10===this.length&&10===t.length?p(this,t,e):r<63?f(this,t,e):r<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,a=0,i=0;i<r.length-1;i++){var o=a;a=0;for(var s=67108863&n,l=Math.min(i,e.length-1),c=Math.max(0,i-t.length+1);c<=l;c++){var u=i-c,h=(0|t.words[u])*(0|e.words[c]),f=67108863&h;s=67108863&(f=f+s|0),a+=(o=(o=o+(h/67108864|0)|0)+(f>>>26)|0)>>>26,o&=67108863}r.words[i]=s,n=o,o=a}return 0!==n?r.words[i]=n:r.length--,r.strip()}(this,t,e):d(this,t,e)},g.prototype.makeRBT=function(t){for(var e=new Array(t),r=i.prototype._countBits(t)-1,n=0;n<t;n++)e[n]=this.revBin(n,r,t);return e},g.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var n=0,a=0;a<e;a++)n|=(1&t)<<e-a-1,t>>=1;return n},g.prototype.permute=function(t,e,r,n,a,i){for(var o=0;o<i;o++)n[o]=e[t[o]],a[o]=r[t[o]]},g.prototype.transform=function(t,e,r,n,a,i){this.permute(i,t,e,r,n,a);for(var o=1;o<a;o<<=1)for(var s=o<<1,l=Math.cos(2*Math.PI/s),c=Math.sin(2*Math.PI/s),u=0;u<a;u+=s)for(var h=l,f=c,p=0;p<o;p++){var d=r[u+p],g=n[u+p],v=r[u+p+o],m=n[u+p+o],y=h*v-f*m;m=h*m+f*v,v=y,r[u+p]=d+v,n[u+p]=g+m,r[u+p+o]=d-v,n[u+p+o]=g-m,p!==s&&(y=l*h-c*f,f=l*f+c*h,h=y)}},g.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),n=1&r,a=0;for(r=r/2|0;r;r>>>=1)a++;return 1<<a+1+n},g.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var n=0;n<r/2;n++){var a=t[n];t[n]=t[r-n-1],t[r-n-1]=a,a=e[n],e[n]=-e[r-n-1],e[r-n-1]=-a}},g.prototype.normalize13b=function(t,e){for(var r=0,n=0;n<e/2;n++){var a=8192*Math.round(t[2*n+1]/e)+Math.round(t[2*n]/e)+r;t[n]=67108863&a,r=a<67108864?0:a/67108864|0}return t},g.prototype.convert13b=function(t,e,r,a){for(var i=0,o=0;o<e;o++)i+=0|t[o],r[2*o]=8191&i,i>>>=13,r[2*o+1]=8191&i,i>>>=13;for(o=2*e;o<a;++o)r[o]=0;n(0===i),n(0==(-8192&i))},g.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},g.prototype.mulp=function(t,e,r){var n=2*this.guessLen13b(t.length,e.length),a=this.makeRBT(n),i=this.stub(n),o=new Array(n),s=new Array(n),l=new Array(n),c=new Array(n),u=new Array(n),h=new Array(n),f=r.words;f.length=n,this.convert13b(t.words,t.length,o,n),this.convert13b(e.words,e.length,c,n),this.transform(o,i,s,l,n,a),this.transform(c,i,u,h,n,a);for(var p=0;p<n;p++){var d=s[p]*u[p]-l[p]*h[p];l[p]=s[p]*h[p]+l[p]*u[p],s[p]=d}return this.conjugate(s,l,n),this.transform(s,l,f,i,n,a),this.conjugate(f,i,n),this.normalize13b(f,n),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},i.prototype.mul=function(t){var e=new i(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},i.prototype.mulf=function(t){var e=new i(null);return e.words=new Array(this.length+t.length),d(this,t,e)},i.prototype.imul=function(t){return this.clone().mulTo(t,this)},i.prototype.imuln=function(t){n("number"==typeof t),n(t<67108864);for(var e=0,r=0;r<this.length;r++){var a=(0|this.words[r])*t,i=(67108863&a)+(67108863&e);e>>=26,e+=a/67108864|0,e+=i>>>26,this.words[r]=67108863&i}return 0!==e&&(this.words[r]=e,this.length++),this},i.prototype.muln=function(t){return this.clone().imuln(t)},i.prototype.sqr=function(){return this.mul(this)},i.prototype.isqr=function(){return this.imul(this.clone())},i.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var n=r/26|0,a=r%26;e[r]=(t.words[n]&1<<a)>>>a}return e}(t);if(0===e.length)return new i(1);for(var r=this,n=0;n<e.length&&0===e[n];n++,r=r.sqr());if(++n<e.length)for(var a=r.sqr();n<e.length;n++,a=a.sqr())0!==e[n]&&(r=r.mul(a));return r},i.prototype.iushln=function(t){n("number"==typeof t&&t>=0);var e,r=t%26,a=(t-r)/26,i=67108863>>>26-r<<26-r;if(0!==r){var o=0;for(e=0;e<this.length;e++){var s=this.words[e]&i,l=(0|this.words[e])-s<<r;this.words[e]=l|o,o=s>>>26-r}o&&(this.words[e]=o,this.length++)}if(0!==a){for(e=this.length-1;e>=0;e--)this.words[e+a]=this.words[e];for(e=0;e<a;e++)this.words[e]=0;this.length+=a}return this.strip()},i.prototype.ishln=function(t){return n(0===this.negative),this.iushln(t)},i.prototype.iushrn=function(t,e,r){var a;n("number"==typeof t&&t>=0),a=e?(e-e%26)/26:0;var i=t%26,o=Math.min((t-i)/26,this.length),s=67108863^67108863>>>i<<i,l=r;if(a-=o,a=Math.max(0,a),l){for(var c=0;c<o;c++)l.words[c]=this.words[c];l.length=o}if(0===o);else if(this.length>o)for(this.length-=o,c=0;c<this.length;c++)this.words[c]=this.words[c+o];else this.words[0]=0,this.length=1;var u=0;for(c=this.length-1;c>=0&&(0!==u||c>=a);c--){var h=0|this.words[c];this.words[c]=u<<26-i|h>>>i,u=h&s}return l&&0!==u&&(l.words[l.length++]=u),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},i.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},i.prototype.shln=function(t){return this.clone().ishln(t)},i.prototype.ushln=function(t){return this.clone().iushln(t)},i.prototype.shrn=function(t){return this.clone().ishrn(t)},i.prototype.ushrn=function(t){return this.clone().iushrn(t)},i.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,a=1<<e;return!(this.length<=r)&&!!(this.words[r]&a)},i.prototype.imaskn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var a=67108863^67108863>>>e<<e;this.words[this.length-1]&=a}return this.strip()},i.prototype.maskn=function(t){return this.clone().imaskn(t)},i.prototype.iaddn=function(t){return n("number"==typeof t),n(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},i.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},i.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},i.prototype.addn=function(t){return this.clone().iaddn(t)},i.prototype.subn=function(t){return this.clone().isubn(t)},i.prototype.iabs=function(){return this.negative=0,this},i.prototype.abs=function(){return this.clone().iabs()},i.prototype._ishlnsubmul=function(t,e,r){var a,i,o=t.length+r;this._expand(o);var s=0;for(a=0;a<t.length;a++){i=(0|this.words[a+r])+s;var l=(0|t.words[a])*e;s=((i-=67108863&l)>>26)-(l/67108864|0),this.words[a+r]=67108863&i}for(;a<this.length-r;a++)s=(i=(0|this.words[a+r])+s)>>26,this.words[a+r]=67108863&i;if(0===s)return this.strip();for(n(-1===s),s=0,a=0;a<this.length;a++)s=(i=-(0|this.words[a])+s)>>26,this.words[a]=67108863&i;return this.negative=1,this.strip()},i.prototype._wordDiv=function(t,e){var r=(this.length,t.length),n=this.clone(),a=t,o=0|a.words[a.length-1];0!==(r=26-this._countBits(o))&&(a=a.ushln(r),n.iushln(r),o=0|a.words[a.length-1]);var s,l=n.length-a.length;if("mod"!==e){(s=new i(null)).length=l+1,s.words=new Array(s.length);for(var c=0;c<s.length;c++)s.words[c]=0}var u=n.clone()._ishlnsubmul(a,1,l);0===u.negative&&(n=u,s&&(s.words[l]=1));for(var h=l-1;h>=0;h--){var f=67108864*(0|n.words[a.length+h])+(0|n.words[a.length+h-1]);for(f=Math.min(f/o|0,67108863),n._ishlnsubmul(a,f,h);0!==n.negative;)f--,n.negative=0,n._ishlnsubmul(a,1,h),n.isZero()||(n.negative^=1);s&&(s.words[h]=f)}return s&&s.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},i.prototype.divmod=function(t,e,r){return n(!t.isZero()),this.isZero()?{div:new i(0),mod:new i(0)}:0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,e),"mod"!==e&&(a=s.div.neg()),"div"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.iadd(t)),{div:a,mod:o}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),e),"mod"!==e&&(a=s.div.neg()),{div:a,mod:s.mod}):0!=(this.negative&t.negative)?(s=this.neg().divmod(t.neg(),e),"div"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.isub(t)),{div:s.div,mod:o}):t.length>this.length||this.cmp(t)<0?{div:new i(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new i(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new i(this.modn(t.words[0]))}:this._wordDiv(t,e);var a,o,s},i.prototype.div=function(t){return this.divmod(t,"div",!1).div},i.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},i.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},i.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),a=t.andln(1),i=r.cmp(n);return i<0||1===a&&0===i?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},i.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,a=this.length-1;a>=0;a--)r=(e*r+(0|this.words[a]))%t;return r},i.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var a=(0|this.words[r])+67108864*e;this.words[r]=a/t|0,e=a%t}return this.strip()},i.prototype.divn=function(t){return this.clone().idivn(t)},i.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var a=new i(1),o=new i(0),s=new i(0),l=new i(1),c=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++c;for(var u=r.clone(),h=e.clone();!e.isZero();){for(var f=0,p=1;0==(e.words[0]&p)&&f<26;++f,p<<=1);if(f>0)for(e.iushrn(f);f-- >0;)(a.isOdd()||o.isOdd())&&(a.iadd(u),o.isub(h)),a.iushrn(1),o.iushrn(1);for(var d=0,g=1;0==(r.words[0]&g)&&d<26;++d,g<<=1);if(d>0)for(r.iushrn(d);d-- >0;)(s.isOdd()||l.isOdd())&&(s.iadd(u),l.isub(h)),s.iushrn(1),l.iushrn(1);e.cmp(r)>=0?(e.isub(r),a.isub(s),o.isub(l)):(r.isub(e),s.isub(a),l.isub(o))}return{a:s,b:l,gcd:r.iushln(c)}},i.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var a,o=new i(1),s=new i(0),l=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var c=0,u=1;0==(e.words[0]&u)&&c<26;++c,u<<=1);if(c>0)for(e.iushrn(c);c-- >0;)o.isOdd()&&o.iadd(l),o.iushrn(1);for(var h=0,f=1;0==(r.words[0]&f)&&h<26;++h,f<<=1);if(h>0)for(r.iushrn(h);h-- >0;)s.isOdd()&&s.iadd(l),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),o.isub(s)):(r.isub(e),s.isub(o))}return(a=0===e.cmpn(1)?o:s).cmpn(0)<0&&a.iadd(t),a},i.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var a=e.cmp(r);if(a<0){var i=e;e=r,r=i}else if(0===a||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},i.prototype.invm=function(t){return this.egcd(t).a.umod(t)},i.prototype.isEven=function(){return 0==(1&this.words[0])},i.prototype.isOdd=function(){return 1==(1&this.words[0])},i.prototype.andln=function(t){return this.words[0]&t},i.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,a=1<<e;if(this.length<=r)return this._expand(r+1),this.words[r]|=a,this;for(var i=a,o=r;0!==i&&o<this.length;o++){var s=0|this.words[o];i=(s+=i)>>>26,s&=67108863,this.words[o]=s}return 0!==i&&(this.words[o]=i,this.length++),this},i.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},i.prototype.cmpn=function(t){var e,r=t<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)e=1;else{r&&(t=-t),n(t<=67108863,"Number is too big");var a=0|this.words[0];e=a===t?0:a<t?-1:1}return 0!==this.negative?0|-e:e},i.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},i.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],a=0|t.words[r];if(n!==a){n<a?e=-1:n>a&&(e=1);break}}return e},i.prototype.gtn=function(t){return 1===this.cmpn(t)},i.prototype.gt=function(t){return 1===this.cmp(t)},i.prototype.gten=function(t){return this.cmpn(t)>=0},i.prototype.gte=function(t){return this.cmp(t)>=0},i.prototype.ltn=function(t){return-1===this.cmpn(t)},i.prototype.lt=function(t){return-1===this.cmp(t)},i.prototype.lten=function(t){return this.cmpn(t)<=0},i.prototype.lte=function(t){return this.cmp(t)<=0},i.prototype.eqn=function(t){return 0===this.cmpn(t)},i.prototype.eq=function(t){return 0===this.cmp(t)},i.red=function(t){return new w(t)},i.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},i.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},i.prototype._forceRed=function(t){return this.red=t,this},i.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},i.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},i.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},i.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},i.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},i.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},i.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},i.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},i.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},i.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},i.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},i.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},i.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},i.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var v={k256:null,p224:null,p192:null,p25519:null};function m(t,e){this.name=t,this.p=new i(e,16),this.n=this.p.bitLength(),this.k=new i(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function y(){m.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function x(){m.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function b(){m.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function _(){m.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function w(t){if("string"==typeof t){var e=i._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function k(t){w.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new i(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}m.prototype._tmp=function(){var t=new i(null);return t.words=new Array(Math.ceil(this.n/13)),t},m.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var n=e<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):r.strip(),r},m.prototype.split=function(t,e){t.iushrn(this.n,0,e)},m.prototype.imulK=function(t){return t.imul(this.k)},a(y,m),y.prototype.split=function(t,e){for(var r=Math.min(t.length,9),n=0;n<r;n++)e.words[n]=t.words[n];if(e.length=r,t.length<=9)return t.words[0]=0,void(t.length=1);var a=t.words[9];for(e.words[e.length++]=4194303&a,n=10;n<t.length;n++){var i=0|t.words[n];t.words[n-10]=(4194303&i)<<4|a>>>22,a=i}a>>>=22,t.words[n-10]=a,0===a&&t.length>10?t.length-=10:t.length-=9},y.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var n=0|t.words[r];e+=977*n,t.words[r]=67108863&e,e=64*n+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},a(x,m),a(b,m),a(_,m),_.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var n=19*(0|t.words[r])+e,a=67108863&n;n>>>=26,t.words[r]=a,e=n}return 0!==e&&(t.words[t.length++]=e),t},i._prime=function(t){if(v[t])return v[t];var e;if("k256"===t)e=new y;else if("p224"===t)e=new x;else if("p192"===t)e=new b;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new _}return v[t]=e,e},w.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},w.prototype._verify2=function(t,e){n(0==(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},w.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},w.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},w.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},w.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},w.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},w.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},w.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},w.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},w.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},w.prototype.isqr=function(t){return this.imul(t,t.clone())},w.prototype.sqr=function(t){return this.mul(t,t)},w.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2==1),3===e){var r=this.m.add(new i(1)).iushrn(2);return this.pow(t,r)}for(var a=this.m.subn(1),o=0;!a.isZero()&&0===a.andln(1);)o++,a.iushrn(1);n(!a.isZero());var s=new i(1).toRed(this),l=s.redNeg(),c=this.m.subn(1).iushrn(1),u=this.m.bitLength();for(u=new i(2*u*u).toRed(this);0!==this.pow(u,c).cmp(l);)u.redIAdd(l);for(var h=this.pow(u,a),f=this.pow(t,a.addn(1).iushrn(1)),p=this.pow(t,a),d=o;0!==p.cmp(s);){for(var g=p,v=0;0!==g.cmp(s);v++)g=g.redSqr();n(v<d);var m=this.pow(h,new i(1).iushln(d-v-1));f=f.redMul(m),h=m.redSqr(),p=p.redMul(h),d=v}return f},w.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},w.prototype.pow=function(t,e){if(e.isZero())return new i(1).toRed(this);if(0===e.cmpn(1))return t.clone();var r=new Array(16);r[0]=new i(1).toRed(this),r[1]=t;for(var n=2;n<r.length;n++)r[n]=this.mul(r[n-1],t);var a=r[0],o=0,s=0,l=e.bitLength()%26;for(0===l&&(l=26),n=e.length-1;n>=0;n--){for(var c=e.words[n],u=l-1;u>=0;u--){var h=c>>u&1;a!==r[0]&&(a=this.sqr(a)),0!==h||0!==o?(o<<=1,o|=h,(4===++s||0===n&&0===u)&&(a=this.mul(a,r[o]),s=0,o=0)):s=0}l=26}return a},w.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},w.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},i.mont=function(t){return new k(t)},a(k,w),k.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},k.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},k.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a=r.isub(n).iushrn(this.shift),i=a;return a.cmp(this.m)>=0?i=a.isub(this.m):a.cmpn(0)<0&&(i=a.iadd(this.m)),i._forceRed(this)},k.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new i(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a=r.isub(n).iushrn(this.shift),o=a;return a.cmp(this.m)>=0?o=a.isub(this.m):a.cmpn(0)<0&&(o=a.iadd(this.m)),o._forceRed(this)},k.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}("undefined"==typeof e||e,this)},{buffer:105}],97:[function(t,e,r){"use strict";e.exports=function(t){var e,r,n,a=t.length,i=0;for(e=0;e<a;++e)i+=t[e].length;var o=new Array(i),s=0;for(e=0;e<a;++e){var l=t[e],c=l.length;for(r=0;r<c;++r){var u=o[s++]=new Array(c-1),h=0;for(n=0;n<c;++n)n!==r&&(u[h++]=l[n]);if(1&r){var f=u[1];u[1]=u[0],u[0]=f}}}return o}},{}],98:[function(t,e,r){"use strict";e.exports=function(t,e,r){switch(arguments.length){case 1:return n=[],c(a=t,a,u,!0),n;case 2:return"function"==typeof e?c(t,t,e,!0):function(t,e){return n=[],c(t,e,u,!1),n}(t,e);case 3:return c(t,e,r,!1);default:throw new Error("box-intersect: Invalid arguments")}var a};var n,a=t("typedarray-pool"),i=t("./lib/sweep"),o=t("./lib/intersect");function s(t,e){for(var r=0;r<t;++r)if(!(e[r]<=e[r+t]))return!0;return!1}function l(t,e,r,n){for(var a=0,i=0,o=0,l=t.length;o<l;++o){var c=t[o];if(!s(e,c)){for(var u=0;u<2*e;++u)r[a++]=c[u];n[i++]=o}}return i}function c(t,e,r,n){var s=t.length,c=e.length;if(!(s<=0||c<=0)){var u=t[0].length>>>1;if(!(u<=0)){var h,f=a.mallocDouble(2*u*s),p=a.mallocInt32(s);if((s=l(t,u,f,p))>0){if(1===u&&n)i.init(s),h=i.sweepComplete(u,r,0,s,f,p,0,s,f,p);else{var d=a.mallocDouble(2*u*c),g=a.mallocInt32(c);(c=l(e,u,d,g))>0&&(i.init(s+c),h=1===u?i.sweepBipartite(u,r,0,s,f,p,0,c,d,g):o(u,r,n,s,f,p,c,d,g),a.free(d),a.free(g))}a.free(f),a.free(p)}return h}}}function u(t,e){n.push([t,e])}},{"./lib/intersect":100,"./lib/sweep":104,"typedarray-pool":543}],99:[function(t,e,r){"use strict";var n="d",a="ax",i="vv",o="fp",s="es",l="rs",c="re",u="rb",h="ri",f="rp",p="bs",d="be",g="bb",v="bi",m="bp",y="rv",x="Q",b=[n,a,i,l,c,u,h,p,d,g,v];function _(t){var e="bruteForce"+(t?"Full":"Partial"),r=[],_=b.slice();t||_.splice(3,0,o);var w=["function "+e+"("+_.join()+"){"];function k(e,o){var _=function(t,e,r){var o="bruteForce"+(t?"Red":"Blue")+(e?"Flip":"")+(r?"Full":""),_=["function ",o,"(",b.join(),"){","var ",s,"=2*",n,";"],w="for(var i="+l+","+f+"="+s+"*"+l+";i<"+c+";++i,"+f+"+="+s+"){var x0="+u+"["+a+"+"+f+"],x1="+u+"["+a+"+"+f+"+"+n+"],xi="+h+"[i];",k="for(var j="+p+","+m+"="+s+"*"+p+";j<"+d+";++j,"+m+"+="+s+"){var y0="+g+"["+a+"+"+m+"],"+(r?"y1="+g+"["+a+"+"+m+"+"+n+"],":"")+"yi="+v+"[j];";return t?_.push(w,x,":",k):_.push(k,x,":",w),r?_.push("if(y1<x0||x1<y0)continue;"):e?_.push("if(y0<=x0||x1<y0)continue;"):_.push("if(y0<x0||x1<y0)continue;"),_.push("for(var k="+a+"+1;k<"+n+";++k){var r0="+u+"[k+"+f+"],r1="+u+"[k+"+n+"+"+f+"],b0="+g+"[k+"+m+"],b1="+g+"[k+"+n+"+"+m+"];if(r1<b0||b1<r0)continue "+x+";}var "+y+"="+i+"("),e?_.push("yi,xi"):_.push("xi,yi"),_.push(");if("+y+"!==void 0)return "+y+";}}}"),{name:o,code:_.join("")}}(e,o,t);r.push(_.code),w.push("return "+_.name+"("+b.join()+");")}w.push("if("+c+"-"+l+">"+d+"-"+p+"){"),t?(k(!0,!1),w.push("}else{"),k(!1,!1)):(w.push("if("+o+"){"),k(!0,!0),w.push("}else{"),k(!0,!1),w.push("}}else{if("+o+"){"),k(!1,!0),w.push("}else{"),k(!1,!1),w.push("}")),w.push("}}return "+e);var T=r.join("")+w.join("");return new Function(T)()}r.partial=_(!1),r.full=_(!0)},{}],100:[function(t,e,r){"use strict";e.exports=function(t,e,r,i,u,S,E,L,C){!function(t,e){var r=8*a.log2(e+1)*(t+1)|0,i=a.nextPow2(b*r);w.length<i&&(n.free(w),w=n.mallocInt32(i));var o=a.nextPow2(_*r);k<o&&(n.free(k),k=n.mallocDouble(o))}(t,i+E);var P,O=0,z=2*t;T(O++,0,0,i,0,E,r?16:0,-1/0,1/0),r||T(O++,0,0,E,0,i,1,-1/0,1/0);for(;O>0;){var I=(O-=1)*b,D=w[I],R=w[I+1],F=w[I+2],B=w[I+3],N=w[I+4],j=w[I+5],V=O*_,U=k[V],q=k[V+1],H=1&j,G=!!(16&j),Y=u,W=S,X=L,Z=C;if(H&&(Y=L,W=C,X=u,Z=S),!(2&j&&(F=v(t,D,R,F,Y,W,q),R>=F)||4&j&&(R=m(t,D,R,F,Y,W,U))>=F)){var J=F-R,K=N-B;if(G){if(t*J*(J+K)<p){if(void 0!==(P=l.scanComplete(t,D,e,R,F,Y,W,B,N,X,Z)))return P;continue}}else{if(t*Math.min(J,K)<h){if(void 0!==(P=o(t,D,e,H,R,F,Y,W,B,N,X,Z)))return P;continue}if(t*J*K<f){if(void 0!==(P=l.scanBipartite(t,D,e,H,R,F,Y,W,B,N,X,Z)))return P;continue}}var Q=d(t,D,R,F,Y,W,U,q);if(R<Q)if(t*(Q-R)<h){if(void 0!==(P=s(t,D+1,e,R,Q,Y,W,B,N,X,Z)))return P}else if(D===t-2){if(void 0!==(P=H?l.sweepBipartite(t,e,B,N,X,Z,R,Q,Y,W):l.sweepBipartite(t,e,R,Q,Y,W,B,N,X,Z)))return P}else T(O++,D+1,R,Q,B,N,H,-1/0,1/0),T(O++,D+1,B,N,R,Q,1^H,-1/0,1/0);if(Q<F){var $=c(t,D,B,N,X,Z),tt=X[z*$+D],et=g(t,D,$,N,X,Z,tt);if(et<N&&T(O++,D,Q,F,et,N,(4|H)+(G?16:0),tt,q),B<$&&T(O++,D,Q,F,B,$,(2|H)+(G?16:0),U,tt),$+1===et){if(void 0!==(P=G?A(t,D,e,Q,F,Y,W,$,X,Z[$]):M(t,D,e,H,Q,F,Y,W,$,X,Z[$])))return P}else if($<et){var rt;if(G){if(rt=y(t,D,Q,F,Y,W,tt),Q<rt){var nt=g(t,D,Q,rt,Y,W,tt);if(D===t-2){if(Q<nt&&void 0!==(P=l.sweepComplete(t,e,Q,nt,Y,W,$,et,X,Z)))return P;if(nt<rt&&void 0!==(P=l.sweepBipartite(t,e,nt,rt,Y,W,$,et,X,Z)))return P}else Q<nt&&T(O++,D+1,Q,nt,$,et,16,-1/0,1/0),nt<rt&&(T(O++,D+1,nt,rt,$,et,0,-1/0,1/0),T(O++,D+1,$,et,nt,rt,1,-1/0,1/0))}}else rt=H?x(t,D,Q,F,Y,W,tt):y(t,D,Q,F,Y,W,tt),Q<rt&&(D===t-2?P=H?l.sweepBipartite(t,e,$,et,X,Z,Q,rt,Y,W):l.sweepBipartite(t,e,Q,rt,Y,W,$,et,X,Z):(T(O++,D+1,Q,rt,$,et,H,-1/0,1/0),T(O++,D+1,$,et,Q,rt,1^H,-1/0,1/0)))}}}}};var n=t("typedarray-pool"),a=t("bit-twiddle"),i=t("./brute"),o=i.partial,s=i.full,l=t("./sweep"),c=t("./median"),u=t("./partition"),h=128,f=1<<22,p=1<<22,d=u("!(lo>=p0)&&!(p1>=hi)",["p0","p1"]),g=u("lo===p0",["p0"]),v=u("lo<p0",["p0"]),m=u("hi<=p0",["p0"]),y=u("lo<=p0&&p0<=hi",["p0"]),x=u("lo<p0&&p0<=hi",["p0"]),b=6,_=2,w=n.mallocInt32(1024),k=n.mallocDouble(1024);function T(t,e,r,n,a,i,o,s,l){var c=b*t;w[c]=e,w[c+1]=r,w[c+2]=n,w[c+3]=a,w[c+4]=i,w[c+5]=o;var u=_*t;k[u]=s,k[u+1]=l}function M(t,e,r,n,a,i,o,s,l,c,u){var h=2*t,f=l*h,p=c[f+e];t:for(var d=a,g=a*h;d<i;++d,g+=h){var v=o[g+e],m=o[g+e+t];if(!(p<v||m<p)&&(!n||p!==v)){for(var y,x=s[d],b=e+1;b<t;++b){v=o[g+b],m=o[g+b+t];var _=c[f+b],w=c[f+b+t];if(m<_||w<v)continue t}if(void 0!==(y=n?r(u,x):r(x,u)))return y}}}function A(t,e,r,n,a,i,o,s,l,c){var u=2*t,h=s*u,f=l[h+e];t:for(var p=n,d=n*u;p<a;++p,d+=u){var g=o[p];if(g!==c){var v=i[d+e],m=i[d+e+t];if(!(f<v||m<f)){for(var y=e+1;y<t;++y){v=i[d+y],m=i[d+y+t];var x=l[h+y],b=l[h+y+t];if(m<x||b<v)continue t}var _=r(g,c);if(void 0!==_)return _}}}}},{"./brute":99,"./median":101,"./partition":102,"./sweep":104,"bit-twiddle":94,"typedarray-pool":543}],101:[function(t,e,r){"use strict";e.exports=function(t,e,r,o,s,l){if(o<=r+1)return r;var c=r,u=o,h=o+r>>>1,f=2*t,p=h,d=s[f*h+e];for(;c<u;){if(u-c<a){i(t,e,c,u,s,l),d=s[f*h+e];break}var g=u-c,v=Math.random()*g+c|0,m=s[f*v+e],y=Math.random()*g+c|0,x=s[f*y+e],b=Math.random()*g+c|0,_=s[f*b+e];m<=x?_>=x?(p=y,d=x):m>=_?(p=v,d=m):(p=b,d=_):x>=_?(p=y,d=x):_>=m?(p=v,d=m):(p=b,d=_);for(var w=f*(u-1),k=f*p,T=0;T<f;++T,++w,++k){var M=s[w];s[w]=s[k],s[k]=M}var A=l[u-1];l[u-1]=l[p],l[p]=A,p=n(t,e,c,u-1,s,l,d);for(var w=f*(u-1),k=f*p,T=0;T<f;++T,++w,++k){var M=s[w];s[w]=s[k],s[k]=M}var A=l[u-1];if(l[u-1]=l[p],l[p]=A,h<p){for(u=p-1;c<u&&s[f*(u-1)+e]===d;)u-=1;u+=1}else{if(!(p<h))break;for(c=p+1;c<u&&s[f*c+e]===d;)c+=1}}return n(t,e,r,h,s,l,s[f*h+e])};var n=t("./partition")("lo<p0",["p0"]),a=8;function i(t,e,r,n,a,i){for(var o=2*t,s=o*(r+1)+e,l=r+1;l<n;++l,s+=o)for(var c=a[s],u=l,h=o*(l-1);u>r&&a[h+e]>c;--u,h-=o){for(var f=h,p=h+o,d=0;d<o;++d,++f,++p){var g=a[f];a[f]=a[p],a[p]=g}var v=i[u];i[u]=i[u-1],i[u-1]=v}}},{"./partition":102}],102:[function(t,e,r){"use strict";e.exports=function(t,e){var r="abcdef".split("").concat(e),a=[];t.indexOf("lo")>=0&&a.push("lo=e[k+n]");t.indexOf("hi")>=0&&a.push("hi=e[k+o]");return r.push(n.replace("_",a.join()).replace("$",t)),Function.apply(void 0,r)};var n="for(var j=2*a,k=j*c,l=k,m=c,n=b,o=a+b,p=c;d>p;++p,k+=j){var _;if($)if(m===p)m+=1,l+=j;else{for(var s=0;j>s;++s){var t=e[k+s];e[k+s]=e[l],e[l++]=t}var u=f[p];f[p]=f[m],f[m++]=u}}return m"},{}],103:[function(t,e,r){"use strict";e.exports=function(t,e){e<=4*n?a(0,e-1,t):function t(e,r,h){var f=(r-e+1)/6|0,p=e+f,d=r-f,g=e+r>>1,v=g-f,m=g+f,y=p,x=v,b=g,_=m,w=d,k=e+1,T=r-1,M=0;c(y,x,h)&&(M=y,y=x,x=M);c(_,w,h)&&(M=_,_=w,w=M);c(y,b,h)&&(M=y,y=b,b=M);c(x,b,h)&&(M=x,x=b,b=M);c(y,_,h)&&(M=y,y=_,_=M);c(b,_,h)&&(M=b,b=_,_=M);c(x,w,h)&&(M=x,x=w,w=M);c(x,b,h)&&(M=x,x=b,b=M);c(_,w,h)&&(M=_,_=w,w=M);var A=h[2*x];var S=h[2*x+1];var E=h[2*_];var L=h[2*_+1];var C=2*y;var P=2*b;var O=2*w;var z=2*p;var I=2*g;var D=2*d;for(var R=0;R<2;++R){var F=h[C+R],B=h[P+R],N=h[O+R];h[z+R]=F,h[I+R]=B,h[D+R]=N}o(v,e,h);o(m,r,h);for(var j=k;j<=T;++j)if(u(j,A,S,h))j!==k&&i(j,k,h),++k;else if(!u(j,E,L,h))for(;;){if(u(T,E,L,h)){u(T,A,S,h)?(s(j,k,T,h),++k,--T):(i(j,T,h),--T);break}if(--T<j)break}l(e,k-1,A,S,h);l(r,T+1,E,L,h);k-2-e<=n?a(e,k-2,h):t(e,k-2,h);r-(T+2)<=n?a(T+2,r,h):t(T+2,r,h);T-k<=n?a(k,T,h):t(k,T,h)}(0,e-1,t)};var n=32;function a(t,e,r){for(var n=2*(t+1),a=t+1;a<=e;++a){for(var i=r[n++],o=r[n++],s=a,l=n-2;s-- >t;){var c=r[l-2],u=r[l-1];if(c<i)break;if(c===i&&u<o)break;r[l]=c,r[l+1]=u,l-=2}r[l]=i,r[l+1]=o}}function i(t,e,r){e*=2;var n=r[t*=2],a=r[t+1];r[t]=r[e],r[t+1]=r[e+1],r[e]=n,r[e+1]=a}function o(t,e,r){e*=2,r[t*=2]=r[e],r[t+1]=r[e+1]}function s(t,e,r,n){e*=2,r*=2;var a=n[t*=2],i=n[t+1];n[t]=n[e],n[t+1]=n[e+1],n[e]=n[r],n[e+1]=n[r+1],n[r]=a,n[r+1]=i}function l(t,e,r,n,a){e*=2,a[t*=2]=a[e],a[e]=r,a[t+1]=a[e+1],a[e+1]=n}function c(t,e,r){e*=2;var n=r[t*=2],a=r[e];return!(n<a)&&(n!==a||r[t+1]>r[e+1])}function u(t,e,r,n){var a=n[t*=2];return a<e||a===e&&n[t+1]<r}},{}],104:[function(t,e,r){"use strict";e.exports={init:function(t){var e=a.nextPow2(t);s.length<e&&(n.free(s),s=n.mallocInt32(e));l.length<e&&(n.free(l),l=n.mallocInt32(e));c.length<e&&(n.free(c),c=n.mallocInt32(e));u.length<e&&(n.free(u),u=n.mallocInt32(e));h.length<e&&(n.free(h),h=n.mallocInt32(e));f.length<e&&(n.free(f),f=n.mallocInt32(e));var r=8*e;p.length<r&&(n.free(p),p=n.mallocDouble(r))},sweepBipartite:function(t,e,r,n,a,h,f,v,m,y){for(var x=0,b=2*t,_=t-1,w=b-1,k=r;k<n;++k){var T=h[k],M=b*k;p[x++]=a[M+_],p[x++]=-(T+1),p[x++]=a[M+w],p[x++]=T}for(var k=f;k<v;++k){var T=y[k]+o,A=b*k;p[x++]=m[A+_],p[x++]=-T,p[x++]=m[A+w],p[x++]=T}var S=x>>>1;i(p,S);for(var E=0,L=0,k=0;k<S;++k){var C=0|p[2*k+1];if(C>=o)d(c,u,L--,C=C-o|0);else if(C>=0)d(s,l,E--,C);else if(C<=-o){C=-C-o|0;for(var P=0;P<E;++P){var O=e(s[P],C);if(void 0!==O)return O}g(c,u,L++,C)}else{C=-C-1|0;for(var P=0;P<L;++P){var O=e(C,c[P]);if(void 0!==O)return O}g(s,l,E++,C)}}},sweepComplete:function(t,e,r,n,a,o,v,m,y,x){for(var b=0,_=2*t,w=t-1,k=_-1,T=r;T<n;++T){var M=o[T]+1<<1,A=_*T;p[b++]=a[A+w],p[b++]=-M,p[b++]=a[A+k],p[b++]=M}for(var T=v;T<m;++T){var M=x[T]+1<<1,S=_*T;p[b++]=y[S+w],p[b++]=1|-M,p[b++]=y[S+k],p[b++]=1|M}var E=b>>>1;i(p,E);for(var L=0,C=0,P=0,T=0;T<E;++T){var O=0|p[2*T+1],z=1&O;if(T<E-1&&O>>1==p[2*T+3]>>1&&(z=2,T+=1),O<0){for(var I=-(O>>1)-1,D=0;D<P;++D){var R=e(h[D],I);if(void 0!==R)return R}if(0!==z)for(var D=0;D<L;++D){var R=e(s[D],I);if(void 0!==R)return R}if(1!==z)for(var D=0;D<C;++D){var R=e(c[D],I);if(void 0!==R)return R}0===z?g(s,l,L++,I):1===z?g(c,u,C++,I):2===z&&g(h,f,P++,I)}else{var I=(O>>1)-1;0===z?d(s,l,L--,I):1===z?d(c,u,C--,I):2===z&&d(h,f,P--,I)}}},scanBipartite:function(t,e,r,n,a,c,u,h,f,v,m,y){var x=0,b=2*t,_=e,w=e+t,k=1,T=1;n?T=o:k=o;for(var M=a;M<c;++M){var A=M+k,S=b*M;p[x++]=u[S+_],p[x++]=-A,p[x++]=u[S+w],p[x++]=A}for(var M=f;M<v;++M){var A=M+T,E=b*M;p[x++]=m[E+_],p[x++]=-A}var L=x>>>1;i(p,L);for(var C=0,M=0;M<L;++M){var P=0|p[2*M+1];if(P<0){var A=-P,O=!1;if(A>=o?(O=!n,A-=o):(O=!!n,A-=1),O)g(s,l,C++,A);else{var z=y[A],I=b*A,D=m[I+e+1],R=m[I+e+1+t];t:for(var F=0;F<C;++F){var B=s[F],N=b*B;if(!(R<u[N+e+1]||u[N+e+1+t]<D)){for(var j=e+2;j<t;++j)if(m[I+j+t]<u[N+j]||u[N+j+t]<m[I+j])continue t;var V,U=h[B];if(void 0!==(V=n?r(z,U):r(U,z)))return V}}}}else d(s,l,C--,P-k)}},scanComplete:function(t,e,r,n,a,l,c,u,h,f,d){for(var g=0,v=2*t,m=e,y=e+t,x=n;x<a;++x){var b=x+o,_=v*x;p[g++]=l[_+m],p[g++]=-b,p[g++]=l[_+y],p[g++]=b}for(var x=u;x<h;++x){var b=x+1,w=v*x;p[g++]=f[w+m],p[g++]=-b}var k=g>>>1;i(p,k);for(var T=0,x=0;x<k;++x){var M=0|p[2*x+1];if(M<0){var b=-M;if(b>=o)s[T++]=b-o;else{var A=d[b-=1],S=v*b,E=f[S+e+1],L=f[S+e+1+t];t:for(var C=0;C<T;++C){var P=s[C],O=c[P];if(O===A)break;var z=v*P;if(!(L<l[z+e+1]||l[z+e+1+t]<E)){for(var I=e+2;I<t;++I)if(f[S+I+t]<l[z+I]||l[z+I+t]<f[S+I])continue t;var D=r(O,A);if(void 0!==D)return D}}}}else{for(var b=M-o,C=T-1;C>=0;--C)if(s[C]===b){for(var I=C+1;I<T;++I)s[I-1]=s[I];break}--T}}}};var n=t("typedarray-pool"),a=t("bit-twiddle"),i=t("./sort"),o=1<<28,s=n.mallocInt32(1024),l=n.mallocInt32(1024),c=n.mallocInt32(1024),u=n.mallocInt32(1024),h=n.mallocInt32(1024),f=n.mallocInt32(1024),p=n.mallocDouble(8192);function d(t,e,r,n){var a=e[n],i=t[r-1];t[a]=i,e[i]=a}function g(t,e,r,n){t[r]=n,e[n]=r}},{"./sort":103,"bit-twiddle":94,"typedarray-pool":543}],105:[function(t,e,r){},{}],106:[function(t,e,r){var n=Object.create||function(t){var e=function(){};return e.prototype=t,new e},a=Object.keys||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.push(r);return r},i=Function.prototype.bind||function(t){var e=this;return function(){return e.apply(t,arguments)}};function o(){this._events&&Object.prototype.hasOwnProperty.call(this,"_events")||(this._events=n(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0}e.exports=o,o.EventEmitter=o,o.prototype._events=void 0,o.prototype._maxListeners=void 0;var s,l=10;try{var c={};Object.defineProperty&&Object.defineProperty(c,"x",{value:0}),s=0===c.x}catch(t){s=!1}function u(t){return void 0===t._maxListeners?o.defaultMaxListeners:t._maxListeners}function h(t,e,r,a){var i,o,s;if("function"!=typeof r)throw new TypeError('"listener" argument must be a function');if((o=t._events)?(o.newListener&&(t.emit("newListener",e,r.listener?r.listener:r),o=t._events),s=o[e]):(o=t._events=n(null),t._eventsCount=0),s){if("function"==typeof s?s=o[e]=a?[r,s]:[s,r]:a?s.unshift(r):s.push(r),!s.warned&&(i=u(t))&&i>0&&s.length>i){s.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+s.length+' "'+String(e)+'" listeners added. Use emitter.setMaxListeners() to increase limit.');l.name="MaxListenersExceededWarning",l.emitter=t,l.type=e,l.count=s.length,"object"==typeof console&&console.warn&&console.warn("%s: %s",l.name,l.message)}}else s=o[e]=r,++t._eventsCount;return t}function f(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var t=new Array(arguments.length),e=0;e<t.length;++e)t[e]=arguments[e];this.listener.apply(this.target,t)}}function p(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},a=i.call(f,n);return a.listener=r,n.wrapFn=a,a}function d(t,e,r){var n=t._events;if(!n)return[];var a=n[e];return a?"function"==typeof a?r?[a.listener||a]:[a]:r?function(t){for(var e=new Array(t.length),r=0;r<e.length;++r)e[r]=t[r].listener||t[r];return e}(a):v(a,a.length):[]}function g(t){var e=this._events;if(e){var r=e[t];if("function"==typeof r)return 1;if(r)return r.length}return 0}function v(t,e){for(var r=new Array(e),n=0;n<e;++n)r[n]=t[n];return r}s?Object.defineProperty(o,"defaultMaxListeners",{enumerable:!0,get:function(){return l},set:function(t){if("number"!=typeof t||t<0||t!=t)throw new TypeError('"defaultMaxListeners" must be a positive number');l=t}}):o.defaultMaxListeners=l,o.prototype.setMaxListeners=function(t){if("number"!=typeof t||t<0||isNaN(t))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=t,this},o.prototype.getMaxListeners=function(){return u(this)},o.prototype.emit=function(t){var e,r,n,a,i,o,s="error"===t;if(o=this._events)s=s&&null==o.error;else if(!s)return!1;if(s){if(arguments.length>1&&(e=arguments[1]),e instanceof Error)throw e;var l=new Error('Unhandled "error" event. ('+e+")");throw l.context=e,l}if(!(r=o[t]))return!1;var c="function"==typeof r;switch(n=arguments.length){case 1:!function(t,e,r){if(e)t.call(r);else for(var n=t.length,a=v(t,n),i=0;i<n;++i)a[i].call(r)}(r,c,this);break;case 2:!function(t,e,r,n){if(e)t.call(r,n);else for(var a=t.length,i=v(t,a),o=0;o<a;++o)i[o].call(r,n)}(r,c,this,arguments[1]);break;case 3:!function(t,e,r,n,a){if(e)t.call(r,n,a);else for(var i=t.length,o=v(t,i),s=0;s<i;++s)o[s].call(r,n,a)}(r,c,this,arguments[1],arguments[2]);break;case 4:!function(t,e,r,n,a,i){if(e)t.call(r,n,a,i);else for(var o=t.length,s=v(t,o),l=0;l<o;++l)s[l].call(r,n,a,i)}(r,c,this,arguments[1],arguments[2],arguments[3]);break;default:for(a=new Array(n-1),i=1;i<n;i++)a[i-1]=arguments[i];!function(t,e,r,n){if(e)t.apply(r,n);else for(var a=t.length,i=v(t,a),o=0;o<a;++o)i[o].apply(r,n)}(r,c,this,a)}return!0},o.prototype.addListener=function(t,e){return h(this,t,e,!1)},o.prototype.on=o.prototype.addListener,o.prototype.prependListener=function(t,e){return h(this,t,e,!0)},o.prototype.once=function(t,e){if("function"!=typeof e)throw new TypeError('"listener" argument must be a function');return this.on(t,p(this,t,e)),this},o.prototype.prependOnceListener=function(t,e){if("function"!=typeof e)throw new TypeError('"listener" argument must be a function');return this.prependListener(t,p(this,t,e)),this},o.prototype.removeListener=function(t,e){var r,a,i,o,s;if("function"!=typeof e)throw new TypeError('"listener" argument must be a function');if(!(a=this._events))return this;if(!(r=a[t]))return this;if(r===e||r.listener===e)0==--this._eventsCount?this._events=n(null):(delete a[t],a.removeListener&&this.emit("removeListener",t,r.listener||e));else if("function"!=typeof r){for(i=-1,o=r.length-1;o>=0;o--)if(r[o]===e||r[o].listener===e){s=r[o].listener,i=o;break}if(i<0)return this;0===i?r.shift():function(t,e){for(var r=e,n=r+1,a=t.length;n<a;r+=1,n+=1)t[r]=t[n];t.pop()}(r,i),1===r.length&&(a[t]=r[0]),a.removeListener&&this.emit("removeListener",t,s||e)}return this},o.prototype.removeAllListeners=function(t){var e,r,i;if(!(r=this._events))return this;if(!r.removeListener)return 0===arguments.length?(this._events=n(null),this._eventsCount=0):r[t]&&(0==--this._eventsCount?this._events=n(null):delete r[t]),this;if(0===arguments.length){var o,s=a(r);for(i=0;i<s.length;++i)"removeListener"!==(o=s[i])&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=n(null),this._eventsCount=0,this}if("function"==typeof(e=r[t]))this.removeListener(t,e);else if(e)for(i=e.length-1;i>=0;i--)this.removeListener(t,e[i]);return this},o.prototype.listeners=function(t){return d(this,t,!0)},o.prototype.rawListeners=function(t){return d(this,t,!1)},o.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):g.call(t,e)},o.prototype.listenerCount=g,o.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]}},{}],107:[function(t,e,r){(function(e){"use strict";var n=t("base64-js"),a=t("ieee754"),i="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;r.Buffer=e,r.SlowBuffer=function(t){+t!=t&&(t=0);return e.alloc(+t)},r.INSPECT_MAX_BYTES=50;var o=2147483647;function s(t){if(t>o)throw new RangeError('The value "'+t+'" is invalid for option "size"');var r=new Uint8Array(t);return Object.setPrototypeOf(r,e.prototype),r}function e(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return u(t)}return l(t,e,r)}function l(t,r,n){if("string"==typeof t)return function(t,r){"string"==typeof r&&""!==r||(r="utf8");if(!e.isEncoding(r))throw new TypeError("Unknown encoding: "+r);var n=0|p(t,r),a=s(n),i=a.write(t,r);i!==n&&(a=a.slice(0,i));return a}(t,r);if(ArrayBuffer.isView(t))return h(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(j(t,ArrayBuffer)||t&&j(t.buffer,ArrayBuffer))return function(t,r,n){if(r<0||t.byteLength<r)throw new RangeError('"offset" is outside of buffer bounds');if(t.byteLength<r+(n||0))throw new RangeError('"length" is outside of buffer bounds');var a;a=void 0===r&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,r):new Uint8Array(t,r,n);return Object.setPrototypeOf(a,e.prototype),a}(t,r,n);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');var a=t.valueOf&&t.valueOf();if(null!=a&&a!==t)return e.from(a,r,n);var i=function(t){if(e.isBuffer(t)){var r=0|f(t.length),n=s(r);return 0===n.length?n:(t.copy(n,0,0,r),n)}if(void 0!==t.length)return"number"!=typeof t.length||V(t.length)?s(0):h(t);if("Buffer"===t.type&&Array.isArray(t.data))return h(t.data)}(t);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return e.from(t[Symbol.toPrimitive]("string"),r,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function c(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function u(t){return c(t),s(t<0?0:0|f(t))}function h(t){for(var e=t.length<0?0:0|f(t.length),r=s(e),n=0;n<e;n+=1)r[n]=255&t[n];return r}function f(t){if(t>=o)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o.toString(16)+" bytes");return 0|t}function p(t,r){if(e.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||j(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var n=t.length,a=arguments.length>2&&!0===arguments[2];if(!a&&0===n)return 0;for(var i=!1;;)switch(r){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return F(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return B(t).length;default:if(i)return a?-1:F(t).length;r=(""+r).toLowerCase(),i=!0}}function d(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function g(t,r,n,a,i){if(0===t.length)return-1;if("string"==typeof n?(a=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),V(n=+n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof r&&(r=e.from(r,a)),e.isBuffer(r))return 0===r.length?-1:v(t,r,n,a,i);if("number"==typeof r)return r&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,r,n):Uint8Array.prototype.lastIndexOf.call(t,r,n):v(t,[r],n,a,i);throw new TypeError("val must be string, number or Buffer")}function v(t,e,r,n,a){var i,o=1,s=t.length,l=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;o=2,s/=2,l/=2,r/=2}function c(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(a){var u=-1;for(i=r;i<s;i++)if(c(t,i)===c(e,-1===u?0:i-u)){if(-1===u&&(u=i),i-u+1===l)return u*o}else-1!==u&&(i-=i-u),u=-1}else for(r+l>s&&(r=s-l),i=r;i>=0;i--){for(var h=!0,f=0;f<l;f++)if(c(t,i+f)!==c(e,f)){h=!1;break}if(h)return i}return-1}function m(t,e,r,n){r=Number(r)||0;var a=t.length-r;n?(n=Number(n))>a&&(n=a):n=a;var i=e.length;n>i/2&&(n=i/2);for(var o=0;o<n;++o){var s=parseInt(e.substr(2*o,2),16);if(V(s))return o;t[r+o]=s}return o}function y(t,e,r,n){return N(F(e,t.length-r),t,r,n)}function x(t,e,r,n){return N(function(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,n)}function b(t,e,r,n){return x(t,e,r,n)}function _(t,e,r,n){return N(B(e),t,r,n)}function w(t,e,r,n){return N(function(t,e){for(var r,n,a,i=[],o=0;o<t.length&&!((e-=2)<0);++o)r=t.charCodeAt(o),n=r>>8,a=r%256,i.push(a),i.push(n);return i}(e,t.length-r),t,r,n)}function k(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function T(t,e,r){r=Math.min(t.length,r);for(var n=[],a=e;a<r;){var i,o,s,l,c=t[a],u=null,h=c>239?4:c>223?3:c>191?2:1;if(a+h<=r)switch(h){case 1:c<128&&(u=c);break;case 2:128==(192&(i=t[a+1]))&&(l=(31&c)<<6|63&i)>127&&(u=l);break;case 3:i=t[a+1],o=t[a+2],128==(192&i)&&128==(192&o)&&(l=(15&c)<<12|(63&i)<<6|63&o)>2047&&(l<55296||l>57343)&&(u=l);break;case 4:i=t[a+1],o=t[a+2],s=t[a+3],128==(192&i)&&128==(192&o)&&128==(192&s)&&(l=(15&c)<<18|(63&i)<<12|(63&o)<<6|63&s)>65535&&l<1114112&&(u=l)}null===u?(u=65533,h=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),a+=h}return function(t){var e=t.length;if(e<=M)return String.fromCharCode.apply(String,t);var r="",n=0;for(;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=M));return r}(n)}r.kMaxLength=o,e.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}}(),e.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(e.prototype,"parent",{enumerable:!0,get:function(){if(e.isBuffer(this))return this.buffer}}),Object.defineProperty(e.prototype,"offset",{enumerable:!0,get:function(){if(e.isBuffer(this))return this.byteOffset}}),"undefined"!=typeof Symbol&&null!=Symbol.species&&e[Symbol.species]===e&&Object.defineProperty(e,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),e.poolSize=8192,e.from=function(t,e,r){return l(t,e,r)},Object.setPrototypeOf(e.prototype,Uint8Array.prototype),Object.setPrototypeOf(e,Uint8Array),e.alloc=function(t,e,r){return function(t,e,r){return c(t),t<=0?s(t):void 0!==e?"string"==typeof r?s(t).fill(e,r):s(t).fill(e):s(t)}(t,e,r)},e.allocUnsafe=function(t){return u(t)},e.allocUnsafeSlow=function(t){return u(t)},e.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==e.prototype},e.compare=function(t,r){if(j(t,Uint8Array)&&(t=e.from(t,t.offset,t.byteLength)),j(r,Uint8Array)&&(r=e.from(r,r.offset,r.byteLength)),!e.isBuffer(t)||!e.isBuffer(r))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===r)return 0;for(var n=t.length,a=r.length,i=0,o=Math.min(n,a);i<o;++i)if(t[i]!==r[i]){n=t[i],a=r[i];break}return n<a?-1:a<n?1:0},e.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},e.concat=function(t,r){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return e.alloc(0);var n;if(void 0===r)for(r=0,n=0;n<t.length;++n)r+=t[n].length;var a=e.allocUnsafe(r),i=0;for(n=0;n<t.length;++n){var o=t[n];if(j(o,Uint8Array)&&(o=e.from(o)),!e.isBuffer(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(a,i),i+=o.length}return a},e.byteLength=p,e.prototype._isBuffer=!0,e.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)d(this,e,e+1);return this},e.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)d(this,e,e+3),d(this,e+1,e+2);return this},e.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)d(this,e,e+7),d(this,e+1,e+6),d(this,e+2,e+5),d(this,e+3,e+4);return this},e.prototype.toString=function(){var t=this.length;return 0===t?"":0===arguments.length?T(this,0,t):function(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return E(this,e,r);case"utf8":case"utf-8":return T(this,e,r);case"ascii":return A(this,e,r);case"latin1":case"binary":return S(this,e,r);case"base64":return k(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}.apply(this,arguments)},e.prototype.toLocaleString=e.prototype.toString,e.prototype.equals=function(t){if(!e.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===e.compare(this,t)},e.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return t=this.toString("hex",0,e).replace(/(.{2})/g,"$1 ").trim(),this.length>e&&(t+=" ... "),"<Buffer "+t+">"},i&&(e.prototype[i]=e.prototype.inspect),e.prototype.compare=function(t,r,n,a,i){if(j(t,Uint8Array)&&(t=e.from(t,t.offset,t.byteLength)),!e.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===r&&(r=0),void 0===n&&(n=t?t.length:0),void 0===a&&(a=0),void 0===i&&(i=this.length),r<0||n>t.length||a<0||i>this.length)throw new RangeError("out of range index");if(a>=i&&r>=n)return 0;if(a>=i)return-1;if(r>=n)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(a>>>=0),s=(n>>>=0)-(r>>>=0),l=Math.min(o,s),c=this.slice(a,i),u=t.slice(r,n),h=0;h<l;++h)if(c[h]!==u[h]){o=c[h],s=u[h];break}return o<s?-1:s<o?1:0},e.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},e.prototype.indexOf=function(t,e,r){return g(this,t,e,r,!0)},e.prototype.lastIndexOf=function(t,e,r){return g(this,t,e,r,!1)},e.prototype.write=function(t,e,r,n){if(void 0===e)n="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var a=this.length-e;if((void 0===r||r>a)&&(r=a),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i=!1;;)switch(n){case"hex":return m(this,t,e,r);case"utf8":case"utf-8":return y(this,t,e,r);case"ascii":return x(this,t,e,r);case"latin1":case"binary":return b(this,t,e,r);case"base64":return _(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return w(this,t,e,r);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},e.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var M=4096;function A(t,e,r){var n="";r=Math.min(t.length,r);for(var a=e;a<r;++a)n+=String.fromCharCode(127&t[a]);return n}function S(t,e,r){var n="";r=Math.min(t.length,r);for(var a=e;a<r;++a)n+=String.fromCharCode(t[a]);return n}function E(t,e,r){var n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);for(var a="",i=e;i<r;++i)a+=R(t[i]);return a}function L(t,e,r){for(var n=t.slice(e,r),a="",i=0;i<n.length;i+=2)a+=String.fromCharCode(n[i]+256*n[i+1]);return a}function C(t,e,r){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>r)throw new RangeError("Trying to access beyond buffer length")}function P(t,r,n,a,i,o){if(!e.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>i||r<o)throw new RangeError('"value" argument is out of bounds');if(n+a>t.length)throw new RangeError("Index out of range")}function O(t,e,r,n,a,i){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function z(t,e,r,n,i){return e=+e,r>>>=0,i||O(t,0,r,4),a.write(t,e,r,n,23,4),r+4}function I(t,e,r,n,i){return e=+e,r>>>=0,i||O(t,0,r,8),a.write(t,e,r,n,52,8),r+8}e.prototype.slice=function(t,r){var n=this.length;(t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(r=void 0===r?n:~~r)<0?(r+=n)<0&&(r=0):r>n&&(r=n),r<t&&(r=t);var a=this.subarray(t,r);return Object.setPrototypeOf(a,e.prototype),a},e.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||C(t,e,this.length);for(var n=this[t],a=1,i=0;++i<e&&(a*=256);)n+=this[t+i]*a;return n},e.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||C(t,e,this.length);for(var n=this[t+--e],a=1;e>0&&(a*=256);)n+=this[t+--e]*a;return n},e.prototype.readUInt8=function(t,e){return t>>>=0,e||C(t,1,this.length),this[t]},e.prototype.readUInt16LE=function(t,e){return t>>>=0,e||C(t,2,this.length),this[t]|this[t+1]<<8},e.prototype.readUInt16BE=function(t,e){return t>>>=0,e||C(t,2,this.length),this[t]<<8|this[t+1]},e.prototype.readUInt32LE=function(t,e){return t>>>=0,e||C(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},e.prototype.readUInt32BE=function(t,e){return t>>>=0,e||C(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},e.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||C(t,e,this.length);for(var n=this[t],a=1,i=0;++i<e&&(a*=256);)n+=this[t+i]*a;return n>=(a*=128)&&(n-=Math.pow(2,8*e)),n},e.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||C(t,e,this.length);for(var n=e,a=1,i=this[t+--n];n>0&&(a*=256);)i+=this[t+--n]*a;return i>=(a*=128)&&(i-=Math.pow(2,8*e)),i},e.prototype.readInt8=function(t,e){return t>>>=0,e||C(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},e.prototype.readInt16LE=function(t,e){t>>>=0,e||C(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},e.prototype.readInt16BE=function(t,e){t>>>=0,e||C(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},e.prototype.readInt32LE=function(t,e){return t>>>=0,e||C(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},e.prototype.readInt32BE=function(t,e){return t>>>=0,e||C(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},e.prototype.readFloatLE=function(t,e){return t>>>=0,e||C(t,4,this.length),a.read(this,t,!0,23,4)},e.prototype.readFloatBE=function(t,e){return t>>>=0,e||C(t,4,this.length),a.read(this,t,!1,23,4)},e.prototype.readDoubleLE=function(t,e){return t>>>=0,e||C(t,8,this.length),a.read(this,t,!0,52,8)},e.prototype.readDoubleBE=function(t,e){return t>>>=0,e||C(t,8,this.length),a.read(this,t,!1,52,8)},e.prototype.writeUIntLE=function(t,e,r,n){(t=+t,e>>>=0,r>>>=0,n)||P(this,t,e,r,Math.pow(2,8*r)-1,0);var a=1,i=0;for(this[e]=255&t;++i<r&&(a*=256);)this[e+i]=t/a&255;return e+r},e.prototype.writeUIntBE=function(t,e,r,n){(t=+t,e>>>=0,r>>>=0,n)||P(this,t,e,r,Math.pow(2,8*r)-1,0);var a=r-1,i=1;for(this[e+a]=255&t;--a>=0&&(i*=256);)this[e+a]=t/i&255;return e+r},e.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,1,255,0),this[e]=255&t,e+1},e.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},e.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},e.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},e.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},e.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var a=Math.pow(2,8*r-1);P(this,t,e,r,a-1,-a)}var i=0,o=1,s=0;for(this[e]=255&t;++i<r&&(o*=256);)t<0&&0===s&&0!==this[e+i-1]&&(s=1),this[e+i]=(t/o>>0)-s&255;return e+r},e.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var a=Math.pow(2,8*r-1);P(this,t,e,r,a-1,-a)}var i=r-1,o=1,s=0;for(this[e+i]=255&t;--i>=0&&(o*=256);)t<0&&0===s&&0!==this[e+i+1]&&(s=1),this[e+i]=(t/o>>0)-s&255;return e+r},e.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},e.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},e.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},e.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},e.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},e.prototype.writeFloatLE=function(t,e,r){return z(this,t,e,!0,r)},e.prototype.writeFloatBE=function(t,e,r){return z(this,t,e,!1,r)},e.prototype.writeDoubleLE=function(t,e,r){return I(this,t,e,!0,r)},e.prototype.writeDoubleBE=function(t,e,r){return I(this,t,e,!1,r)},e.prototype.copy=function(t,r,n,a){if(!e.isBuffer(t))throw new TypeError("argument should be a Buffer");if(n||(n=0),a||0===a||(a=this.length),r>=t.length&&(r=t.length),r||(r=0),a>0&&a<n&&(a=n),a===n)return 0;if(0===t.length||0===this.length)return 0;if(r<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("Index out of range");if(a<0)throw new RangeError("sourceEnd out of bounds");a>this.length&&(a=this.length),t.length-r<a-n&&(a=t.length-r+n);var i=a-n;if(this===t&&"function"==typeof Uint8Array.prototype.copyWithin)this.copyWithin(r,n,a);else if(this===t&&n<r&&r<a)for(var o=i-1;o>=0;--o)t[o+r]=this[o+n];else Uint8Array.prototype.set.call(t,this.subarray(n,a),r);return i},e.prototype.fill=function(t,r,n,a){if("string"==typeof t){if("string"==typeof r?(a=r,r=0,n=this.length):"string"==typeof n&&(a=n,n=this.length),void 0!==a&&"string"!=typeof a)throw new TypeError("encoding must be a string");if("string"==typeof a&&!e.isEncoding(a))throw new TypeError("Unknown encoding: "+a);if(1===t.length){var i=t.charCodeAt(0);("utf8"===a&&i<128||"latin1"===a)&&(t=i)}}else"number"==typeof t?t&=255:"boolean"==typeof t&&(t=Number(t));if(r<0||this.length<r||this.length<n)throw new RangeError("Out of range index");if(n<=r)return this;var o;if(r>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(o=r;o<n;++o)this[o]=t;else{var s=e.isBuffer(t)?t:e.from(t,a),l=s.length;if(0===l)throw new TypeError('The value "'+t+'" is invalid for argument "value"');for(o=0;o<n-r;++o)this[o+r]=s[o%l]}return this};var D=/[^+/0-9A-Za-z-_]/g;function R(t){return t<16?"0"+t.toString(16):t.toString(16)}function F(t,e){var r;e=e||1/0;for(var n=t.length,a=null,i=[],o=0;o<n;++o){if((r=t.charCodeAt(o))>55295&&r<57344){if(!a){if(r>56319){(e-=3)>-1&&i.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&i.push(239,191,189);continue}a=r;continue}if(r<56320){(e-=3)>-1&&i.push(239,191,189),a=r;continue}r=65536+(a-55296<<10|r-56320)}else a&&(e-=3)>-1&&i.push(239,191,189);if(a=null,r<128){if((e-=1)<0)break;i.push(r)}else if(r<2048){if((e-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function B(t){return n.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(D,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function N(t,e,r,n){for(var a=0;a<n&&!(a+r>=e.length||a>=t.length);++a)e[a+r]=t[a];return a}function j(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function V(t){return t!=t}}).call(this,t("buffer").Buffer)},{"base64-js":76,buffer:107,ieee754:413}],108:[function(t,e,r){"use strict";var n=t("./lib/monotone"),a=t("./lib/triangulation"),i=t("./lib/delaunay"),o=t("./lib/filter");function s(t){return[Math.min(t[0],t[1]),Math.max(t[0],t[1])]}function l(t,e){return t[0]-e[0]||t[1]-e[1]}function c(t,e,r){return e in t?t[e]:r}e.exports=function(t,e,r){Array.isArray(e)?(r=r||{},e=e||[]):(r=e||{},e=[]);var u=!!c(r,"delaunay",!0),h=!!c(r,"interior",!0),f=!!c(r,"exterior",!0),p=!!c(r,"infinity",!1);if(!h&&!f||0===t.length)return[];var d=n(t,e);if(u||h!==f||p){for(var g=a(t.length,function(t){return t.map(s).sort(l)}(e)),v=0;v<d.length;++v){var m=d[v];g.addTriangle(m[0],m[1],m[2])}return u&&i(t,g),f?h?p?o(g,0,p):g.cells():o(g,1,p):o(g,-1)}return d}},{"./lib/delaunay":109,"./lib/filter":110,"./lib/monotone":111,"./lib/triangulation":112}],109:[function(t,e,r){"use strict";var n=t("robust-in-sphere")[4];t("binary-search-bounds");function a(t,e,r,a,i,o){var s=e.opposite(a,i);if(!(s<0)){if(i<a){var l=a;a=i,i=l,l=o,o=s,s=l}e.isConstraint(a,i)||n(t[a],t[i],t[o],t[s])<0&&r.push(a,i)}}e.exports=function(t,e){for(var r=[],i=t.length,o=e.stars,s=0;s<i;++s)for(var l=o[s],c=1;c<l.length;c+=2){var u=l[c];if(!(u<s)&&!e.isConstraint(s,u)){for(var h=l[c-1],f=-1,p=1;p<l.length;p+=2)if(l[p-1]===u){f=l[p];break}f<0||n(t[s],t[u],t[h],t[f])<0&&r.push(s,u)}}for(;r.length>0;){for(var u=r.pop(),s=r.pop(),h=-1,f=-1,l=o[s],d=1;d<l.length;d+=2){var g=l[d-1],v=l[d];g===u?f=v:v===u&&(h=g)}h<0||f<0||(n(t[s],t[u],t[h],t[f])>=0||(e.flip(s,u),a(t,e,r,h,s,f),a(t,e,r,s,f,h),a(t,e,r,f,u,h),a(t,e,r,u,h,f)))}}},{"binary-search-bounds":113,"robust-in-sphere":506}],110:[function(t,e,r){"use strict";var n,a=t("binary-search-bounds");function i(t,e,r,n,a,i,o){this.cells=t,this.neighbor=e,this.flags=n,this.constraint=r,this.active=a,this.next=i,this.boundary=o}function o(t,e){return t[0]-e[0]||t[1]-e[1]||t[2]-e[2]}e.exports=function(t,e,r){var n=function(t,e){for(var r=t.cells(),n=r.length,a=0;a<n;++a){var s=r[a],l=s[0],c=s[1],u=s[2];c<u?c<l&&(s[0]=c,s[1]=u,s[2]=l):u<l&&(s[0]=u,s[1]=l,s[2]=c)}r.sort(o);for(var h=new Array(n),a=0;a<h.length;++a)h[a]=0;var f=[],p=[],d=new Array(3*n),g=new Array(3*n),v=null;e&&(v=[]);for(var m=new i(r,d,g,h,f,p,v),a=0;a<n;++a)for(var s=r[a],y=0;y<3;++y){var l=s[y],c=s[(y+1)%3],x=d[3*a+y]=m.locate(c,l,t.opposite(c,l)),b=g[3*a+y]=t.isConstraint(l,c);x<0&&(b?p.push(a):(f.push(a),h[a]=1),e&&v.push([c,l,-1]))}return m}(t,r);if(0===e)return r?n.cells.concat(n.boundary):n.cells;var a=1,s=n.active,l=n.next,c=n.flags,u=n.cells,h=n.constraint,f=n.neighbor;for(;s.length>0||l.length>0;){for(;s.length>0;){var p=s.pop();if(c[p]!==-a){c[p]=a;u[p];for(var d=0;d<3;++d){var g=f[3*p+d];g>=0&&0===c[g]&&(h[3*p+d]?l.push(g):(s.push(g),c[g]=a))}}}var v=l;l=s,s=v,l.length=0,a=-a}var m=function(t,e,r){for(var n=0,a=0;a<t.length;++a)e[a]===r&&(t[n++]=t[a]);return t.length=n,t}(u,c,e);if(r)return m.concat(n.boundary);return m},i.prototype.locate=(n=[0,0,0],function(t,e,r){var i=t,s=e,l=r;return e<r?e<t&&(i=e,s=r,l=t):r<t&&(i=r,s=t,l=e),i<0?-1:(n[0]=i,n[1]=s,n[2]=l,a.eq(this.cells,n,o))})},{"binary-search-bounds":113}],111:[function(t,e,r){"use strict";var n=t("binary-search-bounds"),a=t("robust-orientation")[3],i=0,o=1,s=2;function l(t,e,r,n,a){this.a=t,this.b=e,this.idx=r,this.lowerIds=n,this.upperIds=a}function c(t,e,r,n){this.a=t,this.b=e,this.type=r,this.idx=n}function u(t,e){var r=t.a[0]-e.a[0]||t.a[1]-e.a[1]||t.type-e.type;return r||(t.type!==i&&(r=a(t.a,t.b,e.b))?r:t.idx-e.idx)}function h(t,e){return a(t.a,t.b,e)}function f(t,e,r,i,o){for(var s=n.lt(e,i,h),l=n.gt(e,i,h),c=s;c<l;++c){for(var u=e[c],f=u.lowerIds,p=f.length;p>1&&a(r[f[p-2]],r[f[p-1]],i)>0;)t.push([f[p-1],f[p-2],o]),p-=1;f.length=p,f.push(o);var d=u.upperIds;for(p=d.length;p>1&&a(r[d[p-2]],r[d[p-1]],i)<0;)t.push([d[p-2],d[p-1],o]),p-=1;d.length=p,d.push(o)}}function p(t,e){var r;return(r=t.a[0]<e.a[0]?a(t.a,t.b,e.a):a(e.b,e.a,t.a))?r:(r=e.b[0]<t.b[0]?a(t.a,t.b,e.b):a(e.b,e.a,t.b))||t.idx-e.idx}function d(t,e,r){var a=n.le(t,r,p),i=t[a],o=i.upperIds,s=o[o.length-1];i.upperIds=[s],t.splice(a+1,0,new l(r.a,r.b,r.idx,[s],o))}function g(t,e,r){var a=r.a;r.a=r.b,r.b=a;var i=n.eq(t,r,p),o=t[i];t[i-1].upperIds=o.upperIds,t.splice(i,1)}e.exports=function(t,e){for(var r=t.length,n=e.length,a=[],h=0;h<r;++h)a.push(new c(t[h],null,i,h));for(var h=0;h<n;++h){var p=e[h],v=t[p[0]],m=t[p[1]];v[0]<m[0]?a.push(new c(v,m,s,h),new c(m,v,o,h)):v[0]>m[0]&&a.push(new c(m,v,s,h),new c(v,m,o,h))}a.sort(u);for(var y=a[0].a[0]-(1+Math.abs(a[0].a[0]))*Math.pow(2,-52),x=[new l([y,1],[y,0],-1,[],[],[],[])],b=[],h=0,_=a.length;h<_;++h){var w=a[h],k=w.type;k===i?f(b,x,t,w.a,w.idx):k===s?d(x,t,w):g(x,t,w)}return b}},{"binary-search-bounds":113,"robust-orientation":508}],112:[function(t,e,r){"use strict";var n=t("binary-search-bounds");function a(t,e){this.stars=t,this.edges=e}e.exports=function(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=[];return new a(r,e)};var i=a.prototype;function o(t,e,r){for(var n=1,a=t.length;n<a;n+=2)if(t[n-1]===e&&t[n]===r)return t[n-1]=t[a-2],t[n]=t[a-1],void(t.length=a-2)}i.isConstraint=function(){var t=[0,0];function e(t,e){return t[0]-e[0]||t[1]-e[1]}return function(r,a){return t[0]=Math.min(r,a),t[1]=Math.max(r,a),n.eq(this.edges,t,e)>=0}}(),i.removeTriangle=function(t,e,r){var n=this.stars;o(n[t],e,r),o(n[e],r,t),o(n[r],t,e)},i.addTriangle=function(t,e,r){var n=this.stars;n[t].push(e,r),n[e].push(r,t),n[r].push(t,e)},i.opposite=function(t,e){for(var r=this.stars[e],n=1,a=r.length;n<a;n+=2)if(r[n]===t)return r[n-1];return-1},i.flip=function(t,e){var r=this.opposite(t,e),n=this.opposite(e,t);this.removeTriangle(t,e,r),this.removeTriangle(e,t,n),this.addTriangle(t,n,r),this.addTriangle(e,r,n)},i.edges=function(){for(var t=this.stars,e=[],r=0,n=t.length;r<n;++r)for(var a=t[r],i=0,o=a.length;i<o;i+=2)e.push([a[i],a[i+1]]);return e},i.cells=function(){for(var t=this.stars,e=[],r=0,n=t.length;r<n;++r)for(var a=t[r],i=0,o=a.length;i<o;i+=2){var s=a[i],l=a[i+1];r<Math.min(s,l)&&e.push([r,s,l])}return e}},{"binary-search-bounds":113}],113:[function(t,e,r){"use strict";function n(t,e,r,n,a){var i=["function ",t,"(a,l,h,",n.join(","),"){",a?"":"var i=",r?"l-1":"h+1",";while(l<=h){var m=(l+h)>>>1,x=a[m]"];return a?e.indexOf("c")<0?i.push(";if(x===y){return m}else if(x<=y){"):i.push(";var p=c(x,y);if(p===0){return m}else if(p<=0){"):i.push(";if(",e,"){i=m;"),r?i.push("l=m+1}else{h=m-1}"):i.push("h=m-1}else{l=m+1}"),i.push("}"),a?i.push("return -1};"):i.push("return i};"),i.join("")}function a(t,e,r,a){return new Function([n("A","x"+t+"y",e,["y"],a),n("P","c(x,y)"+t+"0",e,["y","c"],a),"function dispatchBsearch",r,"(a,y,c,l,h){if(typeof(c)==='function'){return P(a,(l===void 0)?0:l|0,(h===void 0)?a.length-1:h|0,y,c)}else{return A(a,(c===void 0)?0:c|0,(l===void 0)?a.length-1:l|0,y)}}return dispatchBsearch",r].join(""))()}e.exports={ge:a(">=",!1,"GE"),gt:a(">",!1,"GT"),lt:a("<",!0,"LT"),le:a("<=",!0,"LE"),eq:a("-",!0,"EQ",!0)}},{}],114:[function(t,e,r){"use strict";e.exports=function(t){for(var e=1,r=1;r<t.length;++r)for(var n=0;n<r;++n)if(t[r]<t[n])e=-e;else if(t[n]===t[r])return 0;return e}},{}],115:[function(t,e,r){"use strict";var n=t("dup"),a=t("robust-linear-solve");function i(t,e){for(var r=0,n=t.length,a=0;a<n;++a)r+=t[a]*e[a];return r}function o(t){var e=t.length;if(0===e)return[];t[0].length;var r=n([t.length+1,t.length+1],1),o=n([t.length+1],1);r[e][e]=0;for(var s=0;s<e;++s){for(var l=0;l<=s;++l)r[l][s]=r[s][l]=2*i(t[s],t[l]);o[s]=i(t[s],t[s])}var c=a(r,o),u=0,h=c[e+1];for(s=0;s<h.length;++s)u+=h[s];var f=new Array(e);for(s=0;s<e;++s){h=c[s];var p=0;for(l=0;l<h.length;++l)p+=h[l];f[s]=p/u}return f}function s(t){if(0===t.length)return[];for(var e=t[0].length,r=n([e]),a=o(t),i=0;i<t.length;++i)for(var s=0;s<e;++s)r[s]+=t[i][s]*a[i];return r}s.barycenetric=o,e.exports=s},{dup:172,"robust-linear-solve":507}],116:[function(t,e,r){e.exports=function(t){for(var e=n(t),r=0,a=0;a<t.length;++a)for(var i=t[a],o=0;o<e.length;++o)r+=Math.pow(i[o]-e[o],2);return Math.sqrt(r/t.length)};var n=t("circumcenter")},{circumcenter:115}],117:[function(t,e,r){e.exports=function(t,e,r){return e<r?t<e?e:t>r?r:t:t<r?r:t>e?e:t}},{}],118:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n;if(r){n=e;for(var a=new Array(e.length),i=0;i<e.length;++i){var o=e[i];a[i]=[o[0],o[1],r[i]]}e=a}var s=function(t,e,r){var n=d(t,[],p(t));return m(e,n,r),!!n}(t,e,!!r);for(;y(t,e,!!r);)s=!0;if(r&&s){n.length=0,r.length=0;for(var i=0;i<e.length;++i){var o=e[i];n.push([o[0],o[1]]),r.push(o[2])}}return s};var n=t("union-find"),a=t("box-intersect"),i=t("robust-segment-intersect"),o=t("big-rat"),s=t("big-rat/cmp"),l=t("big-rat/to-float"),c=t("rat-vec"),u=t("nextafter"),h=t("./lib/rat-seg-intersect");function f(t){var e=l(t);return[u(e,-1/0),u(e,1/0)]}function p(t){for(var e=new Array(t.length),r=0;r<t.length;++r){var n=t[r];e[r]=[u(n[0],-1/0),u(n[1],-1/0),u(n[0],1/0),u(n[1],1/0)]}return e}function d(t,e,r){for(var i=e.length,o=new n(i),s=[],l=0;l<e.length;++l){var c=e[l],h=f(c[0]),p=f(c[1]);s.push([u(h[0],-1/0),u(p[0],-1/0),u(h[1],1/0),u(p[1],1/0)])}a(s,function(t,e){o.link(t,e)});var d=!0,g=new Array(i);for(l=0;l<i;++l){(m=o.find(l))!==l&&(d=!1,t[m]=[Math.min(t[l][0],t[m][0]),Math.min(t[l][1],t[m][1])])}if(d)return null;var v=0;for(l=0;l<i;++l){var m;(m=o.find(l))===l?(g[l]=v,t[v++]=t[l]):g[l]=-1}t.length=v;for(l=0;l<i;++l)g[l]<0&&(g[l]=g[o.find(l)]);return g}function g(t,e){return t[0]-e[0]||t[1]-e[1]}function v(t,e){var r=t[0]-e[0]||t[1]-e[1];return r||(t[2]<e[2]?-1:t[2]>e[2]?1:0)}function m(t,e,r){if(0!==t.length){if(e)for(var n=0;n<t.length;++n){var a=e[(o=t[n])[0]],i=e[o[1]];o[0]=Math.min(a,i),o[1]=Math.max(a,i)}else for(n=0;n<t.length;++n){var o;a=(o=t[n])[0],i=o[1];o[0]=Math.min(a,i),o[1]=Math.max(a,i)}r?t.sort(v):t.sort(g);var s=1;for(n=1;n<t.length;++n){var l=t[n-1],c=t[n];(c[0]!==l[0]||c[1]!==l[1]||r&&c[2]!==l[2])&&(t[s++]=c)}t.length=s}}function y(t,e,r){var n=function(t,e){for(var r=new Array(e.length),n=0;n<e.length;++n){var a=e[n],i=t[a[0]],o=t[a[1]];r[n]=[u(Math.min(i[0],o[0]),-1/0),u(Math.min(i[1],o[1]),-1/0),u(Math.max(i[0],o[0]),1/0),u(Math.max(i[1],o[1]),1/0)]}return r}(t,e),f=function(t,e,r){var n=[];return a(r,function(r,a){var o=e[r],s=e[a];if(o[0]!==s[0]&&o[0]!==s[1]&&o[1]!==s[0]&&o[1]!==s[1]){var l=t[o[0]],c=t[o[1]],u=t[s[0]],h=t[s[1]];i(l,c,u,h)&&n.push([r,a])}}),n}(t,e,n),g=p(t),v=function(t,e,r,n){var o=[];return a(r,n,function(r,n){var a=e[r];if(a[0]!==n&&a[1]!==n){var s=t[n],l=t[a[0]],c=t[a[1]];i(l,c,s,s)&&o.push([r,n])}}),o}(t,e,n,g),y=d(t,function(t,e,r,n,a){var i,u,f=t.map(function(t){return[o(t[0]),o(t[1])]});for(i=0;i<r.length;++i){var p=r[i];u=p[0];var d=p[1],g=e[u],v=e[d],m=h(c(t[g[0]]),c(t[g[1]]),c(t[v[0]]),c(t[v[1]]));if(m){var y=t.length;t.push([l(m[0]),l(m[1])]),f.push(m),n.push([u,y],[d,y])}}for(n.sort(function(t,e){if(t[0]!==e[0])return t[0]-e[0];var r=f[t[1]],n=f[e[1]];return s(r[0],n[0])||s(r[1],n[1])}),i=n.length-1;i>=0;--i){var x=e[u=(S=n[i])[0]],b=x[0],_=x[1],w=t[b],k=t[_];if((w[0]-k[0]||w[1]-k[1])<0){var T=b;b=_,_=T}x[0]=b;var M,A=x[1]=S[1];for(a&&(M=x[2]);i>0&&n[i-1][0]===u;){var S,E=(S=n[--i])[1];a?e.push([A,E,M]):e.push([A,E]),A=E}a?e.push([A,_,M]):e.push([A,_])}return f}(t,e,f,v,r));return m(e,y,r),!!y||(f.length>0||v.length>0)}},{"./lib/rat-seg-intersect":119,"big-rat":80,"big-rat/cmp":78,"big-rat/to-float":92,"box-intersect":98,nextafter:452,"rat-vec":487,"robust-segment-intersect":511,"union-find":544}],119:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){var i=s(e,t),h=s(n,r),f=u(i,h);if(0===o(f))return null;var p=s(t,r),d=u(h,p),g=a(d,f),v=c(i,g);return l(t,v)};var n=t("big-rat/mul"),a=t("big-rat/div"),i=t("big-rat/sub"),o=t("big-rat/sign"),s=t("rat-vec/sub"),l=t("rat-vec/add"),c=t("rat-vec/muls");function u(t,e){return i(n(t[0],e[1]),n(t[1],e[0]))}},{"big-rat/div":79,"big-rat/mul":89,"big-rat/sign":90,"big-rat/sub":91,"rat-vec/add":486,"rat-vec/muls":488,"rat-vec/sub":489}],120:[function(t,e,r){"use strict";var n=t("clamp");function a(t,e){null==e&&(e=!0);var r=t[0],a=t[1],i=t[2],o=t[3];return null==o&&(o=e?1:255),e&&(r*=255,a*=255,i*=255,o*=255),16777216*(r=255&n(r,0,255))+((a=255&n(a,0,255))<<16)+((i=255&n(i,0,255))<<8)+(o=255&n(o,0,255))}e.exports=a,e.exports.to=a,e.exports.from=function(t,e){var r=(t=+t)>>>24,n=(16711680&t)>>>16,a=(65280&t)>>>8,i=255&t;return!1===e?[r,n,a,i]:[r/255,n/255,a/255,i/255]}},{clamp:117}],121:[function(t,e,r){"use strict";e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},{}],122:[function(t,e,r){"use strict";var n=t("color-rgba"),a=t("clamp"),i=t("dtype");e.exports=function(t,e){"float"!==e&&e||(e="array"),"uint"===e&&(e="uint8"),"uint_clamped"===e&&(e="uint8_clamped");var r=new(i(e))(4),o="uint8"!==e&&"uint8_clamped"!==e;return t.length&&"string"!=typeof t||((t=n(t))[0]/=255,t[1]/=255,t[2]/=255),function(t){return t instanceof Uint8Array||t instanceof Uint8ClampedArray||!!(Array.isArray(t)&&(t[0]>1||0===t[0])&&(t[1]>1||0===t[1])&&(t[2]>1||0===t[2])&&(!t[3]||t[3]>1))}(t)?(r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=null!=t[3]?t[3]:255,o&&(r[0]/=255,r[1]/=255,r[2]/=255,r[3]/=255),r):(o?(r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=null!=t[3]?t[3]:1):(r[0]=a(Math.floor(255*t[0]),0,255),r[1]=a(Math.floor(255*t[1]),0,255),r[2]=a(Math.floor(255*t[2]),0,255),r[3]=null==t[3]?255:a(Math.floor(255*t[3]),0,255)),r)}},{clamp:117,"color-rgba":124,dtype:171}],123:[function(t,e,r){(function(r){"use strict";var n=t("color-name"),a=t("is-plain-obj"),i=t("defined");e.exports=function(t){var e,s,l=[],c=1;if("string"==typeof t)if(n[t])l=n[t].slice(),s="rgb";else if("transparent"===t)c=0,s="rgb",l=[0,0,0];else if(/^#[A-Fa-f0-9]+$/.test(t)){var u=t.slice(1),h=u.length,f=h<=4;c=1,f?(l=[parseInt(u[0]+u[0],16),parseInt(u[1]+u[1],16),parseInt(u[2]+u[2],16)],4===h&&(c=parseInt(u[3]+u[3],16)/255)):(l=[parseInt(u[0]+u[1],16),parseInt(u[2]+u[3],16),parseInt(u[4]+u[5],16)],8===h&&(c=parseInt(u[6]+u[7],16)/255)),l[0]||(l[0]=0),l[1]||(l[1]=0),l[2]||(l[2]=0),s="rgb"}else if(e=/^((?:rgb|hs[lvb]|hwb|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms)a?)\s*\(([^\)]*)\)/.exec(t)){var p=e[1],d="rgb"===p,u=p.replace(/a$/,"");s=u;var h="cmyk"===u?4:"gray"===u?1:3;l=e[2].trim().split(/\s*,\s*/).map(function(t,e){if(/%$/.test(t))return e===h?parseFloat(t)/100:"rgb"===u?255*parseFloat(t)/100:parseFloat(t);if("h"===u[e]){if(/deg$/.test(t))return parseFloat(t);if(void 0!==o[t])return o[t]}return parseFloat(t)}),p===u&&l.push(1),c=d?1:void 0===l[h]?1:l[h],l=l.slice(0,h)}else t.length>10&&/[0-9](?:\s|\/)/.test(t)&&(l=t.match(/([0-9]+)/g).map(function(t){return parseFloat(t)}),s=t.match(/([a-z])/gi).join("").toLowerCase());else if(isNaN(t))if(a(t)){var g=i(t.r,t.red,t.R,null);null!==g?(s="rgb",l=[g,i(t.g,t.green,t.G),i(t.b,t.blue,t.B)]):(s="hsl",l=[i(t.h,t.hue,t.H),i(t.s,t.saturation,t.S),i(t.l,t.lightness,t.L,t.b,t.brightness)]),c=i(t.a,t.alpha,t.opacity,1),null!=t.opacity&&(c/=100)}else(Array.isArray(t)||r.ArrayBuffer&&ArrayBuffer.isView&&ArrayBuffer.isView(t))&&(l=[t[0],t[1],t[2]],s="rgb",c=4===t.length?t[3]:1);else s="rgb",l=[t>>>16,(65280&t)>>>8,255&t];return{space:s,values:l,alpha:c}};var o={red:0,orange:60,yellow:120,green:180,blue:240,purple:300}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"color-name":121,defined:166,"is-plain-obj":423}],124:[function(t,e,r){"use strict";var n=t("color-parse"),a=t("color-space/hsl"),i=t("clamp");e.exports=function(t){var e,r=n(t);return r.space?((e=Array(3))[0]=i(r.values[0],0,255),e[1]=i(r.values[1],0,255),e[2]=i(r.values[2],0,255),"h"===r.space[0]&&(e=a.rgb(e)),e.push(i(r.alpha,0,1)),e):[]}},{clamp:117,"color-parse":123,"color-space/hsl":125}],125:[function(t,e,r){"use strict";var n=t("./rgb");e.exports={name:"hsl",min:[0,0,0],max:[360,100,100],channel:["hue","saturation","lightness"],alias:["HSL"],rgb:function(t){var e,r,n,a,i,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[i=255*l,i,i];e=2*l-(r=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var c=0;c<3;c++)(n=o+1/3*-(c-1))<0?n++:n>1&&n--,i=6*n<1?e+6*(r-e)*n:2*n<1?r:3*n<2?e+(r-e)*(2/3-n)*6:e,a[c]=255*i;return a}},n.hsl=function(t){var e,r,n=t[0]/255,a=t[1]/255,i=t[2]/255,o=Math.min(n,a,i),s=Math.max(n,a,i),l=s-o;return s===o?e=0:n===s?e=(a-i)/l:a===s?e=2+(i-n)/l:i===s&&(e=4+(n-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),r=(o+s)/2,[e,100*(s===o?0:r<=.5?l/(s+o):l/(2-s-o)),100*r]}},{"./rgb":126}],126:[function(t,e,r){"use strict";e.exports={name:"rgb",min:[0,0,0],max:[255,255,255],channel:["red","green","blue"],alias:["RGB"]}},{}],127:[function(t,e,r){e.exports={jet:[{index:0,rgb:[0,0,131]},{index:.125,rgb:[0,60,170]},{index:.375,rgb:[5,255,255]},{index:.625,rgb:[255,255,0]},{index:.875,rgb:[250,0,0]},{index:1,rgb:[128,0,0]}],hsv:[{index:0,rgb:[255,0,0]},{index:.169,rgb:[253,255,2]},{index:.173,rgb:[247,255,2]},{index:.337,rgb:[0,252,4]},{index:.341,rgb:[0,252,10]},{index:.506,rgb:[1,249,255]},{index:.671,rgb:[2,0,253]},{index:.675,rgb:[8,0,253]},{index:.839,rgb:[255,0,251]},{index:.843,rgb:[255,0,245]},{index:1,rgb:[255,0,6]}],hot:[{index:0,rgb:[0,0,0]},{index:.3,rgb:[230,0,0]},{index:.6,rgb:[255,210,0]},{index:1,rgb:[255,255,255]}],cool:[{index:0,rgb:[0,255,255]},{index:1,rgb:[255,0,255]}],spring:[{index:0,rgb:[255,0,255]},{index:1,rgb:[255,255,0]}],summer:[{index:0,rgb:[0,128,102]},{index:1,rgb:[255,255,102]}],autumn:[{index:0,rgb:[255,0,0]},{index:1,rgb:[255,255,0]}],winter:[{index:0,rgb:[0,0,255]},{index:1,rgb:[0,255,128]}],bone:[{index:0,rgb:[0,0,0]},{index:.376,rgb:[84,84,116]},{index:.753,rgb:[169,200,200]},{index:1,rgb:[255,255,255]}],copper:[{index:0,rgb:[0,0,0]},{index:.804,rgb:[255,160,102]},{index:1,rgb:[255,199,127]}],greys:[{index:0,rgb:[0,0,0]},{index:1,rgb:[255,255,255]}],yignbu:[{index:0,rgb:[8,29,88]},{index:.125,rgb:[37,52,148]},{index:.25,rgb:[34,94,168]},{index:.375,rgb:[29,145,192]},{index:.5,rgb:[65,182,196]},{index:.625,rgb:[127,205,187]},{index:.75,rgb:[199,233,180]},{index:.875,rgb:[237,248,217]},{index:1,rgb:[255,255,217]}],greens:[{index:0,rgb:[0,68,27]},{index:.125,rgb:[0,109,44]},{index:.25,rgb:[35,139,69]},{index:.375,rgb:[65,171,93]},{index:.5,rgb:[116,196,118]},{index:.625,rgb:[161,217,155]},{index:.75,rgb:[199,233,192]},{index:.875,rgb:[229,245,224]},{index:1,rgb:[247,252,245]}],yiorrd:[{index:0,rgb:[128,0,38]},{index:.125,rgb:[189,0,38]},{index:.25,rgb:[227,26,28]},{index:.375,rgb:[252,78,42]},{index:.5,rgb:[253,141,60]},{index:.625,rgb:[254,178,76]},{index:.75,rgb:[254,217,118]},{index:.875,rgb:[255,237,160]},{index:1,rgb:[255,255,204]}],bluered:[{index:0,rgb:[0,0,255]},{index:1,rgb:[255,0,0]}],rdbu:[{index:0,rgb:[5,10,172]},{index:.35,rgb:[106,137,247]},{index:.5,rgb:[190,190,190]},{index:.6,rgb:[220,170,132]},{index:.7,rgb:[230,145,90]},{index:1,rgb:[178,10,28]}],picnic:[{index:0,rgb:[0,0,255]},{index:.1,rgb:[51,153,255]},{index:.2,rgb:[102,204,255]},{index:.3,rgb:[153,204,255]},{index:.4,rgb:[204,204,255]},{index:.5,rgb:[255,255,255]},{index:.6,rgb:[255,204,255]},{index:.7,rgb:[255,153,255]},{index:.8,rgb:[255,102,204]},{index:.9,rgb:[255,102,102]},{index:1,rgb:[255,0,0]}],rainbow:[{index:0,rgb:[150,0,90]},{index:.125,rgb:[0,0,200]},{index:.25,rgb:[0,25,255]},{index:.375,rgb:[0,152,255]},{index:.5,rgb:[44,255,150]},{index:.625,rgb:[151,255,0]},{index:.75,rgb:[255,234,0]},{index:.875,rgb:[255,111,0]},{index:1,rgb:[255,0,0]}],portland:[{index:0,rgb:[12,51,131]},{index:.25,rgb:[10,136,186]},{index:.5,rgb:[242,211,56]},{index:.75,rgb:[242,143,56]},{index:1,rgb:[217,30,30]}],blackbody:[{index:0,rgb:[0,0,0]},{index:.2,rgb:[230,0,0]},{index:.4,rgb:[230,210,0]},{index:.7,rgb:[255,255,255]},{index:1,rgb:[160,200,255]}],earth:[{index:0,rgb:[0,0,130]},{index:.1,rgb:[0,180,180]},{index:.2,rgb:[40,210,40]},{index:.4,rgb:[230,230,50]},{index:.6,rgb:[120,70,20]},{index:1,rgb:[255,255,255]}],electric:[{index:0,rgb:[0,0,0]},{index:.15,rgb:[30,0,100]},{index:.4,rgb:[120,0,100]},{index:.6,rgb:[160,90,0]},{index:.8,rgb:[230,200,0]},{index:1,rgb:[255,250,220]}],alpha:[{index:0,rgb:[255,255,255,0]},{index:1,rgb:[255,255,255,1]}],viridis:[{index:0,rgb:[68,1,84]},{index:.13,rgb:[71,44,122]},{index:.25,rgb:[59,81,139]},{index:.38,rgb:[44,113,142]},{index:.5,rgb:[33,144,141]},{index:.63,rgb:[39,173,129]},{index:.75,rgb:[92,200,99]},{index:.88,rgb:[170,220,50]},{index:1,rgb:[253,231,37]}],inferno:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[31,12,72]},{index:.25,rgb:[85,15,109]},{index:.38,rgb:[136,34,106]},{index:.5,rgb:[186,54,85]},{index:.63,rgb:[227,89,51]},{index:.75,rgb:[249,140,10]},{index:.88,rgb:[249,201,50]},{index:1,rgb:[252,255,164]}],magma:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[28,16,68]},{index:.25,rgb:[79,18,123]},{index:.38,rgb:[129,37,129]},{index:.5,rgb:[181,54,122]},{index:.63,rgb:[229,80,100]},{index:.75,rgb:[251,135,97]},{index:.88,rgb:[254,194,135]},{index:1,rgb:[252,253,191]}],plasma:[{index:0,rgb:[13,8,135]},{index:.13,rgb:[75,3,161]},{index:.25,rgb:[125,3,168]},{index:.38,rgb:[168,34,150]},{index:.5,rgb:[203,70,121]},{index:.63,rgb:[229,107,93]},{index:.75,rgb:[248,148,65]},{index:.88,rgb:[253,195,40]},{index:1,rgb:[240,249,33]}],warm:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[172,0,187]},{index:.25,rgb:[219,0,170]},{index:.38,rgb:[255,0,130]},{index:.5,rgb:[255,63,74]},{index:.63,rgb:[255,123,0]},{index:.75,rgb:[234,176,0]},{index:.88,rgb:[190,228,0]},{index:1,rgb:[147,255,0]}],cool:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[116,0,218]},{index:.25,rgb:[98,74,237]},{index:.38,rgb:[68,146,231]},{index:.5,rgb:[0,204,197]},{index:.63,rgb:[0,247,146]},{index:.75,rgb:[0,255,88]},{index:.88,rgb:[40,255,8]},{index:1,rgb:[147,255,0]}],"rainbow-soft":[{index:0,rgb:[125,0,179]},{index:.1,rgb:[199,0,180]},{index:.2,rgb:[255,0,121]},{index:.3,rgb:[255,108,0]},{index:.4,rgb:[222,194,0]},{index:.5,rgb:[150,255,0]},{index:.6,rgb:[0,255,55]},{index:.7,rgb:[0,246,150]},{index:.8,rgb:[50,167,222]},{index:.9,rgb:[103,51,235]},{index:1,rgb:[124,0,186]}],bathymetry:[{index:0,rgb:[40,26,44]},{index:.13,rgb:[59,49,90]},{index:.25,rgb:[64,76,139]},{index:.38,rgb:[63,110,151]},{index:.5,rgb:[72,142,158]},{index:.63,rgb:[85,174,163]},{index:.75,rgb:[120,206,163]},{index:.88,rgb:[187,230,172]},{index:1,rgb:[253,254,204]}],cdom:[{index:0,rgb:[47,15,62]},{index:.13,rgb:[87,23,86]},{index:.25,rgb:[130,28,99]},{index:.38,rgb:[171,41,96]},{index:.5,rgb:[206,67,86]},{index:.63,rgb:[230,106,84]},{index:.75,rgb:[242,149,103]},{index:.88,rgb:[249,193,135]},{index:1,rgb:[254,237,176]}],chlorophyll:[{index:0,rgb:[18,36,20]},{index:.13,rgb:[25,63,41]},{index:.25,rgb:[24,91,59]},{index:.38,rgb:[13,119,72]},{index:.5,rgb:[18,148,80]},{index:.63,rgb:[80,173,89]},{index:.75,rgb:[132,196,122]},{index:.88,rgb:[175,221,162]},{index:1,rgb:[215,249,208]}],density:[{index:0,rgb:[54,14,36]},{index:.13,rgb:[89,23,80]},{index:.25,rgb:[110,45,132]},{index:.38,rgb:[120,77,178]},{index:.5,rgb:[120,113,213]},{index:.63,rgb:[115,151,228]},{index:.75,rgb:[134,185,227]},{index:.88,rgb:[177,214,227]},{index:1,rgb:[230,241,241]}],"freesurface-blue":[{index:0,rgb:[30,4,110]},{index:.13,rgb:[47,14,176]},{index:.25,rgb:[41,45,236]},{index:.38,rgb:[25,99,212]},{index:.5,rgb:[68,131,200]},{index:.63,rgb:[114,156,197]},{index:.75,rgb:[157,181,203]},{index:.88,rgb:[200,208,216]},{index:1,rgb:[241,237,236]}],"freesurface-red":[{index:0,rgb:[60,9,18]},{index:.13,rgb:[100,17,27]},{index:.25,rgb:[142,20,29]},{index:.38,rgb:[177,43,27]},{index:.5,rgb:[192,87,63]},{index:.63,rgb:[205,125,105]},{index:.75,rgb:[216,162,148]},{index:.88,rgb:[227,199,193]},{index:1,rgb:[241,237,236]}],oxygen:[{index:0,rgb:[64,5,5]},{index:.13,rgb:[106,6,15]},{index:.25,rgb:[144,26,7]},{index:.38,rgb:[168,64,3]},{index:.5,rgb:[188,100,4]},{index:.63,rgb:[206,136,11]},{index:.75,rgb:[220,174,25]},{index:.88,rgb:[231,215,44]},{index:1,rgb:[248,254,105]}],par:[{index:0,rgb:[51,20,24]},{index:.13,rgb:[90,32,35]},{index:.25,rgb:[129,44,34]},{index:.38,rgb:[159,68,25]},{index:.5,rgb:[182,99,19]},{index:.63,rgb:[199,134,22]},{index:.75,rgb:[212,171,35]},{index:.88,rgb:[221,210,54]},{index:1,rgb:[225,253,75]}],phase:[{index:0,rgb:[145,105,18]},{index:.13,rgb:[184,71,38]},{index:.25,rgb:[186,58,115]},{index:.38,rgb:[160,71,185]},{index:.5,rgb:[110,97,218]},{index:.63,rgb:[50,123,164]},{index:.75,rgb:[31,131,110]},{index:.88,rgb:[77,129,34]},{index:1,rgb:[145,105,18]}],salinity:[{index:0,rgb:[42,24,108]},{index:.13,rgb:[33,50,162]},{index:.25,rgb:[15,90,145]},{index:.38,rgb:[40,118,137]},{index:.5,rgb:[59,146,135]},{index:.63,rgb:[79,175,126]},{index:.75,rgb:[120,203,104]},{index:.88,rgb:[193,221,100]},{index:1,rgb:[253,239,154]}],temperature:[{index:0,rgb:[4,35,51]},{index:.13,rgb:[23,51,122]},{index:.25,rgb:[85,59,157]},{index:.38,rgb:[129,79,143]},{index:.5,rgb:[175,95,130]},{index:.63,rgb:[222,112,101]},{index:.75,rgb:[249,146,66]},{index:.88,rgb:[249,196,65]},{index:1,rgb:[232,250,91]}],turbidity:[{index:0,rgb:[34,31,27]},{index:.13,rgb:[65,50,41]},{index:.25,rgb:[98,69,52]},{index:.38,rgb:[131,89,57]},{index:.5,rgb:[161,112,59]},{index:.63,rgb:[185,140,66]},{index:.75,rgb:[202,174,88]},{index:.88,rgb:[216,209,126]},{index:1,rgb:[233,246,171]}],"velocity-blue":[{index:0,rgb:[17,32,64]},{index:.13,rgb:[35,52,116]},{index:.25,rgb:[29,81,156]},{index:.38,rgb:[31,113,162]},{index:.5,rgb:[50,144,169]},{index:.63,rgb:[87,173,176]},{index:.75,rgb:[149,196,189]},{index:.88,rgb:[203,221,211]},{index:1,rgb:[254,251,230]}],"velocity-green":[{index:0,rgb:[23,35,19]},{index:.13,rgb:[24,64,38]},{index:.25,rgb:[11,95,45]},{index:.38,rgb:[39,123,35]},{index:.5,rgb:[95,146,12]},{index:.63,rgb:[152,165,18]},{index:.75,rgb:[201,186,69]},{index:.88,rgb:[233,216,137]},{index:1,rgb:[255,253,205]}],cubehelix:[{index:0,rgb:[0,0,0]},{index:.07,rgb:[22,5,59]},{index:.13,rgb:[60,4,105]},{index:.2,rgb:[109,1,135]},{index:.27,rgb:[161,0,147]},{index:.33,rgb:[210,2,142]},{index:.4,rgb:[251,11,123]},{index:.47,rgb:[255,29,97]},{index:.53,rgb:[255,54,69]},{index:.6,rgb:[255,85,46]},{index:.67,rgb:[255,120,34]},{index:.73,rgb:[255,157,37]},{index:.8,rgb:[241,191,57]},{index:.87,rgb:[224,220,93]},{index:.93,rgb:[218,241,142]},{index:1,rgb:[227,253,198]}]}},{}],128:[function(t,e,r){"use strict";var n=t("./colorScale"),a=t("lerp");function i(t){return[t[0]/255,t[1]/255,t[2]/255,t[3]]}function o(t){for(var e,r="#",n=0;n<3;++n)r+=("00"+(e=(e=t[n]).toString(16))).substr(e.length);return r}function s(t){return"rgba("+t.join(",")+")"}e.exports=function(t){var e,r,l,c,u,h,f,p,d,g;t||(t={});p=(t.nshades||72)-1,f=t.format||"hex",(h=t.colormap)||(h="jet");if("string"==typeof h){if(h=h.toLowerCase(),!n[h])throw Error(h+" not a supported colorscale");u=n[h]}else{if(!Array.isArray(h))throw Error("unsupported colormap option",h);u=h.slice()}if(u.length>p+1)throw new Error(h+" map requires nshades to be at least size "+u.length);d=Array.isArray(t.alpha)?2!==t.alpha.length?[1,1]:t.alpha.slice():"number"==typeof t.alpha?[t.alpha,t.alpha]:[1,1];e=u.map(function(t){return Math.round(t.index*p)}),d[0]=Math.min(Math.max(d[0],0),1),d[1]=Math.min(Math.max(d[1],0),1);var v=u.map(function(t,e){var r=u[e].index,n=u[e].rgb.slice();return 4===n.length&&n[3]>=0&&n[3]<=1?n:(n[3]=d[0]+(d[1]-d[0])*r,n)}),m=[];for(g=0;g<e.length-1;++g){c=e[g+1]-e[g],r=v[g],l=v[g+1];for(var y=0;y<c;y++){var x=y/c;m.push([Math.round(a(r[0],l[0],x)),Math.round(a(r[1],l[1],x)),Math.round(a(r[2],l[2],x)),a(r[3],l[3],x)])}}m.push(u[u.length-1].rgb.concat(d[1])),"hex"===f?m=m.map(o):"rgbaString"===f?m=m.map(s):"float"===f&&(m=m.map(i));return m}},{"./colorScale":127,lerp:426}],129:[function(t,e,r){"use strict";e.exports=function(t,e,r,i){var o=n(e,r,i);if(0===o){var s=a(n(t,e,r)),c=a(n(t,e,i));if(s===c){if(0===s){var u=l(t,e,r),h=l(t,e,i);return u===h?0:u?1:-1}return 0}return 0===c?s>0?-1:l(t,e,i)?-1:1:0===s?c>0?1:l(t,e,r)?1:-1:a(c-s)}var f=n(t,e,r);if(f>0)return o>0&&n(t,e,i)>0?1:-1;if(f<0)return o>0||n(t,e,i)>0?1:-1;var p=n(t,e,i);return p>0?1:l(t,e,r)?1:-1};var n=t("robust-orientation"),a=t("signum"),i=t("two-sum"),o=t("robust-product"),s=t("robust-sum");function l(t,e,r){var n=i(t[0],-e[0]),a=i(t[1],-e[1]),l=i(r[0],-e[0]),c=i(r[1],-e[1]),u=s(o(n,l),o(a,c));return u[u.length-1]>=0}},{"robust-orientation":508,"robust-product":509,"robust-sum":513,signum:514,"two-sum":542}],130:[function(t,e,r){e.exports=function(t,e){var r=t.length,i=t.length-e.length;if(i)return i;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:return t[0]+t[1]-e[0]-e[1]||n(t[0],t[1])-n(e[0],e[1]);case 3:var o=t[0]+t[1],s=e[0]+e[1];if(i=o+t[2]-(s+e[2]))return i;var l=n(t[0],t[1]),c=n(e[0],e[1]);return n(l,t[2])-n(c,e[2])||n(l+t[2],o)-n(c+e[2],s);case 4:var u=t[0],h=t[1],f=t[2],p=t[3],d=e[0],g=e[1],v=e[2],m=e[3];return u+h+f+p-(d+g+v+m)||n(u,h,f,p)-n(d,g,v,m,d)||n(u+h,u+f,u+p,h+f,h+p,f+p)-n(d+g,d+v,d+m,g+v,g+m,v+m)||n(u+h+f,u+h+p,u+f+p,h+f+p)-n(d+g+v,d+g+m,d+v+m,g+v+m);default:for(var y=t.slice().sort(a),x=e.slice().sort(a),b=0;b<r;++b)if(i=y[b]-x[b])return i;return 0}};var n=Math.min;function a(t,e){return t-e}},{}],131:[function(t,e,r){"use strict";var n=t("compare-cell"),a=t("cell-orientation");e.exports=function(t,e){return n(t,e)||a(t)-a(e)}},{"cell-orientation":114,"compare-cell":130}],132:[function(t,e,r){"use strict";var n=t("./lib/ch1d"),a=t("./lib/ch2d"),i=t("./lib/chnd");e.exports=function(t){var e=t.length;if(0===e)return[];if(1===e)return[[0]];var r=t[0].length;if(0===r)return[];if(1===r)return n(t);if(2===r)return a(t);return i(t,r)}},{"./lib/ch1d":133,"./lib/ch2d":134,"./lib/chnd":135}],133:[function(t,e,r){"use strict";e.exports=function(t){for(var e=0,r=0,n=1;n<t.length;++n)t[n][0]<t[e][0]&&(e=n),t[n][0]>t[r][0]&&(r=n);return e<r?[[e],[r]]:e>r?[[r],[e]]:[[e]]}},{}],134:[function(t,e,r){"use strict";e.exports=function(t){var e=n(t),r=e.length;if(r<=2)return[];for(var a=new Array(r),i=e[r-1],o=0;o<r;++o){var s=e[o];a[o]=[i,s],i=s}return a};var n=t("monotone-convex-hull-2d")},{"monotone-convex-hull-2d":435}],135:[function(t,e,r){"use strict";e.exports=function(t,e){try{return n(t,!0)}catch(s){var r=a(t);if(r.length<=e)return[];var i=function(t,e){for(var r=t.length,n=new Array(r),a=0;a<e.length;++a)n[a]=t[e[a]];for(var i=e.length,a=0;a<r;++a)e.indexOf(a)<0&&(n[i++]=t[a]);return n}(t,r),o=n(i,!0);return function(t,e){for(var r=t.length,n=e.length,a=0;a<r;++a)for(var i=t[a],o=0;o<i.length;++o){var s=i[o];if(s<n)i[o]=e[s];else{s-=n;for(var l=0;l<n;++l)s>=e[l]&&(s+=1);i[o]=s}}return t}(o,r)}};var n=t("incremental-convex-hull"),a=t("affine-hull")},{"affine-hull":65,"incremental-convex-hull":414}],136:[function(t,e,r){e.exports={AFG:"afghan",ALA:"\\b\\wland",ALB:"albania",DZA:"algeria",ASM:"^(?=.*americ).*samoa",AND:"andorra",AGO:"angola",AIA:"anguill?a",ATA:"antarctica",ATG:"antigua",ARG:"argentin",ARM:"armenia",ABW:"^(?!.*bonaire).*\\baruba",AUS:"australia",AUT:"^(?!.*hungary).*austria|\\baustri.*\\bemp",AZE:"azerbaijan",BHS:"bahamas",BHR:"bahrain",BGD:"bangladesh|^(?=.*east).*paki?stan",BRB:"barbados",BLR:"belarus|byelo",BEL:"^(?!.*luxem).*belgium",BLZ:"belize|^(?=.*british).*honduras",BEN:"benin|dahome",BMU:"bermuda",BTN:"bhutan",BOL:"bolivia",BES:"^(?=.*bonaire).*eustatius|^(?=.*carib).*netherlands|\\bbes.?islands",BIH:"herzegovina|bosnia",BWA:"botswana|bechuana",BVT:"bouvet",BRA:"brazil",IOT:"british.?indian.?ocean",BRN:"brunei",BGR:"bulgaria",BFA:"burkina|\\bfaso|upper.?volta",BDI:"burundi",CPV:"verde",KHM:"cambodia|kampuchea|khmer",CMR:"cameroon",CAN:"canada",CYM:"cayman",CAF:"\\bcentral.african.republic",TCD:"\\bchad",CHL:"\\bchile",CHN:"^(?!.*\\bmac)(?!.*\\bhong)(?!.*\\btai)(?!.*\\brep).*china|^(?=.*peo)(?=.*rep).*china",CXR:"christmas",CCK:"\\bcocos|keeling",COL:"colombia",COM:"comoro",COG:"^(?!.*\\bdem)(?!.*\\bd[\\.]?r)(?!.*kinshasa)(?!.*zaire)(?!.*belg)(?!.*l.opoldville)(?!.*free).*\\bcongo",COK:"\\bcook",CRI:"costa.?rica",CIV:"ivoire|ivory",HRV:"croatia",CUB:"\\bcuba",CUW:"^(?!.*bonaire).*\\bcura(c|\xe7)ao",CYP:"cyprus",CSK:"czechoslovakia",CZE:"^(?=.*rep).*czech|czechia|bohemia",COD:"\\bdem.*congo|congo.*\\bdem|congo.*\\bd[\\.]?r|\\bd[\\.]?r.*congo|belgian.?congo|congo.?free.?state|kinshasa|zaire|l.opoldville|drc|droc|rdc",DNK:"denmark",DJI:"djibouti",DMA:"dominica(?!n)",DOM:"dominican.rep",ECU:"ecuador",EGY:"egypt",SLV:"el.?salvador",GNQ:"guine.*eq|eq.*guine|^(?=.*span).*guinea",ERI:"eritrea",EST:"estonia",ETH:"ethiopia|abyssinia",FLK:"falkland|malvinas",FRO:"faroe|faeroe",FJI:"fiji",FIN:"finland",FRA:"^(?!.*\\bdep)(?!.*martinique).*france|french.?republic|\\bgaul",GUF:"^(?=.*french).*guiana",PYF:"french.?polynesia|tahiti",ATF:"french.?southern",GAB:"gabon",GMB:"gambia",GEO:"^(?!.*south).*georgia",DDR:"german.?democratic.?republic|democratic.?republic.*germany|east.germany",DEU:"^(?!.*east).*germany|^(?=.*\\bfed.*\\brep).*german",GHA:"ghana|gold.?coast",GIB:"gibraltar",GRC:"greece|hellenic|hellas",GRL:"greenland",GRD:"grenada",GLP:"guadeloupe",GUM:"\\bguam",GTM:"guatemala",GGY:"guernsey",GIN:"^(?!.*eq)(?!.*span)(?!.*bissau)(?!.*portu)(?!.*new).*guinea",GNB:"bissau|^(?=.*portu).*guinea",GUY:"guyana|british.?guiana",HTI:"haiti",HMD:"heard.*mcdonald",VAT:"holy.?see|vatican|papal.?st",HND:"^(?!.*brit).*honduras",HKG:"hong.?kong",HUN:"^(?!.*austr).*hungary",ISL:"iceland",IND:"india(?!.*ocea)",IDN:"indonesia",IRN:"\\biran|persia",IRQ:"\\biraq|mesopotamia",IRL:"(^ireland)|(^republic.*ireland)",IMN:"^(?=.*isle).*\\bman",ISR:"israel",ITA:"italy",JAM:"jamaica",JPN:"japan",JEY:"jersey",JOR:"jordan",KAZ:"kazak",KEN:"kenya|british.?east.?africa|east.?africa.?prot",KIR:"kiribati",PRK:"^(?=.*democrat|people|north|d.*p.*.r).*\\bkorea|dprk|korea.*(d.*p.*r)",KWT:"kuwait",KGZ:"kyrgyz|kirghiz",LAO:"\\blaos?\\b",LVA:"latvia",LBN:"lebanon",LSO:"lesotho|basuto",LBR:"liberia",LBY:"libya",LIE:"liechtenstein",LTU:"lithuania",LUX:"^(?!.*belg).*luxem",MAC:"maca(o|u)",MDG:"madagascar|malagasy",MWI:"malawi|nyasa",MYS:"malaysia",MDV:"maldive",MLI:"\\bmali\\b",MLT:"\\bmalta",MHL:"marshall",MTQ:"martinique",MRT:"mauritania",MUS:"mauritius",MYT:"\\bmayotte",MEX:"\\bmexic",FSM:"fed.*micronesia|micronesia.*fed",MCO:"monaco",MNG:"mongolia",MNE:"^(?!.*serbia).*montenegro",MSR:"montserrat",MAR:"morocco|\\bmaroc",MOZ:"mozambique",MMR:"myanmar|burma",NAM:"namibia",NRU:"nauru",NPL:"nepal",NLD:"^(?!.*\\bant)(?!.*\\bcarib).*netherlands",ANT:"^(?=.*\\bant).*(nether|dutch)",NCL:"new.?caledonia",NZL:"new.?zealand",NIC:"nicaragua",NER:"\\bniger(?!ia)",NGA:"nigeria",NIU:"niue",NFK:"norfolk",MNP:"mariana",NOR:"norway",OMN:"\\boman|trucial",PAK:"^(?!.*east).*paki?stan",PLW:"palau",PSE:"palestin|\\bgaza|west.?bank",PAN:"panama",PNG:"papua|new.?guinea",PRY:"paraguay",PER:"peru",PHL:"philippines",PCN:"pitcairn",POL:"poland",PRT:"portugal",PRI:"puerto.?rico",QAT:"qatar",KOR:"^(?!.*d.*p.*r)(?!.*democrat)(?!.*people)(?!.*north).*\\bkorea(?!.*d.*p.*r)",MDA:"moldov|b(a|e)ssarabia",REU:"r(e|\xe9)union",ROU:"r(o|u|ou)mania",RUS:"\\brussia|soviet.?union|u\\.?s\\.?s\\.?r|socialist.?republics",RWA:"rwanda",BLM:"barth(e|\xe9)lemy",SHN:"helena",KNA:"kitts|\\bnevis",LCA:"\\blucia",MAF:"^(?=.*collectivity).*martin|^(?=.*france).*martin(?!ique)|^(?=.*french).*martin(?!ique)",SPM:"miquelon",VCT:"vincent",WSM:"^(?!.*amer).*samoa",SMR:"san.?marino",STP:"\\bs(a|\xe3)o.?tom(e|\xe9)",SAU:"\\bsa\\w*.?arabia",SEN:"senegal",SRB:"^(?!.*monte).*serbia",SYC:"seychell",SLE:"sierra",SGP:"singapore",SXM:"^(?!.*martin)(?!.*saba).*maarten",SVK:"^(?!.*cze).*slovak",SVN:"slovenia",SLB:"solomon",SOM:"somali",ZAF:"south.africa|s\\\\..?africa",SGS:"south.?georgia|sandwich",SSD:"\\bs\\w*.?sudan",ESP:"spain",LKA:"sri.?lanka|ceylon",SDN:"^(?!.*\\bs(?!u)).*sudan",SUR:"surinam|dutch.?guiana",SJM:"svalbard",SWZ:"swaziland",SWE:"sweden",CHE:"switz|swiss",SYR:"syria",TWN:"taiwan|taipei|formosa|^(?!.*peo)(?=.*rep).*china",TJK:"tajik",THA:"thailand|\\bsiam",MKD:"macedonia|fyrom",TLS:"^(?=.*leste).*timor|^(?=.*east).*timor",TGO:"togo",TKL:"tokelau",TON:"tonga",TTO:"trinidad|tobago",TUN:"tunisia",TUR:"turkey",TKM:"turkmen",TCA:"turks",TUV:"tuvalu",UGA:"uganda",UKR:"ukrain",ARE:"emirates|^u\\.?a\\.?e\\.?$|united.?arab.?em",GBR:"united.?kingdom|britain|^u\\.?k\\.?$",TZA:"tanzania",USA:"united.?states\\b(?!.*islands)|\\bu\\.?s\\.?a\\.?\\b|^\\s*u\\.?s\\.?\\b(?!.*islands)",UMI:"minor.?outlying.?is",URY:"uruguay",UZB:"uzbek",VUT:"vanuatu|new.?hebrides",VEN:"venezuela",VNM:"^(?!.*republic).*viet.?nam|^(?=.*socialist).*viet.?nam",VGB:"^(?=.*\\bu\\.?\\s?k).*virgin|^(?=.*brit).*virgin|^(?=.*kingdom).*virgin",VIR:"^(?=.*\\bu\\.?\\s?s).*virgin|^(?=.*states).*virgin",WLF:"futuna|wallis",ESH:"western.sahara",YEM:"^(?!.*arab)(?!.*north)(?!.*sana)(?!.*peo)(?!.*dem)(?!.*south)(?!.*aden)(?!.*\\bp\\.?d\\.?r).*yemen",YMD:"^(?=.*peo).*yemen|^(?!.*rep)(?=.*dem).*yemen|^(?=.*south).*yemen|^(?=.*aden).*yemen|^(?=.*\\bp\\.?d\\.?r).*yemen",YUG:"yugoslavia",ZMB:"zambia|northern.?rhodesia",EAZ:"zanzibar",ZWE:"zimbabwe|^(?!.*northern).*rhodesia"}},{}],137:[function(t,e,r){e.exports=["xx-small","x-small","small","medium","large","x-large","xx-large","larger","smaller"]},{}],138:[function(t,e,r){e.exports=["normal","condensed","semi-condensed","extra-condensed","ultra-condensed","expanded","semi-expanded","extra-expanded","ultra-expanded"]},{}],139:[function(t,e,r){e.exports=["normal","italic","oblique"]},{}],140:[function(t,e,r){e.exports=["normal","bold","bolder","lighter","100","200","300","400","500","600","700","800","900"]},{}],141:[function(t,e,r){"use strict";e.exports={parse:t("./parse"),stringify:t("./stringify")}},{"./parse":143,"./stringify":144}],142:[function(t,e,r){"use strict";var n=t("css-font-size-keywords");e.exports={isSize:function(t){return/^[\d\.]/.test(t)||-1!==t.indexOf("/")||-1!==n.indexOf(t)}}},{"css-font-size-keywords":137}],143:[function(t,e,r){"use strict";var n=t("unquote"),a=t("css-global-keywords"),i=t("css-system-font-keywords"),o=t("css-font-weight-keywords"),s=t("css-font-style-keywords"),l=t("css-font-stretch-keywords"),c=t("string-split-by"),u=t("./lib/util").isSize;e.exports=f;var h=f.cache={};function f(t){if("string"!=typeof t)throw new Error("Font argument must be a string.");if(h[t])return h[t];if(""===t)throw new Error("Cannot parse an empty string.");if(-1!==i.indexOf(t))return h[t]={system:t};for(var e,r={style:"normal",variant:"normal",weight:"normal",stretch:"normal",lineHeight:"normal",size:"1rem",family:["serif"]},f=c(t,/\s+/);e=f.shift();){if(-1!==a.indexOf(e))return["style","variant","weight","stretch"].forEach(function(t){r[t]=e}),h[t]=r;if(-1===s.indexOf(e))if("normal"!==e&&"small-caps"!==e)if(-1===l.indexOf(e)){if(-1===o.indexOf(e)){if(u(e)){var d=c(e,"/");if(r.size=d[0],null!=d[1]?r.lineHeight=p(d[1]):"/"===f[0]&&(f.shift(),r.lineHeight=p(f.shift())),!f.length)throw new Error("Missing required font-family.");return r.family=c(f.join(" "),/\s*,\s*/).map(n),h[t]=r}throw new Error("Unknown or unsupported font token: "+e)}r.weight=e}else r.stretch=e;else r.variant=e;else r.style=e}throw new Error("Missing required font-size.")}function p(t){var e=parseFloat(t);return e.toString()===t?e:t}},{"./lib/util":142,"css-font-stretch-keywords":138,"css-font-style-keywords":139,"css-font-weight-keywords":140,"css-global-keywords":145,"css-system-font-keywords":146,"string-split-by":527,unquote:546}],144:[function(t,e,r){"use strict";var n=t("pick-by-alias"),a=t("./lib/util").isSize,i=g(t("css-global-keywords")),o=g(t("css-system-font-keywords")),s=g(t("css-font-weight-keywords")),l=g(t("css-font-style-keywords")),c=g(t("css-font-stretch-keywords")),u={normal:1,"small-caps":1},h={serif:1,"sans-serif":1,monospace:1,cursive:1,fantasy:1,"system-ui":1},f="1rem",p="serif";function d(t,e){if(t&&!e[t]&&!i[t])throw Error("Unknown keyword `"+t+"`");return t}function g(t){for(var e={},r=0;r<t.length;r++)e[t[r]]=1;return e}e.exports=function(t){if((t=n(t,{style:"style fontstyle fontStyle font-style slope distinction",variant:"variant font-variant fontVariant fontvariant var capitalization",weight:"weight w font-weight fontWeight fontweight",stretch:"stretch font-stretch fontStretch fontstretch width",size:"size s font-size fontSize fontsize height em emSize",lineHeight:"lh line-height lineHeight lineheight leading",family:"font family fontFamily font-family fontfamily type typeface face",system:"system reserved default global"})).system)return t.system&&d(t.system,o),t.system;if(d(t.style,l),d(t.variant,u),d(t.weight,s),d(t.stretch,c),null==t.size&&(t.size=f),"number"==typeof t.size&&(t.size+="px"),!a)throw Error("Bad size value `"+t.size+"`");t.family||(t.family=p),Array.isArray(t.family)&&(t.family.length||(t.family=[p]),t.family=t.family.map(function(t){return h[t]?t:'"'+t+'"'}).join(", "));var e=[];return e.push(t.style),t.variant!==t.style&&e.push(t.variant),t.weight!==t.variant&&t.weight!==t.style&&e.push(t.weight),t.stretch!==t.weight&&t.stretch!==t.variant&&t.stretch!==t.style&&e.push(t.stretch),e.push(t.size+(null==t.lineHeight||"normal"===t.lineHeight||t.lineHeight+""=="1"?"":"/"+t.lineHeight)),e.push(t.family),e.filter(Boolean).join(" ")}},{"./lib/util":142,"css-font-stretch-keywords":138,"css-font-style-keywords":139,"css-font-weight-keywords":140,"css-global-keywords":145,"css-system-font-keywords":146,"pick-by-alias":466}],145:[function(t,e,r){e.exports=["inherit","initial","unset"]},{}],146:[function(t,e,r){e.exports=["caption","icon","menu","message-box","small-caption","status-bar"]},{}],147:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a,i){var o=a-1,s=a*a,l=o*o,c=(1+2*a)*l,u=a*l,h=s*(3-2*a),f=s*o;if(t.length){i||(i=new Array(t.length));for(var p=t.length-1;p>=0;--p)i[p]=c*t[p]+u*e[p]+h*r[p]+f*n[p];return i}return c*t+u*e+h*r+f*n},e.exports.derivative=function(t,e,r,n,a,i){var o=6*a*a-6*a,s=3*a*a-4*a+1,l=-6*a*a+6*a,c=3*a*a-2*a;if(t.length){i||(i=new Array(t.length));for(var u=t.length-1;u>=0;--u)i[u]=o*t[u]+s*e[u]+l*r[u]+c*n[u];return i}return o*t+s*e+l*r[u]+c*n}},{}],148:[function(t,e,r){"use strict";var n=t("./lib/thunk.js");function a(){this.argTypes=[],this.shimArgs=[],this.arrayArgs=[],this.arrayBlockIndices=[],this.scalarArgs=[],this.offsetArgs=[],this.offsetArgIndex=[],this.indexArgs=[],this.shapeArgs=[],this.funcName="",this.pre=null,this.body=null,this.post=null,this.debug=!1}e.exports=function(t){var e=new a;e.pre=t.pre,e.body=t.body,e.post=t.post;var r=t.args.slice(0);e.argTypes=r;for(var i=0;i<r.length;++i){var o=r[i];if("array"===o||"object"==typeof o&&o.blockIndices){if(e.argTypes[i]="array",e.arrayArgs.push(i),e.arrayBlockIndices.push(o.blockIndices?o.blockIndices:0),e.shimArgs.push("array"+i),i<e.pre.args.length&&e.pre.args[i].count>0)throw new Error("cwise: pre() block may not reference array args");if(i<e.post.args.length&&e.post.args[i].count>0)throw new Error("cwise: post() block may not reference array args")}else if("scalar"===o)e.scalarArgs.push(i),e.shimArgs.push("scalar"+i);else if("index"===o){if(e.indexArgs.push(i),i<e.pre.args.length&&e.pre.args[i].count>0)throw new Error("cwise: pre() block may not reference array index");if(i<e.body.args.length&&e.body.args[i].lvalue)throw new Error("cwise: body() block may not write to array index");if(i<e.post.args.length&&e.post.args[i].count>0)throw new Error("cwise: post() block may not reference array index")}else if("shape"===o){if(e.shapeArgs.push(i),i<e.pre.args.length&&e.pre.args[i].lvalue)throw new Error("cwise: pre() block may not write to array shape");if(i<e.body.args.length&&e.body.args[i].lvalue)throw new Error("cwise: body() block may not write to array shape");if(i<e.post.args.length&&e.post.args[i].lvalue)throw new Error("cwise: post() block may not write to array shape")}else{if("object"!=typeof o||!o.offset)throw new Error("cwise: Unknown argument type "+r[i]);e.argTypes[i]="offset",e.offsetArgs.push({array:o.array,offset:o.offset}),e.offsetArgIndex.push(i)}}if(e.arrayArgs.length<=0)throw new Error("cwise: No array arguments specified");if(e.pre.args.length>r.length)throw new Error("cwise: Too many arguments in pre() block");if(e.body.args.length>r.length)throw new Error("cwise: Too many arguments in body() block");if(e.post.args.length>r.length)throw new Error("cwise: Too many arguments in post() block");return e.debug=!!t.printCode||!!t.debug,e.funcName=t.funcName||"cwise",e.blockSize=t.blockSize||64,n(e)}},{"./lib/thunk.js":150}],149:[function(t,e,r){"use strict";var n=t("uniq");function a(t,e,r){var n,a,i=t.length,o=e.arrayArgs.length,s=e.indexArgs.length>0,l=[],c=[],u=0,h=0;for(n=0;n<i;++n)c.push(["i",n,"=0"].join(""));for(a=0;a<o;++a)for(n=0;n<i;++n)h=u,u=t[n],0===n?c.push(["d",a,"s",n,"=t",a,"p",u].join("")):c.push(["d",a,"s",n,"=(t",a,"p",u,"-s",h,"*t",a,"p",h,")"].join(""));for(c.length>0&&l.push("var "+c.join(",")),n=i-1;n>=0;--n)u=t[n],l.push(["for(i",n,"=0;i",n,"<s",u,";++i",n,"){"].join(""));for(l.push(r),n=0;n<i;++n){for(h=u,u=t[n],a=0;a<o;++a)l.push(["p",a,"+=d",a,"s",n].join(""));s&&(n>0&&l.push(["index[",h,"]-=s",h].join("")),l.push(["++index[",u,"]"].join(""))),l.push("}")}return l.join("\n")}function i(t,e,r){for(var n=t.body,a=[],i=[],o=0;o<t.args.length;++o){var s=t.args[o];if(!(s.count<=0)){var l=new RegExp(s.name,"g"),c="",u=e.arrayArgs.indexOf(o);switch(e.argTypes[o]){case"offset":var h=e.offsetArgIndex.indexOf(o);u=e.offsetArgs[h].array,c="+q"+h;case"array":c="p"+u+c;var f="l"+o,p="a"+u;if(0===e.arrayBlockIndices[u])1===s.count?"generic"===r[u]?s.lvalue?(a.push(["var ",f,"=",p,".get(",c,")"].join("")),n=n.replace(l,f),i.push([p,".set(",c,",",f,")"].join(""))):n=n.replace(l,[p,".get(",c,")"].join("")):n=n.replace(l,[p,"[",c,"]"].join("")):"generic"===r[u]?(a.push(["var ",f,"=",p,".get(",c,")"].join("")),n=n.replace(l,f),s.lvalue&&i.push([p,".set(",c,",",f,")"].join(""))):(a.push(["var ",f,"=",p,"[",c,"]"].join("")),n=n.replace(l,f),s.lvalue&&i.push([p,"[",c,"]=",f].join("")));else{for(var d=[s.name],g=[c],v=0;v<Math.abs(e.arrayBlockIndices[u]);v++)d.push("\\s*\\[([^\\]]+)\\]"),g.push("$"+(v+1)+"*t"+u+"b"+v);if(l=new RegExp(d.join(""),"g"),c=g.join("+"),"generic"===r[u])throw new Error("cwise: Generic arrays not supported in combination with blocks!");n=n.replace(l,[p,"[",c,"]"].join(""))}break;case"scalar":n=n.replace(l,"Y"+e.scalarArgs.indexOf(o));break;case"index":n=n.replace(l,"index");break;case"shape":n=n.replace(l,"shape")}}}return[a.join("\n"),n,i.join("\n")].join("\n").trim()}function o(t){for(var e=new Array(t.length),r=!0,n=0;n<t.length;++n){var a=t[n],i=a.match(/\d+/);i=i?i[0]:"",0===a.charAt(0)?e[n]="u"+a.charAt(1)+i:e[n]=a.charAt(0)+i,n>0&&(r=r&&e[n]===e[n-1])}return r?e[0]:e.join("")}e.exports=function(t,e){for(var r=e[1].length-Math.abs(t.arrayBlockIndices[0])|0,s=new Array(t.arrayArgs.length),l=new Array(t.arrayArgs.length),c=0;c<t.arrayArgs.length;++c)l[c]=e[2*c],s[c]=e[2*c+1];var u=[],h=[],f=[],p=[],d=[];for(c=0;c<t.arrayArgs.length;++c){t.arrayBlockIndices[c]<0?(f.push(0),p.push(r),u.push(r),h.push(r+t.arrayBlockIndices[c])):(f.push(t.arrayBlockIndices[c]),p.push(t.arrayBlockIndices[c]+r),u.push(0),h.push(t.arrayBlockIndices[c]));for(var g=[],v=0;v<s[c].length;v++)f[c]<=s[c][v]&&s[c][v]<p[c]&&g.push(s[c][v]-f[c]);d.push(g)}var m=["SS"],y=["'use strict'"],x=[];for(v=0;v<r;++v)x.push(["s",v,"=SS[",v,"]"].join(""));for(c=0;c<t.arrayArgs.length;++c){for(m.push("a"+c),m.push("t"+c),m.push("p"+c),v=0;v<r;++v)x.push(["t",c,"p",v,"=t",c,"[",f[c]+v,"]"].join(""));for(v=0;v<Math.abs(t.arrayBlockIndices[c]);++v)x.push(["t",c,"b",v,"=t",c,"[",u[c]+v,"]"].join(""))}for(c=0;c<t.scalarArgs.length;++c)m.push("Y"+c);if(t.shapeArgs.length>0&&x.push("shape=SS.slice(0)"),t.indexArgs.length>0){var b=new Array(r);for(c=0;c<r;++c)b[c]="0";x.push(["index=[",b.join(","),"]"].join(""))}for(c=0;c<t.offsetArgs.length;++c){var _=t.offsetArgs[c],w=[];for(v=0;v<_.offset.length;++v)0!==_.offset[v]&&(1===_.offset[v]?w.push(["t",_.array,"p",v].join("")):w.push([_.offset[v],"*t",_.array,"p",v].join("")));0===w.length?x.push("q"+c+"=0"):x.push(["q",c,"=",w.join("+")].join(""))}var k=n([].concat(t.pre.thisVars).concat(t.body.thisVars).concat(t.post.thisVars));for((x=x.concat(k)).length>0&&y.push("var "+x.join(",")),c=0;c<t.arrayArgs.length;++c)y.push("p"+c+"|=0");t.pre.body.length>3&&y.push(i(t.pre,t,l));var T=i(t.body,t,l),M=function(t){for(var e=0,r=t[0].length;e<r;){for(var n=1;n<t.length;++n)if(t[n][e]!==t[0][e])return e;++e}return e}(d);M<r?y.push(function(t,e,r,n){for(var i=e.length,o=r.arrayArgs.length,s=r.blockSize,l=r.indexArgs.length>0,c=[],u=0;u<o;++u)c.push(["var offset",u,"=p",u].join(""));for(u=t;u<i;++u)c.push(["for(var j"+u+"=SS[",e[u],"]|0;j",u,">0;){"].join("")),c.push(["if(j",u,"<",s,"){"].join("")),c.push(["s",e[u],"=j",u].join("")),c.push(["j",u,"=0"].join("")),c.push(["}else{s",e[u],"=",s].join("")),c.push(["j",u,"-=",s,"}"].join("")),l&&c.push(["index[",e[u],"]=j",u].join(""));for(u=0;u<o;++u){for(var h=["offset"+u],f=t;f<i;++f)h.push(["j",f,"*t",u,"p",e[f]].join(""));c.push(["p",u,"=(",h.join("+"),")"].join(""))}for(c.push(a(e,r,n)),u=t;u<i;++u)c.push("}");return c.join("\n")}(M,d[0],t,T)):y.push(a(d[0],t,T)),t.post.body.length>3&&y.push(i(t.post,t,l)),t.debug&&console.log("-----Generated cwise routine for ",e,":\n"+y.join("\n")+"\n----------");var A=[t.funcName||"unnamed","_cwise_loop_",s[0].join("s"),"m",M,o(l)].join("");return new Function(["function ",A,"(",m.join(","),"){",y.join("\n"),"} return ",A].join(""))()}},{uniq:545}],150:[function(t,e,r){"use strict";var n=t("./compile.js");e.exports=function(t){var e=["'use strict'","var CACHED={}"],r=[],a=t.funcName+"_cwise_thunk";e.push(["return function ",a,"(",t.shimArgs.join(","),"){"].join(""));for(var i=[],o=[],s=[["array",t.arrayArgs[0],".shape.slice(",Math.max(0,t.arrayBlockIndices[0]),t.arrayBlockIndices[0]<0?","+t.arrayBlockIndices[0]+")":")"].join("")],l=[],c=[],u=0;u<t.arrayArgs.length;++u){var h=t.arrayArgs[u];r.push(["t",h,"=array",h,".dtype,","r",h,"=array",h,".order"].join("")),i.push("t"+h),i.push("r"+h),o.push("t"+h),o.push("r"+h+".join()"),s.push("array"+h+".data"),s.push("array"+h+".stride"),s.push("array"+h+".offset|0"),u>0&&(l.push("array"+t.arrayArgs[0]+".shape.length===array"+h+".shape.length+"+(Math.abs(t.arrayBlockIndices[0])-Math.abs(t.arrayBlockIndices[u]))),c.push("array"+t.arrayArgs[0]+".shape[shapeIndex+"+Math.max(0,t.arrayBlockIndices[0])+"]===array"+h+".shape[shapeIndex+"+Math.max(0,t.arrayBlockIndices[u])+"]"))}for(t.arrayArgs.length>1&&(e.push("if (!("+l.join(" && ")+")) throw new Error('cwise: Arrays do not all have the same dimensionality!')"),e.push("for(var shapeIndex=array"+t.arrayArgs[0]+".shape.length-"+Math.abs(t.arrayBlockIndices[0])+"; shapeIndex--\x3e0;) {"),e.push("if (!("+c.join(" && ")+")) throw new Error('cwise: Arrays do not all have the same shape!')"),e.push("}")),u=0;u<t.scalarArgs.length;++u)s.push("scalar"+t.scalarArgs[u]);return r.push(["type=[",o.join(","),"].join()"].join("")),r.push("proc=CACHED[type]"),e.push("var "+r.join(",")),e.push(["if(!proc){","CACHED[type]=proc=compile([",i.join(","),"])}","return proc(",s.join(","),")}"].join("")),t.debug&&console.log("-----Generated thunk:\n"+e.join("\n")+"\n----------"),new Function("compile",e.join("\n"))(n.bind(void 0,t))}},{"./compile.js":149}],151:[function(t,e,r){e.exports=t("cwise-compiler")},{"cwise-compiler":148}],152:[function(t,e,r){"use strict";var n,a=t("es5-ext/object/copy"),i=t("es5-ext/object/normalize-options"),o=t("es5-ext/object/valid-callable"),s=t("es5-ext/object/map"),l=t("es5-ext/object/valid-callable"),c=t("es5-ext/object/valid-value"),u=Function.prototype.bind,h=Object.defineProperty,f=Object.prototype.hasOwnProperty;n=function(t,e,r){var n,i=c(e)&&l(e.value);return delete(n=a(e)).writable,delete n.value,n.get=function(){return!r.overwriteDefinition&&f.call(this,t)?i:(e.value=u.call(i,r.resolveContext?r.resolveContext(this):this),h(this,t,e),this[t])},n},e.exports=function(t){var e=i(arguments[1]);return null!=e.resolveContext&&o(e.resolveContext),s(t,function(t,r){return n(r,t,e)})}},{"es5-ext/object/copy":192,"es5-ext/object/map":201,"es5-ext/object/normalize-options":202,"es5-ext/object/valid-callable":206,"es5-ext/object/valid-value":208}],153:[function(t,e,r){"use strict";var n=t("es5-ext/object/assign"),a=t("es5-ext/object/normalize-options"),i=t("es5-ext/object/is-callable"),o=t("es5-ext/string/#/contains");(e.exports=function(t,e){var r,i,s,l,c;return arguments.length<2||"string"!=typeof t?(l=e,e=t,t=null):l=arguments[2],null==t?(r=s=!0,i=!1):(r=o.call(t,"c"),i=o.call(t,"e"),s=o.call(t,"w")),c={value:e,configurable:r,enumerable:i,writable:s},l?n(a(l),c):c}).gs=function(t,e,r){var s,l,c,u;return"string"!=typeof t?(c=r,r=e,e=t,t=null):c=arguments[3],null==e?e=void 0:i(e)?null==r?r=void 0:i(r)||(c=r,r=void 0):(c=e,e=r=void 0),null==t?(s=!0,l=!1):(s=o.call(t,"c"),l=o.call(t,"e")),u={get:e,set:r,configurable:s,enumerable:l},c?n(a(c),u):u}},{"es5-ext/object/assign":189,"es5-ext/object/is-callable":195,"es5-ext/object/normalize-options":202,"es5-ext/string/#/contains":209}],154:[function(t,e,r){var n;n=this,function(t){"use strict";function e(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function r(t){var r;return 1===t.length&&(r=t,t=function(t,n){return e(r(t),n)}),{left:function(e,r,n,a){for(null==n&&(n=0),null==a&&(a=e.length);n<a;){var i=n+a>>>1;t(e[i],r)<0?n=i+1:a=i}return n},right:function(e,r,n,a){for(null==n&&(n=0),null==a&&(a=e.length);n<a;){var i=n+a>>>1;t(e[i],r)>0?a=i:n=i+1}return n}}}var n=r(e),a=n.right,i=n.left;function o(t,e){return[t,e]}function s(t){return null===t?NaN:+t}function l(t,e){var r,n,a=t.length,i=0,o=-1,l=0,c=0;if(null==e)for(;++o<a;)isNaN(r=s(t[o]))||(c+=(n=r-l)*(r-(l+=n/++i)));else for(;++o<a;)isNaN(r=s(e(t[o],o,t)))||(c+=(n=r-l)*(r-(l+=n/++i)));if(i>1)return c/(i-1)}function c(t,e){var r=l(t,e);return r?Math.sqrt(r):r}function u(t,e){var r,n,a,i=t.length,o=-1;if(null==e){for(;++o<i;)if(null!=(r=t[o])&&r>=r)for(n=a=r;++o<i;)null!=(r=t[o])&&(n>r&&(n=r),a<r&&(a=r))}else for(;++o<i;)if(null!=(r=e(t[o],o,t))&&r>=r)for(n=a=r;++o<i;)null!=(r=e(t[o],o,t))&&(n>r&&(n=r),a<r&&(a=r));return[n,a]}var h=Array.prototype,f=h.slice,p=h.map;function d(t){return function(){return t}}function g(t){return t}function v(t,e,r){t=+t,e=+e,r=(a=arguments.length)<2?(e=t,t=0,1):a<3?1:+r;for(var n=-1,a=0|Math.max(0,Math.ceil((e-t)/r)),i=new Array(a);++n<a;)i[n]=t+n*r;return i}var m=Math.sqrt(50),y=Math.sqrt(10),x=Math.sqrt(2);function b(t,e,r){var n=(e-t)/Math.max(0,r),a=Math.floor(Math.log(n)/Math.LN10),i=n/Math.pow(10,a);return a>=0?(i>=m?10:i>=y?5:i>=x?2:1)*Math.pow(10,a):-Math.pow(10,-a)/(i>=m?10:i>=y?5:i>=x?2:1)}function _(t,e,r){var n=Math.abs(e-t)/Math.max(0,r),a=Math.pow(10,Math.floor(Math.log(n)/Math.LN10)),i=n/a;return i>=m?a*=10:i>=y?a*=5:i>=x&&(a*=2),e<t?-a:a}function w(t){return Math.ceil(Math.log(t.length)/Math.LN2)+1}function k(t,e,r){if(null==r&&(r=s),n=t.length){if((e=+e)<=0||n<2)return+r(t[0],0,t);if(e>=1)return+r(t[n-1],n-1,t);var n,a=(n-1)*e,i=Math.floor(a),o=+r(t[i],i,t);return o+(+r(t[i+1],i+1,t)-o)*(a-i)}}function T(t,e){var r,n,a=t.length,i=-1;if(null==e){for(;++i<a;)if(null!=(r=t[i])&&r>=r)for(n=r;++i<a;)null!=(r=t[i])&&n>r&&(n=r)}else for(;++i<a;)if(null!=(r=e(t[i],i,t))&&r>=r)for(n=r;++i<a;)null!=(r=e(t[i],i,t))&&n>r&&(n=r);return n}function M(t){if(!(a=t.length))return[];for(var e=-1,r=T(t,A),n=new Array(r);++e<r;)for(var a,i=-1,o=n[e]=new Array(a);++i<a;)o[i]=t[i][e];return n}function A(t){return t.length}t.bisect=a,t.bisectRight=a,t.bisectLeft=i,t.ascending=e,t.bisector=r,t.cross=function(t,e,r){var n,a,i,s,l=t.length,c=e.length,u=new Array(l*c);for(null==r&&(r=o),n=i=0;n<l;++n)for(s=t[n],a=0;a<c;++a,++i)u[i]=r(s,e[a]);return u},t.descending=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},t.deviation=c,t.extent=u,t.histogram=function(){var t=g,e=u,r=w;function n(n){var i,o,s=n.length,l=new Array(s);for(i=0;i<s;++i)l[i]=t(n[i],i,n);var c=e(l),u=c[0],h=c[1],f=r(l,u,h);Array.isArray(f)||(f=_(u,h,f),f=v(Math.ceil(u/f)*f,h,f));for(var p=f.length;f[0]<=u;)f.shift(),--p;for(;f[p-1]>h;)f.pop(),--p;var d,g=new Array(p+1);for(i=0;i<=p;++i)(d=g[i]=[]).x0=i>0?f[i-1]:u,d.x1=i<p?f[i]:h;for(i=0;i<s;++i)u<=(o=l[i])&&o<=h&&g[a(f,o,0,p)].push(n[i]);return g}return n.value=function(e){return arguments.length?(t="function"==typeof e?e:d(e),n):t},n.domain=function(t){return arguments.length?(e="function"==typeof t?t:d([t[0],t[1]]),n):e},n.thresholds=function(t){return arguments.length?(r="function"==typeof t?t:Array.isArray(t)?d(f.call(t)):d(t),n):r},n},t.thresholdFreedmanDiaconis=function(t,r,n){return t=p.call(t,s).sort(e),Math.ceil((n-r)/(2*(k(t,.75)-k(t,.25))*Math.pow(t.length,-1/3)))},t.thresholdScott=function(t,e,r){return Math.ceil((r-e)/(3.5*c(t)*Math.pow(t.length,-1/3)))},t.thresholdSturges=w,t.max=function(t,e){var r,n,a=t.length,i=-1;if(null==e){for(;++i<a;)if(null!=(r=t[i])&&r>=r)for(n=r;++i<a;)null!=(r=t[i])&&r>n&&(n=r)}else for(;++i<a;)if(null!=(r=e(t[i],i,t))&&r>=r)for(n=r;++i<a;)null!=(r=e(t[i],i,t))&&r>n&&(n=r);return n},t.mean=function(t,e){var r,n=t.length,a=n,i=-1,o=0;if(null==e)for(;++i<n;)isNaN(r=s(t[i]))?--a:o+=r;else for(;++i<n;)isNaN(r=s(e(t[i],i,t)))?--a:o+=r;if(a)return o/a},t.median=function(t,r){var n,a=t.length,i=-1,o=[];if(null==r)for(;++i<a;)isNaN(n=s(t[i]))||o.push(n);else for(;++i<a;)isNaN(n=s(r(t[i],i,t)))||o.push(n);return k(o.sort(e),.5)},t.merge=function(t){for(var e,r,n,a=t.length,i=-1,o=0;++i<a;)o+=t[i].length;for(r=new Array(o);--a>=0;)for(e=(n=t[a]).length;--e>=0;)r[--o]=n[e];return r},t.min=T,t.pairs=function(t,e){null==e&&(e=o);for(var r=0,n=t.length-1,a=t[0],i=new Array(n<0?0:n);r<n;)i[r]=e(a,a=t[++r]);return i},t.permute=function(t,e){for(var r=e.length,n=new Array(r);r--;)n[r]=t[e[r]];return n},t.quantile=k,t.range=v,t.scan=function(t,r){if(n=t.length){var n,a,i=0,o=0,s=t[o];for(null==r&&(r=e);++i<n;)(r(a=t[i],s)<0||0!==r(s,s))&&(s=a,o=i);return 0===r(s,s)?o:void 0}},t.shuffle=function(t,e,r){for(var n,a,i=(null==r?t.length:r)-(e=null==e?0:+e);i;)a=Math.random()*i--|0,n=t[i+e],t[i+e]=t[a+e],t[a+e]=n;return t},t.sum=function(t,e){var r,n=t.length,a=-1,i=0;if(null==e)for(;++a<n;)(r=+t[a])&&(i+=r);else for(;++a<n;)(r=+e(t[a],a,t))&&(i+=r);return i},t.ticks=function(t,e,r){var n,a,i,o,s=-1;if(r=+r,(t=+t)==(e=+e)&&r>0)return[t];if((n=e<t)&&(a=t,t=e,e=a),0===(o=b(t,e,r))||!isFinite(o))return[];if(o>0)for(t=Math.ceil(t/o),e=Math.floor(e/o),i=new Array(a=Math.ceil(e-t+1));++s<a;)i[s]=(t+s)*o;else for(t=Math.floor(t*o),e=Math.ceil(e*o),i=new Array(a=Math.ceil(t-e+1));++s<a;)i[s]=(t-s)/o;return n&&i.reverse(),i},t.tickIncrement=b,t.tickStep=_,t.transpose=M,t.variance=l,t.zip=function(){return M(arguments)},Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],155:[function(t,e,r){var n;n=this,function(t){"use strict";function e(){}function r(t,r){var n=new e;if(t instanceof e)t.each(function(t,e){n.set(e,t)});else if(Array.isArray(t)){var a,i=-1,o=t.length;if(null==r)for(;++i<o;)n.set(i,t[i]);else for(;++i<o;)n.set(r(a=t[i],i,t),a)}else if(t)for(var s in t)n.set(s,t[s]);return n}function n(){return{}}function a(t,e,r){t[e]=r}function i(){return r()}function o(t,e,r){t.set(e,r)}function s(){}e.prototype=r.prototype={constructor:e,has:function(t){return"$"+t in this},get:function(t){return this["$"+t]},set:function(t,e){return this["$"+t]=e,this},remove:function(t){var e="$"+t;return e in this&&delete this[e]},clear:function(){for(var t in this)"$"===t[0]&&delete this[t]},keys:function(){var t=[];for(var e in this)"$"===e[0]&&t.push(e.slice(1));return t},values:function(){var t=[];for(var e in this)"$"===e[0]&&t.push(this[e]);return t},entries:function(){var t=[];for(var e in this)"$"===e[0]&&t.push({key:e.slice(1),value:this[e]});return t},size:function(){var t=0;for(var e in this)"$"===e[0]&&++t;return t},empty:function(){for(var t in this)if("$"===t[0])return!1;return!0},each:function(t){for(var e in this)"$"===e[0]&&t(this[e],e.slice(1),this)}};var l=r.prototype;function c(t,e){var r=new s;if(t instanceof s)t.each(function(t){r.add(t)});else if(t){var n=-1,a=t.length;if(null==e)for(;++n<a;)r.add(t[n]);else for(;++n<a;)r.add(e(t[n],n,t))}return r}s.prototype=c.prototype={constructor:s,has:l.has,add:function(t){return this["$"+(t+="")]=t,this},remove:l.remove,clear:l.clear,values:l.keys,size:l.size,empty:l.empty,each:l.each},t.nest=function(){var t,e,s,l=[],c=[];function u(n,a,i,o){if(a>=l.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var s,c,h,f=-1,p=n.length,d=l[a++],g=r(),v=i();++f<p;)(h=g.get(s=d(c=n[f])+""))?h.push(c):g.set(s,[c]);return g.each(function(t,e){o(v,e,u(t,a,i,o))}),v}return s={object:function(t){return u(t,0,n,a)},map:function(t){return u(t,0,i,o)},entries:function(t){return function t(r,n){if(++n>l.length)return r;var a,i=c[n-1];return null!=e&&n>=l.length?a=r.entries():(a=[],r.each(function(e,r){a.push({key:r,values:t(e,n)})})),null!=i?a.sort(function(t,e){return i(t.key,e.key)}):a}(u(t,0,i,o),0)},key:function(t){return l.push(t),s},sortKeys:function(t){return c[l.length-1]=t,s},sortValues:function(e){return t=e,s},rollup:function(t){return e=t,s}}},t.set=c,t.map=r,t.keys=function(t){var e=[];for(var r in t)e.push(r);return e},t.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},t.entries=function(t){var e=[];for(var r in t)e.push({key:r,value:t[r]});return e},Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],156:[function(t,e,r){var n;n=this,function(t){"use strict";function e(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function r(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}function n(){}var a="\\s*([+-]?\\d+)\\s*",i="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",o="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",s=/^#([0-9a-f]{3,8})$/,l=new RegExp("^rgb\\("+[a,a,a]+"\\)$"),c=new RegExp("^rgb\\("+[o,o,o]+"\\)$"),u=new RegExp("^rgba\\("+[a,a,a,i]+"\\)$"),h=new RegExp("^rgba\\("+[o,o,o,i]+"\\)$"),f=new RegExp("^hsl\\("+[i,o,o]+"\\)$"),p=new RegExp("^hsla\\("+[i,o,o,i]+"\\)$"),d={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function g(){return this.rgb().formatHex()}function v(){return this.rgb().formatRgb()}function m(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=s.exec(t))?(r=e[1].length,e=parseInt(e[1],16),6===r?y(e):3===r?new w(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===r?new w(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===r?new w(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=l.exec(t))?new w(e[1],e[2],e[3],1):(e=c.exec(t))?new w(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=u.exec(t))?x(e[1],e[2],e[3],e[4]):(e=h.exec(t))?x(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=f.exec(t))?A(e[1],e[2]/100,e[3]/100,1):(e=p.exec(t))?A(e[1],e[2]/100,e[3]/100,e[4]):d.hasOwnProperty(t)?y(d[t]):"transparent"===t?new w(NaN,NaN,NaN,0):null}function y(t){return new w(t>>16&255,t>>8&255,255&t,1)}function x(t,e,r,n){return n<=0&&(t=e=r=NaN),new w(t,e,r,n)}function b(t){return t instanceof n||(t=m(t)),t?new w((t=t.rgb()).r,t.g,t.b,t.opacity):new w}function _(t,e,r,n){return 1===arguments.length?b(t):new w(t,e,r,null==n?1:n)}function w(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function k(){return"#"+M(this.r)+M(this.g)+M(this.b)}function T(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function M(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function A(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new L(t,e,r,n)}function S(t){if(t instanceof L)return new L(t.h,t.s,t.l,t.opacity);if(t instanceof n||(t=m(t)),!t)return new L;if(t instanceof L)return t;var e=(t=t.rgb()).r/255,r=t.g/255,a=t.b/255,i=Math.min(e,r,a),o=Math.max(e,r,a),s=NaN,l=o-i,c=(o+i)/2;return l?(s=e===o?(r-a)/l+6*(r<a):r===o?(a-e)/l+2:(e-r)/l+4,l/=c<.5?o+i:2-o-i,s*=60):l=c>0&&c<1?0:s,new L(s,l,c,t.opacity)}function E(t,e,r,n){return 1===arguments.length?S(t):new L(t,e,r,null==n?1:n)}function L(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function C(t,e,r){return 255*(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)}e(n,m,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:g,formatHex:g,formatHsl:function(){return S(this).formatHsl()},formatRgb:v,toString:v}),e(w,_,r(n,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new w(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new w(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:k,formatHex:k,formatRgb:T,toString:T})),e(L,E,r(n,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new L(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new L(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,a=2*r-n;return new w(C(t>=240?t-240:t+120,a,n),C(t,a,n),C(t<120?t+240:t-120,a,n),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));var P=Math.PI/180,O=180/Math.PI,z=.96422,I=1,D=.82521,R=4/29,F=6/29,B=3*F*F,N=F*F*F;function j(t){if(t instanceof U)return new U(t.l,t.a,t.b,t.opacity);if(t instanceof Z)return J(t);t instanceof w||(t=b(t));var e,r,n=Y(t.r),a=Y(t.g),i=Y(t.b),o=q((.2225045*n+.7168786*a+.0606169*i)/I);return n===a&&a===i?e=r=o:(e=q((.4360747*n+.3850649*a+.1430804*i)/z),r=q((.0139322*n+.0971045*a+.7141733*i)/D)),new U(116*o-16,500*(e-o),200*(o-r),t.opacity)}function V(t,e,r,n){return 1===arguments.length?j(t):new U(t,e,r,null==n?1:n)}function U(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}function q(t){return t>N?Math.pow(t,1/3):t/B+R}function H(t){return t>F?t*t*t:B*(t-R)}function G(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Y(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function W(t){if(t instanceof Z)return new Z(t.h,t.c,t.l,t.opacity);if(t instanceof U||(t=j(t)),0===t.a&&0===t.b)return new Z(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*O;return new Z(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function X(t,e,r,n){return 1===arguments.length?W(t):new Z(t,e,r,null==n?1:n)}function Z(t,e,r,n){this.h=+t,this.c=+e,this.l=+r,this.opacity=+n}function J(t){if(isNaN(t.h))return new U(t.l,0,0,t.opacity);var e=t.h*P;return new U(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}e(U,V,r(n,{brighter:function(t){return new U(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new U(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return new w(G(3.1338561*(e=z*H(e))-1.6168667*(t=I*H(t))-.4906146*(r=D*H(r))),G(-.9787684*e+1.9161415*t+.033454*r),G(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}})),e(Z,X,r(n,{brighter:function(t){return new Z(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new Z(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return J(this).rgb()}}));var K=-.14861,Q=1.78277,$=-.29227,tt=-.90649,et=1.97294,rt=et*tt,nt=et*Q,at=Q*$-tt*K;function it(t,e,r,n){return 1===arguments.length?function(t){if(t instanceof ot)return new ot(t.h,t.s,t.l,t.opacity);t instanceof w||(t=b(t));var e=t.r/255,r=t.g/255,n=t.b/255,a=(at*n+rt*e-nt*r)/(at+rt-nt),i=n-a,o=(et*(r-a)-$*i)/tt,s=Math.sqrt(o*o+i*i)/(et*a*(1-a)),l=s?Math.atan2(o,i)*O-120:NaN;return new ot(l<0?l+360:l,s,a,t.opacity)}(t):new ot(t,e,r,null==n?1:n)}function ot(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}e(ot,it,r(n,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new ot(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new ot(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*P,e=+this.l,r=isNaN(this.s)?0:this.s*e*(1-e),n=Math.cos(t),a=Math.sin(t);return new w(255*(e+r*(K*n+Q*a)),255*(e+r*($*n+tt*a)),255*(e+r*(et*n)),this.opacity)}})),t.color=m,t.cubehelix=it,t.gray=function(t,e){return new U(t,0,0,null==e?1:e)},t.hcl=X,t.hsl=E,t.lab=V,t.lch=function(t,e,r,n){return 1===arguments.length?W(t):new Z(r,e,t,null==n?1:n)},t.rgb=_,Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:(n=n||self).d3=n.d3||{})},{}],157:[function(t,e,r){var n;n=this,function(t){"use strict";var e={value:function(){}};function r(){for(var t,e=0,r=arguments.length,a={};e<r;++e){if(!(t=arguments[e]+"")||t in a)throw new Error("illegal type: "+t);a[t]=[]}return new n(a)}function n(t){this._=t}function a(t,e){for(var r,n=0,a=t.length;n<a;++n)if((r=t[n]).name===e)return r.value}function i(t,r,n){for(var a=0,i=t.length;a<i;++a)if(t[a].name===r){t[a]=e,t=t.slice(0,a).concat(t.slice(a+1));break}return null!=n&&t.push({name:r,value:n}),t}n.prototype=r.prototype={constructor:n,on:function(t,e){var r,n,o=this._,s=(n=o,(t+"").trim().split(/^|\s+/).map(function(t){var e="",r=t.indexOf(".");if(r>=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})),l=-1,c=s.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++l<c;)if(r=(t=s[l]).type)o[r]=i(o[r],t.name,e);else if(null==e)for(r in o)o[r]=i(o[r],t.name,null);return this}for(;++l<c;)if((r=(t=s[l]).type)&&(r=a(o[r],t.name)))return r},copy:function(){var t={},e=this._;for(var r in e)t[r]=e[r].slice();return new n(t)},call:function(t,e){if((r=arguments.length-2)>0)for(var r,n,a=new Array(r),i=0;i<r;++i)a[i]=arguments[i+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(i=0,r=(n=this._[t]).length;i<r;++i)n[i].value.apply(e,a)},apply:function(t,e,r){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var n=this._[t],a=0,i=n.length;a<i;++a)n[a].value.apply(e,r)}},t.dispatch=r,Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],158:[function(t,e,r){var n,a;n=this,a=function(t,e,r,n,a){"use strict";var i=function(t){return function(){return t}},o=function(){return 1e-6*(Math.random()-.5)};function s(t){return t.x+t.vx}function l(t){return t.y+t.vy}function c(t){return t.index}function u(t,e){var r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function h(t){return t.x}function f(t){return t.y}var p=10,d=Math.PI*(3-Math.sqrt(5));t.forceCenter=function(t,e){var r;function n(){var n,a,i=r.length,o=0,s=0;for(n=0;n<i;++n)o+=(a=r[n]).x,s+=a.y;for(o=o/i-t,s=s/i-e,n=0;n<i;++n)(a=r[n]).x-=o,a.y-=s}return null==t&&(t=0),null==e&&(e=0),n.initialize=function(t){r=t},n.x=function(e){return arguments.length?(t=+e,n):t},n.y=function(t){return arguments.length?(e=+t,n):e},n},t.forceCollide=function(t){var r,n,a=1,c=1;function u(){for(var t,i,u,f,p,d,g,v=r.length,m=0;m<c;++m)for(i=e.quadtree(r,s,l).visitAfter(h),t=0;t<v;++t)u=r[t],d=n[u.index],g=d*d,f=u.x+u.vx,p=u.y+u.vy,i.visit(y);function y(t,e,r,n,i){var s=t.data,l=t.r,c=d+l;if(!s)return e>f+c||n<f-c||r>p+c||i<p-c;if(s.index>u.index){var h=f-s.x-s.vx,v=p-s.y-s.vy,m=h*h+v*v;m<c*c&&(0===h&&(m+=(h=o())*h),0===v&&(m+=(v=o())*v),m=(c-(m=Math.sqrt(m)))/m*a,u.vx+=(h*=m)*(c=(l*=l)/(g+l)),u.vy+=(v*=m)*c,s.vx-=h*(c=1-c),s.vy-=v*c)}}}function h(t){if(t.data)return t.r=n[t.data.index];for(var e=t.r=0;e<4;++e)t[e]&&t[e].r>t.r&&(t.r=t[e].r)}function f(){if(r){var e,a,i=r.length;for(n=new Array(i),e=0;e<i;++e)a=r[e],n[a.index]=+t(a,e,r)}}return"function"!=typeof t&&(t=i(null==t?1:+t)),u.initialize=function(t){r=t,f()},u.iterations=function(t){return arguments.length?(c=+t,u):c},u.strength=function(t){return arguments.length?(a=+t,u):a},u.radius=function(e){return arguments.length?(t="function"==typeof e?e:i(+e),f(),u):t},u},t.forceLink=function(t){var e,n,a,s,l,h=c,f=function(t){return 1/Math.min(s[t.source.index],s[t.target.index])},p=i(30),d=1;function g(r){for(var a=0,i=t.length;a<d;++a)for(var s,c,u,h,f,p,g,v=0;v<i;++v)c=(s=t[v]).source,h=(u=s.target).x+u.vx-c.x-c.vx||o(),f=u.y+u.vy-c.y-c.vy||o(),h*=p=((p=Math.sqrt(h*h+f*f))-n[v])/p*r*e[v],f*=p,u.vx-=h*(g=l[v]),u.vy-=f*g,c.vx+=h*(g=1-g),c.vy+=f*g}function v(){if(a){var i,o,c=a.length,f=t.length,p=r.map(a,h);for(i=0,s=new Array(c);i<f;++i)(o=t[i]).index=i,"object"!=typeof o.source&&(o.source=u(p,o.source)),"object"!=typeof o.target&&(o.target=u(p,o.target)),s[o.source.index]=(s[o.source.index]||0)+1,s[o.target.index]=(s[o.target.index]||0)+1;for(i=0,l=new Array(f);i<f;++i)o=t[i],l[i]=s[o.source.index]/(s[o.source.index]+s[o.target.index]);e=new Array(f),m(),n=new Array(f),y()}}function m(){if(a)for(var r=0,n=t.length;r<n;++r)e[r]=+f(t[r],r,t)}function y(){if(a)for(var e=0,r=t.length;e<r;++e)n[e]=+p(t[e],e,t)}return null==t&&(t=[]),g.initialize=function(t){a=t,v()},g.links=function(e){return arguments.length?(t=e,v(),g):t},g.id=function(t){return arguments.length?(h=t,g):h},g.iterations=function(t){return arguments.length?(d=+t,g):d},g.strength=function(t){return arguments.length?(f="function"==typeof t?t:i(+t),m(),g):f},g.distance=function(t){return arguments.length?(p="function"==typeof t?t:i(+t),y(),g):p},g},t.forceManyBody=function(){var t,r,n,a,s=i(-30),l=1,c=1/0,u=.81;function p(a){var i,o=t.length,s=e.quadtree(t,h,f).visitAfter(g);for(n=a,i=0;i<o;++i)r=t[i],s.visit(v)}function d(){if(t){var e,r,n=t.length;for(a=new Array(n),e=0;e<n;++e)r=t[e],a[r.index]=+s(r,e,t)}}function g(t){var e,r,n,i,o,s=0,l=0;if(t.length){for(n=i=o=0;o<4;++o)(e=t[o])&&(r=Math.abs(e.value))&&(s+=e.value,l+=r,n+=r*e.x,i+=r*e.y);t.x=n/l,t.y=i/l}else{(e=t).x=e.data.x,e.y=e.data.y;do{s+=a[e.data.index]}while(e=e.next)}t.value=s}function v(t,e,i,s){if(!t.value)return!0;var h=t.x-r.x,f=t.y-r.y,p=s-e,d=h*h+f*f;if(p*p/u<d)return d<c&&(0===h&&(d+=(h=o())*h),0===f&&(d+=(f=o())*f),d<l&&(d=Math.sqrt(l*d)),r.vx+=h*t.value*n/d,r.vy+=f*t.value*n/d),!0;if(!(t.length||d>=c)){(t.data!==r||t.next)&&(0===h&&(d+=(h=o())*h),0===f&&(d+=(f=o())*f),d<l&&(d=Math.sqrt(l*d)));do{t.data!==r&&(p=a[t.data.index]*n/d,r.vx+=h*p,r.vy+=f*p)}while(t=t.next)}}return p.initialize=function(e){t=e,d()},p.strength=function(t){return arguments.length?(s="function"==typeof t?t:i(+t),d(),p):s},p.distanceMin=function(t){return arguments.length?(l=t*t,p):Math.sqrt(l)},p.distanceMax=function(t){return arguments.length?(c=t*t,p):Math.sqrt(c)},p.theta=function(t){return arguments.length?(u=t*t,p):Math.sqrt(u)},p},t.forceRadial=function(t,e,r){var n,a,o,s=i(.1);function l(t){for(var i=0,s=n.length;i<s;++i){var l=n[i],c=l.x-e||1e-6,u=l.y-r||1e-6,h=Math.sqrt(c*c+u*u),f=(o[i]-h)*a[i]*t/h;l.vx+=c*f,l.vy+=u*f}}function c(){if(n){var e,r=n.length;for(a=new Array(r),o=new Array(r),e=0;e<r;++e)o[e]=+t(n[e],e,n),a[e]=isNaN(o[e])?0:+s(n[e],e,n)}}return"function"!=typeof t&&(t=i(+t)),null==e&&(e=0),null==r&&(r=0),l.initialize=function(t){n=t,c()},l.strength=function(t){return arguments.length?(s="function"==typeof t?t:i(+t),c(),l):s},l.radius=function(e){return arguments.length?(t="function"==typeof e?e:i(+e),c(),l):t},l.x=function(t){return arguments.length?(e=+t,l):e},l.y=function(t){return arguments.length?(r=+t,l):r},l},t.forceSimulation=function(t){var e,i=1,o=.001,s=1-Math.pow(o,1/300),l=0,c=.6,u=r.map(),h=a.timer(g),f=n.dispatch("tick","end");function g(){v(),f.call("tick",e),i<o&&(h.stop(),f.call("end",e))}function v(){var e,r,n=t.length;for(i+=(l-i)*s,u.each(function(t){t(i)}),e=0;e<n;++e)null==(r=t[e]).fx?r.x+=r.vx*=c:(r.x=r.fx,r.vx=0),null==r.fy?r.y+=r.vy*=c:(r.y=r.fy,r.vy=0)}function m(){for(var e,r=0,n=t.length;r<n;++r){if((e=t[r]).index=r,isNaN(e.x)||isNaN(e.y)){var a=p*Math.sqrt(r),i=r*d;e.x=a*Math.cos(i),e.y=a*Math.sin(i)}(isNaN(e.vx)||isNaN(e.vy))&&(e.vx=e.vy=0)}}function y(e){return e.initialize&&e.initialize(t),e}return null==t&&(t=[]),m(),e={tick:v,restart:function(){return h.restart(g),e},stop:function(){return h.stop(),e},nodes:function(r){return arguments.length?(t=r,m(),u.each(y),e):t},alpha:function(t){return arguments.length?(i=+t,e):i},alphaMin:function(t){return arguments.length?(o=+t,e):o},alphaDecay:function(t){return arguments.length?(s=+t,e):+s},alphaTarget:function(t){return arguments.length?(l=+t,e):l},velocityDecay:function(t){return arguments.length?(c=1-t,e):1-c},force:function(t,r){return arguments.length>1?(null==r?u.remove(t):u.set(t,y(r)),e):u.get(t)},find:function(e,r,n){var a,i,o,s,l,c=0,u=t.length;for(null==n?n=1/0:n*=n,c=0;c<u;++c)(o=(a=e-(s=t[c]).x)*a+(i=r-s.y)*i)<n&&(l=s,n=o);return l},on:function(t,r){return arguments.length>1?(f.on(t,r),e):f.on(t)}}},t.forceX=function(t){var e,r,n,a=i(.1);function o(t){for(var a,i=0,o=e.length;i<o;++i)(a=e[i]).vx+=(n[i]-a.x)*r[i]*t}function s(){if(e){var i,o=e.length;for(r=new Array(o),n=new Array(o),i=0;i<o;++i)r[i]=isNaN(n[i]=+t(e[i],i,e))?0:+a(e[i],i,e)}}return"function"!=typeof t&&(t=i(null==t?0:+t)),o.initialize=function(t){e=t,s()},o.strength=function(t){return arguments.length?(a="function"==typeof t?t:i(+t),s(),o):a},o.x=function(e){return arguments.length?(t="function"==typeof e?e:i(+e),s(),o):t},o},t.forceY=function(t){var e,r,n,a=i(.1);function o(t){for(var a,i=0,o=e.length;i<o;++i)(a=e[i]).vy+=(n[i]-a.y)*r[i]*t}function s(){if(e){var i,o=e.length;for(r=new Array(o),n=new Array(o),i=0;i<o;++i)r[i]=isNaN(n[i]=+t(e[i],i,e))?0:+a(e[i],i,e)}}return"function"!=typeof t&&(t=i(null==t?0:+t)),o.initialize=function(t){e=t,s()},o.strength=function(t){return arguments.length?(a="function"==typeof t?t:i(+t),s(),o):a},o.y=function(e){return arguments.length?(t="function"==typeof e?e:i(+e),s(),o):t},o},Object.defineProperty(t,"__esModule",{value:!0})},"object"==typeof r&&"undefined"!=typeof e?a(r,t("d3-quadtree"),t("d3-collection"),t("d3-dispatch"),t("d3-timer")):a(n.d3=n.d3||{},n.d3,n.d3,n.d3,n.d3)},{"d3-collection":155,"d3-dispatch":157,"d3-quadtree":162,"d3-timer":164}],159:[function(t,e,r){var n;n=this,function(t){"use strict";function e(t,e){return t.parent===e.parent?1:2}function r(t,e){return t+e.x}function n(t,e){return Math.max(t,e.y)}function a(t){var e=0,r=t.children,n=r&&r.length;if(n)for(;--n>=0;)e+=r[n].value;else e=1;t.value=e}function i(t,e){var r,n,a,i,s,u=new c(t),h=+t.value&&(u.value=t.value),f=[u];for(null==e&&(e=o);r=f.pop();)if(h&&(r.value=+r.data.value),(a=e(r.data))&&(s=a.length))for(r.children=new Array(s),i=s-1;i>=0;--i)f.push(n=r.children[i]=new c(a[i])),n.parent=r,n.depth=r.depth+1;return u.eachBefore(l)}function o(t){return t.children}function s(t){t.data=t.data.data}function l(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function c(t){this.data=t,this.depth=this.height=0,this.parent=null}c.prototype=i.prototype={constructor:c,count:function(){return this.eachAfter(a)},each:function(t){var e,r,n,a,i=this,o=[i];do{for(e=o.reverse(),o=[];i=e.pop();)if(t(i),r=i.children)for(n=0,a=r.length;n<a;++n)o.push(r[n])}while(o.length);return this},eachAfter:function(t){for(var e,r,n,a=this,i=[a],o=[];a=i.pop();)if(o.push(a),e=a.children)for(r=0,n=e.length;r<n;++r)i.push(e[r]);for(;a=o.pop();)t(a);return this},eachBefore:function(t){for(var e,r,n=this,a=[n];n=a.pop();)if(t(n),e=n.children)for(r=e.length-1;r>=0;--r)a.push(e[r]);return this},sum:function(t){return this.eachAfter(function(e){for(var r=+t(e.data)||0,n=e.children,a=n&&n.length;--a>=0;)r+=n[a].value;e.value=r})},sort:function(t){return this.eachBefore(function(e){e.children&&e.children.sort(t)})},path:function(t){for(var e=this,r=function(t,e){if(t===e)return t;var r=t.ancestors(),n=e.ancestors(),a=null;for(t=r.pop(),e=n.pop();t===e;)a=t,t=r.pop(),e=n.pop();return a}(e,t),n=[e];e!==r;)e=e.parent,n.push(e);for(var a=n.length;t!==r;)n.splice(a,0,t),t=t.parent;return n},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each(function(e){t.push(e)}),t},leaves:function(){var t=[];return this.eachBefore(function(e){e.children||t.push(e)}),t},links:function(){var t=this,e=[];return t.each(function(r){r!==t&&e.push({source:r.parent,target:r})}),e},copy:function(){return i(this).eachBefore(s)}};var u=Array.prototype.slice;function h(t){for(var e,r,n=0,a=(t=function(t){for(var e,r,n=t.length;n;)r=Math.random()*n--|0,e=t[n],t[n]=t[r],t[r]=e;return t}(u.call(t))).length,i=[];n<a;)e=t[n],r&&d(r,e)?++n:(r=v(i=f(i,e)),n=0);return r}function f(t,e){var r,n;if(g(e,t))return[e];for(r=0;r<t.length;++r)if(p(e,t[r])&&g(m(t[r],e),t))return[t[r],e];for(r=0;r<t.length-1;++r)for(n=r+1;n<t.length;++n)if(p(m(t[r],t[n]),e)&&p(m(t[r],e),t[n])&&p(m(t[n],e),t[r])&&g(y(t[r],t[n],e),t))return[t[r],t[n],e];throw new Error}function p(t,e){var r=t.r-e.r,n=e.x-t.x,a=e.y-t.y;return r<0||r*r<n*n+a*a}function d(t,e){var r=t.r-e.r+1e-6,n=e.x-t.x,a=e.y-t.y;return r>0&&r*r>n*n+a*a}function g(t,e){for(var r=0;r<e.length;++r)if(!d(t,e[r]))return!1;return!0}function v(t){switch(t.length){case 1:return{x:(e=t[0]).x,y:e.y,r:e.r};case 2:return m(t[0],t[1]);case 3:return y(t[0],t[1],t[2])}var e}function m(t,e){var r=t.x,n=t.y,a=t.r,i=e.x,o=e.y,s=e.r,l=i-r,c=o-n,u=s-a,h=Math.sqrt(l*l+c*c);return{x:(r+i+l/h*u)/2,y:(n+o+c/h*u)/2,r:(h+a+s)/2}}function y(t,e,r){var n=t.x,a=t.y,i=t.r,o=e.x,s=e.y,l=e.r,c=r.x,u=r.y,h=r.r,f=n-o,p=n-c,d=a-s,g=a-u,v=l-i,m=h-i,y=n*n+a*a-i*i,x=y-o*o-s*s+l*l,b=y-c*c-u*u+h*h,_=p*d-f*g,w=(d*b-g*x)/(2*_)-n,k=(g*v-d*m)/_,T=(p*x-f*b)/(2*_)-a,M=(f*m-p*v)/_,A=k*k+M*M-1,S=2*(i+w*k+T*M),E=w*w+T*T-i*i,L=-(A?(S+Math.sqrt(S*S-4*A*E))/(2*A):E/S);return{x:n+w+k*L,y:a+T+M*L,r:L}}function x(t,e,r){var n,a,i,o,s=t.x-e.x,l=t.y-e.y,c=s*s+l*l;c?(a=e.r+r.r,a*=a,o=t.r+r.r,a>(o*=o)?(n=(c+o-a)/(2*c),i=Math.sqrt(Math.max(0,o/c-n*n)),r.x=t.x-n*s-i*l,r.y=t.y-n*l+i*s):(n=(c+a-o)/(2*c),i=Math.sqrt(Math.max(0,a/c-n*n)),r.x=e.x+n*s-i*l,r.y=e.y+n*l+i*s)):(r.x=e.x+r.r,r.y=e.y)}function b(t,e){var r=t.r+e.r-1e-6,n=e.x-t.x,a=e.y-t.y;return r>0&&r*r>n*n+a*a}function _(t){var e=t._,r=t.next._,n=e.r+r.r,a=(e.x*r.r+r.x*e.r)/n,i=(e.y*r.r+r.y*e.r)/n;return a*a+i*i}function w(t){this._=t,this.next=null,this.previous=null}function k(t){if(!(a=t.length))return 0;var e,r,n,a,i,o,s,l,c,u,f;if((e=t[0]).x=0,e.y=0,!(a>1))return e.r;if(r=t[1],e.x=-r.r,r.x=e.r,r.y=0,!(a>2))return e.r+r.r;x(r,e,n=t[2]),e=new w(e),r=new w(r),n=new w(n),e.next=n.previous=r,r.next=e.previous=n,n.next=r.previous=e;t:for(s=3;s<a;++s){x(e._,r._,n=t[s]),n=new w(n),l=r.next,c=e.previous,u=r._.r,f=e._.r;do{if(u<=f){if(b(l._,n._)){r=l,e.next=r,r.previous=e,--s;continue t}u+=l._.r,l=l.next}else{if(b(c._,n._)){(e=c).next=r,r.previous=e,--s;continue t}f+=c._.r,c=c.previous}}while(l!==c.next);for(n.previous=e,n.next=r,e.next=r.previous=r=n,i=_(e);(n=n.next)!==r;)(o=_(n))<i&&(e=n,i=o);r=e.next}for(e=[r._],n=r;(n=n.next)!==r;)e.push(n._);for(n=h(e),s=0;s<a;++s)(e=t[s]).x-=n.x,e.y-=n.y;return n.r}function T(t){if("function"!=typeof t)throw new Error;return t}function M(){return 0}function A(t){return function(){return t}}function S(t){return Math.sqrt(t.value)}function E(t){return function(e){e.children||(e.r=Math.max(0,+t(e)||0))}}function L(t,e){return function(r){if(n=r.children){var n,a,i,o=n.length,s=t(r)*e||0;if(s)for(a=0;a<o;++a)n[a].r+=s;if(i=k(n),s)for(a=0;a<o;++a)n[a].r-=s;r.r=i+s}}}function C(t){return function(e){var r=e.parent;e.r*=t,r&&(e.x=r.x+t*e.x,e.y=r.y+t*e.y)}}function P(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function O(t,e,r,n,a){for(var i,o=t.children,s=-1,l=o.length,c=t.value&&(n-e)/t.value;++s<l;)(i=o[s]).y0=r,i.y1=a,i.x0=e,i.x1=e+=i.value*c}var z="$",I={depth:-1},D={};function R(t){return t.id}function F(t){return t.parentId}function B(t,e){return t.parent===e.parent?1:2}function N(t){var e=t.children;return e?e[0]:t.t}function j(t){var e=t.children;return e?e[e.length-1]:t.t}function V(t,e,r){var n=r/(e.i-t.i);e.c-=n,e.s+=r,t.c+=n,e.z+=r,e.m+=r}function U(t,e,r){return t.a.parent===e.parent?t.a:r}function q(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}function H(t,e,r,n,a){for(var i,o=t.children,s=-1,l=o.length,c=t.value&&(a-r)/t.value;++s<l;)(i=o[s]).x0=e,i.x1=n,i.y0=r,i.y1=r+=i.value*c}q.prototype=Object.create(c.prototype);var G=(1+Math.sqrt(5))/2;function Y(t,e,r,n,a,i){for(var o,s,l,c,u,h,f,p,d,g,v,m=[],y=e.children,x=0,b=0,_=y.length,w=e.value;x<_;){l=a-r,c=i-n;do{u=y[b++].value}while(!u&&b<_);for(h=f=u,v=u*u*(g=Math.max(c/l,l/c)/(w*t)),d=Math.max(f/v,v/h);b<_;++b){if(u+=s=y[b].value,s<h&&(h=s),s>f&&(f=s),v=u*u*g,(p=Math.max(f/v,v/h))>d){u-=s;break}d=p}m.push(o={value:u,dice:l<c,children:y.slice(x,b)}),o.dice?O(o,r,n,a,w?n+=c*u/w:i):H(o,r,n,w?r+=l*u/w:a,i),w-=u,x=b}return m}var W=function t(e){function r(t,r,n,a,i){Y(e,t,r,n,a,i)}return r.ratio=function(e){return t((e=+e)>1?e:1)},r}(G),X=function t(e){function r(t,r,n,a,i){if((o=t._squarify)&&o.ratio===e)for(var o,s,l,c,u,h=-1,f=o.length,p=t.value;++h<f;){for(l=(s=o[h]).children,c=s.value=0,u=l.length;c<u;++c)s.value+=l[c].value;s.dice?O(s,r,n,a,n+=(i-n)*s.value/p):H(s,r,n,r+=(a-r)*s.value/p,i),p-=s.value}else t._squarify=o=Y(e,t,r,n,a,i),o.ratio=e}return r.ratio=function(e){return t((e=+e)>1?e:1)},r}(G);t.cluster=function(){var t=e,a=1,i=1,o=!1;function s(e){var s,l=0;e.eachAfter(function(e){var a=e.children;a?(e.x=function(t){return t.reduce(r,0)/t.length}(a),e.y=function(t){return 1+t.reduce(n,0)}(a)):(e.x=s?l+=t(e,s):0,e.y=0,s=e)});var c=function(t){for(var e;e=t.children;)t=e[0];return t}(e),u=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(e),h=c.x-t(c,u)/2,f=u.x+t(u,c)/2;return e.eachAfter(o?function(t){t.x=(t.x-e.x)*a,t.y=(e.y-t.y)*i}:function(t){t.x=(t.x-h)/(f-h)*a,t.y=(1-(e.y?t.y/e.y:1))*i})}return s.separation=function(e){return arguments.length?(t=e,s):t},s.size=function(t){return arguments.length?(o=!1,a=+t[0],i=+t[1],s):o?null:[a,i]},s.nodeSize=function(t){return arguments.length?(o=!0,a=+t[0],i=+t[1],s):o?[a,i]:null},s},t.hierarchy=i,t.pack=function(){var t=null,e=1,r=1,n=M;function a(a){return a.x=e/2,a.y=r/2,t?a.eachBefore(E(t)).eachAfter(L(n,.5)).eachBefore(C(1)):a.eachBefore(E(S)).eachAfter(L(M,1)).eachAfter(L(n,a.r/Math.min(e,r))).eachBefore(C(Math.min(e,r)/(2*a.r))),a}return a.radius=function(e){return arguments.length?(t=null==(r=e)?null:T(r),a):t;var r},a.size=function(t){return arguments.length?(e=+t[0],r=+t[1],a):[e,r]},a.padding=function(t){return arguments.length?(n="function"==typeof t?t:A(+t),a):n},a},t.packEnclose=h,t.packSiblings=function(t){return k(t),t},t.partition=function(){var t=1,e=1,r=0,n=!1;function a(a){var i=a.height+1;return a.x0=a.y0=r,a.x1=t,a.y1=e/i,a.eachBefore(function(t,e){return function(n){n.children&&O(n,n.x0,t*(n.depth+1)/e,n.x1,t*(n.depth+2)/e);var a=n.x0,i=n.y0,o=n.x1-r,s=n.y1-r;o<a&&(a=o=(a+o)/2),s<i&&(i=s=(i+s)/2),n.x0=a,n.y0=i,n.x1=o,n.y1=s}}(e,i)),n&&a.eachBefore(P),a}return a.round=function(t){return arguments.length?(n=!!t,a):n},a.size=function(r){return arguments.length?(t=+r[0],e=+r[1],a):[t,e]},a.padding=function(t){return arguments.length?(r=+t,a):r},a},t.stratify=function(){var t=R,e=F;function r(r){var n,a,i,o,s,u,h,f=r.length,p=new Array(f),d={};for(a=0;a<f;++a)n=r[a],s=p[a]=new c(n),null!=(u=t(n,a,r))&&(u+="")&&(d[h=z+(s.id=u)]=h in d?D:s);for(a=0;a<f;++a)if(s=p[a],null!=(u=e(r[a],a,r))&&(u+="")){if(!(o=d[z+u]))throw new Error("missing: "+u);if(o===D)throw new Error("ambiguous: "+u);o.children?o.children.push(s):o.children=[s],s.parent=o}else{if(i)throw new Error("multiple roots");i=s}if(!i)throw new Error("no root");if(i.parent=I,i.eachBefore(function(t){t.depth=t.parent.depth+1,--f}).eachBefore(l),i.parent=null,f>0)throw new Error("cycle");return i}return r.id=function(e){return arguments.length?(t=T(e),r):t},r.parentId=function(t){return arguments.length?(e=T(t),r):e},r},t.tree=function(){var t=B,e=1,r=1,n=null;function a(a){var l=function(t){for(var e,r,n,a,i,o=new q(t,0),s=[o];e=s.pop();)if(n=e._.children)for(e.children=new Array(i=n.length),a=i-1;a>=0;--a)s.push(r=e.children[a]=new q(n[a],a)),r.parent=e;return(o.parent=new q(null,0)).children=[o],o}(a);if(l.eachAfter(i),l.parent.m=-l.z,l.eachBefore(o),n)a.eachBefore(s);else{var c=a,u=a,h=a;a.eachBefore(function(t){t.x<c.x&&(c=t),t.x>u.x&&(u=t),t.depth>h.depth&&(h=t)});var f=c===u?1:t(c,u)/2,p=f-c.x,d=e/(u.x+f+p),g=r/(h.depth||1);a.eachBefore(function(t){t.x=(t.x+p)*d,t.y=t.depth*g})}return a}function i(e){var r=e.children,n=e.parent.children,a=e.i?n[e.i-1]:null;if(r){!function(t){for(var e,r=0,n=0,a=t.children,i=a.length;--i>=0;)(e=a[i]).z+=r,e.m+=r,r+=e.s+(n+=e.c)}(e);var i=(r[0].z+r[r.length-1].z)/2;a?(e.z=a.z+t(e._,a._),e.m=e.z-i):e.z=i}else a&&(e.z=a.z+t(e._,a._));e.parent.A=function(e,r,n){if(r){for(var a,i=e,o=e,s=r,l=i.parent.children[0],c=i.m,u=o.m,h=s.m,f=l.m;s=j(s),i=N(i),s&&i;)l=N(l),(o=j(o)).a=e,(a=s.z+h-i.z-c+t(s._,i._))>0&&(V(U(s,e,n),e,a),c+=a,u+=a),h+=s.m,c+=i.m,f+=l.m,u+=o.m;s&&!j(o)&&(o.t=s,o.m+=h-u),i&&!N(l)&&(l.t=i,l.m+=c-f,n=e)}return n}(e,a,e.parent.A||n[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*r}return a.separation=function(e){return arguments.length?(t=e,a):t},a.size=function(t){return arguments.length?(n=!1,e=+t[0],r=+t[1],a):n?null:[e,r]},a.nodeSize=function(t){return arguments.length?(n=!0,e=+t[0],r=+t[1],a):n?[e,r]:null},a},t.treemap=function(){var t=W,e=!1,r=1,n=1,a=[0],i=M,o=M,s=M,l=M,c=M;function u(t){return t.x0=t.y0=0,t.x1=r,t.y1=n,t.eachBefore(h),a=[0],e&&t.eachBefore(P),t}function h(e){var r=a[e.depth],n=e.x0+r,u=e.y0+r,h=e.x1-r,f=e.y1-r;h<n&&(n=h=(n+h)/2),f<u&&(u=f=(u+f)/2),e.x0=n,e.y0=u,e.x1=h,e.y1=f,e.children&&(r=a[e.depth+1]=i(e)/2,n+=c(e)-r,u+=o(e)-r,(h-=s(e)-r)<n&&(n=h=(n+h)/2),(f-=l(e)-r)<u&&(u=f=(u+f)/2),t(e,n,u,h,f))}return u.round=function(t){return arguments.length?(e=!!t,u):e},u.size=function(t){return arguments.length?(r=+t[0],n=+t[1],u):[r,n]},u.tile=function(e){return arguments.length?(t=T(e),u):t},u.padding=function(t){return arguments.length?u.paddingInner(t).paddingOuter(t):u.paddingInner()},u.paddingInner=function(t){return arguments.length?(i="function"==typeof t?t:A(+t),u):i},u.paddingOuter=function(t){return arguments.length?u.paddingTop(t).paddingRight(t).paddingBottom(t).paddingLeft(t):u.paddingTop()},u.paddingTop=function(t){return arguments.length?(o="function"==typeof t?t:A(+t),u):o},u.paddingRight=function(t){return arguments.length?(s="function"==typeof t?t:A(+t),u):s},u.paddingBottom=function(t){return arguments.length?(l="function"==typeof t?t:A(+t),u):l},u.paddingLeft=function(t){return arguments.length?(c="function"==typeof t?t:A(+t),u):c},u},t.treemapBinary=function(t,e,r,n,a){var i,o,s=t.children,l=s.length,c=new Array(l+1);for(c[0]=o=i=0;i<l;++i)c[i+1]=o+=s[i].value;!function t(e,r,n,a,i,o,l){if(e>=r-1){var u=s[e];return u.x0=a,u.y0=i,u.x1=o,void(u.y1=l)}for(var h=c[e],f=n/2+h,p=e+1,d=r-1;p<d;){var g=p+d>>>1;c[g]<f?p=g+1:d=g}f-c[p-1]<c[p]-f&&e+1<p&&--p;var v=c[p]-h,m=n-v;if(o-a>l-i){var y=(a*m+o*v)/n;t(e,p,v,a,i,y,l),t(p,r,m,y,i,o,l)}else{var x=(i*m+l*v)/n;t(e,p,v,a,i,o,x),t(p,r,m,a,x,o,l)}}(0,l,t.value,e,r,n,a)},t.treemapDice=O,t.treemapResquarify=X,t.treemapSlice=H,t.treemapSliceDice=function(t,e,r,n,a){(1&t.depth?H:O)(t,e,r,n,a)},t.treemapSquarify=W,Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:(n=n||self).d3=n.d3||{})},{}],160:[function(t,e,r){var n,a;n=this,a=function(t,e){"use strict";function r(t,e,r,n,a){var i=t*t,o=i*t;return((1-3*t+3*i-o)*e+(4-6*i+3*o)*r+(1+3*t+3*i-3*o)*n+o*a)/6}function n(t){var e=t.length-1;return function(n){var a=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[a],o=t[a+1],s=a>0?t[a-1]:2*i-o,l=a<e-1?t[a+2]:2*o-i;return r((n-a/e)*e,s,i,o,l)}}function a(t){var e=t.length;return function(n){var a=Math.floor(((n%=1)<0?++n:n)*e),i=t[(a+e-1)%e],o=t[a%e],s=t[(a+1)%e],l=t[(a+2)%e];return r((n-a/e)*e,i,o,s,l)}}function i(t){return function(){return t}}function o(t,e){return function(r){return t+r*e}}function s(t,e){var r=e-t;return r?o(t,r>180||r<-180?r-360*Math.round(r/360):r):i(isNaN(t)?e:t)}function l(t){return 1==(t=+t)?c:function(e,r){return r-e?function(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}(e,r,t):i(isNaN(e)?r:e)}}function c(t,e){var r=e-t;return r?o(t,r):i(isNaN(t)?e:t)}var u=function t(r){var n=l(r);function a(t,r){var a=n((t=e.rgb(t)).r,(r=e.rgb(r)).r),i=n(t.g,r.g),o=n(t.b,r.b),s=c(t.opacity,r.opacity);return function(e){return t.r=a(e),t.g=i(e),t.b=o(e),t.opacity=s(e),t+""}}return a.gamma=t,a}(1);function h(t){return function(r){var n,a,i=r.length,o=new Array(i),s=new Array(i),l=new Array(i);for(n=0;n<i;++n)a=e.rgb(r[n]),o[n]=a.r||0,s[n]=a.g||0,l[n]=a.b||0;return o=t(o),s=t(s),l=t(l),a.opacity=1,function(t){return a.r=o(t),a.g=s(t),a.b=l(t),a+""}}}var f=h(n),p=h(a);function d(t,e){e||(e=[]);var r,n=t?Math.min(e.length,t.length):0,a=e.slice();return function(i){for(r=0;r<n;++r)a[r]=t[r]*(1-i)+e[r]*i;return a}}function g(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function v(t,e){var r,n=e?e.length:0,a=t?Math.min(n,t.length):0,i=new Array(a),o=new Array(n);for(r=0;r<a;++r)i[r]=k(t[r],e[r]);for(;r<n;++r)o[r]=e[r];return function(t){for(r=0;r<a;++r)o[r]=i[r](t);return o}}function m(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}function y(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}function x(t,e){var r,n={},a={};for(r in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)r in t?n[r]=k(t[r],e[r]):a[r]=e[r];return function(t){for(r in n)a[r]=n[r](t);return a}}var b=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,_=new RegExp(b.source,"g");function w(t,e){var r,n,a,i=b.lastIndex=_.lastIndex=0,o=-1,s=[],l=[];for(t+="",e+="";(r=b.exec(t))&&(n=_.exec(e));)(a=n.index)>i&&(a=e.slice(i,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:y(r,n)})),i=_.lastIndex;return i<e.length&&(a=e.slice(i),s[o]?s[o]+=a:s[++o]=a),s.length<2?l[0]?function(t){return function(e){return t(e)+""}}(l[0].x):function(t){return function(){return t}}(e):(e=l.length,function(t){for(var r,n=0;n<e;++n)s[(r=l[n]).i]=r.x(t);return s.join("")})}function k(t,r){var n,a=typeof r;return null==r||"boolean"===a?i(r):("number"===a?y:"string"===a?(n=e.color(r))?(r=n,u):w:r instanceof e.color?u:r instanceof Date?m:g(r)?d:Array.isArray(r)?v:"function"!=typeof r.valueOf&&"function"!=typeof r.toString||isNaN(r)?x:y)(t,r)}var T,M,A,S,E=180/Math.PI,L={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function C(t,e,r,n,a,i){var o,s,l;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(l=t*r+e*n)&&(r-=t*l,n-=e*l),(s=Math.sqrt(r*r+n*n))&&(r/=s,n/=s,l/=s),t*n<e*r&&(t=-t,e=-e,l=-l,o=-o),{translateX:a,translateY:i,rotate:Math.atan2(e,t)*E,skewX:Math.atan(l)*E,scaleX:o,scaleY:s}}function P(t,e,r,n){function a(t){return t.length?t.pop()+" ":""}return function(i,o){var s=[],l=[];return i=t(i),o=t(o),function(t,n,a,i,o,s){if(t!==a||n!==i){var l=o.push("translate(",null,e,null,r);s.push({i:l-4,x:y(t,a)},{i:l-2,x:y(n,i)})}else(a||i)&&o.push("translate("+a+e+i+r)}(i.translateX,i.translateY,o.translateX,o.translateY,s,l),function(t,e,r,i){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),i.push({i:r.push(a(r)+"rotate(",null,n)-2,x:y(t,e)})):e&&r.push(a(r)+"rotate("+e+n)}(i.rotate,o.rotate,s,l),function(t,e,r,i){t!==e?i.push({i:r.push(a(r)+"skewX(",null,n)-2,x:y(t,e)}):e&&r.push(a(r)+"skewX("+e+n)}(i.skewX,o.skewX,s,l),function(t,e,r,n,i,o){if(t!==r||e!==n){var s=i.push(a(i)+"scale(",null,",",null,")");o.push({i:s-4,x:y(t,r)},{i:s-2,x:y(e,n)})}else 1===r&&1===n||i.push(a(i)+"scale("+r+","+n+")")}(i.scaleX,i.scaleY,o.scaleX,o.scaleY,s,l),i=o=null,function(t){for(var e,r=-1,n=l.length;++r<n;)s[(e=l[r]).i]=e.x(t);return s.join("")}}}var O=P(function(t){return"none"===t?L:(T||(T=document.createElement("DIV"),M=document.documentElement,A=document.defaultView),T.style.transform=t,t=A.getComputedStyle(M.appendChild(T),null).getPropertyValue("transform"),M.removeChild(T),C(+(t=t.slice(7,-1).split(","))[0],+t[1],+t[2],+t[3],+t[4],+t[5]))},"px, ","px)","deg)"),z=P(function(t){return null==t?L:(S||(S=document.createElementNS("http://www.w3.org/2000/svg","g")),S.setAttribute("transform",t),(t=S.transform.baseVal.consolidate())?C((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):L)},", ",")",")"),I=Math.SQRT2,D=2,R=4,F=1e-12;function B(t){return((t=Math.exp(t))+1/t)/2}function N(t){return function(r,n){var a=t((r=e.hsl(r)).h,(n=e.hsl(n)).h),i=c(r.s,n.s),o=c(r.l,n.l),s=c(r.opacity,n.opacity);return function(t){return r.h=a(t),r.s=i(t),r.l=o(t),r.opacity=s(t),r+""}}}var j=N(s),V=N(c);function U(t){return function(r,n){var a=t((r=e.hcl(r)).h,(n=e.hcl(n)).h),i=c(r.c,n.c),o=c(r.l,n.l),s=c(r.opacity,n.opacity);return function(t){return r.h=a(t),r.c=i(t),r.l=o(t),r.opacity=s(t),r+""}}}var q=U(s),H=U(c);function G(t){return function r(n){function a(r,a){var i=t((r=e.cubehelix(r)).h,(a=e.cubehelix(a)).h),o=c(r.s,a.s),s=c(r.l,a.l),l=c(r.opacity,a.opacity);return function(t){return r.h=i(t),r.s=o(t),r.l=s(Math.pow(t,n)),r.opacity=l(t),r+""}}return n=+n,a.gamma=r,a}(1)}var Y=G(s),W=G(c);t.interpolate=k,t.interpolateArray=function(t,e){return(g(e)?d:v)(t,e)},t.interpolateBasis=n,t.interpolateBasisClosed=a,t.interpolateCubehelix=Y,t.interpolateCubehelixLong=W,t.interpolateDate=m,t.interpolateDiscrete=function(t){var e=t.length;return function(r){return t[Math.max(0,Math.min(e-1,Math.floor(r*e)))]}},t.interpolateHcl=q,t.interpolateHclLong=H,t.interpolateHsl=j,t.interpolateHslLong=V,t.interpolateHue=function(t,e){var r=s(+t,+e);return function(t){var e=r(t);return e-360*Math.floor(e/360)}},t.interpolateLab=function(t,r){var n=c((t=e.lab(t)).l,(r=e.lab(r)).l),a=c(t.a,r.a),i=c(t.b,r.b),o=c(t.opacity,r.opacity);return function(e){return t.l=n(e),t.a=a(e),t.b=i(e),t.opacity=o(e),t+""}},t.interpolateNumber=y,t.interpolateNumberArray=d,t.interpolateObject=x,t.interpolateRgb=u,t.interpolateRgbBasis=f,t.interpolateRgbBasisClosed=p,t.interpolateRound=function(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}},t.interpolateString=w,t.interpolateTransformCss=O,t.interpolateTransformSvg=z,t.interpolateZoom=function(t,e){var r,n,a=t[0],i=t[1],o=t[2],s=e[0],l=e[1],c=e[2],u=s-a,h=l-i,f=u*u+h*h;if(f<F)n=Math.log(c/o)/I,r=function(t){return[a+t*u,i+t*h,o*Math.exp(I*t*n)]};else{var p=Math.sqrt(f),d=(c*c-o*o+R*f)/(2*o*D*p),g=(c*c-o*o-R*f)/(2*c*D*p),v=Math.log(Math.sqrt(d*d+1)-d),m=Math.log(Math.sqrt(g*g+1)-g);n=(m-v)/I,r=function(t){var e,r=t*n,s=B(v),l=o/(D*p)*(s*(e=I*r+v,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(v));return[a+l*u,i+l*h,o*s/B(I*r+v)]}}return r.duration=1e3*n,r},t.piecewise=function(t,e){for(var r=0,n=e.length-1,a=e[0],i=new Array(n<0?0:n);r<n;)i[r]=t(a,a=e[++r]);return function(t){var e=Math.max(0,Math.min(n-1,Math.floor(t*=n)));return i[e](t-e)}},t.quantize=function(t,e){for(var r=new Array(e),n=0;n<e;++n)r[n]=t(n/(e-1));return r},Object.defineProperty(t,"__esModule",{value:!0})},"object"==typeof r&&"undefined"!=typeof e?a(r,t("d3-color")):a((n=n||self).d3=n.d3||{},n.d3)},{"d3-color":156}],161:[function(t,e,r){var n;n=this,function(t){"use strict";var e=Math.PI,r=2*e,n=r-1e-6;function a(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function i(){return new a}a.prototype=i.prototype={constructor:a,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,r,n){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+n)},bezierCurveTo:function(t,e,r,n,a,i){this._+="C"+ +t+","+ +e+","+ +r+","+ +n+","+(this._x1=+a)+","+(this._y1=+i)},arcTo:function(t,r,n,a,i){t=+t,r=+r,n=+n,a=+a,i=+i;var o=this._x1,s=this._y1,l=n-t,c=a-r,u=o-t,h=s-r,f=u*u+h*h;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=r);else if(f>1e-6)if(Math.abs(h*l-c*u)>1e-6&&i){var p=n-o,d=a-s,g=l*l+c*c,v=p*p+d*d,m=Math.sqrt(g),y=Math.sqrt(f),x=i*Math.tan((e-Math.acos((g+f-v)/(2*m*y)))/2),b=x/y,_=x/m;Math.abs(b-1)>1e-6&&(this._+="L"+(t+b*u)+","+(r+b*h)),this._+="A"+i+","+i+",0,0,"+ +(h*p>u*d)+","+(this._x1=t+_*l)+","+(this._y1=r+_*c)}else this._+="L"+(this._x1=t)+","+(this._y1=r);else;},arc:function(t,a,i,o,s,l){t=+t,a=+a;var c=(i=+i)*Math.cos(o),u=i*Math.sin(o),h=t+c,f=a+u,p=1^l,d=l?o-s:s-o;if(i<0)throw new Error("negative radius: "+i);null===this._x1?this._+="M"+h+","+f:(Math.abs(this._x1-h)>1e-6||Math.abs(this._y1-f)>1e-6)&&(this._+="L"+h+","+f),i&&(d<0&&(d=d%r+r),d>n?this._+="A"+i+","+i+",0,1,"+p+","+(t-c)+","+(a-u)+"A"+i+","+i+",0,1,"+p+","+(this._x1=h)+","+(this._y1=f):d>1e-6&&(this._+="A"+i+","+i+",0,"+ +(d>=e)+","+p+","+(this._x1=t+i*Math.cos(s))+","+(this._y1=a+i*Math.sin(s))))},rect:function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},toString:function(){return this._}},t.path=i,Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],162:[function(t,e,r){var n;n=this,function(t){"use strict";function e(t,e,r,n){if(isNaN(e)||isNaN(r))return t;var a,i,o,s,l,c,u,h,f,p=t._root,d={data:n},g=t._x0,v=t._y0,m=t._x1,y=t._y1;if(!p)return t._root=d,t;for(;p.length;)if((c=e>=(i=(g+m)/2))?g=i:m=i,(u=r>=(o=(v+y)/2))?v=o:y=o,a=p,!(p=p[h=u<<1|c]))return a[h]=d,t;if(s=+t._x.call(null,p.data),l=+t._y.call(null,p.data),e===s&&r===l)return d.next=p,a?a[h]=d:t._root=d,t;do{a=a?a[h]=new Array(4):t._root=new Array(4),(c=e>=(i=(g+m)/2))?g=i:m=i,(u=r>=(o=(v+y)/2))?v=o:y=o}while((h=u<<1|c)==(f=(l>=o)<<1|s>=i));return a[f]=p,a[h]=d,t}var r=function(t,e,r,n,a){this.node=t,this.x0=e,this.y0=r,this.x1=n,this.y1=a};function n(t){return t[0]}function a(t){return t[1]}function i(t,e,r){var i=new o(null==e?n:e,null==r?a:r,NaN,NaN,NaN,NaN);return null==t?i:i.addAll(t)}function o(t,e,r,n,a,i){this._x=t,this._y=e,this._x0=r,this._y0=n,this._x1=a,this._y1=i,this._root=void 0}function s(t){for(var e={data:t.data},r=e;t=t.next;)r=r.next={data:t.data};return e}var l=i.prototype=o.prototype;l.copy=function(){var t,e,r=new o(this._x,this._y,this._x0,this._y0,this._x1,this._y1),n=this._root;if(!n)return r;if(!n.length)return r._root=s(n),r;for(t=[{source:n,target:r._root=new Array(4)}];n=t.pop();)for(var a=0;a<4;++a)(e=n.source[a])&&(e.length?t.push({source:e,target:n.target[a]=new Array(4)}):n.target[a]=s(e));return r},l.add=function(t){var r=+this._x.call(null,t),n=+this._y.call(null,t);return e(this.cover(r,n),r,n,t)},l.addAll=function(t){var r,n,a,i,o=t.length,s=new Array(o),l=new Array(o),c=1/0,u=1/0,h=-1/0,f=-1/0;for(n=0;n<o;++n)isNaN(a=+this._x.call(null,r=t[n]))||isNaN(i=+this._y.call(null,r))||(s[n]=a,l[n]=i,a<c&&(c=a),a>h&&(h=a),i<u&&(u=i),i>f&&(f=i));for(h<c&&(c=this._x0,h=this._x1),f<u&&(u=this._y0,f=this._y1),this.cover(c,u).cover(h,f),n=0;n<o;++n)e(this,s[n],l[n],t[n]);return this},l.cover=function(t,e){if(isNaN(t=+t)||isNaN(e=+e))return this;var r=this._x0,n=this._y0,a=this._x1,i=this._y1;if(isNaN(r))a=(r=Math.floor(t))+1,i=(n=Math.floor(e))+1;else{if(!(r>t||t>a||n>e||e>i))return this;var o,s,l=a-r,c=this._root;switch(s=(e<(n+i)/2)<<1|t<(r+a)/2){case 0:do{(o=new Array(4))[s]=c,c=o}while(i=n+(l*=2),t>(a=r+l)||e>i);break;case 1:do{(o=new Array(4))[s]=c,c=o}while(i=n+(l*=2),(r=a-l)>t||e>i);break;case 2:do{(o=new Array(4))[s]=c,c=o}while(n=i-(l*=2),t>(a=r+l)||n>e);break;case 3:do{(o=new Array(4))[s]=c,c=o}while(n=i-(l*=2),(r=a-l)>t||n>e)}this._root&&this._root.length&&(this._root=c)}return this._x0=r,this._y0=n,this._x1=a,this._y1=i,this},l.data=function(){var t=[];return this.visit(function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)}),t},l.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},l.find=function(t,e,n){var a,i,o,s,l,c,u,h=this._x0,f=this._y0,p=this._x1,d=this._y1,g=[],v=this._root;for(v&&g.push(new r(v,h,f,p,d)),null==n?n=1/0:(h=t-n,f=e-n,p=t+n,d=e+n,n*=n);c=g.pop();)if(!(!(v=c.node)||(i=c.x0)>p||(o=c.y0)>d||(s=c.x1)<h||(l=c.y1)<f))if(v.length){var m=(i+s)/2,y=(o+l)/2;g.push(new r(v[3],m,y,s,l),new r(v[2],i,y,m,l),new r(v[1],m,o,s,y),new r(v[0],i,o,m,y)),(u=(e>=y)<<1|t>=m)&&(c=g[g.length-1],g[g.length-1]=g[g.length-1-u],g[g.length-1-u]=c)}else{var x=t-+this._x.call(null,v.data),b=e-+this._y.call(null,v.data),_=x*x+b*b;if(_<n){var w=Math.sqrt(n=_);h=t-w,f=e-w,p=t+w,d=e+w,a=v.data}}return a},l.remove=function(t){if(isNaN(i=+this._x.call(null,t))||isNaN(o=+this._y.call(null,t)))return this;var e,r,n,a,i,o,s,l,c,u,h,f,p=this._root,d=this._x0,g=this._y0,v=this._x1,m=this._y1;if(!p)return this;if(p.length)for(;;){if((c=i>=(s=(d+v)/2))?d=s:v=s,(u=o>=(l=(g+m)/2))?g=l:m=l,e=p,!(p=p[h=u<<1|c]))return this;if(!p.length)break;(e[h+1&3]||e[h+2&3]||e[h+3&3])&&(r=e,f=h)}for(;p.data!==t;)if(n=p,!(p=p.next))return this;return(a=p.next)&&delete p.next,n?(a?n.next=a:delete n.next,this):e?(a?e[h]=a:delete e[h],(p=e[0]||e[1]||e[2]||e[3])&&p===(e[3]||e[2]||e[1]||e[0])&&!p.length&&(r?r[f]=p:this._root=p),this):(this._root=a,this)},l.removeAll=function(t){for(var e=0,r=t.length;e<r;++e)this.remove(t[e]);return this},l.root=function(){return this._root},l.size=function(){var t=0;return this.visit(function(e){if(!e.length)do{++t}while(e=e.next)}),t},l.visit=function(t){var e,n,a,i,o,s,l=[],c=this._root;for(c&&l.push(new r(c,this._x0,this._y0,this._x1,this._y1));e=l.pop();)if(!t(c=e.node,a=e.x0,i=e.y0,o=e.x1,s=e.y1)&&c.length){var u=(a+o)/2,h=(i+s)/2;(n=c[3])&&l.push(new r(n,u,h,o,s)),(n=c[2])&&l.push(new r(n,a,h,u,s)),(n=c[1])&&l.push(new r(n,u,i,o,h)),(n=c[0])&&l.push(new r(n,a,i,u,h))}return this},l.visitAfter=function(t){var e,n=[],a=[];for(this._root&&n.push(new r(this._root,this._x0,this._y0,this._x1,this._y1));e=n.pop();){var i=e.node;if(i.length){var o,s=e.x0,l=e.y0,c=e.x1,u=e.y1,h=(s+c)/2,f=(l+u)/2;(o=i[0])&&n.push(new r(o,s,l,h,f)),(o=i[1])&&n.push(new r(o,h,l,c,f)),(o=i[2])&&n.push(new r(o,s,f,h,u)),(o=i[3])&&n.push(new r(o,h,f,c,u))}a.push(e)}for(;e=a.pop();)t(e.node,e.x0,e.y0,e.x1,e.y1);return this},l.x=function(t){return arguments.length?(this._x=t,this):this._x},l.y=function(t){return arguments.length?(this._y=t,this):this._y},t.quadtree=i,Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],163:[function(t,e,r){var n,a;n=this,a=function(t,e){"use strict";function r(t){return function(){return t}}var n=Math.abs,a=Math.atan2,i=Math.cos,o=Math.max,s=Math.min,l=Math.sin,c=Math.sqrt,u=1e-12,h=Math.PI,f=h/2,p=2*h;function d(t){return t>=1?f:t<=-1?-f:Math.asin(t)}function g(t){return t.innerRadius}function v(t){return t.outerRadius}function m(t){return t.startAngle}function y(t){return t.endAngle}function x(t){return t&&t.padAngle}function b(t,e,r,n,a,i,s){var l=t-r,u=e-n,h=(s?i:-i)/c(l*l+u*u),f=h*u,p=-h*l,d=t+f,g=e+p,v=r+f,m=n+p,y=(d+v)/2,x=(g+m)/2,b=v-d,_=m-g,w=b*b+_*_,k=a-i,T=d*m-v*g,M=(_<0?-1:1)*c(o(0,k*k*w-T*T)),A=(T*_-b*M)/w,S=(-T*b-_*M)/w,E=(T*_+b*M)/w,L=(-T*b+_*M)/w,C=A-y,P=S-x,O=E-y,z=L-x;return C*C+P*P>O*O+z*z&&(A=E,S=L),{cx:A,cy:S,x01:-f,y01:-p,x11:A*(a/k-1),y11:S*(a/k-1)}}function _(t){this._context=t}function w(t){return new _(t)}function k(t){return t[0]}function T(t){return t[1]}function M(){var t=k,n=T,a=r(!0),i=null,o=w,s=null;function l(r){var l,c,u,h=r.length,f=!1;for(null==i&&(s=o(u=e.path())),l=0;l<=h;++l)!(l<h&&a(c=r[l],l,r))===f&&((f=!f)?s.lineStart():s.lineEnd()),f&&s.point(+t(c,l,r),+n(c,l,r));if(u)return s=null,u+""||null}return l.x=function(e){return arguments.length?(t="function"==typeof e?e:r(+e),l):t},l.y=function(t){return arguments.length?(n="function"==typeof t?t:r(+t),l):n},l.defined=function(t){return arguments.length?(a="function"==typeof t?t:r(!!t),l):a},l.curve=function(t){return arguments.length?(o=t,null!=i&&(s=o(i)),l):o},l.context=function(t){return arguments.length?(null==t?i=s=null:s=o(i=t),l):i},l}function A(){var t=k,n=null,a=r(0),i=T,o=r(!0),s=null,l=w,c=null;function u(r){var u,h,f,p,d,g=r.length,v=!1,m=new Array(g),y=new Array(g);for(null==s&&(c=l(d=e.path())),u=0;u<=g;++u){if(!(u<g&&o(p=r[u],u,r))===v)if(v=!v)h=u,c.areaStart(),c.lineStart();else{for(c.lineEnd(),c.lineStart(),f=u-1;f>=h;--f)c.point(m[f],y[f]);c.lineEnd(),c.areaEnd()}v&&(m[u]=+t(p,u,r),y[u]=+a(p,u,r),c.point(n?+n(p,u,r):m[u],i?+i(p,u,r):y[u]))}if(d)return c=null,d+""||null}function h(){return M().defined(o).curve(l).context(s)}return u.x=function(e){return arguments.length?(t="function"==typeof e?e:r(+e),n=null,u):t},u.x0=function(e){return arguments.length?(t="function"==typeof e?e:r(+e),u):t},u.x1=function(t){return arguments.length?(n=null==t?null:"function"==typeof t?t:r(+t),u):n},u.y=function(t){return arguments.length?(a="function"==typeof t?t:r(+t),i=null,u):a},u.y0=function(t){return arguments.length?(a="function"==typeof t?t:r(+t),u):a},u.y1=function(t){return arguments.length?(i=null==t?null:"function"==typeof t?t:r(+t),u):i},u.lineX0=u.lineY0=function(){return h().x(t).y(a)},u.lineY1=function(){return h().x(t).y(i)},u.lineX1=function(){return h().x(n).y(a)},u.defined=function(t){return arguments.length?(o="function"==typeof t?t:r(!!t),u):o},u.curve=function(t){return arguments.length?(l=t,null!=s&&(c=l(s)),u):l},u.context=function(t){return arguments.length?(null==t?s=c=null:c=l(s=t),u):s},u}function S(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function E(t){return t}_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};var L=P(w);function C(t){this._curve=t}function P(t){function e(e){return new C(t(e))}return e._curve=t,e}function O(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(P(t)):e()._curve},t}function z(){return O(M().curve(L))}function I(){var t=A().curve(L),e=t.curve,r=t.lineX0,n=t.lineX1,a=t.lineY0,i=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return O(r())},delete t.lineX0,t.lineEndAngle=function(){return O(n())},delete t.lineX1,t.lineInnerRadius=function(){return O(a())},delete t.lineY0,t.lineOuterRadius=function(){return O(i())},delete t.lineY1,t.curve=function(t){return arguments.length?e(P(t)):e()._curve},t}function D(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]}C.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};var R=Array.prototype.slice;function F(t){return t.source}function B(t){return t.target}function N(t){var n=F,a=B,i=k,o=T,s=null;function l(){var r,l=R.call(arguments),c=n.apply(this,l),u=a.apply(this,l);if(s||(s=r=e.path()),t(s,+i.apply(this,(l[0]=c,l)),+o.apply(this,l),+i.apply(this,(l[0]=u,l)),+o.apply(this,l)),r)return s=null,r+""||null}return l.source=function(t){return arguments.length?(n=t,l):n},l.target=function(t){return arguments.length?(a=t,l):a},l.x=function(t){return arguments.length?(i="function"==typeof t?t:r(+t),l):i},l.y=function(t){return arguments.length?(o="function"==typeof t?t:r(+t),l):o},l.context=function(t){return arguments.length?(s=null==t?null:t,l):s},l}function j(t,e,r,n,a){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,a,n,a)}function V(t,e,r,n,a){t.moveTo(e,r),t.bezierCurveTo(e,r=(r+a)/2,n,r,n,a)}function U(t,e,r,n,a){var i=D(e,r),o=D(e,r=(r+a)/2),s=D(n,r),l=D(n,a);t.moveTo(i[0],i[1]),t.bezierCurveTo(o[0],o[1],s[0],s[1],l[0],l[1])}var q={draw:function(t,e){var r=Math.sqrt(e/h);t.moveTo(r,0),t.arc(0,0,r,0,p)}},H={draw:function(t,e){var r=Math.sqrt(e/5)/2;t.moveTo(-3*r,-r),t.lineTo(-r,-r),t.lineTo(-r,-3*r),t.lineTo(r,-3*r),t.lineTo(r,-r),t.lineTo(3*r,-r),t.lineTo(3*r,r),t.lineTo(r,r),t.lineTo(r,3*r),t.lineTo(-r,3*r),t.lineTo(-r,r),t.lineTo(-3*r,r),t.closePath()}},G=Math.sqrt(1/3),Y=2*G,W={draw:function(t,e){var r=Math.sqrt(e/Y),n=r*G;t.moveTo(0,-r),t.lineTo(n,0),t.lineTo(0,r),t.lineTo(-n,0),t.closePath()}},X=Math.sin(h/10)/Math.sin(7*h/10),Z=Math.sin(p/10)*X,J=-Math.cos(p/10)*X,K={draw:function(t,e){var r=Math.sqrt(.8908130915292852*e),n=Z*r,a=J*r;t.moveTo(0,-r),t.lineTo(n,a);for(var i=1;i<5;++i){var o=p*i/5,s=Math.cos(o),l=Math.sin(o);t.lineTo(l*r,-s*r),t.lineTo(s*n-l*a,l*n+s*a)}t.closePath()}},Q={draw:function(t,e){var r=Math.sqrt(e),n=-r/2;t.rect(n,n,r,r)}},$=Math.sqrt(3),tt={draw:function(t,e){var r=-Math.sqrt(e/(3*$));t.moveTo(0,2*r),t.lineTo(-$*r,-r),t.lineTo($*r,-r),t.closePath()}},et=-.5,rt=Math.sqrt(3)/2,nt=1/Math.sqrt(12),at=3*(nt/2+1),it={draw:function(t,e){var r=Math.sqrt(e/at),n=r/2,a=r*nt,i=n,o=r*nt+r,s=-i,l=o;t.moveTo(n,a),t.lineTo(i,o),t.lineTo(s,l),t.lineTo(et*n-rt*a,rt*n+et*a),t.lineTo(et*i-rt*o,rt*i+et*o),t.lineTo(et*s-rt*l,rt*s+et*l),t.lineTo(et*n+rt*a,et*a-rt*n),t.lineTo(et*i+rt*o,et*o-rt*i),t.lineTo(et*s+rt*l,et*l-rt*s),t.closePath()}},ot=[q,H,W,Q,K,tt,it];function st(){}function lt(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function ct(t){this._context=t}function ut(t){this._context=t}function ht(t){this._context=t}function ft(t,e){this._basis=new ct(t),this._beta=e}ct.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:lt(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:lt(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ut.prototype={areaStart:st,areaEnd:st,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:lt(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ht.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:lt(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ft.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n,a=t[0],i=e[0],o=t[r]-a,s=e[r]-i,l=-1;++l<=r;)n=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(a+n*o),this._beta*e[l]+(1-this._beta)*(i+n*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var pt=function t(e){function r(t){return 1===e?new ct(t):new ft(t,e)}return r.beta=function(e){return t(+e)},r}(.85);function dt(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function gt(t,e){this._context=t,this._k=(1-e)/6}gt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:dt(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:dt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var vt=function t(e){function r(t){return new gt(t,e)}return r.tension=function(e){return t(+e)},r}(0);function mt(t,e){this._context=t,this._k=(1-e)/6}mt.prototype={areaStart:st,areaEnd:st,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:dt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var yt=function t(e){function r(t){return new mt(t,e)}return r.tension=function(e){return t(+e)},r}(0);function xt(t,e){this._context=t,this._k=(1-e)/6}xt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:dt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var bt=function t(e){function r(t){return new xt(t,e)}return r.tension=function(e){return t(+e)},r}(0);function _t(t,e,r){var n=t._x1,a=t._y1,i=t._x2,o=t._y2;if(t._l01_a>u){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,a=(a*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>u){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,h=3*t._l23_a*(t._l23_a+t._l12_a);i=(i*c+t._x1*t._l23_2a-e*t._l12_2a)/h,o=(o*c+t._y1*t._l23_2a-r*t._l12_2a)/h}t._context.bezierCurveTo(n,a,i,o,t._x2,t._y2)}function wt(t,e){this._context=t,this._alpha=e}wt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:_t(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var kt=function t(e){function r(t){return e?new wt(t,e):new gt(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function Tt(t,e){this._context=t,this._alpha=e}Tt.prototype={areaStart:st,areaEnd:st,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:_t(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Mt=function t(e){function r(t){return e?new Tt(t,e):new mt(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function At(t,e){this._context=t,this._alpha=e}At.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:_t(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var St=function t(e){function r(t){return e?new At(t,e):new xt(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function Et(t){this._context=t}function Lt(t){return t<0?-1:1}function Ct(t,e,r){var n=t._x1-t._x0,a=e-t._x1,i=(t._y1-t._y0)/(n||a<0&&-0),o=(r-t._y1)/(a||n<0&&-0),s=(i*a+o*n)/(n+a);return(Lt(i)+Lt(o))*Math.min(Math.abs(i),Math.abs(o),.5*Math.abs(s))||0}function Pt(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function Ot(t,e,r){var n=t._x0,a=t._y0,i=t._x1,o=t._y1,s=(i-n)/3;t._context.bezierCurveTo(n+s,a+s*e,i-s,o-s*r,i,o)}function zt(t){this._context=t}function It(t){this._context=new Dt(t)}function Dt(t){this._context=t}function Rt(t){this._context=t}function Ft(t){var e,r,n=t.length-1,a=new Array(n),i=new Array(n),o=new Array(n);for(a[0]=0,i[0]=2,o[0]=t[0]+2*t[1],e=1;e<n-1;++e)a[e]=1,i[e]=4,o[e]=4*t[e]+2*t[e+1];for(a[n-1]=2,i[n-1]=7,o[n-1]=8*t[n-1]+t[n],e=1;e<n;++e)r=a[e]/i[e-1],i[e]-=r,o[e]-=r*o[e-1];for(a[n-1]=o[n-1]/i[n-1],e=n-2;e>=0;--e)a[e]=(o[e]-a[e+1])/i[e];for(i[n-1]=(t[n]+a[n-1])/2,e=0;e<n-1;++e)i[e]=2*t[e+1]-a[e+1];return[a,i]}function Bt(t,e){this._context=t,this._t=e}function Nt(t,e){if((a=t.length)>1)for(var r,n,a,i=1,o=t[e[0]],s=o.length;i<a;++i)for(n=o,o=t[e[i]],r=0;r<s;++r)o[r][1]+=o[r][0]=isNaN(n[r][1])?n[r][0]:n[r][1]}function jt(t){for(var e=t.length,r=new Array(e);--e>=0;)r[e]=e;return r}function Vt(t,e){return t[e]}function Ut(t){var e=t.map(qt);return jt(t).sort(function(t,r){return e[t]-e[r]})}function qt(t){for(var e,r=-1,n=0,a=t.length,i=-1/0;++r<a;)(e=+t[r][1])>i&&(i=e,n=r);return n}function Ht(t){var e=t.map(Gt);return jt(t).sort(function(t,r){return e[t]-e[r]})}function Gt(t){for(var e,r=0,n=-1,a=t.length;++n<a;)(e=+t[n][1])&&(r+=e);return r}Et.prototype={areaStart:st,areaEnd:st,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}},zt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Ot(this,this._t0,Pt(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var r=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,Ot(this,Pt(this,r=Ct(this,t,e)),r);break;default:Ot(this,this._t0,r=Ct(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}}},(It.prototype=Object.create(zt.prototype)).point=function(t,e){zt.prototype.point.call(this,e,t)},Dt.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,r,n,a,i){this._context.bezierCurveTo(e,t,n,r,i,a)}},Rt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===r)this._context.lineTo(t[1],e[1]);else for(var n=Ft(t),a=Ft(e),i=0,o=1;o<r;++i,++o)this._context.bezierCurveTo(n[0][i],a[0][i],n[1][i],a[1][i],t[o],e[o]);(this._line||0!==this._line&&1===r)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}},Bt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}}this._x=t,this._y=e}},t.arc=function(){var t=g,o=v,_=r(0),w=null,k=m,T=y,M=x,A=null;function S(){var r,g,v,m=+t.apply(this,arguments),y=+o.apply(this,arguments),x=k.apply(this,arguments)-f,S=T.apply(this,arguments)-f,E=n(S-x),L=S>x;if(A||(A=r=e.path()),y<m&&(g=y,y=m,m=g),y>u)if(E>p-u)A.moveTo(y*i(x),y*l(x)),A.arc(0,0,y,x,S,!L),m>u&&(A.moveTo(m*i(S),m*l(S)),A.arc(0,0,m,S,x,L));else{var C,P,O=x,z=S,I=x,D=S,R=E,F=E,B=M.apply(this,arguments)/2,N=B>u&&(w?+w.apply(this,arguments):c(m*m+y*y)),j=s(n(y-m)/2,+_.apply(this,arguments)),V=j,U=j;if(N>u){var q=d(N/m*l(B)),H=d(N/y*l(B));(R-=2*q)>u?(I+=q*=L?1:-1,D-=q):(R=0,I=D=(x+S)/2),(F-=2*H)>u?(O+=H*=L?1:-1,z-=H):(F=0,O=z=(x+S)/2)}var G=y*i(O),Y=y*l(O),W=m*i(D),X=m*l(D);if(j>u){var Z,J=y*i(z),K=y*l(z),Q=m*i(I),$=m*l(I);if(E<h&&(Z=function(t,e,r,n,a,i,o,s){var l=r-t,c=n-e,h=o-a,f=s-i,p=f*l-h*c;if(!(p*p<u))return[t+(p=(h*(e-i)-f*(t-a))/p)*l,e+p*c]}(G,Y,Q,$,J,K,W,X))){var tt=G-Z[0],et=Y-Z[1],rt=J-Z[0],nt=K-Z[1],at=1/l(((v=(tt*rt+et*nt)/(c(tt*tt+et*et)*c(rt*rt+nt*nt)))>1?0:v<-1?h:Math.acos(v))/2),it=c(Z[0]*Z[0]+Z[1]*Z[1]);V=s(j,(m-it)/(at-1)),U=s(j,(y-it)/(at+1))}}F>u?U>u?(C=b(Q,$,G,Y,y,U,L),P=b(J,K,W,X,y,U,L),A.moveTo(C.cx+C.x01,C.cy+C.y01),U<j?A.arc(C.cx,C.cy,U,a(C.y01,C.x01),a(P.y01,P.x01),!L):(A.arc(C.cx,C.cy,U,a(C.y01,C.x01),a(C.y11,C.x11),!L),A.arc(0,0,y,a(C.cy+C.y11,C.cx+C.x11),a(P.cy+P.y11,P.cx+P.x11),!L),A.arc(P.cx,P.cy,U,a(P.y11,P.x11),a(P.y01,P.x01),!L))):(A.moveTo(G,Y),A.arc(0,0,y,O,z,!L)):A.moveTo(G,Y),m>u&&R>u?V>u?(C=b(W,X,J,K,m,-V,L),P=b(G,Y,Q,$,m,-V,L),A.lineTo(C.cx+C.x01,C.cy+C.y01),V<j?A.arc(C.cx,C.cy,V,a(C.y01,C.x01),a(P.y01,P.x01),!L):(A.arc(C.cx,C.cy,V,a(C.y01,C.x01),a(C.y11,C.x11),!L),A.arc(0,0,m,a(C.cy+C.y11,C.cx+C.x11),a(P.cy+P.y11,P.cx+P.x11),L),A.arc(P.cx,P.cy,V,a(P.y11,P.x11),a(P.y01,P.x01),!L))):A.arc(0,0,m,D,I,L):A.lineTo(W,X)}else A.moveTo(0,0);if(A.closePath(),r)return A=null,r+""||null}return S.centroid=function(){var e=(+t.apply(this,arguments)+ +o.apply(this,arguments))/2,r=(+k.apply(this,arguments)+ +T.apply(this,arguments))/2-h/2;return[i(r)*e,l(r)*e]},S.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:r(+e),S):t},S.outerRadius=function(t){return arguments.length?(o="function"==typeof t?t:r(+t),S):o},S.cornerRadius=function(t){return arguments.length?(_="function"==typeof t?t:r(+t),S):_},S.padRadius=function(t){return arguments.length?(w=null==t?null:"function"==typeof t?t:r(+t),S):w},S.startAngle=function(t){return arguments.length?(k="function"==typeof t?t:r(+t),S):k},S.endAngle=function(t){return arguments.length?(T="function"==typeof t?t:r(+t),S):T},S.padAngle=function(t){return arguments.length?(M="function"==typeof t?t:r(+t),S):M},S.context=function(t){return arguments.length?(A=null==t?null:t,S):A},S},t.area=A,t.line=M,t.pie=function(){var t=E,e=S,n=null,a=r(0),i=r(p),o=r(0);function s(r){var s,l,c,u,h,f=r.length,d=0,g=new Array(f),v=new Array(f),m=+a.apply(this,arguments),y=Math.min(p,Math.max(-p,i.apply(this,arguments)-m)),x=Math.min(Math.abs(y)/f,o.apply(this,arguments)),b=x*(y<0?-1:1);for(s=0;s<f;++s)(h=v[g[s]=s]=+t(r[s],s,r))>0&&(d+=h);for(null!=e?g.sort(function(t,r){return e(v[t],v[r])}):null!=n&&g.sort(function(t,e){return n(r[t],r[e])}),s=0,c=d?(y-f*b)/d:0;s<f;++s,m=u)l=g[s],u=m+((h=v[l])>0?h*c:0)+b,v[l]={data:r[l],index:s,value:h,startAngle:m,endAngle:u,padAngle:x};return v}return s.value=function(e){return arguments.length?(t="function"==typeof e?e:r(+e),s):t},s.sortValues=function(t){return arguments.length?(e=t,n=null,s):e},s.sort=function(t){return arguments.length?(n=t,e=null,s):n},s.startAngle=function(t){return arguments.length?(a="function"==typeof t?t:r(+t),s):a},s.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:r(+t),s):i},s.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:r(+t),s):o},s},t.areaRadial=I,t.radialArea=I,t.lineRadial=z,t.radialLine=z,t.pointRadial=D,t.linkHorizontal=function(){return N(j)},t.linkVertical=function(){return N(V)},t.linkRadial=function(){var t=N(U);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t},t.symbol=function(){var t=r(q),n=r(64),a=null;function i(){var r;if(a||(a=r=e.path()),t.apply(this,arguments).draw(a,+n.apply(this,arguments)),r)return a=null,r+""||null}return i.type=function(e){return arguments.length?(t="function"==typeof e?e:r(e),i):t},i.size=function(t){return arguments.length?(n="function"==typeof t?t:r(+t),i):n},i.context=function(t){return arguments.length?(a=null==t?null:t,i):a},i},t.symbols=ot,t.symbolCircle=q,t.symbolCross=H,t.symbolDiamond=W,t.symbolSquare=Q,t.symbolStar=K,t.symbolTriangle=tt,t.symbolWye=it,t.curveBasisClosed=function(t){return new ut(t)},t.curveBasisOpen=function(t){return new ht(t)},t.curveBasis=function(t){return new ct(t)},t.curveBundle=pt,t.curveCardinalClosed=yt,t.curveCardinalOpen=bt,t.curveCardinal=vt,t.curveCatmullRomClosed=Mt,t.curveCatmullRomOpen=St,t.curveCatmullRom=kt,t.curveLinearClosed=function(t){return new Et(t)},t.curveLinear=w,t.curveMonotoneX=function(t){return new zt(t)},t.curveMonotoneY=function(t){return new It(t)},t.curveNatural=function(t){return new Rt(t)},t.curveStep=function(t){return new Bt(t,.5)},t.curveStepAfter=function(t){return new Bt(t,1)},t.curveStepBefore=function(t){return new Bt(t,0)},t.stack=function(){var t=r([]),e=jt,n=Nt,a=Vt;function i(r){var i,o,s=t.apply(this,arguments),l=r.length,c=s.length,u=new Array(c);for(i=0;i<c;++i){for(var h,f=s[i],p=u[i]=new Array(l),d=0;d<l;++d)p[d]=h=[0,+a(r[d],f,d,r)],h.data=r[d];p.key=f}for(i=0,o=e(u);i<c;++i)u[o[i]].index=i;return n(u,o),u}return i.keys=function(e){return arguments.length?(t="function"==typeof e?e:r(R.call(e)),i):t},i.value=function(t){return arguments.length?(a="function"==typeof t?t:r(+t),i):a},i.order=function(t){return arguments.length?(e=null==t?jt:"function"==typeof t?t:r(R.call(t)),i):e},i.offset=function(t){return arguments.length?(n=null==t?Nt:t,i):n},i},t.stackOffsetExpand=function(t,e){if((n=t.length)>0){for(var r,n,a,i=0,o=t[0].length;i<o;++i){for(a=r=0;r<n;++r)a+=t[r][i][1]||0;if(a)for(r=0;r<n;++r)t[r][i][1]/=a}Nt(t,e)}},t.stackOffsetDiverging=function(t,e){if((s=t.length)>1)for(var r,n,a,i,o,s,l=0,c=t[e[0]].length;l<c;++l)for(i=o=0,r=0;r<s;++r)(a=(n=t[e[r]][l])[1]-n[0])>=0?(n[0]=i,n[1]=i+=a):a<0?(n[1]=o,n[0]=o+=a):n[0]=i},t.stackOffsetNone=Nt,t.stackOffsetSilhouette=function(t,e){if((r=t.length)>0){for(var r,n=0,a=t[e[0]],i=a.length;n<i;++n){for(var o=0,s=0;o<r;++o)s+=t[o][n][1]||0;a[n][1]+=a[n][0]=-s/2}Nt(t,e)}},t.stackOffsetWiggle=function(t,e){if((a=t.length)>0&&(n=(r=t[e[0]]).length)>0){for(var r,n,a,i=0,o=1;o<n;++o){for(var s=0,l=0,c=0;s<a;++s){for(var u=t[e[s]],h=u[o][1]||0,f=(h-(u[o-1][1]||0))/2,p=0;p<s;++p){var d=t[e[p]];f+=(d[o][1]||0)-(d[o-1][1]||0)}l+=h,c+=f*h}r[o-1][1]+=r[o-1][0]=i,l&&(i-=c/l)}r[o-1][1]+=r[o-1][0]=i,Nt(t,e)}},t.stackOrderAppearance=Ut,t.stackOrderAscending=Ht,t.stackOrderDescending=function(t){return Ht(t).reverse()},t.stackOrderInsideOut=function(t){var e,r,n=t.length,a=t.map(Gt),i=Ut(t),o=0,s=0,l=[],c=[];for(e=0;e<n;++e)r=i[e],o<s?(o+=a[r],l.push(r)):(s+=a[r],c.push(r));return c.reverse().concat(l)},t.stackOrderNone=jt,t.stackOrderReverse=function(t){return jt(t).reverse()},Object.defineProperty(t,"__esModule",{value:!0})},"object"==typeof r&&"undefined"!=typeof e?a(r,t("d3-path")):a(n.d3=n.d3||{},n.d3)},{"d3-path":161}],164:[function(t,e,r){var n;n=this,function(t){"use strict";var e,r,n=0,a=0,i=0,o=1e3,s=0,l=0,c=0,u="object"==typeof performance&&performance.now?performance:Date,h="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function f(){return l||(h(p),l=u.now()+c)}function p(){l=0}function d(){this._call=this._time=this._next=null}function g(t,e,r){var n=new d;return n.restart(t,e,r),n}function v(){f(),++n;for(var t,r=e;r;)(t=l-r._time)>=0&&r._call.call(null,t),r=r._next;--n}function m(){l=(s=u.now())+c,n=a=0;try{v()}finally{n=0,function(){var t,n,a=e,i=1/0;for(;a;)a._call?(i>a._time&&(i=a._time),t=a,a=a._next):(n=a._next,a._next=null,a=t?t._next=n:e=n);r=t,x(i)}(),l=0}}function y(){var t=u.now(),e=t-s;e>o&&(c-=e,s=t)}function x(t){n||(a&&(a=clearTimeout(a)),t-l>24?(t<1/0&&(a=setTimeout(m,t-u.now()-c)),i&&(i=clearInterval(i))):(i||(s=u.now(),i=setInterval(y,o)),n=1,h(m)))}d.prototype=g.prototype={constructor:d,restart:function(t,n,a){if("function"!=typeof t)throw new TypeError("callback is not a function");a=(null==a?f():+a)+(null==n?0:+n),this._next||r===this||(r?r._next=this:e=this,r=this),this._call=t,this._time=a,x()},stop:function(){this._call&&(this._call=null,this._time=1/0,x())}},t.now=f,t.timer=g,t.timerFlush=v,t.timeout=function(t,e,r){var n=new d;return e=null==e?0:+e,n.restart(function(r){n.stop(),t(r+e)},e,r),n},t.interval=function(t,e,r){var n=new d,a=e;return null==e?(n.restart(t,e,r),n):(e=+e,r=null==r?f():+r,n.restart(function i(o){o+=a,n.restart(i,a+=e,r),t(o)},e,r),n)},Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],165:[function(t,e,r){!function(){var t={version:"3.5.17"},r=[].slice,n=function(t){return r.call(t)},a=this.document;function i(t){return t&&(t.ownerDocument||t.document||t).documentElement}function o(t){return t&&(t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView)}if(a)try{n(a.documentElement.childNodes)[0].nodeType}catch(t){n=function(t){for(var e=t.length,r=new Array(e);e--;)r[e]=t[e];return r}}if(Date.now||(Date.now=function(){return+new Date}),a)try{a.createElement("DIV").style.setProperty("opacity",0,"")}catch(t){var s=this.Element.prototype,l=s.setAttribute,c=s.setAttributeNS,u=this.CSSStyleDeclaration.prototype,h=u.setProperty;s.setAttribute=function(t,e){l.call(this,t,e+"")},s.setAttributeNS=function(t,e,r){c.call(this,t,e,r+"")},u.setProperty=function(t,e,r){h.call(this,t,e+"",r)}}function f(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function p(t){return null===t?NaN:+t}function d(t){return!isNaN(t)}function g(t){return{left:function(e,r,n,a){for(arguments.length<3&&(n=0),arguments.length<4&&(a=e.length);n<a;){var i=n+a>>>1;t(e[i],r)<0?n=i+1:a=i}return n},right:function(e,r,n,a){for(arguments.length<3&&(n=0),arguments.length<4&&(a=e.length);n<a;){var i=n+a>>>1;t(e[i],r)>0?a=i:n=i+1}return n}}}t.ascending=f,t.descending=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},t.min=function(t,e){var r,n,a=-1,i=t.length;if(1===arguments.length){for(;++a<i;)if(null!=(n=t[a])&&n>=n){r=n;break}for(;++a<i;)null!=(n=t[a])&&r>n&&(r=n)}else{for(;++a<i;)if(null!=(n=e.call(t,t[a],a))&&n>=n){r=n;break}for(;++a<i;)null!=(n=e.call(t,t[a],a))&&r>n&&(r=n)}return r},t.max=function(t,e){var r,n,a=-1,i=t.length;if(1===arguments.length){for(;++a<i;)if(null!=(n=t[a])&&n>=n){r=n;break}for(;++a<i;)null!=(n=t[a])&&n>r&&(r=n)}else{for(;++a<i;)if(null!=(n=e.call(t,t[a],a))&&n>=n){r=n;break}for(;++a<i;)null!=(n=e.call(t,t[a],a))&&n>r&&(r=n)}return r},t.extent=function(t,e){var r,n,a,i=-1,o=t.length;if(1===arguments.length){for(;++i<o;)if(null!=(n=t[i])&&n>=n){r=a=n;break}for(;++i<o;)null!=(n=t[i])&&(r>n&&(r=n),a<n&&(a=n))}else{for(;++i<o;)if(null!=(n=e.call(t,t[i],i))&&n>=n){r=a=n;break}for(;++i<o;)null!=(n=e.call(t,t[i],i))&&(r>n&&(r=n),a<n&&(a=n))}return[r,a]},t.sum=function(t,e){var r,n=0,a=t.length,i=-1;if(1===arguments.length)for(;++i<a;)d(r=+t[i])&&(n+=r);else for(;++i<a;)d(r=+e.call(t,t[i],i))&&(n+=r);return n},t.mean=function(t,e){var r,n=0,a=t.length,i=-1,o=a;if(1===arguments.length)for(;++i<a;)d(r=p(t[i]))?n+=r:--o;else for(;++i<a;)d(r=p(e.call(t,t[i],i)))?n+=r:--o;if(o)return n/o},t.quantile=function(t,e){var r=(t.length-1)*e+1,n=Math.floor(r),a=+t[n-1],i=r-n;return i?a+i*(t[n]-a):a},t.median=function(e,r){var n,a=[],i=e.length,o=-1;if(1===arguments.length)for(;++o<i;)d(n=p(e[o]))&&a.push(n);else for(;++o<i;)d(n=p(r.call(e,e[o],o)))&&a.push(n);if(a.length)return t.quantile(a.sort(f),.5)},t.variance=function(t,e){var r,n,a=t.length,i=0,o=0,s=-1,l=0;if(1===arguments.length)for(;++s<a;)d(r=p(t[s]))&&(o+=(n=r-i)*(r-(i+=n/++l)));else for(;++s<a;)d(r=p(e.call(t,t[s],s)))&&(o+=(n=r-i)*(r-(i+=n/++l)));if(l>1)return o/(l-1)},t.deviation=function(){var e=t.variance.apply(this,arguments);return e?Math.sqrt(e):e};var v=g(f);function m(t){return t.length}t.bisectLeft=v.left,t.bisect=t.bisectRight=v.right,t.bisector=function(t){return g(1===t.length?function(e,r){return f(t(e),r)}:t)},t.shuffle=function(t,e,r){(i=arguments.length)<3&&(r=t.length,i<2&&(e=0));for(var n,a,i=r-e;i;)a=Math.random()*i--|0,n=t[i+e],t[i+e]=t[a+e],t[a+e]=n;return t},t.permute=function(t,e){for(var r=e.length,n=new Array(r);r--;)n[r]=t[e[r]];return n},t.pairs=function(t){for(var e=0,r=t.length-1,n=t[0],a=new Array(r<0?0:r);e<r;)a[e]=[n,n=t[++e]];return a},t.transpose=function(e){if(!(i=e.length))return[];for(var r=-1,n=t.min(e,m),a=new Array(n);++r<n;)for(var i,o=-1,s=a[r]=new Array(i);++o<i;)s[o]=e[o][r];return a},t.zip=function(){return t.transpose(arguments)},t.keys=function(t){var e=[];for(var r in t)e.push(r);return e},t.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},t.entries=function(t){var e=[];for(var r in t)e.push({key:r,value:t[r]});return e},t.merge=function(t){for(var e,r,n,a=t.length,i=-1,o=0;++i<a;)o+=t[i].length;for(r=new Array(o);--a>=0;)for(e=(n=t[a]).length;--e>=0;)r[--o]=n[e];return r};var y=Math.abs;function x(t,e){for(var r in e)Object.defineProperty(t.prototype,r,{value:e[r],enumerable:!1})}function b(){this._=Object.create(null)}t.range=function(t,e,r){if(arguments.length<3&&(r=1,arguments.length<2&&(e=t,t=0)),(e-t)/r==1/0)throw new Error("infinite range");var n,a=[],i=function(t){var e=1;for(;t*e%1;)e*=10;return e}(y(r)),o=-1;if(t*=i,e*=i,(r*=i)<0)for(;(n=t+r*++o)>e;)a.push(n/i);else for(;(n=t+r*++o)<e;)a.push(n/i);return a},t.map=function(t,e){var r=new b;if(t instanceof b)t.forEach(function(t,e){r.set(t,e)});else if(Array.isArray(t)){var n,a=-1,i=t.length;if(1===arguments.length)for(;++a<i;)r.set(a,t[a]);else for(;++a<i;)r.set(e.call(t,n=t[a],a),n)}else for(var o in t)r.set(o,t[o]);return r};var _="__proto__",w="\0";function k(t){return(t+="")===_||t[0]===w?w+t:t}function T(t){return(t+="")[0]===w?t.slice(1):t}function M(t){return k(t)in this._}function A(t){return(t=k(t))in this._&&delete this._[t]}function S(){var t=[];for(var e in this._)t.push(T(e));return t}function E(){var t=0;for(var e in this._)++t;return t}function L(){for(var t in this._)return!1;return!0}function C(){this._=Object.create(null)}function P(t){return t}function O(t,e,r){return function(){var n=r.apply(e,arguments);return n===e?t:n}}function z(t,e){if(e in t)return e;e=e.charAt(0).toUpperCase()+e.slice(1);for(var r=0,n=I.length;r<n;++r){var a=I[r]+e;if(a in t)return a}}x(b,{has:M,get:function(t){return this._[k(t)]},set:function(t,e){return this._[k(t)]=e},remove:A,keys:S,values:function(){var t=[];for(var e in this._)t.push(this._[e]);return t},entries:function(){var t=[];for(var e in this._)t.push({key:T(e),value:this._[e]});return t},size:E,empty:L,forEach:function(t){for(var e in this._)t.call(this,T(e),this._[e])}}),t.nest=function(){var e,r,n={},a=[],i=[];function o(t,i,s){if(s>=a.length)return r?r.call(n,i):e?i.sort(e):i;for(var l,c,u,h,f=-1,p=i.length,d=a[s++],g=new b;++f<p;)(h=g.get(l=d(c=i[f])))?h.push(c):g.set(l,[c]);return t?(c=t(),u=function(e,r){c.set(e,o(t,r,s))}):(c={},u=function(e,r){c[e]=o(t,r,s)}),g.forEach(u),c}return n.map=function(t,e){return o(e,t,0)},n.entries=function(e){return function t(e,r){if(r>=a.length)return e;var n=[],o=i[r++];return e.forEach(function(e,a){n.push({key:e,values:t(a,r)})}),o?n.sort(function(t,e){return o(t.key,e.key)}):n}(o(t.map,e,0),0)},n.key=function(t){return a.push(t),n},n.sortKeys=function(t){return i[a.length-1]=t,n},n.sortValues=function(t){return e=t,n},n.rollup=function(t){return r=t,n},n},t.set=function(t){var e=new C;if(t)for(var r=0,n=t.length;r<n;++r)e.add(t[r]);return e},x(C,{has:M,add:function(t){return this._[k(t+="")]=!0,t},remove:A,values:S,size:E,empty:L,forEach:function(t){for(var e in this._)t.call(this,T(e))}}),t.behavior={},t.rebind=function(t,e){for(var r,n=1,a=arguments.length;++n<a;)t[r=arguments[n]]=O(t,e,e[r]);return t};var I=["webkit","ms","moz","Moz","o","O"];function D(){}function R(){}function F(t){var e=[],r=new b;function n(){for(var r,n=e,a=-1,i=n.length;++a<i;)(r=n[a].on)&&r.apply(this,arguments);return t}return n.on=function(n,a){var i,o=r.get(n);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,i=e.indexOf(o)).concat(e.slice(i+1)),r.remove(n)),a&&e.push(r.set(n,{on:a})),t)},n}function B(){t.event.preventDefault()}function N(){for(var e,r=t.event;e=r.sourceEvent;)r=e;return r}function j(e){for(var r=new R,n=0,a=arguments.length;++n<a;)r[arguments[n]]=F(r);return r.of=function(n,a){return function(i){try{var o=i.sourceEvent=t.event;i.target=e,t.event=i,r[i.type].apply(n,a)}finally{t.event=o}}},r}t.dispatch=function(){for(var t=new R,e=-1,r=arguments.length;++e<r;)t[arguments[e]]=F(t);return t},R.prototype.on=function(t,e){var r=t.indexOf("."),n="";if(r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),t)return arguments.length<2?this[t].on(n):this[t].on(n,e);if(2===arguments.length){if(null==e)for(t in this)this.hasOwnProperty(t)&&this[t].on(n,null);return this}},t.event=null,t.requote=function(t){return t.replace(V,"\\$&")};var V=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,U={}.__proto__?function(t,e){t.__proto__=e}:function(t,e){for(var r in e)t[r]=e[r]};function q(t){return U(t,W),t}var H=function(t,e){return e.querySelector(t)},G=function(t,e){return e.querySelectorAll(t)},Y=function(t,e){var r=t.matches||t[z(t,"matchesSelector")];return(Y=function(t,e){return r.call(t,e)})(t,e)};"function"==typeof Sizzle&&(H=function(t,e){return Sizzle(t,e)[0]||null},G=Sizzle,Y=Sizzle.matchesSelector),t.selection=function(){return t.select(a.documentElement)};var W=t.selection.prototype=[];function X(t){return"function"==typeof t?t:function(){return H(t,this)}}function Z(t){return"function"==typeof t?t:function(){return G(t,this)}}W.select=function(t){var e,r,n,a,i=[];t=X(t);for(var o=-1,s=this.length;++o<s;){i.push(e=[]),e.parentNode=(n=this[o]).parentNode;for(var l=-1,c=n.length;++l<c;)(a=n[l])?(e.push(r=t.call(a,a.__data__,l,o)),r&&"__data__"in a&&(r.__data__=a.__data__)):e.push(null)}return q(i)},W.selectAll=function(t){var e,r,a=[];t=Z(t);for(var i=-1,o=this.length;++i<o;)for(var s=this[i],l=-1,c=s.length;++l<c;)(r=s[l])&&(a.push(e=n(t.call(r,r.__data__,l,i))),e.parentNode=r);return q(a)};var J="http://www.w3.org/1999/xhtml",K={svg:"http://www.w3.org/2000/svg",xhtml:J,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Q(e,r){return e=t.ns.qualify(e),null==r?e.local?function(){this.removeAttributeNS(e.space,e.local)}:function(){this.removeAttribute(e)}:"function"==typeof r?e.local?function(){var t=r.apply(this,arguments);null==t?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,t)}:function(){var t=r.apply(this,arguments);null==t?this.removeAttribute(e):this.setAttribute(e,t)}:e.local?function(){this.setAttributeNS(e.space,e.local,r)}:function(){this.setAttribute(e,r)}}function $(t){return t.trim().replace(/\s+/g," ")}function tt(e){return new RegExp("(?:^|\\s+)"+t.requote(e)+"(?:\\s+|$)","g")}function et(t){return(t+"").trim().split(/^|\s+/)}function rt(t,e){var r=(t=et(t).map(nt)).length;return"function"==typeof e?function(){for(var n=-1,a=e.apply(this,arguments);++n<r;)t[n](this,a)}:function(){for(var n=-1;++n<r;)t[n](this,e)}}function nt(t){var e=tt(t);return function(r,n){if(a=r.classList)return n?a.add(t):a.remove(t);var a=r.getAttribute("class")||"";n?(e.lastIndex=0,e.test(a)||r.setAttribute("class",$(a+" "+t))):r.setAttribute("class",$(a.replace(e," ")))}}function at(t,e,r){return null==e?function(){this.style.removeProperty(t)}:"function"==typeof e?function(){var n=e.apply(this,arguments);null==n?this.style.removeProperty(t):this.style.setProperty(t,n,r)}:function(){this.style.setProperty(t,e,r)}}function it(t,e){return null==e?function(){delete this[t]}:"function"==typeof e?function(){var r=e.apply(this,arguments);null==r?delete this[t]:this[t]=r}:function(){this[t]=e}}function ot(e){return"function"==typeof e?e:(e=t.ns.qualify(e)).local?function(){return this.ownerDocument.createElementNS(e.space,e.local)}:function(){var t=this.ownerDocument,r=this.namespaceURI;return r===J&&t.documentElement.namespaceURI===J?t.createElement(e):t.createElementNS(r,e)}}function st(){var t=this.parentNode;t&&t.removeChild(this)}function lt(t){return{__data__:t}}function ct(t){return function(){return Y(this,t)}}function ut(t,e){for(var r=0,n=t.length;r<n;r++)for(var a,i=t[r],o=0,s=i.length;o<s;o++)(a=i[o])&&e(a,o,r);return t}function ht(t){return U(t,ft),t}t.ns={prefix:K,qualify:function(t){var e=t.indexOf(":"),r=t;return e>=0&&"xmlns"!==(r=t.slice(0,e))&&(t=t.slice(e+1)),K.hasOwnProperty(r)?{space:K[r],local:t}:t}},W.attr=function(e,r){if(arguments.length<2){if("string"==typeof e){var n=this.node();return(e=t.ns.qualify(e)).local?n.getAttributeNS(e.space,e.local):n.getAttribute(e)}for(r in e)this.each(Q(r,e[r]));return this}return this.each(Q(e,r))},W.classed=function(t,e){if(arguments.length<2){if("string"==typeof t){var r=this.node(),n=(t=et(t)).length,a=-1;if(e=r.classList){for(;++a<n;)if(!e.contains(t[a]))return!1}else for(e=r.getAttribute("class");++a<n;)if(!tt(t[a]).test(e))return!1;return!0}for(e in t)this.each(rt(e,t[e]));return this}return this.each(rt(t,e))},W.style=function(t,e,r){var n=arguments.length;if(n<3){if("string"!=typeof t){for(r in n<2&&(e=""),t)this.each(at(r,t[r],e));return this}if(n<2){var a=this.node();return o(a).getComputedStyle(a,null).getPropertyValue(t)}r=""}return this.each(at(t,e,r))},W.property=function(t,e){if(arguments.length<2){if("string"==typeof t)return this.node()[t];for(e in t)this.each(it(e,t[e]));return this}return this.each(it(t,e))},W.text=function(t){return arguments.length?this.each("function"==typeof t?function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}:null==t?function(){this.textContent=""}:function(){this.textContent=t}):this.node().textContent},W.html=function(t){return arguments.length?this.each("function"==typeof t?function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}:null==t?function(){this.innerHTML=""}:function(){this.innerHTML=t}):this.node().innerHTML},W.append=function(t){return t=ot(t),this.select(function(){return this.appendChild(t.apply(this,arguments))})},W.insert=function(t,e){return t=ot(t),e=X(e),this.select(function(){return this.insertBefore(t.apply(this,arguments),e.apply(this,arguments)||null)})},W.remove=function(){return this.each(st)},W.data=function(t,e){var r,n,a=-1,i=this.length;if(!arguments.length){for(t=new Array(i=(r=this[0]).length);++a<i;)(n=r[a])&&(t[a]=n.__data__);return t}function o(t,r){var n,a,i,o=t.length,u=r.length,h=Math.min(o,u),f=new Array(u),p=new Array(u),d=new Array(o);if(e){var g,v=new b,m=new Array(o);for(n=-1;++n<o;)(a=t[n])&&(v.has(g=e.call(a,a.__data__,n))?d[n]=a:v.set(g,a),m[n]=g);for(n=-1;++n<u;)(a=v.get(g=e.call(r,i=r[n],n)))?!0!==a&&(f[n]=a,a.__data__=i):p[n]=lt(i),v.set(g,!0);for(n=-1;++n<o;)n in m&&!0!==v.get(m[n])&&(d[n]=t[n])}else{for(n=-1;++n<h;)a=t[n],i=r[n],a?(a.__data__=i,f[n]=a):p[n]=lt(i);for(;n<u;++n)p[n]=lt(r[n]);for(;n<o;++n)d[n]=t[n]}p.update=f,p.parentNode=f.parentNode=d.parentNode=t.parentNode,s.push(p),l.push(f),c.push(d)}var s=ht([]),l=q([]),c=q([]);if("function"==typeof t)for(;++a<i;)o(r=this[a],t.call(r,r.parentNode.__data__,a));else for(;++a<i;)o(r=this[a],t);return l.enter=function(){return s},l.exit=function(){return c},l},W.datum=function(t){return arguments.length?this.property("__data__",t):this.property("__data__")},W.filter=function(t){var e,r,n,a=[];"function"!=typeof t&&(t=ct(t));for(var i=0,o=this.length;i<o;i++){a.push(e=[]),e.parentNode=(r=this[i]).parentNode;for(var s=0,l=r.length;s<l;s++)(n=r[s])&&t.call(n,n.__data__,s,i)&&e.push(n)}return q(a)},W.order=function(){for(var t=-1,e=this.length;++t<e;)for(var r,n=this[t],a=n.length-1,i=n[a];--a>=0;)(r=n[a])&&(i&&i!==r.nextSibling&&i.parentNode.insertBefore(r,i),i=r);return this},W.sort=function(t){t=function(t){arguments.length||(t=f);return function(e,r){return e&&r?t(e.__data__,r.__data__):!e-!r}}.apply(this,arguments);for(var e=-1,r=this.length;++e<r;)this[e].sort(t);return this.order()},W.each=function(t){return ut(this,function(e,r,n){t.call(e,e.__data__,r,n)})},W.call=function(t){var e=n(arguments);return t.apply(e[0]=this,e),this},W.empty=function(){return!this.node()},W.node=function(){for(var t=0,e=this.length;t<e;t++)for(var r=this[t],n=0,a=r.length;n<a;n++){var i=r[n];if(i)return i}return null},W.size=function(){var t=0;return ut(this,function(){++t}),t};var ft=[];function pt(e,r,a){var i="__on"+e,o=e.indexOf("."),s=gt;o>0&&(e=e.slice(0,o));var l=dt.get(e);function c(){var t=this[i];t&&(this.removeEventListener(e,t,t.$),delete this[i])}return l&&(e=l,s=vt),o?r?function(){var t=s(r,n(arguments));c.call(this),this.addEventListener(e,this[i]=t,t.$=a),t._=r}:c:r?D:function(){var r,n=new RegExp("^__on([^.]+)"+t.requote(e)+"$");for(var a in this)if(r=a.match(n)){var i=this[a];this.removeEventListener(r[1],i,i.$),delete this[a]}}}t.selection.enter=ht,t.selection.enter.prototype=ft,ft.append=W.append,ft.empty=W.empty,ft.node=W.node,ft.call=W.call,ft.size=W.size,ft.select=function(t){for(var e,r,n,a,i,o=[],s=-1,l=this.length;++s<l;){n=(a=this[s]).update,o.push(e=[]),e.parentNode=a.parentNode;for(var c=-1,u=a.length;++c<u;)(i=a[c])?(e.push(n[c]=r=t.call(a.parentNode,i.__data__,c,s)),r.__data__=i.__data__):e.push(null)}return q(o)},ft.insert=function(t,e){var r,n,a;return arguments.length<2&&(r=this,e=function(t,e,i){var o,s=r[i].update,l=s.length;for(i!=a&&(a=i,n=0),e>=n&&(n=e+1);!(o=s[n])&&++n<l;);return o}),W.insert.call(this,t,e)},t.select=function(t){var e;return"string"==typeof t?(e=[H(t,a)]).parentNode=a.documentElement:(e=[t]).parentNode=i(t),q([e])},t.selectAll=function(t){var e;return"string"==typeof t?(e=n(G(t,a))).parentNode=a.documentElement:(e=n(t)).parentNode=null,q([e])},W.on=function(t,e,r){var n=arguments.length;if(n<3){if("string"!=typeof t){for(r in n<2&&(e=!1),t)this.each(pt(r,t[r],e));return this}if(n<2)return(n=this.node()["__on"+t])&&n._;r=!1}return this.each(pt(t,e,r))};var dt=t.map({mouseenter:"mouseover",mouseleave:"mouseout"});function gt(e,r){return function(n){var a=t.event;t.event=n,r[0]=this.__data__;try{e.apply(this,r)}finally{t.event=a}}}function vt(t,e){var r=gt(t,e);return function(t){var e=t.relatedTarget;e&&(e===this||8&e.compareDocumentPosition(this))||r.call(this,t)}}a&&dt.forEach(function(t){"on"+t in a&&dt.remove(t)});var mt,yt=0;function xt(e){var r=".dragsuppress-"+ ++yt,n="click"+r,a=t.select(o(e)).on("touchmove"+r,B).on("dragstart"+r,B).on("selectstart"+r,B);if(null==mt&&(mt=!("onselectstart"in e)&&z(e.style,"userSelect")),mt){var s=i(e).style,l=s[mt];s[mt]="none"}return function(t){if(a.on(r,null),mt&&(s[mt]=l),t){var e=function(){a.on(n,null)};a.on(n,function(){B(),e()},!0),setTimeout(e,0)}}}t.mouse=function(t){return _t(t,N())};var bt=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;function _t(e,r){r.changedTouches&&(r=r.changedTouches[0]);var n=e.ownerSVGElement||e;if(n.createSVGPoint){var a=n.createSVGPoint();if(bt<0){var i=o(e);if(i.scrollX||i.scrollY){var s=(n=t.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important"))[0][0].getScreenCTM();bt=!(s.f||s.e),n.remove()}}return bt?(a.x=r.pageX,a.y=r.pageY):(a.x=r.clientX,a.y=r.clientY),[(a=a.matrixTransform(e.getScreenCTM().inverse())).x,a.y]}var l=e.getBoundingClientRect();return[r.clientX-l.left-e.clientLeft,r.clientY-l.top-e.clientTop]}function wt(){return t.event.changedTouches[0].identifier}t.touch=function(t,e,r){if(arguments.length<3&&(r=e,e=N().changedTouches),e)for(var n,a=0,i=e.length;a<i;++a)if((n=e[a]).identifier===r)return _t(t,n)},t.behavior.drag=function(){var e=j(i,"drag","dragstart","dragend"),r=null,n=s(D,t.mouse,o,"mousemove","mouseup"),a=s(wt,t.touch,P,"touchmove","touchend");function i(){this.on("mousedown.drag",n).on("touchstart.drag",a)}function s(n,a,i,o,s){return function(){var l,c=t.event.target.correspondingElement||t.event.target,u=this.parentNode,h=e.of(this,arguments),f=0,p=n(),d=".drag"+(null==p?"":"-"+p),g=t.select(i(c)).on(o+d,function(){var t,e,r=a(u,p);if(!r)return;t=r[0]-m[0],e=r[1]-m[1],f|=t|e,m=r,h({type:"drag",x:r[0]+l[0],y:r[1]+l[1],dx:t,dy:e})}).on(s+d,function(){if(!a(u,p))return;g.on(o+d,null).on(s+d,null),v(f),h({type:"dragend"})}),v=xt(c),m=a(u,p);l=r?[(l=r.apply(this,arguments)).x-m[0],l.y-m[1]]:[0,0],h({type:"dragstart"})}}return i.origin=function(t){return arguments.length?(r=t,i):r},t.rebind(i,e,"on")},t.touches=function(t,e){return arguments.length<2&&(e=N().touches),e?n(e).map(function(e){var r=_t(t,e);return r.identifier=e.identifier,r}):[]};var kt=1e-6,Tt=kt*kt,Mt=Math.PI,At=2*Mt,St=At-kt,Et=Mt/2,Lt=Mt/180,Ct=180/Mt;function Pt(t){return t>0?1:t<0?-1:0}function Ot(t,e,r){return(e[0]-t[0])*(r[1]-t[1])-(e[1]-t[1])*(r[0]-t[0])}function zt(t){return t>1?0:t<-1?Mt:Math.acos(t)}function It(t){return t>1?Et:t<-1?-Et:Math.asin(t)}function Dt(t){return((t=Math.exp(t))+1/t)/2}function Rt(t){return(t=Math.sin(t/2))*t}var Ft=Math.SQRT2;t.interpolateZoom=function(t,e){var r,n,a=t[0],i=t[1],o=t[2],s=e[0],l=e[1],c=e[2],u=s-a,h=l-i,f=u*u+h*h;if(f<Tt)n=Math.log(c/o)/Ft,r=function(t){return[a+t*u,i+t*h,o*Math.exp(Ft*t*n)]};else{var p=Math.sqrt(f),d=(c*c-o*o+4*f)/(2*o*2*p),g=(c*c-o*o-4*f)/(2*c*2*p),v=Math.log(Math.sqrt(d*d+1)-d),m=Math.log(Math.sqrt(g*g+1)-g);n=(m-v)/Ft,r=function(t){var e,r=t*n,s=Dt(v),l=o/(2*p)*(s*(e=Ft*r+v,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(v));return[a+l*u,i+l*h,o*s/Dt(Ft*r+v)]}}return r.duration=1e3*n,r},t.behavior.zoom=function(){var e,r,n,i,s,l,c,u,h,f={x:0,y:0,k:1},p=[960,500],d=jt,g=250,v=0,m="mousedown.zoom",y="mousemove.zoom",x="mouseup.zoom",b="touchstart.zoom",_=j(w,"zoomstart","zoom","zoomend");function w(t){t.on(m,P).on(Nt+".zoom",z).on("dblclick.zoom",I).on(b,O)}function k(t){return[(t[0]-f.x)/f.k,(t[1]-f.y)/f.k]}function T(t){f.k=Math.max(d[0],Math.min(d[1],t))}function M(t,e){e=function(t){return[t[0]*f.k+f.x,t[1]*f.k+f.y]}(e),f.x+=t[0]-e[0],f.y+=t[1]-e[1]}function A(e,n,a,i){e.__chart__={x:f.x,y:f.y,k:f.k},T(Math.pow(2,i)),M(r=n,a),e=t.select(e),g>0&&(e=e.transition().duration(g)),e.call(w.event)}function S(){c&&c.domain(l.range().map(function(t){return(t-f.x)/f.k}).map(l.invert)),h&&h.domain(u.range().map(function(t){return(t-f.y)/f.k}).map(u.invert))}function E(t){v++||t({type:"zoomstart"})}function L(t){S(),t({type:"zoom",scale:f.k,translate:[f.x,f.y]})}function C(t){--v||(t({type:"zoomend"}),r=null)}function P(){var e=this,r=_.of(e,arguments),n=0,a=t.select(o(e)).on(y,function(){n=1,M(t.mouse(e),i),L(r)}).on(x,function(){a.on(y,null).on(x,null),s(n),C(r)}),i=k(t.mouse(e)),s=xt(e);ps.call(e),E(r)}function O(){var e,r=this,n=_.of(r,arguments),a={},i=0,o=".zoom-"+t.event.changedTouches[0].identifier,l="touchmove"+o,c="touchend"+o,u=[],h=t.select(r),p=xt(r);function d(){var n=t.touches(r);return e=f.k,n.forEach(function(t){t.identifier in a&&(a[t.identifier]=k(t))}),n}function g(){var e=t.event.target;t.select(e).on(l,v).on(c,y),u.push(e);for(var n=t.event.changedTouches,o=0,h=n.length;o<h;++o)a[n[o].identifier]=null;var p=d(),g=Date.now();if(1===p.length){if(g-s<500){var m=p[0];A(r,m,a[m.identifier],Math.floor(Math.log(f.k)/Math.LN2)+1),B()}s=g}else if(p.length>1){m=p[0];var x=p[1],b=m[0]-x[0],_=m[1]-x[1];i=b*b+_*_}}function v(){var o,l,c,u,h=t.touches(r);ps.call(r);for(var f=0,p=h.length;f<p;++f,u=null)if(c=h[f],u=a[c.identifier]){if(l)break;o=c,l=u}if(u){var d=(d=c[0]-o[0])*d+(d=c[1]-o[1])*d,g=i&&Math.sqrt(d/i);o=[(o[0]+c[0])/2,(o[1]+c[1])/2],l=[(l[0]+u[0])/2,(l[1]+u[1])/2],T(g*e)}s=null,M(o,l),L(n)}function y(){if(t.event.touches.length){for(var e=t.event.changedTouches,r=0,i=e.length;r<i;++r)delete a[e[r].identifier];for(var s in a)return void d()}t.selectAll(u).on(o,null),h.on(m,P).on(b,O),p(),C(n)}g(),E(n),h.on(m,null).on(b,g)}function z(){var a=_.of(this,arguments);i?clearTimeout(i):(ps.call(this),e=k(r=n||t.mouse(this)),E(a)),i=setTimeout(function(){i=null,C(a)},50),B(),T(Math.pow(2,.002*Bt())*f.k),M(r,e),L(a)}function I(){var e=t.mouse(this),r=Math.log(f.k)/Math.LN2;A(this,e,k(e),t.event.shiftKey?Math.ceil(r)-1:Math.floor(r)+1)}return Nt||(Nt="onwheel"in a?(Bt=function(){return-t.event.deltaY*(t.event.deltaMode?120:1)},"wheel"):"onmousewheel"in a?(Bt=function(){return t.event.wheelDelta},"mousewheel"):(Bt=function(){return-t.event.detail},"MozMousePixelScroll")),w.event=function(e){e.each(function(){var e=_.of(this,arguments),n=f;vs?t.select(this).transition().each("start.zoom",function(){f=this.__chart__||{x:0,y:0,k:1},E(e)}).tween("zoom:zoom",function(){var a=p[0],i=p[1],o=r?r[0]:a/2,s=r?r[1]:i/2,l=t.interpolateZoom([(o-f.x)/f.k,(s-f.y)/f.k,a/f.k],[(o-n.x)/n.k,(s-n.y)/n.k,a/n.k]);return function(t){var r=l(t),n=a/r[2];this.__chart__=f={x:o-r[0]*n,y:s-r[1]*n,k:n},L(e)}}).each("interrupt.zoom",function(){C(e)}).each("end.zoom",function(){C(e)}):(this.__chart__=f,E(e),L(e),C(e))})},w.translate=function(t){return arguments.length?(f={x:+t[0],y:+t[1],k:f.k},S(),w):[f.x,f.y]},w.scale=function(t){return arguments.length?(f={x:f.x,y:f.y,k:null},T(+t),S(),w):f.k},w.scaleExtent=function(t){return arguments.length?(d=null==t?jt:[+t[0],+t[1]],w):d},w.center=function(t){return arguments.length?(n=t&&[+t[0],+t[1]],w):n},w.size=function(t){return arguments.length?(p=t&&[+t[0],+t[1]],w):p},w.duration=function(t){return arguments.length?(g=+t,w):g},w.x=function(t){return arguments.length?(c=t,l=t.copy(),f={x:0,y:0,k:1},w):c},w.y=function(t){return arguments.length?(h=t,u=t.copy(),f={x:0,y:0,k:1},w):h},t.rebind(w,_,"on")};var Bt,Nt,jt=[0,1/0];function Vt(){}function Ut(t,e,r){return this instanceof Ut?(this.h=+t,this.s=+e,void(this.l=+r)):arguments.length<2?t instanceof Ut?new Ut(t.h,t.s,t.l):ue(""+t,he,Ut):new Ut(t,e,r)}t.color=Vt,Vt.prototype.toString=function(){return this.rgb()+""},t.hsl=Ut;var qt=Ut.prototype=new Vt;function Ht(t,e,r){var n,a;function i(t){return Math.round(255*function(t){return t>360?t-=360:t<0&&(t+=360),t<60?n+(a-n)*t/60:t<180?a:t<240?n+(a-n)*(240-t)/60:n}(t))}return t=isNaN(t)?0:(t%=360)<0?t+360:t,e=isNaN(e)?0:e<0?0:e>1?1:e,n=2*(r=r<0?0:r>1?1:r)-(a=r<=.5?r*(1+e):r+e-r*e),new ie(i(t+120),i(t),i(t-120))}function Gt(e,r,n){return this instanceof Gt?(this.h=+e,this.c=+r,void(this.l=+n)):arguments.length<2?e instanceof Gt?new Gt(e.h,e.c,e.l):ee(e instanceof Xt?e.l:(e=fe((e=t.rgb(e)).r,e.g,e.b)).l,e.a,e.b):new Gt(e,r,n)}qt.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),new Ut(this.h,this.s,this.l/t)},qt.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new Ut(this.h,this.s,t*this.l)},qt.rgb=function(){return Ht(this.h,this.s,this.l)},t.hcl=Gt;var Yt=Gt.prototype=new Vt;function Wt(t,e,r){return isNaN(t)&&(t=0),isNaN(e)&&(e=0),new Xt(r,Math.cos(t*=Lt)*e,Math.sin(t)*e)}function Xt(t,e,r){return this instanceof Xt?(this.l=+t,this.a=+e,void(this.b=+r)):arguments.length<2?t instanceof Xt?new Xt(t.l,t.a,t.b):t instanceof Gt?Wt(t.h,t.c,t.l):fe((t=ie(t)).r,t.g,t.b):new Xt(t,e,r)}Yt.brighter=function(t){return new Gt(this.h,this.c,Math.min(100,this.l+Zt*(arguments.length?t:1)))},Yt.darker=function(t){return new Gt(this.h,this.c,Math.max(0,this.l-Zt*(arguments.length?t:1)))},Yt.rgb=function(){return Wt(this.h,this.c,this.l).rgb()},t.lab=Xt;var Zt=18,Jt=.95047,Kt=1,Qt=1.08883,$t=Xt.prototype=new Vt;function te(t,e,r){var n=(t+16)/116,a=n+e/500,i=n-r/200;return new ie(ae(3.2404542*(a=re(a)*Jt)-1.5371385*(n=re(n)*Kt)-.4985314*(i=re(i)*Qt)),ae(-.969266*a+1.8760108*n+.041556*i),ae(.0556434*a-.2040259*n+1.0572252*i))}function ee(t,e,r){return t>0?new Gt(Math.atan2(r,e)*Ct,Math.sqrt(e*e+r*r),t):new Gt(NaN,NaN,t)}function re(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function ne(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function ae(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function ie(t,e,r){return this instanceof ie?(this.r=~~t,this.g=~~e,void(this.b=~~r)):arguments.length<2?t instanceof ie?new ie(t.r,t.g,t.b):ue(""+t,ie,Ht):new ie(t,e,r)}function oe(t){return new ie(t>>16,t>>8&255,255&t)}function se(t){return oe(t)+""}$t.brighter=function(t){return new Xt(Math.min(100,this.l+Zt*(arguments.length?t:1)),this.a,this.b)},$t.darker=function(t){return new Xt(Math.max(0,this.l-Zt*(arguments.length?t:1)),this.a,this.b)},$t.rgb=function(){return te(this.l,this.a,this.b)},t.rgb=ie;var le=ie.prototype=new Vt;function ce(t){return t<16?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function ue(t,e,r){var n,a,i,o=0,s=0,l=0;if(n=/([a-z]+)\((.*)\)/.exec(t=t.toLowerCase()))switch(a=n[2].split(","),n[1]){case"hsl":return r(parseFloat(a[0]),parseFloat(a[1])/100,parseFloat(a[2])/100);case"rgb":return e(de(a[0]),de(a[1]),de(a[2]))}return(i=ge.get(t))?e(i.r,i.g,i.b):(null==t||"#"!==t.charAt(0)||isNaN(i=parseInt(t.slice(1),16))||(4===t.length?(o=(3840&i)>>4,o|=o>>4,s=240&i,s|=s>>4,l=15&i,l|=l<<4):7===t.length&&(o=(16711680&i)>>16,s=(65280&i)>>8,l=255&i)),e(o,s,l))}function he(t,e,r){var n,a,i=Math.min(t/=255,e/=255,r/=255),o=Math.max(t,e,r),s=o-i,l=(o+i)/2;return s?(a=l<.5?s/(o+i):s/(2-o-i),n=t==o?(e-r)/s+(e<r?6:0):e==o?(r-t)/s+2:(t-e)/s+4,n*=60):(n=NaN,a=l>0&&l<1?0:n),new Ut(n,a,l)}function fe(t,e,r){var n=ne((.4124564*(t=pe(t))+.3575761*(e=pe(e))+.1804375*(r=pe(r)))/Jt),a=ne((.2126729*t+.7151522*e+.072175*r)/Kt);return Xt(116*a-16,500*(n-a),200*(a-ne((.0193339*t+.119192*e+.9503041*r)/Qt)))}function pe(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function de(t){var e=parseFloat(t);return"%"===t.charAt(t.length-1)?Math.round(2.55*e):e}le.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var e=this.r,r=this.g,n=this.b,a=30;return e||r||n?(e&&e<a&&(e=a),r&&r<a&&(r=a),n&&n<a&&(n=a),new ie(Math.min(255,e/t),Math.min(255,r/t),Math.min(255,n/t))):new ie(a,a,a)},le.darker=function(t){return new ie((t=Math.pow(.7,arguments.length?t:1))*this.r,t*this.g,t*this.b)},le.hsl=function(){return he(this.r,this.g,this.b)},le.toString=function(){return"#"+ce(this.r)+ce(this.g)+ce(this.b)};var ge=t.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});function ve(t){return"function"==typeof t?t:function(){return t}}function me(t){return function(e,r,n){return 2===arguments.length&&"function"==typeof r&&(n=r,r=null),ye(e,r,t,n)}}function ye(e,r,a,i){var o={},s=t.dispatch("beforesend","progress","load","error"),l={},c=new XMLHttpRequest,u=null;function h(){var t,e=c.status;if(!e&&function(t){var e=t.responseType;return e&&"text"!==e?t.response:t.responseText}(c)||e>=200&&e<300||304===e){try{t=a.call(o,c)}catch(t){return void s.error.call(o,t)}s.load.call(o,t)}else s.error.call(o,c)}return!this.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(e)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=h:c.onreadystatechange=function(){c.readyState>3&&h()},c.onprogress=function(e){var r=t.event;t.event=e;try{s.progress.call(o,c)}finally{t.event=r}},o.header=function(t,e){return t=(t+"").toLowerCase(),arguments.length<2?l[t]:(null==e?delete l[t]:l[t]=e+"",o)},o.mimeType=function(t){return arguments.length?(r=null==t?null:t+"",o):r},o.responseType=function(t){return arguments.length?(u=t,o):u},o.response=function(t){return a=t,o},["get","post"].forEach(function(t){o[t]=function(){return o.send.apply(o,[t].concat(n(arguments)))}}),o.send=function(t,n,a){if(2===arguments.length&&"function"==typeof n&&(a=n,n=null),c.open(t,e,!0),null==r||"accept"in l||(l.accept=r+",*/*"),c.setRequestHeader)for(var i in l)c.setRequestHeader(i,l[i]);return null!=r&&c.overrideMimeType&&c.overrideMimeType(r),null!=u&&(c.responseType=u),null!=a&&o.on("error",a).on("load",function(t){a(null,t)}),s.beforesend.call(o,c),c.send(null==n?null:n),o},o.abort=function(){return c.abort(),o},t.rebind(o,s,"on"),null==i?o:o.get(function(t){return 1===t.length?function(e,r){t(null==e?r:null)}:t}(i))}ge.forEach(function(t,e){ge.set(t,oe(e))}),t.functor=ve,t.xhr=me(P),t.dsv=function(t,e){var r=new RegExp('["'+t+"\n]"),n=t.charCodeAt(0);function a(t,r,n){arguments.length<3&&(n=r,r=null);var a=ye(t,e,null==r?i:o(r),n);return a.row=function(t){return arguments.length?a.response(null==(r=t)?i:o(t)):r},a}function i(t){return a.parse(t.responseText)}function o(t){return function(e){return a.parse(e.responseText,t)}}function s(e){return e.map(l).join(t)}function l(t){return r.test(t)?'"'+t.replace(/\"/g,'""')+'"':t}return a.parse=function(t,e){var r;return a.parseRows(t,function(t,n){if(r)return r(t,n-1);var a=new Function("d","return {"+t.map(function(t,e){return JSON.stringify(t)+": d["+e+"]"}).join(",")+"}");r=e?function(t,r){return e(a(t),r)}:a})},a.parseRows=function(t,e){var r,a,i={},o={},s=[],l=t.length,c=0,u=0;function h(){if(c>=l)return o;if(a)return a=!1,i;var e=c;if(34===t.charCodeAt(e)){for(var r=e;r++<l;)if(34===t.charCodeAt(r)){if(34!==t.charCodeAt(r+1))break;++r}return c=r+2,13===(s=t.charCodeAt(r+1))?(a=!0,10===t.charCodeAt(r+2)&&++c):10===s&&(a=!0),t.slice(e+1,r).replace(/""/g,'"')}for(;c<l;){var s,u=1;if(10===(s=t.charCodeAt(c++)))a=!0;else if(13===s)a=!0,10===t.charCodeAt(c)&&(++c,++u);else if(s!==n)continue;return t.slice(e,c-u)}return t.slice(e)}for(;(r=h())!==o;){for(var f=[];r!==i&&r!==o;)f.push(r),r=h();e&&null==(f=e(f,u++))||s.push(f)}return s},a.format=function(e){if(Array.isArray(e[0]))return a.formatRows(e);var r=new C,n=[];return e.forEach(function(t){for(var e in t)r.has(e)||n.push(r.add(e))}),[n.map(l).join(t)].concat(e.map(function(e){return n.map(function(t){return l(e[t])}).join(t)})).join("\n")},a.formatRows=function(t){return t.map(s).join("\n")},a},t.csv=t.dsv(",","text/csv"),t.tsv=t.dsv("\t","text/tab-separated-values");var xe,be,_e,we,ke=this[z(this,"requestAnimationFrame")]||function(t){setTimeout(t,17)};function Te(t,e,r){var n=arguments.length;n<2&&(e=0),n<3&&(r=Date.now());var a={c:t,t:r+e,n:null};return be?be.n=a:xe=a,be=a,_e||(we=clearTimeout(we),_e=1,ke(Me)),a}function Me(){var t=Ae(),e=Se()-t;e>24?(isFinite(e)&&(clearTimeout(we),we=setTimeout(Me,e)),_e=0):(_e=1,ke(Me))}function Ae(){for(var t=Date.now(),e=xe;e;)t>=e.t&&e.c(t-e.t)&&(e.c=null),e=e.n;return t}function Se(){for(var t,e=xe,r=1/0;e;)e.c?(e.t<r&&(r=e.t),e=(t=e).n):e=t?t.n=e.n:xe=e.n;return be=t,r}function Ee(t,e){return e-(t?Math.ceil(Math.log(t)/Math.LN10):1)}t.timer=function(){Te.apply(this,arguments)},t.timer.flush=function(){Ae(),Se()},t.round=function(t,e){return e?Math.round(t*(e=Math.pow(10,e)))/e:Math.round(t)};var Le=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(function(t,e){var r=Math.pow(10,3*y(8-e));return{scale:e>8?function(t){return t/r}:function(t){return t*r},symbol:t}});function Ce(e){var r=e.decimal,n=e.thousands,a=e.grouping,i=e.currency,o=a&&n?function(t,e){for(var r=t.length,i=[],o=0,s=a[0],l=0;r>0&&s>0&&(l+s+1>e&&(s=Math.max(1,e-l)),i.push(t.substring(r-=s,r+s)),!((l+=s+1)>e));)s=a[o=(o+1)%a.length];return i.reverse().join(n)}:P;return function(e){var n=Pe.exec(e),a=n[1]||" ",s=n[2]||">",l=n[3]||"-",c=n[4]||"",u=n[5],h=+n[6],f=n[7],p=n[8],d=n[9],g=1,v="",m="",y=!1,x=!0;switch(p&&(p=+p.substring(1)),(u||"0"===a&&"="===s)&&(u=a="0",s="="),d){case"n":f=!0,d="g";break;case"%":g=100,m="%",d="f";break;case"p":g=100,m="%",d="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+d.toLowerCase());case"c":x=!1;case"d":y=!0,p=0;break;case"s":g=-1,d="r"}"$"===c&&(v=i[0],m=i[1]),"r"!=d||p||(d="g"),null!=p&&("g"==d?p=Math.max(1,Math.min(21,p)):"e"!=d&&"f"!=d||(p=Math.max(0,Math.min(20,p)))),d=Oe.get(d)||ze;var b=u&&f;return function(e){var n=m;if(y&&e%1)return"";var i=e<0||0===e&&1/e<0?(e=-e,"-"):"-"===l?"":l;if(g<0){var c=t.formatPrefix(e,p);e=c.scale(e),n=c.symbol+m}else e*=g;var _,w,k=(e=d(e,p)).lastIndexOf(".");if(k<0){var T=x?e.lastIndexOf("e"):-1;T<0?(_=e,w=""):(_=e.substring(0,T),w=e.substring(T))}else _=e.substring(0,k),w=r+e.substring(k+1);!u&&f&&(_=o(_,1/0));var M=v.length+_.length+w.length+(b?0:i.length),A=M<h?new Array(M=h-M+1).join(a):"";return b&&(_=o(A+_,A.length?h-w.length:1/0)),i+=v,e=_+w,("<"===s?i+e+A:">"===s?A+i+e:"^"===s?A.substring(0,M>>=1)+i+e+A.substring(M):i+(b?e:A+e))+n}}}t.formatPrefix=function(e,r){var n=0;return(e=+e)&&(e<0&&(e*=-1),r&&(e=t.round(e,Ee(e,r))),n=1+Math.floor(1e-12+Math.log(e)/Math.LN10),n=Math.max(-24,Math.min(24,3*Math.floor((n-1)/3)))),Le[8+n/3]};var Pe=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,Oe=t.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,e){return t.toPrecision(e)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},r:function(e,r){return(e=t.round(e,Ee(e,r))).toFixed(Math.max(0,Math.min(20,Ee(e*(1+1e-15),r))))}});function ze(t){return t+""}var Ie=t.time={},De=Date;function Re(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}Re.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){Fe.setUTCDate.apply(this._,arguments)},setDay:function(){Fe.setUTCDay.apply(this._,arguments)},setFullYear:function(){Fe.setUTCFullYear.apply(this._,arguments)},setHours:function(){Fe.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){Fe.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){Fe.setUTCMinutes.apply(this._,arguments)},setMonth:function(){Fe.setUTCMonth.apply(this._,arguments)},setSeconds:function(){Fe.setUTCSeconds.apply(this._,arguments)},setTime:function(){Fe.setTime.apply(this._,arguments)}};var Fe=Date.prototype;function Be(t,e,r){function n(e){var r=t(e),n=i(r,1);return e-r<n-e?r:n}function a(r){return e(r=t(new De(r-1)),1),r}function i(t,r){return e(t=new De(+t),r),t}function o(t,n,i){var o=a(t),s=[];if(i>1)for(;o<n;)r(o)%i||s.push(new Date(+o)),e(o,1);else for(;o<n;)s.push(new Date(+o)),e(o,1);return s}t.floor=t,t.round=n,t.ceil=a,t.offset=i,t.range=o;var s=t.utc=Ne(t);return s.floor=s,s.round=Ne(n),s.ceil=Ne(a),s.offset=Ne(i),s.range=function(t,e,r){try{De=Re;var n=new Re;return n._=t,o(n,e,r)}finally{De=Date}},t}function Ne(t){return function(e,r){try{De=Re;var n=new Re;return n._=e,t(n,r)._}finally{De=Date}}}function je(e){var r=e.dateTime,n=e.date,a=e.time,i=e.periods,o=e.days,s=e.shortDays,l=e.months,c=e.shortMonths;function u(t){var e=t.length;function r(r){for(var n,a,i,o=[],s=-1,l=0;++s<e;)37===t.charCodeAt(s)&&(o.push(t.slice(l,s)),null!=(a=Ve[n=t.charAt(++s)])&&(n=t.charAt(++s)),(i=_[n])&&(n=i(r,null==a?"e"===n?" ":"0":a)),o.push(n),l=s+1);return o.push(t.slice(l,s)),o.join("")}return r.parse=function(e){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null};if(h(r,t,e,0)!=e.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var n=null!=r.Z&&De!==Re,a=new(n?Re:De);return"j"in r?a.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),a.setFullYear(r.y,0,1),a.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(a.getDay()+5)%7:r.w+7*r.U-(a.getDay()+6)%7)):a.setFullYear(r.y,r.m,r.d),a.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),n?a._:a},r.toString=function(){return t},r}function h(t,e,r,n){for(var a,i,o,s=0,l=e.length,c=r.length;s<l;){if(n>=c)return-1;if(37===(a=e.charCodeAt(s++))){if(o=e.charAt(s++),!(i=w[o in Ve?e.charAt(s++):o])||(n=i(t,r,n))<0)return-1}else if(a!=r.charCodeAt(n++))return-1}return n}u.utc=function(t){var e=u(t);function r(t){try{var r=new(De=Re);return r._=t,e(r)}finally{De=Date}}return r.parse=function(t){try{De=Re;var r=e.parse(t);return r&&r._}finally{De=Date}},r.toString=e.toString,r},u.multi=u.utc.multi=lr;var f=t.map(),p=Ge(o),d=Ye(o),g=Ge(s),v=Ye(s),m=Ge(l),y=Ye(l),x=Ge(c),b=Ye(c);i.forEach(function(t,e){f.set(t.toLowerCase(),e)});var _={a:function(t){return s[t.getDay()]},A:function(t){return o[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return l[t.getMonth()]},c:u(r),d:function(t,e){return He(t.getDate(),e,2)},e:function(t,e){return He(t.getDate(),e,2)},H:function(t,e){return He(t.getHours(),e,2)},I:function(t,e){return He(t.getHours()%12||12,e,2)},j:function(t,e){return He(1+Ie.dayOfYear(t),e,3)},L:function(t,e){return He(t.getMilliseconds(),e,3)},m:function(t,e){return He(t.getMonth()+1,e,2)},M:function(t,e){return He(t.getMinutes(),e,2)},p:function(t){return i[+(t.getHours()>=12)]},S:function(t,e){return He(t.getSeconds(),e,2)},U:function(t,e){return He(Ie.sundayOfYear(t),e,2)},w:function(t){return t.getDay()},W:function(t,e){return He(Ie.mondayOfYear(t),e,2)},x:u(n),X:u(a),y:function(t,e){return He(t.getFullYear()%100,e,2)},Y:function(t,e){return He(t.getFullYear()%1e4,e,4)},Z:or,"%":function(){return"%"}},w={a:function(t,e,r){g.lastIndex=0;var n=g.exec(e.slice(r));return n?(t.w=v.get(n[0].toLowerCase()),r+n[0].length):-1},A:function(t,e,r){p.lastIndex=0;var n=p.exec(e.slice(r));return n?(t.w=d.get(n[0].toLowerCase()),r+n[0].length):-1},b:function(t,e,r){x.lastIndex=0;var n=x.exec(e.slice(r));return n?(t.m=b.get(n[0].toLowerCase()),r+n[0].length):-1},B:function(t,e,r){m.lastIndex=0;var n=m.exec(e.slice(r));return n?(t.m=y.get(n[0].toLowerCase()),r+n[0].length):-1},c:function(t,e,r){return h(t,_.c.toString(),e,r)},d:tr,e:tr,H:rr,I:rr,j:er,L:ir,m:$e,M:nr,p:function(t,e,r){var n=f.get(e.slice(r,r+=2).toLowerCase());return null==n?-1:(t.p=n,r)},S:ar,U:Xe,w:We,W:Ze,x:function(t,e,r){return h(t,_.x.toString(),e,r)},X:function(t,e,r){return h(t,_.X.toString(),e,r)},y:Ke,Y:Je,Z:Qe,"%":sr};return u}Ie.year=Be(function(t){return(t=Ie.day(t)).setMonth(0,1),t},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t){return t.getFullYear()}),Ie.years=Ie.year.range,Ie.years.utc=Ie.year.utc.range,Ie.day=Be(function(t){var e=new De(2e3,0);return e.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),e},function(t,e){t.setDate(t.getDate()+e)},function(t){return t.getDate()-1}),Ie.days=Ie.day.range,Ie.days.utc=Ie.day.utc.range,Ie.dayOfYear=function(t){var e=Ie.year(t);return Math.floor((t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(t,e){e=7-e;var r=Ie[t]=Be(function(t){return(t=Ie.day(t)).setDate(t.getDate()-(t.getDay()+e)%7),t},function(t,e){t.setDate(t.getDate()+7*Math.floor(e))},function(t){var r=Ie.year(t).getDay();return Math.floor((Ie.dayOfYear(t)+(r+e)%7)/7)-(r!==e)});Ie[t+"s"]=r.range,Ie[t+"s"].utc=r.utc.range,Ie[t+"OfYear"]=function(t){var r=Ie.year(t).getDay();return Math.floor((Ie.dayOfYear(t)+(r+e)%7)/7)}}),Ie.week=Ie.sunday,Ie.weeks=Ie.sunday.range,Ie.weeks.utc=Ie.sunday.utc.range,Ie.weekOfYear=Ie.sundayOfYear;var Ve={"-":"",_:" ",0:"0"},Ue=/^\s*\d+/,qe=/^%/;function He(t,e,r){var n=t<0?"-":"",a=(n?-t:t)+"",i=a.length;return n+(i<r?new Array(r-i+1).join(e)+a:a)}function Ge(e){return new RegExp("^(?:"+e.map(t.requote).join("|")+")","i")}function Ye(t){for(var e=new b,r=-1,n=t.length;++r<n;)e.set(t[r].toLowerCase(),r);return e}function We(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function Xe(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r));return n?(t.U=+n[0],r+n[0].length):-1}function Ze(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r));return n?(t.W=+n[0],r+n[0].length):-1}function Je(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function Ke(t,e,r){Ue.lastIndex=0;var n,a=Ue.exec(e.slice(r,r+2));return a?(t.y=(n=+a[0])+(n>68?1900:2e3),r+a[0].length):-1}function Qe(t,e,r){return/^[+-]\d{4}$/.test(e=e.slice(r,r+5))?(t.Z=-e,r+5):-1}function $e(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function tr(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function er(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+3));return n?(t.j=+n[0],r+n[0].length):-1}function rr(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function nr(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function ar(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function ir(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function or(t){var e=t.getTimezoneOffset(),r=e>0?"-":"+",n=y(e)/60|0,a=y(e)%60;return r+He(n,"0",2)+He(a,"0",2)}function sr(t,e,r){qe.lastIndex=0;var n=qe.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function lr(t){for(var e=t.length,r=-1;++r<e;)t[r][0]=this(t[r][0]);return function(e){for(var r=0,n=t[r];!n[1](e);)n=t[++r];return n[0](e)}}t.locale=function(t){return{numberFormat:Ce(t),timeFormat:je(t)}};var cr=t.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function ur(){}t.format=cr.numberFormat,t.geo={},ur.prototype={s:0,t:0,add:function(t){fr(t,this.t,hr),fr(hr.s,this.s,this),this.s?this.t+=hr.t:this.s=hr.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var hr=new ur;function fr(t,e,r){var n=r.s=t+e,a=n-t,i=n-a;r.t=t-i+(e-a)}function pr(t,e){t&&gr.hasOwnProperty(t.type)&&gr[t.type](t,e)}t.geo.stream=function(t,e){t&&dr.hasOwnProperty(t.type)?dr[t.type](t,e):pr(t,e)};var dr={Feature:function(t,e){pr(t.geometry,e)},FeatureCollection:function(t,e){for(var r=t.features,n=-1,a=r.length;++n<a;)pr(r[n].geometry,e)}},gr={Sphere:function(t,e){e.sphere()},Point:function(t,e){t=t.coordinates,e.point(t[0],t[1],t[2])},MultiPoint:function(t,e){for(var r=t.coordinates,n=-1,a=r.length;++n<a;)t=r[n],e.point(t[0],t[1],t[2])},LineString:function(t,e){vr(t.coordinates,e,0)},MultiLineString:function(t,e){for(var r=t.coordinates,n=-1,a=r.length;++n<a;)vr(r[n],e,0)},Polygon:function(t,e){mr(t.coordinates,e)},MultiPolygon:function(t,e){for(var r=t.coordinates,n=-1,a=r.length;++n<a;)mr(r[n],e)},GeometryCollection:function(t,e){for(var r=t.geometries,n=-1,a=r.length;++n<a;)pr(r[n],e)}};function vr(t,e,r){var n,a=-1,i=t.length-r;for(e.lineStart();++a<i;)n=t[a],e.point(n[0],n[1],n[2]);e.lineEnd()}function mr(t,e){var r=-1,n=t.length;for(e.polygonStart();++r<n;)vr(t[r],e,1);e.polygonEnd()}t.geo.area=function(e){return yr=0,t.geo.stream(e,Pr),yr};var yr,xr,br,_r,wr,kr,Tr,Mr,Ar,Sr,Er,Lr,Cr=new ur,Pr={sphere:function(){yr+=4*Mt},point:D,lineStart:D,lineEnd:D,polygonStart:function(){Cr.reset(),Pr.lineStart=Or},polygonEnd:function(){var t=2*Cr;yr+=t<0?4*Mt+t:t,Pr.lineStart=Pr.lineEnd=Pr.point=D}};function Or(){var t,e,r,n,a;function i(t,e){e=e*Lt/2+Mt/4;var i=(t*=Lt)-r,o=i>=0?1:-1,s=o*i,l=Math.cos(e),c=Math.sin(e),u=a*c,h=n*l+u*Math.cos(s),f=u*o*Math.sin(s);Cr.add(Math.atan2(f,h)),r=t,n=l,a=c}Pr.point=function(o,s){Pr.point=i,r=(t=o)*Lt,n=Math.cos(s=(e=s)*Lt/2+Mt/4),a=Math.sin(s)},Pr.lineEnd=function(){i(t,e)}}function zr(t){var e=t[0],r=t[1],n=Math.cos(r);return[n*Math.cos(e),n*Math.sin(e),Math.sin(r)]}function Ir(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Dr(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function Rr(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function Fr(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function Br(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}function Nr(t){return[Math.atan2(t[1],t[0]),It(t[2])]}function jr(t,e){return y(t[0]-e[0])<kt&&y(t[1]-e[1])<kt}t.geo.bounds=function(){var e,r,n,a,i,o,s,l,c,u,h,f={point:p,lineStart:g,lineEnd:v,polygonStart:function(){f.point=m,f.lineStart=x,f.lineEnd=b,c=0,Pr.polygonStart()},polygonEnd:function(){Pr.polygonEnd(),f.point=p,f.lineStart=g,f.lineEnd=v,Cr<0?(e=-(n=180),r=-(a=90)):c>kt?a=90:c<-kt&&(r=-90),h[0]=e,h[1]=n}};function p(t,i){u.push(h=[e=t,n=t]),i<r&&(r=i),i>a&&(a=i)}function d(t,o){var s=zr([t*Lt,o*Lt]);if(l){var c=Dr(l,s),u=Dr([c[1],-c[0],0],c);Br(u),u=Nr(u);var h=t-i,f=h>0?1:-1,d=u[0]*Ct*f,g=y(h)>180;if(g^(f*i<d&&d<f*t))(v=u[1]*Ct)>a&&(a=v);else if(g^(f*i<(d=(d+360)%360-180)&&d<f*t)){var v;(v=-u[1]*Ct)<r&&(r=v)}else o<r&&(r=o),o>a&&(a=o);g?t<i?_(e,t)>_(e,n)&&(n=t):_(t,n)>_(e,n)&&(e=t):n>=e?(t<e&&(e=t),t>n&&(n=t)):t>i?_(e,t)>_(e,n)&&(n=t):_(t,n)>_(e,n)&&(e=t)}else p(t,o);l=s,i=t}function g(){f.point=d}function v(){h[0]=e,h[1]=n,f.point=p,l=null}function m(t,e){if(l){var r=t-i;c+=y(r)>180?r+(r>0?360:-360):r}else o=t,s=e;Pr.point(t,e),d(t,e)}function x(){Pr.lineStart()}function b(){m(o,s),Pr.lineEnd(),y(c)>kt&&(e=-(n=180)),h[0]=e,h[1]=n,l=null}function _(t,e){return(e-=t)<0?e+360:e}function w(t,e){return t[0]-e[0]}function k(t,e){return e[0]<=e[1]?e[0]<=t&&t<=e[1]:t<e[0]||e[1]<t}return function(i){if(a=n=-(e=r=1/0),u=[],t.geo.stream(i,f),c=u.length){u.sort(w);for(var o=1,s=[g=u[0]];o<c;++o)k((p=u[o])[0],g)||k(p[1],g)?(_(g[0],p[1])>_(g[0],g[1])&&(g[1]=p[1]),_(p[0],g[1])>_(g[0],g[1])&&(g[0]=p[0])):s.push(g=p);for(var l,c,p,d=-1/0,g=(o=0,s[c=s.length-1]);o<=c;g=p,++o)p=s[o],(l=_(g[1],p[0]))>d&&(d=l,e=p[0],n=g[1])}return u=h=null,e===1/0||r===1/0?[[NaN,NaN],[NaN,NaN]]:[[e,r],[n,a]]}}(),t.geo.centroid=function(e){xr=br=_r=wr=kr=Tr=Mr=Ar=Sr=Er=Lr=0,t.geo.stream(e,Vr);var r=Sr,n=Er,a=Lr,i=r*r+n*n+a*a;return i<Tt&&(r=Tr,n=Mr,a=Ar,br<kt&&(r=_r,n=wr,a=kr),(i=r*r+n*n+a*a)<Tt)?[NaN,NaN]:[Math.atan2(n,r)*Ct,It(a/Math.sqrt(i))*Ct]};var Vr={sphere:D,point:Ur,lineStart:Hr,lineEnd:Gr,polygonStart:function(){Vr.lineStart=Yr},polygonEnd:function(){Vr.lineStart=Hr}};function Ur(t,e){t*=Lt;var r=Math.cos(e*=Lt);qr(r*Math.cos(t),r*Math.sin(t),Math.sin(e))}function qr(t,e,r){_r+=(t-_r)/++xr,wr+=(e-wr)/xr,kr+=(r-kr)/xr}function Hr(){var t,e,r;function n(n,a){n*=Lt;var i=Math.cos(a*=Lt),o=i*Math.cos(n),s=i*Math.sin(n),l=Math.sin(a),c=Math.atan2(Math.sqrt((c=e*l-r*s)*c+(c=r*o-t*l)*c+(c=t*s-e*o)*c),t*o+e*s+r*l);br+=c,Tr+=c*(t+(t=o)),Mr+=c*(e+(e=s)),Ar+=c*(r+(r=l)),qr(t,e,r)}Vr.point=function(a,i){a*=Lt;var o=Math.cos(i*=Lt);t=o*Math.cos(a),e=o*Math.sin(a),r=Math.sin(i),Vr.point=n,qr(t,e,r)}}function Gr(){Vr.point=Ur}function Yr(){var t,e,r,n,a;function i(t,e){t*=Lt;var i=Math.cos(e*=Lt),o=i*Math.cos(t),s=i*Math.sin(t),l=Math.sin(e),c=n*l-a*s,u=a*o-r*l,h=r*s-n*o,f=Math.sqrt(c*c+u*u+h*h),p=r*o+n*s+a*l,d=f&&-zt(p)/f,g=Math.atan2(f,p);Sr+=d*c,Er+=d*u,Lr+=d*h,br+=g,Tr+=g*(r+(r=o)),Mr+=g*(n+(n=s)),Ar+=g*(a+(a=l)),qr(r,n,a)}Vr.point=function(o,s){t=o,e=s,Vr.point=i,o*=Lt;var l=Math.cos(s*=Lt);r=l*Math.cos(o),n=l*Math.sin(o),a=Math.sin(s),qr(r,n,a)},Vr.lineEnd=function(){i(t,e),Vr.lineEnd=Gr,Vr.point=Ur}}function Wr(t,e){function r(r,n){return r=t(r,n),e(r[0],r[1])}return t.invert&&e.invert&&(r.invert=function(r,n){return(r=e.invert(r,n))&&t.invert(r[0],r[1])}),r}function Xr(){return!0}function Zr(t,e,r,n,a){var i=[],o=[];if(t.forEach(function(t){if(!((e=t.length-1)<=0)){var e,r=t[0],n=t[e];if(jr(r,n)){a.lineStart();for(var s=0;s<e;++s)a.point((r=t[s])[0],r[1]);a.lineEnd()}else{var l=new Kr(r,t,null,!0),c=new Kr(r,null,l,!1);l.o=c,i.push(l),o.push(c),l=new Kr(n,t,null,!1),c=new Kr(n,null,l,!0),l.o=c,i.push(l),o.push(c)}}}),o.sort(e),Jr(i),Jr(o),i.length){for(var s=0,l=r,c=o.length;s<c;++s)o[s].e=l=!l;for(var u,h,f=i[0];;){for(var p=f,d=!0;p.v;)if((p=p.n)===f)return;u=p.z,a.lineStart();do{if(p.v=p.o.v=!0,p.e){if(d)for(s=0,c=u.length;s<c;++s)a.point((h=u[s])[0],h[1]);else n(p.x,p.n.x,1,a);p=p.n}else{if(d)for(s=(u=p.p.z).length-1;s>=0;--s)a.point((h=u[s])[0],h[1]);else n(p.x,p.p.x,-1,a);p=p.p}u=(p=p.o).z,d=!d}while(!p.v);a.lineEnd()}}}function Jr(t){if(e=t.length){for(var e,r,n=0,a=t[0];++n<e;)a.n=r=t[n],r.p=a,a=r;a.n=r=t[0],r.p=a}}function Kr(t,e,r,n){this.x=t,this.z=e,this.o=r,this.e=n,this.v=!1,this.n=this.p=null}function Qr(e,r,n,a){return function(i,o){var s,l=r(o),c=i.invert(a[0],a[1]),u={point:h,lineStart:p,lineEnd:d,polygonStart:function(){u.point=b,u.lineStart=_,u.lineEnd=w,s=[],g=[]},polygonEnd:function(){u.point=h,u.lineStart=p,u.lineEnd=d,s=t.merge(s);var e=function(t,e){var r=t[0],n=t[1],a=[Math.sin(r),-Math.cos(r),0],i=0,o=0;Cr.reset();for(var s=0,l=e.length;s<l;++s){var c=e[s],u=c.length;if(u)for(var h=c[0],f=h[0],p=h[1]/2+Mt/4,d=Math.sin(p),g=Math.cos(p),v=1;;){v===u&&(v=0);var m=(t=c[v])[0],y=t[1]/2+Mt/4,x=Math.sin(y),b=Math.cos(y),_=m-f,w=_>=0?1:-1,k=w*_,T=k>Mt,M=d*x;if(Cr.add(Math.atan2(M*w*Math.sin(k),g*b+M*Math.cos(k))),i+=T?_+w*At:_,T^f>=r^m>=r){var A=Dr(zr(h),zr(t));Br(A);var S=Dr(a,A);Br(S);var E=(T^_>=0?-1:1)*It(S[2]);(n>E||n===E&&(A[0]||A[1]))&&(o+=T^_>=0?1:-1)}if(!v++)break;f=m,d=x,g=b,h=t}}return(i<-kt||i<kt&&Cr<-kt)^1&o}(c,g);s.length?(x||(o.polygonStart(),x=!0),Zr(s,en,e,n,o)):e&&(x||(o.polygonStart(),x=!0),o.lineStart(),n(null,null,1,o),o.lineEnd()),x&&(o.polygonEnd(),x=!1),s=g=null},sphere:function(){o.polygonStart(),o.lineStart(),n(null,null,1,o),o.lineEnd(),o.polygonEnd()}};function h(t,r){var n=i(t,r);e(t=n[0],r=n[1])&&o.point(t,r)}function f(t,e){var r=i(t,e);l.point(r[0],r[1])}function p(){u.point=f,l.lineStart()}function d(){u.point=h,l.lineEnd()}var g,v,m=tn(),y=r(m),x=!1;function b(t,e){v.push([t,e]);var r=i(t,e);y.point(r[0],r[1])}function _(){y.lineStart(),v=[]}function w(){b(v[0][0],v[0][1]),y.lineEnd();var t,e=y.clean(),r=m.buffer(),n=r.length;if(v.pop(),g.push(v),v=null,n)if(1&e){var a,i=-1;if((n=(t=r[0]).length-1)>0){for(x||(o.polygonStart(),x=!0),o.lineStart();++i<n;)o.point((a=t[i])[0],a[1]);o.lineEnd()}}else n>1&&2&e&&r.push(r.pop().concat(r.shift())),s.push(r.filter($r))}return u}}function $r(t){return t.length>1}function tn(){var t,e=[];return{lineStart:function(){e.push(t=[])},point:function(e,r){t.push([e,r])},lineEnd:D,buffer:function(){var r=e;return e=[],t=null,r},rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))}}}function en(t,e){return((t=t.x)[0]<0?t[1]-Et-kt:Et-t[1])-((e=e.x)[0]<0?e[1]-Et-kt:Et-e[1])}var rn=Qr(Xr,function(t){var e,r=NaN,n=NaN,a=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(i,o){var s=i>0?Mt:-Mt,l=y(i-r);y(l-Mt)<kt?(t.point(r,n=(n+o)/2>0?Et:-Et),t.point(a,n),t.lineEnd(),t.lineStart(),t.point(s,n),t.point(i,n),e=0):a!==s&&l>=Mt&&(y(r-a)<kt&&(r-=a*kt),y(i-s)<kt&&(i-=s*kt),n=function(t,e,r,n){var a,i,o=Math.sin(t-r);return y(o)>kt?Math.atan((Math.sin(e)*(i=Math.cos(n))*Math.sin(r)-Math.sin(n)*(a=Math.cos(e))*Math.sin(t))/(a*i*o)):(e+n)/2}(r,n,i,o),t.point(a,n),t.lineEnd(),t.lineStart(),t.point(s,n),e=0),t.point(r=i,n=o),a=s},lineEnd:function(){t.lineEnd(),r=n=NaN},clean:function(){return 2-e}}},function(t,e,r,n){var a;if(null==t)a=r*Et,n.point(-Mt,a),n.point(0,a),n.point(Mt,a),n.point(Mt,0),n.point(Mt,-a),n.point(0,-a),n.point(-Mt,-a),n.point(-Mt,0),n.point(-Mt,a);else if(y(t[0]-e[0])>kt){var i=t[0]<e[0]?Mt:-Mt;a=r*i/2,n.point(-i,a),n.point(0,a),n.point(i,a)}else n.point(e[0],e[1])},[-Mt,-Mt/2]);function nn(t,e,r,n){return function(a){var i,o=a.a,s=a.b,l=o.x,c=o.y,u=0,h=1,f=s.x-l,p=s.y-c;if(i=t-l,f||!(i>0)){if(i/=f,f<0){if(i<u)return;i<h&&(h=i)}else if(f>0){if(i>h)return;i>u&&(u=i)}if(i=r-l,f||!(i<0)){if(i/=f,f<0){if(i>h)return;i>u&&(u=i)}else if(f>0){if(i<u)return;i<h&&(h=i)}if(i=e-c,p||!(i>0)){if(i/=p,p<0){if(i<u)return;i<h&&(h=i)}else if(p>0){if(i>h)return;i>u&&(u=i)}if(i=n-c,p||!(i<0)){if(i/=p,p<0){if(i>h)return;i>u&&(u=i)}else if(p>0){if(i<u)return;i<h&&(h=i)}return u>0&&(a.a={x:l+u*f,y:c+u*p}),h<1&&(a.b={x:l+h*f,y:c+h*p}),a}}}}}}var an=1e9;function on(e,r,n,a){return function(l){var c,u,h,f,p,d,g,v,m,y,x,b=l,_=tn(),w=nn(e,r,n,a),k={point:A,lineStart:function(){k.point=S,u&&u.push(h=[]);y=!0,m=!1,g=v=NaN},lineEnd:function(){c&&(S(f,p),d&&m&&_.rejoin(),c.push(_.buffer()));k.point=A,m&&l.lineEnd()},polygonStart:function(){l=_,c=[],u=[],x=!0},polygonEnd:function(){l=b,c=t.merge(c);var r=function(t){for(var e=0,r=u.length,n=t[1],a=0;a<r;++a)for(var i,o=1,s=u[a],l=s.length,c=s[0];o<l;++o)i=s[o],c[1]<=n?i[1]>n&&Ot(c,i,t)>0&&++e:i[1]<=n&&Ot(c,i,t)<0&&--e,c=i;return 0!==e}([e,a]),n=x&&r,i=c.length;(n||i)&&(l.polygonStart(),n&&(l.lineStart(),T(null,null,1,l),l.lineEnd()),i&&Zr(c,o,r,T,l),l.polygonEnd()),c=u=h=null}};function T(t,o,l,c){var u=0,h=0;if(null==t||(u=i(t,l))!==(h=i(o,l))||s(t,o)<0^l>0)do{c.point(0===u||3===u?e:n,u>1?a:r)}while((u=(u+l+4)%4)!==h);else c.point(o[0],o[1])}function M(t,i){return e<=t&&t<=n&&r<=i&&i<=a}function A(t,e){M(t,e)&&l.point(t,e)}function S(t,e){var r=M(t=Math.max(-an,Math.min(an,t)),e=Math.max(-an,Math.min(an,e)));if(u&&h.push([t,e]),y)f=t,p=e,d=r,y=!1,r&&(l.lineStart(),l.point(t,e));else if(r&&m)l.point(t,e);else{var n={a:{x:g,y:v},b:{x:t,y:e}};w(n)?(m||(l.lineStart(),l.point(n.a.x,n.a.y)),l.point(n.b.x,n.b.y),r||l.lineEnd(),x=!1):r&&(l.lineStart(),l.point(t,e),x=!1)}g=t,v=e,m=r}return k};function i(t,a){return y(t[0]-e)<kt?a>0?0:3:y(t[0]-n)<kt?a>0?2:1:y(t[1]-r)<kt?a>0?1:0:a>0?3:2}function o(t,e){return s(t.x,e.x)}function s(t,e){var r=i(t,1),n=i(e,1);return r!==n?r-n:0===r?e[1]-t[1]:1===r?t[0]-e[0]:2===r?t[1]-e[1]:e[0]-t[0]}}function sn(t){var e=0,r=Mt/3,n=Pn(t),a=n(e,r);return a.parallels=function(t){return arguments.length?n(e=t[0]*Mt/180,r=t[1]*Mt/180):[e/Mt*180,r/Mt*180]},a}function ln(t,e){var r=Math.sin(t),n=(r+Math.sin(e))/2,a=1+r*(2*n-r),i=Math.sqrt(a)/n;function o(t,e){var r=Math.sqrt(a-2*n*Math.sin(e))/n;return[r*Math.sin(t*=n),i-r*Math.cos(t)]}return o.invert=function(t,e){var r=i-e;return[Math.atan2(t,r)/n,It((a-(t*t+r*r)*n*n)/(2*n))]},o}t.geo.clipExtent=function(){var t,e,r,n,a,i,o={stream:function(t){return a&&(a.valid=!1),(a=i(t)).valid=!0,a},extent:function(s){return arguments.length?(i=on(t=+s[0][0],e=+s[0][1],r=+s[1][0],n=+s[1][1]),a&&(a.valid=!1,a=null),o):[[t,e],[r,n]]}};return o.extent([[0,0],[960,500]])},(t.geo.conicEqualArea=function(){return sn(ln)}).raw=ln,t.geo.albers=function(){return t.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},t.geo.albersUsa=function(){var e,r,n,a,i=t.geo.albers(),o=t.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),s=t.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(t,r){e=[t,r]}};function c(t){var i=t[0],o=t[1];return e=null,r(i,o),e||(n(i,o),e)||a(i,o),e}return c.invert=function(t){var e=i.scale(),r=i.translate(),n=(t[0]-r[0])/e,a=(t[1]-r[1])/e;return(a>=.12&&a<.234&&n>=-.425&&n<-.214?o:a>=.166&&a<.234&&n>=-.214&&n<-.115?s:i).invert(t)},c.stream=function(t){var e=i.stream(t),r=o.stream(t),n=s.stream(t);return{point:function(t,a){e.point(t,a),r.point(t,a),n.point(t,a)},sphere:function(){e.sphere(),r.sphere(),n.sphere()},lineStart:function(){e.lineStart(),r.lineStart(),n.lineStart()},lineEnd:function(){e.lineEnd(),r.lineEnd(),n.lineEnd()},polygonStart:function(){e.polygonStart(),r.polygonStart(),n.polygonStart()},polygonEnd:function(){e.polygonEnd(),r.polygonEnd(),n.polygonEnd()}}},c.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),s.precision(t),c):i.precision()},c.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),s.scale(t),c.translate(i.translate())):i.scale()},c.translate=function(t){if(!arguments.length)return i.translate();var e=i.scale(),u=+t[0],h=+t[1];return r=i.translate(t).clipExtent([[u-.455*e,h-.238*e],[u+.455*e,h+.238*e]]).stream(l).point,n=o.translate([u-.307*e,h+.201*e]).clipExtent([[u-.425*e+kt,h+.12*e+kt],[u-.214*e-kt,h+.234*e-kt]]).stream(l).point,a=s.translate([u-.205*e,h+.212*e]).clipExtent([[u-.214*e+kt,h+.166*e+kt],[u-.115*e-kt,h+.234*e-kt]]).stream(l).point,c},c.scale(1070)};var cn,un,hn,fn,pn,dn,gn={point:D,lineStart:D,lineEnd:D,polygonStart:function(){un=0,gn.lineStart=vn},polygonEnd:function(){gn.lineStart=gn.lineEnd=gn.point=D,cn+=y(un/2)}};function vn(){var t,e,r,n;function a(t,e){un+=n*t-r*e,r=t,n=e}gn.point=function(i,o){gn.point=a,t=r=i,e=n=o},gn.lineEnd=function(){a(t,e)}}var mn={point:function(t,e){t<hn&&(hn=t);t>pn&&(pn=t);e<fn&&(fn=e);e>dn&&(dn=e)},lineStart:D,lineEnd:D,polygonStart:D,polygonEnd:D};function yn(){var t=xn(4.5),e=[],r={point:n,lineStart:function(){r.point=a},lineEnd:o,polygonStart:function(){r.lineEnd=s},polygonEnd:function(){r.lineEnd=o,r.point=n},pointRadius:function(e){return t=xn(e),r},result:function(){if(e.length){var t=e.join("");return e=[],t}}};function n(r,n){e.push("M",r,",",n,t)}function a(t,n){e.push("M",t,",",n),r.point=i}function i(t,r){e.push("L",t,",",r)}function o(){r.point=n}function s(){e.push("Z")}return r}function xn(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}var bn,_n={point:wn,lineStart:kn,lineEnd:Tn,polygonStart:function(){_n.lineStart=Mn},polygonEnd:function(){_n.point=wn,_n.lineStart=kn,_n.lineEnd=Tn}};function wn(t,e){_r+=t,wr+=e,++kr}function kn(){var t,e;function r(r,n){var a=r-t,i=n-e,o=Math.sqrt(a*a+i*i);Tr+=o*(t+r)/2,Mr+=o*(e+n)/2,Ar+=o,wn(t=r,e=n)}_n.point=function(n,a){_n.point=r,wn(t=n,e=a)}}function Tn(){_n.point=wn}function Mn(){var t,e,r,n;function a(t,e){var a=t-r,i=e-n,o=Math.sqrt(a*a+i*i);Tr+=o*(r+t)/2,Mr+=o*(n+e)/2,Ar+=o,Sr+=(o=n*t-r*e)*(r+t),Er+=o*(n+e),Lr+=3*o,wn(r=t,n=e)}_n.point=function(i,o){_n.point=a,wn(t=r=i,e=n=o)},_n.lineEnd=function(){a(t,e)}}function An(t){var e=4.5,r={point:n,lineStart:function(){r.point=a},lineEnd:o,polygonStart:function(){r.lineEnd=s},polygonEnd:function(){r.lineEnd=o,r.point=n},pointRadius:function(t){return e=t,r},result:D};function n(r,n){t.moveTo(r+e,n),t.arc(r,n,e,0,At)}function a(e,n){t.moveTo(e,n),r.point=i}function i(e,r){t.lineTo(e,r)}function o(){r.point=n}function s(){t.closePath()}return r}function Sn(t){var e=.5,r=Math.cos(30*Lt),n=16;function a(e){return(n?function(e){var r,a,o,s,l,c,u,h,f,p,d,g,v={point:m,lineStart:y,lineEnd:b,polygonStart:function(){e.polygonStart(),v.lineStart=_},polygonEnd:function(){e.polygonEnd(),v.lineStart=y}};function m(r,n){r=t(r,n),e.point(r[0],r[1])}function y(){h=NaN,v.point=x,e.lineStart()}function x(r,a){var o=zr([r,a]),s=t(r,a);i(h,f,u,p,d,g,h=s[0],f=s[1],u=r,p=o[0],d=o[1],g=o[2],n,e),e.point(h,f)}function b(){v.point=m,e.lineEnd()}function _(){y(),v.point=w,v.lineEnd=k}function w(t,e){x(r=t,e),a=h,o=f,s=p,l=d,c=g,v.point=x}function k(){i(h,f,u,p,d,g,a,o,r,s,l,c,n,e),v.lineEnd=b,b()}return v}:function(e){return Ln(e,function(r,n){r=t(r,n),e.point(r[0],r[1])})})(e)}function i(n,a,o,s,l,c,u,h,f,p,d,g,v,m){var x=u-n,b=h-a,_=x*x+b*b;if(_>4*e&&v--){var w=s+p,k=l+d,T=c+g,M=Math.sqrt(w*w+k*k+T*T),A=Math.asin(T/=M),S=y(y(T)-1)<kt||y(o-f)<kt?(o+f)/2:Math.atan2(k,w),E=t(S,A),L=E[0],C=E[1],P=L-n,O=C-a,z=b*P-x*O;(z*z/_>e||y((x*P+b*O)/_-.5)>.3||s*p+l*d+c*g<r)&&(i(n,a,o,s,l,c,L,C,S,w/=M,k/=M,T,v,m),m.point(L,C),i(L,C,S,w,k,T,u,h,f,p,d,g,v,m))}}return a.precision=function(t){return arguments.length?(n=(e=t*t)>0&&16,a):Math.sqrt(e)},a}function En(t){this.stream=t}function Ln(t,e){return{point:e,sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function Cn(t){return Pn(function(){return t})()}function Pn(e){var r,n,a,i,o,s,l=Sn(function(t,e){return[(t=r(t,e))[0]*c+i,o-t[1]*c]}),c=150,u=480,h=250,f=0,p=0,d=0,g=0,v=0,m=rn,x=P,b=null,_=null;function w(t){return[(t=a(t[0]*Lt,t[1]*Lt))[0]*c+i,o-t[1]*c]}function k(t){return(t=a.invert((t[0]-i)/c,(o-t[1])/c))&&[t[0]*Ct,t[1]*Ct]}function T(){a=Wr(n=Dn(d,g,v),r);var t=r(f,p);return i=u-t[0]*c,o=h+t[1]*c,M()}function M(){return s&&(s.valid=!1,s=null),w}return w.stream=function(t){return s&&(s.valid=!1),(s=On(m(n,l(x(t))))).valid=!0,s},w.clipAngle=function(t){return arguments.length?(m=null==t?(b=t,rn):function(t){var e=Math.cos(t),r=e>0,n=y(e)>kt;return Qr(a,function(t){var e,s,l,c,u;return{lineStart:function(){c=l=!1,u=1},point:function(h,f){var p,d=[h,f],g=a(h,f),v=r?g?0:o(h,f):g?o(h+(h<0?Mt:-Mt),f):0;if(!e&&(c=l=g)&&t.lineStart(),g!==l&&(p=i(e,d),(jr(e,p)||jr(d,p))&&(d[0]+=kt,d[1]+=kt,g=a(d[0],d[1]))),g!==l)u=0,g?(t.lineStart(),p=i(d,e),t.point(p[0],p[1])):(p=i(e,d),t.point(p[0],p[1]),t.lineEnd()),e=p;else if(n&&e&&r^g){var m;v&s||!(m=i(d,e,!0))||(u=0,r?(t.lineStart(),t.point(m[0][0],m[0][1]),t.point(m[1][0],m[1][1]),t.lineEnd()):(t.point(m[1][0],m[1][1]),t.lineEnd(),t.lineStart(),t.point(m[0][0],m[0][1])))}!g||e&&jr(e,d)||t.point(d[0],d[1]),e=d,l=g,s=v},lineEnd:function(){l&&t.lineEnd(),e=null},clean:function(){return u|(c&&l)<<1}}},Nn(t,6*Lt),r?[0,-t]:[-Mt,t-Mt]);function a(t,r){return Math.cos(t)*Math.cos(r)>e}function i(t,r,n){var a=[1,0,0],i=Dr(zr(t),zr(r)),o=Ir(i,i),s=i[0],l=o-s*s;if(!l)return!n&&t;var c=e*o/l,u=-e*s/l,h=Dr(a,i),f=Fr(a,c);Rr(f,Fr(i,u));var p=h,d=Ir(f,p),g=Ir(p,p),v=d*d-g*(Ir(f,f)-1);if(!(v<0)){var m=Math.sqrt(v),x=Fr(p,(-d-m)/g);if(Rr(x,f),x=Nr(x),!n)return x;var b,_=t[0],w=r[0],k=t[1],T=r[1];w<_&&(b=_,_=w,w=b);var M=w-_,A=y(M-Mt)<kt;if(!A&&T<k&&(b=k,k=T,T=b),A||M<kt?A?k+T>0^x[1]<(y(x[0]-_)<kt?k:T):k<=x[1]&&x[1]<=T:M>Mt^(_<=x[0]&&x[0]<=w)){var S=Fr(p,(-d+m)/g);return Rr(S,f),[x,Nr(S)]}}}function o(e,n){var a=r?t:Mt-t,i=0;return e<-a?i|=1:e>a&&(i|=2),n<-a?i|=4:n>a&&(i|=8),i}}((b=+t)*Lt),M()):b},w.clipExtent=function(t){return arguments.length?(_=t,x=t?on(t[0][0],t[0][1],t[1][0],t[1][1]):P,M()):_},w.scale=function(t){return arguments.length?(c=+t,T()):c},w.translate=function(t){return arguments.length?(u=+t[0],h=+t[1],T()):[u,h]},w.center=function(t){return arguments.length?(f=t[0]%360*Lt,p=t[1]%360*Lt,T()):[f*Ct,p*Ct]},w.rotate=function(t){return arguments.length?(d=t[0]%360*Lt,g=t[1]%360*Lt,v=t.length>2?t[2]%360*Lt:0,T()):[d*Ct,g*Ct,v*Ct]},t.rebind(w,l,"precision"),function(){return r=e.apply(this,arguments),w.invert=r.invert&&k,T()}}function On(t){return Ln(t,function(e,r){t.point(e*Lt,r*Lt)})}function zn(t,e){return[t,e]}function In(t,e){return[t>Mt?t-At:t<-Mt?t+At:t,e]}function Dn(t,e,r){return t?e||r?Wr(Fn(t),Bn(e,r)):Fn(t):e||r?Bn(e,r):In}function Rn(t){return function(e,r){return[(e+=t)>Mt?e-At:e<-Mt?e+At:e,r]}}function Fn(t){var e=Rn(t);return e.invert=Rn(-t),e}function Bn(t,e){var r=Math.cos(t),n=Math.sin(t),a=Math.cos(e),i=Math.sin(e);function o(t,e){var o=Math.cos(e),s=Math.cos(t)*o,l=Math.sin(t)*o,c=Math.sin(e),u=c*r+s*n;return[Math.atan2(l*a-u*i,s*r-c*n),It(u*a+l*i)]}return o.invert=function(t,e){var o=Math.cos(e),s=Math.cos(t)*o,l=Math.sin(t)*o,c=Math.sin(e),u=c*a-l*i;return[Math.atan2(l*a+c*i,s*r+u*n),It(u*r-s*n)]},o}function Nn(t,e){var r=Math.cos(t),n=Math.sin(t);return function(a,i,o,s){var l=o*e;null!=a?(a=jn(r,a),i=jn(r,i),(o>0?a<i:a>i)&&(a+=o*At)):(a=t+o*At,i=t-.5*l);for(var c,u=a;o>0?u>i:u<i;u-=l)s.point((c=Nr([r,-n*Math.cos(u),-n*Math.sin(u)]))[0],c[1])}}function jn(t,e){var r=zr(e);r[0]-=t,Br(r);var n=zt(-r[1]);return((-r[2]<0?-n:n)+2*Math.PI-kt)%(2*Math.PI)}function Vn(e,r,n){var a=t.range(e,r-kt,n).concat(r);return function(t){return a.map(function(e){return[t,e]})}}function Un(e,r,n){var a=t.range(e,r-kt,n).concat(r);return function(t){return a.map(function(e){return[e,t]})}}function qn(t){return t.source}function Hn(t){return t.target}t.geo.path=function(){var e,r,n,a,i,o=4.5;function s(e){return e&&("function"==typeof o&&a.pointRadius(+o.apply(this,arguments)),i&&i.valid||(i=n(a)),t.geo.stream(e,i)),a.result()}function l(){return i=null,s}return s.area=function(e){return cn=0,t.geo.stream(e,n(gn)),cn},s.centroid=function(e){return _r=wr=kr=Tr=Mr=Ar=Sr=Er=Lr=0,t.geo.stream(e,n(_n)),Lr?[Sr/Lr,Er/Lr]:Ar?[Tr/Ar,Mr/Ar]:kr?[_r/kr,wr/kr]:[NaN,NaN]},s.bounds=function(e){return pn=dn=-(hn=fn=1/0),t.geo.stream(e,n(mn)),[[hn,fn],[pn,dn]]},s.projection=function(t){return arguments.length?(n=(e=t)?t.stream||(r=t,a=Sn(function(t,e){return r([t*Ct,e*Ct])}),function(t){return On(a(t))}):P,l()):e;var r,a},s.context=function(t){return arguments.length?(a=null==(r=t)?new yn:new An(t),"function"!=typeof o&&a.pointRadius(o),l()):r},s.pointRadius=function(t){return arguments.length?(o="function"==typeof t?t:(a.pointRadius(+t),+t),s):o},s.projection(t.geo.albersUsa()).context(null)},t.geo.transform=function(t){return{stream:function(e){var r=new En(e);for(var n in t)r[n]=t[n];return r}}},En.prototype={point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},t.geo.projection=Cn,t.geo.projectionMutator=Pn,(t.geo.equirectangular=function(){return Cn(zn)}).raw=zn.invert=zn,t.geo.rotation=function(t){function e(e){return(e=t(e[0]*Lt,e[1]*Lt))[0]*=Ct,e[1]*=Ct,e}return t=Dn(t[0]%360*Lt,t[1]*Lt,t.length>2?t[2]*Lt:0),e.invert=function(e){return(e=t.invert(e[0]*Lt,e[1]*Lt))[0]*=Ct,e[1]*=Ct,e},e},In.invert=zn,t.geo.circle=function(){var t,e,r=[0,0],n=6;function a(){var t="function"==typeof r?r.apply(this,arguments):r,n=Dn(-t[0]*Lt,-t[1]*Lt,0).invert,a=[];return e(null,null,1,{point:function(t,e){a.push(t=n(t,e)),t[0]*=Ct,t[1]*=Ct}}),{type:"Polygon",coordinates:[a]}}return a.origin=function(t){return arguments.length?(r=t,a):r},a.angle=function(r){return arguments.length?(e=Nn((t=+r)*Lt,n*Lt),a):t},a.precision=function(r){return arguments.length?(e=Nn(t*Lt,(n=+r)*Lt),a):n},a.angle(90)},t.geo.distance=function(t,e){var r,n=(e[0]-t[0])*Lt,a=t[1]*Lt,i=e[1]*Lt,o=Math.sin(n),s=Math.cos(n),l=Math.sin(a),c=Math.cos(a),u=Math.sin(i),h=Math.cos(i);return Math.atan2(Math.sqrt((r=h*o)*r+(r=c*u-l*h*s)*r),l*u+c*h*s)},t.geo.graticule=function(){var e,r,n,a,i,o,s,l,c,u,h,f,p=10,d=p,g=90,v=360,m=2.5;function x(){return{type:"MultiLineString",coordinates:b()}}function b(){return t.range(Math.ceil(a/g)*g,n,g).map(h).concat(t.range(Math.ceil(l/v)*v,s,v).map(f)).concat(t.range(Math.ceil(r/p)*p,e,p).filter(function(t){return y(t%g)>kt}).map(c)).concat(t.range(Math.ceil(o/d)*d,i,d).filter(function(t){return y(t%v)>kt}).map(u))}return x.lines=function(){return b().map(function(t){return{type:"LineString",coordinates:t}})},x.outline=function(){return{type:"Polygon",coordinates:[h(a).concat(f(s).slice(1),h(n).reverse().slice(1),f(l).reverse().slice(1))]}},x.extent=function(t){return arguments.length?x.majorExtent(t).minorExtent(t):x.minorExtent()},x.majorExtent=function(t){return arguments.length?(a=+t[0][0],n=+t[1][0],l=+t[0][1],s=+t[1][1],a>n&&(t=a,a=n,n=t),l>s&&(t=l,l=s,s=t),x.precision(m)):[[a,l],[n,s]]},x.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],o=+t[0][1],i=+t[1][1],r>e&&(t=r,r=e,e=t),o>i&&(t=o,o=i,i=t),x.precision(m)):[[r,o],[e,i]]},x.step=function(t){return arguments.length?x.majorStep(t).minorStep(t):x.minorStep()},x.majorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],x):[g,v]},x.minorStep=function(t){return arguments.length?(p=+t[0],d=+t[1],x):[p,d]},x.precision=function(t){return arguments.length?(m=+t,c=Vn(o,i,90),u=Un(r,e,m),h=Vn(l,s,90),f=Un(a,n,m),x):m},x.majorExtent([[-180,-90+kt],[180,90-kt]]).minorExtent([[-180,-80-kt],[180,80+kt]])},t.geo.greatArc=function(){var e,r,n=qn,a=Hn;function i(){return{type:"LineString",coordinates:[e||n.apply(this,arguments),r||a.apply(this,arguments)]}}return i.distance=function(){return t.geo.distance(e||n.apply(this,arguments),r||a.apply(this,arguments))},i.source=function(t){return arguments.length?(n=t,e="function"==typeof t?null:t,i):n},i.target=function(t){return arguments.length?(a=t,r="function"==typeof t?null:t,i):a},i.precision=function(){return arguments.length?i:0},i},t.geo.interpolate=function(t,e){return r=t[0]*Lt,n=t[1]*Lt,a=e[0]*Lt,i=e[1]*Lt,o=Math.cos(n),s=Math.sin(n),l=Math.cos(i),c=Math.sin(i),u=o*Math.cos(r),h=o*Math.sin(r),f=l*Math.cos(a),p=l*Math.sin(a),d=2*Math.asin(Math.sqrt(Rt(i-n)+o*l*Rt(a-r))),g=1/Math.sin(d),(v=d?function(t){var e=Math.sin(t*=d)*g,r=Math.sin(d-t)*g,n=r*u+e*f,a=r*h+e*p,i=r*s+e*c;return[Math.atan2(a,n)*Ct,Math.atan2(i,Math.sqrt(n*n+a*a))*Ct]}:function(){return[r*Ct,n*Ct]}).distance=d,v;var r,n,a,i,o,s,l,c,u,h,f,p,d,g,v},t.geo.length=function(e){return bn=0,t.geo.stream(e,Gn),bn};var Gn={sphere:D,point:D,lineStart:function(){var t,e,r;function n(n,a){var i=Math.sin(a*=Lt),o=Math.cos(a),s=y((n*=Lt)-t),l=Math.cos(s);bn+=Math.atan2(Math.sqrt((s=o*Math.sin(s))*s+(s=r*i-e*o*l)*s),e*i+r*o*l),t=n,e=i,r=o}Gn.point=function(a,i){t=a*Lt,e=Math.sin(i*=Lt),r=Math.cos(i),Gn.point=n},Gn.lineEnd=function(){Gn.point=Gn.lineEnd=D}},lineEnd:D,polygonStart:D,polygonEnd:D};function Yn(t,e){function r(e,r){var n=Math.cos(e),a=Math.cos(r),i=t(n*a);return[i*a*Math.sin(e),i*Math.sin(r)]}return r.invert=function(t,r){var n=Math.sqrt(t*t+r*r),a=e(n),i=Math.sin(a),o=Math.cos(a);return[Math.atan2(t*i,n*o),Math.asin(n&&r*i/n)]},r}var Wn=Yn(function(t){return Math.sqrt(2/(1+t))},function(t){return 2*Math.asin(t/2)});(t.geo.azimuthalEqualArea=function(){return Cn(Wn)}).raw=Wn;var Xn=Yn(function(t){var e=Math.acos(t);return e&&e/Math.sin(e)},P);function Zn(t,e){var r=Math.cos(t),n=function(t){return Math.tan(Mt/4+t/2)},a=t===e?Math.sin(t):Math.log(r/Math.cos(e))/Math.log(n(e)/n(t)),i=r*Math.pow(n(t),a)/a;if(!a)return Qn;function o(t,e){i>0?e<-Et+kt&&(e=-Et+kt):e>Et-kt&&(e=Et-kt);var r=i/Math.pow(n(e),a);return[r*Math.sin(a*t),i-r*Math.cos(a*t)]}return o.invert=function(t,e){var r=i-e,n=Pt(a)*Math.sqrt(t*t+r*r);return[Math.atan2(t,r)/a,2*Math.atan(Math.pow(i/n,1/a))-Et]},o}function Jn(t,e){var r=Math.cos(t),n=t===e?Math.sin(t):(r-Math.cos(e))/(e-t),a=r/n+t;if(y(n)<kt)return zn;function i(t,e){var r=a-e;return[r*Math.sin(n*t),a-r*Math.cos(n*t)]}return i.invert=function(t,e){var r=a-e;return[Math.atan2(t,r)/n,a-Pt(n)*Math.sqrt(t*t+r*r)]},i}(t.geo.azimuthalEquidistant=function(){return Cn(Xn)}).raw=Xn,(t.geo.conicConformal=function(){return sn(Zn)}).raw=Zn,(t.geo.conicEquidistant=function(){return sn(Jn)}).raw=Jn;var Kn=Yn(function(t){return 1/t},Math.atan);function Qn(t,e){return[t,Math.log(Math.tan(Mt/4+e/2))]}function $n(t){var e,r=Cn(t),n=r.scale,a=r.translate,i=r.clipExtent;return r.scale=function(){var t=n.apply(r,arguments);return t===r?e?r.clipExtent(null):r:t},r.translate=function(){var t=a.apply(r,arguments);return t===r?e?r.clipExtent(null):r:t},r.clipExtent=function(t){var o=i.apply(r,arguments);if(o===r){if(e=null==t){var s=Mt*n(),l=a();i([[l[0]-s,l[1]-s],[l[0]+s,l[1]+s]])}}else e&&(o=null);return o},r.clipExtent(null)}(t.geo.gnomonic=function(){return Cn(Kn)}).raw=Kn,Qn.invert=function(t,e){return[t,2*Math.atan(Math.exp(e))-Et]},(t.geo.mercator=function(){return $n(Qn)}).raw=Qn;var ta=Yn(function(){return 1},Math.asin);(t.geo.orthographic=function(){return Cn(ta)}).raw=ta;var ea=Yn(function(t){return 1/(1+t)},function(t){return 2*Math.atan(t)});function ra(t,e){return[Math.log(Math.tan(Mt/4+e/2)),-t]}function na(t){return t[0]}function aa(t){return t[1]}function ia(t){for(var e=t.length,r=[0,1],n=2,a=2;a<e;a++){for(;n>1&&Ot(t[r[n-2]],t[r[n-1]],t[a])<=0;)--n;r[n++]=a}return r.slice(0,n)}function oa(t,e){return t[0]-e[0]||t[1]-e[1]}(t.geo.stereographic=function(){return Cn(ea)}).raw=ea,ra.invert=function(t,e){return[-e,2*Math.atan(Math.exp(t))-Et]},(t.geo.transverseMercator=function(){var t=$n(ra),e=t.center,r=t.rotate;return t.center=function(t){return t?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return t?r([t[0],t[1],t.length>2?t[2]+90:90]):[(t=r())[0],t[1],t[2]-90]},r([0,0,90])}).raw=ra,t.geom={},t.geom.hull=function(t){var e=na,r=aa;if(arguments.length)return n(t);function n(t){if(t.length<3)return[];var n,a=ve(e),i=ve(r),o=t.length,s=[],l=[];for(n=0;n<o;n++)s.push([+a.call(this,t[n],n),+i.call(this,t[n],n),n]);for(s.sort(oa),n=0;n<o;n++)l.push([s[n][0],-s[n][1]]);var c=ia(s),u=ia(l),h=u[0]===c[0],f=u[u.length-1]===c[c.length-1],p=[];for(n=c.length-1;n>=0;--n)p.push(t[s[c[n]][2]]);for(n=+h;n<u.length-f;++n)p.push(t[s[u[n]][2]]);return p}return n.x=function(t){return arguments.length?(e=t,n):e},n.y=function(t){return arguments.length?(r=t,n):r},n},t.geom.polygon=function(t){return U(t,sa),t};var sa=t.geom.polygon.prototype=[];function la(t,e,r){return(r[0]-e[0])*(t[1]-e[1])<(r[1]-e[1])*(t[0]-e[0])}function ca(t,e,r,n){var a=t[0],i=r[0],o=e[0]-a,s=n[0]-i,l=t[1],c=r[1],u=e[1]-l,h=n[1]-c,f=(s*(l-c)-h*(a-i))/(h*o-s*u);return[a+f*o,l+f*u]}function ua(t){var e=t[0],r=t[t.length-1];return!(e[0]-r[0]||e[1]-r[1])}sa.area=function(){for(var t,e=-1,r=this.length,n=this[r-1],a=0;++e<r;)t=n,n=this[e],a+=t[1]*n[0]-t[0]*n[1];return.5*a},sa.centroid=function(t){var e,r,n=-1,a=this.length,i=0,o=0,s=this[a-1];for(arguments.length||(t=-1/(6*this.area()));++n<a;)e=s,s=this[n],r=e[0]*s[1]-s[0]*e[1],i+=(e[0]+s[0])*r,o+=(e[1]+s[1])*r;return[i*t,o*t]},sa.clip=function(t){for(var e,r,n,a,i,o,s=ua(t),l=-1,c=this.length-ua(this),u=this[c-1];++l<c;){for(e=t.slice(),t.length=0,a=this[l],i=e[(n=e.length-s)-1],r=-1;++r<n;)la(o=e[r],u,a)?(la(i,u,a)||t.push(ca(i,o,u,a)),t.push(o)):la(i,u,a)&&t.push(ca(i,o,u,a)),i=o;s&&t.push(t[0]),u=a}return t};var ha,fa,pa,da,ga,va=[],ma=[];function ya(){Ra(this),this.edge=this.site=this.circle=null}function xa(t){var e=va.pop()||new ya;return e.site=t,e}function ba(t){La(t),pa.remove(t),va.push(t),Ra(t)}function _a(t){var e=t.circle,r=e.x,n=e.cy,a={x:r,y:n},i=t.P,o=t.N,s=[t];ba(t);for(var l=i;l.circle&&y(r-l.circle.x)<kt&&y(n-l.circle.cy)<kt;)i=l.P,s.unshift(l),ba(l),l=i;s.unshift(l),La(l);for(var c=o;c.circle&&y(r-c.circle.x)<kt&&y(n-c.circle.cy)<kt;)o=c.N,s.push(c),ba(c),c=o;s.push(c),La(c);var u,h=s.length;for(u=1;u<h;++u)c=s[u],l=s[u-1],za(c.edge,l.site,c.site,a);l=s[0],(c=s[h-1]).edge=Oa(l.site,c.site,null,a),Ea(l),Ea(c)}function wa(t){for(var e,r,n,a,i=t.x,o=t.y,s=pa._;s;)if((n=ka(s,o)-i)>kt)s=s.L;else{if(!((a=i-Ta(s,o))>kt)){n>-kt?(e=s.P,r=s):a>-kt?(e=s,r=s.N):e=r=s;break}if(!s.R){e=s;break}s=s.R}var l=xa(t);if(pa.insert(e,l),e||r){if(e===r)return La(e),r=xa(e.site),pa.insert(l,r),l.edge=r.edge=Oa(e.site,l.site),Ea(e),void Ea(r);if(r){La(e),La(r);var c=e.site,u=c.x,h=c.y,f=t.x-u,p=t.y-h,d=r.site,g=d.x-u,v=d.y-h,m=2*(f*v-p*g),y=f*f+p*p,x=g*g+v*v,b={x:(v*y-p*x)/m+u,y:(f*x-g*y)/m+h};za(r.edge,c,d,b),l.edge=Oa(c,t,null,b),r.edge=Oa(t,d,null,b),Ea(e),Ea(r)}else l.edge=Oa(e.site,l.site)}}function ka(t,e){var r=t.site,n=r.x,a=r.y,i=a-e;if(!i)return n;var o=t.P;if(!o)return-1/0;var s=(r=o.site).x,l=r.y,c=l-e;if(!c)return s;var u=s-n,h=1/i-1/c,f=u/c;return h?(-f+Math.sqrt(f*f-2*h*(u*u/(-2*c)-l+c/2+a-i/2)))/h+n:(n+s)/2}function Ta(t,e){var r=t.N;if(r)return ka(r,e);var n=t.site;return n.y===e?n.x:1/0}function Ma(t){this.site=t,this.edges=[]}function Aa(t,e){return e.angle-t.angle}function Sa(){Ra(this),this.x=this.y=this.arc=this.site=this.cy=null}function Ea(t){var e=t.P,r=t.N;if(e&&r){var n=e.site,a=t.site,i=r.site;if(n!==i){var o=a.x,s=a.y,l=n.x-o,c=n.y-s,u=i.x-o,h=2*(l*(v=i.y-s)-c*u);if(!(h>=-Tt)){var f=l*l+c*c,p=u*u+v*v,d=(v*f-c*p)/h,g=(l*p-u*f)/h,v=g+s,m=ma.pop()||new Sa;m.arc=t,m.site=a,m.x=d+o,m.y=v+Math.sqrt(d*d+g*g),m.cy=v,t.circle=m;for(var y=null,x=ga._;x;)if(m.y<x.y||m.y===x.y&&m.x<=x.x){if(!x.L){y=x.P;break}x=x.L}else{if(!x.R){y=x;break}x=x.R}ga.insert(y,m),y||(da=m)}}}}function La(t){var e=t.circle;e&&(e.P||(da=e.N),ga.remove(e),ma.push(e),Ra(e),t.circle=null)}function Ca(t,e){var r=t.b;if(r)return!0;var n,a,i=t.a,o=e[0][0],s=e[1][0],l=e[0][1],c=e[1][1],u=t.l,h=t.r,f=u.x,p=u.y,d=h.x,g=h.y,v=(f+d)/2,m=(p+g)/2;if(g===p){if(v<o||v>=s)return;if(f>d){if(i){if(i.y>=c)return}else i={x:v,y:l};r={x:v,y:c}}else{if(i){if(i.y<l)return}else i={x:v,y:c};r={x:v,y:l}}}else if(a=m-(n=(f-d)/(g-p))*v,n<-1||n>1)if(f>d){if(i){if(i.y>=c)return}else i={x:(l-a)/n,y:l};r={x:(c-a)/n,y:c}}else{if(i){if(i.y<l)return}else i={x:(c-a)/n,y:c};r={x:(l-a)/n,y:l}}else if(p<g){if(i){if(i.x>=s)return}else i={x:o,y:n*o+a};r={x:s,y:n*s+a}}else{if(i){if(i.x<o)return}else i={x:s,y:n*s+a};r={x:o,y:n*o+a}}return t.a=i,t.b=r,!0}function Pa(t,e){this.l=t,this.r=e,this.a=this.b=null}function Oa(t,e,r,n){var a=new Pa(t,e);return ha.push(a),r&&za(a,t,e,r),n&&za(a,e,t,n),fa[t.i].edges.push(new Ia(a,t,e)),fa[e.i].edges.push(new Ia(a,e,t)),a}function za(t,e,r,n){t.a||t.b?t.l===r?t.b=n:t.a=n:(t.a=n,t.l=e,t.r=r)}function Ia(t,e,r){var n=t.a,a=t.b;this.edge=t,this.site=e,this.angle=r?Math.atan2(r.y-e.y,r.x-e.x):t.l===e?Math.atan2(a.x-n.x,n.y-a.y):Math.atan2(n.x-a.x,a.y-n.y)}function Da(){this._=null}function Ra(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function Fa(t,e){var r=e,n=e.R,a=r.U;a?a.L===r?a.L=n:a.R=n:t._=n,n.U=a,r.U=n,r.R=n.L,r.R&&(r.R.U=r),n.L=r}function Ba(t,e){var r=e,n=e.L,a=r.U;a?a.L===r?a.L=n:a.R=n:t._=n,n.U=a,r.U=n,r.L=n.R,r.L&&(r.L.U=r),n.R=r}function Na(t){for(;t.L;)t=t.L;return t}function ja(t,e){var r,n,a,i=t.sort(Va).pop();for(ha=[],fa=new Array(t.length),pa=new Da,ga=new Da;;)if(a=da,i&&(!a||i.y<a.y||i.y===a.y&&i.x<a.x))i.x===r&&i.y===n||(fa[i.i]=new Ma(i),wa(i),r=i.x,n=i.y),i=t.pop();else{if(!a)break;_a(a.arc)}e&&(function(t){for(var e,r=ha,n=nn(t[0][0],t[0][1],t[1][0],t[1][1]),a=r.length;a--;)(!Ca(e=r[a],t)||!n(e)||y(e.a.x-e.b.x)<kt&&y(e.a.y-e.b.y)<kt)&&(e.a=e.b=null,r.splice(a,1))}(e),function(t){for(var e,r,n,a,i,o,s,l,c,u,h=t[0][0],f=t[1][0],p=t[0][1],d=t[1][1],g=fa,v=g.length;v--;)if((i=g[v])&&i.prepare())for(l=(s=i.edges).length,o=0;o<l;)n=(u=s[o].end()).x,a=u.y,e=(c=s[++o%l].start()).x,r=c.y,(y(n-e)>kt||y(a-r)>kt)&&(s.splice(o,0,new Ia((m=i.site,x=u,b=y(n-h)<kt&&d-a>kt?{x:h,y:y(e-h)<kt?r:d}:y(a-d)<kt&&f-n>kt?{x:y(r-d)<kt?e:f,y:d}:y(n-f)<kt&&a-p>kt?{x:f,y:y(e-f)<kt?r:p}:y(a-p)<kt&&n-h>kt?{x:y(r-p)<kt?e:h,y:p}:null,_=void 0,_=new Pa(m,null),_.a=x,_.b=b,ha.push(_),_),i.site,null)),++l);var m,x,b,_}(e));var o={cells:fa,edges:ha};return pa=ga=ha=fa=null,o}function Va(t,e){return e.y-t.y||e.x-t.x}Ma.prototype.prepare=function(){for(var t,e=this.edges,r=e.length;r--;)(t=e[r].edge).b&&t.a||e.splice(r,1);return e.sort(Aa),e.length},Ia.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},Da.prototype={insert:function(t,e){var r,n,a;if(t){if(e.P=t,e.N=t.N,t.N&&(t.N.P=e),t.N=e,t.R){for(t=t.R;t.L;)t=t.L;t.L=e}else t.R=e;r=t}else this._?(t=Na(this._),e.P=null,e.N=t,t.P=t.L=e,r=t):(e.P=e.N=null,this._=e,r=null);for(e.L=e.R=null,e.U=r,e.C=!0,t=e;r&&r.C;)r===(n=r.U).L?(a=n.R)&&a.C?(r.C=a.C=!1,n.C=!0,t=n):(t===r.R&&(Fa(this,r),r=(t=r).U),r.C=!1,n.C=!0,Ba(this,n)):(a=n.L)&&a.C?(r.C=a.C=!1,n.C=!0,t=n):(t===r.L&&(Ba(this,r),r=(t=r).U),r.C=!1,n.C=!0,Fa(this,n)),r=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var e,r,n,a=t.U,i=t.L,o=t.R;if(r=i?o?Na(o):i:o,a?a.L===t?a.L=r:a.R=r:this._=r,i&&o?(n=r.C,r.C=t.C,r.L=i,i.U=r,r!==o?(a=r.U,r.U=t.U,t=r.R,a.L=t,r.R=o,o.U=r):(r.U=a,a=r,t=r.R)):(n=t.C,t=r),t&&(t.U=a),!n)if(t&&t.C)t.C=!1;else{do{if(t===this._)break;if(t===a.L){if((e=a.R).C&&(e.C=!1,a.C=!0,Fa(this,a),e=a.R),e.L&&e.L.C||e.R&&e.R.C){e.R&&e.R.C||(e.L.C=!1,e.C=!0,Ba(this,e),e=a.R),e.C=a.C,a.C=e.R.C=!1,Fa(this,a),t=this._;break}}else if((e=a.L).C&&(e.C=!1,a.C=!0,Ba(this,a),e=a.L),e.L&&e.L.C||e.R&&e.R.C){e.L&&e.L.C||(e.R.C=!1,e.C=!0,Fa(this,e),e=a.L),e.C=a.C,a.C=e.L.C=!1,Ba(this,a),t=this._;break}e.C=!0,t=a,a=a.U}while(!t.C);t&&(t.C=!1)}}},t.geom.voronoi=function(t){var e=na,r=aa,n=e,a=r,i=Ua;if(t)return o(t);function o(t){var e=new Array(t.length),r=i[0][0],n=i[0][1],a=i[1][0],o=i[1][1];return ja(s(t),i).cells.forEach(function(i,s){var l=i.edges,c=i.site;(e[s]=l.length?l.map(function(t){var e=t.start();return[e.x,e.y]}):c.x>=r&&c.x<=a&&c.y>=n&&c.y<=o?[[r,o],[a,o],[a,n],[r,n]]:[]).point=t[s]}),e}function s(t){return t.map(function(t,e){return{x:Math.round(n(t,e)/kt)*kt,y:Math.round(a(t,e)/kt)*kt,i:e}})}return o.links=function(t){return ja(s(t)).edges.filter(function(t){return t.l&&t.r}).map(function(e){return{source:t[e.l.i],target:t[e.r.i]}})},o.triangles=function(t){var e=[];return ja(s(t)).cells.forEach(function(r,n){for(var a,i,o,s,l=r.site,c=r.edges.sort(Aa),u=-1,h=c.length,f=c[h-1].edge,p=f.l===l?f.r:f.l;++u<h;)f,a=p,p=(f=c[u].edge).l===l?f.r:f.l,n<a.i&&n<p.i&&(o=a,s=p,((i=l).x-s.x)*(o.y-i.y)-(i.x-o.x)*(s.y-i.y)<0)&&e.push([t[n],t[a.i],t[p.i]])}),e},o.x=function(t){return arguments.length?(n=ve(e=t),o):e},o.y=function(t){return arguments.length?(a=ve(r=t),o):r},o.clipExtent=function(t){return arguments.length?(i=null==t?Ua:t,o):i===Ua?null:i},o.size=function(t){return arguments.length?o.clipExtent(t&&[[0,0],t]):i===Ua?null:i&&i[1]},o};var Ua=[[-1e6,-1e6],[1e6,1e6]];function qa(t){return t.x}function Ha(t){return t.y}function Ga(e,r){e=t.rgb(e),r=t.rgb(r);var n=e.r,a=e.g,i=e.b,o=r.r-n,s=r.g-a,l=r.b-i;return function(t){return"#"+ce(Math.round(n+o*t))+ce(Math.round(a+s*t))+ce(Math.round(i+l*t))}}function Ya(t,e){var r,n={},a={};for(r in t)r in e?n[r]=Ka(t[r],e[r]):a[r]=t[r];for(r in e)r in t||(a[r]=e[r]);return function(t){for(r in n)a[r]=n[r](t);return a}}function Wa(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}function Xa(t,e){var r,n,a,i=Za.lastIndex=Ja.lastIndex=0,o=-1,s=[],l=[];for(t+="",e+="";(r=Za.exec(t))&&(n=Ja.exec(e));)(a=n.index)>i&&(a=e.slice(i,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:Wa(r,n)})),i=Ja.lastIndex;return i<e.length&&(a=e.slice(i),s[o]?s[o]+=a:s[++o]=a),s.length<2?l[0]?(e=l[0].x,function(t){return e(t)+""}):function(){return e}:(e=l.length,function(t){for(var r,n=0;n<e;++n)s[(r=l[n]).i]=r.x(t);return s.join("")})}t.geom.delaunay=function(e){return t.geom.voronoi().triangles(e)},t.geom.quadtree=function(t,e,r,n,a){var i,o=na,s=aa;if(i=arguments.length)return o=qa,s=Ha,3===i&&(a=r,n=e,r=e=0),l(t);function l(t){var l,c,u,h,f,p,d,g,v,m=ve(o),x=ve(s);if(null!=e)p=e,d=r,g=n,v=a;else if(g=v=-(p=d=1/0),c=[],u=[],f=t.length,i)for(h=0;h<f;++h)(l=t[h]).x<p&&(p=l.x),l.y<d&&(d=l.y),l.x>g&&(g=l.x),l.y>v&&(v=l.y),c.push(l.x),u.push(l.y);else for(h=0;h<f;++h){var b=+m(l=t[h],h),_=+x(l,h);b<p&&(p=b),_<d&&(d=_),b>g&&(g=b),_>v&&(v=_),c.push(b),u.push(_)}var w=g-p,k=v-d;function T(t,e,r,n,a,i,o,s){if(!isNaN(r)&&!isNaN(n))if(t.leaf){var l=t.x,c=t.y;if(null!=l)if(y(l-r)+y(c-n)<.01)M(t,e,r,n,a,i,o,s);else{var u=t.point;t.x=t.y=t.point=null,M(t,u,l,c,a,i,o,s),M(t,e,r,n,a,i,o,s)}else t.x=r,t.y=n,t.point=e}else M(t,e,r,n,a,i,o,s)}function M(t,e,r,n,a,i,o,s){var l=.5*(a+o),c=.5*(i+s),u=r>=l,h=n>=c,f=h<<1|u;t.leaf=!1,u?a=l:o=l,h?i=c:s=c,T(t=t.nodes[f]||(t.nodes[f]={leaf:!0,nodes:[],point:null,x:null,y:null}),e,r,n,a,i,o,s)}w>k?v=d+w:g=p+k;var A={leaf:!0,nodes:[],point:null,x:null,y:null,add:function(t){T(A,t,+m(t,++h),+x(t,h),p,d,g,v)}};if(A.visit=function(t){!function t(e,r,n,a,i,o){if(!e(r,n,a,i,o)){var s=.5*(n+i),l=.5*(a+o),c=r.nodes;c[0]&&t(e,c[0],n,a,s,l),c[1]&&t(e,c[1],s,a,i,l),c[2]&&t(e,c[2],n,l,s,o),c[3]&&t(e,c[3],s,l,i,o)}}(t,A,p,d,g,v)},A.find=function(t){return function(t,e,r,n,a,i,o){var s,l=1/0;return function t(c,u,h,f,p){if(!(u>i||h>o||f<n||p<a)){if(d=c.point){var d,g=e-c.x,v=r-c.y,m=g*g+v*v;if(m<l){var y=Math.sqrt(l=m);n=e-y,a=r-y,i=e+y,o=r+y,s=d}}for(var x=c.nodes,b=.5*(u+f),_=.5*(h+p),w=(r>=_)<<1|e>=b,k=w+4;w<k;++w)if(c=x[3&w])switch(3&w){case 0:t(c,u,h,b,_);break;case 1:t(c,b,h,f,_);break;case 2:t(c,u,_,b,p);break;case 3:t(c,b,_,f,p)}}}(t,n,a,i,o),s}(A,t[0],t[1],p,d,g,v)},h=-1,null==e){for(;++h<f;)T(A,t[h],c[h],u[h],p,d,g,v);--h}else t.forEach(A.add);return c=u=t=l=null,A}return l.x=function(t){return arguments.length?(o=t,l):o},l.y=function(t){return arguments.length?(s=t,l):s},l.extent=function(t){return arguments.length?(null==t?e=r=n=a=null:(e=+t[0][0],r=+t[0][1],n=+t[1][0],a=+t[1][1]),l):null==e?null:[[e,r],[n,a]]},l.size=function(t){return arguments.length?(null==t?e=r=n=a=null:(e=r=0,n=+t[0],a=+t[1]),l):null==e?null:[n-e,a-r]},l},t.interpolateRgb=Ga,t.interpolateObject=Ya,t.interpolateNumber=Wa,t.interpolateString=Xa;var Za=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Ja=new RegExp(Za.source,"g");function Ka(e,r){for(var n,a=t.interpolators.length;--a>=0&&!(n=t.interpolators[a](e,r)););return n}function Qa(t,e){var r,n=[],a=[],i=t.length,o=e.length,s=Math.min(t.length,e.length);for(r=0;r<s;++r)n.push(Ka(t[r],e[r]));for(;r<i;++r)a[r]=t[r];for(;r<o;++r)a[r]=e[r];return function(t){for(r=0;r<s;++r)a[r]=n[r](t);return a}}t.interpolate=Ka,t.interpolators=[function(t,e){var r=typeof e;return("string"===r?ge.has(e.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(e)?Ga:Xa:e instanceof Vt?Ga:Array.isArray(e)?Qa:"object"===r&&isNaN(e)?Ya:Wa)(t,e)}],t.interpolateArray=Qa;var $a=function(){return P},ti=t.map({linear:$a,poly:function(t){return function(e){return Math.pow(e,t)}},quad:function(){return ai},cubic:function(){return ii},sin:function(){return si},exp:function(){return li},circle:function(){return ci},elastic:function(t,e){var r;arguments.length<2&&(e=.45);arguments.length?r=e/At*Math.asin(1/t):(t=1,r=e/4);return function(n){return 1+t*Math.pow(2,-10*n)*Math.sin((n-r)*At/e)}},back:function(t){t||(t=1.70158);return function(e){return e*e*((t+1)*e-t)}},bounce:function(){return ui}}),ei=t.map({in:P,out:ri,"in-out":ni,"out-in":function(t){return ni(ri(t))}});function ri(t){return function(e){return 1-t(1-e)}}function ni(t){return function(e){return.5*(e<.5?t(2*e):2-t(2-2*e))}}function ai(t){return t*t}function ii(t){return t*t*t}function oi(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75)}function si(t){return 1-Math.cos(t*Et)}function li(t){return Math.pow(2,10*(t-1))}function ci(t){return 1-Math.sqrt(1-t*t)}function ui(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function hi(t,e){return e-=t,function(r){return Math.round(t+e*r)}}function fi(t){var e,r,n,a=[t.a,t.b],i=[t.c,t.d],o=di(a),s=pi(a,i),l=di(((e=i)[0]+=(n=-s)*(r=a)[0],e[1]+=n*r[1],e))||0;a[0]*i[1]<i[0]*a[1]&&(a[0]*=-1,a[1]*=-1,o*=-1,s*=-1),this.rotate=(o?Math.atan2(a[1],a[0]):Math.atan2(-i[0],i[1]))*Ct,this.translate=[t.e,t.f],this.scale=[o,l],this.skew=l?Math.atan2(s,l)*Ct:0}function pi(t,e){return t[0]*e[0]+t[1]*e[1]}function di(t){var e=Math.sqrt(pi(t,t));return e&&(t[0]/=e,t[1]/=e),e}t.ease=function(t){var e,n=t.indexOf("-"),a=n>=0?t.slice(0,n):t,i=n>=0?t.slice(n+1):"in";return a=ti.get(a)||$a,i=ei.get(i)||P,e=i(a.apply(null,r.call(arguments,1))),function(t){return t<=0?0:t>=1?1:e(t)}},t.interpolateHcl=function(e,r){e=t.hcl(e),r=t.hcl(r);var n=e.h,a=e.c,i=e.l,o=r.h-n,s=r.c-a,l=r.l-i;isNaN(s)&&(s=0,a=isNaN(a)?r.c:a);isNaN(o)?(o=0,n=isNaN(n)?r.h:n):o>180?o-=360:o<-180&&(o+=360);return function(t){return Wt(n+o*t,a+s*t,i+l*t)+""}},t.interpolateHsl=function(e,r){e=t.hsl(e),r=t.hsl(r);var n=e.h,a=e.s,i=e.l,o=r.h-n,s=r.s-a,l=r.l-i;isNaN(s)&&(s=0,a=isNaN(a)?r.s:a);isNaN(o)?(o=0,n=isNaN(n)?r.h:n):o>180?o-=360:o<-180&&(o+=360);return function(t){return Ht(n+o*t,a+s*t,i+l*t)+""}},t.interpolateLab=function(e,r){e=t.lab(e),r=t.lab(r);var n=e.l,a=e.a,i=e.b,o=r.l-n,s=r.a-a,l=r.b-i;return function(t){return te(n+o*t,a+s*t,i+l*t)+""}},t.interpolateRound=hi,t.transform=function(e){var r=a.createElementNS(t.ns.prefix.svg,"g");return(t.transform=function(t){if(null!=t){r.setAttribute("transform",t);var e=r.transform.baseVal.consolidate()}return new fi(e?e.matrix:gi)})(e)},fi.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var gi={a:1,b:0,c:0,d:1,e:0,f:0};function vi(t){return t.length?t.pop()+",":""}function mi(e,r){var n=[],a=[];return e=t.transform(e),r=t.transform(r),function(t,e,r,n){if(t[0]!==e[0]||t[1]!==e[1]){var a=r.push("translate(",null,",",null,")");n.push({i:a-4,x:Wa(t[0],e[0])},{i:a-2,x:Wa(t[1],e[1])})}else(e[0]||e[1])&&r.push("translate("+e+")")}(e.translate,r.translate,n,a),function(t,e,r,n){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),n.push({i:r.push(vi(r)+"rotate(",null,")")-2,x:Wa(t,e)})):e&&r.push(vi(r)+"rotate("+e+")")}(e.rotate,r.rotate,n,a),function(t,e,r,n){t!==e?n.push({i:r.push(vi(r)+"skewX(",null,")")-2,x:Wa(t,e)}):e&&r.push(vi(r)+"skewX("+e+")")}(e.skew,r.skew,n,a),function(t,e,r,n){if(t[0]!==e[0]||t[1]!==e[1]){var a=r.push(vi(r)+"scale(",null,",",null,")");n.push({i:a-4,x:Wa(t[0],e[0])},{i:a-2,x:Wa(t[1],e[1])})}else 1===e[0]&&1===e[1]||r.push(vi(r)+"scale("+e+")")}(e.scale,r.scale,n,a),e=r=null,function(t){for(var e,r=-1,i=a.length;++r<i;)n[(e=a[r]).i]=e.x(t);return n.join("")}}function yi(t,e){return e=(e-=t=+t)||1/e,function(r){return(r-t)/e}}function xi(t,e){return e=(e-=t=+t)||1/e,function(r){return Math.max(0,Math.min(1,(r-t)/e))}}function bi(t){for(var e=t.source,r=t.target,n=function(t,e){if(t===e)return t;var r=_i(t),n=_i(e),a=r.pop(),i=n.pop(),o=null;for(;a===i;)o=a,a=r.pop(),i=n.pop();return o}(e,r),a=[e];e!==n;)e=e.parent,a.push(e);for(var i=a.length;r!==n;)a.splice(i,0,r),r=r.parent;return a}function _i(t){for(var e=[],r=t.parent;null!=r;)e.push(t),t=r,r=r.parent;return e.push(t),e}function wi(t){t.fixed|=2}function ki(t){t.fixed&=-7}function Ti(t){t.fixed|=4,t.px=t.x,t.py=t.y}function Mi(t){t.fixed&=-5}t.interpolateTransform=mi,t.layout={},t.layout.bundle=function(){return function(t){for(var e=[],r=-1,n=t.length;++r<n;)e.push(bi(t[r]));return e}},t.layout.chord=function(){var e,r,n,a,i,o,s,l={},c=0;function u(){var l,u,f,p,d,g={},v=[],m=t.range(a),y=[];for(e=[],r=[],l=0,p=-1;++p<a;){for(u=0,d=-1;++d<a;)u+=n[p][d];v.push(u),y.push(t.range(a)),l+=u}for(i&&m.sort(function(t,e){return i(v[t],v[e])}),o&&y.forEach(function(t,e){t.sort(function(t,r){return o(n[e][t],n[e][r])})}),l=(At-c*a)/l,u=0,p=-1;++p<a;){for(f=u,d=-1;++d<a;){var x=m[p],b=y[x][d],_=n[x][b],w=u,k=u+=_*l;g[x+"-"+b]={index:x,subindex:b,startAngle:w,endAngle:k,value:_}}r[x]={index:x,startAngle:f,endAngle:u,value:v[x]},u+=c}for(p=-1;++p<a;)for(d=p-1;++d<a;){var T=g[p+"-"+d],M=g[d+"-"+p];(T.value||M.value)&&e.push(T.value<M.value?{source:M,target:T}:{source:T,target:M})}s&&h()}function h(){e.sort(function(t,e){return s((t.source.value+t.target.value)/2,(e.source.value+e.target.value)/2)})}return l.matrix=function(t){return arguments.length?(a=(n=t)&&n.length,e=r=null,l):n},l.padding=function(t){return arguments.length?(c=t,e=r=null,l):c},l.sortGroups=function(t){return arguments.length?(i=t,e=r=null,l):i},l.sortSubgroups=function(t){return arguments.length?(o=t,e=null,l):o},l.sortChords=function(t){return arguments.length?(s=t,e&&h(),l):s},l.chords=function(){return e||u(),e},l.groups=function(){return r||u(),r},l},t.layout.force=function(){var e,r,n,a,i,o,s={},l=t.dispatch("start","tick","end"),c=[1,1],u=.9,h=Ai,f=Si,p=-30,d=Ei,g=.1,v=.64,m=[],y=[];function x(t){return function(e,r,n,a){if(e.point!==t){var i=e.cx-t.x,o=e.cy-t.y,s=a-r,l=i*i+o*o;if(s*s/v<l){if(l<d){var c=e.charge/l;t.px-=i*c,t.py-=o*c}return!0}if(e.point&&l&&l<d){c=e.pointCharge/l;t.px-=i*c,t.py-=o*c}}return!e.charge}}function b(e){e.px=t.event.x,e.py=t.event.y,s.resume()}return s.tick=function(){if((n*=.99)<.005)return e=null,l.end({type:"end",alpha:n=0}),!0;var r,s,h,f,d,v,b,_,w,k=m.length,T=y.length;for(s=0;s<T;++s)f=(h=y[s]).source,(v=(_=(d=h.target).x-f.x)*_+(w=d.y-f.y)*w)&&(_*=v=n*i[s]*((v=Math.sqrt(v))-a[s])/v,w*=v,d.x-=_*(b=f.weight+d.weight?f.weight/(f.weight+d.weight):.5),d.y-=w*b,f.x+=_*(b=1-b),f.y+=w*b);if((b=n*g)&&(_=c[0]/2,w=c[1]/2,s=-1,b))for(;++s<k;)(h=m[s]).x+=(_-h.x)*b,h.y+=(w-h.y)*b;if(p)for(!function t(e,r,n){var a=0,i=0;e.charge=0;if(!e.leaf)for(var o,s=e.nodes,l=s.length,c=-1;++c<l;)null!=(o=s[c])&&(t(o,r,n),e.charge+=o.charge,a+=o.charge*o.cx,i+=o.charge*o.cy);if(e.point){e.leaf||(e.point.x+=Math.random()-.5,e.point.y+=Math.random()-.5);var u=r*n[e.point.index];e.charge+=e.pointCharge=u,a+=u*e.point.x,i+=u*e.point.y}e.cx=a/e.charge;e.cy=i/e.charge}(r=t.geom.quadtree(m),n,o),s=-1;++s<k;)(h=m[s]).fixed||r.visit(x(h));for(s=-1;++s<k;)(h=m[s]).fixed?(h.x=h.px,h.y=h.py):(h.x-=(h.px-(h.px=h.x))*u,h.y-=(h.py-(h.py=h.y))*u);l.tick({type:"tick",alpha:n})},s.nodes=function(t){return arguments.length?(m=t,s):m},s.links=function(t){return arguments.length?(y=t,s):y},s.size=function(t){return arguments.length?(c=t,s):c},s.linkDistance=function(t){return arguments.length?(h="function"==typeof t?t:+t,s):h},s.distance=s.linkDistance,s.linkStrength=function(t){return arguments.length?(f="function"==typeof t?t:+t,s):f},s.friction=function(t){return arguments.length?(u=+t,s):u},s.charge=function(t){return arguments.length?(p="function"==typeof t?t:+t,s):p},s.chargeDistance=function(t){return arguments.length?(d=t*t,s):Math.sqrt(d)},s.gravity=function(t){return arguments.length?(g=+t,s):g},s.theta=function(t){return arguments.length?(v=t*t,s):Math.sqrt(v)},s.alpha=function(t){return arguments.length?(t=+t,n?t>0?n=t:(e.c=null,e.t=NaN,e=null,l.end({type:"end",alpha:n=0})):t>0&&(l.start({type:"start",alpha:n=t}),e=Te(s.tick)),s):n},s.start=function(){var t,e,r,n=m.length,l=y.length,u=c[0],d=c[1];for(t=0;t<n;++t)(r=m[t]).index=t,r.weight=0;for(t=0;t<l;++t)"number"==typeof(r=y[t]).source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;t<n;++t)r=m[t],isNaN(r.x)&&(r.x=g("x",u)),isNaN(r.y)&&(r.y=g("y",d)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(a=[],"function"==typeof h)for(t=0;t<l;++t)a[t]=+h.call(this,y[t],t);else for(t=0;t<l;++t)a[t]=h;if(i=[],"function"==typeof f)for(t=0;t<l;++t)i[t]=+f.call(this,y[t],t);else for(t=0;t<l;++t)i[t]=f;if(o=[],"function"==typeof p)for(t=0;t<n;++t)o[t]=+p.call(this,m[t],t);else for(t=0;t<n;++t)o[t]=p;function g(r,a){if(!e){for(e=new Array(n),c=0;c<n;++c)e[c]=[];for(c=0;c<l;++c){var i=y[c];e[i.source.index].push(i.target),e[i.target.index].push(i.source)}}for(var o,s=e[t],c=-1,u=s.length;++c<u;)if(!isNaN(o=s[c][r]))return o;return Math.random()*a}return s.resume()},s.resume=function(){return s.alpha(.1)},s.stop=function(){return s.alpha(0)},s.drag=function(){if(r||(r=t.behavior.drag().origin(P).on("dragstart.force",wi).on("drag.force",b).on("dragend.force",ki)),!arguments.length)return r;this.on("mouseover.force",Ti).on("mouseout.force",Mi).call(r)},t.rebind(s,l,"on")};var Ai=20,Si=1,Ei=1/0;function Li(e,r){return t.rebind(e,r,"sort","children","value"),e.nodes=e,e.links=Di,e}function Ci(t,e){for(var r=[t];null!=(t=r.pop());)if(e(t),(a=t.children)&&(n=a.length))for(var n,a;--n>=0;)r.push(a[n])}function Pi(t,e){for(var r=[t],n=[];null!=(t=r.pop());)if(n.push(t),(i=t.children)&&(a=i.length))for(var a,i,o=-1;++o<a;)r.push(i[o]);for(;null!=(t=n.pop());)e(t)}function Oi(t){return t.children}function zi(t){return t.value}function Ii(t,e){return e.value-t.value}function Di(e){return t.merge(e.map(function(t){return(t.children||[]).map(function(e){return{source:t,target:e}})}))}t.layout.hierarchy=function(){var t=Ii,e=Oi,r=zi;function n(a){var i,o=[a],s=[];for(a.depth=0;null!=(i=o.pop());)if(s.push(i),(c=e.call(n,i,i.depth))&&(l=c.length)){for(var l,c,u;--l>=0;)o.push(u=c[l]),u.parent=i,u.depth=i.depth+1;r&&(i.value=0),i.children=c}else r&&(i.value=+r.call(n,i,i.depth)||0),delete i.children;return Pi(a,function(e){var n,a;t&&(n=e.children)&&n.sort(t),r&&(a=e.parent)&&(a.value+=e.value)}),s}return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(Ci(t,function(t){t.children&&(t.value=0)}),Pi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},t.layout.partition=function(){var e=t.layout.hierarchy(),r=[1,1];function n(t,n){var a=e.call(this,t,n);return function t(e,r,n,a){var i=e.children;if(e.x=r,e.y=e.depth*a,e.dx=n,e.dy=a,i&&(o=i.length)){var o,s,l,c=-1;for(n=e.value?n/e.value:0;++c<o;)t(s=i[c],r,l=s.value*n,a),r+=l}}(a[0],0,r[0],r[1]/function t(e){var r=e.children,n=0;if(r&&(a=r.length))for(var a,i=-1;++i<a;)n=Math.max(n,t(r[i]));return 1+n}(a[0])),a}return n.size=function(t){return arguments.length?(r=t,n):r},Li(n,e)},t.layout.pie=function(){var e=Number,r=Ri,n=0,a=At,i=0;function o(s){var l,c=s.length,u=s.map(function(t,r){return+e.call(o,t,r)}),h=+("function"==typeof n?n.apply(this,arguments):n),f=("function"==typeof a?a.apply(this,arguments):a)-h,p=Math.min(Math.abs(f)/c,+("function"==typeof i?i.apply(this,arguments):i)),d=p*(f<0?-1:1),g=t.sum(u),v=g?(f-c*d)/g:0,m=t.range(c),y=[];return null!=r&&m.sort(r===Ri?function(t,e){return u[e]-u[t]}:function(t,e){return r(s[t],s[e])}),m.forEach(function(t){y[t]={data:s[t],value:l=u[t],startAngle:h,endAngle:h+=l*v+d,padAngle:p}}),y}return o.value=function(t){return arguments.length?(e=t,o):e},o.sort=function(t){return arguments.length?(r=t,o):r},o.startAngle=function(t){return arguments.length?(n=t,o):n},o.endAngle=function(t){return arguments.length?(a=t,o):a},o.padAngle=function(t){return arguments.length?(i=t,o):i},o};var Ri={};function Fi(t){return t.x}function Bi(t){return t.y}function Ni(t,e,r){t.y0=e,t.y=r}t.layout.stack=function(){var e=P,r=Ui,n=qi,a=Ni,i=Fi,o=Bi;function s(l,c){if(!(p=l.length))return l;var u=l.map(function(t,r){return e.call(s,t,r)}),h=u.map(function(t){return t.map(function(t,e){return[i.call(s,t,e),o.call(s,t,e)]})}),f=r.call(s,h,c);u=t.permute(u,f),h=t.permute(h,f);var p,d,g,v,m=n.call(s,h,c),y=u[0].length;for(g=0;g<y;++g)for(a.call(s,u[0][g],v=m[g],h[0][g][1]),d=1;d<p;++d)a.call(s,u[d][g],v+=h[d-1][g][1],h[d][g][1]);return l}return s.values=function(t){return arguments.length?(e=t,s):e},s.order=function(t){return arguments.length?(r="function"==typeof t?t:ji.get(t)||Ui,s):r},s.offset=function(t){return arguments.length?(n="function"==typeof t?t:Vi.get(t)||qi,s):n},s.x=function(t){return arguments.length?(i=t,s):i},s.y=function(t){return arguments.length?(o=t,s):o},s.out=function(t){return arguments.length?(a=t,s):a},s};var ji=t.map({"inside-out":function(e){var r,n,a=e.length,i=e.map(Hi),o=e.map(Gi),s=t.range(a).sort(function(t,e){return i[t]-i[e]}),l=0,c=0,u=[],h=[];for(r=0;r<a;++r)n=s[r],l<c?(l+=o[n],u.push(n)):(c+=o[n],h.push(n));return h.reverse().concat(u)},reverse:function(e){return t.range(e.length).reverse()},default:Ui}),Vi=t.map({silhouette:function(t){var e,r,n,a=t.length,i=t[0].length,o=[],s=0,l=[];for(r=0;r<i;++r){for(e=0,n=0;e<a;e++)n+=t[e][r][1];n>s&&(s=n),o.push(n)}for(r=0;r<i;++r)l[r]=(s-o[r])/2;return l},wiggle:function(t){var e,r,n,a,i,o,s,l,c,u=t.length,h=t[0],f=h.length,p=[];for(p[0]=l=c=0,r=1;r<f;++r){for(e=0,a=0;e<u;++e)a+=t[e][r][1];for(e=0,i=0,s=h[r][0]-h[r-1][0];e<u;++e){for(n=0,o=(t[e][r][1]-t[e][r-1][1])/(2*s);n<e;++n)o+=(t[n][r][1]-t[n][r-1][1])/s;i+=o*t[e][r][1]}p[r]=l-=a?i/a*s:0,l<c&&(c=l)}for(r=0;r<f;++r)p[r]-=c;return p},expand:function(t){var e,r,n,a=t.length,i=t[0].length,o=1/a,s=[];for(r=0;r<i;++r){for(e=0,n=0;e<a;e++)n+=t[e][r][1];if(n)for(e=0;e<a;e++)t[e][r][1]/=n;else for(e=0;e<a;e++)t[e][r][1]=o}for(r=0;r<i;++r)s[r]=0;return s},zero:qi});function Ui(e){return t.range(e.length)}function qi(t){for(var e=-1,r=t[0].length,n=[];++e<r;)n[e]=0;return n}function Hi(t){for(var e,r=1,n=0,a=t[0][1],i=t.length;r<i;++r)(e=t[r][1])>a&&(n=r,a=e);return n}function Gi(t){return t.reduce(Yi,0)}function Yi(t,e){return t+e[1]}function Wi(t,e){return Xi(t,Math.ceil(Math.log(e.length)/Math.LN2+1))}function Xi(t,e){for(var r=-1,n=+t[0],a=(t[1]-n)/e,i=[];++r<=e;)i[r]=a*r+n;return i}function Zi(e){return[t.min(e),t.max(e)]}function Ji(t,e){return t.value-e.value}function Ki(t,e){var r=t._pack_next;t._pack_next=e,e._pack_prev=t,e._pack_next=r,r._pack_prev=e}function Qi(t,e){t._pack_next=e,e._pack_prev=t}function $i(t,e){var r=e.x-t.x,n=e.y-t.y,a=t.r+e.r;return.999*a*a>r*r+n*n}function to(t){if((e=t.children)&&(l=e.length)){var e,r,n,a,i,o,s,l,c=1/0,u=-1/0,h=1/0,f=-1/0;if(e.forEach(eo),(r=e[0]).x=-r.r,r.y=0,x(r),l>1&&((n=e[1]).x=n.r,n.y=0,x(n),l>2))for(no(r,n,a=e[2]),x(a),Ki(r,a),r._pack_prev=a,Ki(a,n),n=r._pack_next,i=3;i<l;i++){no(r,n,a=e[i]);var p=0,d=1,g=1;for(o=n._pack_next;o!==n;o=o._pack_next,d++)if($i(o,a)){p=1;break}if(1==p)for(s=r._pack_prev;s!==o._pack_prev&&!$i(s,a);s=s._pack_prev,g++);p?(d<g||d==g&&n.r<r.r?Qi(r,n=o):Qi(r=s,n),i--):(Ki(r,a),n=a,x(a))}var v=(c+u)/2,m=(h+f)/2,y=0;for(i=0;i<l;i++)(a=e[i]).x-=v,a.y-=m,y=Math.max(y,a.r+Math.sqrt(a.x*a.x+a.y*a.y));t.r=y,e.forEach(ro)}function x(t){c=Math.min(t.x-t.r,c),u=Math.max(t.x+t.r,u),h=Math.min(t.y-t.r,h),f=Math.max(t.y+t.r,f)}}function eo(t){t._pack_next=t._pack_prev=t}function ro(t){delete t._pack_next,delete t._pack_prev}function no(t,e,r){var n=t.r+r.r,a=e.x-t.x,i=e.y-t.y;if(n&&(a||i)){var o=e.r+r.r,s=a*a+i*i,l=.5+((n*=n)-(o*=o))/(2*s),c=Math.sqrt(Math.max(0,2*o*(n+s)-(n-=s)*n-o*o))/(2*s);r.x=t.x+l*a+c*i,r.y=t.y+l*i-c*a}else r.x=t.x+n,r.y=t.y}function ao(t,e){return t.parent==e.parent?1:2}function io(t){var e=t.children;return e.length?e[0]:t.t}function oo(t){var e,r=t.children;return(e=r.length)?r[e-1]:t.t}function so(t,e,r){var n=r/(e.i-t.i);e.c-=n,e.s+=r,t.c+=n,e.z+=r,e.m+=r}function lo(t,e,r){return t.a.parent===e.parent?t.a:r}function co(t){return{x:t.x,y:t.y,dx:t.dx,dy:t.dy}}function uo(t,e){var r=t.x+e[3],n=t.y+e[0],a=t.dx-e[1]-e[3],i=t.dy-e[0]-e[2];return a<0&&(r+=a/2,a=0),i<0&&(n+=i/2,i=0),{x:r,y:n,dx:a,dy:i}}function ho(t){var e=t[0],r=t[t.length-1];return e<r?[e,r]:[r,e]}function fo(t){return t.rangeExtent?t.rangeExtent():ho(t.range())}function po(t,e,r,n){var a=r(t[0],t[1]),i=n(e[0],e[1]);return function(t){return i(a(t))}}function go(t,e){var r,n=0,a=t.length-1,i=t[n],o=t[a];return o<i&&(r=n,n=a,a=r,r=i,i=o,o=r),t[n]=e.floor(i),t[a]=e.ceil(o),t}function vo(t){return t?{floor:function(e){return Math.floor(e/t)*t},ceil:function(e){return Math.ceil(e/t)*t}}:mo}t.layout.histogram=function(){var e=!0,r=Number,n=Zi,a=Wi;function i(i,o){for(var s,l,c=[],u=i.map(r,this),h=n.call(this,u,o),f=a.call(this,h,u,o),p=(o=-1,u.length),d=f.length-1,g=e?1:1/p;++o<d;)(s=c[o]=[]).dx=f[o+1]-(s.x=f[o]),s.y=0;if(d>0)for(o=-1;++o<p;)(l=u[o])>=h[0]&&l<=h[1]&&((s=c[t.bisect(f,l,1,d)-1]).y+=g,s.push(i[o]));return c}return i.value=function(t){return arguments.length?(r=t,i):r},i.range=function(t){return arguments.length?(n=ve(t),i):n},i.bins=function(t){return arguments.length?(a="number"==typeof t?function(e){return Xi(e,t)}:ve(t),i):a},i.frequency=function(t){return arguments.length?(e=!!t,i):e},i},t.layout.pack=function(){var e,r=t.layout.hierarchy().sort(Ji),n=0,a=[1,1];function i(t,i){var o=r.call(this,t,i),s=o[0],l=a[0],c=a[1],u=null==e?Math.sqrt:"function"==typeof e?e:function(){return e};if(s.x=s.y=0,Pi(s,function(t){t.r=+u(t.value)}),Pi(s,to),n){var h=n*(e?1:Math.max(2*s.r/l,2*s.r/c))/2;Pi(s,function(t){t.r+=h}),Pi(s,to),Pi(s,function(t){t.r-=h})}return function t(e,r,n,a){var i=e.children;e.x=r+=a*e.x;e.y=n+=a*e.y;e.r*=a;if(i)for(var o=-1,s=i.length;++o<s;)t(i[o],r,n,a)}(s,l/2,c/2,e?1:1/Math.max(2*s.r/l,2*s.r/c)),o}return i.size=function(t){return arguments.length?(a=t,i):a},i.radius=function(t){return arguments.length?(e=null==t||"function"==typeof t?t:+t,i):e},i.padding=function(t){return arguments.length?(n=+t,i):n},Li(i,r)},t.layout.tree=function(){var e=t.layout.hierarchy().sort(null).value(null),r=ao,n=[1,1],a=null;function i(t,i){var c=e.call(this,t,i),u=c[0],h=function(t){var e,r={A:null,children:[t]},n=[r];for(;null!=(e=n.pop());)for(var a,i=e.children,o=0,s=i.length;o<s;++o)n.push((i[o]=a={_:i[o],parent:e,children:(a=i[o].children)&&a.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=a);return r.children[0]}(u);if(Pi(h,o),h.parent.m=-h.z,Ci(h,s),a)Ci(u,l);else{var f=u,p=u,d=u;Ci(u,function(t){t.x<f.x&&(f=t),t.x>p.x&&(p=t),t.depth>d.depth&&(d=t)});var g=r(f,p)/2-f.x,v=n[0]/(p.x+r(p,f)/2+g),m=n[1]/(d.depth||1);Ci(u,function(t){t.x=(t.x+g)*v,t.y=t.depth*m})}return c}function o(t){var e=t.children,n=t.parent.children,a=t.i?n[t.i-1]:null;if(e.length){!function(t){var e,r=0,n=0,a=t.children,i=a.length;for(;--i>=0;)(e=a[i]).z+=r,e.m+=r,r+=e.s+(n+=e.c)}(t);var i=(e[0].z+e[e.length-1].z)/2;a?(t.z=a.z+r(t._,a._),t.m=t.z-i):t.z=i}else a&&(t.z=a.z+r(t._,a._));t.parent.A=function(t,e,n){if(e){for(var a,i=t,o=t,s=e,l=i.parent.children[0],c=i.m,u=o.m,h=s.m,f=l.m;s=oo(s),i=io(i),s&&i;)l=io(l),(o=oo(o)).a=t,(a=s.z+h-i.z-c+r(s._,i._))>0&&(so(lo(s,t,n),t,a),c+=a,u+=a),h+=s.m,c+=i.m,f+=l.m,u+=o.m;s&&!oo(o)&&(o.t=s,o.m+=h-u),i&&!io(l)&&(l.t=i,l.m+=c-f,n=t)}return n}(t,a,t.parent.A||n[0])}function s(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function l(t){t.x*=n[0],t.y=t.depth*n[1]}return i.separation=function(t){return arguments.length?(r=t,i):r},i.size=function(t){return arguments.length?(a=null==(n=t)?l:null,i):a?null:n},i.nodeSize=function(t){return arguments.length?(a=null==(n=t)?null:l,i):a?n:null},Li(i,e)},t.layout.cluster=function(){var e=t.layout.hierarchy().sort(null).value(null),r=ao,n=[1,1],a=!1;function i(i,o){var s,l=e.call(this,i,o),c=l[0],u=0;Pi(c,function(e){var n=e.children;n&&n.length?(e.x=function(t){return t.reduce(function(t,e){return t+e.x},0)/t.length}(n),e.y=function(e){return 1+t.max(e,function(t){return t.y})}(n)):(e.x=s?u+=r(e,s):0,e.y=0,s=e)});var h=function t(e){var r=e.children;return r&&r.length?t(r[0]):e}(c),f=function t(e){var r,n=e.children;return n&&(r=n.length)?t(n[r-1]):e}(c),p=h.x-r(h,f)/2,d=f.x+r(f,h)/2;return Pi(c,a?function(t){t.x=(t.x-c.x)*n[0],t.y=(c.y-t.y)*n[1]}:function(t){t.x=(t.x-p)/(d-p)*n[0],t.y=(1-(c.y?t.y/c.y:1))*n[1]}),l}return i.separation=function(t){return arguments.length?(r=t,i):r},i.size=function(t){return arguments.length?(a=null==(n=t),i):a?null:n},i.nodeSize=function(t){return arguments.length?(a=null!=(n=t),i):a?n:null},Li(i,e)},t.layout.treemap=function(){var e,r=t.layout.hierarchy(),n=Math.round,a=[1,1],i=null,o=co,s=!1,l="squarify",c=.5*(1+Math.sqrt(5));function u(t,e){for(var r,n,a=-1,i=t.length;++a<i;)n=(r=t[a]).value*(e<0?0:e),r.area=isNaN(n)||n<=0?0:n}function h(t){var e=t.children;if(e&&e.length){var r,n,a,i=o(t),s=[],c=e.slice(),f=1/0,g="slice"===l?i.dx:"dice"===l?i.dy:"slice-dice"===l?1&t.depth?i.dy:i.dx:Math.min(i.dx,i.dy);for(u(c,i.dx*i.dy/t.value),s.area=0;(a=c.length)>0;)s.push(r=c[a-1]),s.area+=r.area,"squarify"!==l||(n=p(s,g))<=f?(c.pop(),f=n):(s.area-=s.pop().area,d(s,g,i,!1),g=Math.min(i.dx,i.dy),s.length=s.area=0,f=1/0);s.length&&(d(s,g,i,!0),s.length=s.area=0),e.forEach(h)}}function f(t){var e=t.children;if(e&&e.length){var r,n=o(t),a=e.slice(),i=[];for(u(a,n.dx*n.dy/t.value),i.area=0;r=a.pop();)i.push(r),i.area+=r.area,null!=r.z&&(d(i,r.z?n.dx:n.dy,n,!a.length),i.length=i.area=0);e.forEach(f)}}function p(t,e){for(var r,n=t.area,a=0,i=1/0,o=-1,s=t.length;++o<s;)(r=t[o].area)&&(r<i&&(i=r),r>a&&(a=r));return e*=e,(n*=n)?Math.max(e*a*c/n,n/(e*i*c)):1/0}function d(t,e,r,a){var i,o=-1,s=t.length,l=r.x,c=r.y,u=e?n(t.area/e):0;if(e==r.dx){for((a||u>r.dy)&&(u=r.dy);++o<s;)(i=t[o]).x=l,i.y=c,i.dy=u,l+=i.dx=Math.min(r.x+r.dx-l,u?n(i.area/u):0);i.z=!0,i.dx+=r.x+r.dx-l,r.y+=u,r.dy-=u}else{for((a||u>r.dx)&&(u=r.dx);++o<s;)(i=t[o]).x=l,i.y=c,i.dx=u,c+=i.dy=Math.min(r.y+r.dy-c,u?n(i.area/u):0);i.z=!1,i.dy+=r.y+r.dy-c,r.x+=u,r.dx-=u}}function g(t){var n=e||r(t),i=n[0];return i.x=i.y=0,i.value?(i.dx=a[0],i.dy=a[1]):i.dx=i.dy=0,e&&r.revalue(i),u([i],i.dx*i.dy/i.value),(e?f:h)(i),s&&(e=n),n}return g.size=function(t){return arguments.length?(a=t,g):a},g.padding=function(t){if(!arguments.length)return i;function e(e){return uo(e,t)}var r;return o=null==(i=t)?co:"function"==(r=typeof t)?function(e){var r=t.call(g,e,e.depth);return null==r?co(e):uo(e,"number"==typeof r?[r,r,r,r]:r)}:"number"===r?(t=[t,t,t,t],e):e,g},g.round=function(t){return arguments.length?(n=t?Math.round:Number,g):n!=Number},g.sticky=function(t){return arguments.length?(s=t,e=null,g):s},g.ratio=function(t){return arguments.length?(c=t,g):c},g.mode=function(t){return arguments.length?(l=t+"",g):l},Li(g,r)},t.random={normal:function(t,e){var r=arguments.length;return r<2&&(e=1),r<1&&(t=0),function(){var r,n,a;do{a=(r=2*Math.random()-1)*r+(n=2*Math.random()-1)*n}while(!a||a>1);return t+e*r*Math.sqrt(-2*Math.log(a)/a)}},logNormal:function(){var e=t.random.normal.apply(t,arguments);return function(){return Math.exp(e())}},bates:function(e){var r=t.random.irwinHall(e);return function(){return r()/e}},irwinHall:function(t){return function(){for(var e=0,r=0;r<t;r++)e+=Math.random();return e}}},t.scale={};var mo={floor:P,ceil:P};function yo(e,r,n,a){var i=[],o=[],s=0,l=Math.min(e.length,r.length)-1;for(e[l]<e[0]&&(e=e.slice().reverse(),r=r.slice().reverse());++s<=l;)i.push(n(e[s-1],e[s])),o.push(a(r[s-1],r[s]));return function(r){var n=t.bisect(e,r,1,l)-1;return o[n](i[n](r))}}function xo(e,r){return t.rebind(e,r,"range","rangeRound","interpolate","clamp")}function bo(t,e){return go(t,vo(_o(t,e)[2])),go(t,vo(_o(t,e)[2])),t}function _o(t,e){null==e&&(e=10);var r=ho(t),n=r[1]-r[0],a=Math.pow(10,Math.floor(Math.log(n/e)/Math.LN10)),i=e/n*a;return i<=.15?a*=10:i<=.35?a*=5:i<=.75&&(a*=2),r[0]=Math.ceil(r[0]/a)*a,r[1]=Math.floor(r[1]/a)*a+.5*a,r[2]=a,r}function wo(e,r){return t.range.apply(t,_o(e,r))}function ko(e,r,n){var a=_o(e,r);if(n){var i=Pe.exec(n);if(i.shift(),"s"===i[8]){var o=t.formatPrefix(Math.max(y(a[0]),y(a[1])));return i[7]||(i[7]="."+Mo(o.scale(a[2]))),i[8]="f",n=t.format(i.join("")),function(t){return n(o.scale(t))+o.symbol}}i[7]||(i[7]="."+function(t,e){var r=Mo(e[2]);return t in To?Math.abs(r-Mo(Math.max(y(e[0]),y(e[1]))))+ +("e"!==t):r-2*("%"===t)}(i[8],a)),n=i.join("")}else n=",."+Mo(a[2])+"f";return t.format(n)}t.scale.linear=function(){return function t(e,r,n,a){var i,o;function s(){var t=Math.min(e.length,r.length)>2?yo:po,s=a?xi:yi;return i=t(e,r,s,n),o=t(r,e,s,Ka),l}function l(t){return i(t)}l.invert=function(t){return o(t)};l.domain=function(t){return arguments.length?(e=t.map(Number),s()):e};l.range=function(t){return arguments.length?(r=t,s()):r};l.rangeRound=function(t){return l.range(t).interpolate(hi)};l.clamp=function(t){return arguments.length?(a=t,s()):a};l.interpolate=function(t){return arguments.length?(n=t,s()):n};l.ticks=function(t){return wo(e,t)};l.tickFormat=function(t,r){return ko(e,t,r)};l.nice=function(t){return bo(e,t),s()};l.copy=function(){return t(e,r,n,a)};return s()}([0,1],[0,1],Ka,!1)};var To={s:1,g:1,p:1,r:1,e:1};function Mo(t){return-Math.floor(Math.log(t)/Math.LN10+.01)}t.scale.log=function(){return function e(r,n,a,i){function o(t){return(a?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(n)}function s(t){return a?Math.pow(n,t):-Math.pow(n,-t)}function l(t){return r(o(t))}l.invert=function(t){return s(r.invert(t))};l.domain=function(t){return arguments.length?(a=t[0]>=0,r.domain((i=t.map(Number)).map(o)),l):i};l.base=function(t){return arguments.length?(n=+t,r.domain(i.map(o)),l):n};l.nice=function(){var t=go(i.map(o),a?Math:So);return r.domain(t),i=t.map(s),l};l.ticks=function(){var t=ho(i),e=[],r=t[0],l=t[1],c=Math.floor(o(r)),u=Math.ceil(o(l)),h=n%1?2:n;if(isFinite(u-c)){if(a){for(;c<u;c++)for(var f=1;f<h;f++)e.push(s(c)*f);e.push(s(c))}else for(e.push(s(c));c++<u;)for(var f=h-1;f>0;f--)e.push(s(c)*f);for(c=0;e[c]<r;c++);for(u=e.length;e[u-1]>l;u--);e=e.slice(c,u)}return e};l.tickFormat=function(e,r){if(!arguments.length)return Ao;arguments.length<2?r=Ao:"function"!=typeof r&&(r=t.format(r));var a=Math.max(1,n*e/l.ticks().length);return function(t){var e=t/s(Math.round(o(t)));return e*n<n-.5&&(e*=n),e<=a?r(t):""}};l.copy=function(){return e(r.copy(),n,a,i)};return xo(l,r)}(t.scale.linear().domain([0,1]),10,!0,[1,10])};var Ao=t.format(".0e"),So={floor:function(t){return-Math.ceil(-t)},ceil:function(t){return-Math.floor(-t)}};function Eo(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}t.scale.pow=function(){return function t(e,r,n){var a=Eo(r),i=Eo(1/r);function o(t){return e(a(t))}o.invert=function(t){return i(e.invert(t))};o.domain=function(t){return arguments.length?(e.domain((n=t.map(Number)).map(a)),o):n};o.ticks=function(t){return wo(n,t)};o.tickFormat=function(t,e){return ko(n,t,e)};o.nice=function(t){return o.domain(bo(n,t))};o.exponent=function(t){return arguments.length?(a=Eo(r=t),i=Eo(1/r),e.domain(n.map(a)),o):r};o.copy=function(){return t(e.copy(),r,n)};return xo(o,e)}(t.scale.linear(),1,[0,1])},t.scale.sqrt=function(){return t.scale.pow().exponent(.5)},t.scale.ordinal=function(){return function e(r,n){var a,i,o;function s(t){return i[((a.get(t)||("range"===n.t?a.set(t,r.push(t)):NaN))-1)%i.length]}function l(e,n){return t.range(r.length).map(function(t){return e+n*t})}s.domain=function(t){if(!arguments.length)return r;r=[],a=new b;for(var e,i=-1,o=t.length;++i<o;)a.has(e=t[i])||a.set(e,r.push(e));return s[n.t].apply(s,n.a)};s.range=function(t){return arguments.length?(i=t,o=0,n={t:"range",a:arguments},s):i};s.rangePoints=function(t,e){arguments.length<2&&(e=0);var a=t[0],c=t[1],u=r.length<2?(a=(a+c)/2,0):(c-a)/(r.length-1+e);return i=l(a+u*e/2,u),o=0,n={t:"rangePoints",a:arguments},s};s.rangeRoundPoints=function(t,e){arguments.length<2&&(e=0);var a=t[0],c=t[1],u=r.length<2?(a=c=Math.round((a+c)/2),0):(c-a)/(r.length-1+e)|0;return i=l(a+Math.round(u*e/2+(c-a-(r.length-1+e)*u)/2),u),o=0,n={t:"rangeRoundPoints",a:arguments},s};s.rangeBands=function(t,e,a){arguments.length<2&&(e=0),arguments.length<3&&(a=e);var c=t[1]<t[0],u=t[c-0],h=t[1-c],f=(h-u)/(r.length-e+2*a);return i=l(u+f*a,f),c&&i.reverse(),o=f*(1-e),n={t:"rangeBands",a:arguments},s};s.rangeRoundBands=function(t,e,a){arguments.length<2&&(e=0),arguments.length<3&&(a=e);var c=t[1]<t[0],u=t[c-0],h=t[1-c],f=Math.floor((h-u)/(r.length-e+2*a));return i=l(u+Math.round((h-u-(r.length-e)*f)/2),f),c&&i.reverse(),o=Math.round(f*(1-e)),n={t:"rangeRoundBands",a:arguments},s};s.rangeBand=function(){return o};s.rangeExtent=function(){return ho(n.a[0])};s.copy=function(){return e(r,n)};return s.domain(r)}([],{t:"range",a:[[]]})},t.scale.category10=function(){return t.scale.ordinal().range(Lo)},t.scale.category20=function(){return t.scale.ordinal().range(Co)},t.scale.category20b=function(){return t.scale.ordinal().range(Po)},t.scale.category20c=function(){return t.scale.ordinal().range(Oo)};var Lo=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(se),Co=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(se),Po=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(se),Oo=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(se);function zo(){return 0}t.scale.quantile=function(){return function e(r,n){var a;function i(){var e=0,i=n.length;for(a=[];++e<i;)a[e-1]=t.quantile(r,e/i);return o}function o(e){if(!isNaN(e=+e))return n[t.bisect(a,e)]}o.domain=function(t){return arguments.length?(r=t.map(p).filter(d).sort(f),i()):r};o.range=function(t){return arguments.length?(n=t,i()):n};o.quantiles=function(){return a};o.invertExtent=function(t){return(t=n.indexOf(t))<0?[NaN,NaN]:[t>0?a[t-1]:r[0],t<a.length?a[t]:r[r.length-1]]};o.copy=function(){return e(r,n)};return i()}([],[])},t.scale.quantize=function(){return function t(e,r,n){var a,i;function o(t){return n[Math.max(0,Math.min(i,Math.floor(a*(t-e))))]}function s(){return a=n.length/(r-e),i=n.length-1,o}o.domain=function(t){return arguments.length?(e=+t[0],r=+t[t.length-1],s()):[e,r]};o.range=function(t){return arguments.length?(n=t,s()):n};o.invertExtent=function(t){return[t=(t=n.indexOf(t))<0?NaN:t/a+e,t+1/a]};o.copy=function(){return t(e,r,n)};return s()}(0,1,[0,1])},t.scale.threshold=function(){return function e(r,n){function a(e){if(e<=e)return n[t.bisect(r,e)]}a.domain=function(t){return arguments.length?(r=t,a):r};a.range=function(t){return arguments.length?(n=t,a):n};a.invertExtent=function(t){return t=n.indexOf(t),[r[t-1],r[t]]};a.copy=function(){return e(r,n)};return a}([.5],[0,1])},t.scale.identity=function(){return function t(e){function r(t){return+t}r.invert=r;r.domain=r.range=function(t){return arguments.length?(e=t.map(r),r):e};r.ticks=function(t){return wo(e,t)};r.tickFormat=function(t,r){return ko(e,t,r)};r.copy=function(){return t(e)};return r}([0,1])},t.svg={},t.svg.arc=function(){var t=Do,e=Ro,r=zo,n=Io,a=Fo,i=Bo,o=No;function s(){var s=Math.max(0,+t.apply(this,arguments)),c=Math.max(0,+e.apply(this,arguments)),u=a.apply(this,arguments)-Et,h=i.apply(this,arguments)-Et,f=Math.abs(h-u),p=u>h?0:1;if(c<s&&(d=c,c=s,s=d),f>=St)return l(c,p)+(s?l(s,1-p):"")+"Z";var d,g,v,m,y,x,b,_,w,k,T,M,A=0,S=0,E=[];if((m=(+o.apply(this,arguments)||0)/2)&&(v=n===Io?Math.sqrt(s*s+c*c):+n.apply(this,arguments),p||(S*=-1),c&&(S=It(v/c*Math.sin(m))),s&&(A=It(v/s*Math.sin(m)))),c){y=c*Math.cos(u+S),x=c*Math.sin(u+S),b=c*Math.cos(h-S),_=c*Math.sin(h-S);var L=Math.abs(h-u-2*S)<=Mt?0:1;if(S&&jo(y,x,b,_)===p^L){var C=(u+h)/2;y=c*Math.cos(C),x=c*Math.sin(C),b=_=null}}else y=x=0;if(s){w=s*Math.cos(h-A),k=s*Math.sin(h-A),T=s*Math.cos(u+A),M=s*Math.sin(u+A);var P=Math.abs(u-h+2*A)<=Mt?0:1;if(A&&jo(w,k,T,M)===1-p^P){var O=(u+h)/2;w=s*Math.cos(O),k=s*Math.sin(O),T=M=null}}else w=k=0;if(f>kt&&(d=Math.min(Math.abs(c-s)/2,+r.apply(this,arguments)))>.001){g=s<c^p?0:1;var z=d,I=d;if(f<Mt){var D=null==T?[w,k]:null==b?[y,x]:ca([y,x],[T,M],[b,_],[w,k]),R=y-D[0],F=x-D[1],B=b-D[0],N=_-D[1],j=1/Math.sin(Math.acos((R*B+F*N)/(Math.sqrt(R*R+F*F)*Math.sqrt(B*B+N*N)))/2),V=Math.sqrt(D[0]*D[0]+D[1]*D[1]);I=Math.min(d,(s-V)/(j-1)),z=Math.min(d,(c-V)/(j+1))}if(null!=b){var U=Vo(null==T?[w,k]:[T,M],[y,x],c,z,p),q=Vo([b,_],[w,k],c,z,p);d===z?E.push("M",U[0],"A",z,",",z," 0 0,",g," ",U[1],"A",c,",",c," 0 ",1-p^jo(U[1][0],U[1][1],q[1][0],q[1][1]),",",p," ",q[1],"A",z,",",z," 0 0,",g," ",q[0]):E.push("M",U[0],"A",z,",",z," 0 1,",g," ",q[0])}else E.push("M",y,",",x);if(null!=T){var H=Vo([y,x],[T,M],s,-I,p),G=Vo([w,k],null==b?[y,x]:[b,_],s,-I,p);d===I?E.push("L",G[0],"A",I,",",I," 0 0,",g," ",G[1],"A",s,",",s," 0 ",p^jo(G[1][0],G[1][1],H[1][0],H[1][1]),",",1-p," ",H[1],"A",I,",",I," 0 0,",g," ",H[0]):E.push("L",G[0],"A",I,",",I," 0 0,",g," ",H[0])}else E.push("L",w,",",k)}else E.push("M",y,",",x),null!=b&&E.push("A",c,",",c," 0 ",L,",",p," ",b,",",_),E.push("L",w,",",k),null!=T&&E.push("A",s,",",s," 0 ",P,",",1-p," ",T,",",M);return E.push("Z"),E.join("")}function l(t,e){return"M0,"+t+"A"+t+","+t+" 0 1,"+e+" 0,"+-t+"A"+t+","+t+" 0 1,"+e+" 0,"+t}return s.innerRadius=function(e){return arguments.length?(t=ve(e),s):t},s.outerRadius=function(t){return arguments.length?(e=ve(t),s):e},s.cornerRadius=function(t){return arguments.length?(r=ve(t),s):r},s.padRadius=function(t){return arguments.length?(n=t==Io?Io:ve(t),s):n},s.startAngle=function(t){return arguments.length?(a=ve(t),s):a},s.endAngle=function(t){return arguments.length?(i=ve(t),s):i},s.padAngle=function(t){return arguments.length?(o=ve(t),s):o},s.centroid=function(){var r=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,n=(+a.apply(this,arguments)+ +i.apply(this,arguments))/2-Et;return[Math.cos(n)*r,Math.sin(n)*r]},s};var Io="auto";function Do(t){return t.innerRadius}function Ro(t){return t.outerRadius}function Fo(t){return t.startAngle}function Bo(t){return t.endAngle}function No(t){return t&&t.padAngle}function jo(t,e,r,n){return(t-r)*e-(e-n)*t>0?0:1}function Vo(t,e,r,n,a){var i=t[0]-e[0],o=t[1]-e[1],s=(a?n:-n)/Math.sqrt(i*i+o*o),l=s*o,c=-s*i,u=t[0]+l,h=t[1]+c,f=e[0]+l,p=e[1]+c,d=(u+f)/2,g=(h+p)/2,v=f-u,m=p-h,y=v*v+m*m,x=r-n,b=u*p-f*h,_=(m<0?-1:1)*Math.sqrt(Math.max(0,x*x*y-b*b)),w=(b*m-v*_)/y,k=(-b*v-m*_)/y,T=(b*m+v*_)/y,M=(-b*v+m*_)/y,A=w-d,S=k-g,E=T-d,L=M-g;return A*A+S*S>E*E+L*L&&(w=T,k=M),[[w-l,k-c],[w*r/x,k*r/x]]}function Uo(t){var e=na,r=aa,n=Xr,a=Ho,i=a.key,o=.7;function s(i){var s,l=[],c=[],u=-1,h=i.length,f=ve(e),p=ve(r);function d(){l.push("M",a(t(c),o))}for(;++u<h;)n.call(this,s=i[u],u)?c.push([+f.call(this,s,u),+p.call(this,s,u)]):c.length&&(d(),c=[]);return c.length&&d(),l.length?l.join(""):null}return s.x=function(t){return arguments.length?(e=t,s):e},s.y=function(t){return arguments.length?(r=t,s):r},s.defined=function(t){return arguments.length?(n=t,s):n},s.interpolate=function(t){return arguments.length?(i="function"==typeof t?a=t:(a=qo.get(t)||Ho).key,s):i},s.tension=function(t){return arguments.length?(o=t,s):o},s}t.svg.line=function(){return Uo(P)};var qo=t.map({linear:Ho,"linear-closed":Go,step:function(t){var e=0,r=t.length,n=t[0],a=[n[0],",",n[1]];for(;++e<r;)a.push("H",(n[0]+(n=t[e])[0])/2,"V",n[1]);r>1&&a.push("H",n[0]);return a.join("")},"step-before":Yo,"step-after":Wo,basis:Jo,"basis-open":function(t){if(t.length<4)return Ho(t);var e,r=[],n=-1,a=t.length,i=[0],o=[0];for(;++n<3;)e=t[n],i.push(e[0]),o.push(e[1]);r.push(Ko(ts,i)+","+Ko(ts,o)),--n;for(;++n<a;)e=t[n],i.shift(),i.push(e[0]),o.shift(),o.push(e[1]),es(r,i,o);return r.join("")},"basis-closed":function(t){var e,r,n=-1,a=t.length,i=a+4,o=[],s=[];for(;++n<4;)r=t[n%a],o.push(r[0]),s.push(r[1]);e=[Ko(ts,o),",",Ko(ts,s)],--n;for(;++n<i;)r=t[n%a],o.shift(),o.push(r[0]),s.shift(),s.push(r[1]),es(e,o,s);return e.join("")},bundle:function(t,e){var r=t.length-1;if(r)for(var n,a,i=t[0][0],o=t[0][1],s=t[r][0]-i,l=t[r][1]-o,c=-1;++c<=r;)n=t[c],a=c/r,n[0]=e*n[0]+(1-e)*(i+a*s),n[1]=e*n[1]+(1-e)*(o+a*l);return Jo(t)},cardinal:function(t,e){return t.length<3?Ho(t):t[0]+Xo(t,Zo(t,e))},"cardinal-open":function(t,e){return t.length<4?Ho(t):t[1]+Xo(t.slice(1,-1),Zo(t,e))},"cardinal-closed":function(t,e){return t.length<3?Go(t):t[0]+Xo((t.push(t[0]),t),Zo([t[t.length-2]].concat(t,[t[1]]),e))},monotone:function(t){return t.length<3?Ho(t):t[0]+Xo(t,function(t){var e,r,n,a,i=[],o=function(t){var e=0,r=t.length-1,n=[],a=t[0],i=t[1],o=n[0]=rs(a,i);for(;++e<r;)n[e]=(o+(o=rs(a=i,i=t[e+1])))/2;return n[e]=o,n}(t),s=-1,l=t.length-1;for(;++s<l;)e=rs(t[s],t[s+1]),y(e)<kt?o[s]=o[s+1]=0:(r=o[s]/e,n=o[s+1]/e,(a=r*r+n*n)>9&&(a=3*e/Math.sqrt(a),o[s]=a*r,o[s+1]=a*n));s=-1;for(;++s<=l;)a=(t[Math.min(l,s+1)][0]-t[Math.max(0,s-1)][0])/(6*(1+o[s]*o[s])),i.push([a||0,o[s]*a||0]);return i}(t))}});function Ho(t){return t.length>1?t.join("L"):t+"Z"}function Go(t){return t.join("L")+"Z"}function Yo(t){for(var e=0,r=t.length,n=t[0],a=[n[0],",",n[1]];++e<r;)a.push("V",(n=t[e])[1],"H",n[0]);return a.join("")}function Wo(t){for(var e=0,r=t.length,n=t[0],a=[n[0],",",n[1]];++e<r;)a.push("H",(n=t[e])[0],"V",n[1]);return a.join("")}function Xo(t,e){if(e.length<1||t.length!=e.length&&t.length!=e.length+2)return Ho(t);var r=t.length!=e.length,n="",a=t[0],i=t[1],o=e[0],s=o,l=1;if(r&&(n+="Q"+(i[0]-2*o[0]/3)+","+(i[1]-2*o[1]/3)+","+i[0]+","+i[1],a=t[1],l=2),e.length>1){s=e[1],i=t[l],l++,n+="C"+(a[0]+o[0])+","+(a[1]+o[1])+","+(i[0]-s[0])+","+(i[1]-s[1])+","+i[0]+","+i[1];for(var c=2;c<e.length;c++,l++)i=t[l],s=e[c],n+="S"+(i[0]-s[0])+","+(i[1]-s[1])+","+i[0]+","+i[1]}if(r){var u=t[l];n+="Q"+(i[0]+2*s[0]/3)+","+(i[1]+2*s[1]/3)+","+u[0]+","+u[1]}return n}function Zo(t,e){for(var r,n=[],a=(1-e)/2,i=t[0],o=t[1],s=1,l=t.length;++s<l;)r=i,i=o,o=t[s],n.push([a*(o[0]-r[0]),a*(o[1]-r[1])]);return n}function Jo(t){if(t.length<3)return Ho(t);var e=1,r=t.length,n=t[0],a=n[0],i=n[1],o=[a,a,a,(n=t[1])[0]],s=[i,i,i,n[1]],l=[a,",",i,"L",Ko(ts,o),",",Ko(ts,s)];for(t.push(t[r-1]);++e<=r;)n=t[e],o.shift(),o.push(n[0]),s.shift(),s.push(n[1]),es(l,o,s);return t.pop(),l.push("L",n),l.join("")}function Ko(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}qo.forEach(function(t,e){e.key=t,e.closed=/-closed$/.test(t)});var Qo=[0,2/3,1/3,0],$o=[0,1/3,2/3,0],ts=[0,1/6,2/3,1/6];function es(t,e,r){t.push("C",Ko(Qo,e),",",Ko(Qo,r),",",Ko($o,e),",",Ko($o,r),",",Ko(ts,e),",",Ko(ts,r))}function rs(t,e){return(e[1]-t[1])/(e[0]-t[0])}function ns(t){for(var e,r,n,a=-1,i=t.length;++a<i;)r=(e=t[a])[0],n=e[1]-Et,e[0]=r*Math.cos(n),e[1]=r*Math.sin(n);return t}function as(t){var e=na,r=na,n=0,a=aa,i=Xr,o=Ho,s=o.key,l=o,c="L",u=.7;function h(s){var h,f,p,d=[],g=[],v=[],m=-1,y=s.length,x=ve(e),b=ve(n),_=e===r?function(){return f}:ve(r),w=n===a?function(){return p}:ve(a);function k(){d.push("M",o(t(v),u),c,l(t(g.reverse()),u),"Z")}for(;++m<y;)i.call(this,h=s[m],m)?(g.push([f=+x.call(this,h,m),p=+b.call(this,h,m)]),v.push([+_.call(this,h,m),+w.call(this,h,m)])):g.length&&(k(),g=[],v=[]);return g.length&&k(),d.length?d.join(""):null}return h.x=function(t){return arguments.length?(e=r=t,h):r},h.x0=function(t){return arguments.length?(e=t,h):e},h.x1=function(t){return arguments.length?(r=t,h):r},h.y=function(t){return arguments.length?(n=a=t,h):a},h.y0=function(t){return arguments.length?(n=t,h):n},h.y1=function(t){return arguments.length?(a=t,h):a},h.defined=function(t){return arguments.length?(i=t,h):i},h.interpolate=function(t){return arguments.length?(s="function"==typeof t?o=t:(o=qo.get(t)||Ho).key,l=o.reverse||o,c=o.closed?"M":"L",h):s},h.tension=function(t){return arguments.length?(u=t,h):u},h}function is(t){return t.radius}function os(t){return[t.x,t.y]}function ss(){return 64}function ls(){return"circle"}function cs(t){var e=Math.sqrt(t/Mt);return"M0,"+e+"A"+e+","+e+" 0 1,1 0,"+-e+"A"+e+","+e+" 0 1,1 0,"+e+"Z"}t.svg.line.radial=function(){var t=Uo(ns);return t.radius=t.x,delete t.x,t.angle=t.y,delete t.y,t},Yo.reverse=Wo,Wo.reverse=Yo,t.svg.area=function(){return as(P)},t.svg.area.radial=function(){var t=as(ns);return t.radius=t.x,delete t.x,t.innerRadius=t.x0,delete t.x0,t.outerRadius=t.x1,delete t.x1,t.angle=t.y,delete t.y,t.startAngle=t.y0,delete t.y0,t.endAngle=t.y1,delete t.y1,t},t.svg.chord=function(){var t=qn,e=Hn,r=is,n=Fo,a=Bo;function i(r,n){var a,i,c=o(this,t,r,n),u=o(this,e,r,n);return"M"+c.p0+s(c.r,c.p1,c.a1-c.a0)+(i=u,(a=c).a0==i.a0&&a.a1==i.a1?l(c.r,c.p1,c.r,c.p0):l(c.r,c.p1,u.r,u.p0)+s(u.r,u.p1,u.a1-u.a0)+l(u.r,u.p1,c.r,c.p0))+"Z"}function o(t,e,i,o){var s=e.call(t,i,o),l=r.call(t,s,o),c=n.call(t,s,o)-Et,u=a.call(t,s,o)-Et;return{r:l,a0:c,a1:u,p0:[l*Math.cos(c),l*Math.sin(c)],p1:[l*Math.cos(u),l*Math.sin(u)]}}function s(t,e,r){return"A"+t+","+t+" 0 "+ +(r>Mt)+",1 "+e}function l(t,e,r,n){return"Q 0,0 "+n}return i.radius=function(t){return arguments.length?(r=ve(t),i):r},i.source=function(e){return arguments.length?(t=ve(e),i):t},i.target=function(t){return arguments.length?(e=ve(t),i):e},i.startAngle=function(t){return arguments.length?(n=ve(t),i):n},i.endAngle=function(t){return arguments.length?(a=ve(t),i):a},i},t.svg.diagonal=function(){var t=qn,e=Hn,r=os;function n(n,a){var i=t.call(this,n,a),o=e.call(this,n,a),s=(i.y+o.y)/2,l=[i,{x:i.x,y:s},{x:o.x,y:s},o];return"M"+(l=l.map(r))[0]+"C"+l[1]+" "+l[2]+" "+l[3]}return n.source=function(e){return arguments.length?(t=ve(e),n):t},n.target=function(t){return arguments.length?(e=ve(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},t.svg.diagonal.radial=function(){var e=t.svg.diagonal(),r=os,n=e.projection;return e.projection=function(t){return arguments.length?n(function(t){return function(){var e=t.apply(this,arguments),r=e[0],n=e[1]-Et;return[r*Math.cos(n),r*Math.sin(n)]}}(r=t)):r},e},t.svg.symbol=function(){var t=ls,e=ss;function r(r,n){return(us.get(t.call(this,r,n))||cs)(e.call(this,r,n))}return r.type=function(e){return arguments.length?(t=ve(e),r):t},r.size=function(t){return arguments.length?(e=ve(t),r):e},r};var us=t.map({circle:cs,cross:function(t){var e=Math.sqrt(t/5)/2;return"M"+-3*e+","+-e+"H"+-e+"V"+-3*e+"H"+e+"V"+-e+"H"+3*e+"V"+e+"H"+e+"V"+3*e+"H"+-e+"V"+e+"H"+-3*e+"Z"},diamond:function(t){var e=Math.sqrt(t/(2*fs)),r=e*fs;return"M0,"+-e+"L"+r+",0 0,"+e+" "+-r+",0Z"},square:function(t){var e=Math.sqrt(t)/2;return"M"+-e+","+-e+"L"+e+","+-e+" "+e+","+e+" "+-e+","+e+"Z"},"triangle-down":function(t){var e=Math.sqrt(t/hs),r=e*hs/2;return"M0,"+r+"L"+e+","+-r+" "+-e+","+-r+"Z"},"triangle-up":function(t){var e=Math.sqrt(t/hs),r=e*hs/2;return"M0,"+-r+"L"+e+","+r+" "+-e+","+r+"Z"}});t.svg.symbolTypes=us.keys();var hs=Math.sqrt(3),fs=Math.tan(30*Lt);W.transition=function(t){for(var e,r,n=vs||++xs,a=ws(t),i=[],o=ms||{time:Date.now(),ease:oi,delay:0,duration:250},s=-1,l=this.length;++s<l;){i.push(e=[]);for(var c=this[s],u=-1,h=c.length;++u<h;)(r=c[u])&&ks(r,u,a,n,o),e.push(r)}return gs(i,a,n)},W.interrupt=function(t){return this.each(null==t?ps:ds(ws(t)))};var ps=ds(ws());function ds(t){return function(){var e,r,n;(e=this[t])&&(n=e[r=e.active])&&(n.timer.c=null,n.timer.t=NaN,--e.count?delete e[r]:delete this[t],e.active+=.5,n.event&&n.event.interrupt.call(this,this.__data__,n.index))}}function gs(t,e,r){return U(t,ys),t.namespace=e,t.id=r,t}var vs,ms,ys=[],xs=0;function bs(t,e,r,n){var a=t.id,i=t.namespace;return ut(t,"function"==typeof r?function(t,o,s){t[i][a].tween.set(e,n(r.call(t,t.__data__,o,s)))}:(r=n(r),function(t){t[i][a].tween.set(e,r)}))}function _s(t){return null==t&&(t=""),function(){this.textContent=t}}function ws(t){return null==t?"__transition__":"__transition_"+t+"__"}function ks(t,e,r,n,a){var i,o,s,l,c,u=t[r]||(t[r]={active:0,count:0}),h=u[n];function f(r){var a=u.active,f=u[a];for(var d in f&&(f.timer.c=null,f.timer.t=NaN,--u.count,delete u[a],f.event&&f.event.interrupt.call(t,t.__data__,f.index)),u)if(+d<n){var g=u[d];g.timer.c=null,g.timer.t=NaN,--u.count,delete u[d]}o.c=p,Te(function(){return o.c&&p(r||1)&&(o.c=null,o.t=NaN),1},0,i),u.active=n,h.event&&h.event.start.call(t,t.__data__,e),c=[],h.tween.forEach(function(r,n){(n=n.call(t,t.__data__,e))&&c.push(n)}),l=h.ease,s=h.duration}function p(a){for(var i=a/s,o=l(i),f=c.length;f>0;)c[--f].call(t,o);if(i>=1)return h.event&&h.event.end.call(t,t.__data__,e),--u.count?delete u[n]:delete t[r],1}h||(i=a.time,o=Te(function(t){var e=h.delay;if(o.t=e+i,e<=t)return f(t-e);o.c=f},0,i),h=u[n]={tween:new b,time:i,timer:o,delay:a.delay,duration:a.duration,ease:a.ease,index:e},a=null,++u.count)}ys.call=W.call,ys.empty=W.empty,ys.node=W.node,ys.size=W.size,t.transition=function(e,r){return e&&e.transition?vs?e.transition(r):e:t.selection().transition(e)},t.transition.prototype=ys,ys.select=function(t){var e,r,n,a=this.id,i=this.namespace,o=[];t=X(t);for(var s=-1,l=this.length;++s<l;){o.push(e=[]);for(var c=this[s],u=-1,h=c.length;++u<h;)(n=c[u])&&(r=t.call(n,n.__data__,u,s))?("__data__"in n&&(r.__data__=n.__data__),ks(r,u,i,a,n[i][a]),e.push(r)):e.push(null)}return gs(o,i,a)},ys.selectAll=function(t){var e,r,n,a,i,o=this.id,s=this.namespace,l=[];t=Z(t);for(var c=-1,u=this.length;++c<u;)for(var h=this[c],f=-1,p=h.length;++f<p;)if(n=h[f]){i=n[s][o],r=t.call(n,n.__data__,f,c),l.push(e=[]);for(var d=-1,g=r.length;++d<g;)(a=r[d])&&ks(a,d,s,o,i),e.push(a)}return gs(l,s,o)},ys.filter=function(t){var e,r,n=[];"function"!=typeof t&&(t=ct(t));for(var a=0,i=this.length;a<i;a++){n.push(e=[]);for(var o,s=0,l=(o=this[a]).length;s<l;s++)(r=o[s])&&t.call(r,r.__data__,s,a)&&e.push(r)}return gs(n,this.namespace,this.id)},ys.tween=function(t,e){var r=this.id,n=this.namespace;return arguments.length<2?this.node()[n][r].tween.get(t):ut(this,null==e?function(e){e[n][r].tween.remove(t)}:function(a){a[n][r].tween.set(t,e)})},ys.attr=function(e,r){if(arguments.length<2){for(r in e)this.attr(r,e[r]);return this}var n="transform"==e?mi:Ka,a=t.ns.qualify(e);function i(){this.removeAttribute(a)}function o(){this.removeAttributeNS(a.space,a.local)}return bs(this,"attr."+e,r,a.local?function(t){return null==t?o:(t+="",function(){var e,r=this.getAttributeNS(a.space,a.local);return r!==t&&(e=n(r,t),function(t){this.setAttributeNS(a.space,a.local,e(t))})})}:function(t){return null==t?i:(t+="",function(){var e,r=this.getAttribute(a);return r!==t&&(e=n(r,t),function(t){this.setAttribute(a,e(t))})})})},ys.attrTween=function(e,r){var n=t.ns.qualify(e);return this.tween("attr."+e,n.local?function(t,e){var a=r.call(this,t,e,this.getAttributeNS(n.space,n.local));return a&&function(t){this.setAttributeNS(n.space,n.local,a(t))}}:function(t,e){var a=r.call(this,t,e,this.getAttribute(n));return a&&function(t){this.setAttribute(n,a(t))}})},ys.style=function(t,e,r){var n=arguments.length;if(n<3){if("string"!=typeof t){for(r in n<2&&(e=""),t)this.style(r,t[r],e);return this}r=""}function a(){this.style.removeProperty(t)}return bs(this,"style."+t,e,function(e){return null==e?a:(e+="",function(){var n,a=o(this).getComputedStyle(this,null).getPropertyValue(t);return a!==e&&(n=Ka(a,e),function(e){this.style.setProperty(t,n(e),r)})})})},ys.styleTween=function(t,e,r){return arguments.length<3&&(r=""),this.tween("style."+t,function(n,a){var i=e.call(this,n,a,o(this).getComputedStyle(this,null).getPropertyValue(t));return i&&function(e){this.style.setProperty(t,i(e),r)}})},ys.text=function(t){return bs(this,"text",t,_s)},ys.remove=function(){var t=this.namespace;return this.each("end.transition",function(){var e;this[t].count<2&&(e=this.parentNode)&&e.removeChild(this)})},ys.ease=function(e){var r=this.id,n=this.namespace;return arguments.length<1?this.node()[n][r].ease:("function"!=typeof e&&(e=t.ease.apply(t,arguments)),ut(this,function(t){t[n][r].ease=e}))},ys.delay=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].delay:ut(this,"function"==typeof t?function(n,a,i){n[r][e].delay=+t.call(n,n.__data__,a,i)}:(t=+t,function(n){n[r][e].delay=t}))},ys.duration=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].duration:ut(this,"function"==typeof t?function(n,a,i){n[r][e].duration=Math.max(1,t.call(n,n.__data__,a,i))}:(t=Math.max(1,t),function(n){n[r][e].duration=t}))},ys.each=function(e,r){var n=this.id,a=this.namespace;if(arguments.length<2){var i=ms,o=vs;try{vs=n,ut(this,function(t,r,i){ms=t[a][n],e.call(t,t.__data__,r,i)})}finally{ms=i,vs=o}}else ut(this,function(i){var o=i[a][n];(o.event||(o.event=t.dispatch("start","end","interrupt"))).on(e,r)});return this},ys.transition=function(){for(var t,e,r,n=this.id,a=++xs,i=this.namespace,o=[],s=0,l=this.length;s<l;s++){o.push(t=[]);for(var c,u=0,h=(c=this[s]).length;u<h;u++)(e=c[u])&&ks(e,u,i,a,{time:(r=e[i][n]).time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration}),t.push(e)}return gs(o,i,a)},t.svg.axis=function(){var e,r=t.scale.linear(),a=Ts,i=6,o=6,s=3,l=[10],c=null;function u(n){n.each(function(){var n,u=t.select(this),h=this.__chart__||r,f=this.__chart__=r.copy(),p=null==c?f.ticks?f.ticks.apply(f,l):f.domain():c,d=null==e?f.tickFormat?f.tickFormat.apply(f,l):P:e,g=u.selectAll(".tick").data(p,f),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",kt),m=t.transition(g.exit()).style("opacity",kt).remove(),y=t.transition(g.order()).style("opacity",1),x=Math.max(i,0)+s,b=fo(f),_=u.selectAll(".domain").data([0]),w=(_.enter().append("path").attr("class","domain"),t.transition(_));v.append("line"),v.append("text");var k,T,M,A,S=v.select("line"),E=y.select("line"),L=g.select("text").text(d),C=v.select("text"),O=y.select("text"),z="top"===a||"left"===a?-1:1;if("bottom"===a||"top"===a?(n=As,k="x",M="y",T="x2",A="y2",L.attr("dy",z<0?"0em":".71em").style("text-anchor","middle"),w.attr("d","M"+b[0]+","+z*o+"V0H"+b[1]+"V"+z*o)):(n=Ss,k="y",M="x",T="y2",A="x2",L.attr("dy",".32em").style("text-anchor",z<0?"end":"start"),w.attr("d","M"+z*o+","+b[0]+"H0V"+b[1]+"H"+z*o)),S.attr(A,z*i),C.attr(M,z*x),E.attr(T,0).attr(A,z*i),O.attr(k,0).attr(M,z*x),f.rangeBand){var I=f,D=I.rangeBand()/2;h=f=function(t){return I(t)+D}}else h.rangeBand?h=f:m.call(n,f,h);v.call(n,h,f),y.call(n,f,f)})}return u.scale=function(t){return arguments.length?(r=t,u):r},u.orient=function(t){return arguments.length?(a=t in Ms?t+"":Ts,u):a},u.ticks=function(){return arguments.length?(l=n(arguments),u):l},u.tickValues=function(t){return arguments.length?(c=t,u):c},u.tickFormat=function(t){return arguments.length?(e=t,u):e},u.tickSize=function(t){var e=arguments.length;return e?(i=+t,o=+arguments[e-1],u):i},u.innerTickSize=function(t){return arguments.length?(i=+t,u):i},u.outerTickSize=function(t){return arguments.length?(o=+t,u):o},u.tickPadding=function(t){return arguments.length?(s=+t,u):s},u.tickSubdivide=function(){return arguments.length&&u},u};var Ts="bottom",Ms={top:1,right:1,bottom:1,left:1};function As(t,e,r){t.attr("transform",function(t){var n=e(t);return"translate("+(isFinite(n)?n:r(t))+",0)"})}function Ss(t,e,r){t.attr("transform",function(t){var n=e(t);return"translate(0,"+(isFinite(n)?n:r(t))+")"})}t.svg.brush=function(){var e,r,n=j(f,"brushstart","brush","brushend"),a=null,i=null,s=[0,0],l=[0,0],c=!0,u=!0,h=Ls[0];function f(e){e.each(function(){var e=t.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",v).on("touchstart.brush",v),r=e.selectAll(".background").data([0]);r.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),e.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var n=e.selectAll(".resize").data(h,P);n.exit().remove(),n.enter().append("g").attr("class",function(t){return"resize "+t}).style("cursor",function(t){return Es[t]}).append("rect").attr("x",function(t){return/[ew]$/.test(t)?-3:null}).attr("y",function(t){return/^[ns]/.test(t)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),n.style("display",f.empty()?"none":null);var o,s=t.transition(e),l=t.transition(r);a&&(o=fo(a),l.attr("x",o[0]).attr("width",o[1]-o[0]),d(s)),i&&(o=fo(i),l.attr("y",o[0]).attr("height",o[1]-o[0]),g(s)),p(s)})}function p(t){t.selectAll(".resize").attr("transform",function(t){return"translate("+s[+/e$/.test(t)]+","+l[+/^s/.test(t)]+")"})}function d(t){t.select(".extent").attr("x",s[0]),t.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function g(t){t.select(".extent").attr("y",l[0]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",l[1]-l[0])}function v(){var h,v,m=this,y=t.select(t.event.target),x=n.of(m,arguments),b=t.select(m),_=y.datum(),w=!/^(n|s)$/.test(_)&&a,k=!/^(e|w)$/.test(_)&&i,T=y.classed("extent"),M=xt(m),A=t.mouse(m),S=t.select(o(m)).on("keydown.brush",function(){32==t.event.keyCode&&(T||(h=null,A[0]-=s[1],A[1]-=l[1],T=2),B())}).on("keyup.brush",function(){32==t.event.keyCode&&2==T&&(A[0]+=s[1],A[1]+=l[1],T=0,B())});if(t.event.changedTouches?S.on("touchmove.brush",C).on("touchend.brush",O):S.on("mousemove.brush",C).on("mouseup.brush",O),b.interrupt().selectAll("*").interrupt(),T)A[0]=s[0]-A[0],A[1]=l[0]-A[1];else if(_){var E=+/w$/.test(_),L=+/^n/.test(_);v=[s[1-E]-A[0],l[1-L]-A[1]],A[0]=s[E],A[1]=l[L]}else t.event.altKey&&(h=A.slice());function C(){var e=t.mouse(m),r=!1;v&&(e[0]+=v[0],e[1]+=v[1]),T||(t.event.altKey?(h||(h=[(s[0]+s[1])/2,(l[0]+l[1])/2]),A[0]=s[+(e[0]<h[0])],A[1]=l[+(e[1]<h[1])]):h=null),w&&P(e,a,0)&&(d(b),r=!0),k&&P(e,i,1)&&(g(b),r=!0),r&&(p(b),x({type:"brush",mode:T?"move":"resize"}))}function P(t,n,a){var i,o,f=fo(n),p=f[0],d=f[1],g=A[a],v=a?l:s,m=v[1]-v[0];if(T&&(p-=g,d-=m+g),i=(a?u:c)?Math.max(p,Math.min(d,t[a])):t[a],T?o=(i+=g)+m:(h&&(g=Math.max(p,Math.min(d,2*h[a]-i))),g<i?(o=i,i=g):o=g),v[0]!=i||v[1]!=o)return a?r=null:e=null,v[0]=i,v[1]=o,!0}function O(){C(),b.style("pointer-events","all").selectAll(".resize").style("display",f.empty()?"none":null),t.select("body").style("cursor",null),S.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),M(),x({type:"brushend"})}b.style("pointer-events","none").selectAll(".resize").style("display",null),t.select("body").style("cursor",y.style("cursor")),x({type:"brushstart"}),C()}return f.event=function(a){a.each(function(){var a=n.of(this,arguments),i={x:s,y:l,i:e,j:r},o=this.__chart__||i;this.__chart__=i,vs?t.select(this).transition().each("start.brush",function(){e=o.i,r=o.j,s=o.x,l=o.y,a({type:"brushstart"})}).tween("brush:brush",function(){var t=Qa(s,i.x),n=Qa(l,i.y);return e=r=null,function(e){s=i.x=t(e),l=i.y=n(e),a({type:"brush",mode:"resize"})}}).each("end.brush",function(){e=i.i,r=i.j,a({type:"brush",mode:"resize"}),a({type:"brushend"})}):(a({type:"brushstart"}),a({type:"brush",mode:"resize"}),a({type:"brushend"}))})},f.x=function(t){return arguments.length?(h=Ls[!(a=t)<<1|!i],f):a},f.y=function(t){return arguments.length?(h=Ls[!a<<1|!(i=t)],f):i},f.clamp=function(t){return arguments.length?(a&&i?(c=!!t[0],u=!!t[1]):a?c=!!t:i&&(u=!!t),f):a&&i?[c,u]:a?c:i?u:null},f.extent=function(t){var n,o,c,u,h;return arguments.length?(a&&(n=t[0],o=t[1],i&&(n=n[0],o=o[0]),e=[n,o],a.invert&&(n=a(n),o=a(o)),o<n&&(h=n,n=o,o=h),n==s[0]&&o==s[1]||(s=[n,o])),i&&(c=t[0],u=t[1],a&&(c=c[1],u=u[1]),r=[c,u],i.invert&&(c=i(c),u=i(u)),u<c&&(h=c,c=u,u=h),c==l[0]&&u==l[1]||(l=[c,u])),f):(a&&(e?(n=e[0],o=e[1]):(n=s[0],o=s[1],a.invert&&(n=a.invert(n),o=a.invert(o)),o<n&&(h=n,n=o,o=h))),i&&(r?(c=r[0],u=r[1]):(c=l[0],u=l[1],i.invert&&(c=i.invert(c),u=i.invert(u)),u<c&&(h=c,c=u,u=h))),a&&i?[[n,c],[o,u]]:a?[n,o]:i&&[c,u])},f.clear=function(){return f.empty()||(s=[0,0],l=[0,0],e=r=null),f},f.empty=function(){return!!a&&s[0]==s[1]||!!i&&l[0]==l[1]},t.rebind(f,n,"on")};var Es={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Ls=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Cs=Ie.format=cr.timeFormat,Ps=Cs.utc,Os=Ps("%Y-%m-%dT%H:%M:%S.%LZ");function zs(t){return t.toISOString()}function Is(e,r,n){function a(t){return e(t)}function i(e,n){var a=(e[1]-e[0])/n,i=t.bisect(Rs,a);return i==Rs.length?[r.year,_o(e.map(function(t){return t/31536e6}),n)[2]]:i?r[a/Rs[i-1]<Rs[i]/a?i-1:i]:[Ns,_o(e,n)[2]]}return a.invert=function(t){return Ds(e.invert(t))},a.domain=function(t){return arguments.length?(e.domain(t),a):e.domain().map(Ds)},a.nice=function(t,e){var r=a.domain(),n=ho(r),o=null==t?i(n,10):"number"==typeof t&&i(n,t);function s(r){return!isNaN(r)&&!t.range(r,Ds(+r+1),e).length}return o&&(t=o[0],e=o[1]),a.domain(go(r,e>1?{floor:function(e){for(;s(e=t.floor(e));)e=Ds(e-1);return e},ceil:function(e){for(;s(e=t.ceil(e));)e=Ds(+e+1);return e}}:t))},a.ticks=function(t,e){var r=ho(a.domain()),n=null==t?i(r,10):"number"==typeof t?i(r,t):!t.range&&[{range:t},e];return n&&(t=n[0],e=n[1]),t.range(r[0],Ds(+r[1]+1),e<1?1:e)},a.tickFormat=function(){return n},a.copy=function(){return Is(e.copy(),r,n)},xo(a,e)}function Ds(t){return new Date(t)}Cs.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?zs:Os,zs.parse=function(t){var e=new Date(t);return isNaN(e)?null:e},zs.toString=Os.toString,Ie.second=Be(function(t){return new De(1e3*Math.floor(t/1e3))},function(t,e){t.setTime(t.getTime()+1e3*Math.floor(e))},function(t){return t.getSeconds()}),Ie.seconds=Ie.second.range,Ie.seconds.utc=Ie.second.utc.range,Ie.minute=Be(function(t){return new De(6e4*Math.floor(t/6e4))},function(t,e){t.setTime(t.getTime()+6e4*Math.floor(e))},function(t){return t.getMinutes()}),Ie.minutes=Ie.minute.range,Ie.minutes.utc=Ie.minute.utc.range,Ie.hour=Be(function(t){var e=t.getTimezoneOffset()/60;return new De(36e5*(Math.floor(t/36e5-e)+e))},function(t,e){t.setTime(t.getTime()+36e5*Math.floor(e))},function(t){return t.getHours()}),Ie.hours=Ie.hour.range,Ie.hours.utc=Ie.hour.utc.range,Ie.month=Be(function(t){return(t=Ie.day(t)).setDate(1),t},function(t,e){t.setMonth(t.getMonth()+e)},function(t){return t.getMonth()}),Ie.months=Ie.month.range,Ie.months.utc=Ie.month.utc.range;var Rs=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Fs=[[Ie.second,1],[Ie.second,5],[Ie.second,15],[Ie.second,30],[Ie.minute,1],[Ie.minute,5],[Ie.minute,15],[Ie.minute,30],[Ie.hour,1],[Ie.hour,3],[Ie.hour,6],[Ie.hour,12],[Ie.day,1],[Ie.day,2],[Ie.week,1],[Ie.month,1],[Ie.month,3],[Ie.year,1]],Bs=Cs.multi([[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["%I:%M",function(t){return t.getMinutes()}],["%I %p",function(t){return t.getHours()}],["%a %d",function(t){return t.getDay()&&1!=t.getDate()}],["%b %d",function(t){return 1!=t.getDate()}],["%B",function(t){return t.getMonth()}],["%Y",Xr]]),Ns={range:function(e,r,n){return t.range(Math.ceil(e/n)*n,+r,n).map(Ds)},floor:P,ceil:P};Fs.year=Ie.year,Ie.scale=function(){return Is(t.scale.linear(),Fs,Bs)};var js=Fs.map(function(t){return[t[0].utc,t[1]]}),Vs=Ps.multi([[".%L",function(t){return t.getUTCMilliseconds()}],[":%S",function(t){return t.getUTCSeconds()}],["%I:%M",function(t){return t.getUTCMinutes()}],["%I %p",function(t){return t.getUTCHours()}],["%a %d",function(t){return t.getUTCDay()&&1!=t.getUTCDate()}],["%b %d",function(t){return 1!=t.getUTCDate()}],["%B",function(t){return t.getUTCMonth()}],["%Y",Xr]]);function Us(t){return JSON.parse(t.responseText)}function qs(t){var e=a.createRange();return e.selectNode(a.body),e.createContextualFragment(t.responseText)}js.year=Ie.year.utc,Ie.scale.utc=function(){return Is(t.scale.linear(),js,Vs)},t.text=me(function(t){return t.responseText}),t.json=function(t,e){return ye(t,"application/json",Us,e)},t.html=function(t,e){return ye(t,"text/html",qs,e)},t.xml=me(function(t){return t.responseXML}),"object"==typeof e&&e.exports?e.exports=t:this.d3=t}()},{}],166:[function(t,e,r){e.exports=function(){for(var t=0;t<arguments.length;t++)if(void 0!==arguments[t])return arguments[t]}},{}],167:[function(t,e,r){"use strict";var n=t("incremental-convex-hull"),a=t("uniq");function i(t,e){this.point=t,this.index=e}function o(t,e){for(var r=t.point,n=e.point,a=r.length,i=0;i<a;++i){var o=n[i]-r[i];if(o)return o}return 0}e.exports=function(t,e){var r=t.length;if(0===r)return[];var s=t[0].length;if(s<1)return[];if(1===s)return function(t,e,r){if(1===t)return r?[[-1,0]]:[];var n=e.map(function(t,e){return[t[0],e]});n.sort(function(t,e){return t[0]-e[0]});for(var a=new Array(t-1),i=1;i<t;++i){var o=n[i-1],s=n[i];a[i-1]=[o[1],s[1]]}r&&a.push([-1,a[0][1]],[a[t-1][1],-1]);return a}(r,t,e);for(var l=new Array(r),c=1,u=0;u<r;++u){for(var h=t[u],f=new Array(s+1),p=0,d=0;d<s;++d){var g=h[d];f[d]=g,p+=g*g}f[s]=p,l[u]=new i(f,u),c=Math.max(p,c)}a(l,o),r=l.length;for(var v=new Array(r+s+1),m=new Array(r+s+1),y=(s+1)*(s+1)*c,x=new Array(s+1),u=0;u<=s;++u)x[u]=0;x[s]=y,v[0]=x.slice(),m[0]=-1;for(var u=0;u<=s;++u){var f=x.slice();f[u]=1,v[u+1]=f,m[u+1]=-1}for(var u=0;u<r;++u){var b=l[u];v[u+s+1]=b.point,m[u+s+1]=b.index}var _=n(v,!1);_=e?_.filter(function(t){for(var e=0,r=0;r<=s;++r){var n=m[t[r]];if(n<0&&++e>=2)return!1;t[r]=n}return!0}):_.filter(function(t){for(var e=0;e<=s;++e){var r=m[t[e]];if(r<0)return!1;t[e]=r}return!0});if(1&s)for(var u=0;u<_.length;++u){var b=_[u],f=b[0];b[0]=b[1],b[1]=f}return _}},{"incremental-convex-hull":414,uniq:545}],168:[function(t,e,r){"use strict";e.exports=i;var n=(i.canvas=document.createElement("canvas")).getContext("2d"),a=o([32,126]);function i(t,e){Array.isArray(t)&&(t=t.join(", "));var r,i={},s=16,l=.05;e&&(2===e.length&&"number"==typeof e[0]?r=o(e):Array.isArray(e)?r=e:(e.o?r=o(e.o):e.pairs&&(r=e.pairs),e.fontSize&&(s=e.fontSize),null!=e.threshold&&(l=e.threshold))),r||(r=a),n.font=s+"px "+t;for(var c=0;c<r.length;c++){var u=r[c],h=n.measureText(u[0]).width+n.measureText(u[1]).width,f=n.measureText(u).width;if(Math.abs(h-f)>s*l){var p=(f-h)/s;i[u]=1e3*p}}return i}function o(t){for(var e=[],r=t[0];r<=t[1];r++)for(var n=String.fromCharCode(r),a=t[0];a<t[1];a++){var i=n+String.fromCharCode(a);e.push(i)}return e}i.createPairs=o,i.ascii=a},{}],169:[function(t,e,r){(function(t){var r=!1;if("undefined"!=typeof Float64Array){var n=new Float64Array(1),a=new Uint32Array(n.buffer);if(n[0]=1,r=!0,1072693248===a[1]){e.exports=function(t){return n[0]=t,[a[0],a[1]]},e.exports.pack=function(t,e){return a[0]=t,a[1]=e,n[0]},e.exports.lo=function(t){return n[0]=t,a[0]},e.exports.hi=function(t){return n[0]=t,a[1]}}else if(1072693248===a[0]){e.exports=function(t){return n[0]=t,[a[1],a[0]]},e.exports.pack=function(t,e){return a[1]=t,a[0]=e,n[0]},e.exports.lo=function(t){return n[0]=t,a[1]},e.exports.hi=function(t){return n[0]=t,a[0]}}else r=!1}if(!r){var i=new t(8);e.exports=function(t){return i.writeDoubleLE(t,0,!0),[i.readUInt32LE(0,!0),i.readUInt32LE(4,!0)]},e.exports.pack=function(t,e){return i.writeUInt32LE(t,0,!0),i.writeUInt32LE(e,4,!0),i.readDoubleLE(0,!0)},e.exports.lo=function(t){return i.writeDoubleLE(t,0,!0),i.readUInt32LE(0,!0)},e.exports.hi=function(t){return i.writeDoubleLE(t,0,!0),i.readUInt32LE(4,!0)}}e.exports.sign=function(t){return e.exports.hi(t)>>>31},e.exports.exponent=function(t){return(e.exports.hi(t)<<1>>>21)-1023},e.exports.fraction=function(t){var r=e.exports.lo(t),n=e.exports.hi(t),a=1048575&n;return 2146435072&n&&(a+=1<<20),[r,a]},e.exports.denormalized=function(t){return!(2146435072&e.exports.hi(t))}}).call(this,t("buffer").Buffer)},{buffer:107}],170:[function(t,e,r){var n=t("abs-svg-path"),a=t("normalize-svg-path"),i={M:"moveTo",C:"bezierCurveTo"};e.exports=function(t,e){t.beginPath(),a(n(e)).forEach(function(e){var r=e[0],n=e.slice(1);t[i[r]].apply(t,n)}),t.closePath()}},{"abs-svg-path":63,"normalize-svg-path":453}],171:[function(t,e,r){e.exports=function(t){switch(t){case"int8":return Int8Array;case"int16":return Int16Array;case"int32":return Int32Array;case"uint8":return Uint8Array;case"uint16":return Uint16Array;case"uint32":return Uint32Array;case"float32":return Float32Array;case"float64":return Float64Array;case"array":return Array;case"uint8_clamped":return Uint8ClampedArray}}},{}],172:[function(t,e,r){"use strict";e.exports=function(t,e){switch("undefined"==typeof e&&(e=0),typeof t){case"number":if(t>0)return function(t,e){var r,n;for(r=new Array(t),n=0;n<t;++n)r[n]=e;return r}(0|t,e);break;case"object":if("number"==typeof t.length)return function t(e,r,n){var a=0|e[n];if(a<=0)return[];var i,o=new Array(a);if(n===e.length-1)for(i=0;i<a;++i)o[i]=r;else for(i=0;i<a;++i)o[i]=t(e,r,n+1);return o}(t,e,0)}return[]}},{}],173:[function(t,e,r){"use strict";function n(t,e,r){r=r||2;var n,s,l,c,u,p,d,v=e&&e.length,m=v?e[0]*r:t.length,y=a(t,0,m,r,!0),x=[];if(!y||y.next===y.prev)return x;if(v&&(y=function(t,e,r,n){var o,s,l,c,u,p=[];for(o=0,s=e.length;o<s;o++)l=e[o]*n,c=o<s-1?e[o+1]*n:t.length,(u=a(t,l,c,n,!1))===u.next&&(u.steiner=!0),p.push(g(u));for(p.sort(h),o=0;o<p.length;o++)f(p[o],r),r=i(r,r.next);return r}(t,e,y,r)),t.length>80*r){n=l=t[0],s=c=t[1];for(var b=r;b<m;b+=r)(u=t[b])<n&&(n=u),(p=t[b+1])<s&&(s=p),u>l&&(l=u),p>c&&(c=p);d=0!==(d=Math.max(l-n,c-s))?1/d:0}return o(y,x,r,n,s,d),x}function a(t,e,r,n,a){var i,o;if(a===E(t,e,r,n)>0)for(i=e;i<r;i+=n)o=M(i,t[i],t[i+1],o);else for(i=r-n;i>=e;i-=n)o=M(i,t[i],t[i+1],o);return o&&x(o,o.next)&&(A(o),o=o.next),o}function i(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!x(n,n.next)&&0!==y(n.prev,n,n.next))n=n.next;else{if(A(n),(n=e=n.prev)===n.next)break;r=!0}}while(r||n!==e);return e}function o(t,e,r,n,a,h,f){if(t){!f&&h&&function(t,e,r,n){var a=t;do{null===a.z&&(a.z=d(a.x,a.y,e,r,n)),a.prevZ=a.prev,a.nextZ=a.next,a=a.next}while(a!==t);a.prevZ.nextZ=null,a.prevZ=null,function(t){var e,r,n,a,i,o,s,l,c=1;do{for(r=t,t=null,i=null,o=0;r;){for(o++,n=r,s=0,e=0;e<c&&(s++,n=n.nextZ);e++);for(l=c;s>0||l>0&&n;)0!==s&&(0===l||!n||r.z<=n.z)?(a=r,r=r.nextZ,s--):(a=n,n=n.nextZ,l--),i?i.nextZ=a:t=a,a.prevZ=i,i=a;r=n}i.nextZ=null,c*=2}while(o>1)}(a)}(t,n,a,h);for(var p,g,v=t;t.prev!==t.next;)if(p=t.prev,g=t.next,h?l(t,n,a,h):s(t))e.push(p.i/r),e.push(t.i/r),e.push(g.i/r),A(t),t=g.next,v=g.next;else if((t=g)===v){f?1===f?o(t=c(i(t),e,r),e,r,n,a,h,2):2===f&&u(t,e,r,n,a,h):o(i(t),e,r,n,a,h,1);break}}}function s(t){var e=t.prev,r=t,n=t.next;if(y(e,r,n)>=0)return!1;for(var a=t.next.next;a!==t.prev;){if(v(e.x,e.y,r.x,r.y,n.x,n.y,a.x,a.y)&&y(a.prev,a,a.next)>=0)return!1;a=a.next}return!0}function l(t,e,r,n){var a=t.prev,i=t,o=t.next;if(y(a,i,o)>=0)return!1;for(var s=a.x<i.x?a.x<o.x?a.x:o.x:i.x<o.x?i.x:o.x,l=a.y<i.y?a.y<o.y?a.y:o.y:i.y<o.y?i.y:o.y,c=a.x>i.x?a.x>o.x?a.x:o.x:i.x>o.x?i.x:o.x,u=a.y>i.y?a.y>o.y?a.y:o.y:i.y>o.y?i.y:o.y,h=d(s,l,e,r,n),f=d(c,u,e,r,n),p=t.prevZ,g=t.nextZ;p&&p.z>=h&&g&&g.z<=f;){if(p!==t.prev&&p!==t.next&&v(a.x,a.y,i.x,i.y,o.x,o.y,p.x,p.y)&&y(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,g!==t.prev&&g!==t.next&&v(a.x,a.y,i.x,i.y,o.x,o.y,g.x,g.y)&&y(g.prev,g,g.next)>=0)return!1;g=g.nextZ}for(;p&&p.z>=h;){if(p!==t.prev&&p!==t.next&&v(a.x,a.y,i.x,i.y,o.x,o.y,p.x,p.y)&&y(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;g&&g.z<=f;){if(g!==t.prev&&g!==t.next&&v(a.x,a.y,i.x,i.y,o.x,o.y,g.x,g.y)&&y(g.prev,g,g.next)>=0)return!1;g=g.nextZ}return!0}function c(t,e,r){var n=t;do{var a=n.prev,o=n.next.next;!x(a,o)&&b(a,n,n.next,o)&&k(a,o)&&k(o,a)&&(e.push(a.i/r),e.push(n.i/r),e.push(o.i/r),A(n),A(n.next),n=t=o),n=n.next}while(n!==t);return i(n)}function u(t,e,r,n,a,s){var l=t;do{for(var c=l.next.next;c!==l.prev;){if(l.i!==c.i&&m(l,c)){var u=T(l,c);return l=i(l,l.next),u=i(u,u.next),o(l,e,r,n,a,s),void o(u,e,r,n,a,s)}c=c.next}l=l.next}while(l!==t)}function h(t,e){return t.x-e.x}function f(t,e){if(e=function(t,e){var r,n=e,a=t.x,i=t.y,o=-1/0;do{if(i<=n.y&&i>=n.next.y&&n.next.y!==n.y){var s=n.x+(i-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=a&&s>o){if(o=s,s===a){if(i===n.y)return n;if(i===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(a===o)return r;var l,c=r,u=r.x,h=r.y,f=1/0;n=r;do{a>=n.x&&n.x>=u&&a!==n.x&&v(i<h?a:o,i,u,h,i<h?o:a,i,n.x,n.y)&&(l=Math.abs(i-n.y)/(a-n.x),k(n,t)&&(l<f||l===f&&(n.x>r.x||n.x===r.x&&p(r,n)))&&(r=n,f=l)),n=n.next}while(n!==c);return r}(t,e)){var r=T(e,t);i(r,r.next)}}function p(t,e){return y(t.prev,t,e.prev)<0&&y(e.next,t,t.next)<0}function d(t,e,r,n,a){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*a)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*a)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function g(t){var e=t,r=t;do{(e.x<r.x||e.x===r.x&&e.y<r.y)&&(r=e),e=e.next}while(e!==t);return r}function v(t,e,r,n,a,i,o,s){return(a-o)*(e-s)-(t-o)*(i-s)>=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(i-s)-(a-o)*(n-s)>=0}function m(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&b(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}(t,e)&&(k(t,e)&&k(e,t)&&function(t,e){var r=t,n=!1,a=(t.x+e.x)/2,i=(t.y+e.y)/2;do{r.y>i!=r.next.y>i&&r.next.y!==r.y&&a<(r.next.x-r.x)*(i-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}(t,e)&&(y(t.prev,t,e.prev)||y(t,e.prev,e))||x(t,e)&&y(t.prev,t,t.next)>0&&y(e.prev,e,e.next)>0)}function y(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function x(t,e){return t.x===e.x&&t.y===e.y}function b(t,e,r,n){var a=w(y(t,e,r)),i=w(y(t,e,n)),o=w(y(r,n,t)),s=w(y(r,n,e));return a!==i&&o!==s||(!(0!==a||!_(t,r,e))||(!(0!==i||!_(t,n,e))||(!(0!==o||!_(r,t,n))||!(0!==s||!_(r,e,n)))))}function _(t,e,r){return e.x<=Math.max(t.x,r.x)&&e.x>=Math.min(t.x,r.x)&&e.y<=Math.max(t.y,r.y)&&e.y>=Math.min(t.y,r.y)}function w(t){return t>0?1:t<0?-1:0}function k(t,e){return y(t.prev,t,t.next)<0?y(t,e,t.next)>=0&&y(t,t.prev,e)>=0:y(t,e,t.prev)<0||y(t,t.next,e)<0}function T(t,e){var r=new S(t.i,t.x,t.y),n=new S(e.i,e.x,e.y),a=t.next,i=e.prev;return t.next=e,e.prev=t,r.next=a,a.prev=r,n.next=r,r.prev=n,i.next=n,n.prev=i,n}function M(t,e,r,n){var a=new S(t,e,r);return n?(a.next=n.next,a.prev=n,n.next.prev=a,n.next=a):(a.prev=a,a.next=a),a}function A(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function S(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function E(t,e,r,n){for(var a=0,i=e,o=r-n;i<r;i+=n)a+=(t[o]-t[i])*(t[i+1]+t[o+1]),o=i;return a}e.exports=n,e.exports.default=n,n.deviation=function(t,e,r,n){var a=e&&e.length,i=a?e[0]*r:t.length,o=Math.abs(E(t,0,i,r));if(a)for(var s=0,l=e.length;s<l;s++){var c=e[s]*r,u=s<l-1?e[s+1]*r:t.length;o-=Math.abs(E(t,c,u,r))}var h=0;for(s=0;s<n.length;s+=3){var f=n[s]*r,p=n[s+1]*r,d=n[s+2]*r;h+=Math.abs((t[f]-t[d])*(t[p+1]-t[f+1])-(t[f]-t[p])*(t[d+1]-t[f+1]))}return 0===o&&0===h?0:Math.abs((h-o)/o)},n.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},n=0,a=0;a<t.length;a++){for(var i=0;i<t[a].length;i++)for(var o=0;o<e;o++)r.vertices.push(t[a][i][o]);a>0&&(n+=t[a-1].length,r.holes.push(n))}return r}},{}],174:[function(t,e,r){"use strict";e.exports=function(t,e){var r=t.length;if("number"!=typeof e){e=0;for(var a=0;a<r;++a){var i=t[a];e=Math.max(e,i[0],i[1])}e=1+(0|e)}e|=0;for(var o=new Array(e),a=0;a<e;++a)o[a]=[];for(var a=0;a<r;++a){var i=t[a];o[i[0]].push(i[1]),o[i[1]].push(i[0])}for(var s=0;s<e;++s)n(o[s],function(t,e){return t-e});return o};var n=t("uniq")},{uniq:545}],175:[function(t,e,r){var n=t("strongly-connected-components");e.exports=function(t){var e,r=[],a=[],i=[],o={},s=[];function l(t){var r,n,u=!1;for(a.push(t),i[t]=!0,r=0;r<s[t].length;r++)(n=s[t][r])===e?(c(e,a),u=!0):i[n]||(u=l(n));if(u)!function t(e){i[e]=!1,o.hasOwnProperty(e)&&Object.keys(o[e]).forEach(function(r){delete o[e][r],i[r]&&t(r)})}(t);else for(r=0;r<s[t].length;r++){n=s[t][r];var h=o[n];h||(h={},o[n]=h),h[n]=!0}return a.pop(),u}function c(t,e){var n=[].concat(e).concat(t);r.push(n)}function u(e){!function(e){for(var r=0;r<t.length;r++)r<e&&(t[r]=[]),t[r]=t[r].filter(function(t){return t>=e})}(e);for(var r,a=n(t).components.filter(function(t){return t.length>1}),i=1/0,o=0;o<a.length;o++)for(var s=0;s<a[o].length;s++)a[o][s]<i&&(i=a[o][s],r=o);var l=a[r];return!!l&&{leastVertex:i,adjList:t.map(function(t,e){return-1===l.indexOf(e)?[]:t.filter(function(t){return-1!==l.indexOf(t)})})}}e=0;for(var h=t.length;e<h;){var f=u(e);if(e=f.leastVertex,s=f.adjList){for(var p=0;p<s.length;p++)for(var d=0;d<s[p].length;d++){var g=s[p][d];i[+g]=!1,o[g]={}}l(e),e+=1}else e=h}return r}},{"strongly-connected-components":528}],176:[function(t,e,r){"use strict";var n=t("../../object/valid-value");e.exports=function(){return n(this).length=0,this}},{"../../object/valid-value":208}],177:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?Array.from:t("./shim")},{"./is-implemented":178,"./shim":179}],178:[function(t,e,r){"use strict";e.exports=function(){var t,e,r=Array.from;return"function"==typeof r&&(e=r(t=["raz","dwa"]),Boolean(e&&e!==t&&"dwa"===e[1]))}},{}],179:[function(t,e,r){"use strict";var n=t("es6-symbol").iterator,a=t("../../function/is-arguments"),i=t("../../function/is-function"),o=t("../../number/to-pos-integer"),s=t("../../object/valid-callable"),l=t("../../object/valid-value"),c=t("../../object/is-value"),u=t("../../string/is-string"),h=Array.isArray,f=Function.prototype.call,p={configurable:!0,enumerable:!0,writable:!0,value:null},d=Object.defineProperty;e.exports=function(t){var e,r,g,v,m,y,x,b,_,w,k=arguments[1],T=arguments[2];if(t=Object(l(t)),c(k)&&s(k),this&&this!==Array&&i(this))e=this;else{if(!k){if(a(t))return 1!==(m=t.length)?Array.apply(null,t):((v=new Array(1))[0]=t[0],v);if(h(t)){for(v=new Array(m=t.length),r=0;r<m;++r)v[r]=t[r];return v}}v=[]}if(!h(t))if(void 0!==(_=t[n])){for(x=s(_).call(t),e&&(v=new e),b=x.next(),r=0;!b.done;)w=k?f.call(k,T,b.value,r):b.value,e?(p.value=w,d(v,r,p)):v[r]=w,b=x.next(),++r;m=r}else if(u(t)){for(m=t.length,e&&(v=new e),r=0,g=0;r<m;++r)w=t[r],r+1<m&&(y=w.charCodeAt(0))>=55296&&y<=56319&&(w+=t[++r]),w=k?f.call(k,T,w,g):w,e?(p.value=w,d(v,g,p)):v[g]=w,++g;m=g}if(void 0===m)for(m=o(t.length),e&&(v=new e(m)),r=0;r<m;++r)w=k?f.call(k,T,t[r],r):t[r],e?(p.value=w,d(v,r,p)):v[r]=w;return e&&(p.value=null,v.length=m),v}},{"../../function/is-arguments":180,"../../function/is-function":181,"../../number/to-pos-integer":187,"../../object/is-value":197,"../../object/valid-callable":206,"../../object/valid-value":208,"../../string/is-string":212,"es6-symbol":222}],180:[function(t,e,r){"use strict";var n=Object.prototype.toString,a=n.call(function(){return arguments}());e.exports=function(t){return n.call(t)===a}},{}],181:[function(t,e,r){"use strict";var n=Object.prototype.toString,a=n.call(t("./noop"));e.exports=function(t){return"function"==typeof t&&n.call(t)===a}},{"./noop":182}],182:[function(t,e,r){"use strict";e.exports=function(){}},{}],183:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?Math.sign:t("./shim")},{"./is-implemented":184,"./shim":185}],184:[function(t,e,r){"use strict";e.exports=function(){var t=Math.sign;return"function"==typeof t&&(1===t(10)&&-1===t(-20))}},{}],185:[function(t,e,r){"use strict";e.exports=function(t){return t=Number(t),isNaN(t)||0===t?t:t>0?1:-1}},{}],186:[function(t,e,r){"use strict";var n=t("../math/sign"),a=Math.abs,i=Math.floor;e.exports=function(t){return isNaN(t)?0:0!==(t=Number(t))&&isFinite(t)?n(t)*i(a(t)):t}},{"../math/sign":183}],187:[function(t,e,r){"use strict";var n=t("./to-integer"),a=Math.max;e.exports=function(t){return a(0,n(t))}},{"./to-integer":186}],188:[function(t,e,r){"use strict";var n=t("./valid-callable"),a=t("./valid-value"),i=Function.prototype.bind,o=Function.prototype.call,s=Object.keys,l=Object.prototype.propertyIsEnumerable;e.exports=function(t,e){return function(r,c){var u,h=arguments[2],f=arguments[3];return r=Object(a(r)),n(c),u=s(r),f&&u.sort("function"==typeof f?i.call(f,r):void 0),"function"!=typeof t&&(t=u[t]),o.call(t,u,function(t,n){return l.call(r,t)?o.call(c,h,r[t],t,r,n):e})}}},{"./valid-callable":206,"./valid-value":208}],189:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?Object.assign:t("./shim")},{"./is-implemented":190,"./shim":191}],190:[function(t,e,r){"use strict";e.exports=function(){var t,e=Object.assign;return"function"==typeof e&&(e(t={foo:"raz"},{bar:"dwa"},{trzy:"trzy"}),t.foo+t.bar+t.trzy==="razdwatrzy")}},{}],191:[function(t,e,r){"use strict";var n=t("../keys"),a=t("../valid-value"),i=Math.max;e.exports=function(t,e){var r,o,s,l=i(arguments.length,2);for(t=Object(a(t)),s=function(n){try{t[n]=e[n]}catch(t){r||(r=t)}},o=1;o<l;++o)e=arguments[o],n(e).forEach(s);if(void 0!==r)throw r;return t}},{"../keys":198,"../valid-value":208}],192:[function(t,e,r){"use strict";var n=t("../array/from"),a=t("./assign"),i=t("./valid-value");e.exports=function(t){var e=Object(i(t)),r=arguments[1],o=Object(arguments[2]);if(e!==t&&!r)return e;var s={};return r?n(r,function(e){(o.ensure||e in t)&&(s[e]=t[e])}):a(s,t),s}},{"../array/from":177,"./assign":189,"./valid-value":208}],193:[function(t,e,r){"use strict";var n,a,i,o,s=Object.create;t("./set-prototype-of/is-implemented")()||(n=t("./set-prototype-of/shim")),e.exports=n?1!==n.level?s:(a={},i={},o={configurable:!1,enumerable:!1,writable:!0,value:void 0},Object.getOwnPropertyNames(Object.prototype).forEach(function(t){i[t]="__proto__"!==t?o:{configurable:!0,enumerable:!1,writable:!0,value:void 0}}),Object.defineProperties(a,i),Object.defineProperty(n,"nullPolyfill",{configurable:!1,enumerable:!1,writable:!1,value:a}),function(t,e){return s(null===t?a:t,e)}):s},{"./set-prototype-of/is-implemented":204,"./set-prototype-of/shim":205}],194:[function(t,e,r){"use strict";e.exports=t("./_iterate")("forEach")},{"./_iterate":188}],195:[function(t,e,r){"use strict";e.exports=function(t){return"function"==typeof t}},{}],196:[function(t,e,r){"use strict";var n=t("./is-value"),a={function:!0,object:!0};e.exports=function(t){return n(t)&&a[typeof t]||!1}},{"./is-value":197}],197:[function(t,e,r){"use strict";var n=t("../function/noop")();e.exports=function(t){return t!==n&&null!==t}},{"../function/noop":182}],198:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?Object.keys:t("./shim")},{"./is-implemented":199,"./shim":200}],199:[function(t,e,r){"use strict";e.exports=function(){try{return Object.keys("primitive"),!0}catch(t){return!1}}},{}],200:[function(t,e,r){"use strict";var n=t("../is-value"),a=Object.keys;e.exports=function(t){return a(n(t)?Object(t):t)}},{"../is-value":197}],201:[function(t,e,r){"use strict";var n=t("./valid-callable"),a=t("./for-each"),i=Function.prototype.call;e.exports=function(t,e){var r={},o=arguments[2];return n(e),a(t,function(t,n,a,s){r[n]=i.call(e,o,t,n,a,s)}),r}},{"./for-each":194,"./valid-callable":206}],202:[function(t,e,r){"use strict";var n=t("./is-value"),a=Array.prototype.forEach,i=Object.create;e.exports=function(t){var e=i(null);return a.call(arguments,function(t){n(t)&&function(t,e){var r;for(r in t)e[r]=t[r]}(Object(t),e)}),e}},{"./is-value":197}],203:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?Object.setPrototypeOf:t("./shim")},{"./is-implemented":204,"./shim":205}],204:[function(t,e,r){"use strict";var n=Object.create,a=Object.getPrototypeOf,i={};e.exports=function(){var t=Object.setPrototypeOf,e=arguments[0]||n;return"function"==typeof t&&a(t(e(null),i))===i}},{}],205:[function(t,e,r){"use strict";var n,a,i,o,s=t("../is-object"),l=t("../valid-value"),c=Object.prototype.isPrototypeOf,u=Object.defineProperty,h={configurable:!0,enumerable:!1,writable:!0,value:void 0};n=function(t,e){if(l(t),null===e||s(e))return t;throw new TypeError("Prototype must be null or an object")},e.exports=(a=function(){var t,e=Object.create(null),r={},n=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__");if(n){try{(t=n.set).call(e,r)}catch(t){}if(Object.getPrototypeOf(e)===r)return{set:t,level:2}}return e.__proto__=r,Object.getPrototypeOf(e)===r?{level:2}:((e={}).__proto__=r,Object.getPrototypeOf(e)===r&&{level:1})}())?(2===a.level?a.set?(o=a.set,i=function(t,e){return o.call(n(t,e),e),t}):i=function(t,e){return n(t,e).__proto__=e,t}:i=function t(e,r){var a;return n(e,r),(a=c.call(t.nullPolyfill,e))&&delete t.nullPolyfill.__proto__,null===r&&(r=t.nullPolyfill),e.__proto__=r,a&&u(t.nullPolyfill,"__proto__",h),e},Object.defineProperty(i,"level",{configurable:!1,enumerable:!1,writable:!1,value:a.level})):null,t("../create")},{"../create":193,"../is-object":196,"../valid-value":208}],206:[function(t,e,r){"use strict";e.exports=function(t){if("function"!=typeof t)throw new TypeError(t+" is not a function");return t}},{}],207:[function(t,e,r){"use strict";var n=t("./is-object");e.exports=function(t){if(!n(t))throw new TypeError(t+" is not an Object");return t}},{"./is-object":196}],208:[function(t,e,r){"use strict";var n=t("./is-value");e.exports=function(t){if(!n(t))throw new TypeError("Cannot use null or undefined");return t}},{"./is-value":197}],209:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?String.prototype.contains:t("./shim")},{"./is-implemented":210,"./shim":211}],210:[function(t,e,r){"use strict";var n="razdwatrzy";e.exports=function(){return"function"==typeof n.contains&&(!0===n.contains("dwa")&&!1===n.contains("foo"))}},{}],211:[function(t,e,r){"use strict";var n=String.prototype.indexOf;e.exports=function(t){return n.call(this,t,arguments[1])>-1}},{}],212:[function(t,e,r){"use strict";var n=Object.prototype.toString,a=n.call("");e.exports=function(t){return"string"==typeof t||t&&"object"==typeof t&&(t instanceof String||n.call(t)===a)||!1}},{}],213:[function(t,e,r){"use strict";var n=Object.create(null),a=Math.random;e.exports=function(){var t;do{t=a().toString(36).slice(2)}while(n[t]);return t}},{}],214:[function(t,e,r){"use strict";var n,a=t("es5-ext/object/set-prototype-of"),i=t("es5-ext/string/#/contains"),o=t("d"),s=t("es6-symbol"),l=t("./"),c=Object.defineProperty;n=e.exports=function(t,e){if(!(this instanceof n))throw new TypeError("Constructor requires 'new'");l.call(this,t),e=e?i.call(e,"key+value")?"key+value":i.call(e,"key")?"key":"value":"value",c(this,"__kind__",o("",e))},a&&a(n,l),delete n.prototype.constructor,n.prototype=Object.create(l.prototype,{_resolve:o(function(t){return"value"===this.__kind__?this.__list__[t]:"key+value"===this.__kind__?[t,this.__list__[t]]:t})}),c(n.prototype,s.toStringTag,o("c","Array Iterator"))},{"./":217,d:153,"es5-ext/object/set-prototype-of":203,"es5-ext/string/#/contains":209,"es6-symbol":222}],215:[function(t,e,r){"use strict";var n=t("es5-ext/function/is-arguments"),a=t("es5-ext/object/valid-callable"),i=t("es5-ext/string/is-string"),o=t("./get"),s=Array.isArray,l=Function.prototype.call,c=Array.prototype.some;e.exports=function(t,e){var r,u,h,f,p,d,g,v,m=arguments[2];if(s(t)||n(t)?r="array":i(t)?r="string":t=o(t),a(e),h=function(){f=!0},"array"!==r)if("string"!==r)for(u=t.next();!u.done;){if(l.call(e,m,u.value,h),f)return;u=t.next()}else for(d=t.length,p=0;p<d&&(g=t[p],p+1<d&&(v=g.charCodeAt(0))>=55296&&v<=56319&&(g+=t[++p]),l.call(e,m,g,h),!f);++p);else c.call(t,function(t){return l.call(e,m,t,h),f})}},{"./get":216,"es5-ext/function/is-arguments":180,"es5-ext/object/valid-callable":206,"es5-ext/string/is-string":212}],216:[function(t,e,r){"use strict";var n=t("es5-ext/function/is-arguments"),a=t("es5-ext/string/is-string"),i=t("./array"),o=t("./string"),s=t("./valid-iterable"),l=t("es6-symbol").iterator;e.exports=function(t){return"function"==typeof s(t)[l]?t[l]():n(t)?new i(t):a(t)?new o(t):new i(t)}},{"./array":214,"./string":219,"./valid-iterable":220,"es5-ext/function/is-arguments":180,"es5-ext/string/is-string":212,"es6-symbol":222}],217:[function(t,e,r){"use strict";var n,a=t("es5-ext/array/#/clear"),i=t("es5-ext/object/assign"),o=t("es5-ext/object/valid-callable"),s=t("es5-ext/object/valid-value"),l=t("d"),c=t("d/auto-bind"),u=t("es6-symbol"),h=Object.defineProperty,f=Object.defineProperties;e.exports=n=function(t,e){if(!(this instanceof n))throw new TypeError("Constructor requires 'new'");f(this,{__list__:l("w",s(t)),__context__:l("w",e),__nextIndex__:l("w",0)}),e&&(o(e.on),e.on("_add",this._onAdd),e.on("_delete",this._onDelete),e.on("_clear",this._onClear))},delete n.prototype.constructor,f(n.prototype,i({_next:l(function(){var t;if(this.__list__)return this.__redo__&&void 0!==(t=this.__redo__.shift())?t:this.__nextIndex__<this.__list__.length?this.__nextIndex__++:void this._unBind()}),next:l(function(){return this._createResult(this._next())}),_createResult:l(function(t){return void 0===t?{done:!0,value:void 0}:{done:!1,value:this._resolve(t)}}),_resolve:l(function(t){return this.__list__[t]}),_unBind:l(function(){this.__list__=null,delete this.__redo__,this.__context__&&(this.__context__.off("_add",this._onAdd),this.__context__.off("_delete",this._onDelete),this.__context__.off("_clear",this._onClear),this.__context__=null)}),toString:l(function(){return"[object "+(this[u.toStringTag]||"Object")+"]"})},c({_onAdd:l(function(t){t>=this.__nextIndex__||(++this.__nextIndex__,this.__redo__?(this.__redo__.forEach(function(e,r){e>=t&&(this.__redo__[r]=++e)},this),this.__redo__.push(t)):h(this,"__redo__",l("c",[t])))}),_onDelete:l(function(t){var e;t>=this.__nextIndex__||(--this.__nextIndex__,this.__redo__&&(-1!==(e=this.__redo__.indexOf(t))&&this.__redo__.splice(e,1),this.__redo__.forEach(function(e,r){e>t&&(this.__redo__[r]=--e)},this)))}),_onClear:l(function(){this.__redo__&&a.call(this.__redo__),this.__nextIndex__=0})}))),h(n.prototype,u.iterator,l(function(){return this}))},{d:153,"d/auto-bind":152,"es5-ext/array/#/clear":176,"es5-ext/object/assign":189,"es5-ext/object/valid-callable":206,"es5-ext/object/valid-value":208,"es6-symbol":222}],218:[function(t,e,r){"use strict";var n=t("es5-ext/function/is-arguments"),a=t("es5-ext/object/is-value"),i=t("es5-ext/string/is-string"),o=t("es6-symbol").iterator,s=Array.isArray;e.exports=function(t){return!!a(t)&&(!!s(t)||(!!i(t)||(!!n(t)||"function"==typeof t[o])))}},{"es5-ext/function/is-arguments":180,"es5-ext/object/is-value":197,"es5-ext/string/is-string":212,"es6-symbol":222}],219:[function(t,e,r){"use strict";var n,a=t("es5-ext/object/set-prototype-of"),i=t("d"),o=t("es6-symbol"),s=t("./"),l=Object.defineProperty;n=e.exports=function(t){if(!(this instanceof n))throw new TypeError("Constructor requires 'new'");t=String(t),s.call(this,t),l(this,"__length__",i("",t.length))},a&&a(n,s),delete n.prototype.constructor,n.prototype=Object.create(s.prototype,{_next:i(function(){if(this.__list__)return this.__nextIndex__<this.__length__?this.__nextIndex__++:void this._unBind()}),_resolve:i(function(t){var e,r=this.__list__[t];return this.__nextIndex__===this.__length__?r:(e=r.charCodeAt(0))>=55296&&e<=56319?r+this.__list__[this.__nextIndex__++]:r})}),l(n.prototype,o.toStringTag,i("c","String Iterator"))},{"./":217,d:153,"es5-ext/object/set-prototype-of":203,"es6-symbol":222}],220:[function(t,e,r){"use strict";var n=t("./is-iterable");e.exports=function(t){if(!n(t))throw new TypeError(t+" is not iterable");return t}},{"./is-iterable":218}],221:[function(t,e,r){(function(n,a){!function(t,n){"object"==typeof r&&"undefined"!=typeof e?e.exports=n():t.ES6Promise=n()}(this,function(){"use strict";function e(t){return"function"==typeof t}var r=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},i=0,o=void 0,s=void 0,l=function(t,e){g[i]=t,g[i+1]=e,2===(i+=2)&&(s?s(v):_())};var c="undefined"!=typeof window?window:void 0,u=c||{},h=u.MutationObserver||u.WebKitMutationObserver,f="undefined"==typeof self&&"undefined"!=typeof n&&"[object process]"==={}.toString.call(n),p="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function d(){var t=setTimeout;return function(){return t(v,1)}}var g=new Array(1e3);function v(){for(var t=0;t<i;t+=2){(0,g[t])(g[t+1]),g[t]=void 0,g[t+1]=void 0}i=0}var m,y,x,b,_=void 0;function w(t,e){var r=arguments,n=this,a=new this.constructor(M);void 0===a[T]&&U(a);var i,o=n._state;return o?(i=r[o-1],l(function(){return j(o,a,i,n._result)})):R(n,a,t,e),a}function k(t){if(t&&"object"==typeof t&&t.constructor===this)return t;var e=new this(M);return O(e,t),e}f?_=function(){return n.nextTick(v)}:h?(y=0,x=new h(v),b=document.createTextNode(""),x.observe(b,{characterData:!0}),_=function(){b.data=y=++y%2}):p?((m=new MessageChannel).port1.onmessage=v,_=function(){return m.port2.postMessage(0)}):_=void 0===c&&"function"==typeof t?function(){try{var e=t("vertx");return o=e.runOnLoop||e.runOnContext,function(){o(v)}}catch(t){return d()}}():d();var T=Math.random().toString(36).substring(16);function M(){}var A=void 0,S=1,E=2,L=new B;function C(t){try{return t.then}catch(t){return L.error=t,L}}function P(t,r,n){r.constructor===t.constructor&&n===w&&r.constructor.resolve===k?function(t,e){e._state===S?I(t,e._result):e._state===E?D(t,e._result):R(e,void 0,function(e){return O(t,e)},function(e){return D(t,e)})}(t,r):n===L?D(t,L.error):void 0===n?I(t,r):e(n)?function(t,e,r){l(function(t){var n=!1,a=function(t,e,r,n){try{t.call(e,r,n)}catch(t){return t}}(r,e,function(r){n||(n=!0,e!==r?O(t,r):I(t,r))},function(e){n||(n=!0,D(t,e))},t._label);!n&&a&&(n=!0,D(t,a))},t)}(t,r,n):I(t,r)}function O(t,e){var r;t===e?D(t,new TypeError("You cannot resolve a promise with itself")):"function"==typeof(r=e)||"object"==typeof r&&null!==r?P(t,e,C(e)):I(t,e)}function z(t){t._onerror&&t._onerror(t._result),F(t)}function I(t,e){t._state===A&&(t._result=e,t._state=S,0!==t._subscribers.length&&l(F,t))}function D(t,e){t._state===A&&(t._state=E,t._result=e,l(z,t))}function R(t,e,r,n){var a=t._subscribers,i=a.length;t._onerror=null,a[i]=e,a[i+S]=r,a[i+E]=n,0===i&&t._state&&l(F,t)}function F(t){var e=t._subscribers,r=t._state;if(0!==e.length){for(var n=void 0,a=void 0,i=t._result,o=0;o<e.length;o+=3)n=e[o],a=e[o+r],n?j(r,n,a,i):a(i);t._subscribers.length=0}}function B(){this.error=null}var N=new B;function j(t,r,n,a){var i=e(n),o=void 0,s=void 0,l=void 0,c=void 0;if(i){if((o=function(t,e){try{return t(e)}catch(t){return N.error=t,N}}(n,a))===N?(c=!0,s=o.error,o=null):l=!0,r===o)return void D(r,new TypeError("A promises callback cannot return that same promise."))}else o=a,l=!0;r._state!==A||(i&&l?O(r,o):c?D(r,s):t===S?I(r,o):t===E&&D(r,o))}var V=0;function U(t){t[T]=V++,t._state=void 0,t._result=void 0,t._subscribers=[]}function q(t,e){this._instanceConstructor=t,this.promise=new t(M),this.promise[T]||U(this.promise),r(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?I(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&I(this.promise,this._result))):D(this.promise,new Error("Array Methods must be provided an Array"))}function H(t){this[T]=V++,this._result=this._state=void 0,this._subscribers=[],M!==t&&("function"!=typeof t&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof H?function(t,e){try{e(function(e){O(t,e)},function(e){D(t,e)})}catch(e){D(t,e)}}(this,t):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}function G(){var t=void 0;if("undefined"!=typeof a)t=a;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var e=t.Promise;if(e){var r=null;try{r=Object.prototype.toString.call(e.resolve())}catch(t){}if("[object Promise]"===r&&!e.cast)return}t.Promise=H}return q.prototype._enumerate=function(){for(var t=this.length,e=this._input,r=0;this._state===A&&r<t;r++)this._eachEntry(e[r],r)},q.prototype._eachEntry=function(t,e){var r=this._instanceConstructor,n=r.resolve;if(n===k){var a=C(t);if(a===w&&t._state!==A)this._settledAt(t._state,e,t._result);else if("function"!=typeof a)this._remaining--,this._result[e]=t;else if(r===H){var i=new r(M);P(i,t,a),this._willSettleAt(i,e)}else this._willSettleAt(new r(function(e){return e(t)}),e)}else this._willSettleAt(n(t),e)},q.prototype._settledAt=function(t,e,r){var n=this.promise;n._state===A&&(this._remaining--,t===E?D(n,r):this._result[e]=r),0===this._remaining&&I(n,this._result)},q.prototype._willSettleAt=function(t,e){var r=this;R(t,void 0,function(t){return r._settledAt(S,e,t)},function(t){return r._settledAt(E,e,t)})},H.all=function(t){return new q(this,t).promise},H.race=function(t){var e=this;return r(t)?new e(function(r,n){for(var a=t.length,i=0;i<a;i++)e.resolve(t[i]).then(r,n)}):new e(function(t,e){return e(new TypeError("You must pass an array to race."))})},H.resolve=k,H.reject=function(t){var e=new this(M);return D(e,t),e},H._setScheduler=function(t){s=t},H._setAsap=function(t){l=t},H._asap=l,H.prototype={constructor:H,then:w,catch:function(t){return this.then(null,t)}},G(),H.polyfill=G,H.Promise=H,H})}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:483}],222:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?Symbol:t("./polyfill")},{"./is-implemented":223,"./polyfill":225}],223:[function(t,e,r){"use strict";var n={object:!0,symbol:!0};e.exports=function(){var t;if("function"!=typeof Symbol)return!1;t=Symbol("test symbol");try{String(t)}catch(t){return!1}return!!n[typeof Symbol.iterator]&&(!!n[typeof Symbol.toPrimitive]&&!!n[typeof Symbol.toStringTag])}},{}],224:[function(t,e,r){"use strict";e.exports=function(t){return!!t&&("symbol"==typeof t||!!t.constructor&&("Symbol"===t.constructor.name&&"Symbol"===t[t.constructor.toStringTag]))}},{}],225:[function(t,e,r){"use strict";var n,a,i,o,s=t("d"),l=t("./validate-symbol"),c=Object.create,u=Object.defineProperties,h=Object.defineProperty,f=Object.prototype,p=c(null);if("function"==typeof Symbol){n=Symbol;try{String(n()),o=!0}catch(t){}}var d,g=(d=c(null),function(t){for(var e,r,n=0;d[t+(n||"")];)++n;return d[t+=n||""]=!0,h(f,e="@@"+t,s.gs(null,function(t){r||(r=!0,h(this,e,s(t)),r=!1)})),e});i=function(t){if(this instanceof i)throw new TypeError("Symbol is not a constructor");return a(t)},e.exports=a=function t(e){var r;if(this instanceof t)throw new TypeError("Symbol is not a constructor");return o?n(e):(r=c(i.prototype),e=void 0===e?"":String(e),u(r,{__description__:s("",e),__name__:s("",g(e))}))},u(a,{for:s(function(t){return p[t]?p[t]:p[t]=a(String(t))}),keyFor:s(function(t){var e;for(e in l(t),p)if(p[e]===t)return e}),hasInstance:s("",n&&n.hasInstance||a("hasInstance")),isConcatSpreadable:s("",n&&n.isConcatSpreadable||a("isConcatSpreadable")),iterator:s("",n&&n.iterator||a("iterator")),match:s("",n&&n.match||a("match")),replace:s("",n&&n.replace||a("replace")),search:s("",n&&n.search||a("search")),species:s("",n&&n.species||a("species")),split:s("",n&&n.split||a("split")),toPrimitive:s("",n&&n.toPrimitive||a("toPrimitive")),toStringTag:s("",n&&n.toStringTag||a("toStringTag")),unscopables:s("",n&&n.unscopables||a("unscopables"))}),u(i.prototype,{constructor:s(a),toString:s("",function(){return this.__name__})}),u(a.prototype,{toString:s(function(){return"Symbol ("+l(this).__description__+")"}),valueOf:s(function(){return l(this)})}),h(a.prototype,a.toPrimitive,s("",function(){var t=l(this);return"symbol"==typeof t?t:t.toString()})),h(a.prototype,a.toStringTag,s("c","Symbol")),h(i.prototype,a.toStringTag,s("c",a.prototype[a.toStringTag])),h(i.prototype,a.toPrimitive,s("c",a.prototype[a.toPrimitive]))},{"./validate-symbol":226,d:153}],226:[function(t,e,r){"use strict";var n=t("./is-symbol");e.exports=function(t){if(!n(t))throw new TypeError(t+" is not a symbol");return t}},{"./is-symbol":224}],227:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n=e||0,a=r||1;return[[t[12]+t[0],t[13]+t[1],t[14]+t[2],t[15]+t[3]],[t[12]-t[0],t[13]-t[1],t[14]-t[2],t[15]-t[3]],[t[12]+t[4],t[13]+t[5],t[14]+t[6],t[15]+t[7]],[t[12]-t[4],t[13]-t[5],t[14]-t[6],t[15]-t[7]],[n*t[12]+t[8],n*t[13]+t[9],n*t[14]+t[10],n*t[15]+t[11]],[a*t[12]-t[8],a*t[13]-t[9],a*t[14]-t[10],a*t[15]-t[11]]]}},{}],228:[function(t,e,r){"use strict";var n=t("is-string-blank");e.exports=function(t){var e=typeof t;if("string"===e){var r=t;if(0===(t=+t)&&n(r))return!1}else if("number"!==e)return!1;return t-t<1}},{"is-string-blank":424}],229:[function(t,e,r){"use strict";e.exports=function(t,e,r){switch(arguments.length){case 0:return new o([0],[0],0);case 1:if("number"==typeof t){var n=l(t);return new o(n,n,0)}return new o(t,l(t.length),0);case 2:if("number"==typeof e){var n=l(t.length);return new o(t,n,+e)}r=0;case 3:if(t.length!==e.length)throw new Error("state and velocity lengths must match");return new o(t,e,r)}};var n=t("cubic-hermite"),a=t("binary-search-bounds");function i(t,e,r){return Math.min(e,Math.max(t,r))}function o(t,e,r){this.dimension=t.length,this.bounds=[new Array(this.dimension),new Array(this.dimension)];for(var n=0;n<this.dimension;++n)this.bounds[0][n]=-1/0,this.bounds[1][n]=1/0;this._state=t.slice().reverse(),this._velocity=e.slice().reverse(),this._time=[r],this._scratch=[t.slice(),t.slice(),t.slice(),t.slice(),t.slice()]}var s=o.prototype;function l(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=0;return e}s.flush=function(t){var e=a.gt(this._time,t)-1;e<=0||(this._time.splice(0,e),this._state.splice(0,e*this.dimension),this._velocity.splice(0,e*this.dimension))},s.curve=function(t){var e=this._time,r=e.length,o=a.le(e,t),s=this._scratch[0],l=this._state,c=this._velocity,u=this.dimension,h=this.bounds;if(o<0)for(var f=u-1,p=0;p<u;++p,--f)s[p]=l[f];else if(o>=r-1){f=l.length-1;var d=t-e[r-1];for(p=0;p<u;++p,--f)s[p]=l[f]+d*c[f]}else{f=u*(o+1)-1;var g=e[o],v=e[o+1]-g||1,m=this._scratch[1],y=this._scratch[2],x=this._scratch[3],b=this._scratch[4],_=!0;for(p=0;p<u;++p,--f)m[p]=l[f],x[p]=c[f]*v,y[p]=l[f+u],b[p]=c[f+u]*v,_=_&&m[p]===y[p]&&x[p]===b[p]&&0===x[p];if(_)for(p=0;p<u;++p)s[p]=m[p];else n(m,x,y,b,(t-g)/v,s)}var w=h[0],k=h[1];for(p=0;p<u;++p)s[p]=i(w[p],k[p],s[p]);return s},s.dcurve=function(t){var e=this._time,r=e.length,i=a.le(e,t),o=this._scratch[0],s=this._state,l=this._velocity,c=this.dimension;if(i>=r-1)for(var u=s.length-1,h=(e[r-1],0);h<c;++h,--u)o[h]=l[u];else{u=c*(i+1)-1;var f=e[i],p=e[i+1]-f||1,d=this._scratch[1],g=this._scratch[2],v=this._scratch[3],m=this._scratch[4],y=!0;for(h=0;h<c;++h,--u)d[h]=s[u],v[h]=l[u]*p,g[h]=s[u+c],m[h]=l[u+c]*p,y=y&&d[h]===g[h]&&v[h]===m[h]&&0===v[h];if(y)for(h=0;h<c;++h)o[h]=0;else{n.derivative(d,v,g,m,(t-f)/p,o);for(h=0;h<c;++h)o[h]/=p}}return o},s.lastT=function(){var t=this._time;return t[t.length-1]},s.stable=function(){for(var t=this._velocity,e=t.length,r=this.dimension-1;r>=0;--r)if(t[--e])return!1;return!0},s.jump=function(t){var e=this.lastT(),r=this.dimension;if(!(t<e||arguments.length!==r+1)){var n=this._state,a=this._velocity,o=n.length-this.dimension,s=this.bounds,l=s[0],c=s[1];this._time.push(e,t);for(var u=0;u<2;++u)for(var h=0;h<r;++h)n.push(n[o++]),a.push(0);this._time.push(t);for(h=r;h>0;--h)n.push(i(l[h-1],c[h-1],arguments[h])),a.push(0)}},s.push=function(t){var e=this.lastT(),r=this.dimension;if(!(t<e||arguments.length!==r+1)){var n=this._state,a=this._velocity,o=n.length-this.dimension,s=t-e,l=this.bounds,c=l[0],u=l[1],h=s>1e-6?1/s:0;this._time.push(t);for(var f=r;f>0;--f){var p=i(c[f-1],u[f-1],arguments[f]);n.push(p),a.push((p-n[o++])*h)}}},s.set=function(t){var e=this.dimension;if(!(t<this.lastT()||arguments.length!==e+1)){var r=this._state,n=this._velocity,a=this.bounds,o=a[0],s=a[1];this._time.push(t);for(var l=e;l>0;--l)r.push(i(o[l-1],s[l-1],arguments[l])),n.push(0)}},s.move=function(t){var e=this.lastT(),r=this.dimension;if(!(t<=e||arguments.length!==r+1)){var n=this._state,a=this._velocity,o=n.length-this.dimension,s=this.bounds,l=s[0],c=s[1],u=t-e,h=u>1e-6?1/u:0;this._time.push(t);for(var f=r;f>0;--f){var p=arguments[f];n.push(i(l[f-1],c[f-1],n[o++]+p)),a.push(p*h)}}},s.idle=function(t){var e=this.lastT();if(!(t<e)){var r=this.dimension,n=this._state,a=this._velocity,o=n.length-r,s=this.bounds,l=s[0],c=s[1],u=t-e;this._time.push(t);for(var h=r-1;h>=0;--h)n.push(i(l[h],c[h],n[o]+u*a[o])),a.push(0),o+=1}}},{"binary-search-bounds":93,"cubic-hermite":147}],230:[function(t,e,r){var n=t("dtype");e.exports=function(t,e,r){if(!t)throw new TypeError("must specify data as first parameter");if(r=0|+(r||0),Array.isArray(t)&&t[0]&&"number"==typeof t[0][0]){var a,i,o,s,l=t[0].length,c=t.length*l;e&&"string"!=typeof e||(e=new(n(e||"float32"))(c+r));var u=e.length-r;if(c!==u)throw new Error("source length "+c+" ("+l+"x"+t.length+") does not match destination length "+u);for(a=0,o=r;a<t.length;a++)for(i=0;i<l;i++)e[o++]=null===t[a][i]?NaN:t[a][i]}else if(e&&"string"!=typeof e)e.set(t,r);else{var h=n(e||"float32");if(Array.isArray(t)||"array"===e)for(e=new h(t.length+r),a=0,o=r,s=e.length;o<s;o++,a++)e[o]=null===t[a]?NaN:t[a];else 0===r?e=new h(t):(e=new h(t.length+r)).set(t,r)}return e}},{dtype:171}],231:[function(t,e,r){"use strict";var n=t("css-font/stringify"),a=[32,126];e.exports=function(t){var e=(t=t||{}).shape?t.shape:t.canvas?[t.canvas.width,t.canvas.height]:[512,512],r=t.canvas||document.createElement("canvas"),i=t.font,o="number"==typeof t.step?[t.step,t.step]:t.step||[32,32],s=t.chars||a;i&&"string"!=typeof i&&(i=n(i));if(Array.isArray(s)){if(2===s.length&&"number"==typeof s[0]&&"number"==typeof s[1]){for(var l=[],c=s[0],u=0;c<=s[1];c++)l[u++]=String.fromCharCode(c);s=l}}else s=String(s).split("");e=e.slice(),r.width=e[0],r.height=e[1];var h=r.getContext("2d");h.fillStyle="#000",h.fillRect(0,0,r.width,r.height),h.font=i,h.textAlign="center",h.textBaseline="middle",h.fillStyle="#fff";for(var f=o[0]/2,p=o[1]/2,c=0;c<s.length;c++)h.fillText(s[c],f,p),(f+=o[0])>e[0]-o[0]/2&&(f=o[0]/2,p+=o[1]);return r}},{"css-font/stringify":144}],232:[function(t,e,r){"use strict";function n(t,e){e||(e={}),("string"==typeof t||Array.isArray(t))&&(e.family=t);var r=Array.isArray(e.family)?e.family.join(", "):e.family;if(!r)throw Error("`family` must be defined");var s=e.size||e.fontSize||e.em||48,l=e.weight||e.fontWeight||"",c=(t=[e.style||e.fontStyle||"",l,s].join(" ")+"px "+r,e.origin||"top");if(n.cache[r]&&s<=n.cache[r].em)return a(n.cache[r],c);var u=e.canvas||n.canvas,h=u.getContext("2d"),f={upper:void 0!==e.upper?e.upper:"H",lower:void 0!==e.lower?e.lower:"x",descent:void 0!==e.descent?e.descent:"p",ascent:void 0!==e.ascent?e.ascent:"h",tittle:void 0!==e.tittle?e.tittle:"i",overshoot:void 0!==e.overshoot?e.overshoot:"O"},p=Math.ceil(1.5*s);u.height=p,u.width=.5*p,h.font=t;var d={top:0};h.clearRect(0,0,p,p),h.textBaseline="top",h.fillStyle="black",h.fillText("H",0,0);var g=i(h.getImageData(0,0,p,p));h.clearRect(0,0,p,p),h.textBaseline="bottom",h.fillText("H",0,p);var v=i(h.getImageData(0,0,p,p));d.lineHeight=d.bottom=p-v+g,h.clearRect(0,0,p,p),h.textBaseline="alphabetic",h.fillText("H",0,p);var m=p-i(h.getImageData(0,0,p,p))-1+g;d.baseline=d.alphabetic=m,h.clearRect(0,0,p,p),h.textBaseline="middle",h.fillText("H",0,.5*p);var y=i(h.getImageData(0,0,p,p));d.median=d.middle=p-y-1+g-.5*p,h.clearRect(0,0,p,p),h.textBaseline="hanging",h.fillText("H",0,.5*p);var x=i(h.getImageData(0,0,p,p));d.hanging=p-x-1+g-.5*p,h.clearRect(0,0,p,p),h.textBaseline="ideographic",h.fillText("H",0,p);var b=i(h.getImageData(0,0,p,p));if(d.ideographic=p-b-1+g,f.upper&&(h.clearRect(0,0,p,p),h.textBaseline="top",h.fillText(f.upper,0,0),d.upper=i(h.getImageData(0,0,p,p)),d.capHeight=d.baseline-d.upper),f.lower&&(h.clearRect(0,0,p,p),h.textBaseline="top",h.fillText(f.lower,0,0),d.lower=i(h.getImageData(0,0,p,p)),d.xHeight=d.baseline-d.lower),f.tittle&&(h.clearRect(0,0,p,p),h.textBaseline="top",h.fillText(f.tittle,0,0),d.tittle=i(h.getImageData(0,0,p,p))),f.ascent&&(h.clearRect(0,0,p,p),h.textBaseline="top",h.fillText(f.ascent,0,0),d.ascent=i(h.getImageData(0,0,p,p))),f.descent&&(h.clearRect(0,0,p,p),h.textBaseline="top",h.fillText(f.descent,0,0),d.descent=o(h.getImageData(0,0,p,p))),f.overshoot){h.clearRect(0,0,p,p),h.textBaseline="top",h.fillText(f.overshoot,0,0);var _=o(h.getImageData(0,0,p,p));d.overshoot=_-m}for(var w in d)d[w]/=s;return d.em=s,n.cache[r]=d,a(d,c)}function a(t,e){var r={};for(var n in"string"==typeof e&&(e=t[e]),t)"em"!==n&&(r[n]=t[n]-e);return r}function i(t){for(var e=t.height,r=t.data,n=3;n<r.length;n+=4)if(0!==r[n])return Math.floor(.25*(n-3)/e)}function o(t){for(var e=t.height,r=t.data,n=r.length-1;n>0;n-=4)if(0!==r[n])return Math.floor(.25*(n-3)/e)}e.exports=n,n.canvas=document.createElement("canvas"),n.cache={}},{}],233:[function(t,e,r){"use strict";e.exports=function(t){return new c(t||d,null)};var n=0,a=1;function i(t,e,r,n,a,i){this._color=t,this.key=e,this.value=r,this.left=n,this.right=a,this._count=i}function o(t){return new i(t._color,t.key,t.value,t.left,t.right,t._count)}function s(t,e){return new i(t,e.key,e.value,e.left,e.right,e._count)}function l(t){t._count=1+(t.left?t.left._count:0)+(t.right?t.right._count:0)}function c(t,e){this._compare=t,this.root=e}var u=c.prototype;function h(t,e){this.tree=t,this._stack=e}Object.defineProperty(u,"keys",{get:function(){var t=[];return this.forEach(function(e,r){t.push(e)}),t}}),Object.defineProperty(u,"values",{get:function(){var t=[];return this.forEach(function(e,r){t.push(r)}),t}}),Object.defineProperty(u,"length",{get:function(){return this.root?this.root._count:0}}),u.insert=function(t,e){for(var r=this._compare,o=this.root,u=[],h=[];o;){var f=r(t,o.key);u.push(o),h.push(f),o=f<=0?o.left:o.right}u.push(new i(n,t,e,null,null,1));for(var p=u.length-2;p>=0;--p){o=u[p];h[p]<=0?u[p]=new i(o._color,o.key,o.value,u[p+1],o.right,o._count+1):u[p]=new i(o._color,o.key,o.value,o.left,u[p+1],o._count+1)}for(p=u.length-1;p>1;--p){var d=u[p-1];o=u[p];if(d._color===a||o._color===a)break;var g=u[p-2];if(g.left===d)if(d.left===o){if(!(v=g.right)||v._color!==n){if(g._color=n,g.left=d.right,d._color=a,d.right=g,u[p-2]=d,u[p-1]=o,l(g),l(d),p>=3)(m=u[p-3]).left===g?m.left=d:m.right=d;break}d._color=a,g.right=s(a,v),g._color=n,p-=1}else{if(!(v=g.right)||v._color!==n){if(d.right=o.left,g._color=n,g.left=o.right,o._color=a,o.left=d,o.right=g,u[p-2]=o,u[p-1]=d,l(g),l(d),l(o),p>=3)(m=u[p-3]).left===g?m.left=o:m.right=o;break}d._color=a,g.right=s(a,v),g._color=n,p-=1}else if(d.right===o){if(!(v=g.left)||v._color!==n){if(g._color=n,g.right=d.left,d._color=a,d.left=g,u[p-2]=d,u[p-1]=o,l(g),l(d),p>=3)(m=u[p-3]).right===g?m.right=d:m.left=d;break}d._color=a,g.left=s(a,v),g._color=n,p-=1}else{var v;if(!(v=g.left)||v._color!==n){var m;if(d.left=o.right,g._color=n,g.right=o.left,o._color=a,o.right=d,o.left=g,u[p-2]=o,u[p-1]=d,l(g),l(d),l(o),p>=3)(m=u[p-3]).right===g?m.right=o:m.left=o;break}d._color=a,g.left=s(a,v),g._color=n,p-=1}}return u[0]._color=a,new c(r,u[0])},u.forEach=function(t,e,r){if(this.root)switch(arguments.length){case 1:return function t(e,r){var n;if(r.left&&(n=t(e,r.left)))return n;return(n=e(r.key,r.value))||(r.right?t(e,r.right):void 0)}(t,this.root);case 2:return function t(e,r,n,a){if(r(e,a.key)<=0){var i;if(a.left&&(i=t(e,r,n,a.left)))return i;if(i=n(a.key,a.value))return i}if(a.right)return t(e,r,n,a.right)}(e,this._compare,t,this.root);case 3:if(this._compare(e,r)>=0)return;return function t(e,r,n,a,i){var o,s=n(e,i.key),l=n(r,i.key);if(s<=0){if(i.left&&(o=t(e,r,n,a,i.left)))return o;if(l>0&&(o=a(i.key,i.value)))return o}if(l>0&&i.right)return t(e,r,n,a,i.right)}(e,r,this._compare,t,this.root)}},Object.defineProperty(u,"begin",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.left;return new h(this,t)}}),Object.defineProperty(u,"end",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.right;return new h(this,t)}}),u.at=function(t){if(t<0)return new h(this,[]);for(var e=this.root,r=[];;){if(r.push(e),e.left){if(t<e.left._count){e=e.left;continue}t-=e.left._count}if(!t)return new h(this,r);if(t-=1,!e.right)break;if(t>=e.right._count)break;e=e.right}return new h(this,[])},u.ge=function(t){for(var e=this._compare,r=this.root,n=[],a=0;r;){var i=e(t,r.key);n.push(r),i<=0&&(a=n.length),r=i<=0?r.left:r.right}return n.length=a,new h(this,n)},u.gt=function(t){for(var e=this._compare,r=this.root,n=[],a=0;r;){var i=e(t,r.key);n.push(r),i<0&&(a=n.length),r=i<0?r.left:r.right}return n.length=a,new h(this,n)},u.lt=function(t){for(var e=this._compare,r=this.root,n=[],a=0;r;){var i=e(t,r.key);n.push(r),i>0&&(a=n.length),r=i<=0?r.left:r.right}return n.length=a,new h(this,n)},u.le=function(t){for(var e=this._compare,r=this.root,n=[],a=0;r;){var i=e(t,r.key);n.push(r),i>=0&&(a=n.length),r=i<0?r.left:r.right}return n.length=a,new h(this,n)},u.find=function(t){for(var e=this._compare,r=this.root,n=[];r;){var a=e(t,r.key);if(n.push(r),0===a)return new h(this,n);r=a<=0?r.left:r.right}return new h(this,[])},u.remove=function(t){var e=this.find(t);return e?e.remove():this},u.get=function(t){for(var e=this._compare,r=this.root;r;){var n=e(t,r.key);if(0===n)return r.value;r=n<=0?r.left:r.right}};var f=h.prototype;function p(t,e){t.key=e.key,t.value=e.value,t.left=e.left,t.right=e.right,t._color=e._color,t._count=e._count}function d(t,e){return t<e?-1:t>e?1:0}Object.defineProperty(f,"valid",{get:function(){return this._stack.length>0}}),Object.defineProperty(f,"node",{get:function(){return this._stack.length>0?this._stack[this._stack.length-1]:null},enumerable:!0}),f.clone=function(){return new h(this.tree,this._stack.slice())},f.remove=function(){var t=this._stack;if(0===t.length)return this.tree;var e=new Array(t.length),r=t[t.length-1];e[e.length-1]=new i(r._color,r.key,r.value,r.left,r.right,r._count);for(var u=t.length-2;u>=0;--u){(r=t[u]).left===t[u+1]?e[u]=new i(r._color,r.key,r.value,e[u+1],r.right,r._count):e[u]=new i(r._color,r.key,r.value,r.left,e[u+1],r._count)}if((r=e[e.length-1]).left&&r.right){var h=e.length;for(r=r.left;r.right;)e.push(r),r=r.right;var f=e[h-1];e.push(new i(r._color,f.key,f.value,r.left,r.right,r._count)),e[h-1].key=r.key,e[h-1].value=r.value;for(u=e.length-2;u>=h;--u)r=e[u],e[u]=new i(r._color,r.key,r.value,r.left,e[u+1],r._count);e[h-1].left=e[h]}if((r=e[e.length-1])._color===n){var d=e[e.length-2];d.left===r?d.left=null:d.right===r&&(d.right=null),e.pop();for(u=0;u<e.length;++u)e[u]._count--;return new c(this.tree._compare,e[0])}if(r.left||r.right){r.left?p(r,r.left):r.right&&p(r,r.right),r._color=a;for(u=0;u<e.length-1;++u)e[u]._count--;return new c(this.tree._compare,e[0])}if(1===e.length)return new c(this.tree._compare,null);for(u=0;u<e.length;++u)e[u]._count--;var g=e[e.length-2];return function(t){for(var e,r,i,c,u=t.length-1;u>=0;--u){if(e=t[u],0===u)return void(e._color=a);if((r=t[u-1]).left===e){if((i=r.right).right&&i.right._color===n)return c=(i=r.right=o(i)).right=o(i.right),r.right=i.left,i.left=r,i.right=c,i._color=r._color,e._color=a,r._color=a,c._color=a,l(r),l(i),u>1&&((h=t[u-2]).left===r?h.left=i:h.right=i),void(t[u-1]=i);if(i.left&&i.left._color===n)return c=(i=r.right=o(i)).left=o(i.left),r.right=c.left,i.left=c.right,c.left=r,c.right=i,c._color=r._color,r._color=a,i._color=a,e._color=a,l(r),l(i),l(c),u>1&&((h=t[u-2]).left===r?h.left=c:h.right=c),void(t[u-1]=c);if(i._color===a){if(r._color===n)return r._color=a,void(r.right=s(n,i));r.right=s(n,i);continue}i=o(i),r.right=i.left,i.left=r,i._color=r._color,r._color=n,l(r),l(i),u>1&&((h=t[u-2]).left===r?h.left=i:h.right=i),t[u-1]=i,t[u]=r,u+1<t.length?t[u+1]=e:t.push(e),u+=2}else{if((i=r.left).left&&i.left._color===n)return c=(i=r.left=o(i)).left=o(i.left),r.left=i.right,i.right=r,i.left=c,i._color=r._color,e._color=a,r._color=a,c._color=a,l(r),l(i),u>1&&((h=t[u-2]).right===r?h.right=i:h.left=i),void(t[u-1]=i);if(i.right&&i.right._color===n)return c=(i=r.left=o(i)).right=o(i.right),r.left=c.right,i.right=c.left,c.right=r,c.left=i,c._color=r._color,r._color=a,i._color=a,e._color=a,l(r),l(i),l(c),u>1&&((h=t[u-2]).right===r?h.right=c:h.left=c),void(t[u-1]=c);if(i._color===a){if(r._color===n)return r._color=a,void(r.left=s(n,i));r.left=s(n,i);continue}var h;i=o(i),r.left=i.right,i.right=r,i._color=r._color,r._color=n,l(r),l(i),u>1&&((h=t[u-2]).right===r?h.right=i:h.left=i),t[u-1]=i,t[u]=r,u+1<t.length?t[u+1]=e:t.push(e),u+=2}}}(e),g.left===r?g.left=null:g.right=null,new c(this.tree._compare,e[0])},Object.defineProperty(f,"key",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].key},enumerable:!0}),Object.defineProperty(f,"value",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].value},enumerable:!0}),Object.defineProperty(f,"index",{get:function(){var t=0,e=this._stack;if(0===e.length){var r=this.tree.root;return r?r._count:0}e[e.length-1].left&&(t=e[e.length-1].left._count);for(var n=e.length-2;n>=0;--n)e[n+1]===e[n].right&&(++t,e[n].left&&(t+=e[n].left._count));return t},enumerable:!0}),f.next=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.right)for(e=e.right;e;)t.push(e),e=e.left;else for(t.pop();t.length>0&&t[t.length-1].right===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(f,"hasNext",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].right)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].left===t[e])return!0;return!1}}),f.update=function(t){var e=this._stack;if(0===e.length)throw new Error("Can't update empty node!");var r=new Array(e.length),n=e[e.length-1];r[r.length-1]=new i(n._color,n.key,t,n.left,n.right,n._count);for(var a=e.length-2;a>=0;--a)(n=e[a]).left===e[a+1]?r[a]=new i(n._color,n.key,n.value,r[a+1],n.right,n._count):r[a]=new i(n._color,n.key,n.value,n.left,r[a+1],n._count);return new c(this.tree._compare,r[0])},f.prev=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.left)for(e=e.left;e;)t.push(e),e=e.right;else for(t.pop();t.length>0&&t[t.length-1].left===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(f,"hasPrev",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].left)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].right===t[e])return!0;return!1}})},{}],234:[function(t,e,r){var n=[.9999999999998099,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,1.5056327351493116e-7],a=607/128,i=[.9999999999999971,57.15623566586292,-59.59796035547549,14.136097974741746,-.4919138160976202,3399464998481189e-20,4652362892704858e-20,-9837447530487956e-20,.0001580887032249125,-.00021026444172410488,.00021743961811521265,-.0001643181065367639,8441822398385275e-20,-26190838401581408e-21,36899182659531625e-22];function o(t){if(t<0)return Number("0/0");for(var e=i[0],r=i.length-1;r>0;--r)e+=i[r]/(t+r);var n=t+a+.5;return.5*Math.log(2*Math.PI)+(t+.5)*Math.log(n)-n+Math.log(e)-Math.log(t)}e.exports=function t(e){if(e<.5)return Math.PI/(Math.sin(Math.PI*e)*t(1-e));if(e>100)return Math.exp(o(e));e-=1;for(var r=n[0],a=1;a<9;a++)r+=n[a]/(e+a);var i=e+7+.5;return Math.sqrt(2*Math.PI)*Math.pow(i,e+.5)*Math.exp(-i)*r},e.exports.log=o},{}],235:[function(t,e,r){e.exports=function(t,e){if("string"!=typeof t)throw new TypeError("must specify type string");if(e=e||{},"undefined"==typeof document&&!e.canvas)return null;var r=e.canvas||document.createElement("canvas");"number"==typeof e.width&&(r.width=e.width);"number"==typeof e.height&&(r.height=e.height);var n,a=e;try{var i=[t];0===t.indexOf("webgl")&&i.push("experimental-"+t);for(var o=0;o<i.length;o++)if(n=r.getContext(i[o],a))return n}catch(t){n=null}return n||null}},{}],236:[function(t,e,r){"use strict";e.exports=function(t,e){var r=new u(t);return r.update(e),r};var n=t("./lib/text.js"),a=t("./lib/lines.js"),i=t("./lib/background.js"),o=t("./lib/cube.js"),s=t("./lib/ticks.js"),l=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);function c(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function u(t){this.gl=t,this.pixelRatio=1,this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.autoTicks=!0,this.tickSpacing=[1,1,1],this.tickEnable=[!0,!0,!0],this.tickFont=["sans-serif","sans-serif","sans-serif"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickAlign=["auto","auto","auto"],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[10,10,10],this.lastCubeProps={cubeEdges:[0,0,0],axis:[0,0,0]},this.labels=["x","y","z"],this.labelEnable=[!0,!0,!0],this.labelFont="sans-serif",this.labelSize=[20,20,20],this.labelAngle=[0,0,0],this.labelAlign=["auto","auto","auto"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[10,10,10],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[0,0,0],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!1,!1,!1],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._firstInit=!0,this._text=null,this._lines=null,this._background=i(t)}var h=u.prototype;function f(){this.primalOffset=[0,0,0],this.primalMinor=[0,0,0],this.mirrorOffset=[0,0,0],this.mirrorMinor=[0,0,0]}h.update=function(t){function e(e,r,n){if(n in t){var a,i=t[n],o=this[n];(e?Array.isArray(i)&&Array.isArray(i[0]):Array.isArray(i))?this[n]=a=[r(i[0]),r(i[1]),r(i[2])]:this[n]=a=[r(i),r(i),r(i)];for(var s=0;s<3;++s)if(a[s]!==o[s])return!0}return!1}t=t||{};var r,i=e.bind(this,!1,Number),o=e.bind(this,!1,Boolean),l=e.bind(this,!1,String),c=e.bind(this,!0,function(t){if(Array.isArray(t)){if(3===t.length)return[+t[0],+t[1],+t[2],1];if(4===t.length)return[+t[0],+t[1],+t[2],+t[3]]}return[0,0,0,1]}),u=!1,h=!1;if("bounds"in t)for(var f=t.bounds,p=0;p<2;++p)for(var d=0;d<3;++d)f[p][d]!==this.bounds[p][d]&&(h=!0),this.bounds[p][d]=f[p][d];if("ticks"in t){r=t.ticks,u=!0,this.autoTicks=!1;for(p=0;p<3;++p)this.tickSpacing[p]=0}else i("tickSpacing")&&(this.autoTicks=!0,h=!0);if(this._firstInit&&("ticks"in t||"tickSpacing"in t||(this.autoTicks=!0),h=!0,u=!0,this._firstInit=!1),h&&this.autoTicks&&(r=s.create(this.bounds,this.tickSpacing),u=!0),u){for(p=0;p<3;++p)r[p].sort(function(t,e){return t.x-e.x});s.equal(r,this.ticks)?u=!1:this.ticks=r}o("tickEnable"),l("tickFont")&&(u=!0),i("tickSize"),i("tickAngle"),i("tickPad"),c("tickColor");var g=l("labels");l("labelFont")&&(g=!0),o("labelEnable"),i("labelSize"),i("labelPad"),c("labelColor"),o("lineEnable"),o("lineMirror"),i("lineWidth"),c("lineColor"),o("lineTickEnable"),o("lineTickMirror"),i("lineTickLength"),i("lineTickWidth"),c("lineTickColor"),o("gridEnable"),i("gridWidth"),c("gridColor"),o("zeroEnable"),c("zeroLineColor"),i("zeroLineWidth"),o("backgroundEnable"),c("backgroundColor"),this._text?this._text&&(g||u)&&this._text.update(this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont):this._text=n(this.gl,this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont),this._lines&&u&&(this._lines.dispose(),this._lines=null),this._lines||(this._lines=a(this.gl,this.bounds,this.ticks))};var p=[new f,new f,new f];function d(t,e,r,n,a){for(var i=t.primalOffset,o=t.primalMinor,s=t.mirrorOffset,l=t.mirrorMinor,c=n[e],u=0;u<3;++u)if(e!==u){var h=i,f=s,p=o,d=l;c&1<<u&&(h=s,f=i,p=l,d=o),h[u]=r[0][u],f[u]=r[1][u],a[u]>0?(p[u]=-1,d[u]=0):(p[u]=0,d[u]=1)}}var g=[0,0,0],v={model:l,view:l,projection:l,_ortho:!1};h.isOpaque=function(){return!0},h.isTransparent=function(){return!1},h.drawTransparent=function(t){};var m=[0,0,0],y=[0,0,0],x=[0,0,0];h.draw=function(t){t=t||v;for(var e=this.gl,r=t.model||l,n=t.view||l,a=t.projection||l,i=this.bounds,s=t._ortho||!1,u=o(r,n,a,i,s),h=u.cubeEdges,f=u.axis,b=n[12],_=n[13],w=n[14],k=n[15],T=(s?2:1)*this.pixelRatio*(a[3]*b+a[7]*_+a[11]*w+a[15]*k)/e.drawingBufferHeight,M=0;M<3;++M)this.lastCubeProps.cubeEdges[M]=h[M],this.lastCubeProps.axis[M]=f[M];var A=p;for(M=0;M<3;++M)d(p[M],M,this.bounds,h,f);e=this.gl;var S,E=g;for(M=0;M<3;++M)this.backgroundEnable[M]?E[M]=f[M]:E[M]=0;this._background.draw(r,n,a,i,E,this.backgroundColor),this._lines.bind(r,n,a,this);for(M=0;M<3;++M){var L=[0,0,0];f[M]>0?L[M]=i[1][M]:L[M]=i[0][M];for(var C=0;C<2;++C){var P=(M+1+C)%3,O=(M+1+(1^C))%3;this.gridEnable[P]&&this._lines.drawGrid(P,O,this.bounds,L,this.gridColor[P],this.gridWidth[P]*this.pixelRatio)}for(C=0;C<2;++C){P=(M+1+C)%3,O=(M+1+(1^C))%3;this.zeroEnable[O]&&Math.min(i[0][O],i[1][O])<=0&&Math.max(i[0][O],i[1][O])>=0&&this._lines.drawZero(P,O,this.bounds,L,this.zeroLineColor[O],this.zeroLineWidth[O]*this.pixelRatio)}}for(M=0;M<3;++M){this.lineEnable[M]&&this._lines.drawAxisLine(M,this.bounds,A[M].primalOffset,this.lineColor[M],this.lineWidth[M]*this.pixelRatio),this.lineMirror[M]&&this._lines.drawAxisLine(M,this.bounds,A[M].mirrorOffset,this.lineColor[M],this.lineWidth[M]*this.pixelRatio);var z=c(m,A[M].primalMinor),I=c(y,A[M].mirrorMinor),D=this.lineTickLength;for(C=0;C<3;++C){var R=T/r[5*C];z[C]*=D[C]*R,I[C]*=D[C]*R}this.lineTickEnable[M]&&this._lines.drawAxisTicks(M,A[M].primalOffset,z,this.lineTickColor[M],this.lineTickWidth[M]*this.pixelRatio),this.lineTickMirror[M]&&this._lines.drawAxisTicks(M,A[M].mirrorOffset,I,this.lineTickColor[M],this.lineTickWidth[M]*this.pixelRatio)}this._lines.unbind(),this._text.bind(r,n,a,this.pixelRatio);var F,B;function N(t){(B=[0,0,0])[t]=1}function j(t,e,r){var n=(t+1)%3,a=(t+2)%3,i=e[n],o=e[a],s=r[n],l=r[a];i>0&&l>0?N(n):i>0&&l<0?N(n):i<0&&l>0?N(n):i<0&&l<0?N(n):o>0&&s>0?N(a):o>0&&s<0?N(a):o<0&&s>0?N(a):o<0&&s<0&&N(a)}for(M=0;M<3;++M){var V=A[M].primalMinor,U=A[M].mirrorMinor,q=c(x,A[M].primalOffset);for(C=0;C<3;++C)this.lineTickEnable[M]&&(q[C]+=T*V[C]*Math.max(this.lineTickLength[C],0)/r[5*C]);var H=[0,0,0];if(H[M]=1,this.tickEnable[M]){-3600===this.tickAngle[M]?(this.tickAngle[M]=0,this.tickAlign[M]="auto"):this.tickAlign[M]=-1,F=1,"auto"===(S=[this.tickAlign[M],.5,F])[0]?S[0]=0:S[0]=parseInt(""+S[0]),B=[0,0,0],j(M,V,U);for(C=0;C<3;++C)q[C]+=T*V[C]*this.tickPad[C]/r[5*C];this._text.drawTicks(M,this.tickSize[M],this.tickAngle[M],q,this.tickColor[M],H,B,S)}if(this.labelEnable[M]){F=0,B=[0,0,0],this.labels[M].length>4&&(N(M),F=1),"auto"===(S=[this.labelAlign[M],.5,F])[0]?S[0]=0:S[0]=parseInt(""+S[0]);for(C=0;C<3;++C)q[C]+=T*V[C]*this.labelPad[C]/r[5*C];q[M]+=.5*(i[0][M]+i[1][M]),this._text.drawLabel(M,this.labelSize[M],this.labelAngle[M],q,this.labelColor[M],[0,0,0],B,S)}}this._text.unbind()},h.dispose=function(){this._text.dispose(),this._lines.dispose(),this._background.dispose(),this._lines=null,this._text=null,this._background=null,this.gl=null}},{"./lib/background.js":237,"./lib/cube.js":238,"./lib/lines.js":239,"./lib/text.js":241,"./lib/ticks.js":242}],237:[function(t,e,r){"use strict";e.exports=function(t){for(var e=[],r=[],s=0,l=0;l<3;++l)for(var c=(l+1)%3,u=(l+2)%3,h=[0,0,0],f=[0,0,0],p=-1;p<=1;p+=2){r.push(s,s+2,s+1,s+1,s+2,s+3),h[l]=p,f[l]=p;for(var d=-1;d<=1;d+=2){h[c]=d;for(var g=-1;g<=1;g+=2)h[u]=g,e.push(h[0],h[1],h[2],f[0],f[1],f[2]),s+=1}var v=c;c=u,u=v}var m=n(t,new Float32Array(e)),y=n(t,new Uint16Array(r),t.ELEMENT_ARRAY_BUFFER),x=a(t,[{buffer:m,type:t.FLOAT,size:3,offset:0,stride:24},{buffer:m,type:t.FLOAT,size:3,offset:12,stride:24}],y),b=i(t);return b.attributes.position.location=0,b.attributes.normal.location=1,new o(t,m,x,b)};var n=t("gl-buffer"),a=t("gl-vao"),i=t("./shaders").bg;function o(t,e,r,n){this.gl=t,this.buffer=e,this.vao=r,this.shader=n}var s=o.prototype;s.draw=function(t,e,r,n,a,i){for(var o=!1,s=0;s<3;++s)o=o||a[s];if(o){var l=this.gl;l.enable(l.POLYGON_OFFSET_FILL),l.polygonOffset(1,2),this.shader.bind(),this.shader.uniforms={model:t,view:e,projection:r,bounds:n,enable:a,colors:i},this.vao.bind(),this.vao.draw(this.gl.TRIANGLES,36),this.vao.unbind(),l.disable(l.POLYGON_OFFSET_FILL)}},s.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},{"./shaders":240,"gl-buffer":244,"gl-vao":329}],238:[function(t,e,r){"use strict";e.exports=function(t,e,r,i,p){a(s,e,t),a(s,r,s);for(var y=0,x=0;x<2;++x){u[2]=i[x][2];for(var b=0;b<2;++b){u[1]=i[b][1];for(var _=0;_<2;++_)u[0]=i[_][0],f(l[y],u,s),y+=1}}for(var w=-1,x=0;x<8;++x){for(var k=l[x][3],T=0;T<3;++T)c[x][T]=l[x][T]/k;p&&(c[x][2]*=-1),k<0&&(w<0?w=x:c[x][2]<c[w][2]&&(w=x))}if(w<0){w=0;for(var M=0;M<3;++M){for(var A=(M+2)%3,S=(M+1)%3,E=-1,L=-1,C=0;C<2;++C){var P=C<<M,O=P+(C<<A)+(1-C<<S),z=P+(1-C<<A)+(C<<S);o(c[P],c[O],c[z],h)<0||(C?E=1:L=1)}if(E<0||L<0)L>E&&(w|=1<<M);else{for(var C=0;C<2;++C){var P=C<<M,O=P+(C<<A)+(1-C<<S),z=P+(1-C<<A)+(C<<S),I=d([l[P],l[O],l[z],l[P+(1<<A)+(1<<S)]]);C?E=I:L=I}L>E&&(w|=1<<M)}}}for(var D=7^w,R=-1,x=0;x<8;++x)x!==w&&x!==D&&(R<0?R=x:c[R][1]>c[x][1]&&(R=x));for(var F=-1,x=0;x<3;++x){var B=R^1<<x;if(B!==w&&B!==D){F<0&&(F=B);var S=c[B];S[0]<c[F][0]&&(F=B)}}for(var N=-1,x=0;x<3;++x){var B=R^1<<x;if(B!==w&&B!==D&&B!==F){N<0&&(N=B);var S=c[B];S[0]>c[N][0]&&(N=B)}}var j=g;j[0]=j[1]=j[2]=0,j[n.log2(F^R)]=R&F,j[n.log2(R^N)]=R&N;var V=7^N;V===w||V===D?(V=7^F,j[n.log2(N^V)]=V&N):j[n.log2(F^V)]=V&F;for(var U=v,q=w,M=0;M<3;++M)U[M]=q&1<<M?-1:1;return m};var n=t("bit-twiddle"),a=t("gl-mat4/multiply"),i=t("split-polygon"),o=t("robust-orientation"),s=new Array(16),l=new Array(8),c=new Array(8),u=new Array(3),h=[0,0,0];function f(t,e,r){for(var n=0;n<4;++n){t[n]=r[12+n];for(var a=0;a<3;++a)t[n]+=e[a]*r[4*a+n]}}!function(){for(var t=0;t<8;++t)l[t]=[1,1,1,1],c[t]=[1,1,1]}();var p=[[0,0,1,0,0],[0,0,-1,1,0],[0,-1,0,1,0],[0,1,0,1,0],[-1,0,0,1,0],[1,0,0,1,0]];function d(t){for(var e=0;e<p.length;++e)if((t=i.positive(t,p[e])).length<3)return 0;var r=t[0],n=r[0]/r[3],a=r[1]/r[3],o=0;for(e=1;e+1<t.length;++e){var s=t[e],l=t[e+1],c=s[0]/s[3]-n,u=s[1]/s[3]-a,h=l[0]/l[3]-n,f=l[1]/l[3]-a;o+=Math.abs(c*f-u*h)}return o}var g=[1,1,1],v=[0,0,0],m={cubeEdges:g,axis:v}},{"bit-twiddle":94,"gl-mat4/multiply":270,"robust-orientation":508,"split-polygon":525}],239:[function(t,e,r){"use strict";e.exports=function(t,e,r){var o=[],s=[0,0,0],l=[0,0,0],c=[0,0,0],u=[0,0,0];o.push(0,0,1,0,1,1,0,0,-1,0,0,-1,0,1,1,0,1,-1);for(var h=0;h<3;++h){for(var f=o.length/3|0,d=0;d<r[h].length;++d){var g=+r[h][d].x;o.push(g,0,1,g,1,1,g,0,-1,g,0,-1,g,1,1,g,1,-1)}var v=o.length/3|0;s[h]=f,l[h]=v-f;for(var f=o.length/3|0,m=0;m<r[h].length;++m){var g=+r[h][m].x;o.push(g,0,1,g,1,1,g,0,-1,g,0,-1,g,1,1,g,1,-1)}var v=o.length/3|0;c[h]=f,u[h]=v-f}var y=n(t,new Float32Array(o)),x=a(t,[{buffer:y,type:t.FLOAT,size:3,stride:0,offset:0}]),b=i(t);return b.attributes.position.location=0,new p(t,y,x,b,l,s,u,c)};var n=t("gl-buffer"),a=t("gl-vao"),i=t("./shaders").line,o=[0,0,0],s=[0,0,0],l=[0,0,0],c=[0,0,0],u=[1,1];function h(t){return t[0]=t[1]=t[2]=0,t}function f(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function p(t,e,r,n,a,i,o,s){this.gl=t,this.vertBuffer=e,this.vao=r,this.shader=n,this.tickCount=a,this.tickOffset=i,this.gridCount=o,this.gridOffset=s}var d=p.prototype;d.bind=function(t,e,r){this.shader.bind(),this.shader.uniforms.model=t,this.shader.uniforms.view=e,this.shader.uniforms.projection=r,u[0]=this.gl.drawingBufferWidth,u[1]=this.gl.drawingBufferHeight,this.shader.uniforms.screenShape=u,this.vao.bind()},d.unbind=function(){this.vao.unbind()},d.drawAxisLine=function(t,e,r,n,a){var i=h(s);this.shader.uniforms.majorAxis=s,i[t]=e[1][t]-e[0][t],this.shader.uniforms.minorAxis=i;var o,u=f(c,r);u[t]+=e[0][t],this.shader.uniforms.offset=u,this.shader.uniforms.lineWidth=a,this.shader.uniforms.color=n,(o=h(l))[(t+2)%3]=1,this.shader.uniforms.screenAxis=o,this.vao.draw(this.gl.TRIANGLES,6),(o=h(l))[(t+1)%3]=1,this.shader.uniforms.screenAxis=o,this.vao.draw(this.gl.TRIANGLES,6)},d.drawAxisTicks=function(t,e,r,n,a){if(this.tickCount[t]){var i=h(o);i[t]=1,this.shader.uniforms.majorAxis=i,this.shader.uniforms.offset=e,this.shader.uniforms.minorAxis=r,this.shader.uniforms.color=n,this.shader.uniforms.lineWidth=a;var s=h(l);s[t]=1,this.shader.uniforms.screenAxis=s,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t])}},d.drawGrid=function(t,e,r,n,a,i){if(this.gridCount[t]){var u=h(s);u[e]=r[1][e]-r[0][e],this.shader.uniforms.minorAxis=u;var p=f(c,n);p[e]+=r[0][e],this.shader.uniforms.offset=p;var d=h(o);d[t]=1,this.shader.uniforms.majorAxis=d;var g=h(l);g[t]=1,this.shader.uniforms.screenAxis=g,this.shader.uniforms.lineWidth=i,this.shader.uniforms.color=a,this.vao.draw(this.gl.TRIANGLES,this.gridCount[t],this.gridOffset[t])}},d.drawZero=function(t,e,r,n,a,i){var o=h(s);this.shader.uniforms.majorAxis=o,o[t]=r[1][t]-r[0][t],this.shader.uniforms.minorAxis=o;var u=f(c,n);u[t]+=r[0][t],this.shader.uniforms.offset=u;var p=h(l);p[e]=1,this.shader.uniforms.screenAxis=p,this.shader.uniforms.lineWidth=i,this.shader.uniforms.color=a,this.vao.draw(this.gl.TRIANGLES,6)},d.dispose=function(){this.vao.dispose(),this.vertBuffer.dispose(),this.shader.dispose()}},{"./shaders":240,"gl-buffer":244,"gl-vao":329}],240:[function(t,e,r){"use strict";var n=t("glslify"),a=t("gl-shader"),i=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\n\nuniform mat4 model, view, projection;\nuniform vec3 offset, majorAxis, minorAxis, screenAxis;\nuniform float lineWidth;\nuniform vec2 screenShape;\n\nvec3 project(vec3 p) {\n vec4 pp = projection * view * model * vec4(p, 1.0);\n return pp.xyz / max(pp.w, 0.0001);\n}\n\nvoid main() {\n vec3 major = position.x * majorAxis;\n vec3 minor = position.y * minorAxis;\n\n vec3 vPosition = major + minor + offset;\n vec3 pPosition = project(vPosition);\n vec3 offset = project(vPosition + screenAxis * position.z);\n\n vec2 screen = normalize((offset - pPosition).xy * screenShape) / screenShape;\n\n gl_Position = vec4(pPosition + vec3(0.5 * screen * lineWidth, 0), 1.0);\n}\n"]),o=n(["precision highp float;\n#define GLSLIFY 1\n\nuniform vec4 color;\nvoid main() {\n gl_FragColor = color;\n}"]);r.line=function(t){return a(t,i,o,null,[{name:"position",type:"vec3"}])};var s=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\n\nuniform mat4 model, view, projection;\nuniform vec3 offset, axis, alignDir, alignOpt;\nuniform float scale, angle, pixelScale;\nuniform vec2 resolution;\n\nvec3 project(vec3 p) {\n vec4 pp = projection * view * model * vec4(p, 1.0);\n return pp.xyz / max(pp.w, 0.0001);\n}\n\nfloat computeViewAngle(vec3 a, vec3 b) {\n vec3 A = project(a);\n vec3 B = project(b);\n\n return atan(\n (B.y - A.y) * resolution.y,\n (B.x - A.x) * resolution.x\n );\n}\n\nconst float PI = 3.141592;\nconst float TWO_PI = 2.0 * PI;\nconst float HALF_PI = 0.5 * PI;\nconst float ONE_AND_HALF_PI = 1.5 * PI;\n\nint option = int(floor(alignOpt.x + 0.001));\nfloat hv_ratio = alignOpt.y;\nbool enableAlign = (alignOpt.z != 0.0);\n\nfloat mod_angle(float a) {\n return mod(a, PI);\n}\n\nfloat positive_angle(float a) {\n return mod_angle((a < 0.0) ?\n a + TWO_PI :\n a\n );\n}\n\nfloat look_upwards(float a) {\n float b = positive_angle(a);\n return ((b > HALF_PI) && (b <= ONE_AND_HALF_PI)) ?\n b - PI :\n b;\n}\n\nfloat look_horizontal_or_vertical(float a, float ratio) {\n // ratio controls the ratio between being horizontal to (vertical + horizontal)\n // if ratio is set to 0.5 then it is 50%, 50%.\n // when using a higher ratio e.g. 0.75 the result would\n // likely be more horizontal than vertical.\n\n float b = positive_angle(a);\n\n return\n (b < ( ratio) * HALF_PI) ? 0.0 :\n (b < (2.0 - ratio) * HALF_PI) ? -HALF_PI :\n (b < (2.0 + ratio) * HALF_PI) ? 0.0 :\n (b < (4.0 - ratio) * HALF_PI) ? HALF_PI :\n 0.0;\n}\n\nfloat roundTo(float a, float b) {\n return float(b * floor((a + 0.5 * b) / b));\n}\n\nfloat look_round_n_directions(float a, int n) {\n float b = positive_angle(a);\n float div = TWO_PI / float(n);\n float c = roundTo(b, div);\n return look_upwards(c);\n}\n\nfloat applyAlignOption(float rawAngle, float delta) {\n return\n (option > 2) ? look_round_n_directions(rawAngle + delta, option) : // option 3-n: round to n directions\n (option == 2) ? look_horizontal_or_vertical(rawAngle + delta, hv_ratio) : // horizontal or vertical\n (option == 1) ? rawAngle + delta : // use free angle, and flip to align with one direction of the axis\n (option == 0) ? look_upwards(rawAngle) : // use free angle, and stay upwards\n (option ==-1) ? 0.0 : // useful for backward compatibility, all texts remains horizontal\n rawAngle; // otherwise return back raw input angle\n}\n\nbool isAxisTitle = (axis.x == 0.0) &&\n (axis.y == 0.0) &&\n (axis.z == 0.0);\n\nvoid main() {\n //Compute world offset\n float axisDistance = position.z;\n vec3 dataPosition = axisDistance * axis + offset;\n\n float beta = angle; // i.e. user defined attributes for each tick\n\n float axisAngle;\n float clipAngle;\n float flip;\n\n if (enableAlign) {\n axisAngle = (isAxisTitle) ? HALF_PI :\n computeViewAngle(dataPosition, dataPosition + axis);\n clipAngle = computeViewAngle(dataPosition, dataPosition + alignDir);\n\n axisAngle += (sin(axisAngle) < 0.0) ? PI : 0.0;\n clipAngle += (sin(clipAngle) < 0.0) ? PI : 0.0;\n\n flip = (dot(vec2(cos(axisAngle), sin(axisAngle)),\n vec2(sin(clipAngle),-cos(clipAngle))) > 0.0) ? 1.0 : 0.0;\n\n beta += applyAlignOption(clipAngle, flip * PI);\n }\n\n //Compute plane offset\n vec2 planeCoord = position.xy * pixelScale;\n\n mat2 planeXform = scale * mat2(\n cos(beta), sin(beta),\n -sin(beta), cos(beta)\n );\n\n vec2 viewOffset = 2.0 * planeXform * planeCoord / resolution;\n\n //Compute clip position\n vec3 clipPosition = project(dataPosition);\n\n //Apply text offset in clip coordinates\n clipPosition += vec3(viewOffset, 0.0);\n\n //Done\n gl_Position = vec4(clipPosition, 1.0);\n}"]),l=n(["precision highp float;\n#define GLSLIFY 1\n\nuniform vec4 color;\nvoid main() {\n gl_FragColor = color;\n}"]);r.text=function(t){return a(t,s,l,null,[{name:"position",type:"vec3"}])};var c=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec3 normal;\n\nuniform mat4 model, view, projection;\nuniform vec3 enable;\nuniform vec3 bounds[2];\n\nvarying vec3 colorChannel;\n\nvoid main() {\n\n vec3 signAxis = sign(bounds[1] - bounds[0]);\n\n vec3 realNormal = signAxis * normal;\n\n if(dot(realNormal, enable) > 0.0) {\n vec3 minRange = min(bounds[0], bounds[1]);\n vec3 maxRange = max(bounds[0], bounds[1]);\n vec3 nPosition = mix(minRange, maxRange, 0.5 * (position + 1.0));\n gl_Position = projection * view * model * vec4(nPosition, 1.0);\n } else {\n gl_Position = vec4(0,0,0,0);\n }\n\n colorChannel = abs(realNormal);\n}"]),u=n(["precision highp float;\n#define GLSLIFY 1\n\nuniform vec4 colors[3];\n\nvarying vec3 colorChannel;\n\nvoid main() {\n gl_FragColor = colorChannel.x * colors[0] +\n colorChannel.y * colors[1] +\n colorChannel.z * colors[2];\n}"]);r.bg=function(t){return a(t,c,u,null,[{name:"position",type:"vec3"},{name:"normal",type:"vec3"}])}},{"gl-shader":304,glslify:410}],241:[function(t,e,r){(function(r){"use strict";e.exports=function(t,e,r,i,s,l){var u=n(t),h=a(t,[{buffer:u,size:3}]),f=o(t);f.attributes.position.location=0;var p=new c(t,f,u,h);return p.update(e,r,i,s,l),p};var n=t("gl-buffer"),a=t("gl-vao"),i=t("vectorize-text"),o=t("./shaders").text,s=window||r.global||{},l=s.__TEXT_CACHE||{};s.__TEXT_CACHE={};function c(t,e,r,n){this.gl=t,this.shader=e,this.buffer=r,this.vao=n,this.tickOffset=this.tickCount=this.labelOffset=this.labelCount=null}var u=c.prototype,h=[0,0];u.bind=function(t,e,r,n){this.vao.bind(),this.shader.bind();var a=this.shader.uniforms;a.model=t,a.view=e,a.projection=r,a.pixelScale=n,h[0]=this.gl.drawingBufferWidth,h[1]=this.gl.drawingBufferHeight,this.shader.uniforms.resolution=h},u.unbind=function(){this.vao.unbind()},u.update=function(t,e,r,n,a){var o=[];function s(t,e,r,n,a,s){var c=l[r];c||(c=l[r]={});var u=c[e];u||(u=c[e]=function(t,e){try{return i(t,e)}catch(e){return console.warn('error vectorizing text:"'+t+'" error:',e),{cells:[],positions:[]}}}(e,{triangles:!0,font:r,textAlign:"center",textBaseline:"middle",lineSpacing:a,styletags:s}));for(var h=(n||12)/12,f=u.positions,p=u.cells,d=0,g=p.length;d<g;++d)for(var v=p[d],m=2;m>=0;--m){var y=f[v[m]];o.push(h*y[0],-h*y[1],t)}}for(var c=[0,0,0],u=[0,0,0],h=[0,0,0],f=[0,0,0],p={breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},d=0;d<3;++d){h[d]=o.length/3|0,s(.5*(t[0][d]+t[1][d]),e[d],r[d],12,1.25,p),f[d]=(o.length/3|0)-h[d],c[d]=o.length/3|0;for(var g=0;g<n[d].length;++g)n[d][g].text&&s(n[d][g].x,n[d][g].text,n[d][g].font||a,n[d][g].fontSize||12,1.25,p);u[d]=(o.length/3|0)-c[d]}this.buffer.update(o),this.tickOffset=c,this.tickCount=u,this.labelOffset=h,this.labelCount=f},u.drawTicks=function(t,e,r,n,a,i,o,s){this.tickCount[t]&&(this.shader.uniforms.axis=i,this.shader.uniforms.color=a,this.shader.uniforms.angle=r,this.shader.uniforms.scale=e,this.shader.uniforms.offset=n,this.shader.uniforms.alignDir=o,this.shader.uniforms.alignOpt=s,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t]))},u.drawLabel=function(t,e,r,n,a,i,o,s){this.labelCount[t]&&(this.shader.uniforms.axis=i,this.shader.uniforms.color=a,this.shader.uniforms.angle=r,this.shader.uniforms.scale=e,this.shader.uniforms.offset=n,this.shader.uniforms.alignDir=o,this.shader.uniforms.alignOpt=s,this.vao.draw(this.gl.TRIANGLES,this.labelCount[t],this.labelOffset[t]))},u.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()}}).call(this,t("_process"))},{"./shaders":240,_process:483,"gl-buffer":244,"gl-vao":329,"vectorize-text":548}],242:[function(t,e,r){"use strict";function n(t,e){var r=t+"",n=r.indexOf("."),a=0;n>=0&&(a=r.length-n-1);var i=Math.pow(10,a),o=Math.round(t*e*i),s=o+"";if(s.indexOf("e")>=0)return s;var l=o/i,c=o%i;o<0?(l=0|-Math.ceil(l),c=0|-c):(l=0|Math.floor(l),c|=0);var u=""+l;if(o<0&&(u="-"+u),a){for(var h=""+c;h.length<a;)h="0"+h;return u+"."+h}return u}r.create=function(t,e){for(var r=[],a=0;a<3;++a){for(var i=[],o=(t[0][a],t[1][a],0);o*e[a]<=t[1][a];++o)i.push({x:o*e[a],text:n(e[a],o)});for(var o=-1;o*e[a]>=t[0][a];--o)i.push({x:o*e[a],text:n(e[a],o)});r.push(i)}return r},r.equal=function(t,e){for(var r=0;r<3;++r){if(t[r].length!==e[r].length)return!1;for(var n=0;n<t[r].length;++n){var a=t[r][n],i=e[r][n];if(a.x!==i.x||a.text!==i.text||a.font!==i.font||a.fontColor!==i.fontColor||a.fontSize!==i.fontSize||a.dx!==i.dx||a.dy!==i.dy)return!1}}return!0}},{}],243:[function(t,e,r){"use strict";e.exports=function(t,e,r,l,h){var f=e.model||c,p=e.view||c,m=e.projection||c,y=e._ortho||!1,x=t.bounds,b=(h=h||i(f,p,m,x,y)).axis;o(u,p,f),o(u,m,u);for(var _=g,w=0;w<3;++w)_[w].lo=1/0,_[w].hi=-1/0,_[w].pixelsPerDataUnit=1/0;var k=n(s(u,u));s(u,u);for(var T=0;T<3;++T){var M=(T+1)%3,A=(T+2)%3,S=v;t:for(var w=0;w<2;++w){var E=[];if(b[T]<0!=!!w){S[T]=x[w][T];for(var L=0;L<2;++L){S[M]=x[L^w][M];for(var C=0;C<2;++C)S[A]=x[C^L^w][A],E.push(S.slice())}for(var P=y?5:4,L=P;L===P;++L){if(0===E.length)continue t;E=a.positive(E,k[L])}for(var L=0;L<E.length;++L)for(var A=E[L],O=d(v,u,A,r,l),C=0;C<3;++C)_[C].lo=Math.min(_[C].lo,A[C]),_[C].hi=Math.max(_[C].hi,A[C]),C!==T&&(_[C].pixelsPerDataUnit=Math.min(_[C].pixelsPerDataUnit,Math.abs(O[C])))}}}return _};var n=t("extract-frustum-planes"),a=t("split-polygon"),i=t("./lib/cube.js"),o=t("gl-mat4/multiply"),s=t("gl-mat4/transpose"),l=t("gl-vec4/transformMat4"),c=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),u=new Float32Array(16);function h(t,e,r){this.lo=t,this.hi=e,this.pixelsPerDataUnit=r}var f=[0,0,0,1],p=[0,0,0,1];function d(t,e,r,n,a){for(var i=0;i<3;++i){for(var o=f,s=p,c=0;c<3;++c)s[c]=o[c]=r[c];s[3]=o[3]=1,s[i]+=1,l(s,s,e),s[3]<0&&(t[i]=1/0),o[i]-=1,l(o,o,e),o[3]<0&&(t[i]=1/0);var u=(o[0]/o[3]-s[0]/s[3])*n,h=(o[1]/o[3]-s[1]/s[3])*a;t[i]=.25*Math.sqrt(u*u+h*h)}return t}var g=[new h(1/0,-1/0,1/0),new h(1/0,-1/0,1/0),new h(1/0,-1/0,1/0)],v=[0,0,0]},{"./lib/cube.js":238,"extract-frustum-planes":227,"gl-mat4/multiply":270,"gl-mat4/transpose":279,"gl-vec4/transformMat4":400,"split-polygon":525}],244:[function(t,e,r){"use strict";var n=t("typedarray-pool"),a=t("ndarray-ops"),i=t("ndarray"),o=["uint8","uint8_clamped","uint16","uint32","int8","int16","int32","float32"];function s(t,e,r,n,a){this.gl=t,this.type=e,this.handle=r,this.length=n,this.usage=a}var l=s.prototype;function c(t,e,r,n,a,i){var o=a.length*a.BYTES_PER_ELEMENT;if(i<0)return t.bufferData(e,a,n),o;if(o+i>r)throw new Error("gl-buffer: If resizing buffer, must not specify offset");return t.bufferSubData(e,i,a),r}function u(t,e){for(var r=n.malloc(t.length,e),a=t.length,i=0;i<a;++i)r[i]=t[i];return r}l.bind=function(){this.gl.bindBuffer(this.type,this.handle)},l.unbind=function(){this.gl.bindBuffer(this.type,null)},l.dispose=function(){this.gl.deleteBuffer(this.handle)},l.update=function(t,e){if("number"!=typeof e&&(e=-1),this.bind(),"object"==typeof t&&"undefined"!=typeof t.shape){var r=t.dtype;if(o.indexOf(r)<0&&(r="float32"),this.type===this.gl.ELEMENT_ARRAY_BUFFER)r=gl.getExtension("OES_element_index_uint")&&"uint16"!==r?"uint32":"uint16";if(r===t.dtype&&function(t,e){for(var r=1,n=e.length-1;n>=0;--n){if(e[n]!==r)return!1;r*=t[n]}return!0}(t.shape,t.stride))0===t.offset&&t.data.length===t.shape[0]?this.length=c(this.gl,this.type,this.length,this.usage,t.data,e):this.length=c(this.gl,this.type,this.length,this.usage,t.data.subarray(t.offset,t.shape[0]),e);else{var s=n.malloc(t.size,r),l=i(s,t.shape);a.assign(l,t),this.length=c(this.gl,this.type,this.length,this.usage,e<0?s:s.subarray(0,t.size),e),n.free(s)}}else if(Array.isArray(t)){var h;h=this.type===this.gl.ELEMENT_ARRAY_BUFFER?u(t,"uint16"):u(t,"float32"),this.length=c(this.gl,this.type,this.length,this.usage,e<0?h:h.subarray(0,t.length),e),n.free(h)}else if("object"==typeof t&&"number"==typeof t.length)this.length=c(this.gl,this.type,this.length,this.usage,t,e);else{if("number"!=typeof t&&void 0!==t)throw new Error("gl-buffer: Invalid data type");if(e>=0)throw new Error("gl-buffer: Cannot specify offset when resizing buffer");(t|=0)<=0&&(t=1),this.gl.bufferData(this.type,0|t,this.usage),this.length=t}},e.exports=function(t,e,r,n){if(r=r||t.ARRAY_BUFFER,n=n||t.DYNAMIC_DRAW,r!==t.ARRAY_BUFFER&&r!==t.ELEMENT_ARRAY_BUFFER)throw new Error("gl-buffer: Invalid type for webgl buffer, must be either gl.ARRAY_BUFFER or gl.ELEMENT_ARRAY_BUFFER");if(n!==t.DYNAMIC_DRAW&&n!==t.STATIC_DRAW&&n!==t.STREAM_DRAW)throw new Error("gl-buffer: Invalid usage for buffer, must be either gl.DYNAMIC_DRAW, gl.STATIC_DRAW or gl.STREAM_DRAW");var a=t.createBuffer(),i=new s(t,r,a,0,n);return i.update(e),i}},{ndarray:451,"ndarray-ops":445,"typedarray-pool":543}],245:[function(t,e,r){"use strict";var n=t("gl-vec3");e.exports=function(t,e){var r=t.positions,a=t.vectors,i={positions:[],vertexIntensity:[],vertexIntensityBounds:t.vertexIntensityBounds,vectors:[],cells:[],coneOffset:t.coneOffset,colormap:t.colormap};if(0===t.positions.length)return e&&(e[0]=[0,0,0],e[1]=[0,0,0]),i;for(var o=0,s=1/0,l=-1/0,c=1/0,u=-1/0,h=1/0,f=-1/0,p=null,d=null,g=[],v=1/0,m=!1,y=0;y<r.length;y++){var x=r[y];s=Math.min(x[0],s),l=Math.max(x[0],l),c=Math.min(x[1],c),u=Math.max(x[1],u),h=Math.min(x[2],h),f=Math.max(x[2],f);var b=a[y];if(n.length(b)>o&&(o=n.length(b)),y){var _=2*n.distance(p,x)/(n.length(d)+n.length(b));_?(v=Math.min(v,_),m=!1):m=!0}m||(p=x,d=b),g.push(b)}var w=[s,c,h],k=[l,u,f];e&&(e[0]=w,e[1]=k),0===o&&(o=1);var T=1/o;isFinite(v)||(v=1),i.vectorScale=v;var M=t.coneSize||.5;t.absoluteConeSize&&(M=t.absoluteConeSize*T),i.coneScale=M;y=0;for(var A=0;y<r.length;y++)for(var S=(x=r[y])[0],E=x[1],L=x[2],C=g[y],P=n.length(C)*T,O=0;O<8;O++){i.positions.push([S,E,L,A++]),i.positions.push([S,E,L,A++]),i.positions.push([S,E,L,A++]),i.positions.push([S,E,L,A++]),i.positions.push([S,E,L,A++]),i.positions.push([S,E,L,A++]),i.vectors.push(C),i.vectors.push(C),i.vectors.push(C),i.vectors.push(C),i.vectors.push(C),i.vectors.push(C),i.vertexIntensity.push(P,P,P),i.vertexIntensity.push(P,P,P);var z=i.positions.length;i.cells.push([z-6,z-5,z-4],[z-3,z-2,z-1])}return i};var a=t("./lib/shaders");e.exports.createMesh=t("./create_mesh"),e.exports.createConeMesh=function(t,r){return e.exports.createMesh(t,r,{shaders:a,traceType:"cone"})}},{"./create_mesh":246,"./lib/shaders":247,"gl-vec3":348}],246:[function(t,e,r){"use strict";var n=t("gl-shader"),a=t("gl-buffer"),i=t("gl-vao"),o=t("gl-texture2d"),s=t("gl-mat4/multiply"),l=t("gl-mat4/invert"),c=t("ndarray"),u=t("colormap"),h=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function f(t,e,r,n,a,i,o,s,l,c,u){this.gl=t,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=r,this.pickShader=n,this.trianglePositions=a,this.triangleVectors=i,this.triangleColors=s,this.triangleUVs=l,this.triangleIds=o,this.triangleVAO=c,this.triangleCount=0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.traceType=u,this.tubeScale=1,this.coneScale=2,this.vectorScale=1,this.coneOffset=.25,this._model=h,this._view=h,this._projection=h,this._resolution=[1,1]}var p=f.prototype;p.isOpaque=function(){return this.opacity>=1},p.isTransparent=function(){return this.opacity<1},p.pickSlots=1,p.setPickBase=function(t){this.pickId=t},p.update=function(t){t=t||{};var e=this.gl;this.dirty=!0,"lightPosition"in t&&(this.lightPosition=t.lightPosition),"opacity"in t&&(this.opacity=t.opacity),"ambient"in t&&(this.ambientLight=t.ambient),"diffuse"in t&&(this.diffuseLight=t.diffuse),"specular"in t&&(this.specularLight=t.specular),"roughness"in t&&(this.roughness=t.roughness),"fresnel"in t&&(this.fresnel=t.fresnel),void 0!==t.tubeScale&&(this.tubeScale=t.tubeScale),void 0!==t.vectorScale&&(this.vectorScale=t.vectorScale),void 0!==t.coneScale&&(this.coneScale=t.coneScale),void 0!==t.coneOffset&&(this.coneOffset=t.coneOffset),t.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=e.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=e.LINEAR,this.texture.setPixels(function(t){for(var e=u({colormap:t,nshades:256,format:"rgba"}),r=new Uint8Array(1024),n=0;n<256;++n){for(var a=e[n],i=0;i<3;++i)r[4*n+i]=a[i];r[4*n+3]=255*a[3]}return c(r,[256,256,4],[4,0,1])}(t.colormap)),this.texture.generateMipmap());var r=t.cells,n=t.positions,a=t.vectors;if(n&&r&&a){var i=[],o=[],s=[],l=[],h=[];this.cells=r,this.positions=n,this.vectors=a;var f=t.meshColor||[1,1,1,1],p=t.vertexIntensity,d=1/0,g=-1/0;if(p)if(t.vertexIntensityBounds)d=+t.vertexIntensityBounds[0],g=+t.vertexIntensityBounds[1];else for(var v=0;v<p.length;++v){var m=p[v];d=Math.min(d,m),g=Math.max(g,m)}else for(v=0;v<n.length;++v){m=n[v][2];d=Math.min(d,m),g=Math.max(g,m)}this.intensity=p||function(t){for(var e=t.length,r=new Array(e),n=0;n<e;++n)r[n]=t[n][2];return r}(n),this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(v=0;v<n.length;++v)for(var y=n[v],x=0;x<3;++x)!isNaN(y[x])&&isFinite(y[x])&&(this.bounds[0][x]=Math.min(this.bounds[0][x],y[x]),this.bounds[1][x]=Math.max(this.bounds[1][x],y[x]));var b=0;t:for(v=0;v<r.length;++v){var _=r[v];switch(_.length){case 3:for(x=0;x<3;++x){y=n[k=_[x]];for(var w=0;w<3;++w)if(isNaN(y[w])||!isFinite(y[w]))continue t}for(x=0;x<3;++x){var k;y=n[k=_[2-x]];i.push(y[0],y[1],y[2],y[3]);var T=a[k];o.push(T[0],T[1],T[2],T[3]||0);var M,A=f;3===A.length?s.push(A[0],A[1],A[2],1):s.push(A[0],A[1],A[2],A[3]),M=p?[(p[k]-d)/(g-d),0]:[(y[2]-d)/(g-d),0],l.push(M[0],M[1]),h.push(v)}b+=1}}this.triangleCount=b,this.trianglePositions.update(i),this.triangleVectors.update(o),this.triangleColors.update(s),this.triangleUVs.update(l),this.triangleIds.update(new Uint32Array(h))}},p.drawTransparent=p.draw=function(t){t=t||{};for(var e=this.gl,r=t.model||h,n=t.view||h,a=t.projection||h,i=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)i[0][o]=Math.max(i[0][o],this.clipBounds[0][o]),i[1][o]=Math.min(i[1][o],this.clipBounds[1][o]);var c={model:r,view:n,projection:a,inverseModel:h.slice(),clipBounds:i,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],opacity:this.opacity,tubeScale:this.tubeScale,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,texture:0};c.inverseModel=l(c.inverseModel,c.model),e.disable(e.CULL_FACE),this.texture.bind(0);var u=new Array(16);s(u,c.view,c.model),s(u,c.projection,u),l(u,u);for(o=0;o<3;++o)c.eyePosition[o]=u[12+o]/u[15];var f=u[15];for(o=0;o<3;++o)f+=this.lightPosition[o]*u[4*o+3];for(o=0;o<3;++o){for(var p=u[12+o],d=0;d<3;++d)p+=u[4*d+o]*this.lightPosition[d];c.lightPosition[o]=p/f}if(this.triangleCount>0){var g=this.triShader;g.bind(),g.uniforms=c,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()}},p.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||h,n=t.view||h,a=t.projection||h,i=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)i[0][o]=Math.max(i[0][o],this.clipBounds[0][o]),i[1][o]=Math.min(i[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(a),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s={model:r,view:n,projection:a,clipBounds:i,tubeScale:this.tubeScale,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,pickId:this.pickId/255},l=this.pickShader;l.bind(),l.uniforms=s,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind())},p.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions[r[1]].slice(0,3),a={position:n,dataCoordinate:n,index:Math.floor(r[1]/48)};return"cone"===this.traceType?a.index=Math.floor(r[1]/48):"streamtube"===this.traceType&&(a.intensity=this.intensity[r[1]],a.velocity=this.vectors[r[1]].slice(0,3),a.divergence=this.vectors[r[1]][3],a.index=e),a},p.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.pickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleVectors.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleIds.dispose()},e.exports=function(t,e,r){var s=r.shaders;1===arguments.length&&(t=(e=t).gl);var l=function(t,e){var r=n(t,e.meshShader.vertex,e.meshShader.fragment,null,e.meshShader.attributes);return r.attributes.position.location=0,r.attributes.color.location=2,r.attributes.uv.location=3,r.attributes.vector.location=4,r}(t,s),u=function(t,e){var r=n(t,e.pickShader.vertex,e.pickShader.fragment,null,e.pickShader.attributes);return r.attributes.position.location=0,r.attributes.id.location=1,r.attributes.vector.location=4,r}(t,s),h=o(t,c(new Uint8Array([255,255,255,255]),[1,1,4]));h.generateMipmap(),h.minFilter=t.LINEAR_MIPMAP_LINEAR,h.magFilter=t.LINEAR;var p=a(t),d=a(t),g=a(t),v=a(t),m=a(t),y=new f(t,h,l,u,p,d,m,g,v,i(t,[{buffer:p,type:t.FLOAT,size:4},{buffer:m,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:g,type:t.FLOAT,size:4},{buffer:v,type:t.FLOAT,size:2},{buffer:d,type:t.FLOAT,size:4}]),r.traceType||"cone");return y.update(e),y}},{colormap:128,"gl-buffer":244,"gl-mat4/invert":268,"gl-mat4/multiply":270,"gl-shader":304,"gl-texture2d":324,"gl-vao":329,ndarray:451}],247:[function(t,e,r){var n=t("glslify"),a=n(["precision highp float;\n\nprecision highp float;\n#define GLSLIFY 1\n\nvec3 getOrthogonalVector(vec3 v) {\n // Return up-vector for only-z vector.\n // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\n // From the above if-statement we have ||a|| > 0 U ||b|| > 0.\n // Assign z = 0, x = -b, y = a:\n // a*-b + b*a + c*0 = -ba + ba + 0 = 0\n if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\n return normalize(vec3(-v.y, v.x, 0.0));\n } else {\n return normalize(vec3(0.0, v.z, -v.y));\n }\n}\n\n// Calculate the cone vertex and normal at the given index.\n//\n// The returned vertex is for a cone with its top at origin and height of 1.0,\n// pointing in the direction of the vector attribute.\n//\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\n// These vertices are used to make up the triangles of the cone by the following:\n// segment + 0 top vertex\n// segment + 1 perimeter vertex a+1\n// segment + 2 perimeter vertex a\n// segment + 3 center base vertex\n// segment + 4 perimeter vertex a\n// segment + 5 perimeter vertex a+1\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\n// To go from index to segment, floor(index / 6)\n// To go from segment to angle, 2*pi * (segment/segmentCount)\n// To go from index to segment index, index - (segment*6)\n//\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\n\n const float segmentCount = 8.0;\n\n float index = rawIndex - floor(rawIndex /\n (segmentCount * 6.0)) *\n (segmentCount * 6.0);\n\n float segment = floor(0.001 + index/6.0);\n float segmentIndex = index - (segment*6.0);\n\n normal = -normalize(d);\n\n if (segmentIndex > 2.99 && segmentIndex < 3.01) {\n return mix(vec3(0.0), -d, coneOffset);\n }\n\n float nextAngle = (\n (segmentIndex > 0.99 && segmentIndex < 1.01) ||\n (segmentIndex > 4.99 && segmentIndex < 5.01)\n ) ? 1.0 : 0.0;\n float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\n\n vec3 v1 = mix(d, vec3(0.0), coneOffset);\n vec3 v2 = v1 - d;\n\n vec3 u = getOrthogonalVector(d);\n vec3 v = normalize(cross(u, d));\n\n vec3 x = u * cos(angle) * length(d)*0.25;\n vec3 y = v * sin(angle) * length(d)*0.25;\n vec3 v3 = v2 + x + y;\n if (segmentIndex < 3.0) {\n vec3 tx = u * sin(angle);\n vec3 ty = v * -cos(angle);\n vec3 tangent = tx + ty;\n normal = normalize(cross(v3 - v1, tangent));\n }\n\n if (segmentIndex == 0.0) {\n return mix(d, vec3(0.0), coneOffset);\n }\n return v3;\n}\n\nattribute vec3 vector;\nattribute vec4 color, position;\nattribute vec2 uv;\n\nuniform float vectorScale, coneScale, coneOffset;\nuniform mat4 model, view, projection, inverseModel;\nuniform vec3 eyePosition, lightPosition;\n\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n // Scale the vector magnitude to stay constant with\n // model & view changes.\n vec3 normal;\n vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector), position.w, coneOffset, normal);\n vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\n\n //Lighting geometry parameters\n vec4 cameraCoordinate = view * conePosition;\n cameraCoordinate.xyz /= cameraCoordinate.w;\n f_lightDirection = lightPosition - cameraCoordinate.xyz;\n f_eyeDirection = eyePosition - cameraCoordinate.xyz;\n f_normal = normalize((vec4(normal, 0.0) * inverseModel).xyz);\n\n // vec4 m_position = model * vec4(conePosition, 1.0);\n vec4 t_position = view * conePosition;\n gl_Position = projection * t_position;\n\n f_color = color;\n f_data = conePosition.xyz;\n f_position = position.xyz;\n f_uv = uv;\n}\n"]),i=n(["#extension GL_OES_standard_derivatives : enable\n\nprecision highp float;\n#define GLSLIFY 1\n\nfloat beckmannDistribution(float x, float roughness) {\n float NdotH = max(x, 0.0001);\n float cos2Alpha = NdotH * NdotH;\n float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n float roughness2 = roughness * roughness;\n float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n return exp(tan2Alpha / roughness2) / denom;\n}\n\nfloat cookTorranceSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float roughness,\n float fresnel) {\n\n float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\n float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\n\n //Half angle vector\n vec3 H = normalize(lightDirection + viewDirection);\n\n //Geometric term\n float NdotH = max(dot(surfaceNormal, H), 0.0);\n float VdotH = max(dot(viewDirection, H), 0.000001);\n float LdotH = max(dot(lightDirection, H), 0.000001);\n float G1 = (2.0 * NdotH * VdotN) / VdotH;\n float G2 = (2.0 * NdotH * LdotN) / LdotH;\n float G = min(1.0, min(G1, G2));\n \n //Distribution term\n float D = beckmannDistribution(NdotH, roughness);\n\n //Fresnel term\n float F = pow(1.0 - VdotN, fresnel);\n\n //Multiply terms and done\n return G * F * D / max(3.14159265 * VdotN, 0.000001);\n}\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\nuniform sampler2D texture;\n\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n vec3 N = normalize(f_normal);\n vec3 L = normalize(f_lightDirection);\n vec3 V = normalize(f_eyeDirection);\n\n if(gl_FrontFacing) {\n N = -N;\n }\n\n float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\n float diffuse = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n vec4 surfaceColor = f_color * texture2D(texture, f_uv);\n vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular, 1.0);\n\n gl_FragColor = litColor * opacity;\n}\n"]),o=n(["precision highp float;\n\nprecision highp float;\n#define GLSLIFY 1\n\nvec3 getOrthogonalVector(vec3 v) {\n // Return up-vector for only-z vector.\n // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\n // From the above if-statement we have ||a|| > 0 U ||b|| > 0.\n // Assign z = 0, x = -b, y = a:\n // a*-b + b*a + c*0 = -ba + ba + 0 = 0\n if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\n return normalize(vec3(-v.y, v.x, 0.0));\n } else {\n return normalize(vec3(0.0, v.z, -v.y));\n }\n}\n\n// Calculate the cone vertex and normal at the given index.\n//\n// The returned vertex is for a cone with its top at origin and height of 1.0,\n// pointing in the direction of the vector attribute.\n//\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\n// These vertices are used to make up the triangles of the cone by the following:\n// segment + 0 top vertex\n// segment + 1 perimeter vertex a+1\n// segment + 2 perimeter vertex a\n// segment + 3 center base vertex\n// segment + 4 perimeter vertex a\n// segment + 5 perimeter vertex a+1\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\n// To go from index to segment, floor(index / 6)\n// To go from segment to angle, 2*pi * (segment/segmentCount)\n// To go from index to segment index, index - (segment*6)\n//\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\n\n const float segmentCount = 8.0;\n\n float index = rawIndex - floor(rawIndex /\n (segmentCount * 6.0)) *\n (segmentCount * 6.0);\n\n float segment = floor(0.001 + index/6.0);\n float segmentIndex = index - (segment*6.0);\n\n normal = -normalize(d);\n\n if (segmentIndex > 2.99 && segmentIndex < 3.01) {\n return mix(vec3(0.0), -d, coneOffset);\n }\n\n float nextAngle = (\n (segmentIndex > 0.99 && segmentIndex < 1.01) ||\n (segmentIndex > 4.99 && segmentIndex < 5.01)\n ) ? 1.0 : 0.0;\n float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\n\n vec3 v1 = mix(d, vec3(0.0), coneOffset);\n vec3 v2 = v1 - d;\n\n vec3 u = getOrthogonalVector(d);\n vec3 v = normalize(cross(u, d));\n\n vec3 x = u * cos(angle) * length(d)*0.25;\n vec3 y = v * sin(angle) * length(d)*0.25;\n vec3 v3 = v2 + x + y;\n if (segmentIndex < 3.0) {\n vec3 tx = u * sin(angle);\n vec3 ty = v * -cos(angle);\n vec3 tangent = tx + ty;\n normal = normalize(cross(v3 - v1, tangent));\n }\n\n if (segmentIndex == 0.0) {\n return mix(d, vec3(0.0), coneOffset);\n }\n return v3;\n}\n\nattribute vec4 vector;\nattribute vec4 position;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\nuniform float vectorScale, coneScale, coneOffset;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n vec3 normal;\n vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector.xyz), position.w, coneOffset, normal);\n vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\n gl_Position = projection * view * conePosition;\n f_id = id;\n f_position = position.xyz;\n}\n"]),s=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float pickId;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n\n gl_FragColor = vec4(pickId, f_id.xyz);\n}"]);r.meshShader={vertex:a,fragment:i,attributes:[{name:"position",type:"vec4"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"},{name:"vector",type:"vec3"}]},r.pickShader={vertex:o,fragment:s,attributes:[{name:"position",type:"vec4"},{name:"id",type:"vec4"},{name:"vector",type:"vec3"}]}},{glslify:410}],248:[function(t,e,r){e.exports={0:"NONE",1:"ONE",2:"LINE_LOOP",3:"LINE_STRIP",4:"TRIANGLES",5:"TRIANGLE_STRIP",6:"TRIANGLE_FAN",256:"DEPTH_BUFFER_BIT",512:"NEVER",513:"LESS",514:"EQUAL",515:"LEQUAL",516:"GREATER",517:"NOTEQUAL",518:"GEQUAL",519:"ALWAYS",768:"SRC_COLOR",769:"ONE_MINUS_SRC_COLOR",770:"SRC_ALPHA",771:"ONE_MINUS_SRC_ALPHA",772:"DST_ALPHA",773:"ONE_MINUS_DST_ALPHA",774:"DST_COLOR",775:"ONE_MINUS_DST_COLOR",776:"SRC_ALPHA_SATURATE",1024:"STENCIL_BUFFER_BIT",1028:"FRONT",1029:"BACK",1032:"FRONT_AND_BACK",1280:"INVALID_ENUM",1281:"INVALID_VALUE",1282:"INVALID_OPERATION",1285:"OUT_OF_MEMORY",1286:"INVALID_FRAMEBUFFER_OPERATION",2304:"CW",2305:"CCW",2849:"LINE_WIDTH",2884:"CULL_FACE",2885:"CULL_FACE_MODE",2886:"FRONT_FACE",2928:"DEPTH_RANGE",2929:"DEPTH_TEST",2930:"DEPTH_WRITEMASK",2931:"DEPTH_CLEAR_VALUE",2932:"DEPTH_FUNC",2960:"STENCIL_TEST",2961:"STENCIL_CLEAR_VALUE",2962:"STENCIL_FUNC",2963:"STENCIL_VALUE_MASK",2964:"STENCIL_FAIL",2965:"STENCIL_PASS_DEPTH_FAIL",2966:"STENCIL_PASS_DEPTH_PASS",2967:"STENCIL_REF",2968:"STENCIL_WRITEMASK",2978:"VIEWPORT",3024:"DITHER",3042:"BLEND",3088:"SCISSOR_BOX",3089:"SCISSOR_TEST",3106:"COLOR_CLEAR_VALUE",3107:"COLOR_WRITEMASK",3317:"UNPACK_ALIGNMENT",3333:"PACK_ALIGNMENT",3379:"MAX_TEXTURE_SIZE",3386:"MAX_VIEWPORT_DIMS",3408:"SUBPIXEL_BITS",3410:"RED_BITS",3411:"GREEN_BITS",3412:"BLUE_BITS",3413:"ALPHA_BITS",3414:"DEPTH_BITS",3415:"STENCIL_BITS",3553:"TEXTURE_2D",4352:"DONT_CARE",4353:"FASTEST",4354:"NICEST",5120:"BYTE",5121:"UNSIGNED_BYTE",5122:"SHORT",5123:"UNSIGNED_SHORT",5124:"INT",5125:"UNSIGNED_INT",5126:"FLOAT",5386:"INVERT",5890:"TEXTURE",6401:"STENCIL_INDEX",6402:"DEPTH_COMPONENT",6406:"ALPHA",6407:"RGB",6408:"RGBA",6409:"LUMINANCE",6410:"LUMINANCE_ALPHA",7680:"KEEP",7681:"REPLACE",7682:"INCR",7683:"DECR",7936:"VENDOR",7937:"RENDERER",7938:"VERSION",9728:"NEAREST",9729:"LINEAR",9984:"NEAREST_MIPMAP_NEAREST",9985:"LINEAR_MIPMAP_NEAREST",9986:"NEAREST_MIPMAP_LINEAR",9987:"LINEAR_MIPMAP_LINEAR",10240:"TEXTURE_MAG_FILTER",10241:"TEXTURE_MIN_FILTER",10242:"TEXTURE_WRAP_S",10243:"TEXTURE_WRAP_T",10497:"REPEAT",10752:"POLYGON_OFFSET_UNITS",16384:"COLOR_BUFFER_BIT",32769:"CONSTANT_COLOR",32770:"ONE_MINUS_CONSTANT_COLOR",32771:"CONSTANT_ALPHA",32772:"ONE_MINUS_CONSTANT_ALPHA",32773:"BLEND_COLOR",32774:"FUNC_ADD",32777:"BLEND_EQUATION_RGB",32778:"FUNC_SUBTRACT",32779:"FUNC_REVERSE_SUBTRACT",32819:"UNSIGNED_SHORT_4_4_4_4",32820:"UNSIGNED_SHORT_5_5_5_1",32823:"POLYGON_OFFSET_FILL",32824:"POLYGON_OFFSET_FACTOR",32854:"RGBA4",32855:"RGB5_A1",32873:"TEXTURE_BINDING_2D",32926:"SAMPLE_ALPHA_TO_COVERAGE",32928:"SAMPLE_COVERAGE",32936:"SAMPLE_BUFFERS",32937:"SAMPLES",32938:"SAMPLE_COVERAGE_VALUE",32939:"SAMPLE_COVERAGE_INVERT",32968:"BLEND_DST_RGB",32969:"BLEND_SRC_RGB",32970:"BLEND_DST_ALPHA",32971:"BLEND_SRC_ALPHA",33071:"CLAMP_TO_EDGE",33170:"GENERATE_MIPMAP_HINT",33189:"DEPTH_COMPONENT16",33306:"DEPTH_STENCIL_ATTACHMENT",33635:"UNSIGNED_SHORT_5_6_5",33648:"MIRRORED_REPEAT",33901:"ALIASED_POINT_SIZE_RANGE",33902:"ALIASED_LINE_WIDTH_RANGE",33984:"TEXTURE0",33985:"TEXTURE1",33986:"TEXTURE2",33987:"TEXTURE3",33988:"TEXTURE4",33989:"TEXTURE5",33990:"TEXTURE6",33991:"TEXTURE7",33992:"TEXTURE8",33993:"TEXTURE9",33994:"TEXTURE10",33995:"TEXTURE11",33996:"TEXTURE12",33997:"TEXTURE13",33998:"TEXTURE14",33999:"TEXTURE15",34000:"TEXTURE16",34001:"TEXTURE17",34002:"TEXTURE18",34003:"TEXTURE19",34004:"TEXTURE20",34005:"TEXTURE21",34006:"TEXTURE22",34007:"TEXTURE23",34008:"TEXTURE24",34009:"TEXTURE25",34010:"TEXTURE26",34011:"TEXTURE27",34012:"TEXTURE28",34013:"TEXTURE29",34014:"TEXTURE30",34015:"TEXTURE31",34016:"ACTIVE_TEXTURE",34024:"MAX_RENDERBUFFER_SIZE",34041:"DEPTH_STENCIL",34055:"INCR_WRAP",34056:"DECR_WRAP",34067:"TEXTURE_CUBE_MAP",34068:"TEXTURE_BINDING_CUBE_MAP",34069:"TEXTURE_CUBE_MAP_POSITIVE_X",34070:"TEXTURE_CUBE_MAP_NEGATIVE_X",34071:"TEXTURE_CUBE_MAP_POSITIVE_Y",34072:"TEXTURE_CUBE_MAP_NEGATIVE_Y",34073:"TEXTURE_CUBE_MAP_POSITIVE_Z",34074:"TEXTURE_CUBE_MAP_NEGATIVE_Z",34076:"MAX_CUBE_MAP_TEXTURE_SIZE",34338:"VERTEX_ATTRIB_ARRAY_ENABLED",34339:"VERTEX_ATTRIB_ARRAY_SIZE",34340:"VERTEX_ATTRIB_ARRAY_STRIDE",34341:"VERTEX_ATTRIB_ARRAY_TYPE",34342:"CURRENT_VERTEX_ATTRIB",34373:"VERTEX_ATTRIB_ARRAY_POINTER",34466:"NUM_COMPRESSED_TEXTURE_FORMATS",34467:"COMPRESSED_TEXTURE_FORMATS",34660:"BUFFER_SIZE",34661:"BUFFER_USAGE",34816:"STENCIL_BACK_FUNC",34817:"STENCIL_BACK_FAIL",34818:"STENCIL_BACK_PASS_DEPTH_FAIL",34819:"STENCIL_BACK_PASS_DEPTH_PASS",34877:"BLEND_EQUATION_ALPHA",34921:"MAX_VERTEX_ATTRIBS",34922:"VERTEX_ATTRIB_ARRAY_NORMALIZED",34930:"MAX_TEXTURE_IMAGE_UNITS",34962:"ARRAY_BUFFER",34963:"ELEMENT_ARRAY_BUFFER",34964:"ARRAY_BUFFER_BINDING",34965:"ELEMENT_ARRAY_BUFFER_BINDING",34975:"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",35040:"STREAM_DRAW",35044:"STATIC_DRAW",35048:"DYNAMIC_DRAW",35632:"FRAGMENT_SHADER",35633:"VERTEX_SHADER",35660:"MAX_VERTEX_TEXTURE_IMAGE_UNITS",35661:"MAX_COMBINED_TEXTURE_IMAGE_UNITS",35663:"SHADER_TYPE",35664:"FLOAT_VEC2",35665:"FLOAT_VEC3",35666:"FLOAT_VEC4",35667:"INT_VEC2",35668:"INT_VEC3",35669:"INT_VEC4",35670:"BOOL",35671:"BOOL_VEC2",35672:"BOOL_VEC3",35673:"BOOL_VEC4",35674:"FLOAT_MAT2",35675:"FLOAT_MAT3",35676:"FLOAT_MAT4",35678:"SAMPLER_2D",35680:"SAMPLER_CUBE",35712:"DELETE_STATUS",35713:"COMPILE_STATUS",35714:"LINK_STATUS",35715:"VALIDATE_STATUS",35716:"INFO_LOG_LENGTH",35717:"ATTACHED_SHADERS",35718:"ACTIVE_UNIFORMS",35719:"ACTIVE_UNIFORM_MAX_LENGTH",35720:"SHADER_SOURCE_LENGTH",35721:"ACTIVE_ATTRIBUTES",35722:"ACTIVE_ATTRIBUTE_MAX_LENGTH",35724:"SHADING_LANGUAGE_VERSION",35725:"CURRENT_PROGRAM",36003:"STENCIL_BACK_REF",36004:"STENCIL_BACK_VALUE_MASK",36005:"STENCIL_BACK_WRITEMASK",36006:"FRAMEBUFFER_BINDING",36007:"RENDERBUFFER_BINDING",36048:"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE",36049:"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",36050:"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL",36051:"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",36053:"FRAMEBUFFER_COMPLETE",36054:"FRAMEBUFFER_INCOMPLETE_ATTACHMENT",36055:"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",36057:"FRAMEBUFFER_INCOMPLETE_DIMENSIONS",36061:"FRAMEBUFFER_UNSUPPORTED",36064:"COLOR_ATTACHMENT0",36096:"DEPTH_ATTACHMENT",36128:"STENCIL_ATTACHMENT",36160:"FRAMEBUFFER",36161:"RENDERBUFFER",36162:"RENDERBUFFER_WIDTH",36163:"RENDERBUFFER_HEIGHT",36164:"RENDERBUFFER_INTERNAL_FORMAT",36168:"STENCIL_INDEX8",36176:"RENDERBUFFER_RED_SIZE",36177:"RENDERBUFFER_GREEN_SIZE",36178:"RENDERBUFFER_BLUE_SIZE",36179:"RENDERBUFFER_ALPHA_SIZE",36180:"RENDERBUFFER_DEPTH_SIZE",36181:"RENDERBUFFER_STENCIL_SIZE",36194:"RGB565",36336:"LOW_FLOAT",36337:"MEDIUM_FLOAT",36338:"HIGH_FLOAT",36339:"LOW_INT",36340:"MEDIUM_INT",36341:"HIGH_INT",36346:"SHADER_COMPILER",36347:"MAX_VERTEX_UNIFORM_VECTORS",36348:"MAX_VARYING_VECTORS",36349:"MAX_FRAGMENT_UNIFORM_VECTORS",37440:"UNPACK_FLIP_Y_WEBGL",37441:"UNPACK_PREMULTIPLY_ALPHA_WEBGL",37442:"CONTEXT_LOST_WEBGL",37443:"UNPACK_COLORSPACE_CONVERSION_WEBGL",37444:"BROWSER_DEFAULT_WEBGL"}},{}],249:[function(t,e,r){var n=t("./1.0/numbers");e.exports=function(t){return n[t]}},{"./1.0/numbers":248}],250:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl,r=n(e),o=a(e,[{buffer:r,type:e.FLOAT,size:3,offset:0,stride:40},{buffer:r,type:e.FLOAT,size:4,offset:12,stride:40},{buffer:r,type:e.FLOAT,size:3,offset:28,stride:40}]),l=i(e);l.attributes.position.location=0,l.attributes.color.location=1,l.attributes.offset.location=2;var c=new s(e,r,o,l);return c.update(t),c};var n=t("gl-buffer"),a=t("gl-vao"),i=t("./shaders/index"),o=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,r,n){this.gl=t,this.shader=n,this.buffer=e,this.vao=r,this.pixelRatio=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lineWidth=[1,1,1],this.capSize=[10,10,10],this.lineCount=[0,0,0],this.lineOffset=[0,0,0],this.opacity=1,this.hasAlpha=!1}var l=s.prototype;function c(t,e){for(var r=0;r<3;++r)t[0][r]=Math.min(t[0][r],e[r]),t[1][r]=Math.max(t[1][r],e[r])}l.isOpaque=function(){return!this.hasAlpha},l.isTransparent=function(){return this.hasAlpha},l.drawTransparent=l.draw=function(t){var e=this.gl,r=this.shader.uniforms;this.shader.bind();var n=r.view=t.view||o,a=r.projection=t.projection||o;r.model=t.model||o,r.clipBounds=this.clipBounds,r.opacity=this.opacity;var i=n[12],s=n[13],l=n[14],c=n[15],u=(t._ortho||!1?2:1)*this.pixelRatio*(a[3]*i+a[7]*s+a[11]*l+a[15]*c)/e.drawingBufferHeight;this.vao.bind();for(var h=0;h<3;++h)e.lineWidth(this.lineWidth[h]*this.pixelRatio),r.capSize=this.capSize[h]*u,this.lineCount[h]&&e.drawArrays(e.LINES,this.lineOffset[h],this.lineCount[h]);this.vao.unbind()};var u=function(){for(var t=new Array(3),e=0;e<3;++e){for(var r=[],n=1;n<=2;++n)for(var a=-1;a<=1;a+=2){var i=[0,0,0];i[(n+e)%3]=a,r.push(i)}t[e]=r}return t}();function h(t,e,r,n){for(var a=u[n],i=0;i<a.length;++i){var o=a[i];t.push(e[0],e[1],e[2],r[0],r[1],r[2],r[3],o[0],o[1],o[2])}return a.length}l.update=function(t){"lineWidth"in(t=t||{})&&(this.lineWidth=t.lineWidth,Array.isArray(this.lineWidth)||(this.lineWidth=[this.lineWidth,this.lineWidth,this.lineWidth])),"capSize"in t&&(this.capSize=t.capSize,Array.isArray(this.capSize)||(this.capSize=[this.capSize,this.capSize,this.capSize])),this.hasAlpha=!1,"opacity"in t&&(this.opacity=+t.opacity,this.opacity<1&&(this.hasAlpha=!0));var e=t.color||[[0,0,0],[0,0,0],[0,0,0]],r=t.position,n=t.error;if(Array.isArray(e[0])||(e=[e,e,e]),r&&n){var a=[],i=r.length,o=0;this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.lineCount=[0,0,0];for(var s=0;s<3;++s){this.lineOffset[s]=o;t:for(var l=0;l<i;++l){for(var u=r[l],f=0;f<3;++f)if(isNaN(u[f])||!isFinite(u[f]))continue t;var p=n[l],d=e[s];if(Array.isArray(d[0])&&(d=e[l]),3===d.length?d=[d[0],d[1],d[2],1]:4===d.length&&(d=[d[0],d[1],d[2],d[3]],!this.hasAlpha&&d[3]<1&&(this.hasAlpha=!0)),!isNaN(p[0][s])&&!isNaN(p[1][s])){var g;if(p[0][s]<0)(g=u.slice())[s]+=p[0][s],a.push(u[0],u[1],u[2],d[0],d[1],d[2],d[3],0,0,0,g[0],g[1],g[2],d[0],d[1],d[2],d[3],0,0,0),c(this.bounds,g),o+=2+h(a,g,d,s);if(p[1][s]>0)(g=u.slice())[s]+=p[1][s],a.push(u[0],u[1],u[2],d[0],d[1],d[2],d[3],0,0,0,g[0],g[1],g[2],d[0],d[1],d[2],d[3],0,0,0),c(this.bounds,g),o+=2+h(a,g,d,s)}}this.lineCount[s]=o-this.lineOffset[s]}this.buffer.update(a)}},l.dispose=function(){this.shader.dispose(),this.buffer.dispose(),this.vao.dispose()}},{"./shaders/index":251,"gl-buffer":244,"gl-vao":329}],251:[function(t,e,r){"use strict";var n=t("glslify"),a=t("gl-shader"),i=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position, offset;\nattribute vec4 color;\nuniform mat4 model, view, projection;\nuniform float capSize;\nvarying vec4 fragColor;\nvarying vec3 fragPosition;\n\nvoid main() {\n vec4 worldPosition = model * vec4(position, 1.0);\n worldPosition = (worldPosition / worldPosition.w) + vec4(capSize * offset, 0.0);\n gl_Position = projection * view * worldPosition;\n fragColor = color;\n fragPosition = position;\n}"]),o=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float opacity;\nvarying vec3 fragPosition;\nvarying vec4 fragColor;\n\nvoid main() {\n if (\n outOfRange(clipBounds[0], clipBounds[1], fragPosition) ||\n fragColor.a * opacity == 0.\n ) discard;\n\n gl_FragColor = opacity * fragColor;\n}"]);e.exports=function(t){return a(t,i,o,null,[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"offset",type:"vec3"}])}},{"gl-shader":304,glslify:410}],252:[function(t,e,r){"use strict";var n=t("gl-texture2d");e.exports=function(t,e,r,n){a||(a=t.FRAMEBUFFER_UNSUPPORTED,i=t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT,o=t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS,s=t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT);var c=t.getExtension("WEBGL_draw_buffers");!l&&c&&function(t,e){var r=t.getParameter(e.MAX_COLOR_ATTACHMENTS_WEBGL);l=new Array(r+1);for(var n=0;n<=r;++n){for(var a=new Array(r),i=0;i<n;++i)a[i]=t.COLOR_ATTACHMENT0+i;for(var i=n;i<r;++i)a[i]=t.NONE;l[n]=a}}(t,c);Array.isArray(e)&&(n=r,r=0|e[1],e=0|e[0]);if("number"!=typeof e)throw new Error("gl-fbo: Missing shape parameter");var u=t.getParameter(t.MAX_RENDERBUFFER_SIZE);if(e<0||e>u||r<0||r>u)throw new Error("gl-fbo: Parameters are too large for FBO");var h=1;if("color"in(n=n||{})){if((h=Math.max(0|n.color,0))<0)throw new Error("gl-fbo: Must specify a nonnegative number of colors");if(h>1){if(!c)throw new Error("gl-fbo: Multiple draw buffer extension not supported");if(h>t.getParameter(c.MAX_COLOR_ATTACHMENTS_WEBGL))throw new Error("gl-fbo: Context does not support "+h+" draw buffers")}}var f=t.UNSIGNED_BYTE,p=t.getExtension("OES_texture_float");if(n.float&&h>0){if(!p)throw new Error("gl-fbo: Context does not support floating point textures");f=t.FLOAT}else n.preferFloat&&h>0&&p&&(f=t.FLOAT);var g=!0;"depth"in n&&(g=!!n.depth);var v=!1;"stencil"in n&&(v=!!n.stencil);return new d(t,e,r,f,h,g,v,c)};var a,i,o,s,l=null;function c(t){return[t.getParameter(t.FRAMEBUFFER_BINDING),t.getParameter(t.RENDERBUFFER_BINDING),t.getParameter(t.TEXTURE_BINDING_2D)]}function u(t,e){t.bindFramebuffer(t.FRAMEBUFFER,e[0]),t.bindRenderbuffer(t.RENDERBUFFER,e[1]),t.bindTexture(t.TEXTURE_2D,e[2])}function h(t){switch(t){case a:throw new Error("gl-fbo: Framebuffer unsupported");case i:throw new Error("gl-fbo: Framebuffer incomplete attachment");case o:throw new Error("gl-fbo: Framebuffer incomplete dimensions");case s:throw new Error("gl-fbo: Framebuffer incomplete missing attachment");default:throw new Error("gl-fbo: Framebuffer failed for unspecified reason")}}function f(t,e,r,a,i,o){if(!a)return null;var s=n(t,e,r,i,a);return s.magFilter=t.NEAREST,s.minFilter=t.NEAREST,s.mipSamples=1,s.bind(),t.framebufferTexture2D(t.FRAMEBUFFER,o,t.TEXTURE_2D,s.handle,0),s}function p(t,e,r,n,a){var i=t.createRenderbuffer();return t.bindRenderbuffer(t.RENDERBUFFER,i),t.renderbufferStorage(t.RENDERBUFFER,n,e,r),t.framebufferRenderbuffer(t.FRAMEBUFFER,a,t.RENDERBUFFER,i),i}function d(t,e,r,n,a,i,o,s){this.gl=t,this._shape=[0|e,0|r],this._destroyed=!1,this._ext=s,this.color=new Array(a);for(var d=0;d<a;++d)this.color[d]=null;this._color_rb=null,this.depth=null,this._depth_rb=null,this._colorType=n,this._useDepth=i,this._useStencil=o;var g=this,v=[0|e,0|r];Object.defineProperties(v,{0:{get:function(){return g._shape[0]},set:function(t){return g.width=t}},1:{get:function(){return g._shape[1]},set:function(t){return g.height=t}}}),this._shapeVector=v,function(t){var e=c(t.gl),r=t.gl,n=t.handle=r.createFramebuffer(),a=t._shape[0],i=t._shape[1],o=t.color.length,s=t._ext,d=t._useStencil,g=t._useDepth,v=t._colorType;r.bindFramebuffer(r.FRAMEBUFFER,n);for(var m=0;m<o;++m)t.color[m]=f(r,a,i,v,r.RGBA,r.COLOR_ATTACHMENT0+m);0===o?(t._color_rb=p(r,a,i,r.RGBA4,r.COLOR_ATTACHMENT0),s&&s.drawBuffersWEBGL(l[0])):o>1&&s.drawBuffersWEBGL(l[o]);var y=r.getExtension("WEBGL_depth_texture");y?d?t.depth=f(r,a,i,y.UNSIGNED_INT_24_8_WEBGL,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):g&&(t.depth=f(r,a,i,r.UNSIGNED_SHORT,r.DEPTH_COMPONENT,r.DEPTH_ATTACHMENT)):g&&d?t._depth_rb=p(r,a,i,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):g?t._depth_rb=p(r,a,i,r.DEPTH_COMPONENT16,r.DEPTH_ATTACHMENT):d&&(t._depth_rb=p(r,a,i,r.STENCIL_INDEX,r.STENCIL_ATTACHMENT));var x=r.checkFramebufferStatus(r.FRAMEBUFFER);if(x!==r.FRAMEBUFFER_COMPLETE){for(t._destroyed=!0,r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteFramebuffer(t.handle),t.handle=null,t.depth&&(t.depth.dispose(),t.depth=null),t._depth_rb&&(r.deleteRenderbuffer(t._depth_rb),t._depth_rb=null),m=0;m<t.color.length;++m)t.color[m].dispose(),t.color[m]=null;t._color_rb&&(r.deleteRenderbuffer(t._color_rb),t._color_rb=null),u(r,e),h(x)}u(r,e)}(this)}var g=d.prototype;function v(t,e,r){if(t._destroyed)throw new Error("gl-fbo: Can't resize destroyed FBO");if(t._shape[0]!==e||t._shape[1]!==r){var n=t.gl,a=n.getParameter(n.MAX_RENDERBUFFER_SIZE);if(e<0||e>a||r<0||r>a)throw new Error("gl-fbo: Can't resize FBO, invalid dimensions");t._shape[0]=e,t._shape[1]=r;for(var i=c(n),o=0;o<t.color.length;++o)t.color[o].shape=t._shape;t._color_rb&&(n.bindRenderbuffer(n.RENDERBUFFER,t._color_rb),n.renderbufferStorage(n.RENDERBUFFER,n.RGBA4,t._shape[0],t._shape[1])),t.depth&&(t.depth.shape=t._shape),t._depth_rb&&(n.bindRenderbuffer(n.RENDERBUFFER,t._depth_rb),t._useDepth&&t._useStencil?n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_STENCIL,t._shape[0],t._shape[1]):t._useDepth?n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_COMPONENT16,t._shape[0],t._shape[1]):t._useStencil&&n.renderbufferStorage(n.RENDERBUFFER,n.STENCIL_INDEX,t._shape[0],t._shape[1])),n.bindFramebuffer(n.FRAMEBUFFER,t.handle);var s=n.checkFramebufferStatus(n.FRAMEBUFFER);s!==n.FRAMEBUFFER_COMPLETE&&(t.dispose(),u(n,i),h(s)),u(n,i)}}Object.defineProperties(g,{shape:{get:function(){return this._destroyed?[0,0]:this._shapeVector},set:function(t){if(Array.isArray(t)||(t=[0|t,0|t]),2!==t.length)throw new Error("gl-fbo: Shape vector must be length 2");var e=0|t[0],r=0|t[1];return v(this,e,r),[e,r]},enumerable:!1},width:{get:function(){return this._destroyed?0:this._shape[0]},set:function(t){return v(this,t|=0,this._shape[1]),t},enumerable:!1},height:{get:function(){return this._destroyed?0:this._shape[1]},set:function(t){return t|=0,v(this,this._shape[0],t),t},enumerable:!1}}),g.bind=function(){if(!this._destroyed){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.handle),t.viewport(0,0,this._shape[0],this._shape[1])}},g.dispose=function(){if(!this._destroyed){this._destroyed=!0;var t=this.gl;t.deleteFramebuffer(this.handle),this.handle=null,this.depth&&(this.depth.dispose(),this.depth=null),this._depth_rb&&(t.deleteRenderbuffer(this._depth_rb),this._depth_rb=null);for(var e=0;e<this.color.length;++e)this.color[e].dispose(),this.color[e]=null;this._color_rb&&(t.deleteRenderbuffer(this._color_rb),this._color_rb=null)}}},{"gl-texture2d":324}],253:[function(t,e,r){var n=t("sprintf-js").sprintf,a=t("gl-constants/lookup"),i=t("glsl-shader-name"),o=t("add-line-numbers");e.exports=function(t,e,r){"use strict";var s=i(e)||"of unknown name (see npm glsl-shader-name)",l="unknown type";void 0!==r&&(l=r===a.FRAGMENT_SHADER?"fragment":"vertex");for(var c=n("Error compiling %s shader %s:\n",l,s),u=n("%s%s",c,t),h=t.split("\n"),f={},p=0;p<h.length;p++){var d=h[p];if(""!==d&&"\0"!==d){var g=parseInt(d.split(":")[2]);if(isNaN(g))throw new Error(n("Could not parse error: %s",d));f[g]=d}}for(var v=o(e).split("\n"),p=0;p<v.length;p++)if(f[p+3]||f[p+2]||f[p+1]){var m=v[p];if(c+=m+"\n",f[p+1]){var y=f[p+1];y=y.substr(y.split(":",3).join(":").length+1).trim(),c+=n("^^^ %s\n\n",y)}}return{long:c.trim(),short:u.trim()}}},{"add-line-numbers":64,"gl-constants/lookup":249,"glsl-shader-name":402,"sprintf-js":526}],254:[function(t,e,r){"use strict";e.exports=function(t,e){var r=t.gl,n=o(r,l.vertex,l.fragment),a=o(r,l.pickVertex,l.pickFragment),i=s(r),u=s(r),h=s(r),f=s(r),p=new c(t,n,a,i,u,h,f);return p.update(e),t.addObject(p),p};var n=t("binary-search-bounds"),a=t("iota-array"),i=t("typedarray-pool"),o=t("gl-shader"),s=t("gl-buffer"),l=t("./lib/shaders");function c(t,e,r,n,a,i,o){this.plot=t,this.shader=e,this.pickShader=r,this.positionBuffer=n,this.weightBuffer=a,this.colorBuffer=i,this.idBuffer=o,this.xData=[],this.yData=[],this.shape=[0,0],this.bounds=[1/0,1/0,-1/0,-1/0],this.pickOffset=0}var u,h=c.prototype,f=[0,0,1,0,0,1,1,0,1,1,0,1];h.draw=(u=[1,0,0,0,1,0,0,0,1],function(){var t=this.plot,e=this.shader,r=this.bounds,n=this.numVertices;if(!(n<=0)){var a=t.gl,i=t.dataBox,o=r[2]-r[0],s=r[3]-r[1],l=i[2]-i[0],c=i[3]-i[1];u[0]=2*o/l,u[4]=2*s/c,u[6]=2*(r[0]-i[0])/l-1,u[7]=2*(r[1]-i[1])/c-1,e.bind();var h=e.uniforms;h.viewTransform=u,h.shape=this.shape;var f=e.attributes;this.positionBuffer.bind(),f.position.pointer(),this.weightBuffer.bind(),f.weight.pointer(a.UNSIGNED_BYTE,!1),this.colorBuffer.bind(),f.color.pointer(a.UNSIGNED_BYTE,!0),a.drawArrays(a.TRIANGLES,0,n)}}),h.drawPick=function(){var t=[1,0,0,0,1,0,0,0,1],e=[0,0,0,0];return function(r){var n=this.plot,a=this.pickShader,i=this.bounds,o=this.numVertices;if(!(o<=0)){var s=n.gl,l=n.dataBox,c=i[2]-i[0],u=i[3]-i[1],h=l[2]-l[0],f=l[3]-l[1];t[0]=2*c/h,t[4]=2*u/f,t[6]=2*(i[0]-l[0])/h-1,t[7]=2*(i[1]-l[1])/f-1;for(var p=0;p<4;++p)e[p]=r>>8*p&255;this.pickOffset=r,a.bind();var d=a.uniforms;d.viewTransform=t,d.pickOffset=e,d.shape=this.shape;var g=a.attributes;return this.positionBuffer.bind(),g.position.pointer(),this.weightBuffer.bind(),g.weight.pointer(s.UNSIGNED_BYTE,!1),this.idBuffer.bind(),g.pickId.pointer(s.UNSIGNED_BYTE,!1),s.drawArrays(s.TRIANGLES,0,o),r+this.shape[0]*this.shape[1]}}}(),h.pick=function(t,e,r){var n=this.pickOffset,a=this.shape[0]*this.shape[1];if(r<n||r>=n+a)return null;var i=r-n,o=this.xData,s=this.yData;return{object:this,pointId:i,dataCoord:[o[i%this.shape[0]],s[i/this.shape[0]|0]]}},h.update=function(t){var e=(t=t||{}).shape||[0,0],r=t.x||a(e[0]),o=t.y||a(e[1]),s=t.z||new Float32Array(e[0]*e[1]);this.xData=r,this.yData=o;var l=t.colorLevels||[0],c=t.colorValues||[0,0,0,1],u=l.length,h=this.bounds,p=h[0]=r[0],d=h[1]=o[0],g=1/((h[2]=r[r.length-1])-p),v=1/((h[3]=o[o.length-1])-d),m=e[0],y=e[1];this.shape=[m,y];var x=(m-1)*(y-1)*(f.length>>>1);this.numVertices=x;for(var b=i.mallocUint8(4*x),_=i.mallocFloat32(2*x),w=i.mallocUint8(2*x),k=i.mallocUint32(x),T=0,M=0;M<y-1;++M)for(var A=v*(o[M]-d),S=v*(o[M+1]-d),E=0;E<m-1;++E)for(var L=g*(r[E]-p),C=g*(r[E+1]-p),P=0;P<f.length;P+=2){var O,z,I,D,R=f[P],F=f[P+1],B=s[(M+F)*m+(E+R)],N=n.le(l,B);if(N<0)O=c[0],z=c[1],I=c[2],D=c[3];else if(N===u-1)O=c[4*u-4],z=c[4*u-3],I=c[4*u-2],D=c[4*u-1];else{var j=(B-l[N])/(l[N+1]-l[N]),V=1-j,U=4*N,q=4*(N+1);O=V*c[U]+j*c[q],z=V*c[U+1]+j*c[q+1],I=V*c[U+2]+j*c[q+2],D=V*c[U+3]+j*c[q+3]}b[4*T]=255*O,b[4*T+1]=255*z,b[4*T+2]=255*I,b[4*T+3]=255*D,_[2*T]=.5*L+.5*C,_[2*T+1]=.5*A+.5*S,w[2*T]=R,w[2*T+1]=F,k[T]=M*m+E,T+=1}this.positionBuffer.update(_),this.weightBuffer.update(w),this.colorBuffer.update(b),this.idBuffer.update(k),i.free(_),i.free(b),i.free(w),i.free(k)},h.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.positionBuffer.dispose(),this.weightBuffer.dispose(),this.colorBuffer.dispose(),this.idBuffer.dispose(),this.plot.removeObject(this)}},{"./lib/shaders":255,"binary-search-bounds":256,"gl-buffer":244,"gl-shader":304,"iota-array":417,"typedarray-pool":543}],255:[function(t,e,r){"use strict";var n=t("glslify");e.exports={fragment:n(["precision lowp float;\n#define GLSLIFY 1\nvarying vec4 fragColor;\nvoid main() {\n gl_FragColor = vec4(fragColor.rgb * fragColor.a, fragColor.a);\n}\n"]),vertex:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\nattribute vec4 color;\nattribute vec2 weight;\n\nuniform vec2 shape;\nuniform mat3 viewTransform;\n\nvarying vec4 fragColor;\n\nvoid main() {\n vec3 vPosition = viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\n fragColor = color;\n gl_Position = vec4(vPosition.xy, 0, vPosition.z);\n}\n"]),pickFragment:n(["precision mediump float;\n#define GLSLIFY 1\n\nvarying vec4 fragId;\nvarying vec2 vWeight;\n\nuniform vec2 shape;\nuniform vec4 pickOffset;\n\nvoid main() {\n vec2 d = step(.5, vWeight);\n vec4 id = fragId + pickOffset;\n id.x += d.x + d.y*shape.x;\n\n id.y += floor(id.x / 256.0);\n id.x -= floor(id.x / 256.0) * 256.0;\n\n id.z += floor(id.y / 256.0);\n id.y -= floor(id.y / 256.0) * 256.0;\n\n id.w += floor(id.z / 256.0);\n id.z -= floor(id.z / 256.0) * 256.0;\n\n gl_FragColor = id/255.;\n}\n"]),pickVertex:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\nattribute vec4 pickId;\nattribute vec2 weight;\n\nuniform vec2 shape;\nuniform mat3 viewTransform;\n\nvarying vec4 fragId;\nvarying vec2 vWeight;\n\nvoid main() {\n vWeight = weight;\n\n fragId = pickId;\n\n vec3 vPosition = viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\n gl_Position = vec4(vPosition.xy, 0, vPosition.z);\n}\n"])}},{glslify:410}],256:[function(t,e,r){arguments[4][113][0].apply(r,arguments)},{dup:113}],257:[function(t,e,r){var n=t("glslify"),a=t("gl-shader"),i=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position, nextPosition;\nattribute float arcLength, lineWidth;\nattribute vec4 color;\n\nuniform vec2 screenShape;\nuniform float pixelRatio;\nuniform mat4 model, view, projection;\n\nvarying vec4 fragColor;\nvarying vec3 worldPosition;\nvarying float pixelArcLength;\n\nvec4 project(vec3 p) {\n return projection * view * model * vec4(p, 1.0);\n}\n\nvoid main() {\n vec4 startPoint = project(position);\n vec4 endPoint = project(nextPosition);\n\n vec2 A = startPoint.xy / startPoint.w;\n vec2 B = endPoint.xy / endPoint.w;\n\n float clipAngle = atan(\n (B.y - A.y) * screenShape.y,\n (B.x - A.x) * screenShape.x\n );\n\n vec2 offset = 0.5 * pixelRatio * lineWidth * vec2(\n sin(clipAngle),\n -cos(clipAngle)\n ) / screenShape;\n\n gl_Position = vec4(startPoint.xy + startPoint.w * offset, startPoint.zw);\n\n worldPosition = position;\n pixelArcLength = arcLength;\n fragColor = color;\n}\n"]),o=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform sampler2D dashTexture;\nuniform float dashScale;\nuniform float opacity;\n\nvarying vec3 worldPosition;\nvarying float pixelArcLength;\nvarying vec4 fragColor;\n\nvoid main() {\n if (\n outOfRange(clipBounds[0], clipBounds[1], worldPosition) ||\n fragColor.a * opacity == 0.\n ) discard;\n\n float dashWeight = texture2D(dashTexture, vec2(dashScale * pixelArcLength, 0)).r;\n if(dashWeight < 0.5) {\n discard;\n }\n gl_FragColor = fragColor * opacity;\n}\n"]),s=n(["precision highp float;\n#define GLSLIFY 1\n\n#define FLOAT_MAX 1.70141184e38\n#define FLOAT_MIN 1.17549435e-38\n\n// https://github.com/mikolalysenko/glsl-read-float/blob/master/index.glsl\nvec4 packFloat(float v) {\n float av = abs(v);\n\n //Handle special cases\n if(av < FLOAT_MIN) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n } else if(v > FLOAT_MAX) {\n return vec4(127.0, 128.0, 0.0, 0.0) / 255.0;\n } else if(v < -FLOAT_MAX) {\n return vec4(255.0, 128.0, 0.0, 0.0) / 255.0;\n }\n\n vec4 c = vec4(0,0,0,0);\n\n //Compute exponent and mantissa\n float e = floor(log2(av));\n float m = av * pow(2.0, -e) - 1.0;\n\n //Unpack mantissa\n c[1] = floor(128.0 * m);\n m -= c[1] / 128.0;\n c[2] = floor(32768.0 * m);\n m -= c[2] / 32768.0;\n c[3] = floor(8388608.0 * m);\n\n //Unpack exponent\n float ebias = e + 127.0;\n c[0] = floor(ebias / 2.0);\n ebias -= c[0] * 2.0;\n c[1] += floor(ebias) * 128.0;\n\n //Unpack sign bit\n c[0] += 128.0 * step(0.0, -v);\n\n //Scale back to range\n return c / 255.0;\n}\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform float pickId;\nuniform vec3 clipBounds[2];\n\nvarying vec3 worldPosition;\nvarying float pixelArcLength;\nvarying vec4 fragColor;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], worldPosition)) discard;\n\n gl_FragColor = vec4(pickId/255.0, packFloat(pixelArcLength).xyz);\n}"]),l=[{name:"position",type:"vec3"},{name:"nextPosition",type:"vec3"},{name:"arcLength",type:"float"},{name:"lineWidth",type:"float"},{name:"color",type:"vec4"}];r.createShader=function(t){return a(t,i,o,null,l)},r.createPickShader=function(t){return a(t,i,s,null,l)}},{"gl-shader":304,glslify:410}],258:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl||t.scene&&t.scene.gl,r=h(e);r.attributes.position.location=0,r.attributes.nextPosition.location=1,r.attributes.arcLength.location=2,r.attributes.lineWidth.location=3,r.attributes.color.location=4;var o=f(e);o.attributes.position.location=0,o.attributes.nextPosition.location=1,o.attributes.arcLength.location=2,o.attributes.lineWidth.location=3,o.attributes.color.location=4;for(var s=n(e),l=a(e,[{buffer:s,size:3,offset:0,stride:48},{buffer:s,size:3,offset:12,stride:48},{buffer:s,size:1,offset:24,stride:48},{buffer:s,size:1,offset:28,stride:48},{buffer:s,size:4,offset:32,stride:48}]),u=c(new Array(1024),[256,1,4]),p=0;p<1024;++p)u.data[p]=255;var d=i(e,u);d.wrap=e.REPEAT;var g=new m(e,r,o,s,l,d);return g.update(t),g};var n=t("gl-buffer"),a=t("gl-vao"),i=t("gl-texture2d"),o=new Uint8Array(4),s=new Float32Array(o.buffer);var l=t("binary-search-bounds"),c=t("ndarray"),u=t("./lib/shaders"),h=u.createShader,f=u.createPickShader,p=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function d(t,e){for(var r=0,n=0;n<3;++n){var a=t[n]-e[n];r+=a*a}return Math.sqrt(r)}function g(t){for(var e=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],r=0;r<3;++r)e[0][r]=Math.max(t[0][r],e[0][r]),e[1][r]=Math.min(t[1][r],e[1][r]);return e}function v(t,e,r,n){this.arcLength=t,this.position=e,this.index=r,this.dataCoordinate=n}function m(t,e,r,n,a,i){this.gl=t,this.shader=e,this.pickShader=r,this.buffer=n,this.vao=a,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.points=[],this.arcLength=[],this.vertexCount=0,this.bounds=[[0,0,0],[0,0,0]],this.pickId=0,this.lineWidth=1,this.texture=i,this.dashScale=1,this.opacity=1,this.hasAlpha=!1,this.dirty=!0,this.pixelRatio=1}var y=m.prototype;y.isTransparent=function(){return this.hasAlpha},y.isOpaque=function(){return!this.hasAlpha},y.pickSlots=1,y.setPickBase=function(t){this.pickId=t},y.drawTransparent=y.draw=function(t){if(this.vertexCount){var e=this.gl,r=this.shader,n=this.vao;r.bind(),r.uniforms={model:t.model||p,view:t.view||p,projection:t.projection||p,clipBounds:g(this.clipBounds),dashTexture:this.texture.bind(),dashScale:this.dashScale/this.arcLength[this.arcLength.length-1],opacity:this.opacity,screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount),n.unbind()}},y.drawPick=function(t){if(this.vertexCount){var e=this.gl,r=this.pickShader,n=this.vao;r.bind(),r.uniforms={model:t.model||p,view:t.view||p,projection:t.projection||p,pickId:this.pickId,clipBounds:g(this.clipBounds),screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount),n.unbind()}},y.update=function(t){var e,r;this.dirty=!0;var n=!!t.connectGaps;"dashScale"in t&&(this.dashScale=t.dashScale),this.hasAlpha=!1,"opacity"in t&&(this.opacity=+t.opacity,this.opacity<1&&(this.hasAlpha=!0));var a=[],i=[],o=[],s=0,u=0,h=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],f=t.position||t.positions;if(f){var p=t.color||t.colors||[0,0,0,1],g=t.lineWidth||1,v=!1;t:for(e=1;e<f.length;++e){var m,y,x,b=f[e-1],_=f[e];for(i.push(s),o.push(b.slice()),r=0;r<3;++r){if(isNaN(b[r])||isNaN(_[r])||!isFinite(b[r])||!isFinite(_[r])){if(!n&&a.length>0){for(var w=0;w<24;++w)a.push(a[a.length-12]);u+=2,v=!0}continue t}h[0][r]=Math.min(h[0][r],b[r],_[r]),h[1][r]=Math.max(h[1][r],b[r],_[r])}Array.isArray(p[0])?(m=p.length>e-1?p[e-1]:p.length>0?p[p.length-1]:[0,0,0,1],y=p.length>e?p[e]:p.length>0?p[p.length-1]:[0,0,0,1]):m=y=p,3===m.length&&(m=[m[0],m[1],m[2],1]),3===y.length&&(y=[y[0],y[1],y[2],1]),!this.hasAlpha&&m[3]<1&&(this.hasAlpha=!0),x=Array.isArray(g)?g.length>e-1?g[e-1]:g.length>0?g[g.length-1]:[0,0,0,1]:g;var k=s;if(s+=d(b,_),v){for(r=0;r<2;++r)a.push(b[0],b[1],b[2],_[0],_[1],_[2],k,x,m[0],m[1],m[2],m[3]);u+=2,v=!1}a.push(b[0],b[1],b[2],_[0],_[1],_[2],k,x,m[0],m[1],m[2],m[3],b[0],b[1],b[2],_[0],_[1],_[2],k,-x,m[0],m[1],m[2],m[3],_[0],_[1],_[2],b[0],b[1],b[2],s,-x,y[0],y[1],y[2],y[3],_[0],_[1],_[2],b[0],b[1],b[2],s,x,y[0],y[1],y[2],y[3]),u+=4}}if(this.buffer.update(a),i.push(s),o.push(f[f.length-1].slice()),this.bounds=h,this.vertexCount=u,this.points=o,this.arcLength=i,"dashes"in t){var T=t.dashes.slice();for(T.unshift(0),e=1;e<T.length;++e)T[e]=T[e-1]+T[e];var M=c(new Array(1024),[256,1,4]);for(e=0;e<256;++e){for(r=0;r<4;++r)M.set(e,0,r,0);1&l.le(T,T[T.length-1]*e/255)?M.set(e,0,0,0):M.set(e,0,0,255)}this.texture.setPixels(M)}},y.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()},y.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=function(t,e,r,n){return o[0]=n,o[1]=r,o[2]=e,o[3]=t,s[0]}(t.value[0],t.value[1],t.value[2],0),r=l.le(this.arcLength,e);if(r<0)return null;if(r===this.arcLength.length-1)return new v(this.arcLength[this.arcLength.length-1],this.points[this.points.length-1].slice(),r);for(var n=this.points[r],a=this.points[Math.min(r+1,this.points.length-1)],i=(e-this.arcLength[r])/(this.arcLength[r+1]-this.arcLength[r]),c=1-i,u=[0,0,0],h=0;h<3;++h)u[h]=c*n[h]+i*a[h];var f=Math.min(i<.5?r:r+1,this.points.length-1);return new v(e,u,f,this.points[f])}},{"./lib/shaders":257,"binary-search-bounds":259,"gl-buffer":244,"gl-texture2d":324,"gl-vao":329,ndarray:451}],259:[function(t,e,r){arguments[4][113][0].apply(r,arguments)},{dup:113}],260:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],a=e[2],i=e[3],o=r*i-a*n;return o?(o=1/o,t[0]=i*o,t[1]=-n*o,t[2]=-a*o,t[3]=r*o,t):null}},{}],261:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],a=e[2],i=e[3],o=e[4],s=e[5],l=e[6],c=e[7],u=e[8],h=u*o-s*c,f=-u*i+s*l,p=c*i-o*l,d=r*h+n*f+a*p;return d?(d=1/d,t[0]=h*d,t[1]=(-u*n+a*c)*d,t[2]=(s*n-a*o)*d,t[3]=f*d,t[4]=(u*r-a*l)*d,t[5]=(-s*r+a*i)*d,t[6]=p*d,t[7]=(-c*r+n*l)*d,t[8]=(o*r-n*i)*d,t):null}},{}],262:[function(t,e,r){e.exports=function(t){var e=new Float32Array(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}},{}],263:[function(t,e,r){e.exports=function(){var t=new Float32Array(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},{}],264:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2],a=t[3],i=t[4],o=t[5],s=t[6],l=t[7],c=t[8],u=t[9],h=t[10],f=t[11],p=t[12],d=t[13],g=t[14],v=t[15];return(e*o-r*i)*(h*v-f*g)-(e*s-n*i)*(u*v-f*d)+(e*l-a*i)*(u*g-h*d)+(r*s-n*o)*(c*v-f*p)-(r*l-a*o)*(c*g-h*p)+(n*l-a*s)*(c*d-u*p)}},{}],265:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],a=e[2],i=e[3],o=r+r,s=n+n,l=a+a,c=r*o,u=n*o,h=n*s,f=a*o,p=a*s,d=a*l,g=i*o,v=i*s,m=i*l;return t[0]=1-h-d,t[1]=u+m,t[2]=f-v,t[3]=0,t[4]=u-m,t[5]=1-c-d,t[6]=p+g,t[7]=0,t[8]=f+v,t[9]=p-g,t[10]=1-c-h,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},{}],266:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=e[3],s=n+n,l=a+a,c=i+i,u=n*s,h=n*l,f=n*c,p=a*l,d=a*c,g=i*c,v=o*s,m=o*l,y=o*c;return t[0]=1-(p+g),t[1]=h+y,t[2]=f-m,t[3]=0,t[4]=h-y,t[5]=1-(u+g),t[6]=d+v,t[7]=0,t[8]=f+m,t[9]=d-v,t[10]=1-(u+p),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}},{}],267:[function(t,e,r){e.exports=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},{}],268:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],a=e[2],i=e[3],o=e[4],s=e[5],l=e[6],c=e[7],u=e[8],h=e[9],f=e[10],p=e[11],d=e[12],g=e[13],v=e[14],m=e[15],y=r*s-n*o,x=r*l-a*o,b=r*c-i*o,_=n*l-a*s,w=n*c-i*s,k=a*c-i*l,T=u*g-h*d,M=u*v-f*d,A=u*m-p*d,S=h*v-f*g,E=h*m-p*g,L=f*m-p*v,C=y*L-x*E+b*S+_*A-w*M+k*T;if(!C)return null;return C=1/C,t[0]=(s*L-l*E+c*S)*C,t[1]=(a*E-n*L-i*S)*C,t[2]=(g*k-v*w+m*_)*C,t[3]=(f*w-h*k-p*_)*C,t[4]=(l*A-o*L-c*M)*C,t[5]=(r*L-a*A+i*M)*C,t[6]=(v*b-d*k-m*x)*C,t[7]=(u*k-f*b+p*x)*C,t[8]=(o*E-s*A+c*T)*C,t[9]=(n*A-r*E-i*T)*C,t[10]=(d*w-g*b+m*y)*C,t[11]=(h*b-u*w-p*y)*C,t[12]=(s*M-o*S-l*T)*C,t[13]=(r*S-n*M+a*T)*C,t[14]=(g*x-d*_-v*y)*C,t[15]=(u*_-h*x+f*y)*C,t}},{}],269:[function(t,e,r){var n=t("./identity");e.exports=function(t,e,r,a){var i,o,s,l,c,u,h,f,p,d,g=e[0],v=e[1],m=e[2],y=a[0],x=a[1],b=a[2],_=r[0],w=r[1],k=r[2];if(Math.abs(g-_)<1e-6&&Math.abs(v-w)<1e-6&&Math.abs(m-k)<1e-6)return n(t);h=g-_,f=v-w,p=m-k,d=1/Math.sqrt(h*h+f*f+p*p),i=x*(p*=d)-b*(f*=d),o=b*(h*=d)-y*p,s=y*f-x*h,(d=Math.sqrt(i*i+o*o+s*s))?(i*=d=1/d,o*=d,s*=d):(i=0,o=0,s=0);l=f*s-p*o,c=p*i-h*s,u=h*o-f*i,(d=Math.sqrt(l*l+c*c+u*u))?(l*=d=1/d,c*=d,u*=d):(l=0,c=0,u=0);return t[0]=i,t[1]=l,t[2]=h,t[3]=0,t[4]=o,t[5]=c,t[6]=f,t[7]=0,t[8]=s,t[9]=u,t[10]=p,t[11]=0,t[12]=-(i*g+o*v+s*m),t[13]=-(l*g+c*v+u*m),t[14]=-(h*g+f*v+p*m),t[15]=1,t}},{"./identity":267}],270:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=e[3],s=e[4],l=e[5],c=e[6],u=e[7],h=e[8],f=e[9],p=e[10],d=e[11],g=e[12],v=e[13],m=e[14],y=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*h+w*g,t[1]=x*a+b*l+_*f+w*v,t[2]=x*i+b*c+_*p+w*m,t[3]=x*o+b*u+_*d+w*y,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*h+w*g,t[5]=x*a+b*l+_*f+w*v,t[6]=x*i+b*c+_*p+w*m,t[7]=x*o+b*u+_*d+w*y,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*h+w*g,t[9]=x*a+b*l+_*f+w*v,t[10]=x*i+b*c+_*p+w*m,t[11]=x*o+b*u+_*d+w*y,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*h+w*g,t[13]=x*a+b*l+_*f+w*v,t[14]=x*i+b*c+_*p+w*m,t[15]=x*o+b*u+_*d+w*y,t}},{}],271:[function(t,e,r){e.exports=function(t,e,r,n,a,i,o){var s=1/(e-r),l=1/(n-a),c=1/(i-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*c,t[11]=0,t[12]=(e+r)*s,t[13]=(a+n)*l,t[14]=(o+i)*c,t[15]=1,t}},{}],272:[function(t,e,r){e.exports=function(t,e,r,n,a){var i=1/Math.tan(e/2),o=1/(n-a);return t[0]=i/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(a+n)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*a*n*o,t[15]=0,t}},{}],273:[function(t,e,r){e.exports=function(t,e,r,n){var a,i,o,s,l,c,u,h,f,p,d,g,v,m,y,x,b,_,w,k,T,M,A,S,E=n[0],L=n[1],C=n[2],P=Math.sqrt(E*E+L*L+C*C);if(Math.abs(P)<1e-6)return null;E*=P=1/P,L*=P,C*=P,a=Math.sin(r),i=Math.cos(r),o=1-i,s=e[0],l=e[1],c=e[2],u=e[3],h=e[4],f=e[5],p=e[6],d=e[7],g=e[8],v=e[9],m=e[10],y=e[11],x=E*E*o+i,b=L*E*o+C*a,_=C*E*o-L*a,w=E*L*o-C*a,k=L*L*o+i,T=C*L*o+E*a,M=E*C*o+L*a,A=L*C*o-E*a,S=C*C*o+i,t[0]=s*x+h*b+g*_,t[1]=l*x+f*b+v*_,t[2]=c*x+p*b+m*_,t[3]=u*x+d*b+y*_,t[4]=s*w+h*k+g*T,t[5]=l*w+f*k+v*T,t[6]=c*w+p*k+m*T,t[7]=u*w+d*k+y*T,t[8]=s*M+h*A+g*S,t[9]=l*M+f*A+v*S,t[10]=c*M+p*A+m*S,t[11]=u*M+d*A+y*S,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t}},{}],274:[function(t,e,r){e.exports=function(t,e,r){var n=Math.sin(r),a=Math.cos(r),i=e[4],o=e[5],s=e[6],l=e[7],c=e[8],u=e[9],h=e[10],f=e[11];e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t[4]=i*a+c*n,t[5]=o*a+u*n,t[6]=s*a+h*n,t[7]=l*a+f*n,t[8]=c*a-i*n,t[9]=u*a-o*n,t[10]=h*a-s*n,t[11]=f*a-l*n,t}},{}],275:[function(t,e,r){e.exports=function(t,e,r){var n=Math.sin(r),a=Math.cos(r),i=e[0],o=e[1],s=e[2],l=e[3],c=e[8],u=e[9],h=e[10],f=e[11];e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t[0]=i*a-c*n,t[1]=o*a-u*n,t[2]=s*a-h*n,t[3]=l*a-f*n,t[8]=i*n+c*a,t[9]=o*n+u*a,t[10]=s*n+h*a,t[11]=l*n+f*a,t}},{}],276:[function(t,e,r){e.exports=function(t,e,r){var n=Math.sin(r),a=Math.cos(r),i=e[0],o=e[1],s=e[2],l=e[3],c=e[4],u=e[5],h=e[6],f=e[7];e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t[0]=i*a+c*n,t[1]=o*a+u*n,t[2]=s*a+h*n,t[3]=l*a+f*n,t[4]=c*a-i*n,t[5]=u*a-o*n,t[6]=h*a-s*n,t[7]=f*a-l*n,t}},{}],277:[function(t,e,r){e.exports=function(t,e,r){var n=r[0],a=r[1],i=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*a,t[5]=e[5]*a,t[6]=e[6]*a,t[7]=e[7]*a,t[8]=e[8]*i,t[9]=e[9]*i,t[10]=e[10]*i,t[11]=e[11]*i,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}},{}],278:[function(t,e,r){e.exports=function(t,e,r){var n,a,i,o,s,l,c,u,h,f,p,d,g=r[0],v=r[1],m=r[2];e===t?(t[12]=e[0]*g+e[4]*v+e[8]*m+e[12],t[13]=e[1]*g+e[5]*v+e[9]*m+e[13],t[14]=e[2]*g+e[6]*v+e[10]*m+e[14],t[15]=e[3]*g+e[7]*v+e[11]*m+e[15]):(n=e[0],a=e[1],i=e[2],o=e[3],s=e[4],l=e[5],c=e[6],u=e[7],h=e[8],f=e[9],p=e[10],d=e[11],t[0]=n,t[1]=a,t[2]=i,t[3]=o,t[4]=s,t[5]=l,t[6]=c,t[7]=u,t[8]=h,t[9]=f,t[10]=p,t[11]=d,t[12]=n*g+s*v+h*m+e[12],t[13]=a*g+l*v+f*m+e[13],t[14]=i*g+c*v+p*m+e[14],t[15]=o*g+u*v+d*m+e[15]);return t}},{}],279:[function(t,e,r){e.exports=function(t,e){if(t===e){var r=e[1],n=e[2],a=e[3],i=e[6],o=e[7],s=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=i,t[11]=e[14],t[12]=a,t[13]=o,t[14]=s}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}},{}],280:[function(t,e,r){"use strict";e.exports=function(t,e){switch(e.length){case 0:break;case 1:t[0]=1/e[0];break;case 4:n(t,e);break;case 9:a(t,e);break;case 16:i(t,e);break;default:throw new Error("currently supports matrices up to 4x4")}return t};var n=t("gl-mat2/invert"),a=t("gl-mat3/invert"),i=t("gl-mat4/invert")},{"gl-mat2/invert":260,"gl-mat3/invert":261,"gl-mat4/invert":268}],281:[function(t,e,r){"use strict";var n=t("barycentric"),a=t("polytope-closest-point/lib/closest_point_2d.js");function i(t,e){for(var r=[0,0,0,0],n=0;n<4;++n)for(var a=0;a<4;++a)r[a]+=t[4*n+a]*e[n];return r}function o(t,e,r,n,a){for(var o=i(n,i(r,i(e,[t[0],t[1],t[2],1]))),s=0;s<3;++s)o[s]/=o[3];return[.5*a[0]*(1+o[0]),.5*a[1]*(1-o[1])]}function s(t,e){for(var r=[0,0,0],n=0;n<t.length;++n)for(var a=t[n],i=e[n],o=0;o<3;++o)r[o]+=i*a[o];return r}e.exports=function(t,e,r,i,l,c){if(1===t.length)return[0,t[0].slice()];for(var u=new Array(t.length),h=0;h<t.length;++h)u[h]=o(t[h],r,i,l,c);for(var f=0,p=1/0,h=0;h<u.length;++h){for(var d=0,g=0;g<2;++g)d+=Math.pow(u[h][g]-e[g],2);d<p&&(p=d,f=h)}for(var v=function(t,e){if(2===t.length){for(var r=0,i=0,o=0;o<2;++o)r+=Math.pow(e[o]-t[0][o],2),i+=Math.pow(e[o]-t[1][o],2);return r=Math.sqrt(r),i=Math.sqrt(i),r+i<1e-6?[1,0]:[i/(r+i),r/(i+r)]}if(3===t.length){var s=[0,0];return a(t[0],t[1],t[2],e,s),n(t,s)}return[]}(u,e),m=0,h=0;h<3;++h){if(v[h]<-.001||v[h]>1.0001)return null;m+=v[h]}if(Math.abs(m-1)>.001)return null;return[f,s(t,v),v]}},{barycentric:75,"polytope-closest-point/lib/closest_point_2d.js":482}],282:[function(t,e,r){var n=t("glslify"),a=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position, normal;\nattribute vec4 color;\nattribute vec2 uv;\n\nuniform mat4 model\n , view\n , projection\n , inverseModel;\nuniform vec3 eyePosition\n , lightPosition;\n\nvarying vec3 f_normal\n , f_lightDirection\n , f_eyeDirection\n , f_data;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvec4 project(vec3 p) {\n return projection * view * model * vec4(p, 1.0);\n}\n\nvoid main() {\n gl_Position = project(position);\n\n //Lighting geometry parameters\n vec4 cameraCoordinate = view * vec4(position , 1.0);\n cameraCoordinate.xyz /= cameraCoordinate.w;\n f_lightDirection = lightPosition - cameraCoordinate.xyz;\n f_eyeDirection = eyePosition - cameraCoordinate.xyz;\n f_normal = normalize((vec4(normal, 0.0) * inverseModel).xyz);\n\n f_color = color;\n f_data = position;\n f_uv = uv;\n}\n"]),i=n(["#extension GL_OES_standard_derivatives : enable\n\nprecision highp float;\n#define GLSLIFY 1\n\nfloat beckmannDistribution(float x, float roughness) {\n float NdotH = max(x, 0.0001);\n float cos2Alpha = NdotH * NdotH;\n float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n float roughness2 = roughness * roughness;\n float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n return exp(tan2Alpha / roughness2) / denom;\n}\n\nfloat cookTorranceSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float roughness,\n float fresnel) {\n\n float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\n float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\n\n //Half angle vector\n vec3 H = normalize(lightDirection + viewDirection);\n\n //Geometric term\n float NdotH = max(dot(surfaceNormal, H), 0.0);\n float VdotH = max(dot(viewDirection, H), 0.000001);\n float LdotH = max(dot(lightDirection, H), 0.000001);\n float G1 = (2.0 * NdotH * VdotN) / VdotH;\n float G2 = (2.0 * NdotH * LdotN) / LdotH;\n float G = min(1.0, min(G1, G2));\n \n //Distribution term\n float D = beckmannDistribution(NdotH, roughness);\n\n //Fresnel term\n float F = pow(1.0 - VdotN, fresnel);\n\n //Multiply terms and done\n return G * F * D / max(3.14159265 * VdotN, 0.000001);\n}\n\n//#pragma glslify: beckmann = require(glsl-specular-beckmann) // used in gl-surface3d\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float roughness\n , fresnel\n , kambient\n , kdiffuse\n , kspecular;\nuniform sampler2D texture;\n\nvarying vec3 f_normal\n , f_lightDirection\n , f_eyeDirection\n , f_data;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n if (f_color.a == 0.0 ||\n outOfRange(clipBounds[0], clipBounds[1], f_data)\n ) discard;\n\n vec3 N = normalize(f_normal);\n vec3 L = normalize(f_lightDirection);\n vec3 V = normalize(f_eyeDirection);\n\n if(gl_FrontFacing) {\n N = -N;\n }\n\n float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\n //float specular = max(0.0, beckmann(L, V, N, roughness)); // used in gl-surface3d\n\n float diffuse = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n vec4 surfaceColor = vec4(f_color.rgb, 1.0) * texture2D(texture, f_uv);\n vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular, 1.0);\n\n gl_FragColor = litColor * f_color.a;\n}\n"]),o=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 uv;\n\nuniform mat4 model, view, projection;\n\nvarying vec4 f_color;\nvarying vec3 f_data;\nvarying vec2 f_uv;\n\nvoid main() {\n gl_Position = projection * view * model * vec4(position, 1.0);\n f_color = color;\n f_data = position;\n f_uv = uv;\n}"]),s=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform sampler2D texture;\nuniform float opacity;\n\nvarying vec4 f_color;\nvarying vec3 f_data;\nvarying vec2 f_uv;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_data)) discard;\n\n gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\n}"]),l=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 uv;\nattribute float pointSize;\n\nuniform mat4 model, view, projection;\nuniform vec3 clipBounds[2];\n\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n gl_Position = vec4(0.0, 0.0 ,0.0 ,0.0);\n } else {\n gl_Position = projection * view * model * vec4(position, 1.0);\n }\n gl_PointSize = pointSize;\n f_color = color;\n f_uv = uv;\n}"]),c=n(["precision highp float;\n#define GLSLIFY 1\n\nuniform sampler2D texture;\nuniform float opacity;\n\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n vec2 pointR = gl_PointCoord.xy - vec2(0.5, 0.5);\n if(dot(pointR, pointR) > 0.25) {\n discard;\n }\n gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\n}"]),u=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n gl_Position = projection * view * model * vec4(position, 1.0);\n f_id = id;\n f_position = position;\n}"]),h=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float pickId;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n\n gl_FragColor = vec4(pickId, f_id.xyz);\n}"]),f=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute float pointSize;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\nuniform vec3 clipBounds[2];\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n gl_Position = vec4(0.0, 0.0, 0.0, 0.0);\n } else {\n gl_Position = projection * view * model * vec4(position, 1.0);\n gl_PointSize = pointSize;\n }\n f_id = id;\n f_position = position;\n}"]),p=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\n\nuniform mat4 model, view, projection;\n\nvoid main() {\n gl_Position = projection * view * model * vec4(position, 1.0);\n}"]),d=n(["precision highp float;\n#define GLSLIFY 1\n\nuniform vec3 contourColor;\n\nvoid main() {\n gl_FragColor = vec4(contourColor, 1.0);\n}\n"]);r.meshShader={vertex:a,fragment:i,attributes:[{name:"position",type:"vec3"},{name:"normal",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"}]},r.wireShader={vertex:o,fragment:s,attributes:[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"}]},r.pointShader={vertex:l,fragment:c,attributes:[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"},{name:"pointSize",type:"float"}]},r.pickShader={vertex:u,fragment:h,attributes:[{name:"position",type:"vec3"},{name:"id",type:"vec4"}]},r.pointPickShader={vertex:f,fragment:h,attributes:[{name:"position",type:"vec3"},{name:"pointSize",type:"float"},{name:"id",type:"vec4"}]},r.contourShader={vertex:p,fragment:d,attributes:[{name:"position",type:"vec3"}]}},{glslify:410}],283:[function(t,e,r){"use strict";var n=t("gl-shader"),a=t("gl-buffer"),i=t("gl-vao"),o=t("gl-texture2d"),s=t("normals"),l=t("gl-mat4/multiply"),c=t("gl-mat4/invert"),u=t("ndarray"),h=t("colormap"),f=t("simplicial-complex-contour"),p=t("typedarray-pool"),d=t("./lib/shaders"),g=t("./lib/closest-point"),v=d.meshShader,m=d.wireShader,y=d.pointShader,x=d.pickShader,b=d.pointPickShader,_=d.contourShader,w=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function k(t,e,r,n,a,i,o,s,l,c,u,h,f,p,d,g,v,m,y,x,b,_,k,T,M,A,S){this.gl=t,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=r,this.lineShader=n,this.pointShader=a,this.pickShader=i,this.pointPickShader=o,this.contourShader=s,this.trianglePositions=l,this.triangleColors=u,this.triangleNormals=f,this.triangleUVs=h,this.triangleIds=c,this.triangleVAO=p,this.triangleCount=0,this.lineWidth=1,this.edgePositions=d,this.edgeColors=v,this.edgeUVs=m,this.edgeIds=g,this.edgeVAO=y,this.edgeCount=0,this.pointPositions=x,this.pointColors=_,this.pointUVs=k,this.pointSizes=T,this.pointIds=b,this.pointVAO=M,this.pointCount=0,this.contourLineWidth=1,this.contourPositions=A,this.contourVAO=S,this.contourCount=0,this.contourColor=[0,0,0],this.contourEnable=!0,this.pickVertex=!0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.hasAlpha=!1,this.opacityscale=!1,this._model=w,this._view=w,this._projection=w,this._resolution=[1,1]}var T=k.prototype;function M(t,e){if(!e)return 1;if(!e.length)return 1;for(var r=0;r<e.length;++r){if(e.length<2)return 1;if(e[r][0]===t)return e[r][1];if(e[r][0]>t&&r>0){var n=(e[r][0]-t)/(e[r][0]-e[r-1][0]);return e[r][1]*(1-n)+n*e[r-1][1]}}return 1}function A(t){var e=n(t,y.vertex,y.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.pointSize.location=4,e}function S(t){var e=n(t,x.vertex,x.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e}function E(t){var e=n(t,b.vertex,b.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e.attributes.pointSize.location=4,e}function L(t){var e=n(t,_.vertex,_.fragment);return e.attributes.position.location=0,e}T.isOpaque=function(){return!this.hasAlpha},T.isTransparent=function(){return this.hasAlpha},T.pickSlots=1,T.setPickBase=function(t){this.pickId=t},T.highlight=function(t){if(t&&this.contourEnable){for(var e=f(this.cells,this.intensity,t.intensity),r=e.cells,n=e.vertexIds,a=e.vertexWeights,i=r.length,o=p.mallocFloat32(6*i),s=0,l=0;l<i;++l)for(var c=r[l],u=0;u<2;++u){var h=c[0];2===c.length&&(h=c[u]);for(var d=n[h][0],g=n[h][1],v=a[h],m=1-v,y=this.positions[d],x=this.positions[g],b=0;b<3;++b)o[s++]=v*y[b]+m*x[b]}this.contourCount=s/3|0,this.contourPositions.update(o.subarray(0,s)),p.free(o)}else this.contourCount=0},T.update=function(t){t=t||{};var e=this.gl;this.dirty=!0,"contourEnable"in t&&(this.contourEnable=t.contourEnable),"contourColor"in t&&(this.contourColor=t.contourColor),"lineWidth"in t&&(this.lineWidth=t.lineWidth),"lightPosition"in t&&(this.lightPosition=t.lightPosition),this.hasAlpha=!1,"opacity"in t&&(this.opacity=t.opacity,this.opacity<1&&(this.hasAlpha=!0)),"opacityscale"in t&&(this.opacityscale=t.opacityscale,this.hasAlpha=!0),"ambient"in t&&(this.ambientLight=t.ambient),"diffuse"in t&&(this.diffuseLight=t.diffuse),"specular"in t&&(this.specularLight=t.specular),"roughness"in t&&(this.roughness=t.roughness),"fresnel"in t&&(this.fresnel=t.fresnel),t.texture?(this.texture.dispose(),this.texture=o(e,t.texture)):t.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=e.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=e.LINEAR,this.texture.setPixels(function(t,e){for(var r=h({colormap:t,nshades:256,format:"rgba"}),n=new Uint8Array(1024),a=0;a<256;++a){for(var i=r[a],o=0;o<3;++o)n[4*a+o]=i[o];n[4*a+3]=e?255*M(a/255,e):255*i[3]}return u(n,[256,256,4],[4,0,1])}(t.colormap,this.opacityscale)),this.texture.generateMipmap());var r=t.cells,n=t.positions;if(n&&r){var a=[],i=[],l=[],c=[],f=[],p=[],d=[],g=[],v=[],m=[],y=[],x=[],b=[],_=[];this.cells=r,this.positions=n;var w=t.vertexNormals,k=t.cellNormals,T=void 0===t.vertexNormalsEpsilon?1e-6:t.vertexNormalsEpsilon,A=void 0===t.faceNormalsEpsilon?1e-6:t.faceNormalsEpsilon;t.useFacetNormals&&!k&&(k=s.faceNormals(r,n,A)),k||w||(w=s.vertexNormals(r,n,T));var S=t.vertexColors,E=t.cellColors,L=t.meshColor||[1,1,1,1],C=t.vertexUVs,P=t.vertexIntensity,O=t.cellUVs,z=t.cellIntensity,I=1/0,D=-1/0;if(!C&&!O)if(P)if(t.vertexIntensityBounds)I=+t.vertexIntensityBounds[0],D=+t.vertexIntensityBounds[1];else for(var R=0;R<P.length;++R){var F=P[R];I=Math.min(I,F),D=Math.max(D,F)}else if(z)if(t.cellIntensityBounds)I=+t.cellIntensityBounds[0],D=+t.cellIntensityBounds[1];else for(R=0;R<z.length;++R){F=z[R];I=Math.min(I,F),D=Math.max(D,F)}else for(R=0;R<n.length;++R){F=n[R][2];I=Math.min(I,F),D=Math.max(D,F)}this.intensity=P||(z||function(t){for(var e=t.length,r=new Array(e),n=0;n<e;++n)r[n]=t[n][2];return r}(n)),this.pickVertex=!(z||E);var B=t.pointSizes,N=t.pointSize||1;this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(R=0;R<n.length;++R)for(var j=n[R],V=0;V<3;++V)!isNaN(j[V])&&isFinite(j[V])&&(this.bounds[0][V]=Math.min(this.bounds[0][V],j[V]),this.bounds[1][V]=Math.max(this.bounds[1][V],j[V]));var U=0,q=0,H=0;t:for(R=0;R<r.length;++R){var G=r[R];switch(G.length){case 1:for(j=n[W=G[0]],V=0;V<3;++V)if(isNaN(j[V])||!isFinite(j[V]))continue t;m.push(j[0],j[1],j[2]),X=S?S[W]:E?E[R]:L,this.opacityscale&&P?i.push(X[0],X[1],X[2],this.opacity*M((P[W]-I)/(D-I),this.opacityscale)):3===X.length?y.push(X[0],X[1],X[2],this.opacity):(y.push(X[0],X[1],X[2],X[3]*this.opacity),X[3]<1&&(this.hasAlpha=!0)),Z=C?C[W]:P?[(P[W]-I)/(D-I),0]:O?O[R]:z?[(z[R]-I)/(D-I),0]:[(j[2]-I)/(D-I),0],x.push(Z[0],Z[1]),B?b.push(B[W]):b.push(N),_.push(R),H+=1;break;case 2:for(V=0;V<2;++V){j=n[W=G[V]];for(var Y=0;Y<3;++Y)if(isNaN(j[Y])||!isFinite(j[Y]))continue t}for(V=0;V<2;++V){j=n[W=G[V]];p.push(j[0],j[1],j[2]),X=S?S[W]:E?E[R]:L,this.opacityscale&&P?i.push(X[0],X[1],X[2],this.opacity*M((P[W]-I)/(D-I),this.opacityscale)):3===X.length?d.push(X[0],X[1],X[2],this.opacity):(d.push(X[0],X[1],X[2],X[3]*this.opacity),X[3]<1&&(this.hasAlpha=!0)),Z=C?C[W]:P?[(P[W]-I)/(D-I),0]:O?O[R]:z?[(z[R]-I)/(D-I),0]:[(j[2]-I)/(D-I),0],g.push(Z[0],Z[1]),v.push(R)}q+=1;break;case 3:for(V=0;V<3;++V)for(j=n[W=G[V]],Y=0;Y<3;++Y)if(isNaN(j[Y])||!isFinite(j[Y]))continue t;for(V=0;V<3;++V){var W,X,Z,J;j=n[W=G[2-V]];a.push(j[0],j[1],j[2]),(X=S?S[W]:E?E[R]:L)?this.opacityscale&&P?i.push(X[0],X[1],X[2],this.opacity*M((P[W]-I)/(D-I),this.opacityscale)):3===X.length?i.push(X[0],X[1],X[2],this.opacity):(i.push(X[0],X[1],X[2],X[3]*this.opacity),X[3]<1&&(this.hasAlpha=!0)):i.push(.5,.5,.5,1),Z=C?C[W]:P?[(P[W]-I)/(D-I),0]:O?O[R]:z?[(z[R]-I)/(D-I),0]:[(j[2]-I)/(D-I),0],c.push(Z[0],Z[1]),J=w?w[W]:k[R],l.push(J[0],J[1],J[2]),f.push(R)}U+=1}}this.pointCount=H,this.edgeCount=q,this.triangleCount=U,this.pointPositions.update(m),this.pointColors.update(y),this.pointUVs.update(x),this.pointSizes.update(b),this.pointIds.update(new Uint32Array(_)),this.edgePositions.update(p),this.edgeColors.update(d),this.edgeUVs.update(g),this.edgeIds.update(new Uint32Array(v)),this.trianglePositions.update(a),this.triangleColors.update(i),this.triangleUVs.update(c),this.triangleNormals.update(l),this.triangleIds.update(new Uint32Array(f))}},T.drawTransparent=T.draw=function(t){t=t||{};for(var e=this.gl,r=t.model||w,n=t.view||w,a=t.projection||w,i=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)i[0][o]=Math.max(i[0][o],this.clipBounds[0][o]),i[1][o]=Math.min(i[1][o],this.clipBounds[1][o]);var s={model:r,view:n,projection:a,inverseModel:w.slice(),clipBounds:i,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],contourColor:this.contourColor,texture:0};s.inverseModel=c(s.inverseModel,s.model),e.disable(e.CULL_FACE),this.texture.bind(0);var u=new Array(16);l(u,s.view,s.model),l(u,s.projection,u),c(u,u);for(o=0;o<3;++o)s.eyePosition[o]=u[12+o]/u[15];var h,f=u[15];for(o=0;o<3;++o)f+=this.lightPosition[o]*u[4*o+3];for(o=0;o<3;++o){for(var p=u[12+o],d=0;d<3;++d)p+=u[4*d+o]*this.lightPosition[d];s.lightPosition[o]=p/f}this.triangleCount>0&&((h=this.triShader).bind(),h.uniforms=s,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind());this.edgeCount>0&&this.lineWidth>0&&((h=this.lineShader).bind(),h.uniforms=s,this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind());this.pointCount>0&&((h=this.pointShader).bind(),h.uniforms=s,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind());this.contourEnable&&this.contourCount>0&&this.contourLineWidth>0&&((h=this.contourShader).bind(),h.uniforms=s,this.contourVAO.bind(),e.drawArrays(e.LINES,0,this.contourCount),this.contourVAO.unbind())},T.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||w,n=t.view||w,a=t.projection||w,i=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)i[0][o]=Math.max(i[0][o],this.clipBounds[0][o]),i[1][o]=Math.min(i[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(a),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s,l={model:r,view:n,projection:a,clipBounds:i,pickId:this.pickId/255};((s=this.pickShader).bind(),s.uniforms=l,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&(this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind()),this.pointCount>0)&&((s=this.pointPickShader).bind(),s.uniforms=l,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind())},T.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;for(var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions,a=new Array(r.length),i=0;i<r.length;++i)a[i]=n[r[i]];var o=t.coord[0],s=t.coord[1];if(!this.pickVertex){var l=this.positions[r[0]],c=this.positions[r[1]],u=this.positions[r[2]],h=[(l[0]+c[0]+u[0])/3,(l[1]+c[1]+u[1])/3,(l[2]+c[2]+u[2])/3];return{_cellCenter:!0,position:[o,s],index:e,cell:r,cellId:e,intensity:this.intensity[e],dataCoordinate:h}}var f=g(a,[o*this.pixelRatio,this._resolution[1]-s*this.pixelRatio],this._model,this._view,this._projection,this._resolution);if(!f)return null;var p=f[2],d=0;for(i=0;i<r.length;++i)d+=p[i]*this.intensity[r[i]];return{position:f[1],index:r[f[0]],cell:r,cellId:e,intensity:d,dataCoordinate:this.positions[r[f[0]]]}},T.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.lineShader.dispose(),this.pointShader.dispose(),this.pickShader.dispose(),this.pointPickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleNormals.dispose(),this.triangleIds.dispose(),this.edgeVAO.dispose(),this.edgePositions.dispose(),this.edgeColors.dispose(),this.edgeUVs.dispose(),this.edgeIds.dispose(),this.pointVAO.dispose(),this.pointPositions.dispose(),this.pointColors.dispose(),this.pointUVs.dispose(),this.pointSizes.dispose(),this.pointIds.dispose(),this.contourVAO.dispose(),this.contourPositions.dispose(),this.contourShader.dispose()},e.exports=function(t,e){if(1===arguments.length&&(t=(e=t).gl),!(t.getExtension("OES_standard_derivatives")||t.getExtension("MOZ_OES_standard_derivatives")||t.getExtension("WEBKIT_OES_standard_derivatives")))throw new Error("derivatives not supported");var r=function(t){var e=n(t,v.vertex,v.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.normal.location=4,e}(t),s=function(t){var e=n(t,m.vertex,m.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e}(t),l=A(t),c=S(t),h=E(t),f=L(t),p=o(t,u(new Uint8Array([255,255,255,255]),[1,1,4]));p.generateMipmap(),p.minFilter=t.LINEAR_MIPMAP_LINEAR,p.magFilter=t.LINEAR;var d=a(t),g=a(t),y=a(t),x=a(t),b=a(t),_=i(t,[{buffer:d,type:t.FLOAT,size:3},{buffer:b,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:g,type:t.FLOAT,size:4},{buffer:y,type:t.FLOAT,size:2},{buffer:x,type:t.FLOAT,size:3}]),w=a(t),T=a(t),M=a(t),C=a(t),P=i(t,[{buffer:w,type:t.FLOAT,size:3},{buffer:C,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:T,type:t.FLOAT,size:4},{buffer:M,type:t.FLOAT,size:2}]),O=a(t),z=a(t),I=a(t),D=a(t),R=a(t),F=i(t,[{buffer:O,type:t.FLOAT,size:3},{buffer:R,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:z,type:t.FLOAT,size:4},{buffer:I,type:t.FLOAT,size:2},{buffer:D,type:t.FLOAT,size:1}]),B=a(t),N=new k(t,p,r,s,l,c,h,f,d,b,g,y,x,_,w,C,T,M,P,O,R,z,I,D,F,B,i(t,[{buffer:B,type:t.FLOAT,size:3}]));return N.update(e),N}},{"./lib/closest-point":281,"./lib/shaders":282,colormap:128,"gl-buffer":244,"gl-mat4/invert":268,"gl-mat4/multiply":270,"gl-shader":304,"gl-texture2d":324,"gl-vao":329,ndarray:451,normals:454,"simplicial-complex-contour":516,"typedarray-pool":543}],284:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl,r=n(e,[0,0,0,1,1,0,1,1]),s=a(e,i.boxVert,i.lineFrag);return new o(t,r,s)};var n=t("gl-buffer"),a=t("gl-shader"),i=t("./shaders");function o(t,e,r){this.plot=t,this.vbo=e,this.shader=r}var s,l,c=o.prototype;c.bind=function(){var t=this.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox=this.plot.screenBox},c.drawBox=(s=[0,0],l=[0,0],function(t,e,r,n,a){var i=this.plot,o=this.shader,c=i.gl;s[0]=t,s[1]=e,l[0]=r,l[1]=n,o.uniforms.lo=s,o.uniforms.hi=l,o.uniforms.color=a,c.drawArrays(c.TRIANGLE_STRIP,0,4)}),c.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},{"./shaders":287,"gl-buffer":244,"gl-shader":304}],285:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl,r=n(e),i=a(e,o.gridVert,o.gridFrag),l=a(e,o.tickVert,o.gridFrag);return new s(t,r,i,l)};var n=t("gl-buffer"),a=t("gl-shader"),i=t("binary-search-bounds"),o=t("./shaders");function s(t,e,r,n){this.plot=t,this.vbo=e,this.shader=r,this.tickShader=n,this.ticks=[[],[]]}function l(t,e){return t-e}var c,u,h,f,p,d=s.prototype;d.draw=(c=[0,0],u=[0,0],h=[0,0],function(){for(var t=this.plot,e=this.vbo,r=this.shader,n=this.ticks,a=t.gl,i=t._tickBounds,o=t.dataBox,s=t.viewBox,l=t.gridLineWidth,f=t.gridLineColor,p=t.gridLineEnable,d=t.pixelRatio,g=0;g<2;++g){var v=i[g],m=i[g+2]-v,y=.5*(o[g+2]+o[g]),x=o[g+2]-o[g];u[g]=2*m/x,c[g]=2*(v-y)/x}r.bind(),e.bind(),r.attributes.dataCoord.pointer(),r.uniforms.dataShift=c,r.uniforms.dataScale=u;var b=0;for(g=0;g<2;++g){h[0]=h[1]=0,h[g]=1,r.uniforms.dataAxis=h,r.uniforms.lineWidth=l[g]/(s[g+2]-s[g])*d,r.uniforms.color=f[g];var _=6*n[g].length;p[g]&&_&&a.drawArrays(a.TRIANGLES,b,_),b+=_}}),d.drawTickMarks=function(){var t=[0,0],e=[0,0],r=[1,0],n=[0,1],a=[0,0],o=[0,0];return function(){for(var s=this.plot,c=this.vbo,u=this.tickShader,h=this.ticks,f=s.gl,p=s._tickBounds,d=s.dataBox,g=s.viewBox,v=s.pixelRatio,m=s.screenBox,y=m[2]-m[0],x=m[3]-m[1],b=g[2]-g[0],_=g[3]-g[1],w=0;w<2;++w){var k=p[w],T=p[w+2]-k,M=.5*(d[w+2]+d[w]),A=d[w+2]-d[w];e[w]=2*T/A,t[w]=2*(k-M)/A}e[0]*=b/y,t[0]*=b/y,e[1]*=_/x,t[1]*=_/x,u.bind(),c.bind(),u.attributes.dataCoord.pointer();var S=u.uniforms;S.dataShift=t,S.dataScale=e;var E=s.tickMarkLength,L=s.tickMarkWidth,C=s.tickMarkColor,P=6*h[0].length,O=Math.min(i.ge(h[0],(d[0]-p[0])/(p[2]-p[0]),l),h[0].length),z=Math.min(i.gt(h[0],(d[2]-p[0])/(p[2]-p[0]),l),h[0].length),I=0+6*O,D=6*Math.max(0,z-O),R=Math.min(i.ge(h[1],(d[1]-p[1])/(p[3]-p[1]),l),h[1].length),F=Math.min(i.gt(h[1],(d[3]-p[1])/(p[3]-p[1]),l),h[1].length),B=P+6*R,N=6*Math.max(0,F-R);a[0]=2*(g[0]-E[1])/y-1,a[1]=(g[3]+g[1])/x-1,o[0]=E[1]*v/y,o[1]=L[1]*v/x,N&&(S.color=C[1],S.tickScale=o,S.dataAxis=n,S.screenOffset=a,f.drawArrays(f.TRIANGLES,B,N)),a[0]=(g[2]+g[0])/y-1,a[1]=2*(g[1]-E[0])/x-1,o[0]=L[0]*v/y,o[1]=E[0]*v/x,D&&(S.color=C[0],S.tickScale=o,S.dataAxis=r,S.screenOffset=a,f.drawArrays(f.TRIANGLES,I,D)),a[0]=2*(g[2]+E[3])/y-1,a[1]=(g[3]+g[1])/x-1,o[0]=E[3]*v/y,o[1]=L[3]*v/x,N&&(S.color=C[3],S.tickScale=o,S.dataAxis=n,S.screenOffset=a,f.drawArrays(f.TRIANGLES,B,N)),a[0]=(g[2]+g[0])/y-1,a[1]=2*(g[3]+E[2])/x-1,o[0]=L[2]*v/y,o[1]=E[2]*v/x,D&&(S.color=C[2],S.tickScale=o,S.dataAxis=r,S.screenOffset=a,f.drawArrays(f.TRIANGLES,I,D))}}(),d.update=(f=[1,1,-1,-1,1,-1],p=[1,-1,1,1,-1,-1],function(t){for(var e=t.ticks,r=t.bounds,n=new Float32Array(18*(e[0].length+e[1].length)),a=(this.plot.zeroLineEnable,0),i=[[],[]],o=0;o<2;++o)for(var s=i[o],l=e[o],c=r[o],u=r[o+2],h=0;h<l.length;++h){var d=(l[h].x-c)/(u-c);s.push(d);for(var g=0;g<6;++g)n[a++]=d,n[a++]=f[g],n[a++]=p[g]}this.ticks=i,this.vbo.update(n)}),d.dispose=function(){this.vbo.dispose(),this.shader.dispose(),this.tickShader.dispose()}},{"./shaders":287,"binary-search-bounds":289,"gl-buffer":244,"gl-shader":304}],286:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl,r=n(e,[-1,-1,-1,1,1,-1,1,1]),s=a(e,i.lineVert,i.lineFrag);return new o(t,r,s)};var n=t("gl-buffer"),a=t("gl-shader"),i=t("./shaders");function o(t,e,r){this.plot=t,this.vbo=e,this.shader=r}var s,l,c=o.prototype;c.bind=function(){var t=this.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox=this.plot.screenBox},c.drawLine=(s=[0,0],l=[0,0],function(t,e,r,n,a,i){var o=this.plot,c=this.shader,u=o.gl;s[0]=t,s[1]=e,l[0]=r,l[1]=n,c.uniforms.start=s,c.uniforms.end=l,c.uniforms.width=a*o.pixelRatio,c.uniforms.color=i,u.drawArrays(u.TRIANGLE_STRIP,0,4)}),c.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},{"./shaders":287,"gl-buffer":244,"gl-shader":304}],287:[function(t,e,r){"use strict";var n=t("glslify"),a=n(["precision lowp float;\n#define GLSLIFY 1\nuniform vec4 color;\nvoid main() {\n gl_FragColor = vec4(color.xyz * color.w, color.w);\n}\n"]);e.exports={lineVert:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 coord;\n\nuniform vec4 screenBox;\nuniform vec2 start, end;\nuniform float width;\n\nvec2 perp(vec2 v) {\n return vec2(v.y, -v.x);\n}\n\nvec2 screen(vec2 v) {\n return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\n}\n\nvoid main() {\n vec2 delta = normalize(perp(start - end));\n vec2 offset = mix(start, end, 0.5 * (coord.y+1.0));\n gl_Position = vec4(screen(offset + 0.5 * width * delta * coord.x), 0, 1);\n}\n"]),lineFrag:a,textVert:n(["#define GLSLIFY 1\nattribute vec3 textCoordinate;\n\nuniform vec2 dataScale, dataShift, dataAxis, screenOffset, textScale;\nuniform float angle;\n\nvoid main() {\n float dataOffset = textCoordinate.z;\n vec2 glyphOffset = textCoordinate.xy;\n mat2 glyphMatrix = mat2(cos(angle), sin(angle), -sin(angle), cos(angle));\n vec2 screenCoordinate = dataAxis * (dataScale * dataOffset + dataShift) +\n glyphMatrix * glyphOffset * textScale + screenOffset;\n gl_Position = vec4(screenCoordinate, 0, 1);\n}\n"]),textFrag:a,gridVert:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 dataCoord;\n\nuniform vec2 dataAxis, dataShift, dataScale;\nuniform float lineWidth;\n\nvoid main() {\n vec2 pos = dataAxis * (dataScale * dataCoord.x + dataShift);\n pos += 10.0 * dataCoord.y * vec2(dataAxis.y, -dataAxis.x) + dataCoord.z * lineWidth;\n gl_Position = vec4(pos, 0, 1);\n}\n"]),gridFrag:a,boxVert:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 coord;\n\nuniform vec4 screenBox;\nuniform vec2 lo, hi;\n\nvec2 screen(vec2 v) {\n return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\n}\n\nvoid main() {\n gl_Position = vec4(screen(mix(lo, hi, coord)), 0, 1);\n}\n"]),tickVert:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 dataCoord;\n\nuniform vec2 dataAxis, dataShift, dataScale, screenOffset, tickScale;\n\nvoid main() {\n vec2 pos = dataAxis * (dataScale * dataCoord.x + dataShift);\n gl_Position = vec4(pos + tickScale*dataCoord.yz + screenOffset, 0, 1);\n}\n"])}},{glslify:410}],288:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl,r=n(e),i=a(e,s.textVert,s.textFrag);return new l(t,r,i)};var n=t("gl-buffer"),a=t("gl-shader"),i=t("text-cache"),o=t("binary-search-bounds"),s=t("./shaders");function l(t,e,r){this.plot=t,this.vbo=e,this.shader=r,this.tickOffset=[[],[]],this.tickX=[[],[]],this.labelOffset=[0,0],this.labelCount=[0,0]}var c,u,h,f,p,d,g=l.prototype;g.drawTicks=(c=[0,0],u=[0,0],h=[0,0],function(t){var e=this.plot,r=this.shader,n=this.tickX[t],a=this.tickOffset[t],i=e.gl,s=e.viewBox,l=e.dataBox,f=e.screenBox,p=e.pixelRatio,d=e.tickEnable,g=e.tickPad,v=e.tickColor,m=e.tickAngle,y=e.labelEnable,x=e.labelPad,b=e.labelColor,_=e.labelAngle,w=this.labelOffset[t],k=this.labelCount[t],T=o.lt(n,l[t]),M=o.le(n,l[t+2]);c[0]=c[1]=0,c[t]=1,u[t]=(s[2+t]+s[t])/(f[2+t]-f[t])-1;var A=2/f[2+(1^t)]-f[1^t];u[1^t]=A*s[1^t]-1,d[t]&&(u[1^t]-=A*p*g[t],T<M&&a[M]>a[T]&&(r.uniforms.dataAxis=c,r.uniforms.screenOffset=u,r.uniforms.color=v[t],r.uniforms.angle=m[t],i.drawArrays(i.TRIANGLES,a[T],a[M]-a[T]))),y[t]&&k&&(u[1^t]-=A*p*x[t],r.uniforms.dataAxis=h,r.uniforms.screenOffset=u,r.uniforms.color=b[t],r.uniforms.angle=_[t],i.drawArrays(i.TRIANGLES,w,k)),u[1^t]=A*s[2+(1^t)]-1,d[t+2]&&(u[1^t]+=A*p*g[t+2],T<M&&a[M]>a[T]&&(r.uniforms.dataAxis=c,r.uniforms.screenOffset=u,r.uniforms.color=v[t+2],r.uniforms.angle=m[t+2],i.drawArrays(i.TRIANGLES,a[T],a[M]-a[T]))),y[t+2]&&k&&(u[1^t]+=A*p*x[t+2],r.uniforms.dataAxis=h,r.uniforms.screenOffset=u,r.uniforms.color=b[t+2],r.uniforms.angle=_[t+2],i.drawArrays(i.TRIANGLES,w,k))}),g.drawTitle=function(){var t=[0,0],e=[0,0];return function(){var r=this.plot,n=this.shader,a=r.gl,i=r.screenBox,o=r.titleCenter,s=r.titleAngle,l=r.titleColor,c=r.pixelRatio;if(this.titleCount){for(var u=0;u<2;++u)e[u]=2*(o[u]*c-i[u])/(i[2+u]-i[u])-1;n.bind(),n.uniforms.dataAxis=t,n.uniforms.screenOffset=e,n.uniforms.angle=s,n.uniforms.color=l,a.drawArrays(a.TRIANGLES,this.titleOffset,this.titleCount)}}}(),g.bind=(f=[0,0],p=[0,0],d=[0,0],function(){var t=this.plot,e=this.shader,r=t._tickBounds,n=t.dataBox,a=t.screenBox,i=t.viewBox;e.bind();for(var o=0;o<2;++o){var s=r[o],l=r[o+2]-s,c=.5*(n[o+2]+n[o]),u=n[o+2]-n[o],h=i[o],g=i[o+2]-h,v=a[o],m=a[o+2]-v;p[o]=2*l/u*g/m,f[o]=2*(s-c)/u*g/m}d[1]=2*t.pixelRatio/(a[3]-a[1]),d[0]=d[1]*(a[3]-a[1])/(a[2]-a[0]),e.uniforms.dataScale=p,e.uniforms.dataShift=f,e.uniforms.textScale=d,this.vbo.bind(),e.attributes.textCoordinate.pointer()}),g.update=function(t){var e,r,n,a,o,s=[],l=t.ticks,c=t.bounds;for(o=0;o<2;++o){var u=[Math.floor(s.length/3)],h=[-1/0],f=l[o];for(e=0;e<f.length;++e){var p=f[e],d=p.x,g=p.text,v=p.font||"sans-serif";a=p.fontSize||12;for(var m=1/(c[o+2]-c[o]),y=c[o],x=g.split("\n"),b=0;b<x.length;b++)for(n=i(v,x[b]).data,r=0;r<n.length;r+=2)s.push(n[r]*a,-n[r+1]*a-b*a*1.2,(d-y)*m);u.push(Math.floor(s.length/3)),h.push(d)}this.tickOffset[o]=u,this.tickX[o]=h}for(o=0;o<2;++o){for(this.labelOffset[o]=Math.floor(s.length/3),n=i(t.labelFont[o],t.labels[o],{textAlign:"center"}).data,a=t.labelSize[o],e=0;e<n.length;e+=2)s.push(n[e]*a,-n[e+1]*a,0);this.labelCount[o]=Math.floor(s.length/3)-this.labelOffset[o]}for(this.titleOffset=Math.floor(s.length/3),n=i(t.titleFont,t.title).data,a=t.titleSize,e=0;e<n.length;e+=2)s.push(n[e]*a,-n[e+1]*a,0);this.titleCount=Math.floor(s.length/3)-this.titleOffset,this.vbo.update(s)},g.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},{"./shaders":287,"binary-search-bounds":289,"gl-buffer":244,"gl-shader":304,"text-cache":534}],289:[function(t,e,r){arguments[4][113][0].apply(r,arguments)},{dup:113}],290:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl,r=n(e,[e.drawingBufferWidth,e.drawingBufferHeight]),c=new l(e,r);return c.grid=a(c),c.text=i(c),c.line=o(c),c.box=s(c),c.update(t),c};var n=t("gl-select-static"),a=t("./lib/grid"),i=t("./lib/text"),o=t("./lib/line"),s=t("./lib/box");function l(t,e){this.gl=t,this.pickBuffer=e,this.screenBox=[0,0,t.drawingBufferWidth,t.drawingBufferHeight],this.viewBox=[0,0,0,0],this.dataBox=[-10,-10,10,10],this.gridLineEnable=[!0,!0],this.gridLineWidth=[1,1],this.gridLineColor=[[0,0,0,1],[0,0,0,1]],this.pixelRatio=1,this.tickMarkLength=[0,0,0,0],this.tickMarkWidth=[0,0,0,0],this.tickMarkColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[15,15,15,15],this.tickAngle=[0,0,0,0],this.tickEnable=[!0,!0,!0,!0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[15,15,15,15],this.labelAngle=[0,Math.PI/2,0,3*Math.PI/2],this.labelEnable=[!0,!0,!0,!0],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.titleCenter=[0,0],this.titleEnable=!0,this.titleAngle=0,this.titleColor=[0,0,0,1],this.borderColor=[0,0,0,0],this.backgroundColor=[0,0,0,0],this.zeroLineEnable=[!0,!0],this.zeroLineWidth=[4,4],this.zeroLineColor=[[0,0,0,1],[0,0,0,1]],this.borderLineEnable=[!0,!0,!0,!0],this.borderLineWidth=[2,2,2,2],this.borderLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.grid=null,this.text=null,this.line=null,this.box=null,this.objects=[],this.overlays=[],this._tickBounds=[1/0,1/0,-1/0,-1/0],this.static=!1,this.dirty=!1,this.pickDirty=!1,this.pickDelay=120,this.pickRadius=10,this._pickTimeout=null,this._drawPick=this.drawPick.bind(this),this._depthCounter=0}var c=l.prototype;function u(t){for(var e=t.slice(),r=0;r<e.length;++r)e[r]=e[r].slice();return e}function h(t,e){return t.x-e.x}c.setDirty=function(){this.dirty=this.pickDirty=!0},c.setOverlayDirty=function(){this.dirty=!0},c.nextDepthValue=function(){return this._depthCounter++/65536},c.draw=function(){var t=this.gl,e=this.screenBox,r=this.viewBox,n=this.dataBox,a=this.pixelRatio,i=this.grid,o=this.line,s=this.text,l=this.objects;if(this._depthCounter=0,this.pickDirty&&(this._pickTimeout&&clearTimeout(this._pickTimeout),this.pickDirty=!1,this._pickTimeout=setTimeout(this._drawPick,this.pickDelay)),this.dirty){if(this.dirty=!1,t.bindFramebuffer(t.FRAMEBUFFER,null),t.enable(t.SCISSOR_TEST),t.disable(t.DEPTH_TEST),t.depthFunc(t.LESS),t.depthMask(!1),t.enable(t.BLEND),t.blendEquation(t.FUNC_ADD,t.FUNC_ADD),t.blendFunc(t.ONE,t.ONE_MINUS_SRC_ALPHA),this.borderColor){t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]);var c=this.borderColor;t.clearColor(c[0]*c[3],c[1]*c[3],c[2]*c[3],c[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT)}t.scissor(r[0],r[1],r[2]-r[0],r[3]-r[1]),t.viewport(r[0],r[1],r[2]-r[0],r[3]-r[1]);var u=this.backgroundColor;t.clearColor(u[0]*u[3],u[1]*u[3],u[2]*u[3],u[3]),t.clear(t.COLOR_BUFFER_BIT),i.draw();var h=this.zeroLineEnable,f=this.zeroLineColor,p=this.zeroLineWidth;if(h[0]||h[1]){o.bind();for(var d=0;d<2;++d)if(h[d]&&n[d]<=0&&n[d+2]>=0){var g=e[d]-n[d]*(e[d+2]-e[d])/(n[d+2]-n[d]);0===d?o.drawLine(g,e[1],g,e[3],p[d],f[d]):o.drawLine(e[0],g,e[2],g,p[d],f[d])}}for(d=0;d<l.length;++d)l[d].draw();t.viewport(e[0],e[1],e[2]-e[0],e[3]-e[1]),t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]),this.grid.drawTickMarks(),o.bind();var v=this.borderLineEnable,m=this.borderLineWidth,y=this.borderLineColor;for(v[1]&&o.drawLine(r[0],r[1]-.5*m[1]*a,r[0],r[3]+.5*m[3]*a,m[1],y[1]),v[0]&&o.drawLine(r[0]-.5*m[0]*a,r[1],r[2]+.5*m[2]*a,r[1],m[0],y[0]),v[3]&&o.drawLine(r[2],r[1]-.5*m[1]*a,r[2],r[3]+.5*m[3]*a,m[3],y[3]),v[2]&&o.drawLine(r[0]-.5*m[0]*a,r[3],r[2]+.5*m[2]*a,r[3],m[2],y[2]),s.bind(),d=0;d<2;++d)s.drawTicks(d);this.titleEnable&&s.drawTitle();var x=this.overlays;for(d=0;d<x.length;++d)x[d].draw();t.disable(t.SCISSOR_TEST),t.disable(t.BLEND),t.depthMask(!0)}},c.drawPick=function(){if(!this.static){var t=this.pickBuffer;this.gl,this._pickTimeout=null,t.begin();for(var e=1,r=this.objects,n=0;n<r.length;++n)e=r[n].drawPick(e);t.end()}},c.pick=function(t,e){if(!this.static){var r=this.pixelRatio,n=this.pickPixelRatio,a=this.viewBox,i=0|Math.round((t-a[0]/r)*n),o=0|Math.round((e-a[1]/r)*n),s=this.pickBuffer.query(i,o,this.pickRadius);if(!s)return null;for(var l=s.id+(s.value[0]<<8)+(s.value[1]<<16)+(s.value[2]<<24),c=this.objects,u=0;u<c.length;++u){var h=c[u].pick(i,o,l);if(h)return h}return null}},c.setScreenBox=function(t){var e=this.screenBox,r=this.pixelRatio;e[0]=0|Math.round(t[0]*r),e[1]=0|Math.round(t[1]*r),e[2]=0|Math.round(t[2]*r),e[3]=0|Math.round(t[3]*r),this.setDirty()},c.setDataBox=function(t){var e=this.dataBox;(e[0]!==t[0]||e[1]!==t[1]||e[2]!==t[2]||e[3]!==t[3])&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],this.setDirty())},c.setViewBox=function(t){var e=this.pixelRatio,r=this.viewBox;r[0]=0|Math.round(t[0]*e),r[1]=0|Math.round(t[1]*e),r[2]=0|Math.round(t[2]*e),r[3]=0|Math.round(t[3]*e);var n=this.pickPixelRatio;this.pickBuffer.shape=[0|Math.round((t[2]-t[0])*n),0|Math.round((t[3]-t[1])*n)],this.setDirty()},c.update=function(t){t=t||{};var e=this.gl;this.pixelRatio=t.pixelRatio||1;var r=this.pixelRatio;this.pickPixelRatio=Math.max(r,1),this.setScreenBox(t.screenBox||[0,0,e.drawingBufferWidth/r,e.drawingBufferHeight/r]);this.screenBox;this.setViewBox(t.viewBox||[.125*(this.screenBox[2]-this.screenBox[0])/r,.125*(this.screenBox[3]-this.screenBox[1])/r,.875*(this.screenBox[2]-this.screenBox[0])/r,.875*(this.screenBox[3]-this.screenBox[1])/r]);var n=this.viewBox,a=(n[2]-n[0])/(n[3]-n[1]);this.setDataBox(t.dataBox||[-10,-10/a,10,10/a]),this.borderColor=!1!==t.borderColor&&(t.borderColor||[0,0,0,0]).slice(),this.backgroundColor=(t.backgroundColor||[0,0,0,0]).slice(),this.gridLineEnable=(t.gridLineEnable||[!0,!0]).slice(),this.gridLineWidth=(t.gridLineWidth||[1,1]).slice(),this.gridLineColor=u(t.gridLineColor||[[.5,.5,.5,1],[.5,.5,.5,1]]),this.zeroLineEnable=(t.zeroLineEnable||[!0,!0]).slice(),this.zeroLineWidth=(t.zeroLineWidth||[4,4]).slice(),this.zeroLineColor=u(t.zeroLineColor||[[0,0,0,1],[0,0,0,1]]),this.tickMarkLength=(t.tickMarkLength||[0,0,0,0]).slice(),this.tickMarkWidth=(t.tickMarkWidth||[0,0,0,0]).slice(),this.tickMarkColor=u(t.tickMarkColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.titleCenter=(t.titleCenter||[.5*(n[0]+n[2])/r,(n[3]+120)/r]).slice(),this.titleEnable=!("titleEnable"in t&&!t.titleEnable),this.titleAngle=t.titleAngle||0,this.titleColor=(t.titleColor||[0,0,0,1]).slice(),this.labelPad=(t.labelPad||[15,15,15,15]).slice(),this.labelAngle=(t.labelAngle||[0,Math.PI/2,0,3*Math.PI/2]).slice(),this.labelEnable=(t.labelEnable||[!0,!0,!0,!0]).slice(),this.labelColor=u(t.labelColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.tickPad=(t.tickPad||[15,15,15,15]).slice(),this.tickAngle=(t.tickAngle||[0,0,0,0]).slice(),this.tickEnable=(t.tickEnable||[!0,!0,!0,!0]).slice(),this.tickColor=u(t.tickColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.borderLineEnable=(t.borderLineEnable||[!0,!0,!0,!0]).slice(),this.borderLineWidth=(t.borderLineWidth||[2,2,2,2]).slice(),this.borderLineColor=u(t.borderLineColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]);var i=t.ticks||[[],[]],o=this._tickBounds;o[0]=o[1]=1/0,o[2]=o[3]=-1/0;for(var s=0;s<2;++s){var l=i[s].slice(0);0!==l.length&&(l.sort(h),o[s]=Math.min(o[s],l[0].x),o[s+2]=Math.max(o[s+2],l[l.length-1].x))}this.grid.update({bounds:o,ticks:i}),this.text.update({bounds:o,ticks:i,labels:t.labels||["x","y"],labelSize:t.labelSize||[12,12],labelFont:t.labelFont||["sans-serif","sans-serif"],title:t.title||"",titleSize:t.titleSize||18,titleFont:t.titleFont||"sans-serif"}),this.static=!!t.static,this.setDirty()},c.dispose=function(){this.box.dispose(),this.grid.dispose(),this.text.dispose(),this.line.dispose();for(var t=this.objects.length-1;t>=0;--t)this.objects[t].dispose();this.objects.length=0;for(t=this.overlays.length-1;t>=0;--t)this.overlays[t].dispose();this.overlays.length=0,this.gl=null},c.addObject=function(t){this.objects.indexOf(t)<0&&(this.objects.push(t),this.setDirty())},c.removeObject=function(t){for(var e=this.objects,r=0;r<e.length;++r)if(e[r]===t){e.splice(r,1),this.setDirty();break}},c.addOverlay=function(t){this.overlays.indexOf(t)<0&&(this.overlays.push(t),this.setOverlayDirty())},c.removeOverlay=function(t){for(var e=this.overlays,r=0;r<e.length;++r)if(e[r]===t){e.splice(r,1),this.setOverlayDirty();break}}},{"./lib/box":284,"./lib/grid":285,"./lib/line":286,"./lib/text":288,"gl-select-static":303}],291:[function(t,e,r){"use strict";e.exports=function(t,e){t=t||document.body,e=e||{};var r=[.01,1/0];"distanceLimits"in e&&(r[0]=e.distanceLimits[0],r[1]=e.distanceLimits[1]);"zoomMin"in e&&(r[0]=e.zoomMin);"zoomMax"in e&&(r[1]=e.zoomMax);var c=a({center:e.center||[0,0,0],up:e.up||[0,1,0],eye:e.eye||[0,0,10],mode:e.mode||"orbit",distanceLimits:r}),u=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],h=0,f=t.clientWidth,p=t.clientHeight,d={keyBindingMode:"rotate",enableWheel:!0,view:c,element:t,delay:e.delay||16,rotateSpeed:e.rotateSpeed||1,zoomSpeed:e.zoomSpeed||1,translateSpeed:e.translateSpeed||1,flipX:!!e.flipX,flipY:!!e.flipY,modes:c.modes,_ortho:e._ortho||e.projection&&"orthographic"===e.projection.type||!1,tick:function(){var e=n(),r=this.delay,a=e-2*r;c.idle(e-r),c.recalcMatrix(a),c.flush(e-(100+2*r));for(var i=!0,o=c.computedMatrix,s=0;s<16;++s)i=i&&u[s]===o[s],u[s]=o[s];var l=t.clientWidth===f&&t.clientHeight===p;return f=t.clientWidth,p=t.clientHeight,i?!l:(h=Math.exp(c.computedRadius[0]),!0)},lookAt:function(t,e,r){c.lookAt(c.lastT(),t,e,r)},rotate:function(t,e,r){c.rotate(c.lastT(),t,e,r)},pan:function(t,e,r){c.pan(c.lastT(),t,e,r)},translate:function(t,e,r){c.translate(c.lastT(),t,e,r)}};return Object.defineProperties(d,{matrix:{get:function(){return c.computedMatrix},set:function(t){return c.setMatrix(c.lastT(),t),c.computedMatrix},enumerable:!0},mode:{get:function(){return c.getMode()},set:function(t){var e=c.computedUp.slice(),r=c.computedEye.slice(),a=c.computedCenter.slice();if(c.setMode(t),"turntable"===t){var i=n();c._active.lookAt(i,r,a,e),c._active.lookAt(i+500,r,a,[0,0,1]),c._active.flush(i)}return c.getMode()},enumerable:!0},center:{get:function(){return c.computedCenter},set:function(t){return c.lookAt(c.lastT(),null,t),c.computedCenter},enumerable:!0},eye:{get:function(){return c.computedEye},set:function(t){return c.lookAt(c.lastT(),t),c.computedEye},enumerable:!0},up:{get:function(){return c.computedUp},set:function(t){return c.lookAt(c.lastT(),null,null,t),c.computedUp},enumerable:!0},distance:{get:function(){return h},set:function(t){return c.setDistance(c.lastT(),t),t},enumerable:!0},distanceLimits:{get:function(){return c.getDistanceLimits(r)},set:function(t){return c.setDistanceLimits(t),t},enumerable:!0}}),t.addEventListener("contextmenu",function(t){return t.preventDefault(),!1}),d._lastX=-1,d._lastY=-1,d._lastMods={shift:!1,control:!1,alt:!1,meta:!1},d.enableMouseListeners=function(){function e(e,r,a,i){var o=d.keyBindingMode;if(!1!==o){var s="rotate"===o,l="pan"===o,u="zoom"===o,f=!!i.control,p=!!i.alt,g=!!i.shift,v=!!(1&e),m=!!(2&e),y=!!(4&e),x=1/t.clientHeight,b=x*(r-d._lastX),_=x*(a-d._lastY),w=d.flipX?1:-1,k=d.flipY?1:-1,T=Math.PI*d.rotateSpeed,M=n();if(-1!==d._lastX&&-1!==d._lastY&&((s&&v&&!f&&!p&&!g||v&&!f&&!p&&g)&&c.rotate(M,w*T*b,-k*T*_,0),(l&&v&&!f&&!p&&!g||m||v&&f&&!p&&!g)&&c.pan(M,-d.translateSpeed*b*h,d.translateSpeed*_*h,0),u&&v&&!f&&!p&&!g||y||v&&!f&&p&&!g)){var A=-d.zoomSpeed*_/window.innerHeight*(M-c.lastT())*100;c.pan(M,0,0,h*(Math.exp(A)-1))}return d._lastX=r,d._lastY=a,d._lastMods=i,!0}}d.mouseListener=i(t,e),t.addEventListener("touchstart",function(r){var n=s(r.changedTouches[0],t);e(0,n[0],n[1],d._lastMods),e(1,n[0],n[1],d._lastMods),r.preventDefault()},!!l&&{passive:!1}),t.addEventListener("touchmove",function(r){var n=s(r.changedTouches[0],t);e(1,n[0],n[1],d._lastMods),r.preventDefault()},!!l&&{passive:!1}),t.addEventListener("touchend",function(t){e(0,d._lastX,d._lastY,d._lastMods),t.preventDefault()},!!l&&{passive:!1}),d.wheelListener=o(t,function(t,e){if(!1!==d.keyBindingMode&&d.enableWheel){var r=d.flipX?1:-1,a=d.flipY?1:-1,i=n();if(Math.abs(t)>Math.abs(e))c.rotate(i,0,0,-t*r*Math.PI*d.rotateSpeed/window.innerWidth);else if(!d._ortho){var o=-d.zoomSpeed*a*e/window.innerHeight*(i-c.lastT())/20;c.pan(i,0,0,h*(Math.exp(o)-1))}}},!0)},d.enableMouseListeners(),d};var n=t("right-now"),a=t("3d-view"),i=t("mouse-change"),o=t("mouse-wheel"),s=t("mouse-event-offset"),l=t("has-passive-events")},{"3d-view":54,"has-passive-events":412,"mouse-change":436,"mouse-event-offset":437,"mouse-wheel":439,"right-now":502}],292:[function(t,e,r){var n=t("glslify"),a=t("gl-shader"),i=n(["precision mediump float;\n#define GLSLIFY 1\nattribute vec2 position;\nvarying vec2 uv;\nvoid main() {\n uv = position;\n gl_Position = vec4(position, 0, 1);\n}"]),o=n(["precision mediump float;\n#define GLSLIFY 1\n\nuniform sampler2D accumBuffer;\nvarying vec2 uv;\n\nvoid main() {\n vec4 accum = texture2D(accumBuffer, 0.5 * (uv + 1.0));\n gl_FragColor = min(vec4(1,1,1,1), accum);\n}"]);e.exports=function(t){return a(t,i,o,null,[{name:"position",type:"vec2"}])}},{"gl-shader":304,glslify:410}],293:[function(t,e,r){"use strict";var n=t("./camera.js"),a=t("gl-axes3d"),i=t("gl-axes3d/properties"),o=t("gl-spikes3d"),s=t("gl-select-static"),l=t("gl-fbo"),c=t("a-big-triangle"),u=t("mouse-change"),h=t("gl-mat4/perspective"),f=t("gl-mat4/ortho"),p=t("./lib/shader"),d=t("is-mobile")({tablet:!0,featureDetect:!0});function g(){this.mouse=[-1,-1],this.screen=null,this.distance=1/0,this.index=null,this.dataCoordinate=null,this.dataPosition=null,this.object=null,this.data=null}function v(t){var e=Math.round(Math.log(Math.abs(t))/Math.log(10));if(e<0){var r=Math.round(Math.pow(10,-e));return Math.ceil(t*r)/r}if(e>0){r=Math.round(Math.pow(10,e));return Math.ceil(t/r)*r}return Math.ceil(t)}function m(t){return"boolean"!=typeof t||t}e.exports={createScene:function(t){(t=t||{}).camera=t.camera||{};var e=t.canvas;if(!e)if(e=document.createElement("canvas"),t.container){var r=t.container;r.appendChild(e)}else document.body.appendChild(e);var y=t.gl;y||(t.glOptions&&(d=!!t.glOptions.preserveDrawingBuffer),y=function(t,e){var r=null;try{(r=t.getContext("webgl",e))||(r=t.getContext("experimental-webgl",e))}catch(t){return null}return r}(e,t.glOptions||{premultipliedAlpha:!0,antialias:!0,preserveDrawingBuffer:d}));if(!y)throw new Error("webgl not supported");var x=t.bounds||[[-10,-10,-10],[10,10,10]],b=new g,_=l(y,y.drawingBufferWidth,y.drawingBufferHeight,{preferFloat:!d}),w=p(y),k=t.cameraObject&&!0===t.cameraObject._ortho||t.camera.projection&&"orthographic"===t.camera.projection.type||!1,T={eye:t.camera.eye||[2,0,0],center:t.camera.center||[0,0,0],up:t.camera.up||[0,1,0],zoomMin:t.camera.zoomMax||.1,zoomMax:t.camera.zoomMin||100,mode:t.camera.mode||"turntable",_ortho:k},M=t.axes||{},A=a(y,M);A.enable=!M.disable;var S=t.spikes||{},E=o(y,S),L=[],C=[],P=[],O=[],z=!0,I=!0,D=new Array(16),R=new Array(16),F={view:null,projection:D,model:R,_ortho:!1},I=!0,B=[y.drawingBufferWidth,y.drawingBufferHeight],N=t.cameraObject||n(e,T),j={gl:y,contextLost:!1,pixelRatio:t.pixelRatio||1,canvas:e,selection:b,camera:N,axes:A,axesPixels:null,spikes:E,bounds:x,objects:L,shape:B,aspect:t.aspectRatio||[1,1,1],pickRadius:t.pickRadius||10,zNear:t.zNear||.01,zFar:t.zFar||1e3,fovy:t.fovy||Math.PI/4,clearColor:t.clearColor||[0,0,0,0],autoResize:m(t.autoResize),autoBounds:m(t.autoBounds),autoScale:!!t.autoScale,autoCenter:m(t.autoCenter),clipToBounds:m(t.clipToBounds),snapToData:!!t.snapToData,onselect:t.onselect||null,onrender:t.onrender||null,onclick:t.onclick||null,cameraParams:F,oncontextloss:null,mouseListener:null,_stopped:!1,getAspectratio:function(){return{x:this.aspect[0],y:this.aspect[1],z:this.aspect[2]}},setAspectratio:function(t){this.aspect[0]=t.x,this.aspect[1]=t.y,this.aspect[2]=t.z,I=!0},setBounds:function(t,e){this.bounds[0][t]=e.min,this.bounds[1][t]=e.max},setClearColor:function(t){this.clearColor=t},clearRGBA:function(){this.gl.clearColor(this.clearColor[0],this.clearColor[1],this.clearColor[2],this.clearColor[3]),this.gl.clear(this.gl.COLOR_BUFFER_BIT|this.gl.DEPTH_BUFFER_BIT)}},V=[y.drawingBufferWidth/j.pixelRatio|0,y.drawingBufferHeight/j.pixelRatio|0];function U(){if(!j._stopped&&j.autoResize){var t=e.parentNode,r=1,n=1;t&&t!==document.body?(r=t.clientWidth,n=t.clientHeight):(r=window.innerWidth,n=window.innerHeight);var a=0|Math.ceil(r*j.pixelRatio),i=0|Math.ceil(n*j.pixelRatio);if(a!==e.width||i!==e.height){e.width=a,e.height=i;var o=e.style;o.position=o.position||"absolute",o.left="0px",o.top="0px",o.width=r+"px",o.height=n+"px",z=!0}}}j.autoResize&&U();function q(){for(var t=L.length,e=O.length,r=0;r<e;++r)P[r]=0;t:for(var r=0;r<t;++r){var n=L[r],a=n.pickSlots;if(a){for(var i=0;i<e;++i)if(P[i]+a<255){C[r]=i,n.setPickBase(P[i]+1),P[i]+=a;continue t}var o=s(y,B);C[r]=e,O.push(o),P.push(a),n.setPickBase(1),e+=1}else C[r]=-1}for(;e>0&&0===P[e-1];)P.pop(),O.pop().dispose()}function H(){if(j.contextLost)return!0;y.isContextLost()&&(j.contextLost=!0,j.mouseListener.enabled=!1,j.selection.object=null,j.oncontextloss&&j.oncontextloss())}window.addEventListener("resize",U),j.update=function(t){j._stopped||(t=t||{},z=!0,I=!0)},j.add=function(t){j._stopped||(t.axes=A,L.push(t),C.push(-1),z=!0,I=!0,q())},j.remove=function(t){if(!j._stopped){var e=L.indexOf(t);e<0||(L.splice(e,1),C.pop(),z=!0,I=!0,q())}},j.dispose=function(){if(!j._stopped&&(j._stopped=!0,window.removeEventListener("resize",U),e.removeEventListener("webglcontextlost",H),j.mouseListener.enabled=!1,!j.contextLost)){A.dispose(),E.dispose();for(var t=0;t<L.length;++t)L[t].dispose();_.dispose();for(var t=0;t<O.length;++t)O[t].dispose();w.dispose(),y=null,A=null,E=null,L=[]}},j._mouseRotating=!1,j._prevButtons=0,j.enableMouseListeners=function(){j.mouseListener=u(e,function(t,e,r){if(!j._stopped){var n=O.length,a=L.length,i=b.object;b.distance=1/0,b.mouse[0]=e,b.mouse[1]=r,b.object=null,b.screen=null,b.dataCoordinate=b.dataPosition=null;var o=!1;if(t&&j._prevButtons)j._mouseRotating=!0;else{j._mouseRotating&&(I=!0),j._mouseRotating=!1;for(var s=0;s<n;++s){var l=O[s].query(e,V[1]-r-1,j.pickRadius);if(l){if(l.distance>b.distance)continue;for(var c=0;c<a;++c){var u=L[c];if(C[c]===s){var h=u.pick(l);h&&(b.buttons=t,b.screen=l.coord,b.distance=l.distance,b.object=u,b.index=h.distance,b.dataPosition=h.position,b.dataCoordinate=h.dataCoordinate,b.data=h,o=!0)}}}}}i&&i!==b.object&&(i.highlight&&i.highlight(null),z=!0),b.object&&(b.object.highlight&&b.object.highlight(b.data),z=!0),(o=o||b.object!==i)&&j.onselect&&j.onselect(b),1&t&&!(1&j._prevButtons)&&j.onclick&&j.onclick(b),j._prevButtons=t}})},e.addEventListener("webglcontextlost",H);var G=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],Y=[G[0].slice(),G[1].slice()];function W(){if(!H()){U();var t=j.camera.tick();F.view=j.camera.matrix,z=z||t,I=I||t,A.pixelRatio=j.pixelRatio,E.pixelRatio=j.pixelRatio;var e=L.length,r=G[0],n=G[1];r[0]=r[1]=r[2]=1/0,n[0]=n[1]=n[2]=-1/0;for(var a=0;a<e;++a){var o=L[a];o.pixelRatio=j.pixelRatio,o.axes=j.axes,z=z||!!o.dirty,I=I||!!o.dirty;var s=o.bounds;if(s)for(var l=s[0],u=s[1],p=0;p<3;++p)r[p]=Math.min(r[p],l[p]),n[p]=Math.max(n[p],u[p])}var d=j.bounds;if(j.autoBounds)for(var p=0;p<3;++p){if(n[p]<r[p])r[p]=-1,n[p]=1;else{r[p]===n[p]&&(r[p]-=1,n[p]+=1);var g=.05*(n[p]-r[p]);r[p]=r[p]-g,n[p]=n[p]+g}d[0][p]=r[p],d[1][p]=n[p]}for(var m=!1,p=0;p<3;++p)m=m||Y[0][p]!==d[0][p]||Y[1][p]!==d[1][p],Y[0][p]=d[0][p],Y[1][p]=d[1][p];if(I=I||m,z=z||m){if(m){for(var x=[0,0,0],a=0;a<3;++a)x[a]=v((d[1][a]-d[0][a])/10);A.autoTicks?A.update({bounds:d,tickSpacing:x}):A.update({bounds:d})}var T=y.drawingBufferWidth,M=y.drawingBufferHeight;B[0]=T,B[1]=M,V[0]=0|Math.max(T/j.pixelRatio,1),V[1]=0|Math.max(M/j.pixelRatio,1),function(t,e){var r=t.bounds,n=t.cameraParams,a=n.projection,i=n.model,o=t.gl.drawingBufferWidth,s=t.gl.drawingBufferHeight,l=t.zNear,c=t.zFar,u=t.fovy,p=o/s;e?(f(a,-p,p,-1,1,l,c),n._ortho=!0):(h(a,u,p,l,c),n._ortho=!1);for(var d=0;d<16;++d)i[d]=0;i[15]=1;for(var g=0,d=0;d<3;++d)g=Math.max(g,r[1][d]-r[0][d]);for(var d=0;d<3;++d)t.autoScale?i[5*d]=t.aspect[d]/(r[1][d]-r[0][d]):i[5*d]=1/g,t.autoCenter&&(i[12+d]=.5*-i[5*d]*(r[0][d]+r[1][d]))}(j,k);for(var a=0;a<e;++a){var o=L[a];o.axesBounds=d,j.clipToBounds&&(o.clipBounds=d)}b.object&&(j.snapToData?E.position=b.dataCoordinate:E.position=b.dataPosition,E.bounds=d),I&&(I=!1,function(){if(H())return;y.colorMask(!0,!0,!0,!0),y.depthMask(!0),y.disable(y.BLEND),y.enable(y.DEPTH_TEST),y.depthFunc(y.LEQUAL);for(var t=L.length,e=O.length,r=0;r<e;++r){var n=O[r];n.shape=V,n.begin();for(var a=0;a<t;++a)if(C[a]===r){var i=L[a];i.drawPick&&(i.pixelRatio=1,i.drawPick(F))}n.end()}}()),j.axesPixels=i(j.axes,F,T,M),j.onrender&&j.onrender(),y.bindFramebuffer(y.FRAMEBUFFER,null),y.viewport(0,0,T,M),j.clearRGBA(),y.depthMask(!0),y.colorMask(!0,!0,!0,!0),y.enable(y.DEPTH_TEST),y.depthFunc(y.LEQUAL),y.disable(y.BLEND),y.disable(y.CULL_FACE);var S=!1;A.enable&&(S=S||A.isTransparent(),A.draw(F)),E.axes=A,b.object&&E.draw(F),y.disable(y.CULL_FACE);for(var a=0;a<e;++a){var o=L[a];o.axes=A,o.pixelRatio=j.pixelRatio,o.isOpaque&&o.isOpaque()&&o.draw(F),o.isTransparent&&o.isTransparent()&&(S=!0)}if(S){_.shape=B,_.bind(),y.clear(y.DEPTH_BUFFER_BIT),y.colorMask(!1,!1,!1,!1),y.depthMask(!0),y.depthFunc(y.LESS),A.enable&&A.isTransparent()&&A.drawTransparent(F);for(var a=0;a<e;++a){var o=L[a];o.isOpaque&&o.isOpaque()&&o.draw(F)}y.enable(y.BLEND),y.blendEquation(y.FUNC_ADD),y.blendFunc(y.ONE,y.ONE_MINUS_SRC_ALPHA),y.colorMask(!0,!0,!0,!0),y.depthMask(!1),y.clearColor(0,0,0,0),y.clear(y.COLOR_BUFFER_BIT),A.isTransparent()&&A.drawTransparent(F);for(var a=0;a<e;++a){var o=L[a];o.isTransparent&&o.isTransparent()&&o.drawTransparent(F)}y.bindFramebuffer(y.FRAMEBUFFER,null),y.blendFunc(y.ONE,y.ONE_MINUS_SRC_ALPHA),y.disable(y.DEPTH_TEST),w.bind(),_.color[0].bind(0),w.uniforms.accumBuffer=0,c(y),y.disable(y.BLEND)}z=!1;for(var a=0;a<e;++a)L[a].dirty=!1}}}return j.enableMouseListeners(),function t(){j._stopped||j.contextLost||(W(),requestAnimationFrame(t))}(),j.redraw=function(){j._stopped||(z=!0,W())},j},createCamera:n}},{"./camera.js":291,"./lib/shader":292,"a-big-triangle":62,"gl-axes3d":236,"gl-axes3d/properties":243,"gl-fbo":252,"gl-mat4/ortho":271,"gl-mat4/perspective":272,"gl-select-static":303,"gl-spikes3d":313,"is-mobile":421,"mouse-change":436}],294:[function(t,e,r){var n=t("glslify");r.pointVertex=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\n\nuniform mat3 matrix;\nuniform float pointSize;\nuniform float pointCloud;\n\nhighp float rand(vec2 co) {\n highp float a = 12.9898;\n highp float b = 78.233;\n highp float c = 43758.5453;\n highp float d = dot(co.xy, vec2(a, b));\n highp float e = mod(d, 3.14);\n return fract(sin(e) * c);\n}\n\nvoid main() {\n vec3 hgPosition = matrix * vec3(position, 1);\n gl_Position = vec4(hgPosition.xy, 0, hgPosition.z);\n // if we don't jitter the point size a bit, overall point cloud\n // saturation 'jumps' on zooming, which is disturbing and confusing\n gl_PointSize = pointSize * ((19.5 + rand(position)) / 20.0);\n if(pointCloud != 0.0) { // pointCloud is truthy\n // get the same square surface as circle would be\n gl_PointSize *= 0.886;\n }\n}"]),r.pointFragment=n(["precision mediump float;\n#define GLSLIFY 1\n\nuniform vec4 color, borderColor;\nuniform float centerFraction;\nuniform float pointCloud;\n\nvoid main() {\n float radius;\n vec4 baseColor;\n if(pointCloud != 0.0) { // pointCloud is truthy\n if(centerFraction == 1.0) {\n gl_FragColor = color;\n } else {\n gl_FragColor = mix(borderColor, color, centerFraction);\n }\n } else {\n radius = length(2.0 * gl_PointCoord.xy - 1.0);\n if(radius > 1.0) {\n discard;\n }\n baseColor = mix(borderColor, color, step(radius, centerFraction));\n gl_FragColor = vec4(baseColor.rgb * baseColor.a, baseColor.a);\n }\n}\n"]),r.pickVertex=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\nattribute vec4 pickId;\n\nuniform mat3 matrix;\nuniform float pointSize;\nuniform vec4 pickOffset;\n\nvarying vec4 fragId;\n\nvoid main() {\n vec3 hgPosition = matrix * vec3(position, 1);\n gl_Position = vec4(hgPosition.xy, 0, hgPosition.z);\n gl_PointSize = pointSize;\n\n vec4 id = pickId + pickOffset;\n id.y += floor(id.x / 256.0);\n id.x -= floor(id.x / 256.0) * 256.0;\n\n id.z += floor(id.y / 256.0);\n id.y -= floor(id.y / 256.0) * 256.0;\n\n id.w += floor(id.z / 256.0);\n id.z -= floor(id.z / 256.0) * 256.0;\n\n fragId = id;\n}\n"]),r.pickFragment=n(["precision mediump float;\n#define GLSLIFY 1\n\nvarying vec4 fragId;\n\nvoid main() {\n float radius = length(2.0 * gl_PointCoord.xy - 1.0);\n if(radius > 1.0) {\n discard;\n }\n gl_FragColor = fragId / 255.0;\n}\n"])},{glslify:410}],295:[function(t,e,r){"use strict";var n=t("gl-shader"),a=t("gl-buffer"),i=t("typedarray-pool"),o=t("./lib/shader");function s(t,e,r,n,a){this.plot=t,this.offsetBuffer=e,this.pickBuffer=r,this.shader=n,this.pickShader=a,this.sizeMin=.5,this.sizeMinCap=2,this.sizeMax=20,this.areaRatio=1,this.pointCount=0,this.color=[1,0,0,1],this.borderColor=[0,0,0,1],this.blend=!1,this.pickOffset=0,this.points=null}e.exports=function(t,e){var r=t.gl,i=a(r),l=a(r),c=n(r,o.pointVertex,o.pointFragment),u=n(r,o.pickVertex,o.pickFragment),h=new s(t,i,l,c,u);return h.update(e),t.addObject(h),h};var l,c,u=s.prototype;u.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.offsetBuffer.dispose(),this.pickBuffer.dispose(),this.plot.removeObject(this)},u.update=function(t){var e;function r(e,r){return e in t?t[e]:r}t=t||{},this.sizeMin=r("sizeMin",.5),this.sizeMax=r("sizeMax",20),this.color=r("color",[1,0,0,1]).slice(),this.areaRatio=r("areaRatio",1),this.borderColor=r("borderColor",[0,0,0,1]).slice(),this.blend=r("blend",!1);var n=t.positions.length>>>1,a=t.positions instanceof Float32Array,o=t.idToIndex instanceof Int32Array&&t.idToIndex.length>=n,s=t.positions,l=a?s:i.mallocFloat32(s.length),c=o?t.idToIndex:i.mallocInt32(n);if(a||l.set(s),!o)for(l.set(s),e=0;e<n;e++)c[e]=e;this.points=s,this.offsetBuffer.update(l),this.pickBuffer.update(c),a||i.free(l),o||i.free(c),this.pointCount=n,this.pickOffset=0},u.unifiedDraw=(l=[1,0,0,0,1,0,0,0,1],c=[0,0,0,0],function(t){var e=void 0!==t,r=e?this.pickShader:this.shader,n=this.plot.gl,a=this.plot.dataBox;if(0===this.pointCount)return t;var i=a[2]-a[0],o=a[3]-a[1],s=function(t,e){var r,n=0,a=t.length>>>1;for(r=0;r<a;r++){var i=t[2*r],o=t[2*r+1];i>=e[0]&&i<=e[2]&&o>=e[1]&&o<=e[3]&&n++}return n}(this.points,a),u=this.plot.pickPixelRatio*Math.max(Math.min(this.sizeMinCap,this.sizeMin),Math.min(this.sizeMax,this.sizeMax/Math.pow(s,.33333)));l[0]=2/i,l[4]=2/o,l[6]=-2*a[0]/i-1,l[7]=-2*a[1]/o-1,this.offsetBuffer.bind(),r.bind(),r.attributes.position.pointer(),r.uniforms.matrix=l,r.uniforms.color=this.color,r.uniforms.borderColor=this.borderColor,r.uniforms.pointCloud=u<5,r.uniforms.pointSize=u,r.uniforms.centerFraction=Math.min(1,Math.max(0,Math.sqrt(1-this.areaRatio))),e&&(c[0]=255&t,c[1]=t>>8&255,c[2]=t>>16&255,c[3]=t>>24&255,this.pickBuffer.bind(),r.attributes.pickId.pointer(n.UNSIGNED_BYTE),r.uniforms.pickOffset=c,this.pickOffset=t);var h=n.getParameter(n.BLEND),f=n.getParameter(n.DITHER);return h&&!this.blend&&n.disable(n.BLEND),f&&n.disable(n.DITHER),n.drawArrays(n.POINTS,0,this.pointCount),h&&!this.blend&&n.enable(n.BLEND),f&&n.enable(n.DITHER),t+this.pointCount}),u.draw=u.unifiedDraw,u.drawPick=u.unifiedDraw,u.pick=function(t,e,r){var n=this.pickOffset,a=this.pointCount;if(r<n||r>=n+a)return null;var i=r-n,o=this.points;return{object:this,pointId:i,dataCoord:[o[2*i],o[2*i+1]]}}},{"./lib/shader":294,"gl-buffer":244,"gl-shader":304,"typedarray-pool":543}],296:[function(t,e,r){e.exports=function(t,e,r,n){var a,i,o,s,l,c=e[0],u=e[1],h=e[2],f=e[3],p=r[0],d=r[1],g=r[2],v=r[3];(i=c*p+u*d+h*g+f*v)<0&&(i=-i,p=-p,d=-d,g=-g,v=-v);1-i>1e-6?(a=Math.acos(i),o=Math.sin(a),s=Math.sin((1-n)*a)/o,l=Math.sin(n*a)/o):(s=1-n,l=n);return t[0]=s*c+l*p,t[1]=s*u+l*d,t[2]=s*h+l*g,t[3]=s*f+l*v,t}},{}],297:[function(t,e,r){"use strict";e.exports=function(t){return t||0===t?t.toString():""}},{}],298:[function(t,e,r){"use strict";var n=t("vectorize-text");e.exports=function(t,e,r){var i=a[e];i||(i=a[e]={});if(t in i)return i[t];var o={textAlign:"center",textBaseline:"middle",lineHeight:1,font:e,lineSpacing:1.25,styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},triangles:!0},s=n(t,o);o.triangles=!1;var l,c,u=n(t,o);if(r&&1!==r){for(l=0;l<s.positions.length;++l)for(c=0;c<s.positions[l].length;++c)s.positions[l][c]/=r;for(l=0;l<u.positions.length;++l)for(c=0;c<u.positions[l].length;++c)u.positions[l][c]/=r}var h=[[1/0,1/0],[-1/0,-1/0]],f=u.positions.length;for(l=0;l<f;++l){var p=u.positions[l];for(c=0;c<2;++c)h[0][c]=Math.min(h[0][c],p[c]),h[1][c]=Math.max(h[1][c],p[c])}return i[t]=[s,u,h]};var a={}},{"vectorize-text":548}],299:[function(t,e,r){var n=t("gl-shader"),a=t("glslify"),i=a(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 glyph;\nattribute vec4 id;\n\nuniform vec4 highlightId;\nuniform float highlightScale;\nuniform mat4 model, view, projection;\nuniform vec3 clipBounds[2];\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n gl_Position = vec4(0,0,0,0);\n } else {\n float scale = 1.0;\n if(distance(highlightId, id) < 0.0001) {\n scale = highlightScale;\n }\n\n vec4 worldPosition = model * vec4(position, 1);\n vec4 viewPosition = view * worldPosition;\n viewPosition = viewPosition / viewPosition.w;\n vec4 clipPosition = projection * (viewPosition + scale * vec4(glyph.x, -glyph.y, 0, 0));\n\n gl_Position = clipPosition;\n interpColor = color;\n pickId = id;\n dataCoordinate = position;\n }\n}"]),o=a(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 glyph;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\nuniform vec2 screenSize;\nuniform vec3 clipBounds[2];\nuniform float highlightScale, pixelRatio;\nuniform vec4 highlightId;\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n gl_Position = vec4(0,0,0,0);\n } else {\n float scale = pixelRatio;\n if(distance(highlightId.bgr, id.bgr) < 0.001) {\n scale *= highlightScale;\n }\n\n vec4 worldPosition = model * vec4(position, 1.0);\n vec4 viewPosition = view * worldPosition;\n vec4 clipPosition = projection * viewPosition;\n clipPosition /= clipPosition.w;\n\n gl_Position = clipPosition + vec4(screenSize * scale * vec2(glyph.x, -glyph.y), 0.0, 0.0);\n interpColor = color;\n pickId = id;\n dataCoordinate = position;\n }\n}"]),s=a(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 glyph;\nattribute vec4 id;\n\nuniform float highlightScale;\nuniform vec4 highlightId;\nuniform vec3 axes[2];\nuniform mat4 model, view, projection;\nuniform vec2 screenSize;\nuniform vec3 clipBounds[2];\nuniform float scale, pixelRatio;\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n gl_Position = vec4(0,0,0,0);\n } else {\n float lscale = pixelRatio * scale;\n if(distance(highlightId, id) < 0.0001) {\n lscale *= highlightScale;\n }\n\n vec4 clipCenter = projection * view * model * vec4(position, 1);\n vec3 dataPosition = position + 0.5*lscale*(axes[0] * glyph.x + axes[1] * glyph.y) * clipCenter.w * screenSize.y;\n vec4 clipPosition = projection * view * model * vec4(dataPosition, 1);\n\n gl_Position = clipPosition;\n interpColor = color;\n pickId = id;\n dataCoordinate = dataPosition;\n }\n}\n"]),l=a(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 fragClipBounds[2];\nuniform float opacity;\n\nvarying vec4 interpColor;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if (\n outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate) ||\n interpColor.a * opacity == 0.\n ) discard;\n gl_FragColor = interpColor * opacity;\n}\n"]),c=a(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 fragClipBounds[2];\nuniform float pickGroup;\n\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if (outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate)) discard;\n\n gl_FragColor = vec4(pickGroup, pickId.bgr);\n}"]),u=[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"glyph",type:"vec2"},{name:"id",type:"vec4"}],h={vertex:i,fragment:l,attributes:u},f={vertex:o,fragment:l,attributes:u},p={vertex:s,fragment:l,attributes:u},d={vertex:i,fragment:c,attributes:u},g={vertex:o,fragment:c,attributes:u},v={vertex:s,fragment:c,attributes:u};function m(t,e){var r=n(t,e),a=r.attributes;return a.position.location=0,a.color.location=1,a.glyph.location=2,a.id.location=3,r}r.createPerspective=function(t){return m(t,h)},r.createOrtho=function(t){return m(t,f)},r.createProject=function(t){return m(t,p)},r.createPickPerspective=function(t){return m(t,d)},r.createPickOrtho=function(t){return m(t,g)},r.createPickProject=function(t){return m(t,v)}},{"gl-shader":304,glslify:410}],300:[function(t,e,r){"use strict";var n=t("is-string-blank"),a=t("gl-buffer"),i=t("gl-vao"),o=t("typedarray-pool"),s=t("gl-mat4/multiply"),l=t("./lib/shaders"),c=t("./lib/glyphs"),u=t("./lib/get-simple-string"),h=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function f(t,e){var r=t[0],n=t[1],a=t[2],i=t[3];return t[0]=e[0]*r+e[4]*n+e[8]*a+e[12]*i,t[1]=e[1]*r+e[5]*n+e[9]*a+e[13]*i,t[2]=e[2]*r+e[6]*n+e[10]*a+e[14]*i,t[3]=e[3]*r+e[7]*n+e[11]*a+e[15]*i,t}function p(t,e,r,n){return f(n,n),f(n,n),f(n,n)}function d(t,e){this.index=t,this.dataCoordinate=this.position=e}function g(t){return!0===t?1:t>1?1:t}function v(t,e,r,n,a,i,o,s,l,c,u,h){this.gl=t,this.pixelRatio=1,this.shader=e,this.orthoShader=r,this.projectShader=n,this.pointBuffer=a,this.colorBuffer=i,this.glyphBuffer=o,this.idBuffer=s,this.vao=l,this.vertexCount=0,this.lineVertexCount=0,this.opacity=1,this.hasAlpha=!1,this.lineWidth=0,this.projectScale=[2/3,2/3,2/3],this.projectOpacity=[1,1,1],this.projectHasAlpha=!1,this.pickId=0,this.pickPerspectiveShader=c,this.pickOrthoShader=u,this.pickProjectShader=h,this.points=[],this._selectResult=new d(0,[0,0,0]),this.useOrtho=!0,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.axesProject=[!0,!0,!0],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.highlightId=[1,1,1,1],this.highlightScale=2,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.dirty=!0}e.exports=function(t){var e=t.gl,r=l.createPerspective(e),n=l.createOrtho(e),o=l.createProject(e),s=l.createPickPerspective(e),c=l.createPickOrtho(e),u=l.createPickProject(e),h=a(e),f=a(e),p=a(e),d=a(e),g=i(e,[{buffer:h,size:3,type:e.FLOAT},{buffer:f,size:4,type:e.FLOAT},{buffer:p,size:2,type:e.FLOAT},{buffer:d,size:4,type:e.UNSIGNED_BYTE,normalized:!0}]),m=new v(e,r,n,o,h,f,p,d,g,s,c,u);return m.update(t),m};var m=v.prototype;m.pickSlots=1,m.setPickBase=function(t){this.pickId=t},m.isTransparent=function(){if(this.hasAlpha)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&this.projectHasAlpha)return!0;return!1},m.isOpaque=function(){if(!this.hasAlpha)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&!this.projectHasAlpha)return!0;return!1};var y=[0,0],x=[0,0,0],b=[0,0,0],_=[0,0,0,1],w=[0,0,0,1],k=h.slice(),T=[0,0,0],M=[[0,0,0],[0,0,0]];function A(t){return t[0]=t[1]=t[2]=0,t}function S(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=1,t}function E(t,e,r,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[r]=n,t}function L(t,e,r,n){var a,i=e.axesProject,o=e.gl,l=t.uniforms,c=r.model||h,u=r.view||h,f=r.projection||h,d=e.axesBounds,g=function(t){for(var e=M,r=0;r<2;++r)for(var n=0;n<3;++n)e[r][n]=Math.max(Math.min(t[r][n],1e8),-1e8);return e}(e.clipBounds);a=e.axes&&e.axes.lastCubeProps?e.axes.lastCubeProps.axis:[1,1,1],y[0]=2/o.drawingBufferWidth,y[1]=2/o.drawingBufferHeight,t.bind(),l.view=u,l.projection=f,l.screenSize=y,l.highlightId=e.highlightId,l.highlightScale=e.highlightScale,l.clipBounds=g,l.pickGroup=e.pickId/255,l.pixelRatio=n;for(var v=0;v<3;++v)if(i[v]){l.scale=e.projectScale[v],l.opacity=e.projectOpacity[v];for(var m=k,L=0;L<16;++L)m[L]=0;for(L=0;L<4;++L)m[5*L]=1;m[5*v]=0,a[v]<0?m[12+v]=d[0][v]:m[12+v]=d[1][v],s(m,c,m),l.model=m;var C=(v+1)%3,P=(v+2)%3,O=A(x),z=A(b);O[C]=1,z[P]=1;var I=p(0,0,0,S(_,O)),D=p(0,0,0,S(w,z));if(Math.abs(I[1])>Math.abs(D[1])){var R=I;I=D,D=R,R=O,O=z,z=R;var F=C;C=P,P=F}I[0]<0&&(O[C]=-1),D[1]>0&&(z[P]=-1);var B=0,N=0;for(L=0;L<4;++L)B+=Math.pow(c[4*C+L],2),N+=Math.pow(c[4*P+L],2);O[C]/=Math.sqrt(B),z[P]/=Math.sqrt(N),l.axes[0]=O,l.axes[1]=z,l.fragClipBounds[0]=E(T,g[0],v,-1e8),l.fragClipBounds[1]=E(T,g[1],v,1e8),e.vao.bind(),e.vao.draw(o.TRIANGLES,e.vertexCount),e.lineWidth>0&&(o.lineWidth(e.lineWidth*n),e.vao.draw(o.LINES,e.lineVertexCount,e.vertexCount)),e.vao.unbind()}}var C=[[-1e8,-1e8,-1e8],[1e8,1e8,1e8]];function P(t,e,r,n,a,i,o){var s=r.gl;if((i===r.projectHasAlpha||o)&&L(e,r,n,a),i===r.hasAlpha||o){t.bind();var l=t.uniforms;l.model=n.model||h,l.view=n.view||h,l.projection=n.projection||h,y[0]=2/s.drawingBufferWidth,y[1]=2/s.drawingBufferHeight,l.screenSize=y,l.highlightId=r.highlightId,l.highlightScale=r.highlightScale,l.fragClipBounds=C,l.clipBounds=r.axes.bounds,l.opacity=r.opacity,l.pickGroup=r.pickId/255,l.pixelRatio=a,r.vao.bind(),r.vao.draw(s.TRIANGLES,r.vertexCount),r.lineWidth>0&&(s.lineWidth(r.lineWidth*a),r.vao.draw(s.LINES,r.lineVertexCount,r.vertexCount)),r.vao.unbind()}}function O(t,e,r,a){var i;i=Array.isArray(t)?e<t.length?t[e]:void 0:t,i=u(i);var o=!0;n(i)&&(i="\u25bc",o=!1);var s=c(i,r,a);return{mesh:s[0],lines:s[1],bounds:s[2],visible:o}}m.draw=function(t){P(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,this.pixelRatio,!1,!1)},m.drawTransparent=function(t){P(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,this.pixelRatio,!0,!1)},m.drawPick=function(t){P(this.useOrtho?this.pickOrthoShader:this.pickPerspectiveShader,this.pickProjectShader,this,t,1,!0,!0)},m.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[2]+(t.value[1]<<8)+(t.value[0]<<16);if(e>=this.pointCount||e<0)return null;var r=this.points[e],n=this._selectResult;n.index=e;for(var a=0;a<3;++a)n.position[a]=n.dataCoordinate[a]=r[a];return n},m.highlight=function(t){if(t){var e=t.index,r=255&e,n=e>>8&255,a=e>>16&255;this.highlightId=[r/255,n/255,a/255,0]}else this.highlightId=[1,1,1,1]},m.update=function(t){if("perspective"in(t=t||{})&&(this.useOrtho=!t.perspective),"orthographic"in t&&(this.useOrtho=!!t.orthographic),"lineWidth"in t&&(this.lineWidth=t.lineWidth),"project"in t)if(Array.isArray(t.project))this.axesProject=t.project;else{var e=!!t.project;this.axesProject=[e,e,e]}if("projectScale"in t)if(Array.isArray(t.projectScale))this.projectScale=t.projectScale.slice();else{var r=+t.projectScale;this.projectScale=[r,r,r]}if(this.projectHasAlpha=!1,"projectOpacity"in t){if(Array.isArray(t.projectOpacity))this.projectOpacity=t.projectOpacity.slice();else{r=+t.projectOpacity;this.projectOpacity=[r,r,r]}for(var n=0;n<3;++n)this.projectOpacity[n]=g(this.projectOpacity[n]),this.projectOpacity[n]<1&&(this.projectHasAlpha=!0)}this.hasAlpha=!1,"opacity"in t&&(this.opacity=g(t.opacity),this.opacity<1&&(this.hasAlpha=!0)),this.dirty=!0;var a,i,s=t.position,l=t.font||"normal",c=t.alignment||[0,0];if(2===c.length)a=c[0],i=c[1];else{a=[],i=[];for(n=0;n<c.length;++n)a[n]=c[n][0],i[n]=c[n][1]}var u=[1/0,1/0,1/0],h=[-1/0,-1/0,-1/0],f=t.glyph,p=t.color,d=t.size,v=t.angle,m=t.lineColor,y=-1,x=0,b=0,_=0;if(s.length){_=s.length;t:for(n=0;n<_;++n){for(var w=s[n],k=0;k<3;++k)if(isNaN(w[k])||!isFinite(w[k]))continue t;var T=(N=O(f,n,l,this.pixelRatio)).mesh,M=N.lines,A=N.bounds;x+=3*T.cells.length,b+=2*M.edges.length}}var S=x+b,E=o.mallocFloat(3*S),L=o.mallocFloat(4*S),C=o.mallocFloat(2*S),P=o.mallocUint32(S);if(S>0){var z=0,I=x,D=[0,0,0,1],R=[0,0,0,1],F=Array.isArray(p)&&Array.isArray(p[0]),B=Array.isArray(m)&&Array.isArray(m[0]);t:for(n=0;n<_;++n){y+=1;for(w=s[n],k=0;k<3;++k){if(isNaN(w[k])||!isFinite(w[k]))continue t;h[k]=Math.max(h[k],w[k]),u[k]=Math.min(u[k],w[k])}T=(N=O(f,n,l,this.pixelRatio)).mesh,M=N.lines,A=N.bounds;var N,j=N.visible;if(j)if(Array.isArray(p)){if(3===(V=F?n<p.length?p[n]:[0,0,0,0]:p).length){for(k=0;k<3;++k)D[k]=V[k];D[3]=1}else if(4===V.length){for(k=0;k<4;++k)D[k]=V[k];!this.hasAlpha&&V[3]<1&&(this.hasAlpha=!0)}}else D[0]=D[1]=D[2]=0,D[3]=1;else D=[1,1,1,0];if(j)if(Array.isArray(m)){var V;if(3===(V=B?n<m.length?m[n]:[0,0,0,0]:m).length){for(k=0;k<3;++k)R[k]=V[k];R[k]=1}else if(4===V.length){for(k=0;k<4;++k)R[k]=V[k];!this.hasAlpha&&V[3]<1&&(this.hasAlpha=!0)}}else R[0]=R[1]=R[2]=0,R[3]=1;else R=[1,1,1,0];var U=.5;j?Array.isArray(d)?U=n<d.length?+d[n]:12:d?U=+d:this.useOrtho&&(U=12):U=0;var q=0;Array.isArray(v)?q=n<v.length?+v[n]:0:v&&(q=+v);var H=Math.cos(q),G=Math.sin(q);for(w=s[n],k=0;k<3;++k)h[k]=Math.max(h[k],w[k]),u[k]=Math.min(u[k],w[k]);var Y=a,W=i;Y=0;Array.isArray(a)?Y=n<a.length?a[n]:0:a&&(Y=a);W=0;Array.isArray(i)?W=n<i.length?i[n]:0:i&&(W=i);var X=[Y*=Y>0?1-A[0][0]:Y<0?1+A[1][0]:1,W*=W>0?1-A[0][1]:W<0?1+A[1][1]:1],Z=T.cells||[],J=T.positions||[];for(k=0;k<Z.length;++k)for(var K=Z[k],Q=0;Q<3;++Q){for(var $=0;$<3;++$)E[3*z+$]=w[$];for($=0;$<4;++$)L[4*z+$]=D[$];P[z]=y;var tt=J[K[Q]];C[2*z]=U*(H*tt[0]-G*tt[1]+X[0]),C[2*z+1]=U*(G*tt[0]+H*tt[1]+X[1]),z+=1}for(Z=M.edges,J=M.positions,k=0;k<Z.length;++k)for(K=Z[k],Q=0;Q<2;++Q){for($=0;$<3;++$)E[3*I+$]=w[$];for($=0;$<4;++$)L[4*I+$]=R[$];P[I]=y;tt=J[K[Q]];C[2*I]=U*(H*tt[0]-G*tt[1]+X[0]),C[2*I+1]=U*(G*tt[0]+H*tt[1]+X[1]),I+=1}}}this.bounds=[u,h],this.points=s,this.pointCount=s.length,this.vertexCount=x,this.lineVertexCount=b,this.pointBuffer.update(E),this.colorBuffer.update(L),this.glyphBuffer.update(C),this.idBuffer.update(P),o.free(E),o.free(L),o.free(C),o.free(P)},m.dispose=function(){this.shader.dispose(),this.orthoShader.dispose(),this.pickPerspectiveShader.dispose(),this.pickOrthoShader.dispose(),this.vao.dispose(),this.pointBuffer.dispose(),this.colorBuffer.dispose(),this.glyphBuffer.dispose(),this.idBuffer.dispose()}},{"./lib/get-simple-string":297,"./lib/glyphs":298,"./lib/shaders":299,"gl-buffer":244,"gl-mat4/multiply":270,"gl-vao":329,"is-string-blank":424,"typedarray-pool":543}],301:[function(t,e,r){"use strict";var n=t("glslify");r.boxVertex=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 vertex;\n\nuniform vec2 cornerA, cornerB;\n\nvoid main() {\n gl_Position = vec4(mix(cornerA, cornerB, vertex), 0, 1);\n}\n"]),r.boxFragment=n(["precision mediump float;\n#define GLSLIFY 1\n\nuniform vec4 color;\n\nvoid main() {\n gl_FragColor = color;\n}\n"])},{glslify:410}],302:[function(t,e,r){"use strict";var n=t("gl-shader"),a=t("gl-buffer"),i=t("./lib/shaders");function o(t,e,r){this.plot=t,this.boxBuffer=e,this.boxShader=r,this.enabled=!0,this.selectBox=[1/0,1/0,-1/0,-1/0],this.borderColor=[0,0,0,1],this.innerFill=!1,this.innerColor=[0,0,0,.25],this.outerFill=!0,this.outerColor=[0,0,0,.5],this.borderWidth=10}e.exports=function(t,e){var r=t.gl,s=a(r,[0,0,0,1,1,0,1,1]),l=n(r,i.boxVertex,i.boxFragment),c=new o(t,s,l);return c.update(e),t.addOverlay(c),c};var s=o.prototype;s.draw=function(){if(this.enabled){var t=this.plot,e=this.selectBox,r=this.borderWidth,n=(this.innerFill,this.innerColor),a=(this.outerFill,this.outerColor),i=this.borderColor,o=t.box,s=t.screenBox,l=t.dataBox,c=t.viewBox,u=t.pixelRatio,h=(e[0]-l[0])*(c[2]-c[0])/(l[2]-l[0])+c[0],f=(e[1]-l[1])*(c[3]-c[1])/(l[3]-l[1])+c[1],p=(e[2]-l[0])*(c[2]-c[0])/(l[2]-l[0])+c[0],d=(e[3]-l[1])*(c[3]-c[1])/(l[3]-l[1])+c[1];if(h=Math.max(h,c[0]),f=Math.max(f,c[1]),p=Math.min(p,c[2]),d=Math.min(d,c[3]),!(p<h||d<f)){o.bind();var g=s[2]-s[0],v=s[3]-s[1];if(this.outerFill&&(o.drawBox(0,0,g,f,a),o.drawBox(0,f,h,d,a),o.drawBox(0,d,g,v,a),o.drawBox(p,f,g,d,a)),this.innerFill&&o.drawBox(h,f,p,d,n),r>0){var m=r*u;o.drawBox(h-m,f-m,p+m,f+m,i),o.drawBox(h-m,d-m,p+m,d+m,i),o.drawBox(h-m,f-m,h+m,d+m,i),o.drawBox(p-m,f-m,p+m,d+m,i)}}}},s.update=function(t){t=t||{},this.innerFill=!!t.innerFill,this.outerFill=!!t.outerFill,this.innerColor=(t.innerColor||[0,0,0,.5]).slice(),this.outerColor=(t.outerColor||[0,0,0,.5]).slice(),this.borderColor=(t.borderColor||[0,0,0,1]).slice(),this.borderWidth=t.borderWidth||0,this.selectBox=(t.selectBox||this.selectBox).slice()},s.dispose=function(){this.boxBuffer.dispose(),this.boxShader.dispose(),this.plot.removeOverlay(this)}},{"./lib/shaders":301,"gl-buffer":244,"gl-shader":304}],303:[function(t,e,r){"use strict";e.exports=function(t,e){var r=e[0],i=e[1],o=n(t,r,i,{}),s=a.mallocUint8(r*i*4);return new c(t,o,s)};var n=t("gl-fbo"),a=t("typedarray-pool"),i=t("ndarray"),o=t("bit-twiddle").nextPow2,s=t("cwise/lib/wrapper")({args:["array",{offset:[0,0,1],array:0},{offset:[0,0,2],array:0},{offset:[0,0,3],array:0},"scalar","scalar","index"],pre:{body:"{this_closestD2=1e8,this_closestX=-1,this_closestY=-1}",args:[],thisVars:["this_closestD2","this_closestX","this_closestY"],localVars:[]},body:{body:"{if(_inline_16_arg0_<255||_inline_16_arg1_<255||_inline_16_arg2_<255||_inline_16_arg3_<255){var _inline_16_l=_inline_16_arg4_-_inline_16_arg6_[0],_inline_16_a=_inline_16_arg5_-_inline_16_arg6_[1],_inline_16_f=_inline_16_l*_inline_16_l+_inline_16_a*_inline_16_a;_inline_16_f<this_closestD2&&(this_closestD2=_inline_16_f,this_closestX=_inline_16_arg6_[0],this_closestY=_inline_16_arg6_[1])}}",args:[{name:"_inline_16_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_16_arg1_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_16_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_16_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_16_arg4_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_16_arg5_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_16_arg6_",lvalue:!1,rvalue:!0,count:4}],thisVars:["this_closestD2","this_closestX","this_closestY"],localVars:["_inline_16_a","_inline_16_f","_inline_16_l"]},post:{body:"{return[this_closestX,this_closestY,this_closestD2]}",args:[],thisVars:["this_closestD2","this_closestX","this_closestY"],localVars:[]},debug:!1,funcName:"cwise",blockSize:64});function l(t,e,r,n,a){this.coord=[t,e],this.id=r,this.value=n,this.distance=a}function c(t,e,r){this.gl=t,this.fbo=e,this.buffer=r,this._readTimeout=null;var n=this;this._readCallback=function(){n.gl&&(e.bind(),t.readPixels(0,0,e.shape[0],e.shape[1],t.RGBA,t.UNSIGNED_BYTE,n.buffer),n._readTimeout=null)}}var u=c.prototype;Object.defineProperty(u,"shape",{get:function(){return this.gl?this.fbo.shape.slice():[0,0]},set:function(t){if(this.gl){this.fbo.shape=t;var e=this.fbo.shape[0],r=this.fbo.shape[1];if(r*e*4>this.buffer.length){a.free(this.buffer);for(var n=this.buffer=a.mallocUint8(o(r*e*4)),i=0;i<r*e*4;++i)n[i]=255}return t}}}),u.begin=function(){var t=this.gl;this.shape;t&&(this.fbo.bind(),t.clearColor(1,1,1,1),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT))},u.end=function(){var t=this.gl;t&&(t.bindFramebuffer(t.FRAMEBUFFER,null),this._readTimeout||clearTimeout(this._readTimeout),this._readTimeout=setTimeout(this._readCallback,1))},u.query=function(t,e,r){if(!this.gl)return null;var n=this.fbo.shape.slice();t|=0,e|=0,"number"!=typeof r&&(r=1);var a=0|Math.min(Math.max(t-r,0),n[0]),o=0|Math.min(Math.max(t+r,0),n[0]),c=0|Math.min(Math.max(e-r,0),n[1]),u=0|Math.min(Math.max(e+r,0),n[1]);if(o<=a||u<=c)return null;var h=[o-a,u-c],f=i(this.buffer,[h[0],h[1],4],[4,4*n[0],1],4*(a+n[0]*c)),p=s(f.hi(h[0],h[1],1),r,r),d=p[0],g=p[1];return d<0||Math.pow(this.radius,2)<p[2]?null:new l(d+a|0,g+c|0,f.get(d,g,0),[f.get(d,g,1),f.get(d,g,2),f.get(d,g,3)],Math.sqrt(p[2]))},u.dispose=function(){this.gl&&(this.fbo.dispose(),a.free(this.buffer),this.gl=null,this._readTimeout&&clearTimeout(this._readTimeout))}},{"bit-twiddle":94,"cwise/lib/wrapper":151,"gl-fbo":252,ndarray:451,"typedarray-pool":543}],304:[function(t,e,r){"use strict";var n=t("./lib/create-uniforms"),a=t("./lib/create-attributes"),i=t("./lib/reflect"),o=t("./lib/shader-cache"),s=t("./lib/runtime-reflect"),l=t("./lib/GLError");function c(t){this.gl=t,this.gl.lastAttribCount=0,this._vref=this._fref=this._relink=this.vertShader=this.fragShader=this.program=this.attributes=this.uniforms=this.types=null}var u=c.prototype;function h(t,e){return t.name<e.name?-1:1}u.bind=function(){var t;this.program||this._relink();var e=this.gl.getProgramParameter(this.program,this.gl.ACTIVE_ATTRIBUTES),r=this.gl.lastAttribCount;if(e>r)for(t=r;t<e;t++)this.gl.enableVertexAttribArray(t);else if(r>e)for(t=e;t<r;t++)this.gl.disableVertexAttribArray(t);this.gl.lastAttribCount=e,this.gl.useProgram(this.program)},u.dispose=function(){for(var t=this.gl.lastAttribCount,e=0;e<t;e++)this.gl.disableVertexAttribArray(e);this.gl.lastAttribCount=0,this._fref&&this._fref.dispose(),this._vref&&this._vref.dispose(),this.attributes=this.types=this.vertShader=this.fragShader=this.program=this._relink=this._fref=this._vref=null},u.update=function(t,e,r,c){if(!e||1===arguments.length){var u=t;t=u.vertex,e=u.fragment,r=u.uniforms,c=u.attributes}var f=this,p=f.gl,d=f._vref;f._vref=o.shader(p,p.VERTEX_SHADER,t),d&&d.dispose(),f.vertShader=f._vref.shader;var g=this._fref;if(f._fref=o.shader(p,p.FRAGMENT_SHADER,e),g&&g.dispose(),f.fragShader=f._fref.shader,!r||!c){var v=p.createProgram();if(p.attachShader(v,f.fragShader),p.attachShader(v,f.vertShader),p.linkProgram(v),!p.getProgramParameter(v,p.LINK_STATUS)){var m=p.getProgramInfoLog(v);throw new l(m,"Error linking program:"+m)}r=r||s.uniforms(p,v),c=c||s.attributes(p,v),p.deleteProgram(v)}(c=c.slice()).sort(h);var y,x=[],b=[],_=[];for(y=0;y<c.length;++y){var w=c[y];if(w.type.indexOf("mat")>=0){for(var k=0|w.type.charAt(w.type.length-1),T=new Array(k),M=0;M<k;++M)T[M]=_.length,b.push(w.name+"["+M+"]"),"number"==typeof w.location?_.push(w.location+M):Array.isArray(w.location)&&w.location.length===k&&"number"==typeof w.location[M]?_.push(0|w.location[M]):_.push(-1);x.push({name:w.name,type:w.type,locations:T})}else x.push({name:w.name,type:w.type,locations:[_.length]}),b.push(w.name),"number"==typeof w.location?_.push(0|w.location):_.push(-1)}var A=0;for(y=0;y<_.length;++y)if(_[y]<0){for(;_.indexOf(A)>=0;)A+=1;_[y]=A}var S=new Array(r.length);function E(){f.program=o.program(p,f._vref,f._fref,b,_);for(var t=0;t<r.length;++t)S[t]=p.getUniformLocation(f.program,r[t].name)}E(),f._relink=E,f.types={uniforms:i(r),attributes:i(c)},f.attributes=a(p,f,x,_),Object.defineProperty(f,"uniforms",n(p,f,r,S))},e.exports=function(t,e,r,n,a){var i=new c(t);return i.update(e,r,n,a),i}},{"./lib/GLError":305,"./lib/create-attributes":306,"./lib/create-uniforms":307,"./lib/reflect":308,"./lib/runtime-reflect":309,"./lib/shader-cache":310}],305:[function(t,e,r){function n(t,e,r){this.shortMessage=e||"",this.longMessage=r||"",this.rawError=t||"",this.message="gl-shader: "+(e||t||"")+(r?"\n"+r:""),this.stack=(new Error).stack}n.prototype=new Error,n.prototype.name="GLError",n.prototype.constructor=n,e.exports=n},{}],306:[function(t,e,r){"use strict";e.exports=function(t,e,r,a){for(var i={},l=0,c=r.length;l<c;++l){var u=r[l],h=u.name,f=u.type,p=u.locations;switch(f){case"bool":case"int":case"float":o(t,e,p[0],a,1,i,h);break;default:if(f.indexOf("vec")>=0){var d=f.charCodeAt(f.length-1)-48;if(d<2||d>4)throw new n("","Invalid data type for attribute "+h+": "+f);o(t,e,p[0],a,d,i,h)}else{if(!(f.indexOf("mat")>=0))throw new n("","Unknown data type for attribute "+h+": "+f);var d=f.charCodeAt(f.length-1)-48;if(d<2||d>4)throw new n("","Invalid data type for attribute "+h+": "+f);s(t,e,p,a,d,i,h)}}}return i};var n=t("./GLError");function a(t,e,r,n,a,i){this._gl=t,this._wrapper=e,this._index=r,this._locations=n,this._dimension=a,this._constFunc=i}var i=a.prototype;function o(t,e,r,n,i,o,s){for(var l=["gl","v"],c=[],u=0;u<i;++u)l.push("x"+u),c.push("x"+u);l.push("if(x0.length===void 0){return gl.vertexAttrib"+i+"f(v,"+c.join()+")}else{return gl.vertexAttrib"+i+"fv(v,x0)}");var h=Function.apply(null,l),f=new a(t,e,r,n,i,h);Object.defineProperty(o,s,{set:function(e){return t.disableVertexAttribArray(n[r]),h(t,n[r],e),e},get:function(){return f},enumerable:!0})}function s(t,e,r,n,a,i,s){for(var l=new Array(a),c=new Array(a),u=0;u<a;++u)o(t,e,r[u],n,a,l,u),c[u]=l[u];Object.defineProperty(l,"location",{set:function(t){if(Array.isArray(t))for(var e=0;e<a;++e)c[e].location=t[e];else for(e=0;e<a;++e)c[e].location=t+e;return t},get:function(){for(var t=new Array(a),e=0;e<a;++e)t[e]=n[r[e]];return t},enumerable:!0}),l.pointer=function(e,i,o,s){e=e||t.FLOAT,i=!!i,o=o||a*a,s=s||0;for(var l=0;l<a;++l){var c=n[r[l]];t.vertexAttribPointer(c,a,e,i,o,s+l*a),t.enableVertexAttribArray(c)}};var h=new Array(a),f=t["vertexAttrib"+a+"fv"];Object.defineProperty(i,s,{set:function(e){for(var i=0;i<a;++i){var o=n[r[i]];if(t.disableVertexAttribArray(o),Array.isArray(e[0]))f.call(t,o,e[i]);else{for(var s=0;s<a;++s)h[s]=e[a*i+s];f.call(t,o,h)}}return e},get:function(){return l},enumerable:!0})}i.pointer=function(t,e,r,n){var a=this._gl,i=this._locations[this._index];a.vertexAttribPointer(i,this._dimension,t||a.FLOAT,!!e,r||0,n||0),a.enableVertexAttribArray(i)},i.set=function(t,e,r,n){return this._constFunc(this._locations[this._index],t,e,r,n)},Object.defineProperty(i,"location",{get:function(){return this._locations[this._index]},set:function(t){return t!==this._locations[this._index]&&(this._locations[this._index]=0|t,this._wrapper.program=null),0|t}})},{"./GLError":305}],307:[function(t,e,r){"use strict";var n=t("./reflect"),a=t("./GLError");function i(t){return new Function("y","return function(){return y}")(t)}function o(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=e;return r}e.exports=function(t,e,r,s){function l(t,e,r){switch(r){case"bool":case"int":case"sampler2D":case"samplerCube":return"gl.uniform1i(locations["+e+"],obj"+t+")";case"float":return"gl.uniform1f(locations["+e+"],obj"+t+")";default:var n=r.indexOf("vec");if(!(0<=n&&n<=1&&r.length===4+n)){if(0===r.indexOf("mat")&&4===r.length){var i=r.charCodeAt(r.length-1)-48;if(i<2||i>4)throw new a("","Invalid uniform dimension type for matrix "+name+": "+r);return"gl.uniformMatrix"+i+"fv(locations["+e+"],false,obj"+t+")"}throw new a("","Unknown uniform data type for "+name+": "+r)}var i=r.charCodeAt(r.length-1)-48;if(i<2||i>4)throw new a("","Invalid data type");switch(r.charAt(0)){case"b":case"i":return"gl.uniform"+i+"iv(locations["+e+"],obj"+t+")";case"v":return"gl.uniform"+i+"fv(locations["+e+"],obj"+t+")";default:throw new a("","Unrecognized data type for vector "+name+": "+r)}}}function c(e){for(var n=["return function updateProperty(obj){"],a=function t(e,r){if("object"!=typeof r)return[[e,r]];var n=[];for(var a in r){var i=r[a],o=e;parseInt(a)+""===a?o+="["+a+"]":o+="."+a,"object"==typeof i?n.push.apply(n,t(o,i)):n.push([o,i])}return n}("",e),i=0;i<a.length;++i){var o=a[i],c=o[0],u=o[1];s[u]&&n.push(l(c,u,r[u].type))}n.push("return obj}");var h=new Function("gl","locations",n.join("\n"));return h(t,s)}function u(n,l,u){if("object"==typeof u){var f=h(u);Object.defineProperty(n,l,{get:i(f),set:c(u),enumerable:!0,configurable:!1})}else s[u]?Object.defineProperty(n,l,{get:(p=u,d=new Function("gl","wrapper","locations","return function(){return gl.getUniform(wrapper.program,locations["+p+"])}"),d(t,e,s)),set:c(u),enumerable:!0,configurable:!1}):n[l]=function(t){switch(t){case"bool":return!1;case"int":case"sampler2D":case"samplerCube":case"float":return 0;default:var e=t.indexOf("vec");if(0<=e&&e<=1&&t.length===4+e){var r=t.charCodeAt(t.length-1)-48;if(r<2||r>4)throw new a("","Invalid data type");return"b"===t.charAt(0)?o(r,!1):o(r,0)}if(0===t.indexOf("mat")&&4===t.length){var r=t.charCodeAt(t.length-1)-48;if(r<2||r>4)throw new a("","Invalid uniform dimension type for matrix "+name+": "+t);return o(r*r,0)}throw new a("","Unknown uniform data type for "+name+": "+t)}}(r[u].type);var p,d}function h(t){var e;if(Array.isArray(t)){e=new Array(t.length);for(var r=0;r<t.length;++r)u(e,r,t[r])}else for(var n in e={},t)u(e,n,t[n]);return e}var f=n(r,!0);return{get:i(h(f)),set:c(f),enumerable:!0,configurable:!0}}},{"./GLError":305,"./reflect":308}],308:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r={},n=0;n<t.length;++n)for(var a=t[n].name,i=a.split("."),o=r,s=0;s<i.length;++s){var l=i[s].split("[");if(l.length>1){l[0]in o||(o[l[0]]=[]),o=o[l[0]];for(var c=1;c<l.length;++c){var u=parseInt(l[c]);c<l.length-1||s<i.length-1?(u in o||(c<l.length-1?o[u]=[]:o[u]={}),o=o[u]):o[u]=e?n:t[n].type}}else s<i.length-1?(l[0]in o||(o[l[0]]={}),o=o[l[0]]):o[l[0]]=e?n:t[n].type}return r}},{}],309:[function(t,e,r){"use strict";r.uniforms=function(t,e){for(var r=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),n=[],a=0;a<r;++a){var o=t.getActiveUniform(e,a);if(o){var s=i(t,o.type);if(o.size>1)for(var l=0;l<o.size;++l)n.push({name:o.name.replace("[0]","["+l+"]"),type:s});else n.push({name:o.name,type:s})}}return n},r.attributes=function(t,e){for(var r=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES),n=[],a=0;a<r;++a){var o=t.getActiveAttrib(e,a);o&&n.push({name:o.name,type:i(t,o.type)})}return n};var n={FLOAT:"float",FLOAT_VEC2:"vec2",FLOAT_VEC3:"vec3",FLOAT_VEC4:"vec4",INT:"int",INT_VEC2:"ivec2",INT_VEC3:"ivec3",INT_VEC4:"ivec4",BOOL:"bool",BOOL_VEC2:"bvec2",BOOL_VEC3:"bvec3",BOOL_VEC4:"bvec4",FLOAT_MAT2:"mat2",FLOAT_MAT3:"mat3",FLOAT_MAT4:"mat4",SAMPLER_2D:"sampler2D",SAMPLER_CUBE:"samplerCube"},a=null;function i(t,e){if(!a){var r=Object.keys(n);a={};for(var i=0;i<r.length;++i){var o=r[i];a[t[o]]=n[o]}}return a[e]}},{}],310:[function(t,e,r){"use strict";r.shader=function(t,e,r){return u(t).getShaderReference(e,r)},r.program=function(t,e,r,n,a){return u(t).getProgram(e,r,n,a)};var n=t("./GLError"),a=t("gl-format-compiler-error"),i=new("undefined"==typeof WeakMap?t("weakmap-shim"):WeakMap),o=0;function s(t,e,r,n,a,i,o){this.id=t,this.src=e,this.type=r,this.shader=n,this.count=i,this.programs=[],this.cache=o}function l(t){this.gl=t,this.shaders=[{},{}],this.programs={}}s.prototype.dispose=function(){if(0==--this.count){for(var t=this.cache,e=t.gl,r=this.programs,n=0,a=r.length;n<a;++n){var i=t.programs[r[n]];i&&(delete t.programs[n],e.deleteProgram(i))}e.deleteShader(this.shader),delete t.shaders[this.type===e.FRAGMENT_SHADER|0][this.src]}};var c=l.prototype;function u(t){var e=i.get(t);return e||(e=new l(t),i.set(t,e)),e}c.getShaderReference=function(t,e){var r=this.gl,i=this.shaders[t===r.FRAGMENT_SHADER|0],l=i[e];if(l&&r.isShader(l.shader))l.count+=1;else{var c=function(t,e,r){var i=t.createShader(e);if(t.shaderSource(i,r),t.compileShader(i),!t.getShaderParameter(i,t.COMPILE_STATUS)){var o=t.getShaderInfoLog(i);try{var s=a(o,r,e)}catch(t){throw console.warn("Failed to format compiler error: "+t),new n(o,"Error compiling shader:\n"+o)}throw new n(o,s.short,s.long)}return i}(r,t,e);l=i[e]=new s(o++,e,t,c,[],1,this)}return l},c.getProgram=function(t,e,r,a){var i=[t.id,e.id,r.join(":"),a.join(":")].join("@"),o=this.programs[i];return o&&this.gl.isProgram(o)||(this.programs[i]=o=function(t,e,r,a,i){var o=t.createProgram();t.attachShader(o,e),t.attachShader(o,r);for(var s=0;s<a.length;++s)t.bindAttribLocation(o,i[s],a[s]);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){var l=t.getProgramInfoLog(o);throw new n(l,"Error linking program: "+l)}return o}(this.gl,t.shader,e.shader,r,a),t.programs.push(i),e.programs.push(i)),o}},{"./GLError":305,"gl-format-compiler-error":253,"weakmap-shim":553}],311:[function(t,e,r){"use strict";function n(t){this.plot=t,this.enable=[!0,!0,!1,!1],this.width=[1,1,1,1],this.color=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.center=[1/0,1/0]}e.exports=function(t,e){var r=new n(t);return r.update(e),t.addOverlay(r),r};var a=n.prototype;a.update=function(t){t=t||{},this.enable=(t.enable||[!0,!0,!1,!1]).slice(),this.width=(t.width||[1,1,1,1]).slice(),this.color=(t.color||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]).map(function(t){return t.slice()}),this.center=(t.center||[1/0,1/0]).slice(),this.plot.setOverlayDirty()},a.draw=function(){var t=this.enable,e=this.width,r=this.color,n=this.center,a=this.plot,i=a.line,o=a.dataBox,s=a.viewBox;if(i.bind(),o[0]<=n[0]&&n[0]<=o[2]&&o[1]<=n[1]&&n[1]<=o[3]){var l=s[0]+(n[0]-o[0])/(o[2]-o[0])*(s[2]-s[0]),c=s[1]+(n[1]-o[1])/(o[3]-o[1])*(s[3]-s[1]);t[0]&&i.drawLine(l,c,s[0],c,e[0],r[0]),t[1]&&i.drawLine(l,c,l,s[1],e[1],r[1]),t[2]&&i.drawLine(l,c,s[2],c,e[2],r[2]),t[3]&&i.drawLine(l,c,l,s[3],e[3],r[3])}},a.dispose=function(){this.plot.removeOverlay(this)}},{}],312:[function(t,e,r){"use strict";var n=t("glslify"),a=t("gl-shader"),i=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position, color;\nattribute float weight;\n\nuniform mat4 model, view, projection;\nuniform vec3 coordinates[3];\nuniform vec4 colors[3];\nuniform vec2 screenShape;\nuniform float lineWidth;\n\nvarying vec4 fragColor;\n\nvoid main() {\n vec3 vertexPosition = mix(coordinates[0],\n mix(coordinates[2], coordinates[1], 0.5 * (position + 1.0)), abs(position));\n\n vec4 clipPos = projection * view * model * vec4(vertexPosition, 1.0);\n vec2 clipOffset = (projection * view * model * vec4(color, 0.0)).xy;\n vec2 delta = weight * clipOffset * screenShape;\n vec2 lineOffset = normalize(vec2(delta.y, -delta.x)) / screenShape;\n\n gl_Position = vec4(clipPos.xy + clipPos.w * 0.5 * lineWidth * lineOffset, clipPos.z, clipPos.w);\n fragColor = color.x * colors[0] + color.y * colors[1] + color.z * colors[2];\n}\n"]),o=n(["precision mediump float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor;\n\nvoid main() {\n gl_FragColor = fragColor;\n}"]);e.exports=function(t){return a(t,i,o,null,[{name:"position",type:"vec3"},{name:"color",type:"vec3"},{name:"weight",type:"float"}])}},{"gl-shader":304,glslify:410}],313:[function(t,e,r){"use strict";var n=t("gl-buffer"),a=t("gl-vao"),i=t("./shaders/index");e.exports=function(t,e){var r=[];function o(t,e,n,a,i,o){var s=[t,e,n,0,0,0,1];s[a+3]=1,s[a]=i,r.push.apply(r,s),s[6]=-1,r.push.apply(r,s),s[a]=o,r.push.apply(r,s),r.push.apply(r,s),s[6]=1,r.push.apply(r,s),s[a]=i,r.push.apply(r,s)}o(0,0,0,0,0,1),o(0,0,0,1,0,1),o(0,0,0,2,0,1),o(1,0,0,1,-1,1),o(1,0,0,2,-1,1),o(0,1,0,0,-1,1),o(0,1,0,2,-1,1),o(0,0,1,0,-1,1),o(0,0,1,1,-1,1);var l=n(t,r),c=a(t,[{type:t.FLOAT,buffer:l,size:3,offset:0,stride:28},{type:t.FLOAT,buffer:l,size:3,offset:12,stride:28},{type:t.FLOAT,buffer:l,size:1,offset:24,stride:28}]),u=i(t);u.attributes.position.location=0,u.attributes.color.location=1,u.attributes.weight.location=2;var h=new s(t,l,c,u);return h.update(e),h};var o=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,r,n){this.gl=t,this.buffer=e,this.vao=r,this.shader=n,this.pixelRatio=1,this.bounds=[[-1e3,-1e3,-1e3],[1e3,1e3,1e3]],this.position=[0,0,0],this.lineWidth=[2,2,2],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.enabled=[!0,!0,!0],this.drawSides=[!0,!0,!0],this.axes=null}var l=s.prototype,c=[0,0,0],u=[0,0,0],h=[0,0];l.isTransparent=function(){return!1},l.drawTransparent=function(t){},l.draw=function(t){var e=this.gl,r=this.vao,n=this.shader;r.bind(),n.bind();var a,i=t.model||o,s=t.view||o,l=t.projection||o;this.axes&&(a=this.axes.lastCubeProps.axis);for(var f=c,p=u,d=0;d<3;++d)a&&a[d]<0?(f[d]=this.bounds[0][d],p[d]=this.bounds[1][d]):(f[d]=this.bounds[1][d],p[d]=this.bounds[0][d]);h[0]=e.drawingBufferWidth,h[1]=e.drawingBufferHeight,n.uniforms.model=i,n.uniforms.view=s,n.uniforms.projection=l,n.uniforms.coordinates=[this.position,f,p],n.uniforms.colors=this.colors,n.uniforms.screenShape=h;for(d=0;d<3;++d)n.uniforms.lineWidth=this.lineWidth[d]*this.pixelRatio,this.enabled[d]&&(r.draw(e.TRIANGLES,6,6*d),this.drawSides[d]&&r.draw(e.TRIANGLES,12,18+12*d));r.unbind()},l.update=function(t){t&&("bounds"in t&&(this.bounds=t.bounds),"position"in t&&(this.position=t.position),"lineWidth"in t&&(this.lineWidth=t.lineWidth),"colors"in t&&(this.colors=t.colors),"enabled"in t&&(this.enabled=t.enabled),"drawSides"in t&&(this.drawSides=t.drawSides))},l.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},{"./shaders/index":312,"gl-buffer":244,"gl-vao":329}],314:[function(t,e,r){var n=t("glslify"),a=n(["precision highp float;\n\nprecision highp float;\n#define GLSLIFY 1\n\nvec3 getOrthogonalVector(vec3 v) {\n // Return up-vector for only-z vector.\n // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\n // From the above if-statement we have ||a|| > 0 U ||b|| > 0.\n // Assign z = 0, x = -b, y = a:\n // a*-b + b*a + c*0 = -ba + ba + 0 = 0\n if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\n return normalize(vec3(-v.y, v.x, 0.0));\n } else {\n return normalize(vec3(0.0, v.z, -v.y));\n }\n}\n\n// Calculate the tube vertex and normal at the given index.\n//\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\n//\n// Each tube segment is made up of a ring of vertices.\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\n// The indexes of tube segments run from 0 to 8.\n//\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\n float segmentCount = 8.0;\n\n float angle = 2.0 * 3.14159 * (index / segmentCount);\n\n vec3 u = getOrthogonalVector(d);\n vec3 v = normalize(cross(u, d));\n\n vec3 x = u * cos(angle) * length(d);\n vec3 y = v * sin(angle) * length(d);\n vec3 v3 = x + y;\n\n normal = normalize(v3);\n\n return v3;\n}\n\nattribute vec4 vector;\nattribute vec4 color, position;\nattribute vec2 uv;\n\nuniform float vectorScale, tubeScale;\nuniform mat4 model, view, projection, inverseModel;\nuniform vec3 eyePosition, lightPosition;\n\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n // Scale the vector magnitude to stay constant with\n // model & view changes.\n vec3 normal;\n vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\n vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\n\n //Lighting geometry parameters\n vec4 cameraCoordinate = view * tubePosition;\n cameraCoordinate.xyz /= cameraCoordinate.w;\n f_lightDirection = lightPosition - cameraCoordinate.xyz;\n f_eyeDirection = eyePosition - cameraCoordinate.xyz;\n f_normal = normalize((vec4(normal, 0.0) * inverseModel).xyz);\n\n // vec4 m_position = model * vec4(tubePosition, 1.0);\n vec4 t_position = view * tubePosition;\n gl_Position = projection * t_position;\n\n f_color = color;\n f_data = tubePosition.xyz;\n f_position = position.xyz;\n f_uv = uv;\n}\n"]),i=n(["#extension GL_OES_standard_derivatives : enable\n\nprecision highp float;\n#define GLSLIFY 1\n\nfloat beckmannDistribution(float x, float roughness) {\n float NdotH = max(x, 0.0001);\n float cos2Alpha = NdotH * NdotH;\n float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n float roughness2 = roughness * roughness;\n float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n return exp(tan2Alpha / roughness2) / denom;\n}\n\nfloat cookTorranceSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float roughness,\n float fresnel) {\n\n float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\n float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\n\n //Half angle vector\n vec3 H = normalize(lightDirection + viewDirection);\n\n //Geometric term\n float NdotH = max(dot(surfaceNormal, H), 0.0);\n float VdotH = max(dot(viewDirection, H), 0.000001);\n float LdotH = max(dot(lightDirection, H), 0.000001);\n float G1 = (2.0 * NdotH * VdotN) / VdotH;\n float G2 = (2.0 * NdotH * LdotN) / LdotH;\n float G = min(1.0, min(G1, G2));\n \n //Distribution term\n float D = beckmannDistribution(NdotH, roughness);\n\n //Fresnel term\n float F = pow(1.0 - VdotN, fresnel);\n\n //Multiply terms and done\n return G * F * D / max(3.14159265 * VdotN, 0.000001);\n}\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\nuniform sampler2D texture;\n\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n vec3 N = normalize(f_normal);\n vec3 L = normalize(f_lightDirection);\n vec3 V = normalize(f_eyeDirection);\n\n if(gl_FrontFacing) {\n N = -N;\n }\n\n float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\n float diffuse = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n vec4 surfaceColor = f_color * texture2D(texture, f_uv);\n vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular, 1.0);\n\n gl_FragColor = litColor * opacity;\n}\n"]),o=n(["precision highp float;\n\nprecision highp float;\n#define GLSLIFY 1\n\nvec3 getOrthogonalVector(vec3 v) {\n // Return up-vector for only-z vector.\n // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\n // From the above if-statement we have ||a|| > 0 U ||b|| > 0.\n // Assign z = 0, x = -b, y = a:\n // a*-b + b*a + c*0 = -ba + ba + 0 = 0\n if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\n return normalize(vec3(-v.y, v.x, 0.0));\n } else {\n return normalize(vec3(0.0, v.z, -v.y));\n }\n}\n\n// Calculate the tube vertex and normal at the given index.\n//\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\n//\n// Each tube segment is made up of a ring of vertices.\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\n// The indexes of tube segments run from 0 to 8.\n//\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\n float segmentCount = 8.0;\n\n float angle = 2.0 * 3.14159 * (index / segmentCount);\n\n vec3 u = getOrthogonalVector(d);\n vec3 v = normalize(cross(u, d));\n\n vec3 x = u * cos(angle) * length(d);\n vec3 y = v * sin(angle) * length(d);\n vec3 v3 = x + y;\n\n normal = normalize(v3);\n\n return v3;\n}\n\nattribute vec4 vector;\nattribute vec4 position;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\nuniform float tubeScale;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n vec3 normal;\n vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\n vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\n\n gl_Position = projection * view * tubePosition;\n f_id = id;\n f_position = position.xyz;\n}\n"]),s=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float pickId;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n\n gl_FragColor = vec4(pickId, f_id.xyz);\n}"]);r.meshShader={vertex:a,fragment:i,attributes:[{name:"position",type:"vec4"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"},{name:"vector",type:"vec4"}]},r.pickShader={vertex:o,fragment:s,attributes:[{name:"position",type:"vec4"},{name:"id",type:"vec4"},{name:"vector",type:"vec4"}]}},{glslify:410}],315:[function(t,e,r){"use strict";var n=t("gl-vec3"),a=t("gl-vec4"),i=["xyz","xzy","yxz","yzx","zxy","zyx"],o=function(t,e,r,i){for(var o=0,s=0;s<t.length;s++)for(var l=t[s].velocities,c=0;c<l.length;c++)o=Math.max(o,n.length(l[c]));var u=t.map(function(t){return function(t,e,r,i){for(var o=t.points,s=t.velocities,l=t.divergences,c=[],u=[],h=[],f=[],p=[],d=[],g=0,v=0,m=a.create(),y=a.create(),x=0;x<o.length;x++){var b=o[x],_=s[x],w=l[x];0===e&&(w=.05*r),v=n.length(_)/i,m=a.create(),n.copy(m,_),m[3]=w;for(var k=0;k<8;k++)p[k]=[b[0],b[1],b[2],k];if(f.length>0)for(k=0;k<8;k++){var T=(k+1)%8;c.push(f[k],p[k],p[T],p[T],f[T],f[k]),h.push(y,m,m,m,y,y),d.push(g,v,v,v,g,g);var M=c.length;u.push([M-6,M-5,M-4],[M-3,M-2,M-1])}var A=f;f=p,p=A;var S=y;y=m,m=S;var E=g;g=v,v=E}return{positions:c,cells:u,vectors:h,vertexIntensity:d}}(t,r,i,o)}),h=[],f=[],p=[],d=[];for(s=0;s<u.length;s++){var g=u[s],v=h.length;h=h.concat(g.positions),p=p.concat(g.vectors),d=d.concat(g.vertexIntensity);for(c=0;c<g.cells.length;c++){var m=g.cells[c],y=[];f.push(y);for(var x=0;x<m.length;x++)y.push(m[x]+v)}}return{positions:h,cells:f,vectors:p,vertexIntensity:d,colormap:e}},s=function(t,e){var r,n=t.length;for(r=0;r<n;r++){var a=t[r];if(a===e)return r;if(a>e)return r-1}return r},l=function(t,e,r){return t<e?e:t>r?r:t},c=function(t){var e=1/0;t.sort(function(t,e){return t-e});for(var r=t.length,n=1;n<r;n++){var a=Math.abs(t[n]-t[n-1]);a<e&&(e=a)}return e};e.exports=function(t,e){var r=t.startingPositions,a=t.maxLength||1e3,u=t.tubeSize||1,h=t.absoluteTubeSize,f=t.gridFill||"+x+y+z",p={};-1!==f.indexOf("-x")&&(p.reversedX=!0),-1!==f.indexOf("-y")&&(p.reversedY=!0),-1!==f.indexOf("-z")&&(p.reversedZ=!0),p.filled=i.indexOf(f.replace(/-/g,"").replace(/\+/g,""));var d=t.getVelocity||function(e){return function(t,e,r){var a=e.vectors,i=e.meshgrid,o=t[0],c=t[1],u=t[2],h=i[0].length,f=i[1].length,p=i[2].length,d=s(i[0],o),g=s(i[1],c),v=s(i[2],u),m=d+1,y=g+1,x=v+1;if(d=l(d,0,h-1),m=l(m,0,h-1),g=l(g,0,f-1),y=l(y,0,f-1),v=l(v,0,p-1),x=l(x,0,p-1),d<0||g<0||v<0||m>h-1||y>f-1||x>p-1)return n.create();var b,_,w,k,T,M,A=i[0][d],S=i[0][m],E=i[1][g],L=i[1][y],C=i[2][v],P=(o-A)/(S-A),O=(c-E)/(L-E),z=(u-C)/(i[2][x]-C);switch(isFinite(P)||(P=.5),isFinite(O)||(O=.5),isFinite(z)||(z=.5),r.reversedX&&(d=h-1-d,m=h-1-m),r.reversedY&&(g=f-1-g,y=f-1-y),r.reversedZ&&(v=p-1-v,x=p-1-x),r.filled){case 5:T=v,M=x,w=g*p,k=y*p,b=d*p*f,_=m*p*f;break;case 4:T=v,M=x,b=d*p,_=m*p,w=g*p*h,k=y*p*h;break;case 3:w=g,k=y,T=v*f,M=x*f,b=d*f*p,_=m*f*p;break;case 2:w=g,k=y,b=d*f,_=m*f,T=v*f*h,M=x*f*h;break;case 1:b=d,_=m,T=v*h,M=x*h,w=g*h*p,k=y*h*p;break;default:b=d,_=m,w=g*h,k=y*h,T=v*h*f,M=x*h*f}var I=a[b+w+T],D=a[b+w+M],R=a[b+k+T],F=a[b+k+M],B=a[_+w+T],N=a[_+w+M],j=a[_+k+T],V=a[_+k+M],U=n.create(),q=n.create(),H=n.create(),G=n.create();n.lerp(U,I,B,P),n.lerp(q,D,N,P),n.lerp(H,R,j,P),n.lerp(G,F,V,P);var Y=n.create(),W=n.create();n.lerp(Y,U,H,O),n.lerp(W,q,G,O);var X=n.create();return n.lerp(X,Y,W,z),X}(e,t,p)},g=t.getDivergence||function(t,e){var r=n.create(),a=1e-4;n.add(r,t,[a,0,0]);var i=d(r);n.subtract(i,i,e),n.scale(i,i,1e4),n.add(r,t,[0,a,0]);var o=d(r);n.subtract(o,o,e),n.scale(o,o,1e4),n.add(r,t,[0,0,a]);var s=d(r);return n.subtract(s,s,e),n.scale(s,s,1e4),n.add(r,i,o),n.add(r,r,s),r},v=[],m=e[0][0],y=e[0][1],x=e[0][2],b=e[1][0],_=e[1][1],w=e[1][2],k=function(t){var e=t[0],r=t[1],n=t[2];return!(e<m||e>b||r<y||r>_||n<x||n>w)},T=10*n.distance(e[0],e[1])/a,M=T*T,A=1,S=0,E=r.length;E>1&&(A=function(t){for(var e=[],r=[],n=[],a={},i={},o={},s=t.length,l=0;l<s;l++){var u=t[l],h=u[0],f=u[1],p=u[2];a[h]||(e.push(h),a[h]=!0),i[f]||(r.push(f),i[f]=!0),o[p]||(n.push(p),o[p]=!0)}var d=c(e),g=c(r),v=c(n),m=Math.min(d,g,v);return isFinite(m)?m:1}(r));for(var L=0;L<E;L++){var C=n.create();n.copy(C,r[L]);var P=[C],O=[],z=d(C),I=C;O.push(z);var D=[],R=g(C,z),F=n.length(R);isFinite(F)&&F>S&&(S=F),D.push(F),v.push({points:P,velocities:O,divergences:D});for(var B=0;B<100*a&&P.length<a&&k(C);){B++;var N=n.clone(z),j=n.squaredLength(N);if(0===j)break;if(j>M&&n.scale(N,N,T/Math.sqrt(j)),n.add(N,N,C),z=d(N),n.squaredDistance(I,N)-M>-1e-4*M){P.push(N),I=N,O.push(z);R=g(N,z),F=n.length(R);isFinite(F)&&F>S&&(S=F),D.push(F)}C=N}}var V=o(v,t.colormap,S,A);return h?V.tubeScale=h:(0===S&&(S=1),V.tubeScale=.5*u*A/S),V};var u=t("./lib/shaders"),h=t("gl-cone3d").createMesh;e.exports.createTubeMesh=function(t,e){return h(t,e,{shaders:u,traceType:"streamtube"})}},{"./lib/shaders":314,"gl-cone3d":245,"gl-vec3":348,"gl-vec4":384}],316:[function(t,e,r){var n=t("gl-shader"),a=t("glslify"),i=a(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec4 uv;\nattribute vec3 f;\nattribute vec3 normal;\n\nuniform vec3 objectOffset;\nuniform mat4 model, view, projection, inverseModel;\nuniform vec3 lightPosition, eyePosition;\nuniform sampler2D colormap;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec2 planeCoordinate;\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\nvarying vec4 vColor;\n\nvoid main() {\n vec3 localCoordinate = vec3(uv.zw, f.x);\n worldCoordinate = objectOffset + localCoordinate;\n vec4 worldPosition = model * vec4(worldCoordinate, 1.0);\n vec4 clipPosition = projection * view * worldPosition;\n gl_Position = clipPosition;\n kill = f.y;\n value = f.z;\n planeCoordinate = uv.xy;\n\n vColor = texture2D(colormap, vec2(value, value));\n\n //Lighting geometry parameters\n vec4 cameraCoordinate = view * worldPosition;\n cameraCoordinate.xyz /= cameraCoordinate.w;\n lightDirection = lightPosition - cameraCoordinate.xyz;\n eyeDirection = eyePosition - cameraCoordinate.xyz;\n surfaceNormal = normalize((vec4(normal,0) * inverseModel).xyz);\n}\n"]),o=a(["precision highp float;\n#define GLSLIFY 1\n\nfloat beckmannDistribution(float x, float roughness) {\n float NdotH = max(x, 0.0001);\n float cos2Alpha = NdotH * NdotH;\n float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n float roughness2 = roughness * roughness;\n float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n return exp(tan2Alpha / roughness2) / denom;\n}\n\nfloat beckmannSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float roughness) {\n return beckmannDistribution(dot(surfaceNormal, normalize(lightDirection + viewDirection)), roughness);\n}\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 lowerBound, upperBound;\nuniform float contourTint;\nuniform vec4 contourColor;\nuniform sampler2D colormap;\nuniform vec3 clipBounds[2];\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\nuniform float vertexColor;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\nvarying vec4 vColor;\n\nvoid main() {\n if (\n kill > 0.0 ||\n vColor.a == 0.0 ||\n outOfRange(clipBounds[0], clipBounds[1], worldCoordinate)\n ) discard;\n\n vec3 N = normalize(surfaceNormal);\n vec3 V = normalize(eyeDirection);\n vec3 L = normalize(lightDirection);\n\n if(gl_FrontFacing) {\n N = -N;\n }\n\n float specular = max(beckmannSpecular(L, V, N, roughness), 0.);\n float diffuse = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n //decide how to interpolate color \u2014 in vertex or in fragment\n vec4 surfaceColor =\n step(vertexColor, .5) * texture2D(colormap, vec2(value, value)) +\n step(.5, vertexColor) * vColor;\n\n vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular, 1.0);\n\n gl_FragColor = mix(litColor, contourColor, contourTint) * opacity;\n}\n"]),s=a(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec4 uv;\nattribute float f;\n\nuniform vec3 objectOffset;\nuniform mat3 permutation;\nuniform mat4 model, view, projection;\nuniform float height, zOffset;\nuniform sampler2D colormap;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec2 planeCoordinate;\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\nvarying vec4 vColor;\n\nvoid main() {\n vec3 dataCoordinate = permutation * vec3(uv.xy, height);\n worldCoordinate = objectOffset + dataCoordinate;\n vec4 worldPosition = model * vec4(worldCoordinate, 1.0);\n\n vec4 clipPosition = projection * view * worldPosition;\n clipPosition.z += zOffset;\n\n gl_Position = clipPosition;\n value = f + objectOffset.z;\n kill = -1.0;\n planeCoordinate = uv.zw;\n\n vColor = texture2D(colormap, vec2(value, value));\n\n //Don't do lighting for contours\n surfaceNormal = vec3(1,0,0);\n eyeDirection = vec3(0,1,0);\n lightDirection = vec3(0,0,1);\n}\n"]),l=a(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec2 shape;\nuniform vec3 clipBounds[2];\nuniform float pickId;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec2 planeCoordinate;\nvarying vec3 surfaceNormal;\n\nvec2 splitFloat(float v) {\n float vh = 255.0 * v;\n float upper = floor(vh);\n float lower = fract(vh);\n return vec2(upper / 255.0, floor(lower * 16.0) / 16.0);\n}\n\nvoid main() {\n if ((kill > 0.0) ||\n (outOfRange(clipBounds[0], clipBounds[1], worldCoordinate))) discard;\n\n vec2 ux = splitFloat(planeCoordinate.x / shape.x);\n vec2 uy = splitFloat(planeCoordinate.y / shape.y);\n gl_FragColor = vec4(pickId, ux.x, uy.x, ux.y + (uy.y/16.0));\n}\n"]);r.createShader=function(t){var e=n(t,i,o,null,[{name:"uv",type:"vec4"},{name:"f",type:"vec3"},{name:"normal",type:"vec3"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},r.createPickShader=function(t){var e=n(t,i,l,null,[{name:"uv",type:"vec4"},{name:"f",type:"vec3"},{name:"normal",type:"vec3"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},r.createContourShader=function(t){var e=n(t,s,o,null,[{name:"uv",type:"vec4"},{name:"f",type:"float"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e},r.createPickContourShader=function(t){var e=n(t,s,l,null,[{name:"uv",type:"vec4"},{name:"f",type:"float"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e}},{"gl-shader":304,glslify:410}],317:[function(t,e,r){arguments[4][113][0].apply(r,arguments)},{dup:113}],318:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl,r=y(e),n=b(e),s=x(e),l=_(e),c=a(e),u=i(e,[{buffer:c,size:4,stride:w,offset:0},{buffer:c,size:3,stride:w,offset:16},{buffer:c,size:3,stride:w,offset:28}]),h=a(e),f=i(e,[{buffer:h,size:4,stride:20,offset:0},{buffer:h,size:1,stride:20,offset:16}]),p=a(e),d=i(e,[{buffer:p,size:2,type:e.FLOAT}]),g=o(e,1,S,e.RGBA,e.UNSIGNED_BYTE);g.minFilter=e.LINEAR,g.magFilter=e.LINEAR;var v=new E(e,[0,0],[[0,0,0],[0,0,0]],r,n,c,u,g,s,l,h,f,p,d,[0,0,0]),m={levels:[[],[],[]]};for(var k in t)m[k]=t[k];return m.colormap=m.colormap||"jet",v.update(m),v};var n=t("bit-twiddle"),a=t("gl-buffer"),i=t("gl-vao"),o=t("gl-texture2d"),s=t("typedarray-pool"),l=t("colormap"),c=t("ndarray-ops"),u=t("ndarray-pack"),h=t("ndarray"),f=t("surface-nets"),p=t("gl-mat4/multiply"),d=t("gl-mat4/invert"),g=t("binary-search-bounds"),v=t("ndarray-gradient"),m=t("./lib/shaders"),y=m.createShader,x=m.createContourShader,b=m.createPickShader,_=m.createPickContourShader,w=40,k=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],T=[[0,0],[0,1],[1,0],[1,1],[1,0],[0,1]],M=[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]];function A(t,e,r,n,a){this.position=t,this.index=e,this.uv=r,this.level=n,this.dataCoordinate=a}!function(){for(var t=0;t<3;++t){var e=M[t],r=(t+2)%3;e[(t+1)%3+0]=1,e[r+3]=1,e[t+6]=1}}();var S=256;function E(t,e,r,n,a,i,o,l,c,u,f,p,d,g,v){this.gl=t,this.shape=e,this.bounds=r,this.objectOffset=v,this.intensityBounds=[],this._shader=n,this._pickShader=a,this._coordinateBuffer=i,this._vao=o,this._colorMap=l,this._contourShader=c,this._contourPickShader=u,this._contourBuffer=f,this._contourVAO=p,this._contourOffsets=[[],[],[]],this._contourCounts=[[],[],[]],this._vertexCount=0,this._pickResult=new A([0,0,0],[0,0],[0,0],[0,0,0],[0,0,0]),this._dynamicBuffer=d,this._dynamicVAO=g,this._dynamicOffsets=[0,0,0],this._dynamicCounts=[0,0,0],this.contourWidth=[1,1,1],this.contourLevels=[[1],[1],[1]],this.contourTint=[0,0,0],this.contourColor=[[.5,.5,.5,1],[.5,.5,.5,1],[.5,.5,.5,1]],this.showContour=!0,this.showSurface=!0,this.enableHighlight=[!0,!0,!0],this.highlightColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.highlightTint=[1,1,1],this.highlightLevel=[-1,-1,-1],this.enableDynamic=[!0,!0,!0],this.dynamicLevel=[NaN,NaN,NaN],this.dynamicColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.dynamicTint=[1,1,1],this.dynamicWidth=[1,1,1],this.axesBounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.surfaceProject=[!1,!1,!1],this.contourProject=[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],this.colorBounds=[!1,!1],this._field=[h(s.mallocFloat(1024),[0,0]),h(s.mallocFloat(1024),[0,0]),h(s.mallocFloat(1024),[0,0])],this.pickId=1,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.snapToData=!1,this.pixelRatio=1,this.opacity=1,this.opacityscale=!1,this.lightPosition=[10,1e4,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.vertexColor=0,this.dirty=!0}var L=E.prototype;L.isTransparent=function(){return this.opacity<1||this.opacityscale},L.isOpaque=function(){if(this.opacityscale)return!1;if(this.opacity<1)return!1;if(this.opacity>=1)return!0;for(var t=0;t<3;++t)if(this._contourCounts[t].length>0)return!0;return!1},L.pickSlots=1,L.setPickBase=function(t){this.pickId=t};var C=[0,0,0],P={showSurface:!1,showContour:!1,projections:[k.slice(),k.slice(),k.slice()],clipBounds:[[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]]]};function O(t,e){var r,n,a,i=e.axes&&e.axes.lastCubeProps.axis||C,o=e.showSurface,s=e.showContour;for(r=0;r<3;++r)for(o=o||e.surfaceProject[r],n=0;n<3;++n)s=s||e.contourProject[r][n];for(r=0;r<3;++r){var l=P.projections[r];for(n=0;n<16;++n)l[n]=0;for(n=0;n<4;++n)l[5*n]=1;l[5*r]=0,l[12+r]=e.axesBounds[+(i[r]>0)][r],p(l,t.model,l);var c=P.clipBounds[r];for(a=0;a<2;++a)for(n=0;n<3;++n)c[a][n]=t.clipBounds[a][n];c[0][r]=-1e8,c[1][r]=1e8}return P.showSurface=o,P.showContour=s,P}var z={model:k,view:k,projection:k,inverseModel:k.slice(),lowerBound:[0,0,0],upperBound:[0,0,0],colorMap:0,clipBounds:[[0,0,0],[0,0,0]],height:0,contourTint:0,contourColor:[0,0,0,1],permutation:[1,0,0,0,1,0,0,0,1],zOffset:-1e-4,objectOffset:[0,0,0],kambient:1,kdiffuse:1,kspecular:1,lightPosition:[1e3,1e3,1e3],eyePosition:[0,0,0],roughness:1,fresnel:1,opacity:1,vertexColor:0},I=k.slice(),D=[1,0,0,0,1,0,0,0,1];function R(t,e){t=t||{};var r=this.gl;r.disable(r.CULL_FACE),this._colorMap.bind(0);var n=z;n.model=t.model||k,n.view=t.view||k,n.projection=t.projection||k,n.lowerBound=[this.bounds[0][0],this.bounds[0][1],this.colorBounds[0]||this.bounds[0][2]],n.upperBound=[this.bounds[1][0],this.bounds[1][1],this.colorBounds[1]||this.bounds[1][2]],n.objectOffset=this.objectOffset,n.contourColor=this.contourColor[0],n.inverseModel=d(n.inverseModel,n.model);for(var a=0;a<2;++a)for(var i=n.clipBounds[a],o=0;o<3;++o)i[o]=Math.min(Math.max(this.clipBounds[a][o],-1e8),1e8);n.kambient=this.ambientLight,n.kdiffuse=this.diffuseLight,n.kspecular=this.specularLight,n.roughness=this.roughness,n.fresnel=this.fresnel,n.opacity=this.opacity,n.height=0,n.permutation=D,n.vertexColor=this.vertexColor;var s=I;for(p(s,n.view,n.model),p(s,n.projection,s),d(s,s),a=0;a<3;++a)n.eyePosition[a]=s[12+a]/s[15];var l=s[15];for(a=0;a<3;++a)l+=this.lightPosition[a]*s[4*a+3];for(a=0;a<3;++a){var c=s[12+a];for(o=0;o<3;++o)c+=s[4*o+a]*this.lightPosition[o];n.lightPosition[a]=c/l}var u=O(n,this);if(u.showSurface){for(this._shader.bind(),this._shader.uniforms=n,this._vao.bind(),this.showSurface&&this._vertexCount&&this._vao.draw(r.TRIANGLES,this._vertexCount),a=0;a<3;++a)this.surfaceProject[a]&&this.vertexCount&&(this._shader.uniforms.model=u.projections[a],this._shader.uniforms.clipBounds=u.clipBounds[a],this._vao.draw(r.TRIANGLES,this._vertexCount));this._vao.unbind()}if(u.showContour){var h=this._contourShader;n.kambient=1,n.kdiffuse=0,n.kspecular=0,n.opacity=1,h.bind(),h.uniforms=n;var f=this._contourVAO;for(f.bind(),a=0;a<3;++a)for(h.uniforms.permutation=M[a],r.lineWidth(this.contourWidth[a]*this.pixelRatio),o=0;o<this.contourLevels[a].length;++o)o===this.highlightLevel[a]?(h.uniforms.contourColor=this.highlightColor[a],h.uniforms.contourTint=this.highlightTint[a]):0!==o&&o-1!==this.highlightLevel[a]||(h.uniforms.contourColor=this.contourColor[a],h.uniforms.contourTint=this.contourTint[a]),this._contourCounts[a][o]&&(h.uniforms.height=this.contourLevels[a][o],f.draw(r.LINES,this._contourCounts[a][o],this._contourOffsets[a][o]));for(a=0;a<3;++a)for(h.uniforms.model=u.projections[a],h.uniforms.clipBounds=u.clipBounds[a],o=0;o<3;++o)if(this.contourProject[a][o]){h.uniforms.permutation=M[o],r.lineWidth(this.contourWidth[o]*this.pixelRatio);for(var g=0;g<this.contourLevels[o].length;++g)g===this.highlightLevel[o]?(h.uniforms.contourColor=this.highlightColor[o],h.uniforms.contourTint=this.highlightTint[o]):0!==g&&g-1!==this.highlightLevel[o]||(h.uniforms.contourColor=this.contourColor[o],h.uniforms.contourTint=this.contourTint[o]),this._contourCounts[o][g]&&(h.uniforms.height=this.contourLevels[o][g],f.draw(r.LINES,this._contourCounts[o][g],this._contourOffsets[o][g]))}for(f.unbind(),(f=this._dynamicVAO).bind(),a=0;a<3;++a)if(0!==this._dynamicCounts[a])for(h.uniforms.model=n.model,h.uniforms.clipBounds=n.clipBounds,h.uniforms.permutation=M[a],r.lineWidth(this.dynamicWidth[a]*this.pixelRatio),h.uniforms.contourColor=this.dynamicColor[a],h.uniforms.contourTint=this.dynamicTint[a],h.uniforms.height=this.dynamicLevel[a],f.draw(r.LINES,this._dynamicCounts[a],this._dynamicOffsets[a]),o=0;o<3;++o)this.contourProject[o][a]&&(h.uniforms.model=u.projections[o],h.uniforms.clipBounds=u.clipBounds[o],f.draw(r.LINES,this._dynamicCounts[a],this._dynamicOffsets[a]));f.unbind()}}L.draw=function(t){return R.call(this,t,!1)},L.drawTransparent=function(t){return R.call(this,t,!0)};var F={model:k,view:k,projection:k,inverseModel:k,clipBounds:[[0,0,0],[0,0,0]],height:0,shape:[0,0],pickId:0,lowerBound:[0,0,0],upperBound:[0,0,0],zOffset:0,objectOffset:[0,0,0],permutation:[1,0,0,0,1,0,0,0,1],lightPosition:[0,0,0],eyePosition:[0,0,0]};function B(t,e){return Array.isArray(t)?[e(t[0]),e(t[1]),e(t[2])]:[e(t),e(t),e(t)]}function N(t){return Array.isArray(t)?3===t.length?[t[0],t[1],t[2],1]:[t[0],t[1],t[2],t[3]]:[0,0,0,1]}function j(t){if(Array.isArray(t)){if(Array.isArray(t))return[N(t[0]),N(t[1]),N(t[2])];var e=N(t);return[e.slice(),e.slice(),e.slice()]}}L.drawPick=function(t){t=t||{};var e=this.gl;e.disable(e.CULL_FACE);var r=F;r.model=t.model||k,r.view=t.view||k,r.projection=t.projection||k,r.shape=this._field[2].shape,r.pickId=this.pickId/255,r.lowerBound=this.bounds[0],r.upperBound=this.bounds[1],r.objectOffset=this.objectOffset,r.permutation=D;for(var n=0;n<2;++n)for(var a=r.clipBounds[n],i=0;i<3;++i)a[i]=Math.min(Math.max(this.clipBounds[n][i],-1e8),1e8);var o=O(r,this);if(o.showSurface){for(this._pickShader.bind(),this._pickShader.uniforms=r,this._vao.bind(),this._vao.draw(e.TRIANGLES,this._vertexCount),n=0;n<3;++n)this.surfaceProject[n]&&(this._pickShader.uniforms.model=o.projections[n],this._pickShader.uniforms.clipBounds=o.clipBounds[n],this._vao.draw(e.TRIANGLES,this._vertexCount));this._vao.unbind()}if(o.showContour){var s=this._contourPickShader;s.bind(),s.uniforms=r;var l=this._contourVAO;for(l.bind(),i=0;i<3;++i)for(e.lineWidth(this.contourWidth[i]*this.pixelRatio),s.uniforms.permutation=M[i],n=0;n<this.contourLevels[i].length;++n)this._contourCounts[i][n]&&(s.uniforms.height=this.contourLevels[i][n],l.draw(e.LINES,this._contourCounts[i][n],this._contourOffsets[i][n]));for(n=0;n<3;++n)for(s.uniforms.model=o.projections[n],s.uniforms.clipBounds=o.clipBounds[n],i=0;i<3;++i)if(this.contourProject[n][i]){s.uniforms.permutation=M[i],e.lineWidth(this.contourWidth[i]*this.pixelRatio);for(var c=0;c<this.contourLevels[i].length;++c)this._contourCounts[i][c]&&(s.uniforms.height=this.contourLevels[i][c],l.draw(e.LINES,this._contourCounts[i][c],this._contourOffsets[i][c]))}l.unbind()}},L.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=this._field[2].shape,r=this._pickResult,n=e[0]*(t.value[0]+(t.value[2]>>4)/16)/255,a=Math.floor(n),i=n-a,o=e[1]*(t.value[1]+(15&t.value[2])/16)/255,s=Math.floor(o),l=o-s;a+=1,s+=1;var c=r.position;c[0]=c[1]=c[2]=0;for(var u=0;u<2;++u)for(var h=u?i:1-i,f=0;f<2;++f)for(var p=a+u,d=s+f,v=h*(f?l:1-l),m=0;m<3;++m)c[m]+=this._field[m].get(p,d)*v;for(var y=this._pickResult.level,x=0;x<3;++x)if(y[x]=g.le(this.contourLevels[x],c[x]),y[x]<0)this.contourLevels[x].length>0&&(y[x]=0);else if(y[x]<this.contourLevels[x].length-1){var b=this.contourLevels[x][y[x]],_=this.contourLevels[x][y[x]+1];Math.abs(b-c[x])>Math.abs(_-c[x])&&(y[x]+=1)}for(r.index[0]=i<.5?a:a+1,r.index[1]=l<.5?s:s+1,r.uv[0]=n/e[0],r.uv[1]=o/e[1],m=0;m<3;++m)r.dataCoordinate[m]=this._field[m].get(r.index[0],r.index[1]);return r},L.padField=function(t,e){var r=e.shape.slice(),n=t.shape.slice();c.assign(t.lo(1,1).hi(r[0],r[1]),e),c.assign(t.lo(1).hi(r[0],1),e.hi(r[0],1)),c.assign(t.lo(1,n[1]-1).hi(r[0],1),e.lo(0,r[1]-1).hi(r[0],1)),c.assign(t.lo(0,1).hi(1,r[1]),e.hi(1)),c.assign(t.lo(n[0]-1,1).hi(1,r[1]),e.lo(r[0]-1)),t.set(0,0,e.get(0,0)),t.set(0,n[1]-1,e.get(0,r[1]-1)),t.set(n[0]-1,0,e.get(r[0]-1,0)),t.set(n[0]-1,n[1]-1,e.get(r[0]-1,r[1]-1))},L.update=function(t){t=t||{},this.objectOffset=t.objectOffset||this.objectOffset,this.dirty=!0,"contourWidth"in t&&(this.contourWidth=B(t.contourWidth,Number)),"showContour"in t&&(this.showContour=B(t.showContour,Boolean)),"showSurface"in t&&(this.showSurface=!!t.showSurface),"contourTint"in t&&(this.contourTint=B(t.contourTint,Boolean)),"contourColor"in t&&(this.contourColor=j(t.contourColor)),"contourProject"in t&&(this.contourProject=B(t.contourProject,function(t){return B(t,Boolean)})),"surfaceProject"in t&&(this.surfaceProject=t.surfaceProject),"dynamicColor"in t&&(this.dynamicColor=j(t.dynamicColor)),"dynamicTint"in t&&(this.dynamicTint=B(t.dynamicTint,Number)),"dynamicWidth"in t&&(this.dynamicWidth=B(t.dynamicWidth,Number)),"opacity"in t&&(this.opacity=t.opacity),"opacityscale"in t&&(this.opacityscale=t.opacityscale),"colorBounds"in t&&(this.colorBounds=t.colorBounds),"vertexColor"in t&&(this.vertexColor=t.vertexColor?1:0);var e=t.field||t.coords&&t.coords[2]||null,r=!1;if(e||(e=this._field[2].shape[0]||this._field[2].shape[2]?this._field[2].lo(1,1).hi(this._field[2].shape[0]-2,this._field[2].shape[1]-2):this._field[2].hi(0,0)),"field"in t||"coords"in t){var a=(e.shape[0]+2)*(e.shape[1]+2);a>this._field[2].data.length&&(s.freeFloat(this._field[2].data),this._field[2].data=s.mallocFloat(n.nextPow2(a))),this._field[2]=h(this._field[2].data,[e.shape[0]+2,e.shape[1]+2]),this.padField(this._field[2],e),this.shape=e.shape.slice();for(var i=this.shape,o=0;o<2;++o)this._field[2].size>this._field[o].data.length&&(s.freeFloat(this._field[o].data),this._field[o].data=s.mallocFloat(this._field[2].size)),this._field[o]=h(this._field[o].data,[i[0]+2,i[1]+2]);if(t.coords){var p=t.coords;if(!Array.isArray(p)||3!==p.length)throw new Error("gl-surface: invalid coordinates for x/y");for(o=0;o<2;++o){var d=p[o];for(b=0;b<2;++b)if(d.shape[b]!==i[b])throw new Error("gl-surface: coords have incorrect shape");this.padField(this._field[o],d)}}else if(t.ticks){var g=t.ticks;if(!Array.isArray(g)||2!==g.length)throw new Error("gl-surface: invalid ticks");for(o=0;o<2;++o){var m=g[o];if((Array.isArray(m)||m.length)&&(m=h(m)),m.shape[0]!==i[o])throw new Error("gl-surface: invalid tick length");var y=h(m.data,i);y.stride[o]=m.stride[0],y.stride[1^o]=0,this.padField(this._field[o],y)}}else{for(o=0;o<2;++o){var x=[0,0];x[o]=1,this._field[o]=h(this._field[o].data,[i[0]+2,i[1]+2],x,0)}this._field[0].set(0,0,0);for(var b=0;b<i[0];++b)this._field[0].set(b+1,0,b);for(this._field[0].set(i[0]+1,0,i[0]-1),this._field[1].set(0,0,0),b=0;b<i[1];++b)this._field[1].set(0,b+1,b);this._field[1].set(0,i[1]+1,i[1]-1)}var _=this._field,w=h(s.mallocFloat(3*_[2].size*2),[3,i[0]+2,i[1]+2,2]);for(o=0;o<3;++o)v(w.pick(o),_[o],"mirror");var k=h(s.mallocFloat(3*_[2].size),[i[0]+2,i[1]+2,3]);for(o=0;o<i[0]+2;++o)for(b=0;b<i[1]+2;++b){var M=w.get(0,o,b,0),A=w.get(0,o,b,1),E=w.get(1,o,b,0),L=w.get(1,o,b,1),C=w.get(2,o,b,0),P=w.get(2,o,b,1),O=E*P-L*C,z=C*A-P*M,I=M*L-A*E,D=Math.sqrt(O*O+z*z+I*I);D<1e-8?(D=Math.max(Math.abs(O),Math.abs(z),Math.abs(I)))<1e-8?(I=1,z=O=0,D=1):D=1/D:D=1/Math.sqrt(D),k.set(o,b,0,O*D),k.set(o,b,1,z*D),k.set(o,b,2,I*D)}s.free(w.data);var R=[1/0,1/0,1/0],F=[-1/0,-1/0,-1/0],N=1/0,V=-1/0,U=(i[0]-1)*(i[1]-1)*6,q=s.mallocFloat(n.nextPow2(10*U)),H=0,G=0;for(o=0;o<i[0]-1;++o)t:for(b=0;b<i[1]-1;++b){for(var Y=0;Y<2;++Y)for(var W=0;W<2;++W)for(var X=0;X<3;++X){var Z=this._field[X].get(1+o+Y,1+b+W);if(isNaN(Z)||!isFinite(Z))continue t}for(X=0;X<6;++X){var J=o+T[X][0],K=b+T[X][1],Q=this._field[0].get(J+1,K+1),$=this._field[1].get(J+1,K+1);Z=this._field[2].get(J+1,K+1),O=k.get(J+1,K+1,0),z=k.get(J+1,K+1,1),I=k.get(J+1,K+1,2),t.intensity&&(tt=t.intensity.get(J,K));var tt=t.intensity?t.intensity.get(J,K):Z+this.objectOffset[2];q[H++]=J,q[H++]=K,q[H++]=Q,q[H++]=$,q[H++]=Z,q[H++]=0,q[H++]=tt,q[H++]=O,q[H++]=z,q[H++]=I,R[0]=Math.min(R[0],Q+this.objectOffset[0]),R[1]=Math.min(R[1],$+this.objectOffset[1]),R[2]=Math.min(R[2],Z+this.objectOffset[2]),N=Math.min(N,tt),F[0]=Math.max(F[0],Q+this.objectOffset[0]),F[1]=Math.max(F[1],$+this.objectOffset[1]),F[2]=Math.max(F[2],Z+this.objectOffset[2]),V=Math.max(V,tt),G+=1}}for(t.intensityBounds&&(N=+t.intensityBounds[0],V=+t.intensityBounds[1]),o=6;o<H;o+=10)q[o]=(q[o]-N)/(V-N);this._vertexCount=G,this._coordinateBuffer.update(q.subarray(0,H)),s.freeFloat(q),s.free(k.data),this.bounds=[R,F],this.intensity=t.intensity||this._field[2],this.intensityBounds[0]===N&&this.intensityBounds[1]===V||(r=!0),this.intensityBounds=[N,V]}if("levels"in t){var et=t.levels;for(et=Array.isArray(et[0])?et.slice():[[],[],et],o=0;o<3;++o)et[o]=et[o].slice(),et[o].sort(function(t,e){return t-e});for(o=0;o<3;++o)for(b=0;b<et[o].length;++b)et[o][b]-=this.objectOffset[o];t:for(o=0;o<3;++o){if(et[o].length!==this.contourLevels[o].length){r=!0;break}for(b=0;b<et[o].length;++b)if(et[o][b]!==this.contourLevels[o][b]){r=!0;break t}}this.contourLevels=et}if(r){_=this._field,i=this.shape;for(var rt=[],nt=0;nt<3;++nt){var at=this.contourLevels[nt],it=[],ot=[],st=[0,0,0];for(o=0;o<at.length;++o){var lt=f(this._field[nt],at[o]);it.push(rt.length/5|0),G=0;t:for(b=0;b<lt.cells.length;++b){var ct=lt.cells[b];for(X=0;X<2;++X){var ut=lt.positions[ct[X]],ht=ut[0],ft=0|Math.floor(ht),pt=ht-ft,dt=ut[1],gt=0|Math.floor(dt),vt=dt-gt,mt=!1;e:for(var yt=0;yt<3;++yt){st[yt]=0;var xt=(nt+yt+1)%3;for(Y=0;Y<2;++Y){var bt=Y?pt:1-pt;for(J=0|Math.min(Math.max(ft+Y,0),i[0]),W=0;W<2;++W){var _t=W?vt:1-vt;if(K=0|Math.min(Math.max(gt+W,0),i[1]),Z=yt<2?this._field[xt].get(J,K):(this.intensity.get(J,K)-this.intensityBounds[0])/(this.intensityBounds[1]-this.intensityBounds[0]),!isFinite(Z)||isNaN(Z)){mt=!0;break e}var wt=bt*_t;st[yt]+=wt*Z}}}if(mt){if(X>0){for(var kt=0;kt<5;++kt)rt.pop();G-=1}continue t}rt.push(st[0],st[1],ut[0],ut[1],st[2]),G+=1}}ot.push(G)}this._contourOffsets[nt]=it,this._contourCounts[nt]=ot}var Tt=s.mallocFloat(rt.length);for(o=0;o<rt.length;++o)Tt[o]=rt[o];this._contourBuffer.update(Tt),s.freeFloat(Tt)}t.colormap&&this._colorMap.setPixels(function(t,e){var r=u([l({colormap:t,nshades:S,format:"rgba"}).map(function(t,r){var n=e?function(t,e){if(!e)return 1;if(!e.length)return 1;for(var r=0;r<e.length;++r){if(e.length<2)return 1;if(e[r][0]===t)return e[r][1];if(e[r][0]>t&&r>0){var n=(e[r][0]-t)/(e[r][0]-e[r-1][0]);return e[r][1]*(1-n)+n*e[r-1][1]}}return 1}(r/255,e):1;return[t[0],t[1],t[2],255*n]})]);return c.divseq(r,255),r}(t.colormap,this.opacityscale))},L.dispose=function(){this._shader.dispose(),this._vao.dispose(),this._coordinateBuffer.dispose(),this._colorMap.dispose(),this._contourBuffer.dispose(),this._contourVAO.dispose(),this._contourShader.dispose(),this._contourPickShader.dispose(),this._dynamicBuffer.dispose(),this._dynamicVAO.dispose();for(var t=0;t<3;++t)s.freeFloat(this._field[t].data)},L.highlight=function(t){var e,r;if(!t)return this._dynamicCounts=[0,0,0],this.dyanamicLevel=[NaN,NaN,NaN],void(this.highlightLevel=[-1,-1,-1]);for(e=0;e<3;++e)this.enableHighlight[e]?this.highlightLevel[e]=t.level[e]:this.highlightLevel[e]=-1;for(r=this.snapToData?t.dataCoordinate:t.position,e=0;e<3;++e)r[e]-=this.objectOffset[e];if(this.enableDynamic[0]&&r[0]!==this.dynamicLevel[0]||this.enableDynamic[1]&&r[1]!==this.dynamicLevel[1]||this.enableDynamic[2]&&r[2]!==this.dynamicLevel[2]){for(var n=0,a=this.shape,i=s.mallocFloat(12*a[0]*a[1]),o=0;o<3;++o)if(this.enableDynamic[o]){this.dynamicLevel[o]=r[o];var l=(o+1)%3,c=(o+2)%3,u=this._field[o],h=this._field[l],p=this._field[c],d=f(u,r[o]),g=d.cells,v=d.positions;for(this._dynamicOffsets[o]=n,e=0;e<g.length;++e)for(var m=g[e],y=0;y<2;++y){var x=v[m[y]],b=+x[0],_=0|b,w=0|Math.min(_+1,a[0]),k=b-_,T=1-k,M=+x[1],A=0|M,S=0|Math.min(A+1,a[1]),E=M-A,L=1-E,C=T*L,P=T*E,O=k*L,z=k*E,I=C*h.get(_,A)+P*h.get(_,S)+O*h.get(w,A)+z*h.get(w,S),D=C*p.get(_,A)+P*p.get(_,S)+O*p.get(w,A)+z*p.get(w,S);if(isNaN(I)||isNaN(D)){y&&(n-=1);break}i[2*n+0]=I,i[2*n+1]=D,n+=1}this._dynamicCounts[o]=n-this._dynamicOffsets[o]}else this.dynamicLevel[o]=NaN,this._dynamicCounts[o]=0;this._dynamicBuffer.update(i.subarray(0,2*n)),s.freeFloat(i)}}},{"./lib/shaders":316,"binary-search-bounds":317,"bit-twiddle":94,colormap:128,"gl-buffer":244,"gl-mat4/invert":268,"gl-mat4/multiply":270,"gl-texture2d":324,"gl-vao":329,ndarray:451,"ndarray-gradient":442,"ndarray-ops":445,"ndarray-pack":446,"surface-nets":529,"typedarray-pool":543}],319:[function(t,e,r){"use strict";var n=t("css-font"),a=t("pick-by-alias"),i=t("regl"),o=t("gl-util/context"),s=t("es6-weak-map"),l=t("color-normalize"),c=t("font-atlas"),u=t("typedarray-pool"),h=t("parse-rect"),f=t("is-plain-obj"),p=t("parse-unit"),d=t("to-px"),g=t("detect-kerning"),v=t("object-assign"),m=t("font-measure"),y=t("flatten-vertex-data"),x=t("bit-twiddle").nextPow2,b=new s,_=!1;if(document.body){var w=document.body.appendChild(document.createElement("div"));w.style.font="italic small-caps bold condensed 16px/2 cursive",getComputedStyle(w).fontStretch&&(_=!0),document.body.removeChild(w)}var k=function(t){!function(t){return"function"==typeof t&&t._gl&&t.prop&&t.texture&&t.buffer}(t)?this.gl=o(t):(t={regl:t},this.gl=t.regl._gl),this.shader=b.get(this.gl),this.shader?this.regl=this.shader.regl:this.regl=t.regl||i({gl:this.gl}),this.charBuffer=this.regl.buffer({type:"uint8",usage:"stream"}),this.sizeBuffer=this.regl.buffer({type:"float",usage:"stream"}),this.shader||(this.shader=this.createShader(),b.set(this.gl,this.shader)),this.batch=[],this.fontSize=[],this.font=[],this.fontAtlas=[],this.draw=this.shader.draw.bind(this),this.render=function(){this.regl._refresh(),this.draw(this.batch)},this.canvas=this.gl.canvas,this.update(f(t)?t:{})};k.prototype.createShader=function(){var t=this.regl,e=t({blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},stencil:{enable:!1},depth:{enable:!1},count:t.prop("count"),offset:t.prop("offset"),attributes:{charOffset:{offset:4,stride:8,buffer:t.this("sizeBuffer")},width:{offset:0,stride:8,buffer:t.this("sizeBuffer")},char:t.this("charBuffer"),position:t.this("position")},uniforms:{atlasSize:function(t,e){return[e.atlas.width,e.atlas.height]},atlasDim:function(t,e){return[e.atlas.cols,e.atlas.rows]},atlas:function(t,e){return e.atlas.texture},charStep:function(t,e){return e.atlas.step},em:function(t,e){return e.atlas.em},color:t.prop("color"),opacity:t.prop("opacity"),viewport:t.this("viewportArray"),scale:t.this("scale"),align:t.prop("align"),baseline:t.prop("baseline"),translate:t.this("translate"),positionOffset:t.prop("positionOffset")},primitive:"points",viewport:t.this("viewport"),vert:"\n\t\t\tprecision highp float;\n\t\t\tattribute float width, charOffset, char;\n\t\t\tattribute vec2 position;\n\t\t\tuniform float fontSize, charStep, em, align, baseline;\n\t\t\tuniform vec4 viewport;\n\t\t\tuniform vec4 color;\n\t\t\tuniform vec2 atlasSize, atlasDim, scale, translate, positionOffset;\n\t\t\tvarying vec2 charCoord, charId;\n\t\t\tvarying float charWidth;\n\t\t\tvarying vec4 fontColor;\n\t\t\tvoid main () {\n\t\t\t\t"+(k.normalViewport?"":"vec2 positionOffset = vec2(positionOffset.x,- positionOffset.y);")+"\n\n\t\t\t\tvec2 offset = floor(em * (vec2(align + charOffset, baseline)\n\t\t\t\t\t+ positionOffset))\n\t\t\t\t\t/ (viewport.zw * scale.xy);\n\n\t\t\t\tvec2 position = (position + translate) * scale;\n\t\t\t\tposition += offset * scale;\n\n\t\t\t\t"+(k.normalViewport?"position.y = 1. - position.y;":"")+"\n\n\t\t\t\tcharCoord = position * viewport.zw + viewport.xy;\n\n\t\t\t\tgl_Position = vec4(position * 2. - 1., 0, 1);\n\n\t\t\t\tgl_PointSize = charStep;\n\n\t\t\t\tcharId.x = mod(char, atlasDim.x);\n\t\t\t\tcharId.y = floor(char / atlasDim.x);\n\n\t\t\t\tcharWidth = width * em;\n\n\t\t\t\tfontColor = color / 255.;\n\t\t\t}",frag:"\n\t\t\tprecision highp float;\n\t\t\tuniform sampler2D atlas;\n\t\t\tuniform float fontSize, charStep, opacity;\n\t\t\tuniform vec2 atlasSize;\n\t\t\tuniform vec4 viewport;\n\t\t\tvarying vec4 fontColor;\n\t\t\tvarying vec2 charCoord, charId;\n\t\t\tvarying float charWidth;\n\n\t\t\tfloat lightness(vec4 color) {\n\t\t\t\treturn color.r * 0.299 + color.g * 0.587 + color.b * 0.114;\n\t\t\t}\n\n\t\t\tvoid main () {\n\t\t\t\tvec2 uv = gl_FragCoord.xy - charCoord + charStep * .5;\n\t\t\t\tfloat halfCharStep = floor(charStep * .5 + .5);\n\n\t\t\t\t// invert y and shift by 1px (FF expecially needs that)\n\t\t\t\tuv.y = charStep - uv.y;\n\n\t\t\t\t// ignore points outside of character bounding box\n\t\t\t\tfloat halfCharWidth = ceil(charWidth * .5);\n\t\t\t\tif (floor(uv.x) > halfCharStep + halfCharWidth ||\n\t\t\t\t\tfloor(uv.x) < halfCharStep - halfCharWidth) return;\n\n\t\t\t\tuv += charId * charStep;\n\t\t\t\tuv = uv / atlasSize;\n\n\t\t\t\tvec4 color = fontColor;\n\t\t\t\tvec4 mask = texture2D(atlas, uv);\n\n\t\t\t\tfloat maskY = lightness(mask);\n\t\t\t\t// float colorY = lightness(color);\n\t\t\t\tcolor.a *= maskY;\n\t\t\t\tcolor.a *= opacity;\n\n\t\t\t\t// color.a += .1;\n\n\t\t\t\t// antialiasing, see yiq color space y-channel formula\n\t\t\t\t// color.rgb += (1. - color.rgb) * (1. - mask.rgb);\n\n\t\t\t\tgl_FragColor = color;\n\t\t\t}"});return{regl:t,draw:e,atlas:{}}},k.prototype.update=function(t){var e=this;if("string"==typeof t)t={text:t};else if(!t)return;null!=(t=a(t,{position:"position positions coord coords coordinates",font:"font fontFace fontface typeface cssFont css-font family fontFamily",fontSize:"fontSize fontsize size font-size",text:"text texts chars characters value values symbols",align:"align alignment textAlign textbaseline",baseline:"baseline textBaseline textbaseline",direction:"dir direction textDirection",color:"color colour fill fill-color fillColor textColor textcolor",kerning:"kerning kern",range:"range dataBox",viewport:"vp viewport viewBox viewbox viewPort",opacity:"opacity alpha transparency visible visibility opaque",offset:"offset positionOffset padding shift indent indentation"},!0)).opacity&&(Array.isArray(t.opacity)?this.opacity=t.opacity.map(function(t){return parseFloat(t)}):this.opacity=parseFloat(t.opacity)),null!=t.viewport&&(this.viewport=h(t.viewport),k.normalViewport&&(this.viewport.y=this.canvas.height-this.viewport.y-this.viewport.height),this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null==this.viewport&&(this.viewport={x:0,y:0,width:this.gl.drawingBufferWidth,height:this.gl.drawingBufferHeight},this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null!=t.kerning&&(this.kerning=t.kerning),null!=t.offset&&("number"==typeof t.offset&&(t.offset=[t.offset,0]),this.positionOffset=y(t.offset)),t.direction&&(this.direction=t.direction),t.range&&(this.range=t.range,this.scale=[1/(t.range[2]-t.range[0]),1/(t.range[3]-t.range[1])],this.translate=[-t.range[0],-t.range[1]]),t.scale&&(this.scale=t.scale),t.translate&&(this.translate=t.translate),this.scale||(this.scale=[1/this.viewport.width,1/this.viewport.height]),this.translate||(this.translate=[0,0]),this.font.length||t.font||(t.font=k.baseFontSize+"px sans-serif");var r,i=!1,o=!1;if(t.font&&(Array.isArray(t.font)?t.font:[t.font]).forEach(function(t,r){if("string"==typeof t)try{t=n.parse(t)}catch(e){t=n.parse(k.baseFontSize+"px "+t)}else t=n.parse(n.stringify(t));var a=n.stringify({size:k.baseFontSize,family:t.family,stretch:_?t.stretch:void 0,variant:t.variant,weight:t.weight,style:t.style}),s=p(t.size),l=Math.round(s[0]*d(s[1]));if(l!==e.fontSize[r]&&(o=!0,e.fontSize[r]=l),!(e.font[r]&&a==e.font[r].baseString||(i=!0,e.font[r]=k.fonts[a],e.font[r]))){var c=t.family.join(", "),u=[t.style];t.style!=t.variant&&u.push(t.variant),t.variant!=t.weight&&u.push(t.weight),_&&t.weight!=t.stretch&&u.push(t.stretch),e.font[r]={baseString:a,family:c,weight:t.weight,stretch:t.stretch,style:t.style,variant:t.variant,width:{},kerning:{},metrics:m(c,{origin:"top",fontSize:k.baseFontSize,fontStyle:u.join(" ")})},k.fonts[a]=e.font[r]}}),(i||o)&&this.font.forEach(function(r,a){var i=n.stringify({size:e.fontSize[a],family:r.family,stretch:_?r.stretch:void 0,variant:r.variant,weight:r.weight,style:r.style});if(e.fontAtlas[a]=e.shader.atlas[i],!e.fontAtlas[a]){var o=r.metrics;e.shader.atlas[i]=e.fontAtlas[a]={fontString:i,step:2*Math.ceil(e.fontSize[a]*o.bottom*.5),em:e.fontSize[a],cols:0,rows:0,height:0,width:0,chars:[],ids:{},texture:e.regl.texture()}}null==t.text&&(t.text=e.text)}),"string"==typeof t.text&&t.position&&t.position.length>2){for(var s=Array(.5*t.position.length),f=0;f<s.length;f++)s[f]=t.text;t.text=s}if(null!=t.text||i){if(this.textOffsets=[0],Array.isArray(t.text)){this.count=t.text[0].length,this.counts=[this.count];for(var b=1;b<t.text.length;b++)this.textOffsets[b]=this.textOffsets[b-1]+t.text[b-1].length,this.count+=t.text[b].length,this.counts.push(t.text[b].length);this.text=t.text.join("")}else this.text=t.text,this.count=this.text.length,this.counts=[this.count];r=[],this.font.forEach(function(t,n){k.atlasContext.font=t.baseString;for(var a=e.fontAtlas[n],i=0;i<e.text.length;i++){var o=e.text.charAt(i);if(null==a.ids[o]&&(a.ids[o]=a.chars.length,a.chars.push(o),r.push(o)),null==t.width[o]&&(t.width[o]=k.atlasContext.measureText(o).width/k.baseFontSize,e.kerning)){var s=[];for(var l in t.width)s.push(l+o,o+l);v(t.kerning,g(t.family,{pairs:s}))}}})}if(t.position)if(t.position.length>2){for(var w=!t.position[0].length,T=u.mallocFloat(2*this.count),M=0,A=0;M<this.counts.length;M++){var S=this.counts[M];if(w)for(var E=0;E<S;E++)T[A++]=t.position[2*M],T[A++]=t.position[2*M+1];else for(var L=0;L<S;L++)T[A++]=t.position[M][0],T[A++]=t.position[M][1]}this.position.call?this.position({type:"float",data:T}):this.position=this.regl.buffer({type:"float",data:T}),u.freeFloat(T)}else this.position.destroy&&this.position.destroy(),this.position={constant:t.position};if(t.text||i){var C=u.mallocUint8(this.count),P=u.mallocFloat(2*this.count);this.textWidth=[];for(var O=0,z=0;O<this.counts.length;O++){for(var I=this.counts[O],D=this.font[O]||this.font[0],R=this.fontAtlas[O]||this.fontAtlas[0],F=0;F<I;F++){var B=this.text.charAt(z),N=this.text.charAt(z-1);if(C[z]=R.ids[B],P[2*z]=D.width[B],F){var j=P[2*z-2],V=P[2*z],U=P[2*z-1]+.5*j+.5*V;if(this.kerning){var q=D.kerning[N+B];q&&(U+=.001*q)}P[2*z+1]=U}else P[2*z+1]=.5*P[2*z];z++}this.textWidth.push(P.length?.5*P[2*z-2]+P[2*z-1]:0)}t.align||(t.align=this.align),this.charBuffer({data:C,type:"uint8",usage:"stream"}),this.sizeBuffer({data:P,type:"float",usage:"stream"}),u.freeUint8(C),u.freeFloat(P),r.length&&this.font.forEach(function(t,r){var n=e.fontAtlas[r],a=n.step,i=Math.floor(k.maxAtlasSize/a),o=Math.min(i,n.chars.length),s=Math.ceil(n.chars.length/o),l=x(o*a),u=x(s*a);n.width=l,n.height=u,n.rows=s,n.cols=o,n.em&&n.texture({data:c({canvas:k.atlasCanvas,font:n.fontString,chars:n.chars,shape:[l,u],step:[a,a]})})})}if(t.align&&(this.align=t.align,this.alignOffset=this.textWidth.map(function(t,r){var n=Array.isArray(e.align)?e.align.length>1?e.align[r]:e.align[0]:e.align;if("number"==typeof n)return n;switch(n){case"right":case"end":return-t;case"center":case"centre":case"middle":return.5*-t}return 0})),null==this.baseline&&null==t.baseline&&(t.baseline=0),null!=t.baseline&&(this.baseline=t.baseline,Array.isArray(this.baseline)||(this.baseline=[this.baseline]),this.baselineOffset=this.baseline.map(function(t,r){var n=(e.font[r]||e.font[0]).metrics,a=0;return a+=.5*n.bottom,a+="number"==typeof t?t-n.baseline:-n[t],k.normalViewport||(a*=-1),a})),null!=t.color)if(t.color||(t.color="transparent"),"string"!=typeof t.color&&isNaN(t.color)){var H;if("number"==typeof t.color[0]&&t.color.length>this.counts.length){var G=t.color.length;H=u.mallocUint8(G);for(var Y=(t.color.subarray||t.color.slice).bind(t.color),W=0;W<G;W+=4)H.set(l(Y(W,W+4),"uint8"),W)}else{var X=t.color.length;H=u.mallocUint8(4*X);for(var Z=0;Z<X;Z++)H.set(l(t.color[Z]||0,"uint8"),4*Z)}this.color=H}else this.color=l(t.color,"uint8");if(t.position||t.text||t.color||t.baseline||t.align||t.font||t.offset||t.opacity)if(this.color.length>4||this.baselineOffset.length>1||this.align&&this.align.length>1||this.fontAtlas.length>1||this.positionOffset.length>2){var J=Math.max(.5*this.position.length||0,.25*this.color.length||0,this.baselineOffset.length||0,this.alignOffset.length||0,this.font.length||0,this.opacity.length||0,.5*this.positionOffset.length||0);this.batch=Array(J);for(var K=0;K<this.batch.length;K++)this.batch[K]={count:this.counts.length>1?this.counts[K]:this.counts[0],offset:this.textOffsets.length>1?this.textOffsets[K]:this.textOffsets[0],color:this.color?this.color.length<=4?this.color:this.color.subarray(4*K,4*K+4):[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[K]:this.opacity,baseline:null!=this.baselineOffset[K]?this.baselineOffset[K]:this.baselineOffset[0],align:this.align?null!=this.alignOffset[K]?this.alignOffset[K]:this.alignOffset[0]:0,atlas:this.fontAtlas[K]||this.fontAtlas[0],positionOffset:this.positionOffset.length>2?this.positionOffset.subarray(2*K,2*K+2):this.positionOffset}}else this.count?this.batch=[{count:this.count,offset:0,color:this.color||[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[0]:this.opacity,baseline:this.baselineOffset[0],align:this.alignOffset?this.alignOffset[0]:0,atlas:this.fontAtlas[0],positionOffset:this.positionOffset}]:this.batch=[]},k.prototype.destroy=function(){},k.prototype.kerning=!0,k.prototype.position={constant:new Float32Array(2)},k.prototype.translate=null,k.prototype.scale=null,k.prototype.font=null,k.prototype.text="",k.prototype.positionOffset=[0,0],k.prototype.opacity=1,k.prototype.color=new Uint8Array([0,0,0,255]),k.prototype.alignOffset=[0,0],k.normalViewport=!1,k.maxAtlasSize=1024,k.atlasCanvas=document.createElement("canvas"),k.atlasContext=k.atlasCanvas.getContext("2d",{alpha:!1}),k.baseFontSize=64,k.fonts={},e.exports=k},{"bit-twiddle":94,"color-normalize":122,"css-font":141,"detect-kerning":168,"es6-weak-map":320,"flatten-vertex-data":230,"font-atlas":231,"font-measure":232,"gl-util/context":325,"is-plain-obj":423,"object-assign":455,"parse-rect":460,"parse-unit":462,"pick-by-alias":466,regl:500,"to-px":537,"typedarray-pool":543}],320:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?WeakMap:t("./polyfill")},{"./is-implemented":321,"./polyfill":323}],321:[function(t,e,r){"use strict";e.exports=function(){var t,e;if("function"!=typeof WeakMap)return!1;try{t=new WeakMap([[e={},"one"],[{},"two"],[{},"three"]])}catch(t){return!1}return"[object WeakMap]"===String(t)&&("function"==typeof t.set&&(t.set({},1)===t&&("function"==typeof t.delete&&("function"==typeof t.has&&"one"===t.get(e)))))}},{}],322:[function(t,e,r){"use strict";e.exports="function"==typeof WeakMap&&"[object WeakMap]"===Object.prototype.toString.call(new WeakMap)},{}],323:[function(t,e,r){"use strict";var n,a=t("es5-ext/object/is-value"),i=t("es5-ext/object/set-prototype-of"),o=t("es5-ext/object/valid-object"),s=t("es5-ext/object/valid-value"),l=t("es5-ext/string/random-uniq"),c=t("d"),u=t("es6-iterator/get"),h=t("es6-iterator/for-of"),f=t("es6-symbol").toStringTag,p=t("./is-native-implemented"),d=Array.isArray,g=Object.defineProperty,v=Object.prototype.hasOwnProperty,m=Object.getPrototypeOf;e.exports=n=function(){var t,e=arguments[0];if(!(this instanceof n))throw new TypeError("Constructor requires 'new'");return t=p&&i&&WeakMap!==n?i(new WeakMap,m(this)):this,a(e)&&(d(e)||(e=u(e))),g(t,"__weakMapData__",c("c","$weakMap$"+l())),e?(h(e,function(e){s(e),t.set(e[0],e[1])}),t):t},p&&(i&&i(n,WeakMap),n.prototype=Object.create(WeakMap.prototype,{constructor:c(n)})),Object.defineProperties(n.prototype,{delete:c(function(t){return!!v.call(o(t),this.__weakMapData__)&&(delete t[this.__weakMapData__],!0)}),get:c(function(t){if(v.call(o(t),this.__weakMapData__))return t[this.__weakMapData__]}),has:c(function(t){return v.call(o(t),this.__weakMapData__)}),set:c(function(t,e){return g(o(t),this.__weakMapData__,c("c",e)),this}),toString:c(function(){return"[object WeakMap]"})}),g(n.prototype,f,c("c","WeakMap"))},{"./is-native-implemented":322,d:153,"es5-ext/object/is-value":197,"es5-ext/object/set-prototype-of":203,"es5-ext/object/valid-object":207,"es5-ext/object/valid-value":208,"es5-ext/string/random-uniq":213,"es6-iterator/for-of":215,"es6-iterator/get":216,"es6-symbol":222}],324:[function(t,e,r){"use strict";var n=t("ndarray"),a=t("ndarray-ops"),i=t("typedarray-pool");e.exports=function(t){if(arguments.length<=1)throw new Error("gl-texture2d: Missing arguments for texture2d constructor");o||function(t){o=[t.LINEAR,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_NEAREST],s=[t.NEAREST,t.LINEAR,t.NEAREST_MIPMAP_NEAREST,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_LINEAR],l=[t.REPEAT,t.CLAMP_TO_EDGE,t.MIRRORED_REPEAT]}(t);if("number"==typeof arguments[1])return v(t,arguments[1],arguments[2],arguments[3]||t.RGBA,arguments[4]||t.UNSIGNED_BYTE);if(Array.isArray(arguments[1]))return v(t,0|arguments[1][0],0|arguments[1][1],arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if("object"==typeof arguments[1]){var e=arguments[1],r=c(e)?e:e.raw;if(r)return function(t,e,r,n,a,i){var o=g(t);return t.texImage2D(t.TEXTURE_2D,0,a,a,i,e),new f(t,o,r,n,a,i)}(t,r,0|e.width,0|e.height,arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if(e.shape&&e.data&&e.stride)return function(t,e){var r=e.dtype,o=e.shape.slice(),s=t.getParameter(t.MAX_TEXTURE_SIZE);if(o[0]<0||o[0]>s||o[1]<0||o[1]>s)throw new Error("gl-texture2d: Invalid texture size");var l=d(o,e.stride.slice()),c=0;"float32"===r?c=t.FLOAT:"float64"===r?(c=t.FLOAT,l=!1,r="float32"):"uint8"===r?c=t.UNSIGNED_BYTE:(c=t.UNSIGNED_BYTE,l=!1,r="uint8");var h,p,v=0;if(2===o.length)v=t.LUMINANCE,o=[o[0],o[1],1],e=n(e.data,o,[e.stride[0],e.stride[1],1],e.offset);else{if(3!==o.length)throw new Error("gl-texture2d: Invalid shape for texture");if(1===o[2])v=t.ALPHA;else if(2===o[2])v=t.LUMINANCE_ALPHA;else if(3===o[2])v=t.RGB;else{if(4!==o[2])throw new Error("gl-texture2d: Invalid shape for pixel coords");v=t.RGBA}}c!==t.FLOAT||t.getExtension("OES_texture_float")||(c=t.UNSIGNED_BYTE,l=!1);var m=e.size;if(l)h=0===e.offset&&e.data.length===m?e.data:e.data.subarray(e.offset,e.offset+m);else{var y=[o[2],o[2]*o[0],1];p=i.malloc(m,r);var x=n(p,o,y,0);"float32"!==r&&"float64"!==r||c!==t.UNSIGNED_BYTE?a.assign(x,e):u(x,e),h=p.subarray(0,m)}var b=g(t);t.texImage2D(t.TEXTURE_2D,0,v,o[0],o[1],0,v,c,h),l||i.free(p);return new f(t,b,o[0],o[1],v,c)}(t,e)}throw new Error("gl-texture2d: Invalid arguments for texture2d constructor")};var o=null,s=null,l=null;function c(t){return"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement||"undefined"!=typeof ImageData&&t instanceof ImageData}var u=function(t,e){a.muls(t,e,255)};function h(t,e,r){var n=t.gl,a=n.getParameter(n.MAX_TEXTURE_SIZE);if(e<0||e>a||r<0||r>a)throw new Error("gl-texture2d: Invalid texture size");return t._shape=[e,r],t.bind(),n.texImage2D(n.TEXTURE_2D,0,t.format,e,r,0,t.format,t.type,null),t._mipLevels=[0],t}function f(t,e,r,n,a,i){this.gl=t,this.handle=e,this.format=a,this.type=i,this._shape=[r,n],this._mipLevels=[0],this._magFilter=t.NEAREST,this._minFilter=t.NEAREST,this._wrapS=t.CLAMP_TO_EDGE,this._wrapT=t.CLAMP_TO_EDGE,this._anisoSamples=1;var o=this,s=[this._wrapS,this._wrapT];Object.defineProperties(s,[{get:function(){return o._wrapS},set:function(t){return o.wrapS=t}},{get:function(){return o._wrapT},set:function(t){return o.wrapT=t}}]),this._wrapVector=s;var l=[this._shape[0],this._shape[1]];Object.defineProperties(l,[{get:function(){return o._shape[0]},set:function(t){return o.width=t}},{get:function(){return o._shape[1]},set:function(t){return o.height=t}}]),this._shapeVector=l}var p=f.prototype;function d(t,e){return 3===t.length?1===e[2]&&e[1]===t[0]*t[2]&&e[0]===t[2]:1===e[0]&&e[1]===t[0]}function g(t){var e=t.createTexture();return t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),e}function v(t,e,r,n,a){var i=t.getParameter(t.MAX_TEXTURE_SIZE);if(e<0||e>i||r<0||r>i)throw new Error("gl-texture2d: Invalid texture shape");if(a===t.FLOAT&&!t.getExtension("OES_texture_float"))throw new Error("gl-texture2d: Floating point textures not supported on this platform");var o=g(t);return t.texImage2D(t.TEXTURE_2D,0,n,e,r,0,n,a,null),new f(t,o,e,r,n,a)}Object.defineProperties(p,{minFilter:{get:function(){return this._minFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&o.indexOf(t)>=0&&(e.getExtension("OES_texture_float_linear")||(t=e.NEAREST)),s.indexOf(t)<0)throw new Error("gl-texture2d: Unknown filter mode "+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t),this._minFilter=t}},magFilter:{get:function(){return this._magFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&o.indexOf(t)>=0&&(e.getExtension("OES_texture_float_linear")||(t=e.NEAREST)),s.indexOf(t)<0)throw new Error("gl-texture2d: Unknown filter mode "+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t),this._magFilter=t}},mipSamples:{get:function(){return this._anisoSamples},set:function(t){var e=this._anisoSamples;if(this._anisoSamples=0|Math.max(t,1),e!==this._anisoSamples){var r=this.gl.getExtension("EXT_texture_filter_anisotropic");r&&this.gl.texParameterf(this.gl.TEXTURE_2D,r.TEXTURE_MAX_ANISOTROPY_EXT,this._anisoSamples)}return this._anisoSamples}},wrapS:{get:function(){return this._wrapS},set:function(t){if(this.bind(),l.indexOf(t)<0)throw new Error("gl-texture2d: Unknown wrap mode "+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,t),this._wrapS=t}},wrapT:{get:function(){return this._wrapT},set:function(t){if(this.bind(),l.indexOf(t)<0)throw new Error("gl-texture2d: Unknown wrap mode "+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,t),this._wrapT=t}},wrap:{get:function(){return this._wrapVector},set:function(t){if(Array.isArray(t)||(t=[t,t]),2!==t.length)throw new Error("gl-texture2d: Must specify wrap mode for rows and columns");for(var e=0;e<2;++e)if(l.indexOf(t[e])<0)throw new Error("gl-texture2d: Unknown wrap mode "+t);this._wrapS=t[0],this._wrapT=t[1];var r=this.gl;return this.bind(),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,this._wrapS),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,this._wrapT),t}},shape:{get:function(){return this._shapeVector},set:function(t){if(Array.isArray(t)){if(2!==t.length)throw new Error("gl-texture2d: Invalid texture shape")}else t=[0|t,0|t];return h(this,0|t[0],0|t[1]),[0|t[0],0|t[1]]}},width:{get:function(){return this._shape[0]},set:function(t){return h(this,t|=0,this._shape[1]),t}},height:{get:function(){return this._shape[1]},set:function(t){return t|=0,h(this,this._shape[0],t),t}}}),p.bind=function(t){var e=this.gl;return void 0!==t&&e.activeTexture(e.TEXTURE0+(0|t)),e.bindTexture(e.TEXTURE_2D,this.handle),void 0!==t?0|t:e.getParameter(e.ACTIVE_TEXTURE)-e.TEXTURE0},p.dispose=function(){this.gl.deleteTexture(this.handle)},p.generateMipmap=function(){this.bind(),this.gl.generateMipmap(this.gl.TEXTURE_2D);for(var t=Math.min(this._shape[0],this._shape[1]),e=0;t>0;++e,t>>>=1)this._mipLevels.indexOf(e)<0&&this._mipLevels.push(e)},p.setPixels=function(t,e,r,o){var s=this.gl;this.bind(),Array.isArray(e)?(o=r,r=0|e[1],e=0|e[0]):(e=e||0,r=r||0),o=o||0;var l=c(t)?t:t.raw;if(l){this._mipLevels.indexOf(o)<0?(s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,this.type,l),this._mipLevels.push(o)):s.texSubImage2D(s.TEXTURE_2D,o,e,r,this.format,this.type,l)}else{if(!(t.shape&&t.stride&&t.data))throw new Error("gl-texture2d: Unsupported data type");if(t.shape.length<2||e+t.shape[1]>this._shape[1]>>>o||r+t.shape[0]>this._shape[0]>>>o||e<0||r<0)throw new Error("gl-texture2d: Texture dimensions are out of bounds");!function(t,e,r,o,s,l,c,h){var f=h.dtype,p=h.shape.slice();if(p.length<2||p.length>3)throw new Error("gl-texture2d: Invalid ndarray, must be 2d or 3d");var g=0,v=0,m=d(p,h.stride.slice());"float32"===f?g=t.FLOAT:"float64"===f?(g=t.FLOAT,m=!1,f="float32"):"uint8"===f?g=t.UNSIGNED_BYTE:(g=t.UNSIGNED_BYTE,m=!1,f="uint8");if(2===p.length)v=t.LUMINANCE,p=[p[0],p[1],1],h=n(h.data,p,[h.stride[0],h.stride[1],1],h.offset);else{if(3!==p.length)throw new Error("gl-texture2d: Invalid shape for texture");if(1===p[2])v=t.ALPHA;else if(2===p[2])v=t.LUMINANCE_ALPHA;else if(3===p[2])v=t.RGB;else{if(4!==p[2])throw new Error("gl-texture2d: Invalid shape for pixel coords");v=t.RGBA}p[2]}v!==t.LUMINANCE&&v!==t.ALPHA||s!==t.LUMINANCE&&s!==t.ALPHA||(v=s);if(v!==s)throw new Error("gl-texture2d: Incompatible texture format for setPixels");var y=h.size,x=c.indexOf(o)<0;x&&c.push(o);if(g===l&&m)0===h.offset&&h.data.length===y?x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,h.data):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,h.data):x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,h.data.subarray(h.offset,h.offset+y)):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,h.data.subarray(h.offset,h.offset+y));else{var b;b=l===t.FLOAT?i.mallocFloat32(y):i.mallocUint8(y);var _=n(b,p,[p[2],p[2]*p[0],1]);g===t.FLOAT&&l===t.UNSIGNED_BYTE?u(_,h):a.assign(_,h),x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,b.subarray(0,y)):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,b.subarray(0,y)),l===t.FLOAT?i.freeFloat32(b):i.freeUint8(b)}}(s,e,r,o,this.format,this.type,this._mipLevels,t)}}},{ndarray:451,"ndarray-ops":445,"typedarray-pool":543}],325:[function(t,e,r){(function(r){"use strict";var n=t("pick-by-alias");function a(t){if(t.container)if(t.container==document.body)document.body.style.width||(t.canvas.width=t.width||t.pixelRatio*r.innerWidth),document.body.style.height||(t.canvas.height=t.height||t.pixelRatio*r.innerHeight);else{var e=t.container.getBoundingClientRect();t.canvas.width=t.width||e.right-e.left,t.canvas.height=t.height||e.bottom-e.top}}function i(t){return"function"==typeof t.getContext&&"width"in t&&"height"in t}function o(){var t=document.createElement("canvas");return t.style.position="absolute",t.style.top=0,t.style.left=0,t}e.exports=function(t){var e;if(t?"string"==typeof t&&(t={container:t}):t={},i(t)?t={container:t}:t="string"==typeof(e=t).nodeName&&"function"==typeof e.appendChild&&"function"==typeof e.getBoundingClientRect?{container:t}:function(t){return"function"==typeof t.drawArrays||"function"==typeof t.drawElements}(t)?{gl:t}:n(t,{container:"container target element el canvas holder parent parentNode wrapper use ref root node",gl:"gl context webgl glContext",attrs:"attributes attrs contextAttributes",pixelRatio:"pixelRatio pxRatio px ratio pxratio pixelratio",width:"w width",height:"h height"},!0),t.pixelRatio||(t.pixelRatio=r.pixelRatio||1),t.gl)return t.gl;if(t.canvas&&(t.container=t.canvas.parentNode),t.container){if("string"==typeof t.container){var s=document.querySelector(t.container);if(!s)throw Error("Element "+t.container+" is not found");t.container=s}i(t.container)?(t.canvas=t.container,t.container=t.canvas.parentNode):t.canvas||(t.canvas=o(),t.container.appendChild(t.canvas),a(t))}else if(!t.canvas){if("undefined"==typeof document)throw Error("Not DOM environment. Use headless-gl.");t.container=document.body||document.documentElement,t.canvas=o(),t.container.appendChild(t.canvas),a(t)}if(!t.gl)try{t.gl=t.canvas.getContext("webgl",t.attrs)}catch(e){try{t.gl=t.canvas.getContext("experimental-webgl",t.attrs)}catch(e){t.gl=t.canvas.getContext("webgl-experimental",t.attrs)}}return t.gl}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"pick-by-alias":466}],326:[function(t,e,r){"use strict";e.exports=function(t,e,r){e?e.bind():t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null);var n=0|t.getParameter(t.MAX_VERTEX_ATTRIBS);if(r){if(r.length>n)throw new Error("gl-vao: Too many vertex attributes");for(var a=0;a<r.length;++a){var i=r[a];if(i.buffer){var o=i.buffer,s=i.size||4,l=i.type||t.FLOAT,c=!!i.normalized,u=i.stride||0,h=i.offset||0;o.bind(),t.enableVertexAttribArray(a),t.vertexAttribPointer(a,s,l,c,u,h)}else{if("number"==typeof i)t.vertexAttrib1f(a,i);else if(1===i.length)t.vertexAttrib1f(a,i[0]);else if(2===i.length)t.vertexAttrib2f(a,i[0],i[1]);else if(3===i.length)t.vertexAttrib3f(a,i[0],i[1],i[2]);else{if(4!==i.length)throw new Error("gl-vao: Invalid vertex attribute");t.vertexAttrib4f(a,i[0],i[1],i[2],i[3])}t.disableVertexAttribArray(a)}}for(;a<n;++a)t.disableVertexAttribArray(a)}else for(t.bindBuffer(t.ARRAY_BUFFER,null),a=0;a<n;++a)t.disableVertexAttribArray(a)}},{}],327:[function(t,e,r){"use strict";var n=t("./do-bind.js");function a(t){this.gl=t,this._elements=null,this._attributes=null,this._elementsType=t.UNSIGNED_SHORT}a.prototype.bind=function(){n(this.gl,this._elements,this._attributes)},a.prototype.update=function(t,e,r){this._elements=e,this._attributes=t,this._elementsType=r||this.gl.UNSIGNED_SHORT},a.prototype.dispose=function(){},a.prototype.unbind=function(){},a.prototype.draw=function(t,e,r){r=r||0;var n=this.gl;this._elements?n.drawElements(t,e,this._elementsType,r):n.drawArrays(t,r,e)},e.exports=function(t){return new a(t)}},{"./do-bind.js":326}],328:[function(t,e,r){"use strict";var n=t("./do-bind.js");function a(t,e,r,n,a,i){this.location=t,this.dimension=e,this.a=r,this.b=n,this.c=a,this.d=i}function i(t,e,r){this.gl=t,this._ext=e,this.handle=r,this._attribs=[],this._useElements=!1,this._elementsType=t.UNSIGNED_SHORT}a.prototype.bind=function(t){switch(this.dimension){case 1:t.vertexAttrib1f(this.location,this.a);break;case 2:t.vertexAttrib2f(this.location,this.a,this.b);break;case 3:t.vertexAttrib3f(this.location,this.a,this.b,this.c);break;case 4:t.vertexAttrib4f(this.location,this.a,this.b,this.c,this.d)}},i.prototype.bind=function(){this._ext.bindVertexArrayOES(this.handle);for(var t=0;t<this._attribs.length;++t)this._attribs[t].bind(this.gl)},i.prototype.unbind=function(){this._ext.bindVertexArrayOES(null)},i.prototype.dispose=function(){this._ext.deleteVertexArrayOES(this.handle)},i.prototype.update=function(t,e,r){if(this.bind(),n(this.gl,e,t),this.unbind(),this._attribs.length=0,t)for(var i=0;i<t.length;++i){var o=t[i];"number"==typeof o?this._attribs.push(new a(i,1,o)):Array.isArray(o)&&this._attribs.push(new a(i,o.length,o[0],o[1],o[2],o[3]))}this._useElements=!!e,this._elementsType=r||this.gl.UNSIGNED_SHORT},i.prototype.draw=function(t,e,r){r=r||0;var n=this.gl;this._useElements?n.drawElements(t,e,this._elementsType,r):n.drawArrays(t,r,e)},e.exports=function(t,e){return new i(t,e,e.createVertexArrayOES())}},{"./do-bind.js":326}],329:[function(t,e,r){"use strict";var n=t("./lib/vao-native.js"),a=t("./lib/vao-emulated.js");function i(t){this.bindVertexArrayOES=t.bindVertexArray.bind(t),this.createVertexArrayOES=t.createVertexArray.bind(t),this.deleteVertexArrayOES=t.deleteVertexArray.bind(t)}e.exports=function(t,e,r,o){var s,l=t.createVertexArray?new i(t):t.getExtension("OES_vertex_array_object");return(s=l?n(t,l):a(t)).update(e,r,o),s}},{"./lib/vao-emulated.js":327,"./lib/vao-native.js":328}],330:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}},{}],331:[function(t,e,r){e.exports=function(t,e){var r=n(t[0],t[1],t[2]),o=n(e[0],e[1],e[2]);a(r,r),a(o,o);var s=i(r,o);return s>1?0:Math.acos(s)};var n=t("./fromValues"),a=t("./normalize"),i=t("./dot")},{"./dot":341,"./fromValues":347,"./normalize":358}],332:[function(t,e,r){e.exports=function(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}},{}],333:[function(t,e,r){e.exports=function(t){var e=new Float32Array(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}},{}],334:[function(t,e,r){e.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}},{}],335:[function(t,e,r){e.exports=function(){var t=new Float32Array(3);return t[0]=0,t[1]=0,t[2]=0,t}},{}],336:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=r[0],s=r[1],l=r[2];return t[0]=a*l-i*s,t[1]=i*o-n*l,t[2]=n*s-a*o,t}},{}],337:[function(t,e,r){e.exports=t("./distance")},{"./distance":338}],338:[function(t,e,r){e.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],a=e[2]-t[2];return Math.sqrt(r*r+n*n+a*a)}},{}],339:[function(t,e,r){e.exports=t("./divide")},{"./divide":340}],340:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}},{}],341:[function(t,e,r){e.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}},{}],342:[function(t,e,r){e.exports=1e-6},{}],343:[function(t,e,r){e.exports=function(t,e){var r=t[0],a=t[1],i=t[2],o=e[0],s=e[1],l=e[2];return Math.abs(r-o)<=n*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(a-s)<=n*Math.max(1,Math.abs(a),Math.abs(s))&&Math.abs(i-l)<=n*Math.max(1,Math.abs(i),Math.abs(l))};var n=t("./epsilon")},{"./epsilon":342}],344:[function(t,e,r){e.exports=function(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}},{}],345:[function(t,e,r){e.exports=function(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}},{}],346:[function(t,e,r){e.exports=function(t,e,r,a,i,o){var s,l;e||(e=3);r||(r=0);l=a?Math.min(a*e+r,t.length):t.length;for(s=r;s<l;s+=e)n[0]=t[s],n[1]=t[s+1],n[2]=t[s+2],i(n,n,o),t[s]=n[0],t[s+1]=n[1],t[s+2]=n[2];return t};var n=t("./create")()},{"./create":335}],347:[function(t,e,r){e.exports=function(t,e,r){var n=new Float32Array(3);return n[0]=t,n[1]=e,n[2]=r,n}},{}],348:[function(t,e,r){e.exports={EPSILON:t("./epsilon"),create:t("./create"),clone:t("./clone"),angle:t("./angle"),fromValues:t("./fromValues"),copy:t("./copy"),set:t("./set"),equals:t("./equals"),exactEquals:t("./exactEquals"),add:t("./add"),subtract:t("./subtract"),sub:t("./sub"),multiply:t("./multiply"),mul:t("./mul"),divide:t("./divide"),div:t("./div"),min:t("./min"),max:t("./max"),floor:t("./floor"),ceil:t("./ceil"),round:t("./round"),scale:t("./scale"),scaleAndAdd:t("./scaleAndAdd"),distance:t("./distance"),dist:t("./dist"),squaredDistance:t("./squaredDistance"),sqrDist:t("./sqrDist"),length:t("./length"),len:t("./len"),squaredLength:t("./squaredLength"),sqrLen:t("./sqrLen"),negate:t("./negate"),inverse:t("./inverse"),normalize:t("./normalize"),dot:t("./dot"),cross:t("./cross"),lerp:t("./lerp"),random:t("./random"),transformMat4:t("./transformMat4"),transformMat3:t("./transformMat3"),transformQuat:t("./transformQuat"),rotateX:t("./rotateX"),rotateY:t("./rotateY"),rotateZ:t("./rotateZ"),forEach:t("./forEach")}},{"./add":330,"./angle":331,"./ceil":332,"./clone":333,"./copy":334,"./create":335,"./cross":336,"./dist":337,"./distance":338,"./div":339,"./divide":340,"./dot":341,"./epsilon":342,"./equals":343,"./exactEquals":344,"./floor":345,"./forEach":346,"./fromValues":347,"./inverse":349,"./len":350,"./length":351,"./lerp":352,"./max":353,"./min":354,"./mul":355,"./multiply":356,"./negate":357,"./normalize":358,"./random":359,"./rotateX":360,"./rotateY":361,"./rotateZ":362,"./round":363,"./scale":364,"./scaleAndAdd":365,"./set":366,"./sqrDist":367,"./sqrLen":368,"./squaredDistance":369,"./squaredLength":370,"./sub":371,"./subtract":372,"./transformMat3":373,"./transformMat4":374,"./transformQuat":375}],349:[function(t,e,r){e.exports=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}},{}],350:[function(t,e,r){e.exports=t("./length")},{"./length":351}],351:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}},{}],352:[function(t,e,r){e.exports=function(t,e,r,n){var a=e[0],i=e[1],o=e[2];return t[0]=a+n*(r[0]-a),t[1]=i+n*(r[1]-i),t[2]=o+n*(r[2]-o),t}},{}],353:[function(t,e,r){e.exports=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t}},{}],354:[function(t,e,r){e.exports=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t}},{}],355:[function(t,e,r){e.exports=t("./multiply")},{"./multiply":356}],356:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}},{}],357:[function(t,e,r){e.exports=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}},{}],358:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],a=e[2],i=r*r+n*n+a*a;i>0&&(i=1/Math.sqrt(i),t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i);return t}},{}],359:[function(t,e,r){e.exports=function(t,e){e=e||1;var r=2*Math.random()*Math.PI,n=2*Math.random()-1,a=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*a,t[1]=Math.sin(r)*a,t[2]=n*e,t}},{}],360:[function(t,e,r){e.exports=function(t,e,r,n){var a=r[1],i=r[2],o=e[1]-a,s=e[2]-i,l=Math.sin(n),c=Math.cos(n);return t[0]=e[0],t[1]=a+o*c-s*l,t[2]=i+o*l+s*c,t}},{}],361:[function(t,e,r){e.exports=function(t,e,r,n){var a=r[0],i=r[2],o=e[0]-a,s=e[2]-i,l=Math.sin(n),c=Math.cos(n);return t[0]=a+s*l+o*c,t[1]=e[1],t[2]=i+s*c-o*l,t}},{}],362:[function(t,e,r){e.exports=function(t,e,r,n){var a=r[0],i=r[1],o=e[0]-a,s=e[1]-i,l=Math.sin(n),c=Math.cos(n);return t[0]=a+o*c-s*l,t[1]=i+o*l+s*c,t[2]=e[2],t}},{}],363:[function(t,e,r){e.exports=function(t,e){return t[0]=Math.round(e[0]),t[1]=Math.round(e[1]),t[2]=Math.round(e[2]),t}},{}],364:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}},{}],365:[function(t,e,r){e.exports=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t}},{}],366:[function(t,e,r){e.exports=function(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}},{}],367:[function(t,e,r){e.exports=t("./squaredDistance")},{"./squaredDistance":369}],368:[function(t,e,r){e.exports=t("./squaredLength")},{"./squaredLength":370}],369:[function(t,e,r){e.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],a=e[2]-t[2];return r*r+n*n+a*a}},{}],370:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}},{}],371:[function(t,e,r){e.exports=t("./subtract")},{"./subtract":372}],372:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}},{}],373:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],a=e[1],i=e[2];return t[0]=n*r[0]+a*r[3]+i*r[6],t[1]=n*r[1]+a*r[4]+i*r[7],t[2]=n*r[2]+a*r[5]+i*r[8],t}},{}],374:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=r[3]*n+r[7]*a+r[11]*i+r[15];return o=o||1,t[0]=(r[0]*n+r[4]*a+r[8]*i+r[12])/o,t[1]=(r[1]*n+r[5]*a+r[9]*i+r[13])/o,t[2]=(r[2]*n+r[6]*a+r[10]*i+r[14])/o,t}},{}],375:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=r[0],s=r[1],l=r[2],c=r[3],u=c*n+s*i-l*a,h=c*a+l*n-o*i,f=c*i+o*a-s*n,p=-o*n-s*a-l*i;return t[0]=u*c+p*-o+h*-l-f*-s,t[1]=h*c+p*-s+f*-o-u*-l,t[2]=f*c+p*-l+u*-s-h*-o,t}},{}],376:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t}},{}],377:[function(t,e,r){e.exports=function(t){var e=new Float32Array(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}},{}],378:[function(t,e,r){e.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}},{}],379:[function(t,e,r){e.exports=function(){var t=new Float32Array(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t}},{}],380:[function(t,e,r){e.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],a=e[2]-t[2],i=e[3]-t[3];return Math.sqrt(r*r+n*n+a*a+i*i)}},{}],381:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t[3]=e[3]/r[3],t}},{}],382:[function(t,e,r){e.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}},{}],383:[function(t,e,r){e.exports=function(t,e,r,n){var a=new Float32Array(4);return a[0]=t,a[1]=e,a[2]=r,a[3]=n,a}},{}],384:[function(t,e,r){e.exports={create:t("./create"),clone:t("./clone"),fromValues:t("./fromValues"),copy:t("./copy"),set:t("./set"),add:t("./add"),subtract:t("./subtract"),multiply:t("./multiply"),divide:t("./divide"),min:t("./min"),max:t("./max"),scale:t("./scale"),scaleAndAdd:t("./scaleAndAdd"),distance:t("./distance"),squaredDistance:t("./squaredDistance"),length:t("./length"),squaredLength:t("./squaredLength"),negate:t("./negate"),inverse:t("./inverse"),normalize:t("./normalize"),dot:t("./dot"),lerp:t("./lerp"),random:t("./random"),transformMat4:t("./transformMat4"),transformQuat:t("./transformQuat")}},{"./add":376,"./clone":377,"./copy":378,"./create":379,"./distance":380,"./divide":381,"./dot":382,"./fromValues":383,"./inverse":385,"./length":386,"./lerp":387,"./max":388,"./min":389,"./multiply":390,"./negate":391,"./normalize":392,"./random":393,"./scale":394,"./scaleAndAdd":395,"./set":396,"./squaredDistance":397,"./squaredLength":398,"./subtract":399,"./transformMat4":400,"./transformQuat":401}],385:[function(t,e,r){e.exports=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t[3]=1/e[3],t}},{}],386:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2],a=t[3];return Math.sqrt(e*e+r*r+n*n+a*a)}},{}],387:[function(t,e,r){e.exports=function(t,e,r,n){var a=e[0],i=e[1],o=e[2],s=e[3];return t[0]=a+n*(r[0]-a),t[1]=i+n*(r[1]-i),t[2]=o+n*(r[2]-o),t[3]=s+n*(r[3]-s),t}},{}],388:[function(t,e,r){e.exports=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t[3]=Math.max(e[3],r[3]),t}},{}],389:[function(t,e,r){e.exports=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t[3]=Math.min(e[3],r[3]),t}},{}],390:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t[3]=e[3]*r[3],t}},{}],391:[function(t,e,r){e.exports=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t}},{}],392:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],a=e[2],i=e[3],o=r*r+n*n+a*a+i*i;o>0&&(o=1/Math.sqrt(o),t[0]=r*o,t[1]=n*o,t[2]=a*o,t[3]=i*o);return t}},{}],393:[function(t,e,r){var n=t("./normalize"),a=t("./scale");e.exports=function(t,e){return e=e||1,t[0]=Math.random(),t[1]=Math.random(),t[2]=Math.random(),t[3]=Math.random(),n(t,t),a(t,t,e),t}},{"./normalize":392,"./scale":394}],394:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t}},{}],395:[function(t,e,r){e.exports=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t}},{}],396:[function(t,e,r){e.exports=function(t,e,r,n,a){return t[0]=e,t[1]=r,t[2]=n,t[3]=a,t}},{}],397:[function(t,e,r){e.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],a=e[2]-t[2],i=e[3]-t[3];return r*r+n*n+a*a+i*i}},{}],398:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2],a=t[3];return e*e+r*r+n*n+a*a}},{}],399:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t}},{}],400:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=e[3];return t[0]=r[0]*n+r[4]*a+r[8]*i+r[12]*o,t[1]=r[1]*n+r[5]*a+r[9]*i+r[13]*o,t[2]=r[2]*n+r[6]*a+r[10]*i+r[14]*o,t[3]=r[3]*n+r[7]*a+r[11]*i+r[15]*o,t}},{}],401:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=r[0],s=r[1],l=r[2],c=r[3],u=c*n+s*i-l*a,h=c*a+l*n-o*i,f=c*i+o*a-s*n,p=-o*n-s*a-l*i;return t[0]=u*c+p*-o+h*-l-f*-s,t[1]=h*c+p*-s+f*-o-u*-l,t[2]=f*c+p*-l+u*-s-h*-o,t[3]=e[3],t}},{}],402:[function(t,e,r){var n=t("glsl-tokenizer"),a=t("atob-lite");e.exports=function(t){for(var e=Array.isArray(t)?t:n(t),r=0;r<e.length;r++){var i=e[r];if("preprocessor"===i.type){var o=i.data.match(/\#define\s+SHADER_NAME(_B64)?\s+(.+)$/);if(o&&o[2]){var s=o[1],l=o[2];return(s?a(l):l).trim()}}}}},{"atob-lite":74,"glsl-tokenizer":409}],403:[function(t,e,r){e.exports=function(t){var e,r,k,T=0,M=0,A=l,S=[],E=[],L=1,C=0,P=0,O=!1,z=!1,I="",D=i,R=n;"300 es"===(t=t||{}).version&&(D=s,R=o);return function(t){return E=[],null!==t?function(t){var r;T=0,k=(I+=t).length;for(;e=I[T],T<k;){switch(r=T,A){case u:T=V();break;case h:case f:T=j();break;case p:T=U();break;case d:T=G();break;case _:T=H();break;case g:T=Y();break;case c:T=W();break;case x:T=N();break;case l:T=B()}if(r!==T)switch(I[r]){case"\n":C=0,++L;break;default:++C}}return M+=T,I=I.slice(T),E}(t.replace?t.replace(/\r\n/g,"\n"):t):function(t){S.length&&F(S.join(""));return A=b,F("(eof)"),E}()};function F(t){t.length&&E.push({type:w[A],data:t,position:P,line:L,column:C})}function B(){return S=S.length?[]:S,"/"===r&&"*"===e?(P=M+T-1,A=u,r=e,T+1):"/"===r&&"/"===e?(P=M+T-1,A=h,r=e,T+1):"#"===e?(A=f,P=M+T,T):/\s/.test(e)?(A=x,P=M+T,T):(O=/\d/.test(e),z=/[^\w_]/.test(e),P=M+T,A=O?d:z?p:c,T)}function N(){return/[^\s]/g.test(e)?(F(S.join("")),A=l,T):(S.push(e),r=e,T+1)}function j(){return"\r"!==e&&"\n"!==e||"\\"===r?(S.push(e),r=e,T+1):(F(S.join("")),A=l,T)}function V(){return"/"===e&&"*"===r?(S.push(e),F(S.join("")),A=l,T+1):(S.push(e),r=e,T+1)}function U(){if("."===r&&/\d/.test(e))return A=g,T;if("/"===r&&"*"===e)return A=u,T;if("/"===r&&"/"===e)return A=h,T;if("."===e&&S.length){for(;q(S););return A=g,T}if(";"===e||")"===e||"("===e){if(S.length)for(;q(S););return F(e),A=l,T+1}var t=2===S.length&&"="!==e;if(/[\w_\d\s]/.test(e)||t){for(;q(S););return A=l,T}return S.push(e),r=e,T+1}function q(t){for(var e,r,n=0;;){if(e=a.indexOf(t.slice(0,t.length+n).join("")),r=a[e],-1===e){if(n--+t.length>0)continue;r=t.slice(0,1).join("")}return F(r),P+=r.length,(S=S.slice(r.length)).length}}function H(){return/[^a-fA-F0-9]/.test(e)?(F(S.join("")),A=l,T):(S.push(e),r=e,T+1)}function G(){return"."===e?(S.push(e),A=g,r=e,T+1):/[eE]/.test(e)?(S.push(e),A=g,r=e,T+1):"x"===e&&1===S.length&&"0"===S[0]?(A=_,S.push(e),r=e,T+1):/[^\d]/.test(e)?(F(S.join("")),A=l,T):(S.push(e),r=e,T+1)}function Y(){return"f"===e&&(S.push(e),r=e,T+=1),/[eE]/.test(e)?(S.push(e),r=e,T+1):"-"===e&&/[eE]/.test(r)?(S.push(e),r=e,T+1):/[^\d]/.test(e)?(F(S.join("")),A=l,T):(S.push(e),r=e,T+1)}function W(){if(/[^\d\w_]/.test(e)){var t=S.join("");return A=R.indexOf(t)>-1?y:D.indexOf(t)>-1?m:v,F(S.join("")),A=l,T}return S.push(e),r=e,T+1}};var n=t("./lib/literals"),a=t("./lib/operators"),i=t("./lib/builtins"),o=t("./lib/literals-300es"),s=t("./lib/builtins-300es"),l=999,c=9999,u=0,h=1,f=2,p=3,d=4,g=5,v=6,m=7,y=8,x=9,b=10,_=11,w=["block-comment","line-comment","preprocessor","operator","integer","float","ident","builtin","keyword","whitespace","eof","integer"]},{"./lib/builtins":405,"./lib/builtins-300es":404,"./lib/literals":407,"./lib/literals-300es":406,"./lib/operators":408}],404:[function(t,e,r){var n=t("./builtins");n=n.slice().filter(function(t){return!/^(gl\_|texture)/.test(t)}),e.exports=n.concat(["gl_VertexID","gl_InstanceID","gl_Position","gl_PointSize","gl_FragCoord","gl_FrontFacing","gl_FragDepth","gl_PointCoord","gl_MaxVertexAttribs","gl_MaxVertexUniformVectors","gl_MaxVertexOutputVectors","gl_MaxFragmentInputVectors","gl_MaxVertexTextureImageUnits","gl_MaxCombinedTextureImageUnits","gl_MaxTextureImageUnits","gl_MaxFragmentUniformVectors","gl_MaxDrawBuffers","gl_MinProgramTexelOffset","gl_MaxProgramTexelOffset","gl_DepthRangeParameters","gl_DepthRange","trunc","round","roundEven","isnan","isinf","floatBitsToInt","floatBitsToUint","intBitsToFloat","uintBitsToFloat","packSnorm2x16","unpackSnorm2x16","packUnorm2x16","unpackUnorm2x16","packHalf2x16","unpackHalf2x16","outerProduct","transpose","determinant","inverse","texture","textureSize","textureProj","textureLod","textureOffset","texelFetch","texelFetchOffset","textureProjOffset","textureLodOffset","textureProjLod","textureProjLodOffset","textureGrad","textureGradOffset","textureProjGrad","textureProjGradOffset"])},{"./builtins":405}],405:[function(t,e,r){e.exports=["abs","acos","all","any","asin","atan","ceil","clamp","cos","cross","dFdx","dFdy","degrees","distance","dot","equal","exp","exp2","faceforward","floor","fract","gl_BackColor","gl_BackLightModelProduct","gl_BackLightProduct","gl_BackMaterial","gl_BackSecondaryColor","gl_ClipPlane","gl_ClipVertex","gl_Color","gl_DepthRange","gl_DepthRangeParameters","gl_EyePlaneQ","gl_EyePlaneR","gl_EyePlaneS","gl_EyePlaneT","gl_Fog","gl_FogCoord","gl_FogFragCoord","gl_FogParameters","gl_FragColor","gl_FragCoord","gl_FragData","gl_FragDepth","gl_FragDepthEXT","gl_FrontColor","gl_FrontFacing","gl_FrontLightModelProduct","gl_FrontLightProduct","gl_FrontMaterial","gl_FrontSecondaryColor","gl_LightModel","gl_LightModelParameters","gl_LightModelProducts","gl_LightProducts","gl_LightSource","gl_LightSourceParameters","gl_MaterialParameters","gl_MaxClipPlanes","gl_MaxCombinedTextureImageUnits","gl_MaxDrawBuffers","gl_MaxFragmentUniformComponents","gl_MaxLights","gl_MaxTextureCoords","gl_MaxTextureImageUnits","gl_MaxTextureUnits","gl_MaxVaryingFloats","gl_MaxVertexAttribs","gl_MaxVertexTextureImageUnits","gl_MaxVertexUniformComponents","gl_ModelViewMatrix","gl_ModelViewMatrixInverse","gl_ModelViewMatrixInverseTranspose","gl_ModelViewMatrixTranspose","gl_ModelViewProjectionMatrix","gl_ModelViewProjectionMatrixInverse","gl_ModelViewProjectionMatrixInverseTranspose","gl_ModelViewProjectionMatrixTranspose","gl_MultiTexCoord0","gl_MultiTexCoord1","gl_MultiTexCoord2","gl_MultiTexCoord3","gl_MultiTexCoord4","gl_MultiTexCoord5","gl_MultiTexCoord6","gl_MultiTexCoord7","gl_Normal","gl_NormalMatrix","gl_NormalScale","gl_ObjectPlaneQ","gl_ObjectPlaneR","gl_ObjectPlaneS","gl_ObjectPlaneT","gl_Point","gl_PointCoord","gl_PointParameters","gl_PointSize","gl_Position","gl_ProjectionMatrix","gl_ProjectionMatrixInverse","gl_ProjectionMatrixInverseTranspose","gl_ProjectionMatrixTranspose","gl_SecondaryColor","gl_TexCoord","gl_TextureEnvColor","gl_TextureMatrix","gl_TextureMatrixInverse","gl_TextureMatrixInverseTranspose","gl_TextureMatrixTranspose","gl_Vertex","greaterThan","greaterThanEqual","inversesqrt","length","lessThan","lessThanEqual","log","log2","matrixCompMult","max","min","mix","mod","normalize","not","notEqual","pow","radians","reflect","refract","sign","sin","smoothstep","sqrt","step","tan","texture2D","texture2DLod","texture2DProj","texture2DProjLod","textureCube","textureCubeLod","texture2DLodEXT","texture2DProjLodEXT","textureCubeLodEXT","texture2DGradEXT","texture2DProjGradEXT","textureCubeGradEXT"]},{}],406:[function(t,e,r){var n=t("./literals");e.exports=n.slice().concat(["layout","centroid","smooth","case","mat2x2","mat2x3","mat2x4","mat3x2","mat3x3","mat3x4","mat4x2","mat4x3","mat4x4","uint","uvec2","uvec3","uvec4","samplerCubeShadow","sampler2DArray","sampler2DArrayShadow","isampler2D","isampler3D","isamplerCube","isampler2DArray","usampler2D","usampler3D","usamplerCube","usampler2DArray","coherent","restrict","readonly","writeonly","resource","atomic_uint","noperspective","patch","sample","subroutine","common","partition","active","filter","image1D","image2D","image3D","imageCube","iimage1D","iimage2D","iimage3D","iimageCube","uimage1D","uimage2D","uimage3D","uimageCube","image1DArray","image2DArray","iimage1DArray","iimage2DArray","uimage1DArray","uimage2DArray","image1DShadow","image2DShadow","image1DArrayShadow","image2DArrayShadow","imageBuffer","iimageBuffer","uimageBuffer","sampler1DArray","sampler1DArrayShadow","isampler1D","isampler1DArray","usampler1D","usampler1DArray","isampler2DRect","usampler2DRect","samplerBuffer","isamplerBuffer","usamplerBuffer","sampler2DMS","isampler2DMS","usampler2DMS","sampler2DMSArray","isampler2DMSArray","usampler2DMSArray"])},{"./literals":407}],407:[function(t,e,r){e.exports=["precision","highp","mediump","lowp","attribute","const","uniform","varying","break","continue","do","for","while","if","else","in","out","inout","float","int","void","bool","true","false","discard","return","mat2","mat3","mat4","vec2","vec3","vec4","ivec2","ivec3","ivec4","bvec2","bvec3","bvec4","sampler1D","sampler2D","sampler3D","samplerCube","sampler1DShadow","sampler2DShadow","struct","asm","class","union","enum","typedef","template","this","packed","goto","switch","default","inline","noinline","volatile","public","static","extern","external","interface","long","short","double","half","fixed","unsigned","input","output","hvec2","hvec3","hvec4","dvec2","dvec3","dvec4","fvec2","fvec3","fvec4","sampler2DRect","sampler3DRect","sampler2DRectShadow","sizeof","cast","namespace","using"]},{}],408:[function(t,e,r){e.exports=["<<=",">>=","++","--","<<",">>","<=",">=","==","!=","&&","||","+=","-=","*=","/=","%=","&=","^^","^=","|=","(",")","[","]",".","!","~","*","/","%","+","-","<",">","&","^","|","?",":","=",",",";","{","}"]},{}],409:[function(t,e,r){var n=t("./index");e.exports=function(t,e){var r=n(e),a=[];return a=(a=a.concat(r(t))).concat(r(null))}},{"./index":403}],410:[function(t,e,r){e.exports=function(t){"string"==typeof t&&(t=[t]);for(var e=[].slice.call(arguments,1),r=[],n=0;n<t.length-1;n++)r.push(t[n],e[n]||"");return r.push(t[n]),r.join("")}},{}],411:[function(t,e,r){(function(r){"use strict";var n,a=t("is-browser");n="function"==typeof r.matchMedia?!r.matchMedia("(hover: none)").matches:a,e.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"is-browser":418}],412:[function(t,e,r){"use strict";var n=t("is-browser");e.exports=n&&function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(e){t=!1}return t}()},{"is-browser":418}],413:[function(t,e,r){r.read=function(t,e,r,n,a){var i,o,s=8*a-n-1,l=(1<<s)-1,c=l>>1,u=-7,h=r?a-1:0,f=r?-1:1,p=t[e+h];for(h+=f,i=p&(1<<-u)-1,p>>=-u,u+=s;u>0;i=256*i+t[e+h],h+=f,u-=8);for(o=i&(1<<-u)-1,i>>=-u,u+=n;u>0;o=256*o+t[e+h],h+=f,u-=8);if(0===i)i=1-c;else{if(i===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),i-=c}return(p?-1:1)*o*Math.pow(2,i-n)},r.write=function(t,e,r,n,a,i){var o,s,l,c=8*i-a-1,u=(1<<c)-1,h=u>>1,f=23===a?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:i-1,d=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=u):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+h>=1?f/l:f*Math.pow(2,1-h))*l>=2&&(o++,l/=2),o+h>=u?(s=0,o=u):o+h>=1?(s=(e*l-1)*Math.pow(2,a),o+=h):(s=e*Math.pow(2,h-1)*Math.pow(2,a),o=0));a>=8;t[r+p]=255&s,p+=d,s/=256,a-=8);for(o=o<<a|s,c+=a;c>0;t[r+p]=255&o,p+=d,o/=256,c-=8);t[r+p-d]|=128*g}},{}],414:[function(t,e,r){"use strict";e.exports=function(t,e){var r=t.length;if(0===r)throw new Error("Must have at least d+1 points");var a=t[0].length;if(r<=a)throw new Error("Must input at least d+1 points");var o=t.slice(0,a+1),s=n.apply(void 0,o);if(0===s)throw new Error("Input not in general position");for(var l=new Array(a+1),u=0;u<=a;++u)l[u]=u;s<0&&(l[0]=1,l[1]=0);for(var h=new i(l,new Array(a+1),!1),f=h.adjacent,p=new Array(a+2),u=0;u<=a;++u){for(var d=l.slice(),g=0;g<=a;++g)g===u&&(d[g]=-1);var v=d[0];d[0]=d[1],d[1]=v;var m=new i(d,new Array(a+1),!0);f[u]=m,p[u]=m}p[a+1]=h;for(var u=0;u<=a;++u)for(var d=f[u].vertices,y=f[u].adjacent,g=0;g<=a;++g){var x=d[g];if(x<0)y[g]=h;else for(var b=0;b<=a;++b)f[b].vertices.indexOf(x)<0&&(y[g]=f[b])}for(var _=new c(a,o,p),w=!!e,u=a+1;u<r;++u)_.insert(t[u],w);return _.boundary()};var n=t("robust-orientation"),a=t("simplicial-complex").compareCells;function i(t,e,r){this.vertices=t,this.adjacent=e,this.boundary=r,this.lastVisited=-1}function o(t,e,r){this.vertices=t,this.cell=e,this.index=r}function s(t,e){return a(t.vertices,e.vertices)}i.prototype.flip=function(){var t=this.vertices[0];this.vertices[0]=this.vertices[1],this.vertices[1]=t;var e=this.adjacent[0];this.adjacent[0]=this.adjacent[1],this.adjacent[1]=e};var l=[];function c(t,e,r){this.dimension=t,this.vertices=e,this.simplices=r,this.interior=r.filter(function(t){return!t.boundary}),this.tuple=new Array(t+1);for(var a=0;a<=t;++a)this.tuple[a]=this.vertices[a];var i=l[t];i||(i=l[t]=function(t){for(var e=["function orient(){var tuple=this.tuple;return test("],r=0;r<=t;++r)r>0&&e.push(","),e.push("tuple[",r,"]");e.push(")}return orient");var a=new Function("test",e.join("")),i=n[t+1];return i||(i=n),a(i)}(t)),this.orient=i}var u=c.prototype;u.handleBoundaryDegeneracy=function(t,e){var r=this.dimension,n=this.vertices.length-1,a=this.tuple,i=this.vertices,o=[t];for(t.lastVisited=-n;o.length>0;){(t=o.pop()).vertices;for(var s=t.adjacent,l=0;l<=r;++l){var c=s[l];if(c.boundary&&!(c.lastVisited<=-n)){for(var u=c.vertices,h=0;h<=r;++h){var f=u[h];a[h]=f<0?e:i[f]}var p=this.orient();if(p>0)return c;c.lastVisited=-n,0===p&&o.push(c)}}}return null},u.walk=function(t,e){var r=this.vertices.length-1,n=this.dimension,a=this.vertices,i=this.tuple,o=e?this.interior.length*Math.random()|0:this.interior.length-1,s=this.interior[o];t:for(;!s.boundary;){for(var l=s.vertices,c=s.adjacent,u=0;u<=n;++u)i[u]=a[l[u]];s.lastVisited=r;for(u=0;u<=n;++u){var h=c[u];if(!(h.lastVisited>=r)){var f=i[u];i[u]=t;var p=this.orient();if(i[u]=f,p<0){s=h;continue t}h.boundary?h.lastVisited=-r:h.lastVisited=r}}return}return s},u.addPeaks=function(t,e){var r=this.vertices.length-1,n=this.dimension,a=this.vertices,l=this.tuple,c=this.interior,u=this.simplices,h=[e];e.lastVisited=r,e.vertices[e.vertices.indexOf(-1)]=r,e.boundary=!1,c.push(e);for(var f=[];h.length>0;){var p=(e=h.pop()).vertices,d=e.adjacent,g=p.indexOf(r);if(!(g<0))for(var v=0;v<=n;++v)if(v!==g){var m=d[v];if(m.boundary&&!(m.lastVisited>=r)){var y=m.vertices;if(m.lastVisited!==-r){for(var x=0,b=0;b<=n;++b)y[b]<0?(x=b,l[b]=t):l[b]=a[y[b]];if(this.orient()>0){y[x]=r,m.boundary=!1,c.push(m),h.push(m),m.lastVisited=r;continue}m.lastVisited=-r}var _=m.adjacent,w=p.slice(),k=d.slice(),T=new i(w,k,!0);u.push(T);var M=_.indexOf(e);if(!(M<0)){_[M]=T,k[g]=m,w[v]=-1,k[v]=e,d[v]=T,T.flip();for(b=0;b<=n;++b){var A=w[b];if(!(A<0||A===r)){for(var S=new Array(n-1),E=0,L=0;L<=n;++L){var C=w[L];C<0||L===b||(S[E++]=C)}f.push(new o(S,T,b))}}}}}}f.sort(s);for(v=0;v+1<f.length;v+=2){var P=f[v],O=f[v+1],z=P.index,I=O.index;z<0||I<0||(P.cell.adjacent[P.index]=O.cell,O.cell.adjacent[O.index]=P.cell)}},u.insert=function(t,e){var r=this.vertices;r.push(t);var n=this.walk(t,e);if(n){for(var a=this.dimension,i=this.tuple,o=0;o<=a;++o){var s=n.vertices[o];i[o]=s<0?t:r[s]}var l=this.orient(i);l<0||(0!==l||(n=this.handleBoundaryDegeneracy(n,t)))&&this.addPeaks(t,n)}},u.boundary=function(){for(var t=this.dimension,e=[],r=this.simplices,n=r.length,a=0;a<n;++a){var i=r[a];if(i.boundary){for(var o=new Array(t),s=i.vertices,l=0,c=0,u=0;u<=t;++u)s[u]>=0?o[l++]=s[u]:c=1&u;if(c===(1&t)){var h=o[0];o[0]=o[1],o[1]=h}e.push(o)}}return e}},{"robust-orientation":508,"simplicial-complex":518}],415:[function(t,e,r){"use strict";var n=t("binary-search-bounds"),a=0,i=1;function o(t,e,r,n,a){this.mid=t,this.left=e,this.right=r,this.leftPoints=n,this.rightPoints=a,this.count=(e?e.count:0)+(r?r.count:0)+n.length}e.exports=function(t){if(!t||0===t.length)return new x(null);return new x(y(t))};var s=o.prototype;function l(t,e){t.mid=e.mid,t.left=e.left,t.right=e.right,t.leftPoints=e.leftPoints,t.rightPoints=e.rightPoints,t.count=e.count}function c(t,e){var r=y(e);t.mid=r.mid,t.left=r.left,t.right=r.right,t.leftPoints=r.leftPoints,t.rightPoints=r.rightPoints,t.count=r.count}function u(t,e){var r=t.intervals([]);r.push(e),c(t,r)}function h(t,e){var r=t.intervals([]),n=r.indexOf(e);return n<0?a:(r.splice(n,1),c(t,r),i)}function f(t,e,r){for(var n=0;n<t.length&&t[n][0]<=e;++n){var a=r(t[n]);if(a)return a}}function p(t,e,r){for(var n=t.length-1;n>=0&&t[n][1]>=e;--n){var a=r(t[n]);if(a)return a}}function d(t,e){for(var r=0;r<t.length;++r){var n=e(t[r]);if(n)return n}}function g(t,e){return t-e}function v(t,e){var r=t[0]-e[0];return r||t[1]-e[1]}function m(t,e){var r=t[1]-e[1];return r||t[0]-e[0]}function y(t){if(0===t.length)return null;for(var e=[],r=0;r<t.length;++r)e.push(t[r][0],t[r][1]);e.sort(g);var n=e[e.length>>1],a=[],i=[],s=[];for(r=0;r<t.length;++r){var l=t[r];l[1]<n?a.push(l):n<l[0]?i.push(l):s.push(l)}var c=s,u=s.slice();return c.sort(v),u.sort(m),new o(n,y(a),y(i),c,u)}function x(t){this.root=t}s.intervals=function(t){return t.push.apply(t,this.leftPoints),this.left&&this.left.intervals(t),this.right&&this.right.intervals(t),t},s.insert=function(t){var e=this.count-this.leftPoints.length;if(this.count+=1,t[1]<this.mid)this.left?4*(this.left.count+1)>3*(e+1)?u(this,t):this.left.insert(t):this.left=y([t]);else if(t[0]>this.mid)this.right?4*(this.right.count+1)>3*(e+1)?u(this,t):this.right.insert(t):this.right=y([t]);else{var r=n.ge(this.leftPoints,t,v),a=n.ge(this.rightPoints,t,m);this.leftPoints.splice(r,0,t),this.rightPoints.splice(a,0,t)}},s.remove=function(t){var e=this.count-this.leftPoints;if(t[1]<this.mid)return this.left?4*(this.right?this.right.count:0)>3*(e-1)?h(this,t):2===(c=this.left.remove(t))?(this.left=null,this.count-=1,i):(c===i&&(this.count-=1),c):a;if(t[0]>this.mid)return this.right?4*(this.left?this.left.count:0)>3*(e-1)?h(this,t):2===(c=this.right.remove(t))?(this.right=null,this.count-=1,i):(c===i&&(this.count-=1),c):a;if(1===this.count)return this.leftPoints[0]===t?2:a;if(1===this.leftPoints.length&&this.leftPoints[0]===t){if(this.left&&this.right){for(var r=this,o=this.left;o.right;)r=o,o=o.right;if(r===this)o.right=this.right;else{var s=this.left,c=this.right;r.count-=o.count,r.right=o.left,o.left=s,o.right=c}l(this,o),this.count=(this.left?this.left.count:0)+(this.right?this.right.count:0)+this.leftPoints.length}else this.left?l(this,this.left):l(this,this.right);return i}for(s=n.ge(this.leftPoints,t,v);s<this.leftPoints.length&&this.leftPoints[s][0]===t[0];++s)if(this.leftPoints[s]===t){this.count-=1,this.leftPoints.splice(s,1);for(c=n.ge(this.rightPoints,t,m);c<this.rightPoints.length&&this.rightPoints[c][1]===t[1];++c)if(this.rightPoints[c]===t)return this.rightPoints.splice(c,1),i}return a},s.queryPoint=function(t,e){if(t<this.mid){if(this.left)if(r=this.left.queryPoint(t,e))return r;return f(this.leftPoints,t,e)}if(t>this.mid){var r;if(this.right)if(r=this.right.queryPoint(t,e))return r;return p(this.rightPoints,t,e)}return d(this.leftPoints,e)},s.queryInterval=function(t,e,r){var n;if(t<this.mid&&this.left&&(n=this.left.queryInterval(t,e,r)))return n;if(e>this.mid&&this.right&&(n=this.right.queryInterval(t,e,r)))return n;return e<this.mid?f(this.leftPoints,e,r):t>this.mid?p(this.rightPoints,t,r):d(this.leftPoints,r)};var b=x.prototype;b.insert=function(t){this.root?this.root.insert(t):this.root=new o(t[0],null,null,[t],[t])},b.remove=function(t){if(this.root){var e=this.root.remove(t);return 2===e&&(this.root=null),e!==a}return!1},b.queryPoint=function(t,e){if(this.root)return this.root.queryPoint(t,e)},b.queryInterval=function(t,e,r){if(t<=e&&this.root)return this.root.queryInterval(t,e,r)},Object.defineProperty(b,"count",{get:function(){return this.root?this.root.count:0}}),Object.defineProperty(b,"intervals",{get:function(){return this.root?this.root.intervals([]):[]}})},{"binary-search-bounds":93}],416:[function(t,e,r){"use strict";e.exports=function(t,e){e=e||new Array(t.length);for(var r=0;r<t.length;++r)e[t[r]]=r;return e}},{}],417:[function(t,e,r){"use strict";e.exports=function(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=r;return e}},{}],418:[function(t,e,r){e.exports=!0},{}],419:[function(t,e,r){function n(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}e.exports=function(t){return null!=t&&(n(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&n(t.slice(0,0))}(t)||!!t._isBuffer)}},{}],420:[function(t,e,r){"use strict";e.exports="undefined"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\//.test(navigator.appVersion))},{}],421:[function(t,e,r){"use strict";e.exports=i,e.exports.isMobile=i,e.exports.default=i;var n=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series[46]0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,a=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series[46]0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|android|ipad|playbook|silk/i;function i(t){t||(t={});var e=t.ua;if(e||"undefined"==typeof navigator||(e=navigator.userAgent),e&&e.headers&&"string"==typeof e.headers["user-agent"]&&(e=e.headers["user-agent"]),"string"!=typeof e)return!1;var r=t.tablet?a.test(e):n.test(e);return!r&&t.tablet&&t.featureDetect&&navigator&&navigator.maxTouchPoints>1&&-1!==e.indexOf("Macintosh")&&-1!==e.indexOf("Safari")&&(r=!0),r}},{}],422:[function(t,e,r){"use strict";e.exports=function(t){var e=typeof t;return null!==t&&("object"===e||"function"===e)}},{}],423:[function(t,e,r){"use strict";var n=Object.prototype.toString;e.exports=function(t){var e;return"[object Object]"===n.call(t)&&(null===(e=Object.getPrototypeOf(t))||e===Object.getPrototypeOf({}))}},{}],424:[function(t,e,r){"use strict";e.exports=function(t){for(var e,r=t.length,n=0;n<r;n++)if(((e=t.charCodeAt(n))<9||e>13)&&32!==e&&133!==e&&160!==e&&5760!==e&&6158!==e&&(e<8192||e>8205)&&8232!==e&&8233!==e&&8239!==e&&8287!==e&&8288!==e&&12288!==e&&65279!==e)return!1;return!0}},{}],425:[function(t,e,r){"use strict";e.exports=function(t){return"string"==typeof t&&(t=t.trim(),!!(/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(t)&&/[\dz]$/i.test(t)&&t.length>4))}},{}],426:[function(t,e,r){e.exports=function(t,e,r){return t*(1-r)+e*r}},{}],427:[function(t,e,r){var n,a;n=this,a=function(){"use strict";var t,e,r;function n(n,a){if(t)if(e){var i="var sharedChunk = {}; ("+t+")(sharedChunk); ("+e+")(sharedChunk);",o={};t(o),(r=a(o)).workerUrl=window.URL.createObjectURL(new Blob([i],{type:"text/javascript"}))}else e=a;else t=a}return n(0,function(t){function e(t,e){return t(e={exports:{}},e.exports),e.exports}var r=n;function n(t,e,r,n){this.cx=3*t,this.bx=3*(r-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(n-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=n,this.p2x=r,this.p2y=n}n.prototype.sampleCurveX=function(t){return((this.ax*t+this.bx)*t+this.cx)*t},n.prototype.sampleCurveY=function(t){return((this.ay*t+this.by)*t+this.cy)*t},n.prototype.sampleCurveDerivativeX=function(t){return(3*this.ax*t+2*this.bx)*t+this.cx},n.prototype.solveCurveX=function(t,e){var r,n,a,i,o;for(void 0===e&&(e=1e-6),a=t,o=0;o<8;o++){if(i=this.sampleCurveX(a)-t,Math.abs(i)<e)return a;var s=this.sampleCurveDerivativeX(a);if(Math.abs(s)<1e-6)break;a-=i/s}if((a=t)<(r=0))return r;if(a>(n=1))return n;for(;r<n;){if(i=this.sampleCurveX(a),Math.abs(i-t)<e)return a;t>i?r=a:n=a,a=.5*(n-r)+r}return a},n.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var a=i;function i(t,e){this.x=t,this.y=e}function o(t,e){if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return!1;for(var r=0;r<t.length;r++)if(!o(t[r],e[r]))return!1;return!0}if("object"==typeof t&&null!==t&&null!==e){if("object"!=typeof e)return!1;if(Object.keys(t).length!==Object.keys(e).length)return!1;for(var n in t)if(!o(t[n],e[n]))return!1;return!0}return t===e}function s(t,e,n,a){var i=new r(t,e,n,a);return function(t){return i.solve(t)}}i.prototype={clone:function(){return new i(this.x,this.y)},add:function(t){return this.clone()._add(t)},sub:function(t){return this.clone()._sub(t)},multByPoint:function(t){return this.clone()._multByPoint(t)},divByPoint:function(t){return this.clone()._divByPoint(t)},mult:function(t){return this.clone()._mult(t)},div:function(t){return this.clone()._div(t)},rotate:function(t){return this.clone()._rotate(t)},rotateAround:function(t,e){return this.clone()._rotateAround(t,e)},matMult:function(t){return this.clone()._matMult(t)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(t){return this.x===t.x&&this.y===t.y},dist:function(t){return Math.sqrt(this.distSqr(t))},distSqr:function(t){var e=t.x-this.x,r=t.y-this.y;return e*e+r*r},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(t){return Math.atan2(this.y-t.y,this.x-t.x)},angleWith:function(t){return this.angleWithSep(t.x,t.y)},angleWithSep:function(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e)},_matMult:function(t){var e=t[0]*this.x+t[1]*this.y,r=t[2]*this.x+t[3]*this.y;return this.x=e,this.y=r,this},_add:function(t){return this.x+=t.x,this.y+=t.y,this},_sub:function(t){return this.x-=t.x,this.y-=t.y,this},_mult:function(t){return this.x*=t,this.y*=t,this},_div:function(t){return this.x/=t,this.y/=t,this},_multByPoint:function(t){return this.x*=t.x,this.y*=t.y,this},_divByPoint:function(t){return this.x/=t.x,this.y/=t.y,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var t=this.y;return this.y=this.x,this.x=-t,this},_rotate:function(t){var e=Math.cos(t),r=Math.sin(t),n=e*this.x-r*this.y,a=r*this.x+e*this.y;return this.x=n,this.y=a,this},_rotateAround:function(t,e){var r=Math.cos(t),n=Math.sin(t),a=e.x+r*(this.x-e.x)-n*(this.y-e.y),i=e.y+n*(this.x-e.x)+r*(this.y-e.y);return this.x=a,this.y=i,this},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},i.convert=function(t){return t instanceof i?t:Array.isArray(t)?new i(t[0],t[1]):t};var l=s(.25,.1,.25,1);function c(t,e,r){return Math.min(r,Math.max(e,t))}function u(t,e,r){var n=r-e,a=((t-e)%n+n)%n+e;return a===e?r:a}function h(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,a=e;n<a.length;n+=1){var i=a[n];for(var o in i)t[o]=i[o]}return t}var f=1;function p(){return f++}function d(){return function t(e){return e?(e^16*Math.random()>>e/4).toString(16):([1e7]+-[1e3]+-4e3+-8e3+-1e11).replace(/[018]/g,t)}()}function g(t){return!!t&&/^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)}function v(t,e){t.forEach(function(t){e[t]&&(e[t]=e[t].bind(e))})}function m(t,e){return-1!==t.indexOf(e,t.length-e.length)}function y(t,e,r){var n={};for(var a in t)n[a]=e.call(r||this,t[a],a,t);return n}function x(t,e,r){var n={};for(var a in t)e.call(r||this,t[a],a,t)&&(n[a]=t[a]);return n}function b(t){return Array.isArray(t)?t.map(b):"object"==typeof t&&t?y(t,b):t}var _={};function w(t){_[t]||("undefined"!=typeof console&&console.warn(t),_[t]=!0)}function k(t,e,r){return(r.y-t.y)*(e.x-t.x)>(e.y-t.y)*(r.x-t.x)}function T(t){for(var e=0,r=0,n=t.length,a=n-1,i=void 0,o=void 0;r<n;a=r++)i=t[r],e+=((o=t[a]).x-i.x)*(i.y+o.y);return e}function M(t){var e={};if(t.replace(/(?:^|(?:\s*\,\s*))([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g,function(t,r,n,a){var i=n||a;return e[r]=!i||i.toLowerCase(),""}),e["max-age"]){var r=parseInt(e["max-age"],10);isNaN(r)?delete e["max-age"]:e["max-age"]=r}return e}function A(t){try{var e=self[t];return e.setItem("_mapbox_test_",1),e.removeItem("_mapbox_test_"),!0}catch(t){return!1}}var S,E,L,C,P=self.performance&&self.performance.now?self.performance.now.bind(self.performance):Date.now.bind(Date),O=self.requestAnimationFrame||self.mozRequestAnimationFrame||self.webkitRequestAnimationFrame||self.msRequestAnimationFrame,z=self.cancelAnimationFrame||self.mozCancelAnimationFrame||self.webkitCancelAnimationFrame||self.msCancelAnimationFrame,I={now:P,frame:function(t){var e=O(t);return{cancel:function(){return z(e)}}},getImageData:function(t){var e=self.document.createElement("canvas"),r=e.getContext("2d");if(!r)throw new Error("failed to create canvas 2d context");return e.width=t.width,e.height=t.height,r.drawImage(t,0,0,t.width,t.height),r.getImageData(0,0,t.width,t.height)},resolveURL:function(t){return S||(S=self.document.createElement("a")),S.href=t,S.href},hardwareConcurrency:self.navigator.hardwareConcurrency||4,get devicePixelRatio(){return self.devicePixelRatio},get prefersReducedMotion(){return!!self.matchMedia&&(null==E&&(E=self.matchMedia("(prefers-reduced-motion: reduce)")),E.matches)}},D={API_URL:"https://api.mapbox.com",get EVENTS_URL(){return this.API_URL?0===this.API_URL.indexOf("https://api.mapbox.cn")?"https://events.mapbox.cn/events/v2":0===this.API_URL.indexOf("https://api.mapbox.com")?"https://events.mapbox.com/events/v2":null:null},FEEDBACK_URL:"https://apps.mapbox.com/feedback",REQUIRE_ACCESS_TOKEN:!0,ACCESS_TOKEN:null,MAX_PARALLEL_IMAGE_REQUESTS:16},R={supported:!1,testSupport:function(t){!F&&C&&(B?N(t):L=t)}},F=!1,B=!1;function N(t){var e=t.createTexture();t.bindTexture(t.TEXTURE_2D,e);try{if(t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,C),t.isContextLost())return;R.supported=!0}catch(t){}t.deleteTexture(e),F=!0}self.document&&((C=self.document.createElement("img")).onload=function(){L&&N(L),L=null,B=!0},C.onerror=function(){F=!0,L=null},C.src="data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA=");var j="01",V=function(t,e){this._transformRequestFn=t,this._customAccessToken=e,this._createSkuToken()};function U(t){return 0===t.indexOf("mapbox:")}V.prototype._createSkuToken=function(){var t=function(){for(var t="",e=0;e<10;e++)t+="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[Math.floor(62*Math.random())];return{token:["1",j,t].join(""),tokenExpiresAt:Date.now()+432e5}}();this._skuToken=t.token,this._skuTokenExpiresAt=t.tokenExpiresAt},V.prototype._isSkuTokenExpired=function(){return Date.now()>this._skuTokenExpiresAt},V.prototype.transformRequest=function(t,e){return this._transformRequestFn&&this._transformRequestFn(t,e)||{url:t}},V.prototype.normalizeStyleURL=function(t,e){if(!U(t))return t;var r=Y(t);return r.path="/styles/v1"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},V.prototype.normalizeGlyphsURL=function(t,e){if(!U(t))return t;var r=Y(t);return r.path="/fonts/v1"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},V.prototype.normalizeSourceURL=function(t,e){if(!U(t))return t;var r=Y(t);return r.path="/v4/"+r.authority+".json",r.params.push("secure"),this._makeAPIURL(r,this._customAccessToken||e)},V.prototype.normalizeSpriteURL=function(t,e,r,n){var a=Y(t);return U(t)?(a.path="/styles/v1"+a.path+"/sprite"+e+r,this._makeAPIURL(a,this._customAccessToken||n)):(a.path+=""+e+r,W(a))},V.prototype.normalizeTileURL=function(t,e,r){if(this._isSkuTokenExpired()&&this._createSkuToken(),!e||!U(e))return t;var n=Y(t),a=I.devicePixelRatio>=2||512===r?"@2x":"",i=R.supported?".webp":"$1";return n.path=n.path.replace(/(\.(png|jpg)\d*)(?=$)/,""+a+i),n.path=n.path.replace(/^.+\/v4\//,"/"),n.path="/v4"+n.path,D.REQUIRE_ACCESS_TOKEN&&(D.ACCESS_TOKEN||this._customAccessToken)&&this._skuToken&&n.params.push("sku="+this._skuToken),this._makeAPIURL(n,this._customAccessToken)},V.prototype.canonicalizeTileURL=function(t){var e=Y(t);if(!e.path.match(/(^\/v4\/)/)||!e.path.match(/\.[\w]+$/))return t;var r="mapbox://tiles/";r+=e.path.replace("/v4/","");var n=e.params.filter(function(t){return!t.match(/^access_token=/)});return n.length&&(r+="?"+n.join("&")),r},V.prototype.canonicalizeTileset=function(t,e){if(!U(e))return t.tiles||[];for(var r=[],n=0,a=t.tiles;n<a.length;n+=1){var i=a[n],o=this.canonicalizeTileURL(i);r.push(o)}return r},V.prototype._makeAPIURL=function(t,e){var r="See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes",n=Y(D.API_URL);if(t.protocol=n.protocol,t.authority=n.authority,"/"!==n.path&&(t.path=""+n.path+t.path),!D.REQUIRE_ACCESS_TOKEN)return W(t);if(!(e=e||D.ACCESS_TOKEN))throw new Error("An API access token is required to use Mapbox GL. "+r);if("s"===e[0])throw new Error("Use a public access token (pk.*) with Mapbox GL, not a secret access token (sk.*). "+r);return t.params=t.params.filter(function(t){return-1===t.indexOf("access_token")}),t.params.push("access_token="+e),W(t)};var q=/^((https?:)?\/\/)?([^\/]+\.)?mapbox\.c(n|om)(\/|\?|$)/i;function H(t){return q.test(t)}var G=/^(\w+):\/\/([^\/?]*)(\/[^?]+)?\??(.+)?/;function Y(t){var e=t.match(G);if(!e)throw new Error("Unable to parse URL object");return{protocol:e[1],authority:e[2],path:e[3]||"/",params:e[4]?e[4].split("&"):[]}}function W(t){var e=t.params.length?"?"+t.params.join("&"):"";return t.protocol+"://"+t.authority+t.path+e}function X(t){if(!t)return null;var e,r=t.split(".");if(!r||3!==r.length)return null;try{return JSON.parse((e=r[1],decodeURIComponent(self.atob(e).split("").map(function(t){return"%"+("00"+t.charCodeAt(0).toString(16)).slice(-2)}).join(""))))}catch(t){return null}}var Z=function(t){this.type=t,this.anonId=null,this.eventData={},this.queue=[],this.pendingRequest=null};Z.prototype.getStorageKey=function(t){var e,r=X(D.ACCESS_TOKEN),n="";return r&&r.u?(e=r.u,n=self.btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,function(t,e){return String.fromCharCode(Number("0x"+e))}))):n=D.ACCESS_TOKEN||"",t?"mapbox.eventData."+t+":"+n:"mapbox.eventData:"+n},Z.prototype.fetchEventData=function(){var t=A("localStorage"),e=this.getStorageKey(),r=this.getStorageKey("uuid");if(t)try{var n=self.localStorage.getItem(e);n&&(this.eventData=JSON.parse(n));var a=self.localStorage.getItem(r);a&&(this.anonId=a)}catch(t){w("Unable to read from LocalStorage")}},Z.prototype.saveEventData=function(){var t=A("localStorage"),e=this.getStorageKey(),r=this.getStorageKey("uuid");if(t)try{self.localStorage.setItem(r,this.anonId),Object.keys(this.eventData).length>=1&&self.localStorage.setItem(e,JSON.stringify(this.eventData))}catch(t){w("Unable to write to LocalStorage")}},Z.prototype.processRequests=function(t){},Z.prototype.postEvent=function(t,e,r,n){var a=this;if(D.EVENTS_URL){var i=Y(D.EVENTS_URL);i.params.push("access_token="+(n||D.ACCESS_TOKEN||""));var o={event:this.type,created:new Date(t).toISOString(),sdkIdentifier:"mapbox-gl-js",sdkVersion:"1.3.2",skuId:j,userId:this.anonId},s=e?h(o,e):o,l={url:W(i),headers:{"Content-Type":"text/plain"},body:JSON.stringify([s])};this.pendingRequest=mt(l,function(t){a.pendingRequest=null,r(t),a.saveEventData(),a.processRequests(n)})}},Z.prototype.queueRequest=function(t,e){this.queue.push(t),this.processRequests(e)};var J,K=function(t){function e(){t.call(this,"map.load"),this.success={},this.skuToken=""}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postMapLoadEvent=function(t,e,r,n){this.skuToken=r,(D.EVENTS_URL&&n||D.ACCESS_TOKEN&&Array.isArray(t)&&t.some(function(t){return U(t)||H(t)}))&&this.queueRequest({id:e,timestamp:Date.now()},n)},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){var r=this.queue.shift(),n=r.id,a=r.timestamp;n&&this.success[n]||(this.anonId||this.fetchEventData(),g(this.anonId)||(this.anonId=d()),this.postEvent(a,{skuToken:this.skuToken},function(t){t||n&&(e.success[n]=!0)},t))}},e}(Z),Q=new(function(t){function e(e){t.call(this,"appUserTurnstile"),this._customAccessToken=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postTurnstileEvent=function(t,e){D.EVENTS_URL&&D.ACCESS_TOKEN&&Array.isArray(t)&&t.some(function(t){return U(t)||H(t)})&&this.queueRequest(Date.now(),e)},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){this.anonId&&this.eventData.lastSuccess&&this.eventData.tokenU||this.fetchEventData();var r=X(D.ACCESS_TOKEN),n=r?r.u:D.ACCESS_TOKEN,a=n!==this.eventData.tokenU;g(this.anonId)||(this.anonId=d(),a=!0);var i=this.queue.shift();if(this.eventData.lastSuccess){var o=new Date(this.eventData.lastSuccess),s=new Date(i),l=(i-this.eventData.lastSuccess)/864e5;a=a||l>=1||l<-1||o.getDate()!==s.getDate()}else a=!0;if(!a)return this.processRequests();this.postEvent(i,{"enabled.telemetry":!1},function(t){t||(e.eventData.lastSuccess=i,e.eventData.tokenU=n)},t)}},e}(Z)),$=Q.postTurnstileEvent.bind(Q),tt=new K,et=tt.postMapLoadEvent.bind(tt),rt="mapbox-tiles",nt=500,at=50,it=42e4;function ot(t){var e=t.indexOf("?");return e<0?t:t.slice(0,e)}var st=1/0,lt={Unknown:"Unknown",Style:"Style",Source:"Source",Tile:"Tile",Glyphs:"Glyphs",SpriteImage:"SpriteImage",SpriteJSON:"SpriteJSON",Image:"Image"};"function"==typeof Object.freeze&&Object.freeze(lt);var ct=function(t){function e(e,r,n){401===r&&H(n)&&(e+=": you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes"),t.call(this,e),this.status=r,this.url=n,this.name=this.constructor.name,this.message=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.toString=function(){return this.name+": "+this.message+" ("+this.status+"): "+this.url},e}(Error);function ut(){return"undefined"!=typeof WorkerGlobalScope&&"undefined"!=typeof self&&self instanceof WorkerGlobalScope}var ht=ut()?function(){return self.worker&&self.worker.referrer}:function(){return("blob:"===self.location.protocol?self.parent:self).location.href};function ft(t,e){var r,n=new self.AbortController,a=new self.Request(t.url,{method:t.method||"GET",body:t.body,credentials:t.credentials,headers:t.headers,referrer:ht(),signal:n.signal}),i=!1,o=!1,s=(r=a.url).indexOf("sku=")>0&&H(r);"json"===t.type&&a.headers.set("Accept","application/json");var l=function(r,n,i){if(!o){if(r&&"SecurityError"!==r.message&&w(r),n&&i)return c(n);var l=Date.now();self.fetch(a).then(function(r){if(r.ok){var n=s?r.clone():null;return c(r,n,l)}return e(new ct(r.statusText,r.status,t.url))}).catch(function(t){20!==t.code&&e(new Error(t.message))})}},c=function(r,n,s){("arrayBuffer"===t.type?r.arrayBuffer():"json"===t.type?r.json():r.text()).then(function(t){o||(n&&s&&function(t,e,r){if(self.caches){var n={status:e.status,statusText:e.statusText,headers:new self.Headers};e.headers.forEach(function(t,e){return n.headers.set(e,t)});var a=M(e.headers.get("Cache-Control")||"");a["no-store"]||(a["max-age"]&&n.headers.set("Expires",new Date(r+1e3*a["max-age"]).toUTCString()),new Date(n.headers.get("Expires")).getTime()-r<it||function(t,e){if(void 0===J)try{new Response(new ReadableStream),J=!0}catch(t){J=!1}J?e(t.body):t.blob().then(e)}(e,function(e){var r=new self.Response(e,n);self.caches.open(rt).then(function(e){return e.put(ot(t.url),r)}).catch(function(t){return w(t.message)})}))}}(a,n,s),i=!0,e(null,t,r.headers.get("Cache-Control"),r.headers.get("Expires")))}).catch(function(t){return e(new Error(t.message))})};return s?function(t,e){if(!self.caches)return e(null);var r=ot(t.url);self.caches.open(rt).then(function(t){t.match(r).then(function(n){var a=function(t){if(!t)return!1;var e=new Date(t.headers.get("Expires")),r=M(t.headers.get("Cache-Control")||"");return e>Date.now()&&!r["no-cache"]}(n);t.delete(r),a&&t.put(r,n.clone()),e(null,n,a)}).catch(e)}).catch(e)}(a,l):l(null,null),{cancel:function(){o=!0,i||n.abort()}}}var pt,dt,gt=function(t,e){if(r=t.url,!(/^file:/.test(r)||/^file:/.test(ht())&&!/^\w+:/.test(r))){if(self.fetch&&self.Request&&self.AbortController&&self.Request.prototype.hasOwnProperty("signal"))return ft(t,e);if(ut()&&self.worker&&self.worker.actor)return self.worker.actor.send("getResource",t,e)}var r;return function(t,e){var r=new self.XMLHttpRequest;for(var n in r.open(t.method||"GET",t.url,!0),"arrayBuffer"===t.type&&(r.responseType="arraybuffer"),t.headers)r.setRequestHeader(n,t.headers[n]);return"json"===t.type&&(r.responseType="text",r.setRequestHeader("Accept","application/json")),r.withCredentials="include"===t.credentials,r.onerror=function(){e(new Error(r.statusText))},r.onload=function(){if((r.status>=200&&r.status<300||0===r.status)&&null!==r.response){var n=r.response;if("json"===t.type)try{n=JSON.parse(r.response)}catch(t){return e(t)}e(null,n,r.getResponseHeader("Cache-Control"),r.getResponseHeader("Expires"))}else e(new ct(r.statusText,r.status,t.url))},r.send(t.body),{cancel:function(){return r.abort()}}}(t,e)},vt=function(t,e){return gt(h(t,{type:"arrayBuffer"}),e)},mt=function(t,e){return gt(h(t,{method:"POST"}),e)};pt=[],dt=0;var yt=function(t,e){if(dt>=D.MAX_PARALLEL_IMAGE_REQUESTS){var r={requestParameters:t,callback:e,cancelled:!1,cancel:function(){this.cancelled=!0}};return pt.push(r),r}dt++;var n=!1,a=function(){if(!n)for(n=!0,dt--;pt.length&&dt<D.MAX_PARALLEL_IMAGE_REQUESTS;){var t=pt.shift(),e=t.requestParameters,r=t.callback;t.cancelled||(t.cancel=yt(e,r).cancel)}},i=vt(t,function(t,r,n,i){if(a(),t)e(t);else if(r){var o=new self.Image,s=self.URL||self.webkitURL;o.onload=function(){e(null,o),s.revokeObjectURL(o.src)},o.onerror=function(){return e(new Error("Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported."))};var l=new self.Blob([new Uint8Array(r)],{type:"image/png"});o.cacheControl=n,o.expires=i,o.src=r.byteLength?s.createObjectURL(l):"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII="}});return{cancel:function(){i.cancel(),a()}}};function xt(t,e,r){r[t]&&-1!==r[t].indexOf(e)||(r[t]=r[t]||[],r[t].push(e))}function bt(t,e,r){if(r&&r[t]){var n=r[t].indexOf(e);-1!==n&&r[t].splice(n,1)}}var _t=function(t,e){void 0===e&&(e={}),h(this,e),this.type=t},wt=function(t){function e(e,r){void 0===r&&(r={}),t.call(this,"error",h({error:e},r))}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(_t),kt=function(){};kt.prototype.on=function(t,e){return this._listeners=this._listeners||{},xt(t,e,this._listeners),this},kt.prototype.off=function(t,e){return bt(t,e,this._listeners),bt(t,e,this._oneTimeListeners),this},kt.prototype.once=function(t,e){return this._oneTimeListeners=this._oneTimeListeners||{},xt(t,e,this._oneTimeListeners),this},kt.prototype.fire=function(t,e){"string"==typeof t&&(t=new _t(t,e||{}));var r=t.type;if(this.listens(r)){t.target=this;for(var n=0,a=this._listeners&&this._listeners[r]?this._listeners[r].slice():[];n<a.length;n+=1)a[n].call(this,t);for(var i=0,o=this._oneTimeListeners&&this._oneTimeListeners[r]?this._oneTimeListeners[r].slice():[];i<o.length;i+=1){var s=o[i];bt(r,s,this._oneTimeListeners),s.call(this,t)}var l=this._eventedParent;l&&(h(t,"function"==typeof this._eventedParentData?this._eventedParentData():this._eventedParentData),l.fire(t))}else t instanceof wt&&console.error(t.error);return this},kt.prototype.listens=function(t){return this._listeners&&this._listeners[t]&&this._listeners[t].length>0||this._oneTimeListeners&&this._oneTimeListeners[t]&&this._oneTimeListeners[t].length>0||this._eventedParent&&this._eventedParent.listens(t)},kt.prototype.setEventedParent=function(t,e){return this._eventedParent=t,this._eventedParentData=e,this};var Tt={$version:8,$root:{version:{required:!0,type:"enum",values:[8]},name:{type:"string"},metadata:{type:"*"},center:{type:"array",value:"number"},zoom:{type:"number"},bearing:{type:"number",default:0,period:360,units:"degrees"},pitch:{type:"number",default:0,units:"degrees"},light:{type:"light"},sources:{required:!0,type:"sources"},sprite:{type:"string"},glyphs:{type:"string"},transition:{type:"transition"},layers:{required:!0,type:"array",value:"layer"}},sources:{"*":{type:"source"}},source:["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],source_vector:{type:{required:!0,type:"enum",values:{vector:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},attribution:{type:"string"},"*":{type:"*"}},source_raster:{type:{required:!0,type:"enum",values:{raster:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},attribution:{type:"string"},"*":{type:"*"}},source_raster_dem:{type:{required:!0,type:"enum",values:{"raster-dem":{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},attribution:{type:"string"},encoding:{type:"enum",values:{terrarium:{},mapbox:{}},default:"mapbox"},"*":{type:"*"}},source_geojson:{type:{required:!0,type:"enum",values:{geojson:{}}},data:{type:"*"},maxzoom:{type:"number",default:18},attribution:{type:"string"},buffer:{type:"number",default:128,maximum:512,minimum:0},tolerance:{type:"number",default:.375},cluster:{type:"boolean",default:!1},clusterRadius:{type:"number",default:50,minimum:0},clusterMaxZoom:{type:"number"},clusterProperties:{type:"*"},lineMetrics:{type:"boolean",default:!1},generateId:{type:"boolean",default:!1}},source_video:{type:{required:!0,type:"enum",values:{video:{}}},urls:{required:!0,type:"array",value:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},source_image:{type:{required:!0,type:"enum",values:{image:{}}},url:{required:!0,type:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},layer:{id:{type:"string",required:!0},type:{type:"enum",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},"fill-extrusion":{},raster:{},hillshade:{},background:{}},required:!0},metadata:{type:"*"},source:{type:"string"},"source-layer":{type:"string"},minzoom:{type:"number",minimum:0,maximum:24},maxzoom:{type:"number",minimum:0,maximum:24},filter:{type:"filter"},layout:{type:"layout"},paint:{type:"paint"}},layout:["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_background"],layout_background:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_fill:{"fill-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_circle:{"circle-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_heatmap:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},"layout_fill-extrusion":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_line:{"line-cap":{type:"enum",values:{butt:{},round:{},square:{}},default:"butt",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-join":{type:"enum",values:{bevel:{},round:{},miter:{}},default:"miter",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{type:"number",default:2,requires:[{"line-join":"miter"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-round-limit":{type:"number",default:1.05,requires:[{"line-join":"round"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_symbol:{"symbol-placement":{type:"enum",values:{point:{},line:{},"line-center":{}},default:"point",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-spacing":{type:"number",default:250,minimum:1,units:"pixels",requires:[{"symbol-placement":"line"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{type:"boolean",default:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"symbol-z-order":{type:"enum",values:{auto:{},"viewport-y":{},source:{}},default:"auto",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-optional":{type:"boolean",default:!1,requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-size":{type:"number",default:1,minimum:0,units:"factor of the original icon size",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit":{type:"enum",values:{none:{},width:{},height:{},both:{}},default:"none",requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",requires:["icon-image","text-field",{"icon-text-fit":["both","width","height"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-image":{type:"string",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-keep-upright":{type:"boolean",default:!1,requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-field":{type:"formatted",default:"",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-font":{type:"array",value:"string",default:["Open Sans Regular","Arial Unicode MS Regular"],requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-size":{type:"number",default:16,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-width":{type:"number",default:10,minimum:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{type:"number",default:1.2,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-letter-spacing":{type:"number",default:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-justify":{type:"enum",values:{auto:{},left:{},center:{},right:{}},default:"center",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-radial-offset":{type:"number",units:"ems",default:0,requires:["text-field"],"property-type":"data-driven",expression:{interpolated:!0,parameters:["zoom","feature"]}},"text-variable-anchor":{type:"array",value:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["text-field",{"!":"text-variable-anchor"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{type:"number",default:45,units:"degrees",requires:["text-field",{"symbol-placement":["line","line-center"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-writing-mode":{type:"array",value:"enum",values:{horizontal:{},vertical:{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-keep-upright":{type:"boolean",default:!0,requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-transform":{type:"enum",values:{none:{},uppercase:{},lowercase:{}},default:"none",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-offset":{type:"array",value:"number",units:"ems",length:2,default:[0,0],requires:["text-field",{"!":"text-radial-offset"},{"!":"text-variable-anchor"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-optional":{type:"boolean",default:!1,requires:["text-field","icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_raster:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_hillshade:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},filter:{type:"array",value:"*"},filter_operator:{type:"enum",values:{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},in:{},"!in":{},all:{},any:{},none:{},has:{},"!has":{}}},geometry_type:{type:"enum",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:"expression"},stops:{type:"array",value:"function_stop"},base:{type:"number",default:1,minimum:0},property:{type:"string",default:"$zoom"},type:{type:"enum",values:{identity:{},exponential:{},interval:{},categorical:{}},default:"exponential"},colorSpace:{type:"enum",values:{rgb:{},lab:{},hcl:{}},default:"rgb"},default:{type:"*",required:!1}},function_stop:{type:"array",minimum:0,maximum:22,value:["number","color"],length:2},expression:{type:"array",value:"*",minimum:1},expression_name:{type:"enum",values:{let:{group:"Variable binding"},var:{group:"Variable binding"},literal:{group:"Types"},array:{group:"Types"},at:{group:"Lookup"},case:{group:"Decision"},match:{group:"Decision"},coalesce:{group:"Decision"},step:{group:"Ramps, scales, curves"},interpolate:{group:"Ramps, scales, curves"},"interpolate-hcl":{group:"Ramps, scales, curves"},"interpolate-lab":{group:"Ramps, scales, curves"},ln2:{group:"Math"},pi:{group:"Math"},e:{group:"Math"},typeof:{group:"Types"},string:{group:"Types"},number:{group:"Types"},boolean:{group:"Types"},object:{group:"Types"},collator:{group:"Types"},format:{group:"Types"},"number-format":{group:"Types"},"to-string":{group:"Types"},"to-number":{group:"Types"},"to-boolean":{group:"Types"},"to-rgba":{group:"Color"},"to-color":{group:"Types"},rgb:{group:"Color"},rgba:{group:"Color"},get:{group:"Lookup"},has:{group:"Lookup"},length:{group:"Lookup"},properties:{group:"Feature data"},"feature-state":{group:"Feature data"},"geometry-type":{group:"Feature data"},id:{group:"Feature data"},zoom:{group:"Zoom"},"heatmap-density":{group:"Heatmap"},"line-progress":{group:"Feature data"},accumulated:{group:"Feature data"},"+":{group:"Math"},"*":{group:"Math"},"-":{group:"Math"},"/":{group:"Math"},"%":{group:"Math"},"^":{group:"Math"},sqrt:{group:"Math"},log10:{group:"Math"},ln:{group:"Math"},log2:{group:"Math"},sin:{group:"Math"},cos:{group:"Math"},tan:{group:"Math"},asin:{group:"Math"},acos:{group:"Math"},atan:{group:"Math"},min:{group:"Math"},max:{group:"Math"},round:{group:"Math"},abs:{group:"Math"},ceil:{group:"Math"},floor:{group:"Math"},"==":{group:"Decision"},"!=":{group:"Decision"},">":{group:"Decision"},"<":{group:"Decision"},">=":{group:"Decision"},"<=":{group:"Decision"},all:{group:"Decision"},any:{group:"Decision"},"!":{group:"Decision"},"is-supported-script":{group:"String"},upcase:{group:"String"},downcase:{group:"String"},concat:{group:"String"},"resolved-locale":{group:"String"}}},light:{anchor:{type:"enum",default:"viewport",values:{map:{},viewport:{}},"property-type":"data-constant",transition:!1,expression:{interpolated:!1,parameters:["zoom"]}},position:{type:"array",default:[1.15,210,30],length:3,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},intensity:{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},paint:["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_background"],paint_fill:{"fill-antialias":{type:"boolean",default:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-outline-color":{type:"color",transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-pattern":{type:"string",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-extrusion-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-extrusion-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{type:"string",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"fill-extrusion-height":{type:"number",default:0,minimum:0,units:"meters",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{type:"number",default:0,minimum:0,units:"meters",transition:!0,requires:["fill-extrusion-height"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-vertical-gradient":{type:"boolean",default:!0,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_line:{"line-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"line-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["line-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-width":{type:"number",default:1,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-gap-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-offset":{type:"number",default:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-dasharray":{type:"array",value:"number",minimum:0,transition:!0,units:"line widths",requires:[{"!":"line-pattern"}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"cross-faded"},"line-pattern":{type:"string",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"line-gradient":{type:"color",transition:!1,requires:[{"!":"line-dasharray"},{"!":"line-pattern"},{source:"geojson",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:["line-progress"]},"property-type":"color-ramp"}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-blur":{type:"number",default:0,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["circle-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{type:"enum",values:{map:{},viewport:{}},default:"map",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"}},paint_heatmap:{"heatmap-radius":{type:"number",default:30,minimum:1,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-weight":{type:"number",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-intensity":{type:"number",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"heatmap-color":{type:"color",default:["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",.1,"royalblue",.3,"cyan",.5,"lime",.7,"yellow",1,"red"],transition:!1,expression:{interpolated:!0,parameters:["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_symbol:{"icon-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-color":{type:"color",default:"#000000",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["icon-image","icon-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-color":{type:"color",default:"#000000",transition:!0,overridable:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["text-field","text-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_raster:{"raster-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-hue-rotate":{type:"number",default:0,period:360,transition:!0,units:"degrees",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{type:"number",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-saturation":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-contrast":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-resampling":{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{type:"number",default:300,minimum:0,transition:!1,units:"milliseconds",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_hillshade:{"hillshade-illumination-direction":{type:"number",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{type:"number",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-highlight-color":{type:"color",default:"#FFFFFF",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-accent-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_background:{"background-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"background-pattern"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"background-pattern":{type:"string",transition:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"cross-faded"},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds"},delay:{type:"number",default:0,minimum:0,units:"milliseconds"}},"property-type":{"data-driven":{type:"property-type"},"cross-faded":{type:"property-type"},"cross-faded-data-driven":{type:"property-type"},"color-ramp":{type:"property-type"},"data-constant":{type:"property-type"},constant:{type:"property-type"}}},Mt=function(t,e,r,n){this.message=(t?t+": ":"")+r,n&&(this.identifier=n),null!=e&&e.__line__&&(this.line=e.__line__)};function At(t){var e=t.key,r=t.value;return r?[new Mt(e,r,"constants have been deprecated as of v8")]:[]}function St(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,a=e;n<a.length;n+=1){var i=a[n];for(var o in i)t[o]=i[o]}return t}function Et(t){return t instanceof Number||t instanceof String||t instanceof Boolean}function Lt(t){return Et(t)?t.valueOf():t}function Ct(t){if(Array.isArray(t))return t.map(Ct);if(t instanceof Object&&!Et(t)){var e={};for(var r in t)e[r]=Ct(t[r]);return e}return Lt(t)}var Pt=function(t){function e(e,r){t.call(this,r),this.message=r,this.key=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error),Ot=function(t,e){void 0===e&&(e=[]),this.parent=t,this.bindings={};for(var r=0,n=e;r<n.length;r+=1){var a=n[r],i=a[0],o=a[1];this.bindings[i]=o}};Ot.prototype.concat=function(t){return new Ot(this,t)},Ot.prototype.get=function(t){if(this.bindings[t])return this.bindings[t];if(this.parent)return this.parent.get(t);throw new Error(t+" not found in scope.")},Ot.prototype.has=function(t){return!!this.bindings[t]||!!this.parent&&this.parent.has(t)};var zt={kind:"null"},It={kind:"number"},Dt={kind:"string"},Rt={kind:"boolean"},Ft={kind:"color"},Bt={kind:"object"},Nt={kind:"value"},jt={kind:"collator"},Vt={kind:"formatted"};function Ut(t,e){return{kind:"array",itemType:t,N:e}}function qt(t){if("array"===t.kind){var e=qt(t.itemType);return"number"==typeof t.N?"array<"+e+", "+t.N+">":"value"===t.itemType.kind?"array":"array<"+e+">"}return t.kind}var Ht=[zt,It,Dt,Rt,Ft,Vt,Bt,Ut(Nt)];function Gt(t,e){if("error"===e.kind)return null;if("array"===t.kind){if("array"===e.kind&&(0===e.N&&"value"===e.itemType.kind||!Gt(t.itemType,e.itemType))&&("number"!=typeof t.N||t.N===e.N))return null}else{if(t.kind===e.kind)return null;if("value"===t.kind)for(var r=0,n=Ht;r<n.length;r+=1)if(!Gt(n[r],e))return null}return"Expected "+qt(t)+" but found "+qt(e)+" instead."}var Yt=e(function(t,e){var r={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function n(t){return(t=Math.round(t))<0?0:t>255?255:t}function a(t){return t<0?0:t>1?1:t}function i(t){return"%"===t[t.length-1]?n(parseFloat(t)/100*255):n(parseInt(t))}function o(t){return"%"===t[t.length-1]?a(parseFloat(t)/100):a(parseFloat(t))}function s(t,e,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?t+(e-t)*r*6:2*r<1?e:3*r<2?t+(e-t)*(2/3-r)*6:t}try{e.parseCSSColor=function(t){var e,a=t.replace(/ /g,"").toLowerCase();if(a in r)return r[a].slice();if("#"===a[0])return 4===a.length?(e=parseInt(a.substr(1),16))>=0&&e<=4095?[(3840&e)>>4|(3840&e)>>8,240&e|(240&e)>>4,15&e|(15&e)<<4,1]:null:7===a.length&&(e=parseInt(a.substr(1),16))>=0&&e<=16777215?[(16711680&e)>>16,(65280&e)>>8,255&e,1]:null;var l=a.indexOf("("),c=a.indexOf(")");if(-1!==l&&c+1===a.length){var u=a.substr(0,l),h=a.substr(l+1,c-(l+1)).split(","),f=1;switch(u){case"rgba":if(4!==h.length)return null;f=o(h.pop());case"rgb":return 3!==h.length?null:[i(h[0]),i(h[1]),i(h[2]),f];case"hsla":if(4!==h.length)return null;f=o(h.pop());case"hsl":if(3!==h.length)return null;var p=(parseFloat(h[0])%360+360)%360/360,d=o(h[1]),g=o(h[2]),v=g<=.5?g*(d+1):g+d-g*d,m=2*g-v;return[n(255*s(m,v,p+1/3)),n(255*s(m,v,p)),n(255*s(m,v,p-1/3)),f];default:return null}}return null}}catch(t){}}).parseCSSColor,Wt=function(t,e,r,n){void 0===n&&(n=1),this.r=t,this.g=e,this.b=r,this.a=n};Wt.parse=function(t){if(t){if(t instanceof Wt)return t;if("string"==typeof t){var e=Yt(t);if(e)return new Wt(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3])}}},Wt.prototype.toString=function(){var t=this.toArray(),e=t[0],r=t[1],n=t[2],a=t[3];return"rgba("+Math.round(e)+","+Math.round(r)+","+Math.round(n)+","+a+")"},Wt.prototype.toArray=function(){var t=this.r,e=this.g,r=this.b,n=this.a;return 0===n?[0,0,0,0]:[255*t/n,255*e/n,255*r/n,n]},Wt.black=new Wt(0,0,0,1),Wt.white=new Wt(1,1,1,1),Wt.transparent=new Wt(0,0,0,0),Wt.red=new Wt(1,0,0,1);var Xt=function(t,e,r){this.sensitivity=t?e?"variant":"case":e?"accent":"base",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:"search"})};Xt.prototype.compare=function(t,e){return this.collator.compare(t,e)},Xt.prototype.resolvedLocale=function(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale};var Zt=function(t,e,r,n){this.text=t,this.scale=e,this.fontStack=r,this.textColor=n},Jt=function(t){this.sections=t};function Kt(t,e,r,n){return"number"==typeof t&&t>=0&&t<=255&&"number"==typeof e&&e>=0&&e<=255&&"number"==typeof r&&r>=0&&r<=255?void 0===n||"number"==typeof n&&n>=0&&n<=1?null:"Invalid rgba value ["+[t,e,r,n].join(", ")+"]: 'a' must be between 0 and 1.":"Invalid rgba value ["+("number"==typeof n?[t,e,r,n]:[t,e,r]).join(", ")+"]: 'r', 'g', and 'b' must be between 0 and 255."}function Qt(t){if(null===t)return zt;if("string"==typeof t)return Dt;if("boolean"==typeof t)return Rt;if("number"==typeof t)return It;if(t instanceof Wt)return Ft;if(t instanceof Xt)return jt;if(t instanceof Jt)return Vt;if(Array.isArray(t)){for(var e,r=t.length,n=0,a=t;n<a.length;n+=1){var i=Qt(a[n]);if(e){if(e===i)continue;e=Nt;break}e=i}return Ut(e||Nt,r)}return Bt}function $t(t){var e=typeof t;return null===t?"":"string"===e||"number"===e||"boolean"===e?String(t):t instanceof Wt||t instanceof Jt?t.toString():JSON.stringify(t)}Jt.fromString=function(t){return new Jt([new Zt(t,null,null,null)])},Jt.prototype.toString=function(){return this.sections.map(function(t){return t.text}).join("")},Jt.prototype.serialize=function(){for(var t=["format"],e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t.push(n.text);var a={};n.fontStack&&(a["text-font"]=["literal",n.fontStack.split(",")]),n.scale&&(a["font-scale"]=n.scale),n.textColor&&(a["text-color"]=["rgba"].concat(n.textColor.toArray())),t.push(a)}return t};var te=function(t,e){this.type=t,this.value=e};te.parse=function(t,e){if(2!==t.length)return e.error("'literal' expression requires exactly one argument, but found "+(t.length-1)+" instead.");if(!function t(e){if(null===e)return!0;if("string"==typeof e)return!0;if("boolean"==typeof e)return!0;if("number"==typeof e)return!0;if(e instanceof Wt)return!0;if(e instanceof Xt)return!0;if(e instanceof Jt)return!0;if(Array.isArray(e)){for(var r=0,n=e;r<n.length;r+=1)if(!t(n[r]))return!1;return!0}if("object"==typeof e){for(var a in e)if(!t(e[a]))return!1;return!0}return!1}(t[1]))return e.error("invalid value");var r=t[1],n=Qt(r),a=e.expectedType;return"array"!==n.kind||0!==n.N||!a||"array"!==a.kind||"number"==typeof a.N&&0!==a.N||(n=a),new te(n,r)},te.prototype.evaluate=function(){return this.value},te.prototype.eachChild=function(){},te.prototype.possibleOutputs=function(){return[this.value]},te.prototype.serialize=function(){return"array"===this.type.kind||"object"===this.type.kind?["literal",this.value]:this.value instanceof Wt?["rgba"].concat(this.value.toArray()):this.value instanceof Jt?this.value.serialize():this.value};var ee=function(t){this.name="ExpressionEvaluationError",this.message=t};ee.prototype.toJSON=function(){return this.message};var re={string:Dt,number:It,boolean:Rt,object:Bt},ne=function(t,e){this.type=t,this.args=e};ne.parse=function(t,e){if(t.length<2)return e.error("Expected at least one argument.");var r,n=1,a=t[0];if("array"===a){var i,o;if(t.length>2){var s=t[1];if("string"!=typeof s||!(s in re)||"object"===s)return e.error('The item type argument of "array" must be one of string, number, boolean',1);i=re[s],n++}else i=Nt;if(t.length>3){if(null!==t[2]&&("number"!=typeof t[2]||t[2]<0||t[2]!==Math.floor(t[2])))return e.error('The length argument to "array" must be a positive integer literal',2);o=t[2],n++}r=Ut(i,o)}else r=re[a];for(var l=[];n<t.length;n++){var c=e.parse(t[n],n,Nt);if(!c)return null;l.push(c)}return new ne(r,l)},ne.prototype.evaluate=function(t){for(var e=0;e<this.args.length;e++){var r=this.args[e].evaluate(t);if(!Gt(this.type,Qt(r)))return r;if(e===this.args.length-1)throw new ee("Expected value to be of type "+qt(this.type)+", but found "+qt(Qt(r))+" instead.")}return null},ne.prototype.eachChild=function(t){this.args.forEach(t)},ne.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.args.map(function(t){return t.possibleOutputs()}))},ne.prototype.serialize=function(){var t=this.type,e=[t.kind];if("array"===t.kind){var r=t.itemType;if("string"===r.kind||"number"===r.kind||"boolean"===r.kind){e.push(r.kind);var n=t.N;("number"==typeof n||this.args.length>1)&&e.push(n)}}return e.concat(this.args.map(function(t){return t.serialize()}))};var ae=function(t){this.type=Vt,this.sections=t};ae.parse=function(t,e){if(t.length<3)return e.error("Expected at least two arguments.");if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");for(var r=[],n=1;n<t.length-1;n+=2){var a=e.parse(t[n],1,Nt);if(!a)return null;var i=a.type.kind;if("string"!==i&&"value"!==i&&"null"!==i)return e.error("Formatted text type must be 'string', 'value', or 'null'.");var o=t[n+1];if("object"!=typeof o||Array.isArray(o))return e.error("Format options argument must be an object.");var s=null;if(o["font-scale"]&&!(s=e.parse(o["font-scale"],1,It)))return null;var l=null;if(o["text-font"]&&!(l=e.parse(o["text-font"],1,Ut(Dt))))return null;var c=null;if(o["text-color"]&&!(c=e.parse(o["text-color"],1,Ft)))return null;r.push({text:a,scale:s,font:l,textColor:c})}return new ae(r)},ae.prototype.evaluate=function(t){return new Jt(this.sections.map(function(e){return new Zt($t(e.text.evaluate(t)),e.scale?e.scale.evaluate(t):null,e.font?e.font.evaluate(t).join(","):null,e.textColor?e.textColor.evaluate(t):null)}))},ae.prototype.eachChild=function(t){for(var e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t(n.text),n.scale&&t(n.scale),n.font&&t(n.font),n.textColor&&t(n.textColor)}},ae.prototype.possibleOutputs=function(){return[void 0]},ae.prototype.serialize=function(){for(var t=["format"],e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t.push(n.text.serialize());var a={};n.scale&&(a["font-scale"]=n.scale.serialize()),n.font&&(a["text-font"]=n.font.serialize()),n.textColor&&(a["text-color"]=n.textColor.serialize()),t.push(a)}return t};var ie={"to-boolean":Rt,"to-color":Ft,"to-number":It,"to-string":Dt},oe=function(t,e){this.type=t,this.args=e};oe.parse=function(t,e){if(t.length<2)return e.error("Expected at least one argument.");var r=t[0];if(("to-boolean"===r||"to-string"===r)&&2!==t.length)return e.error("Expected one argument.");for(var n=ie[r],a=[],i=1;i<t.length;i++){var o=e.parse(t[i],i,Nt);if(!o)return null;a.push(o)}return new oe(n,a)},oe.prototype.evaluate=function(t){if("boolean"===this.type.kind)return Boolean(this.args[0].evaluate(t));if("color"===this.type.kind){for(var e,r,n=0,a=this.args;n<a.length;n+=1){if(r=null,(e=a[n].evaluate(t))instanceof Wt)return e;if("string"==typeof e){var i=t.parseColor(e);if(i)return i}else if(Array.isArray(e)&&!(r=e.length<3||e.length>4?"Invalid rbga value "+JSON.stringify(e)+": expected an array containing either three or four numeric values.":Kt(e[0],e[1],e[2],e[3])))return new Wt(e[0]/255,e[1]/255,e[2]/255,e[3])}throw new ee(r||"Could not parse color from value '"+("string"==typeof e?e:String(JSON.stringify(e)))+"'")}if("number"===this.type.kind){for(var o=null,s=0,l=this.args;s<l.length;s+=1){if(null===(o=l[s].evaluate(t)))return 0;var c=Number(o);if(!isNaN(c))return c}throw new ee("Could not convert "+JSON.stringify(o)+" to number.")}return"formatted"===this.type.kind?Jt.fromString($t(this.args[0].evaluate(t))):$t(this.args[0].evaluate(t))},oe.prototype.eachChild=function(t){this.args.forEach(t)},oe.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.args.map(function(t){return t.possibleOutputs()}))},oe.prototype.serialize=function(){if("formatted"===this.type.kind)return new ae([{text:this.args[0],scale:null,font:null,textColor:null}]).serialize();var t=["to-"+this.type.kind];return this.eachChild(function(e){t.push(e.serialize())}),t};var se=["Unknown","Point","LineString","Polygon"],le=function(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache={}};le.prototype.id=function(){return this.feature&&"id"in this.feature?this.feature.id:null},le.prototype.geometryType=function(){return this.feature?"number"==typeof this.feature.type?se[this.feature.type]:this.feature.type:null},le.prototype.properties=function(){return this.feature&&this.feature.properties||{}},le.prototype.parseColor=function(t){var e=this._parseColorCache[t];return e||(e=this._parseColorCache[t]=Wt.parse(t)),e};var ce=function(t,e,r,n){this.name=t,this.type=e,this._evaluate=r,this.args=n};ce.prototype.evaluate=function(t){return this._evaluate(t,this.args)},ce.prototype.eachChild=function(t){this.args.forEach(t)},ce.prototype.possibleOutputs=function(){return[void 0]},ce.prototype.serialize=function(){return[this.name].concat(this.args.map(function(t){return t.serialize()}))},ce.parse=function(t,e){var r,n=t[0],a=ce.definitions[n];if(!a)return e.error('Unknown expression "'+n+'". If you wanted a literal array, use ["literal", [...]].',0);for(var i=Array.isArray(a)?a[0]:a.type,o=Array.isArray(a)?[[a[1],a[2]]]:a.overloads,s=o.filter(function(e){var r=e[0];return!Array.isArray(r)||r.length===t.length-1}),l=null,c=0,u=s;c<u.length;c+=1){var h=u[c],f=h[0],p=h[1];l=new ge(e.registry,e.path,null,e.scope);for(var d=[],g=!1,v=1;v<t.length;v++){var m=t[v],y=Array.isArray(f)?f[v-1]:f.type,x=l.parse(m,1+d.length,y);if(!x){g=!0;break}d.push(x)}if(!g)if(Array.isArray(f)&&f.length!==d.length)l.error("Expected "+f.length+" arguments, but found "+d.length+" instead.");else{for(var b=0;b<d.length;b++){var _=Array.isArray(f)?f[b]:f.type,w=d[b];l.concat(b+1).checkSubtype(_,w.type)}if(0===l.errors.length)return new ce(n,i,p,d)}}if(1===s.length)(r=e.errors).push.apply(r,l.errors);else{for(var k=(s.length?s:o).map(function(t){var e;return e=t[0],Array.isArray(e)?"("+e.map(qt).join(", ")+")":"("+qt(e.type)+"...)"}).join(" | "),T=[],M=1;M<t.length;M++){var A=e.parse(t[M],1+T.length);if(!A)return null;T.push(qt(A.type))}e.error("Expected arguments of type "+k+", but found ("+T.join(", ")+") instead.")}return null},ce.register=function(t,e){for(var r in ce.definitions=e,e)t[r]=ce};var ue=function(t,e,r){this.type=jt,this.locale=r,this.caseSensitive=t,this.diacriticSensitive=e};function he(t){if(t instanceof ce){if("get"===t.name&&1===t.args.length)return!1;if("feature-state"===t.name)return!1;if("has"===t.name&&1===t.args.length)return!1;if("properties"===t.name||"geometry-type"===t.name||"id"===t.name)return!1;if(/^filter-/.test(t.name))return!1}var e=!0;return t.eachChild(function(t){e&&!he(t)&&(e=!1)}),e}function fe(t){if(t instanceof ce&&"feature-state"===t.name)return!1;var e=!0;return t.eachChild(function(t){e&&!fe(t)&&(e=!1)}),e}function pe(t,e){if(t instanceof ce&&e.indexOf(t.name)>=0)return!1;var r=!0;return t.eachChild(function(t){r&&!pe(t,e)&&(r=!1)}),r}ue.parse=function(t,e){if(2!==t.length)return e.error("Expected one argument.");var r=t[1];if("object"!=typeof r||Array.isArray(r))return e.error("Collator options argument must be an object.");var n=e.parse(void 0!==r["case-sensitive"]&&r["case-sensitive"],1,Rt);if(!n)return null;var a=e.parse(void 0!==r["diacritic-sensitive"]&&r["diacritic-sensitive"],1,Rt);if(!a)return null;var i=null;return r.locale&&!(i=e.parse(r.locale,1,Dt))?null:new ue(n,a,i)},ue.prototype.evaluate=function(t){return new Xt(this.caseSensitive.evaluate(t),this.diacriticSensitive.evaluate(t),this.locale?this.locale.evaluate(t):null)},ue.prototype.eachChild=function(t){t(this.caseSensitive),t(this.diacriticSensitive),this.locale&&t(this.locale)},ue.prototype.possibleOutputs=function(){return[void 0]},ue.prototype.serialize=function(){var t={};return t["case-sensitive"]=this.caseSensitive.serialize(),t["diacritic-sensitive"]=this.diacriticSensitive.serialize(),this.locale&&(t.locale=this.locale.serialize()),["collator",t]};var de=function(t,e){this.type=e.type,this.name=t,this.boundExpression=e};de.parse=function(t,e){if(2!==t.length||"string"!=typeof t[1])return e.error("'var' expression requires exactly one string literal argument.");var r=t[1];return e.scope.has(r)?new de(r,e.scope.get(r)):e.error('Unknown variable "'+r+'". Make sure "'+r+'" has been bound in an enclosing "let" expression before using it.',1)},de.prototype.evaluate=function(t){return this.boundExpression.evaluate(t)},de.prototype.eachChild=function(){},de.prototype.possibleOutputs=function(){return[void 0]},de.prototype.serialize=function(){return["var",this.name]};var ge=function(t,e,r,n,a){void 0===e&&(e=[]),void 0===n&&(n=new Ot),void 0===a&&(a=[]),this.registry=t,this.path=e,this.key=e.map(function(t){return"["+t+"]"}).join(""),this.scope=n,this.errors=a,this.expectedType=r};function ve(t,e){for(var r,n,a=t.length-1,i=0,o=a,s=0;i<=o;)if(r=t[s=Math.floor((i+o)/2)],n=t[s+1],r<=e){if(s===a||e<n)return s;i=s+1}else{if(!(r>e))throw new ee("Input is not a number.");o=s-1}return 0}ge.prototype.parse=function(t,e,r,n,a){return void 0===a&&(a={}),e?this.concat(e,r,n)._parse(t,a):this._parse(t,a)},ge.prototype._parse=function(t,e){function r(t,e,r){return"assert"===r?new ne(e,[t]):"coerce"===r?new oe(e,[t]):t}if(null!==t&&"string"!=typeof t&&"boolean"!=typeof t&&"number"!=typeof t||(t=["literal",t]),Array.isArray(t)){if(0===t.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');var n=t[0];if("string"!=typeof n)return this.error("Expression name must be a string, but found "+typeof n+' instead. If you wanted a literal array, use ["literal", [...]].',0),null;var a=this.registry[n];if(a){var i=a.parse(t,this);if(!i)return null;if(this.expectedType){var o=this.expectedType,s=i.type;if("string"!==o.kind&&"number"!==o.kind&&"boolean"!==o.kind&&"object"!==o.kind&&"array"!==o.kind||"value"!==s.kind)if("color"!==o.kind&&"formatted"!==o.kind||"value"!==s.kind&&"string"!==s.kind){if(this.checkSubtype(o,s))return null}else i=r(i,o,e.typeAnnotation||"coerce");else i=r(i,o,e.typeAnnotation||"assert")}if(!(i instanceof te)&&function t(e){if(e instanceof de)return t(e.boundExpression);if(e instanceof ce&&"error"===e.name)return!1;if(e instanceof ue)return!1;var r=e instanceof oe||e instanceof ne,n=!0;return e.eachChild(function(e){n=r?n&&t(e):n&&e instanceof te}),!!n&&(he(e)&&pe(e,["zoom","heatmap-density","line-progress","accumulated","is-supported-script"]))}(i)){var l=new le;try{i=new te(i.type,i.evaluate(l))}catch(t){return this.error(t.message),null}}return i}return this.error('Unknown expression "'+n+'". If you wanted a literal array, use ["literal", [...]].',0)}return void 0===t?this.error("'undefined' value invalid. Use null instead."):"object"==typeof t?this.error('Bare objects invalid. Use ["literal", {...}] instead.'):this.error("Expected an array, but found "+typeof t+" instead.")},ge.prototype.concat=function(t,e,r){var n="number"==typeof t?this.path.concat(t):this.path,a=r?this.scope.concat(r):this.scope;return new ge(this.registry,n,e||null,a,this.errors)},ge.prototype.error=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];var n=""+this.key+e.map(function(t){return"["+t+"]"}).join("");this.errors.push(new Pt(n,t))},ge.prototype.checkSubtype=function(t,e){var r=Gt(t,e);return r&&this.error(r),r};var me=function(t,e,r){this.type=t,this.input=e,this.labels=[],this.outputs=[];for(var n=0,a=r;n<a.length;n+=1){var i=a[n],o=i[0],s=i[1];this.labels.push(o),this.outputs.push(s)}};function ye(t,e,r){return t*(1-r)+e*r}me.parse=function(t,e){if(t.length-1<4)return e.error("Expected at least 4 arguments, but found only "+(t.length-1)+".");if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");var r=e.parse(t[1],1,It);if(!r)return null;var n=[],a=null;e.expectedType&&"value"!==e.expectedType.kind&&(a=e.expectedType);for(var i=1;i<t.length;i+=2){var o=1===i?-1/0:t[i],s=t[i+1],l=i,c=i+1;if("number"!=typeof o)return e.error('Input/output pairs for "step" expressions must be defined using literal numeric values (not computed expressions) for the input values.',l);if(n.length&&n[n.length-1][0]>=o)return e.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.',l);var u=e.parse(s,c,a);if(!u)return null;a=a||u.type,n.push([o,u])}return new me(a,r,n)},me.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var a=e.length;return n>=e[a-1]?r[a-1].evaluate(t):r[ve(e,n)].evaluate(t)},me.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e<r.length;e+=1)t(r[e])},me.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.outputs.map(function(t){return t.possibleOutputs()}))},me.prototype.serialize=function(){for(var t=["step",this.input.serialize()],e=0;e<this.labels.length;e++)e>0&&t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t};var xe=Object.freeze({number:ye,color:function(t,e,r){return new Wt(ye(t.r,e.r,r),ye(t.g,e.g,r),ye(t.b,e.b,r),ye(t.a,e.a,r))},array:function(t,e,r){return t.map(function(t,n){return ye(t,e[n],r)})}}),be=.95047,_e=1,we=1.08883,ke=4/29,Te=6/29,Me=3*Te*Te,Ae=Te*Te*Te,Se=Math.PI/180,Ee=180/Math.PI;function Le(t){return t>Ae?Math.pow(t,1/3):t/Me+ke}function Ce(t){return t>Te?t*t*t:Me*(t-ke)}function Pe(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Oe(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function ze(t){var e=Oe(t.r),r=Oe(t.g),n=Oe(t.b),a=Le((.4124564*e+.3575761*r+.1804375*n)/be),i=Le((.2126729*e+.7151522*r+.072175*n)/_e);return{l:116*i-16,a:500*(a-i),b:200*(i-Le((.0193339*e+.119192*r+.9503041*n)/we)),alpha:t.a}}function Ie(t){var e=(t.l+16)/116,r=isNaN(t.a)?e:e+t.a/500,n=isNaN(t.b)?e:e-t.b/200;return e=_e*Ce(e),r=be*Ce(r),n=we*Ce(n),new Wt(Pe(3.2404542*r-1.5371385*e-.4985314*n),Pe(-.969266*r+1.8760108*e+.041556*n),Pe(.0556434*r-.2040259*e+1.0572252*n),t.alpha)}function De(t,e,r){var n=e-t;return t+r*(n>180||n<-180?n-360*Math.round(n/360):n)}var Re={forward:ze,reverse:Ie,interpolate:function(t,e,r){return{l:ye(t.l,e.l,r),a:ye(t.a,e.a,r),b:ye(t.b,e.b,r),alpha:ye(t.alpha,e.alpha,r)}}},Fe={forward:function(t){var e=ze(t),r=e.l,n=e.a,a=e.b,i=Math.atan2(a,n)*Ee;return{h:i<0?i+360:i,c:Math.sqrt(n*n+a*a),l:r,alpha:t.a}},reverse:function(t){var e=t.h*Se,r=t.c;return Ie({l:t.l,a:Math.cos(e)*r,b:Math.sin(e)*r,alpha:t.alpha})},interpolate:function(t,e,r){return{h:De(t.h,e.h,r),c:ye(t.c,e.c,r),l:ye(t.l,e.l,r),alpha:ye(t.alpha,e.alpha,r)}}},Be=Object.freeze({lab:Re,hcl:Fe}),Ne=function(t,e,r,n,a){this.type=t,this.operator=e,this.interpolation=r,this.input=n,this.labels=[],this.outputs=[];for(var i=0,o=a;i<o.length;i+=1){var s=o[i],l=s[0],c=s[1];this.labels.push(l),this.outputs.push(c)}};function je(t,e,r,n){var a=n-r,i=t-r;return 0===a?0:1===e?i/a:(Math.pow(e,i)-1)/(Math.pow(e,a)-1)}Ne.interpolationFactor=function(t,e,n,a){var i=0;if("exponential"===t.name)i=je(e,t.base,n,a);else if("linear"===t.name)i=je(e,1,n,a);else if("cubic-bezier"===t.name){var o=t.controlPoints;i=new r(o[0],o[1],o[2],o[3]).solve(je(e,1,n,a))}return i},Ne.parse=function(t,e){var r=t[0],n=t[1],a=t[2],i=t.slice(3);if(!Array.isArray(n)||0===n.length)return e.error("Expected an interpolation type expression.",1);if("linear"===n[0])n={name:"linear"};else if("exponential"===n[0]){var o=n[1];if("number"!=typeof o)return e.error("Exponential interpolation requires a numeric base.",1,1);n={name:"exponential",base:o}}else{if("cubic-bezier"!==n[0])return e.error("Unknown interpolation type "+String(n[0]),1,0);var s=n.slice(1);if(4!==s.length||s.some(function(t){return"number"!=typeof t||t<0||t>1}))return e.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.",1);n={name:"cubic-bezier",controlPoints:s}}if(t.length-1<4)return e.error("Expected at least 4 arguments, but found only "+(t.length-1)+".");if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");if(!(a=e.parse(a,2,It)))return null;var l=[],c=null;"interpolate-hcl"===r||"interpolate-lab"===r?c=Ft:e.expectedType&&"value"!==e.expectedType.kind&&(c=e.expectedType);for(var u=0;u<i.length;u+=2){var h=i[u],f=i[u+1],p=u+3,d=u+4;if("number"!=typeof h)return e.error('Input/output pairs for "interpolate" expressions must be defined using literal numeric values (not computed expressions) for the input values.',p);if(l.length&&l[l.length-1][0]>=h)return e.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.',p);var g=e.parse(f,d,c);if(!g)return null;c=c||g.type,l.push([h,g])}return"number"===c.kind||"color"===c.kind||"array"===c.kind&&"number"===c.itemType.kind&&"number"==typeof c.N?new Ne(c,r,n,a,l):e.error("Type "+qt(c)+" is not interpolatable.")},Ne.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var a=e.length;if(n>=e[a-1])return r[a-1].evaluate(t);var i=ve(e,n),o=e[i],s=e[i+1],l=Ne.interpolationFactor(this.interpolation,n,o,s),c=r[i].evaluate(t),u=r[i+1].evaluate(t);return"interpolate"===this.operator?xe[this.type.kind.toLowerCase()](c,u,l):"interpolate-hcl"===this.operator?Fe.reverse(Fe.interpolate(Fe.forward(c),Fe.forward(u),l)):Re.reverse(Re.interpolate(Re.forward(c),Re.forward(u),l))},Ne.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e<r.length;e+=1)t(r[e])},Ne.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.outputs.map(function(t){return t.possibleOutputs()}))},Ne.prototype.serialize=function(){var t;t="linear"===this.interpolation.name?["linear"]:"exponential"===this.interpolation.name?1===this.interpolation.base?["linear"]:["exponential",this.interpolation.base]:["cubic-bezier"].concat(this.interpolation.controlPoints);for(var e=[this.operator,t,this.input.serialize()],r=0;r<this.labels.length;r++)e.push(this.labels[r],this.outputs[r].serialize());return e};var Ve=function(t,e){this.type=t,this.args=e};Ve.parse=function(t,e){if(t.length<2)return e.error("Expectected at least one argument.");var r=null,n=e.expectedType;n&&"value"!==n.kind&&(r=n);for(var a=[],i=0,o=t.slice(1);i<o.length;i+=1){var s=o[i],l=e.parse(s,1+a.length,r,void 0,{typeAnnotation:"omit"});if(!l)return null;r=r||l.type,a.push(l)}var c=n&&a.some(function(t){return Gt(n,t.type)});return new Ve(c?Nt:r,a)},Ve.prototype.evaluate=function(t){for(var e=null,r=0,n=this.args;r<n.length&&null===(e=n[r].evaluate(t));r+=1);return e},Ve.prototype.eachChild=function(t){this.args.forEach(t)},Ve.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.args.map(function(t){return t.possibleOutputs()}))},Ve.prototype.serialize=function(){var t=["coalesce"];return this.eachChild(function(e){t.push(e.serialize())}),t};var Ue=function(t,e){this.type=e.type,this.bindings=[].concat(t),this.result=e};Ue.prototype.evaluate=function(t){return this.result.evaluate(t)},Ue.prototype.eachChild=function(t){for(var e=0,r=this.bindings;e<r.length;e+=1)t(r[e][1]);t(this.result)},Ue.parse=function(t,e){if(t.length<4)return e.error("Expected at least 3 arguments, but found "+(t.length-1)+" instead.");for(var r=[],n=1;n<t.length-1;n+=2){var a=t[n];if("string"!=typeof a)return e.error("Expected string, but found "+typeof a+" instead.",n);if(/[^a-zA-Z0-9_]/.test(a))return e.error("Variable names must contain only alphanumeric characters or '_'.",n);var i=e.parse(t[n+1],n+1);if(!i)return null;r.push([a,i])}var o=e.parse(t[t.length-1],t.length-1,e.expectedType,r);return o?new Ue(r,o):null},Ue.prototype.possibleOutputs=function(){return this.result.possibleOutputs()},Ue.prototype.serialize=function(){for(var t=["let"],e=0,r=this.bindings;e<r.length;e+=1){var n=r[e],a=n[0],i=n[1];t.push(a,i.serialize())}return t.push(this.result.serialize()),t};var qe=function(t,e,r){this.type=t,this.index=e,this.input=r};qe.parse=function(t,e){if(3!==t.length)return e.error("Expected 2 arguments, but found "+(t.length-1)+" instead.");var r=e.parse(t[1],1,It),n=e.parse(t[2],2,Ut(e.expectedType||Nt));if(!r||!n)return null;var a=n.type;return new qe(a.itemType,r,n)},qe.prototype.evaluate=function(t){var e=this.index.evaluate(t),r=this.input.evaluate(t);if(e<0)throw new ee("Array index out of bounds: "+e+" < 0.");if(e>=r.length)throw new ee("Array index out of bounds: "+e+" > "+(r.length-1)+".");if(e!==Math.floor(e))throw new ee("Array index must be an integer, but found "+e+" instead.");return r[e]},qe.prototype.eachChild=function(t){t(this.index),t(this.input)},qe.prototype.possibleOutputs=function(){return[void 0]},qe.prototype.serialize=function(){return["at",this.index.serialize(),this.input.serialize()]};var He=function(t,e,r,n,a,i){this.inputType=t,this.type=e,this.input=r,this.cases=n,this.outputs=a,this.otherwise=i};He.parse=function(t,e){if(t.length<5)return e.error("Expected at least 4 arguments, but found only "+(t.length-1)+".");if(t.length%2!=1)return e.error("Expected an even number of arguments.");var r,n;e.expectedType&&"value"!==e.expectedType.kind&&(n=e.expectedType);for(var a={},i=[],o=2;o<t.length-1;o+=2){var s=t[o],l=t[o+1];Array.isArray(s)||(s=[s]);var c=e.concat(o);if(0===s.length)return c.error("Expected at least one branch label.");for(var u=0,h=s;u<h.length;u+=1){var f=h[u];if("number"!=typeof f&&"string"!=typeof f)return c.error("Branch labels must be numbers or strings.");if("number"==typeof f&&Math.abs(f)>Number.MAX_SAFE_INTEGER)return c.error("Branch labels must be integers no larger than "+Number.MAX_SAFE_INTEGER+".");if("number"==typeof f&&Math.floor(f)!==f)return c.error("Numeric branch labels must be integer values.");if(r){if(c.checkSubtype(r,Qt(f)))return null}else r=Qt(f);if(void 0!==a[String(f)])return c.error("Branch labels must be unique.");a[String(f)]=i.length}var p=e.parse(l,o,n);if(!p)return null;n=n||p.type,i.push(p)}var d=e.parse(t[1],1,Nt);if(!d)return null;var g=e.parse(t[t.length-1],t.length-1,n);return g?"value"!==d.type.kind&&e.concat(1).checkSubtype(r,d.type)?null:new He(r,n,d,a,i,g):null},He.prototype.evaluate=function(t){var e=this.input.evaluate(t);return(Qt(e)===this.inputType&&this.outputs[this.cases[e]]||this.otherwise).evaluate(t)},He.prototype.eachChild=function(t){t(this.input),this.outputs.forEach(t),t(this.otherwise)},He.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.outputs.map(function(t){return t.possibleOutputs()})).concat(this.otherwise.possibleOutputs())},He.prototype.serialize=function(){for(var t=this,e=["match",this.input.serialize()],r=[],n={},a=0,i=Object.keys(this.cases).sort();a<i.length;a+=1){var o=i[a];void 0===(h=n[this.cases[o]])?(n[this.cases[o]]=r.length,r.push([this.cases[o],[o]])):r[h][1].push(o)}for(var s=function(e){return"number"===t.inputType.kind?Number(e):e},l=0,c=r;l<c.length;l+=1){var u=c[l],h=u[0],f=u[1];1===f.length?e.push(s(f[0])):e.push(f.map(s)),e.push(this.outputs[outputIndex$1].serialize())}return e.push(this.otherwise.serialize()),e};var Ge=function(t,e,r){this.type=t,this.branches=e,this.otherwise=r};function Ye(t,e){return"=="===t||"!="===t?"boolean"===e.kind||"string"===e.kind||"number"===e.kind||"null"===e.kind||"value"===e.kind:"string"===e.kind||"number"===e.kind||"value"===e.kind}function We(t,e,r,n){return 0===n.compare(e,r)}function Xe(t,e,r){var n="=="!==t&&"!="!==t;return function(){function a(t,e,r){this.type=Rt,this.lhs=t,this.rhs=e,this.collator=r,this.hasUntypedArgument="value"===t.type.kind||"value"===e.type.kind}return a.parse=function(t,e){if(3!==t.length&&4!==t.length)return e.error("Expected two or three arguments.");var r=t[0],i=e.parse(t[1],1,Nt);if(!i)return null;if(!Ye(r,i.type))return e.concat(1).error('"'+r+"\" comparisons are not supported for type '"+qt(i.type)+"'.");var o=e.parse(t[2],2,Nt);if(!o)return null;if(!Ye(r,o.type))return e.concat(2).error('"'+r+"\" comparisons are not supported for type '"+qt(o.type)+"'.");if(i.type.kind!==o.type.kind&&"value"!==i.type.kind&&"value"!==o.type.kind)return e.error("Cannot compare types '"+qt(i.type)+"' and '"+qt(o.type)+"'.");n&&("value"===i.type.kind&&"value"!==o.type.kind?i=new ne(o.type,[i]):"value"!==i.type.kind&&"value"===o.type.kind&&(o=new ne(i.type,[o])));var s=null;if(4===t.length){if("string"!==i.type.kind&&"string"!==o.type.kind&&"value"!==i.type.kind&&"value"!==o.type.kind)return e.error("Cannot use collator to compare non-string types.");if(!(s=e.parse(t[3],3,jt)))return null}return new a(i,o,s)},a.prototype.evaluate=function(a){var i=this.lhs.evaluate(a),o=this.rhs.evaluate(a);if(n&&this.hasUntypedArgument){var s=Qt(i),l=Qt(o);if(s.kind!==l.kind||"string"!==s.kind&&"number"!==s.kind)throw new ee('Expected arguments for "'+t+'" to be (string, string) or (number, number), but found ('+s.kind+", "+l.kind+") instead.")}if(this.collator&&!n&&this.hasUntypedArgument){var c=Qt(i),u=Qt(o);if("string"!==c.kind||"string"!==u.kind)return e(a,i,o)}return this.collator?r(a,i,o,this.collator.evaluate(a)):e(a,i,o)},a.prototype.eachChild=function(t){t(this.lhs),t(this.rhs),this.collator&&t(this.collator)},a.prototype.possibleOutputs=function(){return[!0,!1]},a.prototype.serialize=function(){var e=[t];return this.eachChild(function(t){e.push(t.serialize())}),e},a}()}Ge.parse=function(t,e){if(t.length<4)return e.error("Expected at least 3 arguments, but found only "+(t.length-1)+".");if(t.length%2!=0)return e.error("Expected an odd number of arguments.");var r;e.expectedType&&"value"!==e.expectedType.kind&&(r=e.expectedType);for(var n=[],a=1;a<t.length-1;a+=2){var i=e.parse(t[a],a,Rt);if(!i)return null;var o=e.parse(t[a+1],a+1,r);if(!o)return null;n.push([i,o]),r=r||o.type}var s=e.parse(t[t.length-1],t.length-1,r);return s?new Ge(r,n,s):null},Ge.prototype.evaluate=function(t){for(var e=0,r=this.branches;e<r.length;e+=1){var n=r[e],a=n[0],i=n[1];if(a.evaluate(t))return i.evaluate(t)}return this.otherwise.evaluate(t)},Ge.prototype.eachChild=function(t){for(var e=0,r=this.branches;e<r.length;e+=1){var n=r[e],a=n[0],i=n[1];t(a),t(i)}t(this.otherwise)},Ge.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.branches.map(function(t){return t[0],t[1].possibleOutputs()})).concat(this.otherwise.possibleOutputs())},Ge.prototype.serialize=function(){var t=["case"];return this.eachChild(function(e){t.push(e.serialize())}),t};var Ze=Xe("==",function(t,e,r){return e===r},We),Je=Xe("!=",function(t,e,r){return e!==r},function(t,e,r,n){return!We(0,e,r,n)}),Ke=Xe("<",function(t,e,r){return e<r},function(t,e,r,n){return n.compare(e,r)<0}),Qe=Xe(">",function(t,e,r){return e>r},function(t,e,r,n){return n.compare(e,r)>0}),$e=Xe("<=",function(t,e,r){return e<=r},function(t,e,r,n){return n.compare(e,r)<=0}),tr=Xe(">=",function(t,e,r){return e>=r},function(t,e,r,n){return n.compare(e,r)>=0}),er=function(t,e,r,n,a){this.type=Dt,this.number=t,this.locale=e,this.currency=r,this.minFractionDigits=n,this.maxFractionDigits=a};er.parse=function(t,e){if(3!==t.length)return e.error("Expected two arguments.");var r=e.parse(t[1],1,It);if(!r)return null;var n=t[2];if("object"!=typeof n||Array.isArray(n))return e.error("NumberFormat options argument must be an object.");var a=null;if(n.locale&&!(a=e.parse(n.locale,1,Dt)))return null;var i=null;if(n.currency&&!(i=e.parse(n.currency,1,Dt)))return null;var o=null;if(n["min-fraction-digits"]&&!(o=e.parse(n["min-fraction-digits"],1,It)))return null;var s=null;return n["max-fraction-digits"]&&!(s=e.parse(n["max-fraction-digits"],1,It))?null:new er(r,a,i,o,s)},er.prototype.evaluate=function(t){return new Intl.NumberFormat(this.locale?this.locale.evaluate(t):[],{style:this.currency?"currency":"decimal",currency:this.currency?this.currency.evaluate(t):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(t):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(t):void 0}).format(this.number.evaluate(t))},er.prototype.eachChild=function(t){t(this.number),this.locale&&t(this.locale),this.currency&&t(this.currency),this.minFractionDigits&&t(this.minFractionDigits),this.maxFractionDigits&&t(this.maxFractionDigits)},er.prototype.possibleOutputs=function(){return[void 0]},er.prototype.serialize=function(){var t={};return this.locale&&(t.locale=this.locale.serialize()),this.currency&&(t.currency=this.currency.serialize()),this.minFractionDigits&&(t["min-fraction-digits"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(t["max-fraction-digits"]=this.maxFractionDigits.serialize()),["number-format",this.number.serialize(),t]};var rr=function(t){this.type=It,this.input=t};rr.parse=function(t,e){if(2!==t.length)return e.error("Expected 1 argument, but found "+(t.length-1)+" instead.");var r=e.parse(t[1],1);return r?"array"!==r.type.kind&&"string"!==r.type.kind&&"value"!==r.type.kind?e.error("Expected argument of type string or array, but found "+qt(r.type)+" instead."):new rr(r):null},rr.prototype.evaluate=function(t){var e=this.input.evaluate(t);if("string"==typeof e)return e.length;if(Array.isArray(e))return e.length;throw new ee("Expected value to be of type string or array, but found "+qt(Qt(e))+" instead.")},rr.prototype.eachChild=function(t){t(this.input)},rr.prototype.possibleOutputs=function(){return[void 0]},rr.prototype.serialize=function(){var t=["length"];return this.eachChild(function(e){t.push(e.serialize())}),t};var nr={"==":Ze,"!=":Je,">":Qe,"<":Ke,">=":tr,"<=":$e,array:ne,at:qe,boolean:ne,case:Ge,coalesce:Ve,collator:ue,format:ae,interpolate:Ne,"interpolate-hcl":Ne,"interpolate-lab":Ne,length:rr,let:Ue,literal:te,match:He,number:ne,"number-format":er,object:ne,step:me,string:ne,"to-boolean":oe,"to-color":oe,"to-number":oe,"to-string":oe,var:de};function ar(t,e){var r=e[0],n=e[1],a=e[2],i=e[3];r=r.evaluate(t),n=n.evaluate(t),a=a.evaluate(t);var o=i?i.evaluate(t):1,s=Kt(r,n,a,o);if(s)throw new ee(s);return new Wt(r/255*o,n/255*o,a/255*o,o)}function ir(t,e){return t in e}function or(t,e){var r=e[t];return void 0===r?null:r}function sr(t){return{type:t}}function lr(t){return{result:"success",value:t}}function cr(t){return{result:"error",value:t}}function ur(t){return"data-driven"===t["property-type"]||"cross-faded-data-driven"===t["property-type"]}function hr(t){return!!t.expression&&t.expression.parameters.indexOf("zoom")>-1}function fr(t){return!!t.expression&&t.expression.interpolated}function pr(t){return t instanceof Number?"number":t instanceof String?"string":t instanceof Boolean?"boolean":Array.isArray(t)?"array":null===t?"null":typeof t}function dr(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function gr(t){return t}function vr(t,e,r){return void 0!==t?t:void 0!==e?e:void 0!==r?r:void 0}function mr(t,e,r,n,a){return vr(typeof r===a?n[r]:void 0,t.default,e.default)}function yr(t,e,r){if("number"!==pr(r))return vr(t.default,e.default);var n=t.stops.length;if(1===n)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[n-1][0])return t.stops[n-1][1];var a=ve(t.stops.map(function(t){return t[0]}),r);return t.stops[a][1]}function xr(t,e,r){var n=void 0!==t.base?t.base:1;if("number"!==pr(r))return vr(t.default,e.default);var a=t.stops.length;if(1===a)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[a-1][0])return t.stops[a-1][1];var i=ve(t.stops.map(function(t){return t[0]}),r),o=function(t,e,r,n){var a=n-r,i=t-r;return 0===a?0:1===e?i/a:(Math.pow(e,i)-1)/(Math.pow(e,a)-1)}(r,n,t.stops[i][0],t.stops[i+1][0]),s=t.stops[i][1],l=t.stops[i+1][1],c=xe[e.type]||gr;if(t.colorSpace&&"rgb"!==t.colorSpace){var u=Be[t.colorSpace];c=function(t,e){return u.reverse(u.interpolate(u.forward(t),u.forward(e),o))}}return"function"==typeof s.evaluate?{evaluate:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var r=s.evaluate.apply(void 0,t),n=l.evaluate.apply(void 0,t);if(void 0!==r&&void 0!==n)return c(r,n,o)}}:c(s,l,o)}function br(t,e,r){return"color"===e.type?r=Wt.parse(r):"formatted"===e.type?r=Jt.fromString(r.toString()):pr(r)===e.type||"enum"===e.type&&e.values[r]||(r=void 0),vr(r,t.default,e.default)}ce.register(nr,{error:[{kind:"error"},[Dt],function(t,e){var r=e[0];throw new ee(r.evaluate(t))}],typeof:[Dt,[Nt],function(t,e){return qt(Qt(e[0].evaluate(t)))}],"to-rgba":[Ut(It,4),[Ft],function(t,e){return e[0].evaluate(t).toArray()}],rgb:[Ft,[It,It,It],ar],rgba:[Ft,[It,It,It,It],ar],has:{type:Rt,overloads:[[[Dt],function(t,e){return ir(e[0].evaluate(t),t.properties())}],[[Dt,Bt],function(t,e){var r=e[0],n=e[1];return ir(r.evaluate(t),n.evaluate(t))}]]},get:{type:Nt,overloads:[[[Dt],function(t,e){return or(e[0].evaluate(t),t.properties())}],[[Dt,Bt],function(t,e){var r=e[0],n=e[1];return or(r.evaluate(t),n.evaluate(t))}]]},"feature-state":[Nt,[Dt],function(t,e){return or(e[0].evaluate(t),t.featureState||{})}],properties:[Bt,[],function(t){return t.properties()}],"geometry-type":[Dt,[],function(t){return t.geometryType()}],id:[Nt,[],function(t){return t.id()}],zoom:[It,[],function(t){return t.globals.zoom}],"heatmap-density":[It,[],function(t){return t.globals.heatmapDensity||0}],"line-progress":[It,[],function(t){return t.globals.lineProgress||0}],accumulated:[Nt,[],function(t){return void 0===t.globals.accumulated?null:t.globals.accumulated}],"+":[It,sr(It),function(t,e){for(var r=0,n=0,a=e;n<a.length;n+=1)r+=a[n].evaluate(t);return r}],"*":[It,sr(It),function(t,e){for(var r=1,n=0,a=e;n<a.length;n+=1)r*=a[n].evaluate(t);return r}],"-":{type:It,overloads:[[[It,It],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)-n.evaluate(t)}],[[It],function(t,e){return-e[0].evaluate(t)}]]},"/":[It,[It,It],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)/n.evaluate(t)}],"%":[It,[It,It],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)%n.evaluate(t)}],ln2:[It,[],function(){return Math.LN2}],pi:[It,[],function(){return Math.PI}],e:[It,[],function(){return Math.E}],"^":[It,[It,It],function(t,e){var r=e[0],n=e[1];return Math.pow(r.evaluate(t),n.evaluate(t))}],sqrt:[It,[It],function(t,e){var r=e[0];return Math.sqrt(r.evaluate(t))}],log10:[It,[It],function(t,e){var r=e[0];return Math.log(r.evaluate(t))/Math.LN10}],ln:[It,[It],function(t,e){var r=e[0];return Math.log(r.evaluate(t))}],log2:[It,[It],function(t,e){var r=e[0];return Math.log(r.evaluate(t))/Math.LN2}],sin:[It,[It],function(t,e){var r=e[0];return Math.sin(r.evaluate(t))}],cos:[It,[It],function(t,e){var r=e[0];return Math.cos(r.evaluate(t))}],tan:[It,[It],function(t,e){var r=e[0];return Math.tan(r.evaluate(t))}],asin:[It,[It],function(t,e){var r=e[0];return Math.asin(r.evaluate(t))}],acos:[It,[It],function(t,e){var r=e[0];return Math.acos(r.evaluate(t))}],atan:[It,[It],function(t,e){var r=e[0];return Math.atan(r.evaluate(t))}],min:[It,sr(It),function(t,e){return Math.min.apply(Math,e.map(function(e){return e.evaluate(t)}))}],max:[It,sr(It),function(t,e){return Math.max.apply(Math,e.map(function(e){return e.evaluate(t)}))}],abs:[It,[It],function(t,e){var r=e[0];return Math.abs(r.evaluate(t))}],round:[It,[It],function(t,e){var r=e[0].evaluate(t);return r<0?-Math.round(-r):Math.round(r)}],floor:[It,[It],function(t,e){var r=e[0];return Math.floor(r.evaluate(t))}],ceil:[It,[It],function(t,e){var r=e[0];return Math.ceil(r.evaluate(t))}],"filter-==":[Rt,[Dt,Nt],function(t,e){var r=e[0],n=e[1];return t.properties()[r.value]===n.value}],"filter-id-==":[Rt,[Nt],function(t,e){var r=e[0];return t.id()===r.value}],"filter-type-==":[Rt,[Dt],function(t,e){var r=e[0];return t.geometryType()===r.value}],"filter-<":[Rt,[Dt,Nt],function(t,e){var r=e[0],n=e[1],a=t.properties()[r.value],i=n.value;return typeof a==typeof i&&a<i}],"filter-id-<":[Rt,[Nt],function(t,e){var r=e[0],n=t.id(),a=r.value;return typeof n==typeof a&&n<a}],"filter->":[Rt,[Dt,Nt],function(t,e){var r=e[0],n=e[1],a=t.properties()[r.value],i=n.value;return typeof a==typeof i&&a>i}],"filter-id->":[Rt,[Nt],function(t,e){var r=e[0],n=t.id(),a=r.value;return typeof n==typeof a&&n>a}],"filter-<=":[Rt,[Dt,Nt],function(t,e){var r=e[0],n=e[1],a=t.properties()[r.value],i=n.value;return typeof a==typeof i&&a<=i}],"filter-id-<=":[Rt,[Nt],function(t,e){var r=e[0],n=t.id(),a=r.value;return typeof n==typeof a&&n<=a}],"filter->=":[Rt,[Dt,Nt],function(t,e){var r=e[0],n=e[1],a=t.properties()[r.value],i=n.value;return typeof a==typeof i&&a>=i}],"filter-id->=":[Rt,[Nt],function(t,e){var r=e[0],n=t.id(),a=r.value;return typeof n==typeof a&&n>=a}],"filter-has":[Rt,[Nt],function(t,e){return e[0].value in t.properties()}],"filter-has-id":[Rt,[],function(t){return null!==t.id()}],"filter-type-in":[Rt,[Ut(Dt)],function(t,e){return e[0].value.indexOf(t.geometryType())>=0}],"filter-id-in":[Rt,[Ut(Nt)],function(t,e){return e[0].value.indexOf(t.id())>=0}],"filter-in-small":[Rt,[Dt,Ut(Nt)],function(t,e){var r=e[0];return e[1].value.indexOf(t.properties()[r.value])>=0}],"filter-in-large":[Rt,[Dt,Ut(Nt)],function(t,e){var r=e[0],n=e[1];return function(t,e,r,n){for(;r<=n;){var a=r+n>>1;if(e[a]===t)return!0;e[a]>t?n=a-1:r=a+1}return!1}(t.properties()[r.value],n.value,0,n.value.length-1)}],all:{type:Rt,overloads:[[[Rt,Rt],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)&&n.evaluate(t)}],[sr(Rt),function(t,e){for(var r=0,n=e;r<n.length;r+=1)if(!n[r].evaluate(t))return!1;return!0}]]},any:{type:Rt,overloads:[[[Rt,Rt],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)||n.evaluate(t)}],[sr(Rt),function(t,e){for(var r=0,n=e;r<n.length;r+=1)if(n[r].evaluate(t))return!0;return!1}]]},"!":[Rt,[Rt],function(t,e){return!e[0].evaluate(t)}],"is-supported-script":[Rt,[Dt],function(t,e){var r=e[0],n=t.globals&&t.globals.isSupportedScript;return!n||n(r.evaluate(t))}],upcase:[Dt,[Dt],function(t,e){return e[0].evaluate(t).toUpperCase()}],downcase:[Dt,[Dt],function(t,e){return e[0].evaluate(t).toLowerCase()}],concat:[Dt,sr(Nt),function(t,e){return e.map(function(e){return $t(e.evaluate(t))}).join("")}],"resolved-locale":[Dt,[jt],function(t,e){return e[0].evaluate(t).resolvedLocale()}]});var _r=function(t,e){this.expression=t,this._warningHistory={},this._evaluator=new le,this._defaultValue=e?function(t){return"color"===t.type&&dr(t.default)?new Wt(0,0,0,0):"color"===t.type?Wt.parse(t.default)||null:void 0===t.default?null:t.default}(e):null,this._enumValues=e&&"enum"===e.type?e.values:null};function wr(t){return Array.isArray(t)&&t.length>0&&"string"==typeof t[0]&&t[0]in nr}function kr(t,e){var r=new ge(nr,[],e?function(t){var e={color:Ft,string:Dt,number:It,enum:Dt,boolean:Rt,formatted:Vt};return"array"===t.type?Ut(e[t.value]||Nt,t.length):e[t.type]}(e):void 0),n=r.parse(t,void 0,void 0,void 0,e&&"string"===e.type?{typeAnnotation:"coerce"}:void 0);return n?lr(new _r(n,e)):cr(r.errors)}_r.prototype.evaluateWithoutErrorHandling=function(t,e,r,n){return this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=r,this._evaluator.formattedSection=n,this.expression.evaluate(this._evaluator)},_r.prototype.evaluate=function(t,e,r,n){this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=r||null,this._evaluator.formattedSection=n||null;try{var a=this.expression.evaluate(this._evaluator);if(null==a)return this._defaultValue;if(this._enumValues&&!(a in this._enumValues))throw new ee("Expected value to be one of "+Object.keys(this._enumValues).map(function(t){return JSON.stringify(t)}).join(", ")+", but found "+JSON.stringify(a)+" instead.");return a}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]=!0,"undefined"!=typeof console&&console.warn(t.message)),this._defaultValue}};var Tr=function(t,e){this.kind=t,this._styleExpression=e,this.isStateDependent="constant"!==t&&!fe(e.expression)};Tr.prototype.evaluateWithoutErrorHandling=function(t,e,r,n){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n)},Tr.prototype.evaluate=function(t,e,r,n){return this._styleExpression.evaluate(t,e,r,n)};var Mr=function(t,e,r,n){this.kind=t,this.zoomStops=r,this._styleExpression=e,this.isStateDependent="camera"!==t&&!fe(e.expression),this.interpolationType=n};function Ar(t,e){if("error"===(t=kr(t,e)).result)return t;var r=t.value.expression,n=he(r);if(!n&&!ur(e))return cr([new Pt("","data expressions not supported")]);var a=pe(r,["zoom"]);if(!a&&!hr(e))return cr([new Pt("","zoom expressions not supported")]);var i=function t(e){var r=null;if(e instanceof Ue)r=t(e.result);else if(e instanceof Ve)for(var n=0,a=e.args;n<a.length;n+=1){var i=a[n];if(r=t(i))break}else(e instanceof me||e instanceof Ne)&&e.input instanceof ce&&"zoom"===e.input.name&&(r=e);return r instanceof Pt?r:(e.eachChild(function(e){var n=t(e);n instanceof Pt?r=n:!r&&n?r=new Pt("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.'):r&&n&&r!==n&&(r=new Pt("",'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.'))}),r)}(r);if(!i&&!a)return cr([new Pt("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.')]);if(i instanceof Pt)return cr([i]);if(i instanceof Ne&&!fr(e))return cr([new Pt("",'"interpolate" expressions cannot be used with this property')]);if(!i)return lr(new Tr(n?"constant":"source",t.value));var o=i instanceof Ne?i.interpolation:void 0;return lr(new Mr(n?"camera":"composite",t.value,i.labels,o))}Mr.prototype.evaluateWithoutErrorHandling=function(t,e,r,n){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n)},Mr.prototype.evaluate=function(t,e,r,n){return this._styleExpression.evaluate(t,e,r,n)},Mr.prototype.interpolationFactor=function(t,e,r){return this.interpolationType?Ne.interpolationFactor(this.interpolationType,t,e,r):0};var Sr=function(t,e){this._parameters=t,this._specification=e,St(this,function t(e,r){var n,a,i,o="color"===r.type,s=e.stops&&"object"==typeof e.stops[0][0],l=s||void 0!==e.property,c=s||!l,u=e.type||(fr(r)?"exponential":"interval");if(o&&((e=St({},e)).stops&&(e.stops=e.stops.map(function(t){return[t[0],Wt.parse(t[1])]})),e.default?e.default=Wt.parse(e.default):e.default=Wt.parse(r.default)),e.colorSpace&&"rgb"!==e.colorSpace&&!Be[e.colorSpace])throw new Error("Unknown color space: "+e.colorSpace);if("exponential"===u)n=xr;else if("interval"===u)n=yr;else if("categorical"===u){n=mr,a=Object.create(null);for(var h=0,f=e.stops;h<f.length;h+=1){var p=f[h];a[p[0]]=p[1]}i=typeof e.stops[0][0]}else{if("identity"!==u)throw new Error('Unknown function type "'+u+'"');n=br}if(s){for(var d={},g=[],v=0;v<e.stops.length;v++){var m=e.stops[v],y=m[0].zoom;void 0===d[y]&&(d[y]={zoom:y,type:e.type,property:e.property,default:e.default,stops:[]},g.push(y)),d[y].stops.push([m[0].value,m[1]])}for(var x=[],b=0,_=g;b<_.length;b+=1){var w=_[b];x.push([d[w].zoom,t(d[w],r)])}var k={name:"linear"};return{kind:"composite",interpolationType:k,interpolationFactor:Ne.interpolationFactor.bind(void 0,k),zoomStops:x.map(function(t){return t[0]}),evaluate:function(t,n){var a=t.zoom;return xr({stops:x,base:e.base},r,a).evaluate(a,n)}}}if(c){var T="exponential"===u?{name:"exponential",base:void 0!==e.base?e.base:1}:null;return{kind:"camera",interpolationType:T,interpolationFactor:Ne.interpolationFactor.bind(void 0,T),zoomStops:e.stops.map(function(t){return t[0]}),evaluate:function(t){var o=t.zoom;return n(e,r,o,a,i)}}}return{kind:"source",evaluate:function(t,o){var s=o&&o.properties?o.properties[e.property]:void 0;return void 0===s?vr(e.default,r.default):n(e,r,s,a,i)}}}(this._parameters,this._specification))};function Er(t){var e=t.key,r=t.value,n=t.valueSpec||{},a=t.objectElementValidators||{},i=t.style,o=t.styleSpec,s=[],l=pr(r);if("object"!==l)return[new Mt(e,r,"object expected, "+l+" found")];for(var c in r){var u=c.split(".")[0],h=n[u]||n["*"],f=void 0;if(a[u])f=a[u];else if(n[u])f=Qr;else if(a["*"])f=a["*"];else{if(!n["*"]){s.push(new Mt(e,r[c],'unknown property "'+c+'"'));continue}f=Qr}s=s.concat(f({key:(e?e+".":e)+c,value:r[c],valueSpec:h,style:i,styleSpec:o,object:r,objectKey:c},r))}for(var p in n)a[p]||n[p].required&&void 0===n[p].default&&void 0===r[p]&&s.push(new Mt(e,r,'missing required property "'+p+'"'));return s}function Lr(t){var e=t.value,r=t.valueSpec,n=t.style,a=t.styleSpec,i=t.key,o=t.arrayElementValidator||Qr;if("array"!==pr(e))return[new Mt(i,e,"array expected, "+pr(e)+" found")];if(r.length&&e.length!==r.length)return[new Mt(i,e,"array length "+r.length+" expected, length "+e.length+" found")];if(r["min-length"]&&e.length<r["min-length"])return[new Mt(i,e,"array length at least "+r["min-length"]+" expected, length "+e.length+" found")];var s={type:r.value,values:r.values};a.$version<7&&(s.function=r.function),"object"===pr(r.value)&&(s=r.value);for(var l=[],c=0;c<e.length;c++)l=l.concat(o({array:e,arrayIndex:c,value:e[c],valueSpec:s,style:n,styleSpec:a,key:i+"["+c+"]"}));return l}function Cr(t){var e=t.key,r=t.value,n=t.valueSpec,a=pr(r);return"number"!==a?[new Mt(e,r,"number expected, "+a+" found")]:"minimum"in n&&r<n.minimum?[new Mt(e,r,r+" is less than the minimum value "+n.minimum)]:"maximum"in n&&r>n.maximum?[new Mt(e,r,r+" is greater than the maximum value "+n.maximum)]:[]}function Pr(t){var e,r,n,a=t.valueSpec,i=Lt(t.value.type),o={},s="categorical"!==i&&void 0===t.value.property,l=!s,c="array"===pr(t.value.stops)&&"array"===pr(t.value.stops[0])&&"object"===pr(t.value.stops[0][0]),u=Er({key:t.key,value:t.value,valueSpec:t.styleSpec.function,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:function(t){if("identity"===i)return[new Mt(t.key,t.value,'identity function may not have a "stops" property')];var e=[],r=t.value;return e=e.concat(Lr({key:t.key,value:r,valueSpec:t.valueSpec,style:t.style,styleSpec:t.styleSpec,arrayElementValidator:h})),"array"===pr(r)&&0===r.length&&e.push(new Mt(t.key,r,"array must have at least one stop")),e},default:function(t){return Qr({key:t.key,value:t.value,valueSpec:a,style:t.style,styleSpec:t.styleSpec})}}});return"identity"===i&&s&&u.push(new Mt(t.key,t.value,'missing required property "property"')),"identity"===i||t.value.stops||u.push(new Mt(t.key,t.value,'missing required property "stops"')),"exponential"===i&&t.valueSpec.expression&&!fr(t.valueSpec)&&u.push(new Mt(t.key,t.value,"exponential functions not supported")),t.styleSpec.$version>=8&&(l&&!ur(t.valueSpec)?u.push(new Mt(t.key,t.value,"property functions not supported")):s&&!hr(t.valueSpec)&&u.push(new Mt(t.key,t.value,"zoom functions not supported"))),"categorical"!==i&&!c||void 0!==t.value.property||u.push(new Mt(t.key,t.value,'"property" property is required')),u;function h(t){var e=[],i=t.value,s=t.key;if("array"!==pr(i))return[new Mt(s,i,"array expected, "+pr(i)+" found")];if(2!==i.length)return[new Mt(s,i,"array length 2 expected, length "+i.length+" found")];if(c){if("object"!==pr(i[0]))return[new Mt(s,i,"object expected, "+pr(i[0])+" found")];if(void 0===i[0].zoom)return[new Mt(s,i,"object stop key must have zoom")];if(void 0===i[0].value)return[new Mt(s,i,"object stop key must have value")];if(n&&n>Lt(i[0].zoom))return[new Mt(s,i[0].zoom,"stop zoom values must appear in ascending order")];Lt(i[0].zoom)!==n&&(n=Lt(i[0].zoom),r=void 0,o={}),e=e.concat(Er({key:s+"[0]",value:i[0],valueSpec:{zoom:{}},style:t.style,styleSpec:t.styleSpec,objectElementValidators:{zoom:Cr,value:f}}))}else e=e.concat(f({key:s+"[0]",value:i[0],valueSpec:{},style:t.style,styleSpec:t.styleSpec},i));return wr(Ct(i[1]))?e.concat([new Mt(s+"[1]",i[1],"expressions are not allowed in function stops.")]):e.concat(Qr({key:s+"[1]",value:i[1],valueSpec:a,style:t.style,styleSpec:t.styleSpec}))}function f(t,n){var s=pr(t.value),l=Lt(t.value),c=null!==t.value?t.value:n;if(e){if(s!==e)return[new Mt(t.key,c,s+" stop domain type must match previous stop domain type "+e)]}else e=s;if("number"!==s&&"string"!==s&&"boolean"!==s)return[new Mt(t.key,c,"stop domain value must be a number, string, or boolean")];if("number"!==s&&"categorical"!==i){var u="number expected, "+s+" found";return ur(a)&&void 0===i&&(u+='\nIf you intended to use a categorical function, specify `"type": "categorical"`.'),[new Mt(t.key,c,u)]}return"categorical"!==i||"number"!==s||isFinite(l)&&Math.floor(l)===l?"categorical"!==i&&"number"===s&&void 0!==r&&l<r?[new Mt(t.key,c,"stop domain values must appear in ascending order")]:(r=l,"categorical"===i&&l in o?[new Mt(t.key,c,"stop domain values must be unique")]:(o[l]=!0,[])):[new Mt(t.key,c,"integer expected, found "+l)]}}function Or(t){var e=("property"===t.expressionContext?Ar:kr)(Ct(t.value),t.valueSpec);if("error"===e.result)return e.value.map(function(e){return new Mt(""+t.key+e.key,t.value,e.message)});var r=e.value.expression||e.value._styleExpression.expression;if("property"===t.expressionContext&&"text-font"===t.propertyKey&&-1!==r.possibleOutputs().indexOf(void 0))return[new Mt(t.key,t.value,'Invalid data expression for "'+t.propertyKey+'". Output values must be contained as literals within the expression.')];if("property"===t.expressionContext&&"layout"===t.propertyType&&!fe(r))return[new Mt(t.key,t.value,'"feature-state" data expressions are not supported with layout properties.')];if("filter"===t.expressionContext&&!fe(r))return[new Mt(t.key,t.value,'"feature-state" data expressions are not supported with filters.')];if(t.expressionContext&&0===t.expressionContext.indexOf("cluster")){if(!pe(r,["zoom","feature-state"]))return[new Mt(t.key,t.value,'"zoom" and "feature-state" expressions are not supported with cluster properties.')];if("cluster-initial"===t.expressionContext&&!he(r))return[new Mt(t.key,t.value,"Feature data expressions are not supported with initial expression part of cluster properties.")]}return[]}function zr(t){var e=t.key,r=t.value,n=t.valueSpec,a=[];return Array.isArray(n.values)?-1===n.values.indexOf(Lt(r))&&a.push(new Mt(e,r,"expected one of ["+n.values.join(", ")+"], "+JSON.stringify(r)+" found")):-1===Object.keys(n.values).indexOf(Lt(r))&&a.push(new Mt(e,r,"expected one of ["+Object.keys(n.values).join(", ")+"], "+JSON.stringify(r)+" found")),a}function Ir(t){if(!0===t||!1===t)return!0;if(!Array.isArray(t)||0===t.length)return!1;switch(t[0]){case"has":return t.length>=2&&"$id"!==t[1]&&"$type"!==t[1];case"in":case"!in":case"!has":case"none":return!1;case"==":case"!=":case">":case">=":case"<":case"<=":return 3!==t.length||Array.isArray(t[1])||Array.isArray(t[2]);case"any":case"all":for(var e=0,r=t.slice(1);e<r.length;e+=1){var n=r[e];if(!Ir(n)&&"boolean"!=typeof n)return!1}return!0;default:return!0}}Sr.deserialize=function(t){return new Sr(t._parameters,t._specification)},Sr.serialize=function(t){return{_parameters:t._parameters,_specification:t._specification}};var Dr={type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}};function Rr(t){if(null==t)return function(){return!0};Ir(t)||(t=Br(t));var e=kr(t,Dr);if("error"===e.result)throw new Error(e.value.map(function(t){return t.key+": "+t.message}).join(", "));return function(t,r){return e.value.evaluate(t,r)}}function Fr(t,e){return t<e?-1:t>e?1:0}function Br(t){if(!t)return!0;var e,r=t[0];return t.length<=1?"any"!==r:"=="===r?Nr(t[1],t[2],"=="):"!="===r?Ur(Nr(t[1],t[2],"==")):"<"===r||">"===r||"<="===r||">="===r?Nr(t[1],t[2],r):"any"===r?(e=t.slice(1),["any"].concat(e.map(Br))):"all"===r?["all"].concat(t.slice(1).map(Br)):"none"===r?["all"].concat(t.slice(1).map(Br).map(Ur)):"in"===r?jr(t[1],t.slice(2)):"!in"===r?Ur(jr(t[1],t.slice(2))):"has"===r?Vr(t[1]):"!has"!==r||Ur(Vr(t[1]))}function Nr(t,e,r){switch(t){case"$type":return["filter-type-"+r,e];case"$id":return["filter-id-"+r,e];default:return["filter-"+r,t,e]}}function jr(t,e){if(0===e.length)return!1;switch(t){case"$type":return["filter-type-in",["literal",e]];case"$id":return["filter-id-in",["literal",e]];default:return e.length>200&&!e.some(function(t){return typeof t!=typeof e[0]})?["filter-in-large",t,["literal",e.sort(Fr)]]:["filter-in-small",t,["literal",e]]}}function Vr(t){switch(t){case"$type":return!0;case"$id":return["filter-has-id"];default:return["filter-has",t]}}function Ur(t){return["!",t]}function qr(t){return Ir(Ct(t.value))?Or(St({},t,{expressionContext:"filter",valueSpec:{value:"boolean"}})):function t(e){var r=e.value,n=e.key;if("array"!==pr(r))return[new Mt(n,r,"array expected, "+pr(r)+" found")];var a,i=e.styleSpec,o=[];if(r.length<1)return[new Mt(n,r,"filter array must have at least 1 element")];switch(o=o.concat(zr({key:n+"[0]",value:r[0],valueSpec:i.filter_operator,style:e.style,styleSpec:e.styleSpec})),Lt(r[0])){case"<":case"<=":case">":case">=":r.length>=2&&"$type"===Lt(r[1])&&o.push(new Mt(n,r,'"$type" cannot be use with operator "'+r[0]+'"'));case"==":case"!=":3!==r.length&&o.push(new Mt(n,r,'filter array for operator "'+r[0]+'" must have 3 elements'));case"in":case"!in":r.length>=2&&"string"!==(a=pr(r[1]))&&o.push(new Mt(n+"[1]",r[1],"string expected, "+a+" found"));for(var s=2;s<r.length;s++)a=pr(r[s]),"$type"===Lt(r[1])?o=o.concat(zr({key:n+"["+s+"]",value:r[s],valueSpec:i.geometry_type,style:e.style,styleSpec:e.styleSpec})):"string"!==a&&"number"!==a&&"boolean"!==a&&o.push(new Mt(n+"["+s+"]",r[s],"string, number, or boolean expected, "+a+" found"));break;case"any":case"all":case"none":for(var l=1;l<r.length;l++)o=o.concat(t({key:n+"["+l+"]",value:r[l],style:e.style,styleSpec:e.styleSpec}));break;case"has":case"!has":a=pr(r[1]),2!==r.length?o.push(new Mt(n,r,'filter array for "'+r[0]+'" operator must have 2 elements')):"string"!==a&&o.push(new Mt(n+"[1]",r[1],"string expected, "+a+" found"))}return o}(t)}function Hr(t,e){var r=t.key,n=t.style,a=t.styleSpec,i=t.value,o=t.objectKey,s=a[e+"_"+t.layerType];if(!s)return[];var l=o.match(/^(.*)-transition$/);if("paint"===e&&l&&s[l[1]]&&s[l[1]].transition)return Qr({key:r,value:i,valueSpec:a.transition,style:n,styleSpec:a});var c,u=t.valueSpec||s[o];if(!u)return[new Mt(r,i,'unknown property "'+o+'"')];if("string"===pr(i)&&ur(u)&&!u.tokens&&(c=/^{([^}]+)}$/.exec(i)))return[new Mt(r,i,'"'+o+'" does not support interpolation syntax\nUse an identity property function instead: `{ "type": "identity", "property": '+JSON.stringify(c[1])+" }`.")];var h=[];return"symbol"===t.layerType&&("text-field"===o&&n&&!n.glyphs&&h.push(new Mt(r,i,'use of "text-field" requires a style "glyphs" property')),"text-font"===o&&dr(Ct(i))&&"identity"===Lt(i.type)&&h.push(new Mt(r,i,'"text-font" does not support identity functions'))),h.concat(Qr({key:t.key,value:i,valueSpec:u,style:n,styleSpec:a,expressionContext:"property",propertyType:e,propertyKey:o}))}function Gr(t){return Hr(t,"paint")}function Yr(t){return Hr(t,"layout")}function Wr(t){var e=[],r=t.value,n=t.key,a=t.style,i=t.styleSpec;r.type||r.ref||e.push(new Mt(n,r,'either "type" or "ref" is required'));var o,s=Lt(r.type),l=Lt(r.ref);if(r.id)for(var c=Lt(r.id),u=0;u<t.arrayIndex;u++){var h=a.layers[u];Lt(h.id)===c&&e.push(new Mt(n,r.id,'duplicate layer id "'+r.id+'", previously used at line '+h.id.__line__))}if("ref"in r)["type","source","source-layer","filter","layout"].forEach(function(t){t in r&&e.push(new Mt(n,r[t],'"'+t+'" is prohibited for ref layers'))}),a.layers.forEach(function(t){Lt(t.id)===l&&(o=t)}),o?o.ref?e.push(new Mt(n,r.ref,"ref cannot reference another ref layer")):s=Lt(o.type):e.push(new Mt(n,r.ref,'ref layer "'+l+'" not found'));else if("background"!==s)if(r.source){var f=a.sources&&a.sources[r.source],p=f&&Lt(f.type);f?"vector"===p&&"raster"===s?e.push(new Mt(n,r.source,'layer "'+r.id+'" requires a raster source')):"raster"===p&&"raster"!==s?e.push(new Mt(n,r.source,'layer "'+r.id+'" requires a vector source')):"vector"!==p||r["source-layer"]?"raster-dem"===p&&"hillshade"!==s?e.push(new Mt(n,r.source,"raster-dem source can only be used with layer type 'hillshade'.")):"line"!==s||!r.paint||!r.paint["line-gradient"]||"geojson"===p&&f.lineMetrics||e.push(new Mt(n,r,'layer "'+r.id+'" specifies a line-gradient, which requires a GeoJSON source with `lineMetrics` enabled.')):e.push(new Mt(n,r,'layer "'+r.id+'" must specify a "source-layer"')):e.push(new Mt(n,r.source,'source "'+r.source+'" not found'))}else e.push(new Mt(n,r,'missing required property "source"'));return e=e.concat(Er({key:n,value:r,valueSpec:i.layer,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{"*":function(){return[]},type:function(){return Qr({key:n+".type",value:r.type,valueSpec:i.layer.type,style:t.style,styleSpec:t.styleSpec,object:r,objectKey:"type"})},filter:qr,layout:function(t){return Er({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{"*":function(t){return Yr(St({layerType:s},t))}}})},paint:function(t){return Er({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{"*":function(t){return Gr(St({layerType:s},t))}}})}}}))}function Xr(t){var e=t.value,r=t.key,n=t.styleSpec,a=t.style;if(!e.type)return[new Mt(r,e,'"type" is required')];var i,o=Lt(e.type);switch(o){case"vector":case"raster":case"raster-dem":return Er({key:r,value:e,valueSpec:n["source_"+o.replace("-","_")],style:t.style,styleSpec:n});case"geojson":if(i=Er({key:r,value:e,valueSpec:n.source_geojson,style:a,styleSpec:n}),e.cluster)for(var s in e.clusterProperties){var l=e.clusterProperties[s],c=l[0],u=l[1],h="string"==typeof c?[c,["accumulated"],["get",s]]:c;i.push.apply(i,Or({key:r+"."+s+".map",value:u,expressionContext:"cluster-map"})),i.push.apply(i,Or({key:r+"."+s+".reduce",value:h,expressionContext:"cluster-reduce"}))}return i;case"video":return Er({key:r,value:e,valueSpec:n.source_video,style:a,styleSpec:n});case"image":return Er({key:r,value:e,valueSpec:n.source_image,style:a,styleSpec:n});case"canvas":return[new Mt(r,null,"Please use runtime APIs to add canvas sources, rather than including them in stylesheets.","source.canvas")];default:return zr({key:r+".type",value:e.type,valueSpec:{values:["vector","raster","raster-dem","geojson","video","image"]},style:a,styleSpec:n})}}function Zr(t){var e=t.value,r=t.styleSpec,n=r.light,a=t.style,i=[],o=pr(e);if(void 0===e)return i;if("object"!==o)return i.concat([new Mt("light",e,"object expected, "+o+" found")]);for(var s in e){var l=s.match(/^(.*)-transition$/);i=l&&n[l[1]]&&n[l[1]].transition?i.concat(Qr({key:s,value:e[s],valueSpec:r.transition,style:a,styleSpec:r})):n[s]?i.concat(Qr({key:s,value:e[s],valueSpec:n[s],style:a,styleSpec:r})):i.concat([new Mt(s,e[s],'unknown property "'+s+'"')])}return i}function Jr(t){var e=t.value,r=t.key,n=pr(e);return"string"!==n?[new Mt(r,e,"string expected, "+n+" found")]:[]}var Kr={"*":function(){return[]},array:Lr,boolean:function(t){var e=t.value,r=t.key,n=pr(e);return"boolean"!==n?[new Mt(r,e,"boolean expected, "+n+" found")]:[]},number:Cr,color:function(t){var e=t.key,r=t.value,n=pr(r);return"string"!==n?[new Mt(e,r,"color expected, "+n+" found")]:null===Yt(r)?[new Mt(e,r,'color expected, "'+r+'" found')]:[]},constants:At,enum:zr,filter:qr,function:Pr,layer:Wr,object:Er,source:Xr,light:Zr,string:Jr,formatted:function(t){return 0===Jr(t).length?[]:Or(t)}};function Qr(t){var e=t.value,r=t.valueSpec,n=t.styleSpec;return r.expression&&dr(Lt(e))?Pr(t):r.expression&&wr(Ct(e))?Or(t):r.type&&Kr[r.type]?Kr[r.type](t):Er(St({},t,{valueSpec:r.type?n[r.type]:r}))}function $r(t){var e=t.value,r=t.key,n=Jr(t);return n.length?n:(-1===e.indexOf("{fontstack}")&&n.push(new Mt(r,e,'"glyphs" url must include a "{fontstack}" token')),-1===e.indexOf("{range}")&&n.push(new Mt(r,e,'"glyphs" url must include a "{range}" token')),n)}function tn(t,e){e=e||Tt;var r=[];return r=r.concat(Qr({key:"",value:t,valueSpec:e.$root,styleSpec:e,style:t,objectElementValidators:{glyphs:$r,"*":function(){return[]}}})),t.constants&&(r=r.concat(At({key:"constants",value:t.constants,style:t,styleSpec:e}))),en(r)}function en(t){return[].concat(t).sort(function(t,e){return t.line-e.line})}function rn(t){return function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return en(t.apply(this,e))}}tn.source=rn(Xr),tn.light=rn(Zr),tn.layer=rn(Wr),tn.filter=rn(qr),tn.paintProperty=rn(Gr),tn.layoutProperty=rn(Yr);var nn=tn,an=nn.light,on=nn.paintProperty,sn=nn.layoutProperty;function ln(t,e){var r=!1;if(e&&e.length)for(var n=0,a=e;n<a.length;n+=1){var i=a[n];t.fire(new wt(new Error(i.message))),r=!0}return r}var cn=hn,un=3;function hn(t,e,r){var n=this.cells=[];if(t instanceof ArrayBuffer){this.arrayBuffer=t;var a=new Int32Array(this.arrayBuffer);t=a[0],e=a[1],r=a[2],this.d=e+2*r;for(var i=0;i<this.d*this.d;i++){var o=a[un+i],s=a[un+i+1];n.push(o===s?null:a.subarray(o,s))}var l=a[un+n.length],c=a[un+n.length+1];this.keys=a.subarray(l,c),this.bboxes=a.subarray(c),this.insert=this._insertReadonly}else{this.d=e+2*r;for(var u=0;u<this.d*this.d;u++)n.push([]);this.keys=[],this.bboxes=[]}this.n=e,this.extent=t,this.padding=r,this.scale=e/t,this.uid=0;var h=r/e*t;this.min=-h,this.max=t+h}hn.prototype.insert=function(t,e,r,n,a){this._forEachCell(e,r,n,a,this._insertCell,this.uid++),this.keys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(n),this.bboxes.push(a)},hn.prototype._insertReadonly=function(){throw"Cannot insert into a GridIndex created from an ArrayBuffer."},hn.prototype._insertCell=function(t,e,r,n,a,i){this.cells[a].push(i)},hn.prototype.query=function(t,e,r,n,a){var i=this.min,o=this.max;if(t<=i&&e<=i&&o<=r&&o<=n&&!a)return Array.prototype.slice.call(this.keys);var s=[];return this._forEachCell(t,e,r,n,this._queryCell,s,{},a),s},hn.prototype._queryCell=function(t,e,r,n,a,i,o,s){var l=this.cells[a];if(null!==l)for(var c=this.keys,u=this.bboxes,h=0;h<l.length;h++){var f=l[h];if(void 0===o[f]){var p=4*f;(s?s(u[p+0],u[p+1],u[p+2],u[p+3]):t<=u[p+2]&&e<=u[p+3]&&r>=u[p+0]&&n>=u[p+1])?(o[f]=!0,i.push(c[f])):o[f]=!1}}},hn.prototype._forEachCell=function(t,e,r,n,a,i,o,s){for(var l=this._convertToCellCoord(t),c=this._convertToCellCoord(e),u=this._convertToCellCoord(r),h=this._convertToCellCoord(n),f=l;f<=u;f++)for(var p=c;p<=h;p++){var d=this.d*p+f;if((!s||s(this._convertFromCellCoord(f),this._convertFromCellCoord(p),this._convertFromCellCoord(f+1),this._convertFromCellCoord(p+1)))&&a.call(this,t,e,r,n,d,i,o,s))return}},hn.prototype._convertFromCellCoord=function(t){return(t-this.padding)/this.scale},hn.prototype._convertToCellCoord=function(t){return Math.max(0,Math.min(this.d-1,Math.floor(t*this.scale)+this.padding))},hn.prototype.toArrayBuffer=function(){if(this.arrayBuffer)return this.arrayBuffer;for(var t=this.cells,e=un+this.cells.length+1+1,r=0,n=0;n<this.cells.length;n++)r+=this.cells[n].length;var a=new Int32Array(e+r+this.keys.length+this.bboxes.length);a[0]=this.extent,a[1]=this.n,a[2]=this.padding;for(var i=e,o=0;o<t.length;o++){var s=t[o];a[un+o]=i,a.set(s,i),i+=s.length}return a[un+t.length]=i,a.set(this.keys,i),i+=this.keys.length,a[un+t.length+1]=i,a.set(this.bboxes,i),i+=this.bboxes.length,a.buffer};var fn=self.ImageData,pn={};function dn(t,e,r){void 0===r&&(r={}),Object.defineProperty(e,"_classRegistryKey",{value:t,writeable:!1}),pn[t]={klass:e,omit:r.omit||[],shallow:r.shallow||[]}}for(var gn in dn("Object",Object),cn.serialize=function(t,e){var r=t.toArrayBuffer();return e&&e.push(r),{buffer:r}},cn.deserialize=function(t){return new cn(t.buffer)},dn("Grid",cn),dn("Color",Wt),dn("Error",Error),dn("StylePropertyFunction",Sr),dn("StyleExpression",_r,{omit:["_evaluator"]}),dn("ZoomDependentExpression",Mr),dn("ZoomConstantExpression",Tr),dn("CompoundExpression",ce,{omit:["_evaluate"]}),nr)nr[gn]._classRegistryKey||dn("Expression_"+gn,nr[gn]);function vn(t,e){if(null==t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp)return t;if(t instanceof ArrayBuffer)return e&&e.push(t),t;if(ArrayBuffer.isView(t)){var r=t;return e&&e.push(r.buffer),r}if(t instanceof fn)return e&&e.push(t.data.buffer),t;if(Array.isArray(t)){for(var n=[],a=0,i=t;a<i.length;a+=1){var o=i[a];n.push(vn(o,e))}return n}if("object"==typeof t){var s=t.constructor,l=s._classRegistryKey;if(!l)throw new Error("can't serialize object of unregistered class");var c=s.serialize?s.serialize(t,e):{};if(!s.serialize){for(var u in t)if(t.hasOwnProperty(u)&&!(pn[l].omit.indexOf(u)>=0)){var h=t[u];c[u]=pn[l].shallow.indexOf(u)>=0?h:vn(h,e)}t instanceof Error&&(c.message=t.message)}if(c.$name)throw new Error("$name property is reserved for worker serialization logic.");return"Object"!==l&&(c.$name=l),c}throw new Error("can't serialize object of type "+typeof t)}function mn(t){if(null==t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp||t instanceof ArrayBuffer||ArrayBuffer.isView(t)||t instanceof fn)return t;if(Array.isArray(t))return t.map(mn);if("object"==typeof t){var e=t.$name||"Object",r=pn[e].klass;if(!r)throw new Error("can't deserialize unregistered class "+e);if(r.deserialize)return r.deserialize(t);for(var n=Object.create(r.prototype),a=0,i=Object.keys(t);a<i.length;a+=1){var o=i[a];if("$name"!==o){var s=t[o];n[o]=pn[e].shallow.indexOf(o)>=0?s:mn(s)}}return n}throw new Error("can't deserialize object of type "+typeof t)}var yn=function(){this.first=!0};yn.prototype.update=function(t,e){var r=Math.floor(t);return this.first?(this.first=!1,this.lastIntegerZoom=r,this.lastIntegerZoomTime=0,this.lastZoom=t,this.lastFloorZoom=r,!0):(this.lastFloorZoom>r?(this.lastIntegerZoom=r+1,this.lastIntegerZoomTime=e):this.lastFloorZoom<r&&(this.lastIntegerZoom=r,this.lastIntegerZoomTime=e),t!==this.lastZoom&&(this.lastZoom=t,this.lastFloorZoom=r,!0))};var xn={"Latin-1 Supplement":function(t){return t>=128&&t<=255},Arabic:function(t){return t>=1536&&t<=1791},"Arabic Supplement":function(t){return t>=1872&&t<=1919},"Arabic Extended-A":function(t){return t>=2208&&t<=2303},"Hangul Jamo":function(t){return t>=4352&&t<=4607},"Unified Canadian Aboriginal Syllabics":function(t){return t>=5120&&t<=5759},Khmer:function(t){return t>=6016&&t<=6143},"Unified Canadian Aboriginal Syllabics Extended":function(t){return t>=6320&&t<=6399},"General Punctuation":function(t){return t>=8192&&t<=8303},"Letterlike Symbols":function(t){return t>=8448&&t<=8527},"Number Forms":function(t){return t>=8528&&t<=8591},"Miscellaneous Technical":function(t){return t>=8960&&t<=9215},"Control Pictures":function(t){return t>=9216&&t<=9279},"Optical Character Recognition":function(t){return t>=9280&&t<=9311},"Enclosed Alphanumerics":function(t){return t>=9312&&t<=9471},"Geometric Shapes":function(t){return t>=9632&&t<=9727},"Miscellaneous Symbols":function(t){return t>=9728&&t<=9983},"Miscellaneous Symbols and Arrows":function(t){return t>=11008&&t<=11263},"CJK Radicals Supplement":function(t){return t>=11904&&t<=12031},"Kangxi Radicals":function(t){return t>=12032&&t<=12255},"Ideographic Description Characters":function(t){return t>=12272&&t<=12287},"CJK Symbols and Punctuation":function(t){return t>=12288&&t<=12351},Hiragana:function(t){return t>=12352&&t<=12447},Katakana:function(t){return t>=12448&&t<=12543},Bopomofo:function(t){return t>=12544&&t<=12591},"Hangul Compatibility Jamo":function(t){return t>=12592&&t<=12687},Kanbun:function(t){return t>=12688&&t<=12703},"Bopomofo Extended":function(t){return t>=12704&&t<=12735},"CJK Strokes":function(t){return t>=12736&&t<=12783},"Katakana Phonetic Extensions":function(t){return t>=12784&&t<=12799},"Enclosed CJK Letters and Months":function(t){return t>=12800&&t<=13055},"CJK Compatibility":function(t){return t>=13056&&t<=13311},"CJK Unified Ideographs Extension A":function(t){return t>=13312&&t<=19903},"Yijing Hexagram Symbols":function(t){return t>=19904&&t<=19967},"CJK Unified Ideographs":function(t){return t>=19968&&t<=40959},"Yi Syllables":function(t){return t>=40960&&t<=42127},"Yi Radicals":function(t){return t>=42128&&t<=42191},"Hangul Jamo Extended-A":function(t){return t>=43360&&t<=43391},"Hangul Syllables":function(t){return t>=44032&&t<=55215},"Hangul Jamo Extended-B":function(t){return t>=55216&&t<=55295},"Private Use Area":function(t){return t>=57344&&t<=63743},"CJK Compatibility Ideographs":function(t){return t>=63744&&t<=64255},"Arabic Presentation Forms-A":function(t){return t>=64336&&t<=65023},"Vertical Forms":function(t){return t>=65040&&t<=65055},"CJK Compatibility Forms":function(t){return t>=65072&&t<=65103},"Small Form Variants":function(t){return t>=65104&&t<=65135},"Arabic Presentation Forms-B":function(t){return t>=65136&&t<=65279},"Halfwidth and Fullwidth Forms":function(t){return t>=65280&&t<=65519}};function bn(t){for(var e=0,r=t;e<r.length;e+=1)if(wn(r[e].charCodeAt(0)))return!0;return!1}function _n(t){return!(xn.Arabic(t)||xn["Arabic Supplement"](t)||xn["Arabic Extended-A"](t)||xn["Arabic Presentation Forms-A"](t)||xn["Arabic Presentation Forms-B"](t))}function wn(t){return!!(746===t||747===t||!(t<4352)&&(xn["Bopomofo Extended"](t)||xn.Bopomofo(t)||xn["CJK Compatibility Forms"](t)&&!(t>=65097&&t<=65103)||xn["CJK Compatibility Ideographs"](t)||xn["CJK Compatibility"](t)||xn["CJK Radicals Supplement"](t)||xn["CJK Strokes"](t)||!(!xn["CJK Symbols and Punctuation"](t)||t>=12296&&t<=12305||t>=12308&&t<=12319||12336===t)||xn["CJK Unified Ideographs Extension A"](t)||xn["CJK Unified Ideographs"](t)||xn["Enclosed CJK Letters and Months"](t)||xn["Hangul Compatibility Jamo"](t)||xn["Hangul Jamo Extended-A"](t)||xn["Hangul Jamo Extended-B"](t)||xn["Hangul Jamo"](t)||xn["Hangul Syllables"](t)||xn.Hiragana(t)||xn["Ideographic Description Characters"](t)||xn.Kanbun(t)||xn["Kangxi Radicals"](t)||xn["Katakana Phonetic Extensions"](t)||xn.Katakana(t)&&12540!==t||!(!xn["Halfwidth and Fullwidth Forms"](t)||65288===t||65289===t||65293===t||t>=65306&&t<=65310||65339===t||65341===t||65343===t||t>=65371&&t<=65503||65507===t||t>=65512&&t<=65519)||!(!xn["Small Form Variants"](t)||t>=65112&&t<=65118||t>=65123&&t<=65126)||xn["Unified Canadian Aboriginal Syllabics"](t)||xn["Unified Canadian Aboriginal Syllabics Extended"](t)||xn["Vertical Forms"](t)||xn["Yijing Hexagram Symbols"](t)||xn["Yi Syllables"](t)||xn["Yi Radicals"](t)))}function kn(t){return!(wn(t)||function(t){return!!(xn["Latin-1 Supplement"](t)&&(167===t||169===t||174===t||177===t||188===t||189===t||190===t||215===t||247===t)||xn["General Punctuation"](t)&&(8214===t||8224===t||8225===t||8240===t||8241===t||8251===t||8252===t||8258===t||8263===t||8264===t||8265===t||8273===t)||xn["Letterlike Symbols"](t)||xn["Number Forms"](t)||xn["Miscellaneous Technical"](t)&&(t>=8960&&t<=8967||t>=8972&&t<=8991||t>=8996&&t<=9e3||9003===t||t>=9085&&t<=9114||t>=9150&&t<=9165||9167===t||t>=9169&&t<=9179||t>=9186&&t<=9215)||xn["Control Pictures"](t)&&9251!==t||xn["Optical Character Recognition"](t)||xn["Enclosed Alphanumerics"](t)||xn["Geometric Shapes"](t)||xn["Miscellaneous Symbols"](t)&&!(t>=9754&&t<=9759)||xn["Miscellaneous Symbols and Arrows"](t)&&(t>=11026&&t<=11055||t>=11088&&t<=11097||t>=11192&&t<=11243)||xn["CJK Symbols and Punctuation"](t)||xn.Katakana(t)||xn["Private Use Area"](t)||xn["CJK Compatibility Forms"](t)||xn["Small Form Variants"](t)||xn["Halfwidth and Fullwidth Forms"](t)||8734===t||8756===t||8757===t||t>=9984&&t<=10087||t>=10102&&t<=10131||65532===t||65533===t)}(t))}function Tn(t,e){return!(!e&&(t>=1424&&t<=2303||xn["Arabic Presentation Forms-A"](t)||xn["Arabic Presentation Forms-B"](t))||t>=2304&&t<=3583||t>=3840&&t<=4255||xn.Khmer(t))}var Mn,An=!1,Sn=null,En=!1,Ln=new kt,Cn={applyArabicShaping:null,processBidirectionalText:null,processStyledBidirectionalText:null,isLoaded:function(){return En||null!=Cn.applyArabicShaping}},Pn=function(t,e){this.zoom=t,e?(this.now=e.now,this.fadeDuration=e.fadeDuration,this.zoomHistory=e.zoomHistory,this.transition=e.transition):(this.now=0,this.fadeDuration=0,this.zoomHistory=new yn,this.transition={})};Pn.prototype.isSupportedScript=function(t){return function(t,e){for(var r=0,n=t;r<n.length;r+=1)if(!Tn(n[r].charCodeAt(0),e))return!1;return!0}(t,Cn.isLoaded())},Pn.prototype.crossFadingFactor=function(){return 0===this.fadeDuration?1:Math.min((this.now-this.zoomHistory.lastIntegerZoomTime)/this.fadeDuration,1)},Pn.prototype.getCrossfadeParameters=function(){var t=this.zoom,e=t-Math.floor(t),r=this.crossFadingFactor();return t>this.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:e+(1-e)*r}:{fromScale:.5,toScale:1,t:1-(1-r)*e}};var On=function(t,e){this.property=t,this.value=e,this.expression=function(t,e){if(dr(t))return new Sr(t,e);if(wr(t)){var r=Ar(t,e);if("error"===r.result)throw new Error(r.value.map(function(t){return t.key+": "+t.message}).join(", "));return r.value}var n=t;return"string"==typeof t&&"color"===e.type&&(n=Wt.parse(t)),{kind:"constant",evaluate:function(){return n}}}(void 0===e?t.specification.default:e,t.specification)};On.prototype.isDataDriven=function(){return"source"===this.expression.kind||"composite"===this.expression.kind},On.prototype.possiblyEvaluate=function(t){return this.property.possiblyEvaluate(this,t)};var zn=function(t){this.property=t,this.value=new On(t,void 0)};zn.prototype.transitioned=function(t,e){return new Dn(this.property,this.value,e,h({},t.transition,this.transition),t.now)},zn.prototype.untransitioned=function(){return new Dn(this.property,this.value,null,{},0)};var In=function(t){this._properties=t,this._values=Object.create(t.defaultTransitionablePropertyValues)};In.prototype.getValue=function(t){return b(this._values[t].value.value)},In.prototype.setValue=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new zn(this._values[t].property)),this._values[t].value=new On(this._values[t].property,null===e?void 0:b(e))},In.prototype.getTransition=function(t){return b(this._values[t].transition)},In.prototype.setTransition=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new zn(this._values[t].property)),this._values[t].transition=b(e)||void 0},In.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e],a=this.getValue(n);void 0!==a&&(t[n]=a);var i=this.getTransition(n);void 0!==i&&(t[n+"-transition"]=i)}return t},In.prototype.transitioned=function(t,e){for(var r=new Rn(this._properties),n=0,a=Object.keys(this._values);n<a.length;n+=1){var i=a[n];r._values[i]=this._values[i].transitioned(t,e._values[i])}return r},In.prototype.untransitioned=function(){for(var t=new Rn(this._properties),e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e];t._values[n]=this._values[n].untransitioned()}return t};var Dn=function(t,e,r,n,a){this.property=t,this.value=e,this.begin=a+n.delay||0,this.end=this.begin+n.duration||0,t.specification.transition&&(n.delay||n.duration)&&(this.prior=r)};Dn.prototype.possiblyEvaluate=function(t){var e=t.now||0,r=this.value.possiblyEvaluate(t),n=this.prior;if(n){if(e>this.end)return this.prior=null,r;if(this.value.isDataDriven())return this.prior=null,r;if(e<this.begin)return n.possiblyEvaluate(t);var a=(e-this.begin)/(this.end-this.begin);return this.property.interpolate(n.possiblyEvaluate(t),r,function(t){if(a<=0)return 0;if(a>=1)return 1;var e=a*a,r=e*a;return 4*(a<.5?r:3*(a-e)+r-.75)}())}return r};var Rn=function(t){this._properties=t,this._values=Object.create(t.defaultTransitioningPropertyValues)};Rn.prototype.possiblyEvaluate=function(t){for(var e=new Nn(this._properties),r=0,n=Object.keys(this._values);r<n.length;r+=1){var a=n[r];e._values[a]=this._values[a].possiblyEvaluate(t)}return e},Rn.prototype.hasTransition=function(){for(var t=0,e=Object.keys(this._values);t<e.length;t+=1){var r=e[t];if(this._values[r].prior)return!0}return!1};var Fn=function(t){this._properties=t,this._values=Object.create(t.defaultPropertyValues)};Fn.prototype.getValue=function(t){return b(this._values[t].value)},Fn.prototype.setValue=function(t,e){this._values[t]=new On(this._values[t].property,null===e?void 0:b(e))},Fn.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e],a=this.getValue(n);void 0!==a&&(t[n]=a)}return t},Fn.prototype.possiblyEvaluate=function(t){for(var e=new Nn(this._properties),r=0,n=Object.keys(this._values);r<n.length;r+=1){var a=n[r];e._values[a]=this._values[a].possiblyEvaluate(t)}return e};var Bn=function(t,e,r){this.property=t,this.value=e,this.parameters=r};Bn.prototype.isConstant=function(){return"constant"===this.value.kind},Bn.prototype.constantOr=function(t){return"constant"===this.value.kind?this.value.value:t},Bn.prototype.evaluate=function(t,e){return this.property.evaluate(this.value,this.parameters,t,e)};var Nn=function(t){this._properties=t,this._values=Object.create(t.defaultPossiblyEvaluatedValues)};Nn.prototype.get=function(t){return this._values[t]};var jn=function(t){this.specification=t};jn.prototype.possiblyEvaluate=function(t,e){return t.expression.evaluate(e)},jn.prototype.interpolate=function(t,e,r){var n=xe[this.specification.type];return n?n(t,e,r):t};var Vn=function(t,e){this.specification=t,this.overrides=e};Vn.prototype.possiblyEvaluate=function(t,e){return"constant"===t.expression.kind||"camera"===t.expression.kind?new Bn(this,{kind:"constant",value:t.expression.evaluate(e)},e):new Bn(this,t.expression,e)},Vn.prototype.interpolate=function(t,e,r){if("constant"!==t.value.kind||"constant"!==e.value.kind)return t;if(void 0===t.value.value||void 0===e.value.value)return new Bn(this,{kind:"constant",value:void 0},t.parameters);var n=xe[this.specification.type];return n?new Bn(this,{kind:"constant",value:n(t.value.value,e.value.value,r)},t.parameters):t},Vn.prototype.evaluate=function(t,e,r,n){return"constant"===t.kind?t.value:t.evaluate(e,r,n)};var Un=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(t,e){if(void 0===t.value)return new Bn(this,{kind:"constant",value:void 0},e);if("constant"===t.expression.kind){var r=t.expression.evaluate(e),n=this._calculate(r,r,r,e);return new Bn(this,{kind:"constant",value:n},e)}if("camera"===t.expression.kind){var a=this._calculate(t.expression.evaluate({zoom:e.zoom-1}),t.expression.evaluate({zoom:e.zoom}),t.expression.evaluate({zoom:e.zoom+1}),e);return new Bn(this,{kind:"constant",value:a},e)}return new Bn(this,t.expression,e)},e.prototype.evaluate=function(t,e,r,n){if("source"===t.kind){var a=t.evaluate(e,r,n);return this._calculate(a,a,a,e)}return"composite"===t.kind?this._calculate(t.evaluate({zoom:Math.floor(e.zoom)-1},r,n),t.evaluate({zoom:Math.floor(e.zoom)},r,n),t.evaluate({zoom:Math.floor(e.zoom)+1},r,n),e):t.value},e.prototype._calculate=function(t,e,r,n){return n.zoom>n.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},e.prototype.interpolate=function(t){return t},e}(Vn),qn=function(t){this.specification=t};qn.prototype.possiblyEvaluate=function(t,e){if(void 0!==t.value){if("constant"===t.expression.kind){var r=t.expression.evaluate(e);return this._calculate(r,r,r,e)}return this._calculate(t.expression.evaluate(new Pn(Math.floor(e.zoom-1),e)),t.expression.evaluate(new Pn(Math.floor(e.zoom),e)),t.expression.evaluate(new Pn(Math.floor(e.zoom+1),e)),e)}},qn.prototype._calculate=function(t,e,r,n){return n.zoom>n.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},qn.prototype.interpolate=function(t){return t};var Hn=function(t){this.specification=t};Hn.prototype.possiblyEvaluate=function(t,e){return!!t.expression.evaluate(e)},Hn.prototype.interpolate=function(){return!1};var Gn=function(t){for(var e in this.properties=t,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},this.overridableProperties=[],t){var r=t[e];r.specification.overridable&&this.overridableProperties.push(e);var n=this.defaultPropertyValues[e]=new On(r,void 0),a=this.defaultTransitionablePropertyValues[e]=new zn(r);this.defaultTransitioningPropertyValues[e]=a.untransitioned(),this.defaultPossiblyEvaluatedValues[e]=n.possiblyEvaluate({})}};dn("DataDrivenProperty",Vn),dn("DataConstantProperty",jn),dn("CrossFadedDataDrivenProperty",Un),dn("CrossFadedProperty",qn),dn("ColorRampProperty",Hn);var Yn=function(t){function e(e,r){if(t.call(this),this.id=e.id,this.type=e.type,this._featureFilter=function(){return!0},"custom"!==e.type&&(e=e,this.metadata=e.metadata,this.minzoom=e.minzoom,this.maxzoom=e.maxzoom,"background"!==e.type&&(this.source=e.source,this.sourceLayer=e["source-layer"],this.filter=e.filter),r.layout&&(this._unevaluatedLayout=new Fn(r.layout)),r.paint)){for(var n in this._transitionablePaint=new In(r.paint),e.paint)this.setPaintProperty(n,e.paint[n],{validate:!1});for(var a in e.layout)this.setLayoutProperty(a,e.layout[a],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned()}}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getCrossfadeParameters=function(){return this._crossfadeParameters},e.prototype.getLayoutProperty=function(t){return"visibility"===t?this.visibility:this._unevaluatedLayout.getValue(t)},e.prototype.setLayoutProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e){var n="layers."+this.id+".layout."+t;if(this._validate(sn,n,t,e,r))return}"visibility"!==t?this._unevaluatedLayout.setValue(t,e):this.visibility=e},e.prototype.getPaintProperty=function(t){return m(t,"-transition")?this._transitionablePaint.getTransition(t.slice(0,-"-transition".length)):this._transitionablePaint.getValue(t)},e.prototype.setPaintProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e){var n="layers."+this.id+".paint."+t;if(this._validate(on,n,t,e,r))return!1}if(m(t,"-transition"))return this._transitionablePaint.setTransition(t.slice(0,-"-transition".length),e||void 0),!1;var a=this._transitionablePaint._values[t],i="cross-faded-data-driven"===a.property.specification["property-type"],o=a.value.isDataDriven(),s=a.value;this._transitionablePaint.setValue(t,e),this._handleSpecialPaintPropertyUpdate(t);var l=this._transitionablePaint._values[t].value;return l.isDataDriven()||o||i||this._handleOverridablePaintPropertyUpdate(t,s,l)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){},e.prototype._handleOverridablePaintPropertyUpdate=function(t,e,r){return!1},e.prototype.isHidden=function(t){return!!(this.minzoom&&t<this.minzoom)||!!(this.maxzoom&&t>=this.maxzoom)||"none"===this.visibility},e.prototype.updateTransitions=function(t){this._transitioningPaint=this._transitionablePaint.transitioned(t,this._transitioningPaint)},e.prototype.hasTransition=function(){return this._transitioningPaint.hasTransition()},e.prototype.recalculate=function(t){t.getCrossfadeParameters&&(this._crossfadeParameters=t.getCrossfadeParameters()),this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(t)),this.paint=this._transitioningPaint.possiblyEvaluate(t)},e.prototype.serialize=function(){var t={id:this.id,type:this.type,source:this.source,"source-layer":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:this._unevaluatedLayout&&this._unevaluatedLayout.serialize(),paint:this._transitionablePaint&&this._transitionablePaint.serialize()};return this.visibility&&(t.layout=t.layout||{},t.layout.visibility=this.visibility),x(t,function(t,e){return!(void 0===t||"layout"===e&&!Object.keys(t).length||"paint"===e&&!Object.keys(t).length)})},e.prototype._validate=function(t,e,r,n,a){return void 0===a&&(a={}),(!a||!1!==a.validate)&&ln(this,t.call(nn,{key:e,layerType:this.type,objectKey:r,value:n,styleSpec:Tt,style:{glyphs:!0,sprite:!0}}))},e.prototype.is3D=function(){return!1},e.prototype.isTileClipped=function(){return!1},e.prototype.hasOffscreenPass=function(){return!1},e.prototype.resize=function(){},e.prototype.isStateDependent=function(){for(var t in this.paint._values){var e=this.paint.get(t);if(e instanceof Bn&&ur(e.property.specification)&&("source"===e.value.kind||"composite"===e.value.kind)&&e.value.isStateDependent)return!0}return!1},e}(kt),Wn={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},Xn=function(t,e){this._structArray=t,this._pos1=e*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8},Zn=function(){this.isTransferred=!1,this.capacity=-1,this.resize(0)};function Jn(t,e){void 0===e&&(e=1);var r=0,n=0;return{members:t.map(function(t){var a,i=(a=t.type,Wn[a].BYTES_PER_ELEMENT),o=r=Kn(r,Math.max(e,i)),s=t.components||1;return n=Math.max(n,i),r+=i*s,{name:t.name,type:t.type,components:s,offset:o}}),size:Kn(r,Math.max(n,e)),alignment:e}}function Kn(t,e){return Math.ceil(t/e)*e}Zn.serialize=function(t,e){return t._trim(),e&&(t.isTransferred=!0,e.push(t.arrayBuffer)),{length:t.length,arrayBuffer:t.arrayBuffer}},Zn.deserialize=function(t){var e=Object.create(this.prototype);return e.arrayBuffer=t.arrayBuffer,e.length=t.length,e.capacity=t.arrayBuffer.byteLength/e.bytesPerElement,e._refreshViews(),e},Zn.prototype._trim=function(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews())},Zn.prototype.clear=function(){this.length=0},Zn.prototype.resize=function(t){this.reserve(t),this.length=t},Zn.prototype.reserve=function(t){if(t>this.capacity){this.capacity=Math.max(t,Math.floor(5*this.capacity),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);var e=this.uint8;this._refreshViews(),e&&this.uint8.set(e)}},Zn.prototype._refreshViews=function(){throw new Error("_refreshViews() must be implemented by each concrete StructArray layout")};var Qn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.int16[n+0]=e,this.int16[n+1]=r,t},e}(Zn);Qn.prototype.bytesPerElement=4,dn("StructArrayLayout2i4",Qn);var $n=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,a){var i=4*t;return this.int16[i+0]=e,this.int16[i+1]=r,this.int16[i+2]=n,this.int16[i+3]=a,t},e}(Zn);$n.prototype.bytesPerElement=8,dn("StructArrayLayout4i8",$n);var ta=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,a,i){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,a,i)},e.prototype.emplace=function(t,e,r,n,a,i,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=a,this.int16[s+4]=i,this.int16[s+5]=o,t},e}(Zn);ta.prototype.bytesPerElement=12,dn("StructArrayLayout2i4i12",ta);var ea=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,a,i){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,a,i)},e.prototype.emplace=function(t,e,r,n,a,i,o){var s=4*t,l=8*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.uint8[l+4]=n,this.uint8[l+5]=a,this.uint8[l+6]=i,this.uint8[l+7]=o,t},e}(Zn);ea.prototype.bytesPerElement=8,dn("StructArrayLayout2i4ub8",ea);var ra=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,a,i,o,s){var l=this.length;return this.resize(l+1),this.emplace(l,t,e,r,n,a,i,o,s)},e.prototype.emplace=function(t,e,r,n,a,i,o,s,l){var c=8*t;return this.uint16[c+0]=e,this.uint16[c+1]=r,this.uint16[c+2]=n,this.uint16[c+3]=a,this.uint16[c+4]=i,this.uint16[c+5]=o,this.uint16[c+6]=s,this.uint16[c+7]=l,t},e}(Zn);ra.prototype.bytesPerElement=16,dn("StructArrayLayout8ui16",ra);var na=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,a,i,o,s){var l=this.length;return this.resize(l+1),this.emplace(l,t,e,r,n,a,i,o,s)},e.prototype.emplace=function(t,e,r,n,a,i,o,s,l){var c=8*t;return this.int16[c+0]=e,this.int16[c+1]=r,this.int16[c+2]=n,this.int16[c+3]=a,this.uint16[c+4]=i,this.uint16[c+5]=o,this.uint16[c+6]=s,this.uint16[c+7]=l,t},e}(Zn);na.prototype.bytesPerElement=16,dn("StructArrayLayout4i4ui16",na);var aa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var a=3*t;return this.float32[a+0]=e,this.float32[a+1]=r,this.float32[a+2]=n,t},e}(Zn);aa.prototype.bytesPerElement=12,dn("StructArrayLayout3f12",aa);var ia=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.uint32[r+0]=e,t},e}(Zn);ia.prototype.bytesPerElement=4,dn("StructArrayLayout1ul4",ia);var oa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,a,i,o,s,l,c,u){var h=this.length;return this.resize(h+1),this.emplace(h,t,e,r,n,a,i,o,s,l,c,u)},e.prototype.emplace=function(t,e,r,n,a,i,o,s,l,c,u,h){var f=12*t,p=6*t;return this.int16[f+0]=e,this.int16[f+1]=r,this.int16[f+2]=n,this.int16[f+3]=a,this.int16[f+4]=i,this.int16[f+5]=o,this.uint32[p+3]=s,this.uint16[f+8]=l,this.uint16[f+9]=c,this.int16[f+10]=u,this.int16[f+11]=h,t},e}(Zn);oa.prototype.bytesPerElement=24,dn("StructArrayLayout6i1ul2ui2i24",oa);var sa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,a,i){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,a,i)},e.prototype.emplace=function(t,e,r,n,a,i,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=a,this.int16[s+4]=i,this.int16[s+5]=o,t},e}(Zn);sa.prototype.bytesPerElement=12,dn("StructArrayLayout2i2i2i12",sa);var la=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,a){var i=12*t,o=3*t;return this.uint8[i+0]=e,this.uint8[i+1]=r,this.float32[o+1]=n,this.float32[o+2]=a,t},e}(Zn);la.prototype.bytesPerElement=12,dn("StructArrayLayout2ub2f12",la);var ca=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,a,i,o,s,l,c,u,h,f,p,d,g){var v=this.length;return this.resize(v+1),this.emplace(v,t,e,r,n,a,i,o,s,l,c,u,h,f,p,d,g)},e.prototype.emplace=function(t,e,r,n,a,i,o,s,l,c,u,h,f,p,d,g,v){var m=22*t,y=11*t,x=44*t;return this.int16[m+0]=e,this.int16[m+1]=r,this.uint16[m+2]=n,this.uint16[m+3]=a,this.uint32[y+2]=i,this.uint32[y+3]=o,this.uint32[y+4]=s,this.uint16[m+10]=l,this.uint16[m+11]=c,this.uint16[m+12]=u,this.float32[y+7]=h,this.float32[y+8]=f,this.uint8[x+36]=p,this.uint8[x+37]=d,this.uint8[x+38]=g,this.uint32[y+10]=v,t},e}(Zn);ca.prototype.bytesPerElement=44,dn("StructArrayLayout2i2ui3ul3ui2f3ub1ul44",ca);var ua=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,a,i,o,s,l,c,u,h,f,p,d,g,v,m,y,x){var b=this.length;return this.resize(b+1),this.emplace(b,t,e,r,n,a,i,o,s,l,c,u,h,f,p,d,g,v,m,y,x)},e.prototype.emplace=function(t,e,r,n,a,i,o,s,l,c,u,h,f,p,d,g,v,m,y,x,b){var _=24*t,w=12*t;return this.int16[_+0]=e,this.int16[_+1]=r,this.int16[_+2]=n,this.int16[_+3]=a,this.int16[_+4]=i,this.int16[_+5]=o,this.uint16[_+6]=s,this.uint16[_+7]=l,this.uint16[_+8]=c,this.uint16[_+9]=u,this.uint16[_+10]=h,this.uint16[_+11]=f,this.uint16[_+12]=p,this.uint16[_+13]=d,this.uint16[_+14]=g,this.uint16[_+15]=v,this.uint16[_+16]=m,this.uint32[w+9]=y,this.float32[w+10]=x,this.float32[w+11]=b,t},e}(Zn);ua.prototype.bytesPerElement=48,dn("StructArrayLayout6i11ui1ul2f48",ua);var ha=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.float32[r+0]=e,t},e}(Zn);ha.prototype.bytesPerElement=4,dn("StructArrayLayout1f4",ha);var fa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var a=3*t;return this.int16[a+0]=e,this.int16[a+1]=r,this.int16[a+2]=n,t},e}(Zn);fa.prototype.bytesPerElement=6,dn("StructArrayLayout3i6",fa);var pa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var a=2*t,i=4*t;return this.uint32[a+0]=e,this.uint16[i+2]=r,this.uint16[i+3]=n,t},e}(Zn);pa.prototype.bytesPerElement=8,dn("StructArrayLayout1ul2ui8",pa);var da=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var a=3*t;return this.uint16[a+0]=e,this.uint16[a+1]=r,this.uint16[a+2]=n,t},e}(Zn);da.prototype.bytesPerElement=6,dn("StructArrayLayout3ui6",da);var ga=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.uint16[n+0]=e,this.uint16[n+1]=r,t},e}(Zn);ga.prototype.bytesPerElement=4,dn("StructArrayLayout2ui4",ga);var va=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.uint16[r+0]=e,t},e}(Zn);va.prototype.bytesPerElement=2,dn("StructArrayLayout1ui2",va);var ma=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.float32[n+0]=e,this.float32[n+1]=r,t},e}(Zn);ma.prototype.bytesPerElement=8,dn("StructArrayLayout2f8",ma);var ya=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,a){var i=4*t;return this.float32[i+0]=e,this.float32[i+1]=r,this.float32[i+2]=n,this.float32[i+3]=a,t},e}(Zn);ya.prototype.bytesPerElement=16,dn("StructArrayLayout4f16",ya);var xa=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorPointX:{configurable:!0},anchorPointY:{configurable:!0},x1:{configurable:!0},y1:{configurable:!0},x2:{configurable:!0},y2:{configurable:!0},featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0},radius:{configurable:!0},signedDistanceFromAnchor:{configurable:!0},anchorPoint:{configurable:!0}};return r.anchorPointX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorPointX.set=function(t){this._structArray.int16[this._pos2+0]=t},r.anchorPointY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorPointY.set=function(t){this._structArray.int16[this._pos2+1]=t},r.x1.get=function(){return this._structArray.int16[this._pos2+2]},r.x1.set=function(t){this._structArray.int16[this._pos2+2]=t},r.y1.get=function(){return this._structArray.int16[this._pos2+3]},r.y1.set=function(t){this._structArray.int16[this._pos2+3]=t},r.x2.get=function(){return this._structArray.int16[this._pos2+4]},r.x2.set=function(t){this._structArray.int16[this._pos2+4]=t},r.y2.get=function(){return this._structArray.int16[this._pos2+5]},r.y2.set=function(t){this._structArray.int16[this._pos2+5]=t},r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.featureIndex.set=function(t){this._structArray.uint32[this._pos4+3]=t},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+8]},r.sourceLayerIndex.set=function(t){this._structArray.uint16[this._pos2+8]=t},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.bucketIndex.set=function(t){this._structArray.uint16[this._pos2+9]=t},r.radius.get=function(){return this._structArray.int16[this._pos2+10]},r.radius.set=function(t){this._structArray.int16[this._pos2+10]=t},r.signedDistanceFromAnchor.get=function(){return this._structArray.int16[this._pos2+11]},r.signedDistanceFromAnchor.set=function(t){this._structArray.int16[this._pos2+11]=t},r.anchorPoint.get=function(){return new a(this.anchorPointX,this.anchorPointY)},Object.defineProperties(e.prototype,r),e}(Xn);xa.prototype.size=24;var ba=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new xa(this,t)},e}(oa);dn("CollisionBoxArray",ba);var _a=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},glyphStartIndex:{configurable:!0},numGlyphs:{configurable:!0},vertexStartIndex:{configurable:!0},lineStartIndex:{configurable:!0},lineLength:{configurable:!0},segment:{configurable:!0},lowerSize:{configurable:!0},upperSize:{configurable:!0},lineOffsetX:{configurable:!0},lineOffsetY:{configurable:!0},writingMode:{configurable:!0},placedOrientation:{configurable:!0},hidden:{configurable:!0},crossTileID:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorX.set=function(t){this._structArray.int16[this._pos2+0]=t},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorY.set=function(t){this._structArray.int16[this._pos2+1]=t},r.glyphStartIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.glyphStartIndex.set=function(t){this._structArray.uint16[this._pos2+2]=t},r.numGlyphs.get=function(){return this._structArray.uint16[this._pos2+3]},r.numGlyphs.set=function(t){this._structArray.uint16[this._pos2+3]=t},r.vertexStartIndex.get=function(){return this._structArray.uint32[this._pos4+2]},r.vertexStartIndex.set=function(t){this._structArray.uint32[this._pos4+2]=t},r.lineStartIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.lineStartIndex.set=function(t){this._structArray.uint32[this._pos4+3]=t},r.lineLength.get=function(){return this._structArray.uint32[this._pos4+4]},r.lineLength.set=function(t){this._structArray.uint32[this._pos4+4]=t},r.segment.get=function(){return this._structArray.uint16[this._pos2+10]},r.segment.set=function(t){this._structArray.uint16[this._pos2+10]=t},r.lowerSize.get=function(){return this._structArray.uint16[this._pos2+11]},r.lowerSize.set=function(t){this._structArray.uint16[this._pos2+11]=t},r.upperSize.get=function(){return this._structArray.uint16[this._pos2+12]},r.upperSize.set=function(t){this._structArray.uint16[this._pos2+12]=t},r.lineOffsetX.get=function(){return this._structArray.float32[this._pos4+7]},r.lineOffsetX.set=function(t){this._structArray.float32[this._pos4+7]=t},r.lineOffsetY.get=function(){return this._structArray.float32[this._pos4+8]},r.lineOffsetY.set=function(t){this._structArray.float32[this._pos4+8]=t},r.writingMode.get=function(){return this._structArray.uint8[this._pos1+36]},r.writingMode.set=function(t){this._structArray.uint8[this._pos1+36]=t},r.placedOrientation.get=function(){return this._structArray.uint8[this._pos1+37]},r.placedOrientation.set=function(t){this._structArray.uint8[this._pos1+37]=t},r.hidden.get=function(){return this._structArray.uint8[this._pos1+38]},r.hidden.set=function(t){this._structArray.uint8[this._pos1+38]=t},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+10]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+10]=t},Object.defineProperties(e.prototype,r),e}(Xn);_a.prototype.size=44;var wa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new _a(this,t)},e}(ca);dn("PlacedSymbolArray",wa);var ka=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},rightJustifiedTextSymbolIndex:{configurable:!0},centerJustifiedTextSymbolIndex:{configurable:!0},leftJustifiedTextSymbolIndex:{configurable:!0},verticalPlacedTextSymbolIndex:{configurable:!0},key:{configurable:!0},textBoxStartIndex:{configurable:!0},textBoxEndIndex:{configurable:!0},verticalTextBoxStartIndex:{configurable:!0},verticalTextBoxEndIndex:{configurable:!0},iconBoxStartIndex:{configurable:!0},iconBoxEndIndex:{configurable:!0},featureIndex:{configurable:!0},numHorizontalGlyphVertices:{configurable:!0},numVerticalGlyphVertices:{configurable:!0},numIconVertices:{configurable:!0},crossTileID:{configurable:!0},textBoxScale:{configurable:!0},radialTextOffset:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorX.set=function(t){this._structArray.int16[this._pos2+0]=t},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorY.set=function(t){this._structArray.int16[this._pos2+1]=t},r.rightJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+2]},r.rightJustifiedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+2]=t},r.centerJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+3]},r.centerJustifiedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+3]=t},r.leftJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+4]},r.leftJustifiedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+4]=t},r.verticalPlacedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+5]},r.verticalPlacedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+5]=t},r.key.get=function(){return this._structArray.uint16[this._pos2+6]},r.key.set=function(t){this._structArray.uint16[this._pos2+6]=t},r.textBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+7]},r.textBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+7]=t},r.textBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+8]},r.textBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+8]=t},r.verticalTextBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.verticalTextBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+9]=t},r.verticalTextBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+10]},r.verticalTextBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+10]=t},r.iconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+11]},r.iconBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+11]=t},r.iconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+12]},r.iconBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+12]=t},r.featureIndex.get=function(){return this._structArray.uint16[this._pos2+13]},r.featureIndex.set=function(t){this._structArray.uint16[this._pos2+13]=t},r.numHorizontalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+14]},r.numHorizontalGlyphVertices.set=function(t){this._structArray.uint16[this._pos2+14]=t},r.numVerticalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+15]},r.numVerticalGlyphVertices.set=function(t){this._structArray.uint16[this._pos2+15]=t},r.numIconVertices.get=function(){return this._structArray.uint16[this._pos2+16]},r.numIconVertices.set=function(t){this._structArray.uint16[this._pos2+16]=t},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+9]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+9]=t},r.textBoxScale.get=function(){return this._structArray.float32[this._pos4+10]},r.textBoxScale.set=function(t){this._structArray.float32[this._pos4+10]=t},r.radialTextOffset.get=function(){return this._structArray.float32[this._pos4+11]},r.radialTextOffset.set=function(t){this._structArray.float32[this._pos4+11]=t},Object.defineProperties(e.prototype,r),e}(Xn);ka.prototype.size=48;var Ta=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new ka(this,t)},e}(ua);dn("SymbolInstanceArray",Ta);var Ma=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={offsetX:{configurable:!0}};return r.offsetX.get=function(){return this._structArray.float32[this._pos4+0]},r.offsetX.set=function(t){this._structArray.float32[this._pos4+0]=t},Object.defineProperties(e.prototype,r),e}(Xn);Ma.prototype.size=4;var Aa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getoffsetX=function(t){return this.float32[1*t+0]},e.prototype.get=function(t){return new Ma(this,t)},e}(ha);dn("GlyphOffsetArray",Aa);var Sa=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={x:{configurable:!0},y:{configurable:!0},tileUnitDistanceFromAnchor:{configurable:!0}};return r.x.get=function(){return this._structArray.int16[this._pos2+0]},r.x.set=function(t){this._structArray.int16[this._pos2+0]=t},r.y.get=function(){return this._structArray.int16[this._pos2+1]},r.y.set=function(t){this._structArray.int16[this._pos2+1]=t},r.tileUnitDistanceFromAnchor.get=function(){return this._structArray.int16[this._pos2+2]},r.tileUnitDistanceFromAnchor.set=function(t){this._structArray.int16[this._pos2+2]=t},Object.defineProperties(e.prototype,r),e}(Xn);Sa.prototype.size=6;var Ea=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getx=function(t){return this.int16[3*t+0]},e.prototype.gety=function(t){return this.int16[3*t+1]},e.prototype.gettileUnitDistanceFromAnchor=function(t){return this.int16[3*t+2]},e.prototype.get=function(t){return new Sa(this,t)},e}(fa);dn("SymbolLineVertexArray",Ea);var La=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0}};return r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+0]},r.featureIndex.set=function(t){this._structArray.uint32[this._pos4+0]=t},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.sourceLayerIndex.set=function(t){this._structArray.uint16[this._pos2+2]=t},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+3]},r.bucketIndex.set=function(t){this._structArray.uint16[this._pos2+3]=t},Object.defineProperties(e.prototype,r),e}(Xn);La.prototype.size=8;var Ca=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new La(this,t)},e}(pa);dn("FeatureIndexArray",Ca);var Pa=Jn([{name:"a_pos",components:2,type:"Int16"}],4).members,Oa=function(t){void 0===t&&(t=[]),this.segments=t};function za(t,e){return 256*(t=c(Math.floor(t),0,255))+c(Math.floor(e),0,255)}Oa.prototype.prepareSegment=function(t,e,r,n){var a=this.segments[this.segments.length-1];return t>Oa.MAX_VERTEX_ARRAY_LENGTH&&w("Max vertices per segment is "+Oa.MAX_VERTEX_ARRAY_LENGTH+": bucket requested "+t),(!a||a.vertexLength+t>Oa.MAX_VERTEX_ARRAY_LENGTH||a.sortKey!==n)&&(a={vertexOffset:e.length,primitiveOffset:r.length,vertexLength:0,primitiveLength:0},void 0!==n&&(a.sortKey=n),this.segments.push(a)),a},Oa.prototype.get=function(){return this.segments},Oa.prototype.destroy=function(){for(var t=0,e=this.segments;t<e.length;t+=1){var r=e[t];for(var n in r.vaos)r.vaos[n].destroy()}},Oa.simpleSegment=function(t,e,r,n){return new Oa([{vertexOffset:t,primitiveOffset:e,vertexLength:r,primitiveLength:n,vaos:{},sortKey:0}])},Oa.MAX_VERTEX_ARRAY_LENGTH=Math.pow(2,16)-1,dn("SegmentVector",Oa);var Ia=function(){this.ids=[],this.positions=[],this.indexed=!1};function Da(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}Ia.prototype.add=function(t,e,r,n){this.ids.push(t),this.positions.push(e,r,n)},Ia.prototype.getPositions=function(t){for(var e=0,r=this.ids.length-1;e<r;){var n=e+r>>1;this.ids[n]>=t?r=n:e=n+1}for(var a=[];this.ids[e]===t;){var i=this.positions[3*e],o=this.positions[3*e+1],s=this.positions[3*e+2];a.push({index:i,start:o,end:s}),e++}return a},Ia.serialize=function(t,e){var r=new Float64Array(t.ids),n=new Uint32Array(t.positions);return function t(e,r,n,a){if(!(n>=a)){for(var i=e[n+a>>1],o=n-1,s=a+1;;){do{o++}while(e[o]<i);do{s--}while(e[s]>i);if(o>=s)break;Da(e,o,s),Da(r,3*o,3*s),Da(r,3*o+1,3*s+1),Da(r,3*o+2,3*s+2)}t(e,r,n,s),t(e,r,s+1,a)}}(r,n,0,r.length-1),e.push(r.buffer,n.buffer),{ids:r,positions:n}},Ia.deserialize=function(t){var e=new Ia;return e.ids=t.ids,e.positions=t.positions,e.indexed=!0,e},dn("FeaturePositionMap",Ia);var Ra=function(t,e){this.gl=t.gl,this.location=e},Fa=function(t){function e(e,r){t.call(this,e,r),this.current=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1i(this.location,t))},e}(Ra),Ba=function(t){function e(e,r){t.call(this,e,r),this.current=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1f(this.location,t))},e}(Ra),Na=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]||(this.current=t,this.gl.uniform2f(this.location,t[0],t[1]))},e}(Ra),ja=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]||(this.current=t,this.gl.uniform3f(this.location,t[0],t[1],t[2]))},e}(Ra),Va=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]&&t[3]===this.current[3]||(this.current=t,this.gl.uniform4f(this.location,t[0],t[1],t[2],t[3]))},e}(Ra),Ua=function(t){function e(e,r){t.call(this,e,r),this.current=Wt.transparent}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t.r===this.current.r&&t.g===this.current.g&&t.b===this.current.b&&t.a===this.current.a||(this.current=t,this.gl.uniform4f(this.location,t.r,t.g,t.b,t.a))},e}(Ra),qa=new Float32Array(16),Ha=function(t){function e(e,r){t.call(this,e,r),this.current=qa}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){if(t[12]!==this.current[12]||t[0]!==this.current[0])return this.current=t,void this.gl.uniformMatrix4fv(this.location,!1,t);for(var e=1;e<16;e++)if(t[e]!==this.current[e]){this.current=t,this.gl.uniformMatrix4fv(this.location,!1,t);break}},e}(Ra);function Ga(t){return[za(255*t.r,255*t.g),za(255*t.b,255*t.a)]}var Ya=function(t,e,r){this.value=t,this.names=e,this.uniformNames=this.names.map(function(t){return"u_"+t}),this.type=r,this.maxValue=-1/0};Ya.prototype.defines=function(){return this.names.map(function(t){return"#define HAS_UNIFORM_u_"+t})},Ya.prototype.setConstantPatternPositions=function(){},Ya.prototype.populatePaintArray=function(){},Ya.prototype.updatePaintArray=function(){},Ya.prototype.upload=function(){},Ya.prototype.destroy=function(){},Ya.prototype.setUniforms=function(t,e,r,n){e.set(n.constantOr(this.value))},Ya.prototype.getBinding=function(t,e){return"color"===this.type?new Ua(t,e):new Ba(t,e)},Ya.serialize=function(t){var e=t.value,r=t.names,n=t.type;return{value:vn(e),names:r,type:n}},Ya.deserialize=function(t){var e=t.value,r=t.names,n=t.type;return new Ya(mn(e),r,n)};var Wa=function(t,e,r){this.value=t,this.names=e,this.uniformNames=this.names.map(function(t){return"u_"+t}),this.type=r,this.maxValue=-1/0,this.patternPositions={patternTo:null,patternFrom:null}};Wa.prototype.defines=function(){return this.names.map(function(t){return"#define HAS_UNIFORM_u_"+t})},Wa.prototype.populatePaintArray=function(){},Wa.prototype.updatePaintArray=function(){},Wa.prototype.upload=function(){},Wa.prototype.destroy=function(){},Wa.prototype.setConstantPatternPositions=function(t,e){this.patternPositions.patternTo=t.tlbr,this.patternPositions.patternFrom=e.tlbr},Wa.prototype.setUniforms=function(t,e,r,n,a){var i=this.patternPositions;"u_pattern_to"===a&&i.patternTo&&e.set(i.patternTo),"u_pattern_from"===a&&i.patternFrom&&e.set(i.patternFrom)},Wa.prototype.getBinding=function(t,e){return new Va(t,e)};var Xa=function(t,e,r,n){this.expression=t,this.names=e,this.type=r,this.uniformNames=this.names.map(function(t){return"a_"+t}),this.maxValue=-1/0,this.paintVertexAttributes=e.map(function(t){return{name:"a_"+t,type:"Float32",components:"color"===r?2:1,offset:0}}),this.paintVertexArray=new n};Xa.prototype.defines=function(){return[]},Xa.prototype.setConstantPatternPositions=function(){},Xa.prototype.populatePaintArray=function(t,e,r,n){var a=this.paintVertexArray,i=a.length;a.reserve(t);var o=this.expression.evaluate(new Pn(0),e,{},n);if("color"===this.type)for(var s=Ga(o),l=i;l<t;l++)a.emplaceBack(s[0],s[1]);else{for(var c=i;c<t;c++)a.emplaceBack(o);this.maxValue=Math.max(this.maxValue,o)}},Xa.prototype.updatePaintArray=function(t,e,r,n){var a=this.paintVertexArray,i=this.expression.evaluate({zoom:0},r,n);if("color"===this.type)for(var o=Ga(i),s=t;s<e;s++)a.emplace(s,o[0],o[1]);else{for(var l=t;l<e;l++)a.emplace(l,i);this.maxValue=Math.max(this.maxValue,i)}},Xa.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},Xa.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()},Xa.prototype.setUniforms=function(t,e){e.set(0)},Xa.prototype.getBinding=function(t,e){return new Ba(t,e)};var Za=function(t,e,r,n,a,i){this.expression=t,this.names=e,this.uniformNames=this.names.map(function(t){return"u_"+t+"_t"}),this.type=r,this.useIntegerZoom=n,this.zoom=a,this.maxValue=-1/0;var o=i;this.paintVertexAttributes=e.map(function(t){return{name:"a_"+t,type:"Float32",components:"color"===r?4:2,offset:0}}),this.paintVertexArray=new o};Za.prototype.defines=function(){return[]},Za.prototype.setConstantPatternPositions=function(){},Za.prototype.populatePaintArray=function(t,e,r,n){var a=this.paintVertexArray,i=a.length;a.reserve(t);var o=this.expression.evaluate(new Pn(this.zoom),e,{},n),s=this.expression.evaluate(new Pn(this.zoom+1),e,{},n);if("color"===this.type)for(var l=Ga(o),c=Ga(s),u=i;u<t;u++)a.emplaceBack(l[0],l[1],c[0],c[1]);else{for(var h=i;h<t;h++)a.emplaceBack(o,s);this.maxValue=Math.max(this.maxValue,o,s)}},Za.prototype.updatePaintArray=function(t,e,r,n){var a=this.paintVertexArray,i=this.expression.evaluate({zoom:this.zoom},r,n),o=this.expression.evaluate({zoom:this.zoom+1},r,n);if("color"===this.type)for(var s=Ga(i),l=Ga(o),c=t;c<e;c++)a.emplace(c,s[0],s[1],l[0],l[1]);else{for(var u=t;u<e;u++)a.emplace(u,i,o);this.maxValue=Math.max(this.maxValue,i,o)}},Za.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},Za.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()},Za.prototype.interpolationFactor=function(t){return this.useIntegerZoom?this.expression.interpolationFactor(Math.floor(t),this.zoom,this.zoom+1):this.expression.interpolationFactor(t,this.zoom,this.zoom+1)},Za.prototype.setUniforms=function(t,e,r){e.set(this.interpolationFactor(r.zoom))},Za.prototype.getBinding=function(t,e){return new Ba(t,e)};var Ja=function(t,e,r,n,a,i,o){this.expression=t,this.names=e,this.type=r,this.uniformNames=this.names.map(function(t){return"u_"+t+"_t"}),this.useIntegerZoom=n,this.zoom=a,this.maxValue=-1/0,this.layerId=o,this.paintVertexAttributes=e.map(function(t){return{name:"a_"+t,type:"Uint16",components:4,offset:0}}),this.zoomInPaintVertexArray=new i,this.zoomOutPaintVertexArray=new i};Ja.prototype.defines=function(){return[]},Ja.prototype.setConstantPatternPositions=function(){},Ja.prototype.populatePaintArray=function(t,e,r){var n=this.zoomInPaintVertexArray,a=this.zoomOutPaintVertexArray,i=this.layerId,o=n.length;if(n.reserve(t),a.reserve(t),r&&e.patterns&&e.patterns[i]){var s=e.patterns[i],l=s.min,c=s.mid,u=s.max,h=r[l],f=r[c],p=r[u];if(!h||!f||!p)return;for(var d=o;d<t;d++)n.emplaceBack(f.tl[0],f.tl[1],f.br[0],f.br[1],h.tl[0],h.tl[1],h.br[0],h.br[1]),a.emplaceBack(f.tl[0],f.tl[1],f.br[0],f.br[1],p.tl[0],p.tl[1],p.br[0],p.br[1])}},Ja.prototype.updatePaintArray=function(t,e,r,n,a){var i=this.zoomInPaintVertexArray,o=this.zoomOutPaintVertexArray,s=this.layerId;if(a&&r.patterns&&r.patterns[s]){var l=r.patterns[s],c=l.min,u=l.mid,h=l.max,f=a[c],p=a[u],d=a[h];if(!f||!p||!d)return;for(var g=t;g<e;g++)i.emplace(g,p.tl[0],p.tl[1],p.br[0],p.br[1],f.tl[0],f.tl[1],f.br[0],f.br[1]),o.emplace(g,p.tl[0],p.tl[1],p.br[0],p.br[1],d.tl[0],d.tl[1],d.br[0],d.br[1])}},Ja.prototype.upload=function(t){this.zoomInPaintVertexArray&&this.zoomInPaintVertexArray.arrayBuffer&&this.zoomOutPaintVertexArray&&this.zoomOutPaintVertexArray.arrayBuffer&&(this.zoomInPaintVertexBuffer=t.createVertexBuffer(this.zoomInPaintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent),this.zoomOutPaintVertexBuffer=t.createVertexBuffer(this.zoomOutPaintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},Ja.prototype.destroy=function(){this.zoomOutPaintVertexBuffer&&this.zoomOutPaintVertexBuffer.destroy(),this.zoomInPaintVertexBuffer&&this.zoomInPaintVertexBuffer.destroy()},Ja.prototype.setUniforms=function(t,e){e.set(0)},Ja.prototype.getBinding=function(t,e){return new Ba(t,e)};var Ka=function(){this.binders={},this.cacheKey="",this._buffers=[],this._featureMap=new Ia,this._bufferOffset=0};Ka.createDynamic=function(t,e,r){var n=new Ka,a=[];for(var i in t.paint._values)if(r(i)){var o=t.paint.get(i);if(o instanceof Bn&&ur(o.property.specification)){var s=$a(i,t.type),l=o.property.specification.type,c=o.property.useIntegerZoom;if("cross-faded"===o.property.specification["property-type"]||"cross-faded-data-driven"===o.property.specification["property-type"])if("constant"===o.value.kind)n.binders[i]=new Wa(o.value.value,s,l),a.push("/u_"+i);else{var u=ti(i,l,"source");n.binders[i]=new Ja(o.value,s,l,c,e,u,t.id),a.push("/a_"+i)}else if("constant"===o.value.kind)n.binders[i]=new Ya(o.value.value,s,l),a.push("/u_"+i);else if("source"===o.value.kind){var h=ti(i,l,"source");n.binders[i]=new Xa(o.value,s,l,h),a.push("/a_"+i)}else{var f=ti(i,l,"composite");n.binders[i]=new Za(o.value,s,l,c,e,f),a.push("/z_"+i)}}}return n.cacheKey=a.sort().join(""),n},Ka.prototype.populatePaintArrays=function(t,e,r,n,a){for(var i in this.binders)this.binders[i].populatePaintArray(t,e,n,a);void 0!==e.id&&this._featureMap.add(+e.id,r,this._bufferOffset,t),this._bufferOffset=t},Ka.prototype.setConstantPatternPositions=function(t,e){for(var r in this.binders)this.binders[r].setConstantPatternPositions(t,e)},Ka.prototype.updatePaintArrays=function(t,e,r,n){var a=!1;for(var i in t)for(var o=0,s=this._featureMap.getPositions(+i);o<s.length;o+=1){var l=s[o],c=e.feature(l.index);for(var u in this.binders){var h=this.binders[u];if(!(h instanceof Ya||h instanceof Wa)&&!0===h.expression.isStateDependent){var f=r.paint.get(u);h.expression=f.value,h.updatePaintArray(l.start,l.end,c,t[i],n),a=!0}}}return a},Ka.prototype.defines=function(){var t=[];for(var e in this.binders)t.push.apply(t,this.binders[e].defines());return t},Ka.prototype.getPaintVertexBuffers=function(){return this._buffers},Ka.prototype.getUniforms=function(t,e){var r=[];for(var n in this.binders)for(var a=this.binders[n],i=0,o=a.uniformNames;i<o.length;i+=1){var s=o[i];if(e[s]){var l=a.getBinding(t,e[s]);r.push({name:s,property:n,binding:l})}}return r},Ka.prototype.setUniforms=function(t,e,r,n){for(var a=0,i=e;a<i.length;a+=1){var o=i[a],s=o.name,l=o.property,c=o.binding;this.binders[l].setUniforms(t,c,n,r.get(l),s)}},Ka.prototype.updatePatternPaintBuffers=function(t){var e=[];for(var r in this.binders){var n=this.binders[r];if(n instanceof Ja){var a=2===t.fromScale?n.zoomInPaintVertexBuffer:n.zoomOutPaintVertexBuffer;a&&e.push(a)}else(n instanceof Xa||n instanceof Za)&&n.paintVertexBuffer&&e.push(n.paintVertexBuffer)}this._buffers=e},Ka.prototype.upload=function(t){for(var e in this.binders)this.binders[e].upload(t);var r=[];for(var n in this.binders){var a=this.binders[n];(a instanceof Xa||a instanceof Za)&&a.paintVertexBuffer&&r.push(a.paintVertexBuffer)}this._buffers=r},Ka.prototype.destroy=function(){for(var t in this.binders)this.binders[t].destroy()};var Qa=function(t,e,r,n){void 0===n&&(n=function(){return!0}),this.programConfigurations={};for(var a=0,i=e;a<i.length;a+=1){var o=i[a];this.programConfigurations[o.id]=Ka.createDynamic(o,r,n),this.programConfigurations[o.id].layoutAttributes=t}this.needsUpload=!1};function $a(t,e){return{"text-opacity":["opacity"],"icon-opacity":["opacity"],"text-color":["fill_color"],"icon-color":["fill_color"],"text-halo-color":["halo_color"],"icon-halo-color":["halo_color"],"text-halo-blur":["halo_blur"],"icon-halo-blur":["halo_blur"],"text-halo-width":["halo_width"],"icon-halo-width":["halo_width"],"line-gap-width":["gapwidth"],"line-pattern":["pattern_to","pattern_from"],"fill-pattern":["pattern_to","pattern_from"],"fill-extrusion-pattern":["pattern_to","pattern_from"]}[t]||[t.replace(e+"-","").replace(/-/g,"_")]}function ti(t,e,r){var n={color:{source:ma,composite:ya},number:{source:ha,composite:ma}},a=function(t){return{"line-pattern":{source:ra,composite:ra},"fill-pattern":{source:ra,composite:ra},"fill-extrusion-pattern":{source:ra,composite:ra}}[t]}(t);return a&&a[r]||n[e][r]}Qa.prototype.populatePaintArrays=function(t,e,r,n,a){for(var i in this.programConfigurations)this.programConfigurations[i].populatePaintArrays(t,e,r,n,a);this.needsUpload=!0},Qa.prototype.updatePaintArrays=function(t,e,r,n){for(var a=0,i=r;a<i.length;a+=1){var o=i[a];this.needsUpload=this.programConfigurations[o.id].updatePaintArrays(t,e,o,n)||this.needsUpload}},Qa.prototype.get=function(t){return this.programConfigurations[t]},Qa.prototype.upload=function(t){if(this.needsUpload){for(var e in this.programConfigurations)this.programConfigurations[e].upload(t);this.needsUpload=!1}},Qa.prototype.destroy=function(){for(var t in this.programConfigurations)this.programConfigurations[t].destroy()},dn("ConstantBinder",Ya),dn("CrossFadedConstantBinder",Wa),dn("SourceExpressionBinder",Xa),dn("CrossFadedCompositeBinder",Ja),dn("CompositeExpressionBinder",Za),dn("ProgramConfiguration",Ka,{omit:["_buffers"]}),dn("ProgramConfigurationSet",Qa);var ei=8192,ri=(15,{min:-1*Math.pow(2,14),max:Math.pow(2,14)-1});function ni(t){for(var e=ei/t.extent,r=t.loadGeometry(),n=0;n<r.length;n++)for(var a=r[n],i=0;i<a.length;i++){var o=a[i];o.x=Math.round(o.x*e),o.y=Math.round(o.y*e),(o.x<ri.min||o.x>ri.max||o.y<ri.min||o.y>ri.max)&&(w("Geometry exceeds allowed extent, reduce your vector tile buffer size"),o.x=c(o.x,ri.min,ri.max),o.y=c(o.y,ri.min,ri.max))}return r}function ai(t,e,r,n,a){t.emplaceBack(2*e+(n+1)/2,2*r+(a+1)/2)}var ii=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new Qn,this.indexArray=new da,this.segments=new Oa,this.programConfigurations=new Qa(Pa,t.layers,t.zoom),this.stateDependentLayerIds=this.layers.filter(function(t){return t.isStateDependent()}).map(function(t){return t.id})};function oi(t,e){for(var r=0;r<t.length;r++)if(gi(e,t[r]))return!0;for(var n=0;n<e.length;n++)if(gi(t,e[n]))return!0;return!!ui(t,e)}function si(t,e,r){return!!gi(t,e)||!!fi(e,t,r)}function li(t,e){if(1===t.length)return di(e,t[0]);for(var r=0;r<e.length;r++)for(var n=e[r],a=0;a<n.length;a++)if(gi(t,n[a]))return!0;for(var i=0;i<t.length;i++)if(di(e,t[i]))return!0;for(var o=0;o<e.length;o++)if(ui(t,e[o]))return!0;return!1}function ci(t,e,r){if(t.length>1){if(ui(t,e))return!0;for(var n=0;n<e.length;n++)if(fi(e[n],t,r))return!0}for(var a=0;a<t.length;a++)if(fi(t[a],e,r))return!0;return!1}function ui(t,e){if(0===t.length||0===e.length)return!1;for(var r=0;r<t.length-1;r++)for(var n=t[r],a=t[r+1],i=0;i<e.length-1;i++)if(hi(n,a,e[i],e[i+1]))return!0;return!1}function hi(t,e,r,n){return k(t,r,n)!==k(e,r,n)&&k(t,e,r)!==k(t,e,n)}function fi(t,e,r){var n=r*r;if(1===e.length)return t.distSqr(e[0])<n;for(var a=1;a<e.length;a++)if(pi(t,e[a-1],e[a])<n)return!0;return!1}function pi(t,e,r){var n=e.distSqr(r);if(0===n)return t.distSqr(e);var a=((t.x-e.x)*(r.x-e.x)+(t.y-e.y)*(r.y-e.y))/n;return a<0?t.distSqr(e):a>1?t.distSqr(r):t.distSqr(r.sub(e)._mult(a)._add(e))}function di(t,e){for(var r,n,a,i=!1,o=0;o<t.length;o++)for(var s=0,l=(r=t[o]).length-1;s<r.length;l=s++)n=r[s],a=r[l],n.y>e.y!=a.y>e.y&&e.x<(a.x-n.x)*(e.y-n.y)/(a.y-n.y)+n.x&&(i=!i);return i}function gi(t,e){for(var r=!1,n=0,a=t.length-1;n<t.length;a=n++){var i=t[n],o=t[a];i.y>e.y!=o.y>e.y&&e.x<(o.x-i.x)*(e.y-i.y)/(o.y-i.y)+i.x&&(r=!r)}return r}function vi(t,e,r){var n=r[0],a=r[2];if(t.x<n.x&&e.x<n.x||t.x>a.x&&e.x>a.x||t.y<n.y&&e.y<n.y||t.y>a.y&&e.y>a.y)return!1;var i=k(t,e,r[0]);return i!==k(t,e,r[1])||i!==k(t,e,r[2])||i!==k(t,e,r[3])}function mi(t,e,r){var n=e.paint.get(t).value;return"constant"===n.kind?n.value:r.programConfigurations.get(e.id).binders[t].maxValue}function yi(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function xi(t,e,r,n,i){if(!e[0]&&!e[1])return t;var o=a.convert(e)._mult(i);"viewport"===r&&o._rotate(-n);for(var s=[],l=0;l<t.length;l++){var c=t[l];s.push(c.sub(o))}return s}ii.prototype.populate=function(t,e){var r=this.layers[0],n=[],a=null;"circle"===r.type&&(a=r.layout.get("circle-sort-key"));for(var i=0,o=t;i<o.length;i+=1){var s=o[i],l=s.feature,c=s.index,u=s.sourceLayerIndex;if(this.layers[0]._featureFilter(new Pn(this.zoom),l)){var h=ni(l),f=a?a.evaluate(l,{}):void 0,p={id:l.id,properties:l.properties,type:l.type,sourceLayerIndex:u,index:c,geometry:h,patterns:{},sortKey:f};n.push(p)}}a&&n.sort(function(t,e){return t.sortKey-e.sortKey});for(var d=0,g=n;d<g.length;d+=1){var v=g[d],m=v,y=m.geometry,x=m.index,b=m.sourceLayerIndex,_=t[x].feature;this.addFeature(v,y,x),e.featureIndex.insert(_,y,x,b,this.index)}},ii.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},ii.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},ii.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},ii.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Pa),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},ii.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},ii.prototype.addFeature=function(t,e,r){for(var n=0,a=e;n<a.length;n+=1)for(var i=0,o=a[n];i<o.length;i+=1){var s=o[i],l=s.x,c=s.y;if(!(l<0||l>=ei||c<0||c>=ei)){var u=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray,t.sortKey),h=u.vertexLength;ai(this.layoutVertexArray,l,c,-1,-1),ai(this.layoutVertexArray,l,c,1,-1),ai(this.layoutVertexArray,l,c,1,1),ai(this.layoutVertexArray,l,c,-1,1),this.indexArray.emplaceBack(h,h+1,h+2),this.indexArray.emplaceBack(h,h+3,h+2),u.vertexLength+=4,u.primitiveLength+=2}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{})},dn("CircleBucket",ii,{omit:["layers"]});var bi,_i=new Gn({"circle-sort-key":new Vn(Tt.layout_circle["circle-sort-key"])}),wi={paint:new Gn({"circle-radius":new Vn(Tt.paint_circle["circle-radius"]),"circle-color":new Vn(Tt.paint_circle["circle-color"]),"circle-blur":new Vn(Tt.paint_circle["circle-blur"]),"circle-opacity":new Vn(Tt.paint_circle["circle-opacity"]),"circle-translate":new jn(Tt.paint_circle["circle-translate"]),"circle-translate-anchor":new jn(Tt.paint_circle["circle-translate-anchor"]),"circle-pitch-scale":new jn(Tt.paint_circle["circle-pitch-scale"]),"circle-pitch-alignment":new jn(Tt.paint_circle["circle-pitch-alignment"]),"circle-stroke-width":new Vn(Tt.paint_circle["circle-stroke-width"]),"circle-stroke-color":new Vn(Tt.paint_circle["circle-stroke-color"]),"circle-stroke-opacity":new Vn(Tt.paint_circle["circle-stroke-opacity"])}),layout:_i},ki="undefined"!=typeof Float32Array?Float32Array:Array;function Ti(t,e,r){var n=e[0],a=e[1],i=e[2],o=e[3];return t[0]=r[0]*n+r[4]*a+r[8]*i+r[12]*o,t[1]=r[1]*n+r[5]*a+r[9]*i+r[13]*o,t[2]=r[2]*n+r[6]*a+r[10]*i+r[14]*o,t[3]=r[3]*n+r[7]*a+r[11]*i+r[15]*o,t}Math.hypot||(Math.hypot=function(){for(var t=arguments,e=0,r=arguments.length;r--;)e+=t[r]*t[r];return Math.sqrt(e)}),bi=new ki(3),ki!=Float32Array&&(bi[0]=0,bi[1]=0,bi[2]=0),function(){var t=new ki(4);ki!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0)}();var Mi=function(t){function e(e){t.call(this,e,wi)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new ii(t)},e.prototype.queryRadius=function(t){var e=t;return mi("circle-radius",this,e)+mi("circle-stroke-width",this,e)+yi(this.paint.get("circle-translate"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,a,i,o,s){for(var l=xi(t,this.paint.get("circle-translate"),this.paint.get("circle-translate-anchor"),i.angle,o),c=this.paint.get("circle-radius").evaluate(e,r)+this.paint.get("circle-stroke-width").evaluate(e,r),u="map"===this.paint.get("circle-pitch-alignment"),h=u?l:function(t,e){return l.map(function(t){return Ai(t,e)})}(0,s),f=u?c*o:c,p=0,d=n;p<d.length;p+=1)for(var g=0,v=d[p];g<v.length;g+=1){var m=v[g],y=u?m:Ai(m,s),x=f,b=Ti([],[m.x,m.y,0,1],s);if("viewport"===this.paint.get("circle-pitch-scale")&&"map"===this.paint.get("circle-pitch-alignment")?x*=b[3]/i.cameraToCenterDistance:"map"===this.paint.get("circle-pitch-scale")&&"viewport"===this.paint.get("circle-pitch-alignment")&&(x*=i.cameraToCenterDistance/b[3]),si(h,y,x))return!0}return!1},e}(Yn);function Ai(t,e){var r=Ti([],[t.x,t.y,0,1],e);return new a(r[0]/r[3],r[1]/r[3])}var Si=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(ii);function Ei(t,e,r,n){var a=e.width,i=e.height;if(n){if(n instanceof Uint8ClampedArray)n=new Uint8Array(n.buffer);else if(n.length!==a*i*r)throw new RangeError("mismatched image size")}else n=new Uint8Array(a*i*r);return t.width=a,t.height=i,t.data=n,t}function Li(t,e,r){var n=e.width,a=e.height;if(n!==t.width||a!==t.height){var i=Ei({},{width:n,height:a},r);Ci(t,i,{x:0,y:0},{x:0,y:0},{width:Math.min(t.width,n),height:Math.min(t.height,a)},r),t.width=n,t.height=a,t.data=i.data}}function Ci(t,e,r,n,a,i){if(0===a.width||0===a.height)return e;if(a.width>t.width||a.height>t.height||r.x>t.width-a.width||r.y>t.height-a.height)throw new RangeError("out of range source coordinates for image copy");if(a.width>e.width||a.height>e.height||n.x>e.width-a.width||n.y>e.height-a.height)throw new RangeError("out of range destination coordinates for image copy");for(var o=t.data,s=e.data,l=0;l<a.height;l++)for(var c=((r.y+l)*t.width+r.x)*i,u=((n.y+l)*e.width+n.x)*i,h=0;h<a.width*i;h++)s[u+h]=o[c+h];return e}dn("HeatmapBucket",Si,{omit:["layers"]});var Pi=function(t,e){Ei(this,t,1,e)};Pi.prototype.resize=function(t){Li(this,t,1)},Pi.prototype.clone=function(){return new Pi({width:this.width,height:this.height},new Uint8Array(this.data))},Pi.copy=function(t,e,r,n,a){Ci(t,e,r,n,a,1)};var Oi=function(t,e){Ei(this,t,4,e)};Oi.prototype.resize=function(t){Li(this,t,4)},Oi.prototype.replace=function(t,e){e?this.data.set(t):t instanceof Uint8ClampedArray?this.data=new Uint8Array(t.buffer):this.data=t},Oi.prototype.clone=function(){return new Oi({width:this.width,height:this.height},new Uint8Array(this.data))},Oi.copy=function(t,e,r,n,a){Ci(t,e,r,n,a,4)},dn("AlphaImage",Pi),dn("RGBAImage",Oi);var zi={paint:new Gn({"heatmap-radius":new Vn(Tt.paint_heatmap["heatmap-radius"]),"heatmap-weight":new Vn(Tt.paint_heatmap["heatmap-weight"]),"heatmap-intensity":new jn(Tt.paint_heatmap["heatmap-intensity"]),"heatmap-color":new Hn(Tt.paint_heatmap["heatmap-color"]),"heatmap-opacity":new jn(Tt.paint_heatmap["heatmap-opacity"])})};function Ii(t,e){for(var r=new Uint8Array(1024),n={},a=0,i=0;a<256;a++,i+=4){n[e]=a/255;var o=t.evaluate(n);r[i+0]=Math.floor(255*o.r/o.a),r[i+1]=Math.floor(255*o.g/o.a),r[i+2]=Math.floor(255*o.b/o.a),r[i+3]=Math.floor(255*o.a)}return new Oi({width:256,height:1},r)}var Di=function(t){function e(e){t.call(this,e,zi),this._updateColorRamp()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new Si(t)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){"heatmap-color"===t&&this._updateColorRamp()},e.prototype._updateColorRamp=function(){var t=this._transitionablePaint._values["heatmap-color"].value.expression;this.colorRamp=Ii(t,"heatmapDensity"),this.colorRampTexture=null},e.prototype.resize=function(){this.heatmapFbo&&(this.heatmapFbo.destroy(),this.heatmapFbo=null)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return!1},e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get("heatmap-opacity")&&"none"!==this.visibility},e}(Yn),Ri={paint:new Gn({"hillshade-illumination-direction":new jn(Tt.paint_hillshade["hillshade-illumination-direction"]),"hillshade-illumination-anchor":new jn(Tt.paint_hillshade["hillshade-illumination-anchor"]),"hillshade-exaggeration":new jn(Tt.paint_hillshade["hillshade-exaggeration"]),"hillshade-shadow-color":new jn(Tt.paint_hillshade["hillshade-shadow-color"]),"hillshade-highlight-color":new jn(Tt.paint_hillshade["hillshade-highlight-color"]),"hillshade-accent-color":new jn(Tt.paint_hillshade["hillshade-accent-color"])})},Fi=function(t){function e(e){t.call(this,e,Ri)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get("hillshade-exaggeration")&&"none"!==this.visibility},e}(Yn),Bi=Jn([{name:"a_pos",components:2,type:"Int16"}],4).members,Ni=Vi,ji=Vi;function Vi(t,e,r){r=r||2;var n,a,i,o,s,l,c,u=e&&e.length,h=u?e[0]*r:t.length,f=Ui(t,0,h,r,!0),p=[];if(!f||f.next===f.prev)return p;if(u&&(f=function(t,e,r,n){var a,i,o,s=[];for(a=0,i=e.length;a<i;a++)(o=Ui(t,e[a]*n,a<i-1?e[a+1]*n:t.length,n,!1))===o.next&&(o.steiner=!0),s.push($i(o));for(s.sort(Zi),a=0;a<s.length;a++)Ji(s[a],r),r=qi(r,r.next);return r}(t,e,f,r)),t.length>80*r){n=i=t[0],a=o=t[1];for(var d=r;d<h;d+=r)(s=t[d])<n&&(n=s),(l=t[d+1])<a&&(a=l),s>i&&(i=s),l>o&&(o=l);c=0!==(c=Math.max(i-n,o-a))?1/c:0}return Hi(f,p,r,n,a,c),p}function Ui(t,e,r,n,a){var i,o;if(a===fo(t,e,r,n)>0)for(i=e;i<r;i+=n)o=co(i,t[i],t[i+1],o);else for(i=r-n;i>=e;i-=n)o=co(i,t[i],t[i+1],o);return o&&no(o,o.next)&&(uo(o),o=o.next),o}function qi(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!no(n,n.next)&&0!==ro(n.prev,n,n.next))n=n.next;else{if(uo(n),(n=e=n.prev)===n.next)break;r=!0}}while(r||n!==e);return e}function Hi(t,e,r,n,a,i,o){if(t){!o&&i&&function(t,e,r,n){var a=t;do{null===a.z&&(a.z=Qi(a.x,a.y,e,r,n)),a.prevZ=a.prev,a.nextZ=a.next,a=a.next}while(a!==t);a.prevZ.nextZ=null,a.prevZ=null,function(t){var e,r,n,a,i,o,s,l,c=1;do{for(r=t,t=null,i=null,o=0;r;){for(o++,n=r,s=0,e=0;e<c&&(s++,n=n.nextZ);e++);for(l=c;s>0||l>0&&n;)0!==s&&(0===l||!n||r.z<=n.z)?(a=r,r=r.nextZ,s--):(a=n,n=n.nextZ,l--),i?i.nextZ=a:t=a,a.prevZ=i,i=a;r=n}i.nextZ=null,c*=2}while(o>1)}(a)}(t,n,a,i);for(var s,l,c=t;t.prev!==t.next;)if(s=t.prev,l=t.next,i?Yi(t,n,a,i):Gi(t))e.push(s.i/r),e.push(t.i/r),e.push(l.i/r),uo(t),t=l.next,c=l.next;else if((t=l)===c){o?1===o?Hi(t=Wi(qi(t),e,r),e,r,n,a,i,2):2===o&&Xi(t,e,r,n,a,i):Hi(qi(t),e,r,n,a,i,1);break}}}function Gi(t){var e=t.prev,r=t,n=t.next;if(ro(e,r,n)>=0)return!1;for(var a=t.next.next;a!==t.prev;){if(to(e.x,e.y,r.x,r.y,n.x,n.y,a.x,a.y)&&ro(a.prev,a,a.next)>=0)return!1;a=a.next}return!0}function Yi(t,e,r,n){var a=t.prev,i=t,o=t.next;if(ro(a,i,o)>=0)return!1;for(var s=a.x<i.x?a.x<o.x?a.x:o.x:i.x<o.x?i.x:o.x,l=a.y<i.y?a.y<o.y?a.y:o.y:i.y<o.y?i.y:o.y,c=a.x>i.x?a.x>o.x?a.x:o.x:i.x>o.x?i.x:o.x,u=a.y>i.y?a.y>o.y?a.y:o.y:i.y>o.y?i.y:o.y,h=Qi(s,l,e,r,n),f=Qi(c,u,e,r,n),p=t.prevZ,d=t.nextZ;p&&p.z>=h&&d&&d.z<=f;){if(p!==t.prev&&p!==t.next&&to(a.x,a.y,i.x,i.y,o.x,o.y,p.x,p.y)&&ro(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,d!==t.prev&&d!==t.next&&to(a.x,a.y,i.x,i.y,o.x,o.y,d.x,d.y)&&ro(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(;p&&p.z>=h;){if(p!==t.prev&&p!==t.next&&to(a.x,a.y,i.x,i.y,o.x,o.y,p.x,p.y)&&ro(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;d&&d.z<=f;){if(d!==t.prev&&d!==t.next&&to(a.x,a.y,i.x,i.y,o.x,o.y,d.x,d.y)&&ro(d.prev,d,d.next)>=0)return!1;d=d.nextZ}return!0}function Wi(t,e,r){var n=t;do{var a=n.prev,i=n.next.next;!no(a,i)&&ao(a,n,n.next,i)&&so(a,i)&&so(i,a)&&(e.push(a.i/r),e.push(n.i/r),e.push(i.i/r),uo(n),uo(n.next),n=t=i),n=n.next}while(n!==t);return qi(n)}function Xi(t,e,r,n,a,i){var o=t;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&eo(o,s)){var l=lo(o,s);return o=qi(o,o.next),l=qi(l,l.next),Hi(o,e,r,n,a,i),void Hi(l,e,r,n,a,i)}s=s.next}o=o.next}while(o!==t)}function Zi(t,e){return t.x-e.x}function Ji(t,e){if(e=function(t,e){var r,n=e,a=t.x,i=t.y,o=-1/0;do{if(i<=n.y&&i>=n.next.y&&n.next.y!==n.y){var s=n.x+(i-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=a&&s>o){if(o=s,s===a){if(i===n.y)return n;if(i===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(a===o)return r;var l,c=r,u=r.x,h=r.y,f=1/0;n=r;do{a>=n.x&&n.x>=u&&a!==n.x&&to(i<h?a:o,i,u,h,i<h?o:a,i,n.x,n.y)&&(l=Math.abs(i-n.y)/(a-n.x),so(n,t)&&(l<f||l===f&&(n.x>r.x||n.x===r.x&&Ki(r,n)))&&(r=n,f=l)),n=n.next}while(n!==c);return r}(t,e)){var r=lo(e,t);qi(r,r.next)}}function Ki(t,e){return ro(t.prev,t,e.prev)<0&&ro(e.next,t,t.next)<0}function Qi(t,e,r,n,a){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*a)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*a)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function $i(t){var e=t,r=t;do{(e.x<r.x||e.x===r.x&&e.y<r.y)&&(r=e),e=e.next}while(e!==t);return r}function to(t,e,r,n,a,i,o,s){return(a-o)*(e-s)-(t-o)*(i-s)>=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(i-s)-(a-o)*(n-s)>=0}function eo(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&ao(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}(t,e)&&(so(t,e)&&so(e,t)&&function(t,e){var r=t,n=!1,a=(t.x+e.x)/2,i=(t.y+e.y)/2;do{r.y>i!=r.next.y>i&&r.next.y!==r.y&&a<(r.next.x-r.x)*(i-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}(t,e)&&(ro(t.prev,t,e.prev)||ro(t,e.prev,e))||no(t,e)&&ro(t.prev,t,t.next)>0&&ro(e.prev,e,e.next)>0)}function ro(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function no(t,e){return t.x===e.x&&t.y===e.y}function ao(t,e,r,n){var a=oo(ro(t,e,r)),i=oo(ro(t,e,n)),o=oo(ro(r,n,t)),s=oo(ro(r,n,e));return a!==i&&o!==s||!(0!==a||!io(t,r,e))||!(0!==i||!io(t,n,e))||!(0!==o||!io(r,t,n))||!(0!==s||!io(r,e,n))}function io(t,e,r){return e.x<=Math.max(t.x,r.x)&&e.x>=Math.min(t.x,r.x)&&e.y<=Math.max(t.y,r.y)&&e.y>=Math.min(t.y,r.y)}function oo(t){return t>0?1:t<0?-1:0}function so(t,e){return ro(t.prev,t,t.next)<0?ro(t,e,t.next)>=0&&ro(t,t.prev,e)>=0:ro(t,e,t.prev)<0||ro(t,t.next,e)<0}function lo(t,e){var r=new ho(t.i,t.x,t.y),n=new ho(e.i,e.x,e.y),a=t.next,i=e.prev;return t.next=e,e.prev=t,r.next=a,a.prev=r,n.next=r,r.prev=n,i.next=n,n.prev=i,n}function co(t,e,r,n){var a=new ho(t,e,r);return n?(a.next=n.next,a.prev=n,n.next.prev=a,n.next=a):(a.prev=a,a.next=a),a}function uo(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function ho(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function fo(t,e,r,n){for(var a=0,i=e,o=r-n;i<r;i+=n)a+=(t[o]-t[i])*(t[i+1]+t[o+1]),o=i;return a}function po(t,e,r,n,a){!function t(e,r,n,a,i){for(;a>n;){if(a-n>600){var o=a-n+1,s=r-n+1,l=Math.log(o),c=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*c*(o-c)/o)*(s-o/2<0?-1:1);t(e,r,Math.max(n,Math.floor(r-s*c/o+u)),Math.min(a,Math.floor(r+(o-s)*c/o+u)),i)}var h=e[r],f=n,p=a;for(go(e,n,r),i(e[a],h)>0&&go(e,n,a);f<p;){for(go(e,f,p),f++,p--;i(e[f],h)<0;)f++;for(;i(e[p],h)>0;)p--}0===i(e[n],h)?go(e,n,p):go(e,++p,a),p<=r&&(n=p+1),r<=p&&(a=p-1)}}(t,e,r||0,n||t.length-1,a||vo)}function go(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function vo(t,e){return t<e?-1:t>e?1:0}function mo(t,e){var r=t.length;if(r<=1)return[t];for(var n,a,i=[],o=0;o<r;o++){var s=T(t[o]);0!==s&&(t[o].area=Math.abs(s),void 0===a&&(a=s<0),a===s<0?(n&&i.push(n),n=[t[o]]):n.push(t[o]))}if(n&&i.push(n),e>1)for(var l=0;l<i.length;l++)i[l].length<=e||(po(i[l],e,1,i[l].length-1,yo),i[l]=i[l].slice(0,e));return i}function yo(t,e){return e.area-t.area}function xo(t,e,r){for(var n=r.patternDependencies,a=!1,i=0,o=e;i<o.length;i+=1){var s=o[i].paint.get(t+"-pattern");s.isConstant()||(a=!0);var l=s.constantOr(null);l&&(a=!0,n[l.to]=!0,n[l.from]=!0)}return a}function bo(t,e,r,n,a){for(var i=a.patternDependencies,o=0,s=e;o<s.length;o+=1){var l=s[o],c=l.paint.get(t+"-pattern").value;if("constant"!==c.kind){var u=c.evaluate({zoom:n-1},r,{}),h=c.evaluate({zoom:n},r,{}),f=c.evaluate({zoom:n+1},r,{});i[u]=!0,i[h]=!0,i[f]=!0,r.patterns[l.id]={min:u,mid:h,max:f}}}return r}Vi.deviation=function(t,e,r,n){var a=e&&e.length,i=a?e[0]*r:t.length,o=Math.abs(fo(t,0,i,r));if(a)for(var s=0,l=e.length;s<l;s++){var c=e[s]*r,u=s<l-1?e[s+1]*r:t.length;o-=Math.abs(fo(t,c,u,r))}var h=0;for(s=0;s<n.length;s+=3){var f=n[s]*r,p=n[s+1]*r,d=n[s+2]*r;h+=Math.abs((t[f]-t[d])*(t[p+1]-t[f+1])-(t[f]-t[p])*(t[d+1]-t[f+1]))}return 0===o&&0===h?0:Math.abs((h-o)/o)},Vi.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},n=0,a=0;a<t.length;a++){for(var i=0;i<t[a].length;i++)for(var o=0;o<e;o++)r.vertices.push(t[a][i][o]);a>0&&(n+=t[a-1].length,r.holes.push(n))}return r},Ni.default=ji;var _o=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.layoutVertexArray=new Qn,this.indexArray=new da,this.indexArray2=new ga,this.programConfigurations=new Qa(Bi,t.layers,t.zoom),this.segments=new Oa,this.segments2=new Oa,this.stateDependentLayerIds=this.layers.filter(function(t){return t.isStateDependent()}).map(function(t){return t.id})};_o.prototype.populate=function(t,e){this.hasPattern=xo("fill",this.layers,e);for(var r=this.layers[0].layout.get("fill-sort-key"),n=[],a=0,i=t;a<i.length;a+=1){var o=i[a],s=o.feature,l=o.index,c=o.sourceLayerIndex;if(this.layers[0]._featureFilter(new Pn(this.zoom),s)){var u=ni(s),h=r?r.evaluate(s,{}):void 0,f={id:s.id,properties:s.properties,type:s.type,sourceLayerIndex:c,index:l,geometry:u,patterns:{},sortKey:h};n.push(f)}}r&&n.sort(function(t,e){return t.sortKey-e.sortKey});for(var p=0,d=n;p<d.length;p+=1){var g=d[p],v=g,m=v.geometry,y=v.index,x=v.sourceLayerIndex;if(this.hasPattern){var b=bo("fill",this.layers,g,this.zoom,e);this.patternFeatures.push(b)}else this.addFeature(g,m,y,{});var _=t[y].feature;e.featureIndex.insert(_,m,y,x,this.index)}},_o.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},_o.prototype.addFeatures=function(t,e){for(var r=0,n=this.patternFeatures;r<n.length;r+=1){var a=n[r];this.addFeature(a,a.geometry,a.index,e)}},_o.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},_o.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},_o.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Bi),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.indexBuffer2=t.createIndexBuffer(this.indexArray2)),this.programConfigurations.upload(t),this.uploaded=!0},_o.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.indexBuffer2.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.segments2.destroy())},_o.prototype.addFeature=function(t,e,r,n){for(var a=0,i=mo(e,500);a<i.length;a+=1){for(var o=i[a],s=0,l=0,c=o;l<c.length;l+=1)s+=c[l].length;for(var u=this.segments.prepareSegment(s,this.layoutVertexArray,this.indexArray),h=u.vertexLength,f=[],p=[],d=0,g=o;d<g.length;d+=1){var v=g[d];if(0!==v.length){v!==o[0]&&p.push(f.length/2);var m=this.segments2.prepareSegment(v.length,this.layoutVertexArray,this.indexArray2),y=m.vertexLength;this.layoutVertexArray.emplaceBack(v[0].x,v[0].y),this.indexArray2.emplaceBack(y+v.length-1,y),f.push(v[0].x),f.push(v[0].y);for(var x=1;x<v.length;x++)this.layoutVertexArray.emplaceBack(v[x].x,v[x].y),this.indexArray2.emplaceBack(y+x-1,y+x),f.push(v[x].x),f.push(v[x].y);m.vertexLength+=v.length,m.primitiveLength+=v.length}}for(var b=Ni(f,p),_=0;_<b.length;_+=3)this.indexArray.emplaceBack(h+b[_],h+b[_+1],h+b[_+2]);u.vertexLength+=s,u.primitiveLength+=b.length/3}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,n)},dn("FillBucket",_o,{omit:["layers","patternFeatures"]});var wo=new Gn({"fill-sort-key":new Vn(Tt.layout_fill["fill-sort-key"])}),ko={paint:new Gn({"fill-antialias":new jn(Tt.paint_fill["fill-antialias"]),"fill-opacity":new Vn(Tt.paint_fill["fill-opacity"]),"fill-color":new Vn(Tt.paint_fill["fill-color"]),"fill-outline-color":new Vn(Tt.paint_fill["fill-outline-color"]),"fill-translate":new jn(Tt.paint_fill["fill-translate"]),"fill-translate-anchor":new jn(Tt.paint_fill["fill-translate-anchor"]),"fill-pattern":new Un(Tt.paint_fill["fill-pattern"])}),layout:wo},To=function(t){function e(e){t.call(this,e,ko)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.recalculate=function(e){t.prototype.recalculate.call(this,e);var r=this.paint._values["fill-outline-color"];"constant"===r.value.kind&&void 0===r.value.value&&(this.paint._values["fill-outline-color"]=this.paint._values["fill-color"])},e.prototype.createBucket=function(t){return new _o(t)},e.prototype.queryRadius=function(){return yi(this.paint.get("fill-translate"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,a,i,o){return li(xi(t,this.paint.get("fill-translate"),this.paint.get("fill-translate-anchor"),i.angle,o),n)},e.prototype.isTileClipped=function(){return!0},e}(Yn),Mo=Jn([{name:"a_pos",components:2,type:"Int16"},{name:"a_normal_ed",components:4,type:"Int16"}],4).members,Ao=So;function So(t,e,r,n,a){this.properties={},this.extent=r,this.type=0,this._pbf=t,this._geometry=-1,this._keys=n,this._values=a,t.readFields(Eo,this,e)}function Eo(t,e,r){1==t?e.id=r.readVarint():2==t?function(t,e){for(var r=t.readVarint()+t.pos;t.pos<r;){var n=e._keys[t.readVarint()],a=e._values[t.readVarint()];e.properties[n]=a}}(r,e):3==t?e.type=r.readVarint():4==t&&(e._geometry=r.pos)}function Lo(t){for(var e,r,n=0,a=0,i=t.length,o=i-1;a<i;o=a++)e=t[a],n+=((r=t[o]).x-e.x)*(e.y+r.y);return n}So.types=["Unknown","Point","LineString","Polygon"],So.prototype.loadGeometry=function(){var t=this._pbf;t.pos=this._geometry;for(var e,r=t.readVarint()+t.pos,n=1,i=0,o=0,s=0,l=[];t.pos<r;){if(i<=0){var c=t.readVarint();n=7&c,i=c>>3}if(i--,1===n||2===n)o+=t.readSVarint(),s+=t.readSVarint(),1===n&&(e&&l.push(e),e=[]),e.push(new a(o,s));else{if(7!==n)throw new Error("unknown command "+n);e&&e.push(e[0].clone())}}return e&&l.push(e),l},So.prototype.bbox=function(){var t=this._pbf;t.pos=this._geometry;for(var e=t.readVarint()+t.pos,r=1,n=0,a=0,i=0,o=1/0,s=-1/0,l=1/0,c=-1/0;t.pos<e;){if(n<=0){var u=t.readVarint();r=7&u,n=u>>3}if(n--,1===r||2===r)(a+=t.readSVarint())<o&&(o=a),a>s&&(s=a),(i+=t.readSVarint())<l&&(l=i),i>c&&(c=i);else if(7!==r)throw new Error("unknown command "+r)}return[o,l,s,c]},So.prototype.toGeoJSON=function(t,e,r){var n,a,i=this.extent*Math.pow(2,r),o=this.extent*t,s=this.extent*e,l=this.loadGeometry(),c=So.types[this.type];function u(t){for(var e=0;e<t.length;e++){var r=t[e],n=180-360*(r.y+s)/i;t[e]=[360*(r.x+o)/i-180,360/Math.PI*Math.atan(Math.exp(n*Math.PI/180))-90]}}switch(this.type){case 1:var h=[];for(n=0;n<l.length;n++)h[n]=l[n][0];u(l=h);break;case 2:for(n=0;n<l.length;n++)u(l[n]);break;case 3:for(l=function(t){var e=t.length;if(e<=1)return[t];for(var r,n,a=[],i=0;i<e;i++){var o=Lo(t[i]);0!==o&&(void 0===n&&(n=o<0),n===o<0?(r&&a.push(r),r=[t[i]]):r.push(t[i]))}return r&&a.push(r),a}(l),n=0;n<l.length;n++)for(a=0;a<l[n].length;a++)u(l[n][a])}1===l.length?l=l[0]:c="Multi"+c;var f={type:"Feature",geometry:{type:c,coordinates:l},properties:this.properties};return"id"in this&&(f.id=this.id),f};var Co=Po;function Po(t,e){this.version=1,this.name=null,this.extent=4096,this.length=0,this._pbf=t,this._keys=[],this._values=[],this._features=[],t.readFields(Oo,this,e),this.length=this._features.length}function Oo(t,e,r){15===t?e.version=r.readVarint():1===t?e.name=r.readString():5===t?e.extent=r.readVarint():2===t?e._features.push(r.pos):3===t?e._keys.push(r.readString()):4===t&&e._values.push(function(t){for(var e=null,r=t.readVarint()+t.pos;t.pos<r;){var n=t.readVarint()>>3;e=1===n?t.readString():2===n?t.readFloat():3===n?t.readDouble():4===n?t.readVarint64():5===n?t.readVarint():6===n?t.readSVarint():7===n?t.readBoolean():null}return e}(r))}function zo(t,e,r){if(3===t){var n=new Co(r,r.readVarint()+r.pos);n.length&&(e[n.name]=n)}}Po.prototype.feature=function(t){if(t<0||t>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[t];var e=this._pbf.readVarint()+this._pbf.pos;return new Ao(this._pbf,e,this.extent,this._keys,this._values)};var Io={VectorTile:function(t,e){this.layers=t.readFields(zo,{},e)},VectorTileFeature:Ao,VectorTileLayer:Co},Do=Io.VectorTileFeature.types,Ro=Math.pow(2,13);function Fo(t,e,r,n,a,i,o,s){t.emplaceBack(e,r,2*Math.floor(n*Ro)+o,a*Ro*2,i*Ro*2,Math.round(s))}var Bo=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new ta,this.indexArray=new da,this.programConfigurations=new Qa(Mo,t.layers,t.zoom),this.segments=new Oa,this.stateDependentLayerIds=this.layers.filter(function(t){return t.isStateDependent()}).map(function(t){return t.id})};function No(t,e){return t.x===e.x&&(t.x<0||t.x>ei)||t.y===e.y&&(t.y<0||t.y>ei)}function jo(t){return t.every(function(t){return t.x<0})||t.every(function(t){return t.x>ei})||t.every(function(t){return t.y<0})||t.every(function(t){return t.y>ei})}Bo.prototype.populate=function(t,e){this.features=[],this.hasPattern=xo("fill-extrusion",this.layers,e);for(var r=0,n=t;r<n.length;r+=1){var a=n[r],i=a.feature,o=a.index,s=a.sourceLayerIndex;if(this.layers[0]._featureFilter(new Pn(this.zoom),i)){var l=ni(i),c={sourceLayerIndex:s,index:o,geometry:l,properties:i.properties,type:i.type,patterns:{}};void 0!==i.id&&(c.id=i.id),this.hasPattern?this.features.push(bo("fill-extrusion",this.layers,c,this.zoom,e)):this.addFeature(c,l,o,{}),e.featureIndex.insert(i,l,o,s,this.index,!0)}}},Bo.prototype.addFeatures=function(t,e){for(var r=0,n=this.features;r<n.length;r+=1){var a=n[r],i=a.geometry;this.addFeature(a,i,a.index,e)}},Bo.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},Bo.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},Bo.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},Bo.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Mo),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},Bo.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},Bo.prototype.addFeature=function(t,e,r,n){for(var a=0,i=mo(e,500);a<i.length;a+=1){for(var o=i[a],s=0,l=0,c=o;l<c.length;l+=1)s+=c[l].length;for(var u=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray),h=0,f=o;h<f.length;h+=1){var p=f[h];if(0!==p.length&&!jo(p))for(var d=0,g=0;g<p.length;g++){var v=p[g];if(g>=1){var m=p[g-1];if(!No(v,m)){u.vertexLength+4>Oa.MAX_VERTEX_ARRAY_LENGTH&&(u=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));var y=v.sub(m)._perp()._unit(),x=m.dist(v);d+x>32768&&(d=0),Fo(this.layoutVertexArray,v.x,v.y,y.x,y.y,0,0,d),Fo(this.layoutVertexArray,v.x,v.y,y.x,y.y,0,1,d),d+=x,Fo(this.layoutVertexArray,m.x,m.y,y.x,y.y,0,0,d),Fo(this.layoutVertexArray,m.x,m.y,y.x,y.y,0,1,d);var b=u.vertexLength;this.indexArray.emplaceBack(b,b+2,b+1),this.indexArray.emplaceBack(b+1,b+2,b+3),u.vertexLength+=4,u.primitiveLength+=2}}}}if(u.vertexLength+s>Oa.MAX_VERTEX_ARRAY_LENGTH&&(u=this.segments.prepareSegment(s,this.layoutVertexArray,this.indexArray)),"Polygon"===Do[t.type]){for(var _=[],w=[],k=u.vertexLength,T=0,M=o;T<M.length;T+=1){var A=M[T];if(0!==A.length){A!==o[0]&&w.push(_.length/2);for(var S=0;S<A.length;S++){var E=A[S];Fo(this.layoutVertexArray,E.x,E.y,0,0,1,1,0),_.push(E.x),_.push(E.y)}}}for(var L=Ni(_,w),C=0;C<L.length;C+=3)this.indexArray.emplaceBack(k+L[C],k+L[C+2],k+L[C+1]);u.primitiveLength+=L.length/3,u.vertexLength+=s}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,n)},dn("FillExtrusionBucket",Bo,{omit:["layers","features"]});var Vo={paint:new Gn({"fill-extrusion-opacity":new jn(Tt["paint_fill-extrusion"]["fill-extrusion-opacity"]),"fill-extrusion-color":new Vn(Tt["paint_fill-extrusion"]["fill-extrusion-color"]),"fill-extrusion-translate":new jn(Tt["paint_fill-extrusion"]["fill-extrusion-translate"]),"fill-extrusion-translate-anchor":new jn(Tt["paint_fill-extrusion"]["fill-extrusion-translate-anchor"]),"fill-extrusion-pattern":new Un(Tt["paint_fill-extrusion"]["fill-extrusion-pattern"]),"fill-extrusion-height":new Vn(Tt["paint_fill-extrusion"]["fill-extrusion-height"]),"fill-extrusion-base":new Vn(Tt["paint_fill-extrusion"]["fill-extrusion-base"]),"fill-extrusion-vertical-gradient":new jn(Tt["paint_fill-extrusion"]["fill-extrusion-vertical-gradient"])})},Uo=function(t){function e(e){t.call(this,e,Vo)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new Bo(t)},e.prototype.queryRadius=function(){return yi(this.paint.get("fill-extrusion-translate"))},e.prototype.is3D=function(){return!0},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,o,s,l){var c=xi(t,this.paint.get("fill-extrusion-translate"),this.paint.get("fill-extrusion-translate-anchor"),o.angle,s),u=this.paint.get("fill-extrusion-height").evaluate(e,r),h=this.paint.get("fill-extrusion-base").evaluate(e,r),f=function(t,e,r,n){for(var i=[],o=0,s=t;o<s.length;o+=1){var l=s[o],c=[l.x,l.y,0,1];Ti(c,c,e),i.push(new a(c[0]/c[3],c[1]/c[3]))}return i}(c,l),p=function(t,e,r,n){for(var i=[],o=[],s=n[8]*e,l=n[9]*e,c=n[10]*e,u=n[11]*e,h=n[8]*r,f=n[9]*r,p=n[10]*r,d=n[11]*r,g=0,v=t;g<v.length;g+=1){for(var m=[],y=[],x=0,b=v[g];x<b.length;x+=1){var _=b[x],w=_.x,k=_.y,T=n[0]*w+n[4]*k+n[12],M=n[1]*w+n[5]*k+n[13],A=n[2]*w+n[6]*k+n[14],S=n[3]*w+n[7]*k+n[15],E=A+c,L=S+u,C=T+h,P=M+f,O=A+p,z=S+d,I=new a((T+s)/L,(M+l)/L);I.z=E/L,m.push(I);var D=new a(C/z,P/z);D.z=O/z,y.push(D)}i.push(m),o.push(y)}return[i,o]}(n,h,u,l);return function(t,e,r){var n=1/0;li(r,e)&&(n=Ho(r,e[0]));for(var a=0;a<e.length;a++)for(var i=e[a],o=t[a],s=0;s<i.length-1;s++){var l=i[s],c=i[s+1],u=o[s],h=[l,c,o[s+1],u,l];oi(r,h)&&(n=Math.min(n,Ho(r,h)))}return n!==1/0&&n}(p[0],p[1],f)},e}(Yn);function qo(t,e){return t.x*e.x+t.y*e.y}function Ho(t,e){if(1===t.length){var r=e[0],n=e[1],a=e[3],i=t[0],o=n.sub(r),s=a.sub(r),l=i.sub(r),c=qo(o,o),u=qo(o,s),h=qo(s,s),f=qo(l,o),p=qo(l,s),d=c*h-u*u,g=(h*f-u*p)/d,v=(c*p-u*f)/d,m=1-g-v;return r.z*m+n.z*g+a.z*v}for(var y=1/0,x=0,b=e;x<b.length;x+=1){var _=b[x];y=Math.min(y,_.z)}return y}var Go=Jn([{name:"a_pos_normal",components:2,type:"Int16"},{name:"a_data",components:4,type:"Uint8"}],4).members,Yo=Io.VectorTileFeature.types,Wo=Math.cos(Math.PI/180*37.5),Xo=Math.pow(2,14)/.5,Zo=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.layoutVertexArray=new ea,this.indexArray=new da,this.programConfigurations=new Qa(Go,t.layers,t.zoom),this.segments=new Oa,this.stateDependentLayerIds=this.layers.filter(function(t){return t.isStateDependent()}).map(function(t){return t.id})};Zo.prototype.populate=function(t,e){this.hasPattern=xo("line",this.layers,e);for(var r=this.layers[0].layout.get("line-sort-key"),n=[],a=0,i=t;a<i.length;a+=1){var o=i[a],s=o.feature,l=o.index,c=o.sourceLayerIndex;if(this.layers[0]._featureFilter(new Pn(this.zoom),s)){var u=ni(s),h=r?r.evaluate(s,{}):void 0,f={id:s.id,properties:s.properties,type:s.type,sourceLayerIndex:c,index:l,geometry:u,patterns:{},sortKey:h};n.push(f)}}r&&n.sort(function(t,e){return t.sortKey-e.sortKey});for(var p=0,d=n;p<d.length;p+=1){var g=d[p],v=g,m=v.geometry,y=v.index,x=v.sourceLayerIndex;if(this.hasPattern){var b=bo("line",this.layers,g,this.zoom,e);this.patternFeatures.push(b)}else this.addFeature(g,m,y,{});var _=t[y].feature;e.featureIndex.insert(_,m,y,x,this.index)}},Zo.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},Zo.prototype.addFeatures=function(t,e){for(var r=0,n=this.patternFeatures;r<n.length;r+=1){var a=n[r];this.addFeature(a,a.geometry,a.index,e)}},Zo.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},Zo.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},Zo.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Go),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},Zo.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},Zo.prototype.addFeature=function(t,e,r,n){for(var a=this.layers[0].layout,i=a.get("line-join").evaluate(t,{}),o=a.get("line-cap"),s=a.get("line-miter-limit"),l=a.get("line-round-limit"),c=0,u=e;c<u.length;c+=1){var h=u[c];this.addLine(h,t,i,o,s,l,r,n)}},Zo.prototype.addLine=function(t,e,r,n,a,i,o,s){if(this.distance=0,this.scaledDistance=0,this.totalDistance=0,e.properties&&e.properties.hasOwnProperty("mapbox_clip_start")&&e.properties.hasOwnProperty("mapbox_clip_end")){this.clipStart=+e.properties.mapbox_clip_start,this.clipEnd=+e.properties.mapbox_clip_end;for(var l=0;l<t.length-1;l++)this.totalDistance+=t[l].dist(t[l+1])}for(var c="Polygon"===Yo[e.type],u=t.length;u>=2&&t[u-1].equals(t[u-2]);)u--;for(var h=0;h<u-1&&t[h].equals(t[h+1]);)h++;if(!(u<(c?3:2))){"bevel"===r&&(a=1.05);var f,p=ei/(512*this.overscaling)*15,d=this.segments.prepareSegment(10*u,this.layoutVertexArray,this.indexArray),g=void 0,v=void 0,m=void 0,y=void 0;this.e1=this.e2=-1,c&&(f=t[u-2],y=t[h].sub(f)._unit()._perp());for(var x=h;x<u;x++)if(!(v=c&&x===u-1?t[h+1]:t[x+1])||!t[x].equals(v)){y&&(m=y),f&&(g=f),f=t[x],y=v?v.sub(f)._unit()._perp():m;var b=(m=m||y).add(y);0===b.x&&0===b.y||b._unit();var _=m.x*y.x+m.y*y.y,w=b.x*y.x+b.y*y.y,k=0!==w?1/w:1/0,T=2*Math.sqrt(2-2*w),M=w<Wo&&g&&v,A=m.x*y.y-m.y*y.x>0;if(M&&x>h){var S=f.dist(g);if(S>2*p){var E=f.sub(f.sub(g)._mult(p/S)._round());this.updateDistance(g,E),this.addCurrentVertex(E,m,0,0,d),g=E}}var L=g&&v,C=L?r:c?"butt":n;if(L&&"round"===C&&(k<i?C="miter":k<=2&&(C="fakeround")),"miter"===C&&k>a&&(C="bevel"),"bevel"===C&&(k>2&&(C="flipbevel"),k<a&&(C="miter")),g&&this.updateDistance(g,f),"miter"===C)b._mult(k),this.addCurrentVertex(f,b,0,0,d);else if("flipbevel"===C){if(k>100)b=y.mult(-1);else{var P=k*m.add(y).mag()/m.sub(y).mag();b._perp()._mult(P*(A?-1:1))}this.addCurrentVertex(f,b,0,0,d),this.addCurrentVertex(f,b.mult(-1),0,0,d)}else if("bevel"===C||"fakeround"===C){var O=-Math.sqrt(k*k-1),z=A?O:0,I=A?0:O;if(g&&this.addCurrentVertex(f,m,z,I,d),"fakeround"===C)for(var D=Math.round(180*T/Math.PI/20),R=1;R<D;R++){var F=R/D;if(.5!==F){var B=F-.5;F+=F*B*(F-1)*((1.0904+_*(_*(3.55645-1.43519*_)-3.2452))*B*B+(.848013+_*(.215638*_-1.06021)))}var N=y.sub(m)._mult(F)._add(m)._unit()._mult(A?-1:1);this.addHalfVertex(f,N.x,N.y,!1,A,0,d)}v&&this.addCurrentVertex(f,y,-z,-I,d)}else if("butt"===C)this.addCurrentVertex(f,b,0,0,d);else if("square"===C){var j=g?1:-1;this.addCurrentVertex(f,b,j,j,d)}else"round"===C&&(g&&(this.addCurrentVertex(f,m,0,0,d),this.addCurrentVertex(f,m,1,1,d,!0)),v&&(this.addCurrentVertex(f,y,-1,-1,d,!0),this.addCurrentVertex(f,y,0,0,d)));if(M&&x<u-1){var V=f.dist(v);if(V>2*p){var U=f.add(v.sub(f)._mult(p/V)._round());this.updateDistance(f,U),this.addCurrentVertex(U,y,0,0,d),f=U}}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,e,o,s)}},Zo.prototype.addCurrentVertex=function(t,e,r,n,a,i){void 0===i&&(i=!1);var o=e.x+e.y*r,s=e.y-e.x*r,l=-e.x+e.y*n,c=-e.y-e.x*n;this.addHalfVertex(t,o,s,i,!1,r,a),this.addHalfVertex(t,l,c,i,!0,-n,a),this.distance>Xo/2&&0===this.totalDistance&&(this.distance=0,this.addCurrentVertex(t,e,r,n,a,i))},Zo.prototype.addHalfVertex=function(t,e,r,n,a,i,o){var s=t.x,l=t.y,c=.5*this.scaledDistance;this.layoutVertexArray.emplaceBack((s<<1)+(n?1:0),(l<<1)+(a?1:0),Math.round(63*e)+128,Math.round(63*r)+128,1+(0===i?0:i<0?-1:1)|(63&c)<<2,c>>6);var u=o.vertexLength++;this.e1>=0&&this.e2>=0&&(this.indexArray.emplaceBack(this.e1,this.e2,u),o.primitiveLength++),a?this.e2=u:this.e1=u},Zo.prototype.updateDistance=function(t,e){this.distance+=t.dist(e),this.scaledDistance=this.totalDistance>0?(this.clipStart+(this.clipEnd-this.clipStart)*this.distance/this.totalDistance)*(Xo-1):this.distance},dn("LineBucket",Zo,{omit:["layers","patternFeatures"]});var Jo=new Gn({"line-cap":new jn(Tt.layout_line["line-cap"]),"line-join":new Vn(Tt.layout_line["line-join"]),"line-miter-limit":new jn(Tt.layout_line["line-miter-limit"]),"line-round-limit":new jn(Tt.layout_line["line-round-limit"]),"line-sort-key":new Vn(Tt.layout_line["line-sort-key"])}),Ko={paint:new Gn({"line-opacity":new Vn(Tt.paint_line["line-opacity"]),"line-color":new Vn(Tt.paint_line["line-color"]),"line-translate":new jn(Tt.paint_line["line-translate"]),"line-translate-anchor":new jn(Tt.paint_line["line-translate-anchor"]),"line-width":new Vn(Tt.paint_line["line-width"]),"line-gap-width":new Vn(Tt.paint_line["line-gap-width"]),"line-offset":new Vn(Tt.paint_line["line-offset"]),"line-blur":new Vn(Tt.paint_line["line-blur"]),"line-dasharray":new qn(Tt.paint_line["line-dasharray"]),"line-pattern":new Un(Tt.paint_line["line-pattern"]),"line-gradient":new Hn(Tt.paint_line["line-gradient"])}),layout:Jo},Qo=new(function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(e,r){return r=new Pn(Math.floor(r.zoom),{now:r.now,fadeDuration:r.fadeDuration,zoomHistory:r.zoomHistory,transition:r.transition}),t.prototype.possiblyEvaluate.call(this,e,r)},e.prototype.evaluate=function(e,r,n,a){return r=h({},r,{zoom:Math.floor(r.zoom)}),t.prototype.evaluate.call(this,e,r,n,a)},e}(Vn))(Ko.paint.properties["line-width"].specification);Qo.useIntegerZoom=!0;var $o=function(t){function e(e){t.call(this,e,Ko)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._handleSpecialPaintPropertyUpdate=function(t){"line-gradient"===t&&this._updateGradient()},e.prototype._updateGradient=function(){var t=this._transitionablePaint._values["line-gradient"].value.expression;this.gradient=Ii(t,"lineProgress"),this.gradientTexture=null},e.prototype.recalculate=function(e){t.prototype.recalculate.call(this,e),this.paint._values["line-floorwidth"]=Qo.possiblyEvaluate(this._transitioningPaint._values["line-width"].value,e)},e.prototype.createBucket=function(t){return new Zo(t)},e.prototype.queryRadius=function(t){var e=t,r=ts(mi("line-width",this,e),mi("line-gap-width",this,e)),n=mi("line-offset",this,e);return r/2+Math.abs(n)+yi(this.paint.get("line-translate"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,o,s){var l=xi(t,this.paint.get("line-translate"),this.paint.get("line-translate-anchor"),o.angle,s),c=s/2*ts(this.paint.get("line-width").evaluate(e,r),this.paint.get("line-gap-width").evaluate(e,r)),u=this.paint.get("line-offset").evaluate(e,r);return u&&(n=function(t,e){for(var r=[],n=new a(0,0),i=0;i<t.length;i++){for(var o=t[i],s=[],l=0;l<o.length;l++){var c=o[l-1],u=o[l],h=o[l+1],f=0===l?n:u.sub(c)._unit()._perp(),p=l===o.length-1?n:h.sub(u)._unit()._perp(),d=f._add(p)._unit(),g=d.x*p.x+d.y*p.y;d._mult(1/g),s.push(d._mult(e)._add(u))}r.push(s)}return r}(n,u*s)),function(t,e,r){for(var n=0;n<e.length;n++){var a=e[n];if(t.length>=3)for(var i=0;i<a.length;i++)if(gi(t,a[i]))return!0;if(ci(t,a,r))return!0}return!1}(l,n,c)},e.prototype.isTileClipped=function(){return!0},e}(Yn);function ts(t,e){return e>0?e+2*t:t}var es=Jn([{name:"a_pos_offset",components:4,type:"Int16"},{name:"a_data",components:4,type:"Uint16"}]),rs=Jn([{name:"a_projected_pos",components:3,type:"Float32"}],4),ns=(Jn([{name:"a_fade_opacity",components:1,type:"Uint32"}],4),Jn([{name:"a_placed",components:2,type:"Uint8"},{name:"a_shift",components:2,type:"Float32"}])),as=(Jn([{type:"Int16",name:"anchorPointX"},{type:"Int16",name:"anchorPointY"},{type:"Int16",name:"x1"},{type:"Int16",name:"y1"},{type:"Int16",name:"x2"},{type:"Int16",name:"y2"},{type:"Uint32",name:"featureIndex"},{type:"Uint16",name:"sourceLayerIndex"},{type:"Uint16",name:"bucketIndex"},{type:"Int16",name:"radius"},{type:"Int16",name:"signedDistanceFromAnchor"}]),Jn([{name:"a_pos",components:2,type:"Int16"},{name:"a_anchor_pos",components:2,type:"Int16"},{name:"a_extrude",components:2,type:"Int16"}],4)),is=Jn([{name:"a_pos",components:2,type:"Int16"},{name:"a_anchor_pos",components:2,type:"Int16"},{name:"a_extrude",components:2,type:"Int16"}],4);function os(t,e,r){return t.sections.forEach(function(t){t.text=function(t,e,r){var n=e.layout.get("text-transform").evaluate(r,{});return"uppercase"===n?t=t.toLocaleUpperCase():"lowercase"===n&&(t=t.toLocaleLowerCase()),Cn.applyArabicShaping&&(t=Cn.applyArabicShaping(t)),t}(t.text,e,r)}),t}Jn([{type:"Int16",name:"anchorX"},{type:"Int16",name:"anchorY"},{type:"Uint16",name:"glyphStartIndex"},{type:"Uint16",name:"numGlyphs"},{type:"Uint32",name:"vertexStartIndex"},{type:"Uint32",name:"lineStartIndex"},{type:"Uint32",name:"lineLength"},{type:"Uint16",name:"segment"},{type:"Uint16",name:"lowerSize"},{type:"Uint16",name:"upperSize"},{type:"Float32",name:"lineOffsetX"},{type:"Float32",name:"lineOffsetY"},{type:"Uint8",name:"writingMode"},{type:"Uint8",name:"placedOrientation"},{type:"Uint8",name:"hidden"},{type:"Uint32",name:"crossTileID"}]),Jn([{type:"Int16",name:"anchorX"},{type:"Int16",name:"anchorY"},{type:"Int16",name:"rightJustifiedTextSymbolIndex"},{type:"Int16",name:"centerJustifiedTextSymbolIndex"},{type:"Int16",name:"leftJustifiedTextSymbolIndex"},{type:"Int16",name:"verticalPlacedTextSymbolIndex"},{type:"Uint16",name:"key"},{type:"Uint16",name:"textBoxStartIndex"},{type:"Uint16",name:"textBoxEndIndex"},{type:"Uint16",name:"verticalTextBoxStartIndex"},{type:"Uint16",name:"verticalTextBoxEndIndex"},{type:"Uint16",name:"iconBoxStartIndex"},{type:"Uint16",name:"iconBoxEndIndex"},{type:"Uint16",name:"featureIndex"},{type:"Uint16",name:"numHorizontalGlyphVertices"},{type:"Uint16",name:"numVerticalGlyphVertices"},{type:"Uint16",name:"numIconVertices"},{type:"Uint32",name:"crossTileID"},{type:"Float32",name:"textBoxScale"},{type:"Float32",name:"radialTextOffset"}]),Jn([{type:"Float32",name:"offsetX"}]),Jn([{type:"Int16",name:"x"},{type:"Int16",name:"y"},{type:"Int16",name:"tileUnitDistanceFromAnchor"}]);var ss={"!":"\ufe15","#":"\uff03",$:"\uff04","%":"\uff05","&":"\uff06","(":"\ufe35",")":"\ufe36","*":"\uff0a","+":"\uff0b",",":"\ufe10","-":"\ufe32",".":"\u30fb","/":"\uff0f",":":"\ufe13",";":"\ufe14","<":"\ufe3f","=":"\uff1d",">":"\ufe40","?":"\ufe16","@":"\uff20","[":"\ufe47","\\":"\uff3c","]":"\ufe48","^":"\uff3e",_:"\ufe33","`":"\uff40","{":"\ufe37","|":"\u2015","}":"\ufe38","~":"\uff5e","\xa2":"\uffe0","\xa3":"\uffe1","\xa5":"\uffe5","\xa6":"\uffe4","\xac":"\uffe2","\xaf":"\uffe3","\u2013":"\ufe32","\u2014":"\ufe31","\u2018":"\ufe43","\u2019":"\ufe44","\u201c":"\ufe41","\u201d":"\ufe42","\u2026":"\ufe19","\u2027":"\u30fb","\u20a9":"\uffe6","\u3001":"\ufe11","\u3002":"\ufe12","\u3008":"\ufe3f","\u3009":"\ufe40","\u300a":"\ufe3d","\u300b":"\ufe3e","\u300c":"\ufe41","\u300d":"\ufe42","\u300e":"\ufe43","\u300f":"\ufe44","\u3010":"\ufe3b","\u3011":"\ufe3c","\u3014":"\ufe39","\u3015":"\ufe3a","\u3016":"\ufe17","\u3017":"\ufe18","\uff01":"\ufe15","\uff08":"\ufe35","\uff09":"\ufe36","\uff0c":"\ufe10","\uff0d":"\ufe32","\uff0e":"\u30fb","\uff1a":"\ufe13","\uff1b":"\ufe14","\uff1c":"\ufe3f","\uff1e":"\ufe40","\uff1f":"\ufe16","\uff3b":"\ufe47","\uff3d":"\ufe48","\uff3f":"\ufe33","\uff5b":"\ufe37","\uff5c":"\u2015","\uff5d":"\ufe38","\uff5f":"\ufe35","\uff60":"\ufe36","\uff61":"\ufe12","\uff62":"\ufe41","\uff63":"\ufe42"},ls=24,cs={horizontal:1,vertical:2,horizontalOnly:3},us=function(){this.text="",this.sectionIndex=[],this.sections=[]};function hs(t,e,r,n,a,i,o,s,l,c,u){var h,f=us.fromFeature(t,r);c===cs.vertical&&f.verticalizePunctuation();var p=Cn.processBidirectionalText,d=Cn.processStyledBidirectionalText;if(p&&1===f.sections.length){h=[];for(var g=0,v=p(f.toString(),ms(f,s,n,e));g<v.length;g+=1){var m=v[g],y=new us;y.text=m,y.sections=f.sections;for(var x=0;x<m.length;x++)y.sectionIndex.push(0);h.push(y)}}else if(d){h=[];for(var b=0,_=d(f.text,f.sectionIndex,ms(f,s,n,e));b<_.length;b+=1){var w=_[b],k=new us;k.text=w[0],k.sectionIndex=w[1],k.sections=f.sections,h.push(k)}}else h=function(t,e){for(var r=[],n=t.text,a=0,i=0,o=e;i<o.length;i+=1){var s=o[i];r.push(t.substring(a,s)),a=s}return a<n.length&&r.push(t.substring(a,n.length)),r}(f,ms(f,s,n,e));var T=[],M={positionedGlyphs:T,text:f.toString(),top:l[1],bottom:l[1],left:l[0],right:l[0],writingMode:c,lineCount:h.length,yOffset:-17};return function(t,e,r,n,a,i,o,s,l){for(var c=0,u=t.yOffset,h=0,f=t.positionedGlyphs,p="right"===i?1:"left"===i?0:.5,d=0,g=r;d<g.length;d+=1){var v=g[d];v.trim();var m=v.getMaxScale();if(v.length()){for(var y=f.length,x=0;x<v.length();x++){var b=v.getSection(x),_=v.getSectionIndex(x),w=v.getCharCode(x),k=24*(m-b.scale),T=e[b.fontStack],M=T&&T[w];M&&(o===cs.horizontal||!l&&!wn(w)||l&&(fs[w]||(S=w,xn.Arabic(S)||xn["Arabic Supplement"](S)||xn["Arabic Extended-A"](S)||xn["Arabic Presentation Forms-A"](S)||xn["Arabic Presentation Forms-B"](S)))?(f.push({glyph:w,x:c,y:u+k,vertical:!1,scale:b.scale,fontStack:b.fontStack,sectionIndex:_}),c+=M.metrics.advance*b.scale+s):(f.push({glyph:w,x:c,y:u+k,vertical:!0,scale:b.scale,fontStack:b.fontStack,sectionIndex:_}),c+=ls*b.scale+s))}if(f.length!==y){var A=c-s;h=Math.max(A,h),xs(f,e,y,f.length-1,p)}c=0,u+=n*m}else u+=n}var S,E=ys(a),L=E.horizontalAlign,C=E.verticalAlign;!function(t,e,r,n,a,i,o){for(var s=(e-r)*a,l=(-n*o+.5)*i,c=0;c<t.length;c++)t[c].x+=s,t[c].y+=l}(f,p,L,C,h,n,r.length);var P=u-t.yOffset;t.top+=-C*P,t.bottom=t.top+P,t.left+=-L*h,t.right=t.left+h}(M,e,h,a,i,o,c,s,u),!!T.length&&M}us.fromFeature=function(t,e){for(var r=new us,n=0;n<t.sections.length;n++){var a=t.sections[n];r.sections.push({scale:a.scale||1,fontStack:a.fontStack||e}),r.text+=a.text;for(var i=0;i<a.text.length;i++)r.sectionIndex.push(n)}return r},us.prototype.length=function(){return this.text.length},us.prototype.getSection=function(t){return this.sections[this.sectionIndex[t]]},us.prototype.getSectionIndex=function(t){return this.sectionIndex[t]},us.prototype.getCharCode=function(t){return this.text.charCodeAt(t)},us.prototype.verticalizePunctuation=function(){this.text=function(t){for(var e="",r=0;r<t.length;r++){var n=t.charCodeAt(r+1)||null,a=t.charCodeAt(r-1)||null;n&&kn(n)&&!ss[t[r+1]]||a&&kn(a)&&!ss[t[r-1]]||!ss[t[r]]?e+=t[r]:e+=ss[t[r]]}return e}(this.text)},us.prototype.trim=function(){for(var t=0,e=0;e<this.text.length&&fs[this.text.charCodeAt(e)];e++)t++;for(var r=this.text.length,n=this.text.length-1;n>=0&&n>=t&&fs[this.text.charCodeAt(n)];n--)r--;this.text=this.text.substring(t,r),this.sectionIndex=this.sectionIndex.slice(t,r)},us.prototype.substring=function(t,e){var r=new us;return r.text=this.text.substring(t,e),r.sectionIndex=this.sectionIndex.slice(t,e),r.sections=this.sections,r},us.prototype.toString=function(){return this.text},us.prototype.getMaxScale=function(){var t=this;return this.sectionIndex.reduce(function(e,r){return Math.max(e,t.sections[r].scale)},0)};var fs={9:!0,10:!0,11:!0,12:!0,13:!0,32:!0},ps={};function ds(t,e,r,n){var a=Math.pow(t-e,2);return n?t<e?a/2:2*a:a+Math.abs(r)*r}function gs(t,e,r){var n=0;return 10===t&&(n-=1e4),r&&(n+=150),40!==t&&65288!==t||(n+=50),41!==e&&65289!==e||(n+=50),n}function vs(t,e,r,n,a,i){for(var o=null,s=ds(e,r,a,i),l=0,c=n;l<c.length;l+=1){var u=c[l],h=ds(e-u.x,r,a,i)+u.badness;h<=s&&(o=u,s=h)}return{index:t,x:e,priorBreak:o,badness:s}}function ms(t,e,r,n){if(!r)return[];if(!t)return[];for(var a,i=[],o=function(t,e,r,n){for(var a=0,i=0;i<t.length();i++){var o=t.getSection(i),s=n[o.fontStack],l=s&&s[t.getCharCode(i)];l&&(a+=l.metrics.advance*o.scale+e)}return a/Math.max(1,Math.ceil(a/r))}(t,e,r,n),s=t.text.indexOf("\u200b")>=0,l=0,c=0;c<t.length();c++){var u=t.getSection(c),h=t.getCharCode(c),f=n[u.fontStack],p=f&&f[h];if(p&&!fs[h]&&(l+=p.metrics.advance*u.scale+e),c<t.length()-1){var d=!((a=h)<11904||!(xn["Bopomofo Extended"](a)||xn.Bopomofo(a)||xn["CJK Compatibility Forms"](a)||xn["CJK Compatibility Ideographs"](a)||xn["CJK Compatibility"](a)||xn["CJK Radicals Supplement"](a)||xn["CJK Strokes"](a)||xn["CJK Symbols and Punctuation"](a)||xn["CJK Unified Ideographs Extension A"](a)||xn["CJK Unified Ideographs"](a)||xn["Enclosed CJK Letters and Months"](a)||xn["Halfwidth and Fullwidth Forms"](a)||xn.Hiragana(a)||xn["Ideographic Description Characters"](a)||xn["Kangxi Radicals"](a)||xn["Katakana Phonetic Extensions"](a)||xn.Katakana(a)||xn["Vertical Forms"](a)||xn["Yi Radicals"](a)||xn["Yi Syllables"](a)));(ps[h]||d)&&i.push(vs(c+1,l,o,i,gs(h,t.getCharCode(c+1),d&&s),!1))}}return function t(e){return e?t(e.priorBreak).concat(e.index):[]}(vs(t.length(),l,o,i,0,!0))}function ys(t){var e=.5,r=.5;switch(t){case"right":case"top-right":case"bottom-right":e=1;break;case"left":case"top-left":case"bottom-left":e=0}switch(t){case"bottom":case"bottom-right":case"bottom-left":r=1;break;case"top":case"top-right":case"top-left":r=0}return{horizontalAlign:e,verticalAlign:r}}function xs(t,e,r,n,a){if(a){var i=t[n],o=e[i.fontStack],s=o&&o[i.glyph];if(s)for(var l=s.metrics.advance*i.scale,c=(t[n].x+l)*a,u=r;u<=n;u++)t[u].x-=c}}ps[10]=!0,ps[32]=!0,ps[38]=!0,ps[40]=!0,ps[41]=!0,ps[43]=!0,ps[45]=!0,ps[47]=!0,ps[173]=!0,ps[183]=!0,ps[8203]=!0,ps[8208]=!0,ps[8211]=!0,ps[8231]=!0;var bs=function(t){function e(e,r,n,a){t.call(this,e,r),this.angle=n,void 0!==a&&(this.segment=a)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.clone=function(){return new e(this.x,this.y,this.angle,this.segment)},e}(a);dn("Anchor",bs);var _s=256;function ws(t,e){var r=e.expression;if("constant"===r.kind)return{kind:"constant",layoutSize:r.evaluate(new Pn(t+1))};if("source"===r.kind)return{kind:"source"};for(var n=r.zoomStops,a=r.interpolationType,i=0;i<n.length&&n[i]<=t;)i++;for(var o=i=Math.max(0,i-1);o<n.length&&n[o]<t+1;)o++;o=Math.min(n.length-1,o);var s=n[i],l=n[o];return"composite"===r.kind?{kind:"composite",minZoom:s,maxZoom:l,interpolationType:a}:{kind:"camera",minZoom:s,maxZoom:l,minSize:r.evaluate(new Pn(s)),maxSize:r.evaluate(new Pn(l)),interpolationType:a}}function ks(t,e,r){var n=e.uSize,a=e.uSizeT,i=r.lowerSize,o=r.upperSize;return"source"===t.kind?i/_s:"composite"===t.kind?ye(i/_s,o/_s,a):n}function Ts(t,e){var r=0,n=0;if("constant"===t.kind)n=t.layoutSize;else if("source"!==t.kind){var a=t.interpolationType,i=t.minZoom,o=t.maxZoom,s=a?c(Ne.interpolationFactor(a,e,i,o),0,1):0;"camera"===t.kind?n=ye(t.minSize,t.maxSize,s):r=s}return{uSizeT:r,uSize:n}}var Ms=Object.freeze({getSizeData:ws,evaluateSizeForFeature:ks,evaluateSizeForZoom:Ts,SIZE_PACK_FACTOR:_s}),As=Io.VectorTileFeature.types,Ss=[{name:"a_fade_opacity",components:1,type:"Uint8",offset:0}];function Es(t,e,r,n,a,i,o,s){t.emplaceBack(e,r,Math.round(32*n),Math.round(32*a),i,o,s?s[0]:0,s?s[1]:0)}function Ls(t,e,r){t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r)}var Cs=function(t){this.layoutVertexArray=new na,this.indexArray=new da,this.programConfigurations=t,this.segments=new Oa,this.dynamicLayoutVertexArray=new aa,this.opacityVertexArray=new ia,this.placedSymbolArray=new wa};Cs.prototype.upload=function(t,e,r,n){r&&(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,es.members),this.indexBuffer=t.createIndexBuffer(this.indexArray,e),this.dynamicLayoutVertexBuffer=t.createVertexBuffer(this.dynamicLayoutVertexArray,rs.members,!0),this.opacityVertexBuffer=t.createVertexBuffer(this.opacityVertexArray,Ss,!0),this.opacityVertexBuffer.itemSize=1),(r||n)&&this.programConfigurations.upload(t)},Cs.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.dynamicLayoutVertexBuffer.destroy(),this.opacityVertexBuffer.destroy())},dn("SymbolBuffers",Cs);var Ps=function(t,e,r){this.layoutVertexArray=new t,this.layoutAttributes=e,this.indexArray=new r,this.segments=new Oa,this.collisionVertexArray=new la};Ps.prototype.upload=function(t){this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,this.layoutAttributes),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.collisionVertexBuffer=t.createVertexBuffer(this.collisionVertexArray,ns.members,!0)},Ps.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.segments.destroy(),this.collisionVertexBuffer.destroy())},dn("CollisionBuffers",Ps);var Os=function(t){this.collisionBoxArray=t.collisionBoxArray,this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.pixelRatio=t.pixelRatio,this.sourceLayerIndex=t.sourceLayerIndex,this.hasPattern=!1,this.hasPaintOverrides=!1;var e=this.layers[0]._unevaluatedLayout._values;this.textSizeData=ws(this.zoom,e["text-size"]),this.iconSizeData=ws(this.zoom,e["icon-size"]);var r=this.layers[0].layout,n=r.get("symbol-sort-key"),a=r.get("symbol-z-order");this.sortFeaturesByKey="viewport-y"!==a&&void 0!==n.constantOr(1);var i="viewport-y"===a||"auto"===a&&!this.sortFeaturesByKey;this.sortFeaturesByY=i&&(r.get("text-allow-overlap")||r.get("icon-allow-overlap")||r.get("text-ignore-placement")||r.get("icon-ignore-placement")),"point"===r.get("symbol-placement")&&(this.writingModes=r.get("text-writing-mode").map(function(t){return cs[t]})),this.stateDependentLayerIds=this.layers.filter(function(t){return t.isStateDependent()}).map(function(t){return t.id}),this.sourceID=t.sourceID};Os.prototype.createArrays=function(){var t=this.layers[0].layout;this.hasPaintOverrides=Rs.hasPaintOverrides(t),this.text=new Cs(new Qa(es.members,this.layers,this.zoom,function(t){return/^text/.test(t)})),this.icon=new Cs(new Qa(es.members,this.layers,this.zoom,function(t){return/^icon/.test(t)})),this.collisionBox=new Ps(sa,as.members,ga),this.collisionCircle=new Ps(sa,is.members,da),this.glyphOffsetArray=new Aa,this.lineVertexArray=new Ea,this.symbolInstances=new Ta},Os.prototype.calculateGlyphDependencies=function(t,e,r,n,a){for(var i=0;i<t.length;i++)if(e[t.charCodeAt(i)]=!0,(r||n)&&a){var o=ss[t.charAt(i)];o&&(e[o.charCodeAt(0)]=!0)}},Os.prototype.populate=function(t,e){var r=this.layers[0],n=r.layout,a=n.get("text-font"),i=n.get("text-field"),o=n.get("icon-image"),s=("constant"!==i.value.kind||i.value.value.toString().length>0)&&("constant"!==a.value.kind||a.value.value.length>0),l="constant"!==o.value.kind||o.value.value&&o.value.value.length>0,c=n.get("symbol-sort-key");if(this.features=[],s||l){for(var u=e.iconDependencies,h=e.glyphDependencies,f=new Pn(this.zoom),p=0,d=t;p<d.length;p+=1){var g=d[p],v=g.feature,m=g.index,y=g.sourceLayerIndex;if(r._featureFilter(f,v)){var x=void 0;if(s){var b=r.getValueAndResolveTokens("text-field",v);x=os(b instanceof Jt?b:Jt.fromString(b),r,v)}var _=void 0;if(l&&(_=r.getValueAndResolveTokens("icon-image",v)),x||_){var w=this.sortFeaturesByKey?c.evaluate(v,{}):void 0,k={text:x,icon:_,index:m,sourceLayerIndex:y,geometry:ni(v),properties:v.properties,type:As[v.type],sortKey:w};if(void 0!==v.id&&(k.id=v.id),this.features.push(k),_&&(u[_]=!0),x){var T=a.evaluate(v,{}).join(","),M="map"===n.get("text-rotation-alignment")&&"point"!==n.get("symbol-placement");this.allowVerticalPlacement=this.writingModes&&this.writingModes.indexOf(cs.vertical)>=0;for(var A=0,S=x.sections;A<S.length;A+=1){var E=S[A],L=bn(x.toString()),C=E.fontStack||T,P=h[C]=h[C]||{};this.calculateGlyphDependencies(E.text,P,M,this.allowVerticalPlacement,L)}}}}}"line"===n.get("symbol-placement")&&(this.features=function(t){var e={},r={},n=[],a=0;function i(e){n.push(t[e]),a++}function o(t,e,a){var i=r[t];return delete r[t],r[e]=i,n[i].geometry[0].pop(),n[i].geometry[0]=n[i].geometry[0].concat(a[0]),i}function s(t,r,a){var i=e[r];return delete e[r],e[t]=i,n[i].geometry[0].shift(),n[i].geometry[0]=a[0].concat(n[i].geometry[0]),i}function l(t,e,r){var n=r?e[0][e[0].length-1]:e[0][0];return t+":"+n.x+":"+n.y}for(var c=0;c<t.length;c++){var u=t[c],h=u.geometry,f=u.text?u.text.toString():null;if(f){var p=l(f,h),d=l(f,h,!0);if(p in r&&d in e&&r[p]!==e[d]){var g=s(p,d,h),v=o(p,d,n[g].geometry);delete e[p],delete r[d],r[l(f,n[v].geometry,!0)]=v,n[g].geometry=null}else p in r?o(p,d,h):d in e?s(p,d,h):(i(c),e[p]=a-1,r[d]=a-1)}else i(c)}return n.filter(function(t){return t.geometry})}(this.features)),this.sortFeaturesByKey&&this.features.sort(function(t,e){return t.sortKey-e.sortKey})}},Os.prototype.update=function(t,e,r){this.stateDependentLayers.length&&(this.text.programConfigurations.updatePaintArrays(t,e,this.layers,r),this.icon.programConfigurations.updatePaintArrays(t,e,this.layers,r))},Os.prototype.isEmpty=function(){return 0===this.symbolInstances.length},Os.prototype.uploadPending=function(){return!this.uploaded||this.text.programConfigurations.needsUpload||this.icon.programConfigurations.needsUpload},Os.prototype.upload=function(t){this.uploaded||(this.collisionBox.upload(t),this.collisionCircle.upload(t)),this.text.upload(t,this.sortFeaturesByY,!this.uploaded,this.text.programConfigurations.needsUpload),this.icon.upload(t,this.sortFeaturesByY,!this.uploaded,this.icon.programConfigurations.needsUpload),this.uploaded=!0},Os.prototype.destroy=function(){this.text.destroy(),this.icon.destroy(),this.collisionBox.destroy(),this.collisionCircle.destroy()},Os.prototype.addToLineVertexArray=function(t,e){var r=this.lineVertexArray.length;if(void 0!==t.segment){for(var n=t.dist(e[t.segment+1]),a=t.dist(e[t.segment]),i={},o=t.segment+1;o<e.length;o++)i[o]={x:e[o].x,y:e[o].y,tileUnitDistanceFromAnchor:n},o<e.length-1&&(n+=e[o+1].dist(e[o]));for(var s=t.segment||0;s>=0;s--)i[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:a},s>0&&(a+=e[s-1].dist(e[s]));for(var l=0;l<e.length;l++){var c=i[l];this.lineVertexArray.emplaceBack(c.x,c.y,c.tileUnitDistanceFromAnchor)}}return{lineStartIndex:r,lineLength:this.lineVertexArray.length-r}},Os.prototype.addSymbols=function(t,e,r,n,a,i,o,s,l,c){var u=this,h=t.indexArray,f=t.layoutVertexArray,p=t.dynamicLayoutVertexArray,d=t.segments.prepareSegment(4*e.length,t.layoutVertexArray,t.indexArray,i.sortKey),g=this.glyphOffsetArray.length,v=d.vertexLength,m=this.allowVerticalPlacement&&o===cs.vertical?Math.PI/2:0,y=function(t){var e=t.tl,n=t.tr,a=t.bl,i=t.br,o=t.tex,l=d.vertexLength,c=t.glyphOffset[1];Es(f,s.x,s.y,e.x,c+e.y,o.x,o.y,r),Es(f,s.x,s.y,n.x,c+n.y,o.x+o.w,o.y,r),Es(f,s.x,s.y,a.x,c+a.y,o.x,o.y+o.h,r),Es(f,s.x,s.y,i.x,c+i.y,o.x+o.w,o.y+o.h,r),Ls(p,s,m),h.emplaceBack(l,l+1,l+2),h.emplaceBack(l+1,l+2,l+3),d.vertexLength+=4,d.primitiveLength+=2,u.glyphOffsetArray.emplaceBack(t.glyphOffset[0])};if(i.text&&i.text.sections){var x=i.text.sections;if(this.hasPaintOverrides){for(var b,_=function(e,r){void 0===b||b===e&&!r||t.programConfigurations.populatePaintArrays(t.layoutVertexArray.length,i,i.index,{},x[b]),b=e},w=0,k=e;w<k.length;w+=1){var T=k[w];_(T.sectionIndex,!1),y(T)}_(b,!0)}else{for(var M=0,A=e;M<A.length;M+=1)y(A[M]);t.programConfigurations.populatePaintArrays(t.layoutVertexArray.length,i,i.index,{},x[0])}}else{for(var S=0,E=e;S<E.length;S+=1)y(E[S]);t.programConfigurations.populatePaintArrays(t.layoutVertexArray.length,i,i.index,{})}t.placedSymbolArray.emplaceBack(s.x,s.y,g,this.glyphOffsetArray.length-g,v,l,c,s.segment,r?r[0]:0,r?r[1]:0,n[0],n[1],o,0,!1,0)},Os.prototype._addCollisionDebugVertex=function(t,e,r,n,a,i){return e.emplaceBack(0,0),t.emplaceBack(r.x,r.y,n,a,Math.round(i.x),Math.round(i.y))},Os.prototype.addCollisionDebugVertices=function(t,e,r,n,i,o,s,l){var c=i.segments.prepareSegment(4,i.layoutVertexArray,i.indexArray),u=c.vertexLength,h=i.layoutVertexArray,f=i.collisionVertexArray,p=s.anchorX,d=s.anchorY;if(this._addCollisionDebugVertex(h,f,o,p,d,new a(t,e)),this._addCollisionDebugVertex(h,f,o,p,d,new a(r,e)),this._addCollisionDebugVertex(h,f,o,p,d,new a(r,n)),this._addCollisionDebugVertex(h,f,o,p,d,new a(t,n)),c.vertexLength+=4,l){var g=i.indexArray;g.emplaceBack(u,u+1,u+2),g.emplaceBack(u,u+2,u+3),c.primitiveLength+=2}else{var v=i.indexArray;v.emplaceBack(u,u+1),v.emplaceBack(u+1,u+2),v.emplaceBack(u+2,u+3),v.emplaceBack(u+3,u),c.primitiveLength+=4}},Os.prototype.addDebugCollisionBoxes=function(t,e,r){for(var n=t;n<e;n++){var a=this.collisionBoxArray.get(n),i=a.x1,o=a.y1,s=a.x2,l=a.y2,c=a.radius>0;this.addCollisionDebugVertices(i,o,s,l,c?this.collisionCircle:this.collisionBox,a.anchorPoint,r,c)}},Os.prototype.generateCollisionDebugBuffers=function(){for(var t=0;t<this.symbolInstances.length;t++){var e=this.symbolInstances.get(t);this.addDebugCollisionBoxes(e.textBoxStartIndex,e.textBoxEndIndex,e),this.addDebugCollisionBoxes(e.verticalTextBoxStartIndex,e.verticalTextBoxEndIndex,e),this.addDebugCollisionBoxes(e.iconBoxStartIndex,e.iconBoxEndIndex,e)}},Os.prototype._deserializeCollisionBoxesForSymbol=function(t,e,r,n,a,i,o){for(var s={},l=e;l<r;l++){var c=t.get(l);if(0===c.radius){s.textBox={x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2,anchorPointX:c.anchorPointX,anchorPointY:c.anchorPointY},s.textFeatureIndex=c.featureIndex;break}s.textCircles||(s.textCircles=[],s.textFeatureIndex=c.featureIndex),s.textCircles.push(c.anchorPointX,c.anchorPointY,c.radius,c.signedDistanceFromAnchor,1)}for(var u=n;u<a;u++){var h=t.get(u);if(0===h.radius){s.verticalTextBox={x1:h.x1,y1:h.y1,x2:h.x2,y2:h.y2,anchorPointX:h.anchorPointX,anchorPointY:h.anchorPointY},s.verticalTextFeatureIndex=h.featureIndex;break}}for(var f=i;f<o;f++){var p=t.get(f);if(0===p.radius){s.iconBox={x1:p.x1,y1:p.y1,x2:p.x2,y2:p.y2,anchorPointX:p.anchorPointX,anchorPointY:p.anchorPointY},s.iconFeatureIndex=p.featureIndex;break}}return s},Os.prototype.deserializeCollisionBoxes=function(t){this.collisionArrays=[];for(var e=0;e<this.symbolInstances.length;e++){var r=this.symbolInstances.get(e);this.collisionArrays.push(this._deserializeCollisionBoxesForSymbol(t,r.textBoxStartIndex,r.textBoxEndIndex,r.verticalTextBoxStartIndex,r.verticalTextBoxEndIndex,r.iconBoxStartIndex,r.iconBoxEndIndex))}},Os.prototype.hasTextData=function(){return this.text.segments.get().length>0},Os.prototype.hasIconData=function(){return this.icon.segments.get().length>0},Os.prototype.hasCollisionBoxData=function(){return this.collisionBox.segments.get().length>0},Os.prototype.hasCollisionCircleData=function(){return this.collisionCircle.segments.get().length>0},Os.prototype.addIndicesForPlacedTextSymbol=function(t){for(var e=this.text.placedSymbolArray.get(t),r=e.vertexStartIndex+4*e.numGlyphs,n=e.vertexStartIndex;n<r;n+=4)this.text.indexArray.emplaceBack(n,n+1,n+2),this.text.indexArray.emplaceBack(n+1,n+2,n+3)},Os.prototype.getSortedSymbolIndexes=function(t){if(this.sortedAngle===t&&void 0!==this.symbolInstanceIndexes)return this.symbolInstanceIndexes;for(var e=Math.sin(t),r=Math.cos(t),n=[],a=[],i=[],o=0;o<this.symbolInstances.length;++o){i.push(o);var s=this.symbolInstances.get(o);n.push(0|Math.round(e*s.anchorX+r*s.anchorY)),a.push(s.featureIndex)}return i.sort(function(t,e){return n[t]-n[e]||a[e]-a[t]}),i},Os.prototype.sortFeatures=function(t){var e=this;if(this.sortFeaturesByY&&this.sortedAngle!==t&&!(this.text.segments.get().length>1||this.icon.segments.get().length>1)){this.symbolInstanceIndexes=this.getSortedSymbolIndexes(t),this.sortedAngle=t,this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder=[];for(var r=0,n=this.symbolInstanceIndexes;r<n.length;r+=1){var a=n[r],i=this.symbolInstances.get(a);this.featureSortOrder.push(i.featureIndex),[i.rightJustifiedTextSymbolIndex,i.centerJustifiedTextSymbolIndex,i.leftJustifiedTextSymbolIndex].forEach(function(t,r,n){t>=0&&n.indexOf(t)===r&&e.addIndicesForPlacedTextSymbol(t)}),i.verticalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedTextSymbol(i.verticalPlacedTextSymbolIndex);var o=this.icon.placedSymbolArray.get(a);if(o.numGlyphs){var s=o.vertexStartIndex;this.icon.indexArray.emplaceBack(s,s+1,s+2),this.icon.indexArray.emplaceBack(s+1,s+2,s+3)}}this.text.indexBuffer&&this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer&&this.icon.indexBuffer.updateData(this.icon.indexArray)}},dn("SymbolBucket",Os,{omit:["layers","collisionBoxArray","features","compareText"]}),Os.MAX_GLYPHS=65535,Os.addDynamicAttributes=Ls;var zs=new Gn({"symbol-placement":new jn(Tt.layout_symbol["symbol-placement"]),"symbol-spacing":new jn(Tt.layout_symbol["symbol-spacing"]),"symbol-avoid-edges":new jn(Tt.layout_symbol["symbol-avoid-edges"]),"symbol-sort-key":new Vn(Tt.layout_symbol["symbol-sort-key"]),"symbol-z-order":new jn(Tt.layout_symbol["symbol-z-order"]),"icon-allow-overlap":new jn(Tt.layout_symbol["icon-allow-overlap"]),"icon-ignore-placement":new jn(Tt.layout_symbol["icon-ignore-placement"]),"icon-optional":new jn(Tt.layout_symbol["icon-optional"]),"icon-rotation-alignment":new jn(Tt.layout_symbol["icon-rotation-alignment"]),"icon-size":new Vn(Tt.layout_symbol["icon-size"]),"icon-text-fit":new jn(Tt.layout_symbol["icon-text-fit"]),"icon-text-fit-padding":new jn(Tt.layout_symbol["icon-text-fit-padding"]),"icon-image":new Vn(Tt.layout_symbol["icon-image"]),"icon-rotate":new Vn(Tt.layout_symbol["icon-rotate"]),"icon-padding":new jn(Tt.layout_symbol["icon-padding"]),"icon-keep-upright":new jn(Tt.layout_symbol["icon-keep-upright"]),"icon-offset":new Vn(Tt.layout_symbol["icon-offset"]),"icon-anchor":new Vn(Tt.layout_symbol["icon-anchor"]),"icon-pitch-alignment":new jn(Tt.layout_symbol["icon-pitch-alignment"]),"text-pitch-alignment":new jn(Tt.layout_symbol["text-pitch-alignment"]),"text-rotation-alignment":new jn(Tt.layout_symbol["text-rotation-alignment"]),"text-field":new Vn(Tt.layout_symbol["text-field"]),"text-font":new Vn(Tt.layout_symbol["text-font"]),"text-size":new Vn(Tt.layout_symbol["text-size"]),"text-max-width":new Vn(Tt.layout_symbol["text-max-width"]),"text-line-height":new jn(Tt.layout_symbol["text-line-height"]),"text-letter-spacing":new Vn(Tt.layout_symbol["text-letter-spacing"]),"text-justify":new Vn(Tt.layout_symbol["text-justify"]),"text-radial-offset":new Vn(Tt.layout_symbol["text-radial-offset"]),"text-variable-anchor":new jn(Tt.layout_symbol["text-variable-anchor"]),"text-anchor":new Vn(Tt.layout_symbol["text-anchor"]),"text-max-angle":new jn(Tt.layout_symbol["text-max-angle"]),"text-writing-mode":new jn(Tt.layout_symbol["text-writing-mode"]),"text-rotate":new Vn(Tt.layout_symbol["text-rotate"]),"text-padding":new jn(Tt.layout_symbol["text-padding"]),"text-keep-upright":new jn(Tt.layout_symbol["text-keep-upright"]),"text-transform":new Vn(Tt.layout_symbol["text-transform"]),"text-offset":new Vn(Tt.layout_symbol["text-offset"]),"text-allow-overlap":new jn(Tt.layout_symbol["text-allow-overlap"]),"text-ignore-placement":new jn(Tt.layout_symbol["text-ignore-placement"]),"text-optional":new jn(Tt.layout_symbol["text-optional"])}),Is={paint:new Gn({"icon-opacity":new Vn(Tt.paint_symbol["icon-opacity"]),"icon-color":new Vn(Tt.paint_symbol["icon-color"]),"icon-halo-color":new Vn(Tt.paint_symbol["icon-halo-color"]),"icon-halo-width":new Vn(Tt.paint_symbol["icon-halo-width"]),"icon-halo-blur":new Vn(Tt.paint_symbol["icon-halo-blur"]),"icon-translate":new jn(Tt.paint_symbol["icon-translate"]),"icon-translate-anchor":new jn(Tt.paint_symbol["icon-translate-anchor"]),"text-opacity":new Vn(Tt.paint_symbol["text-opacity"]),"text-color":new Vn(Tt.paint_symbol["text-color"],{runtimeType:Ft,getOverride:function(t){return t.textColor},hasOverride:function(t){return!!t.textColor}}),"text-halo-color":new Vn(Tt.paint_symbol["text-halo-color"]),"text-halo-width":new Vn(Tt.paint_symbol["text-halo-width"]),"text-halo-blur":new Vn(Tt.paint_symbol["text-halo-blur"]),"text-translate":new jn(Tt.paint_symbol["text-translate"]),"text-translate-anchor":new jn(Tt.paint_symbol["text-translate-anchor"])}),layout:zs},Ds=function(t){this.type=t.property.overrides?t.property.overrides.runtimeType:zt,this.defaultValue=t};Ds.prototype.evaluate=function(t){if(t.formattedSection){var e=this.defaultValue.property.overrides;if(e&&e.hasOverride(t.formattedSection))return e.getOverride(t.formattedSection)}return t.feature&&t.featureState?this.defaultValue.evaluate(t.feature,t.featureState):this.defaultValue.property.specification.default},Ds.prototype.eachChild=function(t){this.defaultValue.isConstant()||t(this.defaultValue.value._styleExpression.expression)},Ds.prototype.possibleOutputs=function(){return[void 0]},Ds.prototype.serialize=function(){return null},dn("FormatSectionOverride",Ds,{omit:["defaultValue"]});var Rs=function(t){function e(e){t.call(this,e,Is)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.recalculate=function(e){if(t.prototype.recalculate.call(this,e),"auto"===this.layout.get("icon-rotation-alignment")&&("point"!==this.layout.get("symbol-placement")?this.layout._values["icon-rotation-alignment"]="map":this.layout._values["icon-rotation-alignment"]="viewport"),"auto"===this.layout.get("text-rotation-alignment")&&("point"!==this.layout.get("symbol-placement")?this.layout._values["text-rotation-alignment"]="map":this.layout._values["text-rotation-alignment"]="viewport"),"auto"===this.layout.get("text-pitch-alignment")&&(this.layout._values["text-pitch-alignment"]=this.layout.get("text-rotation-alignment")),"auto"===this.layout.get("icon-pitch-alignment")&&(this.layout._values["icon-pitch-alignment"]=this.layout.get("icon-rotation-alignment")),"point"===this.layout.get("symbol-placement")){var r=this.layout.get("text-writing-mode");if(r){for(var n=[],a=0,i=r;a<i.length;a+=1){var o=i[a];n.indexOf(o)<0&&n.push(o)}this.layout._values["text-writing-mode"]=n}else this.layout._values["text-writing-mode"]=["horizontal"]}this._setPaintOverrides()},e.prototype.getValueAndResolveTokens=function(t,e){var r=this.layout.get(t).evaluate(e,{}),n=this._unevaluatedLayout._values[t];return n.isDataDriven()||wr(n.value)?r:function(t,e){return r.replace(/{([^{}]+)}/g,function(e,r){return r in t?String(t[r]):""})}(e.properties)},e.prototype.createBucket=function(t){return new Os(t)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return!1},e.prototype._setPaintOverrides=function(){for(var t=0,r=Is.paint.overridableProperties;t<r.length;t+=1){var n=r[t];if(e.hasPaintOverride(this.layout,n)){var a,i=this.paint.get(n),o=new Ds(i),s=new _r(o,i.property.specification);a="constant"===i.value.kind||"source"===i.value.kind?new Tr("source",s):new Mr("composite",s,i.value.zoomStops,i.value._interpolationType),this.paint._values[n]=new Bn(i.property,a,i.parameters)}}},e.prototype._handleOverridablePaintPropertyUpdate=function(t,r,n){return!(!this.layout||r.isDataDriven()||n.isDataDriven())&&e.hasPaintOverride(this.layout,t)},e.hasPaintOverride=function(t,e){var r=t.get("text-field"),n=Is.paint.properties[e],a=!1,i=function(t){for(var e=0,r=t;e<r.length;e+=1){var i=r[e];if(n.overrides&&n.overrides.hasOverride(i))return void(a=!0)}};if("constant"===r.value.kind&&r.value.value instanceof Jt)i(r.value.value.sections);else if("source"===r.value.kind){var o=function(t){if(!a)if(t instanceof te&&Qt(t.value)===Vt){var e=t.value;i(e.sections)}else t instanceof ae?i(t.sections):t.eachChild(o)},s=r.value;s._styleExpression&&o(s._styleExpression.expression)}return a},e.hasPaintOverrides=function(t){for(var r=0,n=Is.paint.overridableProperties;r<n.length;r+=1){var a=n[r];if(e.hasPaintOverride(t,a))return!0}return!1},e}(Yn),Fs={paint:new Gn({"background-color":new jn(Tt.paint_background["background-color"]),"background-pattern":new qn(Tt.paint_background["background-pattern"]),"background-opacity":new jn(Tt.paint_background["background-opacity"])})},Bs=function(t){function e(e){t.call(this,e,Fs)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Yn),Ns={paint:new Gn({"raster-opacity":new jn(Tt.paint_raster["raster-opacity"]),"raster-hue-rotate":new jn(Tt.paint_raster["raster-hue-rotate"]),"raster-brightness-min":new jn(Tt.paint_raster["raster-brightness-min"]),"raster-brightness-max":new jn(Tt.paint_raster["raster-brightness-max"]),"raster-saturation":new jn(Tt.paint_raster["raster-saturation"]),"raster-contrast":new jn(Tt.paint_raster["raster-contrast"]),"raster-resampling":new jn(Tt.paint_raster["raster-resampling"]),"raster-fade-duration":new jn(Tt.paint_raster["raster-fade-duration"])})},js=function(t){function e(e){t.call(this,e,Ns)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Yn),Vs=function(t){function e(e){t.call(this,e,{}),this.implementation=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.is3D=function(){return"3d"===this.implementation.renderingMode},e.prototype.hasOffscreenPass=function(){return void 0!==this.implementation.prerender},e.prototype.recalculate=function(){},e.prototype.updateTransitions=function(){},e.prototype.hasTransition=function(){},e.prototype.serialize=function(){},e.prototype.onAdd=function(t){this.implementation.onAdd&&this.implementation.onAdd(t,t.painter.context.gl)},e.prototype.onRemove=function(t){this.implementation.onRemove&&this.implementation.onRemove(t,t.painter.context.gl)},e}(Yn),Us={circle:Mi,heatmap:Di,hillshade:Fi,fill:To,"fill-extrusion":Uo,line:$o,symbol:Rs,background:Bs,raster:js};function qs(t){for(var e=0,r=0,n=0,a=t;n<a.length;n+=1){var i=a[n];e+=i.w*i.h,r=Math.max(r,i.w)}t.sort(function(t,e){return e.h-t.h});for(var o=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(e/.95)),r),h:1/0}],s=0,l=0,c=0,u=t;c<u.length;c+=1)for(var h=u[c],f=o.length-1;f>=0;f--){var p=o[f];if(!(h.w>p.w||h.h>p.h)){if(h.x=p.x,h.y=p.y,l=Math.max(l,h.y+h.h),s=Math.max(s,h.x+h.w),h.w===p.w&&h.h===p.h){var d=o.pop();f<o.length&&(o[f]=d)}else h.h===p.h?(p.x+=h.w,p.w-=h.w):h.w===p.w?(p.y+=h.h,p.h-=h.h):(o.push({x:p.x+h.w,y:p.y,w:p.w-h.w,h:h.h}),p.y+=h.h,p.h-=h.h);break}}return{w:s,h:l,fill:e/(s*l)||0}}var Hs=function(t,e){var r=e.pixelRatio,n=e.version;this.paddedRect=t,this.pixelRatio=r,this.version=n},Gs={tl:{configurable:!0},br:{configurable:!0},tlbr:{configurable:!0},displaySize:{configurable:!0}};Gs.tl.get=function(){return[this.paddedRect.x+1,this.paddedRect.y+1]},Gs.br.get=function(){return[this.paddedRect.x+this.paddedRect.w-1,this.paddedRect.y+this.paddedRect.h-1]},Gs.tlbr.get=function(){return this.tl.concat(this.br)},Gs.displaySize.get=function(){return[(this.paddedRect.w-2)/this.pixelRatio,(this.paddedRect.h-2)/this.pixelRatio]},Object.defineProperties(Hs.prototype,Gs);var Ys=function(t,e){var r={},n={};this.haveRenderCallbacks=[];var a=[];this.addImages(t,r,a),this.addImages(e,n,a);var i=qs(a),o=i.w,s=i.h,l=new Oi({width:o||1,height:s||1});for(var c in t){var u=t[c],h=r[c].paddedRect;Oi.copy(u.data,l,{x:0,y:0},{x:h.x+1,y:h.y+1},u.data)}for(var f in e){var p=e[f],d=n[f].paddedRect,g=d.x+1,v=d.y+1,m=p.data.width,y=p.data.height;Oi.copy(p.data,l,{x:0,y:0},{x:g,y:v},p.data),Oi.copy(p.data,l,{x:0,y:y-1},{x:g,y:v-1},{width:m,height:1}),Oi.copy(p.data,l,{x:0,y:0},{x:g,y:v+y},{width:m,height:1}),Oi.copy(p.data,l,{x:m-1,y:0},{x:g-1,y:v},{width:1,height:y}),Oi.copy(p.data,l,{x:0,y:0},{x:g+m,y:v},{width:1,height:y})}this.image=l,this.iconPositions=r,this.patternPositions=n};Ys.prototype.addImages=function(t,e,r){for(var n in t){var a=t[n],i={x:0,y:0,w:a.data.width+2,h:a.data.height+2};r.push(i),e[n]=new Hs(i,a),a.hasRenderCallback&&this.haveRenderCallbacks.push(n)}},Ys.prototype.patchUpdatedImages=function(t,e){for(var r in t.dispatchRenderCallbacks(this.haveRenderCallbacks),t.updatedImages)this.patchUpdatedImage(this.iconPositions[r],t.getImage(r),e),this.patchUpdatedImage(this.patternPositions[r],t.getImage(r),e)},Ys.prototype.patchUpdatedImage=function(t,e,r){if(t&&e&&t.version!==e.version){t.version=e.version;var n=t.tl,a=n[0],i=n[1];r.update(e.data,void 0,{x:a,y:i})}},dn("ImagePosition",Hs),dn("ImageAtlas",Ys);var Ws=self.HTMLImageElement,Xs=self.HTMLCanvasElement,Zs=self.HTMLVideoElement,Js=self.ImageData,Ks=function(t,e,r,n){this.context=t,this.format=r,this.texture=t.gl.createTexture(),this.update(e,n)};Ks.prototype.update=function(t,e,r){var n=t.width,a=t.height,i=!(this.size&&this.size[0]===n&&this.size[1]===a||r),o=this.context,s=o.gl;if(this.useMipmap=Boolean(e&&e.useMipmap),s.bindTexture(s.TEXTURE_2D,this.texture),o.pixelStoreUnpackFlipY.set(!1),o.pixelStoreUnpack.set(1),o.pixelStoreUnpackPremultiplyAlpha.set(this.format===s.RGBA&&(!e||!1!==e.premultiply)),i)this.size=[n,a],t instanceof Ws||t instanceof Xs||t instanceof Zs||t instanceof Js?s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,s.UNSIGNED_BYTE,t):s.texImage2D(s.TEXTURE_2D,0,this.format,n,a,0,this.format,s.UNSIGNED_BYTE,t.data);else{var l=r||{x:0,y:0},c=l.x,u=l.y;t instanceof Ws||t instanceof Xs||t instanceof Zs||t instanceof Js?s.texSubImage2D(s.TEXTURE_2D,0,c,u,s.RGBA,s.UNSIGNED_BYTE,t):s.texSubImage2D(s.TEXTURE_2D,0,c,u,n,a,s.RGBA,s.UNSIGNED_BYTE,t.data)}this.useMipmap&&this.isSizePowerOfTwo()&&s.generateMipmap(s.TEXTURE_2D)},Ks.prototype.bind=function(t,e,r){var n=this.context.gl;n.bindTexture(n.TEXTURE_2D,this.texture),r!==n.LINEAR_MIPMAP_NEAREST||this.isSizePowerOfTwo()||(r=n.LINEAR),t!==this.filter&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,t),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,r||t),this.filter=t),e!==this.wrap&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,e),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,e),this.wrap=e)},Ks.prototype.isSizePowerOfTwo=function(){return this.size[0]===this.size[1]&&Math.log(this.size[0])/Math.LN2%1==0},Ks.prototype.destroy=function(){this.context.gl.deleteTexture(this.texture),this.texture=null};var Qs=function(t,e,r,n,a){var i,o,s=8*a-n-1,l=(1<<s)-1,c=l>>1,u=-7,h=r?a-1:0,f=r?-1:1,p=t[e+h];for(h+=f,i=p&(1<<-u)-1,p>>=-u,u+=s;u>0;i=256*i+t[e+h],h+=f,u-=8);for(o=i&(1<<-u)-1,i>>=-u,u+=n;u>0;o=256*o+t[e+h],h+=f,u-=8);if(0===i)i=1-c;else{if(i===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),i-=c}return(p?-1:1)*o*Math.pow(2,i-n)},$s=function(t,e,r,n,a,i){var o,s,l,c=8*i-a-1,u=(1<<c)-1,h=u>>1,f=23===a?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:i-1,d=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=u):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+h>=1?f/l:f*Math.pow(2,1-h))*l>=2&&(o++,l/=2),o+h>=u?(s=0,o=u):o+h>=1?(s=(e*l-1)*Math.pow(2,a),o+=h):(s=e*Math.pow(2,h-1)*Math.pow(2,a),o=0));a>=8;t[r+p]=255&s,p+=d,s/=256,a-=8);for(o=o<<a|s,c+=a;c>0;t[r+p]=255&o,p+=d,o/=256,c-=8);t[r+p-d]|=128*g},tl=el;function el(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}function rl(t){return t.type===el.Bytes?t.readVarint()+t.pos:t.pos+1}function nl(t,e,r){return r?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function al(t,e,r){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));r.realloc(n);for(var a=r.pos-1;a>=t;a--)r.buf[a+n]=r.buf[a]}function il(t,e){for(var r=0;r<t.length;r++)e.writeVarint(t[r])}function ol(t,e){for(var r=0;r<t.length;r++)e.writeSVarint(t[r])}function sl(t,e){for(var r=0;r<t.length;r++)e.writeFloat(t[r])}function ll(t,e){for(var r=0;r<t.length;r++)e.writeDouble(t[r])}function cl(t,e){for(var r=0;r<t.length;r++)e.writeBoolean(t[r])}function ul(t,e){for(var r=0;r<t.length;r++)e.writeFixed32(t[r])}function hl(t,e){for(var r=0;r<t.length;r++)e.writeSFixed32(t[r])}function fl(t,e){for(var r=0;r<t.length;r++)e.writeFixed64(t[r])}function pl(t,e){for(var r=0;r<t.length;r++)e.writeSFixed64(t[r])}function dl(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+16777216*t[e+3]}function gl(t,e,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function vl(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}el.Varint=0,el.Fixed64=1,el.Bytes=2,el.Fixed32=5,el.prototype={destroy:function(){this.buf=null},readFields:function(t,e,r){for(r=r||this.length;this.pos<r;){var n=this.readVarint(),a=n>>3,i=this.pos;this.type=7&n,t(a,e,this),this.pos===i&&this.skip(n)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=dl(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=vl(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=dl(this.buf,this.pos)+4294967296*dl(this.buf,this.pos+4);return this.pos+=8,t},readSFixed64:function(){var t=dl(this.buf,this.pos)+4294967296*vl(this.buf,this.pos+4);return this.pos+=8,t},readFloat:function(){var t=Qs(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=Qs(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,r,n=this.buf;return e=127&(r=n[this.pos++]),r<128?e:(e|=(127&(r=n[this.pos++]))<<7,r<128?e:(e|=(127&(r=n[this.pos++]))<<14,r<128?e:(e|=(127&(r=n[this.pos++]))<<21,r<128?e:function(t,e,r){var n,a,i=r.buf;if(n=(112&(a=i[r.pos++]))>>4,a<128)return nl(t,n,e);if(n|=(127&(a=i[r.pos++]))<<3,a<128)return nl(t,n,e);if(n|=(127&(a=i[r.pos++]))<<10,a<128)return nl(t,n,e);if(n|=(127&(a=i[r.pos++]))<<17,a<128)return nl(t,n,e);if(n|=(127&(a=i[r.pos++]))<<24,a<128)return nl(t,n,e);if(n|=(1&(a=i[r.pos++]))<<31,a<128)return nl(t,n,e);throw new Error("Expected varint not more than 10 bytes")}(e|=(15&(r=n[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=function(t,e,r){for(var n="",a=e;a<r;){var i,o,s,l=t[a],c=null,u=l>239?4:l>223?3:l>191?2:1;if(a+u>r)break;1===u?l<128&&(c=l):2===u?128==(192&(i=t[a+1]))&&(c=(31&l)<<6|63&i)<=127&&(c=null):3===u?(i=t[a+1],o=t[a+2],128==(192&i)&&128==(192&o)&&((c=(15&l)<<12|(63&i)<<6|63&o)<=2047||c>=55296&&c<=57343)&&(c=null)):4===u&&(i=t[a+1],o=t[a+2],s=t[a+3],128==(192&i)&&128==(192&o)&&128==(192&s)&&((c=(15&l)<<18|(63&i)<<12|(63&o)<<6|63&s)<=65535||c>=1114112)&&(c=null)),null===c?(c=65533,u=1):c>65535&&(c-=65536,n+=String.fromCharCode(c>>>10&1023|55296),c=56320|1023&c),n+=String.fromCharCode(c),a+=u}return n}(this.buf,this.pos,t);return this.pos=t,e},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==el.Bytes)return t.push(this.readVarint(e));var r=rl(this);for(t=t||[];this.pos<r;)t.push(this.readVarint(e));return t},readPackedSVarint:function(t){if(this.type!==el.Bytes)return t.push(this.readSVarint());var e=rl(this);for(t=t||[];this.pos<e;)t.push(this.readSVarint());return t},readPackedBoolean:function(t){if(this.type!==el.Bytes)return t.push(this.readBoolean());var e=rl(this);for(t=t||[];this.pos<e;)t.push(this.readBoolean());return t},readPackedFloat:function(t){if(this.type!==el.Bytes)return t.push(this.readFloat());var e=rl(this);for(t=t||[];this.pos<e;)t.push(this.readFloat());return t},readPackedDouble:function(t){if(this.type!==el.Bytes)return t.push(this.readDouble());var e=rl(this);for(t=t||[];this.pos<e;)t.push(this.readDouble());return t},readPackedFixed32:function(t){if(this.type!==el.Bytes)return t.push(this.readFixed32());var e=rl(this);for(t=t||[];this.pos<e;)t.push(this.readFixed32());return t},readPackedSFixed32:function(t){if(this.type!==el.Bytes)return t.push(this.readSFixed32());var e=rl(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed32());return t},readPackedFixed64:function(t){if(this.type!==el.Bytes)return t.push(this.readFixed64());var e=rl(this);for(t=t||[];this.pos<e;)t.push(this.readFixed64());return t},readPackedSFixed64:function(t){if(this.type!==el.Bytes)return t.push(this.readSFixed64());var e=rl(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed64());return t},skip:function(t){var e=7&t;if(e===el.Varint)for(;this.buf[this.pos++]>127;);else if(e===el.Bytes)this.pos=this.readVarint()+this.pos;else if(e===el.Fixed32)this.pos+=4;else{if(e!==el.Fixed64)throw new Error("Unimplemented type: "+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e<this.pos+t;)e*=2;if(e!==this.length){var r=new Uint8Array(e);r.set(this.buf),this.buf=r,this.length=e}},finish:function(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)},writeFixed32:function(t){this.realloc(4),gl(this.buf,t,this.pos),this.pos+=4},writeSFixed32:function(t){this.realloc(4),gl(this.buf,t,this.pos),this.pos+=4},writeFixed64:function(t){this.realloc(8),gl(this.buf,-1&t,this.pos),gl(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8},writeSFixed64:function(t){this.realloc(8),gl(this.buf,-1&t,this.pos),gl(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8},writeVarint:function(t){(t=+t||0)>268435455||t<0?function(t,e){var r,n;if(t>=0?(r=t%4294967296|0,n=t/4294967296|0):(n=~(-t/4294967296),4294967295^(r=~(-t%4294967296))?r=r+1|0:(r=0,n=n+1|0)),t>=0x10000000000000000||t<-0x10000000000000000)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),function(t,e,r){r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos]=127&t}(r,0,e),function(t,e){var r=(7&t)<<4;e.buf[e.pos++]|=r|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t)))))}(n,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,r){for(var n,a,i=0;i<e.length;i++){if((n=e.charCodeAt(i))>55295&&n<57344){if(!a){n>56319||i+1===e.length?(t[r++]=239,t[r++]=191,t[r++]=189):a=n;continue}if(n<56320){t[r++]=239,t[r++]=191,t[r++]=189,a=n;continue}n=a-55296<<10|n-56320|65536,a=null}else a&&(t[r++]=239,t[r++]=191,t[r++]=189,a=null);n<128?t[r++]=n:(n<2048?t[r++]=n>>6|192:(n<65536?t[r++]=n>>12|224:(t[r++]=n>>18|240,t[r++]=n>>12&63|128),t[r++]=n>>6&63|128),t[r++]=63&n|128)}return r}(this.buf,t,this.pos);var r=this.pos-e;r>=128&&al(e,r,this),this.pos=e-1,this.writeVarint(r),this.pos+=r},writeFloat:function(t){this.realloc(4),$s(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),$s(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var r=0;r<e;r++)this.buf[this.pos++]=t[r]},writeRawMessage:function(t,e){this.pos++;var r=this.pos;t(e,this);var n=this.pos-r;n>=128&&al(r,n,this),this.pos=r-1,this.writeVarint(n),this.pos+=n},writeMessage:function(t,e,r){this.writeTag(t,el.Bytes),this.writeRawMessage(e,r)},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,il,e)},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,ol,e)},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,cl,e)},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,sl,e)},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,ll,e)},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,ul,e)},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,hl,e)},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,fl,e)},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,pl,e)},writeBytesField:function(t,e){this.writeTag(t,el.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,el.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,el.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,el.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,el.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,el.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,el.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,el.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,el.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,el.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}};var ml=3;function yl(t,e,r){1===t&&r.readMessage(xl,e)}function xl(t,e,r){if(3===t){var n=r.readMessage(bl,{}),a=n.id,i=n.bitmap,o=n.width,s=n.height,l=n.left,c=n.top,u=n.advance;e.push({id:a,bitmap:new Pi({width:o+2*ml,height:s+2*ml},i),metrics:{width:o,height:s,left:l,top:c,advance:u}})}}function bl(t,e,r){1===t?e.id=r.readVarint():2===t?e.bitmap=r.readBytes():3===t?e.width=r.readVarint():4===t?e.height=r.readVarint():5===t?e.left=r.readSVarint():6===t?e.top=r.readSVarint():7===t&&(e.advance=r.readVarint())}var _l=ml,wl=function(t){var e=this;this._callback=t,this._triggered=!1,"undefined"!=typeof MessageChannel&&(this._channel=new MessageChannel,this._channel.port2.onmessage=function(){e._triggered=!1,e._callback()})};wl.prototype.trigger=function(){var t=this;this._triggered||(this._triggered=!0,this._channel?this._channel.port1.postMessage(!0):setTimeout(function(){t._triggered=!1,t._callback()},0))};var kl=function(t,e,r){this.target=t,this.parent=e,this.mapId=r,this.callbacks={},this.tasks={},this.taskQueue=[],this.cancelCallbacks={},v(["receive","process"],this),this.invoker=new wl(this.process),this.target.addEventListener("message",this.receive,!1)};function Tl(t,e,r){var n=2*Math.PI*6378137/256/Math.pow(2,r);return[t*n-2*Math.PI*6378137/2,e*n-2*Math.PI*6378137/2]}kl.prototype.send=function(t,e,r,n){var a=this,i=Math.round(1e18*Math.random()).toString(36).substring(0,10);r&&(this.callbacks[i]=r);var o=[];return this.target.postMessage({id:i,type:t,hasCallback:!!r,targetMapId:n,sourceMapId:this.mapId,data:vn(e,o)},o),{cancel:function(){r&&delete a.callbacks[i],a.target.postMessage({id:i,type:"<cancel>",targetMapId:n,sourceMapId:a.mapId})}}},kl.prototype.receive=function(t){var e=t.data,r=e.id;if(r&&(!e.targetMapId||this.mapId===e.targetMapId))if("<cancel>"===e.type){delete this.tasks[r];var n=this.cancelCallbacks[r];delete this.cancelCallbacks[r],n&&n()}else this.tasks[r]=e,this.taskQueue.push(r),this.invoker.trigger()},kl.prototype.process=function(){var t=this;if(this.taskQueue.length){var e=this.taskQueue.shift(),r=this.tasks[e];if(delete this.tasks[e],this.taskQueue.length&&this.invoker.trigger(),r)if("<response>"===r.type){var n=this.callbacks[e];delete this.callbacks[e],n&&(r.error?n(mn(r.error)):n(null,mn(r.data)))}else{var a=!1,i=r.hasCallback?function(r,n){a=!0,delete t.cancelCallbacks[e];var i=[];t.target.postMessage({id:e,type:"<response>",sourceMapId:t.mapId,error:r?vn(r):null,data:vn(n,i)},i)}:function(t){a=!0},o=null,s=mn(r.data);if(this.parent[r.type])o=this.parent[r.type](r.sourceMapId,s,i);else if(this.parent.getWorkerSource){var l=r.type.split(".");o=this.parent.getWorkerSource(r.sourceMapId,l[0],s.source)[l[1]](s,i)}else i(new Error("Could not find function "+r.type));!a&&o&&o.cancel&&(this.cancelCallbacks[e]=o.cancel)}}},kl.prototype.remove=function(){this.target.removeEventListener("message",this.receive,!1)};var Ml=function(t,e){t&&(e?this.setSouthWest(t).setNorthEast(e):4===t.length?this.setSouthWest([t[0],t[1]]).setNorthEast([t[2],t[3]]):this.setSouthWest(t[0]).setNorthEast(t[1]))};Ml.prototype.setNorthEast=function(t){return this._ne=t instanceof Al?new Al(t.lng,t.lat):Al.convert(t),this},Ml.prototype.setSouthWest=function(t){return this._sw=t instanceof Al?new Al(t.lng,t.lat):Al.convert(t),this},Ml.prototype.extend=function(t){var e,r,n=this._sw,a=this._ne;if(t instanceof Al)e=t,r=t;else{if(!(t instanceof Ml))return Array.isArray(t)?t.every(Array.isArray)?this.extend(Ml.convert(t)):this.extend(Al.convert(t)):this;if(e=t._sw,r=t._ne,!e||!r)return this}return n||a?(n.lng=Math.min(e.lng,n.lng),n.lat=Math.min(e.lat,n.lat),a.lng=Math.max(r.lng,a.lng),a.lat=Math.max(r.lat,a.lat)):(this._sw=new Al(e.lng,e.lat),this._ne=new Al(r.lng,r.lat)),this},Ml.prototype.getCenter=function(){return new Al((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)},Ml.prototype.getSouthWest=function(){return this._sw},Ml.prototype.getNorthEast=function(){return this._ne},Ml.prototype.getNorthWest=function(){return new Al(this.getWest(),this.getNorth())},Ml.prototype.getSouthEast=function(){return new Al(this.getEast(),this.getSouth())},Ml.prototype.getWest=function(){return this._sw.lng},Ml.prototype.getSouth=function(){return this._sw.lat},Ml.prototype.getEast=function(){return this._ne.lng},Ml.prototype.getNorth=function(){return this._ne.lat},Ml.prototype.toArray=function(){return[this._sw.toArray(),this._ne.toArray()]},Ml.prototype.toString=function(){return"LngLatBounds("+this._sw.toString()+", "+this._ne.toString()+")"},Ml.prototype.isEmpty=function(){return!(this._sw&&this._ne)},Ml.convert=function(t){return!t||t instanceof Ml?t:new Ml(t)};var Al=function(t,e){if(isNaN(t)||isNaN(e))throw new Error("Invalid LngLat object: ("+t+", "+e+")");if(this.lng=+t,this.lat=+e,this.lat>90||this.lat<-90)throw new Error("Invalid LngLat latitude value: must be between -90 and 90")};Al.prototype.wrap=function(){return new Al(u(this.lng,-180,180),this.lat)},Al.prototype.toArray=function(){return[this.lng,this.lat]},Al.prototype.toString=function(){return"LngLat("+this.lng+", "+this.lat+")"},Al.prototype.toBounds=function(t){void 0===t&&(t=0);var e=360*t/40075017,r=e/Math.cos(Math.PI/180*this.lat);return new Ml(new Al(this.lng-r,this.lat-e),new Al(this.lng+r,this.lat+e))},Al.convert=function(t){if(t instanceof Al)return t;if(Array.isArray(t)&&(2===t.length||3===t.length))return new Al(Number(t[0]),Number(t[1]));if(!Array.isArray(t)&&"object"==typeof t&&null!==t)return new Al(Number("lng"in t?t.lng:t.lon),Number(t.lat));throw new Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]")};var Sl=2*Math.PI*6378137;function El(t){return Sl*Math.cos(t*Math.PI/180)}function Ll(t){return(180+t)/360}function Cl(t){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360}function Pl(t,e){return t/El(e)}function Ol(t){var e=180-360*t;return 360/Math.PI*Math.atan(Math.exp(e*Math.PI/180))-90}var zl=function(t,e,r){void 0===r&&(r=0),this.x=+t,this.y=+e,this.z=+r};zl.fromLngLat=function(t,e){void 0===e&&(e=0);var r=Al.convert(t);return new zl(Ll(r.lng),Cl(r.lat),Pl(e,r.lat))},zl.prototype.toLngLat=function(){return new Al(360*this.x-180,Ol(this.y))},zl.prototype.toAltitude=function(){return this.z*El(Ol(this.y))},zl.prototype.meterInMercatorCoordinateUnits=function(){return 1/Sl*(t=Ol(this.y),1/Math.cos(t*Math.PI/180));var t};var Il=function(t,e,r){this.z=t,this.x=e,this.y=r,this.key=Fl(0,t,e,r)};Il.prototype.equals=function(t){return this.z===t.z&&this.x===t.x&&this.y===t.y},Il.prototype.url=function(t,e){var r,n,a,i,o,s=(r=this.x,n=this.y,a=this.z,i=Tl(256*r,256*(n=Math.pow(2,a)-n-1),a),o=Tl(256*(r+1),256*(n+1),a),i[0]+","+i[1]+","+o[0]+","+o[1]),l=function(t,e,r){for(var n,a="",i=t;i>0;i--)a+=(e&(n=1<<i-1)?1:0)+(r&n?2:0);return a}(this.z,this.x,this.y);return t[(this.x+this.y)%t.length].replace("{prefix}",(this.x%16).toString(16)+(this.y%16).toString(16)).replace("{z}",String(this.z)).replace("{x}",String(this.x)).replace("{y}",String("tms"===e?Math.pow(2,this.z)-this.y-1:this.y)).replace("{quadkey}",l).replace("{bbox-epsg-3857}",s)},Il.prototype.getTilePoint=function(t){var e=Math.pow(2,this.z);return new a((t.x*e-this.x)*ei,(t.y*e-this.y)*ei)};var Dl=function(t,e){this.wrap=t,this.canonical=e,this.key=Fl(t,e.z,e.x,e.y)},Rl=function(t,e,r,n,a){this.overscaledZ=t,this.wrap=e,this.canonical=new Il(r,+n,+a),this.key=Fl(e,t,n,a)};function Fl(t,e,r,n){(t*=2)<0&&(t=-1*t-1);var a=1<<e;return 32*(a*a*t+a*n+r)+e}Rl.prototype.equals=function(t){return this.overscaledZ===t.overscaledZ&&this.wrap===t.wrap&&this.canonical.equals(t.canonical)},Rl.prototype.scaledTo=function(t){var e=this.canonical.z-t;return t>this.canonical.z?new Rl(t,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new Rl(t,this.wrap,t,this.canonical.x>>e,this.canonical.y>>e)},Rl.prototype.isChildOf=function(t){if(t.wrap!==this.wrap)return!1;var e=this.canonical.z-t.canonical.z;return 0===t.overscaledZ||t.overscaledZ<this.overscaledZ&&t.canonical.x===this.canonical.x>>e&&t.canonical.y===this.canonical.y>>e},Rl.prototype.children=function(t){if(this.overscaledZ>=t)return[new Rl(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];var e=this.canonical.z+1,r=2*this.canonical.x,n=2*this.canonical.y;return[new Rl(e,this.wrap,e,r,n),new Rl(e,this.wrap,e,r+1,n),new Rl(e,this.wrap,e,r,n+1),new Rl(e,this.wrap,e,r+1,n+1)]},Rl.prototype.isLessThan=function(t){return this.wrap<t.wrap||!(this.wrap>t.wrap)&&(this.overscaledZ<t.overscaledZ||!(this.overscaledZ>t.overscaledZ)&&(this.canonical.x<t.canonical.x||!(this.canonical.x>t.canonical.x)&&this.canonical.y<t.canonical.y))},Rl.prototype.wrapped=function(){return new Rl(this.overscaledZ,0,this.canonical.z,this.canonical.x,this.canonical.y)},Rl.prototype.unwrapTo=function(t){return new Rl(this.overscaledZ,t,this.canonical.z,this.canonical.x,this.canonical.y)},Rl.prototype.overscaleFactor=function(){return Math.pow(2,this.overscaledZ-this.canonical.z)},Rl.prototype.toUnwrapped=function(){return new Dl(this.wrap,this.canonical)},Rl.prototype.toString=function(){return this.overscaledZ+"/"+this.canonical.x+"/"+this.canonical.y},Rl.prototype.getTilePoint=function(t){return this.canonical.getTilePoint(new zl(t.x-this.wrap,t.y))},dn("CanonicalTileID",Il),dn("OverscaledTileID",Rl,{omit:["posMatrix"]});var Bl=function(t,e,r){if(this.uid=t,e.height!==e.width)throw new RangeError("DEM tiles must be square");if(r&&"mapbox"!==r&&"terrarium"!==r)return w('"'+r+'" is not a valid encoding type. Valid types include "mapbox" and "terrarium".');var n=this.dim=e.height;this.stride=this.dim+2,this.data=new Int32Array(this.stride*this.stride);for(var a=e.data,i="terrarium"===r?this._unpackTerrarium:this._unpackMapbox,o=0;o<n;o++)for(var s=0;s<n;s++){var l=4*(o*n+s);this.set(s,o,i(a[l],a[l+1],a[l+2]))}for(var c=0;c<n;c++)this.set(-1,c,this.get(0,c)),this.set(n,c,this.get(n-1,c)),this.set(c,-1,this.get(c,0)),this.set(c,n,this.get(c,n-1));this.set(-1,-1,this.get(0,0)),this.set(n,-1,this.get(n-1,0)),this.set(-1,n,this.get(0,n-1)),this.set(n,n,this.get(n-1,n-1))};Bl.prototype.set=function(t,e,r){this.data[this._idx(t,e)]=r+65536},Bl.prototype.get=function(t,e){return this.data[this._idx(t,e)]-65536},Bl.prototype._idx=function(t,e){if(t<-1||t>=this.dim+1||e<-1||e>=this.dim+1)throw new RangeError("out of range source coordinates for DEM data");return(e+1)*this.stride+(t+1)},Bl.prototype._unpackMapbox=function(t,e,r){return(256*t*256+256*e+r)/10-1e4},Bl.prototype._unpackTerrarium=function(t,e,r){return 256*t+e+r/256-32768},Bl.prototype.getPixels=function(){return new Oi({width:this.stride,height:this.stride},new Uint8Array(this.data.buffer))},Bl.prototype.backfillBorder=function(t,e,r){if(this.dim!==t.dim)throw new Error("dem dimension mismatch");var n=e*this.dim,a=e*this.dim+this.dim,i=r*this.dim,o=r*this.dim+this.dim;switch(e){case-1:n=a-1;break;case 1:a=n+1}switch(r){case-1:i=o-1;break;case 1:o=i+1}for(var s=-e*this.dim,l=-r*this.dim,c=i;c<o;c++)for(var u=n;u<a;u++)this.set(u,c,t.get(u+s,c+l))},dn("DEMData",Bl);var Nl=Jn([{name:"a_pos",type:"Int16",components:2},{name:"a_texture_pos",type:"Int16",components:2}]),jl=function(t){this._stringToNumber={},this._numberToString=[];for(var e=0;e<t.length;e++){var r=t[e];this._stringToNumber[r]=e,this._numberToString[e]=r}};jl.prototype.encode=function(t){return this._stringToNumber[t]},jl.prototype.decode=function(t){return this._numberToString[t]};var Vl=function(t,e,r,n){this.type="Feature",this._vectorTileFeature=t,t._z=e,t._x=r,t._y=n,this.properties=t.properties,null!=t.id&&(this.id=t.id)},Ul={geometry:{configurable:!0}};Ul.geometry.get=function(){return void 0===this._geometry&&(this._geometry=this._vectorTileFeature.toGeoJSON(this._vectorTileFeature._x,this._vectorTileFeature._y,this._vectorTileFeature._z).geometry),this._geometry},Ul.geometry.set=function(t){this._geometry=t},Vl.prototype.toJSON=function(){var t={geometry:this.geometry};for(var e in this)"_geometry"!==e&&"_vectorTileFeature"!==e&&(t[e]=this[e]);return t},Object.defineProperties(Vl.prototype,Ul);var ql=function(){this.state={},this.stateChanges={},this.deletedStates={}};ql.prototype.updateState=function(t,e,r){var n=String(e);if(this.stateChanges[t]=this.stateChanges[t]||{},this.stateChanges[t][n]=this.stateChanges[t][n]||{},h(this.stateChanges[t][n],r),null===this.deletedStates[t])for(var a in this.deletedStates[t]={},this.state[t])a!==n&&(this.deletedStates[t][a]=null);else if(this.deletedStates[t]&&null===this.deletedStates[t][n])for(var i in this.deletedStates[t][n]={},this.state[t][n])r[i]||(this.deletedStates[t][n][i]=null);else for(var o in r)this.deletedStates[t]&&this.deletedStates[t][n]&&null===this.deletedStates[t][n][o]&&delete this.deletedStates[t][n][o]},ql.prototype.removeFeatureState=function(t,e,r){if(null!==this.deletedStates[t]){var n=String(e);if(this.deletedStates[t]=this.deletedStates[t]||{},r&&void 0!==e&&e>=0)null!==this.deletedStates[t][n]&&(this.deletedStates[t][n]=this.deletedStates[t][n]||{},this.deletedStates[t][n][r]=null);else if(void 0!==e&&e>=0)if(this.stateChanges[t]&&this.stateChanges[t][n])for(r in this.deletedStates[t][n]={},this.stateChanges[t][n])this.deletedStates[t][n][r]=null;else this.deletedStates[t][n]=null;else this.deletedStates[t]=null}},ql.prototype.getState=function(t,e){var r=String(e),n=this.state[t]||{},a=this.stateChanges[t]||{},i=h({},n[r],a[r]);if(null===this.deletedStates[t])return{};if(this.deletedStates[t]){var o=this.deletedStates[t][e];if(null===o)return{};for(var s in o)delete i[s]}return i},ql.prototype.initializeTileState=function(t,e){t.setFeatureState(this.state,e)},ql.prototype.coalesceChanges=function(t,e){var r={};for(var n in this.stateChanges){this.state[n]=this.state[n]||{};var a={};for(var i in this.stateChanges[n])this.state[n][i]||(this.state[n][i]={}),h(this.state[n][i],this.stateChanges[n][i]),a[i]=this.state[n][i];r[n]=a}for(var o in this.deletedStates){this.state[o]=this.state[o]||{};var s={};if(null===this.deletedStates[o])for(var l in this.state[o])s[l]={},this.state[o][l]={};else for(var c in this.deletedStates[o]){if(null===this.deletedStates[o][c])this.state[o][c]={};else for(var u=0,f=Object.keys(this.deletedStates[o][c]);u<f.length;u+=1){var p=f[u];delete this.state[o][c][p]}s[c]=this.state[o][c]}r[o]=r[o]||{},h(r[o],s)}if(this.stateChanges={},this.deletedStates={},0!==Object.keys(r).length)for(var d in t)t[d].setFeatureState(r,e)};var Hl=function(t,e,r){this.tileID=t,this.x=t.canonical.x,this.y=t.canonical.y,this.z=t.canonical.z,this.grid=e||new cn(ei,16,0),this.grid3D=new cn(ei,16,0),this.featureIndexArray=r||new Ca};function Gl(t){for(var e=1/0,r=1/0,n=-1/0,a=-1/0,i=0,o=t;i<o.length;i+=1){var s=o[i];e=Math.min(e,s.x),r=Math.min(r,s.y),n=Math.max(n,s.x),a=Math.max(a,s.y)}return{minX:e,minY:r,maxX:n,maxY:a}}function Yl(t,e){return e-t}Hl.prototype.insert=function(t,e,r,n,a,i){var o=this.featureIndexArray.length;this.featureIndexArray.emplaceBack(r,n,a);for(var s=i?this.grid3D:this.grid,l=0;l<e.length;l++){for(var c=e[l],u=[1/0,1/0,-1/0,-1/0],h=0;h<c.length;h++){var f=c[h];u[0]=Math.min(u[0],f.x),u[1]=Math.min(u[1],f.y),u[2]=Math.max(u[2],f.x),u[3]=Math.max(u[3],f.y)}u[0]<ei&&u[1]<ei&&u[2]>=0&&u[3]>=0&&s.insert(o,u[0],u[1],u[2],u[3])}},Hl.prototype.loadVTLayers=function(){return this.vtLayers||(this.vtLayers=new Io.VectorTile(new tl(this.rawTileData)).layers,this.sourceLayerCoder=new jl(this.vtLayers?Object.keys(this.vtLayers).sort():["_geojsonTileLayer"])),this.vtLayers},Hl.prototype.query=function(t,e,r){var n=this;this.loadVTLayers();for(var i=t.params||{},o=ei/t.tileSize/t.scale,s=Rr(i.filter),l=t.queryGeometry,c=t.queryPadding*o,u=Gl(l),h=this.grid.query(u.minX-c,u.minY-c,u.maxX+c,u.maxY+c),f=Gl(t.cameraQueryGeometry),p=0,d=this.grid3D.query(f.minX-c,f.minY-c,f.maxX+c,f.maxY+c,function(e,r,n,i){return function(t,e,r,n,i){for(var o=0,s=t;o<s.length;o+=1){var l=s[o];if(e<=l.x&&r<=l.y&&n>=l.x&&i>=l.y)return!0}var c=[new a(e,r),new a(e,i),new a(n,i),new a(n,r)];if(t.length>2)for(var u=0,h=c;u<h.length;u+=1)if(gi(t,h[u]))return!0;for(var f=0;f<t.length-1;f++)if(vi(t[f],t[f+1],c))return!0;return!1}(t.cameraQueryGeometry,e-c,r-c,n+c,i+c)});p<d.length;p+=1){var g=d[p];h.push(g)}h.sort(Yl);for(var v,m={},y=function(a){var c=h[a];if(c!==v){v=c;var u=n.featureIndexArray.get(c),f=null;n.loadMatchingFeature(m,u.bucketIndex,u.sourceLayerIndex,u.featureIndex,s,i.layers,e,function(e,a){f||(f=ni(e));var i={};return e.id&&(i=r.getState(a.sourceLayer||"_geojsonTileLayer",e.id)),a.queryIntersectsFeature(l,e,i,f,n.z,t.transform,o,t.pixelPosMatrix)})}},x=0;x<h.length;x++)y(x);return m},Hl.prototype.loadMatchingFeature=function(t,e,r,n,a,i,o,s){var l=this.bucketLayerIDs[e];if(!i||function(t,e){for(var r=0;r<t.length;r++)if(e.indexOf(t[r])>=0)return!0;return!1}(i,l)){var c=this.sourceLayerCoder.decode(r),u=this.vtLayers[c].feature(n);if(a(new Pn(this.tileID.overscaledZ),u))for(var h=0;h<l.length;h++){var f=l[h];if(!(i&&i.indexOf(f)<0)){var p=o[f];if(p){var d=!s||s(u,p);if(d){var g=new Vl(u,this.z,this.x,this.y);g.layer=p.serialize();var v=t[f];void 0===v&&(v=t[f]=[]),v.push({featureIndex:n,feature:g,intersectionZ:d})}}}}}},Hl.prototype.lookupSymbolFeatures=function(t,e,r,n,a,i){var o={};this.loadVTLayers();for(var s=Rr(n),l=0,c=t;l<c.length;l+=1){var u=c[l];this.loadMatchingFeature(o,e,r,u,s,a,i)}return o},Hl.prototype.hasLayer=function(t){for(var e=0,r=this.bucketLayerIDs;e<r.length;e+=1)for(var n=0,a=r[e];n<a.length;n+=1)if(t===a[n])return!0;return!1},dn("FeatureIndex",Hl,{omit:["rawTileData","sourceLayerCoder"]});var Wl=function(t,e){this.tileID=t,this.uid=p(),this.uses=0,this.tileSize=e,this.buckets={},this.expirationTime=null,this.queryPadding=0,this.hasSymbolBuckets=!1,this.expiredRequestCount=0,this.state="loading"};function Xl(t,e,r,n,a){if(void 0===e.segment)return!0;for(var i=e,o=e.segment+1,s=0;s>-r/2;){if(--o<0)return!1;s-=t[o].dist(i),i=t[o]}s+=t[o].dist(t[o+1]),o++;for(var l=[],c=0;s<r/2;){var u=t[o-1],h=t[o],f=t[o+1];if(!f)return!1;var p=u.angleTo(h)-h.angleTo(f);for(p=Math.abs((p+3*Math.PI)%(2*Math.PI)-Math.PI),l.push({distance:s,angleDelta:p}),c+=p;s-l[0].distance>n;)c-=l.shift().angleDelta;if(c>a)return!1;o++,s+=h.dist(f)}return!0}function Zl(t){for(var e=0,r=0;r<t.length-1;r++)e+=t[r].dist(t[r+1]);return e}function Jl(t,e,r){return t?.6*e*r:0}function Kl(t,e){return Math.max(t?t.right-t.left:0,e?e.right-e.left:0)}function Ql(t,e,r,n,a,i){for(var o=Jl(r,a,i),s=Kl(r,n)*i,l=0,c=Zl(t)/2,u=0;u<t.length-1;u++){var h=t[u],f=t[u+1],p=h.dist(f);if(l+p>c){var d=(c-l)/p,g=ye(h.x,f.x,d),v=ye(h.y,f.y,d),m=new bs(g,v,f.angleTo(h),u);return m._round(),!o||Xl(t,m,s,o,e)?m:void 0}l+=p}}function $l(t,e,r,n,a,i,o,s,l){var c=Jl(n,i,o),u=Kl(n,a),h=u*o,f=0===t[0].x||t[0].x===l||0===t[0].y||t[0].y===l;return e-h<e/4&&(e=h+e/4),function t(e,r,n,a,i,o,s,l,c){for(var u=o/2,h=Zl(e),f=0,p=r-n,d=[],g=0;g<e.length-1;g++){for(var v=e[g],m=e[g+1],y=v.dist(m),x=m.angleTo(v);p+n<f+y;){var b=((p+=n)-f)/y,_=ye(v.x,m.x,b),w=ye(v.y,m.y,b);if(_>=0&&_<c&&w>=0&&w<c&&p-u>=0&&p+u<=h){var k=new bs(_,w,x,g);k._round(),a&&!Xl(e,k,o,a,i)||d.push(k)}}f+=y}return l||d.length||s||(d=t(e,f/2,n,a,i,o,s,!0,c)),d}(t,f?e/2*s%e:(u/2+2*i)*o*s%e,e,c,r,h,f,!1,l)}Wl.prototype.registerFadeDuration=function(t){var e=t+this.timeAdded;e<I.now()||this.fadeEndTime&&e<this.fadeEndTime||(this.fadeEndTime=e)},Wl.prototype.wasRequested=function(){return"errored"===this.state||"loaded"===this.state||"reloading"===this.state},Wl.prototype.loadVectorData=function(t,e,r){if(this.hasData()&&this.unloadVectorData(),this.state="loaded",t){for(var n in t.featureIndex&&(this.latestFeatureIndex=t.featureIndex,t.rawTileData?(this.latestRawTileData=t.rawTileData,this.latestFeatureIndex.rawTileData=t.rawTileData):this.latestRawTileData&&(this.latestFeatureIndex.rawTileData=this.latestRawTileData)),this.collisionBoxArray=t.collisionBoxArray,this.buckets=function(t,e){var r={};if(!e)return r;for(var n=function(){var t=i[a],n=t.layerIds.map(function(t){return e.getLayer(t)}).filter(Boolean);if(0!==n.length){t.layers=n,t.stateDependentLayerIds&&(t.stateDependentLayers=t.stateDependentLayerIds.map(function(t){return n.filter(function(e){return e.id===t})[0]}));for(var o=0,s=n;o<s.length;o+=1){var l=s[o];r[l.id]=t}}},a=0,i=t;a<i.length;a+=1)n();return r}(t.buckets,e.style),this.hasSymbolBuckets=!1,this.buckets){var a=this.buckets[n];if(a instanceof Os){if(this.hasSymbolBuckets=!0,!r)break;a.justReloaded=!0}}for(var i in this.queryPadding=0,this.buckets){var o=this.buckets[i];this.queryPadding=Math.max(this.queryPadding,e.style.getLayer(i).queryRadius(o))}t.imageAtlas&&(this.imageAtlas=t.imageAtlas),t.glyphAtlasImage&&(this.glyphAtlasImage=t.glyphAtlasImage)}else this.collisionBoxArray=new ba},Wl.prototype.unloadVectorData=function(){for(var t in this.buckets)this.buckets[t].destroy();this.buckets={},this.imageAtlasTexture&&this.imageAtlasTexture.destroy(),this.imageAtlas&&(this.imageAtlas=null),this.glyphAtlasTexture&&this.glyphAtlasTexture.destroy(),this.latestFeatureIndex=null,this.state="unloaded"},Wl.prototype.unloadDEMData=function(){this.dem=null,this.neighboringTiles=null,this.state="unloaded"},Wl.prototype.getBucket=function(t){return this.buckets[t.id]},Wl.prototype.upload=function(t){for(var e in this.buckets){var r=this.buckets[e];r.uploadPending()&&r.upload(t)}var n=t.gl;this.imageAtlas&&!this.imageAtlas.uploaded&&(this.imageAtlasTexture=new Ks(t,this.imageAtlas.image,n.RGBA),this.imageAtlas.uploaded=!0),this.glyphAtlasImage&&(this.glyphAtlasTexture=new Ks(t,this.glyphAtlasImage,n.ALPHA),this.glyphAtlasImage=null)},Wl.prototype.prepare=function(t){this.imageAtlas&&this.imageAtlas.patchUpdatedImages(t,this.imageAtlasTexture)},Wl.prototype.queryRenderedFeatures=function(t,e,r,n,a,i,o,s,l){return this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData?this.latestFeatureIndex.query({queryGeometry:r,cameraQueryGeometry:n,scale:a,tileSize:this.tileSize,pixelPosMatrix:l,transform:o,params:i,queryPadding:this.queryPadding*s},t,e):{}},Wl.prototype.querySourceFeatures=function(t,e){if(this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData){var r=this.latestFeatureIndex.loadVTLayers(),n=e?e.sourceLayer:"",a=r._geojsonTileLayer||r[n];if(a)for(var i=Rr(e&&e.filter),o=this.tileID.canonical,s=o.z,l=o.x,c=o.y,u={z:s,x:l,y:c},h=0;h<a.length;h++){var f=a.feature(h);if(i(new Pn(this.tileID.overscaledZ),f)){var p=new Vl(f,s,l,c);p.tile=u,t.push(p)}}}},Wl.prototype.clearMask=function(){this.segments&&(this.segments.destroy(),delete this.segments),this.maskedBoundsBuffer&&(this.maskedBoundsBuffer.destroy(),delete this.maskedBoundsBuffer),this.maskedIndexBuffer&&(this.maskedIndexBuffer.destroy(),delete this.maskedIndexBuffer)},Wl.prototype.setMask=function(t,e){if(!o(this.mask,t)&&(this.mask=t,this.clearMask(),!o(t,{0:!0}))){var r=new $n,n=new da;this.segments=new Oa,this.segments.prepareSegment(0,r,n);for(var i=Object.keys(t),s=0;s<i.length;s++){var l=t[+i[s]],c=ei>>l.z,u=new a(l.x*c,l.y*c),h=new a(u.x+c,u.y+c),f=this.segments.prepareSegment(4,r,n);r.emplaceBack(u.x,u.y,u.x,u.y),r.emplaceBack(h.x,u.y,h.x,u.y),r.emplaceBack(u.x,h.y,u.x,h.y),r.emplaceBack(h.x,h.y,h.x,h.y);var p=f.vertexLength;n.emplaceBack(p,p+1,p+2),n.emplaceBack(p+1,p+2,p+3),f.vertexLength+=4,f.primitiveLength+=2}this.maskedBoundsBuffer=e.createVertexBuffer(r,Nl.members),this.maskedIndexBuffer=e.createIndexBuffer(n)}},Wl.prototype.hasData=function(){return"loaded"===this.state||"reloading"===this.state||"expired"===this.state},Wl.prototype.patternsLoaded=function(){return this.imageAtlas&&!!Object.keys(this.imageAtlas.patternPositions).length},Wl.prototype.setExpiryData=function(t){var e=this.expirationTime;if(t.cacheControl){var r=M(t.cacheControl);r["max-age"]&&(this.expirationTime=Date.now()+1e3*r["max-age"])}else t.expires&&(this.expirationTime=new Date(t.expires).getTime());if(this.expirationTime){var n=Date.now(),a=!1;if(this.expirationTime>n)a=!1;else if(e)if(this.expirationTime<e)a=!0;else{var i=this.expirationTime-e;i?this.expirationTime=n+Math.max(i,3e4):a=!0}else a=!0;a?(this.expiredRequestCount++,this.state="expired"):this.expiredRequestCount=0}},Wl.prototype.getExpiryTimeout=function(){if(this.expirationTime)return this.expiredRequestCount?1e3*(1<<Math.min(this.expiredRequestCount-1,31)):Math.min(this.expirationTime-(new Date).getTime(),Math.pow(2,31)-1)},Wl.prototype.setFeatureState=function(t,e){if(this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData&&0!==Object.keys(t).length){var r=this.latestFeatureIndex.loadVTLayers();for(var n in this.buckets){var a=this.buckets[n],i=a.layers[0].sourceLayer||"_geojsonTileLayer",o=r[i],s=t[i];o&&s&&0!==Object.keys(s).length&&(a.update(s,o,this.imageAtlas&&this.imageAtlas.patternPositions||{}),e&&e.style&&(this.queryPadding=Math.max(this.queryPadding,e.style.getLayer(n).queryRadius(a))))}}},Wl.prototype.holdingForFade=function(){return void 0!==this.symbolFadeHoldUntil},Wl.prototype.symbolFadeFinished=function(){return!this.symbolFadeHoldUntil||this.symbolFadeHoldUntil<I.now()},Wl.prototype.clearFadeHold=function(){this.symbolFadeHoldUntil=void 0},Wl.prototype.setHoldDuration=function(t){this.symbolFadeHoldUntil=I.now()+t};var tc=function(t,e,r,n,i,o,s,l,c,u,h,f){var p=s.top*l-c,d=s.bottom*l+c,g=s.left*l-c,v=s.right*l+c;if(this.boxStartIndex=t.length,u){var m=d-p,y=v-g;m>0&&(m=Math.max(10*l,m),this._addLineCollisionCircles(t,e,r,r.segment,y,m,n,i,o,h))}else{if(f){var x=new a(g,p),b=new a(v,p),_=new a(g,d),w=new a(v,d),k=f*Math.PI/180;x._rotate(k),b._rotate(k),_._rotate(k),w._rotate(k),g=Math.min(x.x,b.x,_.x,w.x),v=Math.max(x.x,b.x,_.x,w.x),p=Math.min(x.y,b.y,_.y,w.y),d=Math.max(x.y,b.y,_.y,w.y)}t.emplaceBack(r.x,r.y,g,p,v,d,n,i,o,0,0)}this.boxEndIndex=t.length};tc.prototype._addLineCollisionCircles=function(t,e,r,n,a,i,o,s,l,c){var u=i/2,h=Math.floor(a/u)||1,f=1+.4*Math.log(c)/Math.LN2,p=Math.floor(h*f/2),d=-i/2,g=r,v=n+1,m=d,y=-a/2,x=y-a/4;do{if(--v<0){if(m>y)return;v=0;break}m-=e[v].dist(g),g=e[v]}while(m>x);for(var b=e[v].dist(e[v+1]),_=-p;_<h+p;_++){var w=_*u,k=y+w;if(w<0&&(k+=w),w>a&&(k+=w-a),!(k<m)){for(;m+b<k;){if(m+=b,++v+1>=e.length)return;b=e[v].dist(e[v+1])}var T=k-m,M=e[v],A=e[v+1].sub(M)._unit()._mult(T)._add(M)._round(),S=Math.abs(k-d)<u?0:.8*(k-d);t.emplaceBack(A.x,A.y,-i/2,-i/2,i/2,i/2,o,s,l,i/2,S)}}};var ec=function(t,e){if(void 0===t&&(t=[]),void 0===e&&(e=rc),this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(var r=(this.length>>1)-1;r>=0;r--)this._down(r)};function rc(t,e){return t<e?-1:t>e?1:0}function nc(t,e,r){void 0===e&&(e=1),void 0===r&&(r=!1);for(var n=1/0,i=1/0,o=-1/0,s=-1/0,l=t[0],c=0;c<l.length;c++){var u=l[c];(!c||u.x<n)&&(n=u.x),(!c||u.y<i)&&(i=u.y),(!c||u.x>o)&&(o=u.x),(!c||u.y>s)&&(s=u.y)}var h=o-n,f=s-i,p=Math.min(h,f),d=p/2,g=new ec([],ac);if(0===p)return new a(n,i);for(var v=n;v<o;v+=p)for(var m=i;m<s;m+=p)g.push(new ic(v+d,m+d,d,t));for(var y=function(t){for(var e=0,r=0,n=0,a=t[0],i=0,o=a.length,s=o-1;i<o;s=i++){var l=a[i],c=a[s],u=l.x*c.y-c.x*l.y;r+=(l.x+c.x)*u,n+=(l.y+c.y)*u,e+=3*u}return new ic(r/e,n/e,0,t)}(t),x=g.length;g.length;){var b=g.pop();(b.d>y.d||!y.d)&&(y=b,r&&console.log("found best %d after %d probes",Math.round(1e4*b.d)/1e4,x)),b.max-y.d<=e||(d=b.h/2,g.push(new ic(b.p.x-d,b.p.y-d,d,t)),g.push(new ic(b.p.x+d,b.p.y-d,d,t)),g.push(new ic(b.p.x-d,b.p.y+d,d,t)),g.push(new ic(b.p.x+d,b.p.y+d,d,t)),x+=4)}return r&&(console.log("num probes: "+x),console.log("best distance: "+y.d)),y.p}function ac(t,e){return e.max-t.max}function ic(t,e,r,n){this.p=new a(t,e),this.h=r,this.d=function(t,e){for(var r=!1,n=1/0,a=0;a<e.length;a++)for(var i=e[a],o=0,s=i.length,l=s-1;o<s;l=o++){var c=i[o],u=i[l];c.y>t.y!=u.y>t.y&&t.x<(u.x-c.x)*(t.y-c.y)/(u.y-c.y)+c.x&&(r=!r),n=Math.min(n,pi(t,c,u))}return(r?1:-1)*Math.sqrt(n)}(this.p,n),this.max=this.d+this.h*Math.SQRT2}ec.prototype.push=function(t){this.data.push(t),this.length++,this._up(this.length-1)},ec.prototype.pop=function(){if(0!==this.length){var t=this.data[0],e=this.data.pop();return this.length--,this.length>0&&(this.data[0]=e,this._down(0)),t}},ec.prototype.peek=function(){return this.data[0]},ec.prototype._up=function(t){for(var e=this.data,r=this.compare,n=e[t];t>0;){var a=t-1>>1,i=e[a];if(r(n,i)>=0)break;e[t]=i,t=a}e[t]=n},ec.prototype._down=function(t){for(var e=this.data,r=this.compare,n=this.length>>1,a=e[t];t<n;){var i=1+(t<<1),o=e[i],s=i+1;if(s<this.length&&r(e[s],o)<0&&(i=s,o=e[s]),r(o,a)>=0)break;e[t]=o,t=i}e[t]=a};var oc=e(function(t){t.exports=function(t,e){var r,n,a,i,o,s,l,c;for(r=3&t.length,n=t.length-r,a=e,o=3432918353,s=461845907,c=0;c<n;)l=255&t.charCodeAt(c)|(255&t.charCodeAt(++c))<<8|(255&t.charCodeAt(++c))<<16|(255&t.charCodeAt(++c))<<24,++c,a=27492+(65535&(i=5*(65535&(a=(a^=l=(65535&(l=(l=(65535&l)*o+(((l>>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295)<<13|a>>>19))+((5*(a>>>16)&65535)<<16)&4294967295))+((58964+(i>>>16)&65535)<<16);switch(l=0,r){case 3:l^=(255&t.charCodeAt(c+2))<<16;case 2:l^=(255&t.charCodeAt(c+1))<<8;case 1:a^=l=(65535&(l=(l=(65535&(l^=255&t.charCodeAt(c)))*o+(((l>>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295}return a^=t.length,a=2246822507*(65535&(a^=a>>>16))+((2246822507*(a>>>16)&65535)<<16)&4294967295,a=3266489909*(65535&(a^=a>>>13))+((3266489909*(a>>>16)&65535)<<16)&4294967295,(a^=a>>>16)>>>0}}),sc=e(function(t){t.exports=function(t,e){for(var r,n=t.length,a=e^n,i=0;n>=4;)r=1540483477*(65535&(r=255&t.charCodeAt(i)|(255&t.charCodeAt(++i))<<8|(255&t.charCodeAt(++i))<<16|(255&t.charCodeAt(++i))<<24))+((1540483477*(r>>>16)&65535)<<16),a=1540483477*(65535&a)+((1540483477*(a>>>16)&65535)<<16)^(r=1540483477*(65535&(r^=r>>>24))+((1540483477*(r>>>16)&65535)<<16)),n-=4,++i;switch(n){case 3:a^=(255&t.charCodeAt(i+2))<<16;case 2:a^=(255&t.charCodeAt(i+1))<<8;case 1:a=1540483477*(65535&(a^=255&t.charCodeAt(i)))+((1540483477*(a>>>16)&65535)<<16)}return a=1540483477*(65535&(a^=a>>>13))+((1540483477*(a>>>16)&65535)<<16),(a^=a>>>15)>>>0}}),lc=oc,cc=oc,uc=sc;lc.murmur3=cc,lc.murmur2=uc;var hc=7;function fc(t,e){var r=0,n=0,a=e/Math.sqrt(2);switch(t){case"top-right":case"top-left":n=a-hc;break;case"bottom-right":case"bottom-left":n=-a+hc;break;case"bottom":n=-e+hc;break;case"top":n=e-hc}switch(t){case"top-right":case"bottom-right":r=-a;break;case"top-left":case"bottom-left":r=a;break;case"left":r=e;break;case"right":r=-e}return[r,n]}function pc(t){switch(t){case"right":case"top-right":case"bottom-right":return"right";case"left":case"top-left":case"bottom-left":return"left"}return"center"}var dc=65535;function gc(t,e,r,n,i,o,s,l,c,u,h,f,p){var d=function(t,e,r,n,i,o,s,l){for(var c=n.layout.get("text-rotate").evaluate(o,{})*Math.PI/180,u=e.positionedGlyphs,h=[],f=0;f<u.length;f++){var p=u[f],d=s[p.fontStack],g=d&&d[p.glyph];if(g){var v=g.rect;if(v){var m=_l+1,y=g.metrics.advance*p.scale/2,x=i?[p.x+y,p.y]:[0,0],b=i?[0,0]:[p.x+y+r[0],p.y+r[1]],_=(i||l)&&p.vertical,w=[0,0];_&&(w=b,b=[0,0]);var k=(g.metrics.left-m)*p.scale-y+b[0],T=(-g.metrics.top-m)*p.scale+b[1],M=k+v.w*p.scale,A=T+v.h*p.scale,S=new a(k,T),E=new a(M,T),L=new a(k,A),C=new a(M,A);if(_){var P=new a(-y,y-e.yOffset),O=-Math.PI/2,z=ls/2-y,I=new a(5-e.yOffset-z,0),D=new(Function.prototype.bind.apply(a,[null].concat(w)));S._rotateAround(O,P)._add(I)._add(D),E._rotateAround(O,P)._add(I)._add(D),L._rotateAround(O,P)._add(I)._add(D),C._rotateAround(O,P)._add(I)._add(D)}if(c){var R=Math.sin(c),F=Math.cos(c),B=[F,-R,R,F];S._matMult(B),E._matMult(B),L._matMult(B),C._matMult(B)}h.push({tl:S,tr:E,bl:L,br:C,tex:v,writingMode:e.writingMode,glyphOffset:x,sectionIndex:p.sectionIndex})}}}return h}(0,r,s,n,i,o,f,t.allowVerticalPlacement),g=t.textSizeData,v=null;"source"===g.kind?(v=[_s*n.layout.get("text-size").evaluate(o,{})])[0]>dc&&w(t.layerIds[0]+': Value for "text-size" is >= 256. Reduce your "text-size".'):"composite"===g.kind&&((v=[_s*p.compositeTextSizes[0].evaluate(o,{}),_s*p.compositeTextSizes[1].evaluate(o,{})])[0]>dc||v[1]>dc)&&w(t.layerIds[0]+': Value for "text-size" is >= 256. Reduce your "text-size".'),t.addSymbols(t.text,d,v,s,i,o,c,e,l.lineStartIndex,l.lineLength);for(var m=0,y=u;m<y.length;m+=1)h[y[m]]=t.text.placedSymbolArray.length-1;return 4*d.length}function vc(t){for(var e in t)return t[e];return null}function mc(t,e,r,n){var a=t.compareText;if(e in a){for(var i=a[e],o=i.length-1;o>=0;o--)if(n.dist(i[o])<r)return!0}else a[e]=[];return a[e].push(n),!1}t.Actor=kl,t.AlphaImage=Pi,t.CanonicalTileID=Il,t.CollisionBoxArray=ba,t.Color=Wt,t.DEMData=Bl,t.DataConstantProperty=jn,t.DictionaryCoder=jl,t.EXTENT=ei,t.ErrorEvent=wt,t.EvaluationParameters=Pn,t.Event=_t,t.Evented=kt,t.FeatureIndex=Hl,t.FillBucket=_o,t.FillExtrusionBucket=Bo,t.ImageAtlas=Ys,t.ImagePosition=Hs,t.LineBucket=Zo,t.LngLat=Al,t.LngLatBounds=Ml,t.MercatorCoordinate=zl,t.ONE_EM=ls,t.OverscaledTileID=Rl,t.Point=a,t.Point$1=a,t.ProgramConfiguration=Ka,t.Properties=Gn,t.Protobuf=tl,t.RGBAImage=Oi,t.RequestManager=V,t.ResourceType=lt,t.SegmentVector=Oa,t.SourceFeatureState=ql,t.StructArrayLayout1ui2=va,t.StructArrayLayout2i4=Qn,t.StructArrayLayout2ui4=ga,t.StructArrayLayout3ui6=da,t.StructArrayLayout4i8=$n,t.SymbolBucket=Os,t.Texture=Ks,t.Tile=Wl,t.Transitionable=In,t.Uniform1f=Ba,t.Uniform1i=Fa,t.Uniform2f=Na,t.Uniform3f=ja,t.Uniform4f=Va,t.UniformColor=Ua,t.UniformMatrix4f=Ha,t.UnwrappedTileID=Dl,t.ValidationError=Mt,t.WritingMode=cs,t.ZoomHistory=yn,t.addDynamicAttributes=Ls,t.asyncAll=function(t,e,r){if(!t.length)return r(null,[]);var n=t.length,a=new Array(t.length),i=null;t.forEach(function(t,o){e(t,function(t,e){t&&(i=t),a[o]=e,0==--n&&r(i,a)})})},t.bezier=s,t.bindAll=v,t.browser=I,t.cacheEntryPossiblyAdded=function(t){++st>at&&(t.getActor().send("enforceCacheSizeLimit",nt),st=0)},t.clamp=c,t.clearTileCache=function(t){var e=self.caches.delete(rt);t&&e.catch(t).then(function(){return t()})},t.clone=function(t){var e=new ki(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},t.clone$1=b,t.config=D,t.create=function(){var t=new ki(16);return ki!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t},t.create$1=function(){var t=new ki(9);return ki!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t},t.create$2=function(){var t=new ki(4);return ki!=Float32Array&&(t[1]=0,t[2]=0),t[0]=1,t[3]=1,t},t.createCommonjsModule=e,t.createExpression=kr,t.createLayout=Jn,t.createStyleLayer=function(t){return"custom"===t.type?new Vs(t):new Us[t.type](t)},t.deepEqual=o,t.ease=l,t.emitValidationErrors=ln,t.endsWith=m,t.enforceCacheSizeLimit=function(t){self.caches&&self.caches.open(rt).then(function(e){e.keys().then(function(r){for(var n=0;n<r.length-t;n++)e.delete(r[n])})})},t.evaluateRadialOffset=fc,t.evaluateSizeForFeature=ks,t.evaluateSizeForZoom=Ts,t.evented=Ln,t.extend=h,t.featureFilter=Rr,t.filterObject=x,t.fromRotation=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=-r,t[4]=n,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},t.getAnchorAlignment=ys,t.getAnchorJustification=pc,t.getArrayBuffer=vt,t.getImage=yt,t.getJSON=function(t,e){return gt(h(t,{type:"json"}),e)},t.getReferrer=ht,t.getVideo=function(t,e){var r,n,a=self.document.createElement("video");a.muted=!0,a.onloadstart=function(){e(null,a)};for(var i=0;i<t.length;i++){var o=self.document.createElement("source");r=t[i],n=void 0,(n=self.document.createElement("a")).href=r,(n.protocol!==self.document.location.protocol||n.host!==self.document.location.host)&&(a.crossOrigin="Anonymous"),o.src=t[i],a.appendChild(o)}return{cancel:function(){}}},t.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},t.invert=function(t,e){var r=e[0],n=e[1],a=e[2],i=e[3],o=e[4],s=e[5],l=e[6],c=e[7],u=e[8],h=e[9],f=e[10],p=e[11],d=e[12],g=e[13],v=e[14],m=e[15],y=r*s-n*o,x=r*l-a*o,b=r*c-i*o,_=n*l-a*s,w=n*c-i*s,k=a*c-i*l,T=u*g-h*d,M=u*v-f*d,A=u*m-p*d,S=h*v-f*g,E=h*m-p*g,L=f*m-p*v,C=y*L-x*E+b*S+_*A-w*M+k*T;return C?(C=1/C,t[0]=(s*L-l*E+c*S)*C,t[1]=(a*E-n*L-i*S)*C,t[2]=(g*k-v*w+m*_)*C,t[3]=(f*w-h*k-p*_)*C,t[4]=(l*A-o*L-c*M)*C,t[5]=(r*L-a*A+i*M)*C,t[6]=(v*b-d*k-m*x)*C,t[7]=(u*k-f*b+p*x)*C,t[8]=(o*E-s*A+c*T)*C,t[9]=(n*A-r*E-i*T)*C,t[10]=(d*w-g*b+m*y)*C,t[11]=(h*b-u*w-p*y)*C,t[12]=(s*M-o*S-l*T)*C,t[13]=(r*S-n*M+a*T)*C,t[14]=(g*x-d*_-v*y)*C,t[15]=(u*_-h*x+f*y)*C,t):null},t.isChar=xn,t.isMapboxURL=U,t.keysDifference=function(t,e){var r=[];for(var n in t)n in e||r.push(n);return r},t.makeRequest=gt,t.mapObject=y,t.mercatorXfromLng=Ll,t.mercatorYfromLat=Cl,t.mercatorZfromAltitude=Pl,t.multiply=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=e[3],s=e[4],l=e[5],c=e[6],u=e[7],h=e[8],f=e[9],p=e[10],d=e[11],g=e[12],v=e[13],m=e[14],y=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*h+w*g,t[1]=x*a+b*l+_*f+w*v,t[2]=x*i+b*c+_*p+w*m,t[3]=x*o+b*u+_*d+w*y,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*h+w*g,t[5]=x*a+b*l+_*f+w*v,t[6]=x*i+b*c+_*p+w*m,t[7]=x*o+b*u+_*d+w*y,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*h+w*g,t[9]=x*a+b*l+_*f+w*v,t[10]=x*i+b*c+_*p+w*m,t[11]=x*o+b*u+_*d+w*y,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*h+w*g,t[13]=x*a+b*l+_*f+w*v,t[14]=x*i+b*c+_*p+w*m,t[15]=x*o+b*u+_*d+w*y,t},t.mvt=Io,t.number=ye,t.ortho=function(t,e,r,n,a,i,o){var s=1/(e-r),l=1/(n-a),c=1/(i-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*c,t[11]=0,t[12]=(e+r)*s,t[13]=(a+n)*l,t[14]=(o+i)*c,t[15]=1,t},t.parseGlyphPBF=function(t){return new tl(t).readFields(yl,[])},t.pbf=tl,t.performSymbolLayout=function(t,e,r,n,i,o){t.createArrays();var s=512*t.overscaling;t.tilePixelRatio=ei/s,t.compareText={},t.iconsNeedLinear=!1;var l=t.layers[0].layout,c=t.layers[0]._unevaluatedLayout._values,u={};if("composite"===t.textSizeData.kind){var h=t.textSizeData,f=h.minZoom,p=h.maxZoom;u.compositeTextSizes=[c["text-size"].possiblyEvaluate(new Pn(f)),c["text-size"].possiblyEvaluate(new Pn(p))]}if("composite"===t.iconSizeData.kind){var d=t.iconSizeData,g=d.minZoom,v=d.maxZoom;u.compositeIconSizes=[c["icon-size"].possiblyEvaluate(new Pn(g)),c["icon-size"].possiblyEvaluate(new Pn(v))]}u.layoutTextSize=c["text-size"].possiblyEvaluate(new Pn(t.zoom+1)),u.layoutIconSize=c["icon-size"].possiblyEvaluate(new Pn(t.zoom+1)),u.textMaxSize=c["text-size"].possiblyEvaluate(new Pn(18));for(var m=l.get("text-line-height")*ls,y="map"===l.get("text-rotation-alignment")&&"point"!==l.get("symbol-placement"),x=l.get("text-keep-upright"),b=function(){var o=k[_],s=l.get("text-font").evaluate(o,{}).join(","),c=r,h={horizontal:{},vertical:void 0},f=o.text,p=[0,0];if(f){var d=f.toString(),g=l.get("text-letter-spacing").evaluate(o,{})*ls,v=function(t){for(var e=0,r=d;e<r.length;e+=1)if(!_n(r[e].charCodeAt(0)))return!1;return!0}()?g:0,b=l.get("text-anchor").evaluate(o,{}),T=l.get("text-variable-anchor"),M=l.get("text-radial-offset").evaluate(o,{});T||(p=M?fc(b,M*ls):l.get("text-offset").evaluate(o,{}).map(function(t){return t*ls}));var A=y?"center":l.get("text-justify").evaluate(o,{}),S="point"===l.get("symbol-placement")?l.get("text-max-width").evaluate(o,{})*ls:0,E=function(){t.allowVerticalPlacement&&bn(d)&&(h.vertical=hs(f,e,s,S,m,b,"left",v,p,cs.vertical,!0))};if(!y&&T){for(var L="auto"===A?T.map(function(t){return pc(t)}):[A],C=!1,P=0;P<L.length;P++){var O=L[P];if(!h.horizontal[O])if(C)h.horizontal[O]=h.horizontal[0];else{var z=hs(f,e,s,S,m,"center",O,v,p,cs.horizontal,!1);z&&(h.horizontal[O]=z,C=1===z.lineCount)}}E()}else{"auto"===A&&(A=pc(b));var I=hs(f,e,s,S,m,b,A,v,p,cs.horizontal,!1);I&&(h.horizontal[A]=I),E(),bn(d)&&y&&x&&(h.vertical=hs(f,e,s,S,m,b,A,v,p,cs.vertical,!1))}}var D=void 0;if(o.icon){var R=n[o.icon];R&&(D=function(t,e,r){var n=ys(r),a=n.horizontalAlign,i=n.verticalAlign,o=e[0],s=e[1],l=o-t.displaySize[0]*a,c=l+t.displaySize[0],u=s-t.displaySize[1]*i;return{image:t,top:u,bottom:u+t.displaySize[1],left:l,right:c}}(i[o.icon],l.get("icon-offset").evaluate(o,{}),l.get("icon-anchor").evaluate(o,{})),void 0===t.sdfIcons?t.sdfIcons=R.sdf:t.sdfIcons!==R.sdf&&w("Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer"),R.pixelRatio!==t.pixelRatio?t.iconsNeedLinear=!0:0!==l.get("icon-rotate").constantOr(1)&&(t.iconsNeedLinear=!0))}(Object.keys(h.horizontal).length||D)&&function(t,e,r,n,i,o,s){var l=o.layoutTextSize.evaluate(e,{}),c=o.layoutIconSize.evaluate(e,{}),u=o.textMaxSize.evaluate(e,{});void 0===u&&(u=l);var h=t.layers[0].layout,f=h.get("icon-offset").evaluate(e,{}),p=vc(r.horizontal),d=l/24,g=t.tilePixelRatio*d,v=t.tilePixelRatio*u/24,m=t.tilePixelRatio*c,y=t.tilePixelRatio*h.get("symbol-spacing"),x=h.get("text-padding")*t.tilePixelRatio,b=h.get("icon-padding")*t.tilePixelRatio,_=h.get("text-max-angle")/180*Math.PI,k="map"===h.get("text-rotation-alignment")&&"point"!==h.get("symbol-placement"),T="map"===h.get("icon-rotation-alignment")&&"point"!==h.get("symbol-placement"),M=h.get("symbol-placement"),A=y/2,S=function(l,c){c.x<0||c.x>=ei||c.y<0||c.y>=ei||function(t,e,r,n,i,o,s,l,c,u,h,f,p,d,g,v,m,y,x,b,_){var k,T,M,A=t.addToLineVertexArray(e,r),S=0,E=0,L=0,C={},P=lc(""),O=(o.layout.get("text-radial-offset").evaluate(x,{})||0)*ls;if(t.allowVerticalPlacement&&n.vertical){var z=o.layout.get("text-rotate").evaluate(x,{})+90,I=n.vertical;M=new tc(s,r,e,l,c,u,I,h,f,p,t.overscaling,z)}for(var D in n.horizontal){var R=n.horizontal[D];if(!k){P=lc(R.text);var F=o.layout.get("text-rotate").evaluate(x,{});k=new tc(s,r,e,l,c,u,R,h,f,p,t.overscaling,F)}var B=1===R.lineCount;if(E+=gc(t,e,R,o,p,x,d,A,n.vertical?cs.horizontal:cs.horizontalOnly,B?Object.keys(n.horizontal):[D],C,b,_),B)break}n.vertical&&(L+=gc(t,e,n.vertical,o,p,x,d,A,cs.vertical,["vertical"],C,b,_));var N=k?k.boxStartIndex:t.collisionBoxArray.length,j=k?k.boxEndIndex:t.collisionBoxArray.length,V=M?M.boxStartIndex:t.collisionBoxArray.length,U=M?M.boxEndIndex:t.collisionBoxArray.length;if(i){var q=function(t,e,r,n,i,o){var s,l,c,u,h=e.image,f=r.layout,p=e.top-1/h.pixelRatio,d=e.left-1/h.pixelRatio,g=e.bottom+1/h.pixelRatio,v=e.right+1/h.pixelRatio;if("none"!==f.get("icon-text-fit")&&i){var m=v-d,y=g-p,x=f.get("text-size").evaluate(o,{})/24,b=i.left*x,_=i.right*x,w=i.top*x,k=_-b,T=i.bottom*x-w,M=f.get("icon-text-fit-padding")[0],A=f.get("icon-text-fit-padding")[1],S=f.get("icon-text-fit-padding")[2],E=f.get("icon-text-fit-padding")[3],L="width"===f.get("icon-text-fit")?.5*(T-y):0,C="height"===f.get("icon-text-fit")?.5*(k-m):0,P="width"===f.get("icon-text-fit")||"both"===f.get("icon-text-fit")?k:m,O="height"===f.get("icon-text-fit")||"both"===f.get("icon-text-fit")?T:y;s=new a(b+C-E,w+L-M),l=new a(b+C+A+P,w+L-M),c=new a(b+C+A+P,w+L+S+O),u=new a(b+C-E,w+L+S+O)}else s=new a(d,p),l=new a(v,p),c=new a(v,g),u=new a(d,g);var z=r.layout.get("icon-rotate").evaluate(o,{})*Math.PI/180;if(z){var I=Math.sin(z),D=Math.cos(z),R=[D,-I,I,D];s._matMult(R),l._matMult(R),u._matMult(R),c._matMult(R)}return[{tl:s,tr:l,bl:u,br:c,tex:h.paddedRect,writingMode:void 0,glyphOffset:[0,0],sectionIndex:0}]}(0,i,o,0,vc(n.horizontal),x),H=o.layout.get("icon-rotate").evaluate(x,{});T=new tc(s,r,e,l,c,u,i,g,v,!1,t.overscaling,H),S=4*q.length;var G=t.iconSizeData,Y=null;"source"===G.kind?(Y=[_s*o.layout.get("icon-size").evaluate(x,{})])[0]>dc&&w(t.layerIds[0]+': Value for "icon-size" is >= 256. Reduce your "icon-size".'):"composite"===G.kind&&((Y=[_s*_.compositeIconSizes[0].evaluate(x,{}),_s*_.compositeIconSizes[1].evaluate(x,{})])[0]>dc||Y[1]>dc)&&w(t.layerIds[0]+': Value for "icon-size" is >= 256. Reduce your "icon-size".'),t.addSymbols(t.icon,q,Y,y,m,x,!1,e,A.lineStartIndex,A.lineLength)}var W=T?T.boxStartIndex:t.collisionBoxArray.length,X=T?T.boxEndIndex:t.collisionBoxArray.length;t.glyphOffsetArray.length>=Os.MAX_GLYPHS&&w("Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907"),t.symbolInstances.emplaceBack(e.x,e.y,C.right>=0?C.right:-1,C.center>=0?C.center:-1,C.left>=0?C.left:-1,C.vertical||-1,P,N,j,V,U,W,X,l,E,L,S,0,h,O)}(t,c,l,r,n,t.layers[0],t.collisionBoxArray,e.index,e.sourceLayerIndex,t.index,g,x,k,s,m,b,T,f,e,i,o)};if("line"===M)for(var E=0,L=function(t,e,r,n,i){for(var o=[],s=0;s<t.length;s++)for(var l=t[s],c=void 0,u=0;u<l.length-1;u++){var h=l[u],f=l[u+1];h.x<0&&f.x<0||(h.x<0?h=new a(0,h.y+(f.y-h.y)*((0-h.x)/(f.x-h.x)))._round():f.x<0&&(f=new a(0,h.y+(f.y-h.y)*((0-h.x)/(f.x-h.x)))._round()),h.y<0&&f.y<0||(h.y<0?h=new a(h.x+(f.x-h.x)*((0-h.y)/(f.y-h.y)),0)._round():f.y<0&&(f=new a(h.x+(f.x-h.x)*((0-h.y)/(f.y-h.y)),0)._round()),h.x>=n&&f.x>=n||(h.x>=n?h=new a(n,h.y+(f.y-h.y)*((n-h.x)/(f.x-h.x)))._round():f.x>=n&&(f=new a(n,h.y+(f.y-h.y)*((n-h.x)/(f.x-h.x)))._round()),h.y>=i&&f.y>=i||(h.y>=i?h=new a(h.x+(f.x-h.x)*((i-h.y)/(f.y-h.y)),i)._round():f.y>=i&&(f=new a(h.x+(f.x-h.x)*((i-h.y)/(f.y-h.y)),i)._round()),c&&h.equals(c[c.length-1])||(c=[h],o.push(c)),c.push(f)))))}return o}(e.geometry,0,0,ei,ei);E<L.length;E+=1)for(var C=L[E],P=0,O=$l(C,y,_,r.vertical||p,n,24,v,t.overscaling,ei);P<O.length;P+=1){var z=O[P];p&&mc(t,p.text,A,z)||S(C,z)}else if("line-center"===M)for(var I=0,D=e.geometry;I<D.length;I+=1){var R=D[I];if(R.length>1){var F=Ql(R,_,r.vertical||p,n,24,v);F&&S(R,F)}}else if("Polygon"===e.type)for(var B=0,N=mo(e.geometry,0);B<N.length;B+=1){var j=N[B],V=nc(j,16);S(j[0],new bs(V.x,V.y,0))}else if("LineString"===e.type)for(var U=0,q=e.geometry;U<q.length;U+=1){var H=q[U];S(H,new bs(H[0].x,H[0].y,0))}else if("Point"===e.type)for(var G=0,Y=e.geometry;G<Y.length;G+=1)for(var W=0,X=Y[G];W<X.length;W+=1){var Z=X[W];S([Z],new bs(Z.x,Z.y,0))}}(t,o,h,D,c,u,p)},_=0,k=t.features;_<k.length;_+=1)b();o&&t.generateCollisionDebugBuffers()},t.perspective=function(t,e,r,n,a){var i,o=1/Math.tan(e/2);return t[0]=o/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,null!=a&&a!==1/0?(i=1/(n-a),t[10]=(a+n)*i,t[14]=2*a*n*i):(t[10]=-1,t[14]=-2*n),t},t.pick=function(t,e){for(var r={},n=0;n<e.length;n++){var a=e[n];a in t&&(r[a]=t[a])}return r},t.plugin=Cn,t.polygonIntersectsPolygon=oi,t.postMapLoadEvent=et,t.postTurnstileEvent=$,t.potpack=qs,t.rasterBoundsAttributes=Nl,t.refProperties=["type","source","source-layer","minzoom","maxzoom","filter","layout"],t.register=dn,t.registerForPluginAvailability=function(t){return Sn?t({pluginURL:Sn,completionCallback:Mn}):Ln.once("pluginAvailable",t),t},t.rotate=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=e[3],s=Math.sin(r),l=Math.cos(r);return t[0]=n*l+i*s,t[1]=a*l+o*s,t[2]=n*-s+i*l,t[3]=a*-s+o*l,t},t.rotateX=function(t,e,r){var n=Math.sin(r),a=Math.cos(r),i=e[4],o=e[5],s=e[6],l=e[7],c=e[8],u=e[9],h=e[10],f=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=i*a+c*n,t[5]=o*a+u*n,t[6]=s*a+h*n,t[7]=l*a+f*n,t[8]=c*a-i*n,t[9]=u*a-o*n,t[10]=h*a-s*n,t[11]=f*a-l*n,t},t.rotateZ=function(t,e,r){var n=Math.sin(r),a=Math.cos(r),i=e[0],o=e[1],s=e[2],l=e[3],c=e[4],u=e[5],h=e[6],f=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=i*a+c*n,t[1]=o*a+u*n,t[2]=s*a+h*n,t[3]=l*a+f*n,t[4]=c*a-i*n,t[5]=u*a-o*n,t[6]=h*a-s*n,t[7]=f*a-l*n,t},t.scale=function(t,e,r){var n=r[0],a=r[1],i=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*a,t[5]=e[5]*a,t[6]=e[6]*a,t[7]=e[7]*a,t[8]=e[8]*i,t[9]=e[9]*i,t[10]=e[10]*i,t[11]=e[11]*i,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},t.setCacheLimits=function(t,e){nt=t,at=e},t.setRTLTextPlugin=function(t,e){if(An)throw new Error("setRTLTextPlugin cannot be called multiple times.");An=!0,Sn=I.resolveURL(t),Mn=function(t){t?(An=!1,Sn=null,e&&e(t)):En=!0},Ln.fire(new _t("pluginAvailable",{pluginURL:Sn,completionCallback:Mn}))},t.sphericalToCartesian=function(t){var e=t[0],r=t[1],n=t[2];return r+=90,r*=Math.PI/180,n*=Math.PI/180,{x:e*Math.cos(r)*Math.sin(n),y:e*Math.sin(r)*Math.sin(n),z:e*Math.cos(n)}},t.styleSpec=Tt,t.symbolSize=Ms,t.transformMat3=function(t,e,r){var n=e[0],a=e[1],i=e[2];return t[0]=n*r[0]+a*r[3]+i*r[6],t[1]=n*r[1]+a*r[4]+i*r[7],t[2]=n*r[2]+a*r[5]+i*r[8],t},t.transformMat4=Ti,t.translate=function(t,e,r){var n,a,i,o,s,l,c,u,h,f,p,d,g=r[0],v=r[1],m=r[2];return e===t?(t[12]=e[0]*g+e[4]*v+e[8]*m+e[12],t[13]=e[1]*g+e[5]*v+e[9]*m+e[13],t[14]=e[2]*g+e[6]*v+e[10]*m+e[14],t[15]=e[3]*g+e[7]*v+e[11]*m+e[15]):(n=e[0],a=e[1],i=e[2],o=e[3],s=e[4],l=e[5],c=e[6],u=e[7],h=e[8],f=e[9],p=e[10],d=e[11],t[0]=n,t[1]=a,t[2]=i,t[3]=o,t[4]=s,t[5]=l,t[6]=c,t[7]=u,t[8]=h,t[9]=f,t[10]=p,t[11]=d,t[12]=n*g+s*v+h*m+e[12],t[13]=a*g+l*v+f*m+e[13],t[14]=i*g+c*v+p*m+e[14],t[15]=o*g+u*v+d*m+e[15]),t},t.uniqueId=p,t.validateCustomStyleLayer=function(t){var e=[],r=t.id;return void 0===r&&e.push({message:"layers."+r+': missing required property "id"'}),void 0===t.render&&e.push({message:"layers."+r+': missing required method "render"'}),t.renderingMode&&"2d"!==t.renderingMode&&"3d"!==t.renderingMode&&e.push({message:"layers."+r+': property "renderingMode" must be either "2d" or "3d"'}),e},t.validateLight=an,t.validateStyle=nn,t.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},t.vectorTile=Io,t.version="1.3.2",t.warnOnce=w,t.webpSupported=R,t.window=self,t.wrap=u}),n(0,function(t){function e(t){var r=typeof t;if("number"===r||"boolean"===r||"string"===r||null==t)return JSON.stringify(t);if(Array.isArray(t)){for(var n="[",a=0,i=t;a<i.length;a+=1)n+=e(i[a])+",";return n+"]"}for(var o=Object.keys(t).sort(),s="{",l=0;l<o.length;l++)s+=JSON.stringify(o[l])+":"+e(t[o[l]])+",";return s+"}"}function r(r){for(var n="",a=0,i=t.refProperties;a<i.length;a+=1)n+="/"+e(r[i[a]]);return n}var n=function(t){this.keyCache={},t&&this.replace(t)};n.prototype.replace=function(t){this._layerConfigs={},this._layers={},this.update(t,[])},n.prototype.update=function(e,n){for(var a=this,i=0,o=e;i<o.length;i+=1){var s=o[i];this._layerConfigs[s.id]=s;var l=this._layers[s.id]=t.createStyleLayer(s);l._featureFilter=t.featureFilter(l.filter),this.keyCache[s.id]&&delete this.keyCache[s.id]}for(var c=0,u=n;c<u.length;c+=1){var h=u[c];delete this.keyCache[h],delete this._layerConfigs[h],delete this._layers[h]}this.familiesBySource={};for(var f=0,p=function(t,e){for(var n={},a=0;a<t.length;a++){var i=e&&e[t[a].id]||r(t[a]);e&&(e[t[a].id]=i);var o=n[i];o||(o=n[i]=[]),o.push(t[a])}var s=[];for(var l in n)s.push(n[l]);return s}(t.values(this._layerConfigs),this.keyCache);f<p.length;f+=1){var d=p[f].map(function(t){return a._layers[t.id]}),g=d[0];if("none"!==g.visibility){var v=g.source||"",m=this.familiesBySource[v];m||(m=this.familiesBySource[v]={});var y=g.sourceLayer||"_geojsonTileLayer",x=m[y];x||(x=m[y]=[]),x.push(d)}}};var a=function(e){var r={},n=[];for(var a in e){var i=e[a],o=r[a]={};for(var s in i){var l=i[+s];if(l&&0!==l.bitmap.width&&0!==l.bitmap.height){var c={x:0,y:0,w:l.bitmap.width+2,h:l.bitmap.height+2};n.push(c),o[s]={rect:c,metrics:l.metrics}}}}var u=t.potpack(n),h=u.w,f=u.h,p=new t.AlphaImage({width:h||1,height:f||1});for(var d in e){var g=e[d];for(var v in g){var m=g[+v];if(m&&0!==m.bitmap.width&&0!==m.bitmap.height){var y=r[d][v].rect;t.AlphaImage.copy(m.bitmap,p,{x:0,y:0},{x:y.x+1,y:y.y+1},m.bitmap)}}}this.image=p,this.positions=r};t.register("GlyphAtlas",a);var i=function(e){this.tileID=new t.OverscaledTileID(e.tileID.overscaledZ,e.tileID.wrap,e.tileID.canonical.z,e.tileID.canonical.x,e.tileID.canonical.y),this.uid=e.uid,this.zoom=e.zoom,this.pixelRatio=e.pixelRatio,this.tileSize=e.tileSize,this.source=e.source,this.overscaling=this.tileID.overscaleFactor(),this.showCollisionBoxes=e.showCollisionBoxes,this.collectResourceTiming=!!e.collectResourceTiming,this.returnDependencies=!!e.returnDependencies};function o(e,r){for(var n=new t.EvaluationParameters(r),a=0,i=e;a<i.length;a+=1)i[a].recalculate(n)}i.prototype.parse=function(e,r,n,i){var s=this;this.status="parsing",this.data=e,this.collisionBoxArray=new t.CollisionBoxArray;var l=new t.DictionaryCoder(Object.keys(e.layers).sort()),c=new t.FeatureIndex(this.tileID);c.bucketLayerIDs=[];var u,h,f,p,d={},g={featureIndex:c,iconDependencies:{},patternDependencies:{},glyphDependencies:{}},v=r.familiesBySource[this.source];for(var m in v){var y=e.layers[m];if(y){1===y.version&&t.warnOnce('Vector tile source "'+this.source+'" layer "'+m+'" does not use vector tile spec v2 and therefore may have some rendering errors.');for(var x=l.encode(m),b=[],_=0;_<y.length;_++){var w=y.feature(_);b.push({feature:w,index:_,sourceLayerIndex:x})}for(var k=0,T=v[m];k<T.length;k+=1){var M=T[k],A=M[0];A.minzoom&&this.zoom<Math.floor(A.minzoom)||A.maxzoom&&this.zoom>=A.maxzoom||"none"!==A.visibility&&(o(M,this.zoom),(d[A.id]=A.createBucket({index:c.bucketLayerIDs.length,layers:M,zoom:this.zoom,pixelRatio:this.pixelRatio,overscaling:this.overscaling,collisionBoxArray:this.collisionBoxArray,sourceLayerIndex:x,sourceID:this.source})).populate(b,g),c.bucketLayerIDs.push(M.map(function(t){return t.id})))}}}var S=t.mapObject(g.glyphDependencies,function(t){return Object.keys(t).map(Number)});Object.keys(S).length?n.send("getGlyphs",{uid:this.uid,stacks:S},function(t,e){u||(u=t,h=e,C.call(s))}):h={};var E=Object.keys(g.iconDependencies);E.length?n.send("getImages",{icons:E},function(t,e){u||(u=t,f=e,C.call(s))}):f={};var L=Object.keys(g.patternDependencies);function C(){if(u)return i(u);if(h&&f&&p){var e=new a(h),r=new t.ImageAtlas(f,p);for(var n in d){var s=d[n];s instanceof t.SymbolBucket?(o(s.layers,this.zoom),t.performSymbolLayout(s,h,e.positions,f,r.iconPositions,this.showCollisionBoxes)):s.hasPattern&&(s instanceof t.LineBucket||s instanceof t.FillBucket||s instanceof t.FillExtrusionBucket)&&(o(s.layers,this.zoom),s.addFeatures(g,r.patternPositions))}this.status="done",i(null,{buckets:t.values(d).filter(function(t){return!t.isEmpty()}),featureIndex:c,collisionBoxArray:this.collisionBoxArray,glyphAtlasImage:e.image,imageAtlas:r,glyphMap:this.returnDependencies?h:null,iconMap:this.returnDependencies?f:null,glyphPositions:this.returnDependencies?e.positions:null})}}L.length?n.send("getImages",{icons:L},function(t,e){u||(u=t,p=e,C.call(s))}):p={},C.call(this)};var s="undefined"!=typeof performance,l={getEntriesByName:function(t){return!!(s&&performance&&performance.getEntriesByName)&&performance.getEntriesByName(t)},mark:function(t){return!!(s&&performance&&performance.mark)&&performance.mark(t)},measure:function(t,e,r){return!!(s&&performance&&performance.measure)&&performance.measure(t,e,r)},clearMarks:function(t){return!!(s&&performance&&performance.clearMarks)&&performance.clearMarks(t)},clearMeasures:function(t){return!!(s&&performance&&performance.clearMeasures)&&performance.clearMeasures(t)}},c=function(t){this._marks={start:[t.url,"start"].join("#"),end:[t.url,"end"].join("#"),measure:t.url.toString()},l.mark(this._marks.start)};function u(e,r){var n=t.getArrayBuffer(e.request,function(e,n,a,i){e?r(e):n&&r(null,{vectorTile:new t.vectorTile.VectorTile(new t.pbf(n)),rawData:n,cacheControl:a,expires:i})});return function(){n.cancel(),r()}}c.prototype.finish=function(){l.mark(this._marks.end);var t=l.getEntriesByName(this._marks.measure);return 0===t.length&&(l.measure(this._marks.measure,this._marks.start,this._marks.end),t=l.getEntriesByName(this._marks.measure),l.clearMarks(this._marks.start),l.clearMarks(this._marks.end),l.clearMeasures(this._marks.measure)),t},l.Performance=c;var h=function(t,e,r){this.actor=t,this.layerIndex=e,this.loadVectorData=r||u,this.loading={},this.loaded={}};h.prototype.loadTile=function(e,r){var n=this,a=e.uid;this.loading||(this.loading={});var o=!!(e&&e.request&&e.request.collectResourceTiming)&&new l.Performance(e.request),s=this.loading[a]=new i(e);s.abort=this.loadVectorData(e,function(e,i){if(delete n.loading[a],e||!i)return s.status="done",n.loaded[a]=s,r(e);var l=i.rawData,c={};i.expires&&(c.expires=i.expires),i.cacheControl&&(c.cacheControl=i.cacheControl);var u={};if(o){var h=o.finish();h&&(u.resourceTiming=JSON.parse(JSON.stringify(h)))}s.vectorTile=i.vectorTile,s.parse(i.vectorTile,n.layerIndex,n.actor,function(e,n){if(e||!n)return r(e);r(null,t.extend({rawTileData:l.slice(0)},n,c,u))}),n.loaded=n.loaded||{},n.loaded[a]=s})},h.prototype.reloadTile=function(t,e){var r=this.loaded,n=t.uid,a=this;if(r&&r[n]){var i=r[n];i.showCollisionBoxes=t.showCollisionBoxes;var o=function(t,r){var n=i.reloadCallback;n&&(delete i.reloadCallback,i.parse(i.vectorTile,a.layerIndex,a.actor,n)),e(t,r)};"parsing"===i.status?i.reloadCallback=o:"done"===i.status&&(i.vectorTile?i.parse(i.vectorTile,this.layerIndex,this.actor,o):o())}},h.prototype.abortTile=function(t,e){var r=this.loading,n=t.uid;r&&r[n]&&r[n].abort&&(r[n].abort(),delete r[n]),e()},h.prototype.removeTile=function(t,e){var r=this.loaded,n=t.uid;r&&r[n]&&delete r[n],e()};var f=function(){this.loaded={}};f.prototype.loadTile=function(e,r){var n=e.uid,a=e.encoding,i=e.rawImageData,o=new t.DEMData(n,i,a);this.loaded=this.loaded||{},this.loaded[n]=o,r(null,o)},f.prototype.removeTile=function(t){var e=this.loaded,r=t.uid;e&&e[r]&&delete e[r]};var p={RADIUS:6378137,FLATTENING:1/298.257223563,POLAR_RADIUS:6356752.3142};function d(t){var e=0;if(t&&t.length>0){e+=Math.abs(g(t[0]));for(var r=1;r<t.length;r++)e-=Math.abs(g(t[r]))}return e}function g(t){var e,r,n,a,i,o,s=0,l=t.length;if(l>2){for(o=0;o<l;o++)o===l-2?(n=l-2,a=l-1,i=0):o===l-1?(n=l-1,a=0,i=1):(n=o,a=o+1,i=o+2),e=t[n],r=t[a],s+=(v(t[i][0])-v(e[0]))*Math.sin(v(r[1]));s=s*p.RADIUS*p.RADIUS/2}return s}function v(t){return t*Math.PI/180}var m={geometry:function t(e){var r,n=0;switch(e.type){case"Polygon":return d(e.coordinates);case"MultiPolygon":for(r=0;r<e.coordinates.length;r++)n+=d(e.coordinates[r]);return n;case"Point":case"MultiPoint":case"LineString":case"MultiLineString":return 0;case"GeometryCollection":for(r=0;r<e.geometries.length;r++)n+=t(e.geometries[r]);return n}},ring:g};function y(t,e){return function(r){return t(r,e)}}function x(t,e){e=!!e,t[0]=b(t[0],e);for(var r=1;r<t.length;r++)t[r]=b(t[r],!e);return t}function b(t,e){return function(t){return m.ring(t)>=0}(t)===e?t:t.reverse()}var _=t.vectorTile.VectorTileFeature.prototype.toGeoJSON,w=function(e){this._feature=e,this.extent=t.EXTENT,this.type=e.type,this.properties=e.tags,"id"in e&&!isNaN(e.id)&&(this.id=parseInt(e.id,10))};w.prototype.loadGeometry=function(){if(1===this._feature.type){for(var e=[],r=0,n=this._feature.geometry;r<n.length;r+=1){var a=n[r];e.push([new t.Point$1(a[0],a[1])])}return e}for(var i=[],o=0,s=this._feature.geometry;o<s.length;o+=1){for(var l=[],c=0,u=s[o];c<u.length;c+=1){var h=u[c];l.push(new t.Point$1(h[0],h[1]))}i.push(l)}return i},w.prototype.toGeoJSON=function(t,e,r){return _.call(this,t,e,r)};var k=function(e){this.layers={_geojsonTileLayer:this},this.name="_geojsonTileLayer",this.extent=t.EXTENT,this.length=e.length,this._features=e};k.prototype.feature=function(t){return new w(this._features[t])};var T=t.vectorTile.VectorTileFeature,M=A;function A(t,e){this.options=e||{},this.features=t,this.length=t.length}function S(t,e){this.id="number"==typeof t.id?t.id:void 0,this.type=t.type,this.rawGeometry=1===t.type?[t.geometry]:t.geometry,this.properties=t.tags,this.extent=e||4096}A.prototype.feature=function(t){return new S(this.features[t],this.options.extent)},S.prototype.loadGeometry=function(){var e=this.rawGeometry;this.geometry=[];for(var r=0;r<e.length;r++){for(var n=e[r],a=[],i=0;i<n.length;i++)a.push(new t.Point$1(n[i][0],n[i][1]));this.geometry.push(a)}return this.geometry},S.prototype.bbox=function(){this.geometry||this.loadGeometry();for(var t=this.geometry,e=1/0,r=-1/0,n=1/0,a=-1/0,i=0;i<t.length;i++)for(var o=t[i],s=0;s<o.length;s++){var l=o[s];e=Math.min(e,l.x),r=Math.max(r,l.x),n=Math.min(n,l.y),a=Math.max(a,l.y)}return[e,n,r,a]},S.prototype.toGeoJSON=T.prototype.toGeoJSON;var E=P,L=P,C=M;function P(e){var r=new t.pbf;return function(t,e){for(var r in t.layers)e.writeMessage(3,O,t.layers[r])}(e,r),r.finish()}function O(t,e){var r;e.writeVarintField(15,t.version||1),e.writeStringField(1,t.name||""),e.writeVarintField(5,t.extent||4096);var n={keys:[],values:[],keycache:{},valuecache:{}};for(r=0;r<t.length;r++)n.feature=t.feature(r),e.writeMessage(2,z,n);var a=n.keys;for(r=0;r<a.length;r++)e.writeStringField(3,a[r]);var i=n.values;for(r=0;r<i.length;r++)e.writeMessage(4,B,i[r])}function z(t,e){var r=t.feature;void 0!==r.id&&e.writeVarintField(1,r.id),e.writeMessage(2,I,t),e.writeVarintField(3,r.type),e.writeMessage(4,F,r)}function I(t,e){var r=t.feature,n=t.keys,a=t.values,i=t.keycache,o=t.valuecache;for(var s in r.properties){var l=i[s];void 0===l&&(n.push(s),l=n.length-1,i[s]=l),e.writeVarint(l);var c=r.properties[s],u=typeof c;"string"!==u&&"boolean"!==u&&"number"!==u&&(c=JSON.stringify(c));var h=u+":"+c,f=o[h];void 0===f&&(a.push(c),f=a.length-1,o[h]=f),e.writeVarint(f)}}function D(t,e){return(e<<3)+(7&t)}function R(t){return t<<1^t>>31}function F(t,e){for(var r=t.loadGeometry(),n=t.type,a=0,i=0,o=r.length,s=0;s<o;s++){var l=r[s],c=1;1===n&&(c=l.length),e.writeVarint(D(1,c));for(var u=3===n?l.length-1:l.length,h=0;h<u;h++){1===h&&1!==n&&e.writeVarint(D(2,u-1));var f=l[h].x-a,p=l[h].y-i;e.writeVarint(R(f)),e.writeVarint(R(p)),a+=f,i+=p}3===n&&e.writeVarint(D(7,1))}}function B(t,e){var r=typeof t;"string"===r?e.writeStringField(1,t):"boolean"===r?e.writeBooleanField(7,t):"number"===r&&(t%1!=0?e.writeDoubleField(3,t):t<0?e.writeSVarintField(6,t):e.writeVarintField(5,t))}function N(t,e,r,n){j(t,r,n),j(e,2*r,2*n),j(e,2*r+1,2*n+1)}function j(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function V(t,e,r,n){var a=t-r,i=e-n;return a*a+i*i}E.fromVectorTileJs=L,E.fromGeojsonVt=function(t,e){e=e||{};var r={};for(var n in t)r[n]=new M(t[n].features,e),r[n].name=n,r[n].version=e.version,r[n].extent=e.extent;return P({layers:r})},E.GeoJSONWrapper=C;var U=function(t){return t[0]},q=function(t){return t[1]},H=function(t,e,r,n,a){void 0===e&&(e=U),void 0===r&&(r=q),void 0===n&&(n=64),void 0===a&&(a=Float64Array),this.nodeSize=n,this.points=t;for(var i=t.length<65536?Uint16Array:Uint32Array,o=this.ids=new i(t.length),s=this.coords=new a(2*t.length),l=0;l<t.length;l++)o[l]=l,s[2*l]=e(t[l]),s[2*l+1]=r(t[l]);!function t(e,r,n,a,i,o){if(!(i-a<=n)){var s=a+i>>1;!function t(e,r,n,a,i,o){for(;i>a;){if(i-a>600){var s=i-a+1,l=n-a+1,c=Math.log(s),u=.5*Math.exp(2*c/3),h=.5*Math.sqrt(c*u*(s-u)/s)*(l-s/2<0?-1:1);t(e,r,n,Math.max(a,Math.floor(n-l*u/s+h)),Math.min(i,Math.floor(n+(s-l)*u/s+h)),o)}var f=r[2*n+o],p=a,d=i;for(N(e,r,a,n),r[2*i+o]>f&&N(e,r,a,i);p<d;){for(N(e,r,p,d),p++,d--;r[2*p+o]<f;)p++;for(;r[2*d+o]>f;)d--}r[2*a+o]===f?N(e,r,a,d):N(e,r,++d,i),d<=n&&(a=d+1),n<=d&&(i=d-1)}}(e,r,s,a,i,o%2),t(e,r,n,a,s-1,o+1),t(e,r,n,s+1,i,o+1)}}(o,s,n,0,o.length-1,0)};H.prototype.range=function(t,e,r,n){return function(t,e,r,n,a,i,o){for(var s,l,c=[0,t.length-1,0],u=[];c.length;){var h=c.pop(),f=c.pop(),p=c.pop();if(f-p<=o)for(var d=p;d<=f;d++)s=e[2*d],l=e[2*d+1],s>=r&&s<=a&&l>=n&&l<=i&&u.push(t[d]);else{var g=Math.floor((p+f)/2);s=e[2*g],l=e[2*g+1],s>=r&&s<=a&&l>=n&&l<=i&&u.push(t[g]);var v=(h+1)%2;(0===h?r<=s:n<=l)&&(c.push(p),c.push(g-1),c.push(v)),(0===h?a>=s:i>=l)&&(c.push(g+1),c.push(f),c.push(v))}}return u}(this.ids,this.coords,t,e,r,n,this.nodeSize)},H.prototype.within=function(t,e,r){return function(t,e,r,n,a,i){for(var o=[0,t.length-1,0],s=[],l=a*a;o.length;){var c=o.pop(),u=o.pop(),h=o.pop();if(u-h<=i)for(var f=h;f<=u;f++)V(e[2*f],e[2*f+1],r,n)<=l&&s.push(t[f]);else{var p=Math.floor((h+u)/2),d=e[2*p],g=e[2*p+1];V(d,g,r,n)<=l&&s.push(t[p]);var v=(c+1)%2;(0===c?r-a<=d:n-a<=g)&&(o.push(h),o.push(p-1),o.push(v)),(0===c?r+a>=d:n+a>=g)&&(o.push(p+1),o.push(u),o.push(v))}}return s}(this.ids,this.coords,t,e,r,this.nodeSize)};var G={minZoom:0,maxZoom:16,radius:40,extent:512,nodeSize:64,log:!1,reduce:null,map:function(t){return t}},Y=function(t){this.options=$(Object.create(G),t),this.trees=new Array(this.options.maxZoom+1)};function W(t,e,r,n,a){return{x:t,y:e,zoom:1/0,id:r,parentId:-1,numPoints:n,properties:a}}function X(t,e){var r=t.geometry.coordinates,n=r[0],a=r[1];return{x:K(n),y:Q(a),zoom:1/0,index:e,parentId:-1}}function Z(t){return{type:"Feature",id:t.id,properties:J(t),geometry:{type:"Point",coordinates:[(n=t.x,360*(n-.5)),(e=t.y,r=(180-360*e)*Math.PI/180,360*Math.atan(Math.exp(r))/Math.PI-90)]}};var e,r,n}function J(t){var e=t.numPoints,r=e>=1e4?Math.round(e/1e3)+"k":e>=1e3?Math.round(e/100)/10+"k":e;return $($({},t.properties),{cluster:!0,cluster_id:t.id,point_count:e,point_count_abbreviated:r})}function K(t){return t/360+.5}function Q(t){var e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function $(t,e){for(var r in e)t[r]=e[r];return t}function tt(t){return t.x}function et(t){return t.y}function rt(t,e,r,n,a,i){var o=a-r,s=i-n;if(0!==o||0!==s){var l=((t-r)*o+(e-n)*s)/(o*o+s*s);l>1?(r=a,n=i):l>0&&(r+=o*l,n+=s*l)}return(o=t-r)*o+(s=e-n)*s}function nt(t,e,r,n){var a={id:void 0===t?null:t,type:e,geometry:r,tags:n,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};return function(t){var e=t.geometry,r=t.type;if("Point"===r||"MultiPoint"===r||"LineString"===r)at(t,e);else if("Polygon"===r||"MultiLineString"===r)for(var n=0;n<e.length;n++)at(t,e[n]);else if("MultiPolygon"===r)for(n=0;n<e.length;n++)for(var a=0;a<e[n].length;a++)at(t,e[n][a])}(a),a}function at(t,e){for(var r=0;r<e.length;r+=3)t.minX=Math.min(t.minX,e[r]),t.minY=Math.min(t.minY,e[r+1]),t.maxX=Math.max(t.maxX,e[r]),t.maxY=Math.max(t.maxY,e[r+1])}function it(t,e,r,n){if(e.geometry){var a=e.geometry.coordinates,i=e.geometry.type,o=Math.pow(r.tolerance/((1<<r.maxZoom)*r.extent),2),s=[],l=e.id;if(r.promoteId?l=e.properties[r.promoteId]:r.generateId&&(l=n||0),"Point"===i)ot(a,s);else if("MultiPoint"===i)for(var c=0;c<a.length;c++)ot(a[c],s);else if("LineString"===i)st(a,s,o,!1);else if("MultiLineString"===i){if(r.lineMetrics){for(c=0;c<a.length;c++)s=[],st(a[c],s,o,!1),t.push(nt(l,"LineString",s,e.properties));return}lt(a,s,o,!1)}else if("Polygon"===i)lt(a,s,o,!0);else{if("MultiPolygon"!==i){if("GeometryCollection"===i){for(c=0;c<e.geometry.geometries.length;c++)it(t,{id:l,geometry:e.geometry.geometries[c],properties:e.properties},r,n);return}throw new Error("Input data is not a valid GeoJSON object.")}for(c=0;c<a.length;c++){var u=[];lt(a[c],u,o,!0),s.push(u)}}t.push(nt(l,i,s,e.properties))}}function ot(t,e){e.push(ct(t[0])),e.push(ut(t[1])),e.push(0)}function st(t,e,r,n){for(var a,i,o=0,s=0;s<t.length;s++){var l=ct(t[s][0]),c=ut(t[s][1]);e.push(l),e.push(c),e.push(0),s>0&&(o+=n?(a*c-l*i)/2:Math.sqrt(Math.pow(l-a,2)+Math.pow(c-i,2))),a=l,i=c}var u=e.length-3;e[2]=1,function t(e,r,n,a){for(var i,o=a,s=n-r>>1,l=n-r,c=e[r],u=e[r+1],h=e[n],f=e[n+1],p=r+3;p<n;p+=3){var d=rt(e[p],e[p+1],c,u,h,f);if(d>o)i=p,o=d;else if(d===o){var g=Math.abs(p-s);g<l&&(i=p,l=g)}}o>a&&(i-r>3&&t(e,r,i,a),e[i+2]=o,n-i>3&&t(e,i,n,a))}(e,0,u,r),e[u+2]=1,e.size=Math.abs(o),e.start=0,e.end=e.size}function lt(t,e,r,n){for(var a=0;a<t.length;a++){var i=[];st(t[a],i,r,n),e.push(i)}}function ct(t){return t/360+.5}function ut(t){var e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function ht(t,e,r,n,a,i,o,s){if(n/=e,i>=(r/=e)&&o<n)return t;if(o<r||i>=n)return null;for(var l=[],c=0;c<t.length;c++){var u=t[c],h=u.geometry,f=u.type,p=0===a?u.minX:u.minY,d=0===a?u.maxX:u.maxY;if(p>=r&&d<n)l.push(u);else if(!(d<r||p>=n)){var g=[];if("Point"===f||"MultiPoint"===f)ft(h,g,r,n,a);else if("LineString"===f)pt(h,g,r,n,a,!1,s.lineMetrics);else if("MultiLineString"===f)gt(h,g,r,n,a,!1);else if("Polygon"===f)gt(h,g,r,n,a,!0);else if("MultiPolygon"===f)for(var v=0;v<h.length;v++){var m=[];gt(h[v],m,r,n,a,!0),m.length&&g.push(m)}if(g.length){if(s.lineMetrics&&"LineString"===f){for(v=0;v<g.length;v++)l.push(nt(u.id,f,g[v],u.tags));continue}"LineString"!==f&&"MultiLineString"!==f||(1===g.length?(f="LineString",g=g[0]):f="MultiLineString"),"Point"!==f&&"MultiPoint"!==f||(f=3===g.length?"Point":"MultiPoint"),l.push(nt(u.id,f,g,u.tags))}}}return l.length?l:null}function ft(t,e,r,n,a){for(var i=0;i<t.length;i+=3){var o=t[i+a];o>=r&&o<=n&&(e.push(t[i]),e.push(t[i+1]),e.push(t[i+2]))}}function pt(t,e,r,n,a,i,o){for(var s,l,c=dt(t),u=0===a?mt:yt,h=t.start,f=0;f<t.length-3;f+=3){var p=t[f],d=t[f+1],g=t[f+2],v=t[f+3],m=t[f+4],y=0===a?p:d,x=0===a?v:m,b=!1;o&&(s=Math.sqrt(Math.pow(p-v,2)+Math.pow(d-m,2))),y<r?x>r&&(l=u(c,p,d,v,m,r),o&&(c.start=h+s*l)):y>n?x<n&&(l=u(c,p,d,v,m,n),o&&(c.start=h+s*l)):vt(c,p,d,g),x<r&&y>=r&&(l=u(c,p,d,v,m,r),b=!0),x>n&&y<=n&&(l=u(c,p,d,v,m,n),b=!0),!i&&b&&(o&&(c.end=h+s*l),e.push(c),c=dt(t)),o&&(h+=s)}var _=t.length-3;p=t[_],d=t[_+1],g=t[_+2],(y=0===a?p:d)>=r&&y<=n&&vt(c,p,d,g),_=c.length-3,i&&_>=3&&(c[_]!==c[0]||c[_+1]!==c[1])&&vt(c,c[0],c[1],c[2]),c.length&&e.push(c)}function dt(t){var e=[];return e.size=t.size,e.start=t.start,e.end=t.end,e}function gt(t,e,r,n,a,i){for(var o=0;o<t.length;o++)pt(t[o],e,r,n,a,i,!1)}function vt(t,e,r,n){t.push(e),t.push(r),t.push(n)}function mt(t,e,r,n,a,i){var o=(i-e)/(n-e);return t.push(i),t.push(r+(a-r)*o),t.push(1),o}function yt(t,e,r,n,a,i){var o=(i-r)/(a-r);return t.push(e+(n-e)*o),t.push(i),t.push(1),o}function xt(t,e){for(var r=[],n=0;n<t.length;n++){var a,i=t[n],o=i.type;if("Point"===o||"MultiPoint"===o||"LineString"===o)a=bt(i.geometry,e);else if("MultiLineString"===o||"Polygon"===o){a=[];for(var s=0;s<i.geometry.length;s++)a.push(bt(i.geometry[s],e))}else if("MultiPolygon"===o)for(a=[],s=0;s<i.geometry.length;s++){for(var l=[],c=0;c<i.geometry[s].length;c++)l.push(bt(i.geometry[s][c],e));a.push(l)}r.push(nt(i.id,o,a,i.tags))}return r}function bt(t,e){var r=[];r.size=t.size,void 0!==t.start&&(r.start=t.start,r.end=t.end);for(var n=0;n<t.length;n+=3)r.push(t[n]+e,t[n+1],t[n+2]);return r}function _t(t,e){if(t.transformed)return t;var r,n,a,i=1<<t.z,o=t.x,s=t.y;for(r=0;r<t.features.length;r++){var l=t.features[r],c=l.geometry,u=l.type;if(l.geometry=[],1===u)for(n=0;n<c.length;n+=2)l.geometry.push(wt(c[n],c[n+1],e,i,o,s));else for(n=0;n<c.length;n++){var h=[];for(a=0;a<c[n].length;a+=2)h.push(wt(c[n][a],c[n][a+1],e,i,o,s));l.geometry.push(h)}}return t.transformed=!0,t}function wt(t,e,r,n,a,i){return[Math.round(r*(t*n-a)),Math.round(r*(e*n-i))]}function kt(t,e,r,n,a){for(var i=e===a.maxZoom?0:a.tolerance/((1<<e)*a.extent),o={features:[],numPoints:0,numSimplified:0,numFeatures:0,source:null,x:r,y:n,z:e,transformed:!1,minX:2,minY:1,maxX:-1,maxY:0},s=0;s<t.length;s++){o.numFeatures++,Tt(o,t[s],i,a);var l=t[s].minX,c=t[s].minY,u=t[s].maxX,h=t[s].maxY;l<o.minX&&(o.minX=l),c<o.minY&&(o.minY=c),u>o.maxX&&(o.maxX=u),h>o.maxY&&(o.maxY=h)}return o}function Tt(t,e,r,n){var a=e.geometry,i=e.type,o=[];if("Point"===i||"MultiPoint"===i)for(var s=0;s<a.length;s+=3)o.push(a[s]),o.push(a[s+1]),t.numPoints++,t.numSimplified++;else if("LineString"===i)Mt(o,a,t,r,!1,!1);else if("MultiLineString"===i||"Polygon"===i)for(s=0;s<a.length;s++)Mt(o,a[s],t,r,"Polygon"===i,0===s);else if("MultiPolygon"===i)for(var l=0;l<a.length;l++){var c=a[l];for(s=0;s<c.length;s++)Mt(o,c[s],t,r,!0,0===s)}if(o.length){var u=e.tags||null;if("LineString"===i&&n.lineMetrics){for(var h in u={},e.tags)u[h]=e.tags[h];u.mapbox_clip_start=a.start/a.size,u.mapbox_clip_end=a.end/a.size}var f={geometry:o,type:"Polygon"===i||"MultiPolygon"===i?3:"LineString"===i||"MultiLineString"===i?2:1,tags:u};null!==e.id&&(f.id=e.id),t.features.push(f)}}function Mt(t,e,r,n,a,i){var o=n*n;if(n>0&&e.size<(a?o:n))r.numPoints+=e.length/3;else{for(var s=[],l=0;l<e.length;l+=3)(0===n||e[l+2]>o)&&(r.numSimplified++,s.push(e[l]),s.push(e[l+1])),r.numPoints++;a&&function(t,e){for(var r=0,n=0,a=t.length,i=a-2;n<a;i=n,n+=2)r+=(t[n]-t[i])*(t[n+1]+t[i+1]);if(r>0===e)for(n=0,a=t.length;n<a/2;n+=2){var o=t[n],s=t[n+1];t[n]=t[a-2-n],t[n+1]=t[a-1-n],t[a-2-n]=o,t[a-1-n]=s}}(s,i),t.push(s)}}function At(t,e){var r=(e=this.options=function(t,e){for(var r in e)t[r]=e[r];return t}(Object.create(this.options),e)).debug;if(r&&console.time("preprocess data"),e.maxZoom<0||e.maxZoom>24)throw new Error("maxZoom should be in the 0-24 range");if(e.promoteId&&e.generateId)throw new Error("promoteId and generateId cannot be used together.");var n=function(t,e){var r=[];if("FeatureCollection"===t.type)for(var n=0;n<t.features.length;n++)it(r,t.features[n],e,n);else"Feature"===t.type?it(r,t,e):it(r,{geometry:t},e);return r}(t,e);this.tiles={},this.tileCoords=[],r&&(console.timeEnd("preprocess data"),console.log("index: maxZoom: %d, maxPoints: %d",e.indexMaxZoom,e.indexMaxPoints),console.time("generate tiles"),this.stats={},this.total=0),(n=function(t,e){var r=e.buffer/e.extent,n=t,a=ht(t,1,-1-r,r,0,-1,2,e),i=ht(t,1,1-r,2+r,0,-1,2,e);return(a||i)&&(n=ht(t,1,-r,1+r,0,-1,2,e)||[],a&&(n=xt(a,1).concat(n)),i&&(n=n.concat(xt(i,-1)))),n}(n,e)).length&&this.splitTile(n,0,0,0),r&&(n.length&&console.log("features: %d, points: %d",this.tiles[0].numFeatures,this.tiles[0].numPoints),console.timeEnd("generate tiles"),console.log("tiles generated:",this.total,JSON.stringify(this.stats)))}function St(t,e,r){return 32*((1<<t)*r+e)+t}function Et(t,e){var r=t.tileID.canonical;if(!this._geoJSONIndex)return e(null,null);var n=this._geoJSONIndex.getTile(r.z,r.x,r.y);if(!n)return e(null,null);var a=new k(n.features),i=E(a);0===i.byteOffset&&i.byteLength===i.buffer.byteLength||(i=new Uint8Array(i)),e(null,{vectorTile:a,rawData:i.buffer})}Y.prototype.load=function(t){var e=this.options,r=e.log,n=e.minZoom,a=e.maxZoom,i=e.nodeSize;r&&console.time("total time");var o="prepare "+t.length+" points";r&&console.time(o),this.points=t;for(var s=[],l=0;l<t.length;l++)t[l].geometry&&s.push(X(t[l],l));this.trees[a+1]=new H(s,tt,et,i,Float32Array),r&&console.timeEnd(o);for(var c=a;c>=n;c--){var u=+Date.now();s=this._cluster(s,c),this.trees[c]=new H(s,tt,et,i,Float32Array),r&&console.log("z%d: %d clusters in %dms",c,s.length,+Date.now()-u)}return r&&console.timeEnd("total time"),this},Y.prototype.getClusters=function(t,e){var r=((t[0]+180)%360+360)%360-180,n=Math.max(-90,Math.min(90,t[1])),a=180===t[2]?180:((t[2]+180)%360+360)%360-180,i=Math.max(-90,Math.min(90,t[3]));if(t[2]-t[0]>=360)r=-180,a=180;else if(r>a){var o=this.getClusters([r,n,180,i],e),s=this.getClusters([-180,n,a,i],e);return o.concat(s)}for(var l=this.trees[this._limitZoom(e)],c=[],u=0,h=l.range(K(r),Q(i),K(a),Q(n));u<h.length;u+=1){var f=h[u],p=l.points[f];c.push(p.numPoints?Z(p):this.points[p.index])}return c},Y.prototype.getChildren=function(t){var e=t>>5,r=t%32,n="No cluster with the specified id.",a=this.trees[r];if(!a)throw new Error(n);var i=a.points[e];if(!i)throw new Error(n);for(var o=this.options.radius/(this.options.extent*Math.pow(2,r-1)),s=[],l=0,c=a.within(i.x,i.y,o);l<c.length;l+=1){var u=c[l],h=a.points[u];h.parentId===t&&s.push(h.numPoints?Z(h):this.points[h.index])}if(0===s.length)throw new Error(n);return s},Y.prototype.getLeaves=function(t,e,r){e=e||10,r=r||0;var n=[];return this._appendLeaves(n,t,e,r,0),n},Y.prototype.getTile=function(t,e,r){var n=this.trees[this._limitZoom(t)],a=Math.pow(2,t),i=this.options,o=i.extent,s=i.radius/o,l=(r-s)/a,c=(r+1+s)/a,u={features:[]};return this._addTileFeatures(n.range((e-s)/a,l,(e+1+s)/a,c),n.points,e,r,a,u),0===e&&this._addTileFeatures(n.range(1-s/a,l,1,c),n.points,a,r,a,u),e===a-1&&this._addTileFeatures(n.range(0,l,s/a,c),n.points,-1,r,a,u),u.features.length?u:null},Y.prototype.getClusterExpansionZoom=function(t){for(var e=t%32-1;e<=this.options.maxZoom;){var r=this.getChildren(t);if(e++,1!==r.length)break;t=r[0].properties.cluster_id}return e},Y.prototype._appendLeaves=function(t,e,r,n,a){for(var i=0,o=this.getChildren(e);i<o.length;i+=1){var s=o[i],l=s.properties;if(l&&l.cluster?a+l.point_count<=n?a+=l.point_count:a=this._appendLeaves(t,l.cluster_id,r,n,a):a<n?a++:t.push(s),t.length===r)break}return a},Y.prototype._addTileFeatures=function(t,e,r,n,a,i){for(var o=0,s=t;o<s.length;o+=1){var l=e[s[o]],c={type:1,geometry:[[Math.round(this.options.extent*(l.x*a-r)),Math.round(this.options.extent*(l.y*a-n))]],tags:l.numPoints?J(l):this.points[l.index].properties},u=l.numPoints?l.id:this.points[l.index].id;void 0!==u&&(c.id=u),i.features.push(c)}},Y.prototype._limitZoom=function(t){return Math.max(this.options.minZoom,Math.min(t,this.options.maxZoom+1))},Y.prototype._cluster=function(t,e){for(var r=[],n=this.options,a=n.radius,i=n.extent,o=n.reduce,s=a/(i*Math.pow(2,e)),l=0;l<t.length;l++){var c=t[l];if(!(c.zoom<=e)){c.zoom=e;for(var u=this.trees[e+1],h=u.within(c.x,c.y,s),f=c.numPoints||1,p=c.x*f,d=c.y*f,g=o&&f>1?this._map(c,!0):null,v=(l<<5)+(e+1),m=0,y=h;m<y.length;m+=1){var x=y[m],b=u.points[x];if(!(b.zoom<=e)){b.zoom=e;var _=b.numPoints||1;p+=b.x*_,d+=b.y*_,f+=_,b.parentId=v,o&&(g||(g=this._map(c,!0)),o(g,this._map(b)))}}1===f?r.push(c):(c.parentId=v,r.push(W(p/f,d/f,v,f,g)))}}return r},Y.prototype._map=function(t,e){if(t.numPoints)return e?$({},t.properties):t.properties;var r=this.points[t.index].properties,n=this.options.map(r);return e&&n===r?$({},n):n},At.prototype.options={maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,tolerance:3,extent:4096,buffer:64,lineMetrics:!1,promoteId:null,generateId:!1,debug:0},At.prototype.splitTile=function(t,e,r,n,a,i,o){for(var s=[t,e,r,n],l=this.options,c=l.debug;s.length;){n=s.pop(),r=s.pop(),e=s.pop(),t=s.pop();var u=1<<e,h=St(e,r,n),f=this.tiles[h];if(!f&&(c>1&&console.time("creation"),f=this.tiles[h]=kt(t,e,r,n,l),this.tileCoords.push({z:e,x:r,y:n}),c)){c>1&&(console.log("tile z%d-%d-%d (features: %d, points: %d, simplified: %d)",e,r,n,f.numFeatures,f.numPoints,f.numSimplified),console.timeEnd("creation"));var p="z"+e;this.stats[p]=(this.stats[p]||0)+1,this.total++}if(f.source=t,a){if(e===l.maxZoom||e===a)continue;var d=1<<a-e;if(r!==Math.floor(i/d)||n!==Math.floor(o/d))continue}else if(e===l.indexMaxZoom||f.numPoints<=l.indexMaxPoints)continue;if(f.source=null,0!==t.length){c>1&&console.time("clipping");var g,v,m,y,x,b,_=.5*l.buffer/l.extent,w=.5-_,k=.5+_,T=1+_;g=v=m=y=null,x=ht(t,u,r-_,r+k,0,f.minX,f.maxX,l),b=ht(t,u,r+w,r+T,0,f.minX,f.maxX,l),t=null,x&&(g=ht(x,u,n-_,n+k,1,f.minY,f.maxY,l),v=ht(x,u,n+w,n+T,1,f.minY,f.maxY,l),x=null),b&&(m=ht(b,u,n-_,n+k,1,f.minY,f.maxY,l),y=ht(b,u,n+w,n+T,1,f.minY,f.maxY,l),b=null),c>1&&console.timeEnd("clipping"),s.push(g||[],e+1,2*r,2*n),s.push(v||[],e+1,2*r,2*n+1),s.push(m||[],e+1,2*r+1,2*n),s.push(y||[],e+1,2*r+1,2*n+1)}}},At.prototype.getTile=function(t,e,r){var n=this.options,a=n.extent,i=n.debug;if(t<0||t>24)return null;var o=1<<t,s=St(t,e=(e%o+o)%o,r);if(this.tiles[s])return _t(this.tiles[s],a);i>1&&console.log("drilling down to z%d-%d-%d",t,e,r);for(var l,c=t,u=e,h=r;!l&&c>0;)c--,u=Math.floor(u/2),h=Math.floor(h/2),l=this.tiles[St(c,u,h)];return l&&l.source?(i>1&&console.log("found parent tile z%d-%d-%d",c,u,h),i>1&&console.time("drilling down"),this.splitTile(l.source,c,u,h,t,e,r),i>1&&console.timeEnd("drilling down"),this.tiles[s]?_t(this.tiles[s],a):null):null};var Lt=function(e){function r(t,r,n){e.call(this,t,r,Et),n&&(this.loadGeoJSON=n)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.loadData=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),this._pendingCallback=e,this._pendingLoadDataParams=t,this._state&&"Idle"!==this._state?this._state="NeedsLoadData":(this._state="Coalescing",this._loadData())},r.prototype._loadData=function(){var e=this;if(this._pendingCallback&&this._pendingLoadDataParams){var r=this._pendingCallback,n=this._pendingLoadDataParams;delete this._pendingCallback,delete this._pendingLoadDataParams;var a=!!(n&&n.request&&n.request.collectResourceTiming)&&new l.Performance(n.request);this.loadGeoJSON(n,function(i,o){if(i||!o)return r(i);if("object"!=typeof o)return r(new Error("Input data given to '"+n.source+"' is not a valid GeoJSON object."));!function t(e,r){switch(e&&e.type||null){case"FeatureCollection":return e.features=e.features.map(y(t,r)),e;case"GeometryCollection":return e.geometries=e.geometries.map(y(t,r)),e;case"Feature":return e.geometry=t(e.geometry,r),e;case"Polygon":case"MultiPolygon":return function(t,e){return"Polygon"===t.type?t.coordinates=x(t.coordinates,e):"MultiPolygon"===t.type&&(t.coordinates=t.coordinates.map(y(x,e))),t}(e,r);default:return e}}(o,!0);try{e._geoJSONIndex=n.cluster?new Y(function(e){var r=e.superclusterOptions,n=e.clusterProperties;if(!n||!r)return r;for(var a={},i={},o={accumulated:null,zoom:0},s={properties:null},l=Object.keys(n),c=0,u=l;c<u.length;c+=1){var h=u[c],f=n[h],p=f[0],d=f[1],g=t.createExpression(d),v=t.createExpression("string"==typeof p?[p,["accumulated"],["get",h]]:p);a[h]=g.value,i[h]=v.value}return r.map=function(t){s.properties=t;for(var e={},r=0,n=l;r<n.length;r+=1){var i=n[r];e[i]=a[i].evaluate(o,s)}return e},r.reduce=function(t,e){s.properties=e;for(var r=0,n=l;r<n.length;r+=1){var a=n[r];o.accumulated=t[a],t[a]=i[a].evaluate(o,s)}},r}(n)).load(o.features):new At(o,n.geojsonVtOptions)}catch(i){return r(i)}e.loaded={};var s={};if(a){var l=a.finish();l&&(s.resourceTiming={},s.resourceTiming[n.source]=JSON.parse(JSON.stringify(l)))}r(null,s)})}},r.prototype.coalesce=function(){"Coalescing"===this._state?this._state="Idle":"NeedsLoadData"===this._state&&(this._state="Coalescing",this._loadData())},r.prototype.reloadTile=function(t,r){var n=this.loaded,a=t.uid;return n&&n[a]?e.prototype.reloadTile.call(this,t,r):this.loadTile(t,r)},r.prototype.loadGeoJSON=function(e,r){if(e.request)t.getJSON(e.request,r);else{if("string"!=typeof e.data)return r(new Error("Input data given to '"+e.source+"' is not a valid GeoJSON object."));try{return r(null,JSON.parse(e.data))}catch(t){return r(new Error("Input data given to '"+e.source+"' is not a valid GeoJSON object."))}}},r.prototype.removeSource=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),e()},r.prototype.getClusterExpansionZoom=function(t,e){e(null,this._geoJSONIndex.getClusterExpansionZoom(t.clusterId))},r.prototype.getClusterChildren=function(t,e){e(null,this._geoJSONIndex.getChildren(t.clusterId))},r.prototype.getClusterLeaves=function(t,e){e(null,this._geoJSONIndex.getLeaves(t.clusterId,t.limit,t.offset))},r}(h),Ct=function(e){var r=this;this.self=e,this.actor=new t.Actor(e,this),this.layerIndexes={},this.workerSourceTypes={vector:h,geojson:Lt},this.workerSources={},this.demWorkerSources={},this.self.registerWorkerSource=function(t,e){if(r.workerSourceTypes[t])throw new Error('Worker source with name "'+t+'" already registered.');r.workerSourceTypes[t]=e},this.self.registerRTLTextPlugin=function(e){if(t.plugin.isLoaded())throw new Error("RTL text plugin already registered.");t.plugin.applyArabicShaping=e.applyArabicShaping,t.plugin.processBidirectionalText=e.processBidirectionalText,t.plugin.processStyledBidirectionalText=e.processStyledBidirectionalText}};return Ct.prototype.setReferrer=function(t,e){this.referrer=e},Ct.prototype.setLayers=function(t,e,r){this.getLayerIndex(t).replace(e),r()},Ct.prototype.updateLayers=function(t,e,r){this.getLayerIndex(t).update(e.layers,e.removedIds),r()},Ct.prototype.loadTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).loadTile(e,r)},Ct.prototype.loadDEMTile=function(t,e,r){this.getDEMWorkerSource(t,e.source).loadTile(e,r)},Ct.prototype.reloadTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).reloadTile(e,r)},Ct.prototype.abortTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).abortTile(e,r)},Ct.prototype.removeTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).removeTile(e,r)},Ct.prototype.removeDEMTile=function(t,e){this.getDEMWorkerSource(t,e.source).removeTile(e)},Ct.prototype.removeSource=function(t,e,r){if(this.workerSources[t]&&this.workerSources[t][e.type]&&this.workerSources[t][e.type][e.source]){var n=this.workerSources[t][e.type][e.source];delete this.workerSources[t][e.type][e.source],void 0!==n.removeSource?n.removeSource(e,r):r()}},Ct.prototype.loadWorkerSource=function(t,e,r){try{this.self.importScripts(e.url),r()}catch(t){r(t.toString())}},Ct.prototype.loadRTLTextPlugin=function(e,r,n){try{t.plugin.isLoaded()||(this.self.importScripts(r),n(t.plugin.isLoaded()?null:new Error("RTL Text Plugin failed to import scripts from "+r)))}catch(t){n(t.toString())}},Ct.prototype.getLayerIndex=function(t){var e=this.layerIndexes[t];return e||(e=this.layerIndexes[t]=new n),e},Ct.prototype.getWorkerSource=function(t,e,r){var n=this;if(this.workerSources[t]||(this.workerSources[t]={}),this.workerSources[t][e]||(this.workerSources[t][e]={}),!this.workerSources[t][e][r]){var a={send:function(e,r,a){n.actor.send(e,r,a,t)}};this.workerSources[t][e][r]=new this.workerSourceTypes[e](a,this.getLayerIndex(t))}return this.workerSources[t][e][r]},Ct.prototype.getDEMWorkerSource=function(t,e){return this.demWorkerSources[t]||(this.demWorkerSources[t]={}),this.demWorkerSources[t][e]||(this.demWorkerSources[t][e]=new f),this.demWorkerSources[t][e]},Ct.prototype.enforceCacheSizeLimit=function(e,r){t.enforceCacheSizeLimit(r)},"undefined"!=typeof WorkerGlobalScope&&void 0!==t.window&&t.window instanceof WorkerGlobalScope&&(t.window.worker=new Ct(t.window)),Ct}),n(0,function(t){var e=t.createCommonjsModule(function(t){function e(t){return!!("undefined"!=typeof window&&"undefined"!=typeof document&&Array.prototype&&Array.prototype.every&&Array.prototype.filter&&Array.prototype.forEach&&Array.prototype.indexOf&&Array.prototype.lastIndexOf&&Array.prototype.map&&Array.prototype.some&&Array.prototype.reduce&&Array.prototype.reduceRight&&Array.isArray&&Function.prototype&&Function.prototype.bind&&Object.keys&&Object.create&&Object.getPrototypeOf&&Object.getOwnPropertyNames&&Object.isSealed&&Object.isFrozen&&Object.isExtensible&&Object.getOwnPropertyDescriptor&&Object.defineProperty&&Object.defineProperties&&Object.seal&&Object.freeze&&Object.preventExtensions&&"JSON"in window&&"parse"in JSON&&"stringify"in JSON&&function(){if(!("Worker"in window&&"Blob"in window&&"URL"in window))return!1;var t,e,r=new Blob([""],{type:"text/javascript"}),n=URL.createObjectURL(r);try{e=new Worker(n),t=!0}catch(e){t=!1}return e&&e.terminate(),URL.revokeObjectURL(n),t}()&&"Uint8ClampedArray"in window&&ArrayBuffer.isView&&function(t){return void 0===r[t]&&(r[t]=function(t){var r=document.createElement("canvas"),n=Object.create(e.webGLContextAttributes);return n.failIfMajorPerformanceCaveat=t,r.probablySupportsContext?r.probablySupportsContext("webgl",n)||r.probablySupportsContext("experimental-webgl",n):r.supportsContext?r.supportsContext("webgl",n)||r.supportsContext("experimental-webgl",n):r.getContext("webgl",n)||r.getContext("experimental-webgl",n)}(t)),r[t]}(t&&t.failIfMajorPerformanceCaveat))}t.exports?t.exports=e:window&&(window.mapboxgl=window.mapboxgl||{},window.mapboxgl.supported=e);var r={};e.webGLContextAttributes={antialias:!1,alpha:!0,stencil:!0,depth:!0}}),r={create:function(e,r,n){var a=t.window.document.createElement(e);return void 0!==r&&(a.className=r),n&&n.appendChild(a),a},createNS:function(e,r){return t.window.document.createElementNS(e,r)}},n=t.window.document.documentElement.style;function a(t){if(!n)return t[0];for(var e=0;e<t.length;e++)if(t[e]in n)return t[e];return t[0]}var i,o=a(["userSelect","MozUserSelect","WebkitUserSelect","msUserSelect"]);r.disableDrag=function(){n&&o&&(i=n[o],n[o]="none")},r.enableDrag=function(){n&&o&&(n[o]=i)};var s=a(["transform","WebkitTransform"]);r.setTransform=function(t,e){t.style[s]=e};var l=!1;try{var c=Object.defineProperty({},"passive",{get:function(){l=!0}});t.window.addEventListener("test",c,c),t.window.removeEventListener("test",c,c)}catch(t){l=!1}r.addEventListener=function(t,e,r,n){void 0===n&&(n={}),"passive"in n&&l?t.addEventListener(e,r,n):t.addEventListener(e,r,n.capture)},r.removeEventListener=function(t,e,r,n){void 0===n&&(n={}),"passive"in n&&l?t.removeEventListener(e,r,n):t.removeEventListener(e,r,n.capture)};var u=function(e){e.preventDefault(),e.stopPropagation(),t.window.removeEventListener("click",u,!0)};function h(t){var e=t.userImage;return!!(e&&e.render&&e.render())&&(t.data.replace(new Uint8Array(e.data.buffer)),!0)}r.suppressClick=function(){t.window.addEventListener("click",u,!0),t.window.setTimeout(function(){t.window.removeEventListener("click",u,!0)},0)},r.mousePos=function(e,r){var n=e.getBoundingClientRect(),a=t.window.TouchEvent&&r instanceof t.window.TouchEvent?r.touches[0]:r;return new t.Point(a.clientX-n.left-e.clientLeft,a.clientY-n.top-e.clientTop)},r.touchPos=function(e,r){for(var n=e.getBoundingClientRect(),a=[],i="touchend"===r.type?r.changedTouches:r.touches,o=0;o<i.length;o++)a.push(new t.Point(i[o].clientX-n.left-e.clientLeft,i[o].clientY-n.top-e.clientTop));return a},r.mouseButton=function(e){return void 0!==t.window.InstallTrigger&&2===e.button&&e.ctrlKey&&t.window.navigator.platform.toUpperCase().indexOf("MAC")>=0?0:e.button},r.remove=function(t){t.parentNode&&t.parentNode.removeChild(t)};var f=function(e){function r(){e.call(this),this.images={},this.updatedImages={},this.callbackDispatchedThisFrame={},this.loaded=!1,this.requestors=[],this.patterns={},this.atlasImage=new t.RGBAImage({width:1,height:1}),this.dirty=!0}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.isLoaded=function(){return this.loaded},r.prototype.setLoaded=function(t){if(this.loaded!==t&&(this.loaded=t,t)){for(var e=0,r=this.requestors;e<r.length;e+=1){var n=r[e],a=n.ids,i=n.callback;this._notify(a,i)}this.requestors=[]}},r.prototype.getImage=function(t){return this.images[t]},r.prototype.addImage=function(t,e){this.images[t]=e},r.prototype.updateImage=function(t,e){var r=this.images[t];e.version=r.version+1,this.images[t]=e,this.updatedImages[t]=!0},r.prototype.removeImage=function(t){var e=this.images[t];delete this.images[t],delete this.patterns[t],e.userImage&&e.userImage.onRemove&&e.userImage.onRemove()},r.prototype.listImages=function(){return Object.keys(this.images)},r.prototype.getImages=function(t,e){var r=!0;if(!this.isLoaded())for(var n=0,a=t;n<a.length;n+=1){var i=a[n];this.images[i]||(r=!1)}this.isLoaded()||r?this._notify(t,e):this.requestors.push({ids:t,callback:e})},r.prototype._notify=function(e,r){for(var n={},a=0,i=e;a<i.length;a+=1){var o=i[a];this.images[o]||this.fire(new t.Event("styleimagemissing",{id:o}));var s=this.images[o];s?n[o]={data:s.data.clone(),pixelRatio:s.pixelRatio,sdf:s.sdf,version:s.version,hasRenderCallback:Boolean(s.userImage&&s.userImage.render)}:t.warnOnce('Image "'+o+'" could not be loaded. Please make sure you have added the image with map.addImage() or a "sprite" property in your style. You can provide missing images by listening for the "styleimagemissing" map event.')}r(null,n)},r.prototype.getPixelSize=function(){var t=this.atlasImage;return{width:t.width,height:t.height}},r.prototype.getPattern=function(e){var r=this.patterns[e],n=this.getImage(e);if(!n)return null;if(r&&r.position.version===n.version)return r.position;if(r)r.position.version=n.version;else{var a={w:n.data.width+2,h:n.data.height+2,x:0,y:0},i=new t.ImagePosition(a,n);this.patterns[e]={bin:a,position:i}}return this._updatePatternAtlas(),this.patterns[e].position},r.prototype.bind=function(e){var r=e.gl;this.atlasTexture?this.dirty&&(this.atlasTexture.update(this.atlasImage),this.dirty=!1):this.atlasTexture=new t.Texture(e,this.atlasImage,r.RGBA),this.atlasTexture.bind(r.LINEAR,r.CLAMP_TO_EDGE)},r.prototype._updatePatternAtlas=function(){var e=[];for(var r in this.patterns)e.push(this.patterns[r].bin);var n=t.potpack(e),a=n.w,i=n.h,o=this.atlasImage;for(var s in o.resize({width:a||1,height:i||1}),this.patterns){var l=this.patterns[s].bin,c=l.x+1,u=l.y+1,h=this.images[s].data,f=h.width,p=h.height;t.RGBAImage.copy(h,o,{x:0,y:0},{x:c,y:u},{width:f,height:p}),t.RGBAImage.copy(h,o,{x:0,y:p-1},{x:c,y:u-1},{width:f,height:1}),t.RGBAImage.copy(h,o,{x:0,y:0},{x:c,y:u+p},{width:f,height:1}),t.RGBAImage.copy(h,o,{x:f-1,y:0},{x:c-1,y:u},{width:1,height:p}),t.RGBAImage.copy(h,o,{x:0,y:0},{x:c+f,y:u},{width:1,height:p})}this.dirty=!0},r.prototype.beginFrame=function(){this.callbackDispatchedThisFrame={}},r.prototype.dispatchRenderCallbacks=function(t){for(var e=0,r=t;e<r.length;e+=1){var n=r[e];if(!this.callbackDispatchedThisFrame[n]){this.callbackDispatchedThisFrame[n]=!0;var a=this.images[n];h(a)&&this.updateImage(n,a)}}},r}(t.Evented),p=v,d=v,g=1e20;function v(t,e,r,n,a,i){this.fontSize=t||24,this.buffer=void 0===e?3:e,this.cutoff=n||.25,this.fontFamily=a||"sans-serif",this.fontWeight=i||"normal",this.radius=r||8;var o=this.size=this.fontSize+2*this.buffer;this.canvas=document.createElement("canvas"),this.canvas.width=this.canvas.height=o,this.ctx=this.canvas.getContext("2d"),this.ctx.font=this.fontWeight+" "+this.fontSize+"px "+this.fontFamily,this.ctx.textBaseline="middle",this.ctx.fillStyle="black",this.gridOuter=new Float64Array(o*o),this.gridInner=new Float64Array(o*o),this.f=new Float64Array(o),this.d=new Float64Array(o),this.z=new Float64Array(o+1),this.v=new Int16Array(o),this.middle=Math.round(o/2*(navigator.userAgent.indexOf("Gecko/")>=0?1.2:1))}function m(t,e,r,n,a,i,o){for(var s=0;s<e;s++){for(var l=0;l<r;l++)n[l]=t[l*e+s];for(y(n,a,i,o,r),l=0;l<r;l++)t[l*e+s]=a[l]}for(l=0;l<r;l++){for(s=0;s<e;s++)n[s]=t[l*e+s];for(y(n,a,i,o,e),s=0;s<e;s++)t[l*e+s]=Math.sqrt(a[s])}}function y(t,e,r,n,a){r[0]=0,n[0]=-g,n[1]=+g;for(var i=1,o=0;i<a;i++){for(var s=(t[i]+i*i-(t[r[o]]+r[o]*r[o]))/(2*i-2*r[o]);s<=n[o];)o--,s=(t[i]+i*i-(t[r[o]]+r[o]*r[o]))/(2*i-2*r[o]);r[++o]=i,n[o]=s,n[o+1]=+g}for(i=0,o=0;i<a;i++){for(;n[o+1]<i;)o++;e[i]=(i-r[o])*(i-r[o])+t[r[o]]}}v.prototype.draw=function(t){this.ctx.clearRect(0,0,this.size,this.size),this.ctx.fillText(t,this.buffer,this.middle);for(var e=this.ctx.getImageData(0,0,this.size,this.size),r=new Uint8ClampedArray(this.size*this.size),n=0;n<this.size*this.size;n++){var a=e.data[4*n+3]/255;this.gridOuter[n]=1===a?0:0===a?g:Math.pow(Math.max(0,.5-a),2),this.gridInner[n]=1===a?g:0===a?0:Math.pow(Math.max(0,a-.5),2)}for(m(this.gridOuter,this.size,this.size,this.f,this.d,this.v,this.z),m(this.gridInner,this.size,this.size,this.f,this.d,this.v,this.z),n=0;n<this.size*this.size;n++){var i=this.gridOuter[n]-this.gridInner[n];r[n]=Math.max(0,Math.min(255,Math.round(255-255*(i/this.radius+this.cutoff))))}return r},p.default=d;var x=function(t,e){this.requestManager=t,this.localIdeographFontFamily=e,this.entries={}};x.prototype.setURL=function(t){this.url=t},x.prototype.getGlyphs=function(e,r){var n=this,a=[];for(var i in e)for(var o=0,s=e[i];o<s.length;o+=1){var l=s[o];a.push({stack:i,id:l})}t.asyncAll(a,function(t,e){var r=t.stack,a=t.id,i=n.entries[r];i||(i=n.entries[r]={glyphs:{},requests:{}});var o=i.glyphs[a];if(void 0===o){if(o=n._tinySDF(i,r,a))return i.glyphs[a]=o,void e(null,{stack:r,id:a,glyph:o});var s=Math.floor(a/256);if(256*s>65535)e(new Error("glyphs > 65535 not supported"));else{var l=i.requests[s];l||(l=i.requests[s]=[],x.loadGlyphRange(r,s,n.url,n.requestManager,function(t,e){if(e)for(var r in e)n._doesCharSupportLocalGlyph(+r)||(i.glyphs[+r]=e[+r]);for(var a=0,o=l;a<o.length;a+=1)(0,o[a])(t,e);delete i.requests[s]})),l.push(function(t,n){t?e(t):n&&e(null,{stack:r,id:a,glyph:n[a]||null})})}}else e(null,{stack:r,id:a,glyph:o})},function(t,e){if(t)r(t);else if(e){for(var n={},a=0,i=e;a<i.length;a+=1){var o=i[a],s=o.stack,l=o.id,c=o.glyph;(n[s]||(n[s]={}))[l]=c&&{id:c.id,bitmap:c.bitmap.clone(),metrics:c.metrics}}r(null,n)}})},x.prototype._doesCharSupportLocalGlyph=function(e){return!!this.localIdeographFontFamily&&(t.isChar["CJK Unified Ideographs"](e)||t.isChar["Hangul Syllables"](e)||t.isChar.Hiragana(e)||t.isChar.Katakana(e))},x.prototype._tinySDF=function(e,r,n){var a=this.localIdeographFontFamily;if(a&&this._doesCharSupportLocalGlyph(n)){var i=e.tinySDF;if(!i){var o="400";/bold/i.test(r)?o="900":/medium/i.test(r)?o="500":/light/i.test(r)&&(o="200"),i=e.tinySDF=new x.TinySDF(24,3,8,.25,a,o)}return{id:n,bitmap:new t.AlphaImage({width:30,height:30},i.draw(String.fromCharCode(n))),metrics:{width:24,height:24,left:0,top:-8,advance:24}}}},x.loadGlyphRange=function(e,r,n,a,i){var o=256*r,s=o+255,l=a.transformRequest(a.normalizeGlyphsURL(n).replace("{fontstack}",e).replace("{range}",o+"-"+s),t.ResourceType.Glyphs);t.getArrayBuffer(l,function(e,r){if(e)i(e);else if(r){for(var n={},a=0,o=t.parseGlyphPBF(r);a<o.length;a+=1){var s=o[a];n[s.id]=s}i(null,n)}})},x.TinySDF=p;var b=function(){this.specification=t.styleSpec.light.position};b.prototype.possiblyEvaluate=function(e,r){return t.sphericalToCartesian(e.expression.evaluate(r))},b.prototype.interpolate=function(e,r,n){return{x:t.number(e.x,r.x,n),y:t.number(e.y,r.y,n),z:t.number(e.z,r.z,n)}};var _=new t.Properties({anchor:new t.DataConstantProperty(t.styleSpec.light.anchor),position:new b,color:new t.DataConstantProperty(t.styleSpec.light.color),intensity:new t.DataConstantProperty(t.styleSpec.light.intensity)}),w=function(e){function r(r){e.call(this),this._transitionable=new t.Transitionable(_),this.setLight(r),this._transitioning=this._transitionable.untransitioned()}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getLight=function(){return this._transitionable.serialize()},r.prototype.setLight=function(e,r){if(void 0===r&&(r={}),!this._validate(t.validateLight,e,r))for(var n in e){var a=e[n];t.endsWith(n,"-transition")?this._transitionable.setTransition(n.slice(0,-"-transition".length),a):this._transitionable.setValue(n,a)}},r.prototype.updateTransitions=function(t){this._transitioning=this._transitionable.transitioned(t,this._transitioning)},r.prototype.hasTransition=function(){return this._transitioning.hasTransition()},r.prototype.recalculate=function(t){this.properties=this._transitioning.possiblyEvaluate(t)},r.prototype._validate=function(e,r,n){return(!n||!1!==n.validate)&&t.emitValidationErrors(this,e.call(t.validateStyle,t.extend({value:r,style:{glyphs:!0,sprite:!0},styleSpec:t.styleSpec})))},r}(t.Evented),k=function(t,e){this.width=t,this.height=e,this.nextRow=0,this.bytes=4,this.data=new Uint8Array(this.width*this.height*this.bytes),this.positions={}};k.prototype.getDash=function(t,e){var r=t.join(",")+String(e);return this.positions[r]||(this.positions[r]=this.addDash(t,e)),this.positions[r]},k.prototype.addDash=function(e,r){var n=r?7:0,a=2*n+1;if(this.nextRow+a>this.height)return t.warnOnce("LineAtlas out of space"),null;for(var i=0,o=0;o<e.length;o++)i+=e[o];for(var s=this.width/i,l=s/2,c=e.length%2==1,u=-n;u<=n;u++)for(var h=this.nextRow+n+u,f=this.width*h,p=c?-e[e.length-1]:0,d=e[0],g=1,v=0;v<this.width;v++){for(;d<v/s;)p=d,d+=e[g],c&&g===e.length-1&&(d+=e[0]),g++;var m=Math.abs(v-p*s),y=Math.abs(v-d*s),x=Math.min(m,y),b=g%2==1,_=void 0;if(r){var w=n?u/n*(l+1):0;if(b){var k=l-Math.abs(w);_=Math.sqrt(x*x+k*k)}else _=l-Math.sqrt(x*x+w*w)}else _=(b?1:-1)*x;this.data[3+4*(f+v)]=Math.max(0,Math.min(255,_+128))}var T={y:(this.nextRow+n+.5)/this.height,height:2*n/this.height,width:i};return this.nextRow+=a,this.dirty=!0,T},k.prototype.bind=function(t){var e=t.gl;this.texture?(e.bindTexture(e.TEXTURE_2D,this.texture),this.dirty&&(this.dirty=!1,e.texSubImage2D(e.TEXTURE_2D,0,0,0,this.width,this.height,e.RGBA,e.UNSIGNED_BYTE,this.data))):(this.texture=e.createTexture(),e.bindTexture(e.TEXTURE_2D,this.texture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,this.width,this.height,0,e.RGBA,e.UNSIGNED_BYTE,this.data))};var T=function e(r,n){this.workerPool=r,this.actors=[],this.currentActor=0,this.id=t.uniqueId();for(var a=this.workerPool.acquire(this.id),i=0;i<a.length;i++){var o=a[i],s=new e.Actor(o,n,this.id);s.name="Worker "+i,this.actors.push(s)}};function M(e,r,n){var a=function(a,i){if(a)return n(a);if(i){var o=t.pick(t.extend(i,e),["tiles","minzoom","maxzoom","attribution","mapbox_logo","bounds","scheme","tileSize","encoding"]);i.vector_layers&&(o.vectorLayers=i.vector_layers,o.vectorLayerIds=o.vectorLayers.map(function(t){return t.id})),e.url&&(o.tiles=r.canonicalizeTileset(o,e.url)),n(null,o)}};return e.url?t.getJSON(r.transformRequest(r.normalizeSourceURL(e.url),t.ResourceType.Source),a):t.browser.frame(function(){return a(null,e)})}T.prototype.broadcast=function(e,r,n){n=n||function(){},t.asyncAll(this.actors,function(t,n){t.send(e,r,n)},n)},T.prototype.getActor=function(){return this.currentActor=(this.currentActor+1)%this.actors.length,this.actors[this.currentActor]},T.prototype.remove=function(){this.actors.forEach(function(t){t.remove()}),this.actors=[],this.workerPool.release(this.id)},T.Actor=t.Actor;var A=function(e,r,n){this.bounds=t.LngLatBounds.convert(this.validateBounds(e)),this.minzoom=r||0,this.maxzoom=n||24};A.prototype.validateBounds=function(t){return Array.isArray(t)&&4===t.length?[Math.max(-180,t[0]),Math.max(-90,t[1]),Math.min(180,t[2]),Math.min(90,t[3])]:[-180,-90,180,90]},A.prototype.contains=function(e){var r=Math.pow(2,e.z),n=Math.floor(t.mercatorXfromLng(this.bounds.getWest())*r),a=Math.floor(t.mercatorYfromLat(this.bounds.getNorth())*r),i=Math.ceil(t.mercatorXfromLng(this.bounds.getEast())*r),o=Math.ceil(t.mercatorYfromLat(this.bounds.getSouth())*r);return e.x>=n&&e.x<i&&e.y>=a&&e.y<o};var S=function(e){function r(r,n,a,i){if(e.call(this),this.id=r,this.dispatcher=a,this.type="vector",this.minzoom=0,this.maxzoom=22,this.scheme="xyz",this.tileSize=512,this.reparseOverscaled=!0,this.isTileClipped=!0,this._loaded=!1,t.extend(this,t.pick(n,["url","scheme","tileSize"])),this._options=t.extend({type:"vector"},n),this._collectResourceTiming=n.collectResourceTiming,512!==this.tileSize)throw new Error("vector tile sources must have a tileSize of 512");this.setEventedParent(i)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this._loaded=!1,this.fire(new t.Event("dataloading",{dataType:"source"})),this._tileJSONRequest=M(this._options,this.map._requestManager,function(r,n){e._tileJSONRequest=null,e._loaded=!0,r?e.fire(new t.ErrorEvent(r)):n&&(t.extend(e,n),n.bounds&&(e.tileBounds=new A(n.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(n.tiles,e.map._requestManager._customAccessToken),t.postMapLoadEvent(n.tiles,e.map._getMapId(),e.map._requestManager._skuToken,e.map._requestManager._customAccessToken),e.fire(new t.Event("data",{dataType:"source",sourceDataType:"metadata"})),e.fire(new t.Event("data",{dataType:"source",sourceDataType:"content"})))})},r.prototype.loaded=function(){return this._loaded},r.prototype.hasTile=function(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null)},r.prototype.serialize=function(){return t.extend({},this._options)},r.prototype.loadTile=function(e,r){var n=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.url,null),a={request:this.map._requestManager.transformRequest(n,t.ResourceType.Tile),uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,tileSize:this.tileSize*e.tileID.overscaleFactor(),type:this.type,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes};function i(n,a){return delete e.request,e.aborted?r(null):n&&404!==n.status?r(n):(a&&a.resourceTiming&&(e.resourceTiming=a.resourceTiming),this.map._refreshExpiredTiles&&a&&e.setExpiryData(a),e.loadVectorData(a,this.map.painter),t.cacheEntryPossiblyAdded(this.dispatcher),r(null),void(e.reloadCallback&&(this.loadTile(e,e.reloadCallback),e.reloadCallback=null)))}a.request.collectResourceTiming=this._collectResourceTiming,e.actor&&"expired"!==e.state?"loading"===e.state?e.reloadCallback=r:e.request=e.actor.send("reloadTile",a,i.bind(this)):(e.actor=this.dispatcher.getActor(),e.request=e.actor.send("loadTile",a,i.bind(this)))},r.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.actor&&t.actor.send("abortTile",{uid:t.uid,type:this.type,source:this.id},void 0)},r.prototype.unloadTile=function(t){t.unloadVectorData(),t.actor&&t.actor.send("removeTile",{uid:t.uid,type:this.type,source:this.id},void 0)},r.prototype.hasTransition=function(){return!1},r}(t.Evented),E=function(e){function r(r,n,a,i){e.call(this),this.id=r,this.dispatcher=a,this.setEventedParent(i),this.type="raster",this.minzoom=0,this.maxzoom=22,this.roundZoom=!0,this.scheme="xyz",this.tileSize=512,this._loaded=!1,this._options=t.extend({type:"raster"},n),t.extend(this,t.pick(n,["url","scheme","tileSize"]))}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this._loaded=!1,this.fire(new t.Event("dataloading",{dataType:"source"})),this._tileJSONRequest=M(this._options,this.map._requestManager,function(r,n){e._tileJSONRequest=null,e._loaded=!0,r?e.fire(new t.ErrorEvent(r)):n&&(t.extend(e,n),n.bounds&&(e.tileBounds=new A(n.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(n.tiles),t.postMapLoadEvent(n.tiles,e.map._getMapId(),e.map._requestManager._skuToken),e.fire(new t.Event("data",{dataType:"source",sourceDataType:"metadata"})),e.fire(new t.Event("data",{dataType:"source",sourceDataType:"content"})))})},r.prototype.loaded=function(){return this._loaded},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null)},r.prototype.serialize=function(){return t.extend({},this._options)},r.prototype.hasTile=function(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},r.prototype.loadTile=function(e,r){var n=this,a=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.url,this.tileSize);e.request=t.getImage(this.map._requestManager.transformRequest(a,t.ResourceType.Tile),function(a,i){if(delete e.request,e.aborted)e.state="unloaded",r(null);else if(a)e.state="errored",r(a);else if(i){n.map._refreshExpiredTiles&&e.setExpiryData(i),delete i.cacheControl,delete i.expires;var o=n.map.painter.context,s=o.gl;e.texture=n.map.painter.getTileTexture(i.width),e.texture?e.texture.update(i,{useMipmap:!0}):(e.texture=new t.Texture(o,i,s.RGBA,{useMipmap:!0}),e.texture.bind(s.LINEAR,s.CLAMP_TO_EDGE,s.LINEAR_MIPMAP_NEAREST),o.extTextureFilterAnisotropic&&s.texParameterf(s.TEXTURE_2D,o.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,o.extTextureFilterAnisotropicMax)),e.state="loaded",t.cacheEntryPossiblyAdded(n.dispatcher),r(null)}})},r.prototype.abortTile=function(t,e){t.request&&(t.request.cancel(),delete t.request),e()},r.prototype.unloadTile=function(t,e){t.texture&&this.map.painter.saveTileTexture(t.texture),e()},r.prototype.hasTransition=function(){return!1},r}(t.Evented),L=function(e){function r(r,n,a,i){e.call(this,r,n,a,i),this.type="raster-dem",this.maxzoom=22,this._options=t.extend({type:"raster-dem"},n),this.encoding=n.encoding||"mapbox"}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.serialize=function(){return{type:"raster-dem",url:this.url,tileSize:this.tileSize,tiles:this.tiles,bounds:this.bounds,encoding:this.encoding}},r.prototype.loadTile=function(e,r){var n=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.url,this.tileSize);e.request=t.getImage(this.map._requestManager.transformRequest(n,t.ResourceType.Tile),function(n,a){if(delete e.request,e.aborted)e.state="unloaded",r(null);else if(n)e.state="errored",r(n);else if(a){this.map._refreshExpiredTiles&&e.setExpiryData(a),delete a.cacheControl,delete a.expires;var i=t.browser.getImageData(a),o={uid:e.uid,coord:e.tileID,source:this.id,rawImageData:i,encoding:this.encoding};e.actor&&"expired"!==e.state||(e.actor=this.dispatcher.getActor(),e.actor.send("loadDEMTile",o,function(t,n){t&&(e.state="errored",r(t)),n&&(e.dem=n,e.needsHillshadePrepare=!0,e.state="loaded",r(null))}.bind(this)))}}.bind(this)),e.neighboringTiles=this._getNeighboringTiles(e.tileID)},r.prototype._getNeighboringTiles=function(e){var r=e.canonical,n=Math.pow(2,r.z),a=(r.x-1+n)%n,i=0===r.x?e.wrap-1:e.wrap,o=(r.x+1+n)%n,s=r.x+1===n?e.wrap+1:e.wrap,l={};return l[new t.OverscaledTileID(e.overscaledZ,i,r.z,a,r.y).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y).key]={backfilled:!1},r.y>0&&(l[new t.OverscaledTileID(e.overscaledZ,i,r.z,a,r.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y-1).key]={backfilled:!1}),r.y+1<n&&(l[new t.OverscaledTileID(e.overscaledZ,i,r.z,a,r.y+1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y+1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y+1).key]={backfilled:!1}),l},r.prototype.unloadTile=function(t){t.demTexture&&this.map.painter.saveTileTexture(t.demTexture),t.fbo&&(t.fbo.destroy(),delete t.fbo),t.dem&&delete t.dem,delete t.neighboringTiles,t.state="unloaded",t.actor&&t.actor.send("removeDEMTile",{uid:t.uid,source:this.id})},r}(E),C=function(e){function r(r,n,a,i){e.call(this),this.id=r,this.type="geojson",this.minzoom=0,this.maxzoom=18,this.tileSize=512,this.isTileClipped=!0,this.reparseOverscaled=!0,this._removed=!1,this._loaded=!1,this.actor=a.getActor(),this.setEventedParent(i),this._data=n.data,this._options=t.extend({},n),this._collectResourceTiming=n.collectResourceTiming,this._resourceTiming=[],void 0!==n.maxzoom&&(this.maxzoom=n.maxzoom),n.type&&(this.type=n.type),n.attribution&&(this.attribution=n.attribution);var o=t.EXTENT/this.tileSize;this.workerOptions=t.extend({source:this.id,cluster:n.cluster||!1,geojsonVtOptions:{buffer:(void 0!==n.buffer?n.buffer:128)*o,tolerance:(void 0!==n.tolerance?n.tolerance:.375)*o,extent:t.EXTENT,maxZoom:this.maxzoom,lineMetrics:n.lineMetrics||!1,generateId:n.generateId||!1},superclusterOptions:{maxZoom:void 0!==n.clusterMaxZoom?Math.min(n.clusterMaxZoom,this.maxzoom-1):this.maxzoom-1,extent:t.EXTENT,radius:(n.clusterRadius||50)*o,log:!1},clusterProperties:n.clusterProperties},n.workerOptions)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this.fire(new t.Event("dataloading",{dataType:"source"})),this._updateWorkerData(function(r){if(r)e.fire(new t.ErrorEvent(r));else{var n={dataType:"source",sourceDataType:"metadata"};e._collectResourceTiming&&e._resourceTiming&&e._resourceTiming.length>0&&(n.resourceTiming=e._resourceTiming,e._resourceTiming=[]),e.fire(new t.Event("data",n))}})},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.setData=function(e){var r=this;return this._data=e,this.fire(new t.Event("dataloading",{dataType:"source"})),this._updateWorkerData(function(e){if(e)r.fire(new t.ErrorEvent(e));else{var n={dataType:"source",sourceDataType:"content"};r._collectResourceTiming&&r._resourceTiming&&r._resourceTiming.length>0&&(n.resourceTiming=r._resourceTiming,r._resourceTiming=[]),r.fire(new t.Event("data",n))}}),this},r.prototype.getClusterExpansionZoom=function(t,e){return this.actor.send("geojson.getClusterExpansionZoom",{clusterId:t,source:this.id},e),this},r.prototype.getClusterChildren=function(t,e){return this.actor.send("geojson.getClusterChildren",{clusterId:t,source:this.id},e),this},r.prototype.getClusterLeaves=function(t,e,r,n){return this.actor.send("geojson.getClusterLeaves",{source:this.id,clusterId:t,limit:e,offset:r},n),this},r.prototype._updateWorkerData=function(e){var r=this;this._loaded=!1;var n=t.extend({},this.workerOptions),a=this._data;"string"==typeof a?(n.request=this.map._requestManager.transformRequest(t.browser.resolveURL(a),t.ResourceType.Source),n.request.collectResourceTiming=this._collectResourceTiming):n.data=JSON.stringify(a),this.actor.send(this.type+".loadData",n,function(t,a){r._removed||a&&a.abandoned||(r._loaded=!0,a&&a.resourceTiming&&a.resourceTiming[r.id]&&(r._resourceTiming=a.resourceTiming[r.id].slice(0)),r.actor.send(r.type+".coalesce",{source:n.source},null),e(t))})},r.prototype.loaded=function(){return this._loaded},r.prototype.loadTile=function(e,r){var n=this,a=e.actor?"reloadTile":"loadTile";e.actor=this.actor;var i={type:this.type,uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes};e.request=this.actor.send(a,i,function(t,i){return delete e.request,e.unloadVectorData(),e.aborted?r(null):t?r(t):(e.loadVectorData(i,n.map.painter,"reloadTile"===a),r(null))})},r.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.aborted=!0},r.prototype.unloadTile=function(t){t.unloadVectorData(),this.actor.send("removeTile",{uid:t.uid,type:this.type,source:this.id})},r.prototype.onRemove=function(){this._removed=!0,this.actor.send("removeSource",{type:this.type,source:this.id})},r.prototype.serialize=function(){return t.extend({},this._options,{type:this.type,data:this._data})},r.prototype.hasTransition=function(){return!1},r}(t.Evented),P=function(e){function r(t,r,n,a){e.call(this),this.id=t,this.dispatcher=n,this.coordinates=r.coordinates,this.type="image",this.minzoom=0,this.maxzoom=22,this.tileSize=512,this.tiles={},this._loaded=!1,this.setEventedParent(a),this.options=r}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(e,r){var n=this;this._loaded=!1,this.fire(new t.Event("dataloading",{dataType:"source"})),this.url=this.options.url,t.getImage(this.map._requestManager.transformRequest(this.url,t.ResourceType.Image),function(a,i){n._loaded=!0,a?n.fire(new t.ErrorEvent(a)):i&&(n.image=i,e&&(n.coordinates=e),r&&r(),n._finishLoading())})},r.prototype.loaded=function(){return this._loaded},r.prototype.updateImage=function(t){var e=this;return this.image&&t.url?(this.options.url=t.url,this.load(t.coordinates,function(){e.texture=null}),this):this},r.prototype._finishLoading=function(){this.map&&(this.setCoordinates(this.coordinates),this.fire(new t.Event("data",{dataType:"source",sourceDataType:"metadata"})))},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.setCoordinates=function(e){var r=this;this.coordinates=e;var n=e.map(t.MercatorCoordinate.fromLngLat);this.tileID=function(e){for(var r=1/0,n=1/0,a=-1/0,i=-1/0,o=0,s=e;o<s.length;o+=1){var l=s[o];r=Math.min(r,l.x),n=Math.min(n,l.y),a=Math.max(a,l.x),i=Math.max(i,l.y)}var c=a-r,u=i-n,h=Math.max(c,u),f=Math.max(0,Math.floor(-Math.log(h)/Math.LN2)),p=Math.pow(2,f);return new t.CanonicalTileID(f,Math.floor((r+a)/2*p),Math.floor((n+i)/2*p))}(n),this.minzoom=this.maxzoom=this.tileID.z;var a=n.map(function(t){return r.tileID.getTilePoint(t)._round()});return this._boundsArray=new t.StructArrayLayout4i8,this._boundsArray.emplaceBack(a[0].x,a[0].y,0,0),this._boundsArray.emplaceBack(a[1].x,a[1].y,t.EXTENT,0),this._boundsArray.emplaceBack(a[3].x,a[3].y,0,t.EXTENT),this._boundsArray.emplaceBack(a[2].x,a[2].y,t.EXTENT,t.EXTENT),this.boundsBuffer&&(this.boundsBuffer.destroy(),delete this.boundsBuffer),this.fire(new t.Event("data",{dataType:"source",sourceDataType:"content"})),this},r.prototype.prepare=function(){if(0!==Object.keys(this.tiles).length&&this.image){var e=this.map.painter.context,r=e.gl;for(var n in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,t.rasterBoundsAttributes.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture||(this.texture=new t.Texture(e,this.image,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this.tiles){var a=this.tiles[n];"loaded"!==a.state&&(a.state="loaded",a.texture=this.texture)}}},r.prototype.loadTile=function(t,e){this.tileID&&this.tileID.equals(t.tileID.canonical)?(this.tiles[String(t.tileID.wrap)]=t,t.buckets={},e(null)):(t.state="errored",e(null))},r.prototype.serialize=function(){return{type:"image",url:this.options.url,coordinates:this.coordinates}},r.prototype.hasTransition=function(){return!1},r}(t.Evented),O=function(e){function r(t,r,n,a){e.call(this,t,r,n,a),this.roundZoom=!0,this.type="video",this.options=r}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this._loaded=!1;var r=this.options;this.urls=[];for(var n=0,a=r.urls;n<a.length;n+=1){var i=a[n];this.urls.push(this.map._requestManager.transformRequest(i,t.ResourceType.Source).url)}t.getVideo(this.urls,function(r,n){e._loaded=!0,r?e.fire(new t.ErrorEvent(r)):n&&(e.video=n,e.video.loop=!0,e.video.addEventListener("playing",function(){e.map.triggerRepaint()}),e.map&&e.video.play(),e._finishLoading())})},r.prototype.pause=function(){this.video&&this.video.pause()},r.prototype.play=function(){this.video&&this.video.play()},r.prototype.seek=function(e){if(this.video){var r=this.video.seekable;e<r.start(0)||e>r.end(0)?this.fire(new t.ErrorEvent(new t.ValidationError("Playback for this video can be set only between the "+r.start(0)+" and "+r.end(0)+"-second mark."))):this.video.currentTime=e}},r.prototype.getVideo=function(){return this.video},r.prototype.onAdd=function(t){this.map||(this.map=t,this.load(),this.video&&(this.video.play(),this.setCoordinates(this.coordinates)))},r.prototype.prepare=function(){if(!(0===Object.keys(this.tiles).length||this.video.readyState<2)){var e=this.map.painter.context,r=e.gl;for(var n in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,t.rasterBoundsAttributes.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?this.video.paused||(this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE),r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,this.video)):(this.texture=new t.Texture(e,this.video,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this.tiles){var a=this.tiles[n];"loaded"!==a.state&&(a.state="loaded",a.texture=this.texture)}}},r.prototype.serialize=function(){return{type:"video",urls:this.urls,coordinates:this.coordinates}},r.prototype.hasTransition=function(){return this.video&&!this.video.paused},r}(P),z=function(e){function r(r,n,a,i){e.call(this,r,n,a,i),n.coordinates?Array.isArray(n.coordinates)&&4===n.coordinates.length&&!n.coordinates.some(function(t){return!Array.isArray(t)||2!==t.length||t.some(function(t){return"number"!=typeof t})})||this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'"coordinates" property must be an array of 4 longitude/latitude array pairs'))):this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'missing required property "coordinates"'))),n.animate&&"boolean"!=typeof n.animate&&this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'optional "animate" property must be a boolean value'))),n.canvas?"string"==typeof n.canvas||n.canvas instanceof t.window.HTMLCanvasElement||this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'"canvas" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance'))):this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'missing required property "canvas"'))),this.options=n,this.animate=void 0===n.animate||n.animate}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){this._loaded=!0,this.canvas||(this.canvas=this.options.canvas instanceof t.window.HTMLCanvasElement?this.options.canvas:t.window.document.getElementById(this.options.canvas)),this.width=this.canvas.width,this.height=this.canvas.height,this._hasInvalidDimensions()?this.fire(new t.ErrorEvent(new Error("Canvas dimensions cannot be less than or equal to zero."))):(this.play=function(){this._playing=!0,this.map.triggerRepaint()},this.pause=function(){this._playing&&(this.prepare(),this._playing=!1)},this._finishLoading())},r.prototype.getCanvas=function(){return this.canvas},r.prototype.onAdd=function(t){this.map=t,this.load(),this.canvas&&this.animate&&this.play()},r.prototype.onRemove=function(){this.pause()},r.prototype.prepare=function(){var e=!1;if(this.canvas.width!==this.width&&(this.width=this.canvas.width,e=!0),this.canvas.height!==this.height&&(this.height=this.canvas.height,e=!0),!this._hasInvalidDimensions()&&0!==Object.keys(this.tiles).length){var r=this.map.painter.context,n=r.gl;for(var a in this.boundsBuffer||(this.boundsBuffer=r.createVertexBuffer(this._boundsArray,t.rasterBoundsAttributes.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?(e||this._playing)&&this.texture.update(this.canvas,{premultiply:!0}):this.texture=new t.Texture(r,this.canvas,n.RGBA,{premultiply:!0}),this.tiles){var i=this.tiles[a];"loaded"!==i.state&&(i.state="loaded",i.texture=this.texture)}}},r.prototype.serialize=function(){return{type:"canvas",coordinates:this.coordinates}},r.prototype.hasTransition=function(){return this._playing},r.prototype._hasInvalidDimensions=function(){for(var t=0,e=[this.canvas.width,this.canvas.height];t<e.length;t+=1){var r=e[t];if(isNaN(r)||r<=0)return!0}return!1},r}(P),I={vector:S,raster:E,"raster-dem":L,geojson:C,video:O,image:P,canvas:z},D=function(e,r,n,a){var i=new I[r.type](e,r,n,a);if(i.id!==e)throw new Error("Expected Source id to be "+e+" instead of "+i.id);return t.bindAll(["load","abort","unload","serialize","prepare"],i),i};function R(e,r){var n=t.identity([]);return t.translate(n,n,[1,1,0]),t.scale(n,n,[.5*e.width,.5*e.height,1]),t.multiply(n,n,e.calculatePosMatrix(r.toUnwrapped()))}function F(t,e,r,n,a){var i=function(t,e,r){if(t)for(var n=0,a=t;n<a.length;n+=1){var i=e[a[n]];if(i&&i.source===r&&"fill-extrusion"===i.type)return!0}else for(var o in e){var s=e[o];if(s.source===r&&"fill-extrusion"===s.type)return!0}return!1}(n&&n.layers,e,t.id),o=a.maxPitchScaleFactor(),s=t.tilesIn(r,o,i);s.sort(B);for(var l=[],c=0,u=s;c<u.length;c+=1){var h=u[c];l.push({wrappedTileID:h.tileID.wrapped().key,queryResults:h.tile.queryRenderedFeatures(e,t._state,h.queryGeometry,h.cameraQueryGeometry,h.scale,n,a,o,R(t.transform,h.tileID))})}var f=function(t){for(var e={},r={},n=0,a=t;n<a.length;n+=1){var i=a[n],o=i.queryResults,s=i.wrappedTileID,l=r[s]=r[s]||{};for(var c in o)for(var u=o[c],h=l[c]=l[c]||{},f=e[c]=e[c]||[],p=0,d=u;p<d.length;p+=1){var g=d[p];h[g.featureIndex]||(h[g.featureIndex]=!0,f.push(g))}}return e}(l);for(var p in f)f[p].forEach(function(e){var r=e.feature,n=t.getFeatureState(r.layer["source-layer"],r.id);r.source=r.layer.source,r.layer["source-layer"]&&(r.sourceLayer=r.layer["source-layer"]),r.state=n});return f}function B(t,e){var r=t.tileID,n=e.tileID;return r.overscaledZ-n.overscaledZ||r.canonical.y-n.canonical.y||r.wrap-n.wrap||r.canonical.x-n.canonical.x}var N=function(t,e){this.max=t,this.onRemove=e,this.reset()};N.prototype.reset=function(){for(var t in this.data)for(var e=0,r=this.data[t];e<r.length;e+=1){var n=r[e];n.timeout&&clearTimeout(n.timeout),this.onRemove(n.value)}return this.data={},this.order=[],this},N.prototype.add=function(t,e,r){var n=this,a=t.wrapped().key;void 0===this.data[a]&&(this.data[a]=[]);var i={value:e,timeout:void 0};if(void 0!==r&&(i.timeout=setTimeout(function(){n.remove(t,i)},r)),this.data[a].push(i),this.order.push(a),this.order.length>this.max){var o=this._getAndRemoveByKey(this.order[0]);o&&this.onRemove(o)}return this},N.prototype.has=function(t){return t.wrapped().key in this.data},N.prototype.getAndRemove=function(t){return this.has(t)?this._getAndRemoveByKey(t.wrapped().key):null},N.prototype._getAndRemoveByKey=function(t){var e=this.data[t].shift();return e.timeout&&clearTimeout(e.timeout),0===this.data[t].length&&delete this.data[t],this.order.splice(this.order.indexOf(t),1),e.value},N.prototype.get=function(t){return this.has(t)?this.data[t.wrapped().key][0].value:null},N.prototype.remove=function(t,e){if(!this.has(t))return this;var r=t.wrapped().key,n=void 0===e?0:this.data[r].indexOf(e),a=this.data[r][n];return this.data[r].splice(n,1),a.timeout&&clearTimeout(a.timeout),0===this.data[r].length&&delete this.data[r],this.onRemove(a.value),this.order.splice(this.order.indexOf(r),1),this},N.prototype.setMaxSize=function(t){for(this.max=t;this.order.length>this.max;){var e=this._getAndRemoveByKey(this.order[0]);e&&this.onRemove(e)}return this};var j=function(t,e,r){this.context=t;var n=t.gl;this.buffer=n.createBuffer(),this.dynamicDraw=Boolean(r),this.context.unbindVAO(),t.bindElementBuffer.set(this.buffer),n.bufferData(n.ELEMENT_ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?n.DYNAMIC_DRAW:n.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};j.prototype.bind=function(){this.context.bindElementBuffer.set(this.buffer)},j.prototype.updateData=function(t){var e=this.context.gl;this.context.unbindVAO(),this.bind(),e.bufferSubData(e.ELEMENT_ARRAY_BUFFER,0,t.arrayBuffer)},j.prototype.destroy=function(){var t=this.context.gl;this.buffer&&(t.deleteBuffer(this.buffer),delete this.buffer)};var V={Int8:"BYTE",Uint8:"UNSIGNED_BYTE",Int16:"SHORT",Uint16:"UNSIGNED_SHORT",Int32:"INT",Uint32:"UNSIGNED_INT",Float32:"FLOAT"},U=function(t,e,r,n){this.length=e.length,this.attributes=r,this.itemSize=e.bytesPerElement,this.dynamicDraw=n,this.context=t;var a=t.gl;this.buffer=a.createBuffer(),t.bindVertexBuffer.set(this.buffer),a.bufferData(a.ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?a.DYNAMIC_DRAW:a.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};U.prototype.bind=function(){this.context.bindVertexBuffer.set(this.buffer)},U.prototype.updateData=function(t){var e=this.context.gl;this.bind(),e.bufferSubData(e.ARRAY_BUFFER,0,t.arrayBuffer)},U.prototype.enableAttributes=function(t,e){for(var r=0;r<this.attributes.length;r++){var n=this.attributes[r],a=e.attributes[n.name];void 0!==a&&t.enableVertexAttribArray(a)}},U.prototype.setVertexAttribPointers=function(t,e,r){for(var n=0;n<this.attributes.length;n++){var a=this.attributes[n],i=e.attributes[a.name];void 0!==i&&t.vertexAttribPointer(i,a.components,t[V[a.type]],!1,this.itemSize,a.offset+this.itemSize*(r||0))}},U.prototype.destroy=function(){var t=this.context.gl;this.buffer&&(t.deleteBuffer(this.buffer),delete this.buffer)};var q=function(t){this.gl=t.gl,this.default=this.getDefault(),this.current=this.default,this.dirty=!1};q.prototype.get=function(){return this.current},q.prototype.set=function(t){},q.prototype.getDefault=function(){return this.default},q.prototype.setDefault=function(){this.set(this.default)};var H=function(e){function r(){e.apply(this,arguments)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getDefault=function(){return t.Color.transparent},r.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.clearColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1)},r}(q),G=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 1},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearDepth(t),this.current=t,this.dirty=!1)},e}(q),Y=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearStencil(t),this.current=t,this.dirty=!1)},e}(q),W=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return[!0,!0,!0,!0]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.colorMask(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1)},e}(q),X=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthMask(t),this.current=t,this.dirty=!1)},e}(q),Z=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 255},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.stencilMask(t),this.current=t,this.dirty=!1)},e}(q),J=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return{func:this.gl.ALWAYS,ref:0,mask:255}},e.prototype.set=function(t){var e=this.current;(t.func!==e.func||t.ref!==e.ref||t.mask!==e.mask||this.dirty)&&(this.gl.stencilFunc(t.func,t.ref,t.mask),this.current=t,this.dirty=!1)},e}(q),K=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[t.KEEP,t.KEEP,t.KEEP]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||this.dirty)&&(this.gl.stencilOp(t[0],t[1],t[2]),this.current=t,this.dirty=!1)},e}(q),Q=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.STENCIL_TEST):e.disable(e.STENCIL_TEST),this.current=t,this.dirty=!1}},e}(q),$=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return[0,1]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.depthRange(t[0],t[1]),this.current=t,this.dirty=!1)},e}(q),tt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.DEPTH_TEST):e.disable(e.DEPTH_TEST),this.current=t,this.dirty=!1}},e}(q),et=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.LESS},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthFunc(t),this.current=t,this.dirty=!1)},e}(q),rt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.BLEND):e.disable(e.BLEND),this.current=t,this.dirty=!1}},e}(q),nt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[t.ONE,t.ZERO]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.blendFunc(t[0],t[1]),this.current=t,this.dirty=!1)},e}(q),at=function(e){function r(){e.apply(this,arguments)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getDefault=function(){return t.Color.transparent},r.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.blendColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1)},r}(q),it=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.FUNC_ADD},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.blendEquation(t),this.current=t,this.dirty=!1)},e}(q),ot=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.CULL_FACE):e.disable(e.CULL_FACE),this.current=t,this.dirty=!1}},e}(q),st=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.BACK},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.cullFace(t),this.current=t,this.dirty=!1)},e}(q),lt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.CCW},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.frontFace(t),this.current=t,this.dirty=!1)},e}(q),ct=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.useProgram(t),this.current=t,this.dirty=!1)},e}(q),ut=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.TEXTURE0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.activeTexture(t),this.current=t,this.dirty=!1)},e}(q),ht=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[0,0,t.drawingBufferWidth,t.drawingBufferHeight]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.viewport(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1)},e}(q),ft=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindFramebuffer(e.FRAMEBUFFER,t),this.current=t,this.dirty=!1}},e}(q),pt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindRenderbuffer(e.RENDERBUFFER,t),this.current=t,this.dirty=!1}},e}(q),dt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindTexture(e.TEXTURE_2D,t),this.current=t,this.dirty=!1}},e}(q),gt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindBuffer(e.ARRAY_BUFFER,t),this.current=t,this.dirty=!1}},e}(q),vt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){var e=this.gl;e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t),this.current=t,this.dirty=!1},e}(q),mt=function(t){function e(e){t.call(this,e),this.vao=e.extVertexArrayObject}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){this.vao&&(t!==this.current||this.dirty)&&(this.vao.bindVertexArrayOES(t),this.current=t,this.dirty=!1)},e}(q),yt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 4},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_ALIGNMENT,t),this.current=t,this.dirty=!1}},e}(q),xt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t),this.current=t,this.dirty=!1}},e}(q),bt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,t),this.current=t,this.dirty=!1}},e}(q),_t=function(t){function e(e,r){t.call(this,e),this.context=e,this.parent=r}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e}(q),wt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setDirty=function(){this.dirty=!0},e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0),this.current=t,this.dirty=!1}},e}(_t),kt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,t),this.current=t,this.dirty=!1}},e}(_t),Tt=function(t,e,r){this.context=t,this.width=e,this.height=r;var n=t.gl,a=this.framebuffer=n.createFramebuffer();this.colorAttachment=new wt(t,a),this.depthAttachment=new kt(t,a)};Tt.prototype.destroy=function(){var t=this.context.gl,e=this.colorAttachment.get();e&&t.deleteTexture(e);var r=this.depthAttachment.get();r&&t.deleteRenderbuffer(r),t.deleteFramebuffer(this.framebuffer)};var Mt=function(t,e,r){this.func=t,this.mask=e,this.range=r};Mt.ReadOnly=!1,Mt.ReadWrite=!0,Mt.disabled=new Mt(519,Mt.ReadOnly,[0,1]);var At=function(t,e,r,n,a,i){this.test=t,this.ref=e,this.mask=r,this.fail=n,this.depthFail=a,this.pass=i};At.disabled=new At({func:519,mask:0},0,0,7680,7680,7680);var St=function(t,e,r){this.blendFunction=t,this.blendColor=e,this.mask=r};St.disabled=new St(St.Replace=[1,0],t.Color.transparent,[!1,!1,!1,!1]),St.unblended=new St(St.Replace,t.Color.transparent,[!0,!0,!0,!0]),St.alphaBlended=new St([1,771],t.Color.transparent,[!0,!0,!0,!0]);var Et=function(t,e,r){this.enable=t,this.mode=e,this.frontFace=r};Et.disabled=new Et(!1,1029,2305),Et.backCCW=new Et(!0,1029,2305);var Lt=function(t){this.gl=t,this.extVertexArrayObject=this.gl.getExtension("OES_vertex_array_object"),this.clearColor=new H(this),this.clearDepth=new G(this),this.clearStencil=new Y(this),this.colorMask=new W(this),this.depthMask=new X(this),this.stencilMask=new Z(this),this.stencilFunc=new J(this),this.stencilOp=new K(this),this.stencilTest=new Q(this),this.depthRange=new $(this),this.depthTest=new tt(this),this.depthFunc=new et(this),this.blend=new rt(this),this.blendFunc=new nt(this),this.blendColor=new at(this),this.blendEquation=new it(this),this.cullFace=new ot(this),this.cullFaceSide=new st(this),this.frontFace=new lt(this),this.program=new ct(this),this.activeTexture=new ut(this),this.viewport=new ht(this),this.bindFramebuffer=new ft(this),this.bindRenderbuffer=new pt(this),this.bindTexture=new dt(this),this.bindVertexBuffer=new gt(this),this.bindElementBuffer=new vt(this),this.bindVertexArrayOES=this.extVertexArrayObject&&new mt(this),this.pixelStoreUnpack=new yt(this),this.pixelStoreUnpackPremultiplyAlpha=new xt(this),this.pixelStoreUnpackFlipY=new bt(this),this.extTextureFilterAnisotropic=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic"),this.extTextureFilterAnisotropic&&(this.extTextureFilterAnisotropicMax=t.getParameter(this.extTextureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT)),this.extTextureHalfFloat=t.getExtension("OES_texture_half_float"),this.extTextureHalfFloat&&t.getExtension("OES_texture_half_float_linear")};Lt.prototype.setDefault=function(){this.unbindVAO(),this.clearColor.setDefault(),this.clearDepth.setDefault(),this.clearStencil.setDefault(),this.colorMask.setDefault(),this.depthMask.setDefault(),this.stencilMask.setDefault(),this.stencilFunc.setDefault(),this.stencilOp.setDefault(),this.stencilTest.setDefault(),this.depthRange.setDefault(),this.depthTest.setDefault(),this.depthFunc.setDefault(),this.blend.setDefault(),this.blendFunc.setDefault(),this.blendColor.setDefault(),this.blendEquation.setDefault(),this.cullFace.setDefault(),this.cullFaceSide.setDefault(),this.frontFace.setDefault(),this.program.setDefault(),this.activeTexture.setDefault(),this.bindFramebuffer.setDefault(),this.pixelStoreUnpack.setDefault(),this.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.pixelStoreUnpackFlipY.setDefault()},Lt.prototype.setDirty=function(){this.clearColor.dirty=!0,this.clearDepth.dirty=!0,this.clearStencil.dirty=!0,this.colorMask.dirty=!0,this.depthMask.dirty=!0,this.stencilMask.dirty=!0,this.stencilFunc.dirty=!0,this.stencilOp.dirty=!0,this.stencilTest.dirty=!0,this.depthRange.dirty=!0,this.depthTest.dirty=!0,this.depthFunc.dirty=!0,this.blend.dirty=!0,this.blendFunc.dirty=!0,this.blendColor.dirty=!0,this.blendEquation.dirty=!0,this.cullFace.dirty=!0,this.cullFaceSide.dirty=!0,this.frontFace.dirty=!0,this.program.dirty=!0,this.activeTexture.dirty=!0,this.viewport.dirty=!0,this.bindFramebuffer.dirty=!0,this.bindRenderbuffer.dirty=!0,this.bindTexture.dirty=!0,this.bindVertexBuffer.dirty=!0,this.bindElementBuffer.dirty=!0,this.extVertexArrayObject&&(this.bindVertexArrayOES.dirty=!0),this.pixelStoreUnpack.dirty=!0,this.pixelStoreUnpackPremultiplyAlpha.dirty=!0,this.pixelStoreUnpackFlipY.dirty=!0},Lt.prototype.createIndexBuffer=function(t,e){return new j(this,t,e)},Lt.prototype.createVertexBuffer=function(t,e,r){return new U(this,t,e,r)},Lt.prototype.createRenderbuffer=function(t,e,r){var n=this.gl,a=n.createRenderbuffer();return this.bindRenderbuffer.set(a),n.renderbufferStorage(n.RENDERBUFFER,t,e,r),this.bindRenderbuffer.set(null),a},Lt.prototype.createFramebuffer=function(t,e){return new Tt(this,t,e)},Lt.prototype.clear=function(t){var e=t.color,r=t.depth,n=this.gl,a=0;e&&(a|=n.COLOR_BUFFER_BIT,this.clearColor.set(e),this.colorMask.set([!0,!0,!0,!0])),void 0!==r&&(a|=n.DEPTH_BUFFER_BIT,this.depthRange.set([0,1]),this.clearDepth.set(r),this.depthMask.set(!0)),n.clear(a)},Lt.prototype.setCullFace=function(t){!1===t.enable?this.cullFace.set(!1):(this.cullFace.set(!0),this.cullFaceSide.set(t.mode),this.frontFace.set(t.frontFace))},Lt.prototype.setDepthMode=function(t){t.func!==this.gl.ALWAYS||t.mask?(this.depthTest.set(!0),this.depthFunc.set(t.func),this.depthMask.set(t.mask),this.depthRange.set(t.range)):this.depthTest.set(!1)},Lt.prototype.setStencilMode=function(t){t.test.func!==this.gl.ALWAYS||t.mask?(this.stencilTest.set(!0),this.stencilMask.set(t.mask),this.stencilOp.set([t.fail,t.depthFail,t.pass]),this.stencilFunc.set({func:t.test.func,ref:t.ref,mask:t.test.mask})):this.stencilTest.set(!1)},Lt.prototype.setColorMode=function(e){t.deepEqual(e.blendFunction,St.Replace)?this.blend.set(!1):(this.blend.set(!0),this.blendFunc.set(e.blendFunction),this.blendColor.set(e.blendColor)),this.colorMask.set(e.mask)},Lt.prototype.unbindVAO=function(){this.extVertexArrayObject&&this.bindVertexArrayOES.set(null)};var Ct=function(e){function r(r,n,a){var i=this;e.call(this),this.id=r,this.dispatcher=a,this.on("data",function(t){"source"===t.dataType&&"metadata"===t.sourceDataType&&(i._sourceLoaded=!0),i._sourceLoaded&&!i._paused&&"source"===t.dataType&&"content"===t.sourceDataType&&(i.reload(),i.transform&&i.update(i.transform))}),this.on("error",function(){i._sourceErrored=!0}),this._source=D(r,n,a,this),this._tiles={},this._cache=new N(0,this._unloadTile.bind(this)),this._timers={},this._cacheTimers={},this._maxTileCacheSize=null,this._coveredTiles={},this._state=new t.SourceFeatureState}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.onAdd=function(t){this.map=t,this._maxTileCacheSize=t?t._maxTileCacheSize:null,this._source&&this._source.onAdd&&this._source.onAdd(t)},r.prototype.onRemove=function(t){this._source&&this._source.onRemove&&this._source.onRemove(t)},r.prototype.loaded=function(){if(this._sourceErrored)return!0;if(!this._sourceLoaded)return!1;if(!this._source.loaded())return!1;for(var t in this._tiles){var e=this._tiles[t];if("loaded"!==e.state&&"errored"!==e.state)return!1}return!0},r.prototype.getSource=function(){return this._source},r.prototype.pause=function(){this._paused=!0},r.prototype.resume=function(){if(this._paused){var t=this._shouldReloadOnResume;this._paused=!1,this._shouldReloadOnResume=!1,t&&this.reload(),this.transform&&this.update(this.transform)}},r.prototype._loadTile=function(t,e){return this._source.loadTile(t,e)},r.prototype._unloadTile=function(t){if(this._source.unloadTile)return this._source.unloadTile(t,function(){})},r.prototype._abortTile=function(t){if(this._source.abortTile)return this._source.abortTile(t,function(){})},r.prototype.serialize=function(){return this._source.serialize()},r.prototype.prepare=function(t){for(var e in this._source.prepare&&this._source.prepare(),this._state.coalesceChanges(this._tiles,this.map?this.map.painter:null),this._tiles){var r=this._tiles[e];r.upload(t),r.prepare(this.map.style.imageManager)}},r.prototype.getIds=function(){return Object.keys(this._tiles).map(Number).sort(Pt)},r.prototype.getRenderableIds=function(e){var r=this,n=[];for(var a in this._tiles)this._isIdRenderable(+a,e)&&n.push(+a);return e?n.sort(function(e,n){var a=r._tiles[e].tileID,i=r._tiles[n].tileID,o=new t.Point(a.canonical.x,a.canonical.y)._rotate(r.transform.angle),s=new t.Point(i.canonical.x,i.canonical.y)._rotate(r.transform.angle);return a.overscaledZ-i.overscaledZ||s.y-o.y||s.x-o.x}):n.sort(Pt)},r.prototype.hasRenderableParent=function(t){var e=this.findLoadedParent(t,0);return!!e&&this._isIdRenderable(e.tileID.key)},r.prototype._isIdRenderable=function(t,e){return this._tiles[t]&&this._tiles[t].hasData()&&!this._coveredTiles[t]&&(e||!this._tiles[t].holdingForFade())},r.prototype.reload=function(){if(this._paused)this._shouldReloadOnResume=!0;else for(var t in this._cache.reset(),this._tiles)"errored"!==this._tiles[t].state&&this._reloadTile(t,"reloading")},r.prototype._reloadTile=function(t,e){var r=this._tiles[t];r&&("loading"!==r.state&&(r.state=e),this._loadTile(r,this._tileLoaded.bind(this,r,t,e)))},r.prototype._tileLoaded=function(e,r,n,a){if(a)return e.state="errored",void(404!==a.status?this._source.fire(new t.ErrorEvent(a,{tile:e})):this.update(this.transform));e.timeAdded=t.browser.now(),"expired"===n&&(e.refreshedUponExpiration=!0),this._setTileReloadTimer(r,e),"raster-dem"===this.getSource().type&&e.dem&&this._backfillDEM(e),this._state.initializeTileState(e,this.map?this.map.painter:null),this._source.fire(new t.Event("data",{dataType:"source",tile:e,coord:e.tileID}))},r.prototype._backfillDEM=function(t){for(var e=this.getRenderableIds(),r=0;r<e.length;r++){var n=e[r];if(t.neighboringTiles&&t.neighboringTiles[n]){var a=this.getTileByID(n);i(t,a),i(a,t)}}function i(t,e){t.needsHillshadePrepare=!0;var r=e.tileID.canonical.x-t.tileID.canonical.x,n=e.tileID.canonical.y-t.tileID.canonical.y,a=Math.pow(2,t.tileID.canonical.z),i=e.tileID.key;0===r&&0===n||Math.abs(n)>1||(Math.abs(r)>1&&(1===Math.abs(r+a)?r+=a:1===Math.abs(r-a)&&(r-=a)),e.dem&&t.dem&&(t.dem.backfillBorder(e.dem,r,n),t.neighboringTiles&&t.neighboringTiles[i]&&(t.neighboringTiles[i].backfilled=!0)))}},r.prototype.getTile=function(t){return this.getTileByID(t.key)},r.prototype.getTileByID=function(t){return this._tiles[t]},r.prototype.getZoom=function(t){return t.zoom+t.scaleZoom(t.tileSize/this._source.tileSize)},r.prototype._retainLoadedChildren=function(t,e,r,n){for(var a in this._tiles){var i=this._tiles[a];if(!(n[a]||!i.hasData()||i.tileID.overscaledZ<=e||i.tileID.overscaledZ>r)){for(var o=i.tileID;i&&i.tileID.overscaledZ>e+1;){var s=i.tileID.scaledTo(i.tileID.overscaledZ-1);(i=this._tiles[s.key])&&i.hasData()&&(o=s)}for(var l=o;l.overscaledZ>e;)if(t[(l=l.scaledTo(l.overscaledZ-1)).key]){n[o.key]=o;break}}}},r.prototype.findLoadedParent=function(t,e){for(var r=t.overscaledZ-1;r>=e;r--){var n=t.scaledTo(r);if(!n)return;var a=String(n.key),i=this._tiles[a];if(i&&i.hasData())return i;if(this._cache.has(n))return this._cache.get(n)}},r.prototype.updateCacheSize=function(t){var e=(Math.ceil(t.width/this._source.tileSize)+1)*(Math.ceil(t.height/this._source.tileSize)+1),r=Math.floor(5*e),n="number"==typeof this._maxTileCacheSize?Math.min(this._maxTileCacheSize,r):r;this._cache.setMaxSize(n)},r.prototype.handleWrapJump=function(t){var e=(t-(void 0===this._prevLng?t:this._prevLng))/360,r=Math.round(e);if(this._prevLng=t,r){var n={};for(var a in this._tiles){var i=this._tiles[a];i.tileID=i.tileID.unwrapTo(i.tileID.wrap+r),n[i.tileID.key]=i}for(var o in this._tiles=n,this._timers)clearTimeout(this._timers[o]),delete this._timers[o];for(var s in this._tiles){var l=this._tiles[s];this._setTileReloadTimer(s,l)}}},r.prototype.update=function(e){var n=this;if(this.transform=e,this._sourceLoaded&&!this._paused){var a;this.updateCacheSize(e),this.handleWrapJump(this.transform.center.lng),this._coveredTiles={},this.used?this._source.tileID?a=e.getVisibleUnwrappedCoordinates(this._source.tileID).map(function(e){return new t.OverscaledTileID(e.canonical.z,e.wrap,e.canonical.z,e.canonical.x,e.canonical.y)}):(a=e.coveringTiles({tileSize:this._source.tileSize,minzoom:this._source.minzoom,maxzoom:this._source.maxzoom,roundZoom:this._source.roundZoom,reparseOverscaled:this._source.reparseOverscaled}),this._source.hasTile&&(a=a.filter(function(t){return n._source.hasTile(t)}))):a=[];var i=(this._source.roundZoom?Math.round:Math.floor)(this.getZoom(e)),o=Math.max(i-r.maxOverzooming,this._source.minzoom),s=Math.max(i+r.maxUnderzooming,this._source.minzoom),l=this._updateRetainedTiles(a,i);if(Ot(this._source.type)){for(var c={},u={},h=0,f=Object.keys(l);h<f.length;h+=1){var p=f[h],d=l[p],g=this._tiles[p];if(g&&!(g.fadeEndTime&&g.fadeEndTime<=t.browser.now())){var v=this.findLoadedParent(d,o);v&&(this._addTile(v.tileID),c[v.tileID.key]=v.tileID),u[p]=d}}for(var m in this._retainLoadedChildren(u,i,s,l),c)l[m]||(this._coveredTiles[m]=!0,l[m]=c[m])}for(var y in l)this._tiles[y].clearFadeHold();for(var x=0,b=t.keysDifference(this._tiles,l);x<b.length;x+=1){var _=b[x],w=this._tiles[_];w.hasSymbolBuckets&&!w.holdingForFade()?w.setHoldDuration(this.map._fadeDuration):w.hasSymbolBuckets&&!w.symbolFadeFinished()||this._removeTile(_)}}},r.prototype.releaseSymbolFadeTiles=function(){for(var t in this._tiles)this._tiles[t].holdingForFade()&&this._removeTile(t)},r.prototype._updateRetainedTiles=function(t,e){for(var n={},a={},i=Math.max(e-r.maxOverzooming,this._source.minzoom),o=Math.max(e+r.maxUnderzooming,this._source.minzoom),s={},l=0,c=t;l<c.length;l+=1){var u=c[l],h=this._addTile(u);n[u.key]=u,h.hasData()||e<this._source.maxzoom&&(s[u.key]=u)}this._retainLoadedChildren(s,e,o,n);for(var f=0,p=t;f<p.length;f+=1){var d=p[f],g=this._tiles[d.key];if(!g.hasData()){if(e+1>this._source.maxzoom){var v=d.children(this._source.maxzoom)[0],m=this.getTile(v);if(m&&m.hasData()){n[v.key]=v;continue}}else{var y=d.children(this._source.maxzoom);if(n[y[0].key]&&n[y[1].key]&&n[y[2].key]&&n[y[3].key])continue}for(var x=g.wasRequested(),b=d.overscaledZ-1;b>=i;--b){var _=d.scaledTo(b);if(a[_.key])break;if(a[_.key]=!0,!(g=this.getTile(_))&&x&&(g=this._addTile(_)),g&&(n[_.key]=_,x=g.wasRequested(),g.hasData()))break}}}return n},r.prototype._addTile=function(e){var r=this._tiles[e.key];if(r)return r;(r=this._cache.getAndRemove(e))&&(this._setTileReloadTimer(e.key,r),r.tileID=e,this._state.initializeTileState(r,this.map?this.map.painter:null),this._cacheTimers[e.key]&&(clearTimeout(this._cacheTimers[e.key]),delete this._cacheTimers[e.key],this._setTileReloadTimer(e.key,r)));var n=Boolean(r);return n||(r=new t.Tile(e,this._source.tileSize*e.overscaleFactor()),this._loadTile(r,this._tileLoaded.bind(this,r,e.key,r.state))),r?(r.uses++,this._tiles[e.key]=r,n||this._source.fire(new t.Event("dataloading",{tile:r,coord:r.tileID,dataType:"source"})),r):null},r.prototype._setTileReloadTimer=function(t,e){var r=this;t in this._timers&&(clearTimeout(this._timers[t]),delete this._timers[t]);var n=e.getExpiryTimeout();n&&(this._timers[t]=setTimeout(function(){r._reloadTile(t,"expired"),delete r._timers[t]},n))},r.prototype._removeTile=function(t){var e=this._tiles[t];e&&(e.uses--,delete this._tiles[t],this._timers[t]&&(clearTimeout(this._timers[t]),delete this._timers[t]),e.uses>0||(e.hasData()&&"reloading"!==e.state?this._cache.add(e.tileID,e,e.getExpiryTimeout()):(e.aborted=!0,this._abortTile(e),this._unloadTile(e))))},r.prototype.clearTiles=function(){for(var t in this._shouldReloadOnResume=!1,this._paused=!1,this._tiles)this._removeTile(t);this._cache.reset()},r.prototype.tilesIn=function(e,r,n){var a=this,i=[],o=this.transform;if(!o)return i;for(var s=n?o.getCameraQueryGeometry(e):e,l=e.map(function(t){return o.pointCoordinate(t)}),c=s.map(function(t){return o.pointCoordinate(t)}),u=this.getIds(),h=1/0,f=1/0,p=-1/0,d=-1/0,g=0,v=c;g<v.length;g+=1){var m=v[g];h=Math.min(h,m.x),f=Math.min(f,m.y),p=Math.max(p,m.x),d=Math.max(d,m.y)}for(var y=function(e){var n=a._tiles[u[e]];if(!n.holdingForFade()){var s=n.tileID,g=Math.pow(2,o.zoom-n.tileID.overscaledZ),v=r*n.queryPadding*t.EXTENT/n.tileSize/g,m=[s.getTilePoint(new t.MercatorCoordinate(h,f)),s.getTilePoint(new t.MercatorCoordinate(p,d))];if(m[0].x-v<t.EXTENT&&m[0].y-v<t.EXTENT&&m[1].x+v>=0&&m[1].y+v>=0){var y=l.map(function(t){return s.getTilePoint(t)}),x=c.map(function(t){return s.getTilePoint(t)});i.push({tile:n,tileID:s,queryGeometry:y,cameraQueryGeometry:x,scale:g})}}},x=0;x<u.length;x++)y(x);return i},r.prototype.getVisibleCoordinates=function(t){for(var e=this,r=this.getRenderableIds(t).map(function(t){return e._tiles[t].tileID}),n=0,a=r;n<a.length;n+=1){var i=a[n];i.posMatrix=this.transform.calculatePosMatrix(i.toUnwrapped())}return r},r.prototype.hasTransition=function(){if(this._source.hasTransition())return!0;if(Ot(this._source.type))for(var e in this._tiles){var r=this._tiles[e];if(void 0!==r.fadeEndTime&&r.fadeEndTime>=t.browser.now())return!0}return!1},r.prototype.setFeatureState=function(t,e,r){t=t||"_geojsonTileLayer",this._state.updateState(t,e,r)},r.prototype.removeFeatureState=function(t,e,r){t=t||"_geojsonTileLayer",this._state.removeFeatureState(t,e,r)},r.prototype.getFeatureState=function(t,e){return t=t||"_geojsonTileLayer",this._state.getState(t,e)},r}(t.Evented);function Pt(t,e){return t%32-e%32||e-t}function Ot(t){return"raster"===t||"image"===t||"video"===t}function zt(){return new t.window.Worker($n.workerUrl)}Ct.maxOverzooming=10,Ct.maxUnderzooming=3;var It=function(){this.active={}};It.prototype.acquire=function(t){if(!this.workers)for(this.workers=[];this.workers.length<It.workerCount;)this.workers.push(new zt);return this.active[t]=!0,this.workers.slice()},It.prototype.release=function(t){delete this.active[t],0===Object.keys(this.active).length&&(this.workers.forEach(function(t){t.terminate()}),this.workers=null)};var Dt,Rt=Math.floor(t.browser.hardwareConcurrency/2);function Ft(e,r){var n={};for(var a in e)"ref"!==a&&(n[a]=e[a]);return t.refProperties.forEach(function(t){t in r&&(n[t]=r[t])}),n}function Bt(t){t=t.slice();for(var e=Object.create(null),r=0;r<t.length;r++)e[t[r].id]=t[r];for(var n=0;n<t.length;n++)"ref"in t[n]&&(t[n]=Ft(t[n],e[t[n].ref]));return t}It.workerCount=Math.max(Math.min(Rt,6),1);var Nt={setStyle:"setStyle",addLayer:"addLayer",removeLayer:"removeLayer",setPaintProperty:"setPaintProperty",setLayoutProperty:"setLayoutProperty",setFilter:"setFilter",addSource:"addSource",removeSource:"removeSource",setGeoJSONSourceData:"setGeoJSONSourceData",setLayerZoomRange:"setLayerZoomRange",setLayerProperty:"setLayerProperty",setCenter:"setCenter",setZoom:"setZoom",setBearing:"setBearing",setPitch:"setPitch",setSprite:"setSprite",setGlyphs:"setGlyphs",setTransition:"setTransition",setLight:"setLight"};function jt(t,e,r){r.push({command:Nt.addSource,args:[t,e[t]]})}function Vt(t,e,r){e.push({command:Nt.removeSource,args:[t]}),r[t]=!0}function Ut(t,e,r,n){Vt(t,r,n),jt(t,e,r)}function qt(e,r,n){var a;for(a in e[n])if(e[n].hasOwnProperty(a)&&"data"!==a&&!t.deepEqual(e[n][a],r[n][a]))return!1;for(a in r[n])if(r[n].hasOwnProperty(a)&&"data"!==a&&!t.deepEqual(e[n][a],r[n][a]))return!1;return!0}function Ht(e,r,n,a,i,o){var s;for(s in r=r||{},e=e||{})e.hasOwnProperty(s)&&(t.deepEqual(e[s],r[s])||n.push({command:o,args:[a,s,r[s],i]}));for(s in r)r.hasOwnProperty(s)&&!e.hasOwnProperty(s)&&(t.deepEqual(e[s],r[s])||n.push({command:o,args:[a,s,r[s],i]}))}function Gt(t){return t.id}function Yt(t,e){return t[e.id]=e,t}var Wt=function(t,e,r){var n=this.boxCells=[],a=this.circleCells=[];this.xCellCount=Math.ceil(t/r),this.yCellCount=Math.ceil(e/r);for(var i=0;i<this.xCellCount*this.yCellCount;i++)n.push([]),a.push([]);this.circleKeys=[],this.boxKeys=[],this.bboxes=[],this.circles=[],this.width=t,this.height=e,this.xScale=this.xCellCount/t,this.yScale=this.yCellCount/e,this.boxUid=0,this.circleUid=0};function Xt(e,r,n,a,i){var o=t.create();return r?(t.scale(o,o,[1/i,1/i,1]),n||t.rotateZ(o,o,a.angle)):t.multiply(o,a.labelPlaneMatrix,e),o}function Zt(e,r,n,a,i){if(r){var o=t.clone(e);return t.scale(o,o,[i,i,1]),n||t.rotateZ(o,o,-a.angle),o}return a.glCoordMatrix}function Jt(e,r){var n=[e.x,e.y,0,1];oe(n,n,r);var a=n[3];return{point:new t.Point(n[0]/a,n[1]/a),signedDistanceFromCamera:a}}function Kt(t,e){var r=t[0]/t[3],n=t[1]/t[3];return r>=-e[0]&&r<=e[0]&&n>=-e[1]&&n<=e[1]}function Qt(e,r,n,a,i,o,s,l){var c=a?e.textSizeData:e.iconSizeData,u=t.evaluateSizeForZoom(c,n.transform.zoom),h=[256/n.width*2+1,256/n.height*2+1],f=a?e.text.dynamicLayoutVertexArray:e.icon.dynamicLayoutVertexArray;f.clear();for(var p=e.lineVertexArray,d=a?e.text.placedSymbolArray:e.icon.placedSymbolArray,g=n.transform.width/n.transform.height,v=!1,m=0;m<d.length;m++){var y=d.get(m);if(y.hidden||y.writingMode===t.WritingMode.vertical&&!v)ie(y.numGlyphs,f);else{v=!1;var x=[y.anchorX,y.anchorY,0,1];if(t.transformMat4(x,x,r),Kt(x,h)){var b=.5+x[3]/n.transform.cameraToCenterDistance*.5,_=t.evaluateSizeForFeature(c,u,y),w=s?_*b:_/b,k=new t.Point(y.anchorX,y.anchorY),T=Jt(k,i).point,M={},A=ee(y,w,!1,l,r,i,o,e.glyphOffsetArray,p,f,T,k,M,g);v=A.useVertical,(A.notEnoughRoom||v||A.needsFlipping&&ee(y,w,!0,l,r,i,o,e.glyphOffsetArray,p,f,T,k,M,g).notEnoughRoom)&&ie(y.numGlyphs,f)}else ie(y.numGlyphs,f)}}a?e.text.dynamicLayoutVertexBuffer.updateData(f):e.icon.dynamicLayoutVertexBuffer.updateData(f)}function $t(t,e,r,n,a,i,o,s,l,c,u,h){var f=s.glyphStartIndex+s.numGlyphs,p=s.lineStartIndex,d=s.lineStartIndex+s.lineLength,g=e.getoffsetX(s.glyphStartIndex),v=e.getoffsetX(f-1),m=ne(t*g,r,n,a,i,o,s.segment,p,d,l,c,u,h);if(!m)return null;var y=ne(t*v,r,n,a,i,o,s.segment,p,d,l,c,u,h);return y?{first:m,last:y}:null}function te(e,r,n,a){return e===t.WritingMode.horizontal&&Math.abs(n.y-r.y)>Math.abs(n.x-r.x)*a?{useVertical:!0}:(e===t.WritingMode.vertical?r.y<n.y:r.x>n.x)?{needsFlipping:!0}:null}function ee(e,r,n,a,i,o,s,l,c,u,h,f,p,d){var g,v=r/24,m=e.lineOffsetX*v,y=e.lineOffsetY*v;if(e.numGlyphs>1){var x=e.glyphStartIndex+e.numGlyphs,b=e.lineStartIndex,_=e.lineStartIndex+e.lineLength,w=$t(v,l,m,y,n,h,f,e,c,o,p,!1);if(!w)return{notEnoughRoom:!0};var k=Jt(w.first.point,s).point,T=Jt(w.last.point,s).point;if(a&&!n){var M=te(e.writingMode,k,T,d);if(M)return M}g=[w.first];for(var A=e.glyphStartIndex+1;A<x-1;A++)g.push(ne(v*l.getoffsetX(A),m,y,n,h,f,e.segment,b,_,c,o,p,!1));g.push(w.last)}else{if(a&&!n){var S=Jt(f,i).point,E=e.lineStartIndex+e.segment+1,L=new t.Point(c.getx(E),c.gety(E)),C=Jt(L,i),P=C.signedDistanceFromCamera>0?C.point:re(f,L,S,1,i),O=te(e.writingMode,S,P,d);if(O)return O}var z=ne(v*l.getoffsetX(e.glyphStartIndex),m,y,n,h,f,e.segment,e.lineStartIndex,e.lineStartIndex+e.lineLength,c,o,p,!1);if(!z)return{notEnoughRoom:!0};g=[z]}for(var I=0,D=g;I<D.length;I+=1){var R=D[I];t.addDynamicAttributes(u,R.point,R.angle)}return{}}function re(t,e,r,n,a){var i=Jt(t.add(t.sub(e)._unit()),a).point,o=r.sub(i);return r.add(o._mult(n/o.mag()))}function ne(e,r,n,a,i,o,s,l,c,u,h,f,p){var d=a?e-r:e+r,g=d>0?1:-1,v=0;a&&(g*=-1,v=Math.PI),g<0&&(v+=Math.PI);for(var m=g>0?l+s:l+s+1,y=m,x=i,b=i,_=0,w=0,k=Math.abs(d);_+w<=k;){if((m+=g)<l||m>=c)return null;if(b=x,void 0===(x=f[m])){var T=new t.Point(u.getx(m),u.gety(m)),M=Jt(T,h);if(M.signedDistanceFromCamera>0)x=f[m]=M.point;else{var A=m-g;x=re(0===_?o:new t.Point(u.getx(A),u.gety(A)),T,b,k-_+1,h)}}_+=w,w=b.dist(x)}var S=(k-_)/w,E=x.sub(b),L=E.mult(S)._add(b);return L._add(E._unit()._perp()._mult(n*g)),{point:L,angle:v+Math.atan2(x.y-b.y,x.x-b.x),tileDistance:p?{prevTileDistance:m-g===y?0:u.gettileUnitDistanceFromAnchor(m-g),lastSegmentViewportDistance:k-_}:null}}Wt.prototype.keysLength=function(){return this.boxKeys.length+this.circleKeys.length},Wt.prototype.insert=function(t,e,r,n,a){this._forEachCell(e,r,n,a,this._insertBoxCell,this.boxUid++),this.boxKeys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(n),this.bboxes.push(a)},Wt.prototype.insertCircle=function(t,e,r,n){this._forEachCell(e-n,r-n,e+n,r+n,this._insertCircleCell,this.circleUid++),this.circleKeys.push(t),this.circles.push(e),this.circles.push(r),this.circles.push(n)},Wt.prototype._insertBoxCell=function(t,e,r,n,a,i){this.boxCells[a].push(i)},Wt.prototype._insertCircleCell=function(t,e,r,n,a,i){this.circleCells[a].push(i)},Wt.prototype._query=function(t,e,r,n,a,i){if(r<0||t>this.width||n<0||e>this.height)return!a&&[];var o=[];if(t<=0&&e<=0&&this.width<=r&&this.height<=n){if(a)return!0;for(var s=0;s<this.boxKeys.length;s++)o.push({key:this.boxKeys[s],x1:this.bboxes[4*s],y1:this.bboxes[4*s+1],x2:this.bboxes[4*s+2],y2:this.bboxes[4*s+3]});for(var l=0;l<this.circleKeys.length;l++){var c=this.circles[3*l],u=this.circles[3*l+1],h=this.circles[3*l+2];o.push({key:this.circleKeys[l],x1:c-h,y1:u-h,x2:c+h,y2:u+h})}return i?o.filter(i):o}var f={hitTest:a,seenUids:{box:{},circle:{}}};return this._forEachCell(t,e,r,n,this._queryCell,o,f,i),a?o.length>0:o},Wt.prototype._queryCircle=function(t,e,r,n,a){var i=t-r,o=t+r,s=e-r,l=e+r;if(o<0||i>this.width||l<0||s>this.height)return!n&&[];var c=[],u={hitTest:n,circle:{x:t,y:e,radius:r},seenUids:{box:{},circle:{}}};return this._forEachCell(i,s,o,l,this._queryCellCircle,c,u,a),n?c.length>0:c},Wt.prototype.query=function(t,e,r,n,a){return this._query(t,e,r,n,!1,a)},Wt.prototype.hitTest=function(t,e,r,n,a){return this._query(t,e,r,n,!0,a)},Wt.prototype.hitTestCircle=function(t,e,r,n){return this._queryCircle(t,e,r,!0,n)},Wt.prototype._queryCell=function(t,e,r,n,a,i,o,s){var l=o.seenUids,c=this.boxCells[a];if(null!==c)for(var u=this.bboxes,h=0,f=c;h<f.length;h+=1){var p=f[h];if(!l.box[p]){l.box[p]=!0;var d=4*p;if(t<=u[d+2]&&e<=u[d+3]&&r>=u[d+0]&&n>=u[d+1]&&(!s||s(this.boxKeys[p]))){if(o.hitTest)return i.push(!0),!0;i.push({key:this.boxKeys[p],x1:u[d],y1:u[d+1],x2:u[d+2],y2:u[d+3]})}}}var g=this.circleCells[a];if(null!==g)for(var v=this.circles,m=0,y=g;m<y.length;m+=1){var x=y[m];if(!l.circle[x]){l.circle[x]=!0;var b=3*x;if(this._circleAndRectCollide(v[b],v[b+1],v[b+2],t,e,r,n)&&(!s||s(this.circleKeys[x]))){if(o.hitTest)return i.push(!0),!0;var _=v[b],w=v[b+1],k=v[b+2];i.push({key:this.circleKeys[x],x1:_-k,y1:w-k,x2:_+k,y2:w+k})}}}},Wt.prototype._queryCellCircle=function(t,e,r,n,a,i,o,s){var l=o.circle,c=o.seenUids,u=this.boxCells[a];if(null!==u)for(var h=this.bboxes,f=0,p=u;f<p.length;f+=1){var d=p[f];if(!c.box[d]){c.box[d]=!0;var g=4*d;if(this._circleAndRectCollide(l.x,l.y,l.radius,h[g+0],h[g+1],h[g+2],h[g+3])&&(!s||s(this.boxKeys[d])))return i.push(!0),!0}}var v=this.circleCells[a];if(null!==v)for(var m=this.circles,y=0,x=v;y<x.length;y+=1){var b=x[y];if(!c.circle[b]){c.circle[b]=!0;var _=3*b;if(this._circlesCollide(m[_],m[_+1],m[_+2],l.x,l.y,l.radius)&&(!s||s(this.circleKeys[b])))return i.push(!0),!0}}},Wt.prototype._forEachCell=function(t,e,r,n,a,i,o,s){for(var l=this._convertToXCellCoord(t),c=this._convertToYCellCoord(e),u=this._convertToXCellCoord(r),h=this._convertToYCellCoord(n),f=l;f<=u;f++)for(var p=c;p<=h;p++){var d=this.xCellCount*p+f;if(a.call(this,t,e,r,n,d,i,o,s))return}},Wt.prototype._convertToXCellCoord=function(t){return Math.max(0,Math.min(this.xCellCount-1,Math.floor(t*this.xScale)))},Wt.prototype._convertToYCellCoord=function(t){return Math.max(0,Math.min(this.yCellCount-1,Math.floor(t*this.yScale)))},Wt.prototype._circlesCollide=function(t,e,r,n,a,i){var o=n-t,s=a-e,l=r+i;return l*l>o*o+s*s},Wt.prototype._circleAndRectCollide=function(t,e,r,n,a,i,o){var s=(i-n)/2,l=Math.abs(t-(n+s));if(l>s+r)return!1;var c=(o-a)/2,u=Math.abs(e-(a+c));if(u>c+r)return!1;if(l<=s||u<=c)return!0;var h=l-s,f=u-c;return h*h+f*f<=r*r};var ae=new Float32Array([-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0]);function ie(t,e){for(var r=0;r<t;r++){var n=e.length;e.resize(n+4),e.float32.set(ae,3*n)}}function oe(t,e,r){var n=e[0],a=e[1];return t[0]=r[0]*n+r[4]*a+r[12],t[1]=r[1]*n+r[5]*a+r[13],t[3]=r[3]*n+r[7]*a+r[15],t}var se=function(t,e,r){void 0===e&&(e=new Wt(t.width+200,t.height+200,25)),void 0===r&&(r=new Wt(t.width+200,t.height+200,25)),this.transform=t,this.grid=e,this.ignoredGrid=r,this.pitchfactor=Math.cos(t._pitch)*t.cameraToCenterDistance,this.screenRightBoundary=t.width+100,this.screenBottomBoundary=t.height+100,this.gridRightBoundary=t.width+200,this.gridBottomBoundary=t.height+200};function le(t,e,r){t[e+4]=r?1:0}function ce(e,r,n){return r*(t.EXTENT/(e.tileSize*Math.pow(2,n-e.tileID.overscaledZ)))}se.prototype.placeCollisionBox=function(t,e,r,n,a){var i=this.projectAndGetPerspectiveRatio(n,t.anchorPointX,t.anchorPointY),o=r*i.perspectiveRatio,s=t.x1*o+i.point.x,l=t.y1*o+i.point.y,c=t.x2*o+i.point.x,u=t.y2*o+i.point.y;return!this.isInsideGrid(s,l,c,u)||!e&&this.grid.hitTest(s,l,c,u,a)?{box:[],offscreen:!1}:{box:[s,l,c,u],offscreen:this.isOffscreen(s,l,c,u)}},se.prototype.approximateTileDistance=function(t,e,r,n,a){var i=a?1:n/this.pitchfactor,o=t.lastSegmentViewportDistance*r;return t.prevTileDistance+o+(i-1)*o*Math.abs(Math.sin(e))},se.prototype.placeCollisionCircles=function(e,r,n,a,i,o,s,l,c,u,h,f,p){var d=[],g=this.projectAnchor(c,i.anchorX,i.anchorY),v=l/24,m=i.lineOffsetX*l,y=i.lineOffsetY*l,x=new t.Point(i.anchorX,i.anchorY),b=$t(v,s,m,y,!1,Jt(x,u).point,x,i,o,u,{},!0),_=!1,w=!1,k=!0,T=g.perspectiveRatio*a,M=1/(a*n),A=0,S=0;b&&(A=this.approximateTileDistance(b.first.tileDistance,b.first.angle,M,g.cameraDistance,f),S=this.approximateTileDistance(b.last.tileDistance,b.last.angle,M,g.cameraDistance,f));for(var E=0;E<e.length;E+=5){var L=e[E],C=e[E+1],P=e[E+2],O=e[E+3];if(!b||O<-A||O>S)le(e,E,!1);else{var z=this.projectPoint(c,L,C),I=P*T;if(d.length>0){var D=z.x-d[d.length-4],R=z.y-d[d.length-3];if(I*I*2>D*D+R*R&&E+8<e.length){var F=e[E+8];if(F>-A&&F<S){le(e,E,!1);continue}}}var B=E/5;d.push(z.x,z.y,I,B),le(e,E,!0);var N=z.x-I,j=z.y-I,V=z.x+I,U=z.y+I;if(k=k&&this.isOffscreen(N,j,V,U),w=w||this.isInsideGrid(N,j,V,U),!r&&this.grid.hitTestCircle(z.x,z.y,I,p)){if(!h)return{circles:[],offscreen:!1};_=!0}}}return{circles:_||!w?[]:d,offscreen:k}},se.prototype.queryRenderedSymbols=function(e){if(0===e.length||0===this.grid.keysLength()&&0===this.ignoredGrid.keysLength())return{};for(var r=[],n=1/0,a=1/0,i=-1/0,o=-1/0,s=0,l=e;s<l.length;s+=1){var c=l[s],u=new t.Point(c.x+100,c.y+100);n=Math.min(n,u.x),a=Math.min(a,u.y),i=Math.max(i,u.x),o=Math.max(o,u.y),r.push(u)}for(var h={},f={},p=0,d=this.grid.query(n,a,i,o).concat(this.ignoredGrid.query(n,a,i,o));p<d.length;p+=1){var g=d[p],v=g.key;if(void 0===h[v.bucketInstanceId]&&(h[v.bucketInstanceId]={}),!h[v.bucketInstanceId][v.featureIndex]){var m=[new t.Point(g.x1,g.y1),new t.Point(g.x2,g.y1),new t.Point(g.x2,g.y2),new t.Point(g.x1,g.y2)];t.polygonIntersectsPolygon(r,m)&&(h[v.bucketInstanceId][v.featureIndex]=!0,void 0===f[v.bucketInstanceId]&&(f[v.bucketInstanceId]=[]),f[v.bucketInstanceId].push(v.featureIndex))}}return f},se.prototype.insertCollisionBox=function(t,e,r,n,a){var i={bucketInstanceId:r,featureIndex:n,collisionGroupID:a};(e?this.ignoredGrid:this.grid).insert(i,t[0],t[1],t[2],t[3])},se.prototype.insertCollisionCircles=function(t,e,r,n,a){for(var i=e?this.ignoredGrid:this.grid,o={bucketInstanceId:r,featureIndex:n,collisionGroupID:a},s=0;s<t.length;s+=4)i.insertCircle(o,t[s],t[s+1],t[s+2])},se.prototype.projectAnchor=function(t,e,r){var n=[e,r,0,1];return oe(n,n,t),{perspectiveRatio:.5+this.transform.cameraToCenterDistance/n[3]*.5,cameraDistance:n[3]}},se.prototype.projectPoint=function(e,r,n){var a=[r,n,0,1];return oe(a,a,e),new t.Point((a[0]/a[3]+1)/2*this.transform.width+100,(-a[1]/a[3]+1)/2*this.transform.height+100)},se.prototype.projectAndGetPerspectiveRatio=function(e,r,n){var a=[r,n,0,1];return oe(a,a,e),{point:new t.Point((a[0]/a[3]+1)/2*this.transform.width+100,(-a[1]/a[3]+1)/2*this.transform.height+100),perspectiveRatio:.5+this.transform.cameraToCenterDistance/a[3]*.5}},se.prototype.isOffscreen=function(t,e,r,n){return r<100||t>=this.screenRightBoundary||n<100||e>this.screenBottomBoundary},se.prototype.isInsideGrid=function(t,e,r,n){return r>=0&&t<this.gridRightBoundary&&n>=0&&e<this.gridBottomBoundary};var ue=function(t,e,r,n){this.opacity=t?Math.max(0,Math.min(1,t.opacity+(t.placed?e:-e))):n&&r?1:0,this.placed=r};ue.prototype.isHidden=function(){return 0===this.opacity&&!this.placed};var he=function(t,e,r,n,a){this.text=new ue(t?t.text:null,e,r,a),this.icon=new ue(t?t.icon:null,e,n,a)};he.prototype.isHidden=function(){return this.text.isHidden()&&this.icon.isHidden()};var fe=function(t,e,r){this.text=t,this.icon=e,this.skipFade=r},pe=function(t,e,r,n,a){this.bucketInstanceId=t,this.featureIndex=e,this.sourceLayerIndex=r,this.bucketIndex=n,this.tileID=a},de=function(t){this.crossSourceCollisions=t,this.maxGroupID=0,this.collisionGroups={}};function ge(e,r,n,a,i){var o=t.getAnchorAlignment(e),s=-(o.horizontalAlign-.5)*r,l=-(o.verticalAlign-.5)*n,c=t.evaluateRadialOffset(e,a);return new t.Point(s+c[0]*i,l+c[1]*i)}de.prototype.get=function(t){if(this.crossSourceCollisions)return{ID:0,predicate:null};if(!this.collisionGroups[t]){var e=++this.maxGroupID;this.collisionGroups[t]={ID:e,predicate:function(t){return t.collisionGroupID===e}}}return this.collisionGroups[t]};var ve=function(t,e,r,n){this.transform=t.clone(),this.collisionIndex=new se(this.transform),this.placements={},this.opacities={},this.variableOffsets={},this.stale=!1,this.commitTime=0,this.fadeDuration=e,this.retainedQueryData={},this.collisionGroups=new de(r),this.prevPlacement=n,n&&(n.prevPlacement=void 0),this.placedOrientations={}};function me(t,e,r,n,a){t.emplaceBack(e?1:0,r?1:0,n||0,a||0),t.emplaceBack(e?1:0,r?1:0,n||0,a||0),t.emplaceBack(e?1:0,r?1:0,n||0,a||0),t.emplaceBack(e?1:0,r?1:0,n||0,a||0)}ve.prototype.placeLayerTile=function(e,r,n,a){var i=r.getBucket(e),o=r.latestFeatureIndex;if(i&&o&&e.id===i.layerIds[0]){var s=r.collisionBoxArray,l=i.layers[0].layout,c=Math.pow(2,this.transform.zoom-r.tileID.overscaledZ),u=r.tileSize/t.EXTENT,h=this.transform.calculatePosMatrix(r.tileID.toUnwrapped()),f=Xt(h,"map"===l.get("text-pitch-alignment"),"map"===l.get("text-rotation-alignment"),this.transform,ce(r,1,this.transform.zoom)),p=Xt(h,"map"===l.get("icon-pitch-alignment"),"map"===l.get("icon-rotation-alignment"),this.transform,ce(r,1,this.transform.zoom));this.retainedQueryData[i.bucketInstanceId]=new pe(i.bucketInstanceId,o,i.sourceLayerIndex,i.index,r.tileID),this.placeLayerBucket(i,h,f,p,c,u,n,r.holdingForFade(),a,s)}},ve.prototype.attemptAnchorPlacement=function(e,r,n,a,i,o,s,l,c,u,h,f,p,d,g){var v,m=ge(e,n,a,i,o),y=this.collisionIndex.placeCollisionBox(function(e,r,n,a,i,o){var s=e.x1,l=e.x2,c=e.y1,u=e.y2,h=e.anchorPointX,f=e.anchorPointY,p=new t.Point(r,n);return a&&p._rotate(i?o:-o),{x1:s+p.x,y1:c+p.y,x2:l+p.x,y2:u+p.y,anchorPointX:h,anchorPointY:f}}(r,m.x,m.y,s,l,this.transform.angle),f,c,u,h.predicate);if(y.box.length>0)return this.prevPlacement&&this.prevPlacement.variableOffsets[p.crossTileID]&&this.prevPlacement.placements[p.crossTileID]&&this.prevPlacement.placements[p.crossTileID].text&&(v=this.prevPlacement.variableOffsets[p.crossTileID].anchor),this.variableOffsets[p.crossTileID]={radialOffset:i,width:n,height:a,anchor:e,textBoxScale:o,prevAnchor:v},this.markUsedJustification(d,e,p,g),d.allowVerticalPlacement&&(this.markUsedOrientation(d,g,p),this.placedOrientations[p.crossTileID]=g),y},ve.prototype.placeLayerBucket=function(e,r,n,a,i,o,s,l,c,u){var h=this,f=e.layers[0].layout,p=t.evaluateSizeForZoom(e.textSizeData,this.transform.zoom),d=f.get("text-optional"),g=f.get("icon-optional"),v=f.get("text-allow-overlap"),m=f.get("icon-allow-overlap"),y=v&&(m||!e.hasIconData()||g),x=m&&(v||!e.hasTextData()||d),b=this.collisionGroups.get(e.sourceID),_="map"===f.get("text-rotation-alignment"),w="map"===f.get("text-pitch-alignment"),k="viewport-y"===f.get("symbol-z-order");!e.collisionArrays&&u&&e.deserializeCollisionBoxes(u);var T=function(a,u){if(!c[a.crossTileID])if(l)h.placements[a.crossTileID]=new fe(!1,!1,!1);else{var m,k=!1,T=!1,M=!0,A={box:null,offscreen:null},S={box:null,offscreen:null},E=null,L=null,C=0,P=0,O=0;u.textFeatureIndex&&(C=u.textFeatureIndex),u.verticalTextFeatureIndex&&(P=u.verticalTextFeatureIndex);var z=u.textBox;if(z){var I=function(r){var n=t.WritingMode.horizontal;if(e.allowVerticalPlacement&&!r&&h.prevPlacement){var i=h.prevPlacement.placedOrientations[a.crossTileID];i&&(h.placedOrientations[a.crossTileID]=i,n=i,h.markUsedOrientation(e,n,a))}return n},D=function(r,n){if(e.allowVerticalPlacement&&a.numVerticalGlyphVertices>0&&u.verticalTextBox)for(var i=0,o=e.writingModes;i<o.length&&(o[i]===t.WritingMode.vertical?(A=n(),S=A):A=r(),!(A&&A.box&&A.box.length));i+=1);else A=r()};if(f.get("text-variable-anchor")){var R=f.get("text-variable-anchor");if(h.prevPlacement&&h.prevPlacement.variableOffsets[a.crossTileID]){var F=h.prevPlacement.variableOffsets[a.crossTileID];R.indexOf(F.anchor)>0&&(R=R.filter(function(t){return t!==F.anchor})).unshift(F.anchor)}var B=function(t,n){for(var i=t.x2-t.x1,s=t.y2-t.y1,l=a.textBoxScale,c={box:[],offscreen:!1},u=v?2*R.length:R.length,f=0;f<u;++f){var p=R[f%R.length],d=f>=R.length;if((c=h.attemptAnchorPlacement(p,t,i,s,a.radialTextOffset,l,_,w,o,r,b,d,a,e,n))&&c.box&&c.box.length){k=!0;break}}return c};D(function(){return B(z,t.WritingMode.horizontal)},function(){var r=u.verticalTextBox,n=A&&A.box&&A.box.length;return e.allowVerticalPlacement&&!n&&a.numVerticalGlyphVertices>0&&r?B(r,t.WritingMode.vertical):{box:null,offscreen:null}}),A&&(k=A.box,M=A.offscreen);var N=I(A&&A.box);if(!k&&h.prevPlacement){var j=h.prevPlacement.variableOffsets[a.crossTileID];j&&(h.variableOffsets[a.crossTileID]=j,h.markUsedJustification(e,j.anchor,a,N))}}else{var V=function(t,n){var i=h.collisionIndex.placeCollisionBox(t,f.get("text-allow-overlap"),o,r,b.predicate);return i&&i.box&&i.box.length&&(h.markUsedOrientation(e,n,a),h.placedOrientations[a.crossTileID]=n),i};D(function(){return V(z,t.WritingMode.horizontal)},function(){var r=u.verticalTextBox;return e.allowVerticalPlacement&&a.numVerticalGlyphVertices>0&&r?V(r,t.WritingMode.vertical):{box:null,offscreen:null}}),I(A&&A.box&&A.box.length)}}k=(m=A)&&m.box&&m.box.length>0,M=m&&m.offscreen;var U=u.textCircles;if(U){var q=e.text.placedSymbolArray.get(a.centerJustifiedTextSymbolIndex),H=t.evaluateSizeForFeature(e.textSizeData,p,q);E=h.collisionIndex.placeCollisionCircles(U,f.get("text-allow-overlap"),i,o,q,e.lineVertexArray,e.glyphOffsetArray,H,r,n,s,w,b.predicate),k=f.get("text-allow-overlap")||E.circles.length>0,M=M&&E.offscreen}u.iconFeatureIndex&&(O=u.iconFeatureIndex),u.iconBox&&(T=(L=h.collisionIndex.placeCollisionBox(u.iconBox,f.get("icon-allow-overlap"),o,r,b.predicate)).box.length>0,M=M&&L.offscreen);var G=d||0===a.numHorizontalGlyphVertices&&0===a.numVerticalGlyphVertices,Y=g||0===a.numIconVertices;G||Y?Y?G||(T=T&&k):k=T&&k:T=k=T&&k,k&&m&&m.box&&(S&&S.box&&P?h.collisionIndex.insertCollisionBox(m.box,f.get("text-ignore-placement"),e.bucketInstanceId,P,b.ID):h.collisionIndex.insertCollisionBox(m.box,f.get("text-ignore-placement"),e.bucketInstanceId,C,b.ID)),T&&L&&h.collisionIndex.insertCollisionBox(L.box,f.get("icon-ignore-placement"),e.bucketInstanceId,O,b.ID),k&&E&&h.collisionIndex.insertCollisionCircles(E.circles,f.get("text-ignore-placement"),e.bucketInstanceId,C,b.ID),h.placements[a.crossTileID]=new fe(k||y,T||x,M||e.justReloaded),c[a.crossTileID]=!0}};if(k)for(var M=e.getSortedSymbolIndexes(this.transform.angle),A=M.length-1;A>=0;--A){var S=M[A];T(e.symbolInstances.get(S),e.collisionArrays[S])}else for(var E=0;E<e.symbolInstances.length;++E)T(e.symbolInstances.get(E),e.collisionArrays[E]);e.justReloaded=!1},ve.prototype.markUsedJustification=function(e,r,n,a){var i,o={left:n.leftJustifiedTextSymbolIndex,center:n.centerJustifiedTextSymbolIndex,right:n.rightJustifiedTextSymbolIndex};i=a===t.WritingMode.vertical?n.verticalPlacedTextSymbolIndex:o[t.getAnchorJustification(r)];for(var s=0,l=[n.leftJustifiedTextSymbolIndex,n.centerJustifiedTextSymbolIndex,n.rightJustifiedTextSymbolIndex,n.verticalPlacedTextSymbolIndex];s<l.length;s+=1){var c=l[s];c>=0&&(e.text.placedSymbolArray.get(c).crossTileID=i>=0&&c!==i?0:n.crossTileID)}},ve.prototype.markUsedOrientation=function(e,r,n){for(var a=r===t.WritingMode.horizontal||r===t.WritingMode.horizontalOnly?r:0,i=r===t.WritingMode.vertical?r:0,o=0,s=[n.leftJustifiedTextSymbolIndex,n.centerJustifiedTextSymbolIndex,n.rightJustifiedTextSymbolIndex];o<s.length;o+=1){var l=s[o];e.text.placedSymbolArray.get(l).placedOrientation=a}n.verticalPlacedTextSymbolIndex&&(e.text.placedSymbolArray.get(n.verticalPlacedTextSymbolIndex).placedOrientation=i)},ve.prototype.commit=function(t){this.commitTime=t;var e=this.prevPlacement,r=!1,n=e&&0!==this.fadeDuration?(this.commitTime-e.commitTime)/this.fadeDuration:1,a=e?e.opacities:{},i=e?e.variableOffsets:{},o=e?e.placedOrientations:{};for(var s in this.placements){var l=this.placements[s],c=a[s];c?(this.opacities[s]=new he(c,n,l.text,l.icon),r=r||l.text!==c.text.placed||l.icon!==c.icon.placed):(this.opacities[s]=new he(null,n,l.text,l.icon,l.skipFade),r=r||l.text||l.icon)}for(var u in a){var h=a[u];if(!this.opacities[u]){var f=new he(h,n,!1,!1);f.isHidden()||(this.opacities[u]=f,r=r||h.text.placed||h.icon.placed)}}for(var p in i)this.variableOffsets[p]||!this.opacities[p]||this.opacities[p].isHidden()||(this.variableOffsets[p]=i[p]);for(var d in o)this.placedOrientations[d]||!this.opacities[d]||this.opacities[d].isHidden()||(this.placedOrientations[d]=o[d]);r?this.lastPlacementChangeTime=t:"number"!=typeof this.lastPlacementChangeTime&&(this.lastPlacementChangeTime=e?e.lastPlacementChangeTime:t)},ve.prototype.updateLayerOpacities=function(t,e){for(var r={},n=0,a=e;n<a.length;n+=1){var i=a[n],o=i.getBucket(t);o&&i.latestFeatureIndex&&t.id===o.layerIds[0]&&this.updateBucketOpacities(o,r,i.collisionBoxArray)}},ve.prototype.updateBucketOpacities=function(e,r,n){e.hasTextData()&&e.text.opacityVertexArray.clear(),e.hasIconData()&&e.icon.opacityVertexArray.clear(),e.hasCollisionBoxData()&&e.collisionBox.collisionVertexArray.clear(),e.hasCollisionCircleData()&&e.collisionCircle.collisionVertexArray.clear();var a=e.layers[0].layout,i=new he(null,0,!1,!1,!0),o=a.get("text-allow-overlap"),s=a.get("icon-allow-overlap"),l=a.get("text-variable-anchor"),c="map"===a.get("text-rotation-alignment"),u="map"===a.get("text-pitch-alignment"),h=new he(null,0,o&&(s||!e.hasIconData()||a.get("icon-optional")),s&&(o||!e.hasTextData()||a.get("text-optional")),!0);!e.collisionArrays&&n&&(e.hasCollisionBoxData()||e.hasCollisionCircleData())&&e.deserializeCollisionBoxes(n);for(var f=0;f<e.symbolInstances.length;f++){var p=e.symbolInstances.get(f),d=p.numHorizontalGlyphVertices,g=p.numVerticalGlyphVertices,v=p.crossTileID,m=r[v],y=this.opacities[v];m?y=i:y||(y=h,this.opacities[v]=y),r[v]=!0;var x=d>0||g>0,b=p.numIconVertices>0;if(x){for(var _=Me(y.text),w=(d+g)/4,k=0;k<w;k++)e.text.opacityVertexArray.emplaceBack(_);var T=y.text.isHidden()?1:0,M=this.placedOrientations[p.crossTileID],A=M===t.WritingMode.horizontal||M===t.WritingMode.horizontalOnly?1:0,S=M===t.WritingMode.vertical?1:0;[p.rightJustifiedTextSymbolIndex,p.centerJustifiedTextSymbolIndex,p.leftJustifiedTextSymbolIndex].forEach(function(t){t>=0&&(e.text.placedSymbolArray.get(t).hidden=T||S)}),p.verticalPlacedTextSymbolIndex>=0&&(e.text.placedSymbolArray.get(p.verticalPlacedTextSymbolIndex).hidden=T||A);var E=this.variableOffsets[p.crossTileID];E&&this.markUsedJustification(e,E.anchor,p,M);var L=this.placedOrientations[p.crossTileID];L&&(this.markUsedJustification(e,"left",p,L),this.markUsedOrientation(e,L,p))}if(b){for(var C=Me(y.icon),P=0;P<p.numIconVertices/4;P++)e.icon.opacityVertexArray.emplaceBack(C);e.icon.placedSymbolArray.get(f).hidden=y.icon.isHidden()}if(e.hasCollisionBoxData()||e.hasCollisionCircleData()){var O=e.collisionArrays[f];if(O){if(O.textBox){var z=new t.Point(0,0),I=!0;if(l){var D=this.variableOffsets[v];D?(z=ge(D.anchor,D.width,D.height,D.radialOffset,D.textBoxScale),c&&z._rotate(u?this.transform.angle:-this.transform.angle)):I=!1}me(e.collisionBox.collisionVertexArray,y.text.placed,!I,z.x,z.y)}O.iconBox&&me(e.collisionBox.collisionVertexArray,y.icon.placed,!1);var R=O.textCircles;if(R&&e.hasCollisionCircleData())for(var F=0;F<R.length;F+=5){var B=m||0===R[F+4];me(e.collisionCircle.collisionVertexArray,y.text.placed,B)}}}}e.sortFeatures(this.transform.angle),this.retainedQueryData[e.bucketInstanceId]&&(this.retainedQueryData[e.bucketInstanceId].featureSortOrder=e.featureSortOrder),e.hasTextData()&&e.text.opacityVertexBuffer&&e.text.opacityVertexBuffer.updateData(e.text.opacityVertexArray),e.hasIconData()&&e.icon.opacityVertexBuffer&&e.icon.opacityVertexBuffer.updateData(e.icon.opacityVertexArray),e.hasCollisionBoxData()&&e.collisionBox.collisionVertexBuffer&&e.collisionBox.collisionVertexBuffer.updateData(e.collisionBox.collisionVertexArray),e.hasCollisionCircleData()&&e.collisionCircle.collisionVertexBuffer&&e.collisionCircle.collisionVertexBuffer.updateData(e.collisionCircle.collisionVertexArray)},ve.prototype.symbolFadeChange=function(t){return 0===this.fadeDuration?1:(t-this.commitTime)/this.fadeDuration},ve.prototype.hasTransitions=function(t){return this.stale||t-this.lastPlacementChangeTime<this.fadeDuration},ve.prototype.stillRecent=function(t){return this.commitTime+this.fadeDuration>t},ve.prototype.setStale=function(){this.stale=!0};var ye=Math.pow(2,25),xe=Math.pow(2,24),be=Math.pow(2,17),_e=Math.pow(2,16),we=Math.pow(2,9),ke=Math.pow(2,8),Te=Math.pow(2,1);function Me(t){if(0===t.opacity&&!t.placed)return 0;if(1===t.opacity&&t.placed)return 4294967295;var e=t.placed?1:0,r=Math.floor(127*t.opacity);return r*ye+e*xe+r*be+e*_e+r*we+e*ke+r*Te+e}var Ae=function(){this._currentTileIndex=0,this._seenCrossTileIDs={}};Ae.prototype.continuePlacement=function(t,e,r,n,a){for(;this._currentTileIndex<t.length;){var i=t[this._currentTileIndex];if(e.placeLayerTile(n,i,r,this._seenCrossTileIDs),this._currentTileIndex++,a())return!0}};var Se=function(t,e,r,n,a,i,o){this.placement=new ve(t,a,i,o),this._currentPlacementIndex=e.length-1,this._forceFullPlacement=r,this._showCollisionBoxes=n,this._done=!1};Se.prototype.isDone=function(){return this._done},Se.prototype.continuePlacement=function(e,r,n){for(var a=this,i=t.browser.now(),o=function(){var e=t.browser.now()-i;return!a._forceFullPlacement&&e>2};this._currentPlacementIndex>=0;){var s=r[e[this._currentPlacementIndex]],l=this.placement.collisionIndex.transform.zoom;if("symbol"===s.type&&(!s.minzoom||s.minzoom<=l)&&(!s.maxzoom||s.maxzoom>l)){if(this._inProgressLayer||(this._inProgressLayer=new Ae),this._inProgressLayer.continuePlacement(n[s.source],this.placement,this._showCollisionBoxes,s,o))return;delete this._inProgressLayer}this._currentPlacementIndex--}this._done=!0},Se.prototype.commit=function(t){return this.placement.commit(t),this.placement};var Ee=512/t.EXTENT/2,Le=function(t,e,r){this.tileID=t,this.indexedSymbolInstances={},this.bucketInstanceId=r;for(var n=0;n<e.length;n++){var a=e.get(n),i=a.key;this.indexedSymbolInstances[i]||(this.indexedSymbolInstances[i]=[]),this.indexedSymbolInstances[i].push({crossTileID:a.crossTileID,coord:this.getScaledCoordinates(a,t)})}};Le.prototype.getScaledCoordinates=function(e,r){var n=r.canonical.z-this.tileID.canonical.z,a=Ee/Math.pow(2,n);return{x:Math.floor((r.canonical.x*t.EXTENT+e.anchorX)*a),y:Math.floor((r.canonical.y*t.EXTENT+e.anchorY)*a)}},Le.prototype.findMatches=function(t,e,r){for(var n=this.tileID.canonical.z<e.canonical.z?1:Math.pow(2,this.tileID.canonical.z-e.canonical.z),a=0;a<t.length;a++){var i=t.get(a);if(!i.crossTileID){var o=this.indexedSymbolInstances[i.key];if(o)for(var s=this.getScaledCoordinates(i,e),l=0,c=o;l<c.length;l+=1){var u=c[l];if(Math.abs(u.coord.x-s.x)<=n&&Math.abs(u.coord.y-s.y)<=n&&!r[u.crossTileID]){r[u.crossTileID]=!0,i.crossTileID=u.crossTileID;break}}}}};var Ce=function(){this.maxCrossTileID=0};Ce.prototype.generate=function(){return++this.maxCrossTileID};var Pe=function(){this.indexes={},this.usedCrossTileIDs={},this.lng=0};Pe.prototype.handleWrapJump=function(t){var e=Math.round((t-this.lng)/360);if(0!==e)for(var r in this.indexes){var n=this.indexes[r],a={};for(var i in n){var o=n[i];o.tileID=o.tileID.unwrapTo(o.tileID.wrap+e),a[o.tileID.key]=o}this.indexes[r]=a}this.lng=t},Pe.prototype.addBucket=function(t,e,r){if(this.indexes[t.overscaledZ]&&this.indexes[t.overscaledZ][t.key]){if(this.indexes[t.overscaledZ][t.key].bucketInstanceId===e.bucketInstanceId)return!1;this.removeBucketCrossTileIDs(t.overscaledZ,this.indexes[t.overscaledZ][t.key])}for(var n=0;n<e.symbolInstances.length;n++)e.symbolInstances.get(n).crossTileID=0;this.usedCrossTileIDs[t.overscaledZ]||(this.usedCrossTileIDs[t.overscaledZ]={});var a=this.usedCrossTileIDs[t.overscaledZ];for(var i in this.indexes){var o=this.indexes[i];if(Number(i)>t.overscaledZ)for(var s in o){var l=o[s];l.tileID.isChildOf(t)&&l.findMatches(e.symbolInstances,t,a)}else{var c=o[t.scaledTo(Number(i)).key];c&&c.findMatches(e.symbolInstances,t,a)}}for(var u=0;u<e.symbolInstances.length;u++){var h=e.symbolInstances.get(u);h.crossTileID||(h.crossTileID=r.generate(),a[h.crossTileID]=!0)}return void 0===this.indexes[t.overscaledZ]&&(this.indexes[t.overscaledZ]={}),this.indexes[t.overscaledZ][t.key]=new Le(t,e.symbolInstances,e.bucketInstanceId),!0},Pe.prototype.removeBucketCrossTileIDs=function(t,e){for(var r in e.indexedSymbolInstances)for(var n=0,a=e.indexedSymbolInstances[r];n<a.length;n+=1){var i=a[n];delete this.usedCrossTileIDs[t][i.crossTileID]}},Pe.prototype.removeStaleBuckets=function(t){var e=!1;for(var r in this.indexes){var n=this.indexes[r];for(var a in n)t[n[a].bucketInstanceId]||(this.removeBucketCrossTileIDs(r,n[a]),delete n[a],e=!0)}return e};var Oe=function(){this.layerIndexes={},this.crossTileIDs=new Ce,this.maxBucketInstanceId=0,this.bucketsInCurrentPlacement={}};Oe.prototype.addLayer=function(t,e,r){var n=this.layerIndexes[t.id];void 0===n&&(n=this.layerIndexes[t.id]=new Pe);var a=!1,i={};n.handleWrapJump(r);for(var o=0,s=e;o<s.length;o+=1){var l=s[o],c=l.getBucket(t);c&&t.id===c.layerIds[0]&&(c.bucketInstanceId||(c.bucketInstanceId=++this.maxBucketInstanceId),n.addBucket(l.tileID,c,this.crossTileIDs)&&(a=!0),i[c.bucketInstanceId]=!0)}return n.removeStaleBuckets(i)&&(a=!0),a},Oe.prototype.pruneUnusedLayers=function(t){var e={};for(var r in t.forEach(function(t){e[t]=!0}),this.layerIndexes)e[r]||delete this.layerIndexes[r]};var ze=function(e,r){return t.emitValidationErrors(e,r&&r.filter(function(t){return"source.canvas"!==t.identifier}))},Ie=t.pick(Nt,["addLayer","removeLayer","setPaintProperty","setLayoutProperty","setFilter","addSource","removeSource","setLayerZoomRange","setLight","setTransition","setGeoJSONSourceData"]),De=t.pick(Nt,["setCenter","setZoom","setBearing","setPitch"]),Re=function(e){function r(n,a){var i=this;void 0===a&&(a={}),e.call(this),this.map=n,this.dispatcher=new T((Dt||(Dt=new It),Dt),this),this.imageManager=new f,this.imageManager.setEventedParent(this),this.glyphManager=new x(n._requestManager,a.localIdeographFontFamily),this.lineAtlas=new k(256,512),this.crossTileSymbolIndex=new Oe,this._layers={},this._order=[],this.sourceCaches={},this.zoomHistory=new t.ZoomHistory,this._loaded=!1,this._resetUpdates(),this.dispatcher.broadcast("setReferrer",t.getReferrer());var o=this;this._rtlTextPluginCallback=r.registerForPluginAvailability(function(t){for(var e in o.dispatcher.broadcast("loadRTLTextPlugin",t.pluginURL,t.completionCallback),o.sourceCaches)o.sourceCaches[e].reload()}),this.on("data",function(t){if("source"===t.dataType&&"metadata"===t.sourceDataType){var e=i.sourceCaches[t.sourceId];if(e){var r=e.getSource();if(r&&r.vectorLayerIds)for(var n in i._layers){var a=i._layers[n];a.source===r.id&&i._validateLayer(a)}}}})}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.loadURL=function(e,r){var n=this;void 0===r&&(r={}),this.fire(new t.Event("dataloading",{dataType:"style"}));var a="boolean"==typeof r.validate?r.validate:!t.isMapboxURL(e);e=this.map._requestManager.normalizeStyleURL(e,r.accessToken);var i=this.map._requestManager.transformRequest(e,t.ResourceType.Style);this._request=t.getJSON(i,function(e,r){n._request=null,e?n.fire(new t.ErrorEvent(e)):r&&n._load(r,a)})},r.prototype.loadJSON=function(e,r){var n=this;void 0===r&&(r={}),this.fire(new t.Event("dataloading",{dataType:"style"})),this._request=t.browser.frame(function(){n._request=null,n._load(e,!1!==r.validate)})},r.prototype._load=function(e,r){var n=this;if(!r||!ze(this,t.validateStyle(e))){for(var a in this._loaded=!0,this.stylesheet=e,e.sources)this.addSource(a,e.sources[a],{validate:!1});e.sprite?this._spriteRequest=function(e,r,n){var a,i,o,s=t.browser.devicePixelRatio>1?"@2x":"",l=t.getJSON(r.transformRequest(r.normalizeSpriteURL(e,s,".json"),t.ResourceType.SpriteJSON),function(t,e){l=null,o||(o=t,a=e,u())}),c=t.getImage(r.transformRequest(r.normalizeSpriteURL(e,s,".png"),t.ResourceType.SpriteImage),function(t,e){c=null,o||(o=t,i=e,u())});function u(){if(o)n(o);else if(a&&i){var e=t.browser.getImageData(i),r={};for(var s in a){var l=a[s],c=l.width,u=l.height,h=l.x,f=l.y,p=l.sdf,d=l.pixelRatio,g=new t.RGBAImage({width:c,height:u});t.RGBAImage.copy(e,g,{x:h,y:f},{x:0,y:0},{width:c,height:u}),r[s]={data:g,pixelRatio:d,sdf:p}}n(null,r)}}return{cancel:function(){l&&(l.cancel(),l=null),c&&(c.cancel(),c=null)}}}(e.sprite,this.map._requestManager,function(e,r){if(n._spriteRequest=null,e)n.fire(new t.ErrorEvent(e));else if(r)for(var a in r)n.imageManager.addImage(a,r[a]);n.imageManager.setLoaded(!0),n.fire(new t.Event("data",{dataType:"style"}))}):this.imageManager.setLoaded(!0),this.glyphManager.setURL(e.glyphs);var i=Bt(this.stylesheet.layers);this._order=i.map(function(t){return t.id}),this._layers={};for(var o=0,s=i;o<s.length;o+=1){var l=s[o];(l=t.createStyleLayer(l)).setEventedParent(this,{layer:{id:l.id}}),this._layers[l.id]=l}this.dispatcher.broadcast("setLayers",this._serializeLayers(this._order)),this.light=new w(this.stylesheet.light),this.fire(new t.Event("data",{dataType:"style"})),this.fire(new t.Event("style.load"))}},r.prototype._validateLayer=function(e){var r=this.sourceCaches[e.source];if(r){var n=e.sourceLayer;if(n){var a=r.getSource();("geojson"===a.type||a.vectorLayerIds&&-1===a.vectorLayerIds.indexOf(n))&&this.fire(new t.ErrorEvent(new Error('Source layer "'+n+'" does not exist on source "'+a.id+'" as specified by style layer "'+e.id+'"')))}}},r.prototype.loaded=function(){if(!this._loaded)return!1;if(Object.keys(this._updatedSources).length)return!1;for(var t in this.sourceCaches)if(!this.sourceCaches[t].loaded())return!1;return!!this.imageManager.isLoaded()},r.prototype._serializeLayers=function(t){for(var e=[],r=0,n=t;r<n.length;r+=1){var a=n[r],i=this._layers[a];"custom"!==i.type&&e.push(i.serialize())}return e},r.prototype.hasTransitions=function(){if(this.light&&this.light.hasTransition())return!0;for(var t in this.sourceCaches)if(this.sourceCaches[t].hasTransition())return!0;for(var e in this._layers)if(this._layers[e].hasTransition())return!0;return!1},r.prototype._checkLoaded=function(){if(!this._loaded)throw new Error("Style is not done loading")},r.prototype.update=function(e){if(this._loaded){var r=this._changed;if(this._changed){var n=Object.keys(this._updatedLayers),a=Object.keys(this._removedLayers);for(var i in(n.length||a.length)&&this._updateWorkerLayers(n,a),this._updatedSources){var o=this._updatedSources[i];"reload"===o?this._reloadSource(i):"clear"===o&&this._clearSource(i)}for(var s in this._updatedPaintProps)this._layers[s].updateTransitions(e);this.light.updateTransitions(e),this._resetUpdates()}for(var l in this.sourceCaches)this.sourceCaches[l].used=!1;for(var c=0,u=this._order;c<u.length;c+=1){var h=u[c],f=this._layers[h];f.recalculate(e),!f.isHidden(e.zoom)&&f.source&&(this.sourceCaches[f.source].used=!0)}this.light.recalculate(e),this.z=e.zoom,r&&this.fire(new t.Event("data",{dataType:"style"}))}},r.prototype._updateWorkerLayers=function(t,e){this.dispatcher.broadcast("updateLayers",{layers:this._serializeLayers(t),removedIds:e})},r.prototype._resetUpdates=function(){this._changed=!1,this._updatedLayers={},this._removedLayers={},this._updatedSources={},this._updatedPaintProps={}},r.prototype.setState=function(e){var r=this;if(this._checkLoaded(),ze(this,t.validateStyle(e)))return!1;(e=t.clone$1(e)).layers=Bt(e.layers);var n=function(e,r){if(!e)return[{command:Nt.setStyle,args:[r]}];var n=[];try{if(!t.deepEqual(e.version,r.version))return[{command:Nt.setStyle,args:[r]}];t.deepEqual(e.center,r.center)||n.push({command:Nt.setCenter,args:[r.center]}),t.deepEqual(e.zoom,r.zoom)||n.push({command:Nt.setZoom,args:[r.zoom]}),t.deepEqual(e.bearing,r.bearing)||n.push({command:Nt.setBearing,args:[r.bearing]}),t.deepEqual(e.pitch,r.pitch)||n.push({command:Nt.setPitch,args:[r.pitch]}),t.deepEqual(e.sprite,r.sprite)||n.push({command:Nt.setSprite,args:[r.sprite]}),t.deepEqual(e.glyphs,r.glyphs)||n.push({command:Nt.setGlyphs,args:[r.glyphs]}),t.deepEqual(e.transition,r.transition)||n.push({command:Nt.setTransition,args:[r.transition]}),t.deepEqual(e.light,r.light)||n.push({command:Nt.setLight,args:[r.light]});var a={},i=[];!function(e,r,n,a){var i;for(i in r=r||{},e=e||{})e.hasOwnProperty(i)&&(r.hasOwnProperty(i)||Vt(i,n,a));for(i in r)r.hasOwnProperty(i)&&(e.hasOwnProperty(i)?t.deepEqual(e[i],r[i])||("geojson"===e[i].type&&"geojson"===r[i].type&&qt(e,r,i)?n.push({command:Nt.setGeoJSONSourceData,args:[i,r[i].data]}):Ut(i,r,n,a)):jt(i,r,n))}(e.sources,r.sources,i,a);var o=[];e.layers&&e.layers.forEach(function(t){a[t.source]?n.push({command:Nt.removeLayer,args:[t.id]}):o.push(t)}),n=n.concat(i),function(e,r,n){r=r||[];var a,i,o,s,l,c,u,h=(e=e||[]).map(Gt),f=r.map(Gt),p=e.reduce(Yt,{}),d=r.reduce(Yt,{}),g=h.slice(),v=Object.create(null);for(a=0,i=0;a<h.length;a++)o=h[a],d.hasOwnProperty(o)?i++:(n.push({command:Nt.removeLayer,args:[o]}),g.splice(g.indexOf(o,i),1));for(a=0,i=0;a<f.length;a++)o=f[f.length-1-a],g[g.length-1-a]!==o&&(p.hasOwnProperty(o)?(n.push({command:Nt.removeLayer,args:[o]}),g.splice(g.lastIndexOf(o,g.length-i),1)):i++,c=g[g.length-a],n.push({command:Nt.addLayer,args:[d[o],c]}),g.splice(g.length-a,0,o),v[o]=!0);for(a=0;a<f.length;a++)if(s=p[o=f[a]],l=d[o],!v[o]&&!t.deepEqual(s,l))if(t.deepEqual(s.source,l.source)&&t.deepEqual(s["source-layer"],l["source-layer"])&&t.deepEqual(s.type,l.type)){for(u in Ht(s.layout,l.layout,n,o,null,Nt.setLayoutProperty),Ht(s.paint,l.paint,n,o,null,Nt.setPaintProperty),t.deepEqual(s.filter,l.filter)||n.push({command:Nt.setFilter,args:[o,l.filter]}),t.deepEqual(s.minzoom,l.minzoom)&&t.deepEqual(s.maxzoom,l.maxzoom)||n.push({command:Nt.setLayerZoomRange,args:[o,l.minzoom,l.maxzoom]}),s)s.hasOwnProperty(u)&&"layout"!==u&&"paint"!==u&&"filter"!==u&&"metadata"!==u&&"minzoom"!==u&&"maxzoom"!==u&&(0===u.indexOf("paint.")?Ht(s[u],l[u],n,o,u.slice(6),Nt.setPaintProperty):t.deepEqual(s[u],l[u])||n.push({command:Nt.setLayerProperty,args:[o,u,l[u]]}));for(u in l)l.hasOwnProperty(u)&&!s.hasOwnProperty(u)&&"layout"!==u&&"paint"!==u&&"filter"!==u&&"metadata"!==u&&"minzoom"!==u&&"maxzoom"!==u&&(0===u.indexOf("paint.")?Ht(s[u],l[u],n,o,u.slice(6),Nt.setPaintProperty):t.deepEqual(s[u],l[u])||n.push({command:Nt.setLayerProperty,args:[o,u,l[u]]}))}else n.push({command:Nt.removeLayer,args:[o]}),c=g[g.lastIndexOf(o)+1],n.push({command:Nt.addLayer,args:[l,c]})}(o,r.layers,n)}catch(t){console.warn("Unable to compute style diff:",t),n=[{command:Nt.setStyle,args:[r]}]}return n}(this.serialize(),e).filter(function(t){return!(t.command in De)});if(0===n.length)return!1;var a=n.filter(function(t){return!(t.command in Ie)});if(a.length>0)throw new Error("Unimplemented: "+a.map(function(t){return t.command}).join(", ")+".");return n.forEach(function(t){"setTransition"!==t.command&&r[t.command].apply(r,t.args)}),this.stylesheet=e,!0},r.prototype.addImage=function(e,r){if(this.getImage(e))return this.fire(new t.ErrorEvent(new Error("An image with this name already exists.")));this.imageManager.addImage(e,r),this.fire(new t.Event("data",{dataType:"style"}))},r.prototype.updateImage=function(t,e){this.imageManager.updateImage(t,e)},r.prototype.getImage=function(t){return this.imageManager.getImage(t)},r.prototype.removeImage=function(e){if(!this.getImage(e))return this.fire(new t.ErrorEvent(new Error("No image with this name exists.")));this.imageManager.removeImage(e),this.fire(new t.Event("data",{dataType:"style"}))},r.prototype.listImages=function(){return this._checkLoaded(),this.imageManager.listImages()},r.prototype.addSource=function(e,r,n){var a=this;if(void 0===n&&(n={}),this._checkLoaded(),void 0!==this.sourceCaches[e])throw new Error("There is already a source with this ID");if(!r.type)throw new Error("The type property must be defined, but the only the following properties were given: "+Object.keys(r).join(", ")+".");if(!(["vector","raster","geojson","video","image"].indexOf(r.type)>=0&&this._validate(t.validateStyle.source,"sources."+e,r,null,n))){this.map&&this.map._collectResourceTiming&&(r.collectResourceTiming=!0);var i=this.sourceCaches[e]=new Ct(e,r,this.dispatcher);i.style=this,i.setEventedParent(this,function(){return{isSourceLoaded:a.loaded(),source:i.serialize(),sourceId:e}}),i.onAdd(this.map),this._changed=!0}},r.prototype.removeSource=function(e){if(this._checkLoaded(),void 0===this.sourceCaches[e])throw new Error("There is no source with this ID");for(var r in this._layers)if(this._layers[r].source===e)return this.fire(new t.ErrorEvent(new Error('Source "'+e+'" cannot be removed while layer "'+r+'" is using it.')));var n=this.sourceCaches[e];delete this.sourceCaches[e],delete this._updatedSources[e],n.fire(new t.Event("data",{sourceDataType:"metadata",dataType:"source",sourceId:e})),n.setEventedParent(null),n.clearTiles(),n.onRemove&&n.onRemove(this.map),this._changed=!0},r.prototype.setGeoJSONSourceData=function(t,e){this._checkLoaded(),this.sourceCaches[t].getSource().setData(e),this._changed=!0},r.prototype.getSource=function(t){return this.sourceCaches[t]&&this.sourceCaches[t].getSource()},r.prototype.addLayer=function(e,r,n){void 0===n&&(n={}),this._checkLoaded();var a=e.id;if(this.getLayer(a))this.fire(new t.ErrorEvent(new Error('Layer with id "'+a+'" already exists on this map')));else{var i;if("custom"===e.type){if(ze(this,t.validateCustomStyleLayer(e)))return;i=t.createStyleLayer(e)}else{if("object"==typeof e.source&&(this.addSource(a,e.source),e=t.clone$1(e),e=t.extend(e,{source:a})),this._validate(t.validateStyle.layer,"layers."+a,e,{arrayIndex:-1},n))return;i=t.createStyleLayer(e),this._validateLayer(i),i.setEventedParent(this,{layer:{id:a}})}var o=r?this._order.indexOf(r):this._order.length;if(r&&-1===o)this.fire(new t.ErrorEvent(new Error('Layer with id "'+r+'" does not exist on this map.')));else{if(this._order.splice(o,0,a),this._layerOrderChanged=!0,this._layers[a]=i,this._removedLayers[a]&&i.source&&"custom"!==i.type){var s=this._removedLayers[a];delete this._removedLayers[a],s.type!==i.type?this._updatedSources[i.source]="clear":(this._updatedSources[i.source]="reload",this.sourceCaches[i.source].pause())}this._updateLayer(i),i.onAdd&&i.onAdd(this.map)}}},r.prototype.moveLayer=function(e,r){if(this._checkLoaded(),this._changed=!0,this._layers[e]){if(e!==r){var n=this._order.indexOf(e);this._order.splice(n,1);var a=r?this._order.indexOf(r):this._order.length;r&&-1===a?this.fire(new t.ErrorEvent(new Error('Layer with id "'+r+'" does not exist on this map.'))):(this._order.splice(a,0,e),this._layerOrderChanged=!0)}}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be moved.")))},r.prototype.removeLayer=function(e){this._checkLoaded();var r=this._layers[e];if(r){r.setEventedParent(null);var n=this._order.indexOf(e);this._order.splice(n,1),this._layerOrderChanged=!0,this._changed=!0,this._removedLayers[e]=r,delete this._layers[e],delete this._updatedLayers[e],delete this._updatedPaintProps[e],r.onRemove&&r.onRemove(this.map)}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be removed.")))},r.prototype.getLayer=function(t){return this._layers[t]},r.prototype.setLayerZoomRange=function(e,r,n){this._checkLoaded();var a=this.getLayer(e);a?a.minzoom===r&&a.maxzoom===n||(null!=r&&(a.minzoom=r),null!=n&&(a.maxzoom=n),this._updateLayer(a)):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot have zoom extent.")))},r.prototype.setFilter=function(e,r,n){void 0===n&&(n={}),this._checkLoaded();var a=this.getLayer(e);if(a){if(!t.deepEqual(a.filter,r))return null==r?(a.filter=void 0,void this._updateLayer(a)):void(this._validate(t.validateStyle.filter,"layers."+a.id+".filter",r,null,n)||(a.filter=t.clone$1(r),this._updateLayer(a)))}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be filtered.")))},r.prototype.getFilter=function(e){return t.clone$1(this.getLayer(e).filter)},r.prototype.setLayoutProperty=function(e,r,n,a){void 0===a&&(a={}),this._checkLoaded();var i=this.getLayer(e);i?t.deepEqual(i.getLayoutProperty(r),n)||(i.setLayoutProperty(r,n,a),this._updateLayer(i)):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be styled.")))},r.prototype.getLayoutProperty=function(e,r){var n=this.getLayer(e);if(n)return n.getLayoutProperty(r);this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style.")))},r.prototype.setPaintProperty=function(e,r,n,a){void 0===a&&(a={}),this._checkLoaded();var i=this.getLayer(e);i?t.deepEqual(i.getPaintProperty(r),n)||(i.setPaintProperty(r,n,a)&&this._updateLayer(i),this._changed=!0,this._updatedPaintProps[e]=!0):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be styled.")))},r.prototype.getPaintProperty=function(t,e){return this.getLayer(t).getPaintProperty(e)},r.prototype.setFeatureState=function(e,r){this._checkLoaded();var n=e.source,a=e.sourceLayer,i=this.sourceCaches[n],o=parseInt(e.id,10);if(void 0!==i){var s=i.getSource().type;"geojson"===s&&a?this.fire(new t.ErrorEvent(new Error("GeoJSON sources cannot have a sourceLayer parameter."))):"vector"!==s||a?isNaN(o)||o<0?this.fire(new t.ErrorEvent(new Error("The feature id parameter must be provided and non-negative."))):i.setFeatureState(a,o,r):this.fire(new t.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types.")))}else this.fire(new t.ErrorEvent(new Error("The source '"+n+"' does not exist in the map's style.")))},r.prototype.removeFeatureState=function(e,r){this._checkLoaded();var n=e.source,a=this.sourceCaches[n];if(void 0!==a){var i=a.getSource().type,o="vector"===i?e.sourceLayer:void 0,s=parseInt(e.id,10);"vector"!==i||o?void 0!==e.id&&isNaN(s)||s<0?this.fire(new t.ErrorEvent(new Error("The feature id parameter must be non-negative."))):r&&"string"!=typeof e.id&&"number"!=typeof e.id?this.fire(new t.ErrorEvent(new Error("A feature id is requred to remove its specific state property."))):a.removeFeatureState(o,s,r):this.fire(new t.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types.")))}else this.fire(new t.ErrorEvent(new Error("The source '"+n+"' does not exist in the map's style.")))},r.prototype.getFeatureState=function(e){this._checkLoaded();var r=e.source,n=e.sourceLayer,a=this.sourceCaches[r],i=parseInt(e.id,10);if(void 0!==a)if("vector"!==a.getSource().type||n){if(!(isNaN(i)||i<0))return a.getFeatureState(n,i);this.fire(new t.ErrorEvent(new Error("The feature id parameter must be provided and non-negative.")))}else this.fire(new t.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types.")));else this.fire(new t.ErrorEvent(new Error("The source '"+r+"' does not exist in the map's style.")))},r.prototype.getTransition=function(){return t.extend({duration:300,delay:0},this.stylesheet&&this.stylesheet.transition)},r.prototype.serialize=function(){return t.filterObject({version:this.stylesheet.version,name:this.stylesheet.name,metadata:this.stylesheet.metadata,light:this.stylesheet.light,center:this.stylesheet.center,zoom:this.stylesheet.zoom,bearing:this.stylesheet.bearing,pitch:this.stylesheet.pitch,sprite:this.stylesheet.sprite,glyphs:this.stylesheet.glyphs,transition:this.stylesheet.transition,sources:t.mapObject(this.sourceCaches,function(t){return t.serialize()}),layers:this._serializeLayers(this._order)},function(t){return void 0!==t})},r.prototype._updateLayer=function(t){this._updatedLayers[t.id]=!0,t.source&&!this._updatedSources[t.source]&&(this._updatedSources[t.source]="reload",this.sourceCaches[t.source].pause()),this._changed=!0},r.prototype._flattenAndSortRenderedFeatures=function(t){for(var e=this,r=function(t){return"fill-extrusion"===e._layers[t].type},n={},a=[],i=this._order.length-1;i>=0;i--){var o=this._order[i];if(r(o)){n[o]=i;for(var s=0,l=t;s<l.length;s+=1){var c=l[s][o];if(c)for(var u=0,h=c;u<h.length;u+=1){var f=h[u];a.push(f)}}}}a.sort(function(t,e){return e.intersectionZ-t.intersectionZ});for(var p=[],d=this._order.length-1;d>=0;d--){var g=this._order[d];if(r(g))for(var v=a.length-1;v>=0;v--){var m=a[v].feature;if(n[m.layer.id]<d)break;p.push(m),a.pop()}else for(var y=0,x=t;y<x.length;y+=1){var b=x[y][g];if(b)for(var _=0,w=b;_<w.length;_+=1){var k=w[_];p.push(k.feature)}}}return p},r.prototype.queryRenderedFeatures=function(e,r,n){r&&r.filter&&this._validate(t.validateStyle.filter,"queryRenderedFeatures.filter",r.filter,null,r);var a={};if(r&&r.layers){if(!Array.isArray(r.layers))return this.fire(new t.ErrorEvent(new Error("parameters.layers must be an Array."))),[];for(var i=0,o=r.layers;i<o.length;i+=1){var s=o[i],l=this._layers[s];if(!l)return this.fire(new t.ErrorEvent(new Error("The layer '"+s+"' does not exist in the map's style and cannot be queried for features."))),[];a[l.source]=!0}}var c=[];for(var u in this.sourceCaches)r.layers&&!a[u]||c.push(F(this.sourceCaches[u],this._layers,e,r,n));return this.placement&&c.push(function(t,e,r,n,a,i){for(var o={},s=a.queryRenderedSymbols(r),l=[],c=0,u=Object.keys(s).map(Number);c<u.length;c+=1){var h=u[c];l.push(i[h])}l.sort(B);for(var f=function(){var e=d[p],r=e.featureIndex.lookupSymbolFeatures(s[e.bucketInstanceId],e.bucketIndex,e.sourceLayerIndex,n.filter,n.layers,t);for(var a in r){var i=o[a]=o[a]||[],l=r[a];l.sort(function(t,r){var n=e.featureSortOrder;if(n){var a=n.indexOf(t.featureIndex);return n.indexOf(r.featureIndex)-a}return r.featureIndex-t.featureIndex});for(var c=0,u=l;c<u.length;c+=1){var h=u[c];i.push(h)}}},p=0,d=l;p<d.length;p+=1)f();var g=function(r){o[r].forEach(function(n){var a=n.feature,i=t[r],o=e[i.source].getFeatureState(a.layer["source-layer"],a.id);a.source=a.layer.source,a.layer["source-layer"]&&(a.sourceLayer=a.layer["source-layer"]),a.state=o})};for(var v in o)g(v);return o}(this._layers,this.sourceCaches,e,r,this.placement.collisionIndex,this.placement.retainedQueryData)),this._flattenAndSortRenderedFeatures(c)},r.prototype.querySourceFeatures=function(e,r){r&&r.filter&&this._validate(t.validateStyle.filter,"querySourceFeatures.filter",r.filter,null,r);var n=this.sourceCaches[e];return n?function(t,e){for(var r=t.getRenderableIds().map(function(e){return t.getTileByID(e)}),n=[],a={},i=0;i<r.length;i++){var o=r[i],s=o.tileID.canonical.key;a[s]||(a[s]=!0,o.querySourceFeatures(n,e))}return n}(n,r):[]},r.prototype.addSourceType=function(t,e,n){return r.getSourceType(t)?n(new Error('A source type called "'+t+'" already exists.')):(r.setSourceType(t,e),e.workerSourceURL?void this.dispatcher.broadcast("loadWorkerSource",{name:t,url:e.workerSourceURL},n):n(null,null))},r.prototype.getLight=function(){return this.light.getLight()},r.prototype.setLight=function(e,r){void 0===r&&(r={}),this._checkLoaded();var n=this.light.getLight(),a=!1;for(var i in e)if(!t.deepEqual(e[i],n[i])){a=!0;break}if(a){var o={now:t.browser.now(),transition:t.extend({duration:300,delay:0},this.stylesheet.transition)};this.light.setLight(e,r),this.light.updateTransitions(o)}},r.prototype._validate=function(e,r,n,a,i){return void 0===i&&(i={}),(!i||!1!==i.validate)&&ze(this,e.call(t.validateStyle,t.extend({key:r,style:this.serialize(),value:n,styleSpec:t.styleSpec},a)))},r.prototype._remove=function(){for(var e in this._request&&(this._request.cancel(),this._request=null),this._spriteRequest&&(this._spriteRequest.cancel(),this._spriteRequest=null),t.evented.off("pluginAvailable",this._rtlTextPluginCallback),this.sourceCaches)this.sourceCaches[e].clearTiles();this.dispatcher.remove()},r.prototype._clearSource=function(t){this.sourceCaches[t].clearTiles()},r.prototype._reloadSource=function(t){this.sourceCaches[t].resume(),this.sourceCaches[t].reload()},r.prototype._updateSources=function(t){for(var e in this.sourceCaches)this.sourceCaches[e].update(t)},r.prototype._generateCollisionBoxes=function(){for(var t in this.sourceCaches)this._reloadSource(t)},r.prototype._updatePlacement=function(e,r,n,a){for(var i=!1,o=!1,s={},l=0,c=this._order;l<c.length;l+=1){var u=c[l],h=this._layers[u];if("symbol"===h.type){if(!s[h.source]){var f=this.sourceCaches[h.source];s[h.source]=f.getRenderableIds(!0).map(function(t){return f.getTileByID(t)}).sort(function(t,e){return e.tileID.overscaledZ-t.tileID.overscaledZ||(t.tileID.isLessThan(e.tileID)?-1:1)})}var p=this.crossTileSymbolIndex.addLayer(h,s[h.source],e.center.lng);i=i||p}}this.crossTileSymbolIndex.pruneUnusedLayers(this._order);var d=this._layerOrderChanged||0===n;if((d||!this.pauseablePlacement||this.pauseablePlacement.isDone()&&!this.placement.stillRecent(t.browser.now()))&&(this.pauseablePlacement=new Se(e,this._order,d,r,n,a,this.placement),this._layerOrderChanged=!1),this.pauseablePlacement.isDone()?this.placement.setStale():(this.pauseablePlacement.continuePlacement(this._order,this._layers,s),this.pauseablePlacement.isDone()&&(this.placement=this.pauseablePlacement.commit(t.browser.now()),o=!0),i&&this.pauseablePlacement.placement.setStale()),o||i)for(var g=0,v=this._order;g<v.length;g+=1){var m=v[g],y=this._layers[m];"symbol"===y.type&&this.placement.updateLayerOpacities(y,s[y.source])}return!this.pauseablePlacement.isDone()||this.placement.hasTransitions(t.browser.now())},r.prototype._releaseSymbolFadeTiles=function(){for(var t in this.sourceCaches)this.sourceCaches[t].releaseSymbolFadeTiles()},r.prototype.getImages=function(t,e,r){this.imageManager.getImages(e.icons,r)},r.prototype.getGlyphs=function(t,e,r){this.glyphManager.getGlyphs(e.stacks,r)},r.prototype.getResource=function(e,r,n){return t.makeRequest(r,n)},r}(t.Evented);Re.getSourceType=function(t){return I[t]},Re.setSourceType=function(t,e){I[t]=e},Re.registerForPluginAvailability=t.registerForPluginAvailability;var Fe=t.createLayout([{name:"a_pos",type:"Int16",components:2}]),Be=cr("#ifdef GL_ES\nprecision mediump float;\n#else\n#if !defined(lowp)\n#define lowp\n#endif\n#if !defined(mediump)\n#define mediump\n#endif\n#if !defined(highp)\n#define highp\n#endif\n#endif","#ifdef GL_ES\nprecision highp float;\n#else\n#if !defined(lowp)\n#define lowp\n#endif\n#if !defined(mediump)\n#define mediump\n#endif\n#if !defined(highp)\n#define highp\n#endif\n#endif\nvec2 unpack_float(const float packedValue) {int packedIntValue=int(packedValue);int v0=packedIntValue/256;return vec2(v0,packedIntValue-v0*256);}vec2 unpack_opacity(const float packedOpacity) {int intOpacity=int(packedOpacity)/2;return vec2(float(intOpacity)/127.0,mod(packedOpacity,2.0));}vec4 decode_color(const vec2 encodedColor) {return vec4(unpack_float(encodedColor[0])/255.0,unpack_float(encodedColor[1])/255.0\n);}float unpack_mix_vec2(const vec2 packedValue,const float t) {return mix(packedValue[0],packedValue[1],t);}vec4 unpack_mix_color(const vec4 packedColors,const float t) {vec4 minColor=decode_color(vec2(packedColors[0],packedColors[1]));vec4 maxColor=decode_color(vec2(packedColors[2],packedColors[3]));return mix(minColor,maxColor,t);}vec2 get_pattern_pos(const vec2 pixel_coord_upper,const vec2 pixel_coord_lower,const vec2 pattern_size,const float tile_units_to_pixels,const vec2 pos) {vec2 offset=mod(mod(mod(pixel_coord_upper,pattern_size)*256.0,pattern_size)*256.0+pixel_coord_lower,pattern_size);return (tile_units_to_pixels*pos+offset)/pattern_size;}"),Ne=cr("uniform vec4 u_color;uniform float u_opacity;void main() {gl_FragColor=u_color*u_opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}"),je=cr("uniform vec2 u_pattern_tl_a;uniform vec2 u_pattern_br_a;uniform vec2 u_pattern_tl_b;uniform vec2 u_pattern_br_b;uniform vec2 u_texsize;uniform float u_mix;uniform float u_opacity;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(u_pattern_tl_a/u_texsize,u_pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(u_pattern_tl_b/u_texsize,u_pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_mix)*u_opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_pattern_size_a;uniform vec2 u_pattern_size_b;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_scale_a;uniform float u_scale_b;uniform float u_tile_units_to_pixels;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_a*u_pattern_size_a,u_tile_units_to_pixels,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_b*u_pattern_size_b,u_tile_units_to_pixels,a_pos);}"),Ve=cr("varying vec3 v_data;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define mediump float radius\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define highp vec4 stroke_color\n#pragma mapbox: define mediump float stroke_width\n#pragma mapbox: define lowp float stroke_opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize mediump float radius\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize highp vec4 stroke_color\n#pragma mapbox: initialize mediump float stroke_width\n#pragma mapbox: initialize lowp float stroke_opacity\nvec2 extrude=v_data.xy;float extrude_length=length(extrude);lowp float antialiasblur=v_data.z;float antialiased_blur=-max(blur,antialiasblur);float opacity_t=smoothstep(0.0,antialiased_blur,extrude_length-1.0);float color_t=stroke_width < 0.01 ? 0.0 : smoothstep(antialiased_blur,0.0,extrude_length-radius/(radius+stroke_width));gl_FragColor=opacity_t*mix(color*opacity,stroke_color*stroke_opacity,color_t);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform bool u_scale_with_map;uniform bool u_pitch_with_map;uniform vec2 u_extrude_scale;uniform lowp float u_device_pixel_ratio;uniform highp float u_camera_to_center_distance;attribute vec2 a_pos;varying vec3 v_data;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define mediump float radius\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define highp vec4 stroke_color\n#pragma mapbox: define mediump float stroke_width\n#pragma mapbox: define lowp float stroke_opacity\nvoid main(void) {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize mediump float radius\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize highp vec4 stroke_color\n#pragma mapbox: initialize mediump float stroke_width\n#pragma mapbox: initialize lowp float stroke_opacity\nvec2 extrude=vec2(mod(a_pos,2.0)*2.0-1.0);vec2 circle_center=floor(a_pos*0.5);if (u_pitch_with_map) {vec2 corner_position=circle_center;if (u_scale_with_map) {corner_position+=extrude*(radius+stroke_width)*u_extrude_scale;} else {vec4 projected_center=u_matrix*vec4(circle_center,0,1);corner_position+=extrude*(radius+stroke_width)*u_extrude_scale*(projected_center.w/u_camera_to_center_distance);}gl_Position=u_matrix*vec4(corner_position,0,1);} else {gl_Position=u_matrix*vec4(circle_center,0,1);if (u_scale_with_map) {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*u_camera_to_center_distance;} else {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*gl_Position.w;}}lowp float antialiasblur=1.0/u_device_pixel_ratio/(radius+stroke_width);v_data=vec3(extrude.x,extrude.y,antialiasblur);}"),Ue=cr("void main() {gl_FragColor=vec4(1.0);}","attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}"),qe=cr("uniform highp float u_intensity;varying vec2 v_extrude;\n#pragma mapbox: define highp float weight\n#define GAUSS_COEF 0.3989422804014327\nvoid main() {\n#pragma mapbox: initialize highp float weight\nfloat d=-0.5*3.0*3.0*dot(v_extrude,v_extrude);float val=weight*u_intensity*GAUSS_COEF*exp(d);gl_FragColor=vec4(val,1.0,1.0,1.0);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform float u_extrude_scale;uniform float u_opacity;uniform float u_intensity;attribute vec2 a_pos;varying vec2 v_extrude;\n#pragma mapbox: define highp float weight\n#pragma mapbox: define mediump float radius\nconst highp float ZERO=1.0/255.0/16.0;\n#define GAUSS_COEF 0.3989422804014327\nvoid main(void) {\n#pragma mapbox: initialize highp float weight\n#pragma mapbox: initialize mediump float radius\nvec2 unscaled_extrude=vec2(mod(a_pos,2.0)*2.0-1.0);float S=sqrt(-2.0*log(ZERO/weight/u_intensity/GAUSS_COEF))/3.0;v_extrude=S*unscaled_extrude;vec2 extrude=v_extrude*radius*u_extrude_scale;vec4 pos=vec4(floor(a_pos*0.5)+extrude,0,1);gl_Position=u_matrix*pos;}"),He=cr("uniform sampler2D u_image;uniform sampler2D u_color_ramp;uniform float u_opacity;varying vec2 v_pos;void main() {float t=texture2D(u_image,v_pos).r;vec4 color=texture2D(u_color_ramp,vec2(t,0.5));gl_FragColor=color*u_opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(0.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_world;attribute vec2 a_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos*u_world,0,1);v_pos.x=a_pos.x;v_pos.y=1.0-a_pos.y;}"),Ge=cr("varying float v_placed;varying float v_notUsed;void main() {float alpha=0.5;gl_FragColor=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {gl_FragColor=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {gl_FragColor*=.1;}}","attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;attribute vec2 a_shift;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);gl_Position.xy+=(a_extrude+a_shift)*u_extrude_scale*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;}"),Ye=cr("uniform float u_overscale_factor;varying float v_placed;varying float v_notUsed;varying float v_radius;varying vec2 v_extrude;varying vec2 v_extrude_scale;void main() {float alpha=0.5;vec4 color=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {color=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {color*=.2;}float extrude_scale_length=length(v_extrude_scale);float extrude_length=length(v_extrude)*extrude_scale_length;float stroke_width=15.0*extrude_scale_length/u_overscale_factor;float radius=v_radius*extrude_scale_length;float distance_to_edge=abs(extrude_length-radius);float opacity_t=smoothstep(-stroke_width,0.0,-distance_to_edge);gl_FragColor=opacity_t*color;}","attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;varying float v_radius;varying vec2 v_extrude;varying vec2 v_extrude_scale;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);highp float padding_factor=1.2;gl_Position.xy+=a_extrude*u_extrude_scale*padding_factor*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;v_radius=abs(a_extrude.y);v_extrude=a_extrude*padding_factor;v_extrude_scale=u_extrude_scale*u_camera_to_center_distance*collision_perspective_ratio;}"),We=cr("uniform highp vec4 u_color;void main() {gl_FragColor=u_color;}","attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}"),Xe=cr("#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float opacity\ngl_FragColor=color*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","attribute vec2 a_pos;uniform mat4 u_matrix;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float opacity\ngl_Position=u_matrix*vec4(a_pos,0,1);}"),Ze=cr("varying vec2 v_pos;\n#pragma mapbox: define highp vec4 outline_color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 outline_color\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=outline_color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","attribute vec2 a_pos;uniform mat4 u_matrix;uniform vec2 u_world;varying vec2 v_pos;\n#pragma mapbox: define highp vec4 outline_color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 outline_color\n#pragma mapbox: initialize lowp float opacity\ngl_Position=u_matrix*vec4(a_pos,0,1);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}"),Je=cr("uniform vec2 u_texsize;uniform sampler2D u_image;uniform float u_fade;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=mix(color1,color2,u_fade)*alpha*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_world;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec4 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;gl_Position=u_matrix*vec4(a_pos,0,1);vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,a_pos);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}"),Ke=cr("uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_fade)*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec4 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileZoomRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileZoomRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileZoomRatio,a_pos);}"),Qe=cr("varying vec4 v_color;void main() {gl_FragColor=v_color;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;uniform lowp float u_opacity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec4 v_color;\n#pragma mapbox: define highp float base\n#pragma mapbox: define highp float height\n#pragma mapbox: define highp vec4 color\nvoid main() {\n#pragma mapbox: initialize highp float base\n#pragma mapbox: initialize highp float height\n#pragma mapbox: initialize highp vec4 color\nvec3 normal=a_normal_ed.xyz;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);gl_Position=u_matrix*vec4(a_pos,t > 0.0 ? height : base,1);float colorvalue=color.r*0.2126+color.g*0.7152+color.b*0.0722;v_color=vec4(0.0,0.0,0.0,1.0);vec4 ambientlight=vec4(0.03,0.03,0.03,1.0);color+=ambientlight;float directional=clamp(dot(normal/16384.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_color.r+=clamp(color.r*directional*u_lightcolor.r,mix(0.0,0.3,1.0-u_lightcolor.r),1.0);v_color.g+=clamp(color.g*directional*u_lightcolor.g,mix(0.0,0.3,1.0-u_lightcolor.g),1.0);v_color.b+=clamp(color.b*directional*u_lightcolor.b,mix(0.0,0.3,1.0-u_lightcolor.b),1.0);v_color*=u_opacity;}"),$e=cr("uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float base\n#pragma mapbox: initialize lowp float height\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);vec4 mixedColor=mix(color1,color2,u_fade);gl_FragColor=mixedColor*v_lighting;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform vec4 u_scale;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float base\n#pragma mapbox: initialize lowp float height\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec3 normal=a_normal_ed.xyz;float edgedistance=a_normal_ed.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);float z=t > 0.0 ? height : base;gl_Position=u_matrix*vec4(a_pos,z,1);vec2 pos=normal.x==1.0 && normal.y==0.0 && normal.z==16384.0\n? a_pos\n: vec2(edgedistance,z*u_height_factor);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,pos);v_lighting=vec4(0.0,0.0,0.0,1.0);float directional=clamp(dot(normal/16383.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_lighting.rgb+=clamp(directional*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_lighting*=u_opacity;}"),tr=cr("#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;uniform float u_maxzoom;float getElevation(vec2 coord,float bias) {vec4 data=texture2D(u_image,coord)*255.0;return (data.r+data.g*256.0+data.b*256.0*256.0)/4.0;}void main() {vec2 epsilon=1.0/u_dimension;float a=getElevation(v_pos+vec2(-epsilon.x,-epsilon.y),0.0);float b=getElevation(v_pos+vec2(0,-epsilon.y),0.0);float c=getElevation(v_pos+vec2(epsilon.x,-epsilon.y),0.0);float d=getElevation(v_pos+vec2(-epsilon.x,0),0.0);float e=getElevation(v_pos,0.0);float f=getElevation(v_pos+vec2(epsilon.x,0),0.0);float g=getElevation(v_pos+vec2(-epsilon.x,epsilon.y),0.0);float h=getElevation(v_pos+vec2(0,epsilon.y),0.0);float i=getElevation(v_pos+vec2(epsilon.x,epsilon.y),0.0);float exaggeration=u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;vec2 deriv=vec2((c+f+f+i)-(a+d+d+g),(g+h+h+i)-(a+b+b+c))/ pow(2.0,(u_zoom-u_maxzoom)*exaggeration+19.2562-u_zoom);gl_FragColor=clamp(vec4(deriv.x/2.0+0.5,deriv.y/2.0+0.5,1.0,1.0),0.0,1.0);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_dimension;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);highp vec2 epsilon=1.0/u_dimension;float scale=(u_dimension.x-2.0)/u_dimension.x;v_pos=(a_texture_pos/8192.0)*scale+epsilon;}"),er=cr("uniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_latrange;uniform vec2 u_light;uniform vec4 u_shadow;uniform vec4 u_highlight;uniform vec4 u_accent;\n#define PI 3.141592653589793\nvoid main() {vec4 pixel=texture2D(u_image,v_pos);vec2 deriv=((pixel.rg*2.0)-1.0);float scaleFactor=cos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));float slope=atan(1.25*length(deriv)/scaleFactor);float aspect=deriv.x !=0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y > 0.0 ? 1.0 :-1.0);float intensity=u_light.x;float azimuth=u_light.y+PI;float base=1.875-intensity*1.75;float maxValue=0.5*PI;float scaledSlope=intensity !=0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent=cos(scaledSlope);vec4 accent_color=(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade=abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color=mix(u_shadow,u_highlight,shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);gl_FragColor=accent_color*(1.0-shade_color.a)+shade_color;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=a_texture_pos/8192.0;}"),rr=cr("uniform lowp float u_device_pixel_ratio;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);gl_FragColor=color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define scale 0.015873016\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform vec2 u_units_to_pixels;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_linesofar;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float width\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}"),nr=cr("uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;varying highp float v_lineprogress;\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color=texture2D(u_image,vec2(v_lineprogress,0.5));gl_FragColor=color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define MAX_LINE_DISTANCE 32767.0\n#define scale 0.015873016\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_lineprogress;\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\nvoid main() {\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float width\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_lineprogress=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0/MAX_LINE_DISTANCE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}"),ar=cr("uniform lowp float u_device_pixel_ratio;uniform vec2 u_texsize;uniform float u_fade;uniform mediump vec4 u_scale;uniform sampler2D u_image;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileZoomRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);vec2 pattern_size_a=vec2(display_size_a.x*fromScale/tileZoomRatio,display_size_a.y);vec2 pattern_size_b=vec2(display_size_b.x*toScale/tileZoomRatio,display_size_b.y);float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float x_a=mod(v_linesofar/pattern_size_a.x,1.0);float x_b=mod(v_linesofar/pattern_size_b.x,1.0);float y_a=0.5+(v_normal.y*clamp(v_width2.s,0.0,(pattern_size_a.y+2.0)/2.0)/pattern_size_a.y);float y_b=0.5+(v_normal.y*clamp(v_width2.s,0.0,(pattern_size_b.y+2.0)/2.0)/pattern_size_b.y);vec2 pos_a=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,vec2(x_a,y_a));vec2 pos_b=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,vec2(x_b,y_b));vec4 color=mix(texture2D(u_image,pos_a),texture2D(u_image,pos_b),u_fade);gl_FragColor=color*alpha*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define scale 0.015873016\n#define LINE_DISTANCE_SCALE 2.0\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform vec2 u_units_to_pixels;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize mediump float width\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_linesofar=a_linesofar;v_width2=vec2(outset,inset);}"),ir=cr("uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;uniform float u_sdfgamma;uniform float u_mix;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp float floorwidth\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float width\n#pragma mapbox: initialize lowp float floorwidth\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float sdfdist_a=texture2D(u_image,v_tex_a).a;float sdfdist_b=texture2D(u_image,v_tex_b).a;float sdfdist=mix(sdfdist_a,sdfdist_b,u_mix);alpha*=smoothstep(0.5-u_sdfgamma/floorwidth,0.5+u_sdfgamma/floorwidth,sdfdist);gl_FragColor=color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define scale 0.015873016\n#define LINE_DISTANCE_SCALE 2.0\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_patternscale_a;uniform float u_tex_y_a;uniform vec2 u_patternscale_b;uniform float u_tex_y_b;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp float floorwidth\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float width\n#pragma mapbox: initialize lowp float floorwidth\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_tex_a=vec2(a_linesofar*u_patternscale_a.x/floorwidth,normal.y*u_patternscale_a.y+u_tex_y_a);v_tex_b=vec2(a_linesofar*u_patternscale_b.x/floorwidth,normal.y*u_patternscale_b.y+u_tex_y_b);v_width2=vec2(outset,inset);}"),or=cr("uniform float u_fade_t;uniform float u_opacity;uniform sampler2D u_image0;uniform sampler2D u_image1;varying vec2 v_pos0;varying vec2 v_pos1;uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;void main() {vec4 color0=texture2D(u_image0,v_pos0);vec4 color1=texture2D(u_image1,v_pos1);if (color0.a > 0.0) {color0.rgb=color0.rgb/color0.a;}if (color1.a > 0.0) {color1.rgb=color1.rgb/color1.a;}vec4 color=mix(color0,color1,u_fade_t);color.a*=u_opacity;vec3 rgb=color.rgb;rgb=vec3(dot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average=(color.r+color.g+color.b)/3.0;rgb+=(average-rgb)*u_saturation_factor;rgb=(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec=vec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec=vec3(u_brightness_high,u_brightness_high,u_brightness_high);gl_FragColor=vec4(mix(u_high_vec,u_low_vec,rgb)*color.a,color.a);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform float u_buffer_scale;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos0;varying vec2 v_pos1;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos0=(((a_texture_pos/8192.0)-0.5)/u_buffer_scale )+0.5;v_pos1=(v_pos0*u_scale_parent)+u_tl_parent;}"),sr=cr("uniform sampler2D u_texture;varying vec2 v_tex;varying float v_fade_opacity;\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\nlowp float alpha=opacity*v_fade_opacity;gl_FragColor=texture2D(u_texture,v_tex)*alpha;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform highp float u_camera_to_center_distance;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform float u_fade_change;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform vec2 u_texsize;varying vec2 v_tex;varying float v_fade_opacity;\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size[0],a_size[1],u_size_t)/256.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size[0]/256.0;} else if (!u_is_size_zoom_constant && u_is_size_feature_constant) {size=u_size;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\ncamera_to_anchor_distance/u_camera_to_center_distance :\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);v_tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;v_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));}"),lr=cr("#define SDF_PX 8.0\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;uniform bool u_is_text;varying vec2 v_data0;varying vec3 v_data1;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nvoid main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nfloat EDGE_GAMMA=0.105/u_device_pixel_ratio;vec2 tex=v_data0.xy;float gamma_scale=v_data1.x;float size=v_data1.y;float fade_opacity=v_data1[2];float fontScale=u_is_text ? size/24.0 : size;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;varying vec2 v_data0;varying vec3 v_data1;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nvoid main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size[0],a_size[1],u_size_t)/256.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size[0]/256.0;} else if (!u_is_size_zoom_constant && u_is_size_feature_constant) {size=u_size;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\ncamera_to_anchor_distance/u_camera_to_center_distance :\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);float gamma_scale=gl_Position.w;vec2 tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0=vec2(tex.x,tex.y);v_data1=vec3(gamma_scale,size,interpolated_fade_opacity);}");function cr(t,e){var r=/#pragma mapbox: ([\w]+) ([\w]+) ([\w]+) ([\w]+)/g,n={};return{fragmentSource:t=t.replace(r,function(t,e,r,a,i){return n[i]=!0,"define"===e?"\n#ifndef HAS_UNIFORM_u_"+i+"\nvarying "+r+" "+a+" "+i+";\n#else\nuniform "+r+" "+a+" u_"+i+";\n#endif\n":"\n#ifdef HAS_UNIFORM_u_"+i+"\n "+r+" "+a+" "+i+" = u_"+i+";\n#endif\n"}),vertexSource:e=e.replace(r,function(t,e,r,a,i){var o="float"===a?"vec2":"vec4",s=i.match(/color/)?"color":o;return n[i]?"define"===e?"\n#ifndef HAS_UNIFORM_u_"+i+"\nuniform lowp float u_"+i+"_t;\nattribute "+r+" "+o+" a_"+i+";\nvarying "+r+" "+a+" "+i+";\n#else\nuniform "+r+" "+a+" u_"+i+";\n#endif\n":"vec4"===s?"\n#ifndef HAS_UNIFORM_u_"+i+"\n "+i+" = a_"+i+";\n#else\n "+r+" "+a+" "+i+" = u_"+i+";\n#endif\n":"\n#ifndef HAS_UNIFORM_u_"+i+"\n "+i+" = unpack_mix_"+s+"(a_"+i+", u_"+i+"_t);\n#else\n "+r+" "+a+" "+i+" = u_"+i+";\n#endif\n":"define"===e?"\n#ifndef HAS_UNIFORM_u_"+i+"\nuniform lowp float u_"+i+"_t;\nattribute "+r+" "+o+" a_"+i+";\n#else\nuniform "+r+" "+a+" u_"+i+";\n#endif\n":"vec4"===s?"\n#ifndef HAS_UNIFORM_u_"+i+"\n "+r+" "+a+" "+i+" = a_"+i+";\n#else\n "+r+" "+a+" "+i+" = u_"+i+";\n#endif\n":"\n#ifndef HAS_UNIFORM_u_"+i+"\n "+r+" "+a+" "+i+" = unpack_mix_"+s+"(a_"+i+", u_"+i+"_t);\n#else\n "+r+" "+a+" "+i+" = u_"+i+";\n#endif\n"})}}var ur=Object.freeze({prelude:Be,background:Ne,backgroundPattern:je,circle:Ve,clippingMask:Ue,heatmap:qe,heatmapTexture:He,collisionBox:Ge,collisionCircle:Ye,debug:We,fill:Xe,fillOutline:Ze,fillOutlinePattern:Je,fillPattern:Ke,fillExtrusion:Qe,fillExtrusionPattern:$e,hillshadePrepare:tr,hillshade:er,line:rr,lineGradient:nr,linePattern:ar,lineSDF:ir,raster:or,symbolIcon:sr,symbolSDF:lr}),hr=function(){this.boundProgram=null,this.boundLayoutVertexBuffer=null,this.boundPaintVertexBuffers=[],this.boundIndexBuffer=null,this.boundVertexOffset=null,this.boundDynamicVertexBuffer=null,this.vao=null};hr.prototype.bind=function(t,e,r,n,a,i,o,s){this.context=t;for(var l=this.boundPaintVertexBuffers.length!==n.length,c=0;!l&&c<n.length;c++)this.boundPaintVertexBuffers[c]!==n[c]&&(l=!0);var u=!this.vao||this.boundProgram!==e||this.boundLayoutVertexBuffer!==r||l||this.boundIndexBuffer!==a||this.boundVertexOffset!==i||this.boundDynamicVertexBuffer!==o||this.boundDynamicVertexBuffer2!==s;!t.extVertexArrayObject||u?this.freshBind(e,r,n,a,i,o,s):(t.bindVertexArrayOES.set(this.vao),o&&o.bind(),a&&a.dynamicDraw&&a.bind(),s&&s.bind())},hr.prototype.freshBind=function(t,e,r,n,a,i,o){var s,l=t.numAttributes,c=this.context,u=c.gl;if(c.extVertexArrayObject)this.vao&&this.destroy(),this.vao=c.extVertexArrayObject.createVertexArrayOES(),c.bindVertexArrayOES.set(this.vao),s=0,this.boundProgram=t,this.boundLayoutVertexBuffer=e,this.boundPaintVertexBuffers=r,this.boundIndexBuffer=n,this.boundVertexOffset=a,this.boundDynamicVertexBuffer=i,this.boundDynamicVertexBuffer2=o;else{s=c.currentNumAttributes||0;for(var h=l;h<s;h++)u.disableVertexAttribArray(h)}e.enableAttributes(u,t);for(var f=0,p=r;f<p.length;f+=1)p[f].enableAttributes(u,t);i&&i.enableAttributes(u,t),o&&o.enableAttributes(u,t),e.bind(),e.setVertexAttribPointers(u,t,a);for(var d=0,g=r;d<g.length;d+=1){var v=g[d];v.bind(),v.setVertexAttribPointers(u,t,a)}i&&(i.bind(),i.setVertexAttribPointers(u,t,a)),n&&n.bind(),o&&(o.bind(),o.setVertexAttribPointers(u,t,a)),c.currentNumAttributes=l},hr.prototype.destroy=function(){this.vao&&(this.context.extVertexArrayObject.deleteVertexArrayOES(this.vao),this.vao=null)};var fr=function(t,e,r,n,a){var i=t.gl;this.program=i.createProgram();var o=r.defines();a&&o.push("#define OVERDRAW_INSPECTOR;");var s=o.concat(Be.fragmentSource,e.fragmentSource).join("\n"),l=o.concat(Be.vertexSource,e.vertexSource).join("\n"),c=i.createShader(i.FRAGMENT_SHADER);i.shaderSource(c,s),i.compileShader(c),i.attachShader(this.program,c);var u=i.createShader(i.VERTEX_SHADER);i.shaderSource(u,l),i.compileShader(u),i.attachShader(this.program,u);for(var h=r.layoutAttributes||[],f=0;f<h.length;f++)i.bindAttribLocation(this.program,f,h[f].name);i.linkProgram(this.program),this.numAttributes=i.getProgramParameter(this.program,i.ACTIVE_ATTRIBUTES),this.attributes={};for(var p={},d=0;d<this.numAttributes;d++){var g=i.getActiveAttrib(this.program,d);g&&(this.attributes[g.name]=i.getAttribLocation(this.program,g.name))}for(var v=i.getProgramParameter(this.program,i.ACTIVE_UNIFORMS),m=0;m<v;m++){var y=i.getActiveUniform(this.program,m);y&&(p[y.name]=i.getUniformLocation(this.program,y.name))}this.fixedUniforms=n(t,p),this.binderUniforms=r.getUniforms(t,p)};function pr(e,r,n){var a=1/ce(n,1,r.transform.tileZoom),i=Math.pow(2,n.tileID.overscaledZ),o=n.tileSize*Math.pow(2,r.transform.tileZoom)/i,s=o*(n.tileID.canonical.x+n.tileID.wrap*i),l=o*n.tileID.canonical.y;return{u_image:0,u_texsize:n.imageAtlasTexture.size,u_scale:[t.browser.devicePixelRatio,a,e.fromScale,e.toScale],u_fade:e.t,u_pixel_coord_upper:[s>>16,l>>16],u_pixel_coord_lower:[65535&s,65535&l]}}fr.prototype.draw=function(t,e,r,n,a,i,o,s,l,c,u,h,f,p,d,g){var v,m=t.gl;for(var y in t.program.set(this.program),t.setDepthMode(r),t.setStencilMode(n),t.setColorMode(a),t.setCullFace(i),this.fixedUniforms)this.fixedUniforms[y].set(o[y]);p&&p.setUniforms(t,this.binderUniforms,h,{zoom:f});for(var x=(v={},v[m.LINES]=2,v[m.TRIANGLES]=3,v[m.LINE_STRIP]=1,v)[e],b=0,_=u.get();b<_.length;b+=1){var w=_[b],k=w.vaos||(w.vaos={});(k[s]||(k[s]=new hr)).bind(t,this,l,p?p.getPaintVertexBuffers():[],c,w.vertexOffset,d,g),m.drawElements(e,w.primitiveLength*x,m.UNSIGNED_SHORT,w.primitiveOffset*x*2)}};var dr=function(e,r,n,a){var i=r.style.light,o=i.properties.get("position"),s=[o.x,o.y,o.z],l=t.create$1();"viewport"===i.properties.get("anchor")&&t.fromRotation(l,-r.transform.angle),t.transformMat3(s,s,l);var c=i.properties.get("color");return{u_matrix:e,u_lightpos:s,u_lightintensity:i.properties.get("intensity"),u_lightcolor:[c.r,c.g,c.b],u_vertical_gradient:+n,u_opacity:a}},gr=function(e,r,n,a,i,o,s){return t.extend(dr(e,r,n,a),pr(o,r,s),{u_height_factor:-Math.pow(2,i.overscaledZ)/s.tileSize/8})},vr=function(t){return{u_matrix:t}},mr=function(e,r,n,a){return t.extend(vr(e),pr(n,r,a))},yr=function(t,e){return{u_matrix:t,u_world:e}},xr=function(e,r,n,a,i){return t.extend(mr(e,r,n,a),{u_world:i})},br=function(e,r,n,a){var i,o,s=e.transform;if("map"===a.paint.get("circle-pitch-alignment")){var l=ce(n,1,s.zoom);i=!0,o=[l,l]}else i=!1,o=s.pixelsToGLUnits;return{u_camera_to_center_distance:s.cameraToCenterDistance,u_scale_with_map:+("map"===a.paint.get("circle-pitch-scale")),u_matrix:e.translatePosMatrix(r.posMatrix,n,a.paint.get("circle-translate"),a.paint.get("circle-translate-anchor")),u_pitch_with_map:+i,u_device_pixel_ratio:t.browser.devicePixelRatio,u_extrude_scale:o}},_r=function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pixels_to_tile_units:new t.Uniform1f(e,r.u_pixels_to_tile_units),u_extrude_scale:new t.Uniform2f(e,r.u_extrude_scale),u_overscale_factor:new t.Uniform1f(e,r.u_overscale_factor)}},wr=function(t,e,r){var n=ce(r,1,e.zoom),a=Math.pow(2,e.zoom-r.tileID.overscaledZ),i=r.tileID.overscaleFactor();return{u_matrix:t,u_camera_to_center_distance:e.cameraToCenterDistance,u_pixels_to_tile_units:n,u_extrude_scale:[e.pixelsToGLUnits[0]/(n*a),e.pixelsToGLUnits[1]/(n*a)],u_overscale_factor:i}},kr=function(t,e){return{u_matrix:t,u_color:e}},Tr=function(t){return{u_matrix:t}},Mr=function(t,e,r,n){return{u_matrix:t,u_extrude_scale:ce(e,1,r),u_intensity:n}},Ar=function(t,e,r){var n=r.paint.get("hillshade-shadow-color"),a=r.paint.get("hillshade-highlight-color"),i=r.paint.get("hillshade-accent-color"),o=r.paint.get("hillshade-illumination-direction")*(Math.PI/180);"viewport"===r.paint.get("hillshade-illumination-anchor")&&(o-=t.transform.angle);var s=!t.options.moving;return{u_matrix:t.transform.calculatePosMatrix(e.tileID.toUnwrapped(),s),u_image:0,u_latrange:Er(t,e.tileID),u_light:[r.paint.get("hillshade-exaggeration"),o],u_shadow:n,u_highlight:a,u_accent:i}},Sr=function(e,r){var n=e.dem.stride,a=t.create();return t.ortho(a,0,t.EXTENT,-t.EXTENT,0,0,1),t.translate(a,a,[0,-t.EXTENT,0]),{u_matrix:a,u_image:1,u_dimension:[n,n],u_zoom:e.tileID.overscaledZ,u_maxzoom:r}};function Er(e,r){var n=Math.pow(2,r.canonical.z),a=r.canonical.y;return[new t.MercatorCoordinate(0,a/n).toLngLat().lat,new t.MercatorCoordinate(0,(a+1)/n).toLngLat().lat]}var Lr=function(e,r,n){var a=e.transform;return{u_matrix:Ir(e,r,n),u_ratio:1/ce(r,1,a.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_units_to_pixels:[1/a.pixelsToGLUnits[0],1/a.pixelsToGLUnits[1]]}},Cr=function(e,r,n){return t.extend(Lr(e,r,n),{u_image:0})},Pr=function(e,r,n,a){var i=e.transform,o=zr(r,i);return{u_matrix:Ir(e,r,n),u_texsize:r.imageAtlasTexture.size,u_ratio:1/ce(r,1,i.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_image:0,u_scale:[t.browser.devicePixelRatio,o,a.fromScale,a.toScale],u_fade:a.t,u_units_to_pixels:[1/i.pixelsToGLUnits[0],1/i.pixelsToGLUnits[1]]}},Or=function(e,r,n,a,i){var o=e.transform,s=e.lineAtlas,l=zr(r,o),c="round"===n.layout.get("line-cap"),u=s.getDash(a.from,c),h=s.getDash(a.to,c),f=u.width*i.fromScale,p=h.width*i.toScale;return t.extend(Lr(e,r,n),{u_patternscale_a:[l/f,-u.height/2],u_patternscale_b:[l/p,-h.height/2],u_sdfgamma:s.width/(256*Math.min(f,p)*t.browser.devicePixelRatio)/2,u_image:0,u_tex_y_a:u.y,u_tex_y_b:h.y,u_mix:i.t})};function zr(t,e){return 1/ce(t,1,e.tileZoom)}function Ir(t,e,r){return t.translatePosMatrix(e.tileID.posMatrix,e,r.paint.get("line-translate"),r.paint.get("line-translate-anchor"))}var Dr=function(t,e,r,n,a){return{u_matrix:t,u_tl_parent:e,u_scale_parent:r,u_buffer_scale:1,u_fade_t:n.mix,u_opacity:n.opacity*a.paint.get("raster-opacity"),u_image0:0,u_image1:1,u_brightness_low:a.paint.get("raster-brightness-min"),u_brightness_high:a.paint.get("raster-brightness-max"),u_saturation_factor:(o=a.paint.get("raster-saturation"),o>0?1-1/(1.001-o):-o),u_contrast_factor:(i=a.paint.get("raster-contrast"),i>0?1/(1-i):1+i),u_spin_weights:Rr(a.paint.get("raster-hue-rotate"))};var i,o};function Rr(t){t*=Math.PI/180;var e=Math.sin(t),r=Math.cos(t);return[(2*r+1)/3,(-Math.sqrt(3)*e-r+1)/3,(Math.sqrt(3)*e-r+1)/3]}var Fr=function(t,e,r,n,a,i,o,s,l,c){var u=a.transform;return{u_is_size_zoom_constant:+("constant"===t||"source"===t),u_is_size_feature_constant:+("constant"===t||"camera"===t),u_size_t:e?e.uSizeT:0,u_size:e?e.uSize:0,u_camera_to_center_distance:u.cameraToCenterDistance,u_pitch:u.pitch/360*2*Math.PI,u_rotate_symbol:+r,u_aspect_ratio:u.width/u.height,u_fade_change:a.options.fadeDuration?a.symbolFadeChange:1,u_matrix:i,u_label_plane_matrix:o,u_coord_matrix:s,u_is_text:+l,u_pitch_with_map:+n,u_texsize:c,u_texture:0}},Br=function(e,r,n,a,i,o,s,l,c,u,h){var f=i.transform;return t.extend(Fr(e,r,n,a,i,o,s,l,c,u),{u_gamma_scale:a?Math.cos(f._pitch)*f.cameraToCenterDistance:1,u_device_pixel_ratio:t.browser.devicePixelRatio,u_is_halo:+h})},Nr=function(t,e,r){return{u_matrix:t,u_opacity:e,u_color:r}},jr=function(e,r,n,a,i,o){return t.extend(function(t,e,r,n){var a=r.imageManager.getPattern(t.from),i=r.imageManager.getPattern(t.to),o=r.imageManager.getPixelSize(),s=o.width,l=o.height,c=Math.pow(2,n.tileID.overscaledZ),u=n.tileSize*Math.pow(2,r.transform.tileZoom)/c,h=u*(n.tileID.canonical.x+n.tileID.wrap*c),f=u*n.tileID.canonical.y;return{u_image:0,u_pattern_tl_a:a.tl,u_pattern_br_a:a.br,u_pattern_tl_b:i.tl,u_pattern_br_b:i.br,u_texsize:[s,l],u_mix:e.t,u_pattern_size_a:a.displaySize,u_pattern_size_b:i.displaySize,u_scale_a:e.fromScale,u_scale_b:e.toScale,u_tile_units_to_pixels:1/ce(n,1,r.transform.tileZoom),u_pixel_coord_upper:[h>>16,f>>16],u_pixel_coord_lower:[65535&h,65535&f]}}(a,o,n,i),{u_matrix:e,u_opacity:r})},Vr={fillExtrusion:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_lightpos:new t.Uniform3f(e,r.u_lightpos),u_lightintensity:new t.Uniform1f(e,r.u_lightintensity),u_lightcolor:new t.Uniform3f(e,r.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,r.u_vertical_gradient),u_opacity:new t.Uniform1f(e,r.u_opacity)}},fillExtrusionPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_lightpos:new t.Uniform3f(e,r.u_lightpos),u_lightintensity:new t.Uniform1f(e,r.u_lightintensity),u_lightcolor:new t.Uniform3f(e,r.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,r.u_vertical_gradient),u_height_factor:new t.Uniform1f(e,r.u_height_factor),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade),u_opacity:new t.Uniform1f(e,r.u_opacity)}},fill:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},fillPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},fillOutline:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world)}},fillOutlinePattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},circle:function(e,r){return{u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_scale_with_map:new t.Uniform1i(e,r.u_scale_with_map),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_extrude_scale:new t.Uniform2f(e,r.u_extrude_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},collisionBox:_r,collisionCircle:_r,debug:function(e,r){return{u_color:new t.UniformColor(e,r.u_color),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},clippingMask:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},heatmap:function(e,r){return{u_extrude_scale:new t.Uniform1f(e,r.u_extrude_scale),u_intensity:new t.Uniform1f(e,r.u_intensity),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},heatmapTexture:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_color_ramp:new t.Uniform1i(e,r.u_color_ramp),u_opacity:new t.Uniform1f(e,r.u_opacity)}},hillshade:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_latrange:new t.Uniform2f(e,r.u_latrange),u_light:new t.Uniform2f(e,r.u_light),u_shadow:new t.UniformColor(e,r.u_shadow),u_highlight:new t.UniformColor(e,r.u_highlight),u_accent:new t.UniformColor(e,r.u_accent)}},hillshadePrepare:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_dimension:new t.Uniform2f(e,r.u_dimension),u_zoom:new t.Uniform1f(e,r.u_zoom),u_maxzoom:new t.Uniform1f(e,r.u_maxzoom)}},line:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels)}},lineGradient:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_image:new t.Uniform1i(e,r.u_image)}},linePattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_texsize:new t.Uniform2f(e,r.u_texsize),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_image:new t.Uniform1i(e,r.u_image),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_scale:new t.Uniform4f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},lineSDF:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_patternscale_a:new t.Uniform2f(e,r.u_patternscale_a),u_patternscale_b:new t.Uniform2f(e,r.u_patternscale_b),u_sdfgamma:new t.Uniform1f(e,r.u_sdfgamma),u_image:new t.Uniform1i(e,r.u_image),u_tex_y_a:new t.Uniform1f(e,r.u_tex_y_a),u_tex_y_b:new t.Uniform1f(e,r.u_tex_y_b),u_mix:new t.Uniform1f(e,r.u_mix)}},raster:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_tl_parent:new t.Uniform2f(e,r.u_tl_parent),u_scale_parent:new t.Uniform1f(e,r.u_scale_parent),u_buffer_scale:new t.Uniform1f(e,r.u_buffer_scale),u_fade_t:new t.Uniform1f(e,r.u_fade_t),u_opacity:new t.Uniform1f(e,r.u_opacity),u_image0:new t.Uniform1i(e,r.u_image0),u_image1:new t.Uniform1i(e,r.u_image1),u_brightness_low:new t.Uniform1f(e,r.u_brightness_low),u_brightness_high:new t.Uniform1f(e,r.u_brightness_high),u_saturation_factor:new t.Uniform1f(e,r.u_saturation_factor),u_contrast_factor:new t.Uniform1f(e,r.u_contrast_factor),u_spin_weights:new t.Uniform3f(e,r.u_spin_weights)}},symbolIcon:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1f(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texture:new t.Uniform1i(e,r.u_texture)}},symbolSDF:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1f(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texture:new t.Uniform1i(e,r.u_texture),u_gamma_scale:new t.Uniform1f(e,r.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_is_halo:new t.Uniform1f(e,r.u_is_halo)}},background:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_opacity:new t.Uniform1f(e,r.u_opacity),u_color:new t.UniformColor(e,r.u_color)}},backgroundPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_opacity:new t.Uniform1f(e,r.u_opacity),u_image:new t.Uniform1i(e,r.u_image),u_pattern_tl_a:new t.Uniform2f(e,r.u_pattern_tl_a),u_pattern_br_a:new t.Uniform2f(e,r.u_pattern_br_a),u_pattern_tl_b:new t.Uniform2f(e,r.u_pattern_tl_b),u_pattern_br_b:new t.Uniform2f(e,r.u_pattern_br_b),u_texsize:new t.Uniform2f(e,r.u_texsize),u_mix:new t.Uniform1f(e,r.u_mix),u_pattern_size_a:new t.Uniform2f(e,r.u_pattern_size_a),u_pattern_size_b:new t.Uniform2f(e,r.u_pattern_size_b),u_scale_a:new t.Uniform1f(e,r.u_scale_a),u_scale_b:new t.Uniform1f(e,r.u_scale_b),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_tile_units_to_pixels:new t.Uniform1f(e,r.u_tile_units_to_pixels)}}};function Ur(e,r){for(var n=e.sort(function(t,e){return t.tileID.isLessThan(e.tileID)?-1:e.tileID.isLessThan(t.tileID)?1:0}),a=0;a<n.length;a++){var i={},o=n[a],s=n.slice(a+1);qr(o.tileID.wrapped(),o.tileID,s,new t.OverscaledTileID(0,o.tileID.wrap+1,0,0,0),i),o.setMask(i,r)}}function qr(e,r,n,a,i){for(var o=0;o<n.length;o++){var s=n[o];if(a.isLessThan(s.tileID))break;if(r.key===s.tileID.key)return;if(s.tileID.isChildOf(r)){for(var l=r.children(1/0),c=0;c<l.length;c++)qr(e,l[c],n.slice(o),a,i);return}}var u=r.overscaledZ-e.overscaledZ,h=new t.CanonicalTileID(u,r.canonical.x-(e.canonical.x<<u),r.canonical.y-(e.canonical.y<<u));i[h.key]=i[h.key]||h}function Hr(t,e,r,n,a){for(var i=t.context,o=i.gl,s=a?t.useProgram("collisionCircle"):t.useProgram("collisionBox"),l=0;l<n.length;l++){var c=n[l],u=e.getTile(c),h=u.getBucket(r);if(h){var f=a?h.collisionCircle:h.collisionBox;f&&s.draw(i,a?o.TRIANGLES:o.LINES,Mt.disabled,At.disabled,t.colorModeForRenderPass(),Et.disabled,wr(c.posMatrix,t.transform,u),r.id,f.layoutVertexBuffer,f.indexBuffer,f.segments,null,t.transform.zoom,null,null,f.collisionVertexBuffer)}}}var Gr=t.identity(new Float32Array(16));function Yr(e,r,n,a,i,o){var s=t.getAnchorAlignment(e),l=-(s.horizontalAlign-.5)*r,c=-(s.verticalAlign-.5)*n,u=t.evaluateRadialOffset(e,a);return new t.Point((l/i+u[0])*o,(c/i+u[1])*o)}function Wr(e,r,n,a,i,o,s,l,c,u){var h=e.text.placedSymbolArray,f=e.text.dynamicLayoutVertexArray;f.clear();for(var p=0;p<h.length;p++){var d=h.get(p),g=e.allowVerticalPlacement&&!d.placedOrientation,v=d.hidden||!d.crossTileID||g?null:a[d.crossTileID];if(v){var m=new t.Point(d.anchorX,d.anchorY),y=Jt(m,n?l:s),x=.5+o.cameraToCenterDistance/y.signedDistanceFromCamera*.5,b=i.evaluateSizeForFeature(e.textSizeData,u,d)*x/t.ONE_EM;n&&(b*=e.tilePixelRatio/c);for(var _=v.width,w=v.height,k=v.radialOffset,T=v.textBoxScale,M=Yr(v.anchor,_,w,k,T,b),A=n?Jt(m.add(M),s).point:y.point.add(r?M.rotate(-o.angle):M),S=e.allowVerticalPlacement&&d.placedOrientation===t.WritingMode.vertical?Math.PI/2:0,E=0;E<d.numGlyphs;E++)t.addDynamicAttributes(f,A,S)}else ie(d.numGlyphs,f)}e.text.dynamicLayoutVertexBuffer.updateData(f)}function Xr(e){var r=e.text.placedSymbolArray,n=e.text.dynamicLayoutVertexArray;n.clear();for(var a=0;a<r.length;a++){var i=r.get(a);if(i.hidden||!i.placedOrientation)ie(i.numGlyphs,n);else for(var o=new t.Point(i.anchorX,i.anchorY),s=e.allowVerticalPlacement&&i.placedOrientation===t.WritingMode.vertical?Math.PI/2:0,l=0;l<i.numGlyphs;l++)t.addDynamicAttributes(n,o,s)}e.text.dynamicLayoutVertexBuffer.updateData(n)}function Zr(e,r,n,a,i,o,s,l,c,u,h,f,p){for(var d,g,v=e.context,m=v.gl,y=e.transform,x="map"===l,b="map"===c,_=x&&"point"!==n.layout.get("symbol-placement"),w=x&&!b&&!_,k=void 0!==n.layout.get("symbol-sort-key").constantOr(1),T=e.depthModeForSublayer(0,Mt.ReadOnly),M=n.layout.get("text-variable-anchor"),A=[],S=0,E=a;S<E.length;S+=1){var L=E[S],C=r.getTile(L),P=C.getBucket(n);if(P){var O=i?P.text:P.icon;if(O&&O.segments.get().length){var z=O.programConfigurations.get(n.id),I=i||P.sdfIcons,D=i?P.textSizeData:P.iconSizeData;d||(d=e.useProgram(I?"symbolSDF":"symbolIcon",z),g=t.evaluateSizeForZoom(D,y.zoom)),v.activeTexture.set(m.TEXTURE0);var R=void 0,F=void 0,B=void 0;if(i)F=C.glyphAtlasTexture,B=m.LINEAR,R=C.glyphAtlasTexture.size;else{var N=1!==n.layout.get("icon-size").constantOr(0)||P.iconsNeedLinear,j=b||0!==y.pitch;F=C.imageAtlasTexture,B=I||e.options.rotating||e.options.zooming||N||j?m.LINEAR:m.NEAREST,R=C.imageAtlasTexture.size}var V=ce(C,1,e.transform.zoom),U=Xt(L.posMatrix,b,x,e.transform,V),q=Zt(L.posMatrix,b,x,e.transform,V);if(_)Qt(P,L.posMatrix,e,i,U,q,b,u);else if(i&&g&&M){var H=Math.pow(2,y.zoom-C.tileID.overscaledZ);Wr(P,x,b,p,t.symbolSize,y,U,L.posMatrix,H,g)}else i&&g&&P.allowVerticalPlacement&&Xr(P);var G=e.translatePosMatrix(L.posMatrix,C,o,s),Y=_||i&&M?Gr:U,W=e.translatePosMatrix(q,C,o,s,!0),X=I&&0!==n.paint.get(i?"text-halo-width":"icon-halo-width").constantOr(1),Z={program:d,buffers:O,uniformValues:I?Br(D.kind,g,w,b,e,G,Y,W,i,R,!0):Fr(D.kind,g,w,b,e,G,Y,W,i,R),atlasTexture:F,atlasInterpolation:B,isSDF:I,hasHalo:X};if(k)for(var J=0,K=O.segments.get();J<K.length;J+=1){var Q=K[J];A.push({segments:new t.SegmentVector([Q]),sortKey:Q.sortKey,state:Z})}else A.push({segments:O.segments,sortKey:0,state:Z})}}}k&&A.sort(function(t,e){return t.sortKey-e.sortKey});for(var $=0,tt=A;$<tt.length;$+=1){var et=tt[$],rt=et.state;if(rt.atlasTexture.bind(rt.atlasInterpolation,m.CLAMP_TO_EDGE),rt.isSDF){var nt=rt.uniformValues;rt.hasHalo&&(nt.u_is_halo=1,Jr(rt.buffers,et.segments,n,e,rt.program,T,h,f,nt)),nt.u_is_halo=0}Jr(rt.buffers,et.segments,n,e,rt.program,T,h,f,rt.uniformValues)}}function Jr(t,e,r,n,a,i,o,s,l){var c=n.context,u=c.gl;a.draw(c,u.TRIANGLES,i,o,s,Et.disabled,l,r.id,t.layoutVertexBuffer,t.indexBuffer,e,r.paint,n.transform.zoom,t.programConfigurations.get(r.id),t.dynamicLayoutVertexBuffer,t.opacityVertexBuffer)}function Kr(t,e,r,n,a,i,o){var s,l,c,u,h,f=t.context.gl,p=r.paint.get("fill-pattern"),d=p&&p.constantOr(1),g=r.getCrossfadeParameters();o?(l=d&&!r.getPaintProperty("fill-outline-color")?"fillOutlinePattern":"fillOutline",s=f.LINES):(l=d?"fillPattern":"fill",s=f.TRIANGLES);for(var v=0,m=n;v<m.length;v+=1){var y=m[v],x=e.getTile(y);if(!d||x.patternsLoaded()){var b=x.getBucket(r);if(b){var _=b.programConfigurations.get(r.id),w=t.useProgram(l,_);d&&(t.context.activeTexture.set(f.TEXTURE0),x.imageAtlasTexture.bind(f.LINEAR,f.CLAMP_TO_EDGE),_.updatePatternPaintBuffers(g));var k=p.constantOr(null);if(k&&x.imageAtlas){var T=x.imageAtlas.patternPositions[k.to],M=x.imageAtlas.patternPositions[k.from];T&&M&&_.setConstantPatternPositions(T,M)}var A=t.translatePosMatrix(y.posMatrix,x,r.paint.get("fill-translate"),r.paint.get("fill-translate-anchor"));if(o){u=b.indexBuffer2,h=b.segments2;var S=[f.drawingBufferWidth,f.drawingBufferHeight];c="fillOutlinePattern"===l&&d?xr(A,t,g,x,S):yr(A,S)}else u=b.indexBuffer,h=b.segments,c=d?mr(A,t,g,x):vr(A);w.draw(t.context,s,a,t.stencilModeForClipping(y),i,Et.disabled,c,r.id,b.layoutVertexBuffer,u,h,r.paint,t.transform.zoom,_)}}}}function Qr(t,e,r,n,a,i,o){for(var s=t.context,l=s.gl,c=r.paint.get("fill-extrusion-pattern"),u=c.constantOr(1),h=r.getCrossfadeParameters(),f=r.paint.get("fill-extrusion-opacity"),p=0,d=n;p<d.length;p+=1){var g=d[p],v=e.getTile(g),m=v.getBucket(r);if(m){var y=m.programConfigurations.get(r.id),x=t.useProgram(u?"fillExtrusionPattern":"fillExtrusion",y);u&&(t.context.activeTexture.set(l.TEXTURE0),v.imageAtlasTexture.bind(l.LINEAR,l.CLAMP_TO_EDGE),y.updatePatternPaintBuffers(h));var b=c.constantOr(null);if(b&&v.imageAtlas){var _=v.imageAtlas.patternPositions[b.to],w=v.imageAtlas.patternPositions[b.from];_&&w&&y.setConstantPatternPositions(_,w)}var k=t.translatePosMatrix(g.posMatrix,v,r.paint.get("fill-extrusion-translate"),r.paint.get("fill-extrusion-translate-anchor")),T=r.paint.get("fill-extrusion-vertical-gradient"),M=u?gr(k,t,T,f,g,h,v):dr(k,t,T,f);x.draw(s,s.gl.TRIANGLES,a,i,o,Et.backCCW,M,r.id,m.layoutVertexBuffer,m.indexBuffer,m.segments,r.paint,t.transform.zoom,y)}}}function $r(t,e,r,n,a,i){var o=t.context,s=o.gl,l=e.fbo;if(l){var c=t.useProgram("hillshade");o.activeTexture.set(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,l.colorAttachment.get());var u=Ar(t,e,r);e.maskedBoundsBuffer&&e.maskedIndexBuffer&&e.segments?c.draw(o,s.TRIANGLES,n,a,i,Et.disabled,u,r.id,e.maskedBoundsBuffer,e.maskedIndexBuffer,e.segments):c.draw(o,s.TRIANGLES,n,a,i,Et.disabled,u,r.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}}function tn(e,r,n,a,i,o,s){var l=e.context,c=l.gl;if(r.dem&&r.dem.data){var u=r.dem.dim,h=r.dem.stride,f=r.dem.getPixels();if(l.activeTexture.set(c.TEXTURE1),l.pixelStoreUnpackPremultiplyAlpha.set(!1),r.demTexture=r.demTexture||e.getTileTexture(h),r.demTexture){var p=r.demTexture;p.update(f,{premultiply:!1}),p.bind(c.NEAREST,c.CLAMP_TO_EDGE)}else r.demTexture=new t.Texture(l,f,c.RGBA,{premultiply:!1}),r.demTexture.bind(c.NEAREST,c.CLAMP_TO_EDGE);l.activeTexture.set(c.TEXTURE0);var d=r.fbo;if(!d){var g=new t.Texture(l,{width:u,height:u,data:null},c.RGBA);g.bind(c.LINEAR,c.CLAMP_TO_EDGE),(d=r.fbo=l.createFramebuffer(u,u)).colorAttachment.set(g.texture)}l.bindFramebuffer.set(d.framebuffer),l.viewport.set([0,0,u,u]),e.useProgram("hillshadePrepare").draw(l,c.TRIANGLES,i,o,s,Et.disabled,Sr(r,a),n.id,e.rasterBoundsBuffer,e.quadTriangleIndexBuffer,e.rasterBoundsSegments),r.needsHillshadePrepare=!1}}function en(e,r,n,a,i){var o=a.paint.get("raster-fade-duration");if(o>0){var s=t.browser.now(),l=(s-e.timeAdded)/o,c=r?(s-r.timeAdded)/o:-1,u=n.getSource(),h=i.coveringZoomLevel({tileSize:u.tileSize,roundZoom:u.roundZoom}),f=!r||Math.abs(r.tileID.overscaledZ-h)>Math.abs(e.tileID.overscaledZ-h),p=f&&e.refreshedUponExpiration?1:t.clamp(f?l:1-c,0,1);return e.refreshedUponExpiration&&l>=1&&(e.refreshedUponExpiration=!1),r?{opacity:1,mix:1-p}:{opacity:p,mix:0}}return{opacity:1,mix:0}}function rn(e,r,n){var a=e.context,i=a.gl,o=n.posMatrix,s=e.useProgram("debug"),l=Mt.disabled,c=At.disabled,u=e.colorModeForRenderPass(),h="$debug";s.draw(a,i.LINE_STRIP,l,c,u,Et.disabled,kr(o,t.Color.red),h,e.debugBuffer,e.tileBorderIndexBuffer,e.debugSegments);for(var f=r.getTileByID(n.key).latestRawTileData,p=f&&f.byteLength||0,d=Math.floor(p/1024),g=r.getTile(n).tileSize,v=512/Math.min(g,512),m=function(t,e,r,n){n=n||1;var a,i,o,s,l,c,u,h,f=[];for(a=0,i=t.length;a<i;a++)if(l=nn[t[a]]){for(h=null,o=0,s=l[1].length;o<s;o+=2)-1===l[1][o]&&-1===l[1][o+1]?h=null:(c=e+l[1][o]*n,u=r-l[1][o+1]*n,h&&f.push(h.x,h.y,c,u),h={x:c,y:u});e+=l[0]*n}return f}(n.toString()+" "+d+"kb",50,200*v,5*v),y=new t.StructArrayLayout2i4,x=new t.StructArrayLayout2ui4,b=0;b<m.length;b+=2)y.emplaceBack(m[b],m[b+1]),x.emplaceBack(b,b+1);for(var _=a.createVertexBuffer(y,Fe.members),w=a.createIndexBuffer(x),k=t.SegmentVector.simpleSegment(0,0,y.length/2,y.length/2),T=t.EXTENT/(Math.pow(2,e.transform.zoom-n.overscaledZ)*g*v),M=[],A=-1;A<=1;A++)for(var S=-1;S<=1&&(0!==A||0!==S);S++)M.push([A,S]);for(var E=0;E<M.length;E++){var L=M[E];s.draw(a,i.LINES,l,c,u,Et.disabled,kr(t.translate([],o,[T*L[0],T*L[1],0]),t.Color.white),h,_,w,k)}s.draw(a,i.LINES,l,c,u,Et.disabled,kr(o,t.Color.black),h,_,w,k)}var nn={" ":[16,[]],"!":[10,[5,21,5,7,-1,-1,5,2,4,1,5,0,6,1,5,2]],'"':[16,[4,21,4,14,-1,-1,12,21,12,14]],"#":[21,[11,25,4,-7,-1,-1,17,25,10,-7,-1,-1,4,12,18,12,-1,-1,3,6,17,6]],$:[20,[8,25,8,-4,-1,-1,12,25,12,-4,-1,-1,17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3]],"%":[24,[21,21,3,0,-1,-1,8,21,10,19,10,17,9,15,7,14,5,14,3,16,3,18,4,20,6,21,8,21,10,20,13,19,16,19,19,20,21,21,-1,-1,17,7,15,6,14,4,14,2,16,0,18,0,20,1,21,3,21,5,19,7,17,7]],"&":[26,[23,12,23,13,22,14,21,14,20,13,19,11,17,6,15,3,13,1,11,0,7,0,5,1,4,2,3,4,3,6,4,8,5,9,12,13,13,14,14,16,14,18,13,20,11,21,9,20,8,18,8,16,9,13,11,10,16,3,18,1,20,0,22,0,23,1,23,2]],"'":[10,[5,19,4,20,5,21,6,20,6,18,5,16,4,15]],"(":[14,[11,25,9,23,7,20,5,16,4,11,4,7,5,2,7,-2,9,-5,11,-7]],")":[14,[3,25,5,23,7,20,9,16,10,11,10,7,9,2,7,-2,5,-5,3,-7]],"*":[16,[8,21,8,9,-1,-1,3,18,13,12,-1,-1,13,18,3,12]],"+":[26,[13,18,13,0,-1,-1,4,9,22,9]],",":[10,[6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4]],"-":[26,[4,9,22,9]],".":[10,[5,2,4,1,5,0,6,1,5,2]],"/":[22,[20,25,2,-7]],0:[20,[9,21,6,20,4,17,3,12,3,9,4,4,6,1,9,0,11,0,14,1,16,4,17,9,17,12,16,17,14,20,11,21,9,21]],1:[20,[6,17,8,18,11,21,11,0]],2:[20,[4,16,4,17,5,19,6,20,8,21,12,21,14,20,15,19,16,17,16,15,15,13,13,10,3,0,17,0]],3:[20,[5,21,16,21,10,13,13,13,15,12,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4]],4:[20,[13,21,3,7,18,7,-1,-1,13,21,13,0]],5:[20,[15,21,5,21,4,12,5,13,8,14,11,14,14,13,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4]],6:[20,[16,18,15,20,12,21,10,21,7,20,5,17,4,12,4,7,5,3,7,1,10,0,11,0,14,1,16,3,17,6,17,7,16,10,14,12,11,13,10,13,7,12,5,10,4,7]],7:[20,[17,21,7,0,-1,-1,3,21,17,21]],8:[20,[8,21,5,20,4,18,4,16,5,14,7,13,11,12,14,11,16,9,17,7,17,4,16,2,15,1,12,0,8,0,5,1,4,2,3,4,3,7,4,9,6,11,9,12,13,13,15,14,16,16,16,18,15,20,12,21,8,21]],9:[20,[16,14,15,11,13,9,10,8,9,8,6,9,4,11,3,14,3,15,4,18,6,20,9,21,10,21,13,20,15,18,16,14,16,9,15,4,13,1,10,0,8,0,5,1,4,3]],":":[10,[5,14,4,13,5,12,6,13,5,14,-1,-1,5,2,4,1,5,0,6,1,5,2]],";":[10,[5,14,4,13,5,12,6,13,5,14,-1,-1,6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4]],"<":[24,[20,18,4,9,20,0]],"=":[26,[4,12,22,12,-1,-1,4,6,22,6]],">":[24,[4,18,20,9,4,0]],"?":[18,[3,16,3,17,4,19,5,20,7,21,11,21,13,20,14,19,15,17,15,15,14,13,13,12,9,10,9,7,-1,-1,9,2,8,1,9,0,10,1,9,2]],"@":[27,[18,13,17,15,15,16,12,16,10,15,9,14,8,11,8,8,9,6,11,5,14,5,16,6,17,8,-1,-1,12,16,10,14,9,11,9,8,10,6,11,5,-1,-1,18,16,17,8,17,6,19,5,21,5,23,7,24,10,24,12,23,15,22,17,20,19,18,20,15,21,12,21,9,20,7,19,5,17,4,15,3,12,3,9,4,6,5,4,7,2,9,1,12,0,15,0,18,1,20,2,21,3,-1,-1,19,16,18,8,18,6,19,5]],A:[18,[9,21,1,0,-1,-1,9,21,17,0,-1,-1,4,7,14,7]],B:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,-1,-1,4,11,13,11,16,10,17,9,18,7,18,4,17,2,16,1,13,0,4,0]],C:[21,[18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5]],D:[21,[4,21,4,0,-1,-1,4,21,11,21,14,20,16,18,17,16,18,13,18,8,17,5,16,3,14,1,11,0,4,0]],E:[19,[4,21,4,0,-1,-1,4,21,17,21,-1,-1,4,11,12,11,-1,-1,4,0,17,0]],F:[18,[4,21,4,0,-1,-1,4,21,17,21,-1,-1,4,11,12,11]],G:[21,[18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,18,8,-1,-1,13,8,18,8]],H:[22,[4,21,4,0,-1,-1,18,21,18,0,-1,-1,4,11,18,11]],I:[8,[4,21,4,0]],J:[16,[12,21,12,5,11,2,10,1,8,0,6,0,4,1,3,2,2,5,2,7]],K:[21,[4,21,4,0,-1,-1,18,21,4,7,-1,-1,9,12,18,0]],L:[17,[4,21,4,0,-1,-1,4,0,16,0]],M:[24,[4,21,4,0,-1,-1,4,21,12,0,-1,-1,20,21,12,0,-1,-1,20,21,20,0]],N:[22,[4,21,4,0,-1,-1,4,21,18,0,-1,-1,18,21,18,0]],O:[22,[9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21]],P:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,14,17,12,16,11,13,10,4,10]],Q:[22,[9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21,-1,-1,12,4,18,-2]],R:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,4,11,-1,-1,11,11,18,0]],S:[20,[17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3]],T:[16,[8,21,8,0,-1,-1,1,21,15,21]],U:[22,[4,21,4,6,5,3,7,1,10,0,12,0,15,1,17,3,18,6,18,21]],V:[18,[1,21,9,0,-1,-1,17,21,9,0]],W:[24,[2,21,7,0,-1,-1,12,21,7,0,-1,-1,12,21,17,0,-1,-1,22,21,17,0]],X:[20,[3,21,17,0,-1,-1,17,21,3,0]],Y:[18,[1,21,9,11,9,0,-1,-1,17,21,9,11]],Z:[20,[17,21,3,0,-1,-1,3,21,17,21,-1,-1,3,0,17,0]],"[":[14,[4,25,4,-7,-1,-1,5,25,5,-7,-1,-1,4,25,11,25,-1,-1,4,-7,11,-7]],"\\":[14,[0,21,14,-3]],"]":[14,[9,25,9,-7,-1,-1,10,25,10,-7,-1,-1,3,25,10,25,-1,-1,3,-7,10,-7]],"^":[16,[6,15,8,18,10,15,-1,-1,3,12,8,17,13,12,-1,-1,8,17,8,0]],_:[16,[0,-2,16,-2]],"`":[10,[6,21,5,20,4,18,4,16,5,15,6,16,5,17]],a:[19,[15,14,15,0,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],b:[19,[4,21,4,0,-1,-1,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3]],c:[18,[15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],d:[19,[15,21,15,0,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],e:[18,[3,8,15,8,15,10,14,12,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],f:[12,[10,21,8,21,6,20,5,17,5,0,-1,-1,2,14,9,14]],g:[19,[15,14,15,-2,14,-5,13,-6,11,-7,8,-7,6,-6,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],h:[19,[4,21,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0]],i:[8,[3,21,4,20,5,21,4,22,3,21,-1,-1,4,14,4,0]],j:[10,[5,21,6,20,7,21,6,22,5,21,-1,-1,6,14,6,-3,5,-6,3,-7,1,-7]],k:[17,[4,21,4,0,-1,-1,14,14,4,4,-1,-1,8,8,15,0]],l:[8,[4,21,4,0]],m:[30,[4,14,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0,-1,-1,15,10,18,13,20,14,23,14,25,13,26,10,26,0]],n:[19,[4,14,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0]],o:[19,[8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3,16,6,16,8,15,11,13,13,11,14,8,14]],p:[19,[4,14,4,-7,-1,-1,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3]],q:[19,[15,14,15,-7,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],r:[13,[4,14,4,0,-1,-1,4,8,5,11,7,13,9,14,12,14]],s:[17,[14,11,13,13,10,14,7,14,4,13,3,11,4,9,6,8,11,7,13,6,14,4,14,3,13,1,10,0,7,0,4,1,3,3]],t:[12,[5,21,5,4,6,1,8,0,10,0,-1,-1,2,14,9,14]],u:[19,[4,14,4,4,5,1,7,0,10,0,12,1,15,4,-1,-1,15,14,15,0]],v:[16,[2,14,8,0,-1,-1,14,14,8,0]],w:[22,[3,14,7,0,-1,-1,11,14,7,0,-1,-1,11,14,15,0,-1,-1,19,14,15,0]],x:[17,[3,14,14,0,-1,-1,14,14,3,0]],y:[16,[2,14,8,0,-1,-1,14,14,8,0,6,-4,4,-6,2,-7,1,-7]],z:[17,[14,14,3,0,-1,-1,3,14,14,14,-1,-1,3,0,14,0]],"{":[14,[9,25,7,24,6,23,5,21,5,19,6,17,7,16,8,14,8,12,6,10,-1,-1,7,24,6,22,6,20,7,18,8,17,9,15,9,13,8,11,4,9,8,7,9,5,9,3,8,1,7,0,6,-2,6,-4,7,-6,-1,-1,6,8,8,6,8,4,7,2,6,1,5,-1,5,-3,6,-5,7,-6,9,-7]],"|":[8,[4,25,4,-7]],"}":[14,[5,25,7,24,8,23,9,21,9,19,8,17,7,16,6,14,6,12,8,10,-1,-1,7,24,8,22,8,20,7,18,6,17,5,15,5,13,6,11,10,9,6,7,5,5,5,3,6,1,7,0,8,-2,8,-4,7,-6,-1,-1,8,8,6,6,6,4,7,2,8,1,9,-1,9,-3,8,-5,7,-6,5,-7]],"~":[24,[3,6,3,8,4,11,6,12,8,12,10,11,14,8,16,7,18,7,20,8,21,10,-1,-1,3,8,4,10,6,11,8,11,10,10,14,7,16,6,18,6,20,7,21,10,21,12]]},an={symbol:function(t,e,r,n,a){if("translucent"===t.renderPass){var i=At.disabled,o=t.colorModeForRenderPass();0!==r.paint.get("icon-opacity").constantOr(1)&&Zr(t,e,r,n,!1,r.paint.get("icon-translate"),r.paint.get("icon-translate-anchor"),r.layout.get("icon-rotation-alignment"),r.layout.get("icon-pitch-alignment"),r.layout.get("icon-keep-upright"),i,o,a),0!==r.paint.get("text-opacity").constantOr(1)&&Zr(t,e,r,n,!0,r.paint.get("text-translate"),r.paint.get("text-translate-anchor"),r.layout.get("text-rotation-alignment"),r.layout.get("text-pitch-alignment"),r.layout.get("text-keep-upright"),i,o,a),e.map.showCollisionBoxes&&function(t,e,r,n){Hr(t,e,r,n,!1),Hr(t,e,r,n,!0)}(t,e,r,n)}},circle:function(e,r,n,a){if("translucent"===e.renderPass){var i=n.paint.get("circle-opacity"),o=n.paint.get("circle-stroke-width"),s=n.paint.get("circle-stroke-opacity"),l=void 0!==n.layout.get("circle-sort-key").constantOr(1);if(0!==i.constantOr(1)||0!==o.constantOr(1)&&0!==s.constantOr(1)){for(var c=e.context,u=c.gl,h=e.depthModeForSublayer(0,Mt.ReadOnly),f=At.disabled,p=e.colorModeForRenderPass(),d=[],g=0;g<a.length;g++){var v=a[g],m=r.getTile(v),y=m.getBucket(n);if(y){var x=y.programConfigurations.get(n.id),b={programConfiguration:x,program:e.useProgram("circle",x),layoutVertexBuffer:y.layoutVertexBuffer,indexBuffer:y.indexBuffer,uniformValues:br(e,v,m,n)};if(l)for(var _=0,w=y.segments.get();_<w.length;_+=1){var k=w[_];d.push({segments:new t.SegmentVector([k]),sortKey:k.sortKey,state:b})}else d.push({segments:y.segments,sortKey:0,state:b})}}l&&d.sort(function(t,e){return t.sortKey-e.sortKey});for(var T=0,M=d;T<M.length;T+=1){var A=M[T],S=A.state,E=S.programConfiguration,L=S.program,C=S.layoutVertexBuffer,P=S.indexBuffer,O=S.uniformValues,z=A.segments;L.draw(c,u.TRIANGLES,h,f,p,Et.disabled,O,n.id,C,P,z,n.paint,e.transform.zoom,E)}}}},heatmap:function(e,r,n,a){if(0!==n.paint.get("heatmap-opacity"))if("offscreen"===e.renderPass){var i=e.context,o=i.gl,s=e.depthModeForSublayer(0,Mt.ReadOnly),l=At.disabled,c=new St([o.ONE,o.ONE],t.Color.transparent,[!0,!0,!0,!0]);!function(t,e,r){var n=t.gl;t.activeTexture.set(n.TEXTURE1),t.viewport.set([0,0,e.width/4,e.height/4]);var a=r.heatmapFbo;if(a)n.bindTexture(n.TEXTURE_2D,a.colorAttachment.get()),t.bindFramebuffer.set(a.framebuffer);else{var i=n.createTexture();n.bindTexture(n.TEXTURE_2D,i),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.LINEAR),a=r.heatmapFbo=t.createFramebuffer(e.width/4,e.height/4),function t(e,r,n,a){var i=e.gl;i.texImage2D(i.TEXTURE_2D,0,i.RGBA,r.width/4,r.height/4,0,i.RGBA,e.extTextureHalfFloat?e.extTextureHalfFloat.HALF_FLOAT_OES:i.UNSIGNED_BYTE,null),a.colorAttachment.set(n),e.extTextureHalfFloat&&i.checkFramebufferStatus(i.FRAMEBUFFER)!==i.FRAMEBUFFER_COMPLETE&&(e.extTextureHalfFloat=null,a.colorAttachment.setDirty(),t(e,r,n,a))}(t,e,i,a)}}(i,e,n),i.clear({color:t.Color.transparent});for(var u=0;u<a.length;u++){var h=a[u];if(!r.hasRenderableParent(h)){var f=r.getTile(h),p=f.getBucket(n);if(p){var d=p.programConfigurations.get(n.id),g=e.useProgram("heatmap",d),v=e.transform.zoom;g.draw(i,o.TRIANGLES,s,l,c,Et.disabled,Mr(h.posMatrix,f,v,n.paint.get("heatmap-intensity")),n.id,p.layoutVertexBuffer,p.indexBuffer,p.segments,n.paint,e.transform.zoom,d)}}}i.viewport.set([0,0,e.width,e.height])}else"translucent"===e.renderPass&&(e.context.setColorMode(e.colorModeForRenderPass()),function(e,r){var n=e.context,a=n.gl,i=r.heatmapFbo;if(i){n.activeTexture.set(a.TEXTURE0),a.bindTexture(a.TEXTURE_2D,i.colorAttachment.get()),n.activeTexture.set(a.TEXTURE1);var o=r.colorRampTexture;o||(o=r.colorRampTexture=new t.Texture(n,r.colorRamp,a.RGBA)),o.bind(a.LINEAR,a.CLAMP_TO_EDGE),e.useProgram("heatmapTexture").draw(n,a.TRIANGLES,Mt.disabled,At.disabled,e.colorModeForRenderPass(),Et.disabled,function(e,r,n,a){var i=t.create();t.ortho(i,0,e.width,e.height,0,0,1);var o=e.context.gl;return{u_matrix:i,u_world:[o.drawingBufferWidth,o.drawingBufferHeight],u_image:n,u_color_ramp:a,u_opacity:r.paint.get("heatmap-opacity")}}(e,r,0,1),r.id,e.viewportBuffer,e.quadTriangleIndexBuffer,e.viewportSegments,r.paint,e.transform.zoom)}}(e,n))},line:function(e,r,n,a){if("translucent"===e.renderPass){var i=n.paint.get("line-opacity"),o=n.paint.get("line-width");if(0!==i.constantOr(1)&&0!==o.constantOr(1)){var s=e.depthModeForSublayer(0,Mt.ReadOnly),l=e.colorModeForRenderPass(),c=n.paint.get("line-dasharray"),u=n.paint.get("line-pattern"),h=u.constantOr(1),f=n.paint.get("line-gradient"),p=n.getCrossfadeParameters(),d=c?"lineSDF":h?"linePattern":f?"lineGradient":"line",g=e.context,v=g.gl,m=!0;if(f){g.activeTexture.set(v.TEXTURE0);var y=n.gradientTexture;if(!n.gradient)return;y||(y=n.gradientTexture=new t.Texture(g,n.gradient,v.RGBA)),y.bind(v.LINEAR,v.CLAMP_TO_EDGE)}for(var x=0,b=a;x<b.length;x+=1){var _=b[x],w=r.getTile(_);if(!h||w.patternsLoaded()){var k=w.getBucket(n);if(k){var T=k.programConfigurations.get(n.id),M=e.context.program.get(),A=e.useProgram(d,T),S=m||A.program!==M,E=u.constantOr(null);if(E&&w.imageAtlas){var L=w.imageAtlas.patternPositions[E.to],C=w.imageAtlas.patternPositions[E.from];L&&C&&T.setConstantPatternPositions(L,C)}var P=c?Or(e,w,n,c,p):h?Pr(e,w,n,p):f?Cr(e,w,n):Lr(e,w,n);c&&(S||e.lineAtlas.dirty)?(g.activeTexture.set(v.TEXTURE0),e.lineAtlas.bind(g)):h&&(g.activeTexture.set(v.TEXTURE0),w.imageAtlasTexture.bind(v.LINEAR,v.CLAMP_TO_EDGE),T.updatePatternPaintBuffers(p)),A.draw(g,v.TRIANGLES,s,e.stencilModeForClipping(_),l,Et.disabled,P,n.id,k.layoutVertexBuffer,k.indexBuffer,k.segments,n.paint,e.transform.zoom,T),m=!1}}}}}},fill:function(e,r,n,a){var i=n.paint.get("fill-color"),o=n.paint.get("fill-opacity");if(0!==o.constantOr(1)){var s=e.colorModeForRenderPass(),l=n.paint.get("fill-pattern"),c=e.opaquePassEnabledForLayer()&&!l.constantOr(1)&&1===i.constantOr(t.Color.transparent).a&&1===o.constantOr(0)?"opaque":"translucent";if(e.renderPass===c){var u=e.depthModeForSublayer(1,"opaque"===e.renderPass?Mt.ReadWrite:Mt.ReadOnly);Kr(e,r,n,a,u,s,!1)}if("translucent"===e.renderPass&&n.paint.get("fill-antialias")){var h=e.depthModeForSublayer(n.getPaintProperty("fill-outline-color")?2:0,Mt.ReadOnly);Kr(e,r,n,a,h,s,!0)}}},"fill-extrusion":function(t,e,r,n){var a=r.paint.get("fill-extrusion-opacity");if(0!==a&&"translucent"===t.renderPass){var i=new Mt(t.context.gl.LEQUAL,Mt.ReadWrite,t.depthRangeFor3D);if(1!==a||r.paint.get("fill-extrusion-pattern").constantOr(1))Qr(t,e,r,n,i,At.disabled,St.disabled),Qr(t,e,r,n,i,t.stencilModeFor3D(),t.colorModeForRenderPass());else{var o=t.colorModeForRenderPass();Qr(t,e,r,n,i,At.disabled,o)}}},hillshade:function(t,e,r,n){if("offscreen"===t.renderPass||"translucent"===t.renderPass){for(var a=t.context,i=e.getSource().maxzoom,o=t.depthModeForSublayer(0,Mt.ReadOnly),s=At.disabled,l=t.colorModeForRenderPass(),c=0,u=n;c<u.length;c+=1){var h=u[c],f=e.getTile(h);f.needsHillshadePrepare&&"offscreen"===t.renderPass?tn(t,f,r,i,o,s,l):"translucent"===t.renderPass&&$r(t,f,r,o,s,l)}a.viewport.set([0,0,t.width,t.height])}},raster:function(t,e,r,n){if("translucent"===t.renderPass&&0!==r.paint.get("raster-opacity"))for(var a=t.context,i=a.gl,o=e.getSource(),s=t.useProgram("raster"),l=At.disabled,c=t.colorModeForRenderPass(),u=n.length&&n[0].overscaledZ,h=!t.options.moving,f=0,p=n;f<p.length;f+=1){var d=p[f],g=t.depthModeForSublayer(d.overscaledZ-u,1===r.paint.get("raster-opacity")?Mt.ReadWrite:Mt.ReadOnly,i.LESS),v=e.getTile(d),m=t.transform.calculatePosMatrix(d.toUnwrapped(),h);v.registerFadeDuration(r.paint.get("raster-fade-duration"));var y=e.findLoadedParent(d,0),x=en(v,y,e,r,t.transform),b=void 0,_=void 0,w="nearest"===r.paint.get("raster-resampling")?i.NEAREST:i.LINEAR;a.activeTexture.set(i.TEXTURE0),v.texture.bind(w,i.CLAMP_TO_EDGE,i.LINEAR_MIPMAP_NEAREST),a.activeTexture.set(i.TEXTURE1),y?(y.texture.bind(w,i.CLAMP_TO_EDGE,i.LINEAR_MIPMAP_NEAREST),b=Math.pow(2,y.tileID.overscaledZ-v.tileID.overscaledZ),_=[v.tileID.canonical.x*b%1,v.tileID.canonical.y*b%1]):v.texture.bind(w,i.CLAMP_TO_EDGE,i.LINEAR_MIPMAP_NEAREST);var k=Dr(m,_||[0,0],b||1,x,r);o instanceof P?s.draw(a,i.TRIANGLES,g,l,c,Et.disabled,k,r.id,o.boundsBuffer,t.quadTriangleIndexBuffer,o.boundsSegments):v.maskedBoundsBuffer&&v.maskedIndexBuffer&&v.segments?s.draw(a,i.TRIANGLES,g,l,c,Et.disabled,k,r.id,v.maskedBoundsBuffer,v.maskedIndexBuffer,v.segments,r.paint,t.transform.zoom):s.draw(a,i.TRIANGLES,g,l,c,Et.disabled,k,r.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}},background:function(t,e,r){var n=r.paint.get("background-color"),a=r.paint.get("background-opacity");if(0!==a){var i=t.context,o=i.gl,s=t.transform,l=s.tileSize,c=r.paint.get("background-pattern");if(!t.isPatternMissing(c)){var u=!c&&1===n.a&&1===a&&t.opaquePassEnabledForLayer()?"opaque":"translucent";if(t.renderPass===u){var h=At.disabled,f=t.depthModeForSublayer(0,"opaque"===u?Mt.ReadWrite:Mt.ReadOnly),p=t.colorModeForRenderPass(),d=t.useProgram(c?"backgroundPattern":"background"),g=s.coveringTiles({tileSize:l});c&&(i.activeTexture.set(o.TEXTURE0),t.imageManager.bind(t.context));for(var v=r.getCrossfadeParameters(),m=0,y=g;m<y.length;m+=1){var x=y[m],b=t.transform.calculatePosMatrix(x.toUnwrapped()),_=c?jr(b,a,t,c,{tileID:x,tileSize:l},v):Nr(b,a,n);d.draw(i,o.TRIANGLES,f,h,p,Et.disabled,_,r.id,t.tileExtentBuffer,t.quadTriangleIndexBuffer,t.tileExtentSegments)}}}}},debug:function(t,e,r){for(var n=0;n<r.length;n++)rn(t,e,r[n])},custom:function(t,e,r){var n=t.context,a=r.implementation;if("offscreen"===t.renderPass){var i=a.prerender;i&&(t.setCustomLayerDefaults(),n.setColorMode(t.colorModeForRenderPass()),i.call(a,n.gl,t.transform.customLayerMatrix()),n.setDirty(),t.setBaseState())}else if("translucent"===t.renderPass){t.setCustomLayerDefaults(),n.setColorMode(t.colorModeForRenderPass()),n.setStencilMode(At.disabled);var o="3d"===a.renderingMode?new Mt(t.context.gl.LEQUAL,Mt.ReadWrite,t.depthRangeFor3D):t.depthModeForSublayer(0,Mt.ReadOnly);n.setDepthMode(o),a.render(n.gl,t.transform.customLayerMatrix()),n.setDirty(),t.setBaseState(),n.bindFramebuffer.set(null)}}},on=function(e,r){this.context=new Lt(e),this.transform=r,this._tileTextures={},this.setup(),this.numSublayers=Ct.maxUnderzooming+Ct.maxOverzooming+1,this.depthEpsilon=1/Math.pow(2,16),this.depthRboNeedsClear=!0,this.emptyProgramConfiguration=new t.ProgramConfiguration,this.crossTileSymbolIndex=new Oe};function sn(t,e){if(t.y>e.y){var r=t;t=e,e=r}return{x0:t.x,y0:t.y,x1:e.x,y1:e.y,dx:e.x-t.x,dy:e.y-t.y}}function ln(t,e,r,n,a){var i=Math.max(r,Math.floor(e.y0)),o=Math.min(n,Math.ceil(e.y1));if(t.x0===e.x0&&t.y0===e.y0?t.x0+e.dy/t.dy*t.dx<e.x1:t.x1-e.dy/t.dy*t.dx<e.x0){var s=t;t=e,e=s}for(var l=t.dx/t.dy,c=e.dx/e.dy,u=t.dx>0,h=e.dx<0,f=i;f<o;f++){var p=l*Math.max(0,Math.min(t.dy,f+u-t.y0))+t.x0,d=c*Math.max(0,Math.min(e.dy,f+h-e.y0))+e.x0;a(Math.floor(d),Math.ceil(p),f)}}function cn(t,e,r,n,a,i){var o,s=sn(t,e),l=sn(e,r),c=sn(r,t);s.dy>l.dy&&(o=s,s=l,l=o),s.dy>c.dy&&(o=s,s=c,c=o),l.dy>c.dy&&(o=l,l=c,c=o),s.dy&&ln(c,s,n,a,i),l.dy&&ln(c,l,n,a,i)}on.prototype.resize=function(e,r){var n=this.context.gl;if(this.width=e*t.browser.devicePixelRatio,this.height=r*t.browser.devicePixelRatio,this.context.viewport.set([0,0,this.width,this.height]),this.style)for(var a=0,i=this.style._order;a<i.length;a+=1){var o=i[a];this.style._layers[o].resize()}this.depthRbo&&(n.deleteRenderbuffer(this.depthRbo),this.depthRbo=null)},on.prototype.setup=function(){var e=this.context,r=new t.StructArrayLayout2i4;r.emplaceBack(0,0),r.emplaceBack(t.EXTENT,0),r.emplaceBack(0,t.EXTENT),r.emplaceBack(t.EXTENT,t.EXTENT),this.tileExtentBuffer=e.createVertexBuffer(r,Fe.members),this.tileExtentSegments=t.SegmentVector.simpleSegment(0,0,4,2);var n=new t.StructArrayLayout2i4;n.emplaceBack(0,0),n.emplaceBack(t.EXTENT,0),n.emplaceBack(0,t.EXTENT),n.emplaceBack(t.EXTENT,t.EXTENT),this.debugBuffer=e.createVertexBuffer(n,Fe.members),this.debugSegments=t.SegmentVector.simpleSegment(0,0,4,5);var a=new t.StructArrayLayout4i8;a.emplaceBack(0,0,0,0),a.emplaceBack(t.EXTENT,0,t.EXTENT,0),a.emplaceBack(0,t.EXTENT,0,t.EXTENT),a.emplaceBack(t.EXTENT,t.EXTENT,t.EXTENT,t.EXTENT),this.rasterBoundsBuffer=e.createVertexBuffer(a,t.rasterBoundsAttributes.members),this.rasterBoundsSegments=t.SegmentVector.simpleSegment(0,0,4,2);var i=new t.StructArrayLayout2i4;i.emplaceBack(0,0),i.emplaceBack(1,0),i.emplaceBack(0,1),i.emplaceBack(1,1),this.viewportBuffer=e.createVertexBuffer(i,Fe.members),this.viewportSegments=t.SegmentVector.simpleSegment(0,0,4,2);var o=new t.StructArrayLayout1ui2;o.emplaceBack(0),o.emplaceBack(1),o.emplaceBack(3),o.emplaceBack(2),o.emplaceBack(0),this.tileBorderIndexBuffer=e.createIndexBuffer(o);var s=new t.StructArrayLayout3ui6;s.emplaceBack(0,1,2),s.emplaceBack(2,1,3),this.quadTriangleIndexBuffer=e.createIndexBuffer(s);var l=this.context.gl;this.stencilClearMode=new At({func:l.ALWAYS,mask:0},0,255,l.ZERO,l.ZERO,l.ZERO)},on.prototype.clearStencil=function(){var e=this.context,r=e.gl;this.nextStencilID=1,this.currentStencilSource=void 0;var n=t.create();t.ortho(n,0,this.width,this.height,0,0,1),t.scale(n,n,[r.drawingBufferWidth,r.drawingBufferHeight,0]),this.useProgram("clippingMask").draw(e,r.TRIANGLES,Mt.disabled,this.stencilClearMode,St.disabled,Et.disabled,Tr(n),"$clipping",this.viewportBuffer,this.quadTriangleIndexBuffer,this.viewportSegments)},on.prototype._renderTileClippingMasks=function(t,e){if(this.currentStencilSource!==t.source&&t.isTileClipped()&&e&&e.length){this.currentStencilSource=t.source;var r=this.context,n=r.gl;this.nextStencilID+e.length>256&&this.clearStencil(),r.setColorMode(St.disabled),r.setDepthMode(Mt.disabled);var a=this.useProgram("clippingMask");this._tileClippingMaskIDs={};for(var i=0,o=e;i<o.length;i+=1){var s=o[i],l=this._tileClippingMaskIDs[s.key]=this.nextStencilID++;a.draw(r,n.TRIANGLES,Mt.disabled,new At({func:n.ALWAYS,mask:0},l,255,n.KEEP,n.KEEP,n.REPLACE),St.disabled,Et.disabled,Tr(s.posMatrix),"$clipping",this.tileExtentBuffer,this.quadTriangleIndexBuffer,this.tileExtentSegments)}}},on.prototype.stencilModeFor3D=function(){this.currentStencilSource=void 0,this.nextStencilID+1>256&&this.clearStencil();var t=this.nextStencilID++,e=this.context.gl;return new At({func:e.NOTEQUAL,mask:255},t,255,e.KEEP,e.KEEP,e.REPLACE)},on.prototype.stencilModeForClipping=function(t){var e=this.context.gl;return new At({func:e.EQUAL,mask:255},this._tileClippingMaskIDs[t.key],0,e.KEEP,e.KEEP,e.REPLACE)},on.prototype.colorModeForRenderPass=function(){var e=this.context.gl;return this._showOverdrawInspector?new St([e.CONSTANT_COLOR,e.ONE],new t.Color(1/8,1/8,1/8,0),[!0,!0,!0,!0]):"opaque"===this.renderPass?St.unblended:St.alphaBlended},on.prototype.depthModeForSublayer=function(t,e,r){if(!this.opaquePassEnabledForLayer())return Mt.disabled;var n=1-((1+this.currentLayer)*this.numSublayers+t)*this.depthEpsilon;return new Mt(r||this.context.gl.LEQUAL,e,[n,n])},on.prototype.opaquePassEnabledForLayer=function(){return this.currentLayer<this.opaquePassCutoff},on.prototype.render=function(e,r){this.style=e,this.options=r,this.lineAtlas=e.lineAtlas,this.imageManager=e.imageManager,this.glyphManager=e.glyphManager,this.symbolFadeChange=e.placement.symbolFadeChange(t.browser.now()),this.imageManager.beginFrame();var n=this.style._order,a=this.style.sourceCaches;for(var i in a){var o=a[i];o.used&&o.prepare(this.context)}var s={},l={},c={};for(var u in a){var h=a[u];s[u]=h.getVisibleCoordinates(),l[u]=s[u].slice().reverse(),c[u]=h.getVisibleCoordinates(!0).reverse()}for(var f in a){var p=a[f],d=p.getSource();if("raster"===d.type||"raster-dem"===d.type){for(var g=[],v=0,m=s[f];v<m.length;v+=1){var y=m[v];g.push(p.getTile(y))}Ur(g,this.context)}}this.opaquePassCutoff=1/0;for(var x=0;x<n.length;x++){var b=n[x];if(this.style._layers[b].is3D()){this.opaquePassCutoff=x;break}}this.renderPass="offscreen",this.depthRboNeedsClear=!0;for(var _=0,w=n;_<w.length;_+=1){var k=w[_],T=this.style._layers[k];if(T.hasOffscreenPass()&&!T.isHidden(this.transform.zoom)){var M=l[T.source];("custom"===T.type||M.length)&&this.renderLayer(this,a[T.source],T,M)}}for(this.context.bindFramebuffer.set(null),this.context.clear({color:r.showOverdrawInspector?t.Color.black:t.Color.transparent,depth:1}),this.clearStencil(),this._showOverdrawInspector=r.showOverdrawInspector,this.depthRangeFor3D=[0,1-(e._order.length+2)*this.numSublayers*this.depthEpsilon],this.renderPass="opaque",this.currentLayer=n.length-1;this.currentLayer>=0;this.currentLayer--){var A=this.style._layers[n[this.currentLayer]],S=a[A.source],E=s[A.source];this._renderTileClippingMasks(A,E),this.renderLayer(this,S,A,E)}for(this.renderPass="translucent",this.currentLayer=0;this.currentLayer<n.length;this.currentLayer++){var L=this.style._layers[n[this.currentLayer]],C=a[L.source],P=("symbol"===L.type?c:l)[L.source];this._renderTileClippingMasks(L,s[L.source]),this.renderLayer(this,C,L,P)}if(this.options.showTileBoundaries)for(var O in a){an.debug(this,a[O],s[O]);break}this.context.setDefault()},on.prototype.setupOffscreenDepthRenderbuffer=function(){var t=this.context;this.depthRbo||(this.depthRbo=t.createRenderbuffer(t.gl.DEPTH_COMPONENT16,this.width,this.height))},on.prototype.renderLayer=function(t,e,r,n){r.isHidden(this.transform.zoom)||("background"===r.type||"custom"===r.type||n.length)&&(this.id=r.id,an[r.type](t,e,r,n,this.style.placement.variableOffsets))},on.prototype.translatePosMatrix=function(e,r,n,a,i){if(!n[0]&&!n[1])return e;var o=i?"map"===a?this.transform.angle:0:"viewport"===a?-this.transform.angle:0;if(o){var s=Math.sin(o),l=Math.cos(o);n=[n[0]*l-n[1]*s,n[0]*s+n[1]*l]}var c=[i?n[0]:ce(r,n[0],this.transform.zoom),i?n[1]:ce(r,n[1],this.transform.zoom),0],u=new Float32Array(16);return t.translate(u,e,c),u},on.prototype.saveTileTexture=function(t){var e=this._tileTextures[t.size[0]];e?e.push(t):this._tileTextures[t.size[0]]=[t]},on.prototype.getTileTexture=function(t){var e=this._tileTextures[t];return e&&e.length>0?e.pop():null},on.prototype.isPatternMissing=function(t){if(!t)return!1;var e=this.imageManager.getPattern(t.from),r=this.imageManager.getPattern(t.to);return!e||!r},on.prototype.useProgram=function(t,e){void 0===e&&(e=this.emptyProgramConfiguration),this.cache=this.cache||{};var r=""+t+(e.cacheKey||"")+(this._showOverdrawInspector?"/overdraw":"");return this.cache[r]||(this.cache[r]=new fr(this.context,ur[t],e,Vr[t],this._showOverdrawInspector)),this.cache[r]},on.prototype.setCustomLayerDefaults=function(){this.context.unbindVAO(),this.context.cullFace.setDefault(),this.context.activeTexture.setDefault(),this.context.pixelStoreUnpack.setDefault(),this.context.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.context.pixelStoreUnpackFlipY.setDefault()},on.prototype.setBaseState=function(){var t=this.context.gl;this.context.cullFace.set(!1),this.context.viewport.set([0,0,this.width,this.height]),this.context.blendEquation.set(t.FUNC_ADD)};var un=function(e,r,n){this.tileSize=512,this.maxValidLatitude=85.051129,this._renderWorldCopies=void 0===n||n,this._minZoom=e||0,this._maxZoom=r||22,this.setMaxBounds(),this.width=0,this.height=0,this._center=new t.LngLat(0,0),this.zoom=0,this.angle=0,this._fov=.6435011087932844,this._pitch=0,this._unmodified=!0,this._posMatrixCache={},this._alignedPosMatrixCache={}},hn={minZoom:{configurable:!0},maxZoom:{configurable:!0},renderWorldCopies:{configurable:!0},worldSize:{configurable:!0},centerPoint:{configurable:!0},size:{configurable:!0},bearing:{configurable:!0},pitch:{configurable:!0},fov:{configurable:!0},zoom:{configurable:!0},center:{configurable:!0},unmodified:{configurable:!0},point:{configurable:!0}};un.prototype.clone=function(){var t=new un(this._minZoom,this._maxZoom,this._renderWorldCopies);return t.tileSize=this.tileSize,t.latRange=this.latRange,t.width=this.width,t.height=this.height,t._center=this._center,t.zoom=this.zoom,t.angle=this.angle,t._fov=this._fov,t._pitch=this._pitch,t._unmodified=this._unmodified,t._calcMatrices(),t},hn.minZoom.get=function(){return this._minZoom},hn.minZoom.set=function(t){this._minZoom!==t&&(this._minZoom=t,this.zoom=Math.max(this.zoom,t))},hn.maxZoom.get=function(){return this._maxZoom},hn.maxZoom.set=function(t){this._maxZoom!==t&&(this._maxZoom=t,this.zoom=Math.min(this.zoom,t))},hn.renderWorldCopies.get=function(){return this._renderWorldCopies},hn.renderWorldCopies.set=function(t){void 0===t?t=!0:null===t&&(t=!1),this._renderWorldCopies=t},hn.worldSize.get=function(){return this.tileSize*this.scale},hn.centerPoint.get=function(){return this.size._div(2)},hn.size.get=function(){return new t.Point(this.width,this.height)},hn.bearing.get=function(){return-this.angle/Math.PI*180},hn.bearing.set=function(e){var r=-t.wrap(e,-180,180)*Math.PI/180;this.angle!==r&&(this._unmodified=!1,this.angle=r,this._calcMatrices(),this.rotationMatrix=t.create$2(),t.rotate(this.rotationMatrix,this.rotationMatrix,this.angle))},hn.pitch.get=function(){return this._pitch/Math.PI*180},hn.pitch.set=function(e){var r=t.clamp(e,0,60)/180*Math.PI;this._pitch!==r&&(this._unmodified=!1,this._pitch=r,this._calcMatrices())},hn.fov.get=function(){return this._fov/Math.PI*180},hn.fov.set=function(t){t=Math.max(.01,Math.min(60,t)),this._fov!==t&&(this._unmodified=!1,this._fov=t/180*Math.PI,this._calcMatrices())},hn.zoom.get=function(){return this._zoom},hn.zoom.set=function(t){var e=Math.min(Math.max(t,this.minZoom),this.maxZoom);this._zoom!==e&&(this._unmodified=!1,this._zoom=e,this.scale=this.zoomScale(e),this.tileZoom=Math.floor(e),this.zoomFraction=e-this.tileZoom,this._constrain(),this._calcMatrices())},hn.center.get=function(){return this._center},hn.center.set=function(t){t.lat===this._center.lat&&t.lng===this._center.lng||(this._unmodified=!1,this._center=t,this._constrain(),this._calcMatrices())},un.prototype.coveringZoomLevel=function(t){return(t.roundZoom?Math.round:Math.floor)(this.zoom+this.scaleZoom(this.tileSize/t.tileSize))},un.prototype.getVisibleUnwrappedCoordinates=function(e){var r=[new t.UnwrappedTileID(0,e)];if(this._renderWorldCopies)for(var n=this.pointCoordinate(new t.Point(0,0)),a=this.pointCoordinate(new t.Point(this.width,0)),i=this.pointCoordinate(new t.Point(this.width,this.height)),o=this.pointCoordinate(new t.Point(0,this.height)),s=Math.floor(Math.min(n.x,a.x,i.x,o.x)),l=Math.floor(Math.max(n.x,a.x,i.x,o.x)),c=s-1;c<=l+1;c++)0!==c&&r.push(new t.UnwrappedTileID(c,e));return r},un.prototype.coveringTiles=function(e){var r=this.coveringZoomLevel(e),n=r;if(void 0!==e.minzoom&&r<e.minzoom)return[];void 0!==e.maxzoom&&r>e.maxzoom&&(r=e.maxzoom);var a=t.MercatorCoordinate.fromLngLat(this.center),i=Math.pow(2,r),o=new t.Point(i*a.x-.5,i*a.y-.5);return function(e,r,n,a){void 0===a&&(a=!0);var i=1<<e,o={};function s(r,s,l){var c,u,h,f;if(l>=0&&l<=i)for(c=r;c<s;c++)u=Math.floor(c/i),h=(c%i+i)%i,0!==u&&!0!==a||(f=new t.OverscaledTileID(n,u,e,h,l),o[f.key]=f)}var l=r.map(function(e){return new t.Point(e.x,e.y)._mult(i)});return cn(l[0],l[1],l[2],0,i,s),cn(l[2],l[3],l[0],0,i,s),Object.keys(o).map(function(t){return o[t]})}(r,[this.pointCoordinate(new t.Point(0,0)),this.pointCoordinate(new t.Point(this.width,0)),this.pointCoordinate(new t.Point(this.width,this.height)),this.pointCoordinate(new t.Point(0,this.height))],e.reparseOverscaled?n:r,this._renderWorldCopies).sort(function(t,e){return o.dist(t.canonical)-o.dist(e.canonical)})},un.prototype.resize=function(t,e){this.width=t,this.height=e,this.pixelsToGLUnits=[2/t,-2/e],this._constrain(),this._calcMatrices()},hn.unmodified.get=function(){return this._unmodified},un.prototype.zoomScale=function(t){return Math.pow(2,t)},un.prototype.scaleZoom=function(t){return Math.log(t)/Math.LN2},un.prototype.project=function(e){var r=t.clamp(e.lat,-this.maxValidLatitude,this.maxValidLatitude);return new t.Point(t.mercatorXfromLng(e.lng)*this.worldSize,t.mercatorYfromLat(r)*this.worldSize)},un.prototype.unproject=function(e){return new t.MercatorCoordinate(e.x/this.worldSize,e.y/this.worldSize).toLngLat()},hn.point.get=function(){return this.project(this.center)},un.prototype.setLocationAtPoint=function(e,r){var n=this.pointCoordinate(r),a=this.pointCoordinate(this.centerPoint),i=this.locationCoordinate(e),o=new t.MercatorCoordinate(i.x-(n.x-a.x),i.y-(n.y-a.y));this.center=this.coordinateLocation(o),this._renderWorldCopies&&(this.center=this.center.wrap())},un.prototype.locationPoint=function(t){return this.coordinatePoint(this.locationCoordinate(t))},un.prototype.pointLocation=function(t){return this.coordinateLocation(this.pointCoordinate(t))},un.prototype.locationCoordinate=function(e){return t.MercatorCoordinate.fromLngLat(e)},un.prototype.coordinateLocation=function(t){return t.toLngLat()},un.prototype.pointCoordinate=function(e){var r=[e.x,e.y,0,1],n=[e.x,e.y,1,1];t.transformMat4(r,r,this.pixelMatrixInverse),t.transformMat4(n,n,this.pixelMatrixInverse);var a=r[3],i=n[3],o=r[0]/a,s=n[0]/i,l=r[1]/a,c=n[1]/i,u=r[2]/a,h=n[2]/i,f=u===h?0:(0-u)/(h-u);return new t.MercatorCoordinate(t.number(o,s,f)/this.worldSize,t.number(l,c,f)/this.worldSize)},un.prototype.coordinatePoint=function(e){var r=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(r,r,this.pixelMatrix),new t.Point(r[0]/r[3],r[1]/r[3])},un.prototype.getBounds=function(){return(new t.LngLatBounds).extend(this.pointLocation(new t.Point(0,0))).extend(this.pointLocation(new t.Point(this.width,0))).extend(this.pointLocation(new t.Point(this.width,this.height))).extend(this.pointLocation(new t.Point(0,this.height)))},un.prototype.getMaxBounds=function(){return this.latRange&&2===this.latRange.length&&this.lngRange&&2===this.lngRange.length?new t.LngLatBounds([this.lngRange[0],this.latRange[0]],[this.lngRange[1],this.latRange[1]]):null},un.prototype.setMaxBounds=function(t){t?(this.lngRange=[t.getWest(),t.getEast()],this.latRange=[t.getSouth(),t.getNorth()],this._constrain()):(this.lngRange=null,this.latRange=[-this.maxValidLatitude,this.maxValidLatitude])},un.prototype.calculatePosMatrix=function(e,r){void 0===r&&(r=!1);var n=e.key,a=r?this._alignedPosMatrixCache:this._posMatrixCache;if(a[n])return a[n];var i=e.canonical,o=this.worldSize/this.zoomScale(i.z),s=i.x+Math.pow(2,i.z)*e.wrap,l=t.identity(new Float64Array(16));return t.translate(l,l,[s*o,i.y*o,0]),t.scale(l,l,[o/t.EXTENT,o/t.EXTENT,1]),t.multiply(l,r?this.alignedProjMatrix:this.projMatrix,l),a[n]=new Float32Array(l),a[n]},un.prototype.customLayerMatrix=function(){return this.mercatorMatrix.slice()},un.prototype._constrain=function(){if(this.center&&this.width&&this.height&&!this._constraining){this._constraining=!0;var e,r,n,a,i=-90,o=90,s=-180,l=180,c=this.size,u=this._unmodified;if(this.latRange){var h=this.latRange;i=t.mercatorYfromLat(h[1])*this.worldSize,e=(o=t.mercatorYfromLat(h[0])*this.worldSize)-i<c.y?c.y/(o-i):0}if(this.lngRange){var f=this.lngRange;s=t.mercatorXfromLng(f[0])*this.worldSize,r=(l=t.mercatorXfromLng(f[1])*this.worldSize)-s<c.x?c.x/(l-s):0}var p=this.point,d=Math.max(r||0,e||0);if(d)return this.center=this.unproject(new t.Point(r?(l+s)/2:p.x,e?(o+i)/2:p.y)),this.zoom+=this.scaleZoom(d),this._unmodified=u,void(this._constraining=!1);if(this.latRange){var g=p.y,v=c.y/2;g-v<i&&(a=i+v),g+v>o&&(a=o-v)}if(this.lngRange){var m=p.x,y=c.x/2;m-y<s&&(n=s+y),m+y>l&&(n=l-y)}void 0===n&&void 0===a||(this.center=this.unproject(new t.Point(void 0!==n?n:p.x,void 0!==a?a:p.y))),this._unmodified=u,this._constraining=!1}},un.prototype._calcMatrices=function(){if(this.height){this.cameraToCenterDistance=.5/Math.tan(this._fov/2)*this.height;var e=this._fov/2,r=Math.PI/2+this._pitch,n=Math.sin(e)*this.cameraToCenterDistance/Math.sin(Math.PI-r-e),a=this.point,i=a.x,o=a.y,s=1.01*(Math.cos(Math.PI/2-this._pitch)*n+this.cameraToCenterDistance),l=this.height/50,c=new Float64Array(16);t.perspective(c,this._fov,this.width/this.height,l,s),t.scale(c,c,[1,-1,1]),t.translate(c,c,[0,0,-this.cameraToCenterDistance]),t.rotateX(c,c,this._pitch),t.rotateZ(c,c,this.angle),t.translate(c,c,[-i,-o,0]),this.mercatorMatrix=t.scale([],c,[this.worldSize,this.worldSize,this.worldSize]),t.scale(c,c,[1,1,t.mercatorZfromAltitude(1,this.center.lat)*this.worldSize,1]),this.projMatrix=c;var u=this.width%2/2,h=this.height%2/2,f=Math.cos(this.angle),p=Math.sin(this.angle),d=i-Math.round(i)+f*u+p*h,g=o-Math.round(o)+f*h+p*u,v=new Float64Array(c);if(t.translate(v,v,[d>.5?d-1:d,g>.5?g-1:g,0]),this.alignedProjMatrix=v,c=t.create(),t.scale(c,c,[this.width/2,-this.height/2,1]),t.translate(c,c,[1,-1,0]),this.labelPlaneMatrix=c,c=t.create(),t.scale(c,c,[1,-1,1]),t.translate(c,c,[-1,-1,0]),t.scale(c,c,[2/this.width,2/this.height,1]),this.glCoordMatrix=c,this.pixelMatrix=t.multiply(new Float64Array(16),this.labelPlaneMatrix,this.projMatrix),!(c=t.invert(new Float64Array(16),this.pixelMatrix)))throw new Error("failed to invert matrix");this.pixelMatrixInverse=c,this._posMatrixCache={},this._alignedPosMatrixCache={}}},un.prototype.maxPitchScaleFactor=function(){if(!this.pixelMatrixInverse)return 1;var e=this.pointCoordinate(new t.Point(0,0)),r=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(r,r,this.pixelMatrix)[3]/this.cameraToCenterDistance},un.prototype.getCameraPoint=function(){var e=this._pitch,r=Math.tan(e)*(this.cameraToCenterDistance||1);return this.centerPoint.add(new t.Point(0,r))},un.prototype.getCameraQueryGeometry=function(e){var r=this.getCameraPoint();if(1===e.length)return[e[0],r];for(var n=r.x,a=r.y,i=r.x,o=r.y,s=0,l=e;s<l.length;s+=1){var c=l[s];n=Math.min(n,c.x),a=Math.min(a,c.y),i=Math.max(i,c.x),o=Math.max(o,c.y)}return[new t.Point(n,a),new t.Point(i,a),new t.Point(i,o),new t.Point(n,o),new t.Point(n,a)]},Object.defineProperties(un.prototype,hn);var fn=function(){var e,r,n,a;t.bindAll(["_onHashChange","_updateHash"],this),this._updateHash=(e=this._updateHashUnthrottled.bind(this),300,r=!1,n=null,a=function(){n=null,r&&(e(),n=setTimeout(a,300),r=!1)},function(){return r=!0,n||a(),n})};fn.prototype.addTo=function(e){return this._map=e,t.window.addEventListener("hashchange",this._onHashChange,!1),this._map.on("moveend",this._updateHash),this},fn.prototype.remove=function(){return t.window.removeEventListener("hashchange",this._onHashChange,!1),this._map.off("moveend",this._updateHash),clearTimeout(this._updateHash()),delete this._map,this},fn.prototype.getHashString=function(t){var e=this._map.getCenter(),r=Math.round(100*this._map.getZoom())/100,n=Math.ceil((r*Math.LN2+Math.log(512/360/.5))/Math.LN10),a=Math.pow(10,n),i=Math.round(e.lng*a)/a,o=Math.round(e.lat*a)/a,s=this._map.getBearing(),l=this._map.getPitch(),c="";return c+=t?"#/"+i+"/"+o+"/"+r:"#"+r+"/"+o+"/"+i,(s||l)&&(c+="/"+Math.round(10*s)/10),l&&(c+="/"+Math.round(l)),c},fn.prototype._onHashChange=function(){var e=t.window.location.hash.replace("#","").split("/");return e.length>=3&&(this._map.jumpTo({center:[+e[2],+e[1]],zoom:+e[0],bearing:+(e[3]||0),pitch:+(e[4]||0)}),!0)},fn.prototype._updateHashUnthrottled=function(){var e=this.getHashString();try{t.window.history.replaceState(t.window.history.state,"",e)}catch(t){}};var pn=function(e){function n(n,a,i,o){void 0===o&&(o={});var s=r.mousePos(a.getCanvasContainer(),i),l=a.unproject(s);e.call(this,n,t.extend({point:s,lngLat:l,originalEvent:i},o)),this._defaultPrevented=!1,this.target=a}e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n;var a={defaultPrevented:{configurable:!0}};return n.prototype.preventDefault=function(){this._defaultPrevented=!0},a.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(n.prototype,a),n}(t.Event),dn=function(e){function n(n,a,i){var o=r.touchPos(a.getCanvasContainer(),i),s=o.map(function(t){return a.unproject(t)}),l=o.reduce(function(t,e,r,n){return t.add(e.div(n.length))},new t.Point(0,0)),c=a.unproject(l);e.call(this,n,{points:o,point:l,lngLats:s,lngLat:c,originalEvent:i}),this._defaultPrevented=!1}e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n;var a={defaultPrevented:{configurable:!0}};return n.prototype.preventDefault=function(){this._defaultPrevented=!0},a.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(n.prototype,a),n}(t.Event),gn=function(t){function e(e,r,n){t.call(this,e,{originalEvent:n}),this._defaultPrevented=!1}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={defaultPrevented:{configurable:!0}};return e.prototype.preventDefault=function(){this._defaultPrevented=!0},r.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(e.prototype,r),e}(t.Event),vn=function(e){this._map=e,this._el=e.getCanvasContainer(),this._delta=0,this._defaultZoomRate=.01,this._wheelZoomRate=1/450,t.bindAll(["_onWheel","_onTimeout","_onScrollFrame","_onScrollFinished"],this)};vn.prototype.setZoomRate=function(t){this._defaultZoomRate=t},vn.prototype.setWheelZoomRate=function(t){this._wheelZoomRate=t},vn.prototype.isEnabled=function(){return!!this._enabled},vn.prototype.isActive=function(){return!!this._active},vn.prototype.isZooming=function(){return!!this._zooming},vn.prototype.enable=function(t){this.isEnabled()||(this._enabled=!0,this._aroundCenter=t&&"center"===t.around)},vn.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},vn.prototype.onWheel=function(e){if(this.isEnabled()){var r=e.deltaMode===t.window.WheelEvent.DOM_DELTA_LINE?40*e.deltaY:e.deltaY,n=t.browser.now(),a=n-(this._lastWheelEventTime||0);this._lastWheelEventTime=n,0!==r&&r%4.000244140625==0?this._type="wheel":0!==r&&Math.abs(r)<4?this._type="trackpad":a>400?(this._type=null,this._lastValue=r,this._timeout=setTimeout(this._onTimeout,40,e)):this._type||(this._type=Math.abs(a*r)<200?"trackpad":"wheel",this._timeout&&(clearTimeout(this._timeout),this._timeout=null,r+=this._lastValue)),e.shiftKey&&r&&(r/=4),this._type&&(this._lastWheelEvent=e,this._delta-=r,this.isActive()||this._start(e)),e.preventDefault()}},vn.prototype._onTimeout=function(t){this._type="wheel",this._delta-=this._lastValue,this.isActive()||this._start(t)},vn.prototype._start=function(e){if(this._delta){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),this._active=!0,this.isZooming()||(this._zooming=!0,this._map.fire(new t.Event("movestart",{originalEvent:e})),this._map.fire(new t.Event("zoomstart",{originalEvent:e}))),this._finishTimeout&&clearTimeout(this._finishTimeout);var n=r.mousePos(this._el,e);this._around=t.LngLat.convert(this._aroundCenter?this._map.getCenter():this._map.unproject(n)),this._aroundPoint=this._map.transform.locationPoint(this._around),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onScrollFrame))}},vn.prototype._onScrollFrame=function(){var e=this;if(this._frameId=null,this.isActive()){var r=this._map.transform;if(0!==this._delta){var n="wheel"===this._type&&Math.abs(this._delta)>4.000244140625?this._wheelZoomRate:this._defaultZoomRate,a=2/(1+Math.exp(-Math.abs(this._delta*n)));this._delta<0&&0!==a&&(a=1/a);var i="number"==typeof this._targetZoom?r.zoomScale(this._targetZoom):r.scale;this._targetZoom=Math.min(r.maxZoom,Math.max(r.minZoom,r.scaleZoom(i*a))),"wheel"===this._type&&(this._startZoom=r.zoom,this._easing=this._smoothOutEasing(200)),this._delta=0}var o="number"==typeof this._targetZoom?this._targetZoom:r.zoom,s=this._startZoom,l=this._easing,c=!1;if("wheel"===this._type&&s&&l){var u=Math.min((t.browser.now()-this._lastWheelEventTime)/200,1),h=l(u);r.zoom=t.number(s,o,h),u<1?this._frameId||(this._frameId=this._map._requestRenderFrame(this._onScrollFrame)):c=!0}else r.zoom=o,c=!0;r.setLocationAtPoint(this._around,this._aroundPoint),this._map.fire(new t.Event("move",{originalEvent:this._lastWheelEvent})),this._map.fire(new t.Event("zoom",{originalEvent:this._lastWheelEvent})),c&&(this._active=!1,this._finishTimeout=setTimeout(function(){e._zooming=!1,e._map.fire(new t.Event("zoomend",{originalEvent:e._lastWheelEvent})),e._map.fire(new t.Event("moveend",{originalEvent:e._lastWheelEvent})),delete e._targetZoom},200))}},vn.prototype._smoothOutEasing=function(e){var r=t.ease;if(this._prevEase){var n=this._prevEase,a=(t.browser.now()-n.start)/n.duration,i=n.easing(a+.01)-n.easing(a),o=.27/Math.sqrt(i*i+1e-4)*.01,s=Math.sqrt(.0729-o*o);r=t.bezier(o,s,.25,1)}return this._prevEase={start:t.browser.now(),duration:e,easing:r},r};var mn=function(e,r){this._map=e,this._el=e.getCanvasContainer(),this._container=e.getContainer(),this._clickTolerance=r.clickTolerance||1,t.bindAll(["_onMouseMove","_onMouseUp","_onKeyDown"],this)};mn.prototype.isEnabled=function(){return!!this._enabled},mn.prototype.isActive=function(){return!!this._active},mn.prototype.enable=function(){this.isEnabled()||(this._enabled=!0)},mn.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},mn.prototype.onMouseDown=function(e){this.isEnabled()&&e.shiftKey&&0===e.button&&(t.window.document.addEventListener("mousemove",this._onMouseMove,!1),t.window.document.addEventListener("keydown",this._onKeyDown,!1),t.window.document.addEventListener("mouseup",this._onMouseUp,!1),r.disableDrag(),this._startPos=this._lastPos=r.mousePos(this._el,e),this._active=!0)},mn.prototype._onMouseMove=function(t){var e=r.mousePos(this._el,t);if(!(this._lastPos.equals(e)||!this._box&&e.dist(this._startPos)<this._clickTolerance)){var n=this._startPos;this._lastPos=e,this._box||(this._box=r.create("div","mapboxgl-boxzoom",this._container),this._container.classList.add("mapboxgl-crosshair"),this._fireEvent("boxzoomstart",t));var a=Math.min(n.x,e.x),i=Math.max(n.x,e.x),o=Math.min(n.y,e.y),s=Math.max(n.y,e.y);r.setTransform(this._box,"translate("+a+"px,"+o+"px)"),this._box.style.width=i-a+"px",this._box.style.height=s-o+"px"}},mn.prototype._onMouseUp=function(e){if(0===e.button){var n=this._startPos,a=r.mousePos(this._el,e);this._finish(),r.suppressClick(),n.x===a.x&&n.y===a.y?this._fireEvent("boxzoomcancel",e):this._map.fitScreenCoordinates(n,a,this._map.getBearing(),{linear:!0}).fire(new t.Event("boxzoomend",{originalEvent:e}))}},mn.prototype._onKeyDown=function(t){27===t.keyCode&&(this._finish(),this._fireEvent("boxzoomcancel",t))},mn.prototype._finish=function(){this._active=!1,t.window.document.removeEventListener("mousemove",this._onMouseMove,!1),t.window.document.removeEventListener("keydown",this._onKeyDown,!1),t.window.document.removeEventListener("mouseup",this._onMouseUp,!1),this._container.classList.remove("mapboxgl-crosshair"),this._box&&(r.remove(this._box),this._box=null),r.enableDrag(),delete this._startPos,delete this._lastPos},mn.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,{originalEvent:r}))};var yn=t.bezier(0,0,.25,1),xn=function(e,r){this._map=e,this._el=r.element||e.getCanvasContainer(),this._state="disabled",this._button=r.button||"right",this._bearingSnap=r.bearingSnap||0,this._pitchWithRotate=!1!==r.pitchWithRotate,t.bindAll(["onMouseDown","_onMouseMove","_onMouseUp","_onBlur","_onDragFrame"],this)};xn.prototype.isEnabled=function(){return"disabled"!==this._state},xn.prototype.isActive=function(){return"active"===this._state},xn.prototype.enable=function(){this.isEnabled()||(this._state="enabled")},xn.prototype.disable=function(){if(this.isEnabled())switch(this._state){case"active":this._state="disabled",this._unbind(),this._deactivate(),this._fireEvent("rotateend"),this._pitchWithRotate&&this._fireEvent("pitchend"),this._fireEvent("moveend");break;case"pending":this._state="disabled",this._unbind();break;default:this._state="disabled"}},xn.prototype.onMouseDown=function(e){if("enabled"===this._state){var n="touchstart"===e.type;if(n)this._startTime=Date.now();else if("right"===this._button){if(this._eventButton=r.mouseButton(e),this._eventButton!==(e.ctrlKey?0:2))return}else{if(e.ctrlKey||0!==r.mouseButton(e))return;this._eventButton=0}r.disableDrag(),n?(t.window.document.addEventListener("touchmove",this._onMouseMove,{capture:!0}),t.window.document.addEventListener("touchend",this._onMouseUp)):(t.window.document.addEventListener("mousemove",this._onMouseMove,{capture:!0}),t.window.document.addEventListener("mouseup",this._onMouseUp)),t.window.addEventListener("blur",this._onBlur),this._state="pending",this._inertia=[[t.browser.now(),this._map.getBearing()]],this._startPos=this._prevPos=this._lastPos=r.mousePos(this._el,e),this._center=this._map.transform.centerPoint,e.preventDefault()}},xn.prototype._onMouseMove=function(t){var e=r.mousePos(this._el,t);this._lastPos.equals(e)||(this._lastMoveEvent=t,this._lastPos=e,"pending"===this._state&&(this._state="active",this._fireEvent("rotatestart",t),this._fireEvent("movestart",t),this._pitchWithRotate&&this._fireEvent("pitchstart",t)),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onDragFrame)))},xn.prototype._onDragFrame=function(){this._frameId=null;var e=this._lastMoveEvent;if(e){var r=this._map.transform,n=this._prevPos,a=this._lastPos,i=.8*(n.x-a.x),o=-.5*(n.y-a.y),s=r.bearing-i,l=r.pitch-o,c=this._inertia,u=c[c.length-1];this._drainInertiaBuffer(),c.push([t.browser.now(),this._map._normalizeBearing(s,u[1])]),r.bearing=s,this._pitchWithRotate&&(this._fireEvent("pitch",e),r.pitch=l),this._fireEvent("rotate",e),this._fireEvent("move",e),delete this._lastMoveEvent,this._prevPos=this._lastPos}},xn.prototype._onMouseUp=function(t){if("touchend"===t.type&&this._startPos===this._lastPos&&Date.now()-this._startTime<300&&this._el.click(),r.mouseButton(t)===this._eventButton)switch(this._state){case"active":this._state="enabled",r.suppressClick(),this._unbind(),this._deactivate(),this._inertialRotate(t);break;case"pending":this._state="enabled",this._unbind()}},xn.prototype._onBlur=function(t){switch(this._state){case"active":this._state="enabled",this._unbind(),this._deactivate(),this._fireEvent("rotateend",t),this._pitchWithRotate&&this._fireEvent("pitchend",t),this._fireEvent("moveend",t);break;case"pending":this._state="enabled",this._unbind()}},xn.prototype._unbind=function(){t.window.document.removeEventListener("mousemove",this._onMouseMove,{capture:!0}),t.window.document.removeEventListener("mouseup",this._onMouseUp),t.window.document.removeEventListener("touchmove",this._onMouseMove,{capture:!0}),t.window.document.removeEventListener("touchend",this._onMouseUp),t.window.removeEventListener("blur",this._onBlur),r.enableDrag()},xn.prototype._deactivate=function(){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._lastMoveEvent,delete this._startPos,delete this._prevPos,delete this._lastPos},xn.prototype._inertialRotate=function(t){var e=this;this._fireEvent("rotateend",t),this._drainInertiaBuffer();var r=this._map,n=r.getBearing(),a=this._inertia,i=function(){Math.abs(n)<e._bearingSnap?r.resetNorth({noMoveStart:!0},{originalEvent:t}):e._fireEvent("moveend",t),e._pitchWithRotate&&e._fireEvent("pitchend",t)};if(a.length<2)i();else{var o=a[0],s=a[a.length-1],l=a[a.length-2],c=r._normalizeBearing(n,l[1]),u=s[1]-o[1],h=u<0?-1:1,f=(s[0]-o[0])/1e3;if(0!==u&&0!==f){var p=Math.abs(u*(.25/f));p>180&&(p=180);var d=p/180;c+=h*p*(d/2),Math.abs(r._normalizeBearing(c,0))<this._bearingSnap&&(c=r._normalizeBearing(0,c)),r.rotateTo(c,{duration:1e3*d,easing:yn,noMoveStart:!0},{originalEvent:t})}else i()}},xn.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,r?{originalEvent:r}:{}))},xn.prototype._drainInertiaBuffer=function(){for(var e=this._inertia,r=t.browser.now();e.length>0&&r-e[0][0]>160;)e.shift()};var bn=t.bezier(0,0,.3,1),_n=function(e,r){this._map=e,this._el=e.getCanvasContainer(),this._state="disabled",this._clickTolerance=r.clickTolerance||1,t.bindAll(["_onMove","_onMouseUp","_onTouchEnd","_onBlur","_onDragFrame"],this)};_n.prototype.isEnabled=function(){return"disabled"!==this._state},_n.prototype.isActive=function(){return"active"===this._state},_n.prototype.enable=function(){this.isEnabled()||(this._el.classList.add("mapboxgl-touch-drag-pan"),this._state="enabled")},_n.prototype.disable=function(){if(this.isEnabled())switch(this._el.classList.remove("mapboxgl-touch-drag-pan"),this._state){case"active":this._state="disabled",this._unbind(),this._deactivate(),this._fireEvent("dragend"),this._fireEvent("moveend");break;case"pending":this._state="disabled",this._unbind();break;default:this._state="disabled"}},_n.prototype.onMouseDown=function(e){"enabled"===this._state&&(e.ctrlKey||0!==r.mouseButton(e)||(r.addEventListener(t.window.document,"mousemove",this._onMove,{capture:!0}),r.addEventListener(t.window.document,"mouseup",this._onMouseUp),this._start(e)))},_n.prototype.onTouchStart=function(e){"enabled"===this._state&&(e.touches.length>1||(r.addEventListener(t.window.document,"touchmove",this._onMove,{capture:!0,passive:!1}),r.addEventListener(t.window.document,"touchend",this._onTouchEnd),this._start(e)))},_n.prototype._start=function(e){t.window.addEventListener("blur",this._onBlur),this._state="pending",this._startPos=this._mouseDownPos=this._prevPos=this._lastPos=r.mousePos(this._el,e),this._inertia=[[t.browser.now(),this._startPos]]},_n.prototype._onMove=function(e){e.preventDefault();var n=r.mousePos(this._el,e);this._lastPos.equals(n)||"pending"===this._state&&n.dist(this._mouseDownPos)<this._clickTolerance||(this._lastMoveEvent=e,this._lastPos=n,this._drainInertiaBuffer(),this._inertia.push([t.browser.now(),this._lastPos]),"pending"===this._state&&(this._state="active",this._fireEvent("dragstart",e),this._fireEvent("movestart",e)),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onDragFrame)))},_n.prototype._onDragFrame=function(){this._frameId=null;var t=this._lastMoveEvent;if(t){var e=this._map.transform;e.setLocationAtPoint(e.pointLocation(this._prevPos),this._lastPos),this._fireEvent("drag",t),this._fireEvent("move",t),this._prevPos=this._lastPos,delete this._lastMoveEvent}},_n.prototype._onMouseUp=function(t){if(0===r.mouseButton(t))switch(this._state){case"active":this._state="enabled",r.suppressClick(),this._unbind(),this._deactivate(),this._inertialPan(t);break;case"pending":this._state="enabled",this._unbind()}},_n.prototype._onTouchEnd=function(t){switch(this._state){case"active":this._state="enabled",this._unbind(),this._deactivate(),this._inertialPan(t);break;case"pending":this._state="enabled",this._unbind()}},_n.prototype._onBlur=function(t){switch(this._state){case"active":this._state="enabled",this._unbind(),this._deactivate(),this._fireEvent("dragend",t),this._fireEvent("moveend",t);break;case"pending":this._state="enabled",this._unbind()}},_n.prototype._unbind=function(){r.removeEventListener(t.window.document,"touchmove",this._onMove,{capture:!0,passive:!1}),r.removeEventListener(t.window.document,"touchend",this._onTouchEnd),r.removeEventListener(t.window.document,"mousemove",this._onMove,{capture:!0}),r.removeEventListener(t.window.document,"mouseup",this._onMouseUp),r.removeEventListener(t.window,"blur",this._onBlur)},_n.prototype._deactivate=function(){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._lastMoveEvent,delete this._startPos,delete this._prevPos,delete this._mouseDownPos,delete this._lastPos},_n.prototype._inertialPan=function(t){this._fireEvent("dragend",t),this._drainInertiaBuffer();var e=this._inertia;if(e.length<2)this._fireEvent("moveend",t);else{var r=e[e.length-1],n=e[0],a=r[1].sub(n[1]),i=(r[0]-n[0])/1e3;if(0===i||r[1].equals(n[1]))this._fireEvent("moveend",t);else{var o=a.mult(.3/i),s=o.mag();s>1400&&(s=1400,o._unit()._mult(s));var l=s/750,c=o.mult(-l/2);this._map.panBy(c,{duration:1e3*l,easing:bn,noMoveStart:!0},{originalEvent:t})}}},_n.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,r?{originalEvent:r}:{}))},_n.prototype._drainInertiaBuffer=function(){for(var e=this._inertia,r=t.browser.now();e.length>0&&r-e[0][0]>160;)e.shift()};var wn=function(e){this._map=e,this._el=e.getCanvasContainer(),t.bindAll(["_onKeyDown"],this)};function kn(t){return t*(2-t)}wn.prototype.isEnabled=function(){return!!this._enabled},wn.prototype.enable=function(){this.isEnabled()||(this._el.addEventListener("keydown",this._onKeyDown,!1),this._enabled=!0)},wn.prototype.disable=function(){this.isEnabled()&&(this._el.removeEventListener("keydown",this._onKeyDown),this._enabled=!1)},wn.prototype._onKeyDown=function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var e=0,r=0,n=0,a=0,i=0;switch(t.keyCode){case 61:case 107:case 171:case 187:e=1;break;case 189:case 109:case 173:e=-1;break;case 37:t.shiftKey?r=-1:(t.preventDefault(),a=-1);break;case 39:t.shiftKey?r=1:(t.preventDefault(),a=1);break;case 38:t.shiftKey?n=1:(t.preventDefault(),i=-1);break;case 40:t.shiftKey?n=-1:(i=1,t.preventDefault());break;default:return}var o=this._map,s=o.getZoom(),l={duration:300,delayEndEvents:500,easing:kn,zoom:e?Math.round(s)+e*(t.shiftKey?2:1):s,bearing:o.getBearing()+15*r,pitch:o.getPitch()+10*n,offset:[100*-a,100*-i],center:o.getCenter()};o.easeTo(l,{originalEvent:t})}};var Tn=function(e){this._map=e,t.bindAll(["_onDblClick","_onZoomEnd"],this)};Tn.prototype.isEnabled=function(){return!!this._enabled},Tn.prototype.isActive=function(){return!!this._active},Tn.prototype.enable=function(){this.isEnabled()||(this._enabled=!0)},Tn.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},Tn.prototype.onTouchStart=function(t){var e=this;if(this.isEnabled()&&!(t.points.length>1))if(this._tapped){var r=t.points[0],n=this._tappedPoint;if(n&&n.dist(r)<=30){t.originalEvent.preventDefault();var a=function(){e._tapped&&e._zoom(t),e._map.off("touchcancel",i),e._resetTapped()},i=function(){e._map.off("touchend",a),e._resetTapped()};this._map.once("touchend",a),this._map.once("touchcancel",i)}else this._resetTapped()}else this._tappedPoint=t.points[0],this._tapped=setTimeout(function(){e._tapped=null,e._tappedPoint=null},300)},Tn.prototype._resetTapped=function(){clearTimeout(this._tapped),this._tapped=null,this._tappedPoint=null},Tn.prototype.onDblClick=function(t){this.isEnabled()&&(t.originalEvent.preventDefault(),this._zoom(t))},Tn.prototype._zoom=function(t){this._active=!0,this._map.on("zoomend",this._onZoomEnd),this._map.zoomTo(this._map.getZoom()+(t.originalEvent.shiftKey?-1:1),{around:t.lngLat},t)},Tn.prototype._onZoomEnd=function(){this._active=!1,this._map.off("zoomend",this._onZoomEnd)};var Mn=t.bezier(0,0,.15,1),An=function(e){this._map=e,this._el=e.getCanvasContainer(),t.bindAll(["_onMove","_onEnd","_onTouchFrame"],this)};An.prototype.isEnabled=function(){return!!this._enabled},An.prototype.enable=function(t){this.isEnabled()||(this._el.classList.add("mapboxgl-touch-zoom-rotate"),this._enabled=!0,this._aroundCenter=!!t&&"center"===t.around)},An.prototype.disable=function(){this.isEnabled()&&(this._el.classList.remove("mapboxgl-touch-zoom-rotate"),this._enabled=!1)},An.prototype.disableRotation=function(){this._rotationDisabled=!0},An.prototype.enableRotation=function(){this._rotationDisabled=!1},An.prototype.onStart=function(e){if(this.isEnabled()&&2===e.touches.length){var n=r.mousePos(this._el,e.touches[0]),a=r.mousePos(this._el,e.touches[1]),i=n.add(a).div(2);this._startVec=n.sub(a),this._startAround=this._map.transform.pointLocation(i),this._gestureIntent=void 0,this._inertia=[],r.addEventListener(t.window.document,"touchmove",this._onMove,{passive:!1}),r.addEventListener(t.window.document,"touchend",this._onEnd)}},An.prototype._getTouchEventData=function(t){var e=r.mousePos(this._el,t.touches[0]),n=r.mousePos(this._el,t.touches[1]),a=e.sub(n);return{vec:a,center:e.add(n).div(2),scale:a.mag()/this._startVec.mag(),bearing:this._rotationDisabled?0:180*a.angleWith(this._startVec)/Math.PI}},An.prototype._onMove=function(e){if(2===e.touches.length){var r=this._getTouchEventData(e),n=r.vec,a=r.scale,i=r.bearing;if(!this._gestureIntent){var o=this._rotationDisabled&&1!==a||Math.abs(1-a)>.15;Math.abs(i)>10?this._gestureIntent="rotate":o&&(this._gestureIntent="zoom"),this._gestureIntent&&(this._map.fire(new t.Event(this._gestureIntent+"start",{originalEvent:e})),this._map.fire(new t.Event("movestart",{originalEvent:e})),this._startVec=n)}this._lastTouchEvent=e,this._frameId||(this._frameId=this._map._requestRenderFrame(this._onTouchFrame)),e.preventDefault()}},An.prototype._onTouchFrame=function(){this._frameId=null;var e=this._gestureIntent;if(e){var r=this._map.transform;this._startScale||(this._startScale=r.scale,this._startBearing=r.bearing);var n=this._getTouchEventData(this._lastTouchEvent),a=n.center,i=n.bearing,o=n.scale,s=r.pointLocation(a),l=r.locationPoint(s);"rotate"===e&&(r.bearing=this._startBearing+i),r.zoom=r.scaleZoom(this._startScale*o),r.setLocationAtPoint(this._startAround,l),this._map.fire(new t.Event(e,{originalEvent:this._lastTouchEvent})),this._map.fire(new t.Event("move",{originalEvent:this._lastTouchEvent})),this._drainInertiaBuffer(),this._inertia.push([t.browser.now(),o,a])}},An.prototype._onEnd=function(e){r.removeEventListener(t.window.document,"touchmove",this._onMove,{passive:!1}),r.removeEventListener(t.window.document,"touchend",this._onEnd);var n=this._gestureIntent,a=this._startScale;if(this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._gestureIntent,delete this._startScale,delete this._startBearing,delete this._lastTouchEvent,n){this._map.fire(new t.Event(n+"end",{originalEvent:e})),this._drainInertiaBuffer();var i=this._inertia,o=this._map;if(i.length<2)o.snapToNorth({},{originalEvent:e});else{var s=i[i.length-1],l=i[0],c=o.transform.scaleZoom(a*s[1]),u=o.transform.scaleZoom(a*l[1]),h=c-u,f=(s[0]-l[0])/1e3,p=s[2];if(0!==f&&c!==u){var d=.15*h/f;Math.abs(d)>2.5&&(d=d>0?2.5:-2.5);var g=1e3*Math.abs(d/(12*.15)),v=c+d*g/2e3;v<0&&(v=0),o.easeTo({zoom:v,duration:g,easing:Mn,around:this._aroundCenter?o.getCenter():o.unproject(p),noMoveStart:!0},{originalEvent:e})}else o.snapToNorth({},{originalEvent:e})}}},An.prototype._drainInertiaBuffer=function(){for(var e=this._inertia,r=t.browser.now();e.length>2&&r-e[0][0]>160;)e.shift()};var Sn={scrollZoom:vn,boxZoom:mn,dragRotate:xn,dragPan:_n,keyboard:wn,doubleClickZoom:Tn,touchZoomRotate:An},En=function(e){function r(r,n){e.call(this),this._moving=!1,this._zooming=!1,this.transform=r,this._bearingSnap=n.bearingSnap,t.bindAll(["_renderFrameCallback"],this)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getCenter=function(){return new t.LngLat(this.transform.center.lng,this.transform.center.lat)},r.prototype.setCenter=function(t,e){return this.jumpTo({center:t},e)},r.prototype.panBy=function(e,r,n){return e=t.Point.convert(e).mult(-1),this.panTo(this.transform.center,t.extend({offset:e},r),n)},r.prototype.panTo=function(e,r,n){return this.easeTo(t.extend({center:e},r),n)},r.prototype.getZoom=function(){return this.transform.zoom},r.prototype.setZoom=function(t,e){return this.jumpTo({zoom:t},e),this},r.prototype.zoomTo=function(e,r,n){return this.easeTo(t.extend({zoom:e},r),n)},r.prototype.zoomIn=function(t,e){return this.zoomTo(this.getZoom()+1,t,e),this},r.prototype.zoomOut=function(t,e){return this.zoomTo(this.getZoom()-1,t,e),this},r.prototype.getBearing=function(){return this.transform.bearing},r.prototype.setBearing=function(t,e){return this.jumpTo({bearing:t},e),this},r.prototype.rotateTo=function(e,r,n){return this.easeTo(t.extend({bearing:e},r),n)},r.prototype.resetNorth=function(e,r){return this.rotateTo(0,t.extend({duration:1e3},e),r),this},r.prototype.resetNorthPitch=function(e,r){return this.easeTo(t.extend({bearing:0,pitch:0,duration:1e3},e),r),this},r.prototype.snapToNorth=function(t,e){return Math.abs(this.getBearing())<this._bearingSnap?this.resetNorth(t,e):this},r.prototype.getPitch=function(){return this.transform.pitch},r.prototype.setPitch=function(t,e){return this.jumpTo({pitch:t},e),this},r.prototype.cameraForBounds=function(e,r){return e=t.LngLatBounds.convert(e),this._cameraForBoxAndBearing(e.getNorthWest(),e.getSouthEast(),0,r)},r.prototype._cameraForBoxAndBearing=function(e,r,n,a){if("number"==typeof(a=t.extend({padding:{top:0,bottom:0,right:0,left:0},offset:[0,0],maxZoom:this.transform.maxZoom},a)).padding){var i=a.padding;a.padding={top:i,bottom:i,right:i,left:i}}if(t.deepEqual(Object.keys(a.padding).sort(function(t,e){return t<e?-1:t>e?1:0}),["bottom","left","right","top"])){var o=this.transform,s=o.project(t.LngLat.convert(e)),l=o.project(t.LngLat.convert(r)),c=s.rotate(-n*Math.PI/180),u=l.rotate(-n*Math.PI/180),h=new t.Point(Math.max(c.x,u.x),Math.max(c.y,u.y)),f=new t.Point(Math.min(c.x,u.x),Math.min(c.y,u.y)),p=h.sub(f),d=(o.width-a.padding.left-a.padding.right)/p.x,g=(o.height-a.padding.top-a.padding.bottom)/p.y;if(!(g<0||d<0)){var v=Math.min(o.scaleZoom(o.scale*Math.min(d,g)),a.maxZoom),m=t.Point.convert(a.offset),y=(a.padding.left-a.padding.right)/2,x=(a.padding.top-a.padding.bottom)/2,b=new t.Point(m.x+y,m.y+x).mult(o.scale/o.zoomScale(v));return{center:o.unproject(s.add(l).div(2).sub(b)),zoom:v,bearing:n}}t.warnOnce("Map cannot fit within canvas with the given bounds, padding, and/or offset.")}else t.warnOnce("options.padding must be a positive number, or an Object with keys 'bottom', 'left', 'right', 'top'")},r.prototype.fitBounds=function(t,e,r){return this._fitInternal(this.cameraForBounds(t,e),e,r)},r.prototype.fitScreenCoordinates=function(e,r,n,a,i){return this._fitInternal(this._cameraForBoxAndBearing(this.transform.pointLocation(t.Point.convert(e)),this.transform.pointLocation(t.Point.convert(r)),n,a),a,i)},r.prototype._fitInternal=function(e,r,n){return e?(r=t.extend(e,r)).linear?this.easeTo(r,n):this.flyTo(r,n):this},r.prototype.jumpTo=function(e,r){this.stop();var n=this.transform,a=!1,i=!1,o=!1;return"zoom"in e&&n.zoom!==+e.zoom&&(a=!0,n.zoom=+e.zoom),void 0!==e.center&&(n.center=t.LngLat.convert(e.center)),"bearing"in e&&n.bearing!==+e.bearing&&(i=!0,n.bearing=+e.bearing),"pitch"in e&&n.pitch!==+e.pitch&&(o=!0,n.pitch=+e.pitch),this.fire(new t.Event("movestart",r)).fire(new t.Event("move",r)),a&&this.fire(new t.Event("zoomstart",r)).fire(new t.Event("zoom",r)).fire(new t.Event("zoomend",r)),i&&this.fire(new t.Event("rotatestart",r)).fire(new t.Event("rotate",r)).fire(new t.Event("rotateend",r)),o&&this.fire(new t.Event("pitchstart",r)).fire(new t.Event("pitch",r)).fire(new t.Event("pitchend",r)),this.fire(new t.Event("moveend",r))},r.prototype.easeTo=function(e,r){var n=this;this.stop(),(!1===(e=t.extend({offset:[0,0],duration:500,easing:t.ease},e)).animate||t.browser.prefersReducedMotion)&&(e.duration=0);var a=this.transform,i=this.getZoom(),o=this.getBearing(),s=this.getPitch(),l="zoom"in e?+e.zoom:i,c="bearing"in e?this._normalizeBearing(e.bearing,o):o,u="pitch"in e?+e.pitch:s,h=a.centerPoint.add(t.Point.convert(e.offset)),f=a.pointLocation(h),p=t.LngLat.convert(e.center||f);this._normalizeCenter(p);var d,g,v=a.project(f),m=a.project(p).sub(v),y=a.zoomScale(l-i);return e.around&&(d=t.LngLat.convert(e.around),g=a.locationPoint(d)),this._zooming=l!==i,this._rotating=o!==c,this._pitching=u!==s,this._prepareEase(r,e.noMoveStart),clearTimeout(this._easeEndTimeoutID),this._ease(function(e){if(n._zooming&&(a.zoom=t.number(i,l,e)),n._rotating&&(a.bearing=t.number(o,c,e)),n._pitching&&(a.pitch=t.number(s,u,e)),d)a.setLocationAtPoint(d,g);else{var f=a.zoomScale(a.zoom-i),p=l>i?Math.min(2,y):Math.max(.5,y),x=Math.pow(p,1-e),b=a.unproject(v.add(m.mult(e*x)).mult(f));a.setLocationAtPoint(a.renderWorldCopies?b.wrap():b,h)}n._fireMoveEvents(r)},function(){e.delayEndEvents?n._easeEndTimeoutID=setTimeout(function(){return n._afterEase(r)},e.delayEndEvents):n._afterEase(r)},e),this},r.prototype._prepareEase=function(e,r){this._moving=!0,r||this.fire(new t.Event("movestart",e)),this._zooming&&this.fire(new t.Event("zoomstart",e)),this._rotating&&this.fire(new t.Event("rotatestart",e)),this._pitching&&this.fire(new t.Event("pitchstart",e))},r.prototype._fireMoveEvents=function(e){this.fire(new t.Event("move",e)),this._zooming&&this.fire(new t.Event("zoom",e)),this._rotating&&this.fire(new t.Event("rotate",e)),this._pitching&&this.fire(new t.Event("pitch",e))},r.prototype._afterEase=function(e){var r=this._zooming,n=this._rotating,a=this._pitching;this._moving=!1,this._zooming=!1,this._rotating=!1,this._pitching=!1,r&&this.fire(new t.Event("zoomend",e)),n&&this.fire(new t.Event("rotateend",e)),a&&this.fire(new t.Event("pitchend",e)),this.fire(new t.Event("moveend",e))},r.prototype.flyTo=function(e,r){var n=this;if(t.browser.prefersReducedMotion){var a=t.pick(e,["center","zoom","bearing","pitch","around"]);return this.jumpTo(a,r)}this.stop(),e=t.extend({offset:[0,0],speed:1.2,curve:1.42,easing:t.ease},e);var i=this.transform,o=this.getZoom(),s=this.getBearing(),l=this.getPitch(),c="zoom"in e?t.clamp(+e.zoom,i.minZoom,i.maxZoom):o,u="bearing"in e?this._normalizeBearing(e.bearing,s):s,h="pitch"in e?+e.pitch:l,f=i.zoomScale(c-o),p=i.centerPoint.add(t.Point.convert(e.offset)),d=i.pointLocation(p),g=t.LngLat.convert(e.center||d);this._normalizeCenter(g);var v=i.project(d),m=i.project(g).sub(v),y=e.curve,x=Math.max(i.width,i.height),b=x/f,_=m.mag();if("minZoom"in e){var w=t.clamp(Math.min(e.minZoom,o,c),i.minZoom,i.maxZoom),k=x/i.zoomScale(w-o);y=Math.sqrt(k/_*2)}var T=y*y;function M(t){var e=(b*b-x*x+(t?-1:1)*T*T*_*_)/(2*(t?b:x)*T*_);return Math.log(Math.sqrt(e*e+1)-e)}function A(t){return(Math.exp(t)-Math.exp(-t))/2}function S(t){return(Math.exp(t)+Math.exp(-t))/2}var E=M(0),L=function(t){return S(E)/S(E+y*t)},C=function(t){return x*((S(E)*(A(e=E+y*t)/S(e))-A(E))/T)/_;var e},P=(M(1)-E)/y;if(Math.abs(_)<1e-6||!isFinite(P)){if(Math.abs(x-b)<1e-6)return this.easeTo(e,r);var O=b<x?-1:1;P=Math.abs(Math.log(b/x))/y,C=function(){return 0},L=function(t){return Math.exp(O*y*t)}}if("duration"in e)e.duration=+e.duration;else{var z="screenSpeed"in e?+e.screenSpeed/y:+e.speed;e.duration=1e3*P/z}return e.maxDuration&&e.duration>e.maxDuration&&(e.duration=0),this._zooming=!0,this._rotating=s!==u,this._pitching=h!==l,this._prepareEase(r,!1),this._ease(function(e){var a=e*P,f=1/L(a);i.zoom=1===e?c:o+i.scaleZoom(f),n._rotating&&(i.bearing=t.number(s,u,e)),n._pitching&&(i.pitch=t.number(l,h,e));var d=1===e?g:i.unproject(v.add(m.mult(C(a))).mult(f));i.setLocationAtPoint(i.renderWorldCopies?d.wrap():d,p),n._fireMoveEvents(r)},function(){return n._afterEase(r)},e),this},r.prototype.isEasing=function(){return!!this._easeFrameId},r.prototype.stop=function(){if(this._easeFrameId&&(this._cancelRenderFrame(this._easeFrameId),delete this._easeFrameId,delete this._onEaseFrame),this._onEaseEnd){var t=this._onEaseEnd;delete this._onEaseEnd,t.call(this)}return this},r.prototype._ease=function(e,r,n){!1===n.animate||0===n.duration?(e(1),r()):(this._easeStart=t.browser.now(),this._easeOptions=n,this._onEaseFrame=e,this._onEaseEnd=r,this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback))},r.prototype._renderFrameCallback=function(){var e=Math.min((t.browser.now()-this._easeStart)/this._easeOptions.duration,1);this._onEaseFrame(this._easeOptions.easing(e)),e<1?this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback):this.stop()},r.prototype._normalizeBearing=function(e,r){e=t.wrap(e,-180,180);var n=Math.abs(e-r);return Math.abs(e-360-r)<n&&(e-=360),Math.abs(e+360-r)<n&&(e+=360),e},r.prototype._normalizeCenter=function(t){var e=this.transform;if(e.renderWorldCopies&&!e.lngRange){var r=t.lng-e.center.lng;t.lng+=r>180?-360:r<-180?360:0}},r}(t.Evented),Ln=function(e){void 0===e&&(e={}),this.options=e,t.bindAll(["_updateEditLink","_updateData","_updateCompact"],this)};Ln.prototype.getDefaultPosition=function(){return"bottom-right"},Ln.prototype.onAdd=function(t){var e=this.options&&this.options.compact;return this._map=t,this._container=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-attrib"),this._innerContainer=r.create("div","mapboxgl-ctrl-attrib-inner",this._container),e&&this._container.classList.add("mapboxgl-compact"),this._updateAttributions(),this._updateEditLink(),this._map.on("styledata",this._updateData),this._map.on("sourcedata",this._updateData),this._map.on("moveend",this._updateEditLink),void 0===e&&(this._map.on("resize",this._updateCompact),this._updateCompact()),this._container},Ln.prototype.onRemove=function(){r.remove(this._container),this._map.off("styledata",this._updateData),this._map.off("sourcedata",this._updateData),this._map.off("moveend",this._updateEditLink),this._map.off("resize",this._updateCompact),this._map=void 0},Ln.prototype._updateEditLink=function(){var e=this._editLink;e||(e=this._editLink=this._container.querySelector(".mapbox-improve-map"));var r=[{key:"owner",value:this.styleOwner},{key:"id",value:this.styleId},{key:"access_token",value:this._map._requestManager._customAccessToken||t.config.ACCESS_TOKEN}];if(e){var n=r.reduce(function(t,e,n){return e.value&&(t+=e.key+"="+e.value+(n<r.length-1?"&":"")),t},"?");e.href=t.config.FEEDBACK_URL+"/"+n+(this._map._hash?this._map._hash.getHashString(!0):""),e.rel="noopener nofollow"}},Ln.prototype._updateData=function(t){!t||"metadata"!==t.sourceDataType&&"style"!==t.dataType||(this._updateAttributions(),this._updateEditLink())},Ln.prototype._updateAttributions=function(){if(this._map.style){var t=[];if(this.options.customAttribution&&(Array.isArray(this.options.customAttribution)?t=t.concat(this.options.customAttribution.map(function(t){return"string"!=typeof t?"":t})):"string"==typeof this.options.customAttribution&&t.push(this.options.customAttribution)),this._map.style.stylesheet){var e=this._map.style.stylesheet;this.styleOwner=e.owner,this.styleId=e.id}var r=this._map.style.sourceCaches;for(var n in r){var a=r[n];if(a.used){var i=a.getSource();i.attribution&&t.indexOf(i.attribution)<0&&t.push(i.attribution)}}t.sort(function(t,e){return t.length-e.length});var o=(t=t.filter(function(e,r){for(var n=r+1;n<t.length;n++)if(t[n].indexOf(e)>=0)return!1;return!0})).join(" | ");o!==this._attribHTML&&(this._attribHTML=o,t.length?(this._innerContainer.innerHTML=o,this._container.classList.remove("mapboxgl-attrib-empty")):this._container.classList.add("mapboxgl-attrib-empty"),this._editLink=null)}},Ln.prototype._updateCompact=function(){this._map.getCanvasContainer().offsetWidth<=640?this._container.classList.add("mapboxgl-compact"):this._container.classList.remove("mapboxgl-compact")};var Cn=function(){t.bindAll(["_updateLogo"],this),t.bindAll(["_updateCompact"],this)};Cn.prototype.onAdd=function(t){this._map=t,this._container=r.create("div","mapboxgl-ctrl");var e=r.create("a","mapboxgl-ctrl-logo");return e.target="_blank",e.rel="noopener nofollow",e.href="https://www.mapbox.com/",e.setAttribute("aria-label","Mapbox logo"),e.setAttribute("rel","noopener nofollow"),this._container.appendChild(e),this._container.style.display="none",this._map.on("sourcedata",this._updateLogo),this._updateLogo(),this._map.on("resize",this._updateCompact),this._updateCompact(),this._container},Cn.prototype.onRemove=function(){r.remove(this._container),this._map.off("sourcedata",this._updateLogo),this._map.off("resize",this._updateCompact)},Cn.prototype.getDefaultPosition=function(){return"bottom-left"},Cn.prototype._updateLogo=function(t){t&&"metadata"!==t.sourceDataType||(this._container.style.display=this._logoRequired()?"block":"none")},Cn.prototype._logoRequired=function(){if(this._map.style){var t=this._map.style.sourceCaches;for(var e in t)if(t[e].getSource().mapbox_logo)return!0;return!1}},Cn.prototype._updateCompact=function(){var t=this._container.children;if(t.length){var e=t[0];this._map.getCanvasContainer().offsetWidth<250?e.classList.add("mapboxgl-compact"):e.classList.remove("mapboxgl-compact")}};var Pn=function(){this._queue=[],this._id=0,this._cleared=!1,this._currentlyRunning=!1};Pn.prototype.add=function(t){var e=++this._id;return this._queue.push({callback:t,id:e,cancelled:!1}),e},Pn.prototype.remove=function(t){for(var e=this._currentlyRunning,r=0,n=e?this._queue.concat(e):this._queue;r<n.length;r+=1){var a=n[r];if(a.id===t)return void(a.cancelled=!0)}},Pn.prototype.run=function(){var t=this._currentlyRunning=this._queue;this._queue=[];for(var e=0,r=t;e<r.length;e+=1){var n=r[e];if(!n.cancelled&&(n.callback(),this._cleared))break}this._cleared=!1,this._currentlyRunning=!1},Pn.prototype.clear=function(){this._currentlyRunning&&(this._cleared=!0),this._queue=[]};var On=t.window.HTMLImageElement,zn=t.window.HTMLElement,In={center:[0,0],zoom:0,bearing:0,pitch:0,minZoom:0,maxZoom:22,interactive:!0,scrollZoom:!0,boxZoom:!0,dragRotate:!0,dragPan:!0,keyboard:!0,doubleClickZoom:!0,touchZoomRotate:!0,bearingSnap:7,clickTolerance:3,hash:!1,attributionControl:!0,failIfMajorPerformanceCaveat:!1,preserveDrawingBuffer:!1,trackResize:!0,renderWorldCopies:!0,refreshExpiredTiles:!0,maxTileCacheSize:null,localIdeographFontFamily:"sans-serif",transformRequest:null,accessToken:null,fadeDuration:300,crossSourceCollisions:!0},Dn=function(n){function a(e){var a=this;if(null!=(e=t.extend({},In,e)).minZoom&&null!=e.maxZoom&&e.minZoom>e.maxZoom)throw new Error("maxZoom must be greater than minZoom");var i=new un(e.minZoom,e.maxZoom,e.renderWorldCopies);if(n.call(this,i,e),this._interactive=e.interactive,this._maxTileCacheSize=e.maxTileCacheSize,this._failIfMajorPerformanceCaveat=e.failIfMajorPerformanceCaveat,this._preserveDrawingBuffer=e.preserveDrawingBuffer,this._antialias=e.antialias,this._trackResize=e.trackResize,this._bearingSnap=e.bearingSnap,this._refreshExpiredTiles=e.refreshExpiredTiles,this._fadeDuration=e.fadeDuration,this._crossSourceCollisions=e.crossSourceCollisions,this._crossFadingFactor=1,this._collectResourceTiming=e.collectResourceTiming,this._renderTaskQueue=new Pn,this._controls=[],this._mapId=t.uniqueId(),this._requestManager=new t.RequestManager(e.transformRequest,e.accessToken),"string"==typeof e.container){if(this._container=t.window.document.getElementById(e.container),!this._container)throw new Error("Container '"+e.container+"' not found.")}else{if(!(e.container instanceof zn))throw new Error("Invalid type: 'container' must be a String or HTMLElement.");this._container=e.container}if(e.maxBounds&&this.setMaxBounds(e.maxBounds),t.bindAll(["_onWindowOnline","_onWindowResize","_contextLost","_contextRestored"],this),this._setupContainer(),this._setupPainter(),void 0===this.painter)throw new Error("Failed to initialize WebGL.");this.on("move",function(){return a._update(!1)}),this.on("moveend",function(){return a._update(!1)}),this.on("zoom",function(){return a._update(!0)}),void 0!==t.window&&(t.window.addEventListener("online",this._onWindowOnline,!1),t.window.addEventListener("resize",this._onWindowResize,!1)),function(t,e){var n=t.getCanvasContainer(),a=null,i=!1,o=null;for(var s in Sn)t[s]=new Sn[s](t,e),e.interactive&&e[s]&&t[s].enable(e[s]);r.addEventListener(n,"mouseout",function(e){t.fire(new pn("mouseout",t,e))}),r.addEventListener(n,"mousedown",function(a){i=!0,o=r.mousePos(n,a);var s=new pn("mousedown",t,a);t.fire(s),s.defaultPrevented||(e.interactive&&!t.doubleClickZoom.isActive()&&t.stop(),t.boxZoom.onMouseDown(a),t.boxZoom.isActive()||t.dragPan.isActive()||t.dragRotate.onMouseDown(a),t.boxZoom.isActive()||t.dragRotate.isActive()||t.dragPan.onMouseDown(a))}),r.addEventListener(n,"mouseup",function(e){var r=t.dragRotate.isActive();a&&!r&&t.fire(new pn("contextmenu",t,a)),a=null,i=!1,t.fire(new pn("mouseup",t,e))}),r.addEventListener(n,"mousemove",function(e){if(!t.dragPan.isActive()&&!t.dragRotate.isActive()){for(var r=e.target;r&&r!==n;)r=r.parentNode;r===n&&t.fire(new pn("mousemove",t,e))}}),r.addEventListener(n,"mouseover",function(e){for(var r=e.target;r&&r!==n;)r=r.parentNode;r===n&&t.fire(new pn("mouseover",t,e))}),r.addEventListener(n,"touchstart",function(r){var n=new dn("touchstart",t,r);t.fire(n),n.defaultPrevented||(e.interactive&&t.stop(),t.boxZoom.isActive()||t.dragRotate.isActive()||t.dragPan.onTouchStart(r),t.touchZoomRotate.onStart(r),t.doubleClickZoom.onTouchStart(n))},{passive:!1}),r.addEventListener(n,"touchmove",function(e){t.fire(new dn("touchmove",t,e))},{passive:!1}),r.addEventListener(n,"touchend",function(e){t.fire(new dn("touchend",t,e))}),r.addEventListener(n,"touchcancel",function(e){t.fire(new dn("touchcancel",t,e))}),r.addEventListener(n,"click",function(a){var i=r.mousePos(n,a);(!o||i.equals(o)||i.dist(o)<e.clickTolerance)&&t.fire(new pn("click",t,a))}),r.addEventListener(n,"dblclick",function(e){var r=new pn("dblclick",t,e);t.fire(r),r.defaultPrevented||t.doubleClickZoom.onDblClick(r)}),r.addEventListener(n,"contextmenu",function(e){var r=t.dragRotate.isActive();i||r?i&&(a=e):t.fire(new pn("contextmenu",t,e)),(t.dragRotate.isEnabled()||t.listens("contextmenu"))&&e.preventDefault()}),r.addEventListener(n,"wheel",function(r){e.interactive&&t.stop();var n=new gn("wheel",t,r);t.fire(n),n.defaultPrevented||t.scrollZoom.onWheel(r)},{passive:!1})}(this,e),this._hash=e.hash&&(new fn).addTo(this),this._hash&&this._hash._onHashChange()||(this.jumpTo({center:e.center,zoom:e.zoom,bearing:e.bearing,pitch:e.pitch}),e.bounds&&(this.resize(),this.fitBounds(e.bounds,t.extend({},e.fitBoundsOptions,{duration:0})))),this.resize(),this._localIdeographFontFamily=e.localIdeographFontFamily,e.style&&this.setStyle(e.style,{localIdeographFontFamily:e.localIdeographFontFamily}),e.attributionControl&&this.addControl(new Ln({customAttribution:e.customAttribution})),this.addControl(new Cn,e.logoPosition),this.on("style.load",function(){a.transform.unmodified&&a.jumpTo(a.style.stylesheet)}),this.on("data",function(e){a._update("style"===e.dataType),a.fire(new t.Event(e.dataType+"data",e))}),this.on("dataloading",function(e){a.fire(new t.Event(e.dataType+"dataloading",e))})}n&&(a.__proto__=n),a.prototype=Object.create(n&&n.prototype),a.prototype.constructor=a;var i={showTileBoundaries:{configurable:!0},showCollisionBoxes:{configurable:!0},showOverdrawInspector:{configurable:!0},repaint:{configurable:!0},vertices:{configurable:!0},version:{configurable:!0}};return a.prototype._getMapId=function(){return this._mapId},a.prototype.addControl=function(e,r){if(void 0===r&&e.getDefaultPosition&&(r=e.getDefaultPosition()),void 0===r&&(r="top-right"),!e||!e.onAdd)return this.fire(new t.ErrorEvent(new Error("Invalid argument to map.addControl(). Argument must be a control with onAdd and onRemove methods.")));var n=e.onAdd(this);this._controls.push(e);var a=this._controlPositions[r];return-1!==r.indexOf("bottom")?a.insertBefore(n,a.firstChild):a.appendChild(n),this},a.prototype.removeControl=function(e){if(!e||!e.onRemove)return this.fire(new t.ErrorEvent(new Error("Invalid argument to map.removeControl(). Argument must be a control with onAdd and onRemove methods.")));var r=this._controls.indexOf(e);return r>-1&&this._controls.splice(r,1),e.onRemove(this),this},a.prototype.resize=function(e){var r=this._containerDimensions(),n=r[0],a=r[1];return this._resizeCanvas(n,a),this.transform.resize(n,a),this.painter.resize(n,a),this.fire(new t.Event("movestart",e)).fire(new t.Event("move",e)).fire(new t.Event("resize",e)).fire(new t.Event("moveend",e)),this},a.prototype.getBounds=function(){return this.transform.getBounds()},a.prototype.getMaxBounds=function(){return this.transform.getMaxBounds()},a.prototype.setMaxBounds=function(e){return this.transform.setMaxBounds(t.LngLatBounds.convert(e)),this._update()},a.prototype.setMinZoom=function(t){if((t=null==t?0:t)>=0&&t<=this.transform.maxZoom)return this.transform.minZoom=t,this._update(),this.getZoom()<t&&this.setZoom(t),this;throw new Error("minZoom must be between 0 and the current maxZoom, inclusive")},a.prototype.getMinZoom=function(){return this.transform.minZoom},a.prototype.setMaxZoom=function(t){if((t=null==t?22:t)>=this.transform.minZoom)return this.transform.maxZoom=t,this._update(),this.getZoom()>t&&this.setZoom(t),this;throw new Error("maxZoom must be greater than the current minZoom")},a.prototype.getRenderWorldCopies=function(){return this.transform.renderWorldCopies},a.prototype.setRenderWorldCopies=function(t){return this.transform.renderWorldCopies=t,this._update()},a.prototype.getMaxZoom=function(){return this.transform.maxZoom},a.prototype.project=function(e){return this.transform.locationPoint(t.LngLat.convert(e))},a.prototype.unproject=function(e){return this.transform.pointLocation(t.Point.convert(e))},a.prototype.isMoving=function(){return this._moving||this.dragPan.isActive()||this.dragRotate.isActive()||this.scrollZoom.isActive()},a.prototype.isZooming=function(){return this._zooming||this.scrollZoom.isZooming()},a.prototype.isRotating=function(){return this._rotating||this.dragRotate.isActive()},a.prototype.on=function(t,e,r){var a=this;if(void 0===r)return n.prototype.on.call(this,t,e);var i=function(){var n;if("mouseenter"===t||"mouseover"===t){var i=!1;return{layer:e,listener:r,delegates:{mousemove:function(n){var o=a.getLayer(e)?a.queryRenderedFeatures(n.point,{layers:[e]}):[];o.length?i||(i=!0,r.call(a,new pn(t,a,n.originalEvent,{features:o}))):i=!1},mouseout:function(){i=!1}}}}if("mouseleave"===t||"mouseout"===t){var o=!1;return{layer:e,listener:r,delegates:{mousemove:function(n){(a.getLayer(e)?a.queryRenderedFeatures(n.point,{layers:[e]}):[]).length?o=!0:o&&(o=!1,r.call(a,new pn(t,a,n.originalEvent)))},mouseout:function(e){o&&(o=!1,r.call(a,new pn(t,a,e.originalEvent)))}}}}return{layer:e,listener:r,delegates:(n={},n[t]=function(t){var n=a.getLayer(e)?a.queryRenderedFeatures(t.point,{layers:[e]}):[];n.length&&(t.features=n,r.call(a,t),delete t.features)},n)}}();for(var o in this._delegatedListeners=this._delegatedListeners||{},this._delegatedListeners[t]=this._delegatedListeners[t]||[],this._delegatedListeners[t].push(i),i.delegates)this.on(o,i.delegates[o]);return this},a.prototype.off=function(t,e,r){if(void 0===r)return n.prototype.off.call(this,t,e);if(this._delegatedListeners&&this._delegatedListeners[t])for(var a=this._delegatedListeners[t],i=0;i<a.length;i++){var o=a[i];if(o.layer===e&&o.listener===r){for(var s in o.delegates)this.off(s,o.delegates[s]);return a.splice(i,1),this}}return this},a.prototype.queryRenderedFeatures=function(e,r){if(!this.style)return[];var n;if(void 0!==r||void 0===e||e instanceof t.Point||Array.isArray(e)||(r=e,e=void 0),r=r||{},(e=e||[[0,0],[this.transform.width,this.transform.height]])instanceof t.Point||"number"==typeof e[0])n=[t.Point.convert(e)];else{var a=t.Point.convert(e[0]),i=t.Point.convert(e[1]);n=[a,new t.Point(i.x,a.y),i,new t.Point(a.x,i.y),a]}return this.style.queryRenderedFeatures(n,r,this.transform)},a.prototype.querySourceFeatures=function(t,e){return this.style.querySourceFeatures(t,e)},a.prototype.setStyle=function(e,r){return!1!==(r=t.extend({},{localIdeographFontFamily:this._localIdeographFontFamily},r)).diff&&r.localIdeographFontFamily===this._localIdeographFontFamily&&this.style&&e?(this._diffStyle(e,r),this):(this._localIdeographFontFamily=r.localIdeographFontFamily,this._updateStyle(e,r))},a.prototype._updateStyle=function(t,e){return this.style&&(this.style.setEventedParent(null),this.style._remove()),t?(this.style=new Re(this,e||{}),this.style.setEventedParent(this,{style:this.style}),"string"==typeof t?this.style.loadURL(t):this.style.loadJSON(t),this):(delete this.style,this)},a.prototype._diffStyle=function(e,r){var n=this;if("string"==typeof e){var a=this._requestManager.normalizeStyleURL(e),i=this._requestManager.transformRequest(a,t.ResourceType.Style);t.getJSON(i,function(e,a){e?n.fire(new t.ErrorEvent(e)):a&&n._updateDiff(a,r)})}else"object"==typeof e&&this._updateDiff(e,r)},a.prototype._updateDiff=function(e,r){try{this.style.setState(e)&&this._update(!0)}catch(n){t.warnOnce("Unable to perform style diff: "+(n.message||n.error||n)+". Rebuilding the style from scratch."),this._updateStyle(e,r)}},a.prototype.getStyle=function(){if(this.style)return this.style.serialize()},a.prototype.isStyleLoaded=function(){return this.style?this.style.loaded():t.warnOnce("There is no style added to the map.")},a.prototype.addSource=function(t,e){return this.style.addSource(t,e),this._update(!0)},a.prototype.isSourceLoaded=function(e){var r=this.style&&this.style.sourceCaches[e];if(void 0!==r)return r.loaded();this.fire(new t.ErrorEvent(new Error("There is no source with ID '"+e+"'")))},a.prototype.areTilesLoaded=function(){var t=this.style&&this.style.sourceCaches;for(var e in t){var r=t[e]._tiles;for(var n in r){var a=r[n];if("loaded"!==a.state&&"errored"!==a.state)return!1}}return!0},a.prototype.addSourceType=function(t,e,r){return this.style.addSourceType(t,e,r)},a.prototype.removeSource=function(t){return this.style.removeSource(t),this._update(!0)},a.prototype.getSource=function(t){return this.style.getSource(t)},a.prototype.addImage=function(e,r,n){void 0===n&&(n={});var a=n.pixelRatio;void 0===a&&(a=1);var i=n.sdf;if(void 0===i&&(i=!1),r instanceof On){var o=t.browser.getImageData(r),s=o.width,l=o.height,c=o.data;this.style.addImage(e,{data:new t.RGBAImage({width:s,height:l},c),pixelRatio:a,sdf:i,version:0})}else{if(void 0===r.width||void 0===r.height)return this.fire(new t.ErrorEvent(new Error("Invalid arguments to map.addImage(). The second argument must be an `HTMLImageElement`, `ImageData`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`")));var u=r.width,h=r.height,f=r.data,p=r;this.style.addImage(e,{data:new t.RGBAImage({width:u,height:h},new Uint8Array(f)),pixelRatio:a,sdf:i,version:0,userImage:p}),p.onAdd&&p.onAdd(this,e)}},a.prototype.updateImage=function(e,r){var n=this.style.getImage(e);if(!n)return this.fire(new t.ErrorEvent(new Error("The map has no image with that id. If you are adding a new image use `map.addImage(...)` instead.")));var a=r instanceof On?t.browser.getImageData(r):r,i=a.width,o=a.height,s=a.data;if(void 0===i||void 0===o)return this.fire(new t.ErrorEvent(new Error("Invalid arguments to map.updateImage(). The second argument must be an `HTMLImageElement`, `ImageData`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`")));if(i!==n.data.width||o!==n.data.height)return this.fire(new t.ErrorEvent(new Error("The width and height of the updated image must be that same as the previous version of the image")));var l=!(r instanceof On);n.data.replace(s,l),this.style.updateImage(e,n)},a.prototype.hasImage=function(e){return e?!!this.style.getImage(e):(this.fire(new t.ErrorEvent(new Error("Missing required image id"))),!1)},a.prototype.removeImage=function(t){this.style.removeImage(t)},a.prototype.loadImage=function(e,r){t.getImage(this._requestManager.transformRequest(e,t.ResourceType.Image),r)},a.prototype.listImages=function(){return this.style.listImages()},a.prototype.addLayer=function(t,e){return this.style.addLayer(t,e),this._update(!0)},a.prototype.moveLayer=function(t,e){return this.style.moveLayer(t,e),this._update(!0)},a.prototype.removeLayer=function(t){return this.style.removeLayer(t),this._update(!0)},a.prototype.getLayer=function(t){return this.style.getLayer(t)},a.prototype.setFilter=function(t,e,r){return void 0===r&&(r={}),this.style.setFilter(t,e,r),this._update(!0)},a.prototype.setLayerZoomRange=function(t,e,r){return this.style.setLayerZoomRange(t,e,r),this._update(!0)},a.prototype.getFilter=function(t){return this.style.getFilter(t)},a.prototype.setPaintProperty=function(t,e,r,n){return void 0===n&&(n={}),this.style.setPaintProperty(t,e,r,n),this._update(!0)},a.prototype.getPaintProperty=function(t,e){return this.style.getPaintProperty(t,e)},a.prototype.setLayoutProperty=function(t,e,r,n){return void 0===n&&(n={}),this.style.setLayoutProperty(t,e,r,n),this._update(!0)},a.prototype.getLayoutProperty=function(t,e){return this.style.getLayoutProperty(t,e)},a.prototype.setLight=function(t,e){return void 0===e&&(e={}),this.style.setLight(t,e),this._update(!0)},a.prototype.getLight=function(){return this.style.getLight()},a.prototype.setFeatureState=function(t,e){return this.style.setFeatureState(t,e),this._update()},a.prototype.removeFeatureState=function(t,e){return this.style.removeFeatureState(t,e),this._update()},a.prototype.getFeatureState=function(t){return this.style.getFeatureState(t)},a.prototype.getContainer=function(){return this._container},a.prototype.getCanvasContainer=function(){return this._canvasContainer},a.prototype.getCanvas=function(){return this._canvas},a.prototype._containerDimensions=function(){var t=0,e=0;return this._container&&(t=this._container.clientWidth||400,e=this._container.clientHeight||300),[t,e]},a.prototype._detectMissingCSS=function(){"rgb(250, 128, 114)"!==t.window.getComputedStyle(this._missingCSSCanary).getPropertyValue("background-color")&&t.warnOnce("This page appears to be missing CSS declarations for Mapbox GL JS, which may cause the map to display incorrectly. Please ensure your page includes mapbox-gl.css, as described in https://www.mapbox.com/mapbox-gl-js/api/.")},a.prototype._setupContainer=function(){var t=this._container;t.classList.add("mapboxgl-map"),(this._missingCSSCanary=r.create("div","mapboxgl-canary",t)).style.visibility="hidden",this._detectMissingCSS();var e=this._canvasContainer=r.create("div","mapboxgl-canvas-container",t);this._interactive&&e.classList.add("mapboxgl-interactive"),this._canvas=r.create("canvas","mapboxgl-canvas",e),this._canvas.style.position="absolute",this._canvas.addEventListener("webglcontextlost",this._contextLost,!1),this._canvas.addEventListener("webglcontextrestored",this._contextRestored,!1),this._canvas.setAttribute("tabindex","0"),this._canvas.setAttribute("aria-label","Map");var n=this._containerDimensions();this._resizeCanvas(n[0],n[1]);var a=this._controlContainer=r.create("div","mapboxgl-control-container",t),i=this._controlPositions={};["top-left","top-right","bottom-left","bottom-right"].forEach(function(t){i[t]=r.create("div","mapboxgl-ctrl-"+t,a)})},a.prototype._resizeCanvas=function(e,r){var n=t.window.devicePixelRatio||1;this._canvas.width=n*e,this._canvas.height=n*r,this._canvas.style.width=e+"px",this._canvas.style.height=r+"px"},a.prototype._setupPainter=function(){var r=t.extend({},e.webGLContextAttributes,{failIfMajorPerformanceCaveat:this._failIfMajorPerformanceCaveat,preserveDrawingBuffer:this._preserveDrawingBuffer,antialias:this._antialias||!1}),n=this._canvas.getContext("webgl",r)||this._canvas.getContext("experimental-webgl",r);n?(this.painter=new on(n,this.transform),t.webpSupported.testSupport(n)):this.fire(new t.ErrorEvent(new Error("Failed to initialize WebGL")))},a.prototype._contextLost=function(e){e.preventDefault(),this._frame&&(this._frame.cancel(),this._frame=null),this.fire(new t.Event("webglcontextlost",{originalEvent:e}))},a.prototype._contextRestored=function(e){this._setupPainter(),this.resize(),this._update(),this.fire(new t.Event("webglcontextrestored",{originalEvent:e}))},a.prototype.loaded=function(){return!this._styleDirty&&!this._sourcesDirty&&!!this.style&&this.style.loaded()},a.prototype._update=function(t){return this.style?(this._styleDirty=this._styleDirty||t,this._sourcesDirty=!0,this.triggerRepaint(),this):this},a.prototype._requestRenderFrame=function(t){return this._update(),this._renderTaskQueue.add(t)},a.prototype._cancelRenderFrame=function(t){this._renderTaskQueue.remove(t)},a.prototype._render=function(){this.painter.context.setDirty(),this.painter.setBaseState(),this._renderTaskQueue.run();var e=!1;if(this.style&&this._styleDirty){this._styleDirty=!1;var r=this.transform.zoom,n=t.browser.now();this.style.zoomHistory.update(r,n);var a=new t.EvaluationParameters(r,{now:n,fadeDuration:this._fadeDuration,zoomHistory:this.style.zoomHistory,transition:this.style.getTransition()}),i=a.crossFadingFactor();1===i&&i===this._crossFadingFactor||(e=!0,this._crossFadingFactor=i),this.style.update(a)}return this.style&&this._sourcesDirty&&(this._sourcesDirty=!1,this.style._updateSources(this.transform)),this._placementDirty=this.style&&this.style._updatePlacement(this.painter.transform,this.showCollisionBoxes,this._fadeDuration,this._crossSourceCollisions),this.painter.render(this.style,{showTileBoundaries:this.showTileBoundaries,showOverdrawInspector:this._showOverdrawInspector,rotating:this.isRotating(),zooming:this.isZooming(),moving:this.isMoving(),fadeDuration:this._fadeDuration}),this.fire(new t.Event("render")),this.loaded()&&!this._loaded&&(this._loaded=!0,this.fire(new t.Event("load"))),this.style&&(this.style.hasTransitions()||e)&&(this._styleDirty=!0),this.style&&!this._placementDirty&&this.style._releaseSymbolFadeTiles(),this._sourcesDirty||this._repaint||this._styleDirty||this._placementDirty?this.triggerRepaint():!this.isMoving()&&this.loaded()&&this.fire(new t.Event("idle")),this},a.prototype.remove=function(){this._hash&&this._hash.remove();for(var e=0,r=this._controls;e<r.length;e+=1)r[e].onRemove(this);this._controls=[],this._frame&&(this._frame.cancel(),this._frame=null),this._renderTaskQueue.clear(),this.setStyle(null),void 0!==t.window&&(t.window.removeEventListener("resize",this._onWindowResize,!1),t.window.removeEventListener("online",this._onWindowOnline,!1));var n=this.painter.context.gl.getExtension("WEBGL_lose_context");n&&n.loseContext(),Rn(this._canvasContainer),Rn(this._controlContainer),Rn(this._missingCSSCanary),this._container.classList.remove("mapboxgl-map"),this.fire(new t.Event("remove"))},a.prototype.triggerRepaint=function(){var e=this;this.style&&!this._frame&&(this._frame=t.browser.frame(function(){e._frame=null,e._render()}))},a.prototype._onWindowOnline=function(){this._update()},a.prototype._onWindowResize=function(){this._trackResize&&this.resize()._update()},i.showTileBoundaries.get=function(){return!!this._showTileBoundaries},i.showTileBoundaries.set=function(t){this._showTileBoundaries!==t&&(this._showTileBoundaries=t,this._update())},i.showCollisionBoxes.get=function(){return!!this._showCollisionBoxes},i.showCollisionBoxes.set=function(t){this._showCollisionBoxes!==t&&(this._showCollisionBoxes=t,t?this.style._generateCollisionBoxes():this._update())},i.showOverdrawInspector.get=function(){return!!this._showOverdrawInspector},i.showOverdrawInspector.set=function(t){this._showOverdrawInspector!==t&&(this._showOverdrawInspector=t,this._update())},i.repaint.get=function(){return!!this._repaint},i.repaint.set=function(t){this._repaint!==t&&(this._repaint=t,this.triggerRepaint())},i.vertices.get=function(){return!!this._vertices},i.vertices.set=function(t){this._vertices=t,this._update()},a.prototype._setCacheLimits=function(e,r){t.setCacheLimits(e,r)},i.version.get=function(){return t.version},Object.defineProperties(a.prototype,i),a}(En);function Rn(t){t.parentNode&&t.parentNode.removeChild(t)}var Fn={showCompass:!0,showZoom:!0,visualizePitch:!1},Bn=function(e){var n=this;this.options=t.extend({},Fn,e),this._container=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-group"),this._container.addEventListener("contextmenu",function(t){return t.preventDefault()}),this.options.showZoom&&(t.bindAll(["_updateZoomButtons"],this),this._zoomInButton=this._createButton("mapboxgl-ctrl-icon mapboxgl-ctrl-zoom-in","Zoom in",function(){return n._map.zoomIn()}),this._zoomOutButton=this._createButton("mapboxgl-ctrl-icon mapboxgl-ctrl-zoom-out","Zoom out",function(){return n._map.zoomOut()})),this.options.showCompass&&(t.bindAll(["_rotateCompassArrow"],this),this._compass=this._createButton("mapboxgl-ctrl-icon mapboxgl-ctrl-compass","Reset bearing to north",function(){n.options.visualizePitch?n._map.resetNorthPitch():n._map.resetNorth()}),this._compassArrow=r.create("span","mapboxgl-ctrl-compass-arrow",this._compass))};function Nn(e,r,n){if(e=new t.LngLat(e.lng,e.lat),r){var a=new t.LngLat(e.lng-360,e.lat),i=new t.LngLat(e.lng+360,e.lat),o=n.locationPoint(e).distSqr(r);n.locationPoint(a).distSqr(r)<o?e=a:n.locationPoint(i).distSqr(r)<o&&(e=i)}for(;Math.abs(e.lng-n.center.lng)>180;){var s=n.locationPoint(e);if(s.x>=0&&s.y>=0&&s.x<=n.width&&s.y<=n.height)break;e.lng>n.center.lng?e.lng-=360:e.lng+=360}return e}Bn.prototype._updateZoomButtons=function(){var t=this._map.getZoom();t===this._map.getMaxZoom()?this._zoomInButton.classList.add("mapboxgl-ctrl-icon-disabled"):this._zoomInButton.classList.remove("mapboxgl-ctrl-icon-disabled"),t===this._map.getMinZoom()?this._zoomOutButton.classList.add("mapboxgl-ctrl-icon-disabled"):this._zoomOutButton.classList.remove("mapboxgl-ctrl-icon-disabled")},Bn.prototype._rotateCompassArrow=function(){var t=this.options.visualizePitch?"scale("+1/Math.pow(Math.cos(this._map.transform.pitch*(Math.PI/180)),.5)+") rotateX("+this._map.transform.pitch+"deg) rotateZ("+this._map.transform.angle*(180/Math.PI)+"deg)":"rotate("+this._map.transform.angle*(180/Math.PI)+"deg)";this._compassArrow.style.transform=t},Bn.prototype.onAdd=function(t){return this._map=t,this.options.showZoom&&(this._map.on("zoom",this._updateZoomButtons),this._updateZoomButtons()),this.options.showCompass&&(this.options.visualizePitch&&this._map.on("pitch",this._rotateCompassArrow),this._map.on("rotate",this._rotateCompassArrow),this._rotateCompassArrow(),this._handler=new xn(t,{button:"left",element:this._compass}),r.addEventListener(this._compass,"mousedown",this._handler.onMouseDown),r.addEventListener(this._compass,"touchstart",this._handler.onMouseDown,{passive:!1}),this._handler.enable()),this._container},Bn.prototype.onRemove=function(){r.remove(this._container),this.options.showZoom&&this._map.off("zoom",this._updateZoomButtons),this.options.showCompass&&(this.options.visualizePitch&&this._map.off("pitch",this._rotateCompassArrow),this._map.off("rotate",this._rotateCompassArrow),r.removeEventListener(this._compass,"mousedown",this._handler.onMouseDown),r.removeEventListener(this._compass,"touchstart",this._handler.onMouseDown,{passive:!1}),this._handler.disable(),delete this._handler),delete this._map},Bn.prototype._createButton=function(t,e,n){var a=r.create("button",t,this._container);return a.type="button",a.title=e,a.setAttribute("aria-label",e),a.addEventListener("click",n),a};var jn={center:"translate(-50%,-50%)",top:"translate(-50%,0)","top-left":"translate(0,0)","top-right":"translate(-100%,0)",bottom:"translate(-50%,-100%)","bottom-left":"translate(0,-100%)","bottom-right":"translate(-100%,-100%)",left:"translate(0,-50%)",right:"translate(-100%,-50%)"};function Vn(t,e,r){var n=t.classList;for(var a in jn)n.remove("mapboxgl-"+r+"-anchor-"+a);n.add("mapboxgl-"+r+"-anchor-"+e)}var Un,qn=function(e){function n(n,a){if(e.call(this),(n instanceof t.window.HTMLElement||a)&&(n=t.extend({element:n},a)),t.bindAll(["_update","_onMove","_onUp","_addDragHandler","_onMapClick"],this),this._anchor=n&&n.anchor||"center",this._color=n&&n.color||"#3FB1CE",this._draggable=n&&n.draggable||!1,this._state="inactive",n&&n.element)this._element=n.element,this._offset=t.Point.convert(n&&n.offset||[0,0]);else{this._defaultMarker=!0,this._element=r.create("div");var i=r.createNS("http://www.w3.org/2000/svg","svg");i.setAttributeNS(null,"display","block"),i.setAttributeNS(null,"height","41px"),i.setAttributeNS(null,"width","27px"),i.setAttributeNS(null,"viewBox","0 0 27 41");var o=r.createNS("http://www.w3.org/2000/svg","g");o.setAttributeNS(null,"stroke","none"),o.setAttributeNS(null,"stroke-width","1"),o.setAttributeNS(null,"fill","none"),o.setAttributeNS(null,"fill-rule","evenodd");var s=r.createNS("http://www.w3.org/2000/svg","g");s.setAttributeNS(null,"fill-rule","nonzero");var l=r.createNS("http://www.w3.org/2000/svg","g");l.setAttributeNS(null,"transform","translate(3.0, 29.0)"),l.setAttributeNS(null,"fill","#000000");for(var c=0,u=[{rx:"10.5",ry:"5.25002273"},{rx:"10.5",ry:"5.25002273"},{rx:"9.5",ry:"4.77275007"},{rx:"8.5",ry:"4.29549936"},{rx:"7.5",ry:"3.81822308"},{rx:"6.5",ry:"3.34094679"},{rx:"5.5",ry:"2.86367051"},{rx:"4.5",ry:"2.38636864"}];c<u.length;c+=1){var h=u[c],f=r.createNS("http://www.w3.org/2000/svg","ellipse");f.setAttributeNS(null,"opacity","0.04"),f.setAttributeNS(null,"cx","10.5"),f.setAttributeNS(null,"cy","5.80029008"),f.setAttributeNS(null,"rx",h.rx),f.setAttributeNS(null,"ry",h.ry),l.appendChild(f)}var p=r.createNS("http://www.w3.org/2000/svg","g");p.setAttributeNS(null,"fill",this._color);var d=r.createNS("http://www.w3.org/2000/svg","path");d.setAttributeNS(null,"d","M27,13.5 C27,19.074644 20.250001,27.000002 14.75,34.500002 C14.016665,35.500004 12.983335,35.500004 12.25,34.500002 C6.7499993,27.000002 0,19.222562 0,13.5 C0,6.0441559 6.0441559,0 13.5,0 C20.955844,0 27,6.0441559 27,13.5 Z"),p.appendChild(d);var g=r.createNS("http://www.w3.org/2000/svg","g");g.setAttributeNS(null,"opacity","0.25"),g.setAttributeNS(null,"fill","#000000");var v=r.createNS("http://www.w3.org/2000/svg","path");v.setAttributeNS(null,"d","M13.5,0 C6.0441559,0 0,6.0441559 0,13.5 C0,19.222562 6.7499993,27 12.25,34.5 C13,35.522727 14.016664,35.500004 14.75,34.5 C20.250001,27 27,19.074644 27,13.5 C27,6.0441559 20.955844,0 13.5,0 Z M13.5,1 C20.415404,1 26,6.584596 26,13.5 C26,15.898657 24.495584,19.181431 22.220703,22.738281 C19.945823,26.295132 16.705119,30.142167 13.943359,33.908203 C13.743445,34.180814 13.612715,34.322738 13.5,34.441406 C13.387285,34.322738 13.256555,34.180814 13.056641,33.908203 C10.284481,30.127985 7.4148684,26.314159 5.015625,22.773438 C2.6163816,19.232715 1,15.953538 1,13.5 C1,6.584596 6.584596,1 13.5,1 Z"),g.appendChild(v);var m=r.createNS("http://www.w3.org/2000/svg","g");m.setAttributeNS(null,"transform","translate(6.0, 7.0)"),m.setAttributeNS(null,"fill","#FFFFFF");var y=r.createNS("http://www.w3.org/2000/svg","g");y.setAttributeNS(null,"transform","translate(8.0, 8.0)");var x=r.createNS("http://www.w3.org/2000/svg","circle");x.setAttributeNS(null,"fill","#000000"),x.setAttributeNS(null,"opacity","0.25"),x.setAttributeNS(null,"cx","5.5"),x.setAttributeNS(null,"cy","5.5"),x.setAttributeNS(null,"r","5.4999962");var b=r.createNS("http://www.w3.org/2000/svg","circle");b.setAttributeNS(null,"fill","#FFFFFF"),b.setAttributeNS(null,"cx","5.5"),b.setAttributeNS(null,"cy","5.5"),b.setAttributeNS(null,"r","5.4999962"),y.appendChild(x),y.appendChild(b),s.appendChild(l),s.appendChild(p),s.appendChild(g),s.appendChild(m),s.appendChild(y),i.appendChild(s),this._element.appendChild(i),this._offset=t.Point.convert(n&&n.offset||[0,-14])}this._element.classList.add("mapboxgl-marker"),this._element.addEventListener("dragstart",function(t){t.preventDefault()}),Vn(this._element,this._anchor,"marker"),this._popup=null}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.addTo=function(t){return this.remove(),this._map=t,t.getCanvasContainer().appendChild(this._element),t.on("move",this._update),t.on("moveend",this._update),this.setDraggable(this._draggable),this._update(),this._map.on("click",this._onMapClick),this},n.prototype.remove=function(){return this._map&&(this._map.off("click",this._onMapClick),this._map.off("move",this._update),this._map.off("moveend",this._update),this._map.off("mousedown",this._addDragHandler),this._map.off("touchstart",this._addDragHandler),this._map.off("mouseup",this._onUp),this._map.off("touchend",this._onUp),this._map.off("mousemove",this._onMove),this._map.off("touchmove",this._onMove),delete this._map),r.remove(this._element),this._popup&&this._popup.remove(),this},n.prototype.getLngLat=function(){return this._lngLat},n.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._popup&&this._popup.setLngLat(this._lngLat),this._update(),this},n.prototype.getElement=function(){return this._element},n.prototype.setPopup=function(t){if(this._popup&&(this._popup.remove(),this._popup=null),t){if(!("offset"in t.options)){var e=Math.sqrt(Math.pow(13.5,2)/2);t.options.offset=this._defaultMarker?{top:[0,0],"top-left":[0,0],"top-right":[0,0],bottom:[0,-38.1],"bottom-left":[e,-1*(24.6+e)],"bottom-right":[-e,-1*(24.6+e)],left:[13.5,-24.6],right:[-13.5,-24.6]}:this._offset}this._popup=t,this._lngLat&&this._popup.setLngLat(this._lngLat)}return this},n.prototype._onMapClick=function(t){var e=t.originalEvent.target,r=this._element;this._popup&&(e===r||r.contains(e))&&this.togglePopup()},n.prototype.getPopup=function(){return this._popup},n.prototype.togglePopup=function(){var t=this._popup;return t?(t.isOpen()?t.remove():t.addTo(this._map),this):this},n.prototype._update=function(t){this._map&&(this._map.transform.renderWorldCopies&&(this._lngLat=Nn(this._lngLat,this._pos,this._map.transform)),this._pos=this._map.project(this._lngLat)._add(this._offset),t&&"moveend"!==t.type||(this._pos=this._pos.round()),r.setTransform(this._element,jn[this._anchor]+" translate("+this._pos.x+"px, "+this._pos.y+"px)"))},n.prototype.getOffset=function(){return this._offset},n.prototype.setOffset=function(e){return this._offset=t.Point.convert(e),this._update(),this},n.prototype._onMove=function(e){this._pos=e.point.sub(this._positionDelta),this._lngLat=this._map.unproject(this._pos),this.setLngLat(this._lngLat),this._element.style.pointerEvents="none","pending"===this._state&&(this._state="active",this.fire(new t.Event("dragstart"))),this.fire(new t.Event("drag"))},n.prototype._onUp=function(){this._element.style.pointerEvents="auto",this._positionDelta=null,this._map.off("mousemove",this._onMove),this._map.off("touchmove",this._onMove),"active"===this._state&&this.fire(new t.Event("dragend")),this._state="inactive"},n.prototype._addDragHandler=function(t){this._element.contains(t.originalEvent.target)&&(t.preventDefault(),this._positionDelta=t.point.sub(this._pos).add(this._offset),this._state="pending",this._map.on("mousemove",this._onMove),this._map.on("touchmove",this._onMove),this._map.once("mouseup",this._onUp),this._map.once("touchend",this._onUp))},n.prototype.setDraggable=function(t){return this._draggable=!!t,this._map&&(t?(this._map.on("mousedown",this._addDragHandler),this._map.on("touchstart",this._addDragHandler)):(this._map.off("mousedown",this._addDragHandler),this._map.off("touchstart",this._addDragHandler))),this},n.prototype.isDraggable=function(){return this._draggable},n}(t.Evented),Hn={positionOptions:{enableHighAccuracy:!1,maximumAge:0,timeout:6e3},fitBoundsOptions:{maxZoom:15},trackUserLocation:!1,showUserLocation:!0},Gn=function(e){function n(r){e.call(this),this.options=t.extend({},Hn,r),t.bindAll(["_onSuccess","_onError","_finish","_setupUI","_updateCamera","_updateMarker"],this)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.onAdd=function(e){var n;return this._map=e,this._container=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-group"),n=this._setupUI,void 0!==Un?n(Un):void 0!==t.window.navigator.permissions?t.window.navigator.permissions.query({name:"geolocation"}).then(function(t){Un="denied"!==t.state,n(Un)}):(Un=!!t.window.navigator.geolocation,n(Un)),this._container},n.prototype.onRemove=function(){void 0!==this._geolocationWatchID&&(t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0),this.options.showUserLocation&&this._userLocationDotMarker&&this._userLocationDotMarker.remove(),r.remove(this._container),this._map=void 0},n.prototype._onSuccess=function(e){if(this.options.trackUserLocation)switch(this._lastKnownPosition=e,this._watchState){case"WAITING_ACTIVE":case"ACTIVE_LOCK":case"ACTIVE_ERROR":this._watchState="ACTIVE_LOCK",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");break;case"BACKGROUND":case"BACKGROUND_ERROR":this._watchState="BACKGROUND",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background")}this.options.showUserLocation&&"OFF"!==this._watchState&&this._updateMarker(e),this.options.trackUserLocation&&"ACTIVE_LOCK"!==this._watchState||this._updateCamera(e),this.options.showUserLocation&&this._dotElement.classList.remove("mapboxgl-user-location-dot-stale"),this.fire(new t.Event("geolocate",e)),this._finish()},n.prototype._updateCamera=function(e){var r=new t.LngLat(e.coords.longitude,e.coords.latitude),n=e.coords.accuracy,a=this._map.getBearing(),i=t.extend({bearing:a},this.options.fitBoundsOptions);this._map.fitBounds(r.toBounds(n),i,{geolocateSource:!0})},n.prototype._updateMarker=function(t){t?this._userLocationDotMarker.setLngLat([t.coords.longitude,t.coords.latitude]).addTo(this._map):this._userLocationDotMarker.remove()},n.prototype._onError=function(e){if(this.options.trackUserLocation)if(1===e.code)this._watchState="OFF",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"),void 0!==this._geolocationWatchID&&this._clearWatch();else switch(this._watchState){case"WAITING_ACTIVE":this._watchState="ACTIVE_ERROR",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error");break;case"ACTIVE_LOCK":this._watchState="ACTIVE_ERROR",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting");break;case"BACKGROUND":this._watchState="BACKGROUND_ERROR",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting")}"OFF"!==this._watchState&&this.options.showUserLocation&&this._dotElement.classList.add("mapboxgl-user-location-dot-stale"),this.fire(new t.Event("error",e)),this._finish()},n.prototype._finish=function(){this._timeoutId&&clearTimeout(this._timeoutId),this._timeoutId=void 0},n.prototype._setupUI=function(e){var n=this;!1!==e?(this._container.addEventListener("contextmenu",function(t){return t.preventDefault()}),this._geolocateButton=r.create("button","mapboxgl-ctrl-icon mapboxgl-ctrl-geolocate",this._container),this._geolocateButton.type="button",this._geolocateButton.setAttribute("aria-label","Geolocate"),this.options.trackUserLocation&&(this._geolocateButton.setAttribute("aria-pressed","false"),this._watchState="OFF"),this.options.showUserLocation&&(this._dotElement=r.create("div","mapboxgl-user-location-dot"),this._userLocationDotMarker=new qn(this._dotElement),this.options.trackUserLocation&&(this._watchState="OFF")),this._geolocateButton.addEventListener("click",this.trigger.bind(this)),this._setup=!0,this.options.trackUserLocation&&this._map.on("movestart",function(e){e.geolocateSource||"ACTIVE_LOCK"!==n._watchState||(n._watchState="BACKGROUND",n._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background"),n._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),n.fire(new t.Event("trackuserlocationend")))})):t.warnOnce("Geolocation support is not available, the GeolocateControl will not be visible.")},n.prototype.trigger=function(){if(!this._setup)return t.warnOnce("Geolocate control triggered before added to a map"),!1;if(this.options.trackUserLocation){switch(this._watchState){case"OFF":this._watchState="WAITING_ACTIVE",this.fire(new t.Event("trackuserlocationstart"));break;case"WAITING_ACTIVE":case"ACTIVE_LOCK":case"ACTIVE_ERROR":case"BACKGROUND_ERROR":this._watchState="OFF",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"),this.fire(new t.Event("trackuserlocationend"));break;case"BACKGROUND":this._watchState="ACTIVE_LOCK",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._lastKnownPosition&&this._updateCamera(this._lastKnownPosition),this.fire(new t.Event("trackuserlocationstart"))}switch(this._watchState){case"WAITING_ACTIVE":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");break;case"ACTIVE_LOCK":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");break;case"ACTIVE_ERROR":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error");break;case"BACKGROUND":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background");break;case"BACKGROUND_ERROR":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background-error")}"OFF"===this._watchState&&void 0!==this._geolocationWatchID?this._clearWatch():void 0===this._geolocationWatchID&&(this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.setAttribute("aria-pressed","true"),this._geolocationWatchID=t.window.navigator.geolocation.watchPosition(this._onSuccess,this._onError,this.options.positionOptions))}else t.window.navigator.geolocation.getCurrentPosition(this._onSuccess,this._onError,this.options.positionOptions),this._timeoutId=setTimeout(this._finish,1e4);return!0},n.prototype._clearWatch=function(){t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0,this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.setAttribute("aria-pressed","false"),this.options.showUserLocation&&this._updateMarker(null)},n}(t.Evented),Yn={maxWidth:100,unit:"metric"},Wn=function(e){this.options=t.extend({},Yn,e),t.bindAll(["_onMove","setUnit"],this)};function Xn(t,e,r){var n,a,i,o,s,l,c=r&&r.maxWidth||100,u=t._container.clientHeight/2,h=(n=t.unproject([0,u]),a=t.unproject([c,u]),i=Math.PI/180,o=n.lat*i,s=a.lat*i,l=Math.sin(o)*Math.sin(s)+Math.cos(o)*Math.cos(s)*Math.cos((a.lng-n.lng)*i),6371e3*Math.acos(Math.min(l,1)));if(r&&"imperial"===r.unit){var f=3.2808*h;f>5280?Zn(e,c,f/5280,"mi"):Zn(e,c,f,"ft")}else r&&"nautical"===r.unit?Zn(e,c,h/1852,"nm"):Zn(e,c,h,"m")}function Zn(t,e,r,n){var a,i,o,s=(a=r,(i=Math.pow(10,(""+Math.floor(a)).length-1))*(o=(o=a/i)>=10?10:o>=5?5:o>=3?3:o>=2?2:o>=1?1:function(t){var e=Math.pow(10,Math.ceil(-Math.log(t)/Math.LN10));return Math.round(t*e)/e}(o))),l=s/r;"m"===n&&s>=1e3&&(s/=1e3,n="km"),t.style.width=e*l+"px",t.innerHTML=s+n}Wn.prototype.getDefaultPosition=function(){return"bottom-left"},Wn.prototype._onMove=function(){Xn(this._map,this._container,this.options)},Wn.prototype.onAdd=function(t){return this._map=t,this._container=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-scale",t.getContainer()),this._map.on("move",this._onMove),this._onMove(),this._container},Wn.prototype.onRemove=function(){r.remove(this._container),this._map.off("move",this._onMove),this._map=void 0},Wn.prototype.setUnit=function(t){this.options.unit=t,Xn(this._map,this._container,this.options)};var Jn=function(e){this._fullscreen=!1,e&&e.container&&(e.container instanceof t.window.HTMLElement?this._container=e.container:t.warnOnce("Full screen control 'container' must be a DOM element.")),t.bindAll(["_onClickFullscreen","_changeIcon"],this),"onfullscreenchange"in t.window.document?this._fullscreenchange="fullscreenchange":"onmozfullscreenchange"in t.window.document?this._fullscreenchange="mozfullscreenchange":"onwebkitfullscreenchange"in t.window.document?this._fullscreenchange="webkitfullscreenchange":"onmsfullscreenchange"in t.window.document&&(this._fullscreenchange="MSFullscreenChange"),this._className="mapboxgl-ctrl"};Jn.prototype.onAdd=function(e){return this._map=e,this._container||(this._container=this._map.getContainer()),this._controlContainer=r.create("div",this._className+" mapboxgl-ctrl-group"),this._checkFullscreenSupport()?this._setupUI():(this._controlContainer.style.display="none",t.warnOnce("This device does not support fullscreen mode.")),this._controlContainer},Jn.prototype.onRemove=function(){r.remove(this._controlContainer),this._map=null,t.window.document.removeEventListener(this._fullscreenchange,this._changeIcon)},Jn.prototype._checkFullscreenSupport=function(){return!!(t.window.document.fullscreenEnabled||t.window.document.mozFullScreenEnabled||t.window.document.msFullscreenEnabled||t.window.document.webkitFullscreenEnabled)},Jn.prototype._setupUI=function(){(this._fullscreenButton=r.create("button",this._className+"-icon "+this._className+"-fullscreen",this._controlContainer)).type="button",this._updateTitle(),this._fullscreenButton.addEventListener("click",this._onClickFullscreen),t.window.document.addEventListener(this._fullscreenchange,this._changeIcon)},Jn.prototype._updateTitle=function(){var t=this._isFullscreen()?"Exit fullscreen":"Enter fullscreen";this._fullscreenButton.setAttribute("aria-label",t),this._fullscreenButton.title=t},Jn.prototype._isFullscreen=function(){return this._fullscreen},Jn.prototype._changeIcon=function(){(t.window.document.fullscreenElement||t.window.document.mozFullScreenElement||t.window.document.webkitFullscreenElement||t.window.document.msFullscreenElement)===this._container!==this._fullscreen&&(this._fullscreen=!this._fullscreen,this._fullscreenButton.classList.toggle(this._className+"-shrink"),this._fullscreenButton.classList.toggle(this._className+"-fullscreen"),this._updateTitle())},Jn.prototype._onClickFullscreen=function(){this._isFullscreen()?t.window.document.exitFullscreen?t.window.document.exitFullscreen():t.window.document.mozCancelFullScreen?t.window.document.mozCancelFullScreen():t.window.document.msExitFullscreen?t.window.document.msExitFullscreen():t.window.document.webkitCancelFullScreen&&t.window.document.webkitCancelFullScreen():this._container.requestFullscreen?this._container.requestFullscreen():this._container.mozRequestFullScreen?this._container.mozRequestFullScreen():this._container.msRequestFullscreen?this._container.msRequestFullscreen():this._container.webkitRequestFullscreen&&this._container.webkitRequestFullscreen()};var Kn={closeButton:!0,closeOnClick:!0,className:"",maxWidth:"240px"},Qn=function(e){function n(r){e.call(this),this.options=t.extend(Object.create(Kn),r),t.bindAll(["_update","_onClickClose","remove"],this)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.addTo=function(e){var r=this;return this._map=e,this.options.closeOnClick&&this._map.on("click",this._onClickClose),this._map.on("remove",this.remove),this._update(),this._trackPointer?(this._map.on("mousemove",function(t){r._update(t.point)}),this._map.on("mouseup",function(t){r._update(t.point)}),this._container.classList.add("mapboxgl-popup-track-pointer"),this._map._canvasContainer.classList.add("mapboxgl-track-pointer")):this._map.on("move",this._update),this.fire(new t.Event("open")),this},n.prototype.isOpen=function(){return!!this._map},n.prototype.remove=function(){return this._content&&r.remove(this._content),this._container&&(r.remove(this._container),delete this._container),this._map&&(this._map.off("move",this._update),this._map.off("click",this._onClickClose),this._map.off("remove",this.remove),this._map.off("mousemove"),delete this._map),this.fire(new t.Event("close")),this},n.prototype.getLngLat=function(){return this._lngLat},n.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._trackPointer=!1,this._update(),this._map&&(this._map.on("move",this._update),this._map.off("mousemove"),this._container.classList.remove("mapboxgl-popup-track-pointer"),this._map._canvasContainer.classList.remove("mapboxgl-track-pointer")),this},n.prototype.trackPointer=function(){var t=this;return this._trackPointer=!0,this._pos=null,this._map&&(this._map.off("move",this._update),this._map.on("mousemove",function(e){t._update(e.point)}),this._map.on("drag",function(e){t._update(e.point)}),this._container.classList.add("mapboxgl-popup-track-pointer"),this._map._canvasContainer.classList.add("mapboxgl-track-pointer")),this},n.prototype.getElement=function(){return this._container},n.prototype.setText=function(e){return this.setDOMContent(t.window.document.createTextNode(e))},n.prototype.setHTML=function(e){var r,n=t.window.document.createDocumentFragment(),a=t.window.document.createElement("body");for(a.innerHTML=e;r=a.firstChild;)n.appendChild(r);return this.setDOMContent(n)},n.prototype.getMaxWidth=function(){return this._container.style.maxWidth},n.prototype.setMaxWidth=function(t){return this.options.maxWidth=t,this._update(),this},n.prototype.setDOMContent=function(t){return this._createContent(),this._content.appendChild(t),this._update(),this},n.prototype._createContent=function(){this._content&&r.remove(this._content),this._content=r.create("div","mapboxgl-popup-content",this._container),this.options.closeButton&&(this._closeButton=r.create("button","mapboxgl-popup-close-button",this._content),this._closeButton.type="button",this._closeButton.setAttribute("aria-label","Close popup"),this._closeButton.innerHTML="&#215;",this._closeButton.addEventListener("click",this._onClickClose))},n.prototype._update=function(e){var n=this,a=this._lngLat||this._trackPointer;if(this._map&&a&&this._content&&(this._container||(this._container=r.create("div","mapboxgl-popup",this._map.getContainer()),this._tip=r.create("div","mapboxgl-popup-tip",this._container),this._container.appendChild(this._content),this.options.className&&this.options.className.split(" ").forEach(function(t){return n._container.classList.add(t)})),this.options.maxWidth&&this._container.style.maxWidth!==this.options.maxWidth&&(this._container.style.maxWidth=this.options.maxWidth),this._map.transform.renderWorldCopies&&!this._trackPointer&&(this._lngLat=Nn(this._lngLat,this._pos,this._map.transform)),!this._trackPointer||e)){var i=this._pos=this._trackPointer&&e?e:this._map.project(this._lngLat),o=this.options.anchor,s=function e(r){if(r){if("number"==typeof r){var n=Math.round(Math.sqrt(.5*Math.pow(r,2)));return{center:new t.Point(0,0),top:new t.Point(0,r),"top-left":new t.Point(n,n),"top-right":new t.Point(-n,n),bottom:new t.Point(0,-r),"bottom-left":new t.Point(n,-n),"bottom-right":new t.Point(-n,-n),left:new t.Point(r,0),right:new t.Point(-r,0)}}if(r instanceof t.Point||Array.isArray(r)){var a=t.Point.convert(r);return{center:a,top:a,"top-left":a,"top-right":a,bottom:a,"bottom-left":a,"bottom-right":a,left:a,right:a}}return{center:t.Point.convert(r.center||[0,0]),top:t.Point.convert(r.top||[0,0]),"top-left":t.Point.convert(r["top-left"]||[0,0]),"top-right":t.Point.convert(r["top-right"]||[0,0]),bottom:t.Point.convert(r.bottom||[0,0]),"bottom-left":t.Point.convert(r["bottom-left"]||[0,0]),"bottom-right":t.Point.convert(r["bottom-right"]||[0,0]),left:t.Point.convert(r.left||[0,0]),right:t.Point.convert(r.right||[0,0])}}return e(new t.Point(0,0))}(this.options.offset);if(!o){var l,c=this._container.offsetWidth,u=this._container.offsetHeight;l=i.y+s.bottom.y<u?["top"]:i.y>this._map.transform.height-u?["bottom"]:[],i.x<c/2?l.push("left"):i.x>this._map.transform.width-c/2&&l.push("right"),o=0===l.length?"bottom":l.join("-")}var h=i.add(s[o]).round();r.setTransform(this._container,jn[o]+" translate("+h.x+"px,"+h.y+"px)"),Vn(this._container,o,"popup")}},n.prototype._onClickClose=function(){this.remove()},n}(t.Evented),$n={version:t.version,supported:e,setRTLTextPlugin:t.setRTLTextPlugin,Map:Dn,NavigationControl:Bn,GeolocateControl:Gn,AttributionControl:Ln,ScaleControl:Wn,FullscreenControl:Jn,Popup:Qn,Marker:qn,Style:Re,LngLat:t.LngLat,LngLatBounds:t.LngLatBounds,Point:t.Point,MercatorCoordinate:t.MercatorCoordinate,Evented:t.Evented,config:t.config,get accessToken(){return t.config.ACCESS_TOKEN},set accessToken(e){t.config.ACCESS_TOKEN=e},get baseApiUrl(){return t.config.API_URL},set baseApiUrl(e){t.config.API_URL=e},get workerCount(){return It.workerCount},set workerCount(t){It.workerCount=t},get maxParallelImageRequests(){return t.config.MAX_PARALLEL_IMAGE_REQUESTS},set maxParallelImageRequests(e){t.config.MAX_PARALLEL_IMAGE_REQUESTS=e},clearStorage:function(e){t.clearTileCache(e)},workerUrl:""};return $n}),r},"object"==typeof r&&"undefined"!=typeof e?e.exports=a():(n=n||self).mapboxgl=a()},{}],428:[function(t,e,r){"use strict";e.exports=function(t){for(var e=1<<t+1,r=new Array(e),n=0;n<e;++n)r[n]=i(t,n);return r};var n=t("convex-hull");function a(t,e,r){for(var n=new Array(t),a=0;a<t;++a)n[a]=0,a===e&&(n[a]+=.5),a===r&&(n[a]+=.5);return n}function i(t,e){if(0===e||e===(1<<t+1)-1)return[];for(var r=[],i=[],o=0;o<=t;++o)if(e&1<<o){r.push(a(t,o-1,o-1)),i.push(null);for(var s=0;s<=t;++s)~e&1<<s&&(r.push(a(t,o-1,s-1)),i.push([o,s]))}var l=n(r),c=[];t:for(o=0;o<l.length;++o){var u=l[o],h=[];for(s=0;s<u.length;++s){if(!i[u[s]])continue t;h.push(i[u[s]].slice())}c.push(h)}return c}},{"convex-hull":132}],429:[function(t,e,r){var n=t("./normalize"),a=t("gl-mat4/create"),i=t("gl-mat4/clone"),o=t("gl-mat4/determinant"),s=t("gl-mat4/invert"),l=t("gl-mat4/transpose"),c={length:t("gl-vec3/length"),normalize:t("gl-vec3/normalize"),dot:t("gl-vec3/dot"),cross:t("gl-vec3/cross")},u=a(),h=a(),f=[0,0,0,0],p=[[0,0,0],[0,0,0],[0,0,0]],d=[0,0,0];function g(t,e,r,n,a){t[0]=e[0]*n+r[0]*a,t[1]=e[1]*n+r[1]*a,t[2]=e[2]*n+r[2]*a}e.exports=function(t,e,r,a,v,m){if(e||(e=[0,0,0]),r||(r=[0,0,0]),a||(a=[0,0,0]),v||(v=[0,0,0,1]),m||(m=[0,0,0,1]),!n(u,t))return!1;if(i(h,u),h[3]=0,h[7]=0,h[11]=0,h[15]=1,Math.abs(o(h)<1e-8))return!1;var y,x,b,_,w,k,T,M=u[3],A=u[7],S=u[11],E=u[12],L=u[13],C=u[14],P=u[15];if(0!==M||0!==A||0!==S){if(f[0]=M,f[1]=A,f[2]=S,f[3]=P,!s(h,h))return!1;l(h,h),y=v,b=h,_=(x=f)[0],w=x[1],k=x[2],T=x[3],y[0]=b[0]*_+b[4]*w+b[8]*k+b[12]*T,y[1]=b[1]*_+b[5]*w+b[9]*k+b[13]*T,y[2]=b[2]*_+b[6]*w+b[10]*k+b[14]*T,y[3]=b[3]*_+b[7]*w+b[11]*k+b[15]*T}else v[0]=v[1]=v[2]=0,v[3]=1;if(e[0]=E,e[1]=L,e[2]=C,function(t,e){t[0][0]=e[0],t[0][1]=e[1],t[0][2]=e[2],t[1][0]=e[4],t[1][1]=e[5],t[1][2]=e[6],t[2][0]=e[8],t[2][1]=e[9],t[2][2]=e[10]}(p,u),r[0]=c.length(p[0]),c.normalize(p[0],p[0]),a[0]=c.dot(p[0],p[1]),g(p[1],p[1],p[0],1,-a[0]),r[1]=c.length(p[1]),c.normalize(p[1],p[1]),a[0]/=r[1],a[1]=c.dot(p[0],p[2]),g(p[2],p[2],p[0],1,-a[1]),a[2]=c.dot(p[1],p[2]),g(p[2],p[2],p[1],1,-a[2]),r[2]=c.length(p[2]),c.normalize(p[2],p[2]),a[1]/=r[2],a[2]/=r[2],c.cross(d,p[1],p[2]),c.dot(p[0],d)<0)for(var O=0;O<3;O++)r[O]*=-1,p[O][0]*=-1,p[O][1]*=-1,p[O][2]*=-1;return m[0]=.5*Math.sqrt(Math.max(1+p[0][0]-p[1][1]-p[2][2],0)),m[1]=.5*Math.sqrt(Math.max(1-p[0][0]+p[1][1]-p[2][2],0)),m[2]=.5*Math.sqrt(Math.max(1-p[0][0]-p[1][1]+p[2][2],0)),m[3]=.5*Math.sqrt(Math.max(1+p[0][0]+p[1][1]+p[2][2],0)),p[2][1]>p[1][2]&&(m[0]=-m[0]),p[0][2]>p[2][0]&&(m[1]=-m[1]),p[1][0]>p[0][1]&&(m[2]=-m[2]),!0}},{"./normalize":430,"gl-mat4/clone":262,"gl-mat4/create":263,"gl-mat4/determinant":264,"gl-mat4/invert":268,"gl-mat4/transpose":279,"gl-vec3/cross":336,"gl-vec3/dot":341,"gl-vec3/length":351,"gl-vec3/normalize":358}],430:[function(t,e,r){e.exports=function(t,e){var r=e[15];if(0===r)return!1;for(var n=1/r,a=0;a<16;a++)t[a]=e[a]*n;return!0}},{}],431:[function(t,e,r){var n=t("gl-vec3/lerp"),a=t("mat4-recompose"),i=t("mat4-decompose"),o=t("gl-mat4/determinant"),s=t("quat-slerp"),l=h(),c=h(),u=h();function h(){return{translate:f(),scale:f(1),skew:f(),perspective:[0,0,0,1],quaternion:[0,0,0,1]}}function f(t){return[t||0,t||0,t||0]}e.exports=function(t,e,r,h){if(0===o(e)||0===o(r))return!1;var f=i(e,l.translate,l.scale,l.skew,l.perspective,l.quaternion),p=i(r,c.translate,c.scale,c.skew,c.perspective,c.quaternion);return!(!f||!p||(n(u.translate,l.translate,c.translate,h),n(u.skew,l.skew,c.skew,h),n(u.scale,l.scale,c.scale,h),n(u.perspective,l.perspective,c.perspective,h),s(u.quaternion,l.quaternion,c.quaternion,h),a(t,u.translate,u.scale,u.skew,u.perspective,u.quaternion),0))}},{"gl-mat4/determinant":264,"gl-vec3/lerp":352,"mat4-decompose":429,"mat4-recompose":432,"quat-slerp":484}],432:[function(t,e,r){var n={identity:t("gl-mat4/identity"),translate:t("gl-mat4/translate"),multiply:t("gl-mat4/multiply"),create:t("gl-mat4/create"),scale:t("gl-mat4/scale"),fromRotationTranslation:t("gl-mat4/fromRotationTranslation")},a=(n.create(),n.create());e.exports=function(t,e,r,i,o,s){return n.identity(t),n.fromRotationTranslation(t,s,e),t[3]=o[0],t[7]=o[1],t[11]=o[2],t[15]=o[3],n.identity(a),0!==i[2]&&(a[9]=i[2],n.multiply(t,t,a)),0!==i[1]&&(a[9]=0,a[8]=i[1],n.multiply(t,t,a)),0!==i[0]&&(a[8]=0,a[4]=i[0],n.multiply(t,t,a)),n.scale(t,t,r),t}},{"gl-mat4/create":263,"gl-mat4/fromRotationTranslation":266,"gl-mat4/identity":267,"gl-mat4/multiply":270,"gl-mat4/scale":277,"gl-mat4/translate":278}],433:[function(t,e,r){"use strict";e.exports=Math.log2||function(t){return Math.log(t)*Math.LOG2E}},{}],434:[function(t,e,r){"use strict";var n=t("binary-search-bounds"),a=t("mat4-interpolate"),i=t("gl-mat4/invert"),o=t("gl-mat4/rotateX"),s=t("gl-mat4/rotateY"),l=t("gl-mat4/rotateZ"),c=t("gl-mat4/lookAt"),u=t("gl-mat4/translate"),h=(t("gl-mat4/scale"),t("gl-vec3/normalize")),f=[0,0,0];function p(t){this._components=t.slice(),this._time=[0],this.prevMatrix=t.slice(),this.nextMatrix=t.slice(),this.computedMatrix=t.slice(),this.computedInverse=t.slice(),this.computedEye=[0,0,0],this.computedUp=[0,0,0],this.computedCenter=[0,0,0],this.computedRadius=[0],this._limits=[-1/0,1/0]}e.exports=function(t){return new p((t=t||{}).matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])};var d=p.prototype;d.recalcMatrix=function(t){var e=this._time,r=n.le(e,t),o=this.computedMatrix;if(!(r<0)){var s=this._components;if(r===e.length-1)for(var l=16*r,c=0;c<16;++c)o[c]=s[l++];else{var u=e[r+1]-e[r],f=(l=16*r,this.prevMatrix),p=!0;for(c=0;c<16;++c)f[c]=s[l++];var d=this.nextMatrix;for(c=0;c<16;++c)d[c]=s[l++],p=p&&f[c]===d[c];if(u<1e-6||p)for(c=0;c<16;++c)o[c]=f[c];else a(o,f,d,(t-e[r])/u)}var g=this.computedUp;g[0]=o[1],g[1]=o[5],g[2]=o[9],h(g,g);var v=this.computedInverse;i(v,o);var m=this.computedEye,y=v[15];m[0]=v[12]/y,m[1]=v[13]/y,m[2]=v[14]/y;var x=this.computedCenter,b=Math.exp(this.computedRadius[0]);for(c=0;c<3;++c)x[c]=m[c]-o[2+4*c]*b}},d.idle=function(t){if(!(t<this.lastT())){for(var e=this._components,r=e.length-16,n=0;n<16;++n)e.push(e[r++]);this._time.push(t)}},d.flush=function(t){var e=n.gt(this._time,t)-2;e<0||(this._time.splice(0,e),this._components.splice(0,16*e))},d.lastT=function(){return this._time[this._time.length-1]},d.lookAt=function(t,e,r,n){this.recalcMatrix(t),e=e||this.computedEye,r=r||f,n=n||this.computedUp,this.setMatrix(t,c(this.computedMatrix,e,r,n));for(var a=0,i=0;i<3;++i)a+=Math.pow(r[i]-e[i],2);a=Math.log(Math.sqrt(a)),this.computedRadius[0]=a},d.rotate=function(t,e,r,n){this.recalcMatrix(t);var a=this.computedInverse;e&&s(a,a,e),r&&o(a,a,r),n&&l(a,a,n),this.setMatrix(t,i(this.computedMatrix,a))};var g=[0,0,0];d.pan=function(t,e,r,n){g[0]=-(e||0),g[1]=-(r||0),g[2]=-(n||0),this.recalcMatrix(t);var a=this.computedInverse;u(a,a,g),this.setMatrix(t,i(a,a))},d.translate=function(t,e,r,n){g[0]=e||0,g[1]=r||0,g[2]=n||0,this.recalcMatrix(t);var a=this.computedMatrix;u(a,a,g),this.setMatrix(t,a)},d.setMatrix=function(t,e){if(!(t<this.lastT())){this._time.push(t);for(var r=0;r<16;++r)this._components.push(e[r])}},d.setDistance=function(t,e){this.computedRadius[0]=e},d.setDistanceLimits=function(t,e){var r=this._limits;r[0]=t,r[1]=e},d.getDistanceLimits=function(t){var e=this._limits;return t?(t[0]=e[0],t[1]=e[1],t):e}},{"binary-search-bounds":93,"gl-mat4/invert":268,"gl-mat4/lookAt":269,"gl-mat4/rotateX":274,"gl-mat4/rotateY":275,"gl-mat4/rotateZ":276,"gl-mat4/scale":277,"gl-mat4/translate":278,"gl-vec3/normalize":358,"mat4-interpolate":431}],435:[function(t,e,r){"use strict";e.exports=function(t){var e=t.length;if(e<3){for(var r=new Array(e),a=0;a<e;++a)r[a]=a;return 2===e&&t[0][0]===t[1][0]&&t[0][1]===t[1][1]?[0]:r}for(var i=new Array(e),a=0;a<e;++a)i[a]=a;i.sort(function(e,r){var n=t[e][0]-t[r][0];return n||t[e][1]-t[r][1]});for(var o=[i[0],i[1]],s=[i[0],i[1]],a=2;a<e;++a){for(var l=i[a],c=t[l],u=o.length;u>1&&n(t[o[u-2]],t[o[u-1]],c)<=0;)u-=1,o.pop();for(o.push(l),u=s.length;u>1&&n(t[s[u-2]],t[s[u-1]],c)>=0;)u-=1,s.pop();s.push(l)}for(var r=new Array(s.length+o.length-2),h=0,a=0,f=o.length;a<f;++a)r[h++]=o[a];for(var p=s.length-2;p>0;--p)r[h++]=s[p];return r};var n=t("robust-orientation")[3]},{"robust-orientation":508}],436:[function(t,e,r){"use strict";e.exports=function(t,e){e||(e=t,t=window);var r=0,a=0,i=0,o={shift:!1,alt:!1,control:!1,meta:!1},s=!1;function l(t){var e=!1;return"altKey"in t&&(e=e||t.altKey!==o.alt,o.alt=!!t.altKey),"shiftKey"in t&&(e=e||t.shiftKey!==o.shift,o.shift=!!t.shiftKey),"ctrlKey"in t&&(e=e||t.ctrlKey!==o.control,o.control=!!t.ctrlKey),"metaKey"in t&&(e=e||t.metaKey!==o.meta,o.meta=!!t.metaKey),e}function c(t,s){var c=n.x(s),u=n.y(s);"buttons"in s&&(t=0|s.buttons),(t!==r||c!==a||u!==i||l(s))&&(r=0|t,a=c||0,i=u||0,e&&e(r,a,i,o))}function u(t){c(0,t)}function h(){(r||a||i||o.shift||o.alt||o.meta||o.control)&&(a=i=0,r=0,o.shift=o.alt=o.control=o.meta=!1,e&&e(0,0,0,o))}function f(t){l(t)&&e&&e(r,a,i,o)}function p(t){0===n.buttons(t)?c(0,t):c(r,t)}function d(t){c(r|n.buttons(t),t)}function g(t){c(r&~n.buttons(t),t)}function v(){s||(s=!0,t.addEventListener("mousemove",p),t.addEventListener("mousedown",d),t.addEventListener("mouseup",g),t.addEventListener("mouseleave",u),t.addEventListener("mouseenter",u),t.addEventListener("mouseout",u),t.addEventListener("mouseover",u),t.addEventListener("blur",h),t.addEventListener("keyup",f),t.addEventListener("keydown",f),t.addEventListener("keypress",f),t!==window&&(window.addEventListener("blur",h),window.addEventListener("keyup",f),window.addEventListener("keydown",f),window.addEventListener("keypress",f)))}v();var m={element:t};return Object.defineProperties(m,{enabled:{get:function(){return s},set:function(e){e?v():s&&(s=!1,t.removeEventListener("mousemove",p),t.removeEventListener("mousedown",d),t.removeEventListener("mouseup",g),t.removeEventListener("mouseleave",u),t.removeEventListener("mouseenter",u),t.removeEventListener("mouseout",u),t.removeEventListener("mouseover",u),t.removeEventListener("blur",h),t.removeEventListener("keyup",f),t.removeEventListener("keydown",f),t.removeEventListener("keypress",f),t!==window&&(window.removeEventListener("blur",h),window.removeEventListener("keyup",f),window.removeEventListener("keydown",f),window.removeEventListener("keypress",f)))},enumerable:!0},buttons:{get:function(){return r},enumerable:!0},x:{get:function(){return a},enumerable:!0},y:{get:function(){return i},enumerable:!0},mods:{get:function(){return o},enumerable:!0}}),m};var n=t("mouse-event")},{"mouse-event":438}],437:[function(t,e,r){var n={left:0,top:0};e.exports=function(t,e,r){e=e||t.currentTarget||t.srcElement,Array.isArray(r)||(r=[0,0]);var a=t.clientX||0,i=t.clientY||0,o=(s=e,s===window||s===document||s===document.body?n:s.getBoundingClientRect());var s;return r[0]=a-o.left,r[1]=i-o.top,r}},{}],438:[function(t,e,r){"use strict";function n(t){return t.target||t.srcElement||window}r.buttons=function(t){if("object"==typeof t){if("buttons"in t)return t.buttons;if("which"in t){if(2===(e=t.which))return 4;if(3===e)return 2;if(e>0)return 1<<e-1}else if("button"in t){var e;if(1===(e=t.button))return 4;if(2===e)return 2;if(e>=0)return 1<<e}}return 0},r.element=n,r.x=function(t){if("object"==typeof t){if("offsetX"in t)return t.offsetX;var e=n(t).getBoundingClientRect();return t.clientX-e.left}return 0},r.y=function(t){if("object"==typeof t){if("offsetY"in t)return t.offsetY;var e=n(t).getBoundingClientRect();return t.clientY-e.top}return 0}},{}],439:[function(t,e,r){"use strict";var n=t("to-px");e.exports=function(t,e,r){"function"==typeof t&&(r=!!e,e=t,t=window);var a=n("ex",t),i=function(t){r&&t.preventDefault();var n=t.deltaX||0,i=t.deltaY||0,o=t.deltaZ||0,s=t.deltaMode,l=1;switch(s){case 1:l=a;break;case 2:l=window.innerHeight}if(i*=l,o*=l,(n*=l)||i||o)return e(n,i,o,t)};return t.addEventListener("wheel",i),i}},{"to-px":537}],440:[function(t,e,r){"use strict";var n=t("typedarray-pool");function a(t){return"a"+t}function i(t){return"d"+t}function o(t,e){return"c"+t+"_"+e}function s(t){return"s"+t}function l(t,e){return"t"+t+"_"+e}function c(t){return"o"+t}function u(t){return"x"+t}function h(t){return"p"+t}function f(t,e){return"d"+t+"_"+e}function p(t){return"i"+t}function d(t,e){return"u"+t+"_"+e}function g(t){return"b"+t}function v(t){return"y"+t}function m(t){return"e"+t}function y(t){return"v"+t}e.exports=function(t){function e(t){throw new Error("ndarray-extract-contour: "+t)}"object"!=typeof t&&e("Must specify arguments");var r=t.order;Array.isArray(r)||e("Must specify order");var A=t.arrayArguments||1;A<1&&e("Must have at least one array argument");var S=t.scalarArguments||0;S<0&&e("Scalar arg count must be > 0");"function"!=typeof t.vertex&&e("Must specify vertex creation function");"function"!=typeof t.cell&&e("Must specify cell creation function");"function"!=typeof t.phase&&e("Must specify phase function");for(var E=t.getters||[],L=new Array(A),C=0;C<A;++C)E.indexOf(C)>=0?L[C]=!0:L[C]=!1;return function(t,e,r,A,S,E){var L=E.length,C=S.length;if(C<2)throw new Error("ndarray-extract-contour: Dimension must be at least 2");for(var P="extractContour"+S.join("_"),O=[],z=[],I=[],D=0;D<L;++D)I.push(a(D));for(var D=0;D<A;++D)I.push(u(D));for(var D=0;D<C;++D)z.push(s(D)+"="+a(0)+".shape["+D+"]|0");for(var D=0;D<L;++D){z.push(i(D)+"="+a(D)+".data",c(D)+"="+a(D)+".offset|0");for(var R=0;R<C;++R)z.push(l(D,R)+"="+a(D)+".stride["+R+"]|0")}for(var D=0;D<L;++D){z.push(h(D)+"="+c(D)),z.push(o(D,0));for(var R=1;R<1<<C;++R){for(var F=[],B=0;B<C;++B)R&1<<B&&F.push("-"+l(D,B));z.push(f(D,R)+"=("+F.join("")+")|0"),z.push(o(D,R)+"=0")}}for(var D=0;D<L;++D)for(var R=0;R<C;++R){var N=[l(D,S[R])];R>0&&N.push(l(D,S[R-1])+"*"+s(S[R-1])),z.push(d(D,S[R])+"=("+N.join("-")+")|0")}for(var D=0;D<C;++D)z.push(p(D)+"=0");z.push(_+"=0");for(var j=["2"],D=C-2;D>=0;--D)j.push(s(S[D]));z.push(w+"=("+j.join("*")+")|0",b+"=mallocUint32("+w+")",x+"=mallocUint32("+w+")",k+"=0"),z.push(g(0)+"=0");for(var R=1;R<1<<C;++R){for(var V=[],U=[],B=0;B<C;++B)R&1<<B&&(0===U.length?V.push("1"):V.unshift(U.join("*"))),U.push(s(S[B]));var q="";V[0].indexOf(s(S[C-2]))<0&&(q="-");var H=M(C,R,S);z.push(m(H)+"=(-"+V.join("-")+")|0",v(H)+"=("+q+V.join("-")+")|0",g(H)+"=0")}function G(t,e){O.push("for(",p(S[t]),"=",e,";",p(S[t]),"<",s(S[t]),";","++",p(S[t]),"){")}function Y(t){for(var e=0;e<L;++e)O.push(h(e),"+=",d(e,S[t]),";");O.push("}")}function W(){for(var t=1;t<1<<C;++t)O.push(T,"=",m(t),";",m(t),"=",v(t),";",v(t),"=",T,";")}z.push(y(0)+"=0",T+"=0"),function t(e,r){if(e<0)return void function(t){for(var e=0;e<L;++e)E[e]?O.push(o(e,0),"=",i(e),".get(",h(e),");"):O.push(o(e,0),"=",i(e),"[",h(e),"];");for(var r=[],e=0;e<L;++e)r.push(o(e,0));for(var e=0;e<A;++e)r.push(u(e));O.push(g(0),"=",b,"[",k,"]=phase(",r.join(),");");for(var n=1;n<1<<C;++n)O.push(g(n),"=",b,"[",k,"+",m(n),"];");for(var a=[],n=1;n<1<<C;++n)a.push("("+g(0)+"!=="+g(n)+")");O.push("if(",a.join("||"),"){");for(var s=[],e=0;e<C;++e)s.push(p(e));for(var e=0;e<L;++e){s.push(o(e,0));for(var n=1;n<1<<C;++n)E[e]?O.push(o(e,n),"=",i(e),".get(",h(e),"+",f(e,n),");"):O.push(o(e,n),"=",i(e),"[",h(e),"+",f(e,n),"];"),s.push(o(e,n))}for(var e=0;e<1<<C;++e)s.push(g(e));for(var e=0;e<A;++e)s.push(u(e));O.push("vertex(",s.join(),");",y(0),"=",x,"[",k,"]=",_,"++;");for(var l=(1<<C)-1,c=g(l),n=0;n<C;++n)if(0==(t&~(1<<n))){for(var d=l^1<<n,v=g(d),w=[],T=d;T>0;T=T-1&d)w.push(x+"["+k+"+"+m(T)+"]");w.push(y(0));for(var T=0;T<L;++T)1&n?w.push(o(T,l),o(T,d)):w.push(o(T,d),o(T,l));1&n?w.push(c,v):w.push(v,c);for(var T=0;T<A;++T)w.push(u(T));O.push("if(",c,"!==",v,"){","face(",w.join(),")}")}O.push("}",k,"+=1;")}(r);!function(t){for(var e=t-1;e>=0;--e)G(e,0);for(var r=[],e=0;e<L;++e)E[e]?r.push(i(e)+".get("+h(e)+")"):r.push(i(e)+"["+h(e)+"]");for(var e=0;e<A;++e)r.push(u(e));O.push(b,"[",k,"++]=phase(",r.join(),");");for(var e=0;e<t;++e)Y(e);for(var n=0;n<L;++n)O.push(h(n),"+=",d(n,S[t]),";")}(e);O.push("if(",s(S[e]),">0){",p(S[e]),"=1;");t(e-1,r|1<<S[e]);for(var n=0;n<L;++n)O.push(h(n),"+=",d(n,S[e]),";");e===C-1&&(O.push(k,"=0;"),W());G(e,2);t(e-1,r);e===C-1&&(O.push("if(",p(S[C-1]),"&1){",k,"=0;}"),W());Y(e);O.push("}")}(C-1,0),O.push("freeUint32(",x,");freeUint32(",b,");");var X=["'use strict';","function ",P,"(",I.join(),"){","var ",z.join(),";",O.join(""),"}","return ",P].join("");return new Function("vertex","face","phase","mallocUint32","freeUint32",X)(t,e,r,n.mallocUint32,n.freeUint32)}(t.vertex,t.cell,t.phase,S,r,L)};var x="V",b="P",_="N",w="Q",k="X",T="T";function M(t,e,r){for(var n=0,a=0;a<t;++a)e&1<<a&&(n|=1<<r[a]);return n}},{"typedarray-pool":543}],441:[function(t,e,r){"use strict";var n=t("cwise/lib/wrapper")({args:["index","array","scalar"],pre:{body:"{}",args:[],thisVars:[],localVars:[]},body:{body:"{_inline_1_arg1_=_inline_1_arg2_.apply(void 0,_inline_1_arg0_)}",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_1_arg2_",lvalue:!1,rvalue:!0,count:1}],thisVars:[],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"cwise",blockSize:64});e.exports=function(t,e){return n(t,e),t}},{"cwise/lib/wrapper":151}],442:[function(t,e,r){"use strict";e.exports=function(t,e,r){if(Array.isArray(r)){if(r.length!==e.dimension)throw new Error("ndarray-gradient: invalid boundary conditions")}else r=n(e.dimension,"string"==typeof r?r:"clamp");if(t.dimension!==e.dimension+1)throw new Error("ndarray-gradient: output dimension must be +1 input dimension");if(t.shape[e.dimension]!==e.dimension)throw new Error("ndarray-gradient: output shape must match input shape");for(var a=0;a<e.dimension;++a)if(t.shape[a]!==e.shape[a])throw new Error("ndarray-gradient: shape mismatch");if(0===e.size)return t;if(e.dimension<=0)return t.set(0),t;return function(t){var e=t.join();if(m=o[e])return m;var r=t.length,n=["function gradient(dst,src){var s=src.shape.slice();"];function a(e){for(var a=r-e.length,i=[],o=[],s=[],l=0;l<r;++l)e.indexOf(l+1)>=0?s.push("0"):e.indexOf(-(l+1))>=0?s.push("s["+l+"]-1"):(s.push("-1"),i.push("1"),o.push("s["+l+"]-2"));var c=".lo("+i.join()+").hi("+o.join()+")";if(0===i.length&&(c=""),a>0){n.push("if(1");for(var l=0;l<r;++l)e.indexOf(l+1)>=0||e.indexOf(-(l+1))>=0||n.push("&&s[",l,"]>2");n.push("){grad",a,"(src.pick(",s.join(),")",c);for(var l=0;l<r;++l)e.indexOf(l+1)>=0||e.indexOf(-(l+1))>=0||n.push(",dst.pick(",s.join(),",",l,")",c);n.push(");")}for(var l=0;l<e.length;++l){var u=Math.abs(e[l])-1,h="dst.pick("+s.join()+","+u+")"+c;switch(t[u]){case"clamp":var f=s.slice(),p=s.slice();e[l]<0?f[u]="s["+u+"]-2":p[u]="1",0===a?n.push("if(s[",u,"]>1){dst.set(",s.join(),",",u,",0.5*(src.get(",f.join(),")-src.get(",p.join(),")))}else{dst.set(",s.join(),",",u,",0)};"):n.push("if(s[",u,"]>1){diff(",h,",src.pick(",f.join(),")",c,",src.pick(",p.join(),")",c,");}else{zero(",h,");};");break;case"mirror":0===a?n.push("dst.set(",s.join(),",",u,",0);"):n.push("zero(",h,");");break;case"wrap":var d=s.slice(),g=s.slice();e[l]<0?(d[u]="s["+u+"]-2",g[u]="0"):(d[u]="s["+u+"]-1",g[u]="1"),0===a?n.push("if(s[",u,"]>2){dst.set(",s.join(),",",u,",0.5*(src.get(",d.join(),")-src.get(",g.join(),")))}else{dst.set(",s.join(),",",u,",0)};"):n.push("if(s[",u,"]>2){diff(",h,",src.pick(",d.join(),")",c,",src.pick(",g.join(),")",c,");}else{zero(",h,");};");break;default:throw new Error("ndarray-gradient: Invalid boundary condition")}}a>0&&n.push("};")}for(var s=0;s<1<<r;++s){for(var h=[],f=0;f<r;++f)s&1<<f&&h.push(f+1);for(var p=0;p<1<<h.length;++p){for(var d=h.slice(),f=0;f<h.length;++f)p&1<<f&&(d[f]=-d[f]);a(d)}}n.push("return dst;};return gradient");for(var g=["diff","zero"],v=[l,c],s=1;s<=r;++s)g.push("grad"+s),v.push(u(s));g.push(n.join(""));var m=Function.apply(void 0,g).apply(void 0,v);return i[e]=m,m}(r)(t,e)};var n=t("dup"),a=t("cwise-compiler"),i={},o={},s={body:"",args:[],thisVars:[],localVars:[]},l=a({args:["array","array","array"],pre:s,post:s,body:{args:[{name:"out",lvalue:!0,rvalue:!1,count:1},{name:"left",lvalue:!1,rvalue:!0,count:1},{name:"right",lvalue:!1,rvalue:!0,count:1}],body:"out=0.5*(left-right)",thisVars:[],localVars:[]},funcName:"cdiff"}),c=a({args:["array"],pre:s,post:s,body:{args:[{name:"out",lvalue:!0,rvalue:!1,count:1}],body:"out=0",thisVars:[],localVars:[]},funcName:"zero"});function u(t){if(t in i)return i[t];for(var e=[],r=0;r<t;++r)e.push("out",r,"s=0.5*(inp",r,"l-inp",r,"r);");var o=["array"],l=["junk"];for(r=0;r<t;++r){o.push("array"),l.push("out"+r+"s");var c=n(t);c[r]=-1,o.push({array:0,offset:c.slice()}),c[r]=1,o.push({array:0,offset:c.slice()}),l.push("inp"+r+"l","inp"+r+"r")}return i[t]=a({args:o,pre:s,post:s,body:{body:e.join(""),args:l.map(function(t){return{name:t,lvalue:0===t.indexOf("out"),rvalue:0===t.indexOf("inp"),count:"junk"!==t|0}}),thisVars:[],localVars:[]},funcName:"fdTemplate"+t})}},{"cwise-compiler":148,dup:172}],443:[function(t,e,r){"use strict";var n=t("ndarray-warp"),a=t("gl-matrix-invert");e.exports=function(t,e,r){var i=e.dimension,o=a([],r);return n(t,e,function(t,e){for(var r=0;r<i;++r){t[r]=o[(i+1)*i+r];for(var n=0;n<i;++n)t[r]+=o[(i+1)*n+r]*e[n]}var a=o[(i+1)*(i+1)-1];for(n=0;n<i;++n)a+=o[(i+1)*n+i]*e[n];var s=1/a;for(r=0;r<i;++r)t[r]*=s;return t}),t}},{"gl-matrix-invert":280,"ndarray-warp":450}],444:[function(t,e,r){"use strict";function n(t,e){var r=Math.floor(e),n=e-r,a=0<=r&&r<t.shape[0],i=0<=r+1&&r+1<t.shape[0];return(1-n)*(a?+t.get(r):0)+n*(i?+t.get(r+1):0)}function a(t,e,r){var n=Math.floor(e),a=e-n,i=0<=n&&n<t.shape[0],o=0<=n+1&&n+1<t.shape[0],s=Math.floor(r),l=r-s,c=0<=s&&s<t.shape[1],u=0<=s+1&&s+1<t.shape[1],h=i&&c?t.get(n,s):0,f=i&&u?t.get(n,s+1):0;return(1-l)*((1-a)*h+a*(o&&c?t.get(n+1,s):0))+l*((1-a)*f+a*(o&&u?t.get(n+1,s+1):0))}function i(t,e,r,n){var a=Math.floor(e),i=e-a,o=0<=a&&a<t.shape[0],s=0<=a+1&&a+1<t.shape[0],l=Math.floor(r),c=r-l,u=0<=l&&l<t.shape[1],h=0<=l+1&&l+1<t.shape[1],f=Math.floor(n),p=n-f,d=0<=f&&f<t.shape[2],g=0<=f+1&&f+1<t.shape[2],v=o&&u&&d?t.get(a,l,f):0,m=o&&h&&d?t.get(a,l+1,f):0,y=s&&u&&d?t.get(a+1,l,f):0,x=s&&h&&d?t.get(a+1,l+1,f):0,b=o&&u&&g?t.get(a,l,f+1):0,_=o&&h&&g?t.get(a,l+1,f+1):0;return(1-p)*((1-c)*((1-i)*v+i*y)+c*((1-i)*m+i*x))+p*((1-c)*((1-i)*b+i*(s&&u&&g?t.get(a+1,l,f+1):0))+c*((1-i)*_+i*(s&&h&&g?t.get(a+1,l+1,f+1):0)))}e.exports=function(t,e,r,o){switch(t.shape.length){case 0:return 0;case 1:return n(t,e);case 2:return a(t,e,r);case 3:return i(t,e,r,o);default:return function(t){var e,r,n=0|t.shape.length,a=new Array(n),i=new Array(n),o=new Array(n),s=new Array(n);for(e=0;e<n;++e)r=+arguments[e+1],a[e]=Math.floor(r),i[e]=r-a[e],o[e]=0<=a[e]&&a[e]<t.shape[e],s[e]=0<=a[e]+1&&a[e]+1<t.shape[e];var l,c,u,h=0;t:for(e=0;e<1<<n;++e){for(c=1,u=t.offset,l=0;l<n;++l)if(e&1<<l){if(!s[l])continue t;c*=i[l],u+=t.stride[l]*(a[l]+1)}else{if(!o[l])continue t;c*=1-i[l],u+=t.stride[l]*a[l]}h+=c*t.data[u]}return h}.apply(void 0,arguments)}},e.exports.d1=n,e.exports.d2=a,e.exports.d3=i},{}],445:[function(t,e,r){"use strict";var n=t("cwise-compiler"),a={body:"",args:[],thisVars:[],localVars:[]};function i(t){if(!t)return a;for(var e=0;e<t.args.length;++e){var r=t.args[e];t.args[e]=0===e?{name:r,lvalue:!0,rvalue:!!t.rvalue,count:t.count||1}:{name:r,lvalue:!1,rvalue:!0,count:1}}return t.thisVars||(t.thisVars=[]),t.localVars||(t.localVars=[]),t}function o(t){for(var e=[],r=0;r<t.args.length;++r)e.push("a"+r);return new Function("P",["return function ",t.funcName,"_ndarrayops(",e.join(","),") {P(",e.join(","),");return a0}"].join(""))(function(t){return n({args:t.args,pre:i(t.pre),body:i(t.body),post:i(t.proc),funcName:t.funcName})}(t))}var s={add:"+",sub:"-",mul:"*",div:"/",mod:"%",band:"&",bor:"|",bxor:"^",lshift:"<<",rshift:">>",rrshift:">>>"};!function(){for(var t in s){var e=s[t];r[t]=o({args:["array","array","array"],body:{args:["a","b","c"],body:"a=b"+e+"c"},funcName:t}),r[t+"eq"]=o({args:["array","array"],body:{args:["a","b"],body:"a"+e+"=b"},rvalue:!0,funcName:t+"eq"}),r[t+"s"]=o({args:["array","array","scalar"],body:{args:["a","b","s"],body:"a=b"+e+"s"},funcName:t+"s"}),r[t+"seq"]=o({args:["array","scalar"],body:{args:["a","s"],body:"a"+e+"=s"},rvalue:!0,funcName:t+"seq"})}}();var l={not:"!",bnot:"~",neg:"-",recip:"1.0/"};!function(){for(var t in l){var e=l[t];r[t]=o({args:["array","array"],body:{args:["a","b"],body:"a="+e+"b"},funcName:t}),r[t+"eq"]=o({args:["array"],body:{args:["a"],body:"a="+e+"a"},rvalue:!0,count:2,funcName:t+"eq"})}}();var c={and:"&&",or:"||",eq:"===",neq:"!==",lt:"<",gt:">",leq:"<=",geq:">="};!function(){for(var t in c){var e=c[t];r[t]=o({args:["array","array","array"],body:{args:["a","b","c"],body:"a=b"+e+"c"},funcName:t}),r[t+"s"]=o({args:["array","array","scalar"],body:{args:["a","b","s"],body:"a=b"+e+"s"},funcName:t+"s"}),r[t+"eq"]=o({args:["array","array"],body:{args:["a","b"],body:"a=a"+e+"b"},rvalue:!0,count:2,funcName:t+"eq"}),r[t+"seq"]=o({args:["array","scalar"],body:{args:["a","s"],body:"a=a"+e+"s"},rvalue:!0,count:2,funcName:t+"seq"})}}();var u=["abs","acos","asin","atan","ceil","cos","exp","floor","log","round","sin","sqrt","tan"];!function(){for(var t=0;t<u.length;++t){var e=u[t];r[e]=o({args:["array","array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b)",thisVars:["this_f"]},funcName:e}),r[e+"eq"]=o({args:["array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a"],body:"a=this_f(a)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:e+"eq"})}}();var h=["max","min","atan2","pow"];!function(){for(var t=0;t<h.length;++t){var e=h[t];r[e]=o({args:["array","array","array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(b,c)",thisVars:["this_f"]},funcName:e}),r[e+"s"]=o({args:["array","array","scalar"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(b,c)",thisVars:["this_f"]},funcName:e+"s"}),r[e+"eq"]=o({args:["array","array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(a,b)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:e+"eq"}),r[e+"seq"]=o({args:["array","scalar"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(a,b)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:e+"seq"})}}();var f=["atan2","pow"];!function(){for(var t=0;t<f.length;++t){var e=f[t];r[e+"op"]=o({args:["array","array","array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(c,b)",thisVars:["this_f"]},funcName:e+"op"}),r[e+"ops"]=o({args:["array","array","scalar"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(c,b)",thisVars:["this_f"]},funcName:e+"ops"}),r[e+"opeq"]=o({args:["array","array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b,a)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:e+"opeq"}),r[e+"opseq"]=o({args:["array","scalar"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b,a)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:e+"opseq"})}}(),r.any=n({args:["array"],pre:a,body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:1}],body:"if(a){return true}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return false"},funcName:"any"}),r.all=n({args:["array"],pre:a,body:{args:[{name:"x",lvalue:!1,rvalue:!0,count:1}],body:"if(!x){return false}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return true"},funcName:"all"}),r.sum=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:1}],body:"this_s+=a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"sum"}),r.prod=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=1"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:1}],body:"this_s*=a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"prod"}),r.norm2squared=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:2}],body:"this_s+=a*a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norm2squared"}),r.norm2=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:2}],body:"this_s+=a*a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return Math.sqrt(this_s)"},funcName:"norm2"}),r.norminf=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:4}],body:"if(-a>this_s){this_s=-a}else if(a>this_s){this_s=a}",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norminf"}),r.norm1=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:3}],body:"this_s+=a<0?-a:a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norm1"}),r.sup=n({args:["array"],pre:{body:"this_h=-Infinity",args:[],thisVars:["this_h"],localVars:[]},body:{body:"if(_inline_1_arg0_>this_h)this_h=_inline_1_arg0_",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_h"],localVars:[]},post:{body:"return this_h",args:[],thisVars:["this_h"],localVars:[]}}),r.inf=n({args:["array"],pre:{body:"this_h=Infinity",args:[],thisVars:["this_h"],localVars:[]},body:{body:"if(_inline_1_arg0_<this_h)this_h=_inline_1_arg0_",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_h"],localVars:[]},post:{body:"return this_h",args:[],thisVars:["this_h"],localVars:[]}}),r.argmin=n({args:["index","array","shape"],pre:{body:"{this_v=Infinity;this_i=_inline_0_arg2_.slice(0)}",args:[{name:"_inline_0_arg0_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg1_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg2_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_i","this_v"],localVars:[]},body:{body:"{if(_inline_1_arg1_<this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_i","this_v"],localVars:["_inline_1_k"]},post:{body:"{return this_i}",args:[],thisVars:["this_i"],localVars:[]}}),r.argmax=n({args:["index","array","shape"],pre:{body:"{this_v=-Infinity;this_i=_inline_0_arg2_.slice(0)}",args:[{name:"_inline_0_arg0_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg1_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg2_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_i","this_v"],localVars:[]},body:{body:"{if(_inline_1_arg1_>this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_i","this_v"],localVars:["_inline_1_k"]},post:{body:"{return this_i}",args:[],thisVars:["this_i"],localVars:[]}}),r.random=o({args:["array"],pre:{args:[],body:"this_f=Math.random",thisVars:["this_f"]},body:{args:["a"],body:"a=this_f()",thisVars:["this_f"]},funcName:"random"}),r.assign=o({args:["array","array"],body:{args:["a","b"],body:"a=b"},funcName:"assign"}),r.assigns=o({args:["array","scalar"],body:{args:["a","b"],body:"a=b"},funcName:"assigns"}),r.equals=n({args:["array","array"],pre:a,body:{args:[{name:"x",lvalue:!1,rvalue:!0,count:1},{name:"y",lvalue:!1,rvalue:!0,count:1}],body:"if(x!==y){return false}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return true"},funcName:"equals"})},{"cwise-compiler":148}],446:[function(t,e,r){"use strict";var n=t("ndarray"),a=t("./doConvert.js");e.exports=function(t,e){for(var r=[],i=t,o=1;Array.isArray(i);)r.push(i.length),o*=i.length,i=i[0];return 0===r.length?n():(e||(e=n(new Float64Array(o),r)),a(e,t),e)}},{"./doConvert.js":447,ndarray:451}],447:[function(t,e,r){e.exports=t("cwise-compiler")({args:["array","scalar","index"],pre:{body:"{}",args:[],thisVars:[],localVars:[]},body:{body:"{\nvar _inline_1_v=_inline_1_arg1_,_inline_1_i\nfor(_inline_1_i=0;_inline_1_i<_inline_1_arg2_.length-1;++_inline_1_i) {\n_inline_1_v=_inline_1_v[_inline_1_arg2_[_inline_1_i]]\n}\n_inline_1_arg0_=_inline_1_v[_inline_1_arg2_[_inline_1_arg2_.length-1]]\n}",args:[{name:"_inline_1_arg0_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg2_",lvalue:!1,rvalue:!0,count:4}],thisVars:[],localVars:["_inline_1_i","_inline_1_v"]},post:{body:"{}",args:[],thisVars:[],localVars:[]},funcName:"convert",blockSize:64})},{"cwise-compiler":148}],448:[function(t,e,r){"use strict";var n=t("typedarray-pool"),a=32;function i(t){switch(t){case"uint8":return[n.mallocUint8,n.freeUint8];case"uint16":return[n.mallocUint16,n.freeUint16];case"uint32":return[n.mallocUint32,n.freeUint32];case"int8":return[n.mallocInt8,n.freeInt8];case"int16":return[n.mallocInt16,n.freeInt16];case"int32":return[n.mallocInt32,n.freeInt32];case"float32":return[n.mallocFloat,n.freeFloat];case"float64":return[n.mallocDouble,n.freeDouble];default:return null}}function o(t){for(var e=[],r=0;r<t;++r)e.push("s"+r);for(r=0;r<t;++r)e.push("n"+r);for(r=1;r<t;++r)e.push("d"+r);for(r=1;r<t;++r)e.push("e"+r);for(r=1;r<t;++r)e.push("f"+r);return e}e.exports=function(t,e){var r=["'use strict'"],n=["ndarraySortWrapper",t.join("d"),e].join("");r.push(["function ",n,"(",["array"].join(","),"){"].join(""));for(var s=["data=array.data,offset=array.offset|0,shape=array.shape,stride=array.stride"],l=0;l<t.length;++l)s.push(["s",l,"=stride[",l,"]|0,n",l,"=shape[",l,"]|0"].join(""));var c=new Array(t.length),u=[];for(l=0;l<t.length;++l)0!==(p=t[l])&&(0===u.length?c[p]="1":c[p]=u.join("*"),u.push("n"+p));var h=-1,f=-1;for(l=0;l<t.length;++l){var p,d=t[l];0!==d&&(h>0?s.push(["d",d,"=s",d,"-d",h,"*n",h].join("")):s.push(["d",d,"=s",d].join("")),h=d),0!=(p=t.length-1-l)&&(f>0?s.push(["e",p,"=s",p,"-e",f,"*n",f,",f",p,"=",c[p],"-f",f,"*n",f].join("")):s.push(["e",p,"=s",p,",f",p,"=",c[p]].join("")),f=p)}r.push("var "+s.join(","));var g=["0","n0-1","data","offset"].concat(o(t.length));r.push(["if(n0<=",a,"){","insertionSort(",g.join(","),")}else{","quickSort(",g.join(","),")}"].join("")),r.push("}return "+n);var v=new Function("insertionSort","quickSort",r.join("\n")),m=function(t,e){var r=["'use strict'"],n=["ndarrayInsertionSort",t.join("d"),e].join(""),a=["left","right","data","offset"].concat(o(t.length)),s=i(e),l=["i,j,cptr,ptr=left*s0+offset"];if(t.length>1){for(var c=[],u=1;u<t.length;++u)l.push("i"+u),c.push("n"+u);s?l.push("scratch=malloc("+c.join("*")+")"):l.push("scratch=new Array("+c.join("*")+")"),l.push("dptr","sptr","a","b")}else l.push("scratch");function h(t){return"generic"===e?["data.get(",t,")"].join(""):["data[",t,"]"].join("")}function f(t,r){return"generic"===e?["data.set(",t,",",r,")"].join(""):["data[",t,"]=",r].join("")}if(r.push(["function ",n,"(",a.join(","),"){var ",l.join(",")].join(""),"for(i=left+1;i<=right;++i){","j=i;ptr+=s0","cptr=ptr"),t.length>1){for(r.push("dptr=0;sptr=ptr"),u=t.length-1;u>=0;--u)0!==(p=t[u])&&r.push(["for(i",p,"=0;i",p,"<n",p,";++i",p,"){"].join(""));for(r.push("scratch[dptr++]=",h("sptr")),u=0;u<t.length;++u)0!==(p=t[u])&&r.push("sptr+=d"+p,"}");for(r.push("__g:while(j--\x3eleft){","dptr=0","sptr=cptr-s0"),u=1;u<t.length;++u)1===u&&r.push("__l:"),r.push(["for(i",u,"=0;i",u,"<n",u,";++i",u,"){"].join(""));for(r.push(["a=",h("sptr"),"\nb=scratch[dptr]\nif(a<b){break __g}\nif(a>b){break __l}"].join("")),u=t.length-1;u>=1;--u)r.push("sptr+=e"+u,"dptr+=f"+u,"}");for(r.push("dptr=cptr;sptr=cptr-s0"),u=t.length-1;u>=0;--u)0!==(p=t[u])&&r.push(["for(i",p,"=0;i",p,"<n",p,";++i",p,"){"].join(""));for(r.push(f("dptr",h("sptr"))),u=0;u<t.length;++u)0!==(p=t[u])&&r.push(["dptr+=d",p,";sptr+=d",p].join(""),"}");for(r.push("cptr-=s0\n}"),r.push("dptr=cptr;sptr=0"),u=t.length-1;u>=0;--u)0!==(p=t[u])&&r.push(["for(i",p,"=0;i",p,"<n",p,";++i",p,"){"].join(""));for(r.push(f("dptr","scratch[sptr++]")),u=0;u<t.length;++u){var p;0!==(p=t[u])&&r.push("dptr+=d"+p,"}")}}else r.push("scratch="+h("ptr"),"while((j--\x3eleft)&&("+h("cptr-s0")+">scratch)){",f("cptr",h("cptr-s0")),"cptr-=s0","}",f("cptr","scratch"));return r.push("}"),t.length>1&&s&&r.push("free(scratch)"),r.push("} return "+n),s?new Function("malloc","free",r.join("\n"))(s[0],s[1]):new Function(r.join("\n"))()}(t,e),y=function(t,e,r){var n=["'use strict'"],s=["ndarrayQuickSort",t.join("d"),e].join(""),l=["left","right","data","offset"].concat(o(t.length)),c=i(e),u=0;n.push(["function ",s,"(",l.join(","),"){"].join(""));var h=["sixth=((right-left+1)/6)|0","index1=left+sixth","index5=right-sixth","index3=(left+right)>>1","index2=index3-sixth","index4=index3+sixth","el1=index1","el2=index2","el3=index3","el4=index4","el5=index5","less=left+1","great=right-1","pivots_are_equal=true","tmp","tmp0","x","y","z","k","ptr0","ptr1","ptr2","comp_pivot1=0","comp_pivot2=0","comp=0"];if(t.length>1){for(var f=[],p=1;p<t.length;++p)f.push("n"+p),h.push("i"+p);for(p=0;p<8;++p)h.push("b_ptr"+p);h.push("ptr3","ptr4","ptr5","ptr6","ptr7","pivot_ptr","ptr_shift","elementSize="+f.join("*")),c?h.push("pivot1=malloc(elementSize)","pivot2=malloc(elementSize)"):h.push("pivot1=new Array(elementSize),pivot2=new Array(elementSize)")}else h.push("pivot1","pivot2");function d(t){return["(offset+",t,"*s0)"].join("")}function g(t){return"generic"===e?["data.get(",t,")"].join(""):["data[",t,"]"].join("")}function v(t,r){return"generic"===e?["data.set(",t,",",r,")"].join(""):["data[",t,"]=",r].join("")}function m(e,r,a){if(1===e.length)n.push("ptr0="+d(e[0]));else for(var i=0;i<e.length;++i)n.push(["b_ptr",i,"=s0*",e[i]].join(""));for(r&&n.push("pivot_ptr=0"),n.push("ptr_shift=offset"),i=t.length-1;i>=0;--i)0!==(o=t[i])&&n.push(["for(i",o,"=0;i",o,"<n",o,";++i",o,"){"].join(""));if(e.length>1)for(i=0;i<e.length;++i)n.push(["ptr",i,"=b_ptr",i,"+ptr_shift"].join(""));for(n.push(a),r&&n.push("++pivot_ptr"),i=0;i<t.length;++i){var o;0!==(o=t[i])&&(e.length>1?n.push("ptr_shift+=d"+o):n.push("ptr0+=d"+o),n.push("}"))}}function y(e,r,a,i){if(1===r.length)n.push("ptr0="+d(r[0]));else{for(var o=0;o<r.length;++o)n.push(["b_ptr",o,"=s0*",r[o]].join(""));n.push("ptr_shift=offset")}for(a&&n.push("pivot_ptr=0"),e&&n.push(e+":"),o=1;o<t.length;++o)n.push(["for(i",o,"=0;i",o,"<n",o,";++i",o,"){"].join(""));if(r.length>1)for(o=0;o<r.length;++o)n.push(["ptr",o,"=b_ptr",o,"+ptr_shift"].join(""));for(n.push(i),o=t.length-1;o>=1;--o)a&&n.push("pivot_ptr+=f"+o),r.length>1?n.push("ptr_shift+=e"+o):n.push("ptr0+=e"+o),n.push("}")}function x(){t.length>1&&c&&n.push("free(pivot1)","free(pivot2)")}function b(e,r){var a="el"+e,i="el"+r;if(t.length>1){var o="__l"+ ++u;y(o,[a,i],!1,["comp=",g("ptr0"),"-",g("ptr1"),"\n","if(comp>0){tmp0=",a,";",a,"=",i,";",i,"=tmp0;break ",o,"}\n","if(comp<0){break ",o,"}"].join(""))}else n.push(["if(",g(d(a)),">",g(d(i)),"){tmp0=",a,";",a,"=",i,";",i,"=tmp0}"].join(""))}function _(e,r){t.length>1?m([e,r],!1,v("ptr0",g("ptr1"))):n.push(v(d(e),g(d(r))))}function w(e,r,a){if(t.length>1){var i="__l"+ ++u;y(i,[r],!0,[e,"=",g("ptr0"),"-pivot",a,"[pivot_ptr]\n","if(",e,"!==0){break ",i,"}"].join(""))}else n.push([e,"=",g(d(r)),"-pivot",a].join(""))}function k(e,r){t.length>1?m([e,r],!1,["tmp=",g("ptr0"),"\n",v("ptr0",g("ptr1")),"\n",v("ptr1","tmp")].join("")):n.push(["ptr0=",d(e),"\n","ptr1=",d(r),"\n","tmp=",g("ptr0"),"\n",v("ptr0",g("ptr1")),"\n",v("ptr1","tmp")].join(""))}function T(e,r,a){t.length>1?(m([e,r,a],!1,["tmp=",g("ptr0"),"\n",v("ptr0",g("ptr1")),"\n",v("ptr1",g("ptr2")),"\n",v("ptr2","tmp")].join("")),n.push("++"+r,"--"+a)):n.push(["ptr0=",d(e),"\n","ptr1=",d(r),"\n","ptr2=",d(a),"\n","++",r,"\n","--",a,"\n","tmp=",g("ptr0"),"\n",v("ptr0",g("ptr1")),"\n",v("ptr1",g("ptr2")),"\n",v("ptr2","tmp")].join(""))}function M(t,e){k(t,e),n.push("--"+e)}function A(e,r,a){t.length>1?m([e,r],!0,[v("ptr0",g("ptr1")),"\n",v("ptr1",["pivot",a,"[pivot_ptr]"].join(""))].join("")):n.push(v(d(e),g(d(r))),v(d(r),"pivot"+a))}function S(e,r){n.push(["if((",r,"-",e,")<=",a,"){\n","insertionSort(",e,",",r,",data,offset,",o(t.length).join(","),")\n","}else{\n",s,"(",e,",",r,",data,offset,",o(t.length).join(","),")\n","}"].join(""))}function E(e,r,a){t.length>1?(n.push(["__l",++u,":while(true){"].join("")),m([e],!0,["if(",g("ptr0"),"!==pivot",r,"[pivot_ptr]){break __l",u,"}"].join("")),n.push(a,"}")):n.push(["while(",g(d(e)),"===pivot",r,"){",a,"}"].join(""))}return n.push("var "+h.join(",")),b(1,2),b(4,5),b(1,3),b(2,3),b(1,4),b(3,4),b(2,5),b(2,3),b(4,5),t.length>1?m(["el1","el2","el3","el4","el5","index1","index3","index5"],!0,["pivot1[pivot_ptr]=",g("ptr1"),"\n","pivot2[pivot_ptr]=",g("ptr3"),"\n","pivots_are_equal=pivots_are_equal&&(pivot1[pivot_ptr]===pivot2[pivot_ptr])\n","x=",g("ptr0"),"\n","y=",g("ptr2"),"\n","z=",g("ptr4"),"\n",v("ptr5","x"),"\n",v("ptr6","y"),"\n",v("ptr7","z")].join("")):n.push(["pivot1=",g(d("el2")),"\n","pivot2=",g(d("el4")),"\n","pivots_are_equal=pivot1===pivot2\n","x=",g(d("el1")),"\n","y=",g(d("el3")),"\n","z=",g(d("el5")),"\n",v(d("index1"),"x"),"\n",v(d("index3"),"y"),"\n",v(d("index5"),"z")].join("")),_("index2","left"),_("index4","right"),n.push("if(pivots_are_equal){"),n.push("for(k=less;k<=great;++k){"),w("comp","k",1),n.push("if(comp===0){continue}"),n.push("if(comp<0){"),n.push("if(k!==less){"),k("k","less"),n.push("}"),n.push("++less"),n.push("}else{"),n.push("while(true){"),w("comp","great",1),n.push("if(comp>0){"),n.push("great--"),n.push("}else if(comp<0){"),T("k","less","great"),n.push("break"),n.push("}else{"),M("k","great"),n.push("break"),n.push("}"),n.push("}"),n.push("}"),n.push("}"),n.push("}else{"),n.push("for(k=less;k<=great;++k){"),w("comp_pivot1","k",1),n.push("if(comp_pivot1<0){"),n.push("if(k!==less){"),k("k","less"),n.push("}"),n.push("++less"),n.push("}else{"),w("comp_pivot2","k",2),n.push("if(comp_pivot2>0){"),n.push("while(true){"),w("comp","great",2),n.push("if(comp>0){"),n.push("if(--great<k){break}"),n.push("continue"),n.push("}else{"),w("comp","great",1),n.push("if(comp<0){"),T("k","less","great"),n.push("}else{"),M("k","great"),n.push("}"),n.push("break"),n.push("}"),n.push("}"),n.push("}"),n.push("}"),n.push("}"),n.push("}"),A("left","(less-1)",1),A("right","(great+1)",2),S("left","(less-2)"),S("(great+2)","right"),n.push("if(pivots_are_equal){"),x(),n.push("return"),n.push("}"),n.push("if(less<index1&&great>index5){"),E("less",1,"++less"),E("great",2,"--great"),n.push("for(k=less;k<=great;++k){"),w("comp_pivot1","k",1),n.push("if(comp_pivot1===0){"),n.push("if(k!==less){"),k("k","less"),n.push("}"),n.push("++less"),n.push("}else{"),w("comp_pivot2","k",2),n.push("if(comp_pivot2===0){"),n.push("while(true){"),w("comp","great",2),n.push("if(comp===0){"),n.push("if(--great<k){break}"),n.push("continue"),n.push("}else{"),w("comp","great",1),n.push("if(comp<0){"),T("k","less","great"),n.push("}else{"),M("k","great"),n.push("}"),n.push("break"),n.push("}"),n.push("}"),n.push("}"),n.push("}"),n.push("}"),n.push("}"),x(),S("less","great"),n.push("}return "+s),t.length>1&&c?new Function("insertionSort","malloc","free",n.join("\n"))(r,c[0],c[1]):new Function("insertionSort",n.join("\n"))(r)}(t,e,m);return v(m,y)}},{"typedarray-pool":543}],449:[function(t,e,r){"use strict";var n=t("./lib/compile_sort.js"),a={};e.exports=function(t){var e=t.order,r=t.dtype,i=[e,r].join(":"),o=a[i];return o||(a[i]=o=n(e,r)),o(t),t}},{"./lib/compile_sort.js":448}],450:[function(t,e,r){"use strict";var n=t("ndarray-linear-interpolate"),a=t("cwise/lib/wrapper")({args:["index","array","scalar","scalar","scalar"],pre:{body:"{this_warped=new Array(_inline_3_arg4_)}",args:[{name:"_inline_3_arg0_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_3_arg1_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_3_arg2_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_3_arg3_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_3_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_warped"],localVars:[]},body:{body:"{_inline_4_arg2_(this_warped,_inline_4_arg0_),_inline_4_arg1_=_inline_4_arg3_.apply(void 0,this_warped)}",args:[{name:"_inline_4_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_4_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_4_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_4_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_4_arg4_",lvalue:!1,rvalue:!1,count:0}],thisVars:["this_warped"],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"warpND",blockSize:64}),i=t("cwise/lib/wrapper")({args:["index","array","scalar","scalar","scalar"],pre:{body:"{this_warped=[0]}",args:[],thisVars:["this_warped"],localVars:[]},body:{body:"{_inline_7_arg2_(this_warped,_inline_7_arg0_),_inline_7_arg1_=_inline_7_arg3_(_inline_7_arg4_,this_warped[0])}",args:[{name:"_inline_7_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_7_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_7_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_7_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_7_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_warped"],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"warp1D",blockSize:64}),o=t("cwise/lib/wrapper")({args:["index","array","scalar","scalar","scalar"],pre:{body:"{this_warped=[0,0]}",args:[],thisVars:["this_warped"],localVars:[]},body:{body:"{_inline_10_arg2_(this_warped,_inline_10_arg0_),_inline_10_arg1_=_inline_10_arg3_(_inline_10_arg4_,this_warped[0],this_warped[1])}",args:[{name:"_inline_10_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_10_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_10_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_10_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_10_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_warped"],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"warp2D",blockSize:64}),s=t("cwise/lib/wrapper")({args:["index","array","scalar","scalar","scalar"],pre:{body:"{this_warped=[0,0,0]}",args:[],thisVars:["this_warped"],localVars:[]},body:{body:"{_inline_13_arg2_(this_warped,_inline_13_arg0_),_inline_13_arg1_=_inline_13_arg3_(_inline_13_arg4_,this_warped[0],this_warped[1],this_warped[2])}",args:[{name:"_inline_13_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_13_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_13_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_13_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_13_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_warped"],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"warp3D",blockSize:64});e.exports=function(t,e,r){switch(e.shape.length){case 1:i(t,r,n.d1,e);break;case 2:o(t,r,n.d2,e);break;case 3:s(t,r,n.d3,e);break;default:a(t,r,n.bind(void 0,e),e.shape.length)}return t}},{"cwise/lib/wrapper":151,"ndarray-linear-interpolate":444}],451:[function(t,e,r){var n=t("iota-array"),a=t("is-buffer"),i="undefined"!=typeof Float64Array;function o(t,e){return t[0]-e[0]}function s(){var t,e=this.stride,r=new Array(e.length);for(t=0;t<r.length;++t)r[t]=[Math.abs(e[t]),t];r.sort(o);var n=new Array(r.length);for(t=0;t<n.length;++t)n[t]=r[t][1];return n}function l(t,e){var r=["View",e,"d",t].join("");e<0&&(r="View_Nil"+t);var a="generic"===t;if(-1===e){var i="function "+r+"(a){this.data=a;};var proto="+r+".prototype;proto.dtype='"+t+"';proto.index=function(){return -1};proto.size=0;proto.dimension=-1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function(){return new "+r+"(this.data);};proto.get=proto.set=function(){};proto.pick=function(){return null};return function construct_"+r+"(a){return new "+r+"(a);}";return new Function(i)()}if(0===e){i="function "+r+"(a,d) {this.data = a;this.offset = d};var proto="+r+".prototype;proto.dtype='"+t+"';proto.index=function(){return this.offset};proto.dimension=0;proto.size=1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function "+r+"_copy() {return new "+r+"(this.data,this.offset)};proto.pick=function "+r+"_pick(){return TrivialArray(this.data);};proto.valueOf=proto.get=function "+r+"_get(){return "+(a?"this.data.get(this.offset)":"this.data[this.offset]")+"};proto.set=function "+r+"_set(v){return "+(a?"this.data.set(this.offset,v)":"this.data[this.offset]=v")+"};return function construct_"+r+"(a,b,c,d){return new "+r+"(a,d)}";return new Function("TrivialArray",i)(c[t][0])}i=["'use strict'"];var o=n(e),l=o.map(function(t){return"i"+t}),u="this.offset+"+o.map(function(t){return"this.stride["+t+"]*i"+t}).join("+"),h=o.map(function(t){return"b"+t}).join(","),f=o.map(function(t){return"c"+t}).join(",");i.push("function "+r+"(a,"+h+","+f+",d){this.data=a","this.shape=["+h+"]","this.stride=["+f+"]","this.offset=d|0}","var proto="+r+".prototype","proto.dtype='"+t+"'","proto.dimension="+e),i.push("Object.defineProperty(proto,'size',{get:function "+r+"_size(){return "+o.map(function(t){return"this.shape["+t+"]"}).join("*"),"}})"),1===e?i.push("proto.order=[0]"):(i.push("Object.defineProperty(proto,'order',{get:"),e<4?(i.push("function "+r+"_order(){"),2===e?i.push("return (Math.abs(this.stride[0])>Math.abs(this.stride[1]))?[1,0]:[0,1]}})"):3===e&&i.push("var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);if(s0>s1){if(s1>s2){return [2,1,0];}else if(s0>s2){return [1,2,0];}else{return [1,0,2];}}else if(s0>s2){return [2,0,1];}else if(s2>s1){return [0,1,2];}else{return [0,2,1];}}})")):i.push("ORDER})")),i.push("proto.set=function "+r+"_set("+l.join(",")+",v){"),a?i.push("return this.data.set("+u+",v)}"):i.push("return this.data["+u+"]=v}"),i.push("proto.get=function "+r+"_get("+l.join(",")+"){"),a?i.push("return this.data.get("+u+")}"):i.push("return this.data["+u+"]}"),i.push("proto.index=function "+r+"_index(",l.join(),"){return "+u+"}"),i.push("proto.hi=function "+r+"_hi("+l.join(",")+"){return new "+r+"(this.data,"+o.map(function(t){return["(typeof i",t,"!=='number'||i",t,"<0)?this.shape[",t,"]:i",t,"|0"].join("")}).join(",")+","+o.map(function(t){return"this.stride["+t+"]"}).join(",")+",this.offset)}");var p=o.map(function(t){return"a"+t+"=this.shape["+t+"]"}),d=o.map(function(t){return"c"+t+"=this.stride["+t+"]"});i.push("proto.lo=function "+r+"_lo("+l.join(",")+"){var b=this.offset,d=0,"+p.join(",")+","+d.join(","));for(var g=0;g<e;++g)i.push("if(typeof i"+g+"==='number'&&i"+g+">=0){d=i"+g+"|0;b+=c"+g+"*d;a"+g+"-=d}");i.push("return new "+r+"(this.data,"+o.map(function(t){return"a"+t}).join(",")+","+o.map(function(t){return"c"+t}).join(",")+",b)}"),i.push("proto.step=function "+r+"_step("+l.join(",")+"){var "+o.map(function(t){return"a"+t+"=this.shape["+t+"]"}).join(",")+","+o.map(function(t){return"b"+t+"=this.stride["+t+"]"}).join(",")+",c=this.offset,d=0,ceil=Math.ceil");for(g=0;g<e;++g)i.push("if(typeof i"+g+"==='number'){d=i"+g+"|0;if(d<0){c+=b"+g+"*(a"+g+"-1);a"+g+"=ceil(-a"+g+"/d)}else{a"+g+"=ceil(a"+g+"/d)}b"+g+"*=d}");i.push("return new "+r+"(this.data,"+o.map(function(t){return"a"+t}).join(",")+","+o.map(function(t){return"b"+t}).join(",")+",c)}");var v=new Array(e),m=new Array(e);for(g=0;g<e;++g)v[g]="a[i"+g+"]",m[g]="b[i"+g+"]";i.push("proto.transpose=function "+r+"_transpose("+l+"){"+l.map(function(t,e){return t+"=("+t+"===undefined?"+e+":"+t+"|0)"}).join(";"),"var a=this.shape,b=this.stride;return new "+r+"(this.data,"+v.join(",")+","+m.join(",")+",this.offset)}"),i.push("proto.pick=function "+r+"_pick("+l+"){var a=[],b=[],c=this.offset");for(g=0;g<e;++g)i.push("if(typeof i"+g+"==='number'&&i"+g+">=0){c=(c+this.stride["+g+"]*i"+g+")|0}else{a.push(this.shape["+g+"]);b.push(this.stride["+g+"])}");return i.push("var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}"),i.push("return function construct_"+r+"(data,shape,stride,offset){return new "+r+"(data,"+o.map(function(t){return"shape["+t+"]"}).join(",")+","+o.map(function(t){return"stride["+t+"]"}).join(",")+",offset)}"),new Function("CTOR_LIST","ORDER",i.join("\n"))(c[t],s)}var c={float32:[],float64:[],int8:[],int16:[],int32:[],uint8:[],uint16:[],uint32:[],array:[],uint8_clamped:[],buffer:[],generic:[]};e.exports=function(t,e,r,n){if(void 0===t)return(0,c.array[0])([]);"number"==typeof t&&(t=[t]),void 0===e&&(e=[t.length]);var o=e.length;if(void 0===r){r=new Array(o);for(var s=o-1,u=1;s>=0;--s)r[s]=u,u*=e[s]}if(void 0===n)for(n=0,s=0;s<o;++s)r[s]<0&&(n-=(e[s]-1)*r[s]);for(var h=function(t){if(a(t))return"buffer";if(i)switch(Object.prototype.toString.call(t)){case"[object Float64Array]":return"float64";case"[object Float32Array]":return"float32";case"[object Int8Array]":return"int8";case"[object Int16Array]":return"int16";case"[object Int32Array]":return"int32";case"[object Uint8Array]":return"uint8";case"[object Uint16Array]":return"uint16";case"[object Uint32Array]":return"uint32";case"[object Uint8ClampedArray]":return"uint8_clamped"}return Array.isArray(t)?"array":"generic"}(t),f=c[h];f.length<=o+1;)f.push(l(h,f.length-1));return(0,f[o+1])(t,e,r,n)}},{"iota-array":417,"is-buffer":419}],452:[function(t,e,r){"use strict";var n=t("double-bits"),a=Math.pow(2,-1074),i=-1>>>0;e.exports=function(t,e){if(isNaN(t)||isNaN(e))return NaN;if(t===e)return t;if(0===t)return e<0?-a:a;var r=n.hi(t),o=n.lo(t);e>t==t>0?o===i?(r+=1,o=0):o+=1:0===o?(o=i,r-=1):o-=1;return n.pack(o,r)}},{"double-bits":169}],453:[function(t,e,r){var n=Math.PI,a=c(120);function i(t,e,r,n){return["C",t,e,r,n,r,n]}function o(t,e,r,n,a,i){return["C",t/3+2/3*r,e/3+2/3*n,a/3+2/3*r,i/3+2/3*n,a,i]}function s(t,e,r,i,o,c,u,h,f,p){if(p)k=p[0],T=p[1],_=p[2],w=p[3];else{var d=l(t,e,-o);t=d.x,e=d.y;var g=(t-(h=(d=l(h,f,-o)).x))/2,v=(e-(f=d.y))/2,m=g*g/(r*r)+v*v/(i*i);m>1&&(r*=m=Math.sqrt(m),i*=m);var y=r*r,x=i*i,b=(c==u?-1:1)*Math.sqrt(Math.abs((y*x-y*v*v-x*g*g)/(y*v*v+x*g*g)));b==1/0&&(b=1);var _=b*r*v/i+(t+h)/2,w=b*-i*g/r+(e+f)/2,k=Math.asin(((e-w)/i).toFixed(9)),T=Math.asin(((f-w)/i).toFixed(9));(k=t<_?n-k:k)<0&&(k=2*n+k),(T=h<_?n-T:T)<0&&(T=2*n+T),u&&k>T&&(k-=2*n),!u&&T>k&&(T-=2*n)}if(Math.abs(T-k)>a){var M=T,A=h,S=f;T=k+a*(u&&T>k?1:-1);var E=s(h=_+r*Math.cos(T),f=w+i*Math.sin(T),r,i,o,0,u,A,S,[T,M,_,w])}var L=Math.tan((T-k)/4),C=4/3*r*L,P=4/3*i*L,O=[2*t-(t+C*Math.sin(k)),2*e-(e-P*Math.cos(k)),h+C*Math.sin(T),f-P*Math.cos(T),h,f];if(p)return O;E&&(O=O.concat(E));for(var z=0;z<O.length;){var I=l(O[z],O[z+1],o);O[z++]=I.x,O[z++]=I.y}return O}function l(t,e,r){return{x:t*Math.cos(r)-e*Math.sin(r),y:t*Math.sin(r)+e*Math.cos(r)}}function c(t){return t*(n/180)}e.exports=function(t){for(var e,r=[],n=0,a=0,l=0,u=0,h=null,f=null,p=0,d=0,g=0,v=t.length;g<v;g++){var m=t[g],y=m[0];switch(y){case"M":l=m[1],u=m[2];break;case"A":(m=s(p,d,m[1],m[2],c(m[3]),m[4],m[5],m[6],m[7])).unshift("C"),m.length>7&&(r.push(m.splice(0,7)),m.unshift("C"));break;case"S":var x=p,b=d;"C"!=e&&"S"!=e||(x+=x-n,b+=b-a),m=["C",x,b,m[1],m[2],m[3],m[4]];break;case"T":"Q"==e||"T"==e?(h=2*p-h,f=2*d-f):(h=p,f=d),m=o(p,d,h,f,m[1],m[2]);break;case"Q":h=m[1],f=m[2],m=o(p,d,m[1],m[2],m[3],m[4]);break;case"L":m=i(p,d,m[1],m[2]);break;case"H":m=i(p,d,m[1],d);break;case"V":m=i(p,d,p,m[1]);break;case"Z":m=i(p,d,l,u)}e=y,p=m[m.length-2],d=m[m.length-1],m.length>4?(n=m[m.length-4],a=m[m.length-3]):(n=p,a=d),r.push(m)}return r}},{}],454:[function(t,e,r){r.vertexNormals=function(t,e,r){for(var n=e.length,a=new Array(n),i=void 0===r?1e-6:r,o=0;o<n;++o)a[o]=[0,0,0];for(o=0;o<t.length;++o)for(var s=t[o],l=0,c=s[s.length-1],u=s[0],h=0;h<s.length;++h){l=c,c=u,u=s[(h+1)%s.length];for(var f=e[l],p=e[c],d=e[u],g=new Array(3),v=0,m=new Array(3),y=0,x=0;x<3;++x)g[x]=f[x]-p[x],v+=g[x]*g[x],m[x]=d[x]-p[x],y+=m[x]*m[x];if(v*y>i){var b=a[c],_=1/Math.sqrt(v*y);for(x=0;x<3;++x){var w=(x+1)%3,k=(x+2)%3;b[x]+=_*(m[w]*g[k]-m[k]*g[w])}}}for(o=0;o<n;++o){b=a[o];var T=0;for(x=0;x<3;++x)T+=b[x]*b[x];if(T>i)for(_=1/Math.sqrt(T),x=0;x<3;++x)b[x]*=_;else for(x=0;x<3;++x)b[x]=0}return a},r.faceNormals=function(t,e,r){for(var n=t.length,a=new Array(n),i=void 0===r?1e-6:r,o=0;o<n;++o){for(var s=t[o],l=new Array(3),c=0;c<3;++c)l[c]=e[s[c]];var u=new Array(3),h=new Array(3);for(c=0;c<3;++c)u[c]=l[1][c]-l[0][c],h[c]=l[2][c]-l[0][c];var f=new Array(3),p=0;for(c=0;c<3;++c){var d=(c+1)%3,g=(c+2)%3;f[c]=u[d]*h[g]-u[g]*h[d],p+=f[c]*f[c]}p=p>i?1/Math.sqrt(p):0;for(c=0;c<3;++c)f[c]*=p;a[o]=f}return a}},{}],455:[function(t,e,r){"use strict";var n=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach(function(t){n[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(t){return!1}}()?Object.assign:function(t,e){for(var r,o,s=function(t){if(null==t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}(t),l=1;l<arguments.length;l++){for(var c in r=Object(arguments[l]))a.call(r,c)&&(s[c]=r[c]);if(n){o=n(r);for(var u=0;u<o.length;u++)i.call(r,o[u])&&(s[o[u]]=r[o[u]])}}return s}},{}],456:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a,i,o,s,l,c){var u=e+i+c;if(h>0){var h=Math.sqrt(u+1);t[0]=.5*(o-l)/h,t[1]=.5*(s-n)/h,t[2]=.5*(r-i)/h,t[3]=.5*h}else{var f=Math.max(e,i,c),h=Math.sqrt(2*f-u+1);e>=f?(t[0]=.5*h,t[1]=.5*(a+r)/h,t[2]=.5*(s+n)/h,t[3]=.5*(o-l)/h):i>=f?(t[0]=.5*(r+a)/h,t[1]=.5*h,t[2]=.5*(l+o)/h,t[3]=.5*(s-n)/h):(t[0]=.5*(n+s)/h,t[1]=.5*(o+l)/h,t[2]=.5*h,t[3]=.5*(r-a)/h)}return t}},{}],457:[function(t,e,r){"use strict";e.exports=function(t){var e=(t=t||{}).center||[0,0,0],r=t.rotation||[0,0,0,1],n=t.radius||1;e=[].slice.call(e,0,3),u(r=[].slice.call(r,0,4),r);var a=new h(r,e,Math.log(n));a.setDistanceLimits(t.zoomMin,t.zoomMax),("eye"in t||"up"in t)&&a.lookAt(0,t.eye,t.center,t.up);return a};var n=t("filtered-vector"),a=t("gl-mat4/lookAt"),i=t("gl-mat4/fromQuat"),o=t("gl-mat4/invert"),s=t("./lib/quatFromFrame");function l(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function c(t,e,r,n){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2)+Math.pow(n,2))}function u(t,e){var r=e[0],n=e[1],a=e[2],i=e[3],o=c(r,n,a,i);o>1e-6?(t[0]=r/o,t[1]=n/o,t[2]=a/o,t[3]=i/o):(t[0]=t[1]=t[2]=0,t[3]=1)}function h(t,e,r){this.radius=n([r]),this.center=n(e),this.rotation=n(t),this.computedRadius=this.radius.curve(0),this.computedCenter=this.center.curve(0),this.computedRotation=this.rotation.curve(0),this.computedUp=[.1,0,0],this.computedEye=[.1,0,0],this.computedMatrix=[.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.recalcMatrix(0)}var f=h.prototype;f.lastT=function(){return Math.max(this.radius.lastT(),this.center.lastT(),this.rotation.lastT())},f.recalcMatrix=function(t){this.radius.curve(t),this.center.curve(t),this.rotation.curve(t);var e=this.computedRotation;u(e,e);var r=this.computedMatrix;i(r,e);var n=this.computedCenter,a=this.computedEye,o=this.computedUp,s=Math.exp(this.computedRadius[0]);a[0]=n[0]+s*r[2],a[1]=n[1]+s*r[6],a[2]=n[2]+s*r[10],o[0]=r[1],o[1]=r[5],o[2]=r[9];for(var l=0;l<3;++l){for(var c=0,h=0;h<3;++h)c+=r[l+4*h]*a[h];r[12+l]=-c}},f.getMatrix=function(t,e){this.recalcMatrix(t);var r=this.computedMatrix;if(e){for(var n=0;n<16;++n)e[n]=r[n];return e}return r},f.idle=function(t){this.center.idle(t),this.radius.idle(t),this.rotation.idle(t)},f.flush=function(t){this.center.flush(t),this.radius.flush(t),this.rotation.flush(t)},f.pan=function(t,e,r,n){e=e||0,r=r||0,n=n||0,this.recalcMatrix(t);var a=this.computedMatrix,i=a[1],o=a[5],s=a[9],c=l(i,o,s);i/=c,o/=c,s/=c;var u=a[0],h=a[4],f=a[8],p=u*i+h*o+f*s,d=l(u-=i*p,h-=o*p,f-=s*p);u/=d,h/=d,f/=d;var g=a[2],v=a[6],m=a[10],y=g*i+v*o+m*s,x=g*u+v*h+m*f,b=l(g-=y*i+x*u,v-=y*o+x*h,m-=y*s+x*f);g/=b,v/=b,m/=b;var _=u*e+i*r,w=h*e+o*r,k=f*e+s*r;this.center.move(t,_,w,k);var T=Math.exp(this.computedRadius[0]);T=Math.max(1e-4,T+n),this.radius.set(t,Math.log(T))},f.rotate=function(t,e,r,n){this.recalcMatrix(t),e=e||0,r=r||0;var a=this.computedMatrix,i=a[0],o=a[4],s=a[8],u=a[1],h=a[5],f=a[9],p=a[2],d=a[6],g=a[10],v=e*i+r*u,m=e*o+r*h,y=e*s+r*f,x=-(d*y-g*m),b=-(g*v-p*y),_=-(p*m-d*v),w=Math.sqrt(Math.max(0,1-Math.pow(x,2)-Math.pow(b,2)-Math.pow(_,2))),k=c(x,b,_,w);k>1e-6?(x/=k,b/=k,_/=k,w/=k):(x=b=_=0,w=1);var T=this.computedRotation,M=T[0],A=T[1],S=T[2],E=T[3],L=M*w+E*x+A*_-S*b,C=A*w+E*b+S*x-M*_,P=S*w+E*_+M*b-A*x,O=E*w-M*x-A*b-S*_;if(n){x=p,b=d,_=g;var z=Math.sin(n)/l(x,b,_);x*=z,b*=z,_*=z,O=O*(w=Math.cos(e))-(L=L*w+O*x+C*_-P*b)*x-(C=C*w+O*b+P*x-L*_)*b-(P=P*w+O*_+L*b-C*x)*_}var I=c(L,C,P,O);I>1e-6?(L/=I,C/=I,P/=I,O/=I):(L=C=P=0,O=1),this.rotation.set(t,L,C,P,O)},f.lookAt=function(t,e,r,n){this.recalcMatrix(t),r=r||this.computedCenter,e=e||this.computedEye,n=n||this.computedUp;var i=this.computedMatrix;a(i,e,r,n);var o=this.computedRotation;s(o,i[0],i[1],i[2],i[4],i[5],i[6],i[8],i[9],i[10]),u(o,o),this.rotation.set(t,o[0],o[1],o[2],o[3]);for(var l=0,c=0;c<3;++c)l+=Math.pow(r[c]-e[c],2);this.radius.set(t,.5*Math.log(Math.max(l,1e-6))),this.center.set(t,r[0],r[1],r[2])},f.translate=function(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},f.setMatrix=function(t,e){var r=this.computedRotation;s(r,e[0],e[1],e[2],e[4],e[5],e[6],e[8],e[9],e[10]),u(r,r),this.rotation.set(t,r[0],r[1],r[2],r[3]);var n=this.computedMatrix;o(n,e);var a=n[15];if(Math.abs(a)>1e-6){var i=n[12]/a,l=n[13]/a,c=n[14]/a;this.recalcMatrix(t);var h=Math.exp(this.computedRadius[0]);this.center.set(t,i-n[2]*h,l-n[6]*h,c-n[10]*h),this.radius.idle(t)}else this.center.idle(t),this.radius.idle(t)},f.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},f.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},f.getDistanceLimits=function(t){var e=this.radius.bounds;return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},f.toJSON=function(){return this.recalcMatrix(this.lastT()),{center:this.computedCenter.slice(),rotation:this.computedRotation.slice(),distance:Math.log(this.computedRadius[0]),zoomMin:this.radius.bounds[0][0],zoomMax:this.radius.bounds[1][0]}},f.fromJSON=function(t){var e=this.lastT(),r=t.center;r&&this.center.set(e,r[0],r[1],r[2]);var n=t.rotation;n&&this.rotation.set(e,n[0],n[1],n[2],n[3]);var a=t.distance;a&&a>0&&this.radius.set(e,Math.log(a)),this.setDistanceLimits(t.zoomMin,t.zoomMax)}},{"./lib/quatFromFrame":456,"filtered-vector":229,"gl-mat4/fromQuat":265,"gl-mat4/invert":268,"gl-mat4/lookAt":269}],458:[function(t,e,r){"use strict";var n=t("repeat-string");e.exports=function(t,e,r){return n(r="undefined"!=typeof r?r+"":" ",e)+t}},{"repeat-string":501}],459:[function(t,e,r){"use strict";function n(t,e){if("string"!=typeof t)return[t];var r=[t];"string"==typeof e||Array.isArray(e)?e={brackets:e}:e||(e={});var n=e.brackets?Array.isArray(e.brackets)?e.brackets:[e.brackets]:["{}","[]","()"],a=e.escape||"___",i=!!e.flat;n.forEach(function(t){var e=new RegExp(["\\",t[0],"[^\\",t[0],"\\",t[1],"]*\\",t[1]].join("")),n=[];function i(e,i,o){var s=r.push(e.slice(t[0].length,-t[1].length))-1;return n.push(s),a+s+a}r.forEach(function(t,n){for(var a,o=0;t!=a;)if(a=t,t=t.replace(e,i),o++>1e4)throw Error("References have circular dependency. Please, check them.");r[n]=t}),n=n.reverse(),r=r.map(function(e){return n.forEach(function(r){e=e.replace(new RegExp("(\\"+a+r+"\\"+a+")","g"),t[0]+"$1"+t[1])}),e})});var o=new RegExp("\\"+a+"([0-9]+)\\"+a);return i?r:function t(e,r,n){for(var a,i=[],s=0;a=o.exec(e);){if(s++>1e4)throw Error("Circular references in parenthesis");i.push(e.slice(0,a.index)),i.push(t(r[a[1]],r)),e=e.slice(a.index+a[0].length)}return i.push(e),i}(r[0],r)}function a(t,e){if(e&&e.flat){var r,n=e&&e.escape||"___",a=t[0];if(!a)return"";for(var i=new RegExp("\\"+n+"([0-9]+)\\"+n),o=0;a!=r;){if(o++>1e4)throw Error("Circular references in "+t);r=a,a=a.replace(i,s)}return a}return t.reduce(function t(e,r){return Array.isArray(r)&&(r=r.reduce(t,"")),e+r},"");function s(e,r){if(null==t[r])throw Error("Reference "+r+"is undefined");return t[r]}}function i(t,e){return Array.isArray(t)?a(t,e):n(t,e)}i.parse=n,i.stringify=a,e.exports=i},{}],460:[function(t,e,r){"use strict";var n=t("pick-by-alias");e.exports=function(t){var e;arguments.length>1&&(t=arguments);"string"==typeof t?t=t.split(/\s/).map(parseFloat):"number"==typeof t&&(t=[t]);t.length&&"number"==typeof t[0]?e=1===t.length?{width:t[0],height:t[0],x:0,y:0}:2===t.length?{width:t[0],height:t[1],x:0,y:0}:{x:t[0],y:t[1],width:t[2]-t[0]||0,height:t[3]-t[1]||0}:t&&(t=n(t,{left:"x l left Left",top:"y t top Top",width:"w width W Width",height:"h height W Width",bottom:"b bottom Bottom",right:"r right Right"}),e={x:t.left||0,y:t.top||0},null==t.width?t.right?e.width=t.right-e.x:e.width=0:e.width=t.width,null==t.height?t.bottom?e.height=t.bottom-e.y:e.height=0:e.height=t.height);return e}},{"pick-by-alias":466}],461:[function(t,e,r){e.exports=function(t){var e=[];return t.replace(a,function(t,r,a){var o=r.toLowerCase();for(a=function(t){var e=t.match(i);return e?e.map(Number):[]}(a),"m"==o&&a.length>2&&(e.push([r].concat(a.splice(0,2))),o="l",r="m"==r?"l":"L");;){if(a.length==n[o])return a.unshift(r),e.push(a);if(a.length<n[o])throw new Error("malformed path data");e.push([r].concat(a.splice(0,n[o])))}}),e};var n={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},a=/([astvzqmhlc])([^astvzqmhlc]*)/gi;var i=/-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/gi},{}],462:[function(t,e,r){e.exports=function(t,e){e||(e=[0,""]),t=String(t);var r=parseFloat(t,10);return e[0]=r,e[1]=t.match(/[\d.\-\+]*\s*(.*)/)[1]||"",e}},{}],463:[function(t,e,r){(function(t){(function(){var r,n,a,i,o,s;"undefined"!=typeof performance&&null!==performance&&performance.now?e.exports=function(){return performance.now()}:"undefined"!=typeof t&&null!==t&&t.hrtime?(e.exports=function(){return(r()-o)/1e6},n=t.hrtime,i=(r=function(){var t;return 1e9*(t=n())[0]+t[1]})(),s=1e9*t.uptime(),o=i-s):Date.now?(e.exports=function(){return Date.now()-a},a=Date.now()):(e.exports=function(){return(new Date).getTime()-a},a=(new Date).getTime())}).call(this)}).call(this,t("_process"))},{_process:483}],464:[function(t,e,r){"use strict";e.exports=function(t){var e=t.length;if(e<n){for(var r=1,i=0;i<e;++i)for(var o=0;o<i;++o)if(t[i]<t[o])r=-r;else if(t[i]===t[o])return 0;return r}for(var s=a.mallocUint8(e),i=0;i<e;++i)s[i]=0;for(var r=1,i=0;i<e;++i)if(!s[i]){var l=1;s[i]=1;for(var o=t[i];o!==i;o=t[o]){if(s[o])return a.freeUint8(s),0;l+=1,s[o]=1}1&l||(r=-r)}return a.freeUint8(s),r};var n=32,a=t("typedarray-pool")},{"typedarray-pool":543}],465:[function(t,e,r){"use strict";var n=t("typedarray-pool"),a=t("invert-permutation");r.rank=function(t){var e=t.length;switch(e){case 0:case 1:return 0;case 2:return t[1]}var r,i,o,s=n.mallocUint32(e),l=n.mallocUint32(e),c=0;for(a(t,l),o=0;o<e;++o)s[o]=t[o];for(o=e-1;o>0;--o)i=l[o],r=s[o],s[o]=s[i],s[i]=r,l[o]=l[r],l[r]=i,c=(c+r)*o;return n.freeUint32(l),n.freeUint32(s),c},r.unrank=function(t,e,r){switch(t){case 0:return r||[];case 1:return r?(r[0]=0,r):[0];case 2:return r?(e?(r[0]=0,r[1]=1):(r[0]=1,r[1]=0),r):e?[0,1]:[1,0]}var n,a,i,o=1;for((r=r||new Array(t))[0]=0,i=1;i<t;++i)r[i]=i,o=o*i|0;for(i=t-1;i>0;--i)e=e-(n=e/o|0)*o|0,o=o/i|0,a=0|r[i],r[i]=0|r[n],r[n]=0|a;return r}},{"invert-permutation":416,"typedarray-pool":543}],466:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n,i,o={};if("string"==typeof e&&(e=a(e)),Array.isArray(e)){var s={};for(i=0;i<e.length;i++)s[e[i]]=!0;e=s}for(n in e)e[n]=a(e[n]);var l={};for(n in e){var c=e[n];if(Array.isArray(c))for(i=0;i<c.length;i++){var u=c[i];if(r&&(l[u]=!0),u in t){if(o[n]=t[u],r)for(var h=i;h<c.length;h++)l[c[h]]=!0;break}}else n in t&&(e[n]&&(o[n]=t[n]),r&&(l[n]=!0))}if(r)for(n in t)l[n]||(o[n]=t[n]);return o};var n={};function a(t){return n[t]?n[t]:("string"==typeof t&&(t=n[t]=t.split(/\s*,\s*|\s+/)),t)}},{}],467:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r=0|e.length,a=t.length,i=[new Array(r),new Array(r)],o=0;o<r;++o)i[0][o]=[],i[1][o]=[];for(var o=0;o<a;++o){var s=t[o];i[0][s[0]].push(s),i[1][s[1]].push(s)}for(var l=[],o=0;o<r;++o)i[0][o].length+i[1][o].length===0&&l.push([o]);function c(t,e){var r=i[e][t[e]];r.splice(r.indexOf(t),1)}function u(t,r,a){for(var o,s,l,u=0;u<2;++u)if(i[u][r].length>0){o=i[u][r][0],l=u;break}s=o[1^l];for(var h=0;h<2;++h)for(var f=i[h][r],p=0;p<f.length;++p){var d=f[p],g=d[1^h],v=n(e[t],e[r],e[s],e[g]);v>0&&(o=d,s=g,l=h)}return a?s:(o&&c(o,l),s)}function h(t,r){var a=i[r][t][0],o=[t];c(a,r);for(var s=a[1^r];;){for(;s!==t;)o.push(s),s=u(o[o.length-2],s,!1);if(i[0][t].length+i[1][t].length===0)break;var l=o[o.length-1],h=t,f=o[1],p=u(l,h,!0);if(n(e[l],e[h],e[f],e[p])<0)break;o.push(t),s=u(l,h)}return o}function f(t,e){return e[1]===e[e.length-1]}for(var o=0;o<r;++o)for(var p=0;p<2;++p){for(var d=[];i[p][o].length>0;){i[0][o].length;var g=h(o,p);f(d,g)?d.push.apply(d,g):(d.length>0&&l.push(d),d=g)}d.length>0&&l.push(d)}return l};var n=t("compare-angle")},{"compare-angle":129}],468:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r=n(t,e.length),a=new Array(e.length),i=new Array(e.length),o=[],s=0;s<e.length;++s){var l=r[s].length;i[s]=l,a[s]=!0,l<=1&&o.push(s)}for(;o.length>0;){var c=o.pop();a[c]=!1;for(var u=r[c],s=0;s<u.length;++s){var h=u[s];0==--i[h]&&o.push(h)}}for(var f=new Array(e.length),p=[],s=0;s<e.length;++s)if(a[s]){var c=p.length;f[s]=c,p.push(e[s])}else f[s]=-1;for(var d=[],s=0;s<t.length;++s){var g=t[s];a[g[0]]&&a[g[1]]&&d.push([f[g[0]],f[g[1]]])}return[d,p]};var n=t("edges-to-adjacency-list")},{"edges-to-adjacency-list":174}],469:[function(t,e,r){"use strict";e.exports=function(t,e){var r=c(t,e);t=r[0];for(var h=(e=r[1]).length,f=(t.length,n(t,e.length)),p=0;p<h;++p)if(f[p].length%2==1)throw new Error("planar-graph-to-polyline: graph must be manifold");var d=a(t,e);for(var g=(d=d.filter(function(t){for(var r=t.length,n=[0],a=0;a<r;++a){var i=e[t[a]],l=e[t[(a+1)%r]],c=o(-i[0],i[1]),u=o(-i[0],l[1]),h=o(l[0],i[1]),f=o(l[0],l[1]);n=s(n,s(s(c,u),s(h,f)))}return n[n.length-1]>0})).length,v=new Array(g),m=new Array(g),p=0;p<g;++p){v[p]=p;var y=new Array(g),x=d[p].map(function(t){return e[t]}),b=i([x]),_=0;t:for(var w=0;w<g;++w)if(y[w]=0,p!==w){for(var k=d[w],T=k.length,M=0;M<T;++M){var A=b(e[k[M]]);if(0!==A){A<0&&(y[w]=1,_+=1);continue t}}y[w]=1,_+=1}m[p]=[_,p,y]}m.sort(function(t,e){return e[0]-t[0]});for(var p=0;p<g;++p)for(var y=m[p],S=y[1],E=y[2],w=0;w<g;++w)E[w]&&(v[w]=S);for(var L=function(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=[];return e}(g),p=0;p<g;++p)L[p].push(v[p]),L[v[p]].push(p);for(var C={},P=u(h,!1),p=0;p<g;++p)for(var k=d[p],T=k.length,w=0;w<T;++w){var O=k[w],z=k[(w+1)%T],I=Math.min(O,z)+":"+Math.max(O,z);if(I in C){var D=C[I];L[D].push(p),L[p].push(D),P[O]=P[z]=!0}else C[I]=p}function R(t){for(var e=t.length,r=0;r<e;++r)if(!P[t[r]])return!1;return!0}for(var F=[],B=u(g,-1),p=0;p<g;++p)v[p]!==p||R(d[p])?B[p]=-1:(F.push(p),B[p]=0);var r=[];for(;F.length>0;){var N=F.pop(),j=L[N];l(j,function(t,e){return t-e});var V,U=j.length,q=B[N];if(0===q){var k=d[N];V=[k]}for(var p=0;p<U;++p){var H=j[p];if(!(B[H]>=0)&&(B[H]=1^q,F.push(H),0===q)){var k=d[H];R(k)||(k.reverse(),V.push(k))}}0===q&&r.push(V)}return r};var n=t("edges-to-adjacency-list"),a=t("planar-dual"),i=t("point-in-big-polygon"),o=t("two-product"),s=t("robust-sum"),l=t("uniq"),c=t("./lib/trim-leaves");function u(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=e;return r}},{"./lib/trim-leaves":468,"edges-to-adjacency-list":174,"planar-dual":467,"point-in-big-polygon":473,"robust-sum":513,"two-product":541,uniq:545}],470:[function(t,e,r){"use strict";e.exports=t("./quad")},{"./quad":472}],471:[function(t,e,r){arguments[4][113][0].apply(r,arguments)},{dup:113}],472:[function(t,e,r){"use strict";var n=t("binary-search-bounds"),a=t("clamp"),i=t("parse-rect"),o=t("array-bounds"),s=t("pick-by-alias"),l=t("defined"),c=t("flatten-vertex-data"),u=t("is-obj"),h=t("dtype"),f=t("math-log2"),p=1073741824;function d(t,e){for(var r=e[0],n=e[1],i=1/(e[2]-r),o=1/(e[3]-n),s=new Array(t.length),l=0,c=t.length/2;l<c;l++)s[2*l]=a((t[2*l]-r)*i,0,1),s[2*l+1]=a((t[2*l+1]-n)*o,0,1);return s}e.exports=function(t,e){e||(e={}),t=c(t,"float64"),e=s(e,{bounds:"range bounds dataBox databox",maxDepth:"depth maxDepth maxdepth level maxLevel maxlevel levels",dtype:"type dtype format out dst output destination"});var r=l(e.maxDepth,255),a=l(e.bounds,o(t,2));a[0]===a[2]&&a[2]++,a[1]===a[3]&&a[3]++;var g,v=d(t,a),m=t.length>>>1;e.dtype||(e.dtype="array"),"string"==typeof e.dtype?g=new(h(e.dtype))(m):e.dtype&&(g=e.dtype,Array.isArray(g)&&(g.length=m));for(var y=0;y<m;++y)g[y]=y;var x=[],b=[],_=[],w=[];!function t(e,n,a,i,o,s){if(!i.length)return null;var l=x[o]||(x[o]=[]);var c=_[o]||(_[o]=[]);var u=b[o]||(b[o]=[]);var h=l.length;o++;if(o>r||s>p){for(var f=0;f<i.length;f++)l.push(i[f]),c.push(s),u.push(null,null,null,null);return h}l.push(i[0]);c.push(s);if(i.length<=1)return u.push(null,null,null,null),h;var d=.5*a;var g=e+d,m=n+d;var y=[],w=[],k=[],T=[];for(var M=1,A=i.length;M<A;M++){var S=i[M],E=v[2*S],L=v[2*S+1];E<g?L<m?y.push(S):w.push(S):L<m?k.push(S):T.push(S)}s<<=2;u.push(t(e,n,d,y,o,s),t(e,m,d,w,o,s+1),t(g,n,d,k,o,s+2),t(g,m,d,T,o,s+3));return h}(0,0,1,g,0,1);for(var k=0,T=0;T<x.length;T++){var M=x[T];if(g.set)g.set(M,k);else for(var A=0,S=M.length;A<S;A++)g[A+k]=M[A];var E=k+x[T].length;w[T]=[k,E],k=E}return g.range=function(){var e,r=[],o=arguments.length;for(;o--;)r[o]=arguments[o];if(u(r[r.length-1])){var c=r.pop();r.length||null==c.x&&null==c.l&&null==c.left||(r=[c],e={}),e=s(c,{level:"level maxLevel",d:"d diam diameter r radius px pxSize pixel pixelSize maxD size minSize",lod:"lod details ranges offsets"})}else e={};r.length||(r=a);var h=i.apply(void 0,r),p=[Math.min(h.x,h.x+h.width),Math.min(h.y,h.y+h.height),Math.max(h.x,h.x+h.width),Math.max(h.y,h.y+h.height)],g=p[0],v=p[1],m=p[2],y=p[3],k=d([g,v,m,y],a),T=k[0],M=k[1],A=k[2],S=k[3],E=l(e.level,x.length);if(null!=e.d){var C;"number"==typeof e.d?C=[e.d,e.d]:e.d.length&&(C=e.d),E=Math.min(Math.max(Math.ceil(-f(Math.abs(C[0])/(a[2]-a[0]))),Math.ceil(-f(Math.abs(C[1])/(a[3]-a[1])))),E)}if(E=Math.min(E,x.length),e.lod)return function(t,e,r,a,i){for(var o=[],s=0;s<i;s++){var l=_[s],c=w[s][0],u=L(t,e,s),h=L(r,a,s),f=n.ge(l,u),p=n.gt(l,h,f,l.length-1);o[s]=[f+c,p+c]}return o}(T,M,A,S,E);var P=[];return function e(r,n,a,i,o,s){if(null!==o&&null!==s){var l=r+a,c=n+a;if(!(T>l||M>c||A<r||S<n||i>=E||o===s)){var u=x[i];void 0===s&&(s=u.length);for(var h=o;h<s;h++){var f=u[h],p=t[2*f],d=t[2*f+1];p>=g&&p<=m&&d>=v&&d<=y&&P.push(f)}var _=b[i],w=_[4*o+0],k=_[4*o+1],L=_[4*o+2],C=_[4*o+3],O=function(t,e){for(var r=null,n=0;null===r;)if(r=t[4*e+n],++n>t.length)return null;return r}(_,o+1),z=.5*a,I=i+1;e(r,n,z,I,w,k||L||C||O),e(r,n+z,z,I,k,L||C||O),e(r+z,n,z,I,L,C||O),e(r+z,n+z,z,I,C,O)}}}(0,0,1,0,0,1),P},g;function L(t,e,r){for(var n=1,a=.5,i=.5,o=.5,s=0;s<r;s++)n<<=2,n+=t<a?e<i?0:1:e<i?2:3,o*=.5,a+=t<a?-o:o,i+=e<i?-o:o;return n}}},{"array-bounds":68,"binary-search-bounds":471,clamp:117,defined:166,dtype:171,"flatten-vertex-data":230,"is-obj":422,"math-log2":433,"parse-rect":460,"pick-by-alias":466}],473:[function(t,e,r){e.exports=function(t){for(var e=t.length,r=[],i=[],s=0;s<e;++s)for(var u=t[s],h=u.length,f=h-1,p=0;p<h;f=p++){var d=u[f],g=u[p];d[0]===g[0]?i.push([d,g]):r.push([d,g])}if(0===r.length)return 0===i.length?c:(v=l(i),function(t){return v(t[0],t[1])?0:1});var v;var m=a(r),y=function(t,e){return function(r){var a=o.le(e,r[0]);if(a<0)return 1;var i=t[a];if(!i){if(!(a>0&&e[a]===r[0]))return 1;i=t[a-1]}for(var s=1;i;){var l=i.key,c=n(r,l[0],l[1]);if(l[0][0]<l[1][0])if(c<0)i=i.left;else{if(!(c>0))return 0;s=-1,i=i.right}else if(c>0)i=i.left;else{if(!(c<0))return 0;s=1,i=i.right}}return s}}(m.slabs,m.coordinates);return 0===i.length?y:function(t,e){return function(r){return t(r[0],r[1])?0:e(r)}}(l(i),y)};var n=t("robust-orientation")[3],a=t("slab-decomposition"),i=t("interval-tree-1d"),o=t("binary-search-bounds");function s(){return!0}function l(t){for(var e={},r=0;r<t.length;++r){var n=t[r],a=n[0][0],o=n[0][1],l=n[1][1],c=[Math.min(o,l),Math.max(o,l)];a in e?e[a].push(c):e[a]=[c]}var u={},h=Object.keys(e);for(r=0;r<h.length;++r){var f=e[h[r]];u[h[r]]=i(f)}return function(t){return function(e,r){var n=t[e];return!!n&&!!n.queryPoint(r,s)}}(u)}function c(t){return 1}},{"binary-search-bounds":93,"interval-tree-1d":415,"robust-orientation":508,"slab-decomposition":524}],474:[function(t,e,r){var n,a=t("./lib/build-log"),i=t("./lib/epsilon"),o=t("./lib/intersecter"),s=t("./lib/segment-chainer"),l=t("./lib/segment-selector"),c=t("./lib/geojson"),u=!1,h=i();function f(t,e,r){var a=n.segments(t),i=n.segments(e),o=r(n.combine(a,i));return n.polygon(o)}n={buildLog:function(t){return!0===t?u=a():!1===t&&(u=!1),!1!==u&&u.list},epsilon:function(t){return h.epsilon(t)},segments:function(t){var e=o(!0,h,u);return t.regions.forEach(e.addRegion),{segments:e.calculate(t.inverted),inverted:t.inverted}},combine:function(t,e){return{combined:o(!1,h,u).calculate(t.segments,t.inverted,e.segments,e.inverted),inverted1:t.inverted,inverted2:e.inverted}},selectUnion:function(t){return{segments:l.union(t.combined,u),inverted:t.inverted1||t.inverted2}},selectIntersect:function(t){return{segments:l.intersect(t.combined,u),inverted:t.inverted1&&t.inverted2}},selectDifference:function(t){return{segments:l.difference(t.combined,u),inverted:t.inverted1&&!t.inverted2}},selectDifferenceRev:function(t){return{segments:l.differenceRev(t.combined,u),inverted:!t.inverted1&&t.inverted2}},selectXor:function(t){return{segments:l.xor(t.combined,u),inverted:t.inverted1!==t.inverted2}},polygon:function(t){return{regions:s(t.segments,h,u),inverted:t.inverted}},polygonFromGeoJSON:function(t){return c.toPolygon(n,t)},polygonToGeoJSON:function(t){return c.fromPolygon(n,h,t)},union:function(t,e){return f(t,e,n.selectUnion)},intersect:function(t,e){return f(t,e,n.selectIntersect)},difference:function(t,e){return f(t,e,n.selectDifference)},differenceRev:function(t,e){return f(t,e,n.selectDifferenceRev)},xor:function(t,e){return f(t,e,n.selectXor)}},"object"==typeof window&&(window.PolyBool=n),e.exports=n},{"./lib/build-log":475,"./lib/epsilon":476,"./lib/geojson":477,"./lib/intersecter":478,"./lib/segment-chainer":480,"./lib/segment-selector":481}],475:[function(t,e,r){e.exports=function(){var t,e=0,r=!1;function n(e,r){return t.list.push({type:e,data:r?JSON.parse(JSON.stringify(r)):void 0}),t}return t={list:[],segmentId:function(){return e++},checkIntersection:function(t,e){return n("check",{seg1:t,seg2:e})},segmentChop:function(t,e){return n("div_seg",{seg:t,pt:e}),n("chop",{seg:t,pt:e})},statusRemove:function(t){return n("pop_seg",{seg:t})},segmentUpdate:function(t){return n("seg_update",{seg:t})},segmentNew:function(t,e){return n("new_seg",{seg:t,primary:e})},segmentRemove:function(t){return n("rem_seg",{seg:t})},tempStatus:function(t,e,r){return n("temp_status",{seg:t,above:e,below:r})},rewind:function(t){return n("rewind",{seg:t})},status:function(t,e,r){return n("status",{seg:t,above:e,below:r})},vert:function(e){return e===r?t:(r=e,n("vert",{x:e}))},log:function(t){return"string"!=typeof t&&(t=JSON.stringify(t,!1," ")),n("log",{txt:t})},reset:function(){return n("reset")},selected:function(t){return n("selected",{segs:t})},chainStart:function(t){return n("chain_start",{seg:t})},chainRemoveHead:function(t,e){return n("chain_rem_head",{index:t,pt:e})},chainRemoveTail:function(t,e){return n("chain_rem_tail",{index:t,pt:e})},chainNew:function(t,e){return n("chain_new",{pt1:t,pt2:e})},chainMatch:function(t){return n("chain_match",{index:t})},chainClose:function(t){return n("chain_close",{index:t})},chainAddHead:function(t,e){return n("chain_add_head",{index:t,pt:e})},chainAddTail:function(t,e){return n("chain_add_tail",{index:t,pt:e})},chainConnect:function(t,e){return n("chain_con",{index1:t,index2:e})},chainReverse:function(t){return n("chain_rev",{index:t})},chainJoin:function(t,e){return n("chain_join",{index1:t,index2:e})},done:function(){return n("done")}}}},{}],476:[function(t,e,r){e.exports=function(t){"number"!=typeof t&&(t=1e-10);var e={epsilon:function(e){return"number"==typeof e&&(t=e),t},pointAboveOrOnLine:function(e,r,n){var a=r[0],i=r[1],o=n[0],s=n[1],l=e[0];return(o-a)*(e[1]-i)-(s-i)*(l-a)>=-t},pointBetween:function(e,r,n){var a=e[1]-r[1],i=n[0]-r[0],o=e[0]-r[0],s=n[1]-r[1],l=o*i+a*s;return!(l<t||l-(i*i+s*s)>-t)},pointsSameX:function(e,r){return Math.abs(e[0]-r[0])<t},pointsSameY:function(e,r){return Math.abs(e[1]-r[1])<t},pointsSame:function(t,r){return e.pointsSameX(t,r)&&e.pointsSameY(t,r)},pointsCompare:function(t,r){return e.pointsSameX(t,r)?e.pointsSameY(t,r)?0:t[1]<r[1]?-1:1:t[0]<r[0]?-1:1},pointsCollinear:function(e,r,n){var a=e[0]-r[0],i=e[1]-r[1],o=r[0]-n[0],s=r[1]-n[1];return Math.abs(a*s-o*i)<t},linesIntersect:function(e,r,n,a){var i=r[0]-e[0],o=r[1]-e[1],s=a[0]-n[0],l=a[1]-n[1],c=i*l-o*s;if(Math.abs(c)<t)return!1;var u=e[0]-n[0],h=e[1]-n[1],f=(s*h-l*u)/c,p=(i*h-o*u)/c,d={alongA:0,alongB:0,pt:[e[0]+f*i,e[1]+f*o]};return d.alongA=f<=-t?-2:f<t?-1:f-1<=-t?0:f-1<t?1:2,d.alongB=p<=-t?-2:p<t?-1:p-1<=-t?0:p-1<t?1:2,d},pointInsideRegion:function(e,r){for(var n=e[0],a=e[1],i=r[r.length-1][0],o=r[r.length-1][1],s=!1,l=0;l<r.length;l++){var c=r[l][0],u=r[l][1];u-a>t!=o-a>t&&(i-c)*(a-u)/(o-u)+c-n>t&&(s=!s),i=c,o=u}return s}};return e}},{}],477:[function(t,e,r){var n={toPolygon:function(t,e){function r(e){if(e.length<=0)return t.segments({inverted:!1,regions:[]});function r(e){var r=e.slice(0,e.length-1);return t.segments({inverted:!1,regions:[r]})}for(var n=r(e[0]),a=1;a<e.length;a++)n=t.selectDifference(t.combine(n,r(e[a])));return n}if("Polygon"===e.type)return t.polygon(r(e.coordinates));if("MultiPolygon"===e.type){for(var n=t.segments({inverted:!1,regions:[]}),a=0;a<e.coordinates.length;a++)n=t.selectUnion(t.combine(n,r(e.coordinates[a])));return t.polygon(n)}throw new Error("PolyBool: Cannot convert GeoJSON object to PolyBool polygon")},fromPolygon:function(t,e,r){function n(t,r){return e.pointInsideRegion([.5*(t[0][0]+t[1][0]),.5*(t[0][1]+t[1][1])],r)}function a(t){return{region:t,children:[]}}r=t.polygon(t.segments(r));var i=a(null);function o(t,e){for(var r=0;r<t.children.length;r++){if(n(e,(s=t.children[r]).region))return void o(s,e)}var i=a(e);for(r=0;r<t.children.length;r++){var s;n((s=t.children[r]).region,e)&&(i.children.push(s),t.children.splice(r,1),r--)}t.children.push(i)}for(var s=0;s<r.regions.length;s++){var l=r.regions[s];l.length<3||o(i,l)}function c(t,e){for(var r=0,n=t[t.length-1][0],a=t[t.length-1][1],i=[],o=0;o<t.length;o++){var s=t[o][0],l=t[o][1];i.push([s,l]),r+=l*n-s*a,n=s,a=l}return r<0!==e&&i.reverse(),i.push([i[0][0],i[0][1]]),i}var u=[];function h(t){var e=[c(t.region,!1)];u.push(e);for(var r=0;r<t.children.length;r++)e.push(f(t.children[r]))}function f(t){for(var e=0;e<t.children.length;e++)h(t.children[e]);return c(t.region,!0)}for(s=0;s<i.children.length;s++)h(i.children[s]);return u.length<=0?{type:"Polygon",coordinates:[]}:1==u.length?{type:"Polygon",coordinates:u[0]}:{type:"MultiPolygon",coordinates:u}}};e.exports=n},{}],478:[function(t,e,r){var n=t("./linked-list");e.exports=function(t,e,r){function a(t,e,n){return{id:r?r.segmentId():-1,start:t,end:e,myFill:{above:n.myFill.above,below:n.myFill.below},otherFill:null}}var i=n.create();function o(t,r){i.insertBefore(t,function(n){return function(t,r,n,a,i,o){var s=e.pointsCompare(r,i);return 0!==s?s:e.pointsSame(n,o)?0:t!==a?t?1:-1:e.pointAboveOrOnLine(n,a?i:o,a?o:i)?1:-1}(t.isStart,t.pt,r,n.isStart,n.pt,n.other.pt)<0})}function s(t,e){var r=function(t,e){var r=n.node({isStart:!0,pt:t.start,seg:t,primary:e,other:null,status:null});return o(r,t.end),r}(t,e);return function(t,e,r){var a=n.node({isStart:!1,pt:e.end,seg:e,primary:r,other:t,status:null});t.other=a,o(a,t.pt)}(r,t,e),r}function l(t,e){var n=a(e,t.seg.end,t.seg);return function(t,e){r&&r.segmentChop(t.seg,e),t.other.remove(),t.seg.end=e,t.other.pt=e,o(t.other,t.pt)}(t,e),s(n,t.primary)}function c(a,o){var s=n.create();function c(t){return s.findTransition(function(r){var n,a,i,o,s,l;return n=t,a=r.ev,i=n.seg.start,o=n.seg.end,s=a.seg.start,l=a.seg.end,(e.pointsCollinear(i,s,l)?e.pointsCollinear(o,s,l)?1:e.pointAboveOrOnLine(o,s,l)?1:-1:e.pointAboveOrOnLine(i,s,l)?1:-1)>0})}function u(t,n){var a=t.seg,i=n.seg,o=a.start,s=a.end,c=i.start,u=i.end;r&&r.checkIntersection(a,i);var h=e.linesIntersect(o,s,c,u);if(!1===h){if(!e.pointsCollinear(o,s,c))return!1;if(e.pointsSame(o,u)||e.pointsSame(s,c))return!1;var f=e.pointsSame(o,c),p=e.pointsSame(s,u);if(f&&p)return n;var d=!f&&e.pointBetween(o,c,u),g=!p&&e.pointBetween(s,c,u);if(f)return g?l(n,s):l(t,u),n;d&&(p||(g?l(n,s):l(t,u)),l(n,o))}else 0===h.alongA&&(-1===h.alongB?l(t,c):0===h.alongB?l(t,h.pt):1===h.alongB&&l(t,u)),0===h.alongB&&(-1===h.alongA?l(n,o):0===h.alongA?l(n,h.pt):1===h.alongA&&l(n,s));return!1}for(var h=[];!i.isEmpty();){var f=i.getHead();if(r&&r.vert(f.pt[0]),f.isStart){r&&r.segmentNew(f.seg,f.primary);var p=c(f),d=p.before?p.before.ev:null,g=p.after?p.after.ev:null;function v(){if(d){var t=u(f,d);if(t)return t}return!!g&&u(f,g)}r&&r.tempStatus(f.seg,!!d&&d.seg,!!g&&g.seg);var m,y,x=v();if(x)t?(y=null===f.seg.myFill.below||f.seg.myFill.above!==f.seg.myFill.below)&&(x.seg.myFill.above=!x.seg.myFill.above):x.seg.otherFill=f.seg.myFill,r&&r.segmentUpdate(x.seg),f.other.remove(),f.remove();if(i.getHead()!==f){r&&r.rewind(f.seg);continue}t?(y=null===f.seg.myFill.below||f.seg.myFill.above!==f.seg.myFill.below,f.seg.myFill.below=g?g.seg.myFill.above:a,f.seg.myFill.above=y?!f.seg.myFill.below:f.seg.myFill.below):null===f.seg.otherFill&&(m=g?f.primary===g.primary?g.seg.otherFill.above:g.seg.myFill.above:f.primary?o:a,f.seg.otherFill={above:m,below:m}),r&&r.status(f.seg,!!d&&d.seg,!!g&&g.seg),f.other.status=p.insert(n.node({ev:f}))}else{var b=f.status;if(null===b)throw new Error("PolyBool: Zero-length segment detected; your epsilon is probably too small or too large");if(s.exists(b.prev)&&s.exists(b.next)&&u(b.prev.ev,b.next.ev),r&&r.statusRemove(b.ev.seg),b.remove(),!f.primary){var _=f.seg.myFill;f.seg.myFill=f.seg.otherFill,f.seg.otherFill=_}h.push(f.seg)}i.getHead().remove()}return r&&r.done(),h}return t?{addRegion:function(t){for(var n,a,i,o=t[t.length-1],l=0;l<t.length;l++){n=o,o=t[l];var c=e.pointsCompare(n,o);0!==c&&s((a=c<0?n:o,i=c<0?o:n,{id:r?r.segmentId():-1,start:a,end:i,myFill:{above:null,below:null},otherFill:null}),!0)}},calculate:function(t){return c(t,!1)}}:{calculate:function(t,e,r,n){return t.forEach(function(t){s(a(t.start,t.end,t),!0)}),r.forEach(function(t){s(a(t.start,t.end,t),!1)}),c(e,n)}}}},{"./linked-list":479}],479:[function(t,e,r){e.exports={create:function(){var t={root:{root:!0,next:null},exists:function(e){return null!==e&&e!==t.root},isEmpty:function(){return null===t.root.next},getHead:function(){return t.root.next},insertBefore:function(e,r){for(var n=t.root,a=t.root.next;null!==a;){if(r(a))return e.prev=a.prev,e.next=a,a.prev.next=e,void(a.prev=e);n=a,a=a.next}n.next=e,e.prev=n,e.next=null},findTransition:function(e){for(var r=t.root,n=t.root.next;null!==n&&!e(n);)r=n,n=n.next;return{before:r===t.root?null:r,after:n,insert:function(t){return t.prev=r,t.next=n,r.next=t,null!==n&&(n.prev=t),t}}}};return t},node:function(t){return t.prev=null,t.next=null,t.remove=function(){t.prev.next=t.next,t.next&&(t.next.prev=t.prev),t.prev=null,t.next=null},t}}},{}],480:[function(t,e,r){e.exports=function(t,e,r){var n=[],a=[];return t.forEach(function(t){var i=t.start,o=t.end;if(e.pointsSame(i,o))console.warn("PolyBool: Warning: Zero-length segment detected; your epsilon is probably too small or too large");else{r&&r.chainStart(t);for(var s={index:0,matches_head:!1,matches_pt1:!1},l={index:0,matches_head:!1,matches_pt1:!1},c=s,u=0;u<n.length;u++){var h=(v=n[u])[0],f=(v[1],v[v.length-1]);if(v[v.length-2],e.pointsSame(h,i)){if(T(u,!0,!0))break}else if(e.pointsSame(h,o)){if(T(u,!0,!1))break}else if(e.pointsSame(f,i)){if(T(u,!1,!0))break}else if(e.pointsSame(f,o)&&T(u,!1,!1))break}if(c===s)return n.push([i,o]),void(r&&r.chainNew(i,o));if(c===l){r&&r.chainMatch(s.index);var p=s.index,d=s.matches_pt1?o:i,g=s.matches_head,v=n[p],m=g?v[0]:v[v.length-1],y=g?v[1]:v[v.length-2],x=g?v[v.length-1]:v[0],b=g?v[v.length-2]:v[1];return e.pointsCollinear(y,m,d)&&(g?(r&&r.chainRemoveHead(s.index,d),v.shift()):(r&&r.chainRemoveTail(s.index,d),v.pop()),m=y),e.pointsSame(x,d)?(n.splice(p,1),e.pointsCollinear(b,x,m)&&(g?(r&&r.chainRemoveTail(s.index,m),v.pop()):(r&&r.chainRemoveHead(s.index,m),v.shift())),r&&r.chainClose(s.index),void a.push(v)):void(g?(r&&r.chainAddHead(s.index,d),v.unshift(d)):(r&&r.chainAddTail(s.index,d),v.push(d)))}var _=s.index,w=l.index;r&&r.chainConnect(_,w);var k=n[_].length<n[w].length;s.matches_head?l.matches_head?k?(M(_),A(_,w)):(M(w),A(w,_)):A(w,_):l.matches_head?A(_,w):k?(M(_),A(w,_)):(M(w),A(_,w))}function T(t,e,r){return c.index=t,c.matches_head=e,c.matches_pt1=r,c===s?(c=l,!1):(c=null,!0)}function M(t){r&&r.chainReverse(t),n[t].reverse()}function A(t,a){var i=n[t],o=n[a],s=i[i.length-1],l=i[i.length-2],c=o[0],u=o[1];e.pointsCollinear(l,s,c)&&(r&&r.chainRemoveTail(t,s),i.pop(),s=l),e.pointsCollinear(s,c,u)&&(r&&r.chainRemoveHead(a,c),o.shift()),r&&r.chainJoin(t,a),n[t]=i.concat(o),n.splice(a,1)}}),a}},{}],481:[function(t,e,r){function n(t,e,r){var n=[];return t.forEach(function(t){var a=(t.myFill.above?8:0)+(t.myFill.below?4:0)+(t.otherFill&&t.otherFill.above?2:0)+(t.otherFill&&t.otherFill.below?1:0);0!==e[a]&&n.push({id:r?r.segmentId():-1,start:t.start,end:t.end,myFill:{above:1===e[a],below:2===e[a]},otherFill:null})}),r&&r.selected(n),n}var a={union:function(t,e){return n(t,[0,2,1,0,2,2,0,0,1,0,1,0,0,0,0,0],e)},intersect:function(t,e){return n(t,[0,0,0,0,0,2,0,2,0,0,1,1,0,2,1,0],e)},difference:function(t,e){return n(t,[0,0,0,0,2,0,2,0,1,1,0,0,0,1,2,0],e)},differenceRev:function(t,e){return n(t,[0,2,1,0,0,0,1,1,0,2,0,2,0,0,0,0],e)},xor:function(t,e){return n(t,[0,2,1,0,2,0,0,1,1,0,0,2,0,1,2,0],e)}};e.exports=a},{}],482:[function(t,e,r){"use strict";var n=new Float64Array(4),a=new Float64Array(4),i=new Float64Array(4);e.exports=function(t,e,r,o,s){n.length<o.length&&(n=new Float64Array(o.length),a=new Float64Array(o.length),i=new Float64Array(o.length));for(var l=0;l<o.length;++l)n[l]=t[l]-o[l],a[l]=e[l]-t[l],i[l]=r[l]-t[l];var c=0,u=0,h=0,f=0,p=0,d=0;for(l=0;l<o.length;++l){var g=a[l],v=i[l],m=n[l];c+=g*g,u+=g*v,h+=v*v,f+=m*g,p+=m*v,d+=m*m}var y,x,b,_,w,k=Math.abs(c*h-u*u),T=u*p-h*f,M=u*f-c*p;if(T+M<=k)if(T<0)M<0&&f<0?(M=0,-f>=c?(T=1,y=c+2*f+d):y=f*(T=-f/c)+d):(T=0,p>=0?(M=0,y=d):-p>=h?(M=1,y=h+2*p+d):y=p*(M=-p/h)+d);else if(M<0)M=0,f>=0?(T=0,y=d):-f>=c?(T=1,y=c+2*f+d):y=f*(T=-f/c)+d;else{var A=1/k;y=(T*=A)*(c*T+u*(M*=A)+2*f)+M*(u*T+h*M+2*p)+d}else T<0?(b=h+p)>(x=u+f)?(_=b-x)>=(w=c-2*u+h)?(T=1,M=0,y=c+2*f+d):y=(T=_/w)*(c*T+u*(M=1-T)+2*f)+M*(u*T+h*M+2*p)+d:(T=0,b<=0?(M=1,y=h+2*p+d):p>=0?(M=0,y=d):y=p*(M=-p/h)+d):M<0?(b=c+f)>(x=u+p)?(_=b-x)>=(w=c-2*u+h)?(M=1,T=0,y=h+2*p+d):y=(T=1-(M=_/w))*(c*T+u*M+2*f)+M*(u*T+h*M+2*p)+d:(M=0,b<=0?(T=1,y=c+2*f+d):f>=0?(T=0,y=d):y=f*(T=-f/c)+d):(_=h+p-u-f)<=0?(T=0,M=1,y=h+2*p+d):_>=(w=c-2*u+h)?(T=1,M=0,y=c+2*f+d):y=(T=_/w)*(c*T+u*(M=1-T)+2*f)+M*(u*T+h*M+2*p)+d;var S=1-T-M;for(l=0;l<o.length;++l)s[l]=S*t[l]+T*e[l]+M*r[l];return y<0?0:y}},{}],483:[function(t,e,r){var n,a,i=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function l(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{a="function"==typeof clearTimeout?clearTimeout:s}catch(t){a=s}}();var c,u=[],h=!1,f=-1;function p(){h&&c&&(h=!1,c.length?u=c.concat(u):f=-1,u.length&&d())}function d(){if(!h){var t=l(p);h=!0;for(var e=u.length;e;){for(c=u,u=[];++f<e;)c&&c[f].run();f=-1,e=u.length}c=null,h=!1,function(t){if(a===clearTimeout)return clearTimeout(t);if((a===s||!a)&&clearTimeout)return a=clearTimeout,clearTimeout(t);try{a(t)}catch(e){try{return a.call(null,t)}catch(e){return a.call(this,t)}}}(t)}}function g(t,e){this.fun=t,this.array=e}function v(){}i.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];u.push(new g(t,e)),1!==u.length||h||l(d)},g.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=v,i.addListener=v,i.once=v,i.off=v,i.removeListener=v,i.removeAllListeners=v,i.emit=v,i.prependListener=v,i.prependOnceListener=v,i.listeners=function(t){return[]},i.binding=function(t){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(t){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},{}],484:[function(t,e,r){e.exports=t("gl-quat/slerp")},{"gl-quat/slerp":296}],485:[function(t,e,r){(function(r){for(var n=t("performance-now"),a="undefined"==typeof window?r:window,i=["moz","webkit"],o="AnimationFrame",s=a["request"+o],l=a["cancel"+o]||a["cancelRequest"+o],c=0;!s&&c<i.length;c++)s=a[i[c]+"Request"+o],l=a[i[c]+"Cancel"+o]||a[i[c]+"CancelRequest"+o];if(!s||!l){var u=0,h=0,f=[];s=function(t){if(0===f.length){var e=n(),r=Math.max(0,1e3/60-(e-u));u=r+e,setTimeout(function(){var t=f.slice(0);f.length=0;for(var e=0;e<t.length;e++)if(!t[e].cancelled)try{t[e].callback(u)}catch(t){setTimeout(function(){throw t},0)}},Math.round(r))}return f.push({handle:++h,callback:t,cancelled:!1}),h},l=function(t){for(var e=0;e<f.length;e++)f[e].handle===t&&(f[e].cancelled=!0)}}e.exports=function(t){return s.call(a,t)},e.exports.cancel=function(){l.apply(a,arguments)},e.exports.polyfill=function(t){t||(t=a),t.requestAnimationFrame=s,t.cancelAnimationFrame=l}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"performance-now":463}],486:[function(t,e,r){"use strict";var n=t("big-rat/add");e.exports=function(t,e){for(var r=t.length,a=new Array(r),i=0;i<r;++i)a[i]=n(t[i],e[i]);return a}},{"big-rat/add":77}],487:[function(t,e,r){"use strict";e.exports=function(t){for(var e=new Array(t.length),r=0;r<t.length;++r)e[r]=n(t[r]);return e};var n=t("big-rat")},{"big-rat":80}],488:[function(t,e,r){"use strict";var n=t("big-rat"),a=t("big-rat/mul");e.exports=function(t,e){for(var r=n(e),i=t.length,o=new Array(i),s=0;s<i;++s)o[s]=a(t[s],r);return o}},{"big-rat":80,"big-rat/mul":89}],489:[function(t,e,r){"use strict";var n=t("big-rat/sub");e.exports=function(t,e){for(var r=t.length,a=new Array(r),i=0;i<r;++i)a[i]=n(t[i],e[i]);return a}},{"big-rat/sub":91}],490:[function(t,e,r){"use strict";var n=t("compare-cell"),a=t("compare-oriented-cell"),i=t("cell-orientation");e.exports=function(t){t.sort(a);for(var e=t.length,r=0,o=0;o<e;++o){var s=t[o],l=i(s);if(0!==l){if(r>0){var c=t[r-1];if(0===n(s,c)&&i(c)!==l){r-=1;continue}}t[r++]=s}}return t.length=r,t}},{"cell-orientation":114,"compare-cell":130,"compare-oriented-cell":131}],491:[function(t,e,r){"use strict";var n=t("array-bounds"),a=t("color-normalize"),i=t("update-diff"),o=t("pick-by-alias"),s=t("object-assign"),l=t("flatten-vertex-data"),c=t("to-float32"),u=c.float32,h=c.fract32;e.exports=function(t,e){"function"==typeof t?(e||(e={}),e.regl=t):e=t;e.length&&(e.positions=e);if(!(t=e.regl).hasExtension("ANGLE_instanced_arrays"))throw Error("regl-error2d: `ANGLE_instanced_arrays` extension should be enabled");var r,c,p,d,g,v,m=t._gl,y={color:"black",capSize:5,lineWidth:1,opacity:1,viewport:null,range:null,offset:0,count:0,bounds:null,positions:[],errors:[]},x=[];return d=t.buffer({usage:"dynamic",type:"uint8",data:new Uint8Array(0)}),c=t.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)}),p=t.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)}),g=t.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)}),v=t.buffer({usage:"static",type:"float",data:f}),k(e),r=t({vert:"\n\t\tprecision highp float;\n\n\t\tattribute vec2 position, positionFract;\n\t\tattribute vec4 error;\n\t\tattribute vec4 color;\n\n\t\tattribute vec2 direction, lineOffset, capOffset;\n\n\t\tuniform vec4 viewport;\n\t\tuniform float lineWidth, capSize;\n\t\tuniform vec2 scale, scaleFract, translate, translateFract;\n\n\t\tvarying vec4 fragColor;\n\n\t\tvoid main() {\n\t\t\tfragColor = color / 255.;\n\n\t\t\tvec2 pixelOffset = lineWidth * lineOffset + (capSize + lineWidth) * capOffset;\n\n\t\t\tvec2 dxy = -step(.5, direction.xy) * error.xz + step(direction.xy, vec2(-.5)) * error.yw;\n\n\t\t\tvec2 position = position + dxy;\n\n\t\t\tvec2 pos = (position + translate) * scale\n\t\t\t\t+ (positionFract + translateFract) * scale\n\t\t\t\t+ (position + translate) * scaleFract\n\t\t\t\t+ (positionFract + translateFract) * scaleFract;\n\n\t\t\tpos += pixelOffset / viewport.zw;\n\n\t\t\tgl_Position = vec4(pos * 2. - 1., 0, 1);\n\t\t}\n\t\t",frag:"\n\t\tprecision highp float;\n\n\t\tvarying vec4 fragColor;\n\n\t\tuniform float opacity;\n\n\t\tvoid main() {\n\t\t\tgl_FragColor = fragColor;\n\t\t\tgl_FragColor.a *= opacity;\n\t\t}\n\t\t",uniforms:{range:t.prop("range"),lineWidth:t.prop("lineWidth"),capSize:t.prop("capSize"),opacity:t.prop("opacity"),scale:t.prop("scale"),translate:t.prop("translate"),scaleFract:t.prop("scaleFract"),translateFract:t.prop("translateFract"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{color:{buffer:d,offset:function(t,e){return 4*e.offset},divisor:1},position:{buffer:c,offset:function(t,e){return 8*e.offset},divisor:1},positionFract:{buffer:p,offset:function(t,e){return 8*e.offset},divisor:1},error:{buffer:g,offset:function(t,e){return 16*e.offset},divisor:1},direction:{buffer:v,stride:24,offset:0},lineOffset:{buffer:v,stride:24,offset:8},capOffset:{buffer:v,stride:24,offset:16}},primitive:"triangles",blend:{enable:!0,color:[0,0,0,0],equation:{rgb:"add",alpha:"add"},func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},depth:{enable:!1},scissor:{enable:!0,box:t.prop("viewport")},viewport:t.prop("viewport"),stencil:!1,instances:t.prop("count"),count:f.length}),s(b,{update:k,draw:_,destroy:T,regl:t,gl:m,canvas:m.canvas,groups:x}),b;function b(t){t?k(t):null===t&&T(),_()}function _(e){if("number"==typeof e)return w(e);e&&!Array.isArray(e)&&(e=[e]),t._refresh(),x.forEach(function(t,r){t&&(e&&(e[r]?t.draw=!0:t.draw=!1),t.draw?w(r):t.draw=!0)})}function w(t){"number"==typeof t&&(t=x[t]),null!=t&&t&&t.count&&t.color&&t.opacity&&t.positions&&t.positions.length>1&&(t.scaleRatio=[t.scale[0]*t.viewport.width,t.scale[1]*t.viewport.height],r(t),t.after&&t.after(t))}function k(t){if(t){null!=t.length?"number"==typeof t[0]&&(t=[{positions:t}]):Array.isArray(t)||(t=[t]);var e=0,r=0;if(b.groups=x=t.map(function(t,c){var u=x[c];return t?("function"==typeof t?t={after:t}:"number"==typeof t[0]&&(t={positions:t}),t=o(t,{color:"color colors fill",capSize:"capSize cap capsize cap-size",lineWidth:"lineWidth line-width width line thickness",opacity:"opacity alpha",range:"range dataBox",viewport:"viewport viewBox",errors:"errors error",positions:"positions position data points"}),u||(x[c]=u={id:c,scale:null,translate:null,scaleFract:null,translateFract:null,draw:!0},t=s({},y,t)),i(u,t,[{lineWidth:function(t){return.5*+t},capSize:function(t){return.5*+t},opacity:parseFloat,errors:function(t){return t=l(t),r+=t.length,t},positions:function(t,r){return t=l(t,"float64"),r.count=Math.floor(t.length/2),r.bounds=n(t,2),r.offset=e,e+=r.count,t}},{color:function(t,e){var r=e.count;if(t||(t="transparent"),!Array.isArray(t)||"number"==typeof t[0]){var n=t;t=Array(r);for(var i=0;i<r;i++)t[i]=n}if(t.length<r)throw Error("Not enough colors");for(var o=new Uint8Array(4*r),s=0;s<r;s++){var l=a(t[s],"uint8");o.set(l,4*s)}return o},range:function(t,e,r){var n=e.bounds;return t||(t=n),e.scale=[1/(t[2]-t[0]),1/(t[3]-t[1])],e.translate=[-t[0],-t[1]],e.scaleFract=h(e.scale),e.translateFract=h(e.translate),t},viewport:function(t){var e;return Array.isArray(t)?e={x:t[0],y:t[1],width:t[2]-t[0],height:t[3]-t[1]}:t?(e={x:t.x||t.left||0,y:t.y||t.top||0},t.right?e.width=t.right-e.x:e.width=t.w||t.width||0,t.bottom?e.height=t.bottom-e.y:e.height=t.h||t.height||0):e={x:0,y:0,width:m.drawingBufferWidth,height:m.drawingBufferHeight},e}}]),u):u}),e||r){var f=x.reduce(function(t,e,r){return t+(e?e.count:0)},0),v=new Float64Array(2*f),_=new Uint8Array(4*f),w=new Float32Array(4*f);x.forEach(function(t,e){if(t){var r=t.positions,n=t.count,a=t.offset,i=t.color,o=t.errors;n&&(_.set(i,4*a),w.set(o,4*a),v.set(r,2*a))}}),c(u(v)),p(h(v)),d(_),g(w)}}}function T(){c.destroy(),p.destroy(),d.destroy(),g.destroy(),v.destroy()}};var f=[[1,0,0,1,0,0],[1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,1,0,0],[1,0,0,1,0,0],[1,0,-1,0,0,1],[1,0,-1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,1],[1,0,-1,0,0,1],[-1,0,-1,0,0,1],[-1,0,-1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,1],[-1,0,-1,0,0,1],[0,1,1,0,0,0],[0,1,-1,0,0,0],[0,-1,-1,0,0,0],[0,-1,-1,0,0,0],[0,1,1,0,0,0],[0,-1,1,0,0,0],[0,1,0,-1,1,0],[0,1,0,-1,-1,0],[0,1,0,1,-1,0],[0,1,0,1,1,0],[0,1,0,-1,1,0],[0,1,0,1,-1,0],[0,-1,0,-1,1,0],[0,-1,0,-1,-1,0],[0,-1,0,1,-1,0],[0,-1,0,1,1,0],[0,-1,0,-1,1,0],[0,-1,0,1,-1,0]]},{"array-bounds":68,"color-normalize":122,"flatten-vertex-data":230,"object-assign":455,"pick-by-alias":466,"to-float32":536,"update-diff":547}],492:[function(t,e,r){"use strict";var n=t("color-normalize"),a=t("array-bounds"),i=t("object-assign"),o=t("glslify"),s=t("pick-by-alias"),l=t("flatten-vertex-data"),c=t("earcut"),u=t("array-normalize"),h=t("to-float32"),f=h.float32,p=h.fract32,d=t("es6-weak-map"),g=t("parse-rect");function v(t,e){if(!(this instanceof v))return new v(t,e);if("function"==typeof t?(e||(e={}),e.regl=t):e=t,e.length&&(e.positions=e),!(t=e.regl).hasExtension("ANGLE_instanced_arrays"))throw Error("regl-error2d: `ANGLE_instanced_arrays` extension should be enabled");this.gl=t._gl,this.regl=t,this.passes=[],this.shaders=v.shaders.has(t)?v.shaders.get(t):v.shaders.set(t,v.createShaders(t)).get(t),this.update(e)}e.exports=v,v.dashMult=2,v.maxPatternLength=256,v.precisionThreshold=3e6,v.maxPoints=1e4,v.maxLines=2048,v.shaders=new d,v.createShaders=function(t){var e,r=t.buffer({usage:"static",type:"float",data:[0,1,0,0,1,1,1,0]}),n={primitive:"triangle strip",instances:t.prop("count"),count:4,offset:0,uniforms:{miterMode:function(t,e){return"round"===e.join?2:1},miterLimit:t.prop("miterLimit"),scale:t.prop("scale"),scaleFract:t.prop("scaleFract"),translateFract:t.prop("translateFract"),translate:t.prop("translate"),thickness:t.prop("thickness"),dashPattern:t.prop("dashTexture"),opacity:t.prop("opacity"),pixelRatio:t.context("pixelRatio"),id:t.prop("id"),dashSize:t.prop("dashLength"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]},depth:t.prop("depth")},blend:{enable:!0,color:[0,0,0,0],equation:{rgb:"add",alpha:"add"},func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},depth:{enable:function(t,e){return!e.overlay}},stencil:{enable:!1},scissor:{enable:!0,box:t.prop("viewport")},viewport:t.prop("viewport")},a=t(i({vert:o(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 aCoord, bCoord, aCoordFract, bCoordFract;\nattribute vec4 color;\nattribute float lineEnd, lineTop;\n\nuniform vec2 scale, scaleFract, translate, translateFract;\nuniform float thickness, pixelRatio, id, depth;\nuniform vec4 viewport;\n\nvarying vec4 fragColor;\nvarying vec2 tangent;\n\nvec2 project(vec2 position, vec2 positionFract, vec2 scale, vec2 scaleFract, vec2 translate, vec2 translateFract) {\n\t// the order is important\n\treturn position * scale + translate\n + positionFract * scale + translateFract\n + position * scaleFract\n + positionFract * scaleFract;\n}\n\nvoid main() {\n\tfloat lineStart = 1. - lineEnd;\n\tfloat lineOffset = lineTop * 2. - 1.;\n\n\tvec2 diff = (bCoord + bCoordFract - aCoord - aCoordFract);\n\ttangent = normalize(diff * scale * viewport.zw);\n\tvec2 normal = vec2(-tangent.y, tangent.x);\n\n\tvec2 position = project(aCoord, aCoordFract, scale, scaleFract, translate, translateFract) * lineStart\n\t\t+ project(bCoord, bCoordFract, scale, scaleFract, translate, translateFract) * lineEnd\n\n\t\t+ thickness * normal * .5 * lineOffset / viewport.zw;\n\n\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\n\n\tfragColor = color / 255.;\n}\n"]),frag:o(["precision highp float;\n#define GLSLIFY 1\n\nuniform sampler2D dashPattern;\n\nuniform float dashSize, pixelRatio, thickness, opacity, id;\n\nvarying vec4 fragColor;\nvarying vec2 tangent;\n\nvoid main() {\n\tfloat alpha = 1.;\n\n\tfloat t = fract(dot(tangent, gl_FragCoord.xy) / dashSize) * .5 + .25;\n\tfloat dash = texture2D(dashPattern, vec2(t, .5)).r;\n\n\tgl_FragColor = fragColor;\n\tgl_FragColor.a *= alpha * opacity * dash;\n}\n"]),attributes:{lineEnd:{buffer:r,divisor:0,stride:8,offset:0},lineTop:{buffer:r,divisor:0,stride:8,offset:4},aCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:16,divisor:1},aCoordFract:{buffer:t.prop("positionFractBuffer"),stride:8,offset:8,divisor:1},bCoordFract:{buffer:t.prop("positionFractBuffer"),stride:8,offset:16,divisor:1},color:{buffer:t.prop("colorBuffer"),stride:4,offset:0,divisor:1}}},n));try{e=t(i({cull:{enable:!0,face:"back"},vert:o(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 aCoord, bCoord, nextCoord, prevCoord;\nattribute vec4 aColor, bColor;\nattribute float lineEnd, lineTop;\n\nuniform vec2 scale, translate;\nuniform float thickness, pixelRatio, id, depth;\nuniform vec4 viewport;\nuniform float miterLimit, miterMode;\n\nvarying vec4 fragColor;\nvarying vec4 startCutoff, endCutoff;\nvarying vec2 tangent;\nvarying vec2 startCoord, endCoord;\nvarying float enableStartMiter, enableEndMiter;\n\nconst float REVERSE_THRESHOLD = -.875;\nconst float MIN_DIFF = 1e-6;\n\n// TODO: possible optimizations: avoid overcalculating all for vertices and calc just one instead\n// TODO: precalculate dot products, normalize things beforehead etc.\n// TODO: refactor to rectangular algorithm\n\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\n\tvec2 diff = b - a;\n\tvec2 perp = normalize(vec2(-diff.y, diff.x));\n\treturn dot(p - a, perp);\n}\n\nbool isNaN( float val ){\n return ( val < 0.0 || 0.0 < val || val == 0.0 ) ? false : true;\n}\n\nvoid main() {\n\tvec2 aCoord = aCoord, bCoord = bCoord, prevCoord = prevCoord, nextCoord = nextCoord;\n\n vec2 adjustedScale;\n adjustedScale.x = (abs(scale.x) < MIN_DIFF) ? MIN_DIFF : scale.x;\n adjustedScale.y = (abs(scale.y) < MIN_DIFF) ? MIN_DIFF : scale.y;\n\n vec2 scaleRatio = adjustedScale * viewport.zw;\n\tvec2 normalWidth = thickness / scaleRatio;\n\n\tfloat lineStart = 1. - lineEnd;\n\tfloat lineBot = 1. - lineTop;\n\n\tfragColor = (lineStart * aColor + lineEnd * bColor) / 255.;\n\n\tif (isNaN(aCoord.x) || isNaN(aCoord.y) || isNaN(bCoord.x) || isNaN(bCoord.y)) return;\n\n\tif (aCoord == prevCoord) prevCoord = aCoord + normalize(bCoord - aCoord);\n\tif (bCoord == nextCoord) nextCoord = bCoord - normalize(bCoord - aCoord);\n\n\tvec2 prevDiff = aCoord - prevCoord;\n\tvec2 currDiff = bCoord - aCoord;\n\tvec2 nextDiff = nextCoord - bCoord;\n\n\tvec2 prevTangent = normalize(prevDiff * scaleRatio);\n\tvec2 currTangent = normalize(currDiff * scaleRatio);\n\tvec2 nextTangent = normalize(nextDiff * scaleRatio);\n\n\tvec2 prevNormal = vec2(-prevTangent.y, prevTangent.x);\n\tvec2 currNormal = vec2(-currTangent.y, currTangent.x);\n\tvec2 nextNormal = vec2(-nextTangent.y, nextTangent.x);\n\n\tvec2 startJoinDirection = normalize(prevTangent - currTangent);\n\tvec2 endJoinDirection = normalize(currTangent - nextTangent);\n\n\t// collapsed/unidirectional segment cases\n\t// FIXME: there should be more elegant solution\n\tvec2 prevTanDiff = abs(prevTangent - currTangent);\n\tvec2 nextTanDiff = abs(nextTangent - currTangent);\n\tif (max(prevTanDiff.x, prevTanDiff.y) < MIN_DIFF) {\n\t\tstartJoinDirection = currNormal;\n\t}\n\tif (max(nextTanDiff.x, nextTanDiff.y) < MIN_DIFF) {\n\t\tendJoinDirection = currNormal;\n\t}\n\tif (aCoord == bCoord) {\n\t\tendJoinDirection = startJoinDirection;\n\t\tcurrNormal = prevNormal;\n\t\tcurrTangent = prevTangent;\n\t}\n\n\ttangent = currTangent;\n\n\t//calculate join shifts relative to normals\n\tfloat startJoinShift = dot(currNormal, startJoinDirection);\n\tfloat endJoinShift = dot(currNormal, endJoinDirection);\n\n\tfloat startMiterRatio = abs(1. / startJoinShift);\n\tfloat endMiterRatio = abs(1. / endJoinShift);\n\n\tvec2 startJoin = startJoinDirection * startMiterRatio;\n\tvec2 endJoin = endJoinDirection * endMiterRatio;\n\n\tvec2 startTopJoin, startBotJoin, endTopJoin, endBotJoin;\n\tstartTopJoin = sign(startJoinShift) * startJoin * .5;\n\tstartBotJoin = -startTopJoin;\n\n\tendTopJoin = sign(endJoinShift) * endJoin * .5;\n\tendBotJoin = -endTopJoin;\n\n\tvec2 aTopCoord = aCoord + normalWidth * startTopJoin;\n\tvec2 bTopCoord = bCoord + normalWidth * endTopJoin;\n\tvec2 aBotCoord = aCoord + normalWidth * startBotJoin;\n\tvec2 bBotCoord = bCoord + normalWidth * endBotJoin;\n\n\t//miter anti-clipping\n\tfloat baClipping = distToLine(bCoord, aCoord, aBotCoord) / dot(normalize(normalWidth * endBotJoin), normalize(normalWidth.yx * vec2(-startBotJoin.y, startBotJoin.x)));\n\tfloat abClipping = distToLine(aCoord, bCoord, bTopCoord) / dot(normalize(normalWidth * startBotJoin), normalize(normalWidth.yx * vec2(-endBotJoin.y, endBotJoin.x)));\n\n\t//prevent close to reverse direction switch\n\tbool prevReverse = dot(currTangent, prevTangent) <= REVERSE_THRESHOLD && abs(dot(currTangent, prevNormal)) * min(length(prevDiff), length(currDiff)) < length(normalWidth * currNormal);\n\tbool nextReverse = dot(currTangent, nextTangent) <= REVERSE_THRESHOLD && abs(dot(currTangent, nextNormal)) * min(length(nextDiff), length(currDiff)) < length(normalWidth * currNormal);\n\n\tif (prevReverse) {\n\t\t//make join rectangular\n\t\tvec2 miterShift = normalWidth * startJoinDirection * miterLimit * .5;\n\t\tfloat normalAdjust = 1. - min(miterLimit / startMiterRatio, 1.);\n\t\taBotCoord = aCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\n\t\taTopCoord = aCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\n\t}\n\telse if (!nextReverse && baClipping > 0. && baClipping < length(normalWidth * endBotJoin)) {\n\t\t//handle miter clipping\n\t\tbTopCoord -= normalWidth * endTopJoin;\n\t\tbTopCoord += normalize(endTopJoin * normalWidth) * baClipping;\n\t}\n\n\tif (nextReverse) {\n\t\t//make join rectangular\n\t\tvec2 miterShift = normalWidth * endJoinDirection * miterLimit * .5;\n\t\tfloat normalAdjust = 1. - min(miterLimit / endMiterRatio, 1.);\n\t\tbBotCoord = bCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\n\t\tbTopCoord = bCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\n\t}\n\telse if (!prevReverse && abClipping > 0. && abClipping < length(normalWidth * startBotJoin)) {\n\t\t//handle miter clipping\n\t\taBotCoord -= normalWidth * startBotJoin;\n\t\taBotCoord += normalize(startBotJoin * normalWidth) * abClipping;\n\t}\n\n\tvec2 aTopPosition = (aTopCoord) * adjustedScale + translate;\n\tvec2 aBotPosition = (aBotCoord) * adjustedScale + translate;\n\n\tvec2 bTopPosition = (bTopCoord) * adjustedScale + translate;\n\tvec2 bBotPosition = (bBotCoord) * adjustedScale + translate;\n\n\t//position is normalized 0..1 coord on the screen\n\tvec2 position = (aTopPosition * lineTop + aBotPosition * lineBot) * lineStart + (bTopPosition * lineTop + bBotPosition * lineBot) * lineEnd;\n\n\tstartCoord = aCoord * scaleRatio + translate * viewport.zw + viewport.xy;\n\tendCoord = bCoord * scaleRatio + translate * viewport.zw + viewport.xy;\n\n\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\n\n\tenableStartMiter = step(dot(currTangent, prevTangent), .5);\n\tenableEndMiter = step(dot(currTangent, nextTangent), .5);\n\n\t//bevel miter cutoffs\n\tif (miterMode == 1.) {\n\t\tif (enableStartMiter == 1.) {\n\t\t\tvec2 startMiterWidth = vec2(startJoinDirection) * thickness * miterLimit * .5;\n\t\t\tstartCutoff = vec4(aCoord, aCoord);\n\t\t\tstartCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\n\t\t\tstartCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\n\t\t\tstartCutoff += viewport.xyxy;\n\t\t\tstartCutoff += startMiterWidth.xyxy;\n\t\t}\n\n\t\tif (enableEndMiter == 1.) {\n\t\t\tvec2 endMiterWidth = vec2(endJoinDirection) * thickness * miterLimit * .5;\n\t\t\tendCutoff = vec4(bCoord, bCoord);\n\t\t\tendCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x) / scaleRatio;\n\t\t\tendCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\n\t\t\tendCutoff += viewport.xyxy;\n\t\t\tendCutoff += endMiterWidth.xyxy;\n\t\t}\n\t}\n\n\t//round miter cutoffs\n\telse if (miterMode == 2.) {\n\t\tif (enableStartMiter == 1.) {\n\t\t\tvec2 startMiterWidth = vec2(startJoinDirection) * thickness * abs(dot(startJoinDirection, currNormal)) * .5;\n\t\t\tstartCutoff = vec4(aCoord, aCoord);\n\t\t\tstartCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\n\t\t\tstartCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\n\t\t\tstartCutoff += viewport.xyxy;\n\t\t\tstartCutoff += startMiterWidth.xyxy;\n\t\t}\n\n\t\tif (enableEndMiter == 1.) {\n\t\t\tvec2 endMiterWidth = vec2(endJoinDirection) * thickness * abs(dot(endJoinDirection, currNormal)) * .5;\n\t\t\tendCutoff = vec4(bCoord, bCoord);\n\t\t\tendCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x) / scaleRatio;\n\t\t\tendCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\n\t\t\tendCutoff += viewport.xyxy;\n\t\t\tendCutoff += endMiterWidth.xyxy;\n\t\t}\n\t}\n}\n"]),frag:o(["precision highp float;\n#define GLSLIFY 1\n\nuniform sampler2D dashPattern;\nuniform float dashSize, pixelRatio, thickness, opacity, id, miterMode;\n\nvarying vec4 fragColor;\nvarying vec2 tangent;\nvarying vec4 startCutoff, endCutoff;\nvarying vec2 startCoord, endCoord;\nvarying float enableStartMiter, enableEndMiter;\n\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\n\tvec2 diff = b - a;\n\tvec2 perp = normalize(vec2(-diff.y, diff.x));\n\treturn dot(p - a, perp);\n}\n\nvoid main() {\n\tfloat alpha = 1., distToStart, distToEnd;\n\tfloat cutoff = thickness * .5;\n\n\t//bevel miter\n\tif (miterMode == 1.) {\n\t\tif (enableStartMiter == 1.) {\n\t\t\tdistToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\n\t\t\tif (distToStart < -1.) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\talpha *= min(max(distToStart + 1., 0.), 1.);\n\t\t}\n\n\t\tif (enableEndMiter == 1.) {\n\t\t\tdistToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\n\t\t\tif (distToEnd < -1.) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\talpha *= min(max(distToEnd + 1., 0.), 1.);\n\t\t}\n\t}\n\n\t// round miter\n\telse if (miterMode == 2.) {\n\t\tif (enableStartMiter == 1.) {\n\t\t\tdistToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\n\t\t\tif (distToStart < 0.) {\n\t\t\t\tfloat radius = length(gl_FragCoord.xy - startCoord);\n\n\t\t\t\tif(radius > cutoff + .5) {\n\t\t\t\t\tdiscard;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\talpha -= smoothstep(cutoff - .5, cutoff + .5, radius);\n\t\t\t}\n\t\t}\n\n\t\tif (enableEndMiter == 1.) {\n\t\t\tdistToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\n\t\t\tif (distToEnd < 0.) {\n\t\t\t\tfloat radius = length(gl_FragCoord.xy - endCoord);\n\n\t\t\t\tif(radius > cutoff + .5) {\n\t\t\t\t\tdiscard;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\talpha -= smoothstep(cutoff - .5, cutoff + .5, radius);\n\t\t\t}\n\t\t}\n\t}\n\n\tfloat t = fract(dot(tangent, gl_FragCoord.xy) / dashSize) * .5 + .25;\n\tfloat dash = texture2D(dashPattern, vec2(t, .5)).r;\n\n\tgl_FragColor = fragColor;\n\tgl_FragColor.a *= alpha * opacity * dash;\n}\n"]),attributes:{lineEnd:{buffer:r,divisor:0,stride:8,offset:0},lineTop:{buffer:r,divisor:0,stride:8,offset:4},aColor:{buffer:t.prop("colorBuffer"),stride:4,offset:0,divisor:1},bColor:{buffer:t.prop("colorBuffer"),stride:4,offset:4,divisor:1},prevCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:0,divisor:1},aCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:16,divisor:1},nextCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:24,divisor:1}}},n))}catch(t){e=a}return{fill:t({primitive:"triangle",elements:function(t,e){return e.triangles},offset:0,vert:o(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 position, positionFract;\n\nuniform vec4 color;\nuniform vec2 scale, scaleFract, translate, translateFract;\nuniform float pixelRatio, id;\nuniform vec4 viewport;\nuniform float opacity;\n\nvarying vec4 fragColor;\n\nconst float MAX_LINES = 256.;\n\nvoid main() {\n\tfloat depth = (MAX_LINES - 4. - id) / (MAX_LINES);\n\n\tvec2 position = position * scale + translate\n + positionFract * scale + translateFract\n + position * scaleFract\n + positionFract * scaleFract;\n\n\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\n\n\tfragColor = color / 255.;\n\tfragColor.a *= opacity;\n}\n"]),frag:o(["precision highp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor;\n\nvoid main() {\n\tgl_FragColor = fragColor;\n}\n"]),uniforms:{scale:t.prop("scale"),color:t.prop("fill"),scaleFract:t.prop("scaleFract"),translateFract:t.prop("translateFract"),translate:t.prop("translate"),opacity:t.prop("opacity"),pixelRatio:t.context("pixelRatio"),id:t.prop("id"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{position:{buffer:t.prop("positionBuffer"),stride:8,offset:8},positionFract:{buffer:t.prop("positionFractBuffer"),stride:8,offset:8}},blend:n.blend,depth:{enable:!1},scissor:n.scissor,stencil:n.stencil,viewport:n.viewport}),rect:a,miter:e}},v.defaults={dashes:null,join:"miter",miterLimit:1,thickness:10,cap:"square",color:"black",opacity:1,overlay:!1,viewport:null,range:null,close:!1,fill:null},v.prototype.render=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];e.length&&(t=this).update.apply(t,e),this.draw()},v.prototype.draw=function(){for(var t=this,e=[],r=arguments.length;r--;)e[r]=arguments[r];return(e.length?e:this.passes).forEach(function(e,r){var n;if(e&&Array.isArray(e))return(n=t).draw.apply(n,e);"number"==typeof e&&(e=t.passes[e]),e&&e.count>1&&e.opacity&&(t.regl._refresh(),e.fill&&e.triangles&&e.triangles.length>2&&t.shaders.fill(e),e.thickness&&(e.scale[0]*e.viewport.width>v.precisionThreshold||e.scale[1]*e.viewport.height>v.precisionThreshold?t.shaders.rect(e):"rect"===e.join||!e.join&&(e.thickness<=2||e.count>=v.maxPoints)?t.shaders.rect(e):t.shaders.miter(e)))}),this},v.prototype.update=function(t){var e=this;if(t){null!=t.length?"number"==typeof t[0]&&(t=[{positions:t}]):Array.isArray(t)||(t=[t]);var r=this.regl,o=this.gl;if(t.forEach(function(t,h){var d=e.passes[h];if(void 0!==t)if(null!==t){if("number"==typeof t[0]&&(t={positions:t}),t=s(t,{positions:"positions points data coords",thickness:"thickness lineWidth lineWidths line-width linewidth width stroke-width strokewidth strokeWidth",join:"lineJoin linejoin join type mode",miterLimit:"miterlimit miterLimit",dashes:"dash dashes dasharray dash-array dashArray",color:"color colour stroke colors colours stroke-color strokeColor",fill:"fill fill-color fillColor",opacity:"alpha opacity",overlay:"overlay crease overlap intersect",close:"closed close closed-path closePath",range:"range dataBox",viewport:"viewport viewBox",hole:"holes hole hollow"}),d||(e.passes[h]=d={id:h,scale:null,scaleFract:null,translate:null,translateFract:null,count:0,hole:[],depth:0,dashLength:1,dashTexture:r.texture({channels:1,data:new Uint8Array([255]),width:1,height:1,mag:"linear",min:"linear"}),colorBuffer:r.buffer({usage:"dynamic",type:"uint8",data:new Uint8Array}),positionBuffer:r.buffer({usage:"dynamic",type:"float",data:new Uint8Array}),positionFractBuffer:r.buffer({usage:"dynamic",type:"float",data:new Uint8Array})},t=i({},v.defaults,t)),null!=t.thickness&&(d.thickness=parseFloat(t.thickness)),null!=t.opacity&&(d.opacity=parseFloat(t.opacity)),null!=t.miterLimit&&(d.miterLimit=parseFloat(t.miterLimit)),null!=t.overlay&&(d.overlay=!!t.overlay,h<v.maxLines&&(d.depth=2*(v.maxLines-1-h%v.maxLines)/v.maxLines-1)),null!=t.join&&(d.join=t.join),null!=t.hole&&(d.hole=t.hole),null!=t.fill&&(d.fill=t.fill?n(t.fill,"uint8"):null),null!=t.viewport&&(d.viewport=g(t.viewport)),d.viewport||(d.viewport=g([o.drawingBufferWidth,o.drawingBufferHeight])),null!=t.close&&(d.close=t.close),null===t.positions&&(t.positions=[]),t.positions){var m,y;if(t.positions.x&&t.positions.y){var x=t.positions.x,b=t.positions.y;y=d.count=Math.max(x.length,b.length),m=new Float64Array(2*y);for(var _=0;_<y;_++)m[2*_]=x[_],m[2*_+1]=b[_]}else m=l(t.positions,"float64"),y=d.count=Math.floor(m.length/2);var w=d.bounds=a(m,2);if(d.fill){for(var k=[],T={},M=0,A=0,S=0,E=d.count;A<E;A++){var L=m[2*A],C=m[2*A+1];isNaN(L)||isNaN(C)||null==L||null==C?(L=m[2*M],C=m[2*M+1],T[A]=M):M=A,k[S++]=L,k[S++]=C}for(var P=c(k,d.hole||[]),O=0,z=P.length;O<z;O++)null!=T[P[O]]&&(P[O]=T[P[O]]);d.triangles=P}var I=new Float64Array(m);u(I,2,w);var D=new Float64Array(2*y+6);d.close?m[0]===m[2*y-2]&&m[1]===m[2*y-1]?(D[0]=I[2*y-4],D[1]=I[2*y-3]):(D[0]=I[2*y-2],D[1]=I[2*y-1]):(D[0]=I[0],D[1]=I[1]),D.set(I,2),d.close?m[0]===m[2*y-2]&&m[1]===m[2*y-1]?(D[2*y+2]=I[2],D[2*y+3]=I[3],d.count-=1):(D[2*y+2]=I[0],D[2*y+3]=I[1],D[2*y+4]=I[2],D[2*y+5]=I[3]):(D[2*y+2]=I[2*y-2],D[2*y+3]=I[2*y-1],D[2*y+4]=I[2*y-2],D[2*y+5]=I[2*y-1]),d.positionBuffer(f(D)),d.positionFractBuffer(p(D))}if(t.range?d.range=t.range:d.range||(d.range=d.bounds),(t.range||t.positions)&&d.count){var R=d.bounds,F=R[2]-R[0],B=R[3]-R[1],N=d.range[2]-d.range[0],j=d.range[3]-d.range[1];d.scale=[F/N,B/j],d.translate=[-d.range[0]/N+R[0]/N||0,-d.range[1]/j+R[1]/j||0],d.scaleFract=p(d.scale),d.translateFract=p(d.translate)}if(t.dashes){var V,U=0;if(!t.dashes||t.dashes.length<2)U=1,V=new Uint8Array([255,255,255,255,255,255,255,255]);else{U=0;for(var q=0;q<t.dashes.length;++q)U+=t.dashes[q];V=new Uint8Array(U*v.dashMult);for(var H=0,G=255,Y=0;Y<2;Y++)for(var W=0;W<t.dashes.length;++W){for(var X=0,Z=t.dashes[W]*v.dashMult*.5;X<Z;++X)V[H++]=G;G^=255}}d.dashLength=U,d.dashTexture({channels:1,data:V,width:V.length,height:1,mag:"linear",min:"linear"},0,0)}if(t.color){var J=d.count,K=t.color;K||(K="transparent");var Q=new Uint8Array(4*J+4);if(Array.isArray(K)&&"number"!=typeof K[0]){for(var $=0;$<J;$++){var tt=n(K[$],"uint8");Q.set(tt,4*$)}Q.set(n(K[0],"uint8"),4*J)}else for(var et=n(K,"uint8"),rt=0;rt<J+1;rt++)Q.set(et,4*rt);d.colorBuffer({usage:"dynamic",type:"uint8",data:Q})}}else e.passes[h]=null}),t.length<this.passes.length){for(var h=t.length;h<this.passes.length;h++){var d=e.passes[h];d&&(d.colorBuffer.destroy(),d.positionBuffer.destroy(),d.dashTexture.destroy())}this.passes.length=t.length}for(var m=[],y=0;y<this.passes.length;y++)null!==e.passes[y]&&m.push(e.passes[y]);return this.passes=m,this}},v.prototype.destroy=function(){return this.passes.forEach(function(t){t.colorBuffer.destroy(),t.positionBuffer.destroy(),t.dashTexture.destroy()}),this.passes.length=0,this}},{"array-bounds":68,"array-normalize":493,"color-normalize":122,earcut:173,"es6-weak-map":494,"flatten-vertex-data":230,glslify:410,"object-assign":455,"parse-rect":460,"pick-by-alias":466,"to-float32":536}],493:[function(t,e,r){"use strict";var n=t("array-bounds");e.exports=function(t,e,r){if(!t||null==t.length)throw Error("Argument should be an array");null==e&&(e=1);null==r&&(r=n(t,e));for(var a=0;a<e;a++){var i=r[e+a],o=r[a],s=a,l=t.length;if(i===1/0&&o===-1/0)for(s=a;s<l;s+=e)t[s]=t[s]===i?1:t[s]===o?0:.5;else if(i===1/0)for(s=a;s<l;s+=e)t[s]=t[s]===i?1:0;else if(o===-1/0)for(s=a;s<l;s+=e)t[s]=t[s]===o?0:1;else{var c=i-o;for(s=a;s<l;s+=e)isNaN(t[s])||(t[s]=0===c?.5:(t[s]-o)/c)}}return t}},{"array-bounds":68}],494:[function(t,e,r){arguments[4][320][0].apply(r,arguments)},{"./is-implemented":495,"./polyfill":497,dup:320}],495:[function(t,e,r){arguments[4][321][0].apply(r,arguments)},{dup:321}],496:[function(t,e,r){arguments[4][322][0].apply(r,arguments)},{dup:322}],497:[function(t,e,r){arguments[4][323][0].apply(r,arguments)},{"./is-native-implemented":496,d:153,dup:323,"es5-ext/object/is-value":197,"es5-ext/object/set-prototype-of":203,"es5-ext/object/valid-object":207,"es5-ext/object/valid-value":208,"es5-ext/string/random-uniq":213,"es6-iterator/for-of":215,"es6-iterator/get":216,"es6-symbol":222}],498:[function(t,e,r){"use strict";function n(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=[],n=!0,a=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(n=(o=s.next()).done)&&(r.push(o.value),!e||r.length!==e);n=!0);}catch(t){a=!0,i=t}finally{try{n||null==s.return||s.return()}finally{if(a)throw i}}return r}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function a(t){return function(t){if(Array.isArray(t)){for(var e=0,r=new Array(t.length);e<t.length;e++)r[e]=t[e];return r}}(t)||function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}var i=t("color-normalize"),o=t("array-bounds"),s=t("color-id"),l=t("point-cluster"),c=t("object-assign"),u=t("glslify"),h=t("pick-by-alias"),f=t("update-diff"),p=t("flatten-vertex-data"),d=t("is-iexplorer"),g=t("to-float32"),v=t("parse-rect"),m=y;function y(t,e){var r=this;if(!(this instanceof y))return new y(t,e);"function"==typeof t?(e||(e={}),e.regl=t):(e=t,t=null),e&&e.length&&(e.positions=e);var n,a=(t=e.regl)._gl,i=[];this.tooManyColors=d,n=t.texture({data:new Uint8Array(1020),width:255,height:1,type:"uint8",format:"rgba",wrapS:"clamp",wrapT:"clamp",mag:"nearest",min:"nearest"}),c(this,{regl:t,gl:a,groups:[],markerCache:[null],markerTextures:[null],palette:i,paletteIds:{},paletteTexture:n,maxColors:255,maxSize:100,canvas:a.canvas}),this.update(e);var o={uniforms:{pixelRatio:t.context("pixelRatio"),palette:n,paletteSize:function(t,e){return[r.tooManyColors?0:255,n.height]},scale:t.prop("scale"),scaleFract:t.prop("scaleFract"),translate:t.prop("translate"),translateFract:t.prop("translateFract"),opacity:t.prop("opacity"),marker:t.prop("markerTexture")},attributes:{x:function(t,e){return e.xAttr||{buffer:e.positionBuffer,stride:8,offset:0}},y:function(t,e){return e.yAttr||{buffer:e.positionBuffer,stride:8,offset:4}},xFract:function(t,e){return e.xAttr?{constant:[0,0]}:{buffer:e.positionFractBuffer,stride:8,offset:0}},yFract:function(t,e){return e.yAttr?{constant:[0,0]}:{buffer:e.positionFractBuffer,stride:8,offset:4}},size:function(t,e){return e.size.length?{buffer:e.sizeBuffer,stride:2,offset:0}:{constant:[Math.round(255*e.size/r.maxSize)]}},borderSize:function(t,e){return e.borderSize.length?{buffer:e.sizeBuffer,stride:2,offset:1}:{constant:[Math.round(255*e.borderSize/r.maxSize)]}},colorId:function(t,e){return e.color.length?{buffer:e.colorBuffer,stride:r.tooManyColors?8:4,offset:0}:{constant:r.tooManyColors?i.slice(4*e.color,4*e.color+4):[e.color]}},borderColorId:function(t,e){return e.borderColor.length?{buffer:e.colorBuffer,stride:r.tooManyColors?8:4,offset:r.tooManyColors?4:2}:{constant:r.tooManyColors?i.slice(4*e.borderColor,4*e.borderColor+4):[e.borderColor]}},isActive:function(t,e){return!0===e.activation?{constant:[1]}:e.activation?e.activation:{constant:[0]}}},blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},scissor:{enable:!0,box:t.prop("viewport")},viewport:t.prop("viewport"),stencil:{enable:!1},depth:{enable:!1},elements:t.prop("elements"),count:t.prop("count"),offset:t.prop("offset"),primitive:"points"},s=c({},o);s.frag=u(["precision highp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor, fragBorderColor;\nvarying float fragWidth, fragBorderColorLevel, fragColorLevel;\n\nuniform sampler2D marker;\nuniform float pixelRatio, opacity;\n\nfloat smoothStep(float x, float y) {\n return 1.0 / (1.0 + exp(50.0*(x - y)));\n}\n\nvoid main() {\n float dist = texture2D(marker, gl_PointCoord).r, delta = fragWidth;\n\n // max-distance alpha\n if (dist < 0.003) discard;\n\n // null-border case\n if (fragBorderColorLevel == fragColorLevel || fragBorderColor.a == 0.) {\n float colorAmt = smoothstep(.5 - delta, .5 + delta, dist);\n gl_FragColor = vec4(fragColor.rgb, colorAmt * fragColor.a * opacity);\n }\n else {\n float borderColorAmt = smoothstep(fragBorderColorLevel - delta, fragBorderColorLevel + delta, dist);\n float colorAmt = smoothstep(fragColorLevel - delta, fragColorLevel + delta, dist);\n\n vec4 color = fragBorderColor;\n color.a *= borderColorAmt;\n color = mix(color, fragColor, colorAmt);\n color.a *= opacity;\n\n gl_FragColor = color;\n }\n\n}\n"]),s.vert=u(["precision highp float;\n#define GLSLIFY 1\n\nattribute float x, y, xFract, yFract;\nattribute float size, borderSize;\nattribute vec4 colorId, borderColorId;\nattribute float isActive;\n\nuniform vec2 scale, scaleFract, translate, translateFract, paletteSize;\nuniform float pixelRatio;\nuniform sampler2D palette;\n\nconst float maxSize = 100.;\nconst float borderLevel = .5;\n\nvarying vec4 fragColor, fragBorderColor;\nvarying float fragPointSize, fragBorderRadius, fragWidth, fragBorderColorLevel, fragColorLevel;\n\nbool isDirect = (paletteSize.x < 1.);\n\nvec4 getColor(vec4 id) {\n return isDirect ? id / 255. : texture2D(palette,\n vec2(\n (id.x + .5) / paletteSize.x,\n (id.y + .5) / paletteSize.y\n )\n );\n}\n\nvoid main() {\n if (isActive == 0.) return;\n\n vec2 position = vec2(x, y);\n vec2 positionFract = vec2(xFract, yFract);\n\n vec4 color = getColor(colorId);\n vec4 borderColor = getColor(borderColorId);\n\n float size = size * maxSize / 255.;\n float borderSize = borderSize * maxSize / 255.;\n\n gl_PointSize = 2. * size * pixelRatio;\n fragPointSize = size * pixelRatio;\n\n vec2 pos = (position + translate) * scale\n + (positionFract + translateFract) * scale\n + (position + translate) * scaleFract\n + (positionFract + translateFract) * scaleFract;\n\n gl_Position = vec4(pos * 2. - 1., 0, 1);\n\n fragColor = color;\n fragBorderColor = borderColor;\n fragWidth = 1. / gl_PointSize;\n\n fragBorderColorLevel = clamp(borderLevel - borderLevel * borderSize / size, 0., 1.);\n fragColorLevel = clamp(borderLevel + (1. - borderLevel) * borderSize / size, 0., 1.);\n}"]),this.drawMarker=t(s);var l=c({},o);l.frag=u(["precision highp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor, fragBorderColor;\n\nuniform float opacity;\nvarying float fragBorderRadius, fragWidth;\n\nfloat smoothStep(float edge0, float edge1, float x) {\n\tfloat t;\n\tt = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n\treturn t * t * (3.0 - 2.0 * t);\n}\n\nvoid main() {\n\tfloat radius, alpha = 1.0, delta = fragWidth;\n\n\tradius = length(2.0 * gl_PointCoord.xy - 1.0);\n\n\tif (radius > 1.0 + delta) {\n\t\tdiscard;\n\t}\n\n\talpha -= smoothstep(1.0 - delta, 1.0 + delta, radius);\n\n\tfloat borderRadius = fragBorderRadius;\n\tfloat ratio = smoothstep(borderRadius - delta, borderRadius + delta, radius);\n\tvec4 color = mix(fragColor, fragBorderColor, ratio);\n\tcolor.a *= alpha * opacity;\n\tgl_FragColor = color;\n}\n"]),l.vert=u(["precision highp float;\n#define GLSLIFY 1\n\nattribute float x, y, xFract, yFract;\nattribute float size, borderSize;\nattribute vec4 colorId, borderColorId;\nattribute float isActive;\n\nuniform vec2 scale, scaleFract, translate, translateFract;\nuniform float pixelRatio;\nuniform sampler2D palette;\nuniform vec2 paletteSize;\n\nconst float maxSize = 100.;\n\nvarying vec4 fragColor, fragBorderColor;\nvarying float fragBorderRadius, fragWidth;\n\nbool isDirect = (paletteSize.x < 1.);\n\nvec4 getColor(vec4 id) {\n return isDirect ? id / 255. : texture2D(palette,\n vec2(\n (id.x + .5) / paletteSize.x,\n (id.y + .5) / paletteSize.y\n )\n );\n}\n\nvoid main() {\n // ignore inactive points\n if (isActive == 0.) return;\n\n vec2 position = vec2(x, y);\n vec2 positionFract = vec2(xFract, yFract);\n\n vec4 color = getColor(colorId);\n vec4 borderColor = getColor(borderColorId);\n\n float size = size * maxSize / 255.;\n float borderSize = borderSize * maxSize / 255.;\n\n gl_PointSize = (size + borderSize) * pixelRatio;\n\n vec2 pos = (position + translate) * scale\n + (positionFract + translateFract) * scale\n + (position + translate) * scaleFract\n + (positionFract + translateFract) * scaleFract;\n\n gl_Position = vec4(pos * 2. - 1., 0, 1);\n\n fragBorderRadius = 1. - 2. * borderSize / (size + borderSize);\n fragColor = color;\n fragBorderColor = borderColor.a == 0. || borderSize == 0. ? vec4(color.rgb, 0.) : borderColor;\n fragWidth = 1. / gl_PointSize;\n}\n"]),d&&(l.frag=l.frag.replace("smoothstep","smoothStep"),s.frag=s.frag.replace("smoothstep","smoothStep")),this.drawCircle=t(l)}y.defaults={color:"black",borderColor:"transparent",borderSize:0,size:12,opacity:1,marker:void 0,viewport:null,range:null,pixelSize:null,count:0,offset:0,bounds:null,positions:[],snap:1e4},y.prototype.render=function(){return arguments.length&&this.update.apply(this,arguments),this.draw(),this},y.prototype.draw=function(){for(var t=this,e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];var a=this.groups;if(1===r.length&&Array.isArray(r[0])&&(null===r[0][0]||Array.isArray(r[0][0]))&&(r=r[0]),this.regl._refresh(),r.length)for(var i=0;i<r.length;i++)this.drawItem(i,r[i]);else a.forEach(function(e,r){t.drawItem(r)});return this},y.prototype.drawItem=function(t,e){var r=this.groups,n=r[t];if("number"==typeof e&&(t=e,n=r[e],e=null),n&&n.count&&n.opacity){n.activation[0]&&this.drawCircle(this.getMarkerDrawOptions(0,n,e));for(var i=[],o=1;o<n.activation.length;o++)n.activation[o]&&(!0===n.activation[o]||n.activation[o].data.length)&&i.push.apply(i,a(this.getMarkerDrawOptions(o,n,e)));i.length&&this.drawMarker(i)}},y.prototype.getMarkerDrawOptions=function(t,e,r){var a=e.range,i=e.tree,o=e.viewport,s=e.activation,l=e.selectionBuffer,u=e.count;this.regl;if(!i)return r?[c({},e,{markerTexture:this.markerTextures[t],activation:s[t],count:r.length,elements:r,offset:0})]:[c({},e,{markerTexture:this.markerTextures[t],activation:s[t],offset:0})];var h=[],f=i.range(a,{lod:!0,px:[(a[2]-a[0])/o.width,(a[3]-a[1])/o.height]});if(r){for(var p=s[t].data,d=new Uint8Array(u),g=0;g<r.length;g++){var v=r[g];d[v]=p?p[v]:1}l.subdata(d)}for(var m=f.length;m--;){var y=n(f[m],2),x=y[0],b=y[1];h.push(c({},e,{markerTexture:this.markerTextures[t],activation:r?l:s[t],offset:x,count:b-x}))}return h},y.prototype.update=function(){for(var t=this,e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];if(r.length){1===r.length&&Array.isArray(r[0])&&(r=r[0]);var a=this.groups,i=this.gl,s=this.regl,u=this.maxSize,d=this.maxColors,m=this.palette;this.groups=a=r.map(function(e,r){var n=a[r];if(void 0===e)return n;null===e?e={positions:null}:"function"==typeof e?e={ondraw:e}:"number"==typeof e[0]&&(e={positions:e}),null===(e=h(e,{positions:"positions data points",snap:"snap cluster lod tree",size:"sizes size radius",borderSize:"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline",color:"colors color fill fill-color fillColor",borderColor:"borderColors borderColor stroke stroke-color strokeColor",marker:"markers marker shape",range:"range dataBox databox",viewport:"viewport viewPort viewBox viewbox",opacity:"opacity alpha transparency",bounds:"bound bounds boundaries limits",tooManyColors:"tooManyColors palette paletteMode optimizePalette enablePalette"})).positions&&(e.positions=[]),null!=e.tooManyColors&&(t.tooManyColors=e.tooManyColors),n||(a[r]=n={id:r,scale:null,translate:null,scaleFract:null,translateFract:null,activation:[],selectionBuffer:s.buffer({data:new Uint8Array(0),usage:"stream",type:"uint8"}),sizeBuffer:s.buffer({data:new Uint8Array(0),usage:"dynamic",type:"uint8"}),colorBuffer:s.buffer({data:new Uint8Array(0),usage:"dynamic",type:"uint8"}),positionBuffer:s.buffer({data:new Uint8Array(0),usage:"dynamic",type:"float"}),positionFractBuffer:s.buffer({data:new Uint8Array(0),usage:"dynamic",type:"float"})},e=c({},y.defaults,e)),!e.positions||"marker"in e||(e.marker=n.marker,delete n.marker),!e.marker||"positions"in e||(e.positions=n.positions,delete n.positions);var x=0,b=0;if(f(n,e,[{snap:!0,size:function(t,e){return null==t&&(t=y.defaults.size),x+=t&&t.length?1:0,t},borderSize:function(t,e){return null==t&&(t=y.defaults.borderSize),x+=t&&t.length?1:0,t},opacity:parseFloat,color:function(e,r){return null==e&&(e=y.defaults.color),e=t.updateColor(e),b++,e},borderColor:function(e,r){return null==e&&(e=y.defaults.borderColor),e=t.updateColor(e),b++,e},bounds:function(t,e,r){return"range"in r||(r.range=null),t},positions:function(t,e,r){var n=e.snap,a=e.positionBuffer,i=e.positionFractBuffer,c=e.selectionBuffer;if(t.x||t.y)return t.x.length?e.xAttr={buffer:s.buffer(t.x),offset:0,stride:4,count:t.x.length}:e.xAttr={buffer:t.x.buffer,offset:4*t.x.offset||0,stride:4*(t.x.stride||1),count:t.x.count},t.y.length?e.yAttr={buffer:s.buffer(t.y),offset:0,stride:4,count:t.y.length}:e.yAttr={buffer:t.y.buffer,offset:4*t.y.offset||0,stride:4*(t.y.stride||1),count:t.y.count},e.count=Math.max(e.xAttr.count,e.yAttr.count),t;t=p(t,"float64");var u=e.count=Math.floor(t.length/2),h=e.bounds=u?o(t,2):null;if(r.range||e.range||(delete e.range,r.range=h),r.marker||e.marker||(delete e.marker,r.marker=null),n&&(!0===n||u>n)?e.tree=l(t,{bounds:h}):n&&n.length&&(e.tree=n),e.tree){var f={primitive:"points",usage:"static",data:e.tree,type:"uint32"};e.elements?e.elements(f):e.elements=s.elements(f)}return a({data:g.float(t),usage:"dynamic"}),i({data:g.fract(t),usage:"dynamic"}),c({data:new Uint8Array(u),type:"uint8",usage:"stream"}),t}},{marker:function(e,r,n){var a=r.activation;if(a.forEach(function(t){return t&&t.destroy&&t.destroy()}),a.length=0,e&&"number"!=typeof e[0]){for(var i=[],o=0,l=Math.min(e.length,r.count);o<l;o++){var c=t.addMarker(e[o]);i[c]||(i[c]=new Uint8Array(r.count)),i[c][o]=1}for(var u=0;u<i.length;u++)if(i[u]){var h={data:i[u],type:"uint8",usage:"static"};a[u]?a[u](h):a[u]=s.buffer(h),a[u].data=i[u]}}else{a[t.addMarker(e)]=!0}return e},range:function(t,e,r){var n=e.bounds;if(n)return t||(t=n),e.scale=[1/(t[2]-t[0]),1/(t[3]-t[1])],e.translate=[-t[0],-t[1]],e.scaleFract=g.fract(e.scale),e.translateFract=g.fract(e.translate),t},viewport:function(t){return v(t||[i.drawingBufferWidth,i.drawingBufferHeight])}}]),x){var _=n,w=_.count,k=_.size,T=_.borderSize,M=_.sizeBuffer,A=new Uint8Array(2*w);if(k.length||T.length)for(var S=0;S<w;S++)A[2*S]=Math.round(255*(null==k[S]?k:k[S])/u),A[2*S+1]=Math.round(255*(null==T[S]?T:T[S])/u);M({data:A,usage:"dynamic"})}if(b){var E,L=n,C=L.count,P=L.color,O=L.borderColor,z=L.colorBuffer;if(t.tooManyColors){if(P.length||O.length){E=new Uint8Array(8*C);for(var I=0;I<C;I++){var D=P[I];E[8*I]=m[4*D],E[8*I+1]=m[4*D+1],E[8*I+2]=m[4*D+2],E[8*I+3]=m[4*D+3];var R=O[I];E[8*I+4]=m[4*R],E[8*I+5]=m[4*R+1],E[8*I+6]=m[4*R+2],E[8*I+7]=m[4*R+3]}}}else if(P.length||O.length){E=new Uint8Array(4*C+2);for(var F=0;F<C;F++)null!=P[F]&&(E[4*F]=P[F]%d,E[4*F+1]=Math.floor(P[F]/d)),null!=O[F]&&(E[4*F+2]=O[F]%d,E[4*F+3]=Math.floor(O[F]/d))}z({data:E||new Uint8Array(0),type:"uint8",usage:"dynamic"})}return n})}},y.prototype.addMarker=function(t){var e,r=this.markerTextures,n=this.regl,a=this.markerCache,i=null==t?0:a.indexOf(t);if(i>=0)return i;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)e=t;else{e=new Uint8Array(t.length);for(var o=0,s=t.length;o<s;o++)e[o]=255*t[o]}var l=Math.floor(Math.sqrt(e.length));return i=r.length,a.push(t),r.push(n.texture({channels:1,data:e,radius:l,mag:"linear",min:"linear"})),i},y.prototype.updateColor=function(t){var e=this.paletteIds,r=this.palette,n=this.maxColors;Array.isArray(t)||(t=[t]);var a=[];if("number"==typeof t[0]){var o=[];if(Array.isArray(t))for(var l=0;l<t.length;l+=4)o.push(t.slice(l,l+4));else for(var c=0;c<t.length;c+=4)o.push(t.subarray(c,c+4));t=o}for(var u=0;u<t.length;u++){var h=t[u];h=i(h,"uint8");var f=s(h,!1);if(null==e[f]){var p=r.length;e[f]=Math.floor(p/4),r[p]=h[0],r[p+1]=h[1],r[p+2]=h[2],r[p+3]=h[3]}a[u]=e[f]}return!this.tooManyColors&&r.length>4*n&&(this.tooManyColors=!0),this.updatePalette(r),1===a.length?a[0]:a},y.prototype.updatePalette=function(t){if(!this.tooManyColors){var e=this.maxColors,r=this.paletteTexture,n=Math.ceil(.25*t.length/e);if(n>1)for(var a=.25*(t=t.slice()).length%e;a<n*e;a++)t.push(0,0,0,0);r.height<n&&r.resize(e,n),r.subimage({width:Math.min(.25*t.length,e),height:n,data:t},0,0)}},y.prototype.destroy=function(){return this.groups.forEach(function(t){t.sizeBuffer.destroy(),t.positionBuffer.destroy(),t.positionFractBuffer.destroy(),t.colorBuffer.destroy(),t.activation.forEach(function(t){return t&&t.destroy&&t.destroy()}),t.selectionBuffer.destroy(),t.elements&&t.elements.destroy()}),this.groups.length=0,this.paletteTexture.destroy(),this.markerTextures.forEach(function(t){return t&&t.destroy&&t.destroy()}),this};var x=t("object-assign");e.exports=function(t,e){var r=new m(t,e),n=r.render.bind(r);return x(n,{render:n,update:r.update.bind(r),draw:r.draw.bind(r),destroy:r.destroy.bind(r),regl:r.regl,gl:r.gl,canvas:r.gl.canvas,groups:r.groups,markers:r.markerCache,palette:r.palette}),n}},{"array-bounds":68,"color-id":120,"color-normalize":122,"flatten-vertex-data":230,glslify:410,"is-iexplorer":420,"object-assign":455,"parse-rect":460,"pick-by-alias":466,"point-cluster":470,"to-float32":536,"update-diff":547}],499:[function(t,e,r){"use strict";var n=t("regl-scatter2d"),a=t("pick-by-alias"),i=t("array-bounds"),o=t("raf"),s=t("array-range"),l=t("parse-rect"),c=t("flatten-vertex-data");function u(t,e){if(!(this instanceof u))return new u(t,e);this.traces=[],this.passes={},this.regl=t,this.scatter=n(t),this.canvas=this.scatter.canvas}function h(t,e,r){return(null!=t.id?t.id:t)<<16|(255&e)<<8|255&r}function f(t,e,r){var n,a,i,o,s=t[e],l=t[r];return s.length>2?(s[0],s[2],n=s[1],a=s[3]):s.length?(n=s[0],a=s[1]):(s.x,n=s.y,s.x+s.width,a=s.y+s.height),l.length>2?(i=l[0],o=l[2],l[1],l[3]):l.length?(i=l[0],o=l[1]):(i=l.x,l.y,o=l.x+l.width,l.y+l.height),[i,n,o,a]}function p(t){if("number"==typeof t)return[t,t,t,t];if(2===t.length)return[t[0],t[1],t[0],t[1]];var e=l(t);return[e.x,e.y,e.x+e.width,e.y+e.height]}e.exports=u,u.prototype.render=function(){for(var t,e=this,r=[],n=arguments.length;n--;)r[n]=arguments[n];return r.length&&(t=this).update.apply(t,r),this.regl.attributes.preserveDrawingBuffer?this.draw():(this.dirty?null==this.planned&&(this.planned=o(function(){e.draw(),e.dirty=!0,e.planned=null})):(this.draw(),this.dirty=!0,o(function(){e.dirty=!1})),this)},u.prototype.update=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];if(e.length){for(var n=0;n<e.length;n++)this.updateItem(n,e[n]);this.traces=this.traces.filter(Boolean);for(var a=[],i=0,o=0;o<this.traces.length;o++){for(var s=this.traces[o],l=this.traces[o].passes,c=0;c<l.length;c++)a.push(this.passes[l[c]]);s.passOffset=i,i+=s.passes.length}return(t=this.scatter).update.apply(t,a),this}},u.prototype.updateItem=function(t,e){var r=this.regl;if(null===e)return this.traces[t]=null,this;if(!e)return this;var n,o=a(e,{data:"data items columns rows values dimensions samples x",snap:"snap cluster",size:"sizes size radius",color:"colors color fill fill-color fillColor",opacity:"opacity alpha transparency opaque",borderSize:"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline",borderColor:"borderColors borderColor bordercolor stroke stroke-color strokeColor",marker:"markers marker shape",range:"range ranges databox dataBox",viewport:"viewport viewBox viewbox",domain:"domain domains area areas",padding:"pad padding paddings pads margin margins",transpose:"transpose transposed",diagonal:"diagonal diag showDiagonal",upper:"upper up top upperhalf upperHalf showupperhalf showUpper showUpperHalf",lower:"lower low bottom lowerhalf lowerHalf showlowerhalf showLowerHalf showLower"}),s=this.traces[t]||(this.traces[t]={id:t,buffer:r.buffer({usage:"dynamic",type:"float",data:new Uint8Array}),color:"black",marker:null,size:12,borderColor:"transparent",borderSize:1,viewport:l([r._gl.drawingBufferWidth,r._gl.drawingBufferHeight]),padding:[0,0,0,0],opacity:1,diagonal:!0,upper:!0,lower:!0});if(null!=o.color&&(s.color=o.color),null!=o.size&&(s.size=o.size),null!=o.marker&&(s.marker=o.marker),null!=o.borderColor&&(s.borderColor=o.borderColor),null!=o.borderSize&&(s.borderSize=o.borderSize),null!=o.opacity&&(s.opacity=o.opacity),o.viewport&&(s.viewport=l(o.viewport)),null!=o.diagonal&&(s.diagonal=o.diagonal),null!=o.upper&&(s.upper=o.upper),null!=o.lower&&(s.lower=o.lower),o.data){s.buffer(c(o.data)),s.columns=o.data.length,s.count=o.data[0].length,s.bounds=[];for(var u=0;u<s.columns;u++)s.bounds[u]=i(o.data[u],1)}o.range&&(s.range=o.range,n=s.range&&"number"!=typeof s.range[0]),o.domain&&(s.domain=o.domain);var d=!1;null!=o.padding&&(Array.isArray(o.padding)&&o.padding.length===s.columns&&"number"==typeof o.padding[o.padding.length-1]?(s.padding=o.padding.map(p),d=!0):s.padding=p(o.padding));var g=s.columns,v=s.count,m=s.viewport.width,y=s.viewport.height,x=s.viewport.x,b=s.viewport.y,_=m/g,w=y/g;s.passes=[];for(var k=0;k<g;k++)for(var T=0;T<g;T++)if((s.diagonal||T!==k)&&(s.upper||!(k>T))&&(s.lower||!(k<T))){var M=h(s.id,k,T),A=this.passes[M]||(this.passes[M]={});if(o.data&&(o.transpose?A.positions={x:{buffer:s.buffer,offset:T,count:v,stride:g},y:{buffer:s.buffer,offset:k,count:v,stride:g}}:A.positions={x:{buffer:s.buffer,offset:T*v,count:v},y:{buffer:s.buffer,offset:k*v,count:v}},A.bounds=f(s.bounds,k,T)),o.domain||o.viewport||o.data){var S=d?f(s.padding,k,T):s.padding;if(s.domain){var E=f(s.domain,k,T),L=E[0],C=E[1],P=E[2],O=E[3];A.viewport=[x+L*m+S[0],b+C*y+S[1],x+P*m-S[2],b+O*y-S[3]]}else A.viewport=[x+T*_+_*S[0],b+k*w+w*S[1],x+(T+1)*_-_*S[2],b+(k+1)*w-w*S[3]]}o.color&&(A.color=s.color),o.size&&(A.size=s.size),o.marker&&(A.marker=s.marker),o.borderSize&&(A.borderSize=s.borderSize),o.borderColor&&(A.borderColor=s.borderColor),o.opacity&&(A.opacity=s.opacity),o.range&&(A.range=n?f(s.range,k,T):s.range||A.bounds),s.passes.push(M)}return this},u.prototype.draw=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];if(e.length){for(var n=[],a=0;a<e.length;a++)if("number"==typeof e[a]){var i=this.traces[e[a]],o=i.passes,l=i.passOffset;n.push.apply(n,s(l,l+o.length))}else if(e[a].length){var c=e[a],u=this.traces[a],h=u.passes,f=u.passOffset;h=h.map(function(t,e){n[f+e]=c})}(t=this.scatter).draw.apply(t,n)}else this.scatter.draw();return this},u.prototype.destroy=function(){return this.traces.forEach(function(t){t.buffer&&t.buffer.destroy&&t.buffer.destroy()}),this.traces=null,this.passes=null,this.scatter.destroy(),this}},{"array-bounds":68,"array-range":69,"flatten-vertex-data":230,"parse-rect":460,"pick-by-alias":466,raf:485,"regl-scatter2d":498}],500:[function(t,e,r){var n,a;n=this,a=function(){function t(t,e){this.id=V++,this.type=t,this.data=e}function e(t){return"["+function t(e){if(0===e.length)return[];var r=e.charAt(0),n=e.charAt(e.length-1);if(1<e.length&&r===n&&('"'===r||"'"===r))return['"'+e.substr(1,e.length-2).replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'];if(r=/\[(false|true|null|\d+|'[^']*'|"[^"]*")\]/.exec(e))return t(e.substr(0,r.index)).concat(t(r[1])).concat(t(e.substr(r.index+r[0].length)));if(1===(r=e.split(".")).length)return['"'+e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'];for(e=[],n=0;n<r.length;++n)e=e.concat(t(r[n]));return e}(t).join("][")+"]"}function r(t){return"string"==typeof t?t.split():t}function n(t){return"string"==typeof t?document.querySelector(t):t}function a(t){var e,a,i,o,s=t||{};t={};var l=[],c=[],u="undefined"==typeof window?1:window.devicePixelRatio,h=!1,f=function(t){},p=function(){};if("string"==typeof s?e=document.querySelector(s):"object"==typeof s&&("string"==typeof s.nodeName&&"function"==typeof s.appendChild&&"function"==typeof s.getBoundingClientRect?e=s:"function"==typeof s.drawArrays||"function"==typeof s.drawElements?i=(o=s).canvas:("gl"in s?o=s.gl:"canvas"in s?i=n(s.canvas):"container"in s&&(a=n(s.container)),"attributes"in s&&(t=s.attributes),"extensions"in s&&(l=r(s.extensions)),"optionalExtensions"in s&&(c=r(s.optionalExtensions)),"onDone"in s&&(f=s.onDone),"profile"in s&&(h=!!s.profile),"pixelRatio"in s&&(u=+s.pixelRatio))),e&&("canvas"===e.nodeName.toLowerCase()?i=e:a=e),!o){if(!i){if(!(e=function(t,e,r){function n(){var e=window.innerWidth,n=window.innerHeight;t!==document.body&&(e=(n=t.getBoundingClientRect()).right-n.left,n=n.bottom-n.top),a.width=r*e,a.height=r*n,j(a.style,{width:e+"px",height:n+"px"})}var a=document.createElement("canvas");return j(a.style,{border:0,margin:0,padding:0,top:0,left:0}),t.appendChild(a),t===document.body&&(a.style.position="absolute",j(t.style,{margin:0,padding:0})),window.addEventListener("resize",n,!1),n(),{canvas:a,onDestroy:function(){window.removeEventListener("resize",n),t.removeChild(a)}}}(a||document.body,0,u)))return null;i=e.canvas,p=e.onDestroy}o=function(t,e){function r(r){try{return t.getContext(r,e)}catch(t){return null}}return r("webgl")||r("experimental-webgl")||r("webgl-experimental")}(i,t)}return o?{gl:o,canvas:i,container:a,extensions:l,optionalExtensions:c,pixelRatio:u,profile:h,onDone:f,onDestroy:p}:(p(),f("webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org"),null)}function i(t,e){for(var r=Array(t),n=0;n<t;++n)r[n]=e(n);return r}function o(t){var e,r;return e=(65535<t)<<4,e|=r=(255<(t>>>=e))<<3,(e|=r=(15<(t>>>=r))<<2)|(r=(3<(t>>>=r))<<1)|t>>>r>>1}function s(){function t(t){t:{for(var e=16;268435456>=e;e*=16)if(t<=e){t=e;break t}t=0}return 0<(e=r[o(t)>>2]).length?e.pop():new ArrayBuffer(t)}function e(t){r[o(t.byteLength)>>2].push(t)}var r=i(8,function(){return[]});return{alloc:t,free:e,allocType:function(e,r){var n=null;switch(e){case 5120:n=new Int8Array(t(r),0,r);break;case 5121:n=new Uint8Array(t(r),0,r);break;case 5122:n=new Int16Array(t(2*r),0,r);break;case 5123:n=new Uint16Array(t(2*r),0,r);break;case 5124:n=new Int32Array(t(4*r),0,r);break;case 5125:n=new Uint32Array(t(4*r),0,r);break;case 5126:n=new Float32Array(t(4*r),0,r);break;default:return null}return n.length!==r?n.subarray(0,r):n},freeType:function(t){e(t.buffer)}}}function l(t){return!!t&&"object"==typeof t&&Array.isArray(t.shape)&&Array.isArray(t.stride)&&"number"==typeof t.offset&&t.shape.length===t.stride.length&&(Array.isArray(t.data)||W(t.data))}function c(t,e,r,n,a,i){for(var o=0;o<e;++o)for(var s=t[o],l=0;l<r;++l)for(var c=s[l],u=0;u<n;++u)a[i++]=c[u]}function u(t){return 0|J[Object.prototype.toString.call(t)]}function h(t,e){for(var r=0;r<e.length;++r)t[r]=e[r]}function f(t,e,r,n,a,i,o){for(var s=0,l=0;l<r;++l)for(var c=0;c<n;++c)t[s++]=e[a*l+i*c+o]}function p(t,e,r,n){function a(e){this.id=c++,this.buffer=t.createBuffer(),this.type=e,this.usage=35044,this.byteLength=0,this.dimension=1,this.dtype=5121,this.persistentData=null,r.profile&&(this.stats={size:0})}function i(e,r,n){e.byteLength=r.byteLength,t.bufferData(e.type,r,n)}function o(t,e,r,n,a,o){if(t.usage=r,Array.isArray(e)){if(t.dtype=n||5126,0<e.length)if(Array.isArray(e[0])){a=tt(e);for(var s=n=1;s<a.length;++s)n*=a[s];t.dimension=n,i(t,e=$(e,a,t.dtype),r),o?t.persistentData=e:G.freeType(e)}else"number"==typeof e[0]?(t.dimension=a,h(a=G.allocType(t.dtype,e.length),e),i(t,a,r),o?t.persistentData=a:G.freeType(a)):W(e[0])&&(t.dimension=e[0].length,t.dtype=n||u(e[0])||5126,i(t,e=$(e,[e.length,e[0].length],t.dtype),r),o?t.persistentData=e:G.freeType(e))}else if(W(e))t.dtype=n||u(e),t.dimension=a,i(t,e,r),o&&(t.persistentData=new Uint8Array(new Uint8Array(e.buffer)));else if(l(e)){a=e.shape;var c=e.stride,p=(s=e.offset,0),d=0,g=0,v=0;1===a.length?(p=a[0],d=1,g=c[0],v=0):2===a.length&&(p=a[0],d=a[1],g=c[0],v=c[1]),t.dtype=n||u(e.data)||5126,t.dimension=d,f(a=G.allocType(t.dtype,p*d),e.data,p,d,g,v,s),i(t,a,r),o?t.persistentData=a:G.freeType(a)}}function s(r){e.bufferCount--;for(var a=0;a<n.state.length;++a){var i=n.state[a];i.buffer===r&&(t.disableVertexAttribArray(a),i.buffer=null)}t.deleteBuffer(r.buffer),r.buffer=null,delete p[r.id]}var c=0,p={};a.prototype.bind=function(){t.bindBuffer(this.type,this.buffer)},a.prototype.destroy=function(){s(this)};var d=[];return r.profile&&(e.getTotalBufferSize=function(){var t=0;return Object.keys(p).forEach(function(e){t+=p[e].stats.size}),t}),{create:function(n,i,c,d){function g(e){var n=35044,a=null,i=0,s=0,c=1;return Array.isArray(e)||W(e)||l(e)?a=e:"number"==typeof e?i=0|e:e&&("data"in e&&(a=e.data),"usage"in e&&(n=Q[e.usage]),"type"in e&&(s=K[e.type]),"dimension"in e&&(c=0|e.dimension),"length"in e&&(i=0|e.length)),v.bind(),a?o(v,a,n,s,c,d):(i&&t.bufferData(v.type,i,n),v.dtype=s||5121,v.usage=n,v.dimension=c,v.byteLength=i),r.profile&&(v.stats.size=v.byteLength*et[v.dtype]),g}e.bufferCount++;var v=new a(i);return p[v.id]=v,c||g(n),g._reglType="buffer",g._buffer=v,g.subdata=function(e,r){var n,a=0|(r||0);if(v.bind(),W(e))t.bufferSubData(v.type,a,e);else if(Array.isArray(e)){if(0<e.length)if("number"==typeof e[0]){var i=G.allocType(v.dtype,e.length);h(i,e),t.bufferSubData(v.type,a,i),G.freeType(i)}else(Array.isArray(e[0])||W(e[0]))&&(n=tt(e),i=$(e,n,v.dtype),t.bufferSubData(v.type,a,i),G.freeType(i))}else if(l(e)){n=e.shape;var o=e.stride,s=i=0,c=0,p=0;1===n.length?(i=n[0],s=1,c=o[0],p=0):2===n.length&&(i=n[0],s=n[1],c=o[0],p=o[1]),n=Array.isArray(e.data)?v.dtype:u(e.data),f(n=G.allocType(n,i*s),e.data,i,s,c,p,e.offset),t.bufferSubData(v.type,a,n),G.freeType(n)}return g},r.profile&&(g.stats=v.stats),g.destroy=function(){s(v)},g},createStream:function(t,e){var r=d.pop();return r||(r=new a(t)),r.bind(),o(r,e,35040,0,1,!1),r},destroyStream:function(t){d.push(t)},clear:function(){X(p).forEach(s),d.forEach(s)},getBuffer:function(t){return t&&t._buffer instanceof a?t._buffer:null},restore:function(){X(p).forEach(function(e){e.buffer=t.createBuffer(),t.bindBuffer(e.type,e.buffer),t.bufferData(e.type,e.persistentData||e.byteLength,e.usage)})},_initBuffer:o}}function d(t,e,r,n){function a(t){this.id=c++,s[this.id]=this,this.buffer=t,this.primType=4,this.type=this.vertCount=0}function i(n,a,i,o,s,c,u){if(n.buffer.bind(),a){var h=u;u||W(a)&&(!l(a)||W(a.data))||(h=e.oes_element_index_uint?5125:5123),r._initBuffer(n.buffer,a,i,h,3)}else t.bufferData(34963,c,i),n.buffer.dtype=h||5121,n.buffer.usage=i,n.buffer.dimension=3,n.buffer.byteLength=c;if(h=u,!u){switch(n.buffer.dtype){case 5121:case 5120:h=5121;break;case 5123:case 5122:h=5123;break;case 5125:case 5124:h=5125}n.buffer.dtype=h}n.type=h,0>(a=s)&&(a=n.buffer.byteLength,5123===h?a>>=1:5125===h&&(a>>=2)),n.vertCount=a,a=o,0>o&&(a=4,1===(o=n.buffer.dimension)&&(a=0),2===o&&(a=1),3===o&&(a=4)),n.primType=a}function o(t){n.elementsCount--,delete s[t.id],t.buffer.destroy(),t.buffer=null}var s={},c=0,u={uint8:5121,uint16:5123};e.oes_element_index_uint&&(u.uint32=5125),a.prototype.bind=function(){this.buffer.bind()};var h=[];return{create:function(t,e){function s(t){if(t)if("number"==typeof t)c(t),h.primType=4,h.vertCount=0|t,h.type=5121;else{var e=null,r=35044,n=-1,a=-1,o=0,f=0;Array.isArray(t)||W(t)||l(t)?e=t:("data"in t&&(e=t.data),"usage"in t&&(r=Q[t.usage]),"primitive"in t&&(n=rt[t.primitive]),"count"in t&&(a=0|t.count),"type"in t&&(f=u[t.type]),"length"in t?o=0|t.length:(o=a,5123===f||5122===f?o*=2:5125!==f&&5124!==f||(o*=4))),i(h,e,r,n,a,o,f)}else c(),h.primType=4,h.vertCount=0,h.type=5121;return s}var c=r.create(null,34963,!0),h=new a(c._buffer);return n.elementsCount++,s(t),s._reglType="elements",s._elements=h,s.subdata=function(t,e){return c.subdata(t,e),s},s.destroy=function(){o(h)},s},createStream:function(t){var e=h.pop();return e||(e=new a(r.create(null,34963,!0,!1)._buffer)),i(e,t,35040,-1,-1,0,0),e},destroyStream:function(t){h.push(t)},getElements:function(t){return"function"==typeof t&&t._elements instanceof a?t._elements:null},clear:function(){X(s).forEach(o)}}}function g(t){for(var e=G.allocType(5123,t.length),r=0;r<t.length;++r)if(isNaN(t[r]))e[r]=65535;else if(1/0===t[r])e[r]=31744;else if(-1/0===t[r])e[r]=64512;else{nt[0]=t[r];var n=(i=at[0])>>>31<<15,a=(i<<1>>>24)-127,i=i>>13&1023;e[r]=-24>a?n:-14>a?n+(i+1024>>-14-a):15<a?n+31744:n+(a+15<<10)+i}return e}function v(t){return Array.isArray(t)||W(t)}function m(t){return"[object "+t+"]"}function y(t){return Array.isArray(t)&&(0===t.length||"number"==typeof t[0])}function x(t){return!(!Array.isArray(t)||0===t.length||!v(t[0]))}function b(t){return Object.prototype.toString.call(t)}function _(t){if(!t)return!1;var e=b(t);return 0<=pt.indexOf(e)||(y(t)||x(t)||l(t))}function w(t,e){36193===t.type?(t.data=g(e),G.freeType(e)):t.data=e}function k(t,e,r,n,a,i){if(t="undefined"!=typeof gt[t]?gt[t]:st[t]*dt[e],i&&(t*=6),a){for(n=0;1<=r;)n+=t*r*r,r/=2;return n}return t*r*n}function T(t,e,r,n,a,i,o){function s(){this.format=this.internalformat=6408,this.type=5121,this.flipY=this.premultiplyAlpha=this.compressed=!1,this.unpackAlignment=1,this.colorSpace=37444,this.channels=this.height=this.width=0}function c(t,e){t.internalformat=e.internalformat,t.format=e.format,t.type=e.type,t.compressed=e.compressed,t.premultiplyAlpha=e.premultiplyAlpha,t.flipY=e.flipY,t.unpackAlignment=e.unpackAlignment,t.colorSpace=e.colorSpace,t.width=e.width,t.height=e.height,t.channels=e.channels}function u(t,e){if("object"==typeof e&&e){"premultiplyAlpha"in e&&(t.premultiplyAlpha=e.premultiplyAlpha),"flipY"in e&&(t.flipY=e.flipY),"alignment"in e&&(t.unpackAlignment=e.alignment),"colorSpace"in e&&(t.colorSpace=q[e.colorSpace]),"type"in e&&(t.type=H[e.type]);var r=t.width,n=t.height,a=t.channels,i=!1;"shape"in e?(r=e.shape[0],n=e.shape[1],3===e.shape.length&&(a=e.shape[2],i=!0)):("radius"in e&&(r=n=e.radius),"width"in e&&(r=e.width),"height"in e&&(n=e.height),"channels"in e&&(a=e.channels,i=!0)),t.width=0|r,t.height=0|n,t.channels=0|a,r=!1,"format"in e&&(r=e.format,n=t.internalformat=Y[r],t.format=pt[n],r in H&&!("type"in e)&&(t.type=H[r]),r in K&&(t.compressed=!0),r=!0),!i&&r?t.channels=st[t.format]:i&&!r&&t.channels!==ot[t.format]&&(t.format=t.internalformat=ot[t.channels])}}function h(e){t.pixelStorei(37440,e.flipY),t.pixelStorei(37441,e.premultiplyAlpha),t.pixelStorei(37443,e.colorSpace),t.pixelStorei(3317,e.unpackAlignment)}function f(){s.call(this),this.yOffset=this.xOffset=0,this.data=null,this.needsFree=!1,this.element=null,this.needsCopy=!1}function p(t,e){var r=null;if(_(e)?r=e:e&&(u(t,e),"x"in e&&(t.xOffset=0|e.x),"y"in e&&(t.yOffset=0|e.y),_(e.data)&&(r=e.data)),e.copy){var n=a.viewportWidth,i=a.viewportHeight;t.width=t.width||n-t.xOffset,t.height=t.height||i-t.yOffset,t.needsCopy=!0}else if(r){if(W(r))t.channels=t.channels||4,t.data=r,"type"in e||5121!==t.type||(t.type=0|J[Object.prototype.toString.call(r)]);else if(y(r)){switch(t.channels=t.channels||4,i=(n=r).length,t.type){case 5121:case 5123:case 5125:case 5126:(i=G.allocType(t.type,i)).set(n),t.data=i;break;case 36193:t.data=g(n)}t.alignment=1,t.needsFree=!0}else if(l(r)){n=r.data,Array.isArray(n)||5121!==t.type||(t.type=0|J[Object.prototype.toString.call(n)]);i=r.shape;var o,s,c,h,f=r.stride;3===i.length?(c=i[2],h=f[2]):h=c=1,o=i[0],s=i[1],i=f[0],f=f[1],t.alignment=1,t.width=o,t.height=s,t.channels=c,t.format=t.internalformat=ot[c],t.needsFree=!0,o=h,r=r.offset,c=t.width,h=t.height,s=t.channels;for(var p=G.allocType(36193===t.type?5126:t.type,c*h*s),d=0,m=0;m<h;++m)for(var k=0;k<c;++k)for(var T=0;T<s;++T)p[d++]=n[i*k+f*m+o*T+r];w(t,p)}else if(b(r)===lt||b(r)===ct)b(r)===lt?t.element=r:t.element=r.canvas,t.width=t.element.width,t.height=t.element.height,t.channels=4;else if(b(r)===ut)t.element=r,t.width=r.width,t.height=r.height,t.channels=4;else if(b(r)===ht)t.element=r,t.width=r.naturalWidth,t.height=r.naturalHeight,t.channels=4;else if(b(r)===ft)t.element=r,t.width=r.videoWidth,t.height=r.videoHeight,t.channels=4;else if(x(r)){for(n=t.width||r[0].length,i=t.height||r.length,f=t.channels,f=v(r[0][0])?f||r[0][0].length:f||1,o=Z.shape(r),c=1,h=0;h<o.length;++h)c*=o[h];c=G.allocType(36193===t.type?5126:t.type,c),Z.flatten(r,o,"",c),w(t,c),t.alignment=1,t.width=n,t.height=i,t.channels=f,t.format=t.internalformat=ot[f],t.needsFree=!0}}else t.width=t.width||1,t.height=t.height||1,t.channels=t.channels||4}function d(e,r,a,i,o){var s=e.element,l=e.data,c=e.internalformat,u=e.format,f=e.type,p=e.width,d=e.height;h(e),s?t.texSubImage2D(r,o,a,i,u,f,s):e.compressed?t.compressedTexSubImage2D(r,o,a,i,c,p,d,l):e.needsCopy?(n(),t.copyTexSubImage2D(r,o,a,i,e.xOffset,e.yOffset,p,d)):t.texSubImage2D(r,o,a,i,p,d,u,f,l)}function m(){return dt.pop()||new f}function T(t){t.needsFree&&G.freeType(t.data),f.call(t),dt.push(t)}function M(){s.call(this),this.genMipmaps=!1,this.mipmapHint=4352,this.mipmask=0,this.images=Array(16)}function A(t,e,r){var n=t.images[0]=m();t.mipmask=1,n.width=t.width=e,n.height=t.height=r,n.channels=t.channels=4}function S(t,e){var r=null;if(_(e))c(r=t.images[0]=m(),t),p(r,e),t.mipmask=1;else if(u(t,e),Array.isArray(e.mipmap))for(var n=e.mipmap,a=0;a<n.length;++a)c(r=t.images[a]=m(),t),r.width>>=a,r.height>>=a,p(r,n[a]),t.mipmask|=1<<a;else c(r=t.images[0]=m(),t),p(r,e),t.mipmask=1;c(t,t.images[0])}function E(e,r){for(var a=e.images,i=0;i<a.length&&a[i];++i){var o=a[i],s=r,l=i,c=o.element,u=o.data,f=o.internalformat,p=o.format,d=o.type,g=o.width,v=o.height,m=o.channels;h(o),c?t.texImage2D(s,l,p,p,d,c):o.compressed?t.compressedTexImage2D(s,l,f,g,v,0,u):o.needsCopy?(n(),t.copyTexImage2D(s,l,p,o.xOffset,o.yOffset,g,v,0)):((o=!u)&&(u=G.zero.allocType(d,g*v*m)),t.texImage2D(s,l,p,g,v,0,p,d,u),o&&u&&G.zero.freeType(u))}}function L(){var t=gt.pop()||new M;s.call(t);for(var e=t.mipmask=0;16>e;++e)t.images[e]=null;return t}function C(t){for(var e=t.images,r=0;r<e.length;++r)e[r]&&T(e[r]),e[r]=null;gt.push(t)}function P(){this.magFilter=this.minFilter=9728,this.wrapT=this.wrapS=33071,this.anisotropic=1,this.genMipmaps=!1,this.mipmapHint=4352}function O(t,e){"min"in e&&(t.minFilter=U[e.min],0<=it.indexOf(t.minFilter)&&!("faces"in e)&&(t.genMipmaps=!0)),"mag"in e&&(t.magFilter=V[e.mag]);var r=t.wrapS,n=t.wrapT;if("wrap"in e){var a=e.wrap;"string"==typeof a?r=n=N[a]:Array.isArray(a)&&(r=N[a[0]],n=N[a[1]])}else"wrapS"in e&&(r=N[e.wrapS]),"wrapT"in e&&(n=N[e.wrapT]);if(t.wrapS=r,t.wrapT=n,"anisotropic"in e&&(t.anisotropic=e.anisotropic),"mipmap"in e){switch(r=!1,typeof e.mipmap){case"string":t.mipmapHint=B[e.mipmap],r=t.genMipmaps=!0;break;case"boolean":r=t.genMipmaps=e.mipmap;break;case"object":t.genMipmaps=!1,r=!0}!r||"min"in e||(t.minFilter=9984)}}function z(r,n){t.texParameteri(n,10241,r.minFilter),t.texParameteri(n,10240,r.magFilter),t.texParameteri(n,10242,r.wrapS),t.texParameteri(n,10243,r.wrapT),e.ext_texture_filter_anisotropic&&t.texParameteri(n,34046,r.anisotropic),r.genMipmaps&&(t.hint(33170,r.mipmapHint),t.generateMipmap(n))}function I(e){s.call(this),this.mipmask=0,this.internalformat=6408,this.id=vt++,this.refCount=1,this.target=e,this.texture=t.createTexture(),this.unit=-1,this.bindCount=0,this.texInfo=new P,o.profile&&(this.stats={size:0})}function D(e){t.activeTexture(33984),t.bindTexture(e.target,e.texture)}function R(){var e=xt[0];e?t.bindTexture(e.target,e.texture):t.bindTexture(3553,null)}function F(e){var r=e.texture,n=e.unit,a=e.target;0<=n&&(t.activeTexture(33984+n),t.bindTexture(a,null),xt[n]=null),t.deleteTexture(r),e.texture=null,e.params=null,e.pixels=null,e.refCount=0,delete mt[e.id],i.textureCount--}var B={"don't care":4352,"dont care":4352,nice:4354,fast:4353},N={repeat:10497,clamp:33071,mirror:33648},V={nearest:9728,linear:9729},U=j({mipmap:9987,"nearest mipmap nearest":9984,"linear mipmap nearest":9985,"nearest mipmap linear":9986,"linear mipmap linear":9987},V),q={none:0,browser:37444},H={uint8:5121,rgba4:32819,rgb565:33635,"rgb5 a1":32820},Y={alpha:6406,luminance:6409,"luminance alpha":6410,rgb:6407,rgba:6408,rgba4:32854,"rgb5 a1":32855,rgb565:36194},K={};e.ext_srgb&&(Y.srgb=35904,Y.srgba=35906),e.oes_texture_float&&(H.float32=H.float=5126),e.oes_texture_half_float&&(H.float16=H["half float"]=36193),e.webgl_depth_texture&&(j(Y,{depth:6402,"depth stencil":34041}),j(H,{uint16:5123,uint32:5125,"depth stencil":34042})),e.webgl_compressed_texture_s3tc&&j(K,{"rgb s3tc dxt1":33776,"rgba s3tc dxt1":33777,"rgba s3tc dxt3":33778,"rgba s3tc dxt5":33779}),e.webgl_compressed_texture_atc&&j(K,{"rgb atc":35986,"rgba atc explicit alpha":35987,"rgba atc interpolated alpha":34798}),e.webgl_compressed_texture_pvrtc&&j(K,{"rgb pvrtc 4bppv1":35840,"rgb pvrtc 2bppv1":35841,"rgba pvrtc 4bppv1":35842,"rgba pvrtc 2bppv1":35843}),e.webgl_compressed_texture_etc1&&(K["rgb etc1"]=36196);var Q=Array.prototype.slice.call(t.getParameter(34467));Object.keys(K).forEach(function(t){var e=K[t];0<=Q.indexOf(e)&&(Y[t]=e)});var $=Object.keys(Y);r.textureFormats=$;var tt=[];Object.keys(Y).forEach(function(t){tt[Y[t]]=t});var et=[];Object.keys(H).forEach(function(t){et[H[t]]=t});var rt=[];Object.keys(V).forEach(function(t){rt[V[t]]=t});var nt=[];Object.keys(U).forEach(function(t){nt[U[t]]=t});var at=[];Object.keys(N).forEach(function(t){at[N[t]]=t});var pt=$.reduce(function(t,e){var r=Y[e];return 6409===r||6406===r||6409===r||6410===r||6402===r||34041===r?t[r]=r:32855===r||0<=e.indexOf("rgba")?t[r]=6408:t[r]=6407,t},{}),dt=[],gt=[],vt=0,mt={},yt=r.maxTextureUnits,xt=Array(yt).map(function(){return null});return j(I.prototype,{bind:function(){this.bindCount+=1;var e=this.unit;if(0>e){for(var r=0;r<yt;++r){var n=xt[r];if(n){if(0<n.bindCount)continue;n.unit=-1}xt[r]=this,e=r;break}o.profile&&i.maxTextureUnits<e+1&&(i.maxTextureUnits=e+1),this.unit=e,t.activeTexture(33984+e),t.bindTexture(this.target,this.texture)}return e},unbind:function(){--this.bindCount},decRef:function(){0>=--this.refCount&&F(this)}}),o.profile&&(i.getTotalTextureSize=function(){var t=0;return Object.keys(mt).forEach(function(e){t+=mt[e].stats.size}),t}),{create2D:function(e,r){function n(t,e){var r=a.texInfo;P.call(r);var i=L();return"number"==typeof t?A(i,0|t,"number"==typeof e?0|e:0|t):t?(O(r,t),S(i,t)):A(i,1,1),r.genMipmaps&&(i.mipmask=(i.width<<1)-1),a.mipmask=i.mipmask,c(a,i),a.internalformat=i.internalformat,n.width=i.width,n.height=i.height,D(a),E(i,3553),z(r,3553),R(),C(i),o.profile&&(a.stats.size=k(a.internalformat,a.type,i.width,i.height,r.genMipmaps,!1)),n.format=tt[a.internalformat],n.type=et[a.type],n.mag=rt[r.magFilter],n.min=nt[r.minFilter],n.wrapS=at[r.wrapS],n.wrapT=at[r.wrapT],n}var a=new I(3553);return mt[a.id]=a,i.textureCount++,n(e,r),n.subimage=function(t,e,r,i){e|=0,r|=0,i|=0;var o=m();return c(o,a),o.width=0,o.height=0,p(o,t),o.width=o.width||(a.width>>i)-e,o.height=o.height||(a.height>>i)-r,D(a),d(o,3553,e,r,i),R(),T(o),n},n.resize=function(e,r){var i=0|e,s=0|r||i;if(i===a.width&&s===a.height)return n;n.width=a.width=i,n.height=a.height=s,D(a);for(var l,c=a.channels,u=a.type,h=0;a.mipmask>>h;++h){var f=i>>h,p=s>>h;if(!f||!p)break;l=G.zero.allocType(u,f*p*c),t.texImage2D(3553,h,a.format,f,p,0,a.format,a.type,l),l&&G.zero.freeType(l)}return R(),o.profile&&(a.stats.size=k(a.internalformat,a.type,i,s,!1,!1)),n},n._reglType="texture2d",n._texture=a,o.profile&&(n.stats=a.stats),n.destroy=function(){a.decRef()},n},createCube:function(e,r,n,a,s,l){function h(t,e,r,n,a,i){var s,l=f.texInfo;for(P.call(l),s=0;6>s;++s)g[s]=L();if("number"!=typeof t&&t){if("object"==typeof t)if(e)S(g[0],t),S(g[1],e),S(g[2],r),S(g[3],n),S(g[4],a),S(g[5],i);else if(O(l,t),u(f,t),"faces"in t)for(t=t.faces,s=0;6>s;++s)c(g[s],f),S(g[s],t[s]);else for(s=0;6>s;++s)S(g[s],t)}else for(t=0|t||1,s=0;6>s;++s)A(g[s],t,t);for(c(f,g[0]),f.mipmask=l.genMipmaps?(g[0].width<<1)-1:g[0].mipmask,f.internalformat=g[0].internalformat,h.width=g[0].width,h.height=g[0].height,D(f),s=0;6>s;++s)E(g[s],34069+s);for(z(l,34067),R(),o.profile&&(f.stats.size=k(f.internalformat,f.type,h.width,h.height,l.genMipmaps,!0)),h.format=tt[f.internalformat],h.type=et[f.type],h.mag=rt[l.magFilter],h.min=nt[l.minFilter],h.wrapS=at[l.wrapS],h.wrapT=at[l.wrapT],s=0;6>s;++s)C(g[s]);return h}var f=new I(34067);mt[f.id]=f,i.cubeCount++;var g=Array(6);return h(e,r,n,a,s,l),h.subimage=function(t,e,r,n,a){r|=0,n|=0,a|=0;var i=m();return c(i,f),i.width=0,i.height=0,p(i,e),i.width=i.width||(f.width>>a)-r,i.height=i.height||(f.height>>a)-n,D(f),d(i,34069+t,r,n,a),R(),T(i),h},h.resize=function(e){if((e|=0)!==f.width){h.width=f.width=e,h.height=f.height=e,D(f);for(var r=0;6>r;++r)for(var n=0;f.mipmask>>n;++n)t.texImage2D(34069+r,n,f.format,e>>n,e>>n,0,f.format,f.type,null);return R(),o.profile&&(f.stats.size=k(f.internalformat,f.type,h.width,h.height,!1,!0)),h}},h._reglType="textureCube",h._texture=f,o.profile&&(h.stats=f.stats),h.destroy=function(){f.decRef()},h},clear:function(){for(var e=0;e<yt;++e)t.activeTexture(33984+e),t.bindTexture(3553,null),xt[e]=null;X(mt).forEach(F),i.cubeCount=0,i.textureCount=0},getTexture:function(t){return null},restore:function(){for(var e=0;e<yt;++e){var r=xt[e];r&&(r.bindCount=0,r.unit=-1,xt[e]=null)}X(mt).forEach(function(e){e.texture=t.createTexture(),t.bindTexture(e.target,e.texture);for(var r=0;32>r;++r)if(0!=(e.mipmask&1<<r))if(3553===e.target)t.texImage2D(3553,r,e.internalformat,e.width>>r,e.height>>r,0,e.internalformat,e.type,null);else for(var n=0;6>n;++n)t.texImage2D(34069+n,r,e.internalformat,e.width>>r,e.height>>r,0,e.internalformat,e.type,null);z(e.texInfo,e.target)})}}}function M(t,e,r,n,a,i){function o(t,e,r){this.target=t,this.texture=e,this.renderbuffer=r;var n=t=0;e?(t=e.width,n=e.height):r&&(t=r.width,n=r.height),this.width=t,this.height=n}function s(t){t&&(t.texture&&t.texture._texture.decRef(),t.renderbuffer&&t.renderbuffer._renderbuffer.decRef())}function l(t,e,r){t&&(t.texture?t.texture._texture.refCount+=1:t.renderbuffer._renderbuffer.refCount+=1)}function c(e,r){r&&(r.texture?t.framebufferTexture2D(36160,e,r.target,r.texture._texture.texture,0):t.framebufferRenderbuffer(36160,e,36161,r.renderbuffer._renderbuffer.renderbuffer))}function u(t){var e=3553,r=null,n=null,a=t;return"object"==typeof t&&(a=t.data,"target"in t&&(e=0|t.target)),"texture2d"===(t=a._reglType)?r=a:"textureCube"===t?r=a:"renderbuffer"===t&&(n=a,e=36161),new o(e,r,n)}function h(t,e,r,i,s){return r?((t=n.create2D({width:t,height:e,format:i,type:s}))._texture.refCount=0,new o(3553,t,null)):((t=a.create({width:t,height:e,format:i}))._renderbuffer.refCount=0,new o(36161,null,t))}function f(t){return t&&(t.texture||t.renderbuffer)}function p(t,e,r){t&&(t.texture?t.texture.resize(e,r):t.renderbuffer&&t.renderbuffer.resize(e,r),t.width=e,t.height=r)}function d(){this.id=k++,T[this.id]=this,this.framebuffer=t.createFramebuffer(),this.height=this.width=0,this.colorAttachments=[],this.depthStencilAttachment=this.stencilAttachment=this.depthAttachment=null}function g(t){t.colorAttachments.forEach(s),s(t.depthAttachment),s(t.stencilAttachment),s(t.depthStencilAttachment)}function v(e){t.deleteFramebuffer(e.framebuffer),e.framebuffer=null,i.framebufferCount--,delete T[e.id]}function m(e){var n;t.bindFramebuffer(36160,e.framebuffer);var a=e.colorAttachments;for(n=0;n<a.length;++n)c(36064+n,a[n]);for(n=a.length;n<r.maxColorAttachments;++n)t.framebufferTexture2D(36160,36064+n,3553,null,0);t.framebufferTexture2D(36160,33306,3553,null,0),t.framebufferTexture2D(36160,36096,3553,null,0),t.framebufferTexture2D(36160,36128,3553,null,0),c(36096,e.depthAttachment),c(36128,e.stencilAttachment),c(33306,e.depthStencilAttachment),t.checkFramebufferStatus(36160),t.isContextLost(),t.bindFramebuffer(36160,x.next?x.next.framebuffer:null),x.cur=x.next,t.getError()}function y(t,e){function r(t,e){var a,i=0,o=0,s=!0,c=!0;a=null;var p=!0,d="rgba",v="uint8",y=1,x=null,w=null,k=null,T=!1;"number"==typeof t?(i=0|t,o=0|e||i):t?("shape"in t?(i=(o=t.shape)[0],o=o[1]):("radius"in t&&(i=o=t.radius),"width"in t&&(i=t.width),"height"in t&&(o=t.height)),("color"in t||"colors"in t)&&(a=t.color||t.colors,Array.isArray(a)),a||("colorCount"in t&&(y=0|t.colorCount),"colorTexture"in t&&(p=!!t.colorTexture,d="rgba4"),"colorType"in t&&(v=t.colorType,!p)&&("half float"===v||"float16"===v?d="rgba16f":"float"!==v&&"float32"!==v||(d="rgba32f")),"colorFormat"in t&&(d=t.colorFormat,0<=b.indexOf(d)?p=!0:0<=_.indexOf(d)&&(p=!1))),("depthTexture"in t||"depthStencilTexture"in t)&&(T=!(!t.depthTexture&&!t.depthStencilTexture)),"depth"in t&&("boolean"==typeof t.depth?s=t.depth:(x=t.depth,c=!1)),"stencil"in t&&("boolean"==typeof t.stencil?c=t.stencil:(w=t.stencil,s=!1)),"depthStencil"in t&&("boolean"==typeof t.depthStencil?s=c=t.depthStencil:(k=t.depthStencil,c=s=!1))):i=o=1;var M=null,A=null,S=null,E=null;if(Array.isArray(a))M=a.map(u);else if(a)M=[u(a)];else for(M=Array(y),a=0;a<y;++a)M[a]=h(i,o,p,d,v);for(i=i||M[0].width,o=o||M[0].height,x?A=u(x):s&&!c&&(A=h(i,o,T,"depth","uint32")),w?S=u(w):c&&!s&&(S=h(i,o,!1,"stencil","uint8")),k?E=u(k):!x&&!w&&c&&s&&(E=h(i,o,T,"depth stencil","depth stencil")),s=null,a=0;a<M.length;++a)l(M[a]),M[a]&&M[a].texture&&(c=yt[M[a].texture._texture.format]*xt[M[a].texture._texture.type],null===s&&(s=c));return l(A),l(S),l(E),g(n),n.width=i,n.height=o,n.colorAttachments=M,n.depthAttachment=A,n.stencilAttachment=S,n.depthStencilAttachment=E,r.color=M.map(f),r.depth=f(A),r.stencil=f(S),r.depthStencil=f(E),r.width=n.width,r.height=n.height,m(n),r}var n=new d;return i.framebufferCount++,r(t,e),j(r,{resize:function(t,e){var a=Math.max(0|t,1),i=Math.max(0|e||a,1);if(a===n.width&&i===n.height)return r;for(var o=n.colorAttachments,s=0;s<o.length;++s)p(o[s],a,i);return p(n.depthAttachment,a,i),p(n.stencilAttachment,a,i),p(n.depthStencilAttachment,a,i),n.width=r.width=a,n.height=r.height=i,m(n),r},_reglType:"framebuffer",_framebuffer:n,destroy:function(){v(n),g(n)},use:function(t){x.setFBO({framebuffer:r},t)}})}var x={cur:null,next:null,dirty:!1,setFBO:null},b=["rgba"],_=["rgba4","rgb565","rgb5 a1"];e.ext_srgb&&_.push("srgba"),e.ext_color_buffer_half_float&&_.push("rgba16f","rgb16f"),e.webgl_color_buffer_float&&_.push("rgba32f");var w=["uint8"];e.oes_texture_half_float&&w.push("half float","float16"),e.oes_texture_float&&w.push("float","float32");var k=0,T={};return j(x,{getFramebuffer:function(t){return"function"==typeof t&&"framebuffer"===t._reglType&&(t=t._framebuffer)instanceof d?t:null},create:y,createCube:function(t){function e(t){var a,i={color:null},o=0,s=null;a="rgba";var l="uint8",c=1;if("number"==typeof t?o=0|t:t?("shape"in t?o=t.shape[0]:("radius"in t&&(o=0|t.radius),"width"in t?o=0|t.width:"height"in t&&(o=0|t.height)),("color"in t||"colors"in t)&&(s=t.color||t.colors,Array.isArray(s)),s||("colorCount"in t&&(c=0|t.colorCount),"colorType"in t&&(l=t.colorType),"colorFormat"in t&&(a=t.colorFormat)),"depth"in t&&(i.depth=t.depth),"stencil"in t&&(i.stencil=t.stencil),"depthStencil"in t&&(i.depthStencil=t.depthStencil)):o=1,s)if(Array.isArray(s))for(t=[],a=0;a<s.length;++a)t[a]=s[a];else t=[s];else for(t=Array(c),s={radius:o,format:a,type:l},a=0;a<c;++a)t[a]=n.createCube(s);for(i.color=Array(t.length),a=0;a<t.length;++a)c=t[a],o=o||c.width,i.color[a]={target:34069,data:t[a]};for(a=0;6>a;++a){for(c=0;c<t.length;++c)i.color[c].target=34069+a;0<a&&(i.depth=r[0].depth,i.stencil=r[0].stencil,i.depthStencil=r[0].depthStencil),r[a]?r[a](i):r[a]=y(i)}return j(e,{width:o,height:o,color:t})}var r=Array(6);return e(t),j(e,{faces:r,resize:function(t){var n=0|t;if(n===e.width)return e;var a=e.color;for(t=0;t<a.length;++t)a[t].resize(n);for(t=0;6>t;++t)r[t].resize(n);return e.width=e.height=n,e},_reglType:"framebufferCube",destroy:function(){r.forEach(function(t){t.destroy()})}})},clear:function(){X(T).forEach(v)},restore:function(){x.cur=null,x.next=null,x.dirty=!0,X(T).forEach(function(e){e.framebuffer=t.createFramebuffer(),m(e)})}})}function A(){this.w=this.z=this.y=this.x=this.state=0,this.buffer=null,this.size=0,this.normalized=!1,this.type=5126,this.divisor=this.stride=this.offset=0}function S(t,e,r,n){function a(t,e,r,n){this.name=t,this.id=e,this.location=r,this.info=n}function i(t,e){for(var r=0;r<t.length;++r)if(t[r].id===e.id)return void(t[r].location=e.location);t.push(e)}function o(r,n,a){if(!(o=(a=35632===r?c:u)[n])){var i=e.str(n),o=t.createShader(r);t.shaderSource(o,i),t.compileShader(o),a[n]=o}return o}function s(t,e){this.id=p++,this.fragId=t,this.vertId=e,this.program=null,this.uniforms=[],this.attributes=[],n.profile&&(this.stats={uniformsCount:0,attributesCount:0})}function l(r,s){var l,c;l=o(35632,r.fragId),c=o(35633,r.vertId);var u=r.program=t.createProgram();t.attachShader(u,l),t.attachShader(u,c),t.linkProgram(u);var h=t.getProgramParameter(u,35718);n.profile&&(r.stats.uniformsCount=h);var f=r.uniforms;for(l=0;l<h;++l)if(c=t.getActiveUniform(u,l))if(1<c.size)for(var p=0;p<c.size;++p){var d=c.name.replace("[0]","["+p+"]");i(f,new a(d,e.id(d),t.getUniformLocation(u,d),c))}else i(f,new a(c.name,e.id(c.name),t.getUniformLocation(u,c.name),c));for(h=t.getProgramParameter(u,35721),n.profile&&(r.stats.attributesCount=h),f=r.attributes,l=0;l<h;++l)(c=t.getActiveAttrib(u,l))&&i(f,new a(c.name,e.id(c.name),t.getAttribLocation(u,c.name),c))}var c={},u={},h={},f=[],p=0;return n.profile&&(r.getMaxUniformsCount=function(){var t=0;return f.forEach(function(e){e.stats.uniformsCount>t&&(t=e.stats.uniformsCount)}),t},r.getMaxAttributesCount=function(){var t=0;return f.forEach(function(e){e.stats.attributesCount>t&&(t=e.stats.attributesCount)}),t}),{clear:function(){var e=t.deleteShader.bind(t);X(c).forEach(e),c={},X(u).forEach(e),u={},f.forEach(function(e){t.deleteProgram(e.program)}),f.length=0,h={},r.shaderCount=0},program:function(t,e,n){var a=h[e];a||(a=h[e]={});var i=a[t];return i||(i=new s(e,t),r.shaderCount++,l(i),a[t]=i,f.push(i)),i},restore:function(){c={},u={};for(var t=0;t<f.length;++t)l(f[t])},shader:o,frag:-1,vert:-1}}function E(t,e,r,n,a,i,o){function s(a){var i;i=null===e.next?5121:e.next.colorAttachments[0].texture._texture.type;var o=0,s=0,l=n.framebufferWidth,c=n.framebufferHeight,u=null;return W(a)?u=a:a&&(o=0|a.x,s=0|a.y,l=0|(a.width||n.framebufferWidth-o),c=0|(a.height||n.framebufferHeight-s),u=a.data||null),r(),a=l*c*4,u||(5121===i?u=new Uint8Array(a):5126===i&&(u=u||new Float32Array(a))),t.pixelStorei(3333,4),t.readPixels(o,s,l,c,6408,i,u),u}return function(t){return t&&"framebuffer"in t?function(t){var r;return e.setFBO({framebuffer:t.framebuffer},function(){r=s(t)}),r}(t):s(t)}}function L(t){return Array.prototype.slice.call(t)}function C(t){return L(t).join("")}function P(){function t(){var t=[],e=[];return j(function(){t.push.apply(t,L(arguments))},{def:function(){var n="v"+r++;return e.push(n),0<arguments.length&&(t.push(n,"="),t.push.apply(t,L(arguments)),t.push(";")),n},toString:function(){return C([0<e.length?"var "+e+";":"",C(t)])}})}function e(){function e(t,e){n(t,e,"=",r.def(t,e),";")}var r=t(),n=t(),a=r.toString,i=n.toString;return j(function(){r.apply(r,L(arguments))},{def:r.def,entry:r,exit:n,save:e,set:function(t,n,a){e(t,n),r(t,n,"=",a,";")},toString:function(){return a()+i()}})}var r=0,n=[],a=[],i=t(),o={};return{global:i,link:function(t){for(var e=0;e<a.length;++e)if(a[e]===t)return n[e];return e="g"+r++,n.push(e),a.push(t),e},block:t,proc:function(t,r){function n(){var t="a"+a.length;return a.push(t),t}var a=[];r=r||0;for(var i=0;i<r;++i)n();var s=(i=e()).toString;return o[t]=j(i,{arg:n,toString:function(){return C(["function(",a.join(),"){",s(),"}"])}})},scope:e,cond:function(){var t=C(arguments),r=e(),n=e(),a=r.toString,i=n.toString;return j(r,{then:function(){return r.apply(r,L(arguments)),this},else:function(){return n.apply(n,L(arguments)),this},toString:function(){var e=i();return e&&(e="else{"+e+"}"),C(["if(",t,"){",a(),"}",e])}})},compile:function(){var t=['"use strict";',i,"return {"];Object.keys(o).forEach(function(e){t.push('"',e,'":',o[e].toString(),",")}),t.push("}");var e=C(t).replace(/;/g,";\n").replace(/}/g,"}\n").replace(/{/g,"{\n");return Function.apply(null,n.concat(e)).apply(null,a)}}}function O(t){return Array.isArray(t)||W(t)||l(t)}function z(t){return t.sort(function(t,e){return"viewport"===t?-1:"viewport"===e?1:t<e?-1:1})}function I(t,e,r,n){this.thisDep=t,this.contextDep=e,this.propDep=r,this.append=n}function D(t){return t&&!(t.thisDep||t.contextDep||t.propDep)}function R(t){return new I(!1,!1,!1,t)}function F(t,e){var r=t.type;return 0===r?new I(!0,1<=(r=t.data.length),2<=r,e):4===r?new I((r=t.data).thisDep,r.contextDep,r.propDep,e):new I(3===r,2===r,1===r,e)}function B(t,e,r,n,a,o,s,l,c,u,h,f,p,d,g){function m(t){return t.replace(".","_")}function y(t,e,r){var n=m(t);nt.push(t),et[n]=tt[n]=!!r,at[n]=e}function x(t,e,r){var n=m(t);nt.push(t),Array.isArray(r)?(tt[n]=r.slice(),et[n]=r.slice()):tt[n]=et[n]=r,it[n]=e}function b(){var t=P(),r=t.link,n=t.global;t.id=lt++,t.batchId="0";var a=r(ot),i=t.shared={props:"a0"};Object.keys(ot).forEach(function(t){i[t]=n.def(a,".",t)});var o=t.next={},s=t.current={};Object.keys(it).forEach(function(t){Array.isArray(tt[t])&&(o[t]=n.def(i.next,".",t),s[t]=n.def(i.current,".",t))});var l=t.constants={};Object.keys(st).forEach(function(t){l[t]=n.def(JSON.stringify(st[t]))}),t.invoke=function(e,n){switch(n.type){case 0:var a=["this",i.context,i.props,t.batchId];return e.def(r(n.data),".call(",a.slice(0,Math.max(n.data.length+1,4)),")");case 1:return e.def(i.props,n.data);case 2:return e.def(i.context,n.data);case 3:return e.def("this",n.data);case 4:return n.data.append(t,e),n.data.ref}},t.attribCache={};var c={};return t.scopeAttrib=function(t){if((t=e.id(t))in c)return c[t];var n=u.scope[t];return n||(n=u.scope[t]=new Z),c[t]=r(n)},t}function _(t,e){var r=t.static,n=t.dynamic;if("framebuffer"in r){var a=r.framebuffer;return a?(a=l.getFramebuffer(a),R(function(t,e){var r=t.link(a),n=t.shared;return e.set(n.framebuffer,".next",r),n=n.context,e.set(n,".framebufferWidth",r+".width"),e.set(n,".framebufferHeight",r+".height"),r})):R(function(t,e){var r=t.shared;return e.set(r.framebuffer,".next","null"),r=r.context,e.set(r,".framebufferWidth",r+".drawingBufferWidth"),e.set(r,".framebufferHeight",r+".drawingBufferHeight"),"null"})}if("framebuffer"in n){var i=n.framebuffer;return F(i,function(t,e){var r=t.invoke(e,i),n=t.shared,a=n.framebuffer;r=e.def(a,".getFramebuffer(",r,")");return e.set(a,".next",r),n=n.context,e.set(n,".framebufferWidth",r+"?"+r+".width:"+n+".drawingBufferWidth"),e.set(n,".framebufferHeight",r+"?"+r+".height:"+n+".drawingBufferHeight"),r})}return null}function w(t){function r(t){if(t in n){var r=e.id(n[t]);return(t=R(function(){return r})).id=r,t}if(t in a){var i=a[t];return F(i,function(t,e){var r=t.invoke(e,i);return e.def(t.shared.strings,".id(",r,")")})}return null}var n=t.static,a=t.dynamic,i=r("frag"),o=r("vert"),s=null;return D(i)&&D(o)?(s=h.program(o.id,i.id),t=R(function(t,e){return t.link(s)})):t=new I(i&&i.thisDep||o&&o.thisDep,i&&i.contextDep||o&&o.contextDep,i&&i.propDep||o&&o.propDep,function(t,e){var r,n,a=t.shared.shader;return r=i?i.append(t,e):e.def(a,".","frag"),n=o?o.append(t,e):e.def(a,".","vert"),e.def(a+".program("+n+","+r+")")}),{frag:i,vert:o,progVar:t,program:s}}function k(t,e){function r(t,e){if(t in n){var r=0|n[t];return R(function(t,n){return e&&(t.OFFSET=r),r})}if(t in a){var o=a[t];return F(o,function(t,r){var n=t.invoke(r,o);return e&&(t.OFFSET=n),n})}return e&&i?R(function(t,e){return t.OFFSET="0",0}):null}var n=t.static,a=t.dynamic,i=function(){if("elements"in n){var t=n.elements;O(t)?t=o.getElements(o.create(t,!0)):t&&(t=o.getElements(t));var e=R(function(e,r){if(t){var n=e.link(t);return e.ELEMENTS=n}return e.ELEMENTS=null});return e.value=t,e}if("elements"in a){var r=a.elements;return F(r,function(t,e){var n=(a=t.shared).isBufferArgs,a=a.elements,i=t.invoke(e,r),o=e.def("null");n=e.def(n,"(",i,")"),i=t.cond(n).then(o,"=",a,".createStream(",i,");").else(o,"=",a,".getElements(",i,");");return e.entry(i),e.exit(t.cond(n).then(a,".destroyStream(",o,");")),t.ELEMENTS=o})}return null}(),s=r("offset",!0);return{elements:i,primitive:function(){if("primitive"in n){var t=n.primitive;return R(function(e,r){return rt[t]})}if("primitive"in a){var e=a.primitive;return F(e,function(t,r){var n=t.constants.primTypes,a=t.invoke(r,e);return r.def(n,"[",a,"]")})}return i?D(i)?i.value?R(function(t,e){return e.def(t.ELEMENTS,".primType")}):R(function(){return 4}):new I(i.thisDep,i.contextDep,i.propDep,function(t,e){var r=t.ELEMENTS;return e.def(r,"?",r,".primType:",4)}):null}(),count:function(){if("count"in n){var t=0|n.count;return R(function(){return t})}if("count"in a){var e=a.count;return F(e,function(t,r){return t.invoke(r,e)})}return i?D(i)?i?s?new I(s.thisDep,s.contextDep,s.propDep,function(t,e){return e.def(t.ELEMENTS,".vertCount-",t.OFFSET)}):R(function(t,e){return e.def(t.ELEMENTS,".vertCount")}):R(function(){return-1}):new I(i.thisDep||s.thisDep,i.contextDep||s.contextDep,i.propDep||s.propDep,function(t,e){var r=t.ELEMENTS;return t.OFFSET?e.def(r,"?",r,".vertCount-",t.OFFSET,":-1"):e.def(r,"?",r,".vertCount:-1")}):null}(),instances:r("instances",!1),offset:s}}function T(t,r){var n=t.static,i=t.dynamic,o={};return Object.keys(n).forEach(function(t){var r=n[t],i=e.id(t),s=new Z;if(O(r))s.state=1,s.buffer=a.getBuffer(a.create(r,34962,!1,!0)),s.type=0;else if(c=a.getBuffer(r))s.state=1,s.buffer=c,s.type=0;else if("constant"in r){var l=r.constant;s.buffer="null",s.state=2,"number"==typeof l?s.x=l:bt.forEach(function(t,e){e<l.length&&(s[t]=l[e])})}else{var c=O(r.buffer)?a.getBuffer(a.create(r.buffer,34962,!1,!0)):a.getBuffer(r.buffer),u=0|r.offset,h=0|r.stride,f=0|r.size,p=!!r.normalized,d=0;"type"in r&&(d=K[r.type]),r=0|r.divisor,s.buffer=c,s.state=1,s.size=f,s.normalized=p,s.type=d||c.dtype,s.offset=u,s.stride=h,s.divisor=r}o[t]=R(function(t,e){var r=t.attribCache;if(i in r)return r[i];var n={isStream:!1};return Object.keys(s).forEach(function(t){n[t]=s[t]}),s.buffer&&(n.buffer=t.link(s.buffer),n.type=n.type||n.buffer+".dtype"),r[i]=n})}),Object.keys(i).forEach(function(t){var e=i[t];o[t]=F(e,function(t,r){function n(t){r(l[t],"=",a,".",t,"|0;")}var a=t.invoke(r,e),i=t.shared,o=i.isBufferArgs,s=i.buffer,l={isStream:r.def(!1)},c=new Z;c.state=1,Object.keys(c).forEach(function(t){l[t]=r.def(""+c[t])});var u=l.buffer,h=l.type;return r("if(",o,"(",a,")){",l.isStream,"=true;",u,"=",s,".createStream(",34962,",",a,");",h,"=",u,".dtype;","}else{",u,"=",s,".getBuffer(",a,");","if(",u,"){",h,"=",u,".dtype;",'}else if("constant" in ',a,"){",l.state,"=",2,";","if(typeof "+a+'.constant === "number"){',l[bt[0]],"=",a,".constant;",bt.slice(1).map(function(t){return l[t]}).join("="),"=0;","}else{",bt.map(function(t,e){return l[t]+"="+a+".constant.length>"+e+"?"+a+".constant["+e+"]:0;"}).join(""),"}}else{","if(",o,"(",a,".buffer)){",u,"=",s,".createStream(",34962,",",a,".buffer);","}else{",u,"=",s,".getBuffer(",a,".buffer);","}",h,'="type" in ',a,"?",i.glTypes,"[",a,".type]:",u,".dtype;",l.normalized,"=!!",a,".normalized;"),n("size"),n("offset"),n("stride"),n("divisor"),r("}}"),r.exit("if(",l.isStream,"){",s,".destroyStream(",u,");","}"),l})}),o}function M(t,e,r,n,a){var o=_(t),s=function(t,e,r){function n(t){if(t in a){var r=a[t];t=!0;var n,o,s=0|r.x,l=0|r.y;return"width"in r?n=0|r.width:t=!1,"height"in r?o=0|r.height:t=!1,new I(!t&&e&&e.thisDep,!t&&e&&e.contextDep,!t&&e&&e.propDep,function(t,e){var a=t.shared.context,i=n;"width"in r||(i=e.def(a,".","framebufferWidth","-",s));var c=o;return"height"in r||(c=e.def(a,".","framebufferHeight","-",l)),[s,l,i,c]})}if(t in i){var c=i[t];return t=F(c,function(t,e){var r=t.invoke(e,c),n=t.shared.context,a=e.def(r,".x|0"),i=e.def(r,".y|0");return[a,i,e.def('"width" in ',r,"?",r,".width|0:","(",n,".","framebufferWidth","-",a,")"),r=e.def('"height" in ',r,"?",r,".height|0:","(",n,".","framebufferHeight","-",i,")")]}),e&&(t.thisDep=t.thisDep||e.thisDep,t.contextDep=t.contextDep||e.contextDep,t.propDep=t.propDep||e.propDep),t}return e?new I(e.thisDep,e.contextDep,e.propDep,function(t,e){var r=t.shared.context;return[0,0,e.def(r,".","framebufferWidth"),e.def(r,".","framebufferHeight")]}):null}var a=t.static,i=t.dynamic;if(t=n("viewport")){var o=t;t=new I(t.thisDep,t.contextDep,t.propDep,function(t,e){var r=o.append(t,e),n=t.shared.context;return e.set(n,".viewportWidth",r[2]),e.set(n,".viewportHeight",r[3]),r})}return{viewport:t,scissor_box:n("scissor.box")}}(t,o),l=k(t),c=function(t,e){var r=t.static,n=t.dynamic,a={};return nt.forEach(function(t){function e(e,i){if(t in r){var s=e(r[t]);a[o]=R(function(){return s})}else if(t in n){var l=n[t];a[o]=F(l,function(t,e){return i(t,e,t.invoke(e,l))})}}var o=m(t);switch(t){case"cull.enable":case"blend.enable":case"dither":case"stencil.enable":case"depth.enable":case"scissor.enable":case"polygonOffset.enable":case"sample.alpha":case"sample.enable":case"depth.mask":return e(function(t){return t},function(t,e,r){return r});case"depth.func":return e(function(t){return kt[t]},function(t,e,r){return e.def(t.constants.compareFuncs,"[",r,"]")});case"depth.range":return e(function(t){return t},function(t,e,r){return[e.def("+",r,"[0]"),e=e.def("+",r,"[1]")]});case"blend.func":return e(function(t){return[wt["srcRGB"in t?t.srcRGB:t.src],wt["dstRGB"in t?t.dstRGB:t.dst],wt["srcAlpha"in t?t.srcAlpha:t.src],wt["dstAlpha"in t?t.dstAlpha:t.dst]]},function(t,e,r){function n(t,n){return e.def('"',t,n,'" in ',r,"?",r,".",t,n,":",r,".",t)}t=t.constants.blendFuncs;var a=n("src","RGB"),i=n("dst","RGB"),o=(a=e.def(t,"[",a,"]"),e.def(t,"[",n("src","Alpha"),"]"));return[a,i=e.def(t,"[",i,"]"),o,t=e.def(t,"[",n("dst","Alpha"),"]")]});case"blend.equation":return e(function(t){return"string"==typeof t?[J[t],J[t]]:"object"==typeof t?[J[t.rgb],J[t.alpha]]:void 0},function(t,e,r){var n=t.constants.blendEquations,a=e.def(),i=e.def();return(t=t.cond("typeof ",r,'==="string"')).then(a,"=",i,"=",n,"[",r,"];"),t.else(a,"=",n,"[",r,".rgb];",i,"=",n,"[",r,".alpha];"),e(t),[a,i]});case"blend.color":return e(function(t){return i(4,function(e){return+t[e]})},function(t,e,r){return i(4,function(t){return e.def("+",r,"[",t,"]")})});case"stencil.mask":return e(function(t){return 0|t},function(t,e,r){return e.def(r,"|0")});case"stencil.func":return e(function(t){return[kt[t.cmp||"keep"],t.ref||0,"mask"in t?t.mask:-1]},function(t,e,r){return[t=e.def('"cmp" in ',r,"?",t.constants.compareFuncs,"[",r,".cmp]",":",7680),e.def(r,".ref|0"),e=e.def('"mask" in ',r,"?",r,".mask|0:-1")]});case"stencil.opFront":case"stencil.opBack":return e(function(e){return["stencil.opBack"===t?1029:1028,Tt[e.fail||"keep"],Tt[e.zfail||"keep"],Tt[e.zpass||"keep"]]},function(e,r,n){function a(t){return r.def('"',t,'" in ',n,"?",i,"[",n,".",t,"]:",7680)}var i=e.constants.stencilOps;return["stencil.opBack"===t?1029:1028,a("fail"),a("zfail"),a("zpass")]});case"polygonOffset.offset":return e(function(t){return[0|t.factor,0|t.units]},function(t,e,r){return[e.def(r,".factor|0"),e=e.def(r,".units|0")]});case"cull.face":return e(function(t){var e=0;return"front"===t?e=1028:"back"===t&&(e=1029),e},function(t,e,r){return e.def(r,'==="front"?',1028,":",1029)});case"lineWidth":return e(function(t){return t},function(t,e,r){return r});case"frontFace":return e(function(t){return Mt[t]},function(t,e,r){return e.def(r+'==="cw"?2304:2305')});case"colorMask":return e(function(t){return t.map(function(t){return!!t})},function(t,e,r){return i(4,function(t){return"!!"+r+"["+t+"]"})});case"sample.coverage":return e(function(t){return["value"in t?t.value:1,!!t.invert]},function(t,e,r){return[e.def('"value" in ',r,"?+",r,".value:1"),e=e.def("!!",r,".invert")]})}}),a}(t),u=w(t),h=s.viewport;return h&&(c.viewport=h),(s=s[h=m("scissor.box")])&&(c[h]=s),(o={framebuffer:o,draw:l,shader:u,state:c,dirty:s=0<Object.keys(c).length}).profile=function(t){var e,r=t.static;if(t=t.dynamic,"profile"in r){var n=!!r.profile;(e=R(function(t,e){return n})).enable=n}else if("profile"in t){var a=t.profile;e=F(a,function(t,e){return t.invoke(e,a)})}return e}(t),o.uniforms=function(t,e){var r=t.static,n=t.dynamic,a={};return Object.keys(r).forEach(function(t){var e,n=r[t];if("number"==typeof n||"boolean"==typeof n)e=R(function(){return n});else if("function"==typeof n){var o=n._reglType;"texture2d"===o||"textureCube"===o?e=R(function(t){return t.link(n)}):"framebuffer"!==o&&"framebufferCube"!==o||(e=R(function(t){return t.link(n.color[0])}))}else v(n)&&(e=R(function(t){return t.global.def("[",i(n.length,function(t){return n[t]}),"]")}));e.value=n,a[t]=e}),Object.keys(n).forEach(function(t){var e=n[t];a[t]=F(e,function(t,r){return t.invoke(r,e)})}),a}(r),o.attributes=T(e),o.context=function(t){var e=t.static,r=t.dynamic,n={};return Object.keys(e).forEach(function(t){var r=e[t];n[t]=R(function(t,e){return"number"==typeof r||"boolean"==typeof r?""+r:t.link(r)})}),Object.keys(r).forEach(function(t){var e=r[t];n[t]=F(e,function(t,r){return t.invoke(r,e)})}),n}(n),o}function A(t,e,r){var n=t.shared.context,a=t.scope();Object.keys(r).forEach(function(i){e.save(n,"."+i),a(n,".",i,"=",r[i].append(t,e),";")}),e(a)}function S(t,e,r,n){var a,i=(s=t.shared).gl,o=s.framebuffer;$&&(a=e.def(s.extensions,".webgl_draw_buffers"));var s=(l=t.constants).drawBuffer,l=l.backBuffer;t=r?r.append(t,e):e.def(o,".next"),n||e("if(",t,"!==",o,".cur){"),e("if(",t,"){",i,".bindFramebuffer(",36160,",",t,".framebuffer);"),$&&e(a,".drawBuffersWEBGL(",s,"[",t,".colorAttachments.length]);"),e("}else{",i,".bindFramebuffer(",36160,",null);"),$&&e(a,".drawBuffersWEBGL(",l,");"),e("}",o,".cur=",t,";"),n||e("}")}function E(t,e,r){var n=t.shared,a=n.gl,o=t.current,s=t.next,l=n.current,c=n.next,u=t.cond(l,".dirty");nt.forEach(function(e){var n,h;if(!((e=m(e))in r.state))if(e in s){n=s[e],h=o[e];var f=i(tt[e].length,function(t){return u.def(n,"[",t,"]")});u(t.cond(f.map(function(t,e){return t+"!=="+h+"["+e+"]"}).join("||")).then(a,".",it[e],"(",f,");",f.map(function(t,e){return h+"["+e+"]="+t}).join(";"),";"))}else n=u.def(c,".",e),f=t.cond(n,"!==",l,".",e),u(f),e in at?f(t.cond(n).then(a,".enable(",at[e],");").else(a,".disable(",at[e],");"),l,".",e,"=",n,";"):f(a,".",it[e],"(",n,");",l,".",e,"=",n,";")}),0===Object.keys(r.state).length&&u(l,".dirty=false;"),e(u)}function L(t,e,r,n){var a=t.shared,i=t.current,o=a.current,s=a.gl;z(Object.keys(r)).forEach(function(a){var l=r[a];if(!n||n(l)){var c=l.append(t,e);if(at[a]){var u=at[a];D(l)?e(s,c?".enable(":".disable(",u,");"):e(t.cond(c).then(s,".enable(",u,");").else(s,".disable(",u,");")),e(o,".",a,"=",c,";")}else if(v(c)){var h=i[a];e(s,".",it[a],"(",c,");",c.map(function(t,e){return h+"["+e+"]="+t}).join(";"),";")}else e(s,".",it[a],"(",c,");",o,".",a,"=",c,";")}})}function C(t,e){Q&&(t.instancing=e.def(t.shared.extensions,".angle_instanced_arrays"))}function B(t,e,r,n,a){function i(){return"undefined"==typeof performance?"Date.now()":"performance.now()"}function o(t){t(c=e.def(),"=",i(),";"),"string"==typeof a?t(f,".count+=",a,";"):t(f,".count++;"),d&&(n?t(u=e.def(),"=",g,".getNumPendingQueries();"):t(g,".beginQuery(",f,");"))}function s(t){t(f,".cpuTime+=",i(),"-",c,";"),d&&(n?t(g,".pushScopeStats(",u,",",g,".getNumPendingQueries(),",f,");"):t(g,".endQuery();"))}function l(t){var r=e.def(p,".profile");e(p,".profile=",t,";"),e.exit(p,".profile=",r,";")}var c,u,h=t.shared,f=t.stats,p=h.current,g=h.timer;if(r=r.profile){if(D(r))return void(r.enable?(o(e),s(e.exit),l("true")):l("false"));l(r=r.append(t,e))}else r=e.def(p,".profile");o(h=t.block()),e("if(",r,"){",h,"}"),s(t=t.block()),e.exit("if(",r,"){",t,"}")}function N(t,e,r,n,a){function i(r,n,a){function i(){e("if(!",u,".buffer){",l,".enableVertexAttribArray(",c,");}");var r,i=a.type;r=a.size?e.def(a.size,"||",n):n,e("if(",u,".type!==",i,"||",u,".size!==",r,"||",p.map(function(t){return u+"."+t+"!=="+a[t]}).join("||"),"){",l,".bindBuffer(",34962,",",h,".buffer);",l,".vertexAttribPointer(",[c,r,i,a.normalized,a.stride,a.offset],");",u,".type=",i,";",u,".size=",r,";",p.map(function(t){return u+"."+t+"="+a[t]+";"}).join(""),"}"),Q&&(i=a.divisor,e("if(",u,".divisor!==",i,"){",t.instancing,".vertexAttribDivisorANGLE(",[c,i],");",u,".divisor=",i,";}"))}function s(){e("if(",u,".buffer){",l,".disableVertexAttribArray(",c,");","}if(",bt.map(function(t,e){return u+"."+t+"!=="+f[e]}).join("||"),"){",l,".vertexAttrib4f(",c,",",f,");",bt.map(function(t,e){return u+"."+t+"="+f[e]+";"}).join(""),"}")}var l=o.gl,c=e.def(r,".location"),u=e.def(o.attributes,"[",c,"]");r=a.state;var h=a.buffer,f=[a.x,a.y,a.z,a.w],p=["buffer","normalized","offset","stride"];1===r?i():2===r?s():(e("if(",r,"===",1,"){"),i(),e("}else{"),s(),e("}"))}var o=t.shared;n.forEach(function(n){var o,s=n.name,l=r.attributes[s];if(l){if(!a(l))return;o=l.append(t,e)}else{if(!a(At))return;var c=t.scopeAttrib(s);o={},Object.keys(new Z).forEach(function(t){o[t]=e.def(c,".",t)})}i(t.link(n),function(t){switch(t){case 35664:case 35667:case 35671:return 2;case 35665:case 35668:case 35672:return 3;case 35666:case 35669:case 35673:return 4;default:return 1}}(n.info.type),o)})}function j(t,r,n,a,o){for(var s,l=t.shared,c=l.gl,u=0;u<a.length;++u){var h,f=(g=a[u]).name,p=g.info.type,d=n.uniforms[f],g=t.link(g)+".location";if(d){if(!o(d))continue;if(D(d)){if(f=d.value,35678===p||35680===p)r(c,".uniform1i(",g,",",(p=t.link(f._texture||f.color[0]._texture))+".bind());"),r.exit(p,".unbind();");else if(35674===p||35675===p||35676===p)d=2,35675===p?d=3:35676===p&&(d=4),r(c,".uniformMatrix",d,"fv(",g,",false,",f=t.global.def("new Float32Array(["+Array.prototype.slice.call(f)+"])"),");");else{switch(p){case 5126:s="1f";break;case 35664:s="2f";break;case 35665:s="3f";break;case 35666:s="4f";break;case 35670:case 5124:s="1i";break;case 35671:case 35667:s="2i";break;case 35672:case 35668:s="3i";break;case 35673:s="4i";break;case 35669:s="4i"}r(c,".uniform",s,"(",g,",",v(f)?Array.prototype.slice.call(f):f,");")}continue}h=d.append(t,r)}else{if(!o(At))continue;h=r.def(l.uniforms,"[",e.id(f),"]")}switch(35678===p?r("if(",h,"&&",h,'._reglType==="framebuffer"){',h,"=",h,".color[0];","}"):35680===p&&r("if(",h,"&&",h,'._reglType==="framebufferCube"){',h,"=",h,".color[0];","}"),f=1,p){case 35678:case 35680:p=r.def(h,"._texture"),r(c,".uniform1i(",g,",",p,".bind());"),r.exit(p,".unbind();");continue;case 5124:case 35670:s="1i";break;case 35667:case 35671:s="2i",f=2;break;case 35668:case 35672:s="3i",f=3;break;case 35669:case 35673:s="4i",f=4;break;case 5126:s="1f";break;case 35664:s="2f",f=2;break;case 35665:s="3f",f=3;break;case 35666:s="4f",f=4;break;case 35674:s="Matrix2fv";break;case 35675:s="Matrix3fv";break;case 35676:s="Matrix4fv"}if(r(c,".uniform",s,"(",g,","),"M"===s.charAt(0)){g=Math.pow(p-35674+2,2);var m=t.global.def("new Float32Array(",g,")");r("false,(Array.isArray(",h,")||",h," instanceof Float32Array)?",h,":(",i(g,function(t){return m+"["+t+"]="+h+"["+t+"]"}),",",m,")")}else r(1<f?i(f,function(t){return h+"["+t+"]"}):h);r(");")}}function V(t,e,r,n){function a(a){var i=f[a];return i?i.contextDep&&n.contextDynamic||i.propDep?i.append(t,r):i.append(t,e):e.def(h,".",a)}function i(){function t(){r(l,".drawElementsInstancedANGLE(",[d,v,m,g+"<<(("+m+"-5121)>>1)",s],");")}function e(){r(l,".drawArraysInstancedANGLE(",[d,g,v,s],");")}p?y?t():(r("if(",p,"){"),t(),r("}else{"),e(),r("}")):e()}function o(){function t(){r(u+".drawElements("+[d,v,m,g+"<<(("+m+"-5121)>>1)"]+");")}function e(){r(u+".drawArrays("+[d,g,v]+");")}p?y?t():(r("if(",p,"){"),t(),r("}else{"),e(),r("}")):e()}var s,l,c=t.shared,u=c.gl,h=c.draw,f=n.draw,p=function(){var a=f.elements,i=e;return a?((a.contextDep&&n.contextDynamic||a.propDep)&&(i=r),a=a.append(t,i)):a=i.def(h,".","elements"),a&&i("if("+a+")"+u+".bindBuffer(34963,"+a+".buffer.buffer);"),a}(),d=a("primitive"),g=a("offset"),v=function(){var a=f.count,i=e;return a?((a.contextDep&&n.contextDynamic||a.propDep)&&(i=r),a=a.append(t,i)):a=i.def(h,".","count"),a}();if("number"==typeof v){if(0===v)return}else r("if(",v,"){"),r.exit("}");Q&&(s=a("instances"),l=t.instancing);var m=p+".type",y=f.elements&&D(f.elements);Q&&("number"!=typeof s||0<=s)?"string"==typeof s?(r("if(",s,">0){"),i(),r("}else if(",s,"<0){"),o(),r("}")):i():o()}function q(t,e,r,n,a){return a=(e=b()).proc("body",a),Q&&(e.instancing=a.def(e.shared.extensions,".angle_instanced_arrays")),t(e,a,r,n),e.compile().body}function H(t,e,r,n){C(t,e),N(t,e,r,n.attributes,function(){return!0}),j(t,e,r,n.uniforms,function(){return!0}),V(t,e,e,r)}function G(t,e,r,n){function a(){return!0}t.batchId="a1",C(t,e),N(t,e,r,n.attributes,a),j(t,e,r,n.uniforms,a),V(t,e,e,r)}function Y(t,e,r,n){function a(t){return t.contextDep&&o||t.propDep}function i(t){return!a(t)}C(t,e);var o=r.contextDep,s=e.def(),l=e.def();t.shared.props=l,t.batchId=s;var c=t.scope(),u=t.scope();e(c.entry,"for(",s,"=0;",s,"<","a1",";++",s,"){",l,"=","a0","[",s,"];",u,"}",c.exit),r.needsContext&&A(t,u,r.context),r.needsFramebuffer&&S(t,u,r.framebuffer),L(t,u,r.state,a),r.profile&&a(r.profile)&&B(t,u,r,!1,!0),n?(N(t,c,r,n.attributes,i),N(t,u,r,n.attributes,a),j(t,c,r,n.uniforms,i),j(t,u,r,n.uniforms,a),V(t,c,u,r)):(e=t.global.def("{}"),n=r.shader.progVar.append(t,u),l=u.def(n,".id"),c=u.def(e,"[",l,"]"),u(t.shared.gl,".useProgram(",n,".program);","if(!",c,"){",c,"=",e,"[",l,"]=",t.link(function(e){return q(G,t,r,e,2)}),"(",n,");}",c,".call(this,a0[",s,"],",s,");"))}function W(t,r){function n(e){var n=r.shader[e];n&&a.set(i.shader,"."+e,n.append(t,a))}var a=t.proc("scope",3);t.batchId="a2";var i=t.shared,o=i.current;A(t,a,r.context),r.framebuffer&&r.framebuffer.append(t,a),z(Object.keys(r.state)).forEach(function(e){var n=r.state[e].append(t,a);v(n)?n.forEach(function(r,n){a.set(t.next[e],"["+n+"]",r)}):a.set(i.next,"."+e,n)}),B(t,a,r,!0,!0),["elements","offset","count","instances","primitive"].forEach(function(e){var n=r.draw[e];n&&a.set(i.draw,"."+e,""+n.append(t,a))}),Object.keys(r.uniforms).forEach(function(n){a.set(i.uniforms,"["+e.id(n)+"]",r.uniforms[n].append(t,a))}),Object.keys(r.attributes).forEach(function(e){var n=r.attributes[e].append(t,a),i=t.scopeAttrib(e);Object.keys(new Z).forEach(function(t){a.set(i,"."+t,n[t])})}),n("vert"),n("frag"),0<Object.keys(r.state).length&&(a(o,".dirty=true;"),a.exit(o,".dirty=true;")),a("a1(",t.shared.context,",a0,",t.batchId,");")}function X(t,e,r){var n=e.static[r];if(n&&function(t){if("object"==typeof t&&!v(t)){for(var e=Object.keys(t),r=0;r<e.length;++r)if(U.isDynamic(t[e[r]]))return!0;return!1}}(n)){var a=t.global,i=Object.keys(n),o=!1,s=!1,l=!1,c=t.global.def("{}");i.forEach(function(e){var r=n[e];if(U.isDynamic(r))"function"==typeof r&&(r=n[e]=U.unbox(r)),e=F(r,null),o=o||e.thisDep,l=l||e.propDep,s=s||e.contextDep;else{switch(a(c,".",e,"="),typeof r){case"number":a(r);break;case"string":a('"',r,'"');break;case"object":Array.isArray(r)&&a("[",r.join(),"]");break;default:a(t.link(r))}a(";")}}),e.dynamic[r]=new U.DynamicVariable(4,{thisDep:o,contextDep:s,propDep:l,ref:c,append:function(t,e){i.forEach(function(r){var a=n[r];U.isDynamic(a)&&(a=t.invoke(e,a),e(c,".",r,"=",a,";"))})}}),delete e.static[r]}}var Z=u.Record,J={add:32774,subtract:32778,"reverse subtract":32779};r.ext_blend_minmax&&(J.min=32775,J.max=32776);var Q=r.angle_instanced_arrays,$=r.webgl_draw_buffers,tt={dirty:!0,profile:g.profile},et={},nt=[],at={},it={};y("dither",3024),y("blend.enable",3042),x("blend.color","blendColor",[0,0,0,0]),x("blend.equation","blendEquationSeparate",[32774,32774]),x("blend.func","blendFuncSeparate",[1,0,1,0]),y("depth.enable",2929,!0),x("depth.func","depthFunc",513),x("depth.range","depthRange",[0,1]),x("depth.mask","depthMask",!0),x("colorMask","colorMask",[!0,!0,!0,!0]),y("cull.enable",2884),x("cull.face","cullFace",1029),x("frontFace","frontFace",2305),x("lineWidth","lineWidth",1),y("polygonOffset.enable",32823),x("polygonOffset.offset","polygonOffset",[0,0]),y("sample.alpha",32926),y("sample.enable",32928),x("sample.coverage","sampleCoverage",[1,!1]),y("stencil.enable",2960),x("stencil.mask","stencilMask",-1),x("stencil.func","stencilFunc",[519,0,-1]),x("stencil.opFront","stencilOpSeparate",[1028,7680,7680,7680]),x("stencil.opBack","stencilOpSeparate",[1029,7680,7680,7680]),y("scissor.enable",3089),x("scissor.box","scissor",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]),x("viewport","viewport",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]);var ot={gl:t,context:p,strings:e,next:et,current:tt,draw:f,elements:o,buffer:a,shader:h,attributes:u.state,uniforms:c,framebuffer:l,extensions:r,timer:d,isBufferArgs:O},st={primTypes:rt,compareFuncs:kt,blendFuncs:wt,blendEquations:J,stencilOps:Tt,glTypes:K,orientationType:Mt};$&&(st.backBuffer=[1029],st.drawBuffer=i(n.maxDrawbuffers,function(t){return 0===t?[0]:i(t,function(t){return 36064+t})}));var lt=0;return{next:et,current:tt,procs:function(){var t=b(),e=t.proc("poll"),r=t.proc("refresh"),a=t.block();e(a),r(a);var o,s=t.shared,l=s.gl,c=s.next,u=s.current;a(u,".dirty=false;"),S(t,e),S(t,r,null,!0),Q&&(o=t.link(Q));for(var h=0;h<n.maxAttributes;++h){var f=r.def(s.attributes,"[",h,"]"),p=t.cond(f,".buffer");p.then(l,".enableVertexAttribArray(",h,");",l,".bindBuffer(",34962,",",f,".buffer.buffer);",l,".vertexAttribPointer(",h,",",f,".size,",f,".type,",f,".normalized,",f,".stride,",f,".offset);").else(l,".disableVertexAttribArray(",h,");",l,".vertexAttrib4f(",h,",",f,".x,",f,".y,",f,".z,",f,".w);",f,".buffer=null;"),r(p),Q&&r(o,".vertexAttribDivisorANGLE(",h,",",f,".divisor);")}return Object.keys(at).forEach(function(n){var i=at[n],o=a.def(c,".",n),s=t.block();s("if(",o,"){",l,".enable(",i,")}else{",l,".disable(",i,")}",u,".",n,"=",o,";"),r(s),e("if(",o,"!==",u,".",n,"){",s,"}")}),Object.keys(it).forEach(function(n){var o,s,h=it[n],f=tt[n],p=t.block();p(l,".",h,"("),v(f)?(h=f.length,o=t.global.def(c,".",n),s=t.global.def(u,".",n),p(i(h,function(t){return o+"["+t+"]"}),");",i(h,function(t){return s+"["+t+"]="+o+"["+t+"];"}).join("")),e("if(",i(h,function(t){return o+"["+t+"]!=="+s+"["+t+"]"}).join("||"),"){",p,"}")):(o=a.def(c,".",n),s=a.def(u,".",n),p(o,");",u,".",n,"=",o,";"),e("if(",o,"!==",s,"){",p,"}")),r(p)}),t.compile()}(),compile:function(t,e,r,n,a){var i=b();return i.stats=i.link(a),Object.keys(e.static).forEach(function(t){X(i,e,t)}),_t.forEach(function(e){X(i,t,e)}),r=M(t,e,r,n),function(t,e){var r=t.proc("draw",1);C(t,r),A(t,r,e.context),S(t,r,e.framebuffer),E(t,r,e),L(t,r,e.state),B(t,r,e,!1,!0);var n=e.shader.progVar.append(t,r);if(r(t.shared.gl,".useProgram(",n,".program);"),e.shader.program)H(t,r,e,e.shader.program);else{var a=t.global.def("{}"),i=r.def(n,".id"),o=r.def(a,"[",i,"]");r(t.cond(o).then(o,".call(this,a0);").else(o,"=",a,"[",i,"]=",t.link(function(r){return q(H,t,e,r,1)}),"(",n,");",o,".call(this,a0);"))}0<Object.keys(e.state).length&&r(t.shared.current,".dirty=true;")}(i,r),W(i,r),function(t,e){function r(t){return t.contextDep&&a||t.propDep}var n=t.proc("batch",2);t.batchId="0",C(t,n);var a=!1,i=!0;Object.keys(e.context).forEach(function(t){a=a||e.context[t].propDep}),a||(A(t,n,e.context),i=!1);var o=!1;if((s=e.framebuffer)?(s.propDep?a=o=!0:s.contextDep&&a&&(o=!0),o||S(t,n,s)):S(t,n,null),e.state.viewport&&e.state.viewport.propDep&&(a=!0),E(t,n,e),L(t,n,e.state,function(t){return!r(t)}),e.profile&&r(e.profile)||B(t,n,e,!1,"a1"),e.contextDep=a,e.needsContext=i,e.needsFramebuffer=o,(i=e.shader.progVar).contextDep&&a||i.propDep)Y(t,n,e,null);else if(i=i.append(t,n),n(t.shared.gl,".useProgram(",i,".program);"),e.shader.program)Y(t,n,e,e.shader.program);else{var s=t.global.def("{}"),l=(o=n.def(i,".id"),n.def(s,"[",o,"]"));n(t.cond(l).then(l,".call(this,a0,a1);").else(l,"=",s,"[",o,"]=",t.link(function(r){return q(Y,t,e,r,2)}),"(",i,");",l,".call(this,a0,a1);"))}0<Object.keys(e.state).length&&n(t.shared.current,".dirty=true;")}(i,r),i.compile()}}}function N(t,e){for(var r=0;r<t.length;++r)if(t[r]===e)return r;return-1}var j=function(t,e){for(var r=Object.keys(e),n=0;n<r.length;++n)t[r[n]]=e[r[n]];return t},V=0,U={DynamicVariable:t,define:function(r,n){return new t(r,e(n+""))},isDynamic:function(e){return"function"==typeof e&&!e._reglType||e instanceof t},unbox:function(e,r){return"function"==typeof e?new t(0,e):e},accessor:e},q={next:"function"==typeof requestAnimationFrame?function(t){return requestAnimationFrame(t)}:function(t){return setTimeout(t,16)},cancel:"function"==typeof cancelAnimationFrame?function(t){return cancelAnimationFrame(t)}:clearTimeout},H="undefined"!=typeof performance&&performance.now?function(){return performance.now()}:function(){return+new Date},G=s();G.zero=s();var Y=function(t,e){var r=1;e.ext_texture_filter_anisotropic&&(r=t.getParameter(34047));var n=1,a=1;e.webgl_draw_buffers&&(n=t.getParameter(34852),a=t.getParameter(36063));var i=!!e.oes_texture_float;if(i){i=t.createTexture(),t.bindTexture(3553,i),t.texImage2D(3553,0,6408,1,1,0,6408,5126,null);var o=t.createFramebuffer();if(t.bindFramebuffer(36160,o),t.framebufferTexture2D(36160,36064,3553,i,0),t.bindTexture(3553,null),36053!==t.checkFramebufferStatus(36160))i=!1;else{t.viewport(0,0,1,1),t.clearColor(1,0,0,1),t.clear(16384);var s=G.allocType(5126,4);t.readPixels(0,0,1,1,6408,5126,s),t.getError()?i=!1:(t.deleteFramebuffer(o),t.deleteTexture(i),i=1===s[0]),G.freeType(s)}}return s=!0,"undefined"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\//.test(navigator.appVersion)||/Edge/.test(navigator.userAgent))||(s=t.createTexture(),o=G.allocType(5121,36),t.activeTexture(33984),t.bindTexture(34067,s),t.texImage2D(34069,0,6408,3,3,0,6408,5121,o),G.freeType(o),t.bindTexture(34067,null),t.deleteTexture(s),s=!t.getError()),{colorBits:[t.getParameter(3410),t.getParameter(3411),t.getParameter(3412),t.getParameter(3413)],depthBits:t.getParameter(3414),stencilBits:t.getParameter(3415),subpixelBits:t.getParameter(3408),extensions:Object.keys(e).filter(function(t){return!!e[t]}),maxAnisotropic:r,maxDrawbuffers:n,maxColorAttachments:a,pointSizeDims:t.getParameter(33901),lineWidthDims:t.getParameter(33902),maxViewportDims:t.getParameter(3386),maxCombinedTextureUnits:t.getParameter(35661),maxCubeMapSize:t.getParameter(34076),maxRenderbufferSize:t.getParameter(34024),maxTextureUnits:t.getParameter(34930),maxTextureSize:t.getParameter(3379),maxAttributes:t.getParameter(34921),maxVertexUniforms:t.getParameter(36347),maxVertexTextureUnits:t.getParameter(35660),maxVaryingVectors:t.getParameter(36348),maxFragmentUniforms:t.getParameter(36349),glsl:t.getParameter(35724),renderer:t.getParameter(7937),vendor:t.getParameter(7936),version:t.getParameter(7938),readFloat:i,npotTextureCube:s}},W=function(t){return t instanceof Uint8Array||t instanceof Uint16Array||t instanceof Uint32Array||t instanceof Int8Array||t instanceof Int16Array||t instanceof Int32Array||t instanceof Float32Array||t instanceof Float64Array||t instanceof Uint8ClampedArray},X=function(t){return Object.keys(t).map(function(e){return t[e]})},Z={shape:function(t){for(var e=[];t.length;t=t[0])e.push(t.length);return e},flatten:function(t,e,r,n){var a=1;if(e.length)for(var i=0;i<e.length;++i)a*=e[i];else a=0;switch(r=n||G.allocType(r,a),e.length){case 0:break;case 1:for(n=e[0],e=0;e<n;++e)r[e]=t[e];break;case 2:for(n=e[0],e=e[1],i=a=0;i<n;++i)for(var o=t[i],s=0;s<e;++s)r[a++]=o[s];break;case 3:c(t,e[0],e[1],e[2],r,0);break;default:!function t(e,r,n,a,i){for(var o=1,s=n+1;s<r.length;++s)o*=r[s];var l=r[n];if(4==r.length-n){var u=r[n+1],h=r[n+2];for(r=r[n+3],s=0;s<l;++s)c(e[s],u,h,r,a,i),i+=o}else for(s=0;s<l;++s)t(e[s],r,n+1,a,i),i+=o}(t,e,0,r,0)}return r}},J={"[object Int8Array]":5120,"[object Int16Array]":5122,"[object Int32Array]":5124,"[object Uint8Array]":5121,"[object Uint8ClampedArray]":5121,"[object Uint16Array]":5123,"[object Uint32Array]":5125,"[object Float32Array]":5126,"[object Float64Array]":5121,"[object ArrayBuffer]":5121},K={int8:5120,int16:5122,int32:5124,uint8:5121,uint16:5123,uint32:5125,float:5126,float32:5126},Q={dynamic:35048,stream:35040,static:35044},$=Z.flatten,tt=Z.shape,et=[];et[5120]=1,et[5122]=2,et[5124]=4,et[5121]=1,et[5123]=2,et[5125]=4,et[5126]=4;var rt={points:0,point:0,lines:1,line:1,triangles:4,triangle:4,"line loop":2,"line strip":3,"triangle strip":5,"triangle fan":6},nt=new Float32Array(1),at=new Uint32Array(nt.buffer),it=[9984,9986,9985,9987],ot=[0,6409,6410,6407,6408],st={};st[6409]=st[6406]=st[6402]=1,st[34041]=st[6410]=2,st[6407]=st[35904]=3,st[6408]=st[35906]=4;var lt=m("HTMLCanvasElement"),ct=m("CanvasRenderingContext2D"),ut=m("ImageBitmap"),ht=m("HTMLImageElement"),ft=m("HTMLVideoElement"),pt=Object.keys(J).concat([lt,ct,ut,ht,ft]),dt=[];dt[5121]=1,dt[5126]=4,dt[36193]=2,dt[5123]=2,dt[5125]=4;var gt=[];gt[32854]=2,gt[32855]=2,gt[36194]=2,gt[34041]=4,gt[33776]=.5,gt[33777]=.5,gt[33778]=1,gt[33779]=1,gt[35986]=.5,gt[35987]=1,gt[34798]=1,gt[35840]=.5,gt[35841]=.25,gt[35842]=.5,gt[35843]=.25,gt[36196]=.5;var vt=[];vt[32854]=2,vt[32855]=2,vt[36194]=2,vt[33189]=2,vt[36168]=1,vt[34041]=4,vt[35907]=4,vt[34836]=16,vt[34842]=8,vt[34843]=6;var mt=function(t,e,r,n,a){function i(t){this.id=c++,this.refCount=1,this.renderbuffer=t,this.format=32854,this.height=this.width=0,a.profile&&(this.stats={size:0})}function o(e){var r=e.renderbuffer;t.bindRenderbuffer(36161,null),t.deleteRenderbuffer(r),e.renderbuffer=null,e.refCount=0,delete u[e.id],n.renderbufferCount--}var s={rgba4:32854,rgb565:36194,"rgb5 a1":32855,depth:33189,stencil:36168,"depth stencil":34041};e.ext_srgb&&(s.srgba=35907),e.ext_color_buffer_half_float&&(s.rgba16f=34842,s.rgb16f=34843),e.webgl_color_buffer_float&&(s.rgba32f=34836);var l=[];Object.keys(s).forEach(function(t){l[s[t]]=t});var c=0,u={};return i.prototype.decRef=function(){0>=--this.refCount&&o(this)},a.profile&&(n.getTotalRenderbufferSize=function(){var t=0;return Object.keys(u).forEach(function(e){t+=u[e].stats.size}),t}),{create:function(e,r){function o(e,r){var n=0,i=0,u=32854;if("object"==typeof e&&e?("shape"in e?(n=0|(i=e.shape)[0],i=0|i[1]):("radius"in e&&(n=i=0|e.radius),"width"in e&&(n=0|e.width),"height"in e&&(i=0|e.height)),"format"in e&&(u=s[e.format])):"number"==typeof e?(n=0|e,i="number"==typeof r?0|r:n):e||(n=i=1),n!==c.width||i!==c.height||u!==c.format)return o.width=c.width=n,o.height=c.height=i,c.format=u,t.bindRenderbuffer(36161,c.renderbuffer),t.renderbufferStorage(36161,u,n,i),a.profile&&(c.stats.size=vt[c.format]*c.width*c.height),o.format=l[c.format],o}var c=new i(t.createRenderbuffer());return u[c.id]=c,n.renderbufferCount++,o(e,r),o.resize=function(e,r){var n=0|e,i=0|r||n;return n===c.width&&i===c.height?o:(o.width=c.width=n,o.height=c.height=i,t.bindRenderbuffer(36161,c.renderbuffer),t.renderbufferStorage(36161,c.format,n,i),a.profile&&(c.stats.size=vt[c.format]*c.width*c.height),o)},o._reglType="renderbuffer",o._renderbuffer=c,a.profile&&(o.stats=c.stats),o.destroy=function(){c.decRef()},o},clear:function(){X(u).forEach(o)},restore:function(){X(u).forEach(function(e){e.renderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,e.renderbuffer),t.renderbufferStorage(36161,e.format,e.width,e.height)}),t.bindRenderbuffer(36161,null)}}},yt=[];yt[6408]=4,yt[6407]=3;var xt=[];xt[5121]=1,xt[5126]=4,xt[36193]=2;var bt=["x","y","z","w"],_t="blend.func blend.equation stencil.func stencil.opFront stencil.opBack sample.coverage viewport scissor.box polygonOffset.offset".split(" "),wt={0:0,1:1,zero:0,one:1,"src color":768,"one minus src color":769,"src alpha":770,"one minus src alpha":771,"dst color":774,"one minus dst color":775,"dst alpha":772,"one minus dst alpha":773,"constant color":32769,"one minus constant color":32770,"constant alpha":32771,"one minus constant alpha":32772,"src alpha saturate":776},kt={never:512,less:513,"<":513,equal:514,"=":514,"==":514,"===":514,lequal:515,"<=":515,greater:516,">":516,notequal:517,"!=":517,"!==":517,gequal:518,">=":518,always:519},Tt={0:0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,"increment wrap":34055,"decrement wrap":34056,invert:5386},Mt={cw:2304,ccw:2305},At=new I(!1,!1,!1,function(){});return function(t){function e(){if(0===Z.length)w&&w.update(),$=null;else{$=q.next(e),h();for(var t=Z.length-1;0<=t;--t){var r=Z[t];r&&r(P,null,0)}v.flush(),w&&w.update()}}function r(){!$&&0<Z.length&&($=q.next(e))}function n(){$&&(q.cancel(e),$=null)}function i(t){t.preventDefault(),n(),J.forEach(function(t){t()})}function o(t){v.getError(),y.restore(),D.restore(),z.restore(),R.restore(),F.restore(),V.restore(),w&&w.restore(),G.procs.refresh(),r(),K.forEach(function(t){t()})}function s(t){function e(t){var e={},r={};return Object.keys(t).forEach(function(n){var a=t[n];U.isDynamic(a)?r[n]=U.unbox(a,n):e[n]=a}),{dynamic:r,static:e}}var r=e(t.context||{}),n=e(t.uniforms||{}),a=e(t.attributes||{}),i=e(function(t){function e(t){if(t in r){var e=r[t];delete r[t],Object.keys(e).forEach(function(n){r[t+"."+n]=e[n]})}}var r=j({},t);return delete r.uniforms,delete r.attributes,delete r.context,"stencil"in r&&r.stencil.op&&(r.stencil.opBack=r.stencil.opFront=r.stencil.op,delete r.stencil.op),e("blend"),e("depth"),e("cull"),e("stencil"),e("polygonOffset"),e("scissor"),e("sample"),r}(t));t={gpuTime:0,cpuTime:0,count:0};var o=(r=G.compile(i,a,n,r,t)).draw,s=r.batch,l=r.scope,c=[];return j(function(t,e){var r;if("function"==typeof t)return l.call(this,null,t,0);if("function"==typeof e)if("number"==typeof t)for(r=0;r<t;++r)l.call(this,null,e,r);else{if(!Array.isArray(t))return l.call(this,t,e,0);for(r=0;r<t.length;++r)l.call(this,t[r],e,r)}else if("number"==typeof t){if(0<t)return s.call(this,function(t){for(;c.length<t;)c.push(null);return c}(0|t),0|t)}else{if(!Array.isArray(t))return o.call(this,t);if(t.length)return s.call(this,t,t.length)}},{stats:t})}function l(t,e){var r=0;G.procs.poll();var n=e.color;n&&(v.clearColor(+n[0]||0,+n[1]||0,+n[2]||0,+n[3]||0),r|=16384),"depth"in e&&(v.clearDepth(+e.depth),r|=256),"stencil"in e&&(v.clearStencil(0|e.stencil),r|=1024),v.clear(r)}function c(t){return Z.push(t),r(),{cancel:function(){var e=N(Z,t);Z[e]=function t(){var e=N(Z,t);Z[e]=Z[Z.length-1],--Z.length,0>=Z.length&&n()}}}}function u(){var t=W.viewport,e=W.scissor_box;t[0]=t[1]=e[0]=e[1]=0,P.viewportWidth=P.framebufferWidth=P.drawingBufferWidth=t[2]=e[2]=v.drawingBufferWidth,P.viewportHeight=P.framebufferHeight=P.drawingBufferHeight=t[3]=e[3]=v.drawingBufferHeight}function h(){P.tick+=1,P.time=g(),u(),G.procs.poll()}function f(){u(),G.procs.refresh(),w&&w.update()}function g(){return(H()-k)/1e3}if(!(t=a(t)))return null;var v=t.gl,m=v.getContextAttributes();v.isContextLost();var y=function(t,e){function r(e){var r;e=e.toLowerCase();try{r=n[e]=t.getExtension(e)}catch(t){}return!!r}for(var n={},a=0;a<e.extensions.length;++a){var i=e.extensions[a];if(!r(i))return e.onDestroy(),e.onDone('"'+i+'" extension is not supported by the current WebGL context, try upgrading your system or a different browser'),null}return e.optionalExtensions.forEach(r),{extensions:n,restore:function(){Object.keys(n).forEach(function(t){if(n[t]&&!r(t))throw Error("(regl): error restoring extension "+t)})}}}(v,t);if(!y)return null;var x=function(){var t={"":0},e=[""];return{id:function(r){var n=t[r];return n||(n=t[r]=e.length,e.push(r),n)},str:function(t){return e[t]}}}(),b={bufferCount:0,elementsCount:0,framebufferCount:0,shaderCount:0,textureCount:0,cubeCount:0,renderbufferCount:0,maxTextureUnits:0},_=y.extensions,w=function(t,e){function r(){this.endQueryIndex=this.startQueryIndex=-1,this.sum=0,this.stats=null}function n(t,e,n){var a=o.pop()||new r;a.startQueryIndex=t,a.endQueryIndex=e,a.sum=0,a.stats=n,s.push(a)}if(!e.ext_disjoint_timer_query)return null;var a=[],i=[],o=[],s=[],l=[],c=[];return{beginQuery:function(t){var r=a.pop()||e.ext_disjoint_timer_query.createQueryEXT();e.ext_disjoint_timer_query.beginQueryEXT(35007,r),i.push(r),n(i.length-1,i.length,t)},endQuery:function(){e.ext_disjoint_timer_query.endQueryEXT(35007)},pushScopeStats:n,update:function(){var t,r;if(0!==(t=i.length)){c.length=Math.max(c.length,t+1),l.length=Math.max(l.length,t+1),l[0]=0;var n=c[0]=0;for(r=t=0;r<i.length;++r){var u=i[r];e.ext_disjoint_timer_query.getQueryObjectEXT(u,34919)?(n+=e.ext_disjoint_timer_query.getQueryObjectEXT(u,34918),a.push(u)):i[t++]=u,l[r+1]=n,c[r+1]=t}for(i.length=t,r=t=0;r<s.length;++r){var h=(n=s[r]).startQueryIndex;u=n.endQueryIndex,n.sum+=l[u]-l[h],h=c[h],(u=c[u])===h?(n.stats.gpuTime+=n.sum/1e6,o.push(n)):(n.startQueryIndex=h,n.endQueryIndex=u,s[t++]=n)}s.length=t}},getNumPendingQueries:function(){return i.length},clear:function(){a.push.apply(a,i);for(var t=0;t<a.length;t++)e.ext_disjoint_timer_query.deleteQueryEXT(a[t]);i.length=0,a.length=0},restore:function(){i.length=0,a.length=0}}}(0,_),k=H(),L=v.drawingBufferWidth,C=v.drawingBufferHeight,P={tick:0,time:0,viewportWidth:L,viewportHeight:C,framebufferWidth:L,framebufferHeight:C,drawingBufferWidth:L,drawingBufferHeight:C,pixelRatio:t.pixelRatio},O=Y(v,_),z=(L=function(t,e,r,n){for(t=r.maxAttributes,e=Array(t),r=0;r<t;++r)e[r]=new A;return{Record:A,scope:{},state:e}}(v,_,O),p(v,b,t,L)),I=d(v,_,z,b),D=S(v,x,b,t),R=T(v,_,O,function(){G.procs.poll()},P,b,t),F=mt(v,_,0,b,t),V=M(v,_,O,R,F,b),G=B(v,x,_,O,z,I,0,V,{},L,D,{elements:null,primitive:4,count:-1,offset:0,instances:-1},P,w,t),W=(x=E(v,V,G.procs.poll,P),G.next),X=v.canvas,Z=[],J=[],K=[],Q=[t.onDestroy],$=null;X&&(X.addEventListener("webglcontextlost",i,!1),X.addEventListener("webglcontextrestored",o,!1));var tt=V.setFBO=s({framebuffer:U.define.call(null,1,"framebuffer")});return f(),m=j(s,{clear:function(t){if("framebuffer"in t)if(t.framebuffer&&"framebufferCube"===t.framebuffer_reglType)for(var e=0;6>e;++e)tt(j({framebuffer:t.framebuffer.faces[e]},t),l);else tt(t,l);else l(0,t)},prop:U.define.bind(null,1),context:U.define.bind(null,2),this:U.define.bind(null,3),draw:s({}),buffer:function(t){return z.create(t,34962,!1,!1)},elements:function(t){return I.create(t,!1)},texture:R.create2D,cube:R.createCube,renderbuffer:F.create,framebuffer:V.create,framebufferCube:V.createCube,attributes:m,frame:c,on:function(t,e){var r;switch(t){case"frame":return c(e);case"lost":r=J;break;case"restore":r=K;break;case"destroy":r=Q}return r.push(e),{cancel:function(){for(var t=0;t<r.length;++t)if(r[t]===e){r[t]=r[r.length-1],r.pop();break}}}},limits:O,hasExtension:function(t){return 0<=O.extensions.indexOf(t.toLowerCase())},read:x,destroy:function(){Z.length=0,n(),X&&(X.removeEventListener("webglcontextlost",i),X.removeEventListener("webglcontextrestored",o)),D.clear(),V.clear(),F.clear(),R.clear(),I.clear(),z.clear(),w&&w.clear(),Q.forEach(function(t){t()})},_gl:v,_refresh:f,poll:function(){h(),w&&w.update()},now:g,stats:b}),t.onDone(null,m),m}},"object"==typeof r&&"undefined"!=typeof e?e.exports=a():n.createREGL=a()},{}],501:[function(t,e,r){"use strict";var n,a="";e.exports=function(t,e){if("string"!=typeof t)throw new TypeError("expected a string");if(1===e)return t;if(2===e)return t+t;var r=t.length*e;if(n!==t||"undefined"==typeof n)n=t,a="";else if(a.length>=r)return a.substr(0,r);for(;r>a.length&&e>1;)1&e&&(a+=t),e>>=1,t+=t;return a=(a+=t).substr(0,r)}},{}],502:[function(t,e,r){(function(t){e.exports=t.performance&&t.performance.now?function(){return performance.now()}:Date.now||function(){return+new Date}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],503:[function(t,e,r){"use strict";e.exports=function(t){for(var e=t.length,r=t[t.length-1],n=e,a=e-2;a>=0;--a){var i=r,o=t[a],s=(r=i+o)-i,l=o-s;l&&(t[--n]=r,r=l)}for(var c=0,a=n;a<e;++a){var i=t[a],o=r,s=(r=i+o)-i,l=o-s;l&&(t[c++]=l)}return t[c++]=r,t.length=c,t}},{}],504:[function(t,e,r){"use strict";var n=t("two-product"),a=t("robust-sum"),i=t("robust-scale"),o=t("robust-compress"),s=6;function l(t,e){for(var r=new Array(t.length-1),n=1;n<t.length;++n)for(var a=r[n-1]=new Array(t.length-1),i=0,o=0;i<t.length;++i)i!==e&&(a[o++]=t[n][i]);return r}function c(t){for(var e=new Array(t),r=0;r<t;++r){e[r]=new Array(t);for(var n=0;n<t;++n)e[r][n]=["m[",r,"][",n,"]"].join("")}return e}function u(t){if(2===t.length)return["sum(prod(",t[0][0],",",t[1][1],"),prod(-",t[0][1],",",t[1][0],"))"].join("");for(var e=[],r=0;r<t.length;++r)e.push(["scale(",u(l(t,r)),",",(n=r,1&n?"-":""),t[0][r],")"].join(""));return function t(e){if(1===e.length)return e[0];if(2===e.length)return["sum(",e[0],",",e[1],")"].join("");var r=e.length>>1;return["sum(",t(e.slice(0,r)),",",t(e.slice(r)),")"].join("")}(e);var n}function h(t){return new Function("sum","scale","prod","compress",["function robustDeterminant",t,"(m){return compress(",u(c(t)),")};return robustDeterminant",t].join(""))(a,i,n,o)}var f=[function(){return[0]},function(t){return[t[0][0]]}];!function(){for(;f.length<s;)f.push(h(f.length));for(var t=[],r=["function robustDeterminant(m){switch(m.length){"],n=0;n<s;++n)t.push("det"+n),r.push("case ",n,":return det",n,"(m);");r.push("}var det=CACHE[m.length];if(!det)det=CACHE[m.length]=gen(m.length);return det(m);}return robustDeterminant"),t.push("CACHE","gen",r.join(""));var a=Function.apply(void 0,t);for(e.exports=a.apply(void 0,f.concat([f,h])),n=0;n<f.length;++n)e.exports[n]=f[n]}()},{"robust-compress":503,"robust-scale":510,"robust-sum":513,"two-product":541}],505:[function(t,e,r){"use strict";var n=t("two-product"),a=t("robust-sum");e.exports=function(t,e){for(var r=n(t[0],e[0]),i=1;i<t.length;++i)r=a(r,n(t[i],e[i]));return r}},{"robust-sum":513,"two-product":541}],506:[function(t,e,r){"use strict";var n=t("two-product"),a=t("robust-sum"),i=t("robust-subtract"),o=t("robust-scale"),s=6;function l(t,e){for(var r=new Array(t.length-1),n=1;n<t.length;++n)for(var a=r[n-1]=new Array(t.length-1),i=0,o=0;i<t.length;++i)i!==e&&(a[o++]=t[n][i]);return r}function c(t){if(1===t.length)return t[0];if(2===t.length)return["sum(",t[0],",",t[1],")"].join("");var e=t.length>>1;return["sum(",c(t.slice(0,e)),",",c(t.slice(e)),")"].join("")}function u(t,e){if("m"===t.charAt(0)){if("w"===e.charAt(0)){var r=t.split("[");return["w",e.substr(1),"m",r[0].substr(1)].join("")}return["prod(",t,",",e,")"].join("")}return u(e,t)}function h(t){if(2===t.length)return[["diff(",u(t[0][0],t[1][1]),",",u(t[1][0],t[0][1]),")"].join("")];for(var e=[],r=0;r<t.length;++r)e.push(["scale(",c(h(l(t,r))),",",(n=r,!0&n?"-":""),t[0][r],")"].join(""));return e;var n}function f(t,e){for(var r=[],n=0;n<e-2;++n)r.push(["prod(m",t,"[",n,"],m",t,"[",n,"])"].join(""));return c(r)}function p(t){for(var e=[],r=[],s=function(t){for(var e=new Array(t),r=0;r<t;++r){e[r]=new Array(t);for(var n=0;n<t;++n)e[r][n]=["m",n,"[",t-r-2,"]"].join("")}return e}(t),u=0;u<t;++u)s[0][u]="1",s[t-1][u]="w"+u;for(u=0;u<t;++u)0==(1&u)?e.push.apply(e,h(l(s,u))):r.push.apply(r,h(l(s,u)));var p=c(e),d=c(r),g="exactInSphere"+t,v=[];for(u=0;u<t;++u)v.push("m"+u);var m=["function ",g,"(",v.join(),"){"];for(u=0;u<t;++u){m.push("var w",u,"=",f(u,t),";");for(var y=0;y<t;++y)y!==u&&m.push("var w",u,"m",y,"=scale(w",u,",m",y,"[0]);")}return m.push("var p=",p,",n=",d,",d=diff(p,n);return d[d.length-1];}return ",g),new Function("sum","diff","prod","scale",m.join(""))(a,i,n,o)}var d=[function(){return 0},function(){return 0},function(){return 0}];function g(t){var e=d[t.length];return e||(e=d[t.length]=p(t.length)),e.apply(void 0,t)}!function(){for(;d.length<=s;)d.push(p(d.length));for(var t=[],r=["slow"],n=0;n<=s;++n)t.push("a"+n),r.push("o"+n);var a=["function testInSphere(",t.join(),"){switch(arguments.length){case 0:case 1:return 0;"];for(n=2;n<=s;++n)a.push("case ",n,":return o",n,"(",t.slice(0,n).join(),");");a.push("}var s=new Array(arguments.length);for(var i=0;i<arguments.length;++i){s[i]=arguments[i]};return slow(s);}return testInSphere"),r.push(a.join(""));var i=Function.apply(void 0,r);for(e.exports=i.apply(void 0,[g].concat(d)),n=0;n<=s;++n)e.exports[n]=d[n]}()},{"robust-scale":510,"robust-subtract":512,"robust-sum":513,"two-product":541}],507:[function(t,e,r){"use strict";var n=t("robust-determinant"),a=6;function i(t){for(var e="robustLinearSolve"+t+"d",r=["function ",e,"(A,b){return ["],a=0;a<t;++a){r.push("det([");for(var i=0;i<t;++i){i>0&&r.push(","),r.push("[");for(var o=0;o<t;++o)o>0&&r.push(","),o===a?r.push("+b[",i,"]"):r.push("+A[",i,"][",o,"]");r.push("]")}r.push("]),")}r.push("det(A)]}return ",e);var s=new Function("det",r.join(""));return s(t<6?n[t]:n)}var o=[function(){return[0]},function(t,e){return[[e[0]],[t[0][0]]]}];!function(){for(;o.length<a;)o.push(i(o.length));for(var t=[],r=["function dispatchLinearSolve(A,b){switch(A.length){"],n=0;n<a;++n)t.push("s"+n),r.push("case ",n,":return s",n,"(A,b);");r.push("}var s=CACHE[A.length];if(!s)s=CACHE[A.length]=g(A.length);return s(A,b)}return dispatchLinearSolve"),t.push("CACHE","g",r.join(""));var s=Function.apply(void 0,t);for(e.exports=s.apply(void 0,o.concat([o,i])),n=0;n<a;++n)e.exports[n]=o[n]}()},{"robust-determinant":504}],508:[function(t,e,r){"use strict";var n=t("two-product"),a=t("robust-sum"),i=t("robust-scale"),o=t("robust-subtract"),s=5;function l(t,e){for(var r=new Array(t.length-1),n=1;n<t.length;++n)for(var a=r[n-1]=new Array(t.length-1),i=0,o=0;i<t.length;++i)i!==e&&(a[o++]=t[n][i]);return r}function c(t){if(1===t.length)return t[0];if(2===t.length)return["sum(",t[0],",",t[1],")"].join("");var e=t.length>>1;return["sum(",c(t.slice(0,e)),",",c(t.slice(e)),")"].join("")}function u(t){if(2===t.length)return[["sum(prod(",t[0][0],",",t[1][1],"),prod(-",t[0][1],",",t[1][0],"))"].join("")];for(var e=[],r=0;r<t.length;++r)e.push(["scale(",c(u(l(t,r))),",",(n=r,1&n?"-":""),t[0][r],")"].join(""));return e;var n}function h(t){for(var e=[],r=[],s=function(t){for(var e=new Array(t),r=0;r<t;++r){e[r]=new Array(t);for(var n=0;n<t;++n)e[r][n]=["m",n,"[",t-r-1,"]"].join("")}return e}(t),h=[],f=0;f<t;++f)0==(1&f)?e.push.apply(e,u(l(s,f))):r.push.apply(r,u(l(s,f))),h.push("m"+f);var p=c(e),d=c(r),g="orientation"+t+"Exact",v=["function ",g,"(",h.join(),"){var p=",p,",n=",d,",d=sub(p,n);return d[d.length-1];};return ",g].join("");return new Function("sum","prod","scale","sub",v)(a,n,i,o)}var f=h(3),p=h(4),d=[function(){return 0},function(){return 0},function(t,e){return e[0]-t[0]},function(t,e,r){var n,a=(t[1]-r[1])*(e[0]-r[0]),i=(t[0]-r[0])*(e[1]-r[1]),o=a-i;if(a>0){if(i<=0)return o;n=a+i}else{if(!(a<0))return o;if(i>=0)return o;n=-(a+i)}var s=3.3306690738754716e-16*n;return o>=s||o<=-s?o:f(t,e,r)},function(t,e,r,n){var a=t[0]-n[0],i=e[0]-n[0],o=r[0]-n[0],s=t[1]-n[1],l=e[1]-n[1],c=r[1]-n[1],u=t[2]-n[2],h=e[2]-n[2],f=r[2]-n[2],d=i*c,g=o*l,v=o*s,m=a*c,y=a*l,x=i*s,b=u*(d-g)+h*(v-m)+f*(y-x),_=7.771561172376103e-16*((Math.abs(d)+Math.abs(g))*Math.abs(u)+(Math.abs(v)+Math.abs(m))*Math.abs(h)+(Math.abs(y)+Math.abs(x))*Math.abs(f));return b>_||-b>_?b:p(t,e,r,n)}];function g(t){var e=d[t.length];return e||(e=d[t.length]=h(t.length)),e.apply(void 0,t)}!function(){for(;d.length<=s;)d.push(h(d.length));for(var t=[],r=["slow"],n=0;n<=s;++n)t.push("a"+n),r.push("o"+n);var a=["function getOrientation(",t.join(),"){switch(arguments.length){case 0:case 1:return 0;"];for(n=2;n<=s;++n)a.push("case ",n,":return o",n,"(",t.slice(0,n).join(),");");a.push("}var s=new Array(arguments.length);for(var i=0;i<arguments.length;++i){s[i]=arguments[i]};return slow(s);}return getOrientation"),r.push(a.join(""));var i=Function.apply(void 0,r);for(e.exports=i.apply(void 0,[g].concat(d)),n=0;n<=s;++n)e.exports[n]=d[n]}()},{"robust-scale":510,"robust-subtract":512,"robust-sum":513,"two-product":541}],509:[function(t,e,r){"use strict";var n=t("robust-sum"),a=t("robust-scale");e.exports=function(t,e){if(1===t.length)return a(e,t[0]);if(1===e.length)return a(t,e[0]);if(0===t.length||0===e.length)return[0];var r=[0];if(t.length<e.length)for(var i=0;i<t.length;++i)r=n(r,a(e,t[i]));else for(var i=0;i<e.length;++i)r=n(r,a(t,e[i]));return r}},{"robust-scale":510,"robust-sum":513}],510:[function(t,e,r){"use strict";var n=t("two-product"),a=t("two-sum");e.exports=function(t,e){var r=t.length;if(1===r){var i=n(t[0],e);return i[0]?i:[i[1]]}var o=new Array(2*r),s=[.1,.1],l=[.1,.1],c=0;n(t[0],e,s),s[0]&&(o[c++]=s[0]);for(var u=1;u<r;++u){n(t[u],e,l);var h=s[1];a(h,l[0],s),s[0]&&(o[c++]=s[0]);var f=l[1],p=s[1],d=f+p,g=d-f,v=p-g;s[1]=d,v&&(o[c++]=v)}s[1]&&(o[c++]=s[1]);0===c&&(o[c++]=0);return o.length=c,o}},{"two-product":541,"two-sum":542}],511:[function(t,e,r){"use strict";e.exports=function(t,e,r,a){var i=n(t,r,a),o=n(e,r,a);if(i>0&&o>0||i<0&&o<0)return!1;var s=n(r,t,e),l=n(a,t,e);if(s>0&&l>0||s<0&&l<0)return!1;if(0===i&&0===o&&0===s&&0===l)return function(t,e,r,n){for(var a=0;a<2;++a){var i=t[a],o=e[a],s=Math.min(i,o),l=Math.max(i,o),c=r[a],u=n[a],h=Math.min(c,u),f=Math.max(c,u);if(f<s||l<h)return!1}return!0}(t,e,r,a);return!0};var n=t("robust-orientation")[3]},{"robust-orientation":508}],512:[function(t,e,r){"use strict";e.exports=function(t,e){var r=0|t.length,n=0|e.length;if(1===r&&1===n)return function(t,e){var r=t+e,n=r-t,a=t-(r-n)+(e-n);if(a)return[a,r];return[r]}(t[0],-e[0]);var a,i,o=new Array(r+n),s=0,l=0,c=0,u=Math.abs,h=t[l],f=u(h),p=-e[c],d=u(p);f<d?(i=h,(l+=1)<r&&(h=t[l],f=u(h))):(i=p,(c+=1)<n&&(p=-e[c],d=u(p)));l<r&&f<d||c>=n?(a=h,(l+=1)<r&&(h=t[l],f=u(h))):(a=p,(c+=1)<n&&(p=-e[c],d=u(p)));var g,v,m=a+i,y=m-a,x=i-y,b=x,_=m;for(;l<r&&c<n;)f<d?(a=h,(l+=1)<r&&(h=t[l],f=u(h))):(a=p,(c+=1)<n&&(p=-e[c],d=u(p))),(x=(i=b)-(y=(m=a+i)-a))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g;for(;l<r;)(x=(i=b)-(y=(m=(a=h)+i)-a))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g,(l+=1)<r&&(h=t[l]);for(;c<n;)(x=(i=b)-(y=(m=(a=p)+i)-a))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g,(c+=1)<n&&(p=-e[c]);b&&(o[s++]=b);_&&(o[s++]=_);s||(o[s++]=0);return o.length=s,o}},{}],513:[function(t,e,r){"use strict";e.exports=function(t,e){var r=0|t.length,n=0|e.length;if(1===r&&1===n)return function(t,e){var r=t+e,n=r-t,a=t-(r-n)+(e-n);if(a)return[a,r];return[r]}(t[0],e[0]);var a,i,o=new Array(r+n),s=0,l=0,c=0,u=Math.abs,h=t[l],f=u(h),p=e[c],d=u(p);f<d?(i=h,(l+=1)<r&&(h=t[l],f=u(h))):(i=p,(c+=1)<n&&(p=e[c],d=u(p)));l<r&&f<d||c>=n?(a=h,(l+=1)<r&&(h=t[l],f=u(h))):(a=p,(c+=1)<n&&(p=e[c],d=u(p)));var g,v,m=a+i,y=m-a,x=i-y,b=x,_=m;for(;l<r&&c<n;)f<d?(a=h,(l+=1)<r&&(h=t[l],f=u(h))):(a=p,(c+=1)<n&&(p=e[c],d=u(p))),(x=(i=b)-(y=(m=a+i)-a))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g;for(;l<r;)(x=(i=b)-(y=(m=(a=h)+i)-a))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g,(l+=1)<r&&(h=t[l]);for(;c<n;)(x=(i=b)-(y=(m=(a=p)+i)-a))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g,(c+=1)<n&&(p=e[c]);b&&(o[s++]=b);_&&(o[s++]=_);s||(o[s++]=0);return o.length=s,o}},{}],514:[function(t,e,r){"use strict";e.exports=function(t){return t<0?-1:t>0?1:0}},{}],515:[function(t,e,r){"use strict";e.exports=function(t){return a(n(t))};var n=t("boundary-cells"),a=t("reduce-simplicial-complex")},{"boundary-cells":97,"reduce-simplicial-complex":490}],516:[function(t,e,r){"use strict";e.exports=function(t,e,r,s){r=r||0,"undefined"==typeof s&&(s=function(t){for(var e=t.length,r=0,n=0;n<e;++n)r=0|Math.max(r,t[n].length);return r-1}(t));if(0===t.length||s<1)return{cells:[],vertexIds:[],vertexWeights:[]};var l=function(t,e){for(var r=t.length,n=a.mallocUint8(r),i=0;i<r;++i)n[i]=t[i]<e|0;return n}(e,+r),c=function(t,e){for(var r=t.length,o=e*(e+1)/2*r|0,s=a.mallocUint32(2*o),l=0,c=0;c<r;++c)for(var u=t[c],e=u.length,h=0;h<e;++h)for(var f=0;f<h;++f){var p=u[f],d=u[h];s[l++]=0|Math.min(p,d),s[l++]=0|Math.max(p,d)}i(n(s,[l/2|0,2]));for(var g=2,c=2;c<l;c+=2)s[c-2]===s[c]&&s[c-1]===s[c+1]||(s[g++]=s[c],s[g++]=s[c+1]);return n(s,[g/2|0,2])}(t,s),u=function(t,e,r,i){for(var o=t.data,s=t.shape[0],l=a.mallocDouble(s),c=0,u=0;u<s;++u){var h=o[2*u],f=o[2*u+1];if(r[h]!==r[f]){var p=e[h],d=e[f];o[2*c]=h,o[2*c+1]=f,l[c++]=(d-i)/(d-p)}}return t.shape[0]=c,n(l,[c])}(c,e,l,+r),h=function(t,e){var r=a.mallocInt32(2*e),n=t.shape[0],i=t.data;r[0]=0;for(var o=0,s=0;s<n;++s){var l=i[2*s];if(l!==o){for(r[2*o+1]=s;++o<l;)r[2*o]=s,r[2*o+1]=s;r[2*o]=s}}r[2*o+1]=n;for(;++o<e;)r[2*o]=r[2*o+1]=n;return r}(c,0|e.length),f=o(s)(t,c.data,h,l),p=function(t){for(var e=0|t.shape[0],r=t.data,n=new Array(e),a=0;a<e;++a)n[a]=[r[2*a],r[2*a+1]];return n}(c),d=[].slice.call(u.data,0,u.shape[0]);return a.free(l),a.free(c.data),a.free(u.data),a.free(h),{cells:f,vertexIds:p,vertexWeights:d}};var n=t("ndarray"),a=t("typedarray-pool"),i=t("ndarray-sort"),o=t("./lib/codegen")},{"./lib/codegen":517,ndarray:451,"ndarray-sort":449,"typedarray-pool":543}],517:[function(t,e,r){"use strict";e.exports=function(t){var e=i[t];e||(e=i[t]=function(t){var e=0,r=new Array(t+1);r[0]=[[]];for(var i=1;i<=t;++i)for(var o=r[i]=a(i),s=0;s<o.length;++s)e=Math.max(e,o[i].length);var l=["function B(C,E,i,j){","var a=Math.min(i,j)|0,b=Math.max(i,j)|0,l=C[2*a],h=C[2*a+1];","while(l<h){","var m=(l+h)>>1,v=E[2*m+1];","if(v===b){return m}","if(b<v){h=m}else{l=m+1}","}","return l;","};","function getContour",t,"d(F,E,C,S){","var n=F.length,R=[];","for(var i=0;i<n;++i){var c=F[i],l=c.length;"];function c(t){if(!(t.length<=0)){l.push("R.push(");for(var e=0;e<t.length;++e){var r=t[e];e>0&&l.push(","),l.push("[");for(var n=0;n<r.length;++n){var a=r[n];n>0&&l.push(","),l.push("B(C,E,c[",a[0],"],c[",a[1],"])")}l.push("]")}l.push(");")}}for(var i=t+1;i>1;--i){i<t+1&&l.push("else "),l.push("if(l===",i,"){");for(var u=[],s=0;s<i;++s)u.push("(S[c["+s+"]]<<"+s+")");l.push("var M=",u.join("+"),";if(M===0||M===",(1<<i)-1,"){continue}switch(M){");for(var o=r[i-1],s=0;s<o.length;++s)l.push("case ",s,":"),c(o[s]),l.push("break;");l.push("}}")}return l.push("}return R;};return getContour",t,"d"),new Function("pool",l.join(""))(n)}(t));return e};var n=t("typedarray-pool"),a=t("marching-simplex-table"),i={}},{"marching-simplex-table":428,"typedarray-pool":543}],518:[function(t,e,r){"use strict";var n=t("bit-twiddle"),a=t("union-find");function i(t,e){var r=t.length,n=t.length-e.length,a=Math.min;if(n)return n;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:return(s=t[0]+t[1]-e[0]-e[1])||a(t[0],t[1])-a(e[0],e[1]);case 3:var i=t[0]+t[1],o=e[0]+e[1];if(s=i+t[2]-(o+e[2]))return s;var s,l=a(t[0],t[1]),c=a(e[0],e[1]);return(s=a(l,t[2])-a(c,e[2]))||a(l+t[2],i)-a(c+e[2],o);default:var u=t.slice(0);u.sort();var h=e.slice(0);h.sort();for(var f=0;f<r;++f)if(n=u[f]-h[f])return n;return 0}}function o(t,e){return i(t[0],e[0])}function s(t,e){if(e){for(var r=t.length,n=new Array(r),a=0;a<r;++a)n[a]=[t[a],e[a]];n.sort(o);for(a=0;a<r;++a)t[a]=n[a][0],e[a]=n[a][1];return t}return t.sort(i),t}function l(t){if(0===t.length)return[];for(var e=1,r=t.length,n=1;n<r;++n){var a=t[n];if(i(a,t[n-1])){if(n===e){e++;continue}t[e++]=a}}return t.length=e,t}function c(t,e){for(var r=0,n=t.length-1,a=-1;r<=n;){var o=r+n>>1,s=i(t[o],e);s<=0?(0===s&&(a=o),r=o+1):s>0&&(n=o-1)}return a}function u(t,e){for(var r=new Array(t.length),a=0,o=r.length;a<o;++a)r[a]=[];for(var s=[],l=(a=0,e.length);a<l;++a)for(var u=e[a],h=u.length,f=1,p=1<<h;f<p;++f){s.length=n.popCount(f);for(var d=0,g=0;g<h;++g)f&1<<g&&(s[d++]=u[g]);var v=c(t,s);if(!(v<0))for(;r[v++].push(a),!(v>=t.length||0!==i(t[v],s)););}return r}function h(t,e){if(e<0)return[];for(var r=[],a=(1<<e+1)-1,i=0;i<t.length;++i)for(var o=t[i],l=a;l<1<<o.length;l=n.nextCombination(l)){for(var c=new Array(e+1),u=0,h=0;h<o.length;++h)l&1<<h&&(c[u++]=o[h]);r.push(c)}return s(r)}r.dimension=function(t){for(var e=0,r=Math.max,n=0,a=t.length;n<a;++n)e=r(e,t[n].length);return e-1},r.countVertices=function(t){for(var e=-1,r=Math.max,n=0,a=t.length;n<a;++n)for(var i=t[n],o=0,s=i.length;o<s;++o)e=r(e,i[o]);return e+1},r.cloneCells=function(t){for(var e=new Array(t.length),r=0,n=t.length;r<n;++r)e[r]=t[r].slice(0);return e},r.compareCells=i,r.normalize=s,r.unique=l,r.findCell=c,r.incidence=u,r.dual=function(t,e){if(!e)return u(l(h(t,0)),t);for(var r=new Array(e),n=0;n<e;++n)r[n]=[];n=0;for(var a=t.length;n<a;++n)for(var i=t[n],o=0,s=i.length;o<s;++o)r[i[o]].push(n);return r},r.explode=function(t){for(var e=[],r=0,n=t.length;r<n;++r)for(var a=t[r],i=0|a.length,o=1,l=1<<i;o<l;++o){for(var c=[],u=0;u<i;++u)o>>>u&1&&c.push(a[u]);e.push(c)}return s(e)},r.skeleton=h,r.boundary=function(t){for(var e=[],r=0,n=t.length;r<n;++r)for(var a=t[r],i=0,o=a.length;i<o;++i){for(var l=new Array(a.length-1),c=0,u=0;c<o;++c)c!==i&&(l[u++]=a[c]);e.push(l)}return s(e)},r.connectedComponents=function(t,e){return e?function(t,e){for(var r=new a(e),n=0;n<t.length;++n)for(var i=t[n],o=0;o<i.length;++o)for(var s=o+1;s<i.length;++s)r.link(i[o],i[s]);var l=[],c=r.ranks;for(n=0;n<c.length;++n)c[n]=-1;for(n=0;n<t.length;++n){var u=r.find(t[n][0]);c[u]<0?(c[u]=l.length,l.push([t[n].slice(0)])):l[c[u]].push(t[n].slice(0))}return l}(t,e):function(t){for(var e=l(s(h(t,0))),r=new a(e.length),n=0;n<t.length;++n)for(var i=t[n],o=0;o<i.length;++o)for(var u=c(e,[i[o]]),f=o+1;f<i.length;++f)r.link(u,c(e,[i[f]]));var p=[],d=r.ranks;for(n=0;n<d.length;++n)d[n]=-1;for(n=0;n<t.length;++n){var g=r.find(c(e,[t[n][0]]));d[g]<0?(d[g]=p.length,p.push([t[n].slice(0)])):p[d[g]].push(t[n].slice(0))}return p}(t)}},{"bit-twiddle":94,"union-find":544}],519:[function(t,e,r){arguments[4][94][0].apply(r,arguments)},{dup:94}],520:[function(t,e,r){arguments[4][518][0].apply(r,arguments)},{"bit-twiddle":519,dup:518,"union-find":521}],521:[function(t,e,r){"use strict";function n(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}e.exports=n,n.prototype.length=function(){return this.roots.length},n.prototype.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t},n.prototype.find=function(t){for(var e=this.roots;e[t]!==t;){var r=e[t];e[t]=e[r],t=r}return t},n.prototype.link=function(t,e){var r=this.find(t),n=this.find(e);if(r!==n){var a=this.ranks,i=this.roots,o=a[r],s=a[n];o<s?i[r]=n:s<o?i[n]=r:(i[n]=r,++a[r])}}},{}],522:[function(t,e,r){"use strict";e.exports=function(t,e,r){for(var i=e.length,o=t.length,s=new Array(i),l=new Array(i),c=new Array(i),u=new Array(i),h=0;h<i;++h)s[h]=l[h]=-1,c[h]=1/0,u[h]=!1;for(var h=0;h<o;++h){var f=t[h];if(2!==f.length)throw new Error("Input must be a graph");var p=f[1],d=f[0];-1!==l[d]?l[d]=-2:l[d]=p,-1!==s[p]?s[p]=-2:s[p]=d}function g(t){if(u[t])return 1/0;var r,a,i,o,c,h=s[t],f=l[t];return h<0||f<0?1/0:(r=e[t],a=e[h],i=e[f],o=Math.abs(n(r,a,i)),c=Math.sqrt(Math.pow(a[0]-i[0],2)+Math.pow(a[1]-i[1],2)),o/c)}function v(t,e){var r=T[t],n=T[e];T[t]=n,T[e]=r,M[r]=e,M[n]=t}function m(t){return c[T[t]]}function y(t){return 1&t?t-1>>1:(t>>1)-1}function x(t){for(var e=m(t);;){var r=e,n=2*t+1,a=2*(t+1),i=t;if(n<S){var o=m(n);o<r&&(i=n,r=o)}if(a<S){var s=m(a);s<r&&(i=a)}if(i===t)return t;v(t,i),t=i}}function b(t){for(var e=m(t);t>0;){var r=y(t);if(r>=0){var n=m(r);if(e<n){v(t,r),t=r;continue}}return t}}function _(){if(S>0){var t=T[0];return v(0,S-1),S-=1,x(0),t}return-1}function w(t,e){var r=T[t];return c[r]===e?t:(c[r]=-1/0,b(t),_(),c[r]=e,b((S+=1)-1))}function k(t){if(!u[t]){u[t]=!0;var e=s[t],r=l[t];s[r]>=0&&(s[r]=e),l[e]>=0&&(l[e]=r),M[e]>=0&&w(M[e],g(e)),M[r]>=0&&w(M[r],g(r))}}for(var T=[],M=new Array(i),h=0;h<i;++h){var A=c[h]=g(h);A<1/0?(M[h]=T.length,T.push(h)):M[h]=-1}for(var S=T.length,h=S>>1;h>=0;--h)x(h);for(;;){var E=_();if(E<0||c[E]>r)break;k(E)}for(var L=[],h=0;h<i;++h)u[h]||(M[h]=L.length,L.push(e[h].slice()));L.length;function C(t,e){if(t[e]<0)return e;var r=e,n=e;do{var a=t[n];if(!u[n]||a<0||a===n)break;if(a=t[n=a],!u[n]||a<0||a===n)break;n=a,r=t[r]}while(r!==n);for(var i=e;i!==n;i=t[i])t[i]=n;return n}var P=[];return t.forEach(function(t){var e=C(s,t[0]),r=C(l,t[1]);if(e>=0&&r>=0&&e!==r){var n=M[e],a=M[r];n!==a&&P.push([n,a])}}),a.unique(a.normalize(P)),{positions:L,edges:P}};var n=t("robust-orientation"),a=t("simplicial-complex")},{"robust-orientation":508,"simplicial-complex":520}],523:[function(t,e,r){"use strict";e.exports=function(t,e){var r,i,o,s;if(e[0][0]<e[1][0])r=e[0],i=e[1];else{if(!(e[0][0]>e[1][0]))return a(e,t);r=e[1],i=e[0]}if(t[0][0]<t[1][0])o=t[0],s=t[1];else{if(!(t[0][0]>t[1][0]))return-a(t,e);o=t[1],s=t[0]}var l=n(r,i,s),c=n(r,i,o);if(l<0){if(c<=0)return l}else if(l>0){if(c>=0)return l}else if(c)return c;if(l=n(s,o,i),c=n(s,o,r),l<0){if(c<=0)return l}else if(l>0){if(c>=0)return l}else if(c)return c;return i[0]-s[0]};var n=t("robust-orientation");function a(t,e){var r,a,i,o;if(e[0][0]<e[1][0])r=e[0],a=e[1];else{if(!(e[0][0]>e[1][0])){var s=Math.min(t[0][1],t[1][1]),l=Math.max(t[0][1],t[1][1]),c=Math.min(e[0][1],e[1][1]),u=Math.max(e[0][1],e[1][1]);return l<c?l-c:s>u?s-u:l-u}r=e[1],a=e[0]}t[0][1]<t[1][1]?(i=t[0],o=t[1]):(i=t[1],o=t[0]);var h=n(a,r,i);return h||((h=n(a,r,o))||o-a)}},{"robust-orientation":508}],524:[function(t,e,r){"use strict";e.exports=function(t){for(var e=t.length,r=2*e,n=new Array(r),i=0;i<e;++i){var l=t[i],c=l[0][0]<l[1][0];n[2*i]=new h(l[0][0],l,c,i),n[2*i+1]=new h(l[1][0],l,!c,i)}n.sort(function(t,e){var r=t.x-e.x;return r||((r=t.create-e.create)||Math.min(t.segment[0][1],t.segment[1][1])-Math.min(e.segment[0][1],e.segment[1][1]))});for(var f=a(o),p=[],d=[],g=[],i=0;i<r;){for(var v=n[i].x,m=[];i<r;){var y=n[i];if(y.x!==v)break;i+=1,y.segment[0][0]===y.x&&y.segment[1][0]===y.x?y.create&&(y.segment[0][1]<y.segment[1][1]?(m.push(new u(y.segment[0][1],y.index,!0,!0)),m.push(new u(y.segment[1][1],y.index,!1,!1))):(m.push(new u(y.segment[1][1],y.index,!0,!1)),m.push(new u(y.segment[0][1],y.index,!1,!0)))):f=y.create?f.insert(y.segment,y.index):f.remove(y.segment)}p.push(f.root),d.push(v),g.push(m)}return new s(p,d,g)};var n=t("binary-search-bounds"),a=t("functional-red-black-tree"),i=t("robust-orientation"),o=t("./lib/order-segments");function s(t,e,r){this.slabs=t,this.coordinates=e,this.horizontal=r}function l(t,e){return t.y-e}function c(t,e){for(var r=null;t;){var n,a,o=t.key;o[0][0]<o[1][0]?(n=o[0],a=o[1]):(n=o[1],a=o[0]);var s=i(n,a,e);if(s<0)t=t.left;else if(s>0)if(e[0]!==o[1][0])r=t,t=t.right;else{if(l=c(t.right,e))return l;t=t.left}else{if(e[0]!==o[1][0])return t;var l;if(l=c(t.right,e))return l;t=t.left}}return r}function u(t,e,r,n){this.y=t,this.index=e,this.start=r,this.closed=n}function h(t,e,r,n){this.x=t,this.segment=e,this.create=r,this.index=n}s.prototype.castUp=function(t){var e=n.le(this.coordinates,t[0]);if(e<0)return-1;this.slabs[e];var r=c(this.slabs[e],t),a=-1;if(r&&(a=r.value),this.coordinates[e]===t[0]){var s=null;if(r&&(s=r.key),e>0){var u=c(this.slabs[e-1],t);u&&(s?o(u.key,s)>0&&(s=u.key,a=u.value):(a=u.value,s=u.key))}var h=this.horizontal[e];if(h.length>0){var f=n.ge(h,t[1],l);if(f<h.length){var p=h[f];if(t[1]===p.y){if(p.closed)return p.index;for(;f<h.length-1&&h[f+1].y===t[1];)if((p=h[f+=1]).closed)return p.index;if(p.y===t[1]&&!p.start){if((f+=1)>=h.length)return a;p=h[f]}}if(p.start)if(s){var d=i(s[0],s[1],[t[0],p.y]);s[0][0]>s[1][0]&&(d=-d),d>0&&(a=p.index)}else a=p.index;else p.y!==t[1]&&(a=p.index)}}}return a}},{"./lib/order-segments":523,"binary-search-bounds":93,"functional-red-black-tree":233,"robust-orientation":508}],525:[function(t,e,r){"use strict";var n=t("robust-dot-product"),a=t("robust-sum");function i(t,e){var r=a(n(t,e),[e[e.length-1]]);return r[r.length-1]}function o(t,e,r,n){var a=-e/(n-e);a<0?a=0:a>1&&(a=1);for(var i=1-a,o=t.length,s=new Array(o),l=0;l<o;++l)s[l]=a*t[l]+i*r[l];return s}e.exports=function(t,e){for(var r=[],n=[],a=i(t[t.length-1],e),s=t[t.length-1],l=t[0],c=0;c<t.length;++c,s=l){var u=i(l=t[c],e);if(a<0&&u>0||a>0&&u<0){var h=o(s,u,l,a);r.push(h),n.push(h.slice())}u<0?n.push(l.slice()):u>0?r.push(l.slice()):(r.push(l.slice()),n.push(l.slice())),a=u}return{positive:r,negative:n}},e.exports.positive=function(t,e){for(var r=[],n=i(t[t.length-1],e),a=t[t.length-1],s=t[0],l=0;l<t.length;++l,a=s){var c=i(s=t[l],e);(n<0&&c>0||n>0&&c<0)&&r.push(o(a,c,s,n)),c>=0&&r.push(s.slice()),n=c}return r},e.exports.negative=function(t,e){for(var r=[],n=i(t[t.length-1],e),a=t[t.length-1],s=t[0],l=0;l<t.length;++l,a=s){var c=i(s=t[l],e);(n<0&&c>0||n>0&&c<0)&&r.push(o(a,c,s,n)),c<=0&&r.push(s.slice()),n=c}return r}},{"robust-dot-product":505,"robust-sum":513}],526:[function(t,e,r){!function(){"use strict";var t={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function e(r){return function(r,n){var a,i,o,s,l,c,u,h,f,p=1,d=r.length,g="";for(i=0;i<d;i++)if("string"==typeof r[i])g+=r[i];else if("object"==typeof r[i]){if((s=r[i]).keys)for(a=n[p],o=0;o<s.keys.length;o++){if(null==a)throw new Error(e('[sprintf] Cannot access property "%s" of undefined value "%s"',s.keys[o],s.keys[o-1]));a=a[s.keys[o]]}else a=s.param_no?n[s.param_no]:n[p++];if(t.not_type.test(s.type)&&t.not_primitive.test(s.type)&&a instanceof Function&&(a=a()),t.numeric_arg.test(s.type)&&"number"!=typeof a&&isNaN(a))throw new TypeError(e("[sprintf] expecting number but found %T",a));switch(t.number.test(s.type)&&(h=a>=0),s.type){case"b":a=parseInt(a,10).toString(2);break;case"c":a=String.fromCharCode(parseInt(a,10));break;case"d":case"i":a=parseInt(a,10);break;case"j":a=JSON.stringify(a,null,s.width?parseInt(s.width):0);break;case"e":a=s.precision?parseFloat(a).toExponential(s.precision):parseFloat(a).toExponential();break;case"f":a=s.precision?parseFloat(a).toFixed(s.precision):parseFloat(a);break;case"g":a=s.precision?String(Number(a.toPrecision(s.precision))):parseFloat(a);break;case"o":a=(parseInt(a,10)>>>0).toString(8);break;case"s":a=String(a),a=s.precision?a.substring(0,s.precision):a;break;case"t":a=String(!!a),a=s.precision?a.substring(0,s.precision):a;break;case"T":a=Object.prototype.toString.call(a).slice(8,-1).toLowerCase(),a=s.precision?a.substring(0,s.precision):a;break;case"u":a=parseInt(a,10)>>>0;break;case"v":a=a.valueOf(),a=s.precision?a.substring(0,s.precision):a;break;case"x":a=(parseInt(a,10)>>>0).toString(16);break;case"X":a=(parseInt(a,10)>>>0).toString(16).toUpperCase()}t.json.test(s.type)?g+=a:(!t.number.test(s.type)||h&&!s.sign?f="":(f=h?"+":"-",a=a.toString().replace(t.sign,"")),c=s.pad_char?"0"===s.pad_char?"0":s.pad_char.charAt(1):" ",u=s.width-(f+a).length,l=s.width&&u>0?c.repeat(u):"",g+=s.align?f+a+l:"0"===c?f+l+a:l+f+a)}return g}(function(e){if(a[e])return a[e];var r,n=e,i=[],o=0;for(;n;){if(null!==(r=t.text.exec(n)))i.push(r[0]);else if(null!==(r=t.modulo.exec(n)))i.push("%");else{if(null===(r=t.placeholder.exec(n)))throw new SyntaxError("[sprintf] unexpected placeholder");if(r[2]){o|=1;var s=[],l=r[2],c=[];if(null===(c=t.key.exec(l)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(s.push(c[1]);""!==(l=l.substring(c[0].length));)if(null!==(c=t.key_access.exec(l)))s.push(c[1]);else{if(null===(c=t.index_access.exec(l)))throw new SyntaxError("[sprintf] failed to parse named argument key");s.push(c[1])}r[2]=s}else o|=2;if(3===o)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");i.push({placeholder:r[0],param_no:r[1],keys:r[2],sign:r[3],pad_char:r[4],align:r[5],width:r[6],precision:r[7],type:r[8]})}n=n.substring(r[0].length)}return a[e]=i}(r),arguments)}function n(t,r){return e.apply(null,[t].concat(r||[]))}var a=Object.create(null);"undefined"!=typeof r&&(r.sprintf=e,r.vsprintf=n),"undefined"!=typeof window&&(window.sprintf=e,window.vsprintf=n)}()},{}],527:[function(t,e,r){"use strict";var n=t("parenthesis");e.exports=function(t,e,r){if(null==t)throw Error("First argument should be a string");if(null==e)throw Error("Separator should be a string or a RegExp");r?("string"==typeof r||Array.isArray(r))&&(r={ignore:r}):r={},null==r.escape&&(r.escape=!0),null==r.ignore?r.ignore=["[]","()","{}","<>",'""',"''","``","\u201c\u201d","\xab\xbb"]:("string"==typeof r.ignore&&(r.ignore=[r.ignore]),r.ignore=r.ignore.map(function(t){return 1===t.length&&(t+=t),t}));var a=n.parse(t,{flat:!0,brackets:r.ignore}),i=a[0].split(e);if(r.escape){for(var o=[],s=0;s<i.length;s++){var l=i[s],c=i[s+1];"\\"===l[l.length-1]&&"\\"!==l[l.length-2]?(o.push(l+e+c),s++):o.push(l)}i=o}for(s=0;s<i.length;s++)a[0]=i[s],i[s]=n.stringify(a,{flat:!0});return i}},{parenthesis:459}],528:[function(t,e,r){"use strict";e.exports=function(t){for(var e=t.length,r=new Array(e),n=new Array(e),a=new Array(e),i=new Array(e),o=new Array(e),s=new Array(e),l=0;l<e;++l)r[l]=-1,n[l]=0,a[l]=!1,i[l]=0,o[l]=-1,s[l]=[];var c,u=0,h=[],f=[];function p(e){var l=[e],c=[e];for(r[e]=n[e]=u,a[e]=!0,u+=1;c.length>0;){e=c[c.length-1];var p=t[e];if(i[e]<p.length){for(var d=i[e];d<p.length;++d){var g=p[d];if(r[g]<0){r[g]=n[g]=u,a[g]=!0,u+=1,l.push(g),c.push(g);break}a[g]&&(n[e]=0|Math.min(n[e],n[g])),o[g]>=0&&s[e].push(o[g])}i[e]=d}else{if(n[e]===r[e]){for(var v=[],m=[],y=0,d=l.length-1;d>=0;--d){var x=l[d];if(a[x]=!1,v.push(x),m.push(s[x]),y+=s[x].length,o[x]=h.length,x===e){l.length=d;break}}h.push(v);for(var b=new Array(y),d=0;d<m.length;d++)for(var _=0;_<m[d].length;_++)b[--y]=m[d][_];f.push(b)}c.pop()}}}for(var l=0;l<e;++l)r[l]<0&&p(l);for(var l=0;l<f.length;l++){var d=f[l];if(0!==d.length){d.sort(function(t,e){return t-e}),c=[d[0]];for(var g=1;g<d.length;g++)d[g]!==d[g-1]&&c.push(d[g]);f[l]=c}}return{components:h,adjacencyList:f}}},{}],529:[function(t,e,r){"use strict";e.exports=function(t,e){if(t.dimension<=0)return{positions:[],cells:[]};if(1===t.dimension)return function(t,e){for(var r=i(t,e),n=r.length,a=new Array(n),o=new Array(n),s=0;s<n;++s)a[s]=[r[s]],o[s]=[s];return{positions:a,cells:o}}(t,e);var r=t.order.join()+"-"+t.dtype,s=o[r],e=+e||0;s||(s=o[r]=function(t,e){var r=t.length,i=["'use strict';"],o="surfaceNets"+t.join("_")+"d"+e;i.push("var contour=genContour({","order:[",t.join(),"],","scalarArguments: 3,","phase:function phaseFunc(p,a,b,c) { return (p > c)|0 },"),"generic"===e&&i.push("getters:[0],");for(var s=[],l=[],c=0;c<r;++c)s.push("d"+c),l.push("d"+c);for(var c=0;c<1<<r;++c)s.push("v"+c),l.push("v"+c);for(var c=0;c<1<<r;++c)s.push("p"+c),l.push("p"+c);s.push("a","b","c"),l.push("a","c"),i.push("vertex:function vertexFunc(",s.join(),"){");for(var u=[],c=0;c<1<<r;++c)u.push("(p"+c+"<<"+c+")");i.push("var m=(",u.join("+"),")|0;if(m===0||m===",(1<<(1<<r))-1,"){return}");var h=[],f=[];1<<(1<<r)<=128?(i.push("switch(m){"),f=i):i.push("switch(m>>>7){");for(var c=0;c<1<<(1<<r);++c){if(1<<(1<<r)>128&&c%128==0){h.length>0&&f.push("}}");var p="vExtra"+h.length;i.push("case ",c>>>7,":",p,"(m&0x7f,",l.join(),");break;"),f=["function ",p,"(m,",l.join(),"){switch(m){"],h.push(f)}f.push("case ",127&c,":");for(var d=new Array(r),g=new Array(r),v=new Array(r),m=new Array(r),y=0,x=0;x<r;++x)d[x]=[],g[x]=[],v[x]=0,m[x]=0;for(var x=0;x<1<<r;++x)for(var b=0;b<r;++b){var _=x^1<<b;if(!(_>x)&&!(c&1<<_)!=!(c&1<<x)){var w=1;c&1<<_?g[b].push("v"+_+"-v"+x):(g[b].push("v"+x+"-v"+_),w=-w),w<0?(d[b].push("-v"+x+"-v"+_),v[b]+=2):(d[b].push("v"+x+"+v"+_),v[b]-=2),y+=1;for(var k=0;k<r;++k)k!==b&&(_&1<<k?m[k]+=1:m[k]-=1)}}for(var T=[],b=0;b<r;++b)if(0===d[b].length)T.push("d"+b+"-0.5");else{var M="";v[b]<0?M=v[b]+"*c":v[b]>0&&(M="+"+v[b]+"*c");var A=d[b].length/y*.5,S=.5+m[b]/y*.5;T.push("d"+b+"-"+S+"-"+A+"*("+d[b].join("+")+M+")/("+g[b].join("+")+")")}f.push("a.push([",T.join(),"]);","break;")}i.push("}},"),h.length>0&&f.push("}}");for(var E=[],c=0;c<1<<r-1;++c)E.push("v"+c);E.push("c0","c1","p0","p1","a","b","c"),i.push("cell:function cellFunc(",E.join(),"){");var L=a(r-1);i.push("if(p0){b.push(",L.map(function(t){return"["+t.map(function(t){return"v"+t})+"]"}).join(),")}else{b.push(",L.map(function(t){var e=t.slice();return e.reverse(),"["+e.map(function(t){return"v"+t})+"]"}).join(),")}}});function ",o,"(array,level){var verts=[],cells=[];contour(array,verts,cells,level);return {positions:verts,cells:cells};} return ",o,";");for(var c=0;c<h.length;++c)i.push(h[c].join(""));return new Function("genContour",i.join(""))(n)}(t.order,t.dtype));return s(t,e)};var n=t("ndarray-extract-contour"),a=t("triangulate-hypercube"),i=t("zero-crossings");var o={}},{"ndarray-extract-contour":440,"triangulate-hypercube":539,"zero-crossings":572}],530:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var r=[],n=!0,a=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(n=(o=s.next()).done)&&(r.push(o.value),!e||r.length!==e);n=!0);}catch(t){a=!0,i=t}finally{try{!n&&s.return&&s.return()}finally{if(a)throw i}}return r}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),a=2*Math.PI,i=function(t,e,r,n,a,i,o){var s=t.x,l=t.y;return{x:n*(s*=e)-a*(l*=r)+i,y:a*s+n*l+o}},o=function(t,e){var r=.551915024494*(e<0?-1:1),n=Math.cos(t),a=Math.sin(t),i=Math.cos(t+e),o=Math.sin(t+e);return[{x:n-a*r,y:a+n*r},{x:i+o*r,y:o-i*r},{x:i,y:o}]},s=function(t,e,r,n){var a=t*n-e*r<0?-1:1,i=(t*r+e*n)/(Math.sqrt(t*t+e*e)*Math.sqrt(t*t+e*e));return i>1&&(i=1),i<-1&&(i=-1),a*Math.acos(i)};r.default=function(t){var e=t.px,r=t.py,l=t.cx,c=t.cy,u=t.rx,h=t.ry,f=t.xAxisRotation,p=void 0===f?0:f,d=t.largeArcFlag,g=void 0===d?0:d,v=t.sweepFlag,m=void 0===v?0:v,y=[];if(0===u||0===h)return[];var x=Math.sin(p*a/360),b=Math.cos(p*a/360),_=b*(e-l)/2+x*(r-c)/2,w=-x*(e-l)/2+b*(r-c)/2;if(0===_&&0===w)return[];u=Math.abs(u),h=Math.abs(h);var k=Math.pow(_,2)/Math.pow(u,2)+Math.pow(w,2)/Math.pow(h,2);k>1&&(u*=Math.sqrt(k),h*=Math.sqrt(k));var T=function(t,e,r,n,i,o,l,c,u,h,f,p){var d=Math.pow(i,2),g=Math.pow(o,2),v=Math.pow(f,2),m=Math.pow(p,2),y=d*g-d*m-g*v;y<0&&(y=0),y/=d*m+g*v;var x=(y=Math.sqrt(y)*(l===c?-1:1))*i/o*p,b=y*-o/i*f,_=h*x-u*b+(t+r)/2,w=u*x+h*b+(e+n)/2,k=(f-x)/i,T=(p-b)/o,M=(-f-x)/i,A=(-p-b)/o,S=s(1,0,k,T),E=s(k,T,M,A);return 0===c&&E>0&&(E-=a),1===c&&E<0&&(E+=a),[_,w,S,E]}(e,r,l,c,u,h,g,m,x,b,_,w),M=n(T,4),A=M[0],S=M[1],E=M[2],L=M[3],C=Math.abs(L)/(a/4);Math.abs(1-C)<1e-7&&(C=1);var P=Math.max(Math.ceil(C),1);L/=P;for(var O=0;O<P;O++)y.push(o(E,L)),E+=L;return y.map(function(t){var e=i(t[0],u,h,b,x,A,S),r=e.x,n=e.y,a=i(t[1],u,h,b,x,A,S),o=a.x,s=a.y,l=i(t[2],u,h,b,x,A,S);return{x1:r,y1:n,x2:o,y2:s,x:l.x,y:l.y}})},e.exports=r.default},{}],531:[function(t,e,r){"use strict";var n=t("parse-svg-path"),a=t("abs-svg-path"),i=t("normalize-svg-path"),o=t("is-svg-path"),s=t("assert");e.exports=function(t){Array.isArray(t)&&1===t.length&&"string"==typeof t[0]&&(t=t[0]);"string"==typeof t&&(s(o(t),"String is not an SVG path."),t=n(t));if(s(Array.isArray(t),"Argument should be a string or an array of path segments."),t=a(t),!(t=i(t)).length)return[0,0,0,0];for(var e=[1/0,1/0,-1/0,-1/0],r=0,l=t.length;r<l;r++)for(var c=t[r].slice(1),u=0;u<c.length;u+=2)c[u+0]<e[0]&&(e[0]=c[u+0]),c[u+1]<e[1]&&(e[1]=c[u+1]),c[u+0]>e[2]&&(e[2]=c[u+0]),c[u+1]>e[3]&&(e[3]=c[u+1]);return e}},{"abs-svg-path":63,assert:70,"is-svg-path":425,"normalize-svg-path":532,"parse-svg-path":461}],532:[function(t,e,r){"use strict";e.exports=function(t){for(var e,r=[],o=0,s=0,l=0,c=0,u=null,h=null,f=0,p=0,d=0,g=t.length;d<g;d++){var v=t[d],m=v[0];switch(m){case"M":l=v[1],c=v[2];break;case"A":var y=n({px:f,py:p,cx:v[6],cy:v[7],rx:v[1],ry:v[2],xAxisRotation:v[3],largeArcFlag:v[4],sweepFlag:v[5]});if(!y.length)continue;for(var x,b=0;b<y.length;b++)x=y[b],v=["C",x.x1,x.y1,x.x2,x.y2,x.x,x.y],b<y.length-1&&r.push(v);break;case"S":var _=f,w=p;"C"!=e&&"S"!=e||(_+=_-o,w+=w-s),v=["C",_,w,v[1],v[2],v[3],v[4]];break;case"T":"Q"==e||"T"==e?(u=2*f-u,h=2*p-h):(u=f,h=p),v=i(f,p,u,h,v[1],v[2]);break;case"Q":u=v[1],h=v[2],v=i(f,p,v[1],v[2],v[3],v[4]);break;case"L":v=a(f,p,v[1],v[2]);break;case"H":v=a(f,p,v[1],p);break;case"V":v=a(f,p,f,v[1]);break;case"Z":v=a(f,p,l,c)}e=m,f=v[v.length-2],p=v[v.length-1],v.length>4?(o=v[v.length-4],s=v[v.length-3]):(o=f,s=p),r.push(v)}return r};var n=t("svg-arc-to-cubic-bezier");function a(t,e,r,n){return["C",t,e,r,n,r,n]}function i(t,e,r,n,a,i){return["C",t/3+2/3*r,e/3+2/3*n,a/3+2/3*r,i/3+2/3*n,a,i]}},{"svg-arc-to-cubic-bezier":530}],533:[function(t,e,r){"use strict";var n,a=t("svg-path-bounds"),i=t("parse-svg-path"),o=t("draw-svg-path"),s=t("is-svg-path"),l=t("bitmap-sdf"),c=document.createElement("canvas"),u=c.getContext("2d");e.exports=function(t,e){if(!s(t))throw Error("Argument should be valid svg path string");e||(e={});var r,h;e.shape?(r=e.shape[0],h=e.shape[1]):(r=c.width=e.w||e.width||200,h=c.height=e.h||e.height||200);var f=Math.min(r,h),p=e.stroke||0,d=e.viewbox||e.viewBox||a(t),g=[r/(d[2]-d[0]),h/(d[3]-d[1])],v=Math.min(g[0]||0,g[1]||0)/2;u.fillStyle="black",u.fillRect(0,0,r,h),u.fillStyle="white",p&&("number"!=typeof p&&(p=1),u.strokeStyle=p>0?"white":"black",u.lineWidth=Math.abs(p));if(u.translate(.5*r,.5*h),u.scale(v,v),function(){if(null!=n)return n;var t=document.createElement("canvas").getContext("2d");if(t.canvas.width=t.canvas.height=1,!window.Path2D)return n=!1;var e=new Path2D("M0,0h1v1h-1v-1Z");t.fillStyle="black",t.fill(e);var r=t.getImageData(0,0,1,1);return n=r&&r.data&&255===r.data[3]}()){var m=new Path2D(t);u.fill(m),p&&u.stroke(m)}else{var y=i(t);o(u,y),u.fill(),p&&u.stroke()}return u.setTransform(1,0,0,1,0,0),l(u,{cutoff:null!=e.cutoff?e.cutoff:.5,radius:null!=e.radius?e.radius:.5*f})}},{"bitmap-sdf":95,"draw-svg-path":170,"is-svg-path":425,"parse-svg-path":461,"svg-path-bounds":531}],534:[function(t,e,r){(function(r){"use strict";e.exports=function t(e,r,a){var a=a||{};var o=i[e];o||(o=i[e]={" ":{data:new Float32Array(0),shape:.2}});var s=o[r];if(!s)if(r.length<=1||!/\d/.test(r))s=o[r]=function(t){for(var e=t.cells,r=t.positions,n=new Float32Array(6*e.length),a=0,i=0,o=0;o<e.length;++o)for(var s=e[o],l=0;l<3;++l){var c=r[s[l]];n[a++]=c[0],n[a++]=c[1]+1.4,i=Math.max(c[0],i)}return{data:n,shape:i}}(n(r,{triangles:!0,font:e,textAlign:a.textAlign||"left",textBaseline:"alphabetic",styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0}}));else{for(var l=r.split(/(\d|\s)/),c=new Array(l.length),u=0,h=0,f=0;f<l.length;++f)c[f]=t(e,l[f]),u+=c[f].data.length,h+=c[f].shape,f>0&&(h+=.02);for(var p=new Float32Array(u),d=0,g=-.5*h,f=0;f<c.length;++f){for(var v=c[f].data,m=0;m<v.length;m+=2)p[d++]=v[m]+g,p[d++]=v[m+1];g+=c[f].shape+.02}s=o[r]={data:p,shape:h}}return s};var n=t("vectorize-text"),a=window||r.global||{},i=a.__TEXT_CACHE||{};a.__TEXT_CACHE={}}).call(this,t("_process"))},{_process:483,"vectorize-text":548}],535:[function(t,e,r){!function(t){var r=/^\s+/,n=/\s+$/,a=0,i=t.round,o=t.min,s=t.max,l=t.random;function c(e,l){if(l=l||{},(e=e||"")instanceof c)return e;if(!(this instanceof c))return new c(e,l);var u=function(e){var a={r:0,g:0,b:0},i=1,l=null,c=null,u=null,h=!1,f=!1;"string"==typeof e&&(e=function(t){t=t.replace(r,"").replace(n,"").toLowerCase();var e,a=!1;if(S[t])t=S[t],a=!0;else if("transparent"==t)return{r:0,g:0,b:0,a:0,format:"name"};if(e=j.rgb.exec(t))return{r:e[1],g:e[2],b:e[3]};if(e=j.rgba.exec(t))return{r:e[1],g:e[2],b:e[3],a:e[4]};if(e=j.hsl.exec(t))return{h:e[1],s:e[2],l:e[3]};if(e=j.hsla.exec(t))return{h:e[1],s:e[2],l:e[3],a:e[4]};if(e=j.hsv.exec(t))return{h:e[1],s:e[2],v:e[3]};if(e=j.hsva.exec(t))return{h:e[1],s:e[2],v:e[3],a:e[4]};if(e=j.hex8.exec(t))return{r:O(e[1]),g:O(e[2]),b:O(e[3]),a:R(e[4]),format:a?"name":"hex8"};if(e=j.hex6.exec(t))return{r:O(e[1]),g:O(e[2]),b:O(e[3]),format:a?"name":"hex"};if(e=j.hex4.exec(t))return{r:O(e[1]+""+e[1]),g:O(e[2]+""+e[2]),b:O(e[3]+""+e[3]),a:R(e[4]+""+e[4]),format:a?"name":"hex8"};if(e=j.hex3.exec(t))return{r:O(e[1]+""+e[1]),g:O(e[2]+""+e[2]),b:O(e[3]+""+e[3]),format:a?"name":"hex"};return!1}(e));"object"==typeof e&&(V(e.r)&&V(e.g)&&V(e.b)?(p=e.r,d=e.g,g=e.b,a={r:255*C(p,255),g:255*C(d,255),b:255*C(g,255)},h=!0,f="%"===String(e.r).substr(-1)?"prgb":"rgb"):V(e.h)&&V(e.s)&&V(e.v)?(l=I(e.s),c=I(e.v),a=function(e,r,n){e=6*C(e,360),r=C(r,100),n=C(n,100);var a=t.floor(e),i=e-a,o=n*(1-r),s=n*(1-i*r),l=n*(1-(1-i)*r),c=a%6;return{r:255*[n,s,o,o,l,n][c],g:255*[l,n,n,s,o,o][c],b:255*[o,o,l,n,n,s][c]}}(e.h,l,c),h=!0,f="hsv"):V(e.h)&&V(e.s)&&V(e.l)&&(l=I(e.s),u=I(e.l),a=function(t,e,r){var n,a,i;function o(t,e,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}if(t=C(t,360),e=C(e,100),r=C(r,100),0===e)n=a=i=r;else{var s=r<.5?r*(1+e):r+e-r*e,l=2*r-s;n=o(l,s,t+1/3),a=o(l,s,t),i=o(l,s,t-1/3)}return{r:255*n,g:255*a,b:255*i}}(e.h,l,u),h=!0,f="hsl"),e.hasOwnProperty("a")&&(i=e.a));var p,d,g;return i=L(i),{ok:h,format:e.format||f,r:o(255,s(a.r,0)),g:o(255,s(a.g,0)),b:o(255,s(a.b,0)),a:i}}(e);this._originalInput=e,this._r=u.r,this._g=u.g,this._b=u.b,this._a=u.a,this._roundA=i(100*this._a)/100,this._format=l.format||u.format,this._gradientType=l.gradientType,this._r<1&&(this._r=i(this._r)),this._g<1&&(this._g=i(this._g)),this._b<1&&(this._b=i(this._b)),this._ok=u.ok,this._tc_id=a++}function u(t,e,r){t=C(t,255),e=C(e,255),r=C(r,255);var n,a,i=s(t,e,r),l=o(t,e,r),c=(i+l)/2;if(i==l)n=a=0;else{var u=i-l;switch(a=c>.5?u/(2-i-l):u/(i+l),i){case t:n=(e-r)/u+(e<r?6:0);break;case e:n=(r-t)/u+2;break;case r:n=(t-e)/u+4}n/=6}return{h:n,s:a,l:c}}function h(t,e,r){t=C(t,255),e=C(e,255),r=C(r,255);var n,a,i=s(t,e,r),l=o(t,e,r),c=i,u=i-l;if(a=0===i?0:u/i,i==l)n=0;else{switch(i){case t:n=(e-r)/u+(e<r?6:0);break;case e:n=(r-t)/u+2;break;case r:n=(t-e)/u+4}n/=6}return{h:n,s:a,v:c}}function f(t,e,r,n){var a=[z(i(t).toString(16)),z(i(e).toString(16)),z(i(r).toString(16))];return n&&a[0].charAt(0)==a[0].charAt(1)&&a[1].charAt(0)==a[1].charAt(1)&&a[2].charAt(0)==a[2].charAt(1)?a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0):a.join("")}function p(t,e,r,n){return[z(D(n)),z(i(t).toString(16)),z(i(e).toString(16)),z(i(r).toString(16))].join("")}function d(t,e){e=0===e?0:e||10;var r=c(t).toHsl();return r.s-=e/100,r.s=P(r.s),c(r)}function g(t,e){e=0===e?0:e||10;var r=c(t).toHsl();return r.s+=e/100,r.s=P(r.s),c(r)}function v(t){return c(t).desaturate(100)}function m(t,e){e=0===e?0:e||10;var r=c(t).toHsl();return r.l+=e/100,r.l=P(r.l),c(r)}function y(t,e){e=0===e?0:e||10;var r=c(t).toRgb();return r.r=s(0,o(255,r.r-i(-e/100*255))),r.g=s(0,o(255,r.g-i(-e/100*255))),r.b=s(0,o(255,r.b-i(-e/100*255))),c(r)}function x(t,e){e=0===e?0:e||10;var r=c(t).toHsl();return r.l-=e/100,r.l=P(r.l),c(r)}function b(t,e){var r=c(t).toHsl(),n=(r.h+e)%360;return r.h=n<0?360+n:n,c(r)}function _(t){var e=c(t).toHsl();return e.h=(e.h+180)%360,c(e)}function w(t){var e=c(t).toHsl(),r=e.h;return[c(t),c({h:(r+120)%360,s:e.s,l:e.l}),c({h:(r+240)%360,s:e.s,l:e.l})]}function k(t){var e=c(t).toHsl(),r=e.h;return[c(t),c({h:(r+90)%360,s:e.s,l:e.l}),c({h:(r+180)%360,s:e.s,l:e.l}),c({h:(r+270)%360,s:e.s,l:e.l})]}function T(t){var e=c(t).toHsl(),r=e.h;return[c(t),c({h:(r+72)%360,s:e.s,l:e.l}),c({h:(r+216)%360,s:e.s,l:e.l})]}function M(t,e,r){e=e||6,r=r||30;var n=c(t).toHsl(),a=360/r,i=[c(t)];for(n.h=(n.h-(a*e>>1)+720)%360;--e;)n.h=(n.h+a)%360,i.push(c(n));return i}function A(t,e){e=e||6;for(var r=c(t).toHsv(),n=r.h,a=r.s,i=r.v,o=[],s=1/e;e--;)o.push(c({h:n,s:a,v:i})),i=(i+s)%1;return o}c.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var e,r,n,a=this.toRgb();return e=a.r/255,r=a.g/255,n=a.b/255,.2126*(e<=.03928?e/12.92:t.pow((e+.055)/1.055,2.4))+.7152*(r<=.03928?r/12.92:t.pow((r+.055)/1.055,2.4))+.0722*(n<=.03928?n/12.92:t.pow((n+.055)/1.055,2.4))},setAlpha:function(t){return this._a=L(t),this._roundA=i(100*this._a)/100,this},toHsv:function(){var t=h(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=h(this._r,this._g,this._b),e=i(360*t.h),r=i(100*t.s),n=i(100*t.v);return 1==this._a?"hsv("+e+", "+r+"%, "+n+"%)":"hsva("+e+", "+r+"%, "+n+"%, "+this._roundA+")"},toHsl:function(){var t=u(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=u(this._r,this._g,this._b),e=i(360*t.h),r=i(100*t.s),n=i(100*t.l);return 1==this._a?"hsl("+e+", "+r+"%, "+n+"%)":"hsla("+e+", "+r+"%, "+n+"%, "+this._roundA+")"},toHex:function(t){return f(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(t){return function(t,e,r,n,a){var o=[z(i(t).toString(16)),z(i(e).toString(16)),z(i(r).toString(16)),z(D(n))];if(a&&o[0].charAt(0)==o[0].charAt(1)&&o[1].charAt(0)==o[1].charAt(1)&&o[2].charAt(0)==o[2].charAt(1)&&o[3].charAt(0)==o[3].charAt(1))return o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0)+o[3].charAt(0);return o.join("")}(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return"#"+this.toHex8(t)},toRgb:function(){return{r:i(this._r),g:i(this._g),b:i(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+i(this._r)+", "+i(this._g)+", "+i(this._b)+")":"rgba("+i(this._r)+", "+i(this._g)+", "+i(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:i(100*C(this._r,255))+"%",g:i(100*C(this._g,255))+"%",b:i(100*C(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+i(100*C(this._r,255))+"%, "+i(100*C(this._g,255))+"%, "+i(100*C(this._b,255))+"%)":"rgba("+i(100*C(this._r,255))+"%, "+i(100*C(this._g,255))+"%, "+i(100*C(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(E[f(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e="#"+p(this._r,this._g,this._b,this._a),r=e,n=this._gradientType?"GradientType = 1, ":"";if(t){var a=c(t);r="#"+p(a._r,a._g,a._b,a._a)}return"progid:DXImageTransform.Microsoft.gradient("+n+"startColorstr="+e+",endColorstr="+r+")"},toString:function(t){var e=!!t;t=t||this._format;var r=!1,n=this._a<1&&this._a>=0;return e||!n||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"hex4"!==t&&"hex8"!==t&&"name"!==t?("rgb"===t&&(r=this.toRgbString()),"prgb"===t&&(r=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(r=this.toHexString()),"hex3"===t&&(r=this.toHexString(!0)),"hex4"===t&&(r=this.toHex8String(!0)),"hex8"===t&&(r=this.toHex8String()),"name"===t&&(r=this.toName()),"hsl"===t&&(r=this.toHslString()),"hsv"===t&&(r=this.toHsvString()),r||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},clone:function(){return c(this.toString())},_applyModification:function(t,e){var r=t.apply(null,[this].concat([].slice.call(e)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(m,arguments)},brighten:function(){return this._applyModification(y,arguments)},darken:function(){return this._applyModification(x,arguments)},desaturate:function(){return this._applyModification(d,arguments)},saturate:function(){return this._applyModification(g,arguments)},greyscale:function(){return this._applyModification(v,arguments)},spin:function(){return this._applyModification(b,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(M,arguments)},complement:function(){return this._applyCombination(_,arguments)},monochromatic:function(){return this._applyCombination(A,arguments)},splitcomplement:function(){return this._applyCombination(T,arguments)},triad:function(){return this._applyCombination(w,arguments)},tetrad:function(){return this._applyCombination(k,arguments)}},c.fromRatio=function(t,e){if("object"==typeof t){var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]="a"===n?t[n]:I(t[n]));t=r}return c(t,e)},c.equals=function(t,e){return!(!t||!e)&&c(t).toRgbString()==c(e).toRgbString()},c.random=function(){return c.fromRatio({r:l(),g:l(),b:l()})},c.mix=function(t,e,r){r=0===r?0:r||50;var n=c(t).toRgb(),a=c(e).toRgb(),i=r/100;return c({r:(a.r-n.r)*i+n.r,g:(a.g-n.g)*i+n.g,b:(a.b-n.b)*i+n.b,a:(a.a-n.a)*i+n.a})},c.readability=function(e,r){var n=c(e),a=c(r);return(t.max(n.getLuminance(),a.getLuminance())+.05)/(t.min(n.getLuminance(),a.getLuminance())+.05)},c.isReadable=function(t,e,r){var n,a,i=c.readability(t,e);switch(a=!1,(n=function(t){var e,r;e=((t=t||{level:"AA",size:"small"}).level||"AA").toUpperCase(),r=(t.size||"small").toLowerCase(),"AA"!==e&&"AAA"!==e&&(e="AA");"small"!==r&&"large"!==r&&(r="small");return{level:e,size:r}}(r)).level+n.size){case"AAsmall":case"AAAlarge":a=i>=4.5;break;case"AAlarge":a=i>=3;break;case"AAAsmall":a=i>=7}return a},c.mostReadable=function(t,e,r){var n,a,i,o,s=null,l=0;a=(r=r||{}).includeFallbackColors,i=r.level,o=r.size;for(var u=0;u<e.length;u++)(n=c.readability(t,e[u]))>l&&(l=n,s=c(e[u]));return c.isReadable(t,s,{level:i,size:o})||!a?s:(r.includeFallbackColors=!1,c.mostReadable(t,["#fff","#000"],r))};var S=c.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},E=c.hexNames=function(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}(S);function L(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function C(e,r){(function(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)})(e)&&(e="100%");var n=function(t){return"string"==typeof t&&-1!=t.indexOf("%")}(e);return e=o(r,s(0,parseFloat(e))),n&&(e=parseInt(e*r,10)/100),t.abs(e-r)<1e-6?1:e%r/parseFloat(r)}function P(t){return o(1,s(0,t))}function O(t){return parseInt(t,16)}function z(t){return 1==t.length?"0"+t:""+t}function I(t){return t<=1&&(t=100*t+"%"),t}function D(e){return t.round(255*parseFloat(e)).toString(16)}function R(t){return O(t)/255}var F,B,N,j=(B="[\\s|\\(]+("+(F="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+F+")[,|\\s]+("+F+")\\s*\\)?",N="[\\s|\\(]+("+F+")[,|\\s]+("+F+")[,|\\s]+("+F+")[,|\\s]+("+F+")\\s*\\)?",{CSS_UNIT:new RegExp(F),rgb:new RegExp("rgb"+B),rgba:new RegExp("rgba"+N),hsl:new RegExp("hsl"+B),hsla:new RegExp("hsla"+N),hsv:new RegExp("hsv"+B),hsva:new RegExp("hsva"+N),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function V(t){return!!j.CSS_UNIT.exec(t)}"undefined"!=typeof e&&e.exports?e.exports=c:window.tinycolor=c}(Math)},{}],536:[function(t,e,r){"use strict";e.exports=a,e.exports.float32=e.exports.float=a,e.exports.fract32=e.exports.fract=function(t){if(t.length){for(var e=a(t),r=0,n=e.length;r<n;r++)e[r]=t[r]-e[r];return e}return a(t-a(t))};var n=new Float32Array(1);function a(t){if(t.length){if(t instanceof Float32Array)return t;var e=new Float32Array(t);return e.set(t),e}return n[0]=t,n[0]}},{}],537:[function(t,e,r){"use strict";var n=t("parse-unit");e.exports=o;var a=96;function i(t,e){var r=n(getComputedStyle(t).getPropertyValue(e));return r[0]*o(r[1],t)}function o(t,e){switch(e=e||document.body,t=(t||"px").trim().toLowerCase(),e!==window&&e!==document||(e=document.body),t){case"%":return e.clientHeight/100;case"ch":case"ex":return function(t,e){var r=document.createElement("div");r.style["font-size"]="128"+t,e.appendChild(r);var n=i(r,"font-size")/128;return e.removeChild(r),n}(t,e);case"em":return i(e,"font-size");case"rem":return i(document.body,"font-size");case"vw":return window.innerWidth/100;case"vh":return window.innerHeight/100;case"vmin":return Math.min(window.innerWidth,window.innerHeight)/100;case"vmax":return Math.max(window.innerWidth,window.innerHeight)/100;case"in":return a;case"cm":return a/2.54;case"mm":return a/25.4;case"pt":return a/72;case"pc":return a/6}return 1}},{"parse-unit":462}],538:[function(t,e,r){var n;n=this,function(t){"use strict";var e=function(t){return t},r=function(t){if(null==(r=t.transform))return e;var r,n,a,i=r.scale[0],o=r.scale[1],s=r.translate[0],l=r.translate[1];return function(t,e){return e||(n=a=0),t[0]=(n+=t[0])*i+s,t[1]=(a+=t[1])*o+l,t}},n=function(t){var e=t.bbox;function n(t){l[0]=t[0],l[1]=t[1],s(l),l[0]<c&&(c=l[0]),l[0]>h&&(h=l[0]),l[1]<u&&(u=l[1]),l[1]>f&&(f=l[1])}function a(t){switch(t.type){case"GeometryCollection":t.geometries.forEach(a);break;case"Point":n(t.coordinates);break;case"MultiPoint":t.coordinates.forEach(n)}}if(!e){var i,o,s=r(t),l=new Array(2),c=1/0,u=c,h=-c,f=-c;for(o in t.arcs.forEach(function(t){for(var e=-1,r=t.length;++e<r;)i=t[e],l[0]=i[0],l[1]=i[1],s(l,e),l[0]<c&&(c=l[0]),l[0]>h&&(h=l[0]),l[1]<u&&(u=l[1]),l[1]>f&&(f=l[1])}),t.objects)a(t.objects[o]);e=t.bbox=[c,u,h,f]}return e},a=function(t,e){for(var r,n=t.length,a=n-e;a<--n;)r=t[a],t[a++]=t[n],t[n]=r};function i(t,e){var r=e.id,n=e.bbox,a=null==e.properties?{}:e.properties,i=o(t,e);return null==r&&null==n?{type:"Feature",properties:a,geometry:i}:null==n?{type:"Feature",id:r,properties:a,geometry:i}:{type:"Feature",id:r,bbox:n,properties:a,geometry:i}}function o(t,e){var n=r(t),i=t.arcs;function o(t,e){e.length&&e.pop();for(var r=i[t<0?~t:t],o=0,s=r.length;o<s;++o)e.push(n(r[o].slice(),o));t<0&&a(e,s)}function s(t){return n(t.slice())}function l(t){for(var e=[],r=0,n=t.length;r<n;++r)o(t[r],e);return e.length<2&&e.push(e[0].slice()),e}function c(t){for(var e=l(t);e.length<4;)e.push(e[0].slice());return e}function u(t){return t.map(c)}return function t(e){var r,n=e.type;switch(n){case"GeometryCollection":return{type:n,geometries:e.geometries.map(t)};case"Point":r=s(e.coordinates);break;case"MultiPoint":r=e.coordinates.map(s);break;case"LineString":r=l(e.arcs);break;case"MultiLineString":r=e.arcs.map(l);break;case"Polygon":r=u(e.arcs);break;case"MultiPolygon":r=e.arcs.map(u);break;default:return null}return{type:n,coordinates:r}}(e)}var s=function(t,e){var r={},n={},a={},i=[],o=-1;function s(t,e){for(var n in t){var a=t[n];delete e[a.start],delete a.start,delete a.end,a.forEach(function(t){r[t<0?~t:t]=1}),i.push(a)}}return e.forEach(function(r,n){var a,i=t.arcs[r<0?~r:r];i.length<3&&!i[1][0]&&!i[1][1]&&(a=e[++o],e[o]=r,e[n]=a)}),e.forEach(function(e){var r,i,o=function(e){var r,n=t.arcs[e<0?~e:e],a=n[0];t.transform?(r=[0,0],n.forEach(function(t){r[0]+=t[0],r[1]+=t[1]})):r=n[n.length-1];return e<0?[r,a]:[a,r]}(e),s=o[0],l=o[1];if(r=a[s])if(delete a[r.end],r.push(e),r.end=l,i=n[l]){delete n[i.start];var c=i===r?r:r.concat(i);n[c.start=r.start]=a[c.end=i.end]=c}else n[r.start]=a[r.end]=r;else if(r=n[l])if(delete n[r.start],r.unshift(e),r.start=s,i=a[s]){delete a[i.end];var u=i===r?r:i.concat(r);n[u.start=i.start]=a[u.end=r.end]=u}else n[r.start]=a[r.end]=r;else n[(r=[e]).start=s]=a[r.end=l]=r}),s(a,n),s(n,a),e.forEach(function(t){r[t<0?~t:t]||i.push([t])}),i};function l(t,e,r){var n,a,i;if(arguments.length>1)n=function(t,e,r){var n,a=[],i=[];function o(t){var e=t<0?~t:t;(i[e]||(i[e]=[])).push({i:t,g:n})}function s(t){t.forEach(o)}function l(t){t.forEach(s)}return function t(e){switch(n=e,e.type){case"GeometryCollection":e.geometries.forEach(t);break;case"LineString":s(e.arcs);break;case"MultiLineString":case"Polygon":l(e.arcs);break;case"MultiPolygon":e.arcs.forEach(l)}}(e),i.forEach(null==r?function(t){a.push(t[0].i)}:function(t){r(t[0].g,t[t.length-1].g)&&a.push(t[0].i)}),a}(0,e,r);else for(a=0,n=new Array(i=t.arcs.length);a<i;++a)n[a]=a;return{type:"MultiLineString",arcs:s(t,n)}}function c(t,e){var r={},n=[],a=[];function i(t){t.forEach(function(e){e.forEach(function(e){(r[e=e<0?~e:e]||(r[e]=[])).push(t)})}),n.push(t)}function l(e){return function(t){for(var e,r=-1,n=t.length,a=t[n-1],i=0;++r<n;)e=a,a=t[r],i+=e[0]*a[1]-e[1]*a[0];return Math.abs(i)}(o(t,{type:"Polygon",arcs:[e]}).coordinates[0])}return e.forEach(function t(e){switch(e.type){case"GeometryCollection":e.geometries.forEach(t);break;case"Polygon":i(e.arcs);break;case"MultiPolygon":e.arcs.forEach(i)}}),n.forEach(function(t){if(!t._){var e=[],n=[t];for(t._=1,a.push(e);t=n.pop();)e.push(t),t.forEach(function(t){t.forEach(function(t){r[t<0?~t:t].forEach(function(t){t._||(t._=1,n.push(t))})})})}}),n.forEach(function(t){delete t._}),{type:"MultiPolygon",arcs:a.map(function(e){var n,a=[];if(e.forEach(function(t){t.forEach(function(t){t.forEach(function(t){r[t<0?~t:t].length<2&&a.push(t)})})}),(n=(a=s(t,a)).length)>1)for(var i,o,c=1,u=l(a[0]);c<n;++c)(i=l(a[c]))>u&&(o=a[0],a[0]=a[c],a[c]=o,u=i);return a})}}var u=function(t,e){for(var r=0,n=t.length;r<n;){var a=r+n>>>1;t[a]<e?r=a+1:n=a}return r};t.bbox=n,t.feature=function(t,e){return"GeometryCollection"===e.type?{type:"FeatureCollection",features:e.geometries.map(function(e){return i(t,e)})}:i(t,e)},t.mesh=function(t){return o(t,l.apply(this,arguments))},t.meshArcs=l,t.merge=function(t){return o(t,c.apply(this,arguments))},t.mergeArcs=c,t.neighbors=function(t){var e={},r=t.map(function(){return[]});function n(t,r){t.forEach(function(t){t<0&&(t=~t);var n=e[t];n?n.push(r):e[t]=[r]})}function a(t,e){t.forEach(function(t){n(t,e)})}var i={LineString:n,MultiLineString:a,Polygon:a,MultiPolygon:function(t,e){t.forEach(function(t){a(t,e)})}};for(var o in t.forEach(function t(e,r){"GeometryCollection"===e.type?e.geometries.forEach(function(e){t(e,r)}):e.type in i&&i[e.type](e.arcs,r)}),e)for(var s=e[o],l=s.length,c=0;c<l;++c)for(var h=c+1;h<l;++h){var f,p=s[c],d=s[h];(f=r[p])[o=u(f,d)]!==d&&f.splice(o,0,d),(f=r[d])[o=u(f,p)]!==p&&f.splice(o,0,p)}return r},t.quantize=function(t,e){if(!((e=Math.floor(e))>=2))throw new Error("n must be \u22652");if(t.transform)throw new Error("already quantized");var r,a=n(t),i=a[0],o=(a[2]-i)/(e-1)||1,s=a[1],l=(a[3]-s)/(e-1)||1;function c(t){t[0]=Math.round((t[0]-i)/o),t[1]=Math.round((t[1]-s)/l)}function u(t){switch(t.type){case"GeometryCollection":t.geometries.forEach(u);break;case"Point":c(t.coordinates);break;case"MultiPoint":t.coordinates.forEach(c)}}for(r in t.arcs.forEach(function(t){for(var e,r,n,a=1,c=1,u=t.length,h=t[0],f=h[0]=Math.round((h[0]-i)/o),p=h[1]=Math.round((h[1]-s)/l);a<u;++a)h=t[a],r=Math.round((h[0]-i)/o),n=Math.round((h[1]-s)/l),r===f&&n===p||((e=t[c++])[0]=r-f,f=r,e[1]=n-p,p=n);c<2&&((e=t[c++])[0]=0,e[1]=0),t.length=c}),t.objects)u(t.objects[r]);return t.transform={scale:[o,l],translate:[i,s]},t},t.transform=r,t.untransform=function(t){if(null==(r=t.transform))return e;var r,n,a,i=r.scale[0],o=r.scale[1],s=r.translate[0],l=r.translate[1];return function(t,e){e||(n=a=0);var r=Math.round((t[0]-s)/i),c=Math.round((t[1]-l)/o);return t[0]=r-n,n=r,t[1]=c-a,a=c,t}},Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.topojson=n.topojson||{})},{}],539:[function(t,e,r){"use strict";e.exports=function(t){if(t<0)return[];if(0===t)return[[0]];for(var e=0|Math.round(i(t+1)),r=[],o=0;o<e;++o){for(var s=n.unrank(t,o),l=[0],c=0,u=0;u<s.length;++u)c+=1<<s[u],l.push(c);a(s)<1&&(l[0]=c,l[t]=0),r.push(l)}return r};var n=t("permutation-rank"),a=t("permutation-parity"),i=t("gamma")},{gamma:234,"permutation-parity":464,"permutation-rank":465}],540:[function(t,e,r){"use strict";e.exports=function(t){var e=(t=t||{}).center||[0,0,0],r=t.up||[0,1,0],n=t.right||h(r),a=t.radius||1,i=t.theta||0,u=t.phi||0;if(e=[].slice.call(e,0,3),r=[].slice.call(r,0,3),s(r,r),n=[].slice.call(n,0,3),s(n,n),"eye"in t){var p=t.eye,d=[p[0]-e[0],p[1]-e[1],p[2]-e[2]];o(n,d,r),c(n[0],n[1],n[2])<1e-6?n=h(r):s(n,n),a=c(d[0],d[1],d[2]);var g=l(r,d)/a,v=l(n,d)/a;u=Math.acos(g),i=Math.acos(v)}return a=Math.log(a),new f(t.zoomMin,t.zoomMax,e,r,n,a,i,u)};var n=t("filtered-vector"),a=t("gl-mat4/invert"),i=t("gl-mat4/rotate"),o=t("gl-vec3/cross"),s=t("gl-vec3/normalize"),l=t("gl-vec3/dot");function c(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function u(t){return Math.min(1,Math.max(-1,t))}function h(t){var e=Math.abs(t[0]),r=Math.abs(t[1]),n=Math.abs(t[2]),a=[0,0,0];e>Math.max(r,n)?a[2]=1:r>Math.max(e,n)?a[0]=1:a[1]=1;for(var i=0,o=0,l=0;l<3;++l)i+=t[l]*t[l],o+=a[l]*t[l];for(l=0;l<3;++l)a[l]-=o/i*t[l];return s(a,a),a}function f(t,e,r,a,i,o,s,l){this.center=n(r),this.up=n(a),this.right=n(i),this.radius=n([o]),this.angle=n([s,l]),this.angle.bounds=[[-1/0,-Math.PI/2],[1/0,Math.PI/2]],this.setDistanceLimits(t,e),this.computedCenter=this.center.curve(0),this.computedUp=this.up.curve(0),this.computedRight=this.right.curve(0),this.computedRadius=this.radius.curve(0),this.computedAngle=this.angle.curve(0),this.computedToward=[0,0,0],this.computedEye=[0,0,0],this.computedMatrix=new Array(16);for(var c=0;c<16;++c)this.computedMatrix[c]=.5;this.recalcMatrix(0)}var p=f.prototype;p.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},p.getDistanceLimits=function(t){var e=this.radius.bounds[0];return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},p.recalcMatrix=function(t){this.center.curve(t),this.up.curve(t),this.right.curve(t),this.radius.curve(t),this.angle.curve(t);for(var e=this.computedUp,r=this.computedRight,n=0,a=0,i=0;i<3;++i)a+=e[i]*r[i],n+=e[i]*e[i];var l=Math.sqrt(n),u=0;for(i=0;i<3;++i)r[i]-=e[i]*a/n,u+=r[i]*r[i],e[i]/=l;var h=Math.sqrt(u);for(i=0;i<3;++i)r[i]/=h;var f=this.computedToward;o(f,e,r),s(f,f);var p=Math.exp(this.computedRadius[0]),d=this.computedAngle[0],g=this.computedAngle[1],v=Math.cos(d),m=Math.sin(d),y=Math.cos(g),x=Math.sin(g),b=this.computedCenter,_=v*y,w=m*y,k=x,T=-v*x,M=-m*x,A=y,S=this.computedEye,E=this.computedMatrix;for(i=0;i<3;++i){var L=_*r[i]+w*f[i]+k*e[i];E[4*i+1]=T*r[i]+M*f[i]+A*e[i],E[4*i+2]=L,E[4*i+3]=0}var C=E[1],P=E[5],O=E[9],z=E[2],I=E[6],D=E[10],R=P*D-O*I,F=O*z-C*D,B=C*I-P*z,N=c(R,F,B);R/=N,F/=N,B/=N,E[0]=R,E[4]=F,E[8]=B;for(i=0;i<3;++i)S[i]=b[i]+E[2+4*i]*p;for(i=0;i<3;++i){u=0;for(var j=0;j<3;++j)u+=E[i+4*j]*S[j];E[12+i]=-u}E[15]=1},p.getMatrix=function(t,e){this.recalcMatrix(t);var r=this.computedMatrix;if(e){for(var n=0;n<16;++n)e[n]=r[n];return e}return r};var d=[0,0,0];p.rotate=function(t,e,r,n){if(this.angle.move(t,e,r),n){this.recalcMatrix(t);var a=this.computedMatrix;d[0]=a[2],d[1]=a[6],d[2]=a[10];for(var o=this.computedUp,s=this.computedRight,l=this.computedToward,c=0;c<3;++c)a[4*c]=o[c],a[4*c+1]=s[c],a[4*c+2]=l[c];i(a,a,n,d);for(c=0;c<3;++c)o[c]=a[4*c],s[c]=a[4*c+1];this.up.set(t,o[0],o[1],o[2]),this.right.set(t,s[0],s[1],s[2])}},p.pan=function(t,e,r,n){e=e||0,r=r||0,n=n||0,this.recalcMatrix(t);var a=this.computedMatrix,i=(Math.exp(this.computedRadius[0]),a[1]),o=a[5],s=a[9],l=c(i,o,s);i/=l,o/=l,s/=l;var u=a[0],h=a[4],f=a[8],p=u*i+h*o+f*s,d=c(u-=i*p,h-=o*p,f-=s*p),g=(u/=d)*e+i*r,v=(h/=d)*e+o*r,m=(f/=d)*e+s*r;this.center.move(t,g,v,m);var y=Math.exp(this.computedRadius[0]);y=Math.max(1e-4,y+n),this.radius.set(t,Math.log(y))},p.translate=function(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},p.setMatrix=function(t,e,r,n){var i=1;"number"==typeof r&&(i=0|r),(i<0||i>3)&&(i=1);var o=(i+2)%3;e||(this.recalcMatrix(t),e=this.computedMatrix);var s=e[i],l=e[i+4],h=e[i+8];if(n){var f=Math.abs(s),p=Math.abs(l),d=Math.abs(h),g=Math.max(f,p,d);f===g?(s=s<0?-1:1,l=h=0):d===g?(h=h<0?-1:1,s=l=0):(l=l<0?-1:1,s=h=0)}else{var v=c(s,l,h);s/=v,l/=v,h/=v}var m,y,x=e[o],b=e[o+4],_=e[o+8],w=x*s+b*l+_*h,k=c(x-=s*w,b-=l*w,_-=h*w),T=l*(_/=k)-h*(b/=k),M=h*(x/=k)-s*_,A=s*b-l*x,S=c(T,M,A);if(T/=S,M/=S,A/=S,this.center.jump(t,H,G,Y),this.radius.idle(t),this.up.jump(t,s,l,h),this.right.jump(t,x,b,_),2===i){var E=e[1],L=e[5],C=e[9],P=E*x+L*b+C*_,O=E*T+L*M+C*A;m=R<0?-Math.PI/2:Math.PI/2,y=Math.atan2(O,P)}else{var z=e[2],I=e[6],D=e[10],R=z*s+I*l+D*h,F=z*x+I*b+D*_,B=z*T+I*M+D*A;m=Math.asin(u(R)),y=Math.atan2(B,F)}this.angle.jump(t,y,m),this.recalcMatrix(t);var N=e[2],j=e[6],V=e[10],U=this.computedMatrix;a(U,e);var q=U[15],H=U[12]/q,G=U[13]/q,Y=U[14]/q,W=Math.exp(this.computedRadius[0]);this.center.jump(t,H-N*W,G-j*W,Y-V*W)},p.lastT=function(){return Math.max(this.center.lastT(),this.up.lastT(),this.right.lastT(),this.radius.lastT(),this.angle.lastT())},p.idle=function(t){this.center.idle(t),this.up.idle(t),this.right.idle(t),this.radius.idle(t),this.angle.idle(t)},p.flush=function(t){this.center.flush(t),this.up.flush(t),this.right.flush(t),this.radius.flush(t),this.angle.flush(t)},p.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},p.lookAt=function(t,e,r,n){this.recalcMatrix(t),e=e||this.computedEye,r=r||this.computedCenter;var a=(n=n||this.computedUp)[0],i=n[1],o=n[2],s=c(a,i,o);if(!(s<1e-6)){a/=s,i/=s,o/=s;var l=e[0]-r[0],h=e[1]-r[1],f=e[2]-r[2],p=c(l,h,f);if(!(p<1e-6)){l/=p,h/=p,f/=p;var d=this.computedRight,g=d[0],v=d[1],m=d[2],y=a*g+i*v+o*m,x=c(g-=y*a,v-=y*i,m-=y*o);if(!(x<.01&&(x=c(g=i*f-o*h,v=o*l-a*f,m=a*h-i*l))<1e-6)){g/=x,v/=x,m/=x,this.up.set(t,a,i,o),this.right.set(t,g,v,m),this.center.set(t,r[0],r[1],r[2]),this.radius.set(t,Math.log(p));var b=i*m-o*v,_=o*g-a*m,w=a*v-i*g,k=c(b,_,w),T=a*l+i*h+o*f,M=g*l+v*h+m*f,A=(b/=k)*l+(_/=k)*h+(w/=k)*f,S=Math.asin(u(T)),E=Math.atan2(A,M),L=this.angle._state,C=L[L.length-1],P=L[L.length-2];C%=2*Math.PI;var O=Math.abs(C+2*Math.PI-E),z=Math.abs(C-E),I=Math.abs(C-2*Math.PI-E);O<z&&(C+=2*Math.PI),I<z&&(C-=2*Math.PI),this.angle.jump(this.angle.lastT(),C,P),this.angle.set(t,E,S)}}}}},{"filtered-vector":229,"gl-mat4/invert":268,"gl-mat4/rotate":273,"gl-vec3/cross":336,"gl-vec3/dot":341,"gl-vec3/normalize":358}],541:[function(t,e,r){"use strict";e.exports=function(t,e,r){var a=t*e,i=n*t,o=i-(i-t),s=t-o,l=n*e,c=l-(l-e),u=e-c,h=s*u-(a-o*c-s*c-o*u);if(r)return r[0]=h,r[1]=a,r;return[h,a]};var n=+(Math.pow(2,27)+1)},{}],542:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n=t+e,a=n-t,i=e-a,o=t-(n-a);if(r)return r[0]=o+i,r[1]=n,r;return[o+i,n]}},{}],543:[function(t,e,r){(function(e,n){"use strict";var a=t("bit-twiddle"),i=t("dup");e.__TYPEDARRAY_POOL||(e.__TYPEDARRAY_POOL={UINT8:i([32,0]),UINT16:i([32,0]),UINT32:i([32,0]),INT8:i([32,0]),INT16:i([32,0]),INT32:i([32,0]),FLOAT:i([32,0]),DOUBLE:i([32,0]),DATA:i([32,0]),UINT8C:i([32,0]),BUFFER:i([32,0])});var o="undefined"!=typeof Uint8ClampedArray,s=e.__TYPEDARRAY_POOL;s.UINT8C||(s.UINT8C=i([32,0])),s.BUFFER||(s.BUFFER=i([32,0]));var l=s.DATA,c=s.BUFFER;function u(t){if(t){var e=t.length||t.byteLength,r=a.log2(e);l[r].push(t)}}function h(t){t=a.nextPow2(t);var e=a.log2(t),r=l[e];return r.length>0?r.pop():new ArrayBuffer(t)}function f(t){return new Uint8Array(h(t),0,t)}function p(t){return new Uint16Array(h(2*t),0,t)}function d(t){return new Uint32Array(h(4*t),0,t)}function g(t){return new Int8Array(h(t),0,t)}function v(t){return new Int16Array(h(2*t),0,t)}function m(t){return new Int32Array(h(4*t),0,t)}function y(t){return new Float32Array(h(4*t),0,t)}function x(t){return new Float64Array(h(8*t),0,t)}function b(t){return o?new Uint8ClampedArray(h(t),0,t):f(t)}function _(t){return new DataView(h(t),0,t)}function w(t){t=a.nextPow2(t);var e=a.log2(t),r=c[e];return r.length>0?r.pop():new n(t)}r.free=function(t){if(n.isBuffer(t))c[a.log2(t.length)].push(t);else{if("[object ArrayBuffer]"!==Object.prototype.toString.call(t)&&(t=t.buffer),!t)return;var e=t.length||t.byteLength,r=0|a.log2(e);l[r].push(t)}},r.freeUint8=r.freeUint16=r.freeUint32=r.freeInt8=r.freeInt16=r.freeInt32=r.freeFloat32=r.freeFloat=r.freeFloat64=r.freeDouble=r.freeUint8Clamped=r.freeDataView=function(t){u(t.buffer)},r.freeArrayBuffer=u,r.freeBuffer=function(t){c[a.log2(t.length)].push(t)},r.malloc=function(t,e){if(void 0===e||"arraybuffer"===e)return h(t);switch(e){case"uint8":return f(t);case"uint16":return p(t);case"uint32":return d(t);case"int8":return g(t);case"int16":return v(t);case"int32":return m(t);case"float":case"float32":return y(t);case"double":case"float64":return x(t);case"uint8_clamped":return b(t);case"buffer":return w(t);case"data":case"dataview":return _(t);default:return null}return null},r.mallocArrayBuffer=h,r.mallocUint8=f,r.mallocUint16=p,r.mallocUint32=d,r.mallocInt8=g,r.mallocInt16=v,r.mallocInt32=m,r.mallocFloat32=r.mallocFloat=y,r.mallocFloat64=r.mallocDouble=x,r.mallocUint8Clamped=b,r.mallocDataView=_,r.mallocBuffer=w,r.clearCache=function(){for(var t=0;t<32;++t)s.UINT8[t].length=0,s.UINT16[t].length=0,s.UINT32[t].length=0,s.INT8[t].length=0,s.INT16[t].length=0,s.INT32[t].length=0,s.FLOAT[t].length=0,s.DOUBLE[t].length=0,s.UINT8C[t].length=0,l[t].length=0,c[t].length=0}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},t("buffer").Buffer)},{"bit-twiddle":94,buffer:107,dup:172}],544:[function(t,e,r){"use strict";function n(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}e.exports=n;var a=n.prototype;Object.defineProperty(a,"length",{get:function(){return this.roots.length}}),a.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t},a.find=function(t){for(var e=t,r=this.roots;r[t]!==t;)t=r[t];for(;r[e]!==t;){var n=r[e];r[e]=t,e=n}return t},a.link=function(t,e){var r=this.find(t),n=this.find(e);if(r!==n){var a=this.ranks,i=this.roots,o=a[r],s=a[n];o<s?i[r]=n:s<o?i[n]=r:(i[n]=r,++a[r])}}},{}],545:[function(t,e,r){"use strict";e.exports=function(t,e,r){return 0===t.length?t:e?(r||t.sort(e),function(t,e){for(var r=1,n=t.length,a=t[0],i=t[0],o=1;o<n;++o)if(i=a,e(a=t[o],i)){if(o===r){r++;continue}t[r++]=a}return t.length=r,t}(t,e)):(r||t.sort(),function(t){for(var e=1,r=t.length,n=t[0],a=t[0],i=1;i<r;++i,a=n)if(a=n,(n=t[i])!==a){if(i===e){e++;continue}t[e++]=n}return t.length=e,t}(t))}},{}],546:[function(t,e,r){var n=/[\'\"]/;e.exports=function(t){return t?(n.test(t.charAt(0))&&(t=t.substr(1)),n.test(t.charAt(t.length-1))&&(t=t.substr(0,t.length-1)),t):""}},{}],547:[function(t,e,r){"use strict";e.exports=function(t,e,r){Array.isArray(r)||(r=[].slice.call(arguments,2));for(var n=0,a=r.length;n<a;n++){var i=r[n];for(var o in i)if((void 0===e[o]||Array.isArray(e[o])||t[o]!==e[o])&&o in e){var s;if(!0===i[o])s=e[o];else{if(!1===i[o])continue;if("function"==typeof i[o]&&void 0===(s=i[o](e[o],t,e)))continue}t[o]=s}}return t}},{}],548:[function(t,e,r){"use strict";e.exports=function(t,e){"object"==typeof e&&null!==e||(e={});return n(t,e.canvas||a,e.context||i,e)};var n=t("./lib/vtext"),a=null,i=null;"undefined"!=typeof document&&((a=document.createElement("canvas")).width=8192,a.height=1024,i=a.getContext("2d"))},{"./lib/vtext":549}],549:[function(t,e,r){e.exports=function(t,e,r,n){var i=64,o=1.25,s={breaklines:!1,bolds:!1,italics:!1,subscripts:!1,superscripts:!1};n&&(n.size&&n.size>0&&(i=n.size),n.lineSpacing&&n.lineSpacing>0&&(o=n.lineSpacing),n.styletags&&n.styletags.breaklines&&(s.breaklines=!!n.styletags.breaklines),n.styletags&&n.styletags.bolds&&(s.bolds=!!n.styletags.bolds),n.styletags&&n.styletags.italics&&(s.italics=!!n.styletags.italics),n.styletags&&n.styletags.subscripts&&(s.subscripts=!!n.styletags.subscripts),n.styletags&&n.styletags.superscripts&&(s.superscripts=!!n.styletags.superscripts));return r.font=[n.fontStyle,n.fontVariant,n.fontWeight,i+"px",n.font].filter(function(t){return t}).join(" "),r.textAlign="start",r.textBaseline="alphabetic",r.direction="ltr",w(function(t,e,r,n,i,o){r=r.replace(/\n/g,""),r=!0===o.breaklines?r.replace(/\<br\>/g,"\n"):r.replace(/\<br\>/g," ");var s="",l=[];for(k=0;k<r.length;++k)l[k]=s;!0===o.bolds&&(l=x(c,u,r,l)),!0===o.italics&&(l=x(h,f,r,l)),!0===o.superscripts&&(l=x(p,g,r,l)),!0===o.subscripts&&(l=x(v,y,r,l));var b=[],_="";for(k=0;k<r.length;++k)null!==l[k]&&(_+=r[k],b.push(l[k]));var w,k,T,M,A,S=_.split("\n"),E=S.length,L=Math.round(i*n),C=n,P=2*n,O=0,z=E*L+P;t.height<z&&(t.height=z),e.fillStyle="#000",e.fillRect(0,0,t.width,t.height),e.fillStyle="#fff";var I=0,D="";function R(){if(""!==D){var t=e.measureText(D).width;e.fillText(D,C+T,P+M),T+=t}}function F(){return Math.round(A)+"px "}function B(t,r){var n=""+e.font;if(!0===o.subscripts){var a=t.indexOf(m),i=r.indexOf(m),s=a>-1?parseInt(t[1+a]):0,l=i>-1?parseInt(r[1+i]):0;s!==l&&(n=n.replace(F(),"?px "),A*=Math.pow(.75,l-s),n=n.replace("?px ",F())),M+=.25*L*(l-s)}if(!0===o.superscripts){var c=t.indexOf(d),h=r.indexOf(d),p=c>-1?parseInt(t[1+c]):0,g=h>-1?parseInt(r[1+h]):0;p!==g&&(n=n.replace(F(),"?px "),A*=Math.pow(.75,g-p),n=n.replace("?px ",F())),M-=.25*L*(g-p)}if(!0===o.bolds){var v=t.indexOf(u)>-1,y=r.indexOf(u)>-1;!v&&y&&(n=x?n.replace("italic ","italic bold "):"bold "+n),v&&!y&&(n=n.replace("bold ",""))}if(!0===o.italics){var x=t.indexOf(f)>-1,b=r.indexOf(f)>-1;!x&&b&&(n="italic "+n),x&&!b&&(n=n.replace("italic ",""))}e.font=n}for(w=0;w<E;++w){var N=S[w]+"\n";for(T=0,M=w*L,A=n,D="",k=0;k<N.length;++k){var j=k+I<b.length?b[k+I]:b[b.length-1];s===j?D+=N[k]:(R(),D=N[k],void 0!==j&&(B(s,j),s=j))}R(),I+=N.length;var V=0|Math.round(T+2*C);O<V&&(O=V)}var U=O,q=P+L*E;return a(e.getImageData(0,0,U,q).data,[q,U,4]).pick(-1,-1,0).transpose(1,0)}(e,r,t,i,o,s),n,i)},e.exports.processPixels=w;var n=t("surface-nets"),a=t("ndarray"),i=t("simplify-planar-graph"),o=t("clean-pslg"),s=t("cdt2d"),l=t("planar-graph-to-polyline"),c="b",u="b|",h="i",f="i|",p="sup",d="+",g="+1",v="sub",m="-",y="-1";function x(t,e,r,n){for(var a="<"+t+">",i="</"+t+">",o=a.length,s=i.length,l=e[0]===d||e[0]===m,c=0,u=-s;c>-1&&-1!==(c=r.indexOf(a,c))&&-1!==(u=r.indexOf(i,c+o))&&!(u<=c);){for(var h=c;h<u+s;++h)if(h<c+o||h>=u)n[h]=null,r=r.substr(0,h)+" "+r.substr(h+1);else if(null!==n[h]){var f=n[h].indexOf(e[0]);-1===f?n[h]+=e:l&&(n[h]=n[h].substr(0,f+1)+(1+parseInt(n[h][f+1]))+n[h].substr(f+2))}var p=c+o,g=r.substr(p,u-p).indexOf(a);c=-1!==g?g:u+s}return n}function b(t,e){var r=n(t,128);return e?i(r.cells,r.positions,.25):{edges:r.cells,positions:r.positions}}function _(t,e,r,n){var a=b(t,n),i=function(t,e,r){for(var n=e.textAlign||"start",a=e.textBaseline||"alphabetic",i=[1<<30,1<<30],o=[0,0],s=t.length,l=0;l<s;++l)for(var c=t[l],u=0;u<2;++u)i[u]=0|Math.min(i[u],c[u]),o[u]=0|Math.max(o[u],c[u]);var h=0;switch(n){case"center":h=-.5*(i[0]+o[0]);break;case"right":case"end":h=-o[0];break;case"left":case"start":h=-i[0];break;default:throw new Error("vectorize-text: Unrecognized textAlign: '"+n+"'")}var f=0;switch(a){case"hanging":case"top":f=-i[1];break;case"middle":f=-.5*(i[1]+o[1]);break;case"alphabetic":case"ideographic":f=-3*r;break;case"bottom":f=-o[1];break;default:throw new Error("vectorize-text: Unrecoginized textBaseline: '"+a+"'")}var p=1/r;return"lineHeight"in e?p*=+e.lineHeight:"width"in e?p=e.width/(o[0]-i[0]):"height"in e&&(p=e.height/(o[1]-i[1])),t.map(function(t){return[p*(t[0]+h),p*(t[1]+f)]})}(a.positions,e,r),c=a.edges,u="ccw"===e.orientation;if(o(i,c),e.polygons||e.polygon||e.polyline){for(var h=l(c,i),f=new Array(h.length),p=0;p<h.length;++p){for(var d=h[p],g=new Array(d.length),v=0;v<d.length;++v){for(var m=d[v],y=new Array(m.length),x=0;x<m.length;++x)y[x]=i[m[x]].slice();u&&y.reverse(),g[v]=y}f[p]=g}return f}return e.triangles||e.triangulate||e.triangle?{cells:s(i,c,{delaunay:!1,exterior:!1,interior:!0}),positions:i}:{edges:c,positions:i}}function w(t,e,r){try{return _(t,e,r,!0)}catch(t){}try{return _(t,e,r,!1)}catch(t){}return e.polygons||e.polyline||e.polygon?[]:e.triangles||e.triangulate||e.triangle?{cells:[],positions:[]}:{edges:[],positions:[]}}},{cdt2d:108,"clean-pslg":118,ndarray:451,"planar-graph-to-polyline":469,"simplify-planar-graph":522,"surface-nets":529}],550:[function(t,e,r){!function(){"use strict";if("undefined"==typeof ses||!ses.ok||ses.ok()){"undefined"!=typeof ses&&(ses.weakMapPermitHostObjects=v);var t=!1;if("function"==typeof WeakMap){var r=WeakMap;if("undefined"!=typeof navigator&&/Firefox/.test(navigator.userAgent));else{var n=new r,a=Object.freeze({});if(n.set(a,1),1===n.get(a))return void(e.exports=WeakMap);t=!0}}Object.prototype.hasOwnProperty;var i=Object.getOwnPropertyNames,o=Object.defineProperty,s=Object.isExtensible,l="weakmap:",c=l+"ident:"+Math.random()+"___";if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues&&"function"==typeof ArrayBuffer&&"function"==typeof Uint8Array){var u=new ArrayBuffer(25),h=new Uint8Array(u);crypto.getRandomValues(h),c=l+"rand:"+Array.prototype.map.call(h,function(t){return(t%36).toString(36)}).join("")+"___"}if(o(Object,"getOwnPropertyNames",{value:function(t){return i(t).filter(m)}}),"getPropertyNames"in Object){var f=Object.getPropertyNames;o(Object,"getPropertyNames",{value:function(t){return f(t).filter(m)}})}!function(){var t=Object.freeze;o(Object,"freeze",{value:function(e){return y(e),t(e)}});var e=Object.seal;o(Object,"seal",{value:function(t){return y(t),e(t)}});var r=Object.preventExtensions;o(Object,"preventExtensions",{value:function(t){return y(t),r(t)}})}();var p=!1,d=0,g=function(){this instanceof g||b();var t=[],e=[],r=d++;return Object.create(g.prototype,{get___:{value:x(function(n,a){var i,o=y(n);return o?r in o?o[r]:a:(i=t.indexOf(n))>=0?e[i]:a})},has___:{value:x(function(e){var n=y(e);return n?r in n:t.indexOf(e)>=0})},set___:{value:x(function(n,a){var i,o=y(n);return o?o[r]=a:(i=t.indexOf(n))>=0?e[i]=a:(i=t.length,e[i]=a,t[i]=n),this})},delete___:{value:x(function(n){var a,i,o=y(n);return o?r in o&&delete o[r]:!((a=t.indexOf(n))<0||(i=t.length-1,t[a]=void 0,e[a]=e[i],t[a]=t[i],t.length=i,e.length=i,0))})}})};g.prototype=Object.create(Object.prototype,{get:{value:function(t,e){return this.get___(t,e)},writable:!0,configurable:!0},has:{value:function(t){return this.has___(t)},writable:!0,configurable:!0},set:{value:function(t,e){return this.set___(t,e)},writable:!0,configurable:!0},delete:{value:function(t){return this.delete___(t)},writable:!0,configurable:!0}}),"function"==typeof r?function(){function n(){this instanceof g||b();var e,n=new r,a=void 0,i=!1;return e=t?function(t,e){return n.set(t,e),n.has(t)||(a||(a=new g),a.set(t,e)),this}:function(t,e){if(i)try{n.set(t,e)}catch(r){a||(a=new g),a.set___(t,e)}else n.set(t,e);return this},Object.create(g.prototype,{get___:{value:x(function(t,e){return a?n.has(t)?n.get(t):a.get___(t,e):n.get(t,e)})},has___:{value:x(function(t){return n.has(t)||!!a&&a.has___(t)})},set___:{value:x(e)},delete___:{value:x(function(t){var e=!!n.delete(t);return a&&a.delete___(t)||e})},permitHostObjects___:{value:x(function(t){if(t!==v)throw new Error("bogus call to permitHostObjects___");i=!0})}})}t&&"undefined"!=typeof Proxy&&(Proxy=void 0),n.prototype=g.prototype,e.exports=n,Object.defineProperty(WeakMap.prototype,"constructor",{value:WeakMap,enumerable:!1,configurable:!0,writable:!0})}():("undefined"!=typeof Proxy&&(Proxy=void 0),e.exports=g)}function v(t){t.permitHostObjects___&&t.permitHostObjects___(v)}function m(t){return!(t.substr(0,l.length)==l&&"___"===t.substr(t.length-3))}function y(t){if(t!==Object(t))throw new TypeError("Not an object: "+t);var e=t[c];if(e&&e.key===t)return e;if(s(t)){e={key:t};try{return o(t,c,{value:e,writable:!1,enumerable:!1,configurable:!1}),e}catch(t){return}}}function x(t){return t.prototype=null,Object.freeze(t)}function b(){p||"undefined"==typeof console||(p=!0,console.warn("WeakMap should be invoked as new WeakMap(), not WeakMap(). This will be an error in the future."))}}()},{}],551:[function(t,e,r){var n=t("./hidden-store.js");e.exports=function(){var t={};return function(e){if(("object"!=typeof e||null===e)&&"function"!=typeof e)throw new Error("Weakmap-shim: Key must be object");var r=e.valueOf(t);return r&&r.identity===t?r:n(e,t)}}},{"./hidden-store.js":552}],552:[function(t,e,r){e.exports=function(t,e){var r={identity:e},n=t.valueOf;return Object.defineProperty(t,"valueOf",{value:function(t){return t!==e?n.apply(this,arguments):r},writable:!0}),r}},{}],553:[function(t,e,r){var n=t("./create-store.js");e.exports=function(){var t=n();return{get:function(e,r){var n=t(e);return n.hasOwnProperty("value")?n.value:r},set:function(e,r){return t(e).value=r,this},has:function(e){return"value"in t(e)},delete:function(e){return delete t(e).value}}}},{"./create-store.js":551}],554:[function(t,e,r){var n=t("get-canvas-context");e.exports=function(t){return n("webgl",t)}},{"get-canvas-context":235}],555:[function(t,e,r){var n=t("../main"),a=t("object-assign"),i=n.instance();function o(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}o.prototype=new n.baseCalendar,a(o.prototype,{name:"Chinese",jdEpoch:1721425.5,hasYearZero:!1,minMonth:0,firstMonth:0,minDay:1,regionalOptions:{"":{name:"Chinese",epochs:["BEC","EC"],monthNumbers:function(t,e){if("string"==typeof t){var r=t.match(l);return r?r[0]:""}var n=this._validateYear(t),a=t.month(),i=""+this.toChineseMonth(n,a);return e&&i.length<2&&(i="0"+i),this.isIntercalaryMonth(n,a)&&(i+="i"),i},monthNames:function(t){if("string"==typeof t){var e=t.match(c);return e?e[0]:""}var r=this._validateYear(t),n=t.month(),a=["\u4e00\u6708","\u4e8c\u6708","\u4e09\u6708","\u56db\u6708","\u4e94\u6708","\u516d\u6708","\u4e03\u6708","\u516b\u6708","\u4e5d\u6708","\u5341\u6708","\u5341\u4e00\u6708","\u5341\u4e8c\u6708"][this.toChineseMonth(r,n)-1];return this.isIntercalaryMonth(r,n)&&(a="\u95f0"+a),a},monthNamesShort:function(t){if("string"==typeof t){var e=t.match(u);return e?e[0]:""}var r=this._validateYear(t),n=t.month(),a=["\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d","\u4e03","\u516b","\u4e5d","\u5341","\u5341\u4e00","\u5341\u4e8c"][this.toChineseMonth(r,n)-1];return this.isIntercalaryMonth(r,n)&&(a="\u95f0"+a),a},parseMonth:function(t,e){t=this._validateYear(t);var r,n=parseInt(e);if(isNaN(n))"\u95f0"===e[0]&&(r=!0,e=e.substring(1)),"\u6708"===e[e.length-1]&&(e=e.substring(0,e.length-1)),n=1+["\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d","\u4e03","\u516b","\u4e5d","\u5341","\u5341\u4e00","\u5341\u4e8c"].indexOf(e);else{var a=e[e.length-1];r="i"===a||"I"===a}return this.toMonthIndex(t,n,r)},dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:1,isRTL:!1}},_validateYear:function(t,e){if(t.year&&(t=t.year()),"number"!=typeof t||t<1888||t>2111)throw e.replace(/\{0\}/,this.local.name);return t},toMonthIndex:function(t,e,r){var a=this.intercalaryMonth(t);if(r&&e!==a||e<1||e>12)throw n.local.invalidMonth.replace(/\{0\}/,this.local.name);return a?!r&&e<=a?e-1:e:e-1},toChineseMonth:function(t,e){t.year&&(e=(t=t.year()).month());var r=this.intercalaryMonth(t);if(e<0||e>(r?12:11))throw n.local.invalidMonth.replace(/\{0\}/,this.local.name);return r?e<r?e+1:e:e+1},intercalaryMonth:function(t){return t=this._validateYear(t),h[t-h[0]]>>13},isIntercalaryMonth:function(t,e){t.year&&(e=(t=t.year()).month());var r=this.intercalaryMonth(t);return!!r&&r===e},leapYear:function(t){return 0!==this.intercalaryMonth(t)},weekOfYear:function(t,e,r){var a,o=this._validateYear(t,n.local.invalidyear),s=f[o-f[0]],l=s>>9&4095,c=s>>5&15,u=31&s;(a=i.newDate(l,c,u)).add(4-(a.dayOfWeek()||7),"d");var h=this.toJD(t,e,r)-a.toJD();return 1+Math.floor(h/7)},monthsInYear:function(t){return this.leapYear(t)?13:12},daysInMonth:function(t,e){t.year&&(e=t.month(),t=t.year()),t=this._validateYear(t);var r=h[t-h[0]];if(e>(r>>13?12:11))throw n.local.invalidMonth.replace(/\{0\}/,this.local.name);return r&1<<12-e?30:29},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var a=this._validate(t,s,r,n.local.invalidDate);t=this._validateYear(a.year()),e=a.month(),r=a.day();var o=this.isIntercalaryMonth(t,e),s=this.toChineseMonth(t,e),l=function(t,e,r,n,a){var i,o,s;if("object"==typeof t)o=t,i=e||{};else{var l="number"==typeof t&&t>=1888&&t<=2111;if(!l)throw new Error("Lunar year outside range 1888-2111");var c="number"==typeof e&&e>=1&&e<=12;if(!c)throw new Error("Lunar month outside range 1 - 12");var u,p="number"==typeof r&&r>=1&&r<=30;if(!p)throw new Error("Lunar day outside range 1 - 30");"object"==typeof n?(u=!1,i=n):(u=!!n,i=a||{}),o={year:t,month:e,day:r,isIntercalary:u}}s=o.day-1;var d,g=h[o.year-h[0]],v=g>>13;d=v?o.month>v?o.month:o.isIntercalary?o.month:o.month-1:o.month-1;for(var m=0;m<d;m++){var y=g&1<<12-m?30:29;s+=y}var x=f[o.year-f[0]],b=new Date(x>>9&4095,(x>>5&15)-1,(31&x)+s);return i.year=b.getFullYear(),i.month=1+b.getMonth(),i.day=b.getDate(),i}(t,s,r,o);return i.toJD(l.year,l.month,l.day)},fromJD:function(t){var e=i.fromJD(t),r=function(t,e,r,n){var a,i;if("object"==typeof t)a=t,i=e||{};else{var o="number"==typeof t&&t>=1888&&t<=2111;if(!o)throw new Error("Solar year outside range 1888-2111");var s="number"==typeof e&&e>=1&&e<=12;if(!s)throw new Error("Solar month outside range 1 - 12");var l="number"==typeof r&&r>=1&&r<=31;if(!l)throw new Error("Solar day outside range 1 - 31");a={year:t,month:e,day:r},i=n||{}}var c=f[a.year-f[0]],u=a.year<<9|a.month<<5|a.day;i.year=u>=c?a.year:a.year-1,c=f[i.year-f[0]];var p,d=new Date(c>>9&4095,(c>>5&15)-1,31&c),g=new Date(a.year,a.month-1,a.day);p=Math.round((g-d)/864e5);var v,m=h[i.year-h[0]];for(v=0;v<13;v++){var y=m&1<<12-v?30:29;if(p<y)break;p-=y}var x=m>>13;!x||v<x?(i.isIntercalary=!1,i.month=1+v):v===x?(i.isIntercalary=!0,i.month=v):(i.isIntercalary=!1,i.month=v);return i.day=1+p,i}(e.year(),e.month(),e.day()),n=this.toMonthIndex(r.year,r.month,r.isIntercalary);return this.newDate(r.year,n,r.day)},fromString:function(t){var e=t.match(s),r=this._validateYear(+e[1]),n=+e[2],a=!!e[3],i=this.toMonthIndex(r,n,a),o=+e[4];return this.newDate(r,i,o)},add:function(t,e,r){var n=t.year(),a=t.month(),i=this.isIntercalaryMonth(n,a),s=this.toChineseMonth(n,a),l=Object.getPrototypeOf(o.prototype).add.call(this,t,e,r);if("y"===r){var c=l.year(),u=l.month(),h=this.isIntercalaryMonth(c,s),f=i&&h?this.toMonthIndex(c,s,!0):this.toMonthIndex(c,s,!1);f!==u&&l.month(f)}return l}});var s=/^\s*(-?\d\d\d\d|\d\d)[-/](\d?\d)([iI]?)[-/](\d?\d)/m,l=/^\d?\d[iI]?/m,c=/^\u95f0?\u5341?[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]?\u6708/m,u=/^\u95f0?\u5341?[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]?/m;n.calendars.chinese=o;var h=[1887,5780,5802,19157,2742,50359,1198,2646,46378,7466,3412,30122,5482,67949,2396,5294,43597,6732,6954,36181,2772,4954,18781,2396,54427,5274,6730,47781,5800,6868,21210,4790,59703,2350,5270,46667,3402,3496,38325,1388,4782,18735,2350,52374,6804,7498,44457,2906,1388,29294,4700,63789,6442,6804,56138,5802,2772,38235,1210,4698,22827,5418,63125,3476,5802,43701,2484,5302,27223,2646,70954,7466,3412,54698,5482,2412,38062,5294,2636,32038,6954,60245,2772,4826,43357,2394,5274,39501,6730,72357,5800,5844,53978,4790,2358,38039,5270,87627,3402,3496,54708,5484,4782,43311,2350,3222,27978,7498,68965,2904,5484,45677,4700,6444,39573,6804,6986,19285,2772,62811,1210,4698,47403,5418,5780,38570,5546,76469,2420,5302,51799,2646,5414,36501,3412,5546,18869,2412,54446,5276,6732,48422,6822,2900,28010,4826,92509,2394,5274,55883,6730,6820,47956,5812,2778,18779,2358,62615,5270,5450,46757,3492,5556,27318,4718,67887,2350,3222,52554,7498,3428,38252,5468,4700,31022,6444,64149,6804,6986,43861,2772,5338,35421,2650,70955,5418,5780,54954,5546,2740,38074,5302,2646,29991,3366,61011,3412,5546,43445,2412,5294,35406,6732,72998,6820,6996,52586,2778,2396,38045,5274,6698,23333,6820,64338,5812,2746,43355,2358,5270,39499,5450,79525,3492,5548],f=[1887,966732,967231,967733,968265,968766,969297,969798,970298,970829,971330,971830,972362,972863,973395,973896,974397,974928,975428,975929,976461,976962,977462,977994,978494,979026,979526,980026,980558,981059,981559,982091,982593,983124,983624,984124,984656,985157,985656,986189,986690,987191,987722,988222,988753,989254,989754,990286,990788,991288,991819,992319,992851,993352,993851,994383,994885,995385,995917,996418,996918,997450,997949,998481,998982,999483,1000014,1000515,1001016,1001548,1002047,1002578,1003080,1003580,1004111,1004613,1005113,1005645,1006146,1006645,1007177,1007678,1008209,1008710,1009211,1009743,1010243,1010743,1011275,1011775,1012306,1012807,1013308,1013840,1014341,1014841,1015373,1015874,1016404,1016905,1017405,1017937,1018438,1018939,1019471,1019972,1020471,1021002,1021503,1022035,1022535,1023036,1023568,1024069,1024568,1025100,1025601,1026102,1026633,1027133,1027666,1028167,1028666,1029198,1029699,1030199,1030730,1031231,1031763,1032264,1032764,1033296,1033797,1034297,1034828,1035329,1035830,1036362,1036861,1037393,1037894,1038394,1038925,1039427,1039927,1040459,1040959,1041491,1041992,1042492,1043023,1043524,1044024,1044556,1045057,1045558,1046090,1046590,1047121,1047622,1048122,1048654,1049154,1049655,1050187,1050689,1051219,1051720,1052220,1052751,1053252,1053752,1054284,1054786,1055285,1055817,1056317,1056849,1057349,1057850,1058382,1058883,1059383,1059915,1060415,1060947,1061447,1061947,1062479,1062981,1063480,1064012,1064514,1065014,1065545,1066045,1066577,1067078,1067578,1068110,1068611,1069112,1069642,1070142,1070674,1071175,1071675,1072207,1072709,1073209,1073740,1074241,1074741,1075273,1075773,1076305,1076807,1077308,1077839,1078340,1078840,1079372,1079871,1080403,1080904]},{"../main":569,"object-assign":455}],556:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Coptic",jdEpoch:1825029.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Coptic",epochs:["BAM","AM"],monthNames:["Thout","Paopi","Hathor","Koiak","Tobi","Meshir","Paremhat","Paremoude","Pashons","Paoni","Epip","Mesori","Pi Kogi Enavot"],monthNamesShort:["Tho","Pao","Hath","Koi","Tob","Mesh","Pat","Pad","Pash","Pao","Epi","Meso","PiK"],dayNames:["Tkyriaka","Pesnau","Pshoment","Peftoou","Ptiou","Psoou","Psabbaton"],dayNamesShort:["Tky","Pes","Psh","Pef","Pti","Pso","Psa"],dayNamesMin:["Tk","Pes","Psh","Pef","Pt","Pso","Psa"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[""].invalidYear),13},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);return(t=a.year())<0&&t++,a.day()+30*(a.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,r=Math.floor((e-Math.floor((e+366)/1461))/365)+1;r<=0&&r--,e=Math.floor(t)+.5-this.newDate(r,1,1).toJD();var n=Math.floor(e/30)+1,a=e-30*(n-1)+1;return this.newDate(r,n,a)}}),n.calendars.coptic=i},{"../main":569,"object-assign":455}],557:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Discworld",jdEpoch:1721425.5,daysPerMonth:[16,32,32,32,32,32,32,32,32,32,32,32,32],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Discworld",epochs:["BUC","UC"],monthNames:["Ick","Offle","February","March","April","May","June","Grune","August","Spune","Sektober","Ember","December"],monthNamesShort:["Ick","Off","Feb","Mar","Apr","May","Jun","Gru","Aug","Spu","Sek","Emb","Dec"],dayNames:["Sunday","Octeday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Oct","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Oc","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:2,isRTL:!1}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),!1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),13},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),400},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/8)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]},daysInWeek:function(){return 8},dayOfWeek:function(t,e,r){return(this._validate(t,e,r,n.local.invalidDate).day()+1)%8},weekDay:function(t,e,r){var n=this.dayOfWeek(t,e,r);return n>=2&&n<=6},extraInfo:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);return{century:o[Math.floor((a.year()-1)/100)+1]||""}},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);return t=a.year()+(a.year()<0?1:0),e=a.month(),(r=a.day())+(e>1?16:0)+(e>2?32*(e-2):0)+400*(t-1)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t+.5)-Math.floor(this.jdEpoch)-1;var e=Math.floor(t/400)+1;t-=400*(e-1),t+=t>15?16:0;var r=Math.floor(t/32)+1,n=t-32*(r-1)+1;return this.newDate(e<=0?e-1:e,r,n)}});var o={20:"Fruitbat",21:"Anchovy"};n.calendars.discworld=i},{"../main":569,"object-assign":455}],558:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Ethiopian",jdEpoch:1724220.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Ethiopian",epochs:["BEE","EE"],monthNames:["Meskerem","Tikemet","Hidar","Tahesas","Tir","Yekatit","Megabit","Miazia","Genbot","Sene","Hamle","Nehase","Pagume"],monthNamesShort:["Mes","Tik","Hid","Tah","Tir","Yek","Meg","Mia","Gen","Sen","Ham","Neh","Pag"],dayNames:["Ehud","Segno","Maksegno","Irob","Hamus","Arb","Kidame"],dayNamesShort:["Ehu","Seg","Mak","Iro","Ham","Arb","Kid"],dayNamesMin:["Eh","Se","Ma","Ir","Ha","Ar","Ki"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[""].invalidYear),13},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);return(t=a.year())<0&&t++,a.day()+30*(a.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,r=Math.floor((e-Math.floor((e+366)/1461))/365)+1;r<=0&&r--,e=Math.floor(t)+.5-this.newDate(r,1,1).toJD();var n=Math.floor(e/30)+1,a=e-30*(n-1)+1;return this.newDate(r,n,a)}}),n.calendars.ethiopian=i},{"../main":569,"object-assign":455}],559:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}function o(t,e){return t-e*Math.floor(t/e)}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Hebrew",jdEpoch:347995.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29,29],hasYearZero:!1,minMonth:1,firstMonth:7,minDay:1,regionalOptions:{"":{name:"Hebrew",epochs:["BAM","AM"],monthNames:["Nisan","Iyar","Sivan","Tammuz","Av","Elul","Tishrei","Cheshvan","Kislev","Tevet","Shevat","Adar","Adar II"],monthNamesShort:["Nis","Iya","Siv","Tam","Av","Elu","Tis","Che","Kis","Tev","She","Ada","Ad2"],dayNames:["Yom Rishon","Yom Sheni","Yom Shlishi","Yom Revi'i","Yom Chamishi","Yom Shishi","Yom Shabbat"],dayNamesShort:["Ris","She","Shl","Rev","Cha","Shi","Sha"],dayNamesMin:["Ri","She","Shl","Re","Ch","Shi","Sha"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return this._leapYear(e.year())},_leapYear:function(t){return o(7*(t=t<0?t+1:t)+1,19)<7},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),this._leapYear(t.year?t.year():t)?13:12},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year(),this.toJD(-1===t?1:t+1,7,1)-this.toJD(t,7,1)},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,n.local.invalidMonth),12===e&&this.leapYear(t)?30:8===e&&5===o(this.daysInYear(t),10)?30:9===e&&3===o(this.daysInYear(t),10)?29:this.daysPerMonth[e-1]},weekDay:function(t,e,r){return 6!==this.dayOfWeek(t,e,r)},extraInfo:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);return{yearType:(this.leapYear(a)?"embolismic":"common")+" "+["deficient","regular","complete"][this.daysInYear(a)%10-3]}},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);t=a.year(),e=a.month(),r=a.day();var i=t<=0?t+1:t,o=this.jdEpoch+this._delay1(i)+this._delay2(i)+r+1;if(e<7){for(var s=7;s<=this.monthsInYear(t);s++)o+=this.daysInMonth(t,s);for(s=1;s<e;s++)o+=this.daysInMonth(t,s)}else for(s=7;s<e;s++)o+=this.daysInMonth(t,s);return o},_delay1:function(t){var e=Math.floor((235*t-234)/19),r=12084+13753*e,n=29*e+Math.floor(r/25920);return o(3*(n+1),7)<3&&n++,n},_delay2:function(t){var e=this._delay1(t-1),r=this._delay1(t);return this._delay1(t+1)-r==356?2:r-e==382?1:0},fromJD:function(t){t=Math.floor(t)+.5;for(var e=Math.floor(98496*(t-this.jdEpoch)/35975351)-1;t>=this.toJD(-1===e?1:e+1,7,1);)e++;for(var r=t<this.toJD(e,1,1)?7:1;t>this.toJD(e,r,this.daysInMonth(e,r));)r++;var n=t-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),n.calendars.hebrew=i},{"../main":569,"object-assign":455}],560:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Islamic",jdEpoch:1948439.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Islamic",epochs:["BH","AH"],monthNames:["Muharram","Safar","Rabi' al-awwal","Rabi' al-thani","Jumada al-awwal","Jumada al-thani","Rajab","Sha'aban","Ramadan","Shawwal","Dhu al-Qi'dah","Dhu al-Hijjah"],monthNamesShort:["Muh","Saf","Rab1","Rab2","Jum1","Jum2","Raj","Sha'","Ram","Shaw","DhuQ","DhuH"],dayNames:["Yawm al-ahad","Yawm al-ithnayn","Yawm ath-thulaathaa'","Yawm al-arbi'aa'","Yawm al-kham\u012bs","Yawm al-jum'a","Yawm as-sabt"],dayNamesShort:["Aha","Ith","Thu","Arb","Kha","Jum","Sab"],dayNamesMin:["Ah","It","Th","Ar","Kh","Ju","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!1}},leapYear:function(t){return(11*this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year()+14)%30<11},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return this.leapYear(t)?355:354},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);return t=a.year(),e=a.month(),t=t<=0?t+1:t,(r=a.day())+Math.ceil(29.5*(e-1))+354*(t-1)+Math.floor((3+11*t)/30)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t)+.5;var e=Math.floor((30*(t-this.jdEpoch)+10646)/10631);e=e<=0?e-1:e;var r=Math.min(12,Math.ceil((t-29-this.toJD(e,1,1))/29.5)+1),n=t-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),n.calendars.islamic=i},{"../main":569,"object-assign":455}],561:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Julian",jdEpoch:1721423.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Julian",epochs:["BC","AD"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"mm/dd/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()<0?e.year()+1:e.year())%4==0},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);return t=a.year(),e=a.month(),r=a.day(),t<0&&t++,e<=2&&(t--,e+=12),Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r-1524.5},fromJD:function(t){var e=Math.floor(t+.5)+1524,r=Math.floor((e-122.1)/365.25),n=Math.floor(365.25*r),a=Math.floor((e-n)/30.6001),i=a-Math.floor(a<14?1:13),o=r-Math.floor(i>2?4716:4715),s=e-n-Math.floor(30.6001*a);return o<=0&&o--,this.newDate(o,i,s)}}),n.calendars.julian=i},{"../main":569,"object-assign":455}],562:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}function o(t,e){return t-e*Math.floor(t/e)}function s(t,e){return o(t-1,e)+1}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Mayan",jdEpoch:584282.5,hasYearZero:!0,minMonth:0,firstMonth:0,minDay:0,regionalOptions:{"":{name:"Mayan",epochs:["",""],monthNames:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"],monthNamesShort:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"],dayNames:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],dayNamesShort:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],dayNamesMin:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],digits:null,dateFormat:"YYYY.m.d",firstDay:0,isRTL:!1,haabMonths:["Pop","Uo","Zip","Zotz","Tzec","Xul","Yaxkin","Mol","Chen","Yax","Zac","Ceh","Mac","Kankin","Muan","Pax","Kayab","Cumku","Uayeb"],tzolkinMonths:["Imix","Ik","Akbal","Kan","Chicchan","Cimi","Manik","Lamat","Muluc","Oc","Chuen","Eb","Ben","Ix","Men","Cib","Caban","Etznab","Cauac","Ahau"]}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),!1},formatYear:function(t){t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year();var e=Math.floor(t/400);return t%=400,t+=t<0?400:0,e+"."+Math.floor(t/20)+"."+t%20},forYear:function(t){if((t=t.split(".")).length<3)throw"Invalid Mayan year";for(var e=0,r=0;r<t.length;r++){var n=parseInt(t[r],10);if(Math.abs(n)>19||r>0&&n<0)throw"Invalid Mayan year";e=20*e+n}return e},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),18},weekOfYear:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate),0},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),360},daysInMonth:function(t,e){return this._validate(t,e,this.minDay,n.local.invalidMonth),20},daysInWeek:function(){return 5},dayOfWeek:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate).day()},weekDay:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate),!0},extraInfo:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate).toJD(),i=this._toHaab(a),o=this._toTzolkin(a);return{haabMonthName:this.local.haabMonths[i[0]-1],haabMonth:i[0],haabDay:i[1],tzolkinDayName:this.local.tzolkinMonths[o[0]-1],tzolkinDay:o[0],tzolkinTrecena:o[1]}},_toHaab:function(t){var e=o((t-=this.jdEpoch)+8+340,365);return[Math.floor(e/20)+1,o(e,20)]},_toTzolkin:function(t){return[s((t-=this.jdEpoch)+20,20),s(t+4,13)]},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);return a.day()+20*a.month()+360*a.year()+this.jdEpoch},fromJD:function(t){t=Math.floor(t)+.5-this.jdEpoch;var e=Math.floor(t/360);t%=360,t+=t<0?360:0;var r=Math.floor(t/20),n=t%20;return this.newDate(e,r,n)}}),n.calendars.mayan=i},{"../main":569,"object-assign":455}],563:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}i.prototype=new n.baseCalendar;var o=n.instance("gregorian");a(i.prototype,{name:"Nanakshahi",jdEpoch:2257673.5,daysPerMonth:[31,31,31,31,31,30,30,30,30,30,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Nanakshahi",epochs:["BN","AN"],monthNames:["Chet","Vaisakh","Jeth","Harh","Sawan","Bhadon","Assu","Katak","Maghar","Poh","Magh","Phagun"],monthNamesShort:["Che","Vai","Jet","Har","Saw","Bha","Ass","Kat","Mgr","Poh","Mgh","Pha"],dayNames:["Somvaar","Mangalvar","Budhvaar","Veervaar","Shukarvaar","Sanicharvaar","Etvaar"],dayNamesShort:["Som","Mangal","Budh","Veer","Shukar","Sanichar","Et"],dayNamesMin:["So","Ma","Bu","Ve","Sh","Sa","Et"],digits:null,dateFormat:"dd-mm-yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[""].invalidYear);return o.leapYear(e.year()+(e.year()<1?1:0)+1469)},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(1-(n.dayOfWeek()||7),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidMonth);(t=a.year())<0&&t++;for(var i=a.day(),s=1;s<a.month();s++)i+=this.daysPerMonth[s-1];return i+o.toJD(t+1468,3,13)},fromJD:function(t){t=Math.floor(t+.5);for(var e=Math.floor((t-(this.jdEpoch-1))/366);t>=this.toJD(e+1,1,1);)e++;for(var r=t-Math.floor(this.toJD(e,1,1)+.5)+1,n=1;r>this.daysInMonth(e,n);)r-=this.daysInMonth(e,n),n++;return this.newDate(e,n,r)}}),n.calendars.nanakshahi=i},{"../main":569,"object-assign":455}],564:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Nepali",jdEpoch:1700709.5,daysPerMonth:[31,31,32,32,31,30,30,29,30,29,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,daysPerYear:365,regionalOptions:{"":{name:"Nepali",epochs:["BBS","ABS"],monthNames:["Baisakh","Jestha","Ashadh","Shrawan","Bhadra","Ashwin","Kartik","Mangsir","Paush","Mangh","Falgun","Chaitra"],monthNamesShort:["Bai","Je","As","Shra","Bha","Ash","Kar","Mang","Pau","Ma","Fal","Chai"],dayNames:["Aaitabaar","Sombaar","Manglbaar","Budhabaar","Bihibaar","Shukrabaar","Shanibaar"],dayNamesShort:["Aaita","Som","Mangl","Budha","Bihi","Shukra","Shani"],dayNamesMin:["Aai","So","Man","Bu","Bi","Shu","Sha"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:1,isRTL:!1}},leapYear:function(t){return this.daysInYear(t)!==this.daysPerYear},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){if(t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year(),"undefined"==typeof this.NEPALI_CALENDAR_DATA[t])return this.daysPerYear;for(var e=0,r=this.minMonth;r<=12;r++)e+=this.NEPALI_CALENDAR_DATA[t][r];return e},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,n.local.invalidMonth),"undefined"==typeof this.NEPALI_CALENDAR_DATA[t]?this.daysPerMonth[e-1]:this.NEPALI_CALENDAR_DATA[t][e]},weekDay:function(t,e,r){return 6!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);t=a.year(),e=a.month(),r=a.day();var i=n.instance(),o=0,s=e,l=t;this._createMissingCalendarData(t);var c=t-(s>9||9===s&&r>=this.NEPALI_CALENDAR_DATA[l][0]?56:57);for(9!==e&&(o=r,s--);9!==s;)s<=0&&(s=12,l--),o+=this.NEPALI_CALENDAR_DATA[l][s],s--;return 9===e?(o+=r-this.NEPALI_CALENDAR_DATA[l][0])<0&&(o+=i.daysInYear(c)):o+=this.NEPALI_CALENDAR_DATA[l][9]-this.NEPALI_CALENDAR_DATA[l][0],i.newDate(c,1,1).add(o,"d").toJD()},fromJD:function(t){var e=n.instance().fromJD(t),r=e.year(),a=e.dayOfYear(),i=r+56;this._createMissingCalendarData(i);for(var o=9,s=this.NEPALI_CALENDAR_DATA[i][0],l=this.NEPALI_CALENDAR_DATA[i][o]-s+1;a>l;)++o>12&&(o=1,i++),l+=this.NEPALI_CALENDAR_DATA[i][o];var c=this.NEPALI_CALENDAR_DATA[i][o]-(l-a);return this.newDate(i,o,c)},_createMissingCalendarData:function(t){var e=this.daysPerMonth.slice(0);e.unshift(17);for(var r=t-1;r<t+2;r++)"undefined"==typeof this.NEPALI_CALENDAR_DATA[r]&&(this.NEPALI_CALENDAR_DATA[r]=e)},NEPALI_CALENDAR_DATA:{1970:[18,31,31,32,31,31,31,30,29,30,29,30,30],1971:[18,31,31,32,31,32,30,30,29,30,29,30,30],1972:[17,31,32,31,32,31,30,30,30,29,29,30,30],1973:[19,30,32,31,32,31,30,30,30,29,30,29,31],1974:[19,31,31,32,30,31,31,30,29,30,29,30,30],1975:[18,31,31,32,32,30,31,30,29,30,29,30,30],1976:[17,31,32,31,32,31,30,30,30,29,29,30,31],1977:[18,31,32,31,32,31,31,29,30,29,30,29,31],1978:[18,31,31,32,31,31,31,30,29,30,29,30,30],1979:[18,31,31,32,32,31,30,30,29,30,29,30,30],1980:[17,31,32,31,32,31,30,30,30,29,29,30,31],1981:[18,31,31,31,32,31,31,29,30,30,29,30,30],1982:[18,31,31,32,31,31,31,30,29,30,29,30,30],1983:[18,31,31,32,32,31,30,30,29,30,29,30,30],1984:[17,31,32,31,32,31,30,30,30,29,29,30,31],1985:[18,31,31,31,32,31,31,29,30,30,29,30,30],1986:[18,31,31,32,31,31,31,30,29,30,29,30,30],1987:[18,31,32,31,32,31,30,30,29,30,29,30,30],1988:[17,31,32,31,32,31,30,30,30,29,29,30,31],1989:[18,31,31,31,32,31,31,30,29,30,29,30,30],1990:[18,31,31,32,31,31,31,30,29,30,29,30,30],1991:[18,31,32,31,32,31,30,30,29,30,29,30,30],1992:[17,31,32,31,32,31,30,30,30,29,30,29,31],1993:[18,31,31,31,32,31,31,30,29,30,29,30,30],1994:[18,31,31,32,31,31,31,30,29,30,29,30,30],1995:[17,31,32,31,32,31,30,30,30,29,29,30,30],1996:[17,31,32,31,32,31,30,30,30,29,30,29,31],1997:[18,31,31,32,31,31,31,30,29,30,29,30,30],1998:[18,31,31,32,31,31,31,30,29,30,29,30,30],1999:[17,31,32,31,32,31,30,30,30,29,29,30,31],2000:[17,30,32,31,32,31,30,30,30,29,30,29,31],2001:[18,31,31,32,31,31,31,30,29,30,29,30,30],2002:[18,31,31,32,32,31,30,30,29,30,29,30,30],2003:[17,31,32,31,32,31,30,30,30,29,29,30,31],2004:[17,30,32,31,32,31,30,30,30,29,30,29,31],2005:[18,31,31,32,31,31,31,30,29,30,29,30,30],2006:[18,31,31,32,32,31,30,30,29,30,29,30,30],2007:[17,31,32,31,32,31,30,30,30,29,29,30,31],2008:[17,31,31,31,32,31,31,29,30,30,29,29,31],2009:[18,31,31,32,31,31,31,30,29,30,29,30,30],2010:[18,31,31,32,32,31,30,30,29,30,29,30,30],2011:[17,31,32,31,32,31,30,30,30,29,29,30,31],2012:[17,31,31,31,32,31,31,29,30,30,29,30,30],2013:[18,31,31,32,31,31,31,30,29,30,29,30,30],2014:[18,31,31,32,32,31,30,30,29,30,29,30,30],2015:[17,31,32,31,32,31,30,30,30,29,29,30,31],2016:[17,31,31,31,32,31,31,29,30,30,29,30,30],2017:[18,31,31,32,31,31,31,30,29,30,29,30,30],2018:[18,31,32,31,32,31,30,30,29,30,29,30,30],2019:[17,31,32,31,32,31,30,30,30,29,30,29,31],2020:[17,31,31,31,32,31,31,30,29,30,29,30,30],2021:[18,31,31,32,31,31,31,30,29,30,29,30,30],2022:[17,31,32,31,32,31,30,30,30,29,29,30,30],2023:[17,31,32,31,32,31,30,30,30,29,30,29,31],2024:[17,31,31,31,32,31,31,30,29,30,29,30,30],2025:[18,31,31,32,31,31,31,30,29,30,29,30,30],2026:[17,31,32,31,32,31,30,30,30,29,29,30,31],2027:[17,30,32,31,32,31,30,30,30,29,30,29,31],2028:[17,31,31,32,31,31,31,30,29,30,29,30,30],2029:[18,31,31,32,31,32,30,30,29,30,29,30,30],2030:[17,31,32,31,32,31,30,30,30,30,30,30,31],2031:[17,31,32,31,32,31,31,31,31,31,31,31,31],2032:[17,32,32,32,32,32,32,32,32,32,32,32,32],2033:[18,31,31,32,32,31,30,30,29,30,29,30,30],2034:[17,31,32,31,32,31,30,30,30,29,29,30,31],2035:[17,30,32,31,32,31,31,29,30,30,29,29,31],2036:[17,31,31,32,31,31,31,30,29,30,29,30,30],2037:[18,31,31,32,32,31,30,30,29,30,29,30,30],2038:[17,31,32,31,32,31,30,30,30,29,29,30,31],2039:[17,31,31,31,32,31,31,29,30,30,29,30,30],2040:[17,31,31,32,31,31,31,30,29,30,29,30,30],2041:[18,31,31,32,32,31,30,30,29,30,29,30,30],2042:[17,31,32,31,32,31,30,30,30,29,29,30,31],2043:[17,31,31,31,32,31,31,29,30,30,29,30,30],2044:[17,31,31,32,31,31,31,30,29,30,29,30,30],2045:[18,31,32,31,32,31,30,30,29,30,29,30,30],2046:[17,31,32,31,32,31,30,30,30,29,29,30,31],2047:[17,31,31,31,32,31,31,30,29,30,29,30,30],2048:[17,31,31,32,31,31,31,30,29,30,29,30,30],2049:[17,31,32,31,32,31,30,30,30,29,29,30,30],2050:[17,31,32,31,32,31,30,30,30,29,30,29,31],2051:[17,31,31,31,32,31,31,30,29,30,29,30,30],2052:[17,31,31,32,31,31,31,30,29,30,29,30,30],2053:[17,31,32,31,32,31,30,30,30,29,29,30,30],2054:[17,31,32,31,32,31,30,30,30,29,30,29,31],2055:[17,31,31,32,31,31,31,30,29,30,30,29,30],2056:[17,31,31,32,31,32,30,30,29,30,29,30,30],2057:[17,31,32,31,32,31,30,30,30,29,29,30,31],2058:[17,30,32,31,32,31,30,30,30,29,30,29,31],2059:[17,31,31,32,31,31,31,30,29,30,29,30,30],2060:[17,31,31,32,32,31,30,30,29,30,29,30,30],2061:[17,31,32,31,32,31,30,30,30,29,29,30,31],2062:[17,30,32,31,32,31,31,29,30,29,30,29,31],2063:[17,31,31,32,31,31,31,30,29,30,29,30,30],2064:[17,31,31,32,32,31,30,30,29,30,29,30,30],2065:[17,31,32,31,32,31,30,30,30,29,29,30,31],2066:[17,31,31,31,32,31,31,29,30,30,29,29,31],2067:[17,31,31,32,31,31,31,30,29,30,29,30,30],2068:[17,31,31,32,32,31,30,30,29,30,29,30,30],2069:[17,31,32,31,32,31,30,30,30,29,29,30,31],2070:[17,31,31,31,32,31,31,29,30,30,29,30,30],2071:[17,31,31,32,31,31,31,30,29,30,29,30,30],2072:[17,31,32,31,32,31,30,30,29,30,29,30,30],2073:[17,31,32,31,32,31,30,30,30,29,29,30,31],2074:[17,31,31,31,32,31,31,30,29,30,29,30,30],2075:[17,31,31,32,31,31,31,30,29,30,29,30,30],2076:[16,31,32,31,32,31,30,30,30,29,29,30,30],2077:[17,31,32,31,32,31,30,30,30,29,30,29,31],2078:[17,31,31,31,32,31,31,30,29,30,29,30,30],2079:[17,31,31,32,31,31,31,30,29,30,29,30,30],2080:[16,31,32,31,32,31,30,30,30,29,29,30,30],2081:[17,31,31,32,32,31,30,30,30,29,30,30,30],2082:[17,31,32,31,32,31,30,30,30,29,30,30,30],2083:[17,31,31,32,31,31,30,30,30,29,30,30,30],2084:[17,31,31,32,31,31,30,30,30,29,30,30,30],2085:[17,31,32,31,32,31,31,30,30,29,30,30,30],2086:[17,31,32,31,32,31,30,30,30,29,30,30,30],2087:[16,31,31,32,31,31,31,30,30,29,30,30,30],2088:[16,30,31,32,32,30,31,30,30,29,30,30,30],2089:[17,31,32,31,32,31,30,30,30,29,30,30,30],2090:[17,31,32,31,32,31,30,30,30,29,30,30,30],2091:[16,31,31,32,31,31,31,30,30,29,30,30,30],2092:[16,31,31,32,32,31,30,30,30,29,30,30,30],2093:[17,31,32,31,32,31,30,30,30,29,30,30,30],2094:[17,31,31,32,31,31,30,30,30,29,30,30,30],2095:[17,31,31,32,31,31,31,30,29,30,30,30,30],2096:[17,30,31,32,32,31,30,30,29,30,29,30,30],2097:[17,31,32,31,32,31,30,30,30,29,30,30,30],2098:[17,31,31,32,31,31,31,29,30,29,30,30,31],2099:[17,31,31,32,31,31,31,30,29,29,30,30,30],2100:[17,31,32,31,32,30,31,30,29,30,29,30,30]}}),n.calendars.nepali=i},{"../main":569,"object-assign":455}],565:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}function o(t,e){return t-e*Math.floor(t/e)}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Persian",jdEpoch:1948320.5,daysPerMonth:[31,31,31,31,31,31,30,30,30,30,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Persian",epochs:["BP","AP"],monthNames:["Farvardin","Ordibehesht","Khordad","Tir","Mordad","Shahrivar","Mehr","Aban","Azar","Day","Bahman","Esfand"],monthNamesShort:["Far","Ord","Kho","Tir","Mor","Sha","Meh","Aba","Aza","Day","Bah","Esf"],dayNames:["Yekshambe","Doshambe","Seshambe","Ch\xe6harshambe","Panjshambe","Jom'e","Shambe"],dayNamesShort:["Yek","Do","Se","Ch\xe6","Panj","Jom","Sha"],dayNamesMin:["Ye","Do","Se","Ch","Pa","Jo","Sh"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return 682*((e.year()-(e.year()>0?474:473))%2820+474+38)%2816<682},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-(n.dayOfWeek()+1)%7,"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);t=a.year(),e=a.month(),r=a.day();var i=t-(t>=0?474:473),s=474+o(i,2820);return r+(e<=7?31*(e-1):30*(e-1)+6)+Math.floor((682*s-110)/2816)+365*(s-1)+1029983*Math.floor(i/2820)+this.jdEpoch-1},fromJD:function(t){var e=(t=Math.floor(t)+.5)-this.toJD(475,1,1),r=Math.floor(e/1029983),n=o(e,1029983),a=2820;if(1029982!==n){var i=Math.floor(n/366),s=o(n,366);a=Math.floor((2134*i+2816*s+2815)/1028522)+i+1}var l=a+2820*r+474;l=l<=0?l-1:l;var c=t-this.toJD(l,1,1)+1,u=c<=186?Math.ceil(c/31):Math.ceil((c-6)/30),h=t-this.toJD(l,u,1)+1;return this.newDate(l,u,h)}}),n.calendars.persian=i,n.calendars.jalali=i},{"../main":569,"object-assign":455}],566:[function(t,e,r){var n=t("../main"),a=t("object-assign"),i=n.instance();function o(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}o.prototype=new n.baseCalendar,a(o.prototype,{name:"Taiwan",jdEpoch:2419402.5,yearsOffset:1911,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Taiwan",epochs:["BROC","ROC"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:1,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t=this._t2gYear(e.year());return i.leapYear(t)},weekOfYear:function(t,e,r){var a=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t=this._t2gYear(a.year());return i.weekOfYear(t,a.month(),a.day())},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);t=this._t2gYear(a.year());return i.toJD(t,a.month(),a.day())},fromJD:function(t){var e=i.fromJD(t),r=this._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)},_g2tYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)}}),n.calendars.taiwan=o},{"../main":569,"object-assign":455}],567:[function(t,e,r){var n=t("../main"),a=t("object-assign"),i=n.instance();function o(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}o.prototype=new n.baseCalendar,a(o.prototype,{name:"Thai",jdEpoch:1523098.5,yearsOffset:543,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Thai",epochs:["BBE","BE"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t=this._t2gYear(e.year());return i.leapYear(t)},weekOfYear:function(t,e,r){var a=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t=this._t2gYear(a.year());return i.weekOfYear(t,a.month(),a.day())},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);t=this._t2gYear(a.year());return i.toJD(t,a.month(),a.day())},fromJD:function(t){var e=i.fromJD(t),r=this._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)},_g2tYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)}}),n.calendars.thai=o},{"../main":569,"object-assign":455}],568:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}i.prototype=new n.baseCalendar,a(i.prototype,{name:"UmmAlQura",hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Umm al-Qura",epochs:["BH","AH"],monthNames:["Al-Muharram","Safar","Rabi' al-awwal","Rabi' Al-Thani","Jumada Al-Awwal","Jumada Al-Thani","Rajab","Sha'aban","Ramadan","Shawwal","Dhu al-Qi'dah","Dhu al-Hijjah"],monthNamesShort:["Muh","Saf","Rab1","Rab2","Jum1","Jum2","Raj","Sha'","Ram","Shaw","DhuQ","DhuH"],dayNames:["Yawm al-Ahad","Yawm al-Ithnain","Yawm al-Thal\u0101th\u0101\u2019","Yawm al-Arba\u2018\u0101\u2019","Yawm al-Kham\u012bs","Yawm al-Jum\u2018a","Yawm al-Sabt"],dayNamesMin:["Ah","Ith","Th","Ar","Kh","Ju","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!0}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return 355===this.daysInYear(e.year())},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){for(var e=0,r=1;r<=12;r++)e+=this.daysInMonth(t,r);return e},daysInMonth:function(t,e){for(var r=this._validate(t,e,this.minDay,n.local.invalidMonth).toJD()-24e5+.5,a=0,i=0;i<o.length;i++){if(o[i]>r)return o[a]-o[a-1];a++}return 30},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate),i=12*(a.year()-1)+a.month()-15292;return a.day()+o[i-1]-1+24e5-.5},fromJD:function(t){for(var e=t-24e5+.5,r=0,n=0;n<o.length&&!(o[n]>e);n++)r++;var a=r+15292,i=Math.floor((a-1)/12),s=i+1,l=a-12*i,c=e-o[r-1]+1;return this.newDate(s,l,c)},isValid:function(t,e,r){var a=n.baseCalendar.prototype.isValid.apply(this,arguments);return a&&(a=(t=null!=t.year?t.year:t)>=1276&&t<=1500),a},_validate:function(t,e,r,a){var i=n.baseCalendar.prototype._validate.apply(this,arguments);if(i.year<1276||i.year>1500)throw a.replace(/\{0\}/,this.local.name);return i}}),n.calendars.ummalqura=i;var o=[20,50,79,109,138,168,197,227,256,286,315,345,374,404,433,463,492,522,551,581,611,641,670,700,729,759,788,818,847,877,906,936,965,995,1024,1054,1083,1113,1142,1172,1201,1231,1260,1290,1320,1350,1379,1409,1438,1468,1497,1527,1556,1586,1615,1645,1674,1704,1733,1763,1792,1822,1851,1881,1910,1940,1969,1999,2028,2058,2087,2117,2146,2176,2205,2235,2264,2294,2323,2353,2383,2413,2442,2472,2501,2531,2560,2590,2619,2649,2678,2708,2737,2767,2796,2826,2855,2885,2914,2944,2973,3003,3032,3062,3091,3121,3150,3180,3209,3239,3268,3298,3327,3357,3386,3416,3446,3476,3505,3535,3564,3594,3623,3653,3682,3712,3741,3771,3800,3830,3859,3889,3918,3948,3977,4007,4036,4066,4095,4125,4155,4185,4214,4244,4273,4303,4332,4362,4391,4421,4450,4480,4509,4539,4568,4598,4627,4657,4686,4716,4745,4775,4804,4834,4863,4893,4922,4952,4981,5011,5040,5070,5099,5129,5158,5188,5218,5248,5277,5307,5336,5366,5395,5425,5454,5484,5513,5543,5572,5602,5631,5661,5690,5720,5749,5779,5808,5838,5867,5897,5926,5956,5985,6015,6044,6074,6103,6133,6162,6192,6221,6251,6281,6311,6340,6370,6399,6429,6458,6488,6517,6547,6576,6606,6635,6665,6694,6724,6753,6783,6812,6842,6871,6901,6930,6960,6989,7019,7048,7078,7107,7137,7166,7196,7225,7255,7284,7314,7344,7374,7403,7433,7462,7492,7521,7551,7580,7610,7639,7669,7698,7728,7757,7787,7816,7846,7875,7905,7934,7964,7993,8023,8053,8083,8112,8142,8171,8201,8230,8260,8289,8319,8348,8378,8407,8437,8466,8496,8525,8555,8584,8614,8643,8673,8702,8732,8761,8791,8821,8850,8880,8909,8938,8968,8997,9027,9056,9086,9115,9145,9175,9205,9234,9264,9293,9322,9352,9381,9410,9440,9470,9499,9529,9559,9589,9618,9648,9677,9706,9736,9765,9794,9824,9853,9883,9913,9943,9972,10002,10032,10061,10090,10120,10149,10178,10208,10237,10267,10297,10326,10356,10386,10415,10445,10474,10504,10533,10562,10592,10621,10651,10680,10710,10740,10770,10799,10829,10858,10888,10917,10947,10976,11005,11035,11064,11094,11124,11153,11183,11213,11242,11272,11301,11331,11360,11389,11419,11448,11478,11507,11537,11567,11596,11626,11655,11685,11715,11744,11774,11803,11832,11862,11891,11921,11950,11980,12010,12039,12069,12099,12128,12158,12187,12216,12246,12275,12304,12334,12364,12393,12423,12453,12483,12512,12542,12571,12600,12630,12659,12688,12718,12747,12777,12807,12837,12866,12896,12926,12955,12984,13014,13043,13072,13102,13131,13161,13191,13220,13250,13280,13310,13339,13368,13398,13427,13456,13486,13515,13545,13574,13604,13634,13664,13693,13723,13752,13782,13811,13840,13870,13899,13929,13958,13988,14018,14047,14077,14107,14136,14166,14195,14224,14254,14283,14313,14342,14372,14401,14431,14461,14490,14520,14550,14579,14609,14638,14667,14697,14726,14756,14785,14815,14844,14874,14904,14933,14963,14993,15021,15051,15081,15110,15140,15169,15199,15228,15258,15287,15317,15347,15377,15406,15436,15465,15494,15524,15553,15582,15612,15641,15671,15701,15731,15760,15790,15820,15849,15878,15908,15937,15966,15996,16025,16055,16085,16114,16144,16174,16204,16233,16262,16292,16321,16350,16380,16409,16439,16468,16498,16528,16558,16587,16617,16646,16676,16705,16734,16764,16793,16823,16852,16882,16912,16941,16971,17001,17030,17060,17089,17118,17148,17177,17207,17236,17266,17295,17325,17355,17384,17414,17444,17473,17502,17532,17561,17591,17620,17650,17679,17709,17738,17768,17798,17827,17857,17886,17916,17945,17975,18004,18034,18063,18093,18122,18152,18181,18211,18241,18270,18300,18330,18359,18388,18418,18447,18476,18506,18535,18565,18595,18625,18654,18684,18714,18743,18772,18802,18831,18860,18890,18919,18949,18979,19008,19038,19068,19098,19127,19156,19186,19215,19244,19274,19303,19333,19362,19392,19422,19452,19481,19511,19540,19570,19599,19628,19658,19687,19717,19746,19776,19806,19836,19865,19895,19924,19954,19983,20012,20042,20071,20101,20130,20160,20190,20219,20249,20279,20308,20338,20367,20396,20426,20455,20485,20514,20544,20573,20603,20633,20662,20692,20721,20751,20780,20810,20839,20869,20898,20928,20957,20987,21016,21046,21076,21105,21135,21164,21194,21223,21253,21282,21312,21341,21371,21400,21430,21459,21489,21519,21548,21578,21607,21637,21666,21696,21725,21754,21784,21813,21843,21873,21902,21932,21962,21991,22021,22050,22080,22109,22138,22168,22197,22227,22256,22286,22316,22346,22375,22405,22434,22464,22493,22522,22552,22581,22611,22640,22670,22700,22730,22759,22789,22818,22848,22877,22906,22936,22965,22994,23024,23054,23083,23113,23143,23173,23202,23232,23261,23290,23320,23349,23379,23408,23438,23467,23497,23527,23556,23586,23616,23645,23674,23704,23733,23763,23792,23822,23851,23881,23910,23940,23970,23999,24029,24058,24088,24117,24147,24176,24206,24235,24265,24294,24324,24353,24383,24413,24442,24472,24501,24531,24560,24590,24619,24648,24678,24707,24737,24767,24796,24826,24856,24885,24915,24944,24974,25003,25032,25062,25091,25121,25150,25180,25210,25240,25269,25299,25328,25358,25387,25416,25446,25475,25505,25534,25564,25594,25624,25653,25683,25712,25742,25771,25800,25830,25859,25888,25918,25948,25977,26007,26037,26067,26096,26126,26155,26184,26214,26243,26272,26302,26332,26361,26391,26421,26451,26480,26510,26539,26568,26598,26627,26656,26686,26715,26745,26775,26805,26834,26864,26893,26923,26952,26982,27011,27041,27070,27099,27129,27159,27188,27218,27248,27277,27307,27336,27366,27395,27425,27454,27484,27513,27542,27572,27602,27631,27661,27691,27720,27750,27779,27809,27838,27868,27897,27926,27956,27985,28015,28045,28074,28104,28134,28163,28193,28222,28252,28281,28310,28340,28369,28399,28428,28458,28488,28517,28547,28577,28607,28636,28665,28695,28724,28754,28783,28813,28843,28872,28901,28931,28960,28990,29019,29049,29078,29108,29137,29167,29196,29226,29255,29285,29315,29345,29375,29404,29434,29463,29492,29522,29551,29580,29610,29640,29669,29699,29729,29759,29788,29818,29847,29876,29906,29935,29964,29994,30023,30053,30082,30112,30141,30171,30200,30230,30259,30289,30318,30348,30378,30408,30437,30467,30496,30526,30555,30585,30614,30644,30673,30703,30732,30762,30791,30821,30850,30880,30909,30939,30968,30998,31027,31057,31086,31116,31145,31175,31204,31234,31263,31293,31322,31352,31381,31411,31441,31471,31500,31530,31559,31589,31618,31648,31676,31706,31736,31766,31795,31825,31854,31884,31913,31943,31972,32002,32031,32061,32090,32120,32150,32180,32209,32239,32268,32298,32327,32357,32386,32416,32445,32475,32504,32534,32563,32593,32622,32652,32681,32711,32740,32770,32799,32829,32858,32888,32917,32947,32976,33006,33035,33065,33094,33124,33153,33183,33213,33243,33272,33302,33331,33361,33390,33420,33450,33479,33509,33539,33568,33598,33627,33657,33686,33716,33745,33775,33804,33834,33863,33893,33922,33952,33981,34011,34040,34069,34099,34128,34158,34187,34217,34247,34277,34306,34336,34365,34395,34424,34454,34483,34512,34542,34571,34601,34631,34660,34690,34719,34749,34778,34808,34837,34867,34896,34926,34955,34985,35015,35044,35074,35103,35133,35162,35192,35222,35251,35280,35310,35340,35370,35399,35429,35458,35488,35517,35547,35576,35605,35635,35665,35694,35723,35753,35782,35811,35841,35871,35901,35930,35960,35989,36019,36048,36078,36107,36136,36166,36195,36225,36254,36284,36314,36343,36373,36403,36433,36462,36492,36521,36551,36580,36610,36639,36669,36698,36728,36757,36786,36816,36845,36875,36904,36934,36963,36993,37022,37052,37081,37111,37141,37170,37200,37229,37259,37288,37318,37347,37377,37406,37436,37465,37495,37524,37554,37584,37613,37643,37672,37701,37731,37760,37790,37819,37849,37878,37908,37938,37967,37997,38027,38056,38085,38115,38144,38174,38203,38233,38262,38292,38322,38351,38381,38410,38440,38469,38499,38528,38558,38587,38617,38646,38676,38705,38735,38764,38794,38823,38853,38882,38912,38941,38971,39001,39030,39059,39089,39118,39148,39178,39208,39237,39267,39297,39326,39355,39385,39414,39444,39473,39503,39532,39562,39592,39621,39650,39680,39709,39739,39768,39798,39827,39857,39886,39916,39946,39975,40005,40035,40064,40094,40123,40153,40182,40212,40241,40271,40300,40330,40359,40389,40418,40448,40477,40507,40536,40566,40595,40625,40655,40685,40714,40744,40773,40803,40832,40862,40892,40921,40951,40980,41009,41039,41068,41098,41127,41157,41186,41216,41245,41275,41304,41334,41364,41393,41422,41452,41481,41511,41540,41570,41599,41629,41658,41688,41718,41748,41777,41807,41836,41865,41894,41924,41953,41983,42012,42042,42072,42102,42131,42161,42190,42220,42249,42279,42308,42337,42367,42397,42426,42456,42485,42515,42545,42574,42604,42633,42662,42692,42721,42751,42780,42810,42839,42869,42899,42929,42958,42988,43017,43046,43076,43105,43135,43164,43194,43223,43253,43283,43312,43342,43371,43401,43430,43460,43489,43519,43548,43578,43607,43637,43666,43696,43726,43755,43785,43814,43844,43873,43903,43932,43962,43991,44021,44050,44080,44109,44139,44169,44198,44228,44258,44287,44317,44346,44375,44405,44434,44464,44493,44523,44553,44582,44612,44641,44671,44700,44730,44759,44788,44818,44847,44877,44906,44936,44966,44996,45025,45055,45084,45114,45143,45172,45202,45231,45261,45290,45320,45350,45380,45409,45439,45468,45498,45527,45556,45586,45615,45644,45674,45704,45733,45763,45793,45823,45852,45882,45911,45940,45970,45999,46028,46058,46088,46117,46147,46177,46206,46236,46265,46295,46324,46354,46383,46413,46442,46472,46501,46531,46560,46590,46620,46649,46679,46708,46738,46767,46797,46826,46856,46885,46915,46944,46974,47003,47033,47063,47092,47122,47151,47181,47210,47240,47269,47298,47328,47357,47387,47417,47446,47476,47506,47535,47565,47594,47624,47653,47682,47712,47741,47771,47800,47830,47860,47890,47919,47949,47978,48008,48037,48066,48096,48125,48155,48184,48214,48244,48273,48303,48333,48362,48392,48421,48450,48480,48509,48538,48568,48598,48627,48657,48687,48717,48746,48776,48805,48834,48864,48893,48922,48952,48982,49011,49041,49071,49100,49130,49160,49189,49218,49248,49277,49306,49336,49365,49395,49425,49455,49484,49514,49543,49573,49602,49632,49661,49690,49720,49749,49779,49809,49838,49868,49898,49927,49957,49986,50016,50045,50075,50104,50133,50163,50192,50222,50252,50281,50311,50340,50370,50400,50429,50459,50488,50518,50547,50576,50606,50635,50665,50694,50724,50754,50784,50813,50843,50872,50902,50931,50960,50990,51019,51049,51078,51108,51138,51167,51197,51227,51256,51286,51315,51345,51374,51403,51433,51462,51492,51522,51552,51582,51611,51641,51670,51699,51729,51758,51787,51816,51846,51876,51906,51936,51965,51995,52025,52054,52083,52113,52142,52171,52200,52230,52260,52290,52319,52349,52379,52408,52438,52467,52497,52526,52555,52585,52614,52644,52673,52703,52733,52762,52792,52822,52851,52881,52910,52939,52969,52998,53028,53057,53087,53116,53146,53176,53205,53235,53264,53294,53324,53353,53383,53412,53441,53471,53500,53530,53559,53589,53619,53648,53678,53708,53737,53767,53796,53825,53855,53884,53913,53943,53973,54003,54032,54062,54092,54121,54151,54180,54209,54239,54268,54297,54327,54357,54387,54416,54446,54476,54505,54535,54564,54593,54623,54652,54681,54711,54741,54770,54800,54830,54859,54889,54919,54948,54977,55007,55036,55066,55095,55125,55154,55184,55213,55243,55273,55302,55332,55361,55391,55420,55450,55479,55508,55538,55567,55597,55627,55657,55686,55716,55745,55775,55804,55834,55863,55892,55922,55951,55981,56011,56040,56070,56100,56129,56159,56188,56218,56247,56276,56306,56335,56365,56394,56424,56454,56483,56513,56543,56572,56601,56631,56660,56690,56719,56749,56778,56808,56837,56867,56897,56926,56956,56985,57015,57044,57074,57103,57133,57162,57192,57221,57251,57280,57310,57340,57369,57399,57429,57458,57487,57517,57546,57576,57605,57634,57664,57694,57723,57753,57783,57813,57842,57871,57901,57930,57959,57989,58018,58048,58077,58107,58137,58167,58196,58226,58255,58285,58314,58343,58373,58402,58432,58461,58491,58521,58551,58580,58610,58639,58669,58698,58727,58757,58786,58816,58845,58875,58905,58934,58964,58994,59023,59053,59082,59111,59141,59170,59200,59229,59259,59288,59318,59348,59377,59407,59436,59466,59495,59525,59554,59584,59613,59643,59672,59702,59731,59761,59791,59820,59850,59879,59909,59939,59968,59997,60027,60056,60086,60115,60145,60174,60204,60234,60264,60293,60323,60352,60381,60411,60440,60469,60499,60528,60558,60588,60618,60648,60677,60707,60736,60765,60795,60824,60853,60883,60912,60942,60972,61002,61031,61061,61090,61120,61149,61179,61208,61237,61267,61296,61326,61356,61385,61415,61445,61474,61504,61533,61563,61592,61621,61651,61680,61710,61739,61769,61799,61828,61858,61888,61917,61947,61976,62006,62035,62064,62094,62123,62153,62182,62212,62242,62271,62301,62331,62360,62390,62419,62448,62478,62507,62537,62566,62596,62625,62655,62685,62715,62744,62774,62803,62832,62862,62891,62921,62950,62980,63009,63039,63069,63099,63128,63157,63187,63216,63246,63275,63305,63334,63363,63393,63423,63453,63482,63512,63541,63571,63600,63630,63659,63689,63718,63747,63777,63807,63836,63866,63895,63925,63955,63984,64014,64043,64073,64102,64131,64161,64190,64220,64249,64279,64309,64339,64368,64398,64427,64457,64486,64515,64545,64574,64603,64633,64663,64692,64722,64752,64782,64811,64841,64870,64899,64929,64958,64987,65017,65047,65076,65106,65136,65166,65195,65225,65254,65283,65313,65342,65371,65401,65431,65460,65490,65520,65549,65579,65608,65638,65667,65697,65726,65755,65785,65815,65844,65874,65903,65933,65963,65992,66022,66051,66081,66110,66140,66169,66199,66228,66258,66287,66317,66346,66376,66405,66435,66465,66494,66524,66553,66583,66612,66641,66671,66700,66730,66760,66789,66819,66849,66878,66908,66937,66967,66996,67025,67055,67084,67114,67143,67173,67203,67233,67262,67292,67321,67351,67380,67409,67439,67468,67497,67527,67557,67587,67617,67646,67676,67705,67735,67764,67793,67823,67852,67882,67911,67941,67971,68e3,68030,68060,68089,68119,68148,68177,68207,68236,68266,68295,68325,68354,68384,68414,68443,68473,68502,68532,68561,68591,68620,68650,68679,68708,68738,68768,68797,68827,68857,68886,68916,68946,68975,69004,69034,69063,69092,69122,69152,69181,69211,69240,69270,69300,69330,69359,69388,69418,69447,69476,69506,69535,69565,69595,69624,69654,69684,69713,69743,69772,69802,69831,69861,69890,69919,69949,69978,70008,70038,70067,70097,70126,70156,70186,70215,70245,70274,70303,70333,70362,70392,70421,70451,70481,70510,70540,70570,70599,70629,70658,70687,70717,70746,70776,70805,70835,70864,70894,70924,70954,70983,71013,71042,71071,71101,71130,71159,71189,71218,71248,71278,71308,71337,71367,71397,71426,71455,71485,71514,71543,71573,71602,71632,71662,71691,71721,71751,71781,71810,71839,71869,71898,71927,71957,71986,72016,72046,72075,72105,72135,72164,72194,72223,72253,72282,72311,72341,72370,72400,72429,72459,72489,72518,72548,72577,72607,72637,72666,72695,72725,72754,72784,72813,72843,72872,72902,72931,72961,72991,73020,73050,73080,73109,73139,73168,73197,73227,73256,73286,73315,73345,73375,73404,73434,73464,73493,73523,73552,73581,73611,73640,73669,73699,73729,73758,73788,73818,73848,73877,73907,73936,73965,73995,74024,74053,74083,74113,74142,74172,74202,74231,74261,74291,74320,74349,74379,74408,74437,74467,74497,74526,74556,74586,74615,74645,74675,74704,74733,74763,74792,74822,74851,74881,74910,74940,74969,74999,75029,75058,75088,75117,75147,75176,75206,75235,75264,75294,75323,75353,75383,75412,75442,75472,75501,75531,75560,75590,75619,75648,75678,75707,75737,75766,75796,75826,75856,75885,75915,75944,75974,76003,76032,76062,76091,76121,76150,76180,76210,76239,76269,76299,76328,76358,76387,76416,76446,76475,76505,76534,76564,76593,76623,76653,76682,76712,76741,76771,76801,76830,76859,76889,76918,76948,76977,77007,77036,77066,77096,77125,77155,77185,77214,77243,77273,77302,77332,77361,77390,77420,77450,77479,77509,77539,77569,77598,77627,77657,77686,77715,77745,77774,77804,77833,77863,77893,77923,77952,77982,78011,78041,78070,78099,78129,78158,78188,78217,78247,78277,78307,78336,78366,78395,78425,78454,78483,78513,78542,78572,78601,78631,78661,78690,78720,78750,78779,78808,78838,78867,78897,78926,78956,78985,79015,79044,79074,79104,79133,79163,79192,79222,79251,79281,79310,79340,79369,79399,79428,79458,79487,79517,79546,79576,79606,79635,79665,79695,79724,79753,79783,79812,79841,79871,79900,79930,79960,79990]},{"../main":569,"object-assign":455}],569:[function(t,e,r){var n=t("object-assign");function a(){this.regionalOptions=[],this.regionalOptions[""]={invalidCalendar:"Calendar {0} not found",invalidDate:"Invalid {0} date",invalidMonth:"Invalid {0} month",invalidYear:"Invalid {0} year",differentCalendars:"Cannot mix {0} and {1} dates"},this.local=this.regionalOptions[""],this.calendars={},this._localCals={}}function i(t,e,r,n){if(this._calendar=t,this._year=e,this._month=r,this._day=n,0===this._calendar._validateLevel&&!this._calendar.isValid(this._year,this._month,this._day))throw(c.local.invalidDate||c.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name)}function o(t,e){return"000000".substring(0,e-(t=""+t).length)+t}function s(){this.shortYearCutoff="+10"}function l(t){this.local=this.regionalOptions[t]||this.regionalOptions[""]}n(a.prototype,{instance:function(t,e){t=(t||"gregorian").toLowerCase(),e=e||"";var r=this._localCals[t+"-"+e];if(!r&&this.calendars[t]&&(r=new this.calendars[t](e),this._localCals[t+"-"+e]=r),!r)throw(this.local.invalidCalendar||this.regionalOptions[""].invalidCalendar).replace(/\{0\}/,t);return r},newDate:function(t,e,r,n,a){return(n=(null!=t&&t.year?t.calendar():"string"==typeof n?this.instance(n,a):n)||this.instance()).newDate(t,e,r)},substituteDigits:function(t){return function(e){return(e+"").replace(/[0-9]/g,function(e){return t[e]})}},substituteChineseDigits:function(t,e){return function(r){for(var n="",a=0;r>0;){var i=r%10;n=(0===i?"":t[i]+e[a])+n,a++,r=Math.floor(r/10)}return 0===n.indexOf(t[1]+e[1])&&(n=n.substr(1)),n||t[0]}}}),n(i.prototype,{newDate:function(t,e,r){return this._calendar.newDate(null==t?this:t,e,r)},year:function(t){return 0===arguments.length?this._year:this.set(t,"y")},month:function(t){return 0===arguments.length?this._month:this.set(t,"m")},day:function(t){return 0===arguments.length?this._day:this.set(t,"d")},date:function(t,e,r){if(!this._calendar.isValid(t,e,r))throw(c.local.invalidDate||c.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name);return this._year=t,this._month=e,this._day=r,this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(t,e){return this._calendar.add(this,t,e)},set:function(t,e){return this._calendar.set(this,t,e)},compareTo:function(t){if(this._calendar.name!==t._calendar.name)throw(c.local.differentCalendars||c.regionalOptions[""].differentCalendars).replace(/\{0\}/,this._calendar.local.name).replace(/\{1\}/,t._calendar.local.name);var e=this._year!==t._year?this._year-t._year:this._month!==t._month?this.monthOfYear()-t.monthOfYear():this._day-t._day;return 0===e?0:e<0?-1:1},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(t){return this._calendar.fromJD(t)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(t){return this._calendar.fromJSDate(t)},toString:function(){return(this.year()<0?"-":"")+o(Math.abs(this.year()),4)+"-"+o(this.month(),2)+"-"+o(this.day(),2)}}),n(s.prototype,{_validateLevel:0,newDate:function(t,e,r){return null==t?this.today():(t.year&&(this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[""].invalidDate),r=t.day(),e=t.month(),t=t.year()),new i(this,t,e,r))},today:function(){return this.fromJSDate(new Date)},epoch:function(t){return this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[""].invalidYear).year()<0?this.local.epochs[0]:this.local.epochs[1]},formatYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[""].invalidYear);return(e.year()<0?"-":"")+o(Math.abs(e.year()),4)},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[""].invalidYear),12},monthOfYear:function(t,e){var r=this._validate(t,e,this.minDay,c.local.invalidMonth||c.regionalOptions[""].invalidMonth);return(r.month()+this.monthsInYear(r)-this.firstMonth)%this.monthsInYear(r)+this.minMonth},fromMonthOfYear:function(t,e){var r=(e+this.firstMonth-2*this.minMonth)%this.monthsInYear(t)+this.minMonth;return this._validate(t,r,this.minDay,c.local.invalidMonth||c.regionalOptions[""].invalidMonth),r},daysInYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[""].invalidYear);return this.leapYear(e)?366:365},dayOfYear:function(t,e,r){var n=this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[""].invalidDate);return n.toJD()-this.newDate(n.year(),this.fromMonthOfYear(n.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(t,e,r){var n=this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[""].invalidDate);return(Math.floor(this.toJD(n))+2)%this.daysInWeek()},extraInfo:function(t,e,r){return this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[""].invalidDate),{}},add:function(t,e,r){return this._validate(t,this.minMonth,this.minDay,c.local.invalidDate||c.regionalOptions[""].invalidDate),this._correctAdd(t,this._add(t,e,r),e,r)},_add:function(t,e,r){if(this._validateLevel++,"d"===r||"w"===r){var n=t.toJD()+e*("w"===r?this.daysInWeek():1),a=t.calendar().fromJD(n);return this._validateLevel--,[a.year(),a.month(),a.day()]}try{var i=t.year()+("y"===r?e:0),o=t.monthOfYear()+("m"===r?e:0);a=t.day();"y"===r?(t.month()!==this.fromMonthOfYear(i,o)&&(o=this.newDate(i,t.month(),this.minDay).monthOfYear()),o=Math.min(o,this.monthsInYear(i)),a=Math.min(a,this.daysInMonth(i,this.fromMonthOfYear(i,o)))):"m"===r&&(!function(t){for(;o<t.minMonth;)i--,o+=t.monthsInYear(i);for(var e=t.monthsInYear(i);o>e-1+t.minMonth;)i++,o-=e,e=t.monthsInYear(i)}(this),a=Math.min(a,this.daysInMonth(i,this.fromMonthOfYear(i,o))));var s=[i,this.fromMonthOfYear(i,o),a];return this._validateLevel--,s}catch(t){throw this._validateLevel--,t}},_correctAdd:function(t,e,r,n){if(!(this.hasYearZero||"y"!==n&&"m"!==n||0!==e[0]&&t.year()>0==e[0]>0)){var a={y:[1,1,"y"],m:[1,this.monthsInYear(-1),"m"],w:[this.daysInWeek(),this.daysInYear(-1),"d"],d:[1,this.daysInYear(-1),"d"]}[n],i=r<0?-1:1;e=this._add(t,r*a[0]+i*a[1],a[2])}return t.date(e[0],e[1],e[2])},set:function(t,e,r){this._validate(t,this.minMonth,this.minDay,c.local.invalidDate||c.regionalOptions[""].invalidDate);var n="y"===r?e:t.year(),a="m"===r?e:t.month(),i="d"===r?e:t.day();return"y"!==r&&"m"!==r||(i=Math.min(i,this.daysInMonth(n,a))),t.date(n,a,i)},isValid:function(t,e,r){this._validateLevel++;var n=this.hasYearZero||0!==t;if(n){var a=this.newDate(t,e,this.minDay);n=e>=this.minMonth&&e-this.minMonth<this.monthsInYear(a)&&r>=this.minDay&&r-this.minDay<this.daysInMonth(a)}return this._validateLevel--,n},toJSDate:function(t,e,r){var n=this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[""].invalidDate);return c.instance().fromJD(this.toJD(n)).toJSDate()},fromJSDate:function(t){return this.fromJD(c.instance().fromJSDate(t).toJD())},_validate:function(t,e,r,n){if(t.year){if(0===this._validateLevel&&this.name!==t.calendar().name)throw(c.local.differentCalendars||c.regionalOptions[""].differentCalendars).replace(/\{0\}/,this.local.name).replace(/\{1\}/,t.calendar().local.name);return t}try{if(this._validateLevel++,1===this._validateLevel&&!this.isValid(t,e,r))throw n.replace(/\{0\}/,this.local.name);var a=this.newDate(t,e,r);return this._validateLevel--,a}catch(t){throw this._validateLevel--,t}}}),l.prototype=new s,n(l.prototype,{name:"Gregorian",jdEpoch:1721425.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Gregorian",epochs:["BCE","CE"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"mm/dd/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[""].invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==0&&(t%100!=0||t%400==0)},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,c.local.invalidMonth||c.regionalOptions[""].invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var n=this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[""].invalidDate);t=n.year(),e=n.month(),r=n.day(),t<0&&t++,e<3&&(e+=12,t--);var a=Math.floor(t/100),i=2-a+Math.floor(a/4);return Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r+i-1524.5},fromJD:function(t){var e=Math.floor(t+.5),r=Math.floor((e-1867216.25)/36524.25),n=(r=e+1+r-Math.floor(r/4))+1524,a=Math.floor((n-122.1)/365.25),i=Math.floor(365.25*a),o=Math.floor((n-i)/30.6001),s=n-i-Math.floor(30.6001*o),l=o-(o>13.5?13:1),c=a-(l>2.5?4716:4715);return c<=0&&c--,this.newDate(c,l,s)},toJSDate:function(t,e,r){var n=this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[""].invalidDate),a=new Date(n.year(),n.month()-1,n.day());return a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0),a.setHours(a.getHours()>12?a.getHours()+2:0),a},fromJSDate:function(t){return this.newDate(t.getFullYear(),t.getMonth()+1,t.getDate())}});var c=e.exports=new a;c.cdate=i,c.baseCalendar=s,c.calendars.gregorian=l},{"object-assign":455}],570:[function(t,e,r){var n=t("object-assign"),a=t("./main");n(a.regionalOptions[""],{invalidArguments:"Invalid arguments",invalidFormat:"Cannot format a date from another calendar",missingNumberAt:"Missing number at position {0}",unknownNameAt:"Unknown name at position {0}",unexpectedLiteralAt:"Unexpected literal at position {0}",unexpectedText:"Additional text found at end"}),a.local=a.regionalOptions[""],n(a.cdate.prototype,{formatDate:function(t,e){return"string"!=typeof t&&(e=t,t=""),this._calendar.formatDate(t||"",this,e)}}),n(a.baseCalendar.prototype,{UNIX_EPOCH:a.instance().newDate(1970,1,1).toJD(),SECS_PER_DAY:86400,TICKS_EPOCH:a.instance().jdEpoch,TICKS_PER_DAY:864e9,ATOM:"yyyy-mm-dd",COOKIE:"D, dd M yyyy",FULL:"DD, MM d, yyyy",ISO_8601:"yyyy-mm-dd",JULIAN:"J",RFC_822:"D, d M yy",RFC_850:"DD, dd-M-yy",RFC_1036:"D, d M yy",RFC_1123:"D, d M yyyy",RFC_2822:"D, d M yyyy",RSS:"D, d M yy",TICKS:"!",TIMESTAMP:"@",W3C:"yyyy-mm-dd",formatDate:function(t,e,r){if("string"!=typeof t&&(r=e,e=t,t=""),!e)return"";if(e.calendar()!==this)throw a.local.invalidFormat||a.regionalOptions[""].invalidFormat;t=t||this.local.dateFormat;for(var n,i,o,s,l=(r=r||{}).dayNamesShort||this.local.dayNamesShort,c=r.dayNames||this.local.dayNames,u=r.monthNumbers||this.local.monthNumbers,h=r.monthNamesShort||this.local.monthNamesShort,f=r.monthNames||this.local.monthNames,p=(r.calculateWeek||this.local.calculateWeek,function(e,r){for(var n=1;w+n<t.length&&t.charAt(w+n)===e;)n++;return w+=n-1,Math.floor(n/(r||1))>1}),d=function(t,e,r,n){var a=""+e;if(p(t,n))for(;a.length<r;)a="0"+a;return a},g=this,v=function(t){return"function"==typeof u?u.call(g,t,p("m")):x(d("m",t.month(),2))},m=function(t,e){return e?"function"==typeof f?f.call(g,t):f[t.month()-g.minMonth]:"function"==typeof h?h.call(g,t):h[t.month()-g.minMonth]},y=this.local.digits,x=function(t){return r.localNumbers&&y?y(t):t},b="",_=!1,w=0;w<t.length;w++)if(_)"'"!==t.charAt(w)||p("'")?b+=t.charAt(w):_=!1;else switch(t.charAt(w)){case"d":b+=x(d("d",e.day(),2));break;case"D":b+=(n="D",i=e.dayOfWeek(),o=l,s=c,p(n)?s[i]:o[i]);break;case"o":b+=d("o",e.dayOfYear(),3);break;case"w":b+=d("w",e.weekOfYear(),2);break;case"m":b+=v(e);break;case"M":b+=m(e,p("M"));break;case"y":b+=p("y",2)?e.year():(e.year()%100<10?"0":"")+e.year()%100;break;case"Y":p("Y",2),b+=e.formatYear();break;case"J":b+=e.toJD();break;case"@":b+=(e.toJD()-this.UNIX_EPOCH)*this.SECS_PER_DAY;break;case"!":b+=(e.toJD()-this.TICKS_EPOCH)*this.TICKS_PER_DAY;break;case"'":p("'")?b+="'":_=!0;break;default:b+=t.charAt(w)}return b},parseDate:function(t,e,r){if(null==e)throw a.local.invalidArguments||a.regionalOptions[""].invalidArguments;if(""===(e="object"==typeof e?e.toString():e+""))return null;t=t||this.local.dateFormat;var n=(r=r||{}).shortYearCutoff||this.shortYearCutoff;n="string"!=typeof n?n:this.today().year()%100+parseInt(n,10);for(var i=r.dayNamesShort||this.local.dayNamesShort,o=r.dayNames||this.local.dayNames,s=r.parseMonth||this.local.parseMonth,l=r.monthNumbers||this.local.monthNumbers,c=r.monthNamesShort||this.local.monthNamesShort,u=r.monthNames||this.local.monthNames,h=-1,f=-1,p=-1,d=-1,g=-1,v=!1,m=!1,y=function(e,r){for(var n=1;A+n<t.length&&t.charAt(A+n)===e;)n++;return A+=n-1,Math.floor(n/(r||1))>1},x=function(t,r){var n=y(t,r),i=[2,3,n?4:2,n?4:2,10,11,20]["oyYJ@!".indexOf(t)+1],o=new RegExp("^-?\\d{1,"+i+"}"),s=e.substring(M).match(o);if(!s)throw(a.local.missingNumberAt||a.regionalOptions[""].missingNumberAt).replace(/\{0\}/,M);return M+=s[0].length,parseInt(s[0],10)},b=this,_=function(){if("function"==typeof l){y("m");var t=l.call(b,e.substring(M));return M+=t.length,t}return x("m")},w=function(t,r,n,i){for(var o=y(t,i)?n:r,s=0;s<o.length;s++)if(e.substr(M,o[s].length).toLowerCase()===o[s].toLowerCase())return M+=o[s].length,s+b.minMonth;throw(a.local.unknownNameAt||a.regionalOptions[""].unknownNameAt).replace(/\{0\}/,M)},k=function(){if("function"==typeof u){var t=y("M")?u.call(b,e.substring(M)):c.call(b,e.substring(M));return M+=t.length,t}return w("M",c,u)},T=function(){if(e.charAt(M)!==t.charAt(A))throw(a.local.unexpectedLiteralAt||a.regionalOptions[""].unexpectedLiteralAt).replace(/\{0\}/,M);M++},M=0,A=0;A<t.length;A++)if(m)"'"!==t.charAt(A)||y("'")?T():m=!1;else switch(t.charAt(A)){case"d":d=x("d");break;case"D":w("D",i,o);break;case"o":g=x("o");break;case"w":x("w");break;case"m":p=_();break;case"M":p=k();break;case"y":var S=A;v=!y("y",2),A=S,f=x("y",2);break;case"Y":f=x("Y",2);break;case"J":h=x("J")+.5,"."===e.charAt(M)&&(M++,x("J"));break;case"@":h=x("@")/this.SECS_PER_DAY+this.UNIX_EPOCH;break;case"!":h=x("!")/this.TICKS_PER_DAY+this.TICKS_EPOCH;break;case"*":M=e.length;break;case"'":y("'")?T():m=!0;break;default:T()}if(M<e.length)throw a.local.unexpectedText||a.regionalOptions[""].unexpectedText;if(-1===f?f=this.today().year():f<100&&v&&(f+=-1===n?1900:this.today().year()-this.today().year()%100-(f<=n?0:100)),"string"==typeof p&&(p=s.call(this,f,p)),g>-1){p=1,d=g;for(var E=this.daysInMonth(f,p);d>E;E=this.daysInMonth(f,p))p++,d-=E}return h>-1?this.fromJD(h):this.newDate(f,p,d)},determineDate:function(t,e,r,n,a){r&&"object"!=typeof r&&(a=n,n=r,r=null),"string"!=typeof n&&(a=n,n="");var i=this;return e=e?e.newDate():null,t=null==t?e:"string"==typeof t?function(t){try{return i.parseDate(n,t,a)}catch(t){}for(var e=((t=t.toLowerCase()).match(/^c/)&&r?r.newDate():null)||i.today(),o=/([+-]?[0-9]+)\s*(d|w|m|y)?/g,s=o.exec(t);s;)e.add(parseInt(s[1],10),s[2]||"d"),s=o.exec(t);return e}(t):"number"==typeof t?isNaN(t)||t===1/0||t===-1/0?e:i.today().add(t,"d"):i.newDate(t)}})},{"./main":569,"object-assign":455}],571:[function(t,e,r){e.exports=t("cwise-compiler")({args:["array",{offset:[1],array:0},"scalar","scalar","index"],pre:{body:"{}",args:[],thisVars:[],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},body:{body:"{\n var _inline_1_da = _inline_1_arg0_ - _inline_1_arg3_\n var _inline_1_db = _inline_1_arg1_ - _inline_1_arg3_\n if((_inline_1_da >= 0) !== (_inline_1_db >= 0)) {\n _inline_1_arg2_.push(_inline_1_arg4_[0] + 0.5 + 0.5 * (_inline_1_da + _inline_1_db) / (_inline_1_da - _inline_1_db))\n }\n }",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg3_",lvalue:!1,rvalue:!0,count:2},{name:"_inline_1_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:[],localVars:["_inline_1_da","_inline_1_db"]},funcName:"zeroCrossings"})},{"cwise-compiler":148}],572:[function(t,e,r){"use strict";e.exports=function(t,e){var r=[];return e=+e||0,n(t.hi(t.shape[0]-1),r,e),r};var n=t("./lib/zc-core")},{"./lib/zc-core":571}],573:[function(t,e,r){"use strict";e.exports=[{path:"",backoff:0},{path:"M-2.4,-3V3L0.6,0Z",backoff:.6},{path:"M-3.7,-2.5V2.5L1.3,0Z",backoff:1.3},{path:"M-4.45,-3L-1.65,-0.2V0.2L-4.45,3L1.55,0Z",backoff:1.55},{path:"M-2.2,-2.2L-0.2,-0.2V0.2L-2.2,2.2L-1.4,3L1.6,0L-1.4,-3Z",backoff:1.6},{path:"M-4.4,-2.1L-0.6,-0.2V0.2L-4.4,2.1L-4,3L2,0L-4,-3Z",backoff:2},{path:"M2,0A2,2 0 1,1 0,-2A2,2 0 0,1 2,0Z",backoff:0,noRotate:!0},{path:"M2,2V-2H-2V2Z",backoff:0,noRotate:!0}]},{}],574:[function(t,e,r){"use strict";var n=t("./arrow_paths"),a=t("../../plots/font_attributes"),i=t("../../plots/cartesian/constants"),o=t("../../plot_api/plot_template").templatedArray;e.exports=o("annotation",{visible:{valType:"boolean",dflt:!0,editType:"calc+arraydraw"},text:{valType:"string",editType:"calc+arraydraw"},textangle:{valType:"angle",dflt:0,editType:"calc+arraydraw"},font:a({editType:"calc+arraydraw",colorEditType:"arraydraw"}),width:{valType:"number",min:1,dflt:null,editType:"calc+arraydraw"},height:{valType:"number",min:1,dflt:null,editType:"calc+arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},align:{valType:"enumerated",values:["left","center","right"],dflt:"center",editType:"arraydraw"},valign:{valType:"enumerated",values:["top","middle","bottom"],dflt:"middle",editType:"arraydraw"},bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},bordercolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},borderpad:{valType:"number",min:0,dflt:1,editType:"calc+arraydraw"},borderwidth:{valType:"number",min:0,dflt:1,editType:"calc+arraydraw"},showarrow:{valType:"boolean",dflt:!0,editType:"calc+arraydraw"},arrowcolor:{valType:"color",editType:"arraydraw"},arrowhead:{valType:"integer",min:0,max:n.length,dflt:1,editType:"arraydraw"},startarrowhead:{valType:"integer",min:0,max:n.length,dflt:1,editType:"arraydraw"},arrowside:{valType:"flaglist",flags:["end","start"],extras:["none"],dflt:"end",editType:"arraydraw"},arrowsize:{valType:"number",min:.3,dflt:1,editType:"calc+arraydraw"},startarrowsize:{valType:"number",min:.3,dflt:1,editType:"calc+arraydraw"},arrowwidth:{valType:"number",min:.1,editType:"calc+arraydraw"},standoff:{valType:"number",min:0,dflt:0,editType:"calc+arraydraw"},startstandoff:{valType:"number",min:0,dflt:0,editType:"calc+arraydraw"},ax:{valType:"any",editType:"calc+arraydraw"},ay:{valType:"any",editType:"calc+arraydraw"},axref:{valType:"enumerated",dflt:"pixel",values:["pixel",i.idRegex.x.toString()],editType:"calc"},ayref:{valType:"enumerated",dflt:"pixel",values:["pixel",i.idRegex.y.toString()],editType:"calc"},xref:{valType:"enumerated",values:["paper",i.idRegex.x.toString()],editType:"calc"},x:{valType:"any",editType:"calc+arraydraw"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"auto",editType:"calc+arraydraw"},xshift:{valType:"number",dflt:0,editType:"calc+arraydraw"},yref:{valType:"enumerated",values:["paper",i.idRegex.y.toString()],editType:"calc"},y:{valType:"any",editType:"calc+arraydraw"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"auto",editType:"calc+arraydraw"},yshift:{valType:"number",dflt:0,editType:"calc+arraydraw"},clicktoshow:{valType:"enumerated",values:[!1,"onoff","onout"],dflt:!1,editType:"arraydraw"},xclick:{valType:"any",editType:"arraydraw"},yclick:{valType:"any",editType:"arraydraw"},hovertext:{valType:"string",editType:"arraydraw"},hoverlabel:{bgcolor:{valType:"color",editType:"arraydraw"},bordercolor:{valType:"color",editType:"arraydraw"},font:a({editType:"arraydraw"}),editType:"arraydraw"},captureevents:{valType:"boolean",editType:"arraydraw"},editType:"calc",_deprecated:{ref:{valType:"string",editType:"calc"}}})},{"../../plot_api/plot_template":755,"../../plots/cartesian/constants":771,"../../plots/font_attributes":791,"./arrow_paths":573}],575:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("./draw").draw;function o(t){var e=t._fullLayout;n.filterVisible(e.annotations).forEach(function(e){var r=a.getFromId(t,e.xref),n=a.getFromId(t,e.yref);e._extremes={},r&&s(e,r),n&&s(e,n)})}function s(t,e){var r,n=e._id,i=n.charAt(0),o=t[i],s=t["a"+i],l=t[i+"ref"],c=t["a"+i+"ref"],u=t["_"+i+"padplus"],h=t["_"+i+"padminus"],f={x:1,y:-1}[i]*t[i+"shift"],p=3*t.arrowsize*t.arrowwidth||0,d=p+f,g=p-f,v=3*t.startarrowsize*t.arrowwidth||0,m=v+f,y=v-f;if(c===l){var x=a.findExtremes(e,[e.r2c(o)],{ppadplus:d,ppadminus:g}),b=a.findExtremes(e,[e.r2c(s)],{ppadplus:Math.max(u,m),ppadminus:Math.max(h,y)});r={min:[x.min[0],b.min[0]],max:[x.max[0],b.max[0]]}}else m=s?m+s:m,y=s?y-s:y,r=a.findExtremes(e,[e.r2c(o)],{ppadplus:Math.max(u,d,m),ppadminus:Math.max(h,g,y)});t._extremes[n]=r}e.exports=function(t){var e=t._fullLayout;if(n.filterVisible(e.annotations).length&&t._fullData.length)return n.syncOrAsync([i,o],t)}},{"../../lib":717,"../../plots/cartesian/axes":765,"./draw":580}],576:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../registry"),i=t("../../plot_api/plot_template").arrayEditor;function o(t,e){var r,n,a,i,o,l,c,u=t._fullLayout.annotations,h=[],f=[],p=[],d=(e||[]).length;for(r=0;r<u.length;r++)if(i=(a=u[r]).clicktoshow){for(n=0;n<d;n++)if(l=(o=e[n]).xaxis,c=o.yaxis,l._id===a.xref&&c._id===a.yref&&l.d2r(o.x)===s(a._xclick,l)&&c.d2r(o.y)===s(a._yclick,c)){(a.visible?"onout"===i?f:p:h).push(r);break}n===d&&a.visible&&"onout"===i&&f.push(r)}return{on:h,off:f,explicitOff:p}}function s(t,e){return"log"===e.type?e.l2r(t):e.d2r(t)}e.exports={hasClickToShow:function(t,e){var r=o(t,e);return r.on.length>0||r.explicitOff.length>0},onClick:function(t,e){var r,s,l=o(t,e),c=l.on,u=l.off.concat(l.explicitOff),h={},f=t._fullLayout.annotations;if(!c.length&&!u.length)return;for(r=0;r<c.length;r++)(s=i(t.layout,"annotations",f[c[r]])).modifyItem("visible",!0),n.extendFlat(h,s.getUpdateObj());for(r=0;r<u.length;r++)(s=i(t.layout,"annotations",f[u[r]])).modifyItem("visible",!1),n.extendFlat(h,s.getUpdateObj());return a.call("update",t,{},h)}}},{"../../lib":717,"../../plot_api/plot_template":755,"../../registry":846}],577:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../color");e.exports=function(t,e,r,i){i("opacity");var o=i("bgcolor"),s=i("bordercolor"),l=a.opacity(s);i("borderpad");var c=i("borderwidth"),u=i("showarrow");if(i("text",u?" ":r._dfltTitle.annotation),i("textangle"),n.coerceFont(i,"font",r.font),i("width"),i("align"),i("height")&&i("valign"),u){var h,f,p=i("arrowside");-1!==p.indexOf("end")&&(h=i("arrowhead"),f=i("arrowsize")),-1!==p.indexOf("start")&&(i("startarrowhead",h),i("startarrowsize",f)),i("arrowcolor",l?e.bordercolor:a.defaultLine),i("arrowwidth",2*(l&&c||1)),i("standoff"),i("startstandoff")}var d=i("hovertext"),g=r.hoverlabel||{};if(d){var v=i("hoverlabel.bgcolor",g.bgcolor||(a.opacity(o)?a.rgb(o):a.defaultLine)),m=i("hoverlabel.bordercolor",g.bordercolor||a.contrast(v));n.coerceFont(i,"hoverlabel.font",{family:g.font.family,size:g.font.size,color:g.font.color||m})}i("captureevents",!!d)}},{"../../lib":717,"../color":591}],578:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib/to_log_range");e.exports=function(t,e,r,i){e=e||{};var o="log"===r&&"linear"===e.type,s="linear"===r&&"log"===e.type;if(o||s)for(var l,c,u=t._fullLayout.annotations,h=e._id.charAt(0),f=0;f<u.length;f++)l=u[f],c="annotations["+f+"].",l[h+"ref"]===e._id&&p(h),l["a"+h+"ref"]===e._id&&p("a"+h);function p(t){var r=l[t],s=null;s=o?a(r,e.range):Math.pow(10,r),n(s)||(s=null),i(c+t,s)}}},{"../../lib/to_log_range":743,"fast-isnumeric":228}],579:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../../plots/array_container_defaults"),o=t("./common_defaults"),s=t("./attributes");function l(t,e,r){function i(r,a){return n.coerce(t,e,s,r,a)}var l=i("visible"),c=i("clicktoshow");if(l||c){o(t,e,r,i);for(var u=e.showarrow,h=["x","y"],f=[-10,-30],p={_fullLayout:r},d=0;d<2;d++){var g=h[d],v=a.coerceRef(t,e,p,g,"","paper");if("paper"!==v)a.getFromId(p,v)._annIndices.push(e._index);if(a.coercePosition(e,p,i,v,g,.5),u){var m="a"+g,y=a.coerceRef(t,e,p,m,"pixel");"pixel"!==y&&y!==v&&(y=e[m]="pixel");var x="pixel"===y?f[d]:.4;a.coercePosition(e,p,i,y,m,x)}i(g+"anchor"),i(g+"shift")}if(n.noneOrAll(t,e,["x","y"]),u&&n.noneOrAll(t,e,["ax","ay"]),c){var b=i("xclick"),_=i("yclick");e._xclick=void 0===b?e.x:a.cleanPosition(b,p,e.xref),e._yclick=void 0===_?e.y:a.cleanPosition(_,p,e.yref)}}}e.exports=function(t,e){i(t,e,{name:"annotations",handleItemDefaults:l})}},{"../../lib":717,"../../plots/array_container_defaults":761,"../../plots/cartesian/axes":765,"./attributes":574,"./common_defaults":577}],580:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../plots/plots"),o=t("../../lib"),s=t("../../plots/cartesian/axes"),l=t("../color"),c=t("../drawing"),u=t("../fx"),h=t("../../lib/svg_text_utils"),f=t("../../lib/setcursor"),p=t("../dragelement"),d=t("../../plot_api/plot_template").arrayEditor,g=t("./draw_arrow_head");function v(t,e){var r=t._fullLayout.annotations[e]||{},n=s.getFromId(t,r.xref),a=s.getFromId(t,r.yref);n&&n.setScale(),a&&a.setScale(),m(t,r,e,!1,n,a)}function m(t,e,r,i,s,v){var m,y,x=t._fullLayout,b=t._fullLayout._size,_=t._context.edits;i?(m="annotation-"+i,y=i+".annotations"):(m="annotation",y="annotations");var w=d(t.layout,y,e),k=w.modifyBase,T=w.modifyItem,M=w.getUpdateObj;x._infolayer.selectAll("."+m+'[data-index="'+r+'"]').remove();var A="clip"+x._uid+"_ann"+r;if(e._input&&!1!==e.visible){var S={x:{},y:{}},E=+e.textangle||0,L=x._infolayer.append("g").classed(m,!0).attr("data-index",String(r)).style("opacity",e.opacity),C=L.append("g").classed("annotation-text-g",!0),P=_[e.showarrow?"annotationTail":"annotationPosition"],O=e.captureevents||_.annotationText||P,z=C.append("g").style("pointer-events",O?"all":null).call(f,"pointer").on("click",function(){t._dragging=!1,t.emit("plotly_clickannotation",q(n.event))});e.hovertext&&z.on("mouseover",function(){var r=e.hoverlabel,n=r.font,a=this.getBoundingClientRect(),i=t.getBoundingClientRect();u.loneHover({x0:a.left-i.left,x1:a.right-i.left,y:(a.top+a.bottom)/2-i.top,text:e.hovertext,color:r.bgcolor,borderColor:r.bordercolor,fontFamily:n.family,fontSize:n.size,fontColor:n.color},{container:x._hoverlayer.node(),outerContainer:x._paper.node(),gd:t})}).on("mouseout",function(){u.loneUnhover(x._hoverlayer.node())});var I=e.borderwidth,D=e.borderpad,R=I+D,F=z.append("rect").attr("class","bg").style("stroke-width",I+"px").call(l.stroke,e.bordercolor).call(l.fill,e.bgcolor),B=e.width||e.height,N=x._topclips.selectAll("#"+A).data(B?[0]:[]);N.enter().append("clipPath").classed("annclip",!0).attr("id",A).append("rect"),N.exit().remove();var j=e.font,V=x._meta?o.templateString(e.text,x._meta):e.text,U=z.append("text").classed("annotation-text",!0).text(V);_.annotationText?U.call(h.makeEditable,{delegate:z,gd:t}).call(H).on("edit",function(r){e.text=r,this.call(H),T("text",r),s&&s.autorange&&k(s._name+".autorange",!0),v&&v.autorange&&k(v._name+".autorange",!0),a.call("_guiRelayout",t,M())}):U.call(H)}else n.selectAll("#"+A).remove();function q(t){var n={index:r,annotation:e._input,fullAnnotation:e,event:t};return i&&(n.subplotId=i),n}function H(r){return r.call(c.font,j).attr({"text-anchor":{left:"start",right:"end"}[e.align]||"middle"}),h.convertToTspans(r,t,G),r}function G(){var r=U.selectAll("a");1===r.size()&&r.text()===U.text()&&z.insert("a",":first-child").attr({"xlink:xlink:href":r.attr("xlink:href"),"xlink:xlink:show":r.attr("xlink:show")}).style({cursor:"pointer"}).node().appendChild(F.node());var n=z.select(".annotation-text-math-group"),u=!n.empty(),d=c.bBox((u?n:U).node()),m=d.width,y=d.height,w=e.width||m,O=e.height||y,D=Math.round(w+2*R),j=Math.round(O+2*R);function V(t,e){return"auto"===e&&(e=t<1/3?"left":t>2/3?"right":"center"),{center:0,middle:0,left:.5,bottom:-.5,right:-.5,top:.5}[e]}for(var H=!1,G=["x","y"],Y=0;Y<G.length;Y++){var W,X,Z,J,K,Q=G[Y],$=e[Q+"ref"]||Q,tt=e["a"+Q+"ref"],et={x:s,y:v}[Q],rt=(E+("x"===Q?0:-90))*Math.PI/180,nt=D*Math.cos(rt),at=j*Math.sin(rt),it=Math.abs(nt)+Math.abs(at),ot=e[Q+"anchor"],st=e[Q+"shift"]*("x"===Q?1:-1),lt=S[Q];if(et){var ct=et.r2fraction(e[Q]);(ct<0||ct>1)&&(tt===$?((ct=et.r2fraction(e["a"+Q]))<0||ct>1)&&(H=!0):H=!0),W=et._offset+et.r2p(e[Q]),J=.5}else"x"===Q?(Z=e[Q],W=b.l+b.w*Z):(Z=1-e[Q],W=b.t+b.h*Z),J=e.showarrow?.5:Z;if(e.showarrow){lt.head=W;var ut=e["a"+Q];K=nt*V(.5,e.xanchor)-at*V(.5,e.yanchor),tt===$?(lt.tail=et._offset+et.r2p(ut),X=K):(lt.tail=W+ut,X=K+ut),lt.text=lt.tail+K;var ht=x["x"===Q?"width":"height"];if("paper"===$&&(lt.head=o.constrain(lt.head,1,ht-1)),"pixel"===tt){var ft=-Math.max(lt.tail-3,lt.text),pt=Math.min(lt.tail+3,lt.text)-ht;ft>0?(lt.tail+=ft,lt.text+=ft):pt>0&&(lt.tail-=pt,lt.text-=pt)}lt.tail+=st,lt.head+=st}else X=K=it*V(J,ot),lt.text=W+K;lt.text+=st,K+=st,X+=st,e["_"+Q+"padplus"]=it/2+X,e["_"+Q+"padminus"]=it/2-X,e["_"+Q+"size"]=it,e["_"+Q+"shift"]=K}if(H)z.remove();else{var dt=0,gt=0;if("left"!==e.align&&(dt=(w-m)*("center"===e.align?.5:1)),"top"!==e.valign&&(gt=(O-y)*("middle"===e.valign?.5:1)),u)n.select("svg").attr({x:R+dt-1,y:R+gt}).call(c.setClipUrl,B?A:null,t);else{var vt=R+gt-d.top,mt=R+dt-d.left;U.call(h.positionText,mt,vt).call(c.setClipUrl,B?A:null,t)}N.select("rect").call(c.setRect,R,R,w,O),F.call(c.setRect,I/2,I/2,D-I,j-I),z.call(c.setTranslate,Math.round(S.x.text-D/2),Math.round(S.y.text-j/2)),C.attr({transform:"rotate("+E+","+S.x.text+","+S.y.text+")"});var yt,xt=function(r,n){L.selectAll(".annotation-arrow-g").remove();var u=S.x.head,h=S.y.head,f=S.x.tail+r,d=S.y.tail+n,m=S.x.text+r,y=S.y.text+n,x=o.rotationXYMatrix(E,m,y),w=o.apply2DTransform(x),A=o.apply2DTransform2(x),P=+F.attr("width"),O=+F.attr("height"),I=m-.5*P,D=I+P,R=y-.5*O,B=R+O,N=[[I,R,I,B],[I,B,D,B],[D,B,D,R],[D,R,I,R]].map(A);if(!N.reduce(function(t,e){return t^!!o.segmentsIntersect(u,h,u+1e6,h+1e6,e[0],e[1],e[2],e[3])},!1)){N.forEach(function(t){var e=o.segmentsIntersect(f,d,u,h,t[0],t[1],t[2],t[3]);e&&(f=e.x,d=e.y)});var j=e.arrowwidth,V=e.arrowcolor,U=e.arrowside,q=L.append("g").style({opacity:l.opacity(V)}).classed("annotation-arrow-g",!0),H=q.append("path").attr("d","M"+f+","+d+"L"+u+","+h).style("stroke-width",j+"px").call(l.stroke,l.rgb(V));if(g(H,U,e),_.annotationPosition&&H.node().parentNode&&!i){var G=u,Y=h;if(e.standoff){var W=Math.sqrt(Math.pow(u-f,2)+Math.pow(h-d,2));G+=e.standoff*(f-u)/W,Y+=e.standoff*(d-h)/W}var X,Z,J=q.append("path").classed("annotation-arrow",!0).classed("anndrag",!0).classed("cursor-move",!0).attr({d:"M3,3H-3V-3H3ZM0,0L"+(f-G)+","+(d-Y),transform:"translate("+G+","+Y+")"}).style("stroke-width",j+6+"px").call(l.stroke,"rgba(0,0,0,0)").call(l.fill,"rgba(0,0,0,0)");p.init({element:J.node(),gd:t,prepFn:function(){var t=c.getTranslate(z);X=t.x,Z=t.y,s&&s.autorange&&k(s._name+".autorange",!0),v&&v.autorange&&k(v._name+".autorange",!0)},moveFn:function(t,r){var n=w(X,Z),a=n[0]+t,i=n[1]+r;z.call(c.setTranslate,a,i),T("x",s?s.p2r(s.r2p(e.x)+t):e.x+t/b.w),T("y",v?v.p2r(v.r2p(e.y)+r):e.y-r/b.h),e.axref===e.xref&&T("ax",s.p2r(s.r2p(e.ax)+t)),e.ayref===e.yref&&T("ay",v.p2r(v.r2p(e.ay)+r)),q.attr("transform","translate("+t+","+r+")"),C.attr({transform:"rotate("+E+","+a+","+i+")"})},doneFn:function(){a.call("_guiRelayout",t,M());var e=document.querySelector(".js-notes-box-panel");e&&e.redraw(e.selectedObj)}})}}};if(e.showarrow&&xt(0,0),P)p.init({element:z.node(),gd:t,prepFn:function(){yt=C.attr("transform")},moveFn:function(t,r){var n="pointer";if(e.showarrow)e.axref===e.xref?T("ax",s.p2r(s.r2p(e.ax)+t)):T("ax",e.ax+t),e.ayref===e.yref?T("ay",v.p2r(v.r2p(e.ay)+r)):T("ay",e.ay+r),xt(t,r);else{if(i)return;var a,o;if(s)a=s.p2r(s.r2p(e.x)+t);else{var l=e._xsize/b.w,c=e.x+(e._xshift-e.xshift)/b.w-l/2;a=p.align(c+t/b.w,l,0,1,e.xanchor)}if(v)o=v.p2r(v.r2p(e.y)+r);else{var u=e._ysize/b.h,h=e.y-(e._yshift+e.yshift)/b.h-u/2;o=p.align(h-r/b.h,u,0,1,e.yanchor)}T("x",a),T("y",o),s&&v||(n=p.getCursor(s?.5:a,v?.5:o,e.xanchor,e.yanchor))}C.attr({transform:"translate("+t+","+r+")"+yt}),f(z,n)},clickFn:function(r,n){e.captureevents&&t.emit("plotly_clickannotation",q(n))},doneFn:function(){f(z),a.call("_guiRelayout",t,M());var e=document.querySelector(".js-notes-box-panel");e&&e.redraw(e.selectedObj)}})}}}e.exports={draw:function(t){var e=t._fullLayout;e._infolayer.selectAll(".annotation").remove();for(var r=0;r<e.annotations.length;r++)e.annotations[r].visible&&v(t,r);return i.previousPromises(t)},drawOne:v,drawRaw:m}},{"../../lib":717,"../../lib/setcursor":737,"../../lib/svg_text_utils":741,"../../plot_api/plot_template":755,"../../plots/cartesian/axes":765,"../../plots/plots":826,"../../registry":846,"../color":591,"../dragelement":609,"../drawing":612,"../fx":630,"./draw_arrow_head":581,d3:165}],581:[function(t,e,r){"use strict";var n=t("d3"),a=t("../color"),i=t("./arrow_paths");e.exports=function(t,e,r){var o,s,l,c,u=t.node(),h=i[r.arrowhead||0],f=i[r.startarrowhead||0],p=(r.arrowwidth||1)*(r.arrowsize||1),d=(r.arrowwidth||1)*(r.startarrowsize||1),g=e.indexOf("start")>=0,v=e.indexOf("end")>=0,m=h.backoff*p+r.standoff,y=f.backoff*d+r.startstandoff;if("line"===u.nodeName){o={x:+t.attr("x1"),y:+t.attr("y1")},s={x:+t.attr("x2"),y:+t.attr("y2")};var x=o.x-s.x,b=o.y-s.y;if(c=(l=Math.atan2(b,x))+Math.PI,m&&y&&m+y>Math.sqrt(x*x+b*b))return void P();if(m){if(m*m>x*x+b*b)return void P();var _=m*Math.cos(l),w=m*Math.sin(l);s.x+=_,s.y+=w,t.attr({x2:s.x,y2:s.y})}if(y){if(y*y>x*x+b*b)return void P();var k=y*Math.cos(l),T=y*Math.sin(l);o.x-=k,o.y-=T,t.attr({x1:o.x,y1:o.y})}}else if("path"===u.nodeName){var M=u.getTotalLength(),A="";if(M<m+y)return void P();var S=u.getPointAtLength(0),E=u.getPointAtLength(.1);l=Math.atan2(S.y-E.y,S.x-E.x),o=u.getPointAtLength(Math.min(y,M)),A="0px,"+y+"px,";var L=u.getPointAtLength(M),C=u.getPointAtLength(M-.1);c=Math.atan2(L.y-C.y,L.x-C.x),s=u.getPointAtLength(Math.max(0,M-m)),A+=M-(A?y+m:m)+"px,"+M+"px",t.style("stroke-dasharray",A)}function P(){t.style("stroke-dasharray","0px,100px")}function O(e,i,o,s){e.path&&(e.noRotate&&(o=0),n.select(u.parentNode).append("path").attr({class:t.attr("class"),d:e.path,transform:"translate("+i.x+","+i.y+")"+(o?"rotate("+180*o/Math.PI+")":"")+"scale("+s+")"}).style({fill:a.rgb(r.arrowcolor),"stroke-width":0}))}g&&O(f,o,l,d),v&&O(h,s,c,p)}},{"../color":591,"./arrow_paths":573,d3:165}],582:[function(t,e,r){"use strict";var n=t("./draw"),a=t("./click");e.exports={moduleType:"component",name:"annotations",layoutAttributes:t("./attributes"),supplyLayoutDefaults:t("./defaults"),includeBasePlot:t("../../plots/cartesian/include_components")("annotations"),calcAutorange:t("./calc_autorange"),draw:n.draw,drawOne:n.drawOne,drawRaw:n.drawRaw,hasClickToShow:a.hasClickToShow,onClick:a.onClick,convertCoords:t("./convert_coords")}},{"../../plots/cartesian/include_components":775,"./attributes":574,"./calc_autorange":575,"./click":576,"./convert_coords":578,"./defaults":579,"./draw":580}],583:[function(t,e,r){"use strict";var n=t("../annotations/attributes"),a=t("../../plot_api/edit_types").overrideAll,i=t("../../plot_api/plot_template").templatedArray;e.exports=a(i("annotation",{visible:n.visible,x:{valType:"any"},y:{valType:"any"},z:{valType:"any"},ax:{valType:"number"},ay:{valType:"number"},xanchor:n.xanchor,xshift:n.xshift,yanchor:n.yanchor,yshift:n.yshift,text:n.text,textangle:n.textangle,font:n.font,width:n.width,height:n.height,opacity:n.opacity,align:n.align,valign:n.valign,bgcolor:n.bgcolor,bordercolor:n.bordercolor,borderpad:n.borderpad,borderwidth:n.borderwidth,showarrow:n.showarrow,arrowcolor:n.arrowcolor,arrowhead:n.arrowhead,startarrowhead:n.startarrowhead,arrowside:n.arrowside,arrowsize:n.arrowsize,startarrowsize:n.startarrowsize,arrowwidth:n.arrowwidth,standoff:n.standoff,startstandoff:n.startstandoff,hovertext:n.hovertext,hoverlabel:n.hoverlabel,captureevents:n.captureevents}),"calc","from-root")},{"../../plot_api/edit_types":748,"../../plot_api/plot_template":755,"../annotations/attributes":574}],584:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes");function i(t,e){var r=e.fullSceneLayout.domain,i=e.fullLayout._size,o={pdata:null,type:"linear",autorange:!1,range:[-1/0,1/0]};t._xa={},n.extendFlat(t._xa,o),a.setConvert(t._xa),t._xa._offset=i.l+r.x[0]*i.w,t._xa.l2p=function(){return.5*(1+t._pdata[0]/t._pdata[3])*i.w*(r.x[1]-r.x[0])},t._ya={},n.extendFlat(t._ya,o),a.setConvert(t._ya),t._ya._offset=i.t+(1-r.y[1])*i.h,t._ya.l2p=function(){return.5*(1-t._pdata[1]/t._pdata[3])*i.h*(r.y[1]-r.y[0])}}e.exports=function(t){for(var e=t.fullSceneLayout.annotations,r=0;r<e.length;r++)i(e[r],t);t.fullLayout._infolayer.selectAll(".annotation-"+t.id).remove()}},{"../../lib":717,"../../plots/cartesian/axes":765}],585:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../../plots/array_container_defaults"),o=t("../annotations/common_defaults"),s=t("./attributes");function l(t,e,r,i){function l(r,a){return n.coerce(t,e,s,r,a)}function c(t){var n=t+"axis",i={_fullLayout:{}};return i._fullLayout[n]=r[n],a.coercePosition(e,i,l,t,t,.5)}l("visible")&&(o(t,e,i.fullLayout,l),c("x"),c("y"),c("z"),n.noneOrAll(t,e,["x","y","z"]),e.xref="x",e.yref="y",e.zref="z",l("xanchor"),l("yanchor"),l("xshift"),l("yshift"),e.showarrow&&(e.axref="pixel",e.ayref="pixel",l("ax",-10),l("ay",-30),n.noneOrAll(t,e,["ax","ay"])))}e.exports=function(t,e,r){i(t,e,{name:"annotations",handleItemDefaults:l,fullLayout:r.fullLayout})}},{"../../lib":717,"../../plots/array_container_defaults":761,"../../plots/cartesian/axes":765,"../annotations/common_defaults":577,"./attributes":583}],586:[function(t,e,r){"use strict";var n=t("../annotations/draw").drawRaw,a=t("../../plots/gl3d/project"),i=["x","y","z"];e.exports=function(t){for(var e=t.fullSceneLayout,r=t.dataScale,o=e.annotations,s=0;s<o.length;s++){for(var l=o[s],c=!1,u=0;u<3;u++){var h=i[u],f=l[h],p=e[h+"axis"].r2fraction(f);if(p<0||p>1){c=!0;break}}c?t.fullLayout._infolayer.select(".annotation-"+t.id+'[data-index="'+s+'"]').remove():(l._pdata=a(t.glplot.cameraParams,[e.xaxis.r2l(l.x)*r[0],e.yaxis.r2l(l.y)*r[1],e.zaxis.r2l(l.z)*r[2]]),n(t.graphDiv,l,s,t.id,l._xa,l._ya))}}},{"../../plots/gl3d/project":814,"../annotations/draw":580}],587:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib");e.exports={moduleType:"component",name:"annotations3d",schema:{subplots:{scene:{annotations:t("./attributes")}}},layoutAttributes:t("./attributes"),handleDefaults:t("./defaults"),includeBasePlot:function(t,e){var r=n.subplotsRegistry.gl3d;if(!r)return;for(var i=r.attrRegex,o=Object.keys(t),s=0;s<o.length;s++){var l=o[s];i.test(l)&&(t[l].annotations||[]).length&&(a.pushUnique(e._basePlotModules,r),a.pushUnique(e._subplots.gl3d,l))}},convert:t("./convert"),draw:t("./draw")}},{"../../lib":717,"../../registry":846,"./attributes":583,"./convert":584,"./defaults":585,"./draw":586}],588:[function(t,e,r){"use strict";e.exports=t("world-calendars/dist/main"),t("world-calendars/dist/plus"),t("world-calendars/dist/calendars/chinese"),t("world-calendars/dist/calendars/coptic"),t("world-calendars/dist/calendars/discworld"),t("world-calendars/dist/calendars/ethiopian"),t("world-calendars/dist/calendars/hebrew"),t("world-calendars/dist/calendars/islamic"),t("world-calendars/dist/calendars/julian"),t("world-calendars/dist/calendars/mayan"),t("world-calendars/dist/calendars/nanakshahi"),t("world-calendars/dist/calendars/nepali"),t("world-calendars/dist/calendars/persian"),t("world-calendars/dist/calendars/taiwan"),t("world-calendars/dist/calendars/thai"),t("world-calendars/dist/calendars/ummalqura")},{"world-calendars/dist/calendars/chinese":555,"world-calendars/dist/calendars/coptic":556,"world-calendars/dist/calendars/discworld":557,"world-calendars/dist/calendars/ethiopian":558,"world-calendars/dist/calendars/hebrew":559,"world-calendars/dist/calendars/islamic":560,"world-calendars/dist/calendars/julian":561,"world-calendars/dist/calendars/mayan":562,"world-calendars/dist/calendars/nanakshahi":563,"world-calendars/dist/calendars/nepali":564,"world-calendars/dist/calendars/persian":565,"world-calendars/dist/calendars/taiwan":566,"world-calendars/dist/calendars/thai":567,"world-calendars/dist/calendars/ummalqura":568,"world-calendars/dist/main":569,"world-calendars/dist/plus":570}],589:[function(t,e,r){"use strict";var n=t("./calendars"),a=t("../../lib"),i=t("../../constants/numerical"),o=i.EPOCHJD,s=i.ONEDAY,l={valType:"enumerated",values:Object.keys(n.calendars),editType:"calc",dflt:"gregorian"},c=function(t,e,r,n){var i={};return i[r]=l,a.coerce(t,e,i,r,n)},u="##",h={d:{0:"dd","-":"d"},e:{0:"d","-":"d"},a:{0:"D","-":"D"},A:{0:"DD","-":"DD"},j:{0:"oo","-":"o"},W:{0:"ww","-":"w"},m:{0:"mm","-":"m"},b:{0:"M","-":"M"},B:{0:"MM","-":"MM"},y:{0:"yy","-":"yy"},Y:{0:"yyyy","-":"yyyy"},U:u,w:u,c:{0:"D M d %X yyyy","-":"D M d %X yyyy"},x:{0:"mm/dd/yyyy","-":"mm/dd/yyyy"}};var f={};function p(t){var e=f[t];return e||(e=f[t]=n.instance(t))}function d(t){return a.extendFlat({},l,{description:t})}function g(t){return"Sets the calendar system to use with `"+t+"` date data."}var v={xcalendar:d(g("x"))},m=a.extendFlat({},v,{ycalendar:d(g("y"))}),y=a.extendFlat({},m,{zcalendar:d(g("z"))}),x=d(["Sets the calendar system to use for `range` and `tick0`","if this is a date axis. This does not set the calendar for","interpreting data on this axis, that's specified in the trace","or via the global `layout.calendar`"].join(" "));e.exports={moduleType:"component",name:"calendars",schema:{traces:{scatter:m,bar:m,box:m,heatmap:m,contour:m,histogram:m,histogram2d:m,histogram2dcontour:m,scatter3d:y,surface:y,mesh3d:y,scattergl:m,ohlc:v,candlestick:v},layout:{calendar:d(["Sets the default calendar system to use for interpreting and","displaying dates throughout the plot."].join(" "))},subplots:{xaxis:{calendar:x},yaxis:{calendar:x},scene:{xaxis:{calendar:x},yaxis:{calendar:x},zaxis:{calendar:x}},polar:{radialaxis:{calendar:x}}},transforms:{filter:{valuecalendar:d(["Sets the calendar system to use for `value`, if it is a date."].join(" ")),targetcalendar:d(["Sets the calendar system to use for `target`, if it is an","array of dates. If `target` is a string (eg *x*) we use the","corresponding trace attribute (eg `xcalendar`) if it exists,","even if `targetcalendar` is provided."].join(" "))}}},layoutAttributes:l,handleDefaults:c,handleTraceDefaults:function(t,e,r,n){for(var a=0;a<r.length;a++)c(t,e,r[a]+"calendar",n.calendar)},CANONICAL_SUNDAY:{chinese:"2000-01-02",coptic:"2000-01-03",discworld:"2000-01-03",ethiopian:"2000-01-05",hebrew:"5000-01-01",islamic:"1000-01-02",julian:"2000-01-03",mayan:"5000-01-01",nanakshahi:"1000-01-05",nepali:"2000-01-05",persian:"1000-01-01",jalali:"1000-01-01",taiwan:"1000-01-04",thai:"2000-01-04",ummalqura:"1400-01-06"},CANONICAL_TICK:{chinese:"2000-01-01",coptic:"2000-01-01",discworld:"2000-01-01",ethiopian:"2000-01-01",hebrew:"5000-01-01",islamic:"1000-01-01",julian:"2000-01-01",mayan:"5000-01-01",nanakshahi:"1000-01-01",nepali:"2000-01-01",persian:"1000-01-01",jalali:"1000-01-01",taiwan:"1000-01-01",thai:"2000-01-01",ummalqura:"1400-01-01"},DFLTRANGE:{chinese:["2000-01-01","2001-01-01"],coptic:["1700-01-01","1701-01-01"],discworld:["1800-01-01","1801-01-01"],ethiopian:["2000-01-01","2001-01-01"],hebrew:["5700-01-01","5701-01-01"],islamic:["1400-01-01","1401-01-01"],julian:["2000-01-01","2001-01-01"],mayan:["5200-01-01","5201-01-01"],nanakshahi:["0500-01-01","0501-01-01"],nepali:["2000-01-01","2001-01-01"],persian:["1400-01-01","1401-01-01"],jalali:["1400-01-01","1401-01-01"],taiwan:["0100-01-01","0101-01-01"],thai:["2500-01-01","2501-01-01"],ummalqura:["1400-01-01","1401-01-01"]},getCal:p,worldCalFmt:function(t,e,r){for(var n,a,i,l,c,f=Math.floor((e+.05)/s)+o,d=p(r).fromJD(f),g=0;-1!==(g=t.indexOf("%",g));)"0"===(n=t.charAt(g+1))||"-"===n||"_"===n?(i=3,a=t.charAt(g+2),"_"===n&&(n="-")):(a=n,n="0",i=2),(l=h[a])?(c=l===u?u:d.formatDate(l[n]),t=t.substr(0,g)+c+t.substr(g+i),g+=c.length):g+=i;return t}}},{"../../constants/numerical":693,"../../lib":717,"./calendars":588}],590:[function(t,e,r){"use strict";r.defaults=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],r.defaultLine="#444",r.lightLine="#eee",r.background="#fff",r.borderLine="#BEC8D9",r.lightFraction=1e3/11},{}],591:[function(t,e,r){"use strict";var n=t("tinycolor2"),a=t("fast-isnumeric"),i=e.exports={},o=t("./attributes");i.defaults=o.defaults;var s=i.defaultLine=o.defaultLine;i.lightLine=o.lightLine;var l=i.background=o.background;function c(t){if(a(t)||"string"!=typeof t)return t;var e=t.trim();if("rgb"!==e.substr(0,3))return t;var r=e.match(/^rgba?\s*\(([^()]*)\)$/);if(!r)return t;var n=r[1].trim().split(/\s*[\s,]\s*/),i="a"===e.charAt(3)&&4===n.length;if(!i&&3!==n.length)return t;for(var o=0;o<n.length;o++){if(!n[o].length)return t;if(n[o]=Number(n[o]),!(n[o]>=0))return t;if(3===o)n[o]>1&&(n[o]=1);else if(n[o]>=1)return t}var s=Math.round(255*n[0])+", "+Math.round(255*n[1])+", "+Math.round(255*n[2]);return i?"rgba("+s+", "+n[3]+")":"rgb("+s+")"}i.tinyRGB=function(t){var e=t.toRgb();return"rgb("+Math.round(e.r)+", "+Math.round(e.g)+", "+Math.round(e.b)+")"},i.rgb=function(t){return i.tinyRGB(n(t))},i.opacity=function(t){return t?n(t).getAlpha():0},i.addOpacity=function(t,e){var r=n(t).toRgb();return"rgba("+Math.round(r.r)+", "+Math.round(r.g)+", "+Math.round(r.b)+", "+e+")"},i.combine=function(t,e){var r=n(t).toRgb();if(1===r.a)return n(t).toRgbString();var a=n(e||l).toRgb(),i=1===a.a?a:{r:255*(1-a.a)+a.r*a.a,g:255*(1-a.a)+a.g*a.a,b:255*(1-a.a)+a.b*a.a},o={r:i.r*(1-r.a)+r.r*r.a,g:i.g*(1-r.a)+r.g*r.a,b:i.b*(1-r.a)+r.b*r.a};return n(o).toRgbString()},i.contrast=function(t,e,r){var a=n(t);return 1!==a.getAlpha()&&(a=n(i.combine(t,l))),(a.isDark()?e?a.lighten(e):l:r?a.darken(r):s).toString()},i.stroke=function(t,e){var r=n(e);t.style({stroke:i.tinyRGB(r),"stroke-opacity":r.getAlpha()})},i.fill=function(t,e){var r=n(e);t.style({fill:i.tinyRGB(r),"fill-opacity":r.getAlpha()})},i.clean=function(t){if(t&&"object"==typeof t){var e,r,n,a,o=Object.keys(t);for(e=0;e<o.length;e++)if(a=t[n=o[e]],"color"===n.substr(n.length-5))if(Array.isArray(a))for(r=0;r<a.length;r++)a[r]=c(a[r]);else t[n]=c(a);else if("colorscale"===n.substr(n.length-10)&&Array.isArray(a))for(r=0;r<a.length;r++)Array.isArray(a[r])&&(a[r][1]=c(a[r][1]));else if(Array.isArray(a)){var s=a[0];if(!Array.isArray(s)&&s&&"object"==typeof s)for(r=0;r<a.length;r++)i.clean(a[r])}else a&&"object"==typeof a&&i.clean(a)}}},{"./attributes":590,"fast-isnumeric":228,tinycolor2:535}],592:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/layout_attributes"),a=t("../../plots/font_attributes"),i=t("../../lib/extend").extendFlat,o=t("../../plot_api/edit_types").overrideAll;e.exports=o({thicknessmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"pixels"},thickness:{valType:"number",min:0,dflt:30},lenmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"fraction"},len:{valType:"number",min:0,dflt:1},x:{valType:"number",dflt:1.02,min:-2,max:3},xanchor:{valType:"enumerated",values:["left","center","right"],dflt:"left"},xpad:{valType:"number",min:0,dflt:10},y:{valType:"number",dflt:.5,min:-2,max:3},yanchor:{valType:"enumerated",values:["top","middle","bottom"],dflt:"middle"},ypad:{valType:"number",min:0,dflt:10},outlinecolor:n.linecolor,outlinewidth:n.linewidth,bordercolor:n.linecolor,borderwidth:{valType:"number",min:0,dflt:0},bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)"},tickmode:n.tickmode,nticks:n.nticks,tick0:n.tick0,dtick:n.dtick,tickvals:n.tickvals,ticktext:n.ticktext,ticks:i({},n.ticks,{dflt:""}),ticklen:n.ticklen,tickwidth:n.tickwidth,tickcolor:n.tickcolor,showticklabels:n.showticklabels,tickfont:a({}),tickangle:n.tickangle,tickformat:n.tickformat,tickformatstops:n.tickformatstops,tickprefix:n.tickprefix,showtickprefix:n.showtickprefix,ticksuffix:n.ticksuffix,showticksuffix:n.showticksuffix,separatethousands:n.separatethousands,exponentformat:n.exponentformat,showexponent:n.showexponent,title:{text:{valType:"string"},font:a({}),side:{valType:"enumerated",values:["right","top","bottom"],dflt:"top"}},_deprecated:{title:{valType:"string"},titlefont:a({}),titleside:{valType:"enumerated",values:["right","top","bottom"],dflt:"top"}}},"colorbars","from-root")},{"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/cartesian/layout_attributes":777,"../../plots/font_attributes":791}],593:[function(t,e,r){"use strict";e.exports={cn:{colorbar:"colorbar",cbbg:"cbbg",cbfill:"cbfill",cbfills:"cbfills",cbline:"cbline",cblines:"cblines",cbaxis:"cbaxis",cbtitleunshift:"cbtitleunshift",cbtitle:"cbtitle",cboutline:"cboutline",crisp:"crisp",jsPlaceholder:"js-placeholder"}}},{}],594:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plot_api/plot_template"),i=t("../../plots/cartesian/tick_value_defaults"),o=t("../../plots/cartesian/tick_mark_defaults"),s=t("../../plots/cartesian/tick_label_defaults"),l=t("./attributes");e.exports=function(t,e,r){var c=a.newContainer(e,"colorbar"),u=t.colorbar||{};function h(t,e){return n.coerce(u,c,l,t,e)}var f=h("thicknessmode");h("thickness","fraction"===f?30/(r.width-r.margin.l-r.margin.r):30);var p=h("lenmode");h("len","fraction"===p?1:r.height-r.margin.t-r.margin.b),h("x"),h("xanchor"),h("xpad"),h("y"),h("yanchor"),h("ypad"),n.noneOrAll(u,c,["x","y"]),h("outlinecolor"),h("outlinewidth"),h("bordercolor"),h("borderwidth"),h("bgcolor"),i(u,c,h,"linear");var d={outerTicks:!1,font:r.font};s(u,c,h,"linear",d),o(u,c,h,"linear",d),h("title.text",r._dfltTitle.colorbar),n.coerceFont(h,"title.font",r.font),h("title.side")}},{"../../lib":717,"../../plot_api/plot_template":755,"../../plots/cartesian/tick_label_defaults":784,"../../plots/cartesian/tick_mark_defaults":785,"../../plots/cartesian/tick_value_defaults":786,"./attributes":592}],595:[function(t,e,r){"use strict";var n=t("d3"),a=t("tinycolor2"),i=t("../../plots/plots"),o=t("../../registry"),s=t("../../plots/cartesian/axes"),l=t("../dragelement"),c=t("../../lib"),u=t("../../lib/extend").extendFlat,h=t("../../lib/setcursor"),f=t("../drawing"),p=t("../color"),d=t("../titles"),g=t("../../lib/svg_text_utils"),v=t("../colorscale/helpers").flipScale,m=t("../../plots/cartesian/axis_defaults"),y=t("../../plots/cartesian/position_defaults"),x=t("../../plots/cartesian/layout_attributes"),b=t("../../constants/alignment"),_=b.LINE_SPACING,w=b.FROM_TL,k=b.FROM_BR,T=t("./constants").cn;e.exports={draw:function(t){var e=t._fullLayout._infolayer.selectAll("g."+T.colorbar).data(function(t){var e,r,n,a,i=t._fullLayout,o=t.calcdata,s=[];function l(t){return u(t,{_fillcolor:null,_line:{color:null,width:null,dash:null},_levels:{start:null,end:null,size:null},_filllevels:null,_fillgradient:null,_zrange:null})}function c(){"function"==typeof a.calc?a.calc(t,n,e):(e._fillgradient=r.reversescale?v(r.colorscale):r.colorscale,e._zrange=[r[a.min],r[a.max]])}for(var h=0;h<o.length;h++){var f=o[h],p=(n=f[0].trace)._module.colorbar;if(!0===n.visible&&p)for(var d=Array.isArray(p),g=d?p:[p],m=0;m<g.length;m++){var y=(a=g[m]).container;(r=y?n[y]:n)&&r.showscale&&((e=l(r.colorbar))._id="cb"+n.uid+(d&&y?"-"+y:""),e._traceIndex=n.index,e._propPrefix=(y?y+".":"")+"colorbar.",e._meta=n._meta,c(),s.push(e))}}for(var x in i._colorAxes)if((r=i[x]).showscale){var b=i._colorAxes[x];(e=l(r.colorbar))._id="cb"+x,e._propPrefix=x+".colorbar.",e._meta=i._meta,a={min:"cmin",max:"cmax"},"heatmap"!==b[0]&&(n=b[1],a.calc=n._module.colorbar.calc),c(),s.push(e)}return s}(t),function(t){return t._id});e.enter().append("g").attr("class",function(t){return t._id}).classed(T.colorbar,!0),e.each(function(e){var r=n.select(this);c.ensureSingle(r,"rect",T.cbbg),c.ensureSingle(r,"g",T.cbfills),c.ensureSingle(r,"g",T.cblines),c.ensureSingle(r,"g",T.cbaxis,function(t){t.classed(T.crisp,!0)}),c.ensureSingle(r,"g",T.cbtitleunshift,function(t){t.append("g").classed(T.cbtitle,!0)}),c.ensureSingle(r,"rect",T.cboutline);var v=function(t,e,r){var o=r._fullLayout,l=o._size,h=e._fillcolor,v=e._line,b=e.title,M=b.side,A=e._zrange||n.extent(("function"==typeof h?h:v.color).domain()),S="function"==typeof v.color?v.color:function(){return v.color},E="function"==typeof h?h:function(){return h},L=e._levels,C=function(t,e,r){var n,a,i=e._levels,o=[],s=[],l=i.end+i.size/100,c=i.size,u=1.001*r[0]-.001*r[1],h=1.001*r[1]-.001*r[0];for(a=0;a<1e5&&(n=i.start+a*c,!(c>0?n>=l:n<=l));a++)n>u&&n<h&&o.push(n);if(e._fillgradient)s=[0];else if("function"==typeof e._fillcolor){var f=e._filllevels;if(f)for(l=f.end+f.size/100,c=f.size,a=0;a<1e5&&(n=f.start+a*c,!(c>0?n>=l:n<=l));a++)n>r[0]&&n<r[1]&&s.push(n);else(s=o.map(function(t){return t-i.size/2})).push(s[s.length-1]+i.size)}else e._fillcolor&&"string"==typeof e._fillcolor&&(s=[0]);return i.size<0&&(o.reverse(),s.reverse()),{line:o,fill:s}}(0,e,A),P=C.fill,O=C.line,z=Math.round(e.thickness*("fraction"===e.thicknessmode?l.w:1)),I=z/l.w,D=Math.round(e.len*("fraction"===e.lenmode?l.h:1)),R=D/l.h,F=e.xpad/l.w,B=(e.borderwidth+e.outlinewidth)/2,N=e.ypad/l.h,j=Math.round(e.x*l.w+e.xpad),V=e.x-I*({middle:.5,right:1}[e.xanchor]||0),U=e.y+R*(({top:-.5,bottom:.5}[e.yanchor]||0)-.5),q=Math.round(l.h*(1-U)),H=q-D;e._lenFrac=R,e._thickFrac=I,e._xLeftFrac=V,e._yBottomFrac=U;var G=e._axis=function(t,e,r){var n=t._fullLayout,a={type:"linear",range:r,tickmode:e.tickmode,nticks:e.nticks,tick0:e.tick0,dtick:e.dtick,tickvals:e.tickvals,ticktext:e.ticktext,ticks:e.ticks,ticklen:e.ticklen,tickwidth:e.tickwidth,tickcolor:e.tickcolor,showticklabels:e.showticklabels,tickfont:e.tickfont,tickangle:e.tickangle,tickformat:e.tickformat,exponentformat:e.exponentformat,separatethousands:e.separatethousands,showexponent:e.showexponent,showtickprefix:e.showtickprefix,tickprefix:e.tickprefix,showticksuffix:e.showticksuffix,ticksuffix:e.ticksuffix,title:e.title,showline:!0,anchor:"free",side:"right",position:1},i={type:"linear",_id:"y"+e._id},o={letter:"y",font:n.font,noHover:!0,noTickson:!0,calendar:n.calendar};function s(t,e){return c.coerce(a,i,x,t,e)}return m(a,i,s,o,n),y(a,i,s,o),i}(r,e,A);if(G.position=e.x+F+I,-1!==["top","bottom"].indexOf(M)&&(G.title.side=M,G.titlex=e.x+F,G.titley=U+("top"===b.side?R-N:N)),v.color&&"auto"===e.tickmode){G.tickmode="linear",G.tick0=L.start;var Y=L.size,W=c.constrain((q-H)/50,4,15)+1,X=(A[1]-A[0])/((e.nticks||W)*Y);if(X>1){var Z=Math.pow(10,Math.floor(Math.log(X)/Math.LN10));Y*=Z*c.roundUp(X/Z,[2,5,10]),(Math.abs(L.start)/L.size+1e-6)%1<2e-6&&(G.tick0=0)}G.dtick=Y}G.domain=[U+N,U+R-N],G.setScale(),t.attr("transform","translate("+Math.round(l.l)+","+Math.round(l.t)+")");var J,K=t.select("."+T.cbtitleunshift).attr("transform","translate(-"+Math.round(l.l)+",-"+Math.round(l.t)+")"),Q=t.select("."+T.cbaxis),$=0;function tt(n,a){var i={propContainer:G,propName:e._propPrefix+"title",traceIndex:e._traceIndex,_meta:e._meta,placeholder:o._dfltTitle.colorbar,containerGroup:t.select("."+T.cbtitle)},s="h"===n.charAt(0)?n.substr(1):"h"+n;t.selectAll("."+s+",."+s+"-math-group").remove(),d.draw(r,n,u(i,a||{}))}return c.syncOrAsync([i.previousPromises,function(){if(-1!==["top","bottom"].indexOf(M)){var t,r=l.l+(e.x+F)*l.w,n=G.title.font.size;t="top"===M?(1-(U+R-N))*l.h+l.t+3+.75*n:(1-(U+N))*l.h+l.t-3-.25*n,tt(G._id+"title",{attributes:{x:r,y:t,"text-anchor":"start"}})}},function(){if(-1!==["top","bottom"].indexOf(M)){var i=t.select("."+T.cbtitle),o=i.select("text"),u=[-e.outlinewidth/2,e.outlinewidth/2],h=i.select(".h"+G._id+"title-math-group").node(),p=15.6;if(o.node()&&(p=parseInt(o.node().style.fontSize,10)*_),h?($=f.bBox(h).height)>p&&(u[1]-=($-p)/2):o.node()&&!o.classed(T.jsPlaceholder)&&($=f.bBox(o.node()).height),$){if($+=5,"top"===M)G.domain[1]-=$/l.h,u[1]*=-1;else{G.domain[0]+=$/l.h;var d=g.lineCount(o);u[1]+=(1-d)*p}i.attr("transform","translate("+u+")"),G.setScale()}}t.selectAll("."+T.cbfills+",."+T.cblines).attr("transform","translate(0,"+Math.round(l.h*(1-G.domain[1]))+")"),Q.attr("transform","translate(0,"+Math.round(-l.t)+")");var m=t.select("."+T.cbfills).selectAll("rect."+T.cbfill).data(P);m.enter().append("rect").classed(T.cbfill,!0).style("stroke","none"),m.exit().remove();var y=A.map(G.c2p).map(Math.round).sort(function(t,e){return t-e});m.each(function(t,i){var o=[0===i?A[0]:(P[i]+P[i-1])/2,i===P.length-1?A[1]:(P[i]+P[i+1])/2].map(G.c2p).map(Math.round);o[1]=c.constrain(o[1]+(o[1]>o[0])?1:-1,y[0],y[1]);var s=n.select(this).attr({x:j,width:Math.max(z,2),y:n.min(o),height:Math.max(n.max(o)-n.min(o),2)});if(e._fillgradient)f.gradient(s,r,e._id,"vertical",e._fillgradient,"fill");else{var l=E(t).replace("e-","");s.attr("fill",a(l).toHexString())}});var x=t.select("."+T.cblines).selectAll("path."+T.cbline).data(v.color&&v.width?O:[]);x.enter().append("path").classed(T.cbline,!0),x.exit().remove(),x.each(function(t){n.select(this).attr("d","M"+j+","+(Math.round(G.c2p(t))+v.width/2%1)+"h"+z).call(f.lineGroupStyle,v.width,S(t),v.dash)}),Q.selectAll("g."+G._id+"tick,path").remove();var b=j+z+(e.outlinewidth||0)/2-("outside"===e.ticks?1:0),w=s.calcTicks(G),k=s.makeTransFn(G),L=s.getTickSigns(G)[2];return s.drawTicks(r,G,{vals:"inside"===G.ticks?s.clipEnds(G,w):w,layer:Q,path:s.makeTickPath(G,b,L),transFn:k}),s.drawLabels(r,G,{vals:w,layer:Q,transFn:k,labelFns:s.makeLabelFns(G,b)})},function(){if(-1===["top","bottom"].indexOf(M)){var t=G.title.font.size,e=G._offset+G._length/2,a=l.l+(G.position||0)*l.w+("right"===G.side?10+t*(G.showticklabels?1:.5):-10-t*(G.showticklabels?.5:0));tt("h"+G._id+"title",{avoid:{selection:n.select(r).selectAll("g."+G._id+"tick"),side:M,offsetLeft:l.l,offsetTop:0,maxShift:o.width},attributes:{x:a,y:e,"text-anchor":"middle"},transform:{rotate:"-90",offset:0}})}},i.previousPromises,function(){var n=z+e.outlinewidth/2+f.bBox(Q.node()).width;if((J=K.select("text")).node()&&!J.classed(T.jsPlaceholder)){var a,o=K.select(".h"+G._id+"title-math-group").node();a=o&&-1!==["top","bottom"].indexOf(M)?f.bBox(o).width:f.bBox(K.node()).right-j-l.l,n=Math.max(n,a)}var s=2*e.xpad+n+e.borderwidth+e.outlinewidth/2,c=q-H;t.select("."+T.cbbg).attr({x:j-e.xpad-(e.borderwidth+e.outlinewidth)/2,y:H-B,width:Math.max(s,2),height:Math.max(c+2*B,2)}).call(p.fill,e.bgcolor).call(p.stroke,e.bordercolor).style("stroke-width",e.borderwidth),t.selectAll("."+T.cboutline).attr({x:j,y:H+e.ypad+("top"===M?$:0),width:Math.max(z,2),height:Math.max(c-2*e.ypad-$,2)}).call(p.stroke,e.outlinecolor).style({fill:"none","stroke-width":e.outlinewidth});var u=({center:.5,right:1}[e.xanchor]||0)*s;t.attr("transform","translate("+(l.l-u)+","+l.t+")");var h={},d=w[e.yanchor],g=k[e.yanchor];"pixels"===e.lenmode?(h.y=e.y,h.t=c*d,h.b=c*g):(h.t=h.b=0,h.yt=e.y+e.len*d,h.yb=e.y-e.len*g);var v=w[e.xanchor],m=k[e.xanchor];if("pixels"===e.thicknessmode)h.x=e.x,h.l=s*v,h.r=s*m;else{var y=s-z;h.l=y*v,h.r=y*m,h.xl=e.x-e.thickness*v,h.xr=e.x+e.thickness*m}i.autoMargin(r,e._id,h)}],r)}(r,e,t);v&&v.then&&(t._promises||[]).push(v),t._context.edits.colorbarPosition&&function(t,e,r){var n,a,i,s=r._fullLayout._size;l.init({element:t.node(),gd:r,prepFn:function(){n=t.attr("transform"),h(t)},moveFn:function(r,o){t.attr("transform",n+" translate("+r+","+o+")"),a=l.align(e._xLeftFrac+r/s.w,e._thickFrac,0,1,e.xanchor),i=l.align(e._yBottomFrac-o/s.h,e._lenFrac,0,1,e.yanchor);var c=l.getCursor(a,i,e.xanchor,e.yanchor);h(t,c)},doneFn:function(){if(h(t),void 0!==a&&void 0!==i){var n={};n[e._propPrefix+"x"]=a,n[e._propPrefix+"y"]=i,void 0!==e._traceIndex?o.call("_guiRestyle",r,n,e._traceIndex):o.call("_guiRelayout",r,n)}}})}(r,e,t)}),e.exit().each(function(e){i.autoMargin(t,e._id)}).remove(),e.order()}}},{"../../constants/alignment":686,"../../lib":717,"../../lib/extend":708,"../../lib/setcursor":737,"../../lib/svg_text_utils":741,"../../plots/cartesian/axes":765,"../../plots/cartesian/axis_defaults":767,"../../plots/cartesian/layout_attributes":777,"../../plots/cartesian/position_defaults":780,"../../plots/plots":826,"../../registry":846,"../color":591,"../colorscale/helpers":602,"../dragelement":609,"../drawing":612,"../titles":679,"./constants":593,d3:165,tinycolor2:535}],596:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t){return n.isPlainObject(t.colorbar)}},{"../../lib":717}],597:[function(t,e,r){"use strict";e.exports={moduleType:"component",name:"colorbar",attributes:t("./attributes"),supplyDefaults:t("./defaults"),draw:t("./draw").draw,hasColorbar:t("./has_colorbar")}},{"./attributes":592,"./defaults":594,"./draw":595,"./has_colorbar":596}],598:[function(t,e,r){"use strict";var n=t("../colorbar/attributes"),a=t("../../lib/regex").counter,i=t("./scales.js").scales;Object.keys(i);function o(t){return"`"+t+"`"}e.exports=function(t,e){t=t||"";var r,s=(e=e||{}).cLetter||"c",l=("onlyIfNumerical"in e?e.onlyIfNumerical:Boolean(t),"noScale"in e?e.noScale:"marker.line"===t),c="showScaleDflt"in e?e.showScaleDflt:"z"===s,u="string"==typeof e.colorscaleDflt?i[e.colorscaleDflt]:null,h=e.editTypeOverride||"",f=t?t+".":"";"colorAttr"in e?(r=e.colorAttr,e.colorAttr):o(f+(r={z:"z",c:"color"}[s]));var p=s+"auto",d=s+"min",g=s+"max",v=s+"mid",m=(o(f+p),o(f+d),o(f+g),{});m[d]=m[g]=void 0;var y={};y[p]=!1;var x={};return"color"===r&&(x.color={valType:"color",arrayOk:!0,editType:h||"style"},e.anim&&(x.color.anim=!0)),x[p]={valType:"boolean",dflt:!0,editType:"calc",impliedEdits:m},x[d]={valType:"number",dflt:null,editType:h||"plot",impliedEdits:y},x[g]={valType:"number",dflt:null,editType:h||"plot",impliedEdits:y},x[v]={valType:"number",dflt:null,editType:"calc",impliedEdits:m},x.colorscale={valType:"colorscale",editType:"calc",dflt:u,impliedEdits:{autocolorscale:!1}},x.autocolorscale={valType:"boolean",dflt:!1!==e.autoColorDflt,editType:"calc",impliedEdits:{colorscale:void 0}},x.reversescale={valType:"boolean",dflt:!1,editType:"plot"},l||(x.showscale={valType:"boolean",dflt:c,editType:"calc"},x.colorbar=n),e.noColorAxis||(x.coloraxis={valType:"subplotid",regex:a("coloraxis"),dflt:null,editType:"calc"}),x}},{"../../lib/regex":733,"../colorbar/attributes":592,"./scales.js":606}],599:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("./helpers").extractOpts;e.exports=function(t,e,r){var o,s=t._fullLayout,l=r.vals,c=r.containerStr,u=c?a.nestedProperty(e,c).get():e,h=i(u),f=!1!==h.auto,p=h.min,d=h.max,g=h.mid,v=function(){return a.aggNums(Math.min,null,l)},m=function(){return a.aggNums(Math.max,null,l)};(void 0===p?p=v():f&&(p=u._colorAx&&n(p)?Math.min(p,v()):v()),void 0===d?d=m():f&&(d=u._colorAx&&n(d)?Math.max(d,m()):m()),f&&void 0!==g&&(d-g>g-p?p=g-(d-g):d-g<g-p&&(d=g+(g-p))),p===d&&(p-=.5,d+=.5),h._sync("min",p),h._sync("max",d),h.autocolorscale)&&(o=p*d<0?s.colorscale.diverging:p>=0?s.colorscale.sequential:s.colorscale.sequentialminus,h._sync("colorscale",o))}},{"../../lib":717,"./helpers":602,"fast-isnumeric":228}],600:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./helpers").hasColorscale,i=t("./helpers").extractOpts;e.exports=function(t,e){function r(t,e){var r=t["_"+e];void 0!==r&&(t[e]=r)}function o(t,a){var o=a.container?n.nestedProperty(t,a.container).get():t;if(o)if(o.coloraxis)o._colorAx=e[o.coloraxis];else{var s=i(o),l=s.auto;(l||void 0===s.min)&&r(o,a.min),(l||void 0===s.max)&&r(o,a.max),s.autocolorscale&&r(o,"colorscale")}}for(var s=0;s<t.length;s++){var l=t[s],c=l._module.colorbar;if(c)if(Array.isArray(c))for(var u=0;u<c.length;u++)o(l,c[u]);else o(l,c);a(l,"marker.line")&&o(l,{container:"marker.line",min:"cmin",max:"cmax"})}for(var h in e._colorAxes)o(e[h],{min:"cmin",max:"cmax"})}},{"../../lib":717,"./helpers":602}],601:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../colorbar/has_colorbar"),o=t("../colorbar/defaults"),s=t("./scales").isValid,l=t("../../registry").traceIs;function c(t,e){var r=e.slice(0,e.length-1);return e?a.nestedProperty(t,r).get()||{}:t}e.exports=function t(e,r,u,h,f){var p=f.prefix,d=f.cLetter,g="_module"in r,v=c(e,p),m=c(r,p),y=c(r._template||{},p)||{},x=function(){return delete e.coloraxis,delete r.coloraxis,t(e,r,u,h,f)};if(g){var b=u._colorAxes||{},_=h(p+"coloraxis");if(_){var w=l(r,"contour")&&a.nestedProperty(r,"contours.coloring").get()||"heatmap",k=b[_];return void(k?(k[2].push(x),k[0]!==w&&(k[0]=!1,a.warn(["Ignoring coloraxis:",_,"setting","as it is linked to incompatible colorscales."].join(" ")))):b[_]=[w,r,[x]])}}var T=v[d+"min"],M=v[d+"max"],A=n(T)&&n(M)&&T<M;h(p+d+"auto",!A)?h(p+d+"mid"):(h(p+d+"min"),h(p+d+"max"));var S,E,L=v.colorscale,C=y.colorscale;(void 0!==L&&(S=!s(L)),void 0!==C&&(S=!s(C)),h(p+"autocolorscale",S),h(p+"colorscale"),h(p+"reversescale"),"marker.line."!==p)&&(p&&g&&(E=i(v)),h(p+"showscale",E)&&(p&&y&&(m._template=y),o(v,m,u)))}},{"../../lib":717,"../../registry":846,"../colorbar/defaults":594,"../colorbar/has_colorbar":596,"./scales":606,"fast-isnumeric":228}],602:[function(t,e,r){"use strict";var n=t("d3"),a=t("tinycolor2"),i=t("fast-isnumeric"),o=t("../../lib"),s=t("../color"),l=t("./scales").isValid;var c=["showscale","autocolorscale","colorscale","reversescale","colorbar"],u=["min","max","mid","auto"];function h(t){var e,r,n,a=t._colorAx,i=a||t,o={};for(r=0;r<c.length;r++)o[n=c[r]]=i[n];if(a)for(e="c",r=0;r<u.length;r++)o[n=u[r]]=i["c"+n];else{var s;for(r=0;r<u.length;r++)(s="c"+(n=u[r]))in i?o[n]=i[s]:(s="z"+n)in i&&(o[n]=i[s]);e=s.charAt(0)}return o._sync=function(t,r){var n=-1!==u.indexOf(t)?e+t:t;i[n]=i["_"+n]=r},o}function f(t){for(var e=h(t),r=e.min,n=e.max,a=e.reversescale?p(e.colorscale):e.colorscale,i=a.length,o=new Array(i),s=new Array(i),l=0;l<i;l++){var c=a[l];o[l]=r+c[0]*(n-r),s[l]=c[1]}return{domain:o,range:s}}function p(t){for(var e=t.length,r=new Array(e),n=e-1,a=0;n>=0;n--,a++){var i=t[n];r[a]=[1-i[0],i[1]]}return r}function d(t,e){e=e||{};for(var r=t.domain,o=t.range,l=o.length,c=new Array(l),u=0;u<l;u++){var h=a(o[u]).toRgb();c[u]=[h.r,h.g,h.b,h.a]}var f,p=n.scale.linear().domain(r).range(c).clamp(!0),d=e.noNumericCheck,v=e.returnArray;return(f=d&&v?p:d?function(t){return g(p(t))}:v?function(t){return i(t)?p(t):a(t).isValid()?t:s.defaultLine}:function(t){return i(t)?g(p(t)):a(t).isValid()?t:s.defaultLine}).domain=p.domain,f.range=function(){return o},f}function g(t){var e={r:t[0],g:t[1],b:t[2],a:t[3]};return a(e).toRgbString()}e.exports={hasColorscale:function(t,e,r){var n=e?o.nestedProperty(t,e).get()||{}:t,a=n[r||"color"],s=!1;if(o.isArrayOrTypedArray(a))for(var c=0;c<a.length;c++)if(i(a[c])){s=!0;break}return o.isPlainObject(n)&&(s||!0===n.showscale||i(n.cmin)&&i(n.cmax)||l(n.colorscale)||o.isPlainObject(n.colorbar))},extractOpts:h,extractScale:f,flipScale:p,makeColorScaleFunc:d,makeColorScaleFuncFromTrace:function(t,e){return d(f(t),e)}}},{"../../lib":717,"../color":591,"./scales":606,d3:165,"fast-isnumeric":228,tinycolor2:535}],603:[function(t,e,r){"use strict";var n=t("./scales"),a=t("./helpers");e.exports={moduleType:"component",name:"colorscale",attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyLayoutDefaults:t("./layout_defaults"),handleDefaults:t("./defaults"),crossTraceDefaults:t("./cross_trace_defaults"),calc:t("./calc"),scales:n.scales,defaultScale:n.defaultScale,getScale:n.get,isValidScale:n.isValid,hasColorscale:a.hasColorscale,extractOpts:a.extractOpts,extractScale:a.extractScale,flipScale:a.flipScale,makeColorScaleFunc:a.makeColorScaleFunc,makeColorScaleFuncFromTrace:a.makeColorScaleFuncFromTrace}},{"./attributes":598,"./calc":599,"./cross_trace_defaults":600,"./defaults":601,"./helpers":602,"./layout_attributes":604,"./layout_defaults":605,"./scales":606}],604:[function(t,e,r){"use strict";var n=t("../../lib/extend").extendFlat,a=t("./attributes"),i=t("./scales").scales;e.exports={editType:"calc",colorscale:{editType:"calc",sequential:{valType:"colorscale",dflt:i.Reds,editType:"calc"},sequentialminus:{valType:"colorscale",dflt:i.Blues,editType:"calc"},diverging:{valType:"colorscale",dflt:i.RdBu,editType:"calc"}},coloraxis:n({_isSubplotObj:!0,editType:"calc"},a("",{colorAttr:"corresponding trace color array(s)",noColorAxis:!0,showScaleDflt:!0}))}},{"../../lib/extend":708,"./attributes":598,"./scales":606}],605:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plot_api/plot_template"),i=t("./layout_attributes"),o=t("./defaults");e.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r("colorscale.sequential"),r("colorscale.sequentialminus"),r("colorscale.diverging");var s,l,c=e._colorAxes;function u(t,e){return n.coerce(s,l,i.coloraxis,t,e)}for(var h in c){var f=c[h];if(f[0])s=t[h]||{},(l=a.newContainer(e,h,"coloraxis"))._name=h,o(s,l,e,u,{prefix:"",cLetter:"c"});else{for(var p=0;p<f[2].length;p++)f[2][p]();delete e._colorAxes[h]}}}},{"../../lib":717,"../../plot_api/plot_template":755,"./defaults":601,"./layout_attributes":604}],606:[function(t,e,r){"use strict";var n=t("tinycolor2"),a={Greys:[[0,"rgb(0,0,0)"],[1,"rgb(255,255,255)"]],YlGnBu:[[0,"rgb(8,29,88)"],[.125,"rgb(37,52,148)"],[.25,"rgb(34,94,168)"],[.375,"rgb(29,145,192)"],[.5,"rgb(65,182,196)"],[.625,"rgb(127,205,187)"],[.75,"rgb(199,233,180)"],[.875,"rgb(237,248,217)"],[1,"rgb(255,255,217)"]],Greens:[[0,"rgb(0,68,27)"],[.125,"rgb(0,109,44)"],[.25,"rgb(35,139,69)"],[.375,"rgb(65,171,93)"],[.5,"rgb(116,196,118)"],[.625,"rgb(161,217,155)"],[.75,"rgb(199,233,192)"],[.875,"rgb(229,245,224)"],[1,"rgb(247,252,245)"]],YlOrRd:[[0,"rgb(128,0,38)"],[.125,"rgb(189,0,38)"],[.25,"rgb(227,26,28)"],[.375,"rgb(252,78,42)"],[.5,"rgb(253,141,60)"],[.625,"rgb(254,178,76)"],[.75,"rgb(254,217,118)"],[.875,"rgb(255,237,160)"],[1,"rgb(255,255,204)"]],Bluered:[[0,"rgb(0,0,255)"],[1,"rgb(255,0,0)"]],RdBu:[[0,"rgb(5,10,172)"],[.35,"rgb(106,137,247)"],[.5,"rgb(190,190,190)"],[.6,"rgb(220,170,132)"],[.7,"rgb(230,145,90)"],[1,"rgb(178,10,28)"]],Reds:[[0,"rgb(220,220,220)"],[.2,"rgb(245,195,157)"],[.4,"rgb(245,160,105)"],[1,"rgb(178,10,28)"]],Blues:[[0,"rgb(5,10,172)"],[.35,"rgb(40,60,190)"],[.5,"rgb(70,100,245)"],[.6,"rgb(90,120,245)"],[.7,"rgb(106,137,247)"],[1,"rgb(220,220,220)"]],Picnic:[[0,"rgb(0,0,255)"],[.1,"rgb(51,153,255)"],[.2,"rgb(102,204,255)"],[.3,"rgb(153,204,255)"],[.4,"rgb(204,204,255)"],[.5,"rgb(255,255,255)"],[.6,"rgb(255,204,255)"],[.7,"rgb(255,153,255)"],[.8,"rgb(255,102,204)"],[.9,"rgb(255,102,102)"],[1,"rgb(255,0,0)"]],Rainbow:[[0,"rgb(150,0,90)"],[.125,"rgb(0,0,200)"],[.25,"rgb(0,25,255)"],[.375,"rgb(0,152,255)"],[.5,"rgb(44,255,150)"],[.625,"rgb(151,255,0)"],[.75,"rgb(255,234,0)"],[.875,"rgb(255,111,0)"],[1,"rgb(255,0,0)"]],Portland:[[0,"rgb(12,51,131)"],[.25,"rgb(10,136,186)"],[.5,"rgb(242,211,56)"],[.75,"rgb(242,143,56)"],[1,"rgb(217,30,30)"]],Jet:[[0,"rgb(0,0,131)"],[.125,"rgb(0,60,170)"],[.375,"rgb(5,255,255)"],[.625,"rgb(255,255,0)"],[.875,"rgb(250,0,0)"],[1,"rgb(128,0,0)"]],Hot:[[0,"rgb(0,0,0)"],[.3,"rgb(230,0,0)"],[.6,"rgb(255,210,0)"],[1,"rgb(255,255,255)"]],Blackbody:[[0,"rgb(0,0,0)"],[.2,"rgb(230,0,0)"],[.4,"rgb(230,210,0)"],[.7,"rgb(255,255,255)"],[1,"rgb(160,200,255)"]],Earth:[[0,"rgb(0,0,130)"],[.1,"rgb(0,180,180)"],[.2,"rgb(40,210,40)"],[.4,"rgb(230,230,50)"],[.6,"rgb(120,70,20)"],[1,"rgb(255,255,255)"]],Electric:[[0,"rgb(0,0,0)"],[.15,"rgb(30,0,100)"],[.4,"rgb(120,0,100)"],[.6,"rgb(160,90,0)"],[.8,"rgb(230,200,0)"],[1,"rgb(255,250,220)"]],Viridis:[[0,"#440154"],[.06274509803921569,"#48186a"],[.12549019607843137,"#472d7b"],[.18823529411764706,"#424086"],[.25098039215686274,"#3b528b"],[.3137254901960784,"#33638d"],[.3764705882352941,"#2c728e"],[.4392156862745098,"#26828e"],[.5019607843137255,"#21918c"],[.5647058823529412,"#1fa088"],[.6274509803921569,"#28ae80"],[.6901960784313725,"#3fbc73"],[.7529411764705882,"#5ec962"],[.8156862745098039,"#84d44b"],[.8784313725490196,"#addc30"],[.9411764705882353,"#d8e219"],[1,"#fde725"]],Cividis:[[0,"rgb(0,32,76)"],[.058824,"rgb(0,42,102)"],[.117647,"rgb(0,52,110)"],[.176471,"rgb(39,63,108)"],[.235294,"rgb(60,74,107)"],[.294118,"rgb(76,85,107)"],[.352941,"rgb(91,95,109)"],[.411765,"rgb(104,106,112)"],[.470588,"rgb(117,117,117)"],[.529412,"rgb(131,129,120)"],[.588235,"rgb(146,140,120)"],[.647059,"rgb(161,152,118)"],[.705882,"rgb(176,165,114)"],[.764706,"rgb(192,177,109)"],[.823529,"rgb(209,191,102)"],[.882353,"rgb(225,204,92)"],[.941176,"rgb(243,219,79)"],[1,"rgb(255,233,69)"]]},i=a.RdBu;function o(t){var e=0;if(!Array.isArray(t)||t.length<2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!=+t[0][0]||1!=+t[t.length-1][0])return!1;for(var r=0;r<t.length;r++){var a=t[r];if(2!==a.length||+a[0]<e||!n(a[1]).isValid())return!1;e=+a[0]}return!0}e.exports={scales:a,defaultScale:i,get:function(t,e){if(e||(e=i),!t)return e;function r(){try{t=a[t]||JSON.parse(t)}catch(r){t=e}}return"string"==typeof t&&(r(),"string"==typeof t&&r()),o(t)?t:e},isValid:function(t){return void 0!==a[t]||o(t)}}},{tinycolor2:535}],607:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a){var i=(t-r)/(n-r),o=i+e/(n-r),s=(i+o)/2;return"left"===a||"bottom"===a?i:"center"===a||"middle"===a?s:"right"===a||"top"===a?o:i<2/3-s?i:o>4/3-s?o:s}},{}],608:[function(t,e,r){"use strict";var n=t("../../lib"),a=[["sw-resize","s-resize","se-resize"],["w-resize","move","e-resize"],["nw-resize","n-resize","ne-resize"]];e.exports=function(t,e,r,i){return t="left"===r?0:"center"===r?1:"right"===r?2:n.constrain(Math.floor(3*t),0,2),e="bottom"===i?0:"middle"===i?1:"top"===i?2:n.constrain(Math.floor(3*e),0,2),a[e][t]}},{"../../lib":717}],609:[function(t,e,r){"use strict";var n=t("mouse-event-offset"),a=t("has-hover"),i=t("has-passive-events"),o=t("../../lib").removeElement,s=t("../../plots/cartesian/constants"),l=e.exports={};l.align=t("./align"),l.getCursor=t("./cursor");var c=t("./unhover");function u(){var t=document.createElement("div");t.className="dragcover";var e=t.style;return e.position="fixed",e.left=0,e.right=0,e.top=0,e.bottom=0,e.zIndex=999999999,e.background="none",document.body.appendChild(t),t}function h(t){return n(t.changedTouches?t.changedTouches[0]:t,document.body)}l.unhover=c.wrapped,l.unhoverRaw=c.raw,l.init=function(t){var e,r,n,c,f,p,d,g,v=t.gd,m=1,y=v._context.doubleClickDelay,x=t.element;v._mouseDownTime||(v._mouseDownTime=0),x.style.pointerEvents="all",x.onmousedown=_,i?(x._ontouchstart&&x.removeEventListener("touchstart",x._ontouchstart),x._ontouchstart=_,x.addEventListener("touchstart",_,{passive:!1})):x.ontouchstart=_;var b=t.clampFn||function(t,e,r){return Math.abs(t)<r&&(t=0),Math.abs(e)<r&&(e=0),[t,e]};function _(i){v._dragged=!1,v._dragging=!0;var o=h(i);e=o[0],r=o[1],d=i.target,p=i,g=2===i.buttons||i.ctrlKey,"undefined"==typeof i.clientX&&"undefined"==typeof i.clientY&&(i.clientX=e,i.clientY=r),(n=(new Date).getTime())-v._mouseDownTime<y?m+=1:(m=1,v._mouseDownTime=n),t.prepFn&&t.prepFn(i,e,r),a&&!g?(f=u()).style.cursor=window.getComputedStyle(x).cursor:a||(f=document,c=window.getComputedStyle(document.documentElement).cursor,document.documentElement.style.cursor=window.getComputedStyle(x).cursor),document.addEventListener("mouseup",k),document.addEventListener("touchend",k),!1!==t.dragmode&&(i.preventDefault(),document.addEventListener("mousemove",w),document.addEventListener("touchmove",w,{passive:!1}))}function w(n){n.preventDefault();var a=h(n),i=t.minDrag||s.MINDRAG,o=b(a[0]-e,a[1]-r,i),c=o[0],u=o[1];(c||u)&&(v._dragged=!0,l.unhover(v)),v._dragged&&t.moveFn&&!g&&(v._dragdata={element:x,dx:c,dy:u},t.moveFn(c,u))}function k(e){if(delete v._dragdata,!1!==t.dragmode&&(e.preventDefault(),document.removeEventListener("mousemove",w),document.removeEventListener("touchmove",w)),document.removeEventListener("mouseup",k),document.removeEventListener("touchend",k),a?o(f):c&&(f.documentElement.style.cursor=c,c=null),v._dragging){if(v._dragging=!1,(new Date).getTime()-v._mouseDownTime>y&&(m=Math.max(m-1,1)),v._dragged)t.doneFn&&t.doneFn();else if(t.clickFn&&t.clickFn(m,p),!g){var r;try{r=new MouseEvent("click",e)}catch(t){var n=h(e);(r=document.createEvent("MouseEvents")).initMouseEvent("click",e.bubbles,e.cancelable,e.view,e.detail,e.screenX,e.screenY,n[0],n[1],e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget)}d.dispatchEvent(r)}v._dragging=!1,v._dragged=!1}else v._dragged=!1}},l.coverSlip=u},{"../../lib":717,"../../plots/cartesian/constants":771,"./align":607,"./cursor":608,"./unhover":610,"has-hover":411,"has-passive-events":412,"mouse-event-offset":437}],610:[function(t,e,r){"use strict";var n=t("../../lib/events"),a=t("../../lib/throttle"),i=t("../../lib/dom").getGraphDiv,o=t("../fx/constants"),s=e.exports={};s.wrapped=function(t,e,r){(t=i(t))._fullLayout&&a.clear(t._fullLayout._uid+o.HOVERID),s.raw(t,e,r)},s.raw=function(t,e){var r=t._fullLayout,a=t._hoverdata;e||(e={}),e.target&&!1===n.triggerHandler(t,"plotly_beforehover",e)||(r._hoverlayer.selectAll("g").remove(),r._hoverlayer.selectAll("line").remove(),r._hoverlayer.selectAll("circle").remove(),t._hoverdata=void 0,e.target&&a&&t.emit("plotly_unhover",{event:e,points:a}))}},{"../../lib/dom":706,"../../lib/events":707,"../../lib/throttle":742,"../fx/constants":624}],611:[function(t,e,r){"use strict";r.dash={valType:"string",values:["solid","dot","dash","longdash","dashdot","longdashdot"],dflt:"solid",editType:"style"}},{}],612:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("tinycolor2"),o=t("../../registry"),s=t("../color"),l=t("../colorscale"),c=t("../../lib"),u=t("../../lib/svg_text_utils"),h=t("../../constants/xmlns_namespaces"),f=t("../../constants/alignment").LINE_SPACING,p=t("../../constants/interactions").DESELECTDIM,d=t("../../traces/scatter/subtypes"),g=t("../../traces/scatter/make_bubble_size_func"),v=t("../../components/fx/helpers").appendArrayPointValue,m=e.exports={};m.font=function(t,e,r,n){c.isPlainObject(e)&&(n=e.color,r=e.size,e=e.family),e&&t.style("font-family",e),r+1&&t.style("font-size",r+"px"),n&&t.call(s.fill,n)},m.setPosition=function(t,e,r){t.attr("x",e).attr("y",r)},m.setSize=function(t,e,r){t.attr("width",e).attr("height",r)},m.setRect=function(t,e,r,n,a){t.call(m.setPosition,e,r).call(m.setSize,n,a)},m.translatePoint=function(t,e,r,n){var i=r.c2p(t.x),o=n.c2p(t.y);return!!(a(i)&&a(o)&&e.node())&&("text"===e.node().nodeName?e.attr("x",i).attr("y",o):e.attr("transform","translate("+i+","+o+")"),!0)},m.translatePoints=function(t,e,r){t.each(function(t){var a=n.select(this);m.translatePoint(t,a,e,r)})},m.hideOutsideRangePoint=function(t,e,r,n,a,i){e.attr("display",r.isPtWithinRange(t,a)&&n.isPtWithinRange(t,i)?null:"none")},m.hideOutsideRangePoints=function(t,e){if(e._hasClipOnAxisFalse){var r=e.xaxis,a=e.yaxis;t.each(function(e){var i=e[0].trace,s=i.xcalendar,l=i.ycalendar,c=o.traceIs(i,"bar-like")?".bartext":".point,.textpoint";t.selectAll(c).each(function(t){m.hideOutsideRangePoint(t,n.select(this),r,a,s,l)})})}},m.crispRound=function(t,e,r){return e&&a(e)?t._context.staticPlot?e:e<1?1:Math.round(e):r||0},m.singleLineStyle=function(t,e,r,n,a){e.style("fill","none");var i=(((t||[])[0]||{}).trace||{}).line||{},o=r||i.width||0,l=a||i.dash||"";s.stroke(e,n||i.color),m.dashLine(e,l,o)},m.lineGroupStyle=function(t,e,r,a){t.style("fill","none").each(function(t){var i=(((t||[])[0]||{}).trace||{}).line||{},o=e||i.width||0,l=a||i.dash||"";n.select(this).call(s.stroke,r||i.color).call(m.dashLine,l,o)})},m.dashLine=function(t,e,r){r=+r||0,e=m.dashStyle(e,r),t.style({"stroke-dasharray":e,"stroke-width":r+"px"})},m.dashStyle=function(t,e){e=+e||1;var r=Math.max(e,3);return"solid"===t?t="":"dot"===t?t=r+"px,"+r+"px":"dash"===t?t=3*r+"px,"+3*r+"px":"longdash"===t?t=5*r+"px,"+5*r+"px":"dashdot"===t?t=3*r+"px,"+r+"px,"+r+"px,"+r+"px":"longdashdot"===t&&(t=5*r+"px,"+2*r+"px,"+r+"px,"+2*r+"px"),t},m.singleFillStyle=function(t){var e=(((n.select(t.node()).data()[0]||[])[0]||{}).trace||{}).fillcolor;e&&t.call(s.fill,e)},m.fillGroupStyle=function(t){t.style("stroke-width",0).each(function(t){var e=n.select(this);t[0].trace&&e.call(s.fill,t[0].trace.fillcolor)})};var y=t("./symbol_defs");m.symbolNames=[],m.symbolFuncs=[],m.symbolNeedLines={},m.symbolNoDot={},m.symbolNoFill={},m.symbolList=[],Object.keys(y).forEach(function(t){var e=y[t],r=e.n;m.symbolList.push(r,t,r+100,t+"-open"),m.symbolNames[r]=t,m.symbolFuncs[r]=e.f,e.needLine&&(m.symbolNeedLines[r]=!0),e.noDot?m.symbolNoDot[r]=!0:m.symbolList.push(r+200,t+"-dot",r+300,t+"-open-dot"),e.noFill&&(m.symbolNoFill[r]=!0)});var x=m.symbolNames.length,b="M0,0.5L0.5,0L0,-0.5L-0.5,0Z";function _(t,e){var r=t%100;return m.symbolFuncs[r](e)+(t>=200?b:"")}m.symbolNumber=function(t){if("string"==typeof t){var e=0;t.indexOf("-open")>0&&(e=100,t=t.replace("-open","")),t.indexOf("-dot")>0&&(e+=200,t=t.replace("-dot","")),(t=m.symbolNames.indexOf(t))>=0&&(t+=e)}return t%100>=x||t>=400?0:Math.floor(Math.max(t,0))};var w={x1:1,x2:0,y1:0,y2:0},k={x1:0,x2:0,y1:1,y2:0},T=n.format("~.1f"),M={radial:{node:"radialGradient"},radialreversed:{node:"radialGradient",reversed:!0},horizontal:{node:"linearGradient",attrs:w},horizontalreversed:{node:"linearGradient",attrs:w,reversed:!0},vertical:{node:"linearGradient",attrs:k},verticalreversed:{node:"linearGradient",attrs:k,reversed:!0}};m.gradient=function(t,e,r,a,o,l){for(var u=o.length,h=M[a],f=new Array(u),p=0;p<u;p++)h.reversed?f[u-1-p]=[T(100*(1-o[p][0])),o[p][1]]:f[p]=[T(100*o[p][0]),o[p][1]];var d=e._fullLayout,g="g"+d._uid+"-"+r,v=d._defs.select(".gradients").selectAll("#"+g).data([a+f.join(";")],c.identity);v.exit().remove(),v.enter().append(h.node).each(function(){var t=n.select(this);h.attrs&&t.attr(h.attrs),t.attr("id",g);var e=t.selectAll("stop").data(f);e.exit().remove(),e.enter().append("stop"),e.each(function(t){var e=i(t[1]);n.select(this).attr({offset:t[0]+"%","stop-color":s.tinyRGB(e),"stop-opacity":e.getAlpha()})})}),t.style(l,D(g,e)).style(l+"-opacity",null);var m=function(t){return"."+t.attr("class").replace(/\s/g,".")},y=m(n.select(t.node().parentNode))+">"+m(t);d._gradientUrlQueryParts[y]=1},m.initGradients=function(t){var e=t._fullLayout;c.ensureSingle(e._defs,"g","gradients").selectAll("linearGradient,radialGradient").remove(),e._gradientUrlQueryParts={}},m.pointStyle=function(t,e,r){if(t.size()){var a=m.makePointStyleFns(e);t.each(function(t){m.singlePointStyle(t,n.select(this),e,a,r)})}},m.singlePointStyle=function(t,e,r,n,a){var i=r.marker,o=i.line;if(e.style("opacity",n.selectedOpacityFn?n.selectedOpacityFn(t):void 0===t.mo?i.opacity:t.mo),n.ms2mrc){var l;l="various"===t.ms||"various"===i.size?3:n.ms2mrc(t.ms),t.mrc=l,n.selectedSizeFn&&(l=t.mrc=n.selectedSizeFn(t));var u=m.symbolNumber(t.mx||i.symbol)||0;t.om=u%200>=100,e.attr("d",_(u,l))}var h,f,p,d=!1;if(t.so)p=o.outlierwidth,f=o.outliercolor,h=i.outliercolor;else{var g=(o||{}).width;p=(t.mlw+1||g+1||(t.trace?(t.trace.marker.line||{}).width:0)+1)-1||0,f="mlc"in t?t.mlcc=n.lineScale(t.mlc):c.isArrayOrTypedArray(o.color)?s.defaultLine:o.color,c.isArrayOrTypedArray(i.color)&&(h=s.defaultLine,d=!0),h="mc"in t?t.mcc=n.markerScale(t.mc):i.color||"rgba(0,0,0,0)",n.selectedColorFn&&(h=n.selectedColorFn(t))}if(t.om)e.call(s.stroke,h).style({"stroke-width":(p||1)+"px",fill:"none"});else{e.style("stroke-width",(t.isBlank?0:p)+"px");var v=i.gradient,y=t.mgt;if(y?d=!0:y=v&&v.type,Array.isArray(y)&&(y=y[0],M[y]||(y=0)),y&&"none"!==y){var x=t.mgc;x?d=!0:x=v.color;var b=r.uid;d&&(b+="-"+t.i),m.gradient(e,a,b,y,[[0,x],[1,h]],"fill")}else s.fill(e,h);p&&s.stroke(e,f)}},m.makePointStyleFns=function(t){var e={},r=t.marker;return e.markerScale=m.tryColorscale(r,""),e.lineScale=m.tryColorscale(r,"line"),o.traceIs(t,"symbols")&&(e.ms2mrc=d.isBubble(t)?g(t):function(){return(r.size||6)/2}),t.selectedpoints&&c.extendFlat(e,m.makeSelectedPointStyleFns(t)),e},m.makeSelectedPointStyleFns=function(t){var e={},r=t.selected||{},n=t.unselected||{},a=t.marker||{},i=r.marker||{},s=n.marker||{},l=a.opacity,u=i.opacity,h=s.opacity,f=void 0!==u,d=void 0!==h;(c.isArrayOrTypedArray(l)||f||d)&&(e.selectedOpacityFn=function(t){var e=void 0===t.mo?a.opacity:t.mo;return t.selected?f?u:e:d?h:p*e});var g=a.color,v=i.color,m=s.color;(v||m)&&(e.selectedColorFn=function(t){var e=t.mcc||g;return t.selected?v||e:m||e});var y=a.size,x=i.size,b=s.size,_=void 0!==x,w=void 0!==b;return o.traceIs(t,"symbols")&&(_||w)&&(e.selectedSizeFn=function(t){var e=t.mrc||y/2;return t.selected?_?x/2:e:w?b/2:e}),e},m.makeSelectedTextStyleFns=function(t){var e={},r=t.selected||{},n=t.unselected||{},a=t.textfont||{},i=r.textfont||{},o=n.textfont||{},l=a.color,c=i.color,u=o.color;return e.selectedTextColorFn=function(t){var e=t.tc||l;return t.selected?c||e:u||(c?e:s.addOpacity(e,p))},e},m.selectedPointStyle=function(t,e){if(t.size()&&e.selectedpoints){var r=m.makeSelectedPointStyleFns(e),a=e.marker||{},i=[];r.selectedOpacityFn&&i.push(function(t,e){t.style("opacity",r.selectedOpacityFn(e))}),r.selectedColorFn&&i.push(function(t,e){s.fill(t,r.selectedColorFn(e))}),r.selectedSizeFn&&i.push(function(t,e){var n=e.mx||a.symbol||0,i=r.selectedSizeFn(e);t.attr("d",_(m.symbolNumber(n),i)),e.mrc2=i}),i.length&&t.each(function(t){for(var e=n.select(this),r=0;r<i.length;r++)i[r](e,t)})}},m.tryColorscale=function(t,e){var r=e?c.nestedProperty(t,e).get():t;if(r){var n=r.color;if((r.colorscale||r._colorAx)&&c.isArrayOrTypedArray(n))return l.makeColorScaleFuncFromTrace(r)}return c.identity};var A={start:1,end:-1,middle:0,bottom:1,top:-1};function S(t,e,r,a){var i=n.select(t.node().parentNode),o=-1!==e.indexOf("top")?"top":-1!==e.indexOf("bottom")?"bottom":"middle",s=-1!==e.indexOf("left")?"end":-1!==e.indexOf("right")?"start":"middle",l=a?a/.8+1:0,c=(u.lineCount(t)-1)*f+1,h=A[s]*l,p=.75*r+A[o]*l+(A[o]-1)*c*r/2;t.attr("text-anchor",s),i.attr("transform","translate("+h+","+p+")")}function E(t,e){var r=t.ts||e.textfont.size;return a(r)&&r>0?r:0}m.textPointStyle=function(t,e,r){if(t.size()){var a;if(e.selectedpoints){var i=m.makeSelectedTextStyleFns(e);a=i.selectedTextColorFn}var o=e.texttemplate,s=r._fullLayout;t.each(function(t){var i=n.select(this),l=o?c.extractOption(t,e,"txt","texttemplate"):c.extractOption(t,e,"tx","text");if(l||0===l){if(o){var h=e._module.formatLabels?e._module.formatLabels(t,e,s):{},f={};v(f,e,t.i);var p=e._meta||{};l=c.texttemplateString(l,h,s._d3locale,f,t,p)}var d=t.tp||e.textposition,g=E(t,e),y=a?a(t):t.tc||e.textfont.color;i.call(m.font,t.tf||e.textfont.family,g,y).text(l).call(u.convertToTspans,r).call(S,d,g,t.mrc)}else i.remove()})}},m.selectedTextStyle=function(t,e){if(t.size()&&e.selectedpoints){var r=m.makeSelectedTextStyleFns(e);t.each(function(t){var a=n.select(this),i=r.selectedTextColorFn(t),o=t.tp||e.textposition,l=E(t,e);s.fill(a,i),S(a,o,l,t.mrc2||t.mrc)})}};var L=.5;function C(t,e,r,a){var i=t[0]-e[0],o=t[1]-e[1],s=r[0]-e[0],l=r[1]-e[1],c=Math.pow(i*i+o*o,L/2),u=Math.pow(s*s+l*l,L/2),h=(u*u*i-c*c*s)*a,f=(u*u*o-c*c*l)*a,p=3*u*(c+u),d=3*c*(c+u);return[[n.round(e[0]+(p&&h/p),2),n.round(e[1]+(p&&f/p),2)],[n.round(e[0]-(d&&h/d),2),n.round(e[1]-(d&&f/d),2)]]}m.smoothopen=function(t,e){if(t.length<3)return"M"+t.join("L");var r,n="M"+t[0],a=[];for(r=1;r<t.length-1;r++)a.push(C(t[r-1],t[r],t[r+1],e));for(n+="Q"+a[0][0]+" "+t[1],r=2;r<t.length-1;r++)n+="C"+a[r-2][1]+" "+a[r-1][0]+" "+t[r];return n+="Q"+a[t.length-3][1]+" "+t[t.length-1]},m.smoothclosed=function(t,e){if(t.length<3)return"M"+t.join("L")+"Z";var r,n="M"+t[0],a=t.length-1,i=[C(t[a],t[0],t[1],e)];for(r=1;r<a;r++)i.push(C(t[r-1],t[r],t[r+1],e));for(i.push(C(t[a-1],t[a],t[0],e)),r=1;r<=a;r++)n+="C"+i[r-1][1]+" "+i[r][0]+" "+t[r];return n+="C"+i[a][1]+" "+i[0][0]+" "+t[0]+"Z"};var P={hv:function(t,e){return"H"+n.round(e[0],2)+"V"+n.round(e[1],2)},vh:function(t,e){return"V"+n.round(e[1],2)+"H"+n.round(e[0],2)},hvh:function(t,e){return"H"+n.round((t[0]+e[0])/2,2)+"V"+n.round(e[1],2)+"H"+n.round(e[0],2)},vhv:function(t,e){return"V"+n.round((t[1]+e[1])/2,2)+"H"+n.round(e[0],2)+"V"+n.round(e[1],2)}},O=function(t,e){return"L"+n.round(e[0],2)+","+n.round(e[1],2)};m.steps=function(t){var e=P[t]||O;return function(t){for(var r="M"+n.round(t[0][0],2)+","+n.round(t[0][1],2),a=1;a<t.length;a++)r+=e(t[a-1],t[a]);return r}},m.makeTester=function(){var t=c.ensureSingleById(n.select("body"),"svg","js-plotly-tester",function(t){t.attr(h.svgAttrs).style({position:"absolute",left:"-10000px",top:"-10000px",width:"9000px",height:"9000px","z-index":"1"})}),e=c.ensureSingle(t,"path","js-reference-point",function(t){t.attr("d","M0,0H1V1H0Z").style({"stroke-width":0,fill:"black"})});m.tester=t,m.testref=e},m.savedBBoxes={};var z=0;function I(t){var e=t.getAttribute("data-unformatted");if(null!==e)return e+t.getAttribute("data-math")+t.getAttribute("text-anchor")+t.getAttribute("style")}function D(t,e){if(!t)return null;var r=e._context;return"url('"+(r._exportedPlot?"":r._baseUrl||"")+"#"+t+"')"}m.bBox=function(t,e,r){var a,i,o;if(r||(r=I(t)),r){if(a=m.savedBBoxes[r])return c.extendFlat({},a)}else if(1===t.childNodes.length){var s=t.childNodes[0];if(r=I(s)){var l=+s.getAttribute("x")||0,h=+s.getAttribute("y")||0,f=s.getAttribute("transform");if(!f){var p=m.bBox(s,!1,r);return l&&(p.left+=l,p.right+=l),h&&(p.top+=h,p.bottom+=h),p}if(r+="~"+l+"~"+h+"~"+f,a=m.savedBBoxes[r])return c.extendFlat({},a)}}e?i=t:(o=m.tester.node(),i=t.cloneNode(!0),o.appendChild(i)),n.select(i).attr("transform",null).call(u.positionText,0,0);var d=i.getBoundingClientRect(),g=m.testref.node().getBoundingClientRect();e||o.removeChild(i);var v={height:d.height,width:d.width,left:d.left-g.left,top:d.top-g.top,right:d.right-g.left,bottom:d.bottom-g.top};return z>=1e4&&(m.savedBBoxes={},z=0),r&&(m.savedBBoxes[r]=v),z++,c.extendFlat({},v)},m.setClipUrl=function(t,e,r){t.attr("clip-path",D(e,r))},m.getTranslate=function(t){var e=(t[t.attr?"attr":"getAttribute"]("transform")||"").replace(/.*\btranslate\((-?\d*\.?\d*)[^-\d]*(-?\d*\.?\d*)[^\d].*/,function(t,e,r){return[e,r].join(" ")}).split(" ");return{x:+e[0]||0,y:+e[1]||0}},m.setTranslate=function(t,e,r){var n=t.attr?"attr":"getAttribute",a=t.attr?"attr":"setAttribute",i=t[n]("transform")||"";return e=e||0,r=r||0,i=i.replace(/(\btranslate\(.*?\);?)/,"").trim(),i=(i+=" translate("+e+", "+r+")").trim(),t[a]("transform",i),i},m.getScale=function(t){var e=(t[t.attr?"attr":"getAttribute"]("transform")||"").replace(/.*\bscale\((\d*\.?\d*)[^\d]*(\d*\.?\d*)[^\d].*/,function(t,e,r){return[e,r].join(" ")}).split(" ");return{x:+e[0]||1,y:+e[1]||1}},m.setScale=function(t,e,r){var n=t.attr?"attr":"getAttribute",a=t.attr?"attr":"setAttribute",i=t[n]("transform")||"";return e=e||1,r=r||1,i=i.replace(/(\bscale\(.*?\);?)/,"").trim(),i=(i+=" scale("+e+", "+r+")").trim(),t[a]("transform",i),i};var R=/\s*sc.*/;m.setPointGroupScale=function(t,e,r){if(e=e||1,r=r||1,t){var n=1===e&&1===r?"":" scale("+e+","+r+")";t.each(function(){var t=(this.getAttribute("transform")||"").replace(R,"");t=(t+=n).trim(),this.setAttribute("transform",t)})}};var F=/translate\([^)]*\)\s*$/;m.setTextPointsScale=function(t,e,r){t&&t.each(function(){var t,a=n.select(this),i=a.select("text");if(i.node()){var o=parseFloat(i.attr("x")||0),s=parseFloat(i.attr("y")||0),l=(a.attr("transform")||"").match(F);t=1===e&&1===r?[]:["translate("+o+","+s+")","scale("+e+","+r+")","translate("+-o+","+-s+")"],l&&t.push(l),a.attr("transform",t.join(" "))}})}},{"../../components/fx/helpers":626,"../../constants/alignment":686,"../../constants/interactions":692,"../../constants/xmlns_namespaces":694,"../../lib":717,"../../lib/svg_text_utils":741,"../../registry":846,"../../traces/scatter/make_bubble_size_func":1137,"../../traces/scatter/subtypes":1144,"../color":591,"../colorscale":603,"./symbol_defs":613,d3:165,"fast-isnumeric":228,tinycolor2:535}],613:[function(t,e,r){"use strict";var n=t("d3");e.exports={circle:{n:0,f:function(t){var e=n.round(t,2);return"M"+e+",0A"+e+","+e+" 0 1,1 0,-"+e+"A"+e+","+e+" 0 0,1 "+e+",0Z"}},square:{n:1,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"H-"+e+"V-"+e+"H"+e+"Z"}},diamond:{n:2,f:function(t){var e=n.round(1.3*t,2);return"M"+e+",0L0,"+e+"L-"+e+",0L0,-"+e+"Z"}},cross:{n:3,f:function(t){var e=n.round(.4*t,2),r=n.round(1.2*t,2);return"M"+r+","+e+"H"+e+"V"+r+"H-"+e+"V"+e+"H-"+r+"V-"+e+"H-"+e+"V-"+r+"H"+e+"V-"+e+"H"+r+"Z"}},x:{n:4,f:function(t){var e=n.round(.8*t/Math.sqrt(2),2),r="l"+e+","+e,a="l"+e+",-"+e,i="l-"+e+",-"+e,o="l-"+e+","+e;return"M0,"+e+r+a+i+a+i+o+i+o+r+o+r+"Z"}},"triangle-up":{n:5,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return"M-"+e+","+n.round(t/2,2)+"H"+e+"L0,-"+n.round(t,2)+"Z"}},"triangle-down":{n:6,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return"M-"+e+",-"+n.round(t/2,2)+"H"+e+"L0,"+n.round(t,2)+"Z"}},"triangle-left":{n:7,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return"M"+n.round(t/2,2)+",-"+e+"V"+e+"L-"+n.round(t,2)+",0Z"}},"triangle-right":{n:8,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return"M-"+n.round(t/2,2)+",-"+e+"V"+e+"L"+n.round(t,2)+",0Z"}},"triangle-ne":{n:9,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return"M-"+r+",-"+e+"H"+e+"V"+r+"Z"}},"triangle-se":{n:10,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return"M"+e+",-"+r+"V"+e+"H-"+r+"Z"}},"triangle-sw":{n:11,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return"M"+r+","+e+"H-"+e+"V-"+r+"Z"}},"triangle-nw":{n:12,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return"M-"+e+","+r+"V-"+e+"H"+r+"Z"}},pentagon:{n:13,f:function(t){var e=n.round(.951*t,2),r=n.round(.588*t,2),a=n.round(-t,2),i=n.round(-.309*t,2);return"M"+e+","+i+"L"+r+","+n.round(.809*t,2)+"H-"+r+"L-"+e+","+i+"L0,"+a+"Z"}},hexagon:{n:14,f:function(t){var e=n.round(t,2),r=n.round(t/2,2),a=n.round(t*Math.sqrt(3)/2,2);return"M"+a+",-"+r+"V"+r+"L0,"+e+"L-"+a+","+r+"V-"+r+"L0,-"+e+"Z"}},hexagon2:{n:15,f:function(t){var e=n.round(t,2),r=n.round(t/2,2),a=n.round(t*Math.sqrt(3)/2,2);return"M-"+r+","+a+"H"+r+"L"+e+",0L"+r+",-"+a+"H-"+r+"L-"+e+",0Z"}},octagon:{n:16,f:function(t){var e=n.round(.924*t,2),r=n.round(.383*t,2);return"M-"+r+",-"+e+"H"+r+"L"+e+",-"+r+"V"+r+"L"+r+","+e+"H-"+r+"L-"+e+","+r+"V-"+r+"Z"}},star:{n:17,f:function(t){var e=1.4*t,r=n.round(.225*e,2),a=n.round(.951*e,2),i=n.round(.363*e,2),o=n.round(.588*e,2),s=n.round(-e,2),l=n.round(-.309*e,2),c=n.round(.118*e,2),u=n.round(.809*e,2);return"M"+r+","+l+"H"+a+"L"+i+","+c+"L"+o+","+u+"L0,"+n.round(.382*e,2)+"L-"+o+","+u+"L-"+i+","+c+"L-"+a+","+l+"H-"+r+"L0,"+s+"Z"}},hexagram:{n:18,f:function(t){var e=n.round(.66*t,2),r=n.round(.38*t,2),a=n.round(.76*t,2);return"M-"+a+",0l-"+r+",-"+e+"h"+a+"l"+r+",-"+e+"l"+r+","+e+"h"+a+"l-"+r+","+e+"l"+r+","+e+"h-"+a+"l-"+r+","+e+"l-"+r+",-"+e+"h-"+a+"Z"}},"star-triangle-up":{n:19,f:function(t){var e=n.round(t*Math.sqrt(3)*.8,2),r=n.round(.8*t,2),a=n.round(1.6*t,2),i=n.round(4*t,2),o="A "+i+","+i+" 0 0 1 ";return"M-"+e+","+r+o+e+","+r+o+"0,-"+a+o+"-"+e+","+r+"Z"}},"star-triangle-down":{n:20,f:function(t){var e=n.round(t*Math.sqrt(3)*.8,2),r=n.round(.8*t,2),a=n.round(1.6*t,2),i=n.round(4*t,2),o="A "+i+","+i+" 0 0 1 ";return"M"+e+",-"+r+o+"-"+e+",-"+r+o+"0,"+a+o+e+",-"+r+"Z"}},"star-square":{n:21,f:function(t){var e=n.round(1.1*t,2),r=n.round(2*t,2),a="A "+r+","+r+" 0 0 1 ";return"M-"+e+",-"+e+a+"-"+e+","+e+a+e+","+e+a+e+",-"+e+a+"-"+e+",-"+e+"Z"}},"star-diamond":{n:22,f:function(t){var e=n.round(1.4*t,2),r=n.round(1.9*t,2),a="A "+r+","+r+" 0 0 1 ";return"M-"+e+",0"+a+"0,"+e+a+e+",0"+a+"0,-"+e+a+"-"+e+",0Z"}},"diamond-tall":{n:23,f:function(t){var e=n.round(.7*t,2),r=n.round(1.4*t,2);return"M0,"+r+"L"+e+",0L0,-"+r+"L-"+e+",0Z"}},"diamond-wide":{n:24,f:function(t){var e=n.round(1.4*t,2),r=n.round(.7*t,2);return"M0,"+r+"L"+e+",0L0,-"+r+"L-"+e+",0Z"}},hourglass:{n:25,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"H-"+e+"L"+e+",-"+e+"H-"+e+"Z"},noDot:!0},bowtie:{n:26,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"V-"+e+"L-"+e+","+e+"V-"+e+"Z"},noDot:!0},"circle-cross":{n:27,f:function(t){var e=n.round(t,2);return"M0,"+e+"V-"+e+"M"+e+",0H-"+e+"M"+e+",0A"+e+","+e+" 0 1,1 0,-"+e+"A"+e+","+e+" 0 0,1 "+e+",0Z"},needLine:!0,noDot:!0},"circle-x":{n:28,f:function(t){var e=n.round(t,2),r=n.round(t/Math.sqrt(2),2);return"M"+r+","+r+"L-"+r+",-"+r+"M"+r+",-"+r+"L-"+r+","+r+"M"+e+",0A"+e+","+e+" 0 1,1 0,-"+e+"A"+e+","+e+" 0 0,1 "+e+",0Z"},needLine:!0,noDot:!0},"square-cross":{n:29,f:function(t){var e=n.round(t,2);return"M0,"+e+"V-"+e+"M"+e+",0H-"+e+"M"+e+","+e+"H-"+e+"V-"+e+"H"+e+"Z"},needLine:!0,noDot:!0},"square-x":{n:30,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"L-"+e+",-"+e+"M"+e+",-"+e+"L-"+e+","+e+"M"+e+","+e+"H-"+e+"V-"+e+"H"+e+"Z"},needLine:!0,noDot:!0},"diamond-cross":{n:31,f:function(t){var e=n.round(1.3*t,2);return"M"+e+",0L0,"+e+"L-"+e+",0L0,-"+e+"ZM0,-"+e+"V"+e+"M-"+e+",0H"+e},needLine:!0,noDot:!0},"diamond-x":{n:32,f:function(t){var e=n.round(1.3*t,2),r=n.round(.65*t,2);return"M"+e+",0L0,"+e+"L-"+e+",0L0,-"+e+"ZM-"+r+",-"+r+"L"+r+","+r+"M-"+r+","+r+"L"+r+",-"+r},needLine:!0,noDot:!0},"cross-thin":{n:33,f:function(t){var e=n.round(1.4*t,2);return"M0,"+e+"V-"+e+"M"+e+",0H-"+e},needLine:!0,noDot:!0,noFill:!0},"x-thin":{n:34,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"L-"+e+",-"+e+"M"+e+",-"+e+"L-"+e+","+e},needLine:!0,noDot:!0,noFill:!0},asterisk:{n:35,f:function(t){var e=n.round(1.2*t,2),r=n.round(.85*t,2);return"M0,"+e+"V-"+e+"M"+e+",0H-"+e+"M"+r+","+r+"L-"+r+",-"+r+"M"+r+",-"+r+"L-"+r+","+r},needLine:!0,noDot:!0,noFill:!0},hash:{n:36,f:function(t){var e=n.round(t/2,2),r=n.round(t,2);return"M"+e+","+r+"V-"+r+"m-"+r+",0V"+r+"M"+r+","+e+"H-"+r+"m0,-"+r+"H"+r},needLine:!0,noFill:!0},"y-up":{n:37,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),a=n.round(.8*t,2);return"M-"+e+","+a+"L0,0M"+e+","+a+"L0,0M0,-"+r+"L0,0"},needLine:!0,noDot:!0,noFill:!0},"y-down":{n:38,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),a=n.round(.8*t,2);return"M-"+e+",-"+a+"L0,0M"+e+",-"+a+"L0,0M0,"+r+"L0,0"},needLine:!0,noDot:!0,noFill:!0},"y-left":{n:39,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),a=n.round(.8*t,2);return"M"+a+","+e+"L0,0M"+a+",-"+e+"L0,0M-"+r+",0L0,0"},needLine:!0,noDot:!0,noFill:!0},"y-right":{n:40,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),a=n.round(.8*t,2);return"M-"+a+","+e+"L0,0M-"+a+",-"+e+"L0,0M"+r+",0L0,0"},needLine:!0,noDot:!0,noFill:!0},"line-ew":{n:41,f:function(t){var e=n.round(1.4*t,2);return"M"+e+",0H-"+e},needLine:!0,noDot:!0,noFill:!0},"line-ns":{n:42,f:function(t){var e=n.round(1.4*t,2);return"M0,"+e+"V-"+e},needLine:!0,noDot:!0,noFill:!0},"line-ne":{n:43,f:function(t){var e=n.round(t,2);return"M"+e+",-"+e+"L-"+e+","+e},needLine:!0,noDot:!0,noFill:!0},"line-nw":{n:44,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"L-"+e+",-"+e},needLine:!0,noDot:!0,noFill:!0}}},{d3:165}],614:[function(t,e,r){"use strict";e.exports={visible:{valType:"boolean",editType:"calc"},type:{valType:"enumerated",values:["percent","constant","sqrt","data"],editType:"calc"},symmetric:{valType:"boolean",editType:"calc"},array:{valType:"data_array",editType:"calc"},arrayminus:{valType:"data_array",editType:"calc"},value:{valType:"number",min:0,dflt:10,editType:"calc"},valueminus:{valType:"number",min:0,dflt:10,editType:"calc"},traceref:{valType:"integer",min:0,dflt:0,editType:"style"},tracerefminus:{valType:"integer",min:0,dflt:0,editType:"style"},copy_ystyle:{valType:"boolean",editType:"plot"},copy_zstyle:{valType:"boolean",editType:"style"},color:{valType:"color",editType:"style"},thickness:{valType:"number",min:0,dflt:2,editType:"style"},width:{valType:"number",min:0,editType:"plot"},editType:"calc",_deprecated:{opacity:{valType:"number",editType:"style"}}}},{}],615:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../registry"),i=t("../../plots/cartesian/axes"),o=t("../../lib"),s=t("./compute_error");function l(t,e,r,a){var l=e["error_"+a]||{},c=[];if(l.visible&&-1!==["linear","log"].indexOf(r.type)){for(var u=s(l),h=0;h<t.length;h++){var f=t[h],p=f.i;if(void 0===p)p=h;else if(null===p)continue;var d=f[a];if(n(r.c2l(d))){var g=u(d,p);if(n(g[0])&&n(g[1])){var v=f[a+"s"]=d-g[0],m=f[a+"h"]=d+g[1];c.push(v,m)}}}var y=r._id,x=e._extremes[y],b=i.findExtremes(r,c,o.extendFlat({tozero:x.opts.tozero},{padded:!0}));x.min=x.min.concat(b.min),x.max=x.max.concat(b.max)}}e.exports=function(t){for(var e=t.calcdata,r=0;r<e.length;r++){var n=e[r],o=n[0].trace;if(!0===o.visible&&a.traceIs(o,"errorBarsOK")){var s=i.getFromId(t,o.xaxis),c=i.getFromId(t,o.yaxis);l(n,o,s,"x"),l(n,o,c,"y")}}}},{"../../lib":717,"../../plots/cartesian/axes":765,"../../registry":846,"./compute_error":616,"fast-isnumeric":228}],616:[function(t,e,r){"use strict";function n(t,e){return"percent"===t?function(t){return Math.abs(t*e/100)}:"constant"===t?function(){return Math.abs(e)}:"sqrt"===t?function(t){return Math.sqrt(Math.abs(t))}:void 0}e.exports=function(t){var e=t.type,r=t.symmetric;if("data"===e){var a=t.array||[];if(r)return function(t,e){var r=+a[e];return[r,r]};var i=t.arrayminus||[];return function(t,e){var r=+a[e],n=+i[e];return isNaN(r)&&isNaN(n)?[NaN,NaN]:[n||0,r||0]}}var o=n(e,t.value),s=n(e,t.valueminus);return r||void 0===t.valueminus?function(t){var e=o(t);return[e,e]}:function(t){return[s(t),o(t)]}}},{}],617:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../registry"),i=t("../../lib"),o=t("../../plot_api/plot_template"),s=t("./attributes");e.exports=function(t,e,r,l){var c="error_"+l.axis,u=o.newContainer(e,c),h=t[c]||{};function f(t,e){return i.coerce(h,u,s,t,e)}if(!1!==f("visible",void 0!==h.array||void 0!==h.value||"sqrt"===h.type)){var p=f("type","array"in h?"data":"percent"),d=!0;"sqrt"!==p&&(d=f("symmetric",!(("data"===p?"arrayminus":"valueminus")in h))),"data"===p?(f("array"),f("traceref"),d||(f("arrayminus"),f("tracerefminus"))):"percent"!==p&&"constant"!==p||(f("value"),d||f("valueminus"));var g="copy_"+l.inherit+"style";if(l.inherit)(e["error_"+l.inherit]||{}).visible&&f(g,!(h.color||n(h.thickness)||n(h.width)));l.inherit&&u[g]||(f("color",r),f("thickness"),f("width",a.traceIs(e,"gl3d")?0:4))}}},{"../../lib":717,"../../plot_api/plot_template":755,"../../registry":846,"./attributes":614,"fast-isnumeric":228}],618:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plot_api/edit_types").overrideAll,i=t("./attributes"),o={error_x:n.extendFlat({},i),error_y:n.extendFlat({},i)};delete o.error_x.copy_zstyle,delete o.error_y.copy_zstyle,delete o.error_y.copy_ystyle;var s={error_x:n.extendFlat({},i),error_y:n.extendFlat({},i),error_z:n.extendFlat({},i)};delete s.error_x.copy_ystyle,delete s.error_y.copy_ystyle,delete s.error_z.copy_ystyle,delete s.error_z.copy_zstyle,e.exports={moduleType:"component",name:"errorbars",schema:{traces:{scatter:o,bar:o,histogram:o,scatter3d:a(s,"calc","nested"),scattergl:a(o,"calc","nested")}},supplyDefaults:t("./defaults"),calc:t("./calc"),makeComputeError:t("./compute_error"),plot:t("./plot"),style:t("./style"),hoverInfo:function(t,e,r){(e.error_y||{}).visible&&(r.yerr=t.yh-t.y,e.error_y.symmetric||(r.yerrneg=t.y-t.ys));(e.error_x||{}).visible&&(r.xerr=t.xh-t.x,e.error_x.symmetric||(r.xerrneg=t.x-t.xs))}}},{"../../lib":717,"../../plot_api/edit_types":748,"./attributes":614,"./calc":615,"./compute_error":616,"./defaults":617,"./plot":619,"./style":620}],619:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../drawing"),o=t("../../traces/scatter/subtypes");e.exports=function(t,e,r,s){var l=r.xaxis,c=r.yaxis,u=s&&s.duration>0;e.each(function(e){var h,f=e[0].trace,p=f.error_x||{},d=f.error_y||{};f.ids&&(h=function(t){return t.id});var g=o.hasMarkers(f)&&f.marker.maxdisplayed>0;d.visible||p.visible||(e=[]);var v=n.select(this).selectAll("g.errorbar").data(e,h);if(v.exit().remove(),e.length){p.visible||v.selectAll("path.xerror").remove(),d.visible||v.selectAll("path.yerror").remove(),v.style("opacity",1);var m=v.enter().append("g").classed("errorbar",!0);u&&m.style("opacity",0).transition().duration(s.duration).style("opacity",1),i.setClipUrl(v,r.layerClipId,t),v.each(function(t){var e=n.select(this),r=function(t,e,r){var n={x:e.c2p(t.x),y:r.c2p(t.y)};void 0!==t.yh&&(n.yh=r.c2p(t.yh),n.ys=r.c2p(t.ys),a(n.ys)||(n.noYS=!0,n.ys=r.c2p(t.ys,!0)));void 0!==t.xh&&(n.xh=e.c2p(t.xh),n.xs=e.c2p(t.xs),a(n.xs)||(n.noXS=!0,n.xs=e.c2p(t.xs,!0)));return n}(t,l,c);if(!g||t.vis){var i,o=e.select("path.yerror");if(d.visible&&a(r.x)&&a(r.yh)&&a(r.ys)){var h=d.width;i="M"+(r.x-h)+","+r.yh+"h"+2*h+"m-"+h+",0V"+r.ys,r.noYS||(i+="m-"+h+",0h"+2*h),!o.size()?o=e.append("path").style("vector-effect","non-scaling-stroke").classed("yerror",!0):u&&(o=o.transition().duration(s.duration).ease(s.easing)),o.attr("d",i)}else o.remove();var f=e.select("path.xerror");if(p.visible&&a(r.y)&&a(r.xh)&&a(r.xs)){var v=(p.copy_ystyle?d:p).width;i="M"+r.xh+","+(r.y-v)+"v"+2*v+"m0,-"+v+"H"+r.xs,r.noXS||(i+="m0,-"+v+"v"+2*v),!f.size()?f=e.append("path").style("vector-effect","non-scaling-stroke").classed("xerror",!0):u&&(f=f.transition().duration(s.duration).ease(s.easing)),f.attr("d",i)}else f.remove()}})}})}},{"../../traces/scatter/subtypes":1144,"../drawing":612,d3:165,"fast-isnumeric":228}],620:[function(t,e,r){"use strict";var n=t("d3"),a=t("../color");e.exports=function(t){t.each(function(t){var e=t[0].trace,r=e.error_y||{},i=e.error_x||{},o=n.select(this);o.selectAll("path.yerror").style("stroke-width",r.thickness+"px").call(a.stroke,r.color),i.copy_ystyle&&(i=r),o.selectAll("path.xerror").style("stroke-width",i.thickness+"px").call(a.stroke,i.color)})}},{"../color":591,d3:165}],621:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),a=t("./layout_attributes").hoverlabel,i=t("../../lib/extend").extendFlat;e.exports={hoverlabel:{bgcolor:i({},a.bgcolor,{arrayOk:!0}),bordercolor:i({},a.bordercolor,{arrayOk:!0}),font:n({arrayOk:!0,editType:"none"}),align:i({},a.align,{arrayOk:!0}),namelength:i({},a.namelength,{arrayOk:!0}),editType:"none"}}},{"../../lib/extend":708,"../../plots/font_attributes":791,"./layout_attributes":631}],622:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../registry");function i(t,e,r,a){a=a||n.identity,Array.isArray(t)&&(e[0][r]=a(t))}e.exports=function(t){var e=t.calcdata,r=t._fullLayout;function o(t){return function(e){return n.coerceHoverinfo({hoverinfo:e},{_module:t._module},r)}}for(var s=0;s<e.length;s++){var l=e[s],c=l[0].trace;if(!a.traceIs(c,"pie-like")){var u=a.traceIs(c,"2dMap")?i:n.fillArray;u(c.hoverinfo,l,"hi",o(c)),c.hovertemplate&&u(c.hovertemplate,l,"ht"),c.hoverlabel&&(u(c.hoverlabel.bgcolor,l,"hbg"),u(c.hoverlabel.bordercolor,l,"hbc"),u(c.hoverlabel.font.size,l,"hts"),u(c.hoverlabel.font.color,l,"htc"),u(c.hoverlabel.font.family,l,"htf"),u(c.hoverlabel.namelength,l,"hnl"),u(c.hoverlabel.align,l,"hta"))}}}},{"../../lib":717,"../../registry":846}],623:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("./hover").hover;e.exports=function(t,e,r){var i=n.getComponentMethod("annotations","onClick")(t,t._hoverdata);function o(){t.emit("plotly_click",{points:t._hoverdata,event:e})}void 0!==r&&a(t,e,r,!0),t._hoverdata&&e&&e.target&&(i&&i.then?i.then(o):o(),e.stopImmediatePropagation&&e.stopImmediatePropagation())}},{"../../registry":846,"./hover":627}],624:[function(t,e,r){"use strict";e.exports={YANGLE:60,HOVERARROWSIZE:6,HOVERTEXTPAD:3,HOVERFONTSIZE:13,HOVERFONT:"Arial, sans-serif",HOVERMINTIME:50,HOVERID:"-hover"}},{}],625:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("./hoverlabel_defaults");e.exports=function(t,e,r,o){var s=n.extendFlat({},o.hoverlabel);e.hovertemplate&&(s.namelength=-1),i(t,e,function(r,i){return n.coerce(t,e,a,r,i)},s)}},{"../../lib":717,"./attributes":621,"./hoverlabel_defaults":628}],626:[function(t,e,r){"use strict";var n=t("../../lib");r.getSubplot=function(t){return t.subplot||t.xaxis+t.yaxis||t.geo},r.isTraceInSubplots=function(t,e){if("splom"===t.type){for(var n=t.xaxes||[],a=t.yaxes||[],i=0;i<n.length;i++)for(var o=0;o<a.length;o++)if(-1!==e.indexOf(n[i]+a[o]))return!0;return!1}return-1!==e.indexOf(r.getSubplot(t))},r.flat=function(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)r[n]=e;return r},r.p2c=function(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)r[n]=t[n].p2c(e);return r},r.getDistanceFunction=function(t,e,n,a){return"closest"===t?a||r.quadrature(e,n):"x"===t.charAt(0)?e:n},r.getClosest=function(t,e,r){if(!1!==r.index)r.index>=0&&r.index<t.length?r.distance=0:r.index=!1;else for(var n=0;n<t.length;n++){var a=e(t[n]);a<=r.distance&&(r.index=n,r.distance=a)}return r},r.inbox=function(t,e,r){return t*e<0||0===t?r:1/0},r.quadrature=function(t,e){return function(r){var n=t(r),a=e(r);return Math.sqrt(n*n+a*a)}},r.makeEventData=function(t,e,n){var a="index"in t?t.index:t.pointNumber,i={data:e._input,fullData:e,curveNumber:e.index,pointNumber:a};if(e._indexToPoints){var o=e._indexToPoints[a];1===o.length?i.pointIndex=o[0]:i.pointIndices=o}else i.pointIndex=a;return e._module.eventData?i=e._module.eventData(i,t,e,n,a):("xVal"in t?i.x=t.xVal:"x"in t&&(i.x=t.x),"yVal"in t?i.y=t.yVal:"y"in t&&(i.y=t.y),t.xa&&(i.xaxis=t.xa),t.ya&&(i.yaxis=t.ya),void 0!==t.zLabelVal&&(i.z=t.zLabelVal)),r.appendArrayPointValue(i,e,a),i},r.appendArrayPointValue=function(t,e,r){var a=e._arrayAttrs;if(a)for(var s=0;s<a.length;s++){var l=a[s],c=i(l);if(void 0===t[c]){var u=o(n.nestedProperty(e,l).get(),r);void 0!==u&&(t[c]=u)}}},r.appendArrayMultiPointValues=function(t,e,r){var a=e._arrayAttrs;if(a)for(var s=0;s<a.length;s++){var l=a[s],c=i(l);if(void 0===t[c]){for(var u=n.nestedProperty(e,l).get(),h=new Array(r.length),f=0;f<r.length;f++)h[f]=o(u,r[f]);t[c]=h}}};var a={ids:"id",locations:"location",labels:"label",values:"value","marker.colors":"color",parents:"parent"};function i(t){return a[t]||t}function o(t,e){return Array.isArray(e)?Array.isArray(t)&&Array.isArray(t[e[0]])?t[e[0]][e[1]]:void 0:t[e]}var s={x:!0,y:!0},l={"x unified":!0,"y unified":!0};r.isUnifiedHover=function(t){return"string"==typeof t&&!!l[t]},r.isXYhover=function(t){return"string"==typeof t&&!!s[t]}},{"../../lib":717}],627:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("tinycolor2"),o=t("../../lib"),s=t("../../lib/events"),l=t("../../lib/svg_text_utils"),c=t("../../lib/override_cursor"),u=t("../drawing"),h=t("../color"),f=t("../dragelement"),p=t("../../plots/cartesian/axes"),d=t("../../registry"),g=t("./helpers"),v=t("./constants"),m=t("../legend/defaults"),y=t("../legend/draw"),x=v.YANGLE,b=Math.PI*x/180,_=1/Math.sin(b),w=Math.cos(b),k=Math.sin(b),T=v.HOVERARROWSIZE,M=v.HOVERTEXTPAD;function A(t){return[t.trace.index,t.index,t.x0,t.y0,t.name,t.attr,t.xa,t.ya||""].join(",")}r.hover=function(t,e,r,i){t=o.getGraphDiv(t),o.throttle(t._fullLayout._uid+v.HOVERID,v.HOVERMINTIME,function(){!function(t,e,r,i){r||(r="xy");var l=Array.isArray(r)?r:[r],u=t._fullLayout,p=u._plots||[],v=p[r],m=u._has("cartesian");if(v){var y=v.overlays.map(function(t){return t.id});l=l.concat(y)}for(var x=l.length,b=new Array(x),w=new Array(x),k=!1,T=0;T<x;T++){var M=l[T];if(p[M])k=!0,b[T]=p[M].xaxis,w[T]=p[M].yaxis;else{if(!u[M]||!u[M]._subplot)return void o.warn("Unrecognized subplot: "+M);var S=u[M]._subplot;b[T]=S.xaxis,w[T]=S.yaxis}}var L=e.hovermode||u.hovermode;L&&!k&&(L="closest");if(-1===["x","y","closest","x unified","y unified"].indexOf(L)||!t.calcdata||t.querySelector(".zoombox")||t._dragging)return f.unhoverRaw(t,e);var I,D,R,F,B,N,j,V,U,q,H,G,Y,W=-1===u.hoverdistance?1/0:u.hoverdistance,X=-1===u.spikedistance?1/0:u.spikedistance,Z=[],J=[],K={hLinePoint:null,vLinePoint:null},Q=!1;if(Array.isArray(e))for(L="array",R=0;R<e.length;R++)(B=t.calcdata[e[R].curveNumber||0])&&(N=B[0].trace,"skip"!==B[0].trace.hoverinfo&&(J.push(B),"h"===N.orientation&&(Q=!0)));else{for(F=0;F<t.calcdata.length;F++)B=t.calcdata[F],"skip"!==(N=B[0].trace).hoverinfo&&g.isTraceInSubplots(N,l)&&(J.push(B),"h"===N.orientation&&(Q=!0));var $,tt,et=!e.target;if(et)$="xpx"in e?e.xpx:b[0]._length/2,tt="ypx"in e?e.ypx:w[0]._length/2;else{if(!1===s.triggerHandler(t,"plotly_beforehover",e))return;var rt=e.target.getBoundingClientRect();if($=e.clientX-rt.left,tt=e.clientY-rt.top,$<0||$>b[0]._length||tt<0||tt>w[0]._length)return f.unhoverRaw(t,e)}if(e.pointerX=$+b[0]._offset,e.pointerY=tt+w[0]._offset,I="xval"in e?g.flat(l,e.xval):g.p2c(b,$),D="yval"in e?g.flat(l,e.yval):g.p2c(w,tt),!a(I[0])||!a(D[0]))return o.warn("Fx.hover failed",e,t),f.unhoverRaw(t,e)}var nt=1/0;function at(t,r){for(F=0;F<J.length;F++)if((B=J[F])&&B[0]&&B[0].trace&&!0===(N=B[0].trace).visible&&0!==N._length&&-1===["carpet","contourcarpet"].indexOf(N._module.name)){if("splom"===N.type?j=l[V=0]:(j=g.getSubplot(N),V=l.indexOf(j)),U=L,g.isUnifiedHover(U)&&(U=U.charAt(0)),G={cd:B,trace:N,xa:b[V],ya:w[V],maxHoverDistance:W,maxSpikeDistance:X,index:!1,distance:Math.min(nt,W),spikeDistance:1/0,xSpike:void 0,ySpike:void 0,color:h.defaultLine,name:N.name,x0:void 0,x1:void 0,y0:void 0,y1:void 0,xLabelVal:void 0,yLabelVal:void 0,zLabelVal:void 0,text:void 0},u[j]&&(G.subplot=u[j]._subplot),u._splomScenes&&u._splomScenes[N.uid]&&(G.scene=u._splomScenes[N.uid]),Y=Z.length,"array"===U){var n=e[F];"pointNumber"in n?(G.index=n.pointNumber,U="closest"):(U="","xval"in n&&(q=n.xval,U="x"),"yval"in n&&(H=n.yval,U=U?"closest":"y"))}else void 0!==t&&void 0!==r?(q=t,H=r):(q=I[V],H=D[V]);if(0!==W)if(N._module&&N._module.hoverPoints){var i=N._module.hoverPoints(G,q,H,U,u._hoverlayer);if(i)for(var s,c=0;c<i.length;c++)s=i[c],a(s.x0)&&a(s.y0)&&Z.push(P(s,L))}else o.log("Unrecognized trace type in hover:",N);if("closest"===L&&Z.length>Y&&(Z.splice(0,Y),nt=Z[0].distance),m&&0!==X&&0===Z.length){G.distance=X,G.index=!1;var f=N._module.hoverPoints(G,q,H,"closest",u._hoverlayer);if(f&&(f=f.filter(function(t){return t.spikeDistance<=X})),f&&f.length){var p,d=f.filter(function(t){return t.xa.showspikes&&"hovered data"!==t.xa.spikesnap});if(d.length){var v=d[0];a(v.x0)&&a(v.y0)&&(p=ot(v),(!K.vLinePoint||K.vLinePoint.spikeDistance>p.spikeDistance)&&(K.vLinePoint=p))}var y=f.filter(function(t){return t.ya.showspikes&&"hovered data"!==t.ya.spikesnap});if(y.length){var x=y[0];a(x.x0)&&a(x.y0)&&(p=ot(x),(!K.hLinePoint||K.hLinePoint.spikeDistance>p.spikeDistance)&&(K.hLinePoint=p))}}}}}function it(t,e){for(var r,n=null,a=1/0,i=0;i<t.length;i++)(r=t[i].spikeDistance)<=a&&r<=e&&(n=t[i],a=r);return n}function ot(t){return t?{xa:t.xa,ya:t.ya,x:void 0!==t.xSpike?t.xSpike:(t.x0+t.x1)/2,y:void 0!==t.ySpike?t.ySpike:(t.y0+t.y1)/2,distance:t.distance,spikeDistance:t.spikeDistance,curveNumber:t.trace.index,color:t.color,pointNumber:t.index}:null}at();var st={fullLayout:u,container:u._hoverlayer,outerContainer:u._paperdiv,event:e},lt=t._spikepoints,ct={vLinePoint:K.vLinePoint,hLinePoint:K.hLinePoint};if(t._spikepoints=ct,m&&0!==X&&0!==Z.length){var ut=Z.filter(function(t){return t.ya.showspikes}),ht=it(ut,X);K.hLinePoint=ot(ht);var ft=Z.filter(function(t){return t.xa.showspikes}),pt=it(ft,X);K.vLinePoint=ot(pt)}if(0===Z.length){var dt=f.unhoverRaw(t,e);return!m||null===K.hLinePoint&&null===K.vLinePoint||z(lt)&&O(t,K,st),dt}m&&z(lt)&&O(t,K,st);if(Z.sort(function(t,e){return t.distance-e.distance}),g.isXYhover(U)&&0!==Z[0].length&&"splom"!==Z[0].trace.type){var gt=Z[0],vt=gt.cd[gt.index],mt="group"===u.boxmode||"group"===u.violinmode,yt=gt.xVal,xt=gt.xa;"category"===xt.type&&(yt=xt._categoriesMap[yt]),"date"===xt.type&&(yt=xt.d2c(yt)),vt&&vt.t&&vt.t.posLetter===xt._id&&mt&&(yt+=vt.t.dPos);var bt=gt.yVal;"category"===(xt=gt.ya).type&&(bt=xt._categoriesMap[bt]),"date"===xt.type&&(bt=xt.d2c(bt)),vt&&vt.t&&vt.t.posLetter===xt._id&&mt&&(bt+=vt.t.dPos),at(yt,bt);var _t={};Z=Z.filter(function(t){var e=A(t);if(!_t[e])return _t[e]=!0,_t[e]})}var wt=t._hoverdata,kt=[];for(R=0;R<Z.length;R++){var Tt=Z[R],Mt=g.makeEventData(Tt,Tt.trace,Tt.cd);if(!1!==Tt.hovertemplate){var At=!1;Tt.cd[Tt.index]&&Tt.cd[Tt.index].ht&&(At=Tt.cd[Tt.index].ht),Tt.hovertemplate=At||Tt.trace.hovertemplate||!1}Tt.eventData=[Mt],kt.push(Mt)}t._hoverdata=kt;var St="y"===L&&(J.length>1||Z.length>1)||"closest"===L&&Q&&Z.length>1,Et=h.combine(u.plot_bgcolor||h.background,u.paper_bgcolor),Lt={hovermode:L,rotateLabels:St,bgColor:Et,container:u._hoverlayer,outerContainer:u._paperdiv,commonLabelOpts:u.hoverlabel,hoverdistance:u.hoverdistance},Ct=E(Z,Lt,t);g.isUnifiedHover(L)||(!function(t,e,r){var n,a,i,o,s,l,c,u=0,h=1,f=t.size(),p=new Array(f),d=0;function g(t){var e=t[0],r=t[t.length-1];if(a=e.pmin-e.pos-e.dp+e.size,i=r.pos+r.dp+r.size-e.pmax,a>.01){for(s=t.length-1;s>=0;s--)t[s].dp+=a;n=!1}if(!(i<.01)){if(a<-.01){for(s=t.length-1;s>=0;s--)t[s].dp-=i;n=!1}if(n){var c=0;for(o=0;o<t.length;o++)(l=t[o]).pos+l.dp+l.size>e.pmax&&c++;for(o=t.length-1;o>=0&&!(c<=0);o--)(l=t[o]).pos>e.pmax-1&&(l.del=!0,c--);for(o=0;o<t.length&&!(c<=0);o++)if((l=t[o]).pos<e.pmin+1)for(l.del=!0,c--,i=2*l.size,s=t.length-1;s>=0;s--)t[s].dp-=i;for(o=t.length-1;o>=0&&!(c<=0);o--)(l=t[o]).pos+l.dp+l.size>e.pmax&&(l.del=!0,c--)}}}t.each(function(t){var n=t[e],a="x"===n._id.charAt(0),i=n.range;0===d&&i&&i[0]>i[1]!==a&&(h=-1),p[d++]=[{datum:t,traceIndex:t.trace.index,dp:0,pos:t.pos,posref:t.posref,size:t.by*(a?_:1)/2,pmin:0,pmax:a?r.width:r.height}]}),p.sort(function(t,e){return t[0].posref-e[0].posref||h*(e[0].traceIndex-t[0].traceIndex)});for(;!n&&u<=f;){for(u++,n=!0,o=0;o<p.length-1;){var v=p[o],m=p[o+1],y=v[v.length-1],x=m[0];if((a=y.pos+y.dp+y.size-x.pos-x.dp+x.size)>.01&&y.pmin===x.pmin&&y.pmax===x.pmax){for(s=m.length-1;s>=0;s--)m[s].dp+=a;for(v.push.apply(v,m),p.splice(o+1,1),c=0,s=v.length-1;s>=0;s--)c+=v[s].dp;for(i=c/v.length,s=v.length-1;s>=0;s--)v[s].dp-=i;n=!1}else o++}p.forEach(g)}for(o=p.length-1;o>=0;o--){var b=p[o];for(s=b.length-1;s>=0;s--){var w=b[s],k=w.datum;k.offset=w.dp,k.del=w.del}}}(Ct,St?"xa":"ya",u),C(Ct,St));if(e.target&&e.target.tagName){var Pt=d.getComponentMethod("annotations","hasClickToShow")(t,kt);c(n.select(e.target),Pt?"pointer":"")}if(!e.target||i||!function(t,e,r){if(!r||r.length!==t._hoverdata.length)return!0;for(var n=r.length-1;n>=0;n--){var a=r[n],i=t._hoverdata[n];if(a.curveNumber!==i.curveNumber||String(a.pointNumber)!==String(i.pointNumber)||String(a.pointNumbers)!==String(i.pointNumbers))return!0}return!1}(t,0,wt))return;wt&&t.emit("plotly_unhover",{event:e,points:wt});t.emit("plotly_hover",{event:e,points:t._hoverdata,xaxes:b,yaxes:w,xvals:I,yvals:D})}(t,e,r,i)})},r.loneHover=function(t,e){var r=!0;Array.isArray(t)||(r=!1,t=[t]);var a=t.map(function(t){return{color:t.color||h.defaultLine,x0:t.x0||t.x||0,x1:t.x1||t.x||0,y0:t.y0||t.y||0,y1:t.y1||t.y||0,xLabel:t.xLabel,yLabel:t.yLabel,zLabel:t.zLabel,text:t.text,name:t.name,idealAlign:t.idealAlign,borderColor:t.borderColor,fontFamily:t.fontFamily,fontSize:t.fontSize,fontColor:t.fontColor,nameLength:t.nameLength,textAlign:t.textAlign,trace:t.trace||{index:0,hoverinfo:""},xa:{_offset:0},ya:{_offset:0},index:0,hovertemplate:t.hovertemplate||!1,eventData:t.eventData||!1,hovertemplateLabels:t.hovertemplateLabels||!1}}),i=n.select(e.container),o=e.outerContainer?n.select(e.outerContainer):i,s={hovermode:"closest",rotateLabels:!1,bgColor:e.bgColor||h.background,container:i,outerContainer:o},l=E(a,s,e.gd),c=0,u=0;return l.sort(function(t,e){return t.y0-e.y0}).each(function(t,r){var n=t.y0-t.by/2;t.offset=n-5<c?c-n+5:0,c=n+t.by+t.offset,r===e.anchorIndex&&(u=t.offset)}).each(function(t){t.offset-=u}),C(l,s.rotateLabels),r?l:l.node()};var S=/<extra>([\s\S]*)<\/extra>/;function E(t,e,r){var a=r._fullLayout,i=e.hovermode,s=e.rotateLabels,c=e.bgColor,f=e.container,p=e.outerContainer,d=e.commonLabelOpts||{},b=e.fontFamily||v.HOVERFONT,_=e.fontSize||v.HOVERFONTSIZE,w=t[0],k=w.xa,S=w.ya,E="y"===i.charAt(0)?"yLabel":"xLabel",C=w[E],P=(String(C)||"").split(" ")[0],O=p.node().getBoundingClientRect(),z=O.top,I=O.width,D=O.height,R=void 0!==C&&w.distance<=e.hoverdistance&&("x"===i||"y"===i);if(R){var F,B,N=!0;for(F=0;F<t.length;F++)if(N&&void 0===t[F].zLabel&&(N=!1),B=t[F].hoverinfo||t[F].trace.hoverinfo){var j=Array.isArray(B)?B:B.split("+");if(-1===j.indexOf("all")&&-1===j.indexOf(i)){R=!1;break}}N&&(R=!1)}var V=f.selectAll("g.axistext").data(R?[0]:[]);function U(t){return t.filter(function(t){return void 0!==t.zLabelVal||(t[E]||"").split(" ")[0]===P})}if(V.enter().append("g").classed("axistext",!0),V.exit().remove(),V.each(function(){var e=n.select(this),s=o.ensureSingle(e,"path","",function(t){t.style({"stroke-width":"1px"})}),c=o.ensureSingle(e,"text","",function(t){t.attr("data-notex",1)}),f=d.bgcolor||h.defaultLine,p=d.bordercolor||h.contrast(f),g=h.contrast(f),v={family:d.font.family||b,size:d.font.size||_,color:d.font.color||g};s.style({fill:f,stroke:p}),c.text(C).call(u.font,v).call(l.positionText,0,0).call(l.convertToTspans,r),e.attr("transform","");var m,y,x=c.node().getBoundingClientRect();if("x"===i){var A="top"===k.side?"-":"";c.attr("text-anchor","middle").call(l.positionText,0,"top"===k.side?z-x.bottom-T-M:z-x.top+T+M),m=k._offset+(w.x0+w.x1)/2,y=S._offset+("top"===k.side?0:S._length);var E=x.width/2+M;m<E?(m=E,s.attr("d","M-"+(E-T)+",0L-"+(E-2*T)+","+A+T+"H"+(M+x.width/2)+"v"+A+(2*M+x.height)+"H-"+E+"V"+A+T+"Z")):m>a.width-E?(m=a.width-E,s.attr("d","M"+(E-T)+",0L"+E+","+A+T+"v"+A+(2*M+x.height)+"H-"+E+"V"+A+T+"H"+(E-2*T)+"Z")):s.attr("d","M0,0L"+T+","+A+T+"H"+(M+x.width/2)+"v"+A+(2*M+x.height)+"H-"+(M+x.width/2)+"V"+A+T+"H-"+T+"Z")}else{var L,P,O;"right"===S.side?(L="start",P=1,O="",m=k._offset+k._length):(L="end",P=-1,O="-",m=k._offset),y=S._offset+(w.y0+w.y1)/2,c.attr("text-anchor",L),s.attr("d","M0,0L"+O+T+","+T+"V"+(M+x.height/2)+"h"+O+(2*M+x.width)+"V-"+(M+x.height/2)+"H"+O+T+"V-"+T+"Z");var I,D=x.height/2,R=z-x.top-D,F="clip"+a._uid+"commonlabel"+S._id;if(m<x.width+2*M+T){I="M-"+(T+M)+"-"+D+"h-"+(x.width-M)+"V"+D+"h"+(x.width-M)+"Z";var B=x.width-m+M;l.positionText(c,B,R),"end"===L&&c.selectAll("tspan").each(function(){var t=n.select(this),e=u.tester.append("text").text(t.text()).call(u.font,v),r=e.node().getBoundingClientRect();Math.round(r.width)<Math.round(x.width)&&t.attr("x",B-r.width),e.remove()})}else l.positionText(c,P*(M+T),R),I=null;var N=a._topclips.selectAll("#"+F).data(I?[0]:[]);N.enter().append("clipPath").attr("id",F).append("path"),N.exit().remove(),N.select("path").attr("d",I),u.setClipUrl(c,I?F:null,r)}e.attr("transform","translate("+m+","+y+")"),t=U(t)}),g.isUnifiedHover(i)){if(f.selectAll("g.hovertext").remove(),void 0!==C&&w.distance<=e.hoverdistance&&(t=U(t)),0===t.length)return;var q={showlegend:!0,legend:{title:{text:C,font:a.hoverlabel.font},font:a.hoverlabel.font,bgcolor:a.hoverlabel.bgcolor,bordercolor:a.hoverlabel.bordercolor,borderwidth:1,tracegroupgap:7,traceorder:a.legend?a.legend.traceorder:void 0,orientation:"v"}},H={};m(q,H,r._fullData);var G=H.legend;G.entries=[];for(var Y=0;Y<t.length;Y++){var W=L(t[Y],!0,i,a,C),X=W[0],Z=W[1],J=t[Y];J.name=Z,J.text=""!==Z?Z+" : "+X:X;var K=J.cd[J.index];K&&(K.mc&&(J.mc=K.mc),K.mcc&&(J.mc=K.mcc),K.mlc&&(J.mlc=K.mlc),K.mlcc&&(J.mlc=K.mlcc),K.mlw&&(J.mlw=K.mlw),K.mrc&&(J.mrc=K.mrc),K.dir&&(J.dir=K.dir)),J._distinct=!0,G.entries.push([J])}G.entries.sort(function(t,e){return t[0].trace.index-e[0].trace.index}),G.layer=f,y(r,G);var Q=o.mean(t.map(function(t){return(t.y0+t.y1)/2})),$=o.mean(t.map(function(t){return(t.x0+t.x1)/2})),tt=f.select("g.legend"),et=tt.node().getBoundingClientRect();$+=k._offset,Q+=S._offset-et.height/2;var rt=et.width+2*M;!($+rt<=I)&&$-rt>=0?$-=rt:$+=2*M;var nt=et.height+2*M,at=Q+nt>=D;return nt<=D&&(Q<=z?Q=S._offset+2*M:at&&(Q=D-nt)),tt.attr("transform","translate("+$+","+Q+")"),tt}var it=f.selectAll("g.hovertext").data(t,function(t){return A(t)});return it.enter().append("g").classed("hovertext",!0).each(function(){var t=n.select(this);t.append("rect").call(h.fill,h.addOpacity(c,.8)),t.append("text").classed("name",!0),t.append("path").style("stroke-width","1px"),t.append("text").classed("nums",!0).call(u.font,b,_)}),it.exit().remove(),it.each(function(t){var e=n.select(this).attr("transform",""),o=t.bgcolor||t.color,f=h.combine(h.opacity(o)?o:h.defaultLine,c),p=h.combine(h.opacity(t.color)?t.color:h.defaultLine,c),d=t.borderColor||h.contrast(f),g=L(t,R,i,a,C,e),v=g[0],m=g[1],y=e.select("text.nums").call(u.font,t.fontFamily||b,t.fontSize||_,t.fontColor||d).text(v).attr("data-notex",1).call(l.positionText,0,0).call(l.convertToTspans,r),w=e.select("text.name"),k=0,A=0;if(m&&m!==v){w.call(u.font,t.fontFamily||b,t.fontSize||_,p).text(m).attr("data-notex",1).call(l.positionText,0,0).call(l.convertToTspans,r);var S=w.node().getBoundingClientRect();k=S.width+2*M,A=S.height+2*M}else w.remove(),e.select("rect").remove();e.select("path").style({fill:f,stroke:d});var E,P,O=y.node().getBoundingClientRect(),F=t.xa._offset+(t.x0+t.x1)/2,B=t.ya._offset+(t.y0+t.y1)/2,N=Math.abs(t.x1-t.x0),j=Math.abs(t.y1-t.y0),V=O.width+T+M+k;if(t.ty0=z-O.top,t.bx=O.width+2*M,t.by=Math.max(O.height+2*M,A),t.anchor="start",t.txwidth=O.width,t.tx2width=k,t.offset=0,s)t.pos=F,E=B+j/2+V<=D,P=B-j/2-V>=0,"top"!==t.idealAlign&&E||!P?E?(B+=j/2,t.anchor="start"):t.anchor="middle":(B-=j/2,t.anchor="end");else if(t.pos=B,E=F+N/2+V<=I,P=F-N/2-V>=0,"left"!==t.idealAlign&&E||!P)if(E)F+=N/2,t.anchor="start";else{t.anchor="middle";var U=V/2,q=F+U-I,H=F-U;q>0&&(F-=q),H<0&&(F+=-H)}else F-=N/2,t.anchor="end";y.attr("text-anchor",t.anchor),k&&w.attr("text-anchor",t.anchor),e.attr("transform","translate("+F+","+B+")"+(s?"rotate("+x+")":""))}),it}function L(t,e,r,n,a,i){var s="",l="";void 0!==t.nameOverride&&(t.name=t.nameOverride),t.name&&(t.trace._meta&&(t.name=o.templateString(t.name,t.trace._meta)),s=I(t.name,t.nameLength)),void 0!==t.zLabel?(void 0!==t.xLabel&&(l+="x: "+t.xLabel+"<br>"),void 0!==t.yLabel&&(l+="y: "+t.yLabel+"<br>"),"choropleth"!==t.trace.type&&"choroplethmapbox"!==t.trace.type&&(l+=(l?"z: ":"")+t.zLabel)):e&&t[r.charAt(0)+"Label"]===a?l=t[("x"===r.charAt(0)?"y":"x")+"Label"]||"":void 0===t.xLabel?void 0!==t.yLabel&&"scattercarpet"!==t.trace.type&&(l=t.yLabel):l=void 0===t.yLabel?t.xLabel:"("+t.xLabel+", "+t.yLabel+")",!t.text&&0!==t.text||Array.isArray(t.text)||(l+=(l?"<br>":"")+t.text),void 0!==t.extraText&&(l+=(l?"<br>":"")+t.extraText),i&&""===l&&!t.hovertemplate&&(""===s&&i.remove(),l=s);var c=n._d3locale,u=t.hovertemplate||!1,h=t.hovertemplateLabels||t,f=t.eventData[0]||{};return u&&(l=(l=o.hovertemplateString(u,h,c,f,t.trace._meta)).replace(S,function(e,r){return s=I(r,t.nameLength),""})),[l,s]}function C(t,e){t.each(function(t){var r=n.select(this);if(t.del)return r.remove();var a=r.select("text.nums"),i=t.anchor,o="end"===i?-1:1,s={start:1,end:-1,middle:0}[i],c=s*(T+M),h=c+s*(t.txwidth+M),f=0,p=t.offset;"middle"===i&&(c-=t.tx2width/2,h+=t.txwidth/2+M),e&&(p*=-k,f=t.offset*w),r.select("path").attr("d","middle"===i?"M-"+(t.bx/2+t.tx2width/2)+","+(p-t.by/2)+"h"+t.bx+"v"+t.by+"h-"+t.bx+"Z":"M0,0L"+(o*T+f)+","+(T+p)+"v"+(t.by/2-T)+"h"+o*t.bx+"v-"+t.by+"H"+(o*T+f)+"V"+(p-T)+"Z");var d=c+f,g=p+t.ty0-t.by/2+M,v=t.textAlign||"auto";"auto"!==v&&("left"===v&&"start"!==i?(a.attr("text-anchor","start"),d="middle"===i?-t.bx/2-t.tx2width/2+M:-t.bx-M):"right"===v&&"end"!==i&&(a.attr("text-anchor","end"),d="middle"===i?t.bx/2-t.tx2width/2-M:t.bx+M)),a.call(l.positionText,d,g),t.tx2width&&(r.select("text.name").call(l.positionText,h+s*M+f,p+t.ty0-t.by/2+M),r.select("rect").call(u.setRect,h+(s-1)*t.tx2width/2+f,p-t.by/2-1,t.tx2width,t.by+2))})}function P(t,e){var r=t.index,n=t.trace||{},i=t.cd[0],s=t.cd[r]||{};function l(t){return t||a(t)&&0===t}var c=Array.isArray(r)?function(t,e){var a=o.castOption(i,r,t);return l(a)?a:o.extractOption({},n,"",e)}:function(t,e){return o.extractOption(s,n,t,e)};function u(e,r,n){var a=c(r,n);l(a)&&(t[e]=a)}if(u("hoverinfo","hi","hoverinfo"),u("bgcolor","hbg","hoverlabel.bgcolor"),u("borderColor","hbc","hoverlabel.bordercolor"),u("fontFamily","htf","hoverlabel.font.family"),u("fontSize","hts","hoverlabel.font.size"),u("fontColor","htc","hoverlabel.font.color"),u("nameLength","hnl","hoverlabel.namelength"),u("textAlign","hta","hoverlabel.align"),t.posref="y"===e||"closest"===e&&"h"===n.orientation?t.xa._offset+(t.x0+t.x1)/2:t.ya._offset+(t.y0+t.y1)/2,t.x0=o.constrain(t.x0,0,t.xa._length),t.x1=o.constrain(t.x1,0,t.xa._length),t.y0=o.constrain(t.y0,0,t.ya._length),t.y1=o.constrain(t.y1,0,t.ya._length),void 0!==t.xLabelVal&&(t.xLabel="xLabel"in t?t.xLabel:p.hoverLabelText(t.xa,t.xLabelVal),t.xVal=t.xa.c2d(t.xLabelVal)),void 0!==t.yLabelVal&&(t.yLabel="yLabel"in t?t.yLabel:p.hoverLabelText(t.ya,t.yLabelVal),t.yVal=t.ya.c2d(t.yLabelVal)),void 0!==t.zLabelVal&&void 0===t.zLabel&&(t.zLabel=String(t.zLabelVal)),!(isNaN(t.xerr)||"log"===t.xa.type&&t.xerr<=0)){var h=p.tickText(t.xa,t.xa.c2l(t.xerr),"hover").text;void 0!==t.xerrneg?t.xLabel+=" +"+h+" / -"+p.tickText(t.xa,t.xa.c2l(t.xerrneg),"hover").text:t.xLabel+=" \xb1 "+h,"x"===e&&(t.distance+=1)}if(!(isNaN(t.yerr)||"log"===t.ya.type&&t.yerr<=0)){var f=p.tickText(t.ya,t.ya.c2l(t.yerr),"hover").text;void 0!==t.yerrneg?t.yLabel+=" +"+f+" / -"+p.tickText(t.ya,t.ya.c2l(t.yerrneg),"hover").text:t.yLabel+=" \xb1 "+f,"y"===e&&(t.distance+=1)}var d=t.hoverinfo||t.trace.hoverinfo;return d&&"all"!==d&&(-1===(d=Array.isArray(d)?d:d.split("+")).indexOf("x")&&(t.xLabel=void 0),-1===d.indexOf("y")&&(t.yLabel=void 0),-1===d.indexOf("z")&&(t.zLabel=void 0),-1===d.indexOf("text")&&(t.text=void 0),-1===d.indexOf("name")&&(t.name=void 0)),t}function O(t,e,r){var n,a,o=r.container,s=r.fullLayout,l=s._size,c=r.event,f=!!e.hLinePoint,d=!!e.vLinePoint;if(o.selectAll(".spikeline").remove(),d||f){var g=h.combine(s.plot_bgcolor,s.paper_bgcolor);if(f){var v,m,y=e.hLinePoint;n=y&&y.xa,"cursor"===(a=y&&y.ya).spikesnap?(v=c.pointerX,m=c.pointerY):(v=n._offset+y.x,m=a._offset+y.y);var x,b,_=i.readability(y.color,g)<1.5?h.contrast(g):y.color,w=a.spikemode,k=a.spikethickness,T=a.spikecolor||_,M=p.getPxPosition(t,a);if(-1!==w.indexOf("toaxis")||-1!==w.indexOf("across")){if(-1!==w.indexOf("toaxis")&&(x=M,b=v),-1!==w.indexOf("across")){var A=a._counterDomainMin,S=a._counterDomainMax;"free"===a.anchor&&(A=Math.min(A,a.position),S=Math.max(S,a.position)),x=l.l+A*l.w,b=l.l+S*l.w}o.insert("line",":first-child").attr({x1:x,x2:b,y1:m,y2:m,"stroke-width":k,stroke:T,"stroke-dasharray":u.dashStyle(a.spikedash,k)}).classed("spikeline",!0).classed("crisp",!0),o.insert("line",":first-child").attr({x1:x,x2:b,y1:m,y2:m,"stroke-width":k+2,stroke:g}).classed("spikeline",!0).classed("crisp",!0)}-1!==w.indexOf("marker")&&o.insert("circle",":first-child").attr({cx:M+("right"!==a.side?k:-k),cy:m,r:k,fill:T}).classed("spikeline",!0)}if(d){var E,L,C=e.vLinePoint;n=C&&C.xa,a=C&&C.ya,"cursor"===n.spikesnap?(E=c.pointerX,L=c.pointerY):(E=n._offset+C.x,L=a._offset+C.y);var P,O,z=i.readability(C.color,g)<1.5?h.contrast(g):C.color,I=n.spikemode,D=n.spikethickness,R=n.spikecolor||z,F=p.getPxPosition(t,n);if(-1!==I.indexOf("toaxis")||-1!==I.indexOf("across")){if(-1!==I.indexOf("toaxis")&&(P=F,O=L),-1!==I.indexOf("across")){var B=n._counterDomainMin,N=n._counterDomainMax;"free"===n.anchor&&(B=Math.min(B,n.position),N=Math.max(N,n.position)),P=l.t+(1-N)*l.h,O=l.t+(1-B)*l.h}o.insert("line",":first-child").attr({x1:E,x2:E,y1:P,y2:O,"stroke-width":D,stroke:R,"stroke-dasharray":u.dashStyle(n.spikedash,D)}).classed("spikeline",!0).classed("crisp",!0),o.insert("line",":first-child").attr({x1:E,x2:E,y1:P,y2:O,"stroke-width":D+2,stroke:g}).classed("spikeline",!0).classed("crisp",!0)}-1!==I.indexOf("marker")&&o.insert("circle",":first-child").attr({cx:E,cy:F-("top"!==n.side?D:-D),r:D,fill:R}).classed("spikeline",!0)}}}function z(t,e){return!e||(e.vLinePoint!==t._spikepoints.vLinePoint||e.hLinePoint!==t._spikepoints.hLinePoint)}function I(t,e){return l.plainText(t||"",{len:e,allowedTags:["br","sub","sup","b","i","em"]})}},{"../../lib":717,"../../lib/events":707,"../../lib/override_cursor":728,"../../lib/svg_text_utils":741,"../../plots/cartesian/axes":765,"../../registry":846,"../color":591,"../dragelement":609,"../drawing":612,"../legend/defaults":642,"../legend/draw":643,"./constants":624,"./helpers":626,d3:165,"fast-isnumeric":228,tinycolor2:535}],628:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../color"),i=t("./helpers").isUnifiedHover;e.exports=function(t,e,r,o){function s(t){o.font[t]||(o.font[t]=e.legend?e.legend.font[t]:e.font[t])}o=o||{},e&&i(e.hovermode)&&(o.font||(o.font={}),s("size"),s("family"),s("color"),e.legend?(o.bgcolor||(o.bgcolor=a.combine(e.legend.bgcolor,e.paper_bgcolor)),o.bordercolor||(o.bordercolor=e.legend.bordercolor)):o.bgcolor||(o.bgcolor=e.paper_bgcolor)),r("hoverlabel.bgcolor",o.bgcolor),r("hoverlabel.bordercolor",o.bordercolor),r("hoverlabel.namelength",o.namelength),n.coerceFont(r,"hoverlabel.font",o.font),r("hoverlabel.align",o.align)}},{"../../lib":717,"../color":591,"./helpers":626}],629:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e,r){function i(r,i){return void 0!==e[r]?e[r]:n.coerce(t,e,a,r,i)}var o,s=i("clickmode");return e._has("cartesian")?s.indexOf("select")>-1?o="closest":(e._isHoriz=function(t,e){for(var r=e._scatterStackOpts||{},n=0;n<t.length;n++){var a=t[n],i=a.xaxis+a.yaxis,o=r[i]||{},s=o[a.stackgroup]||{};if("h"!==a.orientation&&"h"!==s.orientation)return!1}return!0}(r,e),o=e._isHoriz?"y":"x"):o="closest",i("hovermode",o)}},{"../../lib":717,"./layout_attributes":631}],630:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../dragelement"),o=t("./helpers"),s=t("./layout_attributes"),l=t("./hover");e.exports={moduleType:"component",name:"fx",constants:t("./constants"),schema:{layout:s},attributes:t("./attributes"),layoutAttributes:s,supplyLayoutGlobalDefaults:t("./layout_global_defaults"),supplyDefaults:t("./defaults"),supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc"),getDistanceFunction:o.getDistanceFunction,getClosest:o.getClosest,inbox:o.inbox,quadrature:o.quadrature,appendArrayPointValue:o.appendArrayPointValue,castHoverOption:function(t,e,r){return a.castOption(t,e,"hoverlabel."+r)},castHoverinfo:function(t,e,r){return a.castOption(t,r,"hoverinfo",function(r){return a.coerceHoverinfo({hoverinfo:r},{_module:t._module},e)})},hover:l.hover,unhover:i.unhover,loneHover:l.loneHover,loneUnhover:function(t){var e=a.isD3Selection(t)?t:n.select(t);e.selectAll("g.hovertext").remove(),e.selectAll(".spikeline").remove()},click:t("./click")}},{"../../lib":717,"../dragelement":609,"./attributes":621,"./calc":622,"./click":623,"./constants":624,"./defaults":625,"./helpers":626,"./hover":627,"./layout_attributes":631,"./layout_defaults":632,"./layout_global_defaults":633,d3:165}],631:[function(t,e,r){"use strict";var n=t("./constants"),a=t("../../plots/font_attributes")({editType:"none"});a.family.dflt=n.HOVERFONT,a.size.dflt=n.HOVERFONTSIZE,e.exports={clickmode:{valType:"flaglist",flags:["event","select"],dflt:"event",editType:"plot",extras:["none"]},dragmode:{valType:"enumerated",values:["zoom","pan","select","lasso","orbit","turntable",!1],dflt:"zoom",editType:"modebar"},hovermode:{valType:"enumerated",values:["x","y","closest",!1,"x unified","y unified"],editType:"modebar"},hoverdistance:{valType:"integer",min:-1,dflt:20,editType:"none"},spikedistance:{valType:"integer",min:-1,dflt:20,editType:"none"},hoverlabel:{bgcolor:{valType:"color",editType:"none"},bordercolor:{valType:"color",editType:"none"},font:a,align:{valType:"enumerated",values:["left","right","auto"],dflt:"auto",editType:"none"},namelength:{valType:"integer",min:-1,dflt:15,editType:"none"},editType:"none"},selectdirection:{valType:"enumerated",values:["h","v","d","any"],dflt:"any",editType:"none"}}},{"../../plots/font_attributes":791,"./constants":624}],632:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./helpers").isUnifiedHover,i=t("./layout_attributes"),o=t("./hovermode_defaults"),s=t("./hoverlabel_defaults");e.exports=function(t,e,r){function l(r,a){return n.coerce(t,e,i,r,a)}var c=o(t,e,r);c&&(l("hoverdistance"),l("spikedistance",a(c)?-1:void 0)),"select"===l("dragmode")&&l("selectdirection");var u=e._has("mapbox"),h=e._has("geo"),f=e._basePlotModules.length;"zoom"===e.dragmode&&((u||h)&&1===f||u&&h&&2===f)&&(e.dragmode="pan"),s(t,e,l)}},{"../../lib":717,"./helpers":626,"./hoverlabel_defaults":628,"./hovermode_defaults":629,"./layout_attributes":631}],633:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./hoverlabel_defaults"),i=t("./layout_attributes");e.exports=function(t,e){a(t,e,function(r,a){return n.coerce(t,e,i,r,a)})}},{"../../lib":717,"./hoverlabel_defaults":628,"./layout_attributes":631}],634:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../lib/regex").counter,i=t("../../plots/domain").attributes,o=t("../../plots/cartesian/constants").idRegex,s=t("../../plot_api/plot_template"),l={rows:{valType:"integer",min:1,editType:"plot"},roworder:{valType:"enumerated",values:["top to bottom","bottom to top"],dflt:"top to bottom",editType:"plot"},columns:{valType:"integer",min:1,editType:"plot"},subplots:{valType:"info_array",freeLength:!0,dimensions:2,items:{valType:"enumerated",values:[a("xy").toString(),""],editType:"plot"},editType:"plot"},xaxes:{valType:"info_array",freeLength:!0,items:{valType:"enumerated",values:[o.x.toString(),""],editType:"plot"},editType:"plot"},yaxes:{valType:"info_array",freeLength:!0,items:{valType:"enumerated",values:[o.y.toString(),""],editType:"plot"},editType:"plot"},pattern:{valType:"enumerated",values:["independent","coupled"],dflt:"coupled",editType:"plot"},xgap:{valType:"number",min:0,max:1,editType:"plot"},ygap:{valType:"number",min:0,max:1,editType:"plot"},domain:i({name:"grid",editType:"plot",noGridCell:!0},{}),xside:{valType:"enumerated",values:["bottom","bottom plot","top plot","top"],dflt:"bottom plot",editType:"plot"},yside:{valType:"enumerated",values:["left","left plot","right plot","right"],dflt:"left plot",editType:"plot"},editType:"plot"};function c(t,e,r){var n=e[r+"axes"],a=Object.keys((t._splomAxes||{})[r]||{});return Array.isArray(n)?n:a.length?a:void 0}function u(t,e,r,n,a,i){var o=e(t+"gap",r),s=e("domain."+t);e(t+"side",n);for(var l=new Array(a),c=s[0],u=(s[1]-c)/(a-o),h=u*(1-o),f=0;f<a;f++){var p=c+u*f;l[i?a-1-f:f]=[p,p+h]}return l}function h(t,e,r,n,a){var i,o=new Array(r);function s(t,r){-1!==e.indexOf(r)&&void 0===n[r]?(o[t]=r,n[r]=t):o[t]=""}if(Array.isArray(t))for(i=0;i<r;i++)s(i,t[i]);else for(s(0,a),i=1;i<r;i++)s(i,a+(i+1));return o}e.exports={moduleType:"component",name:"grid",schema:{layout:{grid:l}},layoutAttributes:l,sizeDefaults:function(t,e){var r=t.grid||{},a=c(e,r,"x"),i=c(e,r,"y");if(t.grid||a||i){var o,h,f=Array.isArray(r.subplots)&&Array.isArray(r.subplots[0]),p=Array.isArray(a),d=Array.isArray(i),g=p&&a!==r.xaxes&&d&&i!==r.yaxes;f?(o=r.subplots.length,h=r.subplots[0].length):(d&&(o=i.length),p&&(h=a.length));var v=s.newContainer(e,"grid"),m=T("rows",o),y=T("columns",h);if(m*y>1){f||p||d||"independent"===T("pattern")&&(f=!0),v._hasSubplotGrid=f;var x,b,_="top to bottom"===T("roworder"),w=f?.2:.1,k=f?.3:.1;g&&e._splomGridDflt&&(x=e._splomGridDflt.xside,b=e._splomGridDflt.yside),v._domains={x:u("x",T,w,x,y),y:u("y",T,k,b,m,_)}}else delete e.grid}function T(t,e){return n.coerce(r,v,l,t,e)}},contentDefaults:function(t,e){var r=e.grid;if(r&&r._domains){var n,a,i,o,s,l,u,f=t.grid||{},p=e._subplots,d=r._hasSubplotGrid,g=r.rows,v=r.columns,m="independent"===r.pattern,y=r._axisMap={};if(d){var x=f.subplots||[];l=r.subplots=new Array(g);var b=1;for(n=0;n<g;n++){var _=l[n]=new Array(v),w=x[n]||[];for(a=0;a<v;a++)if(m?(s=1===b?"xy":"x"+b+"y"+b,b++):s=w[a],_[a]="",-1!==p.cartesian.indexOf(s)){if(u=s.indexOf("y"),i=s.slice(0,u),o=s.slice(u),void 0!==y[i]&&y[i]!==a||void 0!==y[o]&&y[o]!==n)continue;_[a]=s,y[i]=a,y[o]=n}}}else{var k=c(e,f,"x"),T=c(e,f,"y");r.xaxes=h(k,p.xaxis,v,y,"x"),r.yaxes=h(T,p.yaxis,g,y,"y")}var M=r._anchors={},A="top to bottom"===r.roworder;for(var S in y){var E,L,C,P=S.charAt(0),O=r[P+"side"];if(O.length<8)M[S]="free";else if("x"===P){if("t"===O.charAt(0)===A?(E=0,L=1,C=g):(E=g-1,L=-1,C=-1),d){var z=y[S];for(n=E;n!==C;n+=L)if((s=l[n][z])&&(u=s.indexOf("y"),s.slice(0,u)===S)){M[S]=s.slice(u);break}}else for(n=E;n!==C;n+=L)if(o=r.yaxes[n],-1!==p.cartesian.indexOf(S+o)){M[S]=o;break}}else if("l"===O.charAt(0)?(E=0,L=1,C=v):(E=v-1,L=-1,C=-1),d){var I=y[S];for(n=E;n!==C;n+=L)if((s=l[I][n])&&(u=s.indexOf("y"),s.slice(u)===S)){M[S]=s.slice(0,u);break}}else for(n=E;n!==C;n+=L)if(i=r.xaxes[n],-1!==p.cartesian.indexOf(i+S)){M[S]=i;break}}}}}},{"../../lib":717,"../../lib/regex":733,"../../plot_api/plot_template":755,"../../plots/cartesian/constants":771,"../../plots/domain":790}],635:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/constants"),a=t("../../plot_api/plot_template").templatedArray;e.exports=a("image",{visible:{valType:"boolean",dflt:!0,editType:"arraydraw"},source:{valType:"string",editType:"arraydraw"},layer:{valType:"enumerated",values:["below","above"],dflt:"above",editType:"arraydraw"},sizex:{valType:"number",dflt:0,editType:"arraydraw"},sizey:{valType:"number",dflt:0,editType:"arraydraw"},sizing:{valType:"enumerated",values:["fill","contain","stretch"],dflt:"contain",editType:"arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},x:{valType:"any",dflt:0,editType:"arraydraw"},y:{valType:"any",dflt:0,editType:"arraydraw"},xanchor:{valType:"enumerated",values:["left","center","right"],dflt:"left",editType:"arraydraw"},yanchor:{valType:"enumerated",values:["top","middle","bottom"],dflt:"top",editType:"arraydraw"},xref:{valType:"enumerated",values:["paper",n.idRegex.x.toString()],dflt:"paper",editType:"arraydraw"},yref:{valType:"enumerated",values:["paper",n.idRegex.y.toString()],dflt:"paper",editType:"arraydraw"},editType:"arraydraw"})},{"../../plot_api/plot_template":755,"../../plots/cartesian/constants":771}],636:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib/to_log_range");e.exports=function(t,e,r,i){e=e||{};var o="log"===r&&"linear"===e.type,s="linear"===r&&"log"===e.type;if(o||s)for(var l,c,u=t._fullLayout.images,h=e._id.charAt(0),f=0;f<u.length;f++)if(c="images["+f+"].",(l=u[f])[h+"ref"]===e._id){var p=l[h],d=l["size"+h],g=null,v=null;if(o){g=a(p,e.range);var m=d/Math.pow(10,g)/2;v=2*Math.log(m+Math.sqrt(1+m*m))/Math.LN10}else v=(g=Math.pow(10,p))*(Math.pow(10,d/2)-Math.pow(10,-d/2));n(g)?n(v)||(v=null):(g=null,v=null),i(c+h,g),i(c+"size"+h,v)}}},{"../../lib/to_log_range":743,"fast-isnumeric":228}],637:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../../plots/array_container_defaults"),o=t("./attributes");function s(t,e,r){function i(r,a){return n.coerce(t,e,o,r,a)}var s=i("source");if(!i("visible",!!s))return e;i("layer"),i("xanchor"),i("yanchor"),i("sizex"),i("sizey"),i("sizing"),i("opacity");for(var l={_fullLayout:r},c=["x","y"],u=0;u<2;u++){var h=c[u],f=a.coerceRef(t,e,l,h,"paper");if("paper"!==f)a.getFromId(l,f)._imgIndices.push(e._index);a.coercePosition(e,l,i,f,h,0)}return e}e.exports=function(t,e){i(t,e,{name:"images",handleItemDefaults:s})}},{"../../lib":717,"../../plots/array_container_defaults":761,"../../plots/cartesian/axes":765,"./attributes":635}],638:[function(t,e,r){"use strict";var n=t("d3"),a=t("../drawing"),i=t("../../plots/cartesian/axes"),o=t("../../constants/xmlns_namespaces");e.exports=function(t){var e,r,s=t._fullLayout,l=[],c={},u=[];for(r=0;r<s.images.length;r++){var h=s.images[r];if(h.visible)if("below"===h.layer&&"paper"!==h.xref&&"paper"!==h.yref){e=h.xref+h.yref;var f=s._plots[e];if(!f){u.push(h);continue}f.mainplot&&(e=f.mainplot.id),c[e]||(c[e]=[]),c[e].push(h)}else"above"===h.layer?l.push(h):u.push(h)}var p={x:{left:{sizing:"xMin",offset:0},center:{sizing:"xMid",offset:-.5},right:{sizing:"xMax",offset:-1}},y:{top:{sizing:"YMin",offset:0},middle:{sizing:"YMid",offset:-.5},bottom:{sizing:"YMax",offset:-1}}};function d(e){var r=n.select(this);if(this._imgSrc!==e.source)if(r.attr("xmlns",o.svg),e.source&&"data:"===e.source.slice(0,5))r.attr("xlink:href",e.source),this._imgSrc=e.source;else{var a=new Promise(function(t){var n=new Image;function a(){r.remove(),t()}this.img=n,n.setAttribute("crossOrigin","anonymous"),n.onerror=a,n.onload=function(){var e=document.createElement("canvas");e.width=this.width,e.height=this.height,e.getContext("2d").drawImage(this,0,0);var n=e.toDataURL("image/png");r.attr("xlink:href",n),t()},r.on("error",a),n.src=e.source,this._imgSrc=e.source}.bind(this));t._promises.push(a)}}function g(e){var r=n.select(this),o=i.getFromId(t,e.xref),l=i.getFromId(t,e.yref),c=s._size,u=o?Math.abs(o.l2p(e.sizex)-o.l2p(0)):e.sizex*c.w,h=l?Math.abs(l.l2p(e.sizey)-l.l2p(0)):e.sizey*c.h,f=u*p.x[e.xanchor].offset,d=h*p.y[e.yanchor].offset,g=p.x[e.xanchor].sizing+p.y[e.yanchor].sizing,v=(o?o.r2p(e.x)+o._offset:e.x*c.w+c.l)+f,m=(l?l.r2p(e.y)+l._offset:c.h-e.y*c.h+c.t)+d;switch(e.sizing){case"fill":g+=" slice";break;case"stretch":g="none"}r.attr({x:v,y:m,width:u,height:h,preserveAspectRatio:g,opacity:e.opacity});var y=(o?o._id:"")+(l?l._id:"");a.setClipUrl(r,y?"clip"+s._uid+y:null,t)}var v=s._imageLowerLayer.selectAll("image").data(u),m=s._imageUpperLayer.selectAll("image").data(l);v.enter().append("image"),m.enter().append("image"),v.exit().remove(),m.exit().remove(),v.each(function(t){d.bind(this)(t),g.bind(this)(t)}),m.each(function(t){d.bind(this)(t),g.bind(this)(t)});var y=Object.keys(s._plots);for(r=0;r<y.length;r++){e=y[r];var x=s._plots[e];if(x.imagelayer){var b=x.imagelayer.selectAll("image").data(c[e]||[]);b.enter().append("image"),b.exit().remove(),b.each(function(t){d.bind(this)(t),g.bind(this)(t)})}}}},{"../../constants/xmlns_namespaces":694,"../../plots/cartesian/axes":765,"../drawing":612,d3:165}],639:[function(t,e,r){"use strict";e.exports={moduleType:"component",name:"images",layoutAttributes:t("./attributes"),supplyLayoutDefaults:t("./defaults"),includeBasePlot:t("../../plots/cartesian/include_components")("images"),draw:t("./draw"),convertCoords:t("./convert_coords")}},{"../../plots/cartesian/include_components":775,"./attributes":635,"./convert_coords":636,"./defaults":637,"./draw":638}],640:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),a=t("../color/attributes");e.exports={bgcolor:{valType:"color",editType:"legend"},bordercolor:{valType:"color",dflt:a.defaultLine,editType:"legend"},borderwidth:{valType:"number",min:0,dflt:0,editType:"legend"},font:n({editType:"legend"}),orientation:{valType:"enumerated",values:["v","h"],dflt:"v",editType:"legend"},traceorder:{valType:"flaglist",flags:["reversed","grouped"],extras:["normal"],editType:"legend"},tracegroupgap:{valType:"number",min:0,dflt:10,editType:"legend"},itemsizing:{valType:"enumerated",values:["trace","constant"],dflt:"trace",editType:"legend"},itemclick:{valType:"enumerated",values:["toggle","toggleothers",!1],dflt:"toggle",editType:"legend"},itemdoubleclick:{valType:"enumerated",values:["toggle","toggleothers",!1],dflt:"toggleothers",editType:"legend"},x:{valType:"number",min:-2,max:3,editType:"legend"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left",editType:"legend"},y:{valType:"number",min:-2,max:3,editType:"legend"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],editType:"legend"},uirevision:{valType:"any",editType:"none"},valign:{valType:"enumerated",values:["top","middle","bottom"],dflt:"middle",editType:"legend"},title:{text:{valType:"string",dflt:"",editType:"legend"},font:n({editType:"legend"}),side:{valType:"enumerated",values:["top","left","top left"],editType:"legend"},editType:"legend"},editType:"legend"}},{"../../plots/font_attributes":791,"../color/attributes":590}],641:[function(t,e,r){"use strict";e.exports={scrollBarWidth:6,scrollBarMinHeight:20,scrollBarColor:"#808BA4",scrollBarMargin:4,scrollBarEnterAttrs:{rx:20,ry:3,width:0,height:0},titlePad:2,textGap:40,itemGap:5}},{}],642:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("../../plot_api/plot_template"),o=t("./attributes"),s=t("../../plots/layout_attributes"),l=t("./helpers");e.exports=function(t,e,r){for(var c=t.legend||{},u=0,h=!1,f="normal",p=0;p<r.length;p++){var d=r[p];d.visible&&((d.showlegend||d._dfltShowLegend&&!(d._module&&d._module.attributes&&d._module.attributes.showlegend&&!1===d._module.attributes.showlegend.dflt))&&(u++,d.showlegend&&(h=!0,(n.traceIs(d,"pie-like")||!0===d._input.showlegend)&&u++)),(n.traceIs(d,"bar")&&"stack"===e.barmode||-1!==["tonextx","tonexty"].indexOf(d.fill))&&(f=l.isGrouped({traceorder:f})?"grouped+reversed":"reversed"),void 0!==d.legendgroup&&""!==d.legendgroup&&(f=l.isReversed({traceorder:f})?"reversed+grouped":"grouped"))}var g=a.coerce(t,e,s,"showlegend",h&&u>1);if(!1!==g||c.uirevision){var v=i.newContainer(e,"legend");if(_("uirevision",e.uirevision),!1!==g){_("bgcolor",e.paper_bgcolor),_("bordercolor"),_("borderwidth"),a.coerceFont(_,"font",e.font);var m,y,x,b=_("orientation");"h"===b?(m=0,n.getComponentMethod("rangeslider","isVisible")(t.xaxis)?(y=1.1,x="bottom"):(y=-.1,x="top")):(m=1.02,y=1,x="auto"),_("traceorder",f),l.isGrouped(e.legend)&&_("tracegroupgap"),_("itemsizing"),_("itemclick"),_("itemdoubleclick"),_("x",m),_("xanchor"),_("y",y),_("yanchor",x),_("valign"),a.noneOrAll(c,v,["x","y"]),_("title.text")&&(_("title.side","h"===b?"left":"top"),a.coerceFont(_,"title.font",e.font))}}function _(t,e){return a.coerce(c,v,o,t,e)}}},{"../../lib":717,"../../plot_api/plot_template":755,"../../plots/layout_attributes":817,"../../registry":846,"./attributes":640,"./helpers":646}],643:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../plots/plots"),o=t("../../registry"),s=t("../../lib/events"),l=t("../dragelement"),c=t("../drawing"),u=t("../color"),h=t("../../lib/svg_text_utils"),f=t("./handle_click"),p=t("./constants"),d=t("../../constants/alignment"),g=d.LINE_SPACING,v=d.FROM_TL,m=d.FROM_BR,y=t("./get_legend_data"),x=t("./style"),b=t("./helpers");function _(t,e,r,n,a){var i=r.data()[0][0].trace,l={event:a,node:r.node(),curveNumber:i.index,expandedIndex:i._expandedIndex,data:t.data,layout:t.layout,frames:t._transitionData._frames,config:t._context,fullData:t._fullData,fullLayout:t._fullLayout};if(i._group&&(l.group=i._group),o.traceIs(i,"pie-like")&&(l.label=r.datum()[0].label),!1!==s.triggerHandler(t,"plotly_legendclick",l))if(1===n)e._clickTimeout=setTimeout(function(){f(r,t,n)},t._context.doubleClickDelay);else if(2===n){e._clickTimeout&&clearTimeout(e._clickTimeout),t._legendMouseDownTime=0,!1!==s.triggerHandler(t,"plotly_legenddoubleclick",l)&&f(r,t,n)}}function w(t,e,r){var n,i=t.data()[0][0],s=i.trace,l=o.traceIs(s,"pie-like"),u=s.index,f=r._main&&e._context.edits.legendText&&!l,d=r._maxNameLength;r.entries?n=i.text:(n=l?i.label:s.name,s._meta&&(n=a.templateString(n,s._meta)));var g=a.ensureSingle(t,"text","legendtext");g.attr("text-anchor","start").classed("user-select-none",!0).call(c.font,r.font).text(f?k(n,d):n),h.positionText(g,p.textGap,0),f?g.call(h.makeEditable,{gd:e,text:n}).call(M,t,e,r).on("edit",function(n){this.text(k(n,d)).call(M,t,e,r);var s=i.trace._fullInput||{},l={};if(o.hasTransform(s,"groupby")){var c=o.getTransformIndices(s,"groupby"),h=c[c.length-1],f=a.keyedContainer(s,"transforms["+h+"].styles","target","value.name");f.set(i.trace._group,n),l=f.constructUpdate()}else l.name=n;return o.call("_guiRestyle",e,l,u)}):M(g,t,e,r)}function k(t,e){var r=Math.max(4,e);if(t&&t.trim().length>=r/2)return t;for(var n=r-(t=t||"").length;n>0;n--)t+=" ";return t}function T(t,e){var r,i=e._context.doubleClickDelay,o=1,s=a.ensureSingle(t,"rect","legendtoggle",function(t){t.style("cursor","pointer").attr("pointer-events","all").call(u.fill,"rgba(0,0,0,0)")});s.on("mousedown",function(){(r=(new Date).getTime())-e._legendMouseDownTime<i?o+=1:(o=1,e._legendMouseDownTime=r)}),s.on("mouseup",function(){if(!e._dragged&&!e._editing){var r=e._fullLayout.legend;(new Date).getTime()-e._legendMouseDownTime>i&&(o=Math.max(o-1,1)),_(e,r,t,o,n.event)}})}function M(t,e,r,n){n._main||t.attr("data-notex",!0),h.convertToTspans(t,r,function(){!function(t,e,r){var n=t.data()[0][0];if(r._main&&n&&!n.trace.showlegend)return void t.remove();var a=t.select("g[class*=math-group]"),i=a.node();r||(r=e._fullLayout.legend);var o,s,l=r.borderwidth,u=(n?r:r.title).font.size*g;if(i){var f=c.bBox(i);o=f.height,s=f.width,n?c.setTranslate(a,0,.25*o):c.setTranslate(a,l,.75*o+l)}else{var d=t.select(n?".legendtext":".legendtitletext"),v=h.lineCount(d),m=d.node();o=u*v,s=m?c.bBox(m).width:0;var y=u*((v-1)/2-.3);n?h.positionText(d,p.textGap,-y):h.positionText(d,p.titlePad+l,u+l)}n?(n.lineHeight=u,n.height=Math.max(o,16)+3,n.width=s):(r._titleWidth=s,r._titleHeight=o)}(e,r,n)})}function A(t){return a.isRightAnchor(t)?"right":a.isCenterAnchor(t)?"center":"left"}function S(t){return a.isBottomAnchor(t)?"bottom":a.isMiddleAnchor(t)?"middle":"top"}e.exports=function(t,e){var r,s=t._fullLayout,h="legend"+s._uid;if(e?(r=e.layer,h+="-hover"):((e=s.legend||{})._main=!0,r=s._infolayer),r){var f;if(t._legendMouseDownTime||(t._legendMouseDownTime=0),e._main){if(!t.calcdata)return;f=s.showlegend&&y(t.calcdata,e)}else{if(!e.entries)return;f=y(e.entries,e)}var d=s.hiddenlabels||[];if(e._main&&(!s.showlegend||!f.length))return r.selectAll(".legend").remove(),s._topdefs.select("#"+h).remove(),i.autoMargin(t,"legend");var g=a.ensureSingle(r,"g","legend",function(t){e._main&&t.attr("pointer-events","all")}),k=a.ensureSingleById(s._topdefs,"clipPath",h,function(t){t.append("rect")}),E=a.ensureSingle(g,"rect","bg",function(t){t.attr("shape-rendering","crispEdges")});E.call(u.stroke,e.bordercolor).call(u.fill,e.bgcolor).style("stroke-width",e.borderwidth+"px");var L=a.ensureSingle(g,"g","scrollbox"),C=e.title;if(e._titleWidth=0,e._titleHeight=0,C.text){var P=a.ensureSingle(L,"text","legendtitletext");P.attr("text-anchor","start").classed("user-select-none",!0).call(c.font,C.font).text(C.text),M(P,L,t,e)}var O=a.ensureSingle(g,"rect","scrollbar",function(t){t.attr(p.scrollBarEnterAttrs).call(u.fill,p.scrollBarColor)}),z=L.selectAll("g.groups").data(f);z.enter().append("g").attr("class","groups"),z.exit().remove();var I=z.selectAll("g.traces").data(a.identity);I.enter().append("g").attr("class","traces"),I.exit().remove(),I.style("opacity",function(t){var e=t[0].trace;return o.traceIs(e,"pie-like")?-1!==d.indexOf(t[0].label)?.5:1:"legendonly"===e.visible?.5:1}).each(function(){n.select(this).call(w,t,e)}).call(x,t,e).each(function(){e._main&&n.select(this).call(T,t)}),a.syncOrAsync([i.previousPromises,function(){return function(t,e,r,a){var i=t._fullLayout;a||(a=i.legend);var o=i._size,s=b.isVertical(a),l=b.isGrouped(a),u=a.borderwidth,h=2*u,f=p.textGap,d=p.itemGap,g=2*(u+d),v=S(a),m=a.y<0||0===a.y&&"top"===v,y=a.y>1||1===a.y&&"bottom"===v;a._maxHeight=Math.max(m||y?i.height/2:o.h,30);var x=0;a._width=0,a._height=0;var _=function(t){var e=0,r=0,n=t.title.side;n&&(-1!==n.indexOf("left")&&(e=t._titleWidth),-1!==n.indexOf("top")&&(r=t._titleHeight));return[e,r]}(a);if(s)r.each(function(t){var e=t[0].height;c.setTranslate(this,u+_[0],u+_[1]+a._height+e/2+d),a._height+=e,a._width=Math.max(a._width,t[0].width)}),x=f+a._width,a._width+=d+f+h,a._height+=g,l&&(e.each(function(t,e){c.setTranslate(this,0,e*a.tracegroupgap)}),a._height+=(a._lgroupsLength-1)*a.tracegroupgap);else{var w=A(a),k=a.x<0||0===a.x&&"right"===w,T=a.x>1||1===a.x&&"left"===w,M=y||m,E=i.width/2;a._maxWidth=Math.max(k?M&&"left"===w?o.l+o.w:E:T?M&&"right"===w?o.r+o.w:E:o.w,2*f);var L=0,C=0;r.each(function(t){var e=t[0].width+f;L=Math.max(L,e),C+=e}),x=null;var P=0;if(l){var O=0,z=0,I=0;e.each(function(){var t=0,e=0;n.select(this).selectAll("g.traces").each(function(r){var n=r[0].height;c.setTranslate(this,_[0],_[1]+u+d+n/2+e),e+=n,t=Math.max(t,f+r[0].width)}),O=Math.max(O,e);var r=t+d;r+u+z>a._maxWidth&&(P=Math.max(P,z),z=0,I+=O+a.tracegroupgap,O=e),c.setTranslate(this,z,I),z+=r}),a._width=Math.max(P,z)+u,a._height=I+O+g}else{var D=r.size(),R=C+h+(D-1)*d<a._maxWidth,F=0,B=0,N=0,j=0;r.each(function(t){var e=t[0].height,r=f+t[0].width,n=(R?r:L)+d;n+u+B>a._maxWidth&&(P=Math.max(P,j),B=0,N+=F,a._height+=F,F=0),c.setTranslate(this,_[0]+u+B,_[1]+u+N+e/2+d),j=B+r+d,B+=n,F=Math.max(F,e)}),R?(a._width=B+h,a._height=F+g):(a._width=Math.max(P,j)+h,a._height+=F+g)}}a._width=Math.ceil(Math.max(a._width+_[0],a._titleWidth+2*(u+p.titlePad))),a._height=Math.ceil(Math.max(a._height+_[1],a._titleHeight+2*(u+p.itemGap))),a._effHeight=Math.min(a._height,a._maxHeight);var V=t._context.edits,U=V.legendText||V.legendPosition;r.each(function(t){var e=n.select(this).select(".legendtoggle"),r=t[0].height,a=U?f:x||f+t[0].width;s||(a+=d/2),c.setRect(e,0,-r/2,a,r)})}(t,z,I,e)},function(){if(!e._main||!function(t){var e=t._fullLayout.legend,r=A(e),n=S(e);return i.autoMargin(t,"legend",{x:e.x,y:e.y,l:e._width*v[r],r:e._width*m[r],b:e._effHeight*m[n],t:e._effHeight*v[n]})}(t)){var u,f,d,y,x=s._size,b=e.borderwidth,w=x.l+x.w*e.x-v[A(e)]*e._width,T=x.t+x.h*(1-e.y)-v[S(e)]*e._effHeight;if(e._main&&s.margin.autoexpand){var M=w,C=T;w=a.constrain(w,0,s.width-e._width),T=a.constrain(T,0,s.height-e._effHeight),w!==M&&a.log("Constrain legend.x to make legend fit inside graph"),T!==C&&a.log("Constrain legend.y to make legend fit inside graph")}if(e._main&&c.setTranslate(g,w,T),O.on(".drag",null),g.on("wheel",null),!e._main||e._height<=e._maxHeight||t._context.staticPlot){var P=e._effHeight;e._main||(P=e._height),E.attr({width:e._width-b,height:P-b,x:b/2,y:b/2}),c.setTranslate(L,0,0),k.select("rect").attr({width:e._width-2*b,height:P-2*b,x:b,y:b}),c.setClipUrl(L,h,t),c.setRect(O,0,0,0,0),delete e._scrollY}else{var z,I,D,R=Math.max(p.scrollBarMinHeight,e._effHeight*e._effHeight/e._height),F=e._effHeight-R-2*p.scrollBarMargin,B=e._height-e._effHeight,N=F/B,j=Math.min(e._scrollY||0,B);E.attr({width:e._width-2*b+p.scrollBarWidth+p.scrollBarMargin,height:e._effHeight-b,x:b/2,y:b/2}),k.select("rect").attr({width:e._width-2*b+p.scrollBarWidth+p.scrollBarMargin,height:e._effHeight-2*b,x:b,y:b+j}),c.setClipUrl(L,h,t),q(j,R,N),g.on("wheel",function(){q(j=a.constrain(e._scrollY+n.event.deltaY/F*B,0,B),R,N),0!==j&&j!==B&&n.event.preventDefault()});var V=n.behavior.drag().on("dragstart",function(){var t=n.event.sourceEvent;z="touchstart"===t.type?t.changedTouches[0].clientY:t.clientY,D=j}).on("drag",function(){var t=n.event.sourceEvent;2===t.buttons||t.ctrlKey||(I="touchmove"===t.type?t.changedTouches[0].clientY:t.clientY,q(j=function(t,e,r){var n=(r-e)/N+t;return a.constrain(n,0,B)}(D,z,I),R,N))});O.call(V);var U=n.behavior.drag().on("dragstart",function(){var t=n.event.sourceEvent;"touchstart"===t.type&&(z=t.changedTouches[0].clientY,D=j)}).on("drag",function(){var t=n.event.sourceEvent;"touchmove"===t.type&&(I=t.changedTouches[0].clientY,q(j=function(t,e,r){var n=(e-r)/N+t;return a.constrain(n,0,B)}(D,z,I),R,N))});L.call(U)}if(t._context.edits.legendPosition)g.classed("cursor-move",!0),l.init({element:g.node(),gd:t,prepFn:function(){var t=c.getTranslate(g);d=t.x,y=t.y},moveFn:function(t,r){var n=d+t,a=y+r;c.setTranslate(g,n,a),u=l.align(n,0,x.l,x.l+x.w,e.xanchor),f=l.align(a,0,x.t+x.h,x.t,e.yanchor)},doneFn:function(){void 0!==u&&void 0!==f&&o.call("_guiRelayout",t,{"legend.x":u,"legend.y":f})},clickFn:function(e,n){var a=r.selectAll("g.traces").filter(function(){var t=this.getBoundingClientRect();return n.clientX>=t.left&&n.clientX<=t.right&&n.clientY>=t.top&&n.clientY<=t.bottom});a.size()>0&&_(t,g,a,e,n)}})}function q(r,n,a){e._scrollY=t._fullLayout.legend._scrollY=r,c.setTranslate(L,0,-r),c.setRect(O,e._width,p.scrollBarMargin+r*a,p.scrollBarWidth,n),k.select("rect").attr("y",b+r)}}],t)}}},{"../../constants/alignment":686,"../../lib":717,"../../lib/events":707,"../../lib/svg_text_utils":741,"../../plots/plots":826,"../../registry":846,"../color":591,"../dragelement":609,"../drawing":612,"./constants":641,"./get_legend_data":644,"./handle_click":645,"./helpers":646,"./style":648,d3:165}],644:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("./helpers");e.exports=function(t,e){var r,i,o={},s=[],l=!1,c={},u=0,h=0,f=e._main;function p(t,r){if(""!==t&&a.isGrouped(e))-1===s.indexOf(t)?(s.push(t),l=!0,o[t]=[[r]]):o[t].push([r]);else{var n="~~i"+u;s.push(n),o[n]=[[r]],u++}}for(r=0;r<t.length;r++){var d=t[r],g=d[0],v=g.trace,m=v.legendgroup;if(!f||v.visible&&v.showlegend)if(n.traceIs(v,"pie-like"))for(c[m]||(c[m]={}),i=0;i<d.length;i++){var y=d[i].label;c[m][y]||(p(m,{label:y,color:d[i].color,i:d[i].i,trace:v,pts:d[i].pts}),c[m][y]=!0,h=Math.max(h,(y||"").length))}else p(m,g),h=Math.max(h,(v.name||"").length)}if(!s.length)return[];var x,b,_=s.length;if(l&&a.isGrouped(e))for(b=new Array(_),r=0;r<_;r++)x=o[s[r]],b[r]=a.isReversed(e)?x.reverse():x;else{for(b=[new Array(_)],r=0;r<_;r++)x=o[s[r]][0],b[0][a.isReversed(e)?_-r-1:r]=x;_=1}return e._lgroupsLength=_,e._maxNameLength=h,b}},{"../../registry":846,"./helpers":646}],645:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../registry"),i=!0;e.exports=function(t,e,r){var o=e._fullLayout;if(!e._dragged&&!e._editing){var s,l=o.legend.itemclick,c=o.legend.itemdoubleclick;if(1===r&&"toggle"===l&&"toggleothers"===c&&i&&e.data&&e._context.showTips?(n.notifier(n._(e,"Double-click on legend to isolate one trace"),"long"),i=!1):i=!1,1===r?s=l:2===r&&(s=c),s){var u,h,f,p,d,g=o.hiddenlabels?o.hiddenlabels.slice():[],v=t.data()[0][0],m=e._fullData,y=v.trace,x=y.legendgroup,b={},_=[],w=[],k=[];if(a.traceIs(y,"pie-like")){var T=v.label,M=g.indexOf(T);"toggle"===s?-1===M?g.push(T):g.splice(M,1):"toggleothers"===s&&(g=[],e.calcdata[0].forEach(function(t){T!==t.label&&g.push(t.label)}),e._fullLayout.hiddenlabels&&e._fullLayout.hiddenlabels.length===g.length&&-1===M&&(g=[])),a.call("_guiRelayout",e,"hiddenlabels",g)}else{var A,S=x&&x.length,E=[];if(S)for(u=0;u<m.length;u++)(A=m[u]).visible&&A.legendgroup===x&&E.push(u);if("toggle"===s){var L;switch(y.visible){case!0:L="legendonly";break;case!1:L=!1;break;case"legendonly":L=!0}if(S)for(u=0;u<m.length;u++)!1!==m[u].visible&&m[u].legendgroup===x&&B(m[u],L);else B(y,L)}else if("toggleothers"===s){var C,P,O,z,I=!0;for(u=0;u<m.length;u++)if(C=m[u]===y,O=!0!==m[u].showlegend,!(C||O||(P=S&&m[u].legendgroup===x)||!0!==m[u].visible||a.traceIs(m[u],"notLegendIsolatable"))){I=!1;break}for(u=0;u<m.length;u++)if(!1!==m[u].visible&&!a.traceIs(m[u],"notLegendIsolatable"))switch(y.visible){case"legendonly":B(m[u],!0);break;case!0:z=!!I||"legendonly",C=m[u]===y,O=!0!==m[u].showlegend&&!m[u].legendgroup,P=C||S&&m[u].legendgroup===x,B(m[u],!(!P&&!O)||z)}}for(u=0;u<w.length;u++)if(f=w[u]){var D=f.constructUpdate(),R=Object.keys(D);for(h=0;h<R.length;h++)p=R[h],(b[p]=b[p]||[])[k[u]]=D[p]}for(d=Object.keys(b),u=0;u<d.length;u++)for(p=d[u],h=0;h<_.length;h++)b[p].hasOwnProperty(h)||(b[p][h]=void 0);a.call("_guiRestyle",e,b,_)}}}function F(t,e,r){var n=_.indexOf(t),a=b[e];return a||(a=b[e]=[]),-1===_.indexOf(t)&&(_.push(t),n=_.length-1),a[n]=r,n}function B(t,e){var r=t._fullInput;if(a.hasTransform(r,"groupby")){var i=w[r.index];if(!i){var o=a.getTransformIndices(r,"groupby"),s=o[o.length-1];i=n.keyedContainer(r,"transforms["+s+"].styles","target","value.visible"),w[r.index]=i}var l=i.get(t._group);void 0===l&&(l=!0),!1!==l&&i.set(t._group,e),k[r.index]=F(r.index,"visible",!1!==r.visible)}else{var c=!1!==r.visible&&e;F(r.index,"visible",c)}}}},{"../../lib":717,"../../registry":846}],646:[function(t,e,r){"use strict";r.isGrouped=function(t){return-1!==(t.traceorder||"").indexOf("grouped")},r.isVertical=function(t){return"h"!==t.orientation},r.isReversed=function(t){return-1!==(t.traceorder||"").indexOf("reversed")}},{}],647:[function(t,e,r){"use strict";e.exports={moduleType:"component",name:"legend",layoutAttributes:t("./attributes"),supplyLayoutDefaults:t("./defaults"),draw:t("./draw"),style:t("./style")}},{"./attributes":640,"./defaults":642,"./draw":643,"./style":648}],648:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../lib"),o=t("../drawing"),s=t("../color"),l=t("../colorscale/helpers").extractOpts,c=t("../../traces/scatter/subtypes"),u=t("../../traces/pie/style_one"),h=t("../../traces/pie/helpers").castOption,f=12,p=5,d=2,g=10,v=5;function m(t,e){return(e?"radial":"horizontal")+(t?"":"reversed")}e.exports=function(t,e,r){var y=e._fullLayout;r||(r=y.legend);var x="constant"===r.itemsizing,b=function(t,e,r,n){var a;if(t+1)a=t;else{if(!(e&&e.width>0))return 0;a=e.width}return x?n:Math.min(a,r)};function _(t,e,r){var i=t[0].trace,o=i.marker||{},l=o.line||{},c=r?i.visible&&i.type===r:a.traceIs(i,"bar"),u=n.select(e).select("g.legendpoints").selectAll("path.legend"+r).data(c?[t]:[]);u.enter().append("path").classed("legend"+r,!0).attr("d","M6,6H-6V-6H6Z").attr("transform","translate(20,0)"),u.exit().remove(),u.each(function(t){var e=n.select(this),r=t[0],a=b(r.mlw,o.line,v,d);e.style("stroke-width",a+"px").call(s.fill,r.mc||o.color),a&&s.stroke(e,r.mlc||l.color)})}function w(t,e,r){var o=t[0],s=o.trace,l=r?s.visible&&s.type===r:a.traceIs(s,r),c=n.select(e).select("g.legendpoints").selectAll("path.legend"+r).data(l?[t]:[]);if(c.enter().append("path").classed("legend"+r,!0).attr("d","M6,6H-6V-6H6Z").attr("transform","translate(20,0)"),c.exit().remove(),c.size()){var f=(s.marker||{}).line,p=b(h(f.width,o.pts),f,v,d),g=i.minExtend(s,{marker:{line:{width:p}}});g.marker.line.color=f.color;var m=i.minExtend(o,{trace:g});u(c,m,g)}}t.each(function(t){var e=n.select(this),a=i.ensureSingle(e,"g","layers");a.style("opacity",t[0].trace.opacity);var o=r.valign,s=t[0].lineHeight,l=t[0].height;if("middle"!==o&&s&&l){var c={top:1,bottom:-1}[o]*(.5*(s-l+3));a.attr("transform","translate(0,"+c+")")}else a.attr("transform",null);a.selectAll("g.legendfill").data([t]).enter().append("g").classed("legendfill",!0),a.selectAll("g.legendlines").data([t]).enter().append("g").classed("legendlines",!0);var u=a.selectAll("g.legendsymbols").data([t]);u.enter().append("g").classed("legendsymbols",!0),u.selectAll("g.legendpoints").data([t]).enter().append("g").classed("legendpoints",!0)}).each(function(t){var r,a=t[0].trace,c=[];if(a.visible)switch(a.type){case"histogram2d":case"heatmap":c=[["M-15,-2V4H15V-2Z"]],r=!0;break;case"choropleth":case"choroplethmapbox":c=[["M-6,-6V6H6V-6Z"]],r=!0;break;case"densitymapbox":c=[["M-6,0 a6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0"]],r="radial";break;case"cone":c=[["M-6,2 A2,2 0 0,0 -6,6 V6L6,4Z"],["M-6,-6 A2,2 0 0,0 -6,-2 L6,-4Z"],["M-6,-2 A2,2 0 0,0 -6,2 L6,0Z"]],r=!1;break;case"streamtube":c=[["M-6,2 A2,2 0 0,0 -6,6 H6 A2,2 0 0,1 6,2 Z"],["M-6,-6 A2,2 0 0,0 -6,-2 H6 A2,2 0 0,1 6,-6 Z"],["M-6,-2 A2,2 0 0,0 -6,2 H6 A2,2 0 0,1 6,-2 Z"]],r=!1;break;case"surface":c=[["M-6,-6 A2,3 0 0,0 -6,0 H6 A2,3 0 0,1 6,-6 Z"],["M-6,1 A2,3 0 0,1 -6,6 H6 A2,3 0 0,0 6,0 Z"]],r=!0;break;case"mesh3d":c=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6H6L0,6Z"]],r=!1;break;case"volume":c=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6H6L0,6Z"]],r=!0;break;case"isosurface":c=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6 A12,24 0 0,0 6,-6 L0,6Z"]],r=!1}var u=n.select(this).select("g.legendpoints").selectAll("path.legend3dandfriends").data(c);u.enter().append("path").classed("legend3dandfriends",!0).attr("transform","translate(20,0)").style("stroke-miterlimit",1),u.exit().remove(),u.each(function(t,c){var u,h=n.select(this),f=l(a),p=f.colorscale,d=f.reversescale;if(p){if(!r){var g=p.length;u=0===c?p[d?g-1:0][1]:1===c?p[d?0:g-1][1]:p[Math.floor((g-1)/2)][1]}}else{var v=a.vertexcolor||a.facecolor||a.color;u=i.isArrayOrTypedArray(v)?v[c]||v[0]:v}h.attr("d",t[0]),u?h.call(s.fill,u):h.call(function(t){if(t.size()){var n="legendfill-"+a.uid;o.gradient(t,e,n,m(d,"radial"===r),p,"fill")}})})}).each(function(t){var e=t[0].trace,r="waterfall"===e.type;if(t[0]._distinct&&r){var a=t[0].trace[t[0].dir].marker;return t[0].mc=a.color,t[0].mlw=a.line.width,t[0].mlc=a.line.color,_(t,this,"waterfall")}var i=[];e.visible&&r&&(i=t[0].hasTotals?[["increasing","M-6,-6V6H0Z"],["totals","M6,6H0L-6,-6H-0Z"],["decreasing","M6,6V-6H0Z"]]:[["increasing","M-6,-6V6H6Z"],["decreasing","M6,6V-6H-6Z"]]);var o=n.select(this).select("g.legendpoints").selectAll("path.legendwaterfall").data(i);o.enter().append("path").classed("legendwaterfall",!0).attr("transform","translate(20,0)").style("stroke-miterlimit",1),o.exit().remove(),o.each(function(t){var r=n.select(this),a=e[t[0]].marker,i=b(void 0,a.line,v,d);r.attr("d",t[1]).style("stroke-width",i+"px").call(s.fill,a.color),i&&r.call(s.stroke,a.line.color)})}).each(function(t){_(t,this,"funnel")}).each(function(t){_(t,this)}).each(function(t){var r=t[0].trace,l=n.select(this).select("g.legendpoints").selectAll("path.legendbox").data(r.visible&&a.traceIs(r,"box-violin")?[t]:[]);l.enter().append("path").classed("legendbox",!0).attr("d","M6,6H-6V-6H6Z").attr("transform","translate(20,0)"),l.exit().remove(),l.each(function(){var t=n.select(this);if("all"!==r.boxpoints&&"all"!==r.points||0!==s.opacity(r.fillcolor)||0!==s.opacity((r.line||{}).color)){var a=b(void 0,r.line,v,d);t.style("stroke-width",a+"px").call(s.fill,r.fillcolor),a&&s.stroke(t,r.line.color)}else{var c=i.minExtend(r,{marker:{size:x?f:i.constrain(r.marker.size,2,16),sizeref:1,sizemin:1,sizemode:"diameter"}});l.call(o.pointStyle,c,e)}})}).each(function(t){w(t,this,"funnelarea")}).each(function(t){w(t,this,"pie")}).each(function(t){var r,a,s=t[0],u=s.trace,h=u.visible&&u.fill&&"none"!==u.fill,f=c.hasLines(u),d=u.contours,v=!1,y=!1,x=l(u),_=x.colorscale,w=x.reversescale;if(d){var k=d.coloring;"lines"===k?v=!0:f="none"===k||"heatmap"===k||d.showlines,"constraint"===d.type?h="="!==d._operation:"fill"!==k&&"heatmap"!==k||(y=!0)}var T=c.hasMarkers(u)||c.hasText(u),M=h||y,A=f||v,S=T||!M?"M5,0":A?"M5,-2":"M5,-3",E=n.select(this),L=E.select(".legendfill").selectAll("path").data(h||y?[t]:[]);if(L.enter().append("path").classed("js-fill",!0),L.exit().remove(),L.attr("d",S+"h30v6h-30z").call(h?o.fillGroupStyle:function(t){if(t.size()){var r="legendfill-"+u.uid;o.gradient(t,e,r,m(w),_,"fill")}}),f||v){var C=b(void 0,u.line,g,p);a=i.minExtend(u,{line:{width:C}}),r=[i.minExtend(s,{trace:a})]}var P=E.select(".legendlines").selectAll("path").data(f||v?[r]:[]);P.enter().append("path").classed("js-line",!0),P.exit().remove(),P.attr("d",S+(v?"l30,0.0001":"h30")).call(f?o.lineGroupStyle:function(t){if(t.size()){var r="legendline-"+u.uid;o.lineGroupStyle(t),o.gradient(t,e,r,m(w),_,"stroke")}})}).each(function(t){var r,a,s=t[0],l=s.trace,u=c.hasMarkers(l),h=c.hasText(l),g=c.hasLines(l);function v(t,e,r,n){var a=i.nestedProperty(l,t).get(),o=i.isArrayOrTypedArray(a)&&e?e(a):a;if(x&&o&&void 0!==n&&(o=n),r){if(o<r[0])return r[0];if(o>r[1])return r[1]}return o}function m(t){return s._distinct&&s.index&&t[s.index]?t[s.index]:t[0]}if(u||h||g){var y={},b={};if(u){y.mc=v("marker.color",m),y.mx=v("marker.symbol",m),y.mo=v("marker.opacity",i.mean,[.2,1]),y.mlc=v("marker.line.color",m),y.mlw=v("marker.line.width",i.mean,[0,5],d),b.marker={sizeref:1,sizemin:1,sizemode:"diameter"};var _=v("marker.size",i.mean,[2,16],f);y.ms=_,b.marker.size=_}g&&(b.line={width:v("line.width",m,[0,10],p)}),h&&(y.tx="Aa",y.tp=v("textposition",m),y.ts=10,y.tc=v("textfont.color",m),y.tf=v("textfont.family",m)),r=[i.minExtend(s,y)],(a=i.minExtend(l,b)).selectedpoints=null,a.texttemplate=null}var w=n.select(this).select("g.legendpoints"),k=w.selectAll("path.scatterpts").data(u?r:[]);k.enter().insert("path",":first-child").classed("scatterpts",!0).attr("transform","translate(20,0)"),k.exit().remove(),k.call(o.pointStyle,a,e),u&&(r[0].mrc=3);var T=w.selectAll("g.pointtext").data(h?r:[]);T.enter().append("g").classed("pointtext",!0).append("text").attr("transform","translate(20,0)"),T.exit().remove(),T.selectAll("text").call(o.textPointStyle,a,e)}).each(function(t){var e=t[0].trace,r=n.select(this).select("g.legendpoints").selectAll("path.legendcandle").data(e.visible&&"candlestick"===e.type?[t,t]:[]);r.enter().append("path").classed("legendcandle",!0).attr("d",function(t,e){return e?"M-15,0H-8M-8,6V-6H8Z":"M15,0H8M8,-6V6H-8Z"}).attr("transform","translate(20,0)").style("stroke-miterlimit",1),r.exit().remove(),r.each(function(t,r){var a=n.select(this),i=e[r?"increasing":"decreasing"],o=b(void 0,i.line,v,d);a.style("stroke-width",o+"px").call(s.fill,i.fillcolor),o&&s.stroke(a,i.line.color)})}).each(function(t){var e=t[0].trace,r=n.select(this).select("g.legendpoints").selectAll("path.legendohlc").data(e.visible&&"ohlc"===e.type?[t,t]:[]);r.enter().append("path").classed("legendohlc",!0).attr("d",function(t,e){return e?"M-15,0H0M-8,-6V0":"M15,0H0M8,6V0"}).attr("transform","translate(20,0)").style("stroke-miterlimit",1),r.exit().remove(),r.each(function(t,r){var a=n.select(this),i=e[r?"increasing":"decreasing"],l=b(void 0,i.line,v,d);a.style("fill","none").call(o.dashLine,i.line.dash,l),l&&s.stroke(a,i.line.color)})})}},{"../../lib":717,"../../registry":846,"../../traces/pie/helpers":1099,"../../traces/pie/style_one":1105,"../../traces/scatter/subtypes":1144,"../color":591,"../colorscale/helpers":602,"../drawing":612,d3:165}],649:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../plots/plots"),i=t("../../plots/cartesian/axis_ids"),o=t("../../lib"),s=t("../../fonts/ploticon"),l=o._,c=e.exports={};function u(t,e){var r,a,o=e.currentTarget,s=o.getAttribute("data-attr"),l=o.getAttribute("data-val")||!0,c=t._fullLayout,u={},h=i.list(t,null,!0),f=c._cartesianSpikesEnabled;if("zoom"===s){var p,d="in"===l?.5:2,g=(1+d)/2,v=(1-d)/2;for(a=0;a<h.length;a++)if(!(r=h[a]).fixedrange)if(p=r._name,"auto"===l)u[p+".autorange"]=!0;else if("reset"===l){if(void 0===r._rangeInitial)u[p+".autorange"]=!0;else{var m=r._rangeInitial.slice();u[p+".range[0]"]=m[0],u[p+".range[1]"]=m[1]}void 0!==r._showSpikeInitial&&(u[p+".showspikes"]=r._showSpikeInitial,"on"!==f||r._showSpikeInitial||(f="off"))}else{var y=[r.r2l(r.range[0]),r.r2l(r.range[1])],x=[g*y[0]+v*y[1],g*y[1]+v*y[0]];u[p+".range[0]"]=r.l2r(x[0]),u[p+".range[1]"]=r.l2r(x[1])}}else"hovermode"!==s||"x"!==l&&"y"!==l||(l=c._isHoriz?"y":"x",o.setAttribute("data-val",l)),u[s]=l;c._cartesianSpikesEnabled=f,n.call("_guiRelayout",t,u)}function h(t,e){for(var r=e.currentTarget,a=r.getAttribute("data-attr"),i=r.getAttribute("data-val")||!0,o=t._fullLayout._subplots.gl3d||[],s={},l=a.split("."),c=0;c<o.length;c++)s[o[c]+"."+l[1]]=i;var u="pan"===i?i:"zoom";s.dragmode=u,n.call("_guiRelayout",t,s)}function f(t,e){for(var r=e.currentTarget.getAttribute("data-attr"),a=t._fullLayout,i=a._subplots.gl3d||[],o={},s=0;s<i.length;s++){var l,c=i[s],u=c+".camera",h=c+".aspectratio",f=c+".aspectmode",p=a[c]._scene;"resetLastSave"===r?(o[u+".up"]=p.viewInitial.up,o[u+".eye"]=p.viewInitial.eye,o[u+".center"]=p.viewInitial.center,l=!0):"resetDefault"===r&&(o[u+".up"]=null,o[u+".eye"]=null,o[u+".center"]=null,l=!0),l&&(o[h+".x"]=p.viewInitial.aspectratio.x,o[h+".y"]=p.viewInitial.aspectratio.y,o[h+".z"]=p.viewInitial.aspectratio.z,o[f]=p.viewInitial.aspectmode)}n.call("_guiRelayout",t,o)}function p(t,e){var r=e.currentTarget,n=r._previousVal,a=t._fullLayout,i=a._subplots.gl3d||[],o=["xaxis","yaxis","zaxis"],s={},l={};if(n)l=n,r._previousVal=null;else{for(var c=0;c<i.length;c++){var u=i[c],h=a[u],f=u+".hovermode";s[f]=h.hovermode,l[f]=!1;for(var p=0;p<3;p++){var d=o[p],g=u+"."+d+".showspikes";l[g]=!1,s[g]=h[d].showspikes}}r._previousVal=s}return l}function d(t,e){for(var r=e.currentTarget,a=r.getAttribute("data-attr"),i=r.getAttribute("data-val")||!0,o=t._fullLayout,s=o._subplots.geo||[],l=0;l<s.length;l++){var c=s[l],u=o[c];if("zoom"===a){var h=u.projection.scale,f="in"===i?2*h:.5*h;n.call("_guiRelayout",t,c+".projection.scale",f)}}"reset"===a&&y(t,"geo")}function g(t){var e=t._fullLayout;return!e.hovermode&&(e._has("cartesian")?e._isHoriz?"y":"x":"closest")}function v(t){var e=g(t);n.call("_guiRelayout",t,"hovermode",e)}function m(t,e){for(var r=e.currentTarget.getAttribute("data-val"),a=t._fullLayout,i=a._subplots.mapbox||[],o={},s=0;s<i.length;s++){var l=i[s],c=a[l].zoom,u="in"===r?1.05*c:c/1.05;o[l+".zoom"]=u}n.call("_guiRelayout",t,o)}function y(t,e){for(var r=t._fullLayout,a=r._subplots[e]||[],i={},o=0;o<a.length;o++)for(var s=a[o],l=r[s]._subplot.viewInitial,c=Object.keys(l),u=0;u<c.length;u++){var h=c[u];i[s+"."+h]=l[h]}n.call("_guiRelayout",t,i)}c.toImage={name:"toImage",title:function(t){var e=(t._context.toImageButtonOptions||{}).format||"png";return l(t,"png"===e?"Download plot as a png":"Download plot")},icon:s.camera,click:function(t){var e=t._context.toImageButtonOptions,r={format:e.format||"png"};o.notifier(l(t,"Taking snapshot - this may take a few seconds"),"long"),"svg"!==r.format&&o.isIE()&&(o.notifier(l(t,"IE only supports svg. Changing format to svg."),"long"),r.format="svg"),["filename","width","height","scale"].forEach(function(t){t in e&&(r[t]=e[t])}),n.call("downloadImage",t,r).then(function(e){o.notifier(l(t,"Snapshot succeeded")+" - "+e,"long")}).catch(function(){o.notifier(l(t,"Sorry, there was a problem downloading your snapshot!"),"long")})}},c.sendDataToCloud={name:"sendDataToCloud",title:function(t){return l(t,"Edit in Chart Studio")},icon:s.disk,click:function(t){a.sendDataToCloud(t)}},c.editInChartStudio={name:"editInChartStudio",title:function(t){return l(t,"Edit in Chart Studio")},icon:s.pencil,click:function(t){a.sendDataToCloud(t)}},c.zoom2d={name:"zoom2d",title:function(t){return l(t,"Zoom")},attr:"dragmode",val:"zoom",icon:s.zoombox,click:u},c.pan2d={name:"pan2d",title:function(t){return l(t,"Pan")},attr:"dragmode",val:"pan",icon:s.pan,click:u},c.select2d={name:"select2d",title:function(t){return l(t,"Box Select")},attr:"dragmode",val:"select",icon:s.selectbox,click:u},c.lasso2d={name:"lasso2d",title:function(t){return l(t,"Lasso Select")},attr:"dragmode",val:"lasso",icon:s.lasso,click:u},c.zoomIn2d={name:"zoomIn2d",title:function(t){return l(t,"Zoom in")},attr:"zoom",val:"in",icon:s.zoom_plus,click:u},c.zoomOut2d={name:"zoomOut2d",title:function(t){return l(t,"Zoom out")},attr:"zoom",val:"out",icon:s.zoom_minus,click:u},c.autoScale2d={name:"autoScale2d",title:function(t){return l(t,"Autoscale")},attr:"zoom",val:"auto",icon:s.autoscale,click:u},c.resetScale2d={name:"resetScale2d",title:function(t){return l(t,"Reset axes")},attr:"zoom",val:"reset",icon:s.home,click:u},c.hoverClosestCartesian={name:"hoverClosestCartesian",title:function(t){return l(t,"Show closest data on hover")},attr:"hovermode",val:"closest",icon:s.tooltip_basic,gravity:"ne",click:u},c.hoverCompareCartesian={name:"hoverCompareCartesian",title:function(t){return l(t,"Compare data on hover")},attr:"hovermode",val:function(t){return t._fullLayout._isHoriz?"y":"x"},icon:s.tooltip_compare,gravity:"ne",click:u},c.zoom3d={name:"zoom3d",title:function(t){return l(t,"Zoom")},attr:"scene.dragmode",val:"zoom",icon:s.zoombox,click:h},c.pan3d={name:"pan3d",title:function(t){return l(t,"Pan")},attr:"scene.dragmode",val:"pan",icon:s.pan,click:h},c.orbitRotation={name:"orbitRotation",title:function(t){return l(t,"Orbital rotation")},attr:"scene.dragmode",val:"orbit",icon:s["3d_rotate"],click:h},c.tableRotation={name:"tableRotation",title:function(t){return l(t,"Turntable rotation")},attr:"scene.dragmode",val:"turntable",icon:s["z-axis"],click:h},c.resetCameraDefault3d={name:"resetCameraDefault3d",title:function(t){return l(t,"Reset camera to default")},attr:"resetDefault",icon:s.home,click:f},c.resetCameraLastSave3d={name:"resetCameraLastSave3d",title:function(t){return l(t,"Reset camera to last save")},attr:"resetLastSave",icon:s.movie,click:f},c.hoverClosest3d={name:"hoverClosest3d",title:function(t){return l(t,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:s.tooltip_basic,gravity:"ne",click:function(t,e){var r=p(t,e);n.call("_guiRelayout",t,r)}},c.zoomInGeo={name:"zoomInGeo",title:function(t){return l(t,"Zoom in")},attr:"zoom",val:"in",icon:s.zoom_plus,click:d},c.zoomOutGeo={name:"zoomOutGeo",title:function(t){return l(t,"Zoom out")},attr:"zoom",val:"out",icon:s.zoom_minus,click:d},c.resetGeo={name:"resetGeo",title:function(t){return l(t,"Reset")},attr:"reset",val:null,icon:s.autoscale,click:d},c.hoverClosestGeo={name:"hoverClosestGeo",title:function(t){return l(t,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:s.tooltip_basic,gravity:"ne",click:v},c.hoverClosestGl2d={name:"hoverClosestGl2d",title:function(t){return l(t,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:s.tooltip_basic,gravity:"ne",click:v},c.hoverClosestPie={name:"hoverClosestPie",title:function(t){return l(t,"Toggle show closest data on hover")},attr:"hovermode",val:"closest",icon:s.tooltip_basic,gravity:"ne",click:v},c.resetViewSankey={name:"resetSankeyGroup",title:function(t){return l(t,"Reset view")},icon:s.home,click:function(t){for(var e={"node.groups":[],"node.x":[],"node.y":[]},r=0;r<t._fullData.length;r++){var a=t._fullData[r]._viewInitial;e["node.groups"].push(a.node.groups.slice()),e["node.x"].push(a.node.x.slice()),e["node.y"].push(a.node.y.slice())}n.call("restyle",t,e)}},c.toggleHover={name:"toggleHover",title:function(t){return l(t,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:s.tooltip_basic,gravity:"ne",click:function(t,e){var r=p(t,e);r.hovermode=g(t),n.call("_guiRelayout",t,r)}},c.resetViews={name:"resetViews",title:function(t){return l(t,"Reset views")},icon:s.home,click:function(t,e){var r=e.currentTarget;r.setAttribute("data-attr","zoom"),r.setAttribute("data-val","reset"),u(t,e),r.setAttribute("data-attr","resetLastSave"),f(t,e),y(t,"geo"),y(t,"mapbox")}},c.toggleSpikelines={name:"toggleSpikelines",title:function(t){return l(t,"Toggle Spike Lines")},icon:s.spikeline,attr:"_cartesianSpikesEnabled",val:"on",click:function(t){var e=t._fullLayout,r=e._cartesianSpikesEnabled;e._cartesianSpikesEnabled="on"===r?"off":"on",n.call("_guiRelayout",t,function(t){for(var e="on"===t._fullLayout._cartesianSpikesEnabled,r=i.list(t,null,!0),n={},a=0;a<r.length;a++){var o=r[a];n[o._name+".showspikes"]=!!e||o._showSpikeInitial}return n}(t))}},c.resetViewMapbox={name:"resetViewMapbox",title:function(t){return l(t,"Reset view")},attr:"reset",icon:s.home,click:function(t){y(t,"mapbox")}},c.zoomInMapbox={name:"zoomInMapbox",title:function(t){return l(t,"Zoom in")},attr:"zoom",val:"in",icon:s.zoom_plus,click:m},c.zoomOutMapbox={name:"zoomOutMapbox",title:function(t){return l(t,"Zoom out")},attr:"zoom",val:"out",icon:s.zoom_minus,click:m}},{"../../fonts/ploticon":697,"../../lib":717,"../../plots/cartesian/axis_ids":768,"../../plots/plots":826,"../../registry":846}],650:[function(t,e,r){"use strict";r.manage=t("./manage")},{"./manage":651}],651:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axis_ids"),a=t("../../traces/scatter/subtypes"),i=t("../../registry"),o=t("../fx/helpers").isUnifiedHover,s=t("./modebar"),l=t("./buttons");e.exports=function(t){var e=t._fullLayout,r=t._context,c=e._modeBar;if(r.displayModeBar||r.watermark){if(!Array.isArray(r.modeBarButtonsToRemove))throw new Error(["*modeBarButtonsToRemove* configuration options","must be an array."].join(" "));if(!Array.isArray(r.modeBarButtonsToAdd))throw new Error(["*modeBarButtonsToAdd* configuration options","must be an array."].join(" "));var u,h=r.modeBarButtons;u=Array.isArray(h)&&h.length?function(t){for(var e=0;e<t.length;e++)for(var r=t[e],n=0;n<r.length;n++){var a=r[n];if("string"==typeof a){if(void 0===l[a])throw new Error(["*modeBarButtons* configuration options","invalid button name"].join(" "));t[e][n]=l[a]}}return t}(h):!r.displayModeBar&&r.watermark?[]:function(t){var e=t._fullLayout,r=t._fullData,s=t._context,c=s.modeBarButtonsToRemove,u=s.modeBarButtonsToAdd,h=e._has("cartesian"),f=e._has("gl3d"),p=e._has("geo"),d=e._has("pie"),g=e._has("funnelarea"),v=e._has("gl2d"),m=e._has("ternary"),y=e._has("mapbox"),x=e._has("polar"),b=e._has("sankey"),_=function(t){for(var e=n.list({_fullLayout:t},null,!0),r=0;r<e.length;r++)if(!e[r].fixedrange)return!1;return!0}(e),w=o(e.hovermode),k=[];function T(t){if(t.length){for(var e=[],r=0;r<t.length;r++){var n=t[r];-1===c.indexOf(n)&&e.push(l[n])}k.push(e)}}var M=["toImage"];s.showEditInChartStudio?M.push("editInChartStudio"):s.showSendToCloud&&M.push("sendDataToCloud");T(M);var A=[],S=[],E=[],L=[];(h||v||d||g||m)+p+f+y+x>1?(S=["toggleHover"],E=["resetViews"]):p?(A=["zoomInGeo","zoomOutGeo"],S=["hoverClosestGeo"],E=["resetGeo"]):f?(S=["hoverClosest3d"],E=["resetCameraDefault3d","resetCameraLastSave3d"]):y?(A=["zoomInMapbox","zoomOutMapbox"],S=["toggleHover"],E=["resetViewMapbox"]):v?S=["hoverClosestGl2d"]:d?S=["hoverClosestPie"]:b?(S=["hoverClosestCartesian","hoverCompareCartesian"],E=["resetViewSankey"]):S=["toggleHover"];h&&(S=["toggleSpikelines","hoverClosestCartesian","hoverCompareCartesian"]);(function(t){for(var e=0;e<t.length;e++)if(!i.traceIs(t[e],"noHover"))return!1;return!0}(r)||w)&&(S=[]);!h&&!v||_||(A=["zoomIn2d","zoomOut2d","autoScale2d"],"resetViews"!==E[0]&&(E=["resetScale2d"]));f?L=["zoom3d","pan3d","orbitRotation","tableRotation"]:(h||v)&&!_||m?L=["zoom2d","pan2d"]:y||p?L=["pan2d"]:x&&(L=["zoom2d"]);(function(t){for(var e=!1,r=0;r<t.length&&!e;r++){var n=t[r];n._module&&n._module.selectPoints&&(i.traceIs(n,"scatter-like")?(a.hasMarkers(n)||a.hasText(n))&&(e=!0):i.traceIs(n,"box-violin")&&"all"!==n.boxpoints&&"all"!==n.points||(e=!0))}return e})(r)&&L.push("select2d","lasso2d");return T(L),T(A.concat(E)),T(S),function(t,e){if(e.length)if(Array.isArray(e[0]))for(var r=0;r<e.length;r++)t.push(e[r]);else t.push(e);return t}(k,u)}(t),c?c.update(t,u):e._modeBar=s(t,u)}else c&&(c.destroy(),delete e._modeBar)}},{"../../plots/cartesian/axis_ids":768,"../../registry":846,"../../traces/scatter/subtypes":1144,"../fx/helpers":626,"./buttons":649,"./modebar":652}],652:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../../lib"),o=t("../../fonts/ploticon"),s=new DOMParser;function l(t){this.container=t.container,this.element=document.createElement("div"),this.update(t.graphInfo,t.buttons),this.container.appendChild(this.element)}var c=l.prototype;c.update=function(t,e){this.graphInfo=t;var r=this.graphInfo._context,n=this.graphInfo._fullLayout,a="modebar-"+n._uid;this.element.setAttribute("id",a),this._uid=a,this.element.className="modebar","hover"===r.displayModeBar&&(this.element.className+=" modebar--hover ease-bg"),"v"===n.modebar.orientation&&(this.element.className+=" vertical",e=e.reverse());var o=n.modebar,s="hover"===r.displayModeBar?".js-plotly-plot .plotly:hover ":"";i.deleteRelatedStyleRule(a),i.addRelatedStyleRule(a,s+"#"+a+" .modebar-group","background-color: "+o.bgcolor),i.addRelatedStyleRule(a,"#"+a+" .modebar-btn .icon path","fill: "+o.color),i.addRelatedStyleRule(a,"#"+a+" .modebar-btn:hover .icon path","fill: "+o.activecolor),i.addRelatedStyleRule(a,"#"+a+" .modebar-btn.active .icon path","fill: "+o.activecolor);var l=!this.hasButtons(e),c=this.hasLogo!==r.displaylogo,u=this.locale!==r.locale;if(this.locale=r.locale,(l||c||u)&&(this.removeAllButtons(),this.updateButtons(e),r.watermark||r.displaylogo)){var h=this.getLogo();r.watermark&&(h.className=h.className+" watermark"),"v"===n.modebar.orientation?this.element.insertBefore(h,this.element.childNodes[0]):this.element.appendChild(h),this.hasLogo=!0}this.updateActiveButton()},c.updateButtons=function(t){var e=this;this.buttons=t,this.buttonElements=[],this.buttonsNames=[],this.buttons.forEach(function(t){var r=e.createGroup();t.forEach(function(t){var n=t.name;if(!n)throw new Error("must provide button 'name' in button config");if(-1!==e.buttonsNames.indexOf(n))throw new Error("button name '"+n+"' is taken");e.buttonsNames.push(n);var a=e.createButton(t);e.buttonElements.push(a),r.appendChild(a)}),e.element.appendChild(r)})},c.createGroup=function(){var t=document.createElement("div");return t.className="modebar-group",t},c.createButton=function(t){var e=this,r=document.createElement("a");r.setAttribute("rel","tooltip"),r.className="modebar-btn";var a=t.title;void 0===a?a=t.name:"function"==typeof a&&(a=a(this.graphInfo)),(a||0===a)&&r.setAttribute("data-title",a),void 0!==t.attr&&r.setAttribute("data-attr",t.attr);var i=t.val;if(void 0!==i&&("function"==typeof i&&(i=i(this.graphInfo)),r.setAttribute("data-val",i)),"function"!=typeof t.click)throw new Error("must provide button 'click' function in button config");r.addEventListener("click",function(r){t.click(e.graphInfo,r),e.updateActiveButton(r.currentTarget)}),r.setAttribute("data-toggle",t.toggle||!1),t.toggle&&n.select(r).classed("active",!0);var s=t.icon;return"function"==typeof s?r.appendChild(s()):r.appendChild(this.createIcon(s||o.question)),r.setAttribute("data-gravity",t.gravity||"n"),r},c.createIcon=function(t){var e,r=a(t.height)?Number(t.height):t.ascent-t.descent,n="http://www.w3.org/2000/svg";if(t.path){(e=document.createElementNS(n,"svg")).setAttribute("viewBox",[0,0,t.width,r].join(" ")),e.setAttribute("class","icon");var i=document.createElementNS(n,"path");i.setAttribute("d",t.path),t.transform?i.setAttribute("transform",t.transform):void 0!==t.ascent&&i.setAttribute("transform","matrix(1 0 0 -1 0 "+t.ascent+")"),e.appendChild(i)}t.svg&&(e=s.parseFromString(t.svg,"application/xml").childNodes[0]);return e.setAttribute("height","1em"),e.setAttribute("width","1em"),e},c.updateActiveButton=function(t){var e=this.graphInfo._fullLayout,r=void 0!==t?t.getAttribute("data-attr"):null;this.buttonElements.forEach(function(t){var a=t.getAttribute("data-val")||!0,o=t.getAttribute("data-attr"),s="true"===t.getAttribute("data-toggle"),l=n.select(t);if(s)o===r&&l.classed("active",!l.classed("active"));else{var c=null===o?o:i.nestedProperty(e,o).get();l.classed("active",c===a)}})},c.hasButtons=function(t){var e=this.buttons;if(!e)return!1;if(t.length!==e.length)return!1;for(var r=0;r<t.length;++r){if(t[r].length!==e[r].length)return!1;for(var n=0;n<t[r].length;n++)if(t[r][n].name!==e[r][n].name)return!1}return!0},c.getLogo=function(){var t=this.createGroup(),e=document.createElement("a");return e.href="https://plotly.com/",e.target="_blank",e.setAttribute("data-title",i._(this.graphInfo,"Produced with Plotly")),e.className="modebar-btn plotlyjsicon modebar-btn--logo",e.appendChild(this.createIcon(o.newplotlylogo)),t.appendChild(e),t},c.removeAllButtons=function(){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.hasLogo=!1},c.destroy=function(){i.removeElement(this.container.querySelector(".modebar")),i.deleteRelatedStyleRule(this._uid)},e.exports=function(t,e){var r=t._fullLayout,a=new l({graphInfo:t,container:r._modebardiv.node(),buttons:e});return r._privateplot&&n.select(a.element).append("span").classed("badge-private float--left",!0).text("PRIVATE"),a}},{"../../fonts/ploticon":697,"../../lib":717,d3:165,"fast-isnumeric":228}],653:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),a=t("../color/attributes"),i=(0,t("../../plot_api/plot_template").templatedArray)("button",{visible:{valType:"boolean",dflt:!0,editType:"plot"},step:{valType:"enumerated",values:["month","year","day","hour","minute","second","all"],dflt:"month",editType:"plot"},stepmode:{valType:"enumerated",values:["backward","todate"],dflt:"backward",editType:"plot"},count:{valType:"number",min:0,dflt:1,editType:"plot"},label:{valType:"string",editType:"plot"},editType:"plot"});e.exports={visible:{valType:"boolean",editType:"plot"},buttons:i,x:{valType:"number",min:-2,max:3,editType:"plot"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left",editType:"plot"},y:{valType:"number",min:-2,max:3,editType:"plot"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"bottom",editType:"plot"},font:n({editType:"plot"}),bgcolor:{valType:"color",dflt:a.lightLine,editType:"plot"},activecolor:{valType:"color",editType:"plot"},bordercolor:{valType:"color",dflt:a.defaultLine,editType:"plot"},borderwidth:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"plot"}},{"../../plot_api/plot_template":755,"../../plots/font_attributes":791,"../color/attributes":590}],654:[function(t,e,r){"use strict";e.exports={yPad:.02,minButtonWidth:30,rx:3,ry:3,lightAmount:25,darkAmount:10}},{}],655:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../color"),i=t("../../plot_api/plot_template"),o=t("../../plots/array_container_defaults"),s=t("./attributes"),l=t("./constants");function c(t,e,r,a){var i=a.calendar;function o(r,a){return n.coerce(t,e,s.buttons,r,a)}if(o("visible")){var l=o("step");"all"!==l&&(!i||"gregorian"===i||"month"!==l&&"year"!==l?o("stepmode"):e.stepmode="backward",o("count")),o("label")}}e.exports=function(t,e,r,u,h){var f=t.rangeselector||{},p=i.newContainer(e,"rangeselector");function d(t,e){return n.coerce(f,p,s,t,e)}if(d("visible",o(f,p,{name:"buttons",handleItemDefaults:c,calendar:h}).length>0)){var g=function(t,e,r){for(var n=r.filter(function(r){return e[r].anchor===t._id}),a=0,i=0;i<n.length;i++){var o=e[n[i]].domain;o&&(a=Math.max(o[1],a))}return[t.domain[0],a+l.yPad]}(e,r,u);d("x",g[0]),d("y",g[1]),n.noneOrAll(t,e,["x","y"]),d("xanchor"),d("yanchor"),n.coerceFont(d,"font",r.font);var v=d("bgcolor");d("activecolor",a.contrast(v,l.lightAmount,l.darkAmount)),d("bordercolor"),d("borderwidth")}}},{"../../lib":717,"../../plot_api/plot_template":755,"../../plots/array_container_defaults":761,"../color":591,"./attributes":653,"./constants":654}],656:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../plots/plots"),o=t("../color"),s=t("../drawing"),l=t("../../lib"),c=t("../../lib/svg_text_utils"),u=t("../../plots/cartesian/axis_ids"),h=t("../../constants/alignment"),f=h.LINE_SPACING,p=h.FROM_TL,d=h.FROM_BR,g=t("./constants"),v=t("./get_update_object");function m(t){return t._id}function y(t,e,r){var n=l.ensureSingle(t,"rect","selector-rect",function(t){t.attr("shape-rendering","crispEdges")});n.attr({rx:g.rx,ry:g.ry}),n.call(o.stroke,e.bordercolor).call(o.fill,function(t,e){return e._isActive||e._isHovered?t.activecolor:t.bgcolor}(e,r)).style("stroke-width",e.borderwidth+"px")}function x(t,e,r,n){l.ensureSingle(t,"text","selector-text",function(t){t.classed("user-select-none",!0).attr("text-anchor","middle")}).call(s.font,e.font).text(function(t,e){if(t.label)return e?l.templateString(t.label,e):t.label;return"all"===t.step?"all":t.count+t.step.charAt(0)}(r,n._fullLayout._meta)).call(function(t){c.convertToTspans(t,n)})}e.exports=function(t){var e=t._fullLayout._infolayer.selectAll(".rangeselector").data(function(t){for(var e=u.list(t,"x",!0),r=[],n=0;n<e.length;n++){var a=e[n];a.rangeselector&&a.rangeselector.visible&&r.push(a)}return r}(t),m);e.enter().append("g").classed("rangeselector",!0),e.exit().remove(),e.style({cursor:"pointer","pointer-events":"all"}),e.each(function(e){var r=n.select(this),o=e,u=o.rangeselector,h=r.selectAll("g.button").data(l.filterVisible(u.buttons));h.enter().append("g").classed("button",!0),h.exit().remove(),h.each(function(e){var r=n.select(this),i=v(o,e);e._isActive=function(t,e,r){if("all"===e.step)return!0===t.autorange;var n=Object.keys(r);return t.range[0]===r[n[0]]&&t.range[1]===r[n[1]]}(o,e,i),r.call(y,u,e),r.call(x,u,e,t),r.on("click",function(){t._dragged||a.call("_guiRelayout",t,i)}),r.on("mouseover",function(){e._isHovered=!0,r.call(y,u,e)}),r.on("mouseout",function(){e._isHovered=!1,r.call(y,u,e)})}),function(t,e,r,a,o){var u=0,h=0,v=r.borderwidth;e.each(function(){var t=n.select(this),e=t.select(".selector-text"),a=r.font.size*f,i=Math.max(a*c.lineCount(e),16)+3;h=Math.max(h,i)}),e.each(function(){var t=n.select(this),e=t.select(".selector-rect"),a=t.select(".selector-text"),i=a.node()&&s.bBox(a.node()).width,o=r.font.size*f,l=c.lineCount(a),p=Math.max(i+10,g.minButtonWidth);t.attr("transform","translate("+(v+u)+","+v+")"),e.attr({x:0,y:0,width:p,height:h}),c.positionText(a,p/2,h/2-(l-1)*o/2+3),u+=p+5});var m=t._fullLayout._size,y=m.l+m.w*r.x,x=m.t+m.h*(1-r.y),b="left";l.isRightAnchor(r)&&(y-=u,b="right");l.isCenterAnchor(r)&&(y-=u/2,b="center");var _="top";l.isBottomAnchor(r)&&(x-=h,_="bottom");l.isMiddleAnchor(r)&&(x-=h/2,_="middle");u=Math.ceil(u),h=Math.ceil(h),y=Math.round(y),x=Math.round(x),i.autoMargin(t,a+"-range-selector",{x:r.x,y:r.y,l:u*p[b],r:u*d[b],b:h*d[_],t:h*p[_]}),o.attr("transform","translate("+y+","+x+")")}(t,h,u,o._name,r)})}},{"../../constants/alignment":686,"../../lib":717,"../../lib/svg_text_utils":741,"../../plots/cartesian/axis_ids":768,"../../plots/plots":826,"../../registry":846,"../color":591,"../drawing":612,"./constants":654,"./get_update_object":657,d3:165}],657:[function(t,e,r){"use strict";var n=t("d3");e.exports=function(t,e){var r=t._name,a={};if("all"===e.step)a[r+".autorange"]=!0;else{var i=function(t,e){var r,a=t.range,i=new Date(t.r2l(a[1])),o=e.step,s=e.count;switch(e.stepmode){case"backward":r=t.l2r(+n.time[o].utc.offset(i,-s));break;case"todate":var l=n.time[o].utc.offset(i,-s);r=t.l2r(+n.time[o].utc.ceil(l))}var c=a[1];return[r,c]}(t,e);a[r+".range[0]"]=i[0],a[r+".range[1]"]=i[1]}return a}},{d3:165}],658:[function(t,e,r){"use strict";e.exports={moduleType:"component",name:"rangeselector",schema:{subplots:{xaxis:{rangeselector:t("./attributes")}}},layoutAttributes:t("./attributes"),handleDefaults:t("./defaults"),draw:t("./draw")}},{"./attributes":653,"./defaults":655,"./draw":656}],659:[function(t,e,r){"use strict";var n=t("../color/attributes");e.exports={bgcolor:{valType:"color",dflt:n.background,editType:"plot"},bordercolor:{valType:"color",dflt:n.defaultLine,editType:"plot"},borderwidth:{valType:"integer",dflt:0,min:0,editType:"plot"},autorange:{valType:"boolean",dflt:!0,editType:"calc",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},range:{valType:"info_array",items:[{valType:"any",editType:"calc",impliedEdits:{"^autorange":!1}},{valType:"any",editType:"calc",impliedEdits:{"^autorange":!1}}],editType:"calc",impliedEdits:{autorange:!1}},thickness:{valType:"number",dflt:.15,min:0,max:1,editType:"plot"},visible:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc"}},{"../color/attributes":590}],660:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axis_ids").list,a=t("../../plots/cartesian/autorange").getAutoRange,i=t("./constants");e.exports=function(t){for(var e=n(t,"x",!0),r=0;r<e.length;r++){var o=e[r],s=o[i.name];s&&s.visible&&s.autorange&&(s._input.autorange=!0,s._input.range=s.range=a(t,o))}}},{"../../plots/cartesian/autorange":764,"../../plots/cartesian/axis_ids":768,"./constants":661}],661:[function(t,e,r){"use strict";e.exports={name:"rangeslider",containerClassName:"rangeslider-container",bgClassName:"rangeslider-bg",rangePlotClassName:"rangeslider-rangeplot",maskMinClassName:"rangeslider-mask-min",maskMaxClassName:"rangeslider-mask-max",slideBoxClassName:"rangeslider-slidebox",grabberMinClassName:"rangeslider-grabber-min",grabAreaMinClassName:"rangeslider-grabarea-min",handleMinClassName:"rangeslider-handle-min",grabberMaxClassName:"rangeslider-grabber-max",grabAreaMaxClassName:"rangeslider-grabarea-max",handleMaxClassName:"rangeslider-handle-max",maskMinOppAxisClassName:"rangeslider-mask-min-opp-axis",maskMaxOppAxisClassName:"rangeslider-mask-max-opp-axis",maskColor:"rgba(0,0,0,0.4)",maskOppAxisColor:"rgba(0,0,0,0.2)",slideBoxFill:"transparent",slideBoxCursor:"ew-resize",grabAreaFill:"transparent",grabAreaCursor:"col-resize",grabAreaWidth:10,handleWidth:4,handleRadius:1,handleStrokeWidth:1,extraPad:15}},{}],662:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plot_api/plot_template"),i=t("../../plots/cartesian/axis_ids"),o=t("./attributes"),s=t("./oppaxis_attributes");e.exports=function(t,e,r){var l=t[r],c=e[r];if(l.rangeslider||e._requestRangeslider[c._id]){n.isPlainObject(l.rangeslider)||(l.rangeslider={});var u,h,f=l.rangeslider,p=a.newContainer(c,"rangeslider");if(_("visible")){_("bgcolor",e.plot_bgcolor),_("bordercolor"),_("borderwidth"),_("thickness"),_("autorange",!c.isValidRange(f.range)),_("range");var d=e._subplots;if(d)for(var g=d.cartesian.filter(function(t){return t.substr(0,t.indexOf("y"))===i.name2id(r)}).map(function(t){return t.substr(t.indexOf("y"),t.length)}),v=n.simpleMap(g,i.id2name),m=0;m<v.length;m++){var y=v[m];u=f[y]||{},h=a.newContainer(p,y,"yaxis");var x,b=e[y];u.range&&b.isValidRange(u.range)&&(x="fixed"),"match"!==w("rangemode",x)&&w("range",b.range.slice())}p._input=f}}function _(t,e){return n.coerce(f,p,o,t,e)}function w(t,e){return n.coerce(u,h,s,t,e)}}},{"../../lib":717,"../../plot_api/plot_template":755,"../../plots/cartesian/axis_ids":768,"./attributes":659,"./oppaxis_attributes":666}],663:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../plots/plots"),o=t("../../lib"),s=t("../drawing"),l=t("../color"),c=t("../titles"),u=t("../../plots/cartesian"),h=t("../../plots/cartesian/axis_ids"),f=t("../dragelement"),p=t("../../lib/setcursor"),d=t("./constants");function g(t,e,r,n){var a=o.ensureSingle(t,"rect",d.bgClassName,function(t){t.attr({x:0,y:0,"shape-rendering":"crispEdges"})}),i=n.borderwidth%2==0?n.borderwidth:n.borderwidth-1,l=-n._offsetShift,c=s.crispRound(e,n.borderwidth);a.attr({width:n._width+i,height:n._height+i,transform:"translate("+l+","+l+")",fill:n.bgcolor,stroke:n.bordercolor,"stroke-width":c})}function v(t,e,r,n){var a=e._fullLayout;o.ensureSingleById(a._topdefs,"clipPath",n._clipId,function(t){t.append("rect").attr({x:0,y:0})}).select("rect").attr({width:n._width,height:n._height})}function m(t,e,r,a){var l,c=e.calcdata,f=t.selectAll("g."+d.rangePlotClassName).data(r._subplotsWith,o.identity);f.enter().append("g").attr("class",function(t){return d.rangePlotClassName+" "+t}).call(s.setClipUrl,a._clipId,e),f.order(),f.exit().remove(),f.each(function(t,o){var s=n.select(this),f=0===o,p=h.getFromId(e,t,"y"),d=p._name,g=a[d],v={data:[],layout:{xaxis:{type:r.type,domain:[0,1],range:a.range.slice(),calendar:r.calendar},width:a._width,height:a._height,margin:{t:0,b:0,l:0,r:0}},_context:e._context};r.rangebreaks&&(v.layout.xaxis.rangebreaks=r.rangebreaks),v.layout[d]={type:p.type,domain:[0,1],range:"match"!==g.rangemode?g.range.slice():p.range.slice(),calendar:p.calendar},p.rangebreaks&&(v.layout[d].rangebreaks=p.rangebreaks),i.supplyDefaults(v);var m=v._fullLayout.xaxis,y=v._fullLayout[d];m.clearCalc(),m.setScale(),y.clearCalc(),y.setScale();var x={id:t,plotgroup:s,xaxis:m,yaxis:y,isRangePlot:!0};f?l=x:(x.mainplot="xy",x.mainplotinfo=l),u.rangePlot(e,x,function(t,e){for(var r=[],n=0;n<t.length;n++){var a=t[n],i=a[0].trace;i.xaxis+i.yaxis===e&&r.push(a)}return r}(c,t))})}function y(t,e,r,n,a){(o.ensureSingle(t,"rect",d.maskMinClassName,function(t){t.attr({x:0,y:0,"shape-rendering":"crispEdges"})}).attr("height",n._height).call(l.fill,d.maskColor),o.ensureSingle(t,"rect",d.maskMaxClassName,function(t){t.attr({y:0,"shape-rendering":"crispEdges"})}).attr("height",n._height).call(l.fill,d.maskColor),"match"!==a.rangemode)&&(o.ensureSingle(t,"rect",d.maskMinOppAxisClassName,function(t){t.attr({y:0,"shape-rendering":"crispEdges"})}).attr("width",n._width).call(l.fill,d.maskOppAxisColor),o.ensureSingle(t,"rect",d.maskMaxOppAxisClassName,function(t){t.attr({y:0,"shape-rendering":"crispEdges"})}).attr("width",n._width).style("border-top",d.maskOppBorder).call(l.fill,d.maskOppAxisColor))}function x(t,e,r,n){e._context.staticPlot||o.ensureSingle(t,"rect",d.slideBoxClassName,function(t){t.attr({y:0,cursor:d.slideBoxCursor,"shape-rendering":"crispEdges"})}).attr({height:n._height,fill:d.slideBoxFill})}function b(t,e,r,n){var a=o.ensureSingle(t,"g",d.grabberMinClassName),i=o.ensureSingle(t,"g",d.grabberMaxClassName),s={x:0,width:d.handleWidth,rx:d.handleRadius,fill:l.background,stroke:l.defaultLine,"stroke-width":d.handleStrokeWidth,"shape-rendering":"crispEdges"},c={y:Math.round(n._height/4),height:Math.round(n._height/2)};if(o.ensureSingle(a,"rect",d.handleMinClassName,function(t){t.attr(s)}).attr(c),o.ensureSingle(i,"rect",d.handleMaxClassName,function(t){t.attr(s)}).attr(c),!e._context.staticPlot){var u={width:d.grabAreaWidth,x:0,y:0,fill:d.grabAreaFill,cursor:d.grabAreaCursor};o.ensureSingle(a,"rect",d.grabAreaMinClassName,function(t){t.attr(u)}).attr("height",n._height),o.ensureSingle(i,"rect",d.grabAreaMaxClassName,function(t){t.attr(u)}).attr("height",n._height)}}e.exports=function(t){for(var e=t._fullLayout,r=e._rangeSliderData,i=0;i<r.length;i++){var s=r[i][d.name];s._clipId=s._id+"-"+e._uid}var l=e._infolayer.selectAll("g."+d.containerClassName).data(r,function(t){return t._name});l.exit().each(function(t){var r=t[d.name];e._topdefs.select("#"+r._clipId).remove()}).remove(),0!==r.length&&(l.enter().append("g").classed(d.containerClassName,!0).attr("pointer-events","all"),l.each(function(r){var i=n.select(this),s=r[d.name],l=e[h.id2name(r.anchor)],u=s[h.id2name(r.anchor)];if(s.range){var _,w=o.simpleMap(s.range,r.r2l),k=o.simpleMap(r.range,r.r2l);_=k[0]<k[1]?[Math.min(w[0],k[0]),Math.max(w[1],k[1])]:[Math.max(w[0],k[0]),Math.min(w[1],k[1])],s.range=s._input.range=o.simpleMap(_,r.l2r)}r.cleanRange("rangeslider.range");var T=e._size,M=r.domain;s._width=T.w*(M[1]-M[0]);var A=Math.round(T.l+T.w*M[0]),S=Math.round(T.t+T.h*(1-r._counterDomainMin)+("bottom"===r.side?r._depth:0)+s._offsetShift+d.extraPad);i.attr("transform","translate("+A+","+S+")"),s._rl=o.simpleMap(s.range,r.r2l);var E=s._rl[0],L=s._rl[1],C=L-E;if(s.p2d=function(t){return t/s._width*C+E},s.d2p=function(t){return(t-E)/C*s._width},r.rangebreaks){var P=r.locateBreaks(E,L);if(P.length){var O,z,I=0;for(O=0;O<P.length;O++)I+=(z=P[O]).max-z.min;var D=s._width/(L-E-I),R=[-D*E];for(O=0;O<P.length;O++)z=P[O],R.push(R[R.length-1]-D*(z.max-z.min));for(s.d2p=function(t){for(var e=R[0],r=0;r<P.length;r++){var n=P[r];if(t>=n.max)e=R[r+1];else if(t<n.min)break}return e+D*t},O=0;O<P.length;O++)(z=P[O]).pmin=s.d2p(z.min),z.pmax=s.d2p(z.max);s.p2d=function(t){for(var e=R[0],r=0;r<P.length;r++){var n=P[r];if(t>=n.pmax)e=R[r+1];else if(t<n.pmin)break}return(t-e)/D}}}if("match"!==u.rangemode){var F=l.r2l(u.range[0]),B=l.r2l(u.range[1])-F;s.d2pOppAxis=function(t){return(t-F)/B*s._height}}i.call(g,t,r,s).call(v,t,r,s).call(m,t,r,s).call(y,t,r,s,u).call(x,t,r,s).call(b,t,r,s),function(t,e,r,i){var s=t.select("rect."+d.slideBoxClassName).node(),l=t.select("rect."+d.grabAreaMinClassName).node(),c=t.select("rect."+d.grabAreaMaxClassName).node();t.on("mousedown",function(){var u=n.event,h=u.target,d=u.clientX,g=d-t.node().getBoundingClientRect().left,v=i.d2p(r._rl[0]),m=i.d2p(r._rl[1]),y=f.coverSlip();function x(t){var u,f,x,b=+t.clientX-d;switch(h){case s:x="ew-resize",u=v+b,f=m+b;break;case l:x="col-resize",u=v+b,f=m;break;case c:x="col-resize",u=v,f=m+b;break;default:x="ew-resize",u=g,f=g+b}if(f<u){var _=f;f=u,u=_}i._pixelMin=u,i._pixelMax=f,p(n.select(y),x),function(t,e,r,n){function i(t){return r.l2r(o.constrain(t,n._rl[0],n._rl[1]))}var s=i(n.p2d(n._pixelMin)),l=i(n.p2d(n._pixelMax));window.requestAnimationFrame(function(){a.call("_guiRelayout",e,r._name+".range",[s,l])})}(0,e,r,i)}y.addEventListener("mousemove",x),y.addEventListener("mouseup",function t(){y.removeEventListener("mousemove",x);y.removeEventListener("mouseup",t);o.removeElement(y)})})}(i,t,r,s),function(t,e,r,n,a,i){var s=d.handleWidth/2;function l(t){return o.constrain(t,0,n._width)}function c(t){return o.constrain(t,0,n._height)}function u(t){return o.constrain(t,-s,n._width+s)}var h=l(n.d2p(r._rl[0])),f=l(n.d2p(r._rl[1]));if(t.select("rect."+d.slideBoxClassName).attr("x",h).attr("width",f-h),t.select("rect."+d.maskMinClassName).attr("width",h),t.select("rect."+d.maskMaxClassName).attr("x",f).attr("width",n._width-f),"match"!==i.rangemode){var p=n._height-c(n.d2pOppAxis(a._rl[1])),g=n._height-c(n.d2pOppAxis(a._rl[0]));t.select("rect."+d.maskMinOppAxisClassName).attr("x",h).attr("height",p).attr("width",f-h),t.select("rect."+d.maskMaxOppAxisClassName).attr("x",h).attr("y",g).attr("height",n._height-g).attr("width",f-h),t.select("rect."+d.slideBoxClassName).attr("y",p).attr("height",g-p)}var v=Math.round(u(h-s))-.5,m=Math.round(u(f-s))+.5;t.select("g."+d.grabberMinClassName).attr("transform","translate("+v+",0.5)"),t.select("g."+d.grabberMaxClassName).attr("transform","translate("+m+",0.5)")}(i,0,r,s,l,u),"bottom"===r.side&&c.draw(t,r._id+"title",{propContainer:r,propName:r._name+".title",placeholder:e._dfltTitle.x,attributes:{x:r._offset+r._length/2,y:S+s._height+s._offsetShift+10+1.5*r.title.font.size,"text-anchor":"middle"}})}))}},{"../../lib":717,"../../lib/setcursor":737,"../../plots/cartesian":776,"../../plots/cartesian/axis_ids":768,"../../plots/plots":826,"../../registry":846,"../color":591,"../dragelement":609,"../drawing":612,"../titles":679,"./constants":661,d3:165}],664:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axis_ids"),a=t("../../lib/svg_text_utils"),i=t("./constants"),o=t("../../constants/alignment").LINE_SPACING,s=i.name;function l(t){var e=t&&t[s];return e&&e.visible}r.isVisible=l,r.makeData=function(t){var e=n.list({_fullLayout:t},"x",!0),r=t.margin,a=[];if(!t._has("gl2d"))for(var i=0;i<e.length;i++){var o=e[i];if(l(o)){a.push(o);var c=o[s];c._id=s+o._id,c._height=(t.height-r.b-r.t)*c.thickness,c._offsetShift=Math.floor(c.borderwidth/2)}}t._rangeSliderData=a},r.autoMarginOpts=function(t,e){var r=t._fullLayout,n=e[s],l=e._id.charAt(0),c=0,u=0;"bottom"===e.side&&(c=e._depth,e.title.text!==r._dfltTitle[l]&&(u=1.5*e.title.font.size+10+n._offsetShift,u+=(e.title.text.match(a.BR_TAG_ALL)||[]).length*e.title.font.size*o));return{x:0,y:e._counterDomainMin,l:0,r:0,t:0,b:n._height+c+Math.max(r.margin.b,u),pad:i.extraPad+2*n._offsetShift}}},{"../../constants/alignment":686,"../../lib/svg_text_utils":741,"../../plots/cartesian/axis_ids":768,"./constants":661}],665:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("./oppaxis_attributes"),o=t("./helpers");e.exports={moduleType:"component",name:"rangeslider",schema:{subplots:{xaxis:{rangeslider:n.extendFlat({},a,{yaxis:i})}}},layoutAttributes:t("./attributes"),handleDefaults:t("./defaults"),calcAutorange:t("./calc_autorange"),draw:t("./draw"),isVisible:o.isVisible,makeData:o.makeData,autoMarginOpts:o.autoMarginOpts}},{"../../lib":717,"./attributes":659,"./calc_autorange":660,"./defaults":662,"./draw":663,"./helpers":664,"./oppaxis_attributes":666}],666:[function(t,e,r){"use strict";e.exports={_isSubplotObj:!0,rangemode:{valType:"enumerated",values:["auto","fixed","match"],dflt:"match",editType:"calc"},range:{valType:"info_array",items:[{valType:"any",editType:"plot"},{valType:"any",editType:"plot"}],editType:"plot"},editType:"calc"}},{}],667:[function(t,e,r){"use strict";var n=t("../annotations/attributes"),a=t("../../traces/scatter/attributes").line,i=t("../drawing/attributes").dash,o=t("../../lib/extend").extendFlat,s=t("../../plot_api/plot_template").templatedArray;e.exports=s("shape",{visible:{valType:"boolean",dflt:!0,editType:"calc+arraydraw"},type:{valType:"enumerated",values:["circle","rect","path","line"],editType:"calc+arraydraw"},layer:{valType:"enumerated",values:["below","above"],dflt:"above",editType:"arraydraw"},xref:o({},n.xref,{}),xsizemode:{valType:"enumerated",values:["scaled","pixel"],dflt:"scaled",editType:"calc+arraydraw"},xanchor:{valType:"any",editType:"calc+arraydraw"},x0:{valType:"any",editType:"calc+arraydraw"},x1:{valType:"any",editType:"calc+arraydraw"},yref:o({},n.yref,{}),ysizemode:{valType:"enumerated",values:["scaled","pixel"],dflt:"scaled",editType:"calc+arraydraw"},yanchor:{valType:"any",editType:"calc+arraydraw"},y0:{valType:"any",editType:"calc+arraydraw"},y1:{valType:"any",editType:"calc+arraydraw"},path:{valType:"string",editType:"calc+arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},line:{color:o({},a.color,{editType:"arraydraw"}),width:o({},a.width,{editType:"calc+arraydraw"}),dash:o({},i,{editType:"arraydraw"}),editType:"calc+arraydraw"},fillcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},editType:"arraydraw"})},{"../../lib/extend":708,"../../plot_api/plot_template":755,"../../traces/scatter/attributes":1120,"../annotations/attributes":574,"../drawing/attributes":611}],668:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("./constants"),o=t("./helpers");function s(t){return c(t.line.width,t.xsizemode,t.x0,t.x1,t.path,!1)}function l(t){return c(t.line.width,t.ysizemode,t.y0,t.y1,t.path,!0)}function c(t,e,r,a,s,l){var c=t/2,u=l;if("pixel"===e){var h=s?o.extractPathCoords(s,l?i.paramIsY:i.paramIsX):[r,a],f=n.aggNums(Math.max,null,h),p=n.aggNums(Math.min,null,h),d=p<0?Math.abs(p)+c:c,g=f>0?f+c:c;return{ppad:c,ppadplus:u?d:g,ppadminus:u?g:d}}return{ppad:c}}function u(t,e,r,n,a){var s="category"===t.type||"multicategory"===t.type?t.r2c:t.d2c;if(void 0!==e)return[s(e),s(r)];if(n){var l,c,u,h,f=1/0,p=-1/0,d=n.match(i.segmentRE);for("date"===t.type&&(s=o.decodeDate(s)),l=0;l<d.length;l++)void 0!==(c=a[d[l].charAt(0)].drawn)&&(!(u=d[l].substr(1).match(i.paramRE))||u.length<c||((h=s(u[c]))<f&&(f=h),h>p&&(p=h)));return p>=f?[f,p]:void 0}}e.exports=function(t){var e=t._fullLayout,r=n.filterVisible(e.shapes);if(r.length&&t._fullData.length)for(var o=0;o<r.length;o++){var c,h,f=r[o];if(f._extremes={},"paper"!==f.xref){var p="pixel"===f.xsizemode?f.xanchor:f.x0,d="pixel"===f.xsizemode?f.xanchor:f.x1;(h=u(c=a.getFromId(t,f.xref),p,d,f.path,i.paramIsX))&&(f._extremes[c._id]=a.findExtremes(c,h,s(f)))}if("paper"!==f.yref){var g="pixel"===f.ysizemode?f.yanchor:f.y0,v="pixel"===f.ysizemode?f.yanchor:f.y1;(h=u(c=a.getFromId(t,f.yref),g,v,f.path,i.paramIsY))&&(f._extremes[c._id]=a.findExtremes(c,h,l(f)))}}}},{"../../lib":717,"../../plots/cartesian/axes":765,"./constants":669,"./helpers":672}],669:[function(t,e,r){"use strict";e.exports={segmentRE:/[MLHVQCTSZ][^MLHVQCTSZ]*/g,paramRE:/[^\s,]+/g,paramIsX:{M:{0:!0,drawn:0},L:{0:!0,drawn:0},H:{0:!0,drawn:0},V:{},Q:{0:!0,2:!0,drawn:2},C:{0:!0,2:!0,4:!0,drawn:4},T:{0:!0,drawn:0},S:{0:!0,2:!0,drawn:2},Z:{}},paramIsY:{M:{1:!0,drawn:1},L:{1:!0,drawn:1},H:{},V:{0:!0,drawn:0},Q:{1:!0,3:!0,drawn:3},C:{1:!0,3:!0,5:!0,drawn:5},T:{1:!0,drawn:1},S:{1:!0,3:!0,drawn:5},Z:{}},numParams:{M:2,L:2,H:1,V:1,Q:4,C:6,T:2,S:4,Z:0}}},{}],670:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../../plots/array_container_defaults"),o=t("./attributes"),s=t("./helpers");function l(t,e,r){function i(r,a){return n.coerce(t,e,o,r,a)}if(i("visible")){i("layer"),i("opacity"),i("fillcolor"),i("line.color"),i("line.width"),i("line.dash");for(var l=i("type",t.path?"path":"rect"),c=i("xsizemode"),u=i("ysizemode"),h=["x","y"],f=0;f<2;f++){var p,d,g,v=h[f],m=v+"anchor",y="x"===v?c:u,x={_fullLayout:r},b=a.coerceRef(t,e,x,v,"","paper");if("paper"!==b?((p=a.getFromId(x,b))._shapeIndices.push(e._index),g=s.rangeToShapePosition(p),d=s.shapePositionToRange(p)):d=g=n.identity,"path"!==l){var _=v+"0",w=v+"1",k=t[_],T=t[w];t[_]=d(t[_],!0),t[w]=d(t[w],!0),"pixel"===y?(i(_,0),i(w,10)):(a.coercePosition(e,x,i,b,_,.25),a.coercePosition(e,x,i,b,w,.75)),e[_]=g(e[_]),e[w]=g(e[w]),t[_]=k,t[w]=T}if("pixel"===y){var M=t[m];t[m]=d(t[m],!0),a.coercePosition(e,x,i,b,m,.25),e[m]=g(e[m]),t[m]=M}}"path"===l?i("path"):n.noneOrAll(t,e,["x0","x1","y0","y1"])}}e.exports=function(t,e){i(t,e,{name:"shapes",handleItemDefaults:l})}},{"../../lib":717,"../../plots/array_container_defaults":761,"../../plots/cartesian/axes":765,"./attributes":667,"./helpers":672}],671:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("../../plots/cartesian/axes"),o=t("../color"),s=t("../drawing"),l=t("../../plot_api/plot_template").arrayEditor,c=t("../dragelement"),u=t("../../lib/setcursor"),h=t("./constants"),f=t("./helpers");function p(t,e){t._fullLayout._paperdiv.selectAll('.shapelayer [data-index="'+e+'"]').remove();var r=t._fullLayout.shapes[e]||{};if(r._input&&!1!==r.visible)if("below"!==r.layer)m(t._fullLayout._shapeUpperLayer);else if("paper"===r.xref||"paper"===r.yref)m(t._fullLayout._shapeLowerLayer);else{var p=t._fullLayout._plots[r.xref+r.yref];if(p)m((p.mainplotinfo||p).shapelayer);else m(t._fullLayout._shapeLowerLayer)}function m(p){var m={"data-index":e,"fill-rule":"evenodd",d:g(t,r)},y=r.line.width?r.line.color:"rgba(0,0,0,0)",x=p.append("path").attr(m).style("opacity",r.opacity).call(o.stroke,y).call(o.fill,r.fillcolor).call(s.dashLine,r.line.dash,r.line.width);d(x,t,r),t._context.edits.shapePosition&&function(t,e,r,o,p){var m,y,x,b,_,w,k,T,M,A,S,E,L,C,P,O,z=10,I=10,D="pixel"===r.xsizemode,R="pixel"===r.ysizemode,F="line"===r.type,B="path"===r.type,N=l(t.layout,"shapes",r),j=N.modifyItem,V=i.getFromId(t,r.xref),U=i.getFromId(t,r.yref),q=f.getDataToPixel(t,V),H=f.getDataToPixel(t,U,!0),G=f.getPixelToData(t,V),Y=f.getPixelToData(t,U,!0),W=F?function(){var t=Math.max(r.line.width,10),n=p.append("g").attr("data-index",o);n.append("path").attr("d",e.attr("d")).style({cursor:"move","stroke-width":t,"stroke-opacity":"0"});var a={"fill-opacity":"0"},i=t/2>10?t/2:10;return n.append("circle").attr({"data-line-point":"start-point",cx:D?q(r.xanchor)+r.x0:q(r.x0),cy:R?H(r.yanchor)-r.y0:H(r.y0),r:i}).style(a).classed("cursor-grab",!0),n.append("circle").attr({"data-line-point":"end-point",cx:D?q(r.xanchor)+r.x1:q(r.x1),cy:R?H(r.yanchor)-r.y1:H(r.y1),r:i}).style(a).classed("cursor-grab",!0),n}():e,X={element:W.node(),gd:t,prepFn:function(n){D&&(_=q(r.xanchor));R&&(w=H(r.yanchor));"path"===r.type?P=r.path:(m=D?r.x0:q(r.x0),y=R?r.y0:H(r.y0),x=D?r.x1:q(r.x1),b=R?r.y1:H(r.y1));m<x?(M=m,L="x0",A=x,C="x1"):(M=x,L="x1",A=m,C="x0");!R&&y<b||R&&y>b?(k=y,S="y0",T=b,E="y1"):(k=b,S="y1",T=y,E="y0");Z(n),Q(p,r),function(t,e,r){var n=e.xref,a=e.yref,o=i.getFromId(r,n),l=i.getFromId(r,a),c="";"paper"===n||o.autorange||(c+=n);"paper"===a||l.autorange||(c+=a);s.setClipUrl(t,c?"clip"+r._fullLayout._uid+c:null,r)}(e,r,t),X.moveFn="move"===O?J:K},doneFn:function(){u(e),$(p),d(e,t,r),n.call("_guiRelayout",t,N.getUpdateObj())},clickFn:function(){$(p)}};function Z(t){if(F)O="path"===t.target.tagName?"move":"start-point"===t.target.attributes["data-line-point"].value?"resize-over-start-point":"resize-over-end-point";else{var r=X.element.getBoundingClientRect(),n=r.right-r.left,a=r.bottom-r.top,i=t.clientX-r.left,o=t.clientY-r.top,s=!B&&n>z&&a>I&&!t.shiftKey?c.getCursor(i/n,1-o/a):"move";u(e,s),O=s.split("-")[0]}}function J(n,a){if("path"===r.type){var i=function(t){return t},o=i,s=i;D?j("xanchor",r.xanchor=G(_+n)):(o=function(t){return G(q(t)+n)},V&&"date"===V.type&&(o=f.encodeDate(o))),R?j("yanchor",r.yanchor=Y(w+a)):(s=function(t){return Y(H(t)+a)},U&&"date"===U.type&&(s=f.encodeDate(s))),j("path",r.path=v(P,o,s))}else D?j("xanchor",r.xanchor=G(_+n)):(j("x0",r.x0=G(m+n)),j("x1",r.x1=G(x+n))),R?j("yanchor",r.yanchor=Y(w+a)):(j("y0",r.y0=Y(y+a)),j("y1",r.y1=Y(b+a)));e.attr("d",g(t,r)),Q(p,r)}function K(n,a){if(B){var i=function(t){return t},o=i,s=i;D?j("xanchor",r.xanchor=G(_+n)):(o=function(t){return G(q(t)+n)},V&&"date"===V.type&&(o=f.encodeDate(o))),R?j("yanchor",r.yanchor=Y(w+a)):(s=function(t){return Y(H(t)+a)},U&&"date"===U.type&&(s=f.encodeDate(s))),j("path",r.path=v(P,o,s))}else if(F){if("resize-over-start-point"===O){var l=m+n,c=R?y-a:y+a;j("x0",r.x0=D?l:G(l)),j("y0",r.y0=R?c:Y(c))}else if("resize-over-end-point"===O){var u=x+n,h=R?b-a:b+a;j("x1",r.x1=D?u:G(u)),j("y1",r.y1=R?h:Y(h))}}else{var d=~O.indexOf("n")?k+a:k,N=~O.indexOf("s")?T+a:T,W=~O.indexOf("w")?M+n:M,X=~O.indexOf("e")?A+n:A;~O.indexOf("n")&&R&&(d=k-a),~O.indexOf("s")&&R&&(N=T-a),(!R&&N-d>I||R&&d-N>I)&&(j(S,r[S]=R?d:Y(d)),j(E,r[E]=R?N:Y(N))),X-W>z&&(j(L,r[L]=D?W:G(W)),j(C,r[C]=D?X:G(X)))}e.attr("d",g(t,r)),Q(p,r)}function Q(t,e){(D||R)&&function(){var r="path"!==e.type,n=t.selectAll(".visual-cue").data([0]);n.enter().append("path").attr({fill:"#fff","fill-rule":"evenodd",stroke:"#000","stroke-width":1}).classed("visual-cue",!0);var i=q(D?e.xanchor:a.midRange(r?[e.x0,e.x1]:f.extractPathCoords(e.path,h.paramIsX))),o=H(R?e.yanchor:a.midRange(r?[e.y0,e.y1]:f.extractPathCoords(e.path,h.paramIsY)));if(i=f.roundPositionForSharpStrokeRendering(i,1),o=f.roundPositionForSharpStrokeRendering(o,1),D&&R){var s="M"+(i-1-1)+","+(o-1-1)+"h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z";n.attr("d",s)}else if(D){var l="M"+(i-1-1)+","+(o-9-1)+"v18 h2 v-18 Z";n.attr("d",l)}else{var c="M"+(i-9-1)+","+(o-1-1)+"h18 v2 h-18 Z";n.attr("d",c)}}()}function $(t){t.selectAll(".visual-cue").remove()}c.init(X),W.node().onmousemove=Z}(t,x,r,e,p)}}function d(t,e,r){var n=(r.xref+r.yref).replace(/paper/g,"");s.setClipUrl(t,n?"clip"+e._fullLayout._uid+n:null,e)}function g(t,e){var r,n,o,s,l,c,u,p,d=e.type,g=i.getFromId(t,e.xref),v=i.getFromId(t,e.yref),m=t._fullLayout._size;if(g?(r=f.shapePositionToRange(g),n=function(t){return g._offset+g.r2p(r(t,!0))}):n=function(t){return m.l+m.w*t},v?(o=f.shapePositionToRange(v),s=function(t){return v._offset+v.r2p(o(t,!0))}):s=function(t){return m.t+m.h*(1-t)},"path"===d)return g&&"date"===g.type&&(n=f.decodeDate(n)),v&&"date"===v.type&&(s=f.decodeDate(s)),function(t,e,r){var n=t.path,i=t.xsizemode,o=t.ysizemode,s=t.xanchor,l=t.yanchor;return n.replace(h.segmentRE,function(t){var n=0,c=t.charAt(0),u=h.paramIsX[c],f=h.paramIsY[c],p=h.numParams[c],d=t.substr(1).replace(h.paramRE,function(t){return u[n]?t="pixel"===i?e(s)+Number(t):e(t):f[n]&&(t="pixel"===o?r(l)-Number(t):r(t)),++n>p&&(t="X"),t});return n>p&&(d=d.replace(/[\s,]*X.*/,""),a.log("Ignoring extra params in segment "+t)),c+d})}(e,n,s);if("pixel"===e.xsizemode){var y=n(e.xanchor);l=y+e.x0,c=y+e.x1}else l=n(e.x0),c=n(e.x1);if("pixel"===e.ysizemode){var x=s(e.yanchor);u=x-e.y0,p=x-e.y1}else u=s(e.y0),p=s(e.y1);if("line"===d)return"M"+l+","+u+"L"+c+","+p;if("rect"===d)return"M"+l+","+u+"H"+c+"V"+p+"H"+l+"Z";var b=(l+c)/2,_=(u+p)/2,w=Math.abs(b-l),k=Math.abs(_-u),T="A"+w+","+k,M=b+w+","+_;return"M"+M+T+" 0 1,1 "+(b+","+(_-k))+T+" 0 0,1 "+M+"Z"}function v(t,e,r){return t.replace(h.segmentRE,function(t){var n=0,a=t.charAt(0),i=h.paramIsX[a],o=h.paramIsY[a],s=h.numParams[a];return a+t.substr(1).replace(h.paramRE,function(t){return n>=s?t:(i[n]?t=e(t):o[n]&&(t=r(t)),n++,t)})})}e.exports={draw:function(t){var e=t._fullLayout;for(var r in e._shapeUpperLayer.selectAll("path").remove(),e._shapeLowerLayer.selectAll("path").remove(),e._plots){var n=e._plots[r].shapelayer;n&&n.selectAll("path").remove()}for(var a=0;a<e.shapes.length;a++)e.shapes[a].visible&&p(t,a)},drawOne:p}},{"../../lib":717,"../../lib/setcursor":737,"../../plot_api/plot_template":755,"../../plots/cartesian/axes":765,"../../registry":846,"../color":591,"../dragelement":609,"../drawing":612,"./constants":669,"./helpers":672}],672:[function(t,e,r){"use strict";var n=t("./constants"),a=t("../../lib");r.rangeToShapePosition=function(t){return"log"===t.type?t.r2d:function(t){return t}},r.shapePositionToRange=function(t){return"log"===t.type?t.d2r:function(t){return t}},r.decodeDate=function(t){return function(e){return e.replace&&(e=e.replace("_"," ")),t(e)}},r.encodeDate=function(t){return function(e){return t(e).replace(" ","_")}},r.extractPathCoords=function(t,e){var r=[];return t.match(n.segmentRE).forEach(function(t){var i=e[t.charAt(0)].drawn;if(void 0!==i){var o=t.substr(1).match(n.paramRE);!o||o.length<i||r.push(a.cleanNumber(o[i]))}}),r},r.getDataToPixel=function(t,e,n){var a,i=t._fullLayout._size;if(e){var o=r.shapePositionToRange(e);a=function(t){return e._offset+e.r2p(o(t,!0))},"date"===e.type&&(a=r.decodeDate(a))}else a=n?function(t){return i.t+i.h*(1-t)}:function(t){return i.l+i.w*t};return a},r.getPixelToData=function(t,e,n){var a,i=t._fullLayout._size;if(e){var o=r.rangeToShapePosition(e);a=function(t){return o(e.p2r(t-e._offset))}}else a=n?function(t){return 1-(t-i.t)/i.h}:function(t){return(t-i.l)/i.w};return a},r.roundPositionForSharpStrokeRendering=function(t,e){var r=1===Math.round(e%2),n=Math.round(t);return r?n+.5:n}},{"../../lib":717,"./constants":669}],673:[function(t,e,r){"use strict";var n=t("./draw");e.exports={moduleType:"component",name:"shapes",layoutAttributes:t("./attributes"),supplyLayoutDefaults:t("./defaults"),includeBasePlot:t("../../plots/cartesian/include_components")("shapes"),calcAutorange:t("./calc_autorange"),draw:n.draw,drawOne:n.drawOne}},{"../../plots/cartesian/include_components":775,"./attributes":667,"./calc_autorange":668,"./defaults":670,"./draw":671}],674:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),a=t("../../plots/pad_attributes"),i=t("../../lib/extend").extendDeepAll,o=t("../../plot_api/edit_types").overrideAll,s=t("../../plots/animation_attributes"),l=t("../../plot_api/plot_template").templatedArray,c=t("./constants"),u=l("step",{visible:{valType:"boolean",dflt:!0},method:{valType:"enumerated",values:["restyle","relayout","animate","update","skip"],dflt:"restyle"},args:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},label:{valType:"string"},value:{valType:"string"},execute:{valType:"boolean",dflt:!0}});e.exports=o(l("slider",{visible:{valType:"boolean",dflt:!0},active:{valType:"number",min:0,dflt:0},steps:u,lenmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"fraction"},len:{valType:"number",min:0,dflt:1},x:{valType:"number",min:-2,max:3,dflt:0},pad:i(a({editType:"arraydraw"}),{},{t:{dflt:20}}),xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left"},y:{valType:"number",min:-2,max:3,dflt:0},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"top"},transition:{duration:{valType:"number",min:0,dflt:150},easing:{valType:"enumerated",values:s.transition.easing.values,dflt:"cubic-in-out"}},currentvalue:{visible:{valType:"boolean",dflt:!0},xanchor:{valType:"enumerated",values:["left","center","right"],dflt:"left"},offset:{valType:"number",dflt:10},prefix:{valType:"string"},suffix:{valType:"string"},font:n({})},font:n({}),activebgcolor:{valType:"color",dflt:c.gripBgActiveColor},bgcolor:{valType:"color",dflt:c.railBgColor},bordercolor:{valType:"color",dflt:c.railBorderColor},borderwidth:{valType:"number",min:0,dflt:c.railBorderWidth},ticklen:{valType:"number",min:0,dflt:c.tickLength},tickcolor:{valType:"color",dflt:c.tickColor},tickwidth:{valType:"number",min:0,dflt:1},minorticklen:{valType:"number",min:0,dflt:c.minorTickLength}}),"arraydraw","from-root")},{"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plot_api/plot_template":755,"../../plots/animation_attributes":760,"../../plots/font_attributes":791,"../../plots/pad_attributes":825,"./constants":675}],675:[function(t,e,r){"use strict";e.exports={name:"sliders",containerClassName:"slider-container",groupClassName:"slider-group",inputAreaClass:"slider-input-area",railRectClass:"slider-rail-rect",railTouchRectClass:"slider-rail-touch-rect",gripRectClass:"slider-grip-rect",tickRectClass:"slider-tick-rect",inputProxyClass:"slider-input-proxy",labelsClass:"slider-labels",labelGroupClass:"slider-label-group",labelClass:"slider-label",currentValueClass:"slider-current-value",railHeight:5,menuIndexAttrName:"slider-active-index",autoMarginIdRoot:"slider-",minWidth:30,minHeight:30,textPadX:40,arrowOffsetX:4,railRadius:2,railWidth:5,railBorder:4,railBorderWidth:1,railBorderColor:"#bec8d9",railBgColor:"#f8fafc",railInset:8,stepInset:10,gripRadius:10,gripWidth:20,gripHeight:20,gripBorder:20,gripBorderWidth:1,gripBorderColor:"#bec8d9",gripBgColor:"#f6f8fa",gripBgActiveColor:"#dbdde0",labelPadding:8,labelOffset:0,tickWidth:1,tickColor:"#333",tickOffset:25,tickLength:7,minorTickOffset:25,minorTickColor:"#333",minorTickLength:4,currentValuePadding:8,currentValueInset:0}},{}],676:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/array_container_defaults"),i=t("./attributes"),o=t("./constants").name,s=i.steps;function l(t,e,r){function o(r,a){return n.coerce(t,e,i,r,a)}for(var s=a(t,e,{name:"steps",handleItemDefaults:c}),l=0,u=0;u<s.length;u++)s[u].visible&&l++;if(l<2?e.visible=!1:o("visible")){e._stepCount=l;var h=e._visibleSteps=n.filterVisible(s);(s[o("active")]||{}).visible||(e.active=h[0]._index),o("x"),o("y"),n.noneOrAll(t,e,["x","y"]),o("xanchor"),o("yanchor"),o("len"),o("lenmode"),o("pad.t"),o("pad.r"),o("pad.b"),o("pad.l"),n.coerceFont(o,"font",r.font),o("currentvalue.visible")&&(o("currentvalue.xanchor"),o("currentvalue.prefix"),o("currentvalue.suffix"),o("currentvalue.offset"),n.coerceFont(o,"currentvalue.font",e.font)),o("transition.duration"),o("transition.easing"),o("bgcolor"),o("activebgcolor"),o("bordercolor"),o("borderwidth"),o("ticklen"),o("tickwidth"),o("tickcolor"),o("minorticklen")}}function c(t,e){function r(r,a){return n.coerce(t,e,s,r,a)}if("skip"===t.method||Array.isArray(t.args)?r("visible"):e.visible=!1){r("method"),r("args");var a=r("label","step-"+e._index);r("value",a),r("execute")}}e.exports=function(t,e){a(t,e,{name:o,handleItemDefaults:l})}},{"../../lib":717,"../../plots/array_container_defaults":761,"./attributes":674,"./constants":675}],677:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../plots/plots"),i=t("../color"),o=t("../drawing"),s=t("../../lib"),l=t("../../lib/svg_text_utils"),c=t("../../plot_api/plot_template").arrayEditor,u=t("./constants"),h=t("../../constants/alignment"),f=h.LINE_SPACING,p=h.FROM_TL,d=h.FROM_BR;function g(t){return u.autoMarginIdRoot+t._index}function v(t){return t._index}function m(t,e){var r=o.tester.selectAll("g."+u.labelGroupClass).data(e._visibleSteps);r.enter().append("g").classed(u.labelGroupClass,!0);var i=0,c=0;r.each(function(t){var r=b(n.select(this),{step:t},e).node();if(r){var a=o.bBox(r);c=Math.max(c,a.height),i=Math.max(i,a.width)}}),r.remove();var h=e._dims={};h.inputAreaWidth=Math.max(u.railWidth,u.gripHeight);var f=t._fullLayout._size;h.lx=f.l+f.w*e.x,h.ly=f.t+f.h*(1-e.y),"fraction"===e.lenmode?h.outerLength=Math.round(f.w*e.len):h.outerLength=e.len,h.inputAreaStart=0,h.inputAreaLength=Math.round(h.outerLength-e.pad.l-e.pad.r);var v=(h.inputAreaLength-2*u.stepInset)/(e._stepCount-1),m=i+u.labelPadding;if(h.labelStride=Math.max(1,Math.ceil(m/v)),h.labelHeight=c,h.currentValueMaxWidth=0,h.currentValueHeight=0,h.currentValueTotalHeight=0,h.currentValueMaxLines=1,e.currentvalue.visible){var x=o.tester.append("g");r.each(function(t){var r=y(x,e,t.label),n=r.node()&&o.bBox(r.node())||{width:0,height:0},a=l.lineCount(r);h.currentValueMaxWidth=Math.max(h.currentValueMaxWidth,Math.ceil(n.width)),h.currentValueHeight=Math.max(h.currentValueHeight,Math.ceil(n.height)),h.currentValueMaxLines=Math.max(h.currentValueMaxLines,a)}),h.currentValueTotalHeight=h.currentValueHeight+e.currentvalue.offset,x.remove()}h.height=h.currentValueTotalHeight+u.tickOffset+e.ticklen+u.labelOffset+h.labelHeight+e.pad.t+e.pad.b;var _="left";s.isRightAnchor(e)&&(h.lx-=h.outerLength,_="right"),s.isCenterAnchor(e)&&(h.lx-=h.outerLength/2,_="center");var w="top";s.isBottomAnchor(e)&&(h.ly-=h.height,w="bottom"),s.isMiddleAnchor(e)&&(h.ly-=h.height/2,w="middle"),h.outerLength=Math.ceil(h.outerLength),h.height=Math.ceil(h.height),h.lx=Math.round(h.lx),h.ly=Math.round(h.ly);var k={y:e.y,b:h.height*d[w],t:h.height*p[w]};"fraction"===e.lenmode?(k.l=0,k.xl=e.x-e.len*p[_],k.r=0,k.xr=e.x+e.len*d[_]):(k.x=e.x,k.l=h.outerLength*p[_],k.r=h.outerLength*d[_]),a.autoMargin(t,g(e),k)}function y(t,e,r){if(e.currentvalue.visible){var n,a,i=e._dims;switch(e.currentvalue.xanchor){case"right":n=i.inputAreaLength-u.currentValueInset-i.currentValueMaxWidth,a="left";break;case"center":n=.5*i.inputAreaLength,a="middle";break;default:n=u.currentValueInset,a="left"}var c=s.ensureSingle(t,"text",u.labelClass,function(t){t.classed("user-select-none",!0).attr({"text-anchor":a,"data-notex":1})}),h=e.currentvalue.prefix?e.currentvalue.prefix:"";if("string"==typeof r)h+=r;else{var p=e.steps[e.active].label,d=e._gd._fullLayout._meta;d&&(p=s.templateString(p,d)),h+=p}e.currentvalue.suffix&&(h+=e.currentvalue.suffix),c.call(o.font,e.currentvalue.font).text(h).call(l.convertToTspans,e._gd);var g=l.lineCount(c),v=(i.currentValueMaxLines+1-g)*e.currentvalue.font.size*f;return l.positionText(c,n,v),c}}function x(t,e,r){s.ensureSingle(t,"rect",u.gripRectClass,function(n){n.call(T,e,t,r).style("pointer-events","all")}).attr({width:u.gripWidth,height:u.gripHeight,rx:u.gripRadius,ry:u.gripRadius}).call(i.stroke,r.bordercolor).call(i.fill,r.bgcolor).style("stroke-width",r.borderwidth+"px")}function b(t,e,r){var n=s.ensureSingle(t,"text",u.labelClass,function(t){t.classed("user-select-none",!0).attr({"text-anchor":"middle","data-notex":1})}),a=e.step.label,i=r._gd._fullLayout._meta;return i&&(a=s.templateString(a,i)),n.call(o.font,r.font).text(a).call(l.convertToTspans,r._gd),n}function _(t,e){var r=s.ensureSingle(t,"g",u.labelsClass),a=e._dims,i=r.selectAll("g."+u.labelGroupClass).data(a.labelSteps);i.enter().append("g").classed(u.labelGroupClass,!0),i.exit().remove(),i.each(function(t){var r=n.select(this);r.call(b,t,e),o.setTranslate(r,S(e,t.fraction),u.tickOffset+e.ticklen+e.font.size*f+u.labelOffset+a.currentValueTotalHeight)})}function w(t,e,r,n,a){var i=Math.round(n*(r._stepCount-1)),o=r._visibleSteps[i]._index;o!==r.active&&k(t,e,r,o,!0,a)}function k(t,e,r,n,i,o){var s=r.active;r.active=n,c(t.layout,u.name,r).applyUpdate("active",n);var l=r.steps[r.active];e.call(A,r,o),e.call(y,r),t.emit("plotly_sliderchange",{slider:r,step:r.steps[r.active],interaction:i,previousActive:s}),l&&l.method&&i&&(e._nextMethod?(e._nextMethod.step=l,e._nextMethod.doCallback=i,e._nextMethod.doTransition=o):(e._nextMethod={step:l,doCallback:i,doTransition:o},e._nextMethodRaf=window.requestAnimationFrame(function(){var r=e._nextMethod.step;r.method&&(r.execute&&a.executeAPICommand(t,r.method,r.args),e._nextMethod=null,e._nextMethodRaf=null)})))}function T(t,e,r){var a=r.node(),o=n.select(e);function s(){return r.data()[0]}t.on("mousedown",function(){var t=s();e.emit("plotly_sliderstart",{slider:t});var l=r.select("."+u.gripRectClass);n.event.stopPropagation(),n.event.preventDefault(),l.call(i.fill,t.activebgcolor);var c=E(t,n.mouse(a)[0]);w(e,r,t,c,!0),t._dragging=!0,o.on("mousemove",function(){var t=s(),i=E(t,n.mouse(a)[0]);w(e,r,t,i,!1)}),o.on("mouseup",function(){var t=s();t._dragging=!1,l.call(i.fill,t.bgcolor),o.on("mouseup",null),o.on("mousemove",null),e.emit("plotly_sliderend",{slider:t,step:t.steps[t.active]})})})}function M(t,e){var r=t.selectAll("rect."+u.tickRectClass).data(e._visibleSteps),a=e._dims;r.enter().append("rect").classed(u.tickRectClass,!0),r.exit().remove(),r.attr({width:e.tickwidth+"px","shape-rendering":"crispEdges"}),r.each(function(t,r){var s=r%a.labelStride==0,l=n.select(this);l.attr({height:s?e.ticklen:e.minorticklen}).call(i.fill,e.tickcolor),o.setTranslate(l,S(e,r/(e._stepCount-1))-.5*e.tickwidth,(s?u.tickOffset:u.minorTickOffset)+a.currentValueTotalHeight)})}function A(t,e,r){for(var n=t.select("rect."+u.gripRectClass),a=0,i=0;i<e._stepCount;i++)if(e._visibleSteps[i]._index===e.active){a=i;break}var o=S(e,a/(e._stepCount-1));if(!e._invokingCommand){var s=n;r&&e.transition.duration>0&&(s=s.transition().duration(e.transition.duration).ease(e.transition.easing)),s.attr("transform","translate("+(o-.5*u.gripWidth)+","+e._dims.currentValueTotalHeight+")")}}function S(t,e){var r=t._dims;return r.inputAreaStart+u.stepInset+(r.inputAreaLength-2*u.stepInset)*Math.min(1,Math.max(0,e))}function E(t,e){var r=t._dims;return Math.min(1,Math.max(0,(e-u.stepInset-r.inputAreaStart)/(r.inputAreaLength-2*u.stepInset-2*r.inputAreaStart)))}function L(t,e,r){var n=r._dims,a=s.ensureSingle(t,"rect",u.railTouchRectClass,function(n){n.call(T,e,t,r).style("pointer-events","all")});a.attr({width:n.inputAreaLength,height:Math.max(n.inputAreaWidth,u.tickOffset+r.ticklen+n.labelHeight)}).call(i.fill,r.bgcolor).attr("opacity",0),o.setTranslate(a,0,n.currentValueTotalHeight)}function C(t,e){var r=e._dims,n=r.inputAreaLength-2*u.railInset,a=s.ensureSingle(t,"rect",u.railRectClass);a.attr({width:n,height:u.railWidth,rx:u.railRadius,ry:u.railRadius,"shape-rendering":"crispEdges"}).call(i.stroke,e.bordercolor).call(i.fill,e.bgcolor).style("stroke-width",e.borderwidth+"px"),o.setTranslate(a,u.railInset,.5*(r.inputAreaWidth-u.railWidth)+r.currentValueTotalHeight)}e.exports=function(t){var e=t._fullLayout,r=function(t,e){for(var r=t[u.name],n=[],a=0;a<r.length;a++){var i=r[a];i.visible&&(i._gd=e,n.push(i))}return n}(e,t),i=e._infolayer.selectAll("g."+u.containerClassName).data(r.length>0?[0]:[]);function s(e){e._commandObserver&&(e._commandObserver.remove(),delete e._commandObserver),a.autoMargin(t,g(e))}if(i.enter().append("g").classed(u.containerClassName,!0).style("cursor","ew-resize"),i.exit().each(function(){n.select(this).selectAll("g."+u.groupClassName).each(s)}).remove(),0!==r.length){var l=i.selectAll("g."+u.groupClassName).data(r,v);l.enter().append("g").classed(u.groupClassName,!0),l.exit().each(s).remove();for(var c=0;c<r.length;c++){var h=r[c];m(t,h)}l.each(function(e){var r=n.select(this);!function(t){var e=t._dims;e.labelSteps=[];for(var r=t._stepCount,n=0;n<r;n+=e.labelStride)e.labelSteps.push({fraction:n/(r-1),step:t._visibleSteps[n]})}(e),a.manageCommandObserver(t,e,e._visibleSteps,function(e){var n=r.data()[0];n.active!==e.index&&(n._dragging||k(t,r,n,e.index,!1,!0))}),function(t,e,r){(r.steps[r.active]||{}).visible||(r.active=r._visibleSteps[0]._index);e.call(y,r).call(C,r).call(_,r).call(M,r).call(L,t,r).call(x,t,r);var n=r._dims;o.setTranslate(e,n.lx+r.pad.l,n.ly+r.pad.t),e.call(A,r,!1),e.call(y,r)}(t,n.select(this),e)})}}},{"../../constants/alignment":686,"../../lib":717,"../../lib/svg_text_utils":741,"../../plot_api/plot_template":755,"../../plots/plots":826,"../color":591,"../drawing":612,"./constants":675,d3:165}],678:[function(t,e,r){"use strict";var n=t("./constants");e.exports={moduleType:"component",name:n.name,layoutAttributes:t("./attributes"),supplyLayoutDefaults:t("./defaults"),draw:t("./draw")}},{"./attributes":674,"./constants":675,"./defaults":676,"./draw":677}],679:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../../plots/plots"),o=t("../../registry"),s=t("../../lib"),l=t("../drawing"),c=t("../color"),u=t("../../lib/svg_text_utils"),h=t("../../constants/interactions"),f=t("../../constants/alignment").OPPOSITE_SIDE,p=/ [XY][0-9]* /;e.exports={draw:function(t,e,r){var d,g=r.propContainer,v=r.propName,m=r.placeholder,y=r.traceIndex,x=r.avoid||{},b=r.attributes,_=r.transform,w=r.containerGroup,k=t._fullLayout,T=1,M=!1,A=g.title,S=(A&&A.text?A.text:"").trim(),E=A&&A.font?A.font:{},L=E.family,C=E.size,P=E.color;"title.text"===v?d="titleText":-1!==v.indexOf("axis")?d="axisTitleText":v.indexOf(!0)&&(d="colorbarTitleText");var O=t._context.edits[d];""===S?T=0:S.replace(p," % ")===m.replace(p," % ")&&(T=.2,M=!0,O||(S="")),r._meta?S=s.templateString(S,r._meta):k._meta&&(S=s.templateString(S,k._meta));var z=S||O;w||(w=s.ensureSingle(k._infolayer,"g","g-"+e));var I=w.selectAll("text").data(z?[0]:[]);if(I.enter().append("text"),I.text(S).attr("class",e),I.exit().remove(),!z)return w;function D(t){s.syncOrAsync([R,F],t)}function R(e){var r;return _?(r="",_.rotate&&(r+="rotate("+[_.rotate,b.x,b.y]+")"),_.offset&&(r+="translate(0, "+_.offset+")")):r=null,e.attr("transform",r),e.style({"font-family":L,"font-size":n.round(C,2)+"px",fill:c.rgb(P),opacity:T*c.opacity(P),"font-weight":i.fontWeight}).attr(b).call(u.convertToTspans,t),i.previousPromises(t)}function F(t){var e=n.select(t.node().parentNode);if(x&&x.selection&&x.side&&S){e.attr("transform",null);var r=f[x.side],i="left"===x.side||"top"===x.side?-1:1,o=a(x.pad)?x.pad:2,c=l.bBox(e.node()),u={left:0,top:0,right:k.width,bottom:k.height},h=x.maxShift||i*(u[x.side]-c[x.side]),p=0;if(h<0)p=h;else{var d=x.offsetLeft||0,g=x.offsetTop||0;c.left-=d,c.right-=d,c.top-=g,c.bottom-=g,x.selection.each(function(){var t=l.bBox(this);s.bBoxIntersect(c,t,o)&&(p=Math.max(p,i*(t[x.side]-c[r])+o))}),p=Math.min(h,p)}if(p>0||h<0){var v={left:[-p,0],right:[p,0],top:[0,-p],bottom:[0,p]}[x.side];e.attr("transform","translate("+v+")")}}}return I.call(D),O&&(S?I.on(".opacity",null):(T=0,M=!0,I.text(m).on("mouseover.opacity",function(){n.select(this).transition().duration(h.SHOW_PLACEHOLDER).style("opacity",1)}).on("mouseout.opacity",function(){n.select(this).transition().duration(h.HIDE_PLACEHOLDER).style("opacity",0)})),I.call(u.makeEditable,{gd:t}).on("edit",function(e){void 0!==y?o.call("_guiRestyle",t,v,e,y):o.call("_guiRelayout",t,v,e)}).on("cancel",function(){this.text(this.attr("data-unformatted")).call(D)}).on("input",function(t){this.text(t||" ").call(u.positionText,b.x,b.y)})),I.classed("js-placeholder",M),w}}},{"../../constants/alignment":686,"../../constants/interactions":692,"../../lib":717,"../../lib/svg_text_utils":741,"../../plots/plots":826,"../../registry":846,"../color":591,"../drawing":612,d3:165,"fast-isnumeric":228}],680:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),a=t("../color/attributes"),i=t("../../lib/extend").extendFlat,o=t("../../plot_api/edit_types").overrideAll,s=t("../../plots/pad_attributes"),l=t("../../plot_api/plot_template").templatedArray,c=l("button",{visible:{valType:"boolean"},method:{valType:"enumerated",values:["restyle","relayout","animate","update","skip"],dflt:"restyle"},args:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},args2:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},label:{valType:"string",dflt:""},execute:{valType:"boolean",dflt:!0}});e.exports=o(l("updatemenu",{_arrayAttrRegexps:[/^updatemenus\[(0|[1-9][0-9]+)\]\.buttons/],visible:{valType:"boolean"},type:{valType:"enumerated",values:["dropdown","buttons"],dflt:"dropdown"},direction:{valType:"enumerated",values:["left","right","up","down"],dflt:"down"},active:{valType:"integer",min:-1,dflt:0},showactive:{valType:"boolean",dflt:!0},buttons:c,x:{valType:"number",min:-2,max:3,dflt:-.05},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"right"},y:{valType:"number",min:-2,max:3,dflt:1},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"top"},pad:i(s({editType:"arraydraw"}),{}),font:n({}),bgcolor:{valType:"color"},bordercolor:{valType:"color",dflt:a.borderLine},borderwidth:{valType:"number",min:0,dflt:1,editType:"arraydraw"}}),"arraydraw","from-root")},{"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plot_api/plot_template":755,"../../plots/font_attributes":791,"../../plots/pad_attributes":825,"../color/attributes":590}],681:[function(t,e,r){"use strict";e.exports={name:"updatemenus",containerClassName:"updatemenu-container",headerGroupClassName:"updatemenu-header-group",headerClassName:"updatemenu-header",headerArrowClassName:"updatemenu-header-arrow",dropdownButtonGroupClassName:"updatemenu-dropdown-button-group",dropdownButtonClassName:"updatemenu-dropdown-button",buttonClassName:"updatemenu-button",itemRectClassName:"updatemenu-item-rect",itemTextClassName:"updatemenu-item-text",menuIndexAttrName:"updatemenu-active-index",autoMarginIdRoot:"updatemenu-",blankHeaderOpts:{label:" "},minWidth:30,minHeight:30,textPadX:24,arrowPadX:16,rx:2,ry:2,textOffsetX:12,textOffsetY:3,arrowOffsetX:4,gapButtonHeader:5,gapButton:2,activeColor:"#F4FAFF",hoverColor:"#F4FAFF",arrowSymbol:{left:"\u25c4",right:"\u25ba",up:"\u25b2",down:"\u25bc"}}},{}],682:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/array_container_defaults"),i=t("./attributes"),o=t("./constants").name,s=i.buttons;function l(t,e,r){function o(r,a){return n.coerce(t,e,i,r,a)}o("visible",a(t,e,{name:"buttons",handleItemDefaults:c}).length>0)&&(o("active"),o("direction"),o("type"),o("showactive"),o("x"),o("y"),n.noneOrAll(t,e,["x","y"]),o("xanchor"),o("yanchor"),o("pad.t"),o("pad.r"),o("pad.b"),o("pad.l"),n.coerceFont(o,"font",r.font),o("bgcolor",r.paper_bgcolor),o("bordercolor"),o("borderwidth"))}function c(t,e){function r(r,a){return n.coerce(t,e,s,r,a)}r("visible","skip"===t.method||Array.isArray(t.args))&&(r("method"),r("args"),r("args2"),r("label"),r("execute"))}e.exports=function(t,e){a(t,e,{name:o,handleItemDefaults:l})}},{"../../lib":717,"../../plots/array_container_defaults":761,"./attributes":680,"./constants":681}],683:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../plots/plots"),i=t("../color"),o=t("../drawing"),s=t("../../lib"),l=t("../../lib/svg_text_utils"),c=t("../../plot_api/plot_template").arrayEditor,u=t("../../constants/alignment").LINE_SPACING,h=t("./constants"),f=t("./scrollbox");function p(t){return t._index}function d(t,e){return+t.attr(h.menuIndexAttrName)===e._index}function g(t,e,r,n,a,i,o,s){e.active=o,c(t.layout,h.name,e).applyUpdate("active",o),"buttons"===e.type?m(t,n,null,null,e):"dropdown"===e.type&&(a.attr(h.menuIndexAttrName,"-1"),v(t,n,a,i,e),s||m(t,n,a,i,e))}function v(t,e,r,n,a){var i=s.ensureSingle(e,"g",h.headerClassName,function(t){t.style("pointer-events","all")}),l=a._dims,c=a.active,u=a.buttons[c]||h.blankHeaderOpts,f={y:a.pad.t,yPad:0,x:a.pad.l,xPad:0,index:0},p={width:l.headerWidth,height:l.headerHeight};i.call(y,a,u,t).call(A,a,f,p),s.ensureSingle(e,"text",h.headerArrowClassName,function(t){t.classed("user-select-none",!0).attr("text-anchor","end").call(o.font,a.font).text(h.arrowSymbol[a.direction])}).attr({x:l.headerWidth-h.arrowOffsetX+a.pad.l,y:l.headerHeight/2+h.textOffsetY+a.pad.t}),i.on("click",function(){r.call(S,String(d(r,a)?-1:a._index)),m(t,e,r,n,a)}),i.on("mouseover",function(){i.call(w)}),i.on("mouseout",function(){i.call(k,a)}),o.setTranslate(e,l.lx,l.ly)}function m(t,e,r,i,o){r||(r=e).attr("pointer-events","all");var l=function(t){return-1==+t.attr(h.menuIndexAttrName)}(r)&&"buttons"!==o.type?[]:o.buttons,c="dropdown"===o.type?h.dropdownButtonClassName:h.buttonClassName,u=r.selectAll("g."+c).data(s.filterVisible(l)),f=u.enter().append("g").classed(c,!0),p=u.exit();"dropdown"===o.type?(f.attr("opacity","0").transition().attr("opacity","1"),p.transition().attr("opacity","0").remove()):p.remove();var d=0,v=0,m=o._dims,x=-1!==["up","down"].indexOf(o.direction);"dropdown"===o.type&&(x?v=m.headerHeight+h.gapButtonHeader:d=m.headerWidth+h.gapButtonHeader),"dropdown"===o.type&&"up"===o.direction&&(v=-h.gapButtonHeader+h.gapButton-m.openHeight),"dropdown"===o.type&&"left"===o.direction&&(d=-h.gapButtonHeader+h.gapButton-m.openWidth);var b={x:m.lx+d+o.pad.l,y:m.ly+v+o.pad.t,yPad:h.gapButton,xPad:h.gapButton,index:0},T={l:b.x+o.borderwidth,t:b.y+o.borderwidth};u.each(function(s,l){var c=n.select(this);c.call(y,o,s,t).call(A,o,b),c.on("click",function(){n.event.defaultPrevented||(s.execute&&(s.args2&&o.active===l?(g(t,o,0,e,r,i,-1),a.executeAPICommand(t,s.method,s.args2)):(g(t,o,0,e,r,i,l),a.executeAPICommand(t,s.method,s.args))),t.emit("plotly_buttonclicked",{menu:o,button:s,active:o.active}))}),c.on("mouseover",function(){c.call(w)}),c.on("mouseout",function(){c.call(k,o),u.call(_,o)})}),u.call(_,o),x?(T.w=Math.max(m.openWidth,m.headerWidth),T.h=b.y-T.t):(T.w=b.x-T.l,T.h=Math.max(m.openHeight,m.headerHeight)),T.direction=o.direction,i&&(u.size()?function(t,e,r,n,a,i){var o,s,l,c=a.direction,u="up"===c||"down"===c,f=a._dims,p=a.active;if(u)for(s=0,l=0;l<p;l++)s+=f.heights[l]+h.gapButton;else for(o=0,l=0;l<p;l++)o+=f.widths[l]+h.gapButton;n.enable(i,o,s),n.hbar&&n.hbar.attr("opacity","0").transition().attr("opacity","1");n.vbar&&n.vbar.attr("opacity","0").transition().attr("opacity","1")}(0,0,0,i,o,T):function(t){var e=!!t.hbar,r=!!t.vbar;e&&t.hbar.transition().attr("opacity","0").each("end",function(){e=!1,r||t.disable()});r&&t.vbar.transition().attr("opacity","0").each("end",function(){r=!1,e||t.disable()})}(i))}function y(t,e,r,n){t.call(x,e).call(b,e,r,n)}function x(t,e){s.ensureSingle(t,"rect",h.itemRectClassName,function(t){t.attr({rx:h.rx,ry:h.ry,"shape-rendering":"crispEdges"})}).call(i.stroke,e.bordercolor).call(i.fill,e.bgcolor).style("stroke-width",e.borderwidth+"px")}function b(t,e,r,n){var a=s.ensureSingle(t,"text",h.itemTextClassName,function(t){t.classed("user-select-none",!0).attr({"text-anchor":"start","data-notex":1})}),i=r.label,c=n._fullLayout._meta;c&&(i=s.templateString(i,c)),a.call(o.font,e.font).text(i).call(l.convertToTspans,n)}function _(t,e){var r=e.active;t.each(function(t,a){var o=n.select(this);a===r&&e.showactive&&o.select("rect."+h.itemRectClassName).call(i.fill,h.activeColor)})}function w(t){t.select("rect."+h.itemRectClassName).call(i.fill,h.hoverColor)}function k(t,e){t.select("rect."+h.itemRectClassName).call(i.fill,e.bgcolor)}function T(t,e){var r=e._dims={width1:0,height1:0,heights:[],widths:[],totalWidth:0,totalHeight:0,openWidth:0,openHeight:0,lx:0,ly:0},i=o.tester.selectAll("g."+h.dropdownButtonClassName).data(s.filterVisible(e.buttons));i.enter().append("g").classed(h.dropdownButtonClassName,!0);var c=-1!==["up","down"].indexOf(e.direction);i.each(function(a,i){var s=n.select(this);s.call(y,e,a,t);var f=s.select("."+h.itemTextClassName),p=f.node()&&o.bBox(f.node()).width,d=Math.max(p+h.textPadX,h.minWidth),g=e.font.size*u,v=l.lineCount(f),m=Math.max(g*v,h.minHeight)+h.textOffsetY;m=Math.ceil(m),d=Math.ceil(d),r.widths[i]=d,r.heights[i]=m,r.height1=Math.max(r.height1,m),r.width1=Math.max(r.width1,d),c?(r.totalWidth=Math.max(r.totalWidth,d),r.openWidth=r.totalWidth,r.totalHeight+=m+h.gapButton,r.openHeight+=m+h.gapButton):(r.totalWidth+=d+h.gapButton,r.openWidth+=d+h.gapButton,r.totalHeight=Math.max(r.totalHeight,m),r.openHeight=r.totalHeight)}),c?r.totalHeight-=h.gapButton:r.totalWidth-=h.gapButton,r.headerWidth=r.width1+h.arrowPadX,r.headerHeight=r.height1,"dropdown"===e.type&&(c?(r.width1+=h.arrowPadX,r.totalHeight=r.height1):r.totalWidth=r.width1,r.totalWidth+=h.arrowPadX),i.remove();var f=r.totalWidth+e.pad.l+e.pad.r,p=r.totalHeight+e.pad.t+e.pad.b,d=t._fullLayout._size;r.lx=d.l+d.w*e.x,r.ly=d.t+d.h*(1-e.y);var g="left";s.isRightAnchor(e)&&(r.lx-=f,g="right"),s.isCenterAnchor(e)&&(r.lx-=f/2,g="center");var v="top";s.isBottomAnchor(e)&&(r.ly-=p,v="bottom"),s.isMiddleAnchor(e)&&(r.ly-=p/2,v="middle"),r.totalWidth=Math.ceil(r.totalWidth),r.totalHeight=Math.ceil(r.totalHeight),r.lx=Math.round(r.lx),r.ly=Math.round(r.ly),a.autoMargin(t,M(e),{x:e.x,y:e.y,l:f*({right:1,center:.5}[g]||0),r:f*({left:1,center:.5}[g]||0),b:p*({top:1,middle:.5}[v]||0),t:p*({bottom:1,middle:.5}[v]||0)})}function M(t){return h.autoMarginIdRoot+t._index}function A(t,e,r,n){n=n||{};var a=t.select("."+h.itemRectClassName),i=t.select("."+h.itemTextClassName),s=e.borderwidth,c=r.index,f=e._dims;o.setTranslate(t,s+r.x,s+r.y);var p=-1!==["up","down"].indexOf(e.direction),d=n.height||(p?f.heights[c]:f.height1);a.attr({x:0,y:0,width:n.width||(p?f.width1:f.widths[c]),height:d});var g=e.font.size*u,v=(l.lineCount(i)-1)*g/2;l.positionText(i,h.textOffsetX,d/2-v+h.textOffsetY),p?r.y+=f.heights[c]+r.yPad:r.x+=f.widths[c]+r.xPad,r.index++}function S(t,e){t.attr(h.menuIndexAttrName,e||"-1").selectAll("g."+h.dropdownButtonClassName).remove()}e.exports=function(t){var e=t._fullLayout,r=s.filterVisible(e[h.name]);function i(e){a.autoMargin(t,M(e))}var o=e._menulayer.selectAll("g."+h.containerClassName).data(r.length>0?[0]:[]);if(o.enter().append("g").classed(h.containerClassName,!0).style("cursor","pointer"),o.exit().each(function(){n.select(this).selectAll("g."+h.headerGroupClassName).each(i)}).remove(),0!==r.length){var l=o.selectAll("g."+h.headerGroupClassName).data(r,p);l.enter().append("g").classed(h.headerGroupClassName,!0);for(var c=s.ensureSingle(o,"g",h.dropdownButtonGroupClassName,function(t){t.style("pointer-events","all")}),u=0;u<r.length;u++){var y=r[u];T(t,y)}var x="updatemenus"+e._uid,b=new f(t,c,x);l.enter().size()&&(c.node().parentNode.appendChild(c.node()),c.call(S)),l.exit().each(function(t){c.call(S),i(t)}).remove(),l.each(function(e){var r=n.select(this),i="dropdown"===e.type?c:null;a.manageCommandObserver(t,e,e.buttons,function(n){g(t,e,e.buttons[n.index],r,i,b,n.index,!0)}),"dropdown"===e.type?(v(t,r,c,b,e),d(c,e)&&m(t,r,c,b,e)):m(t,r,null,null,e)})}}},{"../../constants/alignment":686,"../../lib":717,"../../lib/svg_text_utils":741,"../../plot_api/plot_template":755,"../../plots/plots":826,"../color":591,"../drawing":612,"./constants":681,"./scrollbox":685,d3:165}],684:[function(t,e,r){arguments[4][678][0].apply(r,arguments)},{"./attributes":680,"./constants":681,"./defaults":682,"./draw":683,dup:678}],685:[function(t,e,r){"use strict";e.exports=s;var n=t("d3"),a=t("../color"),i=t("../drawing"),o=t("../../lib");function s(t,e,r){this.gd=t,this.container=e,this.id=r,this.position=null,this.translateX=null,this.translateY=null,this.hbar=null,this.vbar=null,this.bg=this.container.selectAll("rect.scrollbox-bg").data([0]),this.bg.exit().on(".drag",null).on("wheel",null).remove(),this.bg.enter().append("rect").classed("scrollbox-bg",!0).style("pointer-events","all").attr({opacity:0,x:0,y:0,width:0,height:0})}s.barWidth=2,s.barLength=20,s.barRadius=2,s.barPad=1,s.barColor="#808BA4",s.prototype.enable=function(t,e,r){var o=this.gd._fullLayout,l=o.width,c=o.height;this.position=t;var u,h,f,p,d=this.position.l,g=this.position.w,v=this.position.t,m=this.position.h,y=this.position.direction,x="down"===y,b="left"===y,_="up"===y,w=g,k=m;x||b||"right"===y||_||(this.position.direction="down",x=!0),x||_?(h=(u=d)+w,x?(f=v,k=(p=Math.min(f+k,c))-f):k=(p=v+k)-(f=Math.max(p-k,0))):(p=(f=v)+k,b?w=(h=d+w)-(u=Math.max(h-w,0)):(u=d,w=(h=Math.min(u+w,l))-u)),this._box={l:u,t:f,w:w,h:k};var T=g>w,M=s.barLength+2*s.barPad,A=s.barWidth+2*s.barPad,S=d,E=v+m;E+A>c&&(E=c-A);var L=this.container.selectAll("rect.scrollbar-horizontal").data(T?[0]:[]);L.exit().on(".drag",null).remove(),L.enter().append("rect").classed("scrollbar-horizontal",!0).call(a.fill,s.barColor),T?(this.hbar=L.attr({rx:s.barRadius,ry:s.barRadius,x:S,y:E,width:M,height:A}),this._hbarXMin=S+M/2,this._hbarTranslateMax=w-M):(delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax);var C=m>k,P=s.barWidth+2*s.barPad,O=s.barLength+2*s.barPad,z=d+g,I=v;z+P>l&&(z=l-P);var D=this.container.selectAll("rect.scrollbar-vertical").data(C?[0]:[]);D.exit().on(".drag",null).remove(),D.enter().append("rect").classed("scrollbar-vertical",!0).call(a.fill,s.barColor),C?(this.vbar=D.attr({rx:s.barRadius,ry:s.barRadius,x:z,y:I,width:P,height:O}),this._vbarYMin=I+O/2,this._vbarTranslateMax=k-O):(delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax);var R=this.id,F=u-.5,B=C?h+P+.5:h+.5,N=f-.5,j=T?p+A+.5:p+.5,V=o._topdefs.selectAll("#"+R).data(T||C?[0]:[]);if(V.exit().remove(),V.enter().append("clipPath").attr("id",R).append("rect"),T||C?(this._clipRect=V.select("rect").attr({x:Math.floor(F),y:Math.floor(N),width:Math.ceil(B)-Math.floor(F),height:Math.ceil(j)-Math.floor(N)}),this.container.call(i.setClipUrl,R,this.gd),this.bg.attr({x:d,y:v,width:g,height:m})):(this.bg.attr({width:0,height:0}),this.container.on("wheel",null).on(".drag",null).call(i.setClipUrl,null),delete this._clipRect),T||C){var U=n.behavior.drag().on("dragstart",function(){n.event.sourceEvent.preventDefault()}).on("drag",this._onBoxDrag.bind(this));this.container.on("wheel",null).on("wheel",this._onBoxWheel.bind(this)).on(".drag",null).call(U);var q=n.behavior.drag().on("dragstart",function(){n.event.sourceEvent.preventDefault(),n.event.sourceEvent.stopPropagation()}).on("drag",this._onBarDrag.bind(this));T&&this.hbar.on(".drag",null).call(q),C&&this.vbar.on(".drag",null).call(q)}this.setTranslate(e,r)},s.prototype.disable=function(){(this.hbar||this.vbar)&&(this.bg.attr({width:0,height:0}),this.container.on("wheel",null).on(".drag",null).call(i.setClipUrl,null),delete this._clipRect),this.hbar&&(this.hbar.on(".drag",null),this.hbar.remove(),delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax),this.vbar&&(this.vbar.on(".drag",null),this.vbar.remove(),delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax)},s.prototype._onBoxDrag=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t-=n.event.dx),this.vbar&&(e-=n.event.dy),this.setTranslate(t,e)},s.prototype._onBoxWheel=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t+=n.event.deltaY),this.vbar&&(e+=n.event.deltaY),this.setTranslate(t,e)},s.prototype._onBarDrag=function(){var t=this.translateX,e=this.translateY;if(this.hbar){var r=t+this._hbarXMin,a=r+this._hbarTranslateMax;t=(o.constrain(n.event.x,r,a)-r)/(a-r)*(this.position.w-this._box.w)}if(this.vbar){var i=e+this._vbarYMin,s=i+this._vbarTranslateMax;e=(o.constrain(n.event.y,i,s)-i)/(s-i)*(this.position.h-this._box.h)}this.setTranslate(t,e)},s.prototype.setTranslate=function(t,e){var r=this.position.w-this._box.w,n=this.position.h-this._box.h;if(t=o.constrain(t||0,0,r),e=o.constrain(e||0,0,n),this.translateX=t,this.translateY=e,this.container.call(i.setTranslate,this._box.l-this.position.l-t,this._box.t-this.position.t-e),this._clipRect&&this._clipRect.attr({x:Math.floor(this.position.l+t-.5),y:Math.floor(this.position.t+e-.5)}),this.hbar){var a=t/r;this.hbar.call(i.setTranslate,t+a*this._hbarTranslateMax,e)}if(this.vbar){var s=e/n;this.vbar.call(i.setTranslate,t,e+s*this._vbarTranslateMax)}}},{"../../lib":717,"../color":591,"../drawing":612,d3:165}],686:[function(t,e,r){"use strict";e.exports={FROM_BL:{left:0,center:.5,right:1,bottom:0,middle:.5,top:1},FROM_TL:{left:0,center:.5,right:1,bottom:1,middle:.5,top:0},FROM_BR:{left:1,center:.5,right:0,bottom:0,middle:.5,top:1},LINE_SPACING:1.3,CAP_SHIFT:.7,MID_SHIFT:.35,OPPOSITE_SIDE:{left:"right",right:"left",top:"bottom",bottom:"top"}}},{}],687:[function(t,e,r){"use strict";e.exports={INCREASING:{COLOR:"#3D9970",SYMBOL:"\u25b2"},DECREASING:{COLOR:"#FF4136",SYMBOL:"\u25bc"}}},{}],688:[function(t,e,r){"use strict";e.exports={FORMAT_LINK:"https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format",DATE_FORMAT_LINK:"https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Formatting.md#format"}},{}],689:[function(t,e,r){"use strict";e.exports={COMPARISON_OPS:["=","!=","<",">=",">","<="],COMPARISON_OPS2:["=","<",">=",">","<="],INTERVAL_OPS:["[]","()","[)","(]","][",")(","](",")["],SET_OPS:["{}","}{"],CONSTRAINT_REDUCTION:{"=":"=","<":"<","<=":"<",">":">",">=":">","[]":"[]","()":"[]","[)":"[]","(]":"[]","][":"][",")(":"][","](":"][",")[":"]["}}},{}],690:[function(t,e,r){"use strict";e.exports={solid:[[],0],dot:[[.5,1],200],dash:[[.5,1],50],longdash:[[.5,1],10],dashdot:[[.5,.625,.875,1],50],longdashdot:[[.5,.7,.8,1],10]}},{}],691:[function(t,e,r){"use strict";e.exports={circle:"\u25cf","circle-open":"\u25cb",square:"\u25a0","square-open":"\u25a1",diamond:"\u25c6","diamond-open":"\u25c7",cross:"+",x:"\u274c"}},{}],692:[function(t,e,r){"use strict";e.exports={SHOW_PLACEHOLDER:100,HIDE_PLACEHOLDER:1e3,DESELECTDIM:.2}},{}],693:[function(t,e,r){"use strict";e.exports={BADNUM:void 0,FP_SAFE:Number.MAX_VALUE/1e4,ONEAVGYEAR:315576e5,ONEAVGMONTH:26298e5,ONEDAY:864e5,ONEHOUR:36e5,ONEMIN:6e4,ONESEC:1e3,EPOCHJD:2440587.5,ALMOST_EQUAL:1-1e-6,LOG_CLIP:10,MINUS_SIGN:"\u2212"}},{}],694:[function(t,e,r){"use strict";r.xmlns="http://www.w3.org/2000/xmlns/",r.svg="http://www.w3.org/2000/svg",r.xlink="http://www.w3.org/1999/xlink",r.svgAttrs={xmlns:r.svg,"xmlns:xlink":r.xlink}},{}],695:[function(t,e,r){"use strict";r.version=t("./version").version,t("es6-promise").polyfill(),t("../build/plotcss"),t("./fonts/mathjax_config")();for(var n=t("./registry"),a=r.register=n.register,i=t("./plot_api"),o=Object.keys(i),s=0;s<o.length;s++){var l=o[s];"_"!==l.charAt(0)&&(r[l]=i[l]),a({moduleType:"apiMethod",name:l,fn:i[l]})}a(t("./traces/scatter")),a([t("./components/legend"),t("./components/fx"),t("./components/annotations"),t("./components/annotations3d"),t("./components/shapes"),t("./components/images"),t("./components/updatemenus"),t("./components/sliders"),t("./components/rangeslider"),t("./components/rangeselector"),t("./components/grid"),t("./components/errorbars"),t("./components/colorscale"),t("./components/colorbar")]),a([t("./locale-en"),t("./locale-en-us")]),window.PlotlyLocales&&Array.isArray(window.PlotlyLocales)&&(a(window.PlotlyLocales),delete window.PlotlyLocales),r.Icons=t("./fonts/ploticon"),r.Plots=t("./plots/plots"),r.Fx=t("./components/fx"),r.Snapshot=t("./snapshot"),r.PlotSchema=t("./plot_api/plot_schema"),r.Queue=t("./lib/queue"),r.d3=t("d3")},{"../build/plotcss":1,"./components/annotations":582,"./components/annotations3d":587,"./components/colorbar":597,"./components/colorscale":603,"./components/errorbars":618,"./components/fx":630,"./components/grid":634,"./components/images":639,"./components/legend":647,"./components/rangeselector":658,"./components/rangeslider":665,"./components/shapes":673,"./components/sliders":678,"./components/updatemenus":684,"./fonts/mathjax_config":696,"./fonts/ploticon":697,"./lib/queue":732,"./locale-en":746,"./locale-en-us":745,"./plot_api":750,"./plot_api/plot_schema":754,"./plots/plots":826,"./registry":846,"./snapshot":851,"./traces/scatter":1132,"./version":1302,d3:165,"es6-promise":221}],696:[function(t,e,r){"use strict";e.exports=function(){"undefined"!=typeof MathJax&&("local"!==(window.PlotlyConfig||{}).MathJaxConfig&&(MathJax.Hub.Config({messageStyle:"none",skipStartupTypeset:!0,displayAlign:"left",tex2jax:{inlineMath:[["$","$"],["\\(","\\)"]]}}),MathJax.Hub.Configured()))}},{}],697:[function(t,e,r){"use strict";e.exports={undo:{width:857.1,height:1e3,path:"m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z",transform:"matrix(1 0 0 -1 0 850)"},home:{width:928.6,height:1e3,path:"m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z",transform:"matrix(1 0 0 -1 0 850)"},"camera-retro":{width:1e3,height:1e3,path:"m518 386q0 8-5 13t-13 5q-37 0-63-27t-26-63q0-8 5-13t13-5 12 5 5 13q0 23 16 38t38 16q8 0 13 5t5 13z m125-73q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m-572-320h858v71h-858v-71z m643 320q0 89-62 152t-152 62-151-62-63-152 63-151 151-63 152 63 62 151z m-571 358h214v72h-214v-72z m-72-107h858v143h-462l-36-71h-360v-72z m929 143v-714q0-30-21-51t-50-21h-858q-29 0-50 21t-21 51v714q0 30 21 51t50 21h858q29 0 50-21t21-51z",transform:"matrix(1 0 0 -1 0 850)"},zoombox:{width:1e3,height:1e3,path:"m1000-25l-250 251c40 63 63 138 63 218 0 224-182 406-407 406-224 0-406-182-406-406s183-406 407-406c80 0 155 22 218 62l250-250 125 125z m-812 250l0 438 437 0 0-438-437 0z m62 375l313 0 0-312-313 0 0 312z",transform:"matrix(1 0 0 -1 0 850)"},pan:{width:1e3,height:1e3,path:"m1000 350l-187 188 0-125-250 0 0 250 125 0-188 187-187-187 125 0 0-250-250 0 0 125-188-188 186-187 0 125 252 0 0-250-125 0 187-188 188 188-125 0 0 250 250 0 0-126 187 188z",transform:"matrix(1 0 0 -1 0 850)"},zoom_plus:{width:875,height:1e3,path:"m1 787l0-875 875 0 0 875-875 0z m687-500l-187 0 0-187-125 0 0 187-188 0 0 125 188 0 0 187 125 0 0-187 187 0 0-125z",transform:"matrix(1 0 0 -1 0 850)"},zoom_minus:{width:875,height:1e3,path:"m0 788l0-876 875 0 0 876-875 0z m688-500l-500 0 0 125 500 0 0-125z",transform:"matrix(1 0 0 -1 0 850)"},autoscale:{width:1e3,height:1e3,path:"m250 850l-187 0-63 0 0-62 0-188 63 0 0 188 187 0 0 62z m688 0l-188 0 0-62 188 0 0-188 62 0 0 188 0 62-62 0z m-875-938l0 188-63 0 0-188 0-62 63 0 187 0 0 62-187 0z m875 188l0-188-188 0 0-62 188 0 62 0 0 62 0 188-62 0z m-125 188l-1 0-93-94-156 156 156 156 92-93 2 0 0 250-250 0 0-2 93-92-156-156-156 156 94 92 0 2-250 0 0-250 0 0 93 93 157-156-157-156-93 94 0 0 0-250 250 0 0 0-94 93 156 157 156-157-93-93 0 0 250 0 0 250z",transform:"matrix(1 0 0 -1 0 850)"},tooltip_basic:{width:1500,height:1e3,path:"m375 725l0 0-375-375 375-374 0-1 1125 0 0 750-1125 0z",transform:"matrix(1 0 0 -1 0 850)"},tooltip_compare:{width:1125,height:1e3,path:"m187 786l0 2-187-188 188-187 0 0 937 0 0 373-938 0z m0-499l0 1-187-188 188-188 0 0 937 0 0 376-938-1z",transform:"matrix(1 0 0 -1 0 850)"},plotlylogo:{width:1542,height:1e3,path:"m0-10h182v-140h-182v140z m228 146h183v-286h-183v286z m225 714h182v-1000h-182v1000z m225-285h182v-715h-182v715z m225 142h183v-857h-183v857z m231-428h182v-429h-182v429z m225-291h183v-138h-183v138z",transform:"matrix(1 0 0 -1 0 850)"},"z-axis":{width:1e3,height:1e3,path:"m833 5l-17 108v41l-130-65 130-66c0 0 0 38 0 39 0-1 36-14 39-25 4-15-6-22-16-30-15-12-39-16-56-20-90-22-187-23-279-23-261 0-341 34-353 59 3 60 228 110 228 110-140-8-351-35-351-116 0-120 293-142 474-142 155 0 477 22 477 142 0 50-74 79-163 96z m-374 94c-58-5-99-21-99-40 0-24 65-43 144-43 79 0 143 19 143 43 0 19-42 34-98 40v216h87l-132 135-133-135h88v-216z m167 515h-136v1c16 16 31 34 46 52l84 109v54h-230v-71h124v-1c-16-17-28-32-44-51l-89-114v-51h245v72z",transform:"matrix(1 0 0 -1 0 850)"},"3d_rotate":{width:1e3,height:1e3,path:"m922 660c-5 4-9 7-14 11-359 263-580-31-580-31l-102 28 58-400c0 1 1 1 2 2 118 108 351 249 351 249s-62 27-100 42c88 83 222 183 347 122 16-8 30-17 44-27-2 1-4 2-6 4z m36-329c0 0 64 229-88 296-62 27-124 14-175-11 157-78 225-208 249-266 8-19 11-31 11-31 2 5 6 15 11 32-5-13-8-20-8-20z m-775-239c70-31 117-50 198-32-121 80-199 346-199 346l-96-15-58-12c0 0 55-226 155-287z m603 133l-317-139c0 0 4-4 19-14 7-5 24-15 24-15s-177-147-389 4c235-287 536-112 536-112l31-22 100 299-4-1z m-298-153c6-4 14-9 24-15 0 0-17 10-24 15z",transform:"matrix(1 0 0 -1 0 850)"},camera:{width:1e3,height:1e3,path:"m500 450c-83 0-150-67-150-150 0-83 67-150 150-150 83 0 150 67 150 150 0 83-67 150-150 150z m400 150h-120c-16 0-34 13-39 29l-31 93c-6 15-23 28-40 28h-340c-16 0-34-13-39-28l-31-94c-6-15-23-28-40-28h-120c-55 0-100-45-100-100v-450c0-55 45-100 100-100h800c55 0 100 45 100 100v450c0 55-45 100-100 100z m-400-550c-138 0-250 112-250 250 0 138 112 250 250 250 138 0 250-112 250-250 0-138-112-250-250-250z m365 380c-19 0-35 16-35 35 0 19 16 35 35 35 19 0 35-16 35-35 0-19-16-35-35-35z",transform:"matrix(1 0 0 -1 0 850)"},movie:{width:1e3,height:1e3,path:"m938 413l-188-125c0 37-17 71-44 94 64 38 107 107 107 187 0 121-98 219-219 219-121 0-219-98-219-219 0-61 25-117 66-156h-115c30 33 49 76 49 125 0 103-84 187-187 187s-188-84-188-187c0-57 26-107 65-141-38-22-65-62-65-109v-250c0-70 56-126 125-126h500c69 0 125 56 125 126l188-126c34 0 62 28 62 63v375c0 35-28 63-62 63z m-750 0c-69 0-125 56-125 125s56 125 125 125 125-56 125-125-56-125-125-125z m406-1c-87 0-157 70-157 157 0 86 70 156 157 156s156-70 156-156-70-157-156-157z",transform:"matrix(1 0 0 -1 0 850)"},question:{width:857.1,height:1e3,path:"m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z",transform:"matrix(1 0 0 -1 0 850)"},disk:{width:857.1,height:1e3,path:"m214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-8 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z",transform:"matrix(1 0 0 -1 0 850)"},lasso:{width:1031,height:1e3,path:"m1018 538c-36 207-290 336-568 286-277-48-473-256-436-463 10-57 36-108 76-151-13-66 11-137 68-183 34-28 75-41 114-42l-55-70 0 0c-2-1-3-2-4-3-10-14-8-34 5-45 14-11 34-8 45 4 1 1 2 3 2 5l0 0 113 140c16 11 31 24 45 40 4 3 6 7 8 11 48-3 100 0 151 9 278 48 473 255 436 462z m-624-379c-80 14-149 48-197 96 42 42 109 47 156 9 33-26 47-66 41-105z m-187-74c-19 16-33 37-39 60 50-32 109-55 174-68-42-25-95-24-135 8z m360 75c-34-7-69-9-102-8 8 62-16 128-68 170-73 59-175 54-244-5-9 20-16 40-20 61-28 159 121 317 333 354s407-60 434-217c28-159-121-318-333-355z",transform:"matrix(1 0 0 -1 0 850)"},selectbox:{width:1e3,height:1e3,path:"m0 850l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-285l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z",transform:"matrix(1 0 0 -1 0 850)"},spikeline:{width:1e3,height:1e3,path:"M512 409c0-57-46-104-103-104-57 0-104 47-104 104 0 57 47 103 104 103 57 0 103-46 103-103z m-327-39l92 0 0 92-92 0z m-185 0l92 0 0 92-92 0z m370-186l92 0 0 93-92 0z m0-184l92 0 0 92-92 0z",transform:"matrix(1.5 0 0 -1.5 0 850)"},pencil:{width:1792,height:1792,path:"M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z",transform:"matrix(1 0 0 1 0 1)"},newplotlylogo:{name:"newplotlylogo",svg:"<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 132 132'><defs><style>.cls-1 {fill: #3f4f75;} .cls-2 {fill: #80cfbe;} .cls-3 {fill: #fff;}</style></defs><title>plotly-logomark</title><g id='symbol'><rect class='cls-1' width='132' height='132' rx='6' ry='6'/><circle class='cls-2' cx='78' cy='54' r='6'/><circle class='cls-2' cx='102' cy='30' r='6'/><circle class='cls-2' cx='78' cy='30' r='6'/><circle class='cls-2' cx='54' cy='30' r='6'/><circle class='cls-2' cx='30' cy='30' r='6'/><circle class='cls-2' cx='30' cy='54' r='6'/><path class='cls-3' d='M30,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,30,72Z'/><path class='cls-3' d='M78,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,78,72Z'/><path class='cls-3' d='M54,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,54,48Z'/><path class='cls-3' d='M102,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,102,48Z'/></g></svg>"}}},{}],698:[function(t,e,r){"use strict";r.isLeftAnchor=function(t){return"left"===t.xanchor||"auto"===t.xanchor&&t.x<=1/3},r.isCenterAnchor=function(t){return"center"===t.xanchor||"auto"===t.xanchor&&t.x>1/3&&t.x<2/3},r.isRightAnchor=function(t){return"right"===t.xanchor||"auto"===t.xanchor&&t.x>=2/3},r.isTopAnchor=function(t){return"top"===t.yanchor||"auto"===t.yanchor&&t.y>=2/3},r.isMiddleAnchor=function(t){return"middle"===t.yanchor||"auto"===t.yanchor&&t.y>1/3&&t.y<2/3},r.isBottomAnchor=function(t){return"bottom"===t.yanchor||"auto"===t.yanchor&&t.y<=1/3}},{}],699:[function(t,e,r){"use strict";var n=t("./mod"),a=n.mod,i=n.modHalf,o=Math.PI,s=2*o;function l(t){return Math.abs(t[1]-t[0])>s-1e-14}function c(t,e){return i(e-t,s)}function u(t,e){if(l(e))return!0;var r,n;e[0]<e[1]?(r=e[0],n=e[1]):(r=e[1],n=e[0]),(r=a(r,s))>(n=a(n,s))&&(n+=s);var i=a(t,s),o=i+s;return i>=r&&i<=n||o>=r&&o<=n}function h(t,e,r,n,a,i,c){a=a||0,i=i||0;var u,h,f,p,d,g=l([r,n]);function v(t,e){return[t*Math.cos(e)+a,i-t*Math.sin(e)]}g?(u=0,h=o,f=s):r<n?(u=r,f=n):(u=n,f=r),t<e?(p=t,d=e):(p=e,d=t);var m,y=Math.abs(f-u)<=o?0:1;function x(t,e,r){return"A"+[t,t]+" "+[0,y,r]+" "+v(t,e)}return g?m=null===p?"M"+v(d,u)+x(d,h,0)+x(d,f,0)+"Z":"M"+v(p,u)+x(p,h,0)+x(p,f,0)+"ZM"+v(d,u)+x(d,h,1)+x(d,f,1)+"Z":null===p?(m="M"+v(d,u)+x(d,f,0),c&&(m+="L0,0Z")):m="M"+v(p,u)+"L"+v(d,u)+x(d,f,0)+"L"+v(p,f)+x(p,u,1)+"Z",m}e.exports={deg2rad:function(t){return t/180*o},rad2deg:function(t){return t/o*180},angleDelta:c,angleDist:function(t,e){return Math.abs(c(t,e))},isFullCircle:l,isAngleInsideSector:u,isPtInsideSector:function(t,e,r,n){return!!u(e,n)&&(r[0]<r[1]?(a=r[0],i=r[1]):(a=r[1],i=r[0]),t>=a&&t<=i);var a,i},pathArc:function(t,e,r,n,a){return h(null,t,e,r,n,a,0)},pathSector:function(t,e,r,n,a){return h(null,t,e,r,n,a,1)},pathAnnulus:function(t,e,r,n,a,i){return h(t,e,r,n,a,i,1)}}},{"./mod":724}],700:[function(t,e,r){"use strict";var n=Array.isArray,a="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer:{isView:function(){return!1}},i="undefined"==typeof DataView?function(){}:DataView;function o(t){return a.isView(t)&&!(t instanceof i)}function s(t){return n(t)||o(t)}function l(t,e,r){if(s(t)){if(s(t[0])){for(var n=r,a=0;a<t.length;a++)n=e(n,t[a].length);return n}return t.length}return 0}r.isTypedArray=o,r.isArrayOrTypedArray=s,r.isArray1D=function(t){return!s(t[0])},r.ensureArray=function(t,e){return n(t)||(t=[]),t.length=e,t},r.concat=function(){var t,e,r,a,i,o,s,l,c=[],u=!0,h=0;for(r=0;r<arguments.length;r++)(o=(a=arguments[r]).length)&&(e?c.push(a):(e=a,i=o),n(a)?t=!1:(u=!1,h?t!==a.constructor&&(t=!1):t=a.constructor),h+=o);if(!h)return[];if(!c.length)return e;if(u)return e.concat.apply(e,c);if(t){for((s=new t(h)).set(e),r=0;r<c.length;r++)a=c[r],s.set(a,i),i+=a.length;return s}for(s=new Array(h),l=0;l<e.length;l++)s[l]=e[l];for(r=0;r<c.length;r++){for(a=c[r],l=0;l<a.length;l++)s[i+l]=a[l];i+=l}return s},r.maxRowLength=function(t){return l(t,Math.max,0)},r.minRowLength=function(t){return l(t,Math.min,1/0)}},{}],701:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../constants/numerical").BADNUM,i=/^['"%,$#\s']+|[, ]|['"%,$#\s']+$/g;e.exports=function(t){return"string"==typeof t&&(t=t.replace(i,"")),n(t)?Number(t):a}},{"../constants/numerical":693,"fast-isnumeric":228}],702:[function(t,e,r){"use strict";e.exports=function(t){var e=t._fullLayout;e._glcanvas&&e._glcanvas.size()&&e._glcanvas.each(function(t){t.regl&&t.regl.clear({color:!0,depth:!0})})}},{}],703:[function(t,e,r){"use strict";e.exports=function(t){t._responsiveChartHandler&&(window.removeEventListener("resize",t._responsiveChartHandler),delete t._responsiveChartHandler)}},{}],704:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("tinycolor2"),i=t("../plots/attributes"),o=t("../components/colorscale/scales"),s=t("../constants/interactions").DESELECTDIM,l=t("./nested_property"),c=t("./regex").counter,u=t("./mod").modHalf,h=t("./array").isArrayOrTypedArray;function f(t,e){var n=r.valObjectMeta[e.valType];if(e.arrayOk&&h(t))return!0;if(n.validateFunction)return n.validateFunction(t,e);var a={},i=a,o={set:function(t){i=t}};return n.coerceFunction(t,o,a,e),i!==a}r.valObjectMeta={data_array:{coerceFunction:function(t,e,r){h(t)?e.set(t):void 0!==r&&e.set(r)}},enumerated:{coerceFunction:function(t,e,r,n){n.coerceNumber&&(t=+t),-1===n.values.indexOf(t)?e.set(r):e.set(t)},validateFunction:function(t,e){e.coerceNumber&&(t=+t);for(var r=e.values,n=0;n<r.length;n++){var a=String(r[n]);if("/"===a.charAt(0)&&"/"===a.charAt(a.length-1)){if(new RegExp(a.substr(1,a.length-2)).test(t))return!0}else if(t===r[n])return!0}return!1}},boolean:{coerceFunction:function(t,e,r){!0===t||!1===t?e.set(t):e.set(r)}},number:{coerceFunction:function(t,e,r,a){!n(t)||void 0!==a.min&&t<a.min||void 0!==a.max&&t>a.max?e.set(r):e.set(+t)}},integer:{coerceFunction:function(t,e,r,a){t%1||!n(t)||void 0!==a.min&&t<a.min||void 0!==a.max&&t>a.max?e.set(r):e.set(+t)}},string:{coerceFunction:function(t,e,r,n){if("string"!=typeof t){var a="number"==typeof t;!0!==n.strict&&a?e.set(String(t)):e.set(r)}else n.noBlank&&!t?e.set(r):e.set(t)}},color:{coerceFunction:function(t,e,r){a(t).isValid()?e.set(t):e.set(r)}},colorlist:{coerceFunction:function(t,e,r){Array.isArray(t)&&t.length&&t.every(function(t){return a(t).isValid()})?e.set(t):e.set(r)}},colorscale:{coerceFunction:function(t,e,r){e.set(o.get(t,r))}},angle:{coerceFunction:function(t,e,r){"auto"===t?e.set("auto"):n(t)?e.set(u(+t,360)):e.set(r)}},subplotid:{coerceFunction:function(t,e,r,n){var a=n.regex||c(r);"string"==typeof t&&a.test(t)?e.set(t):e.set(r)},validateFunction:function(t,e){var r=e.dflt;return t===r||"string"==typeof t&&!!c(r).test(t)}},flaglist:{coerceFunction:function(t,e,r,n){if("string"==typeof t)if(-1===(n.extras||[]).indexOf(t)){for(var a=t.split("+"),i=0;i<a.length;){var o=a[i];-1===n.flags.indexOf(o)||a.indexOf(o)<i?a.splice(i,1):i++}a.length?e.set(a.join("+")):e.set(r)}else e.set(t);else e.set(r)}},any:{coerceFunction:function(t,e,r){void 0===t?e.set(r):e.set(t)}},info_array:{coerceFunction:function(t,e,n,a){function i(t,e,n){var a,i={set:function(t){a=t}};return void 0===n&&(n=e.dflt),r.valObjectMeta[e.valType].coerceFunction(t,i,n,e),a}var o=2===a.dimensions||"1-2"===a.dimensions&&Array.isArray(t)&&Array.isArray(t[0]);if(Array.isArray(t)){var s,l,c,u,h,f,p=a.items,d=[],g=Array.isArray(p),v=g&&o&&Array.isArray(p[0]),m=o&&g&&!v,y=g&&!m?p.length:t.length;if(n=Array.isArray(n)?n:[],o)for(s=0;s<y;s++)for(d[s]=[],c=Array.isArray(t[s])?t[s]:[],h=m?p.length:g?p[s].length:c.length,l=0;l<h;l++)u=m?p[l]:g?p[s][l]:p,void 0!==(f=i(c[l],u,(n[s]||[])[l]))&&(d[s][l]=f);else for(s=0;s<y;s++)void 0!==(f=i(t[s],g?p[s]:p,n[s]))&&(d[s]=f);e.set(d)}else e.set(n)},validateFunction:function(t,e){if(!Array.isArray(t))return!1;var r=e.items,n=Array.isArray(r),a=2===e.dimensions;if(!e.freeLength&&t.length!==r.length)return!1;for(var i=0;i<t.length;i++)if(a){if(!Array.isArray(t[i])||!e.freeLength&&t[i].length!==r[i].length)return!1;for(var o=0;o<t[i].length;o++)if(!f(t[i][o],n?r[i][o]:r))return!1}else if(!f(t[i],n?r[i]:r))return!1;return!0}}},r.coerce=function(t,e,n,a,i){var o=l(n,a).get(),s=l(t,a),c=l(e,a),u=s.get(),p=e._template;if(void 0===u&&p&&(u=l(p,a).get(),p=0),void 0===i&&(i=o.dflt),o.arrayOk&&h(u))return c.set(u),u;var d=r.valObjectMeta[o.valType].coerceFunction;d(u,c,i,o);var g=c.get();return p&&g===i&&!f(u,o)&&(d(u=l(p,a).get(),c,i,o),g=c.get()),g},r.coerce2=function(t,e,n,a,i){var o=l(t,a),s=r.coerce(t,e,n,a,i),c=o.get();return null!=c&&s},r.coerceFont=function(t,e,r){var n={};return r=r||{},n.family=t(e+".family",r.family),n.size=t(e+".size",r.size),n.color=t(e+".color",r.color),n},r.coerceHoverinfo=function(t,e,n){var a,o=e._module.attributes,s=o.hoverinfo?o:i,l=s.hoverinfo;if(1===n._dataLength){var c="all"===l.dflt?l.flags.slice():l.dflt.split("+");c.splice(c.indexOf("name"),1),a=c.join("+")}return r.coerce(t,e,s,"hoverinfo",a)},r.coerceSelectionMarkerOpacity=function(t,e){if(t.marker){var r,n,a=t.marker.opacity;if(void 0!==a)h(a)||t.selected||t.unselected||(r=a,n=s*a),e("selected.marker.opacity",r),e("unselected.marker.opacity",n)}},r.validate=f},{"../components/colorscale/scales":606,"../constants/interactions":692,"../plots/attributes":762,"./array":700,"./mod":724,"./nested_property":725,"./regex":733,"fast-isnumeric":228,tinycolor2:535}],705:[function(t,e,r){"use strict";var n,a,i=t("d3"),o=t("fast-isnumeric"),s=t("./loggers"),l=t("./mod").mod,c=t("../constants/numerical"),u=c.BADNUM,h=c.ONEDAY,f=c.ONEHOUR,p=c.ONEMIN,d=c.ONESEC,g=c.EPOCHJD,v=t("../registry"),m=i.time.format.utc,y=/^\s*(-?\d\d\d\d|\d\d)(-(\d?\d)(-(\d?\d)([ Tt]([01]?\d|2[0-3])(:([0-5]\d)(:([0-5]\d(\.\d+)?))?(Z|z|[+\-]\d\d:?\d\d)?)?)?)?)?\s*$/m,x=/^\s*(-?\d\d\d\d|\d\d)(-(\d?\di?)(-(\d?\d)([ Tt]([01]?\d|2[0-3])(:([0-5]\d)(:([0-5]\d(\.\d+)?))?(Z|z|[+\-]\d\d:?\d\d)?)?)?)?)?\s*$/m,b=(new Date).getFullYear()-70;function _(t){return t&&v.componentsRegistry.calendars&&"string"==typeof t&&"gregorian"!==t}function w(t,e){return String(t+Math.pow(10,e)).substr(1)}r.dateTick0=function(t,e){return _(t)?e?v.getComponentMethod("calendars","CANONICAL_SUNDAY")[t]:v.getComponentMethod("calendars","CANONICAL_TICK")[t]:e?"2000-01-02":"2000-01-01"},r.dfltRange=function(t){return _(t)?v.getComponentMethod("calendars","DFLTRANGE")[t]:["2000-01-01","2001-01-01"]},r.isJSDate=function(t){return"object"==typeof t&&null!==t&&"function"==typeof t.getTime},r.dateTime2ms=function(t,e){if(r.isJSDate(t)){var i=t.getTimezoneOffset()*p,o=(t.getUTCMinutes()-t.getMinutes())*p+(t.getUTCSeconds()-t.getSeconds())*d+(t.getUTCMilliseconds()-t.getMilliseconds());if(o){var s=3*p;i=i-s/2+l(o-i+s/2,s)}return(t=Number(t)-i)>=n&&t<=a?t:u}if("string"!=typeof t&&"number"!=typeof t)return u;t=String(t);var c=_(e),m=t.charAt(0);!c||"G"!==m&&"g"!==m||(t=t.substr(1),e="");var w=c&&"chinese"===e.substr(0,7),k=t.match(w?x:y);if(!k)return u;var T=k[1],M=k[3]||"1",A=Number(k[5]||1),S=Number(k[7]||0),E=Number(k[9]||0),L=Number(k[11]||0);if(c){if(2===T.length)return u;var C;T=Number(T);try{var P=v.getComponentMethod("calendars","getCal")(e);if(w){var O="i"===M.charAt(M.length-1);M=parseInt(M,10),C=P.newDate(T,P.toMonthIndex(T,M,O),A)}else C=P.newDate(T,Number(M),A)}catch(t){return u}return C?(C.toJD()-g)*h+S*f+E*p+L*d:u}T=2===T.length?(Number(T)+2e3-b)%100+b:Number(T),M-=1;var z=new Date(Date.UTC(2e3,M,A,S,E));return z.setUTCFullYear(T),z.getUTCMonth()!==M?u:z.getUTCDate()!==A?u:z.getTime()+L*d},n=r.MIN_MS=r.dateTime2ms("-9999"),a=r.MAX_MS=r.dateTime2ms("9999-12-31 23:59:59.9999"),r.isDateTime=function(t,e){return r.dateTime2ms(t,e)!==u};var k=90*h,T=3*f,M=5*p;function A(t,e,r,n,a){if((e||r||n||a)&&(t+=" "+w(e,2)+":"+w(r,2),(n||a)&&(t+=":"+w(n,2),a))){for(var i=4;a%10==0;)i-=1,a/=10;t+="."+w(a,i)}return t}r.ms2DateTime=function(t,e,r){if("number"!=typeof t||!(t>=n&&t<=a))return u;e||(e=0);var i,o,s,c,y,x,b=Math.floor(10*l(t+.05,1)),w=Math.round(t-b/10);if(_(r)){var S=Math.floor(w/h)+g,E=Math.floor(l(t,h));try{i=v.getComponentMethod("calendars","getCal")(r).fromJD(S).formatDate("yyyy-mm-dd")}catch(t){i=m("G%Y-%m-%d")(new Date(w))}if("-"===i.charAt(0))for(;i.length<11;)i="-0"+i.substr(1);else for(;i.length<10;)i="0"+i;o=e<k?Math.floor(E/f):0,s=e<k?Math.floor(E%f/p):0,c=e<T?Math.floor(E%p/d):0,y=e<M?E%d*10+b:0}else x=new Date(w),i=m("%Y-%m-%d")(x),o=e<k?x.getUTCHours():0,s=e<k?x.getUTCMinutes():0,c=e<T?x.getUTCSeconds():0,y=e<M?10*x.getUTCMilliseconds()+b:0;return A(i,o,s,c,y)},r.ms2DateTimeLocal=function(t){if(!(t>=n+h&&t<=a-h))return u;var e=Math.floor(10*l(t+.05,1)),r=new Date(Math.round(t-e/10));return A(i.time.format("%Y-%m-%d")(r),r.getHours(),r.getMinutes(),r.getSeconds(),10*r.getUTCMilliseconds()+e)},r.cleanDate=function(t,e,n){if(t===u)return e;if(r.isJSDate(t)||"number"==typeof t&&isFinite(t)){if(_(n))return s.error("JS Dates and milliseconds are incompatible with world calendars",t),e;if(!(t=r.ms2DateTimeLocal(+t))&&void 0!==e)return e}else if(!r.isDateTime(t,n))return s.error("unrecognized date",t),e;return t};var S=/%\d?f/g;function E(t,e,r,n){t=t.replace(S,function(t){var r=Math.min(+t.charAt(1)||6,6);return(e/1e3%1+2).toFixed(r).substr(2).replace(/0+$/,"")||"0"});var a=new Date(Math.floor(e+.05));if(_(n))try{t=v.getComponentMethod("calendars","worldCalFmt")(t,e,n)}catch(t){return"Invalid"}return r(t)(a)}var L=[59,59.9,59.99,59.999,59.9999];r.formatDate=function(t,e,r,n,a,i){if(a=_(a)&&a,!e)if("y"===r)e=i.year;else if("m"===r)e=i.month;else{if("d"!==r)return function(t,e){var r=l(t+.05,h),n=w(Math.floor(r/f),2)+":"+w(l(Math.floor(r/p),60),2);if("M"!==e){o(e)||(e=0);var a=(100+Math.min(l(t/d,60),L[e])).toFixed(e).substr(1);e>0&&(a=a.replace(/0+$/,"").replace(/[\.]$/,"")),n+=":"+a}return n}(t,r)+"\n"+E(i.dayMonthYear,t,n,a);e=i.dayMonth+"\n"+i.year}return E(e,t,n,a)};var C=3*h;r.incrementMonth=function(t,e,r){r=_(r)&&r;var n=l(t,h);if(t=Math.round(t-n),r)try{var a=Math.round(t/h)+g,i=v.getComponentMethod("calendars","getCal")(r),o=i.fromJD(a);return e%12?i.add(o,e,"m"):i.add(o,e/12,"y"),(o.toJD()-g)*h+n}catch(e){s.error("invalid ms "+t+" in calendar "+r)}var c=new Date(t+C);return c.setUTCMonth(c.getUTCMonth()+e)+n-C},r.findExactDates=function(t,e){for(var r,n,a=0,i=0,s=0,l=0,c=_(e)&&v.getComponentMethod("calendars","getCal")(e),u=0;u<t.length;u++)if(n=t[u],o(n)){if(!(n%h))if(c)try{1===(r=c.fromJD(n/h+g)).day()?1===r.month()?a++:i++:s++}catch(t){}else 1===(r=new Date(n)).getUTCDate()?0===r.getUTCMonth()?a++:i++:s++}else l++;s+=i+=a;var f=t.length-l;return{exactYears:a/f,exactMonths:i/f,exactDays:s/f}}},{"../constants/numerical":693,"../registry":846,"./loggers":721,"./mod":724,d3:165,"fast-isnumeric":228}],706:[function(t,e,r){"use strict";var n=t("d3"),a=t("./loggers");function i(t){var e=t&&t.parentNode;e&&e.removeChild(t)}function o(t,e,r){var n="plotly.js-style-"+t,i=document.getElementById(n);i||((i=document.createElement("style")).setAttribute("id",n),i.appendChild(document.createTextNode("")),document.head.appendChild(i));var o=i.sheet;o.insertRule?o.insertRule(e+"{"+r+"}",0):o.addRule?o.addRule(e,r,0):a.warn("addStyleRule failed")}e.exports={getGraphDiv:function(t){var e;if("string"==typeof t){if(null===(e=document.getElementById(t)))throw new Error("No DOM element with id '"+t+"' exists on the page.");return e}if(null==t)throw new Error("DOM element provided is null or undefined");return t},isPlotDiv:function(t){var e=n.select(t);return e.node()instanceof HTMLElement&&e.size()&&e.classed("js-plotly-plot")},removeElement:i,addStyleRule:function(t,e){o("global",t,e)},addRelatedStyleRule:o,deleteRelatedStyleRule:function(t){var e="plotly.js-style-"+t,r=document.getElementById(e);r&&i(r)}}},{"./loggers":721,d3:165}],707:[function(t,e,r){"use strict";var n=t("events").EventEmitter,a={init:function(t){if(t._ev instanceof n)return t;var e=new n,r=new n;return t._ev=e,t._internalEv=r,t.on=e.on.bind(e),t.once=e.once.bind(e),t.removeListener=e.removeListener.bind(e),t.removeAllListeners=e.removeAllListeners.bind(e),t._internalOn=r.on.bind(r),t._internalOnce=r.once.bind(r),t._removeInternalListener=r.removeListener.bind(r),t._removeAllInternalListeners=r.removeAllListeners.bind(r),t.emit=function(n,a){"undefined"!=typeof jQuery&&jQuery(t).trigger(n,a),e.emit(n,a),r.emit(n,a)},t},triggerHandler:function(t,e,r){var n,a;"undefined"!=typeof jQuery&&(n=jQuery(t).triggerHandler(e,r));var i=t._ev;if(!i)return n;var o,s=i._events[e];if(!s)return n;function l(t){return t.listener?(i.removeListener(e,t.listener),t.fired?void 0:(t.fired=!0,t.listener.apply(i,[r]))):t.apply(i,[r])}for(s=Array.isArray(s)?s:[s],o=0;o<s.length-1;o++)l(s[o]);return a=l(s[o]),void 0!==n?n:a},purge:function(t){return delete t._ev,delete t.on,delete t.once,delete t.removeListener,delete t.removeAllListeners,delete t.emit,delete t._ev,delete t._internalEv,delete t._internalOn,delete t._internalOnce,delete t._removeInternalListener,delete t._removeAllInternalListeners,t}};e.exports=a},{events:106}],708:[function(t,e,r){"use strict";var n=t("./is_plain_object.js"),a=Array.isArray;function i(t,e,r,o){var s,l,c,u,h,f,p=t[0],d=t.length;if(2===d&&a(p)&&a(t[1])&&0===p.length){if(function(t,e){var r,n;for(r=0;r<t.length;r++){if(null!==(n=t[r])&&"object"==typeof n)return!1;void 0!==n&&(e[r]=n)}return!0}(t[1],p))return p;p.splice(0,p.length)}for(var g=1;g<d;g++)for(l in s=t[g])c=p[l],u=s[l],o&&a(u)?p[l]=u:e&&u&&(n(u)||(h=a(u)))?(h?(h=!1,f=c&&a(c)?c:[]):f=c&&n(c)?c:{},p[l]=i([f,u],e,r,o)):("undefined"!=typeof u||r)&&(p[l]=u);return p}r.extendFlat=function(){return i(arguments,!1,!1,!1)},r.extendDeep=function(){return i(arguments,!0,!1,!1)},r.extendDeepAll=function(){return i(arguments,!0,!0,!1)},r.extendDeepNoArrays=function(){return i(arguments,!0,!1,!0)}},{"./is_plain_object.js":718}],709:[function(t,e,r){"use strict";e.exports=function(t){for(var e={},r=[],n=0,a=0;a<t.length;a++){var i=t[a];1!==e[i]&&(e[i]=1,r[n++]=i)}return r}},{}],710:[function(t,e,r){"use strict";function n(t){return!0===t.visible}function a(t){var e=t[0].trace;return!0===e.visible&&0!==e._length}e.exports=function(t){for(var e,r=(e=t,Array.isArray(e)&&Array.isArray(e[0])&&e[0][0]&&e[0][0].trace?a:n),i=[],o=0;o<t.length;o++){var s=t[o];r(s)&&i.push(s)}return i}},{}],711:[function(t,e,r){"use strict";var n=t("d3"),a=t("country-regex"),i=t("@turf/area"),o=t("@turf/centroid"),s=t("@turf/bbox"),l=t("./identity"),c=t("./loggers"),u=t("./is_plain_object"),h=t("./nested_property"),f=t("./polygon"),p=Object.keys(a),d={"ISO-3":l,"USA-states":l,"country names":function(t){for(var e=0;e<p.length;e++){var r=p[e],n=new RegExp(a[r]);if(n.test(t.trim().toLowerCase()))return r}return c.log("Unrecognized country name: "+t+"."),!1}};function g(t){var e=t.geojson,r=window.PlotlyGeoAssets||{},n="string"==typeof e?r[e]:e;return u(n)?n:(c.error("Oops ... something went wrong when fetching "+e),!1)}e.exports={locationToFeature:function(t,e,r){if(!e||"string"!=typeof e)return!1;var n,a,i,o=d[t](e);if(o){if("USA-states"===t)for(n=[],i=0;i<r.length;i++)(a=r[i]).properties&&a.properties.gu&&"USA"===a.properties.gu&&n.push(a);else n=r;for(i=0;i<n.length;i++)if((a=n[i]).id===o)return a;c.log(["Location with id",o,"does not have a matching topojson feature at this resolution."].join(" "))}return!1},feature2polygons:function(t){var e,r,n,a,i=t.geometry,o=i.coordinates,s=t.id,l=[];function c(t){for(var e=0;e<t.length-1;e++)if(t[e][0]>0&&t[e+1][0]<0)return e;return null}switch(e="RUS"===s||"FJI"===s?function(t){var e;if(null===c(t))e=t;else for(e=new Array(t.length),a=0;a<t.length;a++)e[a]=[t[a][0]<0?t[a][0]+360:t[a][0],t[a][1]];l.push(f.tester(e))}:"ATA"===s?function(t){var e=c(t);if(null===e)return l.push(f.tester(t));var r=new Array(t.length+1),n=0;for(a=0;a<t.length;a++)a>e?r[n++]=[t[a][0]+360,t[a][1]]:a===e?(r[n++]=t[a],r[n++]=[t[a][0],-90]):r[n++]=t[a];var i=f.tester(r);i.pts.pop(),l.push(i)}:function(t){l.push(f.tester(t))},i.type){case"MultiPolygon":for(r=0;r<o.length;r++)for(n=0;n<o[r].length;n++)e(o[r][n]);break;case"Polygon":for(r=0;r<o.length;r++)e(o[r])}return l},getTraceGeojson:g,extractTraceFeature:function(t){var e=t[0].trace,r=g(e);if(!r)return!1;var n,a={},s=[];for(n=0;n<e._length;n++){var l=t[n];(l.loc||0===l.loc)&&(a[l.loc]=l)}function u(t){var r=h(t,e.featureidkey||"id").get(),n=a[r];if(n){var l=t.geometry;if("Polygon"===l.type||"MultiPolygon"===l.type){var u={type:"Feature",id:r,geometry:l,properties:{}};u.properties.ct=function(t){var e,r=t.geometry;if("MultiPolygon"===r.type)for(var n=r.coordinates,a=0,s=0;s<n.length;s++){var l={type:"Polygon",coordinates:n[s]},c=i.default(l);c>a&&(a=c,e=l)}else e=r;return o.default(e).geometry.coordinates}(u),n.fIn=t,n.fOut=u,s.push(u)}else c.log(["Location",n.loc,"does not have a valid GeoJSON geometry.","Traces with locationmode *geojson-id* only support","*Polygon* and *MultiPolygon* geometries."].join(" "))}delete a[r]}switch(r.type){case"FeatureCollection":var f=r.features;for(n=0;n<f.length;n++)u(f[n]);break;case"Feature":u(r);break;default:return c.warn(["Invalid GeoJSON type",(r.type||"none")+".","Traces with locationmode *geojson-id* only support","*FeatureCollection* and *Feature* types."].join(" ")),!1}for(var p in a)c.log(["Location *"+p+"*","does not have a matching feature with id-key","*"+e.featureidkey+"*."].join(" "));return s},fetchTraceGeoData:function(t){var e=window.PlotlyGeoAssets||{},r=[];function a(t){return new Promise(function(r,a){n.json(t,function(n,i){if(n){delete e[t];var o=404===n.status?'GeoJSON at URL "'+t+'" does not exist.':"Unexpected error while fetching from "+t;return a(new Error(o))}return e[t]=i,r(i)})})}function i(t){return new Promise(function(r,n){var a=0,i=setInterval(function(){return e[t]&&"pending"!==e[t]?(clearInterval(i),r(e[t])):a>100?(clearInterval(i),n("Unexpected error while fetching from "+t)):void a++},50)})}for(var o=0;o<t.length;o++){var s=t[o][0].trace.geojson;"string"==typeof s&&(e[s]?"pending"===e[s]&&r.push(i(s)):(e[s]="pending",r.push(a(s))))}return r},computeBbox:function(t){return s.default(t)}}},{"./identity":716,"./is_plain_object":718,"./loggers":721,"./nested_property":725,"./polygon":729,"@turf/area":57,"@turf/bbox":58,"@turf/centroid":59,"country-regex":136,d3:165}],712:[function(t,e,r){"use strict";var n=t("../constants/numerical").BADNUM;r.calcTraceToLineCoords=function(t){for(var e=t[0].trace.connectgaps,r=[],a=[],i=0;i<t.length;i++){var o=t[i].lonlat;o[0]!==n?a.push(o):!e&&a.length>0&&(r.push(a),a=[])}return a.length>0&&r.push(a),r},r.makeLine=function(t){return 1===t.length?{type:"LineString",coordinates:t[0]}:{type:"MultiLineString",coordinates:t}},r.makePolygon=function(t){if(1===t.length)return{type:"Polygon",coordinates:t};for(var e=new Array(t.length),r=0;r<t.length;r++)e[r]=[t[r]];return{type:"MultiPolygon",coordinates:e}},r.makeBlank=function(){return{type:"Point",coordinates:[]}}},{"../constants/numerical":693}],713:[function(t,e,r){"use strict";var n,a,i,o=t("./mod").mod;function s(t,e,r,n,a,i,o,s){var l=r-t,c=a-t,u=o-a,h=n-e,f=i-e,p=s-i,d=l*p-u*h;if(0===d)return null;var g=(c*p-u*f)/d,v=(c*h-l*f)/d;return v<0||v>1||g<0||g>1?null:{x:t+l*g,y:e+h*g}}function l(t,e,r,n,a){var i=n*t+a*e;if(i<0)return n*n+a*a;if(i>r){var o=n-t,s=a-e;return o*o+s*s}var l=n*e-a*t;return l*l/r}r.segmentsIntersect=s,r.segmentDistance=function(t,e,r,n,a,i,o,c){if(s(t,e,r,n,a,i,o,c))return 0;var u=r-t,h=n-e,f=o-a,p=c-i,d=u*u+h*h,g=f*f+p*p,v=Math.min(l(u,h,d,a-t,i-e),l(u,h,d,o-t,c-e),l(f,p,g,t-a,e-i),l(f,p,g,r-a,n-i));return Math.sqrt(v)},r.getTextLocation=function(t,e,r,s){if(t===a&&s===i||(n={},a=t,i=s),n[r])return n[r];var l=t.getPointAtLength(o(r-s/2,e)),c=t.getPointAtLength(o(r+s/2,e)),u=Math.atan((c.y-l.y)/(c.x-l.x)),h=t.getPointAtLength(o(r,e)),f={x:(4*h.x+l.x+c.x)/6,y:(4*h.y+l.y+c.y)/6,theta:u};return n[r]=f,f},r.clearLocationCache=function(){a=null},r.getVisibleSegment=function(t,e,r){var n,a,i=e.left,o=e.right,s=e.top,l=e.bottom,c=0,u=t.getTotalLength(),h=u;function f(e){var r=t.getPointAtLength(e);0===e?n=r:e===u&&(a=r);var c=r.x<i?i-r.x:r.x>o?r.x-o:0,h=r.y<s?s-r.y:r.y>l?r.y-l:0;return Math.sqrt(c*c+h*h)}for(var p=f(c);p;){if((c+=p+r)>h)return;p=f(c)}for(p=f(h);p;){if(c>(h-=p+r))return;p=f(h)}return{min:c,max:h,len:h-c,total:u,isClosed:0===c&&h===u&&Math.abs(n.x-a.x)<.1&&Math.abs(n.y-a.y)<.1}},r.findPointOnPath=function(t,e,r,n){for(var a,i,o,s=(n=n||{}).pathLength||t.getTotalLength(),l=n.tolerance||.001,c=n.iterationLimit||30,u=t.getPointAtLength(0)[r]>t.getPointAtLength(s)[r]?-1:1,h=0,f=0,p=s;h<c;){if(a=(f+p)/2,o=(i=t.getPointAtLength(a))[r]-e,Math.abs(o)<l)return i;u*o>0?p=a:f=a,h++}return i}},{"./mod":724}],714:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("tinycolor2"),i=t("color-normalize"),o=t("../components/colorscale"),s=t("../components/color/attributes").defaultLine,l=t("./array").isArrayOrTypedArray,c=i(s),u=1;function h(t,e){var r=t;return r[3]*=e,r}function f(t){if(n(t))return c;var e=i(t);return e.length?e:c}function p(t){return n(t)?t:u}e.exports={formatColor:function(t,e,r){var n,a,s,d,g,v=t.color,m=l(v),y=l(e),x=o.extractOpts(t),b=[];if(n=void 0!==x.colorscale?o.makeColorScaleFuncFromTrace(t):f,a=m?function(t,e){return void 0===t[e]?c:i(n(t[e]))}:f,s=y?function(t,e){return void 0===t[e]?u:p(t[e])}:p,m||y)for(var _=0;_<r;_++)d=a(v,_),g=s(e,_),b[_]=h(d,g);else b=h(i(v),e);return b},parseColorScale:function(t,e){void 0===e&&(e=1);var r=o.extractOpts(t);return(r.reversescale?o.flipScale(r.colorscale):r.colorscale).map(function(t){var r=t[0],n=a(t[1]).toRgb();return{index:r,rgb:[n.r,n.g,n.b,e]}})}}},{"../components/color/attributes":590,"../components/colorscale":603,"./array":700,"color-normalize":122,"fast-isnumeric":228,tinycolor2:535}],715:[function(t,e,r){"use strict";var n=t("./identity");function a(t){return[t]}e.exports={keyFun:function(t){return t.key},repeat:a,descend:n,wrap:a,unwrap:function(t){return t[0]}}},{"./identity":716}],716:[function(t,e,r){"use strict";e.exports=function(t){return t}},{}],717:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../constants/numerical"),o=i.FP_SAFE,s=i.BADNUM,l=e.exports={};l.nestedProperty=t("./nested_property"),l.keyedContainer=t("./keyed_container"),l.relativeAttr=t("./relative_attr"),l.isPlainObject=t("./is_plain_object"),l.toLogRange=t("./to_log_range"),l.relinkPrivateKeys=t("./relink_private");var c=t("./array");l.isTypedArray=c.isTypedArray,l.isArrayOrTypedArray=c.isArrayOrTypedArray,l.isArray1D=c.isArray1D,l.ensureArray=c.ensureArray,l.concat=c.concat,l.maxRowLength=c.maxRowLength,l.minRowLength=c.minRowLength;var u=t("./mod");l.mod=u.mod,l.modHalf=u.modHalf;var h=t("./coerce");l.valObjectMeta=h.valObjectMeta,l.coerce=h.coerce,l.coerce2=h.coerce2,l.coerceFont=h.coerceFont,l.coerceHoverinfo=h.coerceHoverinfo,l.coerceSelectionMarkerOpacity=h.coerceSelectionMarkerOpacity,l.validate=h.validate;var f=t("./dates");l.dateTime2ms=f.dateTime2ms,l.isDateTime=f.isDateTime,l.ms2DateTime=f.ms2DateTime,l.ms2DateTimeLocal=f.ms2DateTimeLocal,l.cleanDate=f.cleanDate,l.isJSDate=f.isJSDate,l.formatDate=f.formatDate,l.incrementMonth=f.incrementMonth,l.dateTick0=f.dateTick0,l.dfltRange=f.dfltRange,l.findExactDates=f.findExactDates,l.MIN_MS=f.MIN_MS,l.MAX_MS=f.MAX_MS;var p=t("./search");l.findBin=p.findBin,l.sorterAsc=p.sorterAsc,l.sorterDes=p.sorterDes,l.distinctVals=p.distinctVals,l.roundUp=p.roundUp,l.sort=p.sort,l.findIndexOfMin=p.findIndexOfMin;var d=t("./stats");l.aggNums=d.aggNums,l.len=d.len,l.mean=d.mean,l.median=d.median,l.midRange=d.midRange,l.variance=d.variance,l.stdev=d.stdev,l.interp=d.interp;var g=t("./matrix");l.init2dArray=g.init2dArray,l.transposeRagged=g.transposeRagged,l.dot=g.dot,l.translationMatrix=g.translationMatrix,l.rotationMatrix=g.rotationMatrix,l.rotationXYMatrix=g.rotationXYMatrix,l.apply2DTransform=g.apply2DTransform,l.apply2DTransform2=g.apply2DTransform2;var v=t("./angles");l.deg2rad=v.deg2rad,l.rad2deg=v.rad2deg,l.angleDelta=v.angleDelta,l.angleDist=v.angleDist,l.isFullCircle=v.isFullCircle,l.isAngleInsideSector=v.isAngleInsideSector,l.isPtInsideSector=v.isPtInsideSector,l.pathArc=v.pathArc,l.pathSector=v.pathSector,l.pathAnnulus=v.pathAnnulus;var m=t("./anchor_utils");l.isLeftAnchor=m.isLeftAnchor,l.isCenterAnchor=m.isCenterAnchor,l.isRightAnchor=m.isRightAnchor,l.isTopAnchor=m.isTopAnchor,l.isMiddleAnchor=m.isMiddleAnchor,l.isBottomAnchor=m.isBottomAnchor;var y=t("./geometry2d");l.segmentsIntersect=y.segmentsIntersect,l.segmentDistance=y.segmentDistance,l.getTextLocation=y.getTextLocation,l.clearLocationCache=y.clearLocationCache,l.getVisibleSegment=y.getVisibleSegment,l.findPointOnPath=y.findPointOnPath;var x=t("./extend");l.extendFlat=x.extendFlat,l.extendDeep=x.extendDeep,l.extendDeepAll=x.extendDeepAll,l.extendDeepNoArrays=x.extendDeepNoArrays;var b=t("./loggers");l.log=b.log,l.warn=b.warn,l.error=b.error;var _=t("./regex");l.counterRegex=_.counter;var w=t("./throttle");l.throttle=w.throttle,l.throttleDone=w.done,l.clearThrottle=w.clear;var k=t("./dom");function T(t){var e={};for(var r in t)for(var n=t[r],a=0;a<n.length;a++)e[n[a]]=+r;return e}l.getGraphDiv=k.getGraphDiv,l.isPlotDiv=k.isPlotDiv,l.removeElement=k.removeElement,l.addStyleRule=k.addStyleRule,l.addRelatedStyleRule=k.addRelatedStyleRule,l.deleteRelatedStyleRule=k.deleteRelatedStyleRule,l.clearResponsive=t("./clear_responsive"),l.makeTraceGroups=t("./make_trace_groups"),l._=t("./localize"),l.notifier=t("./notifier"),l.filterUnique=t("./filter_unique"),l.filterVisible=t("./filter_visible"),l.pushUnique=t("./push_unique"),l.cleanNumber=t("./clean_number"),l.ensureNumber=function(t){return a(t)?(t=Number(t))<-o||t>o?s:a(t)?Number(t):s:s},l.isIndex=function(t,e){return!(void 0!==e&&t>=e)&&(a(t)&&t>=0&&t%1==0)},l.noop=t("./noop"),l.identity=t("./identity"),l.repeat=function(t,e){for(var r=new Array(e),n=0;n<e;n++)r[n]=t;return r},l.swapAttrs=function(t,e,r,n){r||(r="x"),n||(n="y");for(var a=0;a<e.length;a++){var i=e[a],o=l.nestedProperty(t,i.replace("?",r)),s=l.nestedProperty(t,i.replace("?",n)),c=o.get();o.set(s.get()),s.set(c)}},l.raiseToTop=function(t){t.parentNode.appendChild(t)},l.cancelTransition=function(t){return t.transition().duration(0)},l.constrain=function(t,e,r){return e>r?Math.max(r,Math.min(e,t)):Math.max(e,Math.min(r,t))},l.bBoxIntersect=function(t,e,r){return r=r||0,t.left<=e.right+r&&e.left<=t.right+r&&t.top<=e.bottom+r&&e.top<=t.bottom+r},l.simpleMap=function(t,e,r,n){for(var a=t.length,i=new Array(a),o=0;o<a;o++)i[o]=e(t[o],r,n);return i},l.randstr=function t(e,r,n,a){if(n||(n=16),void 0===r&&(r=24),r<=0)return"0";var i,o,s=Math.log(Math.pow(2,r))/Math.log(n),c="";for(i=2;s===1/0;i*=2)s=Math.log(Math.pow(2,r/i))/Math.log(n)*i;var u=s-Math.floor(s);for(i=0;i<Math.floor(s);i++)c=Math.floor(Math.random()*n).toString(n)+c;u&&(o=Math.pow(n,u),c=Math.floor(Math.random()*o).toString(n)+c);var h=parseInt(c,n);return e&&e[c]||h!==1/0&&h>=Math.pow(2,r)?a>10?(l.warn("randstr failed uniqueness"),c):t(e,r,n,(a||0)+1):c},l.OptionControl=function(t,e){t||(t={}),e||(e="opt");var r={optionList:[],_newoption:function(n){n[e]=t,r[n.name]=n,r.optionList.push(n)}};return r["_"+e]=t,r},l.smooth=function(t,e){if((e=Math.round(e)||0)<2)return t;var r,n,a,i,o=t.length,s=2*o,l=2*e-1,c=new Array(l),u=new Array(o);for(r=0;r<l;r++)c[r]=(1-Math.cos(Math.PI*(r+1)/e))/(2*e);for(r=0;r<o;r++){for(i=0,n=0;n<l;n++)(a=r+n+1-e)<-o?a-=s*Math.round(a/s):a>=s&&(a-=s*Math.floor(a/s)),a<0?a=-1-a:a>=o&&(a=s-1-a),i+=t[a]*c[n];u[r]=i}return u},l.syncOrAsync=function(t,e,r){var n;function a(){return l.syncOrAsync(t,e,r)}for(;t.length;)if((n=(0,t.splice(0,1)[0])(e))&&n.then)return n.then(a).then(void 0,l.promiseError);return r&&r(e)},l.stripTrailingSlash=function(t){return"/"===t.substr(-1)?t.substr(0,t.length-1):t},l.noneOrAll=function(t,e,r){if(t){var n,a=!1,i=!0;for(n=0;n<r.length;n++)null!=t[r[n]]?a=!0:i=!1;if(a&&!i)for(n=0;n<r.length;n++)t[r[n]]=e[r[n]]}},l.mergeArray=function(t,e,r,n){var a="function"==typeof n;if(l.isArrayOrTypedArray(t))for(var i=Math.min(t.length,e.length),o=0;o<i;o++){var s=t[o];e[o][r]=a?n(s):s}},l.mergeArrayCastPositive=function(t,e,r){return l.mergeArray(t,e,r,function(t){var e=+t;return isFinite(e)&&e>0?e:0})},l.fillArray=function(t,e,r,n){if(n=n||l.identity,l.isArrayOrTypedArray(t))for(var a=0;a<e.length;a++)e[a][r]=n(t[a])},l.castOption=function(t,e,r,n){n=n||l.identity;var a=l.nestedProperty(t,r).get();return l.isArrayOrTypedArray(a)?Array.isArray(e)&&l.isArrayOrTypedArray(a[e[0]])?n(a[e[0]][e[1]]):n(a[e]):a},l.extractOption=function(t,e,r,n){if(r in t)return t[r];var a=l.nestedProperty(e,n).get();return Array.isArray(a)?void 0:a},l.tagSelected=function(t,e,r){var n,a,i=e.selectedpoints,o=e._indexToPoints;o&&(n=T(o));for(var s=0;s<i.length;s++){var c=i[s];if(l.isIndex(c)||l.isArrayOrTypedArray(c)&&l.isIndex(c[0])&&l.isIndex(c[1])){var u=n?n[c]:c,h=r?r[u]:u;void 0!==(a=h)&&a<t.length&&(t[h].selected=1)}}},l.selIndices2selPoints=function(t){var e=t.selectedpoints,r=t._indexToPoints;if(r){for(var n=T(r),a=[],i=0;i<e.length;i++){var o=e[i];if(l.isIndex(o)){var s=n[o];l.isIndex(s)&&a.push(s)}}return a}return e},l.getTargetArray=function(t,e){var r=e.target;if("string"==typeof r&&r){var n=l.nestedProperty(t,r).get();return!!Array.isArray(n)&&n}return!!Array.isArray(r)&&r},l.minExtend=function(t,e){var r={};"object"!=typeof e&&(e={});var n,a,i,o=Object.keys(t);for(n=0;n<o.length;n++)i=t[a=o[n]],"_"!==a.charAt(0)&&"function"!=typeof i&&("module"===a?r[a]=i:Array.isArray(i)?r[a]="colorscale"===a?i.slice():i.slice(0,3):l.isTypedArray(i)?r[a]=i.subarray(0,3):r[a]=i&&"object"==typeof i?l.minExtend(t[a],e[a]):i);for(o=Object.keys(e),n=0;n<o.length;n++)"object"==typeof(i=e[a=o[n]])&&a in r&&"object"==typeof r[a]||(r[a]=i);return r},l.titleCase=function(t){return t.charAt(0).toUpperCase()+t.substr(1)},l.containsAny=function(t,e){for(var r=0;r<e.length;r++)if(-1!==t.indexOf(e[r]))return!0;return!1},l.isIE=function(){return"undefined"!=typeof window.navigator.msSaveBlob};var M=/MSIE [1-9]\./;l.isIE9orBelow=function(){return l.isIE()&&M.test(window.navigator.userAgent)};var A=/Version\/[\d\.]+.*Safari/;l.isSafari=function(){return A.test(window.navigator.userAgent)},l.isD3Selection=function(t){return t&&"function"==typeof t.classed},l.ensureSingle=function(t,e,r,n){var a=t.select(e+(r?"."+r:""));if(a.size())return a;var i=t.append(e);return r&&i.classed(r,!0),n&&i.call(n),i},l.ensureSingleById=function(t,e,r,n){var a=t.select(e+"#"+r);if(a.size())return a;var i=t.append(e).attr("id",r);return n&&i.call(n),i},l.objectFromPath=function(t,e){for(var r,n=t.split("."),a=r={},i=0;i<n.length;i++){var o=n[i],s=null,l=n[i].match(/(.*)\[([0-9]+)\]/);l?(o=l[1],s=l[2],r=r[o]=[],i===n.length-1?r[s]=e:r[s]={},r=r[s]):(i===n.length-1?r[o]=e:r[o]={},r=r[o])}return a};var S=/^([^\[\.]+)\.(.+)?/,E=/^([^\.]+)\[([0-9]+)\](\.)?(.+)?/;l.expandObjectPaths=function(t){var e,r,n,a,i,o,s;if("object"==typeof t&&!Array.isArray(t))for(r in t)t.hasOwnProperty(r)&&((e=r.match(S))?(a=t[r],n=e[1],delete t[r],t[n]=l.extendDeepNoArrays(t[n]||{},l.objectFromPath(r,l.expandObjectPaths(a))[n])):(e=r.match(E))?(a=t[r],n=e[1],i=parseInt(e[2]),delete t[r],t[n]=t[n]||[],"."===e[3]?(s=e[4],o=t[n][i]=t[n][i]||{},l.extendDeepNoArrays(o,l.objectFromPath(s,l.expandObjectPaths(a)))):t[n][i]=l.expandObjectPaths(a)):t[r]=l.expandObjectPaths(t[r]));return t},l.numSeparate=function(t,e,r){if(r||(r=!1),"string"!=typeof e||0===e.length)throw new Error("Separator string required for formatting!");"number"==typeof t&&(t=String(t));var n=/(\d+)(\d{3})/,a=e.charAt(0),i=e.charAt(1),o=t.split("."),s=o[0],l=o.length>1?a+o[1]:"";if(i&&(o.length>1||s.length>4||r))for(;n.test(s);)s=s.replace(n,"$1"+i+"$2");return s+l},l.TEMPLATE_STRING_REGEX=/%{([^\s%{}:]*)([:|\|][^}]*)?}/g;var L=/^\w*$/;l.templateString=function(t,e){var r={};return t.replace(l.TEMPLATE_STRING_REGEX,function(t,n){var a;return L.test(n)?a=e[n]:(r[n]=r[n]||l.nestedProperty(e,n).get,a=r[n]()),l.isValidTextValue(a)?a:""})};var C={max:10,count:0,name:"hovertemplate"};l.hovertemplateString=function(){return z.apply(C,arguments)};var P={max:10,count:0,name:"texttemplate"};l.texttemplateString=function(){return z.apply(P,arguments)};var O=/^[:|\|]/;function z(t,e,r){var a=this,i=arguments;e||(e={});var o={};return t.replace(l.TEMPLATE_STRING_REGEX,function(t,s,c){var u,h,f,p;for(f=3;f<i.length;f++)if(u=i[f]){if(u.hasOwnProperty(s)){h=u[s];break}if(L.test(s)||(h=o[s]||l.nestedProperty(u,s).get())&&(o[s]=h),void 0!==h)break}if(void 0===h&&a)return a.count<a.max&&(l.warn("Variable '"+s+"' in "+a.name+" could not be found!"),h=t),a.count===a.max&&l.warn("Too many "+a.name+" warnings - additional warnings will be suppressed"),a.count++,t;if(c){if(":"===c[0]&&(h=(p=r?r.numberFormat:n.format)(c.replace(O,""))(h)),"|"===c[0]){p=r?r.timeFormat.utc:n.time.format.utc;var d=l.dateTime2ms(h);h=l.formatDate(d,c.replace(O,""),!1,p)}}else e.hasOwnProperty(s+"Label")&&(h=e[s+"Label"]);return h})}l.subplotSort=function(t,e){for(var r=Math.min(t.length,e.length)+1,n=0,a=0,i=0;i<r;i++){var o=t.charCodeAt(i)||0,s=e.charCodeAt(i)||0,l=o>=48&&o<=57,c=s>=48&&s<=57;if(l&&(n=10*n+o-48),c&&(a=10*a+s-48),!l||!c){if(n!==a)return n-a;if(o!==s)return o-s}}return a-n};var I=2e9;l.seedPseudoRandom=function(){I=2e9},l.pseudoRandom=function(){var t=I;return I=(69069*I+1)%4294967296,Math.abs(I-t)<429496729?l.pseudoRandom():I/4294967296},l.fillText=function(t,e,r){var n=Array.isArray(r)?function(t){r.push(t)}:function(t){r.text=t},a=l.extractOption(t,e,"htx","hovertext");if(l.isValidTextValue(a))return n(a);var i=l.extractOption(t,e,"tx","text");return l.isValidTextValue(i)?n(i):void 0},l.isValidTextValue=function(t){return t||0===t},l.formatPercent=function(t,e){e=e||0;for(var r=(Math.round(100*t*Math.pow(10,e))*Math.pow(.1,e)).toFixed(e)+"%",n=0;n<e;n++)-1!==r.indexOf(".")&&(r=(r=r.replace("0%","%")).replace(".%","%"));return r},l.isHidden=function(t){var e=window.getComputedStyle(t).display;return!e||"none"===e},l.getTextTransform=function(t){var e=t.noCenter,r=t.textX,n=t.textY,a=t.targetX,i=t.targetY,o=t.anchorX||0,s=t.anchorY||0,l=t.rotate,c=t.scale;return c?c>1&&(c=1):c=0,"translate("+(a-c*(r+o))+","+(i-c*(n+s))+")"+(c<1?"scale("+c+")":"")+(l?"rotate("+l+(e?"":" "+r+" "+n)+")":"")},l.ensureUniformFontSize=function(t,e){var r=l.extendFlat({},e);return r.size=Math.max(e.size,t._fullLayout.uniformtext.minsize||0),r}},{"../constants/numerical":693,"./anchor_utils":698,"./angles":699,"./array":700,"./clean_number":701,"./clear_responsive":703,"./coerce":704,"./dates":705,"./dom":706,"./extend":708,"./filter_unique":709,"./filter_visible":710,"./geometry2d":713,"./identity":716,"./is_plain_object":718,"./keyed_container":719,"./localize":720,"./loggers":721,"./make_trace_groups":722,"./matrix":723,"./mod":724,"./nested_property":725,"./noop":726,"./notifier":727,"./push_unique":731,"./regex":733,"./relative_attr":734,"./relink_private":735,"./search":736,"./stats":739,"./throttle":742,"./to_log_range":743,d3:165,"fast-isnumeric":228}],718:[function(t,e,r){"use strict";e.exports=function(t){return window&&window.process&&window.process.versions?"[object Object]"===Object.prototype.toString.call(t):"[object Object]"===Object.prototype.toString.call(t)&&Object.getPrototypeOf(t)===Object.prototype}},{}],719:[function(t,e,r){"use strict";var n=t("./nested_property"),a=/^\w*$/;e.exports=function(t,e,r,i){var o,s,l;r=r||"name",i=i||"value";var c={};e&&e.length?(l=n(t,e),s=l.get()):s=t,e=e||"";var u={};if(s)for(o=0;o<s.length;o++)u[s[o][r]]=o;var h=a.test(i),f={set:function(t,e){var a=null===e?4:0;if(!s){if(!l||4===a)return;s=[],l.set(s)}var o=u[t];if(void 0===o){if(4===a)return;a|=3,o=s.length,u[t]=o}else e!==(h?s[o][i]:n(s[o],i).get())&&(a|=2);var p=s[o]=s[o]||{};return p[r]=t,h?p[i]=e:n(p,i).set(e),null!==e&&(a&=-5),c[o]=c[o]|a,f},get:function(t){if(s){var e=u[t];return void 0===e?void 0:h?s[e][i]:n(s[e],i).get()}},rename:function(t,e){var n=u[t];return void 0===n?f:(c[n]=1|c[n],u[e]=n,delete u[t],s[n][r]=e,f)},remove:function(t){var e=u[t];if(void 0===e)return f;var a=s[e];if(Object.keys(a).length>2)return c[e]=2|c[e],f.set(t,null);if(h){for(o=e;o<s.length;o++)c[o]=3|c[o];for(o=e;o<s.length;o++)u[s[o][r]]--;s.splice(e,1),delete u[t]}else n(a,i).set(null),c[e]=6|c[e];return f},constructUpdate:function(){for(var t,a,o={},l=Object.keys(c),u=0;u<l.length;u++)a=l[u],t=e+"["+a+"]",s[a]?(1&c[a]&&(o[t+"."+r]=s[a][r]),2&c[a]&&(o[t+"."+i]=h?4&c[a]?null:s[a][i]:4&c[a]?null:n(s[a],i).get())):o[t]=null;return o}};return f}},{"./nested_property":725}],720:[function(t,e,r){"use strict";var n=t("../registry");e.exports=function(t,e){for(var r=t._context.locale,a=0;a<2;a++){for(var i=t._context.locales,o=0;o<2;o++){var s=(i[r]||{}).dictionary;if(s){var l=s[e];if(l)return l}i=n.localeRegistry}var c=r.split("-")[0];if(c===r)break;r=c}return e}},{"../registry":846}],721:[function(t,e,r){"use strict";var n=t("../plot_api/plot_config").dfltConfig,a=t("./notifier"),i=e.exports={};function o(t,e){if(t&&t.apply)try{return void t.apply(console,e)}catch(t){}for(var r=0;r<e.length;r++)try{t(e[r])}catch(t){console.log(e[r])}}i.log=function(){var t;if(n.logging>1){var e=["LOG:"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);o(console.trace||console.log,e)}if(n.notifyOnLogging>1){var r=[];for(t=0;t<arguments.length;t++)r.push(arguments[t]);a(r.join("<br>"),"long")}},i.warn=function(){var t;if(n.logging>0){var e=["WARN:"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);o(console.trace||console.log,e)}if(n.notifyOnLogging>0){var r=[];for(t=0;t<arguments.length;t++)r.push(arguments[t]);a(r.join("<br>"),"stick")}},i.error=function(){var t;if(n.logging>0){var e=["ERROR:"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);o(console.error,e)}if(n.notifyOnLogging>0){var r=[];for(t=0;t<arguments.length;t++)r.push(arguments[t]);a(r.join("<br>"),"stick")}}},{"../plot_api/plot_config":753,"./notifier":727}],722:[function(t,e,r){"use strict";var n=t("d3");e.exports=function(t,e,r){var a=t.selectAll("g."+r.replace(/\s/g,".")).data(e,function(t){return t[0].trace.uid});a.exit().remove(),a.enter().append("g").attr("class",r),a.order();var i=t.classed("rangeplot")?"nodeRangePlot3":"node3";return a.each(function(t){t[0][i]=n.select(this)}),a}},{d3:165}],723:[function(t,e,r){"use strict";r.init2dArray=function(t,e){for(var r=new Array(t),n=0;n<t;n++)r[n]=new Array(e);return r},r.transposeRagged=function(t){var e,r,n=0,a=t.length;for(e=0;e<a;e++)n=Math.max(n,t[e].length);var i=new Array(n);for(e=0;e<n;e++)for(i[e]=new Array(a),r=0;r<a;r++)i[e][r]=t[r][e];return i},r.dot=function(t,e){if(!t.length||!e.length||t.length!==e.length)return null;var n,a,i=t.length;if(t[0].length)for(n=new Array(i),a=0;a<i;a++)n[a]=r.dot(t[a],e);else if(e[0].length){var o=r.transposeRagged(e);for(n=new Array(o.length),a=0;a<o.length;a++)n[a]=r.dot(t,o[a])}else for(n=0,a=0;a<i;a++)n+=t[a]*e[a];return n},r.translationMatrix=function(t,e){return[[1,0,t],[0,1,e],[0,0,1]]},r.rotationMatrix=function(t){var e=t*Math.PI/180;return[[Math.cos(e),-Math.sin(e),0],[Math.sin(e),Math.cos(e),0],[0,0,1]]},r.rotationXYMatrix=function(t,e,n){return r.dot(r.dot(r.translationMatrix(e,n),r.rotationMatrix(t)),r.translationMatrix(-e,-n))},r.apply2DTransform=function(t){return function(){var e=arguments;3===e.length&&(e=e[0]);var n=1===arguments.length?e[0]:[e[0],e[1]];return r.dot(t,[n[0],n[1],1]).slice(0,2)}},r.apply2DTransform2=function(t){var e=r.apply2DTransform(t);return function(t){return e(t.slice(0,2)).concat(e(t.slice(2,4)))}}},{}],724:[function(t,e,r){"use strict";e.exports={mod:function(t,e){var r=t%e;return r<0?r+e:r},modHalf:function(t,e){return Math.abs(t)>e/2?t-Math.round(t/e)*e:t}}},{}],725:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("./array").isArrayOrTypedArray;function i(t,e){return function(){var r,n,o,s,l,c=t;for(s=0;s<e.length-1;s++){if(-1===(r=e[s])){for(n=!0,o=[],l=0;l<c.length;l++)o[l]=i(c[l],e.slice(s+1))(),o[l]!==o[0]&&(n=!1);return n?o[0]:o}if("number"==typeof r&&!a(c))return;if("object"!=typeof(c=c[r])||null===c)return}if("object"==typeof c&&null!==c&&null!==(o=c[e[s]]))return o}}e.exports=function(t,e){if(n(e))e=String(e);else if("string"!=typeof e||"[-1]"===e.substr(e.length-4))throw"bad property string";for(var r,a,o,s=0,c=e.split(".");s<c.length;){if(r=String(c[s]).match(/^([^\[\]]*)((\[\-?[0-9]*\])+)$/)){if(r[1])c[s]=r[1];else{if(0!==s)throw"bad property string";c.splice(0,1)}for(a=r[2].substr(1,r[2].length-2).split("]["),o=0;o<a.length;o++)s++,c.splice(s,0,Number(a[o]))}s++}return"object"!=typeof t?function(t,e,r){return{set:function(){throw"bad container"},get:function(){},astr:e,parts:r,obj:t}}(t,e,c):{set:l(t,c,e),get:i(t,c),astr:e,parts:c,obj:t}};var o=/(^|\.)args\[/;function s(t,e){return void 0===t||null===t&&!e.match(o)}function l(t,e,r){return function(n){var i,o,l=t,f="",p=[[t,f]],d=s(n,r);for(o=0;o<e.length-1;o++){if("number"==typeof(i=e[o])&&!a(l))throw"array index but container is not an array";if(-1===i){if(d=!u(l,e.slice(o+1),n,r))break;return}if(!h(l,i,e[o+1],d))break;if("object"!=typeof(l=l[i])||null===l)throw"container is not an object";f=c(f,i),p.push([l,f])}if(d){if(o===e.length-1&&(delete l[e[o]],Array.isArray(l)&&+e[o]==l.length-1))for(;l.length&&void 0===l[l.length-1];)l.pop()}else l[e[o]]=n}}function c(t,e){var r=e;return n(e)?r="["+e+"]":t&&(r="."+e),t+r}function u(t,e,r,n){var i,o=a(r),c=!0,u=r,f=n.replace("-1",0),p=!o&&s(r,f),d=e[0];for(i=0;i<t.length;i++)f=n.replace("-1",i),o&&(p=s(u=r[i%r.length],f)),p&&(c=!1),h(t,i,d,p)&&l(t[i],e,n.replace("-1",i))(u);return c}function h(t,e,r,n){if(void 0===t[e]){if(n)return!1;t[e]="number"==typeof r?[]:{}}return!0}},{"./array":700,"fast-isnumeric":228}],726:[function(t,e,r){"use strict";e.exports=function(){}},{}],727:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=[];e.exports=function(t,e){if(-1===i.indexOf(t)){i.push(t);var r=1e3;a(e)?r=e:"long"===e&&(r=3e3);var o=n.select("body").selectAll(".plotly-notifier").data([0]);o.enter().append("div").classed("plotly-notifier",!0),o.selectAll(".notifier-note").data(i).enter().append("div").classed("notifier-note",!0).style("opacity",0).each(function(t){var a=n.select(this);a.append("button").classed("notifier-close",!0).html("&times;").on("click",function(){a.transition().call(s)});for(var i=a.append("p"),o=t.split(/<br\s*\/?>/g),l=0;l<o.length;l++)l&&i.append("br"),i.append("span").text(o[l]);"stick"===e?a.transition().duration(350).style("opacity",1):a.transition().duration(700).style("opacity",1).transition().delay(r).call(s)})}function s(t){t.duration(700).style("opacity",0).each("end",function(t){var e=i.indexOf(t);-1!==e&&i.splice(e,1),n.select(this).remove()})}}},{d3:165,"fast-isnumeric":228}],728:[function(t,e,r){"use strict";var n=t("./setcursor"),a="data-savedcursor";e.exports=function(t,e){var r=t.attr(a);if(e){if(!r){for(var i=(t.attr("class")||"").split(" "),o=0;o<i.length;o++){var s=i[o];0===s.indexOf("cursor-")&&t.attr(a,s.substr(7)).classed(s,!1)}t.attr(a)||t.attr(a,"!!")}n(t,e)}else r&&(t.attr(a,null),"!!"===r?n(t):n(t,r))}},{"./setcursor":737}],729:[function(t,e,r){"use strict";var n=t("./matrix").dot,a=t("../constants/numerical").BADNUM,i=e.exports={};i.tester=function(t){var e,r=t.slice(),n=r[0][0],i=n,o=r[0][1],s=o;for(r.push(r[0]),e=1;e<r.length;e++)n=Math.min(n,r[e][0]),i=Math.max(i,r[e][0]),o=Math.min(o,r[e][1]),s=Math.max(s,r[e][1]);var l,c=!1;5===r.length&&(r[0][0]===r[1][0]?r[2][0]===r[3][0]&&r[0][1]===r[3][1]&&r[1][1]===r[2][1]&&(c=!0,l=function(t){return t[0]===r[0][0]}):r[0][1]===r[1][1]&&r[2][1]===r[3][1]&&r[0][0]===r[3][0]&&r[1][0]===r[2][0]&&(c=!0,l=function(t){return t[1]===r[0][1]}));var u=!0,h=r[0];for(e=1;e<r.length;e++)if(h[0]!==r[e][0]||h[1]!==r[e][1]){u=!1;break}return{xmin:n,xmax:i,ymin:o,ymax:s,pts:r,contains:c?function(t,e){var r=t[0],c=t[1];return!(r===a||r<n||r>i||c===a||c<o||c>s||e&&l(t))}:function(t,e){var l=t[0],c=t[1];if(l===a||l<n||l>i||c===a||c<o||c>s)return!1;var u,h,f,p,d,g=r.length,v=r[0][0],m=r[0][1],y=0;for(u=1;u<g;u++)if(h=v,f=m,v=r[u][0],m=r[u][1],!(l<(p=Math.min(h,v))||l>Math.max(h,v)||c>Math.max(f,m)))if(c<Math.min(f,m))l!==p&&y++;else{if(c===(d=v===h?c:f+(l-h)*(m-f)/(v-h)))return 1!==u||!e;c<=d&&l!==p&&y++}return y%2==1},isRect:c,degenerate:u}},i.isSegmentBent=function(t,e,r,a){var i,o,s,l=t[e],c=[t[r][0]-l[0],t[r][1]-l[1]],u=n(c,c),h=Math.sqrt(u),f=[-c[1]/h,c[0]/h];for(i=e+1;i<r;i++)if(o=[t[i][0]-l[0],t[i][1]-l[1]],(s=n(o,c))<0||s>u||Math.abs(n(o,f))>a)return!0;return!1},i.filter=function(t,e){var r=[t[0]],n=0,a=0;function o(o){t.push(o);var s=r.length,l=n;r.splice(a+1);for(var c=l+1;c<t.length;c++)(c===t.length-1||i.isSegmentBent(t,l,c+1,e))&&(r.push(t[c]),r.length<s-2&&(n=c,a=r.length-1),l=c)}t.length>1&&o(t.pop());return{addPt:o,raw:t,filtered:r}}},{"../constants/numerical":693,"./matrix":723}],730:[function(t,e,r){(function(r){"use strict";var n=t("./show_no_webgl_msg"),a=t("regl");e.exports=function(t,e){var i=t._fullLayout,o=!0;return i._glcanvas.each(function(n){if(!n.regl&&(!n.pick||i._has("parcoords"))){try{n.regl=a({canvas:this,attributes:{antialias:!n.pick,preserveDrawingBuffer:!0},pixelRatio:t._context.plotGlPixelRatio||r.devicePixelRatio,extensions:e||[]})}catch(t){o=!1}o&&this.addEventListener("webglcontextlost",function(e){t&&t.emit&&t.emit("plotly_webglcontextlost",{event:e,layer:n.key})},!1)}}),o||n({container:i._glcontainer.node()}),o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./show_no_webgl_msg":738,regl:500}],731:[function(t,e,r){"use strict";e.exports=function(t,e){if(e instanceof RegExp){for(var r=e.toString(),n=0;n<t.length;n++)if(t[n]instanceof RegExp&&t[n].toString()===r)return t;t.push(e)}else!e&&0!==e||-1!==t.indexOf(e)||t.push(e);return t}},{}],732:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../plot_api/plot_config").dfltConfig;var i={add:function(t,e,r,n,i){var o,s;t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},s=t.undoQueue.index,t.autoplay?t.undoQueue.inSequence||(t.autoplay=!1):(!t.undoQueue.sequence||t.undoQueue.beginSequence?(o={undo:{calls:[],args:[]},redo:{calls:[],args:[]}},t.undoQueue.queue.splice(s,t.undoQueue.queue.length-s,o),t.undoQueue.index+=1):o=t.undoQueue.queue[s-1],t.undoQueue.beginSequence=!1,o&&(o.undo.calls.unshift(e),o.undo.args.unshift(r),o.redo.calls.push(n),o.redo.args.push(i)),t.undoQueue.queue.length>a.queueLength&&(t.undoQueue.queue.shift(),t.undoQueue.index--))},startSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!0,t.undoQueue.beginSequence=!0},stopSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!1,t.undoQueue.beginSequence=!1},undo:function(t){var e,r;if(t.framework&&t.framework.isPolar)t.framework.undo();else if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index<=0)){for(t.undoQueue.index--,e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r<e.undo.calls.length;r++)i.plotDo(t,e.undo.calls[r],e.undo.args[r]);t.undoQueue.inSequence=!1,t.autoplay=!1}},redo:function(t){var e,r;if(t.framework&&t.framework.isPolar)t.framework.redo();else if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index>=t.undoQueue.queue.length)){for(e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r<e.redo.calls.length;r++)i.plotDo(t,e.redo.calls[r],e.redo.args[r]);t.undoQueue.inSequence=!1,t.autoplay=!1,t.undoQueue.index++}}};i.plotDo=function(t,e,r){t.autoplay=!0,r=function(t,e){for(var r,a=[],i=0;i<e.length;i++)r=e[i],a[i]=r===t?r:"object"==typeof r?Array.isArray(r)?n.extendDeep([],r):n.extendDeepAll({},r):r;return a}(t,r),e.apply(null,r)},e.exports=i},{"../lib":717,"../plot_api/plot_config":753}],733:[function(t,e,r){"use strict";r.counter=function(t,e,r,n){var a=(e||"")+(r?"":"$"),i=!1===n?"":"^";return"xy"===t?new RegExp(i+"x([2-9]|[1-9][0-9]+)?y([2-9]|[1-9][0-9]+)?"+a):new RegExp(i+t+"([2-9]|[1-9][0-9]+)?"+a)}},{}],734:[function(t,e,r){"use strict";var n=/^(.*)(\.[^\.\[\]]+|\[\d\])$/,a=/^[^\.\[\]]+$/;e.exports=function(t,e){for(;e;){var r=t.match(n);if(r)t=r[1];else{if(!t.match(a))throw new Error("bad relativeAttr call:"+[t,e]);t=""}if("^"!==e.charAt(0))break;e=e.slice(1)}return t&&"["!==e.charAt(0)?t+"."+e:t+e}},{}],735:[function(t,e,r){"use strict";var n=t("./array").isArrayOrTypedArray,a=t("./is_plain_object");e.exports=function t(e,r){for(var i in r){var o=r[i],s=e[i];if(s!==o)if("_"===i.charAt(0)||"function"==typeof o){if(i in e)continue;e[i]=o}else if(n(o)&&n(s)&&a(o[0])){if("customdata"===i||"ids"===i)continue;for(var l=Math.min(o.length,s.length),c=0;c<l;c++)s[c]!==o[c]&&a(o[c])&&a(s[c])&&t(s[c],o[c])}else a(o)&&a(s)&&(t(s,o),Object.keys(s).length||delete e[i])}}},{"./array":700,"./is_plain_object":718}],736:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("./loggers"),i=t("./identity");function o(t,e){return t<e}function s(t,e){return t<=e}function l(t,e){return t>e}function c(t,e){return t>=e}r.findBin=function(t,e,r){if(n(e.start))return r?Math.ceil((t-e.start)/e.size-1e-9)-1:Math.floor((t-e.start)/e.size+1e-9);var i,u,h=0,f=e.length,p=0,d=f>1?(e[f-1]-e[0])/(f-1):1;for(u=d>=0?r?o:s:r?c:l,t+=1e-9*d*(r?-1:1)*(d>=0?1:-1);h<f&&p++<100;)u(e[i=Math.floor((h+f)/2)],t)?h=i+1:f=i;return p>90&&a.log("Long binary search..."),h-1},r.sorterAsc=function(t,e){return t-e},r.sorterDes=function(t,e){return e-t},r.distinctVals=function(t){var e=t.slice();e.sort(r.sorterAsc);for(var n=e.length-1,a=e[n]-e[0]||1,i=a/(n||1)/1e4,o=[e[0]],s=0;s<n;s++)e[s+1]>e[s]+i&&(a=Math.min(a,e[s+1]-e[s]),o.push(e[s+1]));return{vals:o,minDiff:a}},r.roundUp=function(t,e,r){for(var n,a=0,i=e.length-1,o=0,s=r?0:1,l=r?1:0,c=r?Math.ceil:Math.floor;a<i&&o++<100;)e[n=c((a+i)/2)]<=t?a=n+s:i=n-l;return e[a]},r.sort=function(t,e){for(var r=0,n=0,a=1;a<t.length;a++){var i=e(t[a],t[a-1]);if(i<0?r=1:i>0&&(n=1),r&&n)return t.sort(e)}return n?t:t.reverse()},r.findIndexOfMin=function(t,e){e=e||i;for(var r,n=1/0,a=0;a<t.length;a++){var o=e(t[a]);o<n&&(n=o,r=a)}return r}},{"./identity":716,"./loggers":721,"fast-isnumeric":228}],737:[function(t,e,r){"use strict";e.exports=function(t,e){(t.attr("class")||"").split(" ").forEach(function(e){0===e.indexOf("cursor-")&&t.classed(e,!1)}),e&&t.classed("cursor-"+e,!0)}},{}],738:[function(t,e,r){"use strict";var n=t("../components/color"),a=function(){};e.exports=function(t){for(var e in t)"function"==typeof t[e]&&(t[e]=a);t.destroy=function(){t.container.parentNode.removeChild(t.container)};var r=document.createElement("div");r.className="no-webgl",r.style.cursor="pointer",r.style.fontSize="24px",r.style.color=n.defaults[0],r.style.position="absolute",r.style.left=r.style.top="0px",r.style.width=r.style.height="100%",r.style["background-color"]=n.lightLine,r.style["z-index"]=30;var i=document.createElement("p");return i.textContent="WebGL is not supported by your browser - visit https://get.webgl.org for more info",i.style.position="relative",i.style.top="50%",i.style.left="50%",i.style.height="30%",i.style.width="50%",i.style.margin="-15% 0 0 -25%",r.appendChild(i),t.container.appendChild(r),t.container.style.background="#FFFFFF",t.container.onclick=function(){window.open("https://get.webgl.org")},!1}},{"../components/color":591}],739:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("./array").isArrayOrTypedArray;r.aggNums=function(t,e,i,o){var s,l;if((!o||o>i.length)&&(o=i.length),n(e)||(e=!1),a(i[0])){for(l=new Array(o),s=0;s<o;s++)l[s]=r.aggNums(t,e,i[s]);i=l}for(s=0;s<o;s++)n(e)?n(i[s])&&(e=t(+e,+i[s])):e=i[s];return e},r.len=function(t){return r.aggNums(function(t){return t+1},0,t)},r.mean=function(t,e){return e||(e=r.len(t)),r.aggNums(function(t,e){return t+e},0,t)/e},r.midRange=function(t){if(void 0!==t&&0!==t.length)return(r.aggNums(Math.max,null,t)+r.aggNums(Math.min,null,t))/2},r.variance=function(t,e,a){return e||(e=r.len(t)),n(a)||(a=r.mean(t,e)),r.aggNums(function(t,e){return t+Math.pow(e-a,2)},0,t)/e},r.stdev=function(t,e,n){return Math.sqrt(r.variance(t,e,n))},r.median=function(t){var e=t.slice().sort();return r.interp(e,.5)},r.interp=function(t,e){if(!n(e))throw"n should be a finite number";if((e=e*t.length-.5)<0)return t[0];if(e>t.length-1)return t[t.length-1];var r=e%1;return r*t[Math.ceil(e)]+(1-r)*t[Math.floor(e)]}},{"./array":700,"fast-isnumeric":228}],740:[function(t,e,r){"use strict";var n=t("color-normalize");e.exports=function(t){return t?n(t):[0,0,0,1]}},{"color-normalize":122}],741:[function(t,e,r){"use strict";var n=t("d3"),a=t("../lib"),i=t("../constants/xmlns_namespaces"),o=t("../constants/alignment").LINE_SPACING;function s(t,e){return t.node().getBoundingClientRect()[e]}var l=/([^$]*)([$]+[^$]*[$]+)([^$]*)/;r.convertToTspans=function(t,e,A){var S=t.text(),L=!t.attr("data-notex")&&"undefined"!=typeof MathJax&&S.match(l),C=n.select(t.node().parentNode);if(!C.empty()){var P=t.attr("class")?t.attr("class").split(" ")[0]:"text";return P+="-math",C.selectAll("svg."+P).remove(),C.selectAll("g."+P+"-group").remove(),t.style("display",null).attr({"data-unformatted":S,"data-math":"N"}),L?(e&&e._promises||[]).push(new Promise(function(e){t.style("display","none");var r=parseInt(t.node().style.fontSize,10),i={fontSize:r};!function(t,e,r){var i,o,s,l;MathJax.Hub.Queue(function(){return o=a.extendDeepAll({},MathJax.Hub.config),s=MathJax.Hub.processSectionDelay,void 0!==MathJax.Hub.processSectionDelay&&(MathJax.Hub.processSectionDelay=0),MathJax.Hub.Config({messageStyle:"none",tex2jax:{inlineMath:[["$","$"],["\\(","\\)"]]},displayAlign:"left"})},function(){if("SVG"!==(i=MathJax.Hub.config.menuSettings.renderer))return MathJax.Hub.setRenderer("SVG")},function(){var r="math-output-"+a.randstr({},64);return l=n.select("body").append("div").attr({id:r}).style({visibility:"hidden",position:"absolute"}).style({"font-size":e.fontSize+"px"}).text(t.replace(c,"\\lt ").replace(u,"\\gt ")),MathJax.Hub.Typeset(l.node())},function(){var e=n.select("body").select("#MathJax_SVG_glyphs");if(l.select(".MathJax_SVG").empty()||!l.select("svg").node())a.log("There was an error in the tex syntax.",t),r();else{var o=l.select("svg").node().getBoundingClientRect();r(l.select(".MathJax_SVG"),e,o)}if(l.remove(),"SVG"!==i)return MathJax.Hub.setRenderer(i)},function(){return void 0!==s&&(MathJax.Hub.processSectionDelay=s),MathJax.Hub.Config(o)})}(L[2],i,function(n,a,i){C.selectAll("svg."+P).remove(),C.selectAll("g."+P+"-group").remove();var o=n&&n.select("svg");if(!o||!o.node())return O(),void e();var l=C.append("g").classed(P+"-group",!0).attr({"pointer-events":"none","data-unformatted":S,"data-math":"Y"});l.node().appendChild(o.node()),a&&a.node()&&o.node().insertBefore(a.node().cloneNode(!0),o.node().firstChild),o.attr({class:P,height:i.height,preserveAspectRatio:"xMinYMin meet"}).style({overflow:"visible","pointer-events":"none"});var c=t.node().style.fill||"black",u=o.select("g");u.attr({fill:c,stroke:c});var h=s(u,"width"),f=s(u,"height"),p=+t.attr("x")-h*{start:0,middle:.5,end:1}[t.attr("text-anchor")||"start"],d=-(r||s(t,"height"))/4;"y"===P[0]?(l.attr({transform:"rotate("+[-90,+t.attr("x"),+t.attr("y")]+") translate("+[-h/2,d-f/2]+")"}),o.attr({x:+t.attr("x"),y:+t.attr("y")})):"l"===P[0]?o.attr({x:t.attr("x"),y:d-f/2}):"a"===P[0]&&0!==P.indexOf("atitle")?o.attr({x:0,y:d}):o.attr({x:p,y:+t.attr("y")+d-f/2}),A&&A.call(t,l),e(l)})})):O(),t}function O(){C.empty()||(P=t.attr("class")+"-math",C.select("svg."+P).remove()),t.text("").style("white-space","pre"),function(t,e){e=e.replace(v," ");var r,s=!1,l=[],c=-1;function u(){c++;var e=document.createElementNS(i.svg,"tspan");n.select(e).attr({class:"line",dy:c*o+"em"}),t.appendChild(e),r=e;var a=l;if(l=[{node:e}],a.length>1)for(var s=1;s<a.length;s++)A(a[s])}function A(t){var e,a=t.type,o={};if("a"===a){e="a";var s=t.target,c=t.href,u=t.popup;c&&(o={"xlink:xlink:show":"_blank"===s||"_"!==s.charAt(0)?"new":"replace",target:s,"xlink:xlink:href":c},u&&(o.onclick='window.open(this.href.baseVal,this.target.baseVal,"'+u+'");return false;'))}else e="tspan";t.style&&(o.style=t.style);var h=document.createElementNS(i.svg,e);if("sup"===a||"sub"===a){S(r,d),r.appendChild(h);var g=document.createElementNS(i.svg,"tspan");S(g,d),n.select(g).attr("dy",p[a]),o.dy=f[a],r.appendChild(h),r.appendChild(g)}else r.appendChild(h);n.select(h).attr(o),r=t.node=h,l.push(t)}function S(t,e){t.appendChild(document.createTextNode(e))}function L(t){if(1!==l.length){var n=l.pop();t!==n.type&&a.log("Start tag <"+n.type+"> doesnt match end tag <"+t+">. Pretending it did match.",e),r=l[l.length-1].node}else a.log("Ignoring unexpected end tag </"+t+">.",e)}x.test(e)?u():(r=t,l=[{node:t}]);for(var C=e.split(m),P=0;P<C.length;P++){var O=C[P],z=O.match(y),I=z&&z[2].toLowerCase(),D=h[I];if("br"===I)u();else if(void 0===D)S(r,E(O));else if(z[1])L(I);else{var R=z[4],F={type:I},B=T(R,b);if(B?(B=B.replace(M,"$1 fill:"),D&&(B+=";"+D)):D&&(B=D),B&&(F.style=B),"a"===I){s=!0;var N=T(R,_);if(N){var j=document.createElement("a");j.href=N,-1!==g.indexOf(j.protocol)&&(F.href=encodeURI(decodeURI(N)),F.target=T(R,w)||"_blank",F.popup=T(R,k))}}A(F)}}return s}(t.node(),S)&&t.style("pointer-events","all"),r.positionText(t),A&&A.call(t)}};var c=/(<|&lt;|&#60;)/g,u=/(>|&gt;|&#62;)/g;var h={sup:"font-size:70%",sub:"font-size:70%",b:"font-weight:bold",i:"font-style:italic",a:"cursor:pointer",span:"",em:"font-style:italic;font-weight:bold"},f={sub:"0.3em",sup:"-0.6em"},p={sub:"-0.21em",sup:"0.42em"},d="\u200b",g=["http:","https:","mailto:","",void 0,":"],v=r.NEWLINES=/(\r\n?|\n)/g,m=/(<[^<>]*>)/,y=/<(\/?)([^ >]*)(\s+(.*))?>/i,x=/<br(\s+.*)?>/i;r.BR_TAG_ALL=/<br(\s+.*)?>/gi;var b=/(^|[\s"'])style\s*=\s*("([^"]*);?"|'([^']*);?')/i,_=/(^|[\s"'])href\s*=\s*("([^"]*)"|'([^']*)')/i,w=/(^|[\s"'])target\s*=\s*("([^"\s]*)"|'([^'\s]*)')/i,k=/(^|[\s"'])popup\s*=\s*("([\w=,]*)"|'([\w=,]*)')/i;function T(t,e){if(!t)return null;var r=t.match(e),n=r&&(r[3]||r[4]);return n&&E(n)}var M=/(^|;)\s*color:/;r.plainText=function(t,e){for(var r=void 0!==(e=e||{}).len&&-1!==e.len?e.len:1/0,n=void 0!==e.allowedTags?e.allowedTags:["br"],a="...".length,i=t.split(m),o=[],s="",l=0,c=0;c<i.length;c++){var u=i[c],h=u.match(y),f=h&&h[2].toLowerCase();if(f)-1!==n.indexOf(f)&&(o.push(u),s=f);else{var p=u.length;if(l+p<r)o.push(u),l+=p;else if(l<r){var d=r-l;s&&("br"!==s||d<=a||p<=a)&&o.pop(),r>a?o.push(u.substr(0,d-a)+"..."):o.push(u.substr(0,d));break}s=""}}return o.join("")};var A={mu:"\u03bc",amp:"&",lt:"<",gt:">",nbsp:"\xa0",times:"\xd7",plusmn:"\xb1",deg:"\xb0"},S=/&(#\d+|#x[\da-fA-F]+|[a-z]+);/g;function E(t){return t.replace(S,function(t,e){return("#"===e.charAt(0)?function(t){if(t>1114111)return;var e=String.fromCodePoint;if(e)return e(t);var r=String.fromCharCode;return t<=65535?r(t):r(55232+(t>>10),t%1024+56320)}("x"===e.charAt(1)?parseInt(e.substr(2),16):parseInt(e.substr(1),10)):A[e])||t})}function L(t,e,r){var n,a,i,o=r.horizontalAlign,s=r.verticalAlign||"top",l=t.node().getBoundingClientRect(),c=e.node().getBoundingClientRect();return a="bottom"===s?function(){return l.bottom-n.height}:"middle"===s?function(){return l.top+(l.height-n.height)/2}:function(){return l.top},i="right"===o?function(){return l.right-n.width}:"center"===o?function(){return l.left+(l.width-n.width)/2}:function(){return l.left},function(){return n=this.node().getBoundingClientRect(),this.style({top:a()-c.top+"px",left:i()-c.left+"px","z-index":1e3}),this}}r.convertEntities=E,r.lineCount=function(t){return t.selectAll("tspan.line").size()||1},r.positionText=function(t,e,r){return t.each(function(){var t=n.select(this);function a(e,r){return void 0===r?null===(r=t.attr(e))&&(t.attr(e,0),r=0):t.attr(e,r),r}var i=a("x",e),o=a("y",r);"text"===this.nodeName&&t.selectAll("tspan.line").attr({x:i,y:o})})},r.makeEditable=function(t,e){var r=e.gd,a=e.delegate,i=n.dispatch("edit","input","cancel"),o=a||t;if(t.style({"pointer-events":a?"none":"all"}),1!==t.size())throw new Error("boo");function s(){!function(){var a=n.select(r).select(".svg-container"),o=a.append("div"),s=t.node().style,c=parseFloat(s.fontSize||12),u=e.text;void 0===u&&(u=t.attr("data-unformatted"));o.classed("plugin-editable editable",!0).style({position:"absolute","font-family":s.fontFamily||"Arial","font-size":c,color:e.fill||s.fill||"black",opacity:1,"background-color":e.background||"transparent",outline:"#ffffff33 1px solid",margin:[-c/8+1,0,0,-1].join("px ")+"px",padding:"0","box-sizing":"border-box"}).attr({contenteditable:!0}).text(u).call(L(t,a,e)).on("blur",function(){r._editing=!1,t.text(this.textContent).style({opacity:1});var e,a=n.select(this).attr("class");(e=a?"."+a.split(" ")[0]+"-math-group":"[class*=-math-group]")&&n.select(t.node().parentNode).select(e).style({opacity:0});var o=this.textContent;n.select(this).transition().duration(0).remove(),n.select(document).on("mouseup",null),i.edit.call(t,o)}).on("focus",function(){var t=this;r._editing=!0,n.select(document).on("mouseup",function(){if(n.event.target===t)return!1;document.activeElement===o.node()&&o.node().blur()})}).on("keyup",function(){27===n.event.which?(r._editing=!1,t.style({opacity:1}),n.select(this).style({opacity:0}).on("blur",function(){return!1}).transition().remove(),i.cancel.call(t,this.textContent)):(i.input.call(t,this.textContent),n.select(this).call(L(t,a,e)))}).on("keydown",function(){13===n.event.which&&this.blur()}).call(l)}(),t.style({opacity:0});var a,s=o.attr("class");(a=s?"."+s.split(" ")[0]+"-math-group":"[class*=-math-group]")&&n.select(t.node().parentNode).select(a).style({opacity:0})}function l(t){var e=t.node(),r=document.createRange();r.selectNodeContents(e);var n=window.getSelection();n.removeAllRanges(),n.addRange(r),e.focus()}return e.immediate?s():o.on("click",s),n.rebind(t,i,"on")}},{"../constants/alignment":686,"../constants/xmlns_namespaces":694,"../lib":717,d3:165}],742:[function(t,e,r){"use strict";var n={};function a(t){t&&null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}r.throttle=function(t,e,r){var i=n[t],o=Date.now();if(!i){for(var s in n)n[s].ts<o-6e4&&delete n[s];i=n[t]={ts:0,timer:null}}function l(){r(),i.ts=Date.now(),i.onDone&&(i.onDone(),i.onDone=null)}a(i),o>i.ts+e?l():i.timer=setTimeout(function(){l(),i.timer=null},e)},r.done=function(t){var e=n[t];return e&&e.timer?new Promise(function(t){var r=e.onDone;e.onDone=function(){r&&r(),t(),e.onDone=null}}):Promise.resolve()},r.clear=function(t){if(t)a(n[t]),delete n[t];else for(var e in n)r.clear(e)}},{}],743:[function(t,e,r){"use strict";var n=t("fast-isnumeric");e.exports=function(t,e){if(t>0)return Math.log(t)/Math.LN10;var r=Math.log(Math.min(e[0],e[1]))/Math.LN10;return n(r)||(r=Math.log(Math.max(e[0],e[1]))/Math.LN10-6),r}},{"fast-isnumeric":228}],744:[function(t,e,r){"use strict";var n=e.exports={},a=t("../plots/geo/constants").locationmodeToLayer,i=t("topojson-client").feature;n.getTopojsonName=function(t){return[t.scope.replace(/ /g,"-"),"_",t.resolution.toString(),"m"].join("")},n.getTopojsonPath=function(t,e){return t+e+".json"},n.getTopojsonFeatures=function(t,e){var r=a[t.locationmode],n=e.objects[r];return i(e,n).features}},{"../plots/geo/constants":793,"topojson-client":538}],745:[function(t,e,r){"use strict";e.exports={moduleType:"locale",name:"en-US",dictionary:{"Click to enter Colorscale title":"Click to enter Colorscale title"},format:{date:"%m/%d/%Y"}}},{}],746:[function(t,e,r){"use strict";e.exports={moduleType:"locale",name:"en",dictionary:{"Click to enter Colorscale title":"Click to enter Colourscale title"},format:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],periods:["AM","PM"],dateTime:"%a %b %e %X %Y",date:"%d/%m/%Y",time:"%H:%M:%S",decimal:".",thousands:",",grouping:[3],currency:["$",""],year:"%Y",month:"%b %Y",dayMonth:"%b %-d",dayMonthYear:"%b %-d, %Y"}}},{}],747:[function(t,e,r){"use strict";var n=t("../registry");e.exports=function(t){for(var e,r,a=n.layoutArrayContainers,i=n.layoutArrayRegexes,o=t.split("[")[0],s=0;s<i.length;s++)if((r=t.match(i[s]))&&0===r.index){e=r[0];break}if(e||(e=a[a.indexOf(o)]),!e)return!1;var l=t.substr(e.length);return l?!!(r=l.match(/^\[(0|[1-9][0-9]*)\](\.(.+))?$/))&&{array:e,index:Number(r[1]),property:r[3]||""}:{array:e,index:"",property:""}}},{"../registry":846}],748:[function(t,e,r){"use strict";var n=t("../lib"),a=n.extendFlat,i=n.isPlainObject,o={valType:"flaglist",extras:["none"],flags:["calc","clearAxisTypes","plot","style","markerSize","colorbars"]},s={valType:"flaglist",extras:["none"],flags:["calc","plot","legend","ticks","axrange","layoutstyle","modebar","camera","arraydraw","colorbars"]},l=o.flags.slice().concat(["fullReplot"]),c=s.flags.slice().concat("layoutReplot");function u(t){for(var e={},r=0;r<t.length;r++)e[t[r]]=!1;return e}function h(t,e,r){var n=a({},t);for(var o in n){var s=n[o];i(s)&&(n[o]=f(s,e,r,o))}return"from-root"===r&&(n.editType=e),n}function f(t,e,r,n){if(t.valType){var i=a({},t);if(i.editType=e,Array.isArray(t.items)){i.items=new Array(t.items.length);for(var o=0;o<t.items.length;o++)i.items[o]=f(t.items[o],e,"from-root")}return i}return h(t,e,"_"===n.charAt(0)?"nested":"from-root")}e.exports={traces:o,layout:s,traceFlags:function(){return u(l)},layoutFlags:function(){return u(c)},update:function(t,e){var r=e.editType;if(r&&"none"!==r)for(var n=r.split("+"),a=0;a<n.length;a++)t[n[a]]=!0},overrideAll:h}},{"../lib":717}],749:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("gl-mat4/fromQuat"),i=t("../registry"),o=t("../lib"),s=t("../plots/plots"),l=t("../plots/cartesian/axis_ids"),c=t("../components/color"),u=l.cleanId,h=l.getFromTrace,f=i.traceIs;function p(t,e){var r=t[e],n=e.charAt(0);r&&"paper"!==r&&(t[e]=u(r,n))}function d(t){function e(e,r){var n=t[e],a=t.title&&t.title[r];n&&!a&&(t.title||(t.title={}),t.title[r]=t[e],delete t[e])}t&&("string"!=typeof t.title&&"number"!=typeof t.title||(t.title={text:t.title}),e("titlefont","font"),e("titleposition","position"),e("titleside","side"),e("titleoffset","offset"))}function g(t){if(!o.isPlainObject(t))return!1;var e=t.name;return delete t.name,delete t.showlegend,("string"==typeof e||"number"==typeof e)&&String(e)}function v(t,e,r,n){if(r&&!n)return t;if(n&&!r)return e;if(!t.trim())return e;if(!e.trim())return t;var a,i=Math.min(t.length,e.length);for(a=0;a<i&&t.charAt(a)===e.charAt(a);a++);return t.substr(0,a).trim()}function m(t){var e="middle",r="center";return"string"==typeof t&&(-1!==t.indexOf("top")?e="top":-1!==t.indexOf("bottom")&&(e="bottom"),-1!==t.indexOf("left")?r="left":-1!==t.indexOf("right")&&(r="right")),e+" "+r}function y(t,e){return e in t&&"object"==typeof t[e]&&0===Object.keys(t[e]).length}r.clearPromiseQueue=function(t){Array.isArray(t._promises)&&t._promises.length>0&&o.log("Clearing previous rejected promises from queue."),t._promises=[]},r.cleanLayout=function(t){var e,n;t||(t={}),t.xaxis1&&(t.xaxis||(t.xaxis=t.xaxis1),delete t.xaxis1),t.yaxis1&&(t.yaxis||(t.yaxis=t.yaxis1),delete t.yaxis1),t.scene1&&(t.scene||(t.scene=t.scene1),delete t.scene1);var i=(s.subplotsRegistry.cartesian||{}).attrRegex,l=(s.subplotsRegistry.polar||{}).attrRegex,h=(s.subplotsRegistry.ternary||{}).attrRegex,f=(s.subplotsRegistry.gl3d||{}).attrRegex,g=Object.keys(t);for(e=0;e<g.length;e++){var v=g[e];if(i&&i.test(v)){var m=t[v];m.anchor&&"free"!==m.anchor&&(m.anchor=u(m.anchor)),m.overlaying&&(m.overlaying=u(m.overlaying)),m.type||(m.isdate?m.type="date":m.islog?m.type="log":!1===m.isdate&&!1===m.islog&&(m.type="linear")),"withzero"!==m.autorange&&"tozero"!==m.autorange||(m.autorange=!0,m.rangemode="tozero"),delete m.islog,delete m.isdate,delete m.categories,y(m,"domain")&&delete m.domain,void 0!==m.autotick&&(void 0===m.tickmode&&(m.tickmode=m.autotick?"auto":"linear"),delete m.autotick),d(m)}else if(l&&l.test(v)){d(t[v].radialaxis)}else if(h&&h.test(v)){var x=t[v];d(x.aaxis),d(x.baxis),d(x.caxis)}else if(f&&f.test(v)){var b=t[v],_=b.cameraposition;if(Array.isArray(_)&&4===_[0].length){var w=_[0],k=_[1],T=_[2],M=a([],w),A=[];for(n=0;n<3;++n)A[n]=k[n]+T*M[2+4*n];b.camera={eye:{x:A[0],y:A[1],z:A[2]},center:{x:k[0],y:k[1],z:k[2]},up:{x:0,y:0,z:1}},delete b.cameraposition}d(b.xaxis),d(b.yaxis),d(b.zaxis)}}var S=Array.isArray(t.annotations)?t.annotations.length:0;for(e=0;e<S;e++){var E=t.annotations[e];o.isPlainObject(E)&&(E.ref&&("paper"===E.ref?(E.xref="paper",E.yref="paper"):"data"===E.ref&&(E.xref="x",E.yref="y"),delete E.ref),p(E,"xref"),p(E,"yref"))}var L=Array.isArray(t.shapes)?t.shapes.length:0;for(e=0;e<L;e++){var C=t.shapes[e];o.isPlainObject(C)&&(p(C,"xref"),p(C,"yref"))}var P=t.legend;return P&&(P.x>3?(P.x=1.02,P.xanchor="left"):P.x<-2&&(P.x=-.02,P.xanchor="right"),P.y>3?(P.y=1.02,P.yanchor="bottom"):P.y<-2&&(P.y=-.02,P.yanchor="top")),d(t),"rotate"===t.dragmode&&(t.dragmode="orbit"),c.clean(t),t.template&&t.template.layout&&r.cleanLayout(t.template.layout),t},r.cleanData=function(t){for(var e=0;e<t.length;e++){var n,a=t[e];if("histogramy"===a.type&&"xbins"in a&&!("ybins"in a)&&(a.ybins=a.xbins,delete a.xbins),a.error_y&&"opacity"in a.error_y){var l=c.defaults,h=a.error_y.color||(f(a,"bar")?c.defaultLine:l[e%l.length]);a.error_y.color=c.addOpacity(c.rgb(h),c.opacity(h)*a.error_y.opacity),delete a.error_y.opacity}if("bardir"in a&&("h"!==a.bardir||!f(a,"bar")&&"histogram"!==a.type.substr(0,9)||(a.orientation="h",r.swapXYData(a)),delete a.bardir),"histogramy"===a.type&&r.swapXYData(a),"histogramx"!==a.type&&"histogramy"!==a.type||(a.type="histogram"),"scl"in a&&!("colorscale"in a)&&(a.colorscale=a.scl,delete a.scl),"reversescl"in a&&!("reversescale"in a)&&(a.reversescale=a.reversescl,delete a.reversescl),a.xaxis&&(a.xaxis=u(a.xaxis,"x")),a.yaxis&&(a.yaxis=u(a.yaxis,"y")),f(a,"gl3d")&&a.scene&&(a.scene=s.subplotsRegistry.gl3d.cleanId(a.scene)),!f(a,"pie-like")&&!f(a,"bar-like"))if(Array.isArray(a.textposition))for(n=0;n<a.textposition.length;n++)a.textposition[n]=m(a.textposition[n]);else a.textposition&&(a.textposition=m(a.textposition));var p=i.getModule(a);if(p&&p.colorbar){var x=p.colorbar.container,b=x?a[x]:a;b&&b.colorscale&&("YIGnBu"===b.colorscale&&(b.colorscale="YlGnBu"),"YIOrRd"===b.colorscale&&(b.colorscale="YlOrRd"))}if("surface"===a.type&&o.isPlainObject(a.contours)){var _=["x","y","z"];for(n=0;n<_.length;n++){var w=a.contours[_[n]];o.isPlainObject(w)&&(w.highlightColor&&(w.highlightcolor=w.highlightColor,delete w.highlightColor),w.highlightWidth&&(w.highlightwidth=w.highlightWidth,delete w.highlightWidth))}}if("candlestick"===a.type||"ohlc"===a.type){var k=!1!==(a.increasing||{}).showlegend,T=!1!==(a.decreasing||{}).showlegend,M=g(a.increasing),A=g(a.decreasing);if(!1!==M&&!1!==A){var S=v(M,A,k,T);S&&(a.name=S)}else!M&&!A||a.name||(a.name=M||A)}if(Array.isArray(a.transforms)){var E=a.transforms;for(n=0;n<E.length;n++){var L=E[n];if(o.isPlainObject(L))switch(L.type){case"filter":L.filtersrc&&(L.target=L.filtersrc,delete L.filtersrc),L.calendar&&(L.valuecalendar||(L.valuecalendar=L.calendar),delete L.calendar);break;case"groupby":if(L.styles=L.styles||L.style,L.styles&&!Array.isArray(L.styles)){var C=L.styles,P=Object.keys(C);L.styles=[];for(var O=0;O<P.length;O++)L.styles.push({target:P[O],value:C[P[O]]})}}}}y(a,"line")&&delete a.line,"marker"in a&&(y(a.marker,"line")&&delete a.marker.line,y(a,"marker")&&delete a.marker),c.clean(a),a.autobinx&&(delete a.autobinx,delete a.xbins),a.autobiny&&(delete a.autobiny,delete a.ybins),d(a),a.colorbar&&d(a.colorbar),a.marker&&a.marker.colorbar&&d(a.marker.colorbar),a.line&&a.line.colorbar&&d(a.line.colorbar),a.aaxis&&d(a.aaxis),a.baxis&&d(a.baxis)}},r.swapXYData=function(t){var e;if(o.swapAttrs(t,["?","?0","d?","?bins","nbins?","autobin?","?src","error_?"]),Array.isArray(t.z)&&Array.isArray(t.z[0])&&(t.transpose?delete t.transpose:t.transpose=!0),t.error_x&&t.error_y){var r=t.error_y,n="copy_ystyle"in r?r.copy_ystyle:!(r.color||r.thickness||r.width);o.swapAttrs(t,["error_?.copy_ystyle"]),n&&o.swapAttrs(t,["error_?.color","error_?.thickness","error_?.width"])}if("string"==typeof t.hoverinfo){var a=t.hoverinfo.split("+");for(e=0;e<a.length;e++)"x"===a[e]?a[e]="y":"y"===a[e]&&(a[e]="x");t.hoverinfo=a.join("+")}},r.coerceTraceIndices=function(t,e){if(n(e))return[e];if(!Array.isArray(e)||!e.length)return t.data.map(function(t,e){return e});if(Array.isArray(e)){for(var r=[],a=0;a<e.length;a++)o.isIndex(e[a],t.data.length)?r.push(e[a]):o.warn("trace index (",e[a],") is not a number or is out of bounds");return r}return e},r.manageArrayContainers=function(t,e,r){var a=t.obj,i=t.parts,s=i.length,l=i[s-1],c=n(l);if(c&&null===e){var u=i.slice(0,s-1).join(".");o.nestedProperty(a,u).get().splice(l,1)}else c&&void 0===t.get()?(void 0===t.get()&&(r[t.astr]=null),t.set(e)):t.set(e)};var x=/(\.[^\[\]\.]+|\[[^\[\]\.]+\])$/;function b(t){var e=t.search(x);if(e>0)return t.substr(0,e)}r.hasParent=function(t,e){for(var r=b(e);r;){if(r in t)return!0;r=b(r)}return!1};var _=["x","y","z"];r.clearAxisTypes=function(t,e,r){for(var n=0;n<e.length;n++)for(var a=t._fullData[n],i=0;i<3;i++){var s=h(t,a,_[i]);if(s&&"log"!==s.type){var l=s._name,c=s._id.substr(1);if("scene"===c.substr(0,5)){if(void 0!==r[c])continue;l=c+"."+l}var u=l+".type";void 0===r[l]&&void 0===r[u]&&o.nestedProperty(t.layout,u).set(null)}}}},{"../components/color":591,"../lib":717,"../plots/cartesian/axis_ids":768,"../plots/plots":826,"../registry":846,"fast-isnumeric":228,"gl-mat4/fromQuat":265}],750:[function(t,e,r){"use strict";var n=t("./plot_api");r.plot=n.plot,r.newPlot=n.newPlot,r.restyle=n.restyle,r.relayout=n.relayout,r.redraw=n.redraw,r.update=n.update,r._guiRestyle=n._guiRestyle,r._guiRelayout=n._guiRelayout,r._guiUpdate=n._guiUpdate,r._storeDirectGUIEdit=n._storeDirectGUIEdit,r.react=n.react,r.extendTraces=n.extendTraces,r.prependTraces=n.prependTraces,r.addTraces=n.addTraces,r.deleteTraces=n.deleteTraces,r.moveTraces=n.moveTraces,r.purge=n.purge,r.addFrames=n.addFrames,r.deleteFrames=n.deleteFrames,r.animate=n.animate,r.setPlotConfig=n.setPlotConfig,r.toImage=t("./to_image"),r.validate=t("./validate"),r.downloadImage=t("../snapshot/download");var a=t("./template_api");r.makeTemplate=a.makeTemplate,r.validateTemplate=a.validateTemplate},{"../snapshot/download":848,"./plot_api":752,"./template_api":757,"./to_image":758,"./validate":759}],751:[function(t,e,r){"use strict";var n=t("../lib/is_plain_object"),a=t("../lib/noop"),i=t("../lib/loggers"),o=t("../lib/search").sorterAsc,s=t("../registry");r.containerArrayMatch=t("./container_array_match");var l=r.isAddVal=function(t){return"add"===t||n(t)},c=r.isRemoveVal=function(t){return null===t||"remove"===t};r.applyContainerArrayChanges=function(t,e,r,n,u){var h=e.astr,f=s.getComponentMethod(h,"supplyLayoutDefaults"),p=s.getComponentMethod(h,"draw"),d=s.getComponentMethod(h,"drawOne"),g=n.replot||n.recalc||f===a||p===a,v=t.layout,m=t._fullLayout;if(r[""]){Object.keys(r).length>1&&i.warn("Full array edits are incompatible with other edits",h);var y=r[""][""];if(c(y))e.set(null);else{if(!Array.isArray(y))return i.warn("Unrecognized full array edit value",h,y),!0;e.set(y)}return!g&&(f(v,m),p(t),!0)}var x,b,_,w,k,T,M,A,S=Object.keys(r).map(Number).sort(o),E=e.get(),L=E||[],C=u(m,h).get(),P=[],O=-1,z=L.length;for(x=0;x<S.length;x++)if(w=r[_=S[x]],k=Object.keys(w),T=w[""],M=l(T),_<0||_>L.length-(M?0:1))i.warn("index out of range",h,_);else if(void 0!==T)k.length>1&&i.warn("Insertion & removal are incompatible with edits to the same index.",h,_),c(T)?P.push(_):M?("add"===T&&(T={}),L.splice(_,0,T),C&&C.splice(_,0,{})):i.warn("Unrecognized full object edit value",h,_,T),-1===O&&(O=_);else for(b=0;b<k.length;b++)A=h+"["+_+"].",u(L[_],k[b],A).set(w[k[b]]);for(x=P.length-1;x>=0;x--)L.splice(P[x],1),C&&C.splice(P[x],1);if(L.length?E||e.set(L):e.set(null),g)return!1;if(f(v,m),d!==a){var I;if(-1===O)I=S;else{for(z=Math.max(L.length,z),I=[],x=0;x<S.length&&!((_=S[x])>=O);x++)I.push(_);for(x=O;x<z;x++)I.push(x)}for(x=0;x<I.length;x++)d(t,I[x])}else p(t);return!0}},{"../lib/is_plain_object":718,"../lib/loggers":721,"../lib/noop":726,"../lib/search":736,"../registry":846,"./container_array_match":747}],752:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("has-hover"),o=t("../lib"),s=o.nestedProperty,l=t("../lib/events"),c=t("../lib/queue"),u=t("../registry"),h=t("./plot_schema"),f=t("../plots/plots"),p=t("../plots/polar/legacy"),d=t("../plots/cartesian/axes"),g=t("../components/drawing"),v=t("../components/color"),m=t("../plots/cartesian/graph_interact").initInteractions,y=t("../constants/xmlns_namespaces"),x=t("../lib/svg_text_utils"),b=t("../plots/cartesian/select").clearSelect,_=t("./plot_config").dfltConfig,w=t("./manage_arrays"),k=t("./helpers"),T=t("./subroutines"),M=t("./edit_types"),A=t("../plots/cartesian/constants").AX_NAME_PATTERN,S=0,E=5;function L(t){var e=t._fullLayout;e._redrawFromAutoMarginCount?e._redrawFromAutoMarginCount--:t.emit("plotly_afterplot")}function C(t,e){try{t._fullLayout._paper.style("background",e)}catch(t){o.error(t)}}function P(t,e){C(t,v.combine(e,"white"))}function O(t,e){if(!t._context){t._context=o.extendDeep({},_);var r=n.select("base");t._context._baseUrl=r.size()&&r.attr("href")?window.location.href.split("#")[0]:""}var a,s,l,c=t._context;if(e){for(s=Object.keys(e),a=0;a<s.length;a++)"editable"!==(l=s[a])&&"edits"!==l&&l in c&&("setBackground"===l&&"opaque"===e[l]?c[l]=P:c[l]=e[l]);e.plot3dPixelRatio&&!c.plotGlPixelRatio&&(c.plotGlPixelRatio=c.plot3dPixelRatio);var u=e.editable;if(void 0!==u)for(c.editable=u,s=Object.keys(c.edits),a=0;a<s.length;a++)c.edits[s[a]]=u;if(e.edits)for(s=Object.keys(e.edits),a=0;a<s.length;a++)(l=s[a])in c.edits&&(c.edits[l]=e.edits[l]);c._exportedPlot=e._exportedPlot}c.staticPlot&&(c.editable=!1,c.edits={},c.autosizable=!1,c.scrollZoom=!1,c.doubleClick=!1,c.showTips=!1,c.showLink=!1,c.displayModeBar=!1),"hover"!==c.displayModeBar||i||(c.displayModeBar=!0),"transparent"!==c.setBackground&&"function"==typeof c.setBackground||(c.setBackground=C),c._hasZeroHeight=c._hasZeroHeight||0===t.clientHeight,c._hasZeroWidth=c._hasZeroWidth||0===t.clientWidth;var h=c.scrollZoom,f=c._scrollZoom={};if(!0===h)f.cartesian=1,f.gl3d=1,f.geo=1,f.mapbox=1;else if("string"==typeof h){var p=h.split("+");for(a=0;a<p.length;a++)f[p[a]]=1}else!1!==h&&(f.gl3d=1,f.geo=1,f.mapbox=1)}function z(t,e){var r,n,a=e+1,i=[];for(r=0;r<t.length;r++)(n=t[r])<0?i.push(a+n):i.push(n);return i}function I(t,e,r){var n,a;for(n=0;n<e.length;n++){if((a=e[n])!==parseInt(a,10))throw new Error("all values in "+r+" must be integers");if(a>=t.data.length||a<-t.data.length)throw new Error(r+" must be valid indices for gd.data.");if(e.indexOf(a,n+1)>-1||a>=0&&e.indexOf(-t.data.length+a)>-1||a<0&&e.indexOf(t.data.length+a)>-1)throw new Error("each index in "+r+" must be unique.")}}function D(t,e,r){if(!Array.isArray(t.data))throw new Error("gd.data must be an array.");if("undefined"==typeof e)throw new Error("currentIndices is a required argument.");if(Array.isArray(e)||(e=[e]),I(t,e,"currentIndices"),"undefined"==typeof r||Array.isArray(r)||(r=[r]),"undefined"!=typeof r&&I(t,r,"newIndices"),"undefined"!=typeof r&&e.length!==r.length)throw new Error("current and new indices must be of equal length.")}function R(t,e,r,n,i){!function(t,e,r,n){var a=o.isPlainObject(n);if(!Array.isArray(t.data))throw new Error("gd.data must be an array");if(!o.isPlainObject(e))throw new Error("update must be a key:value object");if("undefined"==typeof r)throw new Error("indices must be an integer or array of integers");for(var i in I(t,r,"indices"),e){if(!Array.isArray(e[i])||e[i].length!==r.length)throw new Error("attribute "+i+" must be an array of length equal to indices array length");if(a&&(!(i in n)||!Array.isArray(n[i])||n[i].length!==e[i].length))throw new Error("when maxPoints is set as a key:value object it must contain a 1:1 corrispondence with the keys and number of traces in the update object")}}(t,e,r,n);for(var l=function(t,e,r,n){var i,l,c,u,h,f=o.isPlainObject(n),p=[];for(var d in Array.isArray(r)||(r=[r]),r=z(r,t.data.length-1),e)for(var g=0;g<r.length;g++){if(i=t.data[r[g]],l=(c=s(i,d)).get(),u=e[d][g],!o.isArrayOrTypedArray(u))throw new Error("attribute: "+d+" index: "+g+" must be an array");if(!o.isArrayOrTypedArray(l))throw new Error("cannot extend missing or non-array attribute: "+d);if(l.constructor!==u.constructor)throw new Error("cannot extend array with an array of a different type: "+d);h=f?n[d][g]:n,a(h)||(h=-1),p.push({prop:c,target:l,insert:u,maxp:Math.floor(h)})}return p}(t,e,r,n),c={},u={},h=0;h<l.length;h++){var f=l[h].prop,p=l[h].maxp,d=i(l[h].target,l[h].insert,p);f.set(d[0]),Array.isArray(c[f.astr])||(c[f.astr]=[]),c[f.astr].push(d[1]),Array.isArray(u[f.astr])||(u[f.astr]=[]),u[f.astr].push(l[h].target.length)}return{update:c,maxPoints:u}}function F(t,e){var r=new t.constructor(t.length+e.length);return r.set(t),r.set(e,t.length),r}function B(t,e,n,a){t=o.getGraphDiv(t),k.clearPromiseQueue(t);var i={};if("string"==typeof e)i[e]=n;else{if(!o.isPlainObject(e))return o.warn("Restyle fail.",e,n,a),Promise.reject();i=o.extendFlat({},e),void 0===a&&(a=n)}Object.keys(i).length&&(t.changed=!0);var s=k.coerceTraceIndices(t,a),l=U(t,i,s),u=l.flags;u.calc&&(t.calcdata=void 0),u.clearAxisTypes&&k.clearAxisTypes(t,s,{});var h=[];u.fullReplot?h.push(r.plot):(h.push(f.previousPromises),f.supplyDefaults(t),u.markerSize&&(f.doCalcdata(t),Y(h)),u.style&&h.push(T.doTraceStyle),u.colorbars&&h.push(T.doColorBars),h.push(L)),h.push(f.rehover,f.redrag),c.add(t,B,[t,l.undoit,l.traces],B,[t,l.redoit,l.traces]);var p=o.syncOrAsync(h,t);return p&&p.then||(p=Promise.resolve()),p.then(function(){return t.emit("plotly_restyle",l.eventData),t})}function N(t){return void 0===t?null:t}function j(t,e){return e?function(e,r,n){var a=s(e,r),i=a.set;return a.set=function(e){V((n||"")+r,a.get(),e,t),i(e)},a}:s}function V(t,e,r,n){if(Array.isArray(e)||Array.isArray(r))for(var a=Array.isArray(e)?e:[],i=Array.isArray(r)?r:[],s=Math.max(a.length,i.length),l=0;l<s;l++)V(t+"["+l+"]",a[l],i[l],n);else if(o.isPlainObject(e)||o.isPlainObject(r)){var c=o.isPlainObject(e)?e:{},u=o.isPlainObject(r)?r:{},h=o.extendFlat({},c,u);for(var f in h)V(t+"."+f,c[f],u[f],n)}else void 0===n[t]&&(n[t]=N(e))}function U(t,e,r){var n,a=t._fullLayout,i=t._fullData,l=t.data,c=a._guiEditing,p=j(a._preGUI,c),g=o.extendDeepAll({},e);q(e);var v,m=M.traceFlags(),y={},x={};function b(){return r.map(function(){})}function _(t){var e=d.id2name(t);-1===v.indexOf(e)&&v.push(e)}function w(t){return"LAYOUT"+t+".autorange"}function T(t){return"LAYOUT"+t+".range"}function A(t){for(var e=t;e<i.length;e++)if(i[e]._input===l[t])return i[e]}function S(n,i,o){if(Array.isArray(n))n.forEach(function(t){S(t,i,o)});else if(!(n in e||k.hasParent(e,n))){var s;if("LAYOUT"===n.substr(0,6))s=p(t.layout,n.replace("LAYOUT",""));else{var u=r[o];s=j(a._tracePreGUI[A(u)._fullInput.uid],c)(l[u],n)}n in x||(x[n]=b()),void 0===x[n][o]&&(x[n][o]=N(s.get())),void 0!==i&&s.set(i)}}function E(t){return function(e){return i[e][t]}}function L(t){return function(e,n){return!1===e?i[r[n]][t]:null}}for(var C in e){if(k.hasParent(e,C))throw new Error("cannot set "+C+" and a parent attribute simultaneously");var P,O,z,I,D,R,F=e[C];if("autobinx"!==C&&"autobiny"!==C||(C=C.charAt(C.length-1)+"bins",F=Array.isArray(F)?F.map(L(C)):!1===F?r.map(E(C)):null),y[C]=F,"LAYOUT"!==C.substr(0,6)){for(x[C]=b(),n=0;n<r.length;n++){if(P=l[r[n]],O=A(r[n]),I=(z=j(a._tracePreGUI[O._fullInput.uid],c)(P,C)).get(),void 0!==(D=Array.isArray(F)?F[n%F.length]:F)){var B=z.parts[z.parts.length-1],V=C.substr(0,C.length-B.length-1),U=V?V+".":"",H=V?s(O,V).get():O;if((R=h.getTraceValObject(O,z.parts))&&R.impliedEdits&&null!==D)for(var G in R.impliedEdits)S(o.relativeAttr(C,G),R.impliedEdits[G],n);else if("thicknessmode"!==B&&"lenmode"!==B||I===D||"fraction"!==D&&"pixels"!==D||!H){if("type"===C&&("pie"===D!=("pie"===I)||"funnelarea"===D!=("funnelarea"===I))){var Y="x",W="y";"bar"!==D&&"bar"!==I||"h"!==P.orientation||(Y="y",W="x"),o.swapAttrs(P,["?","?src"],"labels",Y),o.swapAttrs(P,["d?","?0"],"label",Y),o.swapAttrs(P,["?","?src"],"values",W),"pie"===I||"funnelarea"===I?(s(P,"marker.color").set(s(P,"marker.colors").get()),a._pielayer.selectAll("g.trace").remove()):u.traceIs(P,"cartesian")&&s(P,"marker.colors").set(s(P,"marker.color").get())}}else{var X=a._size,Z=H.orient,J="top"===Z||"bottom"===Z;if("thicknessmode"===B){var K=J?X.h:X.w;S(U+"thickness",H.thickness*("fraction"===D?1/K:K),n)}else{var Q=J?X.w:X.h;S(U+"len",H.len*("fraction"===D?1/Q:Q),n)}}x[C][n]=N(I);if(-1!==["swapxy","swapxyaxes","orientation","orientationaxes"].indexOf(C)){if("orientation"===C){z.set(D);var $=P.x&&!P.y?"h":"v";if((z.get()||$)===O.orientation)continue}else"orientationaxes"===C&&(P.orientation={v:"h",h:"v"}[O.orientation]);k.swapXYData(P),m.calc=m.clearAxisTypes=!0}else-1!==f.dataArrayContainers.indexOf(z.parts[0])?(k.manageArrayContainers(z,D,x),m.calc=!0):(R?R.arrayOk&&!u.traceIs(O,"regl")&&(o.isArrayOrTypedArray(D)||o.isArrayOrTypedArray(I))?m.calc=!0:M.update(m,R):m.calc=!0,z.set(D))}}if(-1!==["swapxyaxes","orientationaxes"].indexOf(C)&&d.swap(t,r),"orientationaxes"===C){var tt=s(t.layout,"hovermode");"x"===tt.get()?tt.set("y"):"y"===tt.get()?tt.set("x"):"x unified"===tt.get()?tt.set("y unified"):"y unified"===tt.get()&&tt.set("x unified")}if(-1!==["orientation","type"].indexOf(C)){for(v=[],n=0;n<r.length;n++){var et=l[r[n]];u.traceIs(et,"cartesian")&&(_(et.xaxis||"x"),_(et.yaxis||"y"))}S(v.map(w),!0,0),S(v.map(T),[0,1],0)}}else z=p(t.layout,C.replace("LAYOUT","")),x[C]=[N(z.get())],z.set(Array.isArray(F)?F[0]:F),m.calc=!0}return(m.calc||m.plot)&&(m.fullReplot=!0),{flags:m,undoit:x,redoit:y,traces:r,eventData:o.extendDeepNoArrays([],[g,r])}}function q(t){var e,r,n,a=o.counterRegex("axis",".title",!1,!1),i=/colorbar\.title$/,s=Object.keys(t);for(e=0;e<s.length;e++)r=s[e],n=t[r],"title"!==r&&!a.test(r)&&!i.test(r)||"string"!=typeof n&&"number"!=typeof n?r.indexOf("titlefont")>-1?l(r,r.replace("titlefont","title.font")):r.indexOf("titleposition")>-1?l(r,r.replace("titleposition","title.position")):r.indexOf("titleside")>-1?l(r,r.replace("titleside","title.side")):r.indexOf("titleoffset")>-1&&l(r,r.replace("titleoffset","title.offset")):l(r,r.replace("title","title.text"));function l(e,r){t[r]=t[e],delete t[e]}}function H(t,e,r){if(t=o.getGraphDiv(t),k.clearPromiseQueue(t),t.framework&&t.framework.isPolar)return Promise.resolve(t);var n={};if("string"==typeof e)n[e]=r;else{if(!o.isPlainObject(e))return o.warn("Relayout fail.",e,r),Promise.reject();n=o.extendFlat({},e)}Object.keys(n).length&&(t.changed=!0);var a=J(t,n),i=a.flags;i.calc&&(t.calcdata=void 0);var s=[f.previousPromises];i.layoutReplot?s.push(T.layoutReplot):Object.keys(n).length&&(G(t,i,a)||f.supplyDefaults(t),i.legend&&s.push(T.doLegend),i.layoutstyle&&s.push(T.layoutStyles),i.axrange&&Y(s,a.rangesAltered),i.ticks&&s.push(T.doTicksRelayout),i.modebar&&s.push(T.doModeBar),i.camera&&s.push(T.doCamera),i.colorbars&&s.push(T.doColorBars),s.push(L)),s.push(f.rehover,f.redrag),c.add(t,H,[t,a.undoit],H,[t,a.redoit]);var l=o.syncOrAsync(s,t);return l&&l.then||(l=Promise.resolve(t)),l.then(function(){return t.emit("plotly_relayout",a.eventData),t})}function G(t,e,r){var n=t._fullLayout;if(!e.axrange)return!1;for(var a in e)if("axrange"!==a&&e[a])return!1;for(var i in r.rangesAltered){var o=d.id2name(i),s=t.layout[o],l=n[o];if(l.autorange=s.autorange,l.range=s.range.slice(),l.cleanRange(),l._matchGroup)for(var c in l._matchGroup)if(c!==i){var u=n[d.id2name(c)];u.autorange=l.autorange,u.range=l.range.slice(),u._input.range=l.range.slice()}}return!0}function Y(t,e){var r=e?function(t){var r=[],n=!0;for(var a in e){var i=d.getFromId(t,a);if(r.push(a),i._matchGroup)for(var o in i._matchGroup)e[o]||r.push(o);i.automargin&&(n=!1)}return d.draw(t,r,{skipTitle:n})}:function(t){return d.draw(t,"redraw")};t.push(b,T.doAutoRangeAndConstraints,r,T.drawData,T.finalDraw)}var W=/^[xyz]axis[0-9]*\.range(\[[0|1]\])?$/,X=/^[xyz]axis[0-9]*\.autorange$/,Z=/^[xyz]axis[0-9]*\.domain(\[[0|1]\])?$/;function J(t,e){var r,n,a,i=t.layout,l=t._fullLayout,c=l._guiEditing,f=j(l._preGUI,c),p=Object.keys(e),g=d.list(t),v=o.extendDeepAll({},e),m={};for(q(e),p=Object.keys(e),n=0;n<p.length;n++)if(0===p[n].indexOf("allaxes")){for(a=0;a<g.length;a++){var y=g[a]._id.substr(1),x=-1!==y.indexOf("scene")?y+".":"",b=p[n].replace("allaxes",x+g[a]._name);e[b]||(e[b]=e[p[n]])}delete e[p[n]]}var _=M.layoutFlags(),T={},S={};function E(t,r){if(Array.isArray(t))t.forEach(function(t){E(t,r)});else if(!(t in e||k.hasParent(e,t))){var n=f(i,t);t in S||(S[t]=N(n.get())),void 0!==r&&n.set(r)}}var L,C={};function P(t){var e=d.name2id(t.split(".")[0]);return C[e]=1,e}for(var O in e){if(k.hasParent(e,O))throw new Error("cannot set "+O+" and a parent attribute simultaneously");for(var z=f(i,O),I=e[O],D=z.parts.length-1;D>0&&"string"!=typeof z.parts[D];)D--;var R=z.parts[D],F=z.parts[D-1]+"."+R,B=z.parts.slice(0,D).join("."),V=s(t.layout,B).get(),U=s(l,B).get(),H=z.get();if(void 0!==I){T[O]=I,S[O]="reverse"===R?I:N(H);var G=h.getLayoutValObject(l,z.parts);if(G&&G.impliedEdits&&null!==I)for(var Y in G.impliedEdits)E(o.relativeAttr(O,Y),G.impliedEdits[Y]);if(-1!==["width","height"].indexOf(O))if(I){E("autosize",null);var J="height"===O?"width":"height";E(J,l[J])}else l[O]=t._initialAutoSize[O];else if("autosize"===O)E("width",I?null:l.width),E("height",I?null:l.height);else if(F.match(W))P(F),s(l,B+"._inputRange").set(null);else if(F.match(X)){P(F),s(l,B+"._inputRange").set(null);var Q=s(l,B).get();Q._inputDomain&&(Q._input.domain=Q._inputDomain.slice())}else F.match(Z)&&s(l,B+"._inputDomain").set(null);if("type"===R){var $=V,tt="linear"===U.type&&"log"===I,et="log"===U.type&&"linear"===I;if(tt||et){if($&&$.range)if(U.autorange)tt&&($.range=$.range[1]>$.range[0]?[1,2]:[2,1]);else{var rt=$.range[0],nt=$.range[1];tt?(rt<=0&&nt<=0&&E(B+".autorange",!0),rt<=0?rt=nt/1e6:nt<=0&&(nt=rt/1e6),E(B+".range[0]",Math.log(rt)/Math.LN10),E(B+".range[1]",Math.log(nt)/Math.LN10)):(E(B+".range[0]",Math.pow(10,rt)),E(B+".range[1]",Math.pow(10,nt)))}else E(B+".autorange",!0);Array.isArray(l._subplots.polar)&&l._subplots.polar.length&&l[z.parts[0]]&&"radialaxis"===z.parts[1]&&delete l[z.parts[0]]._subplot.viewInitial["radialaxis.range"],u.getComponentMethod("annotations","convertCoords")(t,U,I,E),u.getComponentMethod("images","convertCoords")(t,U,I,E)}else E(B+".autorange",!0),E(B+".range",null);s(l,B+"._inputRange").set(null)}else if(R.match(A)){var at=s(l,O).get(),it=(I||{}).type;it&&"-"!==it||(it="linear"),u.getComponentMethod("annotations","convertCoords")(t,at,it,E),u.getComponentMethod("images","convertCoords")(t,at,it,E)}var ot=w.containerArrayMatch(O);if(ot){r=ot.array,n=ot.index;var st=ot.property,lt=G||{editType:"calc"};""!==n&&""===st&&(w.isAddVal(I)?S[O]=null:w.isRemoveVal(I)?S[O]=(s(i,r).get()||[])[n]:o.warn("unrecognized full object value",e)),M.update(_,lt),m[r]||(m[r]={});var ct=m[r][n];ct||(ct=m[r][n]={}),ct[st]=I,delete e[O]}else"reverse"===R?(V.range?V.range.reverse():(E(B+".autorange",!0),V.range=[1,0]),U.autorange?_.calc=!0:_.plot=!0):(l._has("scatter-like")&&l._has("regl")&&"dragmode"===O&&("lasso"===I||"select"===I)&&"lasso"!==H&&"select"!==H?_.plot=!0:l._has("gl2d")?_.plot=!0:G?M.update(_,G):_.calc=!0,z.set(I))}}for(r in m){w.applyContainerArrayChanges(t,f(i,r),m[r],_,f)||(_.plot=!0)}var ut=l._axisConstraintGroups||[];for(L in C)for(n=0;n<ut.length;n++){var ht=ut[n];if(ht[L])for(var ft in _.calc=!0,ht)C[ft]||(d.getFromId(t,ft)._constraintShrinkable=!0)}return(K(t)||e.height||e.width)&&(_.plot=!0),(_.plot||_.calc)&&(_.layoutReplot=!0),{flags:_,rangesAltered:C,undoit:S,redoit:T,eventData:v}}function K(t){var e=t._fullLayout,r=e.width,n=e.height;return t.layout.autosize&&f.plotAutoSize(t,t.layout,e),e.width!==r||e.height!==n}function Q(t,e,n,a){if(t=o.getGraphDiv(t),k.clearPromiseQueue(t),t.framework&&t.framework.isPolar)return Promise.resolve(t);o.isPlainObject(e)||(e={}),o.isPlainObject(n)||(n={}),Object.keys(e).length&&(t.changed=!0),Object.keys(n).length&&(t.changed=!0);var i=k.coerceTraceIndices(t,a),s=U(t,o.extendFlat({},e),i),l=s.flags,u=J(t,o.extendFlat({},n)),h=u.flags;(l.calc||h.calc)&&(t.calcdata=void 0),l.clearAxisTypes&&k.clearAxisTypes(t,i,n);var p=[];h.layoutReplot?p.push(T.layoutReplot):l.fullReplot?p.push(r.plot):(p.push(f.previousPromises),G(t,h,u)||f.supplyDefaults(t),l.style&&p.push(T.doTraceStyle),(l.colorbars||h.colorbars)&&p.push(T.doColorBars),h.legend&&p.push(T.doLegend),h.layoutstyle&&p.push(T.layoutStyles),h.axrange&&Y(p,u.rangesAltered),h.ticks&&p.push(T.doTicksRelayout),h.modebar&&p.push(T.doModeBar),h.camera&&p.push(T.doCamera),p.push(L)),p.push(f.rehover,f.redrag),c.add(t,Q,[t,s.undoit,u.undoit,s.traces],Q,[t,s.redoit,u.redoit,s.traces]);var d=o.syncOrAsync(p,t);return d&&d.then||(d=Promise.resolve(t)),d.then(function(){return t.emit("plotly_update",{data:s.eventData,layout:u.eventData}),t})}function $(t){return function(e){e._fullLayout._guiEditing=!0;var r=t.apply(null,arguments);return e._fullLayout._guiEditing=!1,r}}var tt=[{pattern:/^hiddenlabels/,attr:"legend.uirevision"},{pattern:/^((x|y)axis\d*)\.((auto)?range|title\.text)/},{pattern:/axis\d*\.showspikes$/,attr:"modebar.uirevision"},{pattern:/(hover|drag)mode$/,attr:"modebar.uirevision"},{pattern:/^(scene\d*)\.camera/},{pattern:/^(geo\d*)\.(projection|center|fitbounds)/},{pattern:/^(ternary\d*\.[abc]axis)\.(min|title\.text)$/},{pattern:/^(polar\d*\.radialaxis)\.((auto)?range|angle|title\.text)/},{pattern:/^(polar\d*\.angularaxis)\.rotation/},{pattern:/^(mapbox\d*)\.(center|zoom|bearing|pitch)/},{pattern:/^legend\.(x|y)$/,attr:"editrevision"},{pattern:/^(shapes|annotations)/,attr:"editrevision"},{pattern:/^title\.text$/,attr:"editrevision"}],et=[{pattern:/^selectedpoints$/,attr:"selectionrevision"},{pattern:/(^|value\.)visible$/,attr:"legend.uirevision"},{pattern:/^dimensions\[\d+\]\.constraintrange/},{pattern:/^node\.(x|y|groups)/},{pattern:/^level$/},{pattern:/(^|value\.)name$/},{pattern:/colorbar\.title\.text$/},{pattern:/colorbar\.(x|y)$/,attr:"editrevision"}];function rt(t,e){for(var r=0;r<e.length;r++){var n=e[r],a=t.match(n.pattern);if(a)return{head:a[1],attr:n.attr}}}function nt(t,e){var r=s(e,t).get();if(void 0!==r)return r;var n=t.split(".");for(n.pop();n.length>1;)if(n.pop(),void 0!==(r=s(e,n.join(".")+".uirevision").get()))return r;return e.uirevision}function at(t,e){for(var r=0;r<e.length;r++)if(e[r]._fullInput.uid===t)return r;return-1}function it(t,e,r){for(var n=0;n<e.length;n++)if(e[n].uid===t)return n;return!e[r]||e[r].uid?-1:r}function ot(t,e){var r=o.isPlainObject(t),n=Array.isArray(t);return r||n?(r&&o.isPlainObject(e)||n&&Array.isArray(e))&&JSON.stringify(t)===JSON.stringify(e):t===e}function st(t,e,r,n){var a,i,l,c=n.getValObject,u=n.flags,h=n.immutable,f=n.inArray,p=n.arrayIndex;function d(){var t=a.editType;f&&-1!==t.indexOf("arraydraw")?o.pushUnique(u.arrays[f],p):(M.update(u,a),"none"!==t&&u.nChanges++,n.transition&&a.anim&&u.nChangesAnim++,(W.test(l)||X.test(l))&&(u.rangesAltered[r[0]]=1),Z.test(l)&&s(e,"_inputDomain").set(null),"datarevision"===i&&(u.newDataRevision=1))}function g(t){return"data_array"===t.valType||t.arrayOk}for(i in t){if(u.calc&&!n.transition)return;var v=t[i],m=e[i],y=r.concat(i);if(l=y.join("."),"_"!==i.charAt(0)&&"function"!=typeof v&&v!==m){if(("tick0"===i||"dtick"===i)&&"geo"!==r[0]){var x=e.tickmode;if("auto"===x||"array"===x||!x)continue}if(("range"!==i||!e.autorange)&&("zmin"!==i&&"zmax"!==i||"contourcarpet"!==e.type)&&(a=c(y))&&(!a._compareAsJSON||JSON.stringify(v)!==JSON.stringify(m))){var b,_=a.valType,w=g(a),k=Array.isArray(v),T=Array.isArray(m);if(k&&T){var A="_input_"+i,S=t[A],E=e[A];if(Array.isArray(S)&&S===E)continue}if(void 0===m)w&&k?u.calc=!0:d();else if(a._isLinkedToArray){var L=[],C=!1;f||(u.arrays[i]=L);var P=Math.min(v.length,m.length),O=Math.max(v.length,m.length);if(P!==O){if("arraydraw"!==a.editType){d();continue}C=!0}for(b=0;b<P;b++)st(v[b],m[b],y.concat(b),o.extendFlat({inArray:i,arrayIndex:b},n));if(C)for(b=P;b<O;b++)L.push(b)}else!_&&o.isPlainObject(v)?st(v,m,y,n):w?k&&T?(h&&(u.calc=!0),(h||n.newDataRevision)&&d()):k!==T?u.calc=!0:d():k&&T&&v.length===m.length&&String(v)===String(m)||d()}}}for(i in e)if(!(i in t||"_"===i.charAt(0)||"function"==typeof e[i])){if(g(a=c(r.concat(i)))&&Array.isArray(e[i]))return void(u.calc=!0);d()}}function lt(t){var e=n.select(t),r=t._fullLayout;if(r._container=e.selectAll(".plot-container").data([0]),r._container.enter().insert("div",":first-child").classed("plot-container",!0).classed("plotly",!0),r._paperdiv=r._container.selectAll(".svg-container").data([0]),r._paperdiv.enter().append("div").classed("svg-container",!0).style("position","relative"),r._glcontainer=r._paperdiv.selectAll(".gl-container").data([{}]),r._glcontainer.enter().append("div").classed("gl-container",!0),r._paperdiv.selectAll(".main-svg").remove(),r._paperdiv.select(".modebar-container").remove(),r._paper=r._paperdiv.insert("svg",":first-child").classed("main-svg",!0),r._toppaper=r._paperdiv.append("svg").classed("main-svg",!0),r._modebardiv=r._paperdiv.append("div"),r._hoverpaper=r._paperdiv.append("svg").classed("main-svg",!0),!r._uid){var a={};n.selectAll("defs").each(function(){this.id&&(a[this.id.split("-")[1]]=1)}),r._uid=o.randstr(a)}r._paperdiv.selectAll(".main-svg").attr(y.svgAttrs),r._defs=r._paper.append("defs").attr("id","defs-"+r._uid),r._clips=r._defs.append("g").classed("clips",!0),r._topdefs=r._toppaper.append("defs").attr("id","topdefs-"+r._uid),r._topclips=r._topdefs.append("g").classed("clips",!0),r._bgLayer=r._paper.append("g").classed("bglayer",!0),r._draggers=r._paper.append("g").classed("draglayer",!0);var i=r._paper.append("g").classed("layer-below",!0);r._imageLowerLayer=i.append("g").classed("imagelayer",!0),r._shapeLowerLayer=i.append("g").classed("shapelayer",!0),r._cartesianlayer=r._paper.append("g").classed("cartesianlayer",!0),r._polarlayer=r._paper.append("g").classed("polarlayer",!0),r._ternarylayer=r._paper.append("g").classed("ternarylayer",!0),r._geolayer=r._paper.append("g").classed("geolayer",!0),r._funnelarealayer=r._paper.append("g").classed("funnelarealayer",!0),r._pielayer=r._paper.append("g").classed("pielayer",!0),r._treemaplayer=r._paper.append("g").classed("treemaplayer",!0),r._sunburstlayer=r._paper.append("g").classed("sunburstlayer",!0),r._indicatorlayer=r._toppaper.append("g").classed("indicatorlayer",!0),r._glimages=r._paper.append("g").classed("glimages",!0);var s=r._toppaper.append("g").classed("layer-above",!0);r._imageUpperLayer=s.append("g").classed("imagelayer",!0),r._shapeUpperLayer=s.append("g").classed("shapelayer",!0),r._infolayer=r._toppaper.append("g").classed("infolayer",!0),r._menulayer=r._toppaper.append("g").classed("menulayer",!0),r._zoomlayer=r._toppaper.append("g").classed("zoomlayer",!0),r._hoverlayer=r._hoverpaper.append("g").classed("hoverlayer",!0),r._modebardiv.classed("modebar-container",!0).style("position","absolute").style("top","0px").style("right","0px"),t.emit("plotly_framework")}r.animate=function(t,e,r){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error("This element is not a Plotly plot: "+t+". It's likely that you've failed to create a plot before animating it. For more details, see https://plotly.com/javascript/animations/");var n=t._transitionData;n._frameQueue||(n._frameQueue=[]);var a=(r=f.supplyAnimationDefaults(r)).transition,i=r.frame;function s(t){return Array.isArray(a)?t>=a.length?a[0]:a[t]:a}function l(t){return Array.isArray(i)?t>=i.length?i[0]:i[t]:i}function c(t,e){var r=0;return function(){if(t&&++r===e)return t()}}return void 0===n._frameWaitingCnt&&(n._frameWaitingCnt=0),new Promise(function(i,u){function h(){n._currentFrame&&n._currentFrame.onComplete&&n._currentFrame.onComplete();var e=n._currentFrame=n._frameQueue.shift();if(e){var r=e.name?e.name.toString():null;t._fullLayout._currentFrame=r,n._lastFrameAt=Date.now(),n._timeToNext=e.frameOpts.duration,f.transition(t,e.frame.data,e.frame.layout,k.coerceTraceIndices(t,e.frame.traces),e.frameOpts,e.transitionOpts).then(function(){e.onComplete&&e.onComplete()}),t.emit("plotly_animatingframe",{name:r,frame:e.frame,animation:{frame:e.frameOpts,transition:e.transitionOpts}})}else t.emit("plotly_animated"),window.cancelAnimationFrame(n._animationRaf),n._animationRaf=null}function p(){t.emit("plotly_animating"),n._lastFrameAt=-1/0,n._timeToNext=0,n._runningTransitions=0,n._currentFrame=null;var e=function(){n._animationRaf=window.requestAnimationFrame(e),Date.now()-n._lastFrameAt>n._timeToNext&&h()};e()}var d,g,v=0;function m(t){return Array.isArray(a)?v>=a.length?t.transitionOpts=a[v]:t.transitionOpts=a[0]:t.transitionOpts=a,v++,t}var y=[],x=null==e,b=Array.isArray(e);if(x||b||!o.isPlainObject(e)){if(x||-1!==["string","number"].indexOf(typeof e))for(d=0;d<n._frames.length;d++)(g=n._frames[d])&&(x||String(g.group)===String(e))&&y.push({type:"byname",name:String(g.name),data:m({name:g.name})});else if(b)for(d=0;d<e.length;d++){var _=e[d];-1!==["number","string"].indexOf(typeof _)?(_=String(_),y.push({type:"byname",name:_,data:m({name:_})})):o.isPlainObject(_)&&y.push({type:"object",data:m(o.extendFlat({},_))})}}else y.push({type:"object",data:m(o.extendFlat({},e))});for(d=0;d<y.length;d++)if("byname"===(g=y[d]).type&&!n._frameHash[g.data.name])return o.warn('animate failure: frame not found: "'+g.data.name+'"'),void u();-1!==["next","immediate"].indexOf(r.mode)&&function(){if(0!==n._frameQueue.length){for(;n._frameQueue.length;){var e=n._frameQueue.pop();e.onInterrupt&&e.onInterrupt()}t.emit("plotly_animationinterrupted",[])}}(),"reverse"===r.direction&&y.reverse();var w=t._fullLayout._currentFrame;if(w&&r.fromcurrent){var T=-1;for(d=0;d<y.length;d++)if("byname"===(g=y[d]).type&&g.name===w){T=d;break}if(T>0&&T<y.length-1){var M=[];for(d=0;d<y.length;d++)g=y[d],("byname"!==y[d].type||d>T)&&M.push(g);y=M}}y.length>0?function(e){if(0!==e.length){for(var a=0;a<e.length;a++){var o;o="byname"===e[a].type?f.computeFrame(t,e[a].name):e[a].data;var h=l(a),d=s(a);d.duration=Math.min(d.duration,h.duration);var g={frame:o,name:e[a].name,frameOpts:h,transitionOpts:d};a===e.length-1&&(g.onComplete=c(i,2),g.onInterrupt=u),n._frameQueue.push(g)}"immediate"===r.mode&&(n._lastFrameAt=-1/0),n._animationRaf||p()}}(y):(t.emit("plotly_animated"),i())})},r.addFrames=function(t,e,r){if(t=o.getGraphDiv(t),null==e)return Promise.resolve();if(!o.isPlotDiv(t))throw new Error("This element is not a Plotly plot: "+t+". It's likely that you've failed to create a plot before adding frames. For more details, see https://plotly.com/javascript/animations/");var n,a,i,s,l=t._transitionData._frames,u=t._transitionData._frameHash;if(!Array.isArray(e))throw new Error("addFrames failure: frameList must be an Array of frame definitions"+e);var h=l.length+2*e.length,p=[],d={};for(n=e.length-1;n>=0;n--)if(o.isPlainObject(e[n])){var g=e[n].name,v=(u[g]||d[g]||{}).name,m=e[n].name,y=u[v]||d[v];v&&m&&"number"==typeof m&&y&&S<E&&(S++,o.warn('addFrames: overwriting frame "'+(u[v]||d[v]).name+'" with a frame whose name of type "number" also equates to "'+v+'". This is valid but may potentially lead to unexpected behavior since all plotly.js frame names are stored internally as strings.'),S===E&&o.warn("addFrames: This API call has yielded too many of these warnings. For the rest of this call, further warnings about numeric frame names will be suppressed.")),d[g]={name:g},p.push({frame:f.supplyFrameDefaults(e[n]),index:r&&void 0!==r[n]&&null!==r[n]?r[n]:h+n})}p.sort(function(t,e){return t.index>e.index?-1:t.index<e.index?1:0});var x=[],b=[],_=l.length;for(n=p.length-1;n>=0;n--){if("number"==typeof(a=p[n].frame).name&&o.warn("Warning: addFrames accepts frames with numeric names, but the numbers areimplicitly cast to strings"),!a.name)for(;u[a.name="frame "+t._transitionData._counter++];);if(u[a.name]){for(i=0;i<l.length&&(l[i]||{}).name!==a.name;i++);x.push({type:"replace",index:i,value:a}),b.unshift({type:"replace",index:i,value:l[i]})}else s=Math.max(0,Math.min(p[n].index,_)),x.push({type:"insert",index:s,value:a}),b.unshift({type:"delete",index:s}),_++}var w=f.modifyFrames,k=f.modifyFrames,T=[t,b],M=[t,x];return c&&c.add(t,w,T,k,M),f.modifyFrames(t,x)},r.deleteFrames=function(t,e){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error("This element is not a Plotly plot: "+t);var r,n,a=t._transitionData._frames,i=[],s=[];if(!e)for(e=[],r=0;r<a.length;r++)e.push(r);for((e=e.slice()).sort(),r=e.length-1;r>=0;r--)n=e[r],i.push({type:"delete",index:n}),s.unshift({type:"insert",index:n,value:a[n]});var l=f.modifyFrames,u=f.modifyFrames,h=[t,s],p=[t,i];return c&&c.add(t,l,h,u,p),f.modifyFrames(t,i)},r.addTraces=function t(e,n,a){e=o.getGraphDiv(e);var i,s,l=[],u=r.deleteTraces,h=t,f=[e,l],p=[e,n];for(function(t,e,r){var n,a;if(!Array.isArray(t.data))throw new Error("gd.data must be an array.");if("undefined"==typeof e)throw new Error("traces must be defined.");for(Array.isArray(e)||(e=[e]),n=0;n<e.length;n++)if("object"!=typeof(a=e[n])||Array.isArray(a)||null===a)throw new Error("all values in traces array must be non-array objects");if("undefined"==typeof r||Array.isArray(r)||(r=[r]),"undefined"!=typeof r&&r.length!==e.length)throw new Error("if indices is specified, traces.length must equal indices.length")}(e,n,a),Array.isArray(n)||(n=[n]),n=n.map(function(t){return o.extendFlat({},t)}),k.cleanData(n),i=0;i<n.length;i++)e.data.push(n[i]);for(i=0;i<n.length;i++)l.push(-n.length+i);if("undefined"==typeof a)return s=r.redraw(e),c.add(e,u,f,h,p),s;Array.isArray(a)||(a=[a]);try{D(e,l,a)}catch(t){throw e.data.splice(e.data.length-n.length,n.length),t}return c.startSequence(e),c.add(e,u,f,h,p),s=r.moveTraces(e,l,a),c.stopSequence(e),s},r.deleteTraces=function t(e,n){e=o.getGraphDiv(e);var a,i,s=[],l=r.addTraces,u=t,h=[e,s,n],f=[e,n];if("undefined"==typeof n)throw new Error("indices must be an integer or array of integers.");for(Array.isArray(n)||(n=[n]),I(e,n,"indices"),(n=z(n,e.data.length-1)).sort(o.sorterDes),a=0;a<n.length;a+=1)i=e.data.splice(n[a],1)[0],s.push(i);var p=r.redraw(e);return c.add(e,l,h,u,f),p},r.extendTraces=function t(e,n,a,i){var s=R(e=o.getGraphDiv(e),n,a,i,function(t,e,r){var n,a;if(o.isTypedArray(t))if(r<0){var i=new t.constructor(0),s=F(t,e);r<0?(n=s,a=i):(n=i,a=s)}else if(n=new t.constructor(r),a=new t.constructor(t.length+e.length-r),r===e.length)n.set(e),a.set(t);else if(r<e.length){var l=e.length-r;n.set(e.subarray(l)),a.set(t),a.set(e.subarray(0,l),t.length)}else{var c=r-e.length,u=t.length-c;n.set(t.subarray(u)),n.set(e,c),a.set(t.subarray(0,u))}else n=t.concat(e),a=r>=0&&r<n.length?n.splice(0,n.length-r):[];return[n,a]}),l=r.redraw(e),u=[e,s.update,a,s.maxPoints];return c.add(e,r.prependTraces,u,t,arguments),l},r.moveTraces=function t(e,n,a){var i,s=[],l=[],u=t,h=t,f=[e=o.getGraphDiv(e),a,n],p=[e,n,a];if(D(e,n,a),n=Array.isArray(n)?n:[n],"undefined"==typeof a)for(a=[],i=0;i<n.length;i++)a.push(-n.length+i);for(a=Array.isArray(a)?a:[a],n=z(n,e.data.length-1),a=z(a,e.data.length-1),i=0;i<e.data.length;i++)-1===n.indexOf(i)&&s.push(e.data[i]);for(i=0;i<n.length;i++)l.push({newIndex:a[i],trace:e.data[n[i]]});for(l.sort(function(t,e){return t.newIndex-e.newIndex}),i=0;i<l.length;i+=1)s.splice(l[i].newIndex,0,l[i].trace);e.data=s;var d=r.redraw(e);return c.add(e,u,f,h,p),d},r.prependTraces=function t(e,n,a,i){var s=R(e=o.getGraphDiv(e),n,a,i,function(t,e,r){var n,a;if(o.isTypedArray(t))if(r<=0){var i=new t.constructor(0),s=F(e,t);r<0?(n=s,a=i):(n=i,a=s)}else if(n=new t.constructor(r),a=new t.constructor(t.length+e.length-r),r===e.length)n.set(e),a.set(t);else if(r<e.length){var l=e.length-r;n.set(e.subarray(0,l)),a.set(e.subarray(l)),a.set(t,l)}else{var c=r-e.length;n.set(e),n.set(t.subarray(0,c),e.length),a.set(t.subarray(c))}else n=e.concat(t),a=r>=0&&r<n.length?n.splice(r,n.length):[];return[n,a]}),l=r.redraw(e),u=[e,s.update,a,s.maxPoints];return c.add(e,r.extendTraces,u,t,arguments),l},r.newPlot=function(t,e,n,a){return t=o.getGraphDiv(t),f.cleanPlot([],{},t._fullData||[],t._fullLayout||{}),f.purge(t),r.plot(t,e,n,a)},r.plot=function(t,e,a,i){var s;if(t=o.getGraphDiv(t),l.init(t),o.isPlainObject(e)){var c=e;e=c.data,a=c.layout,i=c.config,s=c.frames}if(!1===l.triggerHandler(t,"plotly_beforeplot",[e,a,i]))return Promise.reject();e||a||o.isPlotDiv(t)||o.warn("Calling Plotly.plot as if redrawing but this container doesn't yet have a plot.",t),O(t,i),a||(a={}),n.select(t).classed("js-plotly-plot",!0),g.makeTester(),Array.isArray(t._promises)||(t._promises=[]);var h=0===(t.data||[]).length&&Array.isArray(e);Array.isArray(e)&&(k.cleanData(e),h?t.data=e:t.data.push.apply(t.data,e),t.empty=!1),t.layout&&!h||(t.layout=k.cleanLayout(a)),f.supplyDefaults(t);var v=t._fullLayout,y=v._has("cartesian");if(!v._has("polar")&&e&&e[0]&&e[0].r)return o.log("Legacy polar charts are deprecated!"),function(t,e,r){var a=n.select(t).selectAll(".plot-container").data([0]);a.enter().insert("div",":first-child").classed("plot-container plotly",!0);var i=a.selectAll(".svg-container").data([0]);i.enter().append("div").classed("svg-container",!0).style("position","relative"),i.html(""),e&&(t.data=e),r&&(t.layout=r),p.manager.fillLayout(t),i.style({width:t._fullLayout.width+"px",height:t._fullLayout.height+"px"}),t.framework=p.manager.framework(t),t.framework({data:t.data,layout:t.layout},i.node()),t.framework.setUndoPoint();var s=t.framework.svg(),l=1,c=t._fullLayout.title?t._fullLayout.title.text:"";""!==c&&c||(l=0);var u=function(){this.call(x.convertToTspans,t)},h=s.select(".title-group text").call(u);if(t._context.edits.titleText){var d=o._(t,"Click to enter Plot title");c&&c!==d||(l=.2,h.attr({"data-unformatted":d}).text(d).style({opacity:l}).on("mouseover.opacity",function(){n.select(this).transition().duration(100).style("opacity",1)}).on("mouseout.opacity",function(){n.select(this).transition().duration(1e3).style("opacity",0)}));var g=function(){this.call(x.makeEditable,{gd:t}).on("edit",function(e){t.framework({layout:{title:{text:e}}}),this.text(e).call(u),this.call(g)}).on("cancel",function(){var t=this.attr("data-unformatted");this.text(t).call(u)})};h.call(g)}return t._context.setBackground(t,t._fullLayout.paper_bgcolor),f.addLinks(t),Promise.resolve()}(t,e,a);v._replotting=!0,h&&lt(t),t.framework!==lt&&(t.framework=lt,lt(t)),g.initGradients(t),h&&d.saveShowSpikeInitial(t);var b=!t.calcdata||t.calcdata.length!==(t._fullData||[]).length;b&&f.doCalcdata(t);for(var _=0;_<t.calcdata.length;_++)t.calcdata[_][0].trace=t._fullData[_];t._context.responsive?t._responsiveChartHandler||(t._responsiveChartHandler=function(){o.isHidden(t)||f.resize(t)},window.addEventListener("resize",t._responsiveChartHandler)):o.clearResponsive(t);var w=o.extendFlat({},v._size),M=0;function A(){if(f.clearAutoMarginIds(t),T.drawMarginPushers(t),d.allowAutoMargin(t),v._has("pie"))for(var e=t._fullData,r=0;r<e.length;r++){var n=e[r];"pie"===n.type&&n.automargin&&f.allowAutoMargin(t,"pie."+n.uid+".automargin")}return f.doAutoMargin(t),f.previousPromises(t)}function S(){t._transitioning||(T.doAutoRangeAndConstraints(t),h&&d.saveRangeInitial(t),u.getComponentMethod("rangeslider","calcAutorange")(t))}var E=[f.previousPromises,function(){if(s)return r.addFrames(t,s)},function e(){for(var r=v._basePlotModules,n=0;n<r.length;n++)r[n].drawFramework&&r[n].drawFramework(t);if(!v._glcanvas&&v._has("gl")&&(v._glcanvas=v._glcontainer.selectAll(".gl-canvas").data([{key:"contextLayer",context:!0,pick:!1},{key:"focusLayer",context:!1,pick:!1},{key:"pickLayer",context:!1,pick:!0}],function(t){return t.key}),v._glcanvas.enter().append("canvas").attr("class",function(t){return"gl-canvas gl-canvas-"+t.key.replace("Layer","")}).style({position:"absolute",top:0,left:0,overflow:"visible","pointer-events":"none"})),v._glcanvas){v._glcanvas.attr("width",v.width).attr("height",v.height);var a=v._glcanvas.data()[0].regl;if(a&&(Math.floor(v.width)!==a._gl.drawingBufferWidth||Math.floor(v.height)!==a._gl.drawingBufferHeight)){var i="WebGL context buffer and canvas dimensions do not match due to browser/WebGL bug.";if(!M)return o.log(i+" Clearing graph and plotting again."),f.cleanPlot([],{},t._fullData,v),f.supplyDefaults(t),v=t._fullLayout,f.doCalcdata(t),M++,e();o.error(i)}}return"h"===v.modebar.orientation?v._modebardiv.style("height",null).style("width","100%"):v._modebardiv.style("width",null).style("height",v.height+"px"),f.previousPromises(t)},A,function(){if(f.didMarginChange(w,v._size))return o.syncOrAsync([A,T.layoutStyles],t)}];y&&E.push(function(){if(b)return o.syncOrAsync([u.getComponentMethod("shapes","calcAutorange"),u.getComponentMethod("annotations","calcAutorange"),S],t);S()}),E.push(T.layoutStyles),y&&E.push(function(){return d.draw(t,h?"":"redraw")}),E.push(T.drawData,T.finalDraw,m,f.addLinks,f.rehover,f.redrag,f.doAutoMargin,f.previousPromises);var C=o.syncOrAsync(E,t);return C&&C.then||(C=Promise.resolve()),C.then(function(){return L(t),t})},r.purge=function(t){var e=(t=o.getGraphDiv(t))._fullLayout||{},r=t._fullData||[];return f.cleanPlot([],{},r,e),f.purge(t),l.purge(t),e._container&&e._container.remove(),delete t._context,t},r.react=function(t,e,n,a){var i,l;t=o.getGraphDiv(t),k.clearPromiseQueue(t);var c=t._fullData,p=t._fullLayout;if(o.isPlotDiv(t)&&c&&p){if(o.isPlainObject(e)){var d=e;e=d.data,n=d.layout,a=d.config,i=d.frames}var g=!1;if(a){var v=o.extendDeep({},t._context);t._context=void 0,O(t,a),g=function t(e,r){var n;for(n in e)if("_"!==n.charAt(0)){var a=e[n],i=r[n];if(a!==i)if(o.isPlainObject(a)&&o.isPlainObject(i)){if(t(a,i))return!0}else{if(!Array.isArray(a)||!Array.isArray(i))return!0;if(a.length!==i.length)return!0;for(var s=0;s<a.length;s++)if(a[s]!==i[s]){if(!o.isPlainObject(a[s])||!o.isPlainObject(i[s]))return!0;if(t(a[s],i[s]))return!0}}}}(v,t._context)}t.data=e||[],k.cleanData(t.data),t.layout=n||{},k.cleanLayout(t.layout),function(t,e,r,n){var a,i,l,c,u,h,f,p,d=n._preGUI,g=[],v={};for(a in d){if(u=rt(a,tt)){if(i=u.attr||u.head+".uirevision",(c=(l=s(n,i).get())&&nt(i,e))&&c===l&&(null===(h=d[a])&&(h=void 0),ot(p=(f=s(e,a)).get(),h))){void 0===p&&"autorange"===a.substr(a.length-9)&&g.push(a.substr(0,a.length-10)),f.set(N(s(n,a).get()));continue}}else o.warn("unrecognized GUI edit: "+a);delete d[a],"range["===a.substr(a.length-8,6)&&(v[a.substr(0,a.length-9)]=1)}for(var m=0;m<g.length;m++){var y=g[m];if(v[y]){var x=s(e,y).get();x&&delete x.autorange}}var b=n._tracePreGUI;for(var _ in b){var w,k=b[_],T=null;for(a in k){if(!T){var M=at(_,r);if(M<0){delete b[_];break}var A=it(_,t,(w=r[M]._fullInput).index);if(A<0){delete b[_];break}T=t[A]}if(u=rt(a,et)){if(u.attr?c=(l=s(n,u.attr).get())&&nt(u.attr,e):(l=w.uirevision,void 0===(c=T.uirevision)&&(c=e.uirevision)),c&&c===l&&(null===(h=k[a])&&(h=void 0),ot(p=(f=s(T,a)).get(),h))){f.set(N(s(w,a).get()));continue}}else o.warn("unrecognized GUI edit: "+a+" in trace uid "+_);delete k[a]}}}(t.data,t.layout,c,p),f.supplyDefaults(t,{skipUpdateCalc:!0});var m=t._fullData,y=t._fullLayout,x=void 0===y.datarevision,b=y.transition,_=function(t,e,r,n,a){var i=M.layoutFlags();return i.arrays={},i.rangesAltered={},i.nChanges=0,i.nChangesAnim=0,st(e,r,[],{getValObject:function(t){return h.getLayoutValObject(r,t)},flags:i,immutable:n,transition:a,gd:t}),(i.plot||i.calc)&&(i.layoutReplot=!0),a&&i.nChanges&&i.nChangesAnim&&(i.anim=i.nChanges===i.nChangesAnim?"all":"some"),i}(t,p,y,x,b),w=_.newDataRevision,A=function(t,e,r,n,a,i){var o=e.length===r.length;if(!a&&!o)return{fullReplot:!0,calc:!0};var s,l,c=M.traceFlags();c.arrays={},c.nChanges=0,c.nChangesAnim=0;var u={getValObject:function(t){var e=h.getTraceValObject(l,t);return!l._module.animatable&&e.anim&&(e.anim=!1),e},flags:c,immutable:n,transition:a,newDataRevision:i,gd:t},p={};for(s=0;s<e.length;s++)if(r[s]){if(l=r[s]._fullInput,f.hasMakesDataTransform(l)&&(l=r[s]),p[l.uid])continue;p[l.uid]=1,st(e[s]._fullInput,l,[],u)}return(c.calc||c.plot)&&(c.fullReplot=!0),a&&c.nChanges&&c.nChangesAnim&&(c.anim=c.nChanges===c.nChangesAnim&&o?"all":"some"),c}(t,c,m,x,b,w);K(t)&&(_.layoutReplot=!0),A.calc||_.calc?t.calcdata=void 0:f.supplyDefaultsUpdateCalc(t.calcdata,m);var S=[];if(i&&(t._transitionData={},f.createTransitionData(t),S.push(function(){return r.addFrames(t,i)})),y.transition&&!g&&(A.anim||_.anim))f.doCalcdata(t),T.doAutoRangeAndConstraints(t),S.push(function(){return f.transitionFromReact(t,A,_,p)});else if(A.fullReplot||_.layoutReplot||g)t._fullLayout._skipDefaults=!0,S.push(r.plot);else{for(var E in _.arrays){var C=_.arrays[E];if(C.length){var P=u.getComponentMethod(E,"drawOne");if(P!==o.noop)for(var z=0;z<C.length;z++)P(t,C[z]);else{var I=u.getComponentMethod(E,"draw");if(I===o.noop)throw new Error("cannot draw components: "+E);I(t)}}}S.push(f.previousPromises),A.style&&S.push(T.doTraceStyle),(A.colorbars||_.colorbars)&&S.push(T.doColorBars),_.legend&&S.push(T.doLegend),_.layoutstyle&&S.push(T.layoutStyles),_.axrange&&Y(S),_.ticks&&S.push(T.doTicksRelayout),_.modebar&&S.push(T.doModeBar),_.camera&&S.push(T.doCamera),S.push(L)}S.push(f.rehover,f.redrag),(l=o.syncOrAsync(S,t))&&l.then||(l=Promise.resolve(t))}else l=r.newPlot(t,e,n,a);return l.then(function(){return t.emit("plotly_react",{data:e,layout:n}),t})},r.redraw=function(t){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error("This element is not a Plotly plot: "+t);return k.cleanData(t.data),k.cleanLayout(t.layout),t.calcdata=void 0,r.plot(t).then(function(){return t.emit("plotly_redraw"),t})},r.relayout=H,r.restyle=B,r.setPlotConfig=function(t){return o.extendFlat(_,t)},r.update=Q,r._guiRelayout=$(H),r._guiRestyle=$(B),r._guiUpdate=$(Q),r._storeDirectGUIEdit=function(t,e,r){for(var n in r)V(n,s(t,n).get(),r[n],e)}},{"../components/color":591,"../components/drawing":612,"../constants/xmlns_namespaces":694,"../lib":717,"../lib/events":707,"../lib/queue":732,"../lib/svg_text_utils":741,"../plots/cartesian/axes":765,"../plots/cartesian/constants":771,"../plots/cartesian/graph_interact":774,"../plots/cartesian/select":782,"../plots/plots":826,"../plots/polar/legacy":834,"../registry":846,"./edit_types":748,"./helpers":749,"./manage_arrays":751,"./plot_config":753,"./plot_schema":754,"./subroutines":756,d3:165,"fast-isnumeric":228,"has-hover":411}],753:[function(t,e,r){"use strict";var n={staticPlot:{valType:"boolean",dflt:!1},plotlyServerURL:{valType:"string",dflt:""},editable:{valType:"boolean",dflt:!1},edits:{annotationPosition:{valType:"boolean",dflt:!1},annotationTail:{valType:"boolean",dflt:!1},annotationText:{valType:"boolean",dflt:!1},axisTitleText:{valType:"boolean",dflt:!1},colorbarPosition:{valType:"boolean",dflt:!1},colorbarTitleText:{valType:"boolean",dflt:!1},legendPosition:{valType:"boolean",dflt:!1},legendText:{valType:"boolean",dflt:!1},shapePosition:{valType:"boolean",dflt:!1},titleText:{valType:"boolean",dflt:!1}},autosizable:{valType:"boolean",dflt:!1},responsive:{valType:"boolean",dflt:!1},fillFrame:{valType:"boolean",dflt:!1},frameMargins:{valType:"number",dflt:0,min:0,max:.5},scrollZoom:{valType:"flaglist",flags:["cartesian","gl3d","geo","mapbox"],extras:[!0,!1],dflt:"gl3d+geo+mapbox"},doubleClick:{valType:"enumerated",values:[!1,"reset","autosize","reset+autosize"],dflt:"reset+autosize"},doubleClickDelay:{valType:"number",dflt:300,min:0},showAxisDragHandles:{valType:"boolean",dflt:!0},showAxisRangeEntryBoxes:{valType:"boolean",dflt:!0},showTips:{valType:"boolean",dflt:!0},showLink:{valType:"boolean",dflt:!1},linkText:{valType:"string",dflt:"Edit chart",noBlank:!0},sendData:{valType:"boolean",dflt:!0},showSources:{valType:"any",dflt:!1},displayModeBar:{valType:"enumerated",values:["hover",!0,!1],dflt:"hover"},showSendToCloud:{valType:"boolean",dflt:!1},showEditInChartStudio:{valType:"boolean",dflt:!1},modeBarButtonsToRemove:{valType:"any",dflt:[]},modeBarButtonsToAdd:{valType:"any",dflt:[]},modeBarButtons:{valType:"any",dflt:!1},toImageButtonOptions:{valType:"any",dflt:{}},displaylogo:{valType:"boolean",dflt:!0},watermark:{valType:"boolean",dflt:!1},plotGlPixelRatio:{valType:"number",dflt:2,min:1,max:4},setBackground:{valType:"any",dflt:"transparent"},topojsonURL:{valType:"string",noBlank:!0,dflt:"https://cdn.plot.ly/"},mapboxAccessToken:{valType:"string",dflt:null},logging:{valType:"integer",min:0,max:2,dflt:1},notifyOnLogging:{valType:"integer",min:0,max:2,dflt:0},queueLength:{valType:"integer",min:0,dflt:0},globalTransforms:{valType:"any",dflt:[]},locale:{valType:"string",dflt:"en-US"},locales:{valType:"any",dflt:{}}},a={};!function t(e,r){for(var n in e){var a=e[n];a.valType?r[n]=a.dflt:(r[n]||(r[n]={}),t(a,r[n]))}}(n,a),e.exports={configAttributes:n,dfltConfig:a}},{}],754:[function(t,e,r){"use strict";var n=t("../registry"),a=t("../lib"),i=t("../plots/attributes"),o=t("../plots/layout_attributes"),s=t("../plots/frame_attributes"),l=t("../plots/animation_attributes"),c=t("./plot_config").configAttributes,u=t("../plots/polar/legacy/area_attributes"),h=t("../plots/polar/legacy/axis_attributes"),f=t("./edit_types"),p=a.extendFlat,d=a.extendDeepAll,g=a.isPlainObject,v=a.isArrayOrTypedArray,m=a.nestedProperty,y=a.valObjectMeta,x="_isSubplotObj",b="_isLinkedToArray",_=[x,b,"_arrayAttrRegexps","_deprecated"];function w(t,e,r){if(!t)return!1;if(t._isLinkedToArray)if(k(e[r]))r++;else if(r<e.length)return!1;for(;r<e.length;r++){var n=t[e[r]];if(!g(n))break;if(t=n,r===e.length-1)break;if(t._isLinkedToArray){if(!k(e[++r]))return!1}else if("info_array"===t.valType){var a=e[++r];if(!k(a))return!1;var i=t.items;if(Array.isArray(i)){if(a>=i.length)return!1;if(2===t.dimensions){if(r++,e.length===r)return t;var o=e[r];if(!k(o))return!1;t=i[a][o]}else t=i[a]}else t=i}}return t}function k(t){return t===Math.round(t)&&t>=0}function T(){var t,e,r={};for(t in d(r,o),n.subplotsRegistry){if((e=n.subplotsRegistry[t]).layoutAttributes)if(Array.isArray(e.attr))for(var a=0;a<e.attr.length;a++)S(r,e,e.attr[a]);else S(r,e,"subplot"===e.attr?e.name:e.attr)}for(t in r=function(t){return p(t,{radialaxis:h.radialaxis,angularaxis:h.angularaxis}),p(t,h.layout),t}(r),n.componentsRegistry){var i=(e=n.componentsRegistry[t]).schema;if(i&&(i.subplots||i.layout)){var s=i.subplots;if(s&&s.xaxis&&!s.yaxis)for(var l in s.xaxis)delete r.yaxis[l]}else"colorscale"===e.name?d(r,e.layoutAttributes):e.layoutAttributes&&E(r,e.layoutAttributes,e.name)}return{layoutAttributes:A(r)}}function M(){var t={frames:d({},s)};return A(t),t.frames}function A(t){return function(t){r.crawl(t,function(t,e,n){r.isValObject(t)?"data_array"===t.valType?(t.role="data",n[e+"src"]={valType:"string",editType:"none"}):!0===t.arrayOk&&(n[e+"src"]={valType:"string",editType:"none"}):g(t)&&(t.role="object")})}(t),function(t){r.crawl(t,function(t,e,r){if(!t)return;var n=t[b];if(!n)return;delete t[b],r[e]={items:{}},r[e].items[n]=t,r[e].role="object"})}(t),function(t){!function t(e){for(var r in e)if(g(e[r]))t(e[r]);else if(Array.isArray(e[r]))for(var n=0;n<e[r].length;n++)t(e[r][n]);else e[r]instanceof RegExp&&(e[r]=e[r].toString())}(t)}(t),t}function S(t,e,r){var n=m(t,r),a=d({},e.layoutAttributes);a[x]=!0,n.set(a)}function E(t,e,r){var n=m(t,r);n.set(d(n.get()||{},e))}r.IS_SUBPLOT_OBJ=x,r.IS_LINKED_TO_ARRAY=b,r.DEPRECATED="_deprecated",r.UNDERSCORE_ATTRS=_,r.get=function(){var t={};n.allTypes.concat("area").forEach(function(e){t[e]=function(t){var e,a;"area"===t?(e={attributes:u},a={}):(e=n.modules[t]._module,a=e.basePlotModule);var o={type:null},s=d({},i),l=d({},e.attributes);r.crawl(l,function(t,e,r,n,a){m(s,a).set(void 0),void 0===t&&m(l,a).set(void 0)}),d(o,s),n.traceIs(t,"noOpacity")&&delete o.opacity;n.traceIs(t,"showLegend")||(delete o.showlegend,delete o.legendgroup);n.traceIs(t,"noHover")&&(delete o.hoverinfo,delete o.hoverlabel);e.selectPoints||delete o.selectedpoints;d(o,l),a.attributes&&d(o,a.attributes);o.type=t;var c={meta:e.meta||{},categories:e.categories||{},animatable:Boolean(e.animatable),type:t,attributes:A(o)};if(e.layoutAttributes){var h={};d(h,e.layoutAttributes),c.layoutAttributes=A(h)}e.animatable||r.crawl(c,function(t){r.isValObject(t)&&"anim"in t&&delete t.anim});return c}(e)});var e={};return Object.keys(n.transformsRegistry).forEach(function(t){e[t]=function(t){var e=n.transformsRegistry[t],r=d({},e.attributes);return Object.keys(n.componentsRegistry).forEach(function(e){var a=n.componentsRegistry[e];a.schema&&a.schema.transforms&&a.schema.transforms[t]&&Object.keys(a.schema.transforms[t]).forEach(function(e){E(r,a.schema.transforms[t][e],e)})}),{attributes:A(r)}}(t)}),{defs:{valObjects:y,metaKeys:_.concat(["description","role","editType","impliedEdits"]),editType:{traces:f.traces,layout:f.layout},impliedEdits:{}},traces:t,layout:T(),transforms:e,frames:M(),animation:A(l),config:A(c)}},r.crawl=function(t,e,n,a){var i=n||0;a=a||"",Object.keys(t).forEach(function(n){var o=t[n];if(-1===_.indexOf(n)){var s=(a?a+".":"")+n;e(o,n,t,i,s),r.isValObject(o)||g(o)&&"impliedEdits"!==n&&r.crawl(o,e,i+1,s)}})},r.isValObject=function(t){return t&&void 0!==t.valType},r.findArrayAttributes=function(t){var e,n,a=[],o=[],s=[];function l(t,r,i,l){o=o.slice(0,l).concat([r]),s=s.slice(0,l).concat([t&&t._isLinkedToArray]),t&&("data_array"===t.valType||!0===t.arrayOk)&&!("colorbar"===o[l-1]&&("ticktext"===r||"tickvals"===r))&&function t(e,r,i){var l=e[o[r]];var c=i+o[r];if(r===o.length-1)v(l)&&a.push(n+c);else if(s[r]){if(Array.isArray(l))for(var u=0;u<l.length;u++)g(l[u])&&t(l[u],r+1,c+"["+u+"].")}else g(l)&&t(l,r+1,c+".")}(e,0,"")}e=t,n="",r.crawl(i,l),t._module&&t._module.attributes&&r.crawl(t._module.attributes,l);var c=t.transforms;if(c)for(var u=0;u<c.length;u++){var h=c[u],f=h._module;f&&(n="transforms["+u+"].",e=h,r.crawl(f.attributes,l))}return a},r.getTraceValObject=function(t,e){var r,a,o=e[0],s=1;if("transforms"===o){if(1===e.length)return i.transforms;var l=t.transforms;if(!Array.isArray(l)||!l.length)return!1;var c=e[1];if(!k(c)||c>=l.length)return!1;a=(r=(n.transformsRegistry[l[c].type]||{}).attributes)&&r[e[2]],s=3}else if("area"===t.type)a=u[o];else{var h=t._module;if(h||(h=(n.modules[t.type||i.type.dflt]||{})._module),!h)return!1;if(!(a=(r=h.attributes)&&r[o])){var f=h.basePlotModule;f&&f.attributes&&(a=f.attributes[o])}a||(a=i[o])}return w(a,e,s)},r.getLayoutValObject=function(t,e){return w(function(t,e){var r,a,i,s,l=t._basePlotModules;if(l){var c;for(r=0;r<l.length;r++){if((i=l[r]).attrRegex&&i.attrRegex.test(e)){if(i.layoutAttrOverrides)return i.layoutAttrOverrides;!c&&i.layoutAttributes&&(c=i.layoutAttributes)}var u=i.baseLayoutAttrOverrides;if(u&&e in u)return u[e]}if(c)return c}var f=t._modules;if(f)for(r=0;r<f.length;r++)if((s=f[r].layoutAttributes)&&e in s)return s[e];for(a in n.componentsRegistry){if("colorscale"===(i=n.componentsRegistry[a]).name&&0===e.indexOf("coloraxis"))return i.layoutAttributes[e];if(!i.schema&&e===i.name)return i.layoutAttributes}if(e in o)return o[e];if("radialaxis"===e||"angularaxis"===e)return h[e];return h.layout[e]||!1}(t,e[0]),e,1)}},{"../lib":717,"../plots/animation_attributes":760,"../plots/attributes":762,"../plots/frame_attributes":792,"../plots/layout_attributes":817,"../plots/polar/legacy/area_attributes":832,"../plots/polar/legacy/axis_attributes":833,"../registry":846,"./edit_types":748,"./plot_config":753}],755:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../plots/attributes"),i="templateitemname",o={name:{valType:"string",editType:"none"}};function s(t){return t&&"string"==typeof t}function l(t){var e=t.length-1;return"s"!==t.charAt(e)&&n.warn("bad argument to arrayDefaultKey: "+t),t.substr(0,t.length-1)+"defaults"}o[i]={valType:"string",editType:"calc"},r.templatedArray=function(t,e){return e._isLinkedToArray=t,e.name=o.name,e[i]=o[i],e},r.traceTemplater=function(t){var e,r,i={};for(e in t)r=t[e],Array.isArray(r)&&r.length&&(i[e]=0);return{newTrace:function(o){var s={type:e=n.coerce(o,{},a,"type"),_template:null};if(e in i){r=t[e];var l=i[e]%r.length;i[e]++,s._template=r[l]}return s}}},r.newContainer=function(t,e,r){var a=t._template,i=a&&(a[e]||r&&a[r]);return n.isPlainObject(i)||(i=null),t[e]={_template:i}},r.arrayTemplater=function(t,e,r){var n=t._template,a=n&&n[l(e)],o=n&&n[e];Array.isArray(o)&&o.length||(o=[]);var c={};return{newItem:function(t){var e={name:t.name,_input:t},n=e[i]=t[i];if(!s(n))return e._template=a,e;for(var l=0;l<o.length;l++){var u=o[l];if(u.name===n)return c[n]=1,e._template=u,e}return e[r]=t[r]||!1,e._template=!1,e},defaultItems:function(){for(var t=[],e=0;e<o.length;e++){var r=o[e],n=r.name;if(s(n)&&!c[n]){var a={_template:r,name:n,_input:{_templateitemname:n}};a[i]=r[i],t.push(a),c[n]=1}}return t}}},r.arrayDefaultKey=l,r.arrayEditor=function(t,e,r){var a=(n.nestedProperty(t,e).get()||[]).length,o=r._index,s=o>=a&&(r._input||{})._templateitemname;s&&(o=a);var l,c=e+"["+o+"]";function u(){l={},s&&(l[c]={},l[c][i]=s)}function h(t,e){s?n.nestedProperty(l[c],t).set(e):l[c+"."+t]=e}function f(){var t=l;return u(),t}return u(),{modifyBase:function(t,e){l[t]=e},modifyItem:h,getUpdateObj:f,applyUpdate:function(e,r){e&&h(e,r);var a=f();for(var i in a)n.nestedProperty(t,i).set(a[i])}}}},{"../lib":717,"../plots/attributes":762}],756:[function(t,e,r){"use strict";var n=t("d3"),a=t("../registry"),i=t("../plots/plots"),o=t("../lib"),s=t("../lib/clear_gl_canvases"),l=t("../components/color"),c=t("../components/drawing"),u=t("../components/titles"),h=t("../components/modebar"),f=t("../plots/cartesian/axes"),p=t("../constants/alignment"),d=t("../plots/cartesian/constraints"),g=d.enforce,v=d.clean,m=t("../plots/cartesian/autorange").doAutoRange,y="start",x="middle",b="end";function _(t,e,r){for(var n=0;n<r.length;n++){var a=r[n][0],i=r[n][1];if(!(a[0]>=t[1]||a[1]<=t[0])&&(i[0]<e[1]&&i[1]>e[0]))return!0}return!1}function w(t){var e,a,s,u,d,g,v=t._fullLayout,m=v._size,y=m.p,x=f.list(t,"",!0);if(v._paperdiv.style({width:t._context.responsive&&v.autosize&&!t._context._hasZeroWidth&&!t.layout.width?"100%":v.width+"px",height:t._context.responsive&&v.autosize&&!t._context._hasZeroHeight&&!t.layout.height?"100%":v.height+"px"}).selectAll(".main-svg").call(c.setSize,v.width,v.height),t._context.setBackground(t,v.paper_bgcolor),r.drawMainTitle(t),h.manage(t),!v._has("cartesian"))return i.previousPromises(t);function b(t,e,r){var n=t._lw/2;return"x"===t._id.charAt(0)?e?"top"===r?e._offset-y-n:e._offset+e._length+y+n:m.t+m.h*(1-(t.position||0))+n%1:e?"right"===r?e._offset+e._length+y+n:e._offset-y-n:m.l+m.w*(t.position||0)+n%1}for(e=0;e<x.length;e++){var w=(u=x[e])._anchorAxis;u._linepositions={},u._lw=c.crispRound(t,u.linewidth,1),u._mainLinePosition=b(u,w,u.side),u._mainMirrorPosition=u.mirror&&w?b(u,w,p.OPPOSITE_SIDE[u.side]):null}var T=[],A=[],S=[],E=1===l.opacity(v.paper_bgcolor)&&1===l.opacity(v.plot_bgcolor)&&v.paper_bgcolor===v.plot_bgcolor;for(a in v._plots)if((s=v._plots[a]).mainplot)s.bg&&s.bg.remove(),s.bg=void 0;else{var L=s.xaxis.domain,C=s.yaxis.domain,P=s.plotgroup;if(_(L,C,S)){var O=P.node(),z=s.bg=o.ensureSingle(P,"rect","bg");O.insertBefore(z.node(),O.childNodes[0]),A.push(a)}else P.select("rect.bg").remove(),S.push([L,C]),E||(T.push(a),A.push(a))}var I,D,R,F,B,N,j,V,U,q,H,G,Y,W=v._bgLayer.selectAll(".bg").data(T);for(W.enter().append("rect").classed("bg",!0),W.exit().remove(),W.each(function(t){v._plots[t].bg=n.select(this)}),e=0;e<A.length;e++)s=v._plots[A[e]],d=s.xaxis,g=s.yaxis,s.bg&&s.bg.call(c.setRect,d._offset-y,g._offset-y,d._length+2*y,g._length+2*y).call(l.fill,v.plot_bgcolor).style("stroke-width",0);if(!v._hasOnlyLargeSploms)for(a in v._plots){s=v._plots[a],d=s.xaxis,g=s.yaxis;var X,Z,J=s.clipId="clip"+v._uid+a+"plot",K=o.ensureSingleById(v._clips,"clipPath",J,function(t){t.classed("plotclip",!0).append("rect")});s.clipRect=K.select("rect").attr({width:d._length,height:g._length}),c.setTranslate(s.plot,d._offset,g._offset),s._hasClipOnAxisFalse?(X=null,Z=J):(X=J,Z=null),c.setClipUrl(s.plot,X,t),s.layerClipId=Z}function Q(t){return"M"+I+","+t+"H"+D}function $(t){return"M"+d._offset+","+t+"h"+d._length}function tt(t){return"M"+t+","+V+"V"+j}function et(t){return"M"+t+","+g._offset+"v"+g._length}function rt(t,e,r){if(!t.showline||a!==t._mainSubplot)return"";if(!t._anchorAxis)return r(t._mainLinePosition);var n=e(t._mainLinePosition);return t.mirror&&(n+=e(t._mainMirrorPosition)),n}for(a in v._plots){s=v._plots[a],d=s.xaxis,g=s.yaxis;var nt="M0,0";k(d,a)&&(B=M(d,"left",g,x),I=d._offset-(B?y+B:0),N=M(d,"right",g,x),D=d._offset+d._length+(N?y+N:0),R=b(d,g,"bottom"),F=b(d,g,"top"),!(Y=!d._anchorAxis||a!==d._mainSubplot)||"allticks"!==d.mirror&&"all"!==d.mirror||(d._linepositions[a]=[R,F]),nt=rt(d,Q,$),Y&&d.showline&&("all"===d.mirror||"allticks"===d.mirror)&&(nt+=Q(R)+Q(F)),s.xlines.style("stroke-width",d._lw+"px").call(l.stroke,d.showline?d.linecolor:"rgba(0,0,0,0)")),s.xlines.attr("d",nt);var at="M0,0";k(g,a)&&(H=M(g,"bottom",d,x),j=g._offset+g._length+(H?y:0),G=M(g,"top",d,x),V=g._offset-(G?y:0),U=b(g,d,"left"),q=b(g,d,"right"),!(Y=!g._anchorAxis||a!==g._mainSubplot)||"allticks"!==g.mirror&&"all"!==g.mirror||(g._linepositions[a]=[U,q]),at=rt(g,tt,et),Y&&g.showline&&("all"===g.mirror||"allticks"===g.mirror)&&(at+=tt(U)+tt(q)),s.ylines.style("stroke-width",g._lw+"px").call(l.stroke,g.showline?g.linecolor:"rgba(0,0,0,0)")),s.ylines.attr("d",at)}return f.makeClipPaths(t),i.previousPromises(t)}function k(t,e){return(t.ticks||t.showline)&&(e===t._mainSubplot||"all"===t.mirror||"allticks"===t.mirror)}function T(t,e,r){if(!r.showline||!r._lw)return!1;if("all"===r.mirror||"allticks"===r.mirror)return!0;var n=r._anchorAxis;if(!n)return!1;var a=p.FROM_BL[e];return r.side===e?n.domain[a]===t.domain[a]:r.mirror&&n.domain[1-a]===t.domain[1-a]}function M(t,e,r,n){if(T(t,e,r))return r._lw;for(var a=0;a<n.length;a++){var i=n[a];if(i._mainAxis===r._mainAxis&&T(t,e,i))return i._lw}return 0}function A(t,e){var r=t.title,n=t._size,a=0;switch(e===y?a=r.pad.l:e===b&&(a=-r.pad.r),r.xref){case"paper":return n.l+n.w*r.x+a;case"container":default:return t.width*r.x+a}}function S(t,e){var r=t.title,n=t._size,a=0;if("0em"!==e&&e?e===p.CAP_SHIFT+"em"&&(a=r.pad.t):a=-r.pad.b,"auto"===r.y)return n.t/2;switch(r.yref){case"paper":return n.t+n.h-n.h*r.y+a;case"container":default:return t.height-t.height*r.y+a}}r.layoutStyles=function(t){return o.syncOrAsync([i.doAutoMargin,w],t)},r.drawMainTitle=function(t){var e=t._fullLayout,r=function(t){var e=t.title,r=x;o.isRightAnchor(e)?r=b:o.isLeftAnchor(e)&&(r=y);return r}(e),n=function(t){var e=t.title,r="0em";o.isTopAnchor(e)?r=p.CAP_SHIFT+"em":o.isMiddleAnchor(e)&&(r=p.MID_SHIFT+"em");return r}(e);u.draw(t,"gtitle",{propContainer:e,propName:"title.text",placeholder:e._dfltTitle.plot,attributes:{x:A(e,r),y:S(e,n),"text-anchor":r,dy:n}})},r.doTraceStyle=function(t){var e,n=t.calcdata,o=[];for(e=0;e<n.length;e++){var l=n[e],c=l[0]||{},u=c.trace||{},h=u._module||{},f=h.arraysToCalcdata;f&&f(l,u);var p=h.editStyle;p&&o.push({fn:p,cd0:c})}if(o.length){for(e=0;e<o.length;e++){var d=o[e];d.fn(t,d.cd0)}s(t),r.redrawReglTraces(t)}return i.style(t),a.getComponentMethod("legend","draw")(t),i.previousPromises(t)},r.doColorBars=function(t){return a.getComponentMethod("colorbar","draw")(t),i.previousPromises(t)},r.layoutReplot=function(t){var e=t.layout;return t.layout=void 0,a.call("plot",t,"",e)},r.doLegend=function(t){return a.getComponentMethod("legend","draw")(t),i.previousPromises(t)},r.doTicksRelayout=function(t){return f.draw(t,"redraw"),t._fullLayout._hasOnlyLargeSploms&&(a.subplotsRegistry.splom.updateGrid(t),s(t),r.redrawReglTraces(t)),r.drawMainTitle(t),i.previousPromises(t)},r.doModeBar=function(t){var e=t._fullLayout;h.manage(t);for(var r=0;r<e._basePlotModules.length;r++){var n=e._basePlotModules[r].updateFx;n&&n(t)}return i.previousPromises(t)},r.doCamera=function(t){for(var e=t._fullLayout,r=e._subplots.gl3d,n=0;n<r.length;n++){var a=e[r[n]];a._scene.setViewport(a)}},r.drawData=function(t){var e=t._fullLayout;s(t);for(var n=e._basePlotModules,o=0;o<n.length;o++)n[o].plot(t);return r.redrawReglTraces(t),i.style(t),a.getComponentMethod("shapes","draw")(t),a.getComponentMethod("annotations","draw")(t),a.getComponentMethod("images","draw")(t),e._replotting=!1,i.previousPromises(t)},r.redrawReglTraces=function(t){var e=t._fullLayout;if(e._has("regl")){var r,n,a=t._fullData,i=[],s=[];for(e._hasOnlyLargeSploms&&e._splomGrid.draw(),r=0;r<a.length;r++){var l=a[r];!0===l.visible&&0!==l._length&&("splom"===l.type?e._splomScenes[l.uid].draw():"scattergl"===l.type?o.pushUnique(i,l.xaxis+l.yaxis):"scatterpolargl"===l.type&&o.pushUnique(s,l.subplot))}for(r=0;r<i.length;r++)(n=e._plots[i[r]])._scene&&n._scene.draw();for(r=0;r<s.length;r++)(n=e[s[r]]._subplot)._scene&&n._scene.draw()}},r.doAutoRangeAndConstraints=function(t){for(var e,r,n=t._fullLayout,a=f.list(t,"",!0),i=n._axisMatchGroups||[],s={},l=0;l<a.length;l++)e=a[l],v(t,e),m(t,e),s[e._id]=1;g(t);t:for(var c=0;c<i.length;c++){var u,h=i[c],p=null;for(u in h)if(s[(e=f.getFromId(t,u))._id]){if(!1===e.autorange)continue t;r=o.simpleMap(e.range,e.r2l),p?p[0]<p[1]?(p[0]=Math.min(p[0],r[0]),p[1]=Math.max(p[1],r[1])):(p[0]=Math.max(p[0],r[0]),p[1]=Math.min(p[1],r[1])):p=r}for(u in h)(e=f.getFromId(t,u)).range=o.simpleMap(p,e.l2r),e._input.range=e.range.slice(),e.setScale()}},r.finalDraw=function(t){a.getComponentMethod("rangeslider","draw")(t),a.getComponentMethod("rangeselector","draw")(t)},r.drawMarginPushers=function(t){a.getComponentMethod("legend","draw")(t),a.getComponentMethod("rangeselector","draw")(t),a.getComponentMethod("sliders","draw")(t),a.getComponentMethod("updatemenus","draw")(t),a.getComponentMethod("colorbar","draw")(t)}},{"../components/color":591,"../components/drawing":612,"../components/modebar":650,"../components/titles":679,"../constants/alignment":686,"../lib":717,"../lib/clear_gl_canvases":702,"../plots/cartesian/autorange":764,"../plots/cartesian/axes":765,"../plots/cartesian/constraints":772,"../plots/plots":826,"../registry":846,d3:165}],757:[function(t,e,r){"use strict";var n=t("../lib"),a=n.isPlainObject,i=t("./plot_schema"),o=t("../plots/plots"),s=t("../plots/attributes"),l=t("./plot_template"),c=t("./plot_config").dfltConfig;function u(t,e){t=n.extendDeep({},t);var r,i,o=Object.keys(t).sort();function s(e,r,n){if(a(r)&&a(e))u(e,r);else if(Array.isArray(r)&&Array.isArray(e)){var o=l.arrayTemplater({_template:t},n);for(i=0;i<r.length;i++){var s=r[i],c=o.newItem(s)._template;c&&u(c,s)}var h=o.defaultItems();for(i=0;i<h.length;i++)r.push(h[i]._template);for(i=0;i<r.length;i++)delete r[i].templateitemname}}for(r=0;r<o.length;r++){var c=o[r],f=t[c];if(c in e?s(f,e[c],c):e[c]=f,h(c)===c)for(var p in e){var d=h(p);p===d||d!==c||p in t||s(f,e[p],c)}}}function h(t){return t.replace(/[0-9]+$/,"")}function f(t,e,r,i,o){var s=o&&r(o);for(var c in t){var u=t[c],d=p(t,c,i),g=p(t,c,o),v=r(g);if(!v){var m=h(c);m!==c&&(v=r(g=p(t,m,o)))}if((!s||s!==v)&&!(!v||v._noTemplating||"data_array"===v.valType||v.arrayOk&&Array.isArray(u)))if(!v.valType&&a(u))f(u,e,r,d,g);else if(v._isLinkedToArray&&Array.isArray(u))for(var y=!1,x=0,b={},_=0;_<u.length;_++){var w=u[_];if(a(w)){var k=w.name;if(k)b[k]||(f(w,e,r,p(u,x,d),p(u,x,g)),x++,b[k]=1);else if(!y){var T=p(t,l.arrayDefaultKey(c),i),M=p(u,x,d);f(w,e,r,M,p(u,x,g));var A=n.nestedProperty(e,M);n.nestedProperty(e,T).set(A.get()),A.set(null),y=!0}}}else{n.nestedProperty(e,d).set(u)}}}function p(t,e,r){return r?Array.isArray(t)?r+"["+e+"]":r+"."+e:e}function d(t){for(var e=0;e<t.length;e++)if(a(t[e]))return!0}function g(t){var e;switch(t.code){case"data":e="The template has no key data.";break;case"layout":e="The template has no key layout.";break;case"missing":e=t.path?"There are no templates for item "+t.path+" with name "+t.templateitemname:"There are no templates for trace "+t.index+", of type "+t.traceType+".";break;case"unused":e=t.path?"The template item at "+t.path+" was not used in constructing the plot.":t.dataCount?"Some of the templates of type "+t.traceType+" were not used. The template has "+t.templateCount+" traces, the data only has "+t.dataCount+" of this type.":"The template has "+t.templateCount+" traces of type "+t.traceType+" but there are none in the data.";break;case"reused":e="Some of the templates of type "+t.traceType+" were used more than once. The template has "+t.templateCount+" traces, the data has "+t.dataCount+" of this type."}return t.msg=e,t}r.makeTemplate=function(t){t=n.isPlainObject(t)?t:n.getGraphDiv(t),t=n.extendDeep({_context:c},{data:t.data,layout:t.layout}),o.supplyDefaults(t);var e=t.data||[],r=t.layout||{};r._basePlotModules=t._fullLayout._basePlotModules,r._modules=t._fullLayout._modules;var l={data:{},layout:{}};e.forEach(function(t){var e={};f(t,e,function(t,e){return i.getTraceValObject(t,n.nestedProperty({},e).parts)}.bind(null,t));var r=n.coerce(t,{},s,"type"),a=l.data[r];a||(a=l.data[r]=[]),a.push(e)}),f(r,l.layout,function(t,e){return i.getLayoutValObject(t,n.nestedProperty({},e).parts)}.bind(null,r)),delete l.layout.template;var h=r.template;if(a(h)){var p,d,g,v,m,y,x=h.layout;a(x)&&u(x,l.layout);var b=h.data;if(a(b)){for(d in l.data)if(g=b[d],Array.isArray(g)){for(y=(m=l.data[d]).length,v=g.length,p=0;p<y;p++)u(g[p%v],m[p]);for(p=y;p<v;p++)m.push(n.extendDeep({},g[p]))}for(d in b)d in l.data||(l.data[d]=n.extendDeep([],b[d]))}}return l},r.validateTemplate=function(t,e){var r=n.extendDeep({},{_context:c,data:t.data,layout:t.layout}),i=r.layout||{};a(e)||(e=i.template||{});var s=e.layout,l=e.data,u=[];r.layout=i,r.layout.template=e,o.supplyDefaults(r);var f=r._fullLayout,v=r._fullData,m={};if(a(s)?(!function t(e,r){for(var n in e)if("_"!==n.charAt(0)&&a(e[n])){var i,o=h(n),s=[];for(i=0;i<r.length;i++)s.push(p(e,n,r[i])),o!==n&&s.push(p(e,o,r[i]));for(i=0;i<s.length;i++)m[s[i]]=1;t(e[n],s)}}(f,["layout"]),function t(e,r){for(var n in e)if(-1===n.indexOf("defaults")&&a(e[n])){var i=p(e,n,r);m[i]?t(e[n],i):u.push({code:"unused",path:i})}}(s,"layout")):u.push({code:"layout"}),a(l)){for(var y,x={},b=0;b<v.length;b++){var _=v[b];x[y=_.type]=(x[y]||0)+1,_._fullInput._template||u.push({code:"missing",index:_._fullInput.index,traceType:y})}for(y in l){var w=l[y].length,k=x[y]||0;w>k?u.push({code:"unused",traceType:y,templateCount:w,dataCount:k}):k>w&&u.push({code:"reused",traceType:y,templateCount:w,dataCount:k})}}else u.push({code:"data"});if(function t(e,r){for(var n in e)if("_"!==n.charAt(0)){var i=e[n],o=p(e,n,r);a(i)?(Array.isArray(e)&&!1===i._template&&i.templateitemname&&u.push({code:"missing",path:o,templateitemname:i.templateitemname}),t(i,o)):Array.isArray(i)&&d(i)&&t(i,o)}}({data:v,layout:f},""),u.length)return u.map(g)}},{"../lib":717,"../plots/attributes":762,"../plots/plots":826,"./plot_config":753,"./plot_schema":754,"./plot_template":755}],758:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("./plot_api"),i=t("../plots/plots"),o=t("../lib"),s=t("../snapshot/helpers"),l=t("../snapshot/tosvg"),c=t("../snapshot/svgtoimg"),u=t("../version").version,h={format:{valType:"enumerated",values:["png","jpeg","webp","svg","full-json"],dflt:"png"},width:{valType:"number",min:1},height:{valType:"number",min:1},scale:{valType:"number",min:0,dflt:1},setBackground:{valType:"any",dflt:!1},imageDataOnly:{valType:"boolean",dflt:!1}};e.exports=function(t,e){var r,f,p,d;function g(t){return!(t in e)||o.validate(e[t],h[t])}if(e=e||{},o.isPlainObject(t)?(r=t.data||[],f=t.layout||{},p=t.config||{},d={}):(t=o.getGraphDiv(t),r=o.extendDeep([],t.data),f=o.extendDeep({},t.layout),p=t._context,d=t._fullLayout||{}),!g("width")&&null!==e.width||!g("height")&&null!==e.height)throw new Error("Height and width should be pixel values.");if(!g("format"))throw new Error("Image format is not jpeg, png, svg or webp.");var v={};function m(t,r){return o.coerce(e,v,h,t,r)}var y=m("format"),x=m("width"),b=m("height"),_=m("scale"),w=m("setBackground"),k=m("imageDataOnly"),T=document.createElement("div");T.style.position="absolute",T.style.left="-5000px",document.body.appendChild(T);var M=o.extendFlat({},f);x?M.width=x:null===e.width&&n(d.width)&&(M.width=d.width),b?M.height=b:null===e.height&&n(d.height)&&(M.height=d.height);var A=o.extendFlat({},p,{_exportedPlot:!0,staticPlot:!0,setBackground:w}),S=s.getRedrawFunc(T);function E(){return new Promise(function(t){setTimeout(t,s.getDelay(T._fullLayout))})}function L(){return new Promise(function(t,e){var r=l(T,y,_),n=T._fullLayout.width,h=T._fullLayout.height;function f(){a.purge(T),document.body.removeChild(T)}if("full-json"===y){var p=i.graphJson(T,!1,"keepdata","object",!0,!0);return p.version=u,p=JSON.stringify(p),f(),t(k?p:s.encodeJSON(p))}if(f(),"svg"===y)return t(k?r:s.encodeSVG(r));var d=document.createElement("canvas");d.id=o.randstr(),c({format:y,width:n,height:h,scale:_,canvas:d,svg:r,promise:!0}).then(t).catch(e)})}return new Promise(function(t,e){a.plot(T,r,M,A).then(S).then(E).then(L).then(function(e){t(function(t){return k?t.replace(s.IMAGE_URL_PREFIX,""):t}(e))}).catch(function(t){e(t)})})}},{"../lib":717,"../plots/plots":826,"../snapshot/helpers":850,"../snapshot/svgtoimg":852,"../snapshot/tosvg":854,"../version":1302,"./plot_api":752,"fast-isnumeric":228}],759:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../plots/plots"),i=t("./plot_schema"),o=t("./plot_config").dfltConfig,s=n.isPlainObject,l=Array.isArray,c=n.isArrayOrTypedArray;function u(t,e,r,a,i,o){o=o||[];for(var h=Object.keys(t),f=0;f<h.length;f++){var v=h[f];if("transforms"!==v){var m=o.slice();m.push(v);var y=t[v],x=e[v],b=g(r,v),_=(b||{}).valType,w="info_array"===_,k="colorscale"===_,T=(b||{}).items;if(d(r,v))if(s(y)&&s(x)&&"any"!==_)u(y,x,b,a,i,m);else if(w&&l(y)){y.length>x.length&&a.push(p("unused",i,m.concat(x.length)));var M,A,S,E,L,C=x.length,P=Array.isArray(T);if(P&&(C=Math.min(C,T.length)),2===b.dimensions)for(A=0;A<C;A++)if(l(y[A])){y[A].length>x[A].length&&a.push(p("unused",i,m.concat(A,x[A].length)));var O=x[A].length;for(M=0;M<(P?Math.min(O,T[A].length):O);M++)S=P?T[A][M]:T,E=y[A][M],L=x[A][M],n.validate(E,S)?L!==E&&L!==+E&&a.push(p("dynamic",i,m.concat(A,M),E,L)):a.push(p("value",i,m.concat(A,M),E))}else a.push(p("array",i,m.concat(A),y[A]));else for(A=0;A<C;A++)S=P?T[A]:T,E=y[A],L=x[A],n.validate(E,S)?L!==E&&L!==+E&&a.push(p("dynamic",i,m.concat(A),E,L)):a.push(p("value",i,m.concat(A),E))}else if(b.items&&!w&&l(y)){var z,I,D=T[Object.keys(T)[0]],R=[];for(z=0;z<x.length;z++){var F=x[z]._index||z;if((I=m.slice()).push(F),s(y[F])&&s(x[z])){R.push(F);var B=y[F],N=x[z];s(B)&&!1!==B.visible&&!1===N.visible?a.push(p("invisible",i,I)):u(B,N,D,a,i,I)}}for(z=0;z<y.length;z++)(I=m.slice()).push(z),s(y[z])?-1===R.indexOf(z)&&a.push(p("unused",i,I)):a.push(p("object",i,I,y[z]))}else!s(y)&&s(x)?a.push(p("object",i,m,y)):c(y)||!c(x)||w||k?v in e?n.validate(y,b)?"enumerated"===b.valType&&(b.coerceNumber&&y!==+x||y!==x)&&a.push(p("dynamic",i,m,y,x)):a.push(p("value",i,m,y)):a.push(p("unused",i,m,y)):a.push(p("array",i,m,y));else a.push(p("schema",i,m))}}return a}e.exports=function(t,e){var r,c,h=i.get(),f=[],d={_context:n.extendFlat({},o)};l(t)?(d.data=n.extendDeep([],t),r=t):(d.data=[],r=[],f.push(p("array","data"))),s(e)?(d.layout=n.extendDeep({},e),c=e):(d.layout={},c={},arguments.length>1&&f.push(p("object","layout"))),a.supplyDefaults(d);for(var g=d._fullData,v=r.length,m=0;m<v;m++){var y=r[m],x=["data",m];if(s(y)){var b=g[m],_=b.type,w=h.traces[_].attributes;w.type={valType:"enumerated",values:[_]},!1===b.visible&&!1!==y.visible&&f.push(p("invisible",x)),u(y,b,w,f,x);var k=y.transforms,T=b.transforms;if(k){l(k)||f.push(p("array",x,["transforms"])),x.push("transforms");for(var M=0;M<k.length;M++){var A=["transforms",M],S=k[M].type;if(s(k[M])){var E=h.transforms[S]?h.transforms[S].attributes:{};E.type={valType:"enumerated",values:Object.keys(h.transforms)},u(k[M],T[M],E,f,x,A)}else f.push(p("object",x,A))}}}else f.push(p("object",x))}return u(c,d._fullLayout,function(t,e){for(var r=t.layout.layoutAttributes,a=0;a<e.length;a++){var i=e[a],o=t.traces[i.type],s=o.layoutAttributes;s&&(i.subplot?n.extendFlat(r[o.attributes.subplot.dflt],s):n.extendFlat(r,s))}return r}(h,g),f,"layout"),0===f.length?void 0:f};var h={object:function(t,e){return("layout"===t&&""===e?"The layout argument":"data"===t[0]&&""===e?"Trace "+t[1]+" in the data argument":f(t)+"key "+e)+" must be linked to an object container"},array:function(t,e){return("data"===t?"The data argument":f(t)+"key "+e)+" must be linked to an array container"},schema:function(t,e){return f(t)+"key "+e+" is not part of the schema"},unused:function(t,e,r){var n=s(r)?"container":"key";return f(t)+n+" "+e+" did not get coerced"},dynamic:function(t,e,r,n){return[f(t)+"key",e,"(set to '"+r+"')","got reset to","'"+n+"'","during defaults."].join(" ")},invisible:function(t,e){return(e?f(t)+"item "+e:"Trace "+t[1])+" got defaulted to be not visible"},value:function(t,e,r){return[f(t)+"key "+e,"is set to an invalid value ("+r+")"].join(" ")}};function f(t){return l(t)?"In data trace "+t[1]+", ":"In "+t+", "}function p(t,e,r,a,i){var o,s;r=r||"",l(e)?(o=e[0],s=e[1]):(o=e,s=null);var c=function(t){if(!l(t))return String(t);for(var e="",r=0;r<t.length;r++){var n=t[r];"number"==typeof n?e=e.substr(0,e.length-1)+"["+n+"]":e+=n,r<t.length-1&&(e+=".")}return e}(r),u=h[t](e,c,a,i);return n.log(u),{code:t,container:o,trace:s,path:r,astr:c,msg:u}}function d(t,e){var r=m(e),n=r.keyMinusId,a=r.id;return!!(n in t&&t[n]._isSubplotObj&&a)||e in t}function g(t,e){return e in t?t[e]:t[m(e).keyMinusId]}var v=n.counterRegex("([a-z]+)");function m(t){var e=t.match(v);return{keyMinusId:e&&e[1],id:e&&e[2]}}},{"../lib":717,"../plots/plots":826,"./plot_config":753,"./plot_schema":754}],760:[function(t,e,r){"use strict";e.exports={mode:{valType:"enumerated",dflt:"afterall",values:["immediate","next","afterall"]},direction:{valType:"enumerated",values:["forward","reverse"],dflt:"forward"},fromcurrent:{valType:"boolean",dflt:!1},frame:{duration:{valType:"number",min:0,dflt:500},redraw:{valType:"boolean",dflt:!0}},transition:{duration:{valType:"number",min:0,dflt:500,editType:"none"},easing:{valType:"enumerated",dflt:"cubic-in-out",values:["linear","quad","cubic","sin","exp","circle","elastic","back","bounce","linear-in","quad-in","cubic-in","sin-in","exp-in","circle-in","elastic-in","back-in","bounce-in","linear-out","quad-out","cubic-out","sin-out","exp-out","circle-out","elastic-out","back-out","bounce-out","linear-in-out","quad-in-out","cubic-in-out","sin-in-out","exp-in-out","circle-in-out","elastic-in-out","back-in-out","bounce-in-out"],editType:"none"},ordering:{valType:"enumerated",values:["layout first","traces first"],dflt:"layout first",editType:"none"}}}},{}],761:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../plot_api/plot_template");e.exports=function(t,e,r){var i,o,s=r.name,l=r.inclusionAttr||"visible",c=e[s],u=n.isArrayOrTypedArray(t[s])?t[s]:[],h=e[s]=[],f=a.arrayTemplater(e,s,l);for(i=0;i<u.length;i++){var p=u[i];n.isPlainObject(p)?o=f.newItem(p):(o=f.newItem({}))[l]=!1,o._index=i,!1!==o[l]&&r.handleItemDefaults(p,o,e,r),h.push(o)}var d=f.defaultItems();for(i=0;i<d.length;i++)(o=d[i])._index=h.length,r.handleItemDefaults({},o,e,r,{}),h.push(o);if(n.isArrayOrTypedArray(c)){var g=Math.min(c.length,h.length);for(i=0;i<g;i++)n.relinkPrivateKeys(h[i],c[i])}return h}},{"../lib":717,"../plot_api/plot_template":755}],762:[function(t,e,r){"use strict";var n=t("../components/fx/attributes");e.exports={type:{valType:"enumerated",values:[],dflt:"scatter",editType:"calc+clearAxisTypes",_noTemplating:!0},visible:{valType:"enumerated",values:[!0,!1,"legendonly"],dflt:!0,editType:"calc"},showlegend:{valType:"boolean",dflt:!0,editType:"style"},legendgroup:{valType:"string",dflt:"",editType:"style"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"style"},name:{valType:"string",editType:"style"},uid:{valType:"string",editType:"plot",anim:!0},ids:{valType:"data_array",editType:"calc",anim:!0},customdata:{valType:"data_array",editType:"calc"},meta:{valType:"any",arrayOk:!0,editType:"plot"},selectedpoints:{valType:"any",editType:"calc"},hoverinfo:{valType:"flaglist",flags:["x","y","z","text","name"],extras:["all","none","skip"],arrayOk:!0,dflt:"all",editType:"none"},hoverlabel:n.hoverlabel,stream:{token:{valType:"string",noBlank:!0,strict:!0,editType:"calc"},maxpoints:{valType:"number",min:0,max:1e4,dflt:500,editType:"calc"},editType:"calc"},transforms:{_isLinkedToArray:"transform",editType:"calc"},uirevision:{valType:"any",editType:"none"}}},{"../components/fx/attributes":621}],763:[function(t,e,r){"use strict";e.exports={xaxis:{valType:"subplotid",dflt:"x",editType:"calc+clearAxisTypes"},yaxis:{valType:"subplotid",dflt:"y",editType:"calc+clearAxisTypes"}}},{}],764:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../constants/numerical").FP_SAFE,o=t("../../registry");function s(t,e){var r,n,i=[],o=l(e),s=c(t,e),u=s.min,h=s.max;if(0===u.length||0===h.length)return a.simpleMap(e.range,e.r2l);var f=u[0].val,p=h[0].val;for(r=1;r<u.length&&f===p;r++)f=Math.min(f,u[r].val);for(r=1;r<h.length&&f===p;r++)p=Math.max(p,h[r].val);var d=!1;if(e.range){var g=a.simpleMap(e.range,e.r2l);d=g[1]<g[0]}"reversed"===e.autorange&&(d=!0,e.autorange=!0);var v,m,y,x,b,_,w=e.rangemode,k="tozero"===w,T="nonnegative"===w,M=e._length,A=M/10,S=function(t,r){var n=0;if(e.rangebreaks)for(var a=e.locateBreaks(t,r),i=0;i<a.length;i++){var o=a[i];n+=o.max-o.min}return n},E=0;for(r=0;r<u.length;r++)for(v=u[r],n=0;n<h.length;n++)(_=(m=h[n]).val-v.val-S(v.val,m.val))>0&&((b=M-o(v)-o(m))>A?_/b>E&&(y=v,x=m,E=_/b):_/M>E&&(y={val:v.val,pad:0},x={val:m.val,pad:0},E=_/M));if(f===p){var L=f-1,C=f+1;if(k)if(0===f)i=[0,1];else{var P=(f>0?h:u).reduce(function(t,e){return Math.max(t,o(e))},0),O=f/(1-Math.min(.5,P/M));i=f>0?[0,O]:[O,0]}else i=T?[Math.max(0,L),Math.max(1,C)]:[L,C]}else k?(y.val>=0&&(y={val:0,pad:0}),x.val<=0&&(x={val:0,pad:0})):T&&(y.val-E*o(y)<0&&(y={val:0,pad:0}),x.val<=0&&(x={val:1,pad:0})),E=(x.val-y.val-S(v.val,m.val))/(M-o(y)-o(x)),i=[y.val-E*o(y),x.val+E*o(x)];return d&&i.reverse(),a.simpleMap(i,e.l2r||Number)}function l(t){var e=t._length/20;return"domain"===t.constrain&&t._inputDomain&&(e*=(t._inputDomain[1]-t._inputDomain[0])/(t.domain[1]-t.domain[0])),function(t){return t.pad+(t.extrapad?e:0)}}function c(t,e){var r,n,a,i=e._id,o=t._fullData,s=t._fullLayout,l=[],c=[];function f(t,e){for(r=0;r<e.length;r++){var o=t[e[r]],s=(o._extremes||{})[i];if(!0===o.visible&&s){for(n=0;n<s.min.length;n++)a=s.min[n],u(l,a.val,a.pad,{extrapad:a.extrapad});for(n=0;n<s.max.length;n++)a=s.max[n],h(c,a.val,a.pad,{extrapad:a.extrapad})}}}return f(o,e._traceIndices),f(s.annotations||[],e._annIndices||[]),f(s.shapes||[],e._shapeIndices||[]),{min:l,max:c}}function u(t,e,r,n){f(t,e,r,n,d)}function h(t,e,r,n){f(t,e,r,n,g)}function f(t,e,r,n,a){for(var i=n.tozero,o=n.extrapad,s=!0,l=0;l<t.length&&s;l++){var c=t[l];if(a(c.val,e)&&c.pad>=r&&(c.extrapad||!o)){s=!1;break}a(e,c.val)&&c.pad<=r&&(o||!c.extrapad)&&(t.splice(l,1),l--)}if(s){var u=i&&0===e;t.push({val:e,pad:u?0:r,extrapad:!u&&o})}}function p(t){return n(t)&&Math.abs(t)<i}function d(t,e){return t<=e}function g(t,e){return t>=e}e.exports={getAutoRange:s,makePadFn:l,doAutoRange:function(t,e){if(e.setScale(),e.autorange){e.range=s(t,e),e._r=e.range.slice(),e._rl=a.simpleMap(e._r,e.r2l);var r=e._input,n={};n[e._attr+".range"]=e.range,n[e._attr+".autorange"]=e.autorange,o.call("_storeDirectGUIEdit",t.layout,t._fullLayout._preGUI,n),r.range=e.range.slice(),r.autorange=e.autorange}var i=e._anchorAxis;if(i&&i.rangeslider){var l=i.rangeslider[e._name];l&&"auto"===l.rangemode&&(l.range=s(t,e)),i._input.rangeslider[e._name]=a.extendFlat({},l)}},findExtremes:function(t,e,r){r||(r={});t._m||t.setScale();var a,o,s,l,c,f,d,g,v,m=[],y=[],x=e.length,b=r.padded||!1,_=r.tozero&&("linear"===t.type||"-"===t.type),w="log"===t.type,k=!1,T=r.vpadLinearized||!1;function M(t){if(Array.isArray(t))return k=!0,function(e){return Math.max(Number(t[e]||0),0)};var e=Math.max(Number(t||0),0);return function(){return e}}var A=M((t._m>0?r.ppadplus:r.ppadminus)||r.ppad||0),S=M((t._m>0?r.ppadminus:r.ppadplus)||r.ppad||0),E=M(r.vpadplus||r.vpad),L=M(r.vpadminus||r.vpad);if(!k){if(g=1/0,v=-1/0,w)for(a=0;a<x;a++)(o=e[a])<g&&o>0&&(g=o),o>v&&o<i&&(v=o);else for(a=0;a<x;a++)(o=e[a])<g&&o>-i&&(g=o),o>v&&o<i&&(v=o);e=[g,v],x=2}var C={tozero:_,extrapad:b};function P(r){s=e[r],n(s)&&(f=A(r),d=S(r),T?(l=t.c2l(s)-L(r),c=t.c2l(s)+E(r)):(g=s-L(r),v=s+E(r),w&&g<v/10&&(g=v/10),l=t.c2l(g),c=t.c2l(v)),_&&(l=Math.min(0,l),c=Math.max(0,c)),p(l)&&u(m,l,d,C),p(c)&&h(y,c,f,C))}var O=Math.min(6,x);for(a=0;a<O;a++)P(a);for(a=x-1;a>=O;a--)P(a);return{min:m,max:y,opts:r}},concatExtremes:c}},{"../../constants/numerical":693,"../../lib":717,"../../registry":846,"fast-isnumeric":228}],765:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../../plots/plots"),o=t("../../registry"),s=t("../../lib"),l=t("../../lib/svg_text_utils"),c=t("../../components/titles"),u=t("../../components/color"),h=t("../../components/drawing"),f=t("./layout_attributes"),p=t("./clean_ticks"),d=t("../../constants/numerical"),g=d.ONEAVGYEAR,v=d.ONEAVGMONTH,m=d.ONEDAY,y=d.ONEHOUR,x=d.ONEMIN,b=d.ONESEC,_=d.MINUS_SIGN,w=d.BADNUM,k=t("../../constants/alignment"),T=k.MID_SHIFT,M=k.CAP_SHIFT,A=k.LINE_SPACING,S=k.OPPOSITE_SIDE,E=e.exports={};E.setConvert=t("./set_convert");var L=t("./axis_autotype"),C=t("./axis_ids");E.id2name=C.id2name,E.name2id=C.name2id,E.cleanId=C.cleanId,E.list=C.list,E.listIds=C.listIds,E.getFromId=C.getFromId,E.getFromTrace=C.getFromTrace;var P=t("./autorange");E.getAutoRange=P.getAutoRange,E.findExtremes=P.findExtremes,E.coerceRef=function(t,e,r,n,a,i){var o=n.charAt(n.length-1),l=r._fullLayout._subplots[o+"axis"],c=n+"ref",u={};return a||(a=l[0]||i),i||(i=a),u[c]={valType:"enumerated",values:l.concat(i?[i]:[]),dflt:a},s.coerce(t,e,u,c)},E.coercePosition=function(t,e,r,n,a,i){var o,l;if("paper"===n||"pixel"===n)o=s.ensureNumber,l=r(a,i);else{var c=E.getFromId(e,n);l=r(a,i=c.fraction2r(i)),o=c.cleanPos}t[a]=o(l)},E.cleanPosition=function(t,e,r){return("paper"===r||"pixel"===r?s.ensureNumber:E.getFromId(e,r).cleanPos)(t)},E.redrawComponents=function(t,e){e=e||E.listIds(t);var r=t._fullLayout;function n(n,a,i,s){for(var l=o.getComponentMethod(n,a),c={},u=0;u<e.length;u++)for(var h=r[E.id2name(e[u])][i],f=0;f<h.length;f++){var p=h[f];if(!c[p]&&(l(t,p),c[p]=1,s))return}}n("annotations","drawOne","_annIndices"),n("shapes","drawOne","_shapeIndices"),n("images","draw","_imgIndices",!0)};var O=E.getDataConversions=function(t,e,r,n){var a,i="x"===r||"y"===r||"z"===r?r:n;if(Array.isArray(i)){if(a={type:L(n),_categories:[]},E.setConvert(a),"category"===a.type)for(var o=0;o<n.length;o++)a.d2c(n[o])}else a=E.getFromTrace(t,e,i);return a?{d2c:a.d2c,c2d:a.c2d}:"ids"===i?{d2c:I,c2d:I}:{d2c:z,c2d:z}};function z(t){return+t}function I(t){return String(t)}E.getDataToCoordFunc=function(t,e,r,n){return O(t,e,r,n).d2c},E.counterLetter=function(t){var e=t.charAt(0);return"x"===e?"y":"y"===e?"x":void 0},E.minDtick=function(t,e,r,n){-1===["log","category","multicategory"].indexOf(t.type)&&n?void 0===t._minDtick?(t._minDtick=e,t._forceTick0=r):t._minDtick&&((t._minDtick/e+1e-6)%1<2e-6&&((r-t._forceTick0)/e%1+1.000001)%1<2e-6?(t._minDtick=e,t._forceTick0=r):((e/t._minDtick+1e-6)%1>2e-6||((r-t._forceTick0)/t._minDtick%1+1.000001)%1>2e-6)&&(t._minDtick=0)):t._minDtick=0},E.saveRangeInitial=function(t,e){for(var r=E.list(t,"",!0),n=!1,a=0;a<r.length;a++){var i=r[a],o=void 0===i._rangeInitial,s=o||!(i.range[0]===i._rangeInitial[0]&&i.range[1]===i._rangeInitial[1]);(o&&!1===i.autorange||e&&s)&&(i._rangeInitial=i.range.slice(),n=!0)}return n},E.saveShowSpikeInitial=function(t,e){for(var r=E.list(t,"",!0),n=!1,a="on",i=0;i<r.length;i++){var o=r[i],s=void 0===o._showSpikeInitial,l=s||!(o.showspikes===o._showspikes);(s||e&&l)&&(o._showSpikeInitial=o.showspikes,n=!0),"on"!==a||o.showspikes||(a="off")}return t._fullLayout._cartesianSpikesEnabled=a,n},E.autoBin=function(t,e,r,n,i,o){var l,c=s.aggNums(Math.min,null,t),u=s.aggNums(Math.max,null,t);if("category"===e.type||"multicategory"===e.type)return{start:c-.5,end:u+.5,size:Math.max(1,Math.round(o)||1),_dataSpan:u-c};if(i||(i=e.calendar),l="log"===e.type?{type:"linear",range:[c,u]}:{type:e.type,range:s.simpleMap([c,u],e.c2r,0,i),calendar:i},E.setConvert(l),o=o&&p.dtick(o,l.type))l.dtick=o,l.tick0=p.tick0(void 0,l.type,i);else{var h;if(r)h=(u-c)/r;else{var f=s.distinctVals(t),d=Math.pow(10,Math.floor(Math.log(f.minDiff)/Math.LN10)),g=d*s.roundUp(f.minDiff/d,[.9,1.9,4.9,9.9],!0);h=Math.max(g,2*s.stdev(t)/Math.pow(t.length,n?.25:.4)),a(h)||(h=1)}E.autoTicks(l,h)}var v,y=l.dtick,x=E.tickIncrement(E.tickFirst(l),y,"reverse",i);if("number"==typeof y)v=(x=function(t,e,r,n,i){var o=0,s=0,l=0,c=0;function u(e){return(1+100*(e-t)/r.dtick)%100<2}for(var h=0;h<e.length;h++)e[h]%1==0?l++:a(e[h])||c++,u(e[h])&&o++,u(e[h]+r.dtick/2)&&s++;var f=e.length-c;if(l===f&&"date"!==r.type)r.dtick<1?t=n-.5*r.dtick:(t-=.5)+r.dtick<n&&(t+=r.dtick);else if(s<.1*f&&(o>.3*f||u(n)||u(i))){var p=r.dtick/2;t+=t+p<n?p:-p}return t}(x,t,l,c,u))+(1+Math.floor((u-x)/y))*y;else for("M"===l.dtick.charAt(0)&&(x=function(t,e,r,n,a){var i=s.findExactDates(e,a);if(i.exactDays>.8){var o=Number(r.substr(1));i.exactYears>.8&&o%12==0?t=E.tickIncrement(t,"M6","reverse")+1.5*m:i.exactMonths>.8?t=E.tickIncrement(t,"M1","reverse")+15.5*m:t-=m/2;var l=E.tickIncrement(t,r);if(l<=n)return l}return t}(x,t,y,c,i)),v=x,0;v<=u;)v=E.tickIncrement(v,y,!1,i),0;return{start:e.c2r(x,0,i),end:e.c2r(v,0,i),size:y,_dataSpan:u-c}},E.prepTicks=function(t){var e=s.simpleMap(t.range,t.r2l);if("auto"===t.tickmode||!t.dtick){var r,n=t.nticks;n||("category"===t.type||"multicategory"===t.type?(r=t.tickfont?1.2*(t.tickfont.size||12):15,n=t._length/r):(r="y"===t._id.charAt(0)?40:80,n=s.constrain(t._length/r,4,9)+1),"radialaxis"===t._name&&(n*=2)),"array"===t.tickmode&&(n*=100),t._roughDTick=(Math.abs(e[1]-e[0])-(t._lBreaks||0))/n,E.autoTicks(t,t._roughDTick),t._minDtick>0&&t.dtick<2*t._minDtick&&(t.dtick=t._minDtick,t.tick0=t.l2r(t._forceTick0))}t.tick0||(t.tick0="date"===t.type?"2000-01-01":0),"date"===t.type&&t.dtick<.1&&(t.dtick=.1),q(t)},E.calcTicks=function(t){E.prepTicks(t);var e=s.simpleMap(t.range,t.r2l);if("array"===t.tickmode)return function(t){var e=t.tickvals,r=t.ticktext,n=new Array(e.length),a=s.simpleMap(t.range,t.r2l),i=1.0001*a[0]-1e-4*a[1],o=1.0001*a[1]-1e-4*a[0],l=Math.min(i,o),c=Math.max(i,o),u=0;Array.isArray(r)||(r=[]);var h="category"===t.type?t.d2l_noadd:t.d2l;"log"===t.type&&"L"!==String(t.dtick).charAt(0)&&(t.dtick="L"+Math.pow(10,Math.floor(Math.min(t.range[0],t.range[1]))-1));for(var f=0;f<e.length;f++){var p=h(e[f]);p>l&&p<c&&(void 0===r[f]?n[u]=E.tickText(t,p):n[u]=H(t,p,String(r[f])),u++)}u<e.length&&n.splice(u,e.length-u);t.rangebreaks&&(n=n.filter(function(e){return t.maskBreaks(e.x)!==w}));return n}(t);t._tmin=E.tickFirst(t);var r=1.0001*e[0]-1e-4*e[1],n=1.0001*e[1]-1e-4*e[0],i=e[1]<e[0];if(t._tmin<r!==i)return[];"category"!==t.type&&"multicategory"!==t.type||(n=i?Math.max(-.5,n):Math.min(t._categories.length-.5,n));var o,l="log"===t.type&&!(a(t.dtick)||"L"===t.dtick.charAt(0));if(function(){var e=null,r=Math.max(1e3,t._length||0);o=[];for(var a=t._tmin;(i?a>=n:a<=n)&&!(o.length>r||a===e);a=E.tickIncrement(a,t.dtick,i,t.calendar)){e=a;var s=!1;l&&a!==(0|a)&&(s=!0),o.push({minor:s,value:a})}}(),t.rangebreaks){if("auto"===t.tickmode)for(var c=0;c<o.length;c++){var u=o[c].value;if(t.maskBreaks(u)===w)for(var h=0;h<t._rangebreaks.length;h++){var f=t._rangebreaks[h];if(u>=f.min&&u<f.max){o[c].value=f.max;break}}}var p=o.length;if(p>2){for(var d,g=2*(t.tickfont?t.tickfont.size:12),v=[],m=i?1:-1,y=i?p-1:0,x=i?0:p-1;m*x<=m*y;x+=m){var b=t.c2p(o[x].value);(void 0===d||Math.abs(b-d)>g)&&(d=b,v.push(o[x]))}o=v.reverse()}}ot(t)&&360===Math.abs(e[1]-e[0])&&o.pop(),t._tmax=(o[o.length-1]||{}).value,t._prevDateHead="",t._inCalcTicks=!0;for(var _=new Array(o.length),k=0;k<o.length;k++){var T=o[k].minor,M=o[k].value;_[k]=E.tickText(t,M,!1,T)}return t._inCalcTicks=!1,_};var D=[2,5,10],R=[1,2,3,6,12],F=[1,2,5,10,15,30],B=[1,2,3,7,14],N=[-.046,0,.301,.477,.602,.699,.778,.845,.903,.954,1],j=[-.301,0,.301,.699,1],V=[15,30,45,90,180];function U(t,e,r){return e*s.roundUp(t/e,r)}function q(t){var e=t.dtick;if(t._tickexponent=0,a(e)||"string"==typeof e||(e=1),"category"!==t.type&&"multicategory"!==t.type||(t._tickround=null),"date"===t.type){var r=t.r2l(t.tick0),n=t.l2r(r).replace(/(^-|i)/g,""),i=n.length;if("M"===String(e).charAt(0))i>10||"01-01"!==n.substr(5)?t._tickround="d":t._tickround=+e.substr(1)%12==0?"y":"m";else if(e>=m&&i<=10||e>=15*m)t._tickround="d";else if(e>=x&&i<=16||e>=y)t._tickround="M";else if(e>=b&&i<=19||e>=x)t._tickround="S";else{var o=t.l2r(r+e).replace(/^-/,"").length;t._tickround=Math.max(i,o)-20,t._tickround<0&&(t._tickround=4)}}else if(a(e)||"L"===e.charAt(0)){var s=t.range.map(t.r2d||Number);a(e)||(e=Number(e.substr(1))),t._tickround=2-Math.floor(Math.log(e)/Math.LN10+.01);var l=Math.max(Math.abs(s[0]),Math.abs(s[1])),c=Math.floor(Math.log(l)/Math.LN10+.01);Math.abs(c)>3&&(Y(t.exponentformat)&&!W(c)?t._tickexponent=3*Math.round((c-1)/3):t._tickexponent=c)}else t._tickround=null}function H(t,e,r){var n=t.tickfont||{};return{x:e,dx:0,dy:0,text:r||"",fontSize:n.size,font:n.family,fontColor:n.color}}E.autoTicks=function(t,e){var r;function n(t){return Math.pow(t,Math.floor(Math.log(e)/Math.LN10))}if("date"===t.type){t.tick0=s.dateTick0(t.calendar);var i=2*e;i>g?(e/=g,r=n(10),t.dtick="M"+12*U(e,r,D)):i>v?(e/=v,t.dtick="M"+U(e,1,R)):i>m?(t.dtick=U(e,m,t._hasDayOfWeekBreaks?[1,7,14]:B),t.tick0=s.dateTick0(t.calendar,!0)):i>y?t.dtick=U(e,y,R):i>x?t.dtick=U(e,x,F):i>b?t.dtick=U(e,b,F):(r=n(10),t.dtick=U(e,r,D))}else if("log"===t.type){t.tick0=0;var o=s.simpleMap(t.range,t.r2l);if(e>.7)t.dtick=Math.ceil(e);else if(Math.abs(o[1]-o[0])<1){var l=1.5*Math.abs((o[1]-o[0])/e);e=Math.abs(Math.pow(10,o[1])-Math.pow(10,o[0]))/l,r=n(10),t.dtick="L"+U(e,r,D)}else t.dtick=e>.3?"D2":"D1"}else"category"===t.type||"multicategory"===t.type?(t.tick0=0,t.dtick=Math.ceil(Math.max(e,1))):ot(t)?(t.tick0=0,r=1,t.dtick=U(e,r,V)):(t.tick0=0,r=n(10),t.dtick=U(e,r,D));if(0===t.dtick&&(t.dtick=1),!a(t.dtick)&&"string"!=typeof t.dtick){var c=t.dtick;throw t.dtick=1,"ax.dtick error: "+String(c)}},E.tickIncrement=function(t,e,r,i){var o=r?-1:1;if(a(e))return t+o*e;var l=e.charAt(0),c=o*Number(e.substr(1));if("M"===l)return s.incrementMonth(t,c,i);if("L"===l)return Math.log(Math.pow(10,t)+c)/Math.LN10;if("D"===l){var u="D2"===e?j:N,h=t+.01*o,f=s.roundUp(s.mod(h,1),u,r);return Math.floor(h)+Math.log(n.round(Math.pow(10,f),1))/Math.LN10}throw"unrecognized dtick "+String(e)},E.tickFirst=function(t){var e=t.r2l||Number,r=s.simpleMap(t.range,e),i=r[1]<r[0],o=i?Math.floor:Math.ceil,l=1.0001*r[0]-1e-4*r[1],c=t.dtick,u=e(t.tick0);if(a(c)){var h=o((l-u)/c)*c+u;return"category"!==t.type&&"multicategory"!==t.type||(h=s.constrain(h,0,t._categories.length-1)),h}var f=c.charAt(0),p=Number(c.substr(1));if("M"===f){for(var d,g,v,m=0,y=u;m<10;){if(((d=E.tickIncrement(y,c,i,t.calendar))-l)*(y-l)<=0)return i?Math.min(y,d):Math.max(y,d);g=(l-(y+d)/2)/(d-y),v=f+(Math.abs(Math.round(g))||1)*p,y=E.tickIncrement(y,v,g<0?!i:i,t.calendar),m++}return s.error("tickFirst did not converge",t),y}if("L"===f)return Math.log(o((Math.pow(10,l)-u)/p)*p+u)/Math.LN10;if("D"===f){var x="D2"===c?j:N,b=s.roundUp(s.mod(l,1),x,i);return Math.floor(l)+Math.log(n.round(Math.pow(10,b),1))/Math.LN10}throw"unrecognized dtick "+String(c)},E.tickText=function(t,e,r,n){var i,o=H(t,e),l="array"===t.tickmode,c=r||l,u=t.type,h="category"===u?t.d2l_noadd:t.d2l;if(l&&Array.isArray(t.ticktext)){var f=s.simpleMap(t.range,t.r2l),p=(Math.abs(f[1]-f[0])-(t._lBreaks||0))/1e4;for(i=0;i<t.ticktext.length&&!(Math.abs(e-h(t.tickvals[i]))<p);i++);if(i<t.ticktext.length)return o.text=String(t.ticktext[i]),o}function d(n){if(void 0===n)return!0;if(r)return"none"===n;var a={first:t._tmin,last:t._tmax}[n];return"all"!==n&&e!==a}var g=r?"never":"none"!==t.exponentformat&&d(t.showexponent)?"hide":"";if("date"===u?function(t,e,r,n){var i=t._tickround,o=r&&t.hoverformat||E.getTickFormat(t);n&&(i=a(i)?4:{y:"m",m:"d",d:"M",M:"S",S:4}[i]);var l,c=s.formatDate(e.x,o,i,t._dateFormat,t.calendar,t._extraFormat),u=c.indexOf("\n");-1!==u&&(l=c.substr(u+1),c=c.substr(0,u));n&&("00:00:00"===c||"00:00"===c?(c=l,l=""):8===c.length&&(c=c.replace(/:00$/,"")));l&&(r?"d"===i?c+=", "+l:c=l+(c?", "+c:""):t._inCalcTicks&&l===t._prevDateHead||(c+="<br>"+l,t._prevDateHead=l));e.text=c}(t,o,r,c):"log"===u?function(t,e,r,n,i){var o=t.dtick,l=e.x,c=t.tickformat,u="string"==typeof o&&o.charAt(0);"never"===i&&(i="");n&&"L"!==u&&(o="L3",u="L");if(c||"L"===u)e.text=X(Math.pow(10,l),t,i,n);else if(a(o)||"D"===u&&s.mod(l+.01,1)<.1){var h=Math.round(l),f=Math.abs(h),p=t.exponentformat;"power"===p||Y(p)&&W(h)?(e.text=0===h?1:1===h?"10":"10<sup>"+(h>1?"":_)+f+"</sup>",e.fontSize*=1.25):("e"===p||"E"===p)&&f>2?e.text="1"+p+(h>0?"+":_)+f:(e.text=X(Math.pow(10,l),t,"","fakehover"),"D1"===o&&"y"===t._id.charAt(0)&&(e.dy-=e.fontSize/6))}else{if("D"!==u)throw"unrecognized dtick "+String(o);e.text=String(Math.round(Math.pow(10,s.mod(l,1)))),e.fontSize*=.75}if("D1"===t.dtick){var d=String(e.text).charAt(0);"0"!==d&&"1"!==d||("y"===t._id.charAt(0)?e.dx-=e.fontSize/4:(e.dy+=e.fontSize/2,e.dx+=(t.range[1]>t.range[0]?1:-1)*e.fontSize*(l<0?.5:.25)))}}(t,o,0,c,g):"category"===u?function(t,e){var r=t._categories[Math.round(e.x)];void 0===r&&(r="");e.text=String(r)}(t,o):"multicategory"===u?function(t,e,r){var n=Math.round(e.x),a=t._categories[n]||[],i=void 0===a[1]?"":String(a[1]),o=void 0===a[0]?"":String(a[0]);r?e.text=o+" - "+i:(e.text=i,e.text2=o)}(t,o,r):ot(t)?function(t,e,r,n,a){if("radians"!==t.thetaunit||r)e.text=X(e.x,t,a,n);else{var i=e.x/180;if(0===i)e.text="0";else{var o=function(t){function e(t,e){return Math.abs(t-e)<=1e-6}var r=function(t){var r=1;for(;!e(Math.round(t*r)/r,t);)r*=10;return r}(t),n=t*r,a=Math.abs(function t(r,n){return e(n,0)?r:t(n,r%n)}(n,r));return[Math.round(n/a),Math.round(r/a)]}(i);if(o[1]>=100)e.text=X(s.deg2rad(e.x),t,a,n);else{var l=e.x<0;1===o[1]?1===o[0]?e.text="\u03c0":e.text=o[0]+"\u03c0":e.text=["<sup>",o[0],"</sup>","\u2044","<sub>",o[1],"</sub>","\u03c0"].join(""),l&&(e.text=_+e.text)}}}}(t,o,r,c,g):function(t,e,r,n,a){"never"===a?a="":"all"===t.showexponent&&Math.abs(e.x/t.dtick)<1e-6&&(a="hide");e.text=X(e.x,t,a,n)}(t,o,0,c,g),n||(t.tickprefix&&!d(t.showtickprefix)&&(o.text=t.tickprefix+o.text),t.ticksuffix&&!d(t.showticksuffix)&&(o.text+=t.ticksuffix)),"boundaries"===t.tickson||t.showdividers){var v=function(e){var r=t.l2p(e);return r>=0&&r<=t._length?e:null};o.xbnd=[v(o.x-.5),v(o.x+t.dtick-.5)]}return o},E.hoverLabelText=function(t,e,r){if(r!==w&&r!==e)return E.hoverLabelText(t,e)+" - "+E.hoverLabelText(t,r);var n="log"===t.type&&e<=0,a=E.tickText(t,t.c2l(n?-e:e),"hover").text;return n?0===e?"0":_+a:a};var G=["f","p","n","\u03bc","m","","k","M","G","T"];function Y(t){return"SI"===t||"B"===t}function W(t){return t>14||t<-15}function X(t,e,r,n){var i=t<0,o=e._tickround,l=r||e.exponentformat||"B",c=e._tickexponent,u=E.getTickFormat(e),h=e.separatethousands;if(n){var f={exponentformat:l,dtick:"none"===e.showexponent?e.dtick:a(t)&&Math.abs(t)||1,range:"none"===e.showexponent?e.range.map(e.r2d):[0,t||1]};q(f),o=(Number(f._tickround)||0)+4,c=f._tickexponent,e.hoverformat&&(u=e.hoverformat)}if(u)return e._numFormat(u)(t).replace(/-/g,_);var p,d=Math.pow(10,-o)/2;if("none"===l&&(c=0),(t=Math.abs(t))<d)t="0",i=!1;else{if(t+=d,c&&(t*=Math.pow(10,-c),o+=c),0===o)t=String(Math.floor(t));else if(o<0){t=(t=String(Math.round(t))).substr(0,t.length+o);for(var g=o;g<0;g++)t+="0"}else{var v=(t=String(t)).indexOf(".")+1;v&&(t=t.substr(0,v+o).replace(/\.?0+$/,""))}t=s.numSeparate(t,e._separators,h)}c&&"hide"!==l&&(Y(l)&&W(c)&&(l="power"),p=c<0?_+-c:"power"!==l?"+"+c:String(c),"e"===l||"E"===l?t+=l+p:"power"===l?t+="\xd710<sup>"+p+"</sup>":"B"===l&&9===c?t+="B":Y(l)&&(t+=G[c/3+5]));return i?_+t:t}function Z(t,e){for(var r=[],n={},a=0;a<e.length;a++){var i=e[a];n[i.text2]?n[i.text2].push(i.x):n[i.text2]=[i.x]}for(var o in n)r.push(H(t,s.interp(n[o],.5),o));return r}function J(t){return[t.text,t.x,t.axInfo,t.font,t.fontSize,t.fontColor].join("_")}function K(t){var e=t.title.font.size,r=(t.title.text.match(l.BR_TAG_ALL)||[]).length;return t.title.hasOwnProperty("standoff")?r?e*(M+r*A):e*M:r?e*(r+1)*A:e}function Q(t,e){var r=t.l2p(e);return r>1&&r<t._length-1}function $(t){var e=n.select(t),r=e.select(".text-math-group");return r.empty()?e.select("text"):r}function tt(t){return t._id+".automargin"}function et(t){return tt(t)+".mirror"}function rt(t){return t._id+".rangeslider"}function nt(t,e){for(var r=0;r<e.length;r++)-1===t.indexOf(e[r])&&t.push(e[r])}function at(t,e,r){var n,a,i=[],o=[],l=t.layout;for(n=0;n<e.length;n++)i.push(E.getFromId(t,e[n]));for(n=0;n<r.length;n++)o.push(E.getFromId(t,r[n]));var c=Object.keys(f),u=["anchor","domain","overlaying","position","side","tickangle","editType"],h=["linear","log"];for(n=0;n<c.length;n++){var p=c[n],d=i[0][p],g=o[0][p],v=!0,m=!1,y=!1;if("_"!==p.charAt(0)&&"function"!=typeof d&&-1===u.indexOf(p)){for(a=1;a<i.length&&v;a++){var x=i[a][p];"type"===p&&-1!==h.indexOf(d)&&-1!==h.indexOf(x)&&d!==x?m=!0:x!==d&&(v=!1)}for(a=1;a<o.length&&v;a++){var b=o[a][p];"type"===p&&-1!==h.indexOf(g)&&-1!==h.indexOf(b)&&g!==b?y=!0:o[a][p]!==g&&(v=!1)}v&&(m&&(l[i[0]._name].type="linear"),y&&(l[o[0]._name].type="linear"),it(l,p,i,o,t._fullLayout._dfltTitle))}}for(n=0;n<t._fullLayout.annotations.length;n++){var _=t._fullLayout.annotations[n];-1!==e.indexOf(_.xref)&&-1!==r.indexOf(_.yref)&&s.swapAttrs(l.annotations[n],["?"])}}function it(t,e,r,n,a){var i,o=s.nestedProperty,l=o(t[r[0]._name],e).get(),c=o(t[n[0]._name],e).get();for("title"===e&&(l&&l.text===a.x&&(l.text=a.y),c&&c.text===a.y&&(c.text=a.x)),i=0;i<r.length;i++)o(t,r[i]._name+"."+e).set(c);for(i=0;i<n.length;i++)o(t,n[i]._name+"."+e).set(l)}function ot(t){return"angularaxis"===t._id}E.getTickFormat=function(t){var e,r,n,a,i,o,s,l;function c(t){return"string"!=typeof t?t:Number(t.replace("M",""))*v}function u(t,e){var r=["L","D"];if(typeof t==typeof e){if("number"==typeof t)return t-e;var n=r.indexOf(t.charAt(0)),a=r.indexOf(e.charAt(0));return n===a?Number(t.replace(/(L|D)/g,""))-Number(e.replace(/(L|D)/g,"")):n-a}return"number"==typeof t?1:-1}function h(t,e){var r=null===e[0],n=null===e[1],a=u(t,e[0])>=0,i=u(t,e[1])<=0;return(r||a)&&(n||i)}if(t.tickformatstops&&t.tickformatstops.length>0)switch(t.type){case"date":case"linear":for(e=0;e<t.tickformatstops.length;e++)if((n=t.tickformatstops[e]).enabled&&(a=t.dtick,i=n.dtickrange,o=void 0,s=void 0,l=void 0,o=c||function(t){return t},s=i[0],l=i[1],(!s&&"number"!=typeof s||o(s)<=o(a))&&(!l&&"number"!=typeof l||o(l)>=o(a)))){r=n;break}break;case"log":for(e=0;e<t.tickformatstops.length;e++)if((n=t.tickformatstops[e]).enabled&&h(t.dtick,n.dtickrange)){r=n;break}}return r?r.value:t.tickformat},E.getSubplots=function(t,e){var r=t._fullLayout._subplots,n=r.cartesian.concat(r.gl2d||[]),a=e?E.findSubplotsWithAxis(n,e):n;return a.sort(function(t,e){var r=t.substr(1).split("y"),n=e.substr(1).split("y");return r[0]===n[0]?+r[1]-+n[1]:+r[0]-+n[0]}),a},E.findSubplotsWithAxis=function(t,e){for(var r=new RegExp("x"===e._id.charAt(0)?"^"+e._id+"y":e._id+"$"),n=[],a=0;a<t.length;a++){var i=t[a];r.test(i)&&n.push(i)}return n},E.makeClipPaths=function(t){var e=t._fullLayout;if(!e._hasOnlyLargeSploms){var r,a,i={_offset:0,_length:e.width,_id:""},o={_offset:0,_length:e.height,_id:""},s=E.list(t,"x",!0),l=E.list(t,"y",!0),c=[];for(r=0;r<s.length;r++)for(c.push({x:s[r],y:o}),a=0;a<l.length;a++)0===r&&c.push({x:i,y:l[a]}),c.push({x:s[r],y:l[a]});var u=e._clips.selectAll(".axesclip").data(c,function(t){return t.x._id+t.y._id});u.enter().append("clipPath").classed("axesclip",!0).attr("id",function(t){return"clip"+e._uid+t.x._id+t.y._id}).append("rect"),u.exit().remove(),u.each(function(t){n.select(this).select("rect").attr({x:t.x._offset||0,y:t.y._offset||0,width:t.x._length||1,height:t.y._length||1})})}},E.draw=function(t,e,r){var n=t._fullLayout;"redraw"===e&&n._paper.selectAll("g.subplot").each(function(t){var e=t[0],r=n._plots[e],a=r.xaxis,i=r.yaxis;r.xaxislayer.selectAll("."+a._id+"tick").remove(),r.yaxislayer.selectAll("."+i._id+"tick").remove(),r.xaxislayer.selectAll("."+a._id+"tick2").remove(),r.yaxislayer.selectAll("."+i._id+"tick2").remove(),r.xaxislayer.selectAll("."+a._id+"divider").remove(),r.yaxislayer.selectAll("."+i._id+"divider").remove(),r.gridlayer&&r.gridlayer.selectAll("path").remove(),r.zerolinelayer&&r.zerolinelayer.selectAll("path").remove(),n._infolayer.select(".g-"+a._id+"title").remove(),n._infolayer.select(".g-"+i._id+"title").remove()});var a=e&&"redraw"!==e?e:E.listIds(t);return s.syncOrAsync(a.map(function(e){return function(){if(e){var n=E.getFromId(t,e),a=E.drawOne(t,n,r);return n._r=n.range.slice(),n._rl=s.simpleMap(n._r,n.r2l),a}}}))},E.drawOne=function(t,e,r){var n,a,l;r=r||{},e.setScale();var f=t._fullLayout,p=e._id,d=p.charAt(0),g=E.counterLetter(p),v=f._plots[e._mainSubplot];if(v){var m=v[d+"axislayer"],y=e._mainLinePosition,x=e._mainMirrorPosition,b=e._vals=E.calcTicks(e),_=[e.mirror,y,x].join("_");for(n=0;n<b.length;n++)b[n].axInfo=_;e._selections={},e._tickAngles&&(e._prevTickAngles=e._tickAngles),e._tickAngles={},e._depth=null;var w={};if(e.visible){var k,T,M=E.makeTransFn(e);if("boundaries"===e.tickson){var L=function(t,e){var r,n=[],a=function(t,e){var r=t.xbnd[e];null!==r&&n.push(s.extendFlat({},t,{x:r}))};if(e.length){for(r=0;r<e.length;r++)a(e[r],0);a(e[r-1],1)}return n}(0,b);T=E.clipEnds(e,L),k="inside"===e.ticks?T:L}else T=E.clipEnds(e,b),k="inside"===e.ticks?T:b;var C=e._gridVals=T,P=function(t,e){var r,n,a=[],i=function(t,e){var r=t.xbnd[e];null!==r&&a.push(s.extendFlat({},t,{x:r}))};if(t.showdividers&&e.length){for(r=0;r<e.length;r++){var o=e[r];o.text2!==n&&i(o,0),n=o.text2}i(e[r-1],1)}return a}(e,b);if(!f._hasOnlyLargeSploms){var O=e._subplotsWith,z={};for(n=0;n<O.length;n++){a=O[n];var I=(l=f._plots[a])[g+"axis"],D=I._mainAxis._id;if(!z[D]){z[D]=1;var R="x"===d?"M0,"+I._offset+"v"+I._length:"M"+I._offset+",0h"+I._length;E.drawGrid(t,e,{vals:C,counterAxis:I,layer:l.gridlayer.select("."+p),path:R,transFn:M}),E.drawZeroLine(t,e,{counterAxis:I,layer:l.zerolinelayer,path:R,transFn:M})}}}var F=E.getTickSigns(e),B=[];if(e.ticks){var N,j,V,U=E.makeTickPath(e,y,F[2]);if(e._anchorAxis&&e.mirror&&!0!==e.mirror?(N=E.makeTickPath(e,x,F[3]),j=U+N):(N="",j=U),e.showdividers&&"outside"===e.ticks&&"boundaries"===e.tickson){var q={};for(n=0;n<P.length;n++)q[P[n].x]=1;V=function(t){return q[t.x]?N:j}}else V=j;E.drawTicks(t,e,{vals:k,layer:m,path:V,transFn:M}),"allticks"===e.mirror&&(B=Object.keys(e._linepositions||{}))}for(n=0;n<B.length;n++){a=B[n],l=f._plots[a];var H=e._linepositions[a]||[],G=E.makeTickPath(e,H[0],F[0])+E.makeTickPath(e,H[1],F[1]);E.drawTicks(t,e,{vals:k,layer:l[d+"axislayer"],path:G,transFn:M})}var Y=[];if(Y.push(function(){return E.drawLabels(t,e,{vals:b,layer:m,transFn:M,labelFns:E.makeLabelFns(e,y)})}),"multicategory"===e.type){var W={x:2,y:10}[d];Y.push(function(){var r={x:"height",y:"width"}[d],n=Q()[r]+W+(e._tickAngles[p+"tick"]?e.tickfont.size*A:0);return E.drawLabels(t,e,{vals:Z(e,b),layer:m,cls:p+"tick2",repositionOnUpdate:!0,secondary:!0,transFn:M,labelFns:E.makeLabelFns(e,y+n*F[4])})}),Y.push(function(){return e._depth=F[4]*(Q("tick2")[e.side]-y),function(t,e,r){var n=e._id+"divider",a=r.vals,i=r.layer.selectAll("path."+n).data(a,J);i.exit().remove(),i.enter().insert("path",":first-child").classed(n,1).classed("crisp",1).call(u.stroke,e.dividercolor).style("stroke-width",h.crispRound(t,e.dividerwidth,1)+"px"),i.attr("transform",r.transFn).attr("d",r.path)}(t,e,{vals:P,layer:m,path:E.makeTickPath(e,y,F[4],e._depth),transFn:M})})}else e.title.hasOwnProperty("standoff")&&Y.push(function(){e._depth=F[4]*(Q()[e.side]-y)});var X=o.getComponentMethod("rangeslider","isVisible")(e);return Y.push(function(){var r,n,a,s,l=e.side.charAt(0),c=S[e.side].charAt(0),u=E.getPxPosition(t,e),h="outside"===e.ticks?e.ticklen:0;if((e.automargin||X)&&("multicategory"===e.type?r=Q("tick2"):(r=Q(),"x"===d&&"b"===l&&(e._depth=Math.max(r.width>0?r.bottom-u:0,h)))),e.automargin){n={x:0,y:0,r:0,l:0,t:0,b:0};var p=[0,1];if("x"===d){if("b"===l?n[l]=e._depth:(n[l]=e._depth=Math.max(r.width>0?u-r.top:0,h),p.reverse()),r.width>0){var v=r.right-(e._offset+e._length);v>0&&(n.xr=1,n.r=v);var m=e._offset-r.left;m>0&&(n.xl=0,n.l=m)}}else if("l"===l?n[l]=e._depth=Math.max(r.height>0?u-r.left:0,h):(n[l]=e._depth=Math.max(r.height>0?r.right-u:0,h),p.reverse()),r.height>0){var y=r.bottom-(e._offset+e._length);y>0&&(n.yb=0,n.b=y);var x=e._offset-r.top;x>0&&(n.yt=1,n.t=x)}n[g]="free"===e.anchor?e.position:e._anchorAxis.domain[p[0]],e.title.text!==f._dfltTitle[d]&&(n[l]+=K(e)+(e.title.standoff||0)),e.mirror&&"free"!==e.anchor&&((a={x:0,y:0,r:0,l:0,t:0,b:0})[c]=e.linewidth,e.mirror&&!0!==e.mirror&&(a[c]+=h),!0===e.mirror||"ticks"===e.mirror?a[g]=e._anchorAxis.domain[p[1]]:"all"!==e.mirror&&"allticks"!==e.mirror||(a[g]=[e._counterDomainMin,e._counterDomainMax][p[1]]))}X&&(s=o.getComponentMethod("rangeslider","autoMarginOpts")(t,e)),i.autoMargin(t,tt(e),n),i.autoMargin(t,et(e),a),i.autoMargin(t,rt(e),s)}),r.skipTitle||X&&"bottom"===e.side||Y.push(function(){return function(t,e){var r,n=t._fullLayout,a=e._id,i=a.charAt(0),o=e.title.font.size;if(e.title.hasOwnProperty("standoff"))r=e._depth+e.title.standoff+K(e);else{if("multicategory"===e.type)r=e._depth;else{r=10+1.5*o+(e.linewidth?e.linewidth-1:0)}r+="x"===i?"top"===e.side?o*(e.showticklabels?1:0):o*(e.showticklabels?1.5:.5):"right"===e.side?o*(e.showticklabels?1:.5):o*(e.showticklabels?.5:0)}var s,l,u,f,p=E.getPxPosition(t,e);"x"===i?(l=e._offset+e._length/2,u="top"===e.side?p-r:p+r):(u=e._offset+e._length/2,l="right"===e.side?p+r:p-r,s={rotate:"-90",offset:0});if("multicategory"!==e.type){var d=e._selections[e._id+"tick"];if(f={selection:d,side:e.side},d&&d.node()&&d.node().parentNode){var g=h.getTranslate(d.node().parentNode);f.offsetLeft=g.x,f.offsetTop=g.y}e.title.hasOwnProperty("standoff")&&(f.pad=0)}return c.draw(t,a+"title",{propContainer:e,propName:e._name+".title.text",placeholder:n._dfltTitle[i],avoid:f,transform:s,attributes:{x:l,y:u,"text-anchor":"middle"}})}(t,e)}),s.syncOrAsync(Y)}}function Q(t){var r=p+(t||"tick");return w[r]||(w[r]=function(t,e){var r,n,a,i;t._selections[e].size()?(r=1/0,n=-1/0,a=1/0,i=-1/0,t._selections[e].each(function(){var t=$(this),e=h.bBox(t.node().parentNode);r=Math.min(r,e.top),n=Math.max(n,e.bottom),a=Math.min(a,e.left),i=Math.max(i,e.right)})):(r=0,n=0,a=0,i=0);return{top:r,bottom:n,left:a,right:i,height:n-r,width:i-a}}(e,r)),w[r]}},E.getTickSigns=function(t){var e=t._id.charAt(0),r={x:"top",y:"right"}[e],n=t.side===r?1:-1,a=[-1,1,n,-n];return"inside"!==t.ticks==("x"===e)&&(a=a.map(function(t){return-t})),t.side&&a.push({l:-1,t:-1,r:1,b:1}[t.side.charAt(0)]),a},E.makeTransFn=function(t){var e=t._id.charAt(0),r=t._offset;return"x"===e?function(e){return"translate("+(r+t.l2p(e.x))+",0)"}:function(e){return"translate(0,"+(r+t.l2p(e.x))+")"}},E.makeTickPath=function(t,e,r,n){n=void 0!==n?n:t.ticklen;var a=t._id.charAt(0),i=(t.linewidth||1)/2;return"x"===a?"M0,"+(e+i*r)+"v"+n*r:"M"+(e+i*r)+",0h"+n*r},E.makeLabelFns=function(t,e,r){var n=t._id.charAt(0),i="boundaries"!==t.tickson&&"outside"===t.ticks,o=0,l=0;if(i&&(o+=t.ticklen),r&&"outside"===t.ticks){var c=s.deg2rad(r);o=t.ticklen*Math.cos(c)+1,l=t.ticklen*Math.sin(c)}t.showticklabels&&(i||t.showline)&&(o+=.2*t.tickfont.size);var u,h,f,p,d={labelStandoff:o+=(t.linewidth||1)/2,labelShift:l};return"x"===n?(p="bottom"===t.side?1:-1,u=l*p,h=e+o*p,f="bottom"===t.side?1:-.2,d.xFn=function(t){return t.dx+u},d.yFn=function(t){return t.dy+h+t.fontSize*f},d.anchorFn=function(t,e){return a(e)&&0!==e&&180!==e?e*p<0?"end":"start":"middle"},d.heightFn=function(e,r,n){return r<-60||r>60?-.5*n:"top"===t.side?-n:0}):"y"===n&&(p="right"===t.side?1:-1,u=o,h=-l*p,f=90===Math.abs(t.tickangle)?.5:0,d.xFn=function(t){return t.dx+e+(u+t.fontSize*f)*p},d.yFn=function(t){return t.dy+h+t.fontSize*T},d.anchorFn=function(e,r){return a(r)&&90===Math.abs(r)?"middle":"right"===t.side?"start":"end"},d.heightFn=function(e,r,n){return(r*="left"===t.side?1:-1)<-30?-n:r<30?-.5*n:0}),d},E.drawTicks=function(t,e,r){r=r||{};var n=e._id+"tick",a=r.layer.selectAll("path."+n).data(e.ticks?r.vals:[],J);a.exit().remove(),a.enter().append("path").classed(n,1).classed("ticks",1).classed("crisp",!1!==r.crisp).call(u.stroke,e.tickcolor).style("stroke-width",h.crispRound(t,e.tickwidth,1)+"px").attr("d",r.path),a.attr("transform",r.transFn)},E.drawGrid=function(t,e,r){r=r||{};var n=e._id+"grid",a=r.vals,i=r.counterAxis;if(!1===e.showgrid)a=[];else if(i&&E.shouldShowZeroLine(t,e,i))for(var o="array"===e.tickmode,s=0;s<a.length;s++){var l=a[s].x;if(o?!l:Math.abs(l)<e.dtick/100){if(a=a.slice(0,s).concat(a.slice(s+1)),!o)break;s--}}var c=r.layer.selectAll("path."+n).data(a,J);c.exit().remove(),c.enter().append("path").classed(n,1).classed("crisp",!1!==r.crisp),e._gw=h.crispRound(t,e.gridwidth,1),c.attr("transform",r.transFn).attr("d",r.path).call(u.stroke,e.gridcolor||"#ddd").style("stroke-width",e._gw+"px"),"function"==typeof r.path&&c.attr("d",r.path)},E.drawZeroLine=function(t,e,r){r=r||r;var n=e._id+"zl",a=E.shouldShowZeroLine(t,e,r.counterAxis),i=r.layer.selectAll("path."+n).data(a?[{x:0,id:e._id}]:[]);i.exit().remove(),i.enter().append("path").classed(n,1).classed("zl",1).classed("crisp",!1!==r.crisp).each(function(){r.layer.selectAll("path").sort(function(t,e){return C.idSort(t.id,e.id)})}),i.attr("transform",r.transFn).attr("d",r.path).call(u.stroke,e.zerolinecolor||u.defaultLine).style("stroke-width",h.crispRound(t,e.zerolinewidth,e._gw||1)+"px")},E.drawLabels=function(t,e,r){r=r||{};var i=t._fullLayout,o=e._id,c=o.charAt(0),u=r.cls||o+"tick",f=r.vals,p=r.labelFns,d=r.secondary?0:e.tickangle,g=(e._prevTickAngles||{})[u],v=r.layer.selectAll("g."+u).data(e.showticklabels?f:[],J),m=[];function y(t,e){t.each(function(t){var i=n.select(this),o=i.select(".text-math-group"),s=p.anchorFn(t,e),c=r.transFn.call(i.node(),t)+(a(e)&&0!=+e?" rotate("+e+","+p.xFn(t)+","+(p.yFn(t)-t.fontSize/2)+")":""),u=l.lineCount(i),f=A*t.fontSize,d=p.heightFn(t,a(e)?+e:0,(u-1)*f);if(d&&(c+=" translate(0, "+d+")"),o.empty())i.select("text").attr({transform:c,"text-anchor":s});else{var g=h.bBox(o.node()).width*{end:-.5,start:.5}[s];o.attr("transform",c+(g?"translate("+g+",0)":""))}})}v.enter().append("g").classed(u,1).append("text").attr("text-anchor","middle").each(function(e){var r=n.select(this),a=t._promises.length;r.call(l.positionText,p.xFn(e),p.yFn(e)).call(h.font,e.font,e.fontSize,e.fontColor).text(e.text).call(l.convertToTspans,t),t._promises[a]?m.push(t._promises.pop().then(function(){y(r,d)})):y(r,d)}),v.exit().remove(),r.repositionOnUpdate&&v.each(function(t){n.select(this).select("text").call(l.positionText,p.xFn(t),p.yFn(t))}),y(v,g+1?g:d);var x=null;e._selections&&(e._selections[u]=v);var b=[function(){return m.length&&Promise.all(m)}];e.automargin&&i._redrawFromAutoMarginCount&&90===g?(x=90,b.push(function(){y(v,g)})):b.push(function(){if(y(v,d),f.length&&"x"===c&&!a(d)&&("log"!==e.type||"D"!==String(e.dtick).charAt(0))){x=0;var t,n=0,i=[];if(v.each(function(t){n=Math.max(n,t.fontSize);var r=e.l2p(t.x),a=$(this),o=h.bBox(a.node());i.push({top:0,bottom:10,height:10,left:r-o.width/2,right:r+o.width/2+2,width:o.width+2})}),"boundaries"!==e.tickson&&!e.showdividers||r.secondary){var o=f.length,l=Math.abs((f[o-1].x-f[0].x)*e._m)/(o-1)<2.5*n||"multicategory"===e.type;for(t=0;t<i.length-1;t++)if(s.bBoxIntersect(i[t],i[t+1])){x=l?90:30;break}}else{var u=2;for(e.ticks&&(u+=e.tickwidth/2),t=0;t<i.length;t++){var p=f[t].xbnd,g=i[t];if(null!==p[0]&&g.left-e.l2p(p[0])<u||null!==p[1]&&e.l2p(p[1])-g.right<u){x=90;break}}}x&&y(v,x)}}),e._tickAngles&&b.push(function(){e._tickAngles[u]=null===x?a(d)?d:0:x});var _=s.syncOrAsync(b);return _&&_.then&&t._promises.push(_),_},E.getPxPosition=function(t,e){var r,n=t._fullLayout._size,a=e._id.charAt(0),i=e.side;return"free"!==e.anchor?r=e._anchorAxis:"x"===a?r={_offset:n.t+(1-(e.position||0))*n.h,_length:0}:"y"===a&&(r={_offset:n.l+(e.position||0)*n.w,_length:0}),"top"===i||"left"===i?r._offset:"bottom"===i||"right"===i?r._offset+r._length:void 0},E.shouldShowZeroLine=function(t,e,r){var n=s.simpleMap(e.range,e.r2l);return n[0]*n[1]<=0&&e.zeroline&&("linear"===e.type||"-"===e.type)&&!(e.rangebreaks&&e.maskBreaks(0)===w)&&(Q(e,0)||!function(t,e,r,n){var a=r._mainAxis;if(!a)return;var i=t._fullLayout,o=e._id.charAt(0),s=E.counterLetter(e._id),l=e._offset+(Math.abs(n[0])<Math.abs(n[1])==("x"===o)?0:e._length);function c(t){if(!t.showline||!t.linewidth)return!1;var r=Math.max((t.linewidth+e.zerolinewidth)/2,1);function n(t){return"number"==typeof t&&Math.abs(t-l)<r}if(n(t._mainLinePosition)||n(t._mainMirrorPosition))return!0;var a=t._linepositions||{};for(var i in a)if(n(a[i][0])||n(a[i][1]))return!0}var u=i._plots[r._mainSubplot];if(!(u.mainplotinfo||u).overlays.length)return c(r);for(var h=E.list(t,s),f=0;f<h.length;f++){var p=h[f];if(p._mainAxis===a&&c(p))return!0}}(t,e,r,n)||function(t,e){for(var r=t._fullData,n=e._mainSubplot,a=e._id.charAt(0),i=0;i<r.length;i++){var s=r[i];if(!0===s.visible&&s.xaxis+s.yaxis===n){if(o.traceIs(s,"bar-like")&&s.orientation==={x:"h",y:"v"}[a])return!0;if(s.fill&&s.fill.charAt(s.fill.length-1)===a)return!0}}return!1}(t,e))},E.clipEnds=function(t,e){return e.filter(function(e){return Q(t,e.x)})},E.allowAutoMargin=function(t){for(var e=E.list(t,"",!0),r=0;r<e.length;r++){var n=e[r];n.automargin&&(i.allowAutoMargin(t,tt(n)),n.mirror&&i.allowAutoMargin(t,et(n))),o.getComponentMethod("rangeslider","isVisible")(n)&&i.allowAutoMargin(t,rt(n))}},E.swap=function(t,e){for(var r=function(t,e){var r,n,a=[];for(r=0;r<e.length;r++){var i=[],o=t._fullData[e[r]].xaxis,s=t._fullData[e[r]].yaxis;if(o&&s){for(n=0;n<a.length;n++)-1===a[n].x.indexOf(o)&&-1===a[n].y.indexOf(s)||i.push(n);if(i.length){var l,c=a[i[0]];if(i.length>1)for(n=1;n<i.length;n++)l=a[i[n]],nt(c.x,l.x),nt(c.y,l.y);nt(c.x,[o]),nt(c.y,[s])}else a.push({x:[o],y:[s]})}}return a}(t,e),n=0;n<r.length;n++)at(t,r[n].x,r[n].y)}},{"../../components/color":591,"../../components/drawing":612,"../../components/titles":679,"../../constants/alignment":686,"../../constants/numerical":693,"../../lib":717,"../../lib/svg_text_utils":741,"../../plots/plots":826,"../../registry":846,"./autorange":764,"./axis_autotype":766,"./axis_ids":768,"./clean_ticks":770,"./layout_attributes":777,"./set_convert":783,d3:165,"fast-isnumeric":228}],766:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../constants/numerical").BADNUM;e.exports=function(t,e,r){return!(r=r||{}).noMultiCategory&&(o=t,a.isArrayOrTypedArray(o[0])&&a.isArrayOrTypedArray(o[1]))?"multicategory":function(t,e){for(var r=Math.max(1,(t.length-1)/1e3),i=0,o=0,s={},l=0;l<t.length;l+=r){var c=t[Math.round(l)],u=String(c);s[u]||(s[u]=1,a.isDateTime(c,e)&&(i+=1),n(c)&&(o+=1))}return i>2*o}(t,e)?"date":function(t){for(var e=Math.max(1,(t.length-1)/1e3),r=0,n=0,o={},s=0;s<t.length;s+=e){var l=t[Math.round(s)],c=String(l);o[c]||(o[c]=1,"boolean"==typeof l?n++:a.cleanNumber(l)!==i?r++:"string"==typeof l&&n++)}return n>2*r}(t)?"category":function(t){if(!t)return!1;for(var e=0;e<t.length;e++)if(n(t[e]))return!0;return!1}(t)?"linear":"-";var o}},{"../../constants/numerical":693,"../../lib":717,"fast-isnumeric":228}],767:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../registry"),i=t("../../lib"),o=t("../array_container_defaults"),s=t("./layout_attributes"),l=t("./tick_value_defaults"),c=t("./tick_mark_defaults"),u=t("./tick_label_defaults"),h=t("./category_order_defaults"),f=t("./line_grid_defaults"),p=t("./set_convert"),d=t("./constants").WEEKDAY_PATTERN,g=t("./constants").HOUR_PATTERN;function v(t,e,r){function a(r,n){return i.coerce(t,e,s.rangebreaks,r,n)}if(a("enabled")){var o=a("bounds");if(o&&o.length>=2){var l,c,u="";if(2===o.length)for(l=0;l<2;l++)if(c=y(o[l])){u=d;break}var h=a("pattern",u);if(h===d)for(l=0;l<2;l++)(c=y(o[l]))&&(e.bounds[l]=o[l]=c-1);if(h)for(l=0;l<2;l++)switch(c=o[l],h){case d:if(!n(c))return void(e.enabled=!1);if((c=+c)!==Math.floor(c)||c<0||c>=7)return void(e.enabled=!1);e.bounds[l]=o[l]=c;break;case g:if(!n(c))return void(e.enabled=!1);if((c=+c)<0||c>24)return void(e.enabled=!1);e.bounds[l]=o[l]=c}if(!1===r.autorange){var f=r.range;if(f[0]<f[1]){if(o[0]<f[0]&&o[1]>f[1])return void(e.enabled=!1)}else if(o[0]>f[0]&&o[1]<f[1])return void(e.enabled=!1)}}else{var p=a("values");if(!p||!p.length)return void(e.enabled=!1);a("dvalue")}}}e.exports=function(t,e,r,n,g){var m=n.letter,y=n.font||{},x=n.splomStash||{},b=r("visible",!n.visibleDflt),_=e._template||{},w=e.type||_.type||"-";"date"===w&&a.getComponentMethod("calendars","handleDefaults")(t,e,"calendar",n.calendar);p(e,g);var k=!e.isValidRange(t.range);k&&n.reverseDflt&&(k="reversed"),!r("autorange",k)||"linear"!==w&&"-"!==w||r("rangemode"),r("range"),e.cleanRange(),h(t,e,r,n),"category"===w||n.noHover||r("hoverformat");var T=r("color"),M=T!==s.color.dflt?T:y.color,A=x.label||g._dfltTitle[m];if(u(t,e,r,w,n,{pass:1}),!b)return e;r("title.text",A),i.coerceFont(r,"title.font",{family:y.family,size:Math.round(1.2*y.size),color:M}),l(t,e,r,w),u(t,e,r,w,n,{pass:2}),c(t,e,r,n),f(t,e,r,{dfltColor:T,bgColor:n.bgColor,showGrid:n.showGrid,attributes:s}),(e.showline||e.ticks)&&r("mirror"),n.automargin&&r("automargin");var S,E="multicategory"===w;n.noTickson||"category"!==w&&!E||!e.ticks&&!e.showgrid||(E&&(S="boundaries"),r("tickson",S));E&&(r("showdividers")&&(r("dividercolor"),r("dividerwidth")));if("date"===w)if(o(t,e,{name:"rangebreaks",inclusionAttr:"enabled",handleItemDefaults:v}),e.rangebreaks.length){for(var L=0;L<e.rangebreaks.length;L++)if(e.rangebreaks[L].pattern===d){e._hasDayOfWeekBreaks=!0;break}if(p(e,g),g._has("scattergl")||g._has("splom"))for(var C=0;C<n.data.length;C++){var P=n.data[C];"scattergl"!==P.type&&"splom"!==P.type||(P.visible=!1,i.warn(P.type+" traces do not work on axes with rangebreaks. Setting trace "+P.index+" to `visible: false`."))}}else delete e.rangebreaks;return e};var m={sun:1,mon:2,tue:3,wed:4,thu:5,fri:6,sat:7};function y(t){if("string"==typeof t)return m[t.substr(0,3).toLowerCase()]}},{"../../lib":717,"../../registry":846,"../array_container_defaults":761,"./category_order_defaults":769,"./constants":771,"./layout_attributes":777,"./line_grid_defaults":779,"./set_convert":783,"./tick_label_defaults":784,"./tick_mark_defaults":785,"./tick_value_defaults":786,"fast-isnumeric":228}],768:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("./constants");r.id2name=function(t){if("string"==typeof t&&t.match(a.AX_ID_PATTERN)){var e=t.substr(1);return"1"===e&&(e=""),t.charAt(0)+"axis"+e}},r.name2id=function(t){if(t.match(a.AX_NAME_PATTERN)){var e=t.substr(5);return"1"===e&&(e=""),t.charAt(0)+e}},r.cleanId=function(t,e){if(t.match(a.AX_ID_PATTERN)&&(!e||t.charAt(0)===e)){var r=t.substr(1).replace(/^0+/,"");return"1"===r&&(r=""),t.charAt(0)+r}},r.list=function(t,e,n){var a=t._fullLayout;if(!a)return[];var i,o=r.listIds(t,e),s=new Array(o.length);for(i=0;i<o.length;i++){var l=o[i];s[i]=a[l.charAt(0)+"axis"+l.substr(1)]}if(!n){var c=a._subplots.gl3d||[];for(i=0;i<c.length;i++){var u=a[c[i]];e?s.push(u[e+"axis"]):s.push(u.xaxis,u.yaxis,u.zaxis)}}return s},r.listIds=function(t,e){var r=t._fullLayout;if(!r)return[];var n=r._subplots;return e?n[e+"axis"]:n.xaxis.concat(n.yaxis)},r.getFromId=function(t,e,n){var a=t._fullLayout;return"x"===n?e=e.replace(/y[0-9]*/,""):"y"===n&&(e=e.replace(/x[0-9]*/,"")),a[r.id2name(e)]},r.getFromTrace=function(t,e,a){var i=t._fullLayout,o=null;if(n.traceIs(e,"gl3d")){var s=e.scene;"scene"===s.substr(0,5)&&(o=i[s][a+"axis"])}else o=r.getFromId(t,e[a+"axis"]||a);return o},r.idSort=function(t,e){var r=t.charAt(0),n=e.charAt(0);return r!==n?r>n?1:-1:+(t.substr(1)||1)-+(e.substr(1)||1)},r.getAxisGroup=function(t,e){for(var r=t._axisMatchGroups,n=0;n<r.length;n++){if(r[n][e])return"g"+n}return e}},{"../../registry":846,"./constants":771}],769:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){if("category"===e.type){var a,i=t.categoryarray,o=Array.isArray(i)&&i.length>0;o&&(a="array");var s,l=r("categoryorder",a);"array"===l&&(s=r("categoryarray")),o||"array"!==l||(l=e.categoryorder="trace"),"trace"===l?e._initialCategories=[]:"array"===l?e._initialCategories=s.slice():(s=function(t,e){var r,n,a,i=e.dataAttr||t._id.charAt(0),o={};if(e.axData)r=e.axData;else for(r=[],n=0;n<e.data.length;n++){var s=e.data[n];s[i+"axis"]===t._id&&r.push(s)}for(n=0;n<r.length;n++){var l=r[n][i];for(a=0;a<l.length;a++){var c=l[a];null!=c&&(o[c]=1)}}return Object.keys(o)}(e,n).sort(),"category ascending"===l?e._initialCategories=s:"category descending"===l&&(e._initialCategories=s.reverse()))}}},{}],770:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../constants/numerical").ONEDAY;r.dtick=function(t,e){var r="log"===e,a="date"===e,o="category"===e,s=a?i:1;if(!t)return s;if(n(t))return(t=Number(t))<=0?s:o?Math.max(1,Math.round(t)):a?Math.max(.1,t):t;if("string"!=typeof t||!a&&!r)return s;var l=t.charAt(0),c=t.substr(1);return(c=n(c)?Number(c):0)<=0||!(a&&"M"===l&&c===Math.round(c)||r&&"L"===l||r&&"D"===l&&(1===c||2===c))?s:t},r.tick0=function(t,e,r,i){return"date"===e?a.cleanDate(t,a.dateTick0(r)):"D1"!==i&&"D2"!==i?n(t)?Number(t):0:void 0}},{"../../constants/numerical":693,"../../lib":717,"fast-isnumeric":228}],771:[function(t,e,r){"use strict";var n=t("../../lib/regex").counter;e.exports={idRegex:{x:n("x"),y:n("y")},attrRegex:n("[xy]axis"),xAxisMatch:n("xaxis"),yAxisMatch:n("yaxis"),AX_ID_PATTERN:/^[xyz][0-9]*$/,AX_NAME_PATTERN:/^[xyz]axis[0-9]*$/,SUBPLOT_PATTERN:/^x([0-9]*)y([0-9]*)$/,HOUR_PATTERN:"hour",WEEKDAY_PATTERN:"day of week",MINDRAG:8,MINSELECT:12,MINZOOM:20,DRAGGERSIZE:20,BENDPX:1.5,REDRAWDELAY:50,SELECTDELAY:100,SELECTID:"-select",DFLTRANGEX:[-1,6],DFLTRANGEY:[-1,4],traceLayerClasses:["imagelayer","heatmaplayer","contourcarpetlayer","contourlayer","funnellayer","waterfalllayer","barlayer","carpetlayer","violinlayer","boxlayer","ohlclayer","scattercarpetlayer","scatterlayer"],clipOnAxisFalseQuery:[".scatterlayer",".barlayer",".funnellayer",".waterfalllayer"],layerValue2layerClass:{"above traces":"above","below traces":"below"}}},{"../../lib/regex":733}],772:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./axis_ids").id2name,i=t("./scale_zoom"),o=t("./autorange").makePadFn,s=t("./autorange").concatExtremes,l=t("../../constants/numerical").ALMOST_EQUAL,c=t("../../constants/alignment").FROM_BL;function u(t,e,r,n,i){var o,s,l,c,u="range"!==i,h=n[a(e)].type,f=[];for(s=0;s<r.length;s++)if((l=r[s])!==e&&(c=n[a(l)]).type===h)if(c.fixedrange){if(u&&c.anchor){n[a(c.anchor)].fixedrange&&f.push(l)}}else f.push(l);for(o=0;o<t.length;o++)if(t[o][e]){var p=t[o],d=[];for(s=0;s<f.length;s++)p[l=f[s]]||d.push(l);return{linkableAxes:d,thisGroup:p}}return{linkableAxes:f,thisGroup:null}}function h(t,e,r,n,a){var i,o,s,l,c;null===e?((e={})[r]=1,c=t.length,t.push(e)):c=t.indexOf(e);var u=Object.keys(e);for(i=0;i<t.length;i++)if(s=t[i],i!==c&&s[n]){var h=s[n];for(o=0;o<u.length;o++)s[l=u[o]]=h*a*e[l];return void t.splice(c,1)}if(1!==a)for(o=0;o<u.length;o++)e[u[o]]*=a;e[n]=1}function f(t,e){var r=t._inputDomain,n=c[t.constraintoward],a=r[0]+(r[1]-r[0])*n;t.domain=t._input.domain=[a+(r[0]-a)/e,a+(r[1]-a)/e],t.setScale()}r.handleConstraintDefaults=function(t,e,r,a){var i,o,s,l,c=a.allAxisIds,f=a.layoutOut,p=a.scaleanchorDflt,d=a.constrainDflt,g=f._axisConstraintGroups,v=f._axisMatchGroups,m=e._id,y=m.charAt(0),x=((f._splomAxes||{})[y]||{})[m]||{},b=e._id,_=b.charAt(0),w=r("constrain",d);if(n.coerce(t,e,{constraintoward:{valType:"enumerated",values:"x"===_?["left","center","right"]:["bottom","middle","top"],dflt:"x"===_?"center":"middle"}},"constraintoward"),!t.matches&&!x.matches||e.fixedrange||(o=u(v,b,c,f),i=n.coerce(t,e,{matches:{valType:"enumerated",values:o.linkableAxes||[],dflt:x.matches}},"matches")),i||e.fixedrange&&"domain"!==w||!t.scaleanchor&&!p||(l=u(g,b,c,f,w),s=n.coerce(t,e,{scaleanchor:{valType:"enumerated",values:l.linkableAxes||[]}},"scaleanchor",p)),i?(delete e.constrain,h(v,o.thisGroup,b,i,1)):-1!==c.indexOf(t.matches)&&n.warn("ignored "+e._name+'.matches: "'+t.matches+'" to avoid either an infinite loop or because the target axis has fixed range.'),s){var k=r("scaleratio");k||(k=e.scaleratio=1),h(g,l.thisGroup,b,s,k)}else-1!==c.indexOf(t.scaleanchor)&&n.warn("ignored "+e._name+'.scaleanchor: "'+t.scaleanchor+'" to avoid either an infinite loop and possibly inconsistent scaleratios, or because the target axis has fixed range or this axis declares a *matches* constraint.')},r.enforce=function(t){var e,r,n,c,u,h,p,d=t._fullLayout,g=d._axisConstraintGroups||[];for(e=0;e<g.length;e++){var v=g[e],m=Object.keys(v),y=1/0,x=0,b=1/0,_={},w={},k=!1;for(r=0;r<m.length;r++)w[n=m[r]]=c=d[a(n)],c._inputDomain?c.domain=c._inputDomain.slice():c._inputDomain=c.domain.slice(),c._inputRange||(c._inputRange=c.range.slice()),c.setScale(),_[n]=u=Math.abs(c._m)/v[n],y=Math.min(y,u),"domain"!==c.constrain&&c._constraintShrinkable||(b=Math.min(b,u)),delete c._constraintShrinkable,x=Math.max(x,u),"domain"===c.constrain&&(k=!0);if(!(y>l*x)||k)for(r=0;r<m.length;r++)if(u=_[n=m[r]],h=(c=w[n]).constrain,u!==b||"domain"===h)if(p=u/b,"range"===h)i(c,p);else{var T=c._inputDomain,M=(c.domain[1]-c.domain[0])/(T[1]-T[0]),A=(c.r2l(c.range[1])-c.r2l(c.range[0]))/(c.r2l(c._inputRange[1])-c.r2l(c._inputRange[0]));if((p/=M)*A<1){c.domain=c._input.domain=T.slice(),i(c,p);continue}if(A<1&&(c.range=c._input.range=c._inputRange.slice(),p*=A),c.autorange){var S=c.r2l(c.range[0]),E=c.r2l(c.range[1]),L=(S+E)/2,C=L,P=L,O=Math.abs(E-L),z=L-O*p*1.0001,I=L+O*p*1.0001,D=o(c);f(c,p);var R,F,B=Math.abs(c._m),N=s(t,c),j=N.min,V=N.max;for(F=0;F<j.length;F++)(R=j[F].val-D(j[F])/B)>z&&R<C&&(C=R);for(F=0;F<V.length;F++)(R=V[F].val+D(V[F])/B)<I&&R>P&&(P=R);p/=(P-C)/(2*O),C=c.l2r(C),P=c.l2r(P),c.range=c._input.range=S<E?[C,P]:[P,C]}f(c,p)}}},r.clean=function(t,e){if(e._inputDomain){for(var r=!1,n=e._id,a=t._fullLayout._axisConstraintGroups,i=0;i<a.length;i++)if(a[i][n]){r=!0;break}r&&"domain"===e.constrain||(e._input.domain=e.domain=e._inputDomain,delete e._inputDomain)}}},{"../../constants/alignment":686,"../../constants/numerical":693,"../../lib":717,"./autorange":764,"./axis_ids":768,"./scale_zoom":781}],773:[function(t,e,r){"use strict";var n=t("d3"),a=t("tinycolor2"),i=t("has-passive-events"),o=t("../../registry"),s=t("../../lib"),l=t("../../lib/svg_text_utils"),c=t("../../components/color"),u=t("../../components/drawing"),h=t("../../components/fx"),f=t("./axes"),p=t("../../lib/setcursor"),d=t("../../components/dragelement"),g=t("../../constants/alignment").FROM_TL,v=t("../../lib/clear_gl_canvases"),m=t("../../plot_api/subroutines").redrawReglTraces,y=t("../plots"),x=t("./axis_ids").getFromId,b=t("./select").prepSelect,_=t("./select").clearSelect,w=t("./select").selectOnClick,k=t("./scale_zoom"),T=t("./constants"),M=T.MINDRAG,A=T.MINZOOM,S=!0;function E(t,e,r,n){var a=s.ensureSingle(t.draglayer,e,r,function(e){e.classed("drag",!0).style({fill:"transparent","stroke-width":0}).attr("data-subplot",t.id)});return a.call(p,n),a.node()}function L(t,e,r,a,i,o,s){var l=E(t,"rect",e,r);return n.select(l).call(u.setRect,a,i,o,s),l}function C(t,e){for(var r=0;r<t.length;r++)if(!t[r].fixedrange)return e;return""}function P(t,e,r,n,a){for(var i=0;i<t.length;i++){var o=t[i];if(!o.fixedrange)if(o.rangebreaks){var s="y"===o._id.charAt(0),l=s?1-e:e,c=s?1-r:r;n[o._name+".range[0]"]=o.l2r(o.p2l(l*o._length)),n[o._name+".range[1]"]=o.l2r(o.p2l(c*o._length))}else{var u=o._rl[0],h=o._rl[1]-u;n[o._name+".range[0]"]=o.l2r(u+h*e),n[o._name+".range[1]"]=o.l2r(u+h*r)}}if(a&&a.length){var f=(e+(1-r))/2;P(a,f,1-f,n,[])}}function O(t,e){for(var r=0;r<t.length;r++){var n=t[r];if(!n.fixedrange)if(n.rangebreaks){var a=n._length,i=(n.p2l(0+e)-n.p2l(0)+(n.p2l(a+e)-n.p2l(a)))/2;n.range=[n.l2r(n._rl[0]-i),n.l2r(n._rl[1]-i)]}else n.range=[n.l2r(n._rl[0]-e/n._m),n.l2r(n._rl[1]-e/n._m)]}}function z(t){return 1-(t>=0?Math.min(t,.9):1/(1/Math.max(t,-.3)+3.222))}function I(t,e,r,n,a){return t.append("path").attr("class","zoombox").style({fill:e>.2?"rgba(0,0,0,0)":"rgba(255,255,255,0)","stroke-width":0}).attr("transform","translate("+r+", "+n+")").attr("d",a+"Z")}function D(t,e,r){return t.append("path").attr("class","zoombox-corners").style({fill:c.background,stroke:c.defaultLine,"stroke-width":1,opacity:0}).attr("transform","translate("+e+", "+r+")").attr("d","M0,0Z")}function R(t,e,r,n,a,i){t.attr("d",n+"M"+r.l+","+r.t+"v"+r.h+"h"+r.w+"v-"+r.h+"h-"+r.w+"Z"),F(t,e,a,i)}function F(t,e,r,n){r||(t.transition().style("fill",n>.2?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.3)").duration(200),e.transition().style("opacity",1).duration(200))}function B(t){n.select(t).selectAll(".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners").remove()}function N(t){S&&t.data&&t._context.showTips&&(s.notifier(s._(t,"Double-click to zoom back out"),"long"),S=!1)}function j(t){return"lasso"===t||"select"===t}function V(t){var e=Math.floor(Math.min(t.b-t.t,t.r-t.l,A)/2);return"M"+(t.l-3.5)+","+(t.t-.5+e)+"h3v"+-e+"h"+e+"v-3h-"+(e+3)+"ZM"+(t.r+3.5)+","+(t.t-.5+e)+"h-3v"+-e+"h"+-e+"v-3h"+(e+3)+"ZM"+(t.r+3.5)+","+(t.b+.5-e)+"h-3v"+e+"h"+-e+"v3h"+(e+3)+"ZM"+(t.l-3.5)+","+(t.b+.5-e)+"h3v"+e+"h"+e+"v3h-"+(e+3)+"Z"}function U(t,e,r,n){for(var a,i,o,l,c=!1,u={},h={},f=0;f<e.length;f++){var p=e[f];for(a in r)if(p[a]){for(o in p)("x"===o.charAt(0)?r:n)[o]||(u[o]=a);for(i in n)p[i]&&(c=!0)}for(i in n)if(p[i])for(l in p)("x"===l.charAt(0)?r:n)[l]||(h[l]=i)}c&&(s.extendFlat(u,h),h={});var d={},g=[];for(o in u){var v=x(t,o);g.push(v),d[v._id]=v}var m={},y=[];for(l in h){var b=x(t,l);y.push(b),m[b._id]=b}return{xaHash:d,yaHash:m,xaxes:g,yaxes:y,xLinks:u,yLinks:h,isSubplotConstrained:c}}function q(t,e){if(i){var r=void 0!==t.onwheel?"wheel":"mousewheel";t._onwheel&&t.removeEventListener(r,t._onwheel),t._onwheel=e,t.addEventListener(r,e,{passive:!1})}else void 0!==t.onwheel?t.onwheel=e:void 0!==t.onmousewheel&&(t.onmousewheel=e)}function H(t){var e=[];for(var r in t)e.push(t[r]);return e}e.exports={makeDragBox:function(t,e,r,i,c,p,S,E){var F,G,Y,W,X,Z,J,K,Q,$,tt,et,rt,nt,at,it,ot,st,lt,ct,ut,ht=t._fullLayout._zoomlayer,ft=S+E==="nsew",pt=1===(S+E).length;function dt(){if(F=e.xaxis,G=e.yaxis,Q=F._length,$=G._length,J=F._offset,K=G._offset,(Y={})[F._id]=F,(W={})[G._id]=G,S&&E)for(var r=e.overlays,n=0;n<r.length;n++){var a=r[n].xaxis;Y[a._id]=a;var i=r[n].yaxis;W[i._id]=i}X=H(Y),Z=H(W),rt=C(X,E),nt=C(Z,S),at=!nt&&!rt,tt=U(t,t._fullLayout._axisConstraintGroups,Y,W),et=U(t,t._fullLayout._axisMatchGroups,Y,W),it=E||tt.isSubplotConstrained||et.isSubplotConstrained,ot=S||tt.isSubplotConstrained||et.isSubplotConstrained;var o=t._fullLayout;st=o._has("scattergl"),lt=o._has("splom"),ct=o._has("svg")}dt();var gt=function(t,e,r){return t?"nsew"===t?r?"":"pan"===e?"move":"crosshair":t.toLowerCase()+"-resize":"pointer"}(nt+rt,t._fullLayout.dragmode,ft),vt=L(e,S+E+"drag",gt,r,i,c,p);if(at&&!ft)return vt.onmousedown=null,vt.style.pointerEvents="none",vt;var mt,yt,xt,bt,_t,wt,kt,Tt,Mt,At,St={element:vt,gd:t,plotinfo:e};function Et(){St.plotinfo.selection=!1,_(t)}function Lt(r,a){var i=t._fullLayout.clickmode;if(B(t),2!==r||pt||function(){if(!t._transitioningWithDuration){var e=t._context.doubleClick,r=[];rt&&(r=r.concat(X)),nt&&(r=r.concat(Z)),et.xaxes&&(r=r.concat(et.xaxes)),et.yaxes&&(r=r.concat(et.yaxes));var n,a,i,s={};if("reset+autosize"===e)for(e="autosize",a=0;a<r.length;a++)if((n=r[a])._rangeInitial&&(n.range[0]!==n._rangeInitial[0]||n.range[1]!==n._rangeInitial[1])||!n._rangeInitial&&!n.autorange){e="reset";break}if("autosize"===e)for(a=0;a<r.length;a++)(n=r[a]).fixedrange||(s[n._name+".autorange"]=!0);else if("reset"===e)for((rt||tt.isSubplotConstrained)&&(r=r.concat(tt.xaxes)),nt&&!tt.isSubplotConstrained&&(r=r.concat(tt.yaxes)),tt.isSubplotConstrained&&(rt?nt||(r=r.concat(Z)):r=r.concat(X)),a=0;a<r.length;a++)(n=r[a]).fixedrange||(n._rangeInitial?(i=n._rangeInitial,s[n._name+".range[0]"]=i[0],s[n._name+".range[1]"]=i[1]):s[n._name+".autorange"]=!0);t.emit("plotly_doubleclick",null),o.call("_guiRelayout",t,s)}}(),ft)i.indexOf("select")>-1&&w(a,t,X,Z,e.id,St),i.indexOf("event")>-1&&h.click(t,a,e.id);else if(1===r&&pt){var s=S?G:F,c="s"===S||"w"===E?0:1,u=s._name+".range["+c+"]",f=function(t,e){var r,a=t.range[e],i=Math.abs(a-t.range[1-e]);return"date"===t.type?a:"log"===t.type?(r=Math.ceil(Math.max(0,-Math.log(i)/Math.LN10))+3,n.format("."+r+"g")(Math.pow(10,a))):(r=Math.floor(Math.log(Math.abs(a))/Math.LN10)-Math.floor(Math.log(i)/Math.LN10)+4,n.format("."+String(r)+"g")(a))}(s,c),p="left",d="middle";if(s.fixedrange)return;S?(d="n"===S?"top":"bottom","right"===s.side&&(p="right")):"e"===E&&(p="right"),t._context.showAxisRangeEntryBoxes&&n.select(vt).call(l.makeEditable,{gd:t,immediate:!0,background:t._fullLayout.paper_bgcolor,text:String(f),fill:s.tickfont?s.tickfont.color:"#444",horizontalAlign:p,verticalAlign:d}).on("edit",function(e){var r=s.d2r(e);void 0!==r&&o.call("_guiRelayout",t,u,r)})}}function Ct(e,r){if(t._transitioningWithDuration)return!1;var n=Math.max(0,Math.min(Q,e+mt)),a=Math.max(0,Math.min($,r+yt)),i=Math.abs(n-mt),o=Math.abs(a-yt);function s(){kt="",xt.r=xt.l,xt.t=xt.b,Mt.attr("d","M0,0Z")}if(xt.l=Math.min(mt,n),xt.r=Math.max(mt,n),xt.t=Math.min(yt,a),xt.b=Math.max(yt,a),tt.isSubplotConstrained)i>A||o>A?(kt="xy",i/Q>o/$?(o=i*$/Q,yt>a?xt.t=yt-o:xt.b=yt+o):(i=o*Q/$,mt>n?xt.l=mt-i:xt.r=mt+i),Mt.attr("d",V(xt))):s();else if(et.isSubplotConstrained)if(i>A||o>A){kt="xy";var l=Math.min(xt.l/Q,($-xt.b)/$),c=Math.max(xt.r/Q,($-xt.t)/$);xt.l=l*Q,xt.r=c*Q,xt.b=(1-l)*$,xt.t=(1-c)*$,Mt.attr("d",V(xt))}else s();else!nt||o<Math.min(Math.max(.6*i,M),A)?i<M||!rt?s():(xt.t=0,xt.b=$,kt="x",Mt.attr("d",function(t,e){return"M"+(t.l-.5)+","+(e-A-.5)+"h-3v"+(2*A+1)+"h3ZM"+(t.r+.5)+","+(e-A-.5)+"h3v"+(2*A+1)+"h-3Z"}(xt,yt))):!rt||i<Math.min(.6*o,A)?(xt.l=0,xt.r=Q,kt="y",Mt.attr("d",function(t,e){return"M"+(e-A-.5)+","+(t.t-.5)+"v-3h"+(2*A+1)+"v3ZM"+(e-A-.5)+","+(t.b+.5)+"v3h"+(2*A+1)+"v-3Z"}(xt,mt))):(kt="xy",Mt.attr("d",V(xt)));xt.w=xt.r-xt.l,xt.h=xt.b-xt.t,kt&&(At=!0),t._dragged=At,R(Tt,Mt,xt,_t,wt,bt),Pt(),t.emit("plotly_relayouting",ut),wt=!0}function Pt(){ut={},"xy"!==kt&&"x"!==kt||(P(X,xt.l/Q,xt.r/Q,ut,tt.xaxes),Bt("x",ut)),"xy"!==kt&&"y"!==kt||(P(Z,($-xt.b)/$,($-xt.t)/$,ut,tt.yaxes),Bt("y",ut))}function Ot(){Pt(),B(t),jt(),N(t)}St.prepFn=function(e,r,n){var i=St.dragmode,o=t._fullLayout.dragmode;o!==i&&(St.dragmode=o),dt(),at||(ft?e.shiftKey?"pan"===o?o="zoom":j(o)||(o="pan"):e.ctrlKey&&(o="pan"):o="pan"),St.minDrag="lasso"===o?1:void 0,j(o)?(St.xaxes=X,St.yaxes=Z,b(e,r,n,St,o)):(St.clickFn=Lt,j(i)&&Et(),at||("zoom"===o?(St.moveFn=Ct,St.doneFn=Ot,St.minDrag=1,function(e,r,n){var i=vt.getBoundingClientRect();mt=r-i.left,yt=n-i.top,xt={l:mt,r:mt,w:0,t:yt,b:yt,h:0},bt=t._hmpixcount?t._hmlumcount/t._hmpixcount:a(t._fullLayout.plot_bgcolor).getLuminance(),wt=!1,kt="xy",At=!1,Tt=I(ht,bt,J,K,_t="M0,0H"+Q+"V"+$+"H0V0"),Mt=D(ht,J,K)}(0,r,n)):"pan"===o&&(St.moveFn=Ft,St.doneFn=jt))),t._fullLayout._redrag=function(){var e=t._dragdata;e&&e.element===vt&&(j(t._fullLayout.dragmode)||(dt(),Vt([0,0,Q,$]),St.moveFn(e.dx,e.dy)))}},d.init(St);var zt=[0,0,Q,$],It=null,Dt=T.REDRAWDELAY,Rt=e.mainplot?t._fullLayout._plots[e.mainplot]:e;function Ft(e,r){if(!t._transitioningWithDuration){if(t._fullLayout._replotting=!0,"ew"===rt||"ns"===nt)return rt&&(O(X,e),Bt("x")),nt&&(O(Z,r),Bt("y")),Vt([rt?-e:0,nt?-r:0,Q,$]),Nt(),void t.emit("plotly_relayouting",ut);if(tt.isSubplotConstrained&&rt&&nt){var n="w"===rt==("n"===nt)?1:-1,a=(e/Q+n*r/$)/2;e=a*Q,r=n*a*$}"w"===rt?e=l(X,0,e):"e"===rt?e=l(X,1,-e):rt||(e=0),"n"===nt?r=l(Z,1,r):"s"===nt?r=l(Z,0,-r):nt||(r=0);var i="w"===rt?e:0,o="n"===nt?r:0;if(tt.isSubplotConstrained){var s;if(!rt&&1===nt.length){for(s=0;s<X.length;s++)X[s].range=X[s]._r.slice(),k(X[s],1-r/$);i=(e=r*Q/$)/2}if(!nt&&1===rt.length){for(s=0;s<Z.length;s++)Z[s].range=Z[s]._r.slice(),k(Z[s],1-e/Q);o=(r=e*$/Q)/2}}Bt("x"),Bt("y"),Vt([i,o,Q-e,$-r]),Nt(),t.emit("plotly_relayouting",ut)}function l(t,e,r){for(var n,a,i=1-e,o=0;o<t.length;o++){var s=t[o];if(!s.fixedrange){n=s,a=s._rl[i]+(s._rl[e]-s._rl[i])/z(r/s._length);var l=s.l2r(a);!1!==l&&void 0!==l&&(s.range[e]=l)}}return n._length*(n._rl[e]-a)/(n._rl[e]-n._rl[i])}}function Bt(t,e){for(var r=et.isSubplotConstrained?{x:Z,y:X}[t]:et[t+"axes"],n=et.isSubplotConstrained?{x:X,y:Z}[t]:[],a=0;a<r.length;a++){var i=r[a],o=i._id,s=et.xLinks[o]||et.yLinks[o],l=n[0]||Y[s]||W[s];l&&(e?(e[i._name+".range[0]"]=e[l._name+".range[0]"],e[i._name+".range[1]"]=e[l._name+".range[1]"]):i.range=l.range.slice())}}function Nt(){var e,r=[];function n(t){for(e=0;e<t.length;e++)t[e].fixedrange||r.push(t[e]._id)}for(it&&(n(X),n(tt.xaxes),n(et.xaxes)),ot&&(n(Z),n(tt.yaxes),n(et.yaxes)),ut={},e=0;e<r.length;e++){var a=r[e],i=x(t,a);f.drawOne(t,i,{skipTitle:!0}),ut[i._name+".range[0]"]=i.range[0],ut[i._name+".range[1]"]=i.range[1]}f.redrawComponents(t,r)}function jt(){Vt([0,0,Q,$]),s.syncOrAsync([y.previousPromises,function(){t._fullLayout._replotting=!1,o.call("_guiRelayout",t,ut)}],t)}function Vt(e){var r,n,a,i,l=t._fullLayout,c=l._plots,h=l._subplots.cartesian;if(lt&&o.subplotsRegistry.splom.drag(t),st)for(r=0;r<h.length;r++)if(a=(n=c[h[r]]).xaxis,i=n.yaxis,n._scene){var f=s.simpleMap(a.range,a.r2l),p=s.simpleMap(i.range,i.r2l);n._scene.update({range:[f[0],p[0],f[1],p[1]]})}if((lt||st)&&(v(t),m(t)),ct){var d=e[2]/F._length,g=e[3]/G._length;for(r=0;r<h.length;r++){a=(n=c[h[r]]).xaxis,i=n.yaxis;var y,x,b,_,w=it&&!a.fixedrange&&Y[a._id],k=ot&&!i.fixedrange&&W[i._id];if(w?(y=d,b=E?e[0]:Ht(a,y)):et.xaHash[a._id]?(y=d,b=e[0]*a._length/F._length):et.yaHash[a._id]?(y=g,b="ns"===nt?-e[1]*a._length/G._length:Ht(a,y,{n:"top",s:"bottom"}[nt])):b=qt(a,y=Ut(a,d,g)),k?(x=g,_=S?e[1]:Ht(i,x)):et.yaHash[i._id]?(x=g,_=e[1]*i._length/G._length):et.xaHash[i._id]?(x=d,_="ew"===rt?-e[0]*i._length/F._length:Ht(i,x,{e:"right",w:"left"}[rt])):_=qt(i,x=Ut(i,d,g)),y||x){y||(y=1),x||(x=1);var T=a._offset-b/y,M=i._offset-_/x;n.clipRect.call(u.setTranslate,b,_).call(u.setScale,y,x),n.plot.call(u.setTranslate,T,M).call(u.setScale,1/y,1/x),y===n.xScaleFactor&&x===n.yScaleFactor||(u.setPointGroupScale(n.zoomScalePts,y,x),u.setTextPointsScale(n.zoomScaleTxt,y,x)),u.hideOutsideRangePoints(n.clipOnAxisFalseTraces,n),n.xScaleFactor=y,n.yScaleFactor=x}}}}function Ut(t,e,r){return t.fixedrange?0:it&&tt.xaHash[t._id]?e:ot&&(tt.isSubplotConstrained?tt.xaHash:tt.yaHash)[t._id]?r:0}function qt(t,e){return e?(t.range=t._r.slice(),k(t,e),Ht(t,e)):0}function Ht(t,e,r){return t._length*(1-e)*g[r||t.constraintoward||"middle"]}return S.length*E.length!=1&&q(vt,function(e){if(t._context._scrollZoom.cartesian||t._fullLayout._enablescrollzoom){if(Et(),t._transitioningWithDuration)return e.preventDefault(),void e.stopPropagation();dt(),clearTimeout(It);var r=-e.deltaY;if(isFinite(r)||(r=e.wheelDelta/10),isFinite(r)){var n,a=Math.exp(-Math.min(Math.max(r,-20),20)/200),i=Rt.draglayer.select(".nsewdrag").node().getBoundingClientRect(),o=(e.clientX-i.left)/i.width,l=(i.bottom-e.clientY)/i.height;if(it){for(E||(o=.5),n=0;n<X.length;n++)c(X[n],o,a);Bt("x"),zt[2]*=a,zt[0]+=zt[2]*o*(1/a-1)}if(ot){for(S||(l=.5),n=0;n<Z.length;n++)c(Z[n],l,a);Bt("y"),zt[3]*=a,zt[1]+=zt[3]*(1-l)*(1/a-1)}Vt(zt),Nt(),t.emit("plotly_relayouting",ut),It=setTimeout(function(){zt=[0,0,Q,$],jt()},Dt),e.preventDefault()}else s.log("Did not find wheel motion attributes: ",e)}function c(t,e,r){if(!t.fixedrange){var n=s.simpleMap(t.range,t.r2l),a=n[0]+(n[1]-n[0])*e;t.range=n.map(function(e){return t.l2r(a+(e-a)*r)})}}}),vt},makeDragger:E,makeRectDragger:L,makeZoombox:I,makeCorners:D,updateZoombox:R,xyCorners:V,transitionZoombox:F,removeZoombox:B,showDoubleClickNotifier:N,attachWheelEventHandler:q}},{"../../components/color":591,"../../components/dragelement":609,"../../components/drawing":612,"../../components/fx":630,"../../constants/alignment":686,"../../lib":717,"../../lib/clear_gl_canvases":702,"../../lib/setcursor":737,"../../lib/svg_text_utils":741,"../../plot_api/subroutines":756,"../../registry":846,"../plots":826,"./axes":765,"./axis_ids":768,"./constants":771,"./scale_zoom":781,"./select":782,d3:165,"has-passive-events":412,tinycolor2:535}],774:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/fx"),i=t("../../components/dragelement"),o=t("../../lib/setcursor"),s=t("./dragbox").makeDragBox,l=t("./constants").DRAGGERSIZE;r.initInteractions=function(t){var e=t._fullLayout;if(t._context.staticPlot)n.select(t).selectAll(".drag").remove();else if(e._has("cartesian")||e._has("splom")){Object.keys(e._plots||{}).sort(function(t,r){if((e._plots[t].mainplot&&!0)===(e._plots[r].mainplot&&!0)){var n=t.split("y"),a=r.split("y");return n[0]===a[0]?Number(n[1]||1)-Number(a[1]||1):Number(n[0]||1)-Number(a[0]||1)}return e._plots[t].mainplot?1:-1}).forEach(function(r){var n=e._plots[r],o=n.xaxis,c=n.yaxis;if(!n.mainplot){var u=s(t,n,o._offset,c._offset,o._length,c._length,"ns","ew");u.onmousemove=function(e){t._fullLayout._rehover=function(){t._fullLayout._hoversubplot===r&&t._fullLayout._plots[r]&&a.hover(t,e,r)},a.hover(t,e,r),t._fullLayout._lasthover=u,t._fullLayout._hoversubplot=r},u.onmouseout=function(e){t._dragging||(t._fullLayout._hoversubplot=null,i.unhover(t,e))},t._context.showAxisDragHandles&&(s(t,n,o._offset-l,c._offset-l,l,l,"n","w"),s(t,n,o._offset+o._length,c._offset-l,l,l,"n","e"),s(t,n,o._offset-l,c._offset+c._length,l,l,"s","w"),s(t,n,o._offset+o._length,c._offset+c._length,l,l,"s","e"))}if(t._context.showAxisDragHandles){if(r===o._mainSubplot){var h=o._mainLinePosition;"top"===o.side&&(h-=l),s(t,n,o._offset+.1*o._length,h,.8*o._length,l,"","ew"),s(t,n,o._offset,h,.1*o._length,l,"","w"),s(t,n,o._offset+.9*o._length,h,.1*o._length,l,"","e")}if(r===c._mainSubplot){var f=c._mainLinePosition;"right"!==c.side&&(f-=l),s(t,n,f,c._offset+.1*c._length,l,.8*c._length,"ns",""),s(t,n,f,c._offset+.9*c._length,l,.1*c._length,"s",""),s(t,n,f,c._offset,l,.1*c._length,"n","")}}});var o=e._hoverlayer.node();o.onmousemove=function(r){r.target=t._fullLayout._lasthover,a.hover(t,r,e._hoversubplot)},o.onclick=function(e){e.target=t._fullLayout._lasthover,a.click(t,e)},o.onmousedown=function(e){t._fullLayout._lasthover.onmousedown(e)},r.updateFx(t)}},r.updateFx=function(t){var e=t._fullLayout,r="pan"===e.dragmode?"move":"crosshair";o(e._draggers,r)}},{"../../components/dragelement":609,"../../components/fx":630,"../../lib/setcursor":737,"./constants":771,"./dragbox":773,d3:165}],775:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib");e.exports=function(t){return function(e,r){var i=e[t];if(Array.isArray(i))for(var o=n.subplotsRegistry.cartesian,s=o.idRegex,l=r._subplots,c=l.xaxis,u=l.yaxis,h=l.cartesian,f=r._has("cartesian")||r._has("gl2d"),p=0;p<i.length;p++){var d=i[p];if(a.isPlainObject(d)){var g=d.xref,v=d.yref,m=s.x.test(g),y=s.y.test(v);if(m||y){f||a.pushUnique(r._basePlotModules,o);var x=!1;m&&-1===c.indexOf(g)&&(c.push(g),x=!0),y&&-1===u.indexOf(v)&&(u.push(v),x=!0),x&&m&&y&&h.push(g+v)}}}}}},{"../../lib":717,"../../registry":846}],776:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../lib"),o=t("../plots"),s=t("../../components/drawing"),l=t("../get_data").getModuleCalcData,c=t("./axis_ids"),u=t("./constants"),h=t("../../constants/xmlns_namespaces"),f=i.ensureSingle;function p(t,e,r){return i.ensureSingle(t,e,r,function(t){t.datum(r)})}function d(t,e,r,i,o){for(var c,h,f,p=u.traceLayerClasses,d=t._fullLayout,g=d._modules,v=[],m=[],y=0;y<g.length;y++){var x=(c=g[y]).name,b=a.modules[x].categories;if(b.svg){var _=c.layerName||x+"layer",w=c.plot;f=(h=l(r,w))[0],r=h[1],f.length&&v.push({i:p.indexOf(_),className:_,plotMethod:w,cdModule:f}),b.zoomScale&&m.push("."+_)}}v.sort(function(t,e){return t.i-e.i});var k=e.plot.selectAll("g.mlayer").data(v,function(t){return t.className});if(k.enter().append("g").attr("class",function(t){return t.className}).classed("mlayer",!0).classed("rangeplot",e.isRangePlot),k.exit().remove(),k.order(),k.each(function(r){var a=n.select(this),l=r.className;r.plotMethod(t,e,r.cdModule,a,i,o),-1===u.clipOnAxisFalseQuery.indexOf("."+l)&&s.setClipUrl(a,e.layerClipId,t)}),d._has("scattergl")&&(c=a.getModule("scattergl"),f=l(r,c)[0],c.plot(t,e,f)),!t._context.staticPlot&&(e._hasClipOnAxisFalse&&(e.clipOnAxisFalseTraces=e.plot.selectAll(u.clipOnAxisFalseQuery.join(",")).selectAll(".trace")),m.length)){var T=e.plot.selectAll(m.join(",")).selectAll(".trace");e.zoomScalePts=T.selectAll("path.point"),e.zoomScaleTxt=T.selectAll(".textpoint")}}function g(t,e){var r=e.plotgroup,n=e.id,a=u.layerValue2layerClass[e.xaxis.layer],i=u.layerValue2layerClass[e.yaxis.layer],o=t._fullLayout._hasOnlyLargeSploms;if(e.mainplot){var s=e.mainplotinfo,l=s.plotgroup,h=n+"-x",d=n+"-y";e.gridlayer=s.gridlayer,e.zerolinelayer=s.zerolinelayer,f(s.overlinesBelow,"path",h),f(s.overlinesBelow,"path",d),f(s.overaxesBelow,"g",h),f(s.overaxesBelow,"g",d),e.plot=f(s.overplot,"g",n),f(s.overlinesAbove,"path",h),f(s.overlinesAbove,"path",d),f(s.overaxesAbove,"g",h),f(s.overaxesAbove,"g",d),e.xlines=l.select(".overlines-"+a).select("."+h),e.ylines=l.select(".overlines-"+i).select("."+d),e.xaxislayer=l.select(".overaxes-"+a).select("."+h),e.yaxislayer=l.select(".overaxes-"+i).select("."+d)}else if(o)e.xlines=f(r,"path","xlines-above"),e.ylines=f(r,"path","ylines-above"),e.xaxislayer=f(r,"g","xaxislayer-above"),e.yaxislayer=f(r,"g","yaxislayer-above");else{var g=f(r,"g","layer-subplot");e.shapelayer=f(g,"g","shapelayer"),e.imagelayer=f(g,"g","imagelayer"),e.gridlayer=f(r,"g","gridlayer"),e.zerolinelayer=f(r,"g","zerolinelayer"),f(r,"path","xlines-below"),f(r,"path","ylines-below"),e.overlinesBelow=f(r,"g","overlines-below"),f(r,"g","xaxislayer-below"),f(r,"g","yaxislayer-below"),e.overaxesBelow=f(r,"g","overaxes-below"),e.plot=f(r,"g","plot"),e.overplot=f(r,"g","overplot"),e.xlines=f(r,"path","xlines-above"),e.ylines=f(r,"path","ylines-above"),e.overlinesAbove=f(r,"g","overlines-above"),f(r,"g","xaxislayer-above"),f(r,"g","yaxislayer-above"),e.overaxesAbove=f(r,"g","overaxes-above"),e.xlines=r.select(".xlines-"+a),e.ylines=r.select(".ylines-"+i),e.xaxislayer=r.select(".xaxislayer-"+a),e.yaxislayer=r.select(".yaxislayer-"+i)}o||(p(e.gridlayer,"g",e.xaxis._id),p(e.gridlayer,"g",e.yaxis._id),e.gridlayer.selectAll("g").map(function(t){return t[0]}).sort(c.idSort)),e.xlines.style("fill","none").classed("crisp",!0),e.ylines.style("fill","none").classed("crisp",!0)}function v(t,e){if(t){var r={};for(var a in t.each(function(t){var a=t[0];n.select(this).remove(),m(a,e),r[a]=!0}),e._plots)for(var i=e._plots[a].overlays||[],o=0;o<i.length;o++){var s=i[o];r[s.id]&&s.plot.selectAll(".trace").remove()}}}function m(t,e){e._draggers.selectAll("g."+t).remove(),e._defs.select("#clip"+e._uid+t+"plot").remove()}r.name="cartesian",r.attr=["xaxis","yaxis"],r.idRoot=["x","y"],r.idRegex=u.idRegex,r.attrRegex=u.attrRegex,r.attributes=t("./attributes"),r.layoutAttributes=t("./layout_attributes"),r.supplyLayoutDefaults=t("./layout_defaults"),r.transitionAxes=t("./transition_axes"),r.finalizeSubplots=function(t,e){var r,n,a,o=e._subplots,s=o.xaxis,l=o.yaxis,h=o.cartesian,f=h.concat(o.gl2d||[]),p={},d={};for(r=0;r<f.length;r++){var g=f[r].split("y");p[g[0]]=1,d["y"+g[1]]=1}for(r=0;r<s.length;r++)p[n=s[r]]||(a=(t[c.id2name(n)]||{}).anchor,u.idRegex.y.test(a)||(a="y"),h.push(n+a),f.push(n+a),d[a]||(d[a]=1,i.pushUnique(l,a)));for(r=0;r<l.length;r++)d[a=l[r]]||(n=(t[c.id2name(a)]||{}).anchor,u.idRegex.x.test(n)||(n="x"),h.push(n+a),f.push(n+a),p[n]||(p[n]=1,i.pushUnique(s,n)));if(!f.length){for(var v in n="",a="",t){if(u.attrRegex.test(v))"x"===v.charAt(0)?(!n||+v.substr(5)<+n.substr(5))&&(n=v):(!a||+v.substr(5)<+a.substr(5))&&(a=v)}n=n?c.name2id(n):"x",a=a?c.name2id(a):"y",s.push(n),l.push(a),h.push(n+a)}},r.plot=function(t,e,r,n){var a,i=t._fullLayout,o=i._subplots.cartesian,s=t.calcdata;if(!Array.isArray(e))for(e=[],a=0;a<s.length;a++)e.push(a);for(a=0;a<o.length;a++){for(var l,c=o[a],u=i._plots[c],h=[],f=0;f<s.length;f++){var p=s[f],g=p[0].trace;g.xaxis+g.yaxis===c&&((-1!==e.indexOf(g.index)||g.carpet)&&(l&&l[0].trace.xaxis+l[0].trace.yaxis===c&&-1!==["tonextx","tonexty","tonext"].indexOf(g.fill)&&-1===h.indexOf(l)&&h.push(l),h.push(p)),l=p)}d(t,u,h,r,n)}},r.clean=function(t,e,r,n){var a,i,o,s=n._plots||{},l=e._plots||{},u=n._subplots||{};if(n._hasOnlyLargeSploms&&!e._hasOnlyLargeSploms)for(o in s)(a=s[o]).plotgroup&&a.plotgroup.remove();var h=n._has&&n._has("gl"),f=e._has&&e._has("gl");if(h&&!f)for(o in s)(a=s[o])._scene&&a._scene.destroy();if(u.xaxis&&u.yaxis){var p=c.listIds({_fullLayout:n});for(i=0;i<p.length;i++){var d=p[i];e[c.id2name(d)]||n._infolayer.selectAll(".g-"+d+"title").remove()}}var g=n._has&&n._has("cartesian"),y=e._has&&e._has("cartesian");if(g&&!y)v(n._cartesianlayer.selectAll(".subplot"),n),n._defs.selectAll(".axesclip").remove(),delete n._axisConstraintGroups;else if(u.cartesian)for(i=0;i<u.cartesian.length;i++){var x=u.cartesian[i];if(!l[x]){var b="."+x+",."+x+"-x,."+x+"-y";n._cartesianlayer.selectAll(b).remove(),m(x,n)}}},r.drawFramework=function(t){var e=t._fullLayout,r=function(t){var e,r,n,a,i,o,s=t._fullLayout,l=s._subplots.cartesian,c=l.length,u=[],h=[];for(e=0;e<c;e++){n=l[e],a=s._plots[n],i=a.xaxis,o=a.yaxis;var f=i._mainAxis,p=o._mainAxis,d=f._id+p._id,g=s._plots[d];a.overlays=[],d!==n&&g?(a.mainplot=d,a.mainplotinfo=g,h.push(n)):(a.mainplot=void 0,a.mainPlotinfo=void 0,u.push(n))}for(e=0;e<h.length;e++)n=h[e],(a=s._plots[n]).mainplotinfo.overlays.push(a);var v=u.concat(h),m=new Array(c);for(e=0;e<c;e++){n=v[e],a=s._plots[n],i=a.xaxis,o=a.yaxis;var y=[n,i.layer,o.layer,i.overlaying||"",o.overlaying||""];for(r=0;r<a.overlays.length;r++)y.push(a.overlays[r].id);m[e]=y}return m}(t),a=e._cartesianlayer.selectAll(".subplot").data(r,String);a.enter().append("g").attr("class",function(t){return"subplot "+t[0]}),a.order(),a.exit().call(v,e),a.each(function(r){var a=r[0],i=e._plots[a];i.plotgroup=n.select(this),g(t,i),i.draglayer=f(e._draggers,"g",a)})},r.rangePlot=function(t,e,r){g(t,e),d(t,e,r),o.style(t)},r.toSVG=function(t){var e=t._fullLayout._glimages,r=n.select(t).selectAll(".svg-container");r.filter(function(t,e){return e===r.size()-1}).selectAll(".gl-canvas-context, .gl-canvas-focus").each(function(){var t=this.toDataURL("image/png");e.append("svg:image").attr({xmlns:h.svg,"xlink:href":t,preserveAspectRatio:"none",x:0,y:0,width:this.width,height:this.height})})},r.updateFx=t("./graph_interact").updateFx},{"../../components/drawing":612,"../../constants/xmlns_namespaces":694,"../../lib":717,"../../registry":846,"../get_data":800,"../plots":826,"./attributes":763,"./axis_ids":768,"./constants":771,"./graph_interact":774,"./layout_attributes":777,"./layout_defaults":778,"./transition_axes":787,d3:165}],777:[function(t,e,r){"use strict";var n=t("../font_attributes"),a=t("../../components/color/attributes"),i=t("../../components/drawing/attributes").dash,o=t("../../lib/extend").extendFlat,s=t("../../plot_api/plot_template").templatedArray,l=(t("../../constants/docs").FORMAT_LINK,t("../../constants/docs").DATE_FORMAT_LINK,t("../../constants/numerical").ONEDAY),c=t("./constants"),u=c.HOUR_PATTERN,h=c.WEEKDAY_PATTERN;e.exports={visible:{valType:"boolean",editType:"plot"},color:{valType:"color",dflt:a.defaultLine,editType:"ticks"},title:{text:{valType:"string",editType:"ticks"},font:n({editType:"ticks"}),standoff:{valType:"number",min:0,editType:"ticks"},editType:"ticks"},type:{valType:"enumerated",values:["-","linear","log","date","category","multicategory"],dflt:"-",editType:"calc",_noTemplating:!0},autorange:{valType:"enumerated",values:[!0,!1,"reversed"],dflt:!0,editType:"axrange",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},rangemode:{valType:"enumerated",values:["normal","tozero","nonnegative"],dflt:"normal",editType:"plot"},range:{valType:"info_array",items:[{valType:"any",editType:"axrange",impliedEdits:{"^autorange":!1},anim:!0},{valType:"any",editType:"axrange",impliedEdits:{"^autorange":!1},anim:!0}],editType:"axrange",impliedEdits:{autorange:!1},anim:!0},fixedrange:{valType:"boolean",dflt:!1,editType:"calc"},scaleanchor:{valType:"enumerated",values:[c.idRegex.x.toString(),c.idRegex.y.toString()],editType:"plot"},scaleratio:{valType:"number",min:0,dflt:1,editType:"plot"},constrain:{valType:"enumerated",values:["range","domain"],dflt:"range",editType:"plot"},constraintoward:{valType:"enumerated",values:["left","center","right","top","middle","bottom"],editType:"plot"},matches:{valType:"enumerated",values:[c.idRegex.x.toString(),c.idRegex.y.toString()],editType:"calc"},rangebreaks:s("rangebreak",{enabled:{valType:"boolean",dflt:!0,editType:"calc"},bounds:{valType:"info_array",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}],editType:"calc"},pattern:{valType:"enumerated",values:[h,u,""],editType:"calc"},values:{valType:"info_array",freeLength:!0,editType:"calc",items:{valType:"any",editType:"calc"}},dvalue:{valType:"number",editType:"calc",min:0,dflt:l},editType:"calc"}),tickmode:{valType:"enumerated",values:["auto","linear","array"],editType:"ticks",impliedEdits:{tick0:void 0,dtick:void 0}},nticks:{valType:"integer",min:0,dflt:0,editType:"ticks"},tick0:{valType:"any",editType:"ticks",impliedEdits:{tickmode:"linear"}},dtick:{valType:"any",editType:"ticks",impliedEdits:{tickmode:"linear"}},tickvals:{valType:"data_array",editType:"ticks"},ticktext:{valType:"data_array",editType:"ticks"},ticks:{valType:"enumerated",values:["outside","inside",""],editType:"ticks"},tickson:{valType:"enumerated",values:["labels","boundaries"],dflt:"labels",editType:"ticks"},mirror:{valType:"enumerated",values:[!0,"ticks",!1,"all","allticks"],dflt:!1,editType:"ticks+layoutstyle"},ticklen:{valType:"number",min:0,dflt:5,editType:"ticks"},tickwidth:{valType:"number",min:0,dflt:1,editType:"ticks"},tickcolor:{valType:"color",dflt:a.defaultLine,editType:"ticks"},showticklabels:{valType:"boolean",dflt:!0,editType:"ticks"},automargin:{valType:"boolean",dflt:!1,editType:"ticks"},showspikes:{valType:"boolean",dflt:!1,editType:"modebar"},spikecolor:{valType:"color",dflt:null,editType:"none"},spikethickness:{valType:"number",dflt:3,editType:"none"},spikedash:o({},i,{dflt:"dash",editType:"none"}),spikemode:{valType:"flaglist",flags:["toaxis","across","marker"],dflt:"toaxis",editType:"none"},spikesnap:{valType:"enumerated",values:["data","cursor","hovered data"],dflt:"data",editType:"none"},tickfont:n({editType:"ticks"}),tickangle:{valType:"angle",dflt:"auto",editType:"ticks"},tickprefix:{valType:"string",dflt:"",editType:"ticks"},showtickprefix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},ticksuffix:{valType:"string",dflt:"",editType:"ticks"},showticksuffix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},showexponent:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},exponentformat:{valType:"enumerated",values:["none","e","E","power","SI","B"],dflt:"B",editType:"ticks"},separatethousands:{valType:"boolean",dflt:!1,editType:"ticks"},tickformat:{valType:"string",dflt:"",editType:"ticks"},tickformatstops:s("tickformatstop",{enabled:{valType:"boolean",dflt:!0,editType:"ticks"},dtickrange:{valType:"info_array",items:[{valType:"any",editType:"ticks"},{valType:"any",editType:"ticks"}],editType:"ticks"},value:{valType:"string",dflt:"",editType:"ticks"},editType:"ticks"}),hoverformat:{valType:"string",dflt:"",editType:"none"},showline:{valType:"boolean",dflt:!1,editType:"ticks+layoutstyle"},linecolor:{valType:"color",dflt:a.defaultLine,editType:"layoutstyle"},linewidth:{valType:"number",min:0,dflt:1,editType:"ticks+layoutstyle"},showgrid:{valType:"boolean",editType:"ticks"},gridcolor:{valType:"color",dflt:a.lightLine,editType:"ticks"},gridwidth:{valType:"number",min:0,dflt:1,editType:"ticks"},zeroline:{valType:"boolean",editType:"ticks"},zerolinecolor:{valType:"color",dflt:a.defaultLine,editType:"ticks"},zerolinewidth:{valType:"number",dflt:1,editType:"ticks"},showdividers:{valType:"boolean",dflt:!0,editType:"ticks"},dividercolor:{valType:"color",dflt:a.defaultLine,editType:"ticks"},dividerwidth:{valType:"number",dflt:1,editType:"ticks"},anchor:{valType:"enumerated",values:["free",c.idRegex.x.toString(),c.idRegex.y.toString()],editType:"plot"},side:{valType:"enumerated",values:["top","bottom","left","right"],editType:"plot"},overlaying:{valType:"enumerated",values:["free",c.idRegex.x.toString(),c.idRegex.y.toString()],editType:"plot"},layer:{valType:"enumerated",values:["above traces","below traces"],dflt:"above traces",editType:"plot"},domain:{valType:"info_array",items:[{valType:"number",min:0,max:1,editType:"plot"},{valType:"number",min:0,max:1,editType:"plot"}],dflt:[0,1],editType:"plot"},position:{valType:"number",min:0,max:1,dflt:0,editType:"plot"},categoryorder:{valType:"enumerated",values:["trace","category ascending","category descending","array","total ascending","total descending","min ascending","min descending","max ascending","max descending","sum ascending","sum descending","mean ascending","mean descending","median ascending","median descending"],dflt:"trace",editType:"calc"},categoryarray:{valType:"data_array",editType:"calc"},uirevision:{valType:"any",editType:"none"},editType:"calc",_deprecated:{autotick:{valType:"boolean",editType:"ticks"},title:{valType:"string",editType:"ticks"},titlefont:n({editType:"ticks"})}}},{"../../components/color/attributes":590,"../../components/drawing/attributes":611,"../../constants/docs":688,"../../constants/numerical":693,"../../lib/extend":708,"../../plot_api/plot_template":755,"../font_attributes":791,"./constants":771}],778:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/color"),i=t("../../components/fx/helpers").isUnifiedHover,o=t("../../components/fx/hovermode_defaults"),s=t("../../plot_api/plot_template"),l=t("../layout_attributes"),c=t("./layout_attributes"),u=t("./type_defaults"),h=t("./axis_defaults"),f=t("./constraints").handleConstraintDefaults,p=t("./position_defaults"),d=t("./axis_ids"),g=d.id2name,v=d.name2id,m=t("./constants").AX_ID_PATTERN,y=t("../../registry"),x=y.traceIs,b=y.getComponentMethod;function _(t,e,r){Array.isArray(t[e])?t[e].push(r):t[e]=[r]}e.exports=function(t,e,r){var d,y,w={},k={},T={},M={},A={},S={},E={},L={},C={},P={};for(d=0;d<r.length;d++){var O=r[d];if(x(O,"cartesian")||x(O,"gl2d")){var z,I;if(O.xaxis)z=g(O.xaxis),_(w,z,O);else if(O.xaxes)for(y=0;y<O.xaxes.length;y++)_(w,g(O.xaxes[y]),O);if(O.yaxis)I=g(O.yaxis),_(w,I,O);else if(O.yaxes)for(y=0;y<O.yaxes.length;y++)_(w,g(O.yaxes[y]),O);if("funnel"===O.type?"h"===O.orientation?(z&&(k[z]=!0),I&&(E[I]=!0)):I&&(T[I]=!0):"image"===O.type?(I&&(L[I]=!0),z&&(L[z]=!0)):(I&&(A[I]=!0,S[I]=!0),x(O,"carpet")&&("carpet"!==O.type||O._cheater)||z&&(M[z]=!0)),"carpet"===O.type&&O._cheater&&z&&(k[z]=!0),x(O,"2dMap")&&(C[z]=!0,C[I]=!0),x(O,"oriented"))P["h"===O.orientation?I:z]=!0}}var D=e._subplots,R=D.xaxis,F=D.yaxis,B=n.simpleMap(R,g),N=n.simpleMap(F,g),j=B.concat(N),V=a.background;R.length&&F.length&&(V=n.coerce(t,e,l,"plot_bgcolor"));var U,q,H,G,Y,W=a.combine(V,e.paper_bgcolor);function X(){var t=w[U]||[];Y._traceIndices=t.map(function(t){return t._expandedIndex}),Y._annIndices=[],Y._shapeIndices=[],Y._imgIndices=[],Y._subplotsWith=[],Y._counterAxes=[],Y._name=Y._attr=U,Y._id=q}function Z(t,e){return n.coerce(G,Y,c,t,e)}function J(t,e){return n.coerce2(G,Y,c,t,e)}function K(t){return"x"===t?F:R}function Q(e,r){for(var n="x"===e?B:N,a=[],i=0;i<n.length;i++){var o=n[i];o===r||(t[o]||{}).overlaying||a.push(v(o))}return a}var $={x:K("x"),y:K("y")},tt=$.x.concat($.y),et={},rt=[];function nt(){var t=G.matches;m.test(t)&&-1===tt.indexOf(t)&&(et[t]=G.type,rt=Object.keys(et))}var at=o(t,e,r),it=i(at);for(d=0;d<j.length;d++){U=j[d],q=v(U),H=U.charAt(0),n.isPlainObject(t[U])||(t[U]={}),G=t[U],Y=s.newContainer(e,U,H+"axis"),X();var ot="x"===H&&!M[U]&&k[U]||"y"===H&&!A[U]&&T[U],st="y"===H&&(!S[U]&&E[U]||L[U]),lt={letter:H,font:e.font,outerTicks:C[U],showGrid:!P[U],data:w[U]||[],bgColor:W,calendar:e.calendar,automargin:!0,visibleDflt:ot,reverseDflt:st,splomStash:((e._splomAxes||{})[H]||{})[q]};Z("uirevision",e.uirevision),u(G,Y,Z,lt),h(G,Y,Z,lt,e);var ct=it&&H===at.charAt(0),ut=J("spikecolor",it?Y.color:void 0),ht=J("spikethickness",it?1.5:void 0),ft=J("spikedash",it?"dot":void 0),pt=J("spikemode",it?"across":void 0),dt=J("spikesnap",it?"hovered data":void 0);Z("showspikes",!!(ct||ut||ht||ft||pt||dt))||(delete Y.spikecolor,delete Y.spikethickness,delete Y.spikedash,delete Y.spikemode,delete Y.spikesnap),p(G,Y,Z,{letter:H,counterAxes:$[H],overlayableAxes:Q(H,U),grid:e.grid}),Z("title.standoff"),nt(),Y._input=G}for(d=0;d<rt.length;){q=rt[d++],H=(U=g(q)).charAt(0),n.isPlainObject(t[U])||(t[U]={}),G=t[U],Y=s.newContainer(e,U,H+"axis"),X();var gt={letter:H,font:e.font,outerTicks:C[U],showGrid:!P[U],data:[],bgColor:W,calendar:e.calendar,automargin:!0,visibleDflt:!1,reverseDflt:!1,splomStash:((e._splomAxes||{})[H]||{})[q]};Z("uirevision",e.uirevision),Y.type=et[q]||"linear",h(G,Y,Z,gt,e),p(G,Y,Z,{letter:H,counterAxes:$[H],overlayableAxes:Q(H,U),grid:e.grid}),Z("fixedrange"),nt(),Y._input=G}var vt=b("rangeslider","handleDefaults"),mt=b("rangeselector","handleDefaults");for(d=0;d<B.length;d++)U=B[d],G=t[U],Y=e[U],vt(t,e,U),"date"===Y.type&&mt(G,Y,e,N,Y.calendar),Z("fixedrange");for(d=0;d<N.length;d++){U=N[d],G=t[U],Y=e[U];var yt=e[g(Y.anchor)];Z("fixedrange",b("rangeslider","isVisible")(yt))}var xt=e._axisConstraintGroups=[],bt=e._axisMatchGroups=[],_t=tt.concat(rt),wt=j.concat(n.simpleMap(rt,g));for(d=0;d<wt.length;d++){var kt,Tt;H=(U=wt[d]).charAt(0),G=t[U],Y=e[U],kt="y"===H&&!G.hasOwnProperty("scaleanchor")&&L[U]?Y.anchor:void 0,Tt=!G.hasOwnProperty("constrain")&&L[U]?"domain":void 0,f(G,Y,Z,{allAxisIds:_t,layoutOut:e,scaleanchorDflt:kt,constrainDflt:Tt})}for(d=0;d<bt.length;d++){var Mt=bt[d],At=null,St=null;for(q in Mt)(Y=e[g(q)]).matches||(At=Y.range,St=Y.autorange);if(null===At||null===St)for(q in Mt){At=(Y=e[g(q)]).range,St=Y.autorange;break}for(q in Mt)(Y=e[g(q)]).matches&&(Y.range=At.slice(),Y.autorange=St),Y._matchGroup=Mt;if(xt.length)for(q in Mt)for(y=0;y<xt.length;y++){var Et=xt[y];for(var Lt in Et)q===Lt&&(n.warn("Axis "+Lt+" is set with both a *scaleanchor* and *matches* constraint; ignoring the scale constraint."),delete Et[Lt],Object.keys(Et).length<2&&xt.splice(y,1))}}}},{"../../components/color":591,"../../components/fx/helpers":626,"../../components/fx/hovermode_defaults":629,"../../lib":717,"../../plot_api/plot_template":755,"../../registry":846,"../layout_attributes":817,"./axis_defaults":767,"./axis_ids":768,"./constants":771,"./constraints":772,"./layout_attributes":777,"./position_defaults":780,"./type_defaults":788}],779:[function(t,e,r){"use strict";var n=t("tinycolor2").mix,a=t("../../components/color/attributes").lightFraction,i=t("../../lib");e.exports=function(t,e,r,o){var s=(o=o||{}).dfltColor;function l(r,n){return i.coerce2(t,e,o.attributes,r,n)}var c=l("linecolor",s),u=l("linewidth");r("showline",o.showLine||!!c||!!u)||(delete e.linecolor,delete e.linewidth);var h=l("gridcolor",n(s,o.bgColor,o.blend||a).toRgbString()),f=l("gridwidth");if(r("showgrid",o.showGrid||!!h||!!f)||(delete e.gridcolor,delete e.gridwidth),!o.noZeroLine){var p=l("zerolinecolor",s),d=l("zerolinewidth");r("zeroline",o.showGrid||!!p||!!d)||(delete e.zerolinecolor,delete e.zerolinewidth)}}},{"../../components/color/attributes":590,"../../lib":717,tinycolor2:535}],780:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib");e.exports=function(t,e,r,i){var o,s,l,c,u=i.counterAxes||[],h=i.overlayableAxes||[],f=i.letter,p=i.grid;p&&(s=p._domains[f][p._axisMap[e._id]],o=p._anchors[e._id],s&&(l=p[f+"side"].split(" ")[0],c=p.domain[f]["right"===l||"top"===l?1:0])),s=s||[0,1],o=o||(n(t.position)?"free":u[0]||"free"),l=l||("x"===f?"bottom":"left"),c=c||0,"free"===a.coerce(t,e,{anchor:{valType:"enumerated",values:["free"].concat(u),dflt:o}},"anchor")&&r("position",c),a.coerce(t,e,{side:{valType:"enumerated",values:"x"===f?["bottom","top"]:["left","right"],dflt:l}},"side");var d=!1;if(h.length&&(d=a.coerce(t,e,{overlaying:{valType:"enumerated",values:[!1].concat(h),dflt:!1}},"overlaying")),!d){var g=r("domain",s);g[0]>g[1]-1/4096&&(e.domain=s),a.noneOrAll(t.domain,e.domain,s)}return r("layer"),e}},{"../../lib":717,"fast-isnumeric":228}],781:[function(t,e,r){"use strict";var n=t("../../constants/alignment").FROM_BL;e.exports=function(t,e,r){void 0===r&&(r=n[t.constraintoward||"center"]);var a=[t.r2l(t.range[0]),t.r2l(t.range[1])],i=a[0]+(a[1]-a[0])*r;t.range=t._input.range=[t.l2r(i+(a[0]-i)*e),t.l2r(i+(a[1]-i)*e)]}},{"../../constants/alignment":686}],782:[function(t,e,r){"use strict";var n=t("polybooljs"),a=t("../../registry"),i=t("../../components/color"),o=t("../../components/fx"),s=t("../../lib"),l=t("../../lib/polygon"),c=t("../../lib/throttle"),u=t("../../components/fx/helpers").makeEventData,h=t("./axis_ids").getFromId,f=t("../../lib/clear_gl_canvases"),p=t("../../plot_api/subroutines").redrawReglTraces,d=t("./constants"),g=d.MINSELECT,v=l.filter,m=l.tester;function y(t){return t._id}function x(t,e,r,n,a,i,o){var s,l,c,u,h,f,p,d,g,v=e._hoverdata,m=e._fullLayout.clickmode.indexOf("event")>-1,y=[];if(function(t){return t&&Array.isArray(t)&&!0!==t[0].hoverOnBox}(v)){k(t,e,i);var x=function(t,e){var r,n,a=t[0],i=-1,o=[];for(n=0;n<e.length;n++)if(r=e[n],a.fullData._expandedIndex===r.cd[0].trace._expandedIndex){if(!0===a.hoverOnBox)break;void 0!==a.pointNumber?i=a.pointNumber:void 0!==a.binNumber&&(i=a.binNumber,o=a.pointNumbers);break}return{pointNumber:i,pointNumbers:o,searchInfo:r}}(v,s=M(e,r,n,a));if(x.pointNumbers.length>0?function(t,e){var r,n,a,i=[];for(a=0;a<t.length;a++)(r=t[a]).cd[0].trace.selectedpoints&&r.cd[0].trace.selectedpoints.length>0&&i.push(r);if(1===i.length&&i[0]===e.searchInfo&&(n=e.searchInfo.cd[0].trace).selectedpoints.length===e.pointNumbers.length){for(a=0;a<e.pointNumbers.length;a++)if(n.selectedpoints.indexOf(e.pointNumbers[a])<0)return!1;return!0}return!1}(s,x):function(t){var e,r,n,a=0;for(n=0;n<t.length;n++)if(e=t[n],(r=e.cd[0].trace).selectedpoints){if(r.selectedpoints.length>1)return!1;if((a+=r.selectedpoints.length)>1)return!1}return 1===a}(s)&&(f=S(x))){for(o&&o.remove(),g=0;g<s.length;g++)(l=s[g])._module.selectPoints(l,!1);E(e,s),T(i),m&&e.emit("plotly_deselect",null)}else{for(p=t.shiftKey&&(void 0!==f?f:S(x)),c=function(t,e,r){return{pointNumber:t,searchInfo:e,subtract:r}}(x.pointNumber,x.searchInfo,p),u=w(i.selectionDefs.concat([c])),g=0;g<s.length;g++)if(h=L(s[g]._module.selectPoints(s[g],u),s[g]),y.length)for(var b=0;b<h.length;b++)y.push(h[b]);else y=h;E(e,s,d={points:y}),c&&i&&i.selectionDefs.push(c),o&&A(i.mergedPolygons,o),m&&e.emit("plotly_selected",d)}}}function b(t){return"pointNumber"in t&&"searchInfo"in t}function _(t){return{xmin:0,xmax:0,ymin:0,ymax:0,pts:[],contains:function(e,r,n,a){var i=t.searchInfo.cd[0].trace._expandedIndex;return a.cd[0].trace._expandedIndex===i&&n===t.pointNumber},isRect:!1,degenerate:!1,subtract:t.subtract}}function w(t){for(var e=[],r=b(t[0])?0:t[0][0][0],n=r,a=b(t[0])?0:t[0][0][1],i=a,o=0;o<t.length;o++)if(b(t[o]))e.push(_(t[o]));else{var s=l.tester(t[o]);s.subtract=t[o].subtract,e.push(s),r=Math.min(r,s.xmin),n=Math.max(n,s.xmax),a=Math.min(a,s.ymin),i=Math.max(i,s.ymax)}return{xmin:r,xmax:n,ymin:a,ymax:i,pts:[],contains:function(t,r,n,a){for(var i=!1,o=0;o<e.length;o++)e[o].contains(t,r,n,a)&&(i=!1===e[o].subtract);return i},isRect:!1,degenerate:!1}}function k(t,e,r){var n=e._fullLayout,a=r.plotinfo,i=n._lastSelectedSubplot&&n._lastSelectedSubplot===a.id,o=t.shiftKey||t.altKey;i&&o&&a.selection&&a.selection.selectionDefs&&!r.selectionDefs?(r.selectionDefs=a.selection.selectionDefs,r.mergedPolygons=a.selection.mergedPolygons):o&&a.selection||T(r),i||(C(e),n._lastSelectedSubplot=a.id)}function T(t){var e=t.plotinfo;e.selection={},e.selection.selectionDefs=t.selectionDefs=[],e.selection.mergedPolygons=t.mergedPolygons=[]}function M(t,e,r,n){var a,i,o,s=[],l=e.map(y),c=r.map(y);for(o=0;o<t.calcdata.length;o++)if(!0===(i=(a=t.calcdata[o])[0].trace).visible&&i._module&&i._module.selectPoints)if(!n||i.subplot!==n&&i.geo!==n)if("splom"===i.type&&i._xaxes[l[0]]&&i._yaxes[c[0]]){var u=p(i._module,a,e[0],r[0]);u.scene=t._fullLayout._splomScenes[i.uid],s.push(u)}else if("sankey"===i.type){var f=p(i._module,a,e[0],r[0]);s.push(f)}else{if(-1===l.indexOf(i.xaxis))continue;if(-1===c.indexOf(i.yaxis))continue;s.push(p(i._module,a,h(t,i.xaxis),h(t,i.yaxis)))}else s.push(p(i._module,a,e[0],r[0]));return s;function p(t,e,r,n){return{_module:t,cd:e,xaxis:r,yaxis:n}}}function A(t,e){var r,n,a=[];for(r=0;r<t.length;r++){var i=t[r];a.push(i.join("L")+"L"+i[0])}n=t.length>0?"M"+a.join("M")+"Z":"M0,0Z",e.attr("d",n)}function S(t){var e=t.searchInfo.cd[0].trace,r=t.pointNumber,n=t.pointNumbers,a=n.length>0?n[0]:r;return!!e.selectedpoints&&e.selectedpoints.indexOf(a)>-1}function E(t,e,r){var n,i,o,s;for(n=0;n<e.length;n++){var l=e[n].cd[0].trace._fullInput,c=t._fullLayout._tracePreGUI[l.uid]||{};void 0===c.selectedpoints&&(c.selectedpoints=l._input.selectedpoints||null)}if(r){var u=r.points||[];for(n=0;n<e.length;n++)(s=e[n].cd[0].trace)._input.selectedpoints=s._fullInput.selectedpoints=[],s._fullInput!==s&&(s.selectedpoints=[]);for(n=0;n<u.length;n++){var h=u[n],d=h.data,g=h.fullData;h.pointIndices?([].push.apply(d.selectedpoints,h.pointIndices),s._fullInput!==s&&[].push.apply(g.selectedpoints,h.pointIndices)):(d.selectedpoints.push(h.pointIndex),s._fullInput!==s&&g.selectedpoints.push(h.pointIndex))}}else for(n=0;n<e.length;n++)delete(s=e[n].cd[0].trace).selectedpoints,delete s._input.selectedpoints,s._fullInput!==s&&delete s._fullInput.selectedpoints;var v=!1;for(n=0;n<e.length;n++){s=(o=(i=e[n]).cd)[0].trace,a.traceIs(s,"regl")&&(v=!0);var m=i._module,y=m.styleOnSelect||m.style;y&&(y(t,o,o[0].node3),o[0].nodeRangePlot3&&y(t,o,o[0].nodeRangePlot3))}v&&(f(t),p(t))}function L(t,e){if(Array.isArray(t))for(var r=e.cd,n=e.cd[0].trace,a=0;a<t.length;a++)t[a]=u(t[a],n,r);return t}function C(t){var e=(t._fullLayout||{})._zoomlayer;e&&e.selectAll(".select-outline").remove()}e.exports={prepSelect:function(t,e,r,a,l){var u,h,f,p,y,b,_,S=a.gd,C=S._fullLayout,P=C._zoomlayer,O=a.element.getBoundingClientRect(),z=a.plotinfo,I=z.xaxis._offset,D=z.yaxis._offset,R=e-O.left,F=r-O.top,B=R,N=F,j="M"+R+","+F,V=a.xaxes[0]._length,U=a.yaxes[0]._length,q=a.xaxes.concat(a.yaxes),H=t.altKey;k(t,S,a),"lasso"===l&&(u=v([[R,F]],d.BENDPX));var G=P.selectAll("path.select-outline-"+z.id).data([1,2]);G.enter().append("path").attr("class",function(t){return"select-outline select-outline-"+t+" select-outline-"+z.id}).attr("transform","translate("+I+", "+D+")").attr("d",j+"Z");var Y,W=P.append("path").attr("class","zoombox-corners").style({fill:i.background,stroke:i.defaultLine,"stroke-width":1}).attr("transform","translate("+I+", "+D+")").attr("d","M0,0Z"),X=C._uid+d.SELECTID,Z=[],J=M(S,a.xaxes,a.yaxes,a.subplot);function K(t,e){return"log"===t.type?t.p2d(e):t.p2r(e)}function Q(t){var e="y"===t._id.charAt(0)?1:0;return function(r){return K(t,r[e])}}function $(t,e){return t-e}Y=z.fillRangeItems?z.fillRangeItems:"select"===l?function(t,e){var r=t.range={};for(y=0;y<q.length;y++){var n=q[y],a=n._id.charAt(0);r[n._id]=[K(n,e[a+"min"]),K(n,e[a+"max"])].sort($)}}:function(t,e,r){var n=t.lassoPoints={};for(y=0;y<q.length;y++){var a=q[y];n[a._id]=r.filtered.map(Q(a))}},a.moveFn=function(t,e){B=Math.max(0,Math.min(V,t+R)),N=Math.max(0,Math.min(U,e+F));var r=Math.abs(B-R),i=Math.abs(N-F);if("select"===l){var o=C.selectdirection;"h"===(o="any"===C.selectdirection?i<Math.min(.6*r,g)?"h":r<Math.min(.6*i,g)?"v":"d":C.selectdirection)?((p=[[R,0],[R,U],[B,U],[B,0]]).xmin=Math.min(R,B),p.xmax=Math.max(R,B),p.ymin=Math.min(0,U),p.ymax=Math.max(0,U),W.attr("d","M"+p.xmin+","+(F-g)+"h-4v"+2*g+"h4ZM"+(p.xmax-1)+","+(F-g)+"h4v"+2*g+"h-4Z")):"v"===o?((p=[[0,F],[0,N],[V,N],[V,F]]).xmin=Math.min(0,V),p.xmax=Math.max(0,V),p.ymin=Math.min(F,N),p.ymax=Math.max(F,N),W.attr("d","M"+(R-g)+","+p.ymin+"v-4h"+2*g+"v4ZM"+(R-g)+","+(p.ymax-1)+"v4h"+2*g+"v-4Z")):"d"===o&&((p=[[R,F],[R,N],[B,N],[B,F]]).xmin=Math.min(R,B),p.xmax=Math.max(R,B),p.ymin=Math.min(F,N),p.ymax=Math.max(F,N),W.attr("d","M0,0Z"))}else"lasso"===l&&(u.addPt([B,N]),p=u.filtered);a.selectionDefs&&a.selectionDefs.length?(f=function(t,e,r){return r?n.difference({regions:t,inverted:!1},{regions:[e],inverted:!1}).regions:n.union({regions:t,inverted:!1},{regions:[e],inverted:!1}).regions}(a.mergedPolygons,p,H),p.subtract=H,h=w(a.selectionDefs.concat([p]))):(f=[p],h=m(p)),A(f,G),c.throttle(X,d.SELECTDELAY,function(){var t;Z=[];var e,r=[];for(y=0;y<J.length;y++)if(e=(b=J[y])._module.selectPoints(b,h),r.push(e),t=L(e,b),Z.length)for(var n=0;n<t.length;n++)Z.push(t[n]);else Z=t;E(S,J,_={points:Z}),Y(_,p,u),a.gd.emit("plotly_selecting",_)})},a.clickFn=function(t,e){var r=C.clickmode;W.remove(),c.done(X).then(function(){if(c.clear(X),2===t){for(G.remove(),y=0;y<J.length;y++)(b=J[y])._module.selectPoints(b,!1);E(S,J),T(a),S.emit("plotly_deselect",null)}else r.indexOf("select")>-1&&x(e,S,a.xaxes,a.yaxes,a.subplot,a,G),"event"===r&&S.emit("plotly_selected",void 0);o.click(S,e)}).catch(s.error)},a.doneFn=function(){W.remove(),c.done(X).then(function(){c.clear(X),a.gd.emit("plotly_selected",_),p&&a.selectionDefs&&(p.subtract=H,a.selectionDefs.push(p),a.mergedPolygons.length=0,[].push.apply(a.mergedPolygons,f)),a.doneFnCompleted&&a.doneFnCompleted(Z)}).catch(s.error)}},clearSelect:C,selectOnClick:x}},{"../../components/color":591,"../../components/fx":630,"../../components/fx/helpers":626,"../../lib":717,"../../lib/clear_gl_canvases":702,"../../lib/polygon":729,"../../lib/throttle":742,"../../plot_api/subroutines":756,"../../registry":846,"./axis_ids":768,"./constants":771,polybooljs:474}],783:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../../lib"),o=i.cleanNumber,s=i.ms2DateTime,l=i.dateTime2ms,c=i.ensureNumber,u=i.isArrayOrTypedArray,h=t("../../constants/numerical"),f=h.FP_SAFE,p=h.BADNUM,d=h.LOG_CLIP,g=h.ONEDAY,v=h.ONEHOUR,m=h.ONEMIN,y=h.ONESEC,x=t("./axis_ids"),b=t("./constants"),_=b.HOUR_PATTERN,w=b.WEEKDAY_PATTERN;function k(t){return Math.pow(10,t)}function T(t){return null!=t}e.exports=function(t,e){e=e||{};var r=t._id||"x",h=r.charAt(0);function M(e,r){if(e>0)return Math.log(e)/Math.LN10;if(e<=0&&r&&t.range&&2===t.range.length){var n=t.range[0],a=t.range[1];return.5*(n+a-2*d*Math.abs(n-a))}return p}function A(e,r,n){var o=l(e,n||t.calendar);if(o===p){if(!a(e))return p;e=+e;var s=Math.floor(10*i.mod(e+.05,1)),c=Math.round(e-s/10);o=l(new Date(c))+s/10}return o}function S(e,r,n){return s(e,r,n||t.calendar)}function E(e){return t._categories[Math.round(e)]}function L(e){if(T(e)){if(void 0===t._categoriesMap&&(t._categoriesMap={}),void 0!==t._categoriesMap[e])return t._categoriesMap[e];t._categories.push("number"==typeof e?String(e):e);var r=t._categories.length-1;return t._categoriesMap[e]=r,r}return p}function C(e){if(t._categoriesMap)return t._categoriesMap[e]}function P(t){var e=C(t);return void 0!==e?e:a(t)?+t:void 0}function O(t,e,r){return n.round(r+e*t,2)}function z(t,e,r){return(t-r)/e}var I=function(e){return a(e)?O(e,t._m,t._b):p},D=function(e){return z(e,t._m,t._b)};if(t.rangebreaks){var R="y"===h;I=function(e){if(!a(e))return p;var r=t._rangebreaks.length;if(!r)return O(e,t._m,t._b);var n=R;t.range[0]>t.range[1]&&(n=!n);for(var i=n?-1:1,o=i*e,s=0,l=0;l<r;l++){var c=i*t._rangebreaks[l].min,u=i*t._rangebreaks[l].max;if(o<c)break;if(!(o>u)){s=o<(c+u)/2?l:l+1;break}s=l+1}var h=t._B[s]||0;return isFinite(h)?O(e,t._m2,h):0},D=function(e){var r=t._rangebreaks.length;if(!r)return z(e,t._m,t._b);for(var n=0,a=0;a<r&&!(e<t._rangebreaks[a].pmin);a++)e>t._rangebreaks[a].pmax&&(n=a+1);return z(e,t._m2,t._B[n])}}t.c2l="log"===t.type?M:c,t.l2c="log"===t.type?k:c,t.l2p=I,t.p2l=D,t.c2p="log"===t.type?function(t,e){return I(M(t,e))}:I,t.p2c="log"===t.type?function(t){return k(D(t))}:D,-1!==["linear","-"].indexOf(t.type)?(t.d2r=t.r2d=t.d2c=t.r2c=t.d2l=t.r2l=o,t.c2d=t.c2r=t.l2d=t.l2r=c,t.d2p=t.r2p=function(e){return t.l2p(o(e))},t.p2d=t.p2r=D,t.cleanPos=c):"log"===t.type?(t.d2r=t.d2l=function(t,e){return M(o(t),e)},t.r2d=t.r2c=function(t){return k(o(t))},t.d2c=t.r2l=o,t.c2d=t.l2r=c,t.c2r=M,t.l2d=k,t.d2p=function(e,r){return t.l2p(t.d2r(e,r))},t.p2d=function(t){return k(D(t))},t.r2p=function(e){return t.l2p(o(e))},t.p2r=D,t.cleanPos=c):"date"===t.type?(t.d2r=t.r2d=i.identity,t.d2c=t.r2c=t.d2l=t.r2l=A,t.c2d=t.c2r=t.l2d=t.l2r=S,t.d2p=t.r2p=function(e,r,n){return t.l2p(A(e,0,n))},t.p2d=t.p2r=function(t,e,r){return S(D(t),e,r)},t.cleanPos=function(e){return i.cleanDate(e,p,t.calendar)}):"category"===t.type?(t.d2c=t.d2l=L,t.r2d=t.c2d=t.l2d=E,t.d2r=t.d2l_noadd=P,t.r2c=function(e){var r=P(e);return void 0!==r?r:t.fraction2r(.5)},t.l2r=t.c2r=c,t.r2l=P,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return E(D(t))},t.r2p=t.d2p,t.p2r=D,t.cleanPos=function(t){return"string"==typeof t&&""!==t?t:c(t)}):"multicategory"===t.type&&(t.r2d=t.c2d=t.l2d=E,t.d2r=t.d2l_noadd=P,t.r2c=function(e){var r=P(e);return void 0!==r?r:t.fraction2r(.5)},t.r2c_just_indices=C,t.l2r=t.c2r=c,t.r2l=P,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return E(D(t))},t.r2p=t.d2p,t.p2r=D,t.cleanPos=function(t){return Array.isArray(t)||"string"==typeof t&&""!==t?t:c(t)},t.setupMultiCategory=function(n){var a,o,s=t._traceIndices,l=e._axisMatchGroups;if(l&&l.length&&0===t._categories.length)for(a=0;a<l.length;a++){var c=l[a];if(c[r])for(var f in c)if(f!==r){var p=e[x.id2name(f)];s=s.concat(p._traceIndices)}}var d=[[0,{}],[0,{}]],g=[];for(a=0;a<s.length;a++){var v=n[s[a]];if(h in v){var m=v[h],y=v._length||i.minRowLength(m);if(u(m[0])&&u(m[1]))for(o=0;o<y;o++){var b=m[0][o],_=m[1][o];T(b)&&T(_)&&(g.push([b,_]),b in d[0][1]||(d[0][1][b]=d[0][0]++),_ in d[1][1]||(d[1][1][_]=d[1][0]++))}}}for(g.sort(function(t,e){var r=d[0][1],n=r[t[0]]-r[e[0]];if(n)return n;var a=d[1][1];return a[t[1]]-a[e[1]]}),a=0;a<g.length;a++)L(g[a])}),t.fraction2r=function(e){var r=t.r2l(t.range[0]),n=t.r2l(t.range[1]);return t.l2r(r+e*(n-r))},t.r2fraction=function(e){var r=t.r2l(t.range[0]),n=t.r2l(t.range[1]);return(t.r2l(e)-r)/(n-r)},t.cleanRange=function(e,r){r||(r={}),e||(e="range");var n,o,s=i.nestedProperty(t,e).get();if(o=(o="date"===t.type?i.dfltRange(t.calendar):"y"===h?b.DFLTRANGEY:r.dfltRange||b.DFLTRANGEX).slice(),"tozero"!==t.rangemode&&"nonnegative"!==t.rangemode||(o[0]=0),s&&2===s.length)for("date"!==t.type||t.autorange||(s[0]=i.cleanDate(s[0],p,t.calendar),s[1]=i.cleanDate(s[1],p,t.calendar)),n=0;n<2;n++)if("date"===t.type){if(!i.isDateTime(s[n],t.calendar)){t[e]=o;break}if(t.r2l(s[0])===t.r2l(s[1])){var l=i.constrain(t.r2l(s[0]),i.MIN_MS+1e3,i.MAX_MS-1e3);s[0]=t.l2r(l-1e3),s[1]=t.l2r(l+1e3);break}}else{if(!a(s[n])){if(!a(s[1-n])){t[e]=o;break}s[n]=s[1-n]*(n?10:.1)}if(s[n]<-f?s[n]=-f:s[n]>f&&(s[n]=f),s[0]===s[1]){var c=Math.max(1,Math.abs(1e-6*s[0]));s[0]-=c,s[1]+=c}}else i.nestedProperty(t,e).set(o)},t.setScale=function(r){var n=e._size;if(t.overlaying){var a=x.getFromId({_fullLayout:e},t.overlaying);t.domain=a.domain}var i=r&&t._r?"_r":"range",o=t.calendar;t.cleanRange(i);var s,l,c=t.r2l(t[i][0],o),u=t.r2l(t[i][1],o),f="y"===h;if((f?(t._offset=n.t+(1-t.domain[1])*n.h,t._length=n.h*(t.domain[1]-t.domain[0]),t._m=t._length/(c-u),t._b=-t._m*u):(t._offset=n.l+t.domain[0]*n.w,t._length=n.w*(t.domain[1]-t.domain[0]),t._m=t._length/(u-c),t._b=-t._m*c),t._rangebreaks=[],t._lBreaks=0,t._m2=0,t._B=[],t.rangebreaks)&&(t._rangebreaks=t.locateBreaks(Math.min(c,u),Math.max(c,u)),t._rangebreaks.length)){for(s=0;s<t._rangebreaks.length;s++)l=t._rangebreaks[s],t._lBreaks+=Math.abs(l.max-l.min);var p=f;c>u&&(p=!p),p&&t._rangebreaks.reverse();var d=p?-1:1;for(t._m2=d*t._length/(Math.abs(u-c)-t._lBreaks),t._B.push(-t._m2*(f?u:c)),s=0;s<t._rangebreaks.length;s++)l=t._rangebreaks[s],t._B.push(t._B[t._B.length-1]-d*t._m2*(l.max-l.min));for(s=0;s<t._rangebreaks.length;s++)(l=t._rangebreaks[s]).pmin=I(l.min),l.pmax=I(l.max)}if(!isFinite(t._m)||!isFinite(t._b)||t._length<0)throw e._replotting=!1,new Error("Something went wrong with axis scaling")},t.maskBreaks=function(e){for(var r,n,a,s,l,c=t.rangebreaks||[],u=0;u<c.length;u++){var h=c[u];if(h.enabled)if(h.bounds){var f=h.pattern;switch(n=(r=i.simpleMap(h.bounds,f?o:t.d2c))[0],a=r[1],f){case w:s=(l=new Date(e)).getUTCDay(),n>a&&(a+=7,s<n&&(s+=7));break;case _:s=(l=new Date(e)).getUTCHours()+(l.getUTCMinutes()/60+l.getUTCSeconds()/3600+l.getUTCMilliseconds()/36e5),n>a&&(a+=24,s<n&&(s+=24));break;case"":s=e}if(s>=n&&s<a)return p}else for(var d=i.simpleMap(h.values,t.d2c).sort(i.sorterAsc),g=0;g<d.length;g++)if(a=(n=d[g])+h.dvalue,e>=n&&e<a)return p}return e},t.locateBreaks=function(e,r){var n,a,s,l,c=[];if(!t.rangebreaks)return c;var u=t.rangebreaks.slice().sort(function(t,e){return t.pattern===w&&e.pattern===_?-1:e.pattern===w&&t.pattern===_?1:0}),h=function(t,n){if((t=i.constrain(t,e,r))!==(n=i.constrain(n,e,r))){for(var a=!0,o=0;o<c.length;o++){var s=c[o];t>s.max||n<s.min||(t<s.min&&(s.min=t),n>s.max&&(s.max=n),a=!1)}a&&c.push({min:t,max:n})}};for(n=0;n<u.length;n++){var f=u[n];if(f.enabled)if(f.bounds){var p=e,d=r;f.pattern&&(p=Math.floor(p)),s=(a=i.simpleMap(f.bounds,f.pattern?o:t.r2l))[0],l=a[1];var x,b,k=new Date(p);switch(f.pattern){case w:b=7*g,x=(l-s+(l<s?7:0))*g,p+=s*g-(k.getUTCDay()*g+k.getUTCHours()*v+k.getUTCMinutes()*m+k.getUTCSeconds()*y+k.getUTCMilliseconds());break;case _:b=g,x=(l-s+(l<s?24:0))*v,p+=s*v-(k.getUTCHours()*v+k.getUTCMinutes()*m+k.getUTCSeconds()*y+k.getUTCMilliseconds());break;default:p=Math.min(a[0],a[1]),x=b=(d=Math.max(a[0],a[1]))-p}for(var T=p;T<d;T+=b)h(T,T+x)}else for(var M=i.simpleMap(f.values,t.d2c),A=0;A<M.length;A++)h(s=M[A],l=s+f.dvalue)}return c.sort(function(t,e){return t.min-e.min}),c},t.makeCalcdata=function(e,r){var n,a,o,s,l=t.type,c="date"===l&&e[r+"calendar"];if(r in e){if(n=e[r],s=e._length||i.minRowLength(n),i.isTypedArray(n)&&("linear"===l||"log"===l)){if(s===n.length)return n;if(n.subarray)return n.subarray(0,s)}if("multicategory"===l)return function(t,e){for(var r=new Array(e),n=0;n<e;n++){var a=(t[0]||[])[n],i=(t[1]||[])[n];r[n]=C([a,i])}return r}(n,s);for(a=new Array(s),o=0;o<s;o++)a[o]=t.d2c(n[o],0,c)}else{var u=r+"0"in e?t.d2c(e[r+"0"],0,c):0,h=e["d"+r]?Number(e["d"+r]):1;for(n=e[{x:"y",y:"x"}[r]],s=e._length||n.length,a=new Array(s),o=0;o<s;o++)a[o]=u+o*h}if(t.rangebreaks)for(o=0;o<s;o++)a[o]=t.maskBreaks(a[o]);return a},t.isValidRange=function(e){return Array.isArray(e)&&2===e.length&&a(t.r2l(e[0]))&&a(t.r2l(e[1]))},t.isPtWithinRange=function(e,r){var n=t.c2l(e[h],null,r),a=t.r2l(t.range[0]),i=t.r2l(t.range[1]);return a<i?a<=n&&n<=i:i<=n&&n<=a},t.clearCalc=function(){var n=function(){t._categories=[],t._categoriesMap={}},a=e._axisMatchGroups;if(a&&a.length){for(var i=!1,o=0;o<a.length;o++){var s=a[o];if(s[r]){i=!0;var l=null,c=null;for(var u in s){var h=e[x.id2name(u)];if(h._categories){l=h._categories,c=h._categoriesMap;break}}l&&c?(t._categories=l,t._categoriesMap=c):n();break}}i||n()}else n();if(t._initialCategories)for(var f=0;f<t._initialCategories.length;f++)L(t._initialCategories[f])},t.sortByInitialCategories=function(){var n=[];if(t._categories=[],t._categoriesMap={},t._initialCategories)for(var a=0;a<t._initialCategories.length;a++)L(t._initialCategories[a]);n=n.concat(t._traceIndices);var i=t._matchGroup;for(var o in i)if(r!==o){var s=e[x.id2name(o)];s._categories=t._categories,s._categoriesMap=t._categoriesMap,n=n.concat(s._traceIndices)}return n};var F=e._d3locale;"date"===t.type&&(t._dateFormat=F?F.timeFormat.utc:n.time.format.utc,t._extraFormat=e._extraFormat),t._separators=e.separators,t._numFormat=F?F.numberFormat:n.format,delete t._minDtick,delete t._forceTick0}},{"../../constants/numerical":693,"../../lib":717,"./axis_ids":768,"./constants":771,d3:165,"fast-isnumeric":228}],784:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes"),i=t("../array_container_defaults");function o(t){var e=["showexponent","showtickprefix","showticksuffix"].filter(function(e){return void 0!==t[e]});if(e.every(function(r){return t[r]===t[e[0]]})||1===e.length)return t[e[0]]}function s(t,e){function r(r,i){return n.coerce(t,e,a.tickformatstops,r,i)}r("enabled")&&(r("dtickrange"),r("value"))}e.exports=function(t,e,r,l,c,u){u&&1!==u.pass||function(t,e,r,n,a){var i=o(t);r("tickprefix")&&r("showtickprefix",i);r("ticksuffix",a.tickSuffixDflt)&&r("showticksuffix",i)}(t,0,r,0,c),u&&2!==u.pass||function(t,e,r,l,c){var u=o(t);r("tickprefix")&&r("showtickprefix",u);r("ticksuffix",c.tickSuffixDflt)&&r("showticksuffix",u);if(r("showticklabels")){var h=c.font||{},f=e.color,p=f&&f!==a.color.dflt?f:h.color;if(n.coerceFont(r,"tickfont",{family:h.family,size:h.size,color:p}),r("tickangle"),"category"!==l){var d=r("tickformat");i(t,e,{name:"tickformatstops",inclusionAttr:"enabled",handleItemDefaults:s}),e.tickformatstops.length||delete e.tickformatstops,d||"date"===l||(r("showexponent",u),r("exponentformat"),r("separatethousands"))}}}(t,e,r,l,c)}},{"../../lib":717,"../array_container_defaults":761,"./layout_attributes":777}],785:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e,r,i){var o=n.coerce2(t,e,a,"ticklen"),s=n.coerce2(t,e,a,"tickwidth"),l=n.coerce2(t,e,a,"tickcolor",e.color);r("ticks",i.outerTicks||o||s||l?"outside":"")||(delete e.ticklen,delete e.tickwidth,delete e.tickcolor)}},{"../../lib":717,"./layout_attributes":777}],786:[function(t,e,r){"use strict";var n=t("./clean_ticks");e.exports=function(t,e,r,a){function i(r){var n=t[r];return void 0!==n?n:(e._template||{})[r]}var o,s=i("tick0"),l=i("dtick"),c=i("tickvals");"array"!==i("tickmode")||"log"!==a&&"date"!==a?o=r("tickmode",Array.isArray(c)?"array":l?"linear":"auto"):o=e.tickmode="auto";if("auto"===o)r("nticks");else if("linear"===o){var u=e.dtick=n.dtick(l,a);e.tick0=n.tick0(s,a,e.calendar,u)}else if("multicategory"!==a){void 0===r("tickvals")?e.tickmode="auto":r("ticktext")}}},{"./clean_ticks":770}],787:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../lib"),o=t("../../components/drawing"),s=t("./axes");e.exports=function(t,e,r,l){var c=t._fullLayout;if(0!==e.length){var u,h,f,p;l&&(u=l());var d=n.ease(r.easing);return t._transitionData._interruptCallbacks.push(function(){return window.cancelAnimationFrame(p),p=null,function(){for(var r={},n=0;n<e.length;n++){var i=e[n],o=i.plotinfo.xaxis,s=i.plotinfo.yaxis;i.xr0&&(r[o._name+".range"]=i.xr0.slice()),i.yr0&&(r[s._name+".range"]=i.yr0.slice())}return a.call("relayout",t,r).then(function(){for(var t=0;t<e.length;t++)g(e[t].plotinfo)})}()}),h=Date.now(),p=window.requestAnimationFrame(function n(){f=Date.now();for(var i=Math.min(1,(f-h)/r.duration),o=d(i),s=0;s<e.length;s++)v(e[s],o);f-h>r.duration?(function(){for(var r={},n=0;n<e.length;n++){var i=e[n],o=i.plotinfo.xaxis,s=i.plotinfo.yaxis;i.xr1&&(r[o._name+".range"]=i.xr1.slice()),i.yr1&&(r[s._name+".range"]=i.yr1.slice())}u&&u(),a.call("relayout",t,r).then(function(){for(var t=0;t<e.length;t++)g(e[t].plotinfo)})}(),p=window.cancelAnimationFrame(n)):p=window.requestAnimationFrame(n)}),Promise.resolve()}function g(t){var e=t.xaxis,r=t.yaxis;c._defs.select("#"+t.clipId+"> rect").call(o.setTranslate,0,0).call(o.setScale,1,1),t.plot.call(o.setTranslate,e._offset,r._offset).call(o.setScale,1,1);var n=t.plot.selectAll(".scatterlayer .trace");n.selectAll(".point").call(o.setPointGroupScale,1,1),n.selectAll(".textpoint").call(o.setTextPointsScale,1,1),n.call(o.hideOutsideRangePoints,t)}function v(e,r){var n=e.plotinfo,a=n.xaxis,l=n.yaxis,c=a._length,u=l._length,h=!!e.xr1,f=!!e.yr1,p=[];if(h){var d=i.simpleMap(e.xr0,a.r2l),g=i.simpleMap(e.xr1,a.r2l),v=d[1]-d[0],m=g[1]-g[0];p[0]=(d[0]*(1-r)+r*g[0]-d[0])/(d[1]-d[0])*c,p[2]=c*(1-r+r*m/v),a.range[0]=a.l2r(d[0]*(1-r)+r*g[0]),a.range[1]=a.l2r(d[1]*(1-r)+r*g[1])}else p[0]=0,p[2]=c;if(f){var y=i.simpleMap(e.yr0,l.r2l),x=i.simpleMap(e.yr1,l.r2l),b=y[1]-y[0],_=x[1]-x[0];p[1]=(y[1]*(1-r)+r*x[1]-y[1])/(y[0]-y[1])*u,p[3]=u*(1-r+r*_/b),l.range[0]=a.l2r(y[0]*(1-r)+r*x[0]),l.range[1]=l.l2r(y[1]*(1-r)+r*x[1])}else p[1]=0,p[3]=u;s.drawOne(t,a,{skipTitle:!0}),s.drawOne(t,l,{skipTitle:!0}),s.redrawComponents(t,[a._id,l._id]);var w=h?c/p[2]:1,k=f?u/p[3]:1,T=h?p[0]:0,M=f?p[1]:0,A=h?p[0]/p[2]*c:0,S=f?p[1]/p[3]*u:0,E=a._offset-A,L=l._offset-S;n.clipRect.call(o.setTranslate,T,M).call(o.setScale,1/w,1/k),n.plot.call(o.setTranslate,E,L).call(o.setScale,w,k),o.setPointGroupScale(n.zoomScalePts,1/w,1/k),o.setTextPointsScale(n.zoomScaleTxt,1/w,1/k)}s.redrawComponents(t)}},{"../../components/drawing":612,"../../lib":717,"../../registry":846,"./axes":765,d3:165}],788:[function(t,e,r){"use strict";var n=t("../../registry").traceIs,a=t("./axis_autotype");function i(t){return{v:"x",h:"y"}[t.orientation||"v"]}function o(t,e){var r=i(t),a=n(t,"box-violin"),o=n(t._fullInput||{},"candlestick");return a&&!o&&e===r&&void 0===t[r]&&void 0===t[r+"0"]}e.exports=function(t,e,r,s){"-"===r("type",(s.splomStash||{}).type)&&(!function(t,e){if("-"!==t.type)return;var r,s=t._id,l=s.charAt(0);-1!==s.indexOf("scene")&&(s=l);var c=function(t,e,r){for(var n=0;n<t.length;n++){var a=t[n];if("splom"===a.type&&a._length>0&&(a["_"+r+"axes"]||{})[e])return a;if((a[r+"axis"]||r)===e){if(o(a,r))return a;if((a[r]||[]).length||a[r+"0"])return a}}}(e,s,l);if(!c)return;if("histogram"===c.type&&l==={v:"y",h:"x"}[c.orientation||"v"])return void(t.type="linear");var u=l+"calendar",h=c[u],f={noMultiCategory:!n(c,"cartesian")||n(c,"noMultiCategory")};"box"===c.type&&c._hasPreCompStats&&l==={h:"x",v:"y"}[c.orientation||"v"]&&(f.noMultiCategory=!0);if(o(c,l)){var p=i(c),d=[];for(r=0;r<e.length;r++){var g=e[r];n(g,"box-violin")&&(g[l+"axis"]||l)===s&&(void 0!==g[p]?d.push(g[p][0]):void 0!==g.name?d.push(g.name):d.push("text"),g[u]!==h&&(h=void 0))}t.type=a(d,h,f)}else if("splom"===c.type){var v=c.dimensions,m=v[c._axesDim[s]];m.visible&&(t.type=a(m.values,h,f))}else t.type=a(c[l]||[c[l+"0"]],h,f)}(e,s.data),"-"===e.type?e.type="linear":t.type=e.type)}},{"../../registry":846,"./axis_autotype":766}],789:[function(t,e,r){"use strict";var n=t("../registry"),a=t("../lib");function i(t,e,r){var n,i,o,s=!1;if("data"===e.type)n=t._fullData[null!==e.traces?e.traces[0]:0];else{if("layout"!==e.type)return!1;n=t._fullLayout}return i=a.nestedProperty(n,e.prop).get(),(o=r[e.type]=r[e.type]||{}).hasOwnProperty(e.prop)&&o[e.prop]!==i&&(s=!0),o[e.prop]=i,{changed:s,value:i}}function o(t,e){var r=[],n=e[0],i={};if("string"==typeof n)i[n]=e[1];else{if(!a.isPlainObject(n))return r;i=n}return l(i,function(t,e,n){r.push({type:"layout",prop:t,value:n})},"",0),r}function s(t,e){var r,n,i,o,s=[];if(n=e[0],i=e[1],r=e[2],o={},"string"==typeof n)o[n]=i;else{if(!a.isPlainObject(n))return s;o=n,void 0===r&&(r=i)}return void 0===r&&(r=null),l(o,function(e,n,a){var i,o;if(Array.isArray(a)){o=a.slice();var l=Math.min(o.length,t.data.length);r&&(l=Math.min(l,r.length)),i=[];for(var c=0;c<l;c++)i[c]=r?r[c]:c}else o=a,i=r?r.slice():null;if(null===i)Array.isArray(o)&&(o=o[0]);else if(Array.isArray(i)){if(!Array.isArray(o)){var u=o;o=[];for(var h=0;h<i.length;h++)o[h]=u}o.length=Math.min(i.length,o.length)}s.push({type:"data",prop:e,traces:i,value:o})},"",0),s}function l(t,e,r,n){Object.keys(t).forEach(function(i){var o=t[i];if("_"!==i[0]){var s=r+(n>0?".":"")+i;a.isPlainObject(o)?l(o,e,s,n+1):e(s,i,o)}})}r.manageCommandObserver=function(t,e,n,o){var s={},l=!0;e&&e._commandObserver&&(s=e._commandObserver),s.cache||(s.cache={}),s.lookupTable={};var c=r.hasSimpleAPICommandBindings(t,n,s.lookupTable);if(e&&e._commandObserver){if(c)return s;if(e._commandObserver.remove)return e._commandObserver.remove(),e._commandObserver=null,s}if(c){i(t,c,s.cache),s.check=function(){if(l){var e=i(t,c,s.cache);return e.changed&&o&&void 0!==s.lookupTable[e.value]&&(s.disable(),Promise.resolve(o({value:e.value,type:c.type,prop:c.prop,traces:c.traces,index:s.lookupTable[e.value]})).then(s.enable,s.enable)),e.changed}};for(var u=["plotly_relayout","plotly_redraw","plotly_restyle","plotly_update","plotly_animatingframe","plotly_afterplot"],h=0;h<u.length;h++)t._internalOn(u[h],s.check);s.remove=function(){for(var e=0;e<u.length;e++)t._removeInternalListener(u[e],s.check)}}else a.log("Unable to automatically bind plot updates to API command"),s.lookupTable={},s.remove=function(){};return s.disable=function(){l=!1},s.enable=function(){l=!0},e&&(e._commandObserver=s),s},r.hasSimpleAPICommandBindings=function(t,e,n){var a,i,o=e.length;for(a=0;a<o;a++){var s,l=e[a],c=l.method,u=l.args;if(Array.isArray(u)||(u=[]),!c)return!1;var h=r.computeAPICommandBindings(t,c,u);if(1!==h.length)return!1;if(i){if((s=h[0]).type!==i.type)return!1;if(s.prop!==i.prop)return!1;if(Array.isArray(i.traces)){if(!Array.isArray(s.traces))return!1;s.traces.sort();for(var f=0;f<i.traces.length;f++)if(i.traces[f]!==s.traces[f])return!1}else if(s.prop!==i.prop)return!1}else i=h[0],Array.isArray(i.traces)&&i.traces.sort();var p=(s=h[0]).value;if(Array.isArray(p)){if(1!==p.length)return!1;p=p[0]}n&&(n[p]=a)}return i},r.executeAPICommand=function(t,e,r){if("skip"===e)return Promise.resolve();var i=n.apiMethodRegistry[e],o=[t];Array.isArray(r)||(r=[]);for(var s=0;s<r.length;s++)o.push(r[s]);return i.apply(null,o).catch(function(t){return a.warn("API call to Plotly."+e+" rejected.",t),Promise.reject(t)})},r.computeAPICommandBindings=function(t,e,r){var n;switch(Array.isArray(r)||(r=[]),e){case"restyle":n=s(t,r);break;case"relayout":n=o(t,r);break;case"update":n=s(t,[r[0],r[2]]).concat(o(t,[r[1]]));break;case"animate":n=function(t,e){return Array.isArray(e[0])&&1===e[0].length&&-1!==["string","number"].indexOf(typeof e[0][0])?[{type:"layout",prop:"_currentFrame",value:e[0][0].toString()}]:[]}(0,r);break;default:n=[]}return n}},{"../lib":717,"../registry":846}],790:[function(t,e,r){"use strict";var n=t("../lib/extend").extendFlat;r.attributes=function(t,e){e=e||{};var r={valType:"info_array",editType:(t=t||{}).editType,items:[{valType:"number",min:0,max:1,editType:t.editType},{valType:"number",min:0,max:1,editType:t.editType}],dflt:[0,1]},a=(t.name&&t.name,t.trace,e.description&&e.description,{x:n({},r,{}),y:n({},r,{}),editType:t.editType});return t.noGridCell||(a.row={valType:"integer",min:0,dflt:0,editType:t.editType},a.column={valType:"integer",min:0,dflt:0,editType:t.editType}),a},r.defaults=function(t,e,r,n){var a=n&&n.x||[0,1],i=n&&n.y||[0,1],o=e.grid;if(o){var s=r("domain.column");void 0!==s&&(s<o.columns?a=o._domains.x[s]:delete t.domain.column);var l=r("domain.row");void 0!==l&&(l<o.rows?i=o._domains.y[l]:delete t.domain.row)}var c=r("domain.x",a),u=r("domain.y",i);c[0]<c[1]||(t.domain.x=a.slice()),u[0]<u[1]||(t.domain.y=i.slice())}},{"../lib/extend":708}],791:[function(t,e,r){"use strict";e.exports=function(t){var e=t.editType,r=t.colorEditType;void 0===r&&(r=e);var n={family:{valType:"string",noBlank:!0,strict:!0,editType:e},size:{valType:"number",min:1,editType:e},color:{valType:"color",editType:r},editType:e};return t.arrayOk&&(n.family.arrayOk=!0,n.size.arrayOk=!0,n.color.arrayOk=!0),n}},{}],792:[function(t,e,r){"use strict";e.exports={_isLinkedToArray:"frames_entry",group:{valType:"string"},name:{valType:"string"},traces:{valType:"any"},baseframe:{valType:"string"},data:{valType:"any"},layout:{valType:"any"}}},{}],793:[function(t,e,r){"use strict";r.projNames={equirectangular:"equirectangular",mercator:"mercator",orthographic:"orthographic","natural earth":"naturalEarth",kavrayskiy7:"kavrayskiy7",miller:"miller",robinson:"robinson",eckert4:"eckert4","azimuthal equal area":"azimuthalEqualArea","azimuthal equidistant":"azimuthalEquidistant","conic equal area":"conicEqualArea","conic conformal":"conicConformal","conic equidistant":"conicEquidistant",gnomonic:"gnomonic",stereographic:"stereographic",mollweide:"mollweide",hammer:"hammer","transverse mercator":"transverseMercator","albers usa":"albersUsa","winkel tripel":"winkel3",aitoff:"aitoff",sinusoidal:"sinusoidal"},r.axesNames=["lonaxis","lataxis"],r.lonaxisSpan={orthographic:180,"azimuthal equal area":360,"azimuthal equidistant":360,"conic conformal":180,gnomonic:160,stereographic:180,"transverse mercator":180,"*":360},r.lataxisSpan={"conic conformal":150,stereographic:179.5,"*":180},r.scopeDefaults={world:{lonaxisRange:[-180,180],lataxisRange:[-90,90],projType:"equirectangular",projRotate:[0,0,0]},usa:{lonaxisRange:[-180,-50],lataxisRange:[15,80],projType:"albers usa"},europe:{lonaxisRange:[-30,60],lataxisRange:[30,85],projType:"conic conformal",projRotate:[15,0,0],projParallels:[0,60]},asia:{lonaxisRange:[22,160],lataxisRange:[-15,55],projType:"mercator",projRotate:[0,0,0]},africa:{lonaxisRange:[-30,60],lataxisRange:[-40,40],projType:"mercator",projRotate:[0,0,0]},"north america":{lonaxisRange:[-180,-45],lataxisRange:[5,85],projType:"conic conformal",projRotate:[-100,0,0],projParallels:[29.5,45.5]},"south america":{lonaxisRange:[-100,-30],lataxisRange:[-60,15],projType:"mercator",projRotate:[0,0,0]}},r.clipPad=.001,r.precision=.1,r.landColor="#F0DC82",r.waterColor="#3399FF",r.locationmodeToLayer={"ISO-3":"countries","USA-states":"subunits","country names":"countries"},r.sphereSVG={type:"Sphere"},r.fillLayers={ocean:1,land:1,lakes:1},r.lineLayers={subunits:1,countries:1,coastlines:1,rivers:1,frame:1},r.layers=["bg","ocean","land","lakes","subunits","countries","coastlines","rivers","lataxis","lonaxis","frame","backplot","frontplot"],r.layersForChoropleth=["bg","ocean","land","subunits","countries","coastlines","lataxis","lonaxis","frame","backplot","rivers","lakes","frontplot"],r.layerNameToAdjective={ocean:"ocean",land:"land",lakes:"lake",subunits:"subunit",countries:"country",coastlines:"coastline",rivers:"river",frame:"frame"}},{}],794:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../lib"),o=t("../../components/color"),s=t("../../components/drawing"),l=t("../../components/fx"),c=t("../plots"),u=t("../cartesian/axes"),h=t("../cartesian/autorange").getAutoRange,f=t("../../components/dragelement"),p=t("../cartesian/select").prepSelect,d=t("../cartesian/select").selectOnClick,g=t("./zoom"),v=t("./constants"),m=t("../../lib/geo_location_utils"),y=t("../../lib/topojson_utils"),x=t("topojson-client").feature;function b(t){this.id=t.id,this.graphDiv=t.graphDiv,this.container=t.container,this.topojsonURL=t.topojsonURL,this.isStatic=t.staticPlot,this.topojsonName=null,this.topojson=null,this.projection=null,this.scope=null,this.viewInitial=null,this.fitScale=null,this.bounds=null,this.midPt=null,this.hasChoropleth=!1,this.traceHash={},this.layers={},this.basePaths={},this.dataPaths={},this.dataPoints={},this.clipDef=null,this.clipRect=null,this.bgRect=null,this.makeFramework()}t("./projections")(n);var _=b.prototype;function w(t,e){var r=v.clipPad,n=t[0]+r,a=t[1]-r,i=e[0]+r,o=e[1]-r;n>0&&a<0&&(a+=360);var s=(a-n)/4;return{type:"Polygon",coordinates:[[[n,i],[n,o],[n+s,o],[n+2*s,o],[n+3*s,o],[a,o],[a,i],[a-s,i],[a-2*s,i],[a-3*s,i],[n,i]]]}}e.exports=function(t){return new b(t)},_.plot=function(t,e,r){var n=this,a=e[this.id],i=[],o=!1;for(var s in v.layerNameToAdjective)if("frame"!==s&&a["show"+s]){o=!0;break}for(var l=0;l<t.length;l++)if(t[0][0].trace.locationmode){o=!0;break}if(o){var c=y.getTopojsonName(a);null!==n.topojson&&c===n.topojsonName||(n.topojsonName=c,void 0===PlotlyGeoAssets.topojson[n.topojsonName]&&i.push(n.fetchTopojson()))}i=i.concat(m.fetchTraceGeoData(t)),r.push(new Promise(function(r,a){Promise.all(i).then(function(){n.topojson=PlotlyGeoAssets.topojson[n.topojsonName],n.update(t,e),r()}).catch(a)}))},_.fetchTopojson=function(){var t=this,e=y.getTopojsonPath(t.topojsonURL,t.topojsonName);return new Promise(function(r,a){n.json(e,function(n,i){if(n)return 404===n.status?a(new Error(["plotly.js could not find topojson file at",e,".","Make sure the *topojsonURL* plot config option","is set properly."].join(" "))):a(new Error(["unexpected error while fetching topojson file at",e].join(" ")));PlotlyGeoAssets.topojson[t.topojsonName]=i,r()})})},_.update=function(t,e){var r=e[this.id];this.hasChoropleth=!1;for(var n=0;n<t.length;n++){var a=t[n],i=a[0].trace;"choropleth"===i.type&&(this.hasChoropleth=!0),!0===i.visible&&i._length>0&&i._module.calcGeoJSON(a,e)}if(!this.updateProjection(t,e)){this.viewInitial&&this.scope===r.scope||this.saveViewInitial(r),this.scope=r.scope,this.updateBaseLayers(e,r),this.updateDims(e,r),this.updateFx(e,r),c.generalUpdatePerTraceModule(this.graphDiv,this,t,r);var o=this.layers.frontplot.select(".scatterlayer");this.dataPoints.point=o.selectAll(".point"),this.dataPoints.text=o.selectAll("text"),this.dataPaths.line=o.selectAll(".js-line");var s=this.layers.backplot.select(".choroplethlayer");this.dataPaths.choropleth=s.selectAll("path"),this.render()}},_.updateProjection=function(t,e){var r=this.graphDiv,o=e[this.id],s=e._size,l=o.domain,c=o.projection,u=o.lonaxis,f=o.lataxis,p=u._ax,d=f._ax,g=this.projection=function(t){for(var e=t.projection.type,r=n.geo[v.projNames[e]](),a=t._isClipped?v.lonaxisSpan[e]/2:null,i=["center","rotate","parallels","clipExtent"],o=function(t){return t?r:[]},s=0;s<i.length;s++){var l=i[s];"function"!=typeof r[l]&&(r[l]=o)}r.isLonLatOverEdges=function(t){if(null===r(t))return!0;if(a){var e=r.rotate();return n.geo.distance(t,[-e[0],-e[1]])>a*Math.PI/180}return!1},r.getPath=function(){return n.geo.path().projection(r)},r.getBounds=function(t){return r.getPath().bounds(t)},r.fitExtent=function(t,e){var n=t[1][0]-t[0][0],a=t[1][1]-t[0][1],i=r.clipExtent&&r.clipExtent();r.scale(150).translate([0,0]),i&&r.clipExtent(null);var o=r.getBounds(e),s=Math.min(n/(o[1][0]-o[0][0]),a/(o[1][1]-o[0][1])),l=+t[0][0]+(n-s*(o[1][0]+o[0][0]))/2,c=+t[0][1]+(a-s*(o[1][1]+o[0][1]))/2;return i&&r.clipExtent(i),r.scale(150*s).translate([l,c])},r.precision(v.precision),a&&r.clipAngle(a-v.clipPad);return r}(o),m=[[s.l+s.w*l.x[0],s.t+s.h*(1-l.y[1])],[s.l+s.w*l.x[1],s.t+s.h*(1-l.y[0])]],y=o.center||{},x=c.rotation||{},b=u.range||[],_=f.range||[];if(o.fitbounds){p._length=m[1][0]-m[0][0],d._length=m[1][1]-m[0][1],p.range=h(r,p),d.range=h(r,d);var k=(p.range[0]+p.range[1])/2,T=(d.range[0]+d.range[1])/2;if(o._isScoped)y={lon:k,lat:T};else if(o._isClipped){y={lon:k,lat:T},x={lon:k,lat:T,roll:x.roll};var M=c.type,A=v.lonaxisSpan[M]/2||180,S=v.lataxisSpan[M]/2||180;b=[k-A,k+A],_=[T-S,T+S]}else y={lon:k,lat:T},x={lon:k,lat:x.lat,roll:x.roll}}g.center([y.lon-x.lon,y.lat-x.lat]).rotate([-x.lon,-x.lat,x.roll]).parallels(c.parallels);var E=w(b,_);g.fitExtent(m,E);var L=this.bounds=g.getBounds(E),C=this.fitScale=g.scale(),P=g.translate();if(!isFinite(L[0][0])||!isFinite(L[0][1])||!isFinite(L[1][0])||!isFinite(L[1][1])||isNaN(P[0])||isNaN(P[0])){for(var O=["fitbounds","projection.rotation","center","lonaxis.range","lataxis.range"],z="Invalid geo settings, relayout'ing to default view.",I={},D=0;D<O.length;D++)I[this.id+"."+O[D]]=null;return this.viewInitial=null,i.warn(z),r._promises.push(a.call("relayout",r,I)),z}if(o.fitbounds){var R=g.getBounds(w(p.range,d.range)),F=Math.min((L[1][0]-L[0][0])/(R[1][0]-R[0][0]),(L[1][1]-L[0][1])/(R[1][1]-R[0][1]));isFinite(F)?g.scale(F*C):i.warn("Something went wrong during"+this.id+"fitbounds computations.")}else g.scale(c.scale*C);var B=this.midPt=[(L[0][0]+L[1][0])/2,(L[0][1]+L[1][1])/2];if(g.translate([P[0]+(B[0]-P[0]),P[1]+(B[1]-P[1])]).clipExtent(L),o._isAlbersUsa){var N=g([y.lon,y.lat]),j=g.translate();g.translate([j[0]-(N[0]-j[0]),j[1]-(N[1]-j[1])])}},_.updateBaseLayers=function(t,e){var r=this,a=r.topojson,i=r.layers,l=r.basePaths;function c(t){return"lonaxis"===t||"lataxis"===t}function h(t){return Boolean(v.lineLayers[t])}function f(t){return Boolean(v.fillLayers[t])}var p=(this.hasChoropleth?v.layersForChoropleth:v.layers).filter(function(t){return h(t)||f(t)?e["show"+t]:!c(t)||e[t].showgrid}),d=r.framework.selectAll(".layer").data(p,String);d.exit().each(function(t){delete i[t],delete l[t],n.select(this).remove()}),d.enter().append("g").attr("class",function(t){return"layer "+t}).each(function(t){var e=i[t]=n.select(this);"bg"===t?r.bgRect=e.append("rect").style("pointer-events","all"):c(t)?l[t]=e.append("path").style("fill","none"):"backplot"===t?e.append("g").classed("choroplethlayer",!0):"frontplot"===t?e.append("g").classed("scatterlayer",!0):h(t)?l[t]=e.append("path").style("fill","none").style("stroke-miterlimit",2):f(t)&&(l[t]=e.append("path").style("stroke","none"))}),d.order(),d.each(function(r){var n=l[r],i=v.layerNameToAdjective[r];"frame"===r?n.datum(v.sphereSVG):h(r)||f(r)?n.datum(x(a,a.objects[r])):c(r)&&n.datum(function(t,e,r){var n,a,i,o=e[t],s=v.scopeDefaults[e.scope];"lonaxis"===t?(n=s.lonaxisRange,a=s.lataxisRange,i=function(t,e){return[t,e]}):"lataxis"===t&&(n=s.lataxisRange,a=s.lonaxisRange,i=function(t,e){return[e,t]});var l={type:"linear",range:[n[0],n[1]-1e-6],tick0:o.tick0,dtick:o.dtick};u.setConvert(l,r);var c=u.calcTicks(l);e.isScoped||"lonaxis"!==t||c.pop();for(var h=c.length,f=new Array(h),p=0;p<h;p++)for(var d=c[p].x,g=f[p]=[],m=a[0];m<a[1]+2.5;m+=2.5)g.push(i(d,m));return{type:"MultiLineString",coordinates:f}}(r,e,t)).call(o.stroke,e[r].gridcolor).call(s.dashLine,"",e[r].gridwidth),h(r)?n.call(o.stroke,e[i+"color"]).call(s.dashLine,"",e[i+"width"]):f(r)&&n.call(o.fill,e[i+"color"])})},_.updateDims=function(t,e){var r=this.bounds,n=(e.framewidth||0)/2,a=r[0][0]-n,i=r[0][1]-n,l=r[1][0]-a+n,c=r[1][1]-i+n;s.setRect(this.clipRect,a,i,l,c),this.bgRect.call(s.setRect,a,i,l,c).call(o.fill,e.bgcolor),this.xaxis._offset=a,this.xaxis._length=l,this.yaxis._offset=i,this.yaxis._length=c},_.updateFx=function(t,e){var r=this,i=r.graphDiv,o=r.bgRect,s=t.dragmode,c=t.clickmode;if(!r.isStatic){var u;"select"===s?u=function(t,e){(t.range={})[r.id]=[v([e.xmin,e.ymin]),v([e.xmax,e.ymax])]}:"lasso"===s&&(u=function(t,e,n){(t.lassoPoints={})[r.id]=n.filtered.map(v)});var h={element:r.bgRect.node(),gd:i,plotinfo:{id:r.id,xaxis:r.xaxis,yaxis:r.yaxis,fillRangeItems:u},xaxes:[r.xaxis],yaxes:[r.yaxis],subplot:r.id,clickFn:function(e){2===e&&t._zoomlayer.selectAll(".select-outline").remove()}};"pan"===s?(o.node().onmousedown=null,o.call(g(r,e)),o.on("dblclick.zoom",function(){var t=r.viewInitial,e={};for(var n in t)e[r.id+"."+n]=t[n];a.call("_guiRelayout",i,e),i.emit("plotly_doubleclick",null)}),i._context._scrollZoom.geo||o.on("wheel.zoom",null)):"select"!==s&&"lasso"!==s||(o.on(".zoom",null),h.prepFn=function(t,e,r){p(t,e,r,h,s)},f.init(h)),o.on("mousemove",function(){var t=r.projection.invert(n.mouse(this));if(!t||isNaN(t[0])||isNaN(t[1]))return f.unhover(i,n.event);r.xaxis.p2c=function(){return t[0]},r.yaxis.p2c=function(){return t[1]},l.hover(i,n.event,r.id)}),o.on("mouseout",function(){i._dragging||f.unhover(i,n.event)}),o.on("click",function(){"select"!==s&&"lasso"!==s&&(c.indexOf("select")>-1&&d(n.event,i,[r.xaxis],[r.yaxis],r.id,h),c.indexOf("event")>-1&&l.click(i,n.event))})}function v(t){return r.projection.invert([t[0]+r.xaxis._offset,t[1]+r.yaxis._offset])}},_.makeFramework=function(){var t=this,e=t.graphDiv,r=e._fullLayout,a="clip"+r._uid+t.id;t.clipDef=r._clips.append("clipPath").attr("id",a),t.clipRect=t.clipDef.append("rect"),t.framework=n.select(t.container).append("g").attr("class","geo "+t.id).call(s.setClipUrl,a,e),t.project=function(e){var r=t.projection(e);return r?[r[0]-t.xaxis._offset,r[1]-t.yaxis._offset]:[null,null]},t.xaxis={_id:"x",c2p:function(e){return t.project(e)[0]}},t.yaxis={_id:"y",c2p:function(e){return t.project(e)[1]}},t.mockAxis={type:"linear",showexponent:"all",exponentformat:"B"},u.setConvert(t.mockAxis,r)},_.saveViewInitial=function(t){var e,r=t.center||{},n=t.projection,a=n.rotation||{};this.viewInitial={fitbounds:t.fitbounds,"projection.scale":n.scale},e=t._isScoped?{"center.lon":r.lon,"center.lat":r.lat}:t._isClipped?{"projection.rotation.lon":a.lon,"projection.rotation.lat":a.lat}:{"center.lon":r.lon,"center.lat":r.lat,"projection.rotation.lon":a.lon},i.extendFlat(this.viewInitial,e)},_.render=function(){var t,e=this.projection,r=e.getPath();function n(t){var r=e(t.lonlat);return r?"translate("+r[0]+","+r[1]+")":null}function a(t){return e.isLonLatOverEdges(t.lonlat)?"none":null}for(t in this.basePaths)this.basePaths[t].attr("d",r);for(t in this.dataPaths)this.dataPaths[t].attr("d",function(t){return r(t.geojson)});for(t in this.dataPoints)this.dataPoints[t].attr("display",a).attr("transform",n)}},{"../../components/color":591,"../../components/dragelement":609,"../../components/drawing":612,"../../components/fx":630,"../../lib":717,"../../lib/geo_location_utils":711,"../../lib/topojson_utils":744,"../../registry":846,"../cartesian/autorange":764,"../cartesian/axes":765,"../cartesian/select":782,"../plots":826,"./constants":793,"./projections":798,"./zoom":799,d3:165,"topojson-client":538}],795:[function(t,e,r){"use strict";var n=t("../../plots/get_data").getSubplotCalcData,a=t("../../lib").counterRegex,i=t("./geo"),o="geo",s=a(o),l={};l[o]={valType:"subplotid",dflt:o,editType:"calc"},e.exports={attr:o,name:o,idRoot:o,idRegex:s,attrRegex:s,attributes:l,layoutAttributes:t("./layout_attributes"),supplyLayoutDefaults:t("./layout_defaults"),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,a=e._subplots[o],s=0;s<a.length;s++){var l=a[s],c=n(r,o,l),u=e[l]._subplot;u||(u=i({id:l,graphDiv:t,container:e._geolayer.node(),topojsonURL:t._context.topojsonURL,staticPlot:t._context.staticPlot}),e[l]._subplot=u),u.plot(c,e,t._promises)}},updateFx:function(t){for(var e=t._fullLayout,r=e._subplots[o],n=0;n<r.length;n++){var a=e[r[n]];a._subplot.updateFx(e,a)}},clean:function(t,e,r,n){for(var a=n._subplots[o]||[],i=0;i<a.length;i++){var s=a[i],l=n[s]._subplot;!e[s]&&l&&(l.framework.remove(),l.clipDef.remove())}}}},{"../../lib":717,"../../plots/get_data":800,"./geo":794,"./layout_attributes":796,"./layout_defaults":797}],796:[function(t,e,r){"use strict";var n=t("../../components/color/attributes"),a=t("../domain").attributes,i=t("./constants"),o=t("../../plot_api/edit_types").overrideAll,s={range:{valType:"info_array",items:[{valType:"number"},{valType:"number"}]},showgrid:{valType:"boolean",dflt:!1},tick0:{valType:"number",dflt:0},dtick:{valType:"number"},gridcolor:{valType:"color",dflt:n.lightLine},gridwidth:{valType:"number",min:0,dflt:1}};(e.exports=o({domain:a({name:"geo"},{}),fitbounds:{valType:"enumerated",values:[!1,"locations","geojson"],dflt:!1,editType:"plot"},resolution:{valType:"enumerated",values:[110,50],dflt:110,coerceNumber:!0},scope:{valType:"enumerated",values:Object.keys(i.scopeDefaults),dflt:"world"},projection:{type:{valType:"enumerated",values:Object.keys(i.projNames)},rotation:{lon:{valType:"number"},lat:{valType:"number"},roll:{valType:"number"}},parallels:{valType:"info_array",items:[{valType:"number"},{valType:"number"}]},scale:{valType:"number",min:0,dflt:1}},center:{lon:{valType:"number"},lat:{valType:"number"}},visible:{valType:"boolean",dflt:!0},showcoastlines:{valType:"boolean"},coastlinecolor:{valType:"color",dflt:n.defaultLine},coastlinewidth:{valType:"number",min:0,dflt:1},showland:{valType:"boolean",dflt:!1},landcolor:{valType:"color",dflt:i.landColor},showocean:{valType:"boolean",dflt:!1},oceancolor:{valType:"color",dflt:i.waterColor},showlakes:{valType:"boolean",dflt:!1},lakecolor:{valType:"color",dflt:i.waterColor},showrivers:{valType:"boolean",dflt:!1},rivercolor:{valType:"color",dflt:i.waterColor},riverwidth:{valType:"number",min:0,dflt:1},showcountries:{valType:"boolean"},countrycolor:{valType:"color",dflt:n.defaultLine},countrywidth:{valType:"number",min:0,dflt:1},showsubunits:{valType:"boolean"},subunitcolor:{valType:"color",dflt:n.defaultLine},subunitwidth:{valType:"number",min:0,dflt:1},showframe:{valType:"boolean"},framecolor:{valType:"color",dflt:n.defaultLine},framewidth:{valType:"number",min:0,dflt:1},bgcolor:{valType:"color",dflt:n.background},lonaxis:s,lataxis:s},"plot","from-root")).uirevision={valType:"any",editType:"none"}},{"../../components/color/attributes":590,"../../plot_api/edit_types":748,"../domain":790,"./constants":793}],797:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../subplot_defaults"),i=t("../get_data").getSubplotData,o=t("./constants"),s=t("./layout_attributes"),l=o.axesNames;function c(t,e,r,a){var s=i(a.fullData,"geo",a.id).map(function(t){return t._expandedIndex}),c=r("resolution"),u=r("scope"),h=o.scopeDefaults[u],f=r("projection.type",h.projType),p=e._isAlbersUsa="albers usa"===f;p&&(u=e.scope="usa");var d=e._isScoped="world"!==u,g=e._isConic=-1!==f.indexOf("conic"),v=e._isClipped=!!o.lonaxisSpan[f];if(!1===t.visible){var m=n.extendDeep({},e._template);m.showcoastlines=!1,m.showcountries=!1,m.showframe=!1,m.showlakes=!1,m.showland=!1,m.showocean=!1,m.showrivers=!1,m.showsubunits=!1,m.lonaxis&&(m.lonaxis.showgrid=!1),m.lataxis&&(m.lataxis.showgrid=!1),e._template=m}for(var y=r("visible"),x=0;x<l.length;x++){var b,_=l[x],w=[30,10][x];if(d)b=h[_+"Range"];else{var k=o[_+"Span"],T=(k[f]||k["*"])/2,M=r("projection.rotation."+_.substr(0,3),h.projRotate[x]);b=[M-T,M+T]}var A=r(_+".range",b);r(_+".tick0"),r(_+".dtick",w),r(_+".showgrid",!!y&&void 0)&&(r(_+".gridcolor"),r(_+".gridwidth")),e[_]._ax={type:"linear",_id:_.slice(0,3),_traceIndices:s,setScale:n.identity,c2l:n.identity,r2l:n.identity,autorange:!0,range:A.slice(),_m:1,_input:{}}}var S=e.lonaxis.range,E=e.lataxis.range,L=S[0],C=S[1];L>0&&C<0&&(C+=360);var P,O,z,I=(L+C)/2;if(!p){var D=d?h.projRotate:[I,0,0];P=r("projection.rotation.lon",D[0]),r("projection.rotation.lat",D[1]),r("projection.rotation.roll",D[2]),r("showcoastlines",!d&&y)&&(r("coastlinecolor"),r("coastlinewidth")),r("showocean",!!y&&void 0)&&r("oceancolor")}(p?(O=-96.6,z=38.7):(O=d?I:P,z=(E[0]+E[1])/2),r("center.lon",O),r("center.lat",z),g)&&r("projection.parallels",h.projParallels||[0,60]);r("projection.scale"),r("showland",!!y&&void 0)&&r("landcolor"),r("showlakes",!!y&&void 0)&&r("lakecolor"),r("showrivers",!!y&&void 0)&&(r("rivercolor"),r("riverwidth")),r("showcountries",d&&"usa"!==u&&y)&&(r("countrycolor"),r("countrywidth")),("usa"===u||"north america"===u&&50===c)&&(r("showsubunits",y),r("subunitcolor"),r("subunitwidth")),d||r("showframe",y)&&(r("framecolor"),r("framewidth")),r("bgcolor"),r("fitbounds")&&(delete e.projection.scale,d?(delete e.center.lon,delete e.center.lat):v?(delete e.center.lon,delete e.center.lat,delete e.projection.rotation.lon,delete e.projection.rotation.lat,delete e.lonaxis.range,delete e.lataxis.range):(delete e.center.lon,delete e.center.lat,delete e.projection.rotation.lon))}e.exports=function(t,e,r){a(t,e,r,{type:"geo",attributes:s,handleDefaults:c,fullData:r,partition:"y"})}},{"../../lib":717,"../get_data":800,"../subplot_defaults":840,"./constants":793,"./layout_attributes":796}],798:[function(t,e,r){"use strict";e.exports=function(t){function e(t,e){return{type:"Feature",id:t.id,properties:t.properties,geometry:r(t.geometry,e)}}function r(e,n){if(!e)return null;if("GeometryCollection"===e.type)return{type:"GeometryCollection",geometries:object.geometries.map(function(t){return r(t,n)})};if(!c.hasOwnProperty(e.type))return null;var a=c[e.type];return t.geo.stream(e,n(a)),a.result()}t.geo.project=function(t,e){var a=e.stream;if(!a)throw new Error("not yet supported");return(t&&n.hasOwnProperty(t.type)?n[t.type]:r)(t,a)};var n={Feature:e,FeatureCollection:function(t,r){return{type:"FeatureCollection",features:t.features.map(function(t){return e(t,r)})}}},a=[],i=[],o={point:function(t,e){a.push([t,e])},result:function(){var t=a.length?a.length<2?{type:"Point",coordinates:a[0]}:{type:"MultiPoint",coordinates:a}:null;return a=[],t}},s={lineStart:u,point:function(t,e){a.push([t,e])},lineEnd:function(){a.length&&(i.push(a),a=[])},result:function(){var t=i.length?i.length<2?{type:"LineString",coordinates:i[0]}:{type:"MultiLineString",coordinates:i}:null;return i=[],t}},l={polygonStart:u,lineStart:u,point:function(t,e){a.push([t,e])},lineEnd:function(){var t=a.length;if(t){do{a.push(a[0].slice())}while(++t<4);i.push(a),a=[]}},polygonEnd:u,result:function(){if(!i.length)return null;var t=[],e=[];return i.forEach(function(r){!function(t){if((e=t.length)<4)return!1;for(var e,r=0,n=t[e-1][1]*t[0][0]-t[e-1][0]*t[0][1];++r<e;)n+=t[r-1][1]*t[r][0]-t[r-1][0]*t[r][1];return n<=0}(r)?e.push(r):t.push([r])}),e.forEach(function(e){var r=e[0];t.some(function(t){if(function(t,e){for(var r=e[0],n=e[1],a=!1,i=0,o=t.length,s=o-1;i<o;s=i++){var l=t[i],c=l[0],u=l[1],h=t[s],f=h[0],p=h[1];u>n^p>n&&r<(f-c)*(n-u)/(p-u)+c&&(a=!a)}return a}(t[0],r))return t.push(e),!0})||t.push([e])}),i=[],t.length?t.length>1?{type:"MultiPolygon",coordinates:t}:{type:"Polygon",coordinates:t[0]}:null}},c={Point:o,MultiPoint:o,LineString:s,MultiLineString:s,Polygon:l,MultiPolygon:l,Sphere:l};function u(){}var h=1e-6,f=h*h,p=Math.PI,d=p/2,g=(Math.sqrt(p),p/180),v=180/p;function m(t){return t>1?d:t<-1?-d:Math.asin(t)}function y(t){return t>1?0:t<-1?p:Math.acos(t)}var x=t.geo.projection,b=t.geo.projectionMutator;function _(t,e){var r=(2+d)*Math.sin(e);e/=2;for(var n=0,a=1/0;n<10&&Math.abs(a)>h;n++){var i=Math.cos(e);e-=a=(e+Math.sin(e)*(i+2)-r)/(2*i*(1+i))}return[2/Math.sqrt(p*(4+p))*t*(1+Math.cos(e)),2*Math.sqrt(p/(4+p))*Math.sin(e)]}t.geo.interrupt=function(e){var r,n=[[[[-p,0],[0,d],[p,0]]],[[[-p,0],[0,-d],[p,0]]]];function a(t,r){for(var a=r<0?-1:1,i=n[+(r<0)],o=0,s=i.length-1;o<s&&t>i[o][2][0];++o);var l=e(t-i[o][1][0],r);return l[0]+=e(i[o][1][0],a*r>a*i[o][0][1]?i[o][0][1]:r)[0],l}e.invert&&(a.invert=function(t,i){for(var o=r[+(i<0)],s=n[+(i<0)],c=0,u=o.length;c<u;++c){var h=o[c];if(h[0][0]<=t&&t<h[1][0]&&h[0][1]<=i&&i<h[1][1]){var f=e.invert(t-e(s[c][1][0],0)[0],i);return f[0]+=s[c][1][0],l(a(f[0],f[1]),[t,i])?f:null}}});var i=t.geo.projection(a),o=i.stream;function s(t,e){for(var r,n,a,i=-1,o=t.length,s=t[0],l=[];++i<o;){n=((r=t[i])[0]-s[0])/e,a=(r[1]-s[1])/e;for(var c=0;c<e;++c)l.push([s[0]+c*n,s[1]+c*a]);s=r}return l.push(r),l}function l(t,e){return Math.abs(t[0]-e[0])<h&&Math.abs(t[1]-e[1])<h}return i.stream=function(e){var r=i.rotate(),a=o(e),l=(i.rotate([0,0]),o(e));return i.rotate(r),a.sphere=function(){t.geo.stream(function(){for(var e=1e-6,r=[],a=0,i=n[0].length;a<i;++a){var o=n[0][a],l=180*o[0][0]/p,c=180*o[0][1]/p,u=180*o[1][1]/p,h=180*o[2][0]/p,f=180*o[2][1]/p;r.push(s([[l+e,c+e],[l+e,u-e],[h-e,u-e],[h-e,f+e]],30))}for(var a=n[1].length-1;a>=0;--a){var o=n[1][a],l=180*o[0][0]/p,c=180*o[0][1]/p,u=180*o[1][1]/p,h=180*o[2][0]/p,f=180*o[2][1]/p;r.push(s([[h-e,f-e],[h-e,u+e],[l+e,u+e],[l+e,c-e]],30))}return{type:"Polygon",coordinates:[t.merge(r)]}}(),l)},a},i.lobes=function(t){return arguments.length?(n=t.map(function(t){return t.map(function(t){return[[t[0][0]*p/180,t[0][1]*p/180],[t[1][0]*p/180,t[1][1]*p/180],[t[2][0]*p/180,t[2][1]*p/180]]})}),r=n.map(function(t){return t.map(function(t){var r,n=e(t[0][0],t[0][1])[0],a=e(t[2][0],t[2][1])[0],i=e(t[1][0],t[0][1])[1],o=e(t[1][0],t[1][1])[1];return i>o&&(r=i,i=o,o=r),[[n,i],[a,o]]})}),i):n.map(function(t){return t.map(function(t){return[[180*t[0][0]/p,180*t[0][1]/p],[180*t[1][0]/p,180*t[1][1]/p],[180*t[2][0]/p,180*t[2][1]/p]]})})},i},_.invert=function(t,e){var r=.5*e*Math.sqrt((4+p)/p),n=m(r),a=Math.cos(n);return[t/(2/Math.sqrt(p*(4+p))*(1+a)),m((n+r*(a+2))/(2+d))]},(t.geo.eckert4=function(){return x(_)}).raw=_;var w=t.geo.azimuthalEqualArea.raw;function k(t,e){if(arguments.length<2&&(e=t),1===e)return w;if(e===1/0)return T;function r(r,n){var a=w(r/e,n);return a[0]*=t,a}return r.invert=function(r,n){var a=w.invert(r/t,n);return a[0]*=e,a},r}function T(t,e){return[t*Math.cos(e)/Math.cos(e/=2),2*Math.sin(e)]}function M(t,e){return[3*t/(2*p)*Math.sqrt(p*p/3-e*e),e]}function A(t,e){return[t,1.25*Math.log(Math.tan(p/4+.4*e))]}function S(t){return function(e){var r,n=t*Math.sin(e),a=30;do{e-=r=(e+Math.sin(e)-n)/(1+Math.cos(e))}while(Math.abs(r)>h&&--a>0);return e/2}}T.invert=function(t,e){var r=2*m(e/2);return[t*Math.cos(r/2)/Math.cos(r),r]},(t.geo.hammer=function(){var t=2,e=b(k),r=e(t);return r.coefficient=function(r){return arguments.length?e(t=+r):t},r}).raw=k,M.invert=function(t,e){return[2/3*p*t/Math.sqrt(p*p/3-e*e),e]},(t.geo.kavrayskiy7=function(){return x(M)}).raw=M,A.invert=function(t,e){return[t,2.5*Math.atan(Math.exp(.8*e))-.625*p]},(t.geo.miller=function(){return x(A)}).raw=A,S(p);var E=function(t,e,r){var n=S(r);function a(r,a){return[t*r*Math.cos(a=n(a)),e*Math.sin(a)]}return a.invert=function(n,a){var i=m(a/e);return[n/(t*Math.cos(i)),m((2*i+Math.sin(2*i))/r)]},a}(Math.SQRT2/d,Math.SQRT2,p);function L(t,e){var r=e*e,n=r*r;return[t*(.8707-.131979*r+n*(n*(.003971*r-.001529*n)-.013791)),e*(1.007226+r*(.015085+n*(.028874*r-.044475-.005916*n)))]}(t.geo.mollweide=function(){return x(E)}).raw=E,L.invert=function(t,e){var r,n=e,a=25;do{var i=n*n,o=i*i;n-=r=(n*(1.007226+i*(.015085+o*(.028874*i-.044475-.005916*o)))-e)/(1.007226+i*(.045255+o*(.259866*i-.311325-.005916*11*o)))}while(Math.abs(r)>h&&--a>0);return[t/(.8707+(i=n*n)*(i*(i*i*i*(.003971-.001529*i)-.013791)-.131979)),n]},(t.geo.naturalEarth=function(){return x(L)}).raw=L;var C=[[.9986,-.062],[1,0],[.9986,.062],[.9954,.124],[.99,.186],[.9822,.248],[.973,.31],[.96,.372],[.9427,.434],[.9216,.4958],[.8962,.5571],[.8679,.6176],[.835,.6769],[.7986,.7346],[.7597,.7903],[.7186,.8435],[.6732,.8936],[.6213,.9394],[.5722,.9761],[.5322,1]];function P(t,e){var r,n=Math.min(18,36*Math.abs(e)/p),a=Math.floor(n),i=n-a,o=(r=C[a])[0],s=r[1],l=(r=C[++a])[0],c=r[1],u=(r=C[Math.min(19,++a)])[0],h=r[1];return[t*(l+i*(u-o)/2+i*i*(u-2*l+o)/2),(e>0?d:-d)*(c+i*(h-s)/2+i*i*(h-2*c+s)/2)]}function O(t,e){return[t*Math.cos(e),e]}function z(t,e){var r,n=Math.cos(e),a=(r=y(n*Math.cos(t/=2)))?r/Math.sin(r):1;return[2*n*Math.sin(t)*a,Math.sin(e)*a]}function I(t,e){var r=z(t,e);return[(r[0]+t/d)/2,(r[1]+e)/2]}C.forEach(function(t){t[1]*=1.0144}),P.invert=function(t,e){var r=e/d,n=90*r,a=Math.min(18,Math.abs(n/5)),i=Math.max(0,Math.floor(a));do{var o=C[i][1],s=C[i+1][1],l=C[Math.min(19,i+2)][1],c=l-o,u=l-2*s+o,h=2*(Math.abs(r)-s)/c,p=u/c,m=h*(1-p*h*(1-2*p*h));if(m>=0||1===i){n=(e>=0?5:-5)*(m+a);var y,x=50;do{m=(a=Math.min(18,Math.abs(n)/5))-(i=Math.floor(a)),o=C[i][1],s=C[i+1][1],l=C[Math.min(19,i+2)][1],n-=(y=(e>=0?d:-d)*(s+m*(l-o)/2+m*m*(l-2*s+o)/2)-e)*v}while(Math.abs(y)>f&&--x>0);break}}while(--i>=0);var b=C[i][0],_=C[i+1][0],w=C[Math.min(19,i+2)][0];return[t/(_+m*(w-b)/2+m*m*(w-2*_+b)/2),n*g]},(t.geo.robinson=function(){return x(P)}).raw=P,O.invert=function(t,e){return[t/Math.cos(e),e]},(t.geo.sinusoidal=function(){return x(O)}).raw=O,z.invert=function(t,e){if(!(t*t+4*e*e>p*p+h)){var r=t,n=e,a=25;do{var i,o=Math.sin(r),s=Math.sin(r/2),l=Math.cos(r/2),c=Math.sin(n),u=Math.cos(n),f=Math.sin(2*n),d=c*c,g=u*u,v=s*s,m=1-g*l*l,x=m?y(u*l)*Math.sqrt(i=1/m):i=0,b=2*x*u*s-t,_=x*c-e,w=i*(g*v+x*u*l*d),k=i*(.5*o*f-2*x*c*s),T=.25*i*(f*s-x*c*g*o),M=i*(d*l+x*v*u),A=k*T-M*w;if(!A)break;var S=(_*k-b*M)/A,E=(b*T-_*w)/A;r-=S,n-=E}while((Math.abs(S)>h||Math.abs(E)>h)&&--a>0);return[r,n]}},(t.geo.aitoff=function(){return x(z)}).raw=z,I.invert=function(t,e){var r=t,n=e,a=25;do{var i,o=Math.cos(n),s=Math.sin(n),l=Math.sin(2*n),c=s*s,u=o*o,f=Math.sin(r),p=Math.cos(r/2),g=Math.sin(r/2),v=g*g,m=1-u*p*p,x=m?y(o*p)*Math.sqrt(i=1/m):i=0,b=.5*(2*x*o*g+r/d)-t,_=.5*(x*s+n)-e,w=.5*i*(u*v+x*o*p*c)+.5/d,k=i*(f*l/4-x*s*g),T=.125*i*(l*g-x*s*u*f),M=.5*i*(c*p+x*v*o)+.5,A=k*T-M*w,S=(_*k-b*M)/A,E=(b*T-_*w)/A;r-=S,n-=E}while((Math.abs(S)>h||Math.abs(E)>h)&&--a>0);return[r,n]},(t.geo.winkel3=function(){return x(I)}).raw=I}},{}],799:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../registry"),o=Math.PI/180,s=180/Math.PI,l={cursor:"pointer"},c={cursor:"auto"};function u(t,e){return n.behavior.zoom().translate(e.translate()).scale(e.scale())}function h(t,e,r){var n=t.id,o=t.graphDiv,s=o.layout,l=s[n],c=o._fullLayout,u=c[n],h={},f={};function p(t,e){h[n+"."+t]=a.nestedProperty(l,t).get(),i.call("_storeDirectGUIEdit",s,c._preGUI,h);var r=a.nestedProperty(u,t);r.get()!==e&&(r.set(e),a.nestedProperty(l,t).set(e),f[n+"."+t]=e)}r(p),p("projection.scale",e.scale()/t.fitScale),p("fitbounds",!1),o.emit("plotly_relayout",f)}function f(t,e){var r=u(0,e);function a(r){var n=e.invert(t.midPt);r("center.lon",n[0]),r("center.lat",n[1])}return r.on("zoomstart",function(){n.select(this).style(l)}).on("zoom",function(){e.scale(n.event.scale).translate(n.event.translate),t.render();var r=e.invert(t.midPt);t.graphDiv.emit("plotly_relayouting",{"geo.projection.scale":e.scale()/t.fitScale,"geo.center.lon":r[0],"geo.center.lat":r[1]})}).on("zoomend",function(){n.select(this).style(c),h(t,e,a)}),r}function p(t,e){var r,a,i,o,s,f,p,d,g,v=u(0,e),m=2;function y(t){return e.invert(t)}function x(r){var n=e.rotate(),a=e.invert(t.midPt);r("projection.rotation.lon",-n[0]),r("center.lon",a[0]),r("center.lat",a[1])}return v.on("zoomstart",function(){n.select(this).style(l),r=n.mouse(this),a=e.rotate(),i=e.translate(),o=a,s=y(r)}).on("zoom",function(){if(f=n.mouse(this),function(t){var r=y(t);if(!r)return!0;var n=e(r);return Math.abs(n[0]-t[0])>m||Math.abs(n[1]-t[1])>m}(r))return v.scale(e.scale()),void v.translate(e.translate());e.scale(n.event.scale),e.translate([i[0],n.event.translate[1]]),s?y(f)&&(d=y(f),p=[o[0]+(d[0]-s[0]),a[1],a[2]],e.rotate(p),o=p):s=y(r=f),g=!0,t.render();var l=e.rotate(),c=e.invert(t.midPt);t.graphDiv.emit("plotly_relayouting",{"geo.projection.scale":e.scale()/t.fitScale,"geo.center.lon":c[0],"geo.center.lat":c[1],"geo.projection.rotation.lon":-l[0]})}).on("zoomend",function(){n.select(this).style(c),g&&h(t,e,x)}),v}function d(t,e){var r,a={r:e.rotate(),k:e.scale()},i=u(0,e),f=function(t){var e=0,r=arguments.length,a=[];for(;++e<r;)a.push(arguments[e]);var i=n.dispatch.apply(null,a);return i.of=function(e,r){return function(a){var o;try{o=a.sourceEvent=n.event,a.target=t,n.event=a,i[a.type].apply(e,r)}finally{n.event=o}}},i}(i,"zoomstart","zoom","zoomend"),p=0,d=i.on;function m(t){var r=e.rotate();t("projection.rotation.lon",-r[0]),t("projection.rotation.lat",-r[1])}return i.on("zoomstart",function(){n.select(this).style(l);var t,c,u,h,m,b,_,w,k,T,M,A=n.mouse(this),S=e.rotate(),E=S,L=e.translate(),C=(c=.5*(t=S)[0]*o,u=.5*t[1]*o,h=.5*t[2]*o,m=Math.sin(c),b=Math.cos(c),_=Math.sin(u),w=Math.cos(u),k=Math.sin(h),T=Math.cos(h),[b*w*T+m*_*k,m*w*T-b*_*k,b*_*T+m*w*k,b*w*k-m*_*T]);r=g(e,A),d.call(i,"zoom",function(){var t,i,o,l,c,u,h,p,d,m,b=n.mouse(this);if(e.scale(a.k=n.event.scale),r){if(g(e,b)){e.rotate(S).translate(L);var _=g(e,b),w=function(t,e){if(!t||!e)return;var r=function(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}(t,e),n=Math.sqrt(x(r,r)),a=.5*Math.acos(Math.max(-1,Math.min(1,x(t,e)))),i=Math.sin(a)/n;return n&&[Math.cos(a),r[2]*i,-r[1]*i,r[0]*i]}(r,_),k=function(t){return[Math.atan2(2*(t[0]*t[1]+t[2]*t[3]),1-2*(t[1]*t[1]+t[2]*t[2]))*s,Math.asin(Math.max(-1,Math.min(1,2*(t[0]*t[2]-t[3]*t[1]))))*s,Math.atan2(2*(t[0]*t[3]+t[1]*t[2]),1-2*(t[2]*t[2]+t[3]*t[3]))*s]}((i=w,o=(t=C)[0],l=t[1],c=t[2],u=t[3],h=i[0],p=i[1],d=i[2],m=i[3],[o*h-l*p-c*d-u*m,o*p+l*h+c*m-u*d,o*d-l*m+c*h+u*p,o*m+l*d-c*p+u*h])),T=a.r=function(t,e,r){var n=y(e,2,t[0]);n=y(n,1,t[1]),n=y(n,0,t[2]-r[2]);var a,i,o=e[0],l=e[1],c=e[2],u=n[0],h=n[1],f=n[2],p=Math.atan2(l,o)*s,d=Math.sqrt(o*o+l*l);Math.abs(h)>d?(i=(h>0?90:-90)-p,a=0):(i=Math.asin(h/d)*s-p,a=Math.sqrt(d*d-h*h));var g=180-i-2*p,m=(Math.atan2(f,u)-Math.atan2(c,a))*s,x=(Math.atan2(f,u)-Math.atan2(c,-a))*s,b=v(r[0],r[1],i,m),_=v(r[0],r[1],g,x);return b<=_?[i,m,r[2]]:[g,x,r[2]]}(k,r,E);isFinite(T[0])&&isFinite(T[1])&&isFinite(T[2])||(T=E),e.rotate(T),E=T}}else r=g(e,A=b);f.of(this,arguments)({type:"zoom"})}),M=f.of(this,arguments),p++||M({type:"zoomstart"})}).on("zoomend",function(){var r;n.select(this).style(c),d.call(i,"zoom",null),r=f.of(this,arguments),--p||r({type:"zoomend"}),h(t,e,m)}).on("zoom.redraw",function(){t.render();var r=e.rotate();t.graphDiv.emit("plotly_relayouting",{"geo.projection.scale":e.scale()/t.fitScale,"geo.projection.rotation.lon":-r[0],"geo.projection.rotation.lat":-r[1]})}),n.rebind(i,f,"on")}function g(t,e){var r=t.invert(e);return r&&isFinite(r[0])&&isFinite(r[1])&&function(t){var e=t[0]*o,r=t[1]*o,n=Math.cos(r);return[n*Math.cos(e),n*Math.sin(e),Math.sin(r)]}(r)}function v(t,e,r,n){var a=m(r-t),i=m(n-e);return Math.sqrt(a*a+i*i)}function m(t){return(t%360+540)%360-180}function y(t,e,r){var n=r*o,a=t.slice(),i=0===e?1:0,s=2===e?1:2,l=Math.cos(n),c=Math.sin(n);return a[i]=t[i]*l-t[s]*c,a[s]=t[s]*l+t[i]*c,a}function x(t,e){for(var r=0,n=0,a=t.length;n<a;++n)r+=t[n]*e[n];return r}e.exports=function(t,e){var r=t.projection;return(e._isScoped?f:e._isClipped?d:p)(t,r)}},{"../../lib":717,"../../registry":846,d3:165}],800:[function(t,e,r){"use strict";var n=t("../registry"),a=t("./cartesian/constants").SUBPLOT_PATTERN;r.getSubplotCalcData=function(t,e,r){var a=n.subplotsRegistry[e];if(!a)return[];for(var i=a.attr,o=[],s=0;s<t.length;s++){var l=t[s];l[0].trace[i]===r&&o.push(l)}return o},r.getModuleCalcData=function(t,e){var r,a=[],i=[];if(!(r="string"==typeof e?n.getModule(e).plot:"function"==typeof e?e:e.plot))return[a,t];for(var o=0;o<t.length;o++){var s=t[o],l=s[0].trace;!0===l.visible&&0!==l._length&&(l._module.plot===r?a.push(s):i.push(s))}return[a,i]},r.getSubplotData=function(t,e,r){if(!n.subplotsRegistry[e])return[];var i,o,s,l=n.subplotsRegistry[e].attr,c=[];if("gl2d"===e){var u=r.match(a);o="x"+u[1],s="y"+u[2]}for(var h=0;h<t.length;h++)i=t[h],"gl2d"===e&&n.traceIs(i,"gl2d")?i[l[0]]===o&&i[l[1]]===s&&c.push(i):i[l]===r&&c.push(i);return c}},{"../registry":846,"./cartesian/constants":771}],801:[function(t,e,r){"use strict";var n=t("mouse-change"),a=t("mouse-wheel"),i=t("mouse-event-offset"),o=t("../cartesian/constants"),s=t("has-passive-events");function l(t,e){this.element=t,this.plot=e,this.mouseListener=null,this.wheelListener=null,this.lastInputTime=Date.now(),this.lastPos=[0,0],this.boxEnabled=!1,this.boxInited=!1,this.boxStart=[0,0],this.boxEnd=[0,0],this.dragStart=[0,0]}e.exports=function(t){var e=t.mouseContainer,r=t.glplot,c=new l(e,r);function u(){t.xaxis.autorange=!1,t.yaxis.autorange=!1}function h(e,n,a){var i,s,l=t.calcDataBox(),h=r.viewBox,f=c.lastPos[0],p=c.lastPos[1],d=o.MINDRAG*r.pixelRatio,g=o.MINZOOM*r.pixelRatio;function v(e,r,n){var a=Math.min(r,n),i=Math.max(r,n);a!==i?(l[e]=a,l[e+2]=i,c.dataBox=l,t.setRanges(l)):(t.selectBox.selectBox=[0,0,1,1],t.glplot.setDirty())}switch(n*=r.pixelRatio,a*=r.pixelRatio,a=h[3]-h[1]-a,t.fullLayout.dragmode){case"zoom":if(e){var m=n/(h[2]-h[0])*(l[2]-l[0])+l[0],y=a/(h[3]-h[1])*(l[3]-l[1])+l[1];c.boxInited||(c.boxStart[0]=m,c.boxStart[1]=y,c.dragStart[0]=n,c.dragStart[1]=a),c.boxEnd[0]=m,c.boxEnd[1]=y,c.boxInited=!0,c.boxEnabled||c.boxStart[0]===c.boxEnd[0]&&c.boxStart[1]===c.boxEnd[1]||(c.boxEnabled=!0);var x=Math.abs(c.dragStart[0]-n)<g,b=Math.abs(c.dragStart[1]-a)<g;if(!function(){for(var e=t.graphDiv._fullLayout._axisConstraintGroups,r=t.xaxis._id,n=t.yaxis._id,a=0;a<e.length;a++)if(-1!==e[a][r]){if(-1!==e[a][n])return!0;break}return!1}()||x&&b)x&&(c.boxEnd[0]=c.boxStart[0]),b&&(c.boxEnd[1]=c.boxStart[1]);else{i=c.boxEnd[0]-c.boxStart[0],s=c.boxEnd[1]-c.boxStart[1];var _=(l[3]-l[1])/(l[2]-l[0]);Math.abs(i*_)>Math.abs(s)?(c.boxEnd[1]=c.boxStart[1]+Math.abs(i)*_*(s>=0?1:-1),c.boxEnd[1]<l[1]?(c.boxEnd[1]=l[1],c.boxEnd[0]=c.boxStart[0]+(l[1]-c.boxStart[1])/Math.abs(_)):c.boxEnd[1]>l[3]&&(c.boxEnd[1]=l[3],c.boxEnd[0]=c.boxStart[0]+(l[3]-c.boxStart[1])/Math.abs(_))):(c.boxEnd[0]=c.boxStart[0]+Math.abs(s)/_*(i>=0?1:-1),c.boxEnd[0]<l[0]?(c.boxEnd[0]=l[0],c.boxEnd[1]=c.boxStart[1]+(l[0]-c.boxStart[0])*Math.abs(_)):c.boxEnd[0]>l[2]&&(c.boxEnd[0]=l[2],c.boxEnd[1]=c.boxStart[1]+(l[2]-c.boxStart[0])*Math.abs(_)))}}else c.boxEnabled?(i=c.boxStart[0]!==c.boxEnd[0],s=c.boxStart[1]!==c.boxEnd[1],i||s?(i&&(v(0,c.boxStart[0],c.boxEnd[0]),t.xaxis.autorange=!1),s&&(v(1,c.boxStart[1],c.boxEnd[1]),t.yaxis.autorange=!1),t.relayoutCallback()):t.glplot.setDirty(),c.boxEnabled=!1,c.boxInited=!1):c.boxInited&&(c.boxInited=!1);break;case"pan":c.boxEnabled=!1,c.boxInited=!1,e?(c.panning||(c.dragStart[0]=n,c.dragStart[1]=a),Math.abs(c.dragStart[0]-n)<d&&(n=c.dragStart[0]),Math.abs(c.dragStart[1]-a)<d&&(a=c.dragStart[1]),i=(f-n)*(l[2]-l[0])/(r.viewBox[2]-r.viewBox[0]),s=(p-a)*(l[3]-l[1])/(r.viewBox[3]-r.viewBox[1]),l[0]+=i,l[2]+=i,l[1]+=s,l[3]+=s,t.setRanges(l),c.panning=!0,c.lastInputTime=Date.now(),u(),t.cameraChanged(),t.handleAnnotations()):c.panning&&(c.panning=!1,t.relayoutCallback())}c.lastPos[0]=n,c.lastPos[1]=a}return c.mouseListener=n(e,h),e.addEventListener("touchstart",function(t){var r=i(t.changedTouches[0],e);h(0,r[0],r[1]),h(1,r[0],r[1]),t.preventDefault()},!!s&&{passive:!1}),e.addEventListener("touchmove",function(t){t.preventDefault();var r=i(t.changedTouches[0],e);h(1,r[0],r[1]),t.preventDefault()},!!s&&{passive:!1}),e.addEventListener("touchend",function(t){h(0,c.lastPos[0],c.lastPos[1]),t.preventDefault()},!!s&&{passive:!1}),c.wheelListener=a(e,function(e,n){if(!t.scrollZoom)return!1;var a=t.calcDataBox(),i=r.viewBox,o=c.lastPos[0],s=c.lastPos[1],l=Math.exp(5*n/(i[3]-i[1])),h=o/(i[2]-i[0])*(a[2]-a[0])+a[0],f=s/(i[3]-i[1])*(a[3]-a[1])+a[1];return a[0]=(a[0]-h)*l+h,a[2]=(a[2]-h)*l+h,a[1]=(a[1]-f)*l+f,a[3]=(a[3]-f)*l+f,t.setRanges(a),c.lastInputTime=Date.now(),u(),t.cameraChanged(),t.handleAnnotations(),t.relayoutCallback(),!0},!0),c}},{"../cartesian/constants":771,"has-passive-events":412,"mouse-change":436,"mouse-event-offset":437,"mouse-wheel":439}],802:[function(t,e,r){"use strict";var n=t("../cartesian/axes"),a=t("../../lib/str2rgbarray");function i(t){this.scene=t,this.gl=t.gl,this.pixelRatio=t.pixelRatio,this.screenBox=[0,0,1,1],this.viewBox=[0,0,1,1],this.dataBox=[-1,-1,1,1],this.borderLineEnable=[!1,!1,!1,!1],this.borderLineWidth=[1,1,1,1],this.borderLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.ticks=[[],[]],this.tickEnable=[!0,!0,!1,!1],this.tickPad=[15,15,15,15],this.tickAngle=[0,0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickMarkLength=[0,0,0,0],this.tickMarkWidth=[0,0,0,0],this.tickMarkColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labels=["x","y"],this.labelEnable=[!0,!0,!1,!1],this.labelAngle=[0,Math.PI/2,0,3*Math.PI/2],this.labelPad=[15,15,15,15],this.labelSize=[12,12],this.labelFont=["sans-serif","sans-serif"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.title="",this.titleEnable=!0,this.titleCenter=[0,0,0,0],this.titleAngle=0,this.titleColor=[0,0,0,1],this.titleFont="sans-serif",this.titleSize=18,this.gridLineEnable=[!0,!0],this.gridLineColor=[[0,0,0,.5],[0,0,0,.5]],this.gridLineWidth=[1,1],this.zeroLineEnable=[!0,!0],this.zeroLineWidth=[1,1],this.zeroLineColor=[[0,0,0,1],[0,0,0,1]],this.borderColor=[0,0,0,0],this.backgroundColor=[0,0,0,0],this.static=this.scene.staticPlot}var o=i.prototype,s=["xaxis","yaxis"];o.merge=function(t){var e,r,n,i,o,l,c,u,h,f,p;for(this.titleEnable=!1,this.backgroundColor=a(t.plot_bgcolor),f=0;f<2;++f){var d=(e=s[f]).charAt(0);for(n=(r=t[this.scene[e]._name]).title.text===this.scene.fullLayout._dfltTitle[d]?"":r.title.text,p=0;p<=2;p+=2)this.labelEnable[f+p]=!1,this.labels[f+p]=n,this.labelColor[f+p]=a(r.title.font.color),this.labelFont[f+p]=r.title.font.family,this.labelSize[f+p]=r.title.font.size,this.labelPad[f+p]=this.getLabelPad(e,r),this.tickEnable[f+p]=!1,this.tickColor[f+p]=a((r.tickfont||{}).color),this.tickAngle[f+p]="auto"===r.tickangle?0:Math.PI*-r.tickangle/180,this.tickPad[f+p]=this.getTickPad(r),this.tickMarkLength[f+p]=0,this.tickMarkWidth[f+p]=r.tickwidth||0,this.tickMarkColor[f+p]=a(r.tickcolor),this.borderLineEnable[f+p]=!1,this.borderLineColor[f+p]=a(r.linecolor),this.borderLineWidth[f+p]=r.linewidth||0;c=this.hasSharedAxis(r),o=this.hasAxisInDfltPos(e,r)&&!c,l=this.hasAxisInAltrPos(e,r)&&!c,i=r.mirror||!1,u=c?-1!==String(i).indexOf("all"):!!i,h=c?"allticks"===i:-1!==String(i).indexOf("ticks"),o?this.labelEnable[f]=!0:l&&(this.labelEnable[f+2]=!0),o?this.tickEnable[f]=r.showticklabels:l&&(this.tickEnable[f+2]=r.showticklabels),(o||u)&&(this.borderLineEnable[f]=r.showline),(l||u)&&(this.borderLineEnable[f+2]=r.showline),(o||h)&&(this.tickMarkLength[f]=this.getTickMarkLength(r)),(l||h)&&(this.tickMarkLength[f+2]=this.getTickMarkLength(r)),this.gridLineEnable[f]=r.showgrid,this.gridLineColor[f]=a(r.gridcolor),this.gridLineWidth[f]=r.gridwidth,this.zeroLineEnable[f]=r.zeroline,this.zeroLineColor[f]=a(r.zerolinecolor),this.zeroLineWidth[f]=r.zerolinewidth}},o.hasSharedAxis=function(t){var e=this.scene,r=e.fullLayout._subplots.gl2d;return 0!==n.findSubplotsWithAxis(r,t).indexOf(e.id)},o.hasAxisInDfltPos=function(t,e){var r=e.side;return"xaxis"===t?"bottom"===r:"yaxis"===t?"left"===r:void 0},o.hasAxisInAltrPos=function(t,e){var r=e.side;return"xaxis"===t?"top"===r:"yaxis"===t?"right"===r:void 0},o.getLabelPad=function(t,e){var r=e.title.font.size,n=e.showticklabels;return"xaxis"===t?"top"===e.side?r*(1.5+(n?1:0))-10:r*(1.5+(n?.5:0))-10:"yaxis"===t?"right"===e.side?10+r*(1.5+(n?1:.5)):10+r*(1.5+(n?.5:0)):void 0},o.getTickPad=function(t){return"outside"===t.ticks?10+t.ticklen:15},o.getTickMarkLength=function(t){if(!t.ticks)return 0;var e=t.ticklen;return"inside"===t.ticks?-e:e},e.exports=function(t){return new i(t)}},{"../../lib/str2rgbarray":740,"../cartesian/axes":765}],803:[function(t,e,r){"use strict";var n=t("../../plot_api/edit_types").overrideAll,a=t("./scene2d"),i=t("../layout_attributes"),o=t("../../constants/xmlns_namespaces"),s=t("../cartesian/constants"),l=t("../cartesian"),c=t("../../components/fx/layout_attributes"),u=t("../get_data").getSubplotData;r.name="gl2d",r.attr=["xaxis","yaxis"],r.idRoot=["x","y"],r.idRegex=s.idRegex,r.attrRegex=s.attrRegex,r.attributes=t("../cartesian/attributes"),r.supplyLayoutDefaults=function(t,e,r){e._has("cartesian")||l.supplyLayoutDefaults(t,e,r)},r.layoutAttrOverrides=n(l.layoutAttributes,"plot","from-root"),r.baseLayoutAttrOverrides=n({plot_bgcolor:i.plot_bgcolor,hoverlabel:c.hoverlabel},"plot","nested"),r.plot=function(t){for(var e=t._fullLayout,r=t._fullData,n=e._subplots.gl2d,i=0;i<n.length;i++){var o=n[i],s=e._plots[o],l=u(r,"gl2d",o),c=s._scene2d;void 0===c&&(c=new a({id:o,graphDiv:t,container:t.querySelector(".gl-container"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio},e),s._scene2d=c),c.plot(l,t.calcdata,e,t.layout)}},r.clean=function(t,e,r,n){for(var a=n._subplots.gl2d||[],i=0;i<a.length;i++){var o=a[i],s=n._plots[o];if(s._scene2d)0===u(t,"gl2d",o).length&&(s._scene2d.destroy(),delete n._plots[o])}l.clean.apply(this,arguments)},r.drawFramework=function(t){t._context.staticPlot||l.drawFramework(t)},r.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots.gl2d,n=0;n<r.length;n++){var a=e._plots[r[n]]._scene2d,i=a.toImage("png");e._glimages.append("svg:image").attr({xmlns:o.svg,"xlink:href":i,x:0,y:0,width:"100%",height:"100%",preserveAspectRatio:"none"}),a.destroy()}},r.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots.gl2d,n=0;n<r.length;n++){e._plots[r[n]]._scene2d.updateFx(e.dragmode)}}},{"../../components/fx/layout_attributes":631,"../../constants/xmlns_namespaces":694,"../../plot_api/edit_types":748,"../cartesian":776,"../cartesian/attributes":763,"../cartesian/constants":771,"../get_data":800,"../layout_attributes":817,"./scene2d":804}],804:[function(t,e,r){"use strict";var n,a,i=t("../../registry"),o=t("../../plots/cartesian/axes"),s=t("../../components/fx"),l=t("gl-plot2d"),c=t("gl-spikes2d"),u=t("gl-select-box"),h=t("webgl-context"),f=t("./convert"),p=t("./camera"),d=t("../../lib/show_no_webgl_msg"),g=t("../cartesian/constraints"),v=g.enforce,m=g.clean,y=t("../cartesian/autorange").doAutoRange,x=["xaxis","yaxis"],b=t("../cartesian/constants").SUBPLOT_PATTERN;function _(t,e){this.container=t.container,this.graphDiv=t.graphDiv,this.pixelRatio=t.plotGlPixelRatio||window.devicePixelRatio,this.id=t.id,this.staticPlot=!!t.staticPlot,this.scrollZoom=this.graphDiv._context._scrollZoom.cartesian,this.fullData=null,this.updateRefs(e),this.makeFramework(),this.stopped||(this.glplotOptions=f(this),this.glplotOptions.merge(e),this.glplot=l(this.glplotOptions),this.camera=p(this),this.traces={},this.spikes=c(this.glplot),this.selectBox=u(this.glplot,{innerFill:!1,outerFill:!0}),this.lastButtonState=0,this.pickResult=null,this.isMouseOver=!0,this.stopped=!1,this.redraw=this.draw.bind(this),this.redraw())}e.exports=_;var w=_.prototype;w.makeFramework=function(){if(this.staticPlot){if(!(a||(n=document.createElement("canvas"),a=h({canvas:n,preserveDrawingBuffer:!1,premultipliedAlpha:!0,antialias:!0}))))throw new Error("Error creating static canvas/context for image server");this.canvas=n,this.gl=a}else{var t=this.container.querySelector(".gl-canvas-focus"),e=h({canvas:t,preserveDrawingBuffer:!0,premultipliedAlpha:!0});if(!e)return d(this),void(this.stopped=!0);this.canvas=t,this.gl=e}var r=this.canvas;r.style.width="100%",r.style.height="100%",r.style.position="absolute",r.style.top="0px",r.style.left="0px",r.style["pointer-events"]="none",this.updateSize(r),r.className+=" user-select-none";var i=this.svgContainer=document.createElementNS("http://www.w3.org/2000/svg","svg");i.style.position="absolute",i.style.top=i.style.left="0px",i.style.width=i.style.height="100%",i.style["z-index"]=20,i.style["pointer-events"]="none";var o=this.mouseContainer=document.createElement("div");o.style.position="absolute",o.style["pointer-events"]="auto",this.pickCanvas=this.container.querySelector(".gl-canvas-pick");var s=this.container;s.appendChild(i),s.appendChild(o);var l=this;o.addEventListener("mouseout",function(){l.isMouseOver=!1,l.unhover()}),o.addEventListener("mouseover",function(){l.isMouseOver=!0})},w.toImage=function(t){t||(t="png"),this.stopped=!0,this.staticPlot&&this.container.appendChild(n),this.updateSize(this.canvas);var e=this.glplot.gl,r=e.drawingBufferWidth,a=e.drawingBufferHeight;e.clearColor(1,1,1,0),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT),this.glplot.setDirty(),this.glplot.draw(),e.bindFramebuffer(e.FRAMEBUFFER,null);var i=new Uint8Array(r*a*4);e.readPixels(0,0,r,a,e.RGBA,e.UNSIGNED_BYTE,i);for(var o=0,s=a-1;o<s;++o,--s)for(var l=0;l<r;++l)for(var c=0;c<4;++c){var u=i[4*(r*o+l)+c];i[4*(r*o+l)+c]=i[4*(r*s+l)+c],i[4*(r*s+l)+c]=u}var h=document.createElement("canvas");h.width=r,h.height=a;var f,p=h.getContext("2d"),d=p.createImageData(r,a);switch(d.data.set(i),p.putImageData(d,0,0),t){case"jpeg":f=h.toDataURL("image/jpeg");break;case"webp":f=h.toDataURL("image/webp");break;default:f=h.toDataURL("image/png")}return this.staticPlot&&this.container.removeChild(n),f},w.updateSize=function(t){t||(t=this.canvas);var e=this.pixelRatio,r=this.fullLayout,n=r.width,a=r.height,i=0|Math.ceil(e*n),o=0|Math.ceil(e*a);return t.width===i&&t.height===o||(t.width=i,t.height=o),t},w.computeTickMarks=function(){this.xaxis.setScale(),this.yaxis.setScale();for(var t=[o.calcTicks(this.xaxis),o.calcTicks(this.yaxis)],e=0;e<2;++e)for(var r=0;r<t[e].length;++r)t[e][r].text=t[e][r].text+"";return t},w.updateRefs=function(t){this.fullLayout=t;var e=this.id.match(b),r="xaxis"+e[1],n="yaxis"+e[2];this.xaxis=this.fullLayout[r],this.yaxis=this.fullLayout[n]},w.relayoutCallback=function(){var t=this.graphDiv,e=this.xaxis,r=this.yaxis,n=t.layout,a={},o=a[e._name+".range"]=e.range.slice(),s=a[r._name+".range"]=r.range.slice();a[e._name+".autorange"]=e.autorange,a[r._name+".autorange"]=r.autorange,i.call("_storeDirectGUIEdit",t.layout,t._fullLayout._preGUI,a);var l=n[e._name];l.range=o,l.autorange=e.autorange;var c=n[r._name];c.range=s,c.autorange=r.autorange,a.lastInputTime=this.camera.lastInputTime,t.emit("plotly_relayout",a)},w.cameraChanged=function(){var t=this.camera;this.glplot.setDataBox(this.calcDataBox());var e=this.computeTickMarks();(function(t,e){for(var r=0;r<2;++r){var n=t[r],a=e[r];if(n.length!==a.length)return!0;for(var i=0;i<n.length;++i)if(n[i].x!==a[i].x)return!0}return!1})(e,this.glplotOptions.ticks)&&(this.glplotOptions.ticks=e,this.glplotOptions.dataBox=t.dataBox,this.glplot.update(this.glplotOptions),this.handleAnnotations())},w.handleAnnotations=function(){for(var t=this.graphDiv,e=this.fullLayout.annotations,r=0;r<e.length;r++){var n=e[r];n.xref===this.xaxis._id&&n.yref===this.yaxis._id&&i.getComponentMethod("annotations","drawOne")(t,r)}},w.destroy=function(){if(this.glplot){var t=this.traces;t&&Object.keys(t).map(function(e){t[e].dispose(),delete t[e]}),this.glplot.dispose(),this.container.removeChild(this.svgContainer),this.container.removeChild(this.mouseContainer),this.fullData=null,this.glplot=null,this.stopped=!0,this.camera.mouseListener.enabled=!1,this.mouseContainer.removeEventListener("wheel",this.camera.wheelListener),this.camera=null}},w.plot=function(t,e,r){var n=this.glplot;this.updateRefs(r),this.xaxis.clearCalc(),this.yaxis.clearCalc(),this.updateTraces(t,e),this.updateFx(r.dragmode);var a=r.width,i=r.height;this.updateSize(this.canvas);var o=this.glplotOptions;o.merge(r),o.screenBox=[0,0,a,i];var s={_fullLayout:{_axisConstraintGroups:this.graphDiv._fullLayout._axisConstraintGroups,xaxis:this.xaxis,yaxis:this.yaxis}};m(s,this.xaxis),m(s,this.yaxis);var l,c,u=r._size,h=this.xaxis.domain,f=this.yaxis.domain;for(o.viewBox=[u.l+h[0]*u.w,u.b+f[0]*u.h,a-u.r-(1-h[1])*u.w,i-u.t-(1-f[1])*u.h],this.mouseContainer.style.width=u.w*(h[1]-h[0])+"px",this.mouseContainer.style.height=u.h*(f[1]-f[0])+"px",this.mouseContainer.height=u.h*(f[1]-f[0]),this.mouseContainer.style.left=u.l+h[0]*u.w+"px",this.mouseContainer.style.top=u.t+(1-f[1])*u.h+"px",c=0;c<2;++c)(l=this[x[c]])._length=o.viewBox[c+2]-o.viewBox[c],y(this.graphDiv,l),l.setScale();v(s),o.ticks=this.computeTickMarks(),o.dataBox=this.calcDataBox(),o.merge(r),n.update(o),this.glplot.draw()},w.calcDataBox=function(){var t=this.xaxis,e=this.yaxis,r=t.range,n=e.range,a=t.r2l,i=e.r2l;return[a(r[0]),i(n[0]),a(r[1]),i(n[1])]},w.setRanges=function(t){var e=this.xaxis,r=this.yaxis,n=e.l2r,a=r.l2r;e.range=[n(t[0]),n(t[2])],r.range=[a(t[1]),a(t[3])]},w.updateTraces=function(t,e){var r,n,a,i=Object.keys(this.traces);this.fullData=t;t:for(r=0;r<i.length;r++){var o=i[r],s=this.traces[o];for(n=0;n<t.length;n++)if((a=t[n]).uid===o&&a.type===s.type)continue t;s.dispose(),delete this.traces[o]}for(r=0;r<t.length;r++){a=t[r];var l=e[r],c=this.traces[a.uid];c?c.update(a,l):(c=a._module.plot(this,a,l),this.traces[a.uid]=c)}this.glplot.objects.sort(function(t,e){return t._trace.index-e._trace.index})},w.updateFx=function(t){"lasso"===t||"select"===t?(this.pickCanvas.style["pointer-events"]="none",this.mouseContainer.style["pointer-events"]="none"):(this.pickCanvas.style["pointer-events"]="auto",this.mouseContainer.style["pointer-events"]="auto"),this.mouseContainer.style.cursor="pan"===t?"move":"zoom"===t?"crosshair":null},w.emitPointAction=function(t,e){for(var r,n=t.trace.uid,a=t.pointIndex,i=0;i<this.fullData.length;i++)this.fullData[i].uid===n&&(r=this.fullData[i]);var o={x:t.traceCoord[0],y:t.traceCoord[1],curveNumber:r.index,pointNumber:a,data:r._input,fullData:this.fullData,xaxis:this.xaxis,yaxis:this.yaxis};s.appendArrayPointValue(o,r,a),this.graphDiv.emit(e,{points:[o]})},w.draw=function(){if(!this.stopped){requestAnimationFrame(this.redraw);var t=this.glplot,e=this.camera,r=e.mouseListener,n=1===this.lastButtonState&&0===r.buttons,a=this.fullLayout;this.lastButtonState=r.buttons,this.cameraChanged();var i,o=r.x*t.pixelRatio,l=this.canvas.height-t.pixelRatio*r.y;if(e.boxEnabled&&"zoom"===a.dragmode){this.selectBox.enabled=!0;for(var c=this.selectBox.selectBox=[Math.min(e.boxStart[0],e.boxEnd[0]),Math.min(e.boxStart[1],e.boxEnd[1]),Math.max(e.boxStart[0],e.boxEnd[0]),Math.max(e.boxStart[1],e.boxEnd[1])],u=0;u<2;u++)e.boxStart[u]===e.boxEnd[u]&&(c[u]=t.dataBox[u],c[u+2]=t.dataBox[u+2]);t.setDirty()}else if(!e.panning&&this.isMouseOver){this.selectBox.enabled=!1;var h=a._size,f=this.xaxis.domain,p=this.yaxis.domain,d=(i=t.pick(o/t.pixelRatio+h.l+f[0]*h.w,l/t.pixelRatio-(h.t+(1-p[1])*h.h)))&&i.object._trace.handlePick(i);if(d&&n&&this.emitPointAction(d,"plotly_click"),i&&"skip"!==i.object._trace.hoverinfo&&a.hovermode&&d&&(!this.lastPickResult||this.lastPickResult.traceUid!==d.trace.uid||this.lastPickResult.dataCoord[0]!==d.dataCoord[0]||this.lastPickResult.dataCoord[1]!==d.dataCoord[1])){var g=d;this.lastPickResult={traceUid:d.trace?d.trace.uid:null,dataCoord:d.dataCoord.slice()},this.spikes.update({center:i.dataCoord}),g.screenCoord=[((t.viewBox[2]-t.viewBox[0])*(i.dataCoord[0]-t.dataBox[0])/(t.dataBox[2]-t.dataBox[0])+t.viewBox[0])/t.pixelRatio,(this.canvas.height-(t.viewBox[3]-t.viewBox[1])*(i.dataCoord[1]-t.dataBox[1])/(t.dataBox[3]-t.dataBox[1])-t.viewBox[1])/t.pixelRatio],this.emitPointAction(d,"plotly_hover");var v=this.fullData[g.trace.index]||{},m=g.pointIndex,y=s.castHoverinfo(v,a,m);if(y&&"all"!==y){var x=y.split("+");-1===x.indexOf("x")&&(g.traceCoord[0]=void 0),-1===x.indexOf("y")&&(g.traceCoord[1]=void 0),-1===x.indexOf("z")&&(g.traceCoord[2]=void 0),-1===x.indexOf("text")&&(g.textLabel=void 0),-1===x.indexOf("name")&&(g.name=void 0)}s.loneHover({x:g.screenCoord[0],y:g.screenCoord[1],xLabel:this.hoverFormatter("xaxis",g.traceCoord[0]),yLabel:this.hoverFormatter("yaxis",g.traceCoord[1]),zLabel:g.traceCoord[2],text:g.textLabel,name:g.name,color:s.castHoverOption(v,m,"bgcolor")||g.color,borderColor:s.castHoverOption(v,m,"bordercolor"),fontFamily:s.castHoverOption(v,m,"font.family"),fontSize:s.castHoverOption(v,m,"font.size"),fontColor:s.castHoverOption(v,m,"font.color"),nameLength:s.castHoverOption(v,m,"namelength"),textAlign:s.castHoverOption(v,m,"align")},{container:this.svgContainer,gd:this.graphDiv})}}i||this.unhover(),t.draw()}},w.unhover=function(){this.lastPickResult&&(this.spikes.update({}),this.lastPickResult=null,this.graphDiv.emit("plotly_unhover"),s.loneUnhover(this.svgContainer))},w.hoverFormatter=function(t,e){if(void 0!==e){var r=this[t];return o.tickText(r,r.c2l(e),"hover").text}}},{"../../components/fx":630,"../../lib/show_no_webgl_msg":738,"../../plots/cartesian/axes":765,"../../registry":846,"../cartesian/autorange":764,"../cartesian/constants":771,"../cartesian/constraints":772,"./camera":801,"./convert":802,"gl-plot2d":290,"gl-select-box":302,"gl-spikes2d":311,"webgl-context":554}],805:[function(t,e,r){"use strict";var n=t("../../plot_api/edit_types").overrideAll,a=t("../../components/fx/layout_attributes"),i=t("./scene"),o=t("../get_data").getSubplotData,s=t("../../lib"),l=t("../../constants/xmlns_namespaces");r.name="gl3d",r.attr="scene",r.idRoot="scene",r.idRegex=r.attrRegex=s.counterRegex("scene"),r.attributes=t("./layout/attributes"),r.layoutAttributes=t("./layout/layout_attributes"),r.baseLayoutAttrOverrides=n({hoverlabel:a.hoverlabel},"plot","nested"),r.supplyLayoutDefaults=t("./layout/defaults"),r.plot=function(t){for(var e=t._fullLayout,r=t._fullData,n=e._subplots.gl3d,a=0;a<n.length;a++){var s=n[a],l=o(r,"gl3d",s),c=e[s],u=c.camera,h=c._scene;h||(h=new i({id:s,graphDiv:t,container:t.querySelector(".gl-container"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio,camera:u},e),c._scene=h),h.viewInitial||(h.viewInitial={up:{x:u.up.x,y:u.up.y,z:u.up.z},eye:{x:u.eye.x,y:u.eye.y,z:u.eye.z},center:{x:u.center.x,y:u.center.y,z:u.center.z}}),h.plot(l,e,t.layout)}},r.clean=function(t,e,r,n){for(var a=n._subplots.gl3d||[],i=0;i<a.length;i++){var o=a[i];!e[o]&&n[o]._scene&&(n[o]._scene.destroy(),n._infolayer&&n._infolayer.selectAll(".annotation-"+o).remove())}},r.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots.gl3d,n=e._size,a=0;a<r.length;a++){var i=e[r[a]],o=i.domain,s=i._scene,c=s.toImage("png");e._glimages.append("svg:image").attr({xmlns:l.svg,"xlink:href":c,x:n.l+n.w*o.x[0],y:n.t+n.h*(1-o.y[1]),width:n.w*(o.x[1]-o.x[0]),height:n.h*(o.y[1]-o.y[0]),preserveAspectRatio:"none"}),s.destroy()}},r.cleanId=function(t){if(t.match(/^scene[0-9]*$/)){var e=t.substr(5);return"1"===e&&(e=""),"scene"+e}},r.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots.gl3d,n=0;n<r.length;n++){e[r[n]]._scene.updateFx(e.dragmode,e.hovermode)}}},{"../../components/fx/layout_attributes":631,"../../constants/xmlns_namespaces":694,"../../lib":717,"../../plot_api/edit_types":748,"../get_data":800,"./layout/attributes":806,"./layout/defaults":810,"./layout/layout_attributes":811,"./scene":815}],806:[function(t,e,r){"use strict";e.exports={scene:{valType:"subplotid",dflt:"scene",editType:"calc+clearAxisTypes"}}},{}],807:[function(t,e,r){"use strict";var n=t("../../../components/color"),a=t("../../cartesian/layout_attributes"),i=t("../../../lib/extend").extendFlat,o=t("../../../plot_api/edit_types").overrideAll;e.exports=o({visible:a.visible,showspikes:{valType:"boolean",dflt:!0},spikesides:{valType:"boolean",dflt:!0},spikethickness:{valType:"number",min:0,dflt:2},spikecolor:{valType:"color",dflt:n.defaultLine},showbackground:{valType:"boolean",dflt:!1},backgroundcolor:{valType:"color",dflt:"rgba(204, 204, 204, 0.5)"},showaxeslabels:{valType:"boolean",dflt:!0},color:a.color,categoryorder:a.categoryorder,categoryarray:a.categoryarray,title:{text:a.title.text,font:a.title.font},type:i({},a.type,{values:["-","linear","log","date","category"]}),autorange:a.autorange,rangemode:a.rangemode,range:i({},a.range,{items:[{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}}],anim:!1}),tickmode:a.tickmode,nticks:a.nticks,tick0:a.tick0,dtick:a.dtick,tickvals:a.tickvals,ticktext:a.ticktext,ticks:a.ticks,mirror:a.mirror,ticklen:a.ticklen,tickwidth:a.tickwidth,tickcolor:a.tickcolor,showticklabels:a.showticklabels,tickfont:a.tickfont,tickangle:a.tickangle,tickprefix:a.tickprefix,showtickprefix:a.showtickprefix,ticksuffix:a.ticksuffix,showticksuffix:a.showticksuffix,showexponent:a.showexponent,exponentformat:a.exponentformat,separatethousands:a.separatethousands,tickformat:a.tickformat,tickformatstops:a.tickformatstops,hoverformat:a.hoverformat,showline:a.showline,linecolor:a.linecolor,linewidth:a.linewidth,showgrid:a.showgrid,gridcolor:i({},a.gridcolor,{dflt:"rgb(204, 204, 204)"}),gridwidth:a.gridwidth,zeroline:a.zeroline,zerolinecolor:a.zerolinecolor,zerolinewidth:a.zerolinewidth,_deprecated:{title:a._deprecated.title,titlefont:a._deprecated.titlefont}},"plot","from-root")},{"../../../components/color":591,"../../../lib/extend":708,"../../../plot_api/edit_types":748,"../../cartesian/layout_attributes":777}],808:[function(t,e,r){"use strict";var n=t("tinycolor2").mix,a=t("../../../lib"),i=t("../../../plot_api/plot_template"),o=t("./axis_attributes"),s=t("../../cartesian/type_defaults"),l=t("../../cartesian/axis_defaults"),c=["xaxis","yaxis","zaxis"];e.exports=function(t,e,r){var u,h;function f(t,e){return a.coerce(u,h,o,t,e)}for(var p=0;p<c.length;p++){var d=c[p];u=t[d]||{},(h=i.newContainer(e,d))._id=d[0]+r.scene,h._name=d,s(u,h,f,r),l(u,h,f,{font:r.font,letter:d[0],data:r.data,showGrid:!0,noTickson:!0,bgColor:r.bgColor,calendar:r.calendar},r.fullLayout),f("gridcolor",n(h.color,r.bgColor,13600/187).toRgbString()),f("title.text",d[0]),h.setScale=a.noop,f("showspikes")&&(f("spikesides"),f("spikethickness"),f("spikecolor",h.color)),f("showaxeslabels"),f("showbackground")&&f("backgroundcolor")}}},{"../../../lib":717,"../../../plot_api/plot_template":755,"../../cartesian/axis_defaults":767,"../../cartesian/type_defaults":788,"./axis_attributes":807,tinycolor2:535}],809:[function(t,e,r){"use strict";var n=t("../../../lib/str2rgbarray"),a=t("../../../lib"),i=["xaxis","yaxis","zaxis"];function o(){this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.tickEnable=[!0,!0,!0],this.tickFont=["sans-serif","sans-serif","sans-serif"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[18,18,18],this.labels=["x","y","z"],this.labelEnable=[!0,!0,!0],this.labelFont=["Open Sans","Open Sans","Open Sans"],this.labelSize=[20,20,20],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[30,30,30],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[10,10,10],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!0,!0,!0],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._defaultTickPad=this.tickPad.slice(),this._defaultLabelPad=this.labelPad.slice(),this._defaultLineTickLength=this.lineTickLength.slice()}o.prototype.merge=function(t,e){for(var r=0;r<3;++r){var o=e[i[r]];o.visible?(this.labels[r]=t._meta?a.templateString(o.title.text,t._meta):o.title.text,"font"in o.title&&(o.title.font.color&&(this.labelColor[r]=n(o.title.font.color)),o.title.font.family&&(this.labelFont[r]=o.title.font.family),o.title.font.size&&(this.labelSize[r]=o.title.font.size)),"showline"in o&&(this.lineEnable[r]=o.showline),"linecolor"in o&&(this.lineColor[r]=n(o.linecolor)),"linewidth"in o&&(this.lineWidth[r]=o.linewidth),"showgrid"in o&&(this.gridEnable[r]=o.showgrid),"gridcolor"in o&&(this.gridColor[r]=n(o.gridcolor)),"gridwidth"in o&&(this.gridWidth[r]=o.gridwidth),"log"===o.type?this.zeroEnable[r]=!1:"zeroline"in o&&(this.zeroEnable[r]=o.zeroline),"zerolinecolor"in o&&(this.zeroLineColor[r]=n(o.zerolinecolor)),"zerolinewidth"in o&&(this.zeroLineWidth[r]=o.zerolinewidth),"ticks"in o&&o.ticks?this.lineTickEnable[r]=!0:this.lineTickEnable[r]=!1,"ticklen"in o&&(this.lineTickLength[r]=this._defaultLineTickLength[r]=o.ticklen),"tickcolor"in o&&(this.lineTickColor[r]=n(o.tickcolor)),"tickwidth"in o&&(this.lineTickWidth[r]=o.tickwidth),"tickangle"in o&&(this.tickAngle[r]="auto"===o.tickangle?-3600:Math.PI*-o.tickangle/180),"showticklabels"in o&&(this.tickEnable[r]=o.showticklabels),"tickfont"in o&&(o.tickfont.color&&(this.tickColor[r]=n(o.tickfont.color)),o.tickfont.family&&(this.tickFont[r]=o.tickfont.family),o.tickfont.size&&(this.tickSize[r]=o.tickfont.size)),"mirror"in o?-1!==["ticks","all","allticks"].indexOf(o.mirror)?(this.lineTickMirror[r]=!0,this.lineMirror[r]=!0):!0===o.mirror?(this.lineTickMirror[r]=!1,this.lineMirror[r]=!0):(this.lineTickMirror[r]=!1,this.lineMirror[r]=!1):this.lineMirror[r]=!1,"showbackground"in o&&!1!==o.showbackground?(this.backgroundEnable[r]=!0,this.backgroundColor[r]=n(o.backgroundcolor)):this.backgroundEnable[r]=!1):(this.tickEnable[r]=!1,this.labelEnable[r]=!1,this.lineEnable[r]=!1,this.lineTickEnable[r]=!1,this.gridEnable[r]=!1,this.zeroEnable[r]=!1,this.backgroundEnable[r]=!1)}},e.exports=function(t,e){var r=new o;return r.merge(t,e),r}},{"../../../lib":717,"../../../lib/str2rgbarray":740}],810:[function(t,e,r){"use strict";var n=t("../../../lib"),a=t("../../../components/color"),i=t("../../../registry"),o=t("../../subplot_defaults"),s=t("./axis_defaults"),l=t("./layout_attributes"),c=t("../../get_data").getSubplotData,u="gl3d";function h(t,e,r,n){for(var o=r("bgcolor"),l=a.combine(o,n.paper_bgcolor),h=["up","center","eye"],f=0;f<h.length;f++)r("camera."+h[f]+".x"),r("camera."+h[f]+".y"),r("camera."+h[f]+".z");r("camera.projection.type");var p=!!r("aspectratio.x")&&!!r("aspectratio.y")&&!!r("aspectratio.z"),d=r("aspectmode",p?"manual":"auto");p||(t.aspectratio=e.aspectratio={x:1,y:1,z:1},"manual"===d&&(e.aspectmode="auto"),t.aspectmode=e.aspectmode);var g=c(n.fullData,u,n.id);s(t,e,{font:n.font,scene:n.id,data:g,bgColor:l,calendar:n.calendar,fullLayout:n.fullLayout}),i.getComponentMethod("annotations3d","handleDefaults")(t,e,n);var v=n.getDfltFromLayout("dragmode");if(!1!==v&&!v)if(v="orbit",t.camera&&t.camera.up){var m=t.camera.up.x,y=t.camera.up.y,x=t.camera.up.z;0!==x&&(m&&y&&x?x/Math.sqrt(m*m+y*y+x*x)>.999&&(v="turntable"):v="turntable")}else v="turntable";r("dragmode",v),r("hovermode",n.getDfltFromLayout("hovermode"))}e.exports=function(t,e,r){var a=e._basePlotModules.length>1;o(t,e,r,{type:u,attributes:l,handleDefaults:h,fullLayout:e,font:e.font,fullData:r,getDfltFromLayout:function(e){if(!a)return n.validate(t[e],l[e])?t[e]:void 0},paper_bgcolor:e.paper_bgcolor,calendar:e.calendar})}},{"../../../components/color":591,"../../../lib":717,"../../../registry":846,"../../get_data":800,"../../subplot_defaults":840,"./axis_defaults":808,"./layout_attributes":811}],811:[function(t,e,r){"use strict";var n=t("./axis_attributes"),a=t("../../domain").attributes,i=t("../../../lib/extend").extendFlat,o=t("../../../lib").counterRegex;function s(t,e,r){return{x:{valType:"number",dflt:t,editType:"camera"},y:{valType:"number",dflt:e,editType:"camera"},z:{valType:"number",dflt:r,editType:"camera"},editType:"camera"}}e.exports={_arrayAttrRegexps:[o("scene",".annotations",!0)],bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"plot"},camera:{up:i(s(0,0,1),{}),center:i(s(0,0,0),{}),eye:i(s(1.25,1.25,1.25),{}),projection:{type:{valType:"enumerated",values:["perspective","orthographic"],dflt:"perspective",editType:"calc"},editType:"calc"},editType:"camera"},domain:a({name:"scene",editType:"plot"}),aspectmode:{valType:"enumerated",values:["auto","cube","data","manual"],dflt:"auto",editType:"plot",impliedEdits:{"aspectratio.x":void 0,"aspectratio.y":void 0,"aspectratio.z":void 0}},aspectratio:{x:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},y:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},z:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},editType:"plot",impliedEdits:{aspectmode:"manual"}},xaxis:n,yaxis:n,zaxis:n,dragmode:{valType:"enumerated",values:["orbit","turntable","zoom","pan",!1],editType:"plot"},hovermode:{valType:"enumerated",values:["closest",!1],dflt:"closest",editType:"modebar"},uirevision:{valType:"any",editType:"none"},editType:"plot",_deprecated:{cameraposition:{valType:"info_array",editType:"camera"}}}},{"../../../lib":717,"../../../lib/extend":708,"../../domain":790,"./axis_attributes":807}],812:[function(t,e,r){"use strict";var n=t("../../../lib/str2rgbarray"),a=["xaxis","yaxis","zaxis"];function i(){this.enabled=[!0,!0,!0],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.drawSides=[!0,!0,!0],this.lineWidth=[1,1,1]}i.prototype.merge=function(t){for(var e=0;e<3;++e){var r=t[a[e]];r.visible?(this.enabled[e]=r.showspikes,this.colors[e]=n(r.spikecolor),this.drawSides[e]=r.spikesides,this.lineWidth[e]=r.spikethickness):(this.enabled[e]=!1,this.drawSides[e]=!1)}},e.exports=function(t){var e=new i;return e.merge(t),e}},{"../../../lib/str2rgbarray":740}],813:[function(t,e,r){"use strict";e.exports=function(t){for(var e=t.axesOptions,r=t.glplot.axesPixels,s=t.fullSceneLayout,l=[[],[],[]],c=0;c<3;++c){var u=s[i[c]];if(u._length=(r[c].hi-r[c].lo)*r[c].pixelsPerDataUnit/t.dataScale[c],Math.abs(u._length)===1/0||isNaN(u._length))l[c]=[];else{u._input_range=u.range.slice(),u.range[0]=r[c].lo/t.dataScale[c],u.range[1]=r[c].hi/t.dataScale[c],u._m=1/(t.dataScale[c]*r[c].pixelsPerDataUnit),u.range[0]===u.range[1]&&(u.range[0]-=1,u.range[1]+=1);var h=u.tickmode;if("auto"===u.tickmode){u.tickmode="linear";var f=u.nticks||a.constrain(u._length/40,4,9);n.autoTicks(u,Math.abs(u.range[1]-u.range[0])/f)}for(var p=n.calcTicks(u),d=0;d<p.length;++d)p[d].x=p[d].x*t.dataScale[c],"date"===u.type&&(p[d].text=p[d].text.replace(/\<br\>/g," "));l[c]=p,u.tickmode=h}}e.ticks=l;for(var c=0;c<3;++c){o[c]=.5*(t.glplot.bounds[0][c]+t.glplot.bounds[1][c]);for(var d=0;d<2;++d)e.bounds[d][c]=t.glplot.bounds[d][c]}t.contourLevels=function(t){for(var e=new Array(3),r=0;r<3;++r){for(var n=t[r],a=new Array(n.length),i=0;i<n.length;++i)a[i]=n[i].x;e[r]=a}return e}(l)};var n=t("../../cartesian/axes"),a=t("../../../lib"),i=["xaxis","yaxis","zaxis"],o=[0,0,0]},{"../../../lib":717,"../../cartesian/axes":765}],814:[function(t,e,r){"use strict";function n(t,e){var r,n,a=[0,0,0,0];for(r=0;r<4;++r)for(n=0;n<4;++n)a[n]+=t[4*r+n]*e[r];return a}e.exports=function(t,e){return n(t.projection,n(t.view,n(t.model,[e[0],e[1],e[2],1])))}},{}],815:[function(t,e,r){"use strict";var n,a,i=t("gl-plot3d"),o=i.createCamera,s=i.createScene,l=t("webgl-context"),c=t("has-passive-events"),u=t("../../registry"),h=t("../../lib"),f=t("../../plots/cartesian/axes"),p=t("../../components/fx"),d=t("../../lib/str2rgbarray"),g=t("../../lib/show_no_webgl_msg"),v=t("./project"),m=t("./layout/convert"),y=t("./layout/spikes"),x=t("./layout/tick_marks"),b=t("is-mobile")({tablet:!0,featureDetect:!0});function _(t,e){var r=document.createElement("div"),n=t.container;this.graphDiv=t.graphDiv;var a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.style.position="absolute",a.style.top=a.style.left="0px",a.style.width=a.style.height="100%",a.style["z-index"]=20,a.style["pointer-events"]="none",r.appendChild(a),this.svgContainer=a,r.id=t.id,r.style.position="absolute",r.style.top=r.style.left="0px",r.style.width=r.style.height="100%",n.appendChild(r),this.fullLayout=e,this.id=t.id||"scene",this.fullSceneLayout=e[this.id],this.plotArgs=[[],{},{}],this.axesOptions=m(e,e[this.id]),this.spikeOptions=y(e[this.id]),this.container=r,this.staticMode=!!t.staticPlot,this.pixelRatio=this.pixelRatio||t.plotGlPixelRatio||2,this.dataScale=[1,1,1],this.contourLevels=[[],[],[]],this.convertAnnotations=u.getComponentMethod("annotations3d","convert"),this.drawAnnotations=u.getComponentMethod("annotations3d","draw"),this.initializeGLPlot()}var w=_.prototype;w.prepareOptions=function(){var t={canvas:this.canvas,gl:this.gl,glOptions:{preserveDrawingBuffer:b,premultipliedAlpha:!0,antialias:!0},container:this.container,axes:this.axesOptions,spikes:this.spikeOptions,pickRadius:10,snapToData:!0,autoScale:!0,autoBounds:!1,cameraObject:this.camera,pixelRatio:this.pixelRatio};if(this.staticMode){if(!(a||(n=document.createElement("canvas"),a=l({canvas:n,preserveDrawingBuffer:!0,premultipliedAlpha:!0,antialias:!0}))))throw new Error("error creating static canvas/context for image server");t.gl=a,t.canvas=n}return t},w.tryCreatePlot=function(){var t=this.prepareOptions(),e=!0;try{this.glplot=s(t)}catch(r){if(this.staticMode)e=!1;else try{h.warn(["webgl setup failed possibly due to",b?"disabling":"enabling","preserveDrawingBuffer config.","The device may not be supported by is-mobile module!","Inverting preserveDrawingBuffer option in second attempt to create webgl scene."].join(" ")),b=t.glOptions.preserveDrawingBuffer=!t.glOptions.preserveDrawingBuffer,this.glplot=s(t)}catch(t){e=!1}}return e},w.initializeGLCamera=function(){var t=this.fullSceneLayout.camera,e="orthographic"===t.projection.type;this.camera=o(this.container,{center:[t.center.x,t.center.y,t.center.z],eye:[t.eye.x,t.eye.y,t.eye.z],up:[t.up.x,t.up.y,t.up.z],_ortho:e,zoomMin:.01,zoomMax:100,mode:"orbit"})},w.initializeGLPlot=function(){var t=this;if(t.initializeGLCamera(),!t.tryCreatePlot())return g(t);t.traces={},t.make4thDimension();var e=t.graphDiv,r=e.layout,n=function(){var e={};return t.isCameraChanged(r)&&(e[t.id+".camera"]=t.getCamera()),t.isAspectChanged(r)&&(e[t.id+".aspectratio"]=t.glplot.getAspectratio(),"manual"!==r[t.id].aspectmode&&(t.fullSceneLayout.aspectmode=r[t.id].aspectmode=e[t.id+".aspectmode"]="manual")),e},a=function(t){if(!1!==t.fullSceneLayout.dragmode){var e=n();t.saveLayout(r),t.graphDiv.emit("plotly_relayout",e)}};return t.glplot.canvas.addEventListener("mouseup",function(){a(t)}),t.glplot.canvas.addEventListener("wheel",function(r){if(e._context._scrollZoom.gl3d){if(t.camera._ortho){var n=r.deltaX>r.deltaY?1.1:1/1.1,i=t.glplot.getAspectratio();t.glplot.setAspectratio({x:n*i.x,y:n*i.y,z:n*i.z})}a(t)}},!!c&&{passive:!1}),t.glplot.canvas.addEventListener("mousemove",function(){if(!1!==t.fullSceneLayout.dragmode&&0!==t.camera.mouseListener.buttons){var e=n();t.graphDiv.emit("plotly_relayouting",e)}}),t.staticMode||t.glplot.canvas.addEventListener("webglcontextlost",function(r){e&&e.emit&&e.emit("plotly_webglcontextlost",{event:r,layer:t.id})},!1),t.glplot.oncontextloss=function(){t.recoverContext()},t.glplot.onrender=function(){t.render()},!0},w.render=function(){var t,e=this,r=e.graphDiv,n=e.svgContainer,a=e.container.getBoundingClientRect(),i=a.width,o=a.height;n.setAttributeNS(null,"viewBox","0 0 "+i+" "+o),n.setAttributeNS(null,"width",i),n.setAttributeNS(null,"height",o),x(e),e.glplot.axes.update(e.axesOptions);for(var s,l=Object.keys(e.traces),c=null,u=e.glplot.selection,d=0;d<l.length;++d)"skip"!==(t=e.traces[l[d]]).data.hoverinfo&&t.handlePick(u)&&(c=t),t.setContourLevels&&t.setContourLevels();function g(t,r){var n=e.fullSceneLayout[t];return f.tickText(n,n.d2l(r),"hover").text}if(null!==c){var m=v(e.glplot.cameraParams,u.dataCoordinate);t=c.data;var y,b=r._fullData[t.index],_=u.index,w={xLabel:g("xaxis",u.traceCoordinate[0]),yLabel:g("yaxis",u.traceCoordinate[1]),zLabel:g("zaxis",u.traceCoordinate[2])},k=p.castHoverinfo(b,e.fullLayout,_),T=(k||"").split("+"),M=k&&"all"===k;b.hovertemplate||M||(-1===T.indexOf("x")&&(w.xLabel=void 0),-1===T.indexOf("y")&&(w.yLabel=void 0),-1===T.indexOf("z")&&(w.zLabel=void 0),-1===T.indexOf("text")&&(u.textLabel=void 0),-1===T.indexOf("name")&&(c.name=void 0));var A=[];"cone"===t.type||"streamtube"===t.type?(w.uLabel=g("xaxis",u.traceCoordinate[3]),(M||-1!==T.indexOf("u"))&&A.push("u: "+w.uLabel),w.vLabel=g("yaxis",u.traceCoordinate[4]),(M||-1!==T.indexOf("v"))&&A.push("v: "+w.vLabel),w.wLabel=g("zaxis",u.traceCoordinate[5]),(M||-1!==T.indexOf("w"))&&A.push("w: "+w.wLabel),w.normLabel=u.traceCoordinate[6].toPrecision(3),(M||-1!==T.indexOf("norm"))&&A.push("norm: "+w.normLabel),"streamtube"===t.type&&(w.divergenceLabel=u.traceCoordinate[7].toPrecision(3),(M||-1!==T.indexOf("divergence"))&&A.push("divergence: "+w.divergenceLabel)),u.textLabel&&A.push(u.textLabel),y=A.join("<br>")):"isosurface"===t.type||"volume"===t.type?(w.valueLabel=f.tickText(e._mockAxis,e._mockAxis.d2l(u.traceCoordinate[3]),"hover").text,A.push("value: "+w.valueLabel),u.textLabel&&A.push(u.textLabel),y=A.join("<br>")):y=u.textLabel;var S={x:u.traceCoordinate[0],y:u.traceCoordinate[1],z:u.traceCoordinate[2],data:b._input,fullData:b,curveNumber:b.index,pointNumber:_};p.appendArrayPointValue(S,b,_),t._module.eventData&&(S=b._module.eventData(S,u,b,{},_));var E={points:[S]};e.fullSceneLayout.hovermode&&p.loneHover({trace:b,x:(.5+.5*m[0]/m[3])*i,y:(.5-.5*m[1]/m[3])*o,xLabel:w.xLabel,yLabel:w.yLabel,zLabel:w.zLabel,text:y,name:c.name,color:p.castHoverOption(b,_,"bgcolor")||c.color,borderColor:p.castHoverOption(b,_,"bordercolor"),fontFamily:p.castHoverOption(b,_,"font.family"),fontSize:p.castHoverOption(b,_,"font.size"),fontColor:p.castHoverOption(b,_,"font.color"),nameLength:p.castHoverOption(b,_,"namelength"),textAlign:p.castHoverOption(b,_,"align"),hovertemplate:h.castOption(b,_,"hovertemplate"),hovertemplateLabels:h.extendFlat({},S,w),eventData:[S]},{container:n,gd:r}),u.buttons&&u.distance<5?r.emit("plotly_click",E):r.emit("plotly_hover",E),s=E}else p.loneUnhover(n),r.emit("plotly_unhover",s);e.drawAnnotations(e)},w.recoverContext=function(){var t=this;t.glplot.dispose();var e=function(){t.glplot.gl.isContextLost()?requestAnimationFrame(e):t.initializeGLPlot()?t.plot.apply(t,t.plotArgs):h.error("Catastrophic and unrecoverable WebGL error. Context lost.")};requestAnimationFrame(e)};var k=["xaxis","yaxis","zaxis"];function T(t,e,r){for(var n=t.fullSceneLayout,a=0;a<3;a++){var i=k[a],o=i.charAt(0),s=n[i],l=e[o],c=e[o+"calendar"],u=e["_"+o+"length"];if(h.isArrayOrTypedArray(l))for(var f,p=0;p<(u||l.length);p++)if(h.isArrayOrTypedArray(l[p]))for(var d=0;d<l[p].length;++d)f=s.d2l(l[p][d],0,c),!isNaN(f)&&isFinite(f)&&(r[0][a]=Math.min(r[0][a],f),r[1][a]=Math.max(r[1][a],f));else f=s.d2l(l[p],0,c),!isNaN(f)&&isFinite(f)&&(r[0][a]=Math.min(r[0][a],f),r[1][a]=Math.max(r[1][a],f));else r[0][a]=Math.min(r[0][a],0),r[1][a]=Math.max(r[1][a],u-1)}}w.plot=function(t,e,r){if(this.plotArgs=[t,e,r],!this.glplot.contextLost){var n,a,i,o,s,l,c=e[this.id],u=r[this.id];this.fullLayout=e,this.fullSceneLayout=c,this.axesOptions.merge(e,c),this.spikeOptions.merge(c),this.setViewport(c),this.updateFx(c.dragmode,c.hovermode),this.camera.enableWheel=this.graphDiv._context._scrollZoom.gl3d,this.glplot.setClearColor(d(c.bgcolor)),this.setConvert(s),t?Array.isArray(t)||(t=[t]):t=[];var h=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(i=0;i<t.length;++i)!0===(n=t[i]).visible&&0!==n._length&&T(this,n,h);!function(t,e){for(var r=t.fullSceneLayout,n=r.annotations||[],a=0;a<3;a++)for(var i=k[a],o=i.charAt(0),s=r[i],l=0;l<n.length;l++){var c=n[l];if(c.visible){var u=s.r2l(c[o]);!isNaN(u)&&isFinite(u)&&(e[0][a]=Math.min(e[0][a],u),e[1][a]=Math.max(e[1][a],u))}}}(this,h);var f=[1,1,1];for(o=0;o<3;++o)h[1][o]===h[0][o]?f[o]=1:f[o]=1/(h[1][o]-h[0][o]);for(this.dataScale=f,this.convertAnnotations(this),i=0;i<t.length;++i)!0===(n=t[i]).visible&&0!==n._length&&((a=this.traces[n.uid])?a.data.type===n.type?a.update(n):(a.dispose(),a=n._module.plot(this,n),this.traces[n.uid]=a):(a=n._module.plot(this,n),this.traces[n.uid]=a),a.name=n.name);var p=Object.keys(this.traces);t:for(i=0;i<p.length;++i){for(o=0;o<t.length;++o)if(t[o].uid===p[i]&&!0===t[o].visible&&0!==t[o]._length)continue t;(a=this.traces[p[i]]).dispose(),delete this.traces[p[i]]}this.glplot.objects.sort(function(t,e){return t._trace.data.index-e._trace.data.index});var g,v=[[0,0,0],[0,0,0]],m=[],y={};for(i=0;i<3;++i){if((l=(s=c[k[i]]).type)in y?(y[l].acc*=f[i],y[l].count+=1):y[l]={acc:f[i],count:1},s.autorange){v[0][i]=1/0,v[1][i]=-1/0;var x=this.glplot.objects,b=this.fullSceneLayout.annotations||[],_=s._name.charAt(0);for(o=0;o<x.length;o++){var w=x[o],M=w.bounds,A=w._trace.data._pad||0;"ErrorBars"===w.constructor.name&&s._lowerLogErrorBound?v[0][i]=Math.min(v[0][i],s._lowerLogErrorBound):v[0][i]=Math.min(v[0][i],M[0][i]/f[i]-A),v[1][i]=Math.max(v[1][i],M[1][i]/f[i]+A)}for(o=0;o<b.length;o++){var S=b[o];if(S.visible){var E=s.r2l(S[_]);v[0][i]=Math.min(v[0][i],E),v[1][i]=Math.max(v[1][i],E)}}if("rangemode"in s&&"tozero"===s.rangemode&&(v[0][i]=Math.min(v[0][i],0),v[1][i]=Math.max(v[1][i],0)),v[0][i]>v[1][i])v[0][i]=-1,v[1][i]=1;else{var L=v[1][i]-v[0][i];v[0][i]-=L/32,v[1][i]+=L/32}if("reversed"===s.autorange){var C=v[0][i];v[0][i]=v[1][i],v[1][i]=C}}else{var P=s.range;v[0][i]=s.r2l(P[0]),v[1][i]=s.r2l(P[1])}v[0][i]===v[1][i]&&(v[0][i]-=1,v[1][i]+=1),m[i]=v[1][i]-v[0][i],this.glplot.setBounds(i,{min:v[0][i]*f[i],max:v[1][i]*f[i]})}var O=c.aspectmode;if("cube"===O)g=[1,1,1];else if("manual"===O){var z=c.aspectratio;g=[z.x,z.y,z.z]}else{if("auto"!==O&&"data"!==O)throw new Error("scene.js aspectRatio was not one of the enumerated types");var I=[1,1,1];for(i=0;i<3;++i){var D=y[l=(s=c[k[i]]).type];I[i]=Math.pow(D.acc,1/D.count)/f[i]}g="data"===O?I:Math.max.apply(null,I)/Math.min.apply(null,I)<=4?I:[1,1,1]}c.aspectratio.x=u.aspectratio.x=g[0],c.aspectratio.y=u.aspectratio.y=g[1],c.aspectratio.z=u.aspectratio.z=g[2],this.glplot.setAspectratio(c.aspectratio),this.viewInitial.aspectratio||(this.viewInitial.aspectratio={x:c.aspectratio.x,y:c.aspectratio.y,z:c.aspectratio.z}),this.viewInitial.aspectmode||(this.viewInitial.aspectmode=c.aspectmode);var R=c.domain||null,F=e._size||null;if(R&&F){var B=this.container.style;B.position="absolute",B.left=F.l+R.x[0]*F.w+"px",B.top=F.t+(1-R.y[1])*F.h+"px",B.width=F.w*(R.x[1]-R.x[0])+"px",B.height=F.h*(R.y[1]-R.y[0])+"px"}this.glplot.redraw()}},w.destroy=function(){this.glplot&&(this.camera.mouseListener.enabled=!1,this.container.removeEventListener("wheel",this.camera.wheelListener),this.camera=null,this.glplot.dispose(),this.container.parentNode.removeChild(this.container),this.glplot=null)},w.getCamera=function(){var t;return this.camera.view.recalcMatrix(this.camera.view.lastT()),{up:{x:(t=this.camera).up[0],y:t.up[1],z:t.up[2]},center:{x:t.center[0],y:t.center[1],z:t.center[2]},eye:{x:t.eye[0],y:t.eye[1],z:t.eye[2]},projection:{type:!0===t._ortho?"orthographic":"perspective"}}},w.setViewport=function(t){var e,r=t.camera;this.camera.lookAt.apply(this,[[(e=r).eye.x,e.eye.y,e.eye.z],[e.center.x,e.center.y,e.center.z],[e.up.x,e.up.y,e.up.z]]),this.glplot.setAspectratio(t.aspectratio),"orthographic"===r.projection.type!==this.camera._ortho&&(this.glplot.redraw(),this.glplot.clearRGBA(),this.glplot.dispose(),this.initializeGLPlot())},w.isCameraChanged=function(t){var e=this.getCamera(),r=h.nestedProperty(t,this.id+".camera").get();function n(t,e,r,n){var a=["up","center","eye"],i=["x","y","z"];return e[a[r]]&&t[a[r]][i[n]]===e[a[r]][i[n]]}var a=!1;if(void 0===r)a=!0;else{for(var i=0;i<3;i++)for(var o=0;o<3;o++)if(!n(e,r,i,o)){a=!0;break}(!r.projection||e.projection&&e.projection.type!==r.projection.type)&&(a=!0)}return a},w.isAspectChanged=function(t){var e=this.glplot.getAspectratio(),r=h.nestedProperty(t,this.id+".aspectratio").get();return void 0===r||r.x!==e.x||r.y!==e.y||r.z!==e.z},w.saveLayout=function(t){var e,r,n,a,i,o,s=this.fullLayout,l=this.isCameraChanged(t),c=this.isAspectChanged(t),f=l||c;if(f){var p={};if(l&&(e=this.getCamera(),n=(r=h.nestedProperty(t,this.id+".camera")).get(),p[this.id+".camera"]=n),c&&(a=this.glplot.getAspectratio(),o=(i=h.nestedProperty(t,this.id+".aspectratio")).get(),p[this.id+".aspectratio"]=o),u.call("_storeDirectGUIEdit",t,s._preGUI,p),l)r.set(e),h.nestedProperty(s,this.id+".camera").set(e);if(c)i.set(a),h.nestedProperty(s,this.id+".aspectratio").set(a),this.glplot.redraw()}return f},w.updateFx=function(t,e){var r=this.camera;if(r)if("orbit"===t)r.mode="orbit",r.keyBindingMode="rotate";else if("turntable"===t){r.up=[0,0,1],r.mode="turntable",r.keyBindingMode="rotate";var n=this.graphDiv,a=n._fullLayout,i=this.fullSceneLayout.camera,o=i.up.x,s=i.up.y,l=i.up.z;if(l/Math.sqrt(o*o+s*s+l*l)<.999){var c=this.id+".camera.up",f={x:0,y:0,z:1},p={};p[c]=f;var d=n.layout;u.call("_storeDirectGUIEdit",d,a._preGUI,p),i.up=f,h.nestedProperty(d,c).set(f)}}else r.keyBindingMode=t;this.fullSceneLayout.hovermode=e},w.toImage=function(t){t||(t="png"),this.staticMode&&this.container.appendChild(n),this.glplot.redraw();var e=this.glplot.gl,r=e.drawingBufferWidth,a=e.drawingBufferHeight;e.bindFramebuffer(e.FRAMEBUFFER,null);var i=new Uint8Array(r*a*4);e.readPixels(0,0,r,a,e.RGBA,e.UNSIGNED_BYTE,i),function(t,e,r){for(var n=0,a=r-1;n<a;++n,--a)for(var i=0;i<e;++i)for(var o=0;o<4;++o){var s=4*(e*n+i)+o,l=4*(e*a+i)+o,c=t[s];t[s]=t[l],t[l]=c}}(i,r,a),function(t,e,r){for(var n=0;n<r;++n)for(var a=0;a<e;++a){var i=4*(e*n+a),o=t[i+3];if(o>0)for(var s=255/o,l=0;l<3;++l)t[i+l]=Math.min(s*t[i+l],255)}}(i,r,a);var o=document.createElement("canvas");o.width=r,o.height=a;var s,l=o.getContext("2d"),c=l.createImageData(r,a);switch(c.data.set(i),l.putImageData(c,0,0),t){case"jpeg":s=o.toDataURL("image/jpeg");break;case"webp":s=o.toDataURL("image/webp");break;default:s=o.toDataURL("image/png")}return this.staticMode&&this.container.removeChild(n),s},w.setConvert=function(){for(var t=0;t<3;t++){var e=this.fullSceneLayout[k[t]];f.setConvert(e,this.fullLayout),e.setScale=h.noop}},w.make4thDimension=function(){var t=this.graphDiv._fullLayout;this._mockAxis={type:"linear",showexponent:"all",exponentformat:"B"},f.setConvert(this._mockAxis,t)},e.exports=_},{"../../components/fx":630,"../../lib":717,"../../lib/show_no_webgl_msg":738,"../../lib/str2rgbarray":740,"../../plots/cartesian/axes":765,"../../registry":846,"./layout/convert":809,"./layout/spikes":812,"./layout/tick_marks":813,"./project":814,"gl-plot3d":293,"has-passive-events":412,"is-mobile":421,"webgl-context":554}],816:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){n=n||t.length;for(var a=new Array(n),i=0;i<n;i++)a[i]=[t[i],e[i],r[i]];return a}},{}],817:[function(t,e,r){"use strict";var n=t("./font_attributes"),a=t("./animation_attributes"),i=t("../components/color/attributes"),o=t("./pad_attributes"),s=t("../lib/extend").extendFlat,l=n({editType:"calc"});l.family.dflt='"Open Sans", verdana, arial, sans-serif',l.size.dflt=12,l.color.dflt=i.defaultLine,e.exports={font:l,title:{text:{valType:"string",editType:"layoutstyle"},font:n({editType:"layoutstyle"}),xref:{valType:"enumerated",dflt:"container",values:["container","paper"],editType:"layoutstyle"},yref:{valType:"enumerated",dflt:"container",values:["container","paper"],editType:"layoutstyle"},x:{valType:"number",min:0,max:1,dflt:.5,editType:"layoutstyle"},y:{valType:"number",min:0,max:1,dflt:"auto",editType:"layoutstyle"},xanchor:{valType:"enumerated",dflt:"auto",values:["auto","left","center","right"],editType:"layoutstyle"},yanchor:{valType:"enumerated",dflt:"auto",values:["auto","top","middle","bottom"],editType:"layoutstyle"},pad:s(o({editType:"layoutstyle"}),{}),editType:"layoutstyle"},uniformtext:{mode:{valType:"enumerated",values:[!1,"hide","show"],dflt:!1,editType:"plot"},minsize:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"plot"},autosize:{valType:"boolean",dflt:!1,editType:"none"},width:{valType:"number",min:10,dflt:700,editType:"plot"},height:{valType:"number",min:10,dflt:450,editType:"plot"},margin:{l:{valType:"number",min:0,dflt:80,editType:"plot"},r:{valType:"number",min:0,dflt:80,editType:"plot"},t:{valType:"number",min:0,dflt:100,editType:"plot"},b:{valType:"number",min:0,dflt:80,editType:"plot"},pad:{valType:"number",min:0,dflt:0,editType:"plot"},autoexpand:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},paper_bgcolor:{valType:"color",dflt:i.background,editType:"plot"},plot_bgcolor:{valType:"color",dflt:i.background,editType:"layoutstyle"},separators:{valType:"string",editType:"plot"},hidesources:{valType:"boolean",dflt:!1,editType:"plot"},showlegend:{valType:"boolean",editType:"legend"},colorway:{valType:"colorlist",dflt:i.defaults,editType:"calc"},datarevision:{valType:"any",editType:"calc"},uirevision:{valType:"any",editType:"none"},editrevision:{valType:"any",editType:"none"},selectionrevision:{valType:"any",editType:"none"},template:{valType:"any",editType:"calc"},modebar:{orientation:{valType:"enumerated",values:["v","h"],dflt:"h",editType:"modebar"},bgcolor:{valType:"color",editType:"modebar"},color:{valType:"color",editType:"modebar"},activecolor:{valType:"color",editType:"modebar"},uirevision:{valType:"any",editType:"none"},editType:"modebar"},meta:{valType:"any",arrayOk:!0,editType:"plot"},transition:s({},a.transition,{editType:"none"}),_deprecated:{title:{valType:"string",editType:"layoutstyle"},titlefont:n({editType:"layoutstyle"})}}},{"../components/color/attributes":590,"../lib/extend":708,"./animation_attributes":760,"./font_attributes":791,"./pad_attributes":825}],818:[function(t,e,r){"use strict";var n={"open-street-map":{id:"osm",version:8,sources:{"plotly-osm-tiles":{type:"raster",attribution:'<a href="http://www.openstreetmap.org/about/" target="_blank">\xa9 OpenStreetMap</a>',tiles:["https://a.tile.openstreetmap.org/{z}/{x}/{y}.png","https://b.tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-osm-tiles",type:"raster",source:"plotly-osm-tiles",minzoom:0,maxzoom:22}]},"white-bg":{id:"white-bg",version:8,sources:{},layers:[{id:"white-bg",type:"background",paint:{"background-color":"#FFFFFF"},minzoom:0,maxzoom:22}]},"carto-positron":{id:"carto-positron",version:8,sources:{"plotly-carto-positron":{type:"raster",attribution:'<a href="https://carto.com/" target="_blank">\xa9 CARTO</a>',tiles:["https://cartodb-basemaps-c.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-carto-positron",type:"raster",source:"plotly-carto-positron",minzoom:0,maxzoom:22}]},"carto-darkmatter":{id:"carto-darkmatter",version:8,sources:{"plotly-carto-darkmatter":{type:"raster",attribution:'<a href="https://carto.com/" target="_blank">\xa9 CARTO</a>',tiles:["https://cartodb-basemaps-c.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-carto-darkmatter",type:"raster",source:"plotly-carto-darkmatter",minzoom:0,maxzoom:22}]},"stamen-terrain":{id:"stamen-terrain",version:8,sources:{"plotly-stamen-terrain":{type:"raster",attribution:'Map tiles by <a href="http://stamen.com">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> | Data by <a href="http://openstreetmap.org">OpenStreetMap</a>, under <a href="http://www.openstreetmap.org/copyright">ODbL</a>.',tiles:["https://stamen-tiles.a.ssl.fastly.net/terrain/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-stamen-terrain",type:"raster",source:"plotly-stamen-terrain",minzoom:0,maxzoom:22}]},"stamen-toner":{id:"stamen-toner",version:8,sources:{"plotly-stamen-toner":{type:"raster",attribution:'Map tiles by <a href="http://stamen.com">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> | Data by <a href="http://openstreetmap.org">OpenStreetMap</a>, under <a href="http://www.openstreetmap.org/copyright">ODbL</a>.',tiles:["https://stamen-tiles.a.ssl.fastly.net/toner/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-stamen-toner",type:"raster",source:"plotly-stamen-toner",minzoom:0,maxzoom:22}]},"stamen-watercolor":{id:"stamen-watercolor",version:8,sources:{"plotly-stamen-watercolor":{type:"raster",attribution:'Map tiles by <a href="http://stamen.com">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> | Data by <a href="http://openstreetmap.org">OpenStreetMap</a>, under <a href="http://creativecommons.org/licenses/by-sa/3.0">CC BY SA</a>.',tiles:["https://stamen-tiles.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-stamen-watercolor",type:"raster",source:"plotly-stamen-watercolor",minzoom:0,maxzoom:22}]}},a=Object.keys(n);e.exports={requiredVersion:"1.3.2",styleUrlPrefix:"mapbox://styles/mapbox/",styleUrlSuffix:"v9",styleValuesMapbox:["basic","streets","outdoors","light","dark","satellite","satellite-streets"],styleValueDflt:"basic",stylesNonMapbox:n,styleValuesNonMapbox:a,traceLayerPrefix:"plotly-trace-layer-",layoutLayerPrefix:"plotly-layout-layer-",wrongVersionErrorMsg:["Your custom plotly.js bundle is not using the correct mapbox-gl version","Please install mapbox-gl@1.3.2."].join("\n"),noAccessTokenErrorMsg:["Missing Mapbox access token.","Mapbox trace type require a Mapbox access token to be registered.","For example:"," Plotly.plot(gd, data, layout, { mapboxAccessToken: 'my-access-token' });","More info here: https://www.mapbox.com/help/define-access-token/"].join("\n"),missingStyleErrorMsg:["No valid mapbox style found, please set `mapbox.style` to one of:",a.join(", "),"or register a Mapbox access token to use a Mapbox-served style."].join("\n"),multipleTokensErrorMsg:["Set multiple mapbox access token across different mapbox subplot,","using first token found as mapbox-gl does not allow multipleaccess tokens on the same page."].join("\n"),mapOnErrorMsg:"Mapbox error.",mapboxLogo:{path0:"m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z",path1:"M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z",path2:"M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z",polygon:"11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34"},styleRules:{map:"overflow:hidden;position:relative;","missing-css":"display:none;",canary:"background-color:salmon;","ctrl-bottom-left":"position: absolute; pointer-events: none; z-index: 2; bottom: 0; left: 0;","ctrl-bottom-right":"position: absolute; pointer-events: none; z-index: 2; right: 0; bottom: 0;",ctrl:"clear: both; pointer-events: auto; transform: translate(0, 0);","ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner":"display: none;","ctrl-attrib.mapboxgl-compact:hover .mapboxgl-ctrl-attrib-inner":"display: block; margin-top:2px","ctrl-attrib.mapboxgl-compact:hover":"padding: 2px 24px 2px 4px; visibility: visible; margin-top: 6px;","ctrl-attrib.mapboxgl-compact::after":'content: ""; cursor: pointer; position: absolute; background-image: url(\'data:image/svg+xml;charset=utf-8,%3Csvg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"%3E %3Cpath fill="%23333333" fill-rule="evenodd" d="M4,10a6,6 0 1,0 12,0a6,6 0 1,0 -12,0 M9,7a1,1 0 1,0 2,0a1,1 0 1,0 -2,0 M9,10a1,1 0 1,1 2,0l0,3a1,1 0 1,1 -2,0"/%3E %3C/svg%3E\'); background-color: rgba(255, 255, 255, 0.5); width: 24px; height: 24px; box-sizing: border-box; border-radius: 12px;',"ctrl-attrib.mapboxgl-compact":"min-height: 20px; padding: 0; margin: 10px; position: relative; background-color: #fff; border-radius: 3px 12px 12px 3px;","ctrl-bottom-right > .mapboxgl-ctrl-attrib.mapboxgl-compact::after":"bottom: 0; right: 0","ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact::after":"bottom: 0; left: 0","ctrl-bottom-left .mapboxgl-ctrl":"margin: 0 0 10px 10px; float: left;","ctrl-bottom-right .mapboxgl-ctrl":"margin: 0 10px 10px 0; float: right;","ctrl-attrib":"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px","ctrl-attrib a":"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px","ctrl-attrib a:hover":"color: inherit; text-decoration: underline;","ctrl-attrib .mapbox-improve-map":"font-weight: bold; margin-left: 2px;","attrib-empty":"display: none;","ctrl-logo":'display:block; width: 21px; height: 21px; background-image: url(\'data:image/svg+xml;charset=utf-8,%3C?xml version="1.0" encoding="utf-8"?%3E %3Csvg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 21 21" style="enable-background:new 0 0 21 21;" xml:space="preserve"%3E%3Cg transform="translate(0,0.01)"%3E%3Cpath d="m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z" style="opacity:0.9;fill:%23ffffff;enable-background:new" class="st0"/%3E%3Cpath d="M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z" style="opacity:0.35;enable-background:new" class="st1"/%3E%3Cpath d="M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z" style="opacity:0.35;enable-background:new" class="st1"/%3E%3Cpolygon points="11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34 " style="opacity:0.9;fill:%23ffffff;enable-background:new" class="st0"/%3E%3C/g%3E%3C/svg%3E\')'}}},{}],819:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){var r=t.split(" "),a=r[0],i=r[1],o=n.isArrayOrTypedArray(e)?n.mean(e):e,s=.5+o/100,l=1.5+o/100,c=["",""],u=[0,0];switch(a){case"top":c[0]="top",u[1]=-l;break;case"bottom":c[0]="bottom",u[1]=l}switch(i){case"left":c[1]="right",u[0]=-s;break;case"right":c[1]="left",u[0]=s}return{anchor:c[0]&&c[1]?c.join("-"):c[0]?c[0]:c[1]?c[1]:"center",offset:u}}},{"../../lib":717}],820:[function(t,e,r){"use strict";var n=t("mapbox-gl"),a=t("../../lib"),i=t("../../plots/get_data").getSubplotCalcData,o=t("../../constants/xmlns_namespaces"),s=t("d3"),l=t("../../components/drawing"),c=t("../../lib/svg_text_utils"),u=t("./mapbox"),h=r.constants=t("./constants");function f(t){return"string"==typeof t&&(-1!==h.styleValuesMapbox.indexOf(t)||0===t.indexOf("mapbox://"))}r.name="mapbox",r.attr="subplot",r.idRoot="mapbox",r.idRegex=r.attrRegex=a.counterRegex("mapbox"),r.attributes={subplot:{valType:"subplotid",dflt:"mapbox",editType:"calc"}},r.layoutAttributes=t("./layout_attributes"),r.supplyLayoutDefaults=t("./layout_defaults"),r.plot=function(t){var e=t._fullLayout,r=t.calcdata,o=e._subplots.mapbox;if(n.version!==h.requiredVersion)throw new Error(h.wrongVersionErrorMsg);var s=function(t,e){var r=t._fullLayout;if(""===t._context.mapboxAccessToken)return"";for(var n=[],i=[],o=!1,s=!1,l=0;l<e.length;l++){var c=r[e[l]],u=c.accesstoken;f(c.style)&&(u?a.pushUnique(n,u):(f(c._input.style)&&(a.error("Uses Mapbox map style, but did not set an access token."),o=!0),s=!0)),u&&a.pushUnique(i,u)}if(s){var p=o?h.noAccessTokenErrorMsg:h.missingStyleErrorMsg;throw a.error(p),new Error(p)}return n.length?(n.length>1&&a.warn(h.multipleTokensErrorMsg),n[0]):(i.length&&a.log(["Listed mapbox access token(s)",i.join(","),"but did not use a Mapbox map style, ignoring token(s)."].join(" ")),"")}(t,o);n.accessToken=s;for(var l=0;l<o.length;l++){var c=o[l],p=i(r,"mapbox",c),d=e[c],g=d._subplot;g||(g=new u(t,c),e[c]._subplot=g),g.viewInitial||(g.viewInitial={center:a.extendFlat({},d.center),zoom:d.zoom,bearing:d.bearing,pitch:d.pitch}),g.plot(p,e,t._promises)}},r.clean=function(t,e,r,n){for(var a=n._subplots.mapbox||[],i=0;i<a.length;i++){var o=a[i];!e[o]&&n[o]._subplot&&n[o]._subplot.destroy()}},r.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots.mapbox,n=e._size,a=0;a<r.length;a++){var i=e[r[a]],u=i.domain,f=i._subplot.toImage("png");e._glimages.append("svg:image").attr({xmlns:o.svg,"xlink:href":f,x:n.l+n.w*u.x[0],y:n.t+n.h*(1-u.y[1]),width:n.w*(u.x[1]-u.x[0]),height:n.h*(u.y[1]-u.y[0]),preserveAspectRatio:"none"});var p=s.select(i._subplot.div);if(!(null===p.select(".mapboxgl-ctrl-logo").node().offsetParent)){var d=e._glimages.append("g");d.attr("transform","translate("+(n.l+n.w*u.x[0]+10)+", "+(n.t+n.h*(1-u.y[0])-31)+")"),d.append("path").attr("d",h.mapboxLogo.path0).style({opacity:.9,fill:"#ffffff","enable-background":"new"}),d.append("path").attr("d",h.mapboxLogo.path1).style("opacity",.35).style("enable-background","new"),d.append("path").attr("d",h.mapboxLogo.path2).style("opacity",.35).style("enable-background","new"),d.append("polygon").attr("points",h.mapboxLogo.polygon).style({opacity:.9,fill:"#ffffff","enable-background":"new"})}var g=p.select(".mapboxgl-ctrl-attrib").text().replace("Improve this map",""),v=e._glimages.append("g"),m=v.append("text");m.text(g).classed("static-attribution",!0).attr({"font-size":12,"font-family":"Arial",color:"rgba(0, 0, 0, 0.75)","text-anchor":"end","data-unformatted":g});var y=l.bBox(m.node()),x=n.w*(u.x[1]-u.x[0]);if(y.width>x/2){var b=g.split("|").join("<br>");m.text(b).attr("data-unformatted",b).call(c.convertToTspans,t),y=l.bBox(m.node())}m.attr("transform","translate(-3, "+(8-y.height)+")"),v.insert("rect",".static-attribution").attr({x:-y.width-6,y:-y.height-3,width:y.width+6,height:y.height+3,fill:"rgba(255, 255, 255, 0.75)"});var _=1;y.width+6>x&&(_=x/(y.width+6));var w=[n.l+n.w*u.x[1],n.t+n.h*(1-u.y[0])];v.attr("transform","translate("+w[0]+","+w[1]+") scale("+_+")")}},r.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots.mapbox,n=0;n<r.length;n++){e[r[n]]._subplot.updateFx(e)}}},{"../../components/drawing":612,"../../constants/xmlns_namespaces":694,"../../lib":717,"../../lib/svg_text_utils":741,"../../plots/get_data":800,"./constants":818,"./layout_attributes":822,"./layout_defaults":823,"./mapbox":824,d3:165,"mapbox-gl":427}],821:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./convert_text_opts"),i=t("./constants");function o(t,e){this.subplot=t,this.uid=t.uid+"-"+e,this.index=e,this.idSource="source-"+this.uid,this.idLayer=i.layoutLayerPrefix+this.uid,this.sourceType=null,this.source=null,this.layerType=null,this.below=null,this.visible=!1}var s=o.prototype;function l(t){if(!t.visible)return!1;var e=t.source;if(Array.isArray(e)&&e.length>0){for(var r=0;r<e.length;r++)if("string"!=typeof e[r]||0===e[r].length)return!1;return!0}return n.isPlainObject(e)||"string"==typeof e&&e.length>0}function c(t){var e={},r={};switch(t.type){case"circle":n.extendFlat(r,{"circle-radius":t.circle.radius,"circle-color":t.color,"circle-opacity":t.opacity});break;case"line":n.extendFlat(r,{"line-width":t.line.width,"line-color":t.color,"line-opacity":t.opacity,"line-dasharray":t.line.dash});break;case"fill":n.extendFlat(r,{"fill-color":t.color,"fill-outline-color":t.fill.outlinecolor,"fill-opacity":t.opacity});break;case"symbol":var i=t.symbol,o=a(i.textposition,i.iconsize);n.extendFlat(e,{"icon-image":i.icon+"-15","icon-size":i.iconsize/10,"text-field":i.text,"text-size":i.textfont.size,"text-anchor":o.anchor,"text-offset":o.offset,"symbol-placement":i.placement}),n.extendFlat(r,{"icon-color":t.color,"text-color":i.textfont.color,"text-opacity":t.opacity});break;case"raster":n.extendFlat(r,{"raster-fade-duration":0,"raster-opacity":t.opacity})}return{layout:e,paint:r}}s.update=function(t){this.visible?this.needsNewImage(t)?this.updateImage(t):this.needsNewSource(t)?(this.removeLayer(),this.updateSource(t),this.updateLayer(t)):this.needsNewLayer(t)?this.updateLayer(t):this.updateStyle(t):(this.updateSource(t),this.updateLayer(t)),this.visible=l(t)},s.needsNewImage=function(t){return this.subplot.map.getSource(this.idSource)&&"image"===this.sourceType&&"image"===t.sourcetype&&(this.source!==t.source||JSON.stringify(this.coordinates)!==JSON.stringify(t.coordinates))},s.needsNewSource=function(t){return this.sourceType!==t.sourcetype||this.source!==t.source||this.layerType!==t.type},s.needsNewLayer=function(t){return this.layerType!==t.type||this.below!==this.subplot.belowLookup["layout-"+this.index]},s.updateImage=function(t){this.subplot.map.getSource(this.idSource).updateImage({url:t.source,coordinates:t.coordinates})},s.updateSource=function(t){var e=this.subplot.map;if(e.getSource(this.idSource)&&e.removeSource(this.idSource),this.sourceType=t.sourcetype,this.source=t.source,l(t)){var r=function(t){var e,r=t.sourcetype,n=t.source,a={type:r};"geojson"===r?e="data":"vector"===r?e="string"==typeof n?"url":"tiles":"raster"===r?(e="tiles",a.tileSize=256):"image"===r&&(e="url",a.coordinates=t.coordinates);a[e]=n,t.sourceattribution&&(a.attribution=t.sourceattribution);return a}(t);e.addSource(this.idSource,r)}},s.updateLayer=function(t){var e,r=this.subplot,n=c(t),a=this.subplot.belowLookup["layout-"+this.index];if("traces"===a)for(var o=r.getMapLayers(),s=0;s<o.length;s++){var u=o[s].id;if("string"==typeof u&&0===u.indexOf(i.traceLayerPrefix)){e=u;break}}else e=a;this.removeLayer(),l(t)&&r.addLayer({id:this.idLayer,source:this.idSource,"source-layer":t.sourcelayer||"",type:t.type,minzoom:t.minzoom,maxzoom:t.maxzoom,layout:n.layout,paint:n.paint},e),this.layerType=t.type,this.below=a},s.updateStyle=function(t){if(l(t)){var e=c(t);this.subplot.setOptions(this.idLayer,"setLayoutProperty",e.layout),this.subplot.setOptions(this.idLayer,"setPaintProperty",e.paint)}},s.removeLayer=function(){var t=this.subplot.map;t.getLayer(this.idLayer)&&t.removeLayer(this.idLayer)},s.dispose=function(){var t=this.subplot.map;t.getLayer(this.idLayer)&&t.removeLayer(this.idLayer),t.getSource(this.idSource)&&t.removeSource(this.idSource)},e.exports=function(t,e,r){var n=new o(t,e);return n.update(r),n}},{"../../lib":717,"./constants":818,"./convert_text_opts":819}],822:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/color").defaultLine,i=t("../domain").attributes,o=t("../font_attributes"),s=t("../../traces/scatter/attributes").textposition,l=t("../../plot_api/edit_types").overrideAll,c=t("../../plot_api/plot_template").templatedArray,u=t("./constants"),h=o({});h.family.dflt="Open Sans Regular, Arial Unicode MS Regular",(e.exports=l({_arrayAttrRegexps:[n.counterRegex("mapbox",".layers",!0)],domain:i({name:"mapbox"}),accesstoken:{valType:"string",noBlank:!0,strict:!0},style:{valType:"any",values:u.styleValuesMapbox.concat(u.styleValuesNonMapbox),dflt:u.styleValueDflt},center:{lon:{valType:"number",dflt:0},lat:{valType:"number",dflt:0}},zoom:{valType:"number",dflt:1},bearing:{valType:"number",dflt:0},pitch:{valType:"number",dflt:0},layers:c("layer",{visible:{valType:"boolean",dflt:!0},sourcetype:{valType:"enumerated",values:["geojson","vector","raster","image"],dflt:"geojson"},source:{valType:"any"},sourcelayer:{valType:"string",dflt:""},sourceattribution:{valType:"string"},type:{valType:"enumerated",values:["circle","line","fill","symbol","raster"],dflt:"circle"},coordinates:{valType:"any"},below:{valType:"string"},color:{valType:"color",dflt:a},opacity:{valType:"number",min:0,max:1,dflt:1},minzoom:{valType:"number",min:0,max:24,dflt:0},maxzoom:{valType:"number",min:0,max:24,dflt:24},circle:{radius:{valType:"number",dflt:15}},line:{width:{valType:"number",dflt:2},dash:{valType:"data_array"}},fill:{outlinecolor:{valType:"color",dflt:a}},symbol:{icon:{valType:"string",dflt:"marker"},iconsize:{valType:"number",dflt:10},text:{valType:"string",dflt:""},placement:{valType:"enumerated",values:["point","line","line-center"],dflt:"point"},textfont:h,textposition:n.extendFlat({},s,{arrayOk:!1})}})},"plot","from-root")).uirevision={valType:"any",editType:"none"}},{"../../components/color":591,"../../lib":717,"../../plot_api/edit_types":748,"../../plot_api/plot_template":755,"../../traces/scatter/attributes":1120,"../domain":790,"../font_attributes":791,"./constants":818}],823:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../subplot_defaults"),i=t("../array_container_defaults"),o=t("./layout_attributes");function s(t,e,r,n){r("accesstoken",n.accessToken),r("style"),r("center.lon"),r("center.lat"),r("zoom"),r("bearing"),r("pitch"),i(t,e,{name:"layers",handleItemDefaults:l}),e._input=t}function l(t,e){function r(r,a){return n.coerce(t,e,o.layers,r,a)}if(r("visible")){var a,i=r("sourcetype"),s="raster"===i||"image"===i;r("source"),r("sourceattribution"),"vector"===i&&r("sourcelayer"),"image"===i&&r("coordinates"),s&&(a="raster");var l=r("type",a);s&&"raster"!==l&&(l=e.type="raster",n.log("Source types *raster* and *image* must drawn *raster* layer type.")),r("below"),r("color"),r("opacity"),r("minzoom"),r("maxzoom"),"circle"===l&&r("circle.radius"),"line"===l&&(r("line.width"),r("line.dash")),"fill"===l&&r("fill.outlinecolor"),"symbol"===l&&(r("symbol.icon"),r("symbol.iconsize"),r("symbol.text"),n.coerceFont(r,"symbol.textfont"),r("symbol.textposition"),r("symbol.placement"))}}e.exports=function(t,e,r){a(t,e,r,{type:"mapbox",attributes:o,handleDefaults:s,partition:"y",accessToken:e._mapboxAccessToken})}},{"../../lib":717,"../array_container_defaults":761,"../subplot_defaults":840,"./layout_attributes":822}],824:[function(t,e,r){"use strict";var n=t("mapbox-gl"),a=t("../../components/fx"),i=t("../../lib"),o=t("../../lib/geo_location_utils"),s=t("../../registry"),l=t("../cartesian/axes"),c=t("../../components/dragelement"),u=t("../cartesian/select").prepSelect,h=t("../cartesian/select").selectOnClick,f=t("./constants"),p=t("./layers");function d(t,e){this.id=e,this.gd=t;var r=t._fullLayout,n=t._context;this.container=r._glcontainer.node(),this.isStatic=n.staticPlot,this.uid=r._uid+"-"+this.id,this.div=null,this.xaxis=null,this.yaxis=null,this.createFramework(r),this.map=null,this.accessToken=null,this.styleObj=null,this.traceHash={},this.layerList=[],this.belowLookup={},this.dragging=!1,this.wheeling=!1}var g=d.prototype;g.plot=function(t,e,r){var n,a=this,i=e[a.id];a.map&&i.accesstoken!==a.accessToken&&(a.map.remove(),a.map=null,a.styleObj=null,a.traceHash=[],a.layerList={}),n=a.map?new Promise(function(r,n){a.updateMap(t,e,r,n)}):new Promise(function(r,n){a.createMap(t,e,r,n)}),r.push(n)},g.createMap=function(t,e,r,a){var i=this,s=e[i.id],l=i.styleObj=m(s.style);i.accessToken=s.accesstoken;var c=i.map=new n.Map({container:i.div,style:l.style,center:x(s.center),zoom:s.zoom,bearing:s.bearing,pitch:s.pitch,interactive:!i.isStatic,preserveDrawingBuffer:i.isStatic,doubleClickZoom:!1,boxZoom:!1,attributionControl:!1}).addControl(new n.AttributionControl({compact:!0}));c._canvas.style.left="0px",c._canvas.style.top="0px",i.rejectOnError(a),i.isStatic||i.initFx(t,e);var u=[];u.push(new Promise(function(t){c.once("load",t)})),u=u.concat(o.fetchTraceGeoData(t)),Promise.all(u).then(function(){i.fillBelowLookup(t,e),i.updateData(t),i.updateLayout(e),i.resolveOnRender(r)}).catch(a)},g.updateMap=function(t,e,r,n){var a=this,i=a.map,s=e[this.id];a.rejectOnError(n);var l=[],c=m(s.style);a.styleObj.id!==c.id&&(a.styleObj=c,i.setStyle(c.style),a.traceHash={},l.push(new Promise(function(t){i.once("styledata",t)}))),l=l.concat(o.fetchTraceGeoData(t)),Promise.all(l).then(function(){a.fillBelowLookup(t,e),a.updateData(t),a.updateLayout(e),a.resolveOnRender(r)}).catch(n)},g.fillBelowLookup=function(t,e){var r,n,a=e[this.id].layers,i=this.belowLookup={},o=!1;for(r=0;r<t.length;r++){var s=t[r][0].trace,l=s._module;"string"==typeof s.below?n=s.below:l.getBelow&&(n=l.getBelow(s,this)),""===n&&(o=!0),i["trace-"+s.uid]=n||""}for(r=0;r<a.length;r++){var c=a[r];n="string"==typeof c.below?c.below:o?"traces":"",i["layout-"+r]=n}var u,h,f={};for(u in i)f[n=i[u]]?f[n].push(u):f[n]=[u];for(n in f){var p=f[n];if(p.length>1)for(r=0;r<p.length;r++)0===(u=p[r]).indexOf("trace-")?(h=u.split("trace-")[1],this.traceHash[h]&&(this.traceHash[h].below=null)):0===u.indexOf("layout-")&&(h=u.split("layout-")[1],this.layerList[h]&&(this.layerList[h].below=null))}};var v={choroplethmapbox:0,densitymapbox:1,scattermapbox:2};function m(t){var e={};return i.isPlainObject(t)?(e.id=t.id,e.style=t):"string"==typeof t?(e.id=t,-1!==f.styleValuesMapbox.indexOf(t)?e.style=y(t):f.stylesNonMapbox[t]?e.style=f.stylesNonMapbox[t]:e.style=t):(e.id=f.styleValueDflt,e.style=y(f.styleValueDflt)),e.transition={duration:0,delay:0},e}function y(t){return f.styleUrlPrefix+t+"-"+f.styleUrlSuffix}function x(t){return[t.lon,t.lat]}g.updateData=function(t){var e,r,n,a,i=this.traceHash,o=t.slice().sort(function(t,e){return v[t[0].trace.type]-v[e[0].trace.type]});for(n=0;n<o.length;n++){var s=o[n],l=!1;(e=i[(r=s[0].trace).uid])&&(e.type===r.type?(e.update(s),l=!0):e.dispose()),!l&&r._module&&(i[r.uid]=r._module.plot(this,s))}var c=Object.keys(i);t:for(n=0;n<c.length;n++){var u=c[n];for(a=0;a<t.length;a++)if(u===(r=t[a][0].trace).uid)continue t;(e=i[u]).dispose(),delete i[u]}},g.updateLayout=function(t){var e=this.map,r=t[this.id];this.dragging||this.wheeling||(e.setCenter(x(r.center)),e.setZoom(r.zoom),e.setBearing(r.bearing),e.setPitch(r.pitch)),this.updateLayers(t),this.updateFramework(t),this.updateFx(t),this.map.resize(),this.gd._context._scrollZoom.mapbox?e.scrollZoom.enable():e.scrollZoom.disable()},g.resolveOnRender=function(t){var e=this.map;e.on("render",function r(){e.loaded()&&(e.off("render",r),setTimeout(t,10))})},g.rejectOnError=function(t){var e=this.map;function r(){t(new Error(f.mapOnErrorMsg))}e.once("error",r),e.once("style.error",r),e.once("source.error",r),e.once("tile.error",r),e.once("layer.error",r)},g.createFramework=function(t){var e=this,r=e.div=document.createElement("div");r.id=e.uid,r.style.position="absolute",e.container.appendChild(r),e.xaxis={_id:"x",c2p:function(t){return e.project(t).x}},e.yaxis={_id:"y",c2p:function(t){return e.project(t).y}},e.updateFramework(t),e.mockAxis={type:"linear",showexponent:"all",exponentformat:"B"},l.setConvert(e.mockAxis,t)},g.initFx=function(t,e){var r=this,n=r.gd,i=r.map;function o(){a.loneUnhover(e._hoverlayer)}function l(){var t=r.getView();n.emit("plotly_relayouting",r.getViewEditsWithDerived(t))}i.on("moveend",function(t){if(r.map){var e=n._fullLayout;if(t.originalEvent||r.wheeling){var a=e[r.id];s.call("_storeDirectGUIEdit",n.layout,e._preGUI,r.getViewEdits(a));var i=r.getView();a._input.center=a.center=i.center,a._input.zoom=a.zoom=i.zoom,a._input.bearing=a.bearing=i.bearing,a._input.pitch=a.pitch=i.pitch,n.emit("plotly_relayout",r.getViewEditsWithDerived(i))}t.originalEvent&&"mouseup"===t.originalEvent.type?r.dragging=!1:r.wheeling&&(r.wheeling=!1),e._rehover&&e._rehover()}}),i.on("wheel",function(){r.wheeling=!0}),i.on("mousemove",function(t){var e=r.div.getBoundingClientRect();t.clientX=t.point.x+e.left,t.clientY=t.point.y+e.top,t.target.getBoundingClientRect=function(){return e},r.xaxis.p2c=function(){return t.lngLat.lng},r.yaxis.p2c=function(){return t.lngLat.lat},n._fullLayout._rehover=function(){n._fullLayout._hoversubplot===r.id&&n._fullLayout[r.id]&&a.hover(n,t,r.id)},a.hover(n,t,r.id),n._fullLayout._hoversubplot=r.id}),i.on("dragstart",function(){r.dragging=!0,o()}),i.on("zoomstart",o),i.on("mouseout",function(){n._fullLayout._hoversubplot=null}),i.on("drag",l),i.on("zoom",l),i.on("dblclick",function(){var t=n._fullLayout[r.id];s.call("_storeDirectGUIEdit",n.layout,n._fullLayout._preGUI,r.getViewEdits(t));var e=r.viewInitial;i.setCenter(x(e.center)),i.setZoom(e.zoom),i.setBearing(e.bearing),i.setPitch(e.pitch);var a=r.getView();t._input.center=t.center=a.center,t._input.zoom=t.zoom=a.zoom,t._input.bearing=t.bearing=a.bearing,t._input.pitch=t.pitch=a.pitch,n.emit("plotly_doubleclick",null),n.emit("plotly_relayout",r.getViewEditsWithDerived(a))}),r.clearSelect=function(){n._fullLayout._zoomlayer.selectAll(".select-outline").remove()},r.onClickInPanFn=function(t){return function(e){var i=n._fullLayout.clickmode;i.indexOf("select")>-1&&h(e.originalEvent,n,[r.xaxis],[r.yaxis],r.id,t),i.indexOf("event")>-1&&a.click(n,e.originalEvent)}}},g.updateFx=function(t){var e=this,r=e.map,n=e.gd;if(!e.isStatic){var a,o=t.dragmode;a="select"===o?function(t,r){(t.range={})[e.id]=[l([r.xmin,r.ymin]),l([r.xmax,r.ymax])]}:function(t,r,n){(t.lassoPoints={})[e.id]=n.filtered.map(l)};var s=e.dragOptions;e.dragOptions=i.extendDeep(s||{},{element:e.div,gd:n,plotinfo:{id:e.id,xaxis:e.xaxis,yaxis:e.yaxis,fillRangeItems:a},xaxes:[e.xaxis],yaxes:[e.yaxis],subplot:e.id}),r.off("click",e.onClickInPanHandler),"select"===o||"lasso"===o?(r.dragPan.disable(),r.on("zoomstart",e.clearSelect),e.dragOptions.prepFn=function(t,r,n){u(t,r,n,e.dragOptions,o)},c.init(e.dragOptions)):(r.dragPan.enable(),r.off("zoomstart",e.clearSelect),e.div.onmousedown=null,e.onClickInPanHandler=e.onClickInPanFn(e.dragOptions),r.on("click",e.onClickInPanHandler))}function l(t){var r=e.map.unproject(t);return[r.lng,r.lat]}},g.updateFramework=function(t){var e=t[this.id].domain,r=t._size,n=this.div.style;n.width=r.w*(e.x[1]-e.x[0])+"px",n.height=r.h*(e.y[1]-e.y[0])+"px",n.left=r.l+e.x[0]*r.w+"px",n.top=r.t+(1-e.y[1])*r.h+"px",this.xaxis._offset=r.l+e.x[0]*r.w,this.xaxis._length=r.w*(e.x[1]-e.x[0]),this.yaxis._offset=r.t+(1-e.y[1])*r.h,this.yaxis._length=r.h*(e.y[1]-e.y[0])},g.updateLayers=function(t){var e,r=t[this.id].layers,n=this.layerList;if(r.length!==n.length){for(e=0;e<n.length;e++)n[e].dispose();for(n=this.layerList=[],e=0;e<r.length;e++)n.push(p(this,e,r[e]))}else for(e=0;e<r.length;e++)n[e].update(r[e])},g.destroy=function(){this.map&&(this.map.remove(),this.map=null,this.container.removeChild(this.div))},g.toImage=function(){return this.map.stop(),this.map.getCanvas().toDataURL()},g.setOptions=function(t,e,r){for(var n in r)this.map[e](t,n,r[n])},g.getMapLayers=function(){return this.map.getStyle().layers},g.addLayer=function(t,e){var r=this.map;if("string"==typeof e){if(""===e)return void r.addLayer(t,e);for(var n=this.getMapLayers(),a=0;a<n.length;a++)if(e===n[a].id)return void r.addLayer(t,e);i.warn(["Trying to add layer with *below* value",e,"referencing a layer that does not exist","or that does not yet exist."].join(" "))}r.addLayer(t)},g.project=function(t){return this.map.project(new n.LngLat(t[0],t[1]))},g.getView=function(){var t=this.map,e=t.getCenter(),r={lon:e.lng,lat:e.lat},n=t.getCanvas(),a=n.width,i=n.height;return{center:r,zoom:t.getZoom(),bearing:t.getBearing(),pitch:t.getPitch(),_derived:{coordinates:[t.unproject([0,0]).toArray(),t.unproject([a,0]).toArray(),t.unproject([a,i]).toArray(),t.unproject([0,i]).toArray()]}}},g.getViewEdits=function(t){for(var e=this.id,r=["center","zoom","bearing","pitch"],n={},a=0;a<r.length;a++){var i=r[a];n[e+"."+i]=t[i]}return n},g.getViewEditsWithDerived=function(t){var e=this.id,r=this.getViewEdits(t);return r[e+"._derived"]=t._derived,r},e.exports=d},{"../../components/dragelement":609,"../../components/fx":630,"../../lib":717,"../../lib/geo_location_utils":711,"../../registry":846,"../cartesian/axes":765,"../cartesian/select":782,"./constants":818,"./layers":821,"mapbox-gl":427}],825:[function(t,e,r){"use strict";e.exports=function(t){var e=t.editType;return{t:{valType:"number",dflt:0,editType:e},r:{valType:"number",dflt:0,editType:e},b:{valType:"number",dflt:0,editType:e},l:{valType:"number",dflt:0,editType:e},editType:e}}},{}],826:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../registry"),o=t("../plot_api/plot_schema"),s=t("../plot_api/plot_template"),l=t("../lib"),c=t("../components/color"),u=t("../constants/numerical").BADNUM,h=t("./cartesian/axis_ids"),f=t("./animation_attributes"),p=t("./frame_attributes"),d=t("../plots/get_data").getModuleCalcData,g=l.relinkPrivateKeys,v=l._,m=e.exports={};l.extendFlat(m,i),m.attributes=t("./attributes"),m.attributes.type.values=m.allTypes,m.fontAttrs=t("./font_attributes"),m.layoutAttributes=t("./layout_attributes"),m.fontWeight="normal";var y=m.transformsRegistry,x=t("./command");m.executeAPICommand=x.executeAPICommand,m.computeAPICommandBindings=x.computeAPICommandBindings,m.manageCommandObserver=x.manageCommandObserver,m.hasSimpleAPICommandBindings=x.hasSimpleAPICommandBindings,m.redrawText=function(t){var e=(t=l.getGraphDiv(t))._fullLayout||{};if(!(!(e._has&&e._has("polar"))&&t.data&&t.data[0]&&t.data[0].r))return new Promise(function(e){setTimeout(function(){i.getComponentMethod("annotations","draw")(t),i.getComponentMethod("legend","draw")(t),i.getComponentMethod("colorbar","draw")(t),e(m.previousPromises(t))},300)})},m.resize=function(t){var e;t=l.getGraphDiv(t);var r=new Promise(function(r,n){t&&!l.isHidden(t)||n(new Error("Resize must be passed a displayed plot div element.")),t._redrawTimer&&clearTimeout(t._redrawTimer),t._resolveResize&&(e=t._resolveResize),t._resolveResize=r,t._redrawTimer=setTimeout(function(){if(!t.layout||t.layout.width&&t.layout.height||l.isHidden(t))r(t);else{delete t.layout.width,delete t.layout.height;var e=t.changed;t.autoplay=!0,i.call("relayout",t,{autosize:!0}).then(function(){t.changed=e,t._resolveResize===r&&(delete t._resolveResize,r(t))})}},100)});return e&&e(r),r},m.previousPromises=function(t){if((t._promises||[]).length)return Promise.all(t._promises).then(function(){t._promises=[]})},m.addLinks=function(t){if(t._context.showLink||t._context.showSources){var e=t._fullLayout,r=l.ensureSingle(e._paper,"text","js-plot-link-container",function(t){t.style({"font-family":'"Open Sans", Arial, sans-serif',"font-size":"12px",fill:c.defaultLine,"pointer-events":"all"}).each(function(){var t=n.select(this);t.append("tspan").classed("js-link-to-tool",!0),t.append("tspan").classed("js-link-spacer",!0),t.append("tspan").classed("js-sourcelinks",!0)})}),a=r.node(),i={y:e._paper.attr("height")-9};document.body.contains(a)&&a.getComputedTextLength()>=e.width-20?(i["text-anchor"]="start",i.x=5):(i["text-anchor"]="end",i.x=e._paper.attr("width")-7),r.attr(i);var o=r.select(".js-link-to-tool"),s=r.select(".js-link-spacer"),u=r.select(".js-sourcelinks");t._context.showSources&&t._context.showSources(t),t._context.showLink&&function(t,e){e.text("");var r=e.append("a").attr({"xlink:xlink:href":"#",class:"link--impt link--embedview","font-weight":"bold"}).text(t._context.linkText+" "+String.fromCharCode(187));if(t._context.sendData)r.on("click",function(){m.sendDataToCloud(t)});else{var n=window.location.pathname.split("/"),a=window.location.search;r.attr({"xlink:xlink:show":"new","xlink:xlink:href":"/"+n[2].split(".")[0]+"/"+n[1]+a})}}(t,o),s.text(o.text()&&u.text()?" - ":"")}},m.sendDataToCloud=function(t){var e=(window.PLOTLYENV||{}).BASE_URL||t._context.plotlyServerURL;if(e){t.emit("plotly_beforeexport");var r=n.select(t).append("div").attr("id","hiddenform").style("display","none"),a=r.append("form").attr({action:e+"/external",method:"post",target:"_blank"});return a.append("input").attr({type:"text",name:"data"}).node().value=m.graphJson(t,!1,"keepdata"),a.node().submit(),r.remove(),t.emit("plotly_afterexport"),!1}};var b=["days","shortDays","months","shortMonths","periods","dateTime","date","time","decimal","thousands","grouping","currency"],_=["year","month","dayMonth","dayMonthYear"];function w(t,e){var r=t._context.locale,n=!1,a={};function o(t){for(var r=!0,i=0;i<e.length;i++){var o=e[i];a[o]||(t[o]?a[o]=t[o]:r=!1)}r&&(n=!0)}for(var s=0;s<2;s++){for(var l=t._context.locales,c=0;c<2;c++){var u=(l[r]||{}).format;if(u&&(o(u),n))break;l=i.localeRegistry}var h=r.split("-")[0];if(n||h===r)break;r=h}return n||o(i.localeRegistry.en.format),a}function k(t,e){var r={_fullLayout:e},n="x"===t._id.charAt(0),a=t._mainAxis._anchorAxis,i="",o="",s="";if(a&&(s=a._mainAxis._id,i=n?t._id+s:s+t._id),!i||!e._plots[i]){i="";for(var l=t._counterAxes,c=0;c<l.length;c++){var u=l[c],f=n?t._id+u:u+t._id;o||(o=f);var p=h.getFromId(r,u);if(s&&p.overlaying===s){i=f;break}}}return i||o}function T(t){var e=t.transforms;if(Array.isArray(e)&&e.length)for(var r=0;r<e.length;r++){var n=e[r],a=n._module||y[n.type];if(a&&a.makesData)return!0}return!1}function M(t,e,r,n){for(var a=t.transforms,i=[t],o=0;o<a.length;o++){var s=a[o],l=y[s.type];l&&l.transform&&(i=l.transform(i,{transform:s,fullTrace:t,fullData:e,layout:r,fullLayout:n,transformIndex:o}))}return i}function A(t){var e=t.margin;if(!t._size){var r=t._size={l:Math.round(e.l),r:Math.round(e.r),t:Math.round(e.t),b:Math.round(e.b),p:Math.round(e.pad)};r.w=Math.round(t.width)-r.l-r.r,r.h=Math.round(t.height)-r.t-r.b}t._pushmargin||(t._pushmargin={}),t._pushmarginIds||(t._pushmarginIds={})}m.supplyDefaults=function(t,e){var r=e&&e.skipUpdateCalc,a=t._fullLayout||{};if(a._skipDefaults)delete a._skipDefaults;else{var o,s=t._fullLayout={},c=t.layout||{},u=t._fullData||[],h=t._fullData=[],f=t.data||[],p=t.calcdata||[],d=t._context||{};t._transitionData||m.createTransitionData(t),s._dfltTitle={plot:v(t,"Click to enter Plot title"),x:v(t,"Click to enter X axis title"),y:v(t,"Click to enter Y axis title"),colorbar:v(t,"Click to enter Colorscale title"),annotation:v(t,"new text")},s._traceWord=v(t,"trace");var y=w(t,b);if(s._mapboxAccessToken=d.mapboxAccessToken,a._initialAutoSizeIsDone){var x=a.width,k=a.height;m.supplyLayoutGlobalDefaults(c,s,y),c.width||(s.width=x),c.height||(s.height=k),m.sanitizeMargins(s)}else{m.supplyLayoutGlobalDefaults(c,s,y);var T=!c.width||!c.height,M=s.autosize,S=d.autosizable;T&&(M||S)?m.plotAutoSize(t,c,s):T&&m.sanitizeMargins(s),!M&&T&&(c.width=s.width,c.height=s.height)}s._d3locale=function(t,e){return t.decimal=e.charAt(0),t.thousands=e.charAt(1),n.locale(t)}(y,s.separators),s._extraFormat=w(t,_),s._initialAutoSizeIsDone=!0,s._dataLength=f.length,s._modules=[],s._visibleModules=[],s._basePlotModules=[];var E=s._subplots=function(){var t,e,r=i.collectableSubplotTypes,n={};if(!r){r=[];var a=i.subplotsRegistry;for(var o in a){var s=a[o],c=s.attr;if(c&&(r.push(o),Array.isArray(c)))for(e=0;e<c.length;e++)l.pushUnique(r,c[e])}}for(t=0;t<r.length;t++)n[r[t]]=[];return n}(),L=s._splomAxes={x:{},y:{}},C=s._splomSubplots={};s._splomGridDflt={},s._scatterStackOpts={},s._firstScatter={},s._alignmentOpts={},s._colorAxes={},s._requestRangeslider={},s._traceUids=function(t,e){var r,n,a=e.length,i=[];for(r=0;r<t.length;r++){var o=t[r]._fullInput;o!==n&&i.push(o),n=o}var s=i.length,c=new Array(a),u={};function h(t,e){c[e]=t,u[t]=1}function f(t,e){if(t&&"string"==typeof t&&!u[t])return h(t,e),!0}for(r=0;r<a;r++){var p=e[r].uid;"number"==typeof p&&(p=String(p)),f(p,r)||(r<s&&f(i[r].uid,r)||h(l.randstr(u),r))}return c}(u,f),s._globalTransforms=(t._context||{}).globalTransforms,m.supplyDataDefaults(f,h,c,s);var P=Object.keys(L.x),O=Object.keys(L.y);if(P.length>1&&O.length>1){for(i.getComponentMethod("grid","sizeDefaults")(c,s),o=0;o<P.length;o++)l.pushUnique(E.xaxis,P[o]);for(o=0;o<O.length;o++)l.pushUnique(E.yaxis,O[o]);for(var z in C)l.pushUnique(E.cartesian,z)}if(s._has=m._hasPlotType.bind(s),u.length===h.length)for(o=0;o<h.length;o++)g(h[o],u[o]);m.supplyLayoutModuleDefaults(c,s,h,t._transitionData);var I=s._visibleModules,D=[];for(o=0;o<I.length;o++){var R=I[o].crossTraceDefaults;R&&l.pushUnique(D,R)}for(o=0;o<D.length;o++)D[o](h,s);s._hasOnlyLargeSploms=1===s._basePlotModules.length&&"splom"===s._basePlotModules[0].name&&P.length>15&&O.length>15&&0===s.shapes.length&&0===s.images.length,s._hasCartesian=s._has("cartesian"),s._hasGeo=s._has("geo"),s._hasGL3D=s._has("gl3d"),s._hasGL2D=s._has("gl2d"),s._hasTernary=s._has("ternary"),s._hasPie=s._has("pie"),m.linkSubplots(h,s,u,a),m.cleanPlot(h,s,u,a),a._zoomlayer&&!t._dragging&&a._zoomlayer.selectAll(".select-outline").remove(),function(t,e){var r,n=[];e.meta&&(r=e._meta={meta:e.meta,layout:{meta:e.meta}});for(var a=0;a<t.length;a++){var i=t[a];i.meta?n[i.index]=i._meta={meta:i.meta}:e.meta&&(i._meta={meta:e.meta}),e.meta&&(i._meta.layout={meta:e.meta})}n.length&&(r||(r=e._meta={}),r.data=n)}(h,s),g(s,a),i.getComponentMethod("colorscale","crossTraceDefaults")(h,s),s._preGUI||(s._preGUI={}),s._tracePreGUI||(s._tracePreGUI={});var F,B=s._tracePreGUI,N={};for(F in B)N[F]="old";for(o=0;o<h.length;o++)N[F=h[o]._fullInput.uid]||(B[F]={}),N[F]="new";for(F in N)"old"===N[F]&&delete B[F];A(s),i.getComponentMethod("rangeslider","makeData")(s),r||p.length!==h.length||m.supplyDefaultsUpdateCalc(p,h)}},m.supplyDefaultsUpdateCalc=function(t,e){for(var r=0;r<e.length;r++){var n=e[r],a=(t[r]||[])[0];if(a&&a.trace){var i=a.trace;if(i._hasCalcTransform){var o,s,c,u=i._arrayAttrs;for(o=0;o<u.length;o++)s=u[o],c=l.nestedProperty(i,s).get().slice(),l.nestedProperty(n,s).set(c)}a.trace=n}}},m.createTransitionData=function(t){t._transitionData||(t._transitionData={}),t._transitionData._frames||(t._transitionData._frames=[]),t._transitionData._frameHash||(t._transitionData._frameHash={}),t._transitionData._counter||(t._transitionData._counter=0),t._transitionData._interruptCallbacks||(t._transitionData._interruptCallbacks=[])},m._hasPlotType=function(t){var e,r=this._basePlotModules||[];for(e=0;e<r.length;e++)if(r[e].name===t)return!0;var n=this._modules||[];for(e=0;e<n.length;e++){var a=n[e].name;if(a===t)return!0;var o=i.modules[a];if(o&&o.categories[t])return!0}return!1},m.cleanPlot=function(t,e,r,n){var a,i,o=n._basePlotModules||[];for(a=0;a<o.length;a++){var s=o[a];s.clean&&s.clean(t,e,r,n)}var l=n._has&&n._has("gl"),c=e._has&&e._has("gl");l&&!c&&void 0!==n._glcontainer&&(n._glcontainer.selectAll(".gl-canvas").remove(),n._glcontainer.selectAll(".no-webgl").remove(),n._glcanvas=null);var u=!!n._infolayer;t:for(a=0;a<r.length;a++){var h=r[a].uid;for(i=0;i<t.length;i++){if(h===t[i].uid)continue t}u&&n._infolayer.select(".cb"+h).remove()}},m.linkSubplots=function(t,e,r,n){var a,o,s=n._plots||{},c=e._plots={},u=e._subplots,f={_fullData:t,_fullLayout:e},p=u.cartesian.concat(u.gl2d||[]);for(a=0;a<p.length;a++){var d,g=p[a],v=s[g],m=h.getFromId(f,g,"x"),y=h.getFromId(f,g,"y");for(v?d=c[g]=v:(d=c[g]={}).id=g,m._counterAxes.push(y._id),y._counterAxes.push(m._id),m._subplotsWith.push(g),y._subplotsWith.push(g),d.xaxis=m,d.yaxis=y,d._hasClipOnAxisFalse=!1,o=0;o<t.length;o++){var x=t[o];if(x.xaxis===d.xaxis._id&&x.yaxis===d.yaxis._id&&!1===x.cliponaxis){d._hasClipOnAxisFalse=!0;break}}}var b,_=h.list(f,null,!0);for(a=0;a<_.length;a++){var w=null;(b=_[a]).overlaying&&(w=h.getFromId(f,b.overlaying))&&w.overlaying&&(b.overlaying=!1,w=null),b._mainAxis=w||b,w&&(b.domain=w.domain.slice()),b._anchorAxis="free"===b.anchor?null:h.getFromId(f,b.anchor)}for(a=0;a<_.length;a++)if((b=_[a])._counterAxes.sort(h.idSort),b._subplotsWith.sort(l.subplotSort),b._mainSubplot=k(b,e),b._counterAxes.length&&(b.spikemode&&-1!==b.spikemode.indexOf("across")||b.automargin&&b.mirror&&"free"!==b.anchor||i.getComponentMethod("rangeslider","isVisible")(b))){var T=1,M=0;for(o=0;o<b._counterAxes.length;o++){var A=h.getFromId(f,b._counterAxes[o]);T=Math.min(T,A.domain[0]),M=Math.max(M,A.domain[1])}T<M&&(b._counterDomainMin=T,b._counterDomainMax=M)}},m.clearExpandedTraceDefaultColors=function(t){var e,r,n;for(r=[],(e=t._module._colorAttrs)||(t._module._colorAttrs=e=[],o.crawl(t._module.attributes,function(t,n,a,i){r[i]=n,r.length=i+1,"color"===t.valType&&void 0===t.dflt&&e.push(r.join("."))})),n=0;n<e.length;n++){l.nestedProperty(t,"_input."+e[n]).get()||l.nestedProperty(t,e[n]).set(null)}},m.supplyDataDefaults=function(t,e,r,n){var a,o,c,u=n._modules,h=n._visibleModules,f=n._basePlotModules,p=0,d=0;function v(t){e.push(t);var r=t._module;r&&(l.pushUnique(u,r),!0===t.visible&&l.pushUnique(h,r),l.pushUnique(f,t._module.basePlotModule),p++,!1!==t._input.visible&&d++)}n._transformModules=[];var y={},x=[],b=(r.template||{}).data||{},_=s.traceTemplater(b);for(a=0;a<t.length;a++){if(c=t[a],(o=_.newTrace(c)).uid=n._traceUids[a],m.supplyTraceDefaults(c,o,d,n,a),o.index=a,o._input=c,o._expandedIndex=p,o.transforms&&o.transforms.length)for(var w=!1!==c.visible&&!1===o.visible,k=M(o,e,r,n),T=0;T<k.length;T++){var A=k[T],S={_template:o._template,type:o.type,uid:o.uid+T};w&&!1===A.visible&&delete A.visible,m.supplyTraceDefaults(A,S,p,n,a),g(S,A),S.index=a,S._input=c,S._fullInput=o,S._expandedIndex=p,S._expandedInput=A,v(S)}else o._fullInput=o,o._expandedInput=o,v(o);i.traceIs(o,"carpetAxis")&&(y[o.carpet]=o),i.traceIs(o,"carpetDependent")&&x.push(a)}for(a=0;a<x.length;a++)if((o=e[x[a]]).visible){var E=y[o.carpet];o._carpet=E,E&&E.visible?(o.xaxis=E.xaxis,o.yaxis=E.yaxis):o.visible=!1}},m.supplyAnimationDefaults=function(t){var e;t=t||{};var r={};function n(e,n){return l.coerce(t||{},r,f,e,n)}if(n("mode"),n("direction"),n("fromcurrent"),Array.isArray(t.frame))for(r.frame=[],e=0;e<t.frame.length;e++)r.frame[e]=m.supplyAnimationFrameDefaults(t.frame[e]||{});else r.frame=m.supplyAnimationFrameDefaults(t.frame||{});if(Array.isArray(t.transition))for(r.transition=[],e=0;e<t.transition.length;e++)r.transition[e]=m.supplyAnimationTransitionDefaults(t.transition[e]||{});else r.transition=m.supplyAnimationTransitionDefaults(t.transition||{});return r},m.supplyAnimationFrameDefaults=function(t){var e={};function r(r,n){return l.coerce(t||{},e,f.frame,r,n)}return r("duration"),r("redraw"),e},m.supplyAnimationTransitionDefaults=function(t){var e={};function r(r,n){return l.coerce(t||{},e,f.transition,r,n)}return r("duration"),r("easing"),e},m.supplyFrameDefaults=function(t){var e={};function r(r,n){return l.coerce(t,e,p,r,n)}return r("group"),r("name"),r("traces"),r("baseframe"),r("data"),r("layout"),e},m.supplyTraceDefaults=function(t,e,r,n,a){var o,s=n.colorway||c.defaults,u=s[r%s.length];function h(r,n){return l.coerce(t,e,m.attributes,r,n)}var f=h("visible");h("type"),h("name",n._traceWord+" "+a),h("uirevision",n.uirevision);var p=m.getModule(e);if(e._module=p,p){var d=p.basePlotModule,g=d.attr,v=d.attributes;if(g&&v){var y=n._subplots,x="";if(f||"gl2d"!==d.name){if(Array.isArray(g))for(o=0;o<g.length;o++){var b=g[o],_=l.coerce(t,e,v,b);y[b]&&l.pushUnique(y[b],_),x+=_}else x=l.coerce(t,e,v,g);y[d.name]&&l.pushUnique(y[d.name],x)}}}return f&&(h("customdata"),h("ids"),h("meta"),i.traceIs(e,"showLegend")?(l.coerce(t,e,p.attributes.showlegend?p.attributes:m.attributes,"showlegend"),h("legendgroup"),e._dfltShowLegend=!0):e._dfltShowLegend=!1,p&&p.supplyDefaults(t,e,u,n),i.traceIs(e,"noOpacity")||h("opacity"),i.traceIs(e,"notLegendIsolatable")&&(e.visible=!!e.visible),i.traceIs(e,"noHover")||(e.hovertemplate||l.coerceHoverinfo(t,e,n),"parcats"!==e.type&&i.getComponentMethod("fx","supplyDefaults")(t,e,u,n)),p&&p.selectPoints&&h("selectedpoints"),m.supplyTransformDefaults(t,e,n)),e},m.hasMakesDataTransform=T,m.supplyTransformDefaults=function(t,e,r){if(e._length||T(t)){var n=r._globalTransforms||[],a=r._transformModules||[];if(Array.isArray(t.transforms)||0!==n.length)for(var i=t.transforms||[],o=n.concat(i),s=e.transforms=[],c=0;c<o.length;c++){var u,h=o[c],f=h.type,p=y[f],d=!(h._module&&h._module===p),g=p&&"function"==typeof p.transform;p||l.warn("Unrecognized transform type "+f+"."),p&&p.supplyDefaults&&(d||g)?((u=p.supplyDefaults(h,e,r,t)).type=f,u._module=p,l.pushUnique(a,p)):u=l.extendFlat({},h),s.push(u)}}},m.supplyLayoutGlobalDefaults=function(t,e,r){function n(r,n){return l.coerce(t,e,m.layoutAttributes,r,n)}var a=t.template;l.isPlainObject(a)&&(e.template=a,e._template=a.layout,e._dataTemplate=a.data);var o=l.coerceFont(n,"font");n("title.text",e._dfltTitle.plot),l.coerceFont(n,"title.font",{family:o.family,size:Math.round(1.4*o.size),color:o.color}),n("title.xref"),n("title.yref"),n("title.x"),n("title.y"),n("title.xanchor"),n("title.yanchor"),n("title.pad.t"),n("title.pad.r"),n("title.pad.b"),n("title.pad.l"),n("uniformtext.mode")&&n("uniformtext.minsize"),n("autosize",!(t.width&&t.height)),n("width"),n("height"),n("margin.l"),n("margin.r"),n("margin.t"),n("margin.b"),n("margin.pad"),n("margin.autoexpand"),t.width&&t.height&&m.sanitizeMargins(e),i.getComponentMethod("grid","sizeDefaults")(t,e),n("paper_bgcolor"),n("separators",r.decimal+r.thousands),n("hidesources"),n("colorway"),n("datarevision");var s=n("uirevision");n("editrevision",s),n("selectionrevision",s),n("modebar.orientation"),n("modebar.bgcolor",c.addOpacity(e.paper_bgcolor,.5));var u=c.contrast(c.rgb(e.modebar.bgcolor));n("modebar.color",c.addOpacity(u,.3)),n("modebar.activecolor",c.addOpacity(u,.7)),n("modebar.uirevision",s),n("meta"),l.isPlainObject(t.transition)&&(n("transition.duration"),n("transition.easing"),n("transition.ordering")),i.getComponentMethod("calendars","handleDefaults")(t,e,"calendar"),i.getComponentMethod("fx","supplyLayoutGlobalDefaults")(t,e,n)},m.plotAutoSize=function(t,e,r){var n,i,o=t._context||{},s=o.frameMargins,c=l.isPlotDiv(t);if(c&&t.emit("plotly_autosize"),o.fillFrame)n=window.innerWidth,i=window.innerHeight,document.body.style.overflow="hidden";else{var u=c?window.getComputedStyle(t):{};if(n=parseFloat(u.width)||parseFloat(u.maxWidth)||r.width,i=parseFloat(u.height)||parseFloat(u.maxHeight)||r.height,a(s)&&s>0){var h=1-2*s;n=Math.round(h*n),i=Math.round(h*i)}}var f=m.layoutAttributes.width.min,p=m.layoutAttributes.height.min;n<f&&(n=f),i<p&&(i=p);var d=!e.width&&Math.abs(r.width-n)>1,g=!e.height&&Math.abs(r.height-i)>1;(g||d)&&(d&&(r.width=n),g&&(r.height=i)),t._initialAutoSize||(t._initialAutoSize={width:n,height:i}),m.sanitizeMargins(r)},m.supplyLayoutModuleDefaults=function(t,e,r,n){var a,o,s,c=i.componentsRegistry,u=e._basePlotModules,h=i.subplotsRegistry.cartesian;for(a in c)(s=c[a]).includeBasePlot&&s.includeBasePlot(t,e);for(var f in u.length||u.push(h),e._has("cartesian")&&(i.getComponentMethod("grid","contentDefaults")(t,e),h.finalizeSubplots(t,e)),e._subplots)e._subplots[f].sort(l.subplotSort);for(o=0;o<u.length;o++)(s=u[o]).supplyLayoutDefaults&&s.supplyLayoutDefaults(t,e,r);var p=e._modules;for(o=0;o<p.length;o++)(s=p[o]).supplyLayoutDefaults&&s.supplyLayoutDefaults(t,e,r);var d=e._transformModules;for(o=0;o<d.length;o++)(s=d[o]).supplyLayoutDefaults&&s.supplyLayoutDefaults(t,e,r,n);for(a in c)(s=c[a]).supplyLayoutDefaults&&s.supplyLayoutDefaults(t,e,r)},m.purge=function(t){var e=t._fullLayout||{};void 0!==e._glcontainer&&(e._glcontainer.selectAll(".gl-canvas").remove(),e._glcontainer.remove(),e._glcanvas=null),e._modeBar&&e._modeBar.destroy(),t._transitionData&&(t._transitionData._interruptCallbacks&&(t._transitionData._interruptCallbacks.length=0),t._transitionData._animationRaf&&window.cancelAnimationFrame(t._transitionData._animationRaf)),l.clearThrottle(),l.clearResponsive(t),delete t.data,delete t.layout,delete t._fullData,delete t._fullLayout,delete t.calcdata,delete t.framework,delete t.empty,delete t.fid,delete t.undoqueue,delete t.undonum,delete t.autoplay,delete t.changed,delete t._promises,delete t._redrawTimer,delete t._hmlumcount,delete t._hmpixcount,delete t._transitionData,delete t._transitioning,delete t._initialAutoSize,delete t._transitioningWithDuration,delete t._dragging,delete t._dragged,delete t._dragdata,delete t._hoverdata,delete t._snapshotInProgress,delete t._editing,delete t._mouseDownTime,delete t._legendMouseDownTime,t.removeAllListeners&&t.removeAllListeners()},m.style=function(t){var e,r=t._fullLayout._visibleModules,n=[];for(e=0;e<r.length;e++){var a=r[e];a.style&&l.pushUnique(n,a.style)}for(e=0;e<n.length;e++)n[e](t)},m.sanitizeMargins=function(t){if(t&&t.margin){var e,r=t.width,n=t.height,a=t.margin,i=r-(a.l+a.r),o=n-(a.t+a.b);i<0&&(e=(r-1)/(a.l+a.r),a.l=Math.floor(e*a.l),a.r=Math.floor(e*a.r)),o<0&&(e=(n-1)/(a.t+a.b),a.t=Math.floor(e*a.t),a.b=Math.floor(e*a.b))}},m.clearAutoMarginIds=function(t){t._fullLayout._pushmarginIds={}},m.allowAutoMargin=function(t,e){t._fullLayout._pushmarginIds[e]=1},m.autoMargin=function(t,e,r){var n=t._fullLayout,a=n._pushmargin,i=n._pushmarginIds;if(!1!==n.margin.autoexpand){if(r){var o=r.pad;if(void 0===o){var s=n.margin;o=Math.min(12,s.l,s.r,s.t,s.b)}r.l+r.r>.5*n.width&&(l.log("Margin push",e,"is too big in x, dropping"),r.l=r.r=0),r.b+r.t>.5*n.height&&(l.log("Margin push",e,"is too big in y, dropping"),r.b=r.t=0);var c=void 0!==r.xl?r.xl:r.x,u=void 0!==r.xr?r.xr:r.x,h=void 0!==r.yt?r.yt:r.y,f=void 0!==r.yb?r.yb:r.y;a[e]={l:{val:c,size:r.l+o},r:{val:u,size:r.r+o},b:{val:f,size:r.b+o},t:{val:h,size:r.t+o}},i[e]=1}else delete a[e],delete i[e];if(!n._replotting)return m.doAutoMargin(t)}},m.doAutoMargin=function(t){var e=t._fullLayout;e._size||(e._size={}),A(e);var r=e._size,n=e.margin,o=l.extendFlat({},r),s=n.l,c=n.r,u=n.t,h=n.b,f=e.width,p=e.height,d=e._pushmargin,g=e._pushmarginIds;if(!1!==e.margin.autoexpand){for(var v in d)g[v]||delete d[v];for(var y in d.base={l:{val:0,size:s},r:{val:1,size:c},t:{val:1,size:u},b:{val:0,size:h}},d){var x=d[y].l||{},b=d[y].b||{},_=x.val,w=x.size,k=b.val,T=b.size;for(var M in d){if(a(w)&&d[M].r){var S=d[M].r.val,E=d[M].r.size;if(S>_){var L=(w*S+(E-f)*_)/(S-_),C=(E*(1-_)+(w-f)*(1-S))/(S-_);L>=0&&C>=0&&f-(L+C)>0&&L+C>s+c&&(s=L,c=C)}}if(a(T)&&d[M].t){var P=d[M].t.val,O=d[M].t.size;if(P>k){var z=(T*P+(O-p)*k)/(P-k),I=(O*(1-k)+(T-p)*(1-P))/(P-k);z>=0&&I>=0&&p-(I+z)>0&&z+I>h+u&&(h=z,u=I)}}}}}if(r.l=Math.round(s),r.r=Math.round(c),r.t=Math.round(u),r.b=Math.round(h),r.p=Math.round(n.pad),r.w=Math.round(f)-r.l-r.r,r.h=Math.round(p)-r.t-r.b,!e._replotting&&m.didMarginChange(o,r)){"_redrawFromAutoMarginCount"in e?e._redrawFromAutoMarginCount++:e._redrawFromAutoMarginCount=1;var D=3*(1+Object.keys(g).length);if(e._redrawFromAutoMarginCount<D)return i.call("plot",t);l.warn("Too many auto-margin redraws.")}};var S=["l","r","t","b","p","w","h"];function E(t,e,r){var n=!1;var a=[m.previousPromises,function(){if(t._transitionData)return t._transitioning=!1,function(t){var e=Promise.resolve();if(!t)return e;for(;t.length;)e=e.then(t.shift());return e}(t._transitionData._interruptCallbacks)},r.prepareFn,m.rehover,function(){return t.emit("plotly_transitioning",[]),new Promise(function(a){t._transitioning=!0,e.duration>0&&(t._transitioningWithDuration=!0),t._transitionData._interruptCallbacks.push(function(){n=!0}),r.redraw&&t._transitionData._interruptCallbacks.push(function(){return i.call("redraw",t)}),t._transitionData._interruptCallbacks.push(function(){t.emit("plotly_transitioninterrupted",[])});var o=0,s=0;function l(){return o++,function(){var e;s++,n||s!==o||(e=a,t._transitionData&&(function(t){if(t)for(;t.length;)t.shift()}(t._transitionData._interruptCallbacks),Promise.resolve().then(function(){if(r.redraw)return i.call("redraw",t)}).then(function(){t._transitioning=!1,t._transitioningWithDuration=!1,t.emit("plotly_transitioned",[])}).then(e)))}}r.runFn(l),setTimeout(l())})}],o=l.syncOrAsync(a,t);return o&&o.then||(o=Promise.resolve()),o.then(function(){return t})}m.didMarginChange=function(t,e){for(var r=0;r<S.length;r++){var n=S[r],i=t[n],o=e[n];if(!a(i)||Math.abs(o-i)>1)return!0}return!1},m.graphJson=function(t,e,r,n,a,i){(a&&e&&!t._fullData||a&&!e&&!t._fullLayout)&&m.supplyDefaults(t);var o=a?t._fullData:t.data,s=a?t._fullLayout:t.layout,c=(t._transitionData||{})._frames;function u(t,e){if("function"==typeof t)return e?"_function_":null;if(l.isPlainObject(t)){var n,a={};return Object.keys(t).sort().forEach(function(i){if(-1===["_","["].indexOf(i.charAt(0)))if("function"!=typeof t[i]){if("keepdata"===r){if("src"===i.substr(i.length-3))return}else if("keepstream"===r){if("string"==typeof(n=t[i+"src"])&&n.indexOf(":")>0&&!l.isPlainObject(t.stream))return}else if("keepall"!==r&&"string"==typeof(n=t[i+"src"])&&n.indexOf(":")>0)return;a[i]=u(t[i],e)}else e&&(a[i]="_function")}),a}return Array.isArray(t)?t.map(function(t){return u(t,e)}):l.isTypedArray(t)?l.simpleMap(t,l.identity):l.isJSDate(t)?l.ms2DateTimeLocal(+t):t}var h={data:(o||[]).map(function(t){var r=u(t);return e&&delete r.fit,r})};return e||(h.layout=u(s)),t.framework&&t.framework.isPolar&&(h=t.framework.getConfig()),c&&(h.frames=u(c)),i&&(h.config=u(t._context,!0)),"object"===n?h:JSON.stringify(h)},m.modifyFrames=function(t,e){var r,n,a,i=t._transitionData._frames,o=t._transitionData._frameHash;for(r=0;r<e.length;r++)switch((n=e[r]).type){case"replace":a=n.value;var s=(i[n.index]||{}).name,l=a.name;i[n.index]=o[l]=a,l!==s&&(delete o[s],o[l]=a);break;case"insert":o[(a=n.value).name]=a,i.splice(n.index,0,a);break;case"delete":delete o[(a=i[n.index]).name],i.splice(n.index,1)}return Promise.resolve()},m.computeFrame=function(t,e){var r,n,a,i,o=t._transitionData._frameHash;if(!e)throw new Error("computeFrame must be given a string frame name");var s=o[e.toString()];if(!s)return!1;for(var l=[s],c=[s.name];s.baseframe&&(s=o[s.baseframe.toString()])&&-1===c.indexOf(s.name);)l.push(s),c.push(s.name);for(var u={};s=l.pop();)if(s.layout&&(u.layout=m.extendLayout(u.layout,s.layout)),s.data){if(u.data||(u.data=[]),!(n=s.traces))for(n=[],r=0;r<s.data.length;r++)n[r]=r;for(u.traces||(u.traces=[]),r=0;r<s.data.length;r++)null!=(a=n[r])&&(-1===(i=u.traces.indexOf(a))&&(i=u.data.length,u.traces[i]=a),u.data[i]=m.extendTrace(u.data[i],s.data[r]))}return u},m.recomputeFrameHash=function(t){for(var e=t._transitionData._frameHash={},r=t._transitionData._frames,n=0;n<r.length;n++){var a=r[n];a&&a.name&&(e[a.name]=a)}},m.extendObjectWithContainers=function(t,e,r){var n,a,i,o,s,c,u,h=l.extendDeepNoArrays({},e||{}),f=l.expandObjectPaths(h),p={};if(r&&r.length)for(i=0;i<r.length;i++)void 0===(a=(n=l.nestedProperty(f,r[i])).get())?l.nestedProperty(p,r[i]).set(null):(n.set(null),l.nestedProperty(p,r[i]).set(a));if(t=l.extendDeepNoArrays(t||{},f),r&&r.length)for(i=0;i<r.length;i++)if(c=l.nestedProperty(p,r[i]).get()){for(u=(s=l.nestedProperty(t,r[i])).get(),Array.isArray(u)||(u=[],s.set(u)),o=0;o<c.length;o++){var d=c[o];u[o]=null===d?null:m.extendObjectWithContainers(u[o],d)}s.set(u)}return t},m.dataArrayContainers=["transforms","dimensions"],m.layoutArrayContainers=i.layoutArrayContainers,m.extendTrace=function(t,e){return m.extendObjectWithContainers(t,e,m.dataArrayContainers)},m.extendLayout=function(t,e){return m.extendObjectWithContainers(t,e,m.layoutArrayContainers)},m.transition=function(t,e,r,n,a,i){var o={redraw:a.redraw},s={},c=[];return o.prepareFn=function(){for(var a=Array.isArray(e)?e.length:0,i=n.slice(0,a),o=0;o<i.length;o++){var u=i[o],h=t._fullData[u]._module;if(h){if(h.animatable){var f=h.basePlotModule.name;s[f]||(s[f]=[]),s[f].push(u)}t.data[i[o]]=m.extendTrace(t.data[i[o]],e[o])}}var p=l.expandObjectPaths(l.extendDeepNoArrays({},r)),d=/^[xy]axis[0-9]*$/;for(var g in p)d.test(g)&&delete p[g].range;m.extendLayout(t.layout,p),delete t.calcdata,m.supplyDefaults(t),m.doCalcdata(t);var v=l.expandObjectPaths(r);if(v){var y=t._fullLayout._plots;for(var x in y){var b=y[x],_=b.xaxis,w=b.yaxis,k=_.range.slice(),T=w.range.slice(),M=null,A=null,S=null,E=null;Array.isArray(v[_._name+".range"])?M=v[_._name+".range"].slice():Array.isArray((v[_._name]||{}).range)&&(M=v[_._name].range.slice()),Array.isArray(v[w._name+".range"])?A=v[w._name+".range"].slice():Array.isArray((v[w._name]||{}).range)&&(A=v[w._name].range.slice()),k&&M&&(_.r2l(k[0])!==_.r2l(M[0])||_.r2l(k[1])!==_.r2l(M[1]))&&(S={xr0:k,xr1:M}),T&&A&&(w.r2l(T[0])!==w.r2l(A[0])||w.r2l(T[1])!==w.r2l(A[1]))&&(E={yr0:T,yr1:A}),(S||E)&&c.push(l.extendFlat({plotinfo:b},S,E))}}return Promise.resolve()},o.runFn=function(e){var n,a,o=t._fullLayout._basePlotModules,u=c.length;if(r)for(a=0;a<o.length;a++)o[a].transitionAxes&&o[a].transitionAxes(t,c,i,e);for(var h in u?((n=l.extendFlat({},i)).duration=0,delete s.cartesian):n=i,s){var f=s[h];t._fullData[f[0]]._module.basePlotModule.plot(t,f,n,e)}},E(t,i,o)},m.transitionFromReact=function(t,e,r,n){var a=t._fullLayout,i=a.transition,o={},s=[];return o.prepareFn=function(){var t=a._plots;for(var i in o.redraw=!1,"some"===e.anim&&(o.redraw=!0),"some"===r.anim&&(o.redraw=!0),t){var c=t[i],u=c.xaxis,h=c.yaxis,f=n[u._name].range.slice(),p=n[h._name].range.slice(),d=u.range.slice(),g=h.range.slice();u.setScale(),h.setScale();var v=null,m=null;u.r2l(f[0])===u.r2l(d[0])&&u.r2l(f[1])===u.r2l(d[1])||(v={xr0:f,xr1:d}),h.r2l(p[0])===h.r2l(g[0])&&h.r2l(p[1])===h.r2l(g[1])||(m={yr0:p,yr1:g}),(v||m)&&s.push(l.extendFlat({plotinfo:c},v,m))}return Promise.resolve()},o.runFn=function(r){for(var n,a,o,c=t._fullData,u=t._fullLayout._basePlotModules,h=[],f=0;f<c.length;f++)h.push(f);function p(){for(var e=0;e<u.length;e++)u[e].transitionAxes&&u[e].transitionAxes(t,s,n,r)}function d(){for(var e=0;e<u.length;e++)u[e].plot(t,o,a,r)}s.length&&e.anim?"traces first"===i.ordering?(n=l.extendFlat({},i,{duration:0}),o=h,a=i,setTimeout(p,i.duration),d()):(n=i,o=null,a=l.extendFlat({},i,{duration:0}),setTimeout(d,n.duration),p()):s.length?(n=i,p()):e.anim&&(o=h,a=i,d())},E(t,i,o)},m.doCalcdata=function(t,e){var r,n,a,s,c=h.list(t),f=t._fullData,p=t._fullLayout,d=new Array(f.length),g=(t.calcdata||[]).slice();for(t.calcdata=d,p._numBoxes=0,p._numViolins=0,p._violinScaleGroupStats={},t._hmpixcount=0,t._hmlumcount=0,p._piecolormap={},p._sunburstcolormap={},p._treemapcolormap={},p._funnelareacolormap={},a=0;a<f.length;a++)Array.isArray(e)&&-1===e.indexOf(a)&&(d[a]=g[a]);for(a=0;a<f.length;a++)(r=f[a])._arrayAttrs=o.findArrayAttributes(r),r._extremes={};var v=p._subplots.polar||[];for(a=0;a<v.length;a++)c.push(p[v[a]].radialaxis,p[v[a]].angularaxis);for(var m in p._colorAxes){var x=p[m];!1!==x.cauto&&(delete x.cmin,delete x.cmax)}var b=!1;function _(e){if(r=f[e],n=r._module,!0===r.visible&&r.transforms){if(n&&n.calc){var a=n.calc(t,r);a[0]&&a[0].t&&a[0].t._scene&&delete a[0].t._scene.dirty}for(s=0;s<r.transforms.length;s++){var i=r.transforms[s];(n=y[i.type])&&n.calcTransform&&(r._hasCalcTransform=!0,b=!0,n.calcTransform(t,r,i))}}}function w(e,a){if(r=f[e],!!(n=r._module).isContainer===a){var i=[];if(!0===r.visible&&0!==r._length){delete r._indexToPoints;var o=r.transforms||[];for(s=o.length-1;s>=0;s--)if(o[s].enabled){r._indexToPoints=o[s]._indexToPoints;break}n&&n.calc&&(i=n.calc(t,r))}Array.isArray(i)&&i[0]||(i=[{x:u,y:u}]),i[0].t||(i[0].t={}),i[0].trace=r,d[e]=i}}for(C(c,f,p),a=0;a<f.length;a++)w(a,!0);for(a=0;a<f.length;a++)_(a);for(b&&C(c,f,p),a=0;a<f.length;a++)w(a,!0);for(a=0;a<f.length;a++)w(a,!1);P(t);var k=function(t,e){var r,n,a,o,s,c=[];function u(t,r,n){var a=r._id.charAt(0);if("histogram2dcontour"===t){var i=r._counterAxes[0],o=h.getFromId(e,i),s="x"===a||"x"===i&&"category"===o.type,l="y"===a||"y"===i&&"category"===o.type;return function(t,e){return 0===t||0===e?-1:s&&t===n[e].length-1?-1:l&&e===n.length-1?-1:("y"===a?e:t)-1}}return function(t,e){return"y"===a?e:t}}var f={min:function(t){return l.aggNums(Math.min,null,t)},max:function(t){return l.aggNums(Math.max,null,t)},sum:function(t){return l.aggNums(function(t,e){return t+e},null,t)},total:function(t){return l.aggNums(function(t,e){return t+e},null,t)},mean:function(t){return l.mean(t)},median:function(t){return l.median(t)}};for(r=0;r<t.length;r++){var p=t[r];if("category"===p.type){var d=p.categoryorder.match(L);if(d){var g=d[1],v=d[2],m=[];for(n=0;n<p._categories.length;n++)m.push([p._categories[n],[]]);for(n=0;n<p._traceIndices.length;n++){var y=p._traceIndices[n],x=e._fullData[y],b=p._id.charAt(0);if(!0===x.visible){var _=x.type;i.traceIs(x,"histogram")&&(delete x._xautoBinFinished,delete x._yautoBinFinished);var w=e.calcdata[y];for(a=0;a<w.length;a++){var k,T,M,A=w[a];if("splom"===_){var S=x._axesDim[p._id];if("y"===b){var E=x._diag[S][0];E&&(p=e._fullLayout[h.id2name(E)])}var C=A.trace.dimensions[S].values;for(o=0;o<C.length;o++)for(k=C[o],T=p._categoriesMap[k],s=0;s<A.trace.dimensions.length;s++)if(s!==S){var P=A.trace.dimensions[s];m[T][1].push(P.values[o])}}else if("scattergl"===_){for(o=0;o<A.t.x.length;o++)"x"===b&&(k=A.t.x[o],T=k,M=A.t.y[o]),"y"===b&&(k=A.t.y[o],T=k,M=A.t.x[o]),m[T][1].push(M);A.t&&A.t._scene&&delete A.t._scene.dirty}else if(A.hasOwnProperty("z")){M=A.z;var O=u(x.type,p,M);for(o=0;o<M.length;o++)for(s=0;s<M[o].length;s++)(T=O(s,o))+1&&m[T][1].push(M[o][s])}else for("x"===b?(k=A.p+1?A.p:A.x,M=A.s||A.v||A.y):"y"===b&&(k=A.p+1?A.p:A.y,M=A.s||A.v||A.x),Array.isArray(M)||(M=[M]),o=0;o<M.length;o++)m[k][1].push(M[o])}}}p._categoriesValue=m;var z=[];for(n=0;n<m.length;n++)z.push([m[n][0],f[g](m[n][1])]);z.sort(function(t,e){return t[1]-e[1]}),p._categoriesAggregatedValue=z,p._initialCategories=z.map(function(t){return t[0]}),"descending"===v&&p._initialCategories.reverse(),c=c.concat(p.sortByInitialCategories())}}}return c}(c,t);if(k.length){for(p._numBoxes=0,p._numViolins=0,a=0;a<k.length;a++)w(k[a],!0);for(a=0;a<k.length;a++)w(k[a],!1);P(t)}i.getComponentMethod("fx","calc")(t),i.getComponentMethod("errorbars","calc")(t)};var L=/(total|sum|min|max|mean|median) (ascending|descending)/;function C(t,e,r){var n,a,i,o={};for(n=0;n<t.length;n++)i=(a=t[n])._id,a.clearCalc(),"multicategory"===a.type&&a.setupMultiCategory(e),o[a._id]=1;var s=r._axisMatchGroups||[];for(n=0;n<s.length;n++)for(i in s[n])o[i]||(a=r[h.id2name(i)]).clearCalc()}function P(t){var e,r,n,a=t._fullLayout,i=a._visibleModules,o={};for(r=0;r<i.length;r++){var s=i[r],c=s.crossTraceCalc;if(c){var u=s.basePlotModule.name;o[u]?l.pushUnique(o[u],c):o[u]=[c]}}for(n in o){var h=o[n],f=a._subplots[n];if(Array.isArray(f))for(e=0;e<f.length;e++){var p=f[e],d="cartesian"===n?a._plots[p]:a[p];for(r=0;r<h.length;r++)h[r](t,d,p)}else for(r=0;r<h.length;r++)h[r](t)}}m.rehover=function(t){t._fullLayout._rehover&&t._fullLayout._rehover()},m.redrag=function(t){t._fullLayout._redrag&&t._fullLayout._redrag()},m.generalUpdatePerTraceModule=function(t,e,r,n){var a,i=e.traceHash,o={};for(a=0;a<r.length;a++){var s=r[a],c=s[0].trace;c.visible&&(o[c.type]=o[c.type]||[],o[c.type].push(s))}for(var u in i)if(!o[u]){var h=i[u][0];h[0].trace.visible=!1,o[u]=[h]}for(var f in o){var p=o[f];p[0][0].trace._module.plot(t,e,l.filterVisible(p),n)}e.traceHash=o},m.plotBasePlot=function(t,e,r,n,a){var o=i.getModule(t),s=d(e.calcdata,o)[0];o.plot(e,s,n,a)},m.cleanBasePlot=function(t,e,r,n,a){var i=a._has&&a._has(t),o=r._has&&r._has(t);i&&!o&&a["_"+t+"layer"].selectAll("g.trace").remove()}},{"../components/color":591,"../constants/numerical":693,"../lib":717,"../plot_api/plot_schema":754,"../plot_api/plot_template":755,"../plots/get_data":800,"../registry":846,"./animation_attributes":760,"./attributes":762,"./cartesian/axis_ids":768,"./command":789,"./font_attributes":791,"./frame_attributes":792,"./layout_attributes":817,d3:165,"fast-isnumeric":228}],827:[function(t,e,r){"use strict";e.exports={attr:"subplot",name:"polar",axisNames:["angularaxis","radialaxis"],axisName2dataArray:{angularaxis:"theta",radialaxis:"r"},layerNames:["draglayer","plotbg","backplot","angular-grid","radial-grid","frontplot","angular-line","radial-line","angular-axis","radial-axis"],radialDragBoxSize:50,angularDragBoxSize:30,cornerLen:25,cornerHalfWidth:2,MINDRAG:8,MINZOOM:20,OFFEDGE:20}},{}],828:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../lib/polygon").tester,i=n.findIndexOfMin,o=n.isAngleInsideSector,s=n.angleDelta,l=n.angleDist;function c(t,e,r,n){var a,i,o=n[0],s=n[1],l=h(Math.sin(e)-Math.sin(t)),c=h(Math.cos(e)-Math.cos(t)),u=Math.tan(r),f=h(1/u),p=l/c,d=s-p*o;return f?l&&c?i=u*(a=d/(u-p)):c?(a=s*f,i=s):(a=o,i=o*u):l&&c?(a=0,i=d):c?(a=0,i=s):a=i=NaN,[a,i]}function u(t,e,r,a){return n.isFullCircle([e,r])?function(t,e){var r,n=e.length,a=new Array(n+1);for(r=0;r<n;r++){var i=e[r];a[r]=[t*Math.cos(i),t*Math.sin(i)]}return a[r]=a[0].slice(),a}(t,a):function(t,e,r,a){var s,u,h=a.length,f=[];function p(e){return[t*Math.cos(e),t*Math.sin(e)]}function d(t,e,r){return c(t,e,r,p(t))}function g(t){return n.mod(t,h)}function v(t){return o(t,[e,r])}var m=i(a,function(t){return v(t)?l(t,e):1/0}),y=d(a[m],a[g(m-1)],e);for(f.push(y),s=m,u=0;u<h;s++,u++){var x=a[g(s)];if(!v(x))break;f.push(p(x))}var b=i(a,function(t){return v(t)?l(t,r):1/0}),_=d(a[b],a[g(b+1)],r);return f.push(_),f.push([0,0]),f.push(f[0].slice()),f}(t,e,r,a)}function h(t){return Math.abs(t)>1e-10?t:0}function f(t,e,r){e=e||0,r=r||0;for(var n=t.length,a=new Array(n),i=0;i<n;i++){var o=t[i];a[i]=[e+o[0],r-o[1]]}return a}e.exports={isPtInsidePolygon:function(t,e,r,n,i){if(!o(e,n))return!1;var s,l;r[0]<r[1]?(s=r[0],l=r[1]):(s=r[1],l=r[0]);var c=a(u(s,n[0],n[1],i)),h=a(u(l,n[0],n[1],i)),f=[t*Math.cos(e),t*Math.sin(e)];return h.contains(f)&&!c.contains(f)},findPolygonOffset:function(t,e,r,n){for(var a=1/0,i=1/0,o=u(t,e,r,n),s=0;s<o.length;s++){var l=o[s];a=Math.min(a,l[0]),i=Math.min(i,-l[1])}return[a,i]},findEnclosingVertexAngles:function(t,e){var r=i(e,function(e){var r=s(e,t);return r>0?r:1/0}),a=n.mod(r+1,e.length);return[e[r],e[a]]},findIntersectionXY:c,findXYatLength:function(t,e,r,n){var a=-e*r,i=e*e+1,o=2*(e*a-r),s=a*a+r*r-t*t,l=Math.sqrt(o*o-4*i*s),c=(-o+l)/(2*i),u=(-o-l)/(2*i);return[[c,e*c+a+n],[u,e*u+a+n]]},clampTiny:h,pathPolygon:function(t,e,r,n,a,i){return"M"+f(u(t,e,r,n),a,i).join("L")},pathPolygonAnnulus:function(t,e,r,n,a,i,o){var s,l;t<e?(s=t,l=e):(s=e,l=t);var c=f(u(s,r,n,a),i,o);return"M"+f(u(l,r,n,a),i,o).reverse().join("L")+"M"+c.join("L")}}},{"../../lib":717,"../../lib/polygon":729}],829:[function(t,e,r){"use strict";var n=t("../get_data").getSubplotCalcData,a=t("../../lib").counterRegex,i=t("./polar"),o=t("./constants"),s=o.attr,l=o.name,c=a(l),u={};u[s]={valType:"subplotid",dflt:l,editType:"calc"},e.exports={attr:s,name:l,idRoot:l,idRegex:c,attrRegex:c,attributes:u,layoutAttributes:t("./layout_attributes"),supplyLayoutDefaults:t("./layout_defaults"),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,a=e._subplots[l],o=0;o<a.length;o++){var s=a[o],c=n(r,l,s),u=e[s]._subplot;u||(u=i(t,s),e[s]._subplot=u),u.plot(c,e,t._promises)}},clean:function(t,e,r,n){for(var a=n._subplots[l]||[],i=n._has&&n._has("gl"),o=e._has&&e._has("gl"),s=i&&!o,c=0;c<a.length;c++){var u=a[c],h=n[u]._subplot;if(!e[u]&&h)for(var f in h.framework.remove(),h.layers["radial-axis-title"].remove(),h.clipPaths)h.clipPaths[f].remove();s&&h._scene&&(h._scene.destroy(),h._scene=null)}},toSVG:t("../cartesian").toSVG}},{"../../lib":717,"../cartesian":776,"../get_data":800,"./constants":827,"./layout_attributes":830,"./layout_defaults":831,"./polar":838}],830:[function(t,e,r){"use strict";var n=t("../../components/color/attributes"),a=t("../cartesian/layout_attributes"),i=t("../domain").attributes,o=t("../../lib").extendFlat,s=t("../../plot_api/edit_types").overrideAll,l=s({color:a.color,showline:o({},a.showline,{dflt:!0}),linecolor:a.linecolor,linewidth:a.linewidth,showgrid:o({},a.showgrid,{dflt:!0}),gridcolor:a.gridcolor,gridwidth:a.gridwidth},"plot","from-root"),c=s({tickmode:a.tickmode,nticks:a.nticks,tick0:a.tick0,dtick:a.dtick,tickvals:a.tickvals,ticktext:a.ticktext,ticks:a.ticks,ticklen:a.ticklen,tickwidth:a.tickwidth,tickcolor:a.tickcolor,showticklabels:a.showticklabels,showtickprefix:a.showtickprefix,tickprefix:a.tickprefix,showticksuffix:a.showticksuffix,ticksuffix:a.ticksuffix,showexponent:a.showexponent,exponentformat:a.exponentformat,separatethousands:a.separatethousands,tickfont:a.tickfont,tickangle:a.tickangle,tickformat:a.tickformat,tickformatstops:a.tickformatstops,layer:a.layer},"plot","from-root"),u={visible:o({},a.visible,{dflt:!0}),type:o({},a.type,{values:["-","linear","log","date","category"]}),autorange:o({},a.autorange,{editType:"plot"}),rangemode:{valType:"enumerated",values:["tozero","nonnegative","normal"],dflt:"tozero",editType:"calc"},range:o({},a.range,{items:[{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}}],editType:"plot"}),categoryorder:a.categoryorder,categoryarray:a.categoryarray,angle:{valType:"angle",editType:"plot"},side:{valType:"enumerated",values:["clockwise","counterclockwise"],dflt:"clockwise",editType:"plot"},title:{text:o({},a.title.text,{editType:"plot",dflt:""}),font:o({},a.title.font,{editType:"plot"}),editType:"plot"},hoverformat:a.hoverformat,uirevision:{valType:"any",editType:"none"},editType:"calc",_deprecated:{title:a._deprecated.title,titlefont:a._deprecated.titlefont}};o(u,l,c);var h={visible:o({},a.visible,{dflt:!0}),type:{valType:"enumerated",values:["-","linear","category"],dflt:"-",editType:"calc",_noTemplating:!0},categoryorder:a.categoryorder,categoryarray:a.categoryarray,thetaunit:{valType:"enumerated",values:["radians","degrees"],dflt:"degrees",editType:"calc"},period:{valType:"number",editType:"calc",min:0},direction:{valType:"enumerated",values:["counterclockwise","clockwise"],dflt:"counterclockwise",editType:"calc"},rotation:{valType:"angle",editType:"calc"},hoverformat:a.hoverformat,uirevision:{valType:"any",editType:"none"},editType:"calc"};o(h,l,c),e.exports={domain:i({name:"polar",editType:"plot"}),sector:{valType:"info_array",items:[{valType:"number",editType:"plot"},{valType:"number",editType:"plot"}],dflt:[0,360],editType:"plot"},hole:{valType:"number",min:0,max:1,dflt:0,editType:"plot"},bgcolor:{valType:"color",editType:"plot",dflt:n.background},radialaxis:u,angularaxis:h,gridshape:{valType:"enumerated",values:["circular","linear"],dflt:"circular",editType:"plot"},uirevision:{valType:"any",editType:"none"},editType:"calc"}},{"../../components/color/attributes":590,"../../lib":717,"../../plot_api/edit_types":748,"../cartesian/layout_attributes":777,"../domain":790}],831:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/color"),i=t("../../plot_api/plot_template"),o=t("../subplot_defaults"),s=t("../get_data").getSubplotData,l=t("../cartesian/tick_value_defaults"),c=t("../cartesian/tick_mark_defaults"),u=t("../cartesian/tick_label_defaults"),h=t("../cartesian/category_order_defaults"),f=t("../cartesian/line_grid_defaults"),p=t("../cartesian/axis_autotype"),d=t("./layout_attributes"),g=t("./set_convert"),v=t("./constants"),m=v.axisNames;function y(t,e,r,o){var p=r("bgcolor");o.bgColor=a.combine(p,o.paper_bgcolor);var y=r("sector");r("hole");var b,_=s(o.fullData,v.name,o.id),w=o.layoutOut;function k(t,e){return r(b+"."+t,e)}for(var T=0;T<m.length;T++){b=m[T],n.isPlainObject(t[b])||(t[b]={});var M=t[b],A=i.newContainer(e,b);A._id=A._name=b,A._attr=o.id+"."+b,A._traceIndices=_.map(function(t){return t._expandedIndex});var S=v.axisName2dataArray[b],E=x(M,A,k,_,S);h(M,A,k,{axData:_,dataAttr:S});var L,C,P=k("visible");switch(g(A,e,w),k("uirevision",e.uirevision),P&&(C=(L=k("color"))===M.color?L:o.font.color),A._m=1,b){case"radialaxis":var O=k("autorange",!A.isValidRange(M.range));M.autorange=O,!O||"linear"!==E&&"-"!==E||k("rangemode"),"reversed"===O&&(A._m=-1),k("range"),A.cleanRange("range",{dfltRange:[0,1]}),P&&(k("side"),k("angle",y[0]),k("title.text"),n.coerceFont(k,"title.font",{family:o.font.family,size:Math.round(1.2*o.font.size),color:C}));break;case"angularaxis":if("date"===E){n.log("Polar plots do not support date angular axes yet.");for(var z=0;z<_.length;z++)_[z].visible=!1;E=M.type=A.type="linear"}k("linear"===E?"thetaunit":"period");var I=k("direction");k("rotation",{counterclockwise:0,clockwise:90}[I])}if(P)l(M,A,k,A.type),u(M,A,k,A.type,{tickSuffixDflt:"degrees"===A.thetaunit?"\xb0":void 0}),c(M,A,k,{outerTicks:!0}),k("showticklabels")&&(n.coerceFont(k,"tickfont",{family:o.font.family,size:o.font.size,color:C}),k("tickangle"),k("tickformat")),f(M,A,k,{dfltColor:L,bgColor:o.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:d[b]}),k("layer");"category"!==E&&k("hoverformat"),A._input=M}"category"===e.angularaxis.type&&r("gridshape")}function x(t,e,r,n,a){if("-"===r("type")){for(var i,o=0;o<n.length;o++)if(n[o].visible){i=n[o];break}i&&i[a]&&(e.type=p(i[a],"gregorian")),"-"===e.type?e.type="linear":t.type=e.type}return e.type}e.exports=function(t,e,r){o(t,e,r,{type:v.name,attributes:d,handleDefaults:y,font:e.font,paper_bgcolor:e.paper_bgcolor,fullData:r,layoutOut:e})}},{"../../components/color":591,"../../lib":717,"../../plot_api/plot_template":755,"../cartesian/axis_autotype":766,"../cartesian/category_order_defaults":769,"../cartesian/line_grid_defaults":779,"../cartesian/tick_label_defaults":784,"../cartesian/tick_mark_defaults":785,"../cartesian/tick_value_defaults":786,"../get_data":800,"../subplot_defaults":840,"./constants":827,"./layout_attributes":830,"./set_convert":839}],832:[function(t,e,r){"use strict";var n=t("../../../traces/scatter/attributes"),a=n.marker,i=t("../../../lib/extend").extendFlat;["Area traces are deprecated!","Please switch to the *barpolar* trace type."].join(" ");e.exports={r:i({},n.r,{}),t:i({},n.t,{}),marker:{color:i({},a.color,{}),size:i({},a.size,{}),symbol:i({},a.symbol,{}),opacity:i({},a.opacity,{}),editType:"calc"}}},{"../../../lib/extend":708,"../../../traces/scatter/attributes":1120}],833:[function(t,e,r){"use strict";var n=t("../../cartesian/layout_attributes"),a=t("../../../lib/extend").extendFlat,i=t("../../../plot_api/edit_types").overrideAll,o=["Legacy polar charts are deprecated!","Please switch to *polar* subplots."].join(" "),s=a({},n.domain,{});function l(t,e){return a({},e,{showline:{valType:"boolean"},showticklabels:{valType:"boolean"},tickorientation:{valType:"enumerated",values:["horizontal","vertical"]},ticklen:{valType:"number",min:0},tickcolor:{valType:"color"},ticksuffix:{valType:"string"},endpadding:{valType:"number",description:o},visible:{valType:"boolean"}})}e.exports=i({radialaxis:l(0,{range:{valType:"info_array",items:[{valType:"number"},{valType:"number"}]},domain:s,orientation:{valType:"number"}}),angularaxis:l(0,{range:{valType:"info_array",items:[{valType:"number",dflt:0},{valType:"number",dflt:360}]},domain:s}),layout:{direction:{valType:"enumerated",values:["clockwise","counterclockwise"]},orientation:{valType:"angle"}}},"plot","nested")},{"../../../lib/extend":708,"../../../plot_api/edit_types":748,"../../cartesian/layout_attributes":777}],834:[function(t,e,r){"use strict";(e.exports=t("./micropolar")).manager=t("./micropolar_manager")},{"./micropolar":835,"./micropolar_manager":836}],835:[function(t,e,r){var n=t("d3"),a=t("../../../lib").extendDeepAll,i=t("../../../constants/alignment").MID_SHIFT,o=e.exports={version:"0.2.2"};o.Axis=function(){var t,e,r,s,l={data:[],layout:{}},c={},u={},h=n.dispatch("hover"),f={};return f.render=function(c){return function(c){e=c||e;var h=l.data,f=l.layout;("string"==typeof e||e.nodeName)&&(e=n.select(e)),e.datum(h).each(function(e,l){var c=e.slice();u={data:o.util.cloneJson(c),layout:o.util.cloneJson(f)};var h=0;c.forEach(function(t,e){t.color||(t.color=f.defaultColorRange[h],h=(h+1)%f.defaultColorRange.length),t.strokeColor||(t.strokeColor="LinePlot"===t.geometry?t.color:n.rgb(t.color).darker().toString()),u.data[e].color=t.color,u.data[e].strokeColor=t.strokeColor,u.data[e].strokeDash=t.strokeDash,u.data[e].strokeSize=t.strokeSize});var p=c.filter(function(t,e){var r=t.visible;return"undefined"==typeof r||!0===r}),d=!1,g=p.map(function(t,e){return d=d||"undefined"!=typeof t.groupId,t});if(d){var v=n.nest().key(function(t,e){return"undefined"!=typeof t.groupId?t.groupId:"unstacked"}).entries(g),m=[],y=v.map(function(t,e){if("unstacked"===t.key)return t.values;var r=t.values[0].r.map(function(t,e){return 0});return t.values.forEach(function(t,e,n){t.yStack=[r],m.push(r),r=o.util.sumArrays(t.r,r)}),t.values});p=n.merge(y)}p.forEach(function(t,e){t.t=Array.isArray(t.t[0])?t.t:[t.t],t.r=Array.isArray(t.r[0])?t.r:[t.r]});var x=Math.min(f.width-f.margin.left-f.margin.right,f.height-f.margin.top-f.margin.bottom)/2;x=Math.max(10,x);var b,_=[f.margin.left+x,f.margin.top+x];b=d?[0,n.max(o.util.sumArrays(o.util.arrayLast(p).r[0],o.util.arrayLast(m)))]:n.extent(o.util.flattenArray(p.map(function(t,e){return t.r}))),f.radialAxis.domain!=o.DATAEXTENT&&(b[0]=0),r=n.scale.linear().domain(f.radialAxis.domain!=o.DATAEXTENT&&f.radialAxis.domain?f.radialAxis.domain:b).range([0,x]),u.layout.radialAxis.domain=r.domain();var w,k=o.util.flattenArray(p.map(function(t,e){return t.t})),T="string"==typeof k[0];T&&(k=o.util.deduplicate(k),w=k.slice(),k=n.range(k.length),p=p.map(function(t,e){var r=t;return t.t=[k],d&&(r.yStack=t.yStack),r}));var M=p.filter(function(t,e){return"LinePlot"===t.geometry||"DotPlot"===t.geometry}).length===p.length,A=null===f.needsEndSpacing?T||!M:f.needsEndSpacing,S=f.angularAxis.domain&&f.angularAxis.domain!=o.DATAEXTENT&&!T&&f.angularAxis.domain[0]>=0?f.angularAxis.domain:n.extent(k),E=Math.abs(k[1]-k[0]);M&&!T&&(E=0);var L=S.slice();A&&T&&(L[1]+=E);var C=f.angularAxis.ticksCount||4;C>8&&(C=C/(C/8)+C%8),f.angularAxis.ticksStep&&(C=(L[1]-L[0])/C);var P=f.angularAxis.ticksStep||(L[1]-L[0])/(C*(f.minorTicks+1));w&&(P=Math.max(Math.round(P),1)),L[2]||(L[2]=P);var O=n.range.apply(this,L);if(O=O.map(function(t,e){return parseFloat(t.toPrecision(12))}),s=n.scale.linear().domain(L.slice(0,2)).range("clockwise"===f.direction?[0,360]:[360,0]),u.layout.angularAxis.domain=s.domain(),u.layout.angularAxis.endPadding=A?E:0,"undefined"==typeof(t=n.select(this).select("svg.chart-root"))||t.empty()){var z=(new DOMParser).parseFromString("<svg xmlns='http://www.w3.org/2000/svg' class='chart-root'>' + '<g class='outer-group'>' + '<g class='chart-group'>' + '<circle class='background-circle'></circle>' + '<g class='geometry-group'></g>' + '<g class='radial axis-group'>' + '<circle class='outside-circle'></circle>' + '</g>' + '<g class='angular axis-group'></g>' + '<g class='guides-group'><line></line><circle r='0'></circle></g>' + '</g>' + '<g class='legend-group'></g>' + '<g class='tooltips-group'></g>' + '<g class='title-group'><text></text></g>' + '</g>' + '</svg>","application/xml"),I=this.appendChild(this.ownerDocument.importNode(z.documentElement,!0));t=n.select(I)}t.select(".guides-group").style({"pointer-events":"none"}),t.select(".angular.axis-group").style({"pointer-events":"none"}),t.select(".radial.axis-group").style({"pointer-events":"none"});var D,R=t.select(".chart-group"),F={fill:"none",stroke:f.tickColor},B={"font-size":f.font.size,"font-family":f.font.family,fill:f.font.color,"text-shadow":["-1px 0px","1px -1px","-1px 1px","1px 1px"].map(function(t,e){return" "+t+" 0 "+f.font.outlineColor}).join(",")};if(f.showLegend){D=t.select(".legend-group").attr({transform:"translate("+[x,f.margin.top]+")"}).style({display:"block"});var N=p.map(function(t,e){var r=o.util.cloneJson(t);return r.symbol="DotPlot"===t.geometry?t.dotType||"circle":"LinePlot"!=t.geometry?"square":"line",r.visibleInLegend="undefined"==typeof t.visibleInLegend||t.visibleInLegend,r.color="LinePlot"===t.geometry?t.strokeColor:t.color,r});o.Legend().config({data:p.map(function(t,e){return t.name||"Element"+e}),legendConfig:a({},o.Legend.defaultConfig().legendConfig,{container:D,elements:N,reverseOrder:f.legend.reverseOrder})})();var j=D.node().getBBox();x=Math.min(f.width-j.width-f.margin.left-f.margin.right,f.height-f.margin.top-f.margin.bottom)/2,x=Math.max(10,x),_=[f.margin.left+x,f.margin.top+x],r.range([0,x]),u.layout.radialAxis.domain=r.domain(),D.attr("transform","translate("+[_[0]+x,_[1]-x]+")")}else D=t.select(".legend-group").style({display:"none"});t.attr({width:f.width,height:f.height}).style({opacity:f.opacity}),R.attr("transform","translate("+_+")").style({cursor:"crosshair"});var V=[(f.width-(f.margin.left+f.margin.right+2*x+(j?j.width:0)))/2,(f.height-(f.margin.top+f.margin.bottom+2*x))/2];if(V[0]=Math.max(0,V[0]),V[1]=Math.max(0,V[1]),t.select(".outer-group").attr("transform","translate("+V+")"),f.title&&f.title.text){var U=t.select("g.title-group text").style(B).text(f.title.text),q=U.node().getBBox();U.attr({x:_[0]-q.width/2,y:_[1]-x-20})}var H=t.select(".radial.axis-group");if(f.radialAxis.gridLinesVisible){var G=H.selectAll("circle.grid-circle").data(r.ticks(5));G.enter().append("circle").attr({class:"grid-circle"}).style(F),G.attr("r",r),G.exit().remove()}H.select("circle.outside-circle").attr({r:x}).style(F);var Y=t.select("circle.background-circle").attr({r:x}).style({fill:f.backgroundColor,stroke:f.stroke});function W(t,e){return s(t)%360+f.orientation}if(f.radialAxis.visible){var X=n.svg.axis().scale(r).ticks(5).tickSize(5);H.call(X).attr({transform:"rotate("+f.radialAxis.orientation+")"}),H.selectAll(".domain").style(F),H.selectAll("g>text").text(function(t,e){return this.textContent+f.radialAxis.ticksSuffix}).style(B).style({"text-anchor":"start"}).attr({x:0,y:0,dx:0,dy:0,transform:function(t,e){return"horizontal"===f.radialAxis.tickOrientation?"rotate("+-f.radialAxis.orientation+") translate("+[0,B["font-size"]]+")":"translate("+[0,B["font-size"]]+")"}}),H.selectAll("g>line").style({stroke:"black"})}var Z=t.select(".angular.axis-group").selectAll("g.angular-tick").data(O),J=Z.enter().append("g").classed("angular-tick",!0);Z.attr({transform:function(t,e){return"rotate("+W(t)+")"}}).style({display:f.angularAxis.visible?"block":"none"}),Z.exit().remove(),J.append("line").classed("grid-line",!0).classed("major",function(t,e){return e%(f.minorTicks+1)==0}).classed("minor",function(t,e){return!(e%(f.minorTicks+1)==0)}).style(F),J.selectAll(".minor").style({stroke:f.minorTickColor}),Z.select("line.grid-line").attr({x1:f.tickLength?x-f.tickLength:0,x2:x}).style({display:f.angularAxis.gridLinesVisible?"block":"none"}),J.append("text").classed("axis-text",!0).style(B);var K=Z.select("text.axis-text").attr({x:x+f.labelOffset,dy:i+"em",transform:function(t,e){var r=W(t),n=x+f.labelOffset,a=f.angularAxis.tickOrientation;return"horizontal"==a?"rotate("+-r+" "+n+" 0)":"radial"==a?r<270&&r>90?"rotate(180 "+n+" 0)":null:"rotate("+(r<=180&&r>0?-90:90)+" "+n+" 0)"}}).style({"text-anchor":"middle",display:f.angularAxis.labelsVisible?"block":"none"}).text(function(t,e){return e%(f.minorTicks+1)!=0?"":w?w[t]+f.angularAxis.ticksSuffix:t+f.angularAxis.ticksSuffix}).style(B);f.angularAxis.rewriteTicks&&K.text(function(t,e){return e%(f.minorTicks+1)!=0?"":f.angularAxis.rewriteTicks(this.textContent,e)});var Q=n.max(R.selectAll(".angular-tick text")[0].map(function(t,e){return t.getCTM().e+t.getBBox().width}));D.attr({transform:"translate("+[x+Q,f.margin.top]+")"});var $=t.select("g.geometry-group").selectAll("g").size()>0,tt=t.select("g.geometry-group").selectAll("g.geometry").data(p);if(tt.enter().append("g").attr({class:function(t,e){return"geometry geometry"+e}}),tt.exit().remove(),p[0]||$){var et=[];p.forEach(function(t,e){var n={};n.radialScale=r,n.angularScale=s,n.container=tt.filter(function(t,r){return r==e}),n.geometry=t.geometry,n.orientation=f.orientation,n.direction=f.direction,n.index=e,et.push({data:t,geometryConfig:n})});var rt=n.nest().key(function(t,e){return"undefined"!=typeof t.data.groupId||"unstacked"}).entries(et),nt=[];rt.forEach(function(t,e){"unstacked"===t.key?nt=nt.concat(t.values.map(function(t,e){return[t]})):nt.push(t.values)}),nt.forEach(function(t,e){var r;r=Array.isArray(t)?t[0].geometryConfig.geometry:t.geometryConfig.geometry;var n=t.map(function(t,e){return a(o[r].defaultConfig(),t)});o[r]().config(n)()})}var at,it,ot=t.select(".guides-group"),st=t.select(".tooltips-group"),lt=o.tooltipPanel().config({container:st,fontSize:8})(),ct=o.tooltipPanel().config({container:st,fontSize:8})(),ut=o.tooltipPanel().config({container:st,hasTick:!0})();if(!T){var ht=ot.select("line").attr({x1:0,y1:0,y2:0}).style({stroke:"grey","pointer-events":"none"});R.on("mousemove.angular-guide",function(t,e){var r=o.util.getMousePos(Y).angle;ht.attr({x2:-x,transform:"rotate("+r+")"}).style({opacity:.5});var n=(r+180+360-f.orientation)%360;at=s.invert(n);var a=o.util.convertToCartesian(x+12,r+180);lt.text(o.util.round(at)).move([a[0]+_[0],a[1]+_[1]])}).on("mouseout.angular-guide",function(t,e){ot.select("line").style({opacity:0})})}var ft=ot.select("circle").style({stroke:"grey",fill:"none"});R.on("mousemove.radial-guide",function(t,e){var n=o.util.getMousePos(Y).radius;ft.attr({r:n}).style({opacity:.5}),it=r.invert(o.util.getMousePos(Y).radius);var a=o.util.convertToCartesian(n,f.radialAxis.orientation);ct.text(o.util.round(it)).move([a[0]+_[0],a[1]+_[1]])}).on("mouseout.radial-guide",function(t,e){ft.style({opacity:0}),ut.hide(),lt.hide(),ct.hide()}),t.selectAll(".geometry-group .mark").on("mouseover.tooltip",function(e,r){var a=n.select(this),i=this.style.fill,s="black",l=this.style.opacity||1;if(a.attr({"data-opacity":l}),i&&"none"!==i){a.attr({"data-fill":i}),s=n.hsl(i).darker().toString(),a.style({fill:s,opacity:1});var c={t:o.util.round(e[0]),r:o.util.round(e[1])};T&&(c.t=w[e[0]]);var u="t: "+c.t+", r: "+c.r,h=this.getBoundingClientRect(),f=t.node().getBoundingClientRect(),p=[h.left+h.width/2-V[0]-f.left,h.top+h.height/2-V[1]-f.top];ut.config({color:s}).text(u),ut.move(p)}else i=this.style.stroke||"black",a.attr({"data-stroke":i}),s=n.hsl(i).darker().toString(),a.style({stroke:s,opacity:1})}).on("mousemove.tooltip",function(t,e){if(0!=n.event.which)return!1;n.select(this).attr("data-fill")&&ut.show()}).on("mouseout.tooltip",function(t,e){ut.hide();var r=n.select(this),a=r.attr("data-fill");a?r.style({fill:a,opacity:r.attr("data-opacity")}):r.style({stroke:r.attr("data-stroke"),opacity:r.attr("data-opacity")})})})}(c),this},f.config=function(t){if(!arguments.length)return l;var e=o.util.cloneJson(t);return e.data.forEach(function(t,e){l.data[e]||(l.data[e]={}),a(l.data[e],o.Axis.defaultConfig().data[0]),a(l.data[e],t)}),a(l.layout,o.Axis.defaultConfig().layout),a(l.layout,e.layout),this},f.getLiveConfig=function(){return u},f.getinputConfig=function(){return c},f.radialScale=function(t){return r},f.angularScale=function(t){return s},f.svg=function(){return t},n.rebind(f,h,"on"),f},o.Axis.defaultConfig=function(t,e){return{data:[{t:[1,2,3,4],r:[10,11,12,13],name:"Line1",geometry:"LinePlot",color:null,strokeDash:"solid",strokeColor:null,strokeSize:"1",visibleInLegend:!0,opacity:1}],layout:{defaultColorRange:n.scale.category10().range(),title:null,height:450,width:500,margin:{top:40,right:40,bottom:40,left:40},font:{size:12,color:"gray",outlineColor:"white",family:"Tahoma, sans-serif"},direction:"clockwise",orientation:0,labelOffset:10,radialAxis:{domain:null,orientation:-45,ticksSuffix:"",visible:!0,gridLinesVisible:!0,tickOrientation:"horizontal",rewriteTicks:null},angularAxis:{domain:[0,360],ticksSuffix:"",visible:!0,gridLinesVisible:!0,labelsVisible:!0,tickOrientation:"horizontal",rewriteTicks:null,ticksCount:null,ticksStep:null},minorTicks:0,tickLength:null,tickColor:"silver",minorTickColor:"#eee",backgroundColor:"none",needsEndSpacing:null,showLegend:!0,legend:{reverseOrder:!1},opacity:1}}},o.util={},o.DATAEXTENT="dataExtent",o.AREA="AreaChart",o.LINE="LinePlot",o.DOT="DotPlot",o.BAR="BarChart",o.util._override=function(t,e){for(var r in t)r in e&&(e[r]=t[r])},o.util._extend=function(t,e){for(var r in t)e[r]=t[r]},o.util._rndSnd=function(){return 2*Math.random()-1+(2*Math.random()-1)+(2*Math.random()-1)},o.util.dataFromEquation2=function(t,e){var r=e||6;return n.range(0,360+r,r).map(function(e,r){var n=e*Math.PI/180;return[e,t(n)]})},o.util.dataFromEquation=function(t,e,r){var a=e||6,i=[],o=[];n.range(0,360+a,a).forEach(function(e,r){var n=e*Math.PI/180,a=t(n);i.push(e),o.push(a)});var s={t:i,r:o};return r&&(s.name=r),s},o.util.ensureArray=function(t,e){if("undefined"==typeof t)return null;var r=[].concat(t);return n.range(e).map(function(t,e){return r[e]||r[0]})},o.util.fillArrays=function(t,e,r){return e.forEach(function(e,n){t[e]=o.util.ensureArray(t[e],r)}),t},o.util.cloneJson=function(t){return JSON.parse(JSON.stringify(t))},o.util.validateKeys=function(t,e){"string"==typeof e&&(e=e.split("."));var r=e.shift();return t[r]&&(!e.length||objHasKeys(t[r],e))},o.util.sumArrays=function(t,e){return n.zip(t,e).map(function(t,e){return n.sum(t)})},o.util.arrayLast=function(t){return t[t.length-1]},o.util.arrayEqual=function(t,e){for(var r=Math.max(t.length,e.length,1);r-- >=0&&t[r]===e[r];);return-2===r},o.util.flattenArray=function(t){for(var e=[];!o.util.arrayEqual(e,t);)e=t,t=[].concat.apply([],t);return t},o.util.deduplicate=function(t){return t.filter(function(t,e,r){return r.indexOf(t)==e})},o.util.convertToCartesian=function(t,e){var r=e*Math.PI/180;return[t*Math.cos(r),t*Math.sin(r)]},o.util.round=function(t,e){var r=e||2,n=Math.pow(10,r);return Math.round(t*n)/n},o.util.getMousePos=function(t){var e=n.mouse(t.node()),r=e[0],a=e[1],i={};return i.x=r,i.y=a,i.pos=e,i.angle=180*(Math.atan2(a,r)+Math.PI)/Math.PI,i.radius=Math.sqrt(r*r+a*a),i},o.util.duplicatesCount=function(t){for(var e,r={},n={},a=0,i=t.length;a<i;a++)(e=t[a])in r?(r[e]++,n[e]=r[e]):r[e]=1;return n},o.util.duplicates=function(t){return Object.keys(o.util.duplicatesCount(t))},o.util.translator=function(t,e,r,n){if(n){var a=r.slice();r=e,e=a}var i=e.reduce(function(t,e){if("undefined"!=typeof t)return t[e]},t);"undefined"!=typeof i&&(e.reduce(function(t,r,n){if("undefined"!=typeof t)return n===e.length-1&&delete t[r],t[r]},t),r.reduce(function(t,e,n){return"undefined"==typeof t[e]&&(t[e]={}),n===r.length-1&&(t[e]=i),t[e]},t))},o.PolyChart=function(){var t=[o.PolyChart.defaultConfig()],e=n.dispatch("hover"),r={solid:"none",dash:[5,2],dot:[2,5]};function i(){var e=t[0].geometryConfig,a=e.container;"string"==typeof a&&(a=n.select(a)),a.datum(t).each(function(t,a){var i=!!t[0].data.yStack,o=t.map(function(t,e){return i?n.zip(t.data.t[0],t.data.r[0],t.data.yStack[0]):n.zip(t.data.t[0],t.data.r[0])}),s=e.angularScale,l=e.radialScale.domain()[0],c={bar:function(r,a,i){var o=t[i].data,l=e.radialScale(r[1])-e.radialScale(0),c=e.radialScale(r[2]||0),u=o.barWidth;n.select(this).attr({class:"mark bar",d:"M"+[[l+c,-u/2],[l+c,u/2],[c,u/2],[c,-u/2]].join("L")+"Z",transform:function(t,r){return"rotate("+(e.orientation+s(t[0]))+")"}})}};c.dot=function(r,a,i){var o=r[2]?[r[0],r[1]+r[2]]:r,s=n.svg.symbol().size(t[i].data.dotSize).type(t[i].data.dotType)(r,a);n.select(this).attr({class:"mark dot",d:s,transform:function(t,r){var n,a,i,s=(n=function(t,r){var n=e.radialScale(t[1]),a=(e.angularScale(t[0])+e.orientation)*Math.PI/180;return{r:n,t:a}}(o),a=n.r*Math.cos(n.t),i=n.r*Math.sin(n.t),{x:a,y:i});return"translate("+[s.x,s.y]+")"}})};var u=n.svg.line.radial().interpolate(t[0].data.lineInterpolation).radius(function(t){return e.radialScale(t[1])}).angle(function(t){return e.angularScale(t[0])*Math.PI/180});c.line=function(r,a,i){var s=r[2]?o[i].map(function(t,e){return[t[0],t[1]+t[2]]}):o[i];if(n.select(this).each(c.dot).style({opacity:function(e,r){return+t[i].data.dotVisible},fill:d.stroke(r,a,i)}).attr({class:"mark dot"}),!(a>0)){var l=n.select(this.parentNode).selectAll("path.line").data([0]);l.enter().insert("path"),l.attr({class:"line",d:u(s),transform:function(t,r){return"rotate("+(e.orientation+90)+")"},"pointer-events":"none"}).style({fill:function(t,e){return d.fill(r,a,i)},"fill-opacity":0,stroke:function(t,e){return d.stroke(r,a,i)},"stroke-width":function(t,e){return d["stroke-width"](r,a,i)},"stroke-dasharray":function(t,e){return d["stroke-dasharray"](r,a,i)},opacity:function(t,e){return d.opacity(r,a,i)},display:function(t,e){return d.display(r,a,i)}})}};var h=e.angularScale.range(),f=Math.abs(h[1]-h[0])/o[0].length*Math.PI/180,p=n.svg.arc().startAngle(function(t){return-f/2}).endAngle(function(t){return f/2}).innerRadius(function(t){return e.radialScale(l+(t[2]||0))}).outerRadius(function(t){return e.radialScale(l+(t[2]||0))+e.radialScale(t[1])});c.arc=function(t,r,a){n.select(this).attr({class:"mark arc",d:p,transform:function(t,r){return"rotate("+(e.orientation+s(t[0])+90)+")"}})};var d={fill:function(e,r,n){return t[n].data.color},stroke:function(e,r,n){return t[n].data.strokeColor},"stroke-width":function(e,r,n){return t[n].data.strokeSize+"px"},"stroke-dasharray":function(e,n,a){return r[t[a].data.strokeDash]},opacity:function(e,r,n){return t[n].data.opacity},display:function(e,r,n){return"undefined"==typeof t[n].data.visible||t[n].data.visible?"block":"none"}},g=n.select(this).selectAll("g.layer").data(o);g.enter().append("g").attr({class:"layer"});var v=g.selectAll("path.mark").data(function(t,e){return t});v.enter().append("path").attr({class:"mark"}),v.style(d).each(c[e.geometryType]),v.exit().remove(),g.exit().remove()})}return i.config=function(e){return arguments.length?(e.forEach(function(e,r){t[r]||(t[r]={}),a(t[r],o.PolyChart.defaultConfig()),a(t[r],e)}),this):t},i.getColorScale=function(){},n.rebind(i,e,"on"),i},o.PolyChart.defaultConfig=function(){return{data:{name:"geom1",t:[[1,2,3,4]],r:[[1,2,3,4]],dotType:"circle",dotSize:64,dotVisible:!1,barWidth:20,color:"#ffa500",strokeSize:1,strokeColor:"silver",strokeDash:"solid",opacity:1,index:0,visible:!0,visibleInLegend:!0},geometryConfig:{geometry:"LinePlot",geometryType:"arc",direction:"clockwise",orientation:0,container:"body",radialScale:null,angularScale:null,colorScale:n.scale.category20()}}},o.BarChart=function(){return o.PolyChart()},o.BarChart.defaultConfig=function(){return{geometryConfig:{geometryType:"bar"}}},o.AreaChart=function(){return o.PolyChart()},o.AreaChart.defaultConfig=function(){return{geometryConfig:{geometryType:"arc"}}},o.DotPlot=function(){return o.PolyChart()},o.DotPlot.defaultConfig=function(){return{geometryConfig:{geometryType:"dot",dotType:"circle"}}},o.LinePlot=function(){return o.PolyChart()},o.LinePlot.defaultConfig=function(){return{geometryConfig:{geometryType:"line"}}},o.Legend=function(){var t=o.Legend.defaultConfig(),e=n.dispatch("hover");function r(){var e=t.legendConfig,i=t.data.map(function(t,r){return[].concat(t).map(function(t,n){var i=a({},e.elements[r]);return i.name=t,i.color=[].concat(e.elements[r].color)[n],i})}),o=n.merge(i);o=o.filter(function(t,r){return e.elements[r]&&(e.elements[r].visibleInLegend||"undefined"==typeof e.elements[r].visibleInLegend)}),e.reverseOrder&&(o=o.reverse());var s=e.container;("string"==typeof s||s.nodeName)&&(s=n.select(s));var l=o.map(function(t,e){return t.color}),c=e.fontSize,u=null==e.isContinuous?"number"==typeof o[0]:e.isContinuous,h=u?e.height:c*o.length,f=s.classed("legend-group",!0).selectAll("svg").data([0]),p=f.enter().append("svg").attr({width:300,height:h+c,xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",version:"1.1"});p.append("g").classed("legend-axis",!0),p.append("g").classed("legend-marks",!0);var d=n.range(o.length),g=n.scale[u?"linear":"ordinal"]().domain(d).range(l),v=n.scale[u?"linear":"ordinal"]().domain(d)[u?"range":"rangePoints"]([0,h]);if(u){var m=f.select(".legend-marks").append("defs").append("linearGradient").attr({id:"grad1",x1:"0%",y1:"0%",x2:"0%",y2:"100%"}).selectAll("stop").data(l);m.enter().append("stop"),m.attr({offset:function(t,e){return e/(l.length-1)*100+"%"}}).style({"stop-color":function(t,e){return t}}),f.append("rect").classed("legend-mark",!0).attr({height:e.height,width:e.colorBandWidth,fill:"url(#grad1)"})}else{var y=f.select(".legend-marks").selectAll("path.legend-mark").data(o);y.enter().append("path").classed("legend-mark",!0),y.attr({transform:function(t,e){return"translate("+[c/2,v(e)+c/2]+")"},d:function(t,e){var r,a,i,o=t.symbol;return i=3*(a=c),"line"===(r=o)?"M"+[[-a/2,-a/12],[a/2,-a/12],[a/2,a/12],[-a/2,a/12]]+"Z":-1!=n.svg.symbolTypes.indexOf(r)?n.svg.symbol().type(r).size(i)():n.svg.symbol().type("square").size(i)()},fill:function(t,e){return g(e)}}),y.exit().remove()}var x=n.svg.axis().scale(v).orient("right"),b=f.select("g.legend-axis").attr({transform:"translate("+[u?e.colorBandWidth:c,c/2]+")"}).call(x);return b.selectAll(".domain").style({fill:"none",stroke:"none"}),b.selectAll("line").style({fill:"none",stroke:u?e.textColor:"none"}),b.selectAll("text").style({fill:e.textColor,"font-size":e.fontSize}).text(function(t,e){return o[e].name}),r}return r.config=function(e){return arguments.length?(a(t,e),this):t},n.rebind(r,e,"on"),r},o.Legend.defaultConfig=function(t,e){return{data:["a","b","c"],legendConfig:{elements:[{symbol:"line",color:"red"},{symbol:"square",color:"yellow"},{symbol:"diamond",color:"limegreen"}],height:150,colorBandWidth:30,fontSize:12,container:"body",isContinuous:null,textColor:"grey",reverseOrder:!1}}},o.tooltipPanel=function(){var t,e,r,i={container:null,hasTick:!1,fontSize:12,color:"white",padding:5},s="tooltip-"+o.tooltipPanel.uid++,l=10,c=function(){var n=(t=i.container.selectAll("g."+s).data([0])).enter().append("g").classed(s,!0).style({"pointer-events":"none",display:"none"});return r=n.append("path").style({fill:"white","fill-opacity":.9}).attr({d:"M0 0"}),e=n.append("text").attr({dx:i.padding+l,dy:.3*+i.fontSize}),c};return c.text=function(a){var o=n.hsl(i.color).l,s=o>=.5?"#aaa":"white",u=o>=.5?"black":"white",h=a||"";e.style({fill:u,"font-size":i.fontSize+"px"}).text(h);var f=i.padding,p=e.node().getBBox(),d={fill:i.color,stroke:s,"stroke-width":"2px"},g=p.width+2*f+l,v=p.height+2*f;return r.attr({d:"M"+[[l,-v/2],[l,-v/4],[i.hasTick?0:l,0],[l,v/4],[l,v/2],[g,v/2],[g,-v/2]].join("L")+"Z"}).style(d),t.attr({transform:"translate("+[l,-v/2+2*f]+")"}),t.style({display:"block"}),c},c.move=function(e){if(t)return t.attr({transform:"translate("+[e[0],e[1]]+")"}).style({display:"block"}),c},c.hide=function(){if(t)return t.style({display:"none"}),c},c.show=function(){if(t)return t.style({display:"block"}),c},c.config=function(t){return a(i,t),c},c},o.tooltipPanel.uid=1,o.adapter={},o.adapter.plotly=function(){var t={convert:function(t,e){var r={};if(t.data&&(r.data=t.data.map(function(t,r){var n=a({},t);return[[n,["marker","color"],["color"]],[n,["marker","opacity"],["opacity"]],[n,["marker","line","color"],["strokeColor"]],[n,["marker","line","dash"],["strokeDash"]],[n,["marker","line","width"],["strokeSize"]],[n,["marker","symbol"],["dotType"]],[n,["marker","size"],["dotSize"]],[n,["marker","barWidth"],["barWidth"]],[n,["line","interpolation"],["lineInterpolation"]],[n,["showlegend"],["visibleInLegend"]]].forEach(function(t,r){o.util.translator.apply(null,t.concat(e))}),e||delete n.marker,e&&delete n.groupId,e?("LinePlot"===n.geometry?(n.type="scatter",!0===n.dotVisible?(delete n.dotVisible,n.mode="lines+markers"):n.mode="lines"):"DotPlot"===n.geometry?(n.type="scatter",n.mode="markers"):"AreaChart"===n.geometry?n.type="area":"BarChart"===n.geometry&&(n.type="bar"),delete n.geometry):("scatter"===n.type?"lines"===n.mode?n.geometry="LinePlot":"markers"===n.mode?n.geometry="DotPlot":"lines+markers"===n.mode&&(n.geometry="LinePlot",n.dotVisible=!0):"area"===n.type?n.geometry="AreaChart":"bar"===n.type&&(n.geometry="BarChart"),delete n.mode,delete n.type),n}),!e&&t.layout&&"stack"===t.layout.barmode)){var i=o.util.duplicates(r.data.map(function(t,e){return t.geometry}));r.data.forEach(function(t,e){var n=i.indexOf(t.geometry);-1!=n&&(r.data[e].groupId=n)})}if(t.layout){var s=a({},t.layout);if([[s,["plot_bgcolor"],["backgroundColor"]],[s,["showlegend"],["showLegend"]],[s,["radialaxis"],["radialAxis"]],[s,["angularaxis"],["angularAxis"]],[s.angularaxis,["showline"],["gridLinesVisible"]],[s.angularaxis,["showticklabels"],["labelsVisible"]],[s.angularaxis,["nticks"],["ticksCount"]],[s.angularaxis,["tickorientation"],["tickOrientation"]],[s.angularaxis,["ticksuffix"],["ticksSuffix"]],[s.angularaxis,["range"],["domain"]],[s.angularaxis,["endpadding"],["endPadding"]],[s.radialaxis,["showline"],["gridLinesVisible"]],[s.radialaxis,["tickorientation"],["tickOrientation"]],[s.radialaxis,["ticksuffix"],["ticksSuffix"]],[s.radialaxis,["range"],["domain"]],[s.angularAxis,["showline"],["gridLinesVisible"]],[s.angularAxis,["showticklabels"],["labelsVisible"]],[s.angularAxis,["nticks"],["ticksCount"]],[s.angularAxis,["tickorientation"],["tickOrientation"]],[s.angularAxis,["ticksuffix"],["ticksSuffix"]],[s.angularAxis,["range"],["domain"]],[s.angularAxis,["endpadding"],["endPadding"]],[s.radialAxis,["showline"],["gridLinesVisible"]],[s.radialAxis,["tickorientation"],["tickOrientation"]],[s.radialAxis,["ticksuffix"],["ticksSuffix"]],[s.radialAxis,["range"],["domain"]],[s.font,["outlinecolor"],["outlineColor"]],[s.legend,["traceorder"],["reverseOrder"]],[s,["labeloffset"],["labelOffset"]],[s,["defaultcolorrange"],["defaultColorRange"]]].forEach(function(t,r){o.util.translator.apply(null,t.concat(e))}),e?("undefined"!=typeof s.tickLength&&(s.angularaxis.ticklen=s.tickLength,delete s.tickLength),s.tickColor&&(s.angularaxis.tickcolor=s.tickColor,delete s.tickColor)):(s.angularAxis&&"undefined"!=typeof s.angularAxis.ticklen&&(s.tickLength=s.angularAxis.ticklen),s.angularAxis&&"undefined"!=typeof s.angularAxis.tickcolor&&(s.tickColor=s.angularAxis.tickcolor)),s.legend&&"boolean"!=typeof s.legend.reverseOrder&&(s.legend.reverseOrder="normal"!=s.legend.reverseOrder),s.legend&&"boolean"==typeof s.legend.traceorder&&(s.legend.traceorder=s.legend.traceorder?"reversed":"normal",delete s.legend.reverseOrder),s.margin&&"undefined"!=typeof s.margin.t){var l=["t","r","b","l","pad"],c=["top","right","bottom","left","pad"],u={};n.entries(s.margin).forEach(function(t,e){u[c[l.indexOf(t.key)]]=t.value}),s.margin=u}e&&(delete s.needsEndSpacing,delete s.minorTickColor,delete s.minorTicks,delete s.angularaxis.ticksCount,delete s.angularaxis.ticksCount,delete s.angularaxis.ticksStep,delete s.angularaxis.rewriteTicks,delete s.angularaxis.nticks,delete s.radialaxis.ticksCount,delete s.radialaxis.ticksCount,delete s.radialaxis.ticksStep,delete s.radialaxis.rewriteTicks,delete s.radialaxis.nticks),r.layout=s}return r}};return t}},{"../../../constants/alignment":686,"../../../lib":717,d3:165}],836:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../../lib"),i=t("../../../components/color"),o=t("./micropolar"),s=t("./undo_manager"),l=a.extendDeepAll,c=e.exports={};c.framework=function(t){var e,r,a,i,u,h=new s;function f(r,s){return s&&(u=s),n.select(n.select(u).node().parentNode).selectAll(".svg-container>*:not(.chart-root)").remove(),e=e?l(e,r):r,a||(a=o.Axis()),i=o.adapter.plotly().convert(e),a.config(i).render(u),t.data=e.data,t.layout=e.layout,c.fillLayout(t),e}return f.isPolar=!0,f.svg=function(){return a.svg()},f.getConfig=function(){return e},f.getLiveConfig=function(){return o.adapter.plotly().convert(a.getLiveConfig(),!0)},f.getLiveScales=function(){return{t:a.angularScale(),r:a.radialScale()}},f.setUndoPoint=function(){var t,n,a=this,i=o.util.cloneJson(e);t=i,n=r,h.add({undo:function(){n&&a(n)},redo:function(){a(t)}}),r=o.util.cloneJson(i)},f.undo=function(){h.undo()},f.redo=function(){h.redo()},f},c.fillLayout=function(t){var e=n.select(t).selectAll(".plot-container"),r=e.selectAll(".svg-container"),a=t.framework&&t.framework.svg&&t.framework.svg(),o={width:800,height:600,paper_bgcolor:i.background,_container:e,_paperdiv:r,_paper:a};t._fullLayout=l(o,t.layout)}},{"../../../components/color":591,"../../../lib":717,"./micropolar":835,"./undo_manager":837,d3:165}],837:[function(t,e,r){"use strict";e.exports=function(){var t,e=[],r=-1,n=!1;function a(t,e){return t?(n=!0,t[e](),n=!1,this):this}return{add:function(t){return n?this:(e.splice(r+1,e.length-r),e.push(t),r=e.length-1,this)},setCallback:function(e){t=e},undo:function(){var n=e[r];return n?(a(n,"undo"),r-=1,t&&t(n.undo),this):this},redo:function(){var n=e[r+1];return n?(a(n,"redo"),r+=1,t&&t(n.redo),this):this},clear:function(){e=[],r=-1},hasUndo:function(){return-1!==r},hasRedo:function(){return r<e.length-1},getCommands:function(){return e},getPreviousCommand:function(){return e[r-1]},getIndex:function(){return r}}}},{}],838:[function(t,e,r){"use strict";var n=t("d3"),a=t("tinycolor2"),i=t("../../registry"),o=t("../../lib"),s=t("../../components/color"),l=t("../../components/drawing"),c=t("../plots"),u=t("../../plots/cartesian/axes"),h=t("../cartesian/set_convert"),f=t("./set_convert"),p=t("../cartesian/autorange").doAutoRange,d=t("../cartesian/dragbox"),g=t("../../components/dragelement"),v=t("../../components/fx"),m=t("../../components/titles"),y=t("../cartesian/select").prepSelect,x=t("../cartesian/select").selectOnClick,b=t("../cartesian/select").clearSelect,_=t("../../lib/setcursor"),w=t("../../lib/clear_gl_canvases"),k=t("../../plot_api/subroutines").redrawReglTraces,T=t("../../constants/alignment").MID_SHIFT,M=t("./constants"),A=t("./helpers"),S=o._,E=o.mod,L=o.deg2rad,C=o.rad2deg;function P(t,e){this.id=e,this.gd=t,this._hasClipOnAxisFalse=null,this.vangles=null,this.radialAxisAngle=null,this.traceHash={},this.layers={},this.clipPaths={},this.clipIds={},this.viewInitial={};var r=t._fullLayout,n="clip"+r._uid+e;this.clipIds.forTraces=n+"-for-traces",this.clipPaths.forTraces=r._clips.append("clipPath").attr("id",this.clipIds.forTraces),this.clipPaths.forTraces.append("path"),this.framework=r._polarlayer.append("g").attr("class",e),this.radialTickLayout=null,this.angularTickLayout=null}var O=P.prototype;function z(t){var e=t.ticks+String(t.ticklen)+String(t.showticklabels);return"side"in t&&(e+=t.side),e}function I(t,e){return e[o.findIndexOfMin(e,function(e){return o.angleDist(t,e)})]}function D(t,e,r){return e?(t.attr("display",null),t.attr(r)):t&&t.attr("display","none"),t}function R(t,e){return"translate("+t+","+e+")"}function F(t){return"rotate("+t+")"}e.exports=function(t,e){return new P(t,e)},O.plot=function(t,e){var r=e[this.id];this._hasClipOnAxisFalse=!1;for(var n=0;n<t.length;n++){if(!1===t[n][0].trace.cliponaxis){this._hasClipOnAxisFalse=!0;break}}this.updateLayers(e,r),this.updateLayout(e,r),c.generalUpdatePerTraceModule(this.gd,this,t,r),this.updateFx(e,r)},O.updateLayers=function(t,e){var r=this.layers,a=e.radialaxis,i=e.angularaxis,o=M.layerNames,s=o.indexOf("frontplot"),l=o.slice(0,s),c="below traces"===i.layer,u="below traces"===a.layer;c&&l.push("angular-line"),u&&l.push("radial-line"),c&&l.push("angular-axis"),u&&l.push("radial-axis"),l.push("frontplot"),c||l.push("angular-line"),u||l.push("radial-line"),c||l.push("angular-axis"),u||l.push("radial-axis");var h=this.framework.selectAll(".polarsublayer").data(l,String);h.enter().append("g").attr("class",function(t){return"polarsublayer "+t}).each(function(t){var e=r[t]=n.select(this);switch(t){case"frontplot":e.append("g").classed("barlayer",!0),e.append("g").classed("scatterlayer",!0);break;case"backplot":e.append("g").classed("maplayer",!0);break;case"plotbg":r.bg=e.append("path");break;case"radial-grid":case"angular-grid":e.style("fill","none");break;case"radial-line":e.append("line").style("fill","none");break;case"angular-line":e.append("path").style("fill","none")}}),h.order()},O.updateLayout=function(t,e){var r=this.layers,n=t._size,a=e.radialaxis,i=e.angularaxis,o=e.domain.x,c=e.domain.y;this.xOffset=n.l+n.w*o[0],this.yOffset=n.t+n.h*(1-c[1]);var u=this.xLength=n.w*(o[1]-o[0]),h=this.yLength=n.h*(c[1]-c[0]),f=e.sector;this.sectorInRad=f.map(L);var p,d,g,v,m,y=this.sectorBBox=function(t){var e,r,n,a,i=t[0],o=t[1]-i,s=E(i,360),l=s+o,c=Math.cos(L(s)),u=Math.sin(L(s)),h=Math.cos(L(l)),f=Math.sin(L(l));a=s<=90&&l>=90||s>90&&l>=450?1:u<=0&&f<=0?0:Math.max(u,f);e=s<=180&&l>=180||s>180&&l>=540?-1:c>=0&&h>=0?0:Math.min(c,h);r=s<=270&&l>=270||s>270&&l>=630?-1:u>=0&&f>=0?0:Math.min(u,f);n=l>=360?1:c<=0&&h<=0?0:Math.max(c,h);return[e,r,n,a]}(f),x=y[2]-y[0],b=y[3]-y[1],_=h/u,w=Math.abs(b/x);_>w?(p=u,m=(h-(d=u*w))/n.h/2,g=[o[0],o[1]],v=[c[0]+m,c[1]-m]):(d=h,m=(u-(p=h/w))/n.w/2,g=[o[0]+m,o[1]-m],v=[c[0],c[1]]),this.xLength2=p,this.yLength2=d,this.xDomain2=g,this.yDomain2=v;var k=this.xOffset2=n.l+n.w*g[0],T=this.yOffset2=n.t+n.h*(1-v[1]),M=this.radius=p/x,A=this.innerRadius=e.hole*M,S=this.cx=k-M*y[0],C=this.cy=T+M*y[3],P=this.cxx=S-k,O=this.cyy=C-T;this.radialAxis=this.mockAxis(t,e,a,{_id:"x",side:{counterclockwise:"top",clockwise:"bottom"}[a.side],domain:[A/n.w,M/n.w]}),this.angularAxis=this.mockAxis(t,e,i,{side:"right",domain:[0,Math.PI],autorange:!1}),this.doAutoRange(t,e),this.updateAngularAxis(t,e),this.updateRadialAxis(t,e),this.updateRadialAxisTitle(t,e),this.xaxis=this.mockCartesianAxis(t,e,{_id:"x",domain:g}),this.yaxis=this.mockCartesianAxis(t,e,{_id:"y",domain:v});var z=this.pathSubplot();this.clipPaths.forTraces.select("path").attr("d",z).attr("transform",R(P,O)),r.frontplot.attr("transform",R(k,T)).call(l.setClipUrl,this._hasClipOnAxisFalse?null:this.clipIds.forTraces,this.gd),r.bg.attr("d",z).attr("transform",R(S,C)).call(s.fill,e.bgcolor)},O.mockAxis=function(t,e,r,n){var a=o.extendFlat({},r,n);return f(a,e,t),a},O.mockCartesianAxis=function(t,e,r){var n=this,a=r._id,i=o.extendFlat({type:"linear"},r);h(i,t);var s={x:[0,2],y:[1,3]};return i.setRange=function(){var t=n.sectorBBox,r=s[a],o=n.radialAxis._rl,l=(o[1]-o[0])/(1-e.hole);i.range=[t[r[0]]*l,t[r[1]]*l]},i.isPtWithinRange="x"===a?function(t){return n.isPtInside(t)}:function(){return!0},i.setRange(),i.setScale(),i},O.doAutoRange=function(t,e){var r=this.gd,n=this.radialAxis,a=e.radialaxis;n.setScale(),p(r,n);var i=n.range;a.range=i.slice(),a._input.range=i.slice(),n._rl=[n.r2l(i[0],null,"gregorian"),n.r2l(i[1],null,"gregorian")]},O.updateRadialAxis=function(t,e){var r=this,n=r.gd,a=r.layers,i=r.radius,l=r.innerRadius,c=r.cx,h=r.cy,f=e.radialaxis,p=E(e.sector[0],360),d=r.radialAxis,g=l<i;r.fillViewInitialKey("radialaxis.angle",f.angle),r.fillViewInitialKey("radialaxis.range",d.range.slice()),d.setGeometry(),"auto"===d.tickangle&&p>90&&p<=270&&(d.tickangle=180);var v=function(t){return"translate("+(d.l2p(t.x)+l)+",0)"},m=z(f);if(r.radialTickLayout!==m&&(a["radial-axis"].selectAll(".xtick").remove(),r.radialTickLayout=m),g){d.setScale();var y=u.calcTicks(d),x=u.clipEnds(d,y),b=u.getTickSigns(d)[2];u.drawTicks(n,d,{vals:y,layer:a["radial-axis"],path:u.makeTickPath(d,0,b),transFn:v,crisp:!1}),u.drawGrid(n,d,{vals:x,layer:a["radial-grid"],path:function(t){return r.pathArc(d.r2p(t.x)+l)},transFn:o.noop,crisp:!1}),u.drawLabels(n,d,{vals:y,layer:a["radial-axis"],transFn:v,labelFns:u.makeLabelFns(d,0)})}var _=r.radialAxisAngle=r.vangles?C(I(L(f.angle),r.vangles)):f.angle,w=R(c,h),k=w+F(-_);D(a["radial-axis"],g&&(f.showticklabels||f.ticks),{transform:k}),D(a["radial-grid"],g&&f.showgrid,{transform:w}),D(a["radial-line"].select("line"),g&&f.showline,{x1:l,y1:0,x2:i,y2:0,transform:k}).attr("stroke-width",f.linewidth).call(s.stroke,f.linecolor)},O.updateRadialAxisTitle=function(t,e,r){var n=this.gd,a=this.radius,i=this.cx,o=this.cy,s=e.radialaxis,c=this.id+"title",u=void 0!==r?r:this.radialAxisAngle,h=L(u),f=Math.cos(h),p=Math.sin(h),d=0;if(s.title){var g=l.bBox(this.layers["radial-axis"].node()).height,v=s.title.font.size;d="counterclockwise"===s.side?-g-.4*v:g+.8*v}this.layers["radial-axis-title"]=m.draw(n,c,{propContainer:s,propName:this.id+".radialaxis.title",placeholder:S(n,"Click to enter radial axis title"),attributes:{x:i+a/2*f+d*p,y:o-a/2*p+d*f,"text-anchor":"middle"},transform:{rotate:-u}})},O.updateAngularAxis=function(t,e){var r=this,n=r.gd,a=r.layers,i=r.radius,l=r.innerRadius,c=r.cx,h=r.cy,f=e.angularaxis,p=r.angularAxis;r.fillViewInitialKey("angularaxis.rotation",f.rotation),p.setGeometry(),p.setScale();var d=function(t){return p.t2g(t.x)};"linear"===p.type&&"radians"===p.thetaunit&&(p.tick0=C(p.tick0),p.dtick=C(p.dtick));var g=function(t){return R(c+i*Math.cos(t),h-i*Math.sin(t))},v=u.makeLabelFns(p,0).labelStandoff,m={xFn:function(t){var e=d(t);return Math.cos(e)*v},yFn:function(t){var e=d(t),r=Math.sin(e)>0?.2:1;return-Math.sin(e)*(v+t.fontSize*r)+Math.abs(Math.cos(e))*(t.fontSize*T)},anchorFn:function(t){var e=d(t),r=Math.cos(e);return Math.abs(r)<.1?"middle":r>0?"start":"end"},heightFn:function(t,e,r){var n=d(t);return-.5*(1+Math.sin(n))*r}},y=z(f);r.angularTickLayout!==y&&(a["angular-axis"].selectAll("."+p._id+"tick").remove(),r.angularTickLayout=y);var x,b=u.calcTicks(p);if("linear"===e.gridshape?(x=b.map(d),o.angleDelta(x[0],x[1])<0&&(x=x.slice().reverse())):x=null,r.vangles=x,"category"===p.type&&(b=b.filter(function(t){return o.isAngleInsideSector(d(t),r.sectorInRad)})),p.visible){var _="inside"===p.ticks?-1:1,w=(p.linewidth||1)/2;u.drawTicks(n,p,{vals:b,layer:a["angular-axis"],path:"M"+_*w+",0h"+_*p.ticklen,transFn:function(t){var e=d(t);return g(e)+F(-C(e))},crisp:!1}),u.drawGrid(n,p,{vals:b,layer:a["angular-grid"],path:function(t){var e=d(t),r=Math.cos(e),n=Math.sin(e);return"M"+[c+l*r,h-l*n]+"L"+[c+i*r,h-i*n]},transFn:o.noop,crisp:!1}),u.drawLabels(n,p,{vals:b,layer:a["angular-axis"],repositionOnUpdate:!0,transFn:function(t){return g(d(t))},labelFns:m})}D(a["angular-line"].select("path"),f.showline,{d:r.pathSubplot(),transform:R(c,h)}).attr("stroke-width",f.linewidth).call(s.stroke,f.linecolor)},O.updateFx=function(t,e){this.gd._context.staticPlot||(this.updateAngularDrag(t),this.updateRadialDrag(t,e,0),this.updateRadialDrag(t,e,1),this.updateMainDrag(t))},O.updateMainDrag=function(t){var e=this,r=e.gd,o=e.layers,s=t._zoomlayer,l=M.MINZOOM,c=M.OFFEDGE,u=e.radius,h=e.innerRadius,f=e.cx,p=e.cy,m=e.cxx,_=e.cyy,w=e.sectorInRad,k=e.vangles,T=e.radialAxis,S=A.clampTiny,E=A.findXYatLength,L=A.findEnclosingVertexAngles,C=M.cornerHalfWidth,P=M.cornerLen/2,O=d.makeDragger(o,"path","maindrag","crosshair");n.select(O).attr("d",e.pathSubplot()).attr("transform",R(f,p));var z,I,D,F,B,N,j,V,U,q={element:O,gd:r,subplot:e.id,plotinfo:{id:e.id,xaxis:e.xaxis,yaxis:e.yaxis},xaxes:[e.xaxis],yaxes:[e.yaxis]};function H(t,e){return Math.sqrt(t*t+e*e)}function G(t,e){return H(t-m,e-_)}function Y(t,e){return Math.atan2(_-e,t-m)}function W(t,e){return[t*Math.cos(e),t*Math.sin(-e)]}function X(t,r){if(0===t)return e.pathSector(2*C);var n=P/t,a=r-n,i=r+n,o=Math.max(0,Math.min(t,u)),s=o-C,l=o+C;return"M"+W(s,a)+"A"+[s,s]+" 0,0,0 "+W(s,i)+"L"+W(l,i)+"A"+[l,l]+" 0,0,1 "+W(l,a)+"Z"}function Z(t,r,n){if(0===t)return e.pathSector(2*C);var a,i,o=W(t,r),s=W(t,n),l=S((o[0]+s[0])/2),c=S((o[1]+s[1])/2);if(l&&c){var u=c/l,h=-1/u,f=E(C,u,l,c);a=E(P,h,f[0][0],f[0][1]),i=E(P,h,f[1][0],f[1][1])}else{var p,d;c?(p=P,d=C):(p=C,d=P),a=[[l-p,c-d],[l+p,c-d]],i=[[l-p,c+d],[l+p,c+d]]}return"M"+a.join("L")+"L"+i.reverse().join("L")+"Z"}function J(t,e){return e=Math.max(Math.min(e,u),h),t<c?t=0:u-t<c?t=u:e<c?e=0:u-e<c&&(e=u),Math.abs(e-t)>l?(t<e?(D=t,F=e):(D=e,F=t),!0):(D=null,F=null,!1)}function K(t,e){t=t||B,e=e||"M0,0Z",V.attr("d",t),U.attr("d",e),d.transitionZoombox(V,U,N,j),N=!0;var n={};rt(n),r.emit("plotly_relayouting",n)}function Q(t,r){var n,a,i=z+t,o=I+r,s=G(z,I),l=Math.min(G(i,o),u),c=Y(z,I);J(s,l)&&(n=B+e.pathSector(F),D&&(n+=e.pathSector(D)),a=X(D,c)+X(F,c)),K(n,a)}function $(t,e,r,n){var a=A.findIntersectionXY(r,n,r,[t-m,_-e]);return H(a[0],a[1])}function tt(t,r){var n,a,i=z+t,o=I+r,s=Y(z,I),l=Y(i,o),c=L(s,k),h=L(l,k);J($(z,I,c[0],c[1]),Math.min($(i,o,h[0],h[1]),u))&&(n=B+e.pathSector(F),D&&(n+=e.pathSector(D)),a=[Z(D,c[0],c[1]),Z(F,c[0],c[1])].join(" ")),K(n,a)}function et(){if(d.removeZoombox(r),null!==D&&null!==F){var t={};rt(t),d.showDoubleClickNotifier(r),i.call("_guiRelayout",r,t)}}function rt(t){var r=T._rl,n=(r[1]-r[0])/(1-h/u)/u,a=[r[0]+(D-h)*n,r[0]+(F-h)*n];t[e.id+".radialaxis.range"]=a}function nt(t,n){var a=r._fullLayout.clickmode;if(d.removeZoombox(r),2===t){var o={};for(var s in e.viewInitial)o[e.id+"."+s]=e.viewInitial[s];r.emit("plotly_doubleclick",null),i.call("_guiRelayout",r,o)}a.indexOf("select")>-1&&1===t&&x(n,r,[e.xaxis],[e.yaxis],e.id,q),a.indexOf("event")>-1&&v.click(r,n,e.id)}q.prepFn=function(t,n,i){var o=r._fullLayout.dragmode,l=O.getBoundingClientRect();if(z=n-l.left,I=i-l.top,k){var c=A.findPolygonOffset(u,w[0],w[1],k);z+=m+c[0],I+=_+c[1]}switch(o){case"zoom":q.moveFn=k?tt:Q,q.clickFn=nt,q.doneFn=et,function(){D=null,F=null,B=e.pathSubplot(),N=!1;var t=r._fullLayout[e.id];j=a(t.bgcolor).getLuminance(),(V=d.makeZoombox(s,j,f,p,B)).attr("fill-rule","evenodd"),U=d.makeCorners(s,f,p),b(r)}();break;case"select":case"lasso":y(t,n,i,q,o)}},O.onmousemove=function(t){v.hover(r,t,e.id),r._fullLayout._lasthover=O,r._fullLayout._hoversubplot=e.id},O.onmouseout=function(t){r._dragging||g.unhover(r,t)},g.init(q)},O.updateRadialDrag=function(t,e,r){var a=this,s=a.gd,l=a.layers,c=a.radius,u=a.innerRadius,h=a.cx,f=a.cy,p=a.radialAxis,v=M.radialDragBoxSize,m=v/2;if(p.visible){var y,x,_,T=L(a.radialAxisAngle),A=p._rl,S=A[0],E=A[1],P=A[r],O=.75*(A[1]-A[0])/(1-e.hole)/c;r?(y=h+(c+m)*Math.cos(T),x=f-(c+m)*Math.sin(T),_="radialdrag"):(y=h+(u-m)*Math.cos(T),x=f-(u-m)*Math.sin(T),_="radialdrag-inner");var z,B,N,j=d.makeRectDragger(l,_,"crosshair",-m,-m,v,v),V={element:j,gd:s};D(n.select(j),p.visible&&u<c,{transform:R(y,x)}),V.prepFn=function(){z=null,B=null,N=null,V.moveFn=U,V.doneFn=q,b(s)},V.clampFn=function(t,e){return Math.sqrt(t*t+e*e)<M.MINDRAG&&(t=0,e=0),[t,e]},g.init(V)}function U(t,e){if(z)z(t,e);else{var n=[t,-e],i=[Math.cos(T),Math.sin(T)],l=Math.abs(o.dot(n,i)/Math.sqrt(o.dot(n,n)));isNaN(l)||(z=l<.5?H:G)}var c={};!function(t){null!==B?t[a.id+".radialaxis.angle"]=B:null!==N&&(t[a.id+".radialaxis.range["+r+"]"]=N)}(c),s.emit("plotly_relayouting",c)}function q(){null!==B?i.call("_guiRelayout",s,a.id+".radialaxis.angle",B):null!==N&&i.call("_guiRelayout",s,a.id+".radialaxis.range["+r+"]",N)}function H(t,e){if(0!==r){var n=y+t,i=x+e;B=Math.atan2(f-i,n-h),a.vangles&&(B=I(B,a.vangles)),B=C(B);var o=R(h,f)+F(-B);l["radial-axis"].attr("transform",o),l["radial-line"].select("line").attr("transform",o);var s=a.gd._fullLayout,c=s[a.id];a.updateRadialAxisTitle(s,c,B)}}function G(t,e){var n=o.dot([t,-e],[Math.cos(T),Math.sin(T)]);if(N=P-O*n,O>0==(r?N>S:N<E)){var l=s._fullLayout,c=l[a.id];p.range[r]=N,p._rl[r]=N,a.updateRadialAxis(l,c),a.xaxis.setRange(),a.xaxis.setScale(),a.yaxis.setRange(),a.yaxis.setScale();var u=!1;for(var h in a.traceHash){var f=a.traceHash[h],d=o.filterVisible(f);f[0][0].trace._module.plot(s,a,d,c),i.traceIs(h,"gl")&&d.length&&(u=!0)}u&&(w(s),k(s))}else N=null}},O.updateAngularDrag=function(t){var e=this,r=e.gd,a=e.layers,s=e.radius,c=e.angularAxis,u=e.cx,h=e.cy,f=e.cxx,p=e.cyy,v=M.angularDragBoxSize,m=d.makeDragger(a,"path","angulardrag","move"),y={element:m,gd:r};function x(t,e){return Math.atan2(p+v-e,t-f-v)}n.select(m).attr("d",e.pathAnnulus(s,s+v)).attr("transform",R(u,h)).call(_,"move");var T,A,S,E,L,P,O=a.frontplot.select(".scatterlayer").selectAll(".trace"),z=O.selectAll(".point"),I=O.selectAll(".textpoint");function D(t,s){var d=e.gd._fullLayout,g=d[e.id],v=x(T+t,A+s),m=C(v-P);if(E=S+m,a.frontplot.attr("transform",R(e.xOffset2,e.yOffset2)+F([-m,f,p])),e.vangles){L=e.radialAxisAngle+m;var y=R(u,h)+F(-m),b=R(u,h)+F(-L);a.bg.attr("transform",y),a["radial-grid"].attr("transform",y),a["radial-axis"].attr("transform",b),a["radial-line"].select("line").attr("transform",b),e.updateRadialAxisTitle(d,g,L)}else e.clipPaths.forTraces.select("path").attr("transform",R(f,p)+F(m));z.each(function(){var t=n.select(this),e=l.getTranslate(t);t.attr("transform",R(e.x,e.y)+F([m]))}),I.each(function(){var t=n.select(this),e=t.select("text"),r=l.getTranslate(t);t.attr("transform",F([m,e.attr("x"),e.attr("y")])+R(r.x,r.y))}),c.rotation=o.modHalf(E,360),e.updateAngularAxis(d,g),e._hasClipOnAxisFalse&&!o.isFullCircle(e.sectorInRad)&&O.call(l.hideOutsideRangePoints,e);var _=!1;for(var M in e.traceHash)if(i.traceIs(M,"gl")){var D=e.traceHash[M],N=o.filterVisible(D);D[0][0].trace._module.plot(r,e,N,g),N.length&&(_=!0)}_&&(w(r),k(r));var j={};B(j),r.emit("plotly_relayouting",j)}function B(t){t[e.id+".angularaxis.rotation"]=E,e.vangles&&(t[e.id+".radialaxis.angle"]=L)}function N(){I.select("text").attr("transform",null);var t={};B(t),i.call("_guiRelayout",r,t)}y.prepFn=function(n,a,i){var o=t[e.id];S=o.angularaxis.rotation;var s=m.getBoundingClientRect();T=a-s.left,A=i-s.top,P=x(T,A),y.moveFn=D,y.doneFn=N,b(r)},e.vangles&&!o.isFullCircle(e.sectorInRad)&&(y.prepFn=o.noop,_(n.select(m),null)),g.init(y)},O.isPtInside=function(t){var e=this.sectorInRad,r=this.vangles,n=this.angularAxis.c2g(t.theta),a=this.radialAxis,i=a.c2l(t.r),s=a._rl;return(r?A.isPtInsidePolygon:o.isPtInsideSector)(i,n,s,e,r)},O.pathArc=function(t){var e=this.sectorInRad,r=this.vangles;return(r?A.pathPolygon:o.pathArc)(t,e[0],e[1],r)},O.pathSector=function(t){var e=this.sectorInRad,r=this.vangles;return(r?A.pathPolygon:o.pathSector)(t,e[0],e[1],r)},O.pathAnnulus=function(t,e){var r=this.sectorInRad,n=this.vangles;return(n?A.pathPolygonAnnulus:o.pathAnnulus)(t,e,r[0],r[1],n)},O.pathSubplot=function(){var t=this.innerRadius,e=this.radius;return t?this.pathAnnulus(t,e):this.pathSector(e)},O.fillViewInitialKey=function(t,e){t in this.viewInitial||(this.viewInitial[t]=e)}},{"../../components/color":591,"../../components/dragelement":609,"../../components/drawing":612,"../../components/fx":630,"../../components/titles":679,"../../constants/alignment":686,"../../lib":717,"../../lib/clear_gl_canvases":702,"../../lib/setcursor":737,"../../plot_api/subroutines":756,"../../plots/cartesian/axes":765,"../../registry":846,"../cartesian/autorange":764,"../cartesian/dragbox":773,"../cartesian/select":782,"../cartesian/set_convert":783,"../plots":826,"./constants":827,"./helpers":828,"./set_convert":839,d3:165,tinycolor2:535}],839:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../cartesian/set_convert"),i=n.deg2rad,o=n.rad2deg;e.exports=function(t,e,r){switch(a(t,r),t._id){case"x":case"radialaxis":!function(t,e){var r=e._subplot;t.setGeometry=function(){var e=t._rl[0],n=t._rl[1],a=r.innerRadius,i=(r.radius-a)/(n-e),o=a/i,s=e>n?function(t){return t<=0}:function(t){return t>=0};t.c2g=function(r){var n=t.c2l(r)-e;return(s(n)?n:0)+o},t.g2c=function(r){return t.l2c(r+e-o)},t.g2p=function(t){return t*i},t.c2p=function(e){return t.g2p(t.c2g(e))}}}(t,e);break;case"angularaxis":!function(t,e){var r=t.type;if("linear"===r){var a=t.d2c,s=t.c2d;t.d2c=function(t,e){return function(t,e){return"degrees"===e?i(t):t}(a(t),e)},t.c2d=function(t,e){return s(function(t,e){return"degrees"===e?o(t):t}(t,e))}}t.makeCalcdata=function(e,a){var i,o,s=e[a],l=e._length,c=function(r){return t.d2c(r,e.thetaunit)};if(s){if(n.isTypedArray(s)&&"linear"===r){if(l===s.length)return s;if(s.subarray)return s.subarray(0,l)}for(i=new Array(l),o=0;o<l;o++)i[o]=c(s[o])}else{var u=a+"0",h="d"+a,f=u in e?c(e[u]):0,p=e[h]?c(e[h]):(t.period||2*Math.PI)/l;for(i=new Array(l),o=0;o<l;o++)i[o]=f+o*p}return i},t.setGeometry=function(){var a,s,l,c,u=e.sector,h=u.map(i),f={clockwise:-1,counterclockwise:1}[t.direction],p=i(t.rotation),d=function(t){return f*t+p},g=function(t){return(t-p)/f};switch(r){case"linear":s=a=n.identity,c=i,l=o,t.range=n.isFullCircle(h)?[u[0],u[0]+360]:h.map(g).map(o);break;case"category":var v=t._categories.length,m=t.period?Math.max(t.period,v):v;0===m&&(m=1),s=c=function(t){return 2*t*Math.PI/m},a=l=function(t){return t*m/Math.PI/2},t.range=[0,m]}t.c2g=function(t){return d(s(t))},t.g2c=function(t){return a(g(t))},t.t2g=function(t){return d(c(t))},t.g2t=function(t){return l(g(t))}}}(t,e)}}},{"../../lib":717,"../cartesian/set_convert":783}],840:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../plot_api/plot_template"),i=t("./domain").defaults;e.exports=function(t,e,r,o){var s,l,c=o.type,u=o.attributes,h=o.handleDefaults,f=o.partition||"x",p=e._subplots[c],d=p.length,g=d&&p[0].replace(/\d+$/,"");function v(t,e){return n.coerce(s,l,u,t,e)}for(var m=0;m<d;m++){var y=p[m];s=t[y]?t[y]:t[y]={},l=a.newContainer(e,y,g),v("uirevision",e.uirevision);var x={};x[f]=[m/d,(m+1)/d],i(l,e,v,x),o.id=y,h(s,l,v,o)}}},{"../lib":717,"../plot_api/plot_template":755,"./domain":790}],841:[function(t,e,r){"use strict";['Variables are inserted using %{variable}, for example "y: %{y}".','Numbers are formatted using d3-format\'s syntax %{variable:d3-format}, for example "Price: %{y:$.2f}".',t("../constants/docs").FORMAT_LINK,"for details on the formatting syntax.",'Dates are formatted using d3-time-format\'s syntax %{variable|d3-time-format}, for example "Day: %{2019-01-01|%A}".',t("../constants/docs").DATE_FORMAT_LINK,"for details on the date formatting syntax."].join(" ");function n(t){var e=t.description?" "+t.description:"",r=t.keys||[];if(r.length>0){for(var n=[],a=0;a<r.length;a++)n[a]="`"+r[a]+"`";e+="Finally, the template string has access to ",e=1===r.length?"variable "+n[0]:"variables "+n.slice(0,-1).join(", ")+" and "+n.slice(-1)+"."}return e}r.hovertemplateAttrs=function(t,e){t=t||{};n(e=e||{});var r={valType:"string",dflt:"",editType:t.editType||"none"};return!1!==t.arrayOk&&(r.arrayOk=!0),r},r.texttemplateAttrs=function(t,e){t=t||{};n(e=e||{});var r={valType:"string",dflt:"",editType:t.editType||"calc"};return!1!==t.arrayOk&&(r.arrayOk=!0),r}},{"../constants/docs":688}],842:[function(t,e,r){"use strict";var n=t("./ternary"),a=t("../../plots/get_data").getSubplotCalcData,i=t("../../lib").counterRegex;r.name="ternary";var o=r.attr="subplot";r.idRoot="ternary",r.idRegex=r.attrRegex=i("ternary"),(r.attributes={})[o]={valType:"subplotid",dflt:"ternary",editType:"calc"},r.layoutAttributes=t("./layout_attributes"),r.supplyLayoutDefaults=t("./layout_defaults"),r.plot=function(t){for(var e=t._fullLayout,r=t.calcdata,i=e._subplots.ternary,o=0;o<i.length;o++){var s=i[o],l=a(r,"ternary",s),c=e[s]._subplot;c||(c=new n({id:s,graphDiv:t,container:e._ternarylayer.node()},e),e[s]._subplot=c),c.plot(l,e,t._promises)}},r.clean=function(t,e,r,n){for(var a=n._subplots.ternary||[],i=0;i<a.length;i++){var o=a[i],s=n[o]._subplot;!e[o]&&s&&(s.plotContainer.remove(),s.clipDef.remove(),s.clipDefRelative.remove(),s.layers["a-title"].remove(),s.layers["b-title"].remove(),s.layers["c-title"].remove())}}},{"../../lib":717,"../../plots/get_data":800,"./layout_attributes":843,"./layout_defaults":844,"./ternary":845}],843:[function(t,e,r){"use strict";var n=t("../../components/color/attributes"),a=t("../domain").attributes,i=t("../cartesian/layout_attributes"),o=t("../../plot_api/edit_types").overrideAll,s=t("../../lib/extend").extendFlat,l={title:{text:i.title.text,font:i.title.font},color:i.color,tickmode:i.tickmode,nticks:s({},i.nticks,{dflt:6,min:1}),tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,showticklabels:i.showticklabels,showtickprefix:i.showtickprefix,tickprefix:i.tickprefix,showticksuffix:i.showticksuffix,ticksuffix:i.ticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,separatethousands:i.separatethousands,tickfont:i.tickfont,tickangle:i.tickangle,tickformat:i.tickformat,tickformatstops:i.tickformatstops,hoverformat:i.hoverformat,showline:s({},i.showline,{dflt:!0}),linecolor:i.linecolor,linewidth:i.linewidth,showgrid:s({},i.showgrid,{dflt:!0}),gridcolor:i.gridcolor,gridwidth:i.gridwidth,layer:i.layer,min:{valType:"number",dflt:0,min:0},_deprecated:{title:i._deprecated.title,titlefont:i._deprecated.titlefont}},c=e.exports=o({domain:a({name:"ternary"}),bgcolor:{valType:"color",dflt:n.background},sum:{valType:"number",dflt:1,min:0},aaxis:l,baxis:l,caxis:l},"plot","from-root");c.uirevision={valType:"any",editType:"none"},c.aaxis.uirevision=c.baxis.uirevision=c.caxis.uirevision={valType:"any",editType:"none"}},{"../../components/color/attributes":590,"../../lib/extend":708,"../../plot_api/edit_types":748,"../cartesian/layout_attributes":777,"../domain":790}],844:[function(t,e,r){"use strict";var n=t("../../components/color"),a=t("../../plot_api/plot_template"),i=t("../../lib"),o=t("../subplot_defaults"),s=t("../cartesian/tick_label_defaults"),l=t("../cartesian/tick_mark_defaults"),c=t("../cartesian/tick_value_defaults"),u=t("../cartesian/line_grid_defaults"),h=t("./layout_attributes"),f=["aaxis","baxis","caxis"];function p(t,e,r,i){var o,s,l,c=r("bgcolor"),u=r("sum");i.bgColor=n.combine(c,i.paper_bgcolor);for(var h=0;h<f.length;h++)s=t[o=f[h]]||{},(l=a.newContainer(e,o))._name=o,d(s,l,i,e);var p=e.aaxis,g=e.baxis,v=e.caxis;p.min+g.min+v.min>=u&&(p.min=0,g.min=0,v.min=0,t.aaxis&&delete t.aaxis.min,t.baxis&&delete t.baxis.min,t.caxis&&delete t.caxis.min)}function d(t,e,r,n){var a=h[e._name];function o(r,n){return i.coerce(t,e,a,r,n)}o("uirevision",n.uirevision),e.type="linear";var f=o("color"),p=f!==a.color.dflt?f:r.font.color,d=e._name.charAt(0).toUpperCase(),g="Component "+d,v=o("title.text",g);e._hovertitle=v===g?v:d,i.coerceFont(o,"title.font",{family:r.font.family,size:Math.round(1.2*r.font.size),color:p}),o("min"),c(t,e,o,"linear"),s(t,e,o,"linear",{}),l(t,e,o,{outerTicks:!0}),o("showticklabels")&&(i.coerceFont(o,"tickfont",{family:r.font.family,size:r.font.size,color:p}),o("tickangle"),o("tickformat")),u(t,e,o,{dfltColor:f,bgColor:r.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:a}),o("hoverformat"),o("layer")}e.exports=function(t,e,r){o(t,e,r,{type:"ternary",attributes:h,handleDefaults:p,font:e.font,paper_bgcolor:e.paper_bgcolor})}},{"../../components/color":591,"../../lib":717,"../../plot_api/plot_template":755,"../cartesian/line_grid_defaults":779,"../cartesian/tick_label_defaults":784,"../cartesian/tick_mark_defaults":785,"../cartesian/tick_value_defaults":786,"../subplot_defaults":840,"./layout_attributes":843}],845:[function(t,e,r){"use strict";var n=t("d3"),a=t("tinycolor2"),i=t("../../registry"),o=t("../../lib"),s=o._,l=t("../../components/color"),c=t("../../components/drawing"),u=t("../cartesian/set_convert"),h=t("../../lib/extend").extendFlat,f=t("../plots"),p=t("../cartesian/axes"),d=t("../../components/dragelement"),g=t("../../components/fx"),v=t("../../components/titles"),m=t("../cartesian/select").prepSelect,y=t("../cartesian/select").selectOnClick,x=t("../cartesian/select").clearSelect,b=t("../cartesian/constants");function _(t,e){this.id=t.id,this.graphDiv=t.graphDiv,this.init(e),this.makeFramework(e),this.aTickLayout=null,this.bTickLayout=null,this.cTickLayout=null}e.exports=_;var w=_.prototype;w.init=function(t){this.container=t._ternarylayer,this.defs=t._defs,this.layoutId=t._uid,this.traceHash={},this.layers={}},w.plot=function(t,e){var r=e[this.id],n=e._size;this._hasClipOnAxisFalse=!1;for(var a=0;a<t.length;a++){if(!1===t[a][0].trace.cliponaxis){this._hasClipOnAxisFalse=!0;break}}this.updateLayers(r),this.adjustLayout(r,n),f.generalUpdatePerTraceModule(this.graphDiv,this,t,r),this.layers.plotbg.select("path").call(l.fill,r.bgcolor)},w.makeFramework=function(t){var e=this.graphDiv,r=t[this.id],n=this.clipId="clip"+this.layoutId+this.id,a=this.clipIdRelative="clip-relative"+this.layoutId+this.id;this.clipDef=o.ensureSingleById(t._clips,"clipPath",n,function(t){t.append("path").attr("d","M0,0Z")}),this.clipDefRelative=o.ensureSingleById(t._clips,"clipPath",a,function(t){t.append("path").attr("d","M0,0Z")}),this.plotContainer=o.ensureSingle(this.container,"g",this.id),this.updateLayers(r),c.setClipUrl(this.layers.backplot,n,e),c.setClipUrl(this.layers.grids,n,e)},w.updateLayers=function(t){var e=this.layers,r=["draglayer","plotbg","backplot","grids"];"below traces"===t.aaxis.layer&&r.push("aaxis","aline"),"below traces"===t.baxis.layer&&r.push("baxis","bline"),"below traces"===t.caxis.layer&&r.push("caxis","cline"),r.push("frontplot"),"above traces"===t.aaxis.layer&&r.push("aaxis","aline"),"above traces"===t.baxis.layer&&r.push("baxis","bline"),"above traces"===t.caxis.layer&&r.push("caxis","cline");var a=this.plotContainer.selectAll("g.toplevel").data(r,String),i=["agrid","bgrid","cgrid"];a.enter().append("g").attr("class",function(t){return"toplevel "+t}).each(function(t){var r=n.select(this);e[t]=r,"frontplot"===t?r.append("g").classed("scatterlayer",!0):"backplot"===t?r.append("g").classed("maplayer",!0):"plotbg"===t?r.append("path").attr("d","M0,0Z"):"aline"===t||"bline"===t||"cline"===t?r.append("path"):"grids"===t&&i.forEach(function(t){e[t]=r.append("g").classed("grid "+t,!0)})}),a.order()};var k=Math.sqrt(4/3);w.adjustLayout=function(t,e){var r,n,a,i,o,s,f=this,p=t.domain,d=(p.x[0]+p.x[1])/2,g=(p.y[0]+p.y[1])/2,v=p.x[1]-p.x[0],m=p.y[1]-p.y[0],y=v*e.w,x=m*e.h,b=t.sum,_=t.aaxis.min,w=t.baxis.min,T=t.caxis.min;y>k*x?a=(i=x)*k:i=(a=y)/k,o=v*a/y,s=m*i/x,r=e.l+e.w*d-a/2,n=e.t+e.h*(1-g)-i/2,f.x0=r,f.y0=n,f.w=a,f.h=i,f.sum=b,f.xaxis={type:"linear",range:[_+2*T-b,b-_-2*w],domain:[d-o/2,d+o/2],_id:"x"},u(f.xaxis,f.graphDiv._fullLayout),f.xaxis.setScale(),f.xaxis.isPtWithinRange=function(t){return t.a>=f.aaxis.range[0]&&t.a<=f.aaxis.range[1]&&t.b>=f.baxis.range[1]&&t.b<=f.baxis.range[0]&&t.c>=f.caxis.range[1]&&t.c<=f.caxis.range[0]},f.yaxis={type:"linear",range:[_,b-w-T],domain:[g-s/2,g+s/2],_id:"y"},u(f.yaxis,f.graphDiv._fullLayout),f.yaxis.setScale(),f.yaxis.isPtWithinRange=function(){return!0};var M=f.yaxis.domain[0],A=f.aaxis=h({},t.aaxis,{range:[_,b-w-T],side:"left",tickangle:(+t.aaxis.tickangle||0)-30,domain:[M,M+s*k],anchor:"free",position:0,_id:"y",_length:a});u(A,f.graphDiv._fullLayout),A.setScale();var S=f.baxis=h({},t.baxis,{range:[b-_-T,w],side:"bottom",domain:f.xaxis.domain,anchor:"free",position:0,_id:"x",_length:a});u(S,f.graphDiv._fullLayout),S.setScale();var E=f.caxis=h({},t.caxis,{range:[b-_-w,T],side:"right",tickangle:(+t.caxis.tickangle||0)+30,domain:[M,M+s*k],anchor:"free",position:0,_id:"y",_length:a});u(E,f.graphDiv._fullLayout),E.setScale();var L="M"+r+","+(n+i)+"h"+a+"l-"+a/2+",-"+i+"Z";f.clipDef.select("path").attr("d",L),f.layers.plotbg.select("path").attr("d",L);var C="M0,"+i+"h"+a+"l-"+a/2+",-"+i+"Z";f.clipDefRelative.select("path").attr("d",C);var P="translate("+r+","+n+")";f.plotContainer.selectAll(".scatterlayer,.maplayer").attr("transform",P),f.clipDefRelative.select("path").attr("transform",null);var O="translate("+(r-S._offset)+","+(n+i)+")";f.layers.baxis.attr("transform",O),f.layers.bgrid.attr("transform",O);var z="translate("+(r+a/2)+","+n+")rotate(30)translate(0,"+-A._offset+")";f.layers.aaxis.attr("transform",z),f.layers.agrid.attr("transform",z);var I="translate("+(r+a/2)+","+n+")rotate(-30)translate(0,"+-E._offset+")";f.layers.caxis.attr("transform",I),f.layers.cgrid.attr("transform",I),f.drawAxes(!0),f.layers.aline.select("path").attr("d",A.showline?"M"+r+","+(n+i)+"l"+a/2+",-"+i:"M0,0").call(l.stroke,A.linecolor||"#000").style("stroke-width",(A.linewidth||0)+"px"),f.layers.bline.select("path").attr("d",S.showline?"M"+r+","+(n+i)+"h"+a:"M0,0").call(l.stroke,S.linecolor||"#000").style("stroke-width",(S.linewidth||0)+"px"),f.layers.cline.select("path").attr("d",E.showline?"M"+(r+a/2)+","+n+"l"+a/2+","+i:"M0,0").call(l.stroke,E.linecolor||"#000").style("stroke-width",(E.linewidth||0)+"px"),f.graphDiv._context.staticPlot||f.initInteractions(),c.setClipUrl(f.layers.frontplot,f._hasClipOnAxisFalse?null:f.clipId,f.graphDiv)},w.drawAxes=function(t){var e=this.graphDiv,r=this.id.substr(7)+"title",n=this.layers,a=this.aaxis,i=this.baxis,o=this.caxis;if(this.drawAx(a),this.drawAx(i),this.drawAx(o),t){var l=Math.max(a.showticklabels?a.tickfont.size/2:0,(o.showticklabels?.75*o.tickfont.size:0)+("outside"===o.ticks?.87*o.ticklen:0)),c=(i.showticklabels?i.tickfont.size:0)+("outside"===i.ticks?i.ticklen:0)+3;n["a-title"]=v.draw(e,"a"+r,{propContainer:a,propName:this.id+".aaxis.title",placeholder:s(e,"Click to enter Component A title"),attributes:{x:this.x0+this.w/2,y:this.y0-a.title.font.size/3-l,"text-anchor":"middle"}}),n["b-title"]=v.draw(e,"b"+r,{propContainer:i,propName:this.id+".baxis.title",placeholder:s(e,"Click to enter Component B title"),attributes:{x:this.x0-c,y:this.y0+this.h+.83*i.title.font.size+c,"text-anchor":"middle"}}),n["c-title"]=v.draw(e,"c"+r,{propContainer:o,propName:this.id+".caxis.title",placeholder:s(e,"Click to enter Component C title"),attributes:{x:this.x0+this.w+c,y:this.y0+this.h+.83*o.title.font.size+c,"text-anchor":"middle"}})}},w.drawAx=function(t){var e,r=this.graphDiv,n=t._name,a=n.charAt(0),i=t._id,s=this.layers[n],l=a+"tickLayout",c=(e=t).ticks+String(e.ticklen)+String(e.showticklabels);this[l]!==c&&(s.selectAll("."+i+"tick").remove(),this[l]=c),t.setScale();var u=p.calcTicks(t),h=p.clipEnds(t,u),f=p.makeTransFn(t),d=p.getTickSigns(t)[2],g=o.deg2rad(30),v=d*(t.linewidth||1)/2,m=d*t.ticklen,y=this.w,x=this.h,b="b"===a?"M0,"+v+"l"+Math.sin(g)*m+","+Math.cos(g)*m:"M"+v+",0l"+Math.cos(g)*m+","+-Math.sin(g)*m,_={a:"M0,0l"+x+",-"+y/2,b:"M0,0l-"+y/2+",-"+x,c:"M0,0l-"+x+","+y/2}[a];p.drawTicks(r,t,{vals:"inside"===t.ticks?h:u,layer:s,path:b,transFn:f,crisp:!1}),p.drawGrid(r,t,{vals:h,layer:this.layers[a+"grid"],path:_,transFn:f,crisp:!1}),p.drawLabels(r,t,{vals:u,layer:s,transFn:f,labelFns:p.makeLabelFns(t,0,30)})};var T=b.MINZOOM/2+.87,M="m-0.87,.5h"+T+"v3h-"+(T+5.2)+"l"+(T/2+2.6)+",-"+(.87*T+4.5)+"l2.6,1.5l-"+T/2+","+.87*T+"Z",A="m0.87,.5h-"+T+"v3h"+(T+5.2)+"l-"+(T/2+2.6)+",-"+(.87*T+4.5)+"l-2.6,1.5l"+T/2+","+.87*T+"Z",S="m0,1l"+T/2+","+.87*T+"l2.6,-1.5l-"+(T/2+2.6)+",-"+(.87*T+4.5)+"l-"+(T/2+2.6)+","+(.87*T+4.5)+"l2.6,1.5l"+T/2+",-"+.87*T+"Z",E="m0.5,0.5h5v-2h-5v-5h-2v5h-5v2h5v5h2Z",L=!0;function C(t){n.select(t).selectAll(".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners").remove()}w.initInteractions=function(){var t,e,r,n,u,h,f,p,v,_,w=this,T=w.layers.plotbg.select("path").node(),P=w.graphDiv,O=P._fullLayout._zoomlayer,z={element:T,gd:P,plotinfo:{id:w.id,xaxis:w.xaxis,yaxis:w.yaxis},subplot:w.id,prepFn:function(i,o,s){z.xaxes=[w.xaxis],z.yaxes=[w.yaxis];var c=P._fullLayout.dragmode;z.minDrag="lasso"===c?1:void 0,"zoom"===c?(z.moveFn=N,z.clickFn=D,z.doneFn=j,function(i,o,s){var c=T.getBoundingClientRect();t=o-c.left,e=s-c.top,r={a:w.aaxis.range[0],b:w.baxis.range[1],c:w.caxis.range[1]},u=r,n=w.aaxis.range[1]-r.a,h=a(w.graphDiv._fullLayout[w.id].bgcolor).getLuminance(),f="M0,"+w.h+"L"+w.w/2+", 0L"+w.w+","+w.h+"Z",p=!1,v=O.append("path").attr("class","zoombox").attr("transform","translate("+w.x0+", "+w.y0+")").style({fill:h>.2?"rgba(0,0,0,0)":"rgba(255,255,255,0)","stroke-width":0}).attr("d",f),_=O.append("path").attr("class","zoombox-corners").attr("transform","translate("+w.x0+", "+w.y0+")").style({fill:l.background,stroke:l.defaultLine,"stroke-width":1,opacity:0}).attr("d","M0,0Z"),x(P)}(0,o,s)):"pan"===c?(z.moveFn=V,z.clickFn=D,z.doneFn=U,r={a:w.aaxis.range[0],b:w.baxis.range[1],c:w.caxis.range[1]},u=r,x(P)):"select"!==c&&"lasso"!==c||m(i,o,s,z,c)}};function I(t){var e={};return e[w.id+".aaxis.min"]=t.a,e[w.id+".baxis.min"]=t.b,e[w.id+".caxis.min"]=t.c,e}function D(t,e){var r=P._fullLayout.clickmode;C(P),2===t&&(P.emit("plotly_doubleclick",null),i.call("_guiRelayout",P,I({a:0,b:0,c:0}))),r.indexOf("select")>-1&&1===t&&y(e,P,[w.xaxis],[w.yaxis],w.id,z),r.indexOf("event")>-1&&g.click(P,e,w.id)}function R(t,e){return 1-e/w.h}function F(t,e){return 1-(t+(w.h-e)/Math.sqrt(3))/w.w}function B(t,e){return(t-(w.h-e)/Math.sqrt(3))/w.w}function N(a,i){var o=t+a,s=e+i,l=Math.max(0,Math.min(1,R(0,e),R(0,s))),c=Math.max(0,Math.min(1,F(t,e),F(o,s))),d=Math.max(0,Math.min(1,B(t,e),B(o,s))),g=(l/2+d)*w.w,m=(1-l/2-c)*w.w,y=(g+m)/2,x=m-g,T=(1-l)*w.h,L=T-x/k;x<b.MINZOOM?(u=r,v.attr("d",f),_.attr("d","M0,0Z")):(u={a:r.a+l*n,b:r.b+c*n,c:r.c+d*n},v.attr("d",f+"M"+g+","+T+"H"+m+"L"+y+","+L+"L"+g+","+T+"Z"),_.attr("d","M"+t+","+e+E+"M"+g+","+T+M+"M"+m+","+T+A+"M"+y+","+L+S)),p||(v.transition().style("fill",h>.2?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.3)").duration(200),_.transition().style("opacity",1).duration(200),p=!0),P.emit("plotly_relayouting",I(u))}function j(){C(P),u!==r&&(i.call("_guiRelayout",P,I(u)),L&&P.data&&P._context.showTips&&(o.notifier(s(P,"Double-click to zoom back out"),"long"),L=!1))}function V(t,e){var n=t/w.xaxis._m,a=e/w.yaxis._m,i=[(u={a:r.a-a,b:r.b+(n+a)/2,c:r.c-(n-a)/2}).a,u.b,u.c].sort(),o=i.indexOf(u.a),s=i.indexOf(u.b),l=i.indexOf(u.c);i[0]<0&&(i[1]+i[0]/2<0?(i[2]+=i[0]+i[1],i[0]=i[1]=0):(i[2]+=i[0]/2,i[1]+=i[0]/2,i[0]=0),u={a:i[o],b:i[s],c:i[l]},e=(r.a-u.a)*w.yaxis._m,t=(r.c-u.c-r.b+u.b)*w.xaxis._m);var h="translate("+(w.x0+t)+","+(w.y0+e)+")";w.plotContainer.selectAll(".scatterlayer,.maplayer").attr("transform",h);var f="translate("+-t+","+-e+")";w.clipDefRelative.select("path").attr("transform",f),w.aaxis.range=[u.a,w.sum-u.b-u.c],w.baxis.range=[w.sum-u.a-u.c,u.b],w.caxis.range=[w.sum-u.a-u.b,u.c],w.drawAxes(!1),w._hasClipOnAxisFalse&&w.plotContainer.select(".scatterlayer").selectAll(".trace").call(c.hideOutsideRangePoints,w),P.emit("plotly_relayouting",I(u))}function U(){i.call("_guiRelayout",P,I(u))}T.onmousemove=function(t){g.hover(P,t,w.id),P._fullLayout._lasthover=T,P._fullLayout._hoversubplot=w.id},T.onmouseout=function(t){P._dragging||d.unhover(P,t)},d.init(z)}},{"../../components/color":591,"../../components/dragelement":609,"../../components/drawing":612,"../../components/fx":630,"../../components/titles":679,"../../lib":717,"../../lib/extend":708,"../../registry":846,"../cartesian/axes":765,"../cartesian/constants":771,"../cartesian/select":782,"../cartesian/set_convert":783,"../plots":826,d3:165,tinycolor2:535}],846:[function(t,e,r){"use strict";var n=t("./lib/loggers"),a=t("./lib/noop"),i=t("./lib/push_unique"),o=t("./lib/is_plain_object"),s=t("./lib/dom").addStyleRule,l=t("./lib/extend"),c=t("./plots/attributes"),u=t("./plots/layout_attributes"),h=l.extendFlat,f=l.extendDeepAll;function p(t){var e=t.name,a=t.categories,i=t.meta;if(r.modules[e])n.log("Type "+e+" already registered");else{r.subplotsRegistry[t.basePlotModule.name]||function(t){var e=t.name;if(r.subplotsRegistry[e])return void n.log("Plot type "+e+" already registered.");for(var a in m(t),r.subplotsRegistry[e]=t,r.componentsRegistry)b(a,t.name)}(t.basePlotModule);for(var o={},l=0;l<a.length;l++)o[a[l]]=!0,r.allCategories[a[l]]=!0;for(var c in r.modules[e]={_module:t,categories:o},i&&Object.keys(i).length&&(r.modules[e].meta=i),r.allTypes.push(e),r.componentsRegistry)y(c,e);t.layoutAttributes&&h(r.traceLayoutAttributes,t.layoutAttributes);var u=t.basePlotModule,f=u.name;if("mapbox"===f){var p=u.constants.styleRules;for(var d in p)s(".js-plotly-plot .plotly .mapboxgl-"+d,p[d])}"geo"!==f&&"mapbox"!==f||void 0===typeof window||void 0!==window.PlotlyGeoAssets||(window.PlotlyGeoAssets={topojson:{}})}}function d(t){if("string"!=typeof t.name)throw new Error("Component module *name* must be a string.");var e=t.name;for(var n in r.componentsRegistry[e]=t,t.layoutAttributes&&(t.layoutAttributes._isLinkedToArray&&i(r.layoutArrayContainers,e),m(t)),r.modules)y(e,n);for(var a in r.subplotsRegistry)b(e,a);for(var o in r.transformsRegistry)x(e,o);t.schema&&t.schema.layout&&f(u,t.schema.layout)}function g(t){if("string"!=typeof t.name)throw new Error("Transform module *name* must be a string.");var e="Transform module "+t.name,a="function"==typeof t.transform,i="function"==typeof t.calcTransform;if(!a&&!i)throw new Error(e+" is missing a *transform* or *calcTransform* method.");for(var s in a&&i&&n.log([e+" has both a *transform* and *calcTransform* methods.","Please note that all *transform* methods are executed","before all *calcTransform* methods."].join(" ")),o(t.attributes)||n.log(e+" registered without an *attributes* object."),"function"!=typeof t.supplyDefaults&&n.log(e+" registered without a *supplyDefaults* method."),r.transformsRegistry[t.name]=t,r.componentsRegistry)x(s,t.name)}function v(t){var e=t.name,n=e.split("-")[0],a=t.dictionary,i=t.format,o=a&&Object.keys(a).length,s=i&&Object.keys(i).length,l=r.localeRegistry,c=l[e];if(c||(l[e]=c={}),n!==e){var u=l[n];u||(l[n]=u={}),o&&u.dictionary===c.dictionary&&(u.dictionary=a),s&&u.format===c.format&&(u.format=i)}o&&(c.dictionary=a),s&&(c.format=i)}function m(t){if(t.layoutAttributes){var e=t.layoutAttributes._arrayAttrRegexps;if(e)for(var n=0;n<e.length;n++)i(r.layoutArrayRegexes,e[n])}}function y(t,e){var n=r.componentsRegistry[t].schema;if(n&&n.traces){var a=n.traces[e];a&&f(r.modules[e]._module.attributes,a)}}function x(t,e){var n=r.componentsRegistry[t].schema;if(n&&n.transforms){var a=n.transforms[e];a&&f(r.transformsRegistry[e].attributes,a)}}function b(t,e){var n=r.componentsRegistry[t].schema;if(n&&n.subplots){var a=r.subplotsRegistry[e],i=a.layoutAttributes,o="subplot"===a.attr?a.name:a.attr;Array.isArray(o)&&(o=o[0]);var s=n.subplots[o];i&&s&&f(i,s)}}function _(t){return"object"==typeof t&&(t=t.type),t}r.modules={},r.allCategories={},r.allTypes=[],r.subplotsRegistry={},r.transformsRegistry={},r.componentsRegistry={},r.layoutArrayContainers=[],r.layoutArrayRegexes=[],r.traceLayoutAttributes={},r.localeRegistry={},r.apiMethodRegistry={},r.collectableSubplotTypes=null,r.register=function(t){if(r.collectableSubplotTypes=null,!t)throw new Error("No argument passed to Plotly.register.");t&&!Array.isArray(t)&&(t=[t]);for(var e=0;e<t.length;e++){var n=t[e];if(!n)throw new Error("Invalid module was attempted to be registered!");switch(n.moduleType){case"trace":p(n);break;case"transform":g(n);break;case"component":d(n);break;case"locale":v(n);break;case"apiMethod":var a=n.name;r.apiMethodRegistry[a]=n.fn;break;default:throw new Error("Invalid module was attempted to be registered!")}}},r.getModule=function(t){var e=r.modules[_(t)];return!!e&&e._module},r.traceIs=function(t,e){if("various"===(t=_(t)))return!1;var a=r.modules[t];return a||(t&&"area"!==t&&n.log("Unrecognized trace type "+t+"."),a=r.modules[c.type.dflt]),!!a.categories[e]},r.getTransformIndices=function(t,e){for(var r=[],n=t.transforms||[],a=0;a<n.length;a++)n[a].type===e&&r.push(a);return r},r.hasTransform=function(t,e){for(var r=t.transforms||[],n=0;n<r.length;n++)if(r[n].type===e)return!0;return!1},r.getComponentMethod=function(t,e){var n=r.componentsRegistry[t];return n&&n[e]||a},r.call=function(){var t=arguments[0],e=[].slice.call(arguments,1);return r.apiMethodRegistry[t].apply(null,e)}},{"./lib/dom":706,"./lib/extend":708,"./lib/is_plain_object":718,"./lib/loggers":721,"./lib/noop":726,"./lib/push_unique":731,"./plots/attributes":762,"./plots/layout_attributes":817}],847:[function(t,e,r){"use strict";var n=t("../registry"),a=t("../lib"),i=a.extendFlat,o=a.extendDeep;function s(t){var e;switch(t){case"themes__thumb":e={autosize:!0,width:150,height:150,title:{text:""},showlegend:!1,margin:{l:5,r:5,t:5,b:5,pad:0},annotations:[]};break;case"thumbnail":e={title:{text:""},hidesources:!0,showlegend:!1,borderwidth:0,bordercolor:"",margin:{l:1,r:1,t:1,b:1,pad:0},annotations:[]};break;default:e={}}return e}e.exports=function(t,e){var r;t.framework&&t.framework.isPolar&&(t=t.framework.getConfig());var a,l=t.data,c=t.layout,u=o([],l),h=o({},c,s(e.tileClass)),f=t._context||{};if(e.width&&(h.width=e.width),e.height&&(h.height=e.height),"thumbnail"===e.tileClass||"themes__thumb"===e.tileClass){h.annotations=[];var p=Object.keys(h);for(r=0;r<p.length;r++)a=p[r],["xaxis","yaxis","zaxis"].indexOf(a.slice(0,5))>-1&&(h[p[r]].title={text:""});for(r=0;r<u.length;r++){var d=u[r];d.showscale=!1,d.marker&&(d.marker.showscale=!1),n.traceIs(d,"pie-like")&&(d.textposition="none")}}if(Array.isArray(e.annotations))for(r=0;r<e.annotations.length;r++)h.annotations.push(e.annotations[r]);var g=Object.keys(h).filter(function(t){return t.match(/^scene\d*$/)});if(g.length){var v={};for("thumbnail"===e.tileClass&&(v={title:{text:""},showaxeslabels:!1,showticklabels:!1,linetickenable:!1}),r=0;r<g.length;r++){var m=h[g[r]];m.xaxis||(m.xaxis={}),m.yaxis||(m.yaxis={}),m.zaxis||(m.zaxis={}),i(m.xaxis,v),i(m.yaxis,v),i(m.zaxis,v),m._scene=null}}var y=document.createElement("div");e.tileClass&&(y.className=e.tileClass);var x={gd:y,td:y,layout:h,data:u,config:{staticPlot:void 0===e.staticPlot||e.staticPlot,plotGlPixelRatio:void 0===e.plotGlPixelRatio?2:e.plotGlPixelRatio,displaylogo:e.displaylogo||!1,showLink:e.showLink||!1,showTips:e.showTips||!1,mapboxAccessToken:f.mapboxAccessToken}};return"transparent"!==e.setBackground&&(x.config.setBackground=e.setBackground||"opaque"),x.gd.defaultLayout=s(e.tileClass),x}},{"../lib":717,"../registry":846}],848:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../plot_api/to_image"),i=t("./filesaver"),o=t("./helpers");e.exports=function(t,e){var r;return n.isPlainObject(t)||(r=n.getGraphDiv(t)),(e=e||{}).format=e.format||"png",e.imageDataOnly=!0,new Promise(function(s,l){r&&r._snapshotInProgress&&l(new Error("Snapshotting already in progress.")),n.isIE()&&"svg"!==e.format&&l(new Error(o.MSG_IE_BAD_FORMAT)),r&&(r._snapshotInProgress=!0);var c=a(t,e),u=e.filename||t.fn||"newplot";u+="."+e.format.replace("-","."),c.then(function(t){return r&&(r._snapshotInProgress=!1),i(t,u,e.format)}).then(function(t){s(t)}).catch(function(t){r&&(r._snapshotInProgress=!1),l(t)})})}},{"../lib":717,"../plot_api/to_image":758,"./filesaver":849,"./helpers":850}],849:[function(t,e,r){"use strict";var n=t("../lib"),a=t("./helpers");e.exports=function(t,e,r){var i=document.createElement("a"),o="download"in i;return new Promise(function(s,l){var c,u;if(n.isIE9orBelow()&&l(new Error("IE < 10 unsupported")),n.isSafari()){var h="svg"===r?",":";base64,";return a.octetStream(h+encodeURIComponent(t)),s(e)}return n.isIE()?(c=a.createBlob(t,"svg"),window.navigator.msSaveBlob(c,e),c=null,s(e)):o?(c=a.createBlob(t,r),u=a.createObjectURL(c),i.href=u,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),a.revokeObjectURL(u),c=null,s(e)):void l(new Error("download error"))})}},{"../lib":717,"./helpers":850}],850:[function(t,e,r){"use strict";var n=t("../registry");r.getDelay=function(t){return t._has&&(t._has("gl3d")||t._has("gl2d")||t._has("mapbox"))?500:0},r.getRedrawFunc=function(t){return function(){var e=t._fullLayout||{};!(e._has&&e._has("polar"))&&t.data&&t.data[0]&&t.data[0].r||n.getComponentMethod("colorbar","draw")(t)}},r.encodeSVG=function(t){return"data:image/svg+xml,"+encodeURIComponent(t)},r.encodeJSON=function(t){return"data:application/json,"+encodeURIComponent(t)};var a=window.URL||window.webkitURL;r.createObjectURL=function(t){return a.createObjectURL(t)},r.revokeObjectURL=function(t){return a.revokeObjectURL(t)},r.createBlob=function(t,e){if("svg"===e)return new window.Blob([t],{type:"image/svg+xml;charset=utf-8"});if("full-json"===e)return new window.Blob([t],{type:"application/json;charset=utf-8"});var r=function(t){for(var e=t.length,r=new ArrayBuffer(e),n=new Uint8Array(r),a=0;a<e;a++)n[a]=t.charCodeAt(a);return r}(window.atob(t));return new window.Blob([r],{type:"image/"+e})},r.octetStream=function(t){document.location.href="data:application/octet-stream"+t},r.IMAGE_URL_PREFIX=/^data:image\/\w+;base64,/,r.MSG_IE_BAD_FORMAT="Sorry IE does not support downloading from canvas. Try {format:'svg'} instead."},{"../registry":846}],851:[function(t,e,r){"use strict";var n=t("./helpers"),a={getDelay:n.getDelay,getRedrawFunc:n.getRedrawFunc,clone:t("./cloneplot"),toSVG:t("./tosvg"),svgToImg:t("./svgtoimg"),toImage:t("./toimage"),downloadImage:t("./download")};e.exports=a},{"./cloneplot":847,"./download":848,"./helpers":850,"./svgtoimg":852,"./toimage":853,"./tosvg":854}],852:[function(t,e,r){"use strict";var n=t("../lib"),a=t("events").EventEmitter,i=t("./helpers");e.exports=function(t){var e=t.emitter||new a,r=new Promise(function(a,o){var s=window.Image,l=t.svg,c=t.format||"png";if(n.isIE()&&"svg"!==c){var u=new Error(i.MSG_IE_BAD_FORMAT);return o(u),t.promise?r:e.emit("error",u)}var h,f,p=t.canvas,d=t.scale||1,g=t.width||300,v=t.height||150,m=d*g,y=d*v,x=p.getContext("2d"),b=new s;"svg"===c||n.isIE9orBelow()||n.isSafari()?f=i.encodeSVG(l):(h=i.createBlob(l,"svg"),f=i.createObjectURL(h)),p.width=m,p.height=y,b.onload=function(){var r;switch(h=null,i.revokeObjectURL(f),"svg"!==c&&x.drawImage(b,0,0,m,y),c){case"jpeg":r=p.toDataURL("image/jpeg");break;case"png":r=p.toDataURL("image/png");break;case"webp":r=p.toDataURL("image/webp");break;case"svg":r=f;break;default:var n="Image format is not jpeg, png, svg or webp.";if(o(new Error(n)),!t.promise)return e.emit("error",n)}a(r),t.promise||e.emit("success",r)},b.onerror=function(r){if(h=null,i.revokeObjectURL(f),o(r),!t.promise)return e.emit("error",r)},b.src=f});return t.promise?r:e}},{"../lib":717,"./helpers":850,events:106}],853:[function(t,e,r){"use strict";var n=t("events").EventEmitter,a=t("../registry"),i=t("../lib"),o=t("./helpers"),s=t("./cloneplot"),l=t("./tosvg"),c=t("./svgtoimg");e.exports=function(t,e){var r=new n,u=s(t,{format:"png"}),h=u.gd;h.style.position="absolute",h.style.left="-5000px",document.body.appendChild(h);var f=o.getRedrawFunc(h);return a.call("plot",h,u.data,u.layout,u.config).then(f).then(function(){var t=o.getDelay(h._fullLayout);setTimeout(function(){var t=l(h),n=document.createElement("canvas");n.id=i.randstr(),(r=c({format:e.format,width:h._fullLayout.width,height:h._fullLayout.height,canvas:n,emitter:r,svg:t})).clean=function(){h&&document.body.removeChild(h)}},t)}).catch(function(t){r.emit("error",t)}),r}},{"../lib":717,"../registry":846,"./cloneplot":847,"./helpers":850,"./svgtoimg":852,"./tosvg":854,events:106}],854:[function(t,e,r){"use strict";var n=t("d3"),a=t("../lib"),i=t("../components/drawing"),o=t("../components/color"),s=t("../constants/xmlns_namespaces"),l=/"/g,c=new RegExp('("TOBESTRIPPED)|(TOBESTRIPPED")',"g");e.exports=function(t,e,r){var u,h=t._fullLayout,f=h._paper,p=h._toppaper,d=h.width,g=h.height;f.insert("rect",":first-child").call(i.setRect,0,0,d,g).call(o.fill,h.paper_bgcolor);var v=h._basePlotModules||[];for(u=0;u<v.length;u++){var m=v[u];m.toSVG&&m.toSVG(t)}if(p){var y=p.node().childNodes,x=Array.prototype.slice.call(y);for(u=0;u<x.length;u++){var b=x[u];b.childNodes.length&&f.node().appendChild(b)}}if(h._draggers&&h._draggers.remove(),f.node().style.background="",f.selectAll("text").attr({"data-unformatted":null,"data-math":null}).each(function(){var t=n.select(this);if("hidden"!==this.style.visibility&&"none"!==this.style.display){t.style({visibility:null,display:null});var e=this.style.fontFamily;e&&-1!==e.indexOf('"')&&t.style("font-family",e.replace(l,"TOBESTRIPPED"))}else t.remove()}),h._gradientUrlQueryParts){var _=[];for(var w in h._gradientUrlQueryParts)_.push(w);_.length&&f.selectAll(_.join(",")).each(function(){var t=n.select(this),e=this.style.fill;e&&-1!==e.indexOf("url(")&&t.style("fill",e.replace(l,"TOBESTRIPPED"));var r=this.style.stroke;r&&-1!==r.indexOf("url(")&&t.style("stroke",r.replace(l,"TOBESTRIPPED"))})}"pdf"!==e&&"eps"!==e||f.selectAll("#MathJax_SVG_glyphs path").attr("stroke-width",0),f.node().setAttributeNS(s.xmlns,"xmlns",s.svg),f.node().setAttributeNS(s.xmlns,"xmlns:xlink",s.xlink),"svg"===e&&r&&(f.attr("width",r*d),f.attr("height",r*g),f.attr("viewBox","0 0 "+d+" "+g));var k=(new window.XMLSerializer).serializeToString(f.node());return k=function(t){var e=n.select("body").append("div").style({display:"none"}).html(""),r=t.replace(/(&[^;]*;)/gi,function(t){return"&lt;"===t?"&#60;":"&rt;"===t?"&#62;":-1!==t.indexOf("<")||-1!==t.indexOf(">")?"":e.html(t).text()});return e.remove(),r}(k),k=(k=k.replace(/&(?!\w+;|\#[0-9]+;| \#x[0-9A-F]+;)/g,"&amp;")).replace(c,"'"),a.isIE()&&(k=(k=(k=k.replace(/"/gi,"'")).replace(/(\('#)([^']*)('\))/gi,'("#$2")')).replace(/(\\')/gi,'"')),k}},{"../components/color":591,"../components/drawing":612,"../constants/xmlns_namespaces":694,"../lib":717,d3:165}],855:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,"tx"),n.mergeArray(e.hovertext,t,"htx");var a=e.marker;if(a){n.mergeArray(a.opacity,t,"mo",!0),n.mergeArray(a.color,t,"mc");var i=a.line;i&&(n.mergeArray(i.color,t,"mlc"),n.mergeArrayCastPositive(i.width,t,"mlw"))}}},{"../../lib":717}],856:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../../plots/template_attributes").texttemplateAttrs,o=t("../../components/colorscale/attributes"),s=t("../../plots/font_attributes"),l=t("./constants"),c=t("../../lib/extend").extendFlat,u=s({editType:"calc",arrayOk:!0,colorEditType:"style"}),h=c({},n.marker.line.width,{dflt:0}),f=c({width:h,editType:"calc"},o("marker.line")),p=c({line:f,editType:"calc"},o("marker"),{opacity:{valType:"number",arrayOk:!0,dflt:1,min:0,max:1,editType:"style"}});e.exports={x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,text:n.text,texttemplate:i({editType:"plot"},{keys:l.eventDataKeys}),hovertext:n.hovertext,hovertemplate:a({},{keys:l.eventDataKeys}),textposition:{valType:"enumerated",values:["inside","outside","auto","none"],dflt:"none",arrayOk:!0,editType:"calc"},insidetextanchor:{valType:"enumerated",values:["end","middle","start"],dflt:"end",editType:"plot"},textangle:{valType:"angle",dflt:"auto",editType:"plot"},textfont:c({},u,{}),insidetextfont:c({},u,{}),outsidetextfont:c({},u,{}),constraintext:{valType:"enumerated",values:["inside","outside","both","none"],dflt:"both",editType:"calc"},cliponaxis:c({},n.cliponaxis,{}),orientation:{valType:"enumerated",values:["v","h"],editType:"calc+clearAxisTypes"},base:{valType:"any",dflt:null,arrayOk:!0,editType:"calc"},offset:{valType:"number",dflt:null,arrayOk:!0,editType:"calc"},width:{valType:"number",dflt:null,min:0,arrayOk:!0,editType:"calc"},marker:p,offsetgroup:{valType:"string",dflt:"",editType:"calc"},alignmentgroup:{valType:"string",dflt:"",editType:"calc"},selected:{marker:{opacity:n.selected.marker.opacity,color:n.selected.marker.color,editType:"style"},textfont:n.selected.textfont,editType:"style"},unselected:{marker:{opacity:n.unselected.marker.opacity,color:n.unselected.marker.color,editType:"style"},textfont:n.unselected.textfont,editType:"style"},r:n.r,t:n.t,_deprecated:{bardir:{valType:"enumerated",editType:"calc",values:["v","h"]}}}},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/font_attributes":791,"../../plots/template_attributes":841,"../scatter/attributes":1120,"./constants":858}],857:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../components/colorscale/helpers").hasColorscale,i=t("../../components/colorscale/calc"),o=t("./arrays_to_calcdata"),s=t("../scatter/calc_selection");e.exports=function(t,e){var r,l,c=n.getFromId(t,e.xaxis||"x"),u=n.getFromId(t,e.yaxis||"y");"h"===e.orientation?(r=c.makeCalcdata(e,"x"),l=u.makeCalcdata(e,"y")):(r=u.makeCalcdata(e,"y"),l=c.makeCalcdata(e,"x"));for(var h=Math.min(l.length,r.length),f=new Array(h),p=0;p<h;p++)f[p]={p:l[p],s:r[p]},e.ids&&(f[p].id=String(e.ids[p]));return a(e,"marker")&&i(t,e,{vals:e.marker.color,containerStr:"marker",cLetter:"c"}),a(e,"marker.line")&&i(t,e,{vals:e.marker.line.color,containerStr:"marker.line",cLetter:"c"}),o(f,e),s(f,e),f}},{"../../components/colorscale/calc":599,"../../components/colorscale/helpers":602,"../../plots/cartesian/axes":765,"../scatter/calc_selection":1122,"./arrays_to_calcdata":855}],858:[function(t,e,r){"use strict";e.exports={TEXTPAD:3,eventDataKeys:["value","label"]}},{}],859:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib").isArrayOrTypedArray,i=t("../../constants/numerical").BADNUM,o=t("../../registry"),s=t("../../plots/cartesian/axes"),l=t("../../plots/cartesian/axis_ids").getAxisGroup,c=t("./sieve.js");function u(t,e,r,o,u){if(o.length){var b,_,w,k;switch(function(t,e){var r,i;for(r=0;r<e.length;r++){var o,s=e[r],l=s[0].trace,c="funnel"===l.type?l._base:l.base,u="h"===l.orientation?l.xcalendar:l.ycalendar,h="category"===t.type||"multicategory"===t.type?function(){return null}:t.d2c;if(a(c)){for(i=0;i<Math.min(c.length,s.length);i++)o=h(c[i],0,u),n(o)?(s[i].b=+o,s[i].hasB=1):s[i].b=0;for(;i<s.length;i++)s[i].b=0}else{o=h(c,0,u);var f=n(o);for(o=f?o:0,i=0;i<s.length;i++)s[i].b=o,f&&(s[i].hasB=1)}}}(r,o),u.mode){case"overlay":h(e,r,o,u);break;case"group":for(b=[],_=[],w=0;w<o.length;w++)void 0===(k=o[w])[0].trace.offset?_.push(k):b.push(k);_.length&&function(t,e,r,n,a){var o=new c(n,{sepNegVal:!1,overlapNoMerge:!a.norm});(function(t,e,r,n){for(var a=t._fullLayout,i=r.positions,o=r.distinctPositions,s=r.minDiff,c=r.traces,u=c.length,h=i.length!==o.length,f=s*(1-n.gap),v=l(a,e._id)+c[0][0].trace.orientation,m=a._alignmentOpts[v]||{},y=0;y<u;y++){var x,b,_=c[y],w=_[0].trace,k=m[w.alignmentgroup]||{},T=Object.keys(k.offsetGroups||{}).length,M=(x=T?f/T:h?f/u:f)*(1-(n.groupgap||0));b=T?((2*w._offsetIndex+1-T)*x-M)/2:h?((2*y+1-u)*x-M)/2:-M/2;var A=_[0].t;A.barwidth=M,A.poffset=b,A.bargroupwidth=f,A.bardelta=s}r.binWidth=c[0][0].t.barwidth/100,p(r),d(e,r),g(e,r,h)})(t,e,o,a),function(t){for(var e=t.traces,r=0;r<e.length;r++){var n=e[r],a=n[0].trace;if(void 0===a.base)for(var o=new c([n],{sepNegVal:!0,overlapNoMerge:!0}),s=0;s<n.length;s++){var l=n[s];if(l.p!==i){var u=o.put(l.p,l.b+l.s);u&&(l.b=u)}}}}(o),a.norm?(m(o),y(r,o,a)):v(r,o)}(t,e,r,_,u),b.length&&h(e,r,b,u);break;case"stack":case"relative":for(b=[],_=[],w=0;w<o.length;w++)void 0===(k=o[w])[0].trace.base?_.push(k):b.push(k);_.length&&function(t,e,r,n,a){var o=new c(n,{sepNegVal:"relative"===a.mode,overlapNoMerge:!(a.norm||"stack"===a.mode||"relative"===a.mode)});f(e,o,a),function(t,e,r){var n,a,o,l,c,u,h=x(t),f=e.traces;for(l=0;l<f.length;l++)if(n=f[l],"funnel"===(a=n[0].trace).type)for(c=0;c<n.length;c++)(u=n[c]).s!==i&&e.put(u.p,-.5*u.s);for(l=0;l<f.length;l++){n=f[l],a=n[0].trace,o="funnel"===a.type;var p=[];for(c=0;c<n.length;c++)if((u=n[c]).s!==i){var d;d=o?u.s:u.s+u.b;var g=e.put(u.p,d),v=g+d;u.b=g,u[h]=v,r.norm||(p.push(v),u.hasB&&p.push(g))}r.norm||(a._extremes[t._id]=s.findExtremes(t,p,{tozero:!0,padded:!0}))}}(r,o,a);for(var l=0;l<n.length;l++)for(var u=n[l],h=0;h<u.length;h++){var p=u[h];if(p.s!==i){var d=p.b+p.s===o.get(p.p,p.s);d&&(p._outmost=!0)}}a.norm&&y(r,o,a)}(0,e,r,_,u),b.length&&h(e,r,b,u)}!function(t,e){var r,a,i,o=x(e),s={},l=1/0,c=-1/0;for(r=0;r<t.length;r++)for(i=t[r],a=0;a<i.length;a++){var u=i[a].p;n(u)&&(l=Math.min(l,u),c=Math.max(c,u))}var h=1e4/(c-l),f=s.round=function(t){return String(Math.round(h*(t-l)))};for(r=0;r<t.length;r++){(i=t[r])[0].t.extents=s;var p=i[0].t.poffset,d=Array.isArray(p);for(a=0;a<i.length;a++){var g=i[a],v=g[o]-g.w/2;if(n(v)){var m=g[o]+g.w/2,y=f(g.p);s[y]?s[y]=[Math.min(v,s[y][0]),Math.max(m,s[y][1])]:s[y]=[v,m]}g.p0=g.p+(d?p[a]:p),g.p1=g.p0+g.w,g.s0=g.b,g.s1=g.s0+g.s}}}(o,e)}}function h(t,e,r,n){for(var a=0;a<r.length;a++){var i=r[a],o=new c([i],{sepNegVal:!1,overlapNoMerge:!n.norm});f(t,o,n),n.norm?(m(o),y(e,o,n)):v(e,o)}}function f(t,e,r){for(var n=e.minDiff,a=e.traces,i=n*(1-r.gap),o=i*(1-(r.groupgap||0)),s=-o/2,l=0;l<a.length;l++){var c=a[l][0].t;c.barwidth=o,c.poffset=s,c.bargroupwidth=i,c.bardelta=n}e.binWidth=a[0][0].t.barwidth/100,p(e),d(t,e),g(t,e)}function p(t){var e,r,i=t.traces;for(e=0;e<i.length;e++){var o,s=i[e],l=s[0],c=l.trace,u=l.t,h=c._offset||c.offset,f=u.poffset;if(a(h)){for(o=Array.prototype.slice.call(h,0,s.length),r=0;r<o.length;r++)n(o[r])||(o[r]=f);for(r=o.length;r<s.length;r++)o.push(f);u.poffset=o}else void 0!==h&&(u.poffset=h);var p=c._width||c.width,d=u.barwidth;if(a(p)){var g=Array.prototype.slice.call(p,0,s.length);for(r=0;r<g.length;r++)n(g[r])||(g[r]=d);for(r=g.length;r<s.length;r++)g.push(d);if(u.barwidth=g,void 0===h){for(o=[],r=0;r<s.length;r++)o.push(f+(d-g[r])/2);u.poffset=o}}else void 0!==p&&(u.barwidth=p,void 0===h&&(u.poffset=f+(d-p)/2))}}function d(t,e){for(var r=e.traces,n=x(t),a=0;a<r.length;a++)for(var i=r[a],o=i[0].t,s=o.poffset,l=Array.isArray(s),c=o.barwidth,u=Array.isArray(c),h=0;h<i.length;h++){var f=i[h],p=f.w=u?c[h]:c;f[n]=f.p+(l?s[h]:s)+p/2}}function g(t,e,r){var n=e.traces,a=e.minDiff/2;s.minDtick(t,e.minDiff,e.distinctPositions[0],r);for(var i=0;i<n.length;i++){var o,l,c,u,h=n[i],f=h[0],p=f.trace,d=[];for(u=0;u<h.length;u++)l=(o=h[u]).p-a,c=o.p+a,d.push(l,c);if(p.width||p.offset){var g=f.t,v=g.poffset,m=g.barwidth,y=Array.isArray(v),x=Array.isArray(m);for(u=0;u<h.length;u++){o=h[u];var b=y?v[u]:v,_=x?m[u]:m;c=(l=o.p+b)+_,d.push(l,c)}}p._extremes[t._id]=s.findExtremes(t,d,{padded:!1})}}function v(t,e){for(var r=e.traces,n=x(t),a=0;a<r.length;a++){for(var i=r[a],o=i[0].trace,l=[],c=!0,u=0;u<i.length;u++){var h=i[u],f=h.b,p=f+h.s;h[n]=p,l.push(p),h.hasB&&l.push(f),h.hasB&&h.b>0&&h.s>0||(c=!1)}o._extremes[t._id]=s.findExtremes(t,l,{tozero:!c,padded:!0})}}function m(t){for(var e=t.traces,r=0;r<e.length;r++)for(var n=e[r],a=0;a<n.length;a++){var o=n[a];o.s!==i&&t.put(o.p,o.b+o.s)}}function y(t,e,r){var a=e.traces,o=x(t),l="fraction"===r.norm?1:100,c=l/1e9,u=t.l2c(t.c2l(0)),h="stack"===r.mode?l:u;function f(e){return n(t.c2l(e))&&(e<u-c||e>h+c||!n(u))}for(var p=0;p<a.length;p++){for(var d=a[p],g=d[0].trace,v=[],m=!0,y=!1,b=0;b<d.length;b++){var _=d[b];if(_.s!==i){var w=Math.abs(l/e.get(_.p,_.s));_.b*=w,_.s*=w;var k=_.b,T=k+_.s;_[o]=T,v.push(T),y=y||f(T),_.hasB&&(v.push(k),y=y||f(k)),_.hasB&&_.b>0&&_.s>0||(m=!1)}}g._extremes[t._id]=s.findExtremes(t,v,{tozero:!m,padded:y})}}function x(t){return t._id.charAt(0)}e.exports={crossTraceCalc:function(t,e){for(var r=e.xaxis,n=e.yaxis,a=t._fullLayout,i=t._fullData,s=t.calcdata,l=[],c=[],h=0;h<i.length;h++){var f=i[h];if(!0===f.visible&&o.traceIs(f,"bar")&&f.xaxis===r._id&&f.yaxis===n._id&&("h"===f.orientation?l.push(s[h]):c.push(s[h]),f._computePh))for(var p=t.calcdata[h],d=0;d<p.length;d++)"function"==typeof p[d].ph0&&(p[d].ph0=p[d].ph0()),"function"==typeof p[d].ph1&&(p[d].ph1=p[d].ph1())}var g={mode:a.barmode,norm:a.barnorm,gap:a.bargap,groupgap:a.bargroupgap};u(t,r,n,c,g),u(t,n,r,l,g)},setGroupPositions:u}},{"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/axes":765,"../../plots/cartesian/axis_ids":768,"../../registry":846,"./sieve.js":869,"fast-isnumeric":228}],860:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/color"),i=t("../../registry"),o=t("../scatter/xy_defaults"),s=t("./style_defaults"),l=t("../../plots/cartesian/axis_ids").getAxisGroup,c=t("./attributes"),u=n.coerceFont;function h(t,e,r,n){var a=e.orientation,i=e[{v:"x",h:"y"}[a]+"axis"],o=l(r,i)+a,s=r._alignmentOpts||{},c=n("alignmentgroup"),u=s[o];u||(u=s[o]={});var h=u[c];h?h.traces.push(e):h=u[c]={traces:[e],alignmentIndex:Object.keys(u).length,offsetGroups:{}};var f=n("offsetgroup"),p=h.offsetGroups,d=p[f];f&&(d||(d=p[f]={offsetIndex:Object.keys(p).length}),e._offsetIndex=d.offsetIndex)}function f(t,e,r,a,i,o){var s=!(!1===(o=o||{}).moduleHasSelected),l=!(!1===o.moduleHasUnselected),c=!(!1===o.moduleHasConstrain),h=!(!1===o.moduleHasCliponaxis),f=!(!1===o.moduleHasTextangle),p=!(!1===o.moduleHasInsideanchor),d=!!o.hasPathbar,g=Array.isArray(i)||"auto"===i,v=g||"inside"===i,m=g||"outside"===i;if(v||m){var y=u(a,"textfont",r.font),x=n.extendFlat({},y),b=!(t.textfont&&t.textfont.color);if(b&&delete x.color,u(a,"insidetextfont",x),d){var _=n.extendFlat({},y);b&&delete _.color,u(a,"pathbar.textfont",_)}m&&u(a,"outsidetextfont",y),s&&a("selected.textfont.color"),l&&a("unselected.textfont.color"),c&&a("constraintext"),h&&a("cliponaxis"),f&&a("textangle"),a("texttemplate")}v&&p&&a("insidetextanchor")}e.exports={supplyDefaults:function(t,e,r,l){function u(r,a){return n.coerce(t,e,c,r,a)}if(o(t,e,l,u)){u("orientation",e.x&&!e.y?"h":"v"),u("base"),u("offset"),u("width"),u("text"),u("hovertext"),u("hovertemplate");var h=u("textposition");f(t,0,l,u,h,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),s(t,e,u,r,l);var p=(e.marker.line||{}).color,d=i.getComponentMethod("errorbars","supplyDefaults");d(t,e,p||a.defaultLine,{axis:"y"}),d(t,e,p||a.defaultLine,{axis:"x",inherit:"y"}),n.coerceSelectionMarkerOpacity(e,u)}else e.visible=!1},crossTraceDefaults:function(t,e){var r;function a(t){return n.coerce(r._input,r,c,t)}if("group"===e.barmode)for(var i=0;i<t.length;i++)"bar"===(r=t[i]).type&&(r._input,h(0,r,e,a))},handleGroupingDefaults:h,handleText:f}},{"../../components/color":591,"../../lib":717,"../../plots/cartesian/axis_ids":768,"../../registry":846,"../scatter/xy_defaults":1146,"./attributes":856,"./style_defaults":871}],861:[function(t,e,r){"use strict";e.exports=function(t,e,r){return t.x="xVal"in e?e.xVal:e.x,t.y="yVal"in e?e.yVal:e.y,e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),"h"===r.orientation?(t.label=t.y,t.value=t.x):(t.label=t.x,t.value=t.y),t}},{}],862:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("tinycolor2"),i=t("../../lib").isArrayOrTypedArray;r.coerceString=function(t,e,r){if("string"==typeof e){if(e||!t.noBlank)return e}else if(("number"==typeof e||!0===e)&&!t.strict)return String(e);return void 0!==r?r:t.dflt},r.coerceNumber=function(t,e,r){if(n(e)){e=+e;var a=t.min,i=t.max;if(!(void 0!==a&&e<a||void 0!==i&&e>i))return e}return void 0!==r?r:t.dflt},r.coerceColor=function(t,e,r){return a(e).isValid()?e:void 0!==r?r:t.dflt},r.coerceEnumerated=function(t,e,r){return t.coerceNumber&&(e=+e),-1!==t.values.indexOf(e)?e:void 0!==r?r:t.dflt},r.getValue=function(t,e){var r;return Array.isArray(t)?e<t.length&&(r=t[e]):r=t,r},r.getLineWidth=function(t,e){return 0<e.mlw?e.mlw:i(t.marker.line.width)?0:t.marker.line.width}},{"../../lib":717,"fast-isnumeric":228,tinycolor2:535}],863:[function(t,e,r){"use strict";var n=t("../../components/fx"),a=t("../../registry"),i=t("../../components/color"),o=t("../../lib").fillText,s=t("./helpers").getLineWidth,l=t("../../plots/cartesian/axes").hoverLabelText,c=t("../../constants/numerical").BADNUM;function u(t,e,r,a){var i,s,u,h,f,p,d,g=t.cd,v=g[0].trace,m=g[0].t,y="closest"===a,x="waterfall"===v.type,b=t.maxHoverDistance;function _(t){return t[u]-t.w/2}function w(t){return t[u]+t.w/2}var k=y?_:function(t){return Math.min(_(t),t.p-m.bardelta/2)},T=y?w:function(t){return Math.max(w(t),t.p+m.bardelta/2)};function M(t,e){return n.inbox(t-i,e-i,b+Math.min(1,Math.abs(e-t)/d)-1)}function A(t){return M(k(t),T(t))}function S(t){var e=s,r=t.b,a=t[h];if(x){var i=Math.abs(t.rawS)||0;e>0?a+=i:e<0&&(a-=i)}return n.inbox(r-e,a-e,b+(a-e)/(a-r)-1)}"h"===v.orientation?(i=r,s=e,u="y",h="x",f=S,p=A):(i=e,s=r,u="x",h="y",p=S,f=A);var E=t[u+"a"],L=t[h+"a"];d=Math.abs(E.r2c(E.range[1])-E.r2c(E.range[0]));var C=n.getDistanceFunction(a,f,p,function(t){return(f(t)+p(t))/2});if(n.getClosest(g,C,t),!1!==t.index&&g[t.index].p!==c){y||(k=function(t){return Math.min(_(t),t.p-m.bargroupwidth/2)},T=function(t){return Math.max(w(t),t.p+m.bargroupwidth/2)});var P=g[t.index],O=v.base?P.b+P.s:P.s;t[h+"0"]=t[h+"1"]=L.c2p(P[h],!0),t[h+"LabelVal"]=O;var z=m.extents[m.extents.round(P.p)];return t[u+"0"]=E.c2p(y?k(P):z[0],!0),t[u+"1"]=E.c2p(y?T(P):z[1],!0),t[u+"LabelVal"]=P.p,t.labelLabel=l(E,t[u+"LabelVal"]),t.valueLabel=l(L,t[h+"LabelVal"]),t.spikeDistance=(S(P)+function(t){return M(_(t),w(t))}(P))/2-b,t[u+"Spike"]=E.c2p(P.p,!0),o(P,v,t),t.hovertemplate=v.hovertemplate,t}}function h(t,e){var r=e.mcc||t.marker.color,n=e.mlcc||t.marker.line.color,a=s(t,e);return i.opacity(r)?r:i.opacity(n)&&a?n:void 0}e.exports={hoverPoints:function(t,e,r,n){var i=u(t,e,r,n);if(i){var o=i.cd,s=o[0].trace,l=o[i.index];return i.color=h(s,l),a.getComponentMethod("errorbars","hoverInfo")(l,s,i),[i]}},hoverOnBars:u,getTraceColor:h}},{"../../components/color":591,"../../components/fx":630,"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/axes":765,"../../registry":846,"./helpers":862}],864:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults").supplyDefaults,crossTraceDefaults:t("./defaults").crossTraceDefaults,supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc"),crossTraceCalc:t("./cross_trace_calc").crossTraceCalc,colorbar:t("../scatter/marker_colorbar"),arraysToCalcdata:t("./arrays_to_calcdata"),plot:t("./plot").plot,style:t("./style").style,styleOnSelect:t("./style").styleOnSelect,hoverPoints:t("./hover").hoverPoints,eventData:t("./event_data"),selectPoints:t("./select"),moduleType:"trace",name:"bar",basePlotModule:t("../../plots/cartesian"),categories:["bar-like","cartesian","svg","bar","oriented","errorBarsOK","showLegend","zoomScale"],animatable:!0,meta:{}}},{"../../plots/cartesian":776,"../scatter/marker_colorbar":1138,"./arrays_to_calcdata":855,"./attributes":856,"./calc":857,"./cross_trace_calc":859,"./defaults":860,"./event_data":861,"./hover":863,"./layout_attributes":865,"./layout_defaults":866,"./plot":867,"./select":868,"./style":870}],865:[function(t,e,r){"use strict";e.exports={barmode:{valType:"enumerated",values:["stack","group","overlay","relative"],dflt:"group",editType:"calc"},barnorm:{valType:"enumerated",values:["","fraction","percent"],dflt:"",editType:"calc"},bargap:{valType:"number",min:0,max:1,editType:"calc"},bargroupgap:{valType:"number",min:0,max:1,dflt:0,editType:"calc"}}},{}],866:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../plots/cartesian/axes"),i=t("../../lib"),o=t("./layout_attributes");e.exports=function(t,e,r){function s(r,n){return i.coerce(t,e,o,r,n)}for(var l=!1,c=!1,u=!1,h={},f=s("barmode"),p=0;p<r.length;p++){var d=r[p];if(n.traceIs(d,"bar")&&d.visible){if(l=!0,"group"===f){var g=d.xaxis+d.yaxis;h[g]&&(u=!0),h[g]=!0}if(d.visible&&"histogram"===d.type)"category"!==a.getFromId({_fullLayout:e},d["v"===d.orientation?"xaxis":"yaxis"]).type&&(c=!0)}}l?("overlay"!==f&&s("barnorm"),s("bargap",c&&!u?0:.2),s("bargroupgap")):delete e.barmode}},{"../../lib":717,"../../plots/cartesian/axes":765,"../../registry":846,"./layout_attributes":865}],867:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../../lib"),o=t("../../lib/svg_text_utils"),s=t("../../components/color"),l=t("../../components/drawing"),c=t("../../registry"),u=t("../../plots/cartesian/axes").tickText,h=t("./uniform_text"),f=h.recordMinTextSize,p=h.clearMinTextSize,d=t("./style"),g=t("./helpers"),v=t("./constants"),m=t("./attributes"),y=m.text,x=m.textposition,b=t("../../components/fx/helpers").appendArrayPointValue,_=v.TEXTPAD;function w(t){return t.id}function k(t){if(t.ids)return w}function T(t,e){return t<e?1:-1}function M(t,e,r,n){var a;return!e.uniformtext.mode&&A(r)?(n&&(a=n()),t.transition().duration(r.duration).ease(r.easing).each("end",function(){a&&a()}).each("interrupt",function(){a&&a()})):t}function A(t){return t&&t.duration>0}function S(t){return"auto"===t?0:t}function E(t,e){var r=Math.PI/180*e,n=Math.abs(Math.sin(r)),a=Math.abs(Math.cos(r));return{x:t.width*a+t.height*n,y:t.width*n+t.height*a}}function L(t,e,r,n,a,i){var o=!!i.isHorizontal,s=!!i.constrained,l=i.angle||0,c=i.anchor||"end",u="end"===c,h="start"===c,f=((i.leftToRight||0)+1)/2,p=1-f,d=a.width,g=a.height,v=Math.abs(e-t),m=Math.abs(n-r),y=v>2*_&&m>2*_?_:0;v-=2*y,m-=2*y;var x=S(l);"auto"!==l||d<=v&&g<=m||!(d>v||g>m)||(d>m||g>v)&&d<g==v<m||(x+=90);var b=E(a,x),w=1;s&&(w=Math.min(1,v/b.x,m/b.y));var k=a.left*p+a.right*f,M=(a.top+a.bottom)/2,A=(t+_)*p+(e-_)*f,L=(r+n)/2,C=0,P=0;if(h||u){var O=(o?b.x:b.y)/2,z=o?T(t,e):T(r,n);o?h?(A=t+z*y,C=-z*O):(A=e-z*y,C=z*O):h?(L=r+z*y,P=-z*O):(L=n-z*y,P=z*O)}return{textX:k,textY:M,targetX:A,targetY:L,anchorX:C,anchorY:P,scale:w,rotate:x}}e.exports={plot:function(t,e,r,h,v,m){var w=e.xaxis,C=e.yaxis,P=t._fullLayout;v||(v={mode:P.barmode,norm:P.barmode,gap:P.bargap,groupgap:P.bargroupgap},p("bar",P));var O=i.makeTraceGroups(h,r,"trace bars").each(function(r){var c=n.select(this),h=r[0].trace,p="waterfall"===h.type,O="funnel"===h.type,z="bar"===h.type||O,I=0;p&&h.connector.visible&&"between"===h.connector.mode&&(I=h.connector.line.width/2);var D="h"===h.orientation,R=A(v),F=i.ensureSingle(c,"g","points"),B=k(h),N=F.selectAll("g.point").data(i.identity,B);N.enter().append("g").classed("point",!0),N.exit().remove(),N.each(function(c,p){var k,A,O=n.select(this),F=function(t,e,r,n){var a=[],i=[],o=n?e:r,s=n?r:e;return a[0]=o.c2p(t.s0,!0),i[0]=s.c2p(t.p0,!0),a[1]=o.c2p(t.s1,!0),i[1]=s.c2p(t.p1,!0),n?[a,i]:[i,a]}(c,w,C,D),B=F[0][0],N=F[0][1],j=F[1][0],V=F[1][1],U=0==(D?N-B:V-j);if(U&&z&&g.getLineWidth(h,c)&&(U=!1),U||(U=!(a(B)&&a(N)&&a(j)&&a(V))),c.isBlank=U,U&&(D?N=B:V=j),I&&!U&&(D?(B-=T(B,N)*I,N+=T(B,N)*I):(j-=T(j,V)*I,V+=T(j,V)*I)),"waterfall"===h.type){if(!U){var q=h[c.dir].marker;k=q.line.width,A=q.color}}else k=g.getLineWidth(h,c),A=c.mc||h.marker.color;function H(t){var e=n.round(k/2%1,2);return 0===v.gap&&0===v.groupgap?n.round(Math.round(t)-e,2):t}if(!t._context.staticPlot){var G=s.opacity(A)<1||k>.01?H:function(t,e,r){return r&&t===e?t:Math.abs(t-e)>=2?H(t):t>e?Math.ceil(t):Math.floor(t)};B=G(B,N,D),N=G(N,B,D),j=G(j,V,!D),V=G(V,j,!D)}var Y=M(i.ensureSingle(O,"path"),P,v,m);if(Y.style("vector-effect","non-scaling-stroke").attr("d",isNaN((N-B)*(V-j))?"M0,0Z":"M"+B+","+j+"V"+V+"H"+N+"V"+j+"Z").call(l.setClipUrl,e.layerClipId,t),!P.uniformtext.mode&&R){var W=l.makePointStyleFns(h);l.singlePointStyle(c,Y,h,W,t)}!function(t,e,r,n,a,s,c,h,p,v,m){var w,k=e.xaxis,A=e.yaxis,C=t._fullLayout;function P(e,r,n){var a=i.ensureSingle(e,"text").text(r).attr({class:"bartext bartext-"+w,"text-anchor":"middle","data-notex":1}).call(l.font,n).call(o.convertToTspans,t);return a}var O=n[0].trace,z="h"===O.orientation,I=function(t,e,r,n,a){var o,s=e[0].trace;return o=s.texttemplate?function(t,e,r,n,a){var o=e[0].trace,s=i.castOption(o,r,"texttemplate");if(!s)return"";var l,c,h,f,p="waterfall"===o.type,d="funnel"===o.type;function g(t){return u(f,+t,!0).text}"h"===o.orientation?(l="y",c=a,h="x",f=n):(l="x",c=n,h="y",f=a);var v,m=e[r],y={};y.label=m.p,y.labelLabel=y[l+"Label"]=(v=m.p,u(c,v,!0).text);var x=i.castOption(o,m.i,"text");(0===x||x)&&(y.text=x),y.value=m.s,y.valueLabel=y[h+"Label"]=g(m.s);var _={};b(_,o,m.i),p&&(y.delta=+m.rawS||m.s,y.deltaLabel=g(y.delta),y.final=m.v,y.finalLabel=g(y.final),y.initial=y.final-y.delta,y.initialLabel=g(y.initial)),d&&(y.value=m.s,y.valueLabel=g(y.value),y.percentInitial=m.begR,y.percentInitialLabel=i.formatPercent(m.begR),y.percentPrevious=m.difR,y.percentPreviousLabel=i.formatPercent(m.difR),y.percentTotal=m.sumR,y.percenTotalLabel=i.formatPercent(m.sumR));var w=i.castOption(o,m.i,"customdata");return w&&(y.customdata=w),i.texttemplateString(s,y,t._d3locale,_,y,o._meta||{})}(t,e,r,n,a):s.textinfo?function(t,e,r,n){var a=t[0].trace,o="h"===a.orientation,s="waterfall"===a.type,l="funnel"===a.type;function c(t){var e=o?r:n;return u(e,+t,!0).text}var h,f,p=a.textinfo,d=t[e],g=p.split("+"),v=[],m=function(t){return-1!==g.indexOf(t)};if(m("label")&&v.push((f=t[e].p,u(o?n:r,f,!0).text)),m("text")&&(0===(h=i.castOption(a,d.i,"text"))||h)&&v.push(h),s){var y=+d.rawS||d.s,x=d.v,b=x-y;m("initial")&&v.push(c(b)),m("delta")&&v.push(c(y)),m("final")&&v.push(c(x))}if(l){m("value")&&v.push(c(d.s));var _=0;m("percent initial")&&_++,m("percent previous")&&_++,m("percent total")&&_++;var w=_>1;m("percent initial")&&(h=i.formatPercent(d.begR),w&&(h+=" of initial"),v.push(h)),m("percent previous")&&(h=i.formatPercent(d.difR),w&&(h+=" of previous"),v.push(h)),m("percent total")&&(h=i.formatPercent(d.sumR),w&&(h+=" of total"),v.push(h))}return v.join("<br>")}(e,r,n,a):g.getValue(s.text,r),g.coerceString(y,o)}(C,n,a,k,A);w=function(t,e){var r=g.getValue(t.textposition,e);return g.coerceEnumerated(x,r)}(O,a);var D="stack"===v.mode||"relative"===v.mode,R=n[a],F=!D||R._outmost;if(I&&"none"!==w&&(!R.isBlank&&s!==c&&h!==p||"auto"!==w&&"inside"!==w)){var B=C.font,N=d.getBarColor(n[a],O),j=d.getInsideTextFont(O,a,B,N),V=d.getOutsideTextFont(O,a,B),U=r.datum();z?"log"===k.type&&U.s0<=0&&(s=k.range[0]<k.range[1]?0:k._length):"log"===A.type&&U.s0<=0&&(h=A.range[0]<A.range[1]?A._length:0);var q,H,G,Y,W,X=Math.abs(c-s)-2*_,Z=Math.abs(p-h)-2*_;if("outside"===w&&(F||R.hasB||(w="inside")),"auto"===w)if(F){w="inside",W=i.ensureUniformFontSize(t,j),q=P(r,I,W),H=l.bBox(q.node()),G=H.width,Y=H.height;var J=G>0&&Y>0,K=G<=X&&Y<=Z,Q=G<=Z&&Y<=X,$=z?X>=G*(Z/Y):Z>=Y*(X/G);J&&(K||Q||$)?w="inside":(w="outside",q.remove(),q=null)}else w="inside";if(!q){W=i.ensureUniformFontSize(t,"outside"===w?V:j);var tt=(q=P(r,I,W)).attr("transform");if(q.attr("transform",""),H=l.bBox(q.node()),G=H.width,Y=H.height,q.attr("transform",tt),G<=0||Y<=0)return void q.remove()}var et,rt,nt=O.textangle;"outside"===w?(rt="both"===O.constraintext||"outside"===O.constraintext,et=function(t,e,r,n,a,i){var o,s=!!i.isHorizontal,l=!!i.constrained,c=i.angle||0,u=a.width,h=a.height,f=Math.abs(e-t),p=Math.abs(n-r);o=s?p>2*_?_:0:f>2*_?_:0;var d=1;l&&(d=s?Math.min(1,p/h):Math.min(1,f/u));var g=S(c),v=E(a,g),m=(s?v.x:v.y)/2,y=(a.left+a.right)/2,x=(a.top+a.bottom)/2,b=(t+e)/2,w=(r+n)/2,k=0,M=0,A=s?T(e,t):T(r,n);return s?(b=e-A*o,k=A*m):(w=n+A*o,M=-A*m),{textX:y,textY:x,targetX:b,targetY:w,anchorX:k,anchorY:M,scale:d,rotate:g}}(s,c,h,p,H,{isHorizontal:z,constrained:rt,angle:nt})):(rt="both"===O.constraintext||"inside"===O.constraintext,et=L(s,c,h,p,H,{isHorizontal:z,constrained:rt,angle:nt,anchor:O.insidetextanchor})),et.fontSize=W.size,f(O.type,et,C),R.transform=et,M(q,C,v,m).attr("transform",i.getTextTransform(et))}else r.select("text").remove()}(t,e,O,r,p,B,N,j,V,v,m),e.layerClipId&&l.hideOutsideRangePoint(c,O.select("text"),w,C,h.xcalendar,h.ycalendar)});var j=!1===h.cliponaxis;l.setClipUrl(c,j?null:e.layerClipId,t)});c.getComponentMethod("errorbars","plot")(t,O,e,v)},toMoveInsideBar:L}},{"../../components/color":591,"../../components/drawing":612,"../../components/fx/helpers":626,"../../lib":717,"../../lib/svg_text_utils":741,"../../plots/cartesian/axes":765,"../../registry":846,"./attributes":856,"./constants":858,"./helpers":862,"./style":870,"./uniform_text":872,d3:165,"fast-isnumeric":228}],868:[function(t,e,r){"use strict";function n(t,e,r,n,a){var i=e.c2p(n?t.s0:t.p0,!0),o=e.c2p(n?t.s1:t.p1,!0),s=r.c2p(n?t.p0:t.s0,!0),l=r.c2p(n?t.p1:t.s1,!0);return a?[(i+o)/2,(s+l)/2]:n?[o,(s+l)/2]:[(i+o)/2,l]}e.exports=function(t,e){var r,a=t.cd,i=t.xaxis,o=t.yaxis,s=a[0].trace,l="funnel"===s.type,c="h"===s.orientation,u=[];if(!1===e)for(r=0;r<a.length;r++)a[r].selected=0;else for(r=0;r<a.length;r++){var h=a[r],f="ct"in h?h.ct:n(h,i,o,c,l);e.contains(f,!1,r,t)?(u.push({pointNumber:r,x:i.c2d(h.x),y:o.c2d(h.y)}),h.selected=1):h.selected=0}return u}},{}],869:[function(t,e,r){"use strict";e.exports=i;var n=t("../../lib").distinctVals,a=t("../../constants/numerical").BADNUM;function i(t,e){this.traces=t,this.sepNegVal=e.sepNegVal,this.overlapNoMerge=e.overlapNoMerge;for(var r=1/0,i=[],o=0;o<t.length;o++){for(var s=t[o],l=0;l<s.length;l++){var c=s[l];c.p!==a&&i.push(c.p)}s[0]&&s[0].width1&&(r=Math.min(s[0].width1,r))}this.positions=i;var u=n(i);this.distinctPositions=u.vals,1===u.vals.length&&r!==1/0?this.minDiff=r:this.minDiff=Math.min(u.minDiff,r),this.binWidth=this.minDiff,this.bins={}}i.prototype.put=function(t,e){var r=this.getLabel(t,e),n=this.bins[r]||0;return this.bins[r]=n+e,n},i.prototype.get=function(t,e){var r=this.getLabel(t,e);return this.bins[r]||0},i.prototype.getLabel=function(t,e){return(e<0&&this.sepNegVal?"v":"^")+(this.overlapNoMerge?t:Math.round(t/this.binWidth))}},{"../../constants/numerical":693,"../../lib":717}],870:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/color"),i=t("../../components/drawing"),o=t("../../lib"),s=t("../../registry"),l=t("./uniform_text").resizeText,c=t("./attributes"),u=c.textfont,h=c.insidetextfont,f=c.outsidetextfont,p=t("./helpers");function d(t,e,r){i.pointStyle(t.selectAll("path"),e,r),g(t,e,r)}function g(t,e,r){t.selectAll("text").each(function(t){var a=n.select(this),s=o.ensureUniformFontSize(r,v(a,t,e,r));i.font(a,s)})}function v(t,e,r,n){var a=n._fullLayout.font,i=r.textfont;if(t.classed("bartext-inside")){var o=_(e,r);i=y(r,e.i,a,o)}else t.classed("bartext-outside")&&(i=x(r,e.i,a));return i}function m(t,e,r){return b(u,t.textfont,e,r)}function y(t,e,r,n){var i=m(t,e,r);return(void 0===t._input.textfont||void 0===t._input.textfont.color||Array.isArray(t.textfont.color)&&void 0===t.textfont.color[e])&&(i={color:a.contrast(n),family:i.family,size:i.size}),b(h,t.insidetextfont,e,i)}function x(t,e,r){var n=m(t,e,r);return b(f,t.outsidetextfont,e,n)}function b(t,e,r,n){e=e||{};var a=p.getValue(e.family,r),i=p.getValue(e.size,r),o=p.getValue(e.color,r);return{family:p.coerceString(t.family,a,n.family),size:p.coerceNumber(t.size,i,n.size),color:p.coerceColor(t.color,o,n.color)}}function _(t,e){return"waterfall"===e.type?e[t.dir].marker.color:t.mc||e.marker.color}e.exports={style:function(t){var e=n.select(t).selectAll("g.barlayer").selectAll("g.trace");l(t,e,"bar");var r=e.size(),a=t._fullLayout;e.style("opacity",function(t){return t[0].trace.opacity}).each(function(t){("stack"===a.barmode&&r>1||0===a.bargap&&0===a.bargroupgap&&!t[0].trace.marker.line.width)&&n.select(this).attr("shape-rendering","crispEdges")}),e.selectAll("g.points").each(function(e){d(n.select(this),e[0].trace,t)}),s.getComponentMethod("errorbars","style")(e)},styleTextPoints:g,styleOnSelect:function(t,e,r){var a=e[0].trace;a.selectedpoints?function(t,e,r){i.selectedPointStyle(t.selectAll("path"),e),function(t,e,r){t.each(function(t){var a,s=n.select(this);if(t.selected){a=o.ensureUniformFontSize(r,v(s,t,e,r));var l=e.selected.textfont&&e.selected.textfont.color;l&&(a.color=l),i.font(s,a)}else i.selectedTextStyle(s,e)})}(t.selectAll("text"),e,r)}(r,a,t):(d(r,a,t),s.getComponentMethod("errorbars","style")(r))},getInsideTextFont:y,getOutsideTextFont:x,getBarColor:_,resizeText:l}},{"../../components/color":591,"../../components/drawing":612,"../../lib":717,"../../registry":846,"./attributes":856,"./helpers":862,"./uniform_text":872,d3:165}],871:[function(t,e,r){"use strict";var n=t("../../components/color"),a=t("../../components/colorscale/helpers").hasColorscale,i=t("../../components/colorscale/defaults");e.exports=function(t,e,r,o,s){r("marker.color",o),a(t,"marker")&&i(t,e,s,r,{prefix:"marker.",cLetter:"c"}),r("marker.line.color",n.defaultLine),a(t,"marker.line")&&i(t,e,s,r,{prefix:"marker.line.",cLetter:"c"}),r("marker.line.width"),r("marker.opacity"),r("selected.marker.color"),r("unselected.marker.color")}},{"../../components/color":591,"../../components/colorscale/defaults":601,"../../components/colorscale/helpers":602}],872:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib");function i(t){return"_"+t+"Text_minsize"}e.exports={recordMinTextSize:function(t,e,r){if(r.uniformtext.mode){var n=i(t),a=r.uniformtext.minsize,o=e.scale*e.fontSize;e.hide=o<a,r[n]=r[n]||1/0,e.hide||(r[n]=Math.min(r[n],Math.max(o,a)))}},clearMinTextSize:function(t,e){e[i(t)]=void 0},resizeText:function(t,e,r){var i=t._fullLayout,o=i["_"+r+"Text_minsize"];if(o){var s,l="hide"===i.uniformtext.mode;switch(r){case"funnelarea":case"pie":case"sunburst":s="g.slice";break;case"treemap":s="g.slice, g.pathbar";break;default:s="g.points > g.point"}e.selectAll(s).each(function(t){var e=t.transform;e&&(e.scale=l&&e.hide?0:o/e.fontSize,n.select(this).select("text").attr("transform",a.getTextTransform(e)))})}}}},{"../../lib":717,d3:165}],873:[function(t,e,r){"use strict";var n=t("../../plots/template_attributes").hovertemplateAttrs,a=t("../../lib/extend").extendFlat,i=t("../scatterpolar/attributes"),o=t("../bar/attributes");e.exports={r:i.r,theta:i.theta,r0:i.r0,dr:i.dr,theta0:i.theta0,dtheta:i.dtheta,thetaunit:i.thetaunit,base:a({},o.base,{}),offset:a({},o.offset,{}),width:a({},o.width,{}),text:a({},o.text,{}),hovertext:a({},o.hovertext,{}),marker:o.marker,hoverinfo:i.hoverinfo,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},{"../../lib/extend":708,"../../plots/template_attributes":841,"../bar/attributes":856,"../scatterpolar/attributes":1193}],874:[function(t,e,r){"use strict";var n=t("../../components/colorscale/helpers").hasColorscale,a=t("../../components/colorscale/calc"),i=t("../bar/arrays_to_calcdata"),o=t("../bar/cross_trace_calc").setGroupPositions,s=t("../scatter/calc_selection"),l=t("../../registry").traceIs,c=t("../../lib").extendFlat;e.exports={calc:function(t,e){for(var r=t._fullLayout,o=e.subplot,l=r[o].radialaxis,c=r[o].angularaxis,u=l.makeCalcdata(e,"r"),h=c.makeCalcdata(e,"theta"),f=e._length,p=new Array(f),d=u,g=h,v=0;v<f;v++)p[v]={p:g[v],s:d[v]};function m(t){var r=e[t];void 0!==r&&(e["_"+t]=Array.isArray(r)?c.makeCalcdata(e,t):c.d2c(r,e.thetaunit))}return"linear"===c.type&&(m("width"),m("offset")),n(e,"marker")&&a(t,e,{vals:e.marker.color,containerStr:"marker",cLetter:"c"}),n(e,"marker.line")&&a(t,e,{vals:e.marker.line.color,containerStr:"marker.line",cLetter:"c"}),i(p,e),s(p,e),p},crossTraceCalc:function(t,e,r){for(var n=t.calcdata,a=[],i=0;i<n.length;i++){var s=n[i],u=s[0].trace;!0===u.visible&&l(u,"bar")&&u.subplot===r&&a.push(s)}var h=c({},e.radialaxis,{_id:"x"}),f=e.angularaxis;o(t,f,h,a,{mode:e.barmode,norm:e.barnorm,gap:e.bargap,groupgap:e.bargroupgap})}}},{"../../components/colorscale/calc":599,"../../components/colorscale/helpers":602,"../../lib":717,"../../registry":846,"../bar/arrays_to_calcdata":855,"../bar/cross_trace_calc":859,"../scatter/calc_selection":1122}],875:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatterpolar/defaults").handleRThetaDefaults,i=t("../bar/style_defaults"),o=t("./attributes");e.exports=function(t,e,r,s){function l(r,a){return n.coerce(t,e,o,r,a)}a(t,e,s,l)?(l("thetaunit"),l("base"),l("offset"),l("width"),l("text"),l("hovertext"),l("hovertemplate"),i(t,e,l,r,s),n.coerceSelectionMarkerOpacity(e,l)):e.visible=!1}},{"../../lib":717,"../bar/style_defaults":871,"../scatterpolar/defaults":1195,"./attributes":873}],876:[function(t,e,r){"use strict";var n=t("../../components/fx"),a=t("../../lib"),i=t("../bar/hover").getTraceColor,o=a.fillText,s=t("../scatterpolar/hover").makeHoverPointText,l=t("../../plots/polar/helpers").isPtInsidePolygon;e.exports=function(t,e,r){var c=t.cd,u=c[0].trace,h=t.subplot,f=h.radialAxis,p=h.angularAxis,d=h.vangles,g=d?l:a.isPtInsideSector,v=t.maxHoverDistance,m=p._period||2*Math.PI,y=Math.abs(f.g2p(Math.sqrt(e*e+r*r))),x=Math.atan2(r,e);f.range[0]>f.range[1]&&(x+=Math.PI);if(n.getClosest(c,function(t){return g(y,x,[t.rp0,t.rp1],[t.thetag0,t.thetag1],d)?v+Math.min(1,Math.abs(t.thetag1-t.thetag0)/m)-1+(t.rp1-y)/(t.rp1-t.rp0)-1:1/0},t),!1!==t.index){var b=c[t.index];t.x0=t.x1=b.ct[0],t.y0=t.y1=b.ct[1];var _=a.extendFlat({},b,{r:b.s,theta:b.p});return o(b,u,t),s(_,u,h,t),t.hovertemplate=u.hovertemplate,t.color=i(u,b),t.xLabelVal=t.yLabelVal=void 0,b.s<0&&(t.idealAlign="left"),[t]}}},{"../../components/fx":630,"../../lib":717,"../../plots/polar/helpers":828,"../bar/hover":863,"../scatterpolar/hover":1197}],877:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"barpolar",basePlotModule:t("../../plots/polar"),categories:["polar","bar","showLegend"],attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults"),supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc").calc,crossTraceCalc:t("./calc").crossTraceCalc,plot:t("./plot"),colorbar:t("../scatter/marker_colorbar"),formatLabels:t("../scatterpolar/format_labels"),style:t("../bar/style").style,styleOnSelect:t("../bar/style").styleOnSelect,hoverPoints:t("./hover"),selectPoints:t("../bar/select"),meta:{}}},{"../../plots/polar":829,"../bar/select":868,"../bar/style":870,"../scatter/marker_colorbar":1138,"../scatterpolar/format_labels":1196,"./attributes":873,"./calc":874,"./defaults":875,"./hover":876,"./layout_attributes":878,"./layout_defaults":879,"./plot":880}],878:[function(t,e,r){"use strict";e.exports={barmode:{valType:"enumerated",values:["stack","overlay"],dflt:"stack",editType:"calc"},bargap:{valType:"number",dflt:.1,min:0,max:1,editType:"calc"}}},{}],879:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e,r){var i,o={};function s(r,o){return n.coerce(t[i]||{},e[i],a,r,o)}for(var l=0;l<r.length;l++){var c=r[l];"barpolar"===c.type&&!0===c.visible&&(o[i=c.subplot]||(s("barmode"),s("bargap"),o[i]=1))}}},{"../../lib":717,"./layout_attributes":878}],880:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../../lib"),o=t("../../components/drawing"),s=t("../../plots/polar/helpers");e.exports=function(t,e,r){var l=e.xaxis,c=e.yaxis,u=e.radialAxis,h=e.angularAxis,f=function(t){var e=t.cxx,r=t.cyy;if(t.vangles)return function(n,a,o,l){var c,u;i.angleDelta(o,l)>0?(c=o,u=l):(c=l,u=o);var h=s.findEnclosingVertexAngles(c,t.vangles)[0],f=s.findEnclosingVertexAngles(u,t.vangles)[1],p=[h,(c+u)/2,f];return s.pathPolygonAnnulus(n,a,c,u,p,e,r)};return function(t,n,a,o){return i.pathAnnulus(t,n,a,o,e,r)}}(e),p=e.layers.frontplot.select("g.barlayer");i.makeTraceGroups(p,r,"trace bars").each(function(){var r=n.select(this),s=i.ensureSingle(r,"g","points").selectAll("g.point").data(i.identity);s.enter().append("g").style("vector-effect","non-scaling-stroke").style("stroke-miterlimit",2).classed("point",!0),s.exit().remove(),s.each(function(t){var e,r=n.select(this),o=t.rp0=u.c2p(t.s0),s=t.rp1=u.c2p(t.s1),p=t.thetag0=h.c2g(t.p0),d=t.thetag1=h.c2g(t.p1);if(a(o)&&a(s)&&a(p)&&a(d)&&o!==s&&p!==d){var g=u.c2g(t.s1),v=(p+d)/2;t.ct=[l.c2p(g*Math.cos(v)),c.c2p(g*Math.sin(v))],e=f(o,s,p,d)}else e="M0,0Z";i.ensureSingle(r,"path").attr("d",e)}),o.setClipUrl(r,e._hasClipOnAxisFalse?e.clipIds.forTraces:null,t)})}},{"../../components/drawing":612,"../../lib":717,"../../plots/polar/helpers":828,d3:165,"fast-isnumeric":228}],881:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),a=t("../bar/attributes"),i=t("../../components/color/attributes"),o=t("../../plots/template_attributes").hovertemplateAttrs,s=t("../../lib/extend").extendFlat,l=n.marker,c=l.line;e.exports={y:{valType:"data_array",editType:"calc+clearAxisTypes"},x:{valType:"data_array",editType:"calc+clearAxisTypes"},x0:{valType:"any",editType:"calc+clearAxisTypes"},y0:{valType:"any",editType:"calc+clearAxisTypes"},dx:{valType:"number",editType:"calc"},dy:{valType:"number",editType:"calc"},name:{valType:"string",editType:"calc+clearAxisTypes"},q1:{valType:"data_array",editType:"calc+clearAxisTypes"},median:{valType:"data_array",editType:"calc+clearAxisTypes"},q3:{valType:"data_array",editType:"calc+clearAxisTypes"},lowerfence:{valType:"data_array",editType:"calc"},upperfence:{valType:"data_array",editType:"calc"},notched:{valType:"boolean",editType:"calc"},notchwidth:{valType:"number",min:0,max:.5,dflt:.25,editType:"calc"},notchspan:{valType:"data_array",editType:"calc"},boxpoints:{valType:"enumerated",values:["all","outliers","suspectedoutliers",!1],editType:"calc"},jitter:{valType:"number",min:0,max:1,editType:"calc"},pointpos:{valType:"number",min:-2,max:2,editType:"calc"},boxmean:{valType:"enumerated",values:[!0,"sd",!1],editType:"calc"},mean:{valType:"data_array",editType:"calc"},sd:{valType:"data_array",editType:"calc"},orientation:{valType:"enumerated",values:["v","h"],editType:"calc+clearAxisTypes"},quartilemethod:{valType:"enumerated",values:["linear","exclusive","inclusive"],dflt:"linear",editType:"calc"},width:{valType:"number",min:0,dflt:0,editType:"calc"},marker:{outliercolor:{valType:"color",dflt:"rgba(0, 0, 0, 0)",editType:"style"},symbol:s({},l.symbol,{arrayOk:!1,editType:"plot"}),opacity:s({},l.opacity,{arrayOk:!1,dflt:1,editType:"style"}),size:s({},l.size,{arrayOk:!1,editType:"calc"}),color:s({},l.color,{arrayOk:!1,editType:"style"}),line:{color:s({},c.color,{arrayOk:!1,dflt:i.defaultLine,editType:"style"}),width:s({},c.width,{arrayOk:!1,dflt:0,editType:"style"}),outliercolor:{valType:"color",editType:"style"},outlierwidth:{valType:"number",min:0,dflt:1,editType:"style"},editType:"style"},editType:"plot"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,dflt:2,editType:"style"},editType:"plot"},fillcolor:n.fillcolor,whiskerwidth:{valType:"number",min:0,max:1,dflt:.5,editType:"calc"},offsetgroup:a.offsetgroup,alignmentgroup:a.alignmentgroup,selected:{marker:n.selected.marker,editType:"style"},unselected:{marker:n.unselected.marker,editType:"style"},text:s({},n.text,{}),hovertext:s({},n.hovertext,{}),hovertemplate:o({}),hoveron:{valType:"flaglist",flags:["boxes","points"],dflt:"boxes+points",editType:"style"}}},{"../../components/color/attributes":590,"../../lib/extend":708,"../../plots/template_attributes":841,"../bar/attributes":856,"../scatter/attributes":1120}],882:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../plots/cartesian/axes"),i=t("../../lib"),o=t("../../constants/numerical").BADNUM,s=i._;e.exports=function(t,e){var r,l,m,y,x,b,_=t._fullLayout,w=a.getFromId(t,e.xaxis||"x"),k=a.getFromId(t,e.yaxis||"y"),T=[],M="violin"===e.type?"_numViolins":"_numBoxes";"h"===e.orientation?(m=w,y="x",x=k,b="y"):(m=k,y="y",x=w,b="x");var A,S,E,L,C,P,O=function(t,e,r,a){var o,s=e+"0"in t,l="d"+e in t;if(e in t||s&&l)return r.makeCalcdata(t,e);o=s?t[e+"0"]:"name"in t&&("category"===r.type||n(t.name)&&-1!==["linear","log"].indexOf(r.type)||i.isDateTime(t.name)&&"date"===r.type)?t.name:a;for(var c="multicategory"===r.type?r.r2c_just_indices(o):r.d2c(o,0,t[e+"calendar"]),u=t._length,h=new Array(u),f=0;f<u;f++)h[f]=c;return h}(e,b,x,_[M]),z=i.distinctVals(O),I=z.vals,D=z.minDiff/2,R="all"===(e.boxpoints||e.points)?i.identity:function(t){return t.v<A.lf||t.v>A.uf};if(e._hasPreCompStats){var F=e[y],B=function(t){return m.d2c((e[t]||[])[r])},N=1/0,j=-1/0;for(r=0;r<e._length;r++){var V=O[r];if(n(V)){if((A={}).pos=A[b]=V,A.q1=B("q1"),A.med=B("median"),A.q3=B("q3"),S=[],F&&i.isArrayOrTypedArray(F[r]))for(l=0;l<F[r].length;l++)(P=m.d2c(F[r][l]))!==o&&(c(C={v:P,i:[r,l]},e,[r,l]),S.push(C));if(A.pts=S.sort(u),L=(E=A[y]=S.map(h)).length,A.med!==o&&A.q1!==o&&A.q3!==o&&A.med>=A.q1&&A.q3>=A.med){var U=B("lowerfence");A.lf=U!==o&&U<=A.q1?U:f(A,E,L);var q=B("upperfence");A.uf=q!==o&&q>=A.q3?q:p(A,E,L);var H=B("mean");A.mean=H!==o?H:L?i.mean(E,L):(A.q1+A.q3)/2;var G=B("sd");A.sd=H!==o&&G>=0?G:L?i.stdev(E,L,A.mean):A.q3-A.q1,A.lo=d(A),A.uo=g(A);var Y=B("notchspan");Y=Y!==o&&Y>0?Y:v(A,L),A.ln=A.med-Y,A.un=A.med+Y;var W=A.lf,X=A.uf;e.boxpoints&&E.length&&(W=Math.min(W,E[0]),X=Math.max(X,E[L-1])),e.notched&&(W=Math.min(W,A.ln),X=Math.max(X,A.un)),A.min=W,A.max=X}else{var Z;i.warn(["Invalid input - make sure that q1 <= median <= q3","q1 = "+A.q1,"median = "+A.med,"q3 = "+A.q3].join("\n")),Z=A.med!==o?A.med:A.q1!==o?A.q3!==o?(A.q1+A.q3)/2:A.q1:A.q3!==o?A.q3:0,A.med=Z,A.q1=A.q3=Z,A.lf=A.uf=Z,A.mean=A.sd=Z,A.ln=A.un=Z,A.min=A.max=Z}N=Math.min(N,A.min),j=Math.max(j,A.max),A.pts2=S.filter(R),T.push(A)}}e._extremes[m._id]=a.findExtremes(m,[N,j],{padded:!0})}else{var J=m.makeCalcdata(e,y),K=function(t,e){for(var r=t.length,n=new Array(r+1),a=0;a<r;a++)n[a]=t[a]-e;return n[r]=t[r-1]+e,n}(I,D),Q=I.length,$=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=[];return e}(Q);for(r=0;r<e._length;r++)if(P=J[r],n(P)){var tt=i.findBin(O[r],K);tt>=0&&tt<Q&&(c(C={v:P,i:r},e,r),$[tt].push(C))}var et=1/0,rt=-1/0,nt=e.quartilemethod,at="exclusive"===nt,it="inclusive"===nt;for(r=0;r<Q;r++)if($[r].length>0){var ot,st;if((A={}).pos=A[b]=I[r],S=A.pts=$[r].sort(u),L=(E=A[y]=S.map(h)).length,A.min=E[0],A.max=E[L-1],A.mean=i.mean(E,L),A.sd=i.stdev(E,L,A.mean),A.med=i.interp(E,.5),L%2&&(at||it))at?(ot=E.slice(0,L/2),st=E.slice(L/2+1)):it&&(ot=E.slice(0,L/2+1),st=E.slice(L/2)),A.q1=i.interp(ot,.5),A.q3=i.interp(st,.5);else A.q1=i.interp(E,.25),A.q3=i.interp(E,.75);A.lf=f(A,E,L),A.uf=p(A,E,L),A.lo=d(A),A.uo=g(A);var lt=v(A,L);A.ln=A.med-lt,A.un=A.med+lt,et=Math.min(et,A.ln),rt=Math.max(rt,A.un),A.pts2=S.filter(R),T.push(A)}e._extremes[m._id]=a.findExtremes(m,e.notched?J.concat([et,rt]):J,{padded:!0})}return function(t,e){if(i.isArrayOrTypedArray(e.selectedpoints))for(var r=0;r<t.length;r++){for(var n=t[r].pts||[],a={},o=0;o<n.length;o++)a[n[o].i]=o;i.tagSelected(n,e,a)}}(T,e),T.length>0?(T[0].t={num:_[M],dPos:D,posLetter:b,valLetter:y,labels:{med:s(t,"median:"),min:s(t,"min:"),q1:s(t,"q1:"),q3:s(t,"q3:"),max:s(t,"max:"),mean:"sd"===e.boxmean?s(t,"mean \xb1 \u03c3:"):s(t,"mean:"),lf:s(t,"lower fence:"),uf:s(t,"upper fence:")}},_[M]++,T):[{t:{empty:!0}}]};var l={text:"tx",hovertext:"htx"};function c(t,e,r){for(var n in l)i.isArrayOrTypedArray(e[n])&&(Array.isArray(r)?i.isArrayOrTypedArray(e[n][r[0]])&&(t[l[n]]=e[n][r[0]][r[1]]):t[l[n]]=e[n][r])}function u(t,e){return t.v-e.v}function h(t){return t.v}function f(t,e,r){return 0===r?t.q1:Math.min(t.q1,e[Math.min(i.findBin(2.5*t.q1-1.5*t.q3,e,!0)+1,r-1)])}function p(t,e,r){return 0===r?t.q3:Math.max(t.q3,e[Math.max(i.findBin(2.5*t.q3-1.5*t.q1,e),0)])}function d(t){return 4*t.q1-3*t.q3}function g(t){return 4*t.q3-3*t.q1}function v(t,e){return 0===e?0:1.57*(t.q3-t.q1)/Math.sqrt(e)}},{"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/axes":765,"fast-isnumeric":228}],883:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../lib"),i=t("../../plots/cartesian/axis_ids").getAxisGroup,o=["v","h"];function s(t,e,r,o){var s,l,c,u=e.calcdata,h=e._fullLayout,f=o._id,p=f.charAt(0),d=[],g=0;for(s=0;s<r.length;s++)for(c=u[r[s]],l=0;l<c.length;l++)d.push(o.c2l(c[l].pos,!0)),g+=(c[l].pts2||[]).length;if(d.length){var v=a.distinctVals(d),m=v.minDiff/2;n.minDtick(o,v.minDiff,v.vals[0],!0);var y=h["violin"===t?"_numViolins":"_numBoxes"],x="group"===h[t+"mode"]&&y>1,b=1-h[t+"gap"],_=1-h[t+"groupgap"];for(s=0;s<r.length;s++){var w,k,T,M,A,S,E=(c=u[r[s]])[0].trace,L=c[0].t,C=E.width,P=E.side;if(C)w=k=M=C/2,T=0;else if(w=m,x){var O=i(h,o._id)+E.orientation,z=(h._alignmentOpts[O]||{})[E.alignmentgroup]||{},I=Object.keys(z.offsetGroups||{}).length,D=I||y;k=w*b*_/D,T=2*w*(((I?E._offsetIndex:L.num)+.5)/D-.5)*b,M=w*b/D}else k=w*b*_,T=0,M=w;L.dPos=w,L.bPos=T,L.bdPos=k,L.wHover=M;var R,F,B,N,j,V,U=T+k,q=Boolean(C);if("positive"===P?(A=w*(C?1:.5),R=U,S=R=T):"negative"===P?(A=R=T,S=w*(C?1:.5),F=U):(A=S=w,R=F=U),(E.boxpoints||E.points)&&g>0){var H=E.pointpos,G=E.jitter,Y=E.marker.size/2,W=0;H+G>=0&&((W=U*(H+G))>A?(q=!0,j=Y,B=W):W>R&&(j=Y,B=A)),W<=A&&(B=A);var X=0;H-G<=0&&((X=-U*(H-G))>S?(q=!0,V=Y,N=X):X>F&&(V=Y,N=S)),X<=S&&(N=S)}else B=A,N=S;var Z=new Array(c.length);for(l=0;l<c.length;l++)Z[l]=c[l].pos;E._extremes[f]=n.findExtremes(o,Z,{padded:q,vpadminus:N,vpadplus:B,vpadLinearized:!0,ppadminus:{x:V,y:j}[p],ppadplus:{x:j,y:V}[p]})}}}e.exports={crossTraceCalc:function(t,e){for(var r=t.calcdata,n=e.xaxis,a=e.yaxis,i=0;i<o.length;i++){for(var l=o[i],c="h"===l?a:n,u=[],h=0;h<r.length;h++){var f=r[h],p=f[0].t,d=f[0].trace;!0!==d.visible||"box"!==d.type&&"candlestick"!==d.type||p.empty||(d.orientation||"v")!==l||d.xaxis!==n._id||d.yaxis!==a._id||u.push(h)}s("box",t,u,c)}},setPositionOffset:s}},{"../../lib":717,"../../plots/cartesian/axes":765,"../../plots/cartesian/axis_ids":768}],884:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../registry"),i=t("../../components/color"),o=t("../bar/defaults").handleGroupingDefaults,s=t("../../plots/cartesian/axis_autotype"),l=t("./attributes");function c(t,e,r,i){function o(t){var e=0;return t&&t.length&&(e+=1,n.isArrayOrTypedArray(t[0])&&t[0].length&&(e+=1)),e}function c(e){return n.validate(t[e],l[e])}var u,h=r("y"),f=r("x");if("box"===e.type){var p=r("q1"),d=r("median"),g=r("q3");e._hasPreCompStats=p&&p.length&&d&&d.length&&g&&g.length,u=Math.min(n.minRowLength(p),n.minRowLength(d),n.minRowLength(g))}var v,m,y=o(h),x=o(f),b=y&&n.minRowLength(h),_=x&&n.minRowLength(f);if(e._hasPreCompStats)switch(String(x)+String(y)){case"00":var w=c("x0")||c("dx");v=(c("y0")||c("dy"))&&!w?"h":"v",m=u;break;case"10":v="v",m=Math.min(u,_);break;case"20":v="h",m=Math.min(u,f.length);break;case"01":v="h",m=Math.min(u,b);break;case"02":v="v",m=Math.min(u,h.length);break;case"12":v="v",m=Math.min(u,_,h.length);break;case"21":v="h",m=Math.min(u,f.length,b);break;case"11":m=0;break;case"22":var k,T=!1;for(k=0;k<f.length;k++)if("category"===s(f[k])){T=!0;break}if(T)v="v",m=Math.min(u,_,h.length);else{for(k=0;k<h.length;k++)if("category"===s(h[k])){T=!0;break}T?(v="h",m=Math.min(u,f.length,b)):(v="v",m=Math.min(u,_,h.length))}}else y>0?(v="v",m=x>0?Math.min(_,b):Math.min(b)):x>0?(v="h",m=Math.min(_)):m=0;if(m){e._length=m;var M=r("orientation",v);e._hasPreCompStats?"v"===M&&0===x?(r("x0",0),r("dx",1)):"h"===M&&0===y&&(r("y0",0),r("dy",1)):"v"===M&&0===x?r("x0"):"h"===M&&0===y&&r("y0"),a.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y"],i)}else e.visible=!1}function u(t,e,r,a){var i=a.prefix,o=n.coerce2(t,e,l,"marker.outliercolor"),s=r("marker.line.outliercolor"),c="outliers";e._hasPreCompStats?c="all":(o||s)&&(c="suspectedoutliers");var u=r(i+"points",c);u?(r("jitter","all"===u?.3:0),r("pointpos","all"===u?-1.5:0),r("marker.symbol"),r("marker.opacity"),r("marker.size"),r("marker.color",e.line.color),r("marker.line.color"),r("marker.line.width"),"suspectedoutliers"===u&&(r("marker.line.outliercolor",e.marker.color),r("marker.line.outlierwidth")),r("selected.marker.color"),r("unselected.marker.color"),r("selected.marker.size"),r("unselected.marker.size"),r("text"),r("hovertext")):delete e.marker;var h=r("hoveron");"all"!==h&&-1===h.indexOf("points")||r("hovertemplate"),n.coerceSelectionMarkerOpacity(e,r)}e.exports={supplyDefaults:function(t,e,r,a){function o(r,a){return n.coerce(t,e,l,r,a)}if(c(t,e,o,a),!1!==e.visible){var s=e._hasPreCompStats;s&&(o("lowerfence"),o("upperfence")),o("line.color",(t.marker||{}).color||r),o("line.width"),o("fillcolor",i.addOpacity(e.line.color,.5));var h=!1;if(s){var f=o("mean"),p=o("sd");f&&f.length&&(h=!0,p&&p.length&&(h="sd"))}o("boxmean",h),o("whiskerwidth"),o("width"),o("quartilemethod");var d=!1;if(s){var g=o("notchspan");g&&g.length&&(d=!0)}else n.validate(t.notchwidth,l.notchwidth)&&(d=!0);o("notched",d)&&o("notchwidth"),u(t,e,o,{prefix:"box"})}},crossTraceDefaults:function(t,e){var r,a;function i(t){return n.coerce(a._input,a,l,t)}for(var s=0;s<t.length;s++){var c=(a=t[s]).type;"box"!==c&&"violin"!==c||(r=a._input,"group"===e[c+"mode"]&&o(r,a,e,i))}},handleSampleDefaults:c,handlePointsDefaults:u}},{"../../components/color":591,"../../lib":717,"../../plots/cartesian/axis_autotype":766,"../../registry":846,"../bar/defaults":860,"./attributes":881}],885:[function(t,e,r){"use strict";e.exports=function(t,e){return e.hoverOnBox&&(t.hoverOnBox=e.hoverOnBox),"xVal"in e&&(t.x=e.xVal),"yVal"in e&&(t.y=e.yVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},{}],886:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../lib"),i=t("../../components/fx"),o=t("../../components/color"),s=a.fillText;function l(t,e,r,s){var l,c,u,h,f,p,d,g,v,m,y,x,b,_,w=t.cd,k=t.xa,T=t.ya,M=w[0].trace,A=w[0].t,S="violin"===M.type,E=[],L=A.bdPos,C=A.wHover,P=function(t){return u.c2l(t.pos)+A.bPos-u.c2l(p)};S&&"both"!==M.side?("positive"===M.side&&(v=function(t){var e=P(t);return i.inbox(e,e+C,m)},x=L,b=0),"negative"===M.side&&(v=function(t){var e=P(t);return i.inbox(e-C,e,m)},x=0,b=L)):(v=function(t){var e=P(t);return i.inbox(e-C,e+C,m)},x=b=L),_=S?function(t){return i.inbox(t.span[0]-f,t.span[1]-f,m)}:function(t){return i.inbox(t.min-f,t.max-f,m)},"h"===M.orientation?(f=e,p=r,d=_,g=v,l="y",u=T,c="x",h=k):(f=r,p=e,d=v,g=_,l="x",u=k,c="y",h=T);var O=Math.min(1,L/Math.abs(u.r2c(u.range[1])-u.r2c(u.range[0])));function z(t){return(d(t)+g(t))/2}m=t.maxHoverDistance-O,y=t.maxSpikeDistance-O;var I=i.getDistanceFunction(s,d,g,z);if(i.getClosest(w,I,t),!1===t.index)return[];var D=w[t.index],R=M.line.color,F=(M.marker||{}).color;o.opacity(R)&&M.line.width?t.color=R:o.opacity(F)&&M.boxpoints?t.color=F:t.color=M.fillcolor,t[l+"0"]=u.c2p(D.pos+A.bPos-b,!0),t[l+"1"]=u.c2p(D.pos+A.bPos+x,!0),t[l+"LabelVal"]=D.pos;var B=l+"Spike";t.spikeDistance=z(D)*y/m,t[B]=u.c2p(D.pos,!0);var N={},j=["med","q1","q3","min","max"];(M.boxmean||(M.meanline||{}).visible)&&j.push("mean"),(M.boxpoints||M.points)&&j.push("lf","uf");for(var V=0;V<j.length;V++){var U=j[V];if(U in D&&!(D[U]in N)){N[D[U]]=!0;var q=D[U],H=h.c2p(q,!0),G=a.extendFlat({},t);G.attr=U,G[c+"0"]=G[c+"1"]=H,G[c+"LabelVal"]=q,G[c+"Label"]=(A.labels?A.labels[U]+" ":"")+n.hoverLabelText(h,q),G.hoverOnBox=!0,"mean"===U&&"sd"in D&&"sd"===M.boxmean&&(G[c+"err"]=D.sd),t.name="",t.spikeDistance=void 0,t[B]=void 0,G.hovertemplate=!1,E.push(G)}}return E}function c(t,e,r){for(var n,o,l,c=t.cd,u=t.xa,h=t.ya,f=c[0].trace,p=u.c2p(e),d=h.c2p(r),g=i.quadrature(function(t){var e=Math.max(3,t.mrc||0);return Math.max(Math.abs(u.c2p(t.x)-p)-e,1-3/e)},function(t){var e=Math.max(3,t.mrc||0);return Math.max(Math.abs(h.c2p(t.y)-d)-e,1-3/e)}),v=!1,m=0;m<c.length;m++){o=c[m];for(var y=0;y<(o.pts||[]).length;y++){var x=g(l=o.pts[y]);x<=t.distance&&(t.distance=x,v=[m,y])}}if(!v)return!1;l=(o=c[v[0]]).pts[v[1]];var b,_=u.c2p(l.x,!0),w=h.c2p(l.y,!0),k=l.mrc||1;return n=a.extendFlat({},t,{index:l.i,color:(f.marker||{}).color,name:f.name,x0:_-k,x1:_+k,y0:w-k,y1:w+k,spikeDistance:t.distance,hovertemplate:f.hovertemplate}),"h"===f.orientation?(b=h,n.xLabelVal=l.x,n.yLabelVal=o.pos):(b=u,n.xLabelVal=o.pos,n.yLabelVal=l.y),n[b._id.charAt(0)+"Spike"]=b.c2p(o.pos,!0),s(l,f,n),n}e.exports={hoverPoints:function(t,e,r,n){var a,i=t.cd[0].trace.hoveron,o=[];return-1!==i.indexOf("boxes")&&(o=o.concat(l(t,e,r,n))),-1!==i.indexOf("points")&&(a=c(t,e,r)),"closest"===n?a?[a]:o:a?(o.push(a),o):o},hoverOnBoxes:l,hoverOnPoints:c}},{"../../components/color":591,"../../components/fx":630,"../../lib":717,"../../plots/cartesian/axes":765}],887:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults").supplyDefaults,crossTraceDefaults:t("./defaults").crossTraceDefaults,supplyLayoutDefaults:t("./layout_defaults").supplyLayoutDefaults,calc:t("./calc"),crossTraceCalc:t("./cross_trace_calc").crossTraceCalc,plot:t("./plot").plot,style:t("./style").style,styleOnSelect:t("./style").styleOnSelect,hoverPoints:t("./hover").hoverPoints,eventData:t("./event_data"),selectPoints:t("./select"),moduleType:"trace",name:"box",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","symbols","oriented","box-violin","showLegend","boxLayout","zoomScale"],meta:{}}},{"../../plots/cartesian":776,"./attributes":881,"./calc":882,"./cross_trace_calc":883,"./defaults":884,"./event_data":885,"./hover":886,"./layout_attributes":888,"./layout_defaults":889,"./plot":890,"./select":891,"./style":892}],888:[function(t,e,r){"use strict";e.exports={boxmode:{valType:"enumerated",values:["group","overlay"],dflt:"overlay",editType:"calc"},boxgap:{valType:"number",min:0,max:1,dflt:.3,editType:"calc"},boxgroupgap:{valType:"number",min:0,max:1,dflt:.3,editType:"calc"}}},{}],889:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("./layout_attributes");function o(t,e,r,a,i){for(var o=i+"Layout",s=!1,l=0;l<r.length;l++){var c=r[l];if(n.traceIs(c,o)){s=!0;break}}s&&(a(i+"mode"),a(i+"gap"),a(i+"groupgap"))}e.exports={supplyLayoutDefaults:function(t,e,r){o(0,0,r,function(r,n){return a.coerce(t,e,i,r,n)},"box")},_supply:o}},{"../../lib":717,"../../registry":846,"./layout_attributes":888}],890:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../components/drawing"),o=5,s=.01;function l(t,e,r,i){var o,s,l=e.pos,c=e.val,u=i.bPos,h=i.wdPos||0,f=i.bPosPxOffset||0,p=r.whiskerwidth||0,d=r.notched||!1,g=d?1-2*r.notchwidth:1;Array.isArray(i.bdPos)?(o=i.bdPos[0],s=i.bdPos[1]):(o=i.bdPos,s=i.bdPos);var v=t.selectAll("path.box").data("violin"!==r.type||r.box.visible?a.identity:[]);v.enter().append("path").style("vector-effect","non-scaling-stroke").attr("class","box"),v.exit().remove(),v.each(function(t){if(t.empty)return"M0,0Z";var e=l.c2l(t.pos+u,!0),i=l.l2p(e)+f,v=l.l2p(e-o)+f,m=l.l2p(e+s)+f,y=l.l2p(e-h)+f,x=l.l2p(e+h)+f,b=l.l2p(e-o*g)+f,_=l.l2p(e+s*g)+f,w=c.c2p(t.q1,!0),k=c.c2p(t.q3,!0),T=a.constrain(c.c2p(t.med,!0),Math.min(w,k)+1,Math.max(w,k)-1),M=void 0===t.lf||!1===r.boxpoints,A=c.c2p(M?t.min:t.lf,!0),S=c.c2p(M?t.max:t.uf,!0),E=c.c2p(t.ln,!0),L=c.c2p(t.un,!0);"h"===r.orientation?n.select(this).attr("d","M"+T+","+b+"V"+_+"M"+w+","+v+"V"+m+(d?"H"+E+"L"+T+","+_+"L"+L+","+m:"")+"H"+k+"V"+v+(d?"H"+L+"L"+T+","+b+"L"+E+","+v:"")+"ZM"+w+","+i+"H"+A+"M"+k+","+i+"H"+S+(0===p?"":"M"+A+","+y+"V"+x+"M"+S+","+y+"V"+x)):n.select(this).attr("d","M"+b+","+T+"H"+_+"M"+v+","+w+"H"+m+(d?"V"+E+"L"+_+","+T+"L"+m+","+L:"")+"V"+k+"H"+v+(d?"V"+L+"L"+b+","+T+"L"+v+","+E:"")+"ZM"+i+","+w+"V"+A+"M"+i+","+k+"V"+S+(0===p?"":"M"+y+","+A+"H"+x+"M"+y+","+S+"H"+x))})}function c(t,e,r,n){var l=e.x,c=e.y,u=n.bdPos,h=n.bPos,f=r.boxpoints||r.points;a.seedPseudoRandom();var p=t.selectAll("g.points").data(f?function(t){return t.forEach(function(t){t.t=n,t.trace=r}),t}:[]);p.enter().append("g").attr("class","points"),p.exit().remove();var d=p.selectAll("path").data(function(t){var e,n,i=t.pts2,l=Math.max((t.max-t.min)/10,t.q3-t.q1),c=1e-9*l,p=l*s,d=[],g=0;if(r.jitter){if(0===l)for(g=1,d=new Array(i.length),e=0;e<i.length;e++)d[e]=1;else for(e=0;e<i.length;e++){var v=Math.max(0,e-o),m=i[v].v,y=Math.min(i.length-1,e+o),x=i[y].v;"all"!==f&&(i[e].v<t.lf?x=Math.min(x,t.lf):m=Math.max(m,t.uf));var b=Math.sqrt(p*(y-v)/(x-m+c))||0;b=a.constrain(Math.abs(b),0,1),d.push(b),g=Math.max(b,g)}n=2*r.jitter/(g||1)}for(e=0;e<i.length;e++){var _=i[e],w=_.v,k=r.jitter?n*d[e]*(a.pseudoRandom()-.5):0,T=t.pos+h+u*(r.pointpos+k);"h"===r.orientation?(_.y=T,_.x=w):(_.x=T,_.y=w),"suspectedoutliers"===f&&w<t.uo&&w>t.lo&&(_.so=!0)}return i});d.enter().append("path").classed("point",!0),d.exit().remove(),d.call(i.translatePoints,l,c)}function u(t,e,r,i){var o,s,l=e.pos,c=e.val,u=i.bPos,h=i.bPosPxOffset||0,f=r.boxmean||(r.meanline||{}).visible;Array.isArray(i.bdPos)?(o=i.bdPos[0],s=i.bdPos[1]):(o=i.bdPos,s=i.bdPos);var p=t.selectAll("path.mean").data("box"===r.type&&r.boxmean||"violin"===r.type&&r.box.visible&&r.meanline.visible?a.identity:[]);p.enter().append("path").attr("class","mean").style({fill:"none","vector-effect":"non-scaling-stroke"}),p.exit().remove(),p.each(function(t){var e=l.c2l(t.pos+u,!0),a=l.l2p(e)+h,i=l.l2p(e-o)+h,p=l.l2p(e+s)+h,d=c.c2p(t.mean,!0),g=c.c2p(t.mean-t.sd,!0),v=c.c2p(t.mean+t.sd,!0);"h"===r.orientation?n.select(this).attr("d","M"+d+","+i+"V"+p+("sd"===f?"m0,0L"+g+","+a+"L"+d+","+i+"L"+v+","+a+"Z":"")):n.select(this).attr("d","M"+i+","+d+"H"+p+("sd"===f?"m0,0L"+a+","+g+"L"+i+","+d+"L"+a+","+v+"Z":""))})}e.exports={plot:function(t,e,r,i){var o=e.xaxis,s=e.yaxis;a.makeTraceGroups(i,r,"trace boxes").each(function(t){var e,r,a=n.select(this),i=t[0],h=i.t,f=i.trace;h.wdPos=h.bdPos*f.whiskerwidth,!0!==f.visible||h.empty?a.remove():("h"===f.orientation?(e=s,r=o):(e=o,r=s),l(a,{pos:e,val:r},f,h),c(a,{x:o,y:s},f,h),u(a,{pos:e,val:r},f,h))})},plotBoxAndWhiskers:l,plotPoints:c,plotBoxMean:u}},{"../../components/drawing":612,"../../lib":717,d3:165}],891:[function(t,e,r){"use strict";e.exports=function(t,e){var r,n,a=t.cd,i=t.xaxis,o=t.yaxis,s=[];if(!1===e)for(r=0;r<a.length;r++)for(n=0;n<(a[r].pts||[]).length;n++)a[r].pts[n].selected=0;else for(r=0;r<a.length;r++)for(n=0;n<(a[r].pts||[]).length;n++){var l=a[r].pts[n],c=i.c2p(l.x),u=o.c2p(l.y);e.contains([c,u],null,l.i,t)?(s.push({pointNumber:l.i,x:i.c2d(l.x),y:o.c2d(l.y)}),l.selected=1):l.selected=0}return s}},{}],892:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/color"),i=t("../../components/drawing");e.exports={style:function(t,e,r){var o=r||n.select(t).selectAll("g.trace.boxes");o.style("opacity",function(t){return t[0].trace.opacity}),o.each(function(e){var r=n.select(this),o=e[0].trace,s=o.line.width;function l(t,e,r,n){t.style("stroke-width",e+"px").call(a.stroke,r).call(a.fill,n)}var c=r.selectAll("path.box");if("candlestick"===o.type)c.each(function(t){if(!t.empty){var e=n.select(this),r=o[t.dir];l(e,r.line.width,r.line.color,r.fillcolor),e.style("opacity",o.selectedpoints&&!t.selected?.3:1)}});else{l(c,s,o.line.color,o.fillcolor),r.selectAll("path.mean").style({"stroke-width":s,"stroke-dasharray":2*s+"px,"+s+"px"}).call(a.stroke,o.line.color);var u=r.selectAll("path.point");i.pointStyle(u,o,t)}})},styleOnSelect:function(t,e,r){var n=e[0].trace,a=r.selectAll("path.point");n.selectedpoints?i.selectedPointStyle(a,n):i.pointStyle(a,n,t)}}},{"../../components/color":591,"../../components/drawing":612,d3:165}],893:[function(t,e,r){"use strict";var n=t("../../lib").extendFlat,a=t("../ohlc/attributes"),i=t("../box/attributes");function o(t){return{line:{color:n({},i.line.color,{dflt:t}),width:i.line.width,editType:"style"},fillcolor:i.fillcolor,editType:"style"}}e.exports={x:a.x,open:a.open,high:a.high,low:a.low,close:a.close,line:{width:n({},i.line.width,{}),editType:"style"},increasing:o(a.increasing.line.color.dflt),decreasing:o(a.decreasing.line.color.dflt),text:a.text,hovertext:a.hovertext,whiskerwidth:n({},i.whiskerwidth,{dflt:0}),hoverlabel:a.hoverlabel}},{"../../lib":717,"../box/attributes":881,"../ohlc/attributes":1066}],894:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../ohlc/calc").calcCommon;function o(t,e,r,n){return{min:r,q1:Math.min(t,n),med:n,q3:Math.max(t,n),max:e}}e.exports=function(t,e){var r=t._fullLayout,s=a.getFromId(t,e.xaxis),l=a.getFromId(t,e.yaxis),c=s.makeCalcdata(e,"x"),u=i(t,e,c,l,o);return u.length?(n.extendFlat(u[0].t,{num:r._numBoxes,dPos:n.distinctVals(c).minDiff/2,posLetter:"x",valLetter:"y"}),r._numBoxes++,u):[{t:{empty:!0}}]}},{"../../lib":717,"../../plots/cartesian/axes":765,"../ohlc/calc":1067}],895:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/color"),i=t("../ohlc/ohlc_defaults"),o=t("./attributes");function s(t,e,r,n){var i=r(n+".line.color");r(n+".line.width",e.line.width),r(n+".fillcolor",a.addOpacity(i,.5))}e.exports=function(t,e,r,a){function l(r,a){return n.coerce(t,e,o,r,a)}i(t,e,l,a)?(l("line.width"),s(t,e,l,"increasing"),s(t,e,l,"decreasing"),l("text"),l("hovertext"),l("whiskerwidth"),a._requestRangeslider[e.xaxis]=!0):e.visible=!1}},{"../../components/color":591,"../../lib":717,"../ohlc/ohlc_defaults":1071,"./attributes":893}],896:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"candlestick",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","showLegend","candlestick","boxLayout"],meta:{},attributes:t("./attributes"),layoutAttributes:t("../box/layout_attributes"),supplyLayoutDefaults:t("../box/layout_defaults").supplyLayoutDefaults,crossTraceCalc:t("../box/cross_trace_calc").crossTraceCalc,supplyDefaults:t("./defaults"),calc:t("./calc"),plot:t("../box/plot").plot,layerName:"boxlayer",style:t("../box/style").style,hoverPoints:t("../ohlc/hover").hoverPoints,selectPoints:t("../ohlc/select")}},{"../../plots/cartesian":776,"../box/cross_trace_calc":883,"../box/layout_attributes":888,"../box/layout_defaults":889,"../box/plot":890,"../box/style":892,"../ohlc/hover":1069,"../ohlc/select":1073,"./attributes":893,"./calc":894,"./defaults":895}],897:[function(t,e,r){"use strict";var n=t("./axis_defaults"),a=t("../../plot_api/plot_template");e.exports=function(t,e,r,i,o){i("a")||(i("da"),i("a0")),i("b")||(i("db"),i("b0")),function(t,e,r,i){["aaxis","baxis"].forEach(function(o){var s=o.charAt(0),l=t[o]||{},c=a.newContainer(e,o),u={tickfont:"x",id:s+"axis",letter:s,font:e.font,name:o,data:t[s],calendar:e.calendar,dfltColor:i,bgColor:r.paper_bgcolor,fullLayout:r};n(l,c,u),c._categories=c._categories||[],t[o]||"-"===l.type||(t[o]={type:l.type})})}(t,e,r,o)}},{"../../plot_api/plot_template":755,"./axis_defaults":902}],898:[function(t,e,r){"use strict";var n=t("../../lib").isArrayOrTypedArray;e.exports=function(t){return function t(e,r){if(!n(e)||r>=10)return null;var a=1/0;var i=-1/0;var o=e.length;for(var s=0;s<o;s++){var l=e[s];if(n(l)){var c=t(l,r+1);c&&(a=Math.min(c[0],a),i=Math.max(c[1],i))}else a=Math.min(l,a),i=Math.max(l,i)}return[a,i]}(t,0)}},{"../../lib":717}],899:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),a=t("./axis_attributes"),i=t("../../components/color/attributes"),o=n({editType:"calc"});o.family.dflt='"Open Sans", verdana, arial, sans-serif',o.size.dflt=12,o.color.dflt=i.defaultLine,e.exports={carpet:{valType:"string",editType:"calc"},x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},a:{valType:"data_array",editType:"calc"},a0:{valType:"number",dflt:0,editType:"calc"},da:{valType:"number",dflt:1,editType:"calc"},b:{valType:"data_array",editType:"calc"},b0:{valType:"number",dflt:0,editType:"calc"},db:{valType:"number",dflt:1,editType:"calc"},cheaterslope:{valType:"number",dflt:1,editType:"calc"},aaxis:a,baxis:a,font:o,color:{valType:"color",dflt:i.defaultLine,editType:"plot"},transforms:void 0}},{"../../components/color/attributes":590,"../../plots/font_attributes":791,"./axis_attributes":901}],900:[function(t,e,r){"use strict";var n=t("../../lib").isArrayOrTypedArray;e.exports=function(t,e,r,a){var i,o,s,l,c,u,h,f,p,d,g,v,m,y=n(r)?"a":"b",x=("a"===y?t.aaxis:t.baxis).smoothing,b="a"===y?t.a2i:t.b2j,_="a"===y?r:a,w="a"===y?a:r,k="a"===y?e.a.length:e.b.length,T="a"===y?e.b.length:e.a.length,M=Math.floor("a"===y?t.b2j(w):t.a2i(w)),A="a"===y?function(e){return t.evalxy([],e,M)}:function(e){return t.evalxy([],M,e)};x&&(s=Math.max(0,Math.min(T-2,M)),l=M-s,o="a"===y?function(e,r){return t.dxydi([],e,s,r,l)}:function(e,r){return t.dxydj([],s,e,l,r)});var S=b(_[0]),E=b(_[1]),L=S<E?1:-1,C=1e-8*(E-S),P=L>0?Math.floor:Math.ceil,O=L>0?Math.ceil:Math.floor,z=L>0?Math.min:Math.max,I=L>0?Math.max:Math.min,D=P(S+C),R=O(E-C),F=[[h=A(S)]];for(i=D;i*L<R*L;i+=L)c=[],g=I(S,i),m=(v=z(E,i+L))-g,u=Math.max(0,Math.min(k-2,Math.floor(.5*(g+v)))),f=A(v),x&&(p=o(u,g-u),d=o(u,v-u),c.push([h[0]+p[0]/3*m,h[1]+p[1]/3*m]),c.push([f[0]-d[0]/3*m,f[1]-d[1]/3*m])),c.push(f),F.push(c),h=f;return F}},{"../../lib":717}],901:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),a=t("../../components/color/attributes"),i=t("../../plots/cartesian/layout_attributes"),o=t("../../plot_api/edit_types").overrideAll;t("../../constants/docs").FORMAT_LINK,t("../../constants/docs").TIME_FORMAT_LINK;e.exports={color:{valType:"color",editType:"calc"},smoothing:{valType:"number",dflt:1,min:0,max:1.3,editType:"calc"},title:{text:{valType:"string",dflt:"",editType:"calc"},font:n({editType:"calc"}),offset:{valType:"number",dflt:10,editType:"calc"},editType:"calc"},type:{valType:"enumerated",values:["-","linear","date","category"],dflt:"-",editType:"calc"},autorange:{valType:"enumerated",values:[!0,!1,"reversed"],dflt:!0,editType:"calc"},rangemode:{valType:"enumerated",values:["normal","tozero","nonnegative"],dflt:"normal",editType:"calc"},range:{valType:"info_array",editType:"calc",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}]},fixedrange:{valType:"boolean",dflt:!1,editType:"calc"},cheatertype:{valType:"enumerated",values:["index","value"],dflt:"value",editType:"calc"},tickmode:{valType:"enumerated",values:["linear","array"],dflt:"array",editType:"calc"},nticks:{valType:"integer",min:0,dflt:0,editType:"calc"},tickvals:{valType:"data_array",editType:"calc"},ticktext:{valType:"data_array",editType:"calc"},showticklabels:{valType:"enumerated",values:["start","end","both","none"],dflt:"start",editType:"calc"},tickfont:n({editType:"calc"}),tickangle:{valType:"angle",dflt:"auto",editType:"calc"},tickprefix:{valType:"string",dflt:"",editType:"calc"},showtickprefix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"calc"},ticksuffix:{valType:"string",dflt:"",editType:"calc"},showticksuffix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"calc"},showexponent:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"calc"},exponentformat:{valType:"enumerated",values:["none","e","E","power","SI","B"],dflt:"B",editType:"calc"},separatethousands:{valType:"boolean",dflt:!1,editType:"calc"},tickformat:{valType:"string",dflt:"",editType:"calc"},tickformatstops:o(i.tickformatstops,"calc","from-root"),categoryorder:{valType:"enumerated",values:["trace","category ascending","category descending","array"],dflt:"trace",editType:"calc"},categoryarray:{valType:"data_array",editType:"calc"},labelpadding:{valType:"integer",dflt:10,editType:"calc"},labelprefix:{valType:"string",editType:"calc"},labelsuffix:{valType:"string",dflt:"",editType:"calc"},showline:{valType:"boolean",dflt:!1,editType:"calc"},linecolor:{valType:"color",dflt:a.defaultLine,editType:"calc"},linewidth:{valType:"number",min:0,dflt:1,editType:"calc"},gridcolor:{valType:"color",editType:"calc"},gridwidth:{valType:"number",min:0,dflt:1,editType:"calc"},showgrid:{valType:"boolean",dflt:!0,editType:"calc"},minorgridcount:{valType:"integer",min:0,dflt:0,editType:"calc"},minorgridwidth:{valType:"number",min:0,dflt:1,editType:"calc"},minorgridcolor:{valType:"color",dflt:a.lightLine,editType:"calc"},startline:{valType:"boolean",editType:"calc"},startlinecolor:{valType:"color",editType:"calc"},startlinewidth:{valType:"number",dflt:1,editType:"calc"},endline:{valType:"boolean",editType:"calc"},endlinewidth:{valType:"number",dflt:1,editType:"calc"},endlinecolor:{valType:"color",editType:"calc"},tick0:{valType:"number",min:0,dflt:0,editType:"calc"},dtick:{valType:"number",min:0,dflt:1,editType:"calc"},arraytick0:{valType:"integer",min:0,dflt:0,editType:"calc"},arraydtick:{valType:"integer",min:1,dflt:1,editType:"calc"},_deprecated:{title:{valType:"string",editType:"calc"},titlefont:n({editType:"calc"}),titleoffset:{valType:"number",dflt:10,editType:"calc"}},editType:"calc"}},{"../../components/color/attributes":590,"../../constants/docs":688,"../../plot_api/edit_types":748,"../../plots/cartesian/layout_attributes":777,"../../plots/font_attributes":791}],902:[function(t,e,r){"use strict";var n=t("./attributes"),a=t("../../components/color").addOpacity,i=t("../../registry"),o=t("../../lib"),s=t("../../plots/cartesian/tick_value_defaults"),l=t("../../plots/cartesian/tick_label_defaults"),c=t("../../plots/cartesian/category_order_defaults"),u=t("../../plots/cartesian/set_convert"),h=t("../../plots/cartesian/axis_autotype");e.exports=function(t,e,r){var f=r.letter,p=r.font||{},d=n[f+"axis"];function g(r,n){return o.coerce(t,e,d,r,n)}function v(r,n){return o.coerce2(t,e,d,r,n)}r.name&&(e._name=r.name,e._id=r.name);var m=g("type");("-"===m&&(r.data&&function(t,e){if("-"!==t.type)return;var r=t._id.charAt(0),n=t[r+"calendar"];t.type=h(e,n)}(e,r.data),"-"===e.type?e.type="linear":m=t.type=e.type),g("smoothing"),g("cheatertype"),g("showticklabels"),g("labelprefix",f+" = "),g("labelsuffix"),g("showtickprefix"),g("showticksuffix"),g("separatethousands"),g("tickformat"),g("exponentformat"),g("showexponent"),g("categoryorder"),g("tickmode"),g("tickvals"),g("ticktext"),g("tick0"),g("dtick"),"array"===e.tickmode&&(g("arraytick0"),g("arraydtick")),g("labelpadding"),e._hovertitle=f,"date"===m)&&i.getComponentMethod("calendars","handleDefaults")(t,e,"calendar",r.calendar);u(e,r.fullLayout),e.c2p=o.identity;var y=g("color",r.dfltColor),x=y===t.color?y:p.color;g("title.text")&&(o.coerceFont(g,"title.font",{family:p.family,size:Math.round(1.2*p.size),color:x}),g("title.offset")),g("tickangle"),g("autorange",!e.isValidRange(t.range))&&g("rangemode"),g("range"),e.cleanRange(),g("fixedrange"),s(t,e,g,m),l(t,e,g,m,r),c(t,e,g,{data:r.data,dataAttr:f});var b=v("gridcolor",a(y,.3)),_=v("gridwidth"),w=g("showgrid");w||(delete e.gridcolor,delete e.gridwidth);var k=v("startlinecolor",y),T=v("startlinewidth",_);g("startline",e.showgrid||!!k||!!T)||(delete e.startlinecolor,delete e.startlinewidth);var M=v("endlinecolor",y),A=v("endlinewidth",_);return g("endline",e.showgrid||!!M||!!A)||(delete e.endlinecolor,delete e.endlinewidth),w?(g("minorgridcount"),g("minorgridwidth",_),g("minorgridcolor",a(b,.06)),e.minorgridcount||(delete e.minorgridwidth,delete e.minorgridcolor)):(delete e.gridcolor,delete e.gridWidth),"none"===e.showticklabels&&(delete e.tickfont,delete e.tickangle,delete e.showexponent,delete e.exponentformat,delete e.tickformat,delete e.showticksuffix,delete e.showtickprefix),e.showticksuffix||delete e.ticksuffix,e.showtickprefix||delete e.tickprefix,g("tickmode"),e}},{"../../components/color":591,"../../lib":717,"../../plots/cartesian/axis_autotype":766,"../../plots/cartesian/category_order_defaults":769,"../../plots/cartesian/set_convert":783,"../../plots/cartesian/tick_label_defaults":784,"../../plots/cartesian/tick_value_defaults":786,"../../registry":846,"./attributes":899}],903:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../lib").isArray1D,i=t("./cheater_basis"),o=t("./array_minmax"),s=t("./calc_gridlines"),l=t("./calc_labels"),c=t("./calc_clippath"),u=t("../heatmap/clean_2d_array"),h=t("./smooth_fill_2d_array"),f=t("../heatmap/convert_column_xyz"),p=t("./set_convert");e.exports=function(t,e){var r=n.getFromId(t,e.xaxis),d=n.getFromId(t,e.yaxis),g=e.aaxis,v=e.baxis,m=e.x,y=e.y,x=[];m&&a(m)&&x.push("x"),y&&a(y)&&x.push("y"),x.length&&f(e,g,v,"a","b",x);var b=e._a=e._a||e.a,_=e._b=e._b||e.b;m=e._x||e.x,y=e._y||e.y;var w={};if(e._cheater){var k="index"===g.cheatertype?b.length:b,T="index"===v.cheatertype?_.length:_;m=i(k,T,e.cheaterslope)}e._x=m=u(m),e._y=y=u(y),h(m,b,_),h(y,b,_),p(e),e.setScale();var M=o(m),A=o(y),S=.5*(M[1]-M[0]),E=.5*(M[1]+M[0]),L=.5*(A[1]-A[0]),C=.5*(A[1]+A[0]);return M=[E-1.3*S,E+1.3*S],A=[C-1.3*L,C+1.3*L],e._extremes[r._id]=n.findExtremes(r,M,{padded:!0}),e._extremes[d._id]=n.findExtremes(d,A,{padded:!0}),s(e,"a","b"),s(e,"b","a"),l(e,g),l(e,v),w.clipsegments=c(e._xctrl,e._yctrl,g,v),w.x=m,w.y=y,w.a=b,w.b=_,[w]}},{"../../lib":717,"../../plots/cartesian/axes":765,"../heatmap/clean_2d_array":1002,"../heatmap/convert_column_xyz":1004,"./array_minmax":898,"./calc_clippath":904,"./calc_gridlines":905,"./calc_labels":906,"./cheater_basis":908,"./set_convert":921,"./smooth_fill_2d_array":922}],904:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){var a,i,o,s=[],l=!!r.smoothing,c=!!n.smoothing,u=t[0].length-1,h=t.length-1;for(a=0,i=[],o=[];a<=u;a++)i[a]=t[0][a],o[a]=e[0][a];for(s.push({x:i,y:o,bicubic:l}),a=0,i=[],o=[];a<=h;a++)i[a]=t[a][u],o[a]=e[a][u];for(s.push({x:i,y:o,bicubic:c}),a=u,i=[],o=[];a>=0;a--)i[u-a]=t[h][a],o[u-a]=e[h][a];for(s.push({x:i,y:o,bicubic:l}),a=h,i=[],o=[];a>=0;a--)i[h-a]=t[a][0],o[h-a]=e[a][0];return s.push({x:i,y:o,bicubic:c}),s}},{}],905:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../lib/extend").extendFlat;e.exports=function(t,e,r){var i,o,s,l,c,u,h,f,p,d,g,v,m,y,x=t["_"+e],b=t[e+"axis"],_=b._gridlines=[],w=b._minorgridlines=[],k=b._boundarylines=[],T=t["_"+r],M=t[r+"axis"];"array"===b.tickmode&&(b.tickvals=x.slice());var A=t._xctrl,S=t._yctrl,E=A[0].length,L=A.length,C=t._a.length,P=t._b.length;n.prepTicks(b),"array"===b.tickmode&&delete b.tickvals;var O=b.smoothing?3:1;function z(n){var a,i,o,s,l,c,u,h,p,d,g,v,m=[],y=[],x={};if("b"===e)for(i=t.b2j(n),o=Math.floor(Math.max(0,Math.min(P-2,i))),s=i-o,x.length=P,x.crossLength=C,x.xy=function(e){return t.evalxy([],e,i)},x.dxy=function(e,r){return t.dxydi([],e,o,r,s)},a=0;a<C;a++)c=Math.min(C-2,a),u=a-c,h=t.evalxy([],a,i),M.smoothing&&a>0&&(p=t.dxydi([],a-1,o,0,s),m.push(l[0]+p[0]/3),y.push(l[1]+p[1]/3),d=t.dxydi([],a-1,o,1,s),m.push(h[0]-d[0]/3),y.push(h[1]-d[1]/3)),m.push(h[0]),y.push(h[1]),l=h;else for(a=t.a2i(n),c=Math.floor(Math.max(0,Math.min(C-2,a))),u=a-c,x.length=C,x.crossLength=P,x.xy=function(e){return t.evalxy([],a,e)},x.dxy=function(e,r){return t.dxydj([],c,e,u,r)},i=0;i<P;i++)o=Math.min(P-2,i),s=i-o,h=t.evalxy([],a,i),M.smoothing&&i>0&&(g=t.dxydj([],c,i-1,u,0),m.push(l[0]+g[0]/3),y.push(l[1]+g[1]/3),v=t.dxydj([],c,i-1,u,1),m.push(h[0]-v[0]/3),y.push(h[1]-v[1]/3)),m.push(h[0]),y.push(h[1]),l=h;return x.axisLetter=e,x.axis=b,x.crossAxis=M,x.value=n,x.constvar=r,x.index=f,x.x=m,x.y=y,x.smoothing=M.smoothing,x}function I(n){var a,i,o,s,l,c=[],u=[],h={};if(h.length=x.length,h.crossLength=T.length,"b"===e)for(o=Math.max(0,Math.min(P-2,n)),l=Math.min(1,Math.max(0,n-o)),h.xy=function(e){return t.evalxy([],e,n)},h.dxy=function(e,r){return t.dxydi([],e,o,r,l)},a=0;a<E;a++)c[a]=A[n*O][a],u[a]=S[n*O][a];else for(i=Math.max(0,Math.min(C-2,n)),s=Math.min(1,Math.max(0,n-i)),h.xy=function(e){return t.evalxy([],n,e)},h.dxy=function(e,r){return t.dxydj([],i,e,s,r)},a=0;a<L;a++)c[a]=A[a][n*O],u[a]=S[a][n*O];return h.axisLetter=e,h.axis=b,h.crossAxis=M,h.value=x[n],h.constvar=r,h.index=n,h.x=c,h.y=u,h.smoothing=M.smoothing,h}if("array"===b.tickmode){for(l=5e-15,u=(c=[Math.floor((x.length-1-b.arraytick0)/b.arraydtick*(1+l)),Math.ceil(-b.arraytick0/b.arraydtick/(1+l))].sort(function(t,e){return t-e}))[0]-1,h=c[1]+1,f=u;f<h;f++)(o=b.arraytick0+b.arraydtick*f)<0||o>x.length-1||_.push(a(I(o),{color:b.gridcolor,width:b.gridwidth}));for(f=u;f<h;f++)if(s=b.arraytick0+b.arraydtick*f,g=Math.min(s+b.arraydtick,x.length-1),!(s<0||s>x.length-1||g<0||g>x.length-1))for(v=x[s],m=x[g],i=0;i<b.minorgridcount;i++)(y=g-s)<=0||(d=v+(m-v)*(i+1)/(b.minorgridcount+1)*(b.arraydtick/y))<x[0]||d>x[x.length-1]||w.push(a(z(d),{color:b.minorgridcolor,width:b.minorgridwidth}));b.startline&&k.push(a(I(0),{color:b.startlinecolor,width:b.startlinewidth})),b.endline&&k.push(a(I(x.length-1),{color:b.endlinecolor,width:b.endlinewidth}))}else{for(l=5e-15,u=(c=[Math.floor((x[x.length-1]-b.tick0)/b.dtick*(1+l)),Math.ceil((x[0]-b.tick0)/b.dtick/(1+l))].sort(function(t,e){return t-e}))[0],h=c[1],f=u;f<=h;f++)p=b.tick0+b.dtick*f,_.push(a(z(p),{color:b.gridcolor,width:b.gridwidth}));for(f=u-1;f<h+1;f++)for(p=b.tick0+b.dtick*f,i=0;i<b.minorgridcount;i++)(d=p+b.dtick*(i+1)/(b.minorgridcount+1))<x[0]||d>x[x.length-1]||w.push(a(z(d),{color:b.minorgridcolor,width:b.minorgridwidth}));b.startline&&k.push(a(z(x[0]),{color:b.startlinecolor,width:b.startlinewidth})),b.endline&&k.push(a(z(x[x.length-1]),{color:b.endlinecolor,width:b.endlinewidth}))}}},{"../../lib/extend":708,"../../plots/cartesian/axes":765}],906:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../lib/extend").extendFlat;e.exports=function(t,e){var r,i,o,s=e._labels=[],l=e._gridlines;for(r=0;r<l.length;r++)o=l[r],-1!==["start","both"].indexOf(e.showticklabels)&&(i=n.tickText(e,o.value),a(i,{prefix:void 0,suffix:void 0,endAnchor:!0,xy:o.xy(0),dxy:o.dxy(0,0),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0===r,isLast:r===l.length-1}),s.push(i)),-1!==["end","both"].indexOf(e.showticklabels)&&(i=n.tickText(e,o.value),a(i,{endAnchor:!1,xy:o.xy(o.crossLength-1),dxy:o.dxy(o.crossLength-2,1),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0===r,isLast:r===l.length-1}),s.push(i))}},{"../../lib/extend":708,"../../plots/cartesian/axes":765}],907:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){var a=t[0]-e[0],i=t[1]-e[1],o=r[0]-e[0],s=r[1]-e[1],l=Math.pow(a*a+i*i,.25),c=Math.pow(o*o+s*s,.25),u=(c*c*a-l*l*o)*n,h=(c*c*i-l*l*s)*n,f=c*(l+c)*3,p=l*(l+c)*3;return[[e[0]+(f&&u/f),e[1]+(f&&h/f)],[e[0]-(p&&u/p),e[1]-(p&&h/p)]]}},{}],908:[function(t,e,r){"use strict";var n=t("../../lib").isArrayOrTypedArray;e.exports=function(t,e,r){var a,i,o,s,l,c,u=[],h=n(t)?t.length:t,f=n(e)?e.length:e,p=n(t)?t:null,d=n(e)?e:null;p&&(o=(p.length-1)/(p[p.length-1]-p[0])/(h-1)),d&&(s=(d.length-1)/(d[d.length-1]-d[0])/(f-1));var g=1/0,v=-1/0;for(i=0;i<f;i++)for(u[i]=[],l=d?(d[i]-d[0])*s:i/(f-1),a=0;a<h;a++)c=(p?(p[a]-p[0])*o:a/(h-1))-l*r,g=Math.min(c,g),v=Math.max(c,v),u[i][a]=c;var m=1/(v-g),y=-g*m;for(i=0;i<f;i++)for(a=0;a<h;a++)u[i][a]=m*u[i][a]+y;return u}},{"../../lib":717}],909:[function(t,e,r){"use strict";var n=t("./catmull_rom"),a=t("../../lib").ensureArray;function i(t,e,r){var n=-.5*r[0]+1.5*e[0],a=-.5*r[1]+1.5*e[1];return[(2*n+t[0])/3,(2*a+t[1])/3]}e.exports=function(t,e,r,o,s,l){var c,u,h,f,p,d,g,v,m,y,x=r[0].length,b=r.length,_=s?3*x-2:x,w=l?3*b-2:b;for(t=a(t,w),e=a(e,w),h=0;h<w;h++)t[h]=a(t[h],_),e[h]=a(e[h],_);for(u=0,f=0;u<b;u++,f+=l?3:1)for(p=t[f],d=e[f],g=r[u],v=o[u],c=0,h=0;c<x;c++,h+=s?3:1)p[h]=g[c],d[h]=v[c];if(s)for(u=0,f=0;u<b;u++,f+=l?3:1){for(c=1,h=3;c<x-1;c++,h+=3)m=n([r[u][c-1],o[u][c-1]],[r[u][c],o[u][c]],[r[u][c+1],o[u][c+1]],s),t[f][h-1]=m[0][0],e[f][h-1]=m[0][1],t[f][h+1]=m[1][0],e[f][h+1]=m[1][1];y=i([t[f][0],e[f][0]],[t[f][2],e[f][2]],[t[f][3],e[f][3]]),t[f][1]=y[0],e[f][1]=y[1],y=i([t[f][_-1],e[f][_-1]],[t[f][_-3],e[f][_-3]],[t[f][_-4],e[f][_-4]]),t[f][_-2]=y[0],e[f][_-2]=y[1]}if(l)for(h=0;h<_;h++){for(f=3;f<w-3;f+=3)m=n([t[f-3][h],e[f-3][h]],[t[f][h],e[f][h]],[t[f+3][h],e[f+3][h]],l),t[f-1][h]=m[0][0],e[f-1][h]=m[0][1],t[f+1][h]=m[1][0],e[f+1][h]=m[1][1];y=i([t[0][h],e[0][h]],[t[2][h],e[2][h]],[t[3][h],e[3][h]]),t[1][h]=y[0],e[1][h]=y[1],y=i([t[w-1][h],e[w-1][h]],[t[w-3][h],e[w-3][h]],[t[w-4][h],e[w-4][h]]),t[w-2][h]=y[0],e[w-2][h]=y[1]}if(s&&l)for(f=1;f<w;f+=(f+1)%3==0?2:1){for(h=3;h<_-3;h+=3)m=n([t[f][h-3],e[f][h-3]],[t[f][h],e[f][h]],[t[f][h+3],e[f][h+3]],s),t[f][h-1]=.5*(t[f][h-1]+m[0][0]),e[f][h-1]=.5*(e[f][h-1]+m[0][1]),t[f][h+1]=.5*(t[f][h+1]+m[1][0]),e[f][h+1]=.5*(e[f][h+1]+m[1][1]);y=i([t[f][0],e[f][0]],[t[f][2],e[f][2]],[t[f][3],e[f][3]]),t[f][1]=.5*(t[f][1]+y[0]),e[f][1]=.5*(e[f][1]+y[1]),y=i([t[f][_-1],e[f][_-1]],[t[f][_-3],e[f][_-3]],[t[f][_-4],e[f][_-4]]),t[f][_-2]=.5*(t[f][_-2]+y[0]),e[f][_-2]=.5*(e[f][_-2]+y[1])}return[t,e]}},{"../../lib":717,"./catmull_rom":907}],910:[function(t,e,r){"use strict";e.exports={RELATIVE_CULL_TOLERANCE:1e-6}},{}],911:[function(t,e,r){"use strict";e.exports=function(t,e,r){return e&&r?function(e,r,n,a,i){var o,s,l,c,u,h;e||(e=[]),r*=3,n*=3;var f=a*a,p=1-a,d=p*p,g=p*a*2,v=-3*d,m=3*(d-g),y=3*(g-f),x=3*f,b=i*i,_=b*i,w=1-i,k=w*w,T=k*w;for(h=0;h<t.length;h++)o=v*(u=t[h])[n][r]+m*u[n][r+1]+y*u[n][r+2]+x*u[n][r+3],s=v*u[n+1][r]+m*u[n+1][r+1]+y*u[n+1][r+2]+x*u[n+1][r+3],l=v*u[n+2][r]+m*u[n+2][r+1]+y*u[n+2][r+2]+x*u[n+2][r+3],c=v*u[n+3][r]+m*u[n+3][r+1]+y*u[n+3][r+2]+x*u[n+3][r+3],e[h]=T*o+3*(k*i*s+w*b*l)+_*c;return e}:e?function(e,r,n,a,i){var o,s,l,c;e||(e=[]),r*=3;var u=a*a,h=1-a,f=h*h,p=h*a*2,d=-3*f,g=3*(f-p),v=3*(p-u),m=3*u,y=1-i;for(l=0;l<t.length;l++)o=d*(c=t[l])[n][r]+g*c[n][r+1]+v*c[n][r+2]+m*c[n][r+3],s=d*c[n+1][r]+g*c[n+1][r+1]+v*c[n+1][r+2]+m*c[n+1][r+3],e[l]=y*o+i*s;return e}:r?function(e,r,n,a,i){var o,s,l,c,u,h;e||(e=[]),n*=3;var f=i*i,p=f*i,d=1-i,g=d*d,v=g*d;for(u=0;u<t.length;u++)o=(h=t[u])[n][r+1]-h[n][r],s=h[n+1][r+1]-h[n+1][r],l=h[n+2][r+1]-h[n+2][r],c=h[n+3][r+1]-h[n+3][r],e[u]=v*o+3*(g*i*s+d*f*l)+p*c;return e}:function(e,r,n,a,i){var o,s,l,c;e||(e=[]);var u=1-i;for(l=0;l<t.length;l++)o=(c=t[l])[n][r+1]-c[n][r],s=c[n+1][r+1]-c[n+1][r],e[l]=u*o+i*s;return e}}},{}],912:[function(t,e,r){"use strict";e.exports=function(t,e,r){return e&&r?function(e,r,n,a,i){var o,s,l,c,u,h;e||(e=[]),r*=3,n*=3;var f=a*a,p=f*a,d=1-a,g=d*d,v=g*d,m=i*i,y=1-i,x=y*y,b=y*i*2,_=-3*x,w=3*(x-b),k=3*(b-m),T=3*m;for(h=0;h<t.length;h++)o=_*(u=t[h])[n][r]+w*u[n+1][r]+k*u[n+2][r]+T*u[n+3][r],s=_*u[n][r+1]+w*u[n+1][r+1]+k*u[n+2][r+1]+T*u[n+3][r+1],l=_*u[n][r+2]+w*u[n+1][r+2]+k*u[n+2][r+2]+T*u[n+3][r+2],c=_*u[n][r+3]+w*u[n+1][r+3]+k*u[n+2][r+3]+T*u[n+3][r+3],e[h]=v*o+3*(g*a*s+d*f*l)+p*c;return e}:e?function(e,r,n,a,i){var o,s,l,c,u,h;e||(e=[]),r*=3;var f=i*i,p=f*i,d=1-i,g=d*d,v=g*d;for(u=0;u<t.length;u++)o=(h=t[u])[n+1][r]-h[n][r],s=h[n+1][r+1]-h[n][r+1],l=h[n+1][r+2]-h[n][r+2],c=h[n+1][r+3]-h[n][r+3],e[u]=v*o+3*(g*i*s+d*f*l)+p*c;return e}:r?function(e,r,n,a,i){var o,s,l,c;e||(e=[]),n*=3;var u=1-a,h=i*i,f=1-i,p=f*f,d=f*i*2,g=-3*p,v=3*(p-d),m=3*(d-h),y=3*h;for(l=0;l<t.length;l++)o=g*(c=t[l])[n][r]+v*c[n+1][r]+m*c[n+2][r]+y*c[n+3][r],s=g*c[n][r+1]+v*c[n+1][r+1]+m*c[n+2][r+1]+y*c[n+3][r+1],e[l]=u*o+a*s;return e}:function(e,r,n,a,i){var o,s,l,c;e||(e=[]);var u=1-a;for(l=0;l<t.length;l++)o=(c=t[l])[n+1][r]-c[n][r],s=c[n+1][r+1]-c[n][r+1],e[l]=u*o+a*s;return e}}},{}],913:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a){var i=e-2,o=r-2;return n&&a?function(e,r,n){var a,s,l,c,u,h;e||(e=[]);var f=Math.max(0,Math.min(Math.floor(r),i)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-f)),g=Math.max(0,Math.min(1,n-p));f*=3,p*=3;var v=d*d,m=v*d,y=1-d,x=y*y,b=x*y,_=g*g,w=_*g,k=1-g,T=k*k,M=T*k;for(h=0;h<t.length;h++)a=b*(u=t[h])[p][f]+3*(x*d*u[p][f+1]+y*v*u[p][f+2])+m*u[p][f+3],s=b*u[p+1][f]+3*(x*d*u[p+1][f+1]+y*v*u[p+1][f+2])+m*u[p+1][f+3],l=b*u[p+2][f]+3*(x*d*u[p+2][f+1]+y*v*u[p+2][f+2])+m*u[p+2][f+3],c=b*u[p+3][f]+3*(x*d*u[p+3][f+1]+y*v*u[p+3][f+2])+m*u[p+3][f+3],e[h]=M*a+3*(T*g*s+k*_*l)+w*c;return e}:n?function(e,r,n){e||(e=[]);var a,s,l,c,u,h,f=Math.max(0,Math.min(Math.floor(r),i)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-f)),g=Math.max(0,Math.min(1,n-p));f*=3;var v=d*d,m=v*d,y=1-d,x=y*y,b=x*y,_=1-g;for(u=0;u<t.length;u++)a=_*(h=t[u])[p][f]+g*h[p+1][f],s=_*h[p][f+1]+g*h[p+1][f+1],l=_*h[p][f+2]+g*h[p+1][f+1],c=_*h[p][f+3]+g*h[p+1][f+1],e[u]=b*a+3*(x*d*s+y*v*l)+m*c;return e}:a?function(e,r,n){e||(e=[]);var a,s,l,c,u,h,f=Math.max(0,Math.min(Math.floor(r),i)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-f)),g=Math.max(0,Math.min(1,n-p));p*=3;var v=g*g,m=v*g,y=1-g,x=y*y,b=x*y,_=1-d;for(u=0;u<t.length;u++)a=_*(h=t[u])[p][f]+d*h[p][f+1],s=_*h[p+1][f]+d*h[p+1][f+1],l=_*h[p+2][f]+d*h[p+2][f+1],c=_*h[p+3][f]+d*h[p+3][f+1],e[u]=b*a+3*(x*g*s+y*v*l)+m*c;return e}:function(e,r,n){e||(e=[]);var a,s,l,c,u=Math.max(0,Math.min(Math.floor(r),i)),h=Math.max(0,Math.min(Math.floor(n),o)),f=Math.max(0,Math.min(1,r-u)),p=Math.max(0,Math.min(1,n-h)),d=1-p,g=1-f;for(l=0;l<t.length;l++)a=g*(c=t[l])[h][u]+f*c[h][u+1],s=g*c[h+1][u]+f*c[h+1][u+1],e[l]=d*a+p*s;return e}}},{}],914:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./xy_defaults"),i=t("./ab_defaults"),o=t("./attributes"),s=t("../../components/color/attributes");e.exports=function(t,e,r,l){function c(r,a){return n.coerce(t,e,o,r,a)}e._clipPathId="clip"+e.uid+"carpet";var u=c("color",s.defaultLine);(n.coerceFont(c,"font"),c("carpet"),i(t,e,l,c,u),e.a&&e.b)?(e.a.length<3&&(e.aaxis.smoothing=0),e.b.length<3&&(e.baxis.smoothing=0),a(t,e,c)||(e.visible=!1),e._cheater&&c("cheaterslope")):e.visible=!1}},{"../../components/color/attributes":590,"../../lib":717,"./ab_defaults":897,"./attributes":899,"./xy_defaults":923}],915:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),plot:t("./plot"),calc:t("./calc"),animatable:!0,isContainer:!0,moduleType:"trace",name:"carpet",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","carpet","carpetAxis","notLegendIsolatable","noMultiCategory","noHover","noSortingByValue"],meta:{}}},{"../../plots/cartesian":776,"./attributes":899,"./calc":903,"./defaults":914,"./plot":920}],916:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r,n=t._fullData.length,a=0;a<n;a++){var i=t._fullData[a];if(i.index!==e.index&&("carpet"===i.type&&(r||(r=i),i.carpet===e.carpet)))return i}return r}},{}],917:[function(t,e,r){"use strict";e.exports=function(t,e,r){if(0===t.length)return"";var n,a=[],i=r?3:1;for(n=0;n<t.length;n+=i)a.push(t[n]+","+e[n]),r&&n<t.length-i&&(a.push("C"),a.push([t[n+1]+","+e[n+1],t[n+2]+","+e[n+2]+" "].join(" ")));return a.join(r?"":"L")}},{}],918:[function(t,e,r){"use strict";var n=t("../../lib").isArrayOrTypedArray;e.exports=function(t,e,r){var a;for(n(t)?t.length>e.length&&(t=t.slice(0,e.length)):t=[],a=0;a<e.length;a++)t[a]=r(e[a]);return t}},{"../../lib":717}],919:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a,i){var o=a[0]*t.dpdx(e),s=a[1]*t.dpdy(r),l=1,c=1;if(i){var u=Math.sqrt(a[0]*a[0]+a[1]*a[1]),h=Math.sqrt(i[0]*i[0]+i[1]*i[1]),f=(a[0]*i[0]+a[1]*i[1])/u/h;c=Math.max(0,f)}var p=180*Math.atan2(s,o)/Math.PI;return p<-90?(p+=180,l=-l):p>90&&(p-=180,l=-l),{angle:p,flip:l,p:t.c2p(n,e,r),offsetMultplier:c}}},{}],920:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/drawing"),i=t("./map_1d_array"),o=t("./makepath"),s=t("./orient_text"),l=t("../../lib/svg_text_utils"),c=t("../../lib"),u=t("../../constants/alignment");function h(t,e,r,a,s,l){var c="const-"+s+"-lines",u=r.selectAll("."+c).data(l);u.enter().append("path").classed(c,!0).style("vector-effect","non-scaling-stroke"),u.each(function(r){var a=r,s=a.x,l=a.y,c=i([],s,t.c2p),u=i([],l,e.c2p),h="M"+o(c,u,a.smoothing);n.select(this).attr("d",h).style("stroke-width",a.width).style("stroke",a.color).style("fill","none")}),u.exit().remove()}function f(t,e,r,i,o,c,u,h){var f=c.selectAll("text."+h).data(u);f.enter().append("text").classed(h,!0);var p=0,d={};return f.each(function(o,c){var u;if("auto"===o.axis.tickangle)u=s(i,e,r,o.xy,o.dxy);else{var h=(o.axis.tickangle+180)*Math.PI/180;u=s(i,e,r,o.xy,[Math.cos(h),Math.sin(h)])}c||(d={angle:u.angle,flip:u.flip});var f=(o.endAnchor?-1:1)*u.flip,g=n.select(this).attr({"text-anchor":f>0?"start":"end","data-notex":1}).call(a.font,o.font).text(o.text).call(l.convertToTspans,t),v=a.bBox(this);g.attr("transform","translate("+u.p[0]+","+u.p[1]+") rotate("+u.angle+")translate("+o.axis.labelpadding*f+","+.3*v.height+")"),p=Math.max(p,v.width+o.axis.labelpadding)}),f.exit().remove(),d.maxExtent=p,d}e.exports=function(t,e,r,a){var l=e.xaxis,u=e.yaxis,p=t._fullLayout._clips;c.makeTraceGroups(a,r,"trace").each(function(e){var r=n.select(this),a=e[0],d=a.trace,v=d.aaxis,m=d.baxis,y=c.ensureSingle(r,"g","minorlayer"),x=c.ensureSingle(r,"g","majorlayer"),b=c.ensureSingle(r,"g","boundarylayer"),_=c.ensureSingle(r,"g","labellayer");r.style("opacity",d.opacity),h(l,u,x,v,"a",v._gridlines),h(l,u,x,m,"b",m._gridlines),h(l,u,y,v,"a",v._minorgridlines),h(l,u,y,m,"b",m._minorgridlines),h(l,u,b,v,"a-boundary",v._boundarylines),h(l,u,b,m,"b-boundary",m._boundarylines);var w=f(t,l,u,d,a,_,v._labels,"a-label"),k=f(t,l,u,d,a,_,m._labels,"b-label");!function(t,e,r,n,a,i,o,l){var u,h,f,p,d=c.aggNums(Math.min,null,r.a),v=c.aggNums(Math.max,null,r.a),m=c.aggNums(Math.min,null,r.b),y=c.aggNums(Math.max,null,r.b);u=.5*(d+v),h=m,f=r.ab2xy(u,h,!0),p=r.dxyda_rough(u,h),void 0===o.angle&&c.extendFlat(o,s(r,a,i,f,r.dxydb_rough(u,h)));g(t,e,r,n,f,p,r.aaxis,a,i,o,"a-title"),u=d,h=.5*(m+y),f=r.ab2xy(u,h,!0),p=r.dxydb_rough(u,h),void 0===l.angle&&c.extendFlat(l,s(r,a,i,f,r.dxyda_rough(u,h)));g(t,e,r,n,f,p,r.baxis,a,i,l,"b-title")}(t,_,d,a,l,u,w,k),function(t,e,r,n,a){var s,l,u,h,f=r.select("#"+t._clipPathId);f.size()||(f=r.append("clipPath").classed("carpetclip",!0));var p=c.ensureSingle(f,"path","carpetboundary"),d=e.clipsegments,g=[];for(h=0;h<d.length;h++)s=d[h],l=i([],s.x,n.c2p),u=i([],s.y,a.c2p),g.push(o(l,u,s.bicubic));var v="M"+g.join("L")+"Z";f.attr("id",t._clipPathId),p.attr("d",v)}(d,a,p,l,u)})};var p=u.LINE_SPACING,d=(1-u.MID_SHIFT)/p+1;function g(t,e,r,i,o,c,u,h,f,g,v){var m=[];u.title.text&&m.push(u.title.text);var y=e.selectAll("text."+v).data(m),x=g.maxExtent;y.enter().append("text").classed(v,!0),y.each(function(){var e=s(r,h,f,o,c);-1===["start","both"].indexOf(u.showticklabels)&&(x=0);var i=u.title.font.size;x+=i+u.title.offset;var v=(g.angle+(g.flip<0?180:0)-e.angle+450)%360,m=v>90&&v<270,y=n.select(this);y.text(u.title.text).call(l.convertToTspans,t),m&&(x=(-l.lineCount(y)+d)*p*i-x),y.attr("transform","translate("+e.p[0]+","+e.p[1]+") rotate("+e.angle+") translate(0,"+x+")").classed("user-select-none",!0).attr("text-anchor","middle").call(a.font,u.title.font)}),y.exit().remove()}},{"../../components/drawing":612,"../../constants/alignment":686,"../../lib":717,"../../lib/svg_text_utils":741,"./makepath":917,"./map_1d_array":918,"./orient_text":919,d3:165}],921:[function(t,e,r){"use strict";var n=t("./constants"),a=t("../../lib/search").findBin,i=t("./compute_control_points"),o=t("./create_spline_evaluator"),s=t("./create_i_derivative_evaluator"),l=t("./create_j_derivative_evaluator");e.exports=function(t){var e=t._a,r=t._b,c=e.length,u=r.length,h=t.aaxis,f=t.baxis,p=e[0],d=e[c-1],g=r[0],v=r[u-1],m=e[e.length-1]-e[0],y=r[r.length-1]-r[0],x=m*n.RELATIVE_CULL_TOLERANCE,b=y*n.RELATIVE_CULL_TOLERANCE;p-=x,d+=x,g-=b,v+=b,t.isVisible=function(t,e){return t>p&&t<d&&e>g&&e<v},t.isOccluded=function(t,e){return t<p||t>d||e<g||e>v},t.setScale=function(){var e=t._x,r=t._y,n=i(t._xctrl,t._yctrl,e,r,h.smoothing,f.smoothing);t._xctrl=n[0],t._yctrl=n[1],t.evalxy=o([t._xctrl,t._yctrl],c,u,h.smoothing,f.smoothing),t.dxydi=s([t._xctrl,t._yctrl],h.smoothing,f.smoothing),t.dxydj=l([t._xctrl,t._yctrl],h.smoothing,f.smoothing)},t.i2a=function(t){var r=Math.max(0,Math.floor(t[0]),c-2),n=t[0]-r;return(1-n)*e[r]+n*e[r+1]},t.j2b=function(t){var e=Math.max(0,Math.floor(t[1]),c-2),n=t[1]-e;return(1-n)*r[e]+n*r[e+1]},t.ij2ab=function(e){return[t.i2a(e[0]),t.j2b(e[1])]},t.a2i=function(t){var r=Math.max(0,Math.min(a(t,e),c-2)),n=e[r],i=e[r+1];return Math.max(0,Math.min(c-1,r+(t-n)/(i-n)))},t.b2j=function(t){var e=Math.max(0,Math.min(a(t,r),u-2)),n=r[e],i=r[e+1];return Math.max(0,Math.min(u-1,e+(t-n)/(i-n)))},t.ab2ij=function(e){return[t.a2i(e[0]),t.b2j(e[1])]},t.i2c=function(e,r){return t.evalxy([],e,r)},t.ab2xy=function(n,a,i){if(!i&&(n<e[0]||n>e[c-1]|a<r[0]||a>r[u-1]))return[!1,!1];var o=t.a2i(n),s=t.b2j(a),l=t.evalxy([],o,s);if(i){var h,f,p,d,g=0,v=0,m=[];n<e[0]?(h=0,f=0,g=(n-e[0])/(e[1]-e[0])):n>e[c-1]?(h=c-2,f=1,g=(n-e[c-1])/(e[c-1]-e[c-2])):f=o-(h=Math.max(0,Math.min(c-2,Math.floor(o)))),a<r[0]?(p=0,d=0,v=(a-r[0])/(r[1]-r[0])):a>r[u-1]?(p=u-2,d=1,v=(a-r[u-1])/(r[u-1]-r[u-2])):d=s-(p=Math.max(0,Math.min(u-2,Math.floor(s)))),g&&(t.dxydi(m,h,p,f,d),l[0]+=m[0]*g,l[1]+=m[1]*g),v&&(t.dxydj(m,h,p,f,d),l[0]+=m[0]*v,l[1]+=m[1]*v)}return l},t.c2p=function(t,e,r){return[e.c2p(t[0]),r.c2p(t[1])]},t.p2x=function(t,e,r){return[e.p2c(t[0]),r.p2c(t[1])]},t.dadi=function(t){var r=Math.max(0,Math.min(e.length-2,t));return e[r+1]-e[r]},t.dbdj=function(t){var e=Math.max(0,Math.min(r.length-2,t));return r[e+1]-r[e]},t.dxyda=function(e,r,n,a){var i=t.dxydi(null,e,r,n,a),o=t.dadi(e,n);return[i[0]/o,i[1]/o]},t.dxydb=function(e,r,n,a){var i=t.dxydj(null,e,r,n,a),o=t.dbdj(r,a);return[i[0]/o,i[1]/o]},t.dxyda_rough=function(e,r,n){var a=m*(n||.1),i=t.ab2xy(e+a,r,!0),o=t.ab2xy(e-a,r,!0);return[.5*(i[0]-o[0])/a,.5*(i[1]-o[1])/a]},t.dxydb_rough=function(e,r,n){var a=y*(n||.1),i=t.ab2xy(e,r+a,!0),o=t.ab2xy(e,r-a,!0);return[.5*(i[0]-o[0])/a,.5*(i[1]-o[1])/a]},t.dpdx=function(t){return t._m},t.dpdy=function(t){return t._m}}},{"../../lib/search":736,"./compute_control_points":909,"./constants":910,"./create_i_derivative_evaluator":911,"./create_j_derivative_evaluator":912,"./create_spline_evaluator":913}],922:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e,r){var a,i,o,s=[],l=[],c=t[0].length,u=t.length;function h(e,r){var n,a=0,i=0;return e>0&&void 0!==(n=t[r][e-1])&&(i++,a+=n),e<c-1&&void 0!==(n=t[r][e+1])&&(i++,a+=n),r>0&&void 0!==(n=t[r-1][e])&&(i++,a+=n),r<u-1&&void 0!==(n=t[r+1][e])&&(i++,a+=n),a/Math.max(1,i)}var f,p,d,g,v,m,y,x,b,_,w,k=0;for(a=0;a<c;a++)for(i=0;i<u;i++)void 0===t[i][a]&&(s.push(a),l.push(i),t[i][a]=h(a,i)),k=Math.max(k,Math.abs(t[i][a]));if(!s.length)return t;var T=0,M=0,A=s.length;do{for(T=0,o=0;o<A;o++){a=s[o],i=l[o];var S,E,L,C,P,O,z=0,I=0;0===a?(L=e[P=Math.min(c-1,2)],C=e[1],S=t[i][P],I+=(E=t[i][1])+(E-S)*(e[0]-C)/(C-L),z++):a===c-1&&(L=e[P=Math.max(0,c-3)],C=e[c-2],S=t[i][P],I+=(E=t[i][c-2])+(E-S)*(e[c-1]-C)/(C-L),z++),(0===a||a===c-1)&&i>0&&i<u-1&&(f=r[i+1]-r[i],I+=((p=r[i]-r[i-1])*t[i+1][a]+f*t[i-1][a])/(p+f),z++),0===i?(L=r[O=Math.min(u-1,2)],C=r[1],S=t[O][a],I+=(E=t[1][a])+(E-S)*(r[0]-C)/(C-L),z++):i===u-1&&(L=r[O=Math.max(0,u-3)],C=r[u-2],S=t[O][a],I+=(E=t[u-2][a])+(E-S)*(r[u-1]-C)/(C-L),z++),(0===i||i===u-1)&&a>0&&a<c-1&&(f=e[a+1]-e[a],I+=((p=e[a]-e[a-1])*t[i][a+1]+f*t[i][a-1])/(p+f),z++),z?I/=z:(d=e[a+1]-e[a],g=e[a]-e[a-1],x=(v=r[i+1]-r[i])*(m=r[i]-r[i-1])*(v+m),I=((y=d*g*(d+g))*(m*t[i+1][a]+v*t[i-1][a])+x*(g*t[i][a+1]+d*t[i][a-1]))/(x*(g+d)+y*(m+v))),T+=(_=(b=I-t[i][a])/k)*_,w=z?0:.85,t[i][a]+=b*(1+w)}T=Math.sqrt(T)}while(M++<100&&T>1e-5);return n.log("Smoother converged to",T,"after",M,"iterations"),t}},{"../../lib":717}],923:[function(t,e,r){"use strict";var n=t("../../lib").isArray1D;e.exports=function(t,e,r){var a=r("x"),i=a&&a.length,o=r("y"),s=o&&o.length;if(!i&&!s)return!1;if(e._cheater=!a,i&&!n(a)||s&&!n(o))e._length=null;else{var l=i?a.length:1/0;s&&(l=Math.min(l,o.length)),e.a&&e.a.length&&(l=Math.min(l,e.a.length)),e.b&&e.b.length&&(l=Math.min(l,e.b.length)),e._length=l}return!0}},{"../../lib":717}],924:[function(t,e,r){"use strict";var n=t("../../plots/template_attributes").hovertemplateAttrs,a=t("../scattergeo/attributes"),i=t("../../components/colorscale/attributes"),o=t("../../plots/attributes"),s=t("../../components/color/attributes").defaultLine,l=t("../../lib/extend").extendFlat,c=a.marker.line;e.exports=l({locations:{valType:"data_array",editType:"calc"},locationmode:a.locationmode,z:{valType:"data_array",editType:"calc"},geojson:l({},a.geojson,{}),featureidkey:a.featureidkey,text:l({},a.text,{}),hovertext:l({},a.hovertext,{}),marker:{line:{color:l({},c.color,{dflt:s}),width:l({},c.width,{dflt:1}),editType:"calc"},opacity:{valType:"number",arrayOk:!0,min:0,max:1,dflt:1,editType:"style"},editType:"calc"},selected:{marker:{opacity:a.selected.marker.opacity,editType:"plot"},editType:"plot"},unselected:{marker:{opacity:a.unselected.marker.opacity,editType:"plot"},editType:"plot"},hoverinfo:l({},o.hoverinfo,{editType:"calc",flags:["location","z","text","name"]}),hovertemplate:n(),showlegend:l({},o.showlegend,{dflt:!1})},i("",{cLetter:"z",editTypeOverride:"calc"}))},{"../../components/color/attributes":590,"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../scattergeo/attributes":1161}],925:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../constants/numerical").BADNUM,i=t("../../components/colorscale/calc"),o=t("../scatter/arrays_to_calcdata"),s=t("../scatter/calc_selection");function l(t){return t&&"string"==typeof t}e.exports=function(t,e){var r,c=e._length,u=new Array(c);r=e.geojson?function(t){return l(t)||n(t)}:l;for(var h=0;h<c;h++){var f=u[h]={},p=e.locations[h],d=e.z[h];r(p)&&n(d)?(f.loc=p,f.z=d):(f.loc=null,f.z=a),f.index=h}return o(u,e),i(t,e,{vals:e.z,containerStr:"",cLetter:"z"}),s(u,e),u}},{"../../components/colorscale/calc":599,"../../constants/numerical":693,"../scatter/arrays_to_calcdata":1119,"../scatter/calc_selection":1122,"fast-isnumeric":228}],926:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/colorscale/defaults"),i=t("./attributes");e.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}var l=s("locations"),c=s("z");if(l&&l.length&&n.isArrayOrTypedArray(c)&&c.length){e._length=Math.min(l.length,c.length);var u,h=s("geojson");("string"==typeof h&&""!==h||n.isPlainObject(h))&&(u="geojson-id"),"geojson-id"===s("locationmode",u)&&s("featureidkey"),s("text"),s("hovertext"),s("hovertemplate"),s("marker.line.width")&&s("marker.line.color"),s("marker.opacity"),a(t,e,o,s,{prefix:"",cLetter:"z"}),n.coerceSelectionMarkerOpacity(e,s)}else e.visible=!1}},{"../../components/colorscale/defaults":601,"../../lib":717,"./attributes":924}],927:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a){t.location=e.location,t.z=e.z;var i=n[a];return i.fIn&&i.fIn.properties&&(t.properties=i.fIn.properties),t.ct=i.ct,t}},{}],928:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("./attributes"),i=t("../../lib").fillText;e.exports=function(t,e,r){var o,s,l,c,u=t.cd,h=u[0].trace,f=t.subplot;for(s=0;s<u.length;s++)if(c=!1,(o=u[s])._polygons){for(l=0;l<o._polygons.length;l++)o._polygons[l].contains([e,r])&&(c=!c),o._polygons[l].contains([e+360,r])&&(c=!c);if(c)break}if(c&&o)return t.x0=t.x1=t.xa.c2p(o.ct),t.y0=t.y1=t.ya.c2p(o.ct),t.index=o.index,t.location=o.loc,t.z=o.z,t.zLabel=n.tickText(f.mockAxis,f.mockAxis.c2l(o.z),"hover").text,t.hovertemplate=o.hovertemplate,function(t,e,r){if(e.hovertemplate)return;var n=r.hi||e.hoverinfo,o=String(r.loc),s="all"===n?a.hoverinfo.flags:n.split("+"),l=-1!==s.indexOf("name"),c=-1!==s.indexOf("location"),u=-1!==s.indexOf("z"),h=-1!==s.indexOf("text"),f=[];!l&&c?t.nameOverride=o:(l&&(t.nameOverride=e.name),c&&f.push(o));u&&f.push(t.zLabel);h&&i(r,e,f);t.extraText=f.join("<br>")}(t,h,o,f.mockAxis),[t]}},{"../../lib":717,"../../plots/cartesian/axes":765,"./attributes":924}],929:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../heatmap/colorbar"),calc:t("./calc"),calcGeoJSON:t("./plot").calcGeoJSON,plot:t("./plot").plot,style:t("./style").style,styleOnSelect:t("./style").styleOnSelect,hoverPoints:t("./hover"),eventData:t("./event_data"),selectPoints:t("./select"),moduleType:"trace",name:"choropleth",basePlotModule:t("../../plots/geo"),categories:["geo","noOpacity","showLegend"],meta:{}}},{"../../plots/geo":795,"../heatmap/colorbar":1003,"./attributes":924,"./calc":925,"./defaults":926,"./event_data":927,"./hover":928,"./plot":930,"./select":931,"./style":932}],930:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../lib/geo_location_utils"),o=t("../../lib/topojson_utils").getTopojsonFeatures,s=t("../../plots/cartesian/autorange").findExtremes,l=t("./style").style;e.exports={calcGeoJSON:function(t,e){for(var r=t[0].trace,n=e[r.geo],a=n._subplot,l=r.locationmode,c=r._length,u="geojson-id"===l?i.extractTraceFeature(t):o(r,a.topojson),h=[],f=[],p=0;p<c;p++){var d=t[p],g="geojson-id"===l?d.fOut:i.locationToFeature(l,d.loc,u);if(g){d.geojson=g,d.ct=g.properties.ct,d._polygons=i.feature2polygons(g);var v=i.computeBbox(g);h.push(v[0],v[2]),f.push(v[1],v[3])}else d.geojson=null}if("geojson"===n.fitbounds&&"geojson-id"===l){var m=i.computeBbox(i.getTraceGeojson(r));h=[m[0],m[2]],f=[m[1],m[3]]}var y={padded:!0};r._extremes.lon=s(n.lonaxis._ax,h,y),r._extremes.lat=s(n.lataxis._ax,f,y)},plot:function(t,e,r){var i=e.layers.backplot.select(".choroplethlayer");a.makeTraceGroups(i,r,"trace choropleth").each(function(e){var r=n.select(this).selectAll("path.choroplethlocation").data(a.identity);r.enter().append("path").classed("choroplethlocation",!0),r.exit().remove(),l(t,e)})}}},{"../../lib":717,"../../lib/geo_location_utils":711,"../../lib/topojson_utils":744,"../../plots/cartesian/autorange":764,"./style":932,d3:165}],931:[function(t,e,r){"use strict";e.exports=function(t,e){var r,n,a,i,o,s=t.cd,l=t.xaxis,c=t.yaxis,u=[];if(!1===e)for(r=0;r<s.length;r++)s[r].selected=0;else for(r=0;r<s.length;r++)(a=(n=s[r]).ct)&&(i=l.c2p(a),o=c.c2p(a),e.contains([i,o],null,r,t)?(u.push({pointNumber:r,lon:a[0],lat:a[1]}),n.selected=1):n.selected=0);return u}},{}],932:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/color"),i=t("../../components/drawing"),o=t("../../components/colorscale");function s(t,e){var r=e[0].trace,s=e[0].node3.selectAll(".choroplethlocation"),l=r.marker||{},c=l.line||{},u=o.makeColorScaleFuncFromTrace(r);s.each(function(t){n.select(this).attr("fill",u(t.z)).call(a.stroke,t.mlc||c.color).call(i.dashLine,"",t.mlw||c.width||0).style("opacity",l.opacity)}),i.selectedPointStyle(s,r,t)}e.exports={style:function(t,e){e&&s(t,e)},styleOnSelect:function(t,e){var r=e[0].node3,n=e[0].trace;n.selectedpoints?i.selectedPointStyle(r.selectAll(".choroplethlocation"),n,t):s(t,e)}}},{"../../components/color":591,"../../components/colorscale":603,"../../components/drawing":612,d3:165}],933:[function(t,e,r){"use strict";var n=t("../choropleth/attributes"),a=t("../../components/colorscale/attributes"),i=t("../../plots/template_attributes").hovertemplateAttrs,o=t("../../plots/attributes"),s=t("../../lib/extend").extendFlat;e.exports=s({locations:{valType:"data_array",editType:"calc"},z:{valType:"data_array",editType:"calc"},geojson:{valType:"any",editType:"calc"},featureidkey:s({},n.featureidkey,{}),below:{valType:"string",editType:"plot"},text:n.text,hovertext:n.hovertext,marker:{line:{color:s({},n.marker.line.color,{editType:"plot"}),width:s({},n.marker.line.width,{editType:"plot"}),editType:"calc"},opacity:s({},n.marker.opacity,{editType:"plot"}),editType:"calc"},selected:{marker:{opacity:s({},n.selected.marker.opacity,{editType:"plot"}),editType:"plot"},editType:"plot"},unselected:{marker:{opacity:s({},n.unselected.marker.opacity,{editType:"plot"}),editType:"plot"},editType:"plot"},hoverinfo:n.hoverinfo,hovertemplate:i({},{keys:["properties"]}),showlegend:s({},o.showlegend,{dflt:!1})},a("",{cLetter:"z",editTypeOverride:"calc"}))},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../choropleth/attributes":924}],934:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../components/colorscale"),o=t("../../components/drawing"),s=t("../../lib/geojson_utils").makeBlank,l=t("../../lib/geo_location_utils");function c(t){var e,r=t[0].trace,n=r._opts;if(r.selectedpoints){for(var i=o.makeSelectedPointStyleFns(r),s=0;s<t.length;s++){var l=t[s];l.fOut&&(l.fOut.properties.mo2=i.selectedOpacityFn(l))}e={type:"identity",property:"mo2"}}else e=a.isArrayOrTypedArray(r.marker.opacity)?{type:"identity",property:"mo"}:r.marker.opacity;return a.extendFlat(n.fill.paint,{"fill-opacity":e}),a.extendFlat(n.line.paint,{"line-opacity":e}),n}e.exports={convert:function(t){var e=t[0].trace,r=!0===e.visible&&0!==e._length,o={layout:{visibility:"none"},paint:{}},u={layout:{visibility:"none"},paint:{}},h=e._opts={fill:o,line:u,geojson:s()};if(!r)return h;var f=l.extractTraceFeature(t);if(!f)return h;var p,d,g,v=i.makeColorScaleFuncFromTrace(e),m=e.marker,y=m.line||{};a.isArrayOrTypedArray(m.opacity)&&(p=function(t){var e=t.mo;return n(e)?+a.constrain(e,0,1):0}),a.isArrayOrTypedArray(y.color)&&(d=function(t){return t.mlc}),a.isArrayOrTypedArray(y.width)&&(g=function(t){return t.mlw});for(var x=0;x<t.length;x++){var b=t[x],_=b.fOut;if(_){var w=_.properties;w.fc=v(b.z),p&&(w.mo=p(b)),d&&(w.mlc=d(b)),g&&(w.mlw=g(b)),b.ct=w.ct,b._polygons=l.feature2polygons(_)}}var k=p?{type:"identity",property:"mo"}:m.opacity;return a.extendFlat(o.paint,{"fill-color":{type:"identity",property:"fc"},"fill-opacity":k}),a.extendFlat(u.paint,{"line-color":d?{type:"identity",property:"mlc"}:y.color,"line-width":g?{type:"identity",property:"mlw"}:y.width,"line-opacity":k}),o.layout.visibility="visible",u.layout.visibility="visible",h.geojson={type:"FeatureCollection",features:f},c(t),h},convertOnSelect:c}},{"../../components/colorscale":603,"../../components/drawing":612,"../../lib":717,"../../lib/geo_location_utils":711,"../../lib/geojson_utils":712,"fast-isnumeric":228}],935:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/colorscale/defaults"),i=t("./attributes");e.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}var l=s("locations"),c=s("z"),u=s("geojson");n.isArrayOrTypedArray(l)&&l.length&&n.isArrayOrTypedArray(c)&&c.length&&("string"==typeof u&&""!==u||n.isPlainObject(u))?(s("featureidkey"),e._length=Math.min(l.length,c.length),s("below"),s("text"),s("hovertext"),s("hovertemplate"),s("marker.line.width")&&s("marker.line.color"),s("marker.opacity"),a(t,e,o,s,{prefix:"",cLetter:"z"}),n.coerceSelectionMarkerOpacity(e,s)):e.visible=!1}},{"../../components/colorscale/defaults":601,"../../lib":717,"./attributes":933}],936:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../heatmap/colorbar"),calc:t("../choropleth/calc"),plot:t("./plot"),hoverPoints:t("../choropleth/hover"),eventData:t("../choropleth/event_data"),selectPoints:t("../choropleth/select"),styleOnSelect:function(t,e){e&&e[0].trace._glTrace.updateOnSelect(e)},getBelow:function(t,e){for(var r=e.getMapLayers(),n=r.length-2;n>=0;n--){var a=r[n].id;if("string"==typeof a&&0===a.indexOf("water"))for(var i=n+1;i<r.length;i++)if("string"==typeof(a=r[i].id)&&-1===a.indexOf("plotly-"))return a}},moduleType:"trace",name:"choroplethmapbox",basePlotModule:t("../../plots/mapbox"),categories:["mapbox","gl","noOpacity","showLegend"],meta:{hr_name:"choropleth_mapbox"}}},{"../../plots/mapbox":820,"../choropleth/calc":925,"../choropleth/event_data":927,"../choropleth/hover":928,"../choropleth/select":931,"../heatmap/colorbar":1003,"./attributes":933,"./defaults":935,"./plot":937}],937:[function(t,e,r){"use strict";var n=t("./convert").convert,a=t("./convert").convertOnSelect,i=t("../../plots/mapbox/constants").traceLayerPrefix;function o(t,e){this.type="choroplethmapbox",this.subplot=t,this.uid=e,this.sourceId="source-"+e,this.layerList=[["fill",i+e+"-fill"],["line",i+e+"-line"]],this.below=null}var s=o.prototype;s.update=function(t){this._update(n(t))},s.updateOnSelect=function(t){this._update(a(t))},s._update=function(t){var e=this.subplot,r=this.layerList,n=e.belowLookup["trace-"+this.uid];e.map.getSource(this.sourceId).setData(t.geojson),n!==this.below&&(this._removeLayers(),this._addLayers(t,n),this.below=n);for(var a=0;a<r.length;a++){var i=r[a],o=i[0],s=i[1],l=t[o];e.setOptions(s,"setLayoutProperty",l.layout),"visible"===l.layout.visibility&&e.setOptions(s,"setPaintProperty",l.paint)}},s._addLayers=function(t,e){for(var r=this.subplot,n=this.layerList,a=this.sourceId,i=0;i<n.length;i++){var o=n[i],s=o[0],l=t[s];r.addLayer({type:s,id:o[1],source:a,layout:l.layout,paint:l.paint},e)}},s._removeLayers=function(){for(var t=this.subplot.map,e=this.layerList,r=e.length-1;r>=0;r--)t.removeLayer(e[r][1])},s.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},e.exports=function(t,e){var r=e[0].trace,a=new o(t,r.uid),i=a.sourceId,s=n(e),l=a.below=t.belowLookup["trace-"+r.uid];return t.map.addSource(i,{type:"geojson",data:s.geojson}),a._addLayers(s,l),e[0].trace._glTrace=a,a}},{"../../plots/mapbox/constants":818,"./convert":934}],938:[function(t,e,r){"use strict";var n=t("../../components/colorscale/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../mesh3d/attributes"),o=t("../../plots/attributes"),s=t("../../lib/extend").extendFlat,l={x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},z:{valType:"data_array",editType:"calc+clearAxisTypes"},u:{valType:"data_array",editType:"calc"},v:{valType:"data_array",editType:"calc"},w:{valType:"data_array",editType:"calc"},sizemode:{valType:"enumerated",values:["scaled","absolute"],editType:"calc",dflt:"scaled"},sizeref:{valType:"number",editType:"calc",min:0},anchor:{valType:"enumerated",editType:"calc",values:["tip","tail","cm","center"],dflt:"cm"},text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertemplate:a({editType:"calc"},{keys:["norm"]}),showlegend:s({},o.showlegend,{dflt:!1})};s(l,n("",{colorAttr:"u/v/w norm",showScaleDflt:!0,editTypeOverride:"calc"}));["opacity","lightposition","lighting"].forEach(function(t){l[t]=i[t]}),l.hoverinfo=s({},o.hoverinfo,{editType:"calc",flags:["x","y","z","u","v","w","norm","text","name"],dflt:"x+y+z+norm+text+name"}),l.transforms=void 0,e.exports=l},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../mesh3d/attributes":1061}],939:[function(t,e,r){"use strict";var n=t("../../components/colorscale/calc");e.exports=function(t,e){for(var r=e.u,a=e.v,i=e.w,o=Math.min(e.x.length,e.y.length,e.z.length,r.length,a.length,i.length),s=-1/0,l=1/0,c=0;c<o;c++){var u=r[c],h=a[c],f=i[c],p=Math.sqrt(u*u+h*h+f*f);s=Math.max(s,p),l=Math.min(l,p)}e._len=o,e._normMax=s,n(t,e,{vals:[l,s],containerStr:"",cLetter:"c"})}},{"../../components/colorscale/calc":599}],940:[function(t,e,r){"use strict";var n=t("gl-cone3d"),a=t("gl-cone3d").createConeMesh,i=t("../../lib").simpleMap,o=t("../../lib/gl_format_color").parseColorScale,s=t("../../components/colorscale").extractOpts,l=t("../../plots/gl3d/zip3");function c(t,e){this.scene=t,this.uid=e,this.mesh=null,this.data=null}var u=c.prototype;u.handlePick=function(t){if(t.object===this.mesh){var e=t.index=t.data.index,r=this.data.x[e],n=this.data.y[e],a=this.data.z[e],i=this.data.u[e],o=this.data.v[e],s=this.data.w[e];t.traceCoordinate=[r,n,a,i,o,s,Math.sqrt(i*i+o*o+s*s)];var l=this.data.hovertext||this.data.text;return Array.isArray(l)&&void 0!==l[e]?t.textLabel=l[e]:l&&(t.textLabel=l),!0}};var h={xaxis:0,yaxis:1,zaxis:2},f={tip:1,tail:0,cm:.25,center:.5},p={tip:1,tail:1,cm:.75,center:.5};function d(t,e){var r=t.fullSceneLayout,a=t.dataScale,c={};function u(t,e){var n=r[e],o=a[h[e]];return i(t,function(t){return n.d2l(t)*o})}c.vectors=l(u(e.u,"xaxis"),u(e.v,"yaxis"),u(e.w,"zaxis"),e._len),c.positions=l(u(e.x,"xaxis"),u(e.y,"yaxis"),u(e.z,"zaxis"),e._len);var d=s(e);c.colormap=o(e),c.vertexIntensityBounds=[d.min/e._normMax,d.max/e._normMax],c.coneOffset=f[e.anchor],"scaled"===e.sizemode?c.coneSize=e.sizeref||.5:c.coneSize=e.sizeref&&e._normMax?e.sizeref/e._normMax:.5;var g=n(c),v=e.lightposition;return g.lightPosition=[v.x,v.y,v.z],g.ambient=e.lighting.ambient,g.diffuse=e.lighting.diffuse,g.specular=e.lighting.specular,g.roughness=e.lighting.roughness,g.fresnel=e.lighting.fresnel,g.opacity=e.opacity,e._pad=p[e.anchor]*g.vectorScale*g.coneScale*e._normMax,g}u.update=function(t){this.data=t;var e=d(this.scene,t);this.mesh.update(e)},u.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var r=t.glplot.gl,n=d(t,e),i=a(r,n),o=new c(t,e.uid);return o.mesh=i,o.data=e,i._trace=o,t.glplot.add(i),o}},{"../../components/colorscale":603,"../../lib":717,"../../lib/gl_format_color":714,"../../plots/gl3d/zip3":816,"gl-cone3d":245}],941:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/colorscale/defaults"),i=t("./attributes");e.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}var l=s("u"),c=s("v"),u=s("w"),h=s("x"),f=s("y"),p=s("z");l&&l.length&&c&&c.length&&u&&u.length&&h&&h.length&&f&&f.length&&p&&p.length?(s("sizeref"),s("sizemode"),s("anchor"),s("lighting.ambient"),s("lighting.diffuse"),s("lighting.specular"),s("lighting.roughness"),s("lighting.fresnel"),s("lightposition.x"),s("lightposition.y"),s("lightposition.z"),a(t,e,o,s,{prefix:"",cLetter:"c"}),s("text"),s("hovertext"),s("hovertemplate"),e._length=null):e.visible=!1}},{"../../components/colorscale/defaults":601,"../../lib":717,"./attributes":938}],942:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"cone",basePlotModule:t("../../plots/gl3d"),categories:["gl3d","showLegend"],attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:{min:"cmin",max:"cmax"},calc:t("./calc"),plot:t("./convert"),eventData:function(t,e){return t.norm=e.traceCoordinate[6],t},meta:{}}},{"../../plots/gl3d":805,"./attributes":938,"./calc":939,"./convert":940,"./defaults":941}],943:[function(t,e,r){"use strict";var n=t("../heatmap/attributes"),a=t("../scatter/attributes"),i=t("../../components/colorscale/attributes"),o=t("../../components/drawing/attributes").dash,s=t("../../plots/font_attributes"),l=t("../../lib/extend").extendFlat,c=t("../../constants/filter_ops"),u=c.COMPARISON_OPS2,h=c.INTERVAL_OPS,f=(t("../../constants/docs").FORMAT_LINK,a.line);e.exports=l({z:n.z,x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,text:n.text,hovertext:n.hovertext,transpose:n.transpose,xtype:n.xtype,ytype:n.ytype,zhoverformat:n.zhoverformat,hovertemplate:n.hovertemplate,hoverongaps:n.hoverongaps,connectgaps:l({},n.connectgaps,{}),fillcolor:{valType:"color",editType:"calc"},autocontour:{valType:"boolean",dflt:!0,editType:"calc",impliedEdits:{"contours.start":void 0,"contours.end":void 0,"contours.size":void 0}},ncontours:{valType:"integer",dflt:15,min:1,editType:"calc"},contours:{type:{valType:"enumerated",values:["levels","constraint"],dflt:"levels",editType:"calc"},start:{valType:"number",dflt:null,editType:"plot",impliedEdits:{"^autocontour":!1}},end:{valType:"number",dflt:null,editType:"plot",impliedEdits:{"^autocontour":!1}},size:{valType:"number",dflt:null,min:0,editType:"plot",impliedEdits:{"^autocontour":!1}},coloring:{valType:"enumerated",values:["fill","heatmap","lines","none"],dflt:"fill",editType:"calc"},showlines:{valType:"boolean",dflt:!0,editType:"plot"},showlabels:{valType:"boolean",dflt:!1,editType:"plot"},labelfont:s({editType:"plot",colorEditType:"style"}),labelformat:{valType:"string",dflt:"",editType:"plot"},operation:{valType:"enumerated",values:[].concat(u).concat(h),dflt:"=",editType:"calc"},value:{valType:"any",dflt:0,editType:"calc"},editType:"calc",impliedEdits:{autocontour:!1}},line:{color:l({},f.color,{editType:"style+colorbars"}),width:{valType:"number",min:0,editType:"style+colorbars"},dash:o,smoothing:l({},f.smoothing,{}),editType:"plot"}},i("",{cLetter:"z",autoColorDflt:!1,editTypeOverride:"calc"}))},{"../../components/colorscale/attributes":598,"../../components/drawing/attributes":611,"../../constants/docs":688,"../../constants/filter_ops":689,"../../lib/extend":708,"../../plots/font_attributes":791,"../heatmap/attributes":1e3,"../scatter/attributes":1120}],944:[function(t,e,r){"use strict";var n=t("../../components/colorscale"),a=t("../heatmap/calc"),i=t("./set_contours"),o=t("./end_plus");e.exports=function(t,e){var r=a(t,e),s=r[0].z;i(e,s);var l,c=e.contours,u=n.extractOpts(e);if("heatmap"===c.coloring&&u.auto&&!1===e.autocontour){var h=c.start,f=o(c),p=c.size||1,d=Math.floor((f-h)/p)+1;isFinite(p)||(p=1,d=1);var g=h-p/2;l=[g,g+d*p]}else l=s;return n.calc(t,e,{vals:l,cLetter:"z"}),r}},{"../../components/colorscale":603,"../heatmap/calc":1001,"./end_plus":954,"./set_contours":962}],945:[function(t,e,r){"use strict";e.exports=function(t,e){var r,n=t[0],a=n.z;switch(e.type){case"levels":var i=Math.min(a[0][0],a[0][1]);for(r=0;r<t.length;r++){var o=t[r];o.prefixBoundary=!o.edgepaths.length&&(i>o.level||o.starts.length&&i===o.level)}break;case"constraint":if(n.prefixBoundary=!1,n.edgepaths.length)return;var s=n.x.length,l=n.y.length,c=-1/0,u=1/0;for(r=0;r<l;r++)u=Math.min(u,a[r][0]),u=Math.min(u,a[r][s-1]),c=Math.max(c,a[r][0]),c=Math.max(c,a[r][s-1]);for(r=1;r<s-1;r++)u=Math.min(u,a[0][r]),u=Math.min(u,a[l-1][r]),c=Math.max(c,a[0][r]),c=Math.max(c,a[l-1][r]);var h,f,p=e.value;switch(e._operation){case">":p>c&&(n.prefixBoundary=!0);break;case"<":(p<u||n.starts.length&&p===u)&&(n.prefixBoundary=!0);break;case"[]":h=Math.min(p[0],p[1]),((f=Math.max(p[0],p[1]))<u||h>c||n.starts.length&&f===u)&&(n.prefixBoundary=!0);break;case"][":h=Math.min(p[0],p[1]),f=Math.max(p[0],p[1]),h<u&&f>c&&(n.prefixBoundary=!0)}}}},{}],946:[function(t,e,r){"use strict";var n=t("../../components/colorscale"),a=t("./make_color_map"),i=t("./end_plus");e.exports={min:"zmin",max:"zmax",calc:function(t,e,r){var o=e.contours,s=e.line,l=o.size||1,c=o.coloring,u=a(e,{isColorbar:!0});if("heatmap"===c){var h=n.extractOpts(e);r._fillgradient=h.reversescale?n.flipScale(h.colorscale):h.colorscale,r._zrange=[h.min,h.max]}else"fill"===c&&(r._fillcolor=u);r._line={color:"lines"===c?u:s.color,width:!1!==o.showlines?s.width:0,dash:s.dash},r._levels={start:o.start,end:i(o),size:l}}}},{"../../components/colorscale":603,"./end_plus":954,"./make_color_map":959}],947:[function(t,e,r){"use strict";e.exports={BOTTOMSTART:[1,9,13,104,713],TOPSTART:[4,6,7,104,713],LEFTSTART:[8,12,14,208,1114],RIGHTSTART:[2,3,11,208,1114],NEWDELTA:[null,[-1,0],[0,-1],[-1,0],[1,0],null,[0,-1],[-1,0],[0,1],[0,1],null,[0,1],[1,0],[1,0],[0,-1]],CHOOSESADDLE:{104:[4,1],208:[2,8],713:[7,13],1114:[11,14]},SADDLEREMAINDER:{1:4,2:8,4:1,7:13,8:2,11:14,13:7,14:11},LABELDISTANCE:2,LABELINCREASE:10,LABELMIN:3,LABELMAX:10,LABELOPTIMIZER:{EDGECOST:1,ANGLECOST:1,NEIGHBORCOST:5,SAMELEVELFACTOR:10,SAMELEVELDISTANCE:5,MAXCOST:100,INITIALSEARCHPOINTS:10,ITERATIONS:5}}},{}],948:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("./label_defaults"),i=t("../../components/color"),o=i.addOpacity,s=i.opacity,l=t("../../constants/filter_ops"),c=l.CONSTRAINT_REDUCTION,u=l.COMPARISON_OPS2;e.exports=function(t,e,r,i,l,h){var f,p,d,g=e.contours,v=r("contours.operation");(g._operation=c[v],function(t,e){var r;-1===u.indexOf(e.operation)?(t("contours.value",[0,1]),Array.isArray(e.value)?e.value.length>2?e.value=e.value.slice(2):0===e.length?e.value=[0,1]:e.length<2?(r=parseFloat(e.value[0]),e.value=[r,r+1]):e.value=[parseFloat(e.value[0]),parseFloat(e.value[1])]:n(e.value)&&(r=parseFloat(e.value),e.value=[r,r+1])):(t("contours.value",0),n(e.value)||(Array.isArray(e.value)?e.value=parseFloat(e.value[0]):e.value=0))}(r,g),"="===v?f=g.showlines=!0:(f=r("contours.showlines"),d=r("fillcolor",o((t.line||{}).color||l,.5))),f)&&(p=r("line.color",d&&s(d)?o(e.fillcolor,1):l),r("line.width",2),r("line.dash"));r("line.smoothing"),a(r,i,p,h)}},{"../../components/color":591,"../../constants/filter_ops":689,"./label_defaults":958,"fast-isnumeric":228}],949:[function(t,e,r){"use strict";var n=t("../../constants/filter_ops"),a=t("fast-isnumeric");function i(t,e){var r,i=Array.isArray(e);function o(t){return a(t)?+t:null}return-1!==n.COMPARISON_OPS2.indexOf(t)?r=o(i?e[0]:e):-1!==n.INTERVAL_OPS.indexOf(t)?r=i?[o(e[0]),o(e[1])]:[o(e),o(e)]:-1!==n.SET_OPS.indexOf(t)&&(r=i?e.map(o):[o(e)]),r}function o(t){return function(e){e=i(t,e);var r=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return{start:r,end:n,size:n-r}}}function s(t){return function(e){return{start:e=i(t,e),end:1/0,size:1/0}}}e.exports={"[]":o("[]"),"][":o("]["),">":s(">"),"<":s("<"),"=":s("=")}},{"../../constants/filter_ops":689,"fast-isnumeric":228}],950:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){var a=n("contours.start"),i=n("contours.end"),o=!1===a||!1===i,s=r("contours.size");!(o?e.autocontour=!0:r("autocontour",!1))&&s||r("ncontours")}},{}],951:[function(t,e,r){"use strict";var n=t("../../lib");function a(t){return n.extendFlat({},t,{edgepaths:n.extendDeep([],t.edgepaths),paths:n.extendDeep([],t.paths),starts:n.extendDeep([],t.starts)})}e.exports=function(t,e){var r,i,o,s=function(t){return t.reverse()},l=function(t){return t};switch(e){case"=":case"<":return t;case">":for(1!==t.length&&n.warn("Contour data invalid for the specified inequality operation."),i=t[0],r=0;r<i.edgepaths.length;r++)i.edgepaths[r]=s(i.edgepaths[r]);for(r=0;r<i.paths.length;r++)i.paths[r]=s(i.paths[r]);for(r=0;r<i.starts.length;r++)i.starts[r]=s(i.starts[r]);return t;case"][":var c=s;s=l,l=c;case"[]":for(2!==t.length&&n.warn("Contour data invalid for the specified inequality range operation."),i=a(t[0]),o=a(t[1]),r=0;r<i.edgepaths.length;r++)i.edgepaths[r]=s(i.edgepaths[r]);for(r=0;r<i.paths.length;r++)i.paths[r]=s(i.paths[r]);for(r=0;r<i.starts.length;r++)i.starts[r]=s(i.starts[r]);for(;o.edgepaths.length;)i.edgepaths.push(l(o.edgepaths.shift()));for(;o.paths.length;)i.paths.push(l(o.paths.shift()));for(;o.starts.length;)i.starts.push(l(o.starts.shift()));return[i]}}},{"../../lib":717}],952:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../heatmap/xyz_defaults"),i=t("./constraint_defaults"),o=t("./contours_defaults"),s=t("./style_defaults"),l=t("./attributes");e.exports=function(t,e,r,c){function u(r,a){return n.coerce(t,e,l,r,a)}if(a(t,e,u,c)){u("text"),u("hovertext"),u("hovertemplate"),u("hoverongaps");var h="constraint"===u("contours.type");u("connectgaps",n.isArray1D(e.z)),h?i(t,e,u,c,r):(o(t,e,u,function(r){return n.coerce2(t,e,l,r)}),s(t,e,u,c))}else e.visible=!1}},{"../../lib":717,"../heatmap/xyz_defaults":1014,"./attributes":943,"./constraint_defaults":948,"./contours_defaults":950,"./style_defaults":964}],953:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./constraint_mapping"),i=t("./end_plus");e.exports=function(t,e,r){for(var o="constraint"===t.type?a[t._operation](t.value):t,s=o.size,l=[],c=i(o),u=r.trace._carpetTrace,h=u?{xaxis:u.aaxis,yaxis:u.baxis,x:r.a,y:r.b}:{xaxis:e.xaxis,yaxis:e.yaxis,x:r.x,y:r.y},f=o.start;f<c;f+=s)if(l.push(n.extendFlat({level:f,crossings:{},starts:[],edgepaths:[],paths:[],z:r.z,smoothing:r.trace.line.smoothing},h)),l.length>1e3){n.warn("Too many contours, clipping at 1000",t);break}return l}},{"../../lib":717,"./constraint_mapping":949,"./end_plus":954}],954:[function(t,e,r){"use strict";e.exports=function(t){return t.end+t.size/1e6}},{}],955:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./constants");function i(t,e,r,n){return Math.abs(t[0]-e[0])<r&&Math.abs(t[1]-e[1])<n}function o(t,e,r,o,l){var c,u=e.join(","),h=t.crossings[u],f=function(t,e,r){var n=0,i=0;t>20&&e?208===t||1114===t?n=0===r[0]?1:-1:i=0===r[1]?1:-1:-1!==a.BOTTOMSTART.indexOf(t)?i=1:-1!==a.LEFTSTART.indexOf(t)?n=1:-1!==a.TOPSTART.indexOf(t)?i=-1:n=-1;return[n,i]}(h,r,e),p=[s(t,e,[-f[0],-f[1]])],d=t.z.length,g=t.z[0].length,v=e.slice(),m=f.slice();for(c=0;c<1e4;c++){if(h>20?(h=a.CHOOSESADDLE[h][(f[0]||f[1])<0?0:1],t.crossings[u]=a.SADDLEREMAINDER[h]):delete t.crossings[u],!(f=a.NEWDELTA[h])){n.log("Found bad marching index:",h,e,t.level);break}p.push(s(t,e,f)),e[0]+=f[0],e[1]+=f[1],u=e.join(","),i(p[p.length-1],p[p.length-2],o,l)&&p.pop();var y=f[0]&&(e[0]<0||e[0]>g-2)||f[1]&&(e[1]<0||e[1]>d-2);if(e[0]===v[0]&&e[1]===v[1]&&f[0]===m[0]&&f[1]===m[1]||r&&y)break;h=t.crossings[u]}1e4===c&&n.log("Infinite loop in contour?");var x,b,_,w,k,T,M,A,S,E,L,C,P,O,z,I=i(p[0],p[p.length-1],o,l),D=0,R=.2*t.smoothing,F=[],B=0;for(c=1;c<p.length;c++)C=p[c],P=p[c-1],O=void 0,z=void 0,O=C[2]-P[2],z=C[3]-P[3],D+=M=Math.sqrt(O*O+z*z),F.push(M);var N=D/F.length*R;function j(t){return p[t%p.length]}for(c=p.length-2;c>=B;c--)if((x=F[c])<N){for(_=0,b=c-1;b>=B&&x+F[b]<N;b--)x+=F[b];if(I&&c===p.length-2)for(_=0;_<b&&x+F[_]<N;_++)x+=F[_];k=c-b+_+1,T=Math.floor((c+b+_+2)/2),w=I||c!==p.length-2?I||-1!==b?k%2?j(T):[(j(T)[0]+j(T+1)[0])/2,(j(T)[1]+j(T+1)[1])/2]:p[0]:p[p.length-1],p.splice(b+1,c-b+1,w),c=b+1,_&&(B=_),I&&(c===p.length-2?p[_]=p[p.length-1]:0===c&&(p[p.length-1]=p[0]))}for(p.splice(0,B),c=0;c<p.length;c++)p[c].length=2;if(!(p.length<2))if(I)p.pop(),t.paths.push(p);else{r||n.log("Unclosed interior contour?",t.level,v.join(","),p.join("L"));var V=!1;for(A=0;A<t.edgepaths.length;A++)if(E=t.edgepaths[A],!V&&i(E[0],p[p.length-1],o,l)){p.pop(),V=!0;var U=!1;for(S=0;S<t.edgepaths.length;S++)if(i((L=t.edgepaths[S])[L.length-1],p[0],o,l)){U=!0,p.shift(),t.edgepaths.splice(A,1),S===A?t.paths.push(p.concat(L)):(S>A&&S--,t.edgepaths[S]=L.concat(p,E));break}U||(t.edgepaths[A]=p.concat(E))}for(A=0;A<t.edgepaths.length&&!V;A++)i((E=t.edgepaths[A])[E.length-1],p[0],o,l)&&(p.shift(),t.edgepaths[A]=E.concat(p),V=!0);V||t.edgepaths.push(p)}}function s(t,e,r){var n=e[0]+Math.max(r[0],0),a=e[1]+Math.max(r[1],0),i=t.z[a][n],o=t.xaxis,s=t.yaxis;if(r[1]){var l=(t.level-i)/(t.z[a][n+1]-i);return[o.c2p((1-l)*t.x[n]+l*t.x[n+1],!0),s.c2p(t.y[a],!0),n+l,a]}var c=(t.level-i)/(t.z[a+1][n]-i);return[o.c2p(t.x[n],!0),s.c2p((1-c)*t.y[a]+c*t.y[a+1],!0),n,a+c]}e.exports=function(t,e,r){var a,i,s,l;for(e=e||.01,r=r||.01,i=0;i<t.length;i++){for(s=t[i],l=0;l<s.starts.length;l++)o(s,s.starts[l],"edge",e,r);for(a=0;Object.keys(s.crossings).length&&a<1e4;)a++,o(s,Object.keys(s.crossings)[0].split(",").map(Number),void 0,e,r);1e4===a&&n.log("Infinite loop in contour?")}}},{"../../lib":717,"./constants":947}],956:[function(t,e,r){"use strict";var n=t("../../components/color"),a=t("../heatmap/hover");e.exports=function(t,e,r,i,o){var s=a(t,e,r,i,o,!0);return s&&s.forEach(function(t){var e=t.trace;"constraint"===e.contours.type&&(e.fillcolor&&n.opacity(e.fillcolor)?t.color=n.addOpacity(e.fillcolor,1):e.contours.showlines&&n.opacity(e.line.color)&&(t.color=n.addOpacity(e.line.color,1)))}),s}},{"../../components/color":591,"../heatmap/hover":1007}],957:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc"),plot:t("./plot").plot,style:t("./style"),colorbar:t("./colorbar"),hoverPoints:t("./hover"),moduleType:"trace",name:"contour",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","2dMap","contour","showLegend"],meta:{}}},{"../../plots/cartesian":776,"./attributes":943,"./calc":944,"./colorbar":946,"./defaults":952,"./hover":956,"./plot":961,"./style":963}],958:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e,r,a){if(a||(a={}),t("contours.showlabels")){var i=e.font;n.coerceFont(t,"contours.labelfont",{family:i.family,size:i.size,color:r}),t("contours.labelformat")}!1!==a.hasHover&&t("zhoverformat")}},{"../../lib":717}],959:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/colorscale"),i=t("./end_plus");e.exports=function(t){var e=t.contours,r=e.start,o=i(e),s=e.size||1,l=Math.floor((o-r)/s)+1,c="lines"===e.coloring?0:1,u=a.extractOpts(t);isFinite(s)||(s=1,l=1);var h,f,p=u.reversescale?a.flipScale(u.colorscale):u.colorscale,d=p.length,g=new Array(d),v=new Array(d);if("heatmap"===e.coloring){var m=u.min,y=u.max;for(f=0;f<d;f++)h=p[f],g[f]=h[0]*(y-m)+m,v[f]=h[1];var x=n.extent([m,y,e.start,e.start+s*(l-1)]),b=x[m<y?0:1],_=x[m<y?1:0];b!==m&&(g.splice(0,0,b),v.splice(0,0,v[0])),_!==y&&(g.push(_),v.push(v[v.length-1]))}else for(f=0;f<d;f++)h=p[f],g[f]=(h[0]*(l+c-1)-c/2)*s+r,v[f]=h[1];return a.makeColorScaleFunc({domain:g,range:v},{noNumericCheck:!0})}},{"../../components/colorscale":603,"./end_plus":954,d3:165}],960:[function(t,e,r){"use strict";var n=t("./constants");function a(t,e){var r=(e[0][0]>t?0:1)+(e[0][1]>t?0:2)+(e[1][1]>t?0:4)+(e[1][0]>t?0:8);return 5===r||10===r?t>(e[0][0]+e[0][1]+e[1][0]+e[1][1])/4?5===r?713:1114:5===r?104:208:15===r?0:r}e.exports=function(t){var e,r,i,o,s,l,c,u,h,f=t[0].z,p=f.length,d=f[0].length,g=2===p||2===d;for(r=0;r<p-1;r++)for(o=[],0===r&&(o=o.concat(n.BOTTOMSTART)),r===p-2&&(o=o.concat(n.TOPSTART)),e=0;e<d-1;e++)for(i=o.slice(),0===e&&(i=i.concat(n.LEFTSTART)),e===d-2&&(i=i.concat(n.RIGHTSTART)),s=e+","+r,l=[[f[r][e],f[r][e+1]],[f[r+1][e],f[r+1][e+1]]],h=0;h<t.length;h++)(c=a((u=t[h]).level,l))&&(u.crossings[s]=c,-1!==i.indexOf(c)&&(u.starts.push([e,r]),g&&-1!==i.indexOf(c,i.indexOf(c)+1)&&u.starts.push([e,r])))}},{"./constants":947}],961:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../components/drawing"),o=t("../../components/colorscale"),s=t("../../lib/svg_text_utils"),l=t("../../plots/cartesian/axes"),c=t("../../plots/cartesian/set_convert"),u=t("../heatmap/plot"),h=t("./make_crossings"),f=t("./find_all_paths"),p=t("./empty_pathinfo"),d=t("./convert_to_constraints"),g=t("./close_boundaries"),v=t("./constants"),m=v.LABELOPTIMIZER;function y(t,e){var r,n,o,s,l,c,u,h="",f=0,p=t.edgepaths.map(function(t,e){return e}),d=!0;function g(t){return Math.abs(t[1]-e[2][1])<.01}function v(t){return Math.abs(t[0]-e[0][0])<.01}function m(t){return Math.abs(t[0]-e[2][0])<.01}for(;p.length;){for(c=i.smoothopen(t.edgepaths[f],t.smoothing),h+=d?c:c.replace(/^M/,"L"),p.splice(p.indexOf(f),1),r=t.edgepaths[f][t.edgepaths[f].length-1],s=-1,o=0;o<4;o++){if(!r){a.log("Missing end?",f,t);break}for(u=r,Math.abs(u[1]-e[0][1])<.01&&!m(r)?n=e[1]:v(r)?n=e[0]:g(r)?n=e[3]:m(r)&&(n=e[2]),l=0;l<t.edgepaths.length;l++){var y=t.edgepaths[l][0];Math.abs(r[0]-n[0])<.01?Math.abs(r[0]-y[0])<.01&&(y[1]-r[1])*(n[1]-y[1])>=0&&(n=y,s=l):Math.abs(r[1]-n[1])<.01?Math.abs(r[1]-y[1])<.01&&(y[0]-r[0])*(n[0]-y[0])>=0&&(n=y,s=l):a.log("endpt to newendpt is not vert. or horz.",r,n,y)}if(r=n,s>=0)break;h+="L"+n}if(s===t.edgepaths.length){a.log("unclosed perimeter path");break}f=s,(d=-1===p.indexOf(f))&&(f=p[0],h+="Z")}for(f=0;f<t.paths.length;f++)h+=i.smoothclosed(t.paths[f],t.smoothing);return h}function x(t,e,r,n){var i=e.width/2,o=e.height/2,s=t.x,l=t.y,c=t.theta,u=Math.cos(c)*i,h=Math.sin(c)*i,f=(s>n.center?n.right-s:s-n.left)/(u+Math.abs(Math.sin(c)*o)),p=(l>n.middle?n.bottom-l:l-n.top)/(Math.abs(h)+Math.cos(c)*o);if(f<1||p<1)return 1/0;var d=m.EDGECOST*(1/(f-1)+1/(p-1));d+=m.ANGLECOST*c*c;for(var g=s-u,v=l-h,y=s+u,x=l+h,b=0;b<r.length;b++){var _=r[b],w=Math.cos(_.theta)*_.width/2,k=Math.sin(_.theta)*_.width/2,T=2*a.segmentDistance(g,v,y,x,_.x-w,_.y-k,_.x+w,_.y+k)/(e.height+_.height),M=_.level===e.level,A=M?m.SAMELEVELDISTANCE:1;if(T<=A)return 1/0;d+=m.NEIGHBORCOST*(M?m.SAMELEVELFACTOR:1)/(T-A)}return d}function b(t){var e,r,n=t.trace._emptypoints,a=[],i=t.z.length,o=t.z[0].length,s=[];for(e=0;e<o;e++)s.push(1);for(e=0;e<i;e++)a.push(s.slice());for(e=0;e<n.length;e++)a[(r=n[e])[0]][r[1]]=0;return t.zmask=a,a}r.plot=function(t,e,o,s){var l=e.xaxis,c=e.yaxis;a.makeTraceGroups(s,o,"contour").each(function(o){var s=n.select(this),m=o[0],x=m.trace,_=m.x,w=m.y,k=x.contours,T=p(k,e,m),M=a.ensureSingle(s,"g","heatmapcoloring"),A=[];"heatmap"===k.coloring&&(A=[o]),u(t,e,A,M),h(T),f(T);var S=l.c2p(_[0],!0),E=l.c2p(_[_.length-1],!0),L=c.c2p(w[0],!0),C=c.c2p(w[w.length-1],!0),P=[[S,C],[E,C],[E,L],[S,L]],O=T;"constraint"===k.type&&(O=d(T,k._operation)),function(t,e,r){var n=a.ensureSingle(t,"g","contourbg").selectAll("path").data("fill"===r.coloring?[0]:[]);n.enter().append("path"),n.exit().remove(),n.attr("d","M"+e.join("L")+"Z").style("stroke","none")}(s,P,k),function(t,e,r,i){var o="fill"===i.coloring||"constraint"===i.type&&"="!==i._operation,s="M"+r.join("L")+"Z";o&&g(e,i);var l=a.ensureSingle(t,"g","contourfill").selectAll("path").data(o?e:[]);l.enter().append("path"),l.exit().remove(),l.each(function(t){var e=(t.prefixBoundary?s:"")+y(t,r);e?n.select(this).attr("d",e).style("stroke","none"):n.select(this).remove()})}(s,O,P,k),function(t,e,o,s,l){var c=a.ensureSingle(t,"g","contourlines"),u=!1!==l.showlines,h=l.showlabels,f=u&&h,p=r.createLines(c,u||h,e),d=r.createLineClip(c,f,o,s.trace.uid),g=t.selectAll("g.contourlabels").data(h?[0]:[]);if(g.exit().remove(),g.enter().append("g").classed("contourlabels",!0),h){var m=[],y=[];a.clearLocationCache();var x=r.labelFormatter(o,s),b=i.tester.append("text").attr("data-notex",1).call(i.font,l.labelfont),_=e[0].xaxis,w=e[0].yaxis,k=_._length,T=w._length,M=_.range,A=w.range,S=a.aggNums(Math.min,null,s.x),E=a.aggNums(Math.max,null,s.x),L=a.aggNums(Math.min,null,s.y),C=a.aggNums(Math.max,null,s.y),P=Math.max(_.c2p(S,!0),0),O=Math.min(_.c2p(E,!0),k),z=Math.max(w.c2p(C,!0),0),I=Math.min(w.c2p(L,!0),T),D={};M[0]<M[1]?(D.left=P,D.right=O):(D.left=O,D.right=P),A[0]<A[1]?(D.top=z,D.bottom=I):(D.top=I,D.bottom=z),D.middle=(D.top+D.bottom)/2,D.center=(D.left+D.right)/2,m.push([[D.left,D.top],[D.right,D.top],[D.right,D.bottom],[D.left,D.bottom]]);var R=Math.sqrt(k*k+T*T),F=v.LABELDISTANCE*R/Math.max(1,e.length/v.LABELINCREASE);p.each(function(t){var e=r.calcTextOpts(t.level,x,b,o);n.select(this).selectAll("path").each(function(){var t=a.getVisibleSegment(this,D,e.height/2);if(t&&!(t.len<(e.width+e.height)*v.LABELMIN))for(var n=Math.min(Math.ceil(t.len/F),v.LABELMAX),i=0;i<n;i++){var o=r.findBestTextLocation(this,t,e,y,D);if(!o)break;r.addLabelData(o,e,y,m)}})}),b.remove(),r.drawLabels(g,y,o,d,f?m:null)}h&&!u&&p.remove()}(s,T,t,m,k),function(t,e,r,n,o){var s=n.trace,l=r._fullLayout._clips,c="clip"+s.uid,u=l.selectAll("#"+c).data(s.connectgaps?[]:[0]);if(u.enter().append("clipPath").classed("contourclip",!0).attr("id",c),u.exit().remove(),!1===s.connectgaps){var p={level:.9,crossings:{},starts:[],edgepaths:[],paths:[],xaxis:e.xaxis,yaxis:e.yaxis,x:n.x,y:n.y,z:b(n),smoothing:0};h([p]),f([p]),g([p],{type:"levels"});var d=a.ensureSingle(u,"path","");d.attr("d",(p.prefixBoundary?"M"+o.join("L")+"Z":"")+y(p,o))}else c=null;i.setClipUrl(t,c,r)}(s,e,t,m,P)})},r.createLines=function(t,e,r){var n=r[0].smoothing,a=t.selectAll("g.contourlevel").data(e?r:[]);if(a.exit().remove(),a.enter().append("g").classed("contourlevel",!0),e){var o=a.selectAll("path.openline").data(function(t){return t.pedgepaths||t.edgepaths});o.exit().remove(),o.enter().append("path").classed("openline",!0),o.attr("d",function(t){return i.smoothopen(t,n)}).style("stroke-miterlimit",1).style("vector-effect","non-scaling-stroke");var s=a.selectAll("path.closedline").data(function(t){return t.ppaths||t.paths});s.exit().remove(),s.enter().append("path").classed("closedline",!0),s.attr("d",function(t){return i.smoothclosed(t,n)}).style("stroke-miterlimit",1).style("vector-effect","non-scaling-stroke")}return a},r.createLineClip=function(t,e,r,n){var a=e?"clipline"+n:null,o=r._fullLayout._clips.selectAll("#"+a).data(e?[0]:[]);return o.exit().remove(),o.enter().append("clipPath").classed("contourlineclip",!0).attr("id",a),i.setClipUrl(t,a,r),o},r.labelFormatter=function(t,e){var r=t._fullLayout,n=e.trace,a=n.contours,i={type:"linear",_id:"ycontour",showexponent:"all",exponentformat:"B"};if(a.labelformat)i.tickformat=a.labelformat,c(i,r);else{var s=o.extractOpts(n);if(s&&s.colorbar&&s.colorbar._axis)i=s.colorbar._axis;else{if("constraint"===a.type){var u=a.value;Array.isArray(u)?i.range=[u[0],u[u.length-1]]:i.range=[u,u]}else i.range=[a.start,a.end],i.nticks=(a.end-a.start)/a.size;i.range[0]===i.range[1]&&(i.range[1]+=i.range[0]||1),i.nticks||(i.nticks=1e3),c(i,r),l.prepTicks(i),i._tmin=null,i._tmax=null}}return function(t){return l.tickText(i,t).text}},r.calcTextOpts=function(t,e,r,n){var a=e(t);r.text(a).call(s.convertToTspans,n);var o=r.node(),l=i.bBox(o,!0);return{text:a,width:l.width,height:l.height,fontSize:+o.style["font-size"].replace("px",""),level:t,dy:(l.top+l.bottom)/2}},r.findBestTextLocation=function(t,e,r,n,i){var o,s,l,c,u,h=r.width;e.isClosed?(s=e.len/m.INITIALSEARCHPOINTS,o=e.min+s/2,l=e.max):(s=(e.len-h)/(m.INITIALSEARCHPOINTS+1),o=e.min+s+h/2,l=e.max-(s+h)/2);for(var f=1/0,p=0;p<m.ITERATIONS;p++){for(var d=o;d<l;d+=s){var g=a.getTextLocation(t,e.total,d,h),v=x(g,r,n,i);v<f&&(f=v,u=g,c=d)}if(f>2*m.MAXCOST)break;p&&(s/=2),l=(o=c-s/2)+1.5*s}if(f<=m.MAXCOST)return u},r.addLabelData=function(t,e,r,n){var a=e.fontSize,i=e.width+a/3,o=Math.max(0,e.height-a/3),s=t.x,l=t.y,c=t.theta,u=Math.sin(c),h=Math.cos(c),f=function(t,e){return[s+t*h-e*u,l+t*u+e*h]},p=[f(-i/2,-o/2),f(-i/2,o/2),f(i/2,o/2),f(i/2,-o/2)];r.push({text:e.text,x:s,y:l,dy:e.dy,theta:c,level:e.level,width:i,height:o}),n.push(p)},r.drawLabels=function(t,e,r,i,o){var l=t.selectAll("text").data(e,function(t){return t.text+","+t.x+","+t.y+","+t.theta});if(l.exit().remove(),l.enter().append("text").attr({"data-notex":1,"text-anchor":"middle"}).each(function(t){var e=t.x+Math.sin(t.theta)*t.dy,a=t.y-Math.cos(t.theta)*t.dy;n.select(this).text(t.text).attr({x:e,y:a,transform:"rotate("+180*t.theta/Math.PI+" "+e+" "+a+")"}).call(s.convertToTspans,r)}),o){for(var c="",u=0;u<o.length;u++)c+="M"+o[u].join("L")+"Z";a.ensureSingle(i,"path","").attr("d",c)}}},{"../../components/colorscale":603,"../../components/drawing":612,"../../lib":717,"../../lib/svg_text_utils":741,"../../plots/cartesian/axes":765,"../../plots/cartesian/set_convert":783,"../heatmap/plot":1011,"./close_boundaries":945,"./constants":947,"./convert_to_constraints":951,"./empty_pathinfo":953,"./find_all_paths":955,"./make_crossings":960,d3:165}],962:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../lib");function i(t,e,r){var a={type:"linear",range:[t,e]};return n.autoTicks(a,(e-t)/(r||15)),a}e.exports=function(t,e){var r=t.contours;if(t.autocontour){var o=t.zmin,s=t.zmax;(t.zauto||void 0===o)&&(o=a.aggNums(Math.min,null,e)),(t.zauto||void 0===s)&&(s=a.aggNums(Math.max,null,e));var l=i(o,s,t.ncontours);r.size=l.dtick,r.start=n.tickFirst(l),l.range.reverse(),r.end=n.tickFirst(l),r.start===o&&(r.start+=r.size),r.end===s&&(r.end-=r.size),r.start>r.end&&(r.start=r.end=(r.start+r.end)/2),t._input.contours||(t._input.contours={}),a.extendFlat(t._input.contours,{start:r.start,end:r.end,size:r.size}),t._input.autocontour=!0}else if("constraint"!==r.type){var c,u=r.start,h=r.end,f=t._input.contours;if(u>h&&(r.start=f.start=h,h=r.end=f.end=u,u=r.start),!(r.size>0))c=u===h?1:i(u,h,t.ncontours).dtick,f.size=r.size=c}}},{"../../lib":717,"../../plots/cartesian/axes":765}],963:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/drawing"),i=t("../heatmap/style"),o=t("./make_color_map");e.exports=function(t){var e=n.select(t).selectAll("g.contour");e.style("opacity",function(t){return t[0].trace.opacity}),e.each(function(t){var e=n.select(this),r=t[0].trace,i=r.contours,s=r.line,l=i.size||1,c=i.start,u="constraint"===i.type,h=!u&&"lines"===i.coloring,f=!u&&"fill"===i.coloring,p=h||f?o(r):null;e.selectAll("g.contourlevel").each(function(t){n.select(this).selectAll("path").call(a.lineGroupStyle,s.width,h?p(t.level):s.color,s.dash)});var d=i.labelfont;if(e.selectAll("g.contourlabels text").each(function(t){a.font(n.select(this),{family:d.family,size:d.size,color:d.color||(h?p(t.level):s.color)})}),u)e.selectAll("g.contourfill path").style("fill",r.fillcolor);else if(f){var g;e.selectAll("g.contourfill path").style("fill",function(t){return void 0===g&&(g=t.level),p(t.level+.5*l)}),void 0===g&&(g=c),e.selectAll("g.contourbg path").style("fill",p(g-.5*l))}}),i(t)}},{"../../components/drawing":612,"../heatmap/style":1012,"./make_color_map":959,d3:165}],964:[function(t,e,r){"use strict";var n=t("../../components/colorscale/defaults"),a=t("./label_defaults");e.exports=function(t,e,r,i,o){var s,l=r("contours.coloring"),c="";"fill"===l&&(s=r("contours.showlines")),!1!==s&&("lines"!==l&&(c=r("line.color","#000")),r("line.width",.5),r("line.dash")),"none"!==l&&(!0!==t.showlegend&&(e.showlegend=!1),e._dfltShowLegend=!1,n(t,e,i,r,{prefix:"",cLetter:"z"})),r("line.smoothing"),a(r,i,c,o)}},{"../../components/colorscale/defaults":601,"./label_defaults":958}],965:[function(t,e,r){"use strict";var n=t("../heatmap/attributes"),a=t("../contour/attributes"),i=t("../../components/colorscale/attributes"),o=t("../../lib/extend").extendFlat,s=a.contours;e.exports=o({carpet:{valType:"string",editType:"calc"},z:n.z,a:n.x,a0:n.x0,da:n.dx,b:n.y,b0:n.y0,db:n.dy,text:n.text,hovertext:n.hovertext,transpose:n.transpose,atype:n.xtype,btype:n.ytype,fillcolor:a.fillcolor,autocontour:a.autocontour,ncontours:a.ncontours,contours:{type:s.type,start:s.start,end:s.end,size:s.size,coloring:{valType:"enumerated",values:["fill","lines","none"],dflt:"fill",editType:"calc"},showlines:s.showlines,showlabels:s.showlabels,labelfont:s.labelfont,labelformat:s.labelformat,operation:s.operation,value:s.value,editType:"calc",impliedEdits:{autocontour:!1}},line:{color:a.line.color,width:a.line.width,dash:a.line.dash,smoothing:a.line.smoothing,editType:"plot"},transforms:void 0},i("",{cLetter:"z",autoColorDflt:!1}))},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../contour/attributes":943,"../heatmap/attributes":1e3}],966:[function(t,e,r){"use strict";var n=t("../../components/colorscale/calc"),a=t("../../lib"),i=t("../heatmap/convert_column_xyz"),o=t("../heatmap/clean_2d_array"),s=t("../heatmap/interp2d"),l=t("../heatmap/find_empties"),c=t("../heatmap/make_bound_array"),u=t("./defaults"),h=t("../carpet/lookup_carpetid"),f=t("../contour/set_contours");e.exports=function(t,e){var r=e._carpetTrace=h(t,e);if(r&&r.visible&&"legendonly"!==r.visible){if(!e.a||!e.b){var p=t.data[r.index],d=t.data[e.index];d.a||(d.a=p.a),d.b||(d.b=p.b),u(d,e,e._defaultColor,t._fullLayout)}var g=function(t,e){var r,u,h,f,p,d,g,v=e._carpetTrace,m=v.aaxis,y=v.baxis;m._minDtick=0,y._minDtick=0,a.isArray1D(e.z)&&i(e,m,y,"a","b",["z"]);r=e._a=e._a||e.a,f=e._b=e._b||e.b,r=r?m.makeCalcdata(e,"_a"):[],f=f?y.makeCalcdata(e,"_b"):[],u=e.a0||0,h=e.da||1,p=e.b0||0,d=e.db||1,g=e._z=o(e._z||e.z,e.transpose),e._emptypoints=l(g),s(g,e._emptypoints);var x=a.maxRowLength(g),b="scaled"===e.xtype?"":r,_=c(e,b,u,h,x,m),w="scaled"===e.ytype?"":f,k=c(e,w,p,d,g.length,y),T={a:_,b:k,z:g};"levels"===e.contours.type&&"none"!==e.contours.coloring&&n(t,e,{vals:g,containerStr:"",cLetter:"z"});return[T]}(t,e);return f(e,e._z),g}}},{"../../components/colorscale/calc":599,"../../lib":717,"../carpet/lookup_carpetid":916,"../contour/set_contours":962,"../heatmap/clean_2d_array":1002,"../heatmap/convert_column_xyz":1004,"../heatmap/find_empties":1006,"../heatmap/interp2d":1009,"../heatmap/make_bound_array":1010,"./defaults":967}],967:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../heatmap/xyz_defaults"),i=t("./attributes"),o=t("../contour/constraint_defaults"),s=t("../contour/contours_defaults"),l=t("../contour/style_defaults");e.exports=function(t,e,r,c){function u(r,a){return n.coerce(t,e,i,r,a)}if(u("carpet"),t.a&&t.b){if(!a(t,e,u,c,"a","b"))return void(e.visible=!1);u("text"),"constraint"===u("contours.type")?o(t,e,u,c,r,{hasHover:!1}):(s(t,e,u,function(r){return n.coerce2(t,e,i,r)}),l(t,e,u,c,{hasHover:!1}))}else e._defaultColor=r,e._length=null}},{"../../lib":717,"../contour/constraint_defaults":948,"../contour/contours_defaults":950,"../contour/style_defaults":964,"../heatmap/xyz_defaults":1014,"./attributes":965}],968:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../contour/colorbar"),calc:t("./calc"),plot:t("./plot"),style:t("../contour/style"),moduleType:"trace",name:"contourcarpet",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","carpet","contour","symbols","showLegend","hasLines","carpetDependent","noHover","noSortingByValue"],meta:{}}},{"../../plots/cartesian":776,"../contour/colorbar":946,"../contour/style":963,"./attributes":965,"./calc":966,"./defaults":967,"./plot":969}],969:[function(t,e,r){"use strict";var n=t("d3"),a=t("../carpet/map_1d_array"),i=t("../carpet/makepath"),o=t("../../components/drawing"),s=t("../../lib"),l=t("../contour/make_crossings"),c=t("../contour/find_all_paths"),u=t("../contour/plot"),h=t("../contour/constants"),f=t("../contour/convert_to_constraints"),p=t("../contour/empty_pathinfo"),d=t("../contour/close_boundaries"),g=t("../carpet/lookup_carpetid"),v=t("../carpet/axis_aligned_line");function m(t,e,r){var n=t.getPointAtLength(e),a=t.getPointAtLength(r),i=a.x-n.x,o=a.y-n.y,s=Math.sqrt(i*i+o*o);return[i/s,o/s]}function y(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]);return[t[0]/e,t[1]/e]}function x(t,e){var r=Math.abs(t[0]*e[0]+t[1]*e[1]);return Math.sqrt(1-r*r)/r}e.exports=function(t,e,r,b){var _=e.xaxis,w=e.yaxis;s.makeTraceGroups(b,r,"contour").each(function(r){var b=n.select(this),k=r[0],T=k.trace,M=T._carpetTrace=g(t,T),A=t.calcdata[M.index][0];if(M.visible&&"legendonly"!==M.visible){var S=k.a,E=k.b,L=T.contours,C=p(L,e,k),P="constraint"===L.type,O=L._operation,z=P?"="===O?"lines":"fill":L.coloring,I=[[S[0],E[E.length-1]],[S[S.length-1],E[E.length-1]],[S[S.length-1],E[0]],[S[0],E[0]]];l(C);var D=1e-8*(S[S.length-1]-S[0]),R=1e-8*(E[E.length-1]-E[0]);c(C,D,R);var F,B,N,j,V=C;"constraint"===L.type&&(V=f(C,O)),function(t,e){var r,n,a,i,o,s,l,c,u;for(r=0;r<t.length;r++){for(i=t[r],o=i.pedgepaths=[],s=i.ppaths=[],n=0;n<i.edgepaths.length;n++){for(u=i.edgepaths[n],l=[],a=0;a<u.length;a++)l[a]=e(u[a]);o.push(l)}for(n=0;n<i.paths.length;n++){for(u=i.paths[n],c=[],a=0;a<u.length;a++)c[a]=e(u[a]);s.push(c)}}}(C,H);var U=[];for(j=A.clipsegments.length-1;j>=0;j--)F=A.clipsegments[j],B=a([],F.x,_.c2p),N=a([],F.y,w.c2p),B.reverse(),N.reverse(),U.push(i(B,N,F.bicubic));var q="M"+U.join("L")+"Z";!function(t,e,r,n,o,l){var c,u,h,f,p=s.ensureSingle(t,"g","contourbg").selectAll("path").data("fill"!==l||o?[]:[0]);p.enter().append("path"),p.exit().remove();var d=[];for(f=0;f<e.length;f++)c=e[f],u=a([],c.x,r.c2p),h=a([],c.y,n.c2p),d.push(i(u,h,c.bicubic));p.attr("d","M"+d.join("L")+"Z").style("stroke","none")}(b,A.clipsegments,_,w,P,z),function(t,e,r,a,i,l,c,u,h,f,p){var g="fill"===f;g&&d(i,t.contours);var m=s.ensureSingle(e,"g","contourfill").selectAll("path").data(g?i:[]);m.enter().append("path"),m.exit().remove(),m.each(function(t){var e=(t.prefixBoundary?p:"")+function(t,e,r,n,a,i,l,c){var u,h,f,p,d,g,m,y="",x=e.edgepaths.map(function(t,e){return e}),b=!0,_=1e-4*Math.abs(r[0][0]-r[2][0]),w=1e-4*Math.abs(r[0][1]-r[2][1]);function k(t){return Math.abs(t[1]-r[0][1])<w}function T(t){return Math.abs(t[1]-r[2][1])<w}function M(t){return Math.abs(t[0]-r[0][0])<_}function A(t){return Math.abs(t[0]-r[2][0])<_}function S(t,e){var r,n,o,s,u="";for(k(t)&&!A(t)||T(t)&&!M(t)?(s=a.aaxis,o=v(a,i,[t[0],e[0]],.5*(t[1]+e[1]))):(s=a.baxis,o=v(a,i,.5*(t[0]+e[0]),[t[1],e[1]])),r=1;r<o.length;r++)for(u+=s.smoothing?"C":"L",n=0;n<o[r].length;n++){var h=o[r][n];u+=[l.c2p(h[0]),c.c2p(h[1])]+" "}return u}u=0,h=null;for(;x.length;){var E=e.edgepaths[u][0];for(h&&(y+=S(h,E)),m=o.smoothopen(e.edgepaths[u].map(n),e.smoothing),y+=b?m:m.replace(/^M/,"L"),x.splice(x.indexOf(u),1),h=e.edgepaths[u][e.edgepaths[u].length-1],d=-1,p=0;p<4;p++){if(!h){s.log("Missing end?",u,e);break}for(k(h)&&!A(h)?f=r[1]:M(h)?f=r[0]:T(h)?f=r[3]:A(h)&&(f=r[2]),g=0;g<e.edgepaths.length;g++){var L=e.edgepaths[g][0];Math.abs(h[0]-f[0])<_?Math.abs(h[0]-L[0])<_&&(L[1]-h[1])*(f[1]-L[1])>=0&&(f=L,d=g):Math.abs(h[1]-f[1])<w?Math.abs(h[1]-L[1])<w&&(L[0]-h[0])*(f[0]-L[0])>=0&&(f=L,d=g):s.log("endpt to newendpt is not vert. or horz.",h,f,L)}if(d>=0)break;y+=S(h,f),h=f}if(d===e.edgepaths.length){s.log("unclosed perimeter path");break}u=d,(b=-1===x.indexOf(u))&&(u=x[0],y+=S(h,f)+"Z",h=null)}for(u=0;u<e.paths.length;u++)y+=o.smoothclosed(e.paths[u].map(n),e.smoothing);return y}(0,t,l,c,u,h,r,a);e?n.select(this).attr("d",e).style("stroke","none"):n.select(this).remove()})}(T,b,_,w,V,I,H,M,A,z,q),function(t,e,r,a,i,l,c){var f=s.ensureSingle(t,"g","contourlines"),p=!1!==i.showlines,d=i.showlabels,g=p&&d,v=u.createLines(f,p||d,e),b=u.createLineClip(f,g,r,a.trace.uid),_=t.selectAll("g.contourlabels").data(d?[0]:[]);if(_.exit().remove(),_.enter().append("g").classed("contourlabels",!0),d){var w=l.xaxis,k=l.yaxis,T=w._length,M=k._length,A=[[[0,0],[T,0],[T,M],[0,M]]],S=[];s.clearLocationCache();var E=u.labelFormatter(r,a),L=o.tester.append("text").attr("data-notex",1).call(o.font,i.labelfont),C={left:0,right:T,center:T/2,top:0,bottom:M,middle:M/2},P=Math.sqrt(T*T+M*M),O=h.LABELDISTANCE*P/Math.max(1,e.length/h.LABELINCREASE);v.each(function(t){var e=u.calcTextOpts(t.level,E,L,r);n.select(this).selectAll("path").each(function(r){var n=s.getVisibleSegment(this,C,e.height/2);if(n&&(function(t,e,r,n,a,i){for(var o,s=0;s<r.pedgepaths.length;s++)e===r.pedgepaths[s]&&(o=r.edgepaths[s]);if(!o)return;var l=a.a[0],c=a.a[a.a.length-1],u=a.b[0],h=a.b[a.b.length-1];function f(t,e){var r,n=0;return(Math.abs(t[0]-l)<.1||Math.abs(t[0]-c)<.1)&&(r=y(a.dxydb_rough(t[0],t[1],.1)),n=Math.max(n,i*x(e,r)/2)),(Math.abs(t[1]-u)<.1||Math.abs(t[1]-h)<.1)&&(r=y(a.dxyda_rough(t[0],t[1],.1)),n=Math.max(n,i*x(e,r)/2)),n}var p=m(t,0,1),d=m(t,n.total,n.total-1),g=f(o[0],p),v=n.total-f(o[o.length-1],d);n.min<g&&(n.min=g);n.max>v&&(n.max=v);n.len=n.max-n.min}(this,r,t,n,c,e.height),!(n.len<(e.width+e.height)*h.LABELMIN)))for(var a=Math.min(Math.ceil(n.len/O),h.LABELMAX),i=0;i<a;i++){var o=u.findBestTextLocation(this,n,e,S,C);if(!o)break;u.addLabelData(o,e,S,A)}})}),L.remove(),u.drawLabels(_,S,r,b,g?A:null)}d&&!p&&v.remove()}(b,C,t,k,L,e,M),o.setClipUrl(b,M._clipPathId,t)}function H(t){var e=M.ab2xy(t[0],t[1],!0);return[_.c2p(e[0]),w.c2p(e[1])]}})}},{"../../components/drawing":612,"../../lib":717,"../carpet/axis_aligned_line":900,"../carpet/lookup_carpetid":916,"../carpet/makepath":917,"../carpet/map_1d_array":918,"../contour/close_boundaries":945,"../contour/constants":947,"../contour/convert_to_constraints":951,"../contour/empty_pathinfo":953,"../contour/find_all_paths":955,"../contour/make_crossings":960,"../contour/plot":961,d3:165}],970:[function(t,e,r){"use strict";var n=t("../../components/colorscale/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../../plots/attributes"),o=t("../scattermapbox/attributes"),s=t("../../lib/extend").extendFlat;e.exports=s({lon:o.lon,lat:o.lat,z:{valType:"data_array",editType:"calc"},radius:{valType:"number",editType:"plot",arrayOk:!0,min:1,dflt:30},below:{valType:"string",editType:"plot"},text:o.text,hovertext:o.hovertext,hoverinfo:s({},i.hoverinfo,{flags:["lon","lat","z","text","name"]}),hovertemplate:a(),showlegend:s({},i.showlegend,{dflt:!1})},n("",{cLetter:"z",editTypeOverride:"calc"}))},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../scattermapbox/attributes":1184}],971:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib").isArrayOrTypedArray,i=t("../../constants/numerical").BADNUM,o=t("../../components/colorscale/calc"),s=t("../../lib")._;e.exports=function(t,e){for(var r=e._length,l=new Array(r),c=e.z,u=a(c)&&c.length,h=0;h<r;h++){var f=l[h]={},p=e.lon[h],d=e.lat[h];if(f.lonlat=n(p)&&n(d)?[+p,+d]:[i,i],u){var g=c[h];f.z=n(g)?g:i}}return o(t,e,{vals:u?c:[0,1],containerStr:"",cLetter:"z"}),r&&(l[0].t={labels:{lat:s(t,"lat:")+" ",lon:s(t,"lon:")+" "}}),l}},{"../../components/colorscale/calc":599,"../../constants/numerical":693,"../../lib":717,"fast-isnumeric":228}],972:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../components/color"),o=t("../../components/colorscale"),s=t("../../constants/numerical").BADNUM,l=t("../../lib/geojson_utils").makeBlank;e.exports=function(t){var e=t[0].trace,r=!0===e.visible&&0!==e._length,c=e._opts={heatmap:{layout:{visibility:"none"},paint:{}},geojson:l()};if(!r)return c;var u,h=[],f=e.z,p=e.radius,d=a.isArrayOrTypedArray(f)&&f.length,g=a.isArrayOrTypedArray(p);for(u=0;u<t.length;u++){var v=t[u],m=v.lonlat;if(m[0]!==s){var y={};if(d){var x=v.z;y.z=x!==s?x:0}g&&(y.r=n(p[u])&&p[u]>0?+p[u]:0),h.push({type:"Feature",geometry:{type:"Point",coordinates:m},properties:y})}}var b=o.extractOpts(e),_=b.reversescale?o.flipScale(b.colorscale):b.colorscale,w=_[0][1],k=["interpolate",["linear"],["heatmap-density"],0,i.opacity(w)<1?w:i.addOpacity(w,0)];for(u=1;u<_.length;u++)k.push(_[u][0],_[u][1]);var T=["interpolate",["linear"],["get","z"],b.min,0,b.max,1];return a.extendFlat(c.heatmap.paint,{"heatmap-weight":d?T:1/(b.max-b.min),"heatmap-color":k,"heatmap-radius":g?{type:"identity",property:"r"}:e.radius,"heatmap-opacity":e.opacity}),c.geojson={type:"FeatureCollection",features:h},c.heatmap.layout.visibility="visible",c}},{"../../components/color":591,"../../components/colorscale":603,"../../constants/numerical":693,"../../lib":717,"../../lib/geojson_utils":712,"fast-isnumeric":228}],973:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/colorscale/defaults"),i=t("./attributes");e.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}var l=s("lon")||[],c=s("lat")||[],u=Math.min(l.length,c.length);u?(e._length=u,s("z"),s("radius"),s("below"),s("text"),s("hovertext"),s("hovertemplate"),a(t,e,o,s,{prefix:"",cLetter:"z"})):e.visible=!1}},{"../../components/colorscale/defaults":601,"../../lib":717,"./attributes":970}],974:[function(t,e,r){"use strict";e.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t.z=e.z,t}},{}],975:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../scattermapbox/hover");e.exports=function(t,e,r){var o=i(t,e,r);if(o){var s=o[0],l=s.cd,c=l[0].trace,u=l[s.index];if(delete s.color,"z"in u){var h=s.subplot.mockAxis;s.z=u.z,s.zLabel=a.tickText(h,h.c2l(u.z),"hover").text}return s.extraText=function(t,e,r){if(t.hovertemplate)return;var a=(e.hi||t.hoverinfo).split("+"),i=-1!==a.indexOf("all"),o=-1!==a.indexOf("lon"),s=-1!==a.indexOf("lat"),l=e.lonlat,c=[];function u(t){return t+"\xb0"}i||o&&s?c.push("("+u(l[0])+", "+u(l[1])+")"):o?c.push(r.lon+u(l[0])):s&&c.push(r.lat+u(l[1]));(i||-1!==a.indexOf("text"))&&n.fillText(e,t,c);return c.join("<br>")}(c,u,l[0].t.labels),[s]}}},{"../../lib":717,"../../plots/cartesian/axes":765,"../scattermapbox/hover":1189}],976:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../heatmap/colorbar"),formatLabels:t("../scattermapbox/format_labels"),calc:t("./calc"),plot:t("./plot"),hoverPoints:t("./hover"),eventData:t("./event_data"),getBelow:function(t,e){for(var r=e.getMapLayers(),n=0;n<r.length;n++){var a=r[n],i=a.id;if("symbol"===a.type&&"string"==typeof i&&-1===i.indexOf("plotly-"))return i}},moduleType:"trace",name:"densitymapbox",basePlotModule:t("../../plots/mapbox"),categories:["mapbox","gl","showLegend"],meta:{hr_name:"density_mapbox"}}},{"../../plots/mapbox":820,"../heatmap/colorbar":1003,"../scattermapbox/format_labels":1188,"./attributes":970,"./calc":971,"./defaults":973,"./event_data":974,"./hover":975,"./plot":977}],977:[function(t,e,r){"use strict";var n=t("./convert"),a=t("../../plots/mapbox/constants").traceLayerPrefix;function i(t,e){this.type="densitymapbox",this.subplot=t,this.uid=e,this.sourceId="source-"+e,this.layerList=[["heatmap",a+e+"-heatmap"]],this.below=null}var o=i.prototype;o.update=function(t){var e=this.subplot,r=this.layerList,a=n(t),i=e.belowLookup["trace-"+this.uid];e.map.getSource(this.sourceId).setData(a.geojson),i!==this.below&&(this._removeLayers(),this._addLayers(a,i),this.below=i);for(var o=0;o<r.length;o++){var s=r[o],l=s[0],c=s[1],u=a[l];e.setOptions(c,"setLayoutProperty",u.layout),"visible"===u.layout.visibility&&e.setOptions(c,"setPaintProperty",u.paint)}},o._addLayers=function(t,e){for(var r=this.subplot,n=this.layerList,a=this.sourceId,i=0;i<n.length;i++){var o=n[i],s=o[0],l=t[s];r.addLayer({type:s,id:o[1],source:a,layout:l.layout,paint:l.paint},e)}},o._removeLayers=function(){for(var t=this.subplot.map,e=this.layerList,r=e.length-1;r>=0;r--)t.removeLayer(e[r][1])},o.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},e.exports=function(t,e){var r=e[0].trace,a=new i(t,r.uid),o=a.sourceId,s=n(e),l=a.below=t.belowLookup["trace-"+r.uid];return t.map.addSource(o,{type:"geojson",data:s.geojson}),a._addLayers(s,l),a}},{"../../plots/mapbox/constants":818,"./convert":972}],978:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,"tx"),n.mergeArray(e.hovertext,t,"htx");var a=e.marker;if(a){n.mergeArray(a.opacity,t,"mo"),n.mergeArray(a.color,t,"mc");var i=a.line;i&&(n.mergeArray(i.color,t,"mlc"),n.mergeArrayCastPositive(i.width,t,"mlw"))}}},{"../../lib":717}],979:[function(t,e,r){"use strict";var n=t("../bar/attributes"),a=t("../scatter/attributes").line,i=t("../../plots/attributes"),o=t("../../plots/template_attributes").hovertemplateAttrs,s=t("../../plots/template_attributes").texttemplateAttrs,l=t("./constants"),c=t("../../lib/extend").extendFlat,u=t("../../components/color");e.exports={x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,hovertext:n.hovertext,hovertemplate:o({},{keys:l.eventDataKeys}),hoverinfo:c({},i.hoverinfo,{flags:["name","x","y","text","percent initial","percent previous","percent total"]}),textinfo:{valType:"flaglist",flags:["label","text","percent initial","percent previous","percent total","value"],extras:["none"],editType:"plot",arrayOk:!1},texttemplate:s({editType:"plot"},{keys:l.eventDataKeys.concat(["label","value"])}),text:n.text,textposition:c({},n.textposition,{dflt:"auto"}),insidetextanchor:c({},n.insidetextanchor,{dflt:"middle"}),textangle:c({},n.textangle,{dflt:0}),textfont:n.textfont,insidetextfont:n.insidetextfont,outsidetextfont:n.outsidetextfont,constraintext:n.constraintext,cliponaxis:n.cliponaxis,orientation:c({},n.orientation,{}),offset:c({},n.offset,{arrayOk:!1}),width:c({},n.width,{arrayOk:!1}),marker:n.marker,connector:{fillcolor:{valType:"color",editType:"style"},line:{color:c({},a.color,{dflt:u.defaultLine}),width:c({},a.width,{dflt:0,editType:"plot"}),dash:a.dash,editType:"style"},visible:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup}},{"../../components/color":591,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../bar/attributes":856,"../scatter/attributes":1120,"./constants":981}],980:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("./arrays_to_calcdata"),i=t("../scatter/calc_selection"),o=t("../../constants/numerical").BADNUM;function s(t){return t===o?0:t}e.exports=function(t,e){var r,l,c,u,h=n.getFromId(t,e.xaxis||"x"),f=n.getFromId(t,e.yaxis||"y");"h"===e.orientation?(r=h.makeCalcdata(e,"x"),l=f.makeCalcdata(e,"y")):(r=f.makeCalcdata(e,"y"),l=h.makeCalcdata(e,"x"));var p,d=Math.min(l.length,r.length),g=new Array(d);for(e._base=[],c=0;c<d;c++){r[c]<0&&(r[c]=o);var v=!1;r[c]!==o&&c+1<d&&r[c+1]!==o&&(v=!0),u=g[c]={p:l[c],s:r[c],cNext:v},e._base[c]=-.5*u.s,e.ids&&(u.id=String(e.ids[c])),0===c&&(g[0].vTotal=0),g[0].vTotal+=s(u.s),u.begR=s(u.s)/s(g[0].s)}for(c=0;c<d;c++)(u=g[c]).s!==o&&(u.sumR=u.s/g[0].vTotal,u.difR=void 0!==p?u.s/p:1,p=u.s);return a(g,e),i(g,e),g}},{"../../constants/numerical":693,"../../plots/cartesian/axes":765,"../scatter/calc_selection":1122,"./arrays_to_calcdata":978}],981:[function(t,e,r){"use strict";e.exports={eventDataKeys:["percentInitial","percentPrevious","percentTotal"]}},{}],982:[function(t,e,r){"use strict";var n=t("../bar/cross_trace_calc").setGroupPositions;e.exports=function(t,e){var r,a,i=t._fullLayout,o=t._fullData,s=t.calcdata,l=e.xaxis,c=e.yaxis,u=[],h=[],f=[];for(a=0;a<o.length;a++){var p=o[a],d="h"===p.orientation;!0===p.visible&&p.xaxis===l._id&&p.yaxis===c._id&&"funnel"===p.type&&(r=s[a],d?f.push(r):h.push(r),u.push(r))}var g={mode:i.funnelmode,norm:i.funnelnorm,gap:i.funnelgap,groupgap:i.funnelgroupgap};for(n(t,l,c,h,g),n(t,c,l,f,g),a=0;a<u.length;a++){r=u[a];for(var v=0;v<r.length;v++)v+1<r.length&&(r[v].nextP0=r[v+1].p0,r[v].nextS0=r[v+1].s0,r[v].nextP1=r[v+1].p1,r[v].nextS1=r[v+1].s1)}}},{"../bar/cross_trace_calc":859}],983:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../bar/defaults").handleGroupingDefaults,i=t("../bar/defaults").handleText,o=t("../scatter/xy_defaults"),s=t("./attributes"),l=t("../../components/color");e.exports={supplyDefaults:function(t,e,r,a){function c(r,a){return n.coerce(t,e,s,r,a)}if(o(t,e,a,c)){c("orientation",e.y&&!e.x?"v":"h"),c("offset"),c("width");var u=c("text");c("hovertext"),c("hovertemplate");var h=c("textposition");i(t,e,a,c,h,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),"none"===e.textposition||e.texttemplate||c("textinfo",Array.isArray(u)?"text+value":"value");var f=c("marker.color",r);c("marker.line.color",l.defaultLine),c("marker.line.width"),c("connector.visible")&&(c("connector.fillcolor",function(t){var e=n.isArrayOrTypedArray(t)?"#000":t;return l.addOpacity(e,.5*l.opacity(e))}(f)),c("connector.line.width")&&(c("connector.line.color"),c("connector.line.dash")))}else e.visible=!1},crossTraceDefaults:function(t,e){var r,i;function o(t){return n.coerce(i._input,i,s,t)}if("group"===e.funnelmode)for(var l=0;l<t.length;l++)r=(i=t[l])._input,a(r,i,e,o)}}},{"../../components/color":591,"../../lib":717,"../bar/defaults":860,"../scatter/xy_defaults":1146,"./attributes":979}],984:[function(t,e,r){"use strict";e.exports=function(t,e){return t.x="xVal"in e?e.xVal:e.x,t.y="yVal"in e?e.yVal:e.y,"percentInitial"in e&&(t.percentInitial=e.percentInitial),"percentPrevious"in e&&(t.percentPrevious=e.percentPrevious),"percentTotal"in e&&(t.percentTotal=e.percentTotal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},{}],985:[function(t,e,r){"use strict";var n=t("../../components/color").opacity,a=t("../bar/hover").hoverOnBars,i=t("../../lib").formatPercent;e.exports=function(t,e,r,o){var s=a(t,e,r,o);if(s){var l=s.cd,c=l[0].trace,u="h"===c.orientation,h=l[s.index];s[(u?"x":"y")+"LabelVal"]=h.s,s.percentInitial=h.begR,s.percentInitialLabel=i(h.begR,1),s.percentPrevious=h.difR,s.percentPreviousLabel=i(h.difR,1),s.percentTotal=h.sumR,s.percentTotalLabel=i(h.sumR,1);var f=h.hi||c.hoverinfo,p=[];if(f&&"none"!==f&&"skip"!==f){var d="all"===f,g=f.split("+"),v=function(t){return d||-1!==g.indexOf(t)};v("percent initial")&&p.push(s.percentInitialLabel+" of initial"),v("percent previous")&&p.push(s.percentPreviousLabel+" of previous"),v("percent total")&&p.push(s.percentTotalLabel+" of total")}return s.extraText=p.join("<br>"),s.color=function(t,e){var r=t.marker,a=e.mc||r.color,i=e.mlc||r.line.color,o=e.mlw||r.line.width;if(n(a))return a;if(n(i)&&o)return i}(c,h),[s]}}},{"../../components/color":591,"../../lib":717,"../bar/hover":863}],986:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults").supplyDefaults,crossTraceDefaults:t("./defaults").crossTraceDefaults,supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc"),crossTraceCalc:t("./cross_trace_calc"),plot:t("./plot"),style:t("./style").style,hoverPoints:t("./hover"),eventData:t("./event_data"),selectPoints:t("../bar/select"),moduleType:"trace",name:"funnel",basePlotModule:t("../../plots/cartesian"),categories:["bar-like","cartesian","svg","oriented","showLegend","zoomScale"],meta:{}}},{"../../plots/cartesian":776,"../bar/select":868,"./attributes":979,"./calc":980,"./cross_trace_calc":982,"./defaults":983,"./event_data":984,"./hover":985,"./layout_attributes":987,"./layout_defaults":988,"./plot":989,"./style":990}],987:[function(t,e,r){"use strict";e.exports={funnelmode:{valType:"enumerated",values:["stack","group","overlay"],dflt:"stack",editType:"calc"},funnelgap:{valType:"number",min:0,max:1,editType:"calc"},funnelgroupgap:{valType:"number",min:0,max:1,dflt:0,editType:"calc"}}},{}],988:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e,r){var i=!1;function o(r,i){return n.coerce(t,e,a,r,i)}for(var s=0;s<r.length;s++){var l=r[s];if(l.visible&&"funnel"===l.type){i=!0;break}}i&&(o("funnelmode"),o("funnelgap",.2),o("funnelgroupgap"))}},{"../../lib":717,"./layout_attributes":987}],989:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../components/drawing"),o=t("../../constants/numerical").BADNUM,s=t("../bar/plot"),l=t("../bar/uniform_text").clearMinTextSize;function c(t,e,r,n){var a=[],i=[],o=n?e:r,s=n?r:e;return a[0]=o.c2p(t.s0,!0),i[0]=s.c2p(t.p0,!0),a[1]=o.c2p(t.s1,!0),i[1]=s.c2p(t.p1,!0),a[2]=o.c2p(t.nextS0,!0),i[2]=s.c2p(t.nextP0,!0),a[3]=o.c2p(t.nextS1,!0),i[3]=s.c2p(t.nextP1,!0),n?[a,i]:[i,a]}e.exports=function(t,e,r,u){var h=t._fullLayout;l("funnel",h),function(t,e,r,s){var l=e.xaxis,u=e.yaxis;a.makeTraceGroups(s,r,"trace bars").each(function(r){var s=n.select(this),h=r[0].trace,f=a.ensureSingle(s,"g","regions");if(h.connector&&h.connector.visible){var p="h"===h.orientation,d=f.selectAll("g.region").data(a.identity);d.enter().append("g").classed("region",!0),d.exit().remove();var g=d.size();d.each(function(r,s){if(s===g-1||r.cNext){var h=c(r,l,u,p),f=h[0],d=h[1],v="";f[0]!==o&&d[0]!==o&&f[1]!==o&&d[1]!==o&&f[2]!==o&&d[2]!==o&&f[3]!==o&&d[3]!==o&&(v+=p?"M"+f[0]+","+d[1]+"L"+f[2]+","+d[2]+"H"+f[3]+"L"+f[1]+","+d[1]+"Z":"M"+f[1]+","+d[1]+"L"+f[2]+","+d[3]+"V"+d[2]+"L"+f[1]+","+d[0]+"Z"),""===v&&(v="M0,0Z"),a.ensureSingle(n.select(this),"path").attr("d",v).call(i.setClipUrl,e.layerClipId,t)}})}else f.remove()})}(t,e,r,u),function(t,e,r,o){var s=e.xaxis,l=e.yaxis;a.makeTraceGroups(o,r,"trace bars").each(function(r){var o=n.select(this),u=r[0].trace,h=a.ensureSingle(o,"g","lines");if(u.connector&&u.connector.visible&&u.connector.line.width){var f="h"===u.orientation,p=h.selectAll("g.line").data(a.identity);p.enter().append("g").classed("line",!0),p.exit().remove();var d=p.size();p.each(function(r,o){if(o===d-1||r.cNext){var u=c(r,s,l,f),h=u[0],p=u[1],g="";void 0!==h[3]&&void 0!==p[3]&&(f?(g+="M"+h[0]+","+p[1]+"L"+h[2]+","+p[2],g+="M"+h[1]+","+p[1]+"L"+h[3]+","+p[2]):(g+="M"+h[1]+","+p[1]+"L"+h[2]+","+p[3],g+="M"+h[1]+","+p[0]+"L"+h[2]+","+p[2])),""===g&&(g="M0,0Z"),a.ensureSingle(n.select(this),"path").attr("d",g).call(i.setClipUrl,e.layerClipId,t)}})}else h.remove()})}(t,e,r,u),s.plot(t,e,r,u,{mode:h.funnelmode,norm:h.funnelmode,gap:h.funnelgap,groupgap:h.funnelgroupgap})}},{"../../components/drawing":612,"../../constants/numerical":693,"../../lib":717,"../bar/plot":867,"../bar/uniform_text":872,d3:165}],990:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/drawing"),i=t("../../components/color"),o=t("../../constants/interactions").DESELECTDIM,s=t("../bar/style"),l=t("../bar/uniform_text").resizeText,c=s.styleTextPoints;e.exports={style:function(t,e,r){var s=r||n.select(t).selectAll("g.funnellayer").selectAll("g.trace");l(t,s,"funnel"),s.style("opacity",function(t){return t[0].trace.opacity}),s.each(function(e){var r=n.select(this),s=e[0].trace;r.selectAll(".point > path").each(function(t){if(!t.isBlank){var e=s.marker;n.select(this).call(i.fill,t.mc||e.color).call(i.stroke,t.mlc||e.line.color).call(a.dashLine,e.line.dash,t.mlw||e.line.width).style("opacity",s.selectedpoints&&!t.selected?o:1)}}),c(r,s,t),r.selectAll(".regions").each(function(){n.select(this).selectAll("path").style("stroke-width",0).call(i.fill,s.connector.fillcolor)}),r.selectAll(".lines").each(function(){var t=s.connector.line;a.lineGroupStyle(n.select(this).selectAll("path"),t.width,t.color,t.dash)})})}}},{"../../components/color":591,"../../components/drawing":612,"../../constants/interactions":692,"../bar/style":870,"../bar/uniform_text":872,d3:165}],991:[function(t,e,r){"use strict";var n=t("../pie/attributes"),a=t("../../plots/attributes"),i=t("../../plots/domain").attributes,o=t("../../plots/template_attributes").hovertemplateAttrs,s=t("../../plots/template_attributes").texttemplateAttrs,l=t("../../lib/extend").extendFlat;e.exports={labels:n.labels,label0:n.label0,dlabel:n.dlabel,values:n.values,marker:{colors:n.marker.colors,line:{color:l({},n.marker.line.color,{dflt:null}),width:l({},n.marker.line.width,{dflt:1}),editType:"calc"},editType:"calc"},text:n.text,hovertext:n.hovertext,scalegroup:l({},n.scalegroup,{}),textinfo:l({},n.textinfo,{flags:["label","text","value","percent"]}),texttemplate:s({editType:"plot"},{keys:["label","color","value","text","percent"]}),hoverinfo:l({},a.hoverinfo,{flags:["label","text","value","percent","name"]}),hovertemplate:o({},{keys:["label","color","value","text","percent"]}),textposition:l({},n.textposition,{values:["inside","none"],dflt:"inside"}),textfont:n.textfont,insidetextfont:n.insidetextfont,title:{text:n.title.text,font:n.title.font,position:l({},n.title.position,{values:["top left","top center","top right"],dflt:"top center"}),editType:"plot"},domain:i({name:"funnelarea",trace:!0,editType:"calc"}),aspectratio:{valType:"number",min:0,dflt:1,editType:"plot"},baseratio:{valType:"number",min:0,max:1,dflt:.333,editType:"plot"}}},{"../../lib/extend":708,"../../plots/attributes":762,"../../plots/domain":790,"../../plots/template_attributes":841,"../pie/attributes":1094}],992:[function(t,e,r){"use strict";var n=t("../../plots/plots");r.name="funnelarea",r.plot=function(t,e,a,i){n.plotBasePlot(r.name,t,e,a,i)},r.clean=function(t,e,a,i){n.cleanBasePlot(r.name,t,e,a,i)}},{"../../plots/plots":826}],993:[function(t,e,r){"use strict";var n=t("../pie/calc");e.exports={calc:function(t,e){return n.calc(t,e)},crossTraceCalc:function(t){n.crossTraceCalc(t,{type:"funnelarea"})}}},{"../pie/calc":1096}],994:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("../../plots/domain").defaults,o=t("../bar/defaults").handleText,s=t("../pie/defaults").handleLabelsAndValues;e.exports=function(t,e,r,l){function c(r,i){return n.coerce(t,e,a,r,i)}var u=c("labels"),h=c("values"),f=s(u,h),p=f.len;if(e._hasLabels=f.hasLabels,e._hasValues=f.hasValues,!e._hasLabels&&e._hasValues&&(c("label0"),c("dlabel")),p){e._length=p,c("marker.line.width")&&c("marker.line.color",l.paper_bgcolor),c("marker.colors"),c("scalegroup");var d,g=c("text"),v=c("texttemplate");if(v||(d=c("textinfo",Array.isArray(g)?"text+percent":"percent")),c("hovertext"),c("hovertemplate"),v||d&&"none"!==d){var m=c("textposition");o(t,e,l,c,m,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1})}i(e,l,c),c("title.text")&&(c("title.position"),n.coerceFont(c,"title.font",l.font)),c("aspectratio"),c("baseratio")}else e.visible=!1}},{"../../lib":717,"../../plots/domain":790,"../bar/defaults":860,"../pie/defaults":1097,"./attributes":991}],995:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"funnelarea",basePlotModule:t("./base_plot"),categories:["pie-like","funnelarea","showLegend"],attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults"),supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc").calc,crossTraceCalc:t("./calc").crossTraceCalc,plot:t("./plot"),style:t("./style"),styleOne:t("../pie/style_one"),meta:{}}},{"../pie/style_one":1105,"./attributes":991,"./base_plot":992,"./calc":993,"./defaults":994,"./layout_attributes":996,"./layout_defaults":997,"./plot":998,"./style":999}],996:[function(t,e,r){"use strict";var n=t("../pie/layout_attributes").hiddenlabels;e.exports={hiddenlabels:n,funnelareacolorway:{valType:"colorlist",editType:"calc"},extendfunnelareacolors:{valType:"boolean",dflt:!0,editType:"calc"}}},{"../pie/layout_attributes":1101}],997:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e){function r(r,i){return n.coerce(t,e,a,r,i)}r("hiddenlabels"),r("funnelareacolorway",e.colorway),r("extendfunnelareacolors")}},{"../../lib":717,"./layout_attributes":996}],998:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/drawing"),i=t("../../lib"),o=t("../../lib/svg_text_utils"),s=t("../bar/plot").toMoveInsideBar,l=t("../bar/uniform_text"),c=l.recordMinTextSize,u=l.clearMinTextSize,h=t("../pie/helpers"),f=t("../pie/plot"),p=f.attachFxHandlers,d=f.determineInsideTextFont,g=f.layoutAreas,v=f.prerenderTitles,m=f.positionTitleOutside,y=f.formatSliceLabel;function x(t,e){return"l"+(e[0]-t[0])+","+(e[1]-t[1])}e.exports=function(t,e){var r=t._fullLayout;u("funnelarea",r),v(e,t),g(e,r._size),i.makeTraceGroups(r._funnelarealayer,e,"trace").each(function(e){var l=n.select(this),u=e[0],f=u.trace;!function(t){if(!t.length)return;var e=t[0],r=e.trace,n=r.aspectratio,a=r.baseratio;a>.999&&(a=.999);var i,o=Math.pow(a,2),s=e.vTotal,l=s,c=s*o/(1-o)/s;function u(){var t,e={x:t=Math.sqrt(c),y:-t};return[e.x,e.y]}var h,f,p=[];for(p.push(u()),h=t.length-1;h>-1;h--)if(!(f=t[h]).hidden){var d=f.v/l;c+=d,p.push(u())}var g=1/0,v=-1/0;for(h=0;h<p.length;h++)i=p[h],g=Math.min(g,i[1]),v=Math.max(v,i[1]);for(h=0;h<p.length;h++)p[h][1]-=(v+g)/2;var m=p[p.length-1][0],y=e.r,x=(v-g)/2,b=y/m,_=y/x*n;for(e.r=_*x,h=0;h<p.length;h++)p[h][0]*=b,p[h][1]*=_;var w=[-(i=p[0])[0],i[1]],k=[i[0],i[1]],T=0;for(h=t.length-1;h>-1;h--)if(!(f=t[h]).hidden){var M=p[T+=1][0],A=p[T][1];f.TL=[-M,A],f.TR=[M,A],f.BL=w,f.BR=k,f.pxmid=(S=f.TR,E=f.BR,[.5*(S[0]+E[0]),.5*(S[1]+E[1])]),w=f.TL,k=f.TR}var S,E}(e),l.each(function(){var l=n.select(this).selectAll("g.slice").data(e);l.enter().append("g").classed("slice",!0),l.exit().remove(),l.each(function(l,g){if(l.hidden)n.select(this).selectAll("path,g").remove();else{l.pointNumber=l.i,l.curveNumber=f.index;var v=u.cx,m=u.cy,b=n.select(this),_=b.selectAll("path.surface").data([l]);_.enter().append("path").classed("surface",!0).style({"pointer-events":"all"}),b.call(p,t,e);var w="M"+(v+l.TR[0])+","+(m+l.TR[1])+x(l.TR,l.BR)+x(l.BR,l.BL)+x(l.BL,l.TL)+"Z";_.attr("d",w),y(t,l,u);var k=h.castOption(f.textposition,l.pts),T=b.selectAll("g.slicetext").data(l.text&&"none"!==k?[0]:[]);T.enter().append("g").classed("slicetext",!0),T.exit().remove(),T.each(function(){var u=i.ensureSingle(n.select(this),"text","",function(t){t.attr("data-notex",1)}),h=i.ensureUniformFontSize(t,d(f,l,r.font));u.text(l.text).attr({class:"slicetext",transform:"","text-anchor":"middle"}).call(a.font,h).call(o.convertToTspans,t);var p,y,x,b=a.bBox(u.node()),_=Math.min(l.BL[1],l.BR[1])+m,w=Math.max(l.TL[1],l.TR[1])+m;y=Math.max(l.TL[0],l.BL[0])+v,x=Math.min(l.TR[0],l.BR[0])+v,(p=s(y,x,_,w,b,{isHorizontal:!0,constrained:!0,angle:0,anchor:"middle"})).fontSize=h.size,c(f.type,p,r),e[g].transform=p,u.attr("transform",i.getTextTransform(p))})}});var g=n.select(this).selectAll("g.titletext").data(f.title.text?[0]:[]);g.enter().append("g").classed("titletext",!0),g.exit().remove(),g.each(function(){var e=i.ensureSingle(n.select(this),"text","",function(t){t.attr("data-notex",1)}),s=f.title.text;f._meta&&(s=i.templateString(s,f._meta)),e.text(s).attr({class:"titletext",transform:"","text-anchor":"middle"}).call(a.font,f.title.font).call(o.convertToTspans,t);var l=m(u,r._size);e.attr("transform","translate("+l.x+","+l.y+")"+(l.scale<1?"scale("+l.scale+")":"")+"translate("+l.tx+","+l.ty+")")})})})}},{"../../components/drawing":612,"../../lib":717,"../../lib/svg_text_utils":741,"../bar/plot":867,"../bar/uniform_text":872,"../pie/helpers":1099,"../pie/plot":1103,d3:165}],999:[function(t,e,r){"use strict";var n=t("d3"),a=t("../pie/style_one"),i=t("../bar/uniform_text").resizeText;e.exports=function(t){var e=t._fullLayout._funnelarealayer.selectAll(".trace");i(t,e,"funnelarea"),e.each(function(t){var e=t[0].trace,r=n.select(this);r.style({opacity:e.opacity}),r.selectAll("path.surface").each(function(t){n.select(this).call(a,t,e)})})}},{"../bar/uniform_text":872,"../pie/style_one":1105,d3:165}],1000:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),a=t("../../plots/attributes"),i=t("../../plots/template_attributes").hovertemplateAttrs,o=t("../../components/colorscale/attributes"),s=(t("../../constants/docs").FORMAT_LINK,t("../../lib/extend").extendFlat);e.exports=s({z:{valType:"data_array",editType:"calc"},x:s({},n.x,{impliedEdits:{xtype:"array"}}),x0:s({},n.x0,{impliedEdits:{xtype:"scaled"}}),dx:s({},n.dx,{impliedEdits:{xtype:"scaled"}}),y:s({},n.y,{impliedEdits:{ytype:"array"}}),y0:s({},n.y0,{impliedEdits:{ytype:"scaled"}}),dy:s({},n.dy,{impliedEdits:{ytype:"scaled"}}),text:{valType:"data_array",editType:"calc"},hovertext:{valType:"data_array",editType:"calc"},transpose:{valType:"boolean",dflt:!1,editType:"calc"},xtype:{valType:"enumerated",values:["array","scaled"],editType:"calc+clearAxisTypes"},ytype:{valType:"enumerated",values:["array","scaled"],editType:"calc+clearAxisTypes"},zsmooth:{valType:"enumerated",values:["fast","best",!1],dflt:!1,editType:"calc"},hoverongaps:{valType:"boolean",dflt:!0,editType:"none"},connectgaps:{valType:"boolean",editType:"calc"},xgap:{valType:"number",dflt:0,min:0,editType:"plot"},ygap:{valType:"number",dflt:0,min:0,editType:"plot"},zhoverformat:{valType:"string",dflt:"",editType:"none"},hovertemplate:i(),showlegend:s({},a.showlegend,{dflt:!1})},{transforms:void 0},o("",{cLetter:"z",autoColorDflt:!1}))},{"../../components/colorscale/attributes":598,"../../constants/docs":688,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../scatter/attributes":1120}],1001:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("../../plots/cartesian/axes"),o=t("../histogram2d/calc"),s=t("../../components/colorscale/calc"),l=t("./convert_column_xyz"),c=t("./clean_2d_array"),u=t("./interp2d"),h=t("./find_empties"),f=t("./make_bound_array");e.exports=function(t,e){var r,p,d,g,v,m,y,x,b,_=i.getFromId(t,e.xaxis||"x"),w=i.getFromId(t,e.yaxis||"y"),k=n.traceIs(e,"contour"),T=n.traceIs(e,"histogram"),M=n.traceIs(e,"gl2d"),A=k?"best":e.zsmooth;if(_._minDtick=0,w._minDtick=0,T)r=(b=o(t,e)).x,p=b.x0,d=b.dx,g=b.y,v=b.y0,m=b.dy,y=b.z;else{var S=e.z;a.isArray1D(S)?(l(e,_,w,"x","y",["z"]),r=e._x,g=e._y,S=e._z):(r=e._x=e.x?_.makeCalcdata(e,"x"):[],g=e._y=e.y?w.makeCalcdata(e,"y"):[]),p=e.x0,d=e.dx,v=e.y0,m=e.dy,y=c(S,e,_,w),(k||e.connectgaps)&&(e._emptypoints=h(y),u(y,e._emptypoints))}function E(t){A=e._input.zsmooth=e.zsmooth=!1,a.warn('cannot use zsmooth: "fast": '+t)}if("fast"===A)if("log"===_.type||"log"===w.type)E("log axis found");else if(!T){if(r.length){var L=(r[r.length-1]-r[0])/(r.length-1),C=Math.abs(L/100);for(x=0;x<r.length-1;x++)if(Math.abs(r[x+1]-r[x]-L)>C){E("x scale is not linear");break}}if(g.length&&"fast"===A){var P=(g[g.length-1]-g[0])/(g.length-1),O=Math.abs(P/100);for(x=0;x<g.length-1;x++)if(Math.abs(g[x+1]-g[x]-P)>O){E("y scale is not linear");break}}}var z=a.maxRowLength(y),I="scaled"===e.xtype?"":r,D=f(e,I,p,d,z,_),R="scaled"===e.ytype?"":g,F=f(e,R,v,m,y.length,w);M||(e._extremes[_._id]=i.findExtremes(_,D),e._extremes[w._id]=i.findExtremes(w,F));var B={x:D,y:F,z:y,text:e._text||e.text,hovertext:e._hovertext||e.hovertext};if(I&&I.length===D.length-1&&(B.xCenter=I),R&&R.length===F.length-1&&(B.yCenter=R),T&&(B.xRanges=b.xRanges,B.yRanges=b.yRanges,B.pts=b.pts),k||s(t,e,{vals:y,cLetter:"z"}),k&&e.contours&&"heatmap"===e.contours.coloring){var N={type:"contour"===e.type?"heatmap":"histogram2d",xcalendar:e.xcalendar,ycalendar:e.ycalendar};B.xfill=f(N,I,p,d,z,_),B.yfill=f(N,R,v,m,y.length,w)}return[B]}},{"../../components/colorscale/calc":599,"../../lib":717,"../../plots/cartesian/axes":765,"../../registry":846,"../histogram2d/calc":1032,"./clean_2d_array":1002,"./convert_column_xyz":1004,"./find_empties":1006,"./interp2d":1009,"./make_bound_array":1010}],1002:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../constants/numerical").BADNUM;e.exports=function(t,e,r,o){var s,l,c,u,h,f;function p(t){if(n(t))return+t}if(e&&e.transpose){for(s=0,h=0;h<t.length;h++)s=Math.max(s,t[h].length);if(0===s)return!1;c=function(t){return t.length},u=function(t,e,r){return(t[r]||[])[e]}}else s=t.length,c=function(t,e){return t[e].length},u=function(t,e,r){return(t[e]||[])[r]};var d=function(t,e,r){return e===i||r===i?i:u(t,e,r)};function g(t){if(e&&"carpet"!==e.type&&"contourcarpet"!==e.type&&t&&"category"===t.type&&e["_"+t._id.charAt(0)].length){var r=t._id.charAt(0),n={},o=e["_"+r+"CategoryMap"]||e[r];for(h=0;h<o.length;h++)n[o[h]]=h;return function(e){var r=n[t._categories[e]];return r+1?r:i}}return a.identity}var v=g(r),m=g(o);o&&"category"===o.type&&(s=o._categories.length);var y=new Array(s);for(h=0;h<s;h++)for(l=r&&"category"===r.type?r._categories.length:c(t,h),y[h]=new Array(l),f=0;f<l;f++)y[h][f]=p(d(t,m(h),v(f)));return y}},{"../../constants/numerical":693,"../../lib":717,"fast-isnumeric":228}],1003:[function(t,e,r){"use strict";e.exports={min:"zmin",max:"zmax"}},{}],1004:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../constants/numerical").BADNUM;e.exports=function(t,e,r,i,o,s){var l,c,u,h,f=t._length,p=e.makeCalcdata(t,i),d=r.makeCalcdata(t,o),g=t.text,v=void 0!==g&&n.isArray1D(g),m=t.hovertext,y=void 0!==m&&n.isArray1D(m),x=n.distinctVals(p),b=x.vals,_=n.distinctVals(d),w=_.vals,k=[];for(l=0;l<s.length;l++)k[l]=n.init2dArray(w.length,b.length);v&&(u=n.init2dArray(w.length,b.length)),y&&(h=n.init2dArray(w.length,b.length));var T=n.init2dArray(w.length,b.length);for(l=0;l<f;l++)if(p[l]!==a&&d[l]!==a){var M=n.findBin(p[l]+x.minDiff/2,b),A=n.findBin(d[l]+_.minDiff/2,w);for(c=0;c<s.length;c++){var S=t[s[c]];k[c][A][M]=S[l],T[A][M]=l}v&&(u[A][M]=g[l]),y&&(h[A][M]=m[l])}for(t["_"+i]=b,t["_"+o]=w,c=0;c<s.length;c++)t["_"+s[c]]=k[c];v&&(t._text=u),y&&(t._hovertext=h),e&&"category"===e.type&&(t["_"+i+"CategoryMap"]=b.map(function(t){return e._categories[t]})),r&&"category"===r.type&&(t["_"+o+"CategoryMap"]=w.map(function(t){return r._categories[t]})),t._after2before=T}},{"../../constants/numerical":693,"../../lib":717}],1005:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./xyz_defaults"),i=t("./style_defaults"),o=t("../../components/colorscale/defaults"),s=t("./attributes");e.exports=function(t,e,r,l){function c(r,a){return n.coerce(t,e,s,r,a)}a(t,e,c,l)?(c("text"),c("hovertext"),c("hovertemplate"),i(t,e,c,l),c("hoverongaps"),c("connectgaps",n.isArray1D(e.z)&&!1!==e.zsmooth),o(t,e,l,c,{prefix:"",cLetter:"z"})):e.visible=!1}},{"../../components/colorscale/defaults":601,"../../lib":717,"./attributes":1e3,"./style_defaults":1013,"./xyz_defaults":1014}],1006:[function(t,e,r){"use strict";var n=t("../../lib").maxRowLength;e.exports=function(t){var e,r,a,i,o,s,l,c,u=[],h={},f=[],p=t[0],d=[],g=[0,0,0],v=n(t);for(r=0;r<t.length;r++)for(e=d,d=p,p=t[r+1]||[],a=0;a<v;a++)void 0===d[a]&&((s=(void 0!==d[a-1]?1:0)+(void 0!==d[a+1]?1:0)+(void 0!==e[a]?1:0)+(void 0!==p[a]?1:0))?(0===r&&s++,0===a&&s++,r===t.length-1&&s++,a===d.length-1&&s++,s<4&&(h[[r,a]]=[r,a,s]),u.push([r,a,s])):f.push([r,a]));for(;f.length;){for(l={},c=!1,o=f.length-1;o>=0;o--)(s=((h[[(r=(i=f[o])[0])-1,a=i[1]]]||g)[2]+(h[[r+1,a]]||g)[2]+(h[[r,a-1]]||g)[2]+(h[[r,a+1]]||g)[2])/20)&&(l[i]=[r,a,s],f.splice(o,1),c=!0);if(!c)throw"findEmpties iterated with no new neighbors";for(i in l)h[i]=l[i],u.push(l[i])}return u.sort(function(t,e){return e[2]-t[2]})}},{"../../lib":717}],1007:[function(t,e,r){"use strict";var n=t("../../components/fx"),a=t("../../lib"),i=t("../../plots/cartesian/axes"),o=t("../../components/colorscale").extractOpts;e.exports=function(t,e,r,s,l,c){var u,h,f,p,d=t.cd[0],g=d.trace,v=t.xa,m=t.ya,y=d.x,x=d.y,b=d.z,_=d.xCenter,w=d.yCenter,k=d.zmask,T=g.zhoverformat,M=y,A=x;if(!1!==t.index){try{f=Math.round(t.index[1]),p=Math.round(t.index[0])}catch(e){return void a.error("Error hovering on heatmap, pointNumber must be [row,col], found:",t.index)}if(f<0||f>=b[0].length||p<0||p>b.length)return}else{if(n.inbox(e-y[0],e-y[y.length-1],0)>0||n.inbox(r-x[0],r-x[x.length-1],0)>0)return;if(c){var S;for(M=[2*y[0]-y[1]],S=1;S<y.length;S++)M.push((y[S]+y[S-1])/2);for(M.push([2*y[y.length-1]-y[y.length-2]]),A=[2*x[0]-x[1]],S=1;S<x.length;S++)A.push((x[S]+x[S-1])/2);A.push([2*x[x.length-1]-x[x.length-2]])}f=Math.max(0,Math.min(M.length-2,a.findBin(e,M))),p=Math.max(0,Math.min(A.length-2,a.findBin(r,A)))}var E=v.c2p(y[f]),L=v.c2p(y[f+1]),C=m.c2p(x[p]),P=m.c2p(x[p+1]);c?(L=E,u=y[f],P=C,h=x[p]):(u=_?_[f]:(y[f]+y[f+1])/2,h=w?w[p]:(x[p]+x[p+1])/2,v&&"category"===v.type&&(u=y[f]),m&&"category"===m.type&&(h=x[p]),g.zsmooth&&(E=L=v.c2p(u),C=P=m.c2p(h)));var O=b[p][f];if(k&&!k[p][f]&&(O=void 0),void 0!==O||g.hoverongaps){var z;Array.isArray(d.hovertext)&&Array.isArray(d.hovertext[p])?z=d.hovertext[p][f]:Array.isArray(d.text)&&Array.isArray(d.text[p])&&(z=d.text[p][f]);var I=o(g),D={type:"linear",range:[I.min,I.max],hoverformat:T,_separators:v._separators,_numFormat:v._numFormat},R=i.tickText(D,O,"hover").text;return[a.extendFlat(t,{index:g._after2before?g._after2before[p][f]:[p,f],distance:t.maxHoverDistance,spikeDistance:t.maxSpikeDistance,x0:E,x1:L,y0:C,y1:P,xLabelVal:u,yLabelVal:h,zLabelVal:O,zLabel:R,text:z})]}}},{"../../components/colorscale":603,"../../components/fx":630,"../../lib":717,"../../plots/cartesian/axes":765}],1008:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc"),plot:t("./plot"),colorbar:t("./colorbar"),style:t("./style"),hoverPoints:t("./hover"),moduleType:"trace",name:"heatmap",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","2dMap","showLegend"],meta:{}}},{"../../plots/cartesian":776,"./attributes":1e3,"./calc":1001,"./colorbar":1003,"./defaults":1005,"./hover":1007,"./plot":1011,"./style":1012}],1009:[function(t,e,r){"use strict";var n=t("../../lib"),a=[[-1,0],[1,0],[0,-1],[0,1]];function i(t){return.5-.25*Math.min(1,.5*t)}function o(t,e,r){var n,i,o,s,l,c,u,h,f,p,d,g,v,m=0;for(s=0;s<e.length;s++){for(i=(n=e[s])[0],o=n[1],d=t[i][o],p=0,f=0,l=0;l<4;l++)(u=t[i+(c=a[l])[0]])&&void 0!==(h=u[o+c[1]])&&(0===p?g=v=h:(g=Math.min(g,h),v=Math.max(v,h)),f++,p+=h);if(0===f)throw"iterateInterp2d order is wrong: no defined neighbors";t[i][o]=p/f,void 0===d?f<4&&(m=1):(t[i][o]=(1+r)*t[i][o]-r*d,v>g&&(m=Math.max(m,Math.abs(t[i][o]-d)/(v-g))))}return m}e.exports=function(t,e){var r,a=1;for(o(t,e),r=0;r<e.length&&!(e[r][2]<4);r++);for(e=e.slice(r),r=0;r<100&&a>.01;r++)a=o(t,e,i(a));return a>.01&&n.log("interp2d didn't converge quickly",a),t}},{"../../lib":717}],1010:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib").isArrayOrTypedArray;e.exports=function(t,e,r,i,o,s){var l,c,u,h=[],f=n.traceIs(t,"contour"),p=n.traceIs(t,"histogram"),d=n.traceIs(t,"gl2d");if(a(e)&&e.length>1&&!p&&"category"!==s.type){var g=e.length;if(!(g<=o))return f?e.slice(0,o):e.slice(0,o+1);if(f||d)h=e.slice(0,o);else if(1===o)h=[e[0]-.5,e[0]+.5];else{for(h=[1.5*e[0]-.5*e[1]],u=1;u<g;u++)h.push(.5*(e[u-1]+e[u]));h.push(1.5*e[g-1]-.5*e[g-2])}if(g<o){var v=h[h.length-1],m=v-h[h.length-2];for(u=g;u<o;u++)v+=m,h.push(v)}}else{var y=t[s._id.charAt(0)+"calendar"];if(p)l=s.r2c(r,0,y);else if(a(e)&&1===e.length)l=e[0];else if(void 0===r)l=0;else{l=("log"===s.type?s.d2c:s.r2c)(r,0,y)}for(c=i||1,u=f||d?0:-.5;u<o;u++)h.push(l+c*u)}return h}},{"../../lib":717,"../../registry":846}],1011:[function(t,e,r){"use strict";var n=t("d3"),a=t("tinycolor2"),i=t("../../registry"),o=t("../../lib"),s=t("../../components/colorscale").makeColorScaleFuncFromTrace,l=t("../../constants/xmlns_namespaces");function c(t,e){var r=e.length-2,n=o.constrain(o.findBin(t,e),0,r),a=e[n],i=e[n+1],s=o.constrain(n+(t-a)/(i-a)-.5,0,r),l=Math.round(s),c=Math.abs(s-l);return s&&s!==r&&c?{bin0:l,frac:c,bin1:Math.round(l+c/(s-l))}:{bin0:l,bin1:l,frac:0}}function u(t,e){var r=e.length-1,n=o.constrain(o.findBin(t,e),0,r),a=e[n],i=(t-a)/(e[n+1]-a)||0;return i<=0?{bin0:n,bin1:n,frac:0}:i<.5?{bin0:n,bin1:n+1,frac:i}:{bin0:n+1,bin1:n,frac:1-i}}function h(t,e,r){t[e]=r[0],t[e+1]=r[1],t[e+2]=r[2],t[e+3]=Math.round(255*r[3])}e.exports=function(t,e,r,f){var p=e.xaxis,d=e.yaxis;o.makeTraceGroups(f,r,"hm").each(function(e){var r,f,g,v,m,y,x=n.select(this),b=e[0],_=b.trace,w=b.z,k=b.x,T=b.y,M=b.xCenter,A=b.yCenter,S=i.traceIs(_,"contour"),E=S?"best":_.zsmooth,L=w.length,C=o.maxRowLength(w),P=!1,O=!1;for(y=0;void 0===r&&y<k.length-1;)r=p.c2p(k[y]),y++;for(y=k.length-1;void 0===f&&y>0;)f=p.c2p(k[y]),y--;for(f<r&&(g=f,f=r,r=g,P=!0),y=0;void 0===v&&y<T.length-1;)v=d.c2p(T[y]),y++;for(y=T.length-1;void 0===m&&y>0;)m=d.c2p(T[y]),y--;if(m<v&&(g=v,v=m,m=g,O=!0),S&&(M=k,A=T,k=b.xfill,T=b.yfill),"fast"!==E){var z="best"===E?0:.5;r=Math.max(-z*p._length,r),f=Math.min((1+z)*p._length,f),v=Math.max(-z*d._length,v),m=Math.min((1+z)*d._length,m)}var I=Math.round(f-r),D=Math.round(m-v);if(I<=0||D<=0){x.selectAll("image").data([]).exit().remove()}else{var R,F;"fast"===E?(R=C,F=L):(R=I,F=D);var B=document.createElement("canvas");B.width=R,B.height=F;var N,j,V=B.getContext("2d"),U=s(_,{noNumericCheck:!0,returnArray:!0});"fast"===E?(N=P?function(t){return C-1-t}:o.identity,j=O?function(t){return L-1-t}:o.identity):(N=function(t){return o.constrain(Math.round(p.c2p(k[t])-r),0,I)},j=function(t){return o.constrain(Math.round(d.c2p(T[t])-v),0,D)});var q,H,G,Y,W,X=j(0),Z=[X,X],J=P?0:1,K=O?0:1,Q=0,$=0,tt=0,et=0;if(E){var rt,nt=0;try{rt=new Uint8Array(I*D*4)}catch(t){rt=new Array(I*D*4)}if("best"===E){var at,it,ot,st=M||k,lt=A||T,ct=new Array(st.length),ut=new Array(lt.length),ht=new Array(I),ft=M?u:c,pt=A?u:c;for(y=0;y<st.length;y++)ct[y]=Math.round(p.c2p(st[y])-r);for(y=0;y<lt.length;y++)ut[y]=Math.round(d.c2p(lt[y])-v);for(y=0;y<I;y++)ht[y]=ft(y,ct);for(H=0;H<D;H++)for(it=w[(at=pt(H,ut)).bin0],ot=w[at.bin1],y=0;y<I;y++,nt+=4)h(rt,nt,W=Tt(it,ot,ht[y],at))}else for(H=0;H<L;H++)for(Y=w[H],Z=j(H),y=0;y<I;y++)W=kt(Y[y],1),h(rt,nt=4*(Z*I+N(y)),W);var dt=V.createImageData(I,D);try{dt.data.set(rt)}catch(t){var gt=dt.data,vt=gt.length;for(H=0;H<vt;H++)gt[H]=rt[H]}V.putImageData(dt,0,0)}else{var mt=_.xgap,yt=_.ygap,xt=Math.floor(mt/2),bt=Math.floor(yt/2);for(H=0;H<L;H++)if(Y=w[H],Z.reverse(),Z[K]=j(H+1),Z[0]!==Z[1]&&void 0!==Z[0]&&void 0!==Z[1])for(q=[G=N(0),G],y=0;y<C;y++)q.reverse(),q[J]=N(y+1),q[0]!==q[1]&&void 0!==q[0]&&void 0!==q[1]&&(W=kt(Y[y],(q[1]-q[0])*(Z[1]-Z[0])),V.fillStyle="rgba("+W.join(",")+")",V.fillRect(q[0]+xt,Z[0]+bt,q[1]-q[0]-mt,Z[1]-Z[0]-yt))}$=Math.round($/Q),tt=Math.round(tt/Q),et=Math.round(et/Q);var _t=a("rgb("+$+","+tt+","+et+")");t._hmpixcount=(t._hmpixcount||0)+Q,t._hmlumcount=(t._hmlumcount||0)+Q*_t.getLuminance();var wt=x.selectAll("image").data(e);wt.enter().append("svg:image").attr({xmlns:l.svg,preserveAspectRatio:"none"}),wt.attr({height:D,width:I,x:r,y:v,"xlink:href":B.toDataURL("image/png")})}function kt(t,e){if(void 0!==t){var r=U(t);return r[0]=Math.round(r[0]),r[1]=Math.round(r[1]),r[2]=Math.round(r[2]),Q+=e,$+=r[0]*e,tt+=r[1]*e,et+=r[2]*e,r}return[0,0,0,0]}function Tt(t,e,r,n){var a=t[r.bin0];if(void 0===a)return kt(void 0,1);var i,o=t[r.bin1],s=e[r.bin0],l=e[r.bin1],c=o-a||0,u=s-a||0;return i=void 0===o?void 0===l?0:void 0===s?2*(l-a):2*(2*l-s-a)/3:void 0===l?void 0===s?0:2*(2*a-o-s)/3:void 0===s?2*(2*l-o-a)/3:l+a-o-s,kt(a+r.frac*c+n.frac*(u+r.frac*i))}})}},{"../../components/colorscale":603,"../../constants/xmlns_namespaces":694,"../../lib":717,"../../registry":846,d3:165,tinycolor2:535}],1012:[function(t,e,r){"use strict";var n=t("d3");e.exports=function(t){n.select(t).selectAll(".hm image").style("opacity",function(t){return t.trace.opacity})}},{d3:165}],1013:[function(t,e,r){"use strict";e.exports=function(t,e,r){!1===r("zsmooth")&&(r("xgap"),r("ygap")),r("zhoverformat")}},{}],1014:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../registry");function o(t,e){var r=e(t);return"scaled"===(r?e(t+"type","array"):"scaled")&&(e(t+"0"),e("d"+t)),r}e.exports=function(t,e,r,s,l,c){var u,h,f=r("z");if(l=l||"x",c=c||"y",void 0===f||!f.length)return 0;if(a.isArray1D(t.z)){u=r(l),h=r(c);var p=a.minRowLength(u),d=a.minRowLength(h);if(0===p||0===d)return 0;e._length=Math.min(p,d,f.length)}else{if(u=o(l,r),h=o(c,r),!function(t){for(var e,r=!0,i=!1,o=!1,s=0;s<t.length;s++){if(e=t[s],!a.isArrayOrTypedArray(e)){r=!1;break}e.length>0&&(i=!0);for(var l=0;l<e.length;l++)if(n(e[l])){o=!0;break}}return r&&i&&o}(f))return 0;r("transpose"),e._length=null}return i.getComponentMethod("calendars","handleTraceDefaults")(t,e,[l,c],s),!0}},{"../../lib":717,"../../registry":846,"fast-isnumeric":228}],1015:[function(t,e,r){"use strict";for(var n=t("../heatmap/attributes"),a=t("../../components/colorscale/attributes"),i=t("../../lib/extend").extendFlat,o=t("../../plot_api/edit_types").overrideAll,s=["z","x","x0","dx","y","y0","dy","text","transpose","xtype","ytype"],l={},c=0;c<s.length;c++){var u=s[c];l[u]=n[u]}i(l,a("",{cLetter:"z",autoColorDflt:!1})),e.exports=o(l,"calc","nested")},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plot_api/edit_types":748,"../heatmap/attributes":1e3}],1016:[function(t,e,r){"use strict";var n=t("gl-heatmap2d"),a=t("../../plots/cartesian/axes"),i=t("../../lib/str2rgbarray");function o(t,e){this.scene=t,this.uid=e,this.type="heatmapgl",this.name="",this.hoverinfo="all",this.xData=[],this.yData=[],this.zData=[],this.textLabels=[],this.idToIndex=[],this.bounds=[0,0,0,0],this.options={z:[],x:[],y:[],shape:[0,0],colorLevels:[0],colorValues:[0,0,0,1]},this.heatmap=n(t.glplot,this.options),this.heatmap._trace=this}var s=o.prototype;s.handlePick=function(t){var e=this.options,r=e.shape,n=t.pointId,a=n%r[0],i=Math.floor(n/r[0]),o=n;return{trace:this,dataCoord:t.dataCoord,traceCoord:[e.x[a],e.y[i],e.z[o]],textLabel:this.textLabels[n],name:this.name,pointIndex:[i,a],hoverinfo:this.hoverinfo}},s.update=function(t,e){var r=e[0];this.index=t.index,this.name=t.name,this.hoverinfo=t.hoverinfo;var n=r.z;this.options.z=[].concat.apply([],n);var o=n[0].length,s=n.length;this.options.shape=[o,s],this.options.x=r.x,this.options.y=r.y;var l=function(t){for(var e=t.colorscale,r=t.zmin,n=t.zmax,a=e.length,o=new Array(a),s=new Array(4*a),l=0;l<a;l++){var c=e[l],u=i(c[1]);o[l]=r+c[0]*(n-r);for(var h=0;h<4;h++)s[4*l+h]=u[h]}return{colorLevels:o,colorValues:s}}(t);this.options.colorLevels=l.colorLevels,this.options.colorValues=l.colorValues,this.textLabels=[].concat.apply([],t.text),this.heatmap.update(this.options);var c=this.scene.xaxis,u=this.scene.yaxis;t._extremes[c._id]=a.findExtremes(c,r.x),t._extremes[u._id]=a.findExtremes(u,r.y)},s.dispose=function(){this.heatmap.dispose()},e.exports=function(t,e,r){var n=new o(t,e.uid);return n.update(e,r),n}},{"../../lib/str2rgbarray":740,"../../plots/cartesian/axes":765,"gl-heatmap2d":254}],1017:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("../heatmap/defaults"),colorbar:t("../heatmap/colorbar"),calc:t("../heatmap/calc"),plot:t("./convert"),moduleType:"trace",name:"heatmapgl",basePlotModule:t("../../plots/gl2d"),categories:["gl","gl2d","2dMap"],meta:{}}},{"../../plots/gl2d":803,"../heatmap/calc":1001,"../heatmap/colorbar":1003,"../heatmap/defaults":1005,"./attributes":1015,"./convert":1016}],1018:[function(t,e,r){"use strict";var n=t("../bar/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("./bin_attributes"),o=t("./constants"),s=t("../../lib/extend").extendFlat;e.exports={x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},text:s({},n.text,{}),hovertext:s({},n.hovertext,{}),orientation:n.orientation,histfunc:{valType:"enumerated",values:["count","sum","avg","min","max"],dflt:"count",editType:"calc"},histnorm:{valType:"enumerated",values:["","percent","probability","density","probability density"],dflt:"",editType:"calc"},cumulative:{enabled:{valType:"boolean",dflt:!1,editType:"calc"},direction:{valType:"enumerated",values:["increasing","decreasing"],dflt:"increasing",editType:"calc"},currentbin:{valType:"enumerated",values:["include","exclude","half"],dflt:"include",editType:"calc"},editType:"calc"},nbinsx:{valType:"integer",min:0,dflt:0,editType:"calc"},xbins:i("x",!0),nbinsy:{valType:"integer",min:0,dflt:0,editType:"calc"},ybins:i("y",!0),autobinx:{valType:"boolean",dflt:null,editType:"calc"},autobiny:{valType:"boolean",dflt:null,editType:"calc"},bingroup:{valType:"string",dflt:"",editType:"calc"},hovertemplate:a({},{keys:o.eventDataKeys}),marker:n.marker,offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:n.selected,unselected:n.unselected,_deprecated:{bardir:n._deprecated.bardir}}},{"../../lib/extend":708,"../../plots/template_attributes":841,"../bar/attributes":856,"./bin_attributes":1020,"./constants":1024}],1019:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r=t.length,n=0,a=0;a<r;a++)e[a]?(t[a]/=e[a],n+=t[a]):t[a]=null;return n}},{}],1020:[function(t,e,r){"use strict";e.exports=function(t,e){return{start:{valType:"any",editType:"calc"},end:{valType:"any",editType:"calc"},size:{valType:"any",editType:"calc"},editType:"calc"}}},{}],1021:[function(t,e,r){"use strict";var n=t("fast-isnumeric");e.exports={count:function(t,e,r){return r[t]++,1},sum:function(t,e,r,a){var i=a[e];return n(i)?(i=Number(i),r[t]+=i,i):0},avg:function(t,e,r,a,i){var o=a[e];return n(o)&&(o=Number(o),r[t]+=o,i[t]++),0},min:function(t,e,r,a){var i=a[e];if(n(i)){if(i=Number(i),!n(r[t]))return r[t]=i,i;if(r[t]>i){var o=i-r[t];return r[t]=i,o}}return 0},max:function(t,e,r,a){var i=a[e];if(n(i)){if(i=Number(i),!n(r[t]))return r[t]=i,i;if(r[t]<i){var o=i-r[t];return r[t]=i,o}}return 0}}},{"fast-isnumeric":228}],1022:[function(t,e,r){"use strict";var n=t("../../constants/numerical"),a=n.ONEAVGYEAR,i=n.ONEAVGMONTH,o=n.ONEDAY,s=n.ONEHOUR,l=n.ONEMIN,c=n.ONESEC,u=t("../../plots/cartesian/axes").tickIncrement;function h(t,e,r,n){if(t*e<=0)return 1/0;for(var a=Math.abs(e-t),i="date"===r.type,o=f(a,i),s=0;s<10;s++){var l=f(80*o,i);if(o===l)break;if(!p(l,t,e,i,r,n))break;o=l}return o}function f(t,e){return e&&t>c?t>o?t>1.1*a?a:t>1.1*i?i:o:t>s?s:t>l?l:c:Math.pow(10,Math.floor(Math.log(t)/Math.LN10))}function p(t,e,r,n,i,s){if(n&&t>o){var l=d(e,i,s),c=d(r,i,s),u=t===a?0:1;return l[u]!==c[u]}return Math.floor(r/t)-Math.floor(e/t)>.1}function d(t,e,r){var n=e.c2d(t,a,r).split("-");return""===n[0]&&(n.unshift(),n[0]="-"+n[0]),n}e.exports=function(t,e,r,n,i){var s,l,c=-1.1*e,f=-.1*e,p=t-f,d=r[0],g=r[1],v=Math.min(h(d+f,d+p,n,i),h(g+f,g+p,n,i)),m=Math.min(h(d+c,d+f,n,i),h(g+c,g+f,n,i));if(v>m&&m<Math.abs(g-d)/4e3?(s=v,l=!1):(s=Math.min(v,m),l=!0),"date"===n.type&&s>o){var y=s===a?1:6,x=s===a?"M12":"M1";return function(e,r){var o=n.c2d(e,a,i),s=o.indexOf("-",y);s>0&&(o=o.substr(0,s));var c=n.d2c(o,0,i);if(c<e){var h=u(c,x,!1,i);(c+h)/2<e+t&&(c=h)}return r&&l?u(c,x,!0,i):c}}return function(e,r){var n=s*Math.round(e/s);return n+s/10<e&&n+.9*s<e+t&&(n+=s),r&&l&&(n-=s),n}}},{"../../constants/numerical":693,"../../plots/cartesian/axes":765}],1023:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../registry"),o=t("../../plots/cartesian/axes"),s=t("../bar/arrays_to_calcdata"),l=t("./bin_functions"),c=t("./norm_functions"),u=t("./average"),h=t("./bin_label_vals");function f(t,e,r,s,l){var c,u,h,p,d,g,v,m=s+"bins",y=t._fullLayout,x=e["_"+s+"bingroup"],b=y._histogramBinOpts[x],_="overlay"===y.barmode,w=function(t){return r.r2c(t,0,p)},k=function(t){return r.c2r(t,0,p)},T="date"===r.type?function(t){return t||0===t?a.cleanDate(t,null,p):null}:function(t){return n(t)?Number(t):null};function M(t,e,r){e[t+"Found"]?(e[t]=T(e[t]),null===e[t]&&(e[t]=r[t])):(g[t]=e[t]=r[t],a.nestedProperty(u[0],m+"."+t).set(r[t]))}if(e["_"+s+"autoBinFinished"])delete e["_"+s+"autoBinFinished"];else{u=b.traces;var A=[],S=!0,E=!1,L=!1;for(c=0;c<u.length;c++)if((h=u[c]).visible){var C=b.dirs[c];d=h["_"+C+"pos0"]=r.makeCalcdata(h,C),A=a.concat(A,d),delete h["_"+s+"autoBinFinished"],!0===e.visible&&(S?S=!1:(delete h._autoBin,h["_"+s+"autoBinFinished"]=1),i.traceIs(h,"2dMap")&&(E=!0),"histogram2dcontour"===h.type&&(L=!0))}p=u[0][s+"calendar"];var P=o.autoBin(A,r,b.nbins,E,p,b.sizeFound&&b.size),O=u[0]._autoBin={};if(g=O[b.dirs[0]]={},L&&(b.size||(P.start=k(o.tickIncrement(w(P.start),P.size,!0,p))),void 0===b.end&&(P.end=k(o.tickIncrement(w(P.end),P.size,!1,p)))),_&&!i.traceIs(e,"2dMap")&&0===P._dataSpan&&"category"!==r.type&&"multicategory"!==r.type){if(l)return[P,d,!0];P=function(t,e,r,n,i){var o,s,l,c=t._fullLayout,u=function(t,e){for(var r=e.xaxis,n=e.yaxis,a=e.orientation,i=[],o=t._fullData,s=0;s<o.length;s++){var l=o[s];"histogram"===l.type&&!0===l.visible&&l.orientation===a&&l.xaxis===r&&l.yaxis===n&&i.push(l)}return i}(t,e),h=!1,p=1/0,d=[e];for(o=0;o<u.length;o++)if((s=u[o])===e)h=!0;else if(h){var g=f(t,s,r,n,!0),v=g[0],m=g[2];s["_"+n+"autoBinFinished"]=1,s["_"+n+"pos0"]=g[1],m?d.push(s):p=Math.min(p,v.size)}else l=c._histogramBinOpts[s["_"+n+"bingroup"]],p=Math.min(p,l.size||s[i].size);var y=new Array(d.length);for(o=0;o<d.length;o++)for(var x=d[o]["_"+n+"pos0"],b=0;b<x.length;b++)if(void 0!==x[b]){y[o]=x[b];break}isFinite(p)||(p=a.distinctVals(y).minDiff);for(o=0;o<d.length;o++){var _=(s=d[o])[n+"calendar"],w={start:r.c2r(y[o]-p/2,0,_),end:r.c2r(y[o]+p/2,0,_),size:p};s._input[i]=s[i]=w,(l=c._histogramBinOpts[s["_"+n+"bingroup"]])&&a.extendFlat(l,w)}return e[i]}(t,e,r,s,m)}(v=h.cumulative||{}).enabled&&"include"!==v.currentbin&&("decreasing"===v.direction?P.start=k(o.tickIncrement(w(P.start),P.size,!0,p)):P.end=k(o.tickIncrement(w(P.end),P.size,!1,p))),b.size=P.size,b.sizeFound||(g.size=P.size,a.nestedProperty(u[0],m+".size").set(P.size)),M("start",b,P),M("end",b,P)}d=e["_"+s+"pos0"],delete e["_"+s+"pos0"];var z=e._input[m]||{},I=a.extendFlat({},b),D=b.start,R=r.r2l(z.start),F=void 0!==R;if((b.startFound||F)&&R!==r.r2l(D)){var B=F?R:a.aggNums(Math.min,null,d),N={type:"category"===r.type||"multicategory"===r.type?"linear":r.type,r2l:r.r2l,dtick:b.size,tick0:D,calendar:p,range:[B,o.tickIncrement(B,b.size,!1,p)].map(r.l2r)},j=o.tickFirst(N);j>r.r2l(B)&&(j=o.tickIncrement(j,b.size,!0,p)),I.start=r.l2r(j),F||a.nestedProperty(e,m+".start").set(I.start)}var V=b.end,U=r.r2l(z.end),q=void 0!==U;if((b.endFound||q)&&U!==r.r2l(V)){var H=q?U:a.aggNums(Math.max,null,d);I.end=r.l2r(H),q||a.nestedProperty(e,m+".start").set(I.end)}var G="autobin"+s;return!1===e._input[G]&&(e._input[m]=a.extendFlat({},e[m]||{}),delete e._input[G],delete e[G]),[I,d]}e.exports={calc:function(t,e){var r,i,p,d,g=[],v=[],m=o.getFromId(t,"h"===e.orientation?e.yaxis:e.xaxis),y="h"===e.orientation?"y":"x",x={x:"y",y:"x"}[y],b=e[y+"calendar"],_=e.cumulative,w=f(t,e,m,y),k=w[0],T=w[1],M="string"==typeof k.size,A=[],S=M?A:k,E=[],L=[],C=[],P=0,O=e.histnorm,z=e.histfunc,I=-1!==O.indexOf("density");_.enabled&&I&&(O=O.replace(/ ?density$/,""),I=!1);var D,R="max"===z||"min"===z?null:0,F=l.count,B=c[O],N=!1,j=function(t){return m.r2c(t,0,b)};for(a.isArrayOrTypedArray(e[x])&&"count"!==z&&(D=e[x],N="avg"===z,F=l[z]),r=j(k.start),p=j(k.end)+(r-o.tickIncrement(r,k.size,!1,b))/1e6;r<p&&g.length<1e6&&(i=o.tickIncrement(r,k.size,!1,b),g.push((r+i)/2),v.push(R),C.push([]),A.push(r),I&&E.push(1/(i-r)),N&&L.push(0),!(i<=r));)r=i;A.push(r),M||"date"!==m.type||(S={start:j(S.start),end:j(S.end),size:S.size}),t._fullLayout._roundFnOpts||(t._fullLayout._roundFnOpts={});var V=e["_"+y+"bingroup"],U={leftGap:1/0,rightGap:1/0};V&&(t._fullLayout._roundFnOpts[V]||(t._fullLayout._roundFnOpts[V]=U),U=t._fullLayout._roundFnOpts[V]);var q,H=v.length,G=!0,Y=U.leftGap,W=U.rightGap,X={};for(r=0;r<T.length;r++){var Z=T[r];(d=a.findBin(Z,S))>=0&&d<H&&(P+=F(d,r,v,D,L),G&&C[d].length&&Z!==T[C[d][0]]&&(G=!1),C[d].push(r),X[r]=d,Y=Math.min(Y,Z-A[d]),W=Math.min(W,A[d+1]-Z))}U.leftGap=Y,U.rightGap=W,G||(q=function(e,r){return function(){var n=t._fullLayout._roundFnOpts[V];return h(n.leftGap,n.rightGap,A,m,b)(e,r)}}),N&&(P=u(v,L)),B&&B(v,P,E),_.enabled&&function(t,e,r){var n,a,i;function o(e){i=t[e],t[e]/=2}function s(e){a=t[e],t[e]=i+a/2,i+=a}if("half"===r)if("increasing"===e)for(o(0),n=1;n<t.length;n++)s(n);else for(o(t.length-1),n=t.length-2;n>=0;n--)s(n);else if("increasing"===e){for(n=1;n<t.length;n++)t[n]+=t[n-1];"exclude"===r&&(t.unshift(0),t.pop())}else{for(n=t.length-2;n>=0;n--)t[n]+=t[n+1];"exclude"===r&&(t.push(0),t.shift())}}(v,_.direction,_.currentbin);var J=Math.min(g.length,v.length),K=[],Q=0,$=J-1;for(r=0;r<J;r++)if(v[r]){Q=r;break}for(r=J-1;r>=Q;r--)if(v[r]){$=r;break}for(r=Q;r<=$;r++)if(n(g[r])&&n(v[r])){var tt={p:g[r],s:v[r],b:0};_.enabled||(tt.pts=C[r],G?tt.ph0=tt.ph1=C[r].length?T[C[r][0]]:g[r]:(e._computePh=!0,tt.ph0=q(A[r]),tt.ph1=q(A[r+1],!0))),K.push(tt)}return 1===K.length&&(K[0].width1=o.tickIncrement(K[0].p,k.size,!1,b)-K[0].p),s(K,e),a.isArrayOrTypedArray(e.selectedpoints)&&a.tagSelected(K,e,X),K},calcAllAutoBins:f}},{"../../lib":717,"../../plots/cartesian/axes":765,"../../registry":846,"../bar/arrays_to_calcdata":855,"./average":1019,"./bin_functions":1021,"./bin_label_vals":1022,"./norm_functions":1030,"fast-isnumeric":228}],1024:[function(t,e,r){"use strict";e.exports={eventDataKeys:["binNumber"]}},{}],1025:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axis_ids"),i=t("../../registry").traceIs,o=t("../bar/defaults").handleGroupingDefaults,s=n.nestedProperty,l=a.getAxisGroup,c=[{aStr:{x:"xbins.start",y:"ybins.start"},name:"start"},{aStr:{x:"xbins.end",y:"ybins.end"},name:"end"},{aStr:{x:"xbins.size",y:"ybins.size"},name:"size"},{aStr:{x:"nbinsx",y:"nbinsy"},name:"nbins"}],u=["x","y"];e.exports=function(t,e){var r,h,f,p,d,g,v,m=e._histogramBinOpts={},y=[],x={},b=[];function _(t,e){return n.coerce(r._input,r,r._module.attributes,t,e)}function w(t){return"v"===t.orientation?"x":"y"}function k(t,r,i){var o=t.uid+"__"+i;r||(r=o);var s=function(t,r){return a.getFromTrace({_fullLayout:e},t,r).type}(t,i),l=t[i+"calendar"]||"",c=m[r],u=!0;c&&(s===c.axType&&l===c.calendar?(u=!1,c.traces.push(t),c.dirs.push(i)):(r=o,s!==c.axType&&n.warn(["Attempted to group the bins of trace",t.index,"set on a","type:"+s,"axis","with bins on","type:"+c.axType,"axis."].join(" ")),l!==c.calendar&&n.warn(["Attempted to group the bins of trace",t.index,"set with a",l,"calendar","with bins",c.calendar?"on a "+c.calendar+" calendar":"w/o a set calendar"].join(" ")))),u&&(m[r]={traces:[t],dirs:[i],axType:s,calendar:t[i+"calendar"]||""}),t["_"+i+"bingroup"]=r}for(d=0;d<t.length;d++)r=t[d],i(r,"histogram")&&(y.push(r),delete r._xautoBinFinished,delete r._yautoBinFinished,i(r,"2dMap")||o(r._input,r,e,_));var T=e._alignmentOpts||{};for(d=0;d<y.length;d++){if(r=y[d],f="",!i(r,"2dMap")){if(p=w(r),"group"===e.barmode&&r.alignmentgroup){var M=r[p+"axis"],A=l(e,M)+r.orientation;(T[A]||{})[r.alignmentgroup]&&(f=A)}f||"overlay"===e.barmode||(f=l(e,r.xaxis)+l(e,r.yaxis)+w(r))}f?(x[f]||(x[f]=[]),x[f].push(r)):b.push(r)}for(f in x)if(1!==(h=x[f]).length){var S=!1;for(d=0;d<h.length;d++){r=h[d],S=_("bingroup");break}for(f=S||f,d=0;d<h.length;d++){var E=(r=h[d])._input.bingroup;E&&E!==f&&n.warn(["Trace",r.index,"must match","within bingroup",f+".","Ignoring its bingroup:",E,"setting."].join(" ")),r.bingroup=f,k(r,f,w(r))}}else b.push(h[0]);for(d=0;d<b.length;d++){r=b[d];var L=_("bingroup");if(i(r,"2dMap"))for(v=0;v<2;v++){var C=_((p=u[v])+"bingroup",L?L+"__"+p:null);k(r,C,p)}else k(r,L,w(r))}for(f in m){var P=m[f];for(h=P.traces,g=0;g<c.length;g++){var O,z,I=c[g],D=I.name;if("nbins"!==D||!P.sizeFound){for(d=0;d<h.length;d++){if(r=h[d],p=P.dirs[d],O=I.aStr[p],void 0!==s(r._input,O).get()){P[D]=_(O),P[D+"Found"]=!0;break}(z=(r._autoBin||{})[p]||{})[D]&&s(r,O).set(z[D])}if("start"===D||"end"===D)for(;d<h.length;d++)(r=h[d])["_"+p+"bingroup"]&&_(O,(z=(r._autoBin||{})[p]||{})[D]);"nbins"!==D||P.sizeFound||P.nbinsFound||(r=h[0],P[D]=_(O))}}}}},{"../../lib":717,"../../plots/cartesian/axis_ids":768,"../../registry":846,"../bar/defaults":860}],1026:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("../../components/color"),o=t("../bar/style_defaults"),s=t("./attributes");e.exports=function(t,e,r,l){function c(r,n){return a.coerce(t,e,s,r,n)}var u=c("x"),h=c("y");c("cumulative.enabled")&&(c("cumulative.direction"),c("cumulative.currentbin")),c("text"),c("hovertext"),c("hovertemplate");var f=c("orientation",h&&!u?"h":"v"),p="v"===f?"x":"y",d="v"===f?"y":"x",g=u&&h?Math.min(a.minRowLength(u)&&a.minRowLength(h)):a.minRowLength(e[p]||[]);if(g){e._length=g,n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y"],l),e[d]&&c("histfunc"),c("histnorm"),c("autobin"+p),o(t,e,c,r,l),a.coerceSelectionMarkerOpacity(e,c);var v=(e.marker.line||{}).color,m=n.getComponentMethod("errorbars","supplyDefaults");m(t,e,v||i.defaultLine,{axis:"y"}),m(t,e,v||i.defaultLine,{axis:"x",inherit:"y"})}else e.visible=!1}},{"../../components/color":591,"../../lib":717,"../../registry":846,"../bar/style_defaults":871,"./attributes":1018}],1027:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a){if(t.x="xVal"in e?e.xVal:e.x,t.y="yVal"in e?e.yVal:e.y,"zLabelVal"in e&&(t.z=e.zLabelVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),!(r.cumulative||{}).enabled){var i,o=Array.isArray(a)?n[0].pts[a[0]][a[1]]:n[a].pts;if(t.pointNumbers=o,t.binNumber=t.pointNumber,delete t.pointNumber,delete t.pointIndex,r._indexToPoints){i=[];for(var s=0;s<o.length;s++)i=i.concat(r._indexToPoints[o[s]])}else i=o;t.pointIndices=i}return t}},{}],1028:[function(t,e,r){"use strict";var n=t("../bar/hover").hoverPoints,a=t("../../plots/cartesian/axes").hoverLabelText;e.exports=function(t,e,r,i){var o=n(t,e,r,i);if(o){var s=(t=o[0]).cd[t.index],l=t.cd[0].trace;if(!l.cumulative.enabled){var c="h"===l.orientation?"y":"x";t[c+"Label"]=a(t[c+"a"],s.ph0,s.ph1)}return o}}},{"../../plots/cartesian/axes":765,"../bar/hover":863}],1029:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),layoutAttributes:t("../bar/layout_attributes"),supplyDefaults:t("./defaults"),crossTraceDefaults:t("./cross_trace_defaults"),supplyLayoutDefaults:t("../bar/layout_defaults"),calc:t("./calc").calc,crossTraceCalc:t("../bar/cross_trace_calc").crossTraceCalc,plot:t("../bar/plot").plot,layerName:"barlayer",style:t("../bar/style").style,styleOnSelect:t("../bar/style").styleOnSelect,colorbar:t("../scatter/marker_colorbar"),hoverPoints:t("./hover"),selectPoints:t("../bar/select"),eventData:t("./event_data"),moduleType:"trace",name:"histogram",basePlotModule:t("../../plots/cartesian"),categories:["bar-like","cartesian","svg","bar","histogram","oriented","errorBarsOK","showLegend"],meta:{}}},{"../../plots/cartesian":776,"../bar/cross_trace_calc":859,"../bar/layout_attributes":865,"../bar/layout_defaults":866,"../bar/plot":867,"../bar/select":868,"../bar/style":870,"../scatter/marker_colorbar":1138,"./attributes":1018,"./calc":1023,"./cross_trace_defaults":1025,"./defaults":1026,"./event_data":1027,"./hover":1028}],1030:[function(t,e,r){"use strict";e.exports={percent:function(t,e){for(var r=t.length,n=100/e,a=0;a<r;a++)t[a]*=n},probability:function(t,e){for(var r=t.length,n=0;n<r;n++)t[n]/=e},density:function(t,e,r,n){var a=t.length;n=n||1;for(var i=0;i<a;i++)t[i]*=r[i]*n},"probability density":function(t,e,r,n){var a=t.length;n&&(e/=n);for(var i=0;i<a;i++)t[i]*=r[i]/e}}},{}],1031:[function(t,e,r){"use strict";var n=t("../histogram/attributes"),a=t("../histogram/bin_attributes"),i=t("../heatmap/attributes"),o=t("../../plots/attributes"),s=t("../../plots/template_attributes").hovertemplateAttrs,l=t("../../components/colorscale/attributes"),c=t("../../lib/extend").extendFlat;e.exports=c({x:n.x,y:n.y,z:{valType:"data_array",editType:"calc"},marker:{color:{valType:"data_array",editType:"calc"},editType:"calc"},histnorm:n.histnorm,histfunc:n.histfunc,nbinsx:n.nbinsx,xbins:a("x"),nbinsy:n.nbinsy,ybins:a("y"),autobinx:n.autobinx,autobiny:n.autobiny,bingroup:c({},n.bingroup,{}),xbingroup:c({},n.bingroup,{}),ybingroup:c({},n.bingroup,{}),xgap:i.xgap,ygap:i.ygap,zsmooth:i.zsmooth,zhoverformat:i.zhoverformat,hovertemplate:s({},{keys:"z"}),showlegend:c({},o.showlegend,{dflt:!1})},l("",{cLetter:"z",autoColorDflt:!1}))},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../heatmap/attributes":1e3,"../histogram/attributes":1018,"../histogram/bin_attributes":1020}],1032:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../histogram/bin_functions"),o=t("../histogram/norm_functions"),s=t("../histogram/average"),l=t("../histogram/bin_label_vals"),c=t("../histogram/calc").calcAllAutoBins;function u(t,e,r,n){var a,i=new Array(t);if(n)for(a=0;a<t;a++)i[a]=1/(e[a+1]-e[a]);else{var o=1/r;for(a=0;a<t;a++)i[a]=o}return i}function h(t,e){return{start:t(e.start),end:t(e.end),size:e.size}}function f(t,e,r,n,a,i){var o,s=t.length-1,c=new Array(s),u=l(r,n,t,a,i);for(o=0;o<s;o++){var h=(e||[])[o];c[o]=void 0===h?[u(t[o]),u(t[o+1],!0)]:[h,h]}return c}e.exports=function(t,e){var r,l,p,d,g=a.getFromId(t,e.xaxis),v=a.getFromId(t,e.yaxis),m=e.xcalendar,y=e.ycalendar,x=function(t){return g.r2c(t,0,m)},b=function(t){return v.r2c(t,0,y)},_=c(t,e,g,"x"),w=_[0],k=_[1],T=c(t,e,v,"y"),M=T[0],A=T[1],S=e._length;k.length>S&&k.splice(S,k.length-S),A.length>S&&A.splice(S,A.length-S);var E=[],L=[],C=[],P="string"==typeof w.size,O="string"==typeof M.size,z=[],I=[],D=P?z:w,R=O?I:M,F=0,B=[],N=[],j=e.histnorm,V=e.histfunc,U=-1!==j.indexOf("density"),q="max"===V||"min"===V?null:0,H=i.count,G=o[j],Y=!1,W=[],X=[],Z="z"in e?e.z:"marker"in e&&Array.isArray(e.marker.color)?e.marker.color:"";Z&&"count"!==V&&(Y="avg"===V,H=i[V]);var J=w.size,K=x(w.start),Q=x(w.end)+(K-a.tickIncrement(K,J,!1,m))/1e6;for(r=K;r<Q;r=a.tickIncrement(r,J,!1,m))L.push(q),z.push(r),Y&&C.push(0);z.push(r);var $,tt=L.length,et=(r-K)/tt,rt=($=K+et/2,g.c2r($,0,m)),nt=M.size,at=b(M.start),it=b(M.end)+(at-a.tickIncrement(at,nt,!1,y))/1e6;for(r=at;r<it;r=a.tickIncrement(r,nt,!1,y)){E.push(L.slice()),I.push(r);var ot=new Array(tt);for(l=0;l<tt;l++)ot[l]=[];N.push(ot),Y&&B.push(C.slice())}I.push(r);var st=E.length,lt=(r-at)/st,ct=function(t){return v.c2r(t,0,y)}(at+lt/2);U&&(W=u(L.length,D,et,P),X=u(E.length,R,lt,O)),P||"date"!==g.type||(D=h(x,D)),O||"date"!==v.type||(R=h(b,R));var ut=!0,ht=!0,ft=new Array(tt),pt=new Array(st),dt=1/0,gt=1/0,vt=1/0,mt=1/0;for(r=0;r<S;r++){var yt=k[r],xt=A[r];p=n.findBin(yt,D),d=n.findBin(xt,R),p>=0&&p<tt&&d>=0&&d<st&&(F+=H(p,r,E[d],Z,B[d]),N[d][p].push(r),ut&&(void 0===ft[p]?ft[p]=yt:ft[p]!==yt&&(ut=!1)),ht&&(void 0===pt[d]?pt[d]=xt:pt[d]!==xt&&(ht=!1)),dt=Math.min(dt,yt-z[p]),gt=Math.min(gt,z[p+1]-yt),vt=Math.min(vt,xt-I[d]),mt=Math.min(mt,I[d+1]-xt))}if(Y)for(d=0;d<st;d++)F+=s(E[d],B[d]);if(G)for(d=0;d<st;d++)G(E[d],F,W,X[d]);return{x:k,xRanges:f(z,ut&&ft,dt,gt,g,m),x0:rt,dx:et,y:A,yRanges:f(I,ht&&pt,vt,mt,v,y),y0:ct,dy:lt,z:E,pts:N}}},{"../../lib":717,"../../plots/cartesian/axes":765,"../histogram/average":1019,"../histogram/bin_functions":1021,"../histogram/bin_label_vals":1022,"../histogram/calc":1023,"../histogram/norm_functions":1030}],1033:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./sample_defaults"),i=t("../heatmap/style_defaults"),o=t("../../components/colorscale/defaults"),s=t("./attributes");e.exports=function(t,e,r,l){function c(r,a){return n.coerce(t,e,s,r,a)}a(t,e,c,l),!1!==e.visible&&(i(t,e,c,l),o(t,e,l,c,{prefix:"",cLetter:"z"}),c("hovertemplate"))}},{"../../components/colorscale/defaults":601,"../../lib":717,"../heatmap/style_defaults":1013,"./attributes":1031,"./sample_defaults":1036}],1034:[function(t,e,r){"use strict";var n=t("../heatmap/hover"),a=t("../../plots/cartesian/axes").hoverLabelText;e.exports=function(t,e,r,i,o,s){var l=n(t,e,r,i,o,s);if(l){var c=(t=l[0]).index,u=c[0],h=c[1],f=t.cd[0],p=f.xRanges[h],d=f.yRanges[u];return t.xLabel=a(t.xa,p[0],p[1]),t.yLabel=a(t.ya,d[0],d[1]),l}}},{"../../plots/cartesian/axes":765,"../heatmap/hover":1007}],1035:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),crossTraceDefaults:t("../histogram/cross_trace_defaults"),calc:t("../heatmap/calc"),plot:t("../heatmap/plot"),layerName:"heatmaplayer",colorbar:t("../heatmap/colorbar"),style:t("../heatmap/style"),hoverPoints:t("./hover"),eventData:t("../histogram/event_data"),moduleType:"trace",name:"histogram2d",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","2dMap","histogram","showLegend"],meta:{}}},{"../../plots/cartesian":776,"../heatmap/calc":1001,"../heatmap/colorbar":1003,"../heatmap/plot":1011,"../heatmap/style":1012,"../histogram/cross_trace_defaults":1025,"../histogram/event_data":1027,"./attributes":1031,"./defaults":1033,"./hover":1034}],1036:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib");e.exports=function(t,e,r,i){var o=r("x"),s=r("y"),l=a.minRowLength(o),c=a.minRowLength(s);l&&c?(e._length=Math.min(l,c),n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y"],i),(r("z")||r("marker.color"))&&r("histfunc"),r("histnorm"),r("autobinx"),r("autobiny")):e.visible=!1}},{"../../lib":717,"../../registry":846}],1037:[function(t,e,r){"use strict";var n=t("../histogram2d/attributes"),a=t("../contour/attributes"),i=t("../../components/colorscale/attributes"),o=t("../../lib/extend").extendFlat;e.exports=o({x:n.x,y:n.y,z:n.z,marker:n.marker,histnorm:n.histnorm,histfunc:n.histfunc,nbinsx:n.nbinsx,xbins:n.xbins,nbinsy:n.nbinsy,ybins:n.ybins,autobinx:n.autobinx,autobiny:n.autobiny,bingroup:n.bingroup,xbingroup:n.xbingroup,ybingroup:n.ybingroup,autocontour:a.autocontour,ncontours:a.ncontours,contours:a.contours,line:{color:a.line.color,width:o({},a.line.width,{dflt:.5}),dash:a.line.dash,smoothing:a.line.smoothing,editType:"plot"},zhoverformat:n.zhoverformat,hovertemplate:n.hovertemplate},i("",{cLetter:"z",editTypeOverride:"calc"}))},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../contour/attributes":943,"../histogram2d/attributes":1031}],1038:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../histogram2d/sample_defaults"),i=t("../contour/contours_defaults"),o=t("../contour/style_defaults"),s=t("./attributes");e.exports=function(t,e,r,l){function c(r,a){return n.coerce(t,e,s,r,a)}a(t,e,c,l),!1!==e.visible&&(i(t,e,c,function(r){return n.coerce2(t,e,s,r)}),o(t,e,c,l),c("hovertemplate"))}},{"../../lib":717,"../contour/contours_defaults":950,"../contour/style_defaults":964,"../histogram2d/sample_defaults":1036,"./attributes":1037}],1039:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),crossTraceDefaults:t("../histogram/cross_trace_defaults"),calc:t("../contour/calc"),plot:t("../contour/plot").plot,layerName:"contourlayer",style:t("../contour/style"),colorbar:t("../contour/colorbar"),hoverPoints:t("../contour/hover"),moduleType:"trace",name:"histogram2dcontour",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","2dMap","contour","histogram","showLegend"],meta:{}}},{"../../plots/cartesian":776,"../contour/calc":944,"../contour/colorbar":946,"../contour/hover":956,"../contour/plot":961,"../contour/style":963,"../histogram/cross_trace_defaults":1025,"./attributes":1037,"./defaults":1038}],1040:[function(t,e,r){"use strict";for(var n=t("../../plots/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../../lib/extend").extendFlat,o=t("./constants").colormodel,s=["rgb","rgba","hsl","hsla"],l=[],c=[],u=0;u<s.length;u++)l.push("For the `"+s[u]+"` colormodel, it is ["+o[s[u]].min.join(", ")+"]."),c.push("For the `"+s[u]+"` colormodel, it is ["+o[s[u]].max.join(", ")+"].");e.exports=i({z:{valType:"data_array",editType:"calc"},colormodel:{valType:"enumerated",values:s,dflt:"rgb",editType:"calc"},zmin:{valType:"info_array",items:[{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"}],editType:"calc"},zmax:{valType:"info_array",items:[{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"}],editType:"calc"},x0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes"},y0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes"},dx:{valType:"number",dflt:1,editType:"calc"},dy:{valType:"number",dflt:1,editType:"calc"},text:{valType:"data_array",editType:"plot"},hovertext:{valType:"data_array",editType:"plot"},hoverinfo:i({},n.hoverinfo,{flags:["x","y","z","color","name","text"],dflt:"x+y+z+text+name"}),hovertemplate:a({},{keys:["z","color","colormodel"]}),transforms:void 0})},{"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"./constants":1042}],1041:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./constants"),i=t("fast-isnumeric"),o=t("../../plots/cartesian/axes"),s=t("../../lib").maxRowLength;function l(t,e,r,a){return function(i){return n.constrain((i-t)*e,r,a)}}function c(t,e){return function(r){return n.constrain(r,t,e)}}e.exports=function(t,e){var r,n=o.getFromId(t,e.xaxis||"x"),u=o.getFromId(t,e.yaxis||"y"),h=n.d2c(e.x0)-e.dx/2,f=u.d2c(e.y0)-e.dy/2,p=e.z.length,d=s(e.z),g=[h,h+d*e.dx],v=[f,f+p*e.dy];if(n&&"log"===n.type)for(r=0;r<d;r++)g.push(h+r*e.dx);if(u&&"log"===u.type)for(r=0;r<p;r++)v.push(f+r*e.dy);return e._extremes[n._id]=o.findExtremes(n,g),e._extremes[u._id]=o.findExtremes(u,v),e._scaler=function(t){var e=t.colormodel,r=e.length,n=a.colormodel[e];t._sArray=[];for(var o=0;o<r;o++)n.min[o]!==t.zmin[o]||n.max[o]!==t.zmax[o]?t._sArray.push(l(t.zmin[o],(n.max[o]-n.min[o])/(t.zmax[o]-t.zmin[o]),n.min[o],n.max[o])):t._sArray.push(c(n.min[o],n.max[o]));return function(e){for(var n=e.slice(0,r),a=0;a<r;a++){var o=n[a];if(!i(o))return!1;n[a]=t._sArray[a](o)}return n}}(e),[{x0:h,y0:f,z:e.z,w:d,h:p}]}},{"../../lib":717,"../../plots/cartesian/axes":765,"./constants":1042,"fast-isnumeric":228}],1042:[function(t,e,r){"use strict";e.exports={colormodel:{rgb:{min:[0,0,0],max:[255,255,255],fmt:function(t){return t.slice(0,3)},suffix:["","",""]},rgba:{min:[0,0,0,0],max:[255,255,255,1],fmt:function(t){return t.slice(0,4)},suffix:["","","",""]},hsl:{min:[0,0,0],max:[360,100,100],fmt:function(t){var e=t.slice(0,3);return e[1]=e[1]+"%",e[2]=e[2]+"%",e},suffix:["\xb0","%","%"]},hsla:{min:[0,0,0,0],max:[360,100,100,1],fmt:function(t){var e=t.slice(0,4);return e[1]=e[1]+"%",e[2]=e[2]+"%",e},suffix:["\xb0","%","%",""]}}}},{}],1043:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("./constants");e.exports=function(t,e){function r(r,i){return n.coerce(t,e,a,r,i)}var o=r("z");if(void 0!==o&&o.length&&o[0]&&o[0].length){r("x0"),r("y0"),r("dx"),r("dy");var s=r("colormodel");r("zmin",i.colormodel[s].min),r("zmax",i.colormodel[s].max),r("text"),r("hovertext"),r("hovertemplate"),e._length=null}else e.visible=!1}},{"../../lib":717,"./attributes":1040,"./constants":1042}],1044:[function(t,e,r){"use strict";e.exports=function(t,e){return"xVal"in e&&(t.x=e.xVal),"yVal"in e&&(t.y=e.yVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t.color=e.color,t.colormodel=e.trace.colormodel,t}},{}],1045:[function(t,e,r){"use strict";var n=t("../../components/fx"),a=t("../../lib"),i=t("./constants");e.exports=function(t,e,r){var o=t.cd[0],s=o.trace,l=t.xa,c=t.ya;if(!(n.inbox(e-o.x0,e-(o.x0+o.w*s.dx),0)>0||n.inbox(r-o.y0,r-(o.y0+o.h*s.dy),0)>0)){var u=Math.floor((e-o.x0)/s.dx),h=Math.floor(Math.abs(r-o.y0)/s.dy);if(o.z[h][u]){var f,p=o.hi||s.hoverinfo;if(p){var d=p.split("+");-1!==d.indexOf("all")&&(d=["color"]),-1!==d.indexOf("color")&&(f=!0)}var g,v=s.colormodel,m=v.length,y=s._scaler(o.z[h][u]),x=i.colormodel[v].suffix,b=[];(s.hovertemplate||f)&&(b.push("["+[y[0]+x[0],y[1]+x[1],y[2]+x[2]].join(", ")),4===m&&b.push(", "+y[3]+x[3]),b.push("]"),b=b.join(""),t.extraText=v.toUpperCase()+": "+b),Array.isArray(s.hovertext)&&Array.isArray(s.hovertext[h])?g=s.hovertext[h][u]:Array.isArray(s.text)&&Array.isArray(s.text[h])&&(g=s.text[h][u]);var _=c.c2p(o.y0+(h+.5)*s.dy),w=o.x0+(u+.5)*s.dx,k=o.y0+(h+.5)*s.dy,T="["+o.z[h][u].slice(0,s.colormodel.length).join(", ")+"]";return[a.extendFlat(t,{index:[h,u],x0:l.c2p(o.x0+u*s.dx),x1:l.c2p(o.x0+(u+1)*s.dx),y0:_,y1:_,color:y,xVal:w,xLabelVal:w,yVal:k,yLabelVal:k,zLabelVal:T,text:g,hovertemplateLabels:{zLabel:T,colorLabel:b,"color[0]Label":y[0]+x[0],"color[1]Label":y[1]+x[1],"color[2]Label":y[2]+x[2],"color[3]Label":y[3]+x[3]}})]}}}},{"../../components/fx":630,"../../lib":717,"./constants":1042}],1046:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc"),plot:t("./plot"),style:t("./style"),hoverPoints:t("./hover"),eventData:t("./event_data"),moduleType:"trace",name:"image",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","2dMap","noSortingByValue"],animatable:!1,meta:{}}},{"../../plots/cartesian":776,"./attributes":1040,"./calc":1041,"./defaults":1043,"./event_data":1044,"./hover":1045,"./plot":1047,"./style":1048}],1047:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../constants/xmlns_namespaces"),o=t("./constants");e.exports=function(t,e,r,s){var l=e.xaxis,c=e.yaxis;a.makeTraceGroups(s,r,"im").each(function(t){var e,r,s,u,h,f,p=n.select(this),d=t[0],g=d.trace,v=d.z,m=d.x0,y=d.y0,x=d.w,b=d.h,_=g.dx,w=g.dy;for(f=0;void 0===e&&f<x;)e=l.c2p(m+f*_),f++;for(f=x;void 0===r&&f>0;)r=l.c2p(m+f*_),f--;for(f=0;void 0===u&&f<b;)u=c.c2p(y+f*w),f++;for(f=b;void 0===h&&f>0;)h=c.c2p(y+f*w),f--;r<e&&(s=r,r=e,e=s),h<u&&(s=u,u=h,h=s);e=Math.max(-.5*l._length,e),r=Math.min(1.5*l._length,r),u=Math.max(-.5*c._length,u),h=Math.min(1.5*c._length,h);var k=Math.round(r-e),T=Math.round(h-u);if(k<=0||T<=0){p.selectAll("image").data([]).exit().remove()}else{var M=document.createElement("canvas");M.width=k,M.height=T;var A,S=M.getContext("2d"),E=function(t){return a.constrain(Math.round(l.c2p(m+t*_)-e),0,k)},L=function(t){return a.constrain(Math.round(c.c2p(y+t*w)-u),0,T)},C=o.colormodel[g.colormodel].fmt;for(f=0;f<d.w;f++){var P=E(f),O=E(f+1);if(O!==P&&!isNaN(O)&&!isNaN(P))for(var z=0;z<d.h;z++){var I=L(z),D=L(z+1);D===I||isNaN(D)||isNaN(I)||!v[z][f]||(A=g._scaler(v[z][f]),S.fillStyle=A?g.colormodel+"("+C(A).join(",")+")":"rgba(0,0,0,0)",S.fillRect(P,I,O-P,D-I))}}var R=p.selectAll("image").data(t);R.enter().append("svg:image").attr({xmlns:i.svg,preserveAspectRatio:"none"}),R.attr({height:T,width:k,x:e,y:u,"xlink:href":M.toDataURL("image/png")})}})}},{"../../constants/xmlns_namespaces":694,"../../lib":717,"./constants":1042,d3:165}],1048:[function(t,e,r){"use strict";var n=t("d3");e.exports=function(t){n.select(t).selectAll(".im image").style("opacity",function(t){return t.trace.opacity})}},{d3:165}],1049:[function(t,e,r){"use strict";var n=t("../../lib/extend").extendFlat,a=t("../../lib/extend").extendDeep,i=t("../../plot_api/edit_types").overrideAll,o=t("../../plots/font_attributes"),s=t("../../components/color/attributes"),l=t("../../plots/domain").attributes,c=t("../../plots/cartesian/layout_attributes"),u=t("../../plot_api/plot_template").templatedArray,h=t("../../constants/delta.js"),f=(t("../../constants/docs").FORMAT_LINK,o({editType:"plot",colorEditType:"plot"})),p={color:{valType:"color",editType:"plot"},line:{color:{valType:"color",dflt:s.defaultLine,editType:"plot"},width:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"calc"},thickness:{valType:"number",min:0,max:1,dflt:1,editType:"plot"},editType:"calc"},d={valType:"info_array",items:[{valType:"number",editType:"plot"},{valType:"number",editType:"plot"}],editType:"plot"},g=u("step",a({},p,{range:d}));e.exports={mode:{valType:"flaglist",editType:"calc",flags:["number","delta","gauge"],dflt:"number"},value:{valType:"number",editType:"calc",anim:!0},align:{valType:"enumerated",values:["left","center","right"],editType:"plot"},domain:l({name:"indicator",trace:!0,editType:"calc"}),title:{text:{valType:"string",editType:"plot"},align:{valType:"enumerated",values:["left","center","right"],editType:"plot"},font:n({},f,{}),editType:"plot"},number:{valueformat:{valType:"string",dflt:"",editType:"plot"},font:n({},f,{}),prefix:{valType:"string",dflt:"",editType:"plot"},suffix:{valType:"string",dflt:"",editType:"plot"},editType:"plot"},delta:{reference:{valType:"number",editType:"calc"},position:{valType:"enumerated",values:["top","bottom","left","right"],dflt:"bottom",editType:"plot"},relative:{valType:"boolean",editType:"plot",dflt:!1},valueformat:{valType:"string",editType:"plot"},increasing:{symbol:{valType:"string",dflt:h.INCREASING.SYMBOL,editType:"plot"},color:{valType:"color",dflt:h.INCREASING.COLOR,editType:"plot"},editType:"plot"},decreasing:{symbol:{valType:"string",dflt:h.DECREASING.SYMBOL,editType:"plot"},color:{valType:"color",dflt:h.DECREASING.COLOR,editType:"plot"},editType:"plot"},font:n({},f,{}),editType:"calc"},gauge:{shape:{valType:"enumerated",editType:"plot",dflt:"angular",values:["angular","bullet"]},bar:a({},p,{color:{dflt:"green"}}),bgcolor:{valType:"color",editType:"plot"},bordercolor:{valType:"color",dflt:s.defaultLine,editType:"plot"},borderwidth:{valType:"number",min:0,dflt:1,editType:"plot"},axis:i({range:d,visible:n({},c.visible,{dflt:!0}),tickmode:c.tickmode,nticks:c.nticks,tick0:c.tick0,dtick:c.dtick,tickvals:c.tickvals,ticktext:c.ticktext,ticks:n({},c.ticks,{dflt:"outside"}),ticklen:c.ticklen,tickwidth:c.tickwidth,tickcolor:c.tickcolor,showticklabels:c.showticklabels,tickfont:o({}),tickangle:c.tickangle,tickformat:c.tickformat,tickformatstops:c.tickformatstops,tickprefix:c.tickprefix,showtickprefix:c.showtickprefix,ticksuffix:c.ticksuffix,showticksuffix:c.showticksuffix,separatethousands:c.separatethousands,exponentformat:c.exponentformat,showexponent:c.showexponent,editType:"plot"},"plot"),steps:g,threshold:{line:{color:n({},p.line.color,{}),width:n({},p.line.width,{dflt:1}),editType:"plot"},thickness:n({},p.thickness,{dflt:.85}),value:{valType:"number",editType:"calc",dflt:!1},editType:"plot"},editType:"plot"}}},{"../../components/color/attributes":590,"../../constants/delta.js":687,"../../constants/docs":688,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plot_api/plot_template":755,"../../plots/cartesian/layout_attributes":777,"../../plots/domain":790,"../../plots/font_attributes":791}],1050:[function(t,e,r){"use strict";var n=t("../../plots/plots");r.name="indicator",r.plot=function(t,e,a,i){n.plotBasePlot(r.name,t,e,a,i)},r.clean=function(t,e,a,i){n.cleanBasePlot(r.name,t,e,a,i)}},{"../../plots/plots":826}],1051:[function(t,e,r){"use strict";e.exports={calc:function(t,e){var r=[],n=e.value;"number"!=typeof e._lastValue&&(e._lastValue=e.value);var a=e._lastValue,i=a;return e._hasDelta&&"number"==typeof e.delta.reference&&(i=e.delta.reference),r[0]={y:n,lastY:a,delta:n-i,relativeDelta:(n-i)/i},r}}},{}],1052:[function(t,e,r){"use strict";e.exports={defaultNumberFontSize:80,bulletNumberDomainSize:.25,bulletPadding:.025,innerRadius:.75,valueThickness:.5,titlePadding:5,horizontalPadding:10}},{}],1053:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("../../plots/domain").defaults,o=t("../../plot_api/plot_template"),s=t("../../plots/array_container_defaults"),l=t("./constants.js"),c=t("../../plots/cartesian/tick_value_defaults"),u=t("../../plots/cartesian/tick_mark_defaults"),h=t("../../plots/cartesian/tick_label_defaults");function f(t,e){function r(r,i){return n.coerce(t,e,a.gauge.steps,r,i)}r("color"),r("line.color"),r("line.width"),r("range"),r("thickness")}e.exports={supplyDefaults:function(t,e,r,p){function d(r,i){return n.coerce(t,e,a,r,i)}i(e,p,d),d("mode"),e._hasNumber=-1!==e.mode.indexOf("number"),e._hasDelta=-1!==e.mode.indexOf("delta"),e._hasGauge=-1!==e.mode.indexOf("gauge");var g=d("value");e._range=[0,"number"==typeof g?1.5*g:1];var v,m,y,x,b,_,w=new Array(2);function k(t,e){return n.coerce(y,x,a.gauge,t,e)}function T(t,e){return n.coerce(b,_,a.gauge.axis,t,e)}if(e._hasNumber&&(d("number.valueformat"),d("number.font.color",p.font.color),d("number.font.family",p.font.family),d("number.font.size"),void 0===e.number.font.size&&(e.number.font.size=l.defaultNumberFontSize,w[0]=!0),d("number.prefix"),d("number.suffix"),v=e.number.font.size),e._hasDelta&&(d("delta.font.color",p.font.color),d("delta.font.family",p.font.family),d("delta.font.size"),void 0===e.delta.font.size&&(e.delta.font.size=(e._hasNumber?.5:1)*(v||l.defaultNumberFontSize),w[1]=!0),d("delta.reference",e.value),d("delta.relative"),d("delta.valueformat",e.delta.relative?"2%":""),d("delta.increasing.symbol"),d("delta.increasing.color"),d("delta.decreasing.symbol"),d("delta.decreasing.color"),d("delta.position"),m=e.delta.font.size),e._scaleNumbers=(!e._hasNumber||w[0])&&(!e._hasDelta||w[1])||!1,d("title.font.color",p.font.color),d("title.font.family",p.font.family),d("title.font.size",.25*(v||m||l.defaultNumberFontSize)),d("title.text"),e._hasGauge){(y=t.gauge)||(y={}),x=o.newContainer(e,"gauge"),k("shape"),(e._isBullet="bullet"===e.gauge.shape)||d("title.align","center"),(e._isAngular="angular"===e.gauge.shape)||d("align","center"),k("bgcolor",p.paper_bgcolor),k("borderwidth"),k("bordercolor"),k("bar.color"),k("bar.line.color"),k("bar.line.width"),k("bar.thickness",l.valueThickness*("bullet"===e.gauge.shape?.5:1)),s(y,x,{name:"steps",handleItemDefaults:f}),k("threshold.value"),k("threshold.thickness"),k("threshold.line.width"),k("threshold.line.color"),b={},y&&(b=y.axis||{}),_=o.newContainer(x,"axis"),T("visible"),e._range=T("range",e._range);var M={outerTicks:!0};c(b,_,T,"linear"),h(b,_,T,"linear",M),u(b,_,T,M)}else d("title.align","center"),d("align","center"),e._isAngular=e._isBullet=!1;e._length=null}}},{"../../lib":717,"../../plot_api/plot_template":755,"../../plots/array_container_defaults":761,"../../plots/cartesian/tick_label_defaults":784,"../../plots/cartesian/tick_mark_defaults":785,"../../plots/cartesian/tick_value_defaults":786,"../../plots/domain":790,"./attributes":1049,"./constants.js":1052}],1054:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"indicator",basePlotModule:t("./base_plot"),categories:["svg","noOpacity","noHover"],animatable:!0,attributes:t("./attributes"),supplyDefaults:t("./defaults").supplyDefaults,calc:t("./calc").calc,plot:t("./plot"),meta:{}}},{"./attributes":1049,"./base_plot":1050,"./calc":1051,"./defaults":1053,"./plot":1055}],1055:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=a.rad2deg,o=t("../../constants/alignment").MID_SHIFT,s=t("../../components/drawing"),l=t("./constants"),c=t("../../lib/svg_text_utils"),u=t("../../plots/cartesian/axes"),h=t("../../plots/cartesian/axis_defaults"),f=t("../../plots/cartesian/position_defaults"),p=t("../../plots/cartesian/layout_attributes"),d=t("../../components/color"),g={left:"start",center:"middle",right:"end"},v={left:0,center:.5,right:1},m=/[yzafpn\xb5mkMGTPEZY]/;function y(t){return t&&t.duration>0}function x(t){t.each(function(t){d.stroke(n.select(this),t.line.color)}).each(function(t){d.fill(n.select(this),t.color)}).style("stroke-width",function(t){return t.line.width})}function b(t,e,r){var n=t._fullLayout,i=a.extendFlat({type:"linear",ticks:"outside",range:r,showline:!0},e),o={type:"linear",_id:"x"+e._id},s={letter:"x",font:n.font,noHover:!0,noTickson:!0};function l(t,e){return a.coerce(i,o,p,t,e)}return h(i,o,l,s,n),f(i,o,l,s),o}function _(t,e){return"translate("+t+","+e+")"}function w(t,e,r){return[Math.min(e/t.width,r/t.height),t,e+"x"+r]}function k(t,e,r,a){var i=document.createElementNS("http://www.w3.org/2000/svg","text"),o=n.select(i);return o.text(t).attr("x",0).attr("y",0).attr("text-anchor",r).attr("data-unformatted",t).call(c.convertToTspans,a).call(s.font,e),s.bBox(o.node())}function T(t,e,r,n,i,o){var s="_cache"+e;t[s]&&t[s].key===i||(t[s]={key:i,value:r});var l=a.aggNums(o,null,[t[s].value,n],2);return t[s].value=l,l}e.exports=function(t,e,r,h){var f,p=t._fullLayout;y(r)&&h&&(f=h()),a.makeTraceGroups(p._indicatorlayer,e,"trace").each(function(e){var h,M,A,S,E,L=e[0].trace,C=n.select(this),P=L._hasGauge,O=L._isAngular,z=L._isBullet,I=L.domain,D={w:p._size.w*(I.x[1]-I.x[0]),h:p._size.h*(I.y[1]-I.y[0]),l:p._size.l+p._size.w*I.x[0],r:p._size.r+p._size.w*(1-I.x[1]),t:p._size.t+p._size.h*(1-I.y[1]),b:p._size.b+p._size.h*I.y[0]},R=D.l+D.w/2,F=D.t+D.h/2,B=Math.min(D.w/2,D.h),N=l.innerRadius*B,j=L.align||"center";if(M=F,P){if(O&&(h=R,M=F+B/2,A=function(t){return e=t,r=.9*N,n=Math.sqrt(e.width/2*(e.width/2)+e.height*e.height),[r/n,e,r];var e,r,n}),z){var V=l.bulletPadding,U=1-l.bulletNumberDomainSize+V;h=D.l+(U+(1-U)*v[j])*D.w,A=function(t){return w(t,(l.bulletNumberDomainSize-V)*D.w,D.h)}}}else h=D.l+v[j]*D.w,A=function(t){return w(t,D.w,D.h)};!function(t,e,r,i){var o,l,h,f=r[0].trace,p=i.numbersX,x=i.numbersY,w=f.align||"center",M=g[w],A=i.transitionOpts,S=i.onComplete,E=a.ensureSingle(e,"g","numbers"),L=[];f._hasNumber&&L.push("number");f._hasDelta&&(L.push("delta"),"left"===f.delta.position&&L.reverse());var C=E.selectAll("text").data(L);function P(e,r,n,a){if(!e.match("s")||n>=0==a>=0||r(n).slice(-1).match(m)||r(a).slice(-1).match(m))return r;var i=e.slice().replace("s","f").replace(/\d+/,function(t){return parseInt(t)-1}),o=b(t,{tickformat:i});return function(t){return Math.abs(t)<1?u.tickText(o,t).text:r(t)}}C.enter().append("text"),C.attr("text-anchor",function(){return M}).attr("class",function(t){return t}).attr("x",null).attr("y",null).attr("dx",null).attr("dy",null),C.exit().remove();var O,z=f.mode+f.align;f._hasDelta&&(O=function(){var e=b(t,{tickformat:f.delta.valueformat},f._range);e.setScale(),u.prepTicks(e);var a=function(t){return u.tickText(e,t).text},i=function(t){var e=f.delta.relative?t.relativeDelta:t.delta;return e},o=function(t,e){return 0===t||"number"!=typeof t||isNaN(t)?"-":(t>0?f.delta.increasing.symbol:f.delta.decreasing.symbol)+e(t)},h=function(t){return t.delta>=0?f.delta.increasing.color:f.delta.decreasing.color};void 0===f._deltaLastValue&&(f._deltaLastValue=i(r[0]));var p=E.select("text.delta");function g(){p.text(o(i(r[0]),a)).call(d.fill,h(r[0])).call(c.convertToTspans,t)}p.call(s.font,f.delta.font).call(d.fill,h({delta:f._deltaLastValue})),y(A)?p.transition().duration(A.duration).ease(A.easing).tween("text",function(){var t=n.select(this),e=i(r[0]),s=f._deltaLastValue,l=P(f.delta.valueformat,a,s,e),c=n.interpolateNumber(s,e);return f._deltaLastValue=e,function(e){t.text(o(c(e),l)),t.call(d.fill,h({delta:c(e)}))}}).each("end",function(){g(),S&&S()}).each("interrupt",function(){g(),S&&S()}):g();return l=k(o(i(r[0]),a),f.delta.font,M,t),p}(),z+=f.delta.position+f.delta.font.size+f.delta.font.family+f.delta.valueformat,z+=f.delta.increasing.symbol+f.delta.decreasing.symbol,h=l);f._hasNumber&&(!function(){var e=b(t,{tickformat:f.number.valueformat},f._range);e.setScale(),u.prepTicks(e);var a=function(t){return u.tickText(e,t).text},i=f.number.suffix,l=f.number.prefix,h=E.select("text.number");function p(){var e="number"==typeof r[0].y?l+a(r[0].y)+i:"-";h.text(e).call(s.font,f.number.font).call(c.convertToTspans,t)}y(A)?h.transition().duration(A.duration).ease(A.easing).each("end",function(){p(),S&&S()}).each("interrupt",function(){p(),S&&S()}).attrTween("text",function(){var t=n.select(this),e=n.interpolateNumber(r[0].lastY,r[0].y);f._lastValue=r[0].y;var o=P(f.number.valueformat,a,r[0].lastY,r[0].y);return function(r){t.text(l+o(e(r))+i)}}):p();o=k(l+a(r[0].y)+i,f.number.font,M,t)}(),z+=f.number.font.size+f.number.font.family+f.number.valueformat+f.number.suffix+f.number.prefix,h=o);if(f._hasDelta&&f._hasNumber){var I,D,R=[(o.left+o.right)/2,(o.top+o.bottom)/2],F=[(l.left+l.right)/2,(l.top+l.bottom)/2],B=.75*f.delta.font.size;"left"===f.delta.position&&(I=T(f,"deltaPos",0,-1*(o.width*v[f.align]+l.width*(1-v[f.align])+B),z,Math.min),D=R[1]-F[1],h={width:o.width+l.width+B,height:Math.max(o.height,l.height),left:l.left+I,right:o.right,top:Math.min(o.top,l.top+D),bottom:Math.max(o.bottom,l.bottom+D)}),"right"===f.delta.position&&(I=T(f,"deltaPos",0,o.width*(1-v[f.align])+l.width*v[f.align]+B,z,Math.max),D=R[1]-F[1],h={width:o.width+l.width+B,height:Math.max(o.height,l.height),left:o.left,right:l.right+I,top:Math.min(o.top,l.top+D),bottom:Math.max(o.bottom,l.bottom+D)}),"bottom"===f.delta.position&&(I=null,D=l.height,h={width:Math.max(o.width,l.width),height:o.height+l.height,left:Math.min(o.left,l.left),right:Math.max(o.right,l.right),top:o.bottom-o.height,bottom:o.bottom+l.height}),"top"===f.delta.position&&(I=null,D=o.top,h={width:Math.max(o.width,l.width),height:o.height+l.height,left:Math.min(o.left,l.left),right:Math.max(o.right,l.right),top:o.bottom-o.height-l.height,bottom:o.bottom}),O.attr({dx:I,dy:D})}(f._hasNumber||f._hasDelta)&&E.attr("transform",function(){var t=i.numbersScaler(h);z+=t[2];var e,r=T(f,"numbersScale",1,t[0],z,Math.min);f._scaleNumbers||(r=1),e=f._isAngular?x-r*h.bottom:x-r*(h.top+h.bottom)/2,f._numbersTop=r*h.top+e;var n=h[w];"center"===w&&(n=(h.left+h.right)/2);var a=p-r*n;return _(a=T(f,"numbersTranslate",0,a,z,Math.max),e)+" scale("+r+")"})}(t,C,e,{numbersX:h,numbersY:M,numbersScaler:A,transitionOpts:r,onComplete:f}),P&&(S={range:L.gauge.axis.range,color:L.gauge.bgcolor,line:{color:L.gauge.bordercolor,width:0},thickness:1},E={range:L.gauge.axis.range,color:"rgba(0, 0, 0, 0)",line:{color:L.gauge.bordercolor,width:L.gauge.borderwidth},thickness:1});var q=C.selectAll("g.angular").data(O?e:[]);q.exit().remove();var H=C.selectAll("g.angularaxis").data(O?e:[]);H.exit().remove(),O&&function(t,e,r,a){var s,l,c,h,f=r[0].trace,p=a.size,d=a.radius,g=a.innerRadius,v=a.gaugeBg,m=a.gaugeOutline,w=[p.l+p.w/2,p.t+p.h/2+d/2],k=a.gauge,T=a.layer,M=a.transitionOpts,A=a.onComplete,S=Math.PI/2;function E(t){var e=f.gauge.axis.range[0],r=f.gauge.axis.range[1],n=(t-e)/(r-e)*Math.PI-S;return n<-S?-S:n>S?S:n}function L(t){return n.svg.arc().innerRadius((g+d)/2-t/2*(d-g)).outerRadius((g+d)/2+t/2*(d-g)).startAngle(-S)}function C(t){t.attr("d",function(t){return L(t.thickness).startAngle(E(t.range[0])).endAngle(E(t.range[1]))()})}k.enter().append("g").classed("angular",!0),k.attr("transform",_(w[0],w[1])),T.enter().append("g").classed("angularaxis",!0).classed("crisp",!0),T.selectAll("g.xangularaxistick,path,text").remove(),(s=b(t,f.gauge.axis)).type="linear",s.range=f.gauge.axis.range,s._id="xangularaxis",s.setScale();var P=function(t){return(s.range[0]-t.x)/(s.range[1]-s.range[0])*Math.PI+Math.PI},O={},z=u.makeLabelFns(s,0).labelStandoff;O.xFn=function(t){var e=P(t);return Math.cos(e)*z},O.yFn=function(t){var e=P(t),r=Math.sin(e)>0?.2:1;return-Math.sin(e)*(z+t.fontSize*r)+Math.abs(Math.cos(e))*(t.fontSize*o)},O.anchorFn=function(t){var e=P(t),r=Math.cos(e);return Math.abs(r)<.1?"middle":r>0?"start":"end"},O.heightFn=function(t,e,r){var n=P(t);return-.5*(1+Math.sin(n))*r};var I=function(t){return _(w[0]+d*Math.cos(t),w[1]-d*Math.sin(t))};c=function(t){return I(P(t))};if(l=u.calcTicks(s),h=u.getTickSigns(s)[2],s.visible){h="inside"===s.ticks?-1:1;var D=(s.linewidth||1)/2;u.drawTicks(t,s,{vals:l,layer:T,path:"M"+h*D+",0h"+h*s.ticklen,transFn:function(t){var e=P(t);return I(e)+"rotate("+-i(e)+")"}}),u.drawLabels(t,s,{vals:l,layer:T,transFn:c,labelFns:O})}var R=[v].concat(f.gauge.steps),F=k.selectAll("g.bg-arc").data(R);F.enter().append("g").classed("bg-arc",!0).append("path"),F.select("path").call(C).call(x),F.exit().remove();var B=L(f.gauge.bar.thickness),N=k.selectAll("g.value-arc").data([f.gauge.bar]);N.enter().append("g").classed("value-arc",!0).append("path");var j=N.select("path");y(M)?(j.transition().duration(M.duration).ease(M.easing).each("end",function(){A&&A()}).each("interrupt",function(){A&&A()}).attrTween("d",(V=B,U=E(r[0].lastY),q=E(r[0].y),function(){var t=n.interpolate(U,q);return function(e){return V.endAngle(t(e))()}})),f._lastValue=r[0].y):j.attr("d","number"==typeof r[0].y?B.endAngle(E(r[0].y)):"M0,0Z");var V,U,q;j.call(x),N.exit().remove(),R=[];var H=f.gauge.threshold.value;H&&R.push({range:[H,H],color:f.gauge.threshold.color,line:{color:f.gauge.threshold.line.color,width:f.gauge.threshold.line.width},thickness:f.gauge.threshold.thickness});var G=k.selectAll("g.threshold-arc").data(R);G.enter().append("g").classed("threshold-arc",!0).append("path"),G.select("path").call(C).call(x),G.exit().remove();var Y=k.selectAll("g.gauge-outline").data([m]);Y.enter().append("g").classed("gauge-outline",!0).append("path"),Y.select("path").call(C).call(x),Y.exit().remove()}(t,0,e,{radius:B,innerRadius:N,gauge:q,layer:H,size:D,gaugeBg:S,gaugeOutline:E,transitionOpts:r,onComplete:f});var G=C.selectAll("g.bullet").data(z?e:[]);G.exit().remove();var Y=C.selectAll("g.bulletaxis").data(z?e:[]);Y.exit().remove(),z&&function(t,e,r,n){var a,i,o,s,c,h=r[0].trace,f=n.gauge,p=n.layer,g=n.gaugeBg,v=n.gaugeOutline,m=n.size,_=h.domain,w=n.transitionOpts,k=n.onComplete;f.enter().append("g").classed("bullet",!0),f.attr("transform","translate("+m.l+", "+m.t+")"),p.enter().append("g").classed("bulletaxis",!0).classed("crisp",!0),p.selectAll("g.xbulletaxistick,path,text").remove();var T=m.h,M=h.gauge.bar.thickness*T,A=_.x[0],S=_.x[0]+(_.x[1]-_.x[0])*(h._hasNumber||h._hasDelta?1-l.bulletNumberDomainSize:1);(a=b(t,h.gauge.axis))._id="xbulletaxis",a.domain=[A,S],a.setScale(),i=u.calcTicks(a),o=u.makeTransFn(a),s=u.getTickSigns(a)[2],c=m.t+m.h,a.visible&&(u.drawTicks(t,a,{vals:"inside"===a.ticks?u.clipEnds(a,i):i,layer:p,path:u.makeTickPath(a,c,s),transFn:o}),u.drawLabels(t,a,{vals:i,layer:p,transFn:o,labelFns:u.makeLabelFns(a,c)}));function E(t){t.attr("width",function(t){return Math.max(0,a.c2p(t.range[1])-a.c2p(t.range[0]))}).attr("x",function(t){return a.c2p(t.range[0])}).attr("y",function(t){return.5*(1-t.thickness)*T}).attr("height",function(t){return t.thickness*T})}var L=[g].concat(h.gauge.steps),C=f.selectAll("g.bg-bullet").data(L);C.enter().append("g").classed("bg-bullet",!0).append("rect"),C.select("rect").call(E).call(x),C.exit().remove();var P=f.selectAll("g.value-bullet").data([h.gauge.bar]);P.enter().append("g").classed("value-bullet",!0).append("rect"),P.select("rect").attr("height",M).attr("y",(T-M)/2).call(x),y(w)?P.select("rect").transition().duration(w.duration).ease(w.easing).each("end",function(){k&&k()}).each("interrupt",function(){k&&k()}).attr("width",Math.max(0,a.c2p(Math.min(h.gauge.axis.range[1],r[0].y)))):P.select("rect").attr("width","number"==typeof r[0].y?Math.max(0,a.c2p(Math.min(h.gauge.axis.range[1],r[0].y))):0);P.exit().remove();var O=r.filter(function(){return h.gauge.threshold.value}),z=f.selectAll("g.threshold-bullet").data(O);z.enter().append("g").classed("threshold-bullet",!0).append("line"),z.select("line").attr("x1",a.c2p(h.gauge.threshold.value)).attr("x2",a.c2p(h.gauge.threshold.value)).attr("y1",(1-h.gauge.threshold.thickness)/2*T).attr("y2",(1-(1-h.gauge.threshold.thickness)/2)*T).call(d.stroke,h.gauge.threshold.line.color).style("stroke-width",h.gauge.threshold.line.width),z.exit().remove();var I=f.selectAll("g.gauge-outline").data([v]);I.enter().append("g").classed("gauge-outline",!0).append("rect"),I.select("rect").call(E).call(x),I.exit().remove()}(t,0,e,{gauge:G,layer:Y,size:D,gaugeBg:S,gaugeOutline:E,transitionOpts:r,onComplete:f});var W=C.selectAll("text.title").data(e);W.exit().remove(),W.enter().append("text").classed("title",!0),W.attr("text-anchor",function(){return z?g.right:g[L.title.align]}).text(L.title.text).call(s.font,L.title.font).call(c.convertToTspans,t),W.attr("transform",function(){var t,e=D.l+D.w*v[L.title.align],r=l.titlePadding,n=s.bBox(W.node());if(P){if(O)if(L.gauge.axis.visible)t=s.bBox(H.node()).top-r-n.bottom;else t=D.t+D.h/2-B/2-n.bottom-r;z&&(t=M-(n.top+n.bottom)/2,e=D.l-l.bulletPadding*D.w)}else t=L._numbersTop-r-n.bottom;return _(e,t)})})}},{"../../components/color":591,"../../components/drawing":612,"../../constants/alignment":686,"../../lib":717,"../../lib/svg_text_utils":741,"../../plots/cartesian/axes":765,"../../plots/cartesian/axis_defaults":767,"../../plots/cartesian/layout_attributes":777,"../../plots/cartesian/position_defaults":780,"./constants":1052,d3:165}],1056:[function(t,e,r){"use strict";var n=t("../../components/colorscale/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../mesh3d/attributes"),o=t("../../plots/attributes"),s=t("../../lib/extend").extendFlat,l=t("../../plot_api/edit_types").overrideAll;var c=e.exports=l(s({x:{valType:"data_array"},y:{valType:"data_array"},z:{valType:"data_array"},value:{valType:"data_array"},isomin:{valType:"number"},isomax:{valType:"number"},surface:{show:{valType:"boolean",dflt:!0},count:{valType:"integer",dflt:2,min:1},fill:{valType:"number",min:0,max:1,dflt:1},pattern:{valType:"flaglist",flags:["A","B","C","D","E"],extras:["all","odd","even"],dflt:"all"}},spaceframe:{show:{valType:"boolean",dflt:!1},fill:{valType:"number",min:0,max:1,dflt:.15}},slices:{x:{show:{valType:"boolean",dflt:!1},locations:{valType:"data_array",dflt:[]},fill:{valType:"number",min:0,max:1,dflt:1}},y:{show:{valType:"boolean",dflt:!1},locations:{valType:"data_array",dflt:[]},fill:{valType:"number",min:0,max:1,dflt:1}},z:{show:{valType:"boolean",dflt:!1},locations:{valType:"data_array",dflt:[]},fill:{valType:"number",min:0,max:1,dflt:1}}},caps:{x:{show:{valType:"boolean",dflt:!0},fill:{valType:"number",min:0,max:1,dflt:1}},y:{show:{valType:"boolean",dflt:!0},fill:{valType:"number",min:0,max:1,dflt:1}},z:{show:{valType:"boolean",dflt:!0},fill:{valType:"number",min:0,max:1,dflt:1}}},text:{valType:"string",dflt:"",arrayOk:!0},hovertext:{valType:"string",dflt:"",arrayOk:!0},hovertemplate:a(),showlegend:s({},o.showlegend,{dflt:!1})},n("",{colorAttr:"`value`",showScaleDflt:!0,editTypeOverride:"calc"}),{opacity:i.opacity,lightposition:i.lightposition,lighting:i.lighting,flatshading:i.flatshading,contour:i.contour,hoverinfo:s({},o.hoverinfo)}),"calc","nested");c.flatshading.dflt=!0,c.lighting.facenormalsepsilon.dflt=0,c.x.editType=c.y.editType=c.z.editType=c.value.editType="calc+clearAxisTypes",c.transforms=void 0},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/attributes":762,"../../plots/template_attributes":841,"../mesh3d/attributes":1061}],1057:[function(t,e,r){"use strict";var n=t("../../components/colorscale/calc"),a=t("../streamtube/calc").processGrid,i=t("../streamtube/calc").filter;e.exports=function(t,e){e._len=Math.min(e.x.length,e.y.length,e.z.length,e.value.length),e._x=i(e.x,e._len),e._y=i(e.y,e._len),e._z=i(e.z,e._len),e._value=i(e.value,e._len);var r=a(e);e._gridFill=r.fill,e._Xs=r.Xs,e._Ys=r.Ys,e._Zs=r.Zs,e._len=r.len;for(var o=1/0,s=-1/0,l=0;l<e._len;l++){var c=e._value[l];o=Math.min(o,c),s=Math.max(s,c)}e._minValues=o,e._maxValues=s,e._vMin=void 0===e.isomin||null===e.isomin?o:e.isomin,e._vMax=void 0===e.isomax||null===e.isomin?s:e.isomax,n(t,e,{vals:[e._vMin,e._vMax],containerStr:"",cLetter:"c"})}},{"../../components/colorscale/calc":599,"../streamtube/calc":1227}],1058:[function(t,e,r){"use strict";var n=t("gl-mesh3d"),a=t("../../lib/gl_format_color").parseColorScale,i=t("../../lib/str2rgbarray"),o=t("../../components/colorscale").extractOpts,s=t("../../plots/gl3d/zip3"),l=function(t,e){for(var r=e.length-1;r>0;r--){var n=Math.min(e[r],e[r-1]),a=Math.max(e[r],e[r-1]);if(a>n&&n<t&&t<=a)return{id:r,distRatio:(a-t)/(a-n)}}return{id:0,distRatio:0}};function c(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name="",this.data=null,this.showContour=!1}var u=c.prototype;u.handlePick=function(t){if(t.object===this.mesh){var e=t.data.index,r=this.data._meshX[e],n=this.data._meshY[e],a=this.data._meshZ[e],i=this.data._Ys.length,o=this.data._Zs.length,s=l(r,this.data._Xs).id,c=l(n,this.data._Ys).id,u=l(a,this.data._Zs).id,h=t.index=u+o*c+o*i*s;t.traceCoordinate=[this.data._meshX[h],this.data._meshY[h],this.data._meshZ[h],this.data._value[h]];var f=this.data.hovertext||this.data.text;return Array.isArray(f)&&void 0!==f[h]?t.textLabel=f[h]:f&&(t.textLabel=f),!0}},u.update=function(t){var e=this.scene,r=e.fullSceneLayout;function n(t,e,r,n){return e.map(function(e){return t.d2l(e,0,n)*r})}this.data=f(t);var l={positions:s(n(r.xaxis,t._meshX,e.dataScale[0],t.xcalendar),n(r.yaxis,t._meshY,e.dataScale[1],t.ycalendar),n(r.zaxis,t._meshZ,e.dataScale[2],t.zcalendar)),cells:s(t._meshI,t._meshJ,t._meshK),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:i(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading},c=o(t);l.vertexIntensity=t._meshIntensity,l.vertexIntensityBounds=[c.min,c.max],l.colormap=a(t),this.mesh.update(l)},u.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()};var h=["xyz","xzy","yxz","yzx","zxy","zyx"];function f(t){t._meshI=[],t._meshJ=[],t._meshK=[];var e,r,n,a,i,o,s,c=t.surface.show,u=t.spaceframe.show,f=t.surface.fill,p=t.spaceframe.fill,d=!1,g=!1,v=0,m=t._Xs,y=t._Ys,x=t._Zs,b=m.length,_=y.length,w=x.length,k=h.indexOf(t._gridFill.replace(/-/g,"").replace(/\+/g,"")),T=function(t,e,r){switch(k){case 5:return r+w*e+w*_*t;case 4:return r+w*t+w*b*e;case 3:return e+_*r+_*w*t;case 2:return e+_*t+_*b*r;case 1:return t+b*r+b*w*e;default:return t+b*e+b*_*r}},M=t._minValues,A=t._maxValues,S=t._vMin,E=t._vMax;function L(t,e,s){for(var l=o.length,c=r;c<l;c++)if(t===n[c]&&e===a[c]&&s===i[c])return c;return-1}function C(){r=e}function P(){n=[],a=[],i=[],o=[],e=0,C()}function O(t,r,s,l){return n.push(t),a.push(r),i.push(s),o.push(l),++e-1}function z(t,e,r){for(var n=[],a=0;a<t.length;a++)n[a]=t[a]*(1-r)+r*e[a];return n}function I(t){s=t}function D(t,e){return"all"===t||null===t||t.indexOf(e)>-1}function R(t,e){return null===t?e:t}function F(e,r,n){C();var a,i,o,l=[r],c=[n];if(s>=1)l=[r],c=[n];else if(s>0){var u=function(t,e){var r=t[0],n=t[1],a=t[2],i=function(t,e,r){for(var n=[],a=0;a<t.length;a++)n[a]=(t[a]+e[a]+r[a])/3;return n}(r,n,a),o=Math.sqrt(1-s),l=z(i,r,o),c=z(i,n,o),u=z(i,a,o),h=e[0],f=e[1],p=e[2];return{xyzv:[[r,n,c],[c,l,r],[n,a,u],[u,c,n],[a,r,l],[l,u,a]],abc:[[h,f,-1],[-1,-1,h],[f,p,-1],[-1,-1,f],[p,h,-1],[-1,-1,p]]}}(r,n);l=u.xyzv,c=u.abc}for(var h=0;h<l.length;h++){r=l[h],n=c[h];for(var f=[],p=0;p<3;p++){var d=r[p][0],g=r[p][1],m=r[p][2],y=r[p][3],x=n[p]>-1?n[p]:L(d,g,m);f[p]=x>-1?x:O(d,g,m,R(e,y))}a=f[0],i=f[1],o=f[2],t._meshI.push(a),t._meshJ.push(i),t._meshK.push(o),++v}}function B(t,e,r,n){var a=t[3];a<r&&(a=r),a>n&&(a=n);for(var i=(t[3]-a)/(t[3]-e[3]+1e-9),o=[],s=0;s<4;s++)o[s]=(1-i)*t[s]+i*e[s];return o}function N(t,e,r){return t>=e&&t<=r}function j(t){var e=.001*(E-S);return t>=S-e&&t<=E+e}function V(e){for(var r=[],n=0;n<4;n++){var a=e[n];r.push([t._x[a],t._y[a],t._z[a],t._value[a]])}return r}var U=3;function q(t,e,r,n,a,i){i||(i=1),r=[-1,-1,-1];var o=!1,s=[N(e[0][3],n,a),N(e[1][3],n,a),N(e[2][3],n,a)];if(!s[0]&&!s[1]&&!s[2])return!1;var l=function(t,e,r){return j(e[0][3])&&j(e[1][3])&&j(e[2][3])?(F(t,e,r),!0):i<U&&q(t,e,r,S,E,++i)};if(s[0]&&s[1]&&s[2])return l(t,e,r)||o;var c=!1;return[[0,1,2],[2,0,1],[1,2,0]].forEach(function(i){if(s[i[0]]&&s[i[1]]&&!s[i[2]]){var u=e[i[0]],h=e[i[1]],f=e[i[2]],p=B(f,u,n,a),d=B(f,h,n,a);o=l(t,[d,p,u],[-1,-1,r[i[0]]])||o,o=l(t,[u,h,d],[r[i[0]],r[i[1]],-1])||o,c=!0}}),c?o:([[0,1,2],[1,2,0],[2,0,1]].forEach(function(i){if(s[i[0]]&&!s[i[1]]&&!s[i[2]]){var u=e[i[0]],h=e[i[1]],f=e[i[2]],p=B(h,u,n,a),d=B(f,u,n,a);o=l(t,[d,p,u],[-1,-1,r[i[0]]])||o,c=!0}}),o)}function H(t,e,r,n){var a=!1,i=V(e),o=[N(i[0][3],r,n),N(i[1][3],r,n),N(i[2][3],r,n),N(i[3][3],r,n)];if(!(o[0]||o[1]||o[2]||o[3]))return a;if(o[0]&&o[1]&&o[2]&&o[3])return g&&(a=function(t,e,r){var n=function(n,a,i){F(t,[e[n],e[a],e[i]],[r[n],r[a],r[i]])};n(0,1,2),n(3,0,1),n(2,3,0),n(1,2,3)}(t,i,e)||a),a;var s=!1;return[[0,1,2,3],[3,0,1,2],[2,3,0,1],[1,2,3,0]].forEach(function(l){if(o[l[0]]&&o[l[1]]&&o[l[2]]&&!o[l[3]]){var c=i[l[0]],u=i[l[1]],h=i[l[2]],f=i[l[3]];if(g)a=F(t,[c,u,h],[e[l[0]],e[l[1]],e[l[2]]])||a;else{var p=B(f,c,r,n),d=B(f,u,r,n),v=B(f,h,r,n);a=F(null,[p,d,v],[-1,-1,-1])||a}s=!0}}),s?a:([[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2],[0,2,3,1],[1,3,2,0]].forEach(function(l){if(o[l[0]]&&o[l[1]]&&!o[l[2]]&&!o[l[3]]){var c=i[l[0]],u=i[l[1]],h=i[l[2]],f=i[l[3]],p=B(h,c,r,n),d=B(h,u,r,n),v=B(f,u,r,n),m=B(f,c,r,n);g?(a=F(t,[c,m,p],[e[l[0]],-1,-1])||a,a=F(t,[u,d,v],[e[l[1]],-1,-1])||a):a=function(t,e,r){var n=function(n,a,i){F(t,[e[n],e[a],e[i]],[r[n],r[a],r[i]])};n(0,1,2),n(2,3,0)}(null,[p,d,v,m],[-1,-1,-1,-1])||a,s=!0}}),s?a:([[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2]].forEach(function(l){if(o[l[0]]&&!o[l[1]]&&!o[l[2]]&&!o[l[3]]){var c=i[l[0]],u=i[l[1]],h=i[l[2]],f=i[l[3]],p=B(u,c,r,n),d=B(h,c,r,n),v=B(f,c,r,n);g?(a=F(t,[c,p,d],[e[l[0]],-1,-1])||a,a=F(t,[c,d,v],[e[l[0]],-1,-1])||a,a=F(t,[c,v,p],[e[l[0]],-1,-1])||a):a=F(null,[p,d,v],[-1,-1,-1])||a,s=!0}}),a))}function G(t,e,r,n,a,i,o,s,l,c,u){var h=!1;return d&&(D(t,"A")&&(h=H(null,[e,r,n,i],c,u)||h),D(t,"B")&&(h=H(null,[r,n,a,l],c,u)||h),D(t,"C")&&(h=H(null,[r,i,o,l],c,u)||h),D(t,"D")&&(h=H(null,[n,i,s,l],c,u)||h),D(t,"E")&&(h=H(null,[r,n,i,l],c,u)||h)),g&&(h=H(t,[r,n,i,l],c,u)||h),h}function Y(t,e,r,n,a,i,o,s){return[!0===s[0]||q(t,V([e,r,n]),[e,r,n],i,o),!0===s[1]||q(t,V([n,a,e]),[n,a,e],i,o)]}function W(t,e,r,n,a,i,o,s,l){return s?Y(t,e,r,a,n,i,o,l):Y(t,r,a,n,e,i,o,l)}function X(t,e,r,n,a,i,o){var s,l,c,u,h=!1,f=function(){h=q(t,[s,l,c],[-1,-1,-1],a,i)||h,h=q(t,[c,u,s],[-1,-1,-1],a,i)||h},p=o[0],d=o[1],g=o[2];return p&&(s=z(V([T(e,r-0,n-0)])[0],V([T(e-1,r-0,n-0)])[0],p),l=z(V([T(e,r-0,n-1)])[0],V([T(e-1,r-0,n-1)])[0],p),c=z(V([T(e,r-1,n-1)])[0],V([T(e-1,r-1,n-1)])[0],p),u=z(V([T(e,r-1,n-0)])[0],V([T(e-1,r-1,n-0)])[0],p),f()),d&&(s=z(V([T(e-0,r,n-0)])[0],V([T(e-0,r-1,n-0)])[0],d),l=z(V([T(e-0,r,n-1)])[0],V([T(e-0,r-1,n-1)])[0],d),c=z(V([T(e-1,r,n-1)])[0],V([T(e-1,r-1,n-1)])[0],d),u=z(V([T(e-1,r,n-0)])[0],V([T(e-1,r-1,n-0)])[0],d),f()),g&&(s=z(V([T(e-0,r-0,n)])[0],V([T(e-0,r-0,n-1)])[0],g),l=z(V([T(e-0,r-1,n)])[0],V([T(e-0,r-1,n-1)])[0],g),c=z(V([T(e-1,r-1,n)])[0],V([T(e-1,r-1,n-1)])[0],g),u=z(V([T(e-1,r-0,n)])[0],V([T(e-1,r-0,n-1)])[0],g),f()),h}function Z(t,e,r,n,a,i,o,s,l,c,u,h){var f=t;return h?(d&&"even"===t&&(f=null),G(f,e,r,n,a,i,o,s,l,c,u)):(d&&"odd"===t&&(f=null),G(f,l,s,o,i,a,n,r,e,c,u))}function J(t,e,r,n,a){for(var i=[],o=0,s=0;s<e.length;s++)for(var l=e[s],c=1;c<w;c++)for(var u=1;u<_;u++)i.push(W(t,T(l,u-1,c-1),T(l,u-1,c),T(l,u,c-1),T(l,u,c),r,n,(l+u+c)%2,a&&a[o]?a[o]:[])),o++;return i}function K(t,e,r,n,a){for(var i=[],o=0,s=0;s<e.length;s++)for(var l=e[s],c=1;c<b;c++)for(var u=1;u<w;u++)i.push(W(t,T(c-1,l,u-1),T(c,l,u-1),T(c-1,l,u),T(c,l,u),r,n,(c+l+u)%2,a&&a[o]?a[o]:[])),o++;return i}function Q(t,e,r,n,a){for(var i=[],o=0,s=0;s<e.length;s++)for(var l=e[s],c=1;c<_;c++)for(var u=1;u<b;u++)i.push(W(t,T(u-1,c-1,l),T(u-1,c,l),T(u,c-1,l),T(u,c,l),r,n,(u+c+l)%2,a&&a[o]?a[o]:[])),o++;return i}function $(t,e,r){for(var n=1;n<w;n++)for(var a=1;a<_;a++)for(var i=1;i<b;i++)Z(t,T(i-1,a-1,n-1),T(i-1,a-1,n),T(i-1,a,n-1),T(i-1,a,n),T(i,a-1,n-1),T(i,a-1,n),T(i,a,n-1),T(i,a,n),e,r,(i+a+n)%2)}function tt(t,e,r){d=!0,$(t,e,r),d=!1}function et(t,e,r,n,a,i){for(var o=[],s=0,l=0;l<e.length;l++)for(var c=e[l],u=1;u<w;u++)for(var h=1;h<_;h++)o.push(X(t,c,h,u,r,n,a[l],i&&i[s]&&i[s])),s++;return o}function rt(t,e,r,n,a,i){for(var o=[],s=0,l=0;l<e.length;l++)for(var c=e[l],u=1;u<b;u++)for(var h=1;h<w;h++)o.push(X(t,u,c,h,r,n,a[l],i&&i[s]&&i[s])),s++;return o}function nt(t,e,r,n,a,i){for(var o=[],s=0,l=0;l<e.length;l++)for(var c=e[l],u=1;u<_;u++)for(var h=1;h<b;h++)o.push(X(t,h,u,c,r,n,a[l],i&&i[s]&&i[s])),s++;return o}function at(t,e){for(var r=[],n=t;n<e;n++)r.push(n);return r}return function(){if(P(),function(){for(var e=0;e<b;e++)for(var r=0;r<_;r++)for(var n=0;n<w;n++){var a=T(e,r,n);O(t._x[a],t._y[a],t._z[a],t._value[a])}}(),u&&p&&(I(p),g=!0,$(null,S,E),g=!1),c&&f){I(f);for(var e=t.surface.pattern,r=t.surface.count,s=0;s<r;s++){var h=1===r?.5:s/(r-1),d=(1-h)*S+h*E,k=Math.abs(d-M)>Math.abs(d-A)?[M,d]:[d,A];tt(e,k[0],k[1])}}var L=[[Math.min(S,A),Math.max(S,A)],[Math.min(M,E),Math.max(M,E)]];["x","y","z"].forEach(function(e){for(var r=[],n=0;n<L.length;n++){var a=0,i=L[n][0],o=L[n][1],s=t.slices[e];if(s.show&&s.fill){I(s.fill);var c=[],u=[],h=[];if(s.locations.length)for(var f=0;f<s.locations.length;f++){var p=l(s.locations[f],"x"===e?m:"y"===e?y:x);0===p.distRatio?c.push(p.id):p.id>0&&(u.push(p.id),"x"===e?h.push([p.distRatio,0,0]):"y"===e?h.push([0,p.distRatio,0]):h.push([0,0,p.distRatio]))}else c=at(1,"x"===e?b-1:"y"===e?_-1:w-1);u.length>0&&(r[a]="x"===e?et(null,u,i,o,h,r[a]):"y"===e?rt(null,u,i,o,h,r[a]):nt(null,u,i,o,h,r[a]),a++),c.length>0&&(r[a]="x"===e?J(null,c,i,o,r[a]):"y"===e?K(null,c,i,o,r[a]):Q(null,c,i,o,r[a]),a++)}var d=t.caps[e];d.show&&d.fill&&(I(d.fill),r[a]="x"===e?J(null,[0,b-1],i,o,r[a]):"y"===e?K(null,[0,_-1],i,o,r[a]):Q(null,[0,w-1],i,o,r[a]),a++)}}),0===v&&P(),t._meshX=n,t._meshY=a,t._meshZ=i,t._meshIntensity=o,t._Xs=m,t._Ys=y,t._Zs=x}(),t}e.exports={findNearestOnAxis:l,generateIsoMeshes:f,createIsosurfaceTrace:function(t,e){var r=t.glplot.gl,a=n({gl:r}),i=new c(t,a,e.uid);return a._trace=i,i.update(e),t.glplot.add(a),i}}},{"../../components/colorscale":603,"../../lib/gl_format_color":714,"../../lib/str2rgbarray":740,"../../plots/gl3d/zip3":816,"gl-mesh3d":283}],1059:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../registry"),i=t("./attributes"),o=t("../../components/colorscale/defaults");function s(t,e,r,n,i){var s=i("isomin"),l=i("isomax");null!=l&&null!=s&&s>l&&(e.isomin=null,e.isomax=null);var c=i("x"),u=i("y"),h=i("z"),f=i("value");c&&c.length&&u&&u.length&&h&&h.length&&f&&f.length?(a.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y","z"],n),["x","y","z"].forEach(function(t){var e="caps."+t;i(e+".show")&&i(e+".fill");var r="slices."+t;i(r+".show")&&(i(r+".fill"),i(r+".locations"))}),i("spaceframe.show")&&i("spaceframe.fill"),i("surface.show")&&(i("surface.count"),i("surface.fill"),i("surface.pattern")),i("contour.show")&&(i("contour.color"),i("contour.width")),["text","hovertext","hovertemplate","lighting.ambient","lighting.diffuse","lighting.specular","lighting.roughness","lighting.fresnel","lighting.vertexnormalsepsilon","lighting.facenormalsepsilon","lightposition.x","lightposition.y","lightposition.z","flatshading","opacity"].forEach(function(t){i(t)}),o(t,e,n,i,{prefix:"",cLetter:"c"}),e._length=null):e.visible=!1}e.exports={supplyDefaults:function(t,e,r,a){s(t,e,0,a,function(r,a){return n.coerce(t,e,i,r,a)})},supplyIsoDefaults:s}},{"../../components/colorscale/defaults":601,"../../lib":717,"../../registry":846,"./attributes":1056}],1060:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults").supplyDefaults,calc:t("./calc"),colorbar:{min:"cmin",max:"cmax"},plot:t("./convert").createIsosurfaceTrace,moduleType:"trace",name:"isosurface",basePlotModule:t("../../plots/gl3d"),categories:["gl3d","showLegend"],meta:{}}},{"../../plots/gl3d":805,"./attributes":1056,"./calc":1057,"./convert":1058,"./defaults":1059}],1061:[function(t,e,r){"use strict";var n=t("../../components/colorscale/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../surface/attributes"),o=t("../../plots/attributes"),s=t("../../lib/extend").extendFlat;e.exports=s({x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},z:{valType:"data_array",editType:"calc+clearAxisTypes"},i:{valType:"data_array",editType:"calc"},j:{valType:"data_array",editType:"calc"},k:{valType:"data_array",editType:"calc"},text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertemplate:a({editType:"calc"}),delaunayaxis:{valType:"enumerated",values:["x","y","z"],dflt:"z",editType:"calc"},alphahull:{valType:"number",dflt:-1,editType:"calc"},intensity:{valType:"data_array",editType:"calc"},intensitymode:{valType:"enumerated",values:["vertex","cell"],dflt:"vertex",editType:"calc"},color:{valType:"color",editType:"calc"},vertexcolor:{valType:"data_array",editType:"calc"},facecolor:{valType:"data_array",editType:"calc"},transforms:void 0},n("",{colorAttr:"`intensity`",showScaleDflt:!0,editTypeOverride:"calc"}),{opacity:i.opacity,flatshading:{valType:"boolean",dflt:!1,editType:"calc"},contour:{show:s({},i.contours.x.show,{}),color:i.contours.x.color,width:i.contours.x.width,editType:"calc"},lightposition:{x:s({},i.lightposition.x,{dflt:1e5}),y:s({},i.lightposition.y,{dflt:1e5}),z:s({},i.lightposition.z,{dflt:0}),editType:"calc"},lighting:s({vertexnormalsepsilon:{valType:"number",min:0,max:1,dflt:1e-12,editType:"calc"},facenormalsepsilon:{valType:"number",min:0,max:1,dflt:1e-6,editType:"calc"},editType:"calc"},i.lighting),hoverinfo:s({},o.hoverinfo,{editType:"calc"}),showlegend:s({},o.showlegend,{dflt:!1})})},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../surface/attributes":1243}],1062:[function(t,e,r){"use strict";var n=t("../../components/colorscale/calc");e.exports=function(t,e){e.intensity&&n(t,e,{vals:e.intensity,containerStr:"",cLetter:"c"})}},{"../../components/colorscale/calc":599}],1063:[function(t,e,r){"use strict";var n=t("gl-mesh3d"),a=t("delaunay-triangulate"),i=t("alpha-shape"),o=t("convex-hull"),s=t("../../lib/gl_format_color").parseColorScale,l=t("../../lib/str2rgbarray"),c=t("../../components/colorscale").extractOpts,u=t("../../plots/gl3d/zip3");function h(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name="",this.color="#fff",this.data=null,this.showContour=!1}var f=h.prototype;function p(t){for(var e=[],r=t.length,n=0;n<r;n++)e[n]=l(t[n]);return e}function d(t,e,r,n){for(var a=[],i=e.length,o=0;o<i;o++)a[o]=t.d2l(e[o],0,n)*r;return a}function g(t){for(var e=[],r=t.length,n=0;n<r;n++)e[n]=Math.round(t[n]);return e}function v(t,e){for(var r=t.length,n=0;n<r;n++)if(t[n]<=-.5||t[n]>=e-.5)return!1;return!0}f.handlePick=function(t){if(t.object===this.mesh){var e=t.index=t.data.index;t.data._cellCenter?t.traceCoordinate=t.data.dataCoordinate:t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e]];var r=this.data.hovertext||this.data.text;return Array.isArray(r)&&void 0!==r[e]?t.textLabel=r[e]:r&&(t.textLabel=r),!0}},f.update=function(t){var e=this.scene,r=e.fullSceneLayout;this.data=t;var n,h=t.x.length,f=u(d(r.xaxis,t.x,e.dataScale[0],t.xcalendar),d(r.yaxis,t.y,e.dataScale[1],t.ycalendar),d(r.zaxis,t.z,e.dataScale[2],t.zcalendar));if(t.i&&t.j&&t.k){if(t.i.length!==t.j.length||t.j.length!==t.k.length||!v(t.i,h)||!v(t.j,h)||!v(t.k,h))return;n=u(g(t.i),g(t.j),g(t.k))}else n=0===t.alphahull?o(f):t.alphahull>0?i(t.alphahull,f):function(t,e){for(var r=["x","y","z"].indexOf(t),n=[],i=e.length,o=0;o<i;o++)n[o]=[e[o][(r+1)%3],e[o][(r+2)%3]];return a(n)}(t.delaunayaxis,f);var m={positions:f,cells:n,lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:l(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading};if(t.intensity){var y=c(t);this.color="#fff";var x=t.intensitymode;m[x+"Intensity"]=t.intensity,m[x+"IntensityBounds"]=[y.min,y.max],m.colormap=s(t)}else t.vertexcolor?(this.color=t.vertexcolor[0],m.vertexColors=p(t.vertexcolor)):t.facecolor?(this.color=t.facecolor[0],m.cellColors=p(t.facecolor)):(this.color=t.color,m.meshColor=l(t.color));this.mesh.update(m)},f.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var r=t.glplot.gl,a=n({gl:r}),i=new h(t,a,e.uid);return a._trace=i,i.update(e),t.glplot.add(a),i}},{"../../components/colorscale":603,"../../lib/gl_format_color":714,"../../lib/str2rgbarray":740,"../../plots/gl3d/zip3":816,"alpha-shape":67,"convex-hull":132,"delaunay-triangulate":167,"gl-mesh3d":283}],1064:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("../../components/colorscale/defaults"),o=t("./attributes");e.exports=function(t,e,r,s){function l(r,n){return a.coerce(t,e,o,r,n)}function c(t){var e=t.map(function(t){var e=l(t);return e&&a.isArrayOrTypedArray(e)?e:null});return e.every(function(t){return t&&t.length===e[0].length})&&e}c(["x","y","z"])?(c(["i","j","k"]),(!e.i||e.j&&e.k)&&(!e.j||e.k&&e.i)&&(!e.k||e.i&&e.j)?(n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y","z"],s),["lighting.ambient","lighting.diffuse","lighting.specular","lighting.roughness","lighting.fresnel","lighting.vertexnormalsepsilon","lighting.facenormalsepsilon","lightposition.x","lightposition.y","lightposition.z","flatshading","alphahull","delaunayaxis","opacity"].forEach(function(t){l(t)}),l("contour.show")&&(l("contour.color"),l("contour.width")),"intensity"in t?(l("intensity"),l("intensitymode"),i(t,e,s,l,{prefix:"",cLetter:"c"})):(e.showscale=!1,"facecolor"in t?l("facecolor"):"vertexcolor"in t?l("vertexcolor"):l("color",r)),l("text"),l("hovertext"),l("hovertemplate"),e._length=null):e.visible=!1):e.visible=!1}},{"../../components/colorscale/defaults":601,"../../lib":717,"../../registry":846,"./attributes":1061}],1065:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc"),colorbar:{min:"cmin",max:"cmax"},plot:t("./convert"),moduleType:"trace",name:"mesh3d",basePlotModule:t("../../plots/gl3d"),categories:["gl3d","showLegend"],meta:{}}},{"../../plots/gl3d":805,"./attributes":1061,"./calc":1062,"./convert":1063,"./defaults":1064}],1066:[function(t,e,r){"use strict";var n=t("../../lib").extendFlat,a=t("../scatter/attributes"),i=t("../../components/drawing/attributes").dash,o=t("../../components/fx/attributes"),s=t("../../constants/delta.js"),l=s.INCREASING.COLOR,c=s.DECREASING.COLOR,u=a.line;function h(t){return{line:{color:n({},u.color,{dflt:t}),width:u.width,dash:i,editType:"style"},editType:"style"}}e.exports={x:{valType:"data_array",editType:"calc+clearAxisTypes"},open:{valType:"data_array",editType:"calc"},high:{valType:"data_array",editType:"calc"},low:{valType:"data_array",editType:"calc"},close:{valType:"data_array",editType:"calc"},line:{width:n({},u.width,{}),dash:n({},i,{}),editType:"style"},increasing:h(l),decreasing:h(c),text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},tickwidth:{valType:"number",min:0,max:.5,dflt:.3,editType:"calc"},hoverlabel:n({},o.hoverlabel,{split:{valType:"boolean",dflt:!1,editType:"style"}})}},{"../../components/drawing/attributes":611,"../../components/fx/attributes":621,"../../constants/delta.js":687,"../../lib":717,"../scatter/attributes":1120}],1067:[function(t,e,r){"use strict";var n=t("../../lib"),a=n._,i=t("../../plots/cartesian/axes"),o=t("../../constants/numerical").BADNUM;function s(t,e,r,n){return{o:t,h:e,l:r,c:n}}function l(t,e,r,s,l){for(var c=s.makeCalcdata(e,"open"),u=s.makeCalcdata(e,"high"),h=s.makeCalcdata(e,"low"),f=s.makeCalcdata(e,"close"),p=Array.isArray(e.text),d=Array.isArray(e.hovertext),g=!0,v=null,m=[],y=0;y<r.length;y++){var x=r[y],b=c[y],_=u[y],w=h[y],k=f[y];if(x!==o&&b!==o&&_!==o&&w!==o&&k!==o){k===b?null!==v&&k!==v&&(g=k>v):g=k>b,v=k;var T=l(b,_,w,k);T.pos=x,T.yc=(b+k)/2,T.i=y,T.dir=g?"increasing":"decreasing",T.x=T.pos,T.y=[w,_],p&&(T.tx=e.text[y]),d&&(T.htx=e.hovertext[y]),m.push(T)}else m.push({pos:x,empty:!0})}return e._extremes[s._id]=i.findExtremes(s,n.concat(h,u),{padded:!0}),m.length&&(m[0].t={labels:{open:a(t,"open:")+" ",high:a(t,"high:")+" ",low:a(t,"low:")+" ",close:a(t,"close:")+" "}}),m}e.exports={calc:function(t,e){var r=i.getFromId(t,e.xaxis),a=i.getFromId(t,e.yaxis),o=function(t,e,r){var a=r._minDiff;if(!a){var i,o=t._fullData,s=[];for(a=1/0,i=0;i<o.length;i++){var l=o[i];if("ohlc"===l.type&&!0===l.visible&&l.xaxis===e._id){s.push(l);var c=e.makeCalcdata(l,"x");l._xcalc=c;var u=n.distinctVals(c).minDiff;u&&isFinite(u)&&(a=Math.min(a,u))}}for(a===1/0&&(a=1),i=0;i<s.length;i++)s[i]._minDiff=a}return a*r.tickwidth}(t,r,e),c=e._minDiff;e._minDiff=null;var u=e._xcalc;e._xcalc=null;var h=l(t,e,u,a,s);return e._extremes[r._id]=i.findExtremes(r,u,{vpad:c/2}),h.length?(n.extendFlat(h[0].t,{wHover:c/2,tickLen:o}),h):[{t:{empty:!0}}]},calcCommon:l}},{"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/axes":765}],1068:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./ohlc_defaults"),i=t("./attributes");function o(t,e,r,n){r(n+".line.color"),r(n+".line.width",e.line.width),r(n+".line.dash",e.line.dash)}e.exports=function(t,e,r,s){function l(r,a){return n.coerce(t,e,i,r,a)}a(t,e,l,s)?(l("line.width"),l("line.dash"),o(t,e,l,"increasing"),o(t,e,l,"decreasing"),l("text"),l("hovertext"),l("tickwidth"),s._requestRangeslider[e.xaxis]=!0):e.visible=!1}},{"../../lib":717,"./attributes":1066,"./ohlc_defaults":1071}],1069:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../lib"),i=t("../../components/fx"),o=t("../../components/color"),s=t("../../lib").fillText,l=t("../../constants/delta.js"),c={increasing:l.INCREASING.SYMBOL,decreasing:l.DECREASING.SYMBOL};function u(t,e,r,n){var a,s,l=t.cd,c=t.xa,u=l[0].trace,h=l[0].t,f=u.type,p="ohlc"===f?"l":"min",d="ohlc"===f?"h":"max",g=h.bPos||0,v=function(t){return t.pos+g-e},m=h.bdPos||h.tickLen,y=h.wHover,x=Math.min(1,m/Math.abs(c.r2c(c.range[1])-c.r2c(c.range[0])));function b(t){var e=v(t);return i.inbox(e-y,e+y,a)}function _(t){var e=t[p],n=t[d];return e===n||i.inbox(e-r,n-r,a)}function w(t){return(b(t)+_(t))/2}a=t.maxHoverDistance-x,s=t.maxSpikeDistance-x;var k=i.getDistanceFunction(n,b,_,w);if(i.getClosest(l,k,t),!1===t.index)return null;var T=l[t.index];if(T.empty)return null;var M=u[T.dir],A=M.line.color;return o.opacity(A)&&M.line.width?t.color=A:t.color=M.fillcolor,t.x0=c.c2p(T.pos+g-m,!0),t.x1=c.c2p(T.pos+g+m,!0),t.xLabelVal=T.pos,t.spikeDistance=w(T)*s/a,t.xSpike=c.c2p(T.pos,!0),t}function h(t,e,r,i){var o=t.cd,s=t.ya,l=o[0].trace,c=o[0].t,h=[],f=u(t,e,r,i);if(!f)return[];var p=o[f.index].hi||l.hoverinfo,d=p.split("+");if(!("all"===p||-1!==d.indexOf("y")))return[];for(var g=["high","open","close","low"],v={},m=0;m<g.length;m++){var y,x=g[m],b=l[x][f.index],_=s.c2p(b,!0);b in v?(y=v[b]).yLabel+="<br>"+c.labels[x]+n.hoverLabelText(s,b):((y=a.extendFlat({},f)).y0=y.y1=_,y.yLabelVal=b,y.yLabel=c.labels[x]+n.hoverLabelText(s,b),y.name="",h.push(y),v[b]=y)}return h}function f(t,e,r,a){var i=t.cd,o=t.ya,l=i[0].trace,h=i[0].t,f=u(t,e,r,a);if(!f)return[];var p=i[f.index],d=f.index=p.i,g=p.dir;function v(t){return h.labels[t]+n.hoverLabelText(o,l[t][d])}var m=p.hi||l.hoverinfo,y=m.split("+"),x="all"===m,b=x||-1!==y.indexOf("y"),_=x||-1!==y.indexOf("text"),w=b?[v("open"),v("high"),v("low"),v("close")+" "+c[g]]:[];return _&&s(p,l,w),f.extraText=w.join("<br>"),f.y0=f.y1=o.c2p(p.yc,!0),[f]}e.exports={hoverPoints:function(t,e,r,n){return t.cd[0].trace.hoverlabel.split?h(t,e,r,n):f(t,e,r,n)},hoverSplit:h,hoverOnPoints:f}},{"../../components/color":591,"../../components/fx":630,"../../constants/delta.js":687,"../../lib":717,"../../plots/cartesian/axes":765}],1070:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"ohlc",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","showLegend"],meta:{},attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc").calc,plot:t("./plot"),style:t("./style"),hoverPoints:t("./hover").hoverPoints,selectPoints:t("./select")}},{"../../plots/cartesian":776,"./attributes":1066,"./calc":1067,"./defaults":1068,"./hover":1069,"./plot":1072,"./select":1073,"./style":1074}],1071:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib");e.exports=function(t,e,r,i){var o=r("x"),s=r("open"),l=r("high"),c=r("low"),u=r("close");if(r("hoverlabel.split"),n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x"],i),s&&l&&c&&u){var h=Math.min(s.length,l.length,c.length,u.length);return o&&(h=Math.min(h,a.minRowLength(o))),e._length=h,h}}},{"../../lib":717,"../../registry":846}],1072:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib");e.exports=function(t,e,r,i){var o=e.xaxis,s=e.yaxis;a.makeTraceGroups(i,r,"trace ohlc").each(function(t){var e=n.select(this),r=t[0],i=r.t;if(!0!==r.trace.visible||i.empty)e.remove();else{var l=i.tickLen,c=e.selectAll("path").data(a.identity);c.enter().append("path"),c.exit().remove(),c.attr("d",function(t){if(t.empty)return"M0,0Z";var e=o.c2p(t.pos,!0),r=o.c2p(t.pos-l,!0),n=o.c2p(t.pos+l,!0);return"M"+r+","+s.c2p(t.o,!0)+"H"+e+"M"+e+","+s.c2p(t.h,!0)+"V"+s.c2p(t.l,!0)+"M"+n+","+s.c2p(t.c,!0)+"H"+e})}})}},{"../../lib":717,d3:165}],1073:[function(t,e,r){"use strict";e.exports=function(t,e){var r,n=t.cd,a=t.xaxis,i=t.yaxis,o=[],s=n[0].t.bPos||0;if(!1===e)for(r=0;r<n.length;r++)n[r].selected=0;else for(r=0;r<n.length;r++){var l=n[r];e.contains([a.c2p(l.pos+s),i.c2p(l.yc)],null,l.i,t)?(o.push({pointNumber:l.i,x:a.c2d(l.pos),y:i.c2d(l.yc)}),l.selected=1):l.selected=0}return o}},{}],1074:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/drawing"),i=t("../../components/color");e.exports=function(t,e,r){var o=r||n.select(t).selectAll("g.ohlclayer").selectAll("g.trace");o.style("opacity",function(t){return t[0].trace.opacity}),o.each(function(t){var e=t[0].trace;n.select(this).selectAll("path").each(function(t){if(!t.empty){var r=e[t.dir].line;n.select(this).style("fill","none").call(i.stroke,r.color).call(a.dashLine,r.dash,r.width).style("opacity",e.selectedpoints&&!t.selected?.3:1)}})})}},{"../../components/color":591,"../../components/drawing":612,d3:165}],1075:[function(t,e,r){"use strict";var n=t("../../lib/extend").extendFlat,a=t("../../plots/attributes"),i=t("../../plots/font_attributes"),o=t("../../components/colorscale/attributes"),s=t("../../plots/template_attributes").hovertemplateAttrs,l=t("../../plots/domain").attributes,c=n({editType:"calc"},o("line",{editTypeOverride:"calc"}),{shape:{valType:"enumerated",values:["linear","hspline"],dflt:"linear",editType:"plot"},hovertemplate:s({editType:"plot",arrayOk:!1},{keys:["count","probability"]})});e.exports={domain:l({name:"parcats",trace:!0,editType:"calc"}),hoverinfo:n({},a.hoverinfo,{flags:["count","probability"],editType:"plot",arrayOk:!1}),hoveron:{valType:"enumerated",values:["category","color","dimension"],dflt:"category",editType:"plot"},hovertemplate:s({editType:"plot",arrayOk:!1},{keys:["count","probability","category","categorycount","colorcount","bandcolorcount"]}),arrangement:{valType:"enumerated",values:["perpendicular","freeform","fixed"],dflt:"perpendicular",editType:"plot"},bundlecolors:{valType:"boolean",dflt:!0,editType:"plot"},sortpaths:{valType:"enumerated",values:["forward","backward"],dflt:"forward",editType:"plot"},labelfont:i({editType:"calc"}),tickfont:i({editType:"calc"}),dimensions:{_isLinkedToArray:"dimension",label:{valType:"string",editType:"calc"},categoryorder:{valType:"enumerated",values:["trace","category ascending","category descending","array"],dflt:"trace",editType:"calc"},categoryarray:{valType:"data_array",editType:"calc"},ticktext:{valType:"data_array",editType:"calc"},values:{valType:"data_array",dflt:[],editType:"calc"},displayindex:{valType:"integer",editType:"calc"},editType:"calc",visible:{valType:"boolean",dflt:!0,editType:"calc"}},line:c,counts:{valType:"number",min:0,dflt:1,arrayOk:!0,editType:"calc"},customdata:void 0,hoverlabel:void 0,ids:void 0,legendgroup:void 0,opacity:void 0,selectedpoints:void 0,showlegend:void 0}},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/domain":790,"../../plots/font_attributes":791,"../../plots/template_attributes":841}],1076:[function(t,e,r){"use strict";var n=t("../../plots/get_data").getModuleCalcData,a=t("./plot");r.name="parcats",r.plot=function(t,e,r,i){var o=n(t.calcdata,"parcats");if(o.length){var s=o[0];a(t,s,r,i)}},r.clean=function(t,e,r,n){var a=n._has&&n._has("parcats"),i=e._has&&e._has("parcats");a&&!i&&n._paperdiv.selectAll(".parcats").remove()}},{"../../plots/get_data":800,"./plot":1081}],1077:[function(t,e,r){"use strict";var n=t("../../lib/gup").wrap,a=t("../../components/colorscale/helpers").hasColorscale,i=t("../../components/colorscale/calc"),o=t("../../lib/filter_unique.js"),s=t("../../components/drawing"),l=t("../../lib");function c(t,e,r){t.valueInds.push(e),t.count+=r}function u(t,e,r){return{categoryInds:t,color:e,rawColor:r,valueInds:[],count:0}}function h(t,e,r){t.valueInds.push(e),t.count+=r}e.exports=function(t,e){var r=l.filterVisible(e.dimensions);if(0===r.length)return[];var f,p,d,g=r.map(function(t){var e;return"trace"===t.categoryorder?e=null:"array"===t.categoryorder?e=t.categoryarray:(e=o(t.values).sort(),"category descending"===t.categoryorder&&(e=e.reverse())),function(t,e){e=null==e?[]:e.map(function(t){return t});var r={},n={},a=[];e.forEach(function(t,e){r[t]=0,n[t]=e});for(var i=0;i<t.length;i++){var o,s=t[i];void 0===r[s]?(r[s]=1,o=e.push(s)-1,n[s]=o):(r[s]++,o=n[s]),a.push(o)}var l=e.map(function(t){return r[t]});return{uniqueValues:e,uniqueCounts:l,inds:a}}(t.values,e)});f=l.isArrayOrTypedArray(e.counts)?e.counts:[e.counts],function(t){var e;if(function(t){for(var e=new Array(t.length),r=0;r<t.length;r++){if(t[r]<0||t[r]>=t.length)return!1;if(void 0!==e[t[r]])return!1;e[t[r]]=!0}return!0}(t.map(function(t){return t.displayindex})))for(e=0;e<t.length;e++)t[e]._displayindex=t[e].displayindex;else for(e=0;e<t.length;e++)t[e]._displayindex=e}(r),r.forEach(function(t,e){!function(t,e){t._categoryarray=e.uniqueValues,null===t.ticktext||void 0===t.ticktext?t._ticktext=[]:t._ticktext=t.ticktext.slice();for(var r=t._ticktext.length;r<e.uniqueValues.length;r++)t._ticktext.push(e.uniqueValues[r])}(t,g[e])});var v,m=e.line;m?(a(e,"line")&&i(t,e,{vals:e.line.color,containerStr:"line",cLetter:"c"}),v=s.tryColorscale(m)):v=l.identity;var y,x,b,_,w,k=r[0].values.length,T={},M=g.map(function(t){return t.inds});for(d=0,y=0;y<k;y++){var A=[];for(x=0;x<M.length;x++)A.push(M[x][y]);p=f[y%f.length],d+=p;var S=(b=y,_=void 0,w=void 0,l.isArrayOrTypedArray(m.color)?w=_=m.color[b%m.color.length]:_=m.color,{color:v(_),rawColor:w}),E=A+"-"+S.rawColor;void 0===T[E]&&(T[E]=u(A,S.color,S.rawColor)),h(T[E],y,p)}var L,C=r.map(function(t,e){return r=e,n=t._index,a=t._displayindex,i=t.label,{dimensionInd:r,containerInd:n,displayInd:a,dimensionLabel:i,count:d,categories:[],dragX:null};var r,n,a,i});for(y=0;y<k;y++)for(p=f[y%f.length],x=0;x<C.length;x++){var P=C[x].containerInd,O=g[x].inds[y],z=C[x].categories;if(void 0===z[O]){var I=e.dimensions[P]._categoryarray[O],D=e.dimensions[P]._ticktext[O];z[O]={dimensionInd:x,categoryInd:L=O,categoryValue:I,displayInd:L,categoryLabel:D,valueInds:[],count:0,dragY:null}}c(z[O],y,p)}return n(function(t,e,r){var n=t.map(function(t){return t.categories.length}).reduce(function(t,e){return Math.max(t,e)});return{dimensions:t,paths:e,trace:void 0,maxCats:n,count:r}}(C,T,d))}},{"../../components/colorscale/calc":599,"../../components/colorscale/helpers":602,"../../components/drawing":612,"../../lib":717,"../../lib/filter_unique.js":709,"../../lib/gup":715}],1078:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/colorscale/helpers").hasColorscale,i=t("../../components/colorscale/defaults"),o=t("../../plots/domain").defaults,s=t("../../plots/array_container_defaults"),l=t("./attributes"),c=t("../parcoords/merge_length");function u(t,e){function r(r,a){return n.coerce(t,e,l.dimensions,r,a)}var a=r("values"),i=r("visible");if(a&&a.length||(i=e.visible=!1),i){r("label"),r("displayindex",e._index);var o,s=t.categoryarray,c=Array.isArray(s)&&s.length>0;c&&(o="array");var u=r("categoryorder",o);"array"===u?(r("categoryarray"),r("ticktext")):(delete t.categoryarray,delete t.ticktext),c||"array"!==u||(e.categoryorder="trace")}}e.exports=function(t,e,r,h){function f(r,a){return n.coerce(t,e,l,r,a)}var p=s(t,e,{name:"dimensions",handleItemDefaults:u}),d=function(t,e,r,o,s){s("line.shape"),s("line.hovertemplate");var l=s("line.color",o.colorway[0]);if(a(t,"line")&&n.isArrayOrTypedArray(l)){if(l.length)return s("line.colorscale"),i(t,e,o,s,{prefix:"line.",cLetter:"c"}),l.length;e.line.color=r}return 1/0}(t,e,r,h,f);o(e,h,f),Array.isArray(p)&&p.length||(e.visible=!1),c(e,p,"values",d),f("hoveron"),f("hovertemplate"),f("arrangement"),f("bundlecolors"),f("sortpaths"),f("counts");var g={family:h.font.family,size:Math.round(h.font.size),color:h.font.color};n.coerceFont(f,"labelfont",g);var v={family:h.font.family,size:Math.round(h.font.size/1.2),color:h.font.color};n.coerceFont(f,"tickfont",v)}},{"../../components/colorscale/defaults":601,"../../components/colorscale/helpers":602,"../../lib":717,"../../plots/array_container_defaults":761,"../../plots/domain":790,"../parcoords/merge_length":1091,"./attributes":1075}],1079:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc"),plot:t("./plot"),colorbar:{container:"line",min:"cmin",max:"cmax"},moduleType:"trace",name:"parcats",basePlotModule:t("./base_plot"),categories:["noOpacity"],meta:{}}},{"./attributes":1075,"./base_plot":1076,"./calc":1077,"./defaults":1078,"./plot":1081}],1080:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../plot_api/plot_api"),i=t("../../components/fx"),o=t("../../lib"),s=t("../../components/drawing"),l=t("tinycolor2"),c=t("../../lib/svg_text_utils");function u(t,e,r,a){var i=t.map(function(t,e,r){var n,a=r[0],i=e.margin||{l:80,r:80,t:100,b:80},o=a.trace,s=o.domain,l=e.width,c=e.height,u=Math.floor(l*(s.x[1]-s.x[0])),h=Math.floor(c*(s.y[1]-s.y[0])),f=s.x[0]*l+i.l,p=e.height-s.y[1]*e.height+i.t,d=o.line.shape;n="all"===o.hoverinfo?["count","probability"]:(o.hoverinfo||"").split("+");var g={trace:o,key:o.uid,model:a,x:f,y:p,width:u,height:h,hoveron:o.hoveron,hoverinfoItems:n,arrangement:o.arrangement,bundlecolors:o.bundlecolors,sortpaths:o.sortpaths,labelfont:o.labelfont,categorylabelfont:o.tickfont,pathShape:d,dragDimension:null,margin:i,paths:[],dimensions:[],graphDiv:t,traceSelection:null,pathSelection:null,dimensionSelection:null};a.dimensions&&(F(g),R(g));return g}.bind(0,e,r)),l=a.selectAll("g.parcatslayer").data([null]);l.enter().append("g").attr("class","parcatslayer").style("pointer-events","all");var u=l.selectAll("g.trace.parcats").data(i,h),v=u.enter().append("g").attr("class","trace parcats");u.attr("transform",function(t){return"translate("+t.x+", "+t.y+")"}),v.append("g").attr("class","paths");var m=u.select("g.paths").selectAll("path.path").data(function(t){return t.paths},h);m.attr("fill",function(t){return t.model.color});var b=m.enter().append("path").attr("class","path").attr("stroke-opacity",0).attr("fill",function(t){return t.model.color}).attr("fill-opacity",0);x(b),m.attr("d",function(t){return t.svgD}),b.empty()||m.sort(p),m.exit().remove(),m.on("mouseover",d).on("mouseout",g).on("click",y),v.append("g").attr("class","dimensions");var k=u.select("g.dimensions").selectAll("g.dimension").data(function(t){return t.dimensions},h);k.enter().append("g").attr("class","dimension"),k.attr("transform",function(t){return"translate("+t.x+", 0)"}),k.exit().remove();var T=k.selectAll("g.category").data(function(t){return t.categories},h),M=T.enter().append("g").attr("class","category");T.attr("transform",function(t){return"translate(0, "+t.y+")"}),M.append("rect").attr("class","catrect").attr("pointer-events","none"),T.select("rect.catrect").attr("fill","none").attr("width",function(t){return t.width}).attr("height",function(t){return t.height}),_(M);var A=T.selectAll("rect.bandrect").data(function(t){return t.bands},h);A.each(function(){o.raiseToTop(this)}),A.attr("fill",function(t){return t.color});var O=A.enter().append("rect").attr("class","bandrect").attr("stroke-opacity",0).attr("fill",function(t){return t.color}).attr("fill-opacity",0);A.attr("fill",function(t){return t.color}).attr("width",function(t){return t.width}).attr("height",function(t){return t.height}).attr("y",function(t){return t.y}).attr("cursor",function(t){return"fixed"===t.parcatsViewModel.arrangement?"default":"perpendicular"===t.parcatsViewModel.arrangement?"ns-resize":"move"}),w(O),A.exit().remove(),M.append("text").attr("class","catlabel").attr("pointer-events","none");var z=e._fullLayout.paper_bgcolor;T.select("text.catlabel").attr("text-anchor",function(t){return f(t)?"start":"end"}).attr("alignment-baseline","middle").style("text-shadow",z+" -1px 1px 2px, "+z+" 1px 1px 2px, "+z+" 1px -1px 2px, "+z+" -1px -1px 2px").style("fill","rgb(0, 0, 0)").attr("x",function(t){return f(t)?t.width+5:-5}).attr("y",function(t){return t.height/2}).text(function(t){return t.model.categoryLabel}).each(function(t){s.font(n.select(this),t.parcatsViewModel.categorylabelfont),c.convertToTspans(n.select(this),e)}),M.append("text").attr("class","dimlabel"),T.select("text.dimlabel").attr("text-anchor","middle").attr("alignment-baseline","baseline").attr("cursor",function(t){return"fixed"===t.parcatsViewModel.arrangement?"default":"ew-resize"}).attr("x",function(t){return t.width/2}).attr("y",-5).text(function(t,e){return 0===e?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null}).each(function(t){s.font(n.select(this),t.parcatsViewModel.labelfont)}),T.selectAll("rect.bandrect").on("mouseover",S).on("mouseout",E),T.exit().remove(),k.call(n.behavior.drag().origin(function(t){return{x:t.x,y:0}}).on("dragstart",L).on("drag",C).on("dragend",P)),u.each(function(t){t.traceSelection=n.select(this),t.pathSelection=n.select(this).selectAll("g.paths").selectAll("path.path"),t.dimensionSelection=n.select(this).selectAll("g.dimensions").selectAll("g.dimension")}),u.exit().remove()}function h(t){return t.key}function f(t){var e=t.parcatsViewModel.dimensions.length,r=t.parcatsViewModel.dimensions[e-1].model.dimensionInd;return t.model.dimensionInd===r}function p(t,e){return t.model.rawColor>e.model.rawColor?1:t.model.rawColor<e.model.rawColor?-1:0}function d(t){if(!t.parcatsViewModel.dragDimension&&-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip")){o.raiseToTop(this),b(n.select(this));var e=v(t),r=m(t);if(t.parcatsViewModel.graphDiv.emit("plotly_hover",{points:e,event:n.event,constraints:r}),-1===t.parcatsViewModel.hoverinfoItems.indexOf("none")){var a,s,c,u=n.mouse(this)[0],h=t.parcatsViewModel.graphDiv,f=t.parcatsViewModel.trace,p=h._fullLayout,d=p._paperdiv.node().getBoundingClientRect(),g=t.parcatsViewModel.graphDiv.getBoundingClientRect();for(c=0;c<t.leftXs.length-1;c++)if(t.leftXs[c]+t.dimWidths[c]-2<=u&&u<=t.leftXs[c+1]+2){var y=t.parcatsViewModel.dimensions[c],x=t.parcatsViewModel.dimensions[c+1];a=(y.x+y.width+x.x)/2,s=(t.topYs[c]+t.topYs[c+1]+t.height)/2;break}var _=t.parcatsViewModel.x+a,w=t.parcatsViewModel.y+s,k=l.mostReadable(t.model.color,["black","white"]),T=t.model.count,M=T/t.parcatsViewModel.model.count,A={countLabel:T,probabilityLabel:M.toFixed(3)},S=[];-1!==t.parcatsViewModel.hoverinfoItems.indexOf("count")&&S.push(["Count:",A.countLabel].join(" ")),-1!==t.parcatsViewModel.hoverinfoItems.indexOf("probability")&&S.push(["P:",A.probabilityLabel].join(" "));var E=S.join("<br>"),L=n.mouse(h)[0];i.loneHover({trace:f,x:_-d.left+g.left,y:w-d.top+g.top,text:E,color:t.model.color,borderColor:"black",fontFamily:'Monaco, "Courier New", monospace',fontSize:10,fontColor:k,idealAlign:L<_?"right":"left",hovertemplate:(f.line||{}).hovertemplate,hovertemplateLabels:A,eventData:[{data:f._input,fullData:f,count:T,probability:M}]},{container:p._hoverlayer.node(),outerContainer:p._paper.node(),gd:h})}}}function g(t){if(!t.parcatsViewModel.dragDimension&&(x(n.select(this)),i.loneUnhover(t.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()),t.parcatsViewModel.pathSelection.sort(p),-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip"))){var e=v(t),r=m(t);t.parcatsViewModel.graphDiv.emit("plotly_unhover",{points:e,event:n.event,constraints:r})}}function v(t){for(var e=[],r=O(t.parcatsViewModel),n=0;n<t.model.valueInds.length;n++){var a=t.model.valueInds[n];e.push({curveNumber:r,pointNumber:a})}return e}function m(t){for(var e={},r=t.parcatsViewModel.model.dimensions,n=0;n<r.length;n++){var a=r[n],i=a.categories[t.model.categoryInds[n]];e[a.containerInd]=i.categoryValue}return void 0!==t.model.rawColor&&(e.color=t.model.rawColor),e}function y(t){if(-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip")){var e=v(t),r=m(t);t.parcatsViewModel.graphDiv.emit("plotly_click",{points:e,event:n.event,constraints:r})}}function x(t){t.attr("fill",function(t){return t.model.color}).attr("fill-opacity",.6).attr("stroke","lightgray").attr("stroke-width",.2).attr("stroke-opacity",1)}function b(t){t.attr("fill-opacity",.8).attr("stroke",function(t){return l.mostReadable(t.model.color,["black","white"])}).attr("stroke-width",.3)}function _(t){t.select("rect.catrect").attr("stroke","black").attr("stroke-width",1).attr("stroke-opacity",1)}function w(t){t.attr("stroke","black").attr("stroke-width",.2).attr("stroke-opacity",1).attr("fill-opacity",1)}function k(t){var e=t.parcatsViewModel.pathSelection,r=t.categoryViewModel.model.dimensionInd,n=t.categoryViewModel.model.categoryInd;return e.filter(function(e){return e.model.categoryInds[r]===n&&e.model.color===t.color})}function T(t,e,r){var a=n.select(t).datum(),i=a.categoryViewModel.model,o=a.parcatsViewModel.graphDiv,s=n.select(t.parentNode).selectAll("rect.bandrect"),l=[];s.each(function(t){k(t).each(function(t){Array.prototype.push.apply(l,v(t))})});var c={};c[i.dimensionInd]=i.categoryValue,o.emit(e,{points:l,event:r,constraints:c})}function M(t,e,r){var a=n.select(t).datum(),i=a.categoryViewModel.model,o=a.parcatsViewModel.graphDiv,s=k(a),l=[];s.each(function(t){Array.prototype.push.apply(l,v(t))});var c={};c[i.dimensionInd]=i.categoryValue,void 0!==a.rawColor&&(c.color=a.rawColor),o.emit(e,{points:l,event:r,constraints:c})}function A(t,e){var r,a,i=n.select(e.parentNode).select("rect.catrect"),o=i.node().getBoundingClientRect(),s=i.datum(),l=s.parcatsViewModel,c=l.model.dimensions[s.model.dimensionInd],u=l.trace,h=o.top+o.height/2;l.dimensions.length>1&&c.displayInd===l.dimensions.length-1?(r=o.left,a="left"):(r=o.left+o.width,a="right");var f=s.model.count,p=s.model.categoryLabel,d=f/s.parcatsViewModel.model.count,g={countLabel:f,categoryLabel:p,probabilityLabel:d.toFixed(3)},v=[];-1!==s.parcatsViewModel.hoverinfoItems.indexOf("count")&&v.push(["Count:",g.countLabel].join(" ")),-1!==s.parcatsViewModel.hoverinfoItems.indexOf("probability")&&v.push(["P("+g.categoryLabel+"):",g.probabilityLabel].join(" "));var m=v.join("<br>");return{trace:u,x:r-t.left,y:h-t.top,text:m,color:"lightgray",borderColor:"black",fontFamily:'Monaco, "Courier New", monospace',fontSize:12,fontColor:"black",idealAlign:a,hovertemplate:u.hovertemplate,hovertemplateLabels:g,eventData:[{data:u._input,fullData:u,count:f,category:p,probability:d}]}}function S(t){if(!t.parcatsViewModel.dragDimension&&-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip")){if(n.mouse(this)[1]<-1)return;var e,r=t.parcatsViewModel.graphDiv,a=r._fullLayout,s=a._paperdiv.node().getBoundingClientRect(),c=t.parcatsViewModel.hoveron;if("color"===c?(!function(t){var e=n.select(t).datum(),r=k(e);b(r),r.each(function(){o.raiseToTop(this)}),n.select(t.parentNode).selectAll("rect.bandrect").filter(function(t){return t.color===e.color}).each(function(){o.raiseToTop(this),n.select(this).attr("stroke","black").attr("stroke-width",1.5)})}(this),M(this,"plotly_hover",n.event)):(!function(t){n.select(t.parentNode).selectAll("rect.bandrect").each(function(t){var e=k(t);b(e),e.each(function(){o.raiseToTop(this)})}),n.select(t.parentNode).select("rect.catrect").attr("stroke","black").attr("stroke-width",2.5)}(this),T(this,"plotly_hover",n.event)),-1===t.parcatsViewModel.hoverinfoItems.indexOf("none"))"category"===c?e=A(s,this):"color"===c?e=function(t,e){var r,a,i=e.getBoundingClientRect(),o=n.select(e).datum(),s=o.categoryViewModel,c=s.parcatsViewModel,u=c.model.dimensions[s.model.dimensionInd],h=c.trace,f=i.y+i.height/2;c.dimensions.length>1&&u.displayInd===c.dimensions.length-1?(r=i.left,a="left"):(r=i.left+i.width,a="right");var p=s.model.categoryLabel,d=o.parcatsViewModel.model.count,g=0;o.categoryViewModel.bands.forEach(function(t){t.color===o.color&&(g+=t.count)});var v=s.model.count,m=0;c.pathSelection.each(function(t){t.model.color===o.color&&(m+=t.model.count)});var y=g/d,x=g/m,b=g/v,_={countLabel:d,categoryLabel:p,probabilityLabel:y.toFixed(3)},w=[];-1!==s.parcatsViewModel.hoverinfoItems.indexOf("count")&&w.push(["Count:",_.countLabel].join(" ")),-1!==s.parcatsViewModel.hoverinfoItems.indexOf("probability")&&(w.push("P(color \u2229 "+p+"): "+_.probabilityLabel),w.push("P("+p+" | color): "+x.toFixed(3)),w.push("P(color | "+p+"): "+b.toFixed(3)));var k=w.join("<br>"),T=l.mostReadable(o.color,["black","white"]);return{trace:h,x:r-t.left,y:f-t.top,text:k,color:o.color,borderColor:"black",fontFamily:'Monaco, "Courier New", monospace',fontColor:T,fontSize:10,idealAlign:a,hovertemplate:h.hovertemplate,hovertemplateLabels:_,eventData:[{data:h._input,fullData:h,category:p,count:d,probability:y,categorycount:v,colorcount:m,bandcolorcount:g}]}}(s,this):"dimension"===c&&(e=function(t,e){var r=[];return n.select(e.parentNode.parentNode).selectAll("g.category").select("rect.catrect").each(function(){r.push(A(t,this))}),r}(s,this)),e&&i.loneHover(e,{container:a._hoverlayer.node(),outerContainer:a._paper.node(),gd:r})}}function E(t){var e=t.parcatsViewModel;if(!e.dragDimension&&(x(e.pathSelection),_(e.dimensionSelection.selectAll("g.category")),w(e.dimensionSelection.selectAll("g.category").selectAll("rect.bandrect")),i.loneUnhover(e.graphDiv._fullLayout._hoverlayer.node()),e.pathSelection.sort(p),-1===e.hoverinfoItems.indexOf("skip"))){"color"===t.parcatsViewModel.hoveron?M(this,"plotly_unhover",n.event):T(this,"plotly_unhover",n.event)}}function L(t){"fixed"!==t.parcatsViewModel.arrangement&&(t.dragDimensionDisplayInd=t.model.displayInd,t.initialDragDimensionDisplayInds=t.parcatsViewModel.model.dimensions.map(function(t){return t.displayInd}),t.dragHasMoved=!1,t.dragCategoryDisplayInd=null,n.select(this).selectAll("g.category").select("rect.catrect").each(function(e){var r=n.mouse(this)[0],a=n.mouse(this)[1];-2<=r&&r<=e.width+2&&-2<=a&&a<=e.height+2&&(t.dragCategoryDisplayInd=e.model.displayInd,t.initialDragCategoryDisplayInds=t.model.categories.map(function(t){return t.displayInd}),e.model.dragY=e.y,o.raiseToTop(this.parentNode),n.select(this.parentNode).selectAll("rect.bandrect").each(function(e){e.y<a&&a<=e.y+e.height&&(t.potentialClickBand=this)}))}),t.parcatsViewModel.dragDimension=t,i.loneUnhover(t.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()))}function C(t){if("fixed"!==t.parcatsViewModel.arrangement&&(t.dragHasMoved=!0,null!==t.dragDimensionDisplayInd)){var e=t.dragDimensionDisplayInd,r=e-1,a=e+1,i=t.parcatsViewModel.dimensions[e];if(null!==t.dragCategoryDisplayInd){var o=i.categories[t.dragCategoryDisplayInd];o.model.dragY+=n.event.dy;var s=o.model.dragY,l=o.model.displayInd,c=i.categories,u=c[l-1],h=c[l+1];void 0!==u&&s<u.y+u.height/2&&(o.model.displayInd=u.model.displayInd,u.model.displayInd=l),void 0!==h&&s+o.height>h.y+h.height/2&&(o.model.displayInd=h.model.displayInd,h.model.displayInd=l),t.dragCategoryDisplayInd=o.model.displayInd}if(null===t.dragCategoryDisplayInd||"freeform"===t.parcatsViewModel.arrangement){i.model.dragX=n.event.x;var f=t.parcatsViewModel.dimensions[r],p=t.parcatsViewModel.dimensions[a];void 0!==f&&i.model.dragX<f.x+f.width&&(i.model.displayInd=f.model.displayInd,f.model.displayInd=e),void 0!==p&&i.model.dragX+i.width>p.x&&(i.model.displayInd=p.model.displayInd,p.model.displayInd=t.dragDimensionDisplayInd),t.dragDimensionDisplayInd=i.model.displayInd}F(t.parcatsViewModel),R(t.parcatsViewModel),I(t.parcatsViewModel),z(t.parcatsViewModel)}}function P(t){if("fixed"!==t.parcatsViewModel.arrangement&&null!==t.dragDimensionDisplayInd){n.select(this).selectAll("text").attr("font-weight","normal");var e={},r=O(t.parcatsViewModel),i=t.parcatsViewModel.model.dimensions.map(function(t){return t.displayInd}),o=t.initialDragDimensionDisplayInds.some(function(t,e){return t!==i[e]});o&&i.forEach(function(r,n){var a=t.parcatsViewModel.model.dimensions[n].containerInd;e["dimensions["+a+"].displayindex"]=r});var s=!1;if(null!==t.dragCategoryDisplayInd){var l=t.model.categories.map(function(t){return t.displayInd});if(s=t.initialDragCategoryDisplayInds.some(function(t,e){return t!==l[e]})){var c=t.model.categories.slice().sort(function(t,e){return t.displayInd-e.displayInd}),u=c.map(function(t){return t.categoryValue}),h=c.map(function(t){return t.categoryLabel});e["dimensions["+t.model.containerInd+"].categoryarray"]=[u],e["dimensions["+t.model.containerInd+"].ticktext"]=[h],e["dimensions["+t.model.containerInd+"].categoryorder"]="array"}}if(-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip")&&!t.dragHasMoved&&t.potentialClickBand&&("color"===t.parcatsViewModel.hoveron?M(t.potentialClickBand,"plotly_click",n.event.sourceEvent):T(t.potentialClickBand,"plotly_click",n.event.sourceEvent)),t.model.dragX=null,null!==t.dragCategoryDisplayInd)t.parcatsViewModel.dimensions[t.dragDimensionDisplayInd].categories[t.dragCategoryDisplayInd].model.dragY=null,t.dragCategoryDisplayInd=null;t.dragDimensionDisplayInd=null,t.parcatsViewModel.dragDimension=null,t.dragHasMoved=null,t.potentialClickBand=null,F(t.parcatsViewModel),R(t.parcatsViewModel),n.transition().duration(300).ease("cubic-in-out").each(function(){I(t.parcatsViewModel,!0),z(t.parcatsViewModel,!0)}).each("end",function(){(o||s)&&a.restyle(t.parcatsViewModel.graphDiv,e,[r])})}}function O(t){for(var e,r=t.graphDiv._fullData,n=0;n<r.length;n++)if(t.key===r[n].uid){e=n;break}return e}function z(t,e){var r;void 0===e&&(e=!1),t.pathSelection.data(function(t){return t.paths},h),(r=t.pathSelection,e?r.transition():r).attr("d",function(t){return t.svgD})}function I(t,e){function r(t){return e?t.transition():t}void 0===e&&(e=!1),t.dimensionSelection.data(function(t){return t.dimensions},h);var a=t.dimensionSelection.selectAll("g.category").data(function(t){return t.categories},h);r(t.dimensionSelection).attr("transform",function(t){return"translate("+t.x+", 0)"}),r(a).attr("transform",function(t){return"translate(0, "+t.y+")"}),a.select(".dimlabel").text(function(t,e){return 0===e?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null}),a.select(".catlabel").attr("text-anchor",function(t){return f(t)?"start":"end"}).attr("x",function(t){return f(t)?t.width+5:-5}).each(function(t){var e,r;f(t)?(e=t.width+5,r="start"):(e=-5,r="end"),n.select(this).selectAll("tspan").attr("x",e).attr("text-anchor",r)});var i=a.selectAll("rect.bandrect").data(function(t){return t.bands},h),s=i.enter().append("rect").attr("class","bandrect").attr("cursor","move").attr("stroke-opacity",0).attr("fill",function(t){return t.color}).attr("fill-opacity",0);i.attr("fill",function(t){return t.color}).attr("width",function(t){return t.width}).attr("height",function(t){return t.height}).attr("y",function(t){return t.y}),w(s),i.each(function(){o.raiseToTop(this)}),i.exit().remove()}function D(t,e,r,a,i){var o,s,l=[],c=[];for(s=0;s<r.length-1;s++)o=n.interpolateNumber(r[s]+t[s],t[s+1]),l.push(o(i)),c.push(o(1-i));var u="M "+t[0]+","+e[0];for(u+="l"+r[0]+",0 ",s=1;s<r.length;s++)u+="C"+l[s-1]+","+e[s-1]+" "+c[s-1]+","+e[s]+" "+t[s]+","+e[s],u+="l"+r[s]+",0 ";for(u+="l0,"+a+" ",u+="l -"+r[r.length-1]+",0 ",s=r.length-2;s>=0;s--)u+="C"+c[s]+","+(e[s+1]+a)+" "+l[s]+","+(e[s]+a)+" "+(t[s]+r[s])+","+(e[s]+a),u+="l-"+r[s]+",0 ";return u+="Z"}function R(t){var e=t.dimensions,r=t.model,n=e.map(function(t){return t.categories.map(function(t){return t.y})}),a=t.model.dimensions.map(function(t){return t.categories.map(function(t){return t.displayInd})}),i=t.model.dimensions.map(function(t){return t.displayInd}),o=t.dimensions.map(function(t){return t.model.dimensionInd}),s=e.map(function(t){return t.x}),l=e.map(function(t){return t.width}),c=[];for(var u in r.paths)r.paths.hasOwnProperty(u)&&c.push(r.paths[u]);function h(t){var e=t.categoryInds.map(function(t,e){return a[e][t]});return o.map(function(t){return e[t]})}c.sort(function(e,r){var n=h(e),a=h(r);return"backward"===t.sortpaths&&(n.reverse(),a.reverse()),n.push(e.valueInds[0]),a.push(r.valueInds[0]),t.bundlecolors&&(n.unshift(e.rawColor),a.unshift(r.rawColor)),n<a?-1:n>a?1:0});for(var f=new Array(c.length),p=e[0].model.count,d=e[0].categories.map(function(t){return t.height}).reduce(function(t,e){return t+e}),g=0;g<c.length;g++){var v,m=c[g];v=p>0?d*(m.count/p):0;for(var y,x=new Array(n.length),b=0;b<m.categoryInds.length;b++){var _=m.categoryInds[b],w=a[b][_],k=i[b];x[k]=n[k][w],n[k][w]+=v;var T=t.dimensions[k].categories[w],M=T.bands.length,A=T.bands[M-1];if(void 0===A||m.rawColor!==A.rawColor){var S=void 0===A?0:A.y+A.height;T.bands.push({key:S,color:m.color,rawColor:m.rawColor,height:v,width:T.width,count:m.count,y:S,categoryViewModel:T,parcatsViewModel:t})}else{var E=T.bands[M-1];E.height+=v,E.count+=m.count}}y="hspline"===t.pathShape?D(s,x,l,v,.5):D(s,x,l,v,0),f[g]={key:m.valueInds[0],model:m,height:v,leftXs:s,topYs:x,dimWidths:l,svgD:y,parcatsViewModel:t}}t.paths=f}function F(t){var e=t.model.dimensions.map(function(t){return{displayInd:t.displayInd,dimensionInd:t.dimensionInd}});e.sort(function(t,e){return t.displayInd-e.displayInd});var r=[];for(var n in e){var a=e[n].dimensionInd,i=t.model.dimensions[a];r.push(B(t,i))}t.dimensions=r}function B(t,e){var r,n=t.model.dimensions.length,a=e.displayInd;r=40+(n>1?(t.width-80-16)/(n-1):0)*a;var i,o,s,l,c,u=[],h=t.model.maxCats,f=e.categories.length,p=e.count,d=t.height-8*(h-1),g=8*(h-f)/2,v=e.categories.map(function(t){return{displayInd:t.displayInd,categoryInd:t.categoryInd}});for(v.sort(function(t,e){return t.displayInd-e.displayInd}),c=0;c<f;c++)l=v[c].categoryInd,o=e.categories[l],i=p>0?o.count/p*d:0,s={key:o.valueInds[0],model:o,width:16,height:i,y:null!==o.dragY?o.dragY:g,bands:[],parcatsViewModel:t},g=g+i+8,u.push(s);return{key:e.dimensionInd,x:null!==e.dragX?e.dragX:r,y:0,width:16,model:e,categories:u,parcatsViewModel:t,dragCategoryDisplayInd:null,dragDimensionDisplayInd:null,initialDragDimensionDisplayInds:null,initialDragCategoryDisplayInds:null,dragHasMoved:null,potentialClickBand:null}}e.exports=function(t,e,r,n){u(r,t,n,e)}},{"../../components/drawing":612,"../../components/fx":630,"../../lib":717,"../../lib/svg_text_utils":741,"../../plot_api/plot_api":752,d3:165,tinycolor2:535}],1081:[function(t,e,r){"use strict";var n=t("./parcats");e.exports=function(t,e,r,a){var i=t._fullLayout,o=i._paper,s=i._size;n(t,o,e,{width:s.w,height:s.h,margin:{t:s.t,r:s.r,b:s.b,l:s.l}},r,a)}},{"./parcats":1080}],1082:[function(t,e,r){"use strict";var n=t("../../components/colorscale/attributes"),a=t("../../plots/cartesian/layout_attributes"),i=t("../../plots/font_attributes"),o=t("../../plots/domain").attributes,s=t("../../lib/extend").extendFlat,l=t("../../plot_api/plot_template").templatedArray;e.exports={domain:o({name:"parcoords",trace:!0,editType:"plot"}),labelangle:{valType:"angle",dflt:0,editType:"plot"},labelside:{valType:"enumerated",values:["top","bottom"],dflt:"top",editType:"plot"},labelfont:i({editType:"plot"}),tickfont:i({editType:"plot"}),rangefont:i({editType:"plot"}),dimensions:l("dimension",{label:{valType:"string",editType:"plot"},tickvals:s({},a.tickvals,{editType:"plot"}),ticktext:s({},a.ticktext,{editType:"plot"}),tickformat:s({},a.tickformat,{editType:"plot"}),visible:{valType:"boolean",dflt:!0,editType:"plot"},range:{valType:"info_array",items:[{valType:"number",editType:"plot"},{valType:"number",editType:"plot"}],editType:"plot"},constraintrange:{valType:"info_array",freeLength:!0,dimensions:"1-2",items:[{valType:"number",editType:"plot"},{valType:"number",editType:"plot"}],editType:"plot"},multiselect:{valType:"boolean",dflt:!0,editType:"plot"},values:{valType:"data_array",editType:"calc"},editType:"calc"}),line:s({editType:"calc"},n("line",{colorscaleDflt:"Viridis",autoColorDflt:!1,editTypeOverride:"calc"}))}},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plot_api/plot_template":755,"../../plots/cartesian/layout_attributes":777,"../../plots/domain":790,"../../plots/font_attributes":791}],1083:[function(t,e,r){"use strict";var n=t("./constants"),a=t("d3"),i=t("../../lib/gup").keyFun,o=t("../../lib/gup").repeat,s=t("../../lib").sorterAsc,l=n.bar.snapRatio;function c(t,e){return t*(1-l)+e*l}var u=n.bar.snapClose;function h(t,e){return t*(1-u)+e*u}function f(t,e,r,n){if(function(t,e){for(var r=0;r<e.length;r++)if(t>=e[r][0]&&t<=e[r][1])return!0;return!1}(r,n))return r;var a=t?-1:1,i=0,o=e.length-1;if(a<0){var s=i;i=o,o=s}for(var l=e[i],u=l,f=i;a*f<a*o;f+=a){var p=f+a,d=e[p];if(a*r<a*h(l,d))return c(l,u);if(a*r<a*d||p===o)return c(d,l);u=l,l=d}}function p(t){t.attr("x",-n.bar.captureWidth/2).attr("width",n.bar.captureWidth)}function d(t){t.attr("visibility","visible").style("visibility","visible").attr("fill","yellow").attr("opacity",0)}function g(t){if(!t.brush.filterSpecified)return"0,"+t.height;for(var e,r,n,a=v(t.brush.filter.getConsolidated(),t.height),i=[0],o=a.length?a[0][0]:null,s=0;s<a.length;s++)r=(e=a[s])[1]-e[0],i.push(o),i.push(r),(n=s+1)<a.length&&(o=a[n][0]-e[1]);return i.push(t.height),i}function v(t,e){return t.map(function(t){return t.map(function(t){return Math.max(0,t*e)}).sort(s)})}function m(){a.select(document.body).style("cursor",null)}function y(t){t.attr("stroke-dasharray",g)}function x(t,e){var r=a.select(t).selectAll(".highlight, .highlight-shadow");y(e?r.transition().duration(n.bar.snapDuration).each("end",e):r)}function b(t,e){var r,a=t.brush,i=NaN,o={};if(a.filterSpecified){var s=t.height,l=a.filter.getConsolidated(),c=v(l,s),u=NaN,h=NaN,f=NaN;for(r=0;r<=c.length;r++){var p=c[r];if(p&&p[0]<=e&&e<=p[1]){u=r;break}if(h=r?r-1:NaN,p&&p[0]>e){f=r;break}}if(i=u,isNaN(i)&&(i=isNaN(h)||isNaN(f)?isNaN(h)?f:h:e-c[h][1]<c[f][0]-e?h:f),!isNaN(i)){var d=c[i],g=function(t,e){var r=n.bar.handleHeight;if(!(e>t[1]+r||e<t[0]-r))return e>=.9*t[1]+.1*t[0]?"n":e<=.9*t[0]+.1*t[1]?"s":"ns"}(d,e);g&&(o.interval=l[i],o.intervalPix=d,o.region=g)}}if(t.ordinal&&!o.region){var m=t.unitTickvals,y=t.unitToPaddedPx.invert(e);for(r=0;r<m.length;r++){var x=[.25*m[Math.max(r-1,0)]+.75*m[r],.25*m[Math.min(r+1,m.length-1)]+.75*m[r]];if(y>=x[0]&&y<=x[1]){o.clickableOrdinalRange=x;break}}}return o}function _(t,e){a.event.sourceEvent.stopPropagation();var r=e.height-a.mouse(t)[1]-2*n.verticalPadding,i=e.brush.svgBrush;i.wasDragged=!0,i._dragging=!0,i.grabbingBar?i.newExtent=[r-i.grabPoint,r+i.barLength-i.grabPoint].map(e.unitToPaddedPx.invert):i.newExtent=[i.startExtent,e.unitToPaddedPx.invert(r)].sort(s),e.brush.filterSpecified=!0,i.extent=i.stayingIntervals.concat([i.newExtent]),i.brushCallback(e),x(t.parentNode)}function w(t,e){var r=b(e,e.height-a.mouse(t)[1]-2*n.verticalPadding),i="crosshair";r.clickableOrdinalRange?i="pointer":r.region&&(i=r.region+"-resize"),a.select(document.body).style("cursor",i)}function k(t){t.on("mousemove",function(t){a.event.preventDefault(),t.parent.inBrushDrag||w(this,t)}).on("mouseleave",function(t){t.parent.inBrushDrag||m()}).call(a.behavior.drag().on("dragstart",function(t){!function(t,e){a.event.sourceEvent.stopPropagation();var r=e.height-a.mouse(t)[1]-2*n.verticalPadding,i=e.unitToPaddedPx.invert(r),o=e.brush,s=b(e,r),l=s.interval,c=o.svgBrush;if(c.wasDragged=!1,c.grabbingBar="ns"===s.region,c.grabbingBar){var u=l.map(e.unitToPaddedPx);c.grabPoint=r-u[0]-n.verticalPadding,c.barLength=u[1]-u[0]}c.clickableOrdinalRange=s.clickableOrdinalRange,c.stayingIntervals=e.multiselect&&o.filterSpecified?o.filter.getConsolidated():[],l&&(c.stayingIntervals=c.stayingIntervals.filter(function(t){return t[0]!==l[0]&&t[1]!==l[1]})),c.startExtent=s.region?l["s"===s.region?1:0]:i,e.parent.inBrushDrag=!0,c.brushStartCallback()}(this,t)}).on("drag",function(t){_(this,t)}).on("dragend",function(t){!function(t,e){var r=e.brush,n=r.filter,i=r.svgBrush;i._dragging||(w(t,e),_(t,e),e.brush.svgBrush.wasDragged=!1),i._dragging=!1,a.event.sourceEvent.stopPropagation();var o=i.grabbingBar;if(i.grabbingBar=!1,i.grabLocation=void 0,e.parent.inBrushDrag=!1,m(),!i.wasDragged)return i.wasDragged=void 0,i.clickableOrdinalRange?r.filterSpecified&&e.multiselect?i.extent.push(i.clickableOrdinalRange):(i.extent=[i.clickableOrdinalRange],r.filterSpecified=!0):o?(i.extent=i.stayingIntervals,0===i.extent.length&&M(r)):M(r),i.brushCallback(e),x(t.parentNode),void i.brushEndCallback(r.filterSpecified?n.getConsolidated():[]);var s=function(){n.set(n.getConsolidated())};if(e.ordinal){var l=e.unitTickvals;l[l.length-1]<l[0]&&l.reverse(),i.newExtent=[f(0,l,i.newExtent[0],i.stayingIntervals),f(1,l,i.newExtent[1],i.stayingIntervals)];var c=i.newExtent[1]>i.newExtent[0];i.extent=i.stayingIntervals.concat(c?[i.newExtent]:[]),i.extent.length||M(r),i.brushCallback(e),c?x(t.parentNode,s):(s(),x(t.parentNode))}else s();i.brushEndCallback(r.filterSpecified?n.getConsolidated():[])}(this,t)}))}function T(t,e){return t[0]-e[0]}function M(t){t.filterSpecified=!1,t.svgBrush.extent=[[-1/0,1/0]]}function A(t){for(var e,r=t.slice(),n=[],a=r.shift();a;){for(e=a.slice();(a=r.shift())&&a[0]<=e[1];)e[1]=Math.max(e[1],a[1]);n.push(e)}return n}e.exports={makeBrush:function(t,e,r,n,a,i){var o,l=function(){var t,e,r=[];return{set:function(n){1===(r=n.map(function(t){return t.slice().sort(s)}).sort(T)).length&&r[0][0]===-1/0&&r[0][1]===1/0&&(r=[[0,-1]]),t=A(r),e=r.reduce(function(t,e){return[Math.min(t[0],e[0]),Math.max(t[1],e[1])]},[1/0,-1/0])},get:function(){return r.slice()},getConsolidated:function(){return t},getBounds:function(){return e}}}();return l.set(r),{filter:l,filterSpecified:e,svgBrush:{extent:[],brushStartCallback:n,brushCallback:(o=a,function(t){var e=t.brush,r=function(t){return t.svgBrush.extent.map(function(t){return t.slice()})}(e).slice();e.filter.set(r),o()}),brushEndCallback:i}}},ensureAxisBrush:function(t){var e=t.selectAll("."+n.cn.axisBrush).data(o,i);e.enter().append("g").classed(n.cn.axisBrush,!0),function(t){var e=t.selectAll(".background").data(o);e.enter().append("rect").classed("background",!0).call(p).call(d).style("pointer-events","auto").attr("transform","translate(0 "+n.verticalPadding+")"),e.call(k).attr("height",function(t){return t.height-n.verticalPadding});var r=t.selectAll(".highlight-shadow").data(o);r.enter().append("line").classed("highlight-shadow",!0).attr("x",-n.bar.width/2).attr("stroke-width",n.bar.width+n.bar.strokeWidth).attr("stroke",n.bar.strokeColor).attr("opacity",n.bar.strokeOpacity).attr("stroke-linecap","butt"),r.attr("y1",function(t){return t.height}).call(y);var a=t.selectAll(".highlight").data(o);a.enter().append("line").classed("highlight",!0).attr("x",-n.bar.width/2).attr("stroke-width",n.bar.width-n.bar.strokeWidth).attr("stroke",n.bar.fillColor).attr("opacity",n.bar.fillOpacity).attr("stroke-linecap","butt"),a.attr("y1",function(t){return t.height}).call(y)}(e)},cleanRanges:function(t,e){if(Array.isArray(t[0])?(t=t.map(function(t){return t.sort(s)}),t=e.multiselect?A(t.sort(T)):[t[0]]):t=[t.sort(s)],e.tickvals){var r=e.tickvals.slice().sort(s);if(!(t=t.map(function(t){var e=[f(0,r,t[0],[]),f(1,r,t[1],[])];if(e[1]>e[0])return e}).filter(function(t){return t})).length)return}return t.length>1?t:t[0]}}},{"../../lib":717,"../../lib/gup":715,"./constants":1086,d3:165}],1084:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../plots/get_data").getModuleCalcData,i=t("./plot"),o=t("../../constants/xmlns_namespaces");r.name="parcoords",r.plot=function(t){var e=a(t.calcdata,"parcoords")[0];e.length&&i(t,e)},r.clean=function(t,e,r,n){var a=n._has&&n._has("parcoords"),i=e._has&&e._has("parcoords");a&&!i&&(n._paperdiv.selectAll(".parcoords").remove(),n._glimages.selectAll("*").remove())},r.toSVG=function(t){var e=t._fullLayout._glimages,r=n.select(t).selectAll(".svg-container");r.filter(function(t,e){return e===r.size()-1}).selectAll(".gl-canvas-context, .gl-canvas-focus").each(function(){var t=this.toDataURL("image/png");e.append("svg:image").attr({xmlns:o.svg,"xlink:href":t,preserveAspectRatio:"none",x:0,y:0,width:this.width,height:this.height})}),window.setTimeout(function(){n.selectAll("#filterBarPattern").attr("id","filterBarPattern")},60)}},{"../../constants/xmlns_namespaces":694,"../../plots/get_data":800,"./plot":1093,d3:165}],1085:[function(t,e,r){"use strict";var n=t("../../lib").isArrayOrTypedArray,a=t("../../components/colorscale"),i=t("../../lib/gup").wrap;e.exports=function(t,e){var r,o;return a.hasColorscale(e,"line")&&n(e.line.color)?(r=e.line.color,o=a.extractOpts(e.line).colorscale,a.calc(t,e,{vals:r,containerStr:"line",cLetter:"c"})):(r=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=.5;return e}(e._length),o=[[0,e.line.color],[1,e.line.color]]),i({lineColor:r,cscale:o})}},{"../../components/colorscale":603,"../../lib":717,"../../lib/gup":715}],1086:[function(t,e,r){"use strict";e.exports={maxDimensionCount:60,overdrag:45,verticalPadding:2,tickDistance:50,canvasPixelRatio:1,blockLineCount:5e3,layers:["contextLineLayer","focusLineLayer","pickLineLayer"],axisTitleOffset:28,axisExtentOffset:10,deselectedLineColor:"#777",bar:{width:4,captureWidth:10,fillColor:"magenta",fillOpacity:1,snapDuration:150,snapRatio:.25,snapClose:.01,strokeColor:"white",strokeOpacity:1,strokeWidth:1,handleHeight:8,handleOpacity:1,handleOverlap:0},cn:{axisExtentText:"axis-extent-text",parcoordsLineLayers:"parcoords-line-layers",parcoordsLineLayer:"parcoords-lines",parcoords:"parcoords",parcoordsControlView:"parcoords-control-view",yAxis:"y-axis",axisOverlays:"axis-overlays",axis:"axis",axisHeading:"axis-heading",axisTitle:"axis-title",axisExtent:"axis-extent",axisExtentTop:"axis-extent-top",axisExtentTopText:"axis-extent-top-text",axisExtentBottom:"axis-extent-bottom",axisExtentBottomText:"axis-extent-bottom-text",axisBrush:"axis-brush"},id:{filterBarPattern:"filter-bar-pattern"}}},{}],1087:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/colorscale/helpers").hasColorscale,i=t("../../components/colorscale/defaults"),o=t("../../plots/domain").defaults,s=t("../../plots/array_container_defaults"),l=t("../../plots/cartesian/axes"),c=t("./attributes"),u=t("./axisbrush"),h=t("./constants").maxDimensionCount,f=t("./merge_length");function p(t,e,r,a){function i(r,a){return n.coerce(t,e,c.dimensions,r,a)}var o=i("values"),s=i("visible");if(o&&o.length||(s=e.visible=!1),s){i("label"),i("tickvals"),i("ticktext"),i("tickformat");var h=i("range");e._ax={_id:"y",type:"linear",showexponent:"all",exponentformat:"B",range:h},l.setConvert(e._ax,a.layout),i("multiselect");var f=i("constraintrange");f&&(e.constraintrange=u.cleanRanges(f,e))}}e.exports=function(t,e,r,l){function u(r,a){return n.coerce(t,e,c,r,a)}var d=t.dimensions;Array.isArray(d)&&d.length>h&&(n.log("parcoords traces support up to "+h+" dimensions at the moment"),d.splice(h));var g=s(t,e,{name:"dimensions",layout:l,handleItemDefaults:p}),v=function(t,e,r,o,s){var l=s("line.color",r);if(a(t,"line")&&n.isArrayOrTypedArray(l)){if(l.length)return s("line.colorscale"),i(t,e,o,s,{prefix:"line.",cLetter:"c"}),l.length;e.line.color=r}return 1/0}(t,e,r,l,u);o(e,l,u),Array.isArray(g)&&g.length||(e.visible=!1),f(e,g,"values",v);var m={family:l.font.family,size:Math.round(l.font.size/1.2),color:l.font.color};n.coerceFont(u,"labelfont",m),n.coerceFont(u,"tickfont",m),n.coerceFont(u,"rangefont",m),u("labelangle"),u("labelside")}},{"../../components/colorscale/defaults":601,"../../components/colorscale/helpers":602,"../../lib":717,"../../plots/array_container_defaults":761,"../../plots/cartesian/axes":765,"../../plots/domain":790,"./attributes":1082,"./axisbrush":1083,"./constants":1086,"./merge_length":1091}],1088:[function(t,e,r){"use strict";var n=t("../../lib").isTypedArray;r.convertTypedArray=function(t){return n(t)?Array.prototype.slice.call(t):t},r.isOrdinal=function(t){return!!t.tickvals},r.isVisible=function(t){return t.visible||!("visible"in t)}},{"../../lib":717}],1089:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc"),plot:t("./plot"),colorbar:{container:"line",min:"cmin",max:"cmax"},moduleType:"trace",name:"parcoords",basePlotModule:t("./base_plot"),categories:["gl","regl","noOpacity","noHover"],meta:{}}},{"./attributes":1082,"./base_plot":1084,"./calc":1085,"./defaults":1087,"./plot":1093}],1090:[function(t,e,r){"use strict";var n=t("glslify"),a=n(["precision highp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor;\n\nattribute vec4 p01_04, p05_08, p09_12, p13_16,\n p17_20, p21_24, p25_28, p29_32,\n p33_36, p37_40, p41_44, p45_48,\n p49_52, p53_56, p57_60, colors;\n\nuniform mat4 dim0A, dim1A, dim0B, dim1B, dim0C, dim1C, dim0D, dim1D,\n loA, hiA, loB, hiB, loC, hiC, loD, hiD;\n\nuniform vec2 resolution, viewBoxPos, viewBoxSize;\nuniform sampler2D mask, palette;\nuniform float maskHeight;\nuniform float drwLayer; // 0: context, 1: focus, 2: pick\nuniform vec4 contextColor;\n\nbool isPick = (drwLayer > 1.5);\nbool isContext = (drwLayer < 0.5);\n\nconst vec4 ZEROS = vec4(0.0, 0.0, 0.0, 0.0);\nconst vec4 UNITS = vec4(1.0, 1.0, 1.0, 1.0);\n\nfloat val(mat4 p, mat4 v) {\n return dot(matrixCompMult(p, v) * UNITS, UNITS);\n}\n\nfloat axisY(float ratio, mat4 A, mat4 B, mat4 C, mat4 D) {\n float y1 = val(A, dim0A) + val(B, dim0B) + val(C, dim0C) + val(D, dim0D);\n float y2 = val(A, dim1A) + val(B, dim1B) + val(C, dim1C) + val(D, dim1D);\n return y1 * (1.0 - ratio) + y2 * ratio;\n}\n\nint iMod(int a, int b) {\n return a - b * (a / b);\n}\n\nbool fOutside(float p, float lo, float hi) {\n return (lo < hi) && (lo > p || p > hi);\n}\n\nbool vOutside(vec4 p, vec4 lo, vec4 hi) {\n return (\n fOutside(p[0], lo[0], hi[0]) ||\n fOutside(p[1], lo[1], hi[1]) ||\n fOutside(p[2], lo[2], hi[2]) ||\n fOutside(p[3], lo[3], hi[3])\n );\n}\n\nbool mOutside(mat4 p, mat4 lo, mat4 hi) {\n return (\n vOutside(p[0], lo[0], hi[0]) ||\n vOutside(p[1], lo[1], hi[1]) ||\n vOutside(p[2], lo[2], hi[2]) ||\n vOutside(p[3], lo[3], hi[3])\n );\n}\n\nbool outsideBoundingBox(mat4 A, mat4 B, mat4 C, mat4 D) {\n return mOutside(A, loA, hiA) ||\n mOutside(B, loB, hiB) ||\n mOutside(C, loC, hiC) ||\n mOutside(D, loD, hiD);\n}\n\nbool outsideRasterMask(mat4 A, mat4 B, mat4 C, mat4 D) {\n mat4 pnts[4];\n pnts[0] = A;\n pnts[1] = B;\n pnts[2] = C;\n pnts[3] = D;\n\n for(int i = 0; i < 4; ++i) {\n for(int j = 0; j < 4; ++j) {\n for(int k = 0; k < 4; ++k) {\n if(0 == iMod(\n int(255.0 * texture2D(mask,\n vec2(\n (float(i * 2 + j / 2) + 0.5) / 8.0,\n (pnts[i][j][k] * (maskHeight - 1.0) + 1.0) / maskHeight\n ))[3]\n ) / int(pow(2.0, float(iMod(j * 4 + k, 8)))),\n 2\n )) return true;\n }\n }\n }\n return false;\n}\n\nvec4 position(bool isContext, float v, mat4 A, mat4 B, mat4 C, mat4 D) {\n float x = 0.5 * sign(v) + 0.5;\n float y = axisY(x, A, B, C, D);\n float z = 1.0 - abs(v);\n\n z += isContext ? 0.0 : 2.0 * float(\n outsideBoundingBox(A, B, C, D) ||\n outsideRasterMask(A, B, C, D)\n );\n\n return vec4(\n 2.0 * (vec2(x, y) * viewBoxSize + viewBoxPos) / resolution - 1.0,\n z,\n 1.0\n );\n}\n\nvoid main() {\n mat4 A = mat4(p01_04, p05_08, p09_12, p13_16);\n mat4 B = mat4(p17_20, p21_24, p25_28, p29_32);\n mat4 C = mat4(p33_36, p37_40, p41_44, p45_48);\n mat4 D = mat4(p49_52, p53_56, p57_60, ZEROS);\n\n float v = colors[3];\n\n gl_Position = position(isContext, v, A, B, C, D);\n\n fragColor =\n isContext ? vec4(contextColor) :\n isPick ? vec4(colors.rgb, 1.0) : texture2D(palette, vec2(abs(v), 0.5));\n}\n"]),i=n(["precision highp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor;\n\nvoid main() {\n gl_FragColor = fragColor;\n}\n"]),o=t("./constants").maxDimensionCount,s=t("../../lib"),l=1e-6,c=2048,u=new Uint8Array(4),h=new Uint8Array(4),f={shape:[256,1],format:"rgba",type:"uint8",mag:"nearest",min:"nearest"};function p(t,e,r,n,a){var i=t._gl;i.enable(i.SCISSOR_TEST),i.scissor(e,r,n,a),t.clear({color:[0,0,0,0],depth:1})}function d(t,e,r,n,a,i){var o=i.key;r.drawCompleted||(!function(t){t.read({x:0,y:0,width:1,height:1,data:u})}(t),r.drawCompleted=!0),function s(l){var c=Math.min(n,a-l*n);0===l&&(window.cancelAnimationFrame(r.currentRafs[o]),delete r.currentRafs[o],p(t,i.scissorX,i.scissorY,i.scissorWidth,i.viewBoxSize[1])),r.clearOnly||(i.count=2*c,i.offset=2*l*n,e(i),l*n+c<a&&(r.currentRafs[o]=window.requestAnimationFrame(function(){s(l+1)})),r.drawCompleted=!1)}(0)}function g(t,e){for(var r=new Array(256),n=0;n<256;n++)r[n]=t(n/255).concat(e);return r}function v(t,e){return(t>>>8*e)%256/255}function m(t,e,r){for(var n=new Array(8*e),a=0,i=0;i<e;i++)for(var o=0;o<2;o++)for(var s=0;s<4;s++){var l=4*t+s,c=r[64*i+l];63===l&&0===o&&(c*=-1),n[a++]=c}return n}function y(t){var e="0"+t;return e.substr(e.length-2)}function x(t){return t<o?"p"+y(t+1)+"_"+y(t+4):"colors"}function b(t,e,r,n,a,i,o,l,c,u,h,f,p){for(var d=[[],[]],g=0;g<64;g++)d[0][g]=g===a?1:0,d[1][g]=g===i?1:0;var v=t.lines.canvasOverdrag,m=t.domain,y=t.canvasWidth,x=t.canvasHeight,b=t.deselectedLines.color;return s.extendFlat({key:h,resolution:[y,x],viewBoxPos:[o+v,l],viewBoxSize:[c,u],i0:a,i1:i,dim0A:d[0].slice(0,16),dim0B:d[0].slice(16,32),dim0C:d[0].slice(32,48),dim0D:d[0].slice(48,64),dim1A:d[1].slice(0,16),dim1B:d[1].slice(16,32),dim1C:d[1].slice(32,48),dim1D:d[1].slice(48,64),drwLayer:f,contextColor:[b[0]/255,b[1]/255,b[2]/255,b[3]<1?b[3]:Math.max(1/255,Math.pow(1/t.lines.color.length,1/3))],scissorX:(n===e?0:o+v)+(t.pad.l-v)+t.layoutWidth*m.x[0],scissorWidth:(n===r?y-o+v:c+.5)+(n===e?o+v:0),scissorY:l+t.pad.b+t.layoutHeight*m.y[0],scissorHeight:u,viewportX:t.pad.l-v+t.layoutWidth*m.x[0],viewportY:t.pad.b+t.layoutHeight*m.y[0],viewportWidth:y,viewportHeight:x},p)}function _(t){var e=c-1,r=Math.max(0,Math.floor(t[0]*e),0),n=Math.min(e,Math.ceil(t[1]*e),e);return[Math.min(r,n),Math.max(r,n)]}e.exports=function(t,e){var r,n,u,y,w,k=e.context,T=e.pick,M=e.regl,A={currentRafs:{},drawCompleted:!0,clearOnly:!1},S=function(t){for(var e={},r=0;r<=o;r+=4)e[x(r)]=t.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)});return e}(M),E=M.texture(f),L=[];P(e);var C=M({profile:!1,blend:{enable:k,func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:1,dstAlpha:1},equation:{rgb:"add",alpha:"add"},color:[0,0,0,0]},depth:{enable:!k,mask:!0,func:"less",range:[0,1]},cull:{enable:!0,face:"back"},scissor:{enable:!0,box:{x:M.prop("scissorX"),y:M.prop("scissorY"),width:M.prop("scissorWidth"),height:M.prop("scissorHeight")}},viewport:{x:M.prop("viewportX"),y:M.prop("viewportY"),width:M.prop("viewportWidth"),height:M.prop("viewportHeight")},dither:!1,vert:a,frag:i,primitive:"lines",lineWidth:1,attributes:S,uniforms:{resolution:M.prop("resolution"),viewBoxPos:M.prop("viewBoxPos"),viewBoxSize:M.prop("viewBoxSize"),dim0A:M.prop("dim0A"),dim1A:M.prop("dim1A"),dim0B:M.prop("dim0B"),dim1B:M.prop("dim1B"),dim0C:M.prop("dim0C"),dim1C:M.prop("dim1C"),dim0D:M.prop("dim0D"),dim1D:M.prop("dim1D"),loA:M.prop("loA"),hiA:M.prop("hiA"),loB:M.prop("loB"),hiB:M.prop("hiB"),loC:M.prop("loC"),hiC:M.prop("hiC"),loD:M.prop("loD"),hiD:M.prop("hiD"),palette:E,contextColor:M.prop("contextColor"),mask:M.prop("maskTexture"),drwLayer:M.prop("drwLayer"),maskHeight:M.prop("maskHeight")},offset:M.prop("offset"),count:M.prop("count")});function P(t){r=t.model,n=t.viewModel,u=n.dimensions.slice(),y=u[0]?u[0].values.length:0;var e=r.lines,a=T?e.color.map(function(t,r){return r/e.color.length}):e.color,i=function(t,e,r){for(var n,a=new Array(t*(o+4)),i=0,s=0;s<t;s++){for(var c=0;c<o;c++)a[i++]=c<e.length?e[c].paddedUnitValues[s]:.5;a[i++]=v(s,2),a[i++]=v(s,1),a[i++]=v(s,0),a[i++]=(n=r[s],Math.max(l,Math.min(1-l,n)))}return a}(y,u,a);!function(t,e,r){for(var n=0;n<=o;n+=4)t[x(n)](m(n/4,e,r))}(S,y,i),k||T||(E=M.texture(s.extendFlat({data:g(r.unitToColor,255)},f)))}return{render:function(t,e,n){var a,i,o,s=t.length,l=1/0,h=-1/0;for(a=0;a<s;a++)t[a].dim0.canvasX<l&&(l=t[a].dim0.canvasX,i=a),t[a].dim1.canvasX>h&&(h=t[a].dim1.canvasX,o=a);0===s&&p(M,0,0,r.canvasWidth,r.canvasHeight);var f=function(t){var e,r,n,a=[[],[]];for(n=0;n<64;n++){var i=!t&&n<u.length?u[n].brush.filter.getBounds():[-1/0,1/0];a[0][n]=i[0],a[1][n]=i[1]}var o=8*c,s=new Array(o);for(e=0;e<o;e++)s[e]=255;if(!t)for(e=0;e<u.length;e++){var l=e%8,h=(e-l)/8,f=Math.pow(2,l),p=u[e].brush.filter.get();if(!(p.length<2)){var d=_(p[0])[1];for(r=1;r<p.length;r++){var g=_(p[r]);for(n=d+1;n<g[0];n++)s[8*n+h]&=~f;d=Math.max(d,g[1])}}}var v={shape:[8,c],format:"alpha",type:"uint8",mag:"nearest",min:"nearest",data:s};return w?w(v):w=M.texture(v),{maskTexture:w,maskHeight:c,loA:a[0].slice(0,16),loB:a[0].slice(16,32),loC:a[0].slice(32,48),loD:a[0].slice(48,64),hiA:a[1].slice(0,16),hiB:a[1].slice(16,32),hiC:a[1].slice(32,48),hiD:a[1].slice(48,64)}}(k);for(a=0;a<s;a++){var g=t[a],v=g.dim0.crossfilterDimensionIndex,m=g.dim1.crossfilterDimensionIndex,x=g.canvasX,S=g.canvasY,E=x+g.panelSizeX;if(e||!L[v]||L[v][0]!==x||L[v][1]!==E){L[v]=[x,E];var P=b(r,i,o,a,v,m,x,S,g.panelSizeX,g.panelSizeY,g.dim0.crossfilterDimensionIndex,k?0:T?2:1,f);A.clearOnly=n;var O=e?r.lines.blockLineCount:y;d(M,C,A,O,y,P)}}},readPixel:function(t,e){return M.read({x:t,y:e,width:1,height:1,data:h}),h},readPixels:function(t,e,r,n){var a=new Uint8Array(4*r*n);return M.read({x:t,y:e,width:r,height:n,data:a}),a},destroy:function(){for(var e in t.style["pointer-events"]="none",E.destroy(),w&&w.destroy(),S)S[e].destroy()},update:P}}},{"../../lib":717,"./constants":1086,glslify:410}],1091:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){var a,i;for(n||(n=1/0),a=0;a<e.length;a++)(i=e[a]).visible&&(n=Math.min(n,i[r].length));for(n===1/0&&(n=0),t._length=n,a=0;a<e.length;a++)(i=e[a]).visible&&(i._length=n);return n}},{}],1092:[function(t,e,r){"use strict";var n=t("d3"),a=t("color-rgba"),i=t("../../plots/cartesian/axes"),o=t("../../lib"),s=t("../../lib/svg_text_utils"),l=t("../../components/drawing"),c=t("../../components/colorscale"),u=t("../../lib/gup"),h=u.keyFun,f=u.repeat,p=u.unwrap,d=t("./helpers"),g=t("./constants"),v=t("./axisbrush"),m=t("./lines");function y(t,e,r){return o.aggNums(t,null,e,r)}function x(t,e){return _(y(Math.min,t,e),y(Math.max,t,e))}function b(t){var e=t.range;return e?_(e[0],e[1]):x(t.values,t._length)}function _(t,e){return!isNaN(t)&&isFinite(t)||(t=0),!isNaN(e)&&isFinite(e)||(e=0),t===e&&(0===t?(t-=1,e+=1):(t*=.9,e*=1.1)),[t,e]}function w(t,e,r,a,i){var o,s,l=b(r);return a?n.scale.ordinal().domain(a.map((o=n.format(r.tickformat),s=i,s?function(t,e){var r=s[e];return null==r?o(t):r}:o))).range(a.map(function(r){var n=(r-l[0])/(l[1]-l[0]);return t-e+n*(2*e-t)})):n.scale.linear().domain(l).range([t-e,e])}function k(t){if(t.tickvals){var e=b(t);return n.scale.ordinal().domain(t.tickvals).range(t.tickvals.map(function(t){return(t-e[0])/(e[1]-e[0])}))}}function T(t){var e=t.map(function(t){return t[0]}),r=t.map(function(t){var e=a(t[1]);return n.rgb("rgb("+e[0]+","+e[1]+","+e[2]+")")}),i="rgb".split("").map(function(t){return n.scale.linear().clamp(!0).domain(e).range(r.map((a=t,function(t){return t[a]})));var a});return function(t){return i.map(function(e){return e(t)})}}function M(t){return t.dimensions.some(function(t){return t.brush.filterSpecified})}function A(t,e,r){var a=r.width,i=r.height,s=r.dimensions,l=r.canvasPixelRatio,c=function(t){return a*t/Math.max(1,r.colCount-1)},u=g.verticalPadding/i,h=function(t,e){return n.scale.linear().range([e,t-e])}(i,g.verticalPadding),f={key:r.key,xScale:c,model:r,inBrushDrag:!1},p={};return f.dimensions=s.filter(d.isVisible).map(function(a,s){var m=function(t,e){return n.scale.linear().domain(b(t)).range([e,1-e])}(a,u),y=p[a.label];p[a.label]=(y||0)+1;var x=a.label+(y?"__"+y:""),_=a.constraintrange,T=_&&_.length;T&&!Array.isArray(_[0])&&(_=[_]);var A=T?_.map(function(t){return t.map(m)}):[[-1/0,1/0]],S=a.values;S.length>a._length&&(S=S.slice(0,a._length));var E,L=a.tickvals;function C(t,e){return{val:t,text:E[e]}}function P(t,e){return t.val-e.val}if(Array.isArray(L)&&L.length){E=a.ticktext,Array.isArray(E)&&E.length?E.length>L.length?E=E.slice(0,L.length):L.length>E.length&&(L=L.slice(0,E.length)):E=L.map(n.format(a.tickformat));for(var O=1;O<L.length;O++)if(L[O]<L[O-1]){for(var z=L.map(C).sort(P),I=0;I<L.length;I++)L[I]=z[I].val,E[I]=z[I].text;break}}else L=void 0;return S=d.convertTypedArray(S),{key:x,label:a.label,tickFormat:a.tickformat,tickvals:L,ticktext:E,ordinal:d.isOrdinal(a),multiselect:a.multiselect,xIndex:s,crossfilterDimensionIndex:s,visibleIndex:a._index,height:i,values:S,paddedUnitValues:S.map(m),unitTickvals:L&&L.map(m),xScale:c,x:c(s),canvasX:c(s)*l,unitToPaddedPx:h,domainScale:w(i,g.verticalPadding,a,L,E),ordinalScale:k(a),parent:f,model:r,brush:v.makeBrush(t,T,A,function(){t.linePickActive(!1)},function(){var e=f;e.focusLayer&&e.focusLayer.render(e.panels,!0);var r=M(e);!t.contextShown()&&r?(e.contextLayer&&e.contextLayer.render(e.panels,!0),t.contextShown(!0)):t.contextShown()&&!r&&(e.contextLayer&&e.contextLayer.render(e.panels,!0,!0),t.contextShown(!1))},function(r){if(f.focusLayer.render(f.panels,!0),f.pickLayer&&f.pickLayer.render(f.panels,!0),t.linePickActive(!0),e&&e.filterChanged){var n=m.invert,i=r.map(function(t){return t.map(n).sort(o.sorterAsc)}).sort(function(t,e){return t[0]-e[0]});e.filterChanged(f.key,a._index,i)}})}}),f}function S(t){t.classed(g.cn.axisExtentText,!0).attr("text-anchor","middle").style("cursor","default").style("user-select","none")}function E(t,e){var r="top"===e?1:-1,n=t*Math.PI/180;return{dir:r,dx:Math.sin(n),dy:Math.cos(n),degrees:t}}function L(t,e){for(var r=e.panels||(e.panels=[]),n=t.data(),a=0;a<n.length-1;a++){var i=r[a]||(r[a]={}),o=n[a],s=n[a+1];i.dim0=o,i.dim1=s,i.canvasX=o.canvasX,i.panelSizeX=s.canvasX-o.canvasX,i.panelSizeY=e.model.canvasHeight,i.y=0,i.canvasY=0}}function C(t,e){return i.tickText(t._ax,e,!1).text}function P(t,e){if(t.ordinal)return"";var r=t.domainScale.domain(),n=r[e?r.length-1:0];return C(t.model.dimensions[t.visibleIndex],n)}e.exports=function(t,e,r,u){var y=t._fullLayout,w=y._toppaper,k=y._glcontainer;!function(t){for(var e=0;e<t.length;e++)for(var r=0;r<t[e].length;r++)for(var n=t[e][r].trace,a=n.dimensions,o=0;o<a.length;o++){var s=a[o].values,l=a[o]._ax;l&&(l.range?l.range=_(l.range[0],l.range[1]):l.range=x(s,n._length),l.dtick||(l.dtick=.01*(Math.abs(l.range[1]-l.range[0])||1)),l.tickformat=a[o].tickformat,i.calcTicks(l),l.cleanRange())}}(e);var O,z,I=(O=!0,z=!1,{linePickActive:function(t){return arguments.length?O=!!t:O},contextShown:function(t){return arguments.length?z=!!t:z}}),D=e.filter(function(t){return p(t).trace.visible}).map(function(t,e,r){var i=p(e),s=i.trace,l=d.convertTypedArray(i.lineColor),u=s.line,h={color:a(g.deselectedLineColor)},f=c.extractOpts(u),v=f.reversescale?c.flipScale(i.cscale):i.cscale,m=s.domain,y=s.dimensions,x=t.width,_=s.labelangle,w=s.labelside,k=s.labelfont,M=s.tickfont,A=s.rangefont,S=o.extendDeepNoArrays({},u,{color:l.map(n.scale.linear().domain(b({values:l,range:[f.min,f.max],_length:s._length}))),blockLineCount:g.blockLineCount,canvasOverdrag:g.overdrag*g.canvasPixelRatio}),E=Math.floor(x*(m.x[1]-m.x[0])),L=Math.floor(t.height*(m.y[1]-m.y[0])),C=t.margin||{l:80,r:80,t:100,b:80},P=E,O=L;return{key:r,colCount:y.filter(d.isVisible).length,dimensions:y,tickDistance:g.tickDistance,unitToColor:T(v),lines:S,deselectedLines:h,labelAngle:_,labelSide:w,labelFont:k,tickFont:M,rangeFont:A,layoutWidth:x,layoutHeight:t.height,domain:m,translateX:m.x[0]*x,translateY:t.height-m.y[1]*t.height,pad:C,canvasWidth:P*g.canvasPixelRatio+2*S.canvasOverdrag,canvasHeight:O*g.canvasPixelRatio,width:P,height:O,canvasPixelRatio:g.canvasPixelRatio}}.bind(0,r)).map(A.bind(0,I,u));k.each(function(t,e){return o.extendFlat(t,D[e])});var R=k.selectAll(".gl-canvas").each(function(t){t.viewModel=D[0],t.model=t.viewModel?t.viewModel.model:null}),F=null;R.filter(function(t){return t.pick}).style("pointer-events","auto").on("mousemove",function(t){if(I.linePickActive()&&t.lineLayer&&u&&u.hover){var e=n.event,r=this.width,a=this.height,i=n.mouse(this),o=i[0],s=i[1];if(o<0||s<0||o>=r||s>=a)return;var l=t.lineLayer.readPixel(o,a-1-s),c=0!==l[3],h=c?l[2]+256*(l[1]+256*l[0]):null,f={x:o,y:s,clientX:e.clientX,clientY:e.clientY,dataIndex:t.model.key,curveNumber:h};h!==F&&(c?u.hover(f):u.unhover&&u.unhover(f),F=h)}}),R.style("opacity",function(t){return t.pick?0:1}),w.style("background","rgba(255, 255, 255, 0)");var B=w.selectAll("."+g.cn.parcoords).data(D,h);B.exit().remove(),B.enter().append("g").classed(g.cn.parcoords,!0).style("shape-rendering","crispEdges").style("pointer-events","none"),B.attr("transform",function(t){return"translate("+t.model.translateX+","+t.model.translateY+")"});var N=B.selectAll("."+g.cn.parcoordsControlView).data(f,h);N.enter().append("g").classed(g.cn.parcoordsControlView,!0),N.attr("transform",function(t){return"translate("+t.model.pad.l+","+t.model.pad.t+")"});var j=N.selectAll("."+g.cn.yAxis).data(function(t){return t.dimensions},h);j.enter().append("g").classed(g.cn.yAxis,!0),N.each(function(t){L(j,t)}),R.each(function(t){if(t.viewModel){!t.lineLayer||u?t.lineLayer=m(this,t):t.lineLayer.update(t),(t.key||0===t.key)&&(t.viewModel[t.key]=t.lineLayer);var e=!t.context||u;t.lineLayer.render(t.viewModel.panels,e)}}),j.attr("transform",function(t){return"translate("+t.xScale(t.xIndex)+", 0)"}),j.call(n.behavior.drag().origin(function(t){return t}).on("drag",function(t){var e=t.parent;I.linePickActive(!1),t.x=Math.max(-g.overdrag,Math.min(t.model.width+g.overdrag,n.event.x)),t.canvasX=t.x*t.model.canvasPixelRatio,j.sort(function(t,e){return t.x-e.x}).each(function(e,r){e.xIndex=r,e.x=t===e?e.x:e.xScale(e.xIndex),e.canvasX=e.x*e.model.canvasPixelRatio}),L(j,e),j.filter(function(e){return 0!==Math.abs(t.xIndex-e.xIndex)}).attr("transform",function(t){return"translate("+t.xScale(t.xIndex)+", 0)"}),n.select(this).attr("transform","translate("+t.x+", 0)"),j.each(function(r,n,a){a===t.parent.key&&(e.dimensions[n]=r)}),e.contextLayer&&e.contextLayer.render(e.panels,!1,!M(e)),e.focusLayer.render&&e.focusLayer.render(e.panels)}).on("dragend",function(t){var e=t.parent;t.x=t.xScale(t.xIndex),t.canvasX=t.x*t.model.canvasPixelRatio,L(j,e),n.select(this).attr("transform",function(t){return"translate("+t.x+", 0)"}),e.contextLayer&&e.contextLayer.render(e.panels,!1,!M(e)),e.focusLayer&&e.focusLayer.render(e.panels),e.pickLayer&&e.pickLayer.render(e.panels,!0),I.linePickActive(!0),u&&u.axesMoved&&u.axesMoved(e.key,e.dimensions.map(function(t){return t.crossfilterDimensionIndex}))})),j.exit().remove();var V=j.selectAll("."+g.cn.axisOverlays).data(f,h);V.enter().append("g").classed(g.cn.axisOverlays,!0),V.selectAll("."+g.cn.axis).remove();var U=V.selectAll("."+g.cn.axis).data(f,h);U.enter().append("g").classed(g.cn.axis,!0),U.each(function(t){var e=t.model.height/t.model.tickDistance,r=t.domainScale,a=r.domain();n.select(this).call(n.svg.axis().orient("left").tickSize(4).outerTickSize(2).ticks(e,t.tickFormat).tickValues(t.ordinal?a:null).tickFormat(function(e){return d.isOrdinal(t)?e:C(t.model.dimensions[t.visibleIndex],e)}).scale(r)),l.font(U.selectAll("text"),t.model.tickFont)}),U.selectAll(".domain, .tick>line").attr("fill","none").attr("stroke","black").attr("stroke-opacity",.25).attr("stroke-width","1px"),U.selectAll("text").style("text-shadow","1px 1px 1px #fff, -1px -1px 1px #fff, 1px -1px 1px #fff, -1px 1px 1px #fff").style("cursor","default").style("user-select","none");var q=V.selectAll("."+g.cn.axisHeading).data(f,h);q.enter().append("g").classed(g.cn.axisHeading,!0);var H=q.selectAll("."+g.cn.axisTitle).data(f,h);H.enter().append("text").classed(g.cn.axisTitle,!0).attr("text-anchor","middle").style("cursor","ew-resize").style("user-select","none").style("pointer-events","auto"),H.text(function(t){return t.label}).each(function(e){var r=n.select(this);l.font(r,e.model.labelFont),s.convertToTspans(r,t)}).attr("transform",function(t){var e=E(t.model.labelAngle,t.model.labelSide),r=g.axisTitleOffset;return(e.dir>0?"":"translate(0,"+(2*r+t.model.height)+")")+"rotate("+e.degrees+")translate("+-r*e.dx+","+-r*e.dy+")"}).attr("text-anchor",function(t){var e=E(t.model.labelAngle,t.model.labelSide);return 2*Math.abs(e.dx)>Math.abs(e.dy)?e.dir*e.dx<0?"start":"end":"middle"});var G=V.selectAll("."+g.cn.axisExtent).data(f,h);G.enter().append("g").classed(g.cn.axisExtent,!0);var Y=G.selectAll("."+g.cn.axisExtentTop).data(f,h);Y.enter().append("g").classed(g.cn.axisExtentTop,!0),Y.attr("transform","translate(0,"+-g.axisExtentOffset+")");var W=Y.selectAll("."+g.cn.axisExtentTopText).data(f,h);W.enter().append("text").classed(g.cn.axisExtentTopText,!0).call(S),W.text(function(t){return P(t,!0)}).each(function(t){l.font(n.select(this),t.model.rangeFont)});var X=G.selectAll("."+g.cn.axisExtentBottom).data(f,h);X.enter().append("g").classed(g.cn.axisExtentBottom,!0),X.attr("transform",function(t){return"translate(0,"+(t.model.height+g.axisExtentOffset)+")"});var Z=X.selectAll("."+g.cn.axisExtentBottomText).data(f,h);Z.enter().append("text").classed(g.cn.axisExtentBottomText,!0).attr("dy","0.75em").call(S),Z.text(function(t){return P(t,!1)}).each(function(t){l.font(n.select(this),t.model.rangeFont)}),v.ensureAxisBrush(V)}},{"../../components/colorscale":603,"../../components/drawing":612,"../../lib":717,"../../lib/gup":715,"../../lib/svg_text_utils":741,"../../plots/cartesian/axes":765,"./axisbrush":1083,"./constants":1086,"./helpers":1088,"./lines":1090,"color-rgba":124,d3:165}],1093:[function(t,e,r){"use strict";var n=t("./parcoords"),a=t("../../lib/prepare_regl"),i=t("./helpers").isVisible;function o(t,e,r){var n=e.indexOf(r),a=t.indexOf(n);return-1===a&&(a+=e.length),a}e.exports=function(t,e){var r=t._fullLayout;if(a(t)){var s={},l={},c={},u={},h=r._size;e.forEach(function(e,r){var n=e[0].trace;c[r]=n.index;var a=u[r]=n._fullInput.index;s[r]=t.data[a].dimensions,l[r]=t.data[a].dimensions.slice()});n(t,e,{width:h.w,height:h.h,margin:{t:h.t,r:h.r,b:h.b,l:h.l}},{filterChanged:function(e,n,a){var i=l[e][n],o=a.map(function(t){return t.slice()}),s="dimensions["+n+"].constraintrange",h=r._tracePreGUI[t._fullData[c[e]]._fullInput.uid];if(void 0===h[s]){var f=i.constraintrange;h[s]=f||null}var p=t._fullData[c[e]].dimensions[n];o.length?(1===o.length&&(o=o[0]),i.constraintrange=o,p.constraintrange=o.slice(),o=[o]):(delete i.constraintrange,delete p.constraintrange,o=null);var d={};d[s]=o,t.emit("plotly_restyle",[d,[u[e]]])},hover:function(e){t.emit("plotly_hover",e)},unhover:function(e){t.emit("plotly_unhover",e)},axesMoved:function(e,r){var n=function(t,e){return function(r,n){return o(t,e,r)-o(t,e,n)}}(r,l[e].filter(i));s[e].sort(n),l[e].filter(function(t){return!i(t)}).sort(function(t){return l[e].indexOf(t)}).forEach(function(t){s[e].splice(s[e].indexOf(t),1),s[e].splice(l[e].indexOf(t),0,t)}),t.emit("plotly_restyle",[{dimensions:[s[e]]},[u[e]]])}})}}},{"../../lib/prepare_regl":730,"./helpers":1088,"./parcoords":1092}],1094:[function(t,e,r){"use strict";var n=t("../../plots/attributes"),a=t("../../plots/domain").attributes,i=t("../../plots/font_attributes"),o=t("../../components/color/attributes"),s=t("../../plots/template_attributes").hovertemplateAttrs,l=t("../../plots/template_attributes").texttemplateAttrs,c=t("../../lib/extend").extendFlat,u=i({editType:"plot",arrayOk:!0,colorEditType:"plot"});e.exports={labels:{valType:"data_array",editType:"calc"},label0:{valType:"number",dflt:0,editType:"calc"},dlabel:{valType:"number",dflt:1,editType:"calc"},values:{valType:"data_array",editType:"calc"},marker:{colors:{valType:"data_array",editType:"calc"},line:{color:{valType:"color",dflt:o.defaultLine,arrayOk:!0,editType:"style"},width:{valType:"number",min:0,dflt:0,arrayOk:!0,editType:"style"},editType:"calc"},editType:"calc"},text:{valType:"data_array",editType:"plot"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"style"},scalegroup:{valType:"string",dflt:"",editType:"calc"},textinfo:{valType:"flaglist",flags:["label","text","value","percent"],extras:["none"],editType:"calc"},hoverinfo:c({},n.hoverinfo,{flags:["label","text","value","percent","name"]}),hovertemplate:s({},{keys:["label","color","value","percent","text"]}),texttemplate:l({editType:"plot"},{keys:["label","color","value","percent","text"]}),textposition:{valType:"enumerated",values:["inside","outside","auto","none"],dflt:"auto",arrayOk:!0,editType:"plot"},textfont:c({},u,{}),insidetextorientation:{valType:"enumerated",values:["horizontal","radial","tangential","auto"],dflt:"auto",editType:"plot"},insidetextfont:c({},u,{}),outsidetextfont:c({},u,{}),automargin:{valType:"boolean",dflt:!1,editType:"plot"},title:{text:{valType:"string",dflt:"",editType:"plot"},font:c({},u,{}),position:{valType:"enumerated",values:["top left","top center","top right","middle center","bottom left","bottom center","bottom right"],editType:"plot"},editType:"plot"},domain:a({name:"pie",trace:!0,editType:"calc"}),hole:{valType:"number",min:0,max:1,dflt:0,editType:"calc"},sort:{valType:"boolean",dflt:!0,editType:"calc"},direction:{valType:"enumerated",values:["clockwise","counterclockwise"],dflt:"counterclockwise",editType:"calc"},rotation:{valType:"number",min:-360,max:360,dflt:0,editType:"calc"},pull:{valType:"number",min:0,max:1,dflt:0,arrayOk:!0,editType:"calc"},_deprecated:{title:{valType:"string",dflt:"",editType:"calc"},titlefont:c({},u,{}),titleposition:{valType:"enumerated",values:["top left","top center","top right","middle center","bottom left","bottom center","bottom right"],editType:"calc"}}}},{"../../components/color/attributes":590,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/domain":790,"../../plots/font_attributes":791,"../../plots/template_attributes":841}],1095:[function(t,e,r){"use strict";var n=t("../../plots/plots");r.name="pie",r.plot=function(t,e,a,i){n.plotBasePlot(r.name,t,e,a,i)},r.clean=function(t,e,a,i){n.cleanBasePlot(r.name,t,e,a,i)}},{"../../plots/plots":826}],1096:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("tinycolor2"),i=t("../../components/color"),o={};function s(t){return function(e,r){return!!e&&(!!(e=a(e)).isValid()&&(e=i.addOpacity(e,e.getAlpha()),t[r]||(t[r]=e),e))}}function l(t,e){var r,n=JSON.stringify(t),i=e[n];if(!i){for(i=t.slice(),r=0;r<t.length;r++)i.push(a(t[r]).lighten(20).toHexString());for(r=0;r<t.length;r++)i.push(a(t[r]).darken(20).toHexString());e[n]=i}return i}e.exports={calc:function(t,e){var r,a,i=[],o=t._fullLayout,l=o.hiddenlabels||[],c=e.labels,u=e.marker.colors||[],h=e.values,f=e._length,p=e._hasValues&&f;if(e.dlabel)for(c=new Array(f),r=0;r<f;r++)c[r]=String(e.label0+r*e.dlabel);var d={},g=s(o["_"+e.type+"colormap"]),v=0,m=!1;for(r=0;r<f;r++){var y,x,b;if(p){if(y=h[r],!n(y))continue;if((y=+y)<0)continue}else y=1;void 0!==(x=c[r])&&""!==x||(x=r);var _=d[x=String(x)];void 0===_?(d[x]=i.length,(b=-1!==l.indexOf(x))||(v+=y),i.push({v:y,label:x,color:g(u[r],x),i:r,pts:[r],hidden:b})):(m=!0,(a=i[_]).v+=y,a.pts.push(r),a.hidden||(v+=y),!1===a.color&&u[r]&&(a.color=g(u[r],x)))}return("funnelarea"===e.type?m:e.sort)&&i.sort(function(t,e){return e.v-t.v}),i[0]&&(i[0].vTotal=v),i},crossTraceCalc:function(t,e){var r=(e||{}).type;r||(r="pie");var n=t._fullLayout,a=t.calcdata,i=n[r+"colorway"],s=n["_"+r+"colormap"];n["extend"+r+"colors"]&&(i=l(i,o));for(var c=0,u=0;u<a.length;u++){var h=a[u];if(h[0].trace.type===r)for(var f=0;f<h.length;f++){var p=h[f];!1===p.color&&(s[p.label]?p.color=s[p.label]:(s[p.label]=p.color=i[c%i.length],c++))}}},makePullColorFn:s,generateExtendedColors:l}},{"../../components/color":591,"fast-isnumeric":228,tinycolor2:535}],1097:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("./attributes"),o=t("../../plots/domain").defaults,s=t("../bar/defaults").handleText;function l(t,e){var r=Array.isArray(t),i=a.isArrayOrTypedArray(e),o=Math.min(r?t.length:1/0,i?e.length:1/0);if(isFinite(o)||(o=0),o&&i){for(var s,l=0;l<o;l++){var c=e[l];if(n(c)&&c>0){s=!0;break}}s||(o=0)}return{hasLabels:r,hasValues:i,len:o}}e.exports={handleLabelsAndValues:l,supplyDefaults:function(t,e,r,n){function c(r,n){return a.coerce(t,e,i,r,n)}var u=l(c("labels"),c("values")),h=u.len;if(e._hasLabels=u.hasLabels,e._hasValues=u.hasValues,!e._hasLabels&&e._hasValues&&(c("label0"),c("dlabel")),h){e._length=h,c("marker.line.width")&&c("marker.line.color"),c("marker.colors"),c("scalegroup");var f,p=c("text"),d=c("texttemplate");if(d||(f=c("textinfo",Array.isArray(p)?"text+percent":"percent")),c("hovertext"),c("hovertemplate"),d||f&&"none"!==f){var g=c("textposition");s(t,e,n,c,g,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),(Array.isArray(g)||"auto"===g||"outside"===g)&&c("automargin"),("inside"===g||"auto"===g||Array.isArray(g))&&c("insidetextorientation")}o(e,n,c);var v=c("hole");if(c("title.text")){var m=c("title.position",v?"middle center":"top center");v||"middle center"!==m||(e.title.position="top center"),a.coerceFont(c,"title.font",n.font)}c("sort"),c("direction"),c("rotation"),c("pull")}else e.visible=!1}}},{"../../lib":717,"../../plots/domain":790,"../bar/defaults":860,"./attributes":1094,"fast-isnumeric":228}],1098:[function(t,e,r){"use strict";var n=t("../../components/fx/helpers").appendArrayMultiPointValues;e.exports=function(t,e){var r={curveNumber:e.index,pointNumbers:t.pts,data:e._input,fullData:e,label:t.label,color:t.color,value:t.v,percent:t.percent,text:t.text,v:t.v};return 1===t.pts.length&&(r.pointNumber=r.i=t.pts[0]),n(r,e,t.pts),"funnelarea"===e.type&&(delete r.v,delete r.i),r}},{"../../components/fx/helpers":626}],1099:[function(t,e,r){"use strict";var n=t("../../lib");r.formatPiePercent=function(t,e){var r=(100*t).toPrecision(3);return-1!==r.lastIndexOf(".")&&(r=r.replace(/[.]?0+$/,"")),n.numSeparate(r,e)+"%"},r.formatPieValue=function(t,e){var r=t.toPrecision(10);return-1!==r.lastIndexOf(".")&&(r=r.replace(/[.]?0+$/,"")),n.numSeparate(r,e)},r.getFirstFilled=function(t,e){if(Array.isArray(t))for(var r=0;r<e.length;r++){var n=t[e[r]];if(n||0===n||""===n)return n}},r.castOption=function(t,e){return Array.isArray(t)?r.getFirstFilled(t,e):t||void 0}},{"../../lib":717}],1100:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults").supplyDefaults,supplyLayoutDefaults:t("./layout_defaults"),layoutAttributes:t("./layout_attributes"),calc:t("./calc").calc,crossTraceCalc:t("./calc").crossTraceCalc,plot:t("./plot").plot,style:t("./style"),styleOne:t("./style_one"),moduleType:"trace",name:"pie",basePlotModule:t("./base_plot"),categories:["pie-like","pie","showLegend"],meta:{}}},{"./attributes":1094,"./base_plot":1095,"./calc":1096,"./defaults":1097,"./layout_attributes":1101,"./layout_defaults":1102,"./plot":1103,"./style":1104,"./style_one":1105}],1101:[function(t,e,r){"use strict";e.exports={hiddenlabels:{valType:"data_array",editType:"calc"},piecolorway:{valType:"colorlist",editType:"calc"},extendpiecolors:{valType:"boolean",dflt:!0,editType:"calc"}}},{}],1102:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e){function r(r,i){return n.coerce(t,e,a,r,i)}r("hiddenlabels"),r("piecolorway",e.colorway),r("extendpiecolors")}},{"../../lib":717,"./layout_attributes":1101}],1103:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../plots/plots"),i=t("../../components/fx"),o=t("../../components/color"),s=t("../../components/drawing"),l=t("../../lib"),c=t("../../lib/svg_text_utils"),u=t("../bar/uniform_text"),h=u.recordMinTextSize,f=u.clearMinTextSize,p=t("../bar/constants").TEXTPAD,d=t("./helpers"),g=t("./event_data"),v=t("../../lib").isValidTextValue;function m(t,e,r){var a=r[0],o=a.trace,s=a.cx,c=a.cy;"_hasHoverLabel"in o||(o._hasHoverLabel=!1),"_hasHoverEvent"in o||(o._hasHoverEvent=!1),t.on("mouseover",function(t){var r=e._fullLayout,u=e._fullData[o.index];if(!e._dragging&&!1!==r.hovermode){var h=u.hoverinfo;if(Array.isArray(h)&&(h=i.castHoverinfo({hoverinfo:[d.castOption(h,t.pts)],_module:o._module},r,0)),"all"===h&&(h="label+text+value+percent+name"),u.hovertemplate||"none"!==h&&"skip"!==h&&h){var f=t.rInscribed||0,p=s+t.pxmid[0]*(1-f),v=c+t.pxmid[1]*(1-f),m=r.separators,y=[];if(h&&-1!==h.indexOf("label")&&y.push(t.label),t.text=d.castOption(u.hovertext||u.text,t.pts),h&&-1!==h.indexOf("text")){var x=t.text;l.isValidTextValue(x)&&y.push(x)}t.value=t.v,t.valueLabel=d.formatPieValue(t.v,m),h&&-1!==h.indexOf("value")&&y.push(t.valueLabel),t.percent=t.v/a.vTotal,t.percentLabel=d.formatPiePercent(t.percent,m),h&&-1!==h.indexOf("percent")&&y.push(t.percentLabel);var b=u.hoverlabel,_=b.font;i.loneHover({trace:o,x0:p-f*a.r,x1:p+f*a.r,y:v,text:y.join("<br>"),name:u.hovertemplate||-1!==h.indexOf("name")?u.name:void 0,idealAlign:t.pxmid[0]<0?"left":"right",color:d.castOption(b.bgcolor,t.pts)||t.color,borderColor:d.castOption(b.bordercolor,t.pts),fontFamily:d.castOption(_.family,t.pts),fontSize:d.castOption(_.size,t.pts),fontColor:d.castOption(_.color,t.pts),nameLength:d.castOption(b.namelength,t.pts),textAlign:d.castOption(b.align,t.pts),hovertemplate:d.castOption(u.hovertemplate,t.pts),hovertemplateLabels:t,eventData:[g(t,u)]},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:e}),o._hasHoverLabel=!0}o._hasHoverEvent=!0,e.emit("plotly_hover",{points:[g(t,u)],event:n.event})}}),t.on("mouseout",function(t){var r=e._fullLayout,a=e._fullData[o.index],s=n.select(this).datum();o._hasHoverEvent&&(t.originalEvent=n.event,e.emit("plotly_unhover",{points:[g(s,a)],event:n.event}),o._hasHoverEvent=!1),o._hasHoverLabel&&(i.loneUnhover(r._hoverlayer.node()),o._hasHoverLabel=!1)}),t.on("click",function(t){var r=e._fullLayout,a=e._fullData[o.index];e._dragging||!1===r.hovermode||(e._hoverdata=[g(t,a)],i.click(e,n.event))})}function y(t,e,r){var n=d.castOption(t.insidetextfont.color,e.pts);!n&&t._input.textfont&&(n=d.castOption(t._input.textfont.color,e.pts));var a=d.castOption(t.insidetextfont.family,e.pts)||d.castOption(t.textfont.family,e.pts)||r.family,i=d.castOption(t.insidetextfont.size,e.pts)||d.castOption(t.textfont.size,e.pts)||r.size;return{color:n||o.contrast(e.color),family:a,size:i}}function x(t,e){for(var r,n,a=0;a<t.length;a++)if((n=(r=t[a][0]).trace).title.text){var i=n.title.text;n._meta&&(i=l.templateString(i,n._meta));var o=s.tester.append("text").attr("data-notex",1).text(i).call(s.font,n.title.font).call(c.convertToTspans,e),u=s.bBox(o.node(),!0);r.titleBox={width:u.width,height:u.height},o.remove()}}function b(t,e,r){var n=r.r||e.rpx1,a=e.rInscribed;if(e.startangle===e.stopangle)return{rCenter:1-a,scale:0,rotate:0,textPosAngle:0};var i,o=e.ring,s=1===o&&Math.abs(e.startangle-e.stopangle)===2*Math.PI,l=e.halfangle,c=e.midangle,u=r.trace.insidetextorientation,h="horizontal"===u,f="tangential"===u,p="radial"===u,d="auto"===u,g=[];if(!d){var v,m=function(r,a){if(function(t,e){var r=t.startangle,n=t.stopangle;return r>e&&e>n||r<e&&e<n}(e,r)){var s=Math.abs(r-e.startangle),l=Math.abs(r-e.stopangle),c=s<l?s:l;(i="tan"===a?w(t,n,o,c,0):_(t,n,o,c,Math.PI/2)).textPosAngle=r,g.push(i)}};if(h||f){for(v=4;v>=-4;v-=2)m(Math.PI*v,"tan");for(v=4;v>=-4;v-=2)m(Math.PI*(v+1),"tan")}if(h||p){for(v=4;v>=-4;v-=2)m(Math.PI*(v+1.5),"rad");for(v=4;v>=-4;v-=2)m(Math.PI*(v+.5),"rad")}}if(s||d||h){var y=Math.sqrt(t.width*t.width+t.height*t.height);if((i={scale:a*n*2/y,rCenter:1-a,rotate:0}).textPosAngle=(e.startangle+e.stopangle)/2,i.scale>=1)return i;g.push(i)}(d||p)&&((i=_(t,n,o,l,c)).textPosAngle=(e.startangle+e.stopangle)/2,g.push(i)),(d||f)&&((i=w(t,n,o,l,c)).textPosAngle=(e.startangle+e.stopangle)/2,g.push(i));for(var x=0,b=0,k=0;k<g.length;k++){var T=g[k].scale;if(b<T&&(b=T,x=k),!d&&b>=1)break}return g[x]}function _(t,e,r,n,a){e=Math.max(0,e-2*p);var i=t.width/t.height,o=M(i,n,e,r);return{scale:2*o/t.height,rCenter:k(i,o/e),rotate:T(a)}}function w(t,e,r,n,a){e=Math.max(0,e-2*p);var i=t.height/t.width,o=M(i,n,e,r);return{scale:2*o/t.width,rCenter:k(i,o/e),rotate:T(a+Math.PI/2)}}function k(t,e){return Math.cos(e)-t*e}function T(t){return(180/Math.PI*t+720)%180-90}function M(t,e,r,n){var a=t+1/(2*Math.tan(e));return r*Math.min(1/(Math.sqrt(a*a+.5)+a),n/(Math.sqrt(t*t+n/2)+t))}function A(t,e){return t.v!==e.vTotal||e.trace.hole?Math.min(1/(1+1/Math.sin(t.halfangle)),t.ring/2):1}function S(t,e){var r=e.pxmid[0],n=e.pxmid[1],a=t.width/2,i=t.height/2;return r<0&&(a*=-1),n<0&&(i*=-1),{scale:1,rCenter:1,rotate:0,x:a+Math.abs(i)*(a>0?1:-1)/2,y:i/(1+r*r/(n*n)),outside:!0}}function E(t,e){var r,n,a,i=t.trace,o={x:t.cx,y:t.cy},s={tx:0,ty:0};s.ty+=i.title.font.size,a=C(i),-1!==i.title.position.indexOf("top")?(o.y-=(1+a)*t.r,s.ty-=t.titleBox.height):-1!==i.title.position.indexOf("bottom")&&(o.y+=(1+a)*t.r);var l,c,u=(l=t.r,c=t.trace.aspectratio,l/(void 0===c?1:c)),h=e.w*(i.domain.x[1]-i.domain.x[0])/2;return-1!==i.title.position.indexOf("left")?(h+=u,o.x-=(1+a)*u,s.tx+=t.titleBox.width/2):-1!==i.title.position.indexOf("center")?h*=2:-1!==i.title.position.indexOf("right")&&(h+=u,o.x+=(1+a)*u,s.tx-=t.titleBox.width/2),r=h/t.titleBox.width,n=L(t,e)/t.titleBox.height,{x:o.x,y:o.y,scale:Math.min(r,n),tx:s.tx,ty:s.ty}}function L(t,e){var r=t.trace,n=e.h*(r.domain.y[1]-r.domain.y[0]);return Math.min(t.titleBox.height,n/2)}function C(t){var e,r=t.pull;if(!r)return 0;if(Array.isArray(r))for(r=0,e=0;e<t.pull.length;e++)t.pull[e]>r&&(r=t.pull[e]);return r}function P(t,e){for(var r=[],n=0;n<t.length;n++){var a=t[n][0],i=a.trace,o=i.domain,s=e.w*(o.x[1]-o.x[0]),l=e.h*(o.y[1]-o.y[0]);i.title.text&&"middle center"!==i.title.position&&(l-=L(a,e));var c=s/2,u=l/2;"funnelarea"!==i.type||i.scalegroup||(u/=i.aspectratio),a.r=Math.min(c,u)/(1+C(i)),a.cx=e.l+e.w*(i.domain.x[1]+i.domain.x[0])/2,a.cy=e.t+e.h*(1-i.domain.y[0])-l/2,i.title.text&&-1!==i.title.position.indexOf("bottom")&&(a.cy-=L(a,e)),i.scalegroup&&-1===r.indexOf(i.scalegroup)&&r.push(i.scalegroup)}!function(t,e){for(var r,n,a,i=0;i<e.length;i++){var o=1/0,s=e[i];for(n=0;n<t.length;n++)if(r=t[n][0],(a=r.trace).scalegroup===s){var l;if("pie"===a.type)l=r.r*r.r;else if("funnelarea"===a.type){var c,u;a.aspectratio>1?(c=r.r,u=c/a.aspectratio):(u=r.r,c=u*a.aspectratio),c*=(1+a.baseratio)/2,l=c*u}o=Math.min(o,l/r.vTotal)}for(n=0;n<t.length;n++)if(r=t[n][0],(a=r.trace).scalegroup===s){var h=o*r.vTotal;"funnelarea"===a.type&&(h/=(1+a.baseratio)/2,h/=a.aspectratio),r.r=Math.sqrt(h)}}}(t,r)}function O(t,e){return[t*Math.sin(e),-t*Math.cos(e)]}function z(t,e,r){var n=t._fullLayout,a=r.trace,i=a.texttemplate,o=a.textinfo;if(!i&&o&&"none"!==o){var s,c=o.split("+"),u=function(t){return-1!==c.indexOf(t)},h=u("label"),f=u("text"),p=u("value"),g=u("percent"),m=n.separators;if(s=h?[e.label]:[],f){var y=d.getFirstFilled(a.text,e.pts);v(y)&&s.push(y)}p&&s.push(d.formatPieValue(e.v,m)),g&&s.push(d.formatPiePercent(e.v/r.vTotal,m)),e.text=s.join("<br>")}if(i){var x=l.castOption(a,e.i,"texttemplate");if(x){var b=function(t){return{label:t.label,value:t.v,valueLabel:d.formatPieValue(t.v,n.separators),percent:t.v/r.vTotal,percentLabel:d.formatPiePercent(t.v/r.vTotal,n.separators),color:t.color,text:t.text,customdata:l.castOption(a,t.i,"customdata")}}(e),_=d.getFirstFilled(a.text,e.pts);(v(_)||""===_)&&(b.text=_),e.text=l.texttemplateString(x,b,t._fullLayout._d3locale,b,a._meta||{})}else e.text=""}}function I(t,e){var r=t.rotate*Math.PI/180,n=Math.cos(r),a=Math.sin(r),i=(e.left+e.right)/2,o=(e.top+e.bottom)/2;t.textX=i*n-o*a,t.textY=i*a+o*n,t.noCenter=!0}e.exports={plot:function(t,e){var r=t._fullLayout,i=r._size;f("pie",r),x(e,t),P(e,i);var u=l.makeTraceGroups(r._pielayer,e,"trace").each(function(e){var u=n.select(this),f=e[0],p=f.trace;!function(t){var e,r,n,a=t[0],i=a.r,o=a.trace,s=o.rotation*Math.PI/180,l=2*Math.PI/a.vTotal,c="px0",u="px1";if("counterclockwise"===o.direction){for(e=0;e<t.length&&t[e].hidden;e++);if(e===t.length)return;s+=l*t[e].v,l*=-1,c="px1",u="px0"}for(n=O(i,s),e=0;e<t.length;e++)(r=t[e]).hidden||(r[c]=n,r.startangle=s,s+=l*r.v/2,r.pxmid=O(i,s),r.midangle=s,s+=l*r.v/2,n=O(i,s),r.stopangle=s,r[u]=n,r.largeArc=r.v>a.vTotal/2?1:0,r.halfangle=Math.PI*Math.min(r.v/a.vTotal,.5),r.ring=1-o.hole,r.rInscribed=A(r,a))}(e),u.attr("stroke-linejoin","round"),u.each(function(){var g=n.select(this).selectAll("g.slice").data(e);g.enter().append("g").classed("slice",!0),g.exit().remove();var v=[[[],[]],[[],[]]],x=!1;g.each(function(a,i){if(a.hidden)n.select(this).selectAll("path,g").remove();else{a.pointNumber=a.i,a.curveNumber=p.index,v[a.pxmid[1]<0?0:1][a.pxmid[0]<0?0:1].push(a);var o=f.cx,u=f.cy,g=n.select(this),_=g.selectAll("path.surface").data([a]);if(_.enter().append("path").classed("surface",!0).style({"pointer-events":"all"}),g.call(m,t,e),p.pull){var w=+d.castOption(p.pull,a.pts)||0;w>0&&(o+=w*a.pxmid[0],u+=w*a.pxmid[1])}a.cxFinal=o,a.cyFinal=u;var k=p.hole;if(a.v===f.vTotal){var T="M"+(o+a.px0[0])+","+(u+a.px0[1])+C(a.px0,a.pxmid,!0,1)+C(a.pxmid,a.px0,!0,1)+"Z";k?_.attr("d","M"+(o+k*a.px0[0])+","+(u+k*a.px0[1])+C(a.px0,a.pxmid,!1,k)+C(a.pxmid,a.px0,!1,k)+"Z"+T):_.attr("d",T)}else{var M=C(a.px0,a.px1,!0,1);if(k){var A=1-k;_.attr("d","M"+(o+k*a.px1[0])+","+(u+k*a.px1[1])+C(a.px1,a.px0,!1,k)+"l"+A*a.px0[0]+","+A*a.px0[1]+M+"Z")}else _.attr("d","M"+o+","+u+"l"+a.px0[0]+","+a.px0[1]+M+"Z")}z(t,a,f);var E=d.castOption(p.textposition,a.pts),L=g.selectAll("g.slicetext").data(a.text&&"none"!==E?[0]:[]);L.enter().append("g").classed("slicetext",!0),L.exit().remove(),L.each(function(){var g=l.ensureSingle(n.select(this),"text","",function(t){t.attr("data-notex",1)}),v=l.ensureUniformFontSize(t,"outside"===E?function(t,e,r){var n=d.castOption(t.outsidetextfont.color,e.pts)||d.castOption(t.textfont.color,e.pts)||r.color,a=d.castOption(t.outsidetextfont.family,e.pts)||d.castOption(t.textfont.family,e.pts)||r.family,i=d.castOption(t.outsidetextfont.size,e.pts)||d.castOption(t.textfont.size,e.pts)||r.size;return{color:n,family:a,size:i}}(p,a,r.font):y(p,a,r.font));g.text(a.text).attr({class:"slicetext",transform:"","text-anchor":"middle"}).call(s.font,v).call(c.convertToTspans,t);var m,_=s.bBox(g.node());if("outside"===E)m=S(_,a);else if(m=b(_,a,f),"auto"===E&&m.scale<1){var w=l.ensureUniformFontSize(t,p.outsidetextfont);g.call(s.font,w),m=S(_=s.bBox(g.node()),a)}var k=m.textPosAngle,T=void 0===k?a.pxmid:O(f.r,k);if(m.targetX=o+T[0]*m.rCenter+(m.x||0),m.targetY=u+T[1]*m.rCenter+(m.y||0),I(m,_),m.outside){var M=m.targetY;a.yLabelMin=M-_.height/2,a.yLabelMid=M,a.yLabelMax=M+_.height/2,a.labelExtraX=0,a.labelExtraY=0,x=!0}m.fontSize=v.size,h(p.type,m,r),e[i].transform=m,g.attr("transform",l.getTextTransform(m))})}function C(t,e,r,n){var i=n*(e[0]-t[0]),o=n*(e[1]-t[1]);return"a"+n*f.r+","+n*f.r+" 0 "+a.largeArc+(r?" 1 ":" 0 ")+i+","+o}});var _=n.select(this).selectAll("g.titletext").data(p.title.text?[0]:[]);if(_.enter().append("g").classed("titletext",!0),_.exit().remove(),_.each(function(){var e,r=l.ensureSingle(n.select(this),"text","",function(t){t.attr("data-notex",1)}),a=p.title.text;p._meta&&(a=l.templateString(a,p._meta)),r.text(a).attr({class:"titletext",transform:"","text-anchor":"middle"}).call(s.font,p.title.font).call(c.convertToTspans,t),e="middle center"===p.title.position?function(t){var e=Math.sqrt(t.titleBox.width*t.titleBox.width+t.titleBox.height*t.titleBox.height);return{x:t.cx,y:t.cy,scale:t.trace.hole*t.r*2/e,tx:0,ty:-t.titleBox.height/2+t.trace.title.font.size}}(f):E(f,i),r.attr("transform","translate("+e.x+","+e.y+")"+(e.scale<1?"scale("+e.scale+")":"")+"translate("+e.tx+","+e.ty+")")}),x&&function(t,e){var r,n,a,i,o,s,l,c,u,h,f,p,g;function v(t,e){return t.pxmid[1]-e.pxmid[1]}function m(t,e){return e.pxmid[1]-t.pxmid[1]}function y(t,r){r||(r={});var a,c,u,f,p,g,v=r.labelExtraY+(n?r.yLabelMax:r.yLabelMin),m=n?t.yLabelMin:t.yLabelMax,y=n?t.yLabelMax:t.yLabelMin,x=t.cyFinal+o(t.px0[1],t.px1[1]),b=v-m;if(b*l>0&&(t.labelExtraY=b),Array.isArray(e.pull))for(c=0;c<h.length;c++)(u=h[c])===t||(d.castOption(e.pull,t.pts)||0)>=(d.castOption(e.pull,u.pts)||0)||((t.pxmid[1]-u.pxmid[1])*l>0?(f=u.cyFinal+o(u.px0[1],u.px1[1]),(b=f-m-t.labelExtraY)*l>0&&(t.labelExtraY+=b)):(y+t.labelExtraY-x)*l>0&&(a=3*s*Math.abs(c-h.indexOf(t)),p=u.cxFinal+i(u.px0[0],u.px1[0]),(g=p+a-(t.cxFinal+t.pxmid[0])-t.labelExtraX)*s>0&&(t.labelExtraX+=g)))}for(n=0;n<2;n++)for(a=n?v:m,o=n?Math.max:Math.min,l=n?1:-1,r=0;r<2;r++){for(i=r?Math.max:Math.min,s=r?1:-1,(c=t[n][r]).sort(a),u=t[1-n][r],h=u.concat(c),p=[],f=0;f<c.length;f++)void 0!==c[f].yLabelMid&&p.push(c[f]);for(g=!1,f=0;n&&f<u.length;f++)if(void 0!==u[f].yLabelMid){g=u[f];break}for(f=0;f<p.length;f++){var x=f&&p[f-1];g&&!f&&(x=g),y(p[f],x)}}}(v,p),function(t,e){t.each(function(t){var r=n.select(this);if(t.labelExtraX||t.labelExtraY){var a=r.select("g.slicetext text");t.transform.targetX+=t.labelExtraX,t.transform.targetY+=t.labelExtraY,a.attr("transform",l.getTextTransform(t.transform));var i=t.cxFinal+t.pxmid[0],s=t.cyFinal+t.pxmid[1],c="M"+i+","+s,u=(t.yLabelMax-t.yLabelMin)*(t.pxmid[0]<0?-1:1)/4;if(t.labelExtraX){var h=t.labelExtraX*t.pxmid[1]/t.pxmid[0],f=t.yLabelMid+t.labelExtraY-(t.cyFinal+t.pxmid[1]);Math.abs(h)>Math.abs(f)?c+="l"+f*t.pxmid[0]/t.pxmid[1]+","+f+"H"+(i+t.labelExtraX+u):c+="l"+t.labelExtraX+","+h+"v"+(f-h)+"h"+u}else c+="V"+(t.yLabelMid+t.labelExtraY)+"h"+u;l.ensureSingle(r,"path","textline").call(o.stroke,e.outsidetextfont.color).attr({"stroke-width":Math.min(2,e.outsidetextfont.size/8),d:c,fill:"none"})}else r.select("path.textline").remove()})}(g,p),x&&p.automargin){var w=s.bBox(u.node()),k=p.domain,T=i.w*(k.x[1]-k.x[0]),M=i.h*(k.y[1]-k.y[0]),A=(.5*T-f.r)/i.w,L=(.5*M-f.r)/i.h;a.autoMargin(t,"pie."+p.uid+".automargin",{xl:k.x[0]-A,xr:k.x[1]+A,yb:k.y[0]-L,yt:k.y[1]+L,l:Math.max(f.cx-f.r-w.left,0),r:Math.max(w.right-(f.cx+f.r),0),b:Math.max(w.bottom-(f.cy+f.r),0),t:Math.max(f.cy-f.r-w.top,0),pad:5})}})});setTimeout(function(){u.selectAll("tspan").each(function(){var t=n.select(this);t.attr("dy")&&t.attr("dy",t.attr("dy"))})},0)},formatSliceLabel:z,transformInsideText:b,determineInsideTextFont:y,positionTitleOutside:E,prerenderTitles:x,layoutAreas:P,attachFxHandlers:m,computeTransform:I}},{"../../components/color":591,"../../components/drawing":612,"../../components/fx":630,"../../lib":717,"../../lib/svg_text_utils":741,"../../plots/plots":826,"../bar/constants":858,"../bar/uniform_text":872,"./event_data":1098,"./helpers":1099,d3:165}],1104:[function(t,e,r){"use strict";var n=t("d3"),a=t("./style_one"),i=t("../bar/uniform_text").resizeText;e.exports=function(t){var e=t._fullLayout._pielayer.selectAll(".trace");i(t,e,"pie"),e.each(function(t){var e=t[0].trace,r=n.select(this);r.style({opacity:e.opacity}),r.selectAll("path.surface").each(function(t){n.select(this).call(a,t,e)})})}},{"../bar/uniform_text":872,"./style_one":1105,d3:165}],1105:[function(t,e,r){"use strict";var n=t("../../components/color"),a=t("./helpers").castOption;e.exports=function(t,e,r){var i=r.marker.line,o=a(i.color,e.pts)||n.defaultLine,s=a(i.width,e.pts)||0;t.style("stroke-width",s).call(n.fill,e.color).call(n.stroke,o)}},{"../../components/color":591,"./helpers":1099}],1106:[function(t,e,r){"use strict";var n=t("../scatter/attributes");e.exports={x:n.x,y:n.y,xy:{valType:"data_array",editType:"calc"},indices:{valType:"data_array",editType:"calc"},xbounds:{valType:"data_array",editType:"calc"},ybounds:{valType:"data_array",editType:"calc"},text:n.text,marker:{color:{valType:"color",arrayOk:!1,editType:"calc"},opacity:{valType:"number",min:0,max:1,dflt:1,arrayOk:!1,editType:"calc"},blend:{valType:"boolean",dflt:null,editType:"calc"},sizemin:{valType:"number",min:.1,max:2,dflt:.5,editType:"calc"},sizemax:{valType:"number",min:.1,dflt:20,editType:"calc"},border:{color:{valType:"color",arrayOk:!1,editType:"calc"},arearatio:{valType:"number",min:0,max:1,dflt:0,editType:"calc"},editType:"calc"},editType:"calc"},transforms:void 0}},{"../scatter/attributes":1120}],1107:[function(t,e,r){"use strict";var n=t("gl-pointcloud2d"),a=t("../../lib/str2rgbarray"),i=t("../../plots/cartesian/autorange").findExtremes,o=t("../scatter/get_trace_color");function s(t,e){this.scene=t,this.uid=e,this.type="pointcloud",this.pickXData=[],this.pickYData=[],this.xData=[],this.yData=[],this.textLabels=[],this.color="rgb(0, 0, 0)",this.name="",this.hoverinfo="all",this.idToIndex=new Int32Array(0),this.bounds=[0,0,0,0],this.pointcloudOptions={positions:new Float32Array(0),idToIndex:this.idToIndex,sizemin:.5,sizemax:12,color:[0,0,0,1],areaRatio:1,borderColor:[0,0,0,1]},this.pointcloud=n(t.glplot,this.pointcloudOptions),this.pointcloud._trace=this}var l=s.prototype;l.handlePick=function(t){var e=this.idToIndex[t.pointId];return{trace:this,dataCoord:t.dataCoord,traceCoord:this.pickXYData?[this.pickXYData[2*e],this.pickXYData[2*e+1]]:[this.pickXData[e],this.pickYData[e]],textLabel:Array.isArray(this.textLabels)?this.textLabels[e]:this.textLabels,color:this.color,name:this.name,pointIndex:e,hoverinfo:this.hoverinfo}},l.update=function(t){this.index=t.index,this.textLabels=t.text,this.name=t.name,this.hoverinfo=t.hoverinfo,this.bounds=[1/0,1/0,-1/0,-1/0],this.updateFast(t),this.color=o(t,{})},l.updateFast=function(t){var e,r,n,o,s,l,c=this.xData=this.pickXData=t.x,u=this.yData=this.pickYData=t.y,h=this.pickXYData=t.xy,f=t.xbounds&&t.ybounds,p=t.indices,d=this.bounds;if(h){if(n=h,e=h.length>>>1,f)d[0]=t.xbounds[0],d[2]=t.xbounds[1],d[1]=t.ybounds[0],d[3]=t.ybounds[1];else for(l=0;l<e;l++)o=n[2*l],s=n[2*l+1],o<d[0]&&(d[0]=o),o>d[2]&&(d[2]=o),s<d[1]&&(d[1]=s),s>d[3]&&(d[3]=s);if(p)r=p;else for(r=new Int32Array(e),l=0;l<e;l++)r[l]=l}else for(e=c.length,n=new Float32Array(2*e),r=new Int32Array(e),l=0;l<e;l++)o=c[l],s=u[l],r[l]=l,n[2*l]=o,n[2*l+1]=s,o<d[0]&&(d[0]=o),o>d[2]&&(d[2]=o),s<d[1]&&(d[1]=s),s>d[3]&&(d[3]=s);this.idToIndex=r,this.pointcloudOptions.idToIndex=r,this.pointcloudOptions.positions=n;var g=a(t.marker.color),v=a(t.marker.border.color),m=t.opacity*t.marker.opacity;g[3]*=m,this.pointcloudOptions.color=g;var y=t.marker.blend;if(null===y){y=c.length<100||u.length<100}this.pointcloudOptions.blend=y,v[3]*=m,this.pointcloudOptions.borderColor=v;var x=t.marker.sizemin,b=Math.max(t.marker.sizemax,t.marker.sizemin);this.pointcloudOptions.sizeMin=x,this.pointcloudOptions.sizeMax=b,this.pointcloudOptions.areaRatio=t.marker.border.arearatio,this.pointcloud.update(this.pointcloudOptions);var _=this.scene.xaxis,w=this.scene.yaxis,k=b/2||.5;t._extremes[_._id]=i(_,[d[0],d[2]],{ppad:k}),t._extremes[w._id]=i(w,[d[1],d[3]],{ppad:k})},l.dispose=function(){this.pointcloud.dispose()},e.exports=function(t,e){var r=new s(t,e.uid);return r.update(e),r}},{"../../lib/str2rgbarray":740,"../../plots/cartesian/autorange":764,"../scatter/get_trace_color":1130,"gl-pointcloud2d":295}],1108:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes");e.exports=function(t,e,r){function i(r,i){return n.coerce(t,e,a,r,i)}i("x"),i("y"),i("xbounds"),i("ybounds"),t.xy&&t.xy instanceof Float32Array&&(e.xy=t.xy),t.indices&&t.indices instanceof Int32Array&&(e.indices=t.indices),i("text"),i("marker.color",r),i("marker.opacity"),i("marker.blend"),i("marker.sizemin"),i("marker.sizemax"),i("marker.border.color",r),i("marker.border.arearatio"),e._length=null}},{"../../lib":717,"./attributes":1106}],1109:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("../scatter3d/calc"),plot:t("./convert"),moduleType:"trace",name:"pointcloud",basePlotModule:t("../../plots/gl2d"),categories:["gl","gl2d","showLegend"],meta:{}}},{"../../plots/gl2d":803,"../scatter3d/calc":1148,"./attributes":1106,"./convert":1107,"./defaults":1108}],1110:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),a=t("../../plots/attributes"),i=t("../../components/color/attributes"),o=t("../../components/fx/attributes"),s=t("../../plots/domain").attributes,l=t("../../plots/template_attributes").hovertemplateAttrs,c=t("../../components/colorscale/attributes"),u=t("../../plot_api/plot_template").templatedArray,h=t("../../lib/extend").extendFlat,f=t("../../plot_api/edit_types").overrideAll;t("../../constants/docs").FORMAT_LINK;(e.exports=f({hoverinfo:h({},a.hoverinfo,{flags:[],arrayOk:!1}),hoverlabel:o.hoverlabel,domain:s({name:"sankey",trace:!0}),orientation:{valType:"enumerated",values:["v","h"],dflt:"h"},valueformat:{valType:"string",dflt:".3s"},valuesuffix:{valType:"string",dflt:""},arrangement:{valType:"enumerated",values:["snap","perpendicular","freeform","fixed"],dflt:"snap"},textfont:n({}),customdata:void 0,node:{label:{valType:"data_array",dflt:[]},groups:{valType:"info_array",impliedEdits:{x:[],y:[]},dimensions:2,freeLength:!0,dflt:[],items:{valType:"number",editType:"calc"}},x:{valType:"data_array",dflt:[]},y:{valType:"data_array",dflt:[]},color:{valType:"color",arrayOk:!0},customdata:{valType:"data_array",editType:"calc"},line:{color:{valType:"color",dflt:i.defaultLine,arrayOk:!0},width:{valType:"number",min:0,dflt:.5,arrayOk:!0}},pad:{valType:"number",arrayOk:!1,min:0,dflt:20},thickness:{valType:"number",arrayOk:!1,min:1,dflt:20},hoverinfo:{valType:"enumerated",values:["all","none","skip"],dflt:"all"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:["value","label"]})},link:{label:{valType:"data_array",dflt:[]},color:{valType:"color",arrayOk:!0},customdata:{valType:"data_array",editType:"calc"},line:{color:{valType:"color",dflt:i.defaultLine,arrayOk:!0},width:{valType:"number",min:0,dflt:0,arrayOk:!0}},source:{valType:"data_array",dflt:[]},target:{valType:"data_array",dflt:[]},value:{valType:"data_array",dflt:[]},hoverinfo:{valType:"enumerated",values:["all","none","skip"],dflt:"all"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:["value","label"]}),colorscales:u("concentrationscales",{editType:"calc",label:{valType:"string",editType:"calc",dflt:""},cmax:{valType:"number",editType:"calc",dflt:1},cmin:{valType:"number",editType:"calc",dflt:0},colorscale:h(c().colorscale,{dflt:[[0,"white"],[1,"black"]]})})}},"calc","nested")).transforms=void 0},{"../../components/color/attributes":590,"../../components/colorscale/attributes":598,"../../components/fx/attributes":621,"../../constants/docs":688,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plot_api/plot_template":755,"../../plots/attributes":762,"../../plots/domain":790,"../../plots/font_attributes":791,"../../plots/template_attributes":841}],1111:[function(t,e,r){"use strict";var n=t("../../plot_api/edit_types").overrideAll,a=t("../../plots/get_data").getModuleCalcData,i=t("./plot"),o=t("../../components/fx/layout_attributes"),s=t("../../lib/setcursor"),l=t("../../components/dragelement"),c=t("../../plots/cartesian/select").prepSelect,u=t("../../lib"),h=t("../../registry");function f(t,e){var r=t._fullData[e],n=t._fullLayout,a=n.dragmode,i="pan"===n.dragmode?"move":"crosshair",o=r._bgRect;if("pan"!==a&&"zoom"!==a){s(o,i);var f={_id:"x",c2p:u.identity,_offset:r._sankey.translateX,_length:r._sankey.width},p={_id:"y",c2p:u.identity,_offset:r._sankey.translateY,_length:r._sankey.height},d={gd:t,element:o.node(),plotinfo:{id:e,xaxis:f,yaxis:p,fillRangeItems:u.noop},subplot:e,xaxes:[f],yaxes:[p],doneFnCompleted:function(r){var n,a=t._fullData[e],i=a.node.groups.slice(),o=[];function s(t){for(var e=a._sankey.graph.nodes,r=0;r<e.length;r++)if(e[r].pointNumber===t)return e[r]}for(var l=0;l<r.length;l++){var c=s(r[l].pointNumber);if(c)if(c.group){for(var u=0;u<c.childrenNodes.length;u++)o.push(c.childrenNodes[u].pointNumber);i[c.pointNumber-a.node._count]=!1}else o.push(c.pointNumber)}n=i.filter(Boolean).concat([o]),h.call("_guiRestyle",t,{"node.groups":[n]},e)},prepFn:function(t,e,r){c(t,e,r,d,a)}};l.init(d)}}r.name="sankey",r.baseLayoutAttrOverrides=n({hoverlabel:o.hoverlabel},"plot","nested"),r.plot=function(t){var e=a(t.calcdata,"sankey")[0];i(t,e),r.updateFx(t)},r.clean=function(t,e,r,n){var a=n._has&&n._has("sankey"),i=e._has&&e._has("sankey");a&&!i&&(n._paperdiv.selectAll(".sankey").remove(),n._paperdiv.selectAll(".bgsankey").remove())},r.updateFx=function(t){for(var e=0;e<t._fullData.length;e++)f(t,e)}},{"../../components/dragelement":609,"../../components/fx/layout_attributes":631,"../../lib":717,"../../lib/setcursor":737,"../../plot_api/edit_types":748,"../../plots/cartesian/select":782,"../../plots/get_data":800,"../../registry":846,"./plot":1116}],1112:[function(t,e,r){"use strict";var n=t("strongly-connected-components"),a=t("../../lib"),i=t("../../lib/gup").wrap,o=a.isArrayOrTypedArray,s=a.isIndex,l=t("../../components/colorscale");function c(t){var e,r=t.node,i=t.link,c=[],u=o(i.color),h=o(i.customdata),f={},p={},d=i.colorscales.length;for(e=0;e<d;e++){var g=i.colorscales[e],v=l.extractScale(g,{cLetter:"c"}),m=l.makeColorScaleFunc(v);p[g.label]=m}var y=0;for(e=0;e<i.value.length;e++)i.source[e]>y&&(y=i.source[e]),i.target[e]>y&&(y=i.target[e]);var x,b=y+1;t.node._count=b;var _=t.node.groups,w={};for(e=0;e<_.length;e++){var k=_[e];for(x=0;x<k.length;x++){var T=k[x],M=b+e;w.hasOwnProperty(T)?a.warn("Node "+T+" is already part of a group."):w[T]=M}}var A={source:[],target:[]};for(e=0;e<i.value.length;e++){var S=i.value[e],E=i.source[e],L=i.target[e];if(S>0&&s(E,b)&&s(L,b)&&(!w.hasOwnProperty(E)||!w.hasOwnProperty(L)||w[E]!==w[L])){w.hasOwnProperty(L)&&(L=w[L]),w.hasOwnProperty(E)&&(E=w[E]),L=+L,f[E=+E]=f[L]=!0;var C="";i.label&&i.label[e]&&(C=i.label[e]);var P=null;C&&p.hasOwnProperty(C)&&(P=p[C]),c.push({pointNumber:e,label:C,color:u?i.color[e]:i.color,customdata:h?i.customdata[e]:i.customdata,concentrationscale:P,source:E,target:L,value:+S}),A.source.push(E),A.target.push(L)}}var O=b+_.length,z=o(r.color),I=o(r.customdata),D=[];for(e=0;e<O;e++)if(f[e]){var R=r.label[e];D.push({group:e>b-1,childrenNodes:[],pointNumber:e,label:R,color:z?r.color[e]:r.color,customdata:I?r.customdata[e]:r.customdata})}var F=!1;return function(t,e,r){for(var i=a.init2dArray(t,0),o=0;o<Math.min(e.length,r.length);o++)if(a.isIndex(e[o],t)&&a.isIndex(r[o],t)){if(e[o]===r[o])return!0;i[e[o]].push(r[o])}return n(i).components.some(function(t){return t.length>1})}(O,A.source,A.target)&&(F=!0),{circular:F,links:c,nodes:D,groups:_,groupLookup:w}}e.exports=function(t,e){var r=c(e);return i({circular:r.circular,_nodes:r.nodes,_links:r.links,_groups:r.groups,_groupLookup:r.groupLookup})}},{"../../components/colorscale":603,"../../lib":717,"../../lib/gup":715,"strongly-connected-components":528}],1113:[function(t,e,r){"use strict";e.exports={nodeTextOffsetHorizontal:4,nodeTextOffsetVertical:3,nodePadAcross:10,sankeyIterations:50,forceIterations:5,forceTicksPerFrame:10,duration:500,ease:"linear",cn:{sankey:"sankey",sankeyLinks:"sankey-links",sankeyLink:"sankey-link",sankeyNodeSet:"sankey-node-set",sankeyNode:"sankey-node",nodeRect:"node-rect",nodeCapture:"node-capture",nodeCentered:"node-entered",nodeLabelGuide:"node-label-guide",nodeLabel:"node-label",nodeLabelTextPath:"node-label-text-path"}}},{}],1114:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("../../components/color"),o=t("tinycolor2"),s=t("../../plots/domain").defaults,l=t("../../components/fx/hoverlabel_defaults"),c=t("../../plot_api/plot_template"),u=t("../../plots/array_container_defaults");function h(t,e){function r(r,i){return n.coerce(t,e,a.link.colorscales,r,i)}r("label"),r("cmin"),r("cmax"),r("colorscale")}e.exports=function(t,e,r,f){function p(r,i){return n.coerce(t,e,a,r,i)}var d=n.extendDeep(f.hoverlabel,t.hoverlabel),g=t.node,v=c.newContainer(e,"node");function m(t,e){return n.coerce(g,v,a.node,t,e)}m("label"),m("groups"),m("x"),m("y"),m("pad"),m("thickness"),m("line.color"),m("line.width"),m("hoverinfo",t.hoverinfo),l(g,v,m,d),m("hovertemplate");var y=f.colorway;m("color",v.label.map(function(t,e){return i.addOpacity(function(t){return y[t%y.length]}(e),.8)})),m("customdata");var x=t.link||{},b=c.newContainer(e,"link");function _(t,e){return n.coerce(x,b,a.link,t,e)}_("label"),_("source"),_("target"),_("value"),_("line.color"),_("line.width"),_("hoverinfo",t.hoverinfo),l(x,b,_,d),_("hovertemplate");var w,k=o(f.paper_bgcolor).getLuminance()<.333?"rgba(255, 255, 255, 0.6)":"rgba(0, 0, 0, 0.2)";_("color",n.repeat(k,b.value.length)),_("customdata"),u(x,b,{name:"colorscales",handleItemDefaults:h}),s(e,f,p),p("orientation"),p("valueformat"),p("valuesuffix"),v.x.length&&v.y.length&&(w="freeform"),p("arrangement",w),n.coerceFont(p,"textfont",n.extendFlat({},f.font)),e._length=null}},{"../../components/color":591,"../../components/fx/hoverlabel_defaults":628,"../../lib":717,"../../plot_api/plot_template":755,"../../plots/array_container_defaults":761,"../../plots/domain":790,"./attributes":1110,tinycolor2:535}],1115:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc"),plot:t("./plot"),moduleType:"trace",name:"sankey",basePlotModule:t("./base_plot"),selectPoints:t("./select.js"),categories:["noOpacity"],meta:{}}},{"./attributes":1110,"./base_plot":1111,"./calc":1112,"./defaults":1114,"./plot":1116,"./select.js":1118}],1116:[function(t,e,r){"use strict";var n=t("d3"),a=t("./render"),i=t("../../components/fx"),o=t("../../components/color"),s=t("../../lib"),l=t("./constants").cn,c=s._;function u(t){return""!==t}function h(t,e){return t.filter(function(t){return t.key===e.traceId})}function f(t,e){n.select(t).select("path").style("fill-opacity",e),n.select(t).select("rect").style("fill-opacity",e)}function p(t){n.select(t).select("text.name").style("fill","black")}function d(t){return function(e){return-1!==t.node.sourceLinks.indexOf(e.link)||-1!==t.node.targetLinks.indexOf(e.link)}}function g(t){return function(e){return-1!==e.node.sourceLinks.indexOf(t.link)||-1!==e.node.targetLinks.indexOf(t.link)}}function v(t,e,r){e&&r&&h(r,e).selectAll("."+l.sankeyLink).filter(d(e)).call(y.bind(0,e,r,!1))}function m(t,e,r){e&&r&&h(r,e).selectAll("."+l.sankeyLink).filter(d(e)).call(x.bind(0,e,r,!1))}function y(t,e,r,n){var a=n.datum().link.label;n.style("fill-opacity",function(t){if(!t.link.concentrationscale)return.4}),a&&h(e,t).selectAll("."+l.sankeyLink).filter(function(t){return t.link.label===a}).style("fill-opacity",function(t){if(!t.link.concentrationscale)return.4}),r&&h(e,t).selectAll("."+l.sankeyNode).filter(g(t)).call(v)}function x(t,e,r,n){var a=n.datum().link.label;n.style("fill-opacity",function(t){return t.tinyColorAlpha}),a&&h(e,t).selectAll("."+l.sankeyLink).filter(function(t){return t.link.label===a}).style("fill-opacity",function(t){return t.tinyColorAlpha}),r&&h(e,t).selectAll(l.sankeyNode).filter(g(t)).call(m)}function b(t,e){var r=t.hoverlabel||{},n=s.nestedProperty(r,e).get();return!Array.isArray(n)&&n}e.exports=function(t,e){for(var r=t._fullLayout,s=r._paper,h=r._size,d=0;d<t._fullData.length;d++)if(t._fullData[d].visible&&t._fullData[d].type===l.sankey&&!t._fullData[d]._viewInitial){var g=t._fullData[d].node;t._fullData[d]._viewInitial={node:{groups:g.groups.slice(),x:g.x.slice(),y:g.y.slice()}}}var _=c(t,"source:")+" ",w=c(t,"target:")+" ",k=c(t,"concentration:")+" ",T=c(t,"incoming flow count:")+" ",M=c(t,"outgoing flow count:")+" ";a(t,s,e,{width:h.w,height:h.h,margin:{t:h.t,r:h.r,b:h.b,l:h.l}},{linkEvents:{hover:function(e,r,a){!1!==t._fullLayout.hovermode&&(n.select(e).call(y.bind(0,r,a,!0)),"skip"!==r.link.trace.link.hoverinfo&&(r.link.fullData=r.link.trace,t.emit("plotly_hover",{event:n.event,points:[r.link]})))},follow:function(e,a){if(!1!==t._fullLayout.hovermode){var s=a.link.trace.link;if("none"!==s.hoverinfo&&"skip"!==s.hoverinfo){for(var l=[],c=0,h=0;h<a.flow.links.length;h++){var d=a.flow.links[h];if("closest"!==t._fullLayout.hovermode||a.link.pointNumber===d.pointNumber){a.link.pointNumber===d.pointNumber&&(c=h),d.fullData=d.trace,s=a.link.trace.link;var g=m(d),v={valueLabel:n.format(a.valueFormat)(d.value)+a.valueSuffix};l.push({x:g[0],y:g[1],name:v.valueLabel,text:[d.label||"",_+d.source.label,w+d.target.label,d.concentrationscale?k+n.format("%0.2f")(d.flow.labelConcentration):""].filter(u).join("<br>"),color:b(s,"bgcolor")||o.addOpacity(d.color,1),borderColor:b(s,"bordercolor"),fontFamily:b(s,"font.family"),fontSize:b(s,"font.size"),fontColor:b(s,"font.color"),nameLength:b(s,"namelength"),textAlign:b(s,"align"),idealAlign:n.event.x<g[0]?"right":"left",hovertemplate:s.hovertemplate,hovertemplateLabels:v,eventData:[d]})}}i.loneHover(l,{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t,anchorIndex:c}).each(function(){a.link.concentrationscale||f(this,.65),p(this)})}}function m(t){var e,r;t.circular?(e=(t.circularPathData.leftInnerExtent+t.circularPathData.rightInnerExtent)/2,r=t.circularPathData.verticalFullExtent):(e=(t.source.x1+t.target.x0)/2,r=(t.y0+t.y1)/2);var n=[e,r];return"v"===t.trace.orientation&&n.reverse(),n[0]+=a.parent.translateX,n[1]+=a.parent.translateY,n}},unhover:function(e,a,o){!1!==t._fullLayout.hovermode&&(n.select(e).call(x.bind(0,a,o,!0)),"skip"!==a.link.trace.link.hoverinfo&&(a.link.fullData=a.link.trace,t.emit("plotly_unhover",{event:n.event,points:[a.link]})),i.loneUnhover(r._hoverlayer.node()))},select:function(e,r){var a=r.link;a.originalEvent=n.event,t._hoverdata=[a],i.click(t,{target:!0})}},nodeEvents:{hover:function(e,r,a){!1!==t._fullLayout.hovermode&&(n.select(e).call(v,r,a),"skip"!==r.node.trace.node.hoverinfo&&(r.node.fullData=r.node.trace,t.emit("plotly_hover",{event:n.event,points:[r.node]})))},follow:function(e,a){if(!1!==t._fullLayout.hovermode){var o=a.node.trace.node;if("none"!==o.hoverinfo&&"skip"!==o.hoverinfo){var s=n.select(e).select("."+l.nodeRect),c=t._fullLayout._paperdiv.node().getBoundingClientRect(),h=s.node().getBoundingClientRect(),d=h.left-2-c.left,g=h.right+2-c.left,v=h.top+h.height/4-c.top,m={valueLabel:n.format(a.valueFormat)(a.node.value)+a.valueSuffix};a.node.fullData=a.node.trace;var y=i.loneHover({x0:d,x1:g,y:v,name:n.format(a.valueFormat)(a.node.value)+a.valueSuffix,text:[a.node.label,T+a.node.targetLinks.length,M+a.node.sourceLinks.length].filter(u).join("<br>"),color:b(o,"bgcolor")||a.tinyColorHue,borderColor:b(o,"bordercolor"),fontFamily:b(o,"font.family"),fontSize:b(o,"font.size"),fontColor:b(o,"font.color"),nameLength:b(o,"namelength"),textAlign:b(o,"align"),idealAlign:"left",hovertemplate:o.hovertemplate,hovertemplateLabels:m,eventData:[a.node]},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t});f(y,.85),p(y)}}},unhover:function(e,a,o){!1!==t._fullLayout.hovermode&&(n.select(e).call(m,a,o),"skip"!==a.node.trace.node.hoverinfo&&(a.node.fullData=a.node.trace,t.emit("plotly_unhover",{event:n.event,points:[a.node]})),i.loneUnhover(r._hoverlayer.node()))},select:function(e,r,a){var o=r.node;o.originalEvent=n.event,t._hoverdata=[o],n.select(e).call(m,r,a),i.click(t,{target:!0})}}})}},{"../../components/color":591,"../../components/fx":630,"../../lib":717,"./constants":1113,"./render":1117,d3:165}],1117:[function(t,e,r){"use strict";var n=t("./constants"),a=t("d3"),i=t("tinycolor2"),o=t("../../components/color"),s=t("../../components/drawing"),l=t("@plotly/d3-sankey"),c=t("@plotly/d3-sankey-circular"),u=t("d3-force"),h=t("../../lib"),f=t("../../lib/gup"),p=f.keyFun,d=f.repeat,g=f.unwrap,v=t("d3-interpolate").interpolateNumber,m=t("../../registry");function y(){var t=.5;return function(e){if(e.link.circular)return r=e.link,n=r.width/2,a=r.circularPathData,"top"===r.circularLinkType?"M "+a.targetX+" "+(a.targetY+n)+" L"+a.rightInnerExtent+" "+(a.targetY+n)+"A"+(a.rightLargeArcRadius+n)+" "+(a.rightSmallArcRadius+n)+" 0 0 1 "+(a.rightFullExtent-n)+" "+(a.targetY-a.rightSmallArcRadius)+"L"+(a.rightFullExtent-n)+" "+a.verticalRightInnerExtent+"A"+(a.rightLargeArcRadius+n)+" "+(a.rightLargeArcRadius+n)+" 0 0 1 "+a.rightInnerExtent+" "+(a.verticalFullExtent-n)+"L"+a.leftInnerExtent+" "+(a.verticalFullExtent-n)+"A"+(a.leftLargeArcRadius+n)+" "+(a.leftLargeArcRadius+n)+" 0 0 1 "+(a.leftFullExtent+n)+" "+a.verticalLeftInnerExtent+"L"+(a.leftFullExtent+n)+" "+(a.sourceY-a.leftSmallArcRadius)+"A"+(a.leftLargeArcRadius+n)+" "+(a.leftSmallArcRadius+n)+" 0 0 1 "+a.leftInnerExtent+" "+(a.sourceY+n)+"L"+a.sourceX+" "+(a.sourceY+n)+"L"+a.sourceX+" "+(a.sourceY-n)+"L"+a.leftInnerExtent+" "+(a.sourceY-n)+"A"+(a.leftLargeArcRadius-n)+" "+(a.leftSmallArcRadius-n)+" 0 0 0 "+(a.leftFullExtent-n)+" "+(a.sourceY-a.leftSmallArcRadius)+"L"+(a.leftFullExtent-n)+" "+a.verticalLeftInnerExtent+"A"+(a.leftLargeArcRadius-n)+" "+(a.leftLargeArcRadius-n)+" 0 0 0 "+a.leftInnerExtent+" "+(a.verticalFullExtent+n)+"L"+a.rightInnerExtent+" "+(a.verticalFullExtent+n)+"A"+(a.rightLargeArcRadius-n)+" "+(a.rightLargeArcRadius-n)+" 0 0 0 "+(a.rightFullExtent+n)+" "+a.verticalRightInnerExtent+"L"+(a.rightFullExtent+n)+" "+(a.targetY-a.rightSmallArcRadius)+"A"+(a.rightLargeArcRadius-n)+" "+(a.rightSmallArcRadius-n)+" 0 0 0 "+a.rightInnerExtent+" "+(a.targetY-n)+"L"+a.targetX+" "+(a.targetY-n)+"Z":"M "+a.targetX+" "+(a.targetY-n)+" L"+a.rightInnerExtent+" "+(a.targetY-n)+"A"+(a.rightLargeArcRadius+n)+" "+(a.rightSmallArcRadius+n)+" 0 0 0 "+(a.rightFullExtent-n)+" "+(a.targetY+a.rightSmallArcRadius)+"L"+(a.rightFullExtent-n)+" "+a.verticalRightInnerExtent+"A"+(a.rightLargeArcRadius+n)+" "+(a.rightLargeArcRadius+n)+" 0 0 0 "+a.rightInnerExtent+" "+(a.verticalFullExtent+n)+"L"+a.leftInnerExtent+" "+(a.verticalFullExtent+n)+"A"+(a.leftLargeArcRadius+n)+" "+(a.leftLargeArcRadius+n)+" 0 0 0 "+(a.leftFullExtent+n)+" "+a.verticalLeftInnerExtent+"L"+(a.leftFullExtent+n)+" "+(a.sourceY+a.leftSmallArcRadius)+"A"+(a.leftLargeArcRadius+n)+" "+(a.leftSmallArcRadius+n)+" 0 0 0 "+a.leftInnerExtent+" "+(a.sourceY-n)+"L"+a.sourceX+" "+(a.sourceY-n)+"L"+a.sourceX+" "+(a.sourceY+n)+"L"+a.leftInnerExtent+" "+(a.sourceY+n)+"A"+(a.leftLargeArcRadius-n)+" "+(a.leftSmallArcRadius-n)+" 0 0 1 "+(a.leftFullExtent-n)+" "+(a.sourceY+a.leftSmallArcRadius)+"L"+(a.leftFullExtent-n)+" "+a.verticalLeftInnerExtent+"A"+(a.leftLargeArcRadius-n)+" "+(a.leftLargeArcRadius-n)+" 0 0 1 "+a.leftInnerExtent+" "+(a.verticalFullExtent-n)+"L"+a.rightInnerExtent+" "+(a.verticalFullExtent-n)+"A"+(a.rightLargeArcRadius-n)+" "+(a.rightLargeArcRadius-n)+" 0 0 1 "+(a.rightFullExtent+n)+" "+a.verticalRightInnerExtent+"L"+(a.rightFullExtent+n)+" "+(a.targetY+a.rightSmallArcRadius)+"A"+(a.rightLargeArcRadius-n)+" "+(a.rightSmallArcRadius-n)+" 0 0 1 "+a.rightInnerExtent+" "+(a.targetY+n)+"L"+a.targetX+" "+(a.targetY+n)+"Z";var r,n,a,i=e.link.source.x1,o=e.link.target.x0,s=v(i,o),l=s(t),c=s(1-t),u=e.link.y0-e.link.width/2,h=e.link.y0+e.link.width/2,f=e.link.y1-e.link.width/2,p=e.link.y1+e.link.width/2;return"M"+i+","+u+"C"+l+","+u+" "+c+","+f+" "+o+","+f+"L"+o+","+p+"C"+c+","+p+" "+l+","+h+" "+i+","+h+"Z"}}function x(t){t.attr("transform",function(t){return"translate("+t.node.x0.toFixed(3)+", "+t.node.y0.toFixed(3)+")"})}function b(t){t.call(x)}function _(t,e){t.call(b),e.attr("d",y())}function w(t){t.attr("width",function(t){return t.node.x1-t.node.x0}).attr("height",function(t){return t.visibleHeight})}function k(t){return t.link.width>1||t.linkLineWidth>0}function T(t){return"translate("+t.translateX+","+t.translateY+")"+(t.horizontal?"matrix(1 0 0 1 0 0)":"matrix(0 1 1 0 0 0)")}function M(t){return"translate("+(t.horizontal?0:t.labelY)+" "+(t.horizontal?t.labelY:0)+")"}function A(t){return a.svg.line()([[t.horizontal?t.left?-t.sizeAcross:t.visibleWidth+n.nodeTextOffsetHorizontal:n.nodeTextOffsetHorizontal,0],[t.horizontal?t.left?-n.nodeTextOffsetHorizontal:t.sizeAcross:t.visibleHeight-n.nodeTextOffsetHorizontal,0]])}function S(t){return t.horizontal?"matrix(1 0 0 1 0 0)":"matrix(0 1 1 0 0 0)"}function E(t){return t.horizontal?"scale(1 1)":"scale(-1 1)"}function L(t){return t.darkBackground&&!t.horizontal?"rgb(255,255,255)":"rgb(0,0,0)"}function C(t){return t.horizontal&&t.left?"100%":"0%"}function P(t,e,r){t.on(".basic",null).on("mouseover.basic",function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.hover(this,t,e),t.interactionState.hovered=[this,t])}).on("mousemove.basic",function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.follow(this,t),t.interactionState.hovered=[this,t])}).on("mouseout.basic",function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.unhover(this,t,e),t.interactionState.hovered=!1)}).on("click.basic",function(t){t.interactionState.hovered&&(r.unhover(this,t,e),t.interactionState.hovered=!1),t.interactionState.dragInProgress||t.partOfGroup||r.select(this,t,e)})}function O(t,e,r,i){var o=a.behavior.drag().origin(function(t){return{x:t.node.x0+t.visibleWidth/2,y:t.node.y0+t.visibleHeight/2}}).on("dragstart",function(a){if("fixed"!==a.arrangement&&(h.ensureSingle(i._fullLayout._infolayer,"g","dragcover",function(t){i._fullLayout._dragCover=t}),h.raiseToTop(this),a.interactionState.dragInProgress=a.node,I(a.node),a.interactionState.hovered&&(r.nodeEvents.unhover.apply(0,a.interactionState.hovered),a.interactionState.hovered=!1),"snap"===a.arrangement)){var o=a.traceId+"|"+a.key;a.forceLayouts[o]?a.forceLayouts[o].alpha(1):function(t,e,r,a){!function(t){for(var e=0;e<t.length;e++)t[e].y=(t[e].y0+t[e].y1)/2,t[e].x=(t[e].x0+t[e].x1)/2}(r.graph.nodes);var i=r.graph.nodes.filter(function(t){return t.originalX===r.node.originalX}).filter(function(t){return!t.partOfGroup});r.forceLayouts[e]=u.forceSimulation(i).alphaDecay(0).force("collide",u.forceCollide().radius(function(t){return t.dy/2+r.nodePad/2}).strength(1).iterations(n.forceIterations)).force("constrain",function(t,e,r,a){return function(){for(var t=0,i=0;i<r.length;i++){var o=r[i];o===a.interactionState.dragInProgress?(o.x=o.lastDraggedX,o.y=o.lastDraggedY):(o.vx=(o.originalX-o.x)/n.forceTicksPerFrame,o.y=Math.min(a.size-o.dy/2,Math.max(o.dy/2,o.y))),t=Math.max(t,Math.abs(o.vx),Math.abs(o.vy))}!a.interactionState.dragInProgress&&t<.1&&a.forceLayouts[e].alpha()>0&&a.forceLayouts[e].alpha(0)}}(0,e,i,r)).stop()}(0,o,a),function(t,e,r,a,i){window.requestAnimationFrame(function o(){var s;for(s=0;s<n.forceTicksPerFrame;s++)r.forceLayouts[a].tick();var l=r.graph.nodes;if(function(t){for(var e=0;e<t.length;e++)t[e].y0=t[e].y-t[e].dy/2,t[e].y1=t[e].y0+t[e].dy,t[e].x0=t[e].x-t[e].dx/2,t[e].x1=t[e].x0+t[e].dx}(l),r.sankey.update(r.graph),_(t.filter(D(r)),e),r.forceLayouts[a].alpha()>0)window.requestAnimationFrame(o);else{var c=r.node.originalX;r.node.x0=c-r.visibleWidth/2,r.node.x1=c+r.visibleWidth/2,z(r,i)}})}(t,e,a,o,i)}}).on("drag",function(r){if("fixed"!==r.arrangement){var n=a.event.x,i=a.event.y;"snap"===r.arrangement?(r.node.x0=n-r.visibleWidth/2,r.node.x1=n+r.visibleWidth/2,r.node.y0=i-r.visibleHeight/2,r.node.y1=i+r.visibleHeight/2):("freeform"===r.arrangement&&(r.node.x0=n-r.visibleWidth/2,r.node.x1=n+r.visibleWidth/2),i=Math.max(0,Math.min(r.size-r.visibleHeight/2,i)),r.node.y0=i-r.visibleHeight/2,r.node.y1=i+r.visibleHeight/2),I(r.node),"snap"!==r.arrangement&&(r.sankey.update(r.graph),_(t.filter(D(r)),e))}}).on("dragend",function(t){if("fixed"!==t.arrangement){t.interactionState.dragInProgress=!1;for(var e=0;e<t.node.childrenNodes.length;e++)t.node.childrenNodes[e].x=t.node.x,t.node.childrenNodes[e].y=t.node.y;"snap"!==t.arrangement&&z(t,i)}});t.on(".drag",null).call(o)}function z(t,e){for(var r=[],n=[],a=0;a<t.graph.nodes.length;a++){var i=(t.graph.nodes[a].x0+t.graph.nodes[a].x1)/2,o=(t.graph.nodes[a].y0+t.graph.nodes[a].y1)/2;r.push(i/t.figure.width),n.push(o/t.figure.height)}m.call("_guiRestyle",e,{"node.x":[r],"node.y":[n]},t.trace.index).then(function(){e._fullLayout._dragCover&&e._fullLayout._dragCover.remove()})}function I(t){t.lastDraggedX=t.x0+t.dx/2,t.lastDraggedY=t.y0+t.dy/2}function D(t){return function(e){return e.node.originalX===t.node.originalX}}e.exports=function(t,e,r,u,f){var v=!1;h.ensureSingle(t._fullLayout._infolayer,"g","first-render",function(){v=!0});var m=t._fullLayout._dragCover,b=r.filter(function(t){return g(t).trace.visible}).map(function(t,e,r){var a,o=g(e),s=o.trace,u=s.domain,f="h"===s.orientation,p=s.node.pad,d=s.node.thickness,v=t.width*(u.x[1]-u.x[0]),m=t.height*(u.y[1]-u.y[0]),y=o._nodes,x=o._links,b=o.circular;(a=b?c.sankeyCircular().circularLinkGap(0):l.sankey()).iterations(n.sankeyIterations).size(f?[v,m]:[m,v]).nodeWidth(d).nodePadding(p).nodeId(function(t){return t.pointNumber}).nodes(y).links(x);var _,w,k,T=a();for(var M in a.nodePadding()<p&&h.warn("node.pad was reduced to ",a.nodePadding()," to fit within the figure."),o._groupLookup){var A,S=parseInt(o._groupLookup[M]);for(_=0;_<T.nodes.length;_++)if(T.nodes[_].pointNumber===S){A=T.nodes[_];break}if(A){var E={pointNumber:parseInt(M),x0:A.x0,x1:A.x1,y0:A.y0,y1:A.y1,partOfGroup:!0,sourceLinks:[],targetLinks:[]};T.nodes.unshift(E),A.childrenNodes.unshift(E)}}if(function(){for(_=0;_<T.nodes.length;_++){var t,e,r=T.nodes[_],n={};for(w=0;w<r.targetLinks.length;w++)t=(e=r.targetLinks[w]).source.pointNumber+":"+e.target.pointNumber,n.hasOwnProperty(t)||(n[t]=[]),n[t].push(e);var a=Object.keys(n);for(w=0;w<a.length;w++){var o=n[t=a[w]],s=0,l={};for(k=0;k<o.length;k++)l[(e=o[k]).label]||(l[e.label]=0),l[e.label]+=e.value,s+=e.value;for(k=0;k<o.length;k++)(e=o[k]).flow={value:s,labelConcentration:l[e.label]/s,concentration:e.value/s,links:o},e.concentrationscale&&(e.color=i(e.concentrationscale(e.flow.labelConcentration)))}var c=0;for(w=0;w<r.sourceLinks.length;w++)c+=r.sourceLinks[w].value;for(w=0;w<r.sourceLinks.length;w++)(e=r.sourceLinks[w]).concentrationOut=e.value/c;var u=0;for(w=0;w<r.targetLinks.length;w++)u+=r.targetLinks[w].value;for(w=0;w<r.targetLinks.length;w++)(e=r.targetLinks[w]).concenrationIn=e.value/u}}(),s.node.x.length&&s.node.y.length){for(_=0;_<Math.min(s.node.x.length,s.node.y.length,T.nodes.length);_++)if(s.node.x[_]&&s.node.y[_]){var L=[s.node.x[_]*v,s.node.y[_]*m];T.nodes[_].x0=L[0]-d/2,T.nodes[_].x1=L[0]+d/2;var C=T.nodes[_].y1-T.nodes[_].y0;T.nodes[_].y0=L[1]-C/2,T.nodes[_].y1=L[1]+C/2}"snap"===s.arrangement&&function(t){t.forEach(function(t){var e,r,n,a=0,i=t.length;for(t.sort(function(t,e){return t.y0-e.y0}),n=0;n<i;++n)(e=t[n]).y0>=a||(r=a-e.y0)>1e-6&&(e.y0+=r,e.y1+=r),a=e.y1+p})}(function(t){var e,r,n=t.map(function(t,e){return{x0:t.x0,index:e}}).sort(function(t,e){return t.x0-e.x0}),a=[],i=-1,o=-1/0;for(_=0;_<n.length;_++){var s=t[n[_].index];s.x0>o+d&&(i+=1,e=s.x0),o=s.x0,a[i]||(a[i]=[]),a[i].push(s),r=e-s.x0,s.x0+=r,s.x1+=r}return a}(y=T.nodes)),a.update(T)}return{circular:b,key:r,trace:s,guid:h.randstr(),horizontal:f,width:v,height:m,nodePad:s.node.pad,nodeLineColor:s.node.line.color,nodeLineWidth:s.node.line.width,linkLineColor:s.link.line.color,linkLineWidth:s.link.line.width,valueFormat:s.valueformat,valueSuffix:s.valuesuffix,textFont:s.textfont,translateX:u.x[0]*t.width+t.margin.l,translateY:t.height-u.y[1]*t.height+t.margin.t,dragParallel:f?m:v,dragPerpendicular:f?v:m,arrangement:s.arrangement,sankey:a,graph:T,forceLayouts:{},interactionState:{dragInProgress:!1,hovered:!1}}}.bind(null,u)),_=e.selectAll("."+n.cn.sankey).data(b,p);_.exit().remove(),_.enter().append("g").classed(n.cn.sankey,!0).style("box-sizing","content-box").style("position","absolute").style("left",0).style("shape-rendering","geometricPrecision").style("pointer-events","auto").attr("transform",T),_.each(function(e,r){t._fullData[r]._sankey=e;var n="bgsankey-"+e.trace.uid+"-"+r;h.ensureSingle(t._fullLayout._draggers,"rect",n),t._fullData[r]._bgRect=a.select("."+n),t._fullData[r]._bgRect.style("pointer-events","all").attr("width",e.width).attr("height",e.height).attr("x",e.translateX).attr("y",e.translateY).classed("bgsankey",!0).style({fill:"transparent","stroke-width":0})}),_.transition().ease(n.ease).duration(n.duration).attr("transform",T);var z=_.selectAll("."+n.cn.sankeyLinks).data(d,p);z.enter().append("g").classed(n.cn.sankeyLinks,!0).style("fill","none");var I=z.selectAll("."+n.cn.sankeyLink).data(function(t){return t.graph.links.filter(function(t){return t.value}).map(function(t,e,r){var n=i(e.color),a=e.source.label+"|"+e.target.label+"__"+r;return e.trace=t.trace,e.curveNumber=t.trace.index,{circular:t.circular,key:a,traceId:t.key,pointNumber:e.pointNumber,link:e,tinyColorHue:o.tinyRGB(n),tinyColorAlpha:n.getAlpha(),linkPath:y,linkLineColor:t.linkLineColor,linkLineWidth:t.linkLineWidth,valueFormat:t.valueFormat,valueSuffix:t.valueSuffix,sankey:t.sankey,parent:t,interactionState:t.interactionState,flow:e.flow}}.bind(null,t))},p);I.enter().append("path").classed(n.cn.sankeyLink,!0).call(P,_,f.linkEvents),I.style("stroke",function(t){return k(t)?o.tinyRGB(i(t.linkLineColor)):t.tinyColorHue}).style("stroke-opacity",function(t){return k(t)?o.opacity(t.linkLineColor):t.tinyColorAlpha}).style("fill",function(t){return t.tinyColorHue}).style("fill-opacity",function(t){return t.tinyColorAlpha}).style("stroke-width",function(t){return k(t)?t.linkLineWidth:1}).attr("d",y()),I.style("opacity",function(){return t._context.staticPlot||v||m?1:0}).transition().ease(n.ease).duration(n.duration).style("opacity",1),I.exit().transition().ease(n.ease).duration(n.duration).style("opacity",0).remove();var D=_.selectAll("."+n.cn.sankeyNodeSet).data(d,p);D.enter().append("g").classed(n.cn.sankeyNodeSet,!0),D.style("cursor",function(t){switch(t.arrangement){case"fixed":return"default";case"perpendicular":return"ns-resize";default:return"move"}});var R=D.selectAll("."+n.cn.sankeyNode).data(function(t){var e=t.graph.nodes;return function(t){var e,r=[];for(e=0;e<t.length;e++)t[e].originalX=(t[e].x0+t[e].x1)/2,t[e].originalY=(t[e].y0+t[e].y1)/2,-1===r.indexOf(t[e].originalX)&&r.push(t[e].originalX);for(r.sort(function(t,e){return t-e}),e=0;e<t.length;e++)t[e].originalLayerIndex=r.indexOf(t[e].originalX),t[e].originalLayer=t[e].originalLayerIndex/(r.length-1)}(e),e.map(function(t,e){var r=i(e.color),a=n.nodePadAcross,s=t.nodePad/2;e.dx=e.x1-e.x0,e.dy=e.y1-e.y0;var l=e.dx,c=Math.max(.5,e.dy),u="node_"+e.pointNumber;return e.group&&(u=h.randstr()),e.trace=t.trace,e.curveNumber=t.trace.index,{index:e.pointNumber,key:u,partOfGroup:e.partOfGroup||!1,group:e.group,traceId:t.key,trace:t.trace,node:e,nodePad:t.nodePad,nodeLineColor:t.nodeLineColor,nodeLineWidth:t.nodeLineWidth,textFont:t.textFont,size:t.horizontal?t.height:t.width,visibleWidth:Math.ceil(l),visibleHeight:c,zoneX:-a,zoneY:-s,zoneWidth:l+2*a,zoneHeight:c+2*s,labelY:t.horizontal?e.dy/2+1:e.dx/2+1,left:1===e.originalLayer,sizeAcross:t.width,forceLayouts:t.forceLayouts,horizontal:t.horizontal,darkBackground:r.getBrightness()<=128,tinyColorHue:o.tinyRGB(r),tinyColorAlpha:r.getAlpha(),valueFormat:t.valueFormat,valueSuffix:t.valueSuffix,sankey:t.sankey,graph:t.graph,arrangement:t.arrangement,uniqueNodeLabelPathId:[t.guid,t.key,u].join("_"),interactionState:t.interactionState,figure:t}}.bind(null,t))},p);R.enter().append("g").classed(n.cn.sankeyNode,!0).call(x).style("opacity",function(e){return!t._context.staticPlot&&!v||e.partOfGroup?0:1}),R.call(P,_,f.nodeEvents).call(O,I,f,t),R.transition().ease(n.ease).duration(n.duration).call(x).style("opacity",function(t){return t.partOfGroup?0:1}),R.exit().transition().ease(n.ease).duration(n.duration).style("opacity",0).remove();var F=R.selectAll("."+n.cn.nodeRect).data(d);F.enter().append("rect").classed(n.cn.nodeRect,!0).call(w),F.style("stroke-width",function(t){return t.nodeLineWidth}).style("stroke",function(t){return o.tinyRGB(i(t.nodeLineColor))}).style("stroke-opacity",function(t){return o.opacity(t.nodeLineColor)}).style("fill",function(t){return t.tinyColorHue}).style("fill-opacity",function(t){return t.tinyColorAlpha}),F.transition().ease(n.ease).duration(n.duration).call(w);var B=R.selectAll("."+n.cn.nodeCapture).data(d);B.enter().append("rect").classed(n.cn.nodeCapture,!0).style("fill-opacity",0),B.attr("x",function(t){return t.zoneX}).attr("y",function(t){return t.zoneY}).attr("width",function(t){return t.zoneWidth}).attr("height",function(t){return t.zoneHeight});var N=R.selectAll("."+n.cn.nodeCentered).data(d);N.enter().append("g").classed(n.cn.nodeCentered,!0).attr("transform",M),N.transition().ease(n.ease).duration(n.duration).attr("transform",M);var j=N.selectAll("."+n.cn.nodeLabelGuide).data(d);j.enter().append("path").classed(n.cn.nodeLabelGuide,!0).attr("id",function(t){return t.uniqueNodeLabelPathId}).attr("d",A).attr("transform",S),j.transition().ease(n.ease).duration(n.duration).attr("d",A).attr("transform",S);var V=N.selectAll("."+n.cn.nodeLabel).data(d);V.enter().append("text").classed(n.cn.nodeLabel,!0).attr("transform",E).style("user-select","none").style("cursor","default").style("fill","black"),V.style("text-shadow",function(t){return t.horizontal?"-1px 1px 1px #fff, 1px 1px 1px #fff, 1px -1px 1px #fff, -1px -1px 1px #fff":"none"}).each(function(t){s.font(V,t.textFont)}),V.transition().ease(n.ease).duration(n.duration).attr("transform",E);var U=V.selectAll("."+n.cn.nodeLabelTextPath).data(d);U.enter().append("textPath").classed(n.cn.nodeLabelTextPath,!0).attr("alignment-baseline","middle").attr("xlink:href",function(t){return"#"+t.uniqueNodeLabelPathId}).attr("startOffset",C).style("fill",L),U.text(function(t){return t.horizontal||t.node.dy>5?t.node.label:""}).attr("text-anchor",function(t){return t.horizontal&&t.left?"end":"start"}),U.transition().ease(n.ease).duration(n.duration).attr("startOffset",C).style("fill",L)}},{"../../components/color":591,"../../components/drawing":612,"../../lib":717,"../../lib/gup":715,"../../registry":846,"./constants":1113,"@plotly/d3-sankey":56,"@plotly/d3-sankey-circular":55,d3:165,"d3-force":158,"d3-interpolate":160,tinycolor2:535}],1118:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r=[],n=t.cd[0].trace,a=n._sankey.graph.nodes,i=0;i<a.length;i++){var o=a[i];if(!o.partOfGroup){var s=[(o.x0+o.x1)/2,(o.y0+o.y1)/2];"v"===n.orientation&&s.reverse(),e&&e.contains(s,!1,i,t)&&r.push({pointNumber:o.pointNumber})}}return r}},{}],1119:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,"tx"),n.mergeArray(e.texttemplate,t,"txt"),n.mergeArray(e.hovertext,t,"htx"),n.mergeArray(e.customdata,t,"data"),n.mergeArray(e.textposition,t,"tp"),e.textfont&&(n.mergeArrayCastPositive(e.textfont.size,t,"ts"),n.mergeArray(e.textfont.color,t,"tc"),n.mergeArray(e.textfont.family,t,"tf"));var a=e.marker;if(a){n.mergeArrayCastPositive(a.size,t,"ms"),n.mergeArrayCastPositive(a.opacity,t,"mo"),n.mergeArray(a.symbol,t,"mx"),n.mergeArray(a.color,t,"mc");var i=a.line;a.line&&(n.mergeArray(i.color,t,"mlc"),n.mergeArrayCastPositive(i.width,t,"mlw"));var o=a.gradient;o&&"none"!==o.type&&(n.mergeArray(o.type,t,"mgt"),n.mergeArray(o.color,t,"mgc"))}}},{"../../lib":717}],1120:[function(t,e,r){"use strict";var n=t("../../plots/template_attributes").texttemplateAttrs,a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../../components/colorscale/attributes"),o=t("../../plots/font_attributes"),s=t("../../components/drawing/attributes").dash,l=t("../../components/drawing"),c=t("./constants"),u=t("../../lib/extend").extendFlat;e.exports={x:{valType:"data_array",editType:"calc+clearAxisTypes",anim:!0},x0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes",anim:!0},dx:{valType:"number",dflt:1,editType:"calc",anim:!0},y:{valType:"data_array",editType:"calc+clearAxisTypes",anim:!0},y0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes",anim:!0},dy:{valType:"number",dflt:1,editType:"calc",anim:!0},stackgroup:{valType:"string",dflt:"",editType:"calc"},orientation:{valType:"enumerated",values:["v","h"],editType:"calc"},groupnorm:{valType:"enumerated",values:["","fraction","percent"],dflt:"",editType:"calc"},stackgaps:{valType:"enumerated",values:["infer zero","interpolate"],dflt:"infer zero",editType:"calc"},text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},texttemplate:n({},{}),hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"style"},mode:{valType:"flaglist",flags:["lines","markers","text"],extras:["none"],editType:"calc"},hoveron:{valType:"flaglist",flags:["points","fills"],editType:"style"},hovertemplate:a({},{keys:c.eventDataKeys}),line:{color:{valType:"color",editType:"style",anim:!0},width:{valType:"number",min:0,dflt:2,editType:"style",anim:!0},shape:{valType:"enumerated",values:["linear","spline","hv","vh","hvh","vhv"],dflt:"linear",editType:"plot"},smoothing:{valType:"number",min:0,max:1.3,dflt:1,editType:"plot"},dash:u({},s,{editType:"style"}),simplify:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},connectgaps:{valType:"boolean",dflt:!1,editType:"calc"},cliponaxis:{valType:"boolean",dflt:!0,editType:"plot"},fill:{valType:"enumerated",values:["none","tozeroy","tozerox","tonexty","tonextx","toself","tonext"],editType:"calc"},fillcolor:{valType:"color",editType:"style",anim:!0},marker:u({symbol:{valType:"enumerated",values:l.symbolList,dflt:"circle",arrayOk:!0,editType:"style"},opacity:{valType:"number",min:0,max:1,arrayOk:!0,editType:"style",anim:!0},size:{valType:"number",min:0,dflt:6,arrayOk:!0,editType:"calc",anim:!0},maxdisplayed:{valType:"number",min:0,dflt:0,editType:"plot"},sizeref:{valType:"number",dflt:1,editType:"calc"},sizemin:{valType:"number",min:0,dflt:0,editType:"calc"},sizemode:{valType:"enumerated",values:["diameter","area"],dflt:"diameter",editType:"calc"},line:u({width:{valType:"number",min:0,arrayOk:!0,editType:"style",anim:!0},editType:"calc"},i("marker.line",{anim:!0})),gradient:{type:{valType:"enumerated",values:["radial","horizontal","vertical","none"],arrayOk:!0,dflt:"none",editType:"calc"},color:{valType:"color",arrayOk:!0,editType:"calc"},editType:"calc"},editType:"calc"},i("marker",{anim:!0})),selected:{marker:{opacity:{valType:"number",min:0,max:1,editType:"style"},color:{valType:"color",editType:"style"},size:{valType:"number",min:0,editType:"style"},editType:"style"},textfont:{color:{valType:"color",editType:"style"},editType:"style"},editType:"style"},unselected:{marker:{opacity:{valType:"number",min:0,max:1,editType:"style"},color:{valType:"color",editType:"style"},size:{valType:"number",min:0,editType:"style"},editType:"style"},textfont:{color:{valType:"color",editType:"style"},editType:"style"},editType:"style"},textposition:{valType:"enumerated",values:["top left","top center","top right","middle left","middle center","middle right","bottom left","bottom center","bottom right"],dflt:"middle center",arrayOk:!0,editType:"calc"},textfont:o({editType:"calc",colorEditType:"style",arrayOk:!0}),r:{valType:"data_array",editType:"calc"},t:{valType:"data_array",editType:"calc"}}},{"../../components/colorscale/attributes":598,"../../components/drawing":612,"../../components/drawing/attributes":611,"../../lib/extend":708,"../../plots/font_attributes":791,"../../plots/template_attributes":841,"./constants":1124}],1121:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../plots/cartesian/axes"),o=t("../../constants/numerical").BADNUM,s=t("./subtypes"),l=t("./colorscale_calc"),c=t("./arrays_to_calcdata"),u=t("./calc_selection");function h(t,e,r,n,a,o,l){var c=e._length,u=t._fullLayout,h=r._id,f=n._id,p=u._firstScatter[d(e)]===e.uid,v=(g(e,u,r,n)||{}).orientation,m=e.fill;r._minDtick=0,n._minDtick=0;var y={padded:!0},x={padded:!0};l&&(y.ppad=x.ppad=l);var b=c<2||a[0]!==a[c-1]||o[0]!==o[c-1];b&&("tozerox"===m||"tonextx"===m&&(p||"h"===v))?y.tozero=!0:(e.error_y||{}).visible||"tonexty"!==m&&"tozeroy"!==m&&(s.hasMarkers(e)||s.hasText(e))||(y.padded=!1,y.ppad=0),b&&("tozeroy"===m||"tonexty"===m&&(p||"v"===v))?x.tozero=!0:"tonextx"!==m&&"tozerox"!==m||(x.padded=!1),h&&(e._extremes[h]=i.findExtremes(r,a,y)),f&&(e._extremes[f]=i.findExtremes(n,o,x))}function f(t,e){if(s.hasMarkers(t)){var r,n=t.marker,o=1.6*(t.marker.sizeref||1);if(r="area"===t.marker.sizemode?function(t){return Math.max(Math.sqrt((t||0)/o),3)}:function(t){return Math.max((t||0)/o,3)},a.isArrayOrTypedArray(n.size)){var l={type:"linear"};i.setConvert(l);for(var c=l.makeCalcdata(t.marker,"size"),u=new Array(e),h=0;h<e;h++)u[h]=r(c[h]);return u}return r(n.size)}}function p(t,e){var r=d(e),n=t._firstScatter;n[r]||(n[r]=e.uid)}function d(t){var e=t.stackgroup;return t.xaxis+t.yaxis+t.type+(e?"-"+e:"")}function g(t,e,r,n){var a=t.stackgroup;if(a){var i=e._scatterStackOpts[r._id+n._id][a],o="v"===i.orientation?n:r;return"linear"===o.type||"log"===o.type?i:void 0}}e.exports={calc:function(t,e){var r,s,d,v,m,y,x=t._fullLayout,b=i.getFromId(t,e.xaxis||"x"),_=i.getFromId(t,e.yaxis||"y"),w=b.makeCalcdata(e,"x"),k=_.makeCalcdata(e,"y"),T=e._length,M=new Array(T),A=e.ids,S=g(e,x,b,_),E=!1;p(x,e);var L,C="x",P="y";for(S?(a.pushUnique(S.traceIndices,e._expandedIndex),(r="v"===S.orientation)?(P="s",L="x"):(C="s",L="y"),m="interpolate"===S.stackgaps):h(t,e,b,_,w,k,f(e,T)),s=0;s<T;s++){var O=M[s]={},z=n(w[s]),I=n(k[s]);z&&I?(O[C]=w[s],O[P]=k[s]):S&&(r?z:I)?(O[L]=r?w[s]:k[s],O.gap=!0,m?(O.s=o,E=!0):O.s=0):O[C]=O[P]=o,A&&(O.id=String(A[s]))}if(c(M,e),l(t,e),u(M,e),S){for(s=0;s<M.length;)M[s][L]===o?M.splice(s,1):s++;if(a.sort(M,function(t,e){return t[L]-e[L]||t.i-e.i}),E){for(s=0;s<M.length-1&&M[s].gap;)s++;for((y=M[s].s)||(y=M[s].s=0),d=0;d<s;d++)M[d].s=y;for(v=M.length-1;v>s&&M[v].gap;)v--;for(y=M[v].s,d=M.length-1;d>v;d--)M[d].s=y;for(;s<v;)if(M[++s].gap){for(d=s+1;M[d].gap;)d++;for(var D=M[s-1][L],R=M[s-1].s,F=(M[d].s-R)/(M[d][L]-D);s<d;)M[s].s=R+(M[s][L]-D)*F,s++}}}return M},calcMarkerSize:f,calcAxisExpansion:h,setFirstScatter:p,getStackOpts:g}},{"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/axes":765,"./arrays_to_calcdata":1119,"./calc_selection":1122,"./colorscale_calc":1123,"./subtypes":1144,"fast-isnumeric":228}],1122:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){n.isArrayOrTypedArray(e.selectedpoints)&&n.tagSelected(t,e)}},{"../../lib":717}],1123:[function(t,e,r){"use strict";var n=t("../../components/colorscale/helpers").hasColorscale,a=t("../../components/colorscale/calc"),i=t("./subtypes");e.exports=function(t,e){i.hasLines(e)&&n(e,"line")&&a(t,e,{vals:e.line.color,containerStr:"line",cLetter:"c"}),i.hasMarkers(e)&&(n(e,"marker")&&a(t,e,{vals:e.marker.color,containerStr:"marker",cLetter:"c"}),n(e,"marker.line")&&a(t,e,{vals:e.marker.line.color,containerStr:"marker.line",cLetter:"c"}))}},{"../../components/colorscale/calc":599,"../../components/colorscale/helpers":602,"./subtypes":1144}],1124:[function(t,e,r){"use strict";e.exports={PTS_LINESONLY:20,minTolerance:.2,toleranceGrowth:10,maxScreensAway:20,eventDataKeys:[]}},{}],1125:[function(t,e,r){"use strict";var n=t("./calc");function a(t,e,r,n,a,i,o){a[n]=!0;var s={i:null,gap:!0,s:0};if(s[o]=r,t.splice(e,0,s),e&&r===t[e-1][o]){var l=t[e-1];s.s=l.s,s.i=l.i,s.gap=l.gap}else i&&(s.s=function(t,e,r,n){var a=t[e-1],i=t[e+1];return i?a?a.s+(i.s-a.s)*(r-a[n])/(i[n]-a[n]):i.s:a.s}(t,e,r,o));e||(t[0].t=t[1].t,t[0].trace=t[1].trace,delete t[1].t,delete t[1].trace)}e.exports=function(t,e){var r=e.xaxis,i=e.yaxis,o=r._id+i._id,s=t._fullLayout._scatterStackOpts[o];if(s){var l,c,u,h,f,p,d,g,v,m,y,x,b,_,w,k=t.calcdata;for(var T in s){var M=(m=s[T]).traceIndices;if(M.length){for(y="interpolate"===m.stackgaps,x=m.groupnorm,"v"===m.orientation?(b="x",_="y"):(b="y",_="x"),w=new Array(M.length),l=0;l<w.length;l++)w[l]=!1;p=k[M[0]];var A=new Array(p.length);for(l=0;l<p.length;l++)A[l]=p[l][b];for(l=1;l<M.length;l++){for(f=k[M[l]],c=u=0;c<f.length;c++){for(d=f[c][b];d>A[u]&&u<A.length;u++)a(f,c,A[u],l,w,y,b),c++;if(d!==A[u]){for(h=0;h<l;h++)a(k[M[h]],u,d,h,w,y,b);A.splice(u,0,d)}u++}for(;u<A.length;u++)a(f,c,A[u],l,w,y,b),c++}var S=A.length;for(c=0;c<p.length;c++){for(g=p[c][_]=p[c].s,l=1;l<M.length;l++)(f=k[M[l]])[0].trace._rawLength=f[0].trace._length,f[0].trace._length=S,g+=f[c].s,f[c][_]=g;if(x)for(v=("fraction"===x?g:g/100)||1,l=0;l<M.length;l++){var E=k[M[l]][c];E[_]/=v,E.sNorm=E.s/v}}for(l=0;l<M.length;l++){var L=(f=k[M[l]])[0].trace,C=n.calcMarkerSize(L,L._rawLength),P=Array.isArray(C);if(C&&w[l]||P){var O=C;for(C=new Array(S),c=0;c<S;c++)C[c]=f[c].gap?0:P?O[f[c].i]:O}var z=new Array(S),I=new Array(S);for(c=0;c<S;c++)z[c]=f[c].x,I[c]=f[c].y;n.calcAxisExpansion(t,L,r,i,z,I,C),f[0].t.orientation=m.orientation}}}}}},{"./calc":1121}],1126:[function(t,e,r){"use strict";e.exports=function(t){for(var e=0;e<t.length;e++){var r=t[e];if("scatter"===r.type){var n=r.fill;if("none"!==n&&"toself"!==n&&(r.opacity=void 0,"tonexty"===n||"tonextx"===n))for(var a=e-1;a>=0;a--){var i=t[a];if("scatter"===i.type&&i.xaxis===r.xaxis&&i.yaxis===r.yaxis){i.opacity=void 0;break}}}}}},{}],1127:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../registry"),i=t("./attributes"),o=t("./constants"),s=t("./subtypes"),l=t("./xy_defaults"),c=t("./stack_defaults"),u=t("./marker_defaults"),h=t("./line_defaults"),f=t("./line_shape_defaults"),p=t("./text_defaults"),d=t("./fillcolor_defaults");e.exports=function(t,e,r,g){function v(r,a){return n.coerce(t,e,i,r,a)}var m=l(t,e,g,v);if(m||(e.visible=!1),e.visible){var y=c(t,e,g,v),x=!y&&m<o.PTS_LINESONLY?"lines+markers":"lines";v("text"),v("hovertext"),v("mode",x),s.hasLines(e)&&(h(t,e,r,g,v),f(t,e,v),v("connectgaps"),v("line.simplify")),s.hasMarkers(e)&&u(t,e,r,g,v,{gradient:!0}),s.hasText(e)&&(v("texttemplate"),p(t,e,g,v));var b=[];(s.hasMarkers(e)||s.hasText(e))&&(v("cliponaxis"),v("marker.maxdisplayed"),b.push("points")),v("fill",y?y.fillDflt:"none"),"none"!==e.fill&&(d(t,e,r,v),s.hasLines(e)||f(t,e,v));var _=(e.line||{}).color,w=(e.marker||{}).color;"tonext"!==e.fill&&"toself"!==e.fill||b.push("fills"),v("hoveron",b.join("+")||"points"),"fills"!==e.hoveron&&v("hovertemplate");var k=a.getComponentMethod("errorbars","supplyDefaults");k(t,e,_||w||r,{axis:"y"}),k(t,e,_||w||r,{axis:"x",inherit:"y"}),n.coerceSelectionMarkerOpacity(e,v)}}},{"../../lib":717,"../../registry":846,"./attributes":1120,"./constants":1124,"./fillcolor_defaults":1128,"./line_defaults":1133,"./line_shape_defaults":1135,"./marker_defaults":1139,"./stack_defaults":1142,"./subtypes":1144,"./text_defaults":1145,"./xy_defaults":1146}],1128:[function(t,e,r){"use strict";var n=t("../../components/color"),a=t("../../lib").isArrayOrTypedArray;e.exports=function(t,e,r,i){var o=!1;if(e.marker){var s=e.marker.color,l=(e.marker.line||{}).color;s&&!a(s)?o=s:l&&!a(l)&&(o=l)}i("fillcolor",n.addOpacity((e.line||{}).color||o||r,.5))}},{"../../components/color":591,"../../lib":717}],1129:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes");e.exports=function(t,e,r){var a={},i={_fullLayout:r},o=n.getFromTrace(i,e,"x"),s=n.getFromTrace(i,e,"y");return a.xLabel=n.tickText(o,t.x,!0).text,a.yLabel=n.tickText(s,t.y,!0).text,a}},{"../../plots/cartesian/axes":765}],1130:[function(t,e,r){"use strict";var n=t("../../components/color"),a=t("./subtypes");e.exports=function(t,e){var r,i;if("lines"===t.mode)return(r=t.line.color)&&n.opacity(r)?r:t.fillcolor;if("none"===t.mode)return t.fill?t.fillcolor:"";var o=e.mcc||(t.marker||{}).color,s=e.mlcc||((t.marker||{}).line||{}).color;return(i=o&&n.opacity(o)?o:s&&n.opacity(s)&&(e.mlw||((t.marker||{}).line||{}).width)?s:"")?n.opacity(i)<.3?n.addOpacity(i,.3):i:(r=(t.line||{}).color)&&n.opacity(r)&&a.hasLines(t)&&t.line.width?r:t.fillcolor}},{"../../components/color":591,"./subtypes":1144}],1131:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/fx"),i=t("../../registry"),o=t("./get_trace_color"),s=t("../../components/color"),l=n.fillText;e.exports=function(t,e,r,c){var u=t.cd,h=u[0].trace,f=t.xa,p=t.ya,d=f.c2p(e),g=p.c2p(r),v=[d,g],m=h.hoveron||"",y=-1!==h.mode.indexOf("markers")?3:.5;if(-1!==m.indexOf("points")){var x=function(t){var e=Math.max(y,t.mrc||0),r=f.c2p(t.x)-d,n=p.c2p(t.y)-g;return Math.max(Math.sqrt(r*r+n*n)-e,1-y/e)},b=a.getDistanceFunction(c,function(t){var e=Math.max(3,t.mrc||0),r=1-1/e,n=Math.abs(f.c2p(t.x)-d);return n<e?r*n/e:n-e+r},function(t){var e=Math.max(3,t.mrc||0),r=1-1/e,n=Math.abs(p.c2p(t.y)-g);return n<e?r*n/e:n-e+r},x);if(a.getClosest(u,b,t),!1!==t.index){var _=u[t.index],w=f.c2p(_.x,!0),k=p.c2p(_.y,!0),T=_.mrc||1;t.index=_.i;var M=u[0].t.orientation,A=M&&(_.sNorm||_.s),S="h"===M?A:_.x,E="v"===M?A:_.y;return n.extendFlat(t,{color:o(h,_),x0:w-T,x1:w+T,xLabelVal:S,y0:k-T,y1:k+T,yLabelVal:E,spikeDistance:x(_),hovertemplate:h.hovertemplate}),l(_,h,t),i.getComponentMethod("errorbars","hoverInfo")(_,h,t),[t]}}if(-1!==m.indexOf("fills")&&h._polygons){var L,C,P,O,z,I,D,R,F,B=h._polygons,N=[],j=!1,V=1/0,U=-1/0,q=1/0,H=-1/0;for(L=0;L<B.length;L++)(P=B[L]).contains(v)&&(j=!j,N.push(P),q=Math.min(q,P.ymin),H=Math.max(H,P.ymax));if(j){var G=((q=Math.max(q,0))+(H=Math.min(H,p._length)))/2;for(L=0;L<N.length;L++)for(O=N[L].pts,C=1;C<O.length;C++)(R=O[C-1][1])>G!=(F=O[C][1])>=G&&(I=O[C-1][0],D=O[C][0],F-R&&(z=I+(D-I)*(G-R)/(F-R),V=Math.min(V,z),U=Math.max(U,z)));V=Math.max(V,0),U=Math.min(U,f._length);var Y=s.defaultLine;return s.opacity(h.fillcolor)?Y=h.fillcolor:s.opacity((h.line||{}).color)&&(Y=h.line.color),n.extendFlat(t,{distance:t.maxHoverDistance,x0:V,x1:U,y0:G,y1:G,color:Y,hovertemplate:!1}),delete t.index,h.text&&!Array.isArray(h.text)?t.text=String(h.text):t.text=h.name,[t]}}}},{"../../components/color":591,"../../components/fx":630,"../../lib":717,"../../registry":846,"./get_trace_color":1130}],1132:[function(t,e,r){"use strict";var n=t("./subtypes");e.exports={hasLines:n.hasLines,hasMarkers:n.hasMarkers,hasText:n.hasText,isBubble:n.isBubble,attributes:t("./attributes"),supplyDefaults:t("./defaults"),crossTraceDefaults:t("./cross_trace_defaults"),calc:t("./calc").calc,crossTraceCalc:t("./cross_trace_calc"),arraysToCalcdata:t("./arrays_to_calcdata"),plot:t("./plot"),colorbar:t("./marker_colorbar"),formatLabels:t("./format_labels"),style:t("./style").style,styleOnSelect:t("./style").styleOnSelect,hoverPoints:t("./hover"),selectPoints:t("./select"),animatable:!0,moduleType:"trace",name:"scatter",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","symbols","errorBarsOK","showLegend","scatter-like","zoomScale"],meta:{}}},{"../../plots/cartesian":776,"./arrays_to_calcdata":1119,"./attributes":1120,"./calc":1121,"./cross_trace_calc":1125,"./cross_trace_defaults":1126,"./defaults":1127,"./format_labels":1129,"./hover":1131,"./marker_colorbar":1138,"./plot":1140,"./select":1141,"./style":1143,"./subtypes":1144}],1133:[function(t,e,r){"use strict";var n=t("../../lib").isArrayOrTypedArray,a=t("../../components/colorscale/helpers").hasColorscale,i=t("../../components/colorscale/defaults");e.exports=function(t,e,r,o,s,l){var c=(t.marker||{}).color;(s("line.color",r),a(t,"line"))?i(t,e,o,s,{prefix:"line.",cLetter:"c"}):s("line.color",!n(c)&&c||r);s("line.width"),(l||{}).noDash||s("line.dash")}},{"../../components/colorscale/defaults":601,"../../components/colorscale/helpers":602,"../../lib":717}],1134:[function(t,e,r){"use strict";var n=t("../../constants/numerical"),a=n.BADNUM,i=n.LOG_CLIP,o=i+.5,s=i-.5,l=t("../../lib"),c=l.segmentsIntersect,u=l.constrain,h=t("./constants");e.exports=function(t,e){var r,n,i,f,p,d,g,v,m,y,x,b,_,w,k,T,M,A,S=e.xaxis,E=e.yaxis,L="log"===S.type,C="log"===E.type,P=S._length,O=E._length,z=e.connectGaps,I=e.baseTolerance,D=e.shape,R="linear"===D,F=e.fill&&"none"!==e.fill,B=[],N=h.minTolerance,j=t.length,V=new Array(j),U=0;function q(r){var n=t[r];if(!n)return!1;var i=e.linearized?S.l2p(n.x):S.c2p(n.x),l=e.linearized?E.l2p(n.y):E.c2p(n.y);if(i===a){if(L&&(i=S.c2p(n.x,!0)),i===a)return!1;C&&l===a&&(i*=Math.abs(S._m*O*(S._m>0?o:s)/(E._m*P*(E._m>0?o:s)))),i*=1e3}if(l===a){if(C&&(l=E.c2p(n.y,!0)),l===a)return!1;l*=1e3}return[i,l]}function H(t,e,r,n){var a=r-t,i=n-e,o=.5-t,s=.5-e,l=a*a+i*i,c=a*o+i*s;if(c>0&&c<l){var u=o*i-s*a;if(u*u<l)return!0}}function G(t,e){var r=t[0]/P,n=t[1]/O,a=Math.max(0,-r,r-1,-n,n-1);return a&&void 0!==M&&H(r,n,M,A)&&(a=0),a&&e&&H(r,n,e[0]/P,e[1]/O)&&(a=0),(1+h.toleranceGrowth*a)*I}function Y(t,e){var r=t[0]-e[0],n=t[1]-e[1];return Math.sqrt(r*r+n*n)}var W,X,Z,J,K,Q,$,tt=h.maxScreensAway,et=-P*tt,rt=P*(1+tt),nt=-O*tt,at=O*(1+tt),it=[[et,nt,rt,nt],[rt,nt,rt,at],[rt,at,et,at],[et,at,et,nt]];function ot(t){if(t[0]<et||t[0]>rt||t[1]<nt||t[1]>at)return[u(t[0],et,rt),u(t[1],nt,at)]}function st(t,e){return t[0]===e[0]&&(t[0]===et||t[0]===rt)||(t[1]===e[1]&&(t[1]===nt||t[1]===at)||void 0)}function lt(t,e,r){return function(n,a){var i=ot(n),o=ot(a),s=[];if(i&&o&&st(i,o))return s;i&&s.push(i),o&&s.push(o);var c=2*l.constrain((n[t]+a[t])/2,e,r)-((i||n)[t]+(o||a)[t]);c&&((i&&o?c>0==i[t]>o[t]?i:o:i||o)[t]+=c);return s}}function ct(t){var e=t[0],r=t[1],n=e===V[U-1][0],a=r===V[U-1][1];if(!n||!a)if(U>1){var i=e===V[U-2][0],o=r===V[U-2][1];n&&(e===et||e===rt)&&i?o?U--:V[U-1]=t:a&&(r===nt||r===at)&&o?i?U--:V[U-1]=t:V[U++]=t}else V[U++]=t}function ut(t){V[U-1][0]!==t[0]&&V[U-1][1]!==t[1]&&ct([Z,J]),ct(t),K=null,Z=J=0}function ht(t){if(M=t[0]/P,A=t[1]/O,W=t[0]<et?et:t[0]>rt?rt:0,X=t[1]<nt?nt:t[1]>at?at:0,W||X){if(U)if(K){var e=$(K,t);e.length>1&&(ut(e[0]),V[U++]=e[1])}else Q=$(V[U-1],t)[0],V[U++]=Q;else V[U++]=[W||t[0],X||t[1]];var r=V[U-1];W&&X&&(r[0]!==W||r[1]!==X)?(K&&(Z!==W&&J!==X?ct(Z&&J?(n=K,i=(a=t)[0]-n[0],o=(a[1]-n[1])/i,(n[1]*a[0]-a[1]*n[0])/i>0?[o>0?et:rt,at]:[o>0?rt:et,nt]):[Z||W,J||X]):Z&&J&&ct([Z,J])),ct([W,X])):Z-W&&J-X&&ct([W||Z,X||J]),K=t,Z=W,J=X}else K&&ut($(K,t)[0]),V[U++]=t;var n,a,i,o}for("linear"===D||"spline"===D?$=function(t,e){for(var r=[],n=0,a=0;a<4;a++){var i=it[a],o=c(t[0],t[1],e[0],e[1],i[0],i[1],i[2],i[3]);o&&(!n||Math.abs(o.x-r[0][0])>1||Math.abs(o.y-r[0][1])>1)&&(o=[o.x,o.y],n&&Y(o,t)<Y(r[0],t)?r.unshift(o):r.push(o),n++)}return r}:"hv"===D||"vh"===D?$=function(t,e){var r=[],n=ot(t),a=ot(e);return n&&a&&st(n,a)?r:(n&&r.push(n),a&&r.push(a),r)}:"hvh"===D?$=lt(0,et,rt):"vhv"===D&&($=lt(1,nt,at)),r=0;r<j;r++)if(n=q(r)){for(U=0,K=null,ht(n),r++;r<j;r++){if(!(f=q(r))){if(z)continue;break}if(R&&e.simplify){var ft=q(r+1);if(y=Y(f,n),F&&(0===U||U===j-1)||!(y<G(f,ft)*N)){for(v=[(f[0]-n[0])/y,(f[1]-n[1])/y],p=n,x=y,b=w=k=0,g=!1,i=f,r++;r<t.length;r++){if(d=ft,ft=q(r+1),!d){if(z)continue;break}if(T=(m=[d[0]-n[0],d[1]-n[1]])[0]*v[1]-m[1]*v[0],w=Math.min(w,T),(k=Math.max(k,T))-w>G(d,ft))break;i=d,(_=m[0]*v[0]+m[1]*v[1])>x?(x=_,f=d,g=!1):_<b&&(b=_,p=d,g=!0)}if(g?(ht(f),i!==p&&ht(p)):(p!==n&&ht(p),i!==f&&ht(f)),ht(i),r>=t.length||!d)break;ht(d),n=d}}else ht(f)}K&&ct([Z||K[0],J||K[1]]),B.push(V.slice(0,U))}return B}},{"../../constants/numerical":693,"../../lib":717,"./constants":1124}],1135:[function(t,e,r){"use strict";e.exports=function(t,e,r){"spline"===r("line.shape")&&r("line.smoothing")}},{}],1136:[function(t,e,r){"use strict";var n={tonextx:1,tonexty:1,tonext:1};e.exports=function(t,e,r){var a,i,o,s,l,c={},u=!1,h=-1,f=0,p=-1;for(i=0;i<r.length;i++)(o=(a=r[i][0].trace).stackgroup||"")?o in c?l=c[o]:(l=c[o]=f,f++):a.fill in n&&p>=0?l=p:(l=p=f,f++),l<h&&(u=!0),a._groupIndex=h=l;var d=r.slice();u&&d.sort(function(t,e){var r=t[0].trace,n=e[0].trace;return r._groupIndex-n._groupIndex||r.index-n.index});var g={};for(i=0;i<d.length;i++)o=(a=d[i][0].trace).stackgroup||"",!0===a.visible?(a._nexttrace=null,a.fill in n&&(s=g[o],a._prevtrace=s||null,s&&(s._nexttrace=a)),a._ownfill=a.fill&&("tozero"===a.fill.substr(0,6)||"toself"===a.fill||"to"===a.fill.substr(0,2)&&!a._prevtrace),g[o]=a):a._prevtrace=a._nexttrace=a._ownfill=null;return d}},{}],1137:[function(t,e,r){"use strict";var n=t("fast-isnumeric");e.exports=function(t){var e=t.marker,r=e.sizeref||1,a=e.sizemin||0,i="area"===e.sizemode?function(t){return Math.sqrt(t/r)}:function(t){return t/r};return function(t){var e=i(t/2);return n(e)&&e>0?Math.max(e,a):0}}},{"fast-isnumeric":228}],1138:[function(t,e,r){"use strict";e.exports={container:"marker",min:"cmin",max:"cmax"}},{}],1139:[function(t,e,r){"use strict";var n=t("../../components/color"),a=t("../../components/colorscale/helpers").hasColorscale,i=t("../../components/colorscale/defaults"),o=t("./subtypes");e.exports=function(t,e,r,s,l,c){var u=o.isBubble(t),h=(t.line||{}).color;(c=c||{},h&&(r=h),l("marker.symbol"),l("marker.opacity",u?.7:1),l("marker.size"),l("marker.color",r),a(t,"marker")&&i(t,e,s,l,{prefix:"marker.",cLetter:"c"}),c.noSelect||(l("selected.marker.color"),l("unselected.marker.color"),l("selected.marker.size"),l("unselected.marker.size")),c.noLine||(l("marker.line.color",h&&!Array.isArray(h)&&e.marker.color!==h?h:u?n.background:n.defaultLine),a(t,"marker.line")&&i(t,e,s,l,{prefix:"marker.line.",cLetter:"c"}),l("marker.line.width",u?1:0)),u&&(l("marker.sizeref"),l("marker.sizemin"),l("marker.sizemode")),c.gradient)&&("none"!==l("marker.gradient.type")&&l("marker.gradient.color"))}},{"../../components/color":591,"../../components/colorscale/defaults":601,"../../components/colorscale/helpers":602,"./subtypes":1144}],1140:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../lib"),o=i.ensureSingle,s=i.identity,l=t("../../components/drawing"),c=t("./subtypes"),u=t("./line_points"),h=t("./link_traces"),f=t("../../lib/polygon").tester;function p(t,e,r,h,p,d,g){var v;!function(t,e,r,a,o){var s=r.xaxis,l=r.yaxis,u=n.extent(i.simpleMap(s.range,s.r2c)),h=n.extent(i.simpleMap(l.range,l.r2c)),f=a[0].trace;if(!c.hasMarkers(f))return;var p=f.marker.maxdisplayed;if(0===p)return;var d=a.filter(function(t){return t.x>=u[0]&&t.x<=u[1]&&t.y>=h[0]&&t.y<=h[1]}),g=Math.ceil(d.length/p),v=0;o.forEach(function(t,r){var n=t[0].trace;c.hasMarkers(n)&&n.marker.maxdisplayed>0&&r<e&&v++});var m=Math.round(v*g/3+Math.floor(v/3)*g/7.1);a.forEach(function(t){delete t.vis}),d.forEach(function(t,e){0===Math.round((e+m)%g)&&(t.vis=!0)})}(0,e,r,h,p);var m=!!g&&g.duration>0;function y(t){return m?t.transition():t}var x=r.xaxis,b=r.yaxis,_=h[0].trace,w=_.line,k=n.select(d),T=o(k,"g","errorbars"),M=o(k,"g","lines"),A=o(k,"g","points"),S=o(k,"g","text");if(a.getComponentMethod("errorbars","plot")(t,T,r,g),!0===_.visible){var E,L;y(k).style("opacity",_.opacity);var C=_.fill.charAt(_.fill.length-1);"x"!==C&&"y"!==C&&(C=""),h[0][r.isRangePlot?"nodeRangePlot3":"node3"]=k;var P,O,z="",I=[],D=_._prevtrace;D&&(z=D._prevRevpath||"",L=D._nextFill,I=D._polygons);var R,F,B,N,j,V,U,q="",H="",G=[],Y=i.noop;if(E=_._ownFill,c.hasLines(_)||"none"!==_.fill){for(L&&L.datum(h),-1!==["hv","vh","hvh","vhv"].indexOf(w.shape)?(R=l.steps(w.shape),F=l.steps(w.shape.split("").reverse().join(""))):R=F="spline"===w.shape?function(t){var e=t[t.length-1];return t.length>1&&t[0][0]===e[0]&&t[0][1]===e[1]?l.smoothclosed(t.slice(1),w.smoothing):l.smoothopen(t,w.smoothing)}:function(t){return"M"+t.join("L")},B=function(t){return F(t.reverse())},G=u(h,{xaxis:x,yaxis:b,connectGaps:_.connectgaps,baseTolerance:Math.max(w.width||1,3)/4,shape:w.shape,simplify:w.simplify,fill:_.fill}),U=_._polygons=new Array(G.length),v=0;v<G.length;v++)_._polygons[v]=f(G[v]);G.length&&(N=G[0][0],V=(j=G[G.length-1])[j.length-1]),Y=function(t){return function(e){if(P=R(e),O=B(e),q?C?(q+="L"+P.substr(1),H=O+"L"+H.substr(1)):(q+="Z"+P,H=O+"Z"+H):(q=P,H=O),c.hasLines(_)&&e.length>1){var r=n.select(this);if(r.datum(h),t)y(r.style("opacity",0).attr("d",P).call(l.lineGroupStyle)).style("opacity",1);else{var a=y(r);a.attr("d",P),l.singleLineStyle(h,a)}}}}}var W=M.selectAll(".js-line").data(G);y(W.exit()).style("opacity",0).remove(),W.each(Y(!1)),W.enter().append("path").classed("js-line",!0).style("vector-effect","non-scaling-stroke").call(l.lineGroupStyle).each(Y(!0)),l.setClipUrl(W,r.layerClipId,t),G.length?(E?(E.datum(h),N&&V&&(C?("y"===C?N[1]=V[1]=b.c2p(0,!0):"x"===C&&(N[0]=V[0]=x.c2p(0,!0)),y(E).attr("d","M"+V+"L"+N+"L"+q.substr(1)).call(l.singleFillStyle)):y(E).attr("d",q+"Z").call(l.singleFillStyle))):L&&("tonext"===_.fill.substr(0,6)&&q&&z?("tonext"===_.fill?y(L).attr("d",q+"Z"+z+"Z").call(l.singleFillStyle):y(L).attr("d",q+"L"+z.substr(1)+"Z").call(l.singleFillStyle),_._polygons=_._polygons.concat(I)):(Z(L),_._polygons=null)),_._prevRevpath=H,_._prevPolygons=U):(E?Z(E):L&&Z(L),_._polygons=_._prevRevpath=_._prevPolygons=null),A.datum(h),S.datum(h),function(e,a,i){var o,u=i[0].trace,h=c.hasMarkers(u),f=c.hasText(u),p=tt(u),d=et,g=et;if(h||f){var v=s,_=u.stackgroup,w=_&&"infer zero"===t._fullLayout._scatterStackOpts[x._id+b._id][_].stackgaps;u.marker.maxdisplayed||u._needsCull?v=w?K:J:_&&!w&&(v=Q),h&&(d=v),f&&(g=v)}var k,T=(o=e.selectAll("path.point").data(d,p)).enter().append("path").classed("point",!0);m&&T.call(l.pointStyle,u,t).call(l.translatePoints,x,b).style("opacity",0).transition().style("opacity",1),o.order(),h&&(k=l.makePointStyleFns(u)),o.each(function(e){var a=n.select(this),i=y(a);l.translatePoint(e,i,x,b)?(l.singlePointStyle(e,i,u,k,t),r.layerClipId&&l.hideOutsideRangePoint(e,i,x,b,u.xcalendar,u.ycalendar),u.customdata&&a.classed("plotly-customdata",null!==e.data&&void 0!==e.data)):i.remove()}),m?o.exit().transition().style("opacity",0).remove():o.exit().remove(),(o=a.selectAll("g").data(g,p)).enter().append("g").classed("textpoint",!0).append("text"),o.order(),o.each(function(t){var e=n.select(this),a=y(e.select("text"));l.translatePoint(t,a,x,b)?r.layerClipId&&l.hideOutsideRangePoint(t,e,x,b,u.xcalendar,u.ycalendar):e.remove()}),o.selectAll("text").call(l.textPointStyle,u,t).each(function(t){var e=x.c2p(t.x),r=b.c2p(t.y);n.select(this).selectAll("tspan.line").each(function(){y(n.select(this)).attr({x:e,y:r})})}),o.exit().remove()}(A,S,h);var X=!1===_.cliponaxis?null:r.layerClipId;l.setClipUrl(A,X,t),l.setClipUrl(S,X,t)}function Z(t){y(t).attr("d","M0,0Z")}function J(t){return t.filter(function(t){return!t.gap&&t.vis})}function K(t){return t.filter(function(t){return t.vis})}function Q(t){return t.filter(function(t){return!t.gap})}function $(t){return t.id}function tt(t){if(t.ids)return $}function et(){return!1}}e.exports=function(t,e,r,a,i,c){var u,f,d=!i,g=!!i&&i.duration>0,v=h(t,e,r);((u=a.selectAll("g.trace").data(v,function(t){return t[0].trace.uid})).enter().append("g").attr("class",function(t){return"trace scatter trace"+t[0].trace.uid}).style("stroke-miterlimit",2),u.order(),function(t,e,r){e.each(function(e){var a=o(n.select(this),"g","fills");l.setClipUrl(a,r.layerClipId,t);var i=e[0].trace,c=[];i._ownfill&&c.push("_ownFill"),i._nexttrace&&c.push("_nextFill");var u=a.selectAll("g").data(c,s);u.enter().append("g"),u.exit().each(function(t){i[t]=null}).remove(),u.order().each(function(t){i[t]=o(n.select(this),"path","js-fill")})})}(t,u,e),g)?(c&&(f=c()),n.transition().duration(i.duration).ease(i.easing).each("end",function(){f&&f()}).each("interrupt",function(){f&&f()}).each(function(){a.selectAll("g.trace").each(function(r,n){p(t,n,e,r,v,this,i)})})):u.each(function(r,n){p(t,n,e,r,v,this,i)});d&&u.exit().remove(),a.selectAll("path:not([d])").remove()}},{"../../components/drawing":612,"../../lib":717,"../../lib/polygon":729,"../../registry":846,"./line_points":1134,"./link_traces":1136,"./subtypes":1144,d3:165}],1141:[function(t,e,r){"use strict";var n=t("./subtypes");e.exports=function(t,e){var r,a,i,o,s=t.cd,l=t.xaxis,c=t.yaxis,u=[],h=s[0].trace;if(!n.hasMarkers(h)&&!n.hasText(h))return[];if(!1===e)for(r=0;r<s.length;r++)s[r].selected=0;else for(r=0;r<s.length;r++)a=s[r],i=l.c2p(a.x),o=c.c2p(a.y),null!==a.i&&e.contains([i,o],!1,r,t)?(u.push({pointNumber:a.i,x:l.c2d(a.x),y:c.c2d(a.y)}),a.selected=1):a.selected=0;return u}},{"./subtypes":1144}],1142:[function(t,e,r){"use strict";var n=["orientation","groupnorm","stackgaps"];e.exports=function(t,e,r,a){var i=r._scatterStackOpts,o=a("stackgroup");if(o){var s=e.xaxis+e.yaxis,l=i[s];l||(l=i[s]={});var c=l[o],u=!1;c?c.traces.push(e):(c=l[o]={traceIndices:[],traces:[e]},u=!0);for(var h={orientation:e.x&&!e.y?"h":"v"},f=0;f<n.length;f++){var p=n[f],d=p+"Found";if(!c[d]){var g=void 0!==t[p],v="orientation"===p;if((g||u)&&(c[p]=a(p,h[p]),v&&(c.fillDflt="h"===c[p]?"tonextx":"tonexty"),g&&(c[d]=!0,!u&&(delete c.traces[0][p],v))))for(var m=0;m<c.traces.length-1;m++){var y=c.traces[m];y._input.fill!==y.fill&&(y.fill=c.fillDflt)}}}return c}}},{}],1143:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/drawing"),i=t("../../registry");function o(t,e,r){a.pointStyle(t.selectAll("path.point"),e,r)}function s(t,e,r){a.textPointStyle(t.selectAll("text"),e,r)}e.exports={style:function(t){var e=n.select(t).selectAll("g.trace.scatter");e.style("opacity",function(t){return t[0].trace.opacity}),e.selectAll("g.points").each(function(e){o(n.select(this),e.trace||e[0].trace,t)}),e.selectAll("g.text").each(function(e){s(n.select(this),e.trace||e[0].trace,t)}),e.selectAll("g.trace path.js-line").call(a.lineGroupStyle),e.selectAll("g.trace path.js-fill").call(a.fillGroupStyle),i.getComponentMethod("errorbars","style")(e)},stylePoints:o,styleText:s,styleOnSelect:function(t,e,r){var n=e[0].trace;n.selectedpoints?(a.selectedPointStyle(r.selectAll("path.point"),n),a.selectedTextStyle(r.selectAll("text"),n)):(o(r,n,t),s(r,n,t))}}},{"../../components/drawing":612,"../../registry":846,d3:165}],1144:[function(t,e,r){"use strict";var n=t("../../lib");e.exports={hasLines:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf("lines")},hasMarkers:function(t){return t.visible&&(t.mode&&-1!==t.mode.indexOf("markers")||"splom"===t.type)},hasText:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf("text")},isBubble:function(t){return n.isPlainObject(t.marker)&&n.isArrayOrTypedArray(t.marker.size)}}},{"../../lib":717}],1145:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e,r,a,i){i=i||{},a("textposition"),n.coerceFont(a,"textfont",r.font),i.noSelect||(a("selected.textfont.color"),a("unselected.textfont.color"))}},{"../../lib":717}],1146:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../registry");e.exports=function(t,e,r,i){var o,s=i("x"),l=i("y");if(a.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y"],r),s){var c=n.minRowLength(s);l?o=Math.min(c,n.minRowLength(l)):(o=c,i("y0"),i("dy"))}else{if(!l)return 0;o=n.minRowLength(l),i("x0"),i("dx")}return e._length=o,o}},{"../../lib":717,"../../registry":846}],1147:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),a=t("../../components/colorscale/attributes"),i=t("../../plots/template_attributes").hovertemplateAttrs,o=t("../../plots/template_attributes").texttemplateAttrs,s=t("../../plots/attributes"),l=t("../../constants/gl3d_dashes"),c=t("../../constants/gl3d_markers"),u=t("../../lib/extend").extendFlat,h=t("../../plot_api/edit_types").overrideAll,f=n.line,p=n.marker,d=p.line,g=u({width:f.width,dash:{valType:"enumerated",values:Object.keys(l),dflt:"solid"}},a("line"));var v=e.exports=h({x:n.x,y:n.y,z:{valType:"data_array"},text:u({},n.text,{}),texttemplate:o({},{}),hovertext:u({},n.hovertext,{}),hovertemplate:i(),mode:u({},n.mode,{dflt:"lines+markers"}),surfaceaxis:{valType:"enumerated",values:[-1,0,1,2],dflt:-1},surfacecolor:{valType:"color"},projection:{x:{show:{valType:"boolean",dflt:!1},opacity:{valType:"number",min:0,max:1,dflt:1},scale:{valType:"number",min:0,max:10,dflt:2/3}},y:{show:{valType:"boolean",dflt:!1},opacity:{valType:"number",min:0,max:1,dflt:1},scale:{valType:"number",min:0,max:10,dflt:2/3}},z:{show:{valType:"boolean",dflt:!1},opacity:{valType:"number",min:0,max:1,dflt:1},scale:{valType:"number",min:0,max:10,dflt:2/3}}},connectgaps:n.connectgaps,line:g,marker:u({symbol:{valType:"enumerated",values:Object.keys(c),dflt:"circle",arrayOk:!0},size:u({},p.size,{dflt:8}),sizeref:p.sizeref,sizemin:p.sizemin,sizemode:p.sizemode,opacity:u({},p.opacity,{arrayOk:!1}),colorbar:p.colorbar,line:u({width:u({},d.width,{arrayOk:!1})},a("marker.line"))},a("marker")),textposition:u({},n.textposition,{dflt:"top center"}),textfont:{color:n.textfont.color,size:n.textfont.size,family:u({},n.textfont.family,{arrayOk:!1})},hoverinfo:u({},s.hoverinfo)},"calc","nested");v.x.editType=v.y.editType=v.z.editType="calc+clearAxisTypes"},{"../../components/colorscale/attributes":598,"../../constants/gl3d_dashes":690,"../../constants/gl3d_markers":691,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/attributes":762,"../../plots/template_attributes":841,"../scatter/attributes":1120}],1148:[function(t,e,r){"use strict";var n=t("../scatter/arrays_to_calcdata"),a=t("../scatter/colorscale_calc");e.exports=function(t,e){var r=[{x:!1,y:!1,trace:e,t:{}}];return n(r,e),a(t,e),r}},{"../scatter/arrays_to_calcdata":1119,"../scatter/colorscale_calc":1123}],1149:[function(t,e,r){"use strict";var n=t("../../registry");function a(t,e,r,a){if(!e||!e.visible)return null;for(var i=n.getComponentMethod("errorbars","makeComputeError")(e),o=new Array(t.length),s=0;s<t.length;s++){var l=i(+t[s],s);if("log"===a.type){var c=a.c2l(t[s]),u=t[s]-l[0],h=t[s]+l[1];if(o[s]=[(a.c2l(u,!0)-c)*r,(a.c2l(h,!0)-c)*r],u>0){var f=a.c2l(u);a._lowerLogErrorBound||(a._lowerLogErrorBound=f),a._lowerErrorBound=Math.min(a._lowerLogErrorBound,f)}}else o[s]=[-l[0]*r,l[1]*r]}return o}e.exports=function(t,e,r){var n=[a(t.x,t.error_x,e[0],r.xaxis),a(t.y,t.error_y,e[1],r.yaxis),a(t.z,t.error_z,e[2],r.zaxis)],i=function(t){for(var e=0;e<t.length;e++)if(t[e])return t[e].length;return 0}(n);if(0===i)return null;for(var o=new Array(i),s=0;s<i;s++){for(var l=[[0,0,0],[0,0,0]],c=0;c<3;c++)if(n[c])for(var u=0;u<2;u++)l[u][c]=n[c][s][u];o[s]=l}return o}},{"../../registry":846}],1150:[function(t,e,r){"use strict";var n=t("gl-line3d"),a=t("gl-scatter3d"),i=t("gl-error3d"),o=t("gl-mesh3d"),s=t("delaunay-triangulate"),l=t("../../lib"),c=t("../../lib/str2rgbarray"),u=t("../../lib/gl_format_color").formatColor,h=t("../scatter/make_bubble_size_func"),f=t("../../constants/gl3d_dashes"),p=t("../../constants/gl3d_markers"),d=t("../../plots/cartesian/axes"),g=t("../../components/fx/helpers").appendArrayPointValue,v=t("./calc_errors");function m(t,e){this.scene=t,this.uid=e,this.linePlot=null,this.scatterPlot=null,this.errorBars=null,this.textMarkers=null,this.delaunayMesh=null,this.color=null,this.mode="",this.dataPoints=[],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.textLabels=null,this.data=null}var y=m.prototype;function x(t){return null==t?0:t.indexOf("left")>-1?-1:t.indexOf("right")>-1?1:0}function b(t){return null==t?0:t.indexOf("top")>-1?-1:t.indexOf("bottom")>-1?1:0}function _(t,e){return e(4*t)}function w(t){return p[t]}function k(t,e,r,n,a){var i=null;if(l.isArrayOrTypedArray(t)){i=[];for(var o=0;o<e;o++)void 0===t[o]?i[o]=n:i[o]=r(t[o],a)}else i=r(t,l.identity);return i}function T(t,e){var r,n,a,i,o,s,f=[],p=t.fullSceneLayout,m=t.dataScale,y=p.xaxis,T=p.yaxis,M=p.zaxis,A=e.marker,S=e.line,E=e.x||[],L=e.y||[],C=e.z||[],P=E.length,O=e.xcalendar,z=e.ycalendar,I=e.zcalendar;for(o=0;o<P;o++)r=y.d2l(E[o],0,O)*m[0],n=T.d2l(L[o],0,z)*m[1],a=M.d2l(C[o],0,I)*m[2],f[o]=[r,n,a];if(Array.isArray(e.text))s=e.text;else if(void 0!==e.text)for(s=new Array(P),o=0;o<P;o++)s[o]=e.text;function D(t,e){var r=p[t];return d.tickText(r,r.d2l(e),!0).text}var R=e.texttemplate;if(R){var F=t.fullLayout._d3locale,B=Array.isArray(R),N=B?Math.min(R.length,P):P,j=B?function(t){return R[t]}:function(){return R};for(s=new Array(N),o=0;o<N;o++){var V={x:E[o],y:L[o],z:C[o]},U={xLabel:D("xaxis",E[o]),yLabel:D("yaxis",L[o]),zLabel:D("zaxis",C[o])},q={};g(q,e,o);var H=e._meta||{};s[o]=l.texttemplateString(j(o),U,F,q,V,H)}}if(i={position:f,mode:e.mode,text:s},"line"in e&&(i.lineColor=u(S,1,P),i.lineWidth=S.width,i.lineDashes=S.dash),"marker"in e){var G=h(e);i.scatterColor=u(A,1,P),i.scatterSize=k(A.size,P,_,20,G),i.scatterMarker=k(A.symbol,P,w,"\u25cf"),i.scatterLineWidth=A.line.width,i.scatterLineColor=u(A.line,1,P),i.scatterAngle=0}"textposition"in e&&(i.textOffset=function(t){var e=[0,0];if(Array.isArray(t))for(var r=0;r<t.length;r++)e[r]=[0,0],t[r]&&(e[r][0]=x(t[r]),e[r][1]=b(t[r]));else e[0]=x(t),e[1]=b(t);return e}(e.textposition),i.textColor=u(e.textfont,1,P),i.textSize=k(e.textfont.size,P,l.identity,12),i.textFont=e.textfont.family,i.textAngle=0);var Y=["x","y","z"];for(i.project=[!1,!1,!1],i.projectScale=[1,1,1],i.projectOpacity=[1,1,1],o=0;o<3;++o){var W=e.projection[Y[o]];(i.project[o]=W.show)&&(i.projectOpacity[o]=W.opacity,i.projectScale[o]=W.scale)}i.errorBounds=v(e,m,p);var X=function(t){for(var e=[0,0,0],r=[[0,0,0],[0,0,0],[0,0,0]],n=[1,1,1],a=0;a<3;a++){var i=t[a];i&&!1!==i.copy_zstyle&&!1!==t[2].visible&&(i=t[2]),i&&i.visible&&(e[a]=i.width/2,r[a]=c(i.color),n[a]=i.thickness)}return{capSize:e,color:r,lineWidth:n}}([e.error_x,e.error_y,e.error_z]);return i.errorColor=X.color,i.errorLineWidth=X.lineWidth,i.errorCapSize=X.capSize,i.delaunayAxis=e.surfaceaxis,i.delaunayColor=c(e.surfacecolor),i}function M(t){if(Array.isArray(t)){var e=t[0];return Array.isArray(e)&&(t=e),"rgb("+t.slice(0,3).map(function(t){return Math.round(255*t)})+")"}return null}y.handlePick=function(t){if(t.object&&(t.object===this.linePlot||t.object===this.delaunayMesh||t.object===this.textMarkers||t.object===this.scatterPlot)){var e=t.index=t.data.index;return t.object.highlight&&t.object.highlight(null),this.scatterPlot&&(t.object=this.scatterPlot,this.scatterPlot.highlight(t.data)),t.textLabel="",this.textLabels&&(Array.isArray(this.textLabels)?(this.textLabels[e]||0===this.textLabels[e])&&(t.textLabel=this.textLabels[e]):t.textLabel=this.textLabels),t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e]],!0}},y.update=function(t){var e,r,l,c,u=this.scene.glplot.gl,h=f.solid;this.data=t;var p=T(this.scene,t);"mode"in p&&(this.mode=p.mode),"lineDashes"in p&&p.lineDashes in f&&(h=f[p.lineDashes]),this.color=M(p.scatterColor)||M(p.lineColor),this.dataPoints=p.position,e={gl:this.scene.glplot.gl,position:p.position,color:p.lineColor,lineWidth:p.lineWidth||1,dashes:h[0],dashScale:h[1],opacity:t.opacity,connectGaps:t.connectgaps},-1!==this.mode.indexOf("lines")?this.linePlot?this.linePlot.update(e):(this.linePlot=n(e),this.linePlot._trace=this,this.scene.glplot.add(this.linePlot)):this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose(),this.linePlot=null);var d=t.opacity;if(t.marker&&t.marker.opacity&&(d*=t.marker.opacity),r={gl:this.scene.glplot.gl,position:p.position,color:p.scatterColor,size:p.scatterSize,glyph:p.scatterMarker,opacity:d,orthographic:!0,lineWidth:p.scatterLineWidth,lineColor:p.scatterLineColor,project:p.project,projectScale:p.projectScale,projectOpacity:p.projectOpacity},-1!==this.mode.indexOf("markers")?this.scatterPlot?this.scatterPlot.update(r):(this.scatterPlot=a(r),this.scatterPlot._trace=this,this.scatterPlot.highlightScale=1,this.scene.glplot.add(this.scatterPlot)):this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose(),this.scatterPlot=null),c={gl:this.scene.glplot.gl,position:p.position,glyph:p.text,color:p.textColor,size:p.textSize,angle:p.textAngle,alignment:p.textOffset,font:p.textFont,orthographic:!0,lineWidth:0,project:!1,opacity:t.opacity},this.textLabels=t.hovertext||t.text,-1!==this.mode.indexOf("text")?this.textMarkers?this.textMarkers.update(c):(this.textMarkers=a(c),this.textMarkers._trace=this,this.textMarkers.highlightScale=1,this.scene.glplot.add(this.textMarkers)):this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose(),this.textMarkers=null),l={gl:this.scene.glplot.gl,position:p.position,color:p.errorColor,error:p.errorBounds,lineWidth:p.errorLineWidth,capSize:p.errorCapSize,opacity:t.opacity},this.errorBars?p.errorBounds?this.errorBars.update(l):(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose(),this.errorBars=null):p.errorBounds&&(this.errorBars=i(l),this.errorBars._trace=this,this.scene.glplot.add(this.errorBars)),p.delaunayAxis>=0){var g=function(t,e,r){var n,a=(r+1)%3,i=(r+2)%3,o=[],l=[];for(n=0;n<t.length;++n){var c=t[n];!isNaN(c[a])&&isFinite(c[a])&&!isNaN(c[i])&&isFinite(c[i])&&(o.push([c[a],c[i]]),l.push(n))}var u=s(o);for(n=0;n<u.length;++n)for(var h=u[n],f=0;f<h.length;++f)h[f]=l[h[f]];return{positions:t,cells:u,meshColor:e}}(p.position,p.delaunayColor,p.delaunayAxis);g.opacity=t.opacity,this.delaunayMesh?this.delaunayMesh.update(g):(g.gl=u,this.delaunayMesh=o(g),this.delaunayMesh._trace=this,this.scene.glplot.add(this.delaunayMesh))}else this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose(),this.delaunayMesh=null)},y.dispose=function(){this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose()),this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose()),this.errorBars&&(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose()),this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose()),this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose())},e.exports=function(t,e){var r=new m(t,e.uid);return r.update(e),r}},{"../../components/fx/helpers":626,"../../constants/gl3d_dashes":690,"../../constants/gl3d_markers":691,"../../lib":717,"../../lib/gl_format_color":714,"../../lib/str2rgbarray":740,"../../plots/cartesian/axes":765,"../scatter/make_bubble_size_func":1137,"./calc_errors":1149,"delaunay-triangulate":167,"gl-error3d":250,"gl-line3d":258,"gl-mesh3d":283,"gl-scatter3d":300}],1151:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("../scatter/subtypes"),o=t("../scatter/marker_defaults"),s=t("../scatter/line_defaults"),l=t("../scatter/text_defaults"),c=t("./attributes");e.exports=function(t,e,r,u){function h(r,n){return a.coerce(t,e,c,r,n)}if(function(t,e,r,a){var i=0,o=r("x"),s=r("y"),l=r("z");n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y","z"],a),o&&s&&l&&(i=Math.min(o.length,s.length,l.length),e._length=e._xlength=e._ylength=e._zlength=i);return i}(t,e,h,u)){h("text"),h("hovertext"),h("hovertemplate"),h("mode"),i.hasLines(e)&&(h("connectgaps"),s(t,e,r,u,h)),i.hasMarkers(e)&&o(t,e,r,u,h,{noSelect:!0}),i.hasText(e)&&(h("texttemplate"),l(t,e,u,h,{noSelect:!0}));var f=(e.line||{}).color,p=(e.marker||{}).color;h("surfaceaxis")>=0&&h("surfacecolor",f||p);for(var d=["x","y","z"],g=0;g<3;++g){var v="projection."+d[g];h(v+".show")&&(h(v+".opacity"),h(v+".scale"))}var m=n.getComponentMethod("errorbars","supplyDefaults");m(t,e,f||p||r,{axis:"z"}),m(t,e,f||p||r,{axis:"y",inherit:"z"}),m(t,e,f||p||r,{axis:"x",inherit:"z"})}else e.visible=!1}},{"../../lib":717,"../../registry":846,"../scatter/line_defaults":1133,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scatter/text_defaults":1145,"./attributes":1147}],1152:[function(t,e,r){"use strict";e.exports={plot:t("./convert"),attributes:t("./attributes"),markerSymbols:t("../../constants/gl3d_markers"),supplyDefaults:t("./defaults"),colorbar:[{container:"marker",min:"cmin",max:"cmax"},{container:"line",min:"cmin",max:"cmax"}],calc:t("./calc"),moduleType:"trace",name:"scatter3d",basePlotModule:t("../../plots/gl3d"),categories:["gl3d","symbols","showLegend","scatter-like"],meta:{}}},{"../../constants/gl3d_markers":691,"../../plots/gl3d":805,"./attributes":1147,"./calc":1148,"./convert":1150,"./defaults":1151}],1153:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),a=t("../../plots/attributes"),i=t("../../plots/template_attributes").hovertemplateAttrs,o=t("../../plots/template_attributes").texttemplateAttrs,s=t("../../components/colorscale/attributes"),l=t("../../lib/extend").extendFlat,c=n.marker,u=n.line,h=c.line;e.exports={carpet:{valType:"string",editType:"calc"},a:{valType:"data_array",editType:"calc"},b:{valType:"data_array",editType:"calc"},mode:l({},n.mode,{dflt:"markers"}),text:l({},n.text,{}),texttemplate:o({editType:"plot"},{keys:["a","b","text"]}),hovertext:l({},n.hovertext,{}),line:{color:u.color,width:u.width,dash:u.dash,shape:l({},u.shape,{values:["linear","spline"]}),smoothing:u.smoothing,editType:"calc"},connectgaps:n.connectgaps,fill:l({},n.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:n.fillcolor,marker:l({symbol:c.symbol,opacity:c.opacity,maxdisplayed:c.maxdisplayed,size:c.size,sizeref:c.sizeref,sizemin:c.sizemin,sizemode:c.sizemode,line:l({width:h.width,editType:"calc"},s("marker.line")),gradient:c.gradient,editType:"calc"},s("marker")),textfont:n.textfont,textposition:n.textposition,selected:n.selected,unselected:n.unselected,hoverinfo:l({},a.hoverinfo,{flags:["a","b","text","name"]}),hoveron:n.hoveron,hovertemplate:i()}},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../scatter/attributes":1120}],1154:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../scatter/colorscale_calc"),i=t("../scatter/arrays_to_calcdata"),o=t("../scatter/calc_selection"),s=t("../scatter/calc").calcMarkerSize,l=t("../carpet/lookup_carpetid");e.exports=function(t,e){var r=e._carpetTrace=l(t,e);if(r&&r.visible&&"legendonly"!==r.visible){var c;e.xaxis=r.xaxis,e.yaxis=r.yaxis;var u,h,f=e._length,p=new Array(f),d=!1;for(c=0;c<f;c++)if(u=e.a[c],h=e.b[c],n(u)&&n(h)){var g=r.ab2xy(+u,+h,!0),v=r.isVisible(+u,+h);v||(d=!0),p[c]={x:g[0],y:g[1],a:u,b:h,vis:v}}else p[c]={x:!1,y:!1};return e._needsCull=d,p[0].carpet=r,p[0].trace=e,s(e,f),a(t,e),i(p,e),o(p,e),p}}},{"../carpet/lookup_carpetid":916,"../scatter/arrays_to_calcdata":1119,"../scatter/calc":1121,"../scatter/calc_selection":1122,"../scatter/colorscale_calc":1123,"fast-isnumeric":228}],1155:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/constants"),i=t("../scatter/subtypes"),o=t("../scatter/marker_defaults"),s=t("../scatter/line_defaults"),l=t("../scatter/line_shape_defaults"),c=t("../scatter/text_defaults"),u=t("../scatter/fillcolor_defaults"),h=t("./attributes");e.exports=function(t,e,r,f){function p(r,a){return n.coerce(t,e,h,r,a)}p("carpet"),e.xaxis="x",e.yaxis="y";var d=p("a"),g=p("b"),v=Math.min(d.length,g.length);if(v){e._length=v,p("text"),p("texttemplate"),p("hovertext"),p("mode",v<a.PTS_LINESONLY?"lines+markers":"lines"),i.hasLines(e)&&(s(t,e,r,f,p),l(t,e,p),p("connectgaps")),i.hasMarkers(e)&&o(t,e,r,f,p,{gradient:!0}),i.hasText(e)&&c(t,e,f,p);var m=[];(i.hasMarkers(e)||i.hasText(e))&&(p("marker.maxdisplayed"),m.push("points")),p("fill"),"none"!==e.fill&&(u(t,e,r,p),i.hasLines(e)||l(t,e,p)),"tonext"!==e.fill&&"toself"!==e.fill||m.push("fills"),"fills"!==p("hoveron",m.join("+")||"points")&&p("hovertemplate"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible=!1}},{"../../lib":717,"../scatter/constants":1124,"../scatter/fillcolor_defaults":1128,"../scatter/line_defaults":1133,"../scatter/line_shape_defaults":1135,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scatter/text_defaults":1145,"./attributes":1153}],1156:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a){var i=n[a];return t.a=i.a,t.b=i.b,t.y=i.y,t}},{}],1157:[function(t,e,r){"use strict";e.exports=function(t,e){var r={},n=e._carpet,a=n.ab2ij([t.a,t.b]),i=Math.floor(a[0]),o=a[0]-i,s=Math.floor(a[1]),l=a[1]-s,c=n.evalxy([],i,s,o,l);return r.yLabel=c[1].toFixed(3),r}},{}],1158:[function(t,e,r){"use strict";var n=t("../scatter/hover"),a=t("../../lib").fillText;e.exports=function(t,e,r,i){var o=n(t,e,r,i);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index){var l=1-s.y0/t.ya._length,c=t.xa._length,u=c*l/2,h=c-u;return s.x0=Math.max(Math.min(s.x0,h),u),s.x1=Math.max(Math.min(s.x1,h),u),o}var f=s.cd[s.index];s.a=f.a,s.b=f.b,s.xLabelVal=void 0,s.yLabelVal=void 0;var p=s.trace,d=p._carpet,g=p._module.formatLabels(f,p);s.yLabel=g.yLabel,delete s.text;var v=[];if(!p.hovertemplate){var m=(f.hi||p.hoverinfo).split("+");-1!==m.indexOf("all")&&(m=["a","b","text"]),-1!==m.indexOf("a")&&y(d.aaxis,f.a),-1!==m.indexOf("b")&&y(d.baxis,f.b),v.push("y: "+s.yLabel),-1!==m.indexOf("text")&&a(f,p,v),s.extraText=v.join("<br>")}return o}function y(t,e){var r;r=t.labelprefix&&t.labelprefix.length>0?t.labelprefix.replace(/ = $/,""):t._hovertitle,v.push(r+": "+e.toFixed(3)+t.labelsuffix)}}},{"../../lib":717,"../scatter/hover":1131}],1159:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../scatter/marker_colorbar"),formatLabels:t("./format_labels"),calc:t("./calc"),plot:t("./plot"),style:t("../scatter/style").style,styleOnSelect:t("../scatter/style").styleOnSelect,hoverPoints:t("./hover"),selectPoints:t("../scatter/select"),eventData:t("./event_data"),moduleType:"trace",name:"scattercarpet",basePlotModule:t("../../plots/cartesian"),categories:["svg","carpet","symbols","showLegend","carpetDependent","zoomScale"],meta:{}}},{"../../plots/cartesian":776,"../scatter/marker_colorbar":1138,"../scatter/select":1141,"../scatter/style":1143,"./attributes":1153,"./calc":1154,"./defaults":1155,"./event_data":1156,"./format_labels":1157,"./hover":1158,"./plot":1160}],1160:[function(t,e,r){"use strict";var n=t("../scatter/plot"),a=t("../../plots/cartesian/axes"),i=t("../../components/drawing");e.exports=function(t,e,r,o){var s,l,c,u=r[0][0].carpet,h={xaxis:a.getFromId(t,u.xaxis||"x"),yaxis:a.getFromId(t,u.yaxis||"y"),plot:e.plot};for(n(t,h,r,o),s=0;s<r.length;s++)l=r[s][0].trace,c=o.selectAll("g.trace"+l.uid+" .js-line"),i.setClipUrl(c,r[s][0].carpet._clipPathId,t)}},{"../../components/drawing":612,"../../plots/cartesian/axes":765,"../scatter/plot":1140}],1161:[function(t,e,r){"use strict";var n=t("../../plots/template_attributes").hovertemplateAttrs,a=t("../../plots/template_attributes").texttemplateAttrs,i=t("../scatter/attributes"),o=t("../../plots/attributes"),s=t("../../components/colorscale/attributes"),l=t("../../components/drawing/attributes").dash,c=t("../../lib/extend").extendFlat,u=t("../../plot_api/edit_types").overrideAll,h=i.marker,f=i.line,p=h.line;e.exports=u({lon:{valType:"data_array"},lat:{valType:"data_array"},locations:{valType:"data_array"},locationmode:{valType:"enumerated",values:["ISO-3","USA-states","country names","geojson-id"],dflt:"ISO-3"},geojson:{valType:"any",editType:"calc"},featureidkey:{valType:"string",editType:"calc",dflt:"id"},mode:c({},i.mode,{dflt:"markers"}),text:c({},i.text,{}),texttemplate:a({editType:"plot"},{keys:["lat","lon","location","text"]}),hovertext:c({},i.hovertext,{}),textfont:i.textfont,textposition:i.textposition,line:{color:f.color,width:f.width,dash:l},connectgaps:i.connectgaps,marker:c({symbol:h.symbol,opacity:h.opacity,size:h.size,sizeref:h.sizeref,sizemin:h.sizemin,sizemode:h.sizemode,colorbar:h.colorbar,line:c({width:p.width},s("marker.line")),gradient:h.gradient},s("marker")),fill:{valType:"enumerated",values:["none","toself"],dflt:"none"},fillcolor:i.fillcolor,selected:i.selected,unselected:i.unselected,hoverinfo:c({},o.hoverinfo,{flags:["lon","lat","location","text","name"]}),hovertemplate:n()},"calc","nested")},{"../../components/colorscale/attributes":598,"../../components/drawing/attributes":611,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/attributes":762,"../../plots/template_attributes":841,"../scatter/attributes":1120}],1162:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../constants/numerical").BADNUM,i=t("../scatter/colorscale_calc"),o=t("../scatter/arrays_to_calcdata"),s=t("../scatter/calc_selection"),l=t("../../lib")._;function c(t){return t&&"string"==typeof t}e.exports=function(t,e){var r,u=Array.isArray(e.locations),h=u?e.locations.length:e._length,f=new Array(h);r=e.geojson?function(t){return c(t)||n(t)}:c;for(var p=0;p<h;p++){var d=f[p]={};if(u){var g=e.locations[p];d.loc=r(g)?g:null}else{var v=e.lon[p],m=e.lat[p];n(v)&&n(m)?d.lonlat=[+v,+m]:d.lonlat=[a,a]}}return o(f,e),i(t,e),s(f,e),h&&(f[0].t={labels:{lat:l(t,"lat:")+" ",lon:l(t,"lon:")+" "}}),f}},{"../../constants/numerical":693,"../../lib":717,"../scatter/arrays_to_calcdata":1119,"../scatter/calc_selection":1122,"../scatter/colorscale_calc":1123,"fast-isnumeric":228}],1163:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/subtypes"),i=t("../scatter/marker_defaults"),o=t("../scatter/line_defaults"),s=t("../scatter/text_defaults"),l=t("../scatter/fillcolor_defaults"),c=t("./attributes");e.exports=function(t,e,r,u){function h(r,a){return n.coerce(t,e,c,r,a)}var f,p=h("locations");if(p&&p.length){var d,g=h("geojson");("string"==typeof g&&""!==g||n.isPlainObject(g))&&(d="geojson-id"),"geojson-id"===h("locationmode",d)&&h("featureidkey"),f=p.length}else{var v=h("lon")||[],m=h("lat")||[];f=Math.min(v.length,m.length)}f?(e._length=f,h("text"),h("hovertext"),h("hovertemplate"),h("mode"),a.hasLines(e)&&(o(t,e,r,u,h),h("connectgaps")),a.hasMarkers(e)&&i(t,e,r,u,h,{gradient:!0}),a.hasText(e)&&(h("texttemplate"),s(t,e,u,h)),h("fill"),"none"!==e.fill&&l(t,e,r,h),n.coerceSelectionMarkerOpacity(e,h)):e.visible=!1}},{"../../lib":717,"../scatter/fillcolor_defaults":1128,"../scatter/line_defaults":1133,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scatter/text_defaults":1145,"./attributes":1161}],1164:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a){t.lon=e.lon,t.lat=e.lat,t.location=e.loc?e.loc:null;var i=n[a];return i.fIn&&i.fIn.properties&&(t.properties=i.fIn.properties),t}},{}],1165:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes");e.exports=function(t,e,r){var a={},i=r[e.geo]._subplot.mockAxis,o=t.lonlat;return a.lonLabel=n.tickText(i,i.c2l(o[0]),!0).text,a.latLabel=n.tickText(i,i.c2l(o[1]),!0).text,a}},{"../../plots/cartesian/axes":765}],1166:[function(t,e,r){"use strict";var n=t("../../components/fx"),a=t("../../constants/numerical").BADNUM,i=t("../scatter/get_trace_color"),o=t("../../lib").fillText,s=t("./attributes");e.exports=function(t,e,r){var l=t.cd,c=l[0].trace,u=t.xa,h=t.ya,f=t.subplot,p=f.projection.isLonLatOverEdges,d=f.project;if(n.getClosest(l,function(t){var n=t.lonlat;if(n[0]===a)return 1/0;if(p(n))return 1/0;var i=d(n),o=d([e,r]),s=Math.abs(i[0]-o[0]),l=Math.abs(i[1]-o[1]),c=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(s*s+l*l)-c,1-3/c)},t),!1!==t.index){var g=l[t.index],v=g.lonlat,m=[u.c2p(v),h.c2p(v)],y=g.mrc||1;t.x0=m[0]-y,t.x1=m[0]+y,t.y0=m[1]-y,t.y1=m[1]+y,t.loc=g.loc,t.lon=v[0],t.lat=v[1];var x={};x[c.geo]={_subplot:f};var b=c._module.formatLabels(g,c,x);return t.lonLabel=b.lonLabel,t.latLabel=b.latLabel,t.color=i(c,g),t.extraText=function(t,e,r,n){if(t.hovertemplate)return;var a=e.hi||t.hoverinfo,i="all"===a?s.hoverinfo.flags:a.split("+"),l=-1!==i.indexOf("location")&&Array.isArray(t.locations),c=-1!==i.indexOf("lon"),u=-1!==i.indexOf("lat"),h=-1!==i.indexOf("text"),f=[];function p(t){return t+"\xb0"}l?f.push(e.loc):c&&u?f.push("("+p(r.lonLabel)+", "+p(r.latLabel)+")"):c?f.push(n.lon+p(r.lonLabel)):u&&f.push(n.lat+p(r.latLabel));h&&o(e,t,f);return f.join("<br>")}(c,g,t,l[0].t.labels),t.hovertemplate=c.hovertemplate,[t]}}},{"../../components/fx":630,"../../constants/numerical":693,"../../lib":717,"../scatter/get_trace_color":1130,"./attributes":1161}],1167:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../scatter/marker_colorbar"),formatLabels:t("./format_labels"),calc:t("./calc"),calcGeoJSON:t("./plot").calcGeoJSON,plot:t("./plot").plot,style:t("./style"),styleOnSelect:t("../scatter/style").styleOnSelect,hoverPoints:t("./hover"),eventData:t("./event_data"),selectPoints:t("./select"),moduleType:"trace",name:"scattergeo",basePlotModule:t("../../plots/geo"),categories:["geo","symbols","showLegend","scatter-like"],meta:{}}},{"../../plots/geo":795,"../scatter/marker_colorbar":1138,"../scatter/style":1143,"./attributes":1161,"./calc":1162,"./defaults":1163,"./event_data":1164,"./format_labels":1165,"./hover":1166,"./plot":1168,"./select":1169,"./style":1170}],1168:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../lib/topojson_utils").getTopojsonFeatures,o=t("../../lib/geojson_utils"),s=t("../../lib/geo_location_utils"),l=t("../../plots/cartesian/autorange").findExtremes,c=t("../../constants/numerical").BADNUM,u=t("../scatter/calc").calcMarkerSize,h=t("../scatter/subtypes"),f=t("./style");e.exports={calcGeoJSON:function(t,e){var r,n,a=t[0].trace,o=e[a.geo],h=o._subplot,f=a._length;if(Array.isArray(a.locations)){var p=a.locationmode,d="geojson-id"===p?s.extractTraceFeature(t):i(a,h.topojson);for(r=0;r<f;r++){n=t[r];var g="geojson-id"===p?n.fOut:s.locationToFeature(p,n.loc,d);n.lonlat=g?g.properties.ct:[c,c]}}var v,m,y={padded:!0};if("geojson"===o.fitbounds&&"geojson-id"===a.locationmode){var x=s.computeBbox(s.getTraceGeojson(a));v=[x[0],x[2]],m=[x[1],x[3]]}else{for(v=new Array(f),m=new Array(f),r=0;r<f;r++)n=t[r],v[r]=n.lonlat[0],m[r]=n.lonlat[1];y.ppad=u(a,f)}a._extremes.lon=l(o.lonaxis._ax,v,y),a._extremes.lat=l(o.lataxis._ax,m,y)},plot:function(t,e,r){var i=e.layers.frontplot.select(".scatterlayer"),s=a.makeTraceGroups(i,r,"trace scattergeo");function l(t,e){t.lonlat[0]===c&&n.select(e).remove()}s.selectAll("*").remove(),s.each(function(e){var r=n.select(this),i=e[0].trace;if(h.hasLines(i)||"none"!==i.fill){var s=o.calcTraceToLineCoords(e),c="none"!==i.fill?o.makePolygon(s):o.makeLine(s);r.selectAll("path.js-line").data([{geojson:c,trace:i}]).enter().append("path").classed("js-line",!0).style("stroke-miterlimit",2)}h.hasMarkers(i)&&r.selectAll("path.point").data(a.identity).enter().append("path").classed("point",!0).each(function(t){l(t,this)}),h.hasText(i)&&r.selectAll("g").data(a.identity).enter().append("g").append("text").each(function(t){l(t,this)}),f(t,e)})}}},{"../../constants/numerical":693,"../../lib":717,"../../lib/geo_location_utils":711,"../../lib/geojson_utils":712,"../../lib/topojson_utils":744,"../../plots/cartesian/autorange":764,"../scatter/calc":1121,"../scatter/subtypes":1144,"./style":1170,d3:165}],1169:[function(t,e,r){"use strict";var n=t("../scatter/subtypes"),a=t("../../constants/numerical").BADNUM;e.exports=function(t,e){var r,i,o,s,l,c=t.cd,u=t.xaxis,h=t.yaxis,f=[],p=c[0].trace;if(!n.hasMarkers(p)&&!n.hasText(p))return[];if(!1===e)for(l=0;l<c.length;l++)c[l].selected=0;else for(l=0;l<c.length;l++)(i=(r=c[l]).lonlat)[0]!==a&&(o=u.c2p(i),s=h.c2p(i),e.contains([o,s],null,l,t)?(f.push({pointNumber:l,lon:i[0],lat:i[1]}),r.selected=1):r.selected=0);return f}},{"../../constants/numerical":693,"../scatter/subtypes":1144}],1170:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/drawing"),i=t("../../components/color"),o=t("../scatter/style"),s=o.stylePoints,l=o.styleText;e.exports=function(t,e){e&&function(t,e){var r=e[0].trace,o=e[0].node3;o.style("opacity",e[0].trace.opacity),s(o,r,t),l(o,r,t),o.selectAll("path.js-line").style("fill","none").each(function(t){var e=n.select(this),r=t.trace,o=r.line||{};e.call(i.stroke,o.color).call(a.dashLine,o.dash||"",o.width||0),"none"!==r.fill&&e.call(i.fill,r.fillcolor)})}(t,e)}},{"../../components/color":591,"../../components/drawing":612,"../scatter/style":1143,d3:165}],1171:[function(t,e,r){"use strict";var n=t("../../plots/attributes"),a=t("../scatter/attributes"),i=t("../../components/colorscale/attributes"),o=t("../../lib/extend").extendFlat,s=t("../../plot_api/edit_types").overrideAll,l=t("./constants").DASHES,c=a.line,u=a.marker,h=u.line,f=e.exports=s({x:a.x,x0:a.x0,dx:a.dx,y:a.y,y0:a.y0,dy:a.dy,text:a.text,hovertext:a.hovertext,textposition:a.textposition,textfont:a.textfont,mode:{valType:"flaglist",flags:["lines","markers","text"],extras:["none"]},line:{color:c.color,width:c.width,shape:{valType:"enumerated",values:["linear","hv","vh","hvh","vhv"],dflt:"linear",editType:"plot"},dash:{valType:"enumerated",values:Object.keys(l),dflt:"solid"}},marker:o({},i("marker"),{symbol:u.symbol,size:u.size,sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,opacity:u.opacity,colorbar:u.colorbar,line:o({},i("marker.line"),{width:h.width})}),connectgaps:a.connectgaps,fill:o({},a.fill,{dflt:"none"}),fillcolor:a.fillcolor,selected:{marker:a.selected.marker,textfont:a.selected.textfont},unselected:{marker:a.unselected.marker,textfont:a.unselected.textfont},opacity:n.opacity},"calc","nested");f.x.editType=f.y.editType=f.x0.editType=f.y0.editType="calc+clearAxisTypes",f.hovertemplate=a.hovertemplate,f.texttemplate=a.texttemplate},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/attributes":762,"../scatter/attributes":1120,"./constants":1173}],1172:[function(t,e,r){"use strict";var n=t("point-cluster"),a=t("../../lib"),i=t("../../plots/cartesian/axis_ids"),o=t("../../plots/cartesian/autorange").findExtremes,s=t("../scatter/calc"),l=s.calcMarkerSize,c=s.calcAxisExpansion,u=s.setFirstScatter,h=t("../scatter/colorscale_calc"),f=t("./convert"),p=t("./scene_update"),d=t("../../constants/numerical").BADNUM,g=t("./constants").TOO_MANY_POINTS;function v(t,e,r){var n=t._extremes[e._id],a=o(e,r._bnds,{padded:!0});n.min=n.min.concat(a.min),n.max=n.max.concat(a.max)}e.exports=function(t,e){var r,o,s,m=t._fullLayout,y=i.getFromId(t,e.xaxis),x=i.getFromId(t,e.yaxis),b=m._plots[e.xaxis+e.yaxis],_=e._length,w=_>=g,k=2*_,T={},M=e._x=y.makeCalcdata(e,"x"),A=e._y=x.makeCalcdata(e,"y"),S=new Array(k);for(r=0;r<_;r++)o=M[r],s=A[r],S[2*r]=o===d?NaN:o,S[2*r+1]=s===d?NaN:s;if("log"===y.type)for(r=0;r<k;r+=2)S[r]=y.c2l(S[r]);if("log"===x.type)for(r=1;r<k;r+=2)S[r]=x.c2l(S[r]);if(w&&"log"!==y.type&&"log"!==x.type)T.tree=n(S);else{var E=T.ids=new Array(_);for(r=0;r<_;r++)E[r]=r}h(t,e);var L,C=function(t,e,r,n,i,o){var s=f.style(t,r);s.marker&&(s.marker.positions=n);s.line&&n.length>1&&a.extendFlat(s.line,f.linePositions(t,r,n));if(s.errorX||s.errorY){var l=f.errorBarPositions(t,r,n,i,o);s.errorX&&a.extendFlat(s.errorX,l.x),s.errorY&&a.extendFlat(s.errorY,l.y)}s.text&&(a.extendFlat(s.text,{positions:n},f.textPosition(t,r,s.text,s.marker)),a.extendFlat(s.textSel,{positions:n},f.textPosition(t,r,s.text,s.markerSel)),a.extendFlat(s.textUnsel,{positions:n},f.textPosition(t,r,s.text,s.markerUnsel)));return s}(t,0,e,S,M,A),P=p(t,b);return u(m,e),w?C.marker&&(L=2*(C.marker.sizeAvg||Math.max(C.marker.size,3))):L=l(e,_),c(t,e,y,x,M,A,L),C.errorX&&v(e,y,C.errorX),C.errorY&&v(e,x,C.errorY),C.fill&&!P.fill2d&&(P.fill2d=!0),C.marker&&!P.scatter2d&&(P.scatter2d=!0),C.line&&!P.line2d&&(P.line2d=!0),!C.errorX&&!C.errorY||P.error2d||(P.error2d=!0),C.text&&!P.glText&&(P.glText=!0),C.marker&&(C.marker.snap=_),P.lineOptions.push(C.line),P.errorXOptions.push(C.errorX),P.errorYOptions.push(C.errorY),P.fillOptions.push(C.fill),P.markerOptions.push(C.marker),P.markerSelectedOptions.push(C.markerSel),P.markerUnselectedOptions.push(C.markerUnsel),P.textOptions.push(C.text),P.textSelectedOptions.push(C.textSel),P.textUnselectedOptions.push(C.textUnsel),P.selectBatch.push([]),P.unselectBatch.push([]),T._scene=P,T.index=P.count,T.x=M,T.y=A,T.positions=S,P.count++,[{x:!1,y:!1,t:T,trace:e}]}},{"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/autorange":764,"../../plots/cartesian/axis_ids":768,"../scatter/calc":1121,"../scatter/colorscale_calc":1123,"./constants":1173,"./convert":1174,"./scene_update":1182,"point-cluster":470}],1173:[function(t,e,r){"use strict";e.exports={TOO_MANY_POINTS:1e5,SYMBOL_SDF_SIZE:200,SYMBOL_SIZE:20,SYMBOL_STROKE:1,DOT_RE:/-dot/,OPEN_RE:/-open/,DASHES:{solid:[1],dot:[1,1],dash:[4,1],longdash:[8,1],dashdot:[4,1,1,1],longdashdot:[8,1,1,1]}}},{}],1174:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("svg-path-sdf"),i=t("color-normalize"),o=t("../../registry"),s=t("../../lib"),l=t("../../components/drawing"),c=t("../../plots/cartesian/axis_ids"),u=t("../../lib/gl_format_color").formatColor,h=t("../scatter/subtypes"),f=t("../scatter/make_bubble_size_func"),p=t("./helpers"),d=t("./constants"),g=t("../../constants/interactions").DESELECTDIM,v={start:1,left:1,end:-1,right:-1,middle:0,center:0,bottom:1,top:-1},m=t("../../components/fx/helpers").appendArrayPointValue;function y(t,e){var r,a=t._fullLayout,i=e._length,o=e.textfont,l=e.textposition,c=Array.isArray(l)?l:[l],u=o.color,h=o.size,f=o.family,p={},d=e.texttemplate;if(d){p.text=[];var g=a._d3locale,v=Array.isArray(d),y=v?Math.min(d.length,i):i,x=v?function(t){return d[t]}:function(){return d};for(r=0;r<y;r++){var b={i:r},_=e._module.formatLabels(b,e,a),w={};m(w,e,r);var k=e._meta||{};p.text.push(s.texttemplateString(x(r),_,g,w,b,k))}}else Array.isArray(e.text)&&e.text.length<i?p.text=e.text.slice():p.text=e.text;if(Array.isArray(p.text))for(r=p.text.length;r<i;r++)p.text[r]="";for(p.opacity=e.opacity,p.font={},p.align=[],p.baseline=[],r=0;r<c.length;r++){var T=c[r].split(/\s+/);switch(T[1]){case"left":p.align.push("right");break;case"right":p.align.push("left");break;default:p.align.push(T[1])}switch(T[0]){case"top":p.baseline.push("bottom");break;case"bottom":p.baseline.push("top");break;default:p.baseline.push(T[0])}}if(Array.isArray(u))for(p.color=new Array(i),r=0;r<i;r++)p.color[r]=u[r];else p.color=u;if(s.isArrayOrTypedArray(h)||Array.isArray(f))for(p.font=new Array(i),r=0;r<i;r++){var M=p.font[r]={};M.size=s.isTypedArray(h)?h[r]:Array.isArray(h)?n(h[r])?h[r]:0:h,M.family=Array.isArray(f)?f[r]:f}else p.font={size:h,family:f};return p}function x(t){var e,r,n=t._length,a=t.marker,o={},l=s.isArrayOrTypedArray(a.symbol),c=s.isArrayOrTypedArray(a.color),h=s.isArrayOrTypedArray(a.line.color),d=s.isArrayOrTypedArray(a.opacity),g=s.isArrayOrTypedArray(a.size),v=s.isArrayOrTypedArray(a.line.width);if(l||(r=p.isOpenSymbol(a.symbol)),l||c||h||d){o.colors=new Array(n),o.borderColors=new Array(n);var m=u(a,a.opacity,n),y=u(a.line,a.opacity,n);if(!Array.isArray(y[0])){var x=y;for(y=Array(n),e=0;e<n;e++)y[e]=x}if(!Array.isArray(m[0])){var b=m;for(m=Array(n),e=0;e<n;e++)m[e]=b}for(o.colors=m,o.borderColors=y,e=0;e<n;e++){if(l){var _=a.symbol[e];r=p.isOpenSymbol(_)}r&&(y[e]=m[e].slice(),m[e]=m[e].slice(),m[e][3]=0)}o.opacity=t.opacity}else r?(o.color=i(a.color,"uint8"),o.color[3]=0,o.borderColor=i(a.color,"uint8")):(o.color=i(a.color,"uint8"),o.borderColor=i(a.line.color,"uint8")),o.opacity=t.opacity*a.opacity;if(l)for(o.markers=new Array(n),e=0;e<n;e++)o.markers[e]=E(a.symbol[e]);else o.marker=E(a.symbol);var w,k=f(t);if(g||v){var T,M=o.sizes=new Array(n),A=o.borderSizes=new Array(n),S=0;if(g){for(e=0;e<n;e++)M[e]=k(a.size[e]),S+=M[e];T=S/n}else for(w=k(a.size),e=0;e<n;e++)M[e]=w;if(v)for(e=0;e<n;e++)A[e]=a.line.width[e]/2;else for(w=a.line.width/2,e=0;e<n;e++)A[e]=w;o.sizeAvg=T}else o.size=k(a&&a.size||10),o.borderSizes=k(a.line.width);return o}function b(t,e){var r=t.marker,n={};return e?(e.marker&&e.marker.symbol?n=x(s.extendFlat({},r,e.marker)):e.marker&&(e.marker.size&&(n.size=e.marker.size/2),e.marker.color&&(n.colors=e.marker.color),void 0!==e.marker.opacity&&(n.opacity=e.marker.opacity)),n):n}function _(t,e,r){var n={};if(!r)return n;if(r.textfont){var a={opacity:1,text:e.text,texttemplate:e.texttemplate,textposition:e.textposition,textfont:s.extendFlat({},e.textfont)};r.textfont&&s.extendFlat(a.textfont,r.textfont),n=y(t,a)}return n}function w(t,e){var r={capSize:2*e.width,lineWidth:e.thickness,color:e.color};return e.copy_ystyle&&(r=t.error_y),r}var k=d.SYMBOL_SDF_SIZE,T=d.SYMBOL_SIZE,M=d.SYMBOL_STROKE,A={},S=l.symbolFuncs[0](.05*T);function E(t){if("circle"===t)return null;var e,r,n=l.symbolNumber(t),i=l.symbolFuncs[n%100],o=!!l.symbolNoDot[n%100],s=!!l.symbolNoFill[n%100],c=p.isDotSymbol(t);return A[t]?A[t]:(e=c&&!o?i(1.1*T)+S:i(T),r=a(e,{w:k,h:k,viewBox:[-T,-T,T,T],stroke:s?M:-M}),A[t]=r,r||null)}e.exports={style:function(t,e){var r,n={marker:void 0,markerSel:void 0,markerUnsel:void 0,line:void 0,fill:void 0,errorX:void 0,errorY:void 0,text:void 0,textSel:void 0,textUnsel:void 0};if(!0!==e.visible)return n;if(h.hasText(e)&&(n.text=y(t,e),n.textSel=_(t,e,e.selected),n.textUnsel=_(t,e,e.unselected)),h.hasMarkers(e)&&(n.marker=x(e),n.markerSel=b(e,e.selected),n.markerUnsel=b(e,e.unselected),!e.unselected&&s.isArrayOrTypedArray(e.marker.opacity))){var a=e.marker.opacity;for(n.markerUnsel.opacity=new Array(a.length),r=0;r<a.length;r++)n.markerUnsel.opacity[r]=g*a[r]}if(h.hasLines(e)){n.line={overlay:!0,thickness:e.line.width,color:e.line.color,opacity:e.opacity};var i=(d.DASHES[e.line.dash]||[1]).slice();for(r=0;r<i.length;++r)i[r]*=e.line.width;n.line.dashes=i}return e.error_x&&e.error_x.visible&&(n.errorX=w(e,e.error_x)),e.error_y&&e.error_y.visible&&(n.errorY=w(e,e.error_y)),e.fill&&"none"!==e.fill&&(n.fill={closed:!0,fill:e.fillcolor,thickness:0}),n},markerStyle:x,markerSelection:b,linePositions:function(t,e,r){var n,a,i=r.length,o=i/2;if(h.hasLines(e)&&o)if("hv"===e.line.shape){for(n=[],a=0;a<o-1;a++)isNaN(r[2*a])||isNaN(r[2*a+1])?n.push(NaN,NaN,NaN,NaN):(n.push(r[2*a],r[2*a+1]),isNaN(r[2*a+2])||isNaN(r[2*a+3])?n.push(NaN,NaN):n.push(r[2*a+2],r[2*a+1]));n.push(r[i-2],r[i-1])}else if("hvh"===e.line.shape){for(n=[],a=0;a<o-1;a++)if(isNaN(r[2*a])||isNaN(r[2*a+1])||isNaN(r[2*a+2])||isNaN(r[2*a+3]))isNaN(r[2*a])||isNaN(r[2*a+1])?n.push(NaN,NaN):n.push(r[2*a],r[2*a+1]),n.push(NaN,NaN);else{var s=(r[2*a]+r[2*a+2])/2;n.push(r[2*a],r[2*a+1],s,r[2*a+1],s,r[2*a+3])}n.push(r[i-2],r[i-1])}else if("vhv"===e.line.shape){for(n=[],a=0;a<o-1;a++)if(isNaN(r[2*a])||isNaN(r[2*a+1])||isNaN(r[2*a+2])||isNaN(r[2*a+3]))isNaN(r[2*a])||isNaN(r[2*a+1])?n.push(NaN,NaN):n.push(r[2*a],r[2*a+1]),n.push(NaN,NaN);else{var l=(r[2*a+1]+r[2*a+3])/2;n.push(r[2*a],r[2*a+1],r[2*a],l,r[2*a+2],l)}n.push(r[i-2],r[i-1])}else if("vh"===e.line.shape){for(n=[],a=0;a<o-1;a++)isNaN(r[2*a])||isNaN(r[2*a+1])?n.push(NaN,NaN,NaN,NaN):(n.push(r[2*a],r[2*a+1]),isNaN(r[2*a+2])||isNaN(r[2*a+3])?n.push(NaN,NaN):n.push(r[2*a],r[2*a+3]));n.push(r[i-2],r[i-1])}else n=r;var c=!1;for(a=0;a<n.length;a++)if(isNaN(n[a])){c=!0;break}var u=c||n.length>d.TOO_MANY_POINTS?"rect":h.hasMarkers(e)?"rect":"round";if(c&&e.connectgaps){var f=n[0],p=n[1];for(a=0;a<n.length;a+=2)isNaN(n[a])||isNaN(n[a+1])?(n[a]=f,n[a+1]=p):(f=n[a],p=n[a+1])}return{join:u,positions:n}},errorBarPositions:function(t,e,r,a,i){var s=o.getComponentMethod("errorbars","makeComputeError"),l=c.getFromId(t,e.xaxis),u=c.getFromId(t,e.yaxis),h=r.length/2,f={};function p(t,a){var i=a._id.charAt(0),o=e["error_"+i];if(o&&o.visible&&("linear"===a.type||"log"===a.type)){for(var l=s(o),c={x:0,y:1}[i],u={x:[0,1,2,3],y:[2,3,0,1]}[i],p=new Float64Array(4*h),d=1/0,g=-1/0,v=0,m=0;v<h;v++,m+=4){var y=t[v];if(n(y)){var x=r[2*v+c],b=l(y,v),_=b[0],w=b[1];if(n(_)&&n(w)){var k=y-_,T=y+w;p[m+u[0]]=x-a.c2l(k),p[m+u[1]]=a.c2l(T)-x,p[m+u[2]]=0,p[m+u[3]]=0,d=Math.min(d,y-_),g=Math.max(g,y+w)}}}f[i]={positions:r,errors:p,_bnds:[d,g]}}}return p(a,l),p(i,u),f},textPosition:function(t,e,r,n){var a,i=e._length,o={};if(h.hasMarkers(e)){var s=r.font,l=r.align,c=r.baseline;for(o.offset=new Array(i),a=0;a<i;a++){var u=n.sizes?n.sizes[a]:n.size,f=Array.isArray(s)?s[a].size:s.size,p=Array.isArray(l)?l.length>1?l[a]:l[0]:l,d=Array.isArray(c)?c.length>1?c[a]:c[0]:c,g=v[p],m=v[d],y=u?u/.8+1:0,x=-m*y-.5*m;o.offset[a]=[g*y/f,x/f]}}return o}}},{"../../components/drawing":612,"../../components/fx/helpers":626,"../../constants/interactions":692,"../../lib":717,"../../lib/gl_format_color":714,"../../plots/cartesian/axis_ids":768,"../../registry":846,"../scatter/make_bubble_size_func":1137,"../scatter/subtypes":1144,"./constants":1173,"./helpers":1178,"color-normalize":122,"fast-isnumeric":228,"svg-path-sdf":533}],1175:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../registry"),i=t("./helpers"),o=t("./attributes"),s=t("../scatter/constants"),l=t("../scatter/subtypes"),c=t("../scatter/xy_defaults"),u=t("../scatter/marker_defaults"),h=t("../scatter/line_defaults"),f=t("../scatter/fillcolor_defaults"),p=t("../scatter/text_defaults");e.exports=function(t,e,r,d){function g(r,a){return n.coerce(t,e,o,r,a)}var v=!!t.marker&&i.isOpenSymbol(t.marker.symbol),m=l.isBubble(t),y=c(t,e,d,g);if(y){var x=y<s.PTS_LINESONLY?"lines+markers":"lines";g("text"),g("hovertext"),g("hovertemplate"),g("mode",x),l.hasLines(e)&&(g("connectgaps"),h(t,e,r,d,g),g("line.shape")),l.hasMarkers(e)&&(u(t,e,r,d,g),g("marker.line.width",v||m?1:0)),l.hasText(e)&&(g("texttemplate"),p(t,e,d,g));var b=(e.line||{}).color,_=(e.marker||{}).color;g("fill"),"none"!==e.fill&&f(t,e,r,g);var w=a.getComponentMethod("errorbars","supplyDefaults");w(t,e,b||_||r,{axis:"y"}),w(t,e,b||_||r,{axis:"x",inherit:"y"}),n.coerceSelectionMarkerOpacity(e,g)}else e.visible=!1}},{"../../lib":717,"../../registry":846,"../scatter/constants":1124,"../scatter/fillcolor_defaults":1128,"../scatter/line_defaults":1133,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scatter/text_defaults":1145,"../scatter/xy_defaults":1146,"./attributes":1171,"./helpers":1178}],1176:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/color"),i=t("../../constants/interactions").DESELECTDIM;e.exports={styleTextSelection:function(t){var e,r,o=t[0],s=o.trace,l=o.t,c=l._scene,u=l.index,h=c.selectBatch[u],f=c.unselectBatch[u],p=c.textOptions[u],d=c.textSelectedOptions[u]||{},g=c.textUnselectedOptions[u]||{},v=n.extendFlat({},p);if(h.length||f.length){var m=d.color,y=g.color,x=p.color,b=Array.isArray(x);for(v.color=new Array(s._length),e=0;e<h.length;e++)r=h[e],v.color[r]=m||(b?x[r]:x);for(e=0;e<f.length;e++){r=f[e];var _=b?x[r]:x;v.color[r]=y||(m?_:a.addOpacity(_,i))}}c.glText[u].update(v)}}},{"../../components/color":591,"../../constants/interactions":692,"../../lib":717}],1177:[function(t,e,r){"use strict";var n=t("../scatter/format_labels");e.exports=function(t,e,r){var a=t.i;return"x"in t||(t.x=e._x[a]),"y"in t||(t.y=e._y[a]),n(t,e,r)}},{"../scatter/format_labels":1129}],1178:[function(t,e,r){"use strict";var n=t("./constants");r.isOpenSymbol=function(t){return"string"==typeof t?n.OPEN_RE.test(t):t%200>100},r.isDotSymbol=function(t){return"string"==typeof t?n.DOT_RE.test(t):t>200}},{"./constants":1173}],1179:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("../scatter/get_trace_color");function o(t,e,r,o){var s=t.xa,l=t.ya,c=t.distance,u=t.dxy,h=t.index,f={pointNumber:h,x:e[h],y:r[h]};f.tx=Array.isArray(o.text)?o.text[h]:o.text,f.htx=Array.isArray(o.hovertext)?o.hovertext[h]:o.hovertext,f.data=Array.isArray(o.customdata)?o.customdata[h]:o.customdata,f.tp=Array.isArray(o.textposition)?o.textposition[h]:o.textposition;var p=o.textfont;p&&(f.ts=a.isArrayOrTypedArray(p.size)?p.size[h]:p.size,f.tc=Array.isArray(p.color)?p.color[h]:p.color,f.tf=Array.isArray(p.family)?p.family[h]:p.family);var d=o.marker;d&&(f.ms=a.isArrayOrTypedArray(d.size)?d.size[h]:d.size,f.mo=a.isArrayOrTypedArray(d.opacity)?d.opacity[h]:d.opacity,f.mx=a.isArrayOrTypedArray(d.symbol)?d.symbol[h]:d.symbol,f.mc=a.isArrayOrTypedArray(d.color)?d.color[h]:d.color);var g=d&&d.line;g&&(f.mlc=Array.isArray(g.color)?g.color[h]:g.color,f.mlw=a.isArrayOrTypedArray(g.width)?g.width[h]:g.width);var v=d&&d.gradient;v&&"none"!==v.type&&(f.mgt=Array.isArray(v.type)?v.type[h]:v.type,f.mgc=Array.isArray(v.color)?v.color[h]:v.color);var m=s.c2p(f.x,!0),y=l.c2p(f.y,!0),x=f.mrc||1,b=o.hoverlabel;b&&(f.hbg=Array.isArray(b.bgcolor)?b.bgcolor[h]:b.bgcolor,f.hbc=Array.isArray(b.bordercolor)?b.bordercolor[h]:b.bordercolor,f.hts=a.isArrayOrTypedArray(b.font.size)?b.font.size[h]:b.font.size,f.htc=Array.isArray(b.font.color)?b.font.color[h]:b.font.color,f.htf=Array.isArray(b.font.family)?b.font.family[h]:b.font.family,f.hnl=a.isArrayOrTypedArray(b.namelength)?b.namelength[h]:b.namelength);var _=o.hoverinfo;_&&(f.hi=Array.isArray(_)?_[h]:_);var w=o.hovertemplate;w&&(f.ht=Array.isArray(w)?w[h]:w);var k={};k[t.index]=f;var T=a.extendFlat({},t,{color:i(o,f),x0:m-x,x1:m+x,xLabelVal:f.x,y0:y-x,y1:y+x,yLabelVal:f.y,cd:k,distance:c,spikeDistance:u,hovertemplate:f.ht});return f.htx?T.text=f.htx:f.tx?T.text=f.tx:o.text&&(T.text=o.text),a.fillText(f,o,T),n.getComponentMethod("errorbars","hoverInfo")(f,o,T),T}e.exports={hoverPoints:function(t,e,r,n){var a,i,s,l,c,u,h,f,p,d=t.cd,g=d[0].t,v=d[0].trace,m=t.xa,y=t.ya,x=g.x,b=g.y,_=m.c2p(e),w=y.c2p(r),k=t.distance;if(g.tree){var T=m.p2c(_-k),M=m.p2c(_+k),A=y.p2c(w-k),S=y.p2c(w+k);a="x"===n?g.tree.range(Math.min(T,M),Math.min(y._rl[0],y._rl[1]),Math.max(T,M),Math.max(y._rl[0],y._rl[1])):g.tree.range(Math.min(T,M),Math.min(A,S),Math.max(T,M),Math.max(A,S))}else a=g.ids;var E=k;if("x"===n)for(c=0;c<a.length;c++)s=x[a[c]],(u=Math.abs(m.c2p(s)-_))<E&&(E=u,h=y.c2p(b[a[c]])-w,p=Math.sqrt(u*u+h*h),i=a[c]);else for(c=a.length-1;c>-1;c--)s=x[a[c]],l=b[a[c]],u=m.c2p(s)-_,h=y.c2p(l)-w,(f=Math.sqrt(u*u+h*h))<E&&(E=p=f,i=a[c]);return t.index=i,t.distance=E,t.dxy=p,void 0===i?[t]:[o(t,x,b,v)]},calcHover:o}},{"../../lib":717,"../../registry":846,"../scatter/get_trace_color":1130}],1180:[function(t,e,r){"use strict";var n=t("./hover");e.exports={moduleType:"trace",name:"scattergl",basePlotModule:t("../../plots/cartesian"),categories:["gl","regl","cartesian","symbols","errorBarsOK","showLegend","scatter-like"],attributes:t("./attributes"),supplyDefaults:t("./defaults"),crossTraceDefaults:t("../scatter/cross_trace_defaults"),colorbar:t("../scatter/marker_colorbar"),formatLabels:t("./format_labels"),calc:t("./calc"),plot:t("./plot"),hoverPoints:n.hoverPoints,selectPoints:t("./select"),meta:{}}},{"../../plots/cartesian":776,"../scatter/cross_trace_defaults":1126,"../scatter/marker_colorbar":1138,"./attributes":1171,"./calc":1172,"./defaults":1175,"./format_labels":1177,"./hover":1179,"./plot":1181,"./select":1183}],1181:[function(t,e,r){"use strict";var n=t("regl-scatter2d"),a=t("regl-line2d"),i=t("regl-error2d"),o=t("gl-text"),s=t("../../lib"),l=t("../../lib/prepare_regl"),c=t("../scatter/subtypes"),u=t("../scatter/link_traces"),h=t("./edit_style").styleTextSelection;function f(t,e,r){var n=t._size,a=t.width,i=t.height;return[n.l+e.domain[0]*n.w,n.b+r.domain[0]*n.h,a-n.r-(1-e.domain[1])*n.w,i-n.t-(1-r.domain[1])*n.h]}e.exports=function(t,e,r){if(r.length){var p,d,g=t._fullLayout,v=e._scene,m=e.xaxis,y=e.yaxis;if(v)if(l(t,["ANGLE_instanced_arrays","OES_element_index_uint"])){var x=v.count,b=g._glcanvas.data()[0].regl;if(u(t,e,r),v.dirty){if(!0===v.error2d&&(v.error2d=i(b)),!0===v.line2d&&(v.line2d=a(b)),!0===v.scatter2d&&(v.scatter2d=n(b)),!0===v.fill2d&&(v.fill2d=a(b)),!0===v.glText)for(v.glText=new Array(x),p=0;p<x;p++)v.glText[p]=new o(b);if(v.glText){if(x>v.glText.length){var _=x-v.glText.length;for(p=0;p<_;p++)v.glText.push(new o(b))}else if(x<v.glText.length){var w=v.glText.length-x;v.glText.splice(x,w).forEach(function(t){t.destroy()})}for(p=0;p<x;p++)v.glText[p].update(v.textOptions[p])}if(v.line2d&&(v.line2d.update(v.lineOptions),v.lineOptions=v.lineOptions.map(function(t){if(t&&t.positions){for(var e=t.positions,r=0;r<e.length&&(isNaN(e[r])||isNaN(e[r+1]));)r+=2;for(var n=e.length-2;n>r&&(isNaN(e[n])||isNaN(e[n+1]));)n-=2;t.positions=e.slice(r,n+2)}return t}),v.line2d.update(v.lineOptions)),v.error2d){var k=(v.errorXOptions||[]).concat(v.errorYOptions||[]);v.error2d.update(k)}v.scatter2d&&v.scatter2d.update(v.markerOptions),v.fillOrder=s.repeat(null,x),v.fill2d&&(v.fillOptions=v.fillOptions.map(function(t,e){var n=r[e];if(t&&n&&n[0]&&n[0].trace){var a,i,o=n[0],s=o.trace,l=o.t,c=v.lineOptions[e],u=[];s._ownfill&&u.push(e),s._nexttrace&&u.push(e+1),u.length&&(v.fillOrder[e]=u);var h,f,p=[],d=c&&c.positions||l.positions;if("tozeroy"===s.fill){for(h=0;h<d.length&&isNaN(d[h+1]);)h+=2;for(f=d.length-2;f>h&&isNaN(d[f+1]);)f-=2;0!==d[h+1]&&(p=[d[h],0]),p=p.concat(d.slice(h,f+2)),0!==d[f+1]&&(p=p.concat([d[f],0]))}else if("tozerox"===s.fill){for(h=0;h<d.length&&isNaN(d[h]);)h+=2;for(f=d.length-2;f>h&&isNaN(d[f]);)f-=2;0!==d[h]&&(p=[0,d[h+1]]),p=p.concat(d.slice(h,f+2)),0!==d[f]&&(p=p.concat([0,d[f+1]]))}else if("toself"===s.fill||"tonext"===s.fill){for(p=[],a=0,i=0;i<d.length;i+=2)(isNaN(d[i])||isNaN(d[i+1]))&&((p=p.concat(d.slice(a,i))).push(d[a],d[a+1]),a=i+2);p=p.concat(d.slice(a)),a&&p.push(d[a],d[a+1])}else{var g=s._nexttrace;if(g){var m=v.lineOptions[e+1];if(m){var y=m.positions;if("tonexty"===s.fill){for(p=d.slice(),e=Math.floor(y.length/2);e--;){var x=y[2*e],b=y[2*e+1];isNaN(x)||isNaN(b)||p.push(x,b)}t.fill=g.fillcolor}}}}if(s._prevtrace&&"tonext"===s._prevtrace.fill){var _=v.lineOptions[e-1].positions,w=p.length/2,k=[a=w];for(i=0;i<_.length;i+=2)(isNaN(_[i])||isNaN(_[i+1]))&&(k.push(i/2+w+1),a=i+2);p=p.concat(_),t.hole=k}return t.fillmode=s.fill,t.opacity=s.opacity,t.positions=p,t}}),v.fill2d.update(v.fillOptions))}var T=g.dragmode,M="lasso"===T||"select"===T,A=g.clickmode.indexOf("select")>-1;for(p=0;p<x;p++){var S=r[p][0],E=S.trace,L=S.t,C=L.index,P=E._length,O=L.x,z=L.y;if(E.selectedpoints||M||A){if(M||(M=!0),E.selectedpoints){var I=v.selectBatch[C]=s.selIndices2selPoints(E),D={};for(d=0;d<I.length;d++)D[I[d]]=1;var R=[];for(d=0;d<P;d++)D[d]||R.push(d);v.unselectBatch[C]=R}var F=L.xpx=new Array(P),B=L.ypx=new Array(P);for(d=0;d<P;d++)F[d]=m.c2p(O[d]),B[d]=y.c2p(z[d])}else L.xpx=L.ypx=null}if(M){if(v.select2d||(v.select2d=n(g._glcanvas.data()[1].regl)),v.scatter2d){var N=new Array(x);for(p=0;p<x;p++)N[p]=v.selectBatch[p].length||v.unselectBatch[p].length?v.markerUnselectedOptions[p]:{};v.scatter2d.update(N)}v.select2d&&(v.select2d.update(v.markerOptions),v.select2d.update(v.markerSelectedOptions)),v.glText&&r.forEach(function(t){var e=((t||[])[0]||{}).trace||{};c.hasText(e)&&h(t)})}else v.scatter2d&&v.scatter2d.update(v.markerOptions);var j={viewport:f(g,m,y),range:[(m._rl||m.range)[0],(y._rl||y.range)[0],(m._rl||m.range)[1],(y._rl||y.range)[1]]},V=s.repeat(j,v.count);v.fill2d&&v.fill2d.update(V),v.line2d&&v.line2d.update(V),v.error2d&&v.error2d.update(V.concat(V)),v.scatter2d&&v.scatter2d.update(V),v.select2d&&v.select2d.update(V),v.glText&&v.glText.forEach(function(t){t.update(j)})}else v.init()}}},{"../../lib":717,"../../lib/prepare_regl":730,"../scatter/link_traces":1136,"../scatter/subtypes":1144,"./edit_style":1176,"gl-text":319,"regl-error2d":491,"regl-line2d":492,"regl-scatter2d":498}],1182:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){var r=e._scene,a={count:0,dirty:!0,lineOptions:[],fillOptions:[],markerOptions:[],markerSelectedOptions:[],markerUnselectedOptions:[],errorXOptions:[],errorYOptions:[],textOptions:[],textSelectedOptions:[],textUnselectedOptions:[],selectBatch:[],unselectBatch:[]},i={fill2d:!1,scatter2d:!1,error2d:!1,line2d:!1,glText:!1,select2d:!1};return e._scene||((r=e._scene={}).init=function(){n.extendFlat(r,i,a)},r.init(),r.update=function(t){var e=n.repeat(t,r.count);if(r.fill2d&&r.fill2d.update(e),r.scatter2d&&r.scatter2d.update(e),r.line2d&&r.line2d.update(e),r.error2d&&r.error2d.update(e.concat(e)),r.select2d&&r.select2d.update(e),r.glText)for(var a=0;a<r.count;a++)r.glText[a].update(t)},r.draw=function(){for(var t=r.count,e=r.fill2d,a=r.error2d,i=r.line2d,o=r.scatter2d,s=r.glText,l=r.select2d,c=r.selectBatch,u=r.unselectBatch,h=0;h<t;h++){if(e&&r.fillOrder[h]&&e.draw(r.fillOrder[h]),i&&r.lineOptions[h]&&i.draw(h),a&&(r.errorXOptions[h]&&a.draw(h),r.errorYOptions[h]&&a.draw(h+t)),o&&r.markerOptions[h])if(u[h].length){var f=n.repeat([],r.count);f[h]=u[h],o.draw(f)}else c[h].length||o.draw(h);s[h]&&r.textOptions[h]&&s[h].render()}l&&l.draw(c),r.dirty=!1},r.destroy=function(){r.fill2d&&r.fill2d.destroy&&r.fill2d.destroy(),r.scatter2d&&r.scatter2d.destroy&&r.scatter2d.destroy(),r.error2d&&r.error2d.destroy&&r.error2d.destroy(),r.line2d&&r.line2d.destroy&&r.line2d.destroy(),r.select2d&&r.select2d.destroy&&r.select2d.destroy(),r.glText&&r.glText.forEach(function(t){t.destroy&&t.destroy()}),r.lineOptions=null,r.fillOptions=null,r.markerOptions=null,r.markerSelectedOptions=null,r.markerUnselectedOptions=null,r.errorXOptions=null,r.errorYOptions=null,r.textOptions=null,r.textSelectedOptions=null,r.textUnselectedOptions=null,r.selectBatch=null,r.unselectBatch=null,e._scene=null}),r.dirty||n.extendFlat(r,a),r}},{"../../lib":717}],1183:[function(t,e,r){"use strict";var n=t("../scatter/subtypes"),a=t("./edit_style").styleTextSelection;e.exports=function(t,e){var r=t.cd,i=[],o=r[0].trace,s=r[0].t,l=o._length,c=s.x,u=s.y,h=s._scene,f=s.index;if(!h)return i;var p=n.hasText(o),d=n.hasMarkers(o),g=!d&&!p;if(!0!==o.visible||g)return i;var v=[],m=[];if(!1!==e&&!e.degenerate)for(var y=0;y<l;y++)e.contains([s.xpx[y],s.ypx[y]],!1,y,t)?(v.push(y),i.push({pointNumber:y,x:c[y],y:u[y]})):m.push(y);if(d){var x=h.scatter2d;if(v.length||m.length){if(!h.selectBatch[f].length&&!h.unselectBatch[f].length){var b=new Array(h.count);b[f]=h.markerUnselectedOptions[f],x.update.apply(x,b)}}else{var _=new Array(h.count);_[f]=h.markerOptions[f],x.update.apply(x,_)}}return h.selectBatch[f]=v,h.unselectBatch[f]=m,p&&a(r),i}},{"../scatter/subtypes":1144,"./edit_style":1176}],1184:[function(t,e,r){"use strict";var n=t("../../plots/template_attributes").hovertemplateAttrs,a=t("../../plots/template_attributes").texttemplateAttrs,i=t("../scattergeo/attributes"),o=t("../scatter/attributes"),s=t("../../plots/mapbox/layout_attributes"),l=t("../../plots/attributes"),c=t("../../components/colorscale/attributes"),u=t("../../lib/extend").extendFlat,h=t("../../plot_api/edit_types").overrideAll,f=i.line,p=i.marker;e.exports=h({lon:i.lon,lat:i.lat,mode:u({},o.mode,{dflt:"markers"}),text:u({},o.text,{}),texttemplate:a({editType:"plot"},{keys:["lat","lon","text"]}),hovertext:u({},o.hovertext,{}),line:{color:f.color,width:f.width},connectgaps:o.connectgaps,marker:u({symbol:{valType:"string",dflt:"circle",arrayOk:!0},opacity:p.opacity,size:p.size,sizeref:p.sizeref,sizemin:p.sizemin,sizemode:p.sizemode},c("marker")),fill:i.fill,fillcolor:o.fillcolor,textfont:s.layers.symbol.textfont,textposition:s.layers.symbol.textposition,below:{valType:"string"},selected:{marker:o.selected.marker},unselected:{marker:o.unselected.marker},hoverinfo:u({},l.hoverinfo,{flags:["lon","lat","text","name"]}),hovertemplate:n()},"calc","nested")},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/attributes":762,"../../plots/mapbox/layout_attributes":822,"../../plots/template_attributes":841,"../scatter/attributes":1120,"../scattergeo/attributes":1161}],1185:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../constants/numerical").BADNUM,o=t("../../lib/geojson_utils"),s=t("../../components/colorscale"),l=t("../../components/drawing"),c=t("../scatter/make_bubble_size_func"),u=t("../scatter/subtypes"),h=t("../../plots/mapbox/convert_text_opts"),f=t("../../components/fx/helpers").appendArrayPointValue,p=t("../../lib/svg_text_utils").NEWLINES,d=t("../../lib/svg_text_utils").BR_TAG_ALL;function g(){return{geojson:o.makeBlank(),layout:{visibility:"none"},paint:{}}}function v(t){return a.isArrayOrTypedArray(t)?function(t){return t}:t?function(){return t}:m}function m(){return""}function y(t){return t[0]===i}e.exports=function(t,e){var r,i=e[0].trace,x=!0===i.visible&&0!==i._length,b="none"!==i.fill,_=u.hasLines(i),w=u.hasMarkers(i),k=u.hasText(i),T=w&&"circle"===i.marker.symbol,M=w&&"circle"!==i.marker.symbol,A=g(),S=g(),E=g(),L=g(),C={fill:A,line:S,circle:E,symbol:L};if(!x)return C;if((b||_)&&(r=o.calcTraceToLineCoords(e)),b&&(A.geojson=o.makePolygon(r),A.layout.visibility="visible",a.extendFlat(A.paint,{"fill-color":i.fillcolor})),_&&(S.geojson=o.makeLine(r),S.layout.visibility="visible",a.extendFlat(S.paint,{"line-width":i.line.width,"line-color":i.line.color,"line-opacity":i.opacity})),T){var P=function(t){var e,r,i,o,u=t[0].trace,h=u.marker,f=u.selectedpoints,p=a.isArrayOrTypedArray(h.color),d=a.isArrayOrTypedArray(h.size),g=a.isArrayOrTypedArray(h.opacity);function v(t){return u.opacity*t}p&&(r=s.hasColorscale(u,"marker")?s.makeColorScaleFuncFromTrace(h):a.identity);d&&(i=c(u));g&&(o=function(t){var e=n(t)?+a.constrain(t,0,1):0;return v(e)});var m,x=[];for(e=0;e<t.length;e++){var b=t[e],_=b.lonlat;if(!y(_)){var w={};r&&(w.mcc=b.mcc=r(b.mc)),i&&(w.mrc=b.mrc=i(b.ms)),o&&(w.mo=o(b.mo)),f&&(w.selected=b.selected||0),x.push({type:"Feature",geometry:{type:"Point",coordinates:_},properties:w})}}if(f)for(m=l.makeSelectedPointStyleFns(u),e=0;e<x.length;e++){var k=x[e].properties;m.selectedOpacityFn&&(k.mo=v(m.selectedOpacityFn(k))),m.selectedColorFn&&(k.mcc=m.selectedColorFn(k)),m.selectedSizeFn&&(k.mrc=m.selectedSizeFn(k))}return{geojson:{type:"FeatureCollection",features:x},mcc:p||m&&m.selectedColorFn?{type:"identity",property:"mcc"}:h.color,mrc:d||m&&m.selectedSizeFn?{type:"identity",property:"mrc"}:(T=h.size,T/2),mo:g||m&&m.selectedOpacityFn?{type:"identity",property:"mo"}:v(h.opacity)};var T}(e);E.geojson=P.geojson,E.layout.visibility="visible",a.extendFlat(E.paint,{"circle-color":P.mcc,"circle-radius":P.mrc,"circle-opacity":P.mo})}if((M||k)&&(L.geojson=function(t,e){for(var r=e._fullLayout,n=t[0].trace,i=(n.marker||{}).symbol,o="circle"!==i?v(i):m,s=u.hasText(n)?v(n.text):m,l=[],c=0;c<t.length;c++){var h=t[c];if(!y(h.lonlat)){var g,x=n.texttemplate;if(x){var b=Array.isArray(x)?x[c]||"":x,_=n._module.formatLabels(h,n,r),w={};f(w,n,h.i);var k=n._meta||{};g=a.texttemplateString(b,_,r._d3locale,w,h,k)}else g=s(h.tx);g&&(g=g.replace(p,"").replace(d,"\n")),l.push({type:"Feature",geometry:{type:"Point",coordinates:h.lonlat},properties:{symbol:o(h.mx),text:g}})}}return{type:"FeatureCollection",features:l}}(e,t),a.extendFlat(L.layout,{visibility:"visible","icon-image":"{symbol}-15","text-field":"{text}"}),M&&(a.extendFlat(L.layout,{"icon-size":i.marker.size/10}),a.extendFlat(L.paint,{"icon-opacity":i.opacity*i.marker.opacity,"icon-color":i.marker.color})),k)){var O=(i.marker||{}).size,z=h(i.textposition,O);a.extendFlat(L.layout,{"text-size":i.textfont.size,"text-anchor":z.anchor,"text-offset":z.offset}),a.extendFlat(L.paint,{"text-color":i.textfont.color,"text-opacity":i.opacity})}return C}},{"../../components/colorscale":603,"../../components/drawing":612,"../../components/fx/helpers":626,"../../constants/numerical":693,"../../lib":717,"../../lib/geojson_utils":712,"../../lib/svg_text_utils":741,"../../plots/mapbox/convert_text_opts":819,"../scatter/make_bubble_size_func":1137,"../scatter/subtypes":1144,"fast-isnumeric":228}],1186:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/subtypes"),i=t("../scatter/marker_defaults"),o=t("../scatter/line_defaults"),s=t("../scatter/text_defaults"),l=t("../scatter/fillcolor_defaults"),c=t("./attributes");e.exports=function(t,e,r,u){function h(r,a){return n.coerce(t,e,c,r,a)}if(function(t,e,r){var n=r("lon")||[],a=r("lat")||[],i=Math.min(n.length,a.length);return e._length=i,i}(0,e,h)){if(h("text"),h("texttemplate"),h("hovertext"),h("hovertemplate"),h("mode"),h("below"),a.hasLines(e)&&(o(t,e,r,u,h,{noDash:!0}),h("connectgaps")),a.hasMarkers(e)){i(t,e,r,u,h,{noLine:!0});var f=e.marker;"circle"!==f.symbol&&(n.isArrayOrTypedArray(f.size)&&(f.size=f.size[0]),n.isArrayOrTypedArray(f.color)&&(f.color=f.color[0]))}a.hasText(e)&&s(t,e,u,h,{noSelect:!0}),h("fill"),"none"!==e.fill&&l(t,e,r,h),n.coerceSelectionMarkerOpacity(e,h)}else e.visible=!1}},{"../../lib":717,"../scatter/fillcolor_defaults":1128,"../scatter/line_defaults":1133,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scatter/text_defaults":1145,"./attributes":1184}],1187:[function(t,e,r){"use strict";e.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t}},{}],1188:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes");e.exports=function(t,e,r){var a={},i=r[e.subplot]._subplot.mockAxis,o=t.lonlat;return a.lonLabel=n.tickText(i,i.c2l(o[0]),!0).text,a.latLabel=n.tickText(i,i.c2l(o[1]),!0).text,a}},{"../../plots/cartesian/axes":765}],1189:[function(t,e,r){"use strict";var n=t("../../components/fx"),a=t("../../lib"),i=t("../scatter/get_trace_color"),o=a.fillText,s=t("../../constants/numerical").BADNUM;e.exports=function(t,e,r){var l=t.cd,c=l[0].trace,u=t.xa,h=t.ya,f=t.subplot,p=360*(e>=0?Math.floor((e+180)/360):Math.ceil((e-180)/360)),d=e-p;if(n.getClosest(l,function(t){var e=t.lonlat;if(e[0]===s)return 1/0;var n=a.modHalf(e[0],360),i=e[1],o=f.project([n,i]),l=o.x-u.c2p([d,i]),c=o.y-h.c2p([n,r]),p=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(l*l+c*c)-p,1-3/p)},t),!1!==t.index){var g=l[t.index],v=g.lonlat,m=[a.modHalf(v[0],360)+p,v[1]],y=u.c2p(m),x=h.c2p(m),b=g.mrc||1;t.x0=y-b,t.x1=y+b,t.y0=x-b,t.y1=x+b;var _={};_[c.subplot]={_subplot:f};var w=c._module.formatLabels(g,c,_);return t.lonLabel=w.lonLabel,t.latLabel=w.latLabel,t.color=i(c,g),t.extraText=function(t,e,r){if(t.hovertemplate)return;var n=(e.hi||t.hoverinfo).split("+"),a=-1!==n.indexOf("all"),i=-1!==n.indexOf("lon"),s=-1!==n.indexOf("lat"),l=e.lonlat,c=[];function u(t){return t+"\xb0"}a||i&&s?c.push("("+u(l[0])+", "+u(l[1])+")"):i?c.push(r.lon+u(l[0])):s&&c.push(r.lat+u(l[1]));(a||-1!==n.indexOf("text"))&&o(e,t,c);return c.join("<br>")}(c,g,l[0].t.labels),t.hovertemplate=c.hovertemplate,[t]}}},{"../../components/fx":630,"../../constants/numerical":693,"../../lib":717,"../scatter/get_trace_color":1130}],1190:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../scatter/marker_colorbar"),formatLabels:t("./format_labels"),calc:t("../scattergeo/calc"),plot:t("./plot"),hoverPoints:t("./hover"),eventData:t("./event_data"),selectPoints:t("./select"),styleOnSelect:function(t,e){e&&e[0].trace._glTrace.update(e)},moduleType:"trace",name:"scattermapbox",basePlotModule:t("../../plots/mapbox"),categories:["mapbox","gl","symbols","showLegend","scatter-like"],meta:{}}},{"../../plots/mapbox":820,"../scatter/marker_colorbar":1138,"../scattergeo/calc":1162,"./attributes":1184,"./defaults":1186,"./event_data":1187,"./format_labels":1188,"./hover":1189,"./plot":1191,"./select":1192}],1191:[function(t,e,r){"use strict";var n=t("./convert"),a=t("../../plots/mapbox/constants").traceLayerPrefix,i=["fill","line","circle","symbol"];function o(t,e){this.type="scattermapbox",this.subplot=t,this.uid=e,this.sourceIds={fill:"source-"+e+"-fill",line:"source-"+e+"-line",circle:"source-"+e+"-circle",symbol:"source-"+e+"-symbol"},this.layerIds={fill:a+e+"-fill",line:a+e+"-line",circle:a+e+"-circle",symbol:a+e+"-symbol"},this.below=null}var s=o.prototype;s.addSource=function(t,e){this.subplot.map.addSource(this.sourceIds[t],{type:"geojson",data:e.geojson})},s.setSourceData=function(t,e){this.subplot.map.getSource(this.sourceIds[t]).setData(e.geojson)},s.addLayer=function(t,e,r){this.subplot.addLayer({type:t,id:this.layerIds[t],source:this.sourceIds[t],layout:e.layout,paint:e.paint},r)},s.update=function(t){var e,r,a,o=this.subplot,s=o.map,l=n(o.gd,t),c=o.belowLookup["trace-"+this.uid];if(c!==this.below){for(e=i.length-1;e>=0;e--)r=i[e],s.removeLayer(this.layerIds[r]);for(e=0;e<i.length;e++)a=l[r=i[e]],this.addLayer(r,a,c);this.below=c}for(e=0;e<i.length;e++)a=l[r=i[e]],o.setOptions(this.layerIds[r],"setLayoutProperty",a.layout),"visible"===a.layout.visibility&&(this.setSourceData(r,a),o.setOptions(this.layerIds[r],"setPaintProperty",a.paint));t[0].trace._glTrace=this},s.dispose=function(){for(var t=this.subplot.map,e=i.length-1;e>=0;e--){var r=i[e];t.removeLayer(this.layerIds[r]),t.removeSource(this.sourceIds[r])}},e.exports=function(t,e){for(var r=e[0].trace,a=new o(t,r.uid),s=n(t.gd,e),l=a.below=t.belowLookup["trace-"+r.uid],c=0;c<i.length;c++){var u=i[c],h=s[u];a.addSource(u,h),a.addLayer(u,h,l)}return e[0].trace._glTrace=a,a}},{"../../plots/mapbox/constants":818,"./convert":1185}],1192:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/subtypes"),i=t("../../constants/numerical").BADNUM;e.exports=function(t,e){var r,o=t.cd,s=t.xaxis,l=t.yaxis,c=[],u=o[0].trace;if(!a.hasMarkers(u))return[];if(!1===e)for(r=0;r<o.length;r++)o[r].selected=0;else for(r=0;r<o.length;r++){var h=o[r],f=h.lonlat;if(f[0]!==i){var p=[n.modHalf(f[0],360),f[1]],d=[s.c2p(p),l.c2p(p)];e.contains(d,null,r,t)?(c.push({pointNumber:r,lon:f[0],lat:f[1]}),h.selected=1):h.selected=0}}return c}},{"../../constants/numerical":693,"../../lib":717,"../scatter/subtypes":1144}],1193:[function(t,e,r){"use strict";var n=t("../../plots/template_attributes").hovertemplateAttrs,a=t("../../plots/template_attributes").texttemplateAttrs,i=t("../../lib/extend").extendFlat,o=t("../scatter/attributes"),s=t("../../plots/attributes"),l=o.line;e.exports={mode:o.mode,r:{valType:"data_array",editType:"calc+clearAxisTypes"},theta:{valType:"data_array",editType:"calc+clearAxisTypes"},r0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes"},dr:{valType:"number",dflt:1,editType:"calc"},theta0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes"},dtheta:{valType:"number",editType:"calc"},thetaunit:{valType:"enumerated",values:["radians","degrees","gradians"],dflt:"degrees",editType:"calc+clearAxisTypes"},text:o.text,texttemplate:a({editType:"plot"},{keys:["r","theta","text"]}),hovertext:o.hovertext,line:{color:l.color,width:l.width,dash:l.dash,shape:i({},l.shape,{values:["linear","spline"]}),smoothing:l.smoothing,editType:"calc"},connectgaps:o.connectgaps,marker:o.marker,cliponaxis:i({},o.cliponaxis,{dflt:!1}),textposition:o.textposition,textfont:o.textfont,fill:i({},o.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:o.fillcolor,hoverinfo:i({},s.hoverinfo,{flags:["r","theta","text","name"]}),hoveron:o.hoveron,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},{"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../scatter/attributes":1120}],1194:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../constants/numerical").BADNUM,i=t("../../plots/cartesian/axes"),o=t("../scatter/colorscale_calc"),s=t("../scatter/arrays_to_calcdata"),l=t("../scatter/calc_selection"),c=t("../scatter/calc").calcMarkerSize;e.exports=function(t,e){for(var r=t._fullLayout,u=e.subplot,h=r[u].radialaxis,f=r[u].angularaxis,p=h.makeCalcdata(e,"r"),d=f.makeCalcdata(e,"theta"),g=e._length,v=new Array(g),m=0;m<g;m++){var y=p[m],x=d[m],b=v[m]={};n(y)&&n(x)?(b.r=y,b.theta=x):b.r=a}var _=c(e,g);return e._extremes.x=i.findExtremes(h,p,{ppad:_}),o(t,e),s(v,e),l(v,e),v}},{"../../constants/numerical":693,"../../plots/cartesian/axes":765,"../scatter/arrays_to_calcdata":1119,"../scatter/calc":1121,"../scatter/calc_selection":1122,"../scatter/colorscale_calc":1123,"fast-isnumeric":228}],1195:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/subtypes"),i=t("../scatter/marker_defaults"),o=t("../scatter/line_defaults"),s=t("../scatter/line_shape_defaults"),l=t("../scatter/text_defaults"),c=t("../scatter/fillcolor_defaults"),u=t("../scatter/constants").PTS_LINESONLY,h=t("./attributes");function f(t,e,r,n){var a,i=n("r"),o=n("theta");if(i)o?a=Math.min(i.length,o.length):(a=i.length,n("theta0"),n("dtheta"));else{if(!o)return 0;a=e.theta.length,n("r0"),n("dr")}return e._length=a,a}e.exports={handleRThetaDefaults:f,supplyDefaults:function(t,e,r,p){function d(r,a){return n.coerce(t,e,h,r,a)}var g=f(0,e,0,d);if(g){d("thetaunit"),d("mode",g<u?"lines+markers":"lines"),d("text"),d("hovertext"),"fills"!==e.hoveron&&d("hovertemplate"),a.hasLines(e)&&(o(t,e,r,p,d),s(t,e,d),d("connectgaps")),a.hasMarkers(e)&&i(t,e,r,p,d,{gradient:!0}),a.hasText(e)&&(d("texttemplate"),l(t,e,p,d));var v=[];(a.hasMarkers(e)||a.hasText(e))&&(d("cliponaxis"),d("marker.maxdisplayed"),v.push("points")),d("fill"),"none"!==e.fill&&(c(t,e,r,d),a.hasLines(e)||s(t,e,d)),"tonext"!==e.fill&&"toself"!==e.fill||v.push("fills"),d("hoveron",v.join("+")||"points"),n.coerceSelectionMarkerOpacity(e,d)}else e.visible=!1}}},{"../../lib":717,"../scatter/constants":1124,"../scatter/fillcolor_defaults":1128,"../scatter/line_defaults":1133,"../scatter/line_shape_defaults":1135,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scatter/text_defaults":1145,"./attributes":1193}],1196:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes");e.exports=function(t,e,r){var i,o,s={},l=r[e.subplot]._subplot;l?(i=l.radialAxis,o=l.angularAxis):(i=(l=r[e.subplot]).radialaxis,o=l.angularaxis);var c=i.c2l(t.r);s.rLabel=a.tickText(i,c,!0).text;var u="degrees"===o.thetaunit?n.rad2deg(t.theta):t.theta;return s.thetaLabel=a.tickText(o,u,!0).text,s}},{"../../lib":717,"../../plots/cartesian/axes":765}],1197:[function(t,e,r){"use strict";var n=t("../scatter/hover");function a(t,e,r,n){var a=r.radialAxis,i=r.angularAxis;a._hovertitle="r",i._hovertitle="\u03b8";var o={};o[e.subplot]={_subplot:r};var s=e._module.formatLabels(t,e,o);n.rLabel=s.rLabel,n.thetaLabel=s.thetaLabel;var l=t.hi||e.hoverinfo,c=[];function u(t,e){c.push(t._hovertitle+": "+e)}if(!e.hovertemplate){var h=l.split("+");-1!==h.indexOf("all")&&(h=["r","theta","text"]),-1!==h.indexOf("r")&&u(a,n.rLabel),-1!==h.indexOf("theta")&&u(i,n.thetaLabel),-1!==h.indexOf("text")&&n.text&&(c.push(n.text),delete n.text),n.extraText=c.join("<br>")}}e.exports={hoverPoints:function(t,e,r,i){var o=n(t,e,r,i);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index)return o;var l=t.subplot,c=s.cd[s.index],u=s.trace;if(l.isPtInside(c))return s.xLabelVal=void 0,s.yLabelVal=void 0,a(c,u,l,s),s.hovertemplate=u.hovertemplate,o}},makeHoverPointText:a}},{"../scatter/hover":1131}],1198:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"scatterpolar",basePlotModule:t("../../plots/polar"),categories:["polar","symbols","showLegend","scatter-like"],attributes:t("./attributes"),supplyDefaults:t("./defaults").supplyDefaults,colorbar:t("../scatter/marker_colorbar"),formatLabels:t("./format_labels"),calc:t("./calc"),plot:t("./plot"),style:t("../scatter/style").style,styleOnSelect:t("../scatter/style").styleOnSelect,hoverPoints:t("./hover").hoverPoints,selectPoints:t("../scatter/select"),meta:{}}},{"../../plots/polar":829,"../scatter/marker_colorbar":1138,"../scatter/select":1141,"../scatter/style":1143,"./attributes":1193,"./calc":1194,"./defaults":1195,"./format_labels":1196,"./hover":1197,"./plot":1199}],1199:[function(t,e,r){"use strict";var n=t("../scatter/plot"),a=t("../../constants/numerical").BADNUM;e.exports=function(t,e,r){for(var i=e.layers.frontplot.select("g.scatterlayer"),o={xaxis:e.xaxis,yaxis:e.yaxis,plot:e.framework,layerClipId:e._hasClipOnAxisFalse?e.clipIds.forTraces:null},s=e.radialAxis,l=e.angularAxis,c=0;c<r.length;c++)for(var u=r[c],h=0;h<u.length;h++){var f=u[h],p=f.r;if(p===a)f.x=f.y=a;else{var d=s.c2g(p),g=l.c2g(f.theta);f.x=d*Math.cos(g),f.y=d*Math.sin(g)}}n(t,o,r,i)}},{"../../constants/numerical":693,"../scatter/plot":1140}],1200:[function(t,e,r){"use strict";var n=t("../scatterpolar/attributes"),a=t("../scattergl/attributes"),i=t("../../plots/template_attributes").texttemplateAttrs;e.exports={mode:n.mode,r:n.r,theta:n.theta,r0:n.r0,dr:n.dr,theta0:n.theta0,dtheta:n.dtheta,thetaunit:n.thetaunit,text:n.text,texttemplate:i({editType:"plot"},{keys:["r","theta","text"]}),hovertext:n.hovertext,hovertemplate:n.hovertemplate,line:a.line,connectgaps:a.connectgaps,marker:a.marker,fill:a.fill,fillcolor:a.fillcolor,textposition:a.textposition,textfont:a.textfont,hoverinfo:n.hoverinfo,selected:n.selected,unselected:n.unselected}},{"../../plots/template_attributes":841,"../scattergl/attributes":1171,"../scatterpolar/attributes":1193}],1201:[function(t,e,r){"use strict";var n=t("../scatter/colorscale_calc"),a=t("../scatter/calc").calcMarkerSize,i=t("../scattergl/convert"),o=t("../../plots/cartesian/axes"),s=t("../scattergl/constants").TOO_MANY_POINTS;e.exports=function(t,e){var r=t._fullLayout,l=e.subplot,c=r[l].radialaxis,u=r[l].angularaxis,h=e._r=c.makeCalcdata(e,"r"),f=e._theta=u.makeCalcdata(e,"theta"),p=e._length,d={};p<h.length&&(h=h.slice(0,p)),p<f.length&&(f=f.slice(0,p)),d.r=h,d.theta=f,n(t,e);var g,v=d.opts=i.style(t,e);return p<s?g=a(e,p):v.marker&&(g=2*(v.marker.sizeAvg||Math.max(v.marker.size,3))),e._extremes.x=o.findExtremes(c,h,{ppad:g}),[{x:!1,y:!1,t:d,trace:e}]}},{"../../plots/cartesian/axes":765,"../scatter/calc":1121,"../scatter/colorscale_calc":1123,"../scattergl/constants":1173,"../scattergl/convert":1174}],1202:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/subtypes"),i=t("../scatterpolar/defaults").handleRThetaDefaults,o=t("../scatter/marker_defaults"),s=t("../scatter/line_defaults"),l=t("../scatter/text_defaults"),c=t("../scatter/fillcolor_defaults"),u=t("../scatter/constants").PTS_LINESONLY,h=t("./attributes");e.exports=function(t,e,r,f){function p(r,a){return n.coerce(t,e,h,r,a)}var d=i(t,e,f,p);d?(p("thetaunit"),p("mode",d<u?"lines+markers":"lines"),p("text"),p("hovertext"),"fills"!==e.hoveron&&p("hovertemplate"),a.hasLines(e)&&(s(t,e,r,f,p),p("connectgaps")),a.hasMarkers(e)&&o(t,e,r,f,p),a.hasText(e)&&(p("texttemplate"),l(t,e,f,p)),p("fill"),"none"!==e.fill&&c(t,e,r,p),n.coerceSelectionMarkerOpacity(e,p)):e.visible=!1}},{"../../lib":717,"../scatter/constants":1124,"../scatter/fillcolor_defaults":1128,"../scatter/line_defaults":1133,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scatter/text_defaults":1145,"../scatterpolar/defaults":1195,"./attributes":1200}],1203:[function(t,e,r){"use strict";var n=t("../scatterpolar/format_labels");e.exports=function(t,e,r){var a=t.i;return"r"in t||(t.r=e._r[a]),"theta"in t||(t.theta=e._theta[a]),n(t,e,r)}},{"../scatterpolar/format_labels":1196}],1204:[function(t,e,r){"use strict";var n=t("../scattergl/hover"),a=t("../scatterpolar/hover").makeHoverPointText;e.exports={hoverPoints:function(t,e,r,i){var o=t.cd[0].t,s=o.r,l=o.theta,c=n.hoverPoints(t,e,r,i);if(c&&!1!==c[0].index){var u=c[0];if(void 0===u.index)return c;var h=t.subplot,f=u.cd[u.index],p=u.trace;if(f.r=s[u.index],f.theta=l[u.index],h.isPtInside(f))return u.xLabelVal=void 0,u.yLabelVal=void 0,a(f,p,h,u),c}}}},{"../scattergl/hover":1179,"../scatterpolar/hover":1197}],1205:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"scatterpolargl",basePlotModule:t("../../plots/polar"),categories:["gl","regl","polar","symbols","showLegend","scatter-like"],attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../scatter/marker_colorbar"),formatLabels:t("./format_labels"),calc:t("./calc"),plot:t("./plot"),hoverPoints:t("./hover").hoverPoints,selectPoints:t("../scattergl/select"),meta:{}}},{"../../plots/polar":829,"../scatter/marker_colorbar":1138,"../scattergl/select":1183,"./attributes":1200,"./calc":1201,"./defaults":1202,"./format_labels":1203,"./hover":1204,"./plot":1206}],1206:[function(t,e,r){"use strict";var n=t("point-cluster"),a=t("fast-isnumeric"),i=t("../scattergl/plot"),o=t("../scattergl/scene_update"),s=t("../scattergl/convert"),l=t("../../lib"),c=t("../scattergl/constants").TOO_MANY_POINTS;e.exports=function(t,e,r){if(r.length){var u=e.radialAxis,h=e.angularAxis,f=o(t,e);return r.forEach(function(r){if(r&&r[0]&&r[0].trace){var i,o=r[0],p=o.trace,d=o.t,g=p._length,v=d.r,m=d.theta,y=d.opts,x=v.slice(),b=m.slice();for(i=0;i<v.length;i++)e.isPtInside({r:v[i],theta:m[i]})||(x[i]=NaN,b[i]=NaN);var _=new Array(2*g),w=Array(g),k=Array(g);for(i=0;i<g;i++){var T,M,A=x[i];if(a(A)){var S=u.c2g(A),E=h.c2g(b[i],p.thetaunit);T=S*Math.cos(E),M=S*Math.sin(E)}else T=M=NaN;w[i]=_[2*i]=T,k[i]=_[2*i+1]=M}d.tree=n(_),y.marker&&g>=c&&(y.marker.cluster=d.tree),y.marker&&(y.markerSel.positions=y.markerUnsel.positions=y.marker.positions=_),y.line&&_.length>1&&l.extendFlat(y.line,s.linePositions(t,p,_)),y.text&&(l.extendFlat(y.text,{positions:_},s.textPosition(t,p,y.text,y.marker)),l.extendFlat(y.textSel,{positions:_},s.textPosition(t,p,y.text,y.markerSel)),l.extendFlat(y.textUnsel,{positions:_},s.textPosition(t,p,y.text,y.markerUnsel))),y.fill&&!f.fill2d&&(f.fill2d=!0),y.marker&&!f.scatter2d&&(f.scatter2d=!0),y.line&&!f.line2d&&(f.line2d=!0),y.text&&!f.glText&&(f.glText=!0),f.lineOptions.push(y.line),f.fillOptions.push(y.fill),f.markerOptions.push(y.marker),f.markerSelectedOptions.push(y.markerSel),f.markerUnselectedOptions.push(y.markerUnsel),f.textOptions.push(y.text),f.textSelectedOptions.push(y.textSel),f.textUnselectedOptions.push(y.textUnsel),f.selectBatch.push([]),f.unselectBatch.push([]),d.x=w,d.y=k,d.rawx=w,d.rawy=k,d.r=v,d.theta=m,d.positions=_,d._scene=f,d.index=f.count,f.count++}}),i(t,e,r)}}},{"../../lib":717,"../scattergl/constants":1173,"../scattergl/convert":1174,"../scattergl/plot":1181,"../scattergl/scene_update":1182,"fast-isnumeric":228,"point-cluster":470}],1207:[function(t,e,r){"use strict";var n=t("../../plots/template_attributes").hovertemplateAttrs,a=t("../../plots/template_attributes").texttemplateAttrs,i=t("../scatter/attributes"),o=t("../../plots/attributes"),s=t("../../components/colorscale/attributes"),l=t("../../components/drawing/attributes").dash,c=t("../../lib/extend").extendFlat,u=i.marker,h=i.line,f=u.line;e.exports={a:{valType:"data_array",editType:"calc"},b:{valType:"data_array",editType:"calc"},c:{valType:"data_array",editType:"calc"},sum:{valType:"number",dflt:0,min:0,editType:"calc"},mode:c({},i.mode,{dflt:"markers"}),text:c({},i.text,{}),texttemplate:a({editType:"plot"},{keys:["a","b","c","text"]}),hovertext:c({},i.hovertext,{}),line:{color:h.color,width:h.width,dash:l,shape:c({},h.shape,{values:["linear","spline"]}),smoothing:h.smoothing,editType:"calc"},connectgaps:i.connectgaps,cliponaxis:i.cliponaxis,fill:c({},i.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:i.fillcolor,marker:c({symbol:u.symbol,opacity:u.opacity,maxdisplayed:u.maxdisplayed,size:u.size,sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,line:c({width:f.width,editType:"calc"},s("marker.line")),gradient:u.gradient,editType:"calc"},s("marker")),textfont:i.textfont,textposition:i.textposition,selected:i.selected,unselected:i.unselected,hoverinfo:c({},o.hoverinfo,{flags:["a","b","c","text","name"]}),hoveron:i.hoveron,hovertemplate:n()}},{"../../components/colorscale/attributes":598,"../../components/drawing/attributes":611,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../scatter/attributes":1120}],1208:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../scatter/colorscale_calc"),i=t("../scatter/arrays_to_calcdata"),o=t("../scatter/calc_selection"),s=t("../scatter/calc").calcMarkerSize,l=["a","b","c"],c={a:["b","c"],b:["a","c"],c:["a","b"]};e.exports=function(t,e){var r,u,h,f,p,d,g=t._fullLayout[e.subplot].sum,v=e.sum||g,m={a:e.a,b:e.b,c:e.c};for(r=0;r<l.length;r++)if(!m[h=l[r]]){for(p=m[c[h][0]],d=m[c[h][1]],f=new Array(p.length),u=0;u<p.length;u++)f[u]=v-p[u]-d[u];m[h]=f}var y,x,b,_,w,k,T=e._length,M=new Array(T);for(r=0;r<T;r++)y=m.a[r],x=m.b[r],b=m.c[r],n(y)&&n(x)&&n(b)?(1!==(_=g/((y=+y)+(x=+x)+(b=+b)))&&(y*=_,x*=_,b*=_),k=y,w=b-x,M[r]={x:w,y:k,a:y,b:x,c:b}):M[r]={x:!1,y:!1};return s(e,T),a(t,e),i(M,e),o(M,e),M}},{"../scatter/arrays_to_calcdata":1119,"../scatter/calc":1121,"../scatter/calc_selection":1122,"../scatter/colorscale_calc":1123,"fast-isnumeric":228}],1209:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/constants"),i=t("../scatter/subtypes"),o=t("../scatter/marker_defaults"),s=t("../scatter/line_defaults"),l=t("../scatter/line_shape_defaults"),c=t("../scatter/text_defaults"),u=t("../scatter/fillcolor_defaults"),h=t("./attributes");e.exports=function(t,e,r,f){function p(r,a){return n.coerce(t,e,h,r,a)}var d,g=p("a"),v=p("b"),m=p("c");if(g?(d=g.length,v?(d=Math.min(d,v.length),m&&(d=Math.min(d,m.length))):d=m?Math.min(d,m.length):0):v&&m&&(d=Math.min(v.length,m.length)),d){e._length=d,p("sum"),p("text"),p("hovertext"),"fills"!==e.hoveron&&p("hovertemplate"),p("mode",d<a.PTS_LINESONLY?"lines+markers":"lines"),i.hasLines(e)&&(s(t,e,r,f,p),l(t,e,p),p("connectgaps")),i.hasMarkers(e)&&o(t,e,r,f,p,{gradient:!0}),i.hasText(e)&&(p("texttemplate"),c(t,e,f,p));var y=[];(i.hasMarkers(e)||i.hasText(e))&&(p("cliponaxis"),p("marker.maxdisplayed"),y.push("points")),p("fill"),"none"!==e.fill&&(u(t,e,r,p),i.hasLines(e)||l(t,e,p)),"tonext"!==e.fill&&"toself"!==e.fill||y.push("fills"),p("hoveron",y.join("+")||"points"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible=!1}},{"../../lib":717,"../scatter/constants":1124,"../scatter/fillcolor_defaults":1128,"../scatter/line_defaults":1133,"../scatter/line_shape_defaults":1135,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scatter/text_defaults":1145,"./attributes":1207}],1210:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a){if(e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),n[a]){var i=n[a];t.a=i.a,t.b=i.b,t.c=i.c}else t.a=e.a,t.b=e.b,t.c=e.c;return t}},{}],1211:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes");e.exports=function(t,e,r){var a={},i=r[e.subplot]._subplot;return a.aLabel=n.tickText(i.aaxis,t.a,!0).text,a.bLabel=n.tickText(i.baxis,t.b,!0).text,a.cLabel=n.tickText(i.caxis,t.c,!0).text,a}},{"../../plots/cartesian/axes":765}],1212:[function(t,e,r){"use strict";var n=t("../scatter/hover");e.exports=function(t,e,r,a){var i=n(t,e,r,a);if(i&&!1!==i[0].index){var o=i[0];if(void 0===o.index){var s=1-o.y0/t.ya._length,l=t.xa._length,c=l*s/2,u=l-c;return o.x0=Math.max(Math.min(o.x0,u),c),o.x1=Math.max(Math.min(o.x1,u),c),i}var h=o.cd[o.index],f=o.trace,p=o.subplot;o.a=h.a,o.b=h.b,o.c=h.c,o.xLabelVal=void 0,o.yLabelVal=void 0;var d={};d[f.subplot]={_subplot:p};var g=f._module.formatLabels(h,f,d);o.aLabel=g.aLabel,o.bLabel=g.bLabel,o.cLabel=g.cLabel;var v=h.hi||f.hoverinfo,m=[];if(!f.hovertemplate){var y=v.split("+");-1!==y.indexOf("all")&&(y=["a","b","c"]),-1!==y.indexOf("a")&&x(p.aaxis,o.aLabel),-1!==y.indexOf("b")&&x(p.baxis,o.bLabel),-1!==y.indexOf("c")&&x(p.caxis,o.cLabel)}return o.extraText=m.join("<br>"),o.hovertemplate=f.hovertemplate,i}function x(t,e){m.push(t._hovertitle+": "+e)}}},{"../scatter/hover":1131}],1213:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../scatter/marker_colorbar"),formatLabels:t("./format_labels"),calc:t("./calc"),plot:t("./plot"),style:t("../scatter/style").style,styleOnSelect:t("../scatter/style").styleOnSelect,hoverPoints:t("./hover"),selectPoints:t("../scatter/select"),eventData:t("./event_data"),moduleType:"trace",name:"scatterternary",basePlotModule:t("../../plots/ternary"),categories:["ternary","symbols","showLegend","scatter-like"],meta:{}}},{"../../plots/ternary":842,"../scatter/marker_colorbar":1138,"../scatter/select":1141,"../scatter/style":1143,"./attributes":1207,"./calc":1208,"./defaults":1209,"./event_data":1210,"./format_labels":1211,"./hover":1212,"./plot":1214}],1214:[function(t,e,r){"use strict";var n=t("../scatter/plot");e.exports=function(t,e,r){var a=e.plotContainer;a.select(".scatterlayer").selectAll("*").remove();var i={xaxis:e.xaxis,yaxis:e.yaxis,plot:a,layerClipId:e._hasClipOnAxisFalse?e.clipIdRelative:null},o=e.layers.frontplot.select("g.scatterlayer");n(t,i,r,o)}},{"../scatter/plot":1140}],1215:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),a=t("../../components/colorscale/attributes"),i=t("../../plots/template_attributes").hovertemplateAttrs,o=t("../scattergl/attributes"),s=t("../../plots/cartesian/constants").idRegex,l=t("../../plot_api/plot_template").templatedArray,c=t("../../lib/extend").extendFlat,u=n.marker,h=u.line,f=c(a("marker.line",{editTypeOverride:"calc"}),{width:c({},h.width,{editType:"calc"}),editType:"calc"}),p=c(a("marker"),{symbol:u.symbol,size:c({},u.size,{editType:"markerSize"}),sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,opacity:u.opacity,colorbar:u.colorbar,line:f,editType:"calc"});function d(t){return{valType:"info_array",freeLength:!0,editType:"calc",items:{valType:"subplotid",regex:s[t],editType:"plot"}}}p.color.editType=p.cmin.editType=p.cmax.editType="style",e.exports={dimensions:l("dimension",{visible:{valType:"boolean",dflt:!0,editType:"calc"},label:{valType:"string",editType:"calc"},values:{valType:"data_array",editType:"calc+clearAxisTypes"},axis:{type:{valType:"enumerated",values:["linear","log","date","category"],editType:"calc+clearAxisTypes"},matches:{valType:"boolean",dflt:!1,editType:"calc"},editType:"calc+clearAxisTypes"},editType:"calc+clearAxisTypes"}),text:c({},o.text,{}),hovertext:c({},o.hovertext,{}),hovertemplate:i(),marker:p,xaxes:d("x"),yaxes:d("y"),diagonal:{visible:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc"},showupperhalf:{valType:"boolean",dflt:!0,editType:"calc"},showlowerhalf:{valType:"boolean",dflt:!0,editType:"calc"},selected:{marker:o.selected.marker,editType:"calc"},unselected:{marker:o.unselected.marker,editType:"calc"},opacity:o.opacity}},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plot_api/plot_template":755,"../../plots/cartesian/constants":771,"../../plots/template_attributes":841,"../scatter/attributes":1120,"../scattergl/attributes":1171}],1216:[function(t,e,r){"use strict";var n=t("regl-line2d"),a=t("../../registry"),i=t("../../lib/prepare_regl"),o=t("../../plots/get_data").getModuleCalcData,s=t("../../plots/cartesian"),l=t("../../plots/cartesian/axis_ids").getFromId,c=t("../../plots/cartesian/axes").shouldShowZeroLine,u="splom";function h(t,e,r){for(var n=r.matrixOptions.data.length,a=e._visibleDims,i=r.viewOpts.ranges=new Array(n),o=0;o<a.length;o++){var s=a[o],c=i[o]=new Array(4),u=l(t,e._diag[s][0]);u&&(c[0]=u.r2l(u.range[0]),c[2]=u.r2l(u.range[1]));var h=l(t,e._diag[s][1]);h&&(c[1]=h.r2l(h.range[0]),c[3]=h.r2l(h.range[1]))}r.selectBatch.length||r.unselectBatch.length?r.matrix.update({ranges:i},{ranges:i}):r.matrix.update({ranges:i})}function f(t){var e=t._fullLayout,r=e._glcanvas.data()[0].regl,a=e._splomGrid;a||(a=e._splomGrid=n(r)),a.update(function(t){var e,r=t._fullLayout,n=r._size,a=[0,0,r.width,r.height],i={};function o(t,e,r,n,o,s){var l=e[t+"color"],c=e[t+"width"],u=String(l+c);u in i?i[u].data.push(NaN,NaN,r,n,o,s):i[u]={data:[r,n,o,s],join:"rect",thickness:c,color:l,viewport:a,range:a,overlay:!1}}for(e in r._splomSubplots){var s,l,u=r._plots[e],h=u.xaxis,f=u.yaxis,p=h._gridVals,d=f._gridVals,g=n.b+f.domain[0]*n.h,v=-f._m,m=-v*f.r2l(f.range[0],f.calendar);if(h.showgrid)for(e=0;e<p.length;e++)s=h._offset+h.l2p(p[e].x),o("grid",h,s,g,s,g+f._length);if(f.showgrid)for(e=0;e<d.length;e++)l=g+m+v*d[e].x,o("grid",f,h._offset,l,h._offset+h._length,l);c(t,h,f)&&(s=h._offset+h.l2p(0),o("zeroline",h,s,g,s,g+f._length)),c(t,f,h)&&(l=g+m+0,o("zeroline",f,h._offset,l,h._offset+h._length,l))}var y=[];for(e in i)y.push(i[e]);return y}(t))}e.exports={name:u,attr:s.attr,attrRegex:s.attrRegex,layoutAttributes:s.layoutAttributes,supplyLayoutDefaults:s.supplyLayoutDefaults,drawFramework:s.drawFramework,plot:function(t){var e=t._fullLayout,r=a.getModule(u),n=o(t.calcdata,r)[0];i(t,["ANGLE_instanced_arrays","OES_element_index_uint"])&&(e._hasOnlyLargeSploms&&f(t),r.plot(t,{},n))},drag:function(t){var e=t.calcdata,r=t._fullLayout;r._hasOnlyLargeSploms&&f(t);for(var n=0;n<e.length;n++){var a=e[n][0].trace,i=r._splomScenes[a.uid];"splom"===a.type&&i&&i.matrix&&h(t,a,i)}},updateGrid:f,clean:function(t,e,r,n){var a,i={};if(n._splomScenes){for(a=0;a<t.length;a++){var o=t[a];"splom"===o.type&&(i[o.uid]=1)}for(a=0;a<r.length;a++){var l=r[a];if(!i[l.uid]){var c=n._splomScenes[l.uid];c&&c.destroy&&c.destroy(),n._splomScenes[l.uid]=null,delete n._splomScenes[l.uid]}}}0===Object.keys(n._splomScenes||{}).length&&delete n._splomScenes,n._splomGrid&&!e._hasOnlyLargeSploms&&n._hasOnlyLargeSploms&&(n._splomGrid.destroy(),n._splomGrid=null,delete n._splomGrid),s.clean(t,e,r,n)},updateFx:s.updateFx,toSVG:s.toSVG}},{"../../lib/prepare_regl":730,"../../plots/cartesian":776,"../../plots/cartesian/axes":765,"../../plots/cartesian/axis_ids":768,"../../plots/get_data":800,"../../registry":846,"regl-line2d":492}],1217:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axis_ids"),i=t("../scatter/calc").calcMarkerSize,o=t("../scatter/calc").calcAxisExpansion,s=t("../scatter/colorscale_calc"),l=t("../scattergl/convert").markerSelection,c=t("../scattergl/convert").markerStyle,u=t("./scene_update"),h=t("../../constants/numerical").BADNUM,f=t("../scattergl/constants").TOO_MANY_POINTS;e.exports=function(t,e){var r,p,d,g,v,m,y=e.dimensions,x=e._length,b={},_=b.cdata=[],w=b.data=[],k=e._visibleDims=[];function T(t,r){for(var a=t.makeCalcdata({v:r.values,vcalendar:e.calendar},"v"),i=0;i<a.length;i++)a[i]=a[i]===h?NaN:a[i];_.push(a),w.push("log"===t.type?n.simpleMap(a,t.c2l):a)}for(r=0;r<y.length;r++)if((d=y[r]).visible){if(g=a.getFromId(t,e._diag[r][0]),v=a.getFromId(t,e._diag[r][1]),g&&v&&g.type!==v.type){n.log("Skipping splom dimension "+r+" with conflicting axis types");continue}g?(T(g,d),v&&"category"===v.type&&(v._categories=g._categories.slice())):T(v,d),k.push(r)}for(s(t,e),n.extendFlat(b,c(e)),m=_.length*x>f?2*(b.sizeAvg||Math.max(b.size,3)):i(e,x),p=0;p<k.length;p++)d=y[r=k[p]],g=a.getFromId(t,e._diag[r][0])||{},v=a.getFromId(t,e._diag[r][1])||{},o(t,e,g,v,_[p],_[p],m);var M=u(t,e);return M.matrix||(M.matrix=!0),M.matrixOptions=b,M.selectedOptions=l(e,e.selected),M.unselectedOptions=l(e,e.unselected),[{x:!1,y:!1,t:{},trace:e}]}},{"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/axis_ids":768,"../scatter/calc":1121,"../scatter/colorscale_calc":1123,"../scattergl/constants":1173,"../scattergl/convert":1174,"./scene_update":1224}],1218:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/array_container_defaults"),i=t("./attributes"),o=t("../scatter/subtypes"),s=t("../scatter/marker_defaults"),l=t("../parcoords/merge_length"),c=t("../scattergl/helpers").isOpenSymbol;function u(t,e){function r(r,a){return n.coerce(t,e,i.dimensions,r,a)}r("label");var a=r("values");a&&a.length?r("visible"):e.visible=!1,r("axis.type"),r("axis.matches")}e.exports=function(t,e,r,h){function f(r,a){return n.coerce(t,e,i,r,a)}var p=a(t,e,{name:"dimensions",handleItemDefaults:u}),d=f("diagonal.visible"),g=f("showupperhalf"),v=f("showlowerhalf");if(l(e,p,"values")&&(d||g||v)){f("text"),f("hovertext"),f("hovertemplate"),s(t,e,r,h,f);var m=c(e.marker.symbol),y=o.isBubble(e);f("marker.line.width",m||y?1:0),function(t,e,r,n){var a,i,o=e.dimensions,s=o.length,l=e.showupperhalf,c=e.showlowerhalf,u=e.diagonal.visible,h=new Array(s),f=new Array(s);for(a=0;a<s;a++){var p=a?a+1:"";h[a]="x"+p,f[a]="y"+p}var d=n("xaxes",h),g=n("yaxes",f),v=e._diag=new Array(s);e._xaxes={},e._yaxes={};var m=[],y=[];function x(t,n,a,i){if(t){var o=t.charAt(0),s=r._splomAxes[o];if(e["_"+o+"axes"][t]=1,i.push(t),!(t in s)){var l=s[t]={};a&&(l.label=a.label||"",a.visible&&a.axis&&(a.axis.type&&(l.type=a.axis.type),a.axis.matches&&(l.matches=n)))}}}var b=!u&&!c,_=!u&&!l;for(e._axesDim={},a=0;a<s;a++){var w=o[a],k=0===a,T=a===s-1,M=k&&b||T&&_?void 0:d[a],A=k&&_||T&&b?void 0:g[a];x(M,A,w,m),x(A,M,w,y),v[a]=[M,A],e._axesDim[M]=a,e._axesDim[A]=a}for(a=0;a<m.length;a++)for(i=0;i<y.length;i++){var S=m[a]+y[i];a>i&&l?r._splomSubplots[S]=1:a<i&&c?r._splomSubplots[S]=1:a!==i||!u&&c&&l||(r._splomSubplots[S]=1)}(!c||!u&&l&&c)&&(r._splomGridDflt.xside="bottom",r._splomGridDflt.yside="left")}(0,e,h,f),n.coerceSelectionMarkerOpacity(e,f)}else e.visible=!1}},{"../../lib":717,"../../plots/array_container_defaults":761,"../parcoords/merge_length":1091,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scattergl/helpers":1178,"./attributes":1215}],1219:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/colorscale_calc"),i=t("../scattergl/convert").markerStyle;e.exports=function(t,e){var r=e.trace,o=t._fullLayout._splomScenes[r.uid];if(o){a(t,r),n.extendFlat(o.matrixOptions,i(r));var s=n.extendFlat({},o.matrixOptions,o.viewOpts);o.matrix.update(s,null)}}},{"../../lib":717,"../scatter/colorscale_calc":1123,"../scattergl/convert":1174}],1220:[function(t,e,r){"use strict";r.getDimIndex=function(t,e){for(var r=e._id,n={x:0,y:1}[r.charAt(0)],a=t._visibleDims,i=0;i<a.length;i++){var o=a[i];if(t._diag[o][n]===r)return i}return!1}},{}],1221:[function(t,e,r){"use strict";var n=t("./helpers"),a=t("../scattergl/hover").calcHover;e.exports={hoverPoints:function(t,e,r){var i=t.cd[0].trace,o=t.scene.matrixOptions.cdata,s=t.xa,l=t.ya,c=s.c2p(e),u=l.c2p(r),h=t.distance,f=n.getDimIndex(i,s),p=n.getDimIndex(i,l);if(!1===f||!1===p)return[t];for(var d,g,v=o[f],m=o[p],y=h,x=0;x<v.length;x++){var b=v[x],_=m[x],w=s.c2p(b)-c,k=l.c2p(_)-u,T=Math.sqrt(w*w+k*k);T<y&&(y=g=T,d=x)}return t.index=d,t.distance=y,t.dxy=g,void 0===d?[t]:[a(t,v,m,i)]}}},{"../scattergl/hover":1179,"./helpers":1220}],1222:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../components/grid");e.exports={moduleType:"trace",name:"splom",basePlotModule:t("./base_plot"),categories:["gl","regl","cartesian","symbols","showLegend","scatter-like"],attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../scatter/marker_colorbar"),calc:t("./calc"),plot:t("./plot"),hoverPoints:t("./hover").hoverPoints,selectPoints:t("./select"),editStyle:t("./edit_style"),meta:{}},n.register(a)},{"../../components/grid":634,"../../registry":846,"../scatter/marker_colorbar":1138,"./attributes":1215,"./base_plot":1216,"./calc":1217,"./defaults":1218,"./edit_style":1219,"./hover":1221,"./plot":1223,"./select":1225}],1223:[function(t,e,r){"use strict";var n=t("regl-splom"),a=t("../../lib"),i=t("../../plots/cartesian/axis_ids");function o(t,e){var r,o,s,l,c,u=t._fullLayout,h=u._size,f=e.trace,p=e.t,d=u._splomScenes[f.uid],g=d.matrixOptions,v=g.cdata,m=u._glcanvas.data()[0].regl,y=u.dragmode;if(0!==v.length){g.lower=f.showupperhalf,g.upper=f.showlowerhalf,g.diagonal=f.diagonal.visible;var x=f._visibleDims,b=v.length,_=d.viewOpts={};for(_.ranges=new Array(b),_.domains=new Array(b),c=0;c<x.length;c++){s=x[c];var w=_.ranges[c]=new Array(4),k=_.domains[c]=new Array(4);(r=i.getFromId(t,f._diag[s][0]))&&(w[0]=r._rl[0],w[2]=r._rl[1],k[0]=r.domain[0],k[2]=r.domain[1]),(o=i.getFromId(t,f._diag[s][1]))&&(w[1]=o._rl[0],w[3]=o._rl[1],k[1]=o.domain[0],k[3]=o.domain[1])}_.viewport=[h.l,h.b,h.w+h.l,h.h+h.b],!0===d.matrix&&(d.matrix=n(m));var T=u.clickmode.indexOf("select")>-1,M=!0;if("lasso"===y||"select"===y||!!f.selectedpoints||T){var A=f._length;if(f.selectedpoints){d.selectBatch=f.selectedpoints;var S=f.selectedpoints,E={};for(s=0;s<S.length;s++)E[S[s]]=!0;var L=[];for(s=0;s<A;s++)E[s]||L.push(s);d.unselectBatch=L}var C=p.xpx=new Array(b),P=p.ypx=new Array(b);for(c=0;c<x.length;c++){if(s=x[c],r=i.getFromId(t,f._diag[s][0]))for(C[c]=new Array(A),l=0;l<A;l++)C[c][l]=r.c2p(v[c][l]);if(o=i.getFromId(t,f._diag[s][1]))for(P[c]=new Array(A),l=0;l<A;l++)P[c][l]=o.c2p(v[c][l])}if(d.selectBatch.length||d.unselectBatch.length){var O=a.extendFlat({},g,d.unselectedOptions,_),z=a.extendFlat({},g,d.selectedOptions,_);d.matrix.update(O,z),M=!1}}else p.xpx=p.ypx=null;if(M){var I=a.extendFlat({},g,_);d.matrix.update(I,null)}}}e.exports=function(t,e,r){if(r.length)for(var n=0;n<r.length;n++)o(t,r[n][0])}},{"../../lib":717,"../../plots/cartesian/axis_ids":768,"regl-splom":499}],1224:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){var r=t._fullLayout,a=e.uid,i=r._splomScenes;i||(i=r._splomScenes={});var o={dirty:!0,selectBatch:[],unselectBatch:[]},s=i[e.uid];return s||((s=i[a]=n.extendFlat({},o,{matrix:!1,selectBatch:[],unselectBatch:[]})).draw=function(){s.matrix&&s.matrix.draw&&(s.selectBatch.length||s.unselectBatch.length?s.matrix.draw(s.unselectBatch,s.selectBatch):s.matrix.draw()),s.dirty=!1},s.destroy=function(){s.matrix&&s.matrix.destroy&&s.matrix.destroy(),s.matrixOptions=null,s.selectBatch=null,s.unselectBatch=null,s=null}),s.dirty||n.extendFlat(s,o),s}},{"../../lib":717}],1225:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/subtypes"),i=t("./helpers");e.exports=function(t,e){var r=t.cd,o=r[0].trace,s=r[0].t,l=t.scene,c=l.matrixOptions.cdata,u=t.xaxis,h=t.yaxis,f=[];if(!l)return f;var p=!a.hasMarkers(o)&&!a.hasText(o);if(!0!==o.visible||p)return f;var d=i.getDimIndex(o,u),g=i.getDimIndex(o,h);if(!1===d||!1===g)return f;var v=s.xpx[d],m=s.ypx[g],y=c[d],x=c[g],b=[],_=[];if(!1!==e&&!e.degenerate)for(var w=0;w<y.length;w++)e.contains([v[w],m[w]],null,w,t)?(b.push(w),f.push({pointNumber:w,x:y[w],y:x[w]})):_.push(w);var k=l.matrixOptions;return b.length||_.length?l.selectBatch.length||l.unselectBatch.length||l.matrix.update(l.unselectedOptions,n.extendFlat({},k,l.selectedOptions,l.viewOpts)):l.matrix.update(k,null),l.selectBatch=b,l.unselectBatch=_,f}},{"../../lib":717,"../scatter/subtypes":1144,"./helpers":1220}],1226:[function(t,e,r){"use strict";var n=t("../../components/colorscale/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../mesh3d/attributes"),o=t("../../plots/attributes"),s=t("../../lib/extend").extendFlat,l={x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},z:{valType:"data_array",editType:"calc+clearAxisTypes"},u:{valType:"data_array",editType:"calc"},v:{valType:"data_array",editType:"calc"},w:{valType:"data_array",editType:"calc"},starts:{x:{valType:"data_array",editType:"calc"},y:{valType:"data_array",editType:"calc"},z:{valType:"data_array",editType:"calc"},editType:"calc"},maxdisplayed:{valType:"integer",min:0,dflt:1e3,editType:"calc"},sizeref:{valType:"number",editType:"calc",min:0,dflt:1},text:{valType:"string",dflt:"",editType:"calc"},hovertext:{valType:"string",dflt:"",editType:"calc"},hovertemplate:a({editType:"calc"},{keys:["tubex","tubey","tubez","tubeu","tubev","tubew","norm","divergence"]}),showlegend:s({},o.showlegend,{dflt:!1})};s(l,n("",{colorAttr:"u/v/w norm",showScaleDflt:!0,editTypeOverride:"calc"}));["opacity","lightposition","lighting"].forEach(function(t){l[t]=i[t]}),l.hoverinfo=s({},o.hoverinfo,{editType:"calc",flags:["x","y","z","u","v","w","norm","divergence","text","name"],dflt:"x+y+z+norm+text+name"}),l.transforms=void 0,e.exports=l},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../mesh3d/attributes":1061}],1227:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/colorscale/calc");function i(t){var e,r,a,i,s,l,c,u,h,f,p,d,g=t._x,v=t._y,m=t._z,y=t._len,x=-1/0,b=1/0,_=-1/0,w=1/0,k=-1/0,T=1/0,M="";for(y&&(c=g[0],h=v[0],p=m[0]),y>1&&(u=g[y-1],f=v[y-1],d=m[y-1]),e=0;e<y;e++)x=Math.max(x,g[e]),b=Math.min(b,g[e]),_=Math.max(_,v[e]),w=Math.min(w,v[e]),k=Math.max(k,m[e]),T=Math.min(T,m[e]),i||g[e]===c||(i=!0,M+="x"),s||v[e]===h||(s=!0,M+="y"),l||m[e]===p||(l=!0,M+="z");i||(M+="x"),s||(M+="y"),l||(M+="z");var A=o(t._x),S=o(t._y),E=o(t._z);M=(M=(M=M.replace("x",(c>u?"-":"+")+"x")).replace("y",(h>f?"-":"+")+"y")).replace("z",(p>d?"-":"+")+"z");var L=function(){y=0,A=[],S=[],E=[]};(!y||y<A.length*S.length*E.length)&&L();var C=function(t){return"x"===t?g:"y"===t?v:m},P=function(t){return"x"===t?A:"y"===t?S:E},O=function(t){return t[y-1]<t[0]?-1:1},z=C(M[1]),I=C(M[3]),D=C(M[5]),R=P(M[1]).length,F=P(M[3]).length,B=P(M[5]).length,N=!1,j=function(t,e,r){return R*(F*t+e)+r},V=O(C(M[1])),U=O(C(M[3])),q=O(C(M[5]));for(e=0;e<B-1;e++){for(r=0;r<F-1;r++){for(a=0;a<R-1;a++){var H=j(e,r,a),G=j(e,r,a+1),Y=j(e,r+1,a),W=j(e+1,r,a);if(z[H]*V<z[G]*V&&I[H]*U<I[Y]*U&&D[H]*q<D[W]*q||(N=!0),N)break}if(N)break}if(N)break}return N&&(n.warn("Encountered arbitrary coordinates! Unable to input data grid."),L()),{xMin:b,yMin:w,zMin:T,xMax:x,yMax:_,zMax:k,Xs:A,Ys:S,Zs:E,len:y,fill:M}}function o(t){return n.distinctVals(t).vals}function s(t,e){if(void 0===e&&(e=t.length),n.isTypedArray(t))return t.subarray(0,e);for(var r=[],a=0;a<e;a++)r[a]=+t[a];return r}e.exports={calc:function(t,e){e._len=Math.min(e.u.length,e.v.length,e.w.length,e.x.length,e.y.length,e.z.length),e._u=s(e.u,e._len),e._v=s(e.v,e._len),e._w=s(e.w,e._len),e._x=s(e.x,e._len),e._y=s(e.y,e._len),e._z=s(e.z,e._len);var r=i(e);e._gridFill=r.fill,e._Xs=r.Xs,e._Ys=r.Ys,e._Zs=r.Zs,e._len=r.len;var n,o,l,c=0;e.starts&&(n=s(e.starts.x||[]),o=s(e.starts.y||[]),l=s(e.starts.z||[]),c=Math.min(n.length,o.length,l.length)),e._startsX=n||[],e._startsY=o||[],e._startsZ=l||[];var u,h=0,f=1/0;for(u=0;u<e._len;u++){var p=e._u[u],d=e._v[u],g=e._w[u],v=Math.sqrt(p*p+d*d+g*g);h=Math.max(h,v),f=Math.min(f,v)}for(a(t,e,{vals:[f,h],containerStr:"",cLetter:"c"}),u=0;u<c;u++){var m=n[u];r.xMax=Math.max(r.xMax,m),r.xMin=Math.min(r.xMin,m);var y=o[u];r.yMax=Math.max(r.yMax,y),r.yMin=Math.min(r.yMin,y);var x=l[u];r.zMax=Math.max(r.zMax,x),r.zMin=Math.min(r.zMin,x)}e._slen=c,e._normMax=h,e._xbnds=[r.xMin,r.xMax],e._ybnds=[r.yMin,r.yMax],e._zbnds=[r.zMin,r.zMax]},filter:s,processGrid:i}},{"../../components/colorscale/calc":599,"../../lib":717}],1228:[function(t,e,r){"use strict";var n=t("gl-streamtube3d"),a=n.createTubeMesh,i=t("../../lib"),o=t("../../lib/gl_format_color").parseColorScale,s=t("../../components/colorscale").extractOpts,l=t("../../plots/gl3d/zip3"),c={xaxis:0,yaxis:1,zaxis:2};function u(t,e){this.scene=t,this.uid=e,this.mesh=null,this.data=null}var h=u.prototype;function f(t){var e=t.length;return e>2?t.slice(1,e-1):2===e?[(t[0]+t[1])/2]:t}function p(t){var e=t.length;return 1===e?[.5,.5]:[t[1]-t[0],t[e-1]-t[e-2]]}function d(t,e){var r=t.fullSceneLayout,a=t.dataScale,u=e._len,h={};function d(t,e){var n=r[e],o=a[c[e]];return i.simpleMap(t,function(t){return n.d2l(t)*o})}if(h.vectors=l(d(e._u,"xaxis"),d(e._v,"yaxis"),d(e._w,"zaxis"),u),!u)return{positions:[],cells:[]};var g=d(e._Xs,"xaxis"),v=d(e._Ys,"yaxis"),m=d(e._Zs,"zaxis");if(h.meshgrid=[g,v,m],h.gridFill=e._gridFill,e._slen)h.startingPositions=l(d(e._startsX,"xaxis"),d(e._startsY,"yaxis"),d(e._startsZ,"zaxis"));else{for(var y=v[0],x=f(g),b=f(m),_=new Array(x.length*b.length),w=0,k=0;k<x.length;k++)for(var T=0;T<b.length;T++)_[w++]=[x[k],y,b[T]];h.startingPositions=_}h.colormap=o(e),h.tubeSize=e.sizeref,h.maxLength=e.maxdisplayed;var M=d(e._xbnds,"xaxis"),A=d(e._ybnds,"yaxis"),S=d(e._zbnds,"zaxis"),E=p(g),L=p(v),C=p(m),P=[[M[0]-E[0],A[0]-L[0],S[0]-C[0]],[M[1]+E[1],A[1]+L[1],S[1]+C[1]]],O=n(h,P),z=s(e);O.vertexIntensityBounds=[z.min/e._normMax,z.max/e._normMax];var I=e.lightposition;return O.lightPosition=[I.x,I.y,I.z],O.ambient=e.lighting.ambient,O.diffuse=e.lighting.diffuse,O.specular=e.lighting.specular,O.roughness=e.lighting.roughness,O.fresnel=e.lighting.fresnel,O.opacity=e.opacity,e._pad=O.tubeScale*e.sizeref*2,O}h.handlePick=function(t){var e=this.scene.fullSceneLayout,r=this.scene.dataScale;function n(t,n){var a=e[n],i=r[c[n]];return a.l2c(t)/i}if(t.object===this.mesh){var a=t.data.position,i=t.data.velocity;return t.traceCoordinate=[n(a[0],"xaxis"),n(a[1],"yaxis"),n(a[2],"zaxis"),n(i[0],"xaxis"),n(i[1],"yaxis"),n(i[2],"zaxis"),t.data.intensity*this.data._normMax,t.data.divergence],t.textLabel=this.data.hovertext||this.data.text,!0}},h.update=function(t){this.data=t;var e=d(this.scene,t);this.mesh.update(e)},h.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var r=t.glplot.gl,n=d(t,e),i=a(r,n),o=new u(t,e.uid);return o.mesh=i,o.data=e,i._trace=o,t.glplot.add(i),o}},{"../../components/colorscale":603,"../../lib":717,"../../lib/gl_format_color":714,"../../plots/gl3d/zip3":816,"gl-streamtube3d":315}],1229:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/colorscale/defaults"),i=t("./attributes");e.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}var l=s("u"),c=s("v"),u=s("w"),h=s("x"),f=s("y"),p=s("z");l&&l.length&&c&&c.length&&u&&u.length&&h&&h.length&&f&&f.length&&p&&p.length?(s("starts.x"),s("starts.y"),s("starts.z"),s("maxdisplayed"),s("sizeref"),s("lighting.ambient"),s("lighting.diffuse"),s("lighting.specular"),s("lighting.roughness"),s("lighting.fresnel"),s("lightposition.x"),s("lightposition.y"),s("lightposition.z"),a(t,e,o,s,{prefix:"",cLetter:"c"}),s("text"),s("hovertext"),s("hovertemplate"),e._length=null):e.visible=!1}},{"../../components/colorscale/defaults":601,"../../lib":717,"./attributes":1226}],1230:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"streamtube",basePlotModule:t("../../plots/gl3d"),categories:["gl3d","showLegend"],attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:{min:"cmin",max:"cmax"},calc:t("./calc").calc,plot:t("./convert"),eventData:function(t,e){return t.tubex=t.x,t.tubey=t.y,t.tubez=t.z,t.tubeu=e.traceCoordinate[3],t.tubev=e.traceCoordinate[4],t.tubew=e.traceCoordinate[5],t.norm=e.traceCoordinate[6],t.divergence=e.traceCoordinate[7],delete t.x,delete t.y,delete t.z,t},meta:{}}},{"../../plots/gl3d":805,"./attributes":1226,"./calc":1227,"./convert":1228,"./defaults":1229}],1231:[function(t,e,r){"use strict";var n=t("../../plots/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../../plots/template_attributes").texttemplateAttrs,o=t("../../components/colorscale/attributes"),s=t("../../plots/domain").attributes,l=t("../pie/attributes"),c=t("./constants"),u=t("../../lib/extend").extendFlat;e.exports={labels:{valType:"data_array",editType:"calc"},parents:{valType:"data_array",editType:"calc"},values:{valType:"data_array",editType:"calc"},branchvalues:{valType:"enumerated",values:["remainder","total"],dflt:"remainder",editType:"calc"},count:{valType:"flaglist",flags:["branches","leaves"],dflt:"leaves",editType:"calc"},level:{valType:"any",editType:"plot",anim:!0},maxdepth:{valType:"integer",editType:"plot",dflt:-1},marker:u({colors:{valType:"data_array",editType:"calc"},line:{color:u({},l.marker.line.color,{dflt:null}),width:u({},l.marker.line.width,{dflt:1}),editType:"calc"},editType:"calc"},o("marker",{colorAttr:"colors",anim:!1})),leaf:{opacity:{valType:"number",editType:"style",min:0,max:1},editType:"plot"},text:l.text,textinfo:{valType:"flaglist",flags:["label","text","value","current path","percent root","percent entry","percent parent"],extras:["none"],editType:"plot"},texttemplate:i({editType:"plot"},{keys:c.eventDataKeys.concat(["label","value"])}),hovertext:l.hovertext,hoverinfo:u({},n.hoverinfo,{flags:["label","text","value","name","current path","percent root","percent entry","percent parent"],dflt:"label+text+value+name"}),hovertemplate:a({},{keys:c.eventDataKeys}),textfont:l.textfont,insidetextorientation:l.insidetextorientation,insidetextfont:l.insidetextfont,outsidetextfont:u({},l.outsidetextfont,{}),domain:s({name:"sunburst",trace:!0,editType:"calc"})}},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/domain":790,"../../plots/template_attributes":841,"../pie/attributes":1094,"./constants":1234}],1232:[function(t,e,r){"use strict";var n=t("../../plots/plots");r.name="sunburst",r.plot=function(t,e,a,i){n.plotBasePlot(r.name,t,e,a,i)},r.clean=function(t,e,a,i){n.cleanBasePlot(r.name,t,e,a,i)}},{"../../plots/plots":826}],1233:[function(t,e,r){"use strict";var n=t("d3-hierarchy"),a=t("fast-isnumeric"),i=t("../../lib"),o=t("../../components/colorscale").makeColorScaleFuncFromTrace,s=t("../pie/calc").makePullColorFn,l=t("../pie/calc").generateExtendedColors,c=t("../../components/colorscale").calc,u=t("../../constants/numerical").ALMOST_EQUAL,h={},f={};r.calc=function(t,e){var r,l,h,f,p,d,g=t._fullLayout,v=e.ids,m=i.isArrayOrTypedArray(v),y=e.labels,x=e.parents,b=e.values,_=i.isArrayOrTypedArray(b),w=[],k={},T={},M=function(t){return t||"number"==typeof t},A=function(t){return!_||a(b[t])&&b[t]>=0};m?(r=Math.min(v.length,x.length),l=function(t){return M(v[t])&&A(t)},h=function(t){return String(v[t])}):(r=Math.min(y.length,x.length),l=function(t){return M(y[t])&&A(t)},h=function(t){return String(y[t])}),_&&(r=Math.min(r,b.length));for(var S=0;S<r;S++)if(l(S)){var E=h(S),L=M(x[S])?String(x[S]):"",C={i:S,id:E,pid:L,label:M(y[S])?String(y[S]):""};_&&(C.v=+b[S]),w.push(C),p=E,k[f=L]?k[f].push(p):k[f]=[p],T[p]=1}if(k[""]){if(k[""].length>1){for(var P=i.randstr(),O=0;O<w.length;O++)""===w[O].pid&&(w[O].pid=P);w.unshift({hasMultipleRoots:!0,id:P,pid:"",label:""})}}else{var z,I=[];for(z in k)T[z]||I.push(z);if(1!==I.length)return i.warn("Multiple implied roots, cannot build "+e.type+" hierarchy.");z=I[0],w.unshift({hasImpliedRoot:!0,id:z,pid:"",label:z})}try{d=n.stratify().id(function(t){return t.id}).parentId(function(t){return t.pid})(w)}catch(t){return i.warn("Failed to build "+e.type+" hierarchy. Error: "+t.message)}var D=n.hierarchy(d),R=!1;if(_)switch(e.branchvalues){case"remainder":D.sum(function(t){return t.data.v});break;case"total":D.each(function(t){var e=t.data.data,r=e.v;if(t.children){var n=t.children.reduce(function(t,e){return t+e.data.data.v},0);if((e.hasImpliedRoot||e.hasMultipleRoots)&&(r=n),r<n*u)return R=!0,i.warn(["Total value for node",t.data.data.id,"is smaller than the sum of its children.","\nparent value =",r,"\nchildren sum =",n].join(" "))}t.value=r})}else!function t(e,r,n){var a=0;var i=e.children;if(i){for(var o=i.length,s=0;s<o;s++)a+=t(i[s],r,n);n.branches&&a++}else n.leaves&&a++;e.value=e.data.data.value=a;r._values||(r._values=[]);r._values[e.data.data.i]=a;return a}(D,e,{branches:-1!==e.count.indexOf("branches"),leaves:-1!==e.count.indexOf("leaves")});if(!R){var F,B;D.sort(function(t,e){return e.value-t.value});var N=e.marker.colors||[],j=!!N.length;return e._hasColorscale?(j||(N=_?e.values:e._values),c(t,e,{vals:N,containerStr:"marker",cLetter:"c"}),B=o(e.marker)):F=s(g["_"+e.type+"colormap"]),D.each(function(t){var r=t.data.data;r.color=e._hasColorscale?B(N[r.i]):F(N[r.i],r.id)}),w[0].hierarchy=D,w}},r._runCrossTraceCalc=function(t,e){var r=e._fullLayout,n=e.calcdata,a=r[t+"colorway"],i=r["_"+t+"colormap"];r["extend"+t+"colors"]&&(a=l(a,"treemap"===t?f:h));var o=0;function s(t){var e=t.data.data,r=e.id;!1===e.color&&(i[r]?e.color=i[r]:t.parent?t.parent.parent?e.color=t.parent.data.data.color:(i[r]=e.color=a[o%a.length],o++):e.color="rgba(0,0,0,0)")}for(var c=0;c<n.length;c++){var u=n[c][0];u.trace.type===t&&u.hierarchy&&u.hierarchy.each(s)}},r.crossTraceCalc=function(t){return r._runCrossTraceCalc("sunburst",t)}},{"../../components/colorscale":603,"../../constants/numerical":693,"../../lib":717,"../pie/calc":1096,"d3-hierarchy":159,"fast-isnumeric":228}],1234:[function(t,e,r){"use strict";e.exports={CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:"linear",eventDataKeys:["currentPath","root","entry","percentRoot","percentEntry","percentParent"]}},{}],1235:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("../../plots/domain").defaults,o=t("../bar/defaults").handleText,s=t("../../components/colorscale"),l=s.hasColorscale,c=s.handleDefaults;e.exports=function(t,e,r,s){function u(r,i){return n.coerce(t,e,a,r,i)}var h=u("labels"),f=u("parents");if(h&&h.length&&f&&f.length){var p=u("values");p&&p.length?u("branchvalues"):u("count"),u("level"),u("maxdepth"),u("marker.line.width")&&u("marker.line.color",s.paper_bgcolor),u("marker.colors");var d=e._hasColorscale=l(t,"marker","colors")||(t.marker||{}).coloraxis;d&&c(t,e,s,u,{prefix:"marker.",cLetter:"c"}),u("leaf.opacity",d?1:.7);var g=u("text");u("texttemplate"),e.texttemplate||u("textinfo",Array.isArray(g)?"text+label":"label"),u("hovertext"),u("hovertemplate");o(t,e,s,u,"auto",{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),u("insidetextorientation"),i(e,s,u),e._length=null}else e.visible=!1}},{"../../components/colorscale":603,"../../lib":717,"../../plots/domain":790,"../bar/defaults":860,"./attributes":1231}],1236:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../components/fx/helpers").appendArrayPointValue,o=t("../../components/fx"),s=t("../../lib"),l=t("../../lib/events"),c=t("./helpers"),u=t("../pie/helpers").formatPieValue;function h(t,e,r){for(var n=t.data.data,a={curveNumber:e.index,pointNumber:n.i,data:e._input,fullData:e},o=0;o<r.length;o++){var s=r[o];s in t&&(a[s]=t[s])}return"parentString"in t&&!c.isHierarchyRoot(t)&&(a.parent=t.parentString),i(a,e,n.i),a}e.exports=function(t,e,r,i,f){var p=i[0],d=p.trace,g=p.hierarchy,v="sunburst"===d.type,m="treemap"===d.type;"_hasHoverLabel"in d||(d._hasHoverLabel=!1),"_hasHoverEvent"in d||(d._hasHoverEvent=!1);t.on("mouseover",function(a){var i=r._fullLayout;if(!r._dragging&&!1!==i.hovermode){var l=r._fullData[d.index],y=a.data.data,x=y.i,b=c.isHierarchyRoot(a),_=c.getParent(g,a),w=c.getValue(a),k=function(t){return s.castOption(l,x,t)},T=k("hovertemplate"),M=o.castHoverinfo(l,i,x),A=i.separators;if(T||M&&"none"!==M&&"skip"!==M){var S,E;v&&(S=p.cx+a.pxmid[0]*(1-a.rInscribed),E=p.cy+a.pxmid[1]*(1-a.rInscribed)),m&&(S=a._hoverX,E=a._hoverY);var L,C={},P=[],O=[],z=function(t){return-1!==P.indexOf(t)};M&&(P="all"===M?l._module.attributes.hoverinfo.flags:M.split("+")),C.label=y.label,z("label")&&C.label&&O.push(C.label),y.hasOwnProperty("v")&&(C.value=y.v,C.valueLabel=u(C.value,A),z("value")&&O.push(C.valueLabel)),C.currentPath=a.currentPath=c.getPath(a.data),z("current path")&&!b&&O.push(C.currentPath);var I=[],D=function(){-1===I.indexOf(L)&&(O.push(L),I.push(L))};C.percentParent=a.percentParent=w/c.getValue(_),C.parent=a.parentString=c.getPtLabel(_),z("percent parent")&&(L=c.formatPercent(C.percentParent,A)+" of "+C.parent,D()),C.percentEntry=a.percentEntry=w/c.getValue(e),C.entry=a.entry=c.getPtLabel(e),!z("percent entry")||b||a.onPathbar||(L=c.formatPercent(C.percentEntry,A)+" of "+C.entry,D()),C.percentRoot=a.percentRoot=w/c.getValue(g),C.root=a.root=c.getPtLabel(g),z("percent root")&&!b&&(L=c.formatPercent(C.percentRoot,A)+" of "+C.root,D()),C.text=k("hovertext")||k("text"),z("text")&&(L=C.text,s.isValidTextValue(L)&&O.push(L));var R={trace:l,y:E,text:O.join("<br>"),name:T||z("name")?l.name:void 0,color:k("hoverlabel.bgcolor")||y.color,borderColor:k("hoverlabel.bordercolor"),fontFamily:k("hoverlabel.font.family"),fontSize:k("hoverlabel.font.size"),fontColor:k("hoverlabel.font.color"),nameLength:k("hoverlabel.namelength"),textAlign:k("hoverlabel.align"),hovertemplate:T,hovertemplateLabels:C,eventData:[h(a,l,f.eventDataKeys)]};v&&(R.x0=S-a.rInscribed*a.rpx1,R.x1=S+a.rInscribed*a.rpx1,R.idealAlign=a.pxmid[0]<0?"left":"right"),m&&(R.x=S,R.idealAlign=S<0?"left":"right"),o.loneHover(R,{container:i._hoverlayer.node(),outerContainer:i._paper.node(),gd:r}),d._hasHoverLabel=!0}if(m){var F=t.select("path.surface");f.styleOne(F,a,l,{hovered:!0})}d._hasHoverEvent=!0,r.emit("plotly_hover",{points:[h(a,l,f.eventDataKeys)],event:n.event})}}),t.on("mouseout",function(e){var a=r._fullLayout,i=r._fullData[d.index],s=n.select(this).datum();if(d._hasHoverEvent&&(e.originalEvent=n.event,r.emit("plotly_unhover",{points:[h(s,i,f.eventDataKeys)],event:n.event}),d._hasHoverEvent=!1),d._hasHoverLabel&&(o.loneUnhover(a._hoverlayer.node()),d._hasHoverLabel=!1),m){var l=t.select("path.surface");f.styleOne(l,s,i,{hovered:!1})}}),t.on("click",function(t){var e=r._fullLayout,i=r._fullData[d.index],s=v&&(c.isHierarchyRoot(t)||c.isLeaf(t)),u=c.getPtId(t),p=c.isEntry(t)?c.findEntryWithChild(g,u):c.findEntryWithLevel(g,u),m=c.getPtId(p),y={points:[h(t,i,f.eventDataKeys)],event:n.event};s||(y.nextLevel=m);var x=l.triggerHandler(r,"plotly_"+d.type+"click",y);if(!1!==x&&e.hovermode&&(r._hoverdata=[h(t,i,f.eventDataKeys)],o.click(r,n.event)),!s&&!1!==x&&!r._dragging&&!r._transitioning){a.call("_storeDirectGUIEdit",i,e._tracePreGUI[i.uid],{level:i.level});var b={data:[{level:m}],traces:[d.index]},_={frame:{redraw:!1,duration:f.transitionTime},transition:{duration:f.transitionTime,easing:f.transitionEasing},mode:"immediate",fromcurrent:!0};o.loneUnhover(e._hoverlayer.node()),a.call("animate",r,b,_)}})}},{"../../components/fx":630,"../../components/fx/helpers":626,"../../lib":717,"../../lib/events":707,"../../registry":846,"../pie/helpers":1099,"./helpers":1237,d3:165}],1237:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/color"),i=t("../../lib/setcursor"),o=t("../pie/helpers");function s(t){return t.data.data.pid}r.findEntryWithLevel=function(t,e){var n;return e&&t.eachAfter(function(t){if(r.getPtId(t)===e)return n=t.copy()}),n||t},r.findEntryWithChild=function(t,e){var n;return t.eachAfter(function(t){for(var a=t.children||[],i=0;i<a.length;i++){var o=a[i];if(r.getPtId(o)===e)return n=t.copy()}}),n||t},r.isEntry=function(t){return!t.parent},r.isLeaf=function(t){return!t.children},r.getPtId=function(t){return t.data.data.id},r.getPtLabel=function(t){return t.data.data.label},r.getValue=function(t){return t.value},r.isHierarchyRoot=function(t){return""===s(t)},r.setSliceCursor=function(t,e,n){var a=n.isTransitioning;if(!a){var o=t.datum();a=n.hideOnRoot&&r.isHierarchyRoot(o)||n.hideOnLeaves&&r.isLeaf(o)}i(t,a?null:"pointer")},r.getInsideTextFontKey=function(t,e,r,a,i){var o=(i||{}).onPathbar?"pathbar.textfont":"insidetextfont",s=r.data.data.i;return n.castOption(e,s,o+"."+t)||n.castOption(e,s,"textfont."+t)||a.size},r.getOutsideTextFontKey=function(t,e,r,a){var i=r.data.data.i;return n.castOption(e,i,"outsidetextfont."+t)||n.castOption(e,i,"textfont."+t)||a.size},r.isOutsideText=function(t,e){return!t._hasColorscale&&r.isHierarchyRoot(e)},r.determineTextFont=function(t,e,i,o){return r.isOutsideText(t,e)?function(t,e,n){return{color:r.getOutsideTextFontKey("color",t,e,n),family:r.getOutsideTextFontKey("family",t,e,n),size:r.getOutsideTextFontKey("size",t,e,n)}}(t,e,i):function(t,e,i,o){var s=(o||{}).onPathbar,l=e.data.data,c=l.i,u=n.castOption(t,c,(s?"pathbar.textfont":"insidetextfont")+".color");return!u&&t._input.textfont&&(u=n.castOption(t._input,c,"textfont.color")),{color:u||a.contrast(l.color),family:r.getInsideTextFontKey("family",t,e,i,o),size:r.getInsideTextFontKey("size",t,e,i,o)}}(t,e,i,o)},r.hasTransition=function(t){return!!(t&&t.duration>0)},r.getMaxDepth=function(t){return t.maxdepth>=0?t.maxdepth:1/0},r.isHeader=function(t,e){return!(r.isLeaf(t)||t.depth===e._maxDepth-1)},r.getParent=function(t,e){return r.findEntryWithLevel(t,s(e))},r.listPath=function(t,e){var n=t.parent;if(!n)return[];var a=e?[n.data[e]]:[n];return r.listPath(n,e).concat(a)},r.getPath=function(t){return r.listPath(t,"label").join("/")+"/"},r.formatValue=o.formatPieValue,r.formatPercent=function(t,e){var r=n.formatPercent(t,0);return"0%"===r&&(r=o.formatPiePercent(t,e)),r}},{"../../components/color":591,"../../lib":717,"../../lib/setcursor":737,"../pie/helpers":1099}],1238:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"sunburst",basePlotModule:t("./base_plot"),categories:[],animatable:!0,attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults"),supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc").calc,crossTraceCalc:t("./calc").crossTraceCalc,plot:t("./plot").plot,style:t("./style").style,colorbar:t("../scatter/marker_colorbar"),meta:{}}},{"../scatter/marker_colorbar":1138,"./attributes":1231,"./base_plot":1232,"./calc":1233,"./defaults":1235,"./layout_attributes":1239,"./layout_defaults":1240,"./plot":1241,"./style":1242}],1239:[function(t,e,r){"use strict";e.exports={sunburstcolorway:{valType:"colorlist",editType:"calc"},extendsunburstcolors:{valType:"boolean",dflt:!0,editType:"calc"}}},{}],1240:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e){function r(r,i){return n.coerce(t,e,a,r,i)}r("sunburstcolorway",e.colorway),r("extendsunburstcolors")}},{"../../lib":717,"./layout_attributes":1239}],1241:[function(t,e,r){"use strict";var n=t("d3"),a=t("d3-hierarchy"),i=t("../../components/drawing"),o=t("../../lib"),s=t("../../lib/svg_text_utils"),l=t("../bar/uniform_text"),c=l.recordMinTextSize,u=l.clearMinTextSize,h=t("../pie/plot"),f=h.computeTransform,p=h.transformInsideText,d=t("./style").styleOne,g=t("../bar/style").resizeText,v=t("./fx"),m=t("./constants"),y=t("./helpers");function x(t,e,l,u){var h=t._fullLayout,g=!h.uniformtext.mode&&y.hasTransition(u),x=n.select(l).selectAll("g.slice"),_=e[0],w=_.trace,k=_.hierarchy,T=y.findEntryWithLevel(k,w.level),M=y.getMaxDepth(w),A=h._size,S=w.domain,E=A.w*(S.x[1]-S.x[0]),L=A.h*(S.y[1]-S.y[0]),C=.5*Math.min(E,L),P=_.cx=A.l+A.w*(S.x[1]+S.x[0])/2,O=_.cy=A.t+A.h*(1-S.y[0])-L/2;if(!T)return x.remove();var z=null,I={};g&&x.each(function(t){I[y.getPtId(t)]={rpx0:t.rpx0,rpx1:t.rpx1,x0:t.x0,x1:t.x1,transform:t.transform},!z&&y.isEntry(t)&&(z=t)});var D=function(t){return a.partition().size([2*Math.PI,t.height+1])(t)}(T).descendants(),R=T.height+1,F=0,B=M;_.hasMultipleRoots&&y.isHierarchyRoot(T)&&(D=D.slice(1),R-=1,F=1,B+=1),D=D.filter(function(t){return t.y1<=B});var N=Math.min(R,M),j=function(t){return(t-F)/N*C},V=function(t,e){return[t*Math.cos(e),-t*Math.sin(e)]},U=function(t){return o.pathAnnulus(t.rpx0,t.rpx1,t.x0,t.x1,P,O)},q=function(t){return P+b(t)[0]*(t.transform.rCenter||0)+(t.transform.x||0)},H=function(t){return O+b(t)[1]*(t.transform.rCenter||0)+(t.transform.y||0)};(x=x.data(D,y.getPtId)).enter().append("g").classed("slice",!0),g?x.exit().transition().each(function(){var t=n.select(this);t.select("path.surface").transition().attrTween("d",function(t){var e=function(t){var e,r=y.getPtId(t),a=I[r],i=I[y.getPtId(T)];if(i){var o=t.x1>i.x1?2*Math.PI:0;e=t.rpx1<i.rpx1?{rpx0:0,rpx1:0}:{x0:o,x1:o}}else{var s,l=y.getPtId(t.parent);x.each(function(t){if(y.getPtId(t)===l)return s=t});var c,u=s.children;u.forEach(function(t,e){if(y.getPtId(t)===r)return c=e});var h=u.length,f=n.interpolate(s.x0,s.x1);e={rpx0:C,rpx1:C,x0:f(c/h),x1:f((c+1)/h)}}return n.interpolate(a,e)}(t);return function(t){return U(e(t))}}),t.select("g.slicetext").attr("opacity",0)}).remove():x.exit().remove(),x.order();var G=null;if(g&&z){var Y=y.getPtId(z);x.each(function(t){null===G&&y.getPtId(t)===Y&&(G=t.x1)})}var W=x;function X(t){var e=t.parent,r=I[y.getPtId(e)],a={};if(r){var i=e.children,o=i.indexOf(t),s=i.length,l=n.interpolate(r.x0,r.x1);a.x0=l(o/s),a.x1=l(o/s)}else a.x0=a.x1=0;return a}g&&(W=W.transition().each("end",function(){var e=n.select(this);y.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!0,isTransitioning:!1})})),W.each(function(a){var l=n.select(this),u=o.ensureSingle(l,"path","surface",function(t){t.style("pointer-events","all")});a.rpx0=j(a.y0),a.rpx1=j(a.y1),a.xmid=(a.x0+a.x1)/2,a.pxmid=V(a.rpx1,a.xmid),a.midangle=-(a.xmid-Math.PI/2),a.startangle=-(a.x0-Math.PI/2),a.stopangle=-(a.x1-Math.PI/2),a.halfangle=.5*Math.min(o.angleDelta(a.x0,a.x1)||Math.PI,Math.PI),a.ring=1-a.rpx0/a.rpx1,a.rInscribed=function(t){return 0===t.rpx0&&o.isFullCircle([t.x0,t.x1])?1:Math.max(0,Math.min(1/(1+1/Math.sin(t.halfangle)),t.ring/2))}(a),g?u.transition().attrTween("d",function(t){var e=function(t){var e,r=I[y.getPtId(t)],a={x0:t.x0,x1:t.x1,rpx0:t.rpx0,rpx1:t.rpx1};if(r)e=r;else if(z)if(t.parent)if(G){var i=t.x1>G?2*Math.PI:0;e={x0:i,x1:i}}else e={rpx0:C,rpx1:C},o.extendFlat(e,X(t));else e={rpx0:0,rpx1:0};else e={x0:0,x1:0};return n.interpolate(e,a)}(t);return function(t){return U(e(t))}}):u.attr("d",U),l.call(v,T,t,e,{eventDataKeys:m.eventDataKeys,transitionTime:m.CLICK_TRANSITION_TIME,transitionEasing:m.CLICK_TRANSITION_EASING}).call(y.setSliceCursor,t,{hideOnRoot:!0,hideOnLeaves:!0,isTransitioning:t._transitioning}),u.call(d,a,w);var x=o.ensureSingle(l,"g","slicetext"),b=o.ensureSingle(x,"text","",function(t){t.attr("data-notex",1)}),k=o.ensureUniformFontSize(t,y.determineTextFont(w,a,h.font));b.text(r.formatSliceLabel(a,T,w,e,h)).classed("slicetext",!0).attr("text-anchor","middle").call(i.font,k).call(s.convertToTspans,t);var M=i.bBox(b.node());a.transform=p(M,a,_),a.transform.targetX=q(a),a.transform.targetY=H(a);var A=function(t,e){var r=t.transform;return f(r,e),r.fontSize=k.size,c(w.type,r,h),o.getTextTransform(r)};g?b.transition().attrTween("transform",function(t){var e=function(t){var e,r=I[y.getPtId(t)],a=t.transform;if(r)e=r;else if(e={rpx1:t.rpx1,transform:{textPosAngle:a.textPosAngle,scale:0,rotate:a.rotate,rCenter:a.rCenter,x:a.x,y:a.y}},z)if(t.parent)if(G){var i=t.x1>G?2*Math.PI:0;e.x0=e.x1=i}else o.extendFlat(e,X(t));else e.x0=e.x1=0;else e.x0=e.x1=0;var s=n.interpolate(e.transform.textPosAngle,t.transform.textPosAngle),l=n.interpolate(e.rpx1,t.rpx1),u=n.interpolate(e.x0,t.x0),f=n.interpolate(e.x1,t.x1),p=n.interpolate(e.transform.scale,a.scale),d=n.interpolate(e.transform.rotate,a.rotate),g=0===a.rCenter?3:0===e.transform.rCenter?1/3:1,v=n.interpolate(e.transform.rCenter,a.rCenter);return function(t){var e=l(t),r=u(t),n=f(t),i=function(t){return v(Math.pow(t,g))}(t),o=V(e,(r+n)/2),m=s(t),y={pxmid:o,rpx1:e,transform:{textPosAngle:m,rCenter:i,x:a.x,y:a.y}};return c(w.type,a,h),{transform:{targetX:q(y),targetY:H(y),scale:p(t),rotate:d(t),rCenter:i}}}}(t);return function(t){return A(e(t),M)}}):b.attr("transform",A(a,M))})}function b(t){return e=t.rpx1,r=t.transform.textPosAngle,[e*Math.sin(r),-e*Math.cos(r)];var e,r}r.plot=function(t,e,r,a){var i,o,s=t._fullLayout,l=s._sunburstlayer,c=!r,h=!s.uniformtext.mode&&y.hasTransition(r);(u("sunburst",s),(i=l.selectAll("g.trace.sunburst").data(e,function(t){return t[0].trace.uid})).enter().append("g").classed("trace",!0).classed("sunburst",!0).attr("stroke-linejoin","round"),i.order(),h)?(a&&(o=a()),n.transition().duration(r.duration).ease(r.easing).each("end",function(){o&&o()}).each("interrupt",function(){o&&o()}).each(function(){l.selectAll("g.trace").each(function(e){x(t,e,this,r)})})):(i.each(function(e){x(t,e,this,r)}),s.uniformtext.mode&&g(t,s._sunburstlayer.selectAll(".trace"),"sunburst"));c&&i.exit().remove()},r.formatSliceLabel=function(t,e,r,n,a){var i=r.texttemplate,s=r.textinfo;if(!(i||s&&"none"!==s))return"";var l=a.separators,c=n[0],u=t.data.data,h=c.hierarchy,f=y.isHierarchyRoot(t),p=y.getParent(h,t),d=y.getValue(t);if(!i){var g,v=s.split("+"),m=function(t){return-1!==v.indexOf(t)},x=[];if(m("label")&&u.label&&x.push(u.label),u.hasOwnProperty("v")&&m("value")&&x.push(y.formatValue(u.v,l)),!f){m("current path")&&x.push(y.getPath(t.data));var b=0;m("percent parent")&&b++,m("percent entry")&&b++,m("percent root")&&b++;var _=b>1;if(b){var w,k=function(t){g=y.formatPercent(w,l),_&&(g+=" of "+t),x.push(g)};m("percent parent")&&!f&&(w=d/y.getValue(p),k("parent")),m("percent entry")&&(w=d/y.getValue(e),k("entry")),m("percent root")&&(w=d/y.getValue(h),k("root"))}}return m("text")&&(g=o.castOption(r,u.i,"text"),o.isValidTextValue(g)&&x.push(g)),x.join("<br>")}var T=o.castOption(r,u.i,"texttemplate");if(!T)return"";var M={};u.label&&(M.label=u.label),u.hasOwnProperty("v")&&(M.value=u.v,M.valueLabel=y.formatValue(u.v,l)),M.currentPath=y.getPath(t.data),f||(M.percentParent=d/y.getValue(p),M.percentParentLabel=y.formatPercent(M.percentParent,l),M.parent=y.getPtLabel(p)),M.percentEntry=d/y.getValue(e),M.percentEntryLabel=y.formatPercent(M.percentEntry,l),M.entry=y.getPtLabel(e),M.percentRoot=d/y.getValue(h),M.percentRootLabel=y.formatPercent(M.percentRoot,l),M.root=y.getPtLabel(h),u.hasOwnProperty("color")&&(M.color=u.color);var A=o.castOption(r,u.i,"text");return(o.isValidTextValue(A)||""===A)&&(M.text=A),M.customdata=o.castOption(r,u.i,"customdata"),o.texttemplateString(T,M,a._d3locale,M,r._meta||{})}},{"../../components/drawing":612,"../../lib":717,"../../lib/svg_text_utils":741,"../bar/style":870,"../bar/uniform_text":872,"../pie/plot":1103,"./constants":1234,"./fx":1236,"./helpers":1237,"./style":1242,d3:165,"d3-hierarchy":159}],1242:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/color"),i=t("../../lib"),o=t("../bar/uniform_text").resizeText;function s(t,e,r){var n=e.data.data,o=!e.children,s=n.i,l=i.castOption(r,s,"marker.line.color")||a.defaultLine,c=i.castOption(r,s,"marker.line.width")||0;t.style("stroke-width",c).call(a.fill,n.color).call(a.stroke,l).style("opacity",o?r.leaf.opacity:null)}e.exports={style:function(t){var e=t._fullLayout._sunburstlayer.selectAll(".trace");o(t,e,"sunburst"),e.each(function(t){var e=n.select(this),r=t[0].trace;e.style("opacity",r.opacity),e.selectAll("path.surface").each(function(t){n.select(this).call(s,t,r)})})},styleOne:s}},{"../../components/color":591,"../../lib":717,"../bar/uniform_text":872,d3:165}],1243:[function(t,e,r){"use strict";var n=t("../../components/color"),a=t("../../components/colorscale/attributes"),i=t("../../plots/template_attributes").hovertemplateAttrs,o=t("../../plots/attributes"),s=t("../../lib/extend").extendFlat,l=t("../../plot_api/edit_types").overrideAll;function c(t){return{show:{valType:"boolean",dflt:!1},start:{valType:"number",dflt:null,editType:"plot"},end:{valType:"number",dflt:null,editType:"plot"},size:{valType:"number",dflt:null,min:0,editType:"plot"},project:{x:{valType:"boolean",dflt:!1},y:{valType:"boolean",dflt:!1},z:{valType:"boolean",dflt:!1}},color:{valType:"color",dflt:n.defaultLine},usecolormap:{valType:"boolean",dflt:!1},width:{valType:"number",min:1,max:16,dflt:2},highlight:{valType:"boolean",dflt:!0},highlightcolor:{valType:"color",dflt:n.defaultLine},highlightwidth:{valType:"number",min:1,max:16,dflt:2}}}var u=e.exports=l(s({z:{valType:"data_array"},x:{valType:"data_array"},y:{valType:"data_array"},text:{valType:"string",dflt:"",arrayOk:!0},hovertext:{valType:"string",dflt:"",arrayOk:!0},hovertemplate:i(),connectgaps:{valType:"boolean",dflt:!1,editType:"calc"},surfacecolor:{valType:"data_array"}},a("",{colorAttr:"z or surfacecolor",showScaleDflt:!0,autoColorDflt:!1,editTypeOverride:"calc"}),{contours:{x:c(),y:c(),z:c()},hidesurface:{valType:"boolean",dflt:!1},lightposition:{x:{valType:"number",min:-1e5,max:1e5,dflt:10},y:{valType:"number",min:-1e5,max:1e5,dflt:1e4},z:{valType:"number",min:-1e5,max:1e5,dflt:0}},lighting:{ambient:{valType:"number",min:0,max:1,dflt:.8},diffuse:{valType:"number",min:0,max:1,dflt:.8},specular:{valType:"number",min:0,max:2,dflt:.05},roughness:{valType:"number",min:0,max:1,dflt:.5},fresnel:{valType:"number",min:0,max:5,dflt:.2}},opacity:{valType:"number",min:0,max:1,dflt:1},opacityscale:{valType:"any",editType:"calc"},_deprecated:{zauto:s({},a.zauto,{}),zmin:s({},a.zmin,{}),zmax:s({},a.zmax,{})},hoverinfo:s({},o.hoverinfo),showlegend:s({},o.showlegend,{dflt:!1})}),"calc","nested");u.x.editType=u.y.editType=u.z.editType="calc+clearAxisTypes",u.transforms=void 0},{"../../components/color":591,"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/attributes":762,"../../plots/template_attributes":841}],1244:[function(t,e,r){"use strict";var n=t("../../components/colorscale/calc");e.exports=function(t,e){e.surfacecolor?n(t,e,{vals:e.surfacecolor,containerStr:"",cLetter:"c"}):n(t,e,{vals:e.z,containerStr:"",cLetter:"c"})}},{"../../components/colorscale/calc":599}],1245:[function(t,e,r){"use strict";var n=t("gl-surface3d"),a=t("ndarray"),i=t("ndarray-homography"),o=t("ndarray-fill"),s=t("../../lib").isArrayOrTypedArray,l=t("../../lib/gl_format_color").parseColorScale,c=t("../../lib/str2rgbarray"),u=t("../../components/colorscale").extractOpts,h=t("../heatmap/interp2d"),f=t("../heatmap/find_empties");function p(t,e,r){this.scene=t,this.uid=r,this.surface=e,this.data=null,this.showContour=[!1,!1,!1],this.contourStart=[null,null,null],this.contourEnd=[null,null,null],this.contourSize=[0,0,0],this.minValues=[1/0,1/0,1/0],this.maxValues=[-1/0,-1/0,-1/0],this.dataScaleX=1,this.dataScaleY=1,this.refineData=!0,this.objectOffset=[0,0,0]}var d=p.prototype;d.getXat=function(t,e,r,n){var a=s(this.data.x)?s(this.data.x[0])?this.data.x[e][t]:this.data.x[t]:t;return void 0===r?a:n.d2l(a,0,r)},d.getYat=function(t,e,r,n){var a=s(this.data.y)?s(this.data.y[0])?this.data.y[e][t]:this.data.y[e]:e;return void 0===r?a:n.d2l(a,0,r)},d.getZat=function(t,e,r,n){var a=this.data.z[e][t];return null===a&&this.data.connectgaps&&this.data._interpolatedZ&&(a=this.data._interpolatedZ[e][t]),void 0===r?a:n.d2l(a,0,r)},d.handlePick=function(t){if(t.object===this.surface){var e=(t.data.index[0]-1)/this.dataScaleX-1,r=(t.data.index[1]-1)/this.dataScaleY-1,n=Math.max(Math.min(Math.round(e),this.data.z[0].length-1),0),a=Math.max(Math.min(Math.round(r),this.data._ylength-1),0);t.index=[n,a],t.traceCoordinate=[this.getXat(n,a),this.getYat(n,a),this.getZat(n,a)],t.dataCoordinate=[this.getXat(n,a,this.data.xcalendar,this.scene.fullSceneLayout.xaxis),this.getYat(n,a,this.data.ycalendar,this.scene.fullSceneLayout.yaxis),this.getZat(n,a,this.data.zcalendar,this.scene.fullSceneLayout.zaxis)];for(var i=0;i<3;i++){var o=t.dataCoordinate[i];null!=o&&(t.dataCoordinate[i]*=this.scene.dataScale[i])}var s=this.data.hovertext||this.data.text;return Array.isArray(s)&&s[a]&&void 0!==s[a][n]?t.textLabel=s[a][n]:t.textLabel=s||"",t.data.dataCoordinate=t.dataCoordinate.slice(),this.surface.highlight(t.data),this.scene.glplot.spikes.position=t.dataCoordinate,!0}};var g=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999];function v(t,e){if(t<e)return 0;for(var r=0;0===Math.floor(t%e);)t/=e,r++;return r}function m(t){for(var e=[],r=0;r<g.length;r++){var n=g[r];e.push(v(t,n))}return e}function y(t){for(var e=m(t),r=t,n=0;n<g.length;n++)if(e[n]>0){r=g[n];break}return r}function x(t,e){if(!(t<1||e<1)){for(var r=m(t),n=m(e),a=1,i=0;i<g.length;i++)a*=Math.pow(g[i],Math.max(r[i],n[i]));return a}}d.calcXnums=function(t){var e,r=[];for(e=1;e<t;e++){var n=this.getXat(e-1,0),a=this.getXat(e,0);r[e-1]=a!==n&&null!=n&&null!=a?Math.abs(a-n):0}var i=0;for(e=1;e<t;e++)i+=r[e-1];for(e=1;e<t;e++)0===r[e-1]?r[e-1]=1:r[e-1]=Math.round(i/r[e-1]);return r},d.calcYnums=function(t){var e,r=[];for(e=1;e<t;e++){var n=this.getYat(0,e-1),a=this.getYat(0,e);r[e-1]=a!==n&&null!=n&&null!=a?Math.abs(a-n):0}var i=0;for(e=1;e<t;e++)i+=r[e-1];for(e=1;e<t;e++)0===r[e-1]?r[e-1]=1:r[e-1]=Math.round(i/r[e-1]);return r};var b=[1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260],_=b[9],w=b[13];function k(t,e){for(var r=!1,n=0;n<t.length;n++)if(e===t[n]){r=!0;break}!1===r&&t.push(e)}d.estimateScale=function(t,e){for(var r=1+function(t){if(0!==t.length){for(var e=1,r=0;r<t.length;r++)e=x(e,t[r]);return e}}(0===e?this.calcXnums(t):this.calcYnums(t));r<_;)r*=2;for(;r>w;)r--,r/=y(r),++r<_&&(r=w);var n=Math.round(r/t);return n>1?n:1},d.refineCoords=function(t){for(var e=this.dataScaleX,r=this.dataScaleY,n=t[0].shape[0],o=t[0].shape[1],s=0|Math.floor(t[0].shape[0]*e+1),l=0|Math.floor(t[0].shape[1]*r+1),c=1+n+1,u=1+o+1,h=a(new Float32Array(c*u),[c,u]),f=0;f<t.length;++f){this.surface.padField(h,t[f]);var p=a(new Float32Array(s*l),[s,l]);i(p,h,[e,0,0,0,r,0,0,0,1]),t[f]=p}},d.setContourLevels=function(){var t,e,r,n=[[],[],[]],a=[!1,!1,!1],i=!1;for(t=0;t<3;++t)if(this.showContour[t]&&(i=!0,this.contourSize[t]>0&&null!==this.contourStart[t]&&null!==this.contourEnd[t]&&this.contourEnd[t]>this.contourStart[t]))for(a[t]=!0,e=this.contourStart[t];e<this.contourEnd[t];e+=this.contourSize[t])r=e*this.scene.dataScale[t],k(n[t],r);if(i){var o=[[],[],[]];for(t=0;t<3;++t)this.showContour[t]&&(o[t]=a[t]?n[t]:this.scene.contourLevels[t]);this.surface.update({levels:o})}},d.update=function(t){var e,r,n,i,s=this.scene,p=s.fullSceneLayout,d=this.surface,g=t.opacity,v=l(t,g),m=s.dataScale,y=t.z[0].length,x=t._ylength,b=s.contourLevels;this.data=t;var _=[];for(e=0;e<3;e++)for(_[e]=[],r=0;r<y;r++)_[e][r]=[];for(r=0;r<y;r++)for(n=0;n<x;n++)_[0][r][n]=this.getXat(r,n,t.xcalendar,p.xaxis),_[1][r][n]=this.getYat(r,n,t.ycalendar,p.yaxis),_[2][r][n]=this.getZat(r,n,t.zcalendar,p.zaxis);if(t.connectgaps)for(t._emptypoints=f(_[2]),h(_[2],t._emptypoints),t._interpolatedZ=[],r=0;r<y;r++)for(t._interpolatedZ[r]=[],n=0;n<x;n++)t._interpolatedZ[r][n]=_[2][r][n];for(e=0;e<3;e++)for(r=0;r<y;r++)for(n=0;n<x;n++)null==(i=_[e][r][n])?_[e][r][n]=NaN:i=_[e][r][n]*=m[e];for(e=0;e<3;e++)for(r=0;r<y;r++)for(n=0;n<x;n++)null!=(i=_[e][r][n])&&(this.minValues[e]>i&&(this.minValues[e]=i),this.maxValues[e]<i&&(this.maxValues[e]=i));for(e=0;e<3;e++)this.objectOffset[e]=.5*(this.minValues[e]+this.maxValues[e]);for(e=0;e<3;e++)for(r=0;r<y;r++)for(n=0;n<x;n++)null!=(i=_[e][r][n])&&(_[e][r][n]-=this.objectOffset[e]);var k=[a(new Float32Array(y*x),[y,x]),a(new Float32Array(y*x),[y,x]),a(new Float32Array(y*x),[y,x])];o(k[0],function(t,e){return _[0][t][e]}),o(k[1],function(t,e){return _[1][t][e]}),o(k[2],function(t,e){return _[2][t][e]}),_=[];var T={colormap:v,levels:[[],[],[]],showContour:[!0,!0,!0],showSurface:!t.hidesurface,contourProject:[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],contourWidth:[1,1,1],contourColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],contourTint:[1,1,1],dynamicColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],dynamicWidth:[1,1,1],dynamicTint:[1,1,1],opacityscale:t.opacityscale,opacity:t.opacity},M=u(t);if(T.intensityBounds=[M.min,M.max],t.surfacecolor){var A=a(new Float32Array(y*x),[y,x]);o(A,function(e,r){return t.surfacecolor[r][e]}),k.push(A)}else T.intensityBounds[0]*=m[2],T.intensityBounds[1]*=m[2];(w<k[0].shape[0]||w<k[0].shape[1])&&(this.refineData=!1),!0===this.refineData&&(this.dataScaleX=this.estimateScale(k[0].shape[0],0),this.dataScaleY=this.estimateScale(k[0].shape[1],1),1===this.dataScaleX&&1===this.dataScaleY||this.refineCoords(k)),t.surfacecolor&&(T.intensity=k.pop());var S=[!0,!0,!0],E=["x","y","z"];for(e=0;e<3;++e){var L=t.contours[E[e]];S[e]=L.highlight,T.showContour[e]=L.show||L.highlight,T.showContour[e]&&(T.contourProject[e]=[L.project.x,L.project.y,L.project.z],L.show?(this.showContour[e]=!0,T.levels[e]=b[e],d.highlightColor[e]=T.contourColor[e]=c(L.color),L.usecolormap?d.highlightTint[e]=T.contourTint[e]=0:d.highlightTint[e]=T.contourTint[e]=1,T.contourWidth[e]=L.width,this.contourStart[e]=L.start,this.contourEnd[e]=L.end,this.contourSize[e]=L.size):(this.showContour[e]=!1,this.contourStart[e]=null,this.contourEnd[e]=null,this.contourSize[e]=0),L.highlight&&(T.dynamicColor[e]=c(L.highlightcolor),T.dynamicWidth[e]=L.highlightwidth))}(function(t){var e=t[0].rgb,r=t[t.length-1].rgb;return e[0]===r[0]&&e[1]===r[1]&&e[2]===r[2]&&e[3]===r[3]})(v)&&(T.vertexColor=!0),T.objectOffset=this.objectOffset,T.coords=k,d.update(T),d.visible=t.visible,d.enableDynamic=S,d.enableHighlight=S,d.snapToData=!0,"lighting"in t&&(d.ambientLight=t.lighting.ambient,d.diffuseLight=t.lighting.diffuse,d.specularLight=t.lighting.specular,d.roughness=t.lighting.roughness,d.fresnel=t.lighting.fresnel),"lightposition"in t&&(d.lightPosition=[t.lightposition.x,t.lightposition.y,t.lightposition.z]),g&&g<1&&(d.supportsTransparency=!0)},d.dispose=function(){this.scene.glplot.remove(this.surface),this.surface.dispose()},e.exports=function(t,e){var r=t.glplot.gl,a=n({gl:r}),i=new p(t,a,e.uid);return a._trace=i,i.update(e),t.glplot.add(a),i}},{"../../components/colorscale":603,"../../lib":717,"../../lib/gl_format_color":714,"../../lib/str2rgbarray":740,"../heatmap/find_empties":1006,"../heatmap/interp2d":1009,"gl-surface3d":318,ndarray:451,"ndarray-fill":441,"ndarray-homography":443}],1246:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("../../components/colorscale/defaults"),o=t("./attributes"),s=.1;function l(t,e,r,n){var a=n("opacityscale");"max"===a?e.opacityscale=[[0,s],[1,1]]:"min"===a?e.opacityscale=[[0,1],[1,s]]:"extremes"===a?e.opacityscale=function(t,e){for(var r=[],n=0;n<32;n++){var a=n/31,i=e+(1-e)*(1-Math.pow(Math.sin(t*a*Math.PI),2));r.push([a,Math.max(1,Math.min(0,i))])}return r}(1,s):function(t){var e=0;if(!Array.isArray(t)||t.length<2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!=+t[0][0]||1!=+t[t.length-1][0])return!1;for(var r=0;r<t.length;r++){var n=t[r];if(2!==n.length||+n[0]<e)return!1;e=+n[0]}return!0}(a)||(e.opacityscale=void 0)}function c(t,e,r){e in t&&!(r in t)&&(t[r]=t[e])}e.exports={supplyDefaults:function(t,e,r,s){var u,h;function f(r,n){return a.coerce(t,e,o,r,n)}var p=f("x"),d=f("y"),g=f("z");if(!g||!g.length||p&&p.length<1||d&&d.length<1)e.visible=!1;else{e._xlength=Array.isArray(p)&&a.isArrayOrTypedArray(p[0])?g.length:g[0].length,e._ylength=g.length,n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y","z"],s),f("text"),f("hovertext"),f("hovertemplate"),["lighting.ambient","lighting.diffuse","lighting.specular","lighting.roughness","lighting.fresnel","lightposition.x","lightposition.y","lightposition.z","hidesurface","connectgaps","opacity"].forEach(function(t){f(t)});var v=f("surfacecolor"),m=["x","y","z"];for(u=0;u<3;++u){var y="contours."+m[u],x=f(y+".show"),b=f(y+".highlight");if(x||b)for(h=0;h<3;++h)f(y+".project."+m[h]);x&&(f(y+".color"),f(y+".width"),f(y+".usecolormap")),b&&(f(y+".highlightcolor"),f(y+".highlightwidth")),f(y+".start"),f(y+".end"),f(y+".size")}v||(c(t,"zmin","cmin"),c(t,"zmax","cmax"),c(t,"zauto","cauto")),i(t,e,s,f,{prefix:"",cLetter:"c"}),l(0,e,0,f),e._length=null}},opacityscaleDefaults:l}},{"../../components/colorscale/defaults":601,"../../lib":717,"../../registry":846,"./attributes":1243}],1247:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults").supplyDefaults,colorbar:{min:"cmin",max:"cmax"},calc:t("./calc"),plot:t("./convert"),moduleType:"trace",name:"surface",basePlotModule:t("../../plots/gl3d"),categories:["gl3d","2dMap","showLegend"],meta:{}}},{"../../plots/gl3d":805,"./attributes":1243,"./calc":1244,"./convert":1245,"./defaults":1246}],1248:[function(t,e,r){"use strict";var n=t("../../components/annotations/attributes"),a=t("../../lib/extend").extendFlat,i=t("../../plot_api/edit_types").overrideAll,o=t("../../plots/font_attributes"),s=t("../../plots/domain").attributes;t("../../constants/docs").FORMAT_LINK;(e.exports=i({domain:s({name:"table",trace:!0}),columnwidth:{valType:"number",arrayOk:!0,dflt:null},columnorder:{valType:"data_array"},header:{values:{valType:"data_array",dflt:[]},format:{valType:"data_array",dflt:[]},prefix:{valType:"string",arrayOk:!0,dflt:null},suffix:{valType:"string",arrayOk:!0,dflt:null},height:{valType:"number",dflt:28},align:a({},n.align,{arrayOk:!0}),line:{width:{valType:"number",arrayOk:!0,dflt:1},color:{valType:"color",arrayOk:!0,dflt:"grey"}},fill:{color:{valType:"color",arrayOk:!0,dflt:"white"}},font:a({},o({arrayOk:!0}))},cells:{values:{valType:"data_array",dflt:[]},format:{valType:"data_array",dflt:[]},prefix:{valType:"string",arrayOk:!0,dflt:null},suffix:{valType:"string",arrayOk:!0,dflt:null},height:{valType:"number",dflt:20},align:a({},n.align,{arrayOk:!0}),line:{width:{valType:"number",arrayOk:!0,dflt:1},color:{valType:"color",arrayOk:!0,dflt:"grey"}},fill:{color:{valType:"color",arrayOk:!0,dflt:"white"}},font:a({},o({arrayOk:!0}))}},"calc","from-root")).transforms=void 0},{"../../components/annotations/attributes":574,"../../constants/docs":688,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/domain":790,"../../plots/font_attributes":791}],1249:[function(t,e,r){"use strict";var n=t("../../plots/get_data").getModuleCalcData,a=t("./plot");r.name="table",r.plot=function(t){var e=n(t.calcdata,"table")[0];e.length&&a(t,e)},r.clean=function(t,e,r,n){var a=n._has&&n._has("table"),i=e._has&&e._has("table");a&&!i&&n._paperdiv.selectAll(".table").remove()}},{"../../plots/get_data":800,"./plot":1256}],1250:[function(t,e,r){"use strict";var n=t("../../lib/gup").wrap;e.exports=function(){return n({})}},{"../../lib/gup":715}],1251:[function(t,e,r){"use strict";e.exports={cellPad:8,columnExtentOffset:10,columnTitleOffset:28,emptyHeaderHeight:16,latexCheck:/^\$.*\$$/,goldenRatio:1.618,lineBreaker:"<br>",maxDimensionCount:60,overdrag:45,releaseTransitionDuration:120,releaseTransitionEase:"cubic-out",scrollbarCaptureWidth:18,scrollbarHideDelay:1e3,scrollbarHideDuration:1e3,scrollbarOffset:5,scrollbarWidth:8,transitionDuration:100,transitionEase:"cubic-out",uplift:5,wrapSpacer:" ",wrapSplitCharacter:" ",cn:{table:"table",tableControlView:"table-control-view",scrollBackground:"scroll-background",yColumn:"y-column",columnBlock:"column-block",scrollAreaClip:"scroll-area-clip",scrollAreaClipRect:"scroll-area-clip-rect",columnBoundary:"column-boundary",columnBoundaryClippath:"column-boundary-clippath",columnBoundaryRect:"column-boundary-rect",columnCells:"column-cells",columnCell:"column-cell",cellRect:"cell-rect",cellText:"cell-text",cellTextHolder:"cell-text-holder",scrollbarKit:"scrollbar-kit",scrollbar:"scrollbar",scrollbarSlider:"scrollbar-slider",scrollbarGlyph:"scrollbar-glyph",scrollbarCaptureZone:"scrollbar-capture-zone"}}},{}],1252:[function(t,e,r){"use strict";var n=t("./constants"),a=t("../../lib/extend").extendFlat,i=t("fast-isnumeric");function o(t){if(Array.isArray(t)){for(var e=0,r=0;r<t.length;r++)e=Math.max(e,o(t[r]));return e}return t}function s(t,e){return t+e}function l(t){var e,r=t.slice(),n=1/0,a=0;for(e=0;e<r.length;e++)Array.isArray(r[e])||(r[e]=[r[e]]),n=Math.min(n,r[e].length),a=Math.max(a,r[e].length);if(n!==a)for(e=0;e<r.length;e++){var i=a-r[e].length;i&&(r[e]=r[e].concat(c(i)))}return r}function c(t){for(var e=new Array(t),r=0;r<t;r++)e[r]="";return e}function u(t){return t.calcdata.columns.reduce(function(e,r){return r.xIndex<t.xIndex?e+r.columnWidth:e},0)}function h(t,e){return Object.keys(t).map(function(r){return a({},t[r],{auxiliaryBlocks:e})})}function f(t,e){for(var r,n={},a=0,i=0,o={firstRowIndex:null,lastRowIndex:null,rows:[]},s=0,l=0,c=0;c<t.length;c++)r=t[c],o.rows.push({rowIndex:c,rowHeight:r}),((i+=r)>=e||c===t.length-1)&&(n[a]=o,o.key=l++,o.firstRowIndex=s,o.lastRowIndex=c,o={firstRowIndex:null,lastRowIndex:null,rows:[]},a+=i,s=c+1,i=0);return n}e.exports=function(t,e){var r=l(e.cells.values),p=function(t){return t.slice(e.header.values.length,t.length)},d=l(e.header.values);d.length&&!d[0].length&&(d[0]=[""],d=l(d));var g=d.concat(p(r).map(function(){return c((d[0]||[""]).length)})),v=e.domain,m=Math.floor(t._fullLayout._size.w*(v.x[1]-v.x[0])),y=Math.floor(t._fullLayout._size.h*(v.y[1]-v.y[0])),x=e.header.values.length?g[0].map(function(){return e.header.height}):[n.emptyHeaderHeight],b=r.length?r[0].map(function(){return e.cells.height}):[],_=x.reduce(s,0),w=f(b,y-_+n.uplift),k=h(f(x,_),[]),T=h(w,k),M={},A=e._fullInput.columnorder.concat(p(r.map(function(t,e){return e}))),S=g.map(function(t,r){var n=Array.isArray(e.columnwidth)?e.columnwidth[Math.min(r,e.columnwidth.length-1)]:e.columnwidth;return i(n)?Number(n):1}),E=S.reduce(s,0);S=S.map(function(t){return t/E*m});var L=Math.max(o(e.header.line.width),o(e.cells.line.width)),C={key:e.uid+t._context.staticPlot,translateX:v.x[0]*t._fullLayout._size.w,translateY:t._fullLayout._size.h*(1-v.y[1]),size:t._fullLayout._size,width:m,maxLineWidth:L,height:y,columnOrder:A,groupHeight:y,rowBlocks:T,headerRowBlocks:k,scrollY:0,cells:a({},e.cells,{values:r}),headerCells:a({},e.header,{values:g}),gdColumns:g.map(function(t){return t[0]}),gdColumnsOriginalOrder:g.map(function(t){return t[0]}),prevPages:[0,0],scrollbarState:{scrollbarScrollInProgress:!1},columns:g.map(function(t,e){var r=M[t];return M[t]=(r||0)+1,{key:t+"__"+M[t],label:t,specIndex:e,xIndex:A[e],xScale:u,x:void 0,calcdata:void 0,columnWidth:S[e]}})};return C.columns.forEach(function(t){t.calcdata=C,t.x=u(t)}),C}},{"../../lib/extend":708,"./constants":1251,"fast-isnumeric":228}],1253:[function(t,e,r){"use strict";var n=t("../../lib/extend").extendFlat;r.splitToPanels=function(t){var e=[0,0],r=n({},t,{key:"header",type:"header",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!0,values:t.calcdata.headerCells.values[t.specIndex],rowBlocks:t.calcdata.headerRowBlocks,calcdata:n({},t.calcdata,{cells:t.calcdata.headerCells})});return[n({},t,{key:"cells1",type:"cells",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),n({},t,{key:"cells2",type:"cells",page:1,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),r]},r.splitToCells=function(t){var e=function(t){var e=t.rowBlocks[t.page],r=e?e.rows[0].rowIndex:0,n=e?r+e.rows.length:0;return[r,n]}(t);return(t.values||[]).slice(e[0],e[1]).map(function(r,n){return{keyWithinBlock:n+("string"==typeof r&&r.match(/[<$&> ]/)?"_keybuster_"+Math.random():""),key:e[0]+n,column:t,calcdata:t.calcdata,page:t.page,rowBlocks:t.rowBlocks,value:r}})}},{"../../lib/extend":708}],1254:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("../../plots/domain").defaults;e.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}i(e,o,s),s("columnwidth"),s("header.values"),s("header.format"),s("header.align"),s("header.prefix"),s("header.suffix"),s("header.height"),s("header.line.width"),s("header.line.color"),s("header.fill.color"),n.coerceFont(s,"header.font",n.extendFlat({},o.font)),function(t,e){for(var r=t.columnorder||[],n=t.header.values.length,a=r.slice(0,n),i=a.slice().sort(function(t,e){return t-e}),o=a.map(function(t){return i.indexOf(t)}),s=o.length;s<n;s++)o.push(s);e("columnorder",o)}(e,s),s("cells.values"),s("cells.format"),s("cells.align"),s("cells.prefix"),s("cells.suffix"),s("cells.height"),s("cells.line.width"),s("cells.line.color"),s("cells.fill.color"),n.coerceFont(s,"cells.font",n.extendFlat({},o.font)),e._length=null}},{"../../lib":717,"../../plots/domain":790,"./attributes":1248}],1255:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc"),plot:t("./plot"),moduleType:"trace",name:"table",basePlotModule:t("./base_plot"),categories:["noOpacity"],meta:{}}},{"./attributes":1248,"./base_plot":1249,"./calc":1250,"./defaults":1254,"./plot":1256}],1256:[function(t,e,r){"use strict";var n=t("./constants"),a=t("d3"),i=t("../../lib/gup"),o=t("../../components/drawing"),s=t("../../lib/svg_text_utils"),l=t("../../lib").raiseToTop,c=t("../../lib").cancelTransition,u=t("./data_preparation_helper"),h=t("./data_split_helpers"),f=t("../../components/color");function p(t){return Math.ceil(t.calcdata.maxLineWidth/2)}function d(t,e){return"clip"+t._fullLayout._uid+"_scrollAreaBottomClip_"+e.key}function g(t,e){return"clip"+t._fullLayout._uid+"_columnBoundaryClippath_"+e.calcdata.key+"_"+e.specIndex}function v(t){return[].concat.apply([],t.map(function(t){return t})).map(function(t){return t.__data__})}function m(t,e,r){var o=t.selectAll("."+n.cn.scrollbarKit).data(i.repeat,i.keyFun);o.enter().append("g").classed(n.cn.scrollbarKit,!0).style("shape-rendering","geometricPrecision"),o.each(function(t){var e=t.scrollbarState;e.totalHeight=function(t){var e=t.rowBlocks;return z(e,e.length-1)+(e.length?I(e[e.length-1],1/0):1)}(t),e.scrollableAreaHeight=t.groupHeight-M(t),e.currentlyVisibleHeight=Math.min(e.totalHeight,e.scrollableAreaHeight),e.ratio=e.currentlyVisibleHeight/e.totalHeight,e.barLength=Math.max(e.ratio*e.currentlyVisibleHeight,n.goldenRatio*n.scrollbarWidth),e.barWiggleRoom=e.currentlyVisibleHeight-e.barLength,e.wiggleRoom=Math.max(0,e.totalHeight-e.scrollableAreaHeight),e.topY=0===e.barWiggleRoom?0:t.scrollY/e.wiggleRoom*e.barWiggleRoom,e.bottomY=e.topY+e.barLength,e.dragMultiplier=e.wiggleRoom/e.barWiggleRoom}).attr("transform",function(t){return"translate("+(t.width+n.scrollbarWidth/2+n.scrollbarOffset)+" "+M(t)+")"});var s=o.selectAll("."+n.cn.scrollbar).data(i.repeat,i.keyFun);s.enter().append("g").classed(n.cn.scrollbar,!0);var l=s.selectAll("."+n.cn.scrollbarSlider).data(i.repeat,i.keyFun);l.enter().append("g").classed(n.cn.scrollbarSlider,!0),l.attr("transform",function(t){return"translate(0 "+(t.scrollbarState.topY||0)+")"});var c=l.selectAll("."+n.cn.scrollbarGlyph).data(i.repeat,i.keyFun);c.enter().append("line").classed(n.cn.scrollbarGlyph,!0).attr("stroke","black").attr("stroke-width",n.scrollbarWidth).attr("stroke-linecap","round").attr("y1",n.scrollbarWidth/2),c.attr("y2",function(t){return t.scrollbarState.barLength-n.scrollbarWidth/2}).attr("stroke-opacity",function(t){return t.columnDragInProgress||!t.scrollbarState.barWiggleRoom||r?0:.4}),c.transition().delay(0).duration(0),c.transition().delay(n.scrollbarHideDelay).duration(n.scrollbarHideDuration).attr("stroke-opacity",0);var u=s.selectAll("."+n.cn.scrollbarCaptureZone).data(i.repeat,i.keyFun);u.enter().append("line").classed(n.cn.scrollbarCaptureZone,!0).attr("stroke","white").attr("stroke-opacity",.01).attr("stroke-width",n.scrollbarCaptureWidth).attr("stroke-linecap","butt").attr("y1",0).on("mousedown",function(r){var n=a.event.y,i=this.getBoundingClientRect(),o=r.scrollbarState,s=n-i.top,l=a.scale.linear().domain([0,o.scrollableAreaHeight]).range([0,o.totalHeight]).clamp(!0);o.topY<=s&&s<=o.bottomY||S(e,t,null,l(s-o.barLength/2))(r)}).call(a.behavior.drag().origin(function(t){return a.event.stopPropagation(),t.scrollbarState.scrollbarScrollInProgress=!0,t}).on("drag",S(e,t)).on("dragend",function(){})),u.attr("y2",function(t){return t.scrollbarState.scrollableAreaHeight}),e._context.staticPlot&&(c.remove(),u.remove())}function y(t,e,r,s){var l=function(t){var e=t.selectAll("."+n.cn.columnCell).data(h.splitToCells,function(t){return t.keyWithinBlock});return e.enter().append("g").classed(n.cn.columnCell,!0),e.exit().remove(),e}(function(t){var e=t.selectAll("."+n.cn.columnCells).data(i.repeat,i.keyFun);return e.enter().append("g").classed(n.cn.columnCells,!0),e.exit().remove(),e}(r));!function(t){t.each(function(t,e){var r=t.calcdata.cells.font,n=t.column.specIndex,a={size:_(r.size,n,e),color:_(r.color,n,e),family:_(r.family,n,e)};t.rowNumber=t.key,t.align=_(t.calcdata.cells.align,n,e),t.cellBorderWidth=_(t.calcdata.cells.line.width,n,e),t.font=a})}(l),function(t){t.attr("width",function(t){return t.column.columnWidth}).attr("stroke-width",function(t){return t.cellBorderWidth}).each(function(t){var e=a.select(this);f.stroke(e,_(t.calcdata.cells.line.color,t.column.specIndex,t.rowNumber)),f.fill(e,_(t.calcdata.cells.fill.color,t.column.specIndex,t.rowNumber))})}(function(t){var e=t.selectAll("."+n.cn.cellRect).data(i.repeat,function(t){return t.keyWithinBlock});return e.enter().append("rect").classed(n.cn.cellRect,!0),e}(l));var c=function(t){var e=t.selectAll("."+n.cn.cellText).data(i.repeat,function(t){return t.keyWithinBlock});return e.enter().append("text").classed(n.cn.cellText,!0).style("cursor",function(){return"auto"}).on("mousedown",function(){a.event.stopPropagation()}),e}(function(t){var e=t.selectAll("."+n.cn.cellTextHolder).data(i.repeat,function(t){return t.keyWithinBlock});return e.enter().append("g").classed(n.cn.cellTextHolder,!0).style("shape-rendering","geometricPrecision"),e}(l));!function(t){t.each(function(t){o.font(a.select(this),t.font)})}(c),x(c,e,s,t),O(l)}function x(t,e,r,i){t.text(function(t){var e=t.column.specIndex,r=t.rowNumber,i=t.value,o="string"==typeof i,s=o&&i.match(/<br>/i),l=!o||s;t.mayHaveMarkup=o&&i.match(/[<&>]/);var c,u="string"==typeof(c=i)&&c.match(n.latexCheck);t.latex=u;var h,f,p=u?"":_(t.calcdata.cells.prefix,e,r)||"",d=u?"":_(t.calcdata.cells.suffix,e,r)||"",g=u?null:_(t.calcdata.cells.format,e,r)||null,v=p+(g?a.format(g)(t.value):t.value)+d;if(t.wrappingNeeded=!t.wrapped&&!l&&!u&&(h=b(v)),t.cellHeightMayIncrease=s||u||t.mayHaveMarkup||(void 0===h?b(v):h),t.needsConvertToTspans=t.mayHaveMarkup||t.wrappingNeeded||t.latex,t.wrappingNeeded){var m=(" "===n.wrapSplitCharacter?v.replace(/<a href=/gi,"<a_href="):v).split(n.wrapSplitCharacter),y=" "===n.wrapSplitCharacter?m.map(function(t){return t.replace(/<a_href=/gi,"<a href=")}):m;t.fragments=y.map(function(t){return{text:t,width:null}}),t.fragments.push({fragment:n.wrapSpacer,width:null}),f=y.join(n.lineBreaker)+n.lineBreaker+n.wrapSpacer}else delete t.fragments,f=v;return f}).attr("dy",function(t){return t.needsConvertToTspans?0:"0.75em"}).each(function(t){var o=a.select(this),l=t.wrappingNeeded?L:C;t.needsConvertToTspans?s.convertToTspans(o,i,l(r,this,e,i,t)):a.select(this.parentNode).attr("transform",function(t){return"translate("+P(t)+" "+n.cellPad+")"}).attr("text-anchor",function(t){return{left:"start",center:"middle",right:"end"}[t.align]})})}function b(t){return-1!==t.indexOf(n.wrapSplitCharacter)}function _(t,e,r){if(Array.isArray(t)){var n=t[Math.min(e,t.length-1)];return Array.isArray(n)?n[Math.min(r,n.length-1)]:n}return t}function w(t,e,r){t.transition().ease(n.releaseTransitionEase).duration(n.releaseTransitionDuration).attr("transform","translate("+e.x+" "+r+")")}function k(t){return"cells"===t.type}function T(t){return"header"===t.type}function M(t){return(t.rowBlocks.length?t.rowBlocks[0].auxiliaryBlocks:[]).reduce(function(t,e){return t+I(e,1/0)},0)}function A(t,e,r){var n=v(e)[0];if(void 0!==n){var a=n.rowBlocks,i=n.calcdata,o=z(a,a.length),s=n.calcdata.groupHeight-M(n),l=i.scrollY=Math.max(0,Math.min(o-s,i.scrollY)),c=function(t,e,r){for(var n=[],a=0,i=0;i<t.length;i++){for(var o=t[i],s=o.rows,l=0,c=0;c<s.length;c++)l+=s[c].rowHeight;o.allRowsHeight=l,e<a+l&&e+r>a&&n.push(i),a+=l}return n}(a,l,s);1===c.length&&(c[0]===a.length-1?c.unshift(c[0]-1):c.push(c[0]+1)),c[0]%2&&c.reverse(),e.each(function(t,e){t.page=c[e],t.scrollY=l}),e.attr("transform",function(t){return"translate(0 "+(z(t.rowBlocks,t.page)-t.scrollY)+")"}),t&&(E(t,r,e,c,n.prevPages,n,0),E(t,r,e,c,n.prevPages,n,1),m(r,t))}}function S(t,e,r,i){return function(o){var s=o.calcdata?o.calcdata:o,l=e.filter(function(t){return s.key===t.key}),c=r||s.scrollbarState.dragMultiplier,u=s.scrollY;s.scrollY=void 0===i?s.scrollY+c*a.event.dy:i;var h=l.selectAll("."+n.cn.yColumn).selectAll("."+n.cn.columnBlock).filter(k);return A(t,h,l),s.scrollY===u}}function E(t,e,r,n,a,i,o){n[o]!==a[o]&&(clearTimeout(i.currentRepaint[o]),i.currentRepaint[o]=setTimeout(function(){var i=r.filter(function(t,e){return e===o&&n[e]!==a[e]});y(t,e,i,r),a[o]=n[o]}))}function L(t,e,r,i){return function(){var o=a.select(e.parentNode);o.each(function(t){var e=t.fragments;o.selectAll("tspan.line").each(function(t,r){e[r].width=this.getComputedTextLength()});var r,a,i=e[e.length-1].width,s=e.slice(0,-1),l=[],c=0,u=t.column.columnWidth-2*n.cellPad;for(t.value="";s.length;)c+(a=(r=s.shift()).width+i)>u&&(t.value+=l.join(n.wrapSpacer)+n.lineBreaker,l=[],c=0),l.push(r.text),c+=a;c&&(t.value+=l.join(n.wrapSpacer)),t.wrapped=!0}),o.selectAll("tspan.line").remove(),x(o.select("."+n.cn.cellText),r,t,i),a.select(e.parentNode.parentNode).call(O)}}function C(t,e,r,i,o){return function(){if(!o.settledY){var s=a.select(e.parentNode),l=R(o),c=o.key-l.firstRowIndex,u=l.rows[c].rowHeight,h=o.cellHeightMayIncrease?e.parentNode.getBoundingClientRect().height+2*n.cellPad:u,f=Math.max(h,u);f-l.rows[c].rowHeight&&(l.rows[c].rowHeight=f,t.selectAll("."+n.cn.columnCell).call(O),A(null,t.filter(k),0),m(r,i,!0)),s.attr("transform",function(){var t=this.parentNode.getBoundingClientRect(),e=a.select(this.parentNode).select("."+n.cn.cellRect).node().getBoundingClientRect(),r=this.transform.baseVal.consolidate(),i=e.top-t.top+(r?r.matrix.f:n.cellPad);return"translate("+P(o,a.select(this.parentNode).select("."+n.cn.cellTextHolder).node().getBoundingClientRect().width)+" "+i+")"}),o.settledY=!0}}}function P(t,e){switch(t.align){case"left":return n.cellPad;case"right":return t.column.columnWidth-(e||0)-n.cellPad;case"center":return(t.column.columnWidth-(e||0))/2;default:return n.cellPad}}function O(t){t.attr("transform",function(t){var e=t.rowBlocks[0].auxiliaryBlocks.reduce(function(t,e){return t+I(e,1/0)},0);return"translate(0 "+(I(R(t),t.key)+e)+")"}).selectAll("."+n.cn.cellRect).attr("height",function(t){return(e=R(t),r=t.key,e.rows[r-e.firstRowIndex]).rowHeight;var e,r})}function z(t,e){for(var r=0,n=e-1;n>=0;n--)r+=D(t[n]);return r}function I(t,e){for(var r=0,n=0;n<t.rows.length&&t.rows[n].rowIndex<e;n++)r+=t.rows[n].rowHeight;return r}function D(t){var e=t.allRowsHeight;if(void 0!==e)return e;for(var r=0,n=0;n<t.rows.length;n++)r+=t.rows[n].rowHeight;return t.allRowsHeight=r,r}function R(t){return t.rowBlocks[t.page]}e.exports=function(t,e){var r=!t._context.staticPlot,s=t._fullLayout._paper.selectAll("."+n.cn.table).data(e.map(function(e){var r=i.unwrap(e).trace;return u(t,r)}),i.keyFun);s.exit().remove(),s.enter().append("g").classed(n.cn.table,!0).attr("overflow","visible").style("box-sizing","content-box").style("position","absolute").style("left",0).style("overflow","visible").style("shape-rendering","crispEdges").style("pointer-events","all"),s.attr("width",function(t){return t.width+t.size.l+t.size.r}).attr("height",function(t){return t.height+t.size.t+t.size.b}).attr("transform",function(t){return"translate("+t.translateX+","+t.translateY+")"});var f=s.selectAll("."+n.cn.tableControlView).data(i.repeat,i.keyFun),x=f.enter().append("g").classed(n.cn.tableControlView,!0).style("box-sizing","content-box");r&&x.on("mousemove",function(e){f.filter(function(t){return e===t}).call(m,t)}).on("mousewheel",function(e){if(!e.scrollbarState.wheeling){e.scrollbarState.wheeling=!0;var r=e.scrollY+a.event.deltaY;S(t,f,null,r)(e)||(a.event.stopPropagation(),a.event.preventDefault()),e.scrollbarState.wheeling=!1}}).call(m,t,!0),f.attr("transform",function(t){return"translate("+t.size.l+" "+t.size.t+")"});var b=f.selectAll("."+n.cn.scrollBackground).data(i.repeat,i.keyFun);b.enter().append("rect").classed(n.cn.scrollBackground,!0).attr("fill","none"),b.attr("width",function(t){return t.width}).attr("height",function(t){return t.height}),f.each(function(e){o.setClipUrl(a.select(this),d(t,e),t)});var _=f.selectAll("."+n.cn.yColumn).data(function(t){return t.columns},i.keyFun);_.enter().append("g").classed(n.cn.yColumn,!0),_.exit().remove(),_.attr("transform",function(t){return"translate("+t.x+" 0)"}),r&&_.call(a.behavior.drag().origin(function(e){return w(a.select(this),e,-n.uplift),l(this),e.calcdata.columnDragInProgress=!0,m(f.filter(function(t){return e.calcdata.key===t.key}),t),e}).on("drag",function(t){var e=a.select(this),r=function(e){return(t===e?a.event.x:e.x)+e.columnWidth/2};t.x=Math.max(-n.overdrag,Math.min(t.calcdata.width+n.overdrag-t.columnWidth,a.event.x)),v(_).filter(function(e){return e.calcdata.key===t.calcdata.key}).sort(function(t,e){return r(t)-r(e)}).forEach(function(e,r){e.xIndex=r,e.x=t===e?e.x:e.xScale(e)}),_.filter(function(e){return t!==e}).transition().ease(n.transitionEase).duration(n.transitionDuration).attr("transform",function(t){return"translate("+t.x+" 0)"}),e.call(c).attr("transform","translate("+t.x+" -"+n.uplift+" )")}).on("dragend",function(e){var r=a.select(this),n=e.calcdata;e.x=e.xScale(e),e.calcdata.columnDragInProgress=!1,w(r,e,0),function(t,e,r){var n=e.gdColumnsOriginalOrder;e.gdColumns.sort(function(t,e){return r[n.indexOf(t)]-r[n.indexOf(e)]}),e.columnorder=r,t.emit("plotly_restyle")}(t,n,n.columns.map(function(t){return t.xIndex}))})),_.each(function(e){o.setClipUrl(a.select(this),g(t,e),t)});var M=_.selectAll("."+n.cn.columnBlock).data(h.splitToPanels,i.keyFun);M.enter().append("g").classed(n.cn.columnBlock,!0).attr("id",function(t){return t.key}),M.style("cursor",function(t){return t.dragHandle?"ew-resize":t.calcdata.scrollbarState.barWiggleRoom?"ns-resize":"default"});var E=M.filter(T),L=M.filter(k);r&&L.call(a.behavior.drag().origin(function(t){return a.event.stopPropagation(),t}).on("drag",S(t,f,-1)).on("dragend",function(){})),y(t,f,E,M),y(t,f,L,M);var C=f.selectAll("."+n.cn.scrollAreaClip).data(i.repeat,i.keyFun);C.enter().append("clipPath").classed(n.cn.scrollAreaClip,!0).attr("id",function(e){return d(t,e)});var P=C.selectAll("."+n.cn.scrollAreaClipRect).data(i.repeat,i.keyFun);P.enter().append("rect").classed(n.cn.scrollAreaClipRect,!0).attr("x",-n.overdrag).attr("y",-n.uplift).attr("fill","none"),P.attr("width",function(t){return t.width+2*n.overdrag}).attr("height",function(t){return t.height+n.uplift}),_.selectAll("."+n.cn.columnBoundary).data(i.repeat,i.keyFun).enter().append("g").classed(n.cn.columnBoundary,!0);var O=_.selectAll("."+n.cn.columnBoundaryClippath).data(i.repeat,i.keyFun);O.enter().append("clipPath").classed(n.cn.columnBoundaryClippath,!0),O.attr("id",function(e){return g(t,e)});var z=O.selectAll("."+n.cn.columnBoundaryRect).data(i.repeat,i.keyFun);z.enter().append("rect").classed(n.cn.columnBoundaryRect,!0).attr("fill","none"),z.attr("width",function(t){return t.columnWidth+2*p(t)}).attr("height",function(t){return t.calcdata.height+2*p(t)+n.uplift}).attr("x",function(t){return-p(t)}).attr("y",function(t){return-p(t)}),A(null,L,f)}},{"../../components/color":591,"../../components/drawing":612,"../../lib":717,"../../lib/gup":715,"../../lib/svg_text_utils":741,"./constants":1251,"./data_preparation_helper":1252,"./data_split_helpers":1253,d3:165}],1257:[function(t,e,r){"use strict";var n=t("../../plots/template_attributes").hovertemplateAttrs,a=t("../../plots/template_attributes").texttemplateAttrs,i=t("../../components/colorscale/attributes"),o=t("../../plots/domain").attributes,s=t("../pie/attributes"),l=t("../sunburst/attributes"),c=t("./constants"),u=t("../../lib/extend").extendFlat;e.exports={labels:l.labels,parents:l.parents,values:l.values,branchvalues:l.branchvalues,count:l.count,level:l.level,maxdepth:l.maxdepth,tiling:{packing:{valType:"enumerated",values:["squarify","binary","dice","slice","slice-dice","dice-slice"],dflt:"squarify",editType:"plot"},squarifyratio:{valType:"number",min:1,dflt:1,editType:"plot"},flip:{valType:"flaglist",flags:["x","y"],dflt:"",editType:"plot"},pad:{valType:"number",min:0,dflt:3,editType:"plot"},editType:"calc"},marker:u({pad:{t:{valType:"number",min:0,editType:"plot"},l:{valType:"number",min:0,editType:"plot"},r:{valType:"number",min:0,editType:"plot"},b:{valType:"number",min:0,editType:"plot"},editType:"calc"},colors:l.marker.colors,depthfade:{valType:"enumerated",values:[!0,!1,"reversed"],editType:"style"},line:l.marker.line,editType:"calc"},i("marker",{colorAttr:"colors",anim:!1})),pathbar:{visible:{valType:"boolean",dflt:!0,editType:"plot"},side:{valType:"enumerated",values:["top","bottom"],dflt:"top",editType:"plot"},edgeshape:{valType:"enumerated",values:[">","<","|","/","\\"],dflt:">",editType:"plot"},thickness:{valType:"number",min:12,editType:"plot"},textfont:u({},s.textfont,{}),editType:"calc"},text:s.text,textinfo:l.textinfo,texttemplate:a({editType:"plot"},{keys:c.eventDataKeys.concat(["label","value"])}),hovertext:s.hovertext,hoverinfo:l.hoverinfo,hovertemplate:n({},{keys:c.eventDataKeys}),textfont:s.textfont,insidetextfont:s.insidetextfont,outsidetextfont:u({},s.outsidetextfont,{}),textposition:{valType:"enumerated",values:["top left","top center","top right","middle left","middle center","middle right","bottom left","bottom center","bottom right"],dflt:"top left",editType:"plot"},domain:o({name:"treemap",trace:!0,editType:"calc"})}},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/domain":790,"../../plots/template_attributes":841,"../pie/attributes":1094,"../sunburst/attributes":1231,"./constants":1260}],1258:[function(t,e,r){"use strict";var n=t("../../plots/plots");r.name="treemap",r.plot=function(t,e,a,i){n.plotBasePlot(r.name,t,e,a,i)},r.clean=function(t,e,a,i){n.cleanBasePlot(r.name,t,e,a,i)}},{"../../plots/plots":826}],1259:[function(t,e,r){"use strict";var n=t("../sunburst/calc");r.calc=function(t,e){return n.calc(t,e)},r.crossTraceCalc=function(t){return n._runCrossTraceCalc("treemap",t)}},{"../sunburst/calc":1233}],1260:[function(t,e,r){"use strict";e.exports={CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:"poly",eventDataKeys:["currentPath","root","entry","percentRoot","percentEntry","percentParent"],gapWithPathbar:1}},{}],1261:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("../../components/color"),o=t("../../plots/domain").defaults,s=t("../bar/defaults").handleText,l=t("../bar/constants").TEXTPAD,c=t("../../components/colorscale"),u=c.hasColorscale,h=c.handleDefaults;e.exports=function(t,e,r,c){function f(r,i){return n.coerce(t,e,a,r,i)}var p=f("labels"),d=f("parents");if(p&&p.length&&d&&d.length){var g=f("values");g&&g.length?f("branchvalues"):f("count"),f("level"),f("maxdepth"),"squarify"===f("tiling.packing")&&f("tiling.squarifyratio"),f("tiling.flip"),f("tiling.pad");var v=f("text");f("texttemplate"),e.texttemplate||f("textinfo",Array.isArray(v)?"text+label":"label"),f("hovertext"),f("hovertemplate");var m=f("pathbar.visible");s(t,e,c,f,"auto",{hasPathbar:m,moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),f("textposition");var y=-1!==e.textposition.indexOf("bottom");f("marker.line.width")&&f("marker.line.color",c.paper_bgcolor);var x=f("marker.colors"),b=e._hasColorscale=u(t,"marker","colors")||(t.marker||{}).coloraxis;b?h(t,e,c,f,{prefix:"marker.",cLetter:"c"}):f("marker.depthfade",!(x||[]).length);var _=2*e.textfont.size;f("marker.pad.t",y?_/4:_),f("marker.pad.l",_/4),f("marker.pad.r",_/4),f("marker.pad.b",y?_:_/4),b&&h(t,e,c,f,{prefix:"marker.",cLetter:"c"}),e._hovered={marker:{line:{width:2,color:i.contrast(c.paper_bgcolor)}}},m&&(f("pathbar.thickness",e.pathbar.textfont.size+2*l),f("pathbar.side"),f("pathbar.edgeshape")),o(e,c,f),e._length=null}else e.visible=!1}},{"../../components/color":591,"../../components/colorscale":603,"../../lib":717,"../../plots/domain":790,"../bar/constants":858,"../bar/defaults":860,"./attributes":1257}],1262:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../components/drawing"),o=t("../../lib/svg_text_utils"),s=t("./partition"),l=t("./style").styleOne,c=t("./constants"),u=t("../sunburst/helpers"),h=t("../sunburst/fx");e.exports=function(t,e,r,f,p){var d=p.barDifY,g=p.width,v=p.height,m=p.viewX,y=p.viewY,x=p.pathSlice,b=p.toMoveInsideSlice,_=p.strTransform,w=p.hasTransition,k=p.handleSlicesExit,T=p.makeUpdateSliceInterpolator,M=p.makeUpdateTextInterpolator,A={},S=t._fullLayout,E=e[0],L=E.trace,C=E.hierarchy,P=g/L._entryDepth,O=u.listPath(r.data,"id"),z=s(C.copy(),[g,v],{packing:"dice",pad:{inner:0,top:0,left:0,right:0,bottom:0}}).descendants();(z=z.filter(function(t){var e=O.indexOf(t.data.id);return-1!==e&&(t.x0=P*e,t.x1=P*(e+1),t.y0=d,t.y1=d+v,t.onPathbar=!0,!0)})).reverse(),(f=f.data(z,u.getPtId)).enter().append("g").classed("pathbar",!0),k(f,!0,A,[g,v],x),f.order();var I=f;w&&(I=I.transition().each("end",function(){var e=n.select(this);u.setSliceCursor(e,t,{hideOnRoot:!1,hideOnLeaves:!1,isTransitioning:!1})})),I.each(function(s){s._hoverX=m(s.x1-Math.min(g,v)/2),s._hoverY=y(s.y1-v/2);var f=n.select(this),p=a.ensureSingle(f,"path","surface",function(t){t.style("pointer-events","all")});w?p.transition().attrTween("d",function(t){var e=T(t,!0,A,[g,v]);return function(t){return x(e(t))}}):p.attr("d",x),f.call(h,r,t,e,{styleOne:l,eventDataKeys:c.eventDataKeys,transitionTime:c.CLICK_TRANSITION_TIME,transitionEasing:c.CLICK_TRANSITION_EASING}).call(u.setSliceCursor,t,{hideOnRoot:!1,hideOnLeaves:!1,isTransitioning:t._transitioning}),p.call(l,s,L,{hovered:!1}),s._text=(u.getPtLabel(s)||"").split("<br>").join(" ")||"";var d=a.ensureSingle(f,"g","slicetext"),k=a.ensureSingle(d,"text","",function(t){t.attr("data-notex",1)}),E=a.ensureUniformFontSize(t,u.determineTextFont(L,s,S.font,{onPathbar:!0}));k.text(s._text||" ").classed("slicetext",!0).attr("text-anchor","start").call(i.font,E).call(o.convertToTspans,t),s.textBB=i.bBox(k.node()),s.transform=b(s,{fontSize:E.size,onPathbar:!0}),s.transform.fontSize=E.size,w?k.transition().attrTween("transform",function(t){var e=M(t,!0,A,[g,v]);return function(t){return _(e(t))}}):k.attr("transform",_(s))})}},{"../../components/drawing":612,"../../lib":717,"../../lib/svg_text_utils":741,"../sunburst/fx":1236,"../sunburst/helpers":1237,"./constants":1260,"./partition":1267,"./style":1269,d3:165}],1263:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../components/drawing"),o=t("../../lib/svg_text_utils"),s=t("./partition"),l=t("./style").styleOne,c=t("./constants"),u=t("../sunburst/helpers"),h=t("../sunburst/fx"),f=t("../sunburst/plot").formatSliceLabel;e.exports=function(t,e,r,p,d){var g=d.width,v=d.height,m=d.viewX,y=d.viewY,x=d.pathSlice,b=d.toMoveInsideSlice,_=d.strTransform,w=d.hasTransition,k=d.handleSlicesExit,T=d.makeUpdateSliceInterpolator,M=d.makeUpdateTextInterpolator,A=d.prevEntry,S=t._fullLayout,E=e[0].trace,L=-1!==E.textposition.indexOf("left"),C=-1!==E.textposition.indexOf("right"),P=-1!==E.textposition.indexOf("bottom"),O=!P&&!E.marker.pad.t||P&&!E.marker.pad.b,z=s(r,[g,v],{packing:E.tiling.packing,squarifyratio:E.tiling.squarifyratio,flipX:E.tiling.flip.indexOf("x")>-1,flipY:E.tiling.flip.indexOf("y")>-1,pad:{inner:E.tiling.pad,top:E.marker.pad.t,left:E.marker.pad.l,right:E.marker.pad.r,bottom:E.marker.pad.b}}).descendants(),I=1/0,D=-1/0;z.forEach(function(t){var e=t.depth;e>=E._maxDepth?(t.x0=t.x1=(t.x0+t.x1)/2,t.y0=t.y1=(t.y0+t.y1)/2):(I=Math.min(I,e),D=Math.max(D,e))}),p=p.data(z,u.getPtId),E._maxVisibleLayers=isFinite(D)?D-I+1:0,p.enter().append("g").classed("slice",!0),k(p,!1,{},[g,v],x),p.order();var R=null;if(w&&A){var F=u.getPtId(A);p.each(function(t){null===R&&u.getPtId(t)===F&&(R={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})})}var B=function(){return R||{x0:0,x1:g,y0:0,y1:v}},N=p;return w&&(N=N.transition().each("end",function(){var e=n.select(this);u.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!1,isTransitioning:!1})})),N.each(function(s){var p=u.isHeader(s,E);s._hoverX=m(s.x1-E.marker.pad.r),s._hoverY=y(P?s.y1-E.marker.pad.b/2:s.y0+E.marker.pad.t/2);var d=n.select(this),k=a.ensureSingle(d,"path","surface",function(t){t.style("pointer-events","all")});w?k.transition().attrTween("d",function(t){var e=T(t,!1,B(),[g,v]);return function(t){return x(e(t))}}):k.attr("d",x),d.call(h,r,t,e,{styleOne:l,eventDataKeys:c.eventDataKeys,transitionTime:c.CLICK_TRANSITION_TIME,transitionEasing:c.CLICK_TRANSITION_EASING}).call(u.setSliceCursor,t,{isTransitioning:t._transitioning}),k.call(l,s,E,{hovered:!1}),s.x0===s.x1||s.y0===s.y1?s._text="":s._text=p?O?"":u.getPtLabel(s)||"":f(s,r,E,e,S)||"";var A=a.ensureSingle(d,"g","slicetext"),z=a.ensureSingle(A,"text","",function(t){t.attr("data-notex",1)}),I=a.ensureUniformFontSize(t,u.determineTextFont(E,s,S.font));z.text(s._text||" ").classed("slicetext",!0).attr("text-anchor",C?"end":L||p?"start":"middle").call(i.font,I).call(o.convertToTspans,t),s.textBB=i.bBox(z.node()),s.transform=b(s,{fontSize:I.size,isHeader:p}),s.transform.fontSize=I.size,w?z.transition().attrTween("transform",function(t){var e=M(t,!1,B(),[g,v]);return function(t){return _(e(t))}}):z.attr("transform",_(s))}),R}},{"../../components/drawing":612,"../../lib":717,"../../lib/svg_text_utils":741,"../sunburst/fx":1236,"../sunburst/helpers":1237,"../sunburst/plot":1241,"./constants":1260,"./partition":1267,"./style":1269,d3:165}],1264:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"treemap",basePlotModule:t("./base_plot"),categories:[],animatable:!0,attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults"),supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc").calc,crossTraceCalc:t("./calc").crossTraceCalc,plot:t("./plot"),style:t("./style").style,colorbar:t("../scatter/marker_colorbar"),meta:{}}},{"../scatter/marker_colorbar":1138,"./attributes":1257,"./base_plot":1258,"./calc":1259,"./defaults":1261,"./layout_attributes":1265,"./layout_defaults":1266,"./plot":1268,"./style":1269}],1265:[function(t,e,r){"use strict";e.exports={treemapcolorway:{valType:"colorlist",editType:"calc"},extendtreemapcolors:{valType:"boolean",dflt:!0,editType:"calc"}}},{}],1266:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e){function r(r,i){return n.coerce(t,e,a,r,i)}r("treemapcolorway",e.colorway),r("extendtreemapcolors")}},{"../../lib":717,"./layout_attributes":1265}],1267:[function(t,e,r){"use strict";var n=t("d3-hierarchy");e.exports=function(t,e,r){var a,i=r.flipX,o=r.flipY,s="dice-slice"===r.packing,l=r.pad[o?"bottom":"top"],c=r.pad[i?"right":"left"],u=r.pad[i?"left":"right"],h=r.pad[o?"top":"bottom"];s&&(a=c,c=l,l=a,a=u,u=h,h=a);var f=n.treemap().tile(function(t,e){switch(t){case"squarify":return n.treemapSquarify.ratio(e);case"binary":return n.treemapBinary;case"dice":return n.treemapDice;case"slice":return n.treemapSlice;default:return n.treemapSliceDice}}(r.packing,r.squarifyratio)).paddingInner(r.pad.inner).paddingLeft(c).paddingRight(u).paddingTop(l).paddingBottom(h).size(s?[e[1],e[0]]:e)(t);return(s||i||o)&&function t(e,r,n){var a;n.swapXY&&(a=e.x0,e.x0=e.y0,e.y0=a,a=e.x1,e.x1=e.y1,e.y1=a);n.flipX&&(a=e.x0,e.x0=r[0]-e.x1,e.x1=r[0]-a);n.flipY&&(a=e.y0,e.y0=r[1]-e.y1,e.y1=r[1]-a);var i=e.children;if(i)for(var o=0;o<i.length;o++)t(i[o],r,n)}(f,e,{swapXY:s,flipX:i,flipY:o}),f}},{"d3-hierarchy":159}],1268:[function(t,e,r){"use strict";var n=t("d3"),a=t("../sunburst/helpers"),i=t("../../lib"),o=t("../bar/constants").TEXTPAD,s=t("../bar/plot").toMoveInsideBar,l=t("../bar/uniform_text"),c=l.recordMinTextSize,u=l.clearMinTextSize,h=t("../bar/style").resizeText,f=t("./constants"),p=t("./draw_descendants"),d=t("./draw_ancestors");function g(t){return a.isHierarchyRoot(t)?"":a.getPtId(t)}function v(t,e,r,l){var u=t._fullLayout,h=e[0],v=h.trace,m=h.hierarchy,y=a.findEntryWithLevel(m,v.level),x=n.select(r),b=x.selectAll("g.pathbar"),_=x.selectAll("g.slice");if(!y)return b.remove(),void _.remove();var w=a.isHierarchyRoot(y),k=!u.uniformtext.mode&&a.hasTransition(l),T=a.getMaxDepth(v),M=u._size,A=v.domain,S=M.w*(A.x[1]-A.x[0]),E=M.h*(A.y[1]-A.y[0]),L=S,C=v.pathbar.thickness,P=v.marker.line.width+f.gapWithPathbar,O=v.pathbar.visible?v.pathbar.side.indexOf("bottom")>-1?E+P:-(C+P):0,z={x0:L,x1:L,y0:O,y1:O+C},I=function(t,e,r){var n=v.tiling.pad,a=function(t){return t-n<=e.x0},i=function(t){return t+n>=e.x1},o=function(t){return t-n<=e.y0},s=function(t){return t+n>=e.y1};return{x0:a(t.x0-n)?0:i(t.x0-n)?r[0]:t.x0,x1:a(t.x1+n)?0:i(t.x1+n)?r[0]:t.x1,y0:o(t.y0-n)?0:s(t.y0-n)?r[1]:t.y0,y1:o(t.y1+n)?0:s(t.y1+n)?r[1]:t.y1}},D=null,R={},F={},B=null,N=function(t,e){return e?R[g(t)]:F[g(t)]},j=function(t,e,r,n){if(e)return R[g(m)]||z;var a=F[v.level]||r;return function(t){return t.data.depth-y.data.depth<T}(t)?I(t,a,n):{}};h.hasMultipleRoots&&w&&T++,v._maxDepth=T,v._backgroundColor=u.paper_bgcolor,v._entryDepth=y.data.depth,v._atRootLevel=w;var V=-S/2+M.l+M.w*(A.x[1]+A.x[0])/2,U=-E/2+M.t+M.h*(1-(A.y[1]+A.y[0])/2),q=function(t){return V+t},H=function(t){return U+t},G=H(0),Y=q(0),W=function(t){return Y+t},X=function(t){return G+t};function Z(t,e){return t+","+e}var J=W(0),K=function(t){t.x=Math.max(J,t.x)},Q=v.pathbar.edgeshape,$=function(t,e){var r=t.x0,n=t.x1,a=t.y0,i=t.y1,l=t.textBB,h=function(t){return-1!==v.textposition.indexOf(t)},f=h("bottom"),p=h("top")||e.isHeader&&!f?"start":f?"end":"middle",d=h("right"),g=h("left")||e.onPathbar?-1:d?1:0,m=v.marker.pad;if(e.isHeader){if((r+=m.l-o)>=(n-=m.r-o)){var y=(r+n)/2;r=y,n=y}var x;f?a<(x=i-m.b)&&x<i&&(a=x):a<(x=a+m.t)&&x<i&&(i=x)}var b=s(r,n,a,i,l,{isHorizontal:!1,constrained:!0,angle:0,anchor:p,leftToRight:g});return b.fontSize=e.fontSize,b.targetX=q(b.targetX),b.targetY=H(b.targetY),isNaN(b.targetX)||isNaN(b.targetY)?{}:(r!==n&&a!==i&&c(v.type,b,u),{scale:b.scale,rotate:b.rotate,textX:b.textX,textY:b.textY,anchorX:b.anchorX,anchorY:b.anchorY,targetX:b.targetX,targetY:b.targetY})},tt=function(t,e){for(var r,n=0,a=t;!r&&n<T;)n++,(a=a.parent)?r=N(a,e):n=T;return r||{}},et=function(t,e,r,a){var o,s=N(t,e);if(s)o=s;else if(e)o=z;else if(D)if(t.parent){var l=B||r;l&&!e?o=I(t,l,a):(o={},i.extendFlat(o,tt(t,e)))}else o=t;else o={};return n.interpolate(o,{x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})},rt=function(t,e,r,o){var s=N(t,e),l={},h=j(t,e,r,o);i.extendFlat(l,{transform:$({x0:h.x0,x1:h.x1,y0:h.y0,y1:h.y1,textBB:t.textBB,_text:t._text},{isHeader:a.isHeader(t,v)})}),s?l=s:t.parent&&i.extendFlat(l,tt(t,e));var f=t.transform;return t.x0!==t.x1&&t.y0!==t.y1&&c(v.type,f,u),n.interpolate(l,{transform:{scale:f.scale,rotate:f.rotate,textX:f.textX,textY:f.textY,anchorX:f.anchorX,anchorY:f.anchorY,targetX:f.targetX,targetY:f.targetY}})},nt=function(t,e,r,a,i){var o=a[0],s=a[1];k?t.exit().transition().each(function(){var t=n.select(this);t.select("path.surface").transition().attrTween("d",function(t){var r=function(t,e,r,a){var i,o=N(t,e);if(e)i=z;else{var s=N(y,e);i=s?I(t,s,a):{}}return n.interpolate(o,i)}(t,e,0,[o,s]);return function(t){return i(r(t))}}),t.select("g.slicetext").attr("opacity",0)}).remove():t.exit().remove()},at=function(t){var e=t.transform;return t.x0!==t.x1&&t.y0!==t.y1&&c(v.type,e,u),i.getTextTransform({textX:e.textX,textY:e.textY,anchorX:e.anchorX,anchorY:e.anchorY,targetX:e.targetX,targetY:e.targetY,scale:e.scale,rotate:e.rotate})};k&&(b.each(function(t){R[g(t)]={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1},t.transform&&(R[g(t)].transform={textX:t.transform.textX,textY:t.transform.textY,anchorX:t.transform.anchorX,anchorY:t.transform.anchorY,targetX:t.transform.targetX,targetY:t.transform.targetY,scale:t.transform.scale,rotate:t.transform.rotate})}),_.each(function(t){F[g(t)]={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1},t.transform&&(F[g(t)].transform={textX:t.transform.textX,textY:t.transform.textY,anchorX:t.transform.anchorX,anchorY:t.transform.anchorY,targetX:t.transform.targetX,targetY:t.transform.targetY,scale:t.transform.scale,rotate:t.transform.rotate}),!D&&a.isEntry(t)&&(D=t)})),B=p(t,e,y,_,{width:S,height:E,viewX:q,viewY:H,pathSlice:function(t){var e=q(t.x0),r=q(t.x1),n=H(t.y0),a=H(t.y1),i=r-e,o=a-n;if(!i||!o)return"";return"M"+Z(e,n+0)+"L"+Z(r-0,n)+"L"+Z(r,a-0)+"L"+Z(e+0,a)+"Z"},toMoveInsideSlice:$,prevEntry:D,makeUpdateSliceInterpolator:et,makeUpdateTextInterpolator:rt,handleSlicesExit:nt,hasTransition:k,strTransform:at}),v.pathbar.visible?d(t,e,y,b,{barDifY:O,width:L,height:C,viewX:W,viewY:X,pathSlice:function(t){var e=W(Math.max(Math.min(t.x0,t.x0),0)),r=W(Math.min(Math.max(t.x1,t.x1),L)),n=X(t.y0),a=X(t.y1),i=C/2,o={},s={};o.x=e,s.x=r,o.y=s.y=(n+a)/2;var l={x:e,y:n},c={x:r,y:n},u={x:r,y:a},h={x:e,y:a};return">"===Q?(l.x-=i,c.x-=i,u.x-=i,h.x-=i):"/"===Q?(u.x-=i,h.x-=i,o.x-=i/2,s.x-=i/2):"\\"===Q?(l.x-=i,c.x-=i,o.x-=i/2,s.x-=i/2):"<"===Q&&(o.x-=i,s.x-=i),K(l),K(h),K(o),K(c),K(u),K(s),"M"+Z(l.x,l.y)+"L"+Z(c.x,c.y)+"L"+Z(s.x,s.y)+"L"+Z(u.x,u.y)+"L"+Z(h.x,h.y)+"L"+Z(o.x,o.y)+"Z"},toMoveInsideSlice:$,makeUpdateSliceInterpolator:et,makeUpdateTextInterpolator:rt,handleSlicesExit:nt,hasTransition:k,strTransform:at}):b.remove()}e.exports=function(t,e,r,i){var o,s,l=t._fullLayout,c=l._treemaplayer,f=!r;(u("treemap",l),(o=c.selectAll("g.trace.treemap").data(e,function(t){return t[0].trace.uid})).enter().append("g").classed("trace",!0).classed("treemap",!0),o.order(),!l.uniformtext.mode&&a.hasTransition(r))?(i&&(s=i()),n.transition().duration(r.duration).ease(r.easing).each("end",function(){s&&s()}).each("interrupt",function(){s&&s()}).each(function(){c.selectAll("g.trace").each(function(e){v(t,e,this,r)})})):(o.each(function(e){v(t,e,this,r)}),l.uniformtext.mode&&h(t,l._treemaplayer.selectAll(".trace"),"treemap"));f&&o.exit().remove()}},{"../../lib":717,"../bar/constants":858,"../bar/plot":867,"../bar/style":870,"../bar/uniform_text":872,"../sunburst/helpers":1237,"./constants":1260,"./draw_ancestors":1262,"./draw_descendants":1263,d3:165}],1269:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/color"),i=t("../../lib"),o=t("../sunburst/helpers"),s=t("../bar/uniform_text").resizeText;function l(t,e,r,n){var s,l,c=(n||{}).hovered,u=e.data.data,h=u.i,f=u.color,p=o.isHierarchyRoot(e),d=1;if(c)s=r._hovered.marker.line.color,l=r._hovered.marker.line.width;else if(p&&"rgba(0,0,0,0)"===f)d=0,s="rgba(0,0,0,0)",l=0;else if(s=i.castOption(r,h,"marker.line.color")||a.defaultLine,l=i.castOption(r,h,"marker.line.width")||0,!r._hasColorscale&&!e.onPathbar){var g=r.marker.depthfade;if(g){var v,m=a.combine(a.addOpacity(r._backgroundColor,.75),f);if(!0===g){var y=o.getMaxDepth(r);v=isFinite(y)?o.isLeaf(e)?0:r._maxVisibleLayers-(e.data.depth-r._entryDepth):e.data.height+1}else v=e.data.depth-r._entryDepth,r._atRootLevel||v++;if(v>0)for(var x=0;x<v;x++){var b=.5*x/v;f=a.combine(a.addOpacity(m,b),f)}}}t.style("stroke-width",l).call(a.fill,f).call(a.stroke,s).style("opacity",d)}e.exports={style:function(t){var e=t._fullLayout._treemaplayer.selectAll(".trace");s(t,e,"treemap"),e.each(function(t){var e=n.select(this),r=t[0].trace;e.style("opacity",r.opacity),e.selectAll("path.surface").each(function(t){n.select(this).call(l,t,r,{hovered:!1})})})},styleOne:l}},{"../../components/color":591,"../../lib":717,"../bar/uniform_text":872,"../sunburst/helpers":1237,d3:165}],1270:[function(t,e,r){"use strict";var n=t("../box/attributes"),a=t("../../lib/extend").extendFlat;e.exports={y:n.y,x:n.x,x0:n.x0,y0:n.y0,name:a({},n.name,{}),orientation:a({},n.orientation,{}),bandwidth:{valType:"number",min:0,editType:"calc"},scalegroup:{valType:"string",dflt:"",editType:"calc"},scalemode:{valType:"enumerated",values:["width","count"],dflt:"width",editType:"calc"},spanmode:{valType:"enumerated",values:["soft","hard","manual"],dflt:"soft",editType:"calc"},span:{valType:"info_array",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}],editType:"calc"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,dflt:2,editType:"style"},editType:"plot"},fillcolor:n.fillcolor,points:a({},n.boxpoints,{}),jitter:a({},n.jitter,{}),pointpos:a({},n.pointpos,{}),width:a({},n.width,{}),marker:n.marker,text:n.text,hovertext:n.hovertext,hovertemplate:n.hovertemplate,box:{visible:{valType:"boolean",dflt:!1,editType:"plot"},width:{valType:"number",min:0,max:1,dflt:.25,editType:"plot"},fillcolor:{valType:"color",editType:"style"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,editType:"style"},editType:"style"},editType:"plot"},meanline:{visible:{valType:"boolean",dflt:!1,editType:"plot"},color:{valType:"color",editType:"style"},width:{valType:"number",min:0,editType:"style"},editType:"plot"},side:{valType:"enumerated",values:["both","positive","negative"],dflt:"both",editType:"calc"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:n.selected,unselected:n.unselected,hoveron:{valType:"flaglist",flags:["violins","points","kde"],dflt:"violins+points+kde",extras:["all"],editType:"style"}}},{"../../lib/extend":708,"../box/attributes":881}],1271:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../box/calc"),o=t("./helpers"),s=t("../../constants/numerical").BADNUM;function l(t,e,r){var a=e.max-e.min;if(!a)return t.bandwidth?t.bandwidth:0;if(t.bandwidth)return Math.max(t.bandwidth,a/1e4);var i=r.length,o=n.stdev(r,i-1,e.mean);return Math.max(function(t,e,r){return 1.059*Math.min(e,r/1.349)*Math.pow(t,-.2)}(i,o,e.q3-e.q1),a/100)}function c(t,e,r,n){var i,o=t.spanmode,l=t.span||[],c=[e.min,e.max],u=[e.min-2*n,e.max+2*n];function h(n){var a=l[n],i="multicategory"===r.type?r.r2c(a):r.d2c(a,0,t[e.valLetter+"calendar"]);return i===s?u[n]:i}var f={type:"linear",range:i="soft"===o?u:"hard"===o?c:[h(0),h(1)]};return a.setConvert(f),f.cleanRange(),i}e.exports=function(t,e){var r=i(t,e);if(r[0].t.empty)return r;for(var s=t._fullLayout,u=a.getFromId(t,e["h"===e.orientation?"xaxis":"yaxis"]),h=1/0,f=-1/0,p=0,d=0,g=0;g<r.length;g++){var v=r[g],m=v.pts.map(o.extractVal),y=v.bandwidth=l(e,v,m),x=v.span=c(e,v,u,y);if(v.min===v.max&&0===y)x=v.span=[v.min,v.max],v.density=[{v:1,t:x[0]}],v.bandwidth=y,p=Math.max(p,1);else{var b=x[1]-x[0],_=Math.ceil(b/(y/3)),w=b/_;if(!isFinite(w)||!isFinite(_))return n.error("Something went wrong with computing the violin span"),r[0].t.empty=!0,r;var k=o.makeKDE(v,e,m);v.density=new Array(_);for(var T=0,M=x[0];M<x[1]+w/2;T++,M+=w){var A=k(M);v.density[T]={v:A,t:M},p=Math.max(p,A)}}d=Math.max(d,m.length),h=Math.min(h,x[0]),f=Math.max(f,x[1])}var S=a.findExtremes(u,[h,f],{padded:!0});if(e._extremes[u._id]=S,e.width)r[0].t.maxKDE=p;else{var E=s._violinScaleGroupStats,L=e.scalegroup,C=E[L];C?(C.maxKDE=Math.max(C.maxKDE,p),C.maxCount=Math.max(C.maxCount,d)):E[L]={maxKDE:p,maxCount:d}}return r[0].t.labels.kde=n._(t,"kde:"),r}},{"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/axes":765,"../box/calc":882,"./helpers":1274}],1272:[function(t,e,r){"use strict";var n=t("../box/cross_trace_calc").setPositionOffset,a=["v","h"];e.exports=function(t,e){for(var r=t.calcdata,i=e.xaxis,o=e.yaxis,s=0;s<a.length;s++){for(var l=a[s],c="h"===l?o:i,u=[],h=0;h<r.length;h++){var f=r[h],p=f[0].t,d=f[0].trace;!0!==d.visible||"violin"!==d.type||p.empty||d.orientation!==l||d.xaxis!==i._id||d.yaxis!==o._id||u.push(h)}n("violin",t,u,c)}}},{"../box/cross_trace_calc":883}],1273:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/color"),i=t("../box/defaults"),o=t("./attributes");e.exports=function(t,e,r,s){function l(r,a){return n.coerce(t,e,o,r,a)}function c(r,a){return n.coerce2(t,e,o,r,a)}if(i.handleSampleDefaults(t,e,l,s),!1!==e.visible){l("bandwidth"),l("side"),l("width")||(l("scalegroup",e.name),l("scalemode"));var u,h=l("span");Array.isArray(h)&&(u="manual"),l("spanmode",u);var f=l("line.color",(t.marker||{}).color||r),p=l("line.width"),d=l("fillcolor",a.addOpacity(e.line.color,.5));i.handlePointsDefaults(t,e,l,{prefix:""});var g=c("box.width"),v=c("box.fillcolor",d),m=c("box.line.color",f),y=c("box.line.width",p);l("box.visible",Boolean(g||v||m||y))||(e.box={visible:!1});var x=c("meanline.color",f),b=c("meanline.width",p);l("meanline.visible",Boolean(x||b))||(e.meanline={visible:!1})}}},{"../../components/color":591,"../../lib":717,"../box/defaults":884,"./attributes":1270}],1274:[function(t,e,r){"use strict";var n=t("../../lib"),a=function(t){return 1/Math.sqrt(2*Math.PI)*Math.exp(-.5*t*t)};r.makeKDE=function(t,e,r){var n=r.length,i=a,o=t.bandwidth,s=1/(n*o);return function(t){for(var e=0,a=0;a<n;a++)e+=i((t-r[a])/o);return s*e}},r.getPositionOnKdePath=function(t,e,r){var a,i;"h"===e.orientation?(a="y",i="x"):(a="x",i="y");var o=n.findPointOnPath(t.path,r,i,{pathLength:t.pathLength}),s=t.posCenterPx,l=o[a];return[l,"both"===e.side?2*s-l:s]},r.getKdeValue=function(t,e,n){var a=t.pts.map(r.extractVal);return r.makeKDE(t,e,a)(n)/t.posDensityScale},r.extractVal=function(t){return t.v}},{"../../lib":717}],1275:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../box/hover"),o=t("./helpers");e.exports=function(t,e,r,s,l){var c,u,h=t.cd,f=h[0].trace,p=f.hoveron,d=-1!==p.indexOf("violins"),g=-1!==p.indexOf("kde"),v=[];if(d||g){var m=i.hoverOnBoxes(t,e,r,s);if(g&&m.length>0){var y,x,b,_,w,k=t.xa,T=t.ya;"h"===f.orientation?(w=e,y="y",b=T,x="x",_=k):(w=r,y="x",b=k,x="y",_=T);var M=h[t.index];if(w>=M.span[0]&&w<=M.span[1]){var A=n.extendFlat({},t),S=_.c2p(w,!0),E=o.getKdeValue(M,f,w),L=o.getPositionOnKdePath(M,f,S),C=b._offset,P=b._length;A[y+"0"]=L[0],A[y+"1"]=L[1],A[x+"0"]=A[x+"1"]=S,A[x+"Label"]=x+": "+a.hoverLabelText(_,w)+", "+h[0].t.labels.kde+" "+E.toFixed(3),A.spikeDistance=m[0].spikeDistance;var O=y+"Spike";A[O]=m[0][O],m[0].spikeDistance=void 0,m[0][O]=void 0,A.hovertemplate=!1,v.push(A),(u={stroke:t.color})[y+"1"]=n.constrain(C+L[0],C,C+P),u[y+"2"]=n.constrain(C+L[1],C,C+P),u[x+"1"]=u[x+"2"]=_._offset+S}}d&&(v=v.concat(m))}-1!==p.indexOf("points")&&(c=i.hoverOnPoints(t,e,r));var z=l.selectAll(".violinline-"+f.uid).data(u?[0]:[]);return z.enter().append("line").classed("violinline-"+f.uid,!0).attr("stroke-width",1.5),z.exit().remove(),z.attr(u),"closest"===s?c?[c]:v:c?(v.push(c),v):v}},{"../../lib":717,"../../plots/cartesian/axes":765,"../box/hover":886,"./helpers":1274}],1276:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults"),crossTraceDefaults:t("../box/defaults").crossTraceDefaults,supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc"),crossTraceCalc:t("./cross_trace_calc"),plot:t("./plot"),style:t("./style"),styleOnSelect:t("../scatter/style").styleOnSelect,hoverPoints:t("./hover"),selectPoints:t("../box/select"),moduleType:"trace",name:"violin",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","symbols","oriented","box-violin","showLegend","violinLayout","zoomScale"],meta:{}}},{"../../plots/cartesian":776,"../box/defaults":884,"../box/select":891,"../scatter/style":1143,"./attributes":1270,"./calc":1271,"./cross_trace_calc":1272,"./defaults":1273,"./hover":1275,"./layout_attributes":1277,"./layout_defaults":1278,"./plot":1279,"./style":1280}],1277:[function(t,e,r){"use strict";var n=t("../box/layout_attributes"),a=t("../../lib").extendFlat;e.exports={violinmode:a({},n.boxmode,{}),violingap:a({},n.boxgap,{}),violingroupgap:a({},n.boxgroupgap,{})}},{"../../lib":717,"../box/layout_attributes":888}],1278:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes"),i=t("../box/layout_defaults");e.exports=function(t,e,r){i._supply(t,e,r,function(r,i){return n.coerce(t,e,a,r,i)},"violin")}},{"../../lib":717,"../box/layout_defaults":889,"./layout_attributes":1277}],1279:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../components/drawing"),o=t("../box/plot"),s=t("../scatter/line_points"),l=t("./helpers");e.exports=function(t,e,r,c){var u=t._fullLayout,h=e.xaxis,f=e.yaxis;function p(t){var e=s(t,{xaxis:h,yaxis:f,connectGaps:!0,baseTolerance:.75,shape:"spline",simplify:!0,linearized:!0});return i.smoothopen(e[0],1)}a.makeTraceGroups(c,r,"trace violins").each(function(t){var r=n.select(this),i=t[0],s=i.t,c=i.trace;if(!0!==c.visible||s.empty)r.remove();else{var d=s.bPos,g=s.bdPos,v=e[s.valLetter+"axis"],m=e[s.posLetter+"axis"],y="both"===c.side,x=y||"positive"===c.side,b=y||"negative"===c.side,_=r.selectAll("path.violin").data(a.identity);_.enter().append("path").style("vector-effect","non-scaling-stroke").attr("class","violin"),_.exit().remove(),_.each(function(t){var e,r,a,i,o,l,h,f,_=n.select(this),w=t.density,k=w.length,T=m.c2l(t.pos+d,!0),M=m.l2p(T);if(c.width)e=s.maxKDE/g;else{var A=u._violinScaleGroupStats[c.scalegroup];e="count"===c.scalemode?A.maxKDE/g*(A.maxCount/t.pts.length):A.maxKDE/g}if(x){for(h=new Array(k),o=0;o<k;o++)(f=h[o]={})[s.posLetter]=T+w[o].v/e,f[s.valLetter]=v.c2l(w[o].t,!0);r=p(h)}if(b){for(h=new Array(k),l=0,o=k-1;l<k;l++,o--)(f=h[l]={})[s.posLetter]=T-w[o].v/e,f[s.valLetter]=v.c2l(w[o].t,!0);a=p(h)}if(y)i=r+"L"+a.substr(1)+"Z";else{var S=[M,v.c2p(w[0].t)],E=[M,v.c2p(w[k-1].t)];"h"===c.orientation&&(S.reverse(),E.reverse()),i=x?"M"+S+"L"+r.substr(1)+"L"+E:"M"+E+"L"+a.substr(1)+"L"+S}_.attr("d",i),t.posCenterPx=M,t.posDensityScale=e*g,t.path=_.node(),t.pathLength=t.path.getTotalLength()/(y?2:1)});var w,k,T,M=c.box,A=M.width,S=(M.line||{}).width;y?(w=g*A,k=0):x?(w=[0,g*A/2],k=S*{x:1,y:-1}[s.posLetter]):(w=[g*A/2,0],k=S*{x:-1,y:1}[s.posLetter]),o.plotBoxAndWhiskers(r,{pos:m,val:v},c,{bPos:d,bdPos:w,bPosPxOffset:k}),o.plotBoxMean(r,{pos:m,val:v},c,{bPos:d,bdPos:w,bPosPxOffset:k}),!c.box.visible&&c.meanline.visible&&(T=a.identity);var E=r.selectAll("path.meanline").data(T||[]);E.enter().append("path").attr("class","meanline").style("fill","none").style("vector-effect","non-scaling-stroke"),E.exit().remove(),E.each(function(t){var e=v.c2p(t.mean,!0),r=l.getPositionOnKdePath(t,c,e);n.select(this).attr("d","h"===c.orientation?"M"+e+","+r[0]+"V"+r[1]:"M"+r[0]+","+e+"H"+r[1])}),o.plotPoints(r,{x:h,y:f},c,s)}})}},{"../../components/drawing":612,"../../lib":717,"../box/plot":890,"../scatter/line_points":1134,"./helpers":1274,d3:165}],1280:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/color"),i=t("../scatter/style").stylePoints;e.exports=function(t){var e=n.select(t).selectAll("g.trace.violins");e.style("opacity",function(t){return t[0].trace.opacity}),e.each(function(e){var r=e[0].trace,o=n.select(this),s=r.box||{},l=s.line||{},c=r.meanline||{},u=c.width;o.selectAll("path.violin").style("stroke-width",r.line.width+"px").call(a.stroke,r.line.color).call(a.fill,r.fillcolor),o.selectAll("path.box").style("stroke-width",l.width+"px").call(a.stroke,l.color).call(a.fill,s.fillcolor);var h={"stroke-width":u+"px","stroke-dasharray":2*u+"px,"+u+"px"};o.selectAll("path.mean").style(h).call(a.stroke,c.color),o.selectAll("path.meanline").style(h).call(a.stroke,c.color),i(o,r,t)})}},{"../../components/color":591,"../scatter/style":1143,d3:165}],1281:[function(t,e,r){"use strict";var n=t("../../components/colorscale/attributes"),a=t("../isosurface/attributes"),i=t("../surface/attributes"),o=t("../../plots/attributes"),s=t("../../lib/extend").extendFlat,l=t("../../plot_api/edit_types").overrideAll,c=e.exports=l(s({x:a.x,y:a.y,z:a.z,value:a.value,isomin:a.isomin,isomax:a.isomax,surface:a.surface,spaceframe:{show:{valType:"boolean",dflt:!1},fill:{valType:"number",min:0,max:1,dflt:1}},slices:a.slices,caps:a.caps,text:a.text,hovertext:a.hovertext,hovertemplate:a.hovertemplate},n("",{colorAttr:"`value`",showScaleDflt:!0,editTypeOverride:"calc"}),{colorbar:a.colorbar,opacity:a.opacity,opacityscale:i.opacityscale,lightposition:a.lightposition,lighting:a.lighting,flatshading:a.flatshading,contour:a.contour,hoverinfo:s({},o.hoverinfo),showlegend:s({},o.showlegend,{dflt:!1})}),"calc","nested");c.x.editType=c.y.editType=c.z.editType=c.value.editType="calc+clearAxisTypes",c.transforms=void 0},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/attributes":762,"../isosurface/attributes":1056,"../surface/attributes":1243}],1282:[function(t,e,r){"use strict";var n=t("gl-mesh3d"),a=t("../../lib/gl_format_color").parseColorScale,i=t("../../lib/str2rgbarray"),o=t("../../components/colorscale").extractOpts,s=t("../../plots/gl3d/zip3"),l=t("../isosurface/convert").findNearestOnAxis,c=t("../isosurface/convert").generateIsoMeshes;function u(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name="",this.data=null,this.showContour=!1}var h=u.prototype;h.handlePick=function(t){if(t.object===this.mesh){var e=t.data.index,r=this.data._meshX[e],n=this.data._meshY[e],a=this.data._meshZ[e],i=this.data._Ys.length,o=this.data._Zs.length,s=l(r,this.data._Xs).id,c=l(n,this.data._Ys).id,u=l(a,this.data._Zs).id,h=t.index=u+o*c+o*i*s;t.traceCoordinate=[this.data._meshX[h],this.data._meshY[h],this.data._meshZ[h],this.data._value[h]];var f=this.data.hovertext||this.data.text;return Array.isArray(f)&&void 0!==f[h]?t.textLabel=f[h]:f&&(t.textLabel=f),!0}},h.update=function(t){var e=this.scene,r=e.fullSceneLayout;function n(t,e,r,n){return e.map(function(e){return t.d2l(e,0,n)*r})}this.data=c(t);var l={positions:s(n(r.xaxis,t._meshX,e.dataScale[0],t.xcalendar),n(r.yaxis,t._meshY,e.dataScale[1],t.ycalendar),n(r.zaxis,t._meshZ,e.dataScale[2],t.zcalendar)),cells:s(t._meshI,t._meshJ,t._meshK),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,opacityscale:t.opacityscale,contourEnable:t.contour.show,contourColor:i(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading},u=o(t);l.vertexIntensity=t._meshIntensity,l.vertexIntensityBounds=[u.min,u.max],l.colormap=a(t),this.mesh.update(l)},h.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var r=t.glplot.gl,a=n({gl:r}),i=new u(t,a,e.uid);return a._trace=i,i.update(e),t.glplot.add(a),i}},{"../../components/colorscale":603,"../../lib/gl_format_color":714,"../../lib/str2rgbarray":740,"../../plots/gl3d/zip3":816,"../isosurface/convert":1058,"gl-mesh3d":283}],1283:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("../isosurface/defaults").supplyIsoDefaults,o=t("../surface/defaults").opacityscaleDefaults;e.exports=function(t,e,r,s){function l(r,i){return n.coerce(t,e,a,r,i)}i(t,e,r,s,l),o(t,e,s,l)}},{"../../lib":717,"../isosurface/defaults":1059,"../surface/defaults":1246,"./attributes":1281}],1284:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("../isosurface/calc"),colorbar:{min:"cmin",max:"cmax"},plot:t("./convert"),moduleType:"trace",name:"volume",basePlotModule:t("../../plots/gl3d"),categories:["gl3d","showLegend"],meta:{}}},{"../../plots/gl3d":805,"../isosurface/calc":1057,"./attributes":1281,"./convert":1282,"./defaults":1283}],1285:[function(t,e,r){"use strict";var n=t("../bar/attributes"),a=t("../scatter/attributes").line,i=t("../../plots/attributes"),o=t("../../plots/template_attributes").hovertemplateAttrs,s=t("../../plots/template_attributes").texttemplateAttrs,l=t("./constants"),c=t("../../lib/extend").extendFlat,u=t("../../components/color");function h(t){return{marker:{color:c({},n.marker.color,{arrayOk:!1,editType:"style"}),line:{color:c({},n.marker.line.color,{arrayOk:!1,editType:"style"}),width:c({},n.marker.line.width,{arrayOk:!1,editType:"style"}),editType:"style"},editType:"style"},editType:"style"}}e.exports={measure:{valType:"data_array",dflt:[],editType:"calc"},base:{valType:"number",dflt:null,arrayOk:!1,editType:"calc"},x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,hovertext:n.hovertext,hovertemplate:o({},{keys:l.eventDataKeys}),hoverinfo:c({},i.hoverinfo,{flags:["name","x","y","text","initial","delta","final"]}),textinfo:{valType:"flaglist",flags:["label","text","initial","delta","final"],extras:["none"],editType:"plot",arrayOk:!1},texttemplate:s({editType:"plot"},{keys:l.eventDataKeys.concat(["label"])}),text:n.text,textposition:n.textposition,insidetextanchor:n.insidetextanchor,textangle:n.textangle,textfont:n.textfont,insidetextfont:n.insidetextfont,outsidetextfont:n.outsidetextfont,constraintext:n.constraintext,cliponaxis:n.cliponaxis,orientation:n.orientation,offset:n.offset,width:n.width,increasing:h(),decreasing:h(),totals:h(),connector:{line:{color:c({},a.color,{dflt:u.defaultLine}),width:c({},a.width,{editType:"plot"}),dash:a.dash,editType:"plot"},mode:{valType:"enumerated",values:["spanning","between"],dflt:"between",editType:"plot"},visible:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup}},{"../../components/color":591,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../bar/attributes":856,"../scatter/attributes":1120,"./constants":1287}],1286:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../lib").mergeArray,i=t("../scatter/calc_selection"),o=t("../../constants/numerical").BADNUM;function s(t){return"a"===t||"absolute"===t}function l(t){return"t"===t||"total"===t}e.exports=function(t,e){var r,c,u=n.getFromId(t,e.xaxis||"x"),h=n.getFromId(t,e.yaxis||"y");"h"===e.orientation?(r=u.makeCalcdata(e,"x"),c=h.makeCalcdata(e,"y")):(r=h.makeCalcdata(e,"y"),c=u.makeCalcdata(e,"x"));for(var f,p=Math.min(c.length,r.length),d=new Array(p),g=0,v=!1,m=0;m<p;m++){var y=r[m]||0,x=!1;(r[m]!==o||l(e.measure[m])||s(e.measure[m]))&&m+1<p&&(r[m+1]!==o||l(e.measure[m+1])||s(e.measure[m+1]))&&(x=!0);var b=d[m]={i:m,p:c[m],s:y,rawS:y,cNext:x};s(e.measure[m])?(g=b.s,b.isSum=!0,b.dir="totals",b.s=g):l(e.measure[m])?(b.isSum=!0,b.dir="totals",b.s=g):(b.isSum=!1,b.dir=b.rawS<0?"decreasing":"increasing",f=b.s,b.s=g+f,g+=f),"totals"===b.dir&&(v=!0),e.ids&&(b.id=String(e.ids[m])),b.v=(e.base||0)+g}return d.length&&(d[0].hasTotals=v),a(e.text,d,"tx"),a(e.hovertext,d,"htx"),i(d,e),d}},{"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/axes":765,"../scatter/calc_selection":1122}],1287:[function(t,e,r){"use strict";e.exports={eventDataKeys:["initial","delta","final"]}},{}],1288:[function(t,e,r){"use strict";var n=t("../bar/cross_trace_calc").setGroupPositions;e.exports=function(t,e){var r,a,i=t._fullLayout,o=t._fullData,s=t.calcdata,l=e.xaxis,c=e.yaxis,u=[],h=[],f=[];for(a=0;a<o.length;a++){var p=o[a];!0===p.visible&&p.xaxis===l._id&&p.yaxis===c._id&&"waterfall"===p.type&&(r=s[a],"h"===p.orientation?f.push(r):h.push(r),u.push(r))}var d={mode:i.waterfallmode,norm:i.waterfallnorm,gap:i.waterfallgap,groupgap:i.waterfallgroupgap};for(n(t,l,c,h,d),n(t,c,l,f,d),a=0;a<u.length;a++){r=u[a];for(var g=0;g<r.length;g++){var v=r[g];!1===v.isSum&&(v.s0+=0===g?0:r[g-1].s),g+1<r.length&&(r[g].nextP0=r[g+1].p0,r[g].nextS0=r[g+1].s0)}}}},{"../bar/cross_trace_calc":859}],1289:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../bar/defaults").handleGroupingDefaults,i=t("../bar/defaults").handleText,o=t("../scatter/xy_defaults"),s=t("./attributes"),l=t("../../components/color"),c=t("../../constants/delta.js"),u=c.INCREASING.COLOR,h=c.DECREASING.COLOR,f="#4499FF";function p(t,e,r){t(e+".marker.color",r),t(e+".marker.line.color",l.defaultLine),t(e+".marker.line.width")}e.exports={supplyDefaults:function(t,e,r,a){function l(r,a){return n.coerce(t,e,s,r,a)}if(o(t,e,a,l)){l("measure"),l("orientation",e.x&&!e.y?"h":"v"),l("base"),l("offset"),l("width"),l("text"),l("hovertext"),l("hovertemplate");var c=l("textposition");i(t,e,a,l,c,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),"none"!==e.textposition&&(l("texttemplate"),e.texttemplate||l("textinfo")),p(l,"increasing",u),p(l,"decreasing",h),p(l,"totals",f),l("connector.visible")&&(l("connector.mode"),l("connector.line.width")&&(l("connector.line.color"),l("connector.line.dash")))}else e.visible=!1},crossTraceDefaults:function(t,e){var r,i;function o(t){return n.coerce(i._input,i,s,t)}if("group"===e.waterfallmode)for(var l=0;l<t.length;l++)r=(i=t[l])._input,a(r,i,e,o)}}},{"../../components/color":591,"../../constants/delta.js":687,"../../lib":717,"../bar/defaults":860,"../scatter/xy_defaults":1146,"./attributes":1285}],1290:[function(t,e,r){"use strict";e.exports=function(t,e){return t.x="xVal"in e?e.xVal:e.x,t.y="yVal"in e?e.yVal:e.y,"initial"in e&&(t.initial=e.initial),"delta"in e&&(t.delta=e.delta),"final"in e&&(t.final=e.final),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},{}],1291:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes").hoverLabelText,a=t("../../components/color").opacity,i=t("../bar/hover").hoverOnBars,o=t("../../constants/delta.js"),s=o.INCREASING.SYMBOL,l=o.DECREASING.SYMBOL;e.exports=function(t,e,r,o){var c=i(t,e,r,o);if(c){var u=c.cd,h=u[0].trace,f="h"===h.orientation,p=f?t.xa:t.ya,d=u[c.index],g=d.isSum?d.b+d.s:d.rawS;if(!d.isSum){c.initial=d.b+d.s-g,c.delta=g,c.final=c.initial+c.delta;var v=w(Math.abs(c.delta));c.deltaLabel=g<0?"("+v+")":v,c.finalLabel=w(c.final),c.initialLabel=w(c.initial)}var m=d.hi||h.hoverinfo,y=[];if(m&&"none"!==m&&"skip"!==m){var x="all"===m,b=m.split("+"),_=function(t){return x||-1!==b.indexOf(t)};d.isSum||(!_("final")||_(f?"x":"y")||y.push(c.finalLabel),_("delta")&&(g<0?y.push(c.deltaLabel+" "+l):y.push(c.deltaLabel+" "+s)),_("initial")&&y.push("Initial: "+c.initialLabel))}return y.length&&(c.extraText=y.join("<br>")),c.color=function(t,e){var r=t[e.dir].marker,n=r.color,i=r.line.color,o=r.line.width;if(a(n))return n;if(a(i)&&o)return i}(h,d),[c]}function w(t){return n(p,t)}}},{"../../components/color":591,"../../constants/delta.js":687,"../../plots/cartesian/axes":765,"../bar/hover":863}],1292:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults").supplyDefaults,crossTraceDefaults:t("./defaults").crossTraceDefaults,supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc"),crossTraceCalc:t("./cross_trace_calc"),plot:t("./plot"),style:t("./style").style,hoverPoints:t("./hover"),eventData:t("./event_data"),selectPoints:t("../bar/select"),moduleType:"trace",name:"waterfall",basePlotModule:t("../../plots/cartesian"),categories:["bar-like","cartesian","svg","oriented","showLegend","zoomScale"],meta:{}}},{"../../plots/cartesian":776,"../bar/select":868,"./attributes":1285,"./calc":1286,"./cross_trace_calc":1288,"./defaults":1289,"./event_data":1290,"./hover":1291,"./layout_attributes":1293,"./layout_defaults":1294,"./plot":1295,"./style":1296}],1293:[function(t,e,r){"use strict";e.exports={waterfallmode:{valType:"enumerated",values:["group","overlay"],dflt:"group",editType:"calc"},waterfallgap:{valType:"number",min:0,max:1,editType:"calc"},waterfallgroupgap:{valType:"number",min:0,max:1,dflt:0,editType:"calc"}}},{}],1294:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e,r){var i=!1;function o(r,i){return n.coerce(t,e,a,r,i)}for(var s=0;s<r.length;s++){var l=r[s];if(l.visible&&"waterfall"===l.type){i=!0;break}}i&&(o("waterfallmode"),o("waterfallgap",.2),o("waterfallgroupgap"))}},{"../../lib":717,"./layout_attributes":1293}],1295:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../components/drawing"),o=t("../../constants/numerical").BADNUM,s=t("../bar/plot"),l=t("../bar/uniform_text").clearMinTextSize;e.exports=function(t,e,r,c){var u=t._fullLayout;l("waterfall",u),s.plot(t,e,r,c,{mode:u.waterfallmode,norm:u.waterfallmode,gap:u.waterfallgap,groupgap:u.waterfallgroupgap}),function(t,e,r,s){var l=e.xaxis,c=e.yaxis;a.makeTraceGroups(s,r,"trace bars").each(function(r){var s=n.select(this),u=r[0].trace,h=a.ensureSingle(s,"g","lines");if(u.connector&&u.connector.visible){var f="h"===u.orientation,p=u.connector.mode,d=h.selectAll("g.line").data(a.identity);d.enter().append("g").classed("line",!0),d.exit().remove();var g=d.size();d.each(function(r,s){if(s===g-1||r.cNext){var u=function(t,e,r,n){var a=[],i=[],o=n?e:r,s=n?r:e;return a[0]=o.c2p(t.s0,!0),i[0]=s.c2p(t.p0,!0),a[1]=o.c2p(t.s1,!0),i[1]=s.c2p(t.p1,!0),a[2]=o.c2p(t.nextS0,!0),i[2]=s.c2p(t.nextP0,!0),n?[a,i]:[i,a]}(r,l,c,f),h=u[0],d=u[1],v="";h[0]!==o&&d[0]!==o&&h[1]!==o&&d[1]!==o&&("spanning"===p&&!r.isSum&&s>0&&(v+=f?"M"+h[0]+","+d[1]+"V"+d[0]:"M"+h[1]+","+d[0]+"H"+h[0]),"between"!==p&&(r.isSum||s<g-1)&&(v+=f?"M"+h[1]+","+d[0]+"V"+d[1]:"M"+h[0]+","+d[1]+"H"+h[1]),h[2]!==o&&d[2]!==o&&(v+=f?"M"+h[1]+","+d[1]+"V"+d[2]:"M"+h[1]+","+d[1]+"H"+h[2])),""===v&&(v="M0,0Z"),a.ensureSingle(n.select(this),"path").attr("d",v).call(i.setClipUrl,e.layerClipId,t)}})}else h.remove()})}(t,e,r,c)}},{"../../components/drawing":612,"../../constants/numerical":693,"../../lib":717,"../bar/plot":867,"../bar/uniform_text":872,d3:165}],1296:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/drawing"),i=t("../../components/color"),o=t("../../constants/interactions").DESELECTDIM,s=t("../bar/style"),l=t("../bar/uniform_text").resizeText,c=s.styleTextPoints;e.exports={style:function(t,e,r){var s=r||n.select(t).selectAll("g.waterfalllayer").selectAll("g.trace");l(t,s,"waterfall"),s.style("opacity",function(t){return t[0].trace.opacity}),s.each(function(e){var r=n.select(this),s=e[0].trace;r.selectAll(".point > path").each(function(t){if(!t.isBlank){var e=s[t.dir].marker;n.select(this).call(i.fill,e.color).call(i.stroke,e.line.color).call(a.dashLine,e.line.dash,e.line.width).style("opacity",s.selectedpoints&&!t.selected?o:1)}}),c(r,s,t),r.selectAll(".lines").each(function(){var t=s.connector.line;a.lineGroupStyle(n.select(this).selectAll("path"),t.width,t.color,t.dash)})})}}},{"../../components/color":591,"../../components/drawing":612,"../../constants/interactions":692,"../bar/style":870,"../bar/uniform_text":872,d3:165}],1297:[function(t,e,r){"use strict";var n=t("../plots/cartesian/axes"),a=t("../lib"),i=t("../plot_api/plot_schema"),o=t("./helpers").pointsAccessorFunction,s=t("../constants/numerical").BADNUM;r.moduleType="transform",r.name="aggregate";var l=r.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},groups:{valType:"string",strict:!0,noBlank:!0,arrayOk:!0,dflt:"x",editType:"calc"},aggregations:{_isLinkedToArray:"aggregation",target:{valType:"string",editType:"calc"},func:{valType:"enumerated",values:["count","sum","avg","median","mode","rms","stddev","min","max","first","last","change","range"],dflt:"first",editType:"calc"},funcmode:{valType:"enumerated",values:["sample","population"],dflt:"sample",editType:"calc"},enabled:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc"},editType:"calc"},c=l.aggregations;function u(t,e,r,i){if(i.enabled){for(var o=i.target,l=a.nestedProperty(e,o),c=l.get(),u=function(t,e){var r=t.func,n=e.d2c,a=e.c2d;switch(r){case"count":return h;case"first":return f;case"last":return p;case"sum":return function(t,e){for(var r=0,i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&(r+=o)}return a(r)};case"avg":return function(t,e){for(var r=0,i=0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r+=l,i++)}return i?a(r/i):s};case"min":return function(t,e){for(var r=1/0,i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&(r=Math.min(r,o))}return r===1/0?s:a(r)};case"max":return function(t,e){for(var r=-1/0,i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&(r=Math.max(r,o))}return r===-1/0?s:a(r)};case"range":return function(t,e){for(var r=1/0,i=-1/0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r=Math.min(r,l),i=Math.max(i,l))}return i===-1/0||r===1/0?s:a(i-r)};case"change":return function(t,e){var r=n(t[e[0]]),i=n(t[e[e.length-1]]);return r===s||i===s?s:a(i-r)};case"median":return function(t,e){for(var r=[],i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&r.push(o)}if(!r.length)return s;r.sort();var l=(r.length-1)/2;return a((r[Math.floor(l)]+r[Math.ceil(l)])/2)};case"mode":return function(t,e){for(var r={},i=0,o=s,l=0;l<e.length;l++){var c=n(t[e[l]]);if(c!==s){var u=r[c]=(r[c]||0)+1;u>i&&(i=u,o=c)}}return i?a(o):s};case"rms":return function(t,e){for(var r=0,i=0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r+=l*l,i++)}return i?a(Math.sqrt(r/i)):s};case"stddev":return function(e,r){var a,i=0,o=0,l=1,c=s;for(a=0;a<r.length&&c===s;a++)c=n(e[r[a]]);if(c===s)return s;for(;a<r.length;a++){var u=n(e[r[a]]);if(u!==s){var h=u-c;i+=h,o+=h*h,l++}}var f="sample"===t.funcmode?l-1:l;return f?Math.sqrt((o-i*i/l)/f):0}}}(i,n.getDataConversions(t,e,o,c)),d=new Array(r.length),g=0;g<r.length;g++)d[g]=u(c,r[g]);l.set(d),"count"===i.func&&a.pushUnique(e._arrayAttrs,o)}}function h(t,e){return e.length}function f(t,e){return t[e[0]]}function p(t,e){return t[e[e.length-1]]}r.supplyDefaults=function(t,e){var r,n={};function o(e,r){return a.coerce(t,n,l,e,r)}if(!o("enabled"))return n;var s=i.findArrayAttributes(e),u={};for(r=0;r<s.length;r++)u[s[r]]=1;var h=o("groups");if(!Array.isArray(h)){if(!u[h])return n.enabled=!1,n;u[h]=0}var f,p=t.aggregations||[],d=n.aggregations=new Array(p.length);function g(t,e){return a.coerce(p[r],f,c,t,e)}for(r=0;r<p.length;r++){f={_index:r};var v=g("target"),m=g("func");g("enabled")&&v&&(u[v]||"count"===m&&void 0===u[v])?("stddev"===m&&g("funcmode"),u[v]=0,d[r]=f):d[r]={enabled:!1,_index:r}}for(r=0;r<s.length;r++)u[s[r]]&&d.push({target:s[r],func:c.func.dflt,enabled:!0,_index:-1});return n},r.calcTransform=function(t,e,r){if(r.enabled){var n=r.groups,i=a.getTargetArray(e,{target:n});if(i){var s,l,c,h,f={},p={},d=[],g=o(e.transforms,r),v=i.length;for(e._length&&(v=Math.min(v,e._length)),s=0;s<v;s++)void 0===(c=f[l=i[s]])?(f[l]=d.length,h=[s],d.push(h),p[f[l]]=g(s)):(d[c].push(s),p[f[l]]=(p[f[l]]||[]).concat(g(s)));r._indexToPoints=p;var m=r.aggregations;for(s=0;s<m.length;s++)u(t,e,d,m[s]);"string"==typeof n&&u(t,e,d,{target:n,func:"first",enabled:!0}),e._length=d.length}}}},{"../constants/numerical":693,"../lib":717,"../plot_api/plot_schema":754,"../plots/cartesian/axes":765,"./helpers":1300}],1298:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../registry"),i=t("../plots/cartesian/axes"),o=t("./helpers").pointsAccessorFunction,s=t("../constants/filter_ops"),l=s.COMPARISON_OPS,c=s.INTERVAL_OPS,u=s.SET_OPS;r.moduleType="transform",r.name="filter",r.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},target:{valType:"string",strict:!0,noBlank:!0,arrayOk:!0,dflt:"x",editType:"calc"},operation:{valType:"enumerated",values:[].concat(l).concat(c).concat(u),dflt:"=",editType:"calc"},value:{valType:"any",dflt:0,editType:"calc"},preservegaps:{valType:"boolean",dflt:!1,editType:"calc"},editType:"calc"},r.supplyDefaults=function(t){var e={};function i(a,i){return n.coerce(t,e,r.attributes,a,i)}if(i("enabled")){var o=i("target");if(n.isArrayOrTypedArray(o)&&0===o.length)return e.enabled=!1,e;i("preservegaps"),i("operation"),i("value");var s=a.getComponentMethod("calendars","handleDefaults");s(t,e,"valuecalendar",null),s(t,e,"targetcalendar",null)}return e},r.calcTransform=function(t,e,r){if(r.enabled){var a=n.getTargetArray(e,r);if(a){var s=r.target,h=a.length;e._length&&(h=Math.min(h,e._length));var f=r.targetcalendar,p=e._arrayAttrs,d=r.preservegaps;if("string"==typeof s){var g=n.nestedProperty(e,s+"calendar").get();g&&(f=g)}var v,m,y=function(t,e,r){var n=t.operation,a=t.value,i=Array.isArray(a);function o(t){return-1!==t.indexOf(n)}var s,h=function(r){return e(r,0,t.valuecalendar)},f=function(t){return e(t,0,r)};o(l)?s=h(i?a[0]:a):o(c)?s=i?[h(a[0]),h(a[1])]:[h(a),h(a)]:o(u)&&(s=i?a.map(h):[h(a)]);switch(n){case"=":return function(t){return f(t)===s};case"!=":return function(t){return f(t)!==s};case"<":return function(t){return f(t)<s};case"<=":return function(t){return f(t)<=s};case">":return function(t){return f(t)>s};case">=":return function(t){return f(t)>=s};case"[]":return function(t){var e=f(t);return e>=s[0]&&e<=s[1]};case"()":return function(t){var e=f(t);return e>s[0]&&e<s[1]};case"[)":return function(t){var e=f(t);return e>=s[0]&&e<s[1]};case"(]":return function(t){var e=f(t);return e>s[0]&&e<=s[1]};case"][":return function(t){var e=f(t);return e<=s[0]||e>=s[1]};case")(":return function(t){var e=f(t);return e<s[0]||e>s[1]};case"](":return function(t){var e=f(t);return e<=s[0]||e>s[1]};case")[":return function(t){var e=f(t);return e<s[0]||e>=s[1]};case"{}":return function(t){return-1!==s.indexOf(f(t))};case"}{":return function(t){return-1===s.indexOf(f(t))}}}(r,i.getDataToCoordFunc(t,e,s,a),f),x={},b={},_=0;d?(v=function(t){x[t.astr]=n.extendDeep([],t.get()),t.set(new Array(h))},m=function(t,e){var r=x[t.astr][e];t.get()[e]=r}):(v=function(t){x[t.astr]=n.extendDeep([],t.get()),t.set([])},m=function(t,e){var r=x[t.astr][e];t.get().push(r)}),T(v);for(var w=o(e.transforms,r),k=0;k<h;k++){y(a[k])?(T(m,k),b[_++]=w(k)):d&&_++}r._indexToPoints=b,e._length=_}}function T(t,r){for(var a=0;a<p.length;a++){t(n.nestedProperty(e,p[a]),r)}}}},{"../constants/filter_ops":689,"../lib":717,"../plots/cartesian/axes":765,"../registry":846,"./helpers":1300}],1299:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../plot_api/plot_schema"),i=t("../plots/plots"),o=t("./helpers").pointsAccessorFunction;function s(t,e){var r,s,l,c,u,h,f,p,d,g,v=e.transform,m=e.transformIndex,y=t.transforms[m].groups,x=o(t.transforms,v);if(!n.isArrayOrTypedArray(y)||0===y.length)return[t];var b=n.filterUnique(y),_=new Array(b.length),w=y.length,k=a.findArrayAttributes(t),T=v.styles||[],M={};for(r=0;r<T.length;r++)M[T[r].target]=T[r].value;v.styles&&(g=n.keyedContainer(v,"styles","target","value.name"));var A={},S={};for(r=0;r<b.length;r++){A[h=b[r]]=r,S[h]=0,(f=_[r]=n.extendDeepNoArrays({},t))._group=h,f.transforms[m]._indexToPoints={};var E=null;for(g&&(E=g.get(h)),f.name=E||""===E?E:n.templateString(v.nameformat,{trace:t.name,group:h}),p=f.transforms,f.transforms=[],s=0;s<p.length;s++)f.transforms[s]=n.extendDeepNoArrays({},p[s]);for(s=0;s<k.length;s++)n.nestedProperty(f,k[s]).set([])}for(l=0;l<k.length;l++){for(c=k[l],s=0,d=[];s<b.length;s++)d[s]=n.nestedProperty(_[s],c).get();for(u=n.nestedProperty(t,c).get(),s=0;s<w;s++)d[A[y[s]]].push(u[s])}for(s=0;s<w;s++){(f=_[A[y[s]]]).transforms[m]._indexToPoints[S[y[s]]]=x(s),S[y[s]]++}for(r=0;r<b.length;r++)h=b[r],f=_[r],i.clearExpandedTraceDefaultColors(f),f=n.extendDeepNoArrays(f,M[h]||{});return _}r.moduleType="transform",r.name="groupby",r.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},groups:{valType:"data_array",dflt:[],editType:"calc"},nameformat:{valType:"string",editType:"calc"},styles:{_isLinkedToArray:"style",target:{valType:"string",editType:"calc"},value:{valType:"any",dflt:{},editType:"calc",_compareAsJSON:!0},editType:"calc"},editType:"calc"},r.supplyDefaults=function(t,e,a){var i,o={};function s(e,a){return n.coerce(t,o,r.attributes,e,a)}if(!s("enabled"))return o;s("groups"),s("nameformat",a._dataLength>1?"%{group} (%{trace})":"%{group}");var l=t.styles,c=o.styles=[];if(l)for(i=0;i<l.length;i++){var u=c[i]={};n.coerce(l[i],c[i],r.attributes.styles,"target");var h=n.coerce(l[i],c[i],r.attributes.styles,"value");n.isPlainObject(h)?u.value=n.extendDeep({},h):h&&delete u.value}return o},r.transform=function(t,e){var r,n,a,i=[];for(n=0;n<t.length;n++)for(r=s(t[n],e),a=0;a<r.length;a++)i.push(r[a]);return i}},{"../lib":717,"../plot_api/plot_schema":754,"../plots/plots":826,"./helpers":1300}],1300:[function(t,e,r){"use strict";r.pointsAccessorFunction=function(t,e){for(var r,n,a=0;a<t.length&&(r=t[a])!==e;a++)r._indexToPoints&&!1!==r.enabled&&(n=r._indexToPoints);return n?function(t){return n[t]}:function(t){return[t]}}},{}],1301:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../plots/cartesian/axes"),i=t("./helpers").pointsAccessorFunction;r.moduleType="transform",r.name="sort",r.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},target:{valType:"string",strict:!0,noBlank:!0,arrayOk:!0,dflt:"x",editType:"calc"},order:{valType:"enumerated",values:["ascending","descending"],dflt:"ascending",editType:"calc"},editType:"calc"},r.supplyDefaults=function(t){var e={};function a(a,i){return n.coerce(t,e,r.attributes,a,i)}return a("enabled")&&(a("target"),a("order")),e},r.calcTransform=function(t,e,r){if(r.enabled){var o=n.getTargetArray(e,r);if(o){var s=r.target,l=o.length;e._length&&(l=Math.min(l,e._length));var c,u,h=e._arrayAttrs,f=function(t,e,r,n){var a,i=new Array(n),o=new Array(n);for(a=0;a<n;a++)i[a]={v:e[a],i:a};for(i.sort(function(t,e){switch(t.order){case"ascending":return function(t,r){return e(t.v)-e(r.v)};case"descending":return function(t,r){return e(r.v)-e(t.v)}}}(t,r)),a=0;a<n;a++)o[a]=i[a].i;return o}(r,o,a.getDataToCoordFunc(t,e,s,o),l),p=i(e.transforms,r),d={};for(c=0;c<h.length;c++){var g=n.nestedProperty(e,h[c]),v=g.get(),m=new Array(l);for(u=0;u<l;u++)m[u]=v[f[u]];g.set(m)}for(u=0;u<l;u++)d[u]=p(f[u]);r._indexToPoints=d,e._length=l}}}},{"../lib":717,"../plots/cartesian/axes":765,"./helpers":1300}],1302:[function(t,e,r){"use strict";r.version="1.53.0"},{}]},{},[26])(26)}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/js_external/shapiro-wilk.js b/wqflask/wqflask/static/new/js_external/shapiro-wilk.js
deleted file mode 100644
index ddc62b72..00000000
--- a/wqflask/wqflask/static/new/js_external/shapiro-wilk.js
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Ported from http://svn.r-project.org/R/trunk/src/library/stats/src/swilk.c
- *
- * R : A Computer Language for Statistical Data Analysis
- * Copyright (C) 2000-12 The R Core Team.
- *
- * Based on Applied Statistics algorithms AS181, R94
- * (C) Royal Statistical Society 1982, 1995
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, a copy is available at
- * http://www.r-project.org/Licenses/
- */
-
-function sign(x) {
- if (x == 0)
- return 0;
- return x > 0 ? 1 : -1;
-}
-
-function ShapiroWilkW(x)
-{
- function poly(cc, nord, x)
- {
- /* Algorithm AS 181.2 Appl. Statist. (1982) Vol. 31, No. 2
- Calculates the algebraic polynomial of order nord-1 with array of coefficients cc.
- Zero order coefficient is cc(1) = cc[0] */
- var p;
- var ret_val;
-
- ret_val = cc[0];
- if (nord > 1) {
- p = x * cc[nord-1];
- for (j = nord - 2; j > 0; j--)
- p = (p + cc[j]) * x;
- ret_val += p;
- }
- return ret_val;
- }
- x = x.sort(function (a, b) { return a - b; });
- var n = x.length;
- if (n < 3)
- return undefined;
- var nn2 = Math.floor(n / 2);
- var a = new Array(Math.floor(nn2) + 1); /* 1-based */
-
-/* ALGORITHM AS R94 APPL. STATIST. (1995) vol.44, no.4, 547-551.
-
- Calculates the Shapiro-Wilk W test and its significance level
-*/
- var small = 1e-19;
-
- /* polynomial coefficients */
- var g = [ -2.273, 0.459 ];
- var c1 = [ 0, 0.221157, -0.147981, -2.07119, 4.434685, -2.706056 ];
- var c2 = [ 0, 0.042981, -0.293762, -1.752461, 5.682633, -3.582633 ];
- var c3 = [ 0.544, -0.39978, 0.025054, -6.714e-4 ];
- var c4 = [ 1.3822, -0.77857, 0.062767, -0.0020322 ];
- var c5 = [ -1.5861, -0.31082, -0.083751, 0.0038915 ];
- var c6 = [ -0.4803, -0.082676, 0.0030302 ];
-
- /* Local variables */
- var i, j, i1;
-
- var ssassx, summ2, ssumm2, gamma, range;
- var a1, a2, an, m, s, sa, xi, sx, xx, y, w1;
- var fac, asa, an25, ssa, sax, rsn, ssx, xsx;
-
- var pw = 1;
- an = n;
-
- if (n == 3)
- a[1] = 0.70710678;/* = sqrt(1/2) */
- else {
- an25 = an + 0.25;
- summ2 = 0.0;
- for (i = 1; i <= nn2; i++) {
- a[i] = jStat.normal.inv((i - 0.375) / an25, 0, 1); // p(X <= x),
- var r__1 = a[i];
- summ2 += r__1 * r__1;
- }
- summ2 *= 2;
- ssumm2 = Math.sqrt(summ2);
- rsn = 1 / Math.sqrt(an);
- a1 = poly(c1, 6, rsn) - a[1] / ssumm2;
-
- /* Normalize a[] */
- if (n > 5) {
- i1 = 3;
- a2 = -a[2] / ssumm2 + poly(c2, 6, rsn);
- fac = Math.sqrt((summ2 - 2 * (a[1] * a[1]) - 2 * (a[2] * a[2])) / (1 - 2 * (a1 * a1) - 2 * (a2 * a2)));
- a[2] = a2;
- } else {
- i1 = 2;
- fac = Math.sqrt((summ2 - 2 * (a[1] * a[1])) / ( 1 - 2 * (a1 * a1)));
- }
- a[1] = a1;
- for (i = i1; i <= nn2; i++)
- a[i] /= - fac;
- }
-
-/* Check for zero range */
-
- range = x[n - 1] - x[0];
- if (range < small) {
- console.log('range is too small!')
- return undefined;
- }
-
-
-/* Check for correct sort order on range - scaled X */
-
- xx = x[0] / range;
- sx = xx;
- sa = -a[1];
- for (i = 1, j = n - 1; i < n; j--) {
- xi = x[i] / range;
- if (xx - xi > small) {
- console.log("xx - xi is too big.", xx - xi);
- return undefined;
- }
- sx += xi;
- i++;
- if (i != j)
- sa += sign(i - j) * a[Math.min(i, j)];
- xx = xi;
- }
- if (n > 5000) {
- console.log("n is too big!")
- return undefined;
- }
-
-
-/* Calculate W statistic as squared correlation
- between data and coefficients */
-
- sa /= n;
- sx /= n;
- ssa = ssx = sax = 0.;
- for (i = 0, j = n - 1; i < n; i++, j--) {
- if (i != j)
- asa = sign(i - j) * a[1 + Math.min(i, j)] - sa;
- else
- asa = -sa;
- xsx = x[i] / range - sx;
- ssa += asa * asa;
- ssx += xsx * xsx;
- sax += asa * xsx;
- }
-
-/* W1 equals (1-W) calculated to avoid excessive rounding error
- for W very near 1 (a potential problem in very large samples) */
-
- ssassx = Math.sqrt(ssa * ssx);
- w1 = (ssassx - sax) * (ssassx + sax) / (ssa * ssx);
- var w = 1 - w1;
-
-/* Calculate significance level for W */
-
- if (n == 3) {/* exact P value : */
- var pi6 = 1.90985931710274; /* = 6/pi */
- var stqr = 1.04719755119660; /* = asin(sqrt(3/4)) */
- pw = pi6 * (Math.asin(Math.sqrt(w)) - stqr);
- if (pw < 0.)
- pw = 0;
- return w;
- }
- y = Math.log(w1);
- xx = Math.log(an);
- if (n <= 11) {
- gamma = poly(g, 2, an);
- if (y >= gamma) {
- pw = 1e-99; /* an "obvious" value, was 'small' which was 1e-19f */
- return w;
- }
- y = -Math.log(gamma - y);
- m = poly(c3, 4, an);
- s = Math.exp(poly(c4, 4, an));
- } else { /* n >= 12 */
- m = poly(c5, 4, xx);
- s = Math.exp(poly(c6, 3, xx));
- }
-
- pw = 0.5 - 0.5 * jStat.erf((y - m) / Math.sqrt(2) / s)
-
- return {w: w, p: pw};
-}
diff --git a/wqflask/wqflask/static/new/js_external/typeahead.bundle.js b/wqflask/wqflask/static/new/js_external/typeahead.bundle.js
deleted file mode 100644
index bb0c8aed..00000000
--- a/wqflask/wqflask/static/new/js_external/typeahead.bundle.js
+++ /dev/null
@@ -1,2451 +0,0 @@
-/*!
- * typeahead.js 0.11.1
- * https://github.com/twitter/typeahead.js
- * Copyright 2013-2015 Twitter, Inc. and other contributors; Licensed MIT
- */
-
-(function(root, factory) {
- if (typeof define === "function" && define.amd) {
- define("bloodhound", [ "jquery" ], function(a0) {
- return root["Bloodhound"] = factory(a0);
- });
- } else if (typeof exports === "object") {
- module.exports = factory(require("jquery"));
- } else {
- root["Bloodhound"] = factory(jQuery);
- }
-})(this, function($) {
- var _ = function() {
- "use strict";
- return {
- isMsie: function() {
- return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false;
- },
- isBlankString: function(str) {
- return !str || /^\s*$/.test(str);
- },
- escapeRegExChars: function(str) {
- return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
- },
- isString: function(obj) {
- return typeof obj === "string";
- },
- isNumber: function(obj) {
- return typeof obj === "number";
- },
- isArray: $.isArray,
- isFunction: $.isFunction,
- isObject: $.isPlainObject,
- isUndefined: function(obj) {
- return typeof obj === "undefined";
- },
- isElement: function(obj) {
- return !!(obj && obj.nodeType === 1);
- },
- isJQuery: function(obj) {
- return obj instanceof $;
- },
- toStr: function toStr(s) {
- return _.isUndefined(s) || s === null ? "" : s + "";
- },
- bind: $.proxy,
- each: function(collection, cb) {
- $.each(collection, reverseArgs);
- function reverseArgs(index, value) {
- return cb(value, index);
- }
- },
- map: $.map,
- filter: $.grep,
- every: function(obj, test) {
- var result = true;
- if (!obj) {
- return result;
- }
- $.each(obj, function(key, val) {
- if (!(result = test.call(null, val, key, obj))) {
- return false;
- }
- });
- return !!result;
- },
- some: function(obj, test) {
- var result = false;
- if (!obj) {
- return result;
- }
- $.each(obj, function(key, val) {
- if (result = test.call(null, val, key, obj)) {
- return false;
- }
- });
- return !!result;
- },
- mixin: $.extend,
- identity: function(x) {
- return x;
- },
- clone: function(obj) {
- return $.extend(true, {}, obj);
- },
- getIdGenerator: function() {
- var counter = 0;
- return function() {
- return counter++;
- };
- },
- templatify: function templatify(obj) {
- return $.isFunction(obj) ? obj : template;
- function template() {
- return String(obj);
- }
- },
- defer: function(fn) {
- setTimeout(fn, 0);
- },
- debounce: function(func, wait, immediate) {
- var timeout, result;
- return function() {
- var context = this, args = arguments, later, callNow;
- later = function() {
- timeout = null;
- if (!immediate) {
- result = func.apply(context, args);
- }
- };
- callNow = immediate && !timeout;
- clearTimeout(timeout);
- timeout = setTimeout(later, wait);
- if (callNow) {
- result = func.apply(context, args);
- }
- return result;
- };
- },
- throttle: function(func, wait) {
- var context, args, timeout, result, previous, later;
- previous = 0;
- later = function() {
- previous = new Date();
- timeout = null;
- result = func.apply(context, args);
- };
- return function() {
- var now = new Date(), remaining = wait - (now - previous);
- context = this;
- args = arguments;
- if (remaining <= 0) {
- clearTimeout(timeout);
- timeout = null;
- previous = now;
- result = func.apply(context, args);
- } else if (!timeout) {
- timeout = setTimeout(later, remaining);
- }
- return result;
- };
- },
- stringify: function(val) {
- return _.isString(val) ? val : JSON.stringify(val);
- },
- noop: function() {}
- };
- }();
- var VERSION = "0.11.1";
- var tokenizers = function() {
- "use strict";
- return {
- nonword: nonword,
- whitespace: whitespace,
- obj: {
- nonword: getObjTokenizer(nonword),
- whitespace: getObjTokenizer(whitespace)
- }
- };
- function whitespace(str) {
- str = _.toStr(str);
- return str ? str.split(/\s+/) : [];
- }
- function nonword(str) {
- str = _.toStr(str);
- return str ? str.split(/\W+/) : [];
- }
- function getObjTokenizer(tokenizer) {
- return function setKey(keys) {
- keys = _.isArray(keys) ? keys : [].slice.call(arguments, 0);
- return function tokenize(o) {
- var tokens = [];
- _.each(keys, function(k) {
- tokens = tokens.concat(tokenizer(_.toStr(o[k])));
- });
- return tokens;
- };
- };
- }
- }();
- var LruCache = function() {
- "use strict";
- function LruCache(maxSize) {
- this.maxSize = _.isNumber(maxSize) ? maxSize : 100;
- this.reset();
- if (this.maxSize <= 0) {
- this.set = this.get = $.noop;
- }
- }
- _.mixin(LruCache.prototype, {
- set: function set(key, val) {
- var tailItem = this.list.tail, node;
- if (this.size >= this.maxSize) {
- this.list.remove(tailItem);
- delete this.hash[tailItem.key];
- this.size--;
- }
- if (node = this.hash[key]) {
- node.val = val;
- this.list.moveToFront(node);
- } else {
- node = new Node(key, val);
- this.list.add(node);
- this.hash[key] = node;
- this.size++;
- }
- },
- get: function get(key) {
- var node = this.hash[key];
- if (node) {
- this.list.moveToFront(node);
- return node.val;
- }
- },
- reset: function reset() {
- this.size = 0;
- this.hash = {};
- this.list = new List();
- }
- });
- function List() {
- this.head = this.tail = null;
- }
- _.mixin(List.prototype, {
- add: function add(node) {
- if (this.head) {
- node.next = this.head;
- this.head.prev = node;
- }
- this.head = node;
- this.tail = this.tail || node;
- },
- remove: function remove(node) {
- node.prev ? node.prev.next = node.next : this.head = node.next;
- node.next ? node.next.prev = node.prev : this.tail = node.prev;
- },
- moveToFront: function(node) {
- this.remove(node);
- this.add(node);
- }
- });
- function Node(key, val) {
- this.key = key;
- this.val = val;
- this.prev = this.next = null;
- }
- return LruCache;
- }();
- var PersistentStorage = function() {
- "use strict";
- var LOCAL_STORAGE;
- try {
- LOCAL_STORAGE = window.localStorage;
- LOCAL_STORAGE.setItem("~~~", "!");
- LOCAL_STORAGE.removeItem("~~~");
- } catch (err) {
- LOCAL_STORAGE = null;
- }
- function PersistentStorage(namespace, override) {
- this.prefix = [ "__", namespace, "__" ].join("");
- this.ttlKey = "__ttl__";
- this.keyMatcher = new RegExp("^" + _.escapeRegExChars(this.prefix));
- this.ls = override || LOCAL_STORAGE;
- !this.ls && this._noop();
- }
- _.mixin(PersistentStorage.prototype, {
- _prefix: function(key) {
- return this.prefix + key;
- },
- _ttlKey: function(key) {
- return this._prefix(key) + this.ttlKey;
- },
- _noop: function() {
- this.get = this.set = this.remove = this.clear = this.isExpired = _.noop;
- },
- _safeSet: function(key, val) {
- try {
- this.ls.setItem(key, val);
- } catch (err) {
- if (err.name === "QuotaExceededError") {
- this.clear();
- this._noop();
- }
- }
- },
- get: function(key) {
- if (this.isExpired(key)) {
- this.remove(key);
- }
- return decode(this.ls.getItem(this._prefix(key)));
- },
- set: function(key, val, ttl) {
- if (_.isNumber(ttl)) {
- this._safeSet(this._ttlKey(key), encode(now() + ttl));
- } else {
- this.ls.removeItem(this._ttlKey(key));
- }
- return this._safeSet(this._prefix(key), encode(val));
- },
- remove: function(key) {
- this.ls.removeItem(this._ttlKey(key));
- this.ls.removeItem(this._prefix(key));
- return this;
- },
- clear: function() {
- var i, keys = gatherMatchingKeys(this.keyMatcher);
- for (i = keys.length; i--; ) {
- this.remove(keys[i]);
- }
- return this;
- },
- isExpired: function(key) {
- var ttl = decode(this.ls.getItem(this._ttlKey(key)));
- return _.isNumber(ttl) && now() > ttl ? true : false;
- }
- });
- return PersistentStorage;
- function now() {
- return new Date().getTime();
- }
- function encode(val) {
- return JSON.stringify(_.isUndefined(val) ? null : val);
- }
- function decode(val) {
- return $.parseJSON(val);
- }
- function gatherMatchingKeys(keyMatcher) {
- var i, key, keys = [], len = LOCAL_STORAGE.length;
- for (i = 0; i < len; i++) {
- if ((key = LOCAL_STORAGE.key(i)).match(keyMatcher)) {
- keys.push(key.replace(keyMatcher, ""));
- }
- }
- return keys;
- }
- }();
- var Transport = function() {
- "use strict";
- var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests = 6, sharedCache = new LruCache(10);
- function Transport(o) {
- o = o || {};
- this.cancelled = false;
- this.lastReq = null;
- this._send = o.transport;
- this._get = o.limiter ? o.limiter(this._get) : this._get;
- this._cache = o.cache === false ? new LruCache(0) : sharedCache;
- }
- Transport.setMaxPendingRequests = function setMaxPendingRequests(num) {
- maxPendingRequests = num;
- };
- Transport.resetCache = function resetCache() {
- sharedCache.reset();
- };
- _.mixin(Transport.prototype, {
- _fingerprint: function fingerprint(o) {
- o = o || {};
- return o.url + o.type + $.param(o.data || {});
- },
- _get: function(o, cb) {
- var that = this, fingerprint, jqXhr;
- fingerprint = this._fingerprint(o);
- if (this.cancelled || fingerprint !== this.lastReq) {
- return;
- }
- if (jqXhr = pendingRequests[fingerprint]) {
- jqXhr.done(done).fail(fail);
- } else if (pendingRequestsCount < maxPendingRequests) {
- pendingRequestsCount++;
- pendingRequests[fingerprint] = this._send(o).done(done).fail(fail).always(always);
- } else {
- this.onDeckRequestArgs = [].slice.call(arguments, 0);
- }
- function done(resp) {
- cb(null, resp);
- that._cache.set(fingerprint, resp);
- }
- function fail() {
- cb(true);
- }
- function always() {
- pendingRequestsCount--;
- delete pendingRequests[fingerprint];
- if (that.onDeckRequestArgs) {
- that._get.apply(that, that.onDeckRequestArgs);
- that.onDeckRequestArgs = null;
- }
- }
- },
- get: function(o, cb) {
- var resp, fingerprint;
- cb = cb || $.noop;
- o = _.isString(o) ? {
- url: o
- } : o || {};
- fingerprint = this._fingerprint(o);
- this.cancelled = false;
- this.lastReq = fingerprint;
- if (resp = this._cache.get(fingerprint)) {
- cb(null, resp);
- } else {
- this._get(o, cb);
- }
- },
- cancel: function() {
- this.cancelled = true;
- }
- });
- return Transport;
- }();
- var SearchIndex = window.SearchIndex = function() {
- "use strict";
- var CHILDREN = "c", IDS = "i";
- function SearchIndex(o) {
- o = o || {};
- if (!o.datumTokenizer || !o.queryTokenizer) {
- $.error("datumTokenizer and queryTokenizer are both required");
- }
- this.identify = o.identify || _.stringify;
- this.datumTokenizer = o.datumTokenizer;
- this.queryTokenizer = o.queryTokenizer;
- this.reset();
- }
- _.mixin(SearchIndex.prototype, {
- bootstrap: function bootstrap(o) {
- this.datums = o.datums;
- this.trie = o.trie;
- },
- add: function(data) {
- var that = this;
- data = _.isArray(data) ? data : [ data ];
- _.each(data, function(datum) {
- var id, tokens;
- that.datums[id = that.identify(datum)] = datum;
- tokens = normalizeTokens(that.datumTokenizer(datum));
- _.each(tokens, function(token) {
- var node, chars, ch;
- node = that.trie;
- chars = token.split("");
- while (ch = chars.shift()) {
- node = node[CHILDREN][ch] || (node[CHILDREN][ch] = newNode());
- node[IDS].push(id);
- }
- });
- });
- },
- get: function get(ids) {
- var that = this;
- return _.map(ids, function(id) {
- return that.datums[id];
- });
- },
- search: function search(query) {
- var that = this, tokens, matches;
- tokens = normalizeTokens(this.queryTokenizer(query));
- _.each(tokens, function(token) {
- var node, chars, ch, ids;
- if (matches && matches.length === 0) {
- return false;
- }
- node = that.trie;
- chars = token.split("");
- while (node && (ch = chars.shift())) {
- node = node[CHILDREN][ch];
- }
- if (node && chars.length === 0) {
- ids = node[IDS].slice(0);
- matches = matches ? getIntersection(matches, ids) : ids;
- } else {
- matches = [];
- return false;
- }
- });
- return matches ? _.map(unique(matches), function(id) {
- return that.datums[id];
- }) : [];
- },
- all: function all() {
- var values = [];
- for (var key in this.datums) {
- values.push(this.datums[key]);
- }
- return values;
- },
- reset: function reset() {
- this.datums = {};
- this.trie = newNode();
- },
- serialize: function serialize() {
- return {
- datums: this.datums,
- trie: this.trie
- };
- }
- });
- return SearchIndex;
- function normalizeTokens(tokens) {
- tokens = _.filter(tokens, function(token) {
- return !!token;
- });
- tokens = _.map(tokens, function(token) {
- return token.toLowerCase();
- });
- return tokens;
- }
- function newNode() {
- var node = {};
- node[IDS] = [];
- node[CHILDREN] = {};
- return node;
- }
- function unique(array) {
- var seen = {}, uniques = [];
- for (var i = 0, len = array.length; i < len; i++) {
- if (!seen[array[i]]) {
- seen[array[i]] = true;
- uniques.push(array[i]);
- }
- }
- return uniques;
- }
- function getIntersection(arrayA, arrayB) {
- var ai = 0, bi = 0, intersection = [];
- arrayA = arrayA.sort();
- arrayB = arrayB.sort();
- var lenArrayA = arrayA.length, lenArrayB = arrayB.length;
- while (ai < lenArrayA && bi < lenArrayB) {
- if (arrayA[ai] < arrayB[bi]) {
- ai++;
- } else if (arrayA[ai] > arrayB[bi]) {
- bi++;
- } else {
- intersection.push(arrayA[ai]);
- ai++;
- bi++;
- }
- }
- return intersection;
- }
- }();
- var Prefetch = function() {
- "use strict";
- var keys;
- keys = {
- data: "data",
- protocol: "protocol",
- thumbprint: "thumbprint"
- };
- function Prefetch(o) {
- this.url = o.url;
- this.ttl = o.ttl;
- this.cache = o.cache;
- this.prepare = o.prepare;
- this.transform = o.transform;
- this.transport = o.transport;
- this.thumbprint = o.thumbprint;
- this.storage = new PersistentStorage(o.cacheKey);
- }
- _.mixin(Prefetch.prototype, {
- _settings: function settings() {
- return {
- url: this.url,
- type: "GET",
- dataType: "json"
- };
- },
- store: function store(data) {
- if (!this.cache) {
- return;
- }
- this.storage.set(keys.data, data, this.ttl);
- this.storage.set(keys.protocol, location.protocol, this.ttl);
- this.storage.set(keys.thumbprint, this.thumbprint, this.ttl);
- },
- fromCache: function fromCache() {
- var stored = {}, isExpired;
- if (!this.cache) {
- return null;
- }
- stored.data = this.storage.get(keys.data);
- stored.protocol = this.storage.get(keys.protocol);
- stored.thumbprint = this.storage.get(keys.thumbprint);
- isExpired = stored.thumbprint !== this.thumbprint || stored.protocol !== location.protocol;
- return stored.data && !isExpired ? stored.data : null;
- },
- fromNetwork: function(cb) {
- var that = this, settings;
- if (!cb) {
- return;
- }
- settings = this.prepare(this._settings());
- this.transport(settings).fail(onError).done(onResponse);
- function onError() {
- cb(true);
- }
- function onResponse(resp) {
- cb(null, that.transform(resp));
- }
- },
- clear: function clear() {
- this.storage.clear();
- return this;
- }
- });
- return Prefetch;
- }();
- var Remote = function() {
- "use strict";
- function Remote(o) {
- this.url = o.url;
- this.prepare = o.prepare;
- this.transform = o.transform;
- this.transport = new Transport({
- cache: o.cache,
- limiter: o.limiter,
- transport: o.transport
- });
- }
- _.mixin(Remote.prototype, {
- _settings: function settings() {
- return {
- url: this.url,
- type: "GET",
- dataType: "json"
- };
- },
- get: function get(query, cb) {
- var that = this, settings;
- if (!cb) {
- return;
- }
- query = query || "";
- settings = this.prepare(query, this._settings());
- return this.transport.get(settings, onResponse);
- function onResponse(err, resp) {
- err ? cb([]) : cb(that.transform(resp));
- }
- },
- cancelLastRequest: function cancelLastRequest() {
- this.transport.cancel();
- }
- });
- return Remote;
- }();
- var oParser = function() {
- "use strict";
- return function parse(o) {
- var defaults, sorter;
- defaults = {
- initialize: true,
- identify: _.stringify,
- datumTokenizer: null,
- queryTokenizer: null,
- sufficient: 5,
- sorter: null,
- local: [],
- prefetch: null,
- remote: null
- };
- o = _.mixin(defaults, o || {});
- !o.datumTokenizer && $.error("datumTokenizer is required");
- !o.queryTokenizer && $.error("queryTokenizer is required");
- sorter = o.sorter;
- o.sorter = sorter ? function(x) {
- return x.sort(sorter);
- } : _.identity;
- o.local = _.isFunction(o.local) ? o.local() : o.local;
- o.prefetch = parsePrefetch(o.prefetch);
- o.remote = parseRemote(o.remote);
- return o;
- };
- function parsePrefetch(o) {
- var defaults;
- if (!o) {
- return null;
- }
- defaults = {
- url: null,
- ttl: 24 * 60 * 60 * 1e3,
- cache: true,
- cacheKey: null,
- thumbprint: "",
- prepare: _.identity,
- transform: _.identity,
- transport: null
- };
- o = _.isString(o) ? {
- url: o
- } : o;
- o = _.mixin(defaults, o);
- !o.url && $.error("prefetch requires url to be set");
- o.transform = o.filter || o.transform;
- o.cacheKey = o.cacheKey || o.url;
- o.thumbprint = VERSION + o.thumbprint;
- o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax;
- return o;
- }
- function parseRemote(o) {
- var defaults;
- if (!o) {
- return;
- }
- defaults = {
- url: null,
- cache: true,
- prepare: null,
- replace: null,
- wildcard: null,
- limiter: null,
- rateLimitBy: "debounce",
- rateLimitWait: 300,
- transform: _.identity,
- transport: null
- };
- o = _.isString(o) ? {
- url: o
- } : o;
- o = _.mixin(defaults, o);
- !o.url && $.error("remote requires url to be set");
- o.transform = o.filter || o.transform;
- o.prepare = toRemotePrepare(o);
- o.limiter = toLimiter(o);
- o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax;
- delete o.replace;
- delete o.wildcard;
- delete o.rateLimitBy;
- delete o.rateLimitWait;
- return o;
- }
- function toRemotePrepare(o) {
- var prepare, replace, wildcard;
- prepare = o.prepare;
- replace = o.replace;
- wildcard = o.wildcard;
- if (prepare) {
- return prepare;
- }
- if (replace) {
- prepare = prepareByReplace;
- } else if (o.wildcard) {
- prepare = prepareByWildcard;
- } else {
- prepare = idenityPrepare;
- }
- return prepare;
- function prepareByReplace(query, settings) {
- settings.url = replace(settings.url, query);
- return settings;
- }
- function prepareByWildcard(query, settings) {
- settings.url = settings.url.replace(wildcard, encodeURIComponent(query));
- return settings;
- }
- function idenityPrepare(query, settings) {
- return settings;
- }
- }
- function toLimiter(o) {
- var limiter, method, wait;
- limiter = o.limiter;
- method = o.rateLimitBy;
- wait = o.rateLimitWait;
- if (!limiter) {
- limiter = /^throttle$/i.test(method) ? throttle(wait) : debounce(wait);
- }
- return limiter;
- function debounce(wait) {
- return function debounce(fn) {
- return _.debounce(fn, wait);
- };
- }
- function throttle(wait) {
- return function throttle(fn) {
- return _.throttle(fn, wait);
- };
- }
- }
- function callbackToDeferred(fn) {
- return function wrapper(o) {
- var deferred = $.Deferred();
- fn(o, onSuccess, onError);
- return deferred;
- function onSuccess(resp) {
- _.defer(function() {
- deferred.resolve(resp);
- });
- }
- function onError(err) {
- _.defer(function() {
- deferred.reject(err);
- });
- }
- };
- }
- }();
- var Bloodhound = function() {
- "use strict";
- var old;
- old = window && window.Bloodhound;
- function Bloodhound(o) {
- o = oParser(o);
- this.sorter = o.sorter;
- this.identify = o.identify;
- this.sufficient = o.sufficient;
- this.local = o.local;
- this.remote = o.remote ? new Remote(o.remote) : null;
- this.prefetch = o.prefetch ? new Prefetch(o.prefetch) : null;
- this.index = new SearchIndex({
- identify: this.identify,
- datumTokenizer: o.datumTokenizer,
- queryTokenizer: o.queryTokenizer
- });
- o.initialize !== false && this.initialize();
- }
- Bloodhound.noConflict = function noConflict() {
- window && (window.Bloodhound = old);
- return Bloodhound;
- };
- Bloodhound.tokenizers = tokenizers;
- _.mixin(Bloodhound.prototype, {
- __ttAdapter: function ttAdapter() {
- var that = this;
- return this.remote ? withAsync : withoutAsync;
- function withAsync(query, sync, async) {
- return that.search(query, sync, async);
- }
- function withoutAsync(query, sync) {
- return that.search(query, sync);
- }
- },
- _loadPrefetch: function loadPrefetch() {
- var that = this, deferred, serialized;
- deferred = $.Deferred();
- if (!this.prefetch) {
- deferred.resolve();
- } else if (serialized = this.prefetch.fromCache()) {
- this.index.bootstrap(serialized);
- deferred.resolve();
- } else {
- this.prefetch.fromNetwork(done);
- }
- return deferred.promise();
- function done(err, data) {
- if (err) {
- return deferred.reject();
- }
- that.add(data);
- that.prefetch.store(that.index.serialize());
- deferred.resolve();
- }
- },
- _initialize: function initialize() {
- var that = this, deferred;
- this.clear();
- (this.initPromise = this._loadPrefetch()).done(addLocalToIndex);
- return this.initPromise;
- function addLocalToIndex() {
- that.add(that.local);
- }
- },
- initialize: function initialize(force) {
- return !this.initPromise || force ? this._initialize() : this.initPromise;
- },
- add: function add(data) {
- this.index.add(data);
- return this;
- },
- get: function get(ids) {
- ids = _.isArray(ids) ? ids : [].slice.call(arguments);
- return this.index.get(ids);
- },
- search: function search(query, sync, async) {
- var that = this, local;
- local = this.sorter(this.index.search(query));
- sync(this.remote ? local.slice() : local);
- if (this.remote && local.length < this.sufficient) {
- this.remote.get(query, processRemote);
- } else if (this.remote) {
- this.remote.cancelLastRequest();
- }
- return this;
- function processRemote(remote) {
- var nonDuplicates = [];
- _.each(remote, function(r) {
- !_.some(local, function(l) {
- return that.identify(r) === that.identify(l);
- }) && nonDuplicates.push(r);
- });
- async && async(nonDuplicates);
- }
- },
- all: function all() {
- return this.index.all();
- },
- clear: function clear() {
- this.index.reset();
- return this;
- },
- clearPrefetchCache: function clearPrefetchCache() {
- this.prefetch && this.prefetch.clear();
- return this;
- },
- clearRemoteCache: function clearRemoteCache() {
- Transport.resetCache();
- return this;
- },
- ttAdapter: function ttAdapter() {
- return this.__ttAdapter();
- }
- });
- return Bloodhound;
- }();
- return Bloodhound;
-});
-
-(function(root, factory) {
- if (typeof define === "function" && define.amd) {
- define("typeahead.js", [ "jquery" ], function(a0) {
- return factory(a0);
- });
- } else if (typeof exports === "object") {
- module.exports = factory(require("jquery"));
- } else {
- factory(jQuery);
- }
-})(this, function($) {
- var _ = function() {
- "use strict";
- return {
- isMsie: function() {
- return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false;
- },
- isBlankString: function(str) {
- return !str || /^\s*$/.test(str);
- },
- escapeRegExChars: function(str) {
- return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
- },
- isString: function(obj) {
- return typeof obj === "string";
- },
- isNumber: function(obj) {
- return typeof obj === "number";
- },
- isArray: $.isArray,
- isFunction: $.isFunction,
- isObject: $.isPlainObject,
- isUndefined: function(obj) {
- return typeof obj === "undefined";
- },
- isElement: function(obj) {
- return !!(obj && obj.nodeType === 1);
- },
- isJQuery: function(obj) {
- return obj instanceof $;
- },
- toStr: function toStr(s) {
- return _.isUndefined(s) || s === null ? "" : s + "";
- },
- bind: $.proxy,
- each: function(collection, cb) {
- $.each(collection, reverseArgs);
- function reverseArgs(index, value) {
- return cb(value, index);
- }
- },
- map: $.map,
- filter: $.grep,
- every: function(obj, test) {
- var result = true;
- if (!obj) {
- return result;
- }
- $.each(obj, function(key, val) {
- if (!(result = test.call(null, val, key, obj))) {
- return false;
- }
- });
- return !!result;
- },
- some: function(obj, test) {
- var result = false;
- if (!obj) {
- return result;
- }
- $.each(obj, function(key, val) {
- if (result = test.call(null, val, key, obj)) {
- return false;
- }
- });
- return !!result;
- },
- mixin: $.extend,
- identity: function(x) {
- return x;
- },
- clone: function(obj) {
- return $.extend(true, {}, obj);
- },
- getIdGenerator: function() {
- var counter = 0;
- return function() {
- return counter++;
- };
- },
- templatify: function templatify(obj) {
- return $.isFunction(obj) ? obj : template;
- function template() {
- return String(obj);
- }
- },
- defer: function(fn) {
- setTimeout(fn, 0);
- },
- debounce: function(func, wait, immediate) {
- var timeout, result;
- return function() {
- var context = this, args = arguments, later, callNow;
- later = function() {
- timeout = null;
- if (!immediate) {
- result = func.apply(context, args);
- }
- };
- callNow = immediate && !timeout;
- clearTimeout(timeout);
- timeout = setTimeout(later, wait);
- if (callNow) {
- result = func.apply(context, args);
- }
- return result;
- };
- },
- throttle: function(func, wait) {
- var context, args, timeout, result, previous, later;
- previous = 0;
- later = function() {
- previous = new Date();
- timeout = null;
- result = func.apply(context, args);
- };
- return function() {
- var now = new Date(), remaining = wait - (now - previous);
- context = this;
- args = arguments;
- if (remaining <= 0) {
- clearTimeout(timeout);
- timeout = null;
- previous = now;
- result = func.apply(context, args);
- } else if (!timeout) {
- timeout = setTimeout(later, remaining);
- }
- return result;
- };
- },
- stringify: function(val) {
- return _.isString(val) ? val : JSON.stringify(val);
- },
- noop: function() {}
- };
- }();
- var WWW = function() {
- "use strict";
- var defaultClassNames = {
- wrapper: "twitter-typeahead",
- input: "tt-input",
- hint: "tt-hint",
- menu: "tt-menu",
- dataset: "tt-dataset",
- suggestion: "tt-suggestion",
- selectable: "tt-selectable",
- empty: "tt-empty",
- open: "tt-open",
- cursor: "tt-cursor",
- highlight: "tt-highlight"
- };
- return build;
- function build(o) {
- var www, classes;
- classes = _.mixin({}, defaultClassNames, o);
- www = {
- css: buildCss(),
- classes: classes,
- html: buildHtml(classes),
- selectors: buildSelectors(classes)
- };
- return {
- css: www.css,
- html: www.html,
- classes: www.classes,
- selectors: www.selectors,
- mixin: function(o) {
- _.mixin(o, www);
- }
- };
- }
- function buildHtml(c) {
- return {
- wrapper: '<span class="' + c.wrapper + '"></span>',
- menu: '<div class="' + c.menu + '"></div>'
- };
- }
- function buildSelectors(classes) {
- var selectors = {};
- _.each(classes, function(v, k) {
- selectors[k] = "." + v;
- });
- return selectors;
- }
- function buildCss() {
- var css = {
- wrapper: {
- position: "relative",
- display: "inline-block"
- },
- hint: {
- position: "absolute",
- top: "0",
- left: "0",
- borderColor: "transparent",
- boxShadow: "none",
- opacity: "1"
- },
- input: {
- position: "relative",
- verticalAlign: "top",
- backgroundColor: "transparent"
- },
- inputWithNoHint: {
- position: "relative",
- verticalAlign: "top"
- },
- menu: {
- position: "absolute",
- top: "100%",
- left: "0",
- zIndex: "100",
- display: "none"
- },
- ltr: {
- left: "0",
- right: "auto"
- },
- rtl: {
- left: "auto",
- right: " 0"
- }
- };
- if (_.isMsie()) {
- _.mixin(css.input, {
- backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"
- });
- }
- return css;
- }
- }();
- var EventBus = function() {
- "use strict";
- var namespace, deprecationMap;
- namespace = "typeahead:";
- deprecationMap = {
- render: "rendered",
- cursorchange: "cursorchanged",
- select: "selected",
- autocomplete: "autocompleted"
- };
- function EventBus(o) {
- if (!o || !o.el) {
- $.error("EventBus initialized without el");
- }
- this.$el = $(o.el);
- }
- _.mixin(EventBus.prototype, {
- _trigger: function(type, args) {
- var $e;
- $e = $.Event(namespace + type);
- (args = args || []).unshift($e);
- this.$el.trigger.apply(this.$el, args);
- return $e;
- },
- before: function(type) {
- var args, $e;
- args = [].slice.call(arguments, 1);
- $e = this._trigger("before" + type, args);
- return $e.isDefaultPrevented();
- },
- trigger: function(type) {
- var deprecatedType;
- this._trigger(type, [].slice.call(arguments, 1));
- if (deprecatedType = deprecationMap[type]) {
- this._trigger(deprecatedType, [].slice.call(arguments, 1));
- }
- }
- });
- return EventBus;
- }();
- var EventEmitter = function() {
- "use strict";
- var splitter = /\s+/, nextTick = getNextTick();
- return {
- onSync: onSync,
- onAsync: onAsync,
- off: off,
- trigger: trigger
- };
- function on(method, types, cb, context) {
- var type;
- if (!cb) {
- return this;
- }
- types = types.split(splitter);
- cb = context ? bindContext(cb, context) : cb;
- this._callbacks = this._callbacks || {};
- while (type = types.shift()) {
- this._callbacks[type] = this._callbacks[type] || {
- sync: [],
- async: []
- };
- this._callbacks[type][method].push(cb);
- }
- return this;
- }
- function onAsync(types, cb, context) {
- return on.call(this, "async", types, cb, context);
- }
- function onSync(types, cb, context) {
- return on.call(this, "sync", types, cb, context);
- }
- function off(types) {
- var type;
- if (!this._callbacks) {
- return this;
- }
- types = types.split(splitter);
- while (type = types.shift()) {
- delete this._callbacks[type];
- }
- return this;
- }
- function trigger(types) {
- var type, callbacks, args, syncFlush, asyncFlush;
- if (!this._callbacks) {
- return this;
- }
- types = types.split(splitter);
- args = [].slice.call(arguments, 1);
- while ((type = types.shift()) && (callbacks = this._callbacks[type])) {
- syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args));
- asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args));
- syncFlush() && nextTick(asyncFlush);
- }
- return this;
- }
- function getFlush(callbacks, context, args) {
- return flush;
- function flush() {
- var cancelled;
- for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {
- cancelled = callbacks[i].apply(context, args) === false;
- }
- return !cancelled;
- }
- }
- function getNextTick() {
- var nextTickFn;
- if (window.setImmediate) {
- nextTickFn = function nextTickSetImmediate(fn) {
- setImmediate(function() {
- fn();
- });
- };
- } else {
- nextTickFn = function nextTickSetTimeout(fn) {
- setTimeout(function() {
- fn();
- }, 0);
- };
- }
- return nextTickFn;
- }
- function bindContext(fn, context) {
- return fn.bind ? fn.bind(context) : function() {
- fn.apply(context, [].slice.call(arguments, 0));
- };
- }
- }();
- var highlight = function(doc) {
- "use strict";
- var defaults = {
- node: null,
- pattern: null,
- tagName: "strong",
- className: null,
- wordsOnly: false,
- caseSensitive: false
- };
- return function hightlight(o) {
- var regex;
- o = _.mixin({}, defaults, o);
- if (!o.node || !o.pattern) {
- return;
- }
- o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ];
- regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly);
- traverse(o.node, hightlightTextNode);
- function hightlightTextNode(textNode) {
- var match, patternNode, wrapperNode;
- if (match = regex.exec(textNode.data)) {
- wrapperNode = doc.createElement(o.tagName);
- o.className && (wrapperNode.className = o.className);
- patternNode = textNode.splitText(match.index);
- patternNode.splitText(match[0].length);
- wrapperNode.appendChild(patternNode.cloneNode(true));
- textNode.parentNode.replaceChild(wrapperNode, patternNode);
- }
- return !!match;
- }
- function traverse(el, hightlightTextNode) {
- var childNode, TEXT_NODE_TYPE = 3;
- for (var i = 0; i < el.childNodes.length; i++) {
- childNode = el.childNodes[i];
- if (childNode.nodeType === TEXT_NODE_TYPE) {
- i += hightlightTextNode(childNode) ? 1 : 0;
- } else {
- traverse(childNode, hightlightTextNode);
- }
- }
- }
- };
- function getRegex(patterns, caseSensitive, wordsOnly) {
- var escapedPatterns = [], regexStr;
- for (var i = 0, len = patterns.length; i < len; i++) {
- escapedPatterns.push(_.escapeRegExChars(patterns[i]));
- }
- regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")";
- return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i");
- }
- }(window.document);
- var Input = function() {
- "use strict";
- var specialKeyCodeMap;
- specialKeyCodeMap = {
- 9: "tab",
- 27: "esc",
- 37: "left",
- 39: "right",
- 13: "enter",
- 38: "up",
- 40: "down"
- };
- function Input(o, www) {
- o = o || {};
- if (!o.input) {
- $.error("input is missing");
- }
- www.mixin(this);
- this.$hint = $(o.hint);
- this.$input = $(o.input);
- this.query = this.$input.val();
- this.queryWhenFocused = this.hasFocus() ? this.query : null;
- this.$overflowHelper = buildOverflowHelper(this.$input);
- this._checkLanguageDirection();
- if (this.$hint.length === 0) {
- this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;
- }
- }
- Input.normalizeQuery = function(str) {
- return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " ");
- };
- _.mixin(Input.prototype, EventEmitter, {
- _onBlur: function onBlur() {
- this.resetInputValue();
- this.trigger("blurred");
- },
- _onFocus: function onFocus() {
- this.queryWhenFocused = this.query;
- this.trigger("focused");
- },
- _onKeydown: function onKeydown($e) {
- var keyName = specialKeyCodeMap[$e.which || $e.keyCode];
- this._managePreventDefault(keyName, $e);
- if (keyName && this._shouldTrigger(keyName, $e)) {
- this.trigger(keyName + "Keyed", $e);
- }
- },
- _onInput: function onInput() {
- this._setQuery(this.getInputValue());
- this.clearHintIfInvalid();
- this._checkLanguageDirection();
- },
- _managePreventDefault: function managePreventDefault(keyName, $e) {
- var preventDefault;
- switch (keyName) {
- case "up":
- case "down":
- preventDefault = !withModifier($e);
- break;
-
- default:
- preventDefault = false;
- }
- preventDefault && $e.preventDefault();
- },
- _shouldTrigger: function shouldTrigger(keyName, $e) {
- var trigger;
- switch (keyName) {
- case "tab":
- trigger = !withModifier($e);
- break;
-
- default:
- trigger = true;
- }
- return trigger;
- },
- _checkLanguageDirection: function checkLanguageDirection() {
- var dir = (this.$input.css("direction") || "ltr").toLowerCase();
- if (this.dir !== dir) {
- this.dir = dir;
- this.$hint.attr("dir", dir);
- this.trigger("langDirChanged", dir);
- }
- },
- _setQuery: function setQuery(val, silent) {
- var areEquivalent, hasDifferentWhitespace;
- areEquivalent = areQueriesEquivalent(val, this.query);
- hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false;
- this.query = val;
- if (!silent && !areEquivalent) {
- this.trigger("queryChanged", this.query);
- } else if (!silent && hasDifferentWhitespace) {
- this.trigger("whitespaceChanged", this.query);
- }
- },
- bind: function() {
- var that = this, onBlur, onFocus, onKeydown, onInput;
- onBlur = _.bind(this._onBlur, this);
- onFocus = _.bind(this._onFocus, this);
- onKeydown = _.bind(this._onKeydown, this);
- onInput = _.bind(this._onInput, this);
- this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown);
- if (!_.isMsie() || _.isMsie() > 9) {
- this.$input.on("input.tt", onInput);
- } else {
- this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) {
- if (specialKeyCodeMap[$e.which || $e.keyCode]) {
- return;
- }
- _.defer(_.bind(that._onInput, that, $e));
- });
- }
- return this;
- },
- focus: function focus() {
- this.$input.focus();
- },
- blur: function blur() {
- this.$input.blur();
- },
- getLangDir: function getLangDir() {
- return this.dir;
- },
- getQuery: function getQuery() {
- return this.query || "";
- },
- setQuery: function setQuery(val, silent) {
- this.setInputValue(val);
- this._setQuery(val, silent);
- },
- hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() {
- return this.query !== this.queryWhenFocused;
- },
- getInputValue: function getInputValue() {
- return this.$input.val();
- },
- setInputValue: function setInputValue(value) {
- this.$input.val(value);
- this.clearHintIfInvalid();
- this._checkLanguageDirection();
- },
- resetInputValue: function resetInputValue() {
- this.setInputValue(this.query);
- },
- getHint: function getHint() {
- return this.$hint.val();
- },
- setHint: function setHint(value) {
- this.$hint.val(value);
- },
- clearHint: function clearHint() {
- this.setHint("");
- },
- clearHintIfInvalid: function clearHintIfInvalid() {
- var val, hint, valIsPrefixOfHint, isValid;
- val = this.getInputValue();
- hint = this.getHint();
- valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;
- isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow();
- !isValid && this.clearHint();
- },
- hasFocus: function hasFocus() {
- return this.$input.is(":focus");
- },
- hasOverflow: function hasOverflow() {
- var constraint = this.$input.width() - 2;
- this.$overflowHelper.text(this.getInputValue());
- return this.$overflowHelper.width() >= constraint;
- },
- isCursorAtEnd: function() {
- var valueLength, selectionStart, range;
- valueLength = this.$input.val().length;
- selectionStart = this.$input[0].selectionStart;
- if (_.isNumber(selectionStart)) {
- return selectionStart === valueLength;
- } else if (document.selection) {
- range = document.selection.createRange();
- range.moveStart("character", -valueLength);
- return valueLength === range.text.length;
- }
- return true;
- },
- destroy: function destroy() {
- this.$hint.off(".tt");
- this.$input.off(".tt");
- this.$overflowHelper.remove();
- this.$hint = this.$input = this.$overflowHelper = $("<div>");
- }
- });
- return Input;
- function buildOverflowHelper($input) {
- return $('<pre aria-hidden="true"></pre>').css({
- position: "absolute",
- visibility: "hidden",
- whiteSpace: "pre",
- fontFamily: $input.css("font-family"),
- fontSize: $input.css("font-size"),
- fontStyle: $input.css("font-style"),
- fontVariant: $input.css("font-variant"),
- fontWeight: $input.css("font-weight"),
- wordSpacing: $input.css("word-spacing"),
- letterSpacing: $input.css("letter-spacing"),
- textIndent: $input.css("text-indent"),
- textRendering: $input.css("text-rendering"),
- textTransform: $input.css("text-transform")
- }).insertAfter($input);
- }
- function areQueriesEquivalent(a, b) {
- return Input.normalizeQuery(a) === Input.normalizeQuery(b);
- }
- function withModifier($e) {
- return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;
- }
- }();
- var Dataset = function() {
- "use strict";
- var keys, nameGenerator;
- keys = {
- val: "tt-selectable-display",
- obj: "tt-selectable-object"
- };
- nameGenerator = _.getIdGenerator();
- function Dataset(o, www) {
- o = o || {};
- o.templates = o.templates || {};
- o.templates.notFound = o.templates.notFound || o.templates.empty;
- if (!o.source) {
- $.error("missing source");
- }
- if (!o.node) {
- $.error("missing node");
- }
- if (o.name && !isValidName(o.name)) {
- $.error("invalid dataset name: " + o.name);
- }
- www.mixin(this);
- this.highlight = !!o.highlight;
- this.name = o.name || nameGenerator();
- this.limit = o.limit || 5;
- this.displayFn = getDisplayFn(o.display || o.displayKey);
- this.templates = getTemplates(o.templates, this.displayFn);
- this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source;
- this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async;
- this._resetLastSuggestion();
- this.$el = $(o.node).addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name);
- }
- Dataset.extractData = function extractData(el) {
- var $el = $(el);
- if ($el.data(keys.obj)) {
- return {
- val: $el.data(keys.val) || "",
- obj: $el.data(keys.obj) || null
- };
- }
- return null;
- };
- _.mixin(Dataset.prototype, EventEmitter, {
- _overwrite: function overwrite(query, suggestions) {
- suggestions = suggestions || [];
- if (suggestions.length) {
- this._renderSuggestions(query, suggestions);
- } else if (this.async && this.templates.pending) {
- this._renderPending(query);
- } else if (!this.async && this.templates.notFound) {
- this._renderNotFound(query);
- } else {
- this._empty();
- }
- this.trigger("rendered", this.name, suggestions, false);
- },
- _append: function append(query, suggestions) {
- suggestions = suggestions || [];
- if (suggestions.length && this.$lastSuggestion.length) {
- this._appendSuggestions(query, suggestions);
- } else if (suggestions.length) {
- this._renderSuggestions(query, suggestions);
- } else if (!this.$lastSuggestion.length && this.templates.notFound) {
- this._renderNotFound(query);
- }
- this.trigger("rendered", this.name, suggestions, true);
- },
- _renderSuggestions: function renderSuggestions(query, suggestions) {
- var $fragment;
- $fragment = this._getSuggestionsFragment(query, suggestions);
- this.$lastSuggestion = $fragment.children().last();
- this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions));
- },
- _appendSuggestions: function appendSuggestions(query, suggestions) {
- var $fragment, $lastSuggestion;
- $fragment = this._getSuggestionsFragment(query, suggestions);
- $lastSuggestion = $fragment.children().last();
- this.$lastSuggestion.after($fragment);
- this.$lastSuggestion = $lastSuggestion;
- },
- _renderPending: function renderPending(query) {
- var template = this.templates.pending;
- this._resetLastSuggestion();
- template && this.$el.html(template({
- query: query,
- dataset: this.name
- }));
- },
- _renderNotFound: function renderNotFound(query) {
- var template = this.templates.notFound;
- this._resetLastSuggestion();
- template && this.$el.html(template({
- query: query,
- dataset: this.name
- }));
- },
- _empty: function empty() {
- this.$el.empty();
- this._resetLastSuggestion();
- },
- _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) {
- var that = this, fragment;
- fragment = document.createDocumentFragment();
- _.each(suggestions, function getSuggestionNode(suggestion) {
- var $el, context;
- context = that._injectQuery(query, suggestion);
- $el = $(that.templates.suggestion(context)).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable);
- fragment.appendChild($el[0]);
- });
- this.highlight && highlight({
- className: this.classes.highlight,
- node: fragment,
- pattern: query
- });
- return $(fragment);
- },
- _getFooter: function getFooter(query, suggestions) {
- return this.templates.footer ? this.templates.footer({
- query: query,
- suggestions: suggestions,
- dataset: this.name
- }) : null;
- },
- _getHeader: function getHeader(query, suggestions) {
- return this.templates.header ? this.templates.header({
- query: query,
- suggestions: suggestions,
- dataset: this.name
- }) : null;
- },
- _resetLastSuggestion: function resetLastSuggestion() {
- this.$lastSuggestion = $();
- },
- _injectQuery: function injectQuery(query, obj) {
- return _.isObject(obj) ? _.mixin({
- _query: query
- }, obj) : obj;
- },
- update: function update(query) {
- var that = this, canceled = false, syncCalled = false, rendered = 0;
- this.cancel();
- this.cancel = function cancel() {
- canceled = true;
- that.cancel = $.noop;
- that.async && that.trigger("asyncCanceled", query);
- };
- this.source(query, sync, async);
- !syncCalled && sync([]);
- function sync(suggestions) {
- if (syncCalled) {
- return;
- }
- syncCalled = true;
- suggestions = (suggestions || []).slice(0, that.limit);
- rendered = suggestions.length;
- that._overwrite(query, suggestions);
- if (rendered < that.limit && that.async) {
- that.trigger("asyncRequested", query);
- }
- }
- function async(suggestions) {
- suggestions = suggestions || [];
- if (!canceled && rendered < that.limit) {
- that.cancel = $.noop;
- rendered += suggestions.length;
- that._append(query, suggestions.slice(0, that.limit - rendered));
- that.async && that.trigger("asyncReceived", query);
- }
- }
- },
- cancel: $.noop,
- clear: function clear() {
- this._empty();
- this.cancel();
- this.trigger("cleared");
- },
- isEmpty: function isEmpty() {
- return this.$el.is(":empty");
- },
- destroy: function destroy() {
- this.$el = $("<div>");
- }
- });
- return Dataset;
- function getDisplayFn(display) {
- display = display || _.stringify;
- return _.isFunction(display) ? display : displayFn;
- function displayFn(obj) {
- return obj[display];
- }
- }
- function getTemplates(templates, displayFn) {
- return {
- notFound: templates.notFound && _.templatify(templates.notFound),
- pending: templates.pending && _.templatify(templates.pending),
- header: templates.header && _.templatify(templates.header),
- footer: templates.footer && _.templatify(templates.footer),
- suggestion: templates.suggestion || suggestionTemplate
- };
- function suggestionTemplate(context) {
- return $("<div>").text(displayFn(context));
- }
- }
- function isValidName(str) {
- return /^[_a-zA-Z0-9-]+$/.test(str);
- }
- }();
- var Menu = function() {
- "use strict";
- function Menu(o, www) {
- var that = this;
- o = o || {};
- if (!o.node) {
- $.error("node is required");
- }
- www.mixin(this);
- this.$node = $(o.node);
- this.query = null;
- this.datasets = _.map(o.datasets, initializeDataset);
- function initializeDataset(oDataset) {
- var node = that.$node.find(oDataset.node).first();
- oDataset.node = node.length ? node : $("<div>").appendTo(that.$node);
- return new Dataset(oDataset, www);
- }
- }
- _.mixin(Menu.prototype, EventEmitter, {
- _onSelectableClick: function onSelectableClick($e) {
- this.trigger("selectableClicked", $($e.currentTarget));
- },
- _onRendered: function onRendered(type, dataset, suggestions, async) {
- this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());
- this.trigger("datasetRendered", dataset, suggestions, async);
- },
- _onCleared: function onCleared() {
- this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());
- this.trigger("datasetCleared");
- },
- _propagate: function propagate() {
- this.trigger.apply(this, arguments);
- },
- _allDatasetsEmpty: function allDatasetsEmpty() {
- return _.every(this.datasets, isDatasetEmpty);
- function isDatasetEmpty(dataset) {
- return dataset.isEmpty();
- }
- },
- _getSelectables: function getSelectables() {
- return this.$node.find(this.selectors.selectable);
- },
- _removeCursor: function _removeCursor() {
- var $selectable = this.getActiveSelectable();
- $selectable && $selectable.removeClass(this.classes.cursor);
- },
- _ensureVisible: function ensureVisible($el) {
- var elTop, elBottom, nodeScrollTop, nodeHeight;
- elTop = $el.position().top;
- elBottom = elTop + $el.outerHeight(true);
- nodeScrollTop = this.$node.scrollTop();
- nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10);
- if (elTop < 0) {
- this.$node.scrollTop(nodeScrollTop + elTop);
- } else if (nodeHeight < elBottom) {
- this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight));
- }
- },
- bind: function() {
- var that = this, onSelectableClick;
- onSelectableClick = _.bind(this._onSelectableClick, this);
- this.$node.on("click.tt", this.selectors.selectable, onSelectableClick);
- _.each(this.datasets, function(dataset) {
- dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that);
- });
- return this;
- },
- isOpen: function isOpen() {
- return this.$node.hasClass(this.classes.open);
- },
- open: function open() {
- this.$node.addClass(this.classes.open);
- },
- close: function close() {
- this.$node.removeClass(this.classes.open);
- this._removeCursor();
- },
- setLanguageDirection: function setLanguageDirection(dir) {
- this.$node.attr("dir", dir);
- },
- selectableRelativeToCursor: function selectableRelativeToCursor(delta) {
- var $selectables, $oldCursor, oldIndex, newIndex;
- $oldCursor = this.getActiveSelectable();
- $selectables = this._getSelectables();
- oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1;
- newIndex = oldIndex + delta;
- newIndex = (newIndex + 1) % ($selectables.length + 1) - 1;
- newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex;
- return newIndex === -1 ? null : $selectables.eq(newIndex);
- },
- setCursor: function setCursor($selectable) {
- this._removeCursor();
- if ($selectable = $selectable && $selectable.first()) {
- $selectable.addClass(this.classes.cursor);
- this._ensureVisible($selectable);
- }
- },
- getSelectableData: function getSelectableData($el) {
- return $el && $el.length ? Dataset.extractData($el) : null;
- },
- getActiveSelectable: function getActiveSelectable() {
- var $selectable = this._getSelectables().filter(this.selectors.cursor).first();
- return $selectable.length ? $selectable : null;
- },
- getTopSelectable: function getTopSelectable() {
- var $selectable = this._getSelectables().first();
- return $selectable.length ? $selectable : null;
- },
- update: function update(query) {
- var isValidUpdate = query !== this.query;
- if (isValidUpdate) {
- this.query = query;
- _.each(this.datasets, updateDataset);
- }
- return isValidUpdate;
- function updateDataset(dataset) {
- dataset.update(query);
- }
- },
- empty: function empty() {
- _.each(this.datasets, clearDataset);
- this.query = null;
- this.$node.addClass(this.classes.empty);
- function clearDataset(dataset) {
- dataset.clear();
- }
- },
- destroy: function destroy() {
- this.$node.off(".tt");
- this.$node = $("<div>");
- _.each(this.datasets, destroyDataset);
- function destroyDataset(dataset) {
- dataset.destroy();
- }
- }
- });
- return Menu;
- }();
- var DefaultMenu = function() {
- "use strict";
- var s = Menu.prototype;
- function DefaultMenu() {
- Menu.apply(this, [].slice.call(arguments, 0));
- }
- _.mixin(DefaultMenu.prototype, Menu.prototype, {
- open: function open() {
- !this._allDatasetsEmpty() && this._show();
- return s.open.apply(this, [].slice.call(arguments, 0));
- },
- close: function close() {
- this._hide();
- return s.close.apply(this, [].slice.call(arguments, 0));
- },
- _onRendered: function onRendered() {
- if (this._allDatasetsEmpty()) {
- this._hide();
- } else {
- this.isOpen() && this._show();
- }
- return s._onRendered.apply(this, [].slice.call(arguments, 0));
- },
- _onCleared: function onCleared() {
- if (this._allDatasetsEmpty()) {
- this._hide();
- } else {
- this.isOpen() && this._show();
- }
- return s._onCleared.apply(this, [].slice.call(arguments, 0));
- },
- setLanguageDirection: function setLanguageDirection(dir) {
- this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl);
- return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0));
- },
- _hide: function hide() {
- this.$node.hide();
- },
- _show: function show() {
- this.$node.css("display", "block");
- }
- });
- return DefaultMenu;
- }();
- var Typeahead = function() {
- "use strict";
- function Typeahead(o, www) {
- var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged;
- o = o || {};
- if (!o.input) {
- $.error("missing input");
- }
- if (!o.menu) {
- $.error("missing menu");
- }
- if (!o.eventBus) {
- $.error("missing event bus");
- }
- www.mixin(this);
- this.eventBus = o.eventBus;
- this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;
- this.input = o.input;
- this.menu = o.menu;
- this.enabled = true;
- this.active = false;
- this.input.hasFocus() && this.activate();
- this.dir = this.input.getLangDir();
- this._hacks();
- this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this);
- onFocused = c(this, "activate", "open", "_onFocused");
- onBlurred = c(this, "deactivate", "_onBlurred");
- onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed");
- onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed");
- onEscKeyed = c(this, "isActive", "_onEscKeyed");
- onUpKeyed = c(this, "isActive", "open", "_onUpKeyed");
- onDownKeyed = c(this, "isActive", "open", "_onDownKeyed");
- onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed");
- onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed");
- onQueryChanged = c(this, "_openIfActive", "_onQueryChanged");
- onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged");
- this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this);
- }
- _.mixin(Typeahead.prototype, {
- _hacks: function hacks() {
- var $input, $menu;
- $input = this.input.$input || $("<div>");
- $menu = this.menu.$node || $("<div>");
- $input.on("blur.tt", function($e) {
- var active, isActive, hasActive;
- active = document.activeElement;
- isActive = $menu.is(active);
- hasActive = $menu.has(active).length > 0;
- if (_.isMsie() && (isActive || hasActive)) {
- $e.preventDefault();
- $e.stopImmediatePropagation();
- _.defer(function() {
- $input.focus();
- });
- }
- });
- $menu.on("mousedown.tt", function($e) {
- $e.preventDefault();
- });
- },
- _onSelectableClicked: function onSelectableClicked(type, $el) {
- this.select($el);
- },
- _onDatasetCleared: function onDatasetCleared() {
- this._updateHint();
- },
- _onDatasetRendered: function onDatasetRendered(type, dataset, suggestions, async) {
- this._updateHint();
- this.eventBus.trigger("render", suggestions, async, dataset);
- },
- _onAsyncRequested: function onAsyncRequested(type, dataset, query) {
- this.eventBus.trigger("asyncrequest", query, dataset);
- },
- _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {
- this.eventBus.trigger("asynccancel", query, dataset);
- },
- _onAsyncReceived: function onAsyncReceived(type, dataset, query) {
- this.eventBus.trigger("asyncreceive", query, dataset);
- },
- _onFocused: function onFocused() {
- this._minLengthMet() && this.menu.update(this.input.getQuery());
- },
- _onBlurred: function onBlurred() {
- if (this.input.hasQueryChangedSinceLastFocus()) {
- this.eventBus.trigger("change", this.input.getQuery());
- }
- },
- _onEnterKeyed: function onEnterKeyed(type, $e) {
- var $selectable;
- if ($selectable = this.menu.getActiveSelectable()) {
- this.select($selectable) && $e.preventDefault();
- }
- },
- _onTabKeyed: function onTabKeyed(type, $e) {
- var $selectable;
- if ($selectable = this.menu.getActiveSelectable()) {
- this.select($selectable) && $e.preventDefault();
- } else if ($selectable = this.menu.getTopSelectable()) {
- this.autocomplete($selectable) && $e.preventDefault();
- }
- },
- _onEscKeyed: function onEscKeyed() {
- this.close();
- },
- _onUpKeyed: function onUpKeyed() {
- this.moveCursor(-1);
- },
- _onDownKeyed: function onDownKeyed() {
- this.moveCursor(+1);
- },
- _onLeftKeyed: function onLeftKeyed() {
- if (this.dir === "rtl" && this.input.isCursorAtEnd()) {
- this.autocomplete(this.menu.getTopSelectable());
- }
- },
- _onRightKeyed: function onRightKeyed() {
- if (this.dir === "ltr" && this.input.isCursorAtEnd()) {
- this.autocomplete(this.menu.getTopSelectable());
- }
- },
- _onQueryChanged: function onQueryChanged(e, query) {
- this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();
- },
- _onWhitespaceChanged: function onWhitespaceChanged() {
- this._updateHint();
- },
- _onLangDirChanged: function onLangDirChanged(e, dir) {
- if (this.dir !== dir) {
- this.dir = dir;
- this.menu.setLanguageDirection(dir);
- }
- },
- _openIfActive: function openIfActive() {
- this.isActive() && this.open();
- },
- _minLengthMet: function minLengthMet(query) {
- query = _.isString(query) ? query : this.input.getQuery() || "";
- return query.length >= this.minLength;
- },
- _updateHint: function updateHint() {
- var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;
- $selectable = this.menu.getTopSelectable();
- data = this.menu.getSelectableData($selectable);
- val = this.input.getInputValue();
- if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {
- query = Input.normalizeQuery(val);
- escapedQuery = _.escapeRegExChars(query);
- frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i");
- match = frontMatchRegEx.exec(data.val);
- match && this.input.setHint(val + match[1]);
- } else {
- this.input.clearHint();
- }
- },
- isEnabled: function isEnabled() {
- return this.enabled;
- },
- enable: function enable() {
- this.enabled = true;
- },
- disable: function disable() {
- this.enabled = false;
- },
- isActive: function isActive() {
- return this.active;
- },
- activate: function activate() {
- if (this.isActive()) {
- return true;
- } else if (!this.isEnabled() || this.eventBus.before("active")) {
- return false;
- } else {
- this.active = true;
- this.eventBus.trigger("active");
- return true;
- }
- },
- deactivate: function deactivate() {
- if (!this.isActive()) {
- return true;
- } else if (this.eventBus.before("idle")) {
- return false;
- } else {
- this.active = false;
- this.close();
- this.eventBus.trigger("idle");
- return true;
- }
- },
- isOpen: function isOpen() {
- return this.menu.isOpen();
- },
- open: function open() {
- if (!this.isOpen() && !this.eventBus.before("open")) {
- this.menu.open();
- this._updateHint();
- this.eventBus.trigger("open");
- }
- return this.isOpen();
- },
- close: function close() {
- if (this.isOpen() && !this.eventBus.before("close")) {
- this.menu.close();
- this.input.clearHint();
- this.input.resetInputValue();
- this.eventBus.trigger("close");
- }
- return !this.isOpen();
- },
- setVal: function setVal(val) {
- this.input.setQuery(_.toStr(val));
- },
- getVal: function getVal() {
- return this.input.getQuery();
- },
- select: function select($selectable) {
- var data = this.menu.getSelectableData($selectable);
- if (data && !this.eventBus.before("select", data.obj)) {
- this.input.setQuery(data.val, true);
- this.eventBus.trigger("select", data.obj);
- this.close();
- return true;
- }
- return false;
- },
- autocomplete: function autocomplete($selectable) {
- var query, data, isValid;
- query = this.input.getQuery();
- data = this.menu.getSelectableData($selectable);
- isValid = data && query !== data.val;
- if (isValid && !this.eventBus.before("autocomplete", data.obj)) {
- this.input.setQuery(data.val);
- this.eventBus.trigger("autocomplete", data.obj);
- return true;
- }
- return false;
- },
- moveCursor: function moveCursor(delta) {
- var query, $candidate, data, payload, cancelMove;
- query = this.input.getQuery();
- $candidate = this.menu.selectableRelativeToCursor(delta);
- data = this.menu.getSelectableData($candidate);
- payload = data ? data.obj : null;
- cancelMove = this._minLengthMet() && this.menu.update(query);
- if (!cancelMove && !this.eventBus.before("cursorchange", payload)) {
- this.menu.setCursor($candidate);
- if (data) {
- this.input.setInputValue(data.val);
- } else {
- this.input.resetInputValue();
- this._updateHint();
- }
- this.eventBus.trigger("cursorchange", payload);
- return true;
- }
- return false;
- },
- destroy: function destroy() {
- this.input.destroy();
- this.menu.destroy();
- }
- });
- return Typeahead;
- function c(ctx) {
- var methods = [].slice.call(arguments, 1);
- return function() {
- var args = [].slice.call(arguments);
- _.each(methods, function(method) {
- return ctx[method].apply(ctx, args);
- });
- };
- }
- }();
- (function() {
- "use strict";
- var old, keys, methods;
- old = $.fn.typeahead;
- keys = {
- www: "tt-www",
- attrs: "tt-attrs",
- typeahead: "tt-typeahead"
- };
- methods = {
- initialize: function initialize(o, datasets) {
- var www;
- datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);
- o = o || {};
- www = WWW(o.classNames);
- return this.each(attach);
- function attach() {
- var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, typeahead, MenuConstructor;
- _.each(datasets, function(d) {
- d.highlight = !!o.highlight;
- });
- $input = $(this);
- $wrapper = $(www.html.wrapper);
- $hint = $elOrNull(o.hint);
- $menu = $elOrNull(o.menu);
- defaultHint = o.hint !== false && !$hint;
- defaultMenu = o.menu !== false && !$menu;
- defaultHint && ($hint = buildHintFromInput($input, www));
- defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));
- $hint && $hint.val("");
- $input = prepInput($input, www);
- if (defaultHint || defaultMenu) {
- $wrapper.css(www.css.wrapper);
- $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint);
- $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);
- }
- MenuConstructor = defaultMenu ? DefaultMenu : Menu;
- eventBus = new EventBus({
- el: $input
- });
- input = new Input({
- hint: $hint,
- input: $input
- }, www);
- menu = new MenuConstructor({
- node: $menu,
- datasets: datasets
- }, www);
- typeahead = new Typeahead({
- input: input,
- menu: menu,
- eventBus: eventBus,
- minLength: o.minLength
- }, www);
- $input.data(keys.www, www);
- $input.data(keys.typeahead, typeahead);
- }
- },
- isEnabled: function isEnabled() {
- var enabled;
- ttEach(this.first(), function(t) {
- enabled = t.isEnabled();
- });
- return enabled;
- },
- enable: function enable() {
- ttEach(this, function(t) {
- t.enable();
- });
- return this;
- },
- disable: function disable() {
- ttEach(this, function(t) {
- t.disable();
- });
- return this;
- },
- isActive: function isActive() {
- var active;
- ttEach(this.first(), function(t) {
- active = t.isActive();
- });
- return active;
- },
- activate: function activate() {
- ttEach(this, function(t) {
- t.activate();
- });
- return this;
- },
- deactivate: function deactivate() {
- ttEach(this, function(t) {
- t.deactivate();
- });
- return this;
- },
- isOpen: function isOpen() {
- var open;
- ttEach(this.first(), function(t) {
- open = t.isOpen();
- });
- return open;
- },
- open: function open() {
- ttEach(this, function(t) {
- t.open();
- });
- return this;
- },
- close: function close() {
- ttEach(this, function(t) {
- t.close();
- });
- return this;
- },
- select: function select(el) {
- var success = false, $el = $(el);
- ttEach(this.first(), function(t) {
- success = t.select($el);
- });
- return success;
- },
- autocomplete: function autocomplete(el) {
- var success = false, $el = $(el);
- ttEach(this.first(), function(t) {
- success = t.autocomplete($el);
- });
- return success;
- },
- moveCursor: function moveCursoe(delta) {
- var success = false;
- ttEach(this.first(), function(t) {
- success = t.moveCursor(delta);
- });
- return success;
- },
- val: function val(newVal) {
- var query;
- if (!arguments.length) {
- ttEach(this.first(), function(t) {
- query = t.getVal();
- });
- return query;
- } else {
- ttEach(this, function(t) {
- t.setVal(newVal);
- });
- return this;
- }
- },
- destroy: function destroy() {
- ttEach(this, function(typeahead, $input) {
- revert($input);
- typeahead.destroy();
- });
- return this;
- }
- };
- $.fn.typeahead = function(method) {
- if (methods[method]) {
- return methods[method].apply(this, [].slice.call(arguments, 1));
- } else {
- return methods.initialize.apply(this, arguments);
- }
- };
- $.fn.typeahead.noConflict = function noConflict() {
- $.fn.typeahead = old;
- return this;
- };
- function ttEach($els, fn) {
- $els.each(function() {
- var $input = $(this), typeahead;
- (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);
- });
- }
- function buildHintFromInput($input, www) {
- return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop("readonly", true).removeAttr("id name placeholder required").attr({
- autocomplete: "off",
- spellcheck: "false",
- tabindex: -1
- });
- }
- function prepInput($input, www) {
- $input.data(keys.attrs, {
- dir: $input.attr("dir"),
- autocomplete: $input.attr("autocomplete"),
- spellcheck: $input.attr("spellcheck"),
- style: $input.attr("style")
- });
- $input.addClass(www.classes.input).attr({
- autocomplete: "off",
- spellcheck: false
- });
- try {
- !$input.attr("dir") && $input.attr("dir", "auto");
- } catch (e) {}
- return $input;
- }
- function getBackgroundStyles($el) {
- return {
- backgroundAttachment: $el.css("background-attachment"),
- backgroundClip: $el.css("background-clip"),
- backgroundColor: $el.css("background-color"),
- backgroundImage: $el.css("background-image"),
- backgroundOrigin: $el.css("background-origin"),
- backgroundPosition: $el.css("background-position"),
- backgroundRepeat: $el.css("background-repeat"),
- backgroundSize: $el.css("background-size")
- };
- }
- function revert($input) {
- var www, $wrapper;
- www = $input.data(keys.www);
- $wrapper = $input.parent().filter(www.selectors.wrapper);
- _.each($input.data(keys.attrs), function(val, key) {
- _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);
- });
- $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);
- if ($wrapper.length) {
- $input.detach().insertAfter($wrapper);
- $wrapper.remove();
- }
- }
- function $elOrNull(obj) {
- var isValid, $el;
- isValid = _.isJQuery(obj) || _.isElement(obj);
- $el = isValid ? $(obj).first() : [];
- return $el.length ? $el : null;
- }
- })();
-}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/js_external/underscore-min.js b/wqflask/wqflask/static/new/js_external/underscore-min.js
deleted file mode 100644
index 5a0cb3b0..00000000
--- a/wqflask/wqflask/static/new/js_external/underscore-min.js
+++ /dev/null
@@ -1,32 +0,0 @@
-// Underscore.js 1.3.3
-// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
-// Underscore is freely distributable under the MIT license.
-// Portions of Underscore are inspired or borrowed from Prototype,
-// Oliver Steele's Functional, and John Resig's Micro-Templating.
-// For all details and documentation:
-// http://documentcloud.github.com/underscore
-(function(){function r(a,c,d){if(a===c)return 0!==a||1/a==1/c;if(null==a||null==c)return a===c;a._chain&&(a=a._wrapped);c._chain&&(c=c._wrapped);if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return!1;switch(e){case "[object String]":return a==""+c;case "[object Number]":return a!=+a?c!=+c:0==a?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
-c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if("object"!=typeof a||"object"!=typeof c)return!1;for(var f=d.length;f--;)if(d[f]==a)return!0;d.push(a);var f=0,g=!0;if("[object Array]"==e){if(f=a.length,g=f==c.length)for(;f--&&(g=f in a==f in c&&r(a[f],c[f],d)););}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return!1;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&r(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c,h)&&!f--)break;
-g=!f}}d.pop();return g}var s=this,I=s._,o={},k=Array.prototype,p=Object.prototype,i=k.slice,J=k.unshift,l=p.toString,K=p.hasOwnProperty,y=k.forEach,z=k.map,A=k.reduce,B=k.reduceRight,C=k.filter,D=k.every,E=k.some,q=k.indexOf,F=k.lastIndexOf,p=Array.isArray,L=Object.keys,t=Function.prototype.bind,b=function(a){return new m(a)};"undefined"!==typeof exports?("undefined"!==typeof module&&module.exports&&(exports=module.exports=b),exports._=b):s._=b;b.VERSION="1.3.3";var j=b.each=b.forEach=function(a,
-c,d){if(a!=null)if(y&&a.forEach===y)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===o)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===o)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(z&&a.map===z)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(A&&
-a.reduce===A){e&&(c=b.bind(c,e));return f?a.reduce(c,d):a.reduce(c)}j(a,function(a,b,i){if(f)d=c.call(e,d,a,b,i);else{d=a;f=true}});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(B&&a.reduceRight===B){e&&(c=b.bind(c,e));return f?a.reduceRight(c,d):a.reduceRight(c)}var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=function(a,
-c,b){var e;G(a,function(a,g,h){if(c.call(b,a,g,h)){e=a;return true}});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(C&&a.filter===C)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(D&&a.every===D)return a.every(c,b);j(a,function(a,g,h){if(!(e=e&&c.call(b,
-a,g,h)))return o});return!!e};var G=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(E&&a.some===E)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return o});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;if(q&&a.indexOf===q)return a.indexOf(c)!=-1;return b=G(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=
-function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a)&&a[0]===+a[0])return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a)&&a[0]===+a[0])return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&
-(e={value:a,computed:b})});return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){d=Math.floor(Math.random()*(f+1));b[f]=b[d];b[d]=a});return b};b.sortBy=function(a,c,d){var e=b.isFunction(c)?c:function(a){return a[c]};return b.pluck(b.map(a,function(a,b,c){return{value:a,criteria:e.call(d,a,b,c)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c===void 0?1:d===void 0?-1:c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};
-j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:b.isArray(a)||b.isArguments(a)?i.call(a):a.toArray&&b.isFunction(a.toArray)?a.toArray():b.values(a)};b.size=function(a){return b.isArray(a)?a.length:b.keys(a).length};b.first=b.head=b.take=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,
-0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,
-e=[];a.length<3&&(c=true);b.reduce(d,function(d,g,h){if(c?b.last(d)!==g||!d.length:!b.include(d,g)){d.push(g);e.push(a[h])}return d},[]);return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1),true);return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=
-i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,d){if(a==null)return-1;var e;if(d){d=b.sortedIndex(a,c);return a[d]===c?d:-1}if(q&&a.indexOf===q)return a.indexOf(c);d=0;for(e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(F&&a.lastIndexOf===F)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){if(arguments.length<=
-1){b=a||0;a=0}for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;){g[f++]=a;a=a+d}return g};var H=function(){};b.bind=function(a,c){var d,e;if(a.bind===t&&t)return t.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));H.prototype=a.prototype;var b=new H,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=
-i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(null,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i,j=b.debounce(function(){h=
-g=false},c);return function(){d=this;e=arguments;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);j()},c));g?h=true:i=a.apply(d,e);j();g=true;return i}};b.debounce=function(a,b,d){var e;return function(){var f=this,g=arguments;d&&!e&&a.apply(f,g);clearTimeout(e);e=setTimeout(function(){e=null;d||a.apply(f,g)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));
-return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=L||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&
-c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.pick=function(a){var c={};j(b.flatten(i.call(arguments,1)),function(b){b in a&&(c[b]=a[b])});return c};b.defaults=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return r(a,b,[])};b.isEmpty=
-function(a){if(a==null)return true;if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=p||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};b.isArguments=function(a){return l.call(a)=="[object Arguments]"};b.isArguments(arguments)||(b.isArguments=function(a){return!(!a||!b.has(a,"callee"))});b.isFunction=function(a){return l.call(a)=="[object Function]"};
-b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isFinite=function(a){return b.isNumber(a)&&isFinite(a)};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,
-b){return K.call(a,b)};b.noConflict=function(){s._=I;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.result=function(a,c){if(a==null)return null;var d=a[c];return b.isFunction(d)?d.call(a):d};b.mixin=function(a){j(b.functions(a),function(c){M(c,b[c]=a[c])})};var N=0;b.uniqueId=
-function(a){var b=N++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var u=/.^/,n={"\\":"\\","'":"'",r:"\r",n:"\n",t:"\t",u2028:"\u2028",u2029:"\u2029"},v;for(v in n)n[n[v]]=v;var O=/\\|'|\r|\n|\t|\u2028|\u2029/g,P=/\\(\\|'|r|n|t|u2028|u2029)/g,w=function(a){return a.replace(P,function(a,b){return n[b]})};b.template=function(a,c,d){d=b.defaults(d||{},b.templateSettings);a="__p+='"+a.replace(O,function(a){return"\\"+n[a]}).replace(d.escape||
-u,function(a,b){return"'+\n_.escape("+w(b)+")+\n'"}).replace(d.interpolate||u,function(a,b){return"'+\n("+w(b)+")+\n'"}).replace(d.evaluate||u,function(a,b){return"';\n"+w(b)+"\n;__p+='"})+"';\n";d.variable||(a="with(obj||{}){\n"+a+"}\n");var a="var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n"+a+"return __p;\n",e=new Function(d.variable||"obj","_",a);if(c)return e(c,b);c=function(a){return e.call(this,a,b)};c.source="function("+(d.variable||"obj")+"){\n"+a+"}";return c};
-b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var x=function(a,c){return c?b(a).chain():a},M=function(a,c){m.prototype[a]=function(){var a=i.call(arguments);J.call(a,this._wrapped);return x(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return x(d,
-this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return x(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=true;return this};m.prototype.value=function(){return this._wrapped}}).call(this);
diff --git a/wqflask/wqflask/static/new/js_external/underscore.string.min.js b/wqflask/wqflask/static/new/js_external/underscore.string.min.js
deleted file mode 100644
index 08b986f1..00000000
--- a/wqflask/wqflask/static/new/js_external/underscore.string.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(a){"use strict";var b=String.prototype.trim,c=String.prototype.trimRight,d=String.prototype.trimLeft,e=function(a){return a*1||0},f=function(a,b){if(b<1)return"";var c="";while(b>0)b&1&&(c+=a),b>>=1,a+=a;return c},g=[].slice,h=function(a,b,c){return(""+a).replace(b,c)},i=function(a){return a!=null?"["+o.escapeRegExp(a)+"]":"\\s"},j=function(a,b){a+="",b+="";var c=[],d,e;for(var f=0;f<=b.length;f++)for(var g=0;g<=a.length;g++)f&&g?a.charAt(g-1)===b.charAt(f-1)?e=d:e=Math.min(c[g],c[g-1],d)+1:e=f+g,d=c[g],c[g]=e;return c.pop()},k={lt:"<",gt:">",quot:'"',apos:"'",amp:"&"},l={};for(var m in k)l[k[m]]=m;var n=function(){function a(a){return Object.prototype.toString.call(a).slice(8,-1).toLowerCase()}var b=f,c=function(){return c.cache.hasOwnProperty(arguments[0])||(c.cache[arguments[0]]=c.parse(arguments[0])),c.format.call(null,c.cache[arguments[0]],arguments)};return c.format=function(c,d){var e=1,f=c.length,g="",h,i=[],j,k,l,m,o,p;for(j=0;j<f;j++){g=a(c[j]);if(g==="string")i.push(c[j]);else if(g==="array"){l=c[j];if(l[2]){h=d[e];for(k=0;k<l[2].length;k++){if(!h.hasOwnProperty(l[2][k]))throw new Error(n('[_.sprintf] property "%s" does not exist',l[2][k]));h=h[l[2][k]]}}else l[1]?h=d[l[1]]:h=d[e++];if(/[^s]/.test(l[8])&&a(h)!="number")throw new Error(n("[_.sprintf] expecting number but found %s",a(h)));switch(l[8]){case"b":h=h.toString(2);break;case"c":h=String.fromCharCode(h);break;case"d":h=parseInt(h,10);break;case"e":h=l[7]?h.toExponential(l[7]):h.toExponential();break;case"f":h=l[7]?parseFloat(h).toFixed(l[7]):parseFloat(h);break;case"o":h=h.toString(8);break;case"s":h=(h=String(h))&&l[7]?h.substring(0,l[7]):h;break;case"u":h=Math.abs(h);break;case"x":h=h.toString(16);break;case"X":h=h.toString(16).toUpperCase()}h=/[def]/.test(l[8])&&l[3]&&h>=0?"+"+h:h,o=l[4]?l[4]=="0"?"0":l[4].charAt(1):" ",p=l[6]-String(h).length,m=l[6]?b(o,p):"",i.push(l[5]?h+m:m+h)}}return i.join("")},c.cache={},c.parse=function(a){var b=a,c=[],d=[],e=0;while(b){if((c=/^[^\x25]+/.exec(b))!==null)d.push(c[0]);else if((c=/^\x25{2}/.exec(b))!==null)d.push("%");else{if((c=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(b))===null)throw new Error("[_.sprintf] huh?");if(c[2]){e|=1;var f=[],g=c[2],h=[];if((h=/^([a-z_][a-z_\d]*)/i.exec(g))===null)throw new Error("[_.sprintf] huh?");f.push(h[1]);while((g=g.substring(h[0].length))!=="")if((h=/^\.([a-z_][a-z_\d]*)/i.exec(g))!==null)f.push(h[1]);else{if((h=/^\[(\d+)\]/.exec(g))===null)throw new Error("[_.sprintf] huh?");f.push(h[1])}c[2]=f}else e|=2;if(e===3)throw new Error("[_.sprintf] mixing positional and named placeholders is not (yet) supported");d.push(c)}b=b.substring(c[0].length)}return d},c}(),o={VERSION:"2.2.0rc",isBlank:function(a){return/^\s*$/.test(a)},stripTags:function(a){return h(a,/<\/?[^>]+>/g,"")},capitalize:function(a){return a+="",a.charAt(0).toUpperCase()+a.slice(1)},chop:function(a,b){return a+="",b=~~b,b>0?a.match(new RegExp(".{1,"+b+"}","g")):[a]},clean:function(a){return o.strip(a).replace(/\s+/g," ")},count:function(a,b){return a+="",b+="",a.split(b).length-1},chars:function(a){return(""+a).split("")},swapCase:function(a){return h(a,/\S/g,function(a){return a===a.toUpperCase()?a.toLowerCase():a.toUpperCase()})},escapeHTML:function(a){return h(a,/[&<>"']/g,function(a){return"&"+l[a]+";"})},unescapeHTML:function(a){return h(a,/\&([^;]+);/g,function(a,b){var c;return b in k?k[b]:(c=b.match(/^#x([\da-fA-F]+)$/))?String.fromCharCode(parseInt(c[1],16)):(c=b.match(/^#(\d+)$/))?String.fromCharCode(~~c[1]):a})},escapeRegExp:function(a){return h(a,/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")},insert:function(a,b,c){var d=o.chars(a);return d.splice(~~b,0,""+c),d.join("")},include:function(a,b){return!!~(""+a).indexOf(b)},join:function(){var a=g.call(arguments);return a.join(a.shift())},lines:function(a){return(""+a).split("\n")},reverse:function(a){return o.chars(a).reverse().join("")},splice:function(a,b,c,d){var e=o.chars(a);return e.splice(~~b,~~c,d),e.join("")},startsWith:function(a,b){return a+="",b+="",a.length>=b.length&&a.slice(0,b.length)===b},endsWith:function(a,b){return a+="",b+="",a.length>=b.length&&a.slice(a.length-b.length)===b},succ:function(a){a+="";var b=o.chars(a);return b.splice(a.length-1,1,String.fromCharCode(a.charCodeAt(a.length-1)+1)),b.join("")},titleize:function(a){return h(a,/(?:^|\s)\S/g,function(a){return a.toUpperCase()})},camelize:function(a){return o.trim(a).replace(/[-_\s]+(.)?/g,function(a,b){return b.toUpperCase()})},underscored:function(a){return o.trim(a).replace(/([a-z\d])([A-Z]+)/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase()},dasherize:function(a){return o.trim(a).replace(/([A-Z])/g,"-$1").replace(/[-_\s]+/g,"-").toLowerCase()},classify:function(a){return o.titleize(h(a,/_/g," ")).replace(/\s/g,"")},humanize:function(a){return o.capitalize(o.underscored(a).replace(/_id$/,"").replace(/_/g," "))},trim:function(a,c){return a+="",!c&&b?b.call(a):(c=i(c),a.replace(new RegExp("^"+c+"+|"+c+"+$","g"),""))},ltrim:function(a,b){return a+="",!b&&d?d.call(a):(b=i(b),a.replace(new RegExp("^"+b+"+"),""))},rtrim:function(a,b){return a+="",!b&&c?c.call(a):(b=i(b),a.replace(new RegExp(b+"+$"),""))},truncate:function(a,b,c){return a+="",c=c||"...",b=~~b,a.length>b?a.slice(0,b)+c:a},prune:function(a,b,c){a+="",b=~~b,c=c!=null?""+c:"...";var d,e,f=a.replace(/\W/g,function(a){return a.toUpperCase()!==a.toLowerCase()?"A":" "});return e=f.charAt(b),d=f.slice(0,b),e&&e.match(/\S/)&&(d=d.replace(/\s\S+$/,"")),d=o.rtrim(d),(d+c).length>a.length?a:a.slice(0,d.length)+c},words:function(a,b){return o.trim(a,b).split(b||/\s+/)},pad:function(a,b,c,d){a+="";var e=0;b=~~b,c?c.length>1&&(c=c.charAt(0)):c=" ";switch(d){case"right":return e=b-a.length,a+f(c,e);case"both":return e=b-a.length,f(c,Math.ceil(e/2))+a+f(c,Math.floor(e/2));default:return e=b-a.length,f(c,e)+a}},lpad:function(a,b,c){return o.pad(a,b,c)},rpad:function(a,b,c){return o.pad(a,b,c,"right")},lrpad:function(a,b,c){return o.pad(a,b,c,"both")},sprintf:n,vsprintf:function(a,b){return b.unshift(a),n.apply(null,b)},toNumber:function(a,b){a+="";var c=e(e(a).toFixed(~~b));return c===0&&!a.match(/^0+$/)?Number.NaN:c},strRight:function(a,b){a+="",b=b!=null?""+b:b;var c=b?a.indexOf(b):-1;return~c?a.slice(c+b.length,a.length):a},strRightBack:function(a,b){a+="",b=b!=null?""+b:b;var c=b?a.lastIndexOf(b):-1;return~c?a.slice(c+b.length,a.length):a},strLeft:function(a,b){a+="",b=b!=null?""+b:b;var c=b?a.indexOf(b):-1;return~c?a.slice(0,c):a},strLeftBack:function(a,b){a+="",b=b!=null?""+b:b;var c=a.lastIndexOf(b);return~c?a.slice(0,c):a},toSentence:function(a,b,c){b||(b=", "),c||(c=" and ");var d=a.length,e="";for(var f=0;f<d;f++)e+=a[f],f===d-2?e+=c:f<d-1&&(e+=b);return e},slugify:function(a){var b="ąàáäâãćęèéëêìíïîłńòóöôõùúüûñçżź",c="aaaaaaceeeeeiiiilnooooouuuunczz",d=new RegExp(i(b),"g");return a=(""+a).toLowerCase(),a=a.replace(d,function(a){var d=b.indexOf(a);return c.charAt(d)||"-"}),o.dasherize(a.replace(/[^\w\s-]/g,""))},surround:function(a,b){return[b,a,b].join("")},quote:function(a){return o.surround(a,'"')},exports:function(){var a={};for(var b in this){if(!this.hasOwnProperty(b)||b.match(/^(?:include|contains|reverse)$/))continue;a[b]=this[b]}return a},repeat:function(a,b,c){b=~~b;if(c==null)return f(a+"",b);for(var d=[];b>0;d[--b]=a);return d.join(c)},levenshtein:j};o.strip=o.trim,o.lstrip=o.ltrim,o.rstrip=o.rtrim,o.center=o.lrpad,o.rjust=o.lpad,o.ljust=o.rpad,o.contains=o.include,o.q=o.quote,typeof exports!="undefined"?(typeof module!="undefined"&&module.exports&&(module.exports=o),exports._s=o):typeof define=="function"&&define.amd?define("underscore.string",[],function(){return o}):(a._=a._||{},a._.string=a._.str=o)}(this); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/js_external/zxcvbn/zxcvbn-async.js b/wqflask/wqflask/static/new/js_external/zxcvbn/zxcvbn-async.js
deleted file mode 100644
index 404944d3..00000000
--- a/wqflask/wqflask/static/new/js_external/zxcvbn/zxcvbn-async.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var a;a=function(){var a,b;b=document.createElement("script");b.src="//dl.dropbox.com/u/209/zxcvbn/zxcvbn.js";b.type="text/javascript";b.async=!0;a=document.getElementsByTagName("script")[0];return a.parentNode.insertBefore(b,a)};null!=window.attachEvent?window.attachEvent("onload",a):window.addEventListener("load",a,!1)}).call(this);
diff --git a/wqflask/wqflask/static/new/packages/DataTables/css/demo_page.css b/wqflask/wqflask/static/new/packages/DataTables/css/demo_page.css
deleted file mode 100644
index ba5b2a6c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/css/demo_page.css
+++ /dev/null
@@ -1,122 +0,0 @@
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * General page setup
- */
-#dt_example {
- font: 80%/1.45em "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
- margin: 0;
- padding: 0;
- color: #333;
- background-color: #fff;
-}
-
-
-#dt_example #container {
- width: 800px;
- margin: 30px auto;
- padding: 0;
-}
-
-
-#dt_example #footer {
- margin: 50px auto 0 auto;
- padding: 0;
-}
-
-#dt_example #demo {
- margin: 30px auto 0 auto;
-}
-
-#dt_example .demo_jui {
- margin: 30px auto 0 auto;
-}
-
-#dt_example .big {
- font-size: 1.3em;
- font-weight: bold;
- line-height: 1.6em;
- color: #4E6CA3;
-}
-
-#dt_example .spacer {
- height: 20px;
- clear: both;
-}
-
-#dt_example .clear {
- clear: both;
-}
-
-#dt_example pre {
- padding: 15px;
- background-color: #F5F5F5;
- border: 1px solid #CCCCCC;
-}
-
-#dt_example h1 {
- margin-top: 2em;
- font-size: 1.3em;
- font-weight: normal;
- line-height: 1.6em;
- color: #4E6CA3;
- border-bottom: 1px solid #B0BED9;
- clear: both;
-}
-
-#dt_example h2 {
- font-size: 1.2em;
- font-weight: normal;
- line-height: 1.6em;
- color: #4E6CA3;
- clear: both;
-}
-
-#dt_example a {
- color: #0063DC;
- text-decoration: none;
-}
-
-#dt_example a:hover {
- text-decoration: underline;
-}
-
-#dt_example ul {
- color: #4E6CA3;
-}
-
-.css_right {
- float: right;
-}
-
-.css_left {
- float: left;
-}
-
-.demo_links {
- float: left;
- width: 50%;
- margin-bottom: 1em;
-}
-
-#demo_info {
- padding: 5px;
- border: 1px solid #B0BED9;
- height: 100px;
- width: 100%;
- overflow: auto;
-}
-
-#dt_example code {
- font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
- padding: 2px 4px !important;
- white-space: nowrap;
- font-size: 0.9em;
-
- color: #D14;
- background-color: #F7F7F9;
-
- border: 1px solid #E1E1E8;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
diff --git a/wqflask/wqflask/static/new/packages/DataTables/css/demo_table.css b/wqflask/wqflask/static/new/packages/DataTables/css/demo_table.css
deleted file mode 100644
index 12f352da..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/css/demo_table.css
+++ /dev/null
@@ -1,577 +0,0 @@
-/*
- * File: demo_table.css
- * CVS: $Id$
- * Description: CSS descriptions for DataTables demo pages
- * Author: Allan Jardine
- * Created: Tue May 12 06:47:22 BST 2009
- * Modified: $Date$ by $Author$
- * Language: CSS
- * Project: DataTables
- *
- * Copyright 2009 Allan Jardine. All Rights Reserved.
- *
- * ***************************************************************************
- * DESCRIPTION
- *
- * The styles given here are suitable for the demos that are used with the standard DataTables
- * distribution (see www.datatables.net). You will most likely wish to modify these styles to
- * meet the layout requirements of your site.
- *
- * Common issues:
- * 'full_numbers' pagination - I use an extra selector on the body tag to ensure that there is
- * no conflict between the two pagination types. If you want to use full_numbers pagination
- * ensure that you either have "example_alt_pagination" as a body class name, or better yet,
- * modify that selector.
- * Note that the path used for Images is relative. All images are by default located in
- * ../images/ - relative to this CSS file.
- */
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables features
- */
-
-.dataTables_wrapper {
- position: relative;
- clear: both;
- zoom: 1; /* Feeling sorry for IE */
-}
-
-.dataTables_processing {
- position: absolute;
- top: 50%;
- left: 50%;
- width: 250px;
- height: 30px;
- margin-left: -125px;
- margin-top: -15px;
- padding: 14px 0 2px 0;
- border: 1px solid #ddd;
- text-align: center;
- color: #999;
- font-size: 14px;
- background-color: white;
-}
-
-.dataTables_length {
- width: 40%;
- float: left;
-}
-
-.dataTables_filter {
- width: 50%;
- float: right;
- text-align: right;
-}
-
-.dataTables_info {
- width: 60%;
- float: left;
-}
-
-.dataTables_paginate {
- float: right;
- text-align: right;
-}
-
-/* Pagination nested */
-.paginate_disabled_previous, .paginate_enabled_previous,
-.paginate_disabled_next, .paginate_enabled_next {
- height: 19px;
- float: left;
- cursor: pointer;
- *cursor: hand;
- color: #111 !important;
-}
-.paginate_disabled_previous:hover, .paginate_enabled_previous:hover,
-.paginate_disabled_next:hover, .paginate_enabled_next:hover {
- text-decoration: none !important;
-}
-.paginate_disabled_previous:active, .paginate_enabled_previous:active,
-.paginate_disabled_next:active, .paginate_enabled_next:active {
- outline: none;
-}
-
-.paginate_disabled_previous,
-.paginate_disabled_next {
- color: #666 !important;
-}
-.paginate_disabled_previous, .paginate_enabled_previous {
- padding-left: 23px;
-}
-.paginate_disabled_next, .paginate_enabled_next {
- padding-right: 23px;
- margin-left: 10px;
-}
-
-.paginate_disabled_previous {
- background: url('../images/back_disabled.png') no-repeat top left;
-}
-
-.paginate_enabled_previous {
- background: url('../images/back_enabled.png') no-repeat top left;
-}
-.paginate_enabled_previous:hover {
- background: url('../images/back_enabled_hover.png') no-repeat top left;
-}
-
-.paginate_disabled_next {
- background: url('../images/forward_disabled.png') no-repeat top right;
-}
-
-.paginate_enabled_next {
- background: url('../images/forward_enabled.png') no-repeat top right;
-}
-.paginate_enabled_next:hover {
- background: url('../images/forward_enabled_hover.png') no-repeat top right;
-}
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables display
- */
-table.display {
- margin: 0 auto;
- clear: both;
- width: 100%;
-
- /* Note Firefox 3.5 and before have a bug with border-collapse
- * ( https://bugzilla.mozilla.org/show%5Fbug.cgi?id=155955 )
- * border-spacing: 0; is one possible option. Conditional-css.com is
- * useful for this kind of thing
- *
- * Further note IE 6/7 has problems when calculating widths with border width.
- * It subtracts one px relative to the other browsers from the first column, and
- * adds one to the end...
- *
- * If you want that effect I'd suggest setting a border-top/left on th/td's and
- * then filling in the gaps with other borders.
- */
-}
-
-table.display thead th {
- padding: 3px 18px 3px 10px;
- border-bottom: 1px solid black;
- font-weight: bold;
- cursor: pointer;
- * cursor: hand;
-}
-
-table.display tfoot th {
- padding: 3px 18px 3px 10px;
- border-top: 1px solid black;
- font-weight: bold;
-}
-
-table.display tr.heading2 td {
- border-bottom: 1px solid #aaa;
-}
-
-table.display td {
- padding: 3px 10px;
-}
-
-table.display td.center {
- text-align: center;
-}
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables sorting
- */
-
-.sorting_asc {
- background: url('../images/sort_asc.png') no-repeat center right;
-}
-
-.sorting_desc {
- background: url('../images/sort_desc.png') no-repeat center right;
-}
-
-.sorting {
- background: url('../images/sort_both.png') no-repeat center right;
-}
-
-.sorting_asc_disabled {
- background: url('../images/sort_asc_disabled.png') no-repeat center right;
-}
-
-.sorting_desc_disabled {
- background: url('../images/sort_desc_disabled.png') no-repeat center right;
-}
-
-table.display thead th:active,
-table.display thead td:active {
- outline: none;
-}
-
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables row classes
- */
-table.display tr.odd.gradeA {
- background-color: #ddffdd;
-}
-
-table.display tr.even.gradeA {
- background-color: #eeffee;
-}
-
-table.display tr.odd.gradeC {
- background-color: #ddddff;
-}
-
-table.display tr.even.gradeC {
- background-color: #eeeeff;
-}
-
-table.display tr.odd.gradeX {
- background-color: #ffdddd;
-}
-
-table.display tr.even.gradeX {
- background-color: #ffeeee;
-}
-
-table.display tr.odd.gradeU {
- background-color: #ddd;
-}
-
-table.display tr.even.gradeU {
- background-color: #eee;
-}
-
-
-tr.odd {
- background-color: #E2E4FF;
-}
-
-tr.even {
- background-color: white;
-}
-
-
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Misc
- */
-.dataTables_scroll {
- clear: both;
-}
-
-.dataTables_scrollBody {
- *margin-top: -1px;
- -webkit-overflow-scrolling: touch;
-}
-
-.top, .bottom {
- padding: 15px;
- background-color: #F5F5F5;
- border: 1px solid #CCCCCC;
-}
-
-.top .dataTables_info {
- float: none;
-}
-
-.clear {
- clear: both;
-}
-
-.dataTables_empty {
- text-align: center;
-}
-
-tfoot input {
- margin: 0.5em 0;
- width: 100%;
- color: #444;
-}
-
-tfoot input.search_init {
- color: #999;
-}
-
-td.group {
- background-color: #d1cfd0;
- border-bottom: 2px solid #A19B9E;
- border-top: 2px solid #A19B9E;
-}
-
-td.details {
- background-color: #d1cfd0;
- border: 2px solid #A19B9E;
-}
-
-
-.example_alt_pagination div.dataTables_info {
- width: 40%;
-}
-
-.paging_full_numbers {
- width: 400px;
- height: 22px;
- line-height: 22px;
-}
-
-.paging_full_numbers a:active {
- outline: none
-}
-
-.paging_full_numbers a:hover {
- text-decoration: none;
-}
-
-.paging_full_numbers a.paginate_button,
- .paging_full_numbers a.paginate_active {
- border: 1px solid #aaa;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- padding: 2px 5px;
- margin: 0 3px;
- cursor: pointer;
- *cursor: hand;
- color: #333 !important;
-}
-
-.paging_full_numbers a.paginate_button {
- background-color: #ddd;
-}
-
-.paging_full_numbers a.paginate_button:hover {
- background-color: #ccc;
- text-decoration: none !important;
-}
-
-.paging_full_numbers a.paginate_active {
- background-color: #99B3FF;
-}
-
-table.display tr.even.row_selected td {
- background-color: #B0BED9;
-}
-
-table.display tr.odd.row_selected td {
- background-color: #9FAFD1;
-}
-
-
-/*
- * Sorting classes for columns
- */
-/* For the standard odd/even */
-tr.odd td.sorting_1 {
- background-color: #D3D6FF;
-}
-
-tr.odd td.sorting_2 {
- background-color: #DADCFF;
-}
-
-tr.odd td.sorting_3 {
- background-color: #E0E2FF;
-}
-
-tr.even td.sorting_1 {
- background-color: #EAEBFF;
-}
-
-tr.even td.sorting_2 {
- background-color: #F2F3FF;
-}
-
-tr.even td.sorting_3 {
- background-color: #F9F9FF;
-}
-
-
-/* For the Conditional-CSS grading rows */
-/*
- Colour calculations (based off the main row colours)
- Level 1:
- dd > c4
- ee > d5
- Level 2:
- dd > d1
- ee > e2
- */
-tr.odd.gradeA td.sorting_1 {
- background-color: #c4ffc4;
-}
-
-tr.odd.gradeA td.sorting_2 {
- background-color: #d1ffd1;
-}
-
-tr.odd.gradeA td.sorting_3 {
- background-color: #d1ffd1;
-}
-
-tr.even.gradeA td.sorting_1 {
- background-color: #d5ffd5;
-}
-
-tr.even.gradeA td.sorting_2 {
- background-color: #e2ffe2;
-}
-
-tr.even.gradeA td.sorting_3 {
- background-color: #e2ffe2;
-}
-
-tr.odd.gradeC td.sorting_1 {
- background-color: #c4c4ff;
-}
-
-tr.odd.gradeC td.sorting_2 {
- background-color: #d1d1ff;
-}
-
-tr.odd.gradeC td.sorting_3 {
- background-color: #d1d1ff;
-}
-
-tr.even.gradeC td.sorting_1 {
- background-color: #d5d5ff;
-}
-
-tr.even.gradeC td.sorting_2 {
- background-color: #e2e2ff;
-}
-
-tr.even.gradeC td.sorting_3 {
- background-color: #e2e2ff;
-}
-
-tr.odd.gradeX td.sorting_1 {
- background-color: #ffc4c4;
-}
-
-tr.odd.gradeX td.sorting_2 {
- background-color: #ffd1d1;
-}
-
-tr.odd.gradeX td.sorting_3 {
- background-color: #ffd1d1;
-}
-
-tr.even.gradeX td.sorting_1 {
- background-color: #ffd5d5;
-}
-
-tr.even.gradeX td.sorting_2 {
- background-color: #ffe2e2;
-}
-
-tr.even.gradeX td.sorting_3 {
- background-color: #ffe2e2;
-}
-
-tr.odd.gradeU td.sorting_1 {
- background-color: #c4c4c4;
-}
-
-tr.odd.gradeU td.sorting_2 {
- background-color: #d1d1d1;
-}
-
-tr.odd.gradeU td.sorting_3 {
- background-color: #d1d1d1;
-}
-
-tr.even.gradeU td.sorting_1 {
- background-color: #d5d5d5;
-}
-
-tr.even.gradeU td.sorting_2 {
- background-color: #e2e2e2;
-}
-
-tr.even.gradeU td.sorting_3 {
- background-color: #e2e2e2;
-}
-
-
-/*
- * Row highlighting example
- */
-.ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted {
- background-color: #ECFFB3;
-}
-
-.ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted {
- background-color: #E6FF99;
-}
-
-.ex_highlight_row #example tr.even:hover {
- background-color: #ECFFB3;
-}
-
-.ex_highlight_row #example tr.even:hover td.sorting_1 {
- background-color: #DDFF75;
-}
-
-.ex_highlight_row #example tr.even:hover td.sorting_2 {
- background-color: #E7FF9E;
-}
-
-.ex_highlight_row #example tr.even:hover td.sorting_3 {
- background-color: #E2FF89;
-}
-
-.ex_highlight_row #example tr.odd:hover {
- background-color: #E6FF99;
-}
-
-.ex_highlight_row #example tr.odd:hover td.sorting_1 {
- background-color: #D6FF5C;
-}
-
-.ex_highlight_row #example tr.odd:hover td.sorting_2 {
- background-color: #E0FF84;
-}
-
-.ex_highlight_row #example tr.odd:hover td.sorting_3 {
- background-color: #DBFF70;
-}
-
-
-/*
- * KeyTable
- */
-table.KeyTable td {
- border: 3px solid transparent;
-}
-
-table.KeyTable td.focus {
- border: 3px solid #3366FF;
-}
-
-table.display tr.gradeA {
- background-color: #eeffee;
-}
-
-table.display tr.gradeC {
- background-color: #ddddff;
-}
-
-table.display tr.gradeX {
- background-color: #ffdddd;
-}
-
-table.display tr.gradeU {
- background-color: #ddd;
-}
-
-div.box {
- height: 100px;
- padding: 10px;
- overflow: auto;
- border: 1px solid #8080FF;
- background-color: #E5E5FF;
-}
diff --git a/wqflask/wqflask/static/new/packages/DataTables/css/demo_table_jui.css b/wqflask/wqflask/static/new/packages/DataTables/css/demo_table_jui.css
deleted file mode 100644
index a210af51..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/css/demo_table_jui.css
+++ /dev/null
@@ -1,501 +0,0 @@
-/*
- * File: demo_table_jui.css
- * CVS: $Id$
- * Description: CSS descriptions for DataTables demo pages
- * Author: Allan Jardine
- * Created: Tue May 12 06:47:22 BST 2009
- * Modified: $Date$ by $Author$
- * Language: CSS
- * Project: DataTables
- *
- * Copyright 2009 Allan Jardine. All Rights Reserved.
- *
- * ***************************************************************************
- * DESCRIPTION
- *
- * The styles given here are suitable for the demos that are used with the standard DataTables
- * distribution (see www.datatables.net). You will most likely wish to modify these styles to
- * meet the layout requirements of your site.
- *
- * Common issues:
- * 'full_numbers' pagination - I use an extra selector on the body tag to ensure that there is
- * no conflict between the two pagination types. If you want to use full_numbers pagination
- * ensure that you either have "example_alt_pagination" as a body class name, or better yet,
- * modify that selector.
- * Note that the path used for Images is relative. All images are by default located in
- * ../images/ - relative to this CSS file.
- */
-
-
-/*
- * jQuery UI specific styling
- */
-
-.paging_two_button .ui-button {
- float: left;
- cursor: pointer;
- * cursor: hand;
-}
-
-.paging_full_numbers .ui-button {
- padding: 2px 6px;
- margin: 0;
- cursor: pointer;
- * cursor: hand;
- color: #333 !important;
-}
-
-.dataTables_paginate .ui-button {
- margin-right: -0.1em !important;
-}
-
-.paging_full_numbers {
- width: 350px !important;
-}
-
-.dataTables_wrapper .ui-toolbar {
- padding: 5px;
-}
-
-.dataTables_paginate {
- width: auto;
-}
-
-.dataTables_info {
- padding-top: 3px;
-}
-
-table.display thead th {
- padding: 3px 0px 3px 10px;
- cursor: pointer;
- * cursor: hand;
-}
-
-div.dataTables_wrapper .ui-widget-header {
- font-weight: normal;
-}
-
-
-/*
- * Sort arrow icon positioning
- */
-table.display thead th div.DataTables_sort_wrapper {
- position: relative;
- padding-right: 20px;
-}
-
-table.display thead th div.DataTables_sort_wrapper span {
- position: absolute;
- top: 50%;
- margin-top: -8px;
- right: 0;
-}
-
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *
- * Everything below this line is the same as demo_table.css. This file is
- * required for 'cleanliness' of the markup
- *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables features
- */
-
-.dataTables_wrapper {
- position: relative;
- clear: both;
-}
-
-.dataTables_processing {
- position: absolute;
- top: 0px;
- left: 50%;
- width: 250px;
- margin-left: -125px;
- border: 1px solid #ddd;
- text-align: center;
- color: #999;
- font-size: 11px;
- padding: 2px 0;
-}
-
-.dataTables_length {
- width: 40%;
- float: left;
-}
-
-.dataTables_filter {
- width: 50%;
- float: right;
- text-align: right;
-}
-
-.dataTables_info {
- width: 50%;
- float: left;
-}
-
-.dataTables_paginate {
- float: right;
- text-align: right;
-}
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables display
- */
-table.display {
- margin: 0 auto;
- width: 100%;
- clear: both;
- border-collapse: collapse;
-}
-
-table.display tfoot th {
- padding: 3px 0px 3px 10px;
- font-weight: bold;
- font-weight: normal;
-}
-
-table.display tr.heading2 td {
- border-bottom: 1px solid #aaa;
-}
-
-table.display td {
- padding: 3px 10px;
-}
-
-table.display td.center {
- text-align: center;
-}
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables sorting
- */
-
-.sorting_asc {
- background: url('../images/sort_asc.png') no-repeat center right;
-}
-
-.sorting_desc {
- background: url('../images/sort_desc.png') no-repeat center right;
-}
-
-.sorting {
- background: url('../images/sort_both.png') no-repeat center right;
-}
-
-.sorting_asc_disabled {
- background: url('../images/sort_asc_disabled.png') no-repeat center right;
-}
-
-.sorting_desc_disabled {
- background: url('../images/sort_desc_disabled.png') no-repeat center right;
-}
-
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables row classes
- */
-table.display tr.odd.gradeA {
- background-color: #ddffdd;
-}
-
-table.display tr.even.gradeA {
- background-color: #eeffee;
-}
-
-
-
-
-table.display tr.odd.gradeA {
- background-color: #ddffdd;
-}
-
-table.display tr.even.gradeA {
- background-color: #eeffee;
-}
-
-table.display tr.odd.gradeC {
- background-color: #ddddff;
-}
-
-table.display tr.even.gradeC {
- background-color: #eeeeff;
-}
-
-table.display tr.odd.gradeX {
- background-color: #ffdddd;
-}
-
-table.display tr.even.gradeX {
- background-color: #ffeeee;
-}
-
-table.display tr.odd.gradeU {
- background-color: #ddd;
-}
-
-table.display tr.even.gradeU {
- background-color: #eee;
-}
-
-
-tr.odd {
- background-color: #E2E4FF;
-}
-
-tr.even {
- background-color: white;
-}
-
-
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Misc
- */
-.dataTables_scroll {
- clear: both;
-}
-
-.dataTables_scrollBody {
- -webkit-overflow-scrolling: touch;
-}
-
-.top, .bottom {
- padding: 15px;
- background-color: #F5F5F5;
- border: 1px solid #CCCCCC;
-}
-
-.top .dataTables_info {
- float: none;
-}
-
-.clear {
- clear: both;
-}
-
-.dataTables_empty {
- text-align: center;
-}
-
-tfoot input {
- margin: 0.5em 0;
- width: 100%;
- color: #444;
-}
-
-tfoot input.search_init {
- color: #999;
-}
-
-td.group {
- background-color: #d1cfd0;
- border-bottom: 2px solid #A19B9E;
- border-top: 2px solid #A19B9E;
-}
-
-td.details {
- background-color: #d1cfd0;
- border: 2px solid #A19B9E;
-}
-
-
-.example_alt_pagination div.dataTables_info {
- width: 40%;
-}
-
-.paging_full_numbers a.paginate_button,
- .paging_full_numbers a.paginate_active {
- border: 1px solid #aaa;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- padding: 2px 5px;
- margin: 0 3px;
- cursor: pointer;
- *cursor: hand;
- color: #333 !important;
-}
-
-.paging_full_numbers a.paginate_button {
- background-color: #ddd;
-}
-
-.paging_full_numbers a.paginate_button:hover {
- background-color: #ccc;
- text-decoration: none !important;
-}
-
-.paging_full_numbers a.paginate_active {
- background-color: #99B3FF;
-}
-
-table.display tr.even.row_selected td {
- background-color: #B0BED9;
-}
-
-table.display tr.odd.row_selected td {
- background-color: #9FAFD1;
-}
-
-
-/*
- * Sorting classes for columns
- */
-/* For the standard odd/even */
-tr.odd td.sorting_1 {
- background-color: #D3D6FF;
-}
-
-tr.odd td.sorting_2 {
- background-color: #DADCFF;
-}
-
-tr.odd td.sorting_3 {
- background-color: #E0E2FF;
-}
-
-tr.even td.sorting_1 {
- background-color: #EAEBFF;
-}
-
-tr.even td.sorting_2 {
- background-color: #F2F3FF;
-}
-
-tr.even td.sorting_3 {
- background-color: #F9F9FF;
-}
-
-
-/* For the Conditional-CSS grading rows */
-/*
- Colour calculations (based off the main row colours)
- Level 1:
- dd > c4
- ee > d5
- Level 2:
- dd > d1
- ee > e2
- */
-tr.odd.gradeA td.sorting_1 {
- background-color: #c4ffc4;
-}
-
-tr.odd.gradeA td.sorting_2 {
- background-color: #d1ffd1;
-}
-
-tr.odd.gradeA td.sorting_3 {
- background-color: #d1ffd1;
-}
-
-tr.even.gradeA td.sorting_1 {
- background-color: #d5ffd5;
-}
-
-tr.even.gradeA td.sorting_2 {
- background-color: #e2ffe2;
-}
-
-tr.even.gradeA td.sorting_3 {
- background-color: #e2ffe2;
-}
-
-tr.odd.gradeC td.sorting_1 {
- background-color: #c4c4ff;
-}
-
-tr.odd.gradeC td.sorting_2 {
- background-color: #d1d1ff;
-}
-
-tr.odd.gradeC td.sorting_3 {
- background-color: #d1d1ff;
-}
-
-tr.even.gradeC td.sorting_1 {
- background-color: #d5d5ff;
-}
-
-tr.even.gradeC td.sorting_2 {
- background-color: #e2e2ff;
-}
-
-tr.even.gradeC td.sorting_3 {
- background-color: #e2e2ff;
-}
-
-tr.odd.gradeX td.sorting_1 {
- background-color: #ffc4c4;
-}
-
-tr.odd.gradeX td.sorting_2 {
- background-color: #ffd1d1;
-}
-
-tr.odd.gradeX td.sorting_3 {
- background-color: #ffd1d1;
-}
-
-tr.even.gradeX td.sorting_1 {
- background-color: #ffd5d5;
-}
-
-tr.even.gradeX td.sorting_2 {
- background-color: #ffe2e2;
-}
-
-tr.even.gradeX td.sorting_3 {
- background-color: #ffe2e2;
-}
-
-tr.odd.gradeU td.sorting_1 {
- background-color: #c4c4c4;
-}
-
-tr.odd.gradeU td.sorting_2 {
- background-color: #d1d1d1;
-}
-
-tr.odd.gradeU td.sorting_3 {
- background-color: #d1d1d1;
-}
-
-tr.even.gradeU td.sorting_1 {
- background-color: #d5d5d5;
-}
-
-tr.even.gradeU td.sorting_2 {
- background-color: #e2e2e2;
-}
-
-tr.even.gradeU td.sorting_3 {
- background-color: #e2e2e2;
-}
-
-
-/*
- * Row highlighting example
- */
-.ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted {
- background-color: #ECFFB3;
-}
-
-.ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted {
- background-color: #E6FF99;
-} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables.css b/wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables.css
deleted file mode 100644
index f376d15e..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables.css
+++ /dev/null
@@ -1,471 +0,0 @@
-/*
- * Table styles
- */
-table.dataTable {
- //width: 100%;
- margin: 0 auto;
- clear: both;
- border-collapse: separate;
- border-spacing: 0;
- /*
- * Header and footer styles
- */
- /*
- * Body styles
- */
-}
-td.highlight {
- background-color: whitesmoke !important;
-}
-table.dataTable thead th,
-table.dataTable tfoot th {
- font-weight: bold;
-}
-table.dataTable thead th,
-table.dataTable thead td {
- font: bold 12px/20px Arial, Sans-serif;
- color: #000000;
- background-color: #ffffff;
- border-collapse: collapse;
- border-bottom: #cccccc 2px solid;
- //padding: 0;
- padding: 10px 18px 4px 10px;
- //border-bottom: 1px solid #111;
-}
-table.dataTable thead th:active,
-table.dataTable thead td:active {
- outline: none;
-}
-table.dataTable tfoot th,
-table.dataTable tfoot td {
- font: bold 12px/20px Arial, Sans-serif;
- color: #000000;
- background-color: #ffffff;
- border-collapse: collapse;
- border-top: #cccccc 2px solid;
- //padding: 0;
- padding: 10px 18px 6px 18px;
- //border-top: 1px solid #111;
-}
-table.dataTable thead .sorting,
-table.dataTable thead .sorting_asc,
-table.dataTable thead .sorting_desc {
- cursor: pointer;
- *cursor: hand;
-}
-table.dataTable thead .sorting,
-table.dataTable thead .sorting_asc,
-table.dataTable thead .sorting_desc,
-table.dataTable thead .sorting_asc_disabled,
-table.dataTable thead .sorting_desc_disabled {
- background-repeat: no-repeat;
- background-position: center right;
-}
-table.dataTable thead .sorting {
- background-image: url("../images/sort_both.png");
-}
-table.dataTable thead .sorting_asc {
- background-image: url("../images/sort_asc.png");
-}
-table.dataTable thead .sorting_desc {
- background-image: url("../images/sort_desc.png");
-}
-table.dataTable thead .sorting_asc_disabled {
- background-image: url("../images/sort_asc_disabled.png");
-}
-table.dataTable thead .sorting_desc_disabled {
- background-image: url("../images/sort_desc_disabled.png");
-}
-table.dataTable tbody tr {
- background-color: #ffffff;
-}
-table.dataTable tbody tr.selected {
- background-color: #ffee99;
-}
-table.dataTable tbody th,
-table.dataTable tbody td {
- font: 12px Arial, Sans-serif;
- padding: 8px 20px 6px 10px;
-}
-table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td {
- border-top: 1px solid #ddd;
-}
-table.dataTable.row-border tbody tr:first-child th,
-table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th,
-table.dataTable.display tbody tr:first-child td {
- border-top: none;
-}
-table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
- border-top: 1px solid #ddd;
- border-right: 1px solid #ddd;
-}
-table.dataTable.cell-border tbody tr th:first-child,
-table.dataTable.cell-border tbody tr td:first-child {
- border-left: 1px solid #ddd;
-}
-table.dataTable.cell-border tbody tr:first-child th,
-table.dataTable.cell-border tbody tr:first-child td {
- border-top: none;
-}
-table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {
- background-color: #f9f9f9;
-}
-table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {
- background-color: #FFEE99;
-}
-table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover {
- background-color: whitesmoke;
-}
-table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected {
- background-color: #FFEE99;
-}
-table.dataTable.order-column tbody tr > .sorting_1,
-table.dataTable.order-column tbody tr > .sorting_2,
-table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1,
-table.dataTable.display tbody tr > .sorting_2,
-table.dataTable.display tbody tr > .sorting_3 {
- background-color: #f9f9f9;
-}
-table.dataTable.order-column tbody tr.selected > .sorting_1,
-table.dataTable.order-column tbody tr.selected > .sorting_2,
-table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1,
-table.dataTable.display tbody tr.selected > .sorting_2,
-table.dataTable.display tbody tr.selected > .sorting_3 {
- background-color: #acbad4;
-}
-table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 {
- background-color: #f1f1f1;
-}
-table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 {
- background-color: #f3f3f3;
-}
-table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {
- background-color: whitesmoke;
-}
-table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {
- background-color: #ffe047;
-}
-table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {
- background-color: #a7b5ce;
-}
-table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {
- background-color: #a9b6d0;
-}
-table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 {
- background-color: #f9f9f9;
-}
-table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {
- background-color: #fbfbfb;
-}
-table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 {
- background-color: #fdfdfd;
-}
-table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {
- background-color: #ffe047;
-}
-table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {
- background-color: #adbbd6;
-}
-table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 {
- background-color: #afbdd8;
-}
-table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 {
- background-color: #eaeaea;
-}
-table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 {
- background-color: #ebebeb;
-}
-table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 {
- background-color: #eeeeee;
-}
-table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 {
- background-color: #ffe047;
-}
-table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 {
- background-color: #a2afc8;
-}
-table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 {
- background-color: #a4b2cb;
-}
-table.dataTable.no-footer {
- border-bottom: 1px solid #111;
-}
-table.dataTable.nowrap th, table.dataTable.nowrap td {
- white-space: nowrap;
-}
-table.dataTable.compact thead th,
-table.dataTable.compact thead td {
- padding: 4px 17px 4px 4px;
-}
-table.dataTable.compact tfoot th,
-table.dataTable.compact tfoot td {
- padding: 4px;
-}
-table.dataTable.compact tbody th,
-table.dataTable.compact tbody td {
- padding: 4px;
-}
-table.dataTable th.dt-left,
-table.dataTable td.dt-left {
- text-align: left;
-}
-table.dataTable th.dt-center,
-table.dataTable td.dt-center,
-table.dataTable td.dataTables_empty {
- text-align: center;
-}
-table.dataTable th.dt-right,
-table.dataTable td.dt-right {
- text-align: right;
-}
-table.dataTable th.dt-justify,
-table.dataTable td.dt-justify {
- text-align: justify;
-}
-table.dataTable th.dt-nowrap,
-table.dataTable td.dt-nowrap {
- white-space: nowrap;
-}
-table.dataTable thead th.dt-head-left,
-table.dataTable thead td.dt-head-left,
-table.dataTable tfoot th.dt-head-left,
-table.dataTable tfoot td.dt-head-left {
- text-align: left;
-}
-table.dataTable thead th.dt-head-center,
-table.dataTable thead td.dt-head-center,
-table.dataTable tfoot th.dt-head-center,
-table.dataTable tfoot td.dt-head-center {
- text-align: center;
-}
-table.dataTable thead th.dt-head-right,
-table.dataTable thead td.dt-head-right,
-table.dataTable tfoot th.dt-head-right,
-table.dataTable tfoot td.dt-head-right {
- text-align: right;
-}
-table.dataTable thead th.dt-head-justify,
-table.dataTable thead td.dt-head-justify,
-table.dataTable tfoot th.dt-head-justify,
-table.dataTable tfoot td.dt-head-justify {
- text-align: justify;
-}
-table.dataTable thead th.dt-head-nowrap,
-table.dataTable thead td.dt-head-nowrap,
-table.dataTable tfoot th.dt-head-nowrap,
-table.dataTable tfoot td.dt-head-nowrap {
- white-space: nowrap;
-}
-table.dataTable tbody th.dt-body-left,
-table.dataTable tbody td.dt-body-left {
- text-align: left;
-}
-table.dataTable tbody th.dt-body-center,
-table.dataTable tbody td.dt-body-center {
- text-align: center;
-}
-table.dataTable tbody th.dt-body-right,
-table.dataTable tbody td.dt-body-right {
- text-align: right;
-}
-table.dataTable tbody th.dt-body-justify,
-table.dataTable tbody td.dt-body-justify {
- text-align: justify;
-}
-table.dataTable tbody th.dt-body-nowrap,
-table.dataTable tbody td.dt-body-nowrap {
- white-space: nowrap;
-}
-
-table.dataTable,
-table.dataTable th,
-table.dataTable td {
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
-}
-
-/*
- * Control feature layout
- */
-.dataTables_wrapper {
- position: relative;
- clear: both;
- *zoom: 1;
- zoom: 1;
-}
-.dataTables_wrapper .dataTables_length {
- float: left;
-}
-.dataTables_wrapper .dataTables_filter {
- float: right;
- text-align: right;
-}
-.dataTables_wrapper .dataTables_filter input {
- margin-left: 0.5em;
-}
-.dataTables_wrapper .dataTables_info {
- clear: both;
- float: left;
- padding-top: 0.755em;
-}
-.dataTables_wrapper .dataTables_paginate {
- float: right;
- text-align: right;
- padding-top: 0.25em;
-}
-.dataTables_wrapper .dataTables_paginate .paginate_button {
- box-sizing: border-box;
- display: inline-block;
- min-width: 1.5em;
- padding: 0.5em 1em;
- margin-left: 2px;
- text-align: center;
- text-decoration: none !important;
- cursor: pointer;
- *cursor: hand;
- color: #333 !important;
- border: 1px solid transparent;
-}
-.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
- color: #333 !important;
- border: 1px solid #cacaca;
- background-color: white;
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc));
- /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%);
- /* Chrome10+,Safari5.1+ */
- background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%);
- /* FF3.6+ */
- background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%);
- /* IE10+ */
- background: -o-linear-gradient(top, white 0%, #dcdcdc 100%);
- /* Opera 11.10+ */
- background: linear-gradient(to bottom, white 0%, #dcdcdc 100%);
- /* W3C */
-}
-.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {
- cursor: default;
- color: #666 !important;
- border: 1px solid transparent;
- background: transparent;
- box-shadow: none;
-}
-.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
- color: white !important;
- border: 1px solid #111;
- background-color: #585858;
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));
- /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #585858 0%, #111 100%);
- /* Chrome10+,Safari5.1+ */
- background: -moz-linear-gradient(top, #585858 0%, #111 100%);
- /* FF3.6+ */
- background: -ms-linear-gradient(top, #585858 0%, #111 100%);
- /* IE10+ */
- background: -o-linear-gradient(top, #585858 0%, #111 100%);
- /* Opera 11.10+ */
- background: linear-gradient(to bottom, #585858 0%, #111 100%);
- /* W3C */
-}
-.dataTables_wrapper .dataTables_paginate .paginate_button:active {
- outline: none;
- background-color: #2b2b2b;
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));
- /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
- /* Chrome10+,Safari5.1+ */
- background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
- /* FF3.6+ */
- background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
- /* IE10+ */
- background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
- /* Opera 11.10+ */
- background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);
- /* W3C */
- box-shadow: inset 0 0 3px #111;
-}
-.dataTables_wrapper .dataTables_paginate .ellipsis {
- padding: 0 1em;
-}
-.dataTables_wrapper .dataTables_processing {
- position: absolute;
- top: 50%;
- left: 50%;
- width: 100%;
- height: 40px;
- margin-left: -50%;
- margin-top: -25px;
- padding-top: 20px;
- text-align: center;
- font-size: 1.2em;
- background-color: white;
- background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));
- /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
- /* Chrome10+,Safari5.1+ */
- background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
- /* FF3.6+ */
- background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
- /* IE10+ */
- background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
- /* Opera 11.10+ */
- background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
- /* W3C */
-}
-.dataTables_wrapper .dataTables_length,
-.dataTables_wrapper .dataTables_filter,
-.dataTables_wrapper .dataTables_info,
-.dataTables_wrapper .dataTables_processing,
-.dataTables_wrapper .dataTables_paginate {
- color: #333;
-}
-.dataTables_wrapper .dataTables_scroll {
- clear: both;
-}
-.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {
- *margin-top: -1px;
- -webkit-overflow-scrolling: touch;
-}
-.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing,
-.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing {
- height: 0;
- overflow: hidden;
- margin: 0 !important;
- padding: 0 !important;
-}
-.dataTables_wrapper.no-footer .dataTables_scrollBody {
- border-bottom: 1px solid #111;
-}
-.dataTables_wrapper.no-footer div.dataTables_scrollHead table,
-.dataTables_wrapper.no-footer div.dataTables_scrollBody table {
- border-bottom: none;
-}
-.dataTables_wrapper:after {
- visibility: hidden;
- display: block;
- content: "";
- clear: both;
- height: 0;
-}
-
-@media screen and (max-width: 767px) {
- .dataTables_wrapper .dataTables_info,
- .dataTables_wrapper .dataTables_paginate {
- float: none;
- text-align: center;
- }
- .dataTables_wrapper .dataTables_paginate {
- margin-top: 0.5em;
- }
-}
-@media screen and (max-width: 640px) {
- .dataTables_wrapper .dataTables_length,
- .dataTables_wrapper .dataTables_filter {
- float: none;
- text-align: center;
- }
- .dataTables_wrapper .dataTables_filter {
- margin-top: 0.5em;
- }
-}
diff --git a/wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables.min.css b/wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables.min.css
deleted file mode 100644
index 2edb32f7..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;*cursor:hand}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("../images/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("../images/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("../images/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("../images/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("../images/sort_desc_disabled.png")}table.dataTable tbody tr{background-color:#fff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#abb9d3}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f5f5f5}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#a9b7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#f9f9f9}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad4}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:#f5f5f5}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b3cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a7b5ce}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b6d0}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#f9f9f9}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fbfbfb}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fdfdfd}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad4}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#adbbd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ebebeb}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#eee}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a1aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a2afc8}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a4b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #cacaca;background-color:#fff;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table,.dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}}
diff --git a/wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables_themeroller.css b/wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables_themeroller.css
deleted file mode 100644
index 1426a44a..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables_themeroller.css
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
- * Table styles
- */
-table.dataTable {
- width: 100%;
- margin: 0 auto;
- clear: both;
- border-collapse: separate;
- border-spacing: 0;
- /*
- * Header and footer styles
- */
- /*
- * Body styles
- */
-}
-table.dataTable thead th,
-table.dataTable thead td,
-table.dataTable tfoot th,
-table.dataTable tfoot td {
- padding: 4px 10px;
-}
-table.dataTable thead th,
-table.dataTable tfoot th {
- font-weight: bold;
-}
-table.dataTable thead th:active,
-table.dataTable thead td:active {
- outline: none;
-}
-table.dataTable thead .sorting_asc,
-table.dataTable thead .sorting_desc,
-table.dataTable thead .sorting {
- cursor: pointer;
- *cursor: hand;
-}
-table.dataTable thead th div.DataTables_sort_wrapper {
- position: relative;
- padding-right: 10px;
-}
-table.dataTable thead th div.DataTables_sort_wrapper span {
- position: absolute;
- top: 50%;
- margin-top: -8px;
- right: -5px;
-}
-table.dataTable thead th.ui-state-default {
- border-right-width: 0;
-}
-table.dataTable thead th.ui-state-default:last-child {
- border-right-width: 1px;
-}
-table.dataTable tbody tr {
- background-color: #ffffff;
-}
-table.dataTable tbody tr.selected {
- background-color: #B0BED9;
-}
-table.dataTable tbody th,
-table.dataTable tbody td {
- padding: 8px 10px;
-}
-table.dataTable th.center,
-table.dataTable td.center,
-table.dataTable td.dataTables_empty {
- text-align: center;
-}
-table.dataTable th.right,
-table.dataTable td.right {
- text-align: right;
-}
-table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td {
- border-top: 1px solid #ddd;
-}
-table.dataTable.row-border tbody tr:first-child th,
-table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th,
-table.dataTable.display tbody tr:first-child td {
- border-top: none;
-}
-table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
- border-top: 1px solid #ddd;
- border-right: 1px solid #ddd;
-}
-table.dataTable.cell-border tbody tr th:first-child,
-table.dataTable.cell-border tbody tr td:first-child {
- border-left: 1px solid #ddd;
-}
-table.dataTable.cell-border tbody tr:first-child th,
-table.dataTable.cell-border tbody tr:first-child td {
- border-top: none;
-}
-table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {
- background-color: #f9f9f9;
-}
-table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {
- background-color: #abb9d3;
-}
-table.dataTable.hover tbody tr:hover,
-table.dataTable.hover tbody tr.odd:hover,
-table.dataTable.hover tbody tr.even:hover, table.dataTable.display tbody tr:hover,
-table.dataTable.display tbody tr.odd:hover,
-table.dataTable.display tbody tr.even:hover {
- background-color: whitesmoke;
-}
-table.dataTable.hover tbody tr:hover.selected,
-table.dataTable.hover tbody tr.odd:hover.selected,
-table.dataTable.hover tbody tr.even:hover.selected, table.dataTable.display tbody tr:hover.selected,
-table.dataTable.display tbody tr.odd:hover.selected,
-table.dataTable.display tbody tr.even:hover.selected {
- background-color: #a9b7d1;
-}
-table.dataTable.order-column tbody tr > .sorting_1,
-table.dataTable.order-column tbody tr > .sorting_2,
-table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1,
-table.dataTable.display tbody tr > .sorting_2,
-table.dataTable.display tbody tr > .sorting_3 {
- background-color: #f9f9f9;
-}
-table.dataTable.order-column tbody tr.selected > .sorting_1,
-table.dataTable.order-column tbody tr.selected > .sorting_2,
-table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1,
-table.dataTable.display tbody tr.selected > .sorting_2,
-table.dataTable.display tbody tr.selected > .sorting_3 {
- background-color: #acbad4;
-}
-table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 {
- background-color: #f1f1f1;
-}
-table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 {
- background-color: #f3f3f3;
-}
-table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {
- background-color: whitesmoke;
-}
-table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {
- background-color: #a6b3cd;
-}
-table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {
- background-color: #a7b5ce;
-}
-table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {
- background-color: #a9b6d0;
-}
-table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 {
- background-color: #f9f9f9;
-}
-table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {
- background-color: #fbfbfb;
-}
-table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 {
- background-color: #fdfdfd;
-}
-table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {
- background-color: #acbad4;
-}
-table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {
- background-color: #adbbd6;
-}
-table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 {
- background-color: #afbdd8;
-}
-table.dataTable.display tbody tr:hover > .sorting_1,
-table.dataTable.display tbody tr.odd:hover > .sorting_1,
-table.dataTable.display tbody tr.even:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1,
-table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_1,
-table.dataTable.order-column.hover tbody tr.even:hover > .sorting_1 {
- background-color: #eaeaea;
-}
-table.dataTable.display tbody tr:hover > .sorting_2,
-table.dataTable.display tbody tr.odd:hover > .sorting_2,
-table.dataTable.display tbody tr.even:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2,
-table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_2,
-table.dataTable.order-column.hover tbody tr.even:hover > .sorting_2 {
- background-color: #ebebeb;
-}
-table.dataTable.display tbody tr:hover > .sorting_3,
-table.dataTable.display tbody tr.odd:hover > .sorting_3,
-table.dataTable.display tbody tr.even:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3,
-table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_3,
-table.dataTable.order-column.hover tbody tr.even:hover > .sorting_3 {
- background-color: #eeeeee;
-}
-table.dataTable.display tbody tr:hover.selected > .sorting_1,
-table.dataTable.display tbody tr.odd:hover.selected > .sorting_1,
-table.dataTable.display tbody tr.even:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1,
-table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_1,
-table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_1 {
- background-color: #a1aec7;
-}
-table.dataTable.display tbody tr:hover.selected > .sorting_2,
-table.dataTable.display tbody tr.odd:hover.selected > .sorting_2,
-table.dataTable.display tbody tr.even:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2,
-table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_2,
-table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_2 {
- background-color: #a2afc8;
-}
-table.dataTable.display tbody tr:hover.selected > .sorting_3,
-table.dataTable.display tbody tr.odd:hover.selected > .sorting_3,
-table.dataTable.display tbody tr.even:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3,
-table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_3,
-table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_3 {
- background-color: #a4b2cb;
-}
-table.dataTable.nowrap th, table.dataTable.nowrap td {
- white-space: nowrap;
-}
-table.dataTable.compact thead th,
-table.dataTable.compact thead td {
- padding: 5px 9px;
-}
-table.dataTable.compact tfoot th,
-table.dataTable.compact tfoot td {
- padding: 5px 9px 3px 9px;
-}
-table.dataTable.compact tbody th,
-table.dataTable.compact tbody td {
- padding: 4px 5px;
-}
-table.dataTable th.dt-left,
-table.dataTable td.dt-left {
- text-align: left;
-}
-table.dataTable th.dt-center,
-table.dataTable td.dt-center,
-table.dataTable td.dataTables_empty {
- text-align: center;
-}
-table.dataTable th.dt-right,
-table.dataTable td.dt-right {
- text-align: right;
-}
-table.dataTable th.dt-justify,
-table.dataTable td.dt-justify {
- text-align: justify;
-}
-table.dataTable th.dt-nowrap,
-table.dataTable td.dt-nowrap {
- white-space: nowrap;
-}
-table.dataTable thead th.dt-head-left,
-table.dataTable thead td.dt-head-left,
-table.dataTable tfoot th.dt-head-left,
-table.dataTable tfoot td.dt-head-left {
- text-align: left;
-}
-table.dataTable thead th.dt-head-center,
-table.dataTable thead td.dt-head-center,
-table.dataTable tfoot th.dt-head-center,
-table.dataTable tfoot td.dt-head-center {
- text-align: center;
-}
-table.dataTable thead th.dt-head-right,
-table.dataTable thead td.dt-head-right,
-table.dataTable tfoot th.dt-head-right,
-table.dataTable tfoot td.dt-head-right {
- text-align: right;
-}
-table.dataTable thead th.dt-head-justify,
-table.dataTable thead td.dt-head-justify,
-table.dataTable tfoot th.dt-head-justify,
-table.dataTable tfoot td.dt-head-justify {
- text-align: justify;
-}
-table.dataTable thead th.dt-head-nowrap,
-table.dataTable thead td.dt-head-nowrap,
-table.dataTable tfoot th.dt-head-nowrap,
-table.dataTable tfoot td.dt-head-nowrap {
- white-space: nowrap;
-}
-table.dataTable tbody th.dt-body-left,
-table.dataTable tbody td.dt-body-left {
- text-align: left;
-}
-table.dataTable tbody th.dt-body-center,
-table.dataTable tbody td.dt-body-center {
- text-align: center;
-}
-table.dataTable tbody th.dt-body-right,
-table.dataTable tbody td.dt-body-right {
- text-align: right;
-}
-table.dataTable tbody th.dt-body-justify,
-table.dataTable tbody td.dt-body-justify {
- text-align: justify;
-}
-table.dataTable tbody th.dt-body-nowrap,
-table.dataTable tbody td.dt-body-nowrap {
- white-space: nowrap;
-}
-
-table.dataTable,
-table.dataTable th,
-table.dataTable td {
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
-}
-
-/*
- * Control feature layout
- */
-.dataTables_wrapper {
- position: relative;
- clear: both;
- *zoom: 1;
- zoom: 1;
-}
-.dataTables_wrapper .dataTables_length {
- float: left;
-}
-.dataTables_wrapper .dataTables_filter {
- float: right;
- text-align: right;
-}
-.dataTables_wrapper .dataTables_filter input {
- margin-left: 0.5em;
-}
-.dataTables_wrapper .dataTables_info {
- clear: both;
- float: left;
- padding-top: 0.55em;
-}
-.dataTables_wrapper .dataTables_paginate {
- float: right;
- text-align: right;
-}
-.dataTables_wrapper .dataTables_paginate .fg-button {
- box-sizing: border-box;
- display: inline-block;
- min-width: 1.5em;
- padding: 0.5em;
- margin-left: 2px;
- text-align: center;
- text-decoration: none !important;
- cursor: pointer;
- *cursor: hand;
- color: #333 !important;
- border: 1px solid transparent;
-}
-.dataTables_wrapper .dataTables_paginate .fg-button:active {
- outline: none;
-}
-.dataTables_wrapper .dataTables_paginate .fg-button:first-child {
- border-top-left-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.dataTables_wrapper .dataTables_paginate .fg-button:last-child {
- border-top-right-radius: 3px;
- border-bottom-right-radius: 3px;
-}
-.dataTables_wrapper .dataTables_processing {
- position: absolute;
- top: 50%;
- left: 50%;
- width: 100%;
- height: 40px;
- margin-left: -50%;
- margin-top: -25px;
- padding-top: 20px;
- text-align: center;
- font-size: 1.2em;
- background-color: white;
- background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));
- /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
- /* Chrome10+,Safari5.1+ */
- background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
- /* FF3.6+ */
- background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
- /* IE10+ */
- background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
- /* Opera 11.10+ */
- background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
- /* W3C */
-}
-.dataTables_wrapper .dataTables_length,
-.dataTables_wrapper .dataTables_filter,
-.dataTables_wrapper .dataTables_info,
-.dataTables_wrapper .dataTables_processing,
-.dataTables_wrapper .dataTables_paginate {
- color: #333;
-}
-.dataTables_wrapper .dataTables_scroll {
- clear: both;
-}
-.dataTables_wrapper .dataTables_scrollBody {
- *margin-top: -1px;
- -webkit-overflow-scrolling: touch;
-}
-.dataTables_wrapper .ui-widget-header {
- font-weight: normal;
-}
-.dataTables_wrapper .ui-toolbar {
- padding: 8px;
-}
-.dataTables_wrapper:after {
- visibility: hidden;
- display: block;
- content: "";
- clear: both;
- height: 0;
-}
-
-@media screen and (max-width: 767px) {
- .dataTables_wrapper .dataTables_length,
- .dataTables_wrapper .dataTables_filter,
- .dataTables_wrapper .dataTables_info,
- .dataTables_wrapper .dataTables_paginate {
- float: none;
- text-align: center;
- }
- .dataTables_wrapper .dataTables_filter,
- .dataTables_wrapper .dataTables_paginate {
- margin-top: 0.5em;
- }
-}
diff --git a/wqflask/wqflask/static/new/packages/DataTables/extensions/buttons.bootstrap.css b/wqflask/wqflask/static/new/packages/DataTables/extensions/buttons.bootstrap.css
deleted file mode 100644
index 461dd2b0..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/extensions/buttons.bootstrap.css
+++ /dev/null
@@ -1,89 +0,0 @@
-div.dt-button-info {
- position: fixed;
- top: 50%;
- left: 50%;
- width: 400px;
- margin-top: -100px;
- margin-left: -200px;
- background-color: white;
- border: 2px solid #111;
- box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3);
- border-radius: 3px;
- text-align: center;
- z-index: 21;
-}
-div.dt-button-info h2 {
- padding: 0.5em;
- margin: 0;
- font-weight: normal;
- border-bottom: 1px solid #ddd;
- background-color: #f3f3f3;
-}
-div.dt-button-info > div {
- padding: 1em;
-}
-
-ul.dt-button-collection.dropdown-menu {
- display: block;
- z-index: 2002;
- -webkit-column-gap: 8px;
- -moz-column-gap: 8px;
- -ms-column-gap: 8px;
- -o-column-gap: 8px;
- column-gap: 8px;
-}
-ul.dt-button-collection.dropdown-menu.fixed {
- position: fixed;
- top: 50%;
- left: 50%;
- margin-left: -75px;
-}
-ul.dt-button-collection.dropdown-menu.fixed.two-column {
- margin-left: -150px;
-}
-ul.dt-button-collection.dropdown-menu.fixed.three-column {
- margin-left: -225px;
-}
-ul.dt-button-collection.dropdown-menu.fixed.four-column {
- margin-left: -300px;
-}
-ul.dt-button-collection.dropdown-menu > * {
- -webkit-column-break-inside: avoid;
- break-inside: avoid;
-}
-ul.dt-button-collection.dropdown-menu.two-column {
- width: 300px;
- padding-bottom: 1px;
- -webkit-column-count: 2;
- -moz-column-count: 2;
- -ms-column-count: 2;
- -o-column-count: 2;
- column-count: 2;
-}
-ul.dt-button-collection.dropdown-menu.three-column {
- width: 450px;
- padding-bottom: 1px;
- -webkit-column-count: 3;
- -moz-column-count: 3;
- -ms-column-count: 3;
- -o-column-count: 3;
- column-count: 3;
-}
-ul.dt-button-collection.dropdown-menu.four-column {
- width: 600px;
- padding-bottom: 1px;
- -webkit-column-count: 4;
- -moz-column-count: 4;
- -ms-column-count: 4;
- -o-column-count: 4;
- column-count: 4;
-}
-
-div.dt-button-background {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- z-index: 2001;
-}
diff --git a/wqflask/wqflask/static/new/packages/DataTables/extensions/buttons.colVis.min.js b/wqflask/wqflask/static/new/packages/DataTables/extensions/buttons.colVis.min.js
deleted file mode 100644
index 072d6c9a..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/extensions/buttons.colVis.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-(function(g){"function"===typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(d){return g(d,window,document)}):"object"===typeof exports?module.exports=function(d,e){d||(d=window);if(!e||!e.fn.dataTable)e=require("datatables.net")(d,e).$;e.fn.dataTable.Buttons||require("datatables.net-buttons")(d,e);return g(e,d,d.document)}:g(jQuery,window,document)})(function(g,d,e,h){d=g.fn.dataTable;g.extend(d.ext.buttons,{colvis:function(a,b){return{extend:"collection",
-text:function(a){return a.i18n("buttons.colvis","Column visibility")},className:"buttons-colvis",buttons:[{extend:"columnsToggle",columns:b.columns}]}},columnsToggle:function(a,b){return a.columns(b.columns).indexes().map(function(a){return{extend:"columnToggle",columns:a}}).toArray()},columnToggle:function(a,b){return{extend:"columnVisibility",columns:b.columns}},columnsVisibility:function(a,b){return a.columns(b.columns).indexes().map(function(a){return{extend:"columnVisibility",columns:a,visibility:b.visibility}}).toArray()},
-columnVisibility:{columns:h,text:function(a,b,c){return c._columnText(a,c.columns)},className:"buttons-columnVisibility",action:function(a,b,c,f){a=b.columns(f.columns);b=a.visible();a.visible(f.visibility!==h?f.visibility:!(b.length&&b[0]))},init:function(a,b,c){var f=this;a.on("column-visibility.dt"+c.namespace,function(b,d){d.bDestroying||f.active(a.column(c.columns).visible())}).on("column-reorder.dt"+c.namespace,function(b,d,e){1===a.columns(c.columns).count()&&("number"===typeof c.columns&&
-(c.columns=e.mapping[c.columns]),b=a.column(c.columns),f.text(c._columnText(a,c.columns)),f.active(b.visible()))});this.active(a.column(c.columns).visible())},destroy:function(a,b,c){a.off("column-visibility.dt"+c.namespace).off("column-reorder.dt"+c.namespace)},_columnText:function(a,b){var c=a.column(b).index();return a.settings()[0].aoColumns[c].sTitle.replace(/\n/g," ").replace(/<.*?>/g,"").replace(/^\s+|\s+$/g,"")}},colvisRestore:{className:"buttons-colvisRestore",text:function(a){return a.i18n("buttons.colvisRestore",
-"Restore visibility")},init:function(a,b,c){c._visOriginal=a.columns().indexes().map(function(b){return a.column(b).visible()}).toArray()},action:function(a,b,c,d){b.columns().every(function(a){a=b.colReorder&&b.colReorder.transpose?b.colReorder.transpose(a,"toOriginal"):a;this.visible(d._visOriginal[a])})}},colvisGroup:{className:"buttons-colvisGroup",action:function(a,b,c,d){b.columns(d.show).visible(!0,!1);b.columns(d.hide).visible(!1,!1);b.columns.adjust()},show:[],hide:[]}});return d.Buttons}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/extensions/buttons.dataTables.css b/wqflask/wqflask/static/new/packages/DataTables/extensions/buttons.dataTables.css
deleted file mode 100644
index 15b6c263..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/extensions/buttons.dataTables.css
+++ /dev/null
@@ -1,297 +0,0 @@
-div.dt-button-info {
- position: fixed;
- top: 50%;
- left: 50%;
- width: 400px;
- margin-top: -100px;
- margin-left: -200px;
- background-color: white;
- border: 2px solid #111;
- box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3);
- border-radius: 3px;
- text-align: center;
- z-index: 21;
-}
-div.dt-button-info h2 {
- padding: 0.5em;
- margin: 0;
- font-weight: normal;
- border-bottom: 1px solid #ddd;
- background-color: #f3f3f3;
-}
-div.dt-button-info > div {
- padding: 1em;
-}
-
-button.dt-button,
-div.dt-button,
-a.dt-button {
- position: relative;
- display: inline-block;
- box-sizing: border-box;
- margin-right: 0.333em;
- padding: 0.5em 1em;
- border: 1px solid #999;
- border-radius: 2px;
- cursor: pointer;
- font-size: 0.88em;
- color: black;
- white-space: nowrap;
- overflow: hidden;
- background-color: #e9e9e9;
- /* Fallback */
- background-image: -webkit-linear-gradient(top, white 0%, #e9e9e9 100%);
- /* Chrome 10+, Saf5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(top, white 0%, #e9e9e9 100%);
- /* FF3.6 */
- background-image: -ms-linear-gradient(top, white 0%, #e9e9e9 100%);
- /* IE10 */
- background-image: -o-linear-gradient(top, white 0%, #e9e9e9 100%);
- /* Opera 11.10+ */
- background-image: linear-gradient(top, white 0%, #e9e9e9 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='white', EndColorStr='#e9e9e9');
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- text-decoration: none;
- outline: none;
-}
-button.dt-button.disabled,
-div.dt-button.disabled,
-a.dt-button.disabled {
- color: #999;
- border: 1px solid #d0d0d0;
- cursor: default;
- background-color: #f9f9f9;
- /* Fallback */
- background-image: -webkit-linear-gradient(top, #ffffff 0%, #f9f9f9 100%);
- /* Chrome 10+, Saf5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(top, #ffffff 0%, #f9f9f9 100%);
- /* FF3.6 */
- background-image: -ms-linear-gradient(top, #ffffff 0%, #f9f9f9 100%);
- /* IE10 */
- background-image: -o-linear-gradient(top, #ffffff 0%, #f9f9f9 100%);
- /* Opera 11.10+ */
- background-image: linear-gradient(top, #ffffff 0%, #f9f9f9 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#ffffff', EndColorStr='#f9f9f9');
-}
-button.dt-button:active:not(.disabled), button.dt-button.active:not(.disabled),
-div.dt-button:active:not(.disabled),
-div.dt-button.active:not(.disabled),
-a.dt-button:active:not(.disabled),
-a.dt-button.active:not(.disabled) {
- background-color: #e2e2e2;
- /* Fallback */
- background-image: -webkit-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);
- /* Chrome 10+, Saf5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);
- /* FF3.6 */
- background-image: -ms-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);
- /* IE10 */
- background-image: -o-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);
- /* Opera 11.10+ */
- background-image: linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f3f3f3', EndColorStr='#e2e2e2');
- box-shadow: inset 1px 1px 3px #999999;
-}
-button.dt-button:active:not(.disabled):hover:not(.disabled), button.dt-button.active:not(.disabled):hover:not(.disabled),
-div.dt-button:active:not(.disabled):hover:not(.disabled),
-div.dt-button.active:not(.disabled):hover:not(.disabled),
-a.dt-button:active:not(.disabled):hover:not(.disabled),
-a.dt-button.active:not(.disabled):hover:not(.disabled) {
- box-shadow: inset 1px 1px 3px #999999;
- background-color: #cccccc;
- /* Fallback */
- background-image: -webkit-linear-gradient(top, #eaeaea 0%, #cccccc 100%);
- /* Chrome 10+, Saf5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(top, #eaeaea 0%, #cccccc 100%);
- /* FF3.6 */
- background-image: -ms-linear-gradient(top, #eaeaea 0%, #cccccc 100%);
- /* IE10 */
- background-image: -o-linear-gradient(top, #eaeaea 0%, #cccccc 100%);
- /* Opera 11.10+ */
- background-image: linear-gradient(top, #eaeaea 0%, #cccccc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#eaeaea', EndColorStr='#cccccc');
-}
-button.dt-button:hover,
-div.dt-button:hover,
-a.dt-button:hover {
- text-decoration: none;
-}
-button.dt-button:hover:not(.disabled),
-div.dt-button:hover:not(.disabled),
-a.dt-button:hover:not(.disabled) {
- border: 1px solid #666;
- background-color: #e0e0e0;
- /* Fallback */
- background-image: -webkit-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);
- /* Chrome 10+, Saf5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);
- /* FF3.6 */
- background-image: -ms-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);
- /* IE10 */
- background-image: -o-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);
- /* Opera 11.10+ */
- background-image: linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f9f9f9', EndColorStr='#e0e0e0');
-}
-button.dt-button:focus:not(.disabled),
-div.dt-button:focus:not(.disabled),
-a.dt-button:focus:not(.disabled) {
- border: 1px solid #426c9e;
- text-shadow: 0 1px 0 #c4def1;
- outline: none;
- background-color: #79ace9;
- /* Fallback */
- background-image: -webkit-linear-gradient(top, #bddef4 0%, #79ace9 100%);
- /* Chrome 10+, Saf5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(top, #bddef4 0%, #79ace9 100%);
- /* FF3.6 */
- background-image: -ms-linear-gradient(top, #bddef4 0%, #79ace9 100%);
- /* IE10 */
- background-image: -o-linear-gradient(top, #bddef4 0%, #79ace9 100%);
- /* Opera 11.10+ */
- background-image: linear-gradient(top, #bddef4 0%, #79ace9 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#bddef4', EndColorStr='#79ace9');
-}
-
-.dt-button embed {
- outline: none;
-}
-
-div.dt-buttons {
- position: relative;
- float: left;
-}
-div.dt-buttons.buttons-right {
- float: right;
-}
-
-div.dt-button-collection {
- position: absolute;
- top: 0;
- left: 0;
- width: 150px;
- margin-top: 3px;
- padding: 8px 8px 4px 8px;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, 0.4);
- background-color: white;
- overflow: hidden;
- z-index: 2002;
- border-radius: 5px;
- box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
- z-index: 2002;
- -webkit-column-gap: 8px;
- -moz-column-gap: 8px;
- -ms-column-gap: 8px;
- -o-column-gap: 8px;
- column-gap: 8px;
-}
-div.dt-button-collection button.dt-button,
-div.dt-button-collection div.dt-button,
-div.dt-button-collection a.dt-button {
- position: relative;
- left: 0;
- right: 0;
- display: block;
- float: none;
- margin-bottom: 4px;
- margin-right: 0;
-}
-div.dt-button-collection button.dt-button:active:not(.disabled), div.dt-button-collection button.dt-button.active:not(.disabled),
-div.dt-button-collection div.dt-button:active:not(.disabled),
-div.dt-button-collection div.dt-button.active:not(.disabled),
-div.dt-button-collection a.dt-button:active:not(.disabled),
-div.dt-button-collection a.dt-button.active:not(.disabled) {
- background-color: #dadada;
- /* Fallback */
- background-image: -webkit-linear-gradient(top, #f0f0f0 0%, #dadada 100%);
- /* Chrome 10+, Saf5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(top, #f0f0f0 0%, #dadada 100%);
- /* FF3.6 */
- background-image: -ms-linear-gradient(top, #f0f0f0 0%, #dadada 100%);
- /* IE10 */
- background-image: -o-linear-gradient(top, #f0f0f0 0%, #dadada 100%);
- /* Opera 11.10+ */
- background-image: linear-gradient(top, #f0f0f0 0%, #dadada 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f0f0f0', EndColorStr='#dadada');
- box-shadow: inset 1px 1px 3px #666;
-}
-div.dt-button-collection.fixed {
- position: fixed;
- top: 50%;
- left: 50%;
- margin-left: -75px;
-}
-div.dt-button-collection.fixed.two-column {
- margin-left: -150px;
-}
-div.dt-button-collection.fixed.three-column {
- margin-left: -225px;
-}
-div.dt-button-collection.fixed.four-column {
- margin-left: -300px;
-}
-div.dt-button-collection > * {
- -webkit-column-break-inside: avoid;
- break-inside: avoid;
-}
-div.dt-button-collection.two-column {
- width: 300px;
- padding-bottom: 1px;
- -webkit-column-count: 2;
- -moz-column-count: 2;
- -ms-column-count: 2;
- -o-column-count: 2;
- column-count: 2;
-}
-div.dt-button-collection.three-column {
- width: 450px;
- padding-bottom: 1px;
- -webkit-column-count: 3;
- -moz-column-count: 3;
- -ms-column-count: 3;
- -o-column-count: 3;
- column-count: 3;
-}
-div.dt-button-collection.four-column {
- width: 600px;
- padding-bottom: 1px;
- -webkit-column-count: 4;
- -moz-column-count: 4;
- -ms-column-count: 4;
- -o-column-count: 4;
- column-count: 4;
-}
-
-div.dt-button-background {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background: rgba(0, 0, 0, 0.7);
- /* Fallback */
- background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);
- /* IE10 Consumer Preview */
- background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);
- /* Firefox */
- background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);
- /* Opera */
- background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7)));
- /* Webkit (Safari/Chrome 10) */
- background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);
- /* Webkit (Chrome 11+) */
- background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);
- /* W3C Markup, IE10 Release Preview */
- z-index: 2001;
-}
-
-@media screen and (max-width: 640px) {
- div.dt-buttons {
- float: none !important;
- text-align: center;
- }
-}
diff --git a/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.buttons.min.js b/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.buttons.min.js
deleted file mode 100644
index ae3fb9c8..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.buttons.min.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
- Buttons for DataTables 1.2.4
- Š2016 SpryMedia Ltd - datatables.net/license
-*/
-(function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(n){return d(n,window,document)}):"object"===typeof exports?module.exports=function(n,o){n||(n=window);if(!o||!o.fn.dataTable)o=require("datatables.net")(n,o).$;return d(o,n,n.document)}:d(jQuery,window,document)})(function(d,n,o,m){var i=d.fn.dataTable,u=0,v=0,j=i.ext.buttons,l=function(a,b){!0===b&&(b={});d.isArray(b)&&(b={buttons:b});this.c=d.extend(!0,{},l.defaults,b);b.buttons&&(this.c.buttons=b.buttons);
-this.s={dt:new i.Api(a),buttons:[],listenKeys:"",namespace:"dtb"+u++};this.dom={container:d("<"+this.c.dom.container.tag+"/>").addClass(this.c.dom.container.className)};this._constructor()};d.extend(l.prototype,{action:function(a,b){var c=this._nodeToButton(a);if(b===m)return c.conf.action;c.conf.action=b;return this},active:function(a,b){var c=this._nodeToButton(a),e=this.c.dom.button.active,c=d(c.node);if(b===m)return c.hasClass(e);c.toggleClass(e,b===m?!0:b);return this},add:function(a,b){var c=
-this.s.buttons;if("string"===typeof b){for(var e=b.split("-"),c=this.s,d=0,h=e.length-1;d<h;d++)c=c.buttons[1*e[d]];c=c.buttons;b=1*e[e.length-1]}this._expandButton(c,a,!1,b);this._draw();return this},container:function(){return this.dom.container},disable:function(a){a=this._nodeToButton(a);d(a.node).addClass(this.c.dom.button.disabled);return this},destroy:function(){d("body").off("keyup."+this.s.namespace);var a=this.s.buttons.slice(),b,c;b=0;for(c=a.length;b<c;b++)this.remove(a[b].node);this.dom.container.remove();
-a=this.s.dt.settings()[0];b=0;for(c=a.length;b<c;b++)if(a.inst===this){a.splice(b,1);break}return this},enable:function(a,b){if(!1===b)return this.disable(a);var c=this._nodeToButton(a);d(c.node).removeClass(this.c.dom.button.disabled);return this},name:function(){return this.c.name},node:function(a){a=this._nodeToButton(a);return d(a.node)},remove:function(a){var b=this._nodeToButton(a),c=this._nodeToHost(a),e=this.s.dt;if(b.buttons.length)for(var g=b.buttons.length-1;0<=g;g--)this.remove(b.buttons[g].node);
-b.conf.destroy&&b.conf.destroy.call(e.button(a),e,d(a),b.conf);this._removeKey(b.conf);d(b.node).remove();a=d.inArray(b,c);c.splice(a,1);return this},text:function(a,b){var c=this._nodeToButton(a),e=this.c.dom.collection.buttonLiner,e=c.inCollection&&e&&e.tag?e.tag:this.c.dom.buttonLiner.tag,g=this.s.dt,h=d(c.node),f=function(a){return"function"===typeof a?a(g,h,c.conf):a};if(b===m)return f(c.conf.text);c.conf.text=b;e?h.children(e).html(f(b)):h.html(f(b));return this},_constructor:function(){var a=
-this,b=this.s.dt,c=b.settings()[0],e=this.c.buttons;c._buttons||(c._buttons=[]);c._buttons.push({inst:this,name:this.c.name});for(var c=0,g=e.length;c<g;c++)this.add(e[c]);b.on("destroy",function(){a.destroy()});d("body").on("keyup."+this.s.namespace,function(b){if(!o.activeElement||o.activeElement===o.body){var c=String.fromCharCode(b.keyCode).toLowerCase();a.s.listenKeys.toLowerCase().indexOf(c)!==-1&&a._keypress(c,b)}})},_addKey:function(a){a.key&&(this.s.listenKeys+=d.isPlainObject(a.key)?a.key.key:
-a.key)},_draw:function(a,b){a||(a=this.dom.container,b=this.s.buttons);a.children().detach();for(var c=0,e=b.length;c<e;c++)a.append(b[c].inserter),b[c].buttons&&b[c].buttons.length&&this._draw(b[c].collection,b[c].buttons)},_expandButton:function(a,b,c,e){for(var g=this.s.dt,h=0,b=!d.isArray(b)?[b]:b,f=0,r=b.length;f<r;f++){var k=this._resolveExtends(b[f]);if(k)if(d.isArray(k))this._expandButton(a,k,c,e);else{var p=this._buildButton(k,c);if(p){e!==m?(a.splice(e,0,p),e++):a.push(p);if(p.conf.buttons){var s=
-this.c.dom.collection;p.collection=d("<"+s.tag+"/>").addClass(s.className);p.conf._collection=p.collection;this._expandButton(p.buttons,p.conf.buttons,!0,e)}k.init&&k.init.call(g.button(p.node),g,d(p.node),k);h++}}}},_buildButton:function(a,b){var c=this.c.dom.button,e=this.c.dom.buttonLiner,g=this.c.dom.collection,h=this.s.dt,f=function(b){return"function"===typeof b?b(h,k,a):b};b&&g.button&&(c=g.button);b&&g.buttonLiner&&(e=g.buttonLiner);if(a.available&&!a.available(h,a))return!1;var r=function(a,
-b,c,e){e.action.call(b.button(c),a,b,c,e);d(b.table().node()).triggerHandler("buttons-action.dt",[b.button(c),b,c,e])},k=d("<"+c.tag+"/>").addClass(c.className).attr("tabindex",this.s.dt.settings()[0].iTabIndex).attr("aria-controls",this.s.dt.table().node().id).on("click.dtb",function(b){b.preventDefault();!k.hasClass(c.disabled)&&a.action&&r(b,h,k,a);k.blur()}).on("keyup.dtb",function(b){b.keyCode===13&&!k.hasClass(c.disabled)&&a.action&&r(b,h,k,a)});"a"===c.tag.toLowerCase()&&k.attr("href","#");
-e.tag?(g=d("<"+e.tag+"/>").html(f(a.text)).addClass(e.className),"a"===e.tag.toLowerCase()&&g.attr("href","#"),k.append(g)):k.html(f(a.text));!1===a.enabled&&k.addClass(c.disabled);a.className&&k.addClass(a.className);a.titleAttr&&k.attr("title",a.titleAttr);a.namespace||(a.namespace=".dt-button-"+v++);e=(e=this.c.dom.buttonContainer)&&e.tag?d("<"+e.tag+"/>").addClass(e.className).append(k):k;this._addKey(a);return{conf:a,node:k.get(0),inserter:e,buttons:[],inCollection:b,collection:null}},_nodeToButton:function(a,
-b){b||(b=this.s.buttons);for(var c=0,e=b.length;c<e;c++){if(b[c].node===a)return b[c];if(b[c].buttons.length){var d=this._nodeToButton(a,b[c].buttons);if(d)return d}}},_nodeToHost:function(a,b){b||(b=this.s.buttons);for(var c=0,e=b.length;c<e;c++){if(b[c].node===a)return b;if(b[c].buttons.length){var d=this._nodeToHost(a,b[c].buttons);if(d)return d}}},_keypress:function(a,b){var c=function(e){for(var g=0,h=e.length;g<h;g++){var f=e[g].conf,r=e[g].node;if(f.key)if(f.key===a)d(r).click();else if(d.isPlainObject(f.key)&&
-f.key.key===a&&(!f.key.shiftKey||b.shiftKey))if(!f.key.altKey||b.altKey)if(!f.key.ctrlKey||b.ctrlKey)(!f.key.metaKey||b.metaKey)&&d(r).click();e[g].buttons.length&&c(e[g].buttons)}};c(this.s.buttons)},_removeKey:function(a){if(a.key){var b=d.isPlainObject(a.key)?a.key.key:a.key,a=this.s.listenKeys.split(""),b=d.inArray(b,a);a.splice(b,1);this.s.listenKeys=a.join("")}},_resolveExtends:function(a){for(var b=this.s.dt,c,e,g=function(c){for(var e=0;!d.isPlainObject(c)&&!d.isArray(c);){if(c===m)return;
-if("function"===typeof c){if(c=c(b,a),!c)return!1}else if("string"===typeof c){if(!j[c])throw"Unknown button type: "+c;c=j[c]}e++;if(30<e)throw"Buttons: Too many iterations";}return d.isArray(c)?c:d.extend({},c)},a=g(a);a&&a.extend;){if(!j[a.extend])throw"Cannot extend unknown button type: "+a.extend;var h=g(j[a.extend]);if(d.isArray(h))return h;if(!h)return!1;c=h.className;a=d.extend({},h,a);c&&a.className!==c&&(a.className=c+" "+a.className);var f=a.postfixButtons;if(f){a.buttons||(a.buttons=[]);
-c=0;for(e=f.length;c<e;c++)a.buttons.push(f[c]);a.postfixButtons=null}if(f=a.prefixButtons){a.buttons||(a.buttons=[]);c=0;for(e=f.length;c<e;c++)a.buttons.splice(c,0,f[c]);a.prefixButtons=null}a.extend=h.extend}return a}});l.background=function(a,b,c){c===m&&(c=400);a?d("<div/>").addClass(b).css("display","none").appendTo("body").fadeIn(c):d("body > div."+b).fadeOut(c,function(){d(this).removeClass(b).remove()})};l.instanceSelector=function(a,b){if(!a)return d.map(b,function(a){return a.inst});var c=
-[],e=d.map(b,function(a){return a.name}),g=function(a){if(d.isArray(a))for(var f=0,r=a.length;f<r;f++)g(a[f]);else"string"===typeof a?-1!==a.indexOf(",")?g(a.split(",")):(a=d.inArray(d.trim(a),e),-1!==a&&c.push(b[a].inst)):"number"===typeof a&&c.push(b[a].inst)};g(a);return c};l.buttonSelector=function(a,b){for(var c=[],e=function(a,b,c){for(var d,g,f=0,h=b.length;f<h;f++)if(d=b[f])g=c!==m?c+f:f+"",a.push({node:d.node,name:d.conf.name,idx:g}),d.buttons&&e(a,d.buttons,g+"-")},g=function(a,b){var f,
-h,i=[];e(i,b.s.buttons);f=d.map(i,function(a){return a.node});if(d.isArray(a)||a instanceof d){f=0;for(h=a.length;f<h;f++)g(a[f],b)}else if(null===a||a===m||"*"===a){f=0;for(h=i.length;f<h;f++)c.push({inst:b,node:i[f].node})}else if("number"===typeof a)c.push({inst:b,node:b.s.buttons[a].node});else if("string"===typeof a)if(-1!==a.indexOf(",")){i=a.split(",");f=0;for(h=i.length;f<h;f++)g(d.trim(i[f]),b)}else if(a.match(/^\d+(\-\d+)*$/))f=d.map(i,function(a){return a.idx}),c.push({inst:b,node:i[d.inArray(a,
-f)].node});else if(-1!==a.indexOf(":name")){var j=a.replace(":name","");f=0;for(h=i.length;f<h;f++)i[f].name===j&&c.push({inst:b,node:i[f].node})}else d(f).filter(a).each(function(){c.push({inst:b,node:this})});else"object"===typeof a&&a.nodeName&&(i=d.inArray(a,f),-1!==i&&c.push({inst:b,node:f[i]}))},h=0,f=a.length;h<f;h++)g(b,a[h]);return c};l.defaults={buttons:["copy","excel","csv","pdf","print"],name:"main",tabIndex:0,dom:{container:{tag:"div",className:"dt-buttons"},collection:{tag:"div",className:"dt-button-collection"},
-button:{tag:"a",className:"dt-button",active:"active",disabled:"disabled"},buttonLiner:{tag:"span",className:""}}};l.version="1.2.4";d.extend(j,{collection:{text:function(a){return a.i18n("buttons.collection","Collection")},className:"buttons-collection",action:function(a,b,c,e){var a=c.offset(),g=d(b.table().container()),h=!1;d("div.dt-button-background").length&&(h=d(".dt-button-collection").offset(),d("body").trigger("click.dtb-collection"));e._collection.addClass(e.collectionLayout).css("display",
-"none").appendTo("body").fadeIn(e.fade);var f=e._collection.css("position");h&&"absolute"===f?e._collection.css({top:h.top,left:h.left}):"absolute"===f?(e._collection.css({top:a.top+c.outerHeight(),left:a.left}),c=a.left+e._collection.outerWidth(),g=g.offset().left+g.width(),c>g&&e._collection.css("left",a.left-(c-g))):(a=e._collection.height()/2,a>d(n).height()/2&&(a=d(n).height()/2),e._collection.css("marginTop",-1*a));e.background&&l.background(!0,e.backgroundClassName,e.fade);setTimeout(function(){d("div.dt-button-background").on("click.dtb-collection",
-function(){});d("body").on("click.dtb-collection",function(a){var c=d.fn.addBack?"addBack":"andSelf";if(!d(a.target).parents()[c]().filter(e._collection).length){e._collection.fadeOut(e.fade,function(){e._collection.detach()});d("div.dt-button-background").off("click.dtb-collection");l.background(false,e.backgroundClassName,e.fade);d("body").off("click.dtb-collection");b.off("buttons-action.b-internal")}})},10);if(e.autoClose)b.on("buttons-action.b-internal",function(){d("div.dt-button-background").click()})},
-background:!0,collectionLayout:"",backgroundClassName:"dt-button-background",autoClose:!1,fade:400},copy:function(a,b){if(j.copyHtml5)return"copyHtml5";if(j.copyFlash&&j.copyFlash.available(a,b))return"copyFlash"},csv:function(a,b){if(j.csvHtml5&&j.csvHtml5.available(a,b))return"csvHtml5";if(j.csvFlash&&j.csvFlash.available(a,b))return"csvFlash"},excel:function(a,b){if(j.excelHtml5&&j.excelHtml5.available(a,b))return"excelHtml5";if(j.excelFlash&&j.excelFlash.available(a,b))return"excelFlash"},pdf:function(a,
-b){if(j.pdfHtml5&&j.pdfHtml5.available(a,b))return"pdfHtml5";if(j.pdfFlash&&j.pdfFlash.available(a,b))return"pdfFlash"},pageLength:function(a){var a=a.settings()[0].aLengthMenu,b=d.isArray(a[0])?a[0]:a,c=d.isArray(a[0])?a[1]:a,e=function(a){return a.i18n("buttons.pageLength",{"-1":"Show all rows",_:"Show %d rows"},a.page.len())};return{extend:"collection",text:e,className:"buttons-page-length",autoClose:!0,buttons:d.map(b,function(a,b){return{text:c[b],className:"button-page-length",action:function(b,
-c){c.page.len(a).draw()},init:function(b,c,e){var d=this,c=function(){d.active(b.page.len()===a)};b.on("length.dt"+e.namespace,c);c()},destroy:function(a,b,c){a.off("length.dt"+c.namespace)}}}),init:function(a,b,c){var d=this;a.on("length.dt"+c.namespace,function(){d.text(e(a))})},destroy:function(a,b,c){a.off("length.dt"+c.namespace)}}}});i.Api.register("buttons()",function(a,b){b===m&&(b=a,a=m);this.selector.buttonGroup=a;var c=this.iterator(!0,"table",function(c){if(c._buttons)return l.buttonSelector(l.instanceSelector(a,
-c._buttons),b)},!0);c._groupSelector=a;return c});i.Api.register("button()",function(a,b){var c=this.buttons(a,b);1<c.length&&c.splice(1,c.length);return c});i.Api.registerPlural("buttons().active()","button().active()",function(a){return a===m?this.map(function(a){return a.inst.active(a.node)}):this.each(function(b){b.inst.active(b.node,a)})});i.Api.registerPlural("buttons().action()","button().action()",function(a){return a===m?this.map(function(a){return a.inst.action(a.node)}):this.each(function(b){b.inst.action(b.node,
-a)})});i.Api.register(["buttons().enable()","button().enable()"],function(a){return this.each(function(b){b.inst.enable(b.node,a)})});i.Api.register(["buttons().disable()","button().disable()"],function(){return this.each(function(a){a.inst.disable(a.node)})});i.Api.registerPlural("buttons().nodes()","button().node()",function(){var a=d();d(this.each(function(b){a=a.add(b.inst.node(b.node))}));return a});i.Api.registerPlural("buttons().text()","button().text()",function(a){return a===m?this.map(function(a){return a.inst.text(a.node)}):
-this.each(function(b){b.inst.text(b.node,a)})});i.Api.registerPlural("buttons().trigger()","button().trigger()",function(){return this.each(function(a){a.inst.node(a.node).trigger("click")})});i.Api.registerPlural("buttons().containers()","buttons().container()",function(){var a=d(),b=this._groupSelector;this.iterator(!0,"table",function(c){if(c._buttons)for(var c=l.instanceSelector(b,c._buttons),d=0,g=c.length;d<g;d++)a=a.add(c[d].container())});return a});i.Api.register("button().add()",function(a,
-b){var c=this.context;c.length&&(c=l.instanceSelector(this._groupSelector,c[0]._buttons),c.length&&c[0].add(b,a));return this.button(this._groupSelector,a)});i.Api.register("buttons().destroy()",function(){this.pluck("inst").unique().each(function(a){a.destroy()});return this});i.Api.registerPlural("buttons().remove()","buttons().remove()",function(){this.each(function(a){a.inst.remove(a.node)});return this});var q;i.Api.register("buttons.info()",function(a,b,c){var e=this;if(!1===a)return d("#datatables_buttons_info").fadeOut(function(){d(this).remove()}),
-clearTimeout(q),q=null,this;q&&clearTimeout(q);d("#datatables_buttons_info").length&&d("#datatables_buttons_info").remove();d('<div id="datatables_buttons_info" class="dt-button-info"/>').html(a?"<h2>"+a+"</h2>":"").append(d("<div/>")["string"===typeof b?"html":"append"](b)).css("display","none").appendTo("body").fadeIn();c!==m&&0!==c&&(q=setTimeout(function(){e.buttons.info(!1)},c));return this});i.Api.register("buttons.exportData()",function(a){if(this.context.length){for(var b=new i.Api(this.context[0]),
-c=d.extend(!0,{},{rows:null,columns:"",modifier:{search:"applied",order:"applied"},orthogonal:"display",stripHtml:!0,stripNewlines:!0,decodeEntities:!0,trim:!0,format:{header:function(a){return e(a)},footer:function(a){return e(a)},body:function(a){return e(a)}}},a),e=function(a){if("string"!==typeof a)return a;c.stripHtml&&(a=a.replace(/<[^>]*>/g,""));c.trim&&(a=a.replace(/^\s+|\s+$/g,""));c.stripNewlines&&(a=a.replace(/\n/g," "));c.decodeEntities&&(t.innerHTML=a,a=t.value);return a},a=b.columns(c.columns).indexes().map(function(a){var d=
-b.column(a).header();return c.format.header(d.innerHTML,a,d)}).toArray(),g=b.table().footer()?b.columns(c.columns).indexes().map(function(a){var d=b.column(a).footer();return c.format.footer(d?d.innerHTML:"",a,d)}).toArray():null,h=b.rows(c.rows,c.modifier).indexes().toArray(),f=b.cells(h,c.columns),h=f.render(c.orthogonal).toArray(),f=f.nodes().toArray(),j=a.length,k=0<j?h.length/j:0,l=Array(k),m=0,n=0;n<k;n++){for(var o=Array(j),q=0;q<j;q++)o[q]=c.format.body(h[m],n,q,f[m]),m++;l[n]=o}return{header:a,
-footer:g,body:l}}});var t=d("<textarea/>")[0];d.fn.dataTable.Buttons=l;d.fn.DataTable.Buttons=l;d(o).on("init.dt plugin-init.dt",function(a,b){if("dt"===a.namespace){var c=b.oInit.buttons||i.defaults.buttons;c&&!b._buttons&&(new l(b,c)).container()}});i.ext.feature.push({fnInit:function(a){var a=new i.Api(a),b=a.init().buttons||i.defaults.buttons;return(new l(a,b)).container()},cFeature:"B"});return l}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.colReorder.js b/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.colReorder.js
deleted file mode 100644
index 58e7656e..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.colReorder.js
+++ /dev/null
@@ -1,1372 +0,0 @@
-/*! ColReorder 1.1.3
- * ©2010-2014 SpryMedia Ltd - datatables.net/license
- */
-
-/**
- * @summary ColReorder
- * @description Provide the ability to reorder columns in a DataTable
- * @version 1.1.3
- * @file dataTables.colReorder.js
- * @author SpryMedia Ltd (www.sprymedia.co.uk)
- * @contact www.sprymedia.co.uk/contact
- * @copyright Copyright 2010-2014 SpryMedia Ltd.
- *
- * This source file is free software, available under the following license:
- * MIT license - http://datatables.net/license/mit
- *
- * This source file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
- *
- * For details please refer to: http://www.datatables.net
- */
-
-(function(window, document, undefined) {
-
-
-/**
- * Switch the key value pairing of an index array to be value key (i.e. the old value is now the
- * key). For example consider [ 2, 0, 1 ] this would be returned as [ 1, 2, 0 ].
- * @method fnInvertKeyValues
- * @param array aIn Array to switch around
- * @returns array
- */
-function fnInvertKeyValues( aIn )
-{
- var aRet=[];
- for ( var i=0, iLen=aIn.length ; i<iLen ; i++ )
- {
- aRet[ aIn[i] ] = i;
- }
- return aRet;
-}
-
-
-/**
- * Modify an array by switching the position of two elements
- * @method fnArraySwitch
- * @param array aArray Array to consider, will be modified by reference (i.e. no return)
- * @param int iFrom From point
- * @param int iTo Insert point
- * @returns void
- */
-function fnArraySwitch( aArray, iFrom, iTo )
-{
- var mStore = aArray.splice( iFrom, 1 )[0];
- aArray.splice( iTo, 0, mStore );
-}
-
-
-/**
- * Switch the positions of nodes in a parent node (note this is specifically designed for
- * table rows). Note this function considers all element nodes under the parent!
- * @method fnDomSwitch
- * @param string sTag Tag to consider
- * @param int iFrom Element to move
- * @param int Point to element the element to (before this point), can be null for append
- * @returns void
- */
-function fnDomSwitch( nParent, iFrom, iTo )
-{
- var anTags = [];
- for ( var i=0, iLen=nParent.childNodes.length ; i<iLen ; i++ )
- {
- if ( nParent.childNodes[i].nodeType == 1 )
- {
- anTags.push( nParent.childNodes[i] );
- }
- }
- var nStore = anTags[ iFrom ];
-
- if ( iTo !== null )
- {
- nParent.insertBefore( nStore, anTags[iTo] );
- }
- else
- {
- nParent.appendChild( nStore );
- }
-}
-
-
-
-var factory = function( $, DataTable ) {
-"use strict";
-
-/**
- * Plug-in for DataTables which will reorder the internal column structure by taking the column
- * from one position (iFrom) and insert it into a given point (iTo).
- * @method $.fn.dataTableExt.oApi.fnColReorder
- * @param object oSettings DataTables settings object - automatically added by DataTables!
- * @param int iFrom Take the column to be repositioned from this point
- * @param int iTo and insert it into this point
- * @returns void
- */
-$.fn.dataTableExt.oApi.fnColReorder = function ( oSettings, iFrom, iTo )
-{
- var v110 = $.fn.dataTable.Api ? true : false;
- var i, iLen, j, jLen, iCols=oSettings.aoColumns.length, nTrs, oCol;
- var attrMap = function ( obj, prop, mapping ) {
- if ( ! obj[ prop ] ) {
- return;
- }
-
- var a = obj[ prop ].split('.');
- var num = a.shift();
-
- if ( isNaN( num*1 ) ) {
- return;
- }
-
- obj[ prop ] = mapping[ num*1 ]+'.'+a.join('.');
- };
-
- /* Sanity check in the input */
- if ( iFrom == iTo )
- {
- /* Pointless reorder */
- return;
- }
-
- if ( iFrom < 0 || iFrom >= iCols )
- {
- this.oApi._fnLog( oSettings, 1, "ColReorder 'from' index is out of bounds: "+iFrom );
- return;
- }
-
- if ( iTo < 0 || iTo >= iCols )
- {
- this.oApi._fnLog( oSettings, 1, "ColReorder 'to' index is out of bounds: "+iTo );
- return;
- }
-
- /*
- * Calculate the new column array index, so we have a mapping between the old and new
- */
- var aiMapping = [];
- for ( i=0, iLen=iCols ; i<iLen ; i++ )
- {
- aiMapping[i] = i;
- }
- fnArraySwitch( aiMapping, iFrom, iTo );
- var aiInvertMapping = fnInvertKeyValues( aiMapping );
-
-
- /*
- * Convert all internal indexing to the new column order indexes
- */
- /* Sorting */
- for ( i=0, iLen=oSettings.aaSorting.length ; i<iLen ; i++ )
- {
- oSettings.aaSorting[i][0] = aiInvertMapping[ oSettings.aaSorting[i][0] ];
- }
-
- /* Fixed sorting */
- if ( oSettings.aaSortingFixed !== null )
- {
- for ( i=0, iLen=oSettings.aaSortingFixed.length ; i<iLen ; i++ )
- {
- oSettings.aaSortingFixed[i][0] = aiInvertMapping[ oSettings.aaSortingFixed[i][0] ];
- }
- }
-
- /* Data column sorting (the column which the sort for a given column should take place on) */
- for ( i=0, iLen=iCols ; i<iLen ; i++ )
- {
- oCol = oSettings.aoColumns[i];
- for ( j=0, jLen=oCol.aDataSort.length ; j<jLen ; j++ )
- {
- oCol.aDataSort[j] = aiInvertMapping[ oCol.aDataSort[j] ];
- }
-
- // Update the column indexes
- if ( v110 ) {
- oCol.idx = aiInvertMapping[ oCol.idx ];
- }
- }
-
- if ( v110 ) {
- // Update 1.10 optimised sort class removal variable
- $.each( oSettings.aLastSort, function (i, val) {
- oSettings.aLastSort[i].src = aiInvertMapping[ val.src ];
- } );
- }
-
- /* Update the Get and Set functions for each column */
- for ( i=0, iLen=iCols ; i<iLen ; i++ )
- {
- oCol = oSettings.aoColumns[i];
-
- if ( typeof oCol.mData == 'number' ) {
- oCol.mData = aiInvertMapping[ oCol.mData ];
-
- // regenerate the get / set functions
- oSettings.oApi._fnColumnOptions( oSettings, i, {} );
- }
- else if ( $.isPlainObject( oCol.mData ) ) {
- // HTML5 data sourced
- attrMap( oCol.mData, '_', aiInvertMapping );
- attrMap( oCol.mData, 'filter', aiInvertMapping );
- attrMap( oCol.mData, 'sort', aiInvertMapping );
- attrMap( oCol.mData, 'type', aiInvertMapping );
-
- // regenerate the get / set functions
- oSettings.oApi._fnColumnOptions( oSettings, i, {} );
- }
- }
-
-
- /*
- * Move the DOM elements
- */
- if ( oSettings.aoColumns[iFrom].bVisible )
- {
- /* Calculate the current visible index and the point to insert the node before. The insert
- * before needs to take into account that there might not be an element to insert before,
- * in which case it will be null, and an appendChild should be used
- */
- var iVisibleIndex = this.oApi._fnColumnIndexToVisible( oSettings, iFrom );
- var iInsertBeforeIndex = null;
-
- i = iTo < iFrom ? iTo : iTo + 1;
- while ( iInsertBeforeIndex === null && i < iCols )
- {
- iInsertBeforeIndex = this.oApi._fnColumnIndexToVisible( oSettings, i );
- i++;
- }
-
- /* Header */
- nTrs = oSettings.nTHead.getElementsByTagName('tr');
- for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
- {
- fnDomSwitch( nTrs[i], iVisibleIndex, iInsertBeforeIndex );
- }
-
- /* Footer */
- if ( oSettings.nTFoot !== null )
- {
- nTrs = oSettings.nTFoot.getElementsByTagName('tr');
- for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
- {
- fnDomSwitch( nTrs[i], iVisibleIndex, iInsertBeforeIndex );
- }
- }
-
- /* Body */
- for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
- {
- if ( oSettings.aoData[i].nTr !== null )
- {
- fnDomSwitch( oSettings.aoData[i].nTr, iVisibleIndex, iInsertBeforeIndex );
- }
- }
- }
-
- /*
- * Move the internal array elements
- */
- /* Columns */
- fnArraySwitch( oSettings.aoColumns, iFrom, iTo );
-
- /* Search columns */
- fnArraySwitch( oSettings.aoPreSearchCols, iFrom, iTo );
-
- /* Array array - internal data anodes cache */
- for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
- {
- var data = oSettings.aoData[i];
-
- if ( v110 ) {
- // DataTables 1.10+
- if ( data.anCells ) {
- fnArraySwitch( data.anCells, iFrom, iTo );
- }
-
- // For DOM sourced data, the invalidate will reread the cell into
- // the data array, but for data sources as an array, they need to
- // be flipped
- if ( data.src !== 'dom' && $.isArray( data._aData ) ) {
- fnArraySwitch( data._aData, iFrom, iTo );
- }
- }
- else {
- // DataTables 1.9-
- if ( $.isArray( data._aData ) ) {
- fnArraySwitch( data._aData, iFrom, iTo );
- }
- fnArraySwitch( data._anHidden, iFrom, iTo );
- }
- }
-
- /* Reposition the header elements in the header layout array */
- for ( i=0, iLen=oSettings.aoHeader.length ; i<iLen ; i++ )
- {
- fnArraySwitch( oSettings.aoHeader[i], iFrom, iTo );
- }
-
- if ( oSettings.aoFooter !== null )
- {
- for ( i=0, iLen=oSettings.aoFooter.length ; i<iLen ; i++ )
- {
- fnArraySwitch( oSettings.aoFooter[i], iFrom, iTo );
- }
- }
-
- // In 1.10 we need to invalidate row cached data for sorting, filtering etc
- if ( v110 ) {
- var api = new $.fn.dataTable.Api( oSettings );
- api.rows().invalidate();
- }
-
- /*
- * Update DataTables' event handlers
- */
-
- /* Sort listener */
- for ( i=0, iLen=iCols ; i<iLen ; i++ )
- {
- $(oSettings.aoColumns[i].nTh).off('click.DT');
- this.oApi._fnSortAttachListener( oSettings, oSettings.aoColumns[i].nTh, i );
- }
-
-
- /* Fire an event so other plug-ins can update */
- $(oSettings.oInstance).trigger( 'column-reorder', [ oSettings, {
- "iFrom": iFrom,
- "iTo": iTo,
- "aiInvertMapping": aiInvertMapping
- } ] );
-};
-
-
-/**
- * ColReorder provides column visibility control for DataTables
- * @class ColReorder
- * @constructor
- * @param {object} dt DataTables settings object
- * @param {object} opts ColReorder options
- */
-var ColReorder = function( dt, opts )
-{
- var oDTSettings;
-
- if ( $.fn.dataTable.Api ) {
- oDTSettings = new $.fn.dataTable.Api( dt ).settings()[0];
- }
- // 1.9 compatibility
- else if ( dt.fnSettings ) {
- // DataTables object, convert to the settings object
- oDTSettings = dt.fnSettings();
- }
- else if ( typeof dt === 'string' ) {
- // jQuery selector
- if ( $.fn.dataTable.fnIsDataTable( $(dt)[0] ) ) {
- oDTSettings = $(dt).eq(0).dataTable().fnSettings();
- }
- }
- else if ( dt.nodeName && dt.nodeName.toLowerCase() === 'table' ) {
- // Table node
- if ( $.fn.dataTable.fnIsDataTable( dt.nodeName ) ) {
- oDTSettings = $(dt.nodeName).dataTable().fnSettings();
- }
- }
- else if ( dt instanceof jQuery ) {
- // jQuery object
- if ( $.fn.dataTable.fnIsDataTable( dt[0] ) ) {
- oDTSettings = dt.eq(0).dataTable().fnSettings();
- }
- }
- else {
- // DataTables settings object
- oDTSettings = dt;
- }
-
- // Ensure that we can't initialise on the same table twice
- if ( oDTSettings._colReorder ) {
- throw "ColReorder already initialised on table #"+oDTSettings.nTable.id;
- }
-
- // Convert from camelCase to Hungarian, just as DataTables does
- var camelToHungarian = $.fn.dataTable.camelToHungarian;
- if ( camelToHungarian ) {
- camelToHungarian( ColReorder.defaults, ColReorder.defaults, true );
- camelToHungarian( ColReorder.defaults, opts || {} );
- }
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Public class variables
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- /**
- * @namespace Settings object which contains customisable information for ColReorder instance
- */
- this.s = {
- /**
- * DataTables settings object
- * @property dt
- * @type Object
- * @default null
- */
- "dt": null,
-
- /**
- * Initialisation object used for this instance
- * @property init
- * @type object
- * @default {}
- */
- "init": $.extend( true, {}, ColReorder.defaults, opts ),
-
- /**
- * Number of columns to fix (not allow to be reordered)
- * @property fixed
- * @type int
- * @default 0
- */
- "fixed": 0,
-
- /**
- * Number of columns to fix counting from right (not allow to be reordered)
- * @property fixedRight
- * @type int
- * @default 0
- */
- "fixedRight": 0,
-
- /**
- * Callback function for once the reorder has been done
- * @property reorderCallback
- * @type function
- * @default null
- */
- "reorderCallback": null,
-
- /**
- * @namespace Information used for the mouse drag
- */
- "mouse": {
- "startX": -1,
- "startY": -1,
- "offsetX": -1,
- "offsetY": -1,
- "target": -1,
- "targetIndex": -1,
- "fromIndex": -1
- },
-
- /**
- * Information which is used for positioning the insert cusor and knowing where to do the
- * insert. Array of objects with the properties:
- * x: x-axis position
- * to: insert point
- * @property aoTargets
- * @type array
- * @default []
- */
- "aoTargets": []
- };
-
-
- /**
- * @namespace Common and useful DOM elements for the class instance
- */
- this.dom = {
- /**
- * Dragging element (the one the mouse is moving)
- * @property drag
- * @type element
- * @default null
- */
- "drag": null,
-
- /**
- * The insert cursor
- * @property pointer
- * @type element
- * @default null
- */
- "pointer": null
- };
-
-
- /* Constructor logic */
- this.s.dt = oDTSettings;
- this.s.dt._colReorder = this;
- this._fnConstruct();
-
- /* Add destroy callback */
- oDTSettings.oApi._fnCallbackReg(oDTSettings, 'aoDestroyCallback', $.proxy(this._fnDestroy, this), 'ColReorder');
-
- return this;
-};
-
-
-
-ColReorder.prototype = {
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Public methods
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- /**
- * Reset the column ordering to the original ordering that was detected on
- * start up.
- * @return {this} Returns `this` for chaining.
- *
- * @example
- * // DataTables initialisation with ColReorder
- * var table = $('#example').dataTable( {
- * "sDom": 'Rlfrtip'
- * } );
- *
- * // Add click event to a button to reset the ordering
- * $('#resetOrdering').click( function (e) {
- * e.preventDefault();
- * $.fn.dataTable.ColReorder( table ).fnReset();
- * } );
- */
- "fnReset": function ()
- {
- var a = [];
- for ( var i=0, iLen=this.s.dt.aoColumns.length ; i<iLen ; i++ )
- {
- a.push( this.s.dt.aoColumns[i]._ColReorder_iOrigCol );
- }
-
- this._fnOrderColumns( a );
-
- return this;
- },
-
- /**
- * `Deprecated` - Get the current order of the columns, as an array.
- * @return {array} Array of column identifiers
- * @deprecated `fnOrder` should be used in preference to this method.
- * `fnOrder` acts as a getter/setter.
- */
- "fnGetCurrentOrder": function ()
- {
- return this.fnOrder();
- },
-
- /**
- * Get the current order of the columns, as an array. Note that the values
- * given in the array are unique identifiers for each column. Currently
- * these are the original ordering of the columns that was detected on
- * start up, but this could potentially change in future.
- * @return {array} Array of column identifiers
- *
- * @example
- * // Get column ordering for the table
- * var order = $.fn.dataTable.ColReorder( dataTable ).fnOrder();
- *//**
- * Set the order of the columns, from the positions identified in the
- * ordering array given. Note that ColReorder takes a brute force approach
- * to reordering, so it is possible multiple reordering events will occur
- * before the final order is settled upon.
- * @param {array} [set] Array of column identifiers in the new order. Note
- * that every column must be included, uniquely, in this array.
- * @return {this} Returns `this` for chaining.
- *
- * @example
- * // Swap the first and second columns
- * $.fn.dataTable.ColReorder( dataTable ).fnOrder( [1, 0, 2, 3, 4] );
- *
- * @example
- * // Move the first column to the end for the table `#example`
- * var curr = $.fn.dataTable.ColReorder( '#example' ).fnOrder();
- * var first = curr.shift();
- * curr.push( first );
- * $.fn.dataTable.ColReorder( '#example' ).fnOrder( curr );
- *
- * @example
- * // Reverse the table's order
- * $.fn.dataTable.ColReorder( '#example' ).fnOrder(
- * $.fn.dataTable.ColReorder( '#example' ).fnOrder().reverse()
- * );
- */
- "fnOrder": function ( set )
- {
- if ( set === undefined )
- {
- var a = [];
- for ( var i=0, iLen=this.s.dt.aoColumns.length ; i<iLen ; i++ )
- {
- a.push( this.s.dt.aoColumns[i]._ColReorder_iOrigCol );
- }
- return a;
- }
-
- this._fnOrderColumns( fnInvertKeyValues( set ) );
-
- return this;
- },
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Private methods (they are of course public in JS, but recommended as private)
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- /**
- * Constructor logic
- * @method _fnConstruct
- * @returns void
- * @private
- */
- "_fnConstruct": function ()
- {
- var that = this;
- var iLen = this.s.dt.aoColumns.length;
- var i;
-
- /* Columns discounted from reordering - counting left to right */
- if ( this.s.init.iFixedColumns )
- {
- this.s.fixed = this.s.init.iFixedColumns;
- }
-
- /* Columns discounted from reordering - counting right to left */
- this.s.fixedRight = this.s.init.iFixedColumnsRight ?
- this.s.init.iFixedColumnsRight :
- 0;
-
- /* Drop callback initialisation option */
- if ( this.s.init.fnReorderCallback )
- {
- this.s.reorderCallback = this.s.init.fnReorderCallback;
- }
-
- /* Add event handlers for the drag and drop, and also mark the original column order */
- for ( i = 0; i < iLen; i++ )
- {
- if ( i > this.s.fixed-1 && i < iLen - this.s.fixedRight )
- {
- this._fnMouseListener( i, this.s.dt.aoColumns[i].nTh );
- }
-
- /* Mark the original column order for later reference */
- this.s.dt.aoColumns[i]._ColReorder_iOrigCol = i;
- }
-
- /* State saving */
- this.s.dt.oApi._fnCallbackReg( this.s.dt, 'aoStateSaveParams', function (oS, oData) {
- that._fnStateSave.call( that, oData );
- }, "ColReorder_State" );
-
- /* An initial column order has been specified */
- var aiOrder = null;
- if ( this.s.init.aiOrder )
- {
- aiOrder = this.s.init.aiOrder.slice();
- }
-
- /* State loading, overrides the column order given */
- if ( this.s.dt.oLoadedState && typeof this.s.dt.oLoadedState.ColReorder != 'undefined' &&
- this.s.dt.oLoadedState.ColReorder.length == this.s.dt.aoColumns.length )
- {
- aiOrder = this.s.dt.oLoadedState.ColReorder;
- }
-
- /* If we have an order to apply - do so */
- if ( aiOrder )
- {
- /* We might be called during or after the DataTables initialisation. If before, then we need
- * to wait until the draw is done, if after, then do what we need to do right away
- */
- if ( !that.s.dt._bInitComplete )
- {
- var bDone = false;
- this.s.dt.aoDrawCallback.push( {
- "fn": function () {
- if ( !that.s.dt._bInitComplete && !bDone )
- {
- bDone = true;
- var resort = fnInvertKeyValues( aiOrder );
- that._fnOrderColumns.call( that, resort );
- }
- },
- "sName": "ColReorder_Pre"
- } );
- }
- else
- {
- var resort = fnInvertKeyValues( aiOrder );
- that._fnOrderColumns.call( that, resort );
- }
- }
- else {
- this._fnSetColumnIndexes();
- }
- },
-
-
- /**
- * Set the column order from an array
- * @method _fnOrderColumns
- * @param array a An array of integers which dictate the column order that should be applied
- * @returns void
- * @private
- */
- "_fnOrderColumns": function ( a )
- {
- if ( a.length != this.s.dt.aoColumns.length )
- {
- this.s.dt.oInstance.oApi._fnLog( this.s.dt, 1, "ColReorder - array reorder does not "+
- "match known number of columns. Skipping." );
- return;
- }
-
- for ( var i=0, iLen=a.length ; i<iLen ; i++ )
- {
- var currIndex = $.inArray( i, a );
- if ( i != currIndex )
- {
- /* Reorder our switching array */
- fnArraySwitch( a, currIndex, i );
-
- /* Do the column reorder in the table */
- this.s.dt.oInstance.fnColReorder( currIndex, i );
- }
- }
-
- /* When scrolling we need to recalculate the column sizes to allow for the shift */
- if ( this.s.dt.oScroll.sX !== "" || this.s.dt.oScroll.sY !== "" )
- {
- this.s.dt.oInstance.fnAdjustColumnSizing( false );
- }
-
- /* Save the state */
- this.s.dt.oInstance.oApi._fnSaveState( this.s.dt );
-
- this._fnSetColumnIndexes();
-
- if ( this.s.reorderCallback !== null )
- {
- this.s.reorderCallback.call( this );
- }
- },
-
-
- /**
- * Because we change the indexes of columns in the table, relative to their starting point
- * we need to reorder the state columns to what they are at the starting point so we can
- * then rearrange them again on state load!
- * @method _fnStateSave
- * @param object oState DataTables state
- * @returns string JSON encoded cookie string for DataTables
- * @private
- */
- "_fnStateSave": function ( oState )
- {
- var i, iLen, aCopy, iOrigColumn;
- var oSettings = this.s.dt;
- var columns = oSettings.aoColumns;
-
- oState.ColReorder = [];
-
- /* Sorting */
- if ( oState.aaSorting ) {
- // 1.10.0-
- for ( i=0 ; i<oState.aaSorting.length ; i++ ) {
- oState.aaSorting[i][0] = columns[ oState.aaSorting[i][0] ]._ColReorder_iOrigCol;
- }
-
- var aSearchCopy = $.extend( true, [], oState.aoSearchCols );
-
- for ( i=0, iLen=columns.length ; i<iLen ; i++ )
- {
- iOrigColumn = columns[i]._ColReorder_iOrigCol;
-
- /* Column filter */
- oState.aoSearchCols[ iOrigColumn ] = aSearchCopy[i];
-
- /* Visibility */
- oState.abVisCols[ iOrigColumn ] = columns[i].bVisible;
-
- /* Column reordering */
- oState.ColReorder.push( iOrigColumn );
- }
- }
- else if ( oState.order ) {
- // 1.10.1+
- for ( i=0 ; i<oState.order.length ; i++ ) {
- oState.order[i][0] = columns[ oState.order[i][0] ]._ColReorder_iOrigCol;
- }
-
- var stateColumnsCopy = $.extend( true, [], oState.columns );
-
- for ( i=0, iLen=columns.length ; i<iLen ; i++ )
- {
- iOrigColumn = columns[i]._ColReorder_iOrigCol;
-
- /* Columns */
- oState.columns[ iOrigColumn ] = stateColumnsCopy[i];
-
- /* Column reordering */
- oState.ColReorder.push( iOrigColumn );
- }
- }
- },
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Mouse drop and drag
- */
-
- /**
- * Add a mouse down listener to a particluar TH element
- * @method _fnMouseListener
- * @param int i Column index
- * @param element nTh TH element clicked on
- * @returns void
- * @private
- */
- "_fnMouseListener": function ( i, nTh )
- {
- var that = this;
- $(nTh).on( 'mousedown.ColReorder', function (e) {
- e.preventDefault();
- that._fnMouseDown.call( that, e, nTh );
- } );
- },
-
-
- /**
- * Mouse down on a TH element in the table header
- * @method _fnMouseDown
- * @param event e Mouse event
- * @param element nTh TH element to be dragged
- * @returns void
- * @private
- */
- "_fnMouseDown": function ( e, nTh )
- {
- var that = this;
-
- /* Store information about the mouse position */
- var target = $(e.target).closest('th, td');
- var offset = target.offset();
- var idx = parseInt( $(nTh).attr('data-column-index'), 10 );
-
- if ( idx === undefined ) {
- return;
- }
-
- this.s.mouse.startX = e.pageX;
- this.s.mouse.startY = e.pageY;
- this.s.mouse.offsetX = e.pageX - offset.left;
- this.s.mouse.offsetY = e.pageY - offset.top;
- this.s.mouse.target = this.s.dt.aoColumns[ idx ].nTh;//target[0];
- this.s.mouse.targetIndex = idx;
- this.s.mouse.fromIndex = idx;
-
- this._fnRegions();
-
- /* Add event handlers to the document */
- $(document)
- .on( 'mousemove.ColReorder', function (e) {
- that._fnMouseMove.call( that, e );
- } )
- .on( 'mouseup.ColReorder', function (e) {
- that._fnMouseUp.call( that, e );
- } );
- },
-
-
- /**
- * Deal with a mouse move event while dragging a node
- * @method _fnMouseMove
- * @param event e Mouse event
- * @returns void
- * @private
- */
- "_fnMouseMove": function ( e )
- {
- var that = this;
-
- if ( this.dom.drag === null )
- {
- /* Only create the drag element if the mouse has moved a specific distance from the start
- * point - this allows the user to make small mouse movements when sorting and not have a
- * possibly confusing drag element showing up
- */
- if ( Math.pow(
- Math.pow(e.pageX - this.s.mouse.startX, 2) +
- Math.pow(e.pageY - this.s.mouse.startY, 2), 0.5 ) < 5 )
- {
- return;
- }
- this._fnCreateDragNode();
- }
-
- /* Position the element - we respect where in the element the click occured */
- this.dom.drag.css( {
- left: e.pageX - this.s.mouse.offsetX,
- top: e.pageY - this.s.mouse.offsetY
- } );
-
- /* Based on the current mouse position, calculate where the insert should go */
- var bSet = false;
- var lastToIndex = this.s.mouse.toIndex;
-
- for ( var i=1, iLen=this.s.aoTargets.length ; i<iLen ; i++ )
- {
- if ( e.pageX < this.s.aoTargets[i-1].x + ((this.s.aoTargets[i].x-this.s.aoTargets[i-1].x)/2) )
- {
- this.dom.pointer.css( 'left', this.s.aoTargets[i-1].x );
- this.s.mouse.toIndex = this.s.aoTargets[i-1].to;
- bSet = true;
- break;
- }
- }
-
- // The insert element wasn't positioned in the array (less than
- // operator), so we put it at the end
- if ( !bSet )
- {
- this.dom.pointer.css( 'left', this.s.aoTargets[this.s.aoTargets.length-1].x );
- this.s.mouse.toIndex = this.s.aoTargets[this.s.aoTargets.length-1].to;
- }
-
- // Perform reordering if realtime updating is on and the column has moved
- if ( this.s.init.bRealtime && lastToIndex !== this.s.mouse.toIndex ) {
- this.s.dt.oInstance.fnColReorder( this.s.mouse.fromIndex, this.s.mouse.toIndex );
- this.s.mouse.fromIndex = this.s.mouse.toIndex;
- this._fnRegions();
- }
- },
-
-
- /**
- * Finish off the mouse drag and insert the column where needed
- * @method _fnMouseUp
- * @param event e Mouse event
- * @returns void
- * @private
- */
- "_fnMouseUp": function ( e )
- {
- var that = this;
-
- $(document).off( 'mousemove.ColReorder mouseup.ColReorder' );
-
- if ( this.dom.drag !== null )
- {
- /* Remove the guide elements */
- this.dom.drag.remove();
- this.dom.pointer.remove();
- this.dom.drag = null;
- this.dom.pointer = null;
-
- /* Actually do the reorder */
- this.s.dt.oInstance.fnColReorder( this.s.mouse.fromIndex, this.s.mouse.toIndex );
- this._fnSetColumnIndexes();
-
- /* When scrolling we need to recalculate the column sizes to allow for the shift */
- if ( this.s.dt.oScroll.sX !== "" || this.s.dt.oScroll.sY !== "" )
- {
- this.s.dt.oInstance.fnAdjustColumnSizing( false );
- }
-
- /* Save the state */
- this.s.dt.oInstance.oApi._fnSaveState( this.s.dt );
-
- if ( this.s.reorderCallback !== null )
- {
- this.s.reorderCallback.call( this );
- }
- }
- },
-
-
- /**
- * Calculate a cached array with the points of the column inserts, and the
- * 'to' points
- * @method _fnRegions
- * @returns void
- * @private
- */
- "_fnRegions": function ()
- {
- var aoColumns = this.s.dt.aoColumns;
-
- this.s.aoTargets.splice( 0, this.s.aoTargets.length );
-
- this.s.aoTargets.push( {
- "x": $(this.s.dt.nTable).offset().left,
- "to": 0
- } );
-
- var iToPoint = 0;
- for ( var i=0, iLen=aoColumns.length ; i<iLen ; i++ )
- {
- /* For the column / header in question, we want it's position to remain the same if the
- * position is just to it's immediate left or right, so we only incremement the counter for
- * other columns
- */
- if ( i != this.s.mouse.fromIndex )
- {
- iToPoint++;
- }
-
- if ( aoColumns[i].bVisible )
- {
- this.s.aoTargets.push( {
- "x": $(aoColumns[i].nTh).offset().left + $(aoColumns[i].nTh).outerWidth(),
- "to": iToPoint
- } );
- }
- }
-
- /* Disallow columns for being reordered by drag and drop, counting right to left */
- if ( this.s.fixedRight !== 0 )
- {
- this.s.aoTargets.splice( this.s.aoTargets.length - this.s.fixedRight );
- }
-
- /* Disallow columns for being reordered by drag and drop, counting left to right */
- if ( this.s.fixed !== 0 )
- {
- this.s.aoTargets.splice( 0, this.s.fixed );
- }
- },
-
-
- /**
- * Copy the TH element that is being drags so the user has the idea that they are actually
- * moving it around the page.
- * @method _fnCreateDragNode
- * @returns void
- * @private
- */
- "_fnCreateDragNode": function ()
- {
- var scrolling = this.s.dt.oScroll.sX !== "" || this.s.dt.oScroll.sY !== "";
-
- var origCell = this.s.dt.aoColumns[ this.s.mouse.targetIndex ].nTh;
- var origTr = origCell.parentNode;
- var origThead = origTr.parentNode;
- var origTable = origThead.parentNode;
- var cloneCell = $(origCell).clone();
-
- // This is a slightly odd combination of jQuery and DOM, but it is the
- // fastest and least resource intensive way I could think of cloning
- // the table with just a single header cell in it.
- this.dom.drag = $(origTable.cloneNode(false))
- .addClass( 'DTCR_clonedTable' )
- .append(
- $(origThead.cloneNode(false)).append(
- $(origTr.cloneNode(false)).append(
- cloneCell[0]
- )
- )
- )
- .css( {
- position: 'absolute',
- top: 0,
- left: 0,
- width: $(origCell).outerWidth(),
- height: $(origCell).outerHeight()
- } )
- .appendTo( 'body' );
-
- this.dom.pointer = $('<div></div>')
- .addClass( 'DTCR_pointer' )
- .css( {
- position: 'absolute',
- top: scrolling ?
- $('div.dataTables_scroll', this.s.dt.nTableWrapper).offset().top :
- $(this.s.dt.nTable).offset().top,
- height : scrolling ?
- $('div.dataTables_scroll', this.s.dt.nTableWrapper).height() :
- $(this.s.dt.nTable).height()
- } )
- .appendTo( 'body' );
- },
-
- /**
- * Clean up ColReorder memory references and event handlers
- * @method _fnDestroy
- * @returns void
- * @private
- */
- "_fnDestroy": function ()
- {
- var i, iLen;
-
- for ( i=0, iLen=this.s.dt.aoDrawCallback.length ; i<iLen ; i++ )
- {
- if ( this.s.dt.aoDrawCallback[i].sName === 'ColReorder_Pre' )
- {
- this.s.dt.aoDrawCallback.splice( i, 1 );
- break;
- }
- }
-
- $(this.s.dt.nTHead).find( '*' ).off( '.ColReorder' );
-
- $.each( this.s.dt.aoColumns, function (i, column) {
- $(column.nTh).removeAttr('data-column-index');
- } );
-
- this.s.dt._colReorder = null;
- this.s = null;
- },
-
-
- /**
- * Add a data attribute to the column headers, so we know the index of
- * the row to be reordered. This allows fast detection of the index, and
- * for this plug-in to work with FixedHeader which clones the nodes.
- * @private
- */
- "_fnSetColumnIndexes": function ()
- {
- $.each( this.s.dt.aoColumns, function (i, column) {
- $(column.nTh).attr('data-column-index', i);
- } );
- }
-};
-
-
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Static parameters
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-
-/**
- * ColReorder default settings for initialisation
- * @namespace
- * @static
- */
-ColReorder.defaults = {
- /**
- * Predefined ordering for the columns that will be applied automatically
- * on initialisation. If not specified then the order that the columns are
- * found to be in the HTML is the order used.
- * @type array
- * @default null
- * @static
- * @example
- * // Using the `oColReorder` option in the DataTables options object
- * $('#example').dataTable( {
- * "sDom": 'Rlfrtip',
- * "oColReorder": {
- * "aiOrder": [ 4, 3, 2, 1, 0 ]
- * }
- * } );
- *
- * @example
- * // Using `new` constructor
- * $('#example').dataTable()
- *
- * new $.fn.dataTable.ColReorder( '#example', {
- * "aiOrder": [ 4, 3, 2, 1, 0 ]
- * } );
- */
- aiOrder: null,
-
- /**
- * Redraw the table's column ordering as the end user draws the column
- * (`true`) or wait until the mouse is released (`false` - default). Note
- * that this will perform a redraw on each reordering, which involves an
- * Ajax request each time if you are using server-side processing in
- * DataTables.
- * @type boolean
- * @default false
- * @static
- * @example
- * // Using the `oColReorder` option in the DataTables options object
- * $('#example').dataTable( {
- * "sDom": 'Rlfrtip',
- * "oColReorder": {
- * "bRealtime": true
- * }
- * } );
- *
- * @example
- * // Using `new` constructor
- * $('#example').dataTable()
- *
- * new $.fn.dataTable.ColReorder( '#example', {
- * "bRealtime": true
- * } );
- */
- bRealtime: false,
-
- /**
- * Indicate how many columns should be fixed in position (counting from the
- * left). This will typically be 1 if used, but can be as high as you like.
- * @type int
- * @default 0
- * @static
- * @example
- * // Using the `oColReorder` option in the DataTables options object
- * $('#example').dataTable( {
- * "sDom": 'Rlfrtip',
- * "oColReorder": {
- * "iFixedColumns": 1
- * }
- * } );
- *
- * @example
- * // Using `new` constructor
- * $('#example').dataTable()
- *
- * new $.fn.dataTable.ColReorder( '#example', {
- * "iFixedColumns": 1
- * } );
- */
- iFixedColumns: 0,
-
- /**
- * As `iFixedColumnsRight` but counting from the right.
- * @type int
- * @default 0
- * @static
- * @example
- * // Using the `oColReorder` option in the DataTables options object
- * $('#example').dataTable( {
- * "sDom": 'Rlfrtip',
- * "oColReorder": {
- * "iFixedColumnsRight": 1
- * }
- * } );
- *
- * @example
- * // Using `new` constructor
- * $('#example').dataTable()
- *
- * new $.fn.dataTable.ColReorder( '#example', {
- * "iFixedColumnsRight": 1
- * } );
- */
- iFixedColumnsRight: 0,
-
- /**
- * Callback function that is fired when columns are reordered
- * @type function():void
- * @default null
- * @static
- * @example
- * // Using the `oColReorder` option in the DataTables options object
- * $('#example').dataTable( {
- * "sDom": 'Rlfrtip',
- * "oColReorder": {
- * "fnReorderCallback": function () {
- * alert( 'Columns reordered' );
- * }
- * }
- * } );
- *
- * @example
- * // Using `new` constructor
- * $('#example').dataTable()
- *
- * new $.fn.dataTable.ColReorder( '#example', {
- * "fnReorderCallback": function () {
- * alert( 'Columns reordered' );
- * }
- * } );
- */
- fnReorderCallback: null
-};
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Constants
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/**
- * ColReorder version
- * @constant version
- * @type String
- * @default As code
- */
-ColReorder.version = "1.1.3";
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables interfaces
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-// Expose
-$.fn.dataTable.ColReorder = ColReorder;
-$.fn.DataTable.ColReorder = ColReorder;
-
-
-// Register a new feature with DataTables
-if ( typeof $.fn.dataTable == "function" &&
- typeof $.fn.dataTableExt.fnVersionCheck == "function" &&
- $.fn.dataTableExt.fnVersionCheck('1.9.3') )
-{
- $.fn.dataTableExt.aoFeatures.push( {
- "fnInit": function( settings ) {
- var table = settings.oInstance;
-
- if ( ! settings._colReorder ) {
- var dtInit = settings.oInit;
- var opts = dtInit.colReorder || dtInit.oColReorder || {};
-
- new ColReorder( settings, opts );
- }
- else {
- table.oApi._fnLog( settings, 1, "ColReorder attempted to initialise twice. Ignoring second" );
- }
-
- return null; /* No node for DataTables to insert */
- },
- "cFeature": "R",
- "sFeature": "ColReorder"
- } );
-}
-else {
- alert( "Warning: ColReorder requires DataTables 1.9.3 or greater - www.datatables.net/download");
-}
-
-
-// API augmentation
-if ( $.fn.dataTable.Api ) {
- $.fn.dataTable.Api.register( 'colReorder.reset()', function () {
- return this.iterator( 'table', function ( ctx ) {
- ctx._colReorder.fnReset();
- } );
- } );
-
- $.fn.dataTable.Api.register( 'colReorder.order()', function ( set ) {
- if ( set ) {
- return this.iterator( 'table', function ( ctx ) {
- ctx._colReorder.fnOrder( set );
- } );
- }
-
- return this.context.length ?
- this.context[0]._colReorder.fnOrder() :
- null;
- } );
-}
-
-return ColReorder;
-}; // /factory
-
-
-// Define as an AMD module if possible
-if ( typeof define === 'function' && define.amd ) {
- define( ['jquery', 'datatables'], factory );
-}
-else if ( typeof exports === 'object' ) {
- // Node/CommonJS
- factory( require('jquery'), require('datatables') );
-}
-else if ( jQuery && !jQuery.fn.dataTable.ColReorder ) {
- // Otherwise simply initialise as normal, stopping multiple evaluation
- factory( jQuery, jQuery.fn.dataTable );
-}
-
-
-})(window, document); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.colResize.js b/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.colResize.js
deleted file mode 100644
index 08bd7333..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.colResize.js
+++ /dev/null
@@ -1,846 +0,0 @@
-/*! ColResize 0.0.10
- */
-
-/**
- * @summary ColResize
- * @description Provide the ability to resize columns in a DataTable
- * @version 0.0.10
- * @file dataTables.colResize.js
- * @author Silvacom Ltd.
- *
- * For details please refer to: http://www.datatables.net
- *
- * Special thank to everyone who has contributed to this plug in
- * - dykstrad
- * - tdillan (for 0.0.3 and 0.0.5 bug fixes)
- * - kylealonius (for 0.0.8 bug fix)
- * - the86freak (for 0.0.9 bug fix)
- */
-
-(function (window, document, undefined) {
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables plug-in API functions test
- *
- * This are required by ColResize in order to perform the tasks required, and also keep this
- * code portable, to be used for other column resize projects with DataTables, if needed.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- var factory = function ($, DataTable) {
- "use strict";
-
- /**
- * Plug-in for DataTables which will resize the columns depending on the handle clicked
- * @method $.fn.dataTableExt.oApi.fnColResize
- * @param object oSettings DataTables settings object - automatically added by DataTables!
- * @param int iCol Take the column to be resized
- * @returns void
- */
- $.fn.dataTableExt.oApi.fnColResize = function (oSettings, iCol) {
- var v110 = $.fn.dataTable.Api ? true : false;
-
- /*
- * Update DataTables' event handlers
- */
-
- /* Fire an event so other plug-ins can update */
- $(oSettings.oInstance).trigger('column-resize', [ oSettings, {
- "iCol": iCol
- } ]);
- };
-
- /**
- * ColResize provides column resize control for DataTables
- * @class ColResize
- * @constructor
- * @param {object} dt DataTables settings object
- * @param {object} opts ColResize options
- */
- var ColResize = function (dt, opts) {
- var oDTSettings;
-
- if ($.fn.dataTable.Api) {
- oDTSettings = new $.fn.dataTable.Api(dt).settings()[0];
- }
- // 1.9 compatibility
- else if (dt.fnSettings) {
- // DataTables object, convert to the settings object
- oDTSettings = dt.fnSettings();
- }
- else if (typeof dt === 'string') {
- // jQuery selector
- if ($.fn.dataTable.fnIsDataTable($(dt)[0])) {
- oDTSettings = $(dt).eq(0).dataTable().fnSettings();
- }
- }
- else if (dt.nodeName && dt.nodeName.toLowerCase() === 'table') {
- // Table node
- if ($.fn.dataTable.fnIsDataTable(dt.nodeName)) {
- oDTSettings = $(dt.nodeName).dataTable().fnSettings();
- }
- }
- else if (dt instanceof jQuery) {
- // jQuery object
- if ($.fn.dataTable.fnIsDataTable(dt[0])) {
- oDTSettings = dt.eq(0).dataTable().fnSettings();
- }
- }
- else {
- // DataTables settings object
- oDTSettings = dt;
- }
-
- // Convert from camelCase to Hungarian, just as DataTables does
- if ($.fn.dataTable.camelToHungarian) {
- $.fn.dataTable.camelToHungarian(ColResize.defaults, opts || {});
- }
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Public class variables
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- /**
- * @namespace Settings object which contains customizable information for ColResize instance
- */
- this.s = {
- /**
- * DataTables settings object
- * @property dt
- * @type Object
- * @default null
- */
- "dt": null,
-
- /**
- * Initialisation object used for this instance
- * @property init
- * @type object
- * @default {}
- */
- "init": $.extend(true, {}, ColResize.defaults, opts),
-
- /**
- * @namespace Information used for the mouse drag
- */
- "mouse": {
- "startX": -1,
- "startY": -1,
- "targetIndex": -1,
- "targetColumn": -1,
- "neighbourIndex": -1,
- "neighbourColumn": -1
- },
-
- /**
- * Status variable keeping track of mouse down status
- * @property isMousedown
- * @type boolean
- * @default false
- */
- "isMousedown": false
- };
-
-
- /**
- * @namespace Common and useful DOM elements for the class instance
- */
- this.dom = {
- /**
- * Resizing element (the one the mouse is resizing)
- * @property resize
- * @type element
- * @default null
- */
- "resizeCol": null,
-
- /**
- * Resizing element neighbour (the column next to the one the mouse is resizing)
- * This is for fixed table resizing.
- * @property resize
- * @type element
- * @default null
- */
- "resizeColNeighbour": null,
-
- /**
- * Array of events to be restored, used for overriding existing events from other plugins for a time.
- * @property restoreEvents
- * @type array
- * @default []
- */
- "restoreEvents": []
- };
-
-
- /* Constructor logic */
- this.s.dt = oDTSettings.oInstance.fnSettings();
- this.s.dt._colResize = this;
- this._fnConstruct();
-
- /* Add destroy callback */
- oDTSettings.oApi._fnCallbackReg(oDTSettings, 'aoDestroyCallback', $.proxy(this._fnDestroy, this), 'ColResize');
-
- return this;
- };
-
-
- ColResize.prototype = {
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Public methods
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- /**
- * Reset the column widths to the original widths that was detected on
- * start up.
- * @return {this} Returns `this` for chaining.
- *
- * @example
- * // DataTables initialisation with ColResize
- * var table = $('#example').dataTable( {
- * "sDom": 'Zlfrtip'
- * } );
- *
- * // Add click event to a button to reset the ordering
- * $('#resetOrdering').click( function (e) {
- * e.preventDefault();
- * $.fn.dataTable.ColResize( table ).fnReset();
- * } );
- */
- "fnReset": function () {
- var a = [];
- for (var i = 0, iLen = this.s.dt.aoColumns.length; i < iLen; i++) {
- this.s.dt.aoColumns[i].width = this.s.dt.aoColumns[i]._ColResize_iOrigWidth;
- }
-
- this.s.dt.adjust().draw();
-
- return this;
- },
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Private methods (they are of course public in JS, but recommended as private)
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- /**
- * Constructor logic
- * @method _fnConstruct
- * @returns void
- * @private
- */
- "_fnConstruct": function () {
- var that = this;
- var iLen = that.s.dt.aoColumns.length;
- var i;
-
- that._fnSetupMouseListeners();
-
- /* Add event handlers for the resize handles */
- for (i = 0; i < iLen; i++) {
- /* Mark the original column width for later reference */
- this.s.dt.aoColumns[i]._ColResize_iOrigWidth = this.s.dt.aoColumns[i].width;
- }
-
- this._fnSetColumnIndexes();
-
- /* State saving */
- this.s.dt.oApi._fnCallbackReg( this.s.dt, 'aoStateSaveParams', function (oS, oData) {
- that._fnStateSave.call(that, oData);
- }, "ColResize_State" );
-
- // State loading
- this._fnStateLoad();
- },
-
- /**
- * @method _fnStateSave
- * @param object oState DataTables state
- * @private
- */
- "_fnStateSave": function (oState) {
- this.s.dt.aoColumns.forEach(function(col, index) {
- oState.columns[index].width = col.sWidthOrig;
- });
- },
-
- /**
- * If state has been loaded, apply the saved widths to the columns
- * @method _fnStateLoad
- * @private
- */
- "_fnStateLoad": function() {
- var that = this,
- loadedState = this.s.dt.oLoadedState;
- if (loadedState && loadedState.columns) {
- var colStates = loadedState.columns,
- currCols = this.s.dt.aoColumns;
- // Only apply the saved widths if the number of columns is the same.
- // Otherwise, we don't know if we're applying the width to the correct column.
- if (colStates.length > 0 && colStates.length === currCols.length) {
- colStates.forEach(function(state, index) {
- var col = that.s.dt.aoColumns[index];
- if (state.width) {
- col.sWidthOrig = col.sWidth = state.width;
- }
- });
- }
- }
- },
-
- /**
- * Remove events of type from obj add it to restoreEvents array to be restored at a later time
- * @param until string flag when to restore the event
- * @param obj Object to remove events from
- * @param type type of event to remove
- * @param namespace namespace of the event being removed
- */
- "_fnDelayEvents": function (until, obj, type, namespace) {
- var that = this;
- //Get the events for the object
- var events = $._data($(obj).get(0), 'events');
- $.each(events, function (i, o) {
- //If the event type matches
- if (i == type) {
- //Loop through the possible many events with that type
- $.each(o, function (k, v) {
- //Somehow it is possible for the event to be undefined make sure it is defined first
- if (v) {
- if (namespace) {
- //Add the event to the array of events to be restored later
- that.dom.restoreEvents.push({"until": until, "obj": obj, "type": v.type, "namespace": v.namespace, "handler": v.handler});
- //If the namespace matches
- if (v.namespace == namespace) {
- //Turn off/unbind the event
- $(obj).off(type + "." + namespace);
- }
- } else {
- //Add the event to the array of events to be restored later
- that.dom.restoreEvents.push({"until": until, "obj": obj, "type": v.type, "namespace": null, "handler": v.handler});
- //Turn off/unbind the event
- $(obj).off(type);
- }
- }
- });
- }
- });
- },
-
- /**
- * Loop through restoreEvents array and restore the events on the elements provided
- */
- "_fnRestoreEvents": function (until) {
- var that = this;
- //Loop through the events to be restored
- var i;
- for (i = that.dom.restoreEvents.length; i--;) {
- if (that.dom.restoreEvents[i].until == undefined || that.dom.restoreEvents[i].until == null || that.dom.restoreEvents[i].until == until) {
- if (that.dom.restoreEvents[i].namespace) {
- //Turn on the event for the object provided
- $(that.dom.restoreEvents[i].obj).off(that.dom.restoreEvents[i].type + "." + that.dom.restoreEvents[i].namespace).on(that.dom.restoreEvents[i].type + "." + that.dom.restoreEvents[i].namespace, that.dom.restoreEvents[i].handler);
- that.dom.restoreEvents.splice(i, 1);
- } else {
- //Turn on the event for the object provided
- $(that.dom.restoreEvents[i].obj).off(that.dom.restoreEvents[i].type).on(that.dom.restoreEvents[i].type, that.dom.restoreEvents[i].handler);
- that.dom.restoreEvents.splice(i, 1);
- }
- }
- }
- },
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Mouse drop and drag
- */
-
- "_fnSetupMouseListeners":function() {
- var that = this;
- $(that.s.dt.nTableWrapper).off("mouseenter.ColResize").on("mouseenter.ColResize","th",function(e) {
- e.preventDefault();
- that._fnMouseEnter.call(that, e, this);
- });
- $(that.s.dt.nTableWrapper).off("mouseleave.ColResize").on("mouseleave.ColResize","th",function(e) {
- e.preventDefault();
- that._fnMouseLeave.call(that, e, this);
- });
- },
-
- /**
- * Add mouse listeners to the resize handle on TH element
- * @method _fnMouseListener
- * @param i Column index
- * @param nTh TH resize handle element clicked on
- * @returns void
- * @private
- */
- "_fnMouseListener": function (i, nTh) {
- var that = this;
- $(nTh).off('mouseenter.ColResize').on('mouseenter.ColResize', function (e) {
- e.preventDefault();
- that._fnMouseEnter.call(that, e, nTh);
- });
- $(nTh).off('mouseleave.ColResize').on('mouseleave.ColResize', function (e) {
- e.preventDefault();
- that._fnMouseLeave.call(that, e, nTh);
- });
- },
-
- /**
- *
- * @param e Mouse event
- * @param nTh TH element that the mouse is over
- */
- "_fnMouseEnter": function (e, nTh) {
- var that = this;
- if(!that.s.isMousedown) {
- //Once the mouse has entered the cell add mouse move event to see if the mouse is over resize handle
- $(nTh).off('mousemove.ColResizeHandle').on('mousemove.ColResizeHandle', function (e) {
- e.preventDefault();
- that._fnResizeHandleCheck.call(that, e, nTh);
- });
- }
- },
-
- /**
- * Clear mouse events when the mouse has left the th
- * @param e Mouse event
- * @param nTh TH element that the mouse has just left
- */
- "_fnMouseLeave": function (e, nTh) {
- //Once the mouse has left the TH make suure to remove the mouse move listener
- $(nTh).off('mousemove.ColResizeHandle');
- },
-
- /**
- * Mouse down on a TH element in the table header
- * @method _fnMouseDown
- * @param event e Mouse event
- * @param element nTh TH element to be resized
- * @returns void
- * @private
- */
- "_fnMouseDown": function (e, nTh) {
- var that = this;
-
- that.s.isMousedown = true;
-
- /* Store information about the mouse position */
- var target = $(e.target).closest('th, td');
- var offset = target.offset();
-
- /* Store information about the mouse position for resize calculations in mouse move function */
- this.s.mouse.startX = e.pageX;
- this.s.mouse.startY = e.pageY;
-
- //Store the indexes of the columns the mouse is down on
- var idx = that.dom.resizeCol[0].cellIndex;
-
- // the last column has no 'right-side' neighbour
- // with fixed this can make the table smaller
- if (that.dom.resizeColNeighbour[0] === undefined){
- var idxNeighbour = 0;
- } else {
- var idxNeighbour = that.dom.resizeColNeighbour[0].cellIndex;
- }
-
-
-
- if (idx === undefined) {
- return;
- }
-
- this.s.mouse.targetIndex = idx;
- this.s.mouse.targetColumn = this.s.dt.aoColumns[ idx ];
-
- this.s.mouse.neighbourIndex = idxNeighbour;
- this.s.mouse.neighbourColumn = this.s.dt.aoColumns[ idxNeighbour ];
-
- /* Add event handlers to the document */
- $(document)
- .off('mousemove.ColResize').on('mousemove.ColResize', function (e) {
- that._fnMouseMove.call(that, e);
- })
- .off('mouseup.ColResize').on('mouseup.ColResize', function (e) {
- that._fnMouseUp.call(that, e);
- });
- },
-
- /**
- * Deal with a mouse move event while dragging to resize a column
- * @method _fnMouseMove
- * @param e Mouse event
- * @returns void
- * @private
- */
- "_fnMouseMove": function (e) {
- var that = this;
-
- var offset = $(that.s.mouse.targetColumn.nTh).offset();
- var relativeX = (e.pageX - offset.left);
- var distFromLeft = relativeX;
- var distFromRight = $(that.s.mouse.targetColumn.nTh).outerWidth() - relativeX - 1;
-
- //Change in mouse x position
- var dx = e.pageX - that.s.mouse.startX;
- //Get the minimum width of the column (default minimum 10px)
- var minColumnWidth = Math.max(parseInt($(that.s.mouse.targetColumn.nTh).css('min-width')), 10);
- //Store the previous width of the column
- var prevWidth = $(that.s.mouse.targetColumn.nTh).width();
- //As long as the cursor is past the handle, resize the columns
- if ((dx > 0 && distFromRight <= 0) || (dx < 0 && distFromRight >= 0)) {
- if (!that.s.init.tableWidthFixed) {
- //As long as the width is larger than the minimum
- var newColWidth = Math.max(minColumnWidth, prevWidth + dx);
- //Get the width difference (take into account the columns minimum width)
- var widthDiff = newColWidth - prevWidth;
- var colResizeIdx = parseInt(that.dom.resizeCol.attr("data-column-index"));
- //Set datatable column widths
- that.s.mouse.targetColumn.sWidthOrig = that.s.mouse.targetColumn.sWidth = that.s.mouse.targetColumn.width = newColWidth + "px";
- var domCols = $(that.s.dt.nTableWrapper).find("th[data-column-index='"+colResizeIdx+"']");
- //For each table expand the width by the same amount as the column
- //This accounts for other datatable plugins like FixedColumns
- domCols.parents("table").each(function() {
- if(!$(this).parent().hasClass("DTFC_LeftBodyLiner")) {
- var newWidth = $(this).width() + widthDiff;
- $(this).width(newWidth);
- } else {
- var newWidth =$(that.s.dt.nTableWrapper).find(".DTFC_LeftHeadWrapper").children("table").width();
- $(this).parents(".DTFC_LeftWrapper").width(newWidth);
- $(this).parent().width(newWidth+15);
- $(this).width(newWidth);
- }
- });
- //Apply the new width to the columns after the table has been resized
- domCols.width(that.s.mouse.targetColumn.width);
- } else {
- //A neighbour column must exist in order to resize a column in a table with a fixed width
- if (that.s.mouse.neighbourColumn) {
- //Get the minimum width of the neighbor column (default minimum 10px)
- var minColumnNeighbourWidth = Math.max(parseInt($(that.s.mouse.neighbourColumn.nTh).css('min-width')), 10);
- //Store the previous width of the neighbour column
- var prevNeighbourWidth = $(that.s.mouse.neighbourColumn.nTh).width();
- //As long as the width is larger than the minimum
- var newColWidth = Math.max(minColumnWidth, prevWidth + dx);
- var newColNeighbourWidth = Math.max(minColumnNeighbourWidth, prevNeighbourWidth - dx);
- //Get the width difference (take into account the columns minimum width)
- var widthDiff = newColWidth - prevWidth;
- var widthDiffNeighbour = newColNeighbourWidth - prevNeighbourWidth;
- //Get the column index for the column being changed
- var colResizeIdx = parseInt(that.dom.resizeCol.attr("data-column-index"));
- var neighbourColResizeIdx = parseInt(that.dom.resizeColNeighbour.attr("data-column-index"));
- //Set datatable column widths
- that.s.mouse.neighbourColumn.sWidthOrig = that.s.mouse.neighbourColumn.sWidth = that.s.mouse.neighbourColumn.width = newColNeighbourWidth + "px";
- that.s.mouse.targetColumn.sWidthOrig = that.s.mouse.targetColumn.sWidth = that.s.mouse.targetColumn.width = newColWidth + "px";
- //Get list of columns based on column index in all affected tables tables. This accounts for other plugins like FixedColumns
- var domNeighbourCols = $(that.s.dt.nTableWrapper).find("th[data-column-index='" + neighbourColResizeIdx + "']");
- var domCols = $(that.s.dt.nTableWrapper).find("th[data-column-index='" + colResizeIdx + "']");
- //If dx if positive (the width is getting larger) shrink the neighbour columns first
- if(dx>0) {
- domNeighbourCols.width(that.s.mouse.neighbourColumn.width);
- domCols.width(that.s.mouse.targetColumn.width);
- } else {
- //Apply the new width to the columns then to the neighbour columns
- domCols.width(that.s.mouse.targetColumn.width);
- domNeighbourCols.width(that.s.mouse.neighbourColumn.width);
- }
- }
- }
- }
- that.s.mouse.startX = e.pageX;
- },
-
- /**
- * Check to see if the mouse is over the resize handle area
- * @param e
- * @param nTh
- */
- "_fnResizeHandleCheck": function (e, nTh) {
- var that = this;
-
- var offset = $(nTh).offset();
- var relativeX = (e.pageX - offset.left);
- var relativeY = (e.pageY - offset.top);
- var distFromLeft = relativeX;
- var distFromRight = $(nTh).outerWidth() - relativeX - 1;
-
- var handleBuffer = this.s.init.handleWidth / 2;
- var leftHandleOn = distFromLeft < handleBuffer;
- var rightHandleOn = distFromRight < handleBuffer;
-
- //If this is the first table cell
- if ($(nTh).prev("th").length == 0) {
- if(this.s.init.rtl)
- rightHandleOn = false;
- else
- leftHandleOn = false;
- }
- //If this is the last cell and the table is fixed width don't let them expand the last cell directly
- if ($(nTh).next("th").length == 0 && this.s.init.tableWidthFixed) {
- if(this.s.init.rtl)
- leftHandleOn = false;
- else
- rightHandleOn = false;
- }
-
- var resizeAvailable = leftHandleOn||rightHandleOn;
-
- //If table is in right to left mode flip which TH is being resized
- if (that.s.init.rtl) {
- //Handle is to the left
- if (leftHandleOn) {
- that.dom.resizeCol = $(nTh);
- that.dom.resizeColNeighbour = $(nTh).next();
- } else if (rightHandleOn) {
- that.dom.resizeCol = $(nTh).prev();
- that.dom.resizeColNeighbour = $(nTh);
- }
- } else {
- //Handle is to the right
- if (rightHandleOn) {
- that.dom.resizeCol = $(nTh);
- that.dom.resizeColNeighbour = $(nTh).next();
- } else if (leftHandleOn) {
- that.dom.resizeCol = $(nTh).prev();
- that.dom.resizeColNeighbour = $(nTh);
- }
- }
-
- //If table width is fixed make sure both columns are resizable else just check the one.
- if(this.s.init.tableWidthFixed)
- resizeAvailable &= this.s.init.exclude.indexOf(parseInt($(that.dom.resizeCol).attr("data-column-index"))) == -1 && this.s.init.exclude.indexOf(parseInt($(that.dom.resizeColNeighbour).attr("data-column-index"))) == -1;
- else
- resizeAvailable &= this.s.init.exclude.indexOf(parseInt($(that.dom.resizeCol).attr("data-column-index"))) == -1;
-
- $(nTh).off('mousedown.ColResize');
- if (resizeAvailable) {
- $(nTh).css("cursor", "ew-resize");
-
- //Delay other mousedown events from the Reorder plugin
- that._fnDelayEvents(null, nTh, "mousedown", "ColReorder");
- that._fnDelayEvents("click", nTh, "click", "DT");
-
- $(nTh).off('mousedown.ColResize').on('mousedown.ColResize', function (e) {
- e.preventDefault();
- that._fnMouseDown.call(that, e, nTh);
- })
- .off('click.ColResize').on('click.ColResize', function (e) {
- that._fnClick.call(that, e);
- });
- } else {
- $(nTh).css("cursor", "pointer");
- $(nTh).off('mousedown.ColResize click.ColResize');
- //Restore any events that were removed
- that._fnRestoreEvents();
- //This is to restore column sorting on click functionality
- if (!that.s.isMousedown)
- //Restore click event if mouse is not down
- this._fnRestoreEvents("click");
- }
- },
-
- "_fnClick": function (e) {
- var that = this;
- that.s.isMousedown = false;
- e.stopImmediatePropagation();
- },
-
- /**
- * Finish off the mouse drag
- * @method _fnMouseUp
- * @param e Mouse event
- * @returns void
- * @private
- */
- "_fnMouseUp": function (e) {
- var that = this;
- that.s.isMousedown = false;
-
- //Fix width of column to be the size the dom is limited to (for when user sets min-width on a column)
- that.s.mouse.targetColumn.width = that.dom.resizeCol.width();
-
- $(document).off('mousemove.ColResize mouseup.ColResize');
- this.s.dt.oInstance.fnAdjustColumnSizing();
- //Table width fix, prevents extra gaps between tables
- var LeftWrapper = $(that.s.dt.nTableWrapper).find(".DTFC_LeftWrapper");
- var DTFC_LeftWidth = LeftWrapper.width();
- LeftWrapper.children(".DTFC_LeftHeadWrapper").children("table").width(DTFC_LeftWidth);
-
- if (that.s.init.resizeCallback) {
- that.s.init.resizeCallback.call(that, that.s.mouse.targetColumn);
- }
- },
-
- /**
- * Clean up ColResize memory references and event handlers
- * @method _fnDestroy
- * @returns void
- * @private
- */
- "_fnDestroy": function () {
- var i, iLen;
-
- for (i = 0, iLen = this.s.dt.aoDrawCallback.length; i < iLen; i++) {
- if (this.s.dt.aoDrawCallback[i].sName === 'ColResize_Pre') {
- this.s.dt.aoDrawCallback.splice(i, 1);
- break;
- }
- }
-
- $(this.s.dt.nTHead).find('*').off('.ColResize');
-
- $.each(this.s.dt.aoColumns, function (i, column) {
- $(column.nTh).removeAttr('data-column-index');
- });
-
- this.s.dt._colResize = null;
- this.s = null;
- },
-
-
- /**
- * Add a data attribute to the column headers, so we know the index of
- * the row to be reordered. This allows fast detection of the index, and
- * for this plug-in to work with FixedHeader which clones the nodes.
- * @private
- */
- "_fnSetColumnIndexes": function () {
- $.each(this.s.dt.aoColumns, function (i, column) {
- $(column.nTh).attr('data-column-index', i);
- });
- }
- };
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Static parameters
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-
- /**
- * ColResize default settings for initialisation
- * @namespace
- * @static
- */
- ColResize.defaults = {
- /**
- * Callback function that is fired when columns are resized
- * @type function():void
- * @default null
- * @static
- */
- "resizeCallback": null,
-
- /**
- * Exclude array for columns that are not resizable
- * @property exclude
- * @type array of indexes that are excluded from resizing
- * @default []
- */
- "exclude": [],
-
- /**
- * Check to see if user is using a fixed table width or dynamic
- * if true:
- * -Columns will resize themselves and their neighbour
- * -If neighbour is excluded resize will not occur
- * if false:
- * -Columns will resize themselves and increase or decrease the width of the table accordingly
- */
- "tableWidthFixed": true,
-
- /**
- * Width of the resize handle in pixels
- * @property handleWidth
- * @type int (pixels)
- * @default 10
- */
- "handleWidth": 10,
-
- /**
- * Right to left support, when true flips which column they are resizing on mouse down
- * @property rtl
- * @type bool
- * @default false
- */
- "rtl": false
- };
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Constants
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- /**
- * ColResize version
- * @constant version
- * @type String
- * @default As code
- */
- ColResize.version = "0.0.10";
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables interfaces
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- // Expose
- $.fn.dataTable.ColResize = ColResize;
- $.fn.DataTable.ColResize = ColResize;
-
-
- // Register a new feature with DataTables
- if (typeof $.fn.dataTable == "function" &&
- typeof $.fn.dataTableExt.fnVersionCheck == "function" &&
- $.fn.dataTableExt.fnVersionCheck('1.9.3')) {
- $.fn.dataTableExt.aoFeatures.push({
- "fnInit": function (settings) {
- var table = settings.oInstance;
-
- if (!settings._colResize) {
- var dtInit = settings.oInit;
- var opts = dtInit.colResize || dtInit.oColResize || {};
-
- new ColResize(settings, opts);
- }
- else {
- table.oApi._fnLog(settings, 1, "ColResize attempted to initialise twice. Ignoring second");
- }
-
- return null;
- /* No node for DataTables to insert */
- },
- "cFeature": "Z",
- "sFeature": "ColResize"
- });
- } else {
- alert("Warning: ColResize requires DataTables 1.9.3 or greater - www.datatables.net/download");
- }
-
-
-// API augmentation
- if ($.fn.dataTable.Api) {
- $.fn.dataTable.Api.register('colResize.reset()', function () {
- return this.iterator('table', function (ctx) {
- ctx._colResize.fnReset();
- });
- });
- }
-
- return ColResize;
- }; // /factory
-
-
-// Define as an AMD module if possible
-if ( typeof define === 'function' && define.amd ) {
- define( ['jquery', 'datatables'], factory );
-}
-else if ( typeof exports === 'object' ) {
- // Node/CommonJS
- factory( require('jquery'), require('datatables') );
-}
-else if (jQuery && !jQuery.fn.dataTable.ColResize) {
- // Otherwise simply initialise as normal, stopping multiple evaluation
- factory(jQuery, jQuery.fn.dataTable);
-}
-
-
-})(window, document); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.colResize2.js b/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.colResize2.js
deleted file mode 100644
index 6ef9907a..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.colResize2.js
+++ /dev/null
@@ -1,943 +0,0 @@
-var dt;
-(function (dt) {
- var ColResize = (function () {
- function ColResize($, api, settings) {
- this.$ = $;
- this.tableSize = -1;
- this.initialized = false;
- this.dt = {};
- this.dom = {
- fixedLayout: false,
- fixedHeader: null,
- winResizeTimer: null,
- mouse: {
- startX: -1,
- startWidth: null
- },
- table: {
- prevWidth: null
- },
- origState: true,
- resize: false,
- scrollHead: null,
- scrollHeadTable: null,
- scrollFoot: null,
- scrollFootTable: null,
- scrollFootInner: null,
- scrollBody: null,
- scrollBodyTable: null,
- scrollX: false,
- scrollY: false
- };
- this.settings = this.$.extend(true, {}, dt.ColResize.defaultSettings, settings);
- this.dt.settings = api.settings()[0];
- this.dt.api = api;
- this.dt.settings.colResize = this;
- this.registerCallbacks();
- }
- ColResize.prototype.initialize = function () {
- var _this = this;
- this.$.each(this.dt.settings.aoColumns, function (i, col) {
- return _this.setupColumn(col);
- });
-
- //Initialize fixedHeader if specified
- if (this.settings.fixedHeader)
- this.setupFixedHeader();
-
- //Save scroll head and body if found
- this.dom.scrollHead = this.$('div.' + this.dt.settings.oClasses.sScrollHead, this.dt.settings.nTableWrapper);
- this.dom.scrollHeadInner = this.$('div.' + this.dt.settings.oClasses.sScrollHeadInner, this.dom.scrollHead);
- this.dom.scrollHeadTable = this.$('div.' + this.dt.settings.oClasses.sScrollHeadInner + ' > table', this.dom.scrollHead);
-
- this.dom.scrollFoot = this.$('div.' + this.dt.settings.oClasses.sScrollFoot, this.dt.settings.nTableWrapper);
- this.dom.scrollFootInner = this.$('div.' + this.dt.settings.oClasses.sScrollFootInner, this.dom.scrollFoot);
- this.dom.scrollFootTable = this.$('div.' + this.dt.settings.oClasses.sScrollFootInner + ' > table', this.dom.scrollFoot);
-
- this.dom.scrollBody = this.$('div.' + this.dt.settings.oClasses.sScrollBody, this.dt.settings.nTableWrapper);
- this.dom.scrollBodyTable = this.$('> table', this.dom.scrollBody);
- this.dt.api.on('draw.dt', this.onDraw.bind(this));
- if (this.dom.scrollFootTable) {
- this.dt.api.on('colPinFcDraw.dt', function (e, colPin, data) {
- if (data.leftClone.header)
- _this.$('tfoot', data.leftClone.header).remove();
- if (data.leftClone.footer)
- _this.$('thead', data.leftClone.footer).remove();
- if (data.rightClone.header)
- _this.$('tfoot', data.rightClone.header).remove();
- if (data.rightClone.footer)
- _this.$('thead', data.rightClone.footer).remove();
- });
- }
-
- this.dom.scrollX = this.dt.settings.oInit.sScrollX === undefined ? false : true;
- this.dom.scrollY = this.dt.settings.oInit.sScrollY === undefined ? false : true;
-
- //SaveTableWidth
- this.dt.settings.sTableWidthOrig = this.$(this.dt.settings.nTable).width();
- this.updateTableSize();
-
- this.dt.settings.oFeatures.bAutoWidthOrig = this.dt.settings.oFeatures.bAutoWidth;
- this.dt.settings.oFeatures.bAutoWidth = false;
-
- if (this.dt.settings.oInit.bStateSave && this.dt.settings.oLoadedState) {
- this.loadState(this.dt.settings.oLoadedState);
- }
-
- this.onDraw();
- this.dom.table.preWidth = parseFloat(this.dom.scrollBodyTable.css('width'));
-
- if (!this.dom.scrollX && this.dom.scrollY && this.settings.fixedLayout && this.dt.settings._reszEvt) {
- //We have to manually resize columns on window resize
- var eventName = 'resize.DT-' + this.dt.settings.sInstance;
- this.$(window).off(eventName);
- this.$(window).on(eventName, function () {
- _this.proportionallyColumnSizing();
- //api._fnAdjustColumnSizing(this.dt.settings);
- });
- }
-
- if (this.dom.scrollX || this.dom.scrollY) {
- this.dt.api.on('column-sizing.dt', this.fixFootAndHeadTables.bind(this));
- this.dt.api.on('column-visibility.dt', this.fixFootAndHeadTables.bind(this));
- }
-
- this.initialized = true;
- this.dt.settings.oApi._fnCallbackFire(this.dt.settings, 'colResizeInitCompleted', 'colResizeInitCompleted', [this]);
- };
-
- ColResize.prototype.setupColumn = function (col) {
- var _this = this;
- var $th = this.$(col.nTh);
- if (col.resizable === false)
- return;
-
- // listen to mousemove event for resize
- $th.on('mousemove.ColResize', function (e) {
- if (_this.dom.resize || col.resizable === false)
- return;
-
- /* Store information about the mouse position */
- var $thTarget = e.target.nodeName.toUpperCase() == 'TH' ? _this.$(e.target) : _this.$(e.target).closest('TH');
- var offset = $thTarget.offset();
- var nLength = $thTarget.innerWidth();
-
- /* are we on the col border (if so, resize col) */
- if (Math.abs(e.pageX - Math.round(offset.left + nLength)) <= 5) {
- $thTarget.css({ 'cursor': 'col-resize' });
- } else
- $thTarget.css({ 'cursor': 'pointer' });
- });
-
- //Save the original width
- col._ColResize_sWidthOrig = col.sWidthOrig;
- col.initWidth = $th.width();
- col.minWidthOrig = col.minWidth;
-
- $th.on('dblclick.ColResize', function (e) {
- _this.onDblClick(e, $th, col);
- });
-
- $th.off('mousedown.ColReorder');
-
- // listen to mousedown event
- $th.on('mousedown.ColResize', function (e) {
- return _this.onMouseDown(e, col);
- });
- };
-
- ColResize.prototype.setupFixedHeader = function () {
- var fhSettings = this.settings.fixedHeader === true ? undefined : this.settings.fixedHeader;
-
- //If left or right option was set to true disable resizing for the first or last column
- if (this.$.isPlainObject(fhSettings)) {
- var columns = this.dt.settings.aoColumns;
- if (fhSettings.left === true)
- columns[0].resizable = false;
- if (fhSettings.right === true)
- columns[columns.length - 1].resizable = false;
- }
-
- this.dom.fixedHeader = new this.$.fn.dataTable.FixedHeader(this.dt.api, fhSettings);
- var origUpdateClones = this.dom.fixedHeader._fnUpdateClones;
- var that = this;
-
- //FixeHeader doesn't have any callback after updating the clones so we have to wrap the orig function
- this.dom.fixedHeader._fnUpdateClones = function () {
- origUpdateClones.apply(this, arguments);
- that.memorizeFixedHeaderNodes();
- };
-
- //As we missed the first call of _fnUpdateClones we have to call memorizeFixedHeaderNodes function manually
- this.memorizeFixedHeaderNodes();
- };
-
- ColResize.prototype.memorizeFixedHeaderNodes = function () {
- var _this = this;
- var fhSettings = this.dom.fixedHeader.fnGetSettings();
- var fhCache = fhSettings.aoCache;
- var i, col;
- for (i = 0; i < fhCache.length; i++) {
- var type = fhCache[i].sType;
- var propName;
- var selector;
- switch (type) {
- case 'fixedHeader':
- propName = 'fhTh';
- selector = 'thead>tr>th';
- this.dt.settings.fhTHead = fhCache[i].nNode;
- break;
- case 'fixedFooter':
- propName = 'fhTf';
- selector = 'thead>tr>th';
-
- //prepend a cloned thead to the floating footer table so that resizing will work correctly
- var tfoot = this.$(fhCache[i].nNode);
- var thead = this.$(this.dt.settings.nTHead).clone().css({ height: 0, visibility: 'hidden' });
- this.$('tr', thead).css('height', 0);
- this.$('tr>th', thead).css({
- 'height': 0,
- 'padding-bottom': 0,
- 'padding-top': 0,
- 'border-bottom-width': 0,
- 'border-top-width': 0,
- 'line-height': 0
- });
- tfoot.prepend(thead);
- this.$('tfoot>tr>th', tfoot).css('width', '');
- this.dt.settings.fhTFoot = fhCache[i].nNode;
- break;
- default:
- continue;
- }
-
- this.$(selector, fhCache[i].nNode).each(function (j, th) {
- col = _this.getVisibleColumn(j);
- col[propName] = th;
- });
- }
- };
-
- //zero based index
- ColResize.prototype.getVisibleColumn = function (idx) {
- var columns = this.dt.settings.aoColumns;
- var currVisColIdx = -1;
- for (var i = 0; i < columns.length; i++) {
- if (!columns[i].bVisible)
- continue;
- currVisColIdx++;
- if (currVisColIdx == idx)
- return columns[i];
- }
- return null;
- };
-
- ColResize.prototype.updateTableSize = function () {
- if (this.dom.scrollX && this.dom.scrollHeadTable.length)
- this.tableSize = this.dom.scrollHeadTable.width();
- else
- this.tableSize = -1;
- };
-
- ColResize.prototype.proportionallyColumnSizing = function () {
- var _this = this;
- var prevWidths = [], newWidths = [], prevWidth, newWidth, newTableWidth, prevTableWidth, moveLength, multiplier, cWidth, i, j, delay = 500, prevTotalColWidths = 0, currTotalColWidths, columnRestWidths = [], columns = this.dt.settings.aoColumns, bodyTableColumns = this.$('thead th', this.dom.scrollBodyTable), headTableColumns = this.$('thead th', this.dom.scrollHeadTable), footTableColumns = this.dom.scrollFootTable.length ? this.$('thead th', this.dom.scrollFootTable) : [], visColumns = [];
-
- for (i = 0; i < columns.length; i++) {
- if (!columns[i].bVisible)
- continue;
- visColumns.push(columns[i]);
- columnRestWidths.push(0); //set default value
- }
-
- for (i = 0; i < bodyTableColumns.length; i++) {
- cWidth = parseFloat(bodyTableColumns[i].style.width);
- prevTotalColWidths += cWidth;
- prevWidths.push(cWidth);
- }
-
- for (i = 0; i < bodyTableColumns.length; i++) {
- bodyTableColumns[i].style.width = '';
- }
-
- //Get the new table width calculated by the browser
- newTableWidth = parseFloat(this.dom.scrollBodyTable.css('width'));
-
- //Get the old table width
- prevTableWidth = this.dom.table.preWidth;
- moveLength = newTableWidth - prevTableWidth;
- if (moveLength == 0) {
- for (i = 0; i < bodyTableColumns.length; i++) {
- bodyTableColumns[i].style.width = prevWidths[i] + 'px';
- }
- return;
- }
-
- //var tot = 0;
- currTotalColWidths = prevTotalColWidths;
- for (i = 0; i < visColumns.length; i++) {
- //For each column calculate the new width
- prevWidth = prevWidths[i];
- multiplier = (+(prevWidth / prevTotalColWidths).toFixed(2));
-
- //tot += multiplier;
- newWidth = prevWidth + (moveLength * multiplier) + columnRestWidths[i];
- currTotalColWidths -= prevWidth;
-
- //Check whether the column can be resized to the new calculated value
- //if not, set it to the min or max width depends on the moveLength value
- if (!this.canResizeColumn(visColumns[i], newWidth)) {
- cWidth = moveLength > 0 ? this.getColumnMaxWidth(visColumns[i]) : this.getColumnMinWidth(visColumns[i]);
- var rest = newWidth - cWidth;
- newWidth = cWidth;
-
- for (j = (i + 1); j < visColumns.length; j++) {
- columnRestWidths[j] += rest * (+(visColumns[j] / currTotalColWidths).toFixed(2));
- }
- }
- newWidths.push(newWidth);
- }
-
- //Apply the calculated column widths to the headers cells
- var tablesWidth = this.dom.scrollBodyTable.outerWidth() + 'px';
- for (i = 0; i < headTableColumns.length; i++) {
- headTableColumns[i].style.width = newWidths[i] + 'px';
- }
- this.dom.scrollHeadTable.css('width', tablesWidth);
- this.dom.scrollHeadInner.css('width', tablesWidth);
-
- for (i = 0; i < bodyTableColumns.length; i++) {
- bodyTableColumns[i].style.width = newWidths[i] + 'px';
- }
-
- if (this.dom.scrollFootTable.length) {
- for (i = 0; i < footTableColumns.length; i++) {
- footTableColumns[i].style.width = newWidths[i] + 'px';
- }
- this.dom.scrollFootTable[0].style.width = tablesWidth;
- this.dom.scrollFootInner[0].style.width = tablesWidth;
- }
-
- //console.log('moveLength: ' + moveLength + ' multiplier: ' + tot);
- //console.log(newWidths);
- this.dom.table.preWidth = newTableWidth;
-
- //Call afterResizing function after the window stops resizing
- if (this.dom.winResizeTimer)
- clearTimeout(this.dom.winResizeTimer);
- this.dom.winResizeTimer = setTimeout(function () {
- _this.afterResizing();
- _this.dom.winResizeTimer = null;
- }, delay);
- };
-
- ColResize.prototype.getColumnIndex = function (col) {
- //Get the current column position
- var colIdx = -1;
- for (var i = 0; i < this.dt.settings.aoColumns.length; i++) {
- if (this.dt.settings.aoColumns[i] === col) {
- colIdx = i;
- break;
- }
- }
- return colIdx;
- };
-
- ColResize.prototype.getColumnEvent = function (th, type, ns) {
- var event;
- var thEvents = this.$._data(th, "events");
- this.$.each(thEvents[type] || [], function (idx, handler) {
- if (handler.namespace === ns)
- event = handler;
- });
- return event;
- };
-
- ColResize.prototype.loadState = function (data) {
- var _this = this;
- var i, col;
-
- var onInit = function () {
- if (_this.settings.fixedLayout) {
- _this.setTablesLayout('fixed');
- } else {
- _this.setTablesLayout('auto');
- }
- if (!data.colResize) {
- if (_this.dt.settings.oFeatures.bAutoWidthOrig)
- _this.dt.settings.oFeatures.bAutoWidth = true;
- else if (_this.dt.settings.sTableWidthOrig)
- _this.$(_this.dt.settings.nTable).width(_this.dt.settings.sTableWidthOrig);
-
- for (i = 0; i < _this.dt.settings.aoColumns.length; i++) {
- col = _this.dt.settings.aoColumns[i];
- if (col._ColResize_sWidthOrig) {
- col.sWidthOrig = col._ColResize_sWidthOrig;
- }
- }
- _this.dom.origState = true;
- } else {
- var columns = data.colResize.columns || [];
- var wMap = {};
-
- if (_this.dt.settings.oFeatures.bAutoWidth) {
- _this.dt.settings.oFeatures.bAutoWidth = false;
- }
-
- if (_this.dom.scrollX && data.colResize.tableSize > 0) {
- _this.dom.scrollHeadTable.width(data.colResize.tableSize);
- _this.dom.scrollHeadInner.width(data.colResize.tableSize);
- _this.dom.scrollBodyTable.width(data.colResize.tableSize);
- _this.dom.scrollFootTable.width(data.colResize.tableSize);
- }
-
- for (i = 0; i < columns.length; i++) {
- wMap[i] = columns[i];
- }
- for (i = 0; i < _this.dt.settings.aoColumns.length; i++) {
- col = _this.dt.settings.aoColumns[i];
- var idx = col._ColReorder_iOrigCol != null ? col._ColReorder_iOrigCol : i;
- col.sWidth = wMap[idx];
- col.sWidthOrig = wMap[idx];
- col.nTh.style.width = columns[i];
-
- //Check for FixedHeader
- if (col.fhTh)
- col.fhTh.style.width = columns[i];
- if (col.fhTf)
- col.fhTf.style.width = columns[i];
- }
- _this.dom.origState = false;
- }
-
- _this.dt.api.columns.adjust();
- if (_this.dom.scrollX || _this.dom.scrollY)
- _this.dt.api.draw(false);
- };
-
- if (this.initialized) {
- onInit();
- return;
- }
- this.dt.settings.oApi._fnCallbackReg(this.dt.settings, 'colResizeInitCompleted', function () {
- onInit();
- }, "ColResize_Init");
- };
-
- ColResize.prototype.saveState = function (data) {
- if (!this.dt.settings._bInitComplete) {
- var oData = this.dt.settings.fnStateLoadCallback.call(this.dt.settings.oInstance, this.dt.settings);
- if (oData && oData.colResize)
- data.colResize = oData.colResize;
- return;
- }
- this.updateTableSize();
- data.colResize = {
- columns: [],
- tableSize: this.tableSize
- };
-
- data.colResize.columns.length = this.dt.settings.aoColumns.length;
- for (var i = 0; i < this.dt.settings.aoColumns.length; i++) {
- var col = this.dt.settings.aoColumns[i];
- var idx = col._ColReorder_iOrigCol != null ? col._ColReorder_iOrigCol : i;
- data.colResize.columns[idx] = col.sWidth;
- }
- };
-
- ColResize.prototype.registerCallbacks = function () {
- var _this = this;
- /* State saving */
- this.dt.settings.oApi._fnCallbackReg(this.dt.settings, 'aoStateSaveParams', function (oS, oData) {
- _this.saveState(oData);
- }, "ColResize_StateSave");
-
- /* State loading */
- this.dt.settings.oApi._fnCallbackReg(this.dt.settings, 'aoStateLoaded', function (oS, oData) {
- _this.loadState(oData);
- }, "ColResize_StateLoad");
-
- if (this.$.fn.DataTable.models.oSettings.remoteStateInitCompleted !== undefined) {
- //Integrate with remote state
- this.dt.settings.oApi._fnCallbackReg(this.dt.settings, 'remoteStateLoadedParams', function (s, data) {
- _this.loadState(data);
- }, "ColResize_StateLoad");
- this.dt.settings.oApi._fnCallbackReg(this.dt.settings, 'remoteStateSaveParams', function (s, data) {
- _this.saveState(data);
- }, "ColResize_StateSave");
- }
- };
-
- ColResize.prototype.setTablesLayout = function (value) {
- if (this.dom.scrollX || this.dom.scrollY) {
- this.dom.scrollHeadTable.css('table-layout', value);
- this.dom.scrollBodyTable.css('table-layout', value);
- this.dom.scrollFootTable.css('table-layout', value);
- } else {
- this.$(this.dt.settings.nTable).css('table-layout', value);
- }
- this.dom.fixedLayout = value == 'fixed';
- };
-
- //only when scrollX or scrollY are enabled
- ColResize.prototype.fixFootAndHeadTables = function (e) {
- var _this = this;
- if (e != null && e.target !== this.dt.settings.nTable)
- return;
-
- if (this.dom.scrollFootTable.length) {
- this.$('thead', this.dom.scrollFootTable).remove();
- this.dom.scrollFootTable.prepend(this.$('thead', this.dom.scrollBodyTable).clone());
- }
- this.$('tfoot', this.dom.scrollHeadTable).remove();
- this.dom.scrollHeadTable.append(this.$('tfoot', this.dom.scrollBodyTable).clone());
- var removeFooterWidth = function (table) {
- _this.$('tfoot>tr>th', table).each(function (i, th) {
- _this.$(th).css('width', '');
- });
- };
-
- //Remove all tfoot headers widths
- removeFooterWidth(this.dom.scrollFootTable);
- removeFooterWidth(this.dom.scrollBodyTable);
- removeFooterWidth(this.dom.scrollHeadTable);
- };
-
- ColResize.prototype.onDraw = function (e) {
- if (e != null && e.target !== this.dt.settings.nTable)
- return;
- if (this.dom.scrollX || this.dom.scrollY) {
- this.fixFootAndHeadTables();
-
- //Fix the header table padding
- if (this.dt.settings._bInitComplete) {
- var borderWidth = this.dom.scrollHeadTable.outerWidth() - this.dom.scrollHeadTable.innerWidth();
- var paddingType = this.dt.settings.oBrowser.bScrollbarLeft ? 'padding-left' : 'padding-right';
- var paddingVal = parseFloat(this.dom.scrollHeadInner.css(paddingType));
- this.dom.scrollHeadInner.css(paddingType, (paddingVal + borderWidth) + 'px');
- }
- }
-
- var autoWidthTypes = [];
- if (this.settings.dblClick == 'autoMinFit' || !this.settings.fixedLayout)
- autoWidthTypes.push('autoMinWidth');
- if (this.settings.dblClick == 'autoFit')
- autoWidthTypes.push('autoWidth');
-
- //Call this only once so that the table will be cloned only one time
- if (autoWidthTypes.length)
- this.updateColumnsAutoWidth(autoWidthTypes);
-
- if (!this.settings.fixedLayout) {
- var columns = this.dt.settings.aoColumns;
- var i;
- for (i = 0; i < columns.length; i++) {
- if (!columns[i].bVisible)
- continue;
- columns[i].minWidth = Math.max((columns[i].minWidthOrig || 0), columns[i].autoMinWidth);
-
- //We have to resize if the current column width if is less that the column minWidth
- if (this.$(columns[i].nTh).width() < columns[i].minWidth)
- this.resize(columns[i], columns[i].minWidth);
- }
- } else {
- if (!this.dom.fixedLayout) {
- this.setTablesLayout('fixed');
- this.afterResizing();
- }
- }
- };
-
- ColResize.prototype.getTableAutoColWidths = function (table, types) {
- var widths = {}, i, colIdx;
- var $table = this.$(table);
- for (i = 0; i < types.length; i++) {
- widths[types[i]] = [];
- }
- if (!types.length || !$table.length)
- return widths;
-
- var clnTable = $table.clone().removeAttr('id').css('table-layout', 'auto');
-
- // Remove any assigned widths from the footer (from scrolling)
- clnTable.find('thead th, tfoot th, tfoot td').css('width', '');
- var container = this.$('<div />').css({
- 'position': 'absolute',
- 'width': '9999px',
- 'height': '9999px'
- });
- container.append(clnTable);
- this.$(this.dt.settings.nTableWrapper).append(container);
-
- var headerCols = this.$('thead>tr>th', clnTable);
-
- for (i = 0; i < types.length; i++) {
- var type = types[i];
- var fn = '';
- switch (type) {
- case 'autoMinWidth':
- clnTable.css('width', '1px');
- fn = 'width';
- break;
- case 'autoWidth':
- clnTable.css('width', 'auto');
- fn = 'outerWidth';
- break;
- default:
- throw 'Invalid widthType ' + type;
- }
- for (colIdx = 0; colIdx < headerCols.length; colIdx++) {
- widths[type].push(this.$(headerCols[colIdx])[fn]());
- }
- }
-
- container.remove();
- return widths;
- };
-
- ColResize.prototype.updateColumnsAutoWidth = function (types) {
- var columns = this.dt.settings.aoColumns;
- var i, j, colLen, type, visColIdx = 0;
- var widths = {};
- if (this.dom.scrollX || this.dom.scrollY) {
- var headWidths = this.getTableAutoColWidths(this.dom.scrollHeadTable, types);
- var bodyWidths = this.getTableAutoColWidths(this.dom.scrollBodyTable, types);
- var footWidths = this.getTableAutoColWidths(this.dom.scrollFootTable, types);
-
- for (i = 0; i < types.length; i++) {
- type = types[i];
- widths[type] = [];
- footWidths[type].length = headWidths[type].length;
- colLen = headWidths[type].length;
- for (j = 0; j < colLen; j++) {
- widths[type].push(Math.max(headWidths[type][j], bodyWidths[type][j], (footWidths[type][j] || 0)));
- }
- }
- } else {
- widths = this.getTableAutoColWidths(this.dt.settings.nTable, types);
- }
-
- for (i = 0; i < columns.length; i++) {
- if (!columns[i].bVisible)
- continue;
- for (j = 0; j < types.length; j++) {
- type = types[j];
- columns[i][type] = widths[type][visColIdx];
- }
- visColIdx++;
- }
- };
-
- ColResize.prototype.overrideClickHander = function (col, $th) {
- var dtClickEvent = this.getColumnEvent($th.get(0), 'click', 'DT');
-
- //Remove the DataTables event so that ordering will not occur
- if (dtClickEvent) {
- $th.off('click.DT');
- this.$(document).one('click.ColResize', function (e) {
- $th.on('click.DT', dtClickEvent.handler);
- });
- }
- };
-
- ColResize.prototype.onDblClick = function (e, $th, col) {
- if (e.target !== $th.get(0))
- return;
- if ($th.css('cursor') != 'col-resize')
- return;
-
- var width;
- switch (this.settings.dblClick) {
- case 'autoMinFit':
- width = col.autoMinWidth;
- break;
- case 'autoFit':
- width = col.autoWidth;
- break;
- default:
- width = col.initWidth;
- }
- this.resize(col, width);
- };
-
- ColResize.prototype.onMouseDown = function (e, col) {
- var _this = this;
- if (e.target !== col.nTh && e.target !== col.fhTh)
- return true;
-
- var $th = e.target === col.nTh ? this.$(col.nTh) : this.$(col.fhTh);
-
- if ($th.css('cursor') != 'col-resize' || col.resizable === false) {
- var colReorder = this.dt.settings._colReorder;
- if (colReorder) {
- colReorder._fnMouseDown.call(colReorder, e, e.target); //Here we fix the e.preventDefault() in ColReorder so that we can have working inputs in header
- }
- return true;
- }
- this.dom.mouse.startX = e.pageX;
- this.dom.mouse.prevX = e.pageX;
- this.dom.mouse.startWidth = $th.width();
- this.dom.resize = true;
-
- this.beforeResizing(col);
-
- /* Add event handlers to the document */
- this.$(document).on('mousemove.ColResize', function (event) {
- _this.onMouseMove(event, col);
- });
- this.overrideClickHander(col, $th);
- this.$(document).one('mouseup.ColResize', function (event) {
- _this.onMouseUp(event, col);
- });
-
- return false;
- };
-
- ColResize.prototype.resize = function (col, width) {
- var colWidth = this.$(col.nTh).width();
- var moveLength = width - this.$(col.nTh).width();
- this.beforeResizing(col);
- var resized = this.resizeColumn(col, colWidth, moveLength, moveLength);
- this.afterResizing();
- return resized;
- };
-
- ColResize.prototype.beforeResizing = function (col) {
- //if (this.settings.fixedLayout && !this.dom.fixedLayout)
- // this.setTablesLayout('fixed');
- };
-
- ColResize.prototype.afterResizing = function () {
- var i;
- var columns = this.dt.settings.aoColumns;
- for (i = 0; i < columns.length; i++) {
- if (!columns[i].bVisible)
- continue;
- columns[i].sWidth = this.$(columns[i].nTh).css('width');
- }
-
- //Update the internal storage of the table's width (in case we changed it because the user resized some column and scrollX was enabled
- this.updateTableSize();
-
- //Save the state
- this.dt.settings.oInstance.oApi._fnSaveState(this.dt.settings);
- this.dom.origState = false;
- };
-
- ColResize.prototype.onMouseUp = function (e, col) {
- this.$(document).off('mousemove.ColResize');
- if (!this.dom.resize)
- return;
- this.dom.resize = false;
- this.afterResizing();
- };
-
- ColResize.prototype.canResizeColumn = function (col, newWidth) {
- return (col.resizable === undefined || col.resizable) && this.settings.minWidth <= newWidth && (!col.minWidth || col.minWidth <= newWidth) && (!this.settings.maxWidth || this.settings.maxWidth >= newWidth) && (!col.maxWidth || col.maxWidth >= newWidth);
- };
-
- ColResize.prototype.getColumnMaxWidth = function (col) {
- return col.maxWidth ? col.maxWidth : this.settings.maxWidth;
- };
-
- ColResize.prototype.getColumnMinWidth = function (col) {
- return col.minWidth ? col.minWidth : this.settings.minWidth;
- };
-
- ColResize.prototype.getPrevResizableColumnIdx = function (col, moveLength) {
- var columns = this.dt.settings.aoColumns;
- var colIdx = ColResizeHelper.indexOf(columns, col);
- for (var i = colIdx; i >= 0; i--) {
- if (!columns[i].bVisible)
- continue;
- var newWidth = this.$(columns[i].nTh).width() + moveLength;
- if (this.canResizeColumn(columns[i], newWidth))
- return i;
- }
- return -1;
- };
-
- ColResize.prototype.getNextResizableColumnIdx = function (col, moveLength) {
- var columns = this.dt.settings.aoColumns;
- var colIdx = ColResizeHelper.indexOf(columns, col);
- for (var i = (colIdx + 1); i < columns.length; i++) {
- if (!columns[i].bVisible)
- continue;
- var newWidth = this.$(columns[i].nTh).width() - moveLength;
- if (this.canResizeColumn(columns[i], newWidth))
- return i;
- }
- return -1;
- };
-
- ColResize.prototype.resizeColumn = function (col, startWidth, moveLength, lastMoveLength) {
- if (moveLength == 0 || lastMoveLength == 0 || col.resizable === false)
- return false;
- var i;
- var columns = this.dt.settings.aoColumns;
- var headCol = this.$(col.nTh);
- var headColNext = headCol.next();
- var colIdx = this.getColumnIndex(col);
- var thWidth = startWidth + moveLength;
- var thNextWidth;
- var nextColIdx;
-
- if (!this.dom.scrollX) {
- if (lastMoveLength < 0) {
- thWidth = headColNext.width() - lastMoveLength;
- nextColIdx = this.getPrevResizableColumnIdx(col, lastMoveLength);
- if (nextColIdx < 0)
- return false;
- headCol = headColNext;
- colIdx = colIdx + 1;
- headColNext = this.$(columns[nextColIdx].nTh);
- thNextWidth = headColNext.width() + lastMoveLength;
- } else {
- thWidth = headCol.width() + lastMoveLength;
- nextColIdx = this.getNextResizableColumnIdx(col, lastMoveLength);
-
- //If there is no columns that can be shrinked dont resize anymore
- if (nextColIdx < 0)
- return false;
- headColNext = this.$(columns[nextColIdx].nTh);
- thNextWidth = headColNext.width() - lastMoveLength;
-
- if ((this.settings.maxWidth && this.settings.maxWidth < thWidth) || col.maxWidth && col.maxWidth < thWidth)
- return false;
- }
- if (!this.canResizeColumn(columns[nextColIdx], thNextWidth) || !this.canResizeColumn(columns[colIdx], thWidth))
- return false;
- headColNext.width(thNextWidth);
-
- //If fixed header is present we have to resize the cloned column too
- if (this.dom.fixedHeader) {
- this.$(columns[nextColIdx].fhTh).width(thNextWidth);
- this.$(columns[colIdx].fhTh).width(thWidth);
-
- //If fixedfooter was enabled resize that too
- if (columns[nextColIdx].fhTf) {
- this.$(columns[nextColIdx].fhTf).width(thNextWidth);
- this.$(columns[colIdx].fhTf).width(thWidth);
- }
- }
- } else {
- if (!this.canResizeColumn(col, thWidth))
- return false;
- var tSize = this.tableSize + moveLength + 'px';
- this.dom.scrollHeadInner.css('width', tSize);
- this.dom.scrollHeadTable.css('width', tSize);
- this.dom.scrollBodyTable.css('width', tSize);
- this.dom.scrollFootTable.css('width', tSize);
- }
- headCol.width(thWidth);
-
- //scrollX or scrollY enabled
- if (this.dom.scrollBody.length) {
- var colDomIdx = 0;
- for (i = 0; i < this.dt.settings.aoColumns.length && i != colIdx; i++) {
- if (this.dt.settings.aoColumns[i].bVisible)
- colDomIdx++;
- }
-
- //Get the table
- var bodyCol = this.$('thead>tr>th:nth(' + colDomIdx + ')', this.dom.scrollBodyTable);
- var footCol = this.$('thead>tr>th:nth(' + colDomIdx + ')', this.dom.scrollFootTable);
-
- //This will happen only when scrollY is used without scrollX
- if (!this.dom.scrollX) {
- var nextColDomIdx = 0;
- for (i = 0; i < this.dt.settings.aoColumns.length && i != nextColIdx; i++) {
- if (this.dt.settings.aoColumns[i].bVisible)
- nextColDomIdx++;
- }
- var bodyColNext = this.$('thead>tr>th:nth(' + nextColDomIdx + ')', this.dom.scrollBodyTable);
- var footColNext = this.$('thead>tr>th:nth(' + nextColDomIdx + ')', this.dom.scrollFootTable);
-
- bodyColNext.width(thNextWidth);
- if (thWidth > 0)
- bodyCol.width(thWidth);
-
- footColNext.width(thNextWidth);
- if (thWidth > 0)
- footCol.width(thWidth);
- }
-
- //Resize the table and the column
- if (this.dom.scrollX && thWidth > 0) {
- bodyCol.width(thWidth);
- footCol.width(thWidth);
- }
- }
- return true;
- };
-
- ColResize.prototype.onMouseMove = function (e, col) {
- var moveLength = e.pageX - this.dom.mouse.startX;
- var lastMoveLength = e.pageX - this.dom.mouse.prevX;
- this.resizeColumn(col, this.dom.mouse.startWidth, moveLength, lastMoveLength);
- this.dom.mouse.prevX = e.pageX;
- };
-
- ColResize.prototype.destroy = function () {
- };
- ColResize.defaultSettings = {
- minWidth: 1,
- maxWidth: null,
- fixedLayout: true,
- fixedHeader: null,
- dblClick: 'initWidth'
- };
- return ColResize;
- })();
- dt.ColResize = ColResize;
-
- var ColResizeHelper = (function () {
- function ColResizeHelper() {
- }
- ColResizeHelper.indexOf = function (arr, item, equalFun) {
- if (typeof equalFun === "undefined") { equalFun = null; }
- for (var i = 0; i < arr.length; i++) {
- if (equalFun) {
- if (equalFun(arr[i], item))
- return i;
- } else if (arr[i] === item)
- return i;
- }
- return -1;
- };
- return ColResizeHelper;
- })();
- dt.ColResizeHelper = ColResizeHelper;
-})(dt || (dt = {}));
-
-(function ($, window, document, undefined) {
- //Register events
- $.fn.DataTable.models.oSettings.colResizeInitCompleted = [];
-
- //Register api function
- $.fn.DataTable.Api.register('colResize.init()', function (settings) {
- var colResize = new dt.ColResize($, this, settings);
- if (this.settings()[0]._bInitComplete)
- colResize.initialize();
- else
- this.one('init.dt', function () {
- colResize.initialize();
- });
- return null;
- });
-
- $.fn.DataTable.Api.register('column().resize()', function (width) {
- var oSettings = this.settings()[0];
- var colResize = oSettings.colResize;
- return colResize.resize(oSettings.aoColumns[this[0][0]], width);
- });
-
- //Add as feature
- $.fn.dataTable.ext.feature.push({
- "fnInit": function (oSettings) {
- return oSettings.oInstance.api().colResize.init(oSettings.oInit.colResize);
- },
- "cFeature": "J",
- "sFeature": "ColResize"
- });
-}(jQuery, window, document, undefined)); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.fixedHeader.css b/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.fixedHeader.css
deleted file mode 100644
index 4001ab12..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.fixedHeader.css
+++ /dev/null
@@ -1,4 +0,0 @@
-div.FixedHeader_Cloned th,
-div.FixedHeader_Cloned td {
- background-color: white !important;
-}
diff --git a/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.fixedHeader.min.js b/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.fixedHeader.min.js
deleted file mode 100644
index e8d19608..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/extensions/dataTables.fixedHeader.min.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*!
- FixedHeader 3.0.0
- ©2009-2015 SpryMedia Ltd - datatables.net/license
-*/
-(function(h,j){var g=function(e,i){var g=0,f=function(b,a){if(!(this instanceof f))throw"FixedHeader must be initialised with the 'new' keyword.";!0===a&&(a={});b=new i.Api(b);this.c=e.extend(!0,{},f.defaults,a);this.s={dt:b,position:{theadTop:0,tbodyTop:0,tfootTop:0,tfootBottom:0,width:0,left:0,tfootHeight:0,theadHeight:0,windowHeight:e(h).height(),visible:!0},headerMode:null,footerMode:null,namespace:".dtfc"+g++};this.dom={floatingHeader:null,thead:e(b.table().header()),tbody:e(b.table().body()),
-tfoot:e(b.table().footer()),header:{host:null,floating:null,placeholder:null},footer:{host:null,floating:null,placeholder:null}};this.dom.header.host=this.dom.thead.parent();this.dom.footer.host=this.dom.tfoot.parent();var c=b.settings()[0];if(c._fixedHeader)throw"FixedHeader already initialised on table "+c.nTable.id;c._fixedHeader=this;this._constructor()};f.prototype={update:function(){this._positions();this._scroll(!0)},_constructor:function(){var b=this,a=this.s.dt;e(h).on("scroll"+this.s.namespace,
-function(){b._scroll()}).on("resize"+this.s.namespace,function(){b.s.position.windowHeight=e(h).height();b._positions();b._scroll(!0)});a.on("column-reorder.dt.dtfc column-visibility.dt.dtfc",function(){b._positions();b._scroll(!0)}).on("draw.dtfc",function(){b._positions();b._scroll()});a.on("destroy.dtfc",function(){a.off(".dtfc");e(h).off(this.s.namespace)});this._positions();this._scroll()},_clone:function(b,a){var c=this.s.dt,d=this.dom[b],k="header"===b?this.dom.thead:this.dom.tfoot;!a&&d.floating?
-d.floating.removeClass("fixedHeader-floating fixedHeader-locked"):(d.floating&&(d.placeholder.remove(),d.floating.children().detach(),d.floating.remove()),d.floating=e(c.table().node().cloneNode(!1)).removeAttr("id").append(k).appendTo("body"),d.placeholder=k.clone(!1),d.host.append(d.placeholder),"footer"===b&&this._footerMatch(d.placeholder,d.floating))},_footerMatch:function(b,a){var c=function(d){var c=e(d,b).map(function(){return e(this).width()}).toArray();e(d,a).each(function(a){e(this).width(c[a])})};
-c("th");c("td")},_footerUnsize:function(){var b=this.dom.footer.floating;b&&e("th, td",b).css("width","")},_modeChange:function(b,a,c){var d=this.dom[a],e=this.s.position;"in-place"===b?(d.placeholder&&(d.placeholder.remove(),d.placeholder=null),d.host.append("header"===a?this.dom.thead:this.dom.tfoot),d.floating&&(d.floating.remove(),d.floating=null),"footer"===a&&this._footerUnsize()):"in"===b?(this._clone(a,c),d.floating.addClass("fixedHeader-floating").css("header"===a?"top":"bottom",this.c[a+
-"Offset"]).css("left",e.left+"px").css("width",e.width+"px"),"footer"===a&&d.floating.css("top","")):"below"===b?(this._clone(a,c),d.floating.addClass("fixedHeader-locked").css("top",e.tfootTop-e.theadHeight).css("left",e.left+"px").css("width",e.width+"px")):"above"===b&&(this._clone(a,c),d.floating.addClass("fixedHeader-locked").css("top",e.tbodyTop).css("left",e.left+"px").css("width",e.width+"px"));this.s[a+"Mode"]=b},_positions:function(){var b=this.s.dt.table(),a=this.s.position,c=this.dom,
-b=e(b.node()),d=b.children("thead"),f=b.children("tfoot"),c=c.tbody;a.visible=b.is(":visible");a.width=b.outerWidth();a.left=b.offset().left;a.theadTop=d.offset().top;a.tbodyTop=c.offset().top;a.theadHeight=a.tbodyTop-a.theadTop;f.length?(a.tfootTop=f.offset().top,a.tfootBottom=a.tfootTop+f.outerHeight(),a.tfootHeight=a.tfootBottom-a.tfootTop):(a.tfootTop=a.tbodyTop+c.outerHeight(),a.tfootBottom=a.tfootTop,a.tfootHeight=a.tfootTop)},_scroll:function(b){var a=e(j).scrollTop(),c=this.s.position,d;this.c.header&&
-(d=!c.visible||a<=c.theadTop-this.c.headerOffset?"in-place":a<=c.tfootTop-c.theadHeight-this.c.headerOffset?"in":"below",(b||d!==this.s.headerMode)&&this._modeChange(d,"header",b));this.c.footer&&this.dom.tfoot.length&&(a=!c.visible||a+c.windowHeight>=c.tfootBottom+this.c.footerOffset?"in-place":c.windowHeight+a>c.tbodyTop+c.tfootHeight+this.c.footerOffset?"in":"above",(b||a!==this.s.footerMode)&&this._modeChange(a,"footer",b))}};f.version="3.0.0";f.defaults={header:!0,footer:!1,headerOffset:0,footerOffset:0};
-e.fn.dataTable.FixedHeader=f;e.fn.DataTable.FixedHeader=f;e(j).on("init.dt.dtb",function(b,a){if("dt"===b.namespace){var c=a.oInit.fixedHeader||i.defaults.fixedHeader;c&&!a._buttons&&new f(a,c)}});i.Api.register("fixedHeader()",function(){});i.Api.register("fixedHeader.adjust()",function(){return this.iterator("table",function(b){(b=b._fixedHeader)&&b.update()})});return f};"function"===typeof define&&define.amd?define(["jquery","datatables"],g):"object"===typeof exports?g(require("jquery"),require("datatables")):
-jQuery&&!jQuery.fn.dataTable.FixedHeader&&g(jQuery,jQuery.fn.dataTable)})(window,document);
diff --git a/wqflask/wqflask/static/new/packages/DataTables/extensions/scroller.dataTables.min.css b/wqflask/wqflask/static/new/packages/DataTables/extensions/scroller.dataTables.min.css
deleted file mode 100644
index 284cb376..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/extensions/scroller.dataTables.min.css
+++ /dev/null
@@ -1 +0,0 @@
-div.DTS{display:block !important}div.DTS tbody th,div.DTS tbody td{white-space:nowrap}div.DTS div.DTS_Loading{z-index:1}div.DTS div.dataTables_scrollBody{background:repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, #fff 10px, #fff 20px)}div.DTS div.dataTables_scrollBody table{z-index:2}div.DTS div.dataTables_paginate,div.DTS div.dataTables_length{display:none} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/images/Sorting icons.psd b/wqflask/wqflask/static/new/packages/DataTables/images/Sorting icons.psd
deleted file mode 100644
index 53b2e068..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/images/Sorting icons.psd
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/DataTables/images/back_disabled.png b/wqflask/wqflask/static/new/packages/DataTables/images/back_disabled.png
deleted file mode 100644
index 881de797..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/images/back_disabled.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/DataTables/images/back_enabled.png b/wqflask/wqflask/static/new/packages/DataTables/images/back_enabled.png
deleted file mode 100644
index c608682b..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/images/back_enabled.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/DataTables/images/back_enabled_hover.png b/wqflask/wqflask/static/new/packages/DataTables/images/back_enabled_hover.png
deleted file mode 100644
index d300f106..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/images/back_enabled_hover.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/DataTables/images/favicon.ico b/wqflask/wqflask/static/new/packages/DataTables/images/favicon.ico
deleted file mode 100644
index 6eeaa2a0..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/images/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/DataTables/images/forward_disabled.png b/wqflask/wqflask/static/new/packages/DataTables/images/forward_disabled.png
deleted file mode 100644
index 6a6ded7d..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/images/forward_disabled.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/DataTables/images/forward_enabled.png b/wqflask/wqflask/static/new/packages/DataTables/images/forward_enabled.png
deleted file mode 100644
index a4e6b538..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/images/forward_enabled.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/DataTables/images/forward_enabled_hover.png b/wqflask/wqflask/static/new/packages/DataTables/images/forward_enabled_hover.png
deleted file mode 100644
index fc46c5eb..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/images/forward_enabled_hover.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/DataTables/images/sort_asc.png b/wqflask/wqflask/static/new/packages/DataTables/images/sort_asc.png
deleted file mode 100644
index a88d7975..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/images/sort_asc.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/DataTables/images/sort_asc_disabled.png b/wqflask/wqflask/static/new/packages/DataTables/images/sort_asc_disabled.png
deleted file mode 100644
index 4e144cf0..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/images/sort_asc_disabled.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/DataTables/images/sort_both.png b/wqflask/wqflask/static/new/packages/DataTables/images/sort_both.png
deleted file mode 100644
index 18670406..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/images/sort_both.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/DataTables/images/sort_desc.png b/wqflask/wqflask/static/new/packages/DataTables/images/sort_desc.png
deleted file mode 100644
index def071ed..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/images/sort_desc.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/DataTables/images/sort_desc_disabled.png b/wqflask/wqflask/static/new/packages/DataTables/images/sort_desc_disabled.png
deleted file mode 100644
index 7824973c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/images/sort_desc_disabled.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/DataTables/js/dataTables.formattedNumbers.js b/wqflask/wqflask/static/new/packages/DataTables/js/dataTables.formattedNumbers.js
deleted file mode 100644
index 7795b491..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/js/dataTables.formattedNumbers.js
+++ /dev/null
@@ -1,14 +0,0 @@
-jQuery.extend( jQuery.fn.dataTableExt.oSort, {
- "formatted-num-pre": function ( a ) {
- a = (a === "-" || a === "") ? 0 : a.replace( /[^\d\-\.]/g, "" );
- return parseFloat( a );
- },
-
- "formatted-num-asc": function ( a, b ) {
- return a - b;
- },
-
- "formatted-num-desc": function ( a, b ) {
- return b - a;
- }
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/js/dataTables.naturalSort.js b/wqflask/wqflask/static/new/packages/DataTables/js/dataTables.naturalSort.js
deleted file mode 100644
index e96c0af3..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/js/dataTables.naturalSort.js
+++ /dev/null
@@ -1,68 +0,0 @@
-(function() {
-
-/*
- * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license
- * Author: Jim Palmer (based on chunking idea from Dave Koelle)
- * Contributors: Mike Grier (mgrier.com), Clint Priest, Kyle Adams, guillermo
- * See: http://js-naturalsort.googlecode.com/svn/trunk/naturalSort.js
- */
-function naturalSort (a, b) {
- var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi,
- sre = /(^[ ]*|[ ]*$)/g,
- dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,
- hre = /^0x[0-9a-f]+$/i,
- ore = /^0/,
- // convert all to strings and trim()
- x = a.toString().replace(sre, '') || '',
- y = b.toString().replace(sre, '') || '',
- // chunk/tokenize
- xN = x.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
- yN = y.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
- // numeric, hex or date detection
- xD = parseInt(x.match(hre)) || (xN.length != 1 && x.match(dre) && Date.parse(x)),
- yD = parseInt(y.match(hre)) || xD && y.match(dre) && Date.parse(y) || null;
-
- // first try and sort Hex codes or Dates
- if (yD)
- if ( xD < yD ) return -1;
- else if ( xD > yD ) return 1;
-
- // natural sorting through split numeric strings and default strings
- for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {
- // find floats not starting with '0', string or 0 if not defined (Clint Priest)
- var oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;
- var oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;
- // handle numeric vs string comparison - number < string - (Kyle Adams)
- if (isNaN(oFxNcL) !== isNaN(oFyNcL)) return (isNaN(oFxNcL)) ? 1 : -1;
- // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'
- else if (typeof oFxNcL !== typeof oFyNcL) {
- oFxNcL += '';
- oFyNcL += '';
- }
- if (oFxNcL < oFyNcL) return -1;
- if (oFxNcL > oFyNcL) return 1;
- }
-
- return 0;
-}
-
-jQuery.extend( jQuery.fn.dataTableExt.oSort, {
- "natural-asc": function ( a, b ) {
- // first check if null or n/a
- if (a == "N/A" || a == "NA" || a == "" || a == "--") return 1;
- else if (b == "N/A" || b == "NA" || b == "" || b == "--") return -1;
- else {
- return naturalSort(a,b);
- }
- },
-
- "natural-desc": function ( a, b ) {
- if (a == "N/A" || a == "NA" || a == "" || a == "--") return 1;
- else if (b == "N/A" || b == "NA" || b == "" || b == "--") return -1;
- else {
- return naturalSort(a,b) * -1;
- }
- }
-} );
-
-}()); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/js/dataTables.scientific.js b/wqflask/wqflask/static/new/packages/DataTables/js/dataTables.scientific.js
deleted file mode 100644
index 82c55fda..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/js/dataTables.scientific.js
+++ /dev/null
@@ -1,13 +0,0 @@
-jQuery.extend( jQuery.fn.dataTableExt.oSort, {
- "scientific-pre": function ( a ) {
- return parseFloat(a);
- },
-
- "scientific-asc": function ( a, b ) {
- return ((a < b) ? -1 : ((a > b) ? 1 : 0));
- },
-
- "scientific-desc": function ( a, b ) {
- return ((a < b) ? 1 : ((a > b) ? -1 : 0));
- }
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/js/jquery.dataTables.js b/wqflask/wqflask/static/new/packages/DataTables/js/jquery.dataTables.js
deleted file mode 100644
index 5b032aee..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/js/jquery.dataTables.js
+++ /dev/null
@@ -1,15278 +0,0 @@
-/*! DataTables 1.10.12
- * ©2008-2015 SpryMedia Ltd - datatables.net/license
- */
-
-/**
- * @summary DataTables
- * @description Paginate, search and order HTML tables
- * @version 1.10.12
- * @file jquery.dataTables.js
- * @author SpryMedia Ltd (www.sprymedia.co.uk)
- * @contact www.sprymedia.co.uk/contact
- * @copyright Copyright 2008-2015 SpryMedia Ltd.
- *
- * This source file is free software, available under the following license:
- * MIT license - http://datatables.net/license
- *
- * This source file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
- *
- * For details please refer to: http://www.datatables.net
- */
-
-/*jslint evil: true, undef: true, browser: true */
-/*globals $,require,jQuery,define,_selector_run,_selector_opts,_selector_first,_selector_row_indexes,_ext,_Api,_api_register,_api_registerPlural,_re_new_lines,_re_html,_re_formatted_numeric,_re_escape_regex,_empty,_intVal,_numToDecimal,_isNumber,_isHtml,_htmlNumeric,_pluck,_pluck_order,_range,_stripHtml,_unique,_fnBuildAjax,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnAjaxDataSrc,_fnAddColumn,_fnColumnOptions,_fnAdjustColumnSizing,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnVisbleColumns,_fnGetColumns,_fnColumnTypes,_fnApplyColumnDefs,_fnHungarianMap,_fnCamelToHungarian,_fnLanguageCompat,_fnBrowserDetect,_fnAddData,_fnAddTr,_fnNodeToDataIndex,_fnNodeToColumnIndex,_fnGetCellData,_fnSetCellData,_fnSplitObjNotation,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnGetDataMaster,_fnClearTable,_fnDeleteIndex,_fnInvalidate,_fnGetRowElements,_fnCreateTr,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAddOptionsHtml,_fnDetectHeader,_fnGetUniqueThs,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnFilterCreateSearch,_fnEscapeRegex,_fnFilterData,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnInfoMacros,_fnInitialise,_fnInitComplete,_fnLengthChange,_fnFeatureHtmlLength,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnFeatureHtmlTable,_fnScrollDraw,_fnApplyToChildren,_fnCalculateColumnWidths,_fnThrottle,_fnConvertToWidth,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnSortFlatten,_fnSort,_fnSortAria,_fnSortListener,_fnSortAttachListener,_fnSortingClasses,_fnSortData,_fnSaveState,_fnLoadState,_fnSettingsFromNode,_fnLog,_fnMap,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnLengthOverflow,_fnRenderer,_fnDataSource,_fnRowAttributes*/
-
-(function( factory ) {
- "use strict";
-
- if ( typeof define === 'function' && define.amd ) {
- // AMD
- define( ['jquery'], function ( $ ) {
- return factory( $, window, document );
- } );
- }
- else if ( typeof exports === 'object' ) {
- // CommonJS
- module.exports = function (root, $) {
- if ( ! root ) {
- // CommonJS environments without a window global must pass a
- // root. This will give an error otherwise
- root = window;
- }
-
- if ( ! $ ) {
- $ = typeof window !== 'undefined' ? // jQuery's factory checks for a global window
- require('jquery') :
- require('jquery')( root );
- }
-
- return factory( $, root, root.document );
- };
- }
- else {
- // Browser
- factory( jQuery, window, document );
- }
-}
-(function( $, window, document, undefined ) {
- "use strict";
-
- /**
- * DataTables is a plug-in for the jQuery Javascript library. It is a highly
- * flexible tool, based upon the foundations of progressive enhancement,
- * which will add advanced interaction controls to any HTML table. For a
- * full list of features please refer to
- * [DataTables.net](href="http://datatables.net).
- *
- * Note that the `DataTable` object is not a global variable but is aliased
- * to `jQuery.fn.DataTable` and `jQuery.fn.dataTable` through which it may
- * be accessed.
- *
- * @class
- * @param {object} [init={}] Configuration object for DataTables. Options
- * are defined by {@link DataTable.defaults}
- * @requires jQuery 1.7+
- *
- * @example
- * // Basic initialisation
- * $(document).ready( function {
- * $('#example').dataTable();
- * } );
- *
- * @example
- * // Initialisation with configuration options - in this case, disable
- * // pagination and sorting.
- * $(document).ready( function {
- * $('#example').dataTable( {
- * "paginate": false,
- * "sort": false
- * } );
- * } );
- */
- var DataTable = function ( options )
- {
- /**
- * Perform a jQuery selector action on the table's TR elements (from the tbody) and
- * return the resulting jQuery object.
- * @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
- * @param {object} [oOpts] Optional parameters for modifying the rows to be included
- * @param {string} [oOpts.filter=none] Select TR elements that meet the current filter
- * criterion ("applied") or all TR elements (i.e. no filter).
- * @param {string} [oOpts.order=current] Order of the TR elements in the processed array.
- * Can be either 'current', whereby the current sorting of the table is used, or
- * 'original' whereby the original order the data was read into the table is used.
- * @param {string} [oOpts.page=all] Limit the selection to the currently displayed page
- * ("current") or not ("all"). If 'current' is given, then order is assumed to be
- * 'current' and filter is 'applied', regardless of what they might be given as.
- * @returns {object} jQuery object, filtered by the given selector.
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Highlight every second row
- * oTable.$('tr:odd').css('backgroundColor', 'blue');
- * } );
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Filter to rows with 'Webkit' in them, add a background colour and then
- * // remove the filter, thus highlighting the 'Webkit' rows only.
- * oTable.fnFilter('Webkit');
- * oTable.$('tr', {"search": "applied"}).css('backgroundColor', 'blue');
- * oTable.fnFilter('');
- * } );
- */
- this.$ = function ( sSelector, oOpts )
- {
- return this.api(true).$( sSelector, oOpts );
- };
-
-
- /**
- * Almost identical to $ in operation, but in this case returns the data for the matched
- * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes
- * rather than any descendants, so the data can be obtained for the row/cell. If matching
- * rows are found, the data returned is the original data array/object that was used to
- * create the row (or a generated array if from a DOM source).
- *
- * This method is often useful in-combination with $ where both functions are given the
- * same parameters and the array indexes will match identically.
- * @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
- * @param {object} [oOpts] Optional parameters for modifying the rows to be included
- * @param {string} [oOpts.filter=none] Select elements that meet the current filter
- * criterion ("applied") or all elements (i.e. no filter).
- * @param {string} [oOpts.order=current] Order of the data in the processed array.
- * Can be either 'current', whereby the current sorting of the table is used, or
- * 'original' whereby the original order the data was read into the table is used.
- * @param {string} [oOpts.page=all] Limit the selection to the currently displayed page
- * ("current") or not ("all"). If 'current' is given, then order is assumed to be
- * 'current' and filter is 'applied', regardless of what they might be given as.
- * @returns {array} Data for the matched elements. If any elements, as a result of the
- * selector, were not TR, TD or TH elements in the DataTable, they will have a null
- * entry in the array.
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Get the data from the first row in the table
- * var data = oTable._('tr:first');
- *
- * // Do something useful with the data
- * alert( "First cell is: "+data[0] );
- * } );
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Filter to 'Webkit' and get all data for
- * oTable.fnFilter('Webkit');
- * var data = oTable._('tr', {"search": "applied"});
- *
- * // Do something with the data
- * alert( data.length+" rows matched the search" );
- * } );
- */
- this._ = function ( sSelector, oOpts )
- {
- return this.api(true).rows( sSelector, oOpts ).data();
- };
-
-
- /**
- * Create a DataTables Api instance, with the currently selected tables for
- * the Api's context.
- * @param {boolean} [traditional=false] Set the API instance's context to be
- * only the table referred to by the `DataTable.ext.iApiIndex` option, as was
- * used in the API presented by DataTables 1.9- (i.e. the traditional mode),
- * or if all tables captured in the jQuery object should be used.
- * @return {DataTables.Api}
- */
- this.api = function ( traditional )
- {
- return traditional ?
- new _Api(
- _fnSettingsFromNode( this[ _ext.iApiIndex ] )
- ) :
- new _Api( this );
- };
-
-
- /**
- * Add a single new row or multiple rows of data to the table. Please note
- * that this is suitable for client-side processing only - if you are using
- * server-side processing (i.e. "bServerSide": true), then to add data, you
- * must add it to the data source, i.e. the server-side, through an Ajax call.
- * @param {array|object} data The data to be added to the table. This can be:
- * <ul>
- * <li>1D array of data - add a single row with the data provided</li>
- * <li>2D array of arrays - add multiple rows in a single call</li>
- * <li>object - data object when using <i>mData</i></li>
- * <li>array of objects - multiple data objects when using <i>mData</i></li>
- * </ul>
- * @param {bool} [redraw=true] redraw the table or not
- * @returns {array} An array of integers, representing the list of indexes in
- * <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to
- * the table.
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * // Global var for counter
- * var giCount = 2;
- *
- * $(document).ready(function() {
- * $('#example').dataTable();
- * } );
- *
- * function fnClickAddRow() {
- * $('#example').dataTable().fnAddData( [
- * giCount+".1",
- * giCount+".2",
- * giCount+".3",
- * giCount+".4" ]
- * );
- *
- * giCount++;
- * }
- */
- this.fnAddData = function( data, redraw )
- {
- var api = this.api( true );
-
- /* Check if we want to add multiple rows or not */
- var rows = $.isArray(data) && ( $.isArray(data[0]) || $.isPlainObject(data[0]) ) ?
- api.rows.add( data ) :
- api.row.add( data );
-
- if ( redraw === undefined || redraw ) {
- api.draw();
- }
-
- return rows.flatten().toArray();
- };
-
-
- /**
- * This function will make DataTables recalculate the column sizes, based on the data
- * contained in the table and the sizes applied to the columns (in the DOM, CSS or
- * through the sWidth parameter). This can be useful when the width of the table's
- * parent element changes (for example a window resize).
- * @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable( {
- * "sScrollY": "200px",
- * "bPaginate": false
- * } );
- *
- * $(window).bind('resize', function () {
- * oTable.fnAdjustColumnSizing();
- * } );
- * } );
- */
- this.fnAdjustColumnSizing = function ( bRedraw )
- {
- var api = this.api( true ).columns.adjust();
- var settings = api.settings()[0];
- var scroll = settings.oScroll;
-
- if ( bRedraw === undefined || bRedraw ) {
- api.draw( false );
- }
- else if ( scroll.sX !== "" || scroll.sY !== "" ) {
- /* If not redrawing, but scrolling, we want to apply the new column sizes anyway */
- _fnScrollDraw( settings );
- }
- };
-
-
- /**
- * Quickly and simply clear a table
- * @param {bool} [bRedraw=true] redraw the table or not
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)
- * oTable.fnClearTable();
- * } );
- */
- this.fnClearTable = function( bRedraw )
- {
- var api = this.api( true ).clear();
-
- if ( bRedraw === undefined || bRedraw ) {
- api.draw();
- }
- };
-
-
- /**
- * The exact opposite of 'opening' a row, this function will close any rows which
- * are currently 'open'.
- * @param {node} nTr the table row to 'close'
- * @returns {int} 0 on success, or 1 if failed (can't find the row)
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable;
- *
- * // 'open' an information row when a row is clicked on
- * $('#example tbody tr').click( function () {
- * if ( oTable.fnIsOpen(this) ) {
- * oTable.fnClose( this );
- * } else {
- * oTable.fnOpen( this, "Temporary row opened", "info_row" );
- * }
- * } );
- *
- * oTable = $('#example').dataTable();
- * } );
- */
- this.fnClose = function( nTr )
- {
- this.api( true ).row( nTr ).child.hide();
- };
-
-
- /**
- * Remove a row for the table
- * @param {mixed} target The index of the row from aoData to be deleted, or
- * the TR element you want to delete
- * @param {function|null} [callBack] Callback function
- * @param {bool} [redraw=true] Redraw the table or not
- * @returns {array} The row that was deleted
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Immediately remove the first row
- * oTable.fnDeleteRow( 0 );
- * } );
- */
- this.fnDeleteRow = function( target, callback, redraw )
- {
- var api = this.api( true );
- var rows = api.rows( target );
- var settings = rows.settings()[0];
- var data = settings.aoData[ rows[0][0] ];
-
- rows.remove();
-
- if ( callback ) {
- callback.call( this, settings, data );
- }
-
- if ( redraw === undefined || redraw ) {
- api.draw();
- }
-
- return data;
- };
-
-
- /**
- * Restore the table to it's original state in the DOM by removing all of DataTables
- * enhancements, alterations to the DOM structure of the table and event listeners.
- * @param {boolean} [remove=false] Completely remove the table from the DOM
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * // This example is fairly pointless in reality, but shows how fnDestroy can be used
- * var oTable = $('#example').dataTable();
- * oTable.fnDestroy();
- * } );
- */
- this.fnDestroy = function ( remove )
- {
- this.api( true ).destroy( remove );
- };
-
-
- /**
- * Redraw the table
- * @param {bool} [complete=true] Re-filter and resort (if enabled) the table before the draw.
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Re-draw the table - you wouldn't want to do it here, but it's an example :-)
- * oTable.fnDraw();
- * } );
- */
- this.fnDraw = function( complete )
- {
- // Note that this isn't an exact match to the old call to _fnDraw - it takes
- // into account the new data, but can hold position.
- this.api( true ).draw( complete );
- };
-
-
- /**
- * Filter the input based on data
- * @param {string} sInput String to filter the table on
- * @param {int|null} [iColumn] Column to limit filtering to
- * @param {bool} [bRegex=false] Treat as regular expression or not
- * @param {bool} [bSmart=true] Perform smart filtering or not
- * @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)
- * @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Sometime later - filter...
- * oTable.fnFilter( 'test string' );
- * } );
- */
- this.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )
- {
- var api = this.api( true );
-
- if ( iColumn === null || iColumn === undefined ) {
- api.search( sInput, bRegex, bSmart, bCaseInsensitive );
- }
- else {
- api.column( iColumn ).search( sInput, bRegex, bSmart, bCaseInsensitive );
- }
-
- api.draw();
- };
-
-
- /**
- * Get the data for the whole table, an individual row or an individual cell based on the
- * provided parameters.
- * @param {int|node} [src] A TR row node, TD/TH cell node or an integer. If given as
- * a TR node then the data source for the whole row will be returned. If given as a
- * TD/TH cell node then iCol will be automatically calculated and the data for the
- * cell returned. If given as an integer, then this is treated as the aoData internal
- * data index for the row (see fnGetPosition) and the data for that row used.
- * @param {int} [col] Optional column index that you want the data of.
- * @returns {array|object|string} If mRow is undefined, then the data for all rows is
- * returned. If mRow is defined, just data for that row, and is iCol is
- * defined, only data for the designated cell is returned.
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * // Row data
- * $(document).ready(function() {
- * oTable = $('#example').dataTable();
- *
- * oTable.$('tr').click( function () {
- * var data = oTable.fnGetData( this );
- * // ... do something with the array / object of data for the row
- * } );
- * } );
- *
- * @example
- * // Individual cell data
- * $(document).ready(function() {
- * oTable = $('#example').dataTable();
- *
- * oTable.$('td').click( function () {
- * var sData = oTable.fnGetData( this );
- * alert( 'The cell clicked on had the value of '+sData );
- * } );
- * } );
- */
- this.fnGetData = function( src, col )
- {
- var api = this.api( true );
-
- if ( src !== undefined ) {
- var type = src.nodeName ? src.nodeName.toLowerCase() : '';
-
- return col !== undefined || type == 'td' || type == 'th' ?
- api.cell( src, col ).data() :
- api.row( src ).data() || null;
- }
-
- return api.data().toArray();
- };
-
-
- /**
- * Get an array of the TR nodes that are used in the table's body. Note that you will
- * typically want to use the '$' API method in preference to this as it is more
- * flexible.
- * @param {int} [iRow] Optional row index for the TR element you want
- * @returns {array|node} If iRow is undefined, returns an array of all TR elements
- * in the table's body, or iRow is defined, just the TR element requested.
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Get the nodes from the table
- * var nNodes = oTable.fnGetNodes( );
- * } );
- */
- this.fnGetNodes = function( iRow )
- {
- var api = this.api( true );
-
- return iRow !== undefined ?
- api.row( iRow ).node() :
- api.rows().nodes().flatten().toArray();
- };
-
-
- /**
- * Get the array indexes of a particular cell from it's DOM element
- * and column index including hidden columns
- * @param {node} node this can either be a TR, TD or TH in the table's body
- * @returns {int} If nNode is given as a TR, then a single index is returned, or
- * if given as a cell, an array of [row index, column index (visible),
- * column index (all)] is given.
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * $('#example tbody td').click( function () {
- * // Get the position of the current data from the node
- * var aPos = oTable.fnGetPosition( this );
- *
- * // Get the data array for this row
- * var aData = oTable.fnGetData( aPos[0] );
- *
- * // Update the data array and return the value
- * aData[ aPos[1] ] = 'clicked';
- * this.innerHTML = 'clicked';
- * } );
- *
- * // Init DataTables
- * oTable = $('#example').dataTable();
- * } );
- */
- this.fnGetPosition = function( node )
- {
- var api = this.api( true );
- var nodeName = node.nodeName.toUpperCase();
-
- if ( nodeName == 'TR' ) {
- return api.row( node ).index();
- }
- else if ( nodeName == 'TD' || nodeName == 'TH' ) {
- var cell = api.cell( node ).index();
-
- return [
- cell.row,
- cell.columnVisible,
- cell.column
- ];
- }
- return null;
- };
-
-
- /**
- * Check to see if a row is 'open' or not.
- * @param {node} nTr the table row to check
- * @returns {boolean} true if the row is currently open, false otherwise
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable;
- *
- * // 'open' an information row when a row is clicked on
- * $('#example tbody tr').click( function () {
- * if ( oTable.fnIsOpen(this) ) {
- * oTable.fnClose( this );
- * } else {
- * oTable.fnOpen( this, "Temporary row opened", "info_row" );
- * }
- * } );
- *
- * oTable = $('#example').dataTable();
- * } );
- */
- this.fnIsOpen = function( nTr )
- {
- return this.api( true ).row( nTr ).child.isShown();
- };
-
-
- /**
- * This function will place a new row directly after a row which is currently
- * on display on the page, with the HTML contents that is passed into the
- * function. This can be used, for example, to ask for confirmation that a
- * particular record should be deleted.
- * @param {node} nTr The table row to 'open'
- * @param {string|node|jQuery} mHtml The HTML to put into the row
- * @param {string} sClass Class to give the new TD cell
- * @returns {node} The row opened. Note that if the table row passed in as the
- * first parameter, is not found in the table, this method will silently
- * return.
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable;
- *
- * // 'open' an information row when a row is clicked on
- * $('#example tbody tr').click( function () {
- * if ( oTable.fnIsOpen(this) ) {
- * oTable.fnClose( this );
- * } else {
- * oTable.fnOpen( this, "Temporary row opened", "info_row" );
- * }
- * } );
- *
- * oTable = $('#example').dataTable();
- * } );
- */
- this.fnOpen = function( nTr, mHtml, sClass )
- {
- return this.api( true )
- .row( nTr )
- .child( mHtml, sClass )
- .show()
- .child()[0];
- };
-
-
- /**
- * Change the pagination - provides the internal logic for pagination in a simple API
- * function. With this function you can have a DataTables table go to the next,
- * previous, first or last pages.
- * @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last"
- * or page number to jump to (integer), note that page 0 is the first page.
- * @param {bool} [bRedraw=true] Redraw the table or not
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- * oTable.fnPageChange( 'next' );
- * } );
- */
- this.fnPageChange = function ( mAction, bRedraw )
- {
- var api = this.api( true ).page( mAction );
-
- if ( bRedraw === undefined || bRedraw ) {
- api.draw(false);
- }
- };
-
-
- /**
- * Show a particular column
- * @param {int} iCol The column whose display should be changed
- * @param {bool} bShow Show (true) or hide (false) the column
- * @param {bool} [bRedraw=true] Redraw the table or not
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Hide the second column after initialisation
- * oTable.fnSetColumnVis( 1, false );
- * } );
- */
- this.fnSetColumnVis = function ( iCol, bShow, bRedraw )
- {
- var api = this.api( true ).column( iCol ).visible( bShow );
-
- if ( bRedraw === undefined || bRedraw ) {
- api.columns.adjust().draw();
- }
- };
-
-
- /**
- * Get the settings for a particular table for external manipulation
- * @returns {object} DataTables settings object. See
- * {@link DataTable.models.oSettings}
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- * var oSettings = oTable.fnSettings();
- *
- * // Show an example parameter from the settings
- * alert( oSettings._iDisplayStart );
- * } );
- */
- this.fnSettings = function()
- {
- return _fnSettingsFromNode( this[_ext.iApiIndex] );
- };
-
-
- /**
- * Sort the table by a particular column
- * @param {int} iCol the data index to sort on. Note that this will not match the
- * 'display index' if you have hidden data entries
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Sort immediately with columns 0 and 1
- * oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );
- * } );
- */
- this.fnSort = function( aaSort )
- {
- this.api( true ).order( aaSort ).draw();
- };
-
-
- /**
- * Attach a sort listener to an element for a given column
- * @param {node} nNode the element to attach the sort listener to
- * @param {int} iColumn the column that a click on this node will sort on
- * @param {function} [fnCallback] callback function when sort is run
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Sort on column 1, when 'sorter' is clicked on
- * oTable.fnSortListener( document.getElementById('sorter'), 1 );
- * } );
- */
- this.fnSortListener = function( nNode, iColumn, fnCallback )
- {
- this.api( true ).order.listener( nNode, iColumn, fnCallback );
- };
-
-
- /**
- * Update a table cell or row - this method will accept either a single value to
- * update the cell with, an array of values with one element for each column or
- * an object in the same format as the original data source. The function is
- * self-referencing in order to make the multi column updates easier.
- * @param {object|array|string} mData Data to update the cell/row with
- * @param {node|int} mRow TR element you want to update or the aoData index
- * @param {int} [iColumn] The column to update, give as null or undefined to
- * update a whole row.
- * @param {bool} [bRedraw=true] Redraw the table or not
- * @param {bool} [bAction=true] Perform pre-draw actions or not
- * @returns {int} 0 on success, 1 on error
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- * oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell
- * oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], $('tbody tr')[0] ); // Row
- * } );
- */
- this.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )
- {
- var api = this.api( true );
-
- if ( iColumn === undefined || iColumn === null ) {
- api.row( mRow ).data( mData );
- }
- else {
- api.cell( mRow, iColumn ).data( mData );
- }
-
- if ( bAction === undefined || bAction ) {
- api.columns.adjust();
- }
-
- if ( bRedraw === undefined || bRedraw ) {
- api.draw();
- }
- return 0;
- };
-
-
- /**
- * Provide a common method for plug-ins to check the version of DataTables being used, in order
- * to ensure compatibility.
- * @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note that the
- * formats "X" and "X.Y" are also acceptable.
- * @returns {boolean} true if this version of DataTables is greater or equal to the required
- * version, or false if this version of DataTales is not suitable
- * @method
- * @dtopt API
- * @deprecated Since v1.10
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- * alert( oTable.fnVersionCheck( '1.9.0' ) );
- * } );
- */
- this.fnVersionCheck = _ext.fnVersionCheck;
-
-
- var _that = this;
- var emptyInit = options === undefined;
- var len = this.length;
-
- if ( emptyInit ) {
- options = {};
- }
-
- this.oApi = this.internal = _ext.internal;
-
- // Extend with old style plug-in API methods
- for ( var fn in DataTable.ext.internal ) {
- if ( fn ) {
- this[fn] = _fnExternApiFunc(fn);
- }
- }
-
- this.each(function() {
- // For each initialisation we want to give it a clean initialisation
- // object that can be bashed around
- var o = {};
- var oInit = len > 1 ? // optimisation for single table case
- _fnExtend( o, options, true ) :
- options;
-
- /*global oInit,_that,emptyInit*/
- var i=0, iLen, j, jLen, k, kLen;
- var sId = this.getAttribute( 'id' );
- var bInitHandedOff = false;
- var defaults = DataTable.defaults;
- var $this = $(this);
-
-
- /* Sanity check */
- if ( this.nodeName.toLowerCase() != 'table' )
- {
- _fnLog( null, 0, 'Non-table node initialisation ('+this.nodeName+')', 2 );
- return;
- }
-
- /* Backwards compatibility for the defaults */
- _fnCompatOpts( defaults );
- _fnCompatCols( defaults.column );
-
- /* Convert the camel-case defaults to Hungarian */
- _fnCamelToHungarian( defaults, defaults, true );
- _fnCamelToHungarian( defaults.column, defaults.column, true );
-
- /* Setting up the initialisation object */
- _fnCamelToHungarian( defaults, $.extend( oInit, $this.data() ) );
-
-
-
- /* Check to see if we are re-initialising a table */
- var allSettings = DataTable.settings;
- for ( i=0, iLen=allSettings.length ; i<iLen ; i++ )
- {
- var s = allSettings[i];
-
- /* Base check on table node */
- if ( s.nTable == this || s.nTHead.parentNode == this || (s.nTFoot && s.nTFoot.parentNode == this) )
- {
- var bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;
- var bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;
-
- if ( emptyInit || bRetrieve )
- {
- return s.oInstance;
- }
- else if ( bDestroy )
- {
- s.oInstance.fnDestroy();
- break;
- }
- else
- {
- _fnLog( s, 0, 'Cannot reinitialise DataTable', 3 );
- return;
- }
- }
-
- /* If the element we are initialising has the same ID as a table which was previously
- * initialised, but the table nodes don't match (from before) then we destroy the old
- * instance by simply deleting it. This is under the assumption that the table has been
- * destroyed by other methods. Anyone using non-id selectors will need to do this manually
- */
- if ( s.sTableId == this.id )
- {
- allSettings.splice( i, 1 );
- break;
- }
- }
-
- /* Ensure the table has an ID - required for accessibility */
- if ( sId === null || sId === "" )
- {
- sId = "DataTables_Table_"+(DataTable.ext._unique++);
- this.id = sId;
- }
-
- /* Create the settings object for this table and set some of the default parameters */
- var oSettings = $.extend( true, {}, DataTable.models.oSettings, {
- "sDestroyWidth": $this[0].style.width,
- "sInstance": sId,
- "sTableId": sId
- } );
- oSettings.nTable = this;
- oSettings.oApi = _that.internal;
- oSettings.oInit = oInit;
-
- allSettings.push( oSettings );
-
- // Need to add the instance after the instance after the settings object has been added
- // to the settings array, so we can self reference the table instance if more than one
- oSettings.oInstance = (_that.length===1) ? _that : $this.dataTable();
-
- // Backwards compatibility, before we apply all the defaults
- _fnCompatOpts( oInit );
-
- if ( oInit.oLanguage )
- {
- _fnLanguageCompat( oInit.oLanguage );
- }
-
- // If the length menu is given, but the init display length is not, use the length menu
- if ( oInit.aLengthMenu && ! oInit.iDisplayLength )
- {
- oInit.iDisplayLength = $.isArray( oInit.aLengthMenu[0] ) ?
- oInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];
- }
-
- // Apply the defaults and init options to make a single init object will all
- // options defined from defaults and instance options.
- oInit = _fnExtend( $.extend( true, {}, defaults ), oInit );
-
-
- // Map the initialisation options onto the settings object
- _fnMap( oSettings.oFeatures, oInit, [
- "bPaginate",
- "bLengthChange",
- "bFilter",
- "bSort",
- "bSortMulti",
- "bInfo",
- "bProcessing",
- "bAutoWidth",
- "bSortClasses",
- "bServerSide",
- "bDeferRender"
- ] );
- _fnMap( oSettings, oInit, [
- "asStripeClasses",
- "ajax",
- "fnServerData",
- "fnFormatNumber",
- "sServerMethod",
- "aaSorting",
- "aaSortingFixed",
- "aLengthMenu",
- "sPaginationType",
- "sAjaxSource",
- "sAjaxDataProp",
- "iStateDuration",
- "sDom",
- "bSortCellsTop",
- "iTabIndex",
- "fnStateLoadCallback",
- "fnStateSaveCallback",
- "renderer",
- "searchDelay",
- "rowId",
- [ "iCookieDuration", "iStateDuration" ], // backwards compat
- [ "oSearch", "oPreviousSearch" ],
- [ "aoSearchCols", "aoPreSearchCols" ],
- [ "iDisplayLength", "_iDisplayLength" ],
- [ "bJQueryUI", "bJUI" ]
- ] );
- _fnMap( oSettings.oScroll, oInit, [
- [ "sScrollX", "sX" ],
- [ "sScrollXInner", "sXInner" ],
- [ "sScrollY", "sY" ],
- [ "bScrollCollapse", "bCollapse" ]
- ] );
- _fnMap( oSettings.oLanguage, oInit, "fnInfoCallback" );
-
- /* Callback functions which are array driven */
- _fnCallbackReg( oSettings, 'aoDrawCallback', oInit.fnDrawCallback, 'user' );
- _fnCallbackReg( oSettings, 'aoServerParams', oInit.fnServerParams, 'user' );
- _fnCallbackReg( oSettings, 'aoStateSaveParams', oInit.fnStateSaveParams, 'user' );
- _fnCallbackReg( oSettings, 'aoStateLoadParams', oInit.fnStateLoadParams, 'user' );
- _fnCallbackReg( oSettings, 'aoStateLoaded', oInit.fnStateLoaded, 'user' );
- _fnCallbackReg( oSettings, 'aoRowCallback', oInit.fnRowCallback, 'user' );
- _fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow, 'user' );
- _fnCallbackReg( oSettings, 'aoHeaderCallback', oInit.fnHeaderCallback, 'user' );
- _fnCallbackReg( oSettings, 'aoFooterCallback', oInit.fnFooterCallback, 'user' );
- _fnCallbackReg( oSettings, 'aoInitComplete', oInit.fnInitComplete, 'user' );
- _fnCallbackReg( oSettings, 'aoPreDrawCallback', oInit.fnPreDrawCallback, 'user' );
-
- oSettings.rowIdFn = _fnGetObjectDataFn( oInit.rowId );
-
- /* Browser support detection */
- _fnBrowserDetect( oSettings );
-
- var oClasses = oSettings.oClasses;
-
- // @todo Remove in 1.11
- if ( oInit.bJQueryUI )
- {
- /* Use the JUI classes object for display. You could clone the oStdClasses object if
- * you want to have multiple tables with multiple independent classes
- */
- $.extend( oClasses, DataTable.ext.oJUIClasses, oInit.oClasses );
-
- if ( oInit.sDom === defaults.sDom && defaults.sDom === "lfrtip" )
- {
- /* Set the DOM to use a layout suitable for jQuery UI's theming */
- oSettings.sDom = '<"H"lfr>t<"F"ip>';
- }
-
- if ( ! oSettings.renderer ) {
- oSettings.renderer = 'jqueryui';
- }
- else if ( $.isPlainObject( oSettings.renderer ) && ! oSettings.renderer.header ) {
- oSettings.renderer.header = 'jqueryui';
- }
- }
- else
- {
- $.extend( oClasses, DataTable.ext.classes, oInit.oClasses );
- }
- $this.addClass( oClasses.sTable );
-
-
- if ( oSettings.iInitDisplayStart === undefined )
- {
- /* Display start point, taking into account the save saving */
- oSettings.iInitDisplayStart = oInit.iDisplayStart;
- oSettings._iDisplayStart = oInit.iDisplayStart;
- }
-
- if ( oInit.iDeferLoading !== null )
- {
- oSettings.bDeferLoading = true;
- var tmp = $.isArray( oInit.iDeferLoading );
- oSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;
- oSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;
- }
-
- /* Language definitions */
- var oLanguage = oSettings.oLanguage;
- $.extend( true, oLanguage, oInit.oLanguage );
-
- if ( oLanguage.sUrl !== "" )
- {
- /* Get the language definitions from a file - because this Ajax call makes the language
- * get async to the remainder of this function we use bInitHandedOff to indicate that
- * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor
- */
- $.ajax( {
- dataType: 'json',
- url: oLanguage.sUrl,
- success: function ( json ) {
- _fnLanguageCompat( json );
- _fnCamelToHungarian( defaults.oLanguage, json );
- $.extend( true, oLanguage, json );
- _fnInitialise( oSettings );
- },
- error: function () {
- // Error occurred loading language file, continue on as best we can
- _fnInitialise( oSettings );
- }
- } );
- bInitHandedOff = true;
- }
-
- /*
- * Stripes
- */
- if ( oInit.asStripeClasses === null )
- {
- oSettings.asStripeClasses =[
- oClasses.sStripeOdd,
- oClasses.sStripeEven
- ];
- }
-
- /* Remove row stripe classes if they are already on the table row */
- var stripeClasses = oSettings.asStripeClasses;
- var rowOne = $this.children('tbody').find('tr').eq(0);
- if ( $.inArray( true, $.map( stripeClasses, function(el, i) {
- return rowOne.hasClass(el);
- } ) ) !== -1 ) {
- $('tbody tr', this).removeClass( stripeClasses.join(' ') );
- oSettings.asDestroyStripes = stripeClasses.slice();
- }
-
- /*
- * Columns
- * See if we should load columns automatically or use defined ones
- */
- var anThs = [];
- var aoColumnsInit;
- var nThead = this.getElementsByTagName('thead');
- if ( nThead.length !== 0 )
- {
- _fnDetectHeader( oSettings.aoHeader, nThead[0] );
- anThs = _fnGetUniqueThs( oSettings );
- }
-
- /* If not given a column array, generate one with nulls */
- if ( oInit.aoColumns === null )
- {
- aoColumnsInit = [];
- for ( i=0, iLen=anThs.length ; i<iLen ; i++ )
- {
- aoColumnsInit.push( null );
- }
- }
- else
- {
- aoColumnsInit = oInit.aoColumns;
- }
-
- /* Add the columns */
- for ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )
- {
- _fnAddColumn( oSettings, anThs ? anThs[i] : null );
- }
-
- /* Apply the column definitions */
- _fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {
- _fnColumnOptions( oSettings, iCol, oDef );
- } );
-
- /* HTML5 attribute detection - build an mData object automatically if the
- * attributes are found
- */
- if ( rowOne.length ) {
- var a = function ( cell, name ) {
- return cell.getAttribute( 'data-'+name ) !== null ? name : null;
- };
-
- $( rowOne[0] ).children('th, td').each( function (i, cell) {
- var col = oSettings.aoColumns[i];
-
- if ( col.mData === i ) {
- var sort = a( cell, 'sort' ) || a( cell, 'order' );
- var filter = a( cell, 'filter' ) || a( cell, 'search' );
-
- if ( sort !== null || filter !== null ) {
- col.mData = {
- _: i+'.display',
- sort: sort !== null ? i+'.@data-'+sort : undefined,
- type: sort !== null ? i+'.@data-'+sort : undefined,
- filter: filter !== null ? i+'.@data-'+filter : undefined
- };
-
- _fnColumnOptions( oSettings, i );
- }
- }
- } );
- }
-
- var features = oSettings.oFeatures;
-
- /* Must be done after everything which can be overridden by the state saving! */
- if ( oInit.bStateSave )
- {
- features.bStateSave = true;
- _fnLoadState( oSettings, oInit );
- _fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );
- }
-
-
- /*
- * Sorting
- * @todo For modularisation (1.11) this needs to do into a sort start up handler
- */
-
- // If aaSorting is not defined, then we use the first indicator in asSorting
- // in case that has been altered, so the default sort reflects that option
- if ( oInit.aaSorting === undefined )
- {
- var sorting = oSettings.aaSorting;
- for ( i=0, iLen=sorting.length ; i<iLen ; i++ )
- {
- sorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];
- }
- }
-
- /* Do a first pass on the sorting classes (allows any size changes to be taken into
- * account, and also will apply sorting disabled classes if disabled
- */
- _fnSortingClasses( oSettings );
-
- if ( features.bSort )
- {
- _fnCallbackReg( oSettings, 'aoDrawCallback', function () {
- if ( oSettings.bSorted ) {
- var aSort = _fnSortFlatten( oSettings );
- var sortedColumns = {};
-
- $.each( aSort, function (i, val) {
- sortedColumns[ val.src ] = val.dir;
- } );
-
- _fnCallbackFire( oSettings, null, 'order', [oSettings, aSort, sortedColumns] );
- _fnSortAria( oSettings );
- }
- } );
- }
-
- _fnCallbackReg( oSettings, 'aoDrawCallback', function () {
- if ( oSettings.bSorted || _fnDataSource( oSettings ) === 'ssp' || features.bDeferRender ) {
- _fnSortingClasses( oSettings );
- }
- }, 'sc' );
-
-
- /*
- * Final init
- * Cache the header, body and footer as required, creating them if needed
- */
-
- // Work around for Webkit bug 83867 - store the caption-side before removing from doc
- var captions = $this.children('caption').each( function () {
- this._captionSide = $this.css('caption-side');
- } );
-
- var thead = $this.children('thead');
- if ( thead.length === 0 )
- {
- thead = $('<thead/>').appendTo(this);
- }
- oSettings.nTHead = thead[0];
-
- var tbody = $this.children('tbody');
- if ( tbody.length === 0 )
- {
- tbody = $('<tbody/>').appendTo(this);
- }
- oSettings.nTBody = tbody[0];
-
- var tfoot = $this.children('tfoot');
- if ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "") )
- {
- // If we are a scrolling table, and no footer has been given, then we need to create
- // a tfoot element for the caption element to be appended to
- tfoot = $('<tfoot/>').appendTo(this);
- }
-
- if ( tfoot.length === 0 || tfoot.children().length === 0 ) {
- $this.addClass( oClasses.sNoFooter );
- }
- else if ( tfoot.length > 0 ) {
- oSettings.nTFoot = tfoot[0];
- _fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );
- }
-
- /* Check if there is data passing into the constructor */
- if ( oInit.aaData )
- {
- for ( i=0 ; i<oInit.aaData.length ; i++ )
- {
- _fnAddData( oSettings, oInit.aaData[ i ] );
- }
- }
- else if ( oSettings.bDeferLoading || _fnDataSource( oSettings ) == 'dom' )
- {
- /* Grab the data from the page - only do this when deferred loading or no Ajax
- * source since there is no point in reading the DOM data if we are then going
- * to replace it with Ajax data
- */
- _fnAddTr( oSettings, $(oSettings.nTBody).children('tr') );
- }
-
- /* Copy the data index array */
- oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-
- /* Initialisation complete - table can be drawn */
- oSettings.bInitialised = true;
-
- /* Check if we need to initialise the table (it might not have been handed off to the
- * language processor)
- */
- if ( bInitHandedOff === false )
- {
- _fnInitialise( oSettings );
- }
- } );
- _that = null;
- return this;
- };
-
-
- /*
- * It is useful to have variables which are scoped locally so only the
- * DataTables functions can access them and they don't leak into global space.
- * At the same time these functions are often useful over multiple files in the
- * core and API, so we list, or at least document, all variables which are used
- * by DataTables as private variables here. This also ensures that there is no
- * clashing of variable names and that they can easily referenced for reuse.
- */
-
-
- // Defined else where
- // _selector_run
- // _selector_opts
- // _selector_first
- // _selector_row_indexes
-
- var _ext; // DataTable.ext
- var _Api; // DataTable.Api
- var _api_register; // DataTable.Api.register
- var _api_registerPlural; // DataTable.Api.registerPlural
-
- var _re_dic = {};
- var _re_new_lines = /[\r\n]/g;
- var _re_html = /<.*?>/g;
- var _re_date_start = /^[\w\+\-]/;
- var _re_date_end = /[\w\+\-]$/;
-
- // Escape regular expression special characters
- var _re_escape_regex = new RegExp( '(\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^', '-' ].join('|\\') + ')', 'g' );
-
- // http://en.wikipedia.org/wiki/Foreign_exchange_market
- // - \u20BD - Russian ruble.
- // - \u20a9 - South Korean Won
- // - \u20BA - Turkish Lira
- // - \u20B9 - Indian Rupee
- // - R - Brazil (R$) and South Africa
- // - fr - Swiss Franc
- // - kr - Swedish krona, Norwegian krone and Danish krone
- // - \u2009 is thin space and \u202F is narrow no-break space, both used in many
- // standards as thousands separators.
- var _re_formatted_numeric = /[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfk]/gi;
-
-
- var _empty = function ( d ) {
- return !d || d === true || d === '-' ? true : false;
- };
-
-
- var _intVal = function ( s ) {
- var integer = parseInt( s, 10 );
- return !isNaN(integer) && isFinite(s) ? integer : null;
- };
-
- // Convert from a formatted number with characters other than `.` as the
- // decimal place, to a Javascript number
- var _numToDecimal = function ( num, decimalPoint ) {
- // Cache created regular expressions for speed as this function is called often
- if ( ! _re_dic[ decimalPoint ] ) {
- _re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' );
- }
- return typeof num === 'string' && decimalPoint !== '.' ?
- num.replace( /\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) :
- num;
- };
-
-
- var _isNumber = function ( d, decimalPoint, formatted ) {
- var strType = typeof d === 'string';
-
- // If empty return immediately so there must be a number if it is a
- // formatted string (this stops the string "k", or "kr", etc being detected
- // as a formatted number for currency
- if ( _empty( d ) ) {
- return true;
- }
-
- if ( decimalPoint && strType ) {
- d = _numToDecimal( d, decimalPoint );
- }
-
- if ( formatted && strType ) {
- d = d.replace( _re_formatted_numeric, '' );
- }
-
- return !isNaN( parseFloat(d) ) && isFinite( d );
- };
-
-
- // A string without HTML in it can be considered to be HTML still
- var _isHtml = function ( d ) {
- return _empty( d ) || typeof d === 'string';
- };
-
-
- var _htmlNumeric = function ( d, decimalPoint, formatted ) {
- if ( _empty( d ) ) {
- return true;
- }
-
- var html = _isHtml( d );
- return ! html ?
- null :
- _isNumber( _stripHtml( d ), decimalPoint, formatted ) ?
- true :
- null;
- };
-
-
- var _pluck = function ( a, prop, prop2 ) {
- var out = [];
- var i=0, ien=a.length;
-
- // Could have the test in the loop for slightly smaller code, but speed
- // is essential here
- if ( prop2 !== undefined ) {
- for ( ; i<ien ; i++ ) {
- if ( a[i] && a[i][ prop ] ) {
- out.push( a[i][ prop ][ prop2 ] );
- }
- }
- }
- else {
- for ( ; i<ien ; i++ ) {
- if ( a[i] ) {
- out.push( a[i][ prop ] );
- }
- }
- }
-
- return out;
- };
-
-
- // Basically the same as _pluck, but rather than looping over `a` we use `order`
- // as the indexes to pick from `a`
- var _pluck_order = function ( a, order, prop, prop2 )
- {
- var out = [];
- var i=0, ien=order.length;
-
- // Could have the test in the loop for slightly smaller code, but speed
- // is essential here
- if ( prop2 !== undefined ) {
- for ( ; i<ien ; i++ ) {
- if ( a[ order[i] ][ prop ] ) {
- out.push( a[ order[i] ][ prop ][ prop2 ] );
- }
- }
- }
- else {
- for ( ; i<ien ; i++ ) {
- out.push( a[ order[i] ][ prop ] );
- }
- }
-
- return out;
- };
-
-
- var _range = function ( len, start )
- {
- var out = [];
- var end;
-
- if ( start === undefined ) {
- start = 0;
- end = len;
- }
- else {
- end = start;
- start = len;
- }
-
- for ( var i=start ; i<end ; i++ ) {
- out.push( i );
- }
-
- return out;
- };
-
-
- var _removeEmpty = function ( a )
- {
- var out = [];
-
- for ( var i=0, ien=a.length ; i<ien ; i++ ) {
- if ( a[i] ) { // careful - will remove all falsy values!
- out.push( a[i] );
- }
- }
-
- return out;
- };
-
-
- var _stripHtml = function ( d ) {
- return d.replace( _re_html, '' );
- };
-
-
- /**
- * Find the unique elements in a source array.
- *
- * @param {array} src Source array
- * @return {array} Array of unique items
- * @ignore
- */
- var _unique = function ( src )
- {
- // A faster unique method is to use object keys to identify used values,
- // but this doesn't work with arrays or objects, which we must also
- // consider. See jsperf.com/compare-array-unique-versions/4 for more
- // information.
- var
- out = [],
- val,
- i, ien=src.length,
- j, k=0;
-
- again: for ( i=0 ; i<ien ; i++ ) {
- val = src[i];
-
- for ( j=0 ; j<k ; j++ ) {
- if ( out[j] === val ) {
- continue again;
- }
- }
-
- out.push( val );
- k++;
- }
-
- return out;
- };
-
-
- /**
- * DataTables utility methods
- *
- * This namespace provides helper methods that DataTables uses internally to
- * create a DataTable, but which are not exclusively used only for DataTables.
- * These methods can be used by extension authors to save the duplication of
- * code.
- *
- * @namespace
- */
- DataTable.util = {
- /**
- * Throttle the calls to a function. Arguments and context are maintained
- * for the throttled function.
- *
- * @param {function} fn Function to be called
- * @param {integer} freq Call frequency in mS
- * @return {function} Wrapped function
- */
- throttle: function ( fn, freq ) {
- var
- frequency = freq !== undefined ? freq : 200,
- last,
- timer;
-
- return function () {
- var
- that = this,
- now = +new Date(),
- args = arguments;
-
- if ( last && now < last + frequency ) {
- clearTimeout( timer );
-
- timer = setTimeout( function () {
- last = undefined;
- fn.apply( that, args );
- }, frequency );
- }
- else {
- last = now;
- fn.apply( that, args );
- }
- };
- },
-
-
- /**
- * Escape a string such that it can be used in a regular expression
- *
- * @param {string} val string to escape
- * @returns {string} escaped string
- */
- escapeRegex: function ( val ) {
- return val.replace( _re_escape_regex, '\\$1' );
- }
- };
-
-
-
- /**
- * Create a mapping object that allows camel case parameters to be looked up
- * for their Hungarian counterparts. The mapping is stored in a private
- * parameter called `_hungarianMap` which can be accessed on the source object.
- * @param {object} o
- * @memberof DataTable#oApi
- */
- function _fnHungarianMap ( o )
- {
- var
- hungarian = 'a aa ai ao as b fn i m o s ',
- match,
- newKey,
- map = {};
-
- $.each( o, function (key, val) {
- match = key.match(/^([^A-Z]+?)([A-Z])/);
-
- if ( match && hungarian.indexOf(match[1]+' ') !== -1 )
- {
- newKey = key.replace( match[0], match[2].toLowerCase() );
- map[ newKey ] = key;
-
- if ( match[1] === 'o' )
- {
- _fnHungarianMap( o[key] );
- }
- }
- } );
-
- o._hungarianMap = map;
- }
-
-
- /**
- * Convert from camel case parameters to Hungarian, based on a Hungarian map
- * created by _fnHungarianMap.
- * @param {object} src The model object which holds all parameters that can be
- * mapped.
- * @param {object} user The object to convert from camel case to Hungarian.
- * @param {boolean} force When set to `true`, properties which already have a
- * Hungarian value in the `user` object will be overwritten. Otherwise they
- * won't be.
- * @memberof DataTable#oApi
- */
- function _fnCamelToHungarian ( src, user, force )
- {
- if ( ! src._hungarianMap ) {
- _fnHungarianMap( src );
- }
-
- var hungarianKey;
-
- $.each( user, function (key, val) {
- hungarianKey = src._hungarianMap[ key ];
-
- if ( hungarianKey !== undefined && (force || user[hungarianKey] === undefined) )
- {
- // For objects, we need to buzz down into the object to copy parameters
- if ( hungarianKey.charAt(0) === 'o' )
- {
- // Copy the camelCase options over to the hungarian
- if ( ! user[ hungarianKey ] ) {
- user[ hungarianKey ] = {};
- }
- $.extend( true, user[hungarianKey], user[key] );
-
- _fnCamelToHungarian( src[hungarianKey], user[hungarianKey], force );
- }
- else {
- user[hungarianKey] = user[ key ];
- }
- }
- } );
- }
-
-
- /**
- * Language compatibility - when certain options are given, and others aren't, we
- * need to duplicate the values over, in order to provide backwards compatibility
- * with older language files.
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnLanguageCompat( lang )
- {
- var defaults = DataTable.defaults.oLanguage;
- var zeroRecords = lang.sZeroRecords;
-
- /* Backwards compatibility - if there is no sEmptyTable given, then use the same as
- * sZeroRecords - assuming that is given.
- */
- if ( ! lang.sEmptyTable && zeroRecords &&
- defaults.sEmptyTable === "No data available in table" )
- {
- _fnMap( lang, lang, 'sZeroRecords', 'sEmptyTable' );
- }
-
- /* Likewise with loading records */
- if ( ! lang.sLoadingRecords && zeroRecords &&
- defaults.sLoadingRecords === "Loading..." )
- {
- _fnMap( lang, lang, 'sZeroRecords', 'sLoadingRecords' );
- }
-
- // Old parameter name of the thousands separator mapped onto the new
- if ( lang.sInfoThousands ) {
- lang.sThousands = lang.sInfoThousands;
- }
-
- var decimal = lang.sDecimal;
- if ( decimal ) {
- _addNumericSort( decimal );
- }
- }
-
-
- /**
- * Map one parameter onto another
- * @param {object} o Object to map
- * @param {*} knew The new parameter name
- * @param {*} old The old parameter name
- */
- var _fnCompatMap = function ( o, knew, old ) {
- if ( o[ knew ] !== undefined ) {
- o[ old ] = o[ knew ];
- }
- };
-
-
- /**
- * Provide backwards compatibility for the main DT options. Note that the new
- * options are mapped onto the old parameters, so this is an external interface
- * change only.
- * @param {object} init Object to map
- */
- function _fnCompatOpts ( init )
- {
- _fnCompatMap( init, 'ordering', 'bSort' );
- _fnCompatMap( init, 'orderMulti', 'bSortMulti' );
- _fnCompatMap( init, 'orderClasses', 'bSortClasses' );
- _fnCompatMap( init, 'orderCellsTop', 'bSortCellsTop' );
- _fnCompatMap( init, 'order', 'aaSorting' );
- _fnCompatMap( init, 'orderFixed', 'aaSortingFixed' );
- _fnCompatMap( init, 'paging', 'bPaginate' );
- _fnCompatMap( init, 'pagingType', 'sPaginationType' );
- _fnCompatMap( init, 'pageLength', 'iDisplayLength' );
- _fnCompatMap( init, 'searching', 'bFilter' );
-
- // Boolean initialisation of x-scrolling
- if ( typeof init.sScrollX === 'boolean' ) {
- init.sScrollX = init.sScrollX ? '100%' : '';
- }
- if ( typeof init.scrollX === 'boolean' ) {
- init.scrollX = init.scrollX ? '100%' : '';
- }
-
- // Column search objects are in an array, so it needs to be converted
- // element by element
- var searchCols = init.aoSearchCols;
-
- if ( searchCols ) {
- for ( var i=0, ien=searchCols.length ; i<ien ; i++ ) {
- if ( searchCols[i] ) {
- _fnCamelToHungarian( DataTable.models.oSearch, searchCols[i] );
- }
- }
- }
- }
-
-
- /**
- * Provide backwards compatibility for column options. Note that the new options
- * are mapped onto the old parameters, so this is an external interface change
- * only.
- * @param {object} init Object to map
- */
- function _fnCompatCols ( init )
- {
- _fnCompatMap( init, 'orderable', 'bSortable' );
- _fnCompatMap( init, 'orderData', 'aDataSort' );
- _fnCompatMap( init, 'orderSequence', 'asSorting' );
- _fnCompatMap( init, 'orderDataType', 'sortDataType' );
-
- // orderData can be given as an integer
- var dataSort = init.aDataSort;
- if ( dataSort && ! $.isArray( dataSort ) ) {
- init.aDataSort = [ dataSort ];
- }
- }
-
-
- /**
- * Browser feature detection for capabilities, quirks
- * @param {object} settings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnBrowserDetect( settings )
- {
- // We don't need to do this every time DataTables is constructed, the values
- // calculated are specific to the browser and OS configuration which we
- // don't expect to change between initialisations
- if ( ! DataTable.__browser ) {
- var browser = {};
- DataTable.__browser = browser;
-
- // Scrolling feature / quirks detection
- var n = $('<div/>')
- .css( {
- position: 'fixed',
- top: 0,
- left: 0,
- height: 1,
- width: 1,
- overflow: 'hidden'
- } )
- .append(
- $('<div/>')
- .css( {
- position: 'absolute',
- top: 1,
- left: 1,
- width: 100,
- overflow: 'scroll'
- } )
- .append(
- $('<div/>')
- .css( {
- width: '100%',
- height: 10
- } )
- )
- )
- .appendTo( 'body' );
-
- var outer = n.children();
- var inner = outer.children();
-
- // Numbers below, in order, are:
- // inner.offsetWidth, inner.clientWidth, outer.offsetWidth, outer.clientWidth
- //
- // IE6 XP: 100 100 100 83
- // IE7 Vista: 100 100 100 83
- // IE 8+ Windows: 83 83 100 83
- // Evergreen Windows: 83 83 100 83
- // Evergreen Mac with scrollbars: 85 85 100 85
- // Evergreen Mac without scrollbars: 100 100 100 100
-
- // Get scrollbar width
- browser.barWidth = outer[0].offsetWidth - outer[0].clientWidth;
-
- // IE6/7 will oversize a width 100% element inside a scrolling element, to
- // include the width of the scrollbar, while other browsers ensure the inner
- // element is contained without forcing scrolling
- browser.bScrollOversize = inner[0].offsetWidth === 100 && outer[0].clientWidth !== 100;
-
- // In rtl text layout, some browsers (most, but not all) will place the
- // scrollbar on the left, rather than the right.
- browser.bScrollbarLeft = Math.round( inner.offset().left ) !== 1;
-
- // IE8- don't provide height and width for getBoundingClientRect
- browser.bBounding = n[0].getBoundingClientRect().width ? true : false;
-
- n.remove();
- }
-
- $.extend( settings.oBrowser, DataTable.__browser );
- settings.oScroll.iBarWidth = DataTable.__browser.barWidth;
- }
-
-
- /**
- * Array.prototype reduce[Right] method, used for browsers which don't support
- * JS 1.6. Done this way to reduce code size, since we iterate either way
- * @param {object} settings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnReduce ( that, fn, init, start, end, inc )
- {
- var
- i = start,
- value,
- isSet = false;
-
- if ( init !== undefined ) {
- value = init;
- isSet = true;
- }
-
- while ( i !== end ) {
- if ( ! that.hasOwnProperty(i) ) {
- continue;
- }
-
- value = isSet ?
- fn( value, that[i], i, that ) :
- that[i];
-
- isSet = true;
- i += inc;
- }
-
- return value;
- }
-
- /**
- * Add a column to the list used for the table with default values
- * @param {object} oSettings dataTables settings object
- * @param {node} nTh The th element for this column
- * @memberof DataTable#oApi
- */
- function _fnAddColumn( oSettings, nTh )
- {
- // Add column to aoColumns array
- var oDefaults = DataTable.defaults.column;
- var iCol = oSettings.aoColumns.length;
- var oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {
- "nTh": nTh ? nTh : document.createElement('th'),
- "sTitle": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '',
- "aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],
- "mData": oDefaults.mData ? oDefaults.mData : iCol,
- idx: iCol
- } );
- oSettings.aoColumns.push( oCol );
-
- // Add search object for column specific search. Note that the `searchCols[ iCol ]`
- // passed into extend can be undefined. This allows the user to give a default
- // with only some of the parameters defined, and also not give a default
- var searchCols = oSettings.aoPreSearchCols;
- searchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );
-
- // Use the default column options function to initialise classes etc
- _fnColumnOptions( oSettings, iCol, $(nTh).data() );
- }
-
-
- /**
- * Apply options for a column
- * @param {object} oSettings dataTables settings object
- * @param {int} iCol column index to consider
- * @param {object} oOptions object with sType, bVisible and bSearchable etc
- * @memberof DataTable#oApi
- */
- function _fnColumnOptions( oSettings, iCol, oOptions )
- {
- var oCol = oSettings.aoColumns[ iCol ];
- var oClasses = oSettings.oClasses;
- var th = $(oCol.nTh);
-
- // Try to get width information from the DOM. We can't get it from CSS
- // as we'd need to parse the CSS stylesheet. `width` option can override
- if ( ! oCol.sWidthOrig ) {
- // Width attribute
- oCol.sWidthOrig = th.attr('width') || null;
-
- // Style attribute
- var t = (th.attr('style') || '').match(/width:\s*(\d+[pxem%]+)/);
- if ( t ) {
- oCol.sWidthOrig = t[1];
- }
- }
-
- /* User specified column options */
- if ( oOptions !== undefined && oOptions !== null )
- {
- // Backwards compatibility
- _fnCompatCols( oOptions );
-
- // Map camel case parameters to their Hungarian counterparts
- _fnCamelToHungarian( DataTable.defaults.column, oOptions );
-
- /* Backwards compatibility for mDataProp */
- if ( oOptions.mDataProp !== undefined && !oOptions.mData )
- {
- oOptions.mData = oOptions.mDataProp;
- }
-
- if ( oOptions.sType )
- {
- oCol._sManualType = oOptions.sType;
- }
-
- // `class` is a reserved word in Javascript, so we need to provide
- // the ability to use a valid name for the camel case input
- if ( oOptions.className && ! oOptions.sClass )
- {
- oOptions.sClass = oOptions.className;
- }
-
- $.extend( oCol, oOptions );
- _fnMap( oCol, oOptions, "sWidth", "sWidthOrig" );
-
- /* iDataSort to be applied (backwards compatibility), but aDataSort will take
- * priority if defined
- */
- if ( oOptions.iDataSort !== undefined )
- {
- oCol.aDataSort = [ oOptions.iDataSort ];
- }
- _fnMap( oCol, oOptions, "aDataSort" );
- }
-
- /* Cache the data get and set functions for speed */
- var mDataSrc = oCol.mData;
- var mData = _fnGetObjectDataFn( mDataSrc );
- var mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;
-
- var attrTest = function( src ) {
- return typeof src === 'string' && src.indexOf('@') !== -1;
- };
- oCol._bAttrSrc = $.isPlainObject( mDataSrc ) && (
- attrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter)
- );
- oCol._setter = null;
-
- oCol.fnGetData = function (rowData, type, meta) {
- var innerData = mData( rowData, type, undefined, meta );
-
- return mRender && type ?
- mRender( innerData, type, rowData, meta ) :
- innerData;
- };
- oCol.fnSetData = function ( rowData, val, meta ) {
- return _fnSetObjectDataFn( mDataSrc )( rowData, val, meta );
- };
-
- // Indicate if DataTables should read DOM data as an object or array
- // Used in _fnGetRowElements
- if ( typeof mDataSrc !== 'number' ) {
- oSettings._rowReadObject = true;
- }
-
- /* Feature sorting overrides column specific when off */
- if ( !oSettings.oFeatures.bSort )
- {
- oCol.bSortable = false;
- th.addClass( oClasses.sSortableNone ); // Have to add class here as order event isn't called
- }
-
- /* Check that the class assignment is correct for sorting */
- var bAsc = $.inArray('asc', oCol.asSorting) !== -1;
- var bDesc = $.inArray('desc', oCol.asSorting) !== -1;
- if ( !oCol.bSortable || (!bAsc && !bDesc) )
- {
- oCol.sSortingClass = oClasses.sSortableNone;
- oCol.sSortingClassJUI = "";
- }
- else if ( bAsc && !bDesc )
- {
- oCol.sSortingClass = oClasses.sSortableAsc;
- oCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed;
- }
- else if ( !bAsc && bDesc )
- {
- oCol.sSortingClass = oClasses.sSortableDesc;
- oCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed;
- }
- else
- {
- oCol.sSortingClass = oClasses.sSortable;
- oCol.sSortingClassJUI = oClasses.sSortJUI;
- }
- }
-
-
- /**
- * Adjust the table column widths for new data. Note: you would probably want to
- * do a redraw after calling this function!
- * @param {object} settings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnAdjustColumnSizing ( settings )
- {
- /* Not interested in doing column width calculation if auto-width is disabled */
- if ( settings.oFeatures.bAutoWidth !== false )
- {
- var columns = settings.aoColumns;
-
- _fnCalculateColumnWidths( settings );
- for ( var i=0 , iLen=columns.length ; i<iLen ; i++ )
- {
- columns[i].nTh.style.width = columns[i].sWidth;
- }
- }
-
- var scroll = settings.oScroll;
- if ( scroll.sY !== '' || scroll.sX !== '')
- {
- _fnScrollDraw( settings );
- }
-
- _fnCallbackFire( settings, null, 'column-sizing', [settings] );
- }
-
-
- /**
- * Covert the index of a visible column to the index in the data array (take account
- * of hidden columns)
- * @param {object} oSettings dataTables settings object
- * @param {int} iMatch Visible column index to lookup
- * @returns {int} i the data index
- * @memberof DataTable#oApi
- */
- function _fnVisibleToColumnIndex( oSettings, iMatch )
- {
- var aiVis = _fnGetColumns( oSettings, 'bVisible' );
-
- return typeof aiVis[iMatch] === 'number' ?
- aiVis[iMatch] :
- null;
- }
-
-
- /**
- * Covert the index of an index in the data array and convert it to the visible
- * column index (take account of hidden columns)
- * @param {int} iMatch Column index to lookup
- * @param {object} oSettings dataTables settings object
- * @returns {int} i the data index
- * @memberof DataTable#oApi
- */
- function _fnColumnIndexToVisible( oSettings, iMatch )
- {
- var aiVis = _fnGetColumns( oSettings, 'bVisible' );
- var iPos = $.inArray( iMatch, aiVis );
-
- return iPos !== -1 ? iPos : null;
- }
-
-
- /**
- * Get the number of visible columns
- * @param {object} oSettings dataTables settings object
- * @returns {int} i the number of visible columns
- * @memberof DataTable#oApi
- */
- function _fnVisbleColumns( oSettings )
- {
- var vis = 0;
-
- // No reduce in IE8, use a loop for now
- $.each( oSettings.aoColumns, function ( i, col ) {
- if ( col.bVisible && $(col.nTh).css('display') !== 'none' ) {
- vis++;
- }
- } );
-
- return vis;
- }
-
-
- /**
- * Get an array of column indexes that match a given property
- * @param {object} oSettings dataTables settings object
- * @param {string} sParam Parameter in aoColumns to look for - typically
- * bVisible or bSearchable
- * @returns {array} Array of indexes with matched properties
- * @memberof DataTable#oApi
- */
- function _fnGetColumns( oSettings, sParam )
- {
- var a = [];
-
- $.map( oSettings.aoColumns, function(val, i) {
- if ( val[sParam] ) {
- a.push( i );
- }
- } );
-
- return a;
- }
-
-
- /**
- * Calculate the 'type' of a column
- * @param {object} settings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnColumnTypes ( settings )
- {
- var columns = settings.aoColumns;
- var data = settings.aoData;
- var types = DataTable.ext.type.detect;
- var i, ien, j, jen, k, ken;
- var col, cell, detectedType, cache;
-
- // For each column, spin over the
- for ( i=0, ien=columns.length ; i<ien ; i++ ) {
- col = columns[i];
- cache = [];
-
- if ( ! col.sType && col._sManualType ) {
- col.sType = col._sManualType;
- }
- else if ( ! col.sType ) {
- for ( j=0, jen=types.length ; j<jen ; j++ ) {
- for ( k=0, ken=data.length ; k<ken ; k++ ) {
- // Use a cache array so we only need to get the type data
- // from the formatter once (when using multiple detectors)
- if ( cache[k] === undefined ) {
- cache[k] = _fnGetCellData( settings, k, i, 'type' );
- }
-
- detectedType = types[j]( cache[k], settings );
-
- // If null, then this type can't apply to this column, so
- // rather than testing all cells, break out. There is an
- // exception for the last type which is `html`. We need to
- // scan all rows since it is possible to mix string and HTML
- // types
- if ( ! detectedType && j !== types.length-1 ) {
- break;
- }
-
- // Only a single match is needed for html type since it is
- // bottom of the pile and very similar to string
- if ( detectedType === 'html' ) {
- break;
- }
- }
-
- // Type is valid for all data points in the column - use this
- // type
- if ( detectedType ) {
- col.sType = detectedType;
- break;
- }
- }
-
- // Fall back - if no type was detected, always use string
- if ( ! col.sType ) {
- col.sType = 'string';
- }
- }
- }
- }
-
-
- /**
- * Take the column definitions and static columns arrays and calculate how
- * they relate to column indexes. The callback function will then apply the
- * definition found for a column to a suitable configuration object.
- * @param {object} oSettings dataTables settings object
- * @param {array} aoColDefs The aoColumnDefs array that is to be applied
- * @param {array} aoCols The aoColumns array that defines columns individually
- * @param {function} fn Callback function - takes two parameters, the calculated
- * column index and the definition for that column.
- * @memberof DataTable#oApi
- */
- function _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )
- {
- var i, iLen, j, jLen, k, kLen, def;
- var columns = oSettings.aoColumns;
-
- // Column definitions with aTargets
- if ( aoColDefs )
- {
- /* Loop over the definitions array - loop in reverse so first instance has priority */
- for ( i=aoColDefs.length-1 ; i>=0 ; i-- )
- {
- def = aoColDefs[i];
-
- /* Each definition can target multiple columns, as it is an array */
- var aTargets = def.targets !== undefined ?
- def.targets :
- def.aTargets;
-
- if ( ! $.isArray( aTargets ) )
- {
- aTargets = [ aTargets ];
- }
-
- for ( j=0, jLen=aTargets.length ; j<jLen ; j++ )
- {
- if ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 )
- {
- /* Add columns that we don't yet know about */
- while( columns.length <= aTargets[j] )
- {
- _fnAddColumn( oSettings );
- }
-
- /* Integer, basic index */
- fn( aTargets[j], def );
- }
- else if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 )
- {
- /* Negative integer, right to left column counting */
- fn( columns.length+aTargets[j], def );
- }
- else if ( typeof aTargets[j] === 'string' )
- {
- /* Class name matching on TH element */
- for ( k=0, kLen=columns.length ; k<kLen ; k++ )
- {
- if ( aTargets[j] == "_all" ||
- $(columns[k].nTh).hasClass( aTargets[j] ) )
- {
- fn( k, def );
- }
- }
- }
- }
- }
- }
-
- // Statically defined columns array
- if ( aoCols )
- {
- for ( i=0, iLen=aoCols.length ; i<iLen ; i++ )
- {
- fn( i, aoCols[i] );
- }
- }
- }
-
- /**
- * Add a data array to the table, creating DOM node etc. This is the parallel to
- * _fnGatherData, but for adding rows from a Javascript source, rather than a
- * DOM source.
- * @param {object} oSettings dataTables settings object
- * @param {array} aData data array to be added
- * @param {node} [nTr] TR element to add to the table - optional. If not given,
- * DataTables will create a row automatically
- * @param {array} [anTds] Array of TD|TH elements for the row - must be given
- * if nTr is.
- * @returns {int} >=0 if successful (index of new aoData entry), -1 if failed
- * @memberof DataTable#oApi
- */
- function _fnAddData ( oSettings, aDataIn, nTr, anTds )
- {
- /* Create the object for storing information about this new row */
- var iRow = oSettings.aoData.length;
- var oData = $.extend( true, {}, DataTable.models.oRow, {
- src: nTr ? 'dom' : 'data',
- idx: iRow
- } );
-
- oData._aData = aDataIn;
- oSettings.aoData.push( oData );
-
- /* Create the cells */
- var nTd, sThisType;
- var columns = oSettings.aoColumns;
-
- // Invalidate the column types as the new data needs to be revalidated
- for ( var i=0, iLen=columns.length ; i<iLen ; i++ )
- {
- columns[i].sType = null;
- }
-
- /* Add to the display array */
- oSettings.aiDisplayMaster.push( iRow );
-
- var id = oSettings.rowIdFn( aDataIn );
- if ( id !== undefined ) {
- oSettings.aIds[ id ] = oData;
- }
-
- /* Create the DOM information, or register it if already present */
- if ( nTr || ! oSettings.oFeatures.bDeferRender )
- {
- _fnCreateTr( oSettings, iRow, nTr, anTds );
- }
-
- return iRow;
- }
-
-
- /**
- * Add one or more TR elements to the table. Generally we'd expect to
- * use this for reading data from a DOM sourced table, but it could be
- * used for an TR element. Note that if a TR is given, it is used (i.e.
- * it is not cloned).
- * @param {object} settings dataTables settings object
- * @param {array|node|jQuery} trs The TR element(s) to add to the table
- * @returns {array} Array of indexes for the added rows
- * @memberof DataTable#oApi
- */
- function _fnAddTr( settings, trs )
- {
- var row;
-
- // Allow an individual node to be passed in
- if ( ! (trs instanceof $) ) {
- trs = $(trs);
- }
-
- return trs.map( function (i, el) {
- row = _fnGetRowElements( settings, el );
- return _fnAddData( settings, row.data, el, row.cells );
- } );
- }
-
-
- /**
- * Take a TR element and convert it to an index in aoData
- * @param {object} oSettings dataTables settings object
- * @param {node} n the TR element to find
- * @returns {int} index if the node is found, null if not
- * @memberof DataTable#oApi
- */
- function _fnNodeToDataIndex( oSettings, n )
- {
- return (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;
- }
-
-
- /**
- * Take a TD element and convert it into a column data index (not the visible index)
- * @param {object} oSettings dataTables settings object
- * @param {int} iRow The row number the TD/TH can be found in
- * @param {node} n The TD/TH element to find
- * @returns {int} index if the node is found, -1 if not
- * @memberof DataTable#oApi
- */
- function _fnNodeToColumnIndex( oSettings, iRow, n )
- {
- return $.inArray( n, oSettings.aoData[ iRow ].anCells );
- }
-
-
- /**
- * Get the data for a given cell from the internal cache, taking into account data mapping
- * @param {object} settings dataTables settings object
- * @param {int} rowIdx aoData row id
- * @param {int} colIdx Column index
- * @param {string} type data get type ('display', 'type' 'filter' 'sort')
- * @returns {*} Cell data
- * @memberof DataTable#oApi
- */
- function _fnGetCellData( settings, rowIdx, colIdx, type )
- {
- var draw = settings.iDraw;
- var col = settings.aoColumns[colIdx];
- var rowData = settings.aoData[rowIdx]._aData;
- var defaultContent = col.sDefaultContent;
- var cellData = col.fnGetData( rowData, type, {
- settings: settings,
- row: rowIdx,
- col: colIdx
- } );
-
- if ( cellData === undefined ) {
- if ( settings.iDrawError != draw && defaultContent === null ) {
- _fnLog( settings, 0, "Requested unknown parameter "+
- (typeof col.mData=='function' ? '{function}' : "'"+col.mData+"'")+
- " for row "+rowIdx+", column "+colIdx, 4 );
- settings.iDrawError = draw;
- }
- return defaultContent;
- }
-
- // When the data source is null and a specific data type is requested (i.e.
- // not the original data), we can use default column data
- if ( (cellData === rowData || cellData === null) && defaultContent !== null && type !== undefined ) {
- cellData = defaultContent;
- }
- else if ( typeof cellData === 'function' ) {
- // If the data source is a function, then we run it and use the return,
- // executing in the scope of the data object (for instances)
- return cellData.call( rowData );
- }
-
- if ( cellData === null && type == 'display' ) {
- return '';
- }
- return cellData;
- }
-
-
- /**
- * Set the value for a specific cell, into the internal data cache
- * @param {object} settings dataTables settings object
- * @param {int} rowIdx aoData row id
- * @param {int} colIdx Column index
- * @param {*} val Value to set
- * @memberof DataTable#oApi
- */
- function _fnSetCellData( settings, rowIdx, colIdx, val )
- {
- var col = settings.aoColumns[colIdx];
- var rowData = settings.aoData[rowIdx]._aData;
-
- col.fnSetData( rowData, val, {
- settings: settings,
- row: rowIdx,
- col: colIdx
- } );
- }
-
-
- // Private variable that is used to match action syntax in the data property object
- var __reArray = /\[.*?\]$/;
- var __reFn = /\(\)$/;
-
- /**
- * Split string on periods, taking into account escaped periods
- * @param {string} str String to split
- * @return {array} Split string
- */
- function _fnSplitObjNotation( str )
- {
- return $.map( str.match(/(\\.|[^\.])+/g) || [''], function ( s ) {
- return s.replace(/\\./g, '.');
- } );
- }
-
-
- /**
- * Return a function that can be used to get data from a source object, taking
- * into account the ability to use nested objects as a source
- * @param {string|int|function} mSource The data source for the object
- * @returns {function} Data get function
- * @memberof DataTable#oApi
- */
- function _fnGetObjectDataFn( mSource )
- {
- if ( $.isPlainObject( mSource ) )
- {
- /* Build an object of get functions, and wrap them in a single call */
- var o = {};
- $.each( mSource, function (key, val) {
- if ( val ) {
- o[key] = _fnGetObjectDataFn( val );
- }
- } );
-
- return function (data, type, row, meta) {
- var t = o[type] || o._;
- return t !== undefined ?
- t(data, type, row, meta) :
- data;
- };
- }
- else if ( mSource === null )
- {
- /* Give an empty string for rendering / sorting etc */
- return function (data) { // type, row and meta also passed, but not used
- return data;
- };
- }
- else if ( typeof mSource === 'function' )
- {
- return function (data, type, row, meta) {
- return mSource( data, type, row, meta );
- };
- }
- else if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 ||
- mSource.indexOf('[') !== -1 || mSource.indexOf('(') !== -1) )
- {
- /* If there is a . in the source string then the data source is in a
- * nested object so we loop over the data for each level to get the next
- * level down. On each loop we test for undefined, and if found immediately
- * return. This allows entire objects to be missing and sDefaultContent to
- * be used if defined, rather than throwing an error
- */
- var fetchData = function (data, type, src) {
- var arrayNotation, funcNotation, out, innerSrc;
-
- if ( src !== "" )
- {
- var a = _fnSplitObjNotation( src );
-
- for ( var i=0, iLen=a.length ; i<iLen ; i++ )
- {
- // Check if we are dealing with special notation
- arrayNotation = a[i].match(__reArray);
- funcNotation = a[i].match(__reFn);
-
- if ( arrayNotation )
- {
- // Array notation
- a[i] = a[i].replace(__reArray, '');
-
- // Condition allows simply [] to be passed in
- if ( a[i] !== "" ) {
- data = data[ a[i] ];
- }
- out = [];
-
- // Get the remainder of the nested object to get
- a.splice( 0, i+1 );
- innerSrc = a.join('.');
-
- // Traverse each entry in the array getting the properties requested
- if ( $.isArray( data ) ) {
- for ( var j=0, jLen=data.length ; j<jLen ; j++ ) {
- out.push( fetchData( data[j], type, innerSrc ) );
- }
- }
-
- // If a string is given in between the array notation indicators, that
- // is used to join the strings together, otherwise an array is returned
- var join = arrayNotation[0].substring(1, arrayNotation[0].length-1);
- data = (join==="") ? out : out.join(join);
-
- // The inner call to fetchData has already traversed through the remainder
- // of the source requested, so we exit from the loop
- break;
- }
- else if ( funcNotation )
- {
- // Function call
- a[i] = a[i].replace(__reFn, '');
- data = data[ a[i] ]();
- continue;
- }
-
- if ( data === null || data[ a[i] ] === undefined )
- {
- return undefined;
- }
- data = data[ a[i] ];
- }
- }
-
- return data;
- };
-
- return function (data, type) { // row and meta also passed, but not used
- return fetchData( data, type, mSource );
- };
- }
- else
- {
- /* Array or flat object mapping */
- return function (data, type) { // row and meta also passed, but not used
- return data[mSource];
- };
- }
- }
-
-
- /**
- * Return a function that can be used to set data from a source object, taking
- * into account the ability to use nested objects as a source
- * @param {string|int|function} mSource The data source for the object
- * @returns {function} Data set function
- * @memberof DataTable#oApi
- */
- function _fnSetObjectDataFn( mSource )
- {
- if ( $.isPlainObject( mSource ) )
- {
- /* Unlike get, only the underscore (global) option is used for for
- * setting data since we don't know the type here. This is why an object
- * option is not documented for `mData` (which is read/write), but it is
- * for `mRender` which is read only.
- */
- return _fnSetObjectDataFn( mSource._ );
- }
- else if ( mSource === null )
- {
- /* Nothing to do when the data source is null */
- return function () {};
- }
- else if ( typeof mSource === 'function' )
- {
- return function (data, val, meta) {
- mSource( data, 'set', val, meta );
- };
- }
- else if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 ||
- mSource.indexOf('[') !== -1 || mSource.indexOf('(') !== -1) )
- {
- /* Like the get, we need to get data from a nested object */
- var setData = function (data, val, src) {
- var a = _fnSplitObjNotation( src ), b;
- var aLast = a[a.length-1];
- var arrayNotation, funcNotation, o, innerSrc;
-
- for ( var i=0, iLen=a.length-1 ; i<iLen ; i++ )
- {
- // Check if we are dealing with an array notation request
- arrayNotation = a[i].match(__reArray);
- funcNotation = a[i].match(__reFn);
-
- if ( arrayNotation )
- {
- a[i] = a[i].replace(__reArray, '');
- data[ a[i] ] = [];
-
- // Get the remainder of the nested object to set so we can recurse
- b = a.slice();
- b.splice( 0, i+1 );
- innerSrc = b.join('.');
-
- // Traverse each entry in the array setting the properties requested
- if ( $.isArray( val ) )
- {
- for ( var j=0, jLen=val.length ; j<jLen ; j++ )
- {
- o = {};
- setData( o, val[j], innerSrc );
- data[ a[i] ].push( o );
- }
- }
- else
- {
- // We've been asked to save data to an array, but it
- // isn't array data to be saved. Best that can be done
- // is to just save the value.
- data[ a[i] ] = val;
- }
-
- // The inner call to setData has already traversed through the remainder
- // of the source and has set the data, thus we can exit here
- return;
- }
- else if ( funcNotation )
- {
- // Function call
- a[i] = a[i].replace(__reFn, '');
- data = data[ a[i] ]( val );
- }
-
- // If the nested object doesn't currently exist - since we are
- // trying to set the value - create it
- if ( data[ a[i] ] === null || data[ a[i] ] === undefined )
- {
- data[ a[i] ] = {};
- }
- data = data[ a[i] ];
- }
-
- // Last item in the input - i.e, the actual set
- if ( aLast.match(__reFn ) )
- {
- // Function call
- data = data[ aLast.replace(__reFn, '') ]( val );
- }
- else
- {
- // If array notation is used, we just want to strip it and use the property name
- // and assign the value. If it isn't used, then we get the result we want anyway
- data[ aLast.replace(__reArray, '') ] = val;
- }
- };
-
- return function (data, val) { // meta is also passed in, but not used
- return setData( data, val, mSource );
- };
- }
- else
- {
- /* Array or flat object mapping */
- return function (data, val) { // meta is also passed in, but not used
- data[mSource] = val;
- };
- }
- }
-
-
- /**
- * Return an array with the full table data
- * @param {object} oSettings dataTables settings object
- * @returns array {array} aData Master data array
- * @memberof DataTable#oApi
- */
- function _fnGetDataMaster ( settings )
- {
- return _pluck( settings.aoData, '_aData' );
- }
-
-
- /**
- * Nuke the table
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnClearTable( settings )
- {
- settings.aoData.length = 0;
- settings.aiDisplayMaster.length = 0;
- settings.aiDisplay.length = 0;
- settings.aIds = {};
- }
-
-
- /**
- * Take an array of integers (index array) and remove a target integer (value - not
- * the key!)
- * @param {array} a Index array to target
- * @param {int} iTarget value to find
- * @memberof DataTable#oApi
- */
- function _fnDeleteIndex( a, iTarget, splice )
- {
- var iTargetIndex = -1;
-
- for ( var i=0, iLen=a.length ; i<iLen ; i++ )
- {
- if ( a[i] == iTarget )
- {
- iTargetIndex = i;
- }
- else if ( a[i] > iTarget )
- {
- a[i]--;
- }
- }
-
- if ( iTargetIndex != -1 && splice === undefined )
- {
- a.splice( iTargetIndex, 1 );
- }
- }
-
-
- /**
- * Mark cached data as invalid such that a re-read of the data will occur when
- * the cached data is next requested. Also update from the data source object.
- *
- * @param {object} settings DataTables settings object
- * @param {int} rowIdx Row index to invalidate
- * @param {string} [src] Source to invalidate from: undefined, 'auto', 'dom'
- * or 'data'
- * @param {int} [colIdx] Column index to invalidate. If undefined the whole
- * row will be invalidated
- * @memberof DataTable#oApi
- *
- * @todo For the modularisation of v1.11 this will need to become a callback, so
- * the sort and filter methods can subscribe to it. That will required
- * initialisation options for sorting, which is why it is not already baked in
- */
- function _fnInvalidate( settings, rowIdx, src, colIdx )
- {
- var row = settings.aoData[ rowIdx ];
- var i, ien;
- var cellWrite = function ( cell, col ) {
- // This is very frustrating, but in IE if you just write directly
- // to innerHTML, and elements that are overwritten are GC'ed,
- // even if there is a reference to them elsewhere
- while ( cell.childNodes.length ) {
- cell.removeChild( cell.firstChild );
- }
-
- cell.innerHTML = _fnGetCellData( settings, rowIdx, col, 'display' );
- };
-
- // Are we reading last data from DOM or the data object?
- if ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {
- // Read the data from the DOM
- row._aData = _fnGetRowElements(
- settings, row, colIdx, colIdx === undefined ? undefined : row._aData
- )
- .data;
- }
- else {
- // Reading from data object, update the DOM
- var cells = row.anCells;
-
- if ( cells ) {
- if ( colIdx !== undefined ) {
- cellWrite( cells[colIdx], colIdx );
- }
- else {
- for ( i=0, ien=cells.length ; i<ien ; i++ ) {
- cellWrite( cells[i], i );
- }
- }
- }
- }
-
- // For both row and cell invalidation, the cached data for sorting and
- // filtering is nulled out
- row._aSortData = null;
- row._aFilterData = null;
-
- // Invalidate the type for a specific column (if given) or all columns since
- // the data might have changed
- var cols = settings.aoColumns;
- if ( colIdx !== undefined ) {
- cols[ colIdx ].sType = null;
- }
- else {
- for ( i=0, ien=cols.length ; i<ien ; i++ ) {
- cols[i].sType = null;
- }
-
- // Update DataTables special `DT_*` attributes for the row
- _fnRowAttributes( settings, row );
- }
- }
-
-
- /**
- * Build a data source object from an HTML row, reading the contents of the
- * cells that are in the row.
- *
- * @param {object} settings DataTables settings object
- * @param {node|object} TR element from which to read data or existing row
- * object from which to re-read the data from the cells
- * @param {int} [colIdx] Optional column index
- * @param {array|object} [d] Data source object. If `colIdx` is given then this
- * parameter should also be given and will be used to write the data into.
- * Only the column in question will be written
- * @returns {object} Object with two parameters: `data` the data read, in
- * document order, and `cells` and array of nodes (they can be useful to the
- * caller, so rather than needing a second traversal to get them, just return
- * them from here).
- * @memberof DataTable#oApi
- */
- function _fnGetRowElements( settings, row, colIdx, d )
- {
- var
- tds = [],
- td = row.firstChild,
- name, col, o, i=0, contents,
- columns = settings.aoColumns,
- objectRead = settings._rowReadObject;
-
- // Allow the data object to be passed in, or construct
- d = d !== undefined ?
- d :
- objectRead ?
- {} :
- [];
-
- var attr = function ( str, td ) {
- if ( typeof str === 'string' ) {
- var idx = str.indexOf('@');
-
- if ( idx !== -1 ) {
- var attr = str.substring( idx+1 );
- var setter = _fnSetObjectDataFn( str );
- setter( d, td.getAttribute( attr ) );
- }
- }
- };
-
- // Read data from a cell and store into the data object
- var cellProcess = function ( cell ) {
- if ( colIdx === undefined || colIdx === i ) {
- col = columns[i];
- contents = $.trim(cell.innerHTML);
-
- if ( col && col._bAttrSrc ) {
- var setter = _fnSetObjectDataFn( col.mData._ );
- setter( d, contents );
-
- attr( col.mData.sort, cell );
- attr( col.mData.type, cell );
- attr( col.mData.filter, cell );
- }
- else {
- // Depending on the `data` option for the columns the data can
- // be read to either an object or an array.
- if ( objectRead ) {
- if ( ! col._setter ) {
- // Cache the setter function
- col._setter = _fnSetObjectDataFn( col.mData );
- }
- col._setter( d, contents );
- }
- else {
- d[i] = contents;
- }
- }
- }
-
- i++;
- };
-
- if ( td ) {
- // `tr` element was passed in
- while ( td ) {
- name = td.nodeName.toUpperCase();
-
- if ( name == "TD" || name == "TH" ) {
- cellProcess( td );
- tds.push( td );
- }
-
- td = td.nextSibling;
- }
- }
- else {
- // Existing row object passed in
- tds = row.anCells;
-
- for ( var j=0, jen=tds.length ; j<jen ; j++ ) {
- cellProcess( tds[j] );
- }
- }
-
- // Read the ID from the DOM if present
- var rowNode = row.firstChild ? row : row.nTr;
-
- if ( rowNode ) {
- var id = rowNode.getAttribute( 'id' );
-
- if ( id ) {
- _fnSetObjectDataFn( settings.rowId )( d, id );
- }
- }
-
- return {
- data: d,
- cells: tds
- };
- }
- /**
- * Create a new TR element (and it's TD children) for a row
- * @param {object} oSettings dataTables settings object
- * @param {int} iRow Row to consider
- * @param {node} [nTrIn] TR element to add to the table - optional. If not given,
- * DataTables will create a row automatically
- * @param {array} [anTds] Array of TD|TH elements for the row - must be given
- * if nTr is.
- * @memberof DataTable#oApi
- */
- function _fnCreateTr ( oSettings, iRow, nTrIn, anTds )
- {
- var
- row = oSettings.aoData[iRow],
- rowData = row._aData,
- cells = [],
- nTr, nTd, oCol,
- i, iLen;
-
- if ( row.nTr === null )
- {
- nTr = nTrIn || document.createElement('tr');
-
- row.nTr = nTr;
- row.anCells = cells;
-
- /* Use a private property on the node to allow reserve mapping from the node
- * to the aoData array for fast look up
- */
- nTr._DT_RowIndex = iRow;
-
- /* Special parameters can be given by the data source to be used on the row */
- _fnRowAttributes( oSettings, row );
-
- /* Process each column */
- for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
- {
- oCol = oSettings.aoColumns[i];
-
- nTd = nTrIn ? anTds[i] : document.createElement( oCol.sCellType );
- nTd._DT_CellIndex = {
- row: iRow,
- column: i
- };
-
- cells.push( nTd );
-
- // Need to create the HTML if new, or if a rendering function is defined
- if ( (!nTrIn || oCol.mRender || oCol.mData !== i) &&
- (!$.isPlainObject(oCol.mData) || oCol.mData._ !== i+'.display')
- ) {
- nTd.innerHTML = _fnGetCellData( oSettings, iRow, i, 'display' );
- }
-
- /* Add user defined class */
- if ( oCol.sClass )
- {
- nTd.className += ' '+oCol.sClass;
- }
-
- // Visibility - add or remove as required
- if ( oCol.bVisible && ! nTrIn )
- {
- nTr.appendChild( nTd );
- }
- else if ( ! oCol.bVisible && nTrIn )
- {
- nTd.parentNode.removeChild( nTd );
- }
-
- if ( oCol.fnCreatedCell )
- {
- oCol.fnCreatedCell.call( oSettings.oInstance,
- nTd, _fnGetCellData( oSettings, iRow, i ), rowData, iRow, i
- );
- }
- }
-
- _fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [nTr, rowData, iRow] );
- }
-
- // Remove once webkit bug 131819 and Chromium bug 365619 have been resolved
- // and deployed
- row.nTr.setAttribute( 'role', 'row' );
- }
-
-
- /**
- * Add attributes to a row based on the special `DT_*` parameters in a data
- * source object.
- * @param {object} settings DataTables settings object
- * @param {object} DataTables row object for the row to be modified
- * @memberof DataTable#oApi
- */
- function _fnRowAttributes( settings, row )
- {
- var tr = row.nTr;
- var data = row._aData;
-
- if ( tr ) {
- var id = settings.rowIdFn( data );
-
- if ( id ) {
- tr.id = id;
- }
-
- if ( data.DT_RowClass ) {
- // Remove any classes added by DT_RowClass before
- var a = data.DT_RowClass.split(' ');
- row.__rowc = row.__rowc ?
- _unique( row.__rowc.concat( a ) ) :
- a;
-
- $(tr)
- .removeClass( row.__rowc.join(' ') )
- .addClass( data.DT_RowClass );
- }
-
- if ( data.DT_RowAttr ) {
- $(tr).attr( data.DT_RowAttr );
- }
-
- if ( data.DT_RowData ) {
- $(tr).data( data.DT_RowData );
- }
- }
- }
-
-
- /**
- * Create the HTML header for the table
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnBuildHead( oSettings )
- {
- var i, ien, cell, row, column;
- var thead = oSettings.nTHead;
- var tfoot = oSettings.nTFoot;
- var createHeader = $('th, td', thead).length === 0;
- var classes = oSettings.oClasses;
- var columns = oSettings.aoColumns;
-
- if ( createHeader ) {
- row = $('<tr/>').appendTo( thead );
- }
-
- for ( i=0, ien=columns.length ; i<ien ; i++ ) {
- column = columns[i];
- cell = $( column.nTh ).addClass( column.sClass );
-
- if ( createHeader ) {
- cell.appendTo( row );
- }
-
- // 1.11 move into sorting
- if ( oSettings.oFeatures.bSort ) {
- cell.addClass( column.sSortingClass );
-
- if ( column.bSortable !== false ) {
- cell
- .attr( 'tabindex', oSettings.iTabIndex )
- .attr( 'aria-controls', oSettings.sTableId );
-
- _fnSortAttachListener( oSettings, column.nTh, i );
- }
- }
-
- if ( column.sTitle != cell[0].innerHTML ) {
- cell.html( column.sTitle );
- }
-
- _fnRenderer( oSettings, 'header' )(
- oSettings, cell, column, classes
- );
- }
-
- if ( createHeader ) {
- _fnDetectHeader( oSettings.aoHeader, thead );
- }
-
- /* ARIA role for the rows */
- $(thead).find('>tr').attr('role', 'row');
-
- /* Deal with the footer - add classes if required */
- $(thead).find('>tr>th, >tr>td').addClass( classes.sHeaderTH );
- $(tfoot).find('>tr>th, >tr>td').addClass( classes.sFooterTH );
-
- // Cache the footer cells. Note that we only take the cells from the first
- // row in the footer. If there is more than one row the user wants to
- // interact with, they need to use the table().foot() method. Note also this
- // allows cells to be used for multiple columns using colspan
- if ( tfoot !== null ) {
- var cells = oSettings.aoFooter[0];
-
- for ( i=0, ien=cells.length ; i<ien ; i++ ) {
- column = columns[i];
- column.nTf = cells[i].cell;
-
- if ( column.sClass ) {
- $(column.nTf).addClass( column.sClass );
- }
- }
- }
- }
-
-
- /**
- * Draw the header (or footer) element based on the column visibility states. The
- * methodology here is to use the layout array from _fnDetectHeader, modified for
- * the instantaneous column visibility, to construct the new layout. The grid is
- * traversed over cell at a time in a rows x columns grid fashion, although each
- * cell insert can cover multiple elements in the grid - which is tracks using the
- * aApplied array. Cell inserts in the grid will only occur where there isn't
- * already a cell in that position.
- * @param {object} oSettings dataTables settings object
- * @param array {objects} aoSource Layout array from _fnDetectHeader
- * @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc,
- * @memberof DataTable#oApi
- */
- function _fnDrawHead( oSettings, aoSource, bIncludeHidden )
- {
- var i, iLen, j, jLen, k, kLen, n, nLocalTr;
- var aoLocal = [];
- var aApplied = [];
- var iColumns = oSettings.aoColumns.length;
- var iRowspan, iColspan;
-
- if ( ! aoSource )
- {
- return;
- }
-
- if ( bIncludeHidden === undefined )
- {
- bIncludeHidden = false;
- }
-
- /* Make a copy of the master layout array, but without the visible columns in it */
- for ( i=0, iLen=aoSource.length ; i<iLen ; i++ )
- {
- aoLocal[i] = aoSource[i].slice();
- aoLocal[i].nTr = aoSource[i].nTr;
-
- /* Remove any columns which are currently hidden */
- for ( j=iColumns-1 ; j>=0 ; j-- )
- {
- if ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )
- {
- aoLocal[i].splice( j, 1 );
- }
- }
-
- /* Prep the applied array - it needs an element for each row */
- aApplied.push( [] );
- }
-
- for ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )
- {
- nLocalTr = aoLocal[i].nTr;
-
- /* All cells are going to be replaced, so empty out the row */
- if ( nLocalTr )
- {
- while( (n = nLocalTr.firstChild) )
- {
- nLocalTr.removeChild( n );
- }
- }
-
- for ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )
- {
- iRowspan = 1;
- iColspan = 1;
-
- /* Check to see if there is already a cell (row/colspan) covering our target
- * insert point. If there is, then there is nothing to do.
- */
- if ( aApplied[i][j] === undefined )
- {
- nLocalTr.appendChild( aoLocal[i][j].cell );
- aApplied[i][j] = 1;
-
- /* Expand the cell to cover as many rows as needed */
- while ( aoLocal[i+iRowspan] !== undefined &&
- aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )
- {
- aApplied[i+iRowspan][j] = 1;
- iRowspan++;
- }
-
- /* Expand the cell to cover as many columns as needed */
- while ( aoLocal[i][j+iColspan] !== undefined &&
- aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )
- {
- /* Must update the applied array over the rows for the columns */
- for ( k=0 ; k<iRowspan ; k++ )
- {
- aApplied[i+k][j+iColspan] = 1;
- }
- iColspan++;
- }
-
- /* Do the actual expansion in the DOM */
- $(aoLocal[i][j].cell)
- .attr('rowspan', iRowspan)
- .attr('colspan', iColspan);
- }
- }
- }
- }
-
-
- /**
- * Insert the required TR nodes into the table for display
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnDraw( oSettings )
- {
- /* Provide a pre-callback function which can be used to cancel the draw is false is returned */
- var aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );
- if ( $.inArray( false, aPreDraw ) !== -1 )
- {
- _fnProcessingDisplay( oSettings, false );
- return;
- }
-
- var i, iLen, n;
- var anRows = [];
- var iRowCount = 0;
- var asStripeClasses = oSettings.asStripeClasses;
- var iStripes = asStripeClasses.length;
- var iOpenRows = oSettings.aoOpenRows.length;
- var oLang = oSettings.oLanguage;
- var iInitDisplayStart = oSettings.iInitDisplayStart;
- var bServerSide = _fnDataSource( oSettings ) == 'ssp';
- var aiDisplay = oSettings.aiDisplay;
-
- oSettings.bDrawing = true;
-
- /* Check and see if we have an initial draw position from state saving */
- if ( iInitDisplayStart !== undefined && iInitDisplayStart !== -1 )
- {
- oSettings._iDisplayStart = bServerSide ?
- iInitDisplayStart :
- iInitDisplayStart >= oSettings.fnRecordsDisplay() ?
- 0 :
- iInitDisplayStart;
-
- oSettings.iInitDisplayStart = -1;
- }
-
- var iDisplayStart = oSettings._iDisplayStart;
- var iDisplayEnd = oSettings.fnDisplayEnd();
-
- /* Server-side processing draw intercept */
- if ( oSettings.bDeferLoading )
- {
- oSettings.bDeferLoading = false;
- oSettings.iDraw++;
- _fnProcessingDisplay( oSettings, false );
- }
- else if ( !bServerSide )
- {
- oSettings.iDraw++;
- }
- else if ( !oSettings.bDestroying && !_fnAjaxUpdate( oSettings ) )
- {
- return;
- }
-
- if ( aiDisplay.length !== 0 )
- {
- var iStart = bServerSide ? 0 : iDisplayStart;
- var iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;
-
- for ( var j=iStart ; j<iEnd ; j++ )
- {
- var iDataIndex = aiDisplay[j];
- var aoData = oSettings.aoData[ iDataIndex ];
- if ( aoData.nTr === null )
- {
- _fnCreateTr( oSettings, iDataIndex );
- }
-
- var nRow = aoData.nTr;
-
- /* Remove the old striping classes and then add the new one */
- if ( iStripes !== 0 )
- {
- var sStripe = asStripeClasses[ iRowCount % iStripes ];
- if ( aoData._sRowStripe != sStripe )
- {
- $(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe );
- aoData._sRowStripe = sStripe;
- }
- }
-
- // Row callback functions - might want to manipulate the row
- // iRowCount and j are not currently documented. Are they at all
- // useful?
- _fnCallbackFire( oSettings, 'aoRowCallback', null,
- [nRow, aoData._aData, iRowCount, j] );
-
- anRows.push( nRow );
- iRowCount++;
- }
- }
- else
- {
- /* Table is empty - create a row with an empty message in it */
- var sZero = oLang.sZeroRecords;
- if ( oSettings.iDraw == 1 && _fnDataSource( oSettings ) == 'ajax' )
- {
- sZero = oLang.sLoadingRecords;
- }
- else if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )
- {
- sZero = oLang.sEmptyTable;
- }
-
- anRows[ 0 ] = $( '<tr/>', { 'class': iStripes ? asStripeClasses[0] : '' } )
- .append( $('<td />', {
- 'valign': 'top',
- 'colSpan': _fnVisbleColumns( oSettings ),
- 'class': oSettings.oClasses.sRowEmpty
- } ).html( sZero ) )[0];
- }
-
- /* Header and footer callbacks */
- _fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],
- _fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );
-
- _fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],
- _fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );
-
- var body = $(oSettings.nTBody);
-
- body.children().detach();
- body.append( $(anRows) );
-
- /* Call all required callback functions for the end of a draw */
- _fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );
-
- /* Draw is complete, sorting and filtering must be as well */
- oSettings.bSorted = false;
- oSettings.bFiltered = false;
- oSettings.bDrawing = false;
- }
-
-
- /**
- * Redraw the table - taking account of the various features which are enabled
- * @param {object} oSettings dataTables settings object
- * @param {boolean} [holdPosition] Keep the current paging position. By default
- * the paging is reset to the first page
- * @memberof DataTable#oApi
- */
- function _fnReDraw( settings, holdPosition )
- {
- var
- features = settings.oFeatures,
- sort = features.bSort,
- filter = features.bFilter;
-
- if ( sort ) {
- _fnSort( settings );
- }
-
- if ( filter ) {
- _fnFilterComplete( settings, settings.oPreviousSearch );
- }
- else {
- // No filtering, so we want to just use the display master
- settings.aiDisplay = settings.aiDisplayMaster.slice();
- }
-
- if ( holdPosition !== true ) {
- settings._iDisplayStart = 0;
- }
-
- // Let any modules know about the draw hold position state (used by
- // scrolling internally)
- settings._drawHold = holdPosition;
-
- _fnDraw( settings );
-
- settings._drawHold = false;
- }
-
-
- /**
- * Add the options to the page HTML for the table
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnAddOptionsHtml ( oSettings )
- {
- var classes = oSettings.oClasses;
- var table = $(oSettings.nTable);
- var holding = $('<div/>').insertBefore( table ); // Holding element for speed
- var features = oSettings.oFeatures;
-
- // All DataTables are wrapped in a div
- var insert = $('<div/>', {
- id: oSettings.sTableId+'_wrapper',
- 'class': classes.sWrapper + (oSettings.nTFoot ? '' : ' '+classes.sNoFooter)
- } );
-
- oSettings.nHolding = holding[0];
- oSettings.nTableWrapper = insert[0];
- oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;
-
- /* Loop over the user set positioning and place the elements as needed */
- var aDom = oSettings.sDom.split('');
- var featureNode, cOption, nNewNode, cNext, sAttr, j;
- for ( var i=0 ; i<aDom.length ; i++ )
- {
- featureNode = null;
- cOption = aDom[i];
-
- if ( cOption == '<' )
- {
- /* New container div */
- nNewNode = $('<div/>')[0];
-
- /* Check to see if we should append an id and/or a class name to the container */
- cNext = aDom[i+1];
- if ( cNext == "'" || cNext == '"' )
- {
- sAttr = "";
- j = 2;
- while ( aDom[i+j] != cNext )
- {
- sAttr += aDom[i+j];
- j++;
- }
-
- /* Replace jQuery UI constants @todo depreciated */
- if ( sAttr == "H" )
- {
- sAttr = classes.sJUIHeader;
- }
- else if ( sAttr == "F" )
- {
- sAttr = classes.sJUIFooter;
- }
-
- /* The attribute can be in the format of "#id.class", "#id" or "class" This logic
- * breaks the string into parts and applies them as needed
- */
- if ( sAttr.indexOf('.') != -1 )
- {
- var aSplit = sAttr.split('.');
- nNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);
- nNewNode.className = aSplit[1];
- }
- else if ( sAttr.charAt(0) == "#" )
- {
- nNewNode.id = sAttr.substr(1, sAttr.length-1);
- }
- else
- {
- nNewNode.className = sAttr;
- }
-
- i += j; /* Move along the position array */
- }
-
- insert.append( nNewNode );
- insert = $(nNewNode);
- }
- else if ( cOption == '>' )
- {
- /* End container div */
- insert = insert.parent();
- }
- // @todo Move options into their own plugins?
- else if ( cOption == 'l' && features.bPaginate && features.bLengthChange )
- {
- /* Length */
- featureNode = _fnFeatureHtmlLength( oSettings );
- }
- else if ( cOption == 'f' && features.bFilter )
- {
- /* Filter */
- featureNode = _fnFeatureHtmlFilter( oSettings );
- }
- else if ( cOption == 'r' && features.bProcessing )
- {
- /* pRocessing */
- featureNode = _fnFeatureHtmlProcessing( oSettings );
- }
- else if ( cOption == 't' )
- {
- /* Table */
- featureNode = _fnFeatureHtmlTable( oSettings );
- }
- else if ( cOption == 'i' && features.bInfo )
- {
- /* Info */
- featureNode = _fnFeatureHtmlInfo( oSettings );
- }
- else if ( cOption == 'p' && features.bPaginate )
- {
- /* Pagination */
- featureNode = _fnFeatureHtmlPaginate( oSettings );
- }
- else if ( DataTable.ext.feature.length !== 0 )
- {
- /* Plug-in features */
- var aoFeatures = DataTable.ext.feature;
- for ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )
- {
- if ( cOption == aoFeatures[k].cFeature )
- {
- featureNode = aoFeatures[k].fnInit( oSettings );
- break;
- }
- }
- }
-
- /* Add to the 2D features array */
- if ( featureNode )
- {
- var aanFeatures = oSettings.aanFeatures;
-
- if ( ! aanFeatures[cOption] )
- {
- aanFeatures[cOption] = [];
- }
-
- aanFeatures[cOption].push( featureNode );
- insert.append( featureNode );
- }
- }
-
- /* Built our DOM structure - replace the holding div with what we want */
- holding.replaceWith( insert );
- oSettings.nHolding = null;
- }
-
-
- /**
- * Use the DOM source to create up an array of header cells. The idea here is to
- * create a layout grid (array) of rows x columns, which contains a reference
- * to the cell that that point in the grid (regardless of col/rowspan), such that
- * any column / row could be removed and the new grid constructed
- * @param array {object} aLayout Array to store the calculated layout in
- * @param {node} nThead The header/footer element for the table
- * @memberof DataTable#oApi
- */
- function _fnDetectHeader ( aLayout, nThead )
- {
- var nTrs = $(nThead).children('tr');
- var nTr, nCell;
- var i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;
- var bUnique;
- var fnShiftCol = function ( a, i, j ) {
- var k = a[i];
- while ( k[j] ) {
- j++;
- }
- return j;
- };
-
- aLayout.splice( 0, aLayout.length );
-
- /* We know how many rows there are in the layout - so prep it */
- for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
- {
- aLayout.push( [] );
- }
-
- /* Calculate a layout array */
- for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
- {
- nTr = nTrs[i];
- iColumn = 0;
-
- /* For every cell in the row... */
- nCell = nTr.firstChild;
- while ( nCell ) {
- if ( nCell.nodeName.toUpperCase() == "TD" ||
- nCell.nodeName.toUpperCase() == "TH" )
- {
- /* Get the col and rowspan attributes from the DOM and sanitise them */
- iColspan = nCell.getAttribute('colspan') * 1;
- iRowspan = nCell.getAttribute('rowspan') * 1;
- iColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;
- iRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;
-
- /* There might be colspan cells already in this row, so shift our target
- * accordingly
- */
- iColShifted = fnShiftCol( aLayout, i, iColumn );
-
- /* Cache calculation for unique columns */
- bUnique = iColspan === 1 ? true : false;
-
- /* If there is col / rowspan, copy the information into the layout grid */
- for ( l=0 ; l<iColspan ; l++ )
- {
- for ( k=0 ; k<iRowspan ; k++ )
- {
- aLayout[i+k][iColShifted+l] = {
- "cell": nCell,
- "unique": bUnique
- };
- aLayout[i+k].nTr = nTr;
- }
- }
- }
- nCell = nCell.nextSibling;
- }
- }
- }
-
-
- /**
- * Get an array of unique th elements, one for each column
- * @param {object} oSettings dataTables settings object
- * @param {node} nHeader automatically detect the layout from this node - optional
- * @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional
- * @returns array {node} aReturn list of unique th's
- * @memberof DataTable#oApi
- */
- function _fnGetUniqueThs ( oSettings, nHeader, aLayout )
- {
- var aReturn = [];
- if ( !aLayout )
- {
- aLayout = oSettings.aoHeader;
- if ( nHeader )
- {
- aLayout = [];
- _fnDetectHeader( aLayout, nHeader );
- }
- }
-
- for ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )
- {
- for ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ )
- {
- if ( aLayout[i][j].unique &&
- (!aReturn[j] || !oSettings.bSortCellsTop) )
- {
- aReturn[j] = aLayout[i][j].cell;
- }
- }
- }
-
- return aReturn;
- }
-
- /**
- * Create an Ajax call based on the table's settings, taking into account that
- * parameters can have multiple forms, and backwards compatibility.
- *
- * @param {object} oSettings dataTables settings object
- * @param {array} data Data to send to the server, required by
- * DataTables - may be augmented by developer callbacks
- * @param {function} fn Callback function to run when data is obtained
- */
- function _fnBuildAjax( oSettings, data, fn )
- {
- // Compatibility with 1.9-, allow fnServerData and event to manipulate
- _fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [data] );
-
- // Convert to object based for 1.10+ if using the old array scheme which can
- // come from server-side processing or serverParams
- if ( data && $.isArray(data) ) {
- var tmp = {};
- var rbracket = /(.*?)\[\]$/;
-
- $.each( data, function (key, val) {
- var match = val.name.match(rbracket);
-
- if ( match ) {
- // Support for arrays
- var name = match[0];
-
- if ( ! tmp[ name ] ) {
- tmp[ name ] = [];
- }
- tmp[ name ].push( val.value );
- }
- else {
- tmp[val.name] = val.value;
- }
- } );
- data = tmp;
- }
-
- var ajaxData;
- var ajax = oSettings.ajax;
- var instance = oSettings.oInstance;
- var callback = function ( json ) {
- _fnCallbackFire( oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR] );
- fn( json );
- };
-
- if ( $.isPlainObject( ajax ) && ajax.data )
- {
- ajaxData = ajax.data;
-
- var newData = $.isFunction( ajaxData ) ?
- ajaxData( data, oSettings ) : // fn can manipulate data or return
- ajaxData; // an object object or array to merge
-
- // If the function returned something, use that alone
- data = $.isFunction( ajaxData ) && newData ?
- newData :
- $.extend( true, data, newData );
-
- // Remove the data property as we've resolved it already and don't want
- // jQuery to do it again (it is restored at the end of the function)
- delete ajax.data;
- }
-
- var baseAjax = {
- "data": data,
- "success": function (json) {
- var error = json.error || json.sError;
- if ( error ) {
- _fnLog( oSettings, 0, error );
- }
-
- oSettings.json = json;
- callback( json );
- },
- "dataType": "json",
- "cache": false,
- "type": oSettings.sServerMethod,
- "error": function (xhr, error, thrown) {
- var ret = _fnCallbackFire( oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR] );
-
- if ( $.inArray( true, ret ) === -1 ) {
- if ( error == "parsererror" ) {
- _fnLog( oSettings, 0, 'Invalid JSON response', 1 );
- }
- else if ( xhr.readyState === 4 ) {
- _fnLog( oSettings, 0, 'Ajax error', 7 );
- }
- }
-
- _fnProcessingDisplay( oSettings, false );
- }
- };
-
- // Store the data submitted for the API
- oSettings.oAjaxData = data;
-
- // Allow plug-ins and external processes to modify the data
- _fnCallbackFire( oSettings, null, 'preXhr', [oSettings, data] );
-
- if ( oSettings.fnServerData )
- {
- // DataTables 1.9- compatibility
- oSettings.fnServerData.call( instance,
- oSettings.sAjaxSource,
- $.map( data, function (val, key) { // Need to convert back to 1.9 trad format
- return { name: key, value: val };
- } ),
- callback,
- oSettings
- );
- }
- else if ( oSettings.sAjaxSource || typeof ajax === 'string' )
- {
- // DataTables 1.9- compatibility
- oSettings.jqXHR = $.ajax( $.extend( baseAjax, {
- url: ajax || oSettings.sAjaxSource
- } ) );
- }
- else if ( $.isFunction( ajax ) )
- {
- // Is a function - let the caller define what needs to be done
- oSettings.jqXHR = ajax.call( instance, data, callback, oSettings );
- }
- else
- {
- // Object to extend the base settings
- oSettings.jqXHR = $.ajax( $.extend( baseAjax, ajax ) );
-
- // Restore for next time around
- ajax.data = ajaxData;
- }
- }
-
-
- /**
- * Update the table using an Ajax call
- * @param {object} settings dataTables settings object
- * @returns {boolean} Block the table drawing or not
- * @memberof DataTable#oApi
- */
- function _fnAjaxUpdate( settings )
- {
- if ( settings.bAjaxDataGet ) {
- settings.iDraw++;
- _fnProcessingDisplay( settings, true );
-
- _fnBuildAjax(
- settings,
- _fnAjaxParameters( settings ),
- function(json) {
- _fnAjaxUpdateDraw( settings, json );
- }
- );
-
- return false;
- }
- return true;
- }
-
-
- /**
- * Build up the parameters in an object needed for a server-side processing
- * request. Note that this is basically done twice, is different ways - a modern
- * method which is used by default in DataTables 1.10 which uses objects and
- * arrays, or the 1.9- method with is name / value pairs. 1.9 method is used if
- * the sAjaxSource option is used in the initialisation, or the legacyAjax
- * option is set.
- * @param {object} oSettings dataTables settings object
- * @returns {bool} block the table drawing or not
- * @memberof DataTable#oApi
- */
- function _fnAjaxParameters( settings )
- {
- var
- columns = settings.aoColumns,
- columnCount = columns.length,
- features = settings.oFeatures,
- preSearch = settings.oPreviousSearch,
- preColSearch = settings.aoPreSearchCols,
- i, data = [], dataProp, column, columnSearch,
- sort = _fnSortFlatten( settings ),
- displayStart = settings._iDisplayStart,
- displayLength = features.bPaginate !== false ?
- settings._iDisplayLength :
- -1;
-
- var param = function ( name, value ) {
- data.push( { 'name': name, 'value': value } );
- };
-
- // DataTables 1.9- compatible method
- param( 'sEcho', settings.iDraw );
- param( 'iColumns', columnCount );
- param( 'sColumns', _pluck( columns, 'sName' ).join(',') );
- param( 'iDisplayStart', displayStart );
- param( 'iDisplayLength', displayLength );
-
- // DataTables 1.10+ method
- var d = {
- draw: settings.iDraw,
- columns: [],
- order: [],
- start: displayStart,
- length: displayLength,
- search: {
- value: preSearch.sSearch,
- regex: preSearch.bRegex
- }
- };
-
- for ( i=0 ; i<columnCount ; i++ ) {
- column = columns[i];
- columnSearch = preColSearch[i];
- dataProp = typeof column.mData=="function" ? 'function' : column.mData ;
-
- d.columns.push( {
- data: dataProp,
- name: column.sName,
- searchable: column.bSearchable,
- orderable: column.bSortable,
- search: {
- value: columnSearch.sSearch,
- regex: columnSearch.bRegex
- }
- } );
-
- param( "mDataProp_"+i, dataProp );
-
- if ( features.bFilter ) {
- param( 'sSearch_'+i, columnSearch.sSearch );
- param( 'bRegex_'+i, columnSearch.bRegex );
- param( 'bSearchable_'+i, column.bSearchable );
- }
-
- if ( features.bSort ) {
- param( 'bSortable_'+i, column.bSortable );
- }
- }
-
- if ( features.bFilter ) {
- param( 'sSearch', preSearch.sSearch );
- param( 'bRegex', preSearch.bRegex );
- }
-
- if ( features.bSort ) {
- $.each( sort, function ( i, val ) {
- d.order.push( { column: val.col, dir: val.dir } );
-
- param( 'iSortCol_'+i, val.col );
- param( 'sSortDir_'+i, val.dir );
- } );
-
- param( 'iSortingCols', sort.length );
- }
-
- // If the legacy.ajax parameter is null, then we automatically decide which
- // form to use, based on sAjaxSource
- var legacy = DataTable.ext.legacy.ajax;
- if ( legacy === null ) {
- return settings.sAjaxSource ? data : d;
- }
-
- // Otherwise, if legacy has been specified then we use that to decide on the
- // form
- return legacy ? data : d;
- }
-
-
- /**
- * Data the data from the server (nuking the old) and redraw the table
- * @param {object} oSettings dataTables settings object
- * @param {object} json json data return from the server.
- * @param {string} json.sEcho Tracking flag for DataTables to match requests
- * @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering
- * @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering
- * @param {array} json.aaData The data to display on this page
- * @param {string} [json.sColumns] Column ordering (sName, comma separated)
- * @memberof DataTable#oApi
- */
- function _fnAjaxUpdateDraw ( settings, json )
- {
- // v1.10 uses camelCase variables, while 1.9 uses Hungarian notation.
- // Support both
- var compat = function ( old, modern ) {
- return json[old] !== undefined ? json[old] : json[modern];
- };
-
- var data = _fnAjaxDataSrc( settings, json );
- var draw = compat( 'sEcho', 'draw' );
- var recordsTotal = compat( 'iTotalRecords', 'recordsTotal' );
- var recordsFiltered = compat( 'iTotalDisplayRecords', 'recordsFiltered' );
-
- if ( draw ) {
- // Protect against out of sequence returns
- if ( draw*1 < settings.iDraw ) {
- return;
- }
- settings.iDraw = draw * 1;
- }
-
- _fnClearTable( settings );
- settings._iRecordsTotal = parseInt(recordsTotal, 10);
- settings._iRecordsDisplay = parseInt(recordsFiltered, 10);
-
- for ( var i=0, ien=data.length ; i<ien ; i++ ) {
- _fnAddData( settings, data[i] );
- }
- settings.aiDisplay = settings.aiDisplayMaster.slice();
-
- settings.bAjaxDataGet = false;
- _fnDraw( settings );
-
- if ( ! settings._bInitComplete ) {
- _fnInitComplete( settings, json );
- }
-
- settings.bAjaxDataGet = true;
- _fnProcessingDisplay( settings, false );
- }
-
-
- /**
- * Get the data from the JSON data source to use for drawing a table. Using
- * `_fnGetObjectDataFn` allows the data to be sourced from a property of the
- * source object, or from a processing function.
- * @param {object} oSettings dataTables settings object
- * @param {object} json Data source object / array from the server
- * @return {array} Array of data to use
- */
- function _fnAjaxDataSrc ( oSettings, json )
- {
- var dataSrc = $.isPlainObject( oSettings.ajax ) && oSettings.ajax.dataSrc !== undefined ?
- oSettings.ajax.dataSrc :
- oSettings.sAjaxDataProp; // Compatibility with 1.9-.
-
- // Compatibility with 1.9-. In order to read from aaData, check if the
- // default has been changed, if not, check for aaData
- if ( dataSrc === 'data' ) {
- return json.aaData || json[dataSrc];
- }
-
- return dataSrc !== "" ?
- _fnGetObjectDataFn( dataSrc )( json ) :
- json;
- }
-
- /**
- * Generate the node required for filtering text
- * @returns {node} Filter control element
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnFeatureHtmlFilter ( settings )
- {
- var classes = settings.oClasses;
- var tableId = settings.sTableId;
- var language = settings.oLanguage;
- var previousSearch = settings.oPreviousSearch;
- var features = settings.aanFeatures;
- var input = '<input type="search" class="'+classes.sFilterInput+'"/>';
-
- var str = language.sSearch;
- str = str.match(/_INPUT_/) ?
- str.replace('_INPUT_', input) :
- str+input;
-
- var filter = $('<div/>', {
- 'id': ! features.f ? tableId+'_filter' : null,
- 'class': classes.sFilter
- } )
- .append( $('<label/>' ).append( str ) );
-
- var searchFn = function() {
- /* Update all other filter input elements for the new display */
- var n = features.f;
- var val = !this.value ? "" : this.value; // mental IE8 fix :-(
-
- /* Now do the filter */
- if ( val != previousSearch.sSearch ) {
- _fnFilterComplete( settings, {
- "sSearch": val,
- "bRegex": previousSearch.bRegex,
- "bSmart": previousSearch.bSmart ,
- "bCaseInsensitive": previousSearch.bCaseInsensitive
- } );
-
- // Need to redraw, without resorting
- settings._iDisplayStart = 0;
- _fnDraw( settings );
- }
- };
-
- var searchDelay = settings.searchDelay !== null ?
- settings.searchDelay :
- _fnDataSource( settings ) === 'ssp' ?
- 400 :
- 0;
-
- var jqFilter = $('input', filter)
- .val( previousSearch.sSearch )
- .attr( 'placeholder', language.sSearchPlaceholder )
- .bind(
- 'keyup.DT search.DT input.DT paste.DT cut.DT',
- searchDelay ?
- _fnThrottle( searchFn, searchDelay ) :
- searchFn
- )
- .bind( 'keypress.DT', function(e) {
- /* Prevent form submission */
- if ( e.keyCode == 13 ) {
- return false;
- }
- } )
- .attr('aria-controls', tableId);
-
- // Update the input elements whenever the table is filtered
- $(settings.nTable).on( 'search.dt.DT', function ( ev, s ) {
- if ( settings === s ) {
- // IE9 throws an 'unknown error' if document.activeElement is used
- // inside an iframe or frame...
- try {
- if ( jqFilter[0] !== document.activeElement ) {
- jqFilter.val( previousSearch.sSearch );
- }
- }
- catch ( e ) {}
- }
- } );
-
- return filter[0];
- }
-
-
- /**
- * Filter the table using both the global filter and column based filtering
- * @param {object} oSettings dataTables settings object
- * @param {object} oSearch search information
- * @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)
- * @memberof DataTable#oApi
- */
- function _fnFilterComplete ( oSettings, oInput, iForce )
- {
- var oPrevSearch = oSettings.oPreviousSearch;
- var aoPrevSearch = oSettings.aoPreSearchCols;
- var fnSaveFilter = function ( oFilter ) {
- /* Save the filtering values */
- oPrevSearch.sSearch = oFilter.sSearch;
- oPrevSearch.bRegex = oFilter.bRegex;
- oPrevSearch.bSmart = oFilter.bSmart;
- oPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;
- };
- var fnRegex = function ( o ) {
- // Backwards compatibility with the bEscapeRegex option
- return o.bEscapeRegex !== undefined ? !o.bEscapeRegex : o.bRegex;
- };
-
- // Resolve any column types that are unknown due to addition or invalidation
- // @todo As per sort - can this be moved into an event handler?
- _fnColumnTypes( oSettings );
-
- /* In server-side processing all filtering is done by the server, so no point hanging around here */
- if ( _fnDataSource( oSettings ) != 'ssp' )
- {
- /* Global filter */
- _fnFilter( oSettings, oInput.sSearch, iForce, fnRegex(oInput), oInput.bSmart, oInput.bCaseInsensitive );
- fnSaveFilter( oInput );
-
- /* Now do the individual column filter */
- for ( var i=0 ; i<aoPrevSearch.length ; i++ )
- {
- _fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, fnRegex(aoPrevSearch[i]),
- aoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );
- }
-
- /* Custom filtering */
- _fnFilterCustom( oSettings );
- }
- else
- {
- fnSaveFilter( oInput );
- }
-
- /* Tell the draw function we have been filtering */
- oSettings.bFiltered = true;
- _fnCallbackFire( oSettings, null, 'search', [oSettings] );
- }
-
-
- /**
- * Apply custom filtering functions
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnFilterCustom( settings )
- {
- var filters = DataTable.ext.search;
- var displayRows = settings.aiDisplay;
- var row, rowIdx;
-
- for ( var i=0, ien=filters.length ; i<ien ; i++ ) {
- var rows = [];
-
- // Loop over each row and see if it should be included
- for ( var j=0, jen=displayRows.length ; j<jen ; j++ ) {
- rowIdx = displayRows[ j ];
- row = settings.aoData[ rowIdx ];
-
- if ( filters[i]( settings, row._aFilterData, rowIdx, row._aData, j ) ) {
- rows.push( rowIdx );
- }
- }
-
- // So the array reference doesn't break set the results into the
- // existing array
- displayRows.length = 0;
- $.merge( displayRows, rows );
- }
- }
-
-
- /**
- * Filter the table on a per-column basis
- * @param {object} oSettings dataTables settings object
- * @param {string} sInput string to filter on
- * @param {int} iColumn column to filter
- * @param {bool} bRegex treat search string as a regular expression or not
- * @param {bool} bSmart use smart filtering or not
- * @param {bool} bCaseInsensitive Do case insenstive matching or not
- * @memberof DataTable#oApi
- */
- function _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, caseInsensitive )
- {
- if ( searchStr === '' ) {
- return;
- }
-
- var data;
- var display = settings.aiDisplay;
- var rpSearch = _fnFilterCreateSearch( searchStr, regex, smart, caseInsensitive );
-
- for ( var i=display.length-1 ; i>=0 ; i-- ) {
- data = settings.aoData[ display[i] ]._aFilterData[ colIdx ];
-
- if ( ! rpSearch.test( data ) ) {
- display.splice( i, 1 );
- }
- }
- }
-
-
- /**
- * Filter the data table based on user input and draw the table
- * @param {object} settings dataTables settings object
- * @param {string} input string to filter on
- * @param {int} force optional - force a research of the master array (1) or not (undefined or 0)
- * @param {bool} regex treat as a regular expression or not
- * @param {bool} smart perform smart filtering or not
- * @param {bool} caseInsensitive Do case insenstive matching or not
- * @memberof DataTable#oApi
- */
- function _fnFilter( settings, input, force, regex, smart, caseInsensitive )
- {
- var rpSearch = _fnFilterCreateSearch( input, regex, smart, caseInsensitive );
- var prevSearch = settings.oPreviousSearch.sSearch;
- var displayMaster = settings.aiDisplayMaster;
- var display, invalidated, i;
-
- // Need to take account of custom filtering functions - always filter
- if ( DataTable.ext.search.length !== 0 ) {
- force = true;
- }
-
- // Check if any of the rows were invalidated
- invalidated = _fnFilterData( settings );
-
- // If the input is blank - we just want the full data set
- if ( input.length <= 0 ) {
- settings.aiDisplay = displayMaster.slice();
- }
- else {
- // New search - start from the master array
- if ( invalidated ||
- force ||
- prevSearch.length > input.length ||
- input.indexOf(prevSearch) !== 0 ||
- settings.bSorted // On resort, the display master needs to be
- // re-filtered since indexes will have changed
- ) {
- settings.aiDisplay = displayMaster.slice();
- }
-
- // Search the display array
- display = settings.aiDisplay;
-
- for ( i=display.length-1 ; i>=0 ; i-- ) {
- if ( ! rpSearch.test( settings.aoData[ display[i] ]._sFilterRow ) ) {
- display.splice( i, 1 );
- }
- }
- }
- }
-
-
- /**
- * Build a regular expression object suitable for searching a table
- * @param {string} sSearch string to search for
- * @param {bool} bRegex treat as a regular expression or not
- * @param {bool} bSmart perform smart filtering or not
- * @param {bool} bCaseInsensitive Do case insensitive matching or not
- * @returns {RegExp} constructed object
- * @memberof DataTable#oApi
- */
- function _fnFilterCreateSearch( search, regex, smart, caseInsensitive )
- {
- search = regex ?
- search :
- _fnEscapeRegex( search );
-
- if ( smart ) {
- /* For smart filtering we want to allow the search to work regardless of
- * word order. We also want double quoted text to be preserved, so word
- * order is important - a la google. So this is what we want to
- * generate:
- *
- * ^(?=.*?\bone\b)(?=.*?\btwo three\b)(?=.*?\bfour\b).*$
- */
- var a = $.map( search.match( /"[^"]+"|[^ ]+/g ) || [''], function ( word ) {
- if ( word.charAt(0) === '"' ) {
- var m = word.match( /^"(.*)"$/ );
- word = m ? m[1] : word;
- }
-
- return word.replace('"', '');
- } );
-
- search = '^(?=.*?'+a.join( ')(?=.*?' )+').*$';
- }
-
- return new RegExp( search, caseInsensitive ? 'i' : '' );
- }
-
-
- /**
- * Escape a string such that it can be used in a regular expression
- * @param {string} sVal string to escape
- * @returns {string} escaped string
- * @memberof DataTable#oApi
- */
- var _fnEscapeRegex = DataTable.util.escapeRegex;
-
- var __filter_div = $('<div>')[0];
- var __filter_div_textContent = __filter_div.textContent !== undefined;
-
- // Update the filtering data for each row if needed (by invalidation or first run)
- function _fnFilterData ( settings )
- {
- var columns = settings.aoColumns;
- var column;
- var i, j, ien, jen, filterData, cellData, row;
- var fomatters = DataTable.ext.type.search;
- var wasInvalidated = false;
-
- for ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
- row = settings.aoData[i];
-
- if ( ! row._aFilterData ) {
- filterData = [];
-
- for ( j=0, jen=columns.length ; j<jen ; j++ ) {
- column = columns[j];
-
- if ( column.bSearchable ) {
- cellData = _fnGetCellData( settings, i, j, 'filter' );
-
- if ( fomatters[ column.sType ] ) {
- cellData = fomatters[ column.sType ]( cellData );
- }
-
- // Search in DataTables 1.10 is string based. In 1.11 this
- // should be altered to also allow strict type checking.
- if ( cellData === null ) {
- cellData = '';
- }
-
- if ( typeof cellData !== 'string' && cellData.toString ) {
- cellData = cellData.toString();
- }
- }
- else {
- cellData = '';
- }
-
- // If it looks like there is an HTML entity in the string,
- // attempt to decode it so sorting works as expected. Note that
- // we could use a single line of jQuery to do this, but the DOM
- // method used here is much faster http://jsperf.com/html-decode
- if ( cellData.indexOf && cellData.indexOf('&') !== -1 ) {
- __filter_div.innerHTML = cellData;
- cellData = __filter_div_textContent ?
- __filter_div.textContent :
- __filter_div.innerText;
- }
-
- if ( cellData.replace ) {
- cellData = cellData.replace(/[\r\n]/g, '');
- }
-
- filterData.push( cellData );
- }
-
- row._aFilterData = filterData;
- row._sFilterRow = filterData.join(' ');
- wasInvalidated = true;
- }
- }
-
- return wasInvalidated;
- }
-
-
- /**
- * Convert from the internal Hungarian notation to camelCase for external
- * interaction
- * @param {object} obj Object to convert
- * @returns {object} Inverted object
- * @memberof DataTable#oApi
- */
- function _fnSearchToCamel ( obj )
- {
- return {
- search: obj.sSearch,
- smart: obj.bSmart,
- regex: obj.bRegex,
- caseInsensitive: obj.bCaseInsensitive
- };
- }
-
-
-
- /**
- * Convert from camelCase notation to the internal Hungarian. We could use the
- * Hungarian convert function here, but this is cleaner
- * @param {object} obj Object to convert
- * @returns {object} Inverted object
- * @memberof DataTable#oApi
- */
- function _fnSearchToHung ( obj )
- {
- return {
- sSearch: obj.search,
- bSmart: obj.smart,
- bRegex: obj.regex,
- bCaseInsensitive: obj.caseInsensitive
- };
- }
-
- /**
- * Generate the node required for the info display
- * @param {object} oSettings dataTables settings object
- * @returns {node} Information element
- * @memberof DataTable#oApi
- */
- function _fnFeatureHtmlInfo ( settings )
- {
- var
- tid = settings.sTableId,
- nodes = settings.aanFeatures.i,
- n = $('<div/>', {
- 'class': settings.oClasses.sInfo,
- 'id': ! nodes ? tid+'_info' : null
- } );
-
- if ( ! nodes ) {
- // Update display on each draw
- settings.aoDrawCallback.push( {
- "fn": _fnUpdateInfo,
- "sName": "information"
- } );
-
- n
- .attr( 'role', 'status' )
- .attr( 'aria-live', 'polite' );
-
- // Table is described by our info div
- $(settings.nTable).attr( 'aria-describedby', tid+'_info' );
- }
-
- return n[0];
- }
-
-
- /**
- * Update the information elements in the display
- * @param {object} settings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnUpdateInfo ( settings )
- {
- /* Show information about the table */
- var nodes = settings.aanFeatures.i;
- if ( nodes.length === 0 ) {
- return;
- }
-
- var
- lang = settings.oLanguage,
- start = settings._iDisplayStart+1,
- end = settings.fnDisplayEnd(),
- max = settings.fnRecordsTotal(),
- total = settings.fnRecordsDisplay(),
- out = total ?
- lang.sInfo :
- lang.sInfoEmpty;
-
- if ( total !== max ) {
- /* Record set after filtering */
- out += ' ' + lang.sInfoFiltered;
- }
-
- // Convert the macros
- out += lang.sInfoPostFix;
- out = _fnInfoMacros( settings, out );
-
- var callback = lang.fnInfoCallback;
- if ( callback !== null ) {
- out = callback.call( settings.oInstance,
- settings, start, end, max, total, out
- );
- }
-
- $(nodes).html( out );
- }
-
-
- function _fnInfoMacros ( settings, str )
- {
- // When infinite scrolling, we are always starting at 1. _iDisplayStart is used only
- // internally
- var
- formatter = settings.fnFormatNumber,
- start = settings._iDisplayStart+1,
- len = settings._iDisplayLength,
- vis = settings.fnRecordsDisplay(),
- all = len === -1;
-
- return str.
- replace(/_START_/g, formatter.call( settings, start ) ).
- replace(/_END_/g, formatter.call( settings, settings.fnDisplayEnd() ) ).
- replace(/_MAX_/g, formatter.call( settings, settings.fnRecordsTotal() ) ).
- replace(/_TOTAL_/g, formatter.call( settings, vis ) ).
- replace(/_PAGE_/g, formatter.call( settings, all ? 1 : Math.ceil( start / len ) ) ).
- replace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) );
- }
-
-
-
- /**
- * Draw the table for the first time, adding all required features
- * @param {object} settings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnInitialise ( settings )
- {
- var i, iLen, iAjaxStart=settings.iInitDisplayStart;
- var columns = settings.aoColumns, column;
- var features = settings.oFeatures;
- var deferLoading = settings.bDeferLoading; // value modified by the draw
-
- /* Ensure that the table data is fully initialised */
- if ( ! settings.bInitialised ) {
- setTimeout( function(){ _fnInitialise( settings ); }, 200 );
- return;
- }
-
- /* Show the display HTML options */
- _fnAddOptionsHtml( settings );
-
- /* Build and draw the header / footer for the table */
- _fnBuildHead( settings );
- _fnDrawHead( settings, settings.aoHeader );
- _fnDrawHead( settings, settings.aoFooter );
-
- /* Okay to show that something is going on now */
- _fnProcessingDisplay( settings, true );
-
- /* Calculate sizes for columns */
- if ( features.bAutoWidth ) {
- _fnCalculateColumnWidths( settings );
- }
-
- for ( i=0, iLen=columns.length ; i<iLen ; i++ ) {
- column = columns[i];
-
- if ( column.sWidth ) {
- column.nTh.style.width = _fnStringToCss( column.sWidth );
- }
- }
-
- _fnCallbackFire( settings, null, 'preInit', [settings] );
-
- // If there is default sorting required - let's do it. The sort function
- // will do the drawing for us. Otherwise we draw the table regardless of the
- // Ajax source - this allows the table to look initialised for Ajax sourcing
- // data (show 'loading' message possibly)
- _fnReDraw( settings );
-
- // Server-side processing init complete is done by _fnAjaxUpdateDraw
- var dataSrc = _fnDataSource( settings );
- if ( dataSrc != 'ssp' || deferLoading ) {
- // if there is an ajax source load the data
- if ( dataSrc == 'ajax' ) {
- _fnBuildAjax( settings, [], function(json) {
- var aData = _fnAjaxDataSrc( settings, json );
-
- // Got the data - add it to the table
- for ( i=0 ; i<aData.length ; i++ ) {
- _fnAddData( settings, aData[i] );
- }
-
- // Reset the init display for cookie saving. We've already done
- // a filter, and therefore cleared it before. So we need to make
- // it appear 'fresh'
- settings.iInitDisplayStart = iAjaxStart;
-
- _fnReDraw( settings );
-
- _fnProcessingDisplay( settings, false );
- _fnInitComplete( settings, json );
- }, settings );
- }
- else {
- _fnProcessingDisplay( settings, false );
- _fnInitComplete( settings );
- }
- }
- }
-
-
- /**
- * Draw the table for the first time, adding all required features
- * @param {object} oSettings dataTables settings object
- * @param {object} [json] JSON from the server that completed the table, if using Ajax source
- * with client-side processing (optional)
- * @memberof DataTable#oApi
- */
- function _fnInitComplete ( settings, json )
- {
- settings._bInitComplete = true;
-
- // When data was added after the initialisation (data or Ajax) we need to
- // calculate the column sizing
- if ( json || settings.oInit.aaData ) {
- _fnAdjustColumnSizing( settings );
- }
-
- _fnCallbackFire( settings, null, 'plugin-init', [settings, json] );
- _fnCallbackFire( settings, 'aoInitComplete', 'init', [settings, json] );
- }
-
-
- function _fnLengthChange ( settings, val )
- {
- var len = parseInt( val, 10 );
- settings._iDisplayLength = len;
-
- _fnLengthOverflow( settings );
-
- // Fire length change event
- _fnCallbackFire( settings, null, 'length', [settings, len] );
- }
-
-
- /**
- * Generate the node required for user display length changing
- * @param {object} settings dataTables settings object
- * @returns {node} Display length feature node
- * @memberof DataTable#oApi
- */
- function _fnFeatureHtmlLength ( settings )
- {
- var
- classes = settings.oClasses,
- tableId = settings.sTableId,
- menu = settings.aLengthMenu,
- d2 = $.isArray( menu[0] ),
- lengths = d2 ? menu[0] : menu,
- language = d2 ? menu[1] : menu;
-
- var select = $('<select/>', {
- 'name': tableId+'_length',
- 'aria-controls': tableId,
- 'class': classes.sLengthSelect
- } );
-
- for ( var i=0, ien=lengths.length ; i<ien ; i++ ) {
- select[0][ i ] = new Option( language[i], lengths[i] );
- }
-
- var div = $('<div><label/></div>').addClass( classes.sLength );
- if ( ! settings.aanFeatures.l ) {
- div[0].id = tableId+'_length';
- }
-
- div.children().append(
- settings.oLanguage.sLengthMenu.replace( '_MENU_', select[0].outerHTML )
- );
-
- // Can't use `select` variable as user might provide their own and the
- // reference is broken by the use of outerHTML
- $('select', div)
- .val( settings._iDisplayLength )
- .bind( 'change.DT', function(e) {
- _fnLengthChange( settings, $(this).val() );
- _fnDraw( settings );
- } );
-
- // Update node value whenever anything changes the table's length
- $(settings.nTable).bind( 'length.dt.DT', function (e, s, len) {
- if ( settings === s ) {
- $('select', div).val( len );
- }
- } );
-
- return div[0];
- }
-
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Note that most of the paging logic is done in
- * DataTable.ext.pager
- */
-
- /**
- * Generate the node required for default pagination
- * @param {object} oSettings dataTables settings object
- * @returns {node} Pagination feature node
- * @memberof DataTable#oApi
- */
- function _fnFeatureHtmlPaginate ( settings )
- {
- var
- type = settings.sPaginationType,
- plugin = DataTable.ext.pager[ type ],
- modern = typeof plugin === 'function',
- redraw = function( settings ) {
- _fnDraw( settings );
- },
- node = $('<div/>').addClass( settings.oClasses.sPaging + type )[0],
- features = settings.aanFeatures;
-
- if ( ! modern ) {
- plugin.fnInit( settings, node, redraw );
- }
-
- /* Add a draw callback for the pagination on first instance, to update the paging display */
- if ( ! features.p )
- {
- node.id = settings.sTableId+'_paginate';
-
- settings.aoDrawCallback.push( {
- "fn": function( settings ) {
- if ( modern ) {
- var
- start = settings._iDisplayStart,
- len = settings._iDisplayLength,
- visRecords = settings.fnRecordsDisplay(),
- all = len === -1,
- page = all ? 0 : Math.ceil( start / len ),
- pages = all ? 1 : Math.ceil( visRecords / len ),
- buttons = plugin(page, pages),
- i, ien;
-
- for ( i=0, ien=features.p.length ; i<ien ; i++ ) {
- _fnRenderer( settings, 'pageButton' )(
- settings, features.p[i], i, buttons, page, pages
- );
- }
- }
- else {
- plugin.fnUpdate( settings, redraw );
- }
- },
- "sName": "pagination"
- } );
- }
-
- return node;
- }
-
-
- /**
- * Alter the display settings to change the page
- * @param {object} settings DataTables settings object
- * @param {string|int} action Paging action to take: "first", "previous",
- * "next" or "last" or page number to jump to (integer)
- * @param [bool] redraw Automatically draw the update or not
- * @returns {bool} true page has changed, false - no change
- * @memberof DataTable#oApi
- */
- function _fnPageChange ( settings, action, redraw )
- {
- var
- start = settings._iDisplayStart,
- len = settings._iDisplayLength,
- records = settings.fnRecordsDisplay();
-
- if ( records === 0 || len === -1 )
- {
- start = 0;
- }
- else if ( typeof action === "number" )
- {
- start = action * len;
-
- if ( start > records )
- {
- start = 0;
- }
- }
- else if ( action == "first" )
- {
- start = 0;
- }
- else if ( action == "previous" )
- {
- start = len >= 0 ?
- start - len :
- 0;
-
- if ( start < 0 )
- {
- start = 0;
- }
- }
- else if ( action == "next" )
- {
- if ( start + len < records )
- {
- start += len;
- }
- }
- else if ( action == "last" )
- {
- start = Math.floor( (records-1) / len) * len;
- }
- else
- {
- _fnLog( settings, 0, "Unknown paging action: "+action, 5 );
- }
-
- var changed = settings._iDisplayStart !== start;
- settings._iDisplayStart = start;
-
- if ( changed ) {
- _fnCallbackFire( settings, null, 'page', [settings] );
-
- if ( redraw ) {
- _fnDraw( settings );
- }
- }
-
- return changed;
- }
-
-
-
- /**
- * Generate the node required for the processing node
- * @param {object} settings dataTables settings object
- * @returns {node} Processing element
- * @memberof DataTable#oApi
- */
- function _fnFeatureHtmlProcessing ( settings )
- {
- return $('<div/>', {
- 'id': ! settings.aanFeatures.r ? settings.sTableId+'_processing' : null,
- 'class': settings.oClasses.sProcessing
- } )
- .html( settings.oLanguage.sProcessing )
- .insertBefore( settings.nTable )[0];
- }
-
-
- /**
- * Display or hide the processing indicator
- * @param {object} settings dataTables settings object
- * @param {bool} show Show the processing indicator (true) or not (false)
- * @memberof DataTable#oApi
- */
- function _fnProcessingDisplay ( settings, show )
- {
- if ( settings.oFeatures.bProcessing ) {
- $(settings.aanFeatures.r).css( 'display', show ? 'block' : 'none' );
- }
-
- _fnCallbackFire( settings, null, 'processing', [settings, show] );
- }
-
- /**
- * Add any control elements for the table - specifically scrolling
- * @param {object} settings dataTables settings object
- * @returns {node} Node to add to the DOM
- * @memberof DataTable#oApi
- */
- function _fnFeatureHtmlTable ( settings )
- {
- var table = $(settings.nTable);
-
- // Add the ARIA grid role to the table
- table.attr( 'role', 'grid' );
-
- // Scrolling from here on in
- var scroll = settings.oScroll;
-
- if ( scroll.sX === '' && scroll.sY === '' ) {
- return settings.nTable;
- }
-
- var scrollX = scroll.sX;
- var scrollY = scroll.sY;
- var classes = settings.oClasses;
- var caption = table.children('caption');
- var captionSide = caption.length ? caption[0]._captionSide : null;
- var headerClone = $( table[0].cloneNode(false) );
- var footerClone = $( table[0].cloneNode(false) );
- var footer = table.children('tfoot');
- var _div = '<div/>';
- var size = function ( s ) {
- return !s ? null : _fnStringToCss( s );
- };
-
- if ( ! footer.length ) {
- footer = null;
- }
-
- /*
- * The HTML structure that we want to generate in this function is:
- * div - scroller
- * div - scroll head
- * div - scroll head inner
- * table - scroll head table
- * thead - thead
- * div - scroll body
- * table - table (master table)
- * thead - thead clone for sizing
- * tbody - tbody
- * div - scroll foot
- * div - scroll foot inner
- * table - scroll foot table
- * tfoot - tfoot
- */
- var scroller = $( _div, { 'class': classes.sScrollWrapper } )
- .append(
- $(_div, { 'class': classes.sScrollHead } )
- .css( {
- overflow: 'hidden',
- position: 'relative',
- border: 0,
- width: scrollX ? size(scrollX) : '100%'
- } )
- .append(
- $(_div, { 'class': classes.sScrollHeadInner } )
- .css( {
- 'box-sizing': 'content-box',
- width: scroll.sXInner || '100%'
- } )
- .append(
- headerClone
- .removeAttr('id')
- .css( 'margin-left', 0 )
- .append( captionSide === 'top' ? caption : null )
- .append(
- table.children('thead')
- )
- )
- )
- )
- .append(
- $(_div, { 'class': classes.sScrollBody } )
- .css( {
- position: 'relative',
- overflow: 'auto',
- width: size( scrollX )
- } )
- .append( table )
- );
-
- if ( footer ) {
- scroller.append(
- $(_div, { 'class': classes.sScrollFoot } )
- .css( {
- overflow: 'hidden',
- border: 0,
- width: scrollX ? size(scrollX) : '100%'
- } )
- .append(
- $(_div, { 'class': classes.sScrollFootInner } )
- .append(
- footerClone
- .removeAttr('id')
- .css( 'margin-left', 0 )
- .append( captionSide === 'bottom' ? caption : null )
- .append(
- table.children('tfoot')
- )
- )
- )
- );
- }
-
- var children = scroller.children();
- var scrollHead = children[0];
- var scrollBody = children[1];
- var scrollFoot = footer ? children[2] : null;
-
- // When the body is scrolled, then we also want to scroll the headers
- if ( scrollX ) {
- $(scrollBody).on( 'scroll.DT', function (e) {
- var scrollLeft = this.scrollLeft;
-
- scrollHead.scrollLeft = scrollLeft;
-
- if ( footer ) {
- scrollFoot.scrollLeft = scrollLeft;
- }
- } );
- }
-
- $(scrollBody).css(
- scrollY && scroll.bCollapse ? 'max-height' : 'height',
- scrollY
- );
-
- settings.nScrollHead = scrollHead;
- settings.nScrollBody = scrollBody;
- settings.nScrollFoot = scrollFoot;
-
- // On redraw - align columns
- settings.aoDrawCallback.push( {
- "fn": _fnScrollDraw,
- "sName": "scrolling"
- } );
-
- return scroller[0];
- }
-
-
-
- /**
- * Update the header, footer and body tables for resizing - i.e. column
- * alignment.
- *
- * Welcome to the most horrible function DataTables. The process that this
- * function follows is basically:
- * 1. Re-create the table inside the scrolling div
- * 2. Take live measurements from the DOM
- * 3. Apply the measurements to align the columns
- * 4. Clean up
- *
- * @param {object} settings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnScrollDraw ( settings )
- {
- // Given that this is such a monster function, a lot of variables are use
- // to try and keep the minimised size as small as possible
- var
- scroll = settings.oScroll,
- scrollX = scroll.sX,
- scrollXInner = scroll.sXInner,
- scrollY = scroll.sY,
- barWidth = scroll.iBarWidth,
- divHeader = $(settings.nScrollHead),
- divHeaderStyle = divHeader[0].style,
- divHeaderInner = divHeader.children('div'),
- divHeaderInnerStyle = divHeaderInner[0].style,
- divHeaderTable = divHeaderInner.children('table'),
- divBodyEl = settings.nScrollBody,
- divBody = $(divBodyEl),
- divBodyStyle = divBodyEl.style,
- divFooter = $(settings.nScrollFoot),
- divFooterInner = divFooter.children('div'),
- divFooterTable = divFooterInner.children('table'),
- header = $(settings.nTHead),
- table = $(settings.nTable),
- tableEl = table[0],
- tableStyle = tableEl.style,
- footer = settings.nTFoot ? $(settings.nTFoot) : null,
- browser = settings.oBrowser,
- ie67 = browser.bScrollOversize,
- dtHeaderCells = _pluck( settings.aoColumns, 'nTh' ),
- headerTrgEls, footerTrgEls,
- headerSrcEls, footerSrcEls,
- headerCopy, footerCopy,
- headerWidths=[], footerWidths=[],
- headerContent=[], footerContent=[],
- idx, correction, sanityWidth,
- zeroOut = function(nSizer) {
- var style = nSizer.style;
- style.paddingTop = "0";
- style.paddingBottom = "0";
- style.borderTopWidth = "0";
- style.borderBottomWidth = "0";
- style.height = 0;
- };
-
- // If the scrollbar visibility has changed from the last draw, we need to
- // adjust the column sizes as the table width will have changed to account
- // for the scrollbar
- var scrollBarVis = divBodyEl.scrollHeight > divBodyEl.clientHeight;
-
- if ( settings.scrollBarVis !== scrollBarVis && settings.scrollBarVis !== undefined ) {
- settings.scrollBarVis = scrollBarVis;
- _fnAdjustColumnSizing( settings );
- return; // adjust column sizing will call this function again
- }
- else {
- settings.scrollBarVis = scrollBarVis;
- }
-
- /*
- * 1. Re-create the table inside the scrolling div
- */
-
- // Remove the old minimised thead and tfoot elements in the inner table
- table.children('thead, tfoot').remove();
-
- if ( footer ) {
- footerCopy = footer.clone().prependTo( table );
- footerTrgEls = footer.find('tr'); // the original tfoot is in its own table and must be sized
- footerSrcEls = footerCopy.find('tr');
- }
-
- // Clone the current header and footer elements and then place it into the inner table
- headerCopy = header.clone().prependTo( table );
- headerTrgEls = header.find('tr'); // original header is in its own table
- headerSrcEls = headerCopy.find('tr');
- headerCopy.find('th, td').removeAttr('tabindex');
-
-
- /*
- * 2. Take live measurements from the DOM - do not alter the DOM itself!
- */
-
- // Remove old sizing and apply the calculated column widths
- // Get the unique column headers in the newly created (cloned) header. We want to apply the
- // calculated sizes to this header
- if ( ! scrollX )
- {
- divBodyStyle.width = '100%';
- divHeader[0].style.width = '100%';
- }
-
- $.each( _fnGetUniqueThs( settings, headerCopy ), function ( i, el ) {
- idx = _fnVisibleToColumnIndex( settings, i );
- el.style.width = settings.aoColumns[idx].sWidth;
- } );
-
- if ( footer ) {
- _fnApplyToChildren( function(n) {
- n.style.width = "";
- }, footerSrcEls );
- }
-
- // Size the table as a whole
- sanityWidth = table.outerWidth();
- if ( scrollX === "" ) {
- // No x scrolling
- tableStyle.width = "100%";
-
- // IE7 will make the width of the table when 100% include the scrollbar
- // - which is shouldn't. When there is a scrollbar we need to take this
- // into account.
- if ( ie67 && (table.find('tbody').height() > divBodyEl.offsetHeight ||
- divBody.css('overflow-y') == "scroll")
- ) {
- tableStyle.width = _fnStringToCss( table.outerWidth() - barWidth);
- }
-
- // Recalculate the sanity width
- sanityWidth = table.outerWidth();
- }
- else if ( scrollXInner !== "" ) {
- // legacy x scroll inner has been given - use it
- tableStyle.width = _fnStringToCss(scrollXInner);
-
- // Recalculate the sanity width
- sanityWidth = table.outerWidth();
- }
-
- // Hidden header should have zero height, so remove padding and borders. Then
- // set the width based on the real headers
-
- // Apply all styles in one pass
- _fnApplyToChildren( zeroOut, headerSrcEls );
-
- // Read all widths in next pass
- _fnApplyToChildren( function(nSizer) {
- headerContent.push( nSizer.innerHTML );
- headerWidths.push( _fnStringToCss( $(nSizer).css('width') ) );
- }, headerSrcEls );
-
- // Apply all widths in final pass
- _fnApplyToChildren( function(nToSize, i) {
- // Only apply widths to the DataTables detected header cells - this
- // prevents complex headers from having contradictory sizes applied
- if ( $.inArray( nToSize, dtHeaderCells ) !== -1 ) {
- nToSize.style.width = headerWidths[i];
- }
- }, headerTrgEls );
-
- $(headerSrcEls).height(0);
-
- /* Same again with the footer if we have one */
- if ( footer )
- {
- _fnApplyToChildren( zeroOut, footerSrcEls );
-
- _fnApplyToChildren( function(nSizer) {
- footerContent.push( nSizer.innerHTML );
- footerWidths.push( _fnStringToCss( $(nSizer).css('width') ) );
- }, footerSrcEls );
-
- _fnApplyToChildren( function(nToSize, i) {
- nToSize.style.width = footerWidths[i];
- }, footerTrgEls );
-
- $(footerSrcEls).height(0);
- }
-
-
- /*
- * 3. Apply the measurements
- */
-
- // "Hide" the header and footer that we used for the sizing. We need to keep
- // the content of the cell so that the width applied to the header and body
- // both match, but we want to hide it completely. We want to also fix their
- // width to what they currently are
- _fnApplyToChildren( function(nSizer, i) {
- nSizer.innerHTML = '<div class="dataTables_sizing" style="height:0;overflow:hidden;">'+headerContent[i]+'</div>';
- nSizer.style.width = headerWidths[i];
- }, headerSrcEls );
-
- if ( footer )
- {
- _fnApplyToChildren( function(nSizer, i) {
- nSizer.innerHTML = '<div class="dataTables_sizing" style="height:0;overflow:hidden;">'+footerContent[i]+'</div>';
- nSizer.style.width = footerWidths[i];
- }, footerSrcEls );
- }
-
- // Sanity check that the table is of a sensible width. If not then we are going to get
- // misalignment - try to prevent this by not allowing the table to shrink below its min width
- if ( table.outerWidth() < sanityWidth )
- {
- // The min width depends upon if we have a vertical scrollbar visible or not */
- correction = ((divBodyEl.scrollHeight > divBodyEl.offsetHeight ||
- divBody.css('overflow-y') == "scroll")) ?
- sanityWidth+barWidth :
- sanityWidth;
-
- // IE6/7 are a law unto themselves...
- if ( ie67 && (divBodyEl.scrollHeight >
- divBodyEl.offsetHeight || divBody.css('overflow-y') == "scroll")
- ) {
- tableStyle.width = _fnStringToCss( correction-barWidth );
- }
-
- // And give the user a warning that we've stopped the table getting too small
- if ( scrollX === "" || scrollXInner !== "" ) {
- _fnLog( settings, 1, 'Possible column misalignment', 6 );
- }
- }
- else
- {
- correction = '100%';
- }
-
- // Apply to the container elements
- divBodyStyle.width = _fnStringToCss( correction );
- divHeaderStyle.width = _fnStringToCss( correction );
-
- if ( footer ) {
- settings.nScrollFoot.style.width = _fnStringToCss( correction );
- }
-
-
- /*
- * 4. Clean up
- */
- if ( ! scrollY ) {
- /* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting
- * the scrollbar height from the visible display, rather than adding it on. We need to
- * set the height in order to sort this. Don't want to do it in any other browsers.
- */
- if ( ie67 ) {
- divBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+barWidth );
- }
- }
-
- /* Finally set the width's of the header and footer tables */
- var iOuterWidth = table.outerWidth();
- divHeaderTable[0].style.width = _fnStringToCss( iOuterWidth );
- divHeaderInnerStyle.width = _fnStringToCss( iOuterWidth );
-
- // Figure out if there are scrollbar present - if so then we need a the header and footer to
- // provide a bit more space to allow "overflow" scrolling (i.e. past the scrollbar)
- var bScrolling = table.height() > divBodyEl.clientHeight || divBody.css('overflow-y') == "scroll";
- var padding = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right' );
- divHeaderInnerStyle[ padding ] = bScrolling ? barWidth+"px" : "0px";
-
- if ( footer ) {
- divFooterTable[0].style.width = _fnStringToCss( iOuterWidth );
- divFooterInner[0].style.width = _fnStringToCss( iOuterWidth );
- divFooterInner[0].style[padding] = bScrolling ? barWidth+"px" : "0px";
- }
-
- // Correct DOM ordering for colgroup - comes before the thead
- table.children('colgroup').insertBefore( table.children('thead') );
-
- /* Adjust the position of the header in case we loose the y-scrollbar */
- divBody.scroll();
-
- // If sorting or filtering has occurred, jump the scrolling back to the top
- // only if we aren't holding the position
- if ( (settings.bSorted || settings.bFiltered) && ! settings._drawHold ) {
- divBodyEl.scrollTop = 0;
- }
- }
-
-
-
- /**
- * Apply a given function to the display child nodes of an element array (typically
- * TD children of TR rows
- * @param {function} fn Method to apply to the objects
- * @param array {nodes} an1 List of elements to look through for display children
- * @param array {nodes} an2 Another list (identical structure to the first) - optional
- * @memberof DataTable#oApi
- */
- function _fnApplyToChildren( fn, an1, an2 )
- {
- var index=0, i=0, iLen=an1.length;
- var nNode1, nNode2;
-
- while ( i < iLen ) {
- nNode1 = an1[i].firstChild;
- nNode2 = an2 ? an2[i].firstChild : null;
-
- while ( nNode1 ) {
- if ( nNode1.nodeType === 1 ) {
- if ( an2 ) {
- fn( nNode1, nNode2, index );
- }
- else {
- fn( nNode1, index );
- }
-
- index++;
- }
-
- nNode1 = nNode1.nextSibling;
- nNode2 = an2 ? nNode2.nextSibling : null;
- }
-
- i++;
- }
- }
-
-
-
- var __re_html_remove = /<.*?>/g;
-
-
- /**
- * Calculate the width of columns for the table
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnCalculateColumnWidths ( oSettings )
- {
- var
- table = oSettings.nTable,
- columns = oSettings.aoColumns,
- scroll = oSettings.oScroll,
- scrollY = scroll.sY,
- scrollX = scroll.sX,
- scrollXInner = scroll.sXInner,
- columnCount = columns.length,
- visibleColumns = _fnGetColumns( oSettings, 'bVisible' ),
- headerCells = $('th', oSettings.nTHead),
- tableWidthAttr = table.getAttribute('width'), // from DOM element
- tableContainer = table.parentNode,
- userInputs = false,
- i, column, columnIdx, width, outerWidth,
- browser = oSettings.oBrowser,
- ie67 = browser.bScrollOversize;
-
- var styleWidth = table.style.width;
- if ( styleWidth && styleWidth.indexOf('%') !== -1 ) {
- tableWidthAttr = styleWidth;
- }
-
- /* Convert any user input sizes into pixel sizes */
- for ( i=0 ; i<visibleColumns.length ; i++ ) {
- column = columns[ visibleColumns[i] ];
-
- if ( column.sWidth !== null ) {
- column.sWidth = _fnConvertToWidth( column.sWidthOrig, tableContainer );
-
- userInputs = true;
- }
- }
-
- /* If the number of columns in the DOM equals the number that we have to
- * process in DataTables, then we can use the offsets that are created by
- * the web- browser. No custom sizes can be set in order for this to happen,
- * nor scrolling used
- */
- if ( ie67 || ! userInputs && ! scrollX && ! scrollY &&
- columnCount == _fnVisbleColumns( oSettings ) &&
- columnCount == headerCells.length
- ) {
- for ( i=0 ; i<columnCount ; i++ ) {
- var colIdx = _fnVisibleToColumnIndex( oSettings, i );
-
- if ( colIdx !== null ) {
- columns[ colIdx ].sWidth = _fnStringToCss( headerCells.eq(i).width() );
- }
- }
- }
- else
- {
- // Otherwise construct a single row, worst case, table with the widest
- // node in the data, assign any user defined widths, then insert it into
- // the DOM and allow the browser to do all the hard work of calculating
- // table widths
- var tmpTable = $(table).clone() // don't use cloneNode - IE8 will remove events on the main table
- .css( 'visibility', 'hidden' )
- .removeAttr( 'id' );
-
- // Clean up the table body
- tmpTable.find('tbody tr').remove();
- var tr = $('<tr/>').appendTo( tmpTable.find('tbody') );
-
- // Clone the table header and footer - we can't use the header / footer
- // from the cloned table, since if scrolling is active, the table's
- // real header and footer are contained in different table tags
- tmpTable.find('thead, tfoot').remove();
- tmpTable
- .append( $(oSettings.nTHead).clone() )
- .append( $(oSettings.nTFoot).clone() );
-
- // Remove any assigned widths from the footer (from scrolling)
- tmpTable.find('tfoot th, tfoot td').css('width', '');
-
- // Apply custom sizing to the cloned header
- headerCells = _fnGetUniqueThs( oSettings, tmpTable.find('thead')[0] );
-
- for ( i=0 ; i<visibleColumns.length ; i++ ) {
- column = columns[ visibleColumns[i] ];
-
- headerCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ?
- _fnStringToCss( column.sWidthOrig ) :
- '';
-
- // For scrollX we need to force the column width otherwise the
- // browser will collapse it. If this width is smaller than the
- // width the column requires, then it will have no effect
- if ( column.sWidthOrig && scrollX ) {
- $( headerCells[i] ).append( $('<div/>').css( {
- width: column.sWidthOrig,
- margin: 0,
- padding: 0,
- border: 0,
- height: 1
- } ) );
- }
- }
-
- // Find the widest cell for each column and put it into the table
- if ( oSettings.aoData.length ) {
- for ( i=0 ; i<visibleColumns.length ; i++ ) {
- columnIdx = visibleColumns[i];
- column = columns[ columnIdx ];
-
- $( _fnGetWidestNode( oSettings, columnIdx ) )
- .clone( false )
- .append( column.sContentPadding )
- .appendTo( tr );
- }
- }
-
- // Tidy the temporary table - remove name attributes so there aren't
- // duplicated in the dom (radio elements for example)
- $('[name]', tmpTable).removeAttr('name');
-
- // Table has been built, attach to the document so we can work with it.
- // A holding element is used, positioned at the top of the container
- // with minimal height, so it has no effect on if the container scrolls
- // or not. Otherwise it might trigger scrolling when it actually isn't
- // needed
- var holder = $('<div/>').css( scrollX || scrollY ?
- {
- position: 'absolute',
- top: 0,
- left: 0,
- height: 1,
- right: 0,
- overflow: 'hidden'
- } :
- {}
- )
- .append( tmpTable )
- .appendTo( tableContainer );
-
- // When scrolling (X or Y) we want to set the width of the table as
- // appropriate. However, when not scrolling leave the table width as it
- // is. This results in slightly different, but I think correct behaviour
- if ( scrollX && scrollXInner ) {
- tmpTable.width( scrollXInner );
- }
- else if ( scrollX ) {
- tmpTable.css( 'width', 'auto' );
- tmpTable.removeAttr('width');
-
- // If there is no width attribute or style, then allow the table to
- // collapse
- if ( tmpTable.width() < tableContainer.clientWidth && tableWidthAttr ) {
- tmpTable.width( tableContainer.clientWidth );
- }
- }
- else if ( scrollY ) {
- tmpTable.width( tableContainer.clientWidth );
- }
- else if ( tableWidthAttr ) {
- tmpTable.width( tableWidthAttr );
- }
-
- // Get the width of each column in the constructed table - we need to
- // know the inner width (so it can be assigned to the other table's
- // cells) and the outer width so we can calculate the full width of the
- // table. This is safe since DataTables requires a unique cell for each
- // column, but if ever a header can span multiple columns, this will
- // need to be modified.
- var total = 0;
- for ( i=0 ; i<visibleColumns.length ; i++ ) {
- var cell = $(headerCells[i]);
- var border = cell.outerWidth() - cell.width();
-
- // Use getBounding... where possible (not IE8-) because it can give
- // sub-pixel accuracy, which we then want to round up!
- var bounding = browser.bBounding ?
- Math.ceil( headerCells[i].getBoundingClientRect().width ) :
- cell.outerWidth();
-
- // Total is tracked to remove any sub-pixel errors as the outerWidth
- // of the table might not equal the total given here (IE!).
- total += bounding;
-
- // Width for each column to use
- columns[ visibleColumns[i] ].sWidth = _fnStringToCss( bounding - border );
- }
-
- table.style.width = _fnStringToCss( total );
-
- // Finished with the table - ditch it
- holder.remove();
- }
-
- // If there is a width attr, we want to attach an event listener which
- // allows the table sizing to automatically adjust when the window is
- // resized. Use the width attr rather than CSS, since we can't know if the
- // CSS is a relative value or absolute - DOM read is always px.
- if ( tableWidthAttr ) {
- table.style.width = _fnStringToCss( tableWidthAttr );
- }
-
- if ( (tableWidthAttr || scrollX) && ! oSettings._reszEvt ) {
- var bindResize = function () {
- $(window).bind('resize.DT-'+oSettings.sInstance, _fnThrottle( function () {
- _fnAdjustColumnSizing( oSettings );
- } ) );
- };
-
- // IE6/7 will crash if we bind a resize event handler on page load.
- // To be removed in 1.11 which drops IE6/7 support
- if ( ie67 ) {
- setTimeout( bindResize, 1000 );
- }
- else {
- bindResize();
- }
-
- oSettings._reszEvt = true;
- }
- }
-
-
- /**
- * Throttle the calls to a function. Arguments and context are maintained for
- * the throttled function
- * @param {function} fn Function to be called
- * @param {int} [freq=200] call frequency in mS
- * @returns {function} wrapped function
- * @memberof DataTable#oApi
- */
- var _fnThrottle = DataTable.util.throttle;
-
-
- /**
- * Convert a CSS unit width to pixels (e.g. 2em)
- * @param {string} width width to be converted
- * @param {node} parent parent to get the with for (required for relative widths) - optional
- * @returns {int} width in pixels
- * @memberof DataTable#oApi
- */
- function _fnConvertToWidth ( width, parent )
- {
- if ( ! width ) {
- return 0;
- }
-
- var n = $('<div/>')
- .css( 'width', _fnStringToCss( width ) )
- .appendTo( parent || document.body );
-
- var val = n[0].offsetWidth;
- n.remove();
-
- return val;
- }
-
-
- /**
- * Get the widest node
- * @param {object} settings dataTables settings object
- * @param {int} colIdx column of interest
- * @returns {node} widest table node
- * @memberof DataTable#oApi
- */
- function _fnGetWidestNode( settings, colIdx )
- {
- var idx = _fnGetMaxLenString( settings, colIdx );
- if ( idx < 0 ) {
- return null;
- }
-
- var data = settings.aoData[ idx ];
- return ! data.nTr ? // Might not have been created when deferred rendering
- $('<td/>').html( _fnGetCellData( settings, idx, colIdx, 'display' ) )[0] :
- data.anCells[ colIdx ];
- }
-
-
- /**
- * Get the maximum strlen for each data column
- * @param {object} settings dataTables settings object
- * @param {int} colIdx column of interest
- * @returns {string} max string length for each column
- * @memberof DataTable#oApi
- */
- function _fnGetMaxLenString( settings, colIdx )
- {
- var s, max=-1, maxIdx = -1;
-
- for ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
- s = _fnGetCellData( settings, i, colIdx, 'display' )+'';
- s = s.replace( __re_html_remove, '' );
- s = s.replace( /&nbsp;/g, ' ' );
-
- if ( s.length > max ) {
- max = s.length;
- maxIdx = i;
- }
- }
-
- return maxIdx;
- }
-
-
- /**
- * Append a CSS unit (only if required) to a string
- * @param {string} value to css-ify
- * @returns {string} value with css unit
- * @memberof DataTable#oApi
- */
- function _fnStringToCss( s )
- {
- if ( s === null ) {
- return '0px';
- }
-
- if ( typeof s == 'number' ) {
- return s < 0 ?
- '0px' :
- s+'px';
- }
-
- // Check it has a unit character already
- return s.match(/\d$/) ?
- s+'px' :
- s;
- }
-
-
-
- function _fnSortFlatten ( settings )
- {
- var
- i, iLen, k, kLen,
- aSort = [],
- aiOrig = [],
- aoColumns = settings.aoColumns,
- aDataSort, iCol, sType, srcCol,
- fixed = settings.aaSortingFixed,
- fixedObj = $.isPlainObject( fixed ),
- nestedSort = [],
- add = function ( a ) {
- if ( a.length && ! $.isArray( a[0] ) ) {
- // 1D array
- nestedSort.push( a );
- }
- else {
- // 2D array
- $.merge( nestedSort, a );
- }
- };
-
- // Build the sort array, with pre-fix and post-fix options if they have been
- // specified
- if ( $.isArray( fixed ) ) {
- add( fixed );
- }
-
- if ( fixedObj && fixed.pre ) {
- add( fixed.pre );
- }
-
- add( settings.aaSorting );
-
- if (fixedObj && fixed.post ) {
- add( fixed.post );
- }
-
- for ( i=0 ; i<nestedSort.length ; i++ )
- {
- srcCol = nestedSort[i][0];
- aDataSort = aoColumns[ srcCol ].aDataSort;
-
- for ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )
- {
- iCol = aDataSort[k];
- sType = aoColumns[ iCol ].sType || 'string';
-
- if ( nestedSort[i]._idx === undefined ) {
- nestedSort[i]._idx = $.inArray( nestedSort[i][1], aoColumns[iCol].asSorting );
- }
-
- aSort.push( {
- src: srcCol,
- col: iCol,
- dir: nestedSort[i][1],
- index: nestedSort[i]._idx,
- type: sType,
- formatter: DataTable.ext.type.order[ sType+"-pre" ]
- } );
- }
- }
-
- return aSort;
- }
-
- /**
- * Change the order of the table
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- * @todo This really needs split up!
- */
- function _fnSort ( oSettings )
- {
- var
- i, ien, iLen, j, jLen, k, kLen,
- sDataType, nTh,
- aiOrig = [],
- oExtSort = DataTable.ext.type.order,
- aoData = oSettings.aoData,
- aoColumns = oSettings.aoColumns,
- aDataSort, data, iCol, sType, oSort,
- formatters = 0,
- sortCol,
- displayMaster = oSettings.aiDisplayMaster,
- aSort;
-
- // Resolve any column types that are unknown due to addition or invalidation
- // @todo Can this be moved into a 'data-ready' handler which is called when
- // data is going to be used in the table?
- _fnColumnTypes( oSettings );
-
- aSort = _fnSortFlatten( oSettings );
-
- for ( i=0, ien=aSort.length ; i<ien ; i++ ) {
- sortCol = aSort[i];
-
- // Track if we can use the fast sort algorithm
- if ( sortCol.formatter ) {
- formatters++;
- }
-
- // Load the data needed for the sort, for each cell
- _fnSortData( oSettings, sortCol.col );
- }
-
- /* No sorting required if server-side or no sorting array */
- if ( _fnDataSource( oSettings ) != 'ssp' && aSort.length !== 0 )
- {
- // Create a value - key array of the current row positions such that we can use their
- // current position during the sort, if values match, in order to perform stable sorting
- for ( i=0, iLen=displayMaster.length ; i<iLen ; i++ ) {
- aiOrig[ displayMaster[i] ] = i;
- }
-
- /* Do the sort - here we want multi-column sorting based on a given data source (column)
- * and sorting function (from oSort) in a certain direction. It's reasonably complex to
- * follow on it's own, but this is what we want (example two column sorting):
- * fnLocalSorting = function(a,b){
- * var iTest;
- * iTest = oSort['string-asc']('data11', 'data12');
- * if (iTest !== 0)
- * return iTest;
- * iTest = oSort['numeric-desc']('data21', 'data22');
- * if (iTest !== 0)
- * return iTest;
- * return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );
- * }
- * Basically we have a test for each sorting column, if the data in that column is equal,
- * test the next column. If all columns match, then we use a numeric sort on the row
- * positions in the original data array to provide a stable sort.
- *
- * Note - I know it seems excessive to have two sorting methods, but the first is around
- * 15% faster, so the second is only maintained for backwards compatibility with sorting
- * methods which do not have a pre-sort formatting function.
- */
- if ( formatters === aSort.length ) {
- // All sort types have formatting functions
- displayMaster.sort( function ( a, b ) {
- var
- x, y, k, test, sort,
- len=aSort.length,
- dataA = aoData[a]._aSortData,
- dataB = aoData[b]._aSortData;
-
- for ( k=0 ; k<len ; k++ ) {
- sort = aSort[k];
-
- x = dataA[ sort.col ];
- y = dataB[ sort.col ];
-
- test = x<y ? -1 : x>y ? 1 : 0;
- if ( test !== 0 ) {
- return sort.dir === 'asc' ? test : -test;
- }
- }
-
- x = aiOrig[a];
- y = aiOrig[b];
- return x<y ? -1 : x>y ? 1 : 0;
- } );
- }
- else {
- // Depreciated - remove in 1.11 (providing a plug-in option)
- // Not all sort types have formatting methods, so we have to call their sorting
- // methods.
- displayMaster.sort( function ( a, b ) {
- var
- x, y, k, l, test, sort, fn,
- len=aSort.length,
- dataA = aoData[a]._aSortData,
- dataB = aoData[b]._aSortData;
-
- for ( k=0 ; k<len ; k++ ) {
- sort = aSort[k];
-
- x = dataA[ sort.col ];
- y = dataB[ sort.col ];
-
- fn = oExtSort[ sort.type+"-"+sort.dir ] || oExtSort[ "string-"+sort.dir ];
- test = fn( x, y );
- if ( test !== 0 ) {
- return test;
- }
- }
-
- x = aiOrig[a];
- y = aiOrig[b];
- return x<y ? -1 : x>y ? 1 : 0;
- } );
- }
- }
-
- /* Tell the draw function that we have sorted the data */
- oSettings.bSorted = true;
- }
-
-
- function _fnSortAria ( settings )
- {
- var label;
- var nextSort;
- var columns = settings.aoColumns;
- var aSort = _fnSortFlatten( settings );
- var oAria = settings.oLanguage.oAria;
-
- // ARIA attributes - need to loop all columns, to update all (removing old
- // attributes as needed)
- for ( var i=0, iLen=columns.length ; i<iLen ; i++ )
- {
- var col = columns[i];
- var asSorting = col.asSorting;
- var sTitle = col.sTitle.replace( /<.*?>/g, "" );
- var th = col.nTh;
-
- // IE7 is throwing an error when setting these properties with jQuery's
- // attr() and removeAttr() methods...
- th.removeAttribute('aria-sort');
-
- /* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */
- if ( col.bSortable ) {
- if ( aSort.length > 0 && aSort[0].col == i ) {
- th.setAttribute('aria-sort', aSort[0].dir=="asc" ? "ascending" : "descending" );
- nextSort = asSorting[ aSort[0].index+1 ] || asSorting[0];
- }
- else {
- nextSort = asSorting[0];
- }
-
- label = sTitle + ( nextSort === "asc" ?
- oAria.sSortAscending :
- oAria.sSortDescending
- );
- }
- else {
- label = sTitle;
- }
-
- th.setAttribute('aria-label', label);
- }
- }
-
-
- /**
- * Function to run on user sort request
- * @param {object} settings dataTables settings object
- * @param {node} attachTo node to attach the handler to
- * @param {int} colIdx column sorting index
- * @param {boolean} [append=false] Append the requested sort to the existing
- * sort if true (i.e. multi-column sort)
- * @param {function} [callback] callback function
- * @memberof DataTable#oApi
- */
- function _fnSortListener ( settings, colIdx, append, callback )
- {
- var col = settings.aoColumns[ colIdx ];
- var sorting = settings.aaSorting;
- var asSorting = col.asSorting;
- var nextSortIdx;
- var next = function ( a, overflow ) {
- var idx = a._idx;
- if ( idx === undefined ) {
- idx = $.inArray( a[1], asSorting );
- }
-
- return idx+1 < asSorting.length ?
- idx+1 :
- overflow ?
- null :
- 0;
- };
-
- // Convert to 2D array if needed
- if ( typeof sorting[0] === 'number' ) {
- sorting = settings.aaSorting = [ sorting ];
- }
-
- // If appending the sort then we are multi-column sorting
- if ( append && settings.oFeatures.bSortMulti ) {
- // Are we already doing some kind of sort on this column?
- var sortIdx = $.inArray( colIdx, _pluck(sorting, '0') );
-
- if ( sortIdx !== -1 ) {
- // Yes, modify the sort
- nextSortIdx = next( sorting[sortIdx], true );
-
- if ( nextSortIdx === null && sorting.length === 1 ) {
- nextSortIdx = 0; // can't remove sorting completely
- }
-
- if ( nextSortIdx === null ) {
- sorting.splice( sortIdx, 1 );
- }
- else {
- sorting[sortIdx][1] = asSorting[ nextSortIdx ];
- sorting[sortIdx]._idx = nextSortIdx;
- }
- }
- else {
- // No sort on this column yet
- sorting.push( [ colIdx, asSorting[0], 0 ] );
- sorting[sorting.length-1]._idx = 0;
- }
- }
- else if ( sorting.length && sorting[0][0] == colIdx ) {
- // Single column - already sorting on this column, modify the sort
- nextSortIdx = next( sorting[0] );
-
- sorting.length = 1;
- sorting[0][1] = asSorting[ nextSortIdx ];
- sorting[0]._idx = nextSortIdx;
- }
- else {
- // Single column - sort only on this column
- sorting.length = 0;
- sorting.push( [ colIdx, asSorting[0] ] );
- sorting[0]._idx = 0;
- }
-
- // Run the sort by calling a full redraw
- _fnReDraw( settings );
-
- // callback used for async user interaction
- if ( typeof callback == 'function' ) {
- callback( settings );
- }
- }
-
-
- /**
- * Attach a sort handler (click) to a node
- * @param {object} settings dataTables settings object
- * @param {node} attachTo node to attach the handler to
- * @param {int} colIdx column sorting index
- * @param {function} [callback] callback function
- * @memberof DataTable#oApi
- */
- function _fnSortAttachListener ( settings, attachTo, colIdx, callback )
- {
- var col = settings.aoColumns[ colIdx ];
-
- _fnBindAction( attachTo, {}, function (e) {
- /* If the column is not sortable - don't to anything */
- if ( col.bSortable === false ) {
- return;
- }
-
- // If processing is enabled use a timeout to allow the processing
- // display to be shown - otherwise to it synchronously
- if ( settings.oFeatures.bProcessing ) {
- _fnProcessingDisplay( settings, true );
-
- setTimeout( function() {
- _fnSortListener( settings, colIdx, e.shiftKey, callback );
-
- // In server-side processing, the draw callback will remove the
- // processing display
- if ( _fnDataSource( settings ) !== 'ssp' ) {
- _fnProcessingDisplay( settings, false );
- }
- }, 0 );
- }
- else {
- _fnSortListener( settings, colIdx, e.shiftKey, callback );
- }
- } );
- }
-
-
- /**
- * Set the sorting classes on table's body, Note: it is safe to call this function
- * when bSort and bSortClasses are false
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnSortingClasses( settings )
- {
- var oldSort = settings.aLastSort;
- var sortClass = settings.oClasses.sSortColumn;
- var sort = _fnSortFlatten( settings );
- var features = settings.oFeatures;
- var i, ien, colIdx;
-
- if ( features.bSort && features.bSortClasses ) {
- // Remove old sorting classes
- for ( i=0, ien=oldSort.length ; i<ien ; i++ ) {
- colIdx = oldSort[i].src;
-
- // Remove column sorting
- $( _pluck( settings.aoData, 'anCells', colIdx ) )
- .removeClass( sortClass + (i<2 ? i+1 : 3) );
- }
-
- // Add new column sorting
- for ( i=0, ien=sort.length ; i<ien ; i++ ) {
- colIdx = sort[i].src;
-
- $( _pluck( settings.aoData, 'anCells', colIdx ) )
- .addClass( sortClass + (i<2 ? i+1 : 3) );
- }
- }
-
- settings.aLastSort = sort;
- }
-
-
- // Get the data to sort a column, be it from cache, fresh (populating the
- // cache), or from a sort formatter
- function _fnSortData( settings, idx )
- {
- // Custom sorting function - provided by the sort data type
- var column = settings.aoColumns[ idx ];
- var customSort = DataTable.ext.order[ column.sSortDataType ];
- var customData;
-
- if ( customSort ) {
- customData = customSort.call( settings.oInstance, settings, idx,
- _fnColumnIndexToVisible( settings, idx )
- );
- }
-
- // Use / populate cache
- var row, cellData;
- var formatter = DataTable.ext.type.order[ column.sType+"-pre" ];
-
- for ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
- row = settings.aoData[i];
-
- if ( ! row._aSortData ) {
- row._aSortData = [];
- }
-
- if ( ! row._aSortData[idx] || customSort ) {
- cellData = customSort ?
- customData[i] : // If there was a custom sort function, use data from there
- _fnGetCellData( settings, i, idx, 'sort' );
-
- row._aSortData[ idx ] = formatter ?
- formatter( cellData ) :
- cellData;
- }
- }
- }
-
-
-
- /**
- * Save the state of a table
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
- function _fnSaveState ( settings )
- {
- if ( !settings.oFeatures.bStateSave || settings.bDestroying )
- {
- return;
- }
-
- /* Store the interesting variables */
- var state = {
- time: +new Date(),
- start: settings._iDisplayStart,
- length: settings._iDisplayLength,
- order: $.extend( true, [], settings.aaSorting ),
- search: _fnSearchToCamel( settings.oPreviousSearch ),
- columns: $.map( settings.aoColumns, function ( col, i ) {
- return {
- visible: col.bVisible,
- search: _fnSearchToCamel( settings.aoPreSearchCols[i] )
- };
- } )
- };
-
- _fnCallbackFire( settings, "aoStateSaveParams", 'stateSaveParams', [settings, state] );
-
- settings.oSavedState = state;
- settings.fnStateSaveCallback.call( settings.oInstance, settings, state );
- }
-
-
- /**
- * Attempt to load a saved table state
- * @param {object} oSettings dataTables settings object
- * @param {object} oInit DataTables init object so we can override settings
- * @memberof DataTable#oApi
- */
- function _fnLoadState ( settings, oInit )
- {
- var i, ien;
- var columns = settings.aoColumns;
-
- if ( ! settings.oFeatures.bStateSave ) {
- return;
- }
-
- var state = settings.fnStateLoadCallback.call( settings.oInstance, settings );
- if ( ! state || ! state.time ) {
- return;
- }
-
- /* Allow custom and plug-in manipulation functions to alter the saved data set and
- * cancelling of loading by returning false
- */
- var abStateLoad = _fnCallbackFire( settings, 'aoStateLoadParams', 'stateLoadParams', [settings, state] );
- if ( $.inArray( false, abStateLoad ) !== -1 ) {
- return;
- }
-
- /* Reject old data */
- var duration = settings.iStateDuration;
- if ( duration > 0 && state.time < +new Date() - (duration*1000) ) {
- return;
- }
-
- // Number of columns have changed - all bets are off, no restore of settings
- if ( columns.length !== state.columns.length ) {
- return;
- }
-
- // Store the saved state so it might be accessed at any time
- settings.oLoadedState = $.extend( true, {}, state );
-
- // Restore key features - todo - for 1.11 this needs to be done by
- // subscribed events
- if ( state.start !== undefined ) {
- settings._iDisplayStart = state.start;
- settings.iInitDisplayStart = state.start;
- }
- if ( state.length !== undefined ) {
- settings._iDisplayLength = state.length;
- }
-
- // Order
- if ( state.order !== undefined ) {
- settings.aaSorting = [];
- $.each( state.order, function ( i, col ) {
- settings.aaSorting.push( col[0] >= columns.length ?
- [ 0, col[1] ] :
- col
- );
- } );
- }
-
- // Search
- if ( state.search !== undefined ) {
- $.extend( settings.oPreviousSearch, _fnSearchToHung( state.search ) );
- }
-
- // Columns
- for ( i=0, ien=state.columns.length ; i<ien ; i++ ) {
- var col = state.columns[i];
-
- // Visibility
- if ( col.visible !== undefined ) {
- columns[i].bVisible = col.visible;
- }
-
- // Search
- if ( col.search !== undefined ) {
- $.extend( settings.aoPreSearchCols[i], _fnSearchToHung( col.search ) );
- }
- }
-
- _fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, state] );
- }
-
-
- /**
- * Return the settings object for a particular table
- * @param {node} table table we are using as a dataTable
- * @returns {object} Settings object - or null if not found
- * @memberof DataTable#oApi
- */
- function _fnSettingsFromNode ( table )
- {
- var settings = DataTable.settings;
- var idx = $.inArray( table, _pluck( settings, 'nTable' ) );
-
- return idx !== -1 ?
- settings[ idx ] :
- null;
- }
-
-
- /**
- * Log an error message
- * @param {object} settings dataTables settings object
- * @param {int} level log error messages, or display them to the user
- * @param {string} msg error message
- * @param {int} tn Technical note id to get more information about the error.
- * @memberof DataTable#oApi
- */
- function _fnLog( settings, level, msg, tn )
- {
- msg = 'DataTables warning: '+
- (settings ? 'table id='+settings.sTableId+' - ' : '')+msg;
-
- if ( tn ) {
- msg += '. For more information about this error, please see '+
- 'http://datatables.net/tn/'+tn;
- }
-
- if ( ! level ) {
- // Backwards compatibility pre 1.10
- var ext = DataTable.ext;
- var type = ext.sErrMode || ext.errMode;
-
- if ( settings ) {
- _fnCallbackFire( settings, null, 'error', [ settings, tn, msg ] );
- }
-
- if ( type == 'alert' ) {
- alert( msg );
- }
- else if ( type == 'throw' ) {
- throw new Error(msg);
- }
- else if ( typeof type == 'function' ) {
- type( settings, tn, msg );
- }
- }
- else if ( window.console && console.log ) {
- console.log( msg );
- }
- }
-
-
- /**
- * See if a property is defined on one object, if so assign it to the other object
- * @param {object} ret target object
- * @param {object} src source object
- * @param {string} name property
- * @param {string} [mappedName] name to map too - optional, name used if not given
- * @memberof DataTable#oApi
- */
- function _fnMap( ret, src, name, mappedName )
- {
- if ( $.isArray( name ) ) {
- $.each( name, function (i, val) {
- if ( $.isArray( val ) ) {
- _fnMap( ret, src, val[0], val[1] );
- }
- else {
- _fnMap( ret, src, val );
- }
- } );
-
- return;
- }
-
- if ( mappedName === undefined ) {
- mappedName = name;
- }
-
- if ( src[name] !== undefined ) {
- ret[mappedName] = src[name];
- }
- }
-
-
- /**
- * Extend objects - very similar to jQuery.extend, but deep copy objects, and
- * shallow copy arrays. The reason we need to do this, is that we don't want to
- * deep copy array init values (such as aaSorting) since the dev wouldn't be
- * able to override them, but we do want to deep copy arrays.
- * @param {object} out Object to extend
- * @param {object} extender Object from which the properties will be applied to
- * out
- * @param {boolean} breakRefs If true, then arrays will be sliced to take an
- * independent copy with the exception of the `data` or `aaData` parameters
- * if they are present. This is so you can pass in a collection to
- * DataTables and have that used as your data source without breaking the
- * references
- * @returns {object} out Reference, just for convenience - out === the return.
- * @memberof DataTable#oApi
- * @todo This doesn't take account of arrays inside the deep copied objects.
- */
- function _fnExtend( out, extender, breakRefs )
- {
- var val;
-
- for ( var prop in extender ) {
- if ( extender.hasOwnProperty(prop) ) {
- val = extender[prop];
-
- if ( $.isPlainObject( val ) ) {
- if ( ! $.isPlainObject( out[prop] ) ) {
- out[prop] = {};
- }
- $.extend( true, out[prop], val );
- }
- else if ( breakRefs && prop !== 'data' && prop !== 'aaData' && $.isArray(val) ) {
- out[prop] = val.slice();
- }
- else {
- out[prop] = val;
- }
- }
- }
-
- return out;
- }
-
-
- /**
- * Bind an event handers to allow a click or return key to activate the callback.
- * This is good for accessibility since a return on the keyboard will have the
- * same effect as a click, if the element has focus.
- * @param {element} n Element to bind the action to
- * @param {object} oData Data object to pass to the triggered function
- * @param {function} fn Callback function for when the event is triggered
- * @memberof DataTable#oApi
- */
- function _fnBindAction( n, oData, fn )
- {
- $(n)
- .bind( 'click.DT', oData, function (e) {
- n.blur(); // Remove focus outline for mouse users
- fn(e);
- } )
- .bind( 'keypress.DT', oData, function (e){
- if ( e.which === 13 ) {
- e.preventDefault();
- fn(e);
- }
- } )
- .bind( 'selectstart.DT', function () {
- /* Take the brutal approach to cancelling text selection */
- return false;
- } );
- }
-
-
- /**
- * Register a callback function. Easily allows a callback function to be added to
- * an array store of callback functions that can then all be called together.
- * @param {object} oSettings dataTables settings object
- * @param {string} sStore Name of the array storage for the callbacks in oSettings
- * @param {function} fn Function to be called back
- * @param {string} sName Identifying name for the callback (i.e. a label)
- * @memberof DataTable#oApi
- */
- function _fnCallbackReg( oSettings, sStore, fn, sName )
- {
- if ( fn )
- {
- oSettings[sStore].push( {
- "fn": fn,
- "sName": sName
- } );
- }
- }
-
-
- /**
- * Fire callback functions and trigger events. Note that the loop over the
- * callback array store is done backwards! Further note that you do not want to
- * fire off triggers in time sensitive applications (for example cell creation)
- * as its slow.
- * @param {object} settings dataTables settings object
- * @param {string} callbackArr Name of the array storage for the callbacks in
- * oSettings
- * @param {string} eventName Name of the jQuery custom event to trigger. If
- * null no trigger is fired
- * @param {array} args Array of arguments to pass to the callback function /
- * trigger
- * @memberof DataTable#oApi
- */
- function _fnCallbackFire( settings, callbackArr, eventName, args )
- {
- var ret = [];
-
- if ( callbackArr ) {
- ret = $.map( settings[callbackArr].slice().reverse(), function (val, i) {
- return val.fn.apply( settings.oInstance, args );
- } );
- }
-
- if ( eventName !== null ) {
- var e = $.Event( eventName+'.dt' );
-
- $(settings.nTable).trigger( e, args );
-
- ret.push( e.result );
- }
-
- return ret;
- }
-
-
- function _fnLengthOverflow ( settings )
- {
- var
- start = settings._iDisplayStart,
- end = settings.fnDisplayEnd(),
- len = settings._iDisplayLength;
-
- /* If we have space to show extra rows (backing up from the end point - then do so */
- if ( start >= end )
- {
- start = end - len;
- }
-
- // Keep the start record on the current page
- start -= (start % len);
-
- if ( len === -1 || start < 0 )
- {
- start = 0;
- }
-
- settings._iDisplayStart = start;
- }
-
-
- function _fnRenderer( settings, type )
- {
- var renderer = settings.renderer;
- var host = DataTable.ext.renderer[type];
-
- if ( $.isPlainObject( renderer ) && renderer[type] ) {
- // Specific renderer for this type. If available use it, otherwise use
- // the default.
- return host[renderer[type]] || host._;
- }
- else if ( typeof renderer === 'string' ) {
- // Common renderer - if there is one available for this type use it,
- // otherwise use the default
- return host[renderer] || host._;
- }
-
- // Use the default
- return host._;
- }
-
-
- /**
- * Detect the data source being used for the table. Used to simplify the code
- * a little (ajax) and to make it compress a little smaller.
- *
- * @param {object} settings dataTables settings object
- * @returns {string} Data source
- * @memberof DataTable#oApi
- */
- function _fnDataSource ( settings )
- {
- if ( settings.oFeatures.bServerSide ) {
- return 'ssp';
- }
- else if ( settings.ajax || settings.sAjaxSource ) {
- return 'ajax';
- }
- return 'dom';
- }
-
-
-
-
- /**
- * Computed structure of the DataTables API, defined by the options passed to
- * `DataTable.Api.register()` when building the API.
- *
- * The structure is built in order to speed creation and extension of the Api
- * objects since the extensions are effectively pre-parsed.
- *
- * The array is an array of objects with the following structure, where this
- * base array represents the Api prototype base:
- *
- * [
- * {
- * name: 'data' -- string - Property name
- * val: function () {}, -- function - Api method (or undefined if just an object
- * methodExt: [ ... ], -- array - Array of Api object definitions to extend the method result
- * propExt: [ ... ] -- array - Array of Api object definitions to extend the property
- * },
- * {
- * name: 'row'
- * val: {},
- * methodExt: [ ... ],
- * propExt: [
- * {
- * name: 'data'
- * val: function () {},
- * methodExt: [ ... ],
- * propExt: [ ... ]
- * },
- * ...
- * ]
- * }
- * ]
- *
- * @type {Array}
- * @ignore
- */
- var __apiStruct = [];
-
-
- /**
- * `Array.prototype` reference.
- *
- * @type object
- * @ignore
- */
- var __arrayProto = Array.prototype;
-
-
- /**
- * Abstraction for `context` parameter of the `Api` constructor to allow it to
- * take several different forms for ease of use.
- *
- * Each of the input parameter types will be converted to a DataTables settings
- * object where possible.
- *
- * @param {string|node|jQuery|object} mixed DataTable identifier. Can be one
- * of:
- *
- * * `string` - jQuery selector. Any DataTables' matching the given selector
- * with be found and used.
- * * `node` - `TABLE` node which has already been formed into a DataTable.
- * * `jQuery` - A jQuery object of `TABLE` nodes.
- * * `object` - DataTables settings object
- * * `DataTables.Api` - API instance
- * @return {array|null} Matching DataTables settings objects. `null` or
- * `undefined` is returned if no matching DataTable is found.
- * @ignore
- */
- var _toSettings = function ( mixed )
- {
- var idx, jq;
- var settings = DataTable.settings;
- var tables = $.map( settings, function (el, i) {
- return el.nTable;
- } );
-
- if ( ! mixed ) {
- return [];
- }
- else if ( mixed.nTable && mixed.oApi ) {
- // DataTables settings object
- return [ mixed ];
- }
- else if ( mixed.nodeName && mixed.nodeName.toLowerCase() === 'table' ) {
- // Table node
- idx = $.inArray( mixed, tables );
- return idx !== -1 ? [ settings[idx] ] : null;
- }
- else if ( mixed && typeof mixed.settings === 'function' ) {
- return mixed.settings().toArray();
- }
- else if ( typeof mixed === 'string' ) {
- // jQuery selector
- jq = $(mixed);
- }
- else if ( mixed instanceof $ ) {
- // jQuery object (also DataTables instance)
- jq = mixed;
- }
-
- if ( jq ) {
- return jq.map( function(i) {
- idx = $.inArray( this, tables );
- return idx !== -1 ? settings[idx] : null;
- } ).toArray();
- }
- };
-
-
- /**
- * DataTables API class - used to control and interface with one or more
- * DataTables enhanced tables.
- *
- * The API class is heavily based on jQuery, presenting a chainable interface
- * that you can use to interact with tables. Each instance of the API class has
- * a "context" - i.e. the tables that it will operate on. This could be a single
- * table, all tables on a page or a sub-set thereof.
- *
- * Additionally the API is designed to allow you to easily work with the data in
- * the tables, retrieving and manipulating it as required. This is done by
- * presenting the API class as an array like interface. The contents of the
- * array depend upon the actions requested by each method (for example
- * `rows().nodes()` will return an array of nodes, while `rows().data()` will
- * return an array of objects or arrays depending upon your table's
- * configuration). The API object has a number of array like methods (`push`,
- * `pop`, `reverse` etc) as well as additional helper methods (`each`, `pluck`,
- * `unique` etc) to assist your working with the data held in a table.
- *
- * Most methods (those which return an Api instance) are chainable, which means
- * the return from a method call also has all of the methods available that the
- * top level object had. For example, these two calls are equivalent:
- *
- * // Not chained
- * api.row.add( {...} );
- * api.draw();
- *
- * // Chained
- * api.row.add( {...} ).draw();
- *
- * @class DataTable.Api
- * @param {array|object|string|jQuery} context DataTable identifier. This is
- * used to define which DataTables enhanced tables this API will operate on.
- * Can be one of:
- *
- * * `string` - jQuery selector. Any DataTables' matching the given selector
- * with be found and used.
- * * `node` - `TABLE` node which has already been formed into a DataTable.
- * * `jQuery` - A jQuery object of `TABLE` nodes.
- * * `object` - DataTables settings object
- * @param {array} [data] Data to initialise the Api instance with.
- *
- * @example
- * // Direct initialisation during DataTables construction
- * var api = $('#example').DataTable();
- *
- * @example
- * // Initialisation using a DataTables jQuery object
- * var api = $('#example').dataTable().api();
- *
- * @example
- * // Initialisation as a constructor
- * var api = new $.fn.DataTable.Api( 'table.dataTable' );
- */
- _Api = function ( context, data )
- {
- if ( ! (this instanceof _Api) ) {
- return new _Api( context, data );
- }
-
- var settings = [];
- var ctxSettings = function ( o ) {
- var a = _toSettings( o );
- if ( a ) {
- settings = settings.concat( a );
- }
- };
-
- if ( $.isArray( context ) ) {
- for ( var i=0, ien=context.length ; i<ien ; i++ ) {
- ctxSettings( context[i] );
- }
- }
- else {
- ctxSettings( context );
- }
-
- // Remove duplicates
- this.context = _unique( settings );
-
- // Initial data
- if ( data ) {
- $.merge( this, data );
- }
-
- // selector
- this.selector = {
- rows: null,
- cols: null,
- opts: null
- };
-
- _Api.extend( this, this, __apiStruct );
- };
-
- DataTable.Api = _Api;
-
- // Don't destroy the existing prototype, just extend it. Required for jQuery 2's
- // isPlainObject.
- $.extend( _Api.prototype, {
- any: function ()
- {
- return this.count() !== 0;
- },
-
-
- concat: __arrayProto.concat,
-
-
- context: [], // array of table settings objects
-
-
- count: function ()
- {
- return this.flatten().length;
- },
-
-
- each: function ( fn )
- {
- for ( var i=0, ien=this.length ; i<ien; i++ ) {
- fn.call( this, this[i], i, this );
- }
-
- return this;
- },
-
-
- eq: function ( idx )
- {
- var ctx = this.context;
-
- return ctx.length > idx ?
- new _Api( ctx[idx], this[idx] ) :
- null;
- },
-
-
- filter: function ( fn )
- {
- var a = [];
-
- if ( __arrayProto.filter ) {
- a = __arrayProto.filter.call( this, fn, this );
- }
- else {
- // Compatibility for browsers without EMCA-252-5 (JS 1.6)
- for ( var i=0, ien=this.length ; i<ien ; i++ ) {
- if ( fn.call( this, this[i], i, this ) ) {
- a.push( this[i] );
- }
- }
- }
-
- return new _Api( this.context, a );
- },
-
-
- flatten: function ()
- {
- var a = [];
- return new _Api( this.context, a.concat.apply( a, this.toArray() ) );
- },
-
-
- join: __arrayProto.join,
-
-
- indexOf: __arrayProto.indexOf || function (obj, start)
- {
- for ( var i=(start || 0), ien=this.length ; i<ien ; i++ ) {
- if ( this[i] === obj ) {
- return i;
- }
- }
- return -1;
- },
-
- iterator: function ( flatten, type, fn, alwaysNew ) {
- var
- a = [], ret,
- i, ien, j, jen,
- context = this.context,
- rows, items, item,
- selector = this.selector;
-
- // Argument shifting
- if ( typeof flatten === 'string' ) {
- alwaysNew = fn;
- fn = type;
- type = flatten;
- flatten = false;
- }
-
- for ( i=0, ien=context.length ; i<ien ; i++ ) {
- var apiInst = new _Api( context[i] );
-
- if ( type === 'table' ) {
- ret = fn.call( apiInst, context[i], i );
-
- if ( ret !== undefined ) {
- a.push( ret );
- }
- }
- else if ( type === 'columns' || type === 'rows' ) {
- // this has same length as context - one entry for each table
- ret = fn.call( apiInst, context[i], this[i], i );
-
- if ( ret !== undefined ) {
- a.push( ret );
- }
- }
- else if ( type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell' ) {
- // columns and rows share the same structure.
- // 'this' is an array of column indexes for each context
- items = this[i];
-
- if ( type === 'column-rows' ) {
- rows = _selector_row_indexes( context[i], selector.opts );
- }
-
- for ( j=0, jen=items.length ; j<jen ; j++ ) {
- item = items[j];
-
- if ( type === 'cell' ) {
- ret = fn.call( apiInst, context[i], item.row, item.column, i, j );
- }
- else {
- ret = fn.call( apiInst, context[i], item, i, j, rows );
- }
-
- if ( ret !== undefined ) {
- a.push( ret );
- }
- }
- }
- }
-
- if ( a.length || alwaysNew ) {
- var api = new _Api( context, flatten ? a.concat.apply( [], a ) : a );
- var apiSelector = api.selector;
- apiSelector.rows = selector.rows;
- apiSelector.cols = selector.cols;
- apiSelector.opts = selector.opts;
- return api;
- }
- return this;
- },
-
-
- lastIndexOf: __arrayProto.lastIndexOf || function (obj, start)
- {
- // Bit cheeky...
- return this.indexOf.apply( this.toArray.reverse(), arguments );
- },
-
-
- length: 0,
-
-
- map: function ( fn )
- {
- var a = [];
-
- if ( __arrayProto.map ) {
- a = __arrayProto.map.call( this, fn, this );
- }
- else {
- // Compatibility for browsers without EMCA-252-5 (JS 1.6)
- for ( var i=0, ien=this.length ; i<ien ; i++ ) {
- a.push( fn.call( this, this[i], i ) );
- }
- }
-
- return new _Api( this.context, a );
- },
-
-
- pluck: function ( prop )
- {
- return this.map( function ( el ) {
- return el[ prop ];
- } );
- },
-
- pop: __arrayProto.pop,
-
-
- push: __arrayProto.push,
-
-
- // Does not return an API instance
- reduce: __arrayProto.reduce || function ( fn, init )
- {
- return _fnReduce( this, fn, init, 0, this.length, 1 );
- },
-
-
- reduceRight: __arrayProto.reduceRight || function ( fn, init )
- {
- return _fnReduce( this, fn, init, this.length-1, -1, -1 );
- },
-
-
- reverse: __arrayProto.reverse,
-
-
- // Object with rows, columns and opts
- selector: null,
-
-
- shift: __arrayProto.shift,
-
-
- sort: __arrayProto.sort, // ? name - order?
-
-
- splice: __arrayProto.splice,
-
-
- toArray: function ()
- {
- return __arrayProto.slice.call( this );
- },
-
-
- to$: function ()
- {
- return $( this );
- },
-
-
- toJQuery: function ()
- {
- return $( this );
- },
-
-
- unique: function ()
- {
- return new _Api( this.context, _unique(this) );
- },
-
-
- unshift: __arrayProto.unshift
- } );
-
-
- _Api.extend = function ( scope, obj, ext )
- {
- // Only extend API instances and static properties of the API
- if ( ! ext.length || ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {
- return;
- }
-
- var
- i, ien,
- j, jen,
- struct, inner,
- methodScoping = function ( scope, fn, struc ) {
- return function () {
- var ret = fn.apply( scope, arguments );
-
- // Method extension
- _Api.extend( ret, ret, struc.methodExt );
- return ret;
- };
- };
-
- for ( i=0, ien=ext.length ; i<ien ; i++ ) {
- struct = ext[i];
-
- // Value
- obj[ struct.name ] = typeof struct.val === 'function' ?
- methodScoping( scope, struct.val, struct ) :
- $.isPlainObject( struct.val ) ?
- {} :
- struct.val;
-
- obj[ struct.name ].__dt_wrapper = true;
-
- // Property extension
- _Api.extend( scope, obj[ struct.name ], struct.propExt );
- }
- };
-
-
- // @todo - Is there need for an augment function?
- // _Api.augment = function ( inst, name )
- // {
- // // Find src object in the structure from the name
- // var parts = name.split('.');
-
- // _Api.extend( inst, obj );
- // };
-
-
- // [
- // {
- // name: 'data' -- string - Property name
- // val: function () {}, -- function - Api method (or undefined if just an object
- // methodExt: [ ... ], -- array - Array of Api object definitions to extend the method result
- // propExt: [ ... ] -- array - Array of Api object definitions to extend the property
- // },
- // {
- // name: 'row'
- // val: {},
- // methodExt: [ ... ],
- // propExt: [
- // {
- // name: 'data'
- // val: function () {},
- // methodExt: [ ... ],
- // propExt: [ ... ]
- // },
- // ...
- // ]
- // }
- // ]
-
- _Api.register = _api_register = function ( name, val )
- {
- if ( $.isArray( name ) ) {
- for ( var j=0, jen=name.length ; j<jen ; j++ ) {
- _Api.register( name[j], val );
- }
- return;
- }
-
- var
- i, ien,
- heir = name.split('.'),
- struct = __apiStruct,
- key, method;
-
- var find = function ( src, name ) {
- for ( var i=0, ien=src.length ; i<ien ; i++ ) {
- if ( src[i].name === name ) {
- return src[i];
- }
- }
- return null;
- };
-
- for ( i=0, ien=heir.length ; i<ien ; i++ ) {
- method = heir[i].indexOf('()') !== -1;
- key = method ?
- heir[i].replace('()', '') :
- heir[i];
-
- var src = find( struct, key );
- if ( ! src ) {
- src = {
- name: key,
- val: {},
- methodExt: [],
- propExt: []
- };
- struct.push( src );
- }
-
- if ( i === ien-1 ) {
- src.val = val;
- }
- else {
- struct = method ?
- src.methodExt :
- src.propExt;
- }
- }
- };
-
-
- _Api.registerPlural = _api_registerPlural = function ( pluralName, singularName, val ) {
- _Api.register( pluralName, val );
-
- _Api.register( singularName, function () {
- var ret = val.apply( this, arguments );
-
- if ( ret === this ) {
- // Returned item is the API instance that was passed in, return it
- return this;
- }
- else if ( ret instanceof _Api ) {
- // New API instance returned, want the value from the first item
- // in the returned array for the singular result.
- return ret.length ?
- $.isArray( ret[0] ) ?
- new _Api( ret.context, ret[0] ) : // Array results are 'enhanced'
- ret[0] :
- undefined;
- }
-
- // Non-API return - just fire it back
- return ret;
- } );
- };
-
-
- /**
- * Selector for HTML tables. Apply the given selector to the give array of
- * DataTables settings objects.
- *
- * @param {string|integer} [selector] jQuery selector string or integer
- * @param {array} Array of DataTables settings objects to be filtered
- * @return {array}
- * @ignore
- */
- var __table_selector = function ( selector, a )
- {
- // Integer is used to pick out a table by index
- if ( typeof selector === 'number' ) {
- return [ a[ selector ] ];
- }
-
- // Perform a jQuery selector on the table nodes
- var nodes = $.map( a, function (el, i) {
- return el.nTable;
- } );
-
- return $(nodes)
- .filter( selector )
- .map( function (i) {
- // Need to translate back from the table node to the settings
- var idx = $.inArray( this, nodes );
- return a[ idx ];
- } )
- .toArray();
- };
-
-
-
- /**
- * Context selector for the API's context (i.e. the tables the API instance
- * refers to.
- *
- * @name DataTable.Api#tables
- * @param {string|integer} [selector] Selector to pick which tables the iterator
- * should operate on. If not given, all tables in the current context are
- * used. This can be given as a jQuery selector (for example `':gt(0)'`) to
- * select multiple tables or as an integer to select a single table.
- * @returns {DataTable.Api} Returns a new API instance if a selector is given.
- */
- _api_register( 'tables()', function ( selector ) {
- // A new instance is created if there was a selector specified
- return selector ?
- new _Api( __table_selector( selector, this.context ) ) :
- this;
- } );
-
-
- _api_register( 'table()', function ( selector ) {
- var tables = this.tables( selector );
- var ctx = tables.context;
-
- // Truncate to the first matched table
- return ctx.length ?
- new _Api( ctx[0] ) :
- tables;
- } );
-
-
- _api_registerPlural( 'tables().nodes()', 'table().node()' , function () {
- return this.iterator( 'table', function ( ctx ) {
- return ctx.nTable;
- }, 1 );
- } );
-
-
- _api_registerPlural( 'tables().body()', 'table().body()' , function () {
- return this.iterator( 'table', function ( ctx ) {
- return ctx.nTBody;
- }, 1 );
- } );
-
-
- _api_registerPlural( 'tables().header()', 'table().header()' , function () {
- return this.iterator( 'table', function ( ctx ) {
- return ctx.nTHead;
- }, 1 );
- } );
-
-
- _api_registerPlural( 'tables().footer()', 'table().footer()' , function () {
- return this.iterator( 'table', function ( ctx ) {
- return ctx.nTFoot;
- }, 1 );
- } );
-
-
- _api_registerPlural( 'tables().containers()', 'table().container()' , function () {
- return this.iterator( 'table', function ( ctx ) {
- return ctx.nTableWrapper;
- }, 1 );
- } );
-
-
-
- /**
- * Redraw the tables in the current context.
- */
- _api_register( 'draw()', function ( paging ) {
- return this.iterator( 'table', function ( settings ) {
- if ( paging === 'page' ) {
- _fnDraw( settings );
- }
- else {
- if ( typeof paging === 'string' ) {
- paging = paging === 'full-hold' ?
- false :
- true;
- }
-
- _fnReDraw( settings, paging===false );
- }
- } );
- } );
-
-
-
- /**
- * Get the current page index.
- *
- * @return {integer} Current page index (zero based)
- *//**
- * Set the current page.
- *
- * Note that if you attempt to show a page which does not exist, DataTables will
- * not throw an error, but rather reset the paging.
- *
- * @param {integer|string} action The paging action to take. This can be one of:
- * * `integer` - The page index to jump to
- * * `string` - An action to take:
- * * `first` - Jump to first page.
- * * `next` - Jump to the next page
- * * `previous` - Jump to previous page
- * * `last` - Jump to the last page.
- * @returns {DataTables.Api} this
- */
- _api_register( 'page()', function ( action ) {
- if ( action === undefined ) {
- return this.page.info().page; // not an expensive call
- }
-
- // else, have an action to take on all tables
- return this.iterator( 'table', function ( settings ) {
- _fnPageChange( settings, action );
- } );
- } );
-
-
- /**
- * Paging information for the first table in the current context.
- *
- * If you require paging information for another table, use the `table()` method
- * with a suitable selector.
- *
- * @return {object} Object with the following properties set:
- * * `page` - Current page index (zero based - i.e. the first page is `0`)
- * * `pages` - Total number of pages
- * * `start` - Display index for the first record shown on the current page
- * * `end` - Display index for the last record shown on the current page
- * * `length` - Display length (number of records). Note that generally `start
- * + length = end`, but this is not always true, for example if there are
- * only 2 records to show on the final page, with a length of 10.
- * * `recordsTotal` - Full data set length
- * * `recordsDisplay` - Data set length once the current filtering criterion
- * are applied.
- */
- _api_register( 'page.info()', function ( action ) {
- if ( this.context.length === 0 ) {
- return undefined;
- }
-
- var
- settings = this.context[0],
- start = settings._iDisplayStart,
- len = settings.oFeatures.bPaginate ? settings._iDisplayLength : -1,
- visRecords = settings.fnRecordsDisplay(),
- all = len === -1;
-
- return {
- "page": all ? 0 : Math.floor( start / len ),
- "pages": all ? 1 : Math.ceil( visRecords / len ),
- "start": start,
- "end": settings.fnDisplayEnd(),
- "length": len,
- "recordsTotal": settings.fnRecordsTotal(),
- "recordsDisplay": visRecords,
- "serverSide": _fnDataSource( settings ) === 'ssp'
- };
- } );
-
-
- /**
- * Get the current page length.
- *
- * @return {integer} Current page length. Note `-1` indicates that all records
- * are to be shown.
- *//**
- * Set the current page length.
- *
- * @param {integer} Page length to set. Use `-1` to show all records.
- * @returns {DataTables.Api} this
- */
- _api_register( 'page.len()', function ( len ) {
- // Note that we can't call this function 'length()' because `length`
- // is a Javascript property of functions which defines how many arguments
- // the function expects.
- if ( len === undefined ) {
- return this.context.length !== 0 ?
- this.context[0]._iDisplayLength :
- undefined;
- }
-
- // else, set the page length
- return this.iterator( 'table', function ( settings ) {
- _fnLengthChange( settings, len );
- } );
- } );
-
-
-
- var __reload = function ( settings, holdPosition, callback ) {
- // Use the draw event to trigger a callback
- if ( callback ) {
- var api = new _Api( settings );
-
- api.one( 'draw', function () {
- callback( api.ajax.json() );
- } );
- }
-
- if ( _fnDataSource( settings ) == 'ssp' ) {
- _fnReDraw( settings, holdPosition );
- }
- else {
- _fnProcessingDisplay( settings, true );
-
- // Cancel an existing request
- var xhr = settings.jqXHR;
- if ( xhr && xhr.readyState !== 4 ) {
- xhr.abort();
- }
-
- // Trigger xhr
- _fnBuildAjax( settings, [], function( json ) {
- _fnClearTable( settings );
-
- var data = _fnAjaxDataSrc( settings, json );
- for ( var i=0, ien=data.length ; i<ien ; i++ ) {
- _fnAddData( settings, data[i] );
- }
-
- _fnReDraw( settings, holdPosition );
- _fnProcessingDisplay( settings, false );
- } );
- }
- };
-
-
- /**
- * Get the JSON response from the last Ajax request that DataTables made to the
- * server. Note that this returns the JSON from the first table in the current
- * context.
- *
- * @return {object} JSON received from the server.
- */
- _api_register( 'ajax.json()', function () {
- var ctx = this.context;
-
- if ( ctx.length > 0 ) {
- return ctx[0].json;
- }
-
- // else return undefined;
- } );
-
-
- /**
- * Get the data submitted in the last Ajax request
- */
- _api_register( 'ajax.params()', function () {
- var ctx = this.context;
-
- if ( ctx.length > 0 ) {
- return ctx[0].oAjaxData;
- }
-
- // else return undefined;
- } );
-
-
- /**
- * Reload tables from the Ajax data source. Note that this function will
- * automatically re-draw the table when the remote data has been loaded.
- *
- * @param {boolean} [reset=true] Reset (default) or hold the current paging
- * position. A full re-sort and re-filter is performed when this method is
- * called, which is why the pagination reset is the default action.
- * @returns {DataTables.Api} this
- */
- _api_register( 'ajax.reload()', function ( callback, resetPaging ) {
- return this.iterator( 'table', function (settings) {
- __reload( settings, resetPaging===false, callback );
- } );
- } );
-
-
- /**
- * Get the current Ajax URL. Note that this returns the URL from the first
- * table in the current context.
- *
- * @return {string} Current Ajax source URL
- *//**
- * Set the Ajax URL. Note that this will set the URL for all tables in the
- * current context.
- *
- * @param {string} url URL to set.
- * @returns {DataTables.Api} this
- */
- _api_register( 'ajax.url()', function ( url ) {
- var ctx = this.context;
-
- if ( url === undefined ) {
- // get
- if ( ctx.length === 0 ) {
- return undefined;
- }
- ctx = ctx[0];
-
- return ctx.ajax ?
- $.isPlainObject( ctx.ajax ) ?
- ctx.ajax.url :
- ctx.ajax :
- ctx.sAjaxSource;
- }
-
- // set
- return this.iterator( 'table', function ( settings ) {
- if ( $.isPlainObject( settings.ajax ) ) {
- settings.ajax.url = url;
- }
- else {
- settings.ajax = url;
- }
- // No need to consider sAjaxSource here since DataTables gives priority
- // to `ajax` over `sAjaxSource`. So setting `ajax` here, renders any
- // value of `sAjaxSource` redundant.
- } );
- } );
-
-
- /**
- * Load data from the newly set Ajax URL. Note that this method is only
- * available when `ajax.url()` is used to set a URL. Additionally, this method
- * has the same effect as calling `ajax.reload()` but is provided for
- * convenience when setting a new URL. Like `ajax.reload()` it will
- * automatically redraw the table once the remote data has been loaded.
- *
- * @returns {DataTables.Api} this
- */
- _api_register( 'ajax.url().load()', function ( callback, resetPaging ) {
- // Same as a reload, but makes sense to present it for easy access after a
- // url change
- return this.iterator( 'table', function ( ctx ) {
- __reload( ctx, resetPaging===false, callback );
- } );
- } );
-
-
-
-
- var _selector_run = function ( type, selector, selectFn, settings, opts )
- {
- var
- out = [], res,
- a, i, ien, j, jen,
- selectorType = typeof selector;
-
- // Can't just check for isArray here, as an API or jQuery instance might be
- // given with their array like look
- if ( ! selector || selectorType === 'string' || selectorType === 'function' || selector.length === undefined ) {
- selector = [ selector ];
- }
-
- for ( i=0, ien=selector.length ; i<ien ; i++ ) {
- a = selector[i] && selector[i].split ?
- selector[i].split(',') :
- [ selector[i] ];
-
- for ( j=0, jen=a.length ; j<jen ; j++ ) {
- res = selectFn( typeof a[j] === 'string' ? $.trim(a[j]) : a[j] );
-
- if ( res && res.length ) {
- out = out.concat( res );
- }
- }
- }
-
- // selector extensions
- var ext = _ext.selector[ type ];
- if ( ext.length ) {
- for ( i=0, ien=ext.length ; i<ien ; i++ ) {
- out = ext[i]( settings, opts, out );
- }
- }
-
- return _unique( out );
- };
-
-
- var _selector_opts = function ( opts )
- {
- if ( ! opts ) {
- opts = {};
- }
-
- // Backwards compatibility for 1.9- which used the terminology filter rather
- // than search
- if ( opts.filter && opts.search === undefined ) {
- opts.search = opts.filter;
- }
-
- return $.extend( {
- search: 'none',
- order: 'current',
- page: 'all'
- }, opts );
- };
-
-
- var _selector_first = function ( inst )
- {
- // Reduce the API instance to the first item found
- for ( var i=0, ien=inst.length ; i<ien ; i++ ) {
- if ( inst[i].length > 0 ) {
- // Assign the first element to the first item in the instance
- // and truncate the instance and context
- inst[0] = inst[i];
- inst[0].length = 1;
- inst.length = 1;
- inst.context = [ inst.context[i] ];
-
- return inst;
- }
- }
-
- // Not found - return an empty instance
- inst.length = 0;
- return inst;
- };
-
-
- var _selector_row_indexes = function ( settings, opts )
- {
- var
- i, ien, tmp, a=[],
- displayFiltered = settings.aiDisplay,
- displayMaster = settings.aiDisplayMaster;
-
- var
- search = opts.search, // none, applied, removed
- order = opts.order, // applied, current, index (original - compatibility with 1.9)
- page = opts.page; // all, current
-
- if ( _fnDataSource( settings ) == 'ssp' ) {
- // In server-side processing mode, most options are irrelevant since
- // rows not shown don't exist and the index order is the applied order
- // Removed is a special case - for consistency just return an empty
- // array
- return search === 'removed' ?
- [] :
- _range( 0, displayMaster.length );
- }
- else if ( page == 'current' ) {
- // Current page implies that order=current and fitler=applied, since it is
- // fairly senseless otherwise, regardless of what order and search actually
- // are
- for ( i=settings._iDisplayStart, ien=settings.fnDisplayEnd() ; i<ien ; i++ ) {
- a.push( displayFiltered[i] );
- }
- }
- else if ( order == 'current' || order == 'applied' ) {
- a = search == 'none' ?
- displayMaster.slice() : // no search
- search == 'applied' ?
- displayFiltered.slice() : // applied search
- $.map( displayMaster, function (el, i) { // removed search
- return $.inArray( el, displayFiltered ) === -1 ? el : null;
- } );
- }
- else if ( order == 'index' || order == 'original' ) {
- for ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
- if ( search == 'none' ) {
- a.push( i );
- }
- else { // applied | removed
- tmp = $.inArray( i, displayFiltered );
-
- if ((tmp === -1 && search == 'removed') ||
- (tmp >= 0 && search == 'applied') )
- {
- a.push( i );
- }
- }
- }
- }
-
- return a;
- };
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Rows
- *
- * {} - no selector - use all available rows
- * {integer} - row aoData index
- * {node} - TR node
- * {string} - jQuery selector to apply to the TR elements
- * {array} - jQuery array of nodes, or simply an array of TR nodes
- *
- */
-
-
- var __row_selector = function ( settings, selector, opts )
- {
- var run = function ( sel ) {
- var selInt = _intVal( sel );
- var i, ien;
-
- // Short cut - selector is a number and no options provided (default is
- // all records, so no need to check if the index is in there, since it
- // must be - dev error if the index doesn't exist).
- if ( selInt !== null && ! opts ) {
- return [ selInt ];
- }
-
- var rows = _selector_row_indexes( settings, opts );
-
- if ( selInt !== null && $.inArray( selInt, rows ) !== -1 ) {
- // Selector - integer
- return [ selInt ];
- }
- else if ( ! sel ) {
- // Selector - none
- return rows;
- }
-
- // Selector - function
- if ( typeof sel === 'function' ) {
- return $.map( rows, function (idx) {
- var row = settings.aoData[ idx ];
- return sel( idx, row._aData, row.nTr ) ? idx : null;
- } );
- }
-
- // Get nodes in the order from the `rows` array with null values removed
- var nodes = _removeEmpty(
- _pluck_order( settings.aoData, rows, 'nTr' )
- );
-
- // Selector - node
- if ( sel.nodeName ) {
- if ( sel._DT_RowIndex !== undefined ) {
- return [ sel._DT_RowIndex ]; // Property added by DT for fast lookup
- }
- else if ( sel._DT_CellIndex ) {
- return [ sel._DT_CellIndex.row ];
- }
- else {
- var host = $(sel).closest('*[data-dt-row]');
- return host.length ?
- [ host.data('dt-row') ] :
- [];
- }
- }
-
- // ID selector. Want to always be able to select rows by id, regardless
- // of if the tr element has been created or not, so can't rely upon
- // jQuery here - hence a custom implementation. This does not match
- // Sizzle's fast selector or HTML4 - in HTML5 the ID can be anything,
- // but to select it using a CSS selector engine (like Sizzle or
- // querySelect) it would need to need to be escaped for some characters.
- // DataTables simplifies this for row selectors since you can select
- // only a row. A # indicates an id any anything that follows is the id -
- // unescaped.
- if ( typeof sel === 'string' && sel.charAt(0) === '#' ) {
- // get row index from id
- var rowObj = settings.aIds[ sel.replace( /^#/, '' ) ];
- if ( rowObj !== undefined ) {
- return [ rowObj.idx ];
- }
-
- // need to fall through to jQuery in case there is DOM id that
- // matches
- }
-
- // Selector - jQuery selector string, array of nodes or jQuery object/
- // As jQuery's .filter() allows jQuery objects to be passed in filter,
- // it also allows arrays, so this will cope with all three options
- return $(nodes)
- .filter( sel )
- .map( function () {
- return this._DT_RowIndex;
- } )
- .toArray();
- };
-
- return _selector_run( 'row', selector, run, settings, opts );
- };
-
-
- _api_register( 'rows()', function ( selector, opts ) {
- // argument shifting
- if ( selector === undefined ) {
- selector = '';
- }
- else if ( $.isPlainObject( selector ) ) {
- opts = selector;
- selector = '';
- }
-
- opts = _selector_opts( opts );
-
- var inst = this.iterator( 'table', function ( settings ) {
- return __row_selector( settings, selector, opts );
- }, 1 );
-
- // Want argument shifting here and in __row_selector?
- inst.selector.rows = selector;
- inst.selector.opts = opts;
-
- return inst;
- } );
-
- _api_register( 'rows().nodes()', function () {
- return this.iterator( 'row', function ( settings, row ) {
- return settings.aoData[ row ].nTr || undefined;
- }, 1 );
- } );
-
- _api_register( 'rows().data()', function () {
- return this.iterator( true, 'rows', function ( settings, rows ) {
- return _pluck_order( settings.aoData, rows, '_aData' );
- }, 1 );
- } );
-
- _api_registerPlural( 'rows().cache()', 'row().cache()', function ( type ) {
- return this.iterator( 'row', function ( settings, row ) {
- var r = settings.aoData[ row ];
- return type === 'search' ? r._aFilterData : r._aSortData;
- }, 1 );
- } );
-
- _api_registerPlural( 'rows().invalidate()', 'row().invalidate()', function ( src ) {
- return this.iterator( 'row', function ( settings, row ) {
- _fnInvalidate( settings, row, src );
- } );
- } );
-
- _api_registerPlural( 'rows().indexes()', 'row().index()', function () {
- return this.iterator( 'row', function ( settings, row ) {
- return row;
- }, 1 );
- } );
-
- _api_registerPlural( 'rows().ids()', 'row().id()', function ( hash ) {
- var a = [];
- var context = this.context;
-
- // `iterator` will drop undefined values, but in this case we want them
- for ( var i=0, ien=context.length ; i<ien ; i++ ) {
- for ( var j=0, jen=this[i].length ; j<jen ; j++ ) {
- var id = context[i].rowIdFn( context[i].aoData[ this[i][j] ]._aData );
- a.push( (hash === true ? '#' : '' )+ id );
- }
- }
-
- return new _Api( context, a );
- } );
-
- _api_registerPlural( 'rows().remove()', 'row().remove()', function () {
- var that = this;
-
- this.iterator( 'row', function ( settings, row, thatIdx ) {
- var data = settings.aoData;
- var rowData = data[ row ];
- var i, ien, j, jen;
- var loopRow, loopCells;
-
- data.splice( row, 1 );
-
- // Update the cached indexes
- for ( i=0, ien=data.length ; i<ien ; i++ ) {
- loopRow = data[i];
- loopCells = loopRow.anCells;
-
- // Rows
- if ( loopRow.nTr !== null ) {
- loopRow.nTr._DT_RowIndex = i;
- }
-
- // Cells
- if ( loopCells !== null ) {
- for ( j=0, jen=loopCells.length ; j<jen ; j++ ) {
- loopCells[j]._DT_CellIndex.row = i;
- }
- }
- }
-
- // Delete from the display arrays
- _fnDeleteIndex( settings.aiDisplayMaster, row );
- _fnDeleteIndex( settings.aiDisplay, row );
- _fnDeleteIndex( that[ thatIdx ], row, false ); // maintain local indexes
-
- // Check for an 'overflow' they case for displaying the table
- _fnLengthOverflow( settings );
-
- // Remove the row's ID reference if there is one
- var id = settings.rowIdFn( rowData._aData );
- if ( id !== undefined ) {
- delete settings.aIds[ id ];
- }
- } );
-
- this.iterator( 'table', function ( settings ) {
- for ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
- settings.aoData[i].idx = i;
- }
- } );
-
- return this;
- } );
-
-
- _api_register( 'rows.add()', function ( rows ) {
- var newRows = this.iterator( 'table', function ( settings ) {
- var row, i, ien;
- var out = [];
-
- for ( i=0, ien=rows.length ; i<ien ; i++ ) {
- row = rows[i];
-
- if ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {
- out.push( _fnAddTr( settings, row )[0] );
- }
- else {
- out.push( _fnAddData( settings, row ) );
- }
- }
-
- return out;
- }, 1 );
-
- // Return an Api.rows() extended instance, so rows().nodes() etc can be used
- var modRows = this.rows( -1 );
- modRows.pop();
- $.merge( modRows, newRows );
-
- return modRows;
- } );
-
-
-
-
-
- /**
- *
- */
- _api_register( 'row()', function ( selector, opts ) {
- return _selector_first( this.rows( selector, opts ) );
- } );
-
-
- _api_register( 'row().data()', function ( data ) {
- var ctx = this.context;
-
- if ( data === undefined ) {
- // Get
- return ctx.length && this.length ?
- ctx[0].aoData[ this[0] ]._aData :
- undefined;
- }
-
- // Set
- ctx[0].aoData[ this[0] ]._aData = data;
-
- // Automatically invalidate
- _fnInvalidate( ctx[0], this[0], 'data' );
-
- return this;
- } );
-
-
- _api_register( 'row().node()', function () {
- var ctx = this.context;
-
- return ctx.length && this.length ?
- ctx[0].aoData[ this[0] ].nTr || null :
- null;
- } );
-
-
- _api_register( 'row.add()', function ( row ) {
- // Allow a jQuery object to be passed in - only a single row is added from
- // it though - the first element in the set
- if ( row instanceof $ && row.length ) {
- row = row[0];
- }
-
- var rows = this.iterator( 'table', function ( settings ) {
- if ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {
- return _fnAddTr( settings, row )[0];
- }
- return _fnAddData( settings, row );
- } );
-
- // Return an Api.rows() extended instance, with the newly added row selected
- return this.row( rows[0] );
- } );
-
-
-
- var __details_add = function ( ctx, row, data, klass )
- {
- // Convert to array of TR elements
- var rows = [];
- var addRow = function ( r, k ) {
- // Recursion to allow for arrays of jQuery objects
- if ( $.isArray( r ) || r instanceof $ ) {
- for ( var i=0, ien=r.length ; i<ien ; i++ ) {
- addRow( r[i], k );
- }
- return;
- }
-
- // If we get a TR element, then just add it directly - up to the dev
- // to add the correct number of columns etc
- if ( r.nodeName && r.nodeName.toLowerCase() === 'tr' ) {
- rows.push( r );
- }
- else {
- // Otherwise create a row with a wrapper
- var created = $('<tr><td/></tr>').addClass( k );
- $('td', created)
- .addClass( k )
- .html( r )
- [0].colSpan = _fnVisbleColumns( ctx );
-
- rows.push( created[0] );
- }
- };
-
- addRow( data, klass );
-
- if ( row._details ) {
- row._details.remove();
- }
-
- row._details = $(rows);
-
- // If the children were already shown, that state should be retained
- if ( row._detailsShow ) {
- row._details.insertAfter( row.nTr );
- }
- };
-
-
- var __details_remove = function ( api, idx )
- {
- var ctx = api.context;
-
- if ( ctx.length ) {
- var row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];
-
- if ( row && row._details ) {
- row._details.remove();
-
- row._detailsShow = undefined;
- row._details = undefined;
- }
- }
- };
-
-
- var __details_display = function ( api, show ) {
- var ctx = api.context;
-
- if ( ctx.length && api.length ) {
- var row = ctx[0].aoData[ api[0] ];
-
- if ( row._details ) {
- row._detailsShow = show;
-
- if ( show ) {
- row._details.insertAfter( row.nTr );
- }
- else {
- row._details.detach();
- }
-
- __details_events( ctx[0] );
- }
- }
- };
-
-
- var __details_events = function ( settings )
- {
- var api = new _Api( settings );
- var namespace = '.dt.DT_details';
- var drawEvent = 'draw'+namespace;
- var colvisEvent = 'column-visibility'+namespace;
- var destroyEvent = 'destroy'+namespace;
- var data = settings.aoData;
-
- api.off( drawEvent +' '+ colvisEvent +' '+ destroyEvent );
-
- if ( _pluck( data, '_details' ).length > 0 ) {
- // On each draw, insert the required elements into the document
- api.on( drawEvent, function ( e, ctx ) {
- if ( settings !== ctx ) {
- return;
- }
-
- api.rows( {page:'current'} ).eq(0).each( function (idx) {
- // Internal data grab
- var row = data[ idx ];
-
- if ( row._detailsShow ) {
- row._details.insertAfter( row.nTr );
- }
- } );
- } );
-
- // Column visibility change - update the colspan
- api.on( colvisEvent, function ( e, ctx, idx, vis ) {
- if ( settings !== ctx ) {
- return;
- }
-
- // Update the colspan for the details rows (note, only if it already has
- // a colspan)
- var row, visible = _fnVisbleColumns( ctx );
-
- for ( var i=0, ien=data.length ; i<ien ; i++ ) {
- row = data[i];
-
- if ( row._details ) {
- row._details.children('td[colspan]').attr('colspan', visible );
- }
- }
- } );
-
- // Table destroyed - nuke any child rows
- api.on( destroyEvent, function ( e, ctx ) {
- if ( settings !== ctx ) {
- return;
- }
-
- for ( var i=0, ien=data.length ; i<ien ; i++ ) {
- if ( data[i]._details ) {
- __details_remove( api, i );
- }
- }
- } );
- }
- };
-
- // Strings for the method names to help minification
- var _emp = '';
- var _child_obj = _emp+'row().child';
- var _child_mth = _child_obj+'()';
-
- // data can be:
- // tr
- // string
- // jQuery or array of any of the above
- _api_register( _child_mth, function ( data, klass ) {
- var ctx = this.context;
-
- if ( data === undefined ) {
- // get
- return ctx.length && this.length ?
- ctx[0].aoData[ this[0] ]._details :
- undefined;
- }
- else if ( data === true ) {
- // show
- this.child.show();
- }
- else if ( data === false ) {
- // remove
- __details_remove( this );
- }
- else if ( ctx.length && this.length ) {
- // set
- __details_add( ctx[0], ctx[0].aoData[ this[0] ], data, klass );
- }
-
- return this;
- } );
-
-
- _api_register( [
- _child_obj+'.show()',
- _child_mth+'.show()' // only when `child()` was called with parameters (without
- ], function ( show ) { // it returns an object and this method is not executed)
- __details_display( this, true );
- return this;
- } );
-
-
- _api_register( [
- _child_obj+'.hide()',
- _child_mth+'.hide()' // only when `child()` was called with parameters (without
- ], function () { // it returns an object and this method is not executed)
- __details_display( this, false );
- return this;
- } );
-
-
- _api_register( [
- _child_obj+'.remove()',
- _child_mth+'.remove()' // only when `child()` was called with parameters (without
- ], function () { // it returns an object and this method is not executed)
- __details_remove( this );
- return this;
- } );
-
-
- _api_register( _child_obj+'.isShown()', function () {
- var ctx = this.context;
-
- if ( ctx.length && this.length ) {
- // _detailsShown as false or undefined will fall through to return false
- return ctx[0].aoData[ this[0] ]._detailsShow || false;
- }
- return false;
- } );
-
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Columns
- *
- * {integer} - column index (>=0 count from left, <0 count from right)
- * "{integer}:visIdx" - visible column index (i.e. translate to column index) (>=0 count from left, <0 count from right)
- * "{integer}:visible" - alias for {integer}:visIdx (>=0 count from left, <0 count from right)
- * "{string}:name" - column name
- * "{string}" - jQuery selector on column header nodes
- *
- */
-
- // can be an array of these items, comma separated list, or an array of comma
- // separated lists
-
- var __re_column_selector = /^(.+):(name|visIdx|visible)$/;
-
-
- // r1 and r2 are redundant - but it means that the parameters match for the
- // iterator callback in columns().data()
- var __columnData = function ( settings, column, r1, r2, rows ) {
- var a = [];
- for ( var row=0, ien=rows.length ; row<ien ; row++ ) {
- a.push( _fnGetCellData( settings, rows[row], column ) );
- }
- return a;
- };
-
-
- var __column_selector = function ( settings, selector, opts )
- {
- var
- columns = settings.aoColumns,
- names = _pluck( columns, 'sName' ),
- nodes = _pluck( columns, 'nTh' );
-
- var run = function ( s ) {
- var selInt = _intVal( s );
-
- // Selector - all
- if ( s === '' ) {
- return _range( columns.length );
- }
-
- // Selector - index
- if ( selInt !== null ) {
- return [ selInt >= 0 ?
- selInt : // Count from left
- columns.length + selInt // Count from right (+ because its a negative value)
- ];
- }
-
- // Selector = function
- if ( typeof s === 'function' ) {
- var rows = _selector_row_indexes( settings, opts );
-
- return $.map( columns, function (col, idx) {
- return s(
- idx,
- __columnData( settings, idx, 0, 0, rows ),
- nodes[ idx ]
- ) ? idx : null;
- } );
- }
-
- // jQuery or string selector
- var match = typeof s === 'string' ?
- s.match( __re_column_selector ) :
- '';
-
- if ( match ) {
- switch( match[2] ) {
- case 'visIdx':
- case 'visible':
- var idx = parseInt( match[1], 10 );
- // Visible index given, convert to column index
- if ( idx < 0 ) {
- // Counting from the right
- var visColumns = $.map( columns, function (col,i) {
- return col.bVisible ? i : null;
- } );
- return [ visColumns[ visColumns.length + idx ] ];
- }
- // Counting from the left
- return [ _fnVisibleToColumnIndex( settings, idx ) ];
-
- case 'name':
- // match by name. `names` is column index complete and in order
- return $.map( names, function (name, i) {
- return name === match[1] ? i : null;
- } );
-
- default:
- return [];
- }
- }
-
- // Cell in the table body
- if ( s.nodeName && s._DT_CellIndex ) {
- return [ s._DT_CellIndex.column ];
- }
-
- // jQuery selector on the TH elements for the columns
- var jqResult = $( nodes )
- .filter( s )
- .map( function () {
- return $.inArray( this, nodes ); // `nodes` is column index complete and in order
- } )
- .toArray();
-
- if ( jqResult.length || ! s.nodeName ) {
- return jqResult;
- }
-
- // Otherwise a node which might have a `dt-column` data attribute, or be
- // a child or such an element
- var host = $(s).closest('*[data-dt-column]');
- return host.length ?
- [ host.data('dt-column') ] :
- [];
- };
-
- return _selector_run( 'column', selector, run, settings, opts );
- };
-
-
- var __setColumnVis = function ( settings, column, vis ) {
- var
- cols = settings.aoColumns,
- col = cols[ column ],
- data = settings.aoData,
- row, cells, i, ien, tr;
-
- // Get
- if ( vis === undefined ) {
- return col.bVisible;
- }
-
- // Set
- // No change
- if ( col.bVisible === vis ) {
- return;
- }
-
- if ( vis ) {
- // Insert column
- // Need to decide if we should use appendChild or insertBefore
- var insertBefore = $.inArray( true, _pluck(cols, 'bVisible'), column+1 );
-
- for ( i=0, ien=data.length ; i<ien ; i++ ) {
- tr = data[i].nTr;
- cells = data[i].anCells;
-
- if ( tr ) {
- // insertBefore can act like appendChild if 2nd arg is null
- tr.insertBefore( cells[ column ], cells[ insertBefore ] || null );
- }
- }
- }
- else {
- // Remove column
- $( _pluck( settings.aoData, 'anCells', column ) ).detach();
- }
-
- // Common actions
- col.bVisible = vis;
- _fnDrawHead( settings, settings.aoHeader );
- _fnDrawHead( settings, settings.aoFooter );
-
- _fnSaveState( settings );
- };
-
-
- _api_register( 'columns()', function ( selector, opts ) {
- // argument shifting
- if ( selector === undefined ) {
- selector = '';
- }
- else if ( $.isPlainObject( selector ) ) {
- opts = selector;
- selector = '';
- }
-
- opts = _selector_opts( opts );
-
- var inst = this.iterator( 'table', function ( settings ) {
- return __column_selector( settings, selector, opts );
- }, 1 );
-
- // Want argument shifting here and in _row_selector?
- inst.selector.cols = selector;
- inst.selector.opts = opts;
-
- return inst;
- } );
-
- _api_registerPlural( 'columns().header()', 'column().header()', function ( selector, opts ) {
- return this.iterator( 'column', function ( settings, column ) {
- return settings.aoColumns[column].nTh;
- }, 1 );
- } );
-
- _api_registerPlural( 'columns().footer()', 'column().footer()', function ( selector, opts ) {
- return this.iterator( 'column', function ( settings, column ) {
- return settings.aoColumns[column].nTf;
- }, 1 );
- } );
-
- _api_registerPlural( 'columns().data()', 'column().data()', function () {
- return this.iterator( 'column-rows', __columnData, 1 );
- } );
-
- _api_registerPlural( 'columns().dataSrc()', 'column().dataSrc()', function () {
- return this.iterator( 'column', function ( settings, column ) {
- return settings.aoColumns[column].mData;
- }, 1 );
- } );
-
- _api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {
- return this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {
- return _pluck_order( settings.aoData, rows,
- type === 'search' ? '_aFilterData' : '_aSortData', column
- );
- }, 1 );
- } );
-
- _api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {
- return this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {
- return _pluck_order( settings.aoData, rows, 'anCells', column ) ;
- }, 1 );
- } );
-
- _api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis, calc ) {
- var ret = this.iterator( 'column', function ( settings, column ) {
- if ( vis === undefined ) {
- return settings.aoColumns[ column ].bVisible;
- } // else
- __setColumnVis( settings, column, vis );
- } );
-
- // Group the column visibility changes
- if ( vis !== undefined ) {
- // Second loop once the first is done for events
- this.iterator( 'column', function ( settings, column ) {
- _fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis, calc] );
- } );
-
- if ( calc === undefined || calc ) {
- this.columns.adjust();
- }
- }
-
- return ret;
- } );
-
- _api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {
- return this.iterator( 'column', function ( settings, column ) {
- return type === 'visible' ?
- _fnColumnIndexToVisible( settings, column ) :
- column;
- }, 1 );
- } );
-
- _api_register( 'columns.adjust()', function () {
- return this.iterator( 'table', function ( settings ) {
- _fnAdjustColumnSizing( settings );
- }, 1 );
- } );
-
- _api_register( 'column.index()', function ( type, idx ) {
- if ( this.context.length !== 0 ) {
- var ctx = this.context[0];
-
- if ( type === 'fromVisible' || type === 'toData' ) {
- return _fnVisibleToColumnIndex( ctx, idx );
- }
- else if ( type === 'fromData' || type === 'toVisible' ) {
- return _fnColumnIndexToVisible( ctx, idx );
- }
- }
- } );
-
- _api_register( 'column()', function ( selector, opts ) {
- return _selector_first( this.columns( selector, opts ) );
- } );
-
-
-
- var __cell_selector = function ( settings, selector, opts )
- {
- var data = settings.aoData;
- var rows = _selector_row_indexes( settings, opts );
- var cells = _removeEmpty( _pluck_order( data, rows, 'anCells' ) );
- var allCells = $( [].concat.apply([], cells) );
- var row;
- var columns = settings.aoColumns.length;
- var a, i, ien, j, o, host;
-
- var run = function ( s ) {
- var fnSelector = typeof s === 'function';
-
- if ( s === null || s === undefined || fnSelector ) {
- // All cells and function selectors
- a = [];
-
- for ( i=0, ien=rows.length ; i<ien ; i++ ) {
- row = rows[i];
-
- for ( j=0 ; j<columns ; j++ ) {
- o = {
- row: row,
- column: j
- };
-
- if ( fnSelector ) {
- // Selector - function
- host = data[ row ];
-
- if ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {
- a.push( o );
- }
- }
- else {
- // Selector - all
- a.push( o );
- }
- }
- }
-
- return a;
- }
-
- // Selector - index
- if ( $.isPlainObject( s ) ) {
- return [s];
- }
-
- // Selector - jQuery filtered cells
- var jqResult = allCells
- .filter( s )
- .map( function (i, el) {
- return { // use a new object, in case someone changes the values
- row: el._DT_CellIndex.row,
- column: el._DT_CellIndex.column
- };
- } )
- .toArray();
-
- if ( jqResult.length || ! s.nodeName ) {
- return jqResult;
- }
-
- // Otherwise the selector is a node, and there is one last option - the
- // element might be a child of an element which has dt-row and dt-column
- // data attributes
- host = $(s).closest('*[data-dt-row]');
- return host.length ?
- [ {
- row: host.data('dt-row'),
- column: host.data('dt-column')
- } ] :
- [];
- };
-
- return _selector_run( 'cell', selector, run, settings, opts );
- };
-
-
-
-
- _api_register( 'cells()', function ( rowSelector, columnSelector, opts ) {
- // Argument shifting
- if ( $.isPlainObject( rowSelector ) ) {
- // Indexes
- if ( rowSelector.row === undefined ) {
- // Selector options in first parameter
- opts = rowSelector;
- rowSelector = null;
- }
- else {
- // Cell index objects in first parameter
- opts = columnSelector;
- columnSelector = null;
- }
- }
- if ( $.isPlainObject( columnSelector ) ) {
- opts = columnSelector;
- columnSelector = null;
- }
-
- // Cell selector
- if ( columnSelector === null || columnSelector === undefined ) {
- return this.iterator( 'table', function ( settings ) {
- return __cell_selector( settings, rowSelector, _selector_opts( opts ) );
- } );
- }
-
- // Row + column selector
- var columns = this.columns( columnSelector, opts );
- var rows = this.rows( rowSelector, opts );
- var a, i, ien, j, jen;
-
- var cells = this.iterator( 'table', function ( settings, idx ) {
- a = [];
-
- for ( i=0, ien=rows[idx].length ; i<ien ; i++ ) {
- for ( j=0, jen=columns[idx].length ; j<jen ; j++ ) {
- a.push( {
- row: rows[idx][i],
- column: columns[idx][j]
- } );
- }
- }
-
- return a;
- }, 1 );
-
- $.extend( cells.selector, {
- cols: columnSelector,
- rows: rowSelector,
- opts: opts
- } );
-
- return cells;
- } );
-
-
- _api_registerPlural( 'cells().nodes()', 'cell().node()', function () {
- return this.iterator( 'cell', function ( settings, row, column ) {
- var data = settings.aoData[ row ];
-
- return data && data.anCells ?
- data.anCells[ column ] :
- undefined;
- }, 1 );
- } );
-
-
- _api_register( 'cells().data()', function () {
- return this.iterator( 'cell', function ( settings, row, column ) {
- return _fnGetCellData( settings, row, column );
- }, 1 );
- } );
-
-
- _api_registerPlural( 'cells().cache()', 'cell().cache()', function ( type ) {
- type = type === 'search' ? '_aFilterData' : '_aSortData';
-
- return this.iterator( 'cell', function ( settings, row, column ) {
- return settings.aoData[ row ][ type ][ column ];
- }, 1 );
- } );
-
-
- _api_registerPlural( 'cells().render()', 'cell().render()', function ( type ) {
- return this.iterator( 'cell', function ( settings, row, column ) {
- return _fnGetCellData( settings, row, column, type );
- }, 1 );
- } );
-
-
- _api_registerPlural( 'cells().indexes()', 'cell().index()', function () {
- return this.iterator( 'cell', function ( settings, row, column ) {
- return {
- row: row,
- column: column,
- columnVisible: _fnColumnIndexToVisible( settings, column )
- };
- }, 1 );
- } );
-
-
- _api_registerPlural( 'cells().invalidate()', 'cell().invalidate()', function ( src ) {
- return this.iterator( 'cell', function ( settings, row, column ) {
- _fnInvalidate( settings, row, src, column );
- } );
- } );
-
-
-
- _api_register( 'cell()', function ( rowSelector, columnSelector, opts ) {
- return _selector_first( this.cells( rowSelector, columnSelector, opts ) );
- } );
-
-
- _api_register( 'cell().data()', function ( data ) {
- var ctx = this.context;
- var cell = this[0];
-
- if ( data === undefined ) {
- // Get
- return ctx.length && cell.length ?
- _fnGetCellData( ctx[0], cell[0].row, cell[0].column ) :
- undefined;
- }
-
- // Set
- _fnSetCellData( ctx[0], cell[0].row, cell[0].column, data );
- _fnInvalidate( ctx[0], cell[0].row, 'data', cell[0].column );
-
- return this;
- } );
-
-
-
- /**
- * Get current ordering (sorting) that has been applied to the table.
- *
- * @returns {array} 2D array containing the sorting information for the first
- * table in the current context. Each element in the parent array represents
- * a column being sorted upon (i.e. multi-sorting with two columns would have
- * 2 inner arrays). The inner arrays may have 2 or 3 elements. The first is
- * the column index that the sorting condition applies to, the second is the
- * direction of the sort (`desc` or `asc`) and, optionally, the third is the
- * index of the sorting order from the `column.sorting` initialisation array.
- *//**
- * Set the ordering for the table.
- *
- * @param {integer} order Column index to sort upon.
- * @param {string} direction Direction of the sort to be applied (`asc` or `desc`)
- * @returns {DataTables.Api} this
- *//**
- * Set the ordering for the table.
- *
- * @param {array} order 1D array of sorting information to be applied.
- * @param {array} [...] Optional additional sorting conditions
- * @returns {DataTables.Api} this
- *//**
- * Set the ordering for the table.
- *
- * @param {array} order 2D array of sorting information to be applied.
- * @returns {DataTables.Api} this
- */
- _api_register( 'order()', function ( order, dir ) {
- var ctx = this.context;
-
- if ( order === undefined ) {
- // get
- return ctx.length !== 0 ?
- ctx[0].aaSorting :
- undefined;
- }
-
- // set
- if ( typeof order === 'number' ) {
- // Simple column / direction passed in
- order = [ [ order, dir ] ];
- }
- else if ( order.length && ! $.isArray( order[0] ) ) {
- // Arguments passed in (list of 1D arrays)
- order = Array.prototype.slice.call( arguments );
- }
- // otherwise a 2D array was passed in
-
- return this.iterator( 'table', function ( settings ) {
- settings.aaSorting = order.slice();
- } );
- } );
-
-
- /**
- * Attach a sort listener to an element for a given column
- *
- * @param {node|jQuery|string} node Identifier for the element(s) to attach the
- * listener to. This can take the form of a single DOM node, a jQuery
- * collection of nodes or a jQuery selector which will identify the node(s).
- * @param {integer} column the column that a click on this node will sort on
- * @param {function} [callback] callback function when sort is run
- * @returns {DataTables.Api} this
- */
- _api_register( 'order.listener()', function ( node, column, callback ) {
- return this.iterator( 'table', function ( settings ) {
- _fnSortAttachListener( settings, node, column, callback );
- } );
- } );
-
-
- _api_register( 'order.fixed()', function ( set ) {
- if ( ! set ) {
- var ctx = this.context;
- var fixed = ctx.length ?
- ctx[0].aaSortingFixed :
- undefined;
-
- return $.isArray( fixed ) ?
- { pre: fixed } :
- fixed;
- }
-
- return this.iterator( 'table', function ( settings ) {
- settings.aaSortingFixed = $.extend( true, {}, set );
- } );
- } );
-
-
- // Order by the selected column(s)
- _api_register( [
- 'columns().order()',
- 'column().order()'
- ], function ( dir ) {
- var that = this;
-
- return this.iterator( 'table', function ( settings, i ) {
- var sort = [];
-
- $.each( that[i], function (j, col) {
- sort.push( [ col, dir ] );
- } );
-
- settings.aaSorting = sort;
- } );
- } );
-
-
-
- _api_register( 'search()', function ( input, regex, smart, caseInsen ) {
- var ctx = this.context;
-
- if ( input === undefined ) {
- // get
- return ctx.length !== 0 ?
- ctx[0].oPreviousSearch.sSearch :
- undefined;
- }
-
- // set
- return this.iterator( 'table', function ( settings ) {
- if ( ! settings.oFeatures.bFilter ) {
- return;
- }
-
- _fnFilterComplete( settings, $.extend( {}, settings.oPreviousSearch, {
- "sSearch": input+"",
- "bRegex": regex === null ? false : regex,
- "bSmart": smart === null ? true : smart,
- "bCaseInsensitive": caseInsen === null ? true : caseInsen
- } ), 1 );
- } );
- } );
-
-
- _api_registerPlural(
- 'columns().search()',
- 'column().search()',
- function ( input, regex, smart, caseInsen ) {
- return this.iterator( 'column', function ( settings, column ) {
- var preSearch = settings.aoPreSearchCols;
-
- if ( input === undefined ) {
- // get
- return preSearch[ column ].sSearch;
- }
-
- // set
- if ( ! settings.oFeatures.bFilter ) {
- return;
- }
-
- $.extend( preSearch[ column ], {
- "sSearch": input+"",
- "bRegex": regex === null ? false : regex,
- "bSmart": smart === null ? true : smart,
- "bCaseInsensitive": caseInsen === null ? true : caseInsen
- } );
-
- _fnFilterComplete( settings, settings.oPreviousSearch, 1 );
- } );
- }
- );
-
- /*
- * State API methods
- */
-
- _api_register( 'state()', function () {
- return this.context.length ?
- this.context[0].oSavedState :
- null;
- } );
-
-
- _api_register( 'state.clear()', function () {
- return this.iterator( 'table', function ( settings ) {
- // Save an empty object
- settings.fnStateSaveCallback.call( settings.oInstance, settings, {} );
- } );
- } );
-
-
- _api_register( 'state.loaded()', function () {
- return this.context.length ?
- this.context[0].oLoadedState :
- null;
- } );
-
-
- _api_register( 'state.save()', function () {
- return this.iterator( 'table', function ( settings ) {
- _fnSaveState( settings );
- } );
- } );
-
-
-
- /**
- * Provide a common method for plug-ins to check the version of DataTables being
- * used, in order to ensure compatibility.
- *
- * @param {string} version Version string to check for, in the format "X.Y.Z".
- * Note that the formats "X" and "X.Y" are also acceptable.
- * @returns {boolean} true if this version of DataTables is greater or equal to
- * the required version, or false if this version of DataTales is not
- * suitable
- * @static
- * @dtopt API-Static
- *
- * @example
- * alert( $.fn.dataTable.versionCheck( '1.9.0' ) );
- */
- DataTable.versionCheck = DataTable.fnVersionCheck = function( version )
- {
- var aThis = DataTable.version.split('.');
- var aThat = version.split('.');
- var iThis, iThat;
-
- for ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) {
- iThis = parseInt( aThis[i], 10 ) || 0;
- iThat = parseInt( aThat[i], 10 ) || 0;
-
- // Parts are the same, keep comparing
- if (iThis === iThat) {
- continue;
- }
-
- // Parts are different, return immediately
- return iThis > iThat;
- }
-
- return true;
- };
-
-
- /**
- * Check if a `<table>` node is a DataTable table already or not.
- *
- * @param {node|jquery|string} table Table node, jQuery object or jQuery
- * selector for the table to test. Note that if more than more than one
- * table is passed on, only the first will be checked
- * @returns {boolean} true the table given is a DataTable, or false otherwise
- * @static
- * @dtopt API-Static
- *
- * @example
- * if ( ! $.fn.DataTable.isDataTable( '#example' ) ) {
- * $('#example').dataTable();
- * }
- */
- DataTable.isDataTable = DataTable.fnIsDataTable = function ( table )
- {
- var t = $(table).get(0);
- var is = false;
-
- $.each( DataTable.settings, function (i, o) {
- var head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;
- var foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;
-
- if ( o.nTable === t || head === t || foot === t ) {
- is = true;
- }
- } );
-
- return is;
- };
-
-
- /**
- * Get all DataTable tables that have been initialised - optionally you can
- * select to get only currently visible tables.
- *
- * @param {boolean} [visible=false] Flag to indicate if you want all (default)
- * or visible tables only.
- * @returns {array} Array of `table` nodes (not DataTable instances) which are
- * DataTables
- * @static
- * @dtopt API-Static
- *
- * @example
- * $.each( $.fn.dataTable.tables(true), function () {
- * $(table).DataTable().columns.adjust();
- * } );
- */
- DataTable.tables = DataTable.fnTables = function ( visible )
- {
- var api = false;
-
- if ( $.isPlainObject( visible ) ) {
- api = visible.api;
- visible = visible.visible;
- }
-
- var a = $.map( DataTable.settings, function (o) {
- if ( !visible || (visible && $(o.nTable).is(':visible')) ) {
- return o.nTable;
- }
- } );
-
- return api ?
- new _Api( a ) :
- a;
- };
-
-
- /**
- * Convert from camel case parameters to Hungarian notation. This is made public
- * for the extensions to provide the same ability as DataTables core to accept
- * either the 1.9 style Hungarian notation, or the 1.10+ style camelCase
- * parameters.
- *
- * @param {object} src The model object which holds all parameters that can be
- * mapped.
- * @param {object} user The object to convert from camel case to Hungarian.
- * @param {boolean} force When set to `true`, properties which already have a
- * Hungarian value in the `user` object will be overwritten. Otherwise they
- * won't be.
- */
- DataTable.camelToHungarian = _fnCamelToHungarian;
-
-
-
- /**
- *
- */
- _api_register( '$()', function ( selector, opts ) {
- var
- rows = this.rows( opts ).nodes(), // Get all rows
- jqRows = $(rows);
-
- return $( [].concat(
- jqRows.filter( selector ).toArray(),
- jqRows.find( selector ).toArray()
- ) );
- } );
-
-
- // jQuery functions to operate on the tables
- $.each( [ 'on', 'one', 'off' ], function (i, key) {
- _api_register( key+'()', function ( /* event, handler */ ) {
- var args = Array.prototype.slice.call(arguments);
-
- // Add the `dt` namespace automatically if it isn't already present
- if ( ! args[0].match(/\.dt\b/) ) {
- args[0] += '.dt';
- }
-
- var inst = $( this.tables().nodes() );
- inst[key].apply( inst, args );
- return this;
- } );
- } );
-
-
- _api_register( 'clear()', function () {
- return this.iterator( 'table', function ( settings ) {
- _fnClearTable( settings );
- } );
- } );
-
-
- _api_register( 'settings()', function () {
- return new _Api( this.context, this.context );
- } );
-
-
- _api_register( 'init()', function () {
- var ctx = this.context;
- return ctx.length ? ctx[0].oInit : null;
- } );
-
-
- _api_register( 'data()', function () {
- return this.iterator( 'table', function ( settings ) {
- return _pluck( settings.aoData, '_aData' );
- } ).flatten();
- } );
-
-
- _api_register( 'destroy()', function ( remove ) {
- remove = remove || false;
-
- return this.iterator( 'table', function ( settings ) {
- var orig = settings.nTableWrapper.parentNode;
- var classes = settings.oClasses;
- var table = settings.nTable;
- var tbody = settings.nTBody;
- var thead = settings.nTHead;
- var tfoot = settings.nTFoot;
- var jqTable = $(table);
- var jqTbody = $(tbody);
- var jqWrapper = $(settings.nTableWrapper);
- var rows = $.map( settings.aoData, function (r) { return r.nTr; } );
- var i, ien;
-
- // Flag to note that the table is currently being destroyed - no action
- // should be taken
- settings.bDestroying = true;
-
- // Fire off the destroy callbacks for plug-ins etc
- _fnCallbackFire( settings, "aoDestroyCallback", "destroy", [settings] );
-
- // If not being removed from the document, make all columns visible
- if ( ! remove ) {
- new _Api( settings ).columns().visible( true );
- }
-
- // Blitz all `DT` namespaced events (these are internal events, the
- // lowercase, `dt` events are user subscribed and they are responsible
- // for removing them
- jqWrapper.unbind('.DT').find(':not(tbody *)').unbind('.DT');
- $(window).unbind('.DT-'+settings.sInstance);
-
- // When scrolling we had to break the table up - restore it
- if ( table != thead.parentNode ) {
- jqTable.children('thead').detach();
- jqTable.append( thead );
- }
-
- if ( tfoot && table != tfoot.parentNode ) {
- jqTable.children('tfoot').detach();
- jqTable.append( tfoot );
- }
-
- settings.aaSorting = [];
- settings.aaSortingFixed = [];
- _fnSortingClasses( settings );
-
- $( rows ).removeClass( settings.asStripeClasses.join(' ') );
-
- $('th, td', thead).removeClass( classes.sSortable+' '+
- classes.sSortableAsc+' '+classes.sSortableDesc+' '+classes.sSortableNone
- );
-
- if ( settings.bJUI ) {
- $('th span.'+classes.sSortIcon+ ', td span.'+classes.sSortIcon, thead).detach();
- $('th, td', thead).each( function () {
- var wrapper = $('div.'+classes.sSortJUIWrapper, this);
- $(this).append( wrapper.contents() );
- wrapper.detach();
- } );
- }
-
- // Add the TR elements back into the table in their original order
- jqTbody.children().detach();
- jqTbody.append( rows );
-
- // Remove the DataTables generated nodes, events and classes
- var removedMethod = remove ? 'remove' : 'detach';
- jqTable[ removedMethod ]();
- jqWrapper[ removedMethod ]();
-
- // If we need to reattach the table to the document
- if ( ! remove && orig ) {
- // insertBefore acts like appendChild if !arg[1]
- orig.insertBefore( table, settings.nTableReinsertBefore );
-
- // Restore the width of the original table - was read from the style property,
- // so we can restore directly to that
- jqTable
- .css( 'width', settings.sDestroyWidth )
- .removeClass( classes.sTable );
-
- // If the were originally stripe classes - then we add them back here.
- // Note this is not fool proof (for example if not all rows had stripe
- // classes - but it's a good effort without getting carried away
- ien = settings.asDestroyStripes.length;
-
- if ( ien ) {
- jqTbody.children().each( function (i) {
- $(this).addClass( settings.asDestroyStripes[i % ien] );
- } );
- }
- }
-
- /* Remove the settings object from the settings array */
- var idx = $.inArray( settings, DataTable.settings );
- if ( idx !== -1 ) {
- DataTable.settings.splice( idx, 1 );
- }
- } );
- } );
-
-
- // Add the `every()` method for rows, columns and cells in a compact form
- $.each( [ 'column', 'row', 'cell' ], function ( i, type ) {
- _api_register( type+'s().every()', function ( fn ) {
- var opts = this.selector.opts;
- var api = this;
-
- return this.iterator( type, function ( settings, arg1, arg2, arg3, arg4 ) {
- // Rows and columns:
- // arg1 - index
- // arg2 - table counter
- // arg3 - loop counter
- // arg4 - undefined
- // Cells:
- // arg1 - row index
- // arg2 - column index
- // arg3 - table counter
- // arg4 - loop counter
- fn.call(
- api[ type ](
- arg1,
- type==='cell' ? arg2 : opts,
- type==='cell' ? opts : undefined
- ),
- arg1, arg2, arg3, arg4
- );
- } );
- } );
- } );
-
-
- // i18n method for extensions to be able to use the language object from the
- // DataTable
- _api_register( 'i18n()', function ( token, def, plural ) {
- var ctx = this.context[0];
- var resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );
-
- if ( resolved === undefined ) {
- resolved = def;
- }
-
- if ( plural !== undefined && $.isPlainObject( resolved ) ) {
- resolved = resolved[ plural ] !== undefined ?
- resolved[ plural ] :
- resolved._;
- }
-
- return resolved.replace( '%d', plural ); // nb: plural might be undefined,
- } );
-
- /**
- * Version string for plug-ins to check compatibility. Allowed format is
- * `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used
- * only for non-release builds. See http://semver.org/ for more information.
- * @member
- * @type string
- * @default Version number
- */
- DataTable.version = "1.10.12";
-
- /**
- * Private data store, containing all of the settings objects that are
- * created for the tables on a given page.
- *
- * Note that the `DataTable.settings` object is aliased to
- * `jQuery.fn.dataTableExt` through which it may be accessed and
- * manipulated, or `jQuery.fn.dataTable.settings`.
- * @member
- * @type array
- * @default []
- * @private
- */
- DataTable.settings = [];
-
- /**
- * Object models container, for the various models that DataTables has
- * available to it. These models define the objects that are used to hold
- * the active state and configuration of the table.
- * @namespace
- */
- DataTable.models = {};
-
-
-
- /**
- * Template object for the way in which DataTables holds information about
- * search information for the global filter and individual column filters.
- * @namespace
- */
- DataTable.models.oSearch = {
- /**
- * Flag to indicate if the filtering should be case insensitive or not
- * @type boolean
- * @default true
- */
- "bCaseInsensitive": true,
-
- /**
- * Applied search term
- * @type string
- * @default <i>Empty string</i>
- */
- "sSearch": "",
-
- /**
- * Flag to indicate if the search term should be interpreted as a
- * regular expression (true) or not (false) and therefore and special
- * regex characters escaped.
- * @type boolean
- * @default false
- */
- "bRegex": false,
-
- /**
- * Flag to indicate if DataTables is to use its smart filtering or not.
- * @type boolean
- * @default true
- */
- "bSmart": true
- };
-
-
-
-
- /**
- * Template object for the way in which DataTables holds information about
- * each individual row. This is the object format used for the settings
- * aoData array.
- * @namespace
- */
- DataTable.models.oRow = {
- /**
- * TR element for the row
- * @type node
- * @default null
- */
- "nTr": null,
-
- /**
- * Array of TD elements for each row. This is null until the row has been
- * created.
- * @type array nodes
- * @default []
- */
- "anCells": null,
-
- /**
- * Data object from the original data source for the row. This is either
- * an array if using the traditional form of DataTables, or an object if
- * using mData options. The exact type will depend on the passed in
- * data from the data source, or will be an array if using DOM a data
- * source.
- * @type array|object
- * @default []
- */
- "_aData": [],
-
- /**
- * Sorting data cache - this array is ostensibly the same length as the
- * number of columns (although each index is generated only as it is
- * needed), and holds the data that is used for sorting each column in the
- * row. We do this cache generation at the start of the sort in order that
- * the formatting of the sort data need be done only once for each cell
- * per sort. This array should not be read from or written to by anything
- * other than the master sorting methods.
- * @type array
- * @default null
- * @private
- */
- "_aSortData": null,
-
- /**
- * Per cell filtering data cache. As per the sort data cache, used to
- * increase the performance of the filtering in DataTables
- * @type array
- * @default null
- * @private
- */
- "_aFilterData": null,
-
- /**
- * Filtering data cache. This is the same as the cell filtering cache, but
- * in this case a string rather than an array. This is easily computed with
- * a join on `_aFilterData`, but is provided as a cache so the join isn't
- * needed on every search (memory traded for performance)
- * @type array
- * @default null
- * @private
- */
- "_sFilterRow": null,
-
- /**
- * Cache of the class name that DataTables has applied to the row, so we
- * can quickly look at this variable rather than needing to do a DOM check
- * on className for the nTr property.
- * @type string
- * @default <i>Empty string</i>
- * @private
- */
- "_sRowStripe": "",
-
- /**
- * Denote if the original data source was from the DOM, or the data source
- * object. This is used for invalidating data, so DataTables can
- * automatically read data from the original source, unless uninstructed
- * otherwise.
- * @type string
- * @default null
- * @private
- */
- "src": null,
-
- /**
- * Index in the aoData array. This saves an indexOf lookup when we have the
- * object, but want to know the index
- * @type integer
- * @default -1
- * @private
- */
- "idx": -1
- };
-
-
- /**
- * Template object for the column information object in DataTables. This object
- * is held in the settings aoColumns array and contains all the information that
- * DataTables needs about each individual column.
- *
- * Note that this object is related to {@link DataTable.defaults.column}
- * but this one is the internal data store for DataTables's cache of columns.
- * It should NOT be manipulated outside of DataTables. Any configuration should
- * be done through the initialisation options.
- * @namespace
- */
- DataTable.models.oColumn = {
- /**
- * Column index. This could be worked out on-the-fly with $.inArray, but it
- * is faster to just hold it as a variable
- * @type integer
- * @default null
- */
- "idx": null,
-
- /**
- * A list of the columns that sorting should occur on when this column
- * is sorted. That this property is an array allows multi-column sorting
- * to be defined for a column (for example first name / last name columns
- * would benefit from this). The values are integers pointing to the
- * columns to be sorted on (typically it will be a single integer pointing
- * at itself, but that doesn't need to be the case).
- * @type array
- */
- "aDataSort": null,
-
- /**
- * Define the sorting directions that are applied to the column, in sequence
- * as the column is repeatedly sorted upon - i.e. the first value is used
- * as the sorting direction when the column if first sorted (clicked on).
- * Sort it again (click again) and it will move on to the next index.
- * Repeat until loop.
- * @type array
- */
- "asSorting": null,
-
- /**
- * Flag to indicate if the column is searchable, and thus should be included
- * in the filtering or not.
- * @type boolean
- */
- "bSearchable": null,
-
- /**
- * Flag to indicate if the column is sortable or not.
- * @type boolean
- */
- "bSortable": null,
-
- /**
- * Flag to indicate if the column is currently visible in the table or not
- * @type boolean
- */
- "bVisible": null,
-
- /**
- * Store for manual type assignment using the `column.type` option. This
- * is held in store so we can manipulate the column's `sType` property.
- * @type string
- * @default null
- * @private
- */
- "_sManualType": null,
-
- /**
- * Flag to indicate if HTML5 data attributes should be used as the data
- * source for filtering or sorting. True is either are.
- * @type boolean
- * @default false
- * @private
- */
- "_bAttrSrc": false,
-
- /**
- * Developer definable function that is called whenever a cell is created (Ajax source,
- * etc) or processed for input (DOM source). This can be used as a compliment to mRender
- * allowing you to modify the DOM element (add background colour for example) when the
- * element is available.
- * @type function
- * @param {element} nTd The TD node that has been created
- * @param {*} sData The Data for the cell
- * @param {array|object} oData The data for the whole row
- * @param {int} iRow The row index for the aoData data store
- * @default null
- */
- "fnCreatedCell": null,
-
- /**
- * Function to get data from a cell in a column. You should <b>never</b>
- * access data directly through _aData internally in DataTables - always use
- * the method attached to this property. It allows mData to function as
- * required. This function is automatically assigned by the column
- * initialisation method
- * @type function
- * @param {array|object} oData The data array/object for the array
- * (i.e. aoData[]._aData)
- * @param {string} sSpecific The specific data type you want to get -
- * 'display', 'type' 'filter' 'sort'
- * @returns {*} The data for the cell from the given row's data
- * @default null
- */
- "fnGetData": null,
-
- /**
- * Function to set data for a cell in the column. You should <b>never</b>
- * set the data directly to _aData internally in DataTables - always use
- * this method. It allows mData to function as required. This function
- * is automatically assigned by the column initialisation method
- * @type function
- * @param {array|object} oData The data array/object for the array
- * (i.e. aoData[]._aData)
- * @param {*} sValue Value to set
- * @default null
- */
- "fnSetData": null,
-
- /**
- * Property to read the value for the cells in the column from the data
- * source array / object. If null, then the default content is used, if a
- * function is given then the return from the function is used.
- * @type function|int|string|null
- * @default null
- */
- "mData": null,
-
- /**
- * Partner property to mData which is used (only when defined) to get
- * the data - i.e. it is basically the same as mData, but without the
- * 'set' option, and also the data fed to it is the result from mData.
- * This is the rendering method to match the data method of mData.
- * @type function|int|string|null
- * @default null
- */
- "mRender": null,
-
- /**
- * Unique header TH/TD element for this column - this is what the sorting
- * listener is attached to (if sorting is enabled.)
- * @type node
- * @default null
- */
- "nTh": null,
-
- /**
- * Unique footer TH/TD element for this column (if there is one). Not used
- * in DataTables as such, but can be used for plug-ins to reference the
- * footer for each column.
- * @type node
- * @default null
- */
- "nTf": null,
-
- /**
- * The class to apply to all TD elements in the table's TBODY for the column
- * @type string
- * @default null
- */
- "sClass": null,
-
- /**
- * When DataTables calculates the column widths to assign to each column,
- * it finds the longest string in each column and then constructs a
- * temporary table and reads the widths from that. The problem with this
- * is that "mmm" is much wider then "iiii", but the latter is a longer
- * string - thus the calculation can go wrong (doing it properly and putting
- * it into an DOM object and measuring that is horribly(!) slow). Thus as
- * a "work around" we provide this option. It will append its value to the
- * text that is found to be the longest string for the column - i.e. padding.
- * @type string
- */
- "sContentPadding": null,
-
- /**
- * Allows a default value to be given for a column's data, and will be used
- * whenever a null data source is encountered (this can be because mData
- * is set to null, or because the data source itself is null).
- * @type string
- * @default null
- */
- "sDefaultContent": null,
-
- /**
- * Name for the column, allowing reference to the column by name as well as
- * by index (needs a lookup to work by name).
- * @type string
- */
- "sName": null,
-
- /**
- * Custom sorting data type - defines which of the available plug-ins in
- * afnSortData the custom sorting will use - if any is defined.
- * @type string
- * @default std
- */
- "sSortDataType": 'std',
-
- /**
- * Class to be applied to the header element when sorting on this column
- * @type string
- * @default null
- */
- "sSortingClass": null,
-
- /**
- * Class to be applied to the header element when sorting on this column -
- * when jQuery UI theming is used.
- * @type string
- * @default null
- */
- "sSortingClassJUI": null,
-
- /**
- * Title of the column - what is seen in the TH element (nTh).
- * @type string
- */
- "sTitle": null,
-
- /**
- * Column sorting and filtering type
- * @type string
- * @default null
- */
- "sType": null,
-
- /**
- * Width of the column
- * @type string
- * @default null
- */
- "sWidth": null,
-
- /**
- * Width of the column when it was first "encountered"
- * @type string
- * @default null
- */
- "sWidthOrig": null
- };
-
-
- /*
- * Developer note: The properties of the object below are given in Hungarian
- * notation, that was used as the interface for DataTables prior to v1.10, however
- * from v1.10 onwards the primary interface is camel case. In order to avoid
- * breaking backwards compatibility utterly with this change, the Hungarian
- * version is still, internally the primary interface, but is is not documented
- * - hence the @name tags in each doc comment. This allows a Javascript function
- * to create a map from Hungarian notation to camel case (going the other direction
- * would require each property to be listed, which would at around 3K to the size
- * of DataTables, while this method is about a 0.5K hit.
- *
- * Ultimately this does pave the way for Hungarian notation to be dropped
- * completely, but that is a massive amount of work and will break current
- * installs (therefore is on-hold until v2).
- */
-
- /**
- * Initialisation options that can be given to DataTables at initialisation
- * time.
- * @namespace
- */
- DataTable.defaults = {
- /**
- * An array of data to use for the table, passed in at initialisation which
- * will be used in preference to any data which is already in the DOM. This is
- * particularly useful for constructing tables purely in Javascript, for
- * example with a custom Ajax call.
- * @type array
- * @default null
- *
- * @dtopt Option
- * @name DataTable.defaults.data
- *
- * @example
- * // Using a 2D array data source
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "data": [
- * ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],
- * ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],
- * ],
- * "columns": [
- * { "title": "Engine" },
- * { "title": "Browser" },
- * { "title": "Platform" },
- * { "title": "Version" },
- * { "title": "Grade" }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using an array of objects as a data source (`data`)
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "data": [
- * {
- * "engine": "Trident",
- * "browser": "Internet Explorer 4.0",
- * "platform": "Win 95+",
- * "version": 4,
- * "grade": "X"
- * },
- * {
- * "engine": "Trident",
- * "browser": "Internet Explorer 5.0",
- * "platform": "Win 95+",
- * "version": 5,
- * "grade": "C"
- * }
- * ],
- * "columns": [
- * { "title": "Engine", "data": "engine" },
- * { "title": "Browser", "data": "browser" },
- * { "title": "Platform", "data": "platform" },
- * { "title": "Version", "data": "version" },
- * { "title": "Grade", "data": "grade" }
- * ]
- * } );
- * } );
- */
- "aaData": null,
-
-
- /**
- * If ordering is enabled, then DataTables will perform a first pass sort on
- * initialisation. You can define which column(s) the sort is performed
- * upon, and the sorting direction, with this variable. The `sorting` array
- * should contain an array for each column to be sorted initially containing
- * the column's index and a direction string ('asc' or 'desc').
- * @type array
- * @default [[0,'asc']]
- *
- * @dtopt Option
- * @name DataTable.defaults.order
- *
- * @example
- * // Sort by 3rd column first, and then 4th column
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "order": [[2,'asc'], [3,'desc']]
- * } );
- * } );
- *
- * // No initial sorting
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "order": []
- * } );
- * } );
- */
- "aaSorting": [[0,'asc']],
-
-
- /**
- * This parameter is basically identical to the `sorting` parameter, but
- * cannot be overridden by user interaction with the table. What this means
- * is that you could have a column (visible or hidden) which the sorting
- * will always be forced on first - any sorting after that (from the user)
- * will then be performed as required. This can be useful for grouping rows
- * together.
- * @type array
- * @default null
- *
- * @dtopt Option
- * @name DataTable.defaults.orderFixed
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "orderFixed": [[0,'asc']]
- * } );
- * } )
- */
- "aaSortingFixed": [],
-
-
- /**
- * DataTables can be instructed to load data to display in the table from a
- * Ajax source. This option defines how that Ajax call is made and where to.
- *
- * The `ajax` property has three different modes of operation, depending on
- * how it is defined. These are:
- *
- * * `string` - Set the URL from where the data should be loaded from.
- * * `object` - Define properties for `jQuery.ajax`.
- * * `function` - Custom data get function
- *
- * `string`
- * --------
- *
- * As a string, the `ajax` property simply defines the URL from which
- * DataTables will load data.
- *
- * `object`
- * --------
- *
- * As an object, the parameters in the object are passed to
- * [jQuery.ajax](http://api.jquery.com/jQuery.ajax/) allowing fine control
- * of the Ajax request. DataTables has a number of default parameters which
- * you can override using this option. Please refer to the jQuery
- * documentation for a full description of the options available, although
- * the following parameters provide additional options in DataTables or
- * require special consideration:
- *
- * * `data` - As with jQuery, `data` can be provided as an object, but it
- * can also be used as a function to manipulate the data DataTables sends
- * to the server. The function takes a single parameter, an object of
- * parameters with the values that DataTables has readied for sending. An
- * object may be returned which will be merged into the DataTables
- * defaults, or you can add the items to the object that was passed in and
- * not return anything from the function. This supersedes `fnServerParams`
- * from DataTables 1.9-.
- *
- * * `dataSrc` - By default DataTables will look for the property `data` (or
- * `aaData` for compatibility with DataTables 1.9-) when obtaining data
- * from an Ajax source or for server-side processing - this parameter
- * allows that property to be changed. You can use Javascript dotted
- * object notation to get a data source for multiple levels of nesting, or
- * it my be used as a function. As a function it takes a single parameter,
- * the JSON returned from the server, which can be manipulated as
- * required, with the returned value being that used by DataTables as the
- * data source for the table. This supersedes `sAjaxDataProp` from
- * DataTables 1.9-.
- *
- * * `success` - Should not be overridden it is used internally in
- * DataTables. To manipulate / transform the data returned by the server
- * use `ajax.dataSrc`, or use `ajax` as a function (see below).
- *
- * `function`
- * ----------
- *
- * As a function, making the Ajax call is left up to yourself allowing
- * complete control of the Ajax request. Indeed, if desired, a method other
- * than Ajax could be used to obtain the required data, such as Web storage
- * or an AIR database.
- *
- * The function is given four parameters and no return is required. The
- * parameters are:
- *
- * 1. _object_ - Data to send to the server
- * 2. _function_ - Callback function that must be executed when the required
- * data has been obtained. That data should be passed into the callback
- * as the only parameter
- * 3. _object_ - DataTables settings object for the table
- *
- * Note that this supersedes `fnServerData` from DataTables 1.9-.
- *
- * @type string|object|function
- * @default null
- *
- * @dtopt Option
- * @name DataTable.defaults.ajax
- * @since 1.10.0
- *
- * @example
- * // Get JSON data from a file via Ajax.
- * // Note DataTables expects data in the form `{ data: [ ...data... ] }` by default).
- * $('#example').dataTable( {
- * "ajax": "data.json"
- * } );
- *
- * @example
- * // Get JSON data from a file via Ajax, using `dataSrc` to change
- * // `data` to `tableData` (i.e. `{ tableData: [ ...data... ] }`)
- * $('#example').dataTable( {
- * "ajax": {
- * "url": "data.json",
- * "dataSrc": "tableData"
- * }
- * } );
- *
- * @example
- * // Get JSON data from a file via Ajax, using `dataSrc` to read data
- * // from a plain array rather than an array in an object
- * $('#example').dataTable( {
- * "ajax": {
- * "url": "data.json",
- * "dataSrc": ""
- * }
- * } );
- *
- * @example
- * // Manipulate the data returned from the server - add a link to data
- * // (note this can, should, be done using `render` for the column - this
- * // is just a simple example of how the data can be manipulated).
- * $('#example').dataTable( {
- * "ajax": {
- * "url": "data.json",
- * "dataSrc": function ( json ) {
- * for ( var i=0, ien=json.length ; i<ien ; i++ ) {
- * json[i][0] = '<a href="/message/'+json[i][0]+'>View message</a>';
- * }
- * return json;
- * }
- * }
- * } );
- *
- * @example
- * // Add data to the request
- * $('#example').dataTable( {
- * "ajax": {
- * "url": "data.json",
- * "data": function ( d ) {
- * return {
- * "extra_search": $('#extra').val()
- * };
- * }
- * }
- * } );
- *
- * @example
- * // Send request as POST
- * $('#example').dataTable( {
- * "ajax": {
- * "url": "data.json",
- * "type": "POST"
- * }
- * } );
- *
- * @example
- * // Get the data from localStorage (could interface with a form for
- * // adding, editing and removing rows).
- * $('#example').dataTable( {
- * "ajax": function (data, callback, settings) {
- * callback(
- * JSON.parse( localStorage.getItem('dataTablesData') )
- * );
- * }
- * } );
- */
- "ajax": null,
-
-
- /**
- * This parameter allows you to readily specify the entries in the length drop
- * down menu that DataTables shows when pagination is enabled. It can be
- * either a 1D array of options which will be used for both the displayed
- * option and the value, or a 2D array which will use the array in the first
- * position as the value, and the array in the second position as the
- * displayed options (useful for language strings such as 'All').
- *
- * Note that the `pageLength` property will be automatically set to the
- * first value given in this array, unless `pageLength` is also provided.
- * @type array
- * @default [ 10, 25, 50, 100 ]
- *
- * @dtopt Option
- * @name DataTable.defaults.lengthMenu
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]]
- * } );
- * } );
- */
- "aLengthMenu": [ 10, 25, 50, 100 ],
-
-
- /**
- * The `columns` option in the initialisation parameter allows you to define
- * details about the way individual columns behave. For a full list of
- * column options that can be set, please see
- * {@link DataTable.defaults.column}. Note that if you use `columns` to
- * define your columns, you must have an entry in the array for every single
- * column that you have in your table (these can be null if you don't which
- * to specify any options).
- * @member
- *
- * @name DataTable.defaults.column
- */
- "aoColumns": null,
-
- /**
- * Very similar to `columns`, `columnDefs` allows you to target a specific
- * column, multiple columns, or all columns, using the `targets` property of
- * each object in the array. This allows great flexibility when creating
- * tables, as the `columnDefs` arrays can be of any length, targeting the
- * columns you specifically want. `columnDefs` may use any of the column
- * options available: {@link DataTable.defaults.column}, but it _must_
- * have `targets` defined in each object in the array. Values in the `targets`
- * array may be:
- * <ul>
- * <li>a string - class name will be matched on the TH for the column</li>
- * <li>0 or a positive integer - column index counting from the left</li>
- * <li>a negative integer - column index counting from the right</li>
- * <li>the string "_all" - all columns (i.e. assign a default)</li>
- * </ul>
- * @member
- *
- * @name DataTable.defaults.columnDefs
- */
- "aoColumnDefs": null,
-
-
- /**
- * Basically the same as `search`, this parameter defines the individual column
- * filtering state at initialisation time. The array must be of the same size
- * as the number of columns, and each element be an object with the parameters
- * `search` and `escapeRegex` (the latter is optional). 'null' is also
- * accepted and the default will be used.
- * @type array
- * @default []
- *
- * @dtopt Option
- * @name DataTable.defaults.searchCols
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "searchCols": [
- * null,
- * { "search": "My filter" },
- * null,
- * { "search": "^[0-9]", "escapeRegex": false }
- * ]
- * } );
- * } )
- */
- "aoSearchCols": [],
-
-
- /**
- * An array of CSS classes that should be applied to displayed rows. This
- * array may be of any length, and DataTables will apply each class
- * sequentially, looping when required.
- * @type array
- * @default null <i>Will take the values determined by the `oClasses.stripe*`
- * options</i>
- *
- * @dtopt Option
- * @name DataTable.defaults.stripeClasses
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "stripeClasses": [ 'strip1', 'strip2', 'strip3' ]
- * } );
- * } )
- */
- "asStripeClasses": null,
-
-
- /**
- * Enable or disable automatic column width calculation. This can be disabled
- * as an optimisation (it takes some time to calculate the widths) if the
- * tables widths are passed in using `columns`.
- * @type boolean
- * @default true
- *
- * @dtopt Features
- * @name DataTable.defaults.autoWidth
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "autoWidth": false
- * } );
- * } );
- */
- "bAutoWidth": true,
-
-
- /**
- * Deferred rendering can provide DataTables with a huge speed boost when you
- * are using an Ajax or JS data source for the table. This option, when set to
- * true, will cause DataTables to defer the creation of the table elements for
- * each row until they are needed for a draw - saving a significant amount of
- * time.
- * @type boolean
- * @default false
- *
- * @dtopt Features
- * @name DataTable.defaults.deferRender
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "ajax": "sources/arrays.txt",
- * "deferRender": true
- * } );
- * } );
- */
- "bDeferRender": false,
-
-
- /**
- * Replace a DataTable which matches the given selector and replace it with
- * one which has the properties of the new initialisation object passed. If no
- * table matches the selector, then the new DataTable will be constructed as
- * per normal.
- * @type boolean
- * @default false
- *
- * @dtopt Options
- * @name DataTable.defaults.destroy
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "srollY": "200px",
- * "paginate": false
- * } );
- *
- * // Some time later....
- * $('#example').dataTable( {
- * "filter": false,
- * "destroy": true
- * } );
- * } );
- */
- "bDestroy": false,
-
-
- /**
- * Enable or disable filtering of data. Filtering in DataTables is "smart" in
- * that it allows the end user to input multiple words (space separated) and
- * will match a row containing those words, even if not in the order that was
- * specified (this allow matching across multiple columns). Note that if you
- * wish to use filtering in DataTables this must remain 'true' - to remove the
- * default filtering input box and retain filtering abilities, please use
- * {@link DataTable.defaults.dom}.
- * @type boolean
- * @default true
- *
- * @dtopt Features
- * @name DataTable.defaults.searching
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "searching": false
- * } );
- * } );
- */
- "bFilter": true,
-
-
- /**
- * Enable or disable the table information display. This shows information
- * about the data that is currently visible on the page, including information
- * about filtered data if that action is being performed.
- * @type boolean
- * @default true
- *
- * @dtopt Features
- * @name DataTable.defaults.info
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "info": false
- * } );
- * } );
- */
- "bInfo": true,
-
-
- /**
- * Enable jQuery UI ThemeRoller support (required as ThemeRoller requires some
- * slightly different and additional mark-up from what DataTables has
- * traditionally used).
- * @type boolean
- * @default false
- *
- * @dtopt Features
- * @name DataTable.defaults.jQueryUI
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "jQueryUI": true
- * } );
- * } );
- */
- "bJQueryUI": false,
-
-
- /**
- * Allows the end user to select the size of a formatted page from a select
- * menu (sizes are 10, 25, 50 and 100). Requires pagination (`paginate`).
- * @type boolean
- * @default true
- *
- * @dtopt Features
- * @name DataTable.defaults.lengthChange
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "lengthChange": false
- * } );
- * } );
- */
- "bLengthChange": true,
-
-
- /**
- * Enable or disable pagination.
- * @type boolean
- * @default true
- *
- * @dtopt Features
- * @name DataTable.defaults.paging
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "paging": false
- * } );
- * } );
- */
- "bPaginate": true,
-
-
- /**
- * Enable or disable the display of a 'processing' indicator when the table is
- * being processed (e.g. a sort). This is particularly useful for tables with
- * large amounts of data where it can take a noticeable amount of time to sort
- * the entries.
- * @type boolean
- * @default false
- *
- * @dtopt Features
- * @name DataTable.defaults.processing
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "processing": true
- * } );
- * } );
- */
- "bProcessing": false,
-
-
- /**
- * Retrieve the DataTables object for the given selector. Note that if the
- * table has already been initialised, this parameter will cause DataTables
- * to simply return the object that has already been set up - it will not take
- * account of any changes you might have made to the initialisation object
- * passed to DataTables (setting this parameter to true is an acknowledgement
- * that you understand this). `destroy` can be used to reinitialise a table if
- * you need.
- * @type boolean
- * @default false
- *
- * @dtopt Options
- * @name DataTable.defaults.retrieve
- *
- * @example
- * $(document).ready( function() {
- * initTable();
- * tableActions();
- * } );
- *
- * function initTable ()
- * {
- * return $('#example').dataTable( {
- * "scrollY": "200px",
- * "paginate": false,
- * "retrieve": true
- * } );
- * }
- *
- * function tableActions ()
- * {
- * var table = initTable();
- * // perform API operations with oTable
- * }
- */
- "bRetrieve": false,
-
-
- /**
- * When vertical (y) scrolling is enabled, DataTables will force the height of
- * the table's viewport to the given height at all times (useful for layout).
- * However, this can look odd when filtering data down to a small data set,
- * and the footer is left "floating" further down. This parameter (when
- * enabled) will cause DataTables to collapse the table's viewport down when
- * the result set will fit within the given Y height.
- * @type boolean
- * @default false
- *
- * @dtopt Options
- * @name DataTable.defaults.scrollCollapse
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "scrollY": "200",
- * "scrollCollapse": true
- * } );
- * } );
- */
- "bScrollCollapse": false,
-
-
- /**
- * Configure DataTables to use server-side processing. Note that the
- * `ajax` parameter must also be given in order to give DataTables a
- * source to obtain the required data for each draw.
- * @type boolean
- * @default false
- *
- * @dtopt Features
- * @dtopt Server-side
- * @name DataTable.defaults.serverSide
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "serverSide": true,
- * "ajax": "xhr.php"
- * } );
- * } );
- */
- "bServerSide": false,
-
-
- /**
- * Enable or disable sorting of columns. Sorting of individual columns can be
- * disabled by the `sortable` option for each column.
- * @type boolean
- * @default true
- *
- * @dtopt Features
- * @name DataTable.defaults.ordering
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "ordering": false
- * } );
- * } );
- */
- "bSort": true,
-
-
- /**
- * Enable or display DataTables' ability to sort multiple columns at the
- * same time (activated by shift-click by the user).
- * @type boolean
- * @default true
- *
- * @dtopt Options
- * @name DataTable.defaults.orderMulti
- *
- * @example
- * // Disable multiple column sorting ability
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "orderMulti": false
- * } );
- * } );
- */
- "bSortMulti": true,
-
-
- /**
- * Allows control over whether DataTables should use the top (true) unique
- * cell that is found for a single column, or the bottom (false - default).
- * This is useful when using complex headers.
- * @type boolean
- * @default false
- *
- * @dtopt Options
- * @name DataTable.defaults.orderCellsTop
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "orderCellsTop": true
- * } );
- * } );
- */
- "bSortCellsTop": false,
-
-
- /**
- * Enable or disable the addition of the classes `sorting\_1`, `sorting\_2` and
- * `sorting\_3` to the columns which are currently being sorted on. This is
- * presented as a feature switch as it can increase processing time (while
- * classes are removed and added) so for large data sets you might want to
- * turn this off.
- * @type boolean
- * @default true
- *
- * @dtopt Features
- * @name DataTable.defaults.orderClasses
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "orderClasses": false
- * } );
- * } );
- */
- "bSortClasses": true,
-
-
- /**
- * Enable or disable state saving. When enabled HTML5 `localStorage` will be
- * used to save table display information such as pagination information,
- * display length, filtering and sorting. As such when the end user reloads
- * the page the display display will match what thy had previously set up.
- *
- * Due to the use of `localStorage` the default state saving is not supported
- * in IE6 or 7. If state saving is required in those browsers, use
- * `stateSaveCallback` to provide a storage solution such as cookies.
- * @type boolean
- * @default false
- *
- * @dtopt Features
- * @name DataTable.defaults.stateSave
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "stateSave": true
- * } );
- * } );
- */
- "bStateSave": false,
-
-
- /**
- * This function is called when a TR element is created (and all TD child
- * elements have been inserted), or registered if using a DOM source, allowing
- * manipulation of the TR element (adding classes etc).
- * @type function
- * @param {node} row "TR" element for the current row
- * @param {array} data Raw data array for this row
- * @param {int} dataIndex The index of this row in the internal aoData array
- *
- * @dtopt Callbacks
- * @name DataTable.defaults.createdRow
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "createdRow": function( row, data, dataIndex ) {
- * // Bold the grade for all 'A' grade browsers
- * if ( data[4] == "A" )
- * {
- * $('td:eq(4)', row).html( '<b>A</b>' );
- * }
- * }
- * } );
- * } );
- */
- "fnCreatedRow": null,
-
-
- /**
- * This function is called on every 'draw' event, and allows you to
- * dynamically modify any aspect you want about the created DOM.
- * @type function
- * @param {object} settings DataTables settings object
- *
- * @dtopt Callbacks
- * @name DataTable.defaults.drawCallback
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "drawCallback": function( settings ) {
- * alert( 'DataTables has redrawn the table' );
- * }
- * } );
- * } );
- */
- "fnDrawCallback": null,
-
-
- /**
- * Identical to fnHeaderCallback() but for the table footer this function
- * allows you to modify the table footer on every 'draw' event.
- * @type function
- * @param {node} foot "TR" element for the footer
- * @param {array} data Full table data (as derived from the original HTML)
- * @param {int} start Index for the current display starting point in the
- * display array
- * @param {int} end Index for the current display ending point in the
- * display array
- * @param {array int} display Index array to translate the visual position
- * to the full data array
- *
- * @dtopt Callbacks
- * @name DataTable.defaults.footerCallback
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "footerCallback": function( tfoot, data, start, end, display ) {
- * tfoot.getElementsByTagName('th')[0].innerHTML = "Starting index is "+start;
- * }
- * } );
- * } )
- */
- "fnFooterCallback": null,
-
-
- /**
- * When rendering large numbers in the information element for the table
- * (i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers
- * to have a comma separator for the 'thousands' units (e.g. 1 million is
- * rendered as "1,000,000") to help readability for the end user. This
- * function will override the default method DataTables uses.
- * @type function
- * @member
- * @param {int} toFormat number to be formatted
- * @returns {string} formatted string for DataTables to show the number
- *
- * @dtopt Callbacks
- * @name DataTable.defaults.formatNumber
- *
- * @example
- * // Format a number using a single quote for the separator (note that
- * // this can also be done with the language.thousands option)
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "formatNumber": function ( toFormat ) {
- * return toFormat.toString().replace(
- * /\B(?=(\d{3})+(?!\d))/g, "'"
- * );
- * };
- * } );
- * } );
- */
- "fnFormatNumber": function ( toFormat ) {
- return toFormat.toString().replace(
- /\B(?=(\d{3})+(?!\d))/g,
- this.oLanguage.sThousands
- );
- },
-
-
- /**
- * This function is called on every 'draw' event, and allows you to
- * dynamically modify the header row. This can be used to calculate and
- * display useful information about the table.
- * @type function
- * @param {node} head "TR" element for the header
- * @param {array} data Full table data (as derived from the original HTML)
- * @param {int} start Index for the current display starting point in the
- * display array
- * @param {int} end Index for the current display ending point in the
- * display array
- * @param {array int} display Index array to translate the visual position
- * to the full data array
- *
- * @dtopt Callbacks
- * @name DataTable.defaults.headerCallback
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "fheaderCallback": function( head, data, start, end, display ) {
- * head.getElementsByTagName('th')[0].innerHTML = "Displaying "+(end-start)+" records";
- * }
- * } );
- * } )
- */
- "fnHeaderCallback": null,
-
-
- /**
- * The information element can be used to convey information about the current
- * state of the table. Although the internationalisation options presented by
- * DataTables are quite capable of dealing with most customisations, there may
- * be times where you wish to customise the string further. This callback
- * allows you to do exactly that.
- * @type function
- * @param {object} oSettings DataTables settings object
- * @param {int} start Starting position in data for the draw
- * @param {int} end End position in data for the draw
- * @param {int} max Total number of rows in the table (regardless of
- * filtering)
- * @param {int} total Total number of rows in the data set, after filtering
- * @param {string} pre The string that DataTables has formatted using it's
- * own rules
- * @returns {string} The string to be displayed in the information element.
- *
- * @dtopt Callbacks
- * @name DataTable.defaults.infoCallback
- *
- * @example
- * $('#example').dataTable( {
- * "infoCallback": function( settings, start, end, max, total, pre ) {
- * return start +" to "+ end;
- * }
- * } );
- */
- "fnInfoCallback": null,
-
-
- /**
- * Called when the table has been initialised. Normally DataTables will
- * initialise sequentially and there will be no need for this function,
- * however, this does not hold true when using external language information
- * since that is obtained using an async XHR call.
- * @type function
- * @param {object} settings DataTables settings object
- * @param {object} json The JSON object request from the server - only
- * present if client-side Ajax sourced data is used
- *
- * @dtopt Callbacks
- * @name DataTable.defaults.initComplete
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "initComplete": function(settings, json) {
- * alert( 'DataTables has finished its initialisation.' );
- * }
- * } );
- * } )
- */
- "fnInitComplete": null,
-
-
- /**
- * Called at the very start of each table draw and can be used to cancel the
- * draw by returning false, any other return (including undefined) results in
- * the full draw occurring).
- * @type function
- * @param {object} settings DataTables settings object
- * @returns {boolean} False will cancel the draw, anything else (including no
- * return) will allow it to complete.
- *
- * @dtopt Callbacks
- * @name DataTable.defaults.preDrawCallback
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "preDrawCallback": function( settings ) {
- * if ( $('#test').val() == 1 ) {
- * return false;
- * }
- * }
- * } );
- * } );
- */
- "fnPreDrawCallback": null,
-
-
- /**
- * This function allows you to 'post process' each row after it have been
- * generated for each table draw, but before it is rendered on screen. This
- * function might be used for setting the row class name etc.
- * @type function
- * @param {node} row "TR" element for the current row
- * @param {array} data Raw data array for this row
- * @param {int} displayIndex The display index for the current table draw
- * @param {int} displayIndexFull The index of the data in the full list of
- * rows (after filtering)
- *
- * @dtopt Callbacks
- * @name DataTable.defaults.rowCallback
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "rowCallback": function( row, data, displayIndex, displayIndexFull ) {
- * // Bold the grade for all 'A' grade browsers
- * if ( data[4] == "A" ) {
- * $('td:eq(4)', row).html( '<b>A</b>' );
- * }
- * }
- * } );
- * } );
- */
- "fnRowCallback": null,
-
-
- /**
- * __Deprecated__ The functionality provided by this parameter has now been
- * superseded by that provided through `ajax`, which should be used instead.
- *
- * This parameter allows you to override the default function which obtains
- * the data from the server so something more suitable for your application.
- * For example you could use POST data, or pull information from a Gears or
- * AIR database.
- * @type function
- * @member
- * @param {string} source HTTP source to obtain the data from (`ajax`)
- * @param {array} data A key/value pair object containing the data to send
- * to the server
- * @param {function} callback to be called on completion of the data get
- * process that will draw the data on the page.
- * @param {object} settings DataTables settings object
- *
- * @dtopt Callbacks
- * @dtopt Server-side
- * @name DataTable.defaults.serverData
- *
- * @deprecated 1.10. Please use `ajax` for this functionality now.
- */
- "fnServerData": null,
-
-
- /**
- * __Deprecated__ The functionality provided by this parameter has now been
- * superseded by that provided through `ajax`, which should be used instead.
- *
- * It is often useful to send extra data to the server when making an Ajax
- * request - for example custom filtering information, and this callback
- * function makes it trivial to send extra information to the server. The
- * passed in parameter is the data set that has been constructed by
- * DataTables, and you can add to this or modify it as you require.
- * @type function
- * @param {array} data Data array (array of objects which are name/value
- * pairs) that has been constructed by DataTables and will be sent to the
- * server. In the case of Ajax sourced data with server-side processing
- * this will be an empty array, for server-side processing there will be a
- * significant number of parameters!
- * @returns {undefined} Ensure that you modify the data array passed in,
- * as this is passed by reference.
- *
- * @dtopt Callbacks
- * @dtopt Server-side
- * @name DataTable.defaults.serverParams
- *
- * @deprecated 1.10. Please use `ajax` for this functionality now.
- */
- "fnServerParams": null,
-
-
- /**
- * Load the table state. With this function you can define from where, and how, the
- * state of a table is loaded. By default DataTables will load from `localStorage`
- * but you might wish to use a server-side database or cookies.
- * @type function
- * @member
- * @param {object} settings DataTables settings object
- * @return {object} The DataTables state object to be loaded
- *
- * @dtopt Callbacks
- * @name DataTable.defaults.stateLoadCallback
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "stateSave": true,
- * "stateLoadCallback": function (settings) {
- * var o;
- *
- * // Send an Ajax request to the server to get the data. Note that
- * // this is a synchronous request.
- * $.ajax( {
- * "url": "/state_load",
- * "async": false,
- * "dataType": "json",
- * "success": function (json) {
- * o = json;
- * }
- * } );
- *
- * return o;
- * }
- * } );
- * } );
- */
- "fnStateLoadCallback": function ( settings ) {
- try {
- return JSON.parse(
- (settings.iStateDuration === -1 ? sessionStorage : localStorage).getItem(
- 'DataTables_'+settings.sInstance+'_'+location.pathname
- )
- );
- } catch (e) {}
- },
-
-
- /**
- * Callback which allows modification of the saved state prior to loading that state.
- * This callback is called when the table is loading state from the stored data, but
- * prior to the settings object being modified by the saved state. Note that for
- * plug-in authors, you should use the `stateLoadParams` event to load parameters for
- * a plug-in.
- * @type function
- * @param {object} settings DataTables settings object
- * @param {object} data The state object that is to be loaded
- *
- * @dtopt Callbacks
- * @name DataTable.defaults.stateLoadParams
- *
- * @example
- * // Remove a saved filter, so filtering is never loaded
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "stateSave": true,
- * "stateLoadParams": function (settings, data) {
- * data.oSearch.sSearch = "";
- * }
- * } );
- * } );
- *
- * @example
- * // Disallow state loading by returning false
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "stateSave": true,
- * "stateLoadParams": function (settings, data) {
- * return false;
- * }
- * } );
- * } );
- */
- "fnStateLoadParams": null,
-
-
- /**
- * Callback that is called when the state has been loaded from the state saving method
- * and the DataTables settings object has been modified as a result of the loaded state.
- * @type function
- * @param {object} settings DataTables settings object
- * @param {object} data The state object that was loaded
- *
- * @dtopt Callbacks
- * @name DataTable.defaults.stateLoaded
- *
- * @example
- * // Show an alert with the filtering value that was saved
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "stateSave": true,
- * "stateLoaded": function (settings, data) {
- * alert( 'Saved filter was: '+data.oSearch.sSearch );
- * }
- * } );
- * } );
- */
- "fnStateLoaded": null,
-
-
- /**
- * Save the table state. This function allows you to define where and how the state
- * information for the table is stored By default DataTables will use `localStorage`
- * but you might wish to use a server-side database or cookies.
- * @type function
- * @member
- * @param {object} settings DataTables settings object
- * @param {object} data The state object to be saved
- *
- * @dtopt Callbacks
- * @name DataTable.defaults.stateSaveCallback
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "stateSave": true,
- * "stateSaveCallback": function (settings, data) {
- * // Send an Ajax request to the server with the state object
- * $.ajax( {
- * "url": "/state_save",
- * "data": data,
- * "dataType": "json",
- * "method": "POST"
- * "success": function () {}
- * } );
- * }
- * } );
- * } );
- */
- "fnStateSaveCallback": function ( settings, data ) {
- try {
- (settings.iStateDuration === -1 ? sessionStorage : localStorage).setItem(
- 'DataTables_'+settings.sInstance+'_'+location.pathname,
- JSON.stringify( data )
- );
- } catch (e) {}
- },
-
-
- /**
- * Callback which allows modification of the state to be saved. Called when the table
- * has changed state a new state save is required. This method allows modification of
- * the state saving object prior to actually doing the save, including addition or
- * other state properties or modification. Note that for plug-in authors, you should
- * use the `stateSaveParams` event to save parameters for a plug-in.
- * @type function
- * @param {object} settings DataTables settings object
- * @param {object} data The state object to be saved
- *
- * @dtopt Callbacks
- * @name DataTable.defaults.stateSaveParams
- *
- * @example
- * // Remove a saved filter, so filtering is never saved
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "stateSave": true,
- * "stateSaveParams": function (settings, data) {
- * data.oSearch.sSearch = "";
- * }
- * } );
- * } );
- */
- "fnStateSaveParams": null,
-
-
- /**
- * Duration for which the saved state information is considered valid. After this period
- * has elapsed the state will be returned to the default.
- * Value is given in seconds.
- * @type int
- * @default 7200 <i>(2 hours)</i>
- *
- * @dtopt Options
- * @name DataTable.defaults.stateDuration
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "stateDuration": 60*60*24; // 1 day
- * } );
- * } )
- */
- "iStateDuration": 7200,
-
-
- /**
- * When enabled DataTables will not make a request to the server for the first
- * page draw - rather it will use the data already on the page (no sorting etc
- * will be applied to it), thus saving on an XHR at load time. `deferLoading`
- * is used to indicate that deferred loading is required, but it is also used
- * to tell DataTables how many records there are in the full table (allowing
- * the information element and pagination to be displayed correctly). In the case
- * where a filtering is applied to the table on initial load, this can be
- * indicated by giving the parameter as an array, where the first element is
- * the number of records available after filtering and the second element is the
- * number of records without filtering (allowing the table information element
- * to be shown correctly).
- * @type int | array
- * @default null
- *
- * @dtopt Options
- * @name DataTable.defaults.deferLoading
- *
- * @example
- * // 57 records available in the table, no filtering applied
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "serverSide": true,
- * "ajax": "scripts/server_processing.php",
- * "deferLoading": 57
- * } );
- * } );
- *
- * @example
- * // 57 records after filtering, 100 without filtering (an initial filter applied)
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "serverSide": true,
- * "ajax": "scripts/server_processing.php",
- * "deferLoading": [ 57, 100 ],
- * "search": {
- * "search": "my_filter"
- * }
- * } );
- * } );
- */
- "iDeferLoading": null,
-
-
- /**
- * Number of rows to display on a single page when using pagination. If
- * feature enabled (`lengthChange`) then the end user will be able to override
- * this to a custom setting using a pop-up menu.
- * @type int
- * @default 10
- *
- * @dtopt Options
- * @name DataTable.defaults.pageLength
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "pageLength": 50
- * } );
- * } )
- */
- "iDisplayLength": 10,
-
-
- /**
- * Define the starting point for data display when using DataTables with
- * pagination. Note that this parameter is the number of records, rather than
- * the page number, so if you have 10 records per page and want to start on
- * the third page, it should be "20".
- * @type int
- * @default 0
- *
- * @dtopt Options
- * @name DataTable.defaults.displayStart
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "displayStart": 20
- * } );
- * } )
- */
- "iDisplayStart": 0,
-
-
- /**
- * By default DataTables allows keyboard navigation of the table (sorting, paging,
- * and filtering) by adding a `tabindex` attribute to the required elements. This
- * allows you to tab through the controls and press the enter key to activate them.
- * The tabindex is default 0, meaning that the tab follows the flow of the document.
- * You can overrule this using this parameter if you wish. Use a value of -1 to
- * disable built-in keyboard navigation.
- * @type int
- * @default 0
- *
- * @dtopt Options
- * @name DataTable.defaults.tabIndex
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "tabIndex": 1
- * } );
- * } );
- */
- "iTabIndex": 0,
-
-
- /**
- * Classes that DataTables assigns to the various components and features
- * that it adds to the HTML table. This allows classes to be configured
- * during initialisation in addition to through the static
- * {@link DataTable.ext.oStdClasses} object).
- * @namespace
- * @name DataTable.defaults.classes
- */
- "oClasses": {},
-
-
- /**
- * All strings that DataTables uses in the user interface that it creates
- * are defined in this object, allowing you to modified them individually or
- * completely replace them all as required.
- * @namespace
- * @name DataTable.defaults.language
- */
- "oLanguage": {
- /**
- * Strings that are used for WAI-ARIA labels and controls only (these are not
- * actually visible on the page, but will be read by screenreaders, and thus
- * must be internationalised as well).
- * @namespace
- * @name DataTable.defaults.language.aria
- */
- "oAria": {
- /**
- * ARIA label that is added to the table headers when the column may be
- * sorted ascending by activing the column (click or return when focused).
- * Note that the column header is prefixed to this string.
- * @type string
- * @default : activate to sort column ascending
- *
- * @dtopt Language
- * @name DataTable.defaults.language.aria.sortAscending
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "aria": {
- * "sortAscending": " - click/return to sort ascending"
- * }
- * }
- * } );
- * } );
- */
- "sSortAscending": ": activate to sort column ascending",
-
- /**
- * ARIA label that is added to the table headers when the column may be
- * sorted descending by activing the column (click or return when focused).
- * Note that the column header is prefixed to this string.
- * @type string
- * @default : activate to sort column ascending
- *
- * @dtopt Language
- * @name DataTable.defaults.language.aria.sortDescending
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "aria": {
- * "sortDescending": " - click/return to sort descending"
- * }
- * }
- * } );
- * } );
- */
- "sSortDescending": ": activate to sort column descending"
- },
-
- /**
- * Pagination string used by DataTables for the built-in pagination
- * control types.
- * @namespace
- * @name DataTable.defaults.language.paginate
- */
- "oPaginate": {
- /**
- * Text to use when using the 'full_numbers' type of pagination for the
- * button to take the user to the first page.
- * @type string
- * @default First
- *
- * @dtopt Language
- * @name DataTable.defaults.language.paginate.first
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "paginate": {
- * "first": "First page"
- * }
- * }
- * } );
- * } );
- */
- "sFirst": "First",
-
-
- /**
- * Text to use when using the 'full_numbers' type of pagination for the
- * button to take the user to the last page.
- * @type string
- * @default Last
- *
- * @dtopt Language
- * @name DataTable.defaults.language.paginate.last
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "paginate": {
- * "last": "Last page"
- * }
- * }
- * } );
- * } );
- */
- "sLast": "Last",
-
-
- /**
- * Text to use for the 'next' pagination button (to take the user to the
- * next page).
- * @type string
- * @default Next
- *
- * @dtopt Language
- * @name DataTable.defaults.language.paginate.next
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "paginate": {
- * "next": "Next page"
- * }
- * }
- * } );
- * } );
- */
- "sNext": "Next",
-
-
- /**
- * Text to use for the 'previous' pagination button (to take the user to
- * the previous page).
- * @type string
- * @default Previous
- *
- * @dtopt Language
- * @name DataTable.defaults.language.paginate.previous
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "paginate": {
- * "previous": "Previous page"
- * }
- * }
- * } );
- * } );
- */
- "sPrevious": "Previous"
- },
-
- /**
- * This string is shown in preference to `zeroRecords` when the table is
- * empty of data (regardless of filtering). Note that this is an optional
- * parameter - if it is not given, the value of `zeroRecords` will be used
- * instead (either the default or given value).
- * @type string
- * @default No data available in table
- *
- * @dtopt Language
- * @name DataTable.defaults.language.emptyTable
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "emptyTable": "No data available in table"
- * }
- * } );
- * } );
- */
- "sEmptyTable": "No data available in table",
-
-
- /**
- * This string gives information to the end user about the information
- * that is current on display on the page. The following tokens can be
- * used in the string and will be dynamically replaced as the table
- * display updates. This tokens can be placed anywhere in the string, or
- * removed as needed by the language requires:
- *
- * * `\_START\_` - Display index of the first record on the current page
- * * `\_END\_` - Display index of the last record on the current page
- * * `\_TOTAL\_` - Number of records in the table after filtering
- * * `\_MAX\_` - Number of records in the table without filtering
- * * `\_PAGE\_` - Current page number
- * * `\_PAGES\_` - Total number of pages of data in the table
- *
- * @type string
- * @default Showing _START_ to _END_ of _TOTAL_ entries
- *
- * @dtopt Language
- * @name DataTable.defaults.language.info
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "info": "Showing page _PAGE_ of _PAGES_"
- * }
- * } );
- * } );
- */
- "sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",
-
-
- /**
- * Display information string for when the table is empty. Typically the
- * format of this string should match `info`.
- * @type string
- * @default Showing 0 to 0 of 0 entries
- *
- * @dtopt Language
- * @name DataTable.defaults.language.infoEmpty
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "infoEmpty": "No entries to show"
- * }
- * } );
- * } );
- */
- "sInfoEmpty": "Showing 0 to 0 of 0 entries",
-
-
- /**
- * When a user filters the information in a table, this string is appended
- * to the information (`info`) to give an idea of how strong the filtering
- * is. The variable _MAX_ is dynamically updated.
- * @type string
- * @default (filtered from _MAX_ total entries)
- *
- * @dtopt Language
- * @name DataTable.defaults.language.infoFiltered
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "infoFiltered": " - filtering from _MAX_ records"
- * }
- * } );
- * } );
- */
- "sInfoFiltered": "(filtered from _MAX_ total entries)",
-
-
- /**
- * If can be useful to append extra information to the info string at times,
- * and this variable does exactly that. This information will be appended to
- * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are
- * being used) at all times.
- * @type string
- * @default <i>Empty string</i>
- *
- * @dtopt Language
- * @name DataTable.defaults.language.infoPostFix
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "infoPostFix": "All records shown are derived from real information."
- * }
- * } );
- * } );
- */
- "sInfoPostFix": "",
-
-
- /**
- * This decimal place operator is a little different from the other
- * language options since DataTables doesn't output floating point
- * numbers, so it won't ever use this for display of a number. Rather,
- * what this parameter does is modify the sort methods of the table so
- * that numbers which are in a format which has a character other than
- * a period (`.`) as a decimal place will be sorted numerically.
- *
- * Note that numbers with different decimal places cannot be shown in
- * the same table and still be sortable, the table must be consistent.
- * However, multiple different tables on the page can use different
- * decimal place characters.
- * @type string
- * @default
- *
- * @dtopt Language
- * @name DataTable.defaults.language.decimal
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "decimal": ","
- * "thousands": "."
- * }
- * } );
- * } );
- */
- "sDecimal": "",
-
-
- /**
- * DataTables has a build in number formatter (`formatNumber`) which is
- * used to format large numbers that are used in the table information.
- * By default a comma is used, but this can be trivially changed to any
- * character you wish with this parameter.
- * @type string
- * @default ,
- *
- * @dtopt Language
- * @name DataTable.defaults.language.thousands
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "thousands": "'"
- * }
- * } );
- * } );
- */
- "sThousands": ",",
-
-
- /**
- * Detail the action that will be taken when the drop down menu for the
- * pagination length option is changed. The '_MENU_' variable is replaced
- * with a default select list of 10, 25, 50 and 100, and can be replaced
- * with a custom select box if required.
- * @type string
- * @default Show _MENU_ entries
- *
- * @dtopt Language
- * @name DataTable.defaults.language.lengthMenu
- *
- * @example
- * // Language change only
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "lengthMenu": "Display _MENU_ records"
- * }
- * } );
- * } );
- *
- * @example
- * // Language and options change
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "lengthMenu": 'Display <select>'+
- * '<option value="10">10</option>'+
- * '<option value="20">20</option>'+
- * '<option value="30">30</option>'+
- * '<option value="40">40</option>'+
- * '<option value="50">50</option>'+
- * '<option value="-1">All</option>'+
- * '</select> records'
- * }
- * } );
- * } );
- */
- "sLengthMenu": "Show _MENU_ entries",
-
-
- /**
- * When using Ajax sourced data and during the first draw when DataTables is
- * gathering the data, this message is shown in an empty row in the table to
- * indicate to the end user the the data is being loaded. Note that this
- * parameter is not used when loading data by server-side processing, just
- * Ajax sourced data with client-side processing.
- * @type string
- * @default Loading...
- *
- * @dtopt Language
- * @name DataTable.defaults.language.loadingRecords
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "loadingRecords": "Please wait - loading..."
- * }
- * } );
- * } );
- */
- "sLoadingRecords": "Loading...",
-
-
- /**
- * Text which is displayed when the table is processing a user action
- * (usually a sort command or similar).
- * @type string
- * @default Processing...
- *
- * @dtopt Language
- * @name DataTable.defaults.language.processing
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "processing": "DataTables is currently busy"
- * }
- * } );
- * } );
- */
- "sProcessing": "Processing...",
-
-
- /**
- * Details the actions that will be taken when the user types into the
- * filtering input text box. The variable "_INPUT_", if used in the string,
- * is replaced with the HTML text box for the filtering input allowing
- * control over where it appears in the string. If "_INPUT_" is not given
- * then the input box is appended to the string automatically.
- * @type string
- * @default Search:
- *
- * @dtopt Language
- * @name DataTable.defaults.language.search
- *
- * @example
- * // Input text box will be appended at the end automatically
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "search": "Filter records:"
- * }
- * } );
- * } );
- *
- * @example
- * // Specify where the filter should appear
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "search": "Apply filter _INPUT_ to table"
- * }
- * } );
- * } );
- */
- "sSearch": "Search:",
-
-
- /**
- * Assign a `placeholder` attribute to the search `input` element
- * @type string
- * @default
- *
- * @dtopt Language
- * @name DataTable.defaults.language.searchPlaceholder
- */
- "sSearchPlaceholder": "",
-
-
- /**
- * All of the language information can be stored in a file on the
- * server-side, which DataTables will look up if this parameter is passed.
- * It must store the URL of the language file, which is in a JSON format,
- * and the object has the same properties as the oLanguage object in the
- * initialiser object (i.e. the above parameters). Please refer to one of
- * the example language files to see how this works in action.
- * @type string
- * @default <i>Empty string - i.e. disabled</i>
- *
- * @dtopt Language
- * @name DataTable.defaults.language.url
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "url": "http://www.sprymedia.co.uk/dataTables/lang.txt"
- * }
- * } );
- * } );
- */
- "sUrl": "",
-
-
- /**
- * Text shown inside the table records when the is no information to be
- * displayed after filtering. `emptyTable` is shown when there is simply no
- * information in the table at all (regardless of filtering).
- * @type string
- * @default No matching records found
- *
- * @dtopt Language
- * @name DataTable.defaults.language.zeroRecords
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "language": {
- * "zeroRecords": "No records to display"
- * }
- * } );
- * } );
- */
- "sZeroRecords": "No matching records found"
- },
-
-
- /**
- * This parameter allows you to have define the global filtering state at
- * initialisation time. As an object the `search` parameter must be
- * defined, but all other parameters are optional. When `regex` is true,
- * the search string will be treated as a regular expression, when false
- * (default) it will be treated as a straight string. When `smart`
- * DataTables will use it's smart filtering methods (to word match at
- * any point in the data), when false this will not be done.
- * @namespace
- * @extends DataTable.models.oSearch
- *
- * @dtopt Options
- * @name DataTable.defaults.search
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "search": {"search": "Initial search"}
- * } );
- * } )
- */
- "oSearch": $.extend( {}, DataTable.models.oSearch ),
-
-
- /**
- * __Deprecated__ The functionality provided by this parameter has now been
- * superseded by that provided through `ajax`, which should be used instead.
- *
- * By default DataTables will look for the property `data` (or `aaData` for
- * compatibility with DataTables 1.9-) when obtaining data from an Ajax
- * source or for server-side processing - this parameter allows that
- * property to be changed. You can use Javascript dotted object notation to
- * get a data source for multiple levels of nesting.
- * @type string
- * @default data
- *
- * @dtopt Options
- * @dtopt Server-side
- * @name DataTable.defaults.ajaxDataProp
- *
- * @deprecated 1.10. Please use `ajax` for this functionality now.
- */
- "sAjaxDataProp": "data",
-
-
- /**
- * __Deprecated__ The functionality provided by this parameter has now been
- * superseded by that provided through `ajax`, which should be used instead.
- *
- * You can instruct DataTables to load data from an external
- * source using this parameter (use aData if you want to pass data in you
- * already have). Simply provide a url a JSON object can be obtained from.
- * @type string
- * @default null
- *
- * @dtopt Options
- * @dtopt Server-side
- * @name DataTable.defaults.ajaxSource
- *
- * @deprecated 1.10. Please use `ajax` for this functionality now.
- */
- "sAjaxSource": null,
-
-
- /**
- * This initialisation variable allows you to specify exactly where in the
- * DOM you want DataTables to inject the various controls it adds to the page
- * (for example you might want the pagination controls at the top of the
- * table). DIV elements (with or without a custom class) can also be added to
- * aid styling. The follow syntax is used:
- * <ul>
- * <li>The following options are allowed:
- * <ul>
- * <li>'l' - Length changing</li>
- * <li>'f' - Filtering input</li>
- * <li>'t' - The table!</li>
- * <li>'i' - Information</li>
- * <li>'p' - Pagination</li>
- * <li>'r' - pRocessing</li>
- * </ul>
- * </li>
- * <li>The following constants are allowed:
- * <ul>
- * <li>'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>
- * <li>'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>
- * </ul>
- * </li>
- * <li>The following syntax is expected:
- * <ul>
- * <li>'&lt;' and '&gt;' - div elements</li>
- * <li>'&lt;"class" and '&gt;' - div with a class</li>
- * <li>'&lt;"#id" and '&gt;' - div with an ID</li>
- * </ul>
- * </li>
- * <li>Examples:
- * <ul>
- * <li>'&lt;"wrapper"flipt&gt;'</li>
- * <li>'&lt;lf&lt;t&gt;ip&gt;'</li>
- * </ul>
- * </li>
- * </ul>
- * @type string
- * @default lfrtip <i>(when `jQueryUI` is false)</i> <b>or</b>
- * <"H"lfr>t<"F"ip> <i>(when `jQueryUI` is true)</i>
- *
- * @dtopt Options
- * @name DataTable.defaults.dom
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "dom": '&lt;"top"i&gt;rt&lt;"bottom"flp&gt;&lt;"clear"&gt;'
- * } );
- * } );
- */
- "sDom": "lfrtip",
-
-
- /**
- * Search delay option. This will throttle full table searches that use the
- * DataTables provided search input element (it does not effect calls to
- * `dt-api search()`, providing a delay before the search is made.
- * @type integer
- * @default 0
- *
- * @dtopt Options
- * @name DataTable.defaults.searchDelay
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "searchDelay": 200
- * } );
- * } )
- */
- "searchDelay": null,
-
-
- /**
- * DataTables features four different built-in options for the buttons to
- * display for pagination control:
- *
- * * `simple` - 'Previous' and 'Next' buttons only
- * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers
- * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons
- * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus
- * page numbers
- *
- * Further methods can be added using {@link DataTable.ext.oPagination}.
- * @type string
- * @default simple_numbers
- *
- * @dtopt Options
- * @name DataTable.defaults.pagingType
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "pagingType": "full_numbers"
- * } );
- * } )
- */
- "sPaginationType": "simple_numbers",
-
-
- /**
- * Enable horizontal scrolling. When a table is too wide to fit into a
- * certain layout, or you have a large number of columns in the table, you
- * can enable x-scrolling to show the table in a viewport, which can be
- * scrolled. This property can be `true` which will allow the table to
- * scroll horizontally when needed, or any CSS unit, or a number (in which
- * case it will be treated as a pixel measurement). Setting as simply `true`
- * is recommended.
- * @type boolean|string
- * @default <i>blank string - i.e. disabled</i>
- *
- * @dtopt Features
- * @name DataTable.defaults.scrollX
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "scrollX": true,
- * "scrollCollapse": true
- * } );
- * } );
- */
- "sScrollX": "",
-
-
- /**
- * This property can be used to force a DataTable to use more width than it
- * might otherwise do when x-scrolling is enabled. For example if you have a
- * table which requires to be well spaced, this parameter is useful for
- * "over-sizing" the table, and thus forcing scrolling. This property can by
- * any CSS unit, or a number (in which case it will be treated as a pixel
- * measurement).
- * @type string
- * @default <i>blank string - i.e. disabled</i>
- *
- * @dtopt Options
- * @name DataTable.defaults.scrollXInner
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "scrollX": "100%",
- * "scrollXInner": "110%"
- * } );
- * } );
- */
- "sScrollXInner": "",
-
-
- /**
- * Enable vertical scrolling. Vertical scrolling will constrain the DataTable
- * to the given height, and enable scrolling for any data which overflows the
- * current viewport. This can be used as an alternative to paging to display
- * a lot of data in a small area (although paging and scrolling can both be
- * enabled at the same time). This property can be any CSS unit, or a number
- * (in which case it will be treated as a pixel measurement).
- * @type string
- * @default <i>blank string - i.e. disabled</i>
- *
- * @dtopt Features
- * @name DataTable.defaults.scrollY
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "scrollY": "200px",
- * "paginate": false
- * } );
- * } );
- */
- "sScrollY": "",
-
-
- /**
- * __Deprecated__ The functionality provided by this parameter has now been
- * superseded by that provided through `ajax`, which should be used instead.
- *
- * Set the HTTP method that is used to make the Ajax call for server-side
- * processing or Ajax sourced data.
- * @type string
- * @default GET
- *
- * @dtopt Options
- * @dtopt Server-side
- * @name DataTable.defaults.serverMethod
- *
- * @deprecated 1.10. Please use `ajax` for this functionality now.
- */
- "sServerMethod": "GET",
-
-
- /**
- * DataTables makes use of renderers when displaying HTML elements for
- * a table. These renderers can be added or modified by plug-ins to
- * generate suitable mark-up for a site. For example the Bootstrap
- * integration plug-in for DataTables uses a paging button renderer to
- * display pagination buttons in the mark-up required by Bootstrap.
- *
- * For further information about the renderers available see
- * DataTable.ext.renderer
- * @type string|object
- * @default null
- *
- * @name DataTable.defaults.renderer
- *
- */
- "renderer": null,
-
-
- /**
- * Set the data property name that DataTables should use to get a row's id
- * to set as the `id` property in the node.
- * @type string
- * @default DT_RowId
- *
- * @name DataTable.defaults.rowId
- */
- "rowId": "DT_RowId"
- };
-
- _fnHungarianMap( DataTable.defaults );
-
-
-
- /*
- * Developer note - See note in model.defaults.js about the use of Hungarian
- * notation and camel case.
- */
-
- /**
- * Column options that can be given to DataTables at initialisation time.
- * @namespace
- */
- DataTable.defaults.column = {
- /**
- * Define which column(s) an order will occur on for this column. This
- * allows a column's ordering to take multiple columns into account when
- * doing a sort or use the data from a different column. For example first
- * name / last name columns make sense to do a multi-column sort over the
- * two columns.
- * @type array|int
- * @default null <i>Takes the value of the column index automatically</i>
- *
- * @name DataTable.defaults.column.orderData
- * @dtopt Columns
- *
- * @example
- * // Using `columnDefs`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [
- * { "orderData": [ 0, 1 ], "targets": [ 0 ] },
- * { "orderData": [ 1, 0 ], "targets": [ 1 ] },
- * { "orderData": 2, "targets": [ 2 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using `columns`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columns": [
- * { "orderData": [ 0, 1 ] },
- * { "orderData": [ 1, 0 ] },
- * { "orderData": 2 },
- * null,
- * null
- * ]
- * } );
- * } );
- */
- "aDataSort": null,
- "iDataSort": -1,
-
-
- /**
- * You can control the default ordering direction, and even alter the
- * behaviour of the sort handler (i.e. only allow ascending ordering etc)
- * using this parameter.
- * @type array
- * @default [ 'asc', 'desc' ]
- *
- * @name DataTable.defaults.column.orderSequence
- * @dtopt Columns
- *
- * @example
- * // Using `columnDefs`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [
- * { "orderSequence": [ "asc" ], "targets": [ 1 ] },
- * { "orderSequence": [ "desc", "asc", "asc" ], "targets": [ 2 ] },
- * { "orderSequence": [ "desc" ], "targets": [ 3 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using `columns`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columns": [
- * null,
- * { "orderSequence": [ "asc" ] },
- * { "orderSequence": [ "desc", "asc", "asc" ] },
- * { "orderSequence": [ "desc" ] },
- * null
- * ]
- * } );
- * } );
- */
- "asSorting": [ 'asc', 'desc' ],
-
-
- /**
- * Enable or disable filtering on the data in this column.
- * @type boolean
- * @default true
- *
- * @name DataTable.defaults.column.searchable
- * @dtopt Columns
- *
- * @example
- * // Using `columnDefs`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [
- * { "searchable": false, "targets": [ 0 ] }
- * ] } );
- * } );
- *
- * @example
- * // Using `columns`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columns": [
- * { "searchable": false },
- * null,
- * null,
- * null,
- * null
- * ] } );
- * } );
- */
- "bSearchable": true,
-
-
- /**
- * Enable or disable ordering on this column.
- * @type boolean
- * @default true
- *
- * @name DataTable.defaults.column.orderable
- * @dtopt Columns
- *
- * @example
- * // Using `columnDefs`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [
- * { "orderable": false, "targets": [ 0 ] }
- * ] } );
- * } );
- *
- * @example
- * // Using `columns`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columns": [
- * { "orderable": false },
- * null,
- * null,
- * null,
- * null
- * ] } );
- * } );
- */
- "bSortable": true,
-
-
- /**
- * Enable or disable the display of this column.
- * @type boolean
- * @default true
- *
- * @name DataTable.defaults.column.visible
- * @dtopt Columns
- *
- * @example
- * // Using `columnDefs`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [
- * { "visible": false, "targets": [ 0 ] }
- * ] } );
- * } );
- *
- * @example
- * // Using `columns`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columns": [
- * { "visible": false },
- * null,
- * null,
- * null,
- * null
- * ] } );
- * } );
- */
- "bVisible": true,
-
-
- /**
- * Developer definable function that is called whenever a cell is created (Ajax source,
- * etc) or processed for input (DOM source). This can be used as a compliment to mRender
- * allowing you to modify the DOM element (add background colour for example) when the
- * element is available.
- * @type function
- * @param {element} td The TD node that has been created
- * @param {*} cellData The Data for the cell
- * @param {array|object} rowData The data for the whole row
- * @param {int} row The row index for the aoData data store
- * @param {int} col The column index for aoColumns
- *
- * @name DataTable.defaults.column.createdCell
- * @dtopt Columns
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [ {
- * "targets": [3],
- * "createdCell": function (td, cellData, rowData, row, col) {
- * if ( cellData == "1.7" ) {
- * $(td).css('color', 'blue')
- * }
- * }
- * } ]
- * });
- * } );
- */
- "fnCreatedCell": null,
-
-
- /**
- * This parameter has been replaced by `data` in DataTables to ensure naming
- * consistency. `dataProp` can still be used, as there is backwards
- * compatibility in DataTables for this option, but it is strongly
- * recommended that you use `data` in preference to `dataProp`.
- * @name DataTable.defaults.column.dataProp
- */
-
-
- /**
- * This property can be used to read data from any data source property,
- * including deeply nested objects / properties. `data` can be given in a
- * number of different ways which effect its behaviour:
- *
- * * `integer` - treated as an array index for the data source. This is the
- * default that DataTables uses (incrementally increased for each column).
- * * `string` - read an object property from the data source. There are
- * three 'special' options that can be used in the string to alter how
- * DataTables reads the data from the source object:
- * * `.` - Dotted Javascript notation. Just as you use a `.` in
- * Javascript to read from nested objects, so to can the options
- * specified in `data`. For example: `browser.version` or
- * `browser.name`. If your object parameter name contains a period, use
- * `\\` to escape it - i.e. `first\\.name`.
- * * `[]` - Array notation. DataTables can automatically combine data
- * from and array source, joining the data with the characters provided
- * between the two brackets. For example: `name[, ]` would provide a
- * comma-space separated list from the source array. If no characters
- * are provided between the brackets, the original array source is
- * returned.
- * * `()` - Function notation. Adding `()` to the end of a parameter will
- * execute a function of the name given. For example: `browser()` for a
- * simple function on the data source, `browser.version()` for a
- * function in a nested property or even `browser().version` to get an
- * object property if the function called returns an object. Note that
- * function notation is recommended for use in `render` rather than
- * `data` as it is much simpler to use as a renderer.
- * * `null` - use the original data source for the row rather than plucking
- * data directly from it. This action has effects on two other
- * initialisation options:
- * * `defaultContent` - When null is given as the `data` option and
- * `defaultContent` is specified for the column, the value defined by
- * `defaultContent` will be used for the cell.
- * * `render` - When null is used for the `data` option and the `render`
- * option is specified for the column, the whole data source for the
- * row is used for the renderer.
- * * `function` - the function given will be executed whenever DataTables
- * needs to set or get the data for a cell in the column. The function
- * takes three parameters:
- * * Parameters:
- * * `{array|object}` The data source for the row
- * * `{string}` The type call data requested - this will be 'set' when
- * setting data or 'filter', 'display', 'type', 'sort' or undefined
- * when gathering data. Note that when `undefined` is given for the
- * type DataTables expects to get the raw data for the object back<
- * * `{*}` Data to set when the second parameter is 'set'.
- * * Return:
- * * The return value from the function is not required when 'set' is
- * the type of call, but otherwise the return is what will be used
- * for the data requested.
- *
- * Note that `data` is a getter and setter option. If you just require
- * formatting of data for output, you will likely want to use `render` which
- * is simply a getter and thus simpler to use.
- *
- * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The
- * name change reflects the flexibility of this property and is consistent
- * with the naming of mRender. If 'mDataProp' is given, then it will still
- * be used by DataTables, as it automatically maps the old name to the new
- * if required.
- *
- * @type string|int|function|null
- * @default null <i>Use automatically calculated column index</i>
- *
- * @name DataTable.defaults.column.data
- * @dtopt Columns
- *
- * @example
- * // Read table data from objects
- * // JSON structure for each row:
- * // {
- * // "engine": {value},
- * // "browser": {value},
- * // "platform": {value},
- * // "version": {value},
- * // "grade": {value}
- * // }
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "ajaxSource": "sources/objects.txt",
- * "columns": [
- * { "data": "engine" },
- * { "data": "browser" },
- * { "data": "platform" },
- * { "data": "version" },
- * { "data": "grade" }
- * ]
- * } );
- * } );
- *
- * @example
- * // Read information from deeply nested objects
- * // JSON structure for each row:
- * // {
- * // "engine": {value},
- * // "browser": {value},
- * // "platform": {
- * // "inner": {value}
- * // },
- * // "details": [
- * // {value}, {value}
- * // ]
- * // }
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "ajaxSource": "sources/deep.txt",
- * "columns": [
- * { "data": "engine" },
- * { "data": "browser" },
- * { "data": "platform.inner" },
- * { "data": "platform.details.0" },
- * { "data": "platform.details.1" }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using `data` as a function to provide different information for
- * // sorting, filtering and display. In this case, currency (price)
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [ {
- * "targets": [ 0 ],
- * "data": function ( source, type, val ) {
- * if (type === 'set') {
- * source.price = val;
- * // Store the computed dislay and filter values for efficiency
- * source.price_display = val=="" ? "" : "$"+numberFormat(val);
- * source.price_filter = val=="" ? "" : "$"+numberFormat(val)+" "+val;
- * return;
- * }
- * else if (type === 'display') {
- * return source.price_display;
- * }
- * else if (type === 'filter') {
- * return source.price_filter;
- * }
- * // 'sort', 'type' and undefined all just use the integer
- * return source.price;
- * }
- * } ]
- * } );
- * } );
- *
- * @example
- * // Using default content
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [ {
- * "targets": [ 0 ],
- * "data": null,
- * "defaultContent": "Click to edit"
- * } ]
- * } );
- * } );
- *
- * @example
- * // Using array notation - outputting a list from an array
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [ {
- * "targets": [ 0 ],
- * "data": "name[, ]"
- * } ]
- * } );
- * } );
- *
- */
- "mData": null,
-
-
- /**
- * This property is the rendering partner to `data` and it is suggested that
- * when you want to manipulate data for display (including filtering,
- * sorting etc) without altering the underlying data for the table, use this
- * property. `render` can be considered to be the the read only companion to
- * `data` which is read / write (then as such more complex). Like `data`
- * this option can be given in a number of different ways to effect its
- * behaviour:
- *
- * * `integer` - treated as an array index for the data source. This is the
- * default that DataTables uses (incrementally increased for each column).
- * * `string` - read an object property from the data source. There are
- * three 'special' options that can be used in the string to alter how
- * DataTables reads the data from the source object:
- * * `.` - Dotted Javascript notation. Just as you use a `.` in
- * Javascript to read from nested objects, so to can the options
- * specified in `data`. For example: `browser.version` or
- * `browser.name`. If your object parameter name contains a period, use
- * `\\` to escape it - i.e. `first\\.name`.
- * * `[]` - Array notation. DataTables can automatically combine data
- * from and array source, joining the data with the characters provided
- * between the two brackets. For example: `name[, ]` would provide a
- * comma-space separated list from the source array. If no characters
- * are provided between the brackets, the original array source is
- * returned.
- * * `()` - Function notation. Adding `()` to the end of a parameter will
- * execute a function of the name given. For example: `browser()` for a
- * simple function on the data source, `browser.version()` for a
- * function in a nested property or even `browser().version` to get an
- * object property if the function called returns an object.
- * * `object` - use different data for the different data types requested by
- * DataTables ('filter', 'display', 'type' or 'sort'). The property names
- * of the object is the data type the property refers to and the value can
- * defined using an integer, string or function using the same rules as
- * `render` normally does. Note that an `_` option _must_ be specified.
- * This is the default value to use if you haven't specified a value for
- * the data type requested by DataTables.
- * * `function` - the function given will be executed whenever DataTables
- * needs to set or get the data for a cell in the column. The function
- * takes three parameters:
- * * Parameters:
- * * {array|object} The data source for the row (based on `data`)
- * * {string} The type call data requested - this will be 'filter',
- * 'display', 'type' or 'sort'.
- * * {array|object} The full data source for the row (not based on
- * `data`)
- * * Return:
- * * The return value from the function is what will be used for the
- * data requested.
- *
- * @type string|int|function|object|null
- * @default null Use the data source value.
- *
- * @name DataTable.defaults.column.render
- * @dtopt Columns
- *
- * @example
- * // Create a comma separated list from an array of objects
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "ajaxSource": "sources/deep.txt",
- * "columns": [
- * { "data": "engine" },
- * { "data": "browser" },
- * {
- * "data": "platform",
- * "render": "[, ].name"
- * }
- * ]
- * } );
- * } );
- *
- * @example
- * // Execute a function to obtain data
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [ {
- * "targets": [ 0 ],
- * "data": null, // Use the full data source object for the renderer's source
- * "render": "browserName()"
- * } ]
- * } );
- * } );
- *
- * @example
- * // As an object, extracting different data for the different types
- * // This would be used with a data source such as:
- * // { "phone": 5552368, "phone_filter": "5552368 555-2368", "phone_display": "555-2368" }
- * // Here the `phone` integer is used for sorting and type detection, while `phone_filter`
- * // (which has both forms) is used for filtering for if a user inputs either format, while
- * // the formatted phone number is the one that is shown in the table.
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [ {
- * "targets": [ 0 ],
- * "data": null, // Use the full data source object for the renderer's source
- * "render": {
- * "_": "phone",
- * "filter": "phone_filter",
- * "display": "phone_display"
- * }
- * } ]
- * } );
- * } );
- *
- * @example
- * // Use as a function to create a link from the data source
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [ {
- * "targets": [ 0 ],
- * "data": "download_link",
- * "render": function ( data, type, full ) {
- * return '<a href="'+data+'">Download</a>';
- * }
- * } ]
- * } );
- * } );
- */
- "mRender": null,
-
-
- /**
- * Change the cell type created for the column - either TD cells or TH cells. This
- * can be useful as TH cells have semantic meaning in the table body, allowing them
- * to act as a header for a row (you may wish to add scope='row' to the TH elements).
- * @type string
- * @default td
- *
- * @name DataTable.defaults.column.cellType
- * @dtopt Columns
- *
- * @example
- * // Make the first column use TH cells
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [ {
- * "targets": [ 0 ],
- * "cellType": "th"
- * } ]
- * } );
- * } );
- */
- "sCellType": "td",
-
-
- /**
- * Class to give to each cell in this column.
- * @type string
- * @default <i>Empty string</i>
- *
- * @name DataTable.defaults.column.class
- * @dtopt Columns
- *
- * @example
- * // Using `columnDefs`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [
- * { "class": "my_class", "targets": [ 0 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using `columns`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columns": [
- * { "class": "my_class" },
- * null,
- * null,
- * null,
- * null
- * ]
- * } );
- * } );
- */
- "sClass": "",
-
- /**
- * When DataTables calculates the column widths to assign to each column,
- * it finds the longest string in each column and then constructs a
- * temporary table and reads the widths from that. The problem with this
- * is that "mmm" is much wider then "iiii", but the latter is a longer
- * string - thus the calculation can go wrong (doing it properly and putting
- * it into an DOM object and measuring that is horribly(!) slow). Thus as
- * a "work around" we provide this option. It will append its value to the
- * text that is found to be the longest string for the column - i.e. padding.
- * Generally you shouldn't need this!
- * @type string
- * @default <i>Empty string<i>
- *
- * @name DataTable.defaults.column.contentPadding
- * @dtopt Columns
- *
- * @example
- * // Using `columns`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columns": [
- * null,
- * null,
- * null,
- * {
- * "contentPadding": "mmm"
- * }
- * ]
- * } );
- * } );
- */
- "sContentPadding": "",
-
-
- /**
- * Allows a default value to be given for a column's data, and will be used
- * whenever a null data source is encountered (this can be because `data`
- * is set to null, or because the data source itself is null).
- * @type string
- * @default null
- *
- * @name DataTable.defaults.column.defaultContent
- * @dtopt Columns
- *
- * @example
- * // Using `columnDefs`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [
- * {
- * "data": null,
- * "defaultContent": "Edit",
- * "targets": [ -1 ]
- * }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using `columns`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columns": [
- * null,
- * null,
- * null,
- * {
- * "data": null,
- * "defaultContent": "Edit"
- * }
- * ]
- * } );
- * } );
- */
- "sDefaultContent": null,
-
-
- /**
- * This parameter is only used in DataTables' server-side processing. It can
- * be exceptionally useful to know what columns are being displayed on the
- * client side, and to map these to database fields. When defined, the names
- * also allow DataTables to reorder information from the server if it comes
- * back in an unexpected order (i.e. if you switch your columns around on the
- * client-side, your server-side code does not also need updating).
- * @type string
- * @default <i>Empty string</i>
- *
- * @name DataTable.defaults.column.name
- * @dtopt Columns
- *
- * @example
- * // Using `columnDefs`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [
- * { "name": "engine", "targets": [ 0 ] },
- * { "name": "browser", "targets": [ 1 ] },
- * { "name": "platform", "targets": [ 2 ] },
- * { "name": "version", "targets": [ 3 ] },
- * { "name": "grade", "targets": [ 4 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using `columns`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columns": [
- * { "name": "engine" },
- * { "name": "browser" },
- * { "name": "platform" },
- * { "name": "version" },
- * { "name": "grade" }
- * ]
- * } );
- * } );
- */
- "sName": "",
-
-
- /**
- * Defines a data source type for the ordering which can be used to read
- * real-time information from the table (updating the internally cached
- * version) prior to ordering. This allows ordering to occur on user
- * editable elements such as form inputs.
- * @type string
- * @default std
- *
- * @name DataTable.defaults.column.orderDataType
- * @dtopt Columns
- *
- * @example
- * // Using `columnDefs`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [
- * { "orderDataType": "dom-text", "targets": [ 2, 3 ] },
- * { "type": "numeric", "targets": [ 3 ] },
- * { "orderDataType": "dom-select", "targets": [ 4 ] },
- * { "orderDataType": "dom-checkbox", "targets": [ 5 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using `columns`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columns": [
- * null,
- * null,
- * { "orderDataType": "dom-text" },
- * { "orderDataType": "dom-text", "type": "numeric" },
- * { "orderDataType": "dom-select" },
- * { "orderDataType": "dom-checkbox" }
- * ]
- * } );
- * } );
- */
- "sSortDataType": "std",
-
-
- /**
- * The title of this column.
- * @type string
- * @default null <i>Derived from the 'TH' value for this column in the
- * original HTML table.</i>
- *
- * @name DataTable.defaults.column.title
- * @dtopt Columns
- *
- * @example
- * // Using `columnDefs`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [
- * { "title": "My column title", "targets": [ 0 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using `columns`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columns": [
- * { "title": "My column title" },
- * null,
- * null,
- * null,
- * null
- * ]
- * } );
- * } );
- */
- "sTitle": null,
-
-
- /**
- * The type allows you to specify how the data for this column will be
- * ordered. Four types (string, numeric, date and html (which will strip
- * HTML tags before ordering)) are currently available. Note that only date
- * formats understood by Javascript's Date() object will be accepted as type
- * date. For example: "Mar 26, 2008 5:03 PM". May take the values: 'string',
- * 'numeric', 'date' or 'html' (by default). Further types can be adding
- * through plug-ins.
- * @type string
- * @default null <i>Auto-detected from raw data</i>
- *
- * @name DataTable.defaults.column.type
- * @dtopt Columns
- *
- * @example
- * // Using `columnDefs`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [
- * { "type": "html", "targets": [ 0 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using `columns`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columns": [
- * { "type": "html" },
- * null,
- * null,
- * null,
- * null
- * ]
- * } );
- * } );
- */
- "sType": null,
-
-
- /**
- * Defining the width of the column, this parameter may take any CSS value
- * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not
- * been given a specific width through this interface ensuring that the table
- * remains readable.
- * @type string
- * @default null <i>Automatic</i>
- *
- * @name DataTable.defaults.column.width
- * @dtopt Columns
- *
- * @example
- * // Using `columnDefs`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columnDefs": [
- * { "width": "20%", "targets": [ 0 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using `columns`
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "columns": [
- * { "width": "20%" },
- * null,
- * null,
- * null,
- * null
- * ]
- * } );
- * } );
- */
- "sWidth": null
- };
-
- _fnHungarianMap( DataTable.defaults.column );
-
-
-
- /**
- * DataTables settings object - this holds all the information needed for a
- * given table, including configuration, data and current application of the
- * table options. DataTables does not have a single instance for each DataTable
- * with the settings attached to that instance, but rather instances of the
- * DataTable "class" are created on-the-fly as needed (typically by a
- * $().dataTable() call) and the settings object is then applied to that
- * instance.
- *
- * Note that this object is related to {@link DataTable.defaults} but this
- * one is the internal data store for DataTables's cache of columns. It should
- * NOT be manipulated outside of DataTables. Any configuration should be done
- * through the initialisation options.
- * @namespace
- * @todo Really should attach the settings object to individual instances so we
- * don't need to create new instances on each $().dataTable() call (if the
- * table already exists). It would also save passing oSettings around and
- * into every single function. However, this is a very significant
- * architecture change for DataTables and will almost certainly break
- * backwards compatibility with older installations. This is something that
- * will be done in 2.0.
- */
- DataTable.models.oSettings = {
- /**
- * Primary features of DataTables and their enablement state.
- * @namespace
- */
- "oFeatures": {
-
- /**
- * Flag to say if DataTables should automatically try to calculate the
- * optimum table and columns widths (true) or not (false).
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bAutoWidth": null,
-
- /**
- * Delay the creation of TR and TD elements until they are actually
- * needed by a driven page draw. This can give a significant speed
- * increase for Ajax source and Javascript source data, but makes no
- * difference at all fro DOM and server-side processing tables.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bDeferRender": null,
-
- /**
- * Enable filtering on the table or not. Note that if this is disabled
- * then there is no filtering at all on the table, including fnFilter.
- * To just remove the filtering input use sDom and remove the 'f' option.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bFilter": null,
-
- /**
- * Table information element (the 'Showing x of y records' div) enable
- * flag.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bInfo": null,
-
- /**
- * Present a user control allowing the end user to change the page size
- * when pagination is enabled.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bLengthChange": null,
-
- /**
- * Pagination enabled or not. Note that if this is disabled then length
- * changing must also be disabled.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bPaginate": null,
-
- /**
- * Processing indicator enable flag whenever DataTables is enacting a
- * user request - typically an Ajax request for server-side processing.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bProcessing": null,
-
- /**
- * Server-side processing enabled flag - when enabled DataTables will
- * get all data from the server for every draw - there is no filtering,
- * sorting or paging done on the client-side.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bServerSide": null,
-
- /**
- * Sorting enablement flag.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bSort": null,
-
- /**
- * Multi-column sorting
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bSortMulti": null,
-
- /**
- * Apply a class to the columns which are being sorted to provide a
- * visual highlight or not. This can slow things down when enabled since
- * there is a lot of DOM interaction.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bSortClasses": null,
-
- /**
- * State saving enablement flag.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bStateSave": null
- },
-
-
- /**
- * Scrolling settings for a table.
- * @namespace
- */
- "oScroll": {
- /**
- * When the table is shorter in height than sScrollY, collapse the
- * table container down to the height of the table (when true).
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bCollapse": null,
-
- /**
- * Width of the scrollbar for the web-browser's platform. Calculated
- * during table initialisation.
- * @type int
- * @default 0
- */
- "iBarWidth": 0,
-
- /**
- * Viewport width for horizontal scrolling. Horizontal scrolling is
- * disabled if an empty string.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- */
- "sX": null,
-
- /**
- * Width to expand the table to when using x-scrolling. Typically you
- * should not need to use this.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- * @deprecated
- */
- "sXInner": null,
-
- /**
- * Viewport height for vertical scrolling. Vertical scrolling is disabled
- * if an empty string.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- */
- "sY": null
- },
-
- /**
- * Language information for the table.
- * @namespace
- * @extends DataTable.defaults.oLanguage
- */
- "oLanguage": {
- /**
- * Information callback function. See
- * {@link DataTable.defaults.fnInfoCallback}
- * @type function
- * @default null
- */
- "fnInfoCallback": null
- },
-
- /**
- * Browser support parameters
- * @namespace
- */
- "oBrowser": {
- /**
- * Indicate if the browser incorrectly calculates width:100% inside a
- * scrolling element (IE6/7)
- * @type boolean
- * @default false
- */
- "bScrollOversize": false,
-
- /**
- * Determine if the vertical scrollbar is on the right or left of the
- * scrolling container - needed for rtl language layout, although not
- * all browsers move the scrollbar (Safari).
- * @type boolean
- * @default false
- */
- "bScrollbarLeft": false,
-
- /**
- * Flag for if `getBoundingClientRect` is fully supported or not
- * @type boolean
- * @default false
- */
- "bBounding": false,
-
- /**
- * Browser scrollbar width
- * @type integer
- * @default 0
- */
- "barWidth": 0
- },
-
-
- "ajax": null,
-
-
- /**
- * Array referencing the nodes which are used for the features. The
- * parameters of this object match what is allowed by sDom - i.e.
- * <ul>
- * <li>'l' - Length changing</li>
- * <li>'f' - Filtering input</li>
- * <li>'t' - The table!</li>
- * <li>'i' - Information</li>
- * <li>'p' - Pagination</li>
- * <li>'r' - pRocessing</li>
- * </ul>
- * @type array
- * @default []
- */
- "aanFeatures": [],
-
- /**
- * Store data information - see {@link DataTable.models.oRow} for detailed
- * information.
- * @type array
- * @default []
- */
- "aoData": [],
-
- /**
- * Array of indexes which are in the current display (after filtering etc)
- * @type array
- * @default []
- */
- "aiDisplay": [],
-
- /**
- * Array of indexes for display - no filtering
- * @type array
- * @default []
- */
- "aiDisplayMaster": [],
-
- /**
- * Map of row ids to data indexes
- * @type object
- * @default {}
- */
- "aIds": {},
-
- /**
- * Store information about each column that is in use
- * @type array
- * @default []
- */
- "aoColumns": [],
-
- /**
- * Store information about the table's header
- * @type array
- * @default []
- */
- "aoHeader": [],
-
- /**
- * Store information about the table's footer
- * @type array
- * @default []
- */
- "aoFooter": [],
-
- /**
- * Store the applied global search information in case we want to force a
- * research or compare the old search to a new one.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @namespace
- * @extends DataTable.models.oSearch
- */
- "oPreviousSearch": {},
-
- /**
- * Store the applied search for each column - see
- * {@link DataTable.models.oSearch} for the format that is used for the
- * filtering information for each column.
- * @type array
- * @default []
- */
- "aoPreSearchCols": [],
-
- /**
- * Sorting that is applied to the table. Note that the inner arrays are
- * used in the following manner:
- * <ul>
- * <li>Index 0 - column number</li>
- * <li>Index 1 - current sorting direction</li>
- * </ul>
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type array
- * @todo These inner arrays should really be objects
- */
- "aaSorting": null,
-
- /**
- * Sorting that is always applied to the table (i.e. prefixed in front of
- * aaSorting).
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type array
- * @default []
- */
- "aaSortingFixed": [],
-
- /**
- * Classes to use for the striping of a table.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type array
- * @default []
- */
- "asStripeClasses": null,
-
- /**
- * If restoring a table - we should restore its striping classes as well
- * @type array
- * @default []
- */
- "asDestroyStripes": [],
-
- /**
- * If restoring a table - we should restore its width
- * @type int
- * @default 0
- */
- "sDestroyWidth": 0,
-
- /**
- * Callback functions array for every time a row is inserted (i.e. on a draw).
- * @type array
- * @default []
- */
- "aoRowCallback": [],
-
- /**
- * Callback functions for the header on each draw.
- * @type array
- * @default []
- */
- "aoHeaderCallback": [],
-
- /**
- * Callback function for the footer on each draw.
- * @type array
- * @default []
- */
- "aoFooterCallback": [],
-
- /**
- * Array of callback functions for draw callback functions
- * @type array
- * @default []
- */
- "aoDrawCallback": [],
-
- /**
- * Array of callback functions for row created function
- * @type array
- * @default []
- */
- "aoRowCreatedCallback": [],
-
- /**
- * Callback functions for just before the table is redrawn. A return of
- * false will be used to cancel the draw.
- * @type array
- * @default []
- */
- "aoPreDrawCallback": [],
-
- /**
- * Callback functions for when the table has been initialised.
- * @type array
- * @default []
- */
- "aoInitComplete": [],
-
-
- /**
- * Callbacks for modifying the settings to be stored for state saving, prior to
- * saving state.
- * @type array
- * @default []
- */
- "aoStateSaveParams": [],
-
- /**
- * Callbacks for modifying the settings that have been stored for state saving
- * prior to using the stored values to restore the state.
- * @type array
- * @default []
- */
- "aoStateLoadParams": [],
-
- /**
- * Callbacks for operating on the settings object once the saved state has been
- * loaded
- * @type array
- * @default []
- */
- "aoStateLoaded": [],
-
- /**
- * Cache the table ID for quick access
- * @type string
- * @default <i>Empty string</i>
- */
- "sTableId": "",
-
- /**
- * The TABLE node for the main table
- * @type node
- * @default null
- */
- "nTable": null,
-
- /**
- * Permanent ref to the thead element
- * @type node
- * @default null
- */
- "nTHead": null,
-
- /**
- * Permanent ref to the tfoot element - if it exists
- * @type node
- * @default null
- */
- "nTFoot": null,
-
- /**
- * Permanent ref to the tbody element
- * @type node
- * @default null
- */
- "nTBody": null,
-
- /**
- * Cache the wrapper node (contains all DataTables controlled elements)
- * @type node
- * @default null
- */
- "nTableWrapper": null,
-
- /**
- * Indicate if when using server-side processing the loading of data
- * should be deferred until the second draw.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- * @default false
- */
- "bDeferLoading": false,
-
- /**
- * Indicate if all required information has been read in
- * @type boolean
- * @default false
- */
- "bInitialised": false,
-
- /**
- * Information about open rows. Each object in the array has the parameters
- * 'nTr' and 'nParent'
- * @type array
- * @default []
- */
- "aoOpenRows": [],
-
- /**
- * Dictate the positioning of DataTables' control elements - see
- * {@link DataTable.model.oInit.sDom}.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- * @default null
- */
- "sDom": null,
-
- /**
- * Search delay (in mS)
- * @type integer
- * @default null
- */
- "searchDelay": null,
-
- /**
- * Which type of pagination should be used.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- * @default two_button
- */
- "sPaginationType": "two_button",
-
- /**
- * The state duration (for `stateSave`) in seconds.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type int
- * @default 0
- */
- "iStateDuration": 0,
-
- /**
- * Array of callback functions for state saving. Each array element is an
- * object with the following parameters:
- * <ul>
- * <li>function:fn - function to call. Takes two parameters, oSettings
- * and the JSON string to save that has been thus far created. Returns
- * a JSON string to be inserted into a json object
- * (i.e. '"param": [ 0, 1, 2]')</li>
- * <li>string:sName - name of callback</li>
- * </ul>
- * @type array
- * @default []
- */
- "aoStateSave": [],
-
- /**
- * Array of callback functions for state loading. Each array element is an
- * object with the following parameters:
- * <ul>
- * <li>function:fn - function to call. Takes two parameters, oSettings
- * and the object stored. May return false to cancel state loading</li>
- * <li>string:sName - name of callback</li>
- * </ul>
- * @type array
- * @default []
- */
- "aoStateLoad": [],
-
- /**
- * State that was saved. Useful for back reference
- * @type object
- * @default null
- */
- "oSavedState": null,
-
- /**
- * State that was loaded. Useful for back reference
- * @type object
- * @default null
- */
- "oLoadedState": null,
-
- /**
- * Source url for AJAX data for the table.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- * @default null
- */
- "sAjaxSource": null,
-
- /**
- * Property from a given object from which to read the table data from. This
- * can be an empty string (when not server-side processing), in which case
- * it is assumed an an array is given directly.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- */
- "sAjaxDataProp": null,
-
- /**
- * Note if draw should be blocked while getting data
- * @type boolean
- * @default true
- */
- "bAjaxDataGet": true,
-
- /**
- * The last jQuery XHR object that was used for server-side data gathering.
- * This can be used for working with the XHR information in one of the
- * callbacks
- * @type object
- * @default null
- */
- "jqXHR": null,
-
- /**
- * JSON returned from the server in the last Ajax request
- * @type object
- * @default undefined
- */
- "json": undefined,
-
- /**
- * Data submitted as part of the last Ajax request
- * @type object
- * @default undefined
- */
- "oAjaxData": undefined,
-
- /**
- * Function to get the server-side data.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type function
- */
- "fnServerData": null,
-
- /**
- * Functions which are called prior to sending an Ajax request so extra
- * parameters can easily be sent to the server
- * @type array
- * @default []
- */
- "aoServerParams": [],
-
- /**
- * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if
- * required).
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- */
- "sServerMethod": null,
-
- /**
- * Format numbers for display.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type function
- */
- "fnFormatNumber": null,
-
- /**
- * List of options that can be used for the user selectable length menu.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type array
- * @default []
- */
- "aLengthMenu": null,
-
- /**
- * Counter for the draws that the table does. Also used as a tracker for
- * server-side processing
- * @type int
- * @default 0
- */
- "iDraw": 0,
-
- /**
- * Indicate if a redraw is being done - useful for Ajax
- * @type boolean
- * @default false
- */
- "bDrawing": false,
-
- /**
- * Draw index (iDraw) of the last error when parsing the returned data
- * @type int
- * @default -1
- */
- "iDrawError": -1,
-
- /**
- * Paging display length
- * @type int
- * @default 10
- */
- "_iDisplayLength": 10,
-
- /**
- * Paging start point - aiDisplay index
- * @type int
- * @default 0
- */
- "_iDisplayStart": 0,
-
- /**
- * Server-side processing - number of records in the result set
- * (i.e. before filtering), Use fnRecordsTotal rather than
- * this property to get the value of the number of records, regardless of
- * the server-side processing setting.
- * @type int
- * @default 0
- * @private
- */
- "_iRecordsTotal": 0,
-
- /**
- * Server-side processing - number of records in the current display set
- * (i.e. after filtering). Use fnRecordsDisplay rather than
- * this property to get the value of the number of records, regardless of
- * the server-side processing setting.
- * @type boolean
- * @default 0
- * @private
- */
- "_iRecordsDisplay": 0,
-
- /**
- * Flag to indicate if jQuery UI marking and classes should be used.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bJUI": null,
-
- /**
- * The classes to use for the table
- * @type object
- * @default {}
- */
- "oClasses": {},
-
- /**
- * Flag attached to the settings object so you can check in the draw
- * callback if filtering has been done in the draw. Deprecated in favour of
- * events.
- * @type boolean
- * @default false
- * @deprecated
- */
- "bFiltered": false,
-
- /**
- * Flag attached to the settings object so you can check in the draw
- * callback if sorting has been done in the draw. Deprecated in favour of
- * events.
- * @type boolean
- * @default false
- * @deprecated
- */
- "bSorted": false,
-
- /**
- * Indicate that if multiple rows are in the header and there is more than
- * one unique cell per column, if the top one (true) or bottom one (false)
- * should be used for sorting / title by DataTables.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bSortCellsTop": null,
-
- /**
- * Initialisation object that is used for the table
- * @type object
- * @default null
- */
- "oInit": null,
-
- /**
- * Destroy callback functions - for plug-ins to attach themselves to the
- * destroy so they can clean up markup and events.
- * @type array
- * @default []
- */
- "aoDestroyCallback": [],
-
-
- /**
- * Get the number of records in the current record set, before filtering
- * @type function
- */
- "fnRecordsTotal": function ()
- {
- return _fnDataSource( this ) == 'ssp' ?
- this._iRecordsTotal * 1 :
- this.aiDisplayMaster.length;
- },
-
- /**
- * Get the number of records in the current record set, after filtering
- * @type function
- */
- "fnRecordsDisplay": function ()
- {
- return _fnDataSource( this ) == 'ssp' ?
- this._iRecordsDisplay * 1 :
- this.aiDisplay.length;
- },
-
- /**
- * Get the display end point - aiDisplay index
- * @type function
- */
- "fnDisplayEnd": function ()
- {
- var
- len = this._iDisplayLength,
- start = this._iDisplayStart,
- calc = start + len,
- records = this.aiDisplay.length,
- features = this.oFeatures,
- paginate = features.bPaginate;
-
- if ( features.bServerSide ) {
- return paginate === false || len === -1 ?
- start + records :
- Math.min( start+len, this._iRecordsDisplay );
- }
- else {
- return ! paginate || calc>records || len===-1 ?
- records :
- calc;
- }
- },
-
- /**
- * The DataTables object for this table
- * @type object
- * @default null
- */
- "oInstance": null,
-
- /**
- * Unique identifier for each instance of the DataTables object. If there
- * is an ID on the table node, then it takes that value, otherwise an
- * incrementing internal counter is used.
- * @type string
- * @default null
- */
- "sInstance": null,
-
- /**
- * tabindex attribute value that is added to DataTables control elements, allowing
- * keyboard navigation of the table and its controls.
- */
- "iTabIndex": 0,
-
- /**
- * DIV container for the footer scrolling table if scrolling
- */
- "nScrollHead": null,
-
- /**
- * DIV container for the footer scrolling table if scrolling
- */
- "nScrollFoot": null,
-
- /**
- * Last applied sort
- * @type array
- * @default []
- */
- "aLastSort": [],
-
- /**
- * Stored plug-in instances
- * @type object
- * @default {}
- */
- "oPlugins": {},
-
- /**
- * Function used to get a row's id from the row's data
- * @type function
- * @default null
- */
- "rowIdFn": null,
-
- /**
- * Data location where to store a row's id
- * @type string
- * @default null
- */
- "rowId": null
- };
-
- /**
- * Extension object for DataTables that is used to provide all extension
- * options.
- *
- * Note that the `DataTable.ext` object is available through
- * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is
- * also aliased to `jQuery.fn.dataTableExt` for historic reasons.
- * @namespace
- * @extends DataTable.models.ext
- */
-
-
- /**
- * DataTables extensions
- *
- * This namespace acts as a collection area for plug-ins that can be used to
- * extend DataTables capabilities. Indeed many of the build in methods
- * use this method to provide their own capabilities (sorting methods for
- * example).
- *
- * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy
- * reasons
- *
- * @namespace
- */
- DataTable.ext = _ext = {
- /**
- * Buttons. For use with the Buttons extension for DataTables. This is
- * defined here so other extensions can define buttons regardless of load
- * order. It is _not_ used by DataTables core.
- *
- * @type object
- * @default {}
- */
- buttons: {},
-
-
- /**
- * Element class names
- *
- * @type object
- * @default {}
- */
- classes: {},
-
-
- /**
- * DataTables build type (expanded by the download builder)
- *
- * @type string
- */
- builder: "-source-",
-
-
- /**
- * Error reporting.
- *
- * How should DataTables report an error. Can take the value 'alert',
- * 'throw', 'none' or a function.
- *
- * @type string|function
- * @default alert
- */
- errMode: "alert",
-
-
- /**
- * Feature plug-ins.
- *
- * This is an array of objects which describe the feature plug-ins that are
- * available to DataTables. These feature plug-ins are then available for
- * use through the `dom` initialisation option.
- *
- * Each feature plug-in is described by an object which must have the
- * following properties:
- *
- * * `fnInit` - function that is used to initialise the plug-in,
- * * `cFeature` - a character so the feature can be enabled by the `dom`
- * instillation option. This is case sensitive.
- *
- * The `fnInit` function has the following input parameters:
- *
- * 1. `{object}` DataTables settings object: see
- * {@link DataTable.models.oSettings}
- *
- * And the following return is expected:
- *
- * * {node|null} The element which contains your feature. Note that the
- * return may also be void if your plug-in does not require to inject any
- * DOM elements into DataTables control (`dom`) - for example this might
- * be useful when developing a plug-in which allows table control via
- * keyboard entry
- *
- * @type array
- *
- * @example
- * $.fn.dataTable.ext.features.push( {
- * "fnInit": function( oSettings ) {
- * return new TableTools( { "oDTSettings": oSettings } );
- * },
- * "cFeature": "T"
- * } );
- */
- feature: [],
-
-
- /**
- * Row searching.
- *
- * This method of searching is complimentary to the default type based
- * searching, and a lot more comprehensive as it allows you complete control
- * over the searching logic. Each element in this array is a function
- * (parameters described below) that is called for every row in the table,
- * and your logic decides if it should be included in the searching data set
- * or not.
- *
- * Searching functions have the following input parameters:
- *
- * 1. `{object}` DataTables settings object: see
- * {@link DataTable.models.oSettings}
- * 2. `{array|object}` Data for the row to be processed (same as the
- * original format that was passed in as the data source, or an array
- * from a DOM data source
- * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which
- * can be useful to retrieve the `TR` element if you need DOM interaction.
- *
- * And the following return is expected:
- *
- * * {boolean} Include the row in the searched result set (true) or not
- * (false)
- *
- * Note that as with the main search ability in DataTables, technically this
- * is "filtering", since it is subtractive. However, for consistency in
- * naming we call it searching here.
- *
- * @type array
- * @default []
- *
- * @example
- * // The following example shows custom search being applied to the
- * // fourth column (i.e. the data[3] index) based on two input values
- * // from the end-user, matching the data in a certain range.
- * $.fn.dataTable.ext.search.push(
- * function( settings, data, dataIndex ) {
- * var min = document.getElementById('min').value * 1;
- * var max = document.getElementById('max').value * 1;
- * var version = data[3] == "-" ? 0 : data[3]*1;
- *
- * if ( min == "" && max == "" ) {
- * return true;
- * }
- * else if ( min == "" && version < max ) {
- * return true;
- * }
- * else if ( min < version && "" == max ) {
- * return true;
- * }
- * else if ( min < version && version < max ) {
- * return true;
- * }
- * return false;
- * }
- * );
- */
- search: [],
-
-
- /**
- * Selector extensions
- *
- * The `selector` option can be used to extend the options available for the
- * selector modifier options (`selector-modifier` object data type) that
- * each of the three built in selector types offer (row, column and cell +
- * their plural counterparts). For example the Select extension uses this
- * mechanism to provide an option to select only rows, columns and cells
- * that have been marked as selected by the end user (`{selected: true}`),
- * which can be used in conjunction with the existing built in selector
- * options.
- *
- * Each property is an array to which functions can be pushed. The functions
- * take three attributes:
- *
- * * Settings object for the host table
- * * Options object (`selector-modifier` object type)
- * * Array of selected item indexes
- *
- * The return is an array of the resulting item indexes after the custom
- * selector has been applied.
- *
- * @type object
- */
- selector: {
- cell: [],
- column: [],
- row: []
- },
-
-
- /**
- * Internal functions, exposed for used in plug-ins.
- *
- * Please note that you should not need to use the internal methods for
- * anything other than a plug-in (and even then, try to avoid if possible).
- * The internal function may change between releases.
- *
- * @type object
- * @default {}
- */
- internal: {},
-
-
- /**
- * Legacy configuration options. Enable and disable legacy options that
- * are available in DataTables.
- *
- * @type object
- */
- legacy: {
- /**
- * Enable / disable DataTables 1.9 compatible server-side processing
- * requests
- *
- * @type boolean
- * @default null
- */
- ajax: null
- },
-
-
- /**
- * Pagination plug-in methods.
- *
- * Each entry in this object is a function and defines which buttons should
- * be shown by the pagination rendering method that is used for the table:
- * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the
- * buttons are displayed in the document, while the functions here tell it
- * what buttons to display. This is done by returning an array of button
- * descriptions (what each button will do).
- *
- * Pagination types (the four built in options and any additional plug-in
- * options defined here) can be used through the `paginationType`
- * initialisation parameter.
- *
- * The functions defined take two parameters:
- *
- * 1. `{int} page` The current page index
- * 2. `{int} pages` The number of pages in the table
- *
- * Each function is expected to return an array where each element of the
- * array can be one of:
- *
- * * `first` - Jump to first page when activated
- * * `last` - Jump to last page when activated
- * * `previous` - Show previous page when activated
- * * `next` - Show next page when activated
- * * `{int}` - Show page of the index given
- * * `{array}` - A nested array containing the above elements to add a
- * containing 'DIV' element (might be useful for styling).
- *
- * Note that DataTables v1.9- used this object slightly differently whereby
- * an object with two functions would be defined for each plug-in. That
- * ability is still supported by DataTables 1.10+ to provide backwards
- * compatibility, but this option of use is now decremented and no longer
- * documented in DataTables 1.10+.
- *
- * @type object
- * @default {}
- *
- * @example
- * // Show previous, next and current page buttons only
- * $.fn.dataTableExt.oPagination.current = function ( page, pages ) {
- * return [ 'previous', page, 'next' ];
- * };
- */
- pager: {},
-
-
- renderer: {
- pageButton: {},
- header: {}
- },
-
-
- /**
- * Ordering plug-ins - custom data source
- *
- * The extension options for ordering of data available here is complimentary
- * to the default type based ordering that DataTables typically uses. It
- * allows much greater control over the the data that is being used to
- * order a column, but is necessarily therefore more complex.
- *
- * This type of ordering is useful if you want to do ordering based on data
- * live from the DOM (for example the contents of an 'input' element) rather
- * than just the static string that DataTables knows of.
- *
- * The way these plug-ins work is that you create an array of the values you
- * wish to be ordering for the column in question and then return that
- * array. The data in the array much be in the index order of the rows in
- * the table (not the currently ordering order!). Which order data gathering
- * function is run here depends on the `dt-init columns.orderDataType`
- * parameter that is used for the column (if any).
- *
- * The functions defined take two parameters:
- *
- * 1. `{object}` DataTables settings object: see
- * {@link DataTable.models.oSettings}
- * 2. `{int}` Target column index
- *
- * Each function is expected to return an array:
- *
- * * `{array}` Data for the column to be ordering upon
- *
- * @type array
- *
- * @example
- * // Ordering using `input` node values
- * $.fn.dataTable.ext.order['dom-text'] = function ( settings, col )
- * {
- * return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
- * return $('input', td).val();
- * } );
- * }
- */
- order: {},
-
-
- /**
- * Type based plug-ins.
- *
- * Each column in DataTables has a type assigned to it, either by automatic
- * detection or by direct assignment using the `type` option for the column.
- * The type of a column will effect how it is ordering and search (plug-ins
- * can also make use of the column type if required).
- *
- * @namespace
- */
- type: {
- /**
- * Type detection functions.
- *
- * The functions defined in this object are used to automatically detect
- * a column's type, making initialisation of DataTables super easy, even
- * when complex data is in the table.
- *
- * The functions defined take two parameters:
- *
- * 1. `{*}` Data from the column cell to be analysed
- * 2. `{settings}` DataTables settings object. This can be used to
- * perform context specific type detection - for example detection
- * based on language settings such as using a comma for a decimal
- * place. Generally speaking the options from the settings will not
- * be required
- *
- * Each function is expected to return:
- *
- * * `{string|null}` Data type detected, or null if unknown (and thus
- * pass it on to the other type detection functions.
- *
- * @type array
- *
- * @example
- * // Currency type detection plug-in:
- * $.fn.dataTable.ext.type.detect.push(
- * function ( data, settings ) {
- * // Check the numeric part
- * if ( ! $.isNumeric( data.substring(1) ) ) {
- * return null;
- * }
- *
- * // Check prefixed by currency
- * if ( data.charAt(0) == '$' || data.charAt(0) == '&pound;' ) {
- * return 'currency';
- * }
- * return null;
- * }
- * );
- */
- detect: [],
-
-
- /**
- * Type based search formatting.
- *
- * The type based searching functions can be used to pre-format the
- * data to be search on. For example, it can be used to strip HTML
- * tags or to de-format telephone numbers for numeric only searching.
- *
- * Note that is a search is not defined for a column of a given type,
- * no search formatting will be performed.
- *
- * Pre-processing of searching data plug-ins - When you assign the sType
- * for a column (or have it automatically detected for you by DataTables
- * or a type detection plug-in), you will typically be using this for
- * custom sorting, but it can also be used to provide custom searching
- * by allowing you to pre-processing the data and returning the data in
- * the format that should be searched upon. This is done by adding
- * functions this object with a parameter name which matches the sType
- * for that target column. This is the corollary of <i>afnSortData</i>
- * for searching data.
- *
- * The functions defined take a single parameter:
- *
- * 1. `{*}` Data from the column cell to be prepared for searching
- *
- * Each function is expected to return:
- *
- * * `{string|null}` Formatted string that will be used for the searching.
- *
- * @type object
- * @default {}
- *
- * @example
- * $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {
- * return d.replace(/\n/g," ").replace( /<.*?>/g, "" );
- * }
- */
- search: {},
-
-
- /**
- * Type based ordering.
- *
- * The column type tells DataTables what ordering to apply to the table
- * when a column is sorted upon. The order for each type that is defined,
- * is defined by the functions available in this object.
- *
- * Each ordering option can be described by three properties added to
- * this object:
- *
- * * `{type}-pre` - Pre-formatting function
- * * `{type}-asc` - Ascending order function
- * * `{type}-desc` - Descending order function
- *
- * All three can be used together, only `{type}-pre` or only
- * `{type}-asc` and `{type}-desc` together. It is generally recommended
- * that only `{type}-pre` is used, as this provides the optimal
- * implementation in terms of speed, although the others are provided
- * for compatibility with existing Javascript sort functions.
- *
- * `{type}-pre`: Functions defined take a single parameter:
- *
- * 1. `{*}` Data from the column cell to be prepared for ordering
- *
- * And return:
- *
- * * `{*}` Data to be sorted upon
- *
- * `{type}-asc` and `{type}-desc`: Functions are typical Javascript sort
- * functions, taking two parameters:
- *
- * 1. `{*}` Data to compare to the second parameter
- * 2. `{*}` Data to compare to the first parameter
- *
- * And returning:
- *
- * * `{*}` Ordering match: <0 if first parameter should be sorted lower
- * than the second parameter, ===0 if the two parameters are equal and
- * >0 if the first parameter should be sorted height than the second
- * parameter.
- *
- * @type object
- * @default {}
- *
- * @example
- * // Numeric ordering of formatted numbers with a pre-formatter
- * $.extend( $.fn.dataTable.ext.type.order, {
- * "string-pre": function(x) {
- * a = (a === "-" || a === "") ? 0 : a.replace( /[^\d\-\.]/g, "" );
- * return parseFloat( a );
- * }
- * } );
- *
- * @example
- * // Case-sensitive string ordering, with no pre-formatting method
- * $.extend( $.fn.dataTable.ext.order, {
- * "string-case-asc": function(x,y) {
- * return ((x < y) ? -1 : ((x > y) ? 1 : 0));
- * },
- * "string-case-desc": function(x,y) {
- * return ((x < y) ? 1 : ((x > y) ? -1 : 0));
- * }
- * } );
- */
- order: {}
- },
-
- /**
- * Unique DataTables instance counter
- *
- * @type int
- * @private
- */
- _unique: 0,
-
-
- //
- // Depreciated
- // The following properties are retained for backwards compatiblity only.
- // The should not be used in new projects and will be removed in a future
- // version
- //
-
- /**
- * Version check function.
- * @type function
- * @depreciated Since 1.10
- */
- fnVersionCheck: DataTable.fnVersionCheck,
-
-
- /**
- * Index for what 'this' index API functions should use
- * @type int
- * @deprecated Since v1.10
- */
- iApiIndex: 0,
-
-
- /**
- * jQuery UI class container
- * @type object
- * @deprecated Since v1.10
- */
- oJUIClasses: {},
-
-
- /**
- * Software version
- * @type string
- * @deprecated Since v1.10
- */
- sVersion: DataTable.version
- };
-
-
- //
- // Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts
- //
- $.extend( _ext, {
- afnFiltering: _ext.search,
- aTypes: _ext.type.detect,
- ofnSearch: _ext.type.search,
- oSort: _ext.type.order,
- afnSortData: _ext.order,
- aoFeatures: _ext.feature,
- oApi: _ext.internal,
- oStdClasses: _ext.classes,
- oPagination: _ext.pager
- } );
-
-
- $.extend( DataTable.ext.classes, {
- "sTable": "dataTable",
- "sNoFooter": "no-footer",
-
- /* Paging buttons */
- "sPageButton": "paginate_button",
- "sPageButtonActive": "current",
- "sPageButtonDisabled": "disabled",
-
- /* Striping classes */
- "sStripeOdd": "odd",
- "sStripeEven": "even",
-
- /* Empty row */
- "sRowEmpty": "dataTables_empty",
-
- /* Features */
- "sWrapper": "dataTables_wrapper",
- "sFilter": "dataTables_filter",
- "sInfo": "dataTables_info",
- "sPaging": "dataTables_paginate paging_", /* Note that the type is postfixed */
- "sLength": "dataTables_length",
- "sProcessing": "dataTables_processing",
-
- /* Sorting */
- "sSortAsc": "sorting_asc",
- "sSortDesc": "sorting_desc",
- "sSortable": "sorting", /* Sortable in both directions */
- "sSortableAsc": "sorting_asc_disabled",
- "sSortableDesc": "sorting_desc_disabled",
- "sSortableNone": "sorting_disabled",
- "sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */
-
- /* Filtering */
- "sFilterInput": "",
-
- /* Page length */
- "sLengthSelect": "",
-
- /* Scrolling */
- "sScrollWrapper": "dataTables_scroll",
- "sScrollHead": "dataTables_scrollHead",
- "sScrollHeadInner": "dataTables_scrollHeadInner",
- "sScrollBody": "dataTables_scrollBody",
- "sScrollFoot": "dataTables_scrollFoot",
- "sScrollFootInner": "dataTables_scrollFootInner",
-
- /* Misc */
- "sHeaderTH": "",
- "sFooterTH": "",
-
- // Deprecated
- "sSortJUIAsc": "",
- "sSortJUIDesc": "",
- "sSortJUI": "",
- "sSortJUIAscAllowed": "",
- "sSortJUIDescAllowed": "",
- "sSortJUIWrapper": "",
- "sSortIcon": "",
- "sJUIHeader": "",
- "sJUIFooter": ""
- } );
-
-
- (function() {
-
- // Reused strings for better compression. Closure compiler appears to have a
- // weird edge case where it is trying to expand strings rather than use the
- // variable version. This results in about 200 bytes being added, for very
- // little preference benefit since it this run on script load only.
- var _empty = '';
- _empty = '';
-
- var _stateDefault = _empty + 'ui-state-default';
- var _sortIcon = _empty + 'css_right ui-icon ui-icon-';
- var _headerFooter = _empty + 'fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix';
-
- $.extend( DataTable.ext.oJUIClasses, DataTable.ext.classes, {
- /* Full numbers paging buttons */
- "sPageButton": "fg-button ui-button "+_stateDefault,
- "sPageButtonActive": "ui-state-disabled",
- "sPageButtonDisabled": "ui-state-disabled",
-
- /* Features */
- "sPaging": "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi "+
- "ui-buttonset-multi paging_", /* Note that the type is postfixed */
-
- /* Sorting */
- "sSortAsc": _stateDefault+" sorting_asc",
- "sSortDesc": _stateDefault+" sorting_desc",
- "sSortable": _stateDefault+" sorting",
- "sSortableAsc": _stateDefault+" sorting_asc_disabled",
- "sSortableDesc": _stateDefault+" sorting_desc_disabled",
- "sSortableNone": _stateDefault+" sorting_disabled",
- "sSortJUIAsc": _sortIcon+"triangle-1-n",
- "sSortJUIDesc": _sortIcon+"triangle-1-s",
- "sSortJUI": _sortIcon+"carat-2-n-s",
- "sSortJUIAscAllowed": _sortIcon+"carat-1-n",
- "sSortJUIDescAllowed": _sortIcon+"carat-1-s",
- "sSortJUIWrapper": "DataTables_sort_wrapper",
- "sSortIcon": "DataTables_sort_icon",
-
- /* Scrolling */
- "sScrollHead": "dataTables_scrollHead "+_stateDefault,
- "sScrollFoot": "dataTables_scrollFoot "+_stateDefault,
-
- /* Misc */
- "sHeaderTH": _stateDefault,
- "sFooterTH": _stateDefault,
- "sJUIHeader": _headerFooter+" ui-corner-tl ui-corner-tr",
- "sJUIFooter": _headerFooter+" ui-corner-bl ui-corner-br"
- } );
-
- }());
-
-
-
- var extPagination = DataTable.ext.pager;
-
- function _numbers ( page, pages ) {
- var
- numbers = [],
- buttons = extPagination.numbers_length,
- half = Math.floor( buttons / 2 ),
- i = 1;
-
- if ( pages <= buttons ) {
- numbers = _range( 0, pages );
- }
- else if ( page <= half ) {
- numbers = _range( 0, buttons-2 );
- numbers.push( 'ellipsis' );
- numbers.push( pages-1 );
- }
- else if ( page >= pages - 1 - half ) {
- numbers = _range( pages-(buttons-2), pages );
- numbers.splice( 0, 0, 'ellipsis' ); // no unshift in ie6
- numbers.splice( 0, 0, 0 );
- }
- else {
- numbers = _range( page-half+2, page+half-1 );
- numbers.push( 'ellipsis' );
- numbers.push( pages-1 );
- numbers.splice( 0, 0, 'ellipsis' );
- numbers.splice( 0, 0, 0 );
- }
-
- numbers.DT_el = 'span';
- return numbers;
- }
-
-
- $.extend( extPagination, {
- simple: function ( page, pages ) {
- return [ 'previous', 'next' ];
- },
-
- full: function ( page, pages ) {
- return [ 'first', 'previous', 'next', 'last' ];
- },
-
- numbers: function ( page, pages ) {
- return [ _numbers(page, pages) ];
- },
-
- simple_numbers: function ( page, pages ) {
- return [ 'previous', _numbers(page, pages), 'next' ];
- },
-
- full_numbers: function ( page, pages ) {
- return [ 'first', 'previous', _numbers(page, pages), 'next', 'last' ];
- },
-
- // For testing and plug-ins to use
- _numbers: _numbers,
-
- // Number of number buttons (including ellipsis) to show. _Must be odd!_
- numbers_length: 7
- } );
-
-
- $.extend( true, DataTable.ext.renderer, {
- pageButton: {
- _: function ( settings, host, idx, buttons, page, pages ) {
- var classes = settings.oClasses;
- var lang = settings.oLanguage.oPaginate;
- var aria = settings.oLanguage.oAria.paginate || {};
- var btnDisplay, btnClass, counter=0;
-
- var attach = function( container, buttons ) {
- var i, ien, node, button;
- var clickHandler = function ( e ) {
- _fnPageChange( settings, e.data.action, true );
- };
-
- for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
- button = buttons[i];
-
- if ( $.isArray( button ) ) {
- var inner = $( '<'+(button.DT_el || 'div')+'/>' )
- .appendTo( container );
- attach( inner, button );
- }
- else {
- btnDisplay = null;
- btnClass = '';
-
- switch ( button ) {
- case 'ellipsis':
- container.append('<span class="ellipsis">&#x2026;</span>');
- break;
-
- case 'first':
- btnDisplay = lang.sFirst;
- btnClass = button + (page > 0 ?
- '' : ' '+classes.sPageButtonDisabled);
- break;
-
- case 'previous':
- btnDisplay = lang.sPrevious;
- btnClass = button + (page > 0 ?
- '' : ' '+classes.sPageButtonDisabled);
- break;
-
- case 'next':
- btnDisplay = lang.sNext;
- btnClass = button + (page < pages-1 ?
- '' : ' '+classes.sPageButtonDisabled);
- break;
-
- case 'last':
- btnDisplay = lang.sLast;
- btnClass = button + (page < pages-1 ?
- '' : ' '+classes.sPageButtonDisabled);
- break;
-
- default:
- btnDisplay = button + 1;
- btnClass = page === button ?
- classes.sPageButtonActive : '';
- break;
- }
-
- if ( btnDisplay !== null ) {
- node = $('<a>', {
- 'class': classes.sPageButton+' '+btnClass,
- 'aria-controls': settings.sTableId,
- 'aria-label': aria[ button ],
- 'data-dt-idx': counter,
- 'tabindex': settings.iTabIndex,
- 'id': idx === 0 && typeof button === 'string' ?
- settings.sTableId +'_'+ button :
- null
- } )
- .html( btnDisplay )
- .appendTo( container );
-
- _fnBindAction(
- node, {action: button}, clickHandler
- );
-
- counter++;
- }
- }
- }
- };
-
- // IE9 throws an 'unknown error' if document.activeElement is used
- // inside an iframe or frame. Try / catch the error. Not good for
- // accessibility, but neither are frames.
- var activeEl;
-
- try {
- // Because this approach is destroying and recreating the paging
- // elements, focus is lost on the select button which is bad for
- // accessibility. So we want to restore focus once the draw has
- // completed
- activeEl = $(host).find(document.activeElement).data('dt-idx');
- }
- catch (e) {}
-
- attach( $(host).empty(), buttons );
-
- if ( activeEl ) {
- $(host).find( '[data-dt-idx='+activeEl+']' ).focus();
- }
- }
- }
- } );
-
-
-
- // Built in type detection. See model.ext.aTypes for information about
- // what is required from this methods.
- $.extend( DataTable.ext.type.detect, [
- // Plain numbers - first since V8 detects some plain numbers as dates
- // e.g. Date.parse('55') (but not all, e.g. Date.parse('22')...).
- function ( d, settings )
- {
- var decimal = settings.oLanguage.sDecimal;
- return _isNumber( d, decimal ) ? 'num'+decimal : null;
- },
-
- // Dates (only those recognised by the browser's Date.parse)
- function ( d, settings )
- {
- // V8 will remove any unknown characters at the start and end of the
- // expression, leading to false matches such as `$245.12` or `10%` being
- // a valid date. See forum thread 18941 for detail.
- if ( d && !(d instanceof Date) && ( ! _re_date_start.test(d) || ! _re_date_end.test(d) ) ) {
- return null;
- }
- var parsed = Date.parse(d);
- return (parsed !== null && !isNaN(parsed)) || _empty(d) ? 'date' : null;
- },
-
- // Formatted numbers
- function ( d, settings )
- {
- var decimal = settings.oLanguage.sDecimal;
- return _isNumber( d, decimal, true ) ? 'num-fmt'+decimal : null;
- },
-
- // HTML numeric
- function ( d, settings )
- {
- var decimal = settings.oLanguage.sDecimal;
- return _htmlNumeric( d, decimal ) ? 'html-num'+decimal : null;
- },
-
- // HTML numeric, formatted
- function ( d, settings )
- {
- var decimal = settings.oLanguage.sDecimal;
- return _htmlNumeric( d, decimal, true ) ? 'html-num-fmt'+decimal : null;
- },
-
- // HTML (this is strict checking - there must be html)
- function ( d, settings )
- {
- return _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1) ?
- 'html' : null;
- }
- ] );
-
-
-
- // Filter formatting functions. See model.ext.ofnSearch for information about
- // what is required from these methods.
- //
- // Note that additional search methods are added for the html numbers and
- // html formatted numbers by `_addNumericSort()` when we know what the decimal
- // place is
-
-
- $.extend( DataTable.ext.type.search, {
- html: function ( data ) {
- return _empty(data) ?
- data :
- typeof data === 'string' ?
- data
- .replace( _re_new_lines, " " )
- .replace( _re_html, "" ) :
- '';
- },
-
- string: function ( data ) {
- return _empty(data) ?
- data :
- typeof data === 'string' ?
- data.replace( _re_new_lines, " " ) :
- data;
- }
- } );
-
-
-
- var __numericReplace = function ( d, decimalPlace, re1, re2 ) {
- if ( d !== 0 && (!d || d === '-') ) {
- return -Infinity;
- }
-
- // If a decimal place other than `.` is used, it needs to be given to the
- // function so we can detect it and replace with a `.` which is the only
- // decimal place Javascript recognises - it is not locale aware.
- if ( decimalPlace ) {
- d = _numToDecimal( d, decimalPlace );
- }
-
- if ( d.replace ) {
- if ( re1 ) {
- d = d.replace( re1, '' );
- }
-
- if ( re2 ) {
- d = d.replace( re2, '' );
- }
- }
-
- return d * 1;
- };
-
-
- // Add the numeric 'deformatting' functions for sorting and search. This is done
- // in a function to provide an easy ability for the language options to add
- // additional methods if a non-period decimal place is used.
- function _addNumericSort ( decimalPlace ) {
- $.each(
- {
- // Plain numbers
- "num": function ( d ) {
- return __numericReplace( d, decimalPlace );
- },
-
- // Formatted numbers
- "num-fmt": function ( d ) {
- return __numericReplace( d, decimalPlace, _re_formatted_numeric );
- },
-
- // HTML numeric
- "html-num": function ( d ) {
- return __numericReplace( d, decimalPlace, _re_html );
- },
-
- // HTML numeric, formatted
- "html-num-fmt": function ( d ) {
- return __numericReplace( d, decimalPlace, _re_html, _re_formatted_numeric );
- }
- },
- function ( key, fn ) {
- // Add the ordering method
- _ext.type.order[ key+decimalPlace+'-pre' ] = fn;
-
- // For HTML types add a search formatter that will strip the HTML
- if ( key.match(/^html\-/) ) {
- _ext.type.search[ key+decimalPlace ] = _ext.type.search.html;
- }
- }
- );
- }
-
-
- // Default sort methods
- $.extend( _ext.type.order, {
- // Dates
- "date-pre": function ( d ) {
- return Date.parse( d ) || 0;
- },
-
- // html
- "html-pre": function ( a ) {
- return _empty(a) ?
- '' :
- a.replace ?
- a.replace( /<.*?>/g, "" ).toLowerCase() :
- a+'';
- },
-
- // string
- "string-pre": function ( a ) {
- // This is a little complex, but faster than always calling toString,
- // http://jsperf.com/tostring-v-check
- return _empty(a) ?
- '' :
- typeof a === 'string' ?
- a.toLowerCase() :
- ! a.toString ?
- '' :
- a.toString();
- },
-
- // string-asc and -desc are retained only for compatibility with the old
- // sort methods
- "string-asc": function ( x, y ) {
- return ((x < y) ? -1 : ((x > y) ? 1 : 0));
- },
-
- "string-desc": function ( x, y ) {
- return ((x < y) ? 1 : ((x > y) ? -1 : 0));
- }
- } );
-
-
- // Numeric sorting types - order doesn't matter here
- _addNumericSort( '' );
-
-
- $.extend( true, DataTable.ext.renderer, {
- header: {
- _: function ( settings, cell, column, classes ) {
- // No additional mark-up required
- // Attach a sort listener to update on sort - note that using the
- // `DT` namespace will allow the event to be removed automatically
- // on destroy, while the `dt` namespaced event is the one we are
- // listening for
- $(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {
- if ( settings !== ctx ) { // need to check this this is the host
- return; // table, not a nested one
- }
-
- var colIdx = column.idx;
-
- cell
- .removeClass(
- column.sSortingClass +' '+
- classes.sSortAsc +' '+
- classes.sSortDesc
- )
- .addClass( columns[ colIdx ] == 'asc' ?
- classes.sSortAsc : columns[ colIdx ] == 'desc' ?
- classes.sSortDesc :
- column.sSortingClass
- );
- } );
- },
-
- jqueryui: function ( settings, cell, column, classes ) {
- $('<div/>')
- .addClass( classes.sSortJUIWrapper )
- .append( cell.contents() )
- .append( $('<span/>')
- .addClass( classes.sSortIcon+' '+column.sSortingClassJUI )
- )
- .appendTo( cell );
-
- // Attach a sort listener to update on sort
- $(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {
- if ( settings !== ctx ) {
- return;
- }
-
- var colIdx = column.idx;
-
- cell
- .removeClass( classes.sSortAsc +" "+classes.sSortDesc )
- .addClass( columns[ colIdx ] == 'asc' ?
- classes.sSortAsc : columns[ colIdx ] == 'desc' ?
- classes.sSortDesc :
- column.sSortingClass
- );
-
- cell
- .find( 'span.'+classes.sSortIcon )
- .removeClass(
- classes.sSortJUIAsc +" "+
- classes.sSortJUIDesc +" "+
- classes.sSortJUI +" "+
- classes.sSortJUIAscAllowed +" "+
- classes.sSortJUIDescAllowed
- )
- .addClass( columns[ colIdx ] == 'asc' ?
- classes.sSortJUIAsc : columns[ colIdx ] == 'desc' ?
- classes.sSortJUIDesc :
- column.sSortingClassJUI
- );
- } );
- }
- }
- } );
-
- /*
- * Public helper functions. These aren't used internally by DataTables, or
- * called by any of the options passed into DataTables, but they can be used
- * externally by developers working with DataTables. They are helper functions
- * to make working with DataTables a little bit easier.
- */
-
- var __htmlEscapeEntities = function ( d ) {
- return typeof d === 'string' ?
- d.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;') :
- d;
- };
-
- /**
- * Helpers for `columns.render`.
- *
- * The options defined here can be used with the `columns.render` initialisation
- * option to provide a display renderer. The following functions are defined:
- *
- * * `number` - Will format numeric data (defined by `columns.data`) for
- * display, retaining the original unformatted data for sorting and filtering.
- * It takes 5 parameters:
- * * `string` - Thousands grouping separator
- * * `string` - Decimal point indicator
- * * `integer` - Number of decimal points to show
- * * `string` (optional) - Prefix.
- * * `string` (optional) - Postfix (/suffix).
- * * `text` - Escape HTML to help prevent XSS attacks. It has no optional
- * parameters.
- *
- * @example
- * // Column definition using the number renderer
- * {
- * data: "salary",
- * render: $.fn.dataTable.render.number( '\'', '.', 0, '$' )
- * }
- *
- * @namespace
- */
- DataTable.render = {
- number: function ( thousands, decimal, precision, prefix, postfix ) {
- return {
- display: function ( d ) {
- if ( typeof d !== 'number' && typeof d !== 'string' ) {
- return d;
- }
-
- var negative = d < 0 ? '-' : '';
- var flo = parseFloat( d );
-
- // If NaN then there isn't much formatting that we can do - just
- // return immediately, escaping any HTML (this was supposed to
- // be a number after all)
- if ( isNaN( flo ) ) {
- return __htmlEscapeEntities( d );
- }
-
- d = Math.abs( flo );
-
- var intPart = parseInt( d, 10 );
- var floatPart = precision ?
- decimal+(d - intPart).toFixed( precision ).substring( 2 ):
- '';
-
- return negative + (prefix||'') +
- intPart.toString().replace(
- /\B(?=(\d{3})+(?!\d))/g, thousands
- ) +
- floatPart +
- (postfix||'');
- }
- };
- },
-
- text: function () {
- return {
- display: __htmlEscapeEntities
- };
- }
- };
-
-
- /*
- * This is really a good bit rubbish this method of exposing the internal methods
- * publicly... - To be fixed in 2.0 using methods on the prototype
- */
-
-
- /**
- * Create a wrapper function for exporting an internal functions to an external API.
- * @param {string} fn API function name
- * @returns {function} wrapped function
- * @memberof DataTable#internal
- */
- function _fnExternApiFunc (fn)
- {
- return function() {
- var args = [_fnSettingsFromNode( this[DataTable.ext.iApiIndex] )].concat(
- Array.prototype.slice.call(arguments)
- );
- return DataTable.ext.internal[fn].apply( this, args );
- };
- }
-
-
- /**
- * Reference to internal functions for use by plug-in developers. Note that
- * these methods are references to internal functions and are considered to be
- * private. If you use these methods, be aware that they are liable to change
- * between versions.
- * @namespace
- */
- $.extend( DataTable.ext.internal, {
- _fnExternApiFunc: _fnExternApiFunc,
- _fnBuildAjax: _fnBuildAjax,
- _fnAjaxUpdate: _fnAjaxUpdate,
- _fnAjaxParameters: _fnAjaxParameters,
- _fnAjaxUpdateDraw: _fnAjaxUpdateDraw,
- _fnAjaxDataSrc: _fnAjaxDataSrc,
- _fnAddColumn: _fnAddColumn,
- _fnColumnOptions: _fnColumnOptions,
- _fnAdjustColumnSizing: _fnAdjustColumnSizing,
- _fnVisibleToColumnIndex: _fnVisibleToColumnIndex,
- _fnColumnIndexToVisible: _fnColumnIndexToVisible,
- _fnVisbleColumns: _fnVisbleColumns,
- _fnGetColumns: _fnGetColumns,
- _fnColumnTypes: _fnColumnTypes,
- _fnApplyColumnDefs: _fnApplyColumnDefs,
- _fnHungarianMap: _fnHungarianMap,
- _fnCamelToHungarian: _fnCamelToHungarian,
- _fnLanguageCompat: _fnLanguageCompat,
- _fnBrowserDetect: _fnBrowserDetect,
- _fnAddData: _fnAddData,
- _fnAddTr: _fnAddTr,
- _fnNodeToDataIndex: _fnNodeToDataIndex,
- _fnNodeToColumnIndex: _fnNodeToColumnIndex,
- _fnGetCellData: _fnGetCellData,
- _fnSetCellData: _fnSetCellData,
- _fnSplitObjNotation: _fnSplitObjNotation,
- _fnGetObjectDataFn: _fnGetObjectDataFn,
- _fnSetObjectDataFn: _fnSetObjectDataFn,
- _fnGetDataMaster: _fnGetDataMaster,
- _fnClearTable: _fnClearTable,
- _fnDeleteIndex: _fnDeleteIndex,
- _fnInvalidate: _fnInvalidate,
- _fnGetRowElements: _fnGetRowElements,
- _fnCreateTr: _fnCreateTr,
- _fnBuildHead: _fnBuildHead,
- _fnDrawHead: _fnDrawHead,
- _fnDraw: _fnDraw,
- _fnReDraw: _fnReDraw,
- _fnAddOptionsHtml: _fnAddOptionsHtml,
- _fnDetectHeader: _fnDetectHeader,
- _fnGetUniqueThs: _fnGetUniqueThs,
- _fnFeatureHtmlFilter: _fnFeatureHtmlFilter,
- _fnFilterComplete: _fnFilterComplete,
- _fnFilterCustom: _fnFilterCustom,
- _fnFilterColumn: _fnFilterColumn,
- _fnFilter: _fnFilter,
- _fnFilterCreateSearch: _fnFilterCreateSearch,
- _fnEscapeRegex: _fnEscapeRegex,
- _fnFilterData: _fnFilterData,
- _fnFeatureHtmlInfo: _fnFeatureHtmlInfo,
- _fnUpdateInfo: _fnUpdateInfo,
- _fnInfoMacros: _fnInfoMacros,
- _fnInitialise: _fnInitialise,
- _fnInitComplete: _fnInitComplete,
- _fnLengthChange: _fnLengthChange,
- _fnFeatureHtmlLength: _fnFeatureHtmlLength,
- _fnFeatureHtmlPaginate: _fnFeatureHtmlPaginate,
- _fnPageChange: _fnPageChange,
- _fnFeatureHtmlProcessing: _fnFeatureHtmlProcessing,
- _fnProcessingDisplay: _fnProcessingDisplay,
- _fnFeatureHtmlTable: _fnFeatureHtmlTable,
- _fnScrollDraw: _fnScrollDraw,
- _fnApplyToChildren: _fnApplyToChildren,
- _fnCalculateColumnWidths: _fnCalculateColumnWidths,
- _fnThrottle: _fnThrottle,
- _fnConvertToWidth: _fnConvertToWidth,
- _fnGetWidestNode: _fnGetWidestNode,
- _fnGetMaxLenString: _fnGetMaxLenString,
- _fnStringToCss: _fnStringToCss,
- _fnSortFlatten: _fnSortFlatten,
- _fnSort: _fnSort,
- _fnSortAria: _fnSortAria,
- _fnSortListener: _fnSortListener,
- _fnSortAttachListener: _fnSortAttachListener,
- _fnSortingClasses: _fnSortingClasses,
- _fnSortData: _fnSortData,
- _fnSaveState: _fnSaveState,
- _fnLoadState: _fnLoadState,
- _fnSettingsFromNode: _fnSettingsFromNode,
- _fnLog: _fnLog,
- _fnMap: _fnMap,
- _fnBindAction: _fnBindAction,
- _fnCallbackReg: _fnCallbackReg,
- _fnCallbackFire: _fnCallbackFire,
- _fnLengthOverflow: _fnLengthOverflow,
- _fnRenderer: _fnRenderer,
- _fnDataSource: _fnDataSource,
- _fnRowAttributes: _fnRowAttributes,
- _fnCalculateEnd: function () {} // Used by a lot of plug-ins, but redundant
- // in 1.10, so this dead-end function is
- // added to prevent errors
- } );
-
-
- // jQuery access
- $.fn.dataTable = DataTable;
-
- // Provide access to the host jQuery object (circular reference)
- DataTable.$ = $;
-
- // Legacy aliases
- $.fn.dataTableSettings = DataTable.settings;
- $.fn.dataTableExt = DataTable.ext;
-
- // With a capital `D` we return a DataTables API instance rather than a
- // jQuery object
- $.fn.DataTable = function ( opts ) {
- return $(this).dataTable( opts ).api();
- };
-
- // All properties that are available to $.fn.dataTable should also be
- // available on $.fn.DataTable
- $.each( DataTable, function ( prop, val ) {
- $.fn.DataTable[ prop ] = val;
- } );
-
-
- // Information about events fired by DataTables - for documentation.
- /**
- * Draw event, fired whenever the table is redrawn on the page, at the same
- * point as fnDrawCallback. This may be useful for binding events or
- * performing calculations when the table is altered at all.
- * @name DataTable#draw.dt
- * @event
- * @param {event} e jQuery event object
- * @param {object} o DataTables settings object {@link DataTable.models.oSettings}
- */
-
- /**
- * Search event, fired when the searching applied to the table (using the
- * built-in global search, or column filters) is altered.
- * @name DataTable#search.dt
- * @event
- * @param {event} e jQuery event object
- * @param {object} o DataTables settings object {@link DataTable.models.oSettings}
- */
-
- /**
- * Page change event, fired when the paging of the table is altered.
- * @name DataTable#page.dt
- * @event
- * @param {event} e jQuery event object
- * @param {object} o DataTables settings object {@link DataTable.models.oSettings}
- */
-
- /**
- * Order event, fired when the ordering applied to the table is altered.
- * @name DataTable#order.dt
- * @event
- * @param {event} e jQuery event object
- * @param {object} o DataTables settings object {@link DataTable.models.oSettings}
- */
-
- /**
- * DataTables initialisation complete event, fired when the table is fully
- * drawn, including Ajax data loaded, if Ajax data is required.
- * @name DataTable#init.dt
- * @event
- * @param {event} e jQuery event object
- * @param {object} oSettings DataTables settings object
- * @param {object} json The JSON object request from the server - only
- * present if client-side Ajax sourced data is used</li></ol>
- */
-
- /**
- * State save event, fired when the table has changed state a new state save
- * is required. This event allows modification of the state saving object
- * prior to actually doing the save, including addition or other state
- * properties (for plug-ins) or modification of a DataTables core property.
- * @name DataTable#stateSaveParams.dt
- * @event
- * @param {event} e jQuery event object
- * @param {object} oSettings DataTables settings object
- * @param {object} json The state information to be saved
- */
-
- /**
- * State load event, fired when the table is loading state from the stored
- * data, but prior to the settings object being modified by the saved state
- * - allowing modification of the saved state is required or loading of
- * state for a plug-in.
- * @name DataTable#stateLoadParams.dt
- * @event
- * @param {event} e jQuery event object
- * @param {object} oSettings DataTables settings object
- * @param {object} json The saved state information
- */
-
- /**
- * State loaded event, fired when state has been loaded from stored data and
- * the settings object has been modified by the loaded data.
- * @name DataTable#stateLoaded.dt
- * @event
- * @param {event} e jQuery event object
- * @param {object} oSettings DataTables settings object
- * @param {object} json The saved state information
- */
-
- /**
- * Processing event, fired when DataTables is doing some kind of processing
- * (be it, order, searcg or anything else). It can be used to indicate to
- * the end user that there is something happening, or that something has
- * finished.
- * @name DataTable#processing.dt
- * @event
- * @param {event} e jQuery event object
- * @param {object} oSettings DataTables settings object
- * @param {boolean} bShow Flag for if DataTables is doing processing or not
- */
-
- /**
- * Ajax (XHR) event, fired whenever an Ajax request is completed from a
- * request to made to the server for new data. This event is called before
- * DataTables processed the returned data, so it can also be used to pre-
- * process the data returned from the server, if needed.
- *
- * Note that this trigger is called in `fnServerData`, if you override
- * `fnServerData` and which to use this event, you need to trigger it in you
- * success function.
- * @name DataTable#xhr.dt
- * @event
- * @param {event} e jQuery event object
- * @param {object} o DataTables settings object {@link DataTable.models.oSettings}
- * @param {object} json JSON returned from the server
- *
- * @example
- * // Use a custom property returned from the server in another DOM element
- * $('#table').dataTable().on('xhr.dt', function (e, settings, json) {
- * $('#status').html( json.status );
- * } );
- *
- * @example
- * // Pre-process the data returned from the server
- * $('#table').dataTable().on('xhr.dt', function (e, settings, json) {
- * for ( var i=0, ien=json.aaData.length ; i<ien ; i++ ) {
- * json.aaData[i].sum = json.aaData[i].one + json.aaData[i].two;
- * }
- * // Note no return - manipulate the data directly in the JSON object.
- * } );
- */
-
- /**
- * Destroy event, fired when the DataTable is destroyed by calling fnDestroy
- * or passing the bDestroy:true parameter in the initialisation object. This
- * can be used to remove bound events, added DOM nodes, etc.
- * @name DataTable#destroy.dt
- * @event
- * @param {event} e jQuery event object
- * @param {object} o DataTables settings object {@link DataTable.models.oSettings}
- */
-
- /**
- * Page length change event, fired when number of records to show on each
- * page (the length) is changed.
- * @name DataTable#length.dt
- * @event
- * @param {event} e jQuery event object
- * @param {object} o DataTables settings object {@link DataTable.models.oSettings}
- * @param {integer} len New length
- */
-
- /**
- * Column sizing has changed.
- * @name DataTable#column-sizing.dt
- * @event
- * @param {event} e jQuery event object
- * @param {object} o DataTables settings object {@link DataTable.models.oSettings}
- */
-
- /**
- * Column visibility has changed.
- * @name DataTable#column-visibility.dt
- * @event
- * @param {event} e jQuery event object
- * @param {object} o DataTables settings object {@link DataTable.models.oSettings}
- * @param {int} column Column index
- * @param {bool} vis `false` if column now hidden, or `true` if visible
- */
-
- return $.fn.dataTable;
-}));
diff --git a/wqflask/wqflask/static/new/packages/DataTables/js/jquery.dataTables.min.js b/wqflask/wqflask/static/new/packages/DataTables/js/jquery.dataTables.min.js
deleted file mode 100644
index f1277251..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/js/jquery.dataTables.min.js
+++ /dev/null
@@ -1,166 +0,0 @@
-/*!
- DataTables 1.10.12
- ©2008-2015 SpryMedia Ltd - datatables.net/license
-*/
-(function(h){"function"===typeof define&&define.amd?define(["jquery"],function(D){return h(D,window,document)}):"object"===typeof exports?module.exports=function(D,I){D||(D=window);I||(I="undefined"!==typeof window?require("jquery"):require("jquery")(D));return h(I,D,D.document)}:h(jQuery,window,document)})(function(h,D,I,k){function X(a){var b,c,d={};h.each(a,function(e){if((b=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(b[1]+" "))c=e.replace(b[0],b[2].toLowerCase()),
-d[c]=e,"o"===b[1]&&X(a[e])});a._hungarianMap=d}function K(a,b,c){a._hungarianMap||X(a);var d;h.each(b,function(e){d=a._hungarianMap[e];if(d!==k&&(c||b[d]===k))"o"===d.charAt(0)?(b[d]||(b[d]={}),h.extend(!0,b[d],b[e]),K(a[d],b[d],c)):b[d]=b[e]})}function Da(a){var b=m.defaults.oLanguage,c=a.sZeroRecords;!a.sEmptyTable&&(c&&"No data available in table"===b.sEmptyTable)&&E(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&(c&&"Loading..."===b.sLoadingRecords)&&E(a,a,"sZeroRecords","sLoadingRecords");
-a.sInfoThousands&&(a.sThousands=a.sInfoThousands);(a=a.sDecimal)&&db(a)}function eb(a){A(a,"ordering","bSort");A(a,"orderMulti","bSortMulti");A(a,"orderClasses","bSortClasses");A(a,"orderCellsTop","bSortCellsTop");A(a,"order","aaSorting");A(a,"orderFixed","aaSortingFixed");A(a,"paging","bPaginate");A(a,"pagingType","sPaginationType");A(a,"pageLength","iDisplayLength");A(a,"searching","bFilter");"boolean"===typeof a.sScrollX&&(a.sScrollX=a.sScrollX?"100%":"");"boolean"===typeof a.scrollX&&(a.scrollX=
-a.scrollX?"100%":"");if(a=a.aoSearchCols)for(var b=0,c=a.length;b<c;b++)a[b]&&K(m.models.oSearch,a[b])}function fb(a){A(a,"orderable","bSortable");A(a,"orderData","aDataSort");A(a,"orderSequence","asSorting");A(a,"orderDataType","sortDataType");var b=a.aDataSort;b&&!h.isArray(b)&&(a.aDataSort=[b])}function gb(a){if(!m.__browser){var b={};m.__browser=b;var c=h("<div/>").css({position:"fixed",top:0,left:0,height:1,width:1,overflow:"hidden"}).append(h("<div/>").css({position:"absolute",top:1,left:1,
-width:100,overflow:"scroll"}).append(h("<div/>").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}h.extend(a.oBrowser,m.__browser);a.oScroll.iBarWidth=m.__browser.barWidth}function hb(a,b,c,d,e,f){var g,j=!1;c!==k&&(g=c,j=!0);for(;d!==e;)a.hasOwnProperty(d)&&
-(g=j?b(g,a[d],d,a):a[d],j=!0,d+=f);return g}function Ea(a,b){var c=m.defaults.column,d=a.aoColumns.length,c=h.extend({},m.models.oColumn,c,{nTh:b?b:I.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=h.extend({},m.models.oSearch,c[d]);ja(a,d,h(b).data())}function ja(a,b,c){var b=a.aoColumns[b],d=a.oClasses,e=h(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var f=
-(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);f&&(b.sWidthOrig=f[1])}c!==k&&null!==c&&(fb(c),K(m.defaults.column,c),c.mDataProp!==k&&!c.mData&&(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),h.extend(b,c),E(b,c,"sWidth","sWidthOrig"),c.iDataSort!==k&&(b.aDataSort=[c.iDataSort]),E(b,c,"aDataSort"));var g=b.mData,j=Q(g),i=b.mRender?Q(b.mRender):null,c=function(a){return"string"===typeof a&&-1!==a.indexOf("@")};b._bAttrSrc=h.isPlainObject(g)&&
-(c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(a,b,c){var d=j(a,b,k,c);return i&&b?i(d,b,a,c):d};b.fnSetData=function(a,b,c){return R(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==h.inArray("asc",b.asSorting);c=-1!==h.inArray("desc",b.asSorting);!b.bSortable||!a&&!c?(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI=""):a&&!c?(b.sSortingClass=d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):
-!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI)}function Y(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Fa(a);for(var c=0,d=b.length;c<d;c++)b[c].nTh.style.width=b[c].sWidth}b=a.oScroll;(""!==b.sY||""!==b.sX)&&ka(a);u(a,null,"column-sizing",[a])}function Z(a,b){var c=la(a,"bVisible");return"number"===typeof c[b]?c[b]:null}function $(a,b){var c=la(a,"bVisible"),c=h.inArray(b,c);return-1!==c?c:null}
-function aa(a){var b=0;h.each(a.aoColumns,function(a,d){d.bVisible&&"none"!==h(d.nTh).css("display")&&b++});return b}function la(a,b){var c=[];h.map(a.aoColumns,function(a,e){a[b]&&c.push(e)});return c}function Ga(a){var b=a.aoColumns,c=a.aoData,d=m.ext.type.detect,e,f,g,j,i,h,l,q,t;e=0;for(f=b.length;e<f;e++)if(l=b[e],t=[],!l.sType&&l._sManualType)l.sType=l._sManualType;else if(!l.sType){g=0;for(j=d.length;g<j;g++){i=0;for(h=c.length;i<h;i++){t[i]===k&&(t[i]=B(a,i,e,"type"));q=d[g](t[i],a);if(!q&&
-g!==d.length-1)break;if("html"===q)break}if(q){l.sType=q;break}}l.sType||(l.sType="string")}}function ib(a,b,c,d){var e,f,g,j,i,n,l=a.aoColumns;if(b)for(e=b.length-1;0<=e;e--){n=b[e];var q=n.targets!==k?n.targets:n.aTargets;h.isArray(q)||(q=[q]);f=0;for(g=q.length;f<g;f++)if("number"===typeof q[f]&&0<=q[f]){for(;l.length<=q[f];)Ea(a);d(q[f],n)}else if("number"===typeof q[f]&&0>q[f])d(l.length+q[f],n);else if("string"===typeof q[f]){j=0;for(i=l.length;j<i;j++)("_all"==q[f]||h(l[j].nTh).hasClass(q[f]))&&
-d(j,n)}}if(c){e=0;for(a=c.length;e<a;e++)d(e,c[e])}}function N(a,b,c,d){var e=a.aoData.length,f=h.extend(!0,{},m.models.oRow,{src:c?"dom":"data",idx:e});f._aData=b;a.aoData.push(f);for(var g=a.aoColumns,j=0,i=g.length;j<i;j++)g[j].sType=null;a.aiDisplayMaster.push(e);b=a.rowIdFn(b);b!==k&&(a.aIds[b]=f);(c||!a.oFeatures.bDeferRender)&&Ha(a,e,c,d);return e}function ma(a,b){var c;b instanceof h||(b=h(b));return b.map(function(b,e){c=Ia(a,e);return N(a,c.data,e,c.cells)})}function B(a,b,c,d){var e=a.iDraw,
-f=a.aoColumns[c],g=a.aoData[b]._aData,j=f.sDefaultContent,i=f.fnGetData(g,d,{settings:a,row:b,col:c});if(i===k)return a.iDrawError!=e&&null===j&&(L(a,0,"Requested unknown parameter "+("function"==typeof f.mData?"{function}":"'"+f.mData+"'")+" for row "+b+", column "+c,4),a.iDrawError=e),j;if((i===g||null===i)&&null!==j&&d!==k)i=j;else if("function"===typeof i)return i.call(g);return null===i&&"display"==d?"":i}function jb(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d,{settings:a,row:b,col:c})}
-function Ja(a){return h.map(a.match(/(\\.|[^\.])+/g)||[""],function(a){return a.replace(/\\./g,".")})}function Q(a){if(h.isPlainObject(a)){var b={};h.each(a,function(a,c){c&&(b[a]=Q(c))});return function(a,c,f,g){var j=b[c]||b._;return j!==k?j(a,c,f,g):a}}if(null===a)return function(a){return a};if("function"===typeof a)return function(b,c,f,g){return a(b,c,f,g)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var c=function(a,b,f){var g,j;if(""!==f){j=Ja(f);
-for(var i=0,n=j.length;i<n;i++){f=j[i].match(ba);g=j[i].match(U);if(f){j[i]=j[i].replace(ba,"");""!==j[i]&&(a=a[j[i]]);g=[];j.splice(0,i+1);j=j.join(".");if(h.isArray(a)){i=0;for(n=a.length;i<n;i++)g.push(c(a[i],b,j))}a=f[0].substring(1,f[0].length-1);a=""===a?g:g.join(a);break}else if(g){j[i]=j[i].replace(U,"");a=a[j[i]]();continue}if(null===a||a[j[i]]===k)return k;a=a[j[i]]}}return a};return function(b,e){return c(b,e,a)}}return function(b){return b[a]}}function R(a){if(h.isPlainObject(a))return R(a._);
-if(null===a)return function(){};if("function"===typeof a)return function(b,d,e){a(b,"set",d,e)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var b=function(a,d,e){var e=Ja(e),f;f=e[e.length-1];for(var g,j,i=0,n=e.length-1;i<n;i++){g=e[i].match(ba);j=e[i].match(U);if(g){e[i]=e[i].replace(ba,"");a[e[i]]=[];f=e.slice();f.splice(0,i+1);g=f.join(".");if(h.isArray(d)){j=0;for(n=d.length;j<n;j++)f={},b(f,d[j],g),a[e[i]].push(f)}else a[e[i]]=d;return}j&&(e[i]=e[i].replace(U,
-""),a=a[e[i]](d));if(null===a[e[i]]||a[e[i]]===k)a[e[i]]={};a=a[e[i]]}if(f.match(U))a[f.replace(U,"")](d);else a[f.replace(ba,"")]=d};return function(c,d){return b(c,d,a)}}return function(b,d){b[a]=d}}function Ka(a){return G(a.aoData,"_aData")}function na(a){a.aoData.length=0;a.aiDisplayMaster.length=0;a.aiDisplay.length=0;a.aIds={}}function oa(a,b,c){for(var d=-1,e=0,f=a.length;e<f;e++)a[e]==b?d=e:a[e]>b&&a[e]--; -1!=d&&c===k&&a.splice(d,1)}function ca(a,b,c,d){var e=a.aoData[b],f,g=function(c,d){for(;c.childNodes.length;)c.removeChild(c.firstChild);
-c.innerHTML=B(a,b,d,"display")};if("dom"===c||(!c||"auto"===c)&&"dom"===e.src)e._aData=Ia(a,e,d,d===k?k:e._aData).data;else{var j=e.anCells;if(j)if(d!==k)g(j[d],d);else{c=0;for(f=j.length;c<f;c++)g(j[c],c)}}e._aSortData=null;e._aFilterData=null;g=a.aoColumns;if(d!==k)g[d].sType=null;else{c=0;for(f=g.length;c<f;c++)g[c].sType=null;La(a,e)}}function Ia(a,b,c,d){var e=[],f=b.firstChild,g,j,i=0,n,l=a.aoColumns,q=a._rowReadObject,d=d!==k?d:q?{}:[],t=function(a,b){if("string"===typeof a){var c=a.indexOf("@");
--1!==c&&(c=a.substring(c+1),R(a)(d,b.getAttribute(c)))}},S=function(a){if(c===k||c===i)j=l[i],n=h.trim(a.innerHTML),j&&j._bAttrSrc?(R(j.mData._)(d,n),t(j.mData.sort,a),t(j.mData.type,a),t(j.mData.filter,a)):q?(j._setter||(j._setter=R(j.mData)),j._setter(d,n)):d[i]=n;i++};if(f)for(;f;){g=f.nodeName.toUpperCase();if("TD"==g||"TH"==g)S(f),e.push(f);f=f.nextSibling}else{e=b.anCells;f=0;for(g=e.length;f<g;f++)S(e[f])}if(b=b.firstChild?b:b.nTr)(b=b.getAttribute("id"))&&R(a.rowId)(d,b);return{data:d,cells:e}}
-function Ha(a,b,c,d){var e=a.aoData[b],f=e._aData,g=[],j,i,n,l,q;if(null===e.nTr){j=c||I.createElement("tr");e.nTr=j;e.anCells=g;j._DT_RowIndex=b;La(a,e);l=0;for(q=a.aoColumns.length;l<q;l++){n=a.aoColumns[l];i=c?d[l]:I.createElement(n.sCellType);i._DT_CellIndex={row:b,column:l};g.push(i);if((!c||n.mRender||n.mData!==l)&&(!h.isPlainObject(n.mData)||n.mData._!==l+".display"))i.innerHTML=B(a,b,l,"display");n.sClass&&(i.className+=" "+n.sClass);n.bVisible&&!c?j.appendChild(i):!n.bVisible&&c&&i.parentNode.removeChild(i);
-n.fnCreatedCell&&n.fnCreatedCell.call(a.oInstance,i,B(a,b,l),f,b,l)}u(a,"aoRowCreatedCallback",null,[j,f,b])}e.nTr.setAttribute("role","row")}function La(a,b){var c=b.nTr,d=b._aData;if(c){var e=a.rowIdFn(d);e&&(c.id=e);d.DT_RowClass&&(e=d.DT_RowClass.split(" "),b.__rowc=b.__rowc?pa(b.__rowc.concat(e)):e,h(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));d.DT_RowAttr&&h(c).attr(d.DT_RowAttr);d.DT_RowData&&h(c).data(d.DT_RowData)}}function kb(a){var b,c,d,e,f,g=a.nTHead,j=a.nTFoot,i=0===
-h("th, td",g).length,n=a.oClasses,l=a.aoColumns;i&&(e=h("<tr/>").appendTo(g));b=0;for(c=l.length;b<c;b++)f=l[b],d=h(f.nTh).addClass(f.sClass),i&&d.appendTo(e),a.oFeatures.bSort&&(d.addClass(f.sSortingClass),!1!==f.bSortable&&(d.attr("tabindex",a.iTabIndex).attr("aria-controls",a.sTableId),Ma(a,f.nTh,b))),f.sTitle!=d[0].innerHTML&&d.html(f.sTitle),Na(a,"header")(a,d,f,n);i&&da(a.aoHeader,g);h(g).find(">tr").attr("role","row");h(g).find(">tr>th, >tr>td").addClass(n.sHeaderTH);h(j).find(">tr>th, >tr>td").addClass(n.sFooterTH);
-if(null!==j){a=a.aoFooter[0];b=0;for(c=a.length;b<c;b++)f=l[b],f.nTf=a[b].cell,f.sClass&&h(f.nTf).addClass(f.sClass)}}function ea(a,b,c){var d,e,f,g=[],j=[],i=a.aoColumns.length,n;if(b){c===k&&(c=!1);d=0;for(e=b.length;d<e;d++){g[d]=b[d].slice();g[d].nTr=b[d].nTr;for(f=i-1;0<=f;f--)!a.aoColumns[f].bVisible&&!c&&g[d].splice(f,1);j.push([])}d=0;for(e=g.length;d<e;d++){if(a=g[d].nTr)for(;f=a.firstChild;)a.removeChild(f);f=0;for(b=g[d].length;f<b;f++)if(n=i=1,j[d][f]===k){a.appendChild(g[d][f].cell);
-for(j[d][f]=1;g[d+i]!==k&&g[d][f].cell==g[d+i][f].cell;)j[d+i][f]=1,i++;for(;g[d][f+n]!==k&&g[d][f].cell==g[d][f+n].cell;){for(c=0;c<i;c++)j[d+c][f+n]=1;n++}h(g[d][f].cell).attr("rowspan",i).attr("colspan",n)}}}}function O(a){var b=u(a,"aoPreDrawCallback","preDraw",[a]);if(-1!==h.inArray(!1,b))C(a,!1);else{var b=[],c=0,d=a.asStripeClasses,e=d.length,f=a.oLanguage,g=a.iInitDisplayStart,j="ssp"==y(a),i=a.aiDisplay;a.bDrawing=!0;g!==k&&-1!==g&&(a._iDisplayStart=j?g:g>=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart=
--1);var g=a._iDisplayStart,n=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,C(a,!1);else if(j){if(!a.bDestroying&&!lb(a))return}else a.iDraw++;if(0!==i.length){f=j?a.aoData.length:n;for(j=j?0:g;j<f;j++){var l=i[j],q=a.aoData[l];null===q.nTr&&Ha(a,l);l=q.nTr;if(0!==e){var t=d[c%e];q._sRowStripe!=t&&(h(l).removeClass(q._sRowStripe).addClass(t),q._sRowStripe=t)}u(a,"aoRowCallback",null,[l,q._aData,c,j]);b.push(l);c++}}else c=f.sZeroRecords,1==a.iDraw&&"ajax"==y(a)?c=f.sLoadingRecords:
-f.sEmptyTable&&0===a.fnRecordsTotal()&&(c=f.sEmptyTable),b[0]=h("<tr/>",{"class":e?d[0]:""}).append(h("<td />",{valign:"top",colSpan:aa(a),"class":a.oClasses.sRowEmpty}).html(c))[0];u(a,"aoHeaderCallback","header",[h(a.nTHead).children("tr")[0],Ka(a),g,n,i]);u(a,"aoFooterCallback","footer",[h(a.nTFoot).children("tr")[0],Ka(a),g,n,i]);d=h(a.nTBody);d.children().detach();d.append(h(b));u(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function T(a,b){var c=a.oFeatures,d=c.bFilter;
-c.bSort&&mb(a);d?fa(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;O(a);a._drawHold=!1}function nb(a){var b=a.oClasses,c=h(a.nTable),c=h("<div/>").insertBefore(c),d=a.oFeatures,e=h("<div/>",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var f=a.sDom.split(""),g,j,i,n,l,q,t=0;t<f.length;t++){g=null;j=f[t];if("<"==j){i=h("<div/>")[0];
-n=f[t+1];if("'"==n||'"'==n){l="";for(q=2;f[t+q]!=n;)l+=f[t+q],q++;"H"==l?l=b.sJUIHeader:"F"==l&&(l=b.sJUIFooter);-1!=l.indexOf(".")?(n=l.split("."),i.id=n[0].substr(1,n[0].length-1),i.className=n[1]):"#"==l.charAt(0)?i.id=l.substr(1,l.length-1):i.className=l;t+=q}e.append(i);e=h(i)}else if(">"==j)e=e.parent();else if("l"==j&&d.bPaginate&&d.bLengthChange)g=ob(a);else if("f"==j&&d.bFilter)g=pb(a);else if("r"==j&&d.bProcessing)g=qb(a);else if("t"==j)g=rb(a);else if("i"==j&&d.bInfo)g=sb(a);else if("p"==
-j&&d.bPaginate)g=tb(a);else if(0!==m.ext.feature.length){i=m.ext.feature;q=0;for(n=i.length;q<n;q++)if(j==i[q].cFeature){g=i[q].fnInit(a);break}}g&&(i=a.aanFeatures,i[j]||(i[j]=[]),i[j].push(g),e.append(g))}c.replaceWith(e);a.nHolding=null}function da(a,b){var c=h(b).children("tr"),d,e,f,g,j,i,n,l,q,t;a.splice(0,a.length);f=0;for(i=c.length;f<i;f++)a.push([]);f=0;for(i=c.length;f<i;f++){d=c[f];for(e=d.firstChild;e;){if("TD"==e.nodeName.toUpperCase()||"TH"==e.nodeName.toUpperCase()){l=1*e.getAttribute("colspan");
-q=1*e.getAttribute("rowspan");l=!l||0===l||1===l?1:l;q=!q||0===q||1===q?1:q;g=0;for(j=a[f];j[g];)g++;n=g;t=1===l?!0:!1;for(j=0;j<l;j++)for(g=0;g<q;g++)a[f+g][n+j]={cell:e,unique:t},a[f+g].nTr=d}e=e.nextSibling}}}function qa(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],da(c,b)));for(var b=0,e=c.length;b<e;b++)for(var f=0,g=c[b].length;f<g;f++)if(c[b][f].unique&&(!d[f]||!a.bSortCellsTop))d[f]=c[b][f].cell;return d}function ra(a,b,c){u(a,"aoServerParams","serverParams",[b]);if(b&&h.isArray(b)){var d={},
-e=/(.*?)\[\]$/;h.each(b,function(a,b){var c=b.name.match(e);c?(c=c[0],d[c]||(d[c]=[]),d[c].push(b.value)):d[b.name]=b.value});b=d}var f,g=a.ajax,j=a.oInstance,i=function(b){u(a,null,"xhr",[a,b,a.jqXHR]);c(b)};if(h.isPlainObject(g)&&g.data){f=g.data;var n=h.isFunction(f)?f(b,a):f,b=h.isFunction(f)&&n?n:h.extend(!0,b,n);delete g.data}n={data:b,success:function(b){var c=b.error||b.sError;c&&L(a,0,c);a.json=b;i(b)},dataType:"json",cache:!1,type:a.sServerMethod,error:function(b,c){var d=u(a,null,"xhr",
-[a,null,a.jqXHR]);-1===h.inArray(!0,d)&&("parsererror"==c?L(a,0,"Invalid JSON response",1):4===b.readyState&&L(a,0,"Ajax error",7));C(a,!1)}};a.oAjaxData=b;u(a,null,"preXhr",[a,b]);a.fnServerData?a.fnServerData.call(j,a.sAjaxSource,h.map(b,function(a,b){return{name:b,value:a}}),i,a):a.sAjaxSource||"string"===typeof g?a.jqXHR=h.ajax(h.extend(n,{url:g||a.sAjaxSource})):h.isFunction(g)?a.jqXHR=g.call(j,b,i,a):(a.jqXHR=h.ajax(h.extend(n,g)),g.data=f)}function lb(a){return a.bAjaxDataGet?(a.iDraw++,C(a,
-!0),ra(a,ub(a),function(b){vb(a,b)}),!1):!0}function ub(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousSearch,f=a.aoPreSearchCols,g,j=[],i,n,l,q=V(a);g=a._iDisplayStart;i=!1!==d.bPaginate?a._iDisplayLength:-1;var k=function(a,b){j.push({name:a,value:b})};k("sEcho",a.iDraw);k("iColumns",c);k("sColumns",G(b,"sName").join(","));k("iDisplayStart",g);k("iDisplayLength",i);var S={draw:a.iDraw,columns:[],order:[],start:g,length:i,search:{value:e.sSearch,regex:e.bRegex}};for(g=0;g<c;g++)n=b[g],
-l=f[g],i="function"==typeof n.mData?"function":n.mData,S.columns.push({data:i,name:n.sName,searchable:n.bSearchable,orderable:n.bSortable,search:{value:l.sSearch,regex:l.bRegex}}),k("mDataProp_"+g,i),d.bFilter&&(k("sSearch_"+g,l.sSearch),k("bRegex_"+g,l.bRegex),k("bSearchable_"+g,n.bSearchable)),d.bSort&&k("bSortable_"+g,n.bSortable);d.bFilter&&(k("sSearch",e.sSearch),k("bRegex",e.bRegex));d.bSort&&(h.each(q,function(a,b){S.order.push({column:b.col,dir:b.dir});k("iSortCol_"+a,b.col);k("sSortDir_"+
-a,b.dir)}),k("iSortingCols",q.length));b=m.ext.legacy.ajax;return null===b?a.sAjaxSource?j:S:b?j:S}function vb(a,b){var c=sa(a,b),d=b.sEcho!==k?b.sEcho:b.draw,e=b.iTotalRecords!==k?b.iTotalRecords:b.recordsTotal,f=b.iTotalDisplayRecords!==k?b.iTotalDisplayRecords:b.recordsFiltered;if(d){if(1*d<a.iDraw)return;a.iDraw=1*d}na(a);a._iRecordsTotal=parseInt(e,10);a._iRecordsDisplay=parseInt(f,10);d=0;for(e=c.length;d<e;d++)N(a,c[d]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;O(a);a._bInitComplete||
-ta(a,b);a.bAjaxDataGet=!0;C(a,!1)}function sa(a,b){var c=h.isPlainObject(a.ajax)&&a.ajax.dataSrc!==k?a.ajax.dataSrc:a.sAjaxDataProp;return"data"===c?b.aaData||b[c]:""!==c?Q(c)(b):b}function pb(a){var b=a.oClasses,c=a.sTableId,d=a.oLanguage,e=a.oPreviousSearch,f=a.aanFeatures,g='<input type="search" class="'+b.sFilterInput+'"/>',j=d.sSearch,j=j.match(/_INPUT_/)?j.replace("_INPUT_",g):j+g,b=h("<div/>",{id:!f.f?c+"_filter":null,"class":b.sFilter}).append(h("<label/>").append(j)),f=function(){var b=!this.value?
-"":this.value;b!=e.sSearch&&(fa(a,{sSearch:b,bRegex:e.bRegex,bSmart:e.bSmart,bCaseInsensitive:e.bCaseInsensitive}),a._iDisplayStart=0,O(a))},g=null!==a.searchDelay?a.searchDelay:"ssp"===y(a)?400:0,i=h("input",b).val(e.sSearch).attr("placeholder",d.sSearchPlaceholder).bind("keyup.DT search.DT input.DT paste.DT cut.DT",g?Oa(f,g):f).bind("keypress.DT",function(a){if(13==a.keyCode)return!1}).attr("aria-controls",c);h(a.nTable).on("search.dt.DT",function(b,c){if(a===c)try{i[0]!==I.activeElement&&i.val(e.sSearch)}catch(d){}});
-return b[0]}function fa(a,b,c){var d=a.oPreviousSearch,e=a.aoPreSearchCols,f=function(a){d.sSearch=a.sSearch;d.bRegex=a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive};Ga(a);if("ssp"!=y(a)){wb(a,b.sSearch,c,b.bEscapeRegex!==k?!b.bEscapeRegex:b.bRegex,b.bSmart,b.bCaseInsensitive);f(b);for(b=0;b<e.length;b++)xb(a,e[b].sSearch,b,e[b].bEscapeRegex!==k?!e[b].bEscapeRegex:e[b].bRegex,e[b].bSmart,e[b].bCaseInsensitive);yb(a)}else f(b);a.bFiltered=!0;u(a,null,"search",[a])}function yb(a){for(var b=
-m.ext.search,c=a.aiDisplay,d,e,f=0,g=b.length;f<g;f++){for(var j=[],i=0,n=c.length;i<n;i++)e=c[i],d=a.aoData[e],b[f](a,d._aFilterData,e,d._aData,i)&&j.push(e);c.length=0;h.merge(c,j)}}function xb(a,b,c,d,e,f){if(""!==b)for(var g=a.aiDisplay,d=Pa(b,d,e,f),e=g.length-1;0<=e;e--)b=a.aoData[g[e]]._aFilterData[c],d.test(b)||g.splice(e,1)}function wb(a,b,c,d,e,f){var d=Pa(b,d,e,f),e=a.oPreviousSearch.sSearch,f=a.aiDisplayMaster,g;0!==m.ext.search.length&&(c=!0);g=zb(a);if(0>=b.length)a.aiDisplay=f.slice();
-else{if(g||c||e.length>b.length||0!==b.indexOf(e)||a.bSorted)a.aiDisplay=f.slice();b=a.aiDisplay;for(c=b.length-1;0<=c;c--)d.test(a.aoData[b[c]]._sFilterRow)||b.splice(c,1)}}function Pa(a,b,c,d){a=b?a:Qa(a);c&&(a="^(?=.*?"+h.map(a.match(/"[^"]+"|[^ ]+/g)||[""],function(a){if('"'===a.charAt(0))var b=a.match(/^"(.*)"$/),a=b?b[1]:a;return a.replace('"',"")}).join(")(?=.*?")+").*$");return RegExp(a,d?"i":"")}function zb(a){var b=a.aoColumns,c,d,e,f,g,j,i,h,l=m.ext.type.search;c=!1;d=0;for(f=a.aoData.length;d<
-f;d++)if(h=a.aoData[d],!h._aFilterData){j=[];e=0;for(g=b.length;e<g;e++)c=b[e],c.bSearchable?(i=B(a,d,e,"filter"),l[c.sType]&&(i=l[c.sType](i)),null===i&&(i=""),"string"!==typeof i&&i.toString&&(i=i.toString())):i="",i.indexOf&&-1!==i.indexOf("&")&&(ua.innerHTML=i,i=Zb?ua.textContent:ua.innerText),i.replace&&(i=i.replace(/[\r\n]/g,"")),j.push(i);h._aFilterData=j;h._sFilterRow=j.join(" ");c=!0}return c}function Ab(a){return{search:a.sSearch,smart:a.bSmart,regex:a.bRegex,caseInsensitive:a.bCaseInsensitive}}
-function Bb(a){return{sSearch:a.search,bSmart:a.smart,bRegex:a.regex,bCaseInsensitive:a.caseInsensitive}}function sb(a){var b=a.sTableId,c=a.aanFeatures.i,d=h("<div/>",{"class":a.oClasses.sInfo,id:!c?b+"_info":null});c||(a.aoDrawCallback.push({fn:Cb,sName:"information"}),d.attr("role","status").attr("aria-live","polite"),h(a.nTable).attr("aria-describedby",b+"_info"));return d[0]}function Cb(a){var b=a.aanFeatures.i;if(0!==b.length){var c=a.oLanguage,d=a._iDisplayStart+1,e=a.fnDisplayEnd(),f=a.fnRecordsTotal(),
-g=a.fnRecordsDisplay(),j=g?c.sInfo:c.sInfoEmpty;g!==f&&(j+=" "+c.sInfoFiltered);j+=c.sInfoPostFix;j=Db(a,j);c=c.fnInfoCallback;null!==c&&(j=c.call(a.oInstance,a,d,e,f,g,j));h(b).html(j)}}function Db(a,b){var c=a.fnFormatNumber,d=a._iDisplayStart+1,e=a._iDisplayLength,f=a.fnRecordsDisplay(),g=-1===e;return b.replace(/_START_/g,c.call(a,d)).replace(/_END_/g,c.call(a,a.fnDisplayEnd())).replace(/_MAX_/g,c.call(a,a.fnRecordsTotal())).replace(/_TOTAL_/g,c.call(a,f)).replace(/_PAGE_/g,c.call(a,g?1:Math.ceil(d/
-e))).replace(/_PAGES_/g,c.call(a,g?1:Math.ceil(f/e)))}function ga(a){var b,c,d=a.iInitDisplayStart,e=a.aoColumns,f;c=a.oFeatures;var g=a.bDeferLoading;if(a.bInitialised){nb(a);kb(a);ea(a,a.aoHeader);ea(a,a.aoFooter);C(a,!0);c.bAutoWidth&&Fa(a);b=0;for(c=e.length;b<c;b++)f=e[b],f.sWidth&&(f.nTh.style.width=x(f.sWidth));u(a,null,"preInit",[a]);T(a);e=y(a);if("ssp"!=e||g)"ajax"==e?ra(a,[],function(c){var f=sa(a,c);for(b=0;b<f.length;b++)N(a,f[b]);a.iInitDisplayStart=d;T(a);C(a,!1);ta(a,c)},a):(C(a,!1),
-ta(a))}else setTimeout(function(){ga(a)},200)}function ta(a,b){a._bInitComplete=!0;(b||a.oInit.aaData)&&Y(a);u(a,null,"plugin-init",[a,b]);u(a,"aoInitComplete","init",[a,b])}function Ra(a,b){var c=parseInt(b,10);a._iDisplayLength=c;Sa(a);u(a,null,"length",[a,c])}function ob(a){for(var b=a.oClasses,c=a.sTableId,d=a.aLengthMenu,e=h.isArray(d[0]),f=e?d[0]:d,d=e?d[1]:d,e=h("<select/>",{name:c+"_length","aria-controls":c,"class":b.sLengthSelect}),g=0,j=f.length;g<j;g++)e[0][g]=new Option(d[g],f[g]);var i=
-h("<div><label/></div>").addClass(b.sLength);a.aanFeatures.l||(i[0].id=c+"_length");i.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",e[0].outerHTML));h("select",i).val(a._iDisplayLength).bind("change.DT",function(){Ra(a,h(this).val());O(a)});h(a.nTable).bind("length.dt.DT",function(b,c,d){a===c&&h("select",i).val(d)});return i[0]}function tb(a){var b=a.sPaginationType,c=m.ext.pager[b],d="function"===typeof c,e=function(a){O(a)},b=h("<div/>").addClass(a.oClasses.sPaging+b)[0],f=a.aanFeatures;
-d||c.fnInit(a,b,e);f.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,i=a._iDisplayLength,h=a.fnRecordsDisplay(),l=-1===i,b=l?0:Math.ceil(b/i),i=l?1:Math.ceil(h/i),h=c(b,i),k,l=0;for(k=f.p.length;l<k;l++)Na(a,"pageButton")(a,f.p[l],l,h,b,i)}else c.fnUpdate(a,e)},sName:"pagination"}));return b}function Ta(a,b,c){var d=a._iDisplayStart,e=a._iDisplayLength,f=a.fnRecordsDisplay();0===f||-1===e?d=0:"number"===typeof b?(d=b*e,d>f&&(d=0)):"first"==b?d=0:
-"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e<f&&(d+=e):"last"==b?d=Math.floor((f-1)/e)*e:L(a,0,"Unknown paging action: "+b,5);b=a._iDisplayStart!==d;a._iDisplayStart=d;b&&(u(a,null,"page",[a]),c&&O(a));return b}function qb(a){return h("<div/>",{id:!a.aanFeatures.r?a.sTableId+"_processing":null,"class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function C(a,b){a.oFeatures.bProcessing&&h(a.aanFeatures.r).css("display",b?"block":"none");u(a,null,"processing",
-[a,b])}function rb(a){var b=h(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,f=a.oClasses,g=b.children("caption"),j=g.length?g[0]._captionSide:null,i=h(b[0].cloneNode(!1)),n=h(b[0].cloneNode(!1)),l=b.children("tfoot");l.length||(l=null);i=h("<div/>",{"class":f.sScrollWrapper}).append(h("<div/>",{"class":f.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?!d?null:x(d):"100%"}).append(h("<div/>",{"class":f.sScrollHeadInner}).css({"box-sizing":"content-box",
-width:c.sXInner||"100%"}).append(i.removeAttr("id").css("margin-left",0).append("top"===j?g:null).append(b.children("thead"))))).append(h("<div/>",{"class":f.sScrollBody}).css({position:"relative",overflow:"auto",width:!d?null:x(d)}).append(b));l&&i.append(h("<div/>",{"class":f.sScrollFoot}).css({overflow:"hidden",border:0,width:d?!d?null:x(d):"100%"}).append(h("<div/>",{"class":f.sScrollFootInner}).append(n.removeAttr("id").css("margin-left",0).append("bottom"===j?g:null).append(b.children("tfoot")))));
-var b=i.children(),k=b[0],f=b[1],t=l?b[2]:null;if(d)h(f).on("scroll.DT",function(){var a=this.scrollLeft;k.scrollLeft=a;l&&(t.scrollLeft=a)});h(f).css(e&&c.bCollapse?"max-height":"height",e);a.nScrollHead=k;a.nScrollBody=f;a.nScrollFoot=t;a.aoDrawCallback.push({fn:ka,sName:"scrolling"});return i[0]}function ka(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY,b=b.iBarWidth,f=h(a.nScrollHead),g=f[0].style,j=f.children("div"),i=j[0].style,n=j.children("table"),j=a.nScrollBody,l=h(j),q=j.style,t=h(a.nScrollFoot).children("div"),
-m=t.children("table"),o=h(a.nTHead),F=h(a.nTable),p=F[0],r=p.style,u=a.nTFoot?h(a.nTFoot):null,Eb=a.oBrowser,Ua=Eb.bScrollOversize,s=G(a.aoColumns,"nTh"),P,v,w,y,z=[],A=[],B=[],C=[],D,E=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};v=j.scrollHeight>j.clientHeight;if(a.scrollBarVis!==v&&a.scrollBarVis!==k)a.scrollBarVis=v,Y(a);else{a.scrollBarVis=v;F.children("thead, tfoot").remove();u&&(w=u.clone().prependTo(F),P=u.find("tr"),w=
-w.find("tr"));y=o.clone().prependTo(F);o=o.find("tr");v=y.find("tr");y.find("th, td").removeAttr("tabindex");c||(q.width="100%",f[0].style.width="100%");h.each(qa(a,y),function(b,c){D=Z(a,b);c.style.width=a.aoColumns[D].sWidth});u&&J(function(a){a.style.width=""},w);f=F.outerWidth();if(""===c){r.width="100%";if(Ua&&(F.find("tbody").height()>j.offsetHeight||"scroll"==l.css("overflow-y")))r.width=x(F.outerWidth()-b);f=F.outerWidth()}else""!==d&&(r.width=x(d),f=F.outerWidth());J(E,v);J(function(a){B.push(a.innerHTML);
-z.push(x(h(a).css("width")))},v);J(function(a,b){if(h.inArray(a,s)!==-1)a.style.width=z[b]},o);h(v).height(0);u&&(J(E,w),J(function(a){C.push(a.innerHTML);A.push(x(h(a).css("width")))},w),J(function(a,b){a.style.width=A[b]},P),h(w).height(0));J(function(a,b){a.innerHTML='<div class="dataTables_sizing" style="height:0;overflow:hidden;">'+B[b]+"</div>";a.style.width=z[b]},v);u&&J(function(a,b){a.innerHTML='<div class="dataTables_sizing" style="height:0;overflow:hidden;">'+C[b]+"</div>";a.style.width=
-A[b]},w);if(F.outerWidth()<f){P=j.scrollHeight>j.offsetHeight||"scroll"==l.css("overflow-y")?f+b:f;if(Ua&&(j.scrollHeight>j.offsetHeight||"scroll"==l.css("overflow-y")))r.width=x(P-b);(""===c||""!==d)&&L(a,1,"Possible column misalignment",6)}else P="100%";q.width=x(P);g.width=x(P);u&&(a.nScrollFoot.style.width=x(P));!e&&Ua&&(q.height=x(p.offsetHeight+b));c=F.outerWidth();n[0].style.width=x(c);i.width=x(c);d=F.height()>j.clientHeight||"scroll"==l.css("overflow-y");e="padding"+(Eb.bScrollbarLeft?"Left":
-"Right");i[e]=d?b+"px":"0px";u&&(m[0].style.width=x(c),t[0].style.width=x(c),t[0].style[e]=d?b+"px":"0px");F.children("colgroup").insertBefore(F.children("thead"));l.scroll();if((a.bSorted||a.bFiltered)&&!a._drawHold)j.scrollTop=0}}function J(a,b,c){for(var d=0,e=0,f=b.length,g,j;e<f;){g=b[e].firstChild;for(j=c?c[e].firstChild:null;g;)1===g.nodeType&&(c?a(g,j,d):a(g,d),d++),g=g.nextSibling,j=c?j.nextSibling:null;e++}}function Fa(a){var b=a.nTable,c=a.aoColumns,d=a.oScroll,e=d.sY,f=d.sX,g=d.sXInner,
-j=c.length,i=la(a,"bVisible"),n=h("th",a.nTHead),l=b.getAttribute("width"),k=b.parentNode,t=!1,m,o,p=a.oBrowser,d=p.bScrollOversize;(m=b.style.width)&&-1!==m.indexOf("%")&&(l=m);for(m=0;m<i.length;m++)o=c[i[m]],null!==o.sWidth&&(o.sWidth=Fb(o.sWidthOrig,k),t=!0);if(d||!t&&!f&&!e&&j==aa(a)&&j==n.length)for(m=0;m<j;m++)i=Z(a,m),null!==i&&(c[i].sWidth=x(n.eq(m).width()));else{j=h(b).clone().css("visibility","hidden").removeAttr("id");j.find("tbody tr").remove();var r=h("<tr/>").appendTo(j.find("tbody"));
-j.find("thead, tfoot").remove();j.append(h(a.nTHead).clone()).append(h(a.nTFoot).clone());j.find("tfoot th, tfoot td").css("width","");n=qa(a,j.find("thead")[0]);for(m=0;m<i.length;m++)o=c[i[m]],n[m].style.width=null!==o.sWidthOrig&&""!==o.sWidthOrig?x(o.sWidthOrig):"",o.sWidthOrig&&f&&h(n[m]).append(h("<div/>").css({width:o.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(m=0;m<i.length;m++)t=i[m],o=c[t],h(Gb(a,t)).clone(!1).append(o.sContentPadding).appendTo(r);h("[name]",
-j).removeAttr("name");o=h("<div/>").css(f||e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(j).appendTo(k);f&&g?j.width(g):f?(j.css("width","auto"),j.removeAttr("width"),j.width()<k.clientWidth&&l&&j.width(k.clientWidth)):e?j.width(k.clientWidth):l&&j.width(l);for(m=e=0;m<i.length;m++)k=h(n[m]),g=k.outerWidth()-k.width(),k=p.bBounding?Math.ceil(n[m].getBoundingClientRect().width):k.outerWidth(),e+=k,c[i[m]].sWidth=x(k-g);b.style.width=x(e);o.remove()}l&&(b.style.width=
-x(l));if((l||f)&&!a._reszEvt)b=function(){h(D).bind("resize.DT-"+a.sInstance,Oa(function(){Y(a)}))},d?setTimeout(b,1E3):b(),a._reszEvt=!0}function Fb(a,b){if(!a)return 0;var c=h("<div/>").css("width",x(a)).appendTo(b||I.body),d=c[0].offsetWidth;c.remove();return d}function Gb(a,b){var c=Hb(a,b);if(0>c)return null;var d=a.aoData[c];return!d.nTr?h("<td/>").html(B(a,c,b,"display"))[0]:d.anCells[b]}function Hb(a,b){for(var c,d=-1,e=-1,f=0,g=a.aoData.length;f<g;f++)c=B(a,f,b,"display")+"",c=c.replace($b,
-""),c=c.replace(/&nbsp;/g," "),c.length>d&&(d=c.length,e=f);return e}function x(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function V(a){var b,c,d=[],e=a.aoColumns,f,g,j,i;b=a.aaSortingFixed;c=h.isPlainObject(b);var n=[];f=function(a){a.length&&!h.isArray(a[0])?n.push(a):h.merge(n,a)};h.isArray(b)&&f(b);c&&b.pre&&f(b.pre);f(a.aaSorting);c&&b.post&&f(b.post);for(a=0;a<n.length;a++){i=n[a][0];f=e[i].aDataSort;b=0;for(c=f.length;b<c;b++)g=f[b],j=e[g].sType||
-"string",n[a]._idx===k&&(n[a]._idx=h.inArray(n[a][1],e[g].asSorting)),d.push({src:i,col:g,dir:n[a][1],index:n[a]._idx,type:j,formatter:m.ext.type.order[j+"-pre"]})}return d}function mb(a){var b,c,d=[],e=m.ext.type.order,f=a.aoData,g=0,j,i=a.aiDisplayMaster,h;Ga(a);h=V(a);b=0;for(c=h.length;b<c;b++)j=h[b],j.formatter&&g++,Ib(a,j.col);if("ssp"!=y(a)&&0!==h.length){b=0;for(c=i.length;b<c;b++)d[i[b]]=b;g===h.length?i.sort(function(a,b){var c,e,g,j,i=h.length,k=f[a]._aSortData,m=f[b]._aSortData;for(g=
-0;g<i;g++)if(j=h[g],c=k[j.col],e=m[j.col],c=c<e?-1:c>e?1:0,0!==c)return"asc"===j.dir?c:-c;c=d[a];e=d[b];return c<e?-1:c>e?1:0}):i.sort(function(a,b){var c,g,j,i,k=h.length,m=f[a]._aSortData,p=f[b]._aSortData;for(j=0;j<k;j++)if(i=h[j],c=m[i.col],g=p[i.col],i=e[i.type+"-"+i.dir]||e["string-"+i.dir],c=i(c,g),0!==c)return c;c=d[a];g=d[b];return c<g?-1:c>g?1:0})}a.bSorted=!0}function Jb(a){for(var b,c,d=a.aoColumns,e=V(a),a=a.oLanguage.oAria,f=0,g=d.length;f<g;f++){c=d[f];var j=c.asSorting;b=c.sTitle.replace(/<.*?>/g,
-"");var i=c.nTh;i.removeAttribute("aria-sort");c.bSortable&&(0<e.length&&e[0].col==f?(i.setAttribute("aria-sort","asc"==e[0].dir?"ascending":"descending"),c=j[e[0].index+1]||j[0]):c=j[0],b+="asc"===c?a.sSortAscending:a.sSortDescending);i.setAttribute("aria-label",b)}}function Va(a,b,c,d){var e=a.aaSorting,f=a.aoColumns[b].asSorting,g=function(a,b){var c=a._idx;c===k&&(c=h.inArray(a[1],f));return c+1<f.length?c+1:b?null:0};"number"===typeof e[0]&&(e=a.aaSorting=[e]);c&&a.oFeatures.bSortMulti?(c=h.inArray(b,
-G(e,"0")),-1!==c?(b=g(e[c],!0),null===b&&1===e.length&&(b=0),null===b?e.splice(c,1):(e[c][1]=f[b],e[c]._idx=b)):(e.push([b,f[0],0]),e[e.length-1]._idx=0)):e.length&&e[0][0]==b?(b=g(e[0]),e.length=1,e[0][1]=f[b],e[0]._idx=b):(e.length=0,e.push([b,f[0]]),e[0]._idx=0);T(a);"function"==typeof d&&d(a)}function Ma(a,b,c,d){var e=a.aoColumns[c];Wa(b,{},function(b){!1!==e.bSortable&&(a.oFeatures.bProcessing?(C(a,!0),setTimeout(function(){Va(a,c,b.shiftKey,d);"ssp"!==y(a)&&C(a,!1)},0)):Va(a,c,b.shiftKey,d))})}
-function va(a){var b=a.aLastSort,c=a.oClasses.sSortColumn,d=V(a),e=a.oFeatures,f,g;if(e.bSort&&e.bSortClasses){e=0;for(f=b.length;e<f;e++)g=b[e].src,h(G(a.aoData,"anCells",g)).removeClass(c+(2>e?e+1:3));e=0;for(f=d.length;e<f;e++)g=d[e].src,h(G(a.aoData,"anCells",g)).addClass(c+(2>e?e+1:3))}a.aLastSort=d}function Ib(a,b){var c=a.aoColumns[b],d=m.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,$(a,b)));for(var f,g=m.ext.type.order[c.sType+"-pre"],j=0,i=a.aoData.length;j<i;j++)if(c=a.aoData[j],
-c._aSortData||(c._aSortData=[]),!c._aSortData[b]||d)f=d?e[j]:B(a,j,b,"sort"),c._aSortData[b]=g?g(f):f}function wa(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b={time:+new Date,start:a._iDisplayStart,length:a._iDisplayLength,order:h.extend(!0,[],a.aaSorting),search:Ab(a.oPreviousSearch),columns:h.map(a.aoColumns,function(b,d){return{visible:b.bVisible,search:Ab(a.aoPreSearchCols[d])}})};u(a,"aoStateSaveParams","stateSaveParams",[a,b]);a.oSavedState=b;a.fnStateSaveCallback.call(a.oInstance,a,
-b)}}function Kb(a){var b,c,d=a.aoColumns;if(a.oFeatures.bStateSave){var e=a.fnStateLoadCallback.call(a.oInstance,a);if(e&&e.time&&(b=u(a,"aoStateLoadParams","stateLoadParams",[a,e]),-1===h.inArray(!1,b)&&(b=a.iStateDuration,!(0<b&&e.time<+new Date-1E3*b)&&d.length===e.columns.length))){a.oLoadedState=h.extend(!0,{},e);e.start!==k&&(a._iDisplayStart=e.start,a.iInitDisplayStart=e.start);e.length!==k&&(a._iDisplayLength=e.length);e.order!==k&&(a.aaSorting=[],h.each(e.order,function(b,c){a.aaSorting.push(c[0]>=
-d.length?[0,c[1]]:c)}));e.search!==k&&h.extend(a.oPreviousSearch,Bb(e.search));b=0;for(c=e.columns.length;b<c;b++){var f=e.columns[b];f.visible!==k&&(d[b].bVisible=f.visible);f.search!==k&&h.extend(a.aoPreSearchCols[b],Bb(f.search))}u(a,"aoStateLoaded","stateLoaded",[a,e])}}}function xa(a){var b=m.settings,a=h.inArray(a,G(b,"nTable"));return-1!==a?b[a]:null}function L(a,b,c,d){c="DataTables warning: "+(a?"table id="+a.sTableId+" - ":"")+c;d&&(c+=". For more information about this error, please see http://datatables.net/tn/"+
-d);if(b)D.console&&console.log&&console.log(c);else if(b=m.ext,b=b.sErrMode||b.errMode,a&&u(a,null,"error",[a,d,c]),"alert"==b)alert(c);else{if("throw"==b)throw Error(c);"function"==typeof b&&b(a,d,c)}}function E(a,b,c,d){h.isArray(c)?h.each(c,function(c,d){h.isArray(d)?E(a,b,d[0],d[1]):E(a,b,d)}):(d===k&&(d=c),b[c]!==k&&(a[d]=b[c]))}function Lb(a,b,c){var d,e;for(e in b)b.hasOwnProperty(e)&&(d=b[e],h.isPlainObject(d)?(h.isPlainObject(a[e])||(a[e]={}),h.extend(!0,a[e],d)):a[e]=c&&"data"!==e&&"aaData"!==
-e&&h.isArray(d)?d.slice():d);return a}function Wa(a,b,c){h(a).bind("click.DT",b,function(b){a.blur();c(b)}).bind("keypress.DT",b,function(a){13===a.which&&(a.preventDefault(),c(a))}).bind("selectstart.DT",function(){return!1})}function z(a,b,c,d){c&&a[b].push({fn:c,sName:d})}function u(a,b,c,d){var e=[];b&&(e=h.map(a[b].slice().reverse(),function(b){return b.fn.apply(a.oInstance,d)}));null!==c&&(b=h.Event(c+".dt"),h(a.nTable).trigger(b,d),e.push(b.result));return e}function Sa(a){var b=a._iDisplayStart,
-c=a.fnDisplayEnd(),d=a._iDisplayLength;b>=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function Na(a,b){var c=a.renderer,d=m.ext.renderer[b];return h.isPlainObject(c)&&c[b]?d[c[b]]||d._:"string"===typeof c?d[c]||d._:d._}function y(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function ya(a,b){var c=[],c=Mb.numbers_length,d=Math.floor(c/2);b<=c?c=W(0,b):a<=d?(c=W(0,c-2),c.push("ellipsis"),c.push(b-1)):(a>=b-1-d?c=W(b-(c-2),b):(c=W(a-d+2,a+d-1),c.push("ellipsis"),
-c.push(b-1)),c.splice(0,0,"ellipsis"),c.splice(0,0,0));c.DT_el="span";return c}function db(a){h.each({num:function(b){return za(b,a)},"num-fmt":function(b){return za(b,a,Xa)},"html-num":function(b){return za(b,a,Aa)},"html-num-fmt":function(b){return za(b,a,Aa,Xa)}},function(b,c){v.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(v.type.search[b+a]=v.type.search.html)})}function Nb(a){return function(){var b=[xa(this[m.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return m.ext.internal[a].apply(this,
-b)}}var m=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a,b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new r(xa(this[v.iApiIndex])):new r(this)};this.fnAddData=function(a,b){var c=this.api(!0),d=h.isArray(a)&&(h.isArray(a[0])||h.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===k||b)&&c.draw();return d.flatten().toArray()};this.fnAdjustColumnSizing=function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===k||a?b.draw(!1):
-(""!==d.sX||""!==d.sY)&&ka(c)};this.fnClearTable=function(a){var b=this.api(!0).clear();(a===k||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a,b,c){var d=this.api(!0),a=d.rows(a),e=a.settings()[0],h=e.aoData[a[0][0]];a.remove();b&&b.call(this,e,h);(c===k||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(a)};this.fnFilter=function(a,b,c,d,e,h){e=this.api(!0);null===b||b===k?e.search(a,
-c,d,h):e.column(b).search(a,c,d,h);e.draw()};this.fnGetData=function(a,b){var c=this.api(!0);if(a!==k){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==k||"td"==d||"th"==d?c.cell(a,b).data():c.row(a).data()||null}return c.data().toArray()};this.fnGetNodes=function(a){var b=this.api(!0);return a!==k?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase();return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(),
-[a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()};this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};this.fnPageChange=function(a,b){var c=this.api(!0).page(a);(b===k||b)&&c.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===k||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return xa(this[v.iApiIndex])};this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener=
-function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h=this.api(!0);c===k||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===k||e)&&h.columns.adjust();(d===k||d)&&h.draw();return 0};this.fnVersionCheck=v.fnVersionCheck;var b=this,c=a===k,d=this.length;c&&(a={});this.oApi=this.internal=v.internal;for(var e in m.ext.internal)e&&(this[e]=Nb(e));this.each(function(){var e={},e=1<d?Lb(e,a,!0):a,g=0,j,i=this.getAttribute("id"),n=!1,l=m.defaults,q=h(this);if("table"!=
-this.nodeName.toLowerCase())L(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{eb(l);fb(l.column);K(l,l,!0);K(l.column,l.column,!0);K(l,h.extend(e,q.data()));var t=m.settings,g=0;for(j=t.length;g<j;g++){var p=t[g];if(p.nTable==this||p.nTHead.parentNode==this||p.nTFoot&&p.nTFoot.parentNode==this){g=e.bRetrieve!==k?e.bRetrieve:l.bRetrieve;if(c||g)return p.oInstance;if(e.bDestroy!==k?e.bDestroy:l.bDestroy){p.oInstance.fnDestroy();break}else{L(p,0,"Cannot reinitialise DataTable",3);
-return}}if(p.sTableId==this.id){t.splice(g,1);break}}if(null===i||""===i)this.id=i="DataTables_Table_"+m.ext._unique++;var o=h.extend(!0,{},m.models.oSettings,{sDestroyWidth:q[0].style.width,sInstance:i,sTableId:i});o.nTable=this;o.oApi=b.internal;o.oInit=e;t.push(o);o.oInstance=1===b.length?b:q.dataTable();eb(e);e.oLanguage&&Da(e.oLanguage);e.aLengthMenu&&!e.iDisplayLength&&(e.iDisplayLength=h.isArray(e.aLengthMenu[0])?e.aLengthMenu[0][0]:e.aLengthMenu[0]);e=Lb(h.extend(!0,{},l),e);E(o.oFeatures,
-e,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));E(o,e,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed","aLengthMenu","sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols",
-"aoPreSearchCols"],["iDisplayLength","_iDisplayLength"],["bJQueryUI","bJUI"]]);E(o.oScroll,e,[["sScrollX","sX"],["sScrollXInner","sXInner"],["sScrollY","sY"],["bScrollCollapse","bCollapse"]]);E(o.oLanguage,e,"fnInfoCallback");z(o,"aoDrawCallback",e.fnDrawCallback,"user");z(o,"aoServerParams",e.fnServerParams,"user");z(o,"aoStateSaveParams",e.fnStateSaveParams,"user");z(o,"aoStateLoadParams",e.fnStateLoadParams,"user");z(o,"aoStateLoaded",e.fnStateLoaded,"user");z(o,"aoRowCallback",e.fnRowCallback,
-"user");z(o,"aoRowCreatedCallback",e.fnCreatedRow,"user");z(o,"aoHeaderCallback",e.fnHeaderCallback,"user");z(o,"aoFooterCallback",e.fnFooterCallback,"user");z(o,"aoInitComplete",e.fnInitComplete,"user");z(o,"aoPreDrawCallback",e.fnPreDrawCallback,"user");o.rowIdFn=Q(e.rowId);gb(o);i=o.oClasses;e.bJQueryUI?(h.extend(i,m.ext.oJUIClasses,e.oClasses),e.sDom===l.sDom&&"lfrtip"===l.sDom&&(o.sDom='<"H"lfr>t<"F"ip>'),o.renderer)?h.isPlainObject(o.renderer)&&!o.renderer.header&&(o.renderer.header="jqueryui"):
-o.renderer="jqueryui":h.extend(i,m.ext.classes,e.oClasses);q.addClass(i.sTable);o.iInitDisplayStart===k&&(o.iInitDisplayStart=e.iDisplayStart,o._iDisplayStart=e.iDisplayStart);null!==e.iDeferLoading&&(o.bDeferLoading=!0,g=h.isArray(e.iDeferLoading),o._iRecordsDisplay=g?e.iDeferLoading[0]:e.iDeferLoading,o._iRecordsTotal=g?e.iDeferLoading[1]:e.iDeferLoading);var r=o.oLanguage;h.extend(!0,r,e.oLanguage);""!==r.sUrl&&(h.ajax({dataType:"json",url:r.sUrl,success:function(a){Da(a);K(l.oLanguage,a);h.extend(true,
-r,a);ga(o)},error:function(){ga(o)}}),n=!0);null===e.asStripeClasses&&(o.asStripeClasses=[i.sStripeOdd,i.sStripeEven]);var g=o.asStripeClasses,v=q.children("tbody").find("tr").eq(0);-1!==h.inArray(!0,h.map(g,function(a){return v.hasClass(a)}))&&(h("tbody tr",this).removeClass(g.join(" ")),o.asDestroyStripes=g.slice());t=[];g=this.getElementsByTagName("thead");0!==g.length&&(da(o.aoHeader,g[0]),t=qa(o));if(null===e.aoColumns){p=[];g=0;for(j=t.length;g<j;g++)p.push(null)}else p=e.aoColumns;g=0;for(j=
-p.length;g<j;g++)Ea(o,t?t[g]:null);ib(o,e.aoColumnDefs,p,function(a,b){ja(o,a,b)});if(v.length){var s=function(a,b){return a.getAttribute("data-"+b)!==null?b:null};h(v[0]).children("th, td").each(function(a,b){var c=o.aoColumns[a];if(c.mData===a){var d=s(b,"sort")||s(b,"order"),e=s(b,"filter")||s(b,"search");if(d!==null||e!==null){c.mData={_:a+".display",sort:d!==null?a+".@data-"+d:k,type:d!==null?a+".@data-"+d:k,filter:e!==null?a+".@data-"+e:k};ja(o,a)}}})}var w=o.oFeatures;e.bStateSave&&(w.bStateSave=
-!0,Kb(o,e),z(o,"aoDrawCallback",wa,"state_save"));if(e.aaSorting===k){t=o.aaSorting;g=0;for(j=t.length;g<j;g++)t[g][1]=o.aoColumns[g].asSorting[0]}va(o);w.bSort&&z(o,"aoDrawCallback",function(){if(o.bSorted){var a=V(o),b={};h.each(a,function(a,c){b[c.src]=c.dir});u(o,null,"order",[o,a,b]);Jb(o)}});z(o,"aoDrawCallback",function(){(o.bSorted||y(o)==="ssp"||w.bDeferRender)&&va(o)},"sc");g=q.children("caption").each(function(){this._captionSide=q.css("caption-side")});j=q.children("thead");0===j.length&&
-(j=h("<thead/>").appendTo(this));o.nTHead=j[0];j=q.children("tbody");0===j.length&&(j=h("<tbody/>").appendTo(this));o.nTBody=j[0];j=q.children("tfoot");if(0===j.length&&0<g.length&&(""!==o.oScroll.sX||""!==o.oScroll.sY))j=h("<tfoot/>").appendTo(this);0===j.length||0===j.children().length?q.addClass(i.sNoFooter):0<j.length&&(o.nTFoot=j[0],da(o.aoFooter,o.nTFoot));if(e.aaData)for(g=0;g<e.aaData.length;g++)N(o,e.aaData[g]);else(o.bDeferLoading||"dom"==y(o))&&ma(o,h(o.nTBody).children("tr"));o.aiDisplay=
-o.aiDisplayMaster.slice();o.bInitialised=!0;!1===n&&ga(o)}});b=null;return this},v,r,p,s,Ya={},Ob=/[\r\n]/g,Aa=/<.*?>/g,ac=/^[\w\+\-]/,bc=/[\w\+\-]$/,cc=RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"),Xa=/[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfk]/gi,M=function(a){return!a||!0===a||"-"===a?!0:!1},Pb=function(a){var b=parseInt(a,10);return!isNaN(b)&&isFinite(a)?b:null},Qb=function(a,b){Ya[b]||(Ya[b]=RegExp(Qa(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g,
-"").replace(Ya[b],"."):a},Za=function(a,b,c){var d="string"===typeof a;if(M(a))return!0;b&&d&&(a=Qb(a,b));c&&d&&(a=a.replace(Xa,""));return!isNaN(parseFloat(a))&&isFinite(a)},Rb=function(a,b,c){return M(a)?!0:!(M(a)||"string"===typeof a)?null:Za(a.replace(Aa,""),b,c)?!0:null},G=function(a,b,c){var d=[],e=0,f=a.length;if(c!==k)for(;e<f;e++)a[e]&&a[e][b]&&d.push(a[e][b][c]);else for(;e<f;e++)a[e]&&d.push(a[e][b]);return d},ha=function(a,b,c,d){var e=[],f=0,g=b.length;if(d!==k)for(;f<g;f++)a[b[f]][c]&&
-e.push(a[b[f]][c][d]);else for(;f<g;f++)e.push(a[b[f]][c]);return e},W=function(a,b){var c=[],d;b===k?(b=0,d=a):(d=b,b=a);for(var e=b;e<d;e++)c.push(e);return c},Sb=function(a){for(var b=[],c=0,d=a.length;c<d;c++)a[c]&&b.push(a[c]);return b},pa=function(a){var b=[],c,d,e=a.length,f,g=0;d=0;a:for(;d<e;d++){c=a[d];for(f=0;f<g;f++)if(b[f]===c)continue a;b.push(c);g++}return b};m.util={throttle:function(a,b){var c=b!==k?b:200,d,e;return function(){var b=this,g=+new Date,h=arguments;d&&g<d+c?(clearTimeout(e),
-e=setTimeout(function(){d=k;a.apply(b,h)},c)):(d=g,a.apply(b,h))}},escapeRegex:function(a){return a.replace(cc,"\\$1")}};var A=function(a,b,c){a[b]!==k&&(a[c]=a[b])},ba=/\[.*?\]$/,U=/\(\)$/,Qa=m.util.escapeRegex,ua=h("<div>")[0],Zb=ua.textContent!==k,$b=/<.*?>/g,Oa=m.util.throttle,Tb=[],w=Array.prototype,dc=function(a){var b,c,d=m.settings,e=h.map(d,function(a){return a.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase())return b=h.inArray(a,e),-1!==b?[d[b]]:
-null;if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?c=h(a):a instanceof h&&(c=a)}else return[];if(c)return c.map(function(){b=h.inArray(this,e);return-1!==b?d[b]:null}).toArray()};r=function(a,b){if(!(this instanceof r))return new r(a,b);var c=[],d=function(a){(a=dc(a))&&(c=c.concat(a))};if(h.isArray(a))for(var e=0,f=a.length;e<f;e++)d(a[e]);else d(a);this.context=pa(c);b&&h.merge(this,b);this.selector={rows:null,cols:null,opts:null};r.extend(this,this,Tb)};
-m.Api=r;h.extend(r.prototype,{any:function(){return 0!==this.count()},concat:w.concat,context:[],count:function(){return this.flatten().length},each:function(a){for(var b=0,c=this.length;b<c;b++)a.call(this,this[b],b,this);return this},eq:function(a){var b=this.context;return b.length>a?new r(b[a],this[a]):null},filter:function(a){var b=[];if(w.filter)b=w.filter.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)a.call(this,this[c],c,this)&&b.push(this[c]);return new r(this.context,b)},flatten:function(){var a=
-[];return new r(this.context,a.concat.apply(a,this.toArray()))},join:w.join,indexOf:w.indexOf||function(a,b){for(var c=b||0,d=this.length;c<d;c++)if(this[c]===a)return c;return-1},iterator:function(a,b,c,d){var e=[],f,g,h,i,n,l=this.context,m,t,p=this.selector;"string"===typeof a&&(d=c,c=b,b=a,a=!1);g=0;for(h=l.length;g<h;g++){var o=new r(l[g]);if("table"===b)f=c.call(o,l[g],g),f!==k&&e.push(f);else if("columns"===b||"rows"===b)f=c.call(o,l[g],this[g],g),f!==k&&e.push(f);else if("column"===b||"column-rows"===
-b||"row"===b||"cell"===b){t=this[g];"column-rows"===b&&(m=Ba(l[g],p.opts));i=0;for(n=t.length;i<n;i++)f=t[i],f="cell"===b?c.call(o,l[g],f.row,f.column,g,i):c.call(o,l[g],f,g,i,m),f!==k&&e.push(f)}}return e.length||d?(a=new r(l,a?e.concat.apply([],e):e),b=a.selector,b.rows=p.rows,b.cols=p.cols,b.opts=p.opts,a):this},lastIndexOf:w.lastIndexOf||function(a,b){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(a){var b=[];if(w.map)b=w.map.call(this,a,this);else for(var c=
-0,d=this.length;c<d;c++)b.push(a.call(this,this[c],c));return new r(this.context,b)},pluck:function(a){return this.map(function(b){return b[a]})},pop:w.pop,push:w.push,reduce:w.reduce||function(a,b){return hb(this,a,b,0,this.length,1)},reduceRight:w.reduceRight||function(a,b){return hb(this,a,b,this.length-1,-1,-1)},reverse:w.reverse,selector:null,shift:w.shift,sort:w.sort,splice:w.splice,toArray:function(){return w.slice.call(this)},to$:function(){return h(this)},toJQuery:function(){return h(this)},
-unique:function(){return new r(this.context,pa(this))},unshift:w.unshift});r.extend=function(a,b,c){if(c.length&&b&&(b instanceof r||b.__dt_wrapper)){var d,e,f,g=function(a,b,c){return function(){var d=b.apply(a,arguments);r.extend(d,d,c.methodExt);return d}};d=0;for(e=c.length;d<e;d++)f=c[d],b[f.name]="function"===typeof f.val?g(a,f.val,f):h.isPlainObject(f.val)?{}:f.val,b[f.name].__dt_wrapper=!0,r.extend(a,b[f.name],f.propExt)}};r.register=p=function(a,b){if(h.isArray(a))for(var c=0,d=a.length;c<
-d;c++)r.register(a[c],b);else for(var e=a.split("."),f=Tb,g,j,c=0,d=e.length;c<d;c++){g=(j=-1!==e[c].indexOf("()"))?e[c].replace("()",""):e[c];var i;a:{i=0;for(var n=f.length;i<n;i++)if(f[i].name===g){i=f[i];break a}i=null}i||(i={name:g,val:{},methodExt:[],propExt:[]},f.push(i));c===d-1?i.val=b:f=j?i.methodExt:i.propExt}};r.registerPlural=s=function(a,b,c){r.register(a,c);r.register(b,function(){var a=c.apply(this,arguments);return a===this?this:a instanceof r?a.length?h.isArray(a[0])?new r(a.context,
-a[0]):a[0]:k:a})};p("tables()",function(a){var b;if(a){b=r;var c=this.context;if("number"===typeof a)a=[c[a]];else var d=h.map(c,function(a){return a.nTable}),a=h(d).filter(a).map(function(){var a=h.inArray(this,d);return c[a]}).toArray();b=new b(a)}else b=this;return b});p("table()",function(a){var a=this.tables(a),b=a.context;return b.length?new r(b[0]):a});s("tables().nodes()","table().node()",function(){return this.iterator("table",function(a){return a.nTable},1)});s("tables().body()","table().body()",
-function(){return this.iterator("table",function(a){return a.nTBody},1)});s("tables().header()","table().header()",function(){return this.iterator("table",function(a){return a.nTHead},1)});s("tables().footer()","table().footer()",function(){return this.iterator("table",function(a){return a.nTFoot},1)});s("tables().containers()","table().container()",function(){return this.iterator("table",function(a){return a.nTableWrapper},1)});p("draw()",function(a){return this.iterator("table",function(b){"page"===
-a?O(b):("string"===typeof a&&(a="full-hold"===a?!1:!0),T(b,!1===a))})});p("page()",function(a){return a===k?this.page.info().page:this.iterator("table",function(b){Ta(b,a)})});p("page.info()",function(){if(0===this.context.length)return k;var a=this.context[0],b=a._iDisplayStart,c=a.oFeatures.bPaginate?a._iDisplayLength:-1,d=a.fnRecordsDisplay(),e=-1===c;return{page:e?0:Math.floor(b/c),pages:e?1:Math.ceil(d/c),start:b,end:a.fnDisplayEnd(),length:c,recordsTotal:a.fnRecordsTotal(),recordsDisplay:d,
-serverSide:"ssp"===y(a)}});p("page.len()",function(a){return a===k?0!==this.context.length?this.context[0]._iDisplayLength:k:this.iterator("table",function(b){Ra(b,a)})});var Ub=function(a,b,c){if(c){var d=new r(a);d.one("draw",function(){c(d.ajax.json())})}if("ssp"==y(a))T(a,b);else{C(a,!0);var e=a.jqXHR;e&&4!==e.readyState&&e.abort();ra(a,[],function(c){na(a);for(var c=sa(a,c),d=0,e=c.length;d<e;d++)N(a,c[d]);T(a,b);C(a,!1)})}};p("ajax.json()",function(){var a=this.context;if(0<a.length)return a[0].json});
-p("ajax.params()",function(){var a=this.context;if(0<a.length)return a[0].oAjaxData});p("ajax.reload()",function(a,b){return this.iterator("table",function(c){Ub(c,!1===b,a)})});p("ajax.url()",function(a){var b=this.context;if(a===k){if(0===b.length)return k;b=b[0];return b.ajax?h.isPlainObject(b.ajax)?b.ajax.url:b.ajax:b.sAjaxSource}return this.iterator("table",function(b){h.isPlainObject(b.ajax)?b.ajax.url=a:b.ajax=a})});p("ajax.url().load()",function(a,b){return this.iterator("table",function(c){Ub(c,
-!1===b,a)})});var $a=function(a,b,c,d,e){var f=[],g,j,i,n,l,m;i=typeof b;if(!b||"string"===i||"function"===i||b.length===k)b=[b];i=0;for(n=b.length;i<n;i++){j=b[i]&&b[i].split?b[i].split(","):[b[i]];l=0;for(m=j.length;l<m;l++)(g=c("string"===typeof j[l]?h.trim(j[l]):j[l]))&&g.length&&(f=f.concat(g))}a=v.selector[a];if(a.length){i=0;for(n=a.length;i<n;i++)f=a[i](d,e,f)}return pa(f)},ab=function(a){a||(a={});a.filter&&a.search===k&&(a.search=a.filter);return h.extend({search:"none",order:"current",
-page:"all"},a)},bb=function(a){for(var b=0,c=a.length;b<c;b++)if(0<a[b].length)return a[0]=a[b],a[0].length=1,a.length=1,a.context=[a.context[b]],a;a.length=0;return a},Ba=function(a,b){var c,d,e,f=[],g=a.aiDisplay;c=a.aiDisplayMaster;var j=b.search;d=b.order;e=b.page;if("ssp"==y(a))return"removed"===j?[]:W(0,c.length);if("current"==e){c=a._iDisplayStart;for(d=a.fnDisplayEnd();c<d;c++)f.push(g[c])}else if("current"==d||"applied"==d)f="none"==j?c.slice():"applied"==j?g.slice():h.map(c,function(a){return-1===
-h.inArray(a,g)?a:null});else if("index"==d||"original"==d){c=0;for(d=a.aoData.length;c<d;c++)"none"==j?f.push(c):(e=h.inArray(c,g),(-1===e&&"removed"==j||0<=e&&"applied"==j)&&f.push(c))}return f};p("rows()",function(a,b){a===k?a="":h.isPlainObject(a)&&(b=a,a="");var b=ab(b),c=this.iterator("table",function(c){var e=b;return $a("row",a,function(a){var b=Pb(a);if(b!==null&&!e)return[b];var j=Ba(c,e);if(b!==null&&h.inArray(b,j)!==-1)return[b];if(!a)return j;if(typeof a==="function")return h.map(j,function(b){var e=
-c.aoData[b];return a(b,e._aData,e.nTr)?b:null});b=Sb(ha(c.aoData,j,"nTr"));if(a.nodeName){if(a._DT_RowIndex!==k)return[a._DT_RowIndex];if(a._DT_CellIndex)return[a._DT_CellIndex.row];b=h(a).closest("*[data-dt-row]");return b.length?[b.data("dt-row")]:[]}if(typeof a==="string"&&a.charAt(0)==="#"){j=c.aIds[a.replace(/^#/,"")];if(j!==k)return[j.idx]}return h(b).filter(a).map(function(){return this._DT_RowIndex}).toArray()},c,e)},1);c.selector.rows=a;c.selector.opts=b;return c});p("rows().nodes()",function(){return this.iterator("row",
-function(a,b){return a.aoData[b].nTr||k},1)});p("rows().data()",function(){return this.iterator(!0,"rows",function(a,b){return ha(a.aoData,b,"_aData")},1)});s("rows().cache()","row().cache()",function(a){return this.iterator("row",function(b,c){var d=b.aoData[c];return"search"===a?d._aFilterData:d._aSortData},1)});s("rows().invalidate()","row().invalidate()",function(a){return this.iterator("row",function(b,c){ca(b,c,a)})});s("rows().indexes()","row().index()",function(){return this.iterator("row",
-function(a,b){return b},1)});s("rows().ids()","row().id()",function(a){for(var b=[],c=this.context,d=0,e=c.length;d<e;d++)for(var f=0,g=this[d].length;f<g;f++){var h=c[d].rowIdFn(c[d].aoData[this[d][f]]._aData);b.push((!0===a?"#":"")+h)}return new r(c,b)});s("rows().remove()","row().remove()",function(){var a=this;this.iterator("row",function(b,c,d){var e=b.aoData,f=e[c],g,h,i,n,l;e.splice(c,1);g=0;for(h=e.length;g<h;g++)if(i=e[g],l=i.anCells,null!==i.nTr&&(i.nTr._DT_RowIndex=g),null!==l){i=0;for(n=
-l.length;i<n;i++)l[i]._DT_CellIndex.row=g}oa(b.aiDisplayMaster,c);oa(b.aiDisplay,c);oa(a[d],c,!1);Sa(b);c=b.rowIdFn(f._aData);c!==k&&delete b.aIds[c]});this.iterator("table",function(a){for(var c=0,d=a.aoData.length;c<d;c++)a.aoData[c].idx=c});return this});p("rows.add()",function(a){var b=this.iterator("table",function(b){var c,f,g,h=[];f=0;for(g=a.length;f<g;f++)c=a[f],c.nodeName&&"TR"===c.nodeName.toUpperCase()?h.push(ma(b,c)[0]):h.push(N(b,c));return h},1),c=this.rows(-1);c.pop();h.merge(c,b);
-return c});p("row()",function(a,b){return bb(this.rows(a,b))});p("row().data()",function(a){var b=this.context;if(a===k)return b.length&&this.length?b[0].aoData[this[0]]._aData:k;b[0].aoData[this[0]]._aData=a;ca(b[0],this[0],"data");return this});p("row().node()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]].nTr||null:null});p("row.add()",function(a){a instanceof h&&a.length&&(a=a[0]);var b=this.iterator("table",function(b){return a.nodeName&&"TR"===a.nodeName.toUpperCase()?
-ma(b,a)[0]:N(b,a)});return this.row(b[0])});var cb=function(a,b){var c=a.context;if(c.length&&(c=c[0].aoData[b!==k?b:a[0]])&&c._details)c._details.remove(),c._detailsShow=k,c._details=k},Vb=function(a,b){var c=a.context;if(c.length&&a.length){var d=c[0].aoData[a[0]];if(d._details){(d._detailsShow=b)?d._details.insertAfter(d.nTr):d._details.detach();var e=c[0],f=new r(e),g=e.aoData;f.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");0<G(g,"_details").length&&(f.on("draw.dt.DT_details",
-function(a,b){e===b&&f.rows({page:"current"}).eq(0).each(function(a){a=g[a];a._detailsShow&&a._details.insertAfter(a.nTr)})}),f.on("column-visibility.dt.DT_details",function(a,b){if(e===b)for(var c,d=aa(b),f=0,h=g.length;f<h;f++)c=g[f],c._details&&c._details.children("td[colspan]").attr("colspan",d)}),f.on("destroy.dt.DT_details",function(a,b){if(e===b)for(var c=0,d=g.length;c<d;c++)g[c]._details&&cb(f,c)}))}}};p("row().child()",function(a,b){var c=this.context;if(a===k)return c.length&&this.length?
-c[0].aoData[this[0]]._details:k;if(!0===a)this.child.show();else if(!1===a)cb(this);else if(c.length&&this.length){var d=c[0],c=c[0].aoData[this[0]],e=[],f=function(a,b){if(h.isArray(a)||a instanceof h)for(var c=0,k=a.length;c<k;c++)f(a[c],b);else a.nodeName&&"tr"===a.nodeName.toLowerCase()?e.push(a):(c=h("<tr><td/></tr>").addClass(b),h("td",c).addClass(b).html(a)[0].colSpan=aa(d),e.push(c[0]))};f(a,b);c._details&&c._details.remove();c._details=h(e);c._detailsShow&&c._details.insertAfter(c.nTr)}return this});
-p(["row().child.show()","row().child().show()"],function(){Vb(this,!0);return this});p(["row().child.hide()","row().child().hide()"],function(){Vb(this,!1);return this});p(["row().child.remove()","row().child().remove()"],function(){cb(this);return this});p("row().child.isShown()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]]._detailsShow||!1:!1});var ec=/^(.+):(name|visIdx|visible)$/,Wb=function(a,b,c,d,e){for(var c=[],d=0,f=e.length;d<f;d++)c.push(B(a,e[d],b));
-return c};p("columns()",function(a,b){a===k?a="":h.isPlainObject(a)&&(b=a,a="");var b=ab(b),c=this.iterator("table",function(c){var e=a,f=b,g=c.aoColumns,j=G(g,"sName"),i=G(g,"nTh");return $a("column",e,function(a){var b=Pb(a);if(a==="")return W(g.length);if(b!==null)return[b>=0?b:g.length+b];if(typeof a==="function"){var e=Ba(c,f);return h.map(g,function(b,f){return a(f,Wb(c,f,0,0,e),i[f])?f:null})}var k=typeof a==="string"?a.match(ec):"";if(k)switch(k[2]){case "visIdx":case "visible":b=parseInt(k[1],
-10);if(b<0){var m=h.map(g,function(a,b){return a.bVisible?b:null});return[m[m.length+b]]}return[Z(c,b)];case "name":return h.map(j,function(a,b){return a===k[1]?b:null});default:return[]}if(a.nodeName&&a._DT_CellIndex)return[a._DT_CellIndex.column];b=h(i).filter(a).map(function(){return h.inArray(this,i)}).toArray();if(b.length||!a.nodeName)return b;b=h(a).closest("*[data-dt-column]");return b.length?[b.data("dt-column")]:[]},c,f)},1);c.selector.cols=a;c.selector.opts=b;return c});s("columns().header()",
-"column().header()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh},1)});s("columns().footer()","column().footer()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTf},1)});s("columns().data()","column().data()",function(){return this.iterator("column-rows",Wb,1)});s("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData},1)});s("columns().cache()","column().cache()",
-function(a){return this.iterator("column-rows",function(b,c,d,e,f){return ha(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});s("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return ha(a.aoData,e,"anCells",b)},1)});s("columns().visible()","column().visible()",function(a,b){var c=this.iterator("column",function(b,c){if(a===k)return b.aoColumns[c].bVisible;var f=b.aoColumns,g=f[c],j=b.aoData,i,n,l;if(a!==k&&g.bVisible!==a){if(a){var m=
-h.inArray(!0,G(f,"bVisible"),c+1);i=0;for(n=j.length;i<n;i++)l=j[i].nTr,f=j[i].anCells,l&&l.insertBefore(f[c],f[m]||null)}else h(G(b.aoData,"anCells",c)).detach();g.bVisible=a;ea(b,b.aoHeader);ea(b,b.aoFooter);wa(b)}});a!==k&&(this.iterator("column",function(c,e){u(c,null,"column-visibility",[c,e,a,b])}),(b===k||b)&&this.columns.adjust());return c});s("columns().indexes()","column().index()",function(a){return this.iterator("column",function(b,c){return"visible"===a?$(b,c):c},1)});p("columns.adjust()",
-function(){return this.iterator("table",function(a){Y(a)},1)});p("column.index()",function(a,b){if(0!==this.context.length){var c=this.context[0];if("fromVisible"===a||"toData"===a)return Z(c,b);if("fromData"===a||"toVisible"===a)return $(c,b)}});p("column()",function(a,b){return bb(this.columns(a,b))});p("cells()",function(a,b,c){h.isPlainObject(a)&&(a.row===k?(c=a,a=null):(c=b,b=null));h.isPlainObject(b)&&(c=b,b=null);if(null===b||b===k)return this.iterator("table",function(b){var d=a,e=ab(c),f=
-b.aoData,g=Ba(b,e),j=Sb(ha(f,g,"anCells")),i=h([].concat.apply([],j)),l,n=b.aoColumns.length,m,p,r,u,v,s;return $a("cell",d,function(a){var c=typeof a==="function";if(a===null||a===k||c){m=[];p=0;for(r=g.length;p<r;p++){l=g[p];for(u=0;u<n;u++){v={row:l,column:u};if(c){s=f[l];a(v,B(b,l,u),s.anCells?s.anCells[u]:null)&&m.push(v)}else m.push(v)}}return m}if(h.isPlainObject(a))return[a];c=i.filter(a).map(function(a,b){return{row:b._DT_CellIndex.row,column:b._DT_CellIndex.column}}).toArray();if(c.length||
-!a.nodeName)return c;s=h(a).closest("*[data-dt-row]");return s.length?[{row:s.data("dt-row"),column:s.data("dt-column")}]:[]},b,e)});var d=this.columns(b,c),e=this.rows(a,c),f,g,j,i,n,l=this.iterator("table",function(a,b){f=[];g=0;for(j=e[b].length;g<j;g++){i=0;for(n=d[b].length;i<n;i++)f.push({row:e[b][g],column:d[b][i]})}return f},1);h.extend(l.selector,{cols:b,rows:a,opts:c});return l});s("cells().nodes()","cell().node()",function(){return this.iterator("cell",function(a,b,c){return(a=a.aoData[b])&&
-a.anCells?a.anCells[c]:k},1)});p("cells().data()",function(){return this.iterator("cell",function(a,b,c){return B(a,b,c)},1)});s("cells().cache()","cell().cache()",function(a){a="search"===a?"_aFilterData":"_aSortData";return this.iterator("cell",function(b,c,d){return b.aoData[c][a][d]},1)});s("cells().render()","cell().render()",function(a){return this.iterator("cell",function(b,c,d){return B(b,c,d,a)},1)});s("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(a,
-b,c){return{row:b,column:c,columnVisible:$(a,c)}},1)});s("cells().invalidate()","cell().invalidate()",function(a){return this.iterator("cell",function(b,c,d){ca(b,c,a,d)})});p("cell()",function(a,b,c){return bb(this.cells(a,b,c))});p("cell().data()",function(a){var b=this.context,c=this[0];if(a===k)return b.length&&c.length?B(b[0],c[0].row,c[0].column):k;jb(b[0],c[0].row,c[0].column,a);ca(b[0],c[0].row,"data",c[0].column);return this});p("order()",function(a,b){var c=this.context;if(a===k)return 0!==
-c.length?c[0].aaSorting:k;"number"===typeof a?a=[[a,b]]:a.length&&!h.isArray(a[0])&&(a=Array.prototype.slice.call(arguments));return this.iterator("table",function(b){b.aaSorting=a.slice()})});p("order.listener()",function(a,b,c){return this.iterator("table",function(d){Ma(d,a,b,c)})});p("order.fixed()",function(a){if(!a){var b=this.context,b=b.length?b[0].aaSortingFixed:k;return h.isArray(b)?{pre:b}:b}return this.iterator("table",function(b){b.aaSortingFixed=h.extend(!0,{},a)})});p(["columns().order()",
-"column().order()"],function(a){var b=this;return this.iterator("table",function(c,d){var e=[];h.each(b[d],function(b,c){e.push([c,a])});c.aaSorting=e})});p("search()",function(a,b,c,d){var e=this.context;return a===k?0!==e.length?e[0].oPreviousSearch.sSearch:k:this.iterator("table",function(e){e.oFeatures.bFilter&&fa(e,h.extend({},e.oPreviousSearch,{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),1)})});s("columns().search()","column().search()",function(a,
-b,c,d){return this.iterator("column",function(e,f){var g=e.aoPreSearchCols;if(a===k)return g[f].sSearch;e.oFeatures.bFilter&&(h.extend(g[f],{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),fa(e,e.oPreviousSearch,1))})});p("state()",function(){return this.context.length?this.context[0].oSavedState:null});p("state.clear()",function(){return this.iterator("table",function(a){a.fnStateSaveCallback.call(a.oInstance,a,{})})});p("state.loaded()",function(){return this.context.length?
-this.context[0].oLoadedState:null});p("state.save()",function(){return this.iterator("table",function(a){wa(a)})});m.versionCheck=m.fnVersionCheck=function(a){for(var b=m.version.split("."),a=a.split("."),c,d,e=0,f=a.length;e<f;e++)if(c=parseInt(b[e],10)||0,d=parseInt(a[e],10)||0,c!==d)return c>d;return!0};m.isDataTable=m.fnIsDataTable=function(a){var b=h(a).get(0),c=!1;h.each(m.settings,function(a,e){var f=e.nScrollHead?h("table",e.nScrollHead)[0]:null,g=e.nScrollFoot?h("table",e.nScrollFoot)[0]:
-null;if(e.nTable===b||f===b||g===b)c=!0});return c};m.tables=m.fnTables=function(a){var b=!1;h.isPlainObject(a)&&(b=a.api,a=a.visible);var c=h.map(m.settings,function(b){if(!a||a&&h(b.nTable).is(":visible"))return b.nTable});return b?new r(c):c};m.camelToHungarian=K;p("$()",function(a,b){var c=this.rows(b).nodes(),c=h(c);return h([].concat(c.filter(a).toArray(),c.find(a).toArray()))});h.each(["on","one","off"],function(a,b){p(b+"()",function(){var a=Array.prototype.slice.call(arguments);a[0].match(/\.dt\b/)||
-(a[0]+=".dt");var d=h(this.tables().nodes());d[b].apply(d,a);return this})});p("clear()",function(){return this.iterator("table",function(a){na(a)})});p("settings()",function(){return new r(this.context,this.context)});p("init()",function(){var a=this.context;return a.length?a[0].oInit:null});p("data()",function(){return this.iterator("table",function(a){return G(a.aoData,"_aData")}).flatten()});p("destroy()",function(a){a=a||!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,
-d=b.oClasses,e=b.nTable,f=b.nTBody,g=b.nTHead,j=b.nTFoot,i=h(e),f=h(f),k=h(b.nTableWrapper),l=h.map(b.aoData,function(a){return a.nTr}),p;b.bDestroying=!0;u(b,"aoDestroyCallback","destroy",[b]);a||(new r(b)).columns().visible(!0);k.unbind(".DT").find(":not(tbody *)").unbind(".DT");h(D).unbind(".DT-"+b.sInstance);e!=g.parentNode&&(i.children("thead").detach(),i.append(g));j&&e!=j.parentNode&&(i.children("tfoot").detach(),i.append(j));b.aaSorting=[];b.aaSortingFixed=[];va(b);h(l).removeClass(b.asStripeClasses.join(" "));
-h("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);b.bJUI&&(h("th span."+d.sSortIcon+", td span."+d.sSortIcon,g).detach(),h("th, td",g).each(function(){var a=h("div."+d.sSortJUIWrapper,this);h(this).append(a.contents());a.detach()}));f.children().detach();f.append(l);g=a?"remove":"detach";i[g]();k[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),i.css("width",b.sDestroyWidth).removeClass(d.sTable),(p=b.asDestroyStripes.length)&&f.children().each(function(a){h(this).addClass(b.asDestroyStripes[a%
-p])}));c=h.inArray(b,m.settings);-1!==c&&m.settings.splice(c,1)})});h.each(["column","row","cell"],function(a,b){p(b+"s().every()",function(a){var d=this.selector.opts,e=this;return this.iterator(b,function(f,g,h,i,n){a.call(e[b](g,"cell"===b?h:d,"cell"===b?d:k),g,h,i,n)})})});p("i18n()",function(a,b,c){var d=this.context[0],a=Q(a)(d.oLanguage);a===k&&(a=b);c!==k&&h.isPlainObject(a)&&(a=a[c]!==k?a[c]:a._);return a.replace("%d",c)});m.version="1.10.12";m.settings=[];m.models={};m.models.oSearch={bCaseInsensitive:!0,
-sSearch:"",bRegex:!1,bSmart:!0};m.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};m.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,
-sTitle:null,sType:null,sWidth:null,sWidthOrig:null};m.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bJQueryUI:!1,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,
-fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===
-a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",
-sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:h.extend({},m.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",
-renderer:null,rowId:"DT_RowId"};X(m.defaults);m.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};X(m.defaults.column);m.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,
-bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],
-aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:k,oAjaxData:k,
-fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,bJUI:null,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==y(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==y(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=
-this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};m.ext=v={buttons:{},classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},
-header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:m.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:m.version};h.extend(v,{afnFiltering:v.search,aTypes:v.type.detect,ofnSearch:v.type.search,oSort:v.type.order,afnSortData:v.order,aoFeatures:v.feature,oApi:v.internal,oStdClasses:v.classes,oPagination:v.pager});h.extend(m.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",
-sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",
-sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""});var Ca="",Ca="",H=Ca+"ui-state-default",ia=Ca+"css_right ui-icon ui-icon-",Xb=Ca+"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix";h.extend(m.ext.oJUIClasses,
-m.ext.classes,{sPageButton:"fg-button ui-button "+H,sPageButtonActive:"ui-state-disabled",sPageButtonDisabled:"ui-state-disabled",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sSortAsc:H+" sorting_asc",sSortDesc:H+" sorting_desc",sSortable:H+" sorting",sSortableAsc:H+" sorting_asc_disabled",sSortableDesc:H+" sorting_desc_disabled",sSortableNone:H+" sorting_disabled",sSortJUIAsc:ia+"triangle-1-n",sSortJUIDesc:ia+"triangle-1-s",sSortJUI:ia+"carat-2-n-s",
-sSortJUIAscAllowed:ia+"carat-1-n",sSortJUIDescAllowed:ia+"carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sSortIcon:"DataTables_sort_icon",sScrollHead:"dataTables_scrollHead "+H,sScrollFoot:"dataTables_scrollFoot "+H,sHeaderTH:H,sFooterTH:H,sJUIHeader:Xb+" ui-corner-tl ui-corner-tr",sJUIFooter:Xb+" ui-corner-bl ui-corner-br"});var Mb=m.ext.pager;h.extend(Mb,{simple:function(){return["previous","next"]},full:function(){return["first","previous","next","last"]},numbers:function(a,b){return[ya(a,
-b)]},simple_numbers:function(a,b){return["previous",ya(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ya(a,b),"next","last"]},_numbers:ya,numbers_length:7});h.extend(!0,m.ext.renderer,{pageButton:{_:function(a,b,c,d,e,f){var g=a.oClasses,j=a.oLanguage.oPaginate,i=a.oLanguage.oAria.paginate||{},k,l,m=0,p=function(b,d){var o,r,u,s,v=function(b){Ta(a,b.data.action,true)};o=0;for(r=d.length;o<r;o++){s=d[o];if(h.isArray(s)){u=h("<"+(s.DT_el||"div")+"/>").appendTo(b);p(u,s)}else{k=null;
-l="";switch(s){case "ellipsis":b.append('<span class="ellipsis">&#x2026;</span>');break;case "first":k=j.sFirst;l=s+(e>0?"":" "+g.sPageButtonDisabled);break;case "previous":k=j.sPrevious;l=s+(e>0?"":" "+g.sPageButtonDisabled);break;case "next":k=j.sNext;l=s+(e<f-1?"":" "+g.sPageButtonDisabled);break;case "last":k=j.sLast;l=s+(e<f-1?"":" "+g.sPageButtonDisabled);break;default:k=s+1;l=e===s?g.sPageButtonActive:""}if(k!==null){u=h("<a>",{"class":g.sPageButton+" "+l,"aria-controls":a.sTableId,"aria-label":i[s],
-"data-dt-idx":m,tabindex:a.iTabIndex,id:c===0&&typeof s==="string"?a.sTableId+"_"+s:null}).html(k).appendTo(b);Wa(u,{action:s},v);m++}}}},r;try{r=h(b).find(I.activeElement).data("dt-idx")}catch(o){}p(h(b).empty(),d);r&&h(b).find("[data-dt-idx="+r+"]").focus()}}});h.extend(m.ext.type.detect,[function(a,b){var c=b.oLanguage.sDecimal;return Za(a,c)?"num"+c:null},function(a){if(a&&!(a instanceof Date)&&(!ac.test(a)||!bc.test(a)))return null;var b=Date.parse(a);return null!==b&&!isNaN(b)||M(a)?"date":
-null},function(a,b){var c=b.oLanguage.sDecimal;return Za(a,c,!0)?"num-fmt"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Rb(a,c)?"html-num"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Rb(a,c,!0)?"html-num-fmt"+c:null},function(a){return M(a)||"string"===typeof a&&-1!==a.indexOf("<")?"html":null}]);h.extend(m.ext.type.search,{html:function(a){return M(a)?a:"string"===typeof a?a.replace(Ob," ").replace(Aa,""):""},string:function(a){return M(a)?a:"string"===typeof a?a.replace(Ob,
-" "):a}});var za=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=Qb(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};h.extend(v.type.order,{"date-pre":function(a){return Date.parse(a)||0},"html-pre":function(a){return M(a)?"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return M(a)?"":"string"===typeof a?a.toLowerCase():!a.toString?"":a.toString()},"string-asc":function(a,b){return a<b?-1:a>b?1:0},"string-desc":function(a,
-b){return a<b?1:a>b?-1:0}});db("");h.extend(!0,m.ext.renderer,{header:{_:function(a,b,c,d){h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(c.sSortingClass+" "+d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass)}})},jqueryui:function(a,b,c,d){h("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(h("<span/>").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);h(a.nTable).on("order.dt.DT",function(e,
-f,g,h){if(a===f){e=c.idx;b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass);b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass(h[e]=="asc"?d.sSortJUIAsc:h[e]=="desc"?d.sSortJUIDesc:c.sSortingClassJUI)}})}}});var Yb=function(a){return"string"===typeof a?a.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"):a};m.render={number:function(a,
-b,c,d,e){return{display:function(f){if("number"!==typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return Yb(f);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2):"";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g,a)+f+(e||"")}}},text:function(){return{display:Yb}}};h.extend(m.ext.internal,{_fnExternApiFunc:Nb,_fnBuildAjax:ra,_fnAjaxUpdate:lb,_fnAjaxParameters:ub,_fnAjaxUpdateDraw:vb,_fnAjaxDataSrc:sa,_fnAddColumn:Ea,_fnColumnOptions:ja,
-_fnAdjustColumnSizing:Y,_fnVisibleToColumnIndex:Z,_fnColumnIndexToVisible:$,_fnVisbleColumns:aa,_fnGetColumns:la,_fnColumnTypes:Ga,_fnApplyColumnDefs:ib,_fnHungarianMap:X,_fnCamelToHungarian:K,_fnLanguageCompat:Da,_fnBrowserDetect:gb,_fnAddData:N,_fnAddTr:ma,_fnNodeToDataIndex:function(a,b){return b._DT_RowIndex!==k?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return h.inArray(c,a.aoData[b].anCells)},_fnGetCellData:B,_fnSetCellData:jb,_fnSplitObjNotation:Ja,_fnGetObjectDataFn:Q,_fnSetObjectDataFn:R,
-_fnGetDataMaster:Ka,_fnClearTable:na,_fnDeleteIndex:oa,_fnInvalidate:ca,_fnGetRowElements:Ia,_fnCreateTr:Ha,_fnBuildHead:kb,_fnDrawHead:ea,_fnDraw:O,_fnReDraw:T,_fnAddOptionsHtml:nb,_fnDetectHeader:da,_fnGetUniqueThs:qa,_fnFeatureHtmlFilter:pb,_fnFilterComplete:fa,_fnFilterCustom:yb,_fnFilterColumn:xb,_fnFilter:wb,_fnFilterCreateSearch:Pa,_fnEscapeRegex:Qa,_fnFilterData:zb,_fnFeatureHtmlInfo:sb,_fnUpdateInfo:Cb,_fnInfoMacros:Db,_fnInitialise:ga,_fnInitComplete:ta,_fnLengthChange:Ra,_fnFeatureHtmlLength:ob,
-_fnFeatureHtmlPaginate:tb,_fnPageChange:Ta,_fnFeatureHtmlProcessing:qb,_fnProcessingDisplay:C,_fnFeatureHtmlTable:rb,_fnScrollDraw:ka,_fnApplyToChildren:J,_fnCalculateColumnWidths:Fa,_fnThrottle:Oa,_fnConvertToWidth:Fb,_fnGetWidestNode:Gb,_fnGetMaxLenString:Hb,_fnStringToCss:x,_fnSortFlatten:V,_fnSort:mb,_fnSortAria:Jb,_fnSortListener:Va,_fnSortAttachListener:Ma,_fnSortingClasses:va,_fnSortData:Ib,_fnSaveState:wa,_fnLoadState:Kb,_fnSettingsFromNode:xa,_fnLog:L,_fnMap:E,_fnBindAction:Wa,_fnCallbackReg:z,
-_fnCallbackFire:u,_fnLengthOverflow:Sa,_fnRenderer:Na,_fnDataSource:y,_fnRowAttributes:La,_fnCalculateEnd:function(){}});h.fn.dataTable=m;m.$=h;h.fn.dataTableSettings=m.settings;h.fn.dataTableExt=m.ext;h.fn.DataTable=function(a){return h(this).dataTable(a).api()};h.each(m,function(a,b){h.fn.DataTable[a]=b});return h.fn.dataTable});
diff --git a/wqflask/wqflask/static/new/packages/DataTables/js/jquery.js b/wqflask/wqflask/static/new/packages/DataTables/js/jquery.js
deleted file mode 100644
index 71b96edb..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/js/jquery.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*! jQuery v1.12.0 | (c) jQuery Foundation | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=R.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;
-return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.rnamespace||a.rnamespace.test(g.namespace))&&(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(b,c,e){var f=!0,g="width"===c?b.offsetWidth:b.offsetHeight,h=Ra(b),i=l.boxSizing&&"border-box"===n.css(b,"boxSizing",!1,h);if(d.msFullscreenElement&&a.top!==a&&b.getClientRects().length&&(g=Math.round(100*b.getBoundingClientRect()[c])),0>=g||null==g){if(g=Sa(b,c,h),(0>g||null==g)&&(g=b.style[c]),Oa.test(g))return g;f=i&&(l.boxSizingReliable()||g===b.style[c]),g=parseFloat(g)||0}return g+eb(b,c,e||(i?"border":"content"),f,h)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{
-marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb,tb,ub=n.expr.attrHandle,vb=/^(?:checked|selected)$/i,wb=l.getSetAttribute,xb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?tb:sb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?xb&&wb||!vb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(wb?c:d)}}),tb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):xb&&wb||!vb.test(c)?a.setAttribute(!wb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ub[b]||n.find.attr;xb&&wb||!vb.test(b)?ub[b]=function(a,b,d){var e,f;return d||(f=ub[b],ub[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ub[b]=f),e}:ub[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),xb&&wb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):sb&&sb.set(a,b,c)}}),wb||(sb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ub.id=ub.name=ub.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:sb.set},n.attrHooks.contenteditable={set:function(a,b,c){sb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var yb=/^(?:input|select|textarea|button|object)$/i,zb=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):yb.test(a.nodeName)||zb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Ab=/[\t\r\n\f]/g;function Bb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Bb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Bb(c),d=1===c.nodeType&&(" "+e+" ").replace(Ab," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Bb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Bb(c),d=1===c.nodeType&&(" "+e+" ").replace(Ab," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Bb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(void 0===a||"boolean"===c)&&(b=Bb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Bb(c)+" ").replace(Ab," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Cb=a.location,Db=n.now(),Eb=/\?/,Fb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Fb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Gb=/#.*$/,Hb=/([?&])_=[^&]*/,Ib=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Jb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Kb=/^(?:GET|HEAD)$/,Lb=/^\/\//,Mb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Nb={},Ob={},Pb="*/".concat("*"),Qb=Cb.href,Rb=Mb.exec(Qb.toLowerCase())||[];function Sb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Tb(a,b,c,d){var e={},f=a===Ob;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ub(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Vb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Wb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Qb,type:"GET",isLocal:Jb.test(Rb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Pb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ub(Ub(a,n.ajaxSettings),b):Ub(n.ajaxSettings,a)},ajaxPrefilter:Sb(Nb),ajaxTransport:Sb(Ob),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Ib.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Qb)+"").replace(Gb,"").replace(Lb,Rb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Mb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Rb[1]&&d[2]===Rb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Rb[3]||("http:"===Rb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Tb(Nb,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Kb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Eb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Hb.test(f)?f.replace(Hb,"$1_="+Db++):f+(Eb.test(f)?"&":"?")+"_="+Db++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Pb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Tb(Ob,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Vb(l,w,d)),v=Wb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,(b||!y)&&(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Xb(a){return a.style&&a.style.display||n.css(a,"display")}function Yb(a){while(a&&1===a.nodeType){if("none"===Xb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Yb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Zb=/%20/g,$b=/\[\]$/,_b=/\r?\n/g,ac=/^(?:submit|button|image|reset|file)$/i,bc=/^(?:input|select|textarea|keygen)/i;function cc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||$b.test(a)?d(a,e):cc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)cc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)cc(c,a[c],b,e);return d.join("&").replace(Zb,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&bc.test(this.nodeName)&&!ac.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(_b,"\r\n")}}):{name:b.name,value:c.replace(_b,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?hc():d.documentMode>8?gc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&gc()||hc()}:gc;var dc=0,ec={},fc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in ec)ec[a](void 0,!0)}),l.cors=!!fc&&"withCredentials"in fc,fc=l.ajax=!!fc,fc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++dc;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete ec[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=ec[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function gc(){try{return new a.XMLHttpRequest}catch(b){}}function hc(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ic=[],jc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ic.pop()||n.expando+"_"+Db++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(jc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&jc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(jc,"$1"+e):b.jsonp!==!1&&(b.url+=(Eb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ic.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),l.createHTMLDocument=function(){if(!d.implementation.createHTMLDocument)return!1;var a=d.implementation.createHTMLDocument("");return a.body.innerHTML="<form></form><form></form>",2===a.body.childNodes.length}(),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||(l.createHTMLDocument?d.implementation.createHTMLDocument(""):d);var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var kc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&kc)return kc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(g,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function lc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=lc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0)-a.scrollTop(),c.left+=n.css(a[0],"borderLeftWidth",!0)-a.scrollLeft()),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=lc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){
-n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var mc=a.jQuery,nc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=nc),b&&a.jQuery===n&&(a.jQuery=mc),n},b||(a.jQuery=a.$=n),n}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/DataTables.js b/wqflask/wqflask/static/new/packages/DataTables/src/DataTables.js
deleted file mode 100644
index 461a6e3d..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/DataTables.js
+++ /dev/null
@@ -1,284 +0,0 @@
-/**
- * @summary DataTables
- * @description Paginate, search and sort HTML tables
- * @version 1.9.4
- * @file jquery.dataTables.js
- * @author Allan Jardine (www.sprymedia.co.uk)
- * @contact www.sprymedia.co.uk/contact
- *
- * @copyright Copyright 2008-2012 Allan Jardine, all rights reserved.
- *
- * This source file is free software, under either the GPL v2 license or a
- * BSD style license, available at:
- * http://datatables.net/license_gpl2
- * http://datatables.net/license_bsd
- *
- * This source file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
- *
- * For details please refer to: http://www.datatables.net
- */
-
-/*jslint evil: true, undef: true, browser: true */
-/*globals $, jQuery,define,_fnExternApiFunc,_fnInitialise,_fnInitComplete,_fnLanguageCompat,_fnAddColumn,_fnColumnOptions,_fnAddData,_fnCreateTr,_fnGatherData,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnServerParams,_fnAddOptionsHtml,_fnFeatureHtmlTable,_fnScrollDraw,_fnAdjustColumnSizing,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnBuildSearchArray,_fnBuildSearchRow,_fnFilterCreateSearch,_fnDataToSearch,_fnSort,_fnSortAttachListener,_fnSortingClasses,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnFeatureHtmlLength,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnNodeToDataIndex,_fnVisbleColumns,_fnCalculateEnd,_fnConvertToWidth,_fnCalculateColumnWidths,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnDetectType,_fnSettingsFromNode,_fnGetDataMaster,_fnGetTrNodes,_fnGetTdNodes,_fnEscapeRegex,_fnDeleteIndex,_fnReOrderIndex,_fnColumnOrdering,_fnLog,_fnClearTable,_fnSaveState,_fnLoadState,_fnCreateCookie,_fnReadCookie,_fnDetectHeader,_fnGetUniqueThs,_fnScrollBarWidth,_fnApplyToChildren,_fnMap,_fnGetRowData,_fnGetCellData,_fnSetCellData,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnApplyColumnDefs,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnJsonString,_fnRender,_fnNodeToColumnIndex,_fnInfoMacros,_fnBrowserDetect,_fnGetColumns*/
-
-(/** @lends <global> */function( window, document, undefined ) {
-
-(function( factory ) {
- "use strict";
-
- // Define as an AMD module if possible
- if ( typeof define === 'function' && define.amd )
- {
- define( ['jquery'], factory );
- }
- /* Define using browser globals otherwise
- * Prevent multiple instantiations if the script is loaded twice
- */
- else if ( jQuery && !jQuery.fn.dataTable )
- {
- factory( jQuery );
- }
-}
-(/** @lends <global> */function( $ ) {
- "use strict";
- /**
- * DataTables is a plug-in for the jQuery Javascript library. It is a
- * highly flexible tool, based upon the foundations of progressive
- * enhancement, which will add advanced interaction controls to any
- * HTML table. For a full list of features please refer to
- * <a href="http://datatables.net">DataTables.net</a>.
- *
- * Note that the <i>DataTable</i> object is not a global variable but is
- * aliased to <i>jQuery.fn.DataTable</i> and <i>jQuery.fn.dataTable</i> through which
- * it may be accessed.
- *
- * @class
- * @param {object} [oInit={}] Configuration object for DataTables. Options
- * are defined by {@link DataTable.defaults}
- * @requires jQuery 1.3+
- *
- * @example
- * // Basic initialisation
- * $(document).ready( function {
- * $('#example').dataTable();
- * } );
- *
- * @example
- * // Initialisation with configuration options - in this case, disable
- * // pagination and sorting.
- * $(document).ready( function {
- * $('#example').dataTable( {
- * "bPaginate": false,
- * "bSort": false
- * } );
- * } );
- */
- var DataTable = function( oInit )
- {
- require('core.columns.js');
- require('core.data.js');
- require('core.draw.js');
- require('core.ajax.js');
- require('core.filter.js');
- require('core.info.js');
- require('core.init.js');
- require('core.length.js');
- require('core.page.js');
- require('core.processing.js');
- require('core.scrolling.js');
- require('core.sizing.js');
- require('core.sort.js');
- require('core.state.js');
- require('core.support.js');
-
- require('api.methods.js');
- require('api.internal.js');
-
- var _that = this;
- this.each(function() {
- require('core.constructor.js');
- } );
- _that = null;
- return this;
- };
-
- require('api.static.js');
-
- /**
- * Version string for plug-ins to check compatibility. Allowed format is
- * a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and
- * e are optional
- * @member
- * @type string
- * @default Version number
- */
- DataTable.version = "1.9.4";
-
- /**
- * Private data store, containing all of the settings objects that are created for the
- * tables on a given page.
- *
- * Note that the <i>DataTable.settings</i> object is aliased to <i>jQuery.fn.dataTableExt</i>
- * through which it may be accessed and manipulated, or <i>jQuery.fn.dataTable.settings</i>.
- * @member
- * @type array
- * @default []
- * @private
- */
- DataTable.settings = [];
-
- /**
- * Object models container, for the various models that DataTables has available
- * to it. These models define the objects that are used to hold the active state
- * and configuration of the table.
- * @namespace
- */
- DataTable.models = {};
- require('model.ext.js');
- require('model.search.js');
- require('model.row.js');
- require('model.column.js');
- require('model.defaults.js');
- require('model.defaults.columns.js');
- require('model.settings.js');
-
- /**
- * Extension object for DataTables that is used to provide all extension options.
- *
- * Note that the <i>DataTable.ext</i> object is available through
- * <i>jQuery.fn.dataTable.ext</i> where it may be accessed and manipulated. It is
- * also aliased to <i>jQuery.fn.dataTableExt</i> for historic reasons.
- * @namespace
- * @extends DataTable.models.ext
- */
- DataTable.ext = $.extend( true, {}, DataTable.models.ext );
- require('ext.classes.js');
- require('ext.paging.js');
- require('ext.sorting.js');
- require('ext.types.js');
-
- // jQuery aliases
- $.fn.DataTable = DataTable;
- $.fn.dataTable = DataTable;
- $.fn.dataTableSettings = DataTable.settings;
- $.fn.dataTableExt = DataTable.ext;
-
-
- // Information about events fired by DataTables - for documentation.
- /**
- * Draw event, fired whenever the table is redrawn on the page, at the same point as
- * fnDrawCallback. This may be useful for binding events or performing calculations when
- * the table is altered at all.
- * @name DataTable#draw
- * @event
- * @param {event} e jQuery event object
- * @param {object} o DataTables settings object {@link DataTable.models.oSettings}
- */
-
- /**
- * Filter event, fired when the filtering applied to the table (using the build in global
- * global filter, or column filters) is altered.
- * @name DataTable#filter
- * @event
- * @param {event} e jQuery event object
- * @param {object} o DataTables settings object {@link DataTable.models.oSettings}
- */
-
- /**
- * Page change event, fired when the paging of the table is altered.
- * @name DataTable#page
- * @event
- * @param {event} e jQuery event object
- * @param {object} o DataTables settings object {@link DataTable.models.oSettings}
- */
-
- /**
- * Sort event, fired when the sorting applied to the table is altered.
- * @name DataTable#sort
- * @event
- * @param {event} e jQuery event object
- * @param {object} o DataTables settings object {@link DataTable.models.oSettings}
- */
-
- /**
- * DataTables initialisation complete event, fired when the table is fully drawn,
- * including Ajax data loaded, if Ajax data is required.
- * @name DataTable#init
- * @event
- * @param {event} e jQuery event object
- * @param {object} oSettings DataTables settings object
- * @param {object} json The JSON object request from the server - only
- * present if client-side Ajax sourced data is used</li></ol>
- */
-
- /**
- * State save event, fired when the table has changed state a new state save is required.
- * This method allows modification of the state saving object prior to actually doing the
- * save, including addition or other state properties (for plug-ins) or modification
- * of a DataTables core property.
- * @name DataTable#stateSaveParams
- * @event
- * @param {event} e jQuery event object
- * @param {object} oSettings DataTables settings object
- * @param {object} json The state information to be saved
- */
-
- /**
- * State load event, fired when the table is loading state from the stored data, but
- * prior to the settings object being modified by the saved state - allowing modification
- * of the saved state is required or loading of state for a plug-in.
- * @name DataTable#stateLoadParams
- * @event
- * @param {event} e jQuery event object
- * @param {object} oSettings DataTables settings object
- * @param {object} json The saved state information
- */
-
- /**
- * State loaded event, fired when state has been loaded from stored data and the settings
- * object has been modified by the loaded data.
- * @name DataTable#stateLoaded
- * @event
- * @param {event} e jQuery event object
- * @param {object} oSettings DataTables settings object
- * @param {object} json The saved state information
- */
-
- /**
- * Processing event, fired when DataTables is doing some kind of processing (be it,
- * sort, filter or anything else). Can be used to indicate to the end user that
- * there is something happening, or that something has finished.
- * @name DataTable#processing
- * @event
- * @param {event} e jQuery event object
- * @param {object} oSettings DataTables settings object
- * @param {boolean} bShow Flag for if DataTables is doing processing or not
- */
-
- /**
- * Ajax (XHR) event, fired whenever an Ajax request is completed from a request to
- * made to the server for new data (note that this trigger is called in fnServerData,
- * if you override fnServerData and which to use this event, you need to trigger it in
- * you success function).
- * @name DataTable#xhr
- * @event
- * @param {event} e jQuery event object
- * @param {object} o DataTables settings object {@link DataTable.models.oSettings}
- * @param {object} json JSON returned from the server
- */
-
- /**
- * Destroy event, fired when the DataTable is destroyed by calling fnDestroy or passing
- * the bDestroy:true parameter in the initialisation object. This can be used to remove
- * bound events, added DOM nodes, etc.
- * @name DataTable#destroy
- * @event
- * @param {event} e jQuery event object
- * @param {object} o DataTables settings object {@link DataTable.models.oSettings}
- */
-}));
-
-}(window, document));
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/api/api.internal.js b/wqflask/wqflask/static/new/packages/DataTables/src/api/api.internal.js
deleted file mode 100644
index f83605e9..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/api/api.internal.js
+++ /dev/null
@@ -1,130 +0,0 @@
-
-/*
- * This is really a good bit rubbish this method of exposing the internal methods
- * publicly... - To be fixed in 2.0 using methods on the prototype
- */
-
-
-/**
- * Create a wrapper function for exporting an internal functions to an external API.
- * @param {string} sFunc API function name
- * @returns {function} wrapped function
- * @memberof DataTable#oApi
- */
-function _fnExternApiFunc (sFunc)
-{
- return function() {
- var aArgs = [_fnSettingsFromNode(this[DataTable.ext.iApiIndex])].concat(
- Array.prototype.slice.call(arguments) );
- return DataTable.ext.oApi[sFunc].apply( this, aArgs );
- };
-}
-
-
-/**
- * Reference to internal functions for use by plug-in developers. Note that these
- * methods are references to internal functions and are considered to be private.
- * If you use these methods, be aware that they are liable to change between versions
- * (check the upgrade notes).
- * @namespace
- */
-this.oApi = {
- "_fnExternApiFunc": _fnExternApiFunc,
- "_fnInitialise": _fnInitialise,
- "_fnInitComplete": _fnInitComplete,
- "_fnLanguageCompat": _fnLanguageCompat,
- "_fnAddColumn": _fnAddColumn,
- "_fnColumnOptions": _fnColumnOptions,
- "_fnAddData": _fnAddData,
- "_fnCreateTr": _fnCreateTr,
- "_fnGatherData": _fnGatherData,
- "_fnBuildHead": _fnBuildHead,
- "_fnDrawHead": _fnDrawHead,
- "_fnDraw": _fnDraw,
- "_fnReDraw": _fnReDraw,
- "_fnAjaxUpdate": _fnAjaxUpdate,
- "_fnAjaxParameters": _fnAjaxParameters,
- "_fnAjaxUpdateDraw": _fnAjaxUpdateDraw,
- "_fnServerParams": _fnServerParams,
- "_fnAddOptionsHtml": _fnAddOptionsHtml,
- "_fnFeatureHtmlTable": _fnFeatureHtmlTable,
- "_fnScrollDraw": _fnScrollDraw,
- "_fnAdjustColumnSizing": _fnAdjustColumnSizing,
- "_fnFeatureHtmlFilter": _fnFeatureHtmlFilter,
- "_fnFilterComplete": _fnFilterComplete,
- "_fnFilterCustom": _fnFilterCustom,
- "_fnFilterColumn": _fnFilterColumn,
- "_fnFilter": _fnFilter,
- "_fnBuildSearchArray": _fnBuildSearchArray,
- "_fnBuildSearchRow": _fnBuildSearchRow,
- "_fnFilterCreateSearch": _fnFilterCreateSearch,
- "_fnDataToSearch": _fnDataToSearch,
- "_fnSort": _fnSort,
- "_fnSortAttachListener": _fnSortAttachListener,
- "_fnSortingClasses": _fnSortingClasses,
- "_fnFeatureHtmlPaginate": _fnFeatureHtmlPaginate,
- "_fnPageChange": _fnPageChange,
- "_fnFeatureHtmlInfo": _fnFeatureHtmlInfo,
- "_fnUpdateInfo": _fnUpdateInfo,
- "_fnFeatureHtmlLength": _fnFeatureHtmlLength,
- "_fnFeatureHtmlProcessing": _fnFeatureHtmlProcessing,
- "_fnProcessingDisplay": _fnProcessingDisplay,
- "_fnVisibleToColumnIndex": _fnVisibleToColumnIndex,
- "_fnColumnIndexToVisible": _fnColumnIndexToVisible,
- "_fnNodeToDataIndex": _fnNodeToDataIndex,
- "_fnVisbleColumns": _fnVisbleColumns,
- "_fnCalculateEnd": _fnCalculateEnd,
- "_fnConvertToWidth": _fnConvertToWidth,
- "_fnCalculateColumnWidths": _fnCalculateColumnWidths,
- "_fnScrollingWidthAdjust": _fnScrollingWidthAdjust,
- "_fnGetWidestNode": _fnGetWidestNode,
- "_fnGetMaxLenString": _fnGetMaxLenString,
- "_fnStringToCss": _fnStringToCss,
- "_fnDetectType": _fnDetectType,
- "_fnSettingsFromNode": _fnSettingsFromNode,
- "_fnGetDataMaster": _fnGetDataMaster,
- "_fnGetTrNodes": _fnGetTrNodes,
- "_fnGetTdNodes": _fnGetTdNodes,
- "_fnEscapeRegex": _fnEscapeRegex,
- "_fnDeleteIndex": _fnDeleteIndex,
- "_fnReOrderIndex": _fnReOrderIndex,
- "_fnColumnOrdering": _fnColumnOrdering,
- "_fnLog": _fnLog,
- "_fnClearTable": _fnClearTable,
- "_fnSaveState": _fnSaveState,
- "_fnLoadState": _fnLoadState,
- "_fnCreateCookie": _fnCreateCookie,
- "_fnReadCookie": _fnReadCookie,
- "_fnDetectHeader": _fnDetectHeader,
- "_fnGetUniqueThs": _fnGetUniqueThs,
- "_fnScrollBarWidth": _fnScrollBarWidth,
- "_fnApplyToChildren": _fnApplyToChildren,
- "_fnMap": _fnMap,
- "_fnGetRowData": _fnGetRowData,
- "_fnGetCellData": _fnGetCellData,
- "_fnSetCellData": _fnSetCellData,
- "_fnGetObjectDataFn": _fnGetObjectDataFn,
- "_fnSetObjectDataFn": _fnSetObjectDataFn,
- "_fnApplyColumnDefs": _fnApplyColumnDefs,
- "_fnBindAction": _fnBindAction,
- "_fnExtend": _fnExtend,
- "_fnCallbackReg": _fnCallbackReg,
- "_fnCallbackFire": _fnCallbackFire,
- "_fnJsonString": _fnJsonString,
- "_fnRender": _fnRender,
- "_fnNodeToColumnIndex": _fnNodeToColumnIndex,
- "_fnInfoMacros": _fnInfoMacros,
- "_fnBrowserDetect": _fnBrowserDetect,
- "_fnGetColumns": _fnGetColumns
-};
-
-$.extend( DataTable.ext.oApi, this.oApi );
-
-for ( var sFunc in DataTable.ext.oApi )
-{
- if ( sFunc )
- {
- this[sFunc] = _fnExternApiFunc(sFunc);
- }
-}
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/api/api.methods.js b/wqflask/wqflask/static/new/packages/DataTables/src/api/api.methods.js
deleted file mode 100644
index e37cfdb8..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/api/api.methods.js
+++ /dev/null
@@ -1,1294 +0,0 @@
-/**
- * Perform a jQuery selector action on the table's TR elements (from the tbody) and
- * return the resulting jQuery object.
- * @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
- * @param {object} [oOpts] Optional parameters for modifying the rows to be included
- * @param {string} [oOpts.filter=none] Select TR elements that meet the current filter
- * criterion ("applied") or all TR elements (i.e. no filter).
- * @param {string} [oOpts.order=current] Order of the TR elements in the processed array.
- * Can be either 'current', whereby the current sorting of the table is used, or
- * 'original' whereby the original order the data was read into the table is used.
- * @param {string} [oOpts.page=all] Limit the selection to the currently displayed page
- * ("current") or not ("all"). If 'current' is given, then order is assumed to be
- * 'current' and filter is 'applied', regardless of what they might be given as.
- * @returns {object} jQuery object, filtered by the given selector.
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Highlight every second row
- * oTable.$('tr:odd').css('backgroundColor', 'blue');
- * } );
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Filter to rows with 'Webkit' in them, add a background colour and then
- * // remove the filter, thus highlighting the 'Webkit' rows only.
- * oTable.fnFilter('Webkit');
- * oTable.$('tr', {"filter": "applied"}).css('backgroundColor', 'blue');
- * oTable.fnFilter('');
- * } );
- */
-this.$ = function ( sSelector, oOpts )
-{
- var i, iLen, a = [], tr;
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
- var aoData = oSettings.aoData;
- var aiDisplay = oSettings.aiDisplay;
- var aiDisplayMaster = oSettings.aiDisplayMaster;
-
- if ( !oOpts )
- {
- oOpts = {};
- }
-
- oOpts = $.extend( {}, {
- "filter": "none", // applied
- "order": "current", // "original"
- "page": "all" // current
- }, oOpts );
-
- // Current page implies that order=current and fitler=applied, since it is fairly
- // senseless otherwise
- if ( oOpts.page == 'current' )
- {
- for ( i=oSettings._iDisplayStart, iLen=oSettings.fnDisplayEnd() ; i<iLen ; i++ )
- {
- tr = aoData[ aiDisplay[i] ].nTr;
- if ( tr )
- {
- a.push( tr );
- }
- }
- }
- else if ( oOpts.order == "current" && oOpts.filter == "none" )
- {
- for ( i=0, iLen=aiDisplayMaster.length ; i<iLen ; i++ )
- {
- tr = aoData[ aiDisplayMaster[i] ].nTr;
- if ( tr )
- {
- a.push( tr );
- }
- }
- }
- else if ( oOpts.order == "current" && oOpts.filter == "applied" )
- {
- for ( i=0, iLen=aiDisplay.length ; i<iLen ; i++ )
- {
- tr = aoData[ aiDisplay[i] ].nTr;
- if ( tr )
- {
- a.push( tr );
- }
- }
- }
- else if ( oOpts.order == "original" && oOpts.filter == "none" )
- {
- for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
- {
- tr = aoData[ i ].nTr ;
- if ( tr )
- {
- a.push( tr );
- }
- }
- }
- else if ( oOpts.order == "original" && oOpts.filter == "applied" )
- {
- for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
- {
- tr = aoData[ i ].nTr;
- if ( $.inArray( i, aiDisplay ) !== -1 && tr )
- {
- a.push( tr );
- }
- }
- }
- else
- {
- _fnLog( oSettings, 1, "Unknown selection options" );
- }
-
- /* We need to filter on the TR elements and also 'find' in their descendants
- * to make the selector act like it would in a full table - so we need
- * to build both results and then combine them together
- */
- var jqA = $(a);
- var jqTRs = jqA.filter( sSelector );
- var jqDescendants = jqA.find( sSelector );
-
- return $( [].concat($.makeArray(jqTRs), $.makeArray(jqDescendants)) );
-};
-
-
-/**
- * Almost identical to $ in operation, but in this case returns the data for the matched
- * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes
- * rather than any descendants, so the data can be obtained for the row/cell. If matching
- * rows are found, the data returned is the original data array/object that was used to
- * create the row (or a generated array if from a DOM source).
- *
- * This method is often useful in-combination with $ where both functions are given the
- * same parameters and the array indexes will match identically.
- * @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
- * @param {object} [oOpts] Optional parameters for modifying the rows to be included
- * @param {string} [oOpts.filter=none] Select elements that meet the current filter
- * criterion ("applied") or all elements (i.e. no filter).
- * @param {string} [oOpts.order=current] Order of the data in the processed array.
- * Can be either 'current', whereby the current sorting of the table is used, or
- * 'original' whereby the original order the data was read into the table is used.
- * @param {string} [oOpts.page=all] Limit the selection to the currently displayed page
- * ("current") or not ("all"). If 'current' is given, then order is assumed to be
- * 'current' and filter is 'applied', regardless of what they might be given as.
- * @returns {array} Data for the matched elements. If any elements, as a result of the
- * selector, were not TR, TD or TH elements in the DataTable, they will have a null
- * entry in the array.
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Get the data from the first row in the table
- * var data = oTable._('tr:first');
- *
- * // Do something useful with the data
- * alert( "First cell is: "+data[0] );
- * } );
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Filter to 'Webkit' and get all data for
- * oTable.fnFilter('Webkit');
- * var data = oTable._('tr', {"filter": "applied"});
- *
- * // Do something with the data
- * alert( data.length+" rows matched the filter" );
- * } );
- */
-this._ = function ( sSelector, oOpts )
-{
- var aOut = [];
- var i, iLen, iIndex;
- var aTrs = this.$( sSelector, oOpts );
-
- for ( i=0, iLen=aTrs.length ; i<iLen ; i++ )
- {
- aOut.push( this.fnGetData(aTrs[i]) );
- }
-
- return aOut;
-};
-
-
-/**
- * Add a single new row or multiple rows of data to the table. Please note
- * that this is suitable for client-side processing only - if you are using
- * server-side processing (i.e. "bServerSide": true), then to add data, you
- * must add it to the data source, i.e. the server-side, through an Ajax call.
- * @param {array|object} mData The data to be added to the table. This can be:
- * <ul>
- * <li>1D array of data - add a single row with the data provided</li>
- * <li>2D array of arrays - add multiple rows in a single call</li>
- * <li>object - data object when using <i>mData</i></li>
- * <li>array of objects - multiple data objects when using <i>mData</i></li>
- * </ul>
- * @param {bool} [bRedraw=true] redraw the table or not
- * @returns {array} An array of integers, representing the list of indexes in
- * <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to
- * the table.
- * @dtopt API
- *
- * @example
- * // Global var for counter
- * var giCount = 2;
- *
- * $(document).ready(function() {
- * $('#example').dataTable();
- * } );
- *
- * function fnClickAddRow() {
- * $('#example').dataTable().fnAddData( [
- * giCount+".1",
- * giCount+".2",
- * giCount+".3",
- * giCount+".4" ]
- * );
- *
- * giCount++;
- * }
- */
-this.fnAddData = function( mData, bRedraw )
-{
- if ( mData.length === 0 )
- {
- return [];
- }
-
- var aiReturn = [];
- var iTest;
-
- /* Find settings from table node */
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-
- /* Check if we want to add multiple rows or not */
- if ( typeof mData[0] === "object" && mData[0] !== null )
- {
- for ( var i=0 ; i<mData.length ; i++ )
- {
- iTest = _fnAddData( oSettings, mData[i] );
- if ( iTest == -1 )
- {
- return aiReturn;
- }
- aiReturn.push( iTest );
- }
- }
- else
- {
- iTest = _fnAddData( oSettings, mData );
- if ( iTest == -1 )
- {
- return aiReturn;
- }
- aiReturn.push( iTest );
- }
-
- oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-
- if ( bRedraw === undefined || bRedraw )
- {
- _fnReDraw( oSettings );
- }
- return aiReturn;
-};
-
-
-/**
- * This function will make DataTables recalculate the column sizes, based on the data
- * contained in the table and the sizes applied to the columns (in the DOM, CSS or
- * through the sWidth parameter). This can be useful when the width of the table's
- * parent element changes (for example a window resize).
- * @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable( {
- * "sScrollY": "200px",
- * "bPaginate": false
- * } );
- *
- * $(window).bind('resize', function () {
- * oTable.fnAdjustColumnSizing();
- * } );
- * } );
- */
-this.fnAdjustColumnSizing = function ( bRedraw )
-{
- var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]);
- _fnAdjustColumnSizing( oSettings );
-
- if ( bRedraw === undefined || bRedraw )
- {
- this.fnDraw( false );
- }
- else if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" )
- {
- /* If not redrawing, but scrolling, we want to apply the new column sizes anyway */
- this.oApi._fnScrollDraw(oSettings);
- }
-};
-
-
-/**
- * Quickly and simply clear a table
- * @param {bool} [bRedraw=true] redraw the table or not
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)
- * oTable.fnClearTable();
- * } );
- */
-this.fnClearTable = function( bRedraw )
-{
- /* Find settings from table node */
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
- _fnClearTable( oSettings );
-
- if ( bRedraw === undefined || bRedraw )
- {
- _fnDraw( oSettings );
- }
-};
-
-
-/**
- * The exact opposite of 'opening' a row, this function will close any rows which
- * are currently 'open'.
- * @param {node} nTr the table row to 'close'
- * @returns {int} 0 on success, or 1 if failed (can't find the row)
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable;
- *
- * // 'open' an information row when a row is clicked on
- * $('#example tbody tr').click( function () {
- * if ( oTable.fnIsOpen(this) ) {
- * oTable.fnClose( this );
- * } else {
- * oTable.fnOpen( this, "Temporary row opened", "info_row" );
- * }
- * } );
- *
- * oTable = $('#example').dataTable();
- * } );
- */
-this.fnClose = function( nTr )
-{
- /* Find settings from table node */
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-
- for ( var i=0 ; i<oSettings.aoOpenRows.length ; i++ )
- {
- if ( oSettings.aoOpenRows[i].nParent == nTr )
- {
- var nTrParent = oSettings.aoOpenRows[i].nTr.parentNode;
- if ( nTrParent )
- {
- /* Remove it if it is currently on display */
- nTrParent.removeChild( oSettings.aoOpenRows[i].nTr );
- }
- oSettings.aoOpenRows.splice( i, 1 );
- return 0;
- }
- }
- return 1;
-};
-
-
-/**
- * Remove a row for the table
- * @param {mixed} mTarget The index of the row from aoData to be deleted, or
- * the TR element you want to delete
- * @param {function|null} [fnCallBack] Callback function
- * @param {bool} [bRedraw=true] Redraw the table or not
- * @returns {array} The row that was deleted
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Immediately remove the first row
- * oTable.fnDeleteRow( 0 );
- * } );
- */
-this.fnDeleteRow = function( mTarget, fnCallBack, bRedraw )
-{
- /* Find settings from table node */
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
- var i, iLen, iAODataIndex;
-
- iAODataIndex = (typeof mTarget === 'object') ?
- _fnNodeToDataIndex(oSettings, mTarget) : mTarget;
-
- /* Return the data array from this row */
- var oData = oSettings.aoData.splice( iAODataIndex, 1 );
-
- /* Update the _DT_RowIndex parameter */
- for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
- {
- if ( oSettings.aoData[i].nTr !== null )
- {
- oSettings.aoData[i].nTr._DT_RowIndex = i;
- }
- }
-
- /* Remove the target row from the search array */
- var iDisplayIndex = $.inArray( iAODataIndex, oSettings.aiDisplay );
- oSettings.asDataSearch.splice( iDisplayIndex, 1 );
-
- /* Delete from the display arrays */
- _fnDeleteIndex( oSettings.aiDisplayMaster, iAODataIndex );
- _fnDeleteIndex( oSettings.aiDisplay, iAODataIndex );
-
- /* If there is a user callback function - call it */
- if ( typeof fnCallBack === "function" )
- {
- fnCallBack.call( this, oSettings, oData );
- }
-
- /* Check for an 'overflow' they case for displaying the table */
- if ( oSettings._iDisplayStart >= oSettings.fnRecordsDisplay() )
- {
- oSettings._iDisplayStart -= oSettings._iDisplayLength;
- if ( oSettings._iDisplayStart < 0 )
- {
- oSettings._iDisplayStart = 0;
- }
- }
-
- if ( bRedraw === undefined || bRedraw )
- {
- _fnCalculateEnd( oSettings );
- _fnDraw( oSettings );
- }
-
- return oData;
-};
-
-
-/**
- * Restore the table to it's original state in the DOM by removing all of DataTables
- * enhancements, alterations to the DOM structure of the table and event listeners.
- * @param {boolean} [bRemove=false] Completely remove the table from the DOM
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * // This example is fairly pointless in reality, but shows how fnDestroy can be used
- * var oTable = $('#example').dataTable();
- * oTable.fnDestroy();
- * } );
- */
-this.fnDestroy = function ( bRemove )
-{
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
- var nOrig = oSettings.nTableWrapper.parentNode;
- var nBody = oSettings.nTBody;
- var i, iLen;
-
- bRemove = (bRemove===undefined) ? false : bRemove;
-
- /* Flag to note that the table is currently being destroyed - no action should be taken */
- oSettings.bDestroying = true;
-
- /* Fire off the destroy callbacks for plug-ins etc */
- _fnCallbackFire( oSettings, "aoDestroyCallback", "destroy", [oSettings] );
-
- /* If the table is not being removed, restore the hidden columns */
- if ( !bRemove )
- {
- for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
- {
- if ( oSettings.aoColumns[i].bVisible === false )
- {
- this.fnSetColumnVis( i, true );
- }
- }
- }
-
- /* Blitz all DT events */
- $(oSettings.nTableWrapper).find('*').andSelf().unbind('.DT');
-
- /* If there is an 'empty' indicator row, remove it */
- $('tbody>tr>td.'+oSettings.oClasses.sRowEmpty, oSettings.nTable).parent().remove();
-
- /* When scrolling we had to break the table up - restore it */
- if ( oSettings.nTable != oSettings.nTHead.parentNode )
- {
- $(oSettings.nTable).children('thead').remove();
- oSettings.nTable.appendChild( oSettings.nTHead );
- }
-
- if ( oSettings.nTFoot && oSettings.nTable != oSettings.nTFoot.parentNode )
- {
- $(oSettings.nTable).children('tfoot').remove();
- oSettings.nTable.appendChild( oSettings.nTFoot );
- }
-
- /* Remove the DataTables generated nodes, events and classes */
- oSettings.nTable.parentNode.removeChild( oSettings.nTable );
- $(oSettings.nTableWrapper).remove();
-
- oSettings.aaSorting = [];
- oSettings.aaSortingFixed = [];
- _fnSortingClasses( oSettings );
-
- $(_fnGetTrNodes( oSettings )).removeClass( oSettings.asStripeClasses.join(' ') );
-
- $('th, td', oSettings.nTHead).removeClass( [
- oSettings.oClasses.sSortable,
- oSettings.oClasses.sSortableAsc,
- oSettings.oClasses.sSortableDesc,
- oSettings.oClasses.sSortableNone ].join(' ')
- );
- if ( oSettings.bJUI )
- {
- $('th span.'+oSettings.oClasses.sSortIcon
- + ', td span.'+oSettings.oClasses.sSortIcon, oSettings.nTHead).remove();
-
- $('th, td', oSettings.nTHead).each( function () {
- var jqWrapper = $('div.'+oSettings.oClasses.sSortJUIWrapper, this);
- var kids = jqWrapper.contents();
- $(this).append( kids );
- jqWrapper.remove();
- } );
- }
-
- /* Add the TR elements back into the table in their original order */
- if ( !bRemove && oSettings.nTableReinsertBefore )
- {
- nOrig.insertBefore( oSettings.nTable, oSettings.nTableReinsertBefore );
- }
- else if ( !bRemove )
- {
- nOrig.appendChild( oSettings.nTable );
- }
-
- for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
- {
- if ( oSettings.aoData[i].nTr !== null )
- {
- nBody.appendChild( oSettings.aoData[i].nTr );
- }
- }
-
- /* Restore the width of the original table */
- if ( oSettings.oFeatures.bAutoWidth === true )
- {
- oSettings.nTable.style.width = _fnStringToCss(oSettings.sDestroyWidth);
- }
-
- /* If the were originally stripe classes - then we add them back here. Note
- * this is not fool proof (for example if not all rows had stripe classes - but
- * it's a good effort without getting carried away
- */
- iLen = oSettings.asDestroyStripes.length;
- if (iLen)
- {
- var anRows = $(nBody).children('tr');
- for ( i=0 ; i<iLen ; i++ )
- {
- anRows.filter(':nth-child(' + iLen + 'n + ' + i + ')').addClass( oSettings.asDestroyStripes[i] );
- }
- }
-
- /* Remove the settings object from the settings array */
- for ( i=0, iLen=DataTable.settings.length ; i<iLen ; i++ )
- {
- if ( DataTable.settings[i] == oSettings )
- {
- DataTable.settings.splice( i, 1 );
- }
- }
-
- /* End it all */
- oSettings = null;
- oInit = null;
-};
-
-
-/**
- * Redraw the table
- * @param {bool} [bComplete=true] Re-filter and resort (if enabled) the table before the draw.
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Re-draw the table - you wouldn't want to do it here, but it's an example :-)
- * oTable.fnDraw();
- * } );
- */
-this.fnDraw = function( bComplete )
-{
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
- if ( bComplete === false )
- {
- _fnCalculateEnd( oSettings );
- _fnDraw( oSettings );
- }
- else
- {
- _fnReDraw( oSettings );
- }
-};
-
-
-/**
- * Filter the input based on data
- * @param {string} sInput String to filter the table on
- * @param {int|null} [iColumn] Column to limit filtering to
- * @param {bool} [bRegex=false] Treat as regular expression or not
- * @param {bool} [bSmart=true] Perform smart filtering or not
- * @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)
- * @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Sometime later - filter...
- * oTable.fnFilter( 'test string' );
- * } );
- */
-this.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )
-{
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-
- if ( !oSettings.oFeatures.bFilter )
- {
- return;
- }
-
- if ( bRegex === undefined || bRegex === null )
- {
- bRegex = false;
- }
-
- if ( bSmart === undefined || bSmart === null )
- {
- bSmart = true;
- }
-
- if ( bShowGlobal === undefined || bShowGlobal === null )
- {
- bShowGlobal = true;
- }
-
- if ( bCaseInsensitive === undefined || bCaseInsensitive === null )
- {
- bCaseInsensitive = true;
- }
-
- if ( iColumn === undefined || iColumn === null )
- {
- /* Global filter */
- _fnFilterComplete( oSettings, {
- "sSearch":sInput+"",
- "bRegex": bRegex,
- "bSmart": bSmart,
- "bCaseInsensitive": bCaseInsensitive
- }, 1 );
-
- if ( bShowGlobal && oSettings.aanFeatures.f )
- {
- var n = oSettings.aanFeatures.f;
- for ( var i=0, iLen=n.length ; i<iLen ; i++ )
- {
- // IE9 throws an 'unknown error' if document.activeElement is used
- // inside an iframe or frame...
- try {
- if ( n[i]._DT_Input != document.activeElement )
- {
- $(n[i]._DT_Input).val( sInput );
- }
- }
- catch ( e ) {
- $(n[i]._DT_Input).val( sInput );
- }
- }
- }
- }
- else
- {
- /* Single column filter */
- $.extend( oSettings.aoPreSearchCols[ iColumn ], {
- "sSearch": sInput+"",
- "bRegex": bRegex,
- "bSmart": bSmart,
- "bCaseInsensitive": bCaseInsensitive
- } );
- _fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 );
- }
-};
-
-
-/**
- * Get the data for the whole table, an individual row or an individual cell based on the
- * provided parameters.
- * @param {int|node} [mRow] A TR row node, TD/TH cell node or an integer. If given as
- * a TR node then the data source for the whole row will be returned. If given as a
- * TD/TH cell node then iCol will be automatically calculated and the data for the
- * cell returned. If given as an integer, then this is treated as the aoData internal
- * data index for the row (see fnGetPosition) and the data for that row used.
- * @param {int} [iCol] Optional column index that you want the data of.
- * @returns {array|object|string} If mRow is undefined, then the data for all rows is
- * returned. If mRow is defined, just data for that row, and is iCol is
- * defined, only data for the designated cell is returned.
- * @dtopt API
- *
- * @example
- * // Row data
- * $(document).ready(function() {
- * oTable = $('#example').dataTable();
- *
- * oTable.$('tr').click( function () {
- * var data = oTable.fnGetData( this );
- * // ... do something with the array / object of data for the row
- * } );
- * } );
- *
- * @example
- * // Individual cell data
- * $(document).ready(function() {
- * oTable = $('#example').dataTable();
- *
- * oTable.$('td').click( function () {
- * var sData = oTable.fnGetData( this );
- * alert( 'The cell clicked on had the value of '+sData );
- * } );
- * } );
- */
-this.fnGetData = function( mRow, iCol )
-{
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-
- if ( mRow !== undefined )
- {
- var iRow = mRow;
- if ( typeof mRow === 'object' )
- {
- var sNode = mRow.nodeName.toLowerCase();
- if (sNode === "tr" )
- {
- iRow = _fnNodeToDataIndex(oSettings, mRow);
- }
- else if ( sNode === "td" )
- {
- iRow = _fnNodeToDataIndex(oSettings, mRow.parentNode);
- iCol = _fnNodeToColumnIndex( oSettings, iRow, mRow );
- }
- }
-
- if ( iCol !== undefined )
- {
- return _fnGetCellData( oSettings, iRow, iCol, '' );
- }
- return (oSettings.aoData[iRow]!==undefined) ?
- oSettings.aoData[iRow]._aData : null;
- }
- return _fnGetDataMaster( oSettings );
-};
-
-
-/**
- * Get an array of the TR nodes that are used in the table's body. Note that you will
- * typically want to use the '$' API method in preference to this as it is more
- * flexible.
- * @param {int} [iRow] Optional row index for the TR element you want
- * @returns {array|node} If iRow is undefined, returns an array of all TR elements
- * in the table's body, or iRow is defined, just the TR element requested.
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Get the nodes from the table
- * var nNodes = oTable.fnGetNodes( );
- * } );
- */
-this.fnGetNodes = function( iRow )
-{
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-
- if ( iRow !== undefined ) {
- return (oSettings.aoData[iRow]!==undefined) ?
- oSettings.aoData[iRow].nTr : null;
- }
- return _fnGetTrNodes( oSettings );
-};
-
-
-/**
- * Get the array indexes of a particular cell from it's DOM element
- * and column index including hidden columns
- * @param {node} nNode this can either be a TR, TD or TH in the table's body
- * @returns {int} If nNode is given as a TR, then a single index is returned, or
- * if given as a cell, an array of [row index, column index (visible),
- * column index (all)] is given.
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * $('#example tbody td').click( function () {
- * // Get the position of the current data from the node
- * var aPos = oTable.fnGetPosition( this );
- *
- * // Get the data array for this row
- * var aData = oTable.fnGetData( aPos[0] );
- *
- * // Update the data array and return the value
- * aData[ aPos[1] ] = 'clicked';
- * this.innerHTML = 'clicked';
- * } );
- *
- * // Init DataTables
- * oTable = $('#example').dataTable();
- * } );
- */
-this.fnGetPosition = function( nNode )
-{
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
- var sNodeName = nNode.nodeName.toUpperCase();
-
- if ( sNodeName == "TR" )
- {
- return _fnNodeToDataIndex(oSettings, nNode);
- }
- else if ( sNodeName == "TD" || sNodeName == "TH" )
- {
- var iDataIndex = _fnNodeToDataIndex( oSettings, nNode.parentNode );
- var iColumnIndex = _fnNodeToColumnIndex( oSettings, iDataIndex, nNode );
- return [ iDataIndex, _fnColumnIndexToVisible(oSettings, iColumnIndex ), iColumnIndex ];
- }
- return null;
-};
-
-
-/**
- * Check to see if a row is 'open' or not.
- * @param {node} nTr the table row to check
- * @returns {boolean} true if the row is currently open, false otherwise
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable;
- *
- * // 'open' an information row when a row is clicked on
- * $('#example tbody tr').click( function () {
- * if ( oTable.fnIsOpen(this) ) {
- * oTable.fnClose( this );
- * } else {
- * oTable.fnOpen( this, "Temporary row opened", "info_row" );
- * }
- * } );
- *
- * oTable = $('#example').dataTable();
- * } );
- */
-this.fnIsOpen = function( nTr )
-{
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
- var aoOpenRows = oSettings.aoOpenRows;
-
- for ( var i=0 ; i<oSettings.aoOpenRows.length ; i++ )
- {
- if ( oSettings.aoOpenRows[i].nParent == nTr )
- {
- return true;
- }
- }
- return false;
-};
-
-
-/**
- * This function will place a new row directly after a row which is currently
- * on display on the page, with the HTML contents that is passed into the
- * function. This can be used, for example, to ask for confirmation that a
- * particular record should be deleted.
- * @param {node} nTr The table row to 'open'
- * @param {string|node|jQuery} mHtml The HTML to put into the row
- * @param {string} sClass Class to give the new TD cell
- * @returns {node} The row opened. Note that if the table row passed in as the
- * first parameter, is not found in the table, this method will silently
- * return.
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable;
- *
- * // 'open' an information row when a row is clicked on
- * $('#example tbody tr').click( function () {
- * if ( oTable.fnIsOpen(this) ) {
- * oTable.fnClose( this );
- * } else {
- * oTable.fnOpen( this, "Temporary row opened", "info_row" );
- * }
- * } );
- *
- * oTable = $('#example').dataTable();
- * } );
- */
-this.fnOpen = function( nTr, mHtml, sClass )
-{
- /* Find settings from table node */
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-
- /* Check that the row given is in the table */
- var nTableRows = _fnGetTrNodes( oSettings );
- if ( $.inArray(nTr, nTableRows) === -1 )
- {
- return;
- }
-
- /* the old open one if there is one */
- this.fnClose( nTr );
-
- var nNewRow = document.createElement("tr");
- var nNewCell = document.createElement("td");
- nNewRow.appendChild( nNewCell );
- nNewCell.className = sClass;
- nNewCell.colSpan = _fnVisbleColumns( oSettings );
-
- if (typeof mHtml === "string")
- {
- nNewCell.innerHTML = mHtml;
- }
- else
- {
- $(nNewCell).html( mHtml );
- }
-
- /* If the nTr isn't on the page at the moment - then we don't insert at the moment */
- var nTrs = $('tr', oSettings.nTBody);
- if ( $.inArray(nTr, nTrs) != -1 )
- {
- $(nNewRow).insertAfter(nTr);
- }
-
- oSettings.aoOpenRows.push( {
- "nTr": nNewRow,
- "nParent": nTr
- } );
-
- return nNewRow;
-};
-
-
-/**
- * Change the pagination - provides the internal logic for pagination in a simple API
- * function. With this function you can have a DataTables table go to the next,
- * previous, first or last pages.
- * @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last"
- * or page number to jump to (integer), note that page 0 is the first page.
- * @param {bool} [bRedraw=true] Redraw the table or not
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- * oTable.fnPageChange( 'next' );
- * } );
- */
-this.fnPageChange = function ( mAction, bRedraw )
-{
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
- _fnPageChange( oSettings, mAction );
- _fnCalculateEnd( oSettings );
-
- if ( bRedraw === undefined || bRedraw )
- {
- _fnDraw( oSettings );
- }
-};
-
-
-/**
- * Show a particular column
- * @param {int} iCol The column whose display should be changed
- * @param {bool} bShow Show (true) or hide (false) the column
- * @param {bool} [bRedraw=true] Redraw the table or not
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Hide the second column after initialisation
- * oTable.fnSetColumnVis( 1, false );
- * } );
- */
-this.fnSetColumnVis = function ( iCol, bShow, bRedraw )
-{
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
- var i, iLen;
- var aoColumns = oSettings.aoColumns;
- var aoData = oSettings.aoData;
- var nTd, bAppend, iBefore;
-
- /* No point in doing anything if we are requesting what is already true */
- if ( aoColumns[iCol].bVisible == bShow )
- {
- return;
- }
-
- /* Show the column */
- if ( bShow )
- {
- var iInsert = 0;
- for ( i=0 ; i<iCol ; i++ )
- {
- if ( aoColumns[i].bVisible )
- {
- iInsert++;
- }
- }
-
- /* Need to decide if we should use appendChild or insertBefore */
- bAppend = (iInsert >= _fnVisbleColumns( oSettings ));
-
- /* Which coloumn should we be inserting before? */
- if ( !bAppend )
- {
- for ( i=iCol ; i<aoColumns.length ; i++ )
- {
- if ( aoColumns[i].bVisible )
- {
- iBefore = i;
- break;
- }
- }
- }
-
- for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
- {
- if ( aoData[i].nTr !== null )
- {
- if ( bAppend )
- {
- aoData[i].nTr.appendChild(
- aoData[i]._anHidden[iCol]
- );
- }
- else
- {
- aoData[i].nTr.insertBefore(
- aoData[i]._anHidden[iCol],
- _fnGetTdNodes( oSettings, i )[iBefore] );
- }
- }
- }
- }
- else
- {
- /* Remove a column from display */
- for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
- {
- if ( aoData[i].nTr !== null )
- {
- nTd = _fnGetTdNodes( oSettings, i )[iCol];
- aoData[i]._anHidden[iCol] = nTd;
- nTd.parentNode.removeChild( nTd );
- }
- }
- }
-
- /* Clear to set the visible flag */
- aoColumns[iCol].bVisible = bShow;
-
- /* Redraw the header and footer based on the new column visibility */
- _fnDrawHead( oSettings, oSettings.aoHeader );
- if ( oSettings.nTFoot )
- {
- _fnDrawHead( oSettings, oSettings.aoFooter );
- }
-
- /* If there are any 'open' rows, then we need to alter the colspan for this col change */
- for ( i=0, iLen=oSettings.aoOpenRows.length ; i<iLen ; i++ )
- {
- oSettings.aoOpenRows[i].nTr.colSpan = _fnVisbleColumns( oSettings );
- }
-
- /* Do a redraw incase anything depending on the table columns needs it
- * (built-in: scrolling)
- */
- if ( bRedraw === undefined || bRedraw )
- {
- _fnAdjustColumnSizing( oSettings );
- _fnDraw( oSettings );
- }
-
- _fnSaveState( oSettings );
-};
-
-
-/**
- * Get the settings for a particular table for external manipulation
- * @returns {object} DataTables settings object. See
- * {@link DataTable.models.oSettings}
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- * var oSettings = oTable.fnSettings();
- *
- * // Show an example parameter from the settings
- * alert( oSettings._iDisplayStart );
- * } );
- */
-this.fnSettings = function()
-{
- return _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
-};
-
-
-/**
- * Sort the table by a particular column
- * @param {int} iCol the data index to sort on. Note that this will not match the
- * 'display index' if you have hidden data entries
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Sort immediately with columns 0 and 1
- * oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );
- * } );
- */
-this.fnSort = function( aaSort )
-{
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
- oSettings.aaSorting = aaSort;
- _fnSort( oSettings );
-};
-
-
-/**
- * Attach a sort listener to an element for a given column
- * @param {node} nNode the element to attach the sort listener to
- * @param {int} iColumn the column that a click on this node will sort on
- * @param {function} [fnCallback] callback function when sort is run
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- *
- * // Sort on column 1, when 'sorter' is clicked on
- * oTable.fnSortListener( document.getElementById('sorter'), 1 );
- * } );
- */
-this.fnSortListener = function( nNode, iColumn, fnCallback )
-{
- _fnSortAttachListener( _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ), nNode, iColumn,
- fnCallback );
-};
-
-
-/**
- * Update a table cell or row - this method will accept either a single value to
- * update the cell with, an array of values with one element for each column or
- * an object in the same format as the original data source. The function is
- * self-referencing in order to make the multi column updates easier.
- * @param {object|array|string} mData Data to update the cell/row with
- * @param {node|int} mRow TR element you want to update or the aoData index
- * @param {int} [iColumn] The column to update (not used of mData is an array or object)
- * @param {bool} [bRedraw=true] Redraw the table or not
- * @param {bool} [bAction=true] Perform pre-draw actions or not
- * @returns {int} 0 on success, 1 on error
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- * oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell
- * oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], 1, 0 ); // Row
- * } );
- */
-this.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )
-{
- var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
- var i, iLen, sDisplay;
- var iRow = (typeof mRow === 'object') ?
- _fnNodeToDataIndex(oSettings, mRow) : mRow;
-
- if ( $.isArray(mData) && iColumn === undefined )
- {
- /* Array update - update the whole row */
- oSettings.aoData[iRow]._aData = mData.slice();
-
- /* Flag to the function that we are recursing */
- for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
- {
- this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
- }
- }
- else if ( $.isPlainObject(mData) && iColumn === undefined )
- {
- /* Object update - update the whole row - assume the developer gets the object right */
- oSettings.aoData[iRow]._aData = $.extend( true, {}, mData );
-
- for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
- {
- this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
- }
- }
- else
- {
- /* Individual cell update */
- _fnSetCellData( oSettings, iRow, iColumn, mData );
- sDisplay = _fnGetCellData( oSettings, iRow, iColumn, 'display' );
-
- var oCol = oSettings.aoColumns[iColumn];
- if ( oCol.fnRender !== null )
- {
- sDisplay = _fnRender( oSettings, iRow, iColumn );
- if ( oCol.bUseRendered )
- {
- _fnSetCellData( oSettings, iRow, iColumn, sDisplay );
- }
- }
-
- if ( oSettings.aoData[iRow].nTr !== null )
- {
- /* Do the actual HTML update */
- _fnGetTdNodes( oSettings, iRow )[iColumn].innerHTML = sDisplay;
- }
- }
-
- /* Modify the search index for this row (strictly this is likely not needed, since fnReDraw
- * will rebuild the search array - however, the redraw might be disabled by the user)
- */
- var iDisplayIndex = $.inArray( iRow, oSettings.aiDisplay );
- oSettings.asDataSearch[iDisplayIndex] = _fnBuildSearchRow(
- oSettings,
- _fnGetRowData( oSettings, iRow, 'filter', _fnGetColumns( oSettings, 'bSearchable' ) )
- );
-
- /* Perform pre-draw actions */
- if ( bAction === undefined || bAction )
- {
- _fnAdjustColumnSizing( oSettings );
- }
-
- /* Redraw the table */
- if ( bRedraw === undefined || bRedraw )
- {
- _fnReDraw( oSettings );
- }
- return 0;
-};
-
-
-/**
- * Provide a common method for plug-ins to check the version of DataTables being used, in order
- * to ensure compatibility.
- * @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note that the
- * formats "X" and "X.Y" are also acceptable.
- * @returns {boolean} true if this version of DataTables is greater or equal to the required
- * version, or false if this version of DataTales is not suitable
- * @method
- * @dtopt API
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- * alert( oTable.fnVersionCheck( '1.9.0' ) );
- * } );
- */
-this.fnVersionCheck = DataTable.ext.fnVersionCheck;
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/api/api.static.js b/wqflask/wqflask/static/new/packages/DataTables/src/api/api.static.js
deleted file mode 100644
index d344ed7e..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/api/api.static.js
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-/**
- * Provide a common method for plug-ins to check the version of DataTables being used, in order
- * to ensure compatibility.
- * @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note that the
- * formats "X" and "X.Y" are also acceptable.
- * @returns {boolean} true if this version of DataTables is greater or equal to the required
- * version, or false if this version of DataTales is not suitable
- * @static
- * @dtopt API-Static
- *
- * @example
- * alert( $.fn.dataTable.fnVersionCheck( '1.9.0' ) );
- */
-DataTable.fnVersionCheck = function( sVersion )
-{
- /* This is cheap, but effective */
- var fnZPad = function (Zpad, count)
- {
- while(Zpad.length < count) {
- Zpad += '0';
- }
- return Zpad;
- };
- var aThis = DataTable.ext.sVersion.split('.');
- var aThat = sVersion.split('.');
- var sThis = '', sThat = '';
-
- for ( var i=0, iLen=aThat.length ; i<iLen ; i++ )
- {
- sThis += fnZPad( aThis[i], 3 );
- sThat += fnZPad( aThat[i], 3 );
- }
-
- return parseInt(sThis, 10) >= parseInt(sThat, 10);
-};
-
-
-/**
- * Check if a TABLE node is a DataTable table already or not.
- * @param {node} nTable The TABLE node to check if it is a DataTable or not (note that other
- * node types can be passed in, but will always return false).
- * @returns {boolean} true the table given is a DataTable, or false otherwise
- * @static
- * @dtopt API-Static
- *
- * @example
- * var ex = document.getElementById('example');
- * if ( ! $.fn.DataTable.fnIsDataTable( ex ) ) {
- * $(ex).dataTable();
- * }
- */
-DataTable.fnIsDataTable = function ( nTable )
-{
- var o = DataTable.settings;
-
- for ( var i=0 ; i<o.length ; i++ )
- {
- if ( o[i].nTable === nTable || o[i].nScrollHead === nTable || o[i].nScrollFoot === nTable )
- {
- return true;
- }
- }
-
- return false;
-};
-
-
-/**
- * Get all DataTable tables that have been initialised - optionally you can select to
- * get only currently visible tables.
- * @param {boolean} [bVisible=false] Flag to indicate if you want all (default) or
- * visible tables only.
- * @returns {array} Array of TABLE nodes (not DataTable instances) which are DataTables
- * @static
- * @dtopt API-Static
- *
- * @example
- * var table = $.fn.dataTable.fnTables(true);
- * if ( table.length > 0 ) {
- * $(table).dataTable().fnAdjustColumnSizing();
- * }
- */
-DataTable.fnTables = function ( bVisible )
-{
- var out = [];
-
- jQuery.each( DataTable.settings, function (i, o) {
- if ( !bVisible || (bVisible === true && $(o.nTable).is(':visible')) )
- {
- out.push( o.nTable );
- }
- } );
-
- return out;
-};
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.ajax.js b/wqflask/wqflask/static/new/packages/DataTables/src/core/core.ajax.js
deleted file mode 100644
index d775feae..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.ajax.js
+++ /dev/null
@@ -1,185 +0,0 @@
-
-
-/**
- * Update the table using an Ajax call
- * @param {object} oSettings dataTables settings object
- * @returns {boolean} Block the table drawing or not
- * @memberof DataTable#oApi
- */
-function _fnAjaxUpdate( oSettings )
-{
- if ( oSettings.bAjaxDataGet )
- {
- oSettings.iDraw++;
- _fnProcessingDisplay( oSettings, true );
- var iColumns = oSettings.aoColumns.length;
- var aoData = _fnAjaxParameters( oSettings );
- _fnServerParams( oSettings, aoData );
-
- oSettings.fnServerData.call( oSettings.oInstance, oSettings.sAjaxSource, aoData,
- function(json) {
- _fnAjaxUpdateDraw( oSettings, json );
- }, oSettings );
- return false;
- }
- else
- {
- return true;
- }
-}
-
-
-/**
- * Build up the parameters in an object needed for a server-side processing request
- * @param {object} oSettings dataTables settings object
- * @returns {bool} block the table drawing or not
- * @memberof DataTable#oApi
- */
-function _fnAjaxParameters( oSettings )
-{
- var iColumns = oSettings.aoColumns.length;
- var aoData = [], mDataProp, aaSort, aDataSort;
- var i, j;
-
- aoData.push( { "name": "sEcho", "value": oSettings.iDraw } );
- aoData.push( { "name": "iColumns", "value": iColumns } );
- aoData.push( { "name": "sColumns", "value": _fnColumnOrdering(oSettings) } );
- aoData.push( { "name": "iDisplayStart", "value": oSettings._iDisplayStart } );
- aoData.push( { "name": "iDisplayLength", "value": oSettings.oFeatures.bPaginate !== false ?
- oSettings._iDisplayLength : -1 } );
-
- for ( i=0 ; i<iColumns ; i++ )
- {
- mDataProp = oSettings.aoColumns[i].mData;
- aoData.push( { "name": "mDataProp_"+i, "value": typeof(mDataProp)==="function" ? 'function' : mDataProp } );
- }
-
- /* Filtering */
- if ( oSettings.oFeatures.bFilter !== false )
- {
- aoData.push( { "name": "sSearch", "value": oSettings.oPreviousSearch.sSearch } );
- aoData.push( { "name": "bRegex", "value": oSettings.oPreviousSearch.bRegex } );
- for ( i=0 ; i<iColumns ; i++ )
- {
- aoData.push( { "name": "sSearch_"+i, "value": oSettings.aoPreSearchCols[i].sSearch } );
- aoData.push( { "name": "bRegex_"+i, "value": oSettings.aoPreSearchCols[i].bRegex } );
- aoData.push( { "name": "bSearchable_"+i, "value": oSettings.aoColumns[i].bSearchable } );
- }
- }
-
- /* Sorting */
- if ( oSettings.oFeatures.bSort !== false )
- {
- var iCounter = 0;
-
- aaSort = ( oSettings.aaSortingFixed !== null ) ?
- oSettings.aaSortingFixed.concat( oSettings.aaSorting ) :
- oSettings.aaSorting.slice();
-
- for ( i=0 ; i<aaSort.length ; i++ )
- {
- aDataSort = oSettings.aoColumns[ aaSort[i][0] ].aDataSort;
-
- for ( j=0 ; j<aDataSort.length ; j++ )
- {
- aoData.push( { "name": "iSortCol_"+iCounter, "value": aDataSort[j] } );
- aoData.push( { "name": "sSortDir_"+iCounter, "value": aaSort[i][1] } );
- iCounter++;
- }
- }
- aoData.push( { "name": "iSortingCols", "value": iCounter } );
-
- for ( i=0 ; i<iColumns ; i++ )
- {
- aoData.push( { "name": "bSortable_"+i, "value": oSettings.aoColumns[i].bSortable } );
- }
- }
-
- return aoData;
-}
-
-
-/**
- * Add Ajax parameters from plug-ins
- * @param {object} oSettings dataTables settings object
- * @param array {objects} aoData name/value pairs to send to the server
- * @memberof DataTable#oApi
- */
-function _fnServerParams( oSettings, aoData )
-{
- _fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [aoData] );
-}
-
-
-/**
- * Data the data from the server (nuking the old) and redraw the table
- * @param {object} oSettings dataTables settings object
- * @param {object} json json data return from the server.
- * @param {string} json.sEcho Tracking flag for DataTables to match requests
- * @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering
- * @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering
- * @param {array} json.aaData The data to display on this page
- * @param {string} [json.sColumns] Column ordering (sName, comma separated)
- * @memberof DataTable#oApi
- */
-function _fnAjaxUpdateDraw ( oSettings, json )
-{
- if ( json.sEcho !== undefined )
- {
- /* Protect against old returns over-writing a new one. Possible when you get
- * very fast interaction, and later queries are completed much faster
- */
- if ( json.sEcho*1 < oSettings.iDraw )
- {
- return;
- }
- else
- {
- oSettings.iDraw = json.sEcho * 1;
- }
- }
-
- if ( !oSettings.oScroll.bInfinite ||
- (oSettings.oScroll.bInfinite && (oSettings.bSorted || oSettings.bFiltered)) )
- {
- _fnClearTable( oSettings );
- }
- oSettings._iRecordsTotal = parseInt(json.iTotalRecords, 10);
- oSettings._iRecordsDisplay = parseInt(json.iTotalDisplayRecords, 10);
-
- /* Determine if reordering is required */
- var sOrdering = _fnColumnOrdering(oSettings);
- var bReOrder = (json.sColumns !== undefined && sOrdering !== "" && json.sColumns != sOrdering );
- var aiIndex;
- if ( bReOrder )
- {
- aiIndex = _fnReOrderIndex( oSettings, json.sColumns );
- }
-
- var aData = _fnGetObjectDataFn( oSettings.sAjaxDataProp )( json );
- for ( var i=0, iLen=aData.length ; i<iLen ; i++ )
- {
- if ( bReOrder )
- {
- /* If we need to re-order, then create a new array with the correct order and add it */
- var aDataSorted = [];
- for ( var j=0, jLen=oSettings.aoColumns.length ; j<jLen ; j++ )
- {
- aDataSorted.push( aData[i][ aiIndex[j] ] );
- }
- _fnAddData( oSettings, aDataSorted );
- }
- else
- {
- /* No re-order required, sever got it "right" - just straight add */
- _fnAddData( oSettings, aData[i] );
- }
- }
- oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-
- oSettings.bAjaxDataGet = false;
- _fnDraw( oSettings );
- oSettings.bAjaxDataGet = true;
- _fnProcessingDisplay( oSettings, false );
-}
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.columns.js b/wqflask/wqflask/static/new/packages/DataTables/src/core/core.columns.js
deleted file mode 100644
index 8fe3e712..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.columns.js
+++ /dev/null
@@ -1,373 +0,0 @@
-
-
-/**
- * Add a column to the list used for the table with default values
- * @param {object} oSettings dataTables settings object
- * @param {node} nTh The th element for this column
- * @memberof DataTable#oApi
- */
-function _fnAddColumn( oSettings, nTh )
-{
- var oDefaults = DataTable.defaults.columns;
- var iCol = oSettings.aoColumns.length;
- var oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {
- "sSortingClass": oSettings.oClasses.sSortable,
- "sSortingClassJUI": oSettings.oClasses.sSortJUI,
- "nTh": nTh ? nTh : document.createElement('th'),
- "sTitle": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '',
- "aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],
- "mData": oDefaults.mData ? oDefaults.oDefaults : iCol
- } );
- oSettings.aoColumns.push( oCol );
-
- /* Add a column specific filter */
- if ( oSettings.aoPreSearchCols[ iCol ] === undefined || oSettings.aoPreSearchCols[ iCol ] === null )
- {
- oSettings.aoPreSearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch );
- }
- else
- {
- var oPre = oSettings.aoPreSearchCols[ iCol ];
-
- /* Don't require that the user must specify bRegex, bSmart or bCaseInsensitive */
- if ( oPre.bRegex === undefined )
- {
- oPre.bRegex = true;
- }
-
- if ( oPre.bSmart === undefined )
- {
- oPre.bSmart = true;
- }
-
- if ( oPre.bCaseInsensitive === undefined )
- {
- oPre.bCaseInsensitive = true;
- }
- }
-
- /* Use the column options function to initialise classes etc */
- _fnColumnOptions( oSettings, iCol, null );
-}
-
-
-/**
- * Apply options for a column
- * @param {object} oSettings dataTables settings object
- * @param {int} iCol column index to consider
- * @param {object} oOptions object with sType, bVisible and bSearchable etc
- * @memberof DataTable#oApi
- */
-function _fnColumnOptions( oSettings, iCol, oOptions )
-{
- var oCol = oSettings.aoColumns[ iCol ];
-
- /* User specified column options */
- if ( oOptions !== undefined && oOptions !== null )
- {
- /* Backwards compatibility for mDataProp */
- if ( oOptions.mDataProp && !oOptions.mData )
- {
- oOptions.mData = oOptions.mDataProp;
- }
-
- if ( oOptions.sType !== undefined )
- {
- oCol.sType = oOptions.sType;
- oCol._bAutoType = false;
- }
-
- $.extend( oCol, oOptions );
- _fnMap( oCol, oOptions, "sWidth", "sWidthOrig" );
-
- /* iDataSort to be applied (backwards compatibility), but aDataSort will take
- * priority if defined
- */
- if ( oOptions.iDataSort !== undefined )
- {
- oCol.aDataSort = [ oOptions.iDataSort ];
- }
- _fnMap( oCol, oOptions, "aDataSort" );
- }
-
- /* Cache the data get and set functions for speed */
- var mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;
- var mData = _fnGetObjectDataFn( oCol.mData );
-
- oCol.fnGetData = function (oData, sSpecific) {
- var innerData = mData( oData, sSpecific );
-
- if ( oCol.mRender && (sSpecific && sSpecific !== '') )
- {
- return mRender( innerData, sSpecific, oData );
- }
- return innerData;
- };
- oCol.fnSetData = _fnSetObjectDataFn( oCol.mData );
-
- /* Feature sorting overrides column specific when off */
- if ( !oSettings.oFeatures.bSort )
- {
- oCol.bSortable = false;
- }
-
- /* Check that the class assignment is correct for sorting */
- if ( !oCol.bSortable ||
- ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) )
- {
- oCol.sSortingClass = oSettings.oClasses.sSortableNone;
- oCol.sSortingClassJUI = "";
- }
- else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1 )
- {
- oCol.sSortingClass = oSettings.oClasses.sSortable;
- oCol.sSortingClassJUI = oSettings.oClasses.sSortJUI;
- }
- else if ( $.inArray('asc', oCol.asSorting) != -1 && $.inArray('desc', oCol.asSorting) == -1 )
- {
- oCol.sSortingClass = oSettings.oClasses.sSortableAsc;
- oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIAscAllowed;
- }
- else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) != -1 )
- {
- oCol.sSortingClass = oSettings.oClasses.sSortableDesc;
- oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIDescAllowed;
- }
-}
-
-
-/**
- * Adjust the table column widths for new data. Note: you would probably want to
- * do a redraw after calling this function!
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnAdjustColumnSizing ( oSettings )
-{
- /* Not interested in doing column width calculation if auto-width is disabled */
- if ( oSettings.oFeatures.bAutoWidth === false )
- {
- return false;
- }
-
- _fnCalculateColumnWidths( oSettings );
- for ( var i=0 , iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
- {
- oSettings.aoColumns[i].nTh.style.width = oSettings.aoColumns[i].sWidth;
- }
-}
-
-
-/**
- * Covert the index of a visible column to the index in the data array (take account
- * of hidden columns)
- * @param {object} oSettings dataTables settings object
- * @param {int} iMatch Visible column index to lookup
- * @returns {int} i the data index
- * @memberof DataTable#oApi
- */
-function _fnVisibleToColumnIndex( oSettings, iMatch )
-{
- var aiVis = _fnGetColumns( oSettings, 'bVisible' );
-
- return typeof aiVis[iMatch] === 'number' ?
- aiVis[iMatch] :
- null;
-}
-
-
-/**
- * Covert the index of an index in the data array and convert it to the visible
- * column index (take account of hidden columns)
- * @param {int} iMatch Column index to lookup
- * @param {object} oSettings dataTables settings object
- * @returns {int} i the data index
- * @memberof DataTable#oApi
- */
-function _fnColumnIndexToVisible( oSettings, iMatch )
-{
- var aiVis = _fnGetColumns( oSettings, 'bVisible' );
- var iPos = $.inArray( iMatch, aiVis );
-
- return iPos !== -1 ? iPos : null;
-}
-
-
-/**
- * Get the number of visible columns
- * @param {object} oSettings dataTables settings object
- * @returns {int} i the number of visible columns
- * @memberof DataTable#oApi
- */
-function _fnVisbleColumns( oSettings )
-{
- return _fnGetColumns( oSettings, 'bVisible' ).length;
-}
-
-
-/**
- * Get an array of column indexes that match a given property
- * @param {object} oSettings dataTables settings object
- * @param {string} sParam Parameter in aoColumns to look for - typically
- * bVisible or bSearchable
- * @returns {array} Array of indexes with matched properties
- * @memberof DataTable#oApi
- */
-function _fnGetColumns( oSettings, sParam )
-{
- var a = [];
-
- $.map( oSettings.aoColumns, function(val, i) {
- if ( val[sParam] ) {
- a.push( i );
- }
- } );
-
- return a;
-}
-
-
-/**
- * Get the sort type based on an input string
- * @param {string} sData data we wish to know the type of
- * @returns {string} type (defaults to 'string' if no type can be detected)
- * @memberof DataTable#oApi
- */
-function _fnDetectType( sData )
-{
- var aTypes = DataTable.ext.aTypes;
- var iLen = aTypes.length;
-
- for ( var i=0 ; i<iLen ; i++ )
- {
- var sType = aTypes[i]( sData );
- if ( sType !== null )
- {
- return sType;
- }
- }
-
- return 'string';
-}
-
-
-/**
- * Figure out how to reorder a display list
- * @param {object} oSettings dataTables settings object
- * @returns array {int} aiReturn index list for reordering
- * @memberof DataTable#oApi
- */
-function _fnReOrderIndex ( oSettings, sColumns )
-{
- var aColumns = sColumns.split(',');
- var aiReturn = [];
-
- for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
- {
- for ( var j=0 ; j<iLen ; j++ )
- {
- if ( oSettings.aoColumns[i].sName == aColumns[j] )
- {
- aiReturn.push( j );
- break;
- }
- }
- }
-
- return aiReturn;
-}
-
-
-/**
- * Get the column ordering that DataTables expects
- * @param {object} oSettings dataTables settings object
- * @returns {string} comma separated list of names
- * @memberof DataTable#oApi
- */
-function _fnColumnOrdering ( oSettings )
-{
- var sNames = '';
- for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
- {
- sNames += oSettings.aoColumns[i].sName+',';
- }
- if ( sNames.length == iLen )
- {
- return "";
- }
- return sNames.slice(0, -1);
-}
-
-
-/**
- * Take the column definitions and static columns arrays and calculate how
- * they relate to column indexes. The callback function will then apply the
- * definition found for a column to a suitable configuration object.
- * @param {object} oSettings dataTables settings object
- * @param {array} aoColDefs The aoColumnDefs array that is to be applied
- * @param {array} aoCols The aoColumns array that defines columns individually
- * @param {function} fn Callback function - takes two parameters, the calculated
- * column index and the definition for that column.
- * @memberof DataTable#oApi
- */
-function _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )
-{
- var i, iLen, j, jLen, k, kLen;
-
- // Column definitions with aTargets
- if ( aoColDefs )
- {
- /* Loop over the definitions array - loop in reverse so first instance has priority */
- for ( i=aoColDefs.length-1 ; i>=0 ; i-- )
- {
- /* Each definition can target multiple columns, as it is an array */
- var aTargets = aoColDefs[i].aTargets;
- if ( !$.isArray( aTargets ) )
- {
- _fnLog( oSettings, 1, 'aTargets must be an array of targets, not a '+(typeof aTargets) );
- }
-
- for ( j=0, jLen=aTargets.length ; j<jLen ; j++ )
- {
- if ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 )
- {
- /* Add columns that we don't yet know about */
- while( oSettings.aoColumns.length <= aTargets[j] )
- {
- _fnAddColumn( oSettings );
- }
-
- /* Integer, basic index */
- fn( aTargets[j], aoColDefs[i] );
- }
- else if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 )
- {
- /* Negative integer, right to left column counting */
- fn( oSettings.aoColumns.length+aTargets[j], aoColDefs[i] );
- }
- else if ( typeof aTargets[j] === 'string' )
- {
- /* Class name matching on TH element */
- for ( k=0, kLen=oSettings.aoColumns.length ; k<kLen ; k++ )
- {
- if ( aTargets[j] == "_all" ||
- $(oSettings.aoColumns[k].nTh).hasClass( aTargets[j] ) )
- {
- fn( k, aoColDefs[i] );
- }
- }
- }
- }
- }
- }
-
- // Statically defined columns array
- if ( aoCols )
- {
- for ( i=0, iLen=aoCols.length ; i<iLen ; i++ )
- {
- fn( i, aoCols[i] );
- }
- }
-}
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.constructor.js b/wqflask/wqflask/static/new/packages/DataTables/src/core/core.constructor.js
deleted file mode 100644
index 7abc5289..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.constructor.js
+++ /dev/null
@@ -1,428 +0,0 @@
-var i=0, iLen, j, jLen, k, kLen;
-var sId = this.getAttribute( 'id' );
-var bInitHandedOff = false;
-var bUsePassedData = false;
-
-
-/* Sanity check */
-if ( this.nodeName.toLowerCase() != 'table' )
-{
- _fnLog( null, 0, "Attempted to initialise DataTables on a node which is not a "+
- "table: "+this.nodeName );
- return;
-}
-
-/* Check to see if we are re-initialising a table */
-for ( i=0, iLen=DataTable.settings.length ; i<iLen ; i++ )
-{
- /* Base check on table node */
- if ( DataTable.settings[i].nTable == this )
- {
- if ( oInit === undefined || oInit.bRetrieve )
- {
- return DataTable.settings[i].oInstance;
- }
- else if ( oInit.bDestroy )
- {
- DataTable.settings[i].oInstance.fnDestroy();
- break;
- }
- else
- {
- _fnLog( DataTable.settings[i], 0, "Cannot reinitialise DataTable.\n\n"+
- "To retrieve the DataTables object for this table, pass no arguments or see "+
- "the docs for bRetrieve and bDestroy" );
- return;
- }
- }
-
- /* If the element we are initialising has the same ID as a table which was previously
- * initialised, but the table nodes don't match (from before) then we destroy the old
- * instance by simply deleting it. This is under the assumption that the table has been
- * destroyed by other methods. Anyone using non-id selectors will need to do this manually
- */
- if ( DataTable.settings[i].sTableId == this.id )
- {
- DataTable.settings.splice( i, 1 );
- break;
- }
-}
-
-/* Ensure the table has an ID - required for accessibility */
-if ( sId === null || sId === "" )
-{
- sId = "DataTables_Table_"+(DataTable.ext._oExternConfig.iNextUnique++);
- this.id = sId;
-}
-
-/* Create the settings object for this table and set some of the default parameters */
-var oSettings = $.extend( true, {}, DataTable.models.oSettings, {
- "nTable": this,
- "oApi": _that.oApi,
- "oInit": oInit,
- "sDestroyWidth": $(this).width(),
- "sInstance": sId,
- "sTableId": sId
-} );
-DataTable.settings.push( oSettings );
-
-// Need to add the instance after the instance after the settings object has been added
-// to the settings array, so we can self reference the table instance if more than one
-oSettings.oInstance = (_that.length===1) ? _that : $(this).dataTable();
-
-/* Setting up the initialisation object */
-if ( !oInit )
-{
- oInit = {};
-}
-
-// Backwards compatibility, before we apply all the defaults
-if ( oInit.oLanguage )
-{
- _fnLanguageCompat( oInit.oLanguage );
-}
-
-oInit = _fnExtend( $.extend(true, {}, DataTable.defaults), oInit );
-
-// Map the initialisation options onto the settings object
-_fnMap( oSettings.oFeatures, oInit, "bPaginate" );
-_fnMap( oSettings.oFeatures, oInit, "bLengthChange" );
-_fnMap( oSettings.oFeatures, oInit, "bFilter" );
-_fnMap( oSettings.oFeatures, oInit, "bSort" );
-_fnMap( oSettings.oFeatures, oInit, "bInfo" );
-_fnMap( oSettings.oFeatures, oInit, "bProcessing" );
-_fnMap( oSettings.oFeatures, oInit, "bAutoWidth" );
-_fnMap( oSettings.oFeatures, oInit, "bSortClasses" );
-_fnMap( oSettings.oFeatures, oInit, "bServerSide" );
-_fnMap( oSettings.oFeatures, oInit, "bDeferRender" );
-_fnMap( oSettings.oScroll, oInit, "sScrollX", "sX" );
-_fnMap( oSettings.oScroll, oInit, "sScrollXInner", "sXInner" );
-_fnMap( oSettings.oScroll, oInit, "sScrollY", "sY" );
-_fnMap( oSettings.oScroll, oInit, "bScrollCollapse", "bCollapse" );
-_fnMap( oSettings.oScroll, oInit, "bScrollInfinite", "bInfinite" );
-_fnMap( oSettings.oScroll, oInit, "iScrollLoadGap", "iLoadGap" );
-_fnMap( oSettings.oScroll, oInit, "bScrollAutoCss", "bAutoCss" );
-_fnMap( oSettings, oInit, "asStripeClasses" );
-_fnMap( oSettings, oInit, "asStripClasses", "asStripeClasses" ); // legacy
-_fnMap( oSettings, oInit, "fnServerData" );
-_fnMap( oSettings, oInit, "fnFormatNumber" );
-_fnMap( oSettings, oInit, "sServerMethod" );
-_fnMap( oSettings, oInit, "aaSorting" );
-_fnMap( oSettings, oInit, "aaSortingFixed" );
-_fnMap( oSettings, oInit, "aLengthMenu" );
-_fnMap( oSettings, oInit, "sPaginationType" );
-_fnMap( oSettings, oInit, "sAjaxSource" );
-_fnMap( oSettings, oInit, "sAjaxDataProp" );
-_fnMap( oSettings, oInit, "iCookieDuration" );
-_fnMap( oSettings, oInit, "sCookiePrefix" );
-_fnMap( oSettings, oInit, "sDom" );
-_fnMap( oSettings, oInit, "bSortCellsTop" );
-_fnMap( oSettings, oInit, "iTabIndex" );
-_fnMap( oSettings, oInit, "oSearch", "oPreviousSearch" );
-_fnMap( oSettings, oInit, "aoSearchCols", "aoPreSearchCols" );
-_fnMap( oSettings, oInit, "iDisplayLength", "_iDisplayLength" );
-_fnMap( oSettings, oInit, "bJQueryUI", "bJUI" );
-_fnMap( oSettings, oInit, "fnCookieCallback" );
-_fnMap( oSettings, oInit, "fnStateLoad" );
-_fnMap( oSettings, oInit, "fnStateSave" );
-_fnMap( oSettings.oLanguage, oInit, "fnInfoCallback" );
-
-/* Callback functions which are array driven */
-_fnCallbackReg( oSettings, 'aoDrawCallback', oInit.fnDrawCallback, 'user' );
-_fnCallbackReg( oSettings, 'aoServerParams', oInit.fnServerParams, 'user' );
-_fnCallbackReg( oSettings, 'aoStateSaveParams', oInit.fnStateSaveParams, 'user' );
-_fnCallbackReg( oSettings, 'aoStateLoadParams', oInit.fnStateLoadParams, 'user' );
-_fnCallbackReg( oSettings, 'aoStateLoaded', oInit.fnStateLoaded, 'user' );
-_fnCallbackReg( oSettings, 'aoRowCallback', oInit.fnRowCallback, 'user' );
-_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow, 'user' );
-_fnCallbackReg( oSettings, 'aoHeaderCallback', oInit.fnHeaderCallback, 'user' );
-_fnCallbackReg( oSettings, 'aoFooterCallback', oInit.fnFooterCallback, 'user' );
-_fnCallbackReg( oSettings, 'aoInitComplete', oInit.fnInitComplete, 'user' );
-_fnCallbackReg( oSettings, 'aoPreDrawCallback', oInit.fnPreDrawCallback, 'user' );
-
-if ( oSettings.oFeatures.bServerSide && oSettings.oFeatures.bSort &&
- oSettings.oFeatures.bSortClasses )
-{
- /* Enable sort classes for server-side processing. Safe to do it here, since server-side
- * processing must be enabled by the developer
- */
- _fnCallbackReg( oSettings, 'aoDrawCallback', _fnSortingClasses, 'server_side_sort_classes' );
-}
-else if ( oSettings.oFeatures.bDeferRender )
-{
- _fnCallbackReg( oSettings, 'aoDrawCallback', _fnSortingClasses, 'defer_sort_classes' );
-}
-
-if ( oInit.bJQueryUI )
-{
- /* Use the JUI classes object for display. You could clone the oStdClasses object if
- * you want to have multiple tables with multiple independent classes
- */
- $.extend( oSettings.oClasses, DataTable.ext.oJUIClasses );
-
- if ( oInit.sDom === DataTable.defaults.sDom && DataTable.defaults.sDom === "lfrtip" )
- {
- /* Set the DOM to use a layout suitable for jQuery UI's theming */
- oSettings.sDom = '<"H"lfr>t<"F"ip>';
- }
-}
-else
-{
- $.extend( oSettings.oClasses, DataTable.ext.oStdClasses );
-}
-$(this).addClass( oSettings.oClasses.sTable );
-
-/* Calculate the scroll bar width and cache it for use later on */
-if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" )
-{
- oSettings.oScroll.iBarWidth = _fnScrollBarWidth();
-}
-
-if ( oSettings.iInitDisplayStart === undefined )
-{
- /* Display start point, taking into account the save saving */
- oSettings.iInitDisplayStart = oInit.iDisplayStart;
- oSettings._iDisplayStart = oInit.iDisplayStart;
-}
-
-/* Must be done after everything which can be overridden by a cookie! */
-if ( oInit.bStateSave )
-{
- oSettings.oFeatures.bStateSave = true;
- _fnLoadState( oSettings, oInit );
- _fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );
-}
-
-if ( oInit.iDeferLoading !== null )
-{
- oSettings.bDeferLoading = true;
- var tmp = $.isArray( oInit.iDeferLoading );
- oSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;
- oSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;
-}
-
-if ( oInit.aaData !== null )
-{
- bUsePassedData = true;
-}
-
-/* Language definitions */
-if ( oInit.oLanguage.sUrl !== "" )
-{
- /* Get the language definitions from a file - because this Ajax call makes the language
- * get async to the remainder of this function we use bInitHandedOff to indicate that
- * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor
- */
- oSettings.oLanguage.sUrl = oInit.oLanguage.sUrl;
- $.getJSON( oSettings.oLanguage.sUrl, null, function( json ) {
- _fnLanguageCompat( json );
- $.extend( true, oSettings.oLanguage, oInit.oLanguage, json );
- _fnInitialise( oSettings );
- } );
- bInitHandedOff = true;
-}
-else
-{
- $.extend( true, oSettings.oLanguage, oInit.oLanguage );
-}
-
-
-/*
- * Stripes
- */
-if ( oInit.asStripeClasses === null )
-{
- oSettings.asStripeClasses =[
- oSettings.oClasses.sStripeOdd,
- oSettings.oClasses.sStripeEven
- ];
-}
-
-/* Remove row stripe classes if they are already on the table row */
-iLen=oSettings.asStripeClasses.length;
-oSettings.asDestroyStripes = [];
-if (iLen)
-{
- var bStripeRemove = false;
- var anRows = $(this).children('tbody').children('tr:lt(' + iLen + ')');
- for ( i=0 ; i<iLen ; i++ )
- {
- if ( anRows.hasClass( oSettings.asStripeClasses[i] ) )
- {
- bStripeRemove = true;
-
- /* Store the classes which we are about to remove so they can be re-added on destroy */
- oSettings.asDestroyStripes.push( oSettings.asStripeClasses[i] );
- }
- }
-
- if ( bStripeRemove )
- {
- anRows.removeClass( oSettings.asStripeClasses.join(' ') );
- }
-}
-
-/*
- * Columns
- * See if we should load columns automatically or use defined ones
- */
-var anThs = [];
-var aoColumnsInit;
-var nThead = this.getElementsByTagName('thead');
-if ( nThead.length !== 0 )
-{
- _fnDetectHeader( oSettings.aoHeader, nThead[0] );
- anThs = _fnGetUniqueThs( oSettings );
-}
-
-/* If not given a column array, generate one with nulls */
-if ( oInit.aoColumns === null )
-{
- aoColumnsInit = [];
- for ( i=0, iLen=anThs.length ; i<iLen ; i++ )
- {
- aoColumnsInit.push( null );
- }
-}
-else
-{
- aoColumnsInit = oInit.aoColumns;
-}
-
-/* Add the columns */
-for ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )
-{
- /* Short cut - use the loop to check if we have column visibility state to restore */
- if ( oInit.saved_aoColumns !== undefined && oInit.saved_aoColumns.length == iLen )
- {
- if ( aoColumnsInit[i] === null )
- {
- aoColumnsInit[i] = {};
- }
- aoColumnsInit[i].bVisible = oInit.saved_aoColumns[i].bVisible;
- }
-
- _fnAddColumn( oSettings, anThs ? anThs[i] : null );
-}
-
-/* Apply the column definitions */
-_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {
- _fnColumnOptions( oSettings, iCol, oDef );
-} );
-
-
-/*
- * Sorting
- * Check the aaSorting array
- */
-for ( i=0, iLen=oSettings.aaSorting.length ; i<iLen ; i++ )
-{
- if ( oSettings.aaSorting[i][0] >= oSettings.aoColumns.length )
- {
- oSettings.aaSorting[i][0] = 0;
- }
- var oColumn = oSettings.aoColumns[ oSettings.aaSorting[i][0] ];
-
- /* Add a default sorting index */
- if ( oSettings.aaSorting[i][2] === undefined )
- {
- oSettings.aaSorting[i][2] = 0;
- }
-
- /* If aaSorting is not defined, then we use the first indicator in asSorting */
- if ( oInit.aaSorting === undefined && oSettings.saved_aaSorting === undefined )
- {
- oSettings.aaSorting[i][1] = oColumn.asSorting[0];
- }
-
- /* Set the current sorting index based on aoColumns.asSorting */
- for ( j=0, jLen=oColumn.asSorting.length ; j<jLen ; j++ )
- {
- if ( oSettings.aaSorting[i][1] == oColumn.asSorting[j] )
- {
- oSettings.aaSorting[i][2] = j;
- break;
- }
- }
-}
-
-/* Do a first pass on the sorting classes (allows any size changes to be taken into
- * account, and also will apply sorting disabled classes if disabled
- */
-_fnSortingClasses( oSettings );
-
-
-/*
- * Final init
- * Cache the header, body and footer as required, creating them if needed
- */
-
-/* Browser support detection */
-_fnBrowserDetect( oSettings );
-
-// Work around for Webkit bug 83867 - store the caption-side before removing from doc
-var captions = $(this).children('caption').each( function () {
- this._captionSide = $(this).css('caption-side');
-} );
-
-var thead = $(this).children('thead');
-if ( thead.length === 0 )
-{
- thead = [ document.createElement( 'thead' ) ];
- this.appendChild( thead[0] );
-}
-oSettings.nTHead = thead[0];
-
-var tbody = $(this).children('tbody');
-if ( tbody.length === 0 )
-{
- tbody = [ document.createElement( 'tbody' ) ];
- this.appendChild( tbody[0] );
-}
-oSettings.nTBody = tbody[0];
-oSettings.nTBody.setAttribute( "role", "alert" );
-oSettings.nTBody.setAttribute( "aria-live", "polite" );
-oSettings.nTBody.setAttribute( "aria-relevant", "all" );
-
-var tfoot = $(this).children('tfoot');
-if ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "") )
-{
- // If we are a scrolling table, and no footer has been given, then we need to create
- // a tfoot element for the caption element to be appended to
- tfoot = [ document.createElement( 'tfoot' ) ];
- this.appendChild( tfoot[0] );
-}
-
-if ( tfoot.length > 0 )
-{
- oSettings.nTFoot = tfoot[0];
- _fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );
-}
-
-/* Check if there is data passing into the constructor */
-if ( bUsePassedData )
-{
- for ( i=0 ; i<oInit.aaData.length ; i++ )
- {
- _fnAddData( oSettings, oInit.aaData[ i ] );
- }
-}
-else
-{
- /* Grab the data from the page */
- _fnGatherData( oSettings );
-}
-
-/* Copy the data index array */
-oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-
-/* Initialisation complete - table can be drawn */
-oSettings.bInitialised = true;
-
-/* Check if we need to initialise the table (it might not have been handed off to the
- * language processor)
- */
-if ( bInitHandedOff === false )
-{
- _fnInitialise( oSettings );
-}
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.data.js b/wqflask/wqflask/static/new/packages/DataTables/src/core/core.data.js
deleted file mode 100644
index 14b87d9f..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.data.js
+++ /dev/null
@@ -1,634 +0,0 @@
-/**
- * Add a data array to the table, creating DOM node etc. This is the parallel to
- * _fnGatherData, but for adding rows from a Javascript source, rather than a
- * DOM source.
- * @param {object} oSettings dataTables settings object
- * @param {array} aData data array to be added
- * @returns {int} >=0 if successful (index of new aoData entry), -1 if failed
- * @memberof DataTable#oApi
- */
-function _fnAddData ( oSettings, aDataSupplied )
-{
- var oCol;
-
- /* Take an independent copy of the data source so we can bash it about as we wish */
- var aDataIn = ($.isArray(aDataSupplied)) ?
- aDataSupplied.slice() :
- $.extend( true, {}, aDataSupplied );
-
- /* Create the object for storing information about this new row */
- var iRow = oSettings.aoData.length;
- var oData = $.extend( true, {}, DataTable.models.oRow );
- oData._aData = aDataIn;
- oSettings.aoData.push( oData );
-
- /* Create the cells */
- var nTd, sThisType;
- for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
- {
- oCol = oSettings.aoColumns[i];
-
- /* Use rendered data for filtering / sorting */
- if ( typeof oCol.fnRender === 'function' && oCol.bUseRendered && oCol.mData !== null )
- {
- _fnSetCellData( oSettings, iRow, i, _fnRender(oSettings, iRow, i) );
- }
- else
- {
- _fnSetCellData( oSettings, iRow, i, _fnGetCellData( oSettings, iRow, i ) );
- }
-
- /* See if we should auto-detect the column type */
- if ( oCol._bAutoType && oCol.sType != 'string' )
- {
- /* Attempt to auto detect the type - same as _fnGatherData() */
- var sVarType = _fnGetCellData( oSettings, iRow, i, 'type' );
- if ( sVarType !== null && sVarType !== '' )
- {
- sThisType = _fnDetectType( sVarType );
- if ( oCol.sType === null )
- {
- oCol.sType = sThisType;
- }
- else if ( oCol.sType != sThisType && oCol.sType != "html" )
- {
- /* String is always the 'fallback' option */
- oCol.sType = 'string';
- }
- }
- }
- }
-
- /* Add to the display array */
- oSettings.aiDisplayMaster.push( iRow );
-
- /* Create the DOM information */
- if ( !oSettings.oFeatures.bDeferRender )
- {
- _fnCreateTr( oSettings, iRow );
- }
-
- return iRow;
-}
-
-
-/**
- * Read in the data from the target table from the DOM
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnGatherData( oSettings )
-{
- var iLoop, i, iLen, j, jLen, jInner,
- nTds, nTrs, nTd, nTr, aLocalData, iThisIndex,
- iRow, iRows, iColumn, iColumns, sNodeName,
- oCol, oData;
-
- /*
- * Process by row first
- * Add the data object for the whole table - storing the tr node. Note - no point in getting
- * DOM based data if we are going to go and replace it with Ajax source data.
- */
- if ( oSettings.bDeferLoading || oSettings.sAjaxSource === null )
- {
- nTr = oSettings.nTBody.firstChild;
- while ( nTr )
- {
- if ( nTr.nodeName.toUpperCase() == "TR" )
- {
- iThisIndex = oSettings.aoData.length;
- nTr._DT_RowIndex = iThisIndex;
- oSettings.aoData.push( $.extend( true, {}, DataTable.models.oRow, {
- "nTr": nTr
- } ) );
-
- oSettings.aiDisplayMaster.push( iThisIndex );
- nTd = nTr.firstChild;
- jInner = 0;
- while ( nTd )
- {
- sNodeName = nTd.nodeName.toUpperCase();
- if ( sNodeName == "TD" || sNodeName == "TH" )
- {
- _fnSetCellData( oSettings, iThisIndex, jInner, $.trim(nTd.innerHTML) );
- jInner++;
- }
- nTd = nTd.nextSibling;
- }
- }
- nTr = nTr.nextSibling;
- }
- }
-
- /* Gather in the TD elements of the Table - note that this is basically the same as
- * fnGetTdNodes, but that function takes account of hidden columns, which we haven't yet
- * setup!
- */
- nTrs = _fnGetTrNodes( oSettings );
- nTds = [];
- for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
- {
- nTd = nTrs[i].firstChild;
- while ( nTd )
- {
- sNodeName = nTd.nodeName.toUpperCase();
- if ( sNodeName == "TD" || sNodeName == "TH" )
- {
- nTds.push( nTd );
- }
- nTd = nTd.nextSibling;
- }
- }
-
- /* Now process by column */
- for ( iColumn=0, iColumns=oSettings.aoColumns.length ; iColumn<iColumns ; iColumn++ )
- {
- oCol = oSettings.aoColumns[iColumn];
-
- /* Get the title of the column - unless there is a user set one */
- if ( oCol.sTitle === null )
- {
- oCol.sTitle = oCol.nTh.innerHTML;
- }
-
- var
- bAutoType = oCol._bAutoType,
- bRender = typeof oCol.fnRender === 'function',
- bClass = oCol.sClass !== null,
- bVisible = oCol.bVisible,
- nCell, sThisType, sRendered, sValType;
-
- /* A single loop to rule them all (and be more efficient) */
- if ( bAutoType || bRender || bClass || !bVisible )
- {
- for ( iRow=0, iRows=oSettings.aoData.length ; iRow<iRows ; iRow++ )
- {
- oData = oSettings.aoData[iRow];
- nCell = nTds[ (iRow*iColumns) + iColumn ];
-
- /* Type detection */
- if ( bAutoType && oCol.sType != 'string' )
- {
- sValType = _fnGetCellData( oSettings, iRow, iColumn, 'type' );
- if ( sValType !== '' )
- {
- sThisType = _fnDetectType( sValType );
- if ( oCol.sType === null )
- {
- oCol.sType = sThisType;
- }
- else if ( oCol.sType != sThisType &&
- oCol.sType != "html" )
- {
- /* String is always the 'fallback' option */
- oCol.sType = 'string';
- }
- }
- }
-
- if ( oCol.mRender )
- {
- // mRender has been defined, so we need to get the value and set it
- nCell.innerHTML = _fnGetCellData( oSettings, iRow, iColumn, 'display' );
- }
- else if ( oCol.mData !== iColumn )
- {
- // If mData is not the same as the column number, then we need to
- // get the dev set value. If it is the column, no point in wasting
- // time setting the value that is already there!
- nCell.innerHTML = _fnGetCellData( oSettings, iRow, iColumn, 'display' );
- }
-
- /* Rendering */
- if ( bRender )
- {
- sRendered = _fnRender( oSettings, iRow, iColumn );
- nCell.innerHTML = sRendered;
- if ( oCol.bUseRendered )
- {
- /* Use the rendered data for filtering / sorting */
- _fnSetCellData( oSettings, iRow, iColumn, sRendered );
- }
- }
-
- /* Classes */
- if ( bClass )
- {
- nCell.className += ' '+oCol.sClass;
- }
-
- /* Column visibility */
- if ( !bVisible )
- {
- oData._anHidden[iColumn] = nCell;
- nCell.parentNode.removeChild( nCell );
- }
- else
- {
- oData._anHidden[iColumn] = null;
- }
-
- if ( oCol.fnCreatedCell )
- {
- oCol.fnCreatedCell.call( oSettings.oInstance,
- nCell, _fnGetCellData( oSettings, iRow, iColumn, 'display' ), oData._aData, iRow, iColumn
- );
- }
- }
- }
- }
-
- /* Row created callbacks */
- if ( oSettings.aoRowCreatedCallback.length !== 0 )
- {
- for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
- {
- oData = oSettings.aoData[i];
- _fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [oData.nTr, oData._aData, i] );
- }
- }
-}
-
-
-/**
- * Take a TR element and convert it to an index in aoData
- * @param {object} oSettings dataTables settings object
- * @param {node} n the TR element to find
- * @returns {int} index if the node is found, null if not
- * @memberof DataTable#oApi
- */
-function _fnNodeToDataIndex( oSettings, n )
-{
- return (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;
-}
-
-
-/**
- * Take a TD element and convert it into a column data index (not the visible index)
- * @param {object} oSettings dataTables settings object
- * @param {int} iRow The row number the TD/TH can be found in
- * @param {node} n The TD/TH element to find
- * @returns {int} index if the node is found, -1 if not
- * @memberof DataTable#oApi
- */
-function _fnNodeToColumnIndex( oSettings, iRow, n )
-{
- var anCells = _fnGetTdNodes( oSettings, iRow );
-
- for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
- {
- if ( anCells[i] === n )
- {
- return i;
- }
- }
- return -1;
-}
-
-
-/**
- * Get an array of data for a given row from the internal data cache
- * @param {object} oSettings dataTables settings object
- * @param {int} iRow aoData row id
- * @param {string} sSpecific data get type ('type' 'filter' 'sort')
- * @param {array} aiColumns Array of column indexes to get data from
- * @returns {array} Data array
- * @memberof DataTable#oApi
- */
-function _fnGetRowData( oSettings, iRow, sSpecific, aiColumns )
-{
- var out = [];
- for ( var i=0, iLen=aiColumns.length ; i<iLen ; i++ )
- {
- out.push( _fnGetCellData( oSettings, iRow, aiColumns[i], sSpecific ) );
- }
- return out;
-}
-
-
-/**
- * Get the data for a given cell from the internal cache, taking into account data mapping
- * @param {object} oSettings dataTables settings object
- * @param {int} iRow aoData row id
- * @param {int} iCol Column index
- * @param {string} sSpecific data get type ('display', 'type' 'filter' 'sort')
- * @returns {*} Cell data
- * @memberof DataTable#oApi
- */
-function _fnGetCellData( oSettings, iRow, iCol, sSpecific )
-{
- var sData;
- var oCol = oSettings.aoColumns[iCol];
- var oData = oSettings.aoData[iRow]._aData;
-
- if ( (sData=oCol.fnGetData( oData, sSpecific )) === undefined )
- {
- if ( oSettings.iDrawError != oSettings.iDraw && oCol.sDefaultContent === null )
- {
- _fnLog( oSettings, 0, "Requested unknown parameter "+
- (typeof oCol.mData=='function' ? '{mData function}' : "'"+oCol.mData+"'")+
- " from the data source for row "+iRow );
- oSettings.iDrawError = oSettings.iDraw;
- }
- return oCol.sDefaultContent;
- }
-
- /* When the data source is null, we can use default column data */
- if ( sData === null && oCol.sDefaultContent !== null )
- {
- sData = oCol.sDefaultContent;
- }
- else if ( typeof sData === 'function' )
- {
- /* If the data source is a function, then we run it and use the return */
- return sData();
- }
-
- if ( sSpecific == 'display' && sData === null )
- {
- return '';
- }
- return sData;
-}
-
-
-/**
- * Set the value for a specific cell, into the internal data cache
- * @param {object} oSettings dataTables settings object
- * @param {int} iRow aoData row id
- * @param {int} iCol Column index
- * @param {*} val Value to set
- * @memberof DataTable#oApi
- */
-function _fnSetCellData( oSettings, iRow, iCol, val )
-{
- var oCol = oSettings.aoColumns[iCol];
- var oData = oSettings.aoData[iRow]._aData;
-
- oCol.fnSetData( oData, val );
-}
-
-
-// Private variable that is used to match array syntax in the data property object
-var __reArray = /\[.*?\]$/;
-
-/**
- * Return a function that can be used to get data from a source object, taking
- * into account the ability to use nested objects as a source
- * @param {string|int|function} mSource The data source for the object
- * @returns {function} Data get function
- * @memberof DataTable#oApi
- */
-function _fnGetObjectDataFn( mSource )
-{
- if ( mSource === null )
- {
- /* Give an empty string for rendering / sorting etc */
- return function (data, type) {
- return null;
- };
- }
- else if ( typeof mSource === 'function' )
- {
- return function (data, type, extra) {
- return mSource( data, type, extra );
- };
- }
- else if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 || mSource.indexOf('[') !== -1) )
- {
- /* If there is a . in the source string then the data source is in a
- * nested object so we loop over the data for each level to get the next
- * level down. On each loop we test for undefined, and if found immediately
- * return. This allows entire objects to be missing and sDefaultContent to
- * be used if defined, rather than throwing an error
- */
- var fetchData = function (data, type, src) {
- var a = src.split('.');
- var arrayNotation, out, innerSrc;
-
- if ( src !== "" )
- {
- for ( var i=0, iLen=a.length ; i<iLen ; i++ )
- {
- // Check if we are dealing with an array notation request
- arrayNotation = a[i].match(__reArray);
-
- if ( arrayNotation ) {
- a[i] = a[i].replace(__reArray, '');
-
- // Condition allows simply [] to be passed in
- if ( a[i] !== "" ) {
- data = data[ a[i] ];
- }
- out = [];
-
- // Get the remainder of the nested object to get
- a.splice( 0, i+1 );
- innerSrc = a.join('.');
-
- // Traverse each entry in the array getting the properties requested
- for ( var j=0, jLen=data.length ; j<jLen ; j++ ) {
- out.push( fetchData( data[j], type, innerSrc ) );
- }
-
- // If a string is given in between the array notation indicators, that
- // is used to join the strings together, otherwise an array is returned
- var join = arrayNotation[0].substring(1, arrayNotation[0].length-1);
- data = (join==="") ? out : out.join(join);
-
- // The inner call to fetchData has already traversed through the remainder
- // of the source requested, so we exit from the loop
- break;
- }
-
- if ( data === null || data[ a[i] ] === undefined )
- {
- return undefined;
- }
- data = data[ a[i] ];
- }
- }
-
- return data;
- };
-
- return function (data, type) {
- return fetchData( data, type, mSource );
- };
- }
- else
- {
- /* Array or flat object mapping */
- return function (data, type) {
- return data[mSource];
- };
- }
-}
-
-
-/**
- * Return a function that can be used to set data from a source object, taking
- * into account the ability to use nested objects as a source
- * @param {string|int|function} mSource The data source for the object
- * @returns {function} Data set function
- * @memberof DataTable#oApi
- */
-function _fnSetObjectDataFn( mSource )
-{
- if ( mSource === null )
- {
- /* Nothing to do when the data source is null */
- return function (data, val) {};
- }
- else if ( typeof mSource === 'function' )
- {
- return function (data, val) {
- mSource( data, 'set', val );
- };
- }
- else if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 || mSource.indexOf('[') !== -1) )
- {
- /* Like the get, we need to get data from a nested object */
- var setData = function (data, val, src) {
- var a = src.split('.'), b;
- var arrayNotation, o, innerSrc;
-
- for ( var i=0, iLen=a.length-1 ; i<iLen ; i++ )
- {
- // Check if we are dealing with an array notation request
- arrayNotation = a[i].match(__reArray);
-
- if ( arrayNotation )
- {
- a[i] = a[i].replace(__reArray, '');
- data[ a[i] ] = [];
-
- // Get the remainder of the nested object to set so we can recurse
- b = a.slice();
- b.splice( 0, i+1 );
- innerSrc = b.join('.');
-
- // Traverse each entry in the array setting the properties requested
- for ( var j=0, jLen=val.length ; j<jLen ; j++ )
- {
- o = {};
- setData( o, val[j], innerSrc );
- data[ a[i] ].push( o );
- }
-
- // The inner call to setData has already traversed through the remainder
- // of the source and has set the data, thus we can exit here
- return;
- }
-
- // If the nested object doesn't currently exist - since we are
- // trying to set the value - create it
- if ( data[ a[i] ] === null || data[ a[i] ] === undefined )
- {
- data[ a[i] ] = {};
- }
- data = data[ a[i] ];
- }
-
- // If array notation is used, we just want to strip it and use the property name
- // and assign the value. If it isn't used, then we get the result we want anyway
- data[ a[a.length-1].replace(__reArray, '') ] = val;
- };
-
- return function (data, val) {
- return setData( data, val, mSource );
- };
- }
- else
- {
- /* Array or flat object mapping */
- return function (data, val) {
- data[mSource] = val;
- };
- }
-}
-
-
-/**
- * Return an array with the full table data
- * @param {object} oSettings dataTables settings object
- * @returns array {array} aData Master data array
- * @memberof DataTable#oApi
- */
-function _fnGetDataMaster ( oSettings )
-{
- var aData = [];
- var iLen = oSettings.aoData.length;
- for ( var i=0 ; i<iLen; i++ )
- {
- aData.push( oSettings.aoData[i]._aData );
- }
- return aData;
-}
-
-
-/**
- * Nuke the table
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnClearTable( oSettings )
-{
- oSettings.aoData.splice( 0, oSettings.aoData.length );
- oSettings.aiDisplayMaster.splice( 0, oSettings.aiDisplayMaster.length );
- oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length );
- _fnCalculateEnd( oSettings );
-}
-
-
- /**
- * Take an array of integers (index array) and remove a target integer (value - not
- * the key!)
- * @param {array} a Index array to target
- * @param {int} iTarget value to find
- * @memberof DataTable#oApi
- */
-function _fnDeleteIndex( a, iTarget )
-{
- var iTargetIndex = -1;
-
- for ( var i=0, iLen=a.length ; i<iLen ; i++ )
- {
- if ( a[i] == iTarget )
- {
- iTargetIndex = i;
- }
- else if ( a[i] > iTarget )
- {
- a[i]--;
- }
- }
-
- if ( iTargetIndex != -1 )
- {
- a.splice( iTargetIndex, 1 );
- }
-}
-
-
- /**
- * Call the developer defined fnRender function for a given cell (row/column) with
- * the required parameters and return the result.
- * @param {object} oSettings dataTables settings object
- * @param {int} iRow aoData index for the row
- * @param {int} iCol aoColumns index for the column
- * @returns {*} Return of the developer's fnRender function
- * @memberof DataTable#oApi
- */
-function _fnRender( oSettings, iRow, iCol )
-{
- var oCol = oSettings.aoColumns[iCol];
-
- return oCol.fnRender( {
- "iDataRow": iRow,
- "iDataColumn": iCol,
- "oSettings": oSettings,
- "aData": oSettings.aoData[iRow]._aData,
- "mDataProp": oCol.mData
- }, _fnGetCellData(oSettings, iRow, iCol, 'display') );
-}
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.draw.js b/wqflask/wqflask/static/new/packages/DataTables/src/core/core.draw.js
deleted file mode 100644
index 47cc0ce3..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.draw.js
+++ /dev/null
@@ -1,792 +0,0 @@
-/**
- * Create a new TR element (and it's TD children) for a row
- * @param {object} oSettings dataTables settings object
- * @param {int} iRow Row to consider
- * @memberof DataTable#oApi
- */
-function _fnCreateTr ( oSettings, iRow )
-{
- var oData = oSettings.aoData[iRow];
- var nTd;
-
- if ( oData.nTr === null )
- {
- oData.nTr = document.createElement('tr');
-
- /* Use a private property on the node to allow reserve mapping from the node
- * to the aoData array for fast look up
- */
- oData.nTr._DT_RowIndex = iRow;
-
- /* Special parameters can be given by the data source to be used on the row */
- if ( oData._aData.DT_RowId )
- {
- oData.nTr.id = oData._aData.DT_RowId;
- }
-
- if ( oData._aData.DT_RowClass )
- {
- oData.nTr.className = oData._aData.DT_RowClass;
- }
-
- /* Process each column */
- for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
- {
- var oCol = oSettings.aoColumns[i];
- nTd = document.createElement( oCol.sCellType );
-
- /* Render if needed - if bUseRendered is true then we already have the rendered
- * value in the data source - so can just use that
- */
- nTd.innerHTML = (typeof oCol.fnRender === 'function' && (!oCol.bUseRendered || oCol.mData === null)) ?
- _fnRender( oSettings, iRow, i ) :
- _fnGetCellData( oSettings, iRow, i, 'display' );
-
- /* Add user defined class */
- if ( oCol.sClass !== null )
- {
- nTd.className = oCol.sClass;
- }
-
- if ( oCol.bVisible )
- {
- oData.nTr.appendChild( nTd );
- oData._anHidden[i] = null;
- }
- else
- {
- oData._anHidden[i] = nTd;
- }
-
- if ( oCol.fnCreatedCell )
- {
- oCol.fnCreatedCell.call( oSettings.oInstance,
- nTd, _fnGetCellData( oSettings, iRow, i, 'display' ), oData._aData, iRow, i
- );
- }
- }
-
- _fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [oData.nTr, oData._aData, iRow] );
- }
-}
-
-
-/**
- * Create the HTML header for the table
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnBuildHead( oSettings )
-{
- var i, nTh, iLen, j, jLen;
- var iThs = $('th, td', oSettings.nTHead).length;
- var iCorrector = 0;
- var jqChildren;
-
- /* If there is a header in place - then use it - otherwise it's going to get nuked... */
- if ( iThs !== 0 )
- {
- /* We've got a thead from the DOM, so remove hidden columns and apply width to vis cols */
- for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
- {
- nTh = oSettings.aoColumns[i].nTh;
- nTh.setAttribute('role', 'columnheader');
- if ( oSettings.aoColumns[i].bSortable )
- {
- nTh.setAttribute('tabindex', oSettings.iTabIndex);
- nTh.setAttribute('aria-controls', oSettings.sTableId);
- }
-
- if ( oSettings.aoColumns[i].sClass !== null )
- {
- $(nTh).addClass( oSettings.aoColumns[i].sClass );
- }
-
- /* Set the title of the column if it is user defined (not what was auto detected) */
- if ( oSettings.aoColumns[i].sTitle != nTh.innerHTML )
- {
- nTh.innerHTML = oSettings.aoColumns[i].sTitle;
- }
- }
- }
- else
- {
- /* We don't have a header in the DOM - so we are going to have to create one */
- var nTr = document.createElement( "tr" );
-
- for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
- {
- nTh = oSettings.aoColumns[i].nTh;
- nTh.innerHTML = oSettings.aoColumns[i].sTitle;
- nTh.setAttribute('tabindex', '0');
-
- if ( oSettings.aoColumns[i].sClass !== null )
- {
- $(nTh).addClass( oSettings.aoColumns[i].sClass );
- }
-
- nTr.appendChild( nTh );
- }
- $(oSettings.nTHead).html( '' )[0].appendChild( nTr );
- _fnDetectHeader( oSettings.aoHeader, oSettings.nTHead );
- }
-
- /* ARIA role for the rows */
- $(oSettings.nTHead).children('tr').attr('role', 'row');
-
- /* Add the extra markup needed by jQuery UI's themes */
- if ( oSettings.bJUI )
- {
- for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
- {
- nTh = oSettings.aoColumns[i].nTh;
-
- var nDiv = document.createElement('div');
- nDiv.className = oSettings.oClasses.sSortJUIWrapper;
- $(nTh).contents().appendTo(nDiv);
-
- var nSpan = document.createElement('span');
- nSpan.className = oSettings.oClasses.sSortIcon;
- nDiv.appendChild( nSpan );
- nTh.appendChild( nDiv );
- }
- }
-
- if ( oSettings.oFeatures.bSort )
- {
- for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
- {
- if ( oSettings.aoColumns[i].bSortable !== false )
- {
- _fnSortAttachListener( oSettings, oSettings.aoColumns[i].nTh, i );
- }
- else
- {
- $(oSettings.aoColumns[i].nTh).addClass( oSettings.oClasses.sSortableNone );
- }
- }
- }
-
- /* Deal with the footer - add classes if required */
- if ( oSettings.oClasses.sFooterTH !== "" )
- {
- $(oSettings.nTFoot).children('tr').children('th').addClass( oSettings.oClasses.sFooterTH );
- }
-
- /* Cache the footer elements */
- if ( oSettings.nTFoot !== null )
- {
- var anCells = _fnGetUniqueThs( oSettings, null, oSettings.aoFooter );
- for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
- {
- if ( anCells[i] )
- {
- oSettings.aoColumns[i].nTf = anCells[i];
- if ( oSettings.aoColumns[i].sClass )
- {
- $(anCells[i]).addClass( oSettings.aoColumns[i].sClass );
- }
- }
- }
- }
-}
-
-
-/**
- * Draw the header (or footer) element based on the column visibility states. The
- * methodology here is to use the layout array from _fnDetectHeader, modified for
- * the instantaneous column visibility, to construct the new layout. The grid is
- * traversed over cell at a time in a rows x columns grid fashion, although each
- * cell insert can cover multiple elements in the grid - which is tracks using the
- * aApplied array. Cell inserts in the grid will only occur where there isn't
- * already a cell in that position.
- * @param {object} oSettings dataTables settings object
- * @param array {objects} aoSource Layout array from _fnDetectHeader
- * @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc,
- * @memberof DataTable#oApi
- */
-function _fnDrawHead( oSettings, aoSource, bIncludeHidden )
-{
- var i, iLen, j, jLen, k, kLen, n, nLocalTr;
- var aoLocal = [];
- var aApplied = [];
- var iColumns = oSettings.aoColumns.length;
- var iRowspan, iColspan;
-
- if ( bIncludeHidden === undefined )
- {
- bIncludeHidden = false;
- }
-
- /* Make a copy of the master layout array, but without the visible columns in it */
- for ( i=0, iLen=aoSource.length ; i<iLen ; i++ )
- {
- aoLocal[i] = aoSource[i].slice();
- aoLocal[i].nTr = aoSource[i].nTr;
-
- /* Remove any columns which are currently hidden */
- for ( j=iColumns-1 ; j>=0 ; j-- )
- {
- if ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )
- {
- aoLocal[i].splice( j, 1 );
- }
- }
-
- /* Prep the applied array - it needs an element for each row */
- aApplied.push( [] );
- }
-
- for ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )
- {
- nLocalTr = aoLocal[i].nTr;
-
- /* All cells are going to be replaced, so empty out the row */
- if ( nLocalTr )
- {
- while( (n = nLocalTr.firstChild) )
- {
- nLocalTr.removeChild( n );
- }
- }
-
- for ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )
- {
- iRowspan = 1;
- iColspan = 1;
-
- /* Check to see if there is already a cell (row/colspan) covering our target
- * insert point. If there is, then there is nothing to do.
- */
- if ( aApplied[i][j] === undefined )
- {
- nLocalTr.appendChild( aoLocal[i][j].cell );
- aApplied[i][j] = 1;
-
- /* Expand the cell to cover as many rows as needed */
- while ( aoLocal[i+iRowspan] !== undefined &&
- aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )
- {
- aApplied[i+iRowspan][j] = 1;
- iRowspan++;
- }
-
- /* Expand the cell to cover as many columns as needed */
- while ( aoLocal[i][j+iColspan] !== undefined &&
- aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )
- {
- /* Must update the applied array over the rows for the columns */
- for ( k=0 ; k<iRowspan ; k++ )
- {
- aApplied[i+k][j+iColspan] = 1;
- }
- iColspan++;
- }
-
- /* Do the actual expansion in the DOM */
- aoLocal[i][j].cell.rowSpan = iRowspan;
- aoLocal[i][j].cell.colSpan = iColspan;
- }
- }
- }
-}
-
-
-/**
- * Insert the required TR nodes into the table for display
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnDraw( oSettings )
-{
- /* Provide a pre-callback function which can be used to cancel the draw is false is returned */
- var aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );
- if ( $.inArray( false, aPreDraw ) !== -1 )
- {
- _fnProcessingDisplay( oSettings, false );
- return;
- }
-
- var i, iLen, n;
- var anRows = [];
- var iRowCount = 0;
- var iStripes = oSettings.asStripeClasses.length;
- var iOpenRows = oSettings.aoOpenRows.length;
-
- oSettings.bDrawing = true;
-
- /* Check and see if we have an initial draw position from state saving */
- if ( oSettings.iInitDisplayStart !== undefined && oSettings.iInitDisplayStart != -1 )
- {
- if ( oSettings.oFeatures.bServerSide )
- {
- oSettings._iDisplayStart = oSettings.iInitDisplayStart;
- }
- else
- {
- oSettings._iDisplayStart = (oSettings.iInitDisplayStart >= oSettings.fnRecordsDisplay()) ?
- 0 : oSettings.iInitDisplayStart;
- }
- oSettings.iInitDisplayStart = -1;
- _fnCalculateEnd( oSettings );
- }
-
- /* Server-side processing draw intercept */
- if ( oSettings.bDeferLoading )
- {
- oSettings.bDeferLoading = false;
- oSettings.iDraw++;
- }
- else if ( !oSettings.oFeatures.bServerSide )
- {
- oSettings.iDraw++;
- }
- else if ( !oSettings.bDestroying && !_fnAjaxUpdate( oSettings ) )
- {
- return;
- }
-
- if ( oSettings.aiDisplay.length !== 0 )
- {
- var iStart = oSettings._iDisplayStart;
- var iEnd = oSettings._iDisplayEnd;
-
- if ( oSettings.oFeatures.bServerSide )
- {
- iStart = 0;
- iEnd = oSettings.aoData.length;
- }
-
- for ( var j=iStart ; j<iEnd ; j++ )
- {
- var aoData = oSettings.aoData[ oSettings.aiDisplay[j] ];
- if ( aoData.nTr === null )
- {
- _fnCreateTr( oSettings, oSettings.aiDisplay[j] );
- }
-
- var nRow = aoData.nTr;
-
- /* Remove the old striping classes and then add the new one */
- if ( iStripes !== 0 )
- {
- var sStripe = oSettings.asStripeClasses[ iRowCount % iStripes ];
- if ( aoData._sRowStripe != sStripe )
- {
- $(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe );
- aoData._sRowStripe = sStripe;
- }
- }
-
- /* Row callback functions - might want to manipulate the row */
- _fnCallbackFire( oSettings, 'aoRowCallback', null,
- [nRow, oSettings.aoData[ oSettings.aiDisplay[j] ]._aData, iRowCount, j] );
-
- anRows.push( nRow );
- iRowCount++;
-
- /* If there is an open row - and it is attached to this parent - attach it on redraw */
- if ( iOpenRows !== 0 )
- {
- for ( var k=0 ; k<iOpenRows ; k++ )
- {
- if ( nRow == oSettings.aoOpenRows[k].nParent )
- {
- anRows.push( oSettings.aoOpenRows[k].nTr );
- break;
- }
- }
- }
- }
- }
- else
- {
- /* Table is empty - create a row with an empty message in it */
- anRows[ 0 ] = document.createElement( 'tr' );
-
- if ( oSettings.asStripeClasses[0] )
- {
- anRows[ 0 ].className = oSettings.asStripeClasses[0];
- }
-
- var oLang = oSettings.oLanguage;
- var sZero = oLang.sZeroRecords;
- if ( oSettings.iDraw == 1 && oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide )
- {
- sZero = oLang.sLoadingRecords;
- }
- else if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )
- {
- sZero = oLang.sEmptyTable;
- }
-
- var nTd = document.createElement( 'td' );
- nTd.setAttribute( 'valign', "top" );
- nTd.colSpan = _fnVisbleColumns( oSettings );
- nTd.className = oSettings.oClasses.sRowEmpty;
- nTd.innerHTML = _fnInfoMacros( oSettings, sZero );
-
- anRows[ iRowCount ].appendChild( nTd );
- }
-
- /* Header and footer callbacks */
- _fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],
- _fnGetDataMaster( oSettings ), oSettings._iDisplayStart, oSettings.fnDisplayEnd(), oSettings.aiDisplay ] );
-
- _fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],
- _fnGetDataMaster( oSettings ), oSettings._iDisplayStart, oSettings.fnDisplayEnd(), oSettings.aiDisplay ] );
-
- /*
- * Need to remove any old row from the display - note we can't just empty the tbody using
- * $().html('') since this will unbind the jQuery event handlers (even although the node
- * still exists!) - equally we can't use innerHTML, since IE throws an exception.
- */
- var
- nAddFrag = document.createDocumentFragment(),
- nRemoveFrag = document.createDocumentFragment(),
- nBodyPar, nTrs;
-
- if ( oSettings.nTBody )
- {
- nBodyPar = oSettings.nTBody.parentNode;
- nRemoveFrag.appendChild( oSettings.nTBody );
-
- /* When doing infinite scrolling, only remove child rows when sorting, filtering or start
- * up. When not infinite scroll, always do it.
- */
- if ( !oSettings.oScroll.bInfinite || !oSettings._bInitComplete ||
- oSettings.bSorted || oSettings.bFiltered )
- {
- while( (n = oSettings.nTBody.firstChild) )
- {
- oSettings.nTBody.removeChild( n );
- }
- }
-
- /* Put the draw table into the dom */
- for ( i=0, iLen=anRows.length ; i<iLen ; i++ )
- {
- nAddFrag.appendChild( anRows[i] );
- }
-
- oSettings.nTBody.appendChild( nAddFrag );
- if ( nBodyPar !== null )
- {
- nBodyPar.appendChild( oSettings.nTBody );
- }
- }
-
- /* Call all required callback functions for the end of a draw */
- _fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );
-
- /* Draw is complete, sorting and filtering must be as well */
- oSettings.bSorted = false;
- oSettings.bFiltered = false;
- oSettings.bDrawing = false;
-
- if ( oSettings.oFeatures.bServerSide )
- {
- _fnProcessingDisplay( oSettings, false );
- if ( !oSettings._bInitComplete )
- {
- _fnInitComplete( oSettings );
- }
- }
-}
-
-
-/**
- * Redraw the table - taking account of the various features which are enabled
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnReDraw( oSettings )
-{
- if ( oSettings.oFeatures.bSort )
- {
- /* Sorting will refilter and draw for us */
- _fnSort( oSettings, oSettings.oPreviousSearch );
- }
- else if ( oSettings.oFeatures.bFilter )
- {
- /* Filtering will redraw for us */
- _fnFilterComplete( oSettings, oSettings.oPreviousSearch );
- }
- else
- {
- _fnCalculateEnd( oSettings );
- _fnDraw( oSettings );
- }
-}
-
-
-/**
- * Add the options to the page HTML for the table
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnAddOptionsHtml ( oSettings )
-{
- /*
- * Create a temporary, empty, div which we can later on replace with what we have generated
- * we do it this way to rendering the 'options' html offline - speed :-)
- */
- var nHolding = $('<div></div>')[0];
- oSettings.nTable.parentNode.insertBefore( nHolding, oSettings.nTable );
-
- /*
- * All DataTables are wrapped in a div
- */
- oSettings.nTableWrapper = $('<div id="'+oSettings.sTableId+'_wrapper" class="'+oSettings.oClasses.sWrapper+'" role="grid"></div>')[0];
- oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;
-
- /* Track where we want to insert the option */
- var nInsertNode = oSettings.nTableWrapper;
-
- /* Loop over the user set positioning and place the elements as needed */
- var aDom = oSettings.sDom.split('');
- var nTmp, iPushFeature, cOption, nNewNode, cNext, sAttr, j;
- for ( var i=0 ; i<aDom.length ; i++ )
- {
- iPushFeature = 0;
- cOption = aDom[i];
-
- if ( cOption == '<' )
- {
- /* New container div */
- nNewNode = $('<div></div>')[0];
-
- /* Check to see if we should append an id and/or a class name to the container */
- cNext = aDom[i+1];
- if ( cNext == "'" || cNext == '"' )
- {
- sAttr = "";
- j = 2;
- while ( aDom[i+j] != cNext )
- {
- sAttr += aDom[i+j];
- j++;
- }
-
- /* Replace jQuery UI constants */
- if ( sAttr == "H" )
- {
- sAttr = oSettings.oClasses.sJUIHeader;
- }
- else if ( sAttr == "F" )
- {
- sAttr = oSettings.oClasses.sJUIFooter;
- }
-
- /* The attribute can be in the format of "#id.class", "#id" or "class" This logic
- * breaks the string into parts and applies them as needed
- */
- if ( sAttr.indexOf('.') != -1 )
- {
- var aSplit = sAttr.split('.');
- nNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);
- nNewNode.className = aSplit[1];
- }
- else if ( sAttr.charAt(0) == "#" )
- {
- nNewNode.id = sAttr.substr(1, sAttr.length-1);
- }
- else
- {
- nNewNode.className = sAttr;
- }
-
- i += j; /* Move along the position array */
- }
-
- nInsertNode.appendChild( nNewNode );
- nInsertNode = nNewNode;
- }
- else if ( cOption == '>' )
- {
- /* End container div */
- nInsertNode = nInsertNode.parentNode;
- }
- else if ( cOption == 'l' && oSettings.oFeatures.bPaginate && oSettings.oFeatures.bLengthChange )
- {
- /* Length */
- nTmp = _fnFeatureHtmlLength( oSettings );
- iPushFeature = 1;
- }
- else if ( cOption == 'f' && oSettings.oFeatures.bFilter )
- {
- /* Filter */
- nTmp = _fnFeatureHtmlFilter( oSettings );
- iPushFeature = 1;
- }
- else if ( cOption == 'r' && oSettings.oFeatures.bProcessing )
- {
- /* pRocessing */
- nTmp = _fnFeatureHtmlProcessing( oSettings );
- iPushFeature = 1;
- }
- else if ( cOption == 't' )
- {
- /* Table */
- nTmp = _fnFeatureHtmlTable( oSettings );
- iPushFeature = 1;
- }
- else if ( cOption == 'i' && oSettings.oFeatures.bInfo )
- {
- /* Info */
- nTmp = _fnFeatureHtmlInfo( oSettings );
- iPushFeature = 1;
- }
- else if ( cOption == 'p' && oSettings.oFeatures.bPaginate )
- {
- /* Pagination */
- nTmp = _fnFeatureHtmlPaginate( oSettings );
- iPushFeature = 1;
- }
- else if ( DataTable.ext.aoFeatures.length !== 0 )
- {
- /* Plug-in features */
- var aoFeatures = DataTable.ext.aoFeatures;
- for ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )
- {
- if ( cOption == aoFeatures[k].cFeature )
- {
- nTmp = aoFeatures[k].fnInit( oSettings );
- if ( nTmp )
- {
- iPushFeature = 1;
- }
- break;
- }
- }
- }
-
- /* Add to the 2D features array */
- if ( iPushFeature == 1 && nTmp !== null )
- {
- if ( typeof oSettings.aanFeatures[cOption] !== 'object' )
- {
- oSettings.aanFeatures[cOption] = [];
- }
- oSettings.aanFeatures[cOption].push( nTmp );
- nInsertNode.appendChild( nTmp );
- }
- }
-
- /* Built our DOM structure - replace the holding div with what we want */
- nHolding.parentNode.replaceChild( oSettings.nTableWrapper, nHolding );
-}
-
-
-/**
- * Use the DOM source to create up an array of header cells. The idea here is to
- * create a layout grid (array) of rows x columns, which contains a reference
- * to the cell that that point in the grid (regardless of col/rowspan), such that
- * any column / row could be removed and the new grid constructed
- * @param array {object} aLayout Array to store the calculated layout in
- * @param {node} nThead The header/footer element for the table
- * @memberof DataTable#oApi
- */
-function _fnDetectHeader ( aLayout, nThead )
-{
- var nTrs = $(nThead).children('tr');
- var nTr, nCell;
- var i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;
- var bUnique;
- var fnShiftCol = function ( a, i, j ) {
- var k = a[i];
- while ( k[j] ) {
- j++;
- }
- return j;
- };
-
- aLayout.splice( 0, aLayout.length );
-
- /* We know how many rows there are in the layout - so prep it */
- for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
- {
- aLayout.push( [] );
- }
-
- /* Calculate a layout array */
- for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
- {
- nTr = nTrs[i];
- iColumn = 0;
-
- /* For every cell in the row... */
- nCell = nTr.firstChild;
- while ( nCell ) {
- if ( nCell.nodeName.toUpperCase() == "TD" ||
- nCell.nodeName.toUpperCase() == "TH" )
- {
- /* Get the col and rowspan attributes from the DOM and sanitise them */
- iColspan = nCell.getAttribute('colspan') * 1;
- iRowspan = nCell.getAttribute('rowspan') * 1;
- iColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;
- iRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;
-
- /* There might be colspan cells already in this row, so shift our target
- * accordingly
- */
- iColShifted = fnShiftCol( aLayout, i, iColumn );
-
- /* Cache calculation for unique columns */
- bUnique = iColspan === 1 ? true : false;
-
- /* If there is col / rowspan, copy the information into the layout grid */
- for ( l=0 ; l<iColspan ; l++ )
- {
- for ( k=0 ; k<iRowspan ; k++ )
- {
- aLayout[i+k][iColShifted+l] = {
- "cell": nCell,
- "unique": bUnique
- };
- aLayout[i+k].nTr = nTr;
- }
- }
- }
- nCell = nCell.nextSibling;
- }
- }
-}
-
-
-/**
- * Get an array of unique th elements, one for each column
- * @param {object} oSettings dataTables settings object
- * @param {node} nHeader automatically detect the layout from this node - optional
- * @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional
- * @returns array {node} aReturn list of unique th's
- * @memberof DataTable#oApi
- */
-function _fnGetUniqueThs ( oSettings, nHeader, aLayout )
-{
- var aReturn = [];
- if ( !aLayout )
- {
- aLayout = oSettings.aoHeader;
- if ( nHeader )
- {
- aLayout = [];
- _fnDetectHeader( aLayout, nHeader );
- }
- }
-
- for ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )
- {
- for ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ )
- {
- if ( aLayout[i][j].unique &&
- (!aReturn[j] || !oSettings.bSortCellsTop) )
- {
- aReturn[j] = aLayout[i][j].cell;
- }
- }
- }
-
- return aReturn;
-}
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.filter.js b/wqflask/wqflask/static/new/packages/DataTables/src/core/core.filter.js
deleted file mode 100644
index c42c2e96..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.filter.js
+++ /dev/null
@@ -1,399 +0,0 @@
-
-
-/**
- * Generate the node required for filtering text
- * @returns {node} Filter control element
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnFeatureHtmlFilter ( oSettings )
-{
- var oPreviousSearch = oSettings.oPreviousSearch;
-
- var sSearchStr = oSettings.oLanguage.sSearch;
- sSearchStr = (sSearchStr.indexOf('_INPUT_') !== -1) ?
- sSearchStr.replace('_INPUT_', '<input type="text" />') :
- sSearchStr==="" ? '<input type="text" />' : sSearchStr+' <input type="text" />';
-
- var nFilter = document.createElement( 'div' );
- nFilter.className = oSettings.oClasses.sFilter;
- nFilter.innerHTML = '<label>'+sSearchStr+'</label>';
- if ( !oSettings.aanFeatures.f )
- {
- nFilter.id = oSettings.sTableId+'_filter';
- }
-
- var jqFilter = $('input[type="text"]', nFilter);
-
- // Store a reference to the input element, so other input elements could be
- // added to the filter wrapper if needed (submit button for example)
- nFilter._DT_Input = jqFilter[0];
-
- jqFilter.val( oPreviousSearch.sSearch.replace('"','&quot;') );
- jqFilter.bind( 'keyup.DT', function(e) {
- /* Update all other filter input elements for the new display */
- var n = oSettings.aanFeatures.f;
- var val = this.value==="" ? "" : this.value; // mental IE8 fix :-(
-
- for ( var i=0, iLen=n.length ; i<iLen ; i++ )
- {
- if ( n[i] != $(this).parents('div.dataTables_filter')[0] )
- {
- $(n[i]._DT_Input).val( val );
- }
- }
-
- /* Now do the filter */
- if ( val != oPreviousSearch.sSearch )
- {
- _fnFilterComplete( oSettings, {
- "sSearch": val,
- "bRegex": oPreviousSearch.bRegex,
- "bSmart": oPreviousSearch.bSmart ,
- "bCaseInsensitive": oPreviousSearch.bCaseInsensitive
- } );
- }
- } );
-
- jqFilter
- .attr('aria-controls', oSettings.sTableId)
- .bind( 'keypress.DT', function(e) {
- /* Prevent form submission */
- if ( e.keyCode == 13 )
- {
- return false;
- }
- }
- );
-
- return nFilter;
-}
-
-
-/**
- * Filter the table using both the global filter and column based filtering
- * @param {object} oSettings dataTables settings object
- * @param {object} oSearch search information
- * @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)
- * @memberof DataTable#oApi
- */
-function _fnFilterComplete ( oSettings, oInput, iForce )
-{
- var oPrevSearch = oSettings.oPreviousSearch;
- var aoPrevSearch = oSettings.aoPreSearchCols;
- var fnSaveFilter = function ( oFilter ) {
- /* Save the filtering values */
- oPrevSearch.sSearch = oFilter.sSearch;
- oPrevSearch.bRegex = oFilter.bRegex;
- oPrevSearch.bSmart = oFilter.bSmart;
- oPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;
- };
-
- /* In server-side processing all filtering is done by the server, so no point hanging around here */
- if ( !oSettings.oFeatures.bServerSide )
- {
- /* Global filter */
- _fnFilter( oSettings, oInput.sSearch, iForce, oInput.bRegex, oInput.bSmart, oInput.bCaseInsensitive );
- fnSaveFilter( oInput );
-
- /* Now do the individual column filter */
- for ( var i=0 ; i<oSettings.aoPreSearchCols.length ; i++ )
- {
- _fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, aoPrevSearch[i].bRegex,
- aoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );
- }
-
- /* Custom filtering */
- _fnFilterCustom( oSettings );
- }
- else
- {
- fnSaveFilter( oInput );
- }
-
- /* Tell the draw function we have been filtering */
- oSettings.bFiltered = true;
- $(oSettings.oInstance).trigger('filter', oSettings);
-
- /* Redraw the table */
- oSettings._iDisplayStart = 0;
- _fnCalculateEnd( oSettings );
- _fnDraw( oSettings );
-
- /* Rebuild search array 'offline' */
- _fnBuildSearchArray( oSettings, 0 );
-}
-
-
-/**
- * Apply custom filtering functions
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnFilterCustom( oSettings )
-{
- var afnFilters = DataTable.ext.afnFiltering;
- var aiFilterColumns = _fnGetColumns( oSettings, 'bSearchable' );
-
- for ( var i=0, iLen=afnFilters.length ; i<iLen ; i++ )
- {
- var iCorrector = 0;
- for ( var j=0, jLen=oSettings.aiDisplay.length ; j<jLen ; j++ )
- {
- var iDisIndex = oSettings.aiDisplay[j-iCorrector];
- var bTest = afnFilters[i](
- oSettings,
- _fnGetRowData( oSettings, iDisIndex, 'filter', aiFilterColumns ),
- iDisIndex
- );
-
- /* Check if we should use this row based on the filtering function */
- if ( !bTest )
- {
- oSettings.aiDisplay.splice( j-iCorrector, 1 );
- iCorrector++;
- }
- }
- }
-}
-
-
-/**
- * Filter the table on a per-column basis
- * @param {object} oSettings dataTables settings object
- * @param {string} sInput string to filter on
- * @param {int} iColumn column to filter
- * @param {bool} bRegex treat search string as a regular expression or not
- * @param {bool} bSmart use smart filtering or not
- * @param {bool} bCaseInsensitive Do case insenstive matching or not
- * @memberof DataTable#oApi
- */
-function _fnFilterColumn ( oSettings, sInput, iColumn, bRegex, bSmart, bCaseInsensitive )
-{
- if ( sInput === "" )
- {
- return;
- }
-
- var iIndexCorrector = 0;
- var rpSearch = _fnFilterCreateSearch( sInput, bRegex, bSmart, bCaseInsensitive );
-
- for ( var i=oSettings.aiDisplay.length-1 ; i>=0 ; i-- )
- {
- var sData = _fnDataToSearch( _fnGetCellData( oSettings, oSettings.aiDisplay[i], iColumn, 'filter' ),
- oSettings.aoColumns[iColumn].sType );
- if ( ! rpSearch.test( sData ) )
- {
- oSettings.aiDisplay.splice( i, 1 );
- iIndexCorrector++;
- }
- }
-}
-
-
-/**
- * Filter the data table based on user input and draw the table
- * @param {object} oSettings dataTables settings object
- * @param {string} sInput string to filter on
- * @param {int} iForce optional - force a research of the master array (1) or not (undefined or 0)
- * @param {bool} bRegex treat as a regular expression or not
- * @param {bool} bSmart perform smart filtering or not
- * @param {bool} bCaseInsensitive Do case insenstive matching or not
- * @memberof DataTable#oApi
- */
-function _fnFilter( oSettings, sInput, iForce, bRegex, bSmart, bCaseInsensitive )
-{
- var i;
- var rpSearch = _fnFilterCreateSearch( sInput, bRegex, bSmart, bCaseInsensitive );
- var oPrevSearch = oSettings.oPreviousSearch;
-
- /* Check if we are forcing or not - optional parameter */
- if ( !iForce )
- {
- iForce = 0;
- }
-
- /* Need to take account of custom filtering functions - always filter */
- if ( DataTable.ext.afnFiltering.length !== 0 )
- {
- iForce = 1;
- }
-
- /*
- * If the input is blank - we want the full data set
- */
- if ( sInput.length <= 0 )
- {
- oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length);
- oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
- }
- else
- {
- /*
- * We are starting a new search or the new search string is smaller
- * then the old one (i.e. delete). Search from the master array
- */
- if ( oSettings.aiDisplay.length == oSettings.aiDisplayMaster.length ||
- oPrevSearch.sSearch.length > sInput.length || iForce == 1 ||
- sInput.indexOf(oPrevSearch.sSearch) !== 0 )
- {
- /* Nuke the old display array - we are going to rebuild it */
- oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length);
-
- /* Force a rebuild of the search array */
- _fnBuildSearchArray( oSettings, 1 );
-
- /* Search through all records to populate the search array
- * The the oSettings.aiDisplayMaster and asDataSearch arrays have 1 to 1
- * mapping
- */
- for ( i=0 ; i<oSettings.aiDisplayMaster.length ; i++ )
- {
- if ( rpSearch.test(oSettings.asDataSearch[i]) )
- {
- oSettings.aiDisplay.push( oSettings.aiDisplayMaster[i] );
- }
- }
- }
- else
- {
- /* Using old search array - refine it - do it this way for speed
- * Don't have to search the whole master array again
- */
- var iIndexCorrector = 0;
-
- /* Search the current results */
- for ( i=0 ; i<oSettings.asDataSearch.length ; i++ )
- {
- if ( ! rpSearch.test(oSettings.asDataSearch[i]) )
- {
- oSettings.aiDisplay.splice( i-iIndexCorrector, 1 );
- iIndexCorrector++;
- }
- }
- }
- }
-}
-
-
-/**
- * Create an array which can be quickly search through
- * @param {object} oSettings dataTables settings object
- * @param {int} iMaster use the master data array - optional
- * @memberof DataTable#oApi
- */
-function _fnBuildSearchArray ( oSettings, iMaster )
-{
- if ( !oSettings.oFeatures.bServerSide )
- {
- /* Clear out the old data */
- oSettings.asDataSearch = [];
-
- var aiFilterColumns = _fnGetColumns( oSettings, 'bSearchable' );
- var aiIndex = (iMaster===1) ?
- oSettings.aiDisplayMaster :
- oSettings.aiDisplay;
-
- for ( var i=0, iLen=aiIndex.length ; i<iLen ; i++ )
- {
- oSettings.asDataSearch[i] = _fnBuildSearchRow(
- oSettings,
- _fnGetRowData( oSettings, aiIndex[i], 'filter', aiFilterColumns )
- );
- }
- }
-}
-
-
-/**
- * Create a searchable string from a single data row
- * @param {object} oSettings dataTables settings object
- * @param {array} aData Row data array to use for the data to search
- * @memberof DataTable#oApi
- */
-function _fnBuildSearchRow( oSettings, aData )
-{
- var sSearch = aData.join(' ');
-
- /* If it looks like there is an HTML entity in the string, attempt to decode it */
- if ( sSearch.indexOf('&') !== -1 )
- {
- sSearch = $('<div>').html(sSearch).text();
- }
-
- // Strip newline characters
- return sSearch.replace( /[\n\r]/g, " " );
-}
-
-/**
- * Build a regular expression object suitable for searching a table
- * @param {string} sSearch string to search for
- * @param {bool} bRegex treat as a regular expression or not
- * @param {bool} bSmart perform smart filtering or not
- * @param {bool} bCaseInsensitive Do case insensitive matching or not
- * @returns {RegExp} constructed object
- * @memberof DataTable#oApi
- */
-function _fnFilterCreateSearch( sSearch, bRegex, bSmart, bCaseInsensitive )
-{
- var asSearch, sRegExpString;
-
- if ( bSmart )
- {
- /* Generate the regular expression to use. Something along the lines of:
- * ^(?=.*?\bone\b)(?=.*?\btwo\b)(?=.*?\bthree\b).*$
- */
- asSearch = bRegex ? sSearch.split( ' ' ) : _fnEscapeRegex( sSearch ).split( ' ' );
- sRegExpString = '^(?=.*?'+asSearch.join( ')(?=.*?' )+').*$';
- return new RegExp( sRegExpString, bCaseInsensitive ? "i" : "" );
- }
- else
- {
- sSearch = bRegex ? sSearch : _fnEscapeRegex( sSearch );
- return new RegExp( sSearch, bCaseInsensitive ? "i" : "" );
- }
-}
-
-
-/**
- * Convert raw data into something that the user can search on
- * @param {string} sData data to be modified
- * @param {string} sType data type
- * @returns {string} search string
- * @memberof DataTable#oApi
- */
-function _fnDataToSearch ( sData, sType )
-{
- if ( typeof DataTable.ext.ofnSearch[sType] === "function" )
- {
- return DataTable.ext.ofnSearch[sType]( sData );
- }
- else if ( sData === null )
- {
- return '';
- }
- else if ( sType == "html" )
- {
- return sData.replace(/[\r\n]/g," ").replace( /<.*?>/g, "" );
- }
- else if ( typeof sData === "string" )
- {
- return sData.replace(/[\r\n]/g," ");
- }
- return sData;
-}
-
-
-/**
- * scape a string such that it can be used in a regular expression
- * @param {string} sVal string to escape
- * @returns {string} escaped string
- * @memberof DataTable#oApi
- */
-function _fnEscapeRegex ( sVal )
-{
- var acEscape = [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^', '-' ];
- var reReplace = new RegExp( '(\\' + acEscape.join('|\\') + ')', 'g' );
- return sVal.replace(reReplace, '\\$1');
-}
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.info.js b/wqflask/wqflask/static/new/packages/DataTables/src/core/core.info.js
deleted file mode 100644
index cb95cd71..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.info.js
+++ /dev/null
@@ -1,111 +0,0 @@
-
-/**
- * Generate the node required for the info display
- * @param {object} oSettings dataTables settings object
- * @returns {node} Information element
- * @memberof DataTable#oApi
- */
-function _fnFeatureHtmlInfo ( oSettings )
-{
- var nInfo = document.createElement( 'div' );
- nInfo.className = oSettings.oClasses.sInfo;
-
- /* Actions that are to be taken once only for this feature */
- if ( !oSettings.aanFeatures.i )
- {
- /* Add draw callback */
- oSettings.aoDrawCallback.push( {
- "fn": _fnUpdateInfo,
- "sName": "information"
- } );
-
- /* Add id */
- nInfo.id = oSettings.sTableId+'_info';
- }
- oSettings.nTable.setAttribute( 'aria-describedby', oSettings.sTableId+'_info' );
-
- return nInfo;
-}
-
-
-/**
- * Update the information elements in the display
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnUpdateInfo ( oSettings )
-{
- /* Show information about the table */
- if ( !oSettings.oFeatures.bInfo || oSettings.aanFeatures.i.length === 0 )
- {
- return;
- }
-
- var
- oLang = oSettings.oLanguage,
- iStart = oSettings._iDisplayStart+1,
- iEnd = oSettings.fnDisplayEnd(),
- iMax = oSettings.fnRecordsTotal(),
- iTotal = oSettings.fnRecordsDisplay(),
- sOut;
-
- if ( iTotal === 0 )
- {
- /* Empty record set */
- sOut = oLang.sInfoEmpty;
- }
- else {
- /* Normal record set */
- sOut = oLang.sInfo;
- }
-
- if ( iTotal != iMax )
- {
- /* Record set after filtering */
- sOut += ' ' + oLang.sInfoFiltered;
- }
-
- // Convert the macros
- sOut += oLang.sInfoPostFix;
- sOut = _fnInfoMacros( oSettings, sOut );
-
- if ( oLang.fnInfoCallback !== null )
- {
- sOut = oLang.fnInfoCallback.call( oSettings.oInstance,
- oSettings, iStart, iEnd, iMax, iTotal, sOut );
- }
-
- var n = oSettings.aanFeatures.i;
- for ( var i=0, iLen=n.length ; i<iLen ; i++ )
- {
- $(n[i]).html( sOut );
- }
-}
-
-
-function _fnInfoMacros ( oSettings, str )
-{
- var
- iStart = oSettings._iDisplayStart+1,
- sStart = oSettings.fnFormatNumber( iStart ),
- iEnd = oSettings.fnDisplayEnd(),
- sEnd = oSettings.fnFormatNumber( iEnd ),
- iTotal = oSettings.fnRecordsDisplay(),
- sTotal = oSettings.fnFormatNumber( iTotal ),
- iMax = oSettings.fnRecordsTotal(),
- sMax = oSettings.fnFormatNumber( iMax );
-
- // When infinite scrolling, we are always starting at 1. _iDisplayStart is used only
- // internally
- if ( oSettings.oScroll.bInfinite )
- {
- sStart = oSettings.fnFormatNumber( 1 );
- }
-
- return str.
- replace(/_START_/g, sStart).
- replace(/_END_/g, sEnd).
- replace(/_TOTAL_/g, sTotal).
- replace(/_MAX_/g, sMax);
-}
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.init.js b/wqflask/wqflask/static/new/packages/DataTables/src/core/core.init.js
deleted file mode 100644
index e20ff744..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.init.js
+++ /dev/null
@@ -1,153 +0,0 @@
-
-
-/**
- * Draw the table for the first time, adding all required features
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnInitialise ( oSettings )
-{
- var i, iLen, iAjaxStart=oSettings.iInitDisplayStart;
-
- /* Ensure that the table data is fully initialised */
- if ( oSettings.bInitialised === false )
- {
- setTimeout( function(){ _fnInitialise( oSettings ); }, 200 );
- return;
- }
-
- /* Show the display HTML options */
- _fnAddOptionsHtml( oSettings );
-
- /* Build and draw the header / footer for the table */
- _fnBuildHead( oSettings );
- _fnDrawHead( oSettings, oSettings.aoHeader );
- if ( oSettings.nTFoot )
- {
- _fnDrawHead( oSettings, oSettings.aoFooter );
- }
-
- /* Okay to show that something is going on now */
- _fnProcessingDisplay( oSettings, true );
-
- /* Calculate sizes for columns */
- if ( oSettings.oFeatures.bAutoWidth )
- {
- _fnCalculateColumnWidths( oSettings );
- }
-
- for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
- {
- if ( oSettings.aoColumns[i].sWidth !== null )
- {
- oSettings.aoColumns[i].nTh.style.width = _fnStringToCss( oSettings.aoColumns[i].sWidth );
- }
- }
-
- /* If there is default sorting required - let's do it. The sort function will do the
- * drawing for us. Otherwise we draw the table regardless of the Ajax source - this allows
- * the table to look initialised for Ajax sourcing data (show 'loading' message possibly)
- */
- if ( oSettings.oFeatures.bSort )
- {
- _fnSort( oSettings );
- }
- else if ( oSettings.oFeatures.bFilter )
- {
- _fnFilterComplete( oSettings, oSettings.oPreviousSearch );
- }
- else
- {
- oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
- _fnCalculateEnd( oSettings );
- _fnDraw( oSettings );
- }
-
- /* if there is an ajax source load the data */
- if ( oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide )
- {
- var aoData = [];
- _fnServerParams( oSettings, aoData );
- oSettings.fnServerData.call( oSettings.oInstance, oSettings.sAjaxSource, aoData, function(json) {
- var aData = (oSettings.sAjaxDataProp !== "") ?
- _fnGetObjectDataFn( oSettings.sAjaxDataProp )(json) : json;
-
- /* Got the data - add it to the table */
- for ( i=0 ; i<aData.length ; i++ )
- {
- _fnAddData( oSettings, aData[i] );
- }
-
- /* Reset the init display for cookie saving. We've already done a filter, and
- * therefore cleared it before. So we need to make it appear 'fresh'
- */
- oSettings.iInitDisplayStart = iAjaxStart;
-
- if ( oSettings.oFeatures.bSort )
- {
- _fnSort( oSettings );
- }
- else
- {
- oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
- _fnCalculateEnd( oSettings );
- _fnDraw( oSettings );
- }
-
- _fnProcessingDisplay( oSettings, false );
- _fnInitComplete( oSettings, json );
- }, oSettings );
- return;
- }
-
- /* Server-side processing initialisation complete is done at the end of _fnDraw */
- if ( !oSettings.oFeatures.bServerSide )
- {
- _fnProcessingDisplay( oSettings, false );
- _fnInitComplete( oSettings );
- }
-}
-
-
-/**
- * Draw the table for the first time, adding all required features
- * @param {object} oSettings dataTables settings object
- * @param {object} [json] JSON from the server that completed the table, if using Ajax source
- * with client-side processing (optional)
- * @memberof DataTable#oApi
- */
-function _fnInitComplete ( oSettings, json )
-{
- oSettings._bInitComplete = true;
- _fnCallbackFire( oSettings, 'aoInitComplete', 'init', [oSettings, json] );
-}
-
-
-/**
- * Language compatibility - when certain options are given, and others aren't, we
- * need to duplicate the values over, in order to provide backwards compatibility
- * with older language files.
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnLanguageCompat( oLanguage )
-{
- var oDefaults = DataTable.defaults.oLanguage;
-
- /* Backwards compatibility - if there is no sEmptyTable given, then use the same as
- * sZeroRecords - assuming that is given.
- */
- if ( !oLanguage.sEmptyTable && oLanguage.sZeroRecords &&
- oDefaults.sEmptyTable === "No data available in table" )
- {
- _fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sEmptyTable' );
- }
-
- /* Likewise with loading records */
- if ( !oLanguage.sLoadingRecords && oLanguage.sZeroRecords &&
- oDefaults.sLoadingRecords === "Loading..." )
- {
- _fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sLoadingRecords' );
- }
-}
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.length.js b/wqflask/wqflask/static/new/packages/DataTables/src/core/core.length.js
deleted file mode 100644
index ddc8ef34..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.length.js
+++ /dev/null
@@ -1,122 +0,0 @@
-
-
-/**
- * Generate the node required for user display length changing
- * @param {object} oSettings dataTables settings object
- * @returns {node} Display length feature node
- * @memberof DataTable#oApi
- */
-function _fnFeatureHtmlLength ( oSettings )
-{
- if ( oSettings.oScroll.bInfinite )
- {
- return null;
- }
-
- /* This can be overruled by not using the _MENU_ var/macro in the language variable */
- var sName = 'name="'+oSettings.sTableId+'_length"';
- var sStdMenu = '<select size="1" '+sName+'>';
- var i, iLen;
- var aLengthMenu = oSettings.aLengthMenu;
-
- if ( aLengthMenu.length == 2 && typeof aLengthMenu[0] === 'object' &&
- typeof aLengthMenu[1] === 'object' )
- {
- for ( i=0, iLen=aLengthMenu[0].length ; i<iLen ; i++ )
- {
- sStdMenu += '<option value="'+aLengthMenu[0][i]+'">'+aLengthMenu[1][i]+'</option>';
- }
- }
- else
- {
- for ( i=0, iLen=aLengthMenu.length ; i<iLen ; i++ )
- {
- sStdMenu += '<option value="'+aLengthMenu[i]+'">'+aLengthMenu[i]+'</option>';
- }
- }
- sStdMenu += '</select>';
-
- var nLength = document.createElement( 'div' );
- if ( !oSettings.aanFeatures.l )
- {
- nLength.id = oSettings.sTableId+'_length';
- }
- nLength.className = oSettings.oClasses.sLength;
- nLength.innerHTML = '<label>'+oSettings.oLanguage.sLengthMenu.replace( '_MENU_', sStdMenu )+'</label>';
-
- /*
- * Set the length to the current display length - thanks to Andrea Pavlovic for this fix,
- * and Stefan Skopnik for fixing the fix!
- */
- $('select option[value="'+oSettings._iDisplayLength+'"]', nLength).attr("selected", true);
-
- $('select', nLength).bind( 'change.DT', function(e) {
- var iVal = $(this).val();
-
- /* Update all other length options for the new display */
- var n = oSettings.aanFeatures.l;
- for ( i=0, iLen=n.length ; i<iLen ; i++ )
- {
- if ( n[i] != this.parentNode )
- {
- $('select', n[i]).val( iVal );
- }
- }
-
- /* Redraw the table */
- oSettings._iDisplayLength = parseInt(iVal, 10);
- _fnCalculateEnd( oSettings );
-
- /* If we have space to show extra rows (backing up from the end point - then do so */
- if ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() )
- {
- oSettings._iDisplayStart = oSettings.fnDisplayEnd() - oSettings._iDisplayLength;
- if ( oSettings._iDisplayStart < 0 )
- {
- oSettings._iDisplayStart = 0;
- }
- }
-
- if ( oSettings._iDisplayLength == -1 )
- {
- oSettings._iDisplayStart = 0;
- }
-
- _fnDraw( oSettings );
- } );
-
-
- $('select', nLength).attr('aria-controls', oSettings.sTableId);
-
- return nLength;
-}
-
-
-/**
- * Recalculate the end point based on the start point
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnCalculateEnd( oSettings )
-{
- if ( oSettings.oFeatures.bPaginate === false )
- {
- oSettings._iDisplayEnd = oSettings.aiDisplay.length;
- }
- else
- {
- /* Set the end point of the display - based on how many elements there are
- * still to display
- */
- if ( oSettings._iDisplayStart + oSettings._iDisplayLength > oSettings.aiDisplay.length ||
- oSettings._iDisplayLength == -1 )
- {
- oSettings._iDisplayEnd = oSettings.aiDisplay.length;
- }
- else
- {
- oSettings._iDisplayEnd = oSettings._iDisplayStart + oSettings._iDisplayLength;
- }
- }
-}
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.page.js b/wqflask/wqflask/static/new/packages/DataTables/src/core/core.page.js
deleted file mode 100644
index 8e380775..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.page.js
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Note that most of the paging logic is done in
- * DataTable.ext.oPagination
- */
-
-/**
- * Generate the node required for default pagination
- * @param {object} oSettings dataTables settings object
- * @returns {node} Pagination feature node
- * @memberof DataTable#oApi
- */
-function _fnFeatureHtmlPaginate ( oSettings )
-{
- if ( oSettings.oScroll.bInfinite )
- {
- return null;
- }
-
- var nPaginate = document.createElement( 'div' );
- nPaginate.className = oSettings.oClasses.sPaging+oSettings.sPaginationType;
-
- DataTable.ext.oPagination[ oSettings.sPaginationType ].fnInit( oSettings, nPaginate,
- function( oSettings ) {
- _fnCalculateEnd( oSettings );
- _fnDraw( oSettings );
- }
- );
-
- /* Add a draw callback for the pagination on first instance, to update the paging display */
- if ( !oSettings.aanFeatures.p )
- {
- oSettings.aoDrawCallback.push( {
- "fn": function( oSettings ) {
- DataTable.ext.oPagination[ oSettings.sPaginationType ].fnUpdate( oSettings, function( oSettings ) {
- _fnCalculateEnd( oSettings );
- _fnDraw( oSettings );
- } );
- },
- "sName": "pagination"
- } );
- }
- return nPaginate;
-}
-
-
-/**
- * Alter the display settings to change the page
- * @param {object} oSettings dataTables settings object
- * @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last"
- * or page number to jump to (integer)
- * @returns {bool} true page has changed, false - no change (no effect) eg 'first' on page 1
- * @memberof DataTable#oApi
- */
-function _fnPageChange ( oSettings, mAction )
-{
- var iOldStart = oSettings._iDisplayStart;
-
- if ( typeof mAction === "number" )
- {
- oSettings._iDisplayStart = mAction * oSettings._iDisplayLength;
- if ( oSettings._iDisplayStart > oSettings.fnRecordsDisplay() )
- {
- oSettings._iDisplayStart = 0;
- }
- }
- else if ( mAction == "first" )
- {
- oSettings._iDisplayStart = 0;
- }
- else if ( mAction == "previous" )
- {
- oSettings._iDisplayStart = oSettings._iDisplayLength>=0 ?
- oSettings._iDisplayStart - oSettings._iDisplayLength :
- 0;
-
- /* Correct for under-run */
- if ( oSettings._iDisplayStart < 0 )
- {
- oSettings._iDisplayStart = 0;
- }
- }
- else if ( mAction == "next" )
- {
- if ( oSettings._iDisplayLength >= 0 )
- {
- /* Make sure we are not over running the display array */
- if ( oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay() )
- {
- oSettings._iDisplayStart += oSettings._iDisplayLength;
- }
- }
- else
- {
- oSettings._iDisplayStart = 0;
- }
- }
- else if ( mAction == "last" )
- {
- if ( oSettings._iDisplayLength >= 0 )
- {
- var iPages = parseInt( (oSettings.fnRecordsDisplay()-1) / oSettings._iDisplayLength, 10 ) + 1;
- oSettings._iDisplayStart = (iPages-1) * oSettings._iDisplayLength;
- }
- else
- {
- oSettings._iDisplayStart = 0;
- }
- }
- else
- {
- _fnLog( oSettings, 0, "Unknown paging action: "+mAction );
- }
- $(oSettings.oInstance).trigger('page', oSettings);
-
- return iOldStart != oSettings._iDisplayStart;
-}
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.processing.js b/wqflask/wqflask/static/new/packages/DataTables/src/core/core.processing.js
deleted file mode 100644
index 8d29f6f5..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.processing.js
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-/**
- * Generate the node required for the processing node
- * @param {object} oSettings dataTables settings object
- * @returns {node} Processing element
- * @memberof DataTable#oApi
- */
-function _fnFeatureHtmlProcessing ( oSettings )
-{
- var nProcessing = document.createElement( 'div' );
-
- if ( !oSettings.aanFeatures.r )
- {
- nProcessing.id = oSettings.sTableId+'_processing';
- }
- nProcessing.innerHTML = oSettings.oLanguage.sProcessing;
- nProcessing.className = oSettings.oClasses.sProcessing;
- oSettings.nTable.parentNode.insertBefore( nProcessing, oSettings.nTable );
-
- return nProcessing;
-}
-
-
-/**
- * Display or hide the processing indicator
- * @param {object} oSettings dataTables settings object
- * @param {bool} bShow Show the processing indicator (true) or not (false)
- * @memberof DataTable#oApi
- */
-function _fnProcessingDisplay ( oSettings, bShow )
-{
- if ( oSettings.oFeatures.bProcessing )
- {
- var an = oSettings.aanFeatures.r;
- for ( var i=0, iLen=an.length ; i<iLen ; i++ )
- {
- an[i].style.visibility = bShow ? "visible" : "hidden";
- }
- }
-
- $(oSettings.oInstance).trigger('processing', [oSettings, bShow]);
-}
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.scrolling.js b/wqflask/wqflask/static/new/packages/DataTables/src/core/core.scrolling.js
deleted file mode 100644
index 5041385f..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.scrolling.js
+++ /dev/null
@@ -1,511 +0,0 @@
-/**
- * Add any control elements for the table - specifically scrolling
- * @param {object} oSettings dataTables settings object
- * @returns {node} Node to add to the DOM
- * @memberof DataTable#oApi
- */
-function _fnFeatureHtmlTable ( oSettings )
-{
- /* Check if scrolling is enabled or not - if not then leave the DOM unaltered */
- if ( oSettings.oScroll.sX === "" && oSettings.oScroll.sY === "" )
- {
- return oSettings.nTable;
- }
-
- /*
- * The HTML structure that we want to generate in this function is:
- * div - nScroller
- * div - nScrollHead
- * div - nScrollHeadInner
- * table - nScrollHeadTable
- * thead - nThead
- * div - nScrollBody
- * table - oSettings.nTable
- * thead - nTheadSize
- * tbody - nTbody
- * div - nScrollFoot
- * div - nScrollFootInner
- * table - nScrollFootTable
- * tfoot - nTfoot
- */
- var
- nScroller = document.createElement('div'),
- nScrollHead = document.createElement('div'),
- nScrollHeadInner = document.createElement('div'),
- nScrollBody = document.createElement('div'),
- nScrollFoot = document.createElement('div'),
- nScrollFootInner = document.createElement('div'),
- nScrollHeadTable = oSettings.nTable.cloneNode(false),
- nScrollFootTable = oSettings.nTable.cloneNode(false),
- nThead = oSettings.nTable.getElementsByTagName('thead')[0],
- nTfoot = oSettings.nTable.getElementsByTagName('tfoot').length === 0 ? null :
- oSettings.nTable.getElementsByTagName('tfoot')[0],
- oClasses = oSettings.oClasses;
-
- nScrollHead.appendChild( nScrollHeadInner );
- nScrollFoot.appendChild( nScrollFootInner );
- nScrollBody.appendChild( oSettings.nTable );
- nScroller.appendChild( nScrollHead );
- nScroller.appendChild( nScrollBody );
- nScrollHeadInner.appendChild( nScrollHeadTable );
- nScrollHeadTable.appendChild( nThead );
- if ( nTfoot !== null )
- {
- nScroller.appendChild( nScrollFoot );
- nScrollFootInner.appendChild( nScrollFootTable );
- nScrollFootTable.appendChild( nTfoot );
- }
-
- nScroller.className = oClasses.sScrollWrapper;
- nScrollHead.className = oClasses.sScrollHead;
- nScrollHeadInner.className = oClasses.sScrollHeadInner;
- nScrollBody.className = oClasses.sScrollBody;
- nScrollFoot.className = oClasses.sScrollFoot;
- nScrollFootInner.className = oClasses.sScrollFootInner;
-
- if ( oSettings.oScroll.bAutoCss )
- {
- nScrollHead.style.overflow = "hidden";
- nScrollHead.style.position = "relative";
- nScrollFoot.style.overflow = "hidden";
- nScrollBody.style.overflow = "auto";
- }
-
- nScrollHead.style.border = "0";
- nScrollHead.style.width = "100%";
- nScrollFoot.style.border = "0";
- nScrollHeadInner.style.width = oSettings.oScroll.sXInner !== "" ?
- oSettings.oScroll.sXInner : "100%"; /* will be overwritten */
-
- /* Modify attributes to respect the clones */
- nScrollHeadTable.removeAttribute('id');
- nScrollHeadTable.style.marginLeft = "0";
- oSettings.nTable.style.marginLeft = "0";
- if ( nTfoot !== null )
- {
- nScrollFootTable.removeAttribute('id');
- nScrollFootTable.style.marginLeft = "0";
- }
-
- /* Move caption elements from the body to the header, footer or leave where it is
- * depending on the configuration. Note that the DTD says there can be only one caption */
- var nCaption = $(oSettings.nTable).children('caption');
- if ( nCaption.length > 0 )
- {
- nCaption = nCaption[0];
- if ( nCaption._captionSide === "top" )
- {
- nScrollHeadTable.appendChild( nCaption );
- }
- else if ( nCaption._captionSide === "bottom" && nTfoot )
- {
- nScrollFootTable.appendChild( nCaption );
- }
- }
-
- /*
- * Sizing
- */
- /* When x-scrolling add the width and a scroller to move the header with the body */
- if ( oSettings.oScroll.sX !== "" )
- {
- nScrollHead.style.width = _fnStringToCss( oSettings.oScroll.sX );
- nScrollBody.style.width = _fnStringToCss( oSettings.oScroll.sX );
-
- if ( nTfoot !== null )
- {
- nScrollFoot.style.width = _fnStringToCss( oSettings.oScroll.sX );
- }
-
- /* When the body is scrolled, then we also want to scroll the headers */
- $(nScrollBody).scroll( function (e) {
- nScrollHead.scrollLeft = this.scrollLeft;
-
- if ( nTfoot !== null )
- {
- nScrollFoot.scrollLeft = this.scrollLeft;
- }
- } );
- }
-
- /* When yscrolling, add the height */
- if ( oSettings.oScroll.sY !== "" )
- {
- nScrollBody.style.height = _fnStringToCss( oSettings.oScroll.sY );
- }
-
- /* Redraw - align columns across the tables */
- oSettings.aoDrawCallback.push( {
- "fn": _fnScrollDraw,
- "sName": "scrolling"
- } );
-
- /* Infinite scrolling event handlers */
- if ( oSettings.oScroll.bInfinite )
- {
- $(nScrollBody).scroll( function() {
- /* Use a blocker to stop scrolling from loading more data while other data is still loading */
- if ( !oSettings.bDrawing && $(this).scrollTop() !== 0 )
- {
- /* Check if we should load the next data set */
- if ( $(this).scrollTop() + $(this).height() >
- $(oSettings.nTable).height() - oSettings.oScroll.iLoadGap )
- {
- /* Only do the redraw if we have to - we might be at the end of the data */
- if ( oSettings.fnDisplayEnd() < oSettings.fnRecordsDisplay() )
- {
- _fnPageChange( oSettings, 'next' );
- _fnCalculateEnd( oSettings );
- _fnDraw( oSettings );
- }
- }
- }
- } );
- }
-
- oSettings.nScrollHead = nScrollHead;
- oSettings.nScrollFoot = nScrollFoot;
-
- return nScroller;
-}
-
-
-/**
- * Update the various tables for resizing. It's a bit of a pig this function, but
- * basically the idea to:
- * 1. Re-create the table inside the scrolling div
- * 2. Take live measurements from the DOM
- * 3. Apply the measurements
- * 4. Clean up
- * @param {object} o dataTables settings object
- * @returns {node} Node to add to the DOM
- * @memberof DataTable#oApi
- */
-function _fnScrollDraw ( o )
-{
- var
- nScrollHeadInner = o.nScrollHead.getElementsByTagName('div')[0],
- nScrollHeadTable = nScrollHeadInner.getElementsByTagName('table')[0],
- nScrollBody = o.nTable.parentNode,
- i, iLen, j, jLen, anHeadToSize, anHeadSizers, anFootSizers, anFootToSize, oStyle, iVis,
- nTheadSize, nTfootSize,
- iWidth, aApplied=[], aAppliedFooter=[], iSanityWidth,
- nScrollFootInner = (o.nTFoot !== null) ? o.nScrollFoot.getElementsByTagName('div')[0] : null,
- nScrollFootTable = (o.nTFoot !== null) ? nScrollFootInner.getElementsByTagName('table')[0] : null,
- ie67 = o.oBrowser.bScrollOversize,
- zeroOut = function(nSizer) {
- oStyle = nSizer.style;
- oStyle.paddingTop = "0";
- oStyle.paddingBottom = "0";
- oStyle.borderTopWidth = "0";
- oStyle.borderBottomWidth = "0";
- oStyle.height = 0;
- };
-
- /*
- * 1. Re-create the table inside the scrolling div
- */
-
- /* Remove the old minimised thead and tfoot elements in the inner table */
- $(o.nTable).children('thead, tfoot').remove();
-
- /* Clone the current header and footer elements and then place it into the inner table */
- nTheadSize = $(o.nTHead).clone()[0];
- o.nTable.insertBefore( nTheadSize, o.nTable.childNodes[0] );
- anHeadToSize = o.nTHead.getElementsByTagName('tr');
- anHeadSizers = nTheadSize.getElementsByTagName('tr');
-
- if ( o.nTFoot !== null )
- {
- nTfootSize = $(o.nTFoot).clone()[0];
- o.nTable.insertBefore( nTfootSize, o.nTable.childNodes[1] );
- anFootToSize = o.nTFoot.getElementsByTagName('tr');
- anFootSizers = nTfootSize.getElementsByTagName('tr');
- }
-
- /*
- * 2. Take live measurements from the DOM - do not alter the DOM itself!
- */
-
- /* Remove old sizing and apply the calculated column widths
- * Get the unique column headers in the newly created (cloned) header. We want to apply the
- * calculated sizes to this header
- */
- if ( o.oScroll.sX === "" )
- {
- nScrollBody.style.width = '100%';
- nScrollHeadInner.parentNode.style.width = '100%';
- }
-
- var nThs = _fnGetUniqueThs( o, nTheadSize );
- for ( i=0, iLen=nThs.length ; i<iLen ; i++ )
- {
- iVis = _fnVisibleToColumnIndex( o, i );
- nThs[i].style.width = o.aoColumns[iVis].sWidth;
- }
-
- if ( o.nTFoot !== null )
- {
- _fnApplyToChildren( function(n) {
- n.style.width = "";
- }, anFootSizers );
- }
-
- // If scroll collapse is enabled, when we put the headers back into the body for sizing, we
- // will end up forcing the scrollbar to appear, making our measurements wrong for when we
- // then hide it (end of this function), so add the header height to the body scroller.
- if ( o.oScroll.bCollapse && o.oScroll.sY !== "" )
- {
- nScrollBody.style.height = (nScrollBody.offsetHeight + o.nTHead.offsetHeight)+"px";
- }
-
- /* Size the table as a whole */
- iSanityWidth = $(o.nTable).outerWidth();
- if ( o.oScroll.sX === "" )
- {
- /* No x scrolling */
- o.nTable.style.width = "100%";
-
- /* I know this is rubbish - but IE7 will make the width of the table when 100% include
- * the scrollbar - which is shouldn't. When there is a scrollbar we need to take this
- * into account.
- */
- if ( ie67 && ($('tbody', nScrollBody).height() > nScrollBody.offsetHeight ||
- $(nScrollBody).css('overflow-y') == "scroll") )
- {
- o.nTable.style.width = _fnStringToCss( $(o.nTable).outerWidth() - o.oScroll.iBarWidth);
- }
- }
- else
- {
- if ( o.oScroll.sXInner !== "" )
- {
- /* x scroll inner has been given - use it */
- o.nTable.style.width = _fnStringToCss(o.oScroll.sXInner);
- }
- else if ( iSanityWidth == $(nScrollBody).width() &&
- $(nScrollBody).height() < $(o.nTable).height() )
- {
- /* There is y-scrolling - try to take account of the y scroll bar */
- o.nTable.style.width = _fnStringToCss( iSanityWidth-o.oScroll.iBarWidth );
- if ( $(o.nTable).outerWidth() > iSanityWidth-o.oScroll.iBarWidth )
- {
- /* Not possible to take account of it */
- o.nTable.style.width = _fnStringToCss( iSanityWidth );
- }
- }
- else
- {
- /* All else fails */
- o.nTable.style.width = _fnStringToCss( iSanityWidth );
- }
- }
-
- /* Recalculate the sanity width - now that we've applied the required width, before it was
- * a temporary variable. This is required because the column width calculation is done
- * before this table DOM is created.
- */
- iSanityWidth = $(o.nTable).outerWidth();
-
- /* We want the hidden header to have zero height, so remove padding and borders. Then
- * set the width based on the real headers
- */
-
- // Apply all styles in one pass. Invalidates layout only once because we don't read any
- // DOM properties.
- _fnApplyToChildren( zeroOut, anHeadSizers );
-
- // Read all widths in next pass. Forces layout only once because we do not change
- // any DOM properties.
- _fnApplyToChildren( function(nSizer) {
- aApplied.push( _fnStringToCss( $(nSizer).width() ) );
- }, anHeadSizers );
-
- // Apply all widths in final pass. Invalidates layout only once because we do not
- // read any DOM properties.
- _fnApplyToChildren( function(nToSize, i) {
- nToSize.style.width = aApplied[i];
- }, anHeadToSize );
-
- $(anHeadSizers).height(0);
-
- /* Same again with the footer if we have one */
- if ( o.nTFoot !== null )
- {
- _fnApplyToChildren( zeroOut, anFootSizers );
-
- _fnApplyToChildren( function(nSizer) {
- aAppliedFooter.push( _fnStringToCss( $(nSizer).width() ) );
- }, anFootSizers );
-
- _fnApplyToChildren( function(nToSize, i) {
- nToSize.style.width = aAppliedFooter[i];
- }, anFootToSize );
-
- $(anFootSizers).height(0);
- }
-
- /*
- * 3. Apply the measurements
- */
-
- /* "Hide" the header and footer that we used for the sizing. We want to also fix their width
- * to what they currently are
- */
- _fnApplyToChildren( function(nSizer, i) {
- nSizer.innerHTML = "";
- nSizer.style.width = aApplied[i];
- }, anHeadSizers );
-
- if ( o.nTFoot !== null )
- {
- _fnApplyToChildren( function(nSizer, i) {
- nSizer.innerHTML = "";
- nSizer.style.width = aAppliedFooter[i];
- }, anFootSizers );
- }
-
- /* Sanity check that the table is of a sensible width. If not then we are going to get
- * misalignment - try to prevent this by not allowing the table to shrink below its min width
- */
- if ( $(o.nTable).outerWidth() < iSanityWidth )
- {
- /* The min width depends upon if we have a vertical scrollbar visible or not */
- var iCorrection = ((nScrollBody.scrollHeight > nScrollBody.offsetHeight ||
- $(nScrollBody).css('overflow-y') == "scroll")) ?
- iSanityWidth+o.oScroll.iBarWidth : iSanityWidth;
-
- /* IE6/7 are a law unto themselves... */
- if ( ie67 && (nScrollBody.scrollHeight >
- nScrollBody.offsetHeight || $(nScrollBody).css('overflow-y') == "scroll") )
- {
- o.nTable.style.width = _fnStringToCss( iCorrection-o.oScroll.iBarWidth );
- }
-
- /* Apply the calculated minimum width to the table wrappers */
- nScrollBody.style.width = _fnStringToCss( iCorrection );
- o.nScrollHead.style.width = _fnStringToCss( iCorrection );
-
- if ( o.nTFoot !== null )
- {
- o.nScrollFoot.style.width = _fnStringToCss( iCorrection );
- }
-
- /* And give the user a warning that we've stopped the table getting too small */
- if ( o.oScroll.sX === "" )
- {
- _fnLog( o, 1, "The table cannot fit into the current element which will cause column"+
- " misalignment. The table has been drawn at its minimum possible width." );
- }
- else if ( o.oScroll.sXInner !== "" )
- {
- _fnLog( o, 1, "The table cannot fit into the current element which will cause column"+
- " misalignment. Increase the sScrollXInner value or remove it to allow automatic"+
- " calculation" );
- }
- }
- else
- {
- nScrollBody.style.width = _fnStringToCss( '100%' );
- o.nScrollHead.style.width = _fnStringToCss( '100%' );
-
- if ( o.nTFoot !== null )
- {
- o.nScrollFoot.style.width = _fnStringToCss( '100%' );
- }
- }
-
-
- /*
- * 4. Clean up
- */
- if ( o.oScroll.sY === "" )
- {
- /* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting
- * the scrollbar height from the visible display, rather than adding it on. We need to
- * set the height in order to sort this. Don't want to do it in any other browsers.
- */
- if ( ie67 )
- {
- nScrollBody.style.height = _fnStringToCss( o.nTable.offsetHeight+o.oScroll.iBarWidth );
- }
- }
-
- if ( o.oScroll.sY !== "" && o.oScroll.bCollapse )
- {
- nScrollBody.style.height = _fnStringToCss( o.oScroll.sY );
-
- var iExtra = (o.oScroll.sX !== "" && o.nTable.offsetWidth > nScrollBody.offsetWidth) ?
- o.oScroll.iBarWidth : 0;
- if ( o.nTable.offsetHeight < nScrollBody.offsetHeight )
- {
- nScrollBody.style.height = _fnStringToCss( o.nTable.offsetHeight+iExtra );
- }
- }
-
- /* Finally set the width's of the header and footer tables */
- var iOuterWidth = $(o.nTable).outerWidth();
- nScrollHeadTable.style.width = _fnStringToCss( iOuterWidth );
- nScrollHeadInner.style.width = _fnStringToCss( iOuterWidth );
-
- // Figure out if there are scrollbar present - if so then we need a the header and footer to
- // provide a bit more space to allow "overflow" scrolling (i.e. past the scrollbar)
- var bScrolling = $(o.nTable).height() > nScrollBody.clientHeight || $(nScrollBody).css('overflow-y') == "scroll";
- nScrollHeadInner.style.paddingRight = bScrolling ? o.oScroll.iBarWidth+"px" : "0px";
-
- if ( o.nTFoot !== null )
- {
- nScrollFootTable.style.width = _fnStringToCss( iOuterWidth );
- nScrollFootInner.style.width = _fnStringToCss( iOuterWidth );
- nScrollFootInner.style.paddingRight = bScrolling ? o.oScroll.iBarWidth+"px" : "0px";
- }
-
- /* Adjust the position of the header in case we loose the y-scrollbar */
- $(nScrollBody).scroll();
-
- /* If sorting or filtering has occurred, jump the scrolling back to the top */
- if ( o.bSorted || o.bFiltered )
- {
- nScrollBody.scrollTop = 0;
- }
-}
-
-
-/**
- * Apply a given function to the display child nodes of an element array (typically
- * TD children of TR rows
- * @param {function} fn Method to apply to the objects
- * @param array {nodes} an1 List of elements to look through for display children
- * @param array {nodes} an2 Another list (identical structure to the first) - optional
- * @memberof DataTable#oApi
- */
-function _fnApplyToChildren( fn, an1, an2 )
-{
- var index=0, i=0, iLen=an1.length;
- var nNode1, nNode2;
-
- while ( i < iLen )
- {
- nNode1 = an1[i].firstChild;
- nNode2 = an2 ? an2[i].firstChild : null;
- while ( nNode1 )
- {
- if ( nNode1.nodeType === 1 )
- {
- if ( an2 )
- {
- fn( nNode1, nNode2, index );
- }
- else
- {
- fn( nNode1, index );
- }
- index++;
- }
- nNode1 = nNode1.nextSibling;
- nNode2 = an2 ? nNode2.nextSibling : null;
- }
- i++;
- }
-}
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.sizing.js b/wqflask/wqflask/static/new/packages/DataTables/src/core/core.sizing.js
deleted file mode 100644
index 86e5f492..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.sizing.js
+++ /dev/null
@@ -1,403 +0,0 @@
-/**
- * Convert a CSS unit width to pixels (e.g. 2em)
- * @param {string} sWidth width to be converted
- * @param {node} nParent parent to get the with for (required for relative widths) - optional
- * @returns {int} iWidth width in pixels
- * @memberof DataTable#oApi
- */
-function _fnConvertToWidth ( sWidth, nParent )
-{
- if ( !sWidth || sWidth === null || sWidth === '' )
- {
- return 0;
- }
-
- if ( !nParent )
- {
- nParent = document.body;
- }
-
- var iWidth;
- var nTmp = document.createElement( "div" );
- nTmp.style.width = _fnStringToCss( sWidth );
-
- nParent.appendChild( nTmp );
- iWidth = nTmp.offsetWidth;
- nParent.removeChild( nTmp );
-
- return ( iWidth );
-}
-
-
-/**
- * Calculate the width of columns for the table
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnCalculateColumnWidths ( oSettings )
-{
- var iTableWidth = oSettings.nTable.offsetWidth;
- var iUserInputs = 0;
- var iTmpWidth;
- var iVisibleColumns = 0;
- var iColums = oSettings.aoColumns.length;
- var i, iIndex, iCorrector, iWidth;
- var oHeaders = $('th', oSettings.nTHead);
- var widthAttr = oSettings.nTable.getAttribute('width');
- var nWrapper = oSettings.nTable.parentNode;
-
- /* Convert any user input sizes into pixel sizes */
- for ( i=0 ; i<iColums ; i++ )
- {
- if ( oSettings.aoColumns[i].bVisible )
- {
- iVisibleColumns++;
-
- if ( oSettings.aoColumns[i].sWidth !== null )
- {
- iTmpWidth = _fnConvertToWidth( oSettings.aoColumns[i].sWidthOrig,
- nWrapper );
- if ( iTmpWidth !== null )
- {
- oSettings.aoColumns[i].sWidth = _fnStringToCss( iTmpWidth );
- }
-
- iUserInputs++;
- }
- }
- }
-
- /* If the number of columns in the DOM equals the number that we have to process in
- * DataTables, then we can use the offsets that are created by the web-browser. No custom
- * sizes can be set in order for this to happen, nor scrolling used
- */
- if ( iColums == oHeaders.length && iUserInputs === 0 && iVisibleColumns == iColums &&
- oSettings.oScroll.sX === "" && oSettings.oScroll.sY === "" )
- {
- for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
- {
- iTmpWidth = $(oHeaders[i]).width();
- if ( iTmpWidth !== null )
- {
- oSettings.aoColumns[i].sWidth = _fnStringToCss( iTmpWidth );
- }
- }
- }
- else
- {
- /* Otherwise we are going to have to do some calculations to get the width of each column.
- * Construct a 1 row table with the widest node in the data, and any user defined widths,
- * then insert it into the DOM and allow the browser to do all the hard work of
- * calculating table widths.
- */
- var
- nCalcTmp = oSettings.nTable.cloneNode( false ),
- nTheadClone = oSettings.nTHead.cloneNode(true),
- nBody = document.createElement( 'tbody' ),
- nTr = document.createElement( 'tr' ),
- nDivSizing;
-
- nCalcTmp.removeAttribute( "id" );
- nCalcTmp.appendChild( nTheadClone );
- if ( oSettings.nTFoot !== null )
- {
- nCalcTmp.appendChild( oSettings.nTFoot.cloneNode(true) );
- _fnApplyToChildren( function(n) {
- n.style.width = "";
- }, nCalcTmp.getElementsByTagName('tr') );
- }
-
- nCalcTmp.appendChild( nBody );
- nBody.appendChild( nTr );
-
- /* Remove any sizing that was previously applied by the styles */
- var jqColSizing = $('thead th', nCalcTmp);
- if ( jqColSizing.length === 0 )
- {
- jqColSizing = $('tbody tr:eq(0)>td', nCalcTmp);
- }
-
- /* Apply custom sizing to the cloned header */
- var nThs = _fnGetUniqueThs( oSettings, nTheadClone );
- iCorrector = 0;
- for ( i=0 ; i<iColums ; i++ )
- {
- var oColumn = oSettings.aoColumns[i];
- if ( oColumn.bVisible && oColumn.sWidthOrig !== null && oColumn.sWidthOrig !== "" )
- {
- nThs[i-iCorrector].style.width = _fnStringToCss( oColumn.sWidthOrig );
- }
- else if ( oColumn.bVisible )
- {
- nThs[i-iCorrector].style.width = "";
- }
- else
- {
- iCorrector++;
- }
- }
-
- /* Find the biggest td for each column and put it into the table */
- for ( i=0 ; i<iColums ; i++ )
- {
- if ( oSettings.aoColumns[i].bVisible )
- {
- var nTd = _fnGetWidestNode( oSettings, i );
- if ( nTd !== null )
- {
- nTd = nTd.cloneNode(true);
- if ( oSettings.aoColumns[i].sContentPadding !== "" )
- {
- nTd.innerHTML += oSettings.aoColumns[i].sContentPadding;
- }
- nTr.appendChild( nTd );
- }
- }
- }
-
- /* Build the table and 'display' it */
- nWrapper.appendChild( nCalcTmp );
-
- /* When scrolling (X or Y) we want to set the width of the table as appropriate. However,
- * when not scrolling leave the table width as it is. This results in slightly different,
- * but I think correct behaviour
- */
- if ( oSettings.oScroll.sX !== "" && oSettings.oScroll.sXInner !== "" )
- {
- nCalcTmp.style.width = _fnStringToCss(oSettings.oScroll.sXInner);
- }
- else if ( oSettings.oScroll.sX !== "" )
- {
- nCalcTmp.style.width = "";
- if ( $(nCalcTmp).width() < nWrapper.offsetWidth )
- {
- nCalcTmp.style.width = _fnStringToCss( nWrapper.offsetWidth );
- }
- }
- else if ( oSettings.oScroll.sY !== "" )
- {
- nCalcTmp.style.width = _fnStringToCss( nWrapper.offsetWidth );
- }
- else if ( widthAttr )
- {
- nCalcTmp.style.width = _fnStringToCss( widthAttr );
- }
- nCalcTmp.style.visibility = "hidden";
-
- /* Scrolling considerations */
- _fnScrollingWidthAdjust( oSettings, nCalcTmp );
-
- /* Read the width's calculated by the browser and store them for use by the caller. We
- * first of all try to use the elements in the body, but it is possible that there are
- * no elements there, under which circumstances we use the header elements
- */
- var oNodes = $("tbody tr:eq(0)", nCalcTmp).children();
- if ( oNodes.length === 0 )
- {
- oNodes = _fnGetUniqueThs( oSettings, $('thead', nCalcTmp)[0] );
- }
-
- /* Browsers need a bit of a hand when a width is assigned to any columns when
- * x-scrolling as they tend to collapse the table to the min-width, even if
- * we sent the column widths. So we need to keep track of what the table width
- * should be by summing the user given values, and the automatic values
- */
- if ( oSettings.oScroll.sX !== "" )
- {
- var iTotal = 0;
- iCorrector = 0;
- for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
- {
- if ( oSettings.aoColumns[i].bVisible )
- {
- if ( oSettings.aoColumns[i].sWidthOrig === null )
- {
- iTotal += $(oNodes[iCorrector]).outerWidth();
- }
- else
- {
- iTotal += parseInt(oSettings.aoColumns[i].sWidth.replace('px',''), 10) +
- ($(oNodes[iCorrector]).outerWidth() - $(oNodes[iCorrector]).width());
- }
- iCorrector++;
- }
- }
-
- nCalcTmp.style.width = _fnStringToCss( iTotal );
- oSettings.nTable.style.width = _fnStringToCss( iTotal );
- }
-
- iCorrector = 0;
- for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
- {
- if ( oSettings.aoColumns[i].bVisible )
- {
- iWidth = $(oNodes[iCorrector]).width();
- if ( iWidth !== null && iWidth > 0 )
- {
- oSettings.aoColumns[i].sWidth = _fnStringToCss( iWidth );
- }
- iCorrector++;
- }
- }
-
- var cssWidth = $(nCalcTmp).css('width');
- oSettings.nTable.style.width = (cssWidth.indexOf('%') !== -1) ?
- cssWidth : _fnStringToCss( $(nCalcTmp).outerWidth() );
- nCalcTmp.parentNode.removeChild( nCalcTmp );
- }
-
- if ( widthAttr )
- {
- oSettings.nTable.style.width = _fnStringToCss( widthAttr );
- }
-}
-
-
-/**
- * Adjust a table's width to take account of scrolling
- * @param {object} oSettings dataTables settings object
- * @param {node} n table node
- * @memberof DataTable#oApi
- */
-function _fnScrollingWidthAdjust ( oSettings, n )
-{
- if ( oSettings.oScroll.sX === "" && oSettings.oScroll.sY !== "" )
- {
- /* When y-scrolling only, we want to remove the width of the scroll bar so the table
- * + scroll bar will fit into the area avaialble.
- */
- var iOrigWidth = $(n).width();
- n.style.width = _fnStringToCss( $(n).outerWidth()-oSettings.oScroll.iBarWidth );
- }
- else if ( oSettings.oScroll.sX !== "" )
- {
- /* When x-scrolling both ways, fix the table at it's current size, without adjusting */
- n.style.width = _fnStringToCss( $(n).outerWidth() );
- }
-}
-
-
-/**
- * Get the widest node
- * @param {object} oSettings dataTables settings object
- * @param {int} iCol column of interest
- * @returns {node} widest table node
- * @memberof DataTable#oApi
- */
-function _fnGetWidestNode( oSettings, iCol )
-{
- var iMaxIndex = _fnGetMaxLenString( oSettings, iCol );
- if ( iMaxIndex < 0 )
- {
- return null;
- }
-
- if ( oSettings.aoData[iMaxIndex].nTr === null )
- {
- var n = document.createElement('td');
- n.innerHTML = _fnGetCellData( oSettings, iMaxIndex, iCol, '' );
- return n;
- }
- return _fnGetTdNodes(oSettings, iMaxIndex)[iCol];
-}
-
-
-/**
- * Get the maximum strlen for each data column
- * @param {object} oSettings dataTables settings object
- * @param {int} iCol column of interest
- * @returns {string} max string length for each column
- * @memberof DataTable#oApi
- */
-function _fnGetMaxLenString( oSettings, iCol )
-{
- var iMax = -1;
- var iMaxIndex = -1;
-
- for ( var i=0 ; i<oSettings.aoData.length ; i++ )
- {
- var s = _fnGetCellData( oSettings, i, iCol, 'display' )+"";
- s = s.replace( /<.*?>/g, "" );
- if ( s.length > iMax )
- {
- iMax = s.length;
- iMaxIndex = i;
- }
- }
-
- return iMaxIndex;
-}
-
-
-/**
- * Append a CSS unit (only if required) to a string
- * @param {array} aArray1 first array
- * @param {array} aArray2 second array
- * @returns {int} 0 if match, 1 if length is different, 2 if no match
- * @memberof DataTable#oApi
- */
-function _fnStringToCss( s )
-{
- if ( s === null )
- {
- return "0px";
- }
-
- if ( typeof s == 'number' )
- {
- if ( s < 0 )
- {
- return "0px";
- }
- return s+"px";
- }
-
- /* Check if the last character is not 0-9 */
- var c = s.charCodeAt( s.length-1 );
- if (c < 0x30 || c > 0x39)
- {
- return s;
- }
- return s+"px";
-}
-
-
-/**
- * Get the width of a scroll bar in this browser being used
- * @returns {int} width in pixels
- * @memberof DataTable#oApi
- */
-function _fnScrollBarWidth ()
-{
- var inner = document.createElement('p');
- var style = inner.style;
- style.width = "100%";
- style.height = "200px";
- style.padding = "0px";
-
- var outer = document.createElement('div');
- style = outer.style;
- style.position = "absolute";
- style.top = "0px";
- style.left = "0px";
- style.visibility = "hidden";
- style.width = "200px";
- style.height = "150px";
- style.padding = "0px";
- style.overflow = "hidden";
- outer.appendChild(inner);
-
- document.body.appendChild(outer);
- var w1 = inner.offsetWidth;
- outer.style.overflow = 'scroll';
- var w2 = inner.offsetWidth;
- if ( w1 == w2 )
- {
- w2 = outer.clientWidth;
- }
-
- document.body.removeChild(outer);
- return (w1 - w2);
-}
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.sort.js b/wqflask/wqflask/static/new/packages/DataTables/src/core/core.sort.js
deleted file mode 100644
index 5d168a5e..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.sort.js
+++ /dev/null
@@ -1,451 +0,0 @@
-/**
- * Change the order of the table
- * @param {object} oSettings dataTables settings object
- * @param {bool} bApplyClasses optional - should we apply classes or not
- * @memberof DataTable#oApi
- */
-function _fnSort ( oSettings, bApplyClasses )
-{
- var
- i, iLen, j, jLen, k, kLen,
- sDataType, nTh,
- aaSort = [],
- aiOrig = [],
- oSort = DataTable.ext.oSort,
- aoData = oSettings.aoData,
- aoColumns = oSettings.aoColumns,
- oAria = oSettings.oLanguage.oAria;
-
- /* No sorting required if server-side or no sorting array */
- if ( !oSettings.oFeatures.bServerSide &&
- (oSettings.aaSorting.length !== 0 || oSettings.aaSortingFixed !== null) )
- {
- aaSort = ( oSettings.aaSortingFixed !== null ) ?
- oSettings.aaSortingFixed.concat( oSettings.aaSorting ) :
- oSettings.aaSorting.slice();
-
- /* If there is a sorting data type, and a function belonging to it, then we need to
- * get the data from the developer's function and apply it for this column
- */
- for ( i=0 ; i<aaSort.length ; i++ )
- {
- var iColumn = aaSort[i][0];
- var iVisColumn = _fnColumnIndexToVisible( oSettings, iColumn );
- sDataType = oSettings.aoColumns[ iColumn ].sSortDataType;
- if ( DataTable.ext.afnSortData[sDataType] )
- {
- var aData = DataTable.ext.afnSortData[sDataType].call(
- oSettings.oInstance, oSettings, iColumn, iVisColumn
- );
- if ( aData.length === aoData.length )
- {
- for ( j=0, jLen=aoData.length ; j<jLen ; j++ )
- {
- _fnSetCellData( oSettings, j, iColumn, aData[j] );
- }
- }
- else
- {
- _fnLog( oSettings, 0, "Returned data sort array (col "+iColumn+") is the wrong length" );
- }
- }
- }
-
- /* Create a value - key array of the current row positions such that we can use their
- * current position during the sort, if values match, in order to perform stable sorting
- */
- for ( i=0, iLen=oSettings.aiDisplayMaster.length ; i<iLen ; i++ )
- {
- aiOrig[ oSettings.aiDisplayMaster[i] ] = i;
- }
-
- /* Build an internal data array which is specific to the sort, so we can get and prep
- * the data to be sorted only once, rather than needing to do it every time the sorting
- * function runs. This make the sorting function a very simple comparison
- */
- var iSortLen = aaSort.length;
- var fnSortFormat, aDataSort;
- for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
- {
- for ( j=0 ; j<iSortLen ; j++ )
- {
- aDataSort = aoColumns[ aaSort[j][0] ].aDataSort;
-
- for ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )
- {
- sDataType = aoColumns[ aDataSort[k] ].sType;
- fnSortFormat = oSort[ (sDataType ? sDataType : 'string')+"-pre" ];
-
- aoData[i]._aSortData[ aDataSort[k] ] = fnSortFormat ?
- fnSortFormat( _fnGetCellData( oSettings, i, aDataSort[k], 'sort' ) ) :
- _fnGetCellData( oSettings, i, aDataSort[k], 'sort' );
- }
- }
- }
-
- /* Do the sort - here we want multi-column sorting based on a given data source (column)
- * and sorting function (from oSort) in a certain direction. It's reasonably complex to
- * follow on it's own, but this is what we want (example two column sorting):
- * fnLocalSorting = function(a,b){
- * var iTest;
- * iTest = oSort['string-asc']('data11', 'data12');
- * if (iTest !== 0)
- * return iTest;
- * iTest = oSort['numeric-desc']('data21', 'data22');
- * if (iTest !== 0)
- * return iTest;
- * return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );
- * }
- * Basically we have a test for each sorting column, if the data in that column is equal,
- * test the next column. If all columns match, then we use a numeric sort on the row
- * positions in the original data array to provide a stable sort.
- */
- oSettings.aiDisplayMaster.sort( function ( a, b ) {
- var k, l, lLen, iTest, aDataSort, sDataType;
- for ( k=0 ; k<iSortLen ; k++ )
- {
- aDataSort = aoColumns[ aaSort[k][0] ].aDataSort;
-
- for ( l=0, lLen=aDataSort.length ; l<lLen ; l++ )
- {
- sDataType = aoColumns[ aDataSort[l] ].sType;
-
- iTest = oSort[ (sDataType ? sDataType : 'string')+"-"+aaSort[k][1] ](
- aoData[a]._aSortData[ aDataSort[l] ],
- aoData[b]._aSortData[ aDataSort[l] ]
- );
-
- if ( iTest !== 0 )
- {
- return iTest;
- }
- }
- }
-
- return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );
- } );
- }
-
- /* Alter the sorting classes to take account of the changes */
- if ( (bApplyClasses === undefined || bApplyClasses) && !oSettings.oFeatures.bDeferRender )
- {
- _fnSortingClasses( oSettings );
- }
-
- for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
- {
- var sTitle = aoColumns[i].sTitle.replace( /<.*?>/g, "" );
- nTh = aoColumns[i].nTh;
- nTh.removeAttribute('aria-sort');
- nTh.removeAttribute('aria-label');
-
- /* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */
- if ( aoColumns[i].bSortable )
- {
- if ( aaSort.length > 0 && aaSort[0][0] == i )
- {
- nTh.setAttribute('aria-sort', aaSort[0][1]=="asc" ? "ascending" : "descending" );
-
- var nextSort = (aoColumns[i].asSorting[ aaSort[0][2]+1 ]) ?
- aoColumns[i].asSorting[ aaSort[0][2]+1 ] : aoColumns[i].asSorting[0];
- nTh.setAttribute('aria-label', sTitle+
- (nextSort=="asc" ? oAria.sSortAscending : oAria.sSortDescending) );
- }
- else
- {
- nTh.setAttribute('aria-label', sTitle+
- (aoColumns[i].asSorting[0]=="asc" ? oAria.sSortAscending : oAria.sSortDescending) );
- }
- }
- else
- {
- nTh.setAttribute('aria-label', sTitle);
- }
- }
-
- /* Tell the draw function that we have sorted the data */
- oSettings.bSorted = true;
- $(oSettings.oInstance).trigger('sort', oSettings);
-
- /* Copy the master data into the draw array and re-draw */
- if ( oSettings.oFeatures.bFilter )
- {
- /* _fnFilter() will redraw the table for us */
- _fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 );
- }
- else
- {
- oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
- oSettings._iDisplayStart = 0; /* reset display back to page 0 */
- _fnCalculateEnd( oSettings );
- _fnDraw( oSettings );
- }
-}
-
-
-/**
- * Attach a sort handler (click) to a node
- * @param {object} oSettings dataTables settings object
- * @param {node} nNode node to attach the handler to
- * @param {int} iDataIndex column sorting index
- * @param {function} [fnCallback] callback function
- * @memberof DataTable#oApi
- */
-function _fnSortAttachListener ( oSettings, nNode, iDataIndex, fnCallback )
-{
- _fnBindAction( nNode, {}, function (e) {
- /* If the column is not sortable - don't to anything */
- if ( oSettings.aoColumns[iDataIndex].bSortable === false )
- {
- return;
- }
-
- /*
- * This is a little bit odd I admit... I declare a temporary function inside the scope of
- * _fnBuildHead and the click handler in order that the code presented here can be used
- * twice - once for when bProcessing is enabled, and another time for when it is
- * disabled, as we need to perform slightly different actions.
- * Basically the issue here is that the Javascript engine in modern browsers don't
- * appear to allow the rendering engine to update the display while it is still executing
- * it's thread (well - it does but only after long intervals). This means that the
- * 'processing' display doesn't appear for a table sort. To break the js thread up a bit
- * I force an execution break by using setTimeout - but this breaks the expected
- * thread continuation for the end-developer's point of view (their code would execute
- * too early), so we only do it when we absolutely have to.
- */
- var fnInnerSorting = function () {
- var iColumn, iNextSort;
-
- /* If the shift key is pressed then we are multiple column sorting */
- if ( e.shiftKey )
- {
- /* Are we already doing some kind of sort on this column? */
- var bFound = false;
- for ( var i=0 ; i<oSettings.aaSorting.length ; i++ )
- {
- if ( oSettings.aaSorting[i][0] == iDataIndex )
- {
- bFound = true;
- iColumn = oSettings.aaSorting[i][0];
- iNextSort = oSettings.aaSorting[i][2]+1;
-
- if ( !oSettings.aoColumns[iColumn].asSorting[iNextSort] )
- {
- /* Reached the end of the sorting options, remove from multi-col sort */
- oSettings.aaSorting.splice( i, 1 );
- }
- else
- {
- /* Move onto next sorting direction */
- oSettings.aaSorting[i][1] = oSettings.aoColumns[iColumn].asSorting[iNextSort];
- oSettings.aaSorting[i][2] = iNextSort;
- }
- break;
- }
- }
-
- /* No sort yet - add it in */
- if ( bFound === false )
- {
- oSettings.aaSorting.push( [ iDataIndex,
- oSettings.aoColumns[iDataIndex].asSorting[0], 0 ] );
- }
- }
- else
- {
- /* If no shift key then single column sort */
- if ( oSettings.aaSorting.length == 1 && oSettings.aaSorting[0][0] == iDataIndex )
- {
- iColumn = oSettings.aaSorting[0][0];
- iNextSort = oSettings.aaSorting[0][2]+1;
- if ( !oSettings.aoColumns[iColumn].asSorting[iNextSort] )
- {
- iNextSort = 0;
- }
- oSettings.aaSorting[0][1] = oSettings.aoColumns[iColumn].asSorting[iNextSort];
- oSettings.aaSorting[0][2] = iNextSort;
- }
- else
- {
- oSettings.aaSorting.splice( 0, oSettings.aaSorting.length );
- oSettings.aaSorting.push( [ iDataIndex,
- oSettings.aoColumns[iDataIndex].asSorting[0], 0 ] );
- }
- }
-
- /* Run the sort */
- _fnSort( oSettings );
- }; /* /fnInnerSorting */
-
- if ( !oSettings.oFeatures.bProcessing )
- {
- fnInnerSorting();
- }
- else
- {
- _fnProcessingDisplay( oSettings, true );
- setTimeout( function() {
- fnInnerSorting();
- if ( !oSettings.oFeatures.bServerSide )
- {
- _fnProcessingDisplay( oSettings, false );
- }
- }, 0 );
- }
-
- /* Call the user specified callback function - used for async user interaction */
- if ( typeof fnCallback == 'function' )
- {
- fnCallback( oSettings );
- }
- } );
-}
-
-
-/**
- * Set the sorting classes on the header, Note: it is safe to call this function
- * when bSort and bSortClasses are false
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnSortingClasses( oSettings )
-{
- var i, iLen, j, jLen, iFound;
- var aaSort, sClass;
- var iColumns = oSettings.aoColumns.length;
- var oClasses = oSettings.oClasses;
-
- for ( i=0 ; i<iColumns ; i++ )
- {
- if ( oSettings.aoColumns[i].bSortable )
- {
- $(oSettings.aoColumns[i].nTh).removeClass( oClasses.sSortAsc +" "+ oClasses.sSortDesc +
- " "+ oSettings.aoColumns[i].sSortingClass );
- }
- }
-
- if ( oSettings.aaSortingFixed !== null )
- {
- aaSort = oSettings.aaSortingFixed.concat( oSettings.aaSorting );
- }
- else
- {
- aaSort = oSettings.aaSorting.slice();
- }
-
- /* Apply the required classes to the header */
- for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
- {
- if ( oSettings.aoColumns[i].bSortable )
- {
- sClass = oSettings.aoColumns[i].sSortingClass;
- iFound = -1;
- for ( j=0 ; j<aaSort.length ; j++ )
- {
- if ( aaSort[j][0] == i )
- {
- sClass = ( aaSort[j][1] == "asc" ) ?
- oClasses.sSortAsc : oClasses.sSortDesc;
- iFound = j;
- break;
- }
- }
- $(oSettings.aoColumns[i].nTh).addClass( sClass );
-
- if ( oSettings.bJUI )
- {
- /* jQuery UI uses extra markup */
- var jqSpan = $("span."+oClasses.sSortIcon, oSettings.aoColumns[i].nTh);
- jqSpan.removeClass(oClasses.sSortJUIAsc +" "+ oClasses.sSortJUIDesc +" "+
- oClasses.sSortJUI +" "+ oClasses.sSortJUIAscAllowed +" "+ oClasses.sSortJUIDescAllowed );
-
- var sSpanClass;
- if ( iFound == -1 )
- {
- sSpanClass = oSettings.aoColumns[i].sSortingClassJUI;
- }
- else if ( aaSort[iFound][1] == "asc" )
- {
- sSpanClass = oClasses.sSortJUIAsc;
- }
- else
- {
- sSpanClass = oClasses.sSortJUIDesc;
- }
-
- jqSpan.addClass( sSpanClass );
- }
- }
- else
- {
- /* No sorting on this column, so add the base class. This will have been assigned by
- * _fnAddColumn
- */
- $(oSettings.aoColumns[i].nTh).addClass( oSettings.aoColumns[i].sSortingClass );
- }
- }
-
- /*
- * Apply the required classes to the table body
- * Note that this is given as a feature switch since it can significantly slow down a sort
- * on large data sets (adding and removing of classes is always slow at the best of times..)
- * Further to this, note that this code is admittedly fairly ugly. It could be made a lot
- * simpler using jQuery selectors and add/removeClass, but that is significantly slower
- * (on the order of 5 times slower) - hence the direct DOM manipulation here.
- * Note that for deferred drawing we do use jQuery - the reason being that taking the first
- * row found to see if the whole column needs processed can miss classes since the first
- * column might be new.
- */
- sClass = oClasses.sSortColumn;
-
- if ( oSettings.oFeatures.bSort && oSettings.oFeatures.bSortClasses )
- {
- var nTds = _fnGetTdNodes( oSettings );
-
- /* Determine what the sorting class for each column should be */
- var iClass, iTargetCol;
- var asClasses = [];
- for (i = 0; i < iColumns; i++)
- {
- asClasses.push("");
- }
- for (i = 0, iClass = 1; i < aaSort.length; i++)
- {
- iTargetCol = parseInt( aaSort[i][0], 10 );
- asClasses[iTargetCol] = sClass + iClass;
-
- if ( iClass < 3 )
- {
- iClass++;
- }
- }
-
- /* Make changes to the classes for each cell as needed */
- var reClass = new RegExp(sClass + "[123]");
- var sTmpClass, sCurrentClass, sNewClass;
- for ( i=0, iLen=nTds.length; i<iLen; i++ )
- {
- /* Determine which column we're looking at */
- iTargetCol = i % iColumns;
-
- /* What is the full list of classes now */
- sCurrentClass = nTds[i].className;
- /* What sorting class should be applied? */
- sNewClass = asClasses[iTargetCol];
- /* What would the new full list be if we did a replacement? */
- sTmpClass = sCurrentClass.replace(reClass, sNewClass);
-
- if ( sTmpClass != sCurrentClass )
- {
- /* We changed something */
- nTds[i].className = $.trim( sTmpClass );
- }
- else if ( sNewClass.length > 0 && sCurrentClass.indexOf(sNewClass) == -1 )
- {
- /* We need to add a class */
- nTds[i].className = sCurrentClass + " " + sNewClass;
- }
- }
- }
-}
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.state.js b/wqflask/wqflask/static/new/packages/DataTables/src/core/core.state.js
deleted file mode 100644
index f99f0437..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.state.js
+++ /dev/null
@@ -1,216 +0,0 @@
-
-
-/**
- * Save the state of a table in a cookie such that the page can be reloaded
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnSaveState ( oSettings )
-{
- if ( !oSettings.oFeatures.bStateSave || oSettings.bDestroying )
- {
- return;
- }
-
- /* Store the interesting variables */
- var i, iLen, bInfinite=oSettings.oScroll.bInfinite;
- var oState = {
- "iCreate": new Date().getTime(),
- "iStart": (bInfinite ? 0 : oSettings._iDisplayStart),
- "iEnd": (bInfinite ? oSettings._iDisplayLength : oSettings._iDisplayEnd),
- "iLength": oSettings._iDisplayLength,
- "aaSorting": $.extend( true, [], oSettings.aaSorting ),
- "oSearch": $.extend( true, {}, oSettings.oPreviousSearch ),
- "aoSearchCols": $.extend( true, [], oSettings.aoPreSearchCols ),
- "abVisCols": []
- };
-
- for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
- {
- oState.abVisCols.push( oSettings.aoColumns[i].bVisible );
- }
-
- _fnCallbackFire( oSettings, "aoStateSaveParams", 'stateSaveParams', [oSettings, oState] );
-
- oSettings.fnStateSave.call( oSettings.oInstance, oSettings, oState );
-}
-
-
-/**
- * Attempt to load a saved table state from a cookie
- * @param {object} oSettings dataTables settings object
- * @param {object} oInit DataTables init object so we can override settings
- * @memberof DataTable#oApi
- */
-function _fnLoadState ( oSettings, oInit )
-{
- if ( !oSettings.oFeatures.bStateSave )
- {
- return;
- }
-
- var oData = oSettings.fnStateLoad.call( oSettings.oInstance, oSettings );
- if ( !oData )
- {
- return;
- }
-
- /* Allow custom and plug-in manipulation functions to alter the saved data set and
- * cancelling of loading by returning false
- */
- var abStateLoad = _fnCallbackFire( oSettings, 'aoStateLoadParams', 'stateLoadParams', [oSettings, oData] );
- if ( $.inArray( false, abStateLoad ) !== -1 )
- {
- return;
- }
-
- /* Store the saved state so it might be accessed at any time */
- oSettings.oLoadedState = $.extend( true, {}, oData );
-
- /* Restore key features */
- oSettings._iDisplayStart = oData.iStart;
- oSettings.iInitDisplayStart = oData.iStart;
- oSettings._iDisplayEnd = oData.iEnd;
- oSettings._iDisplayLength = oData.iLength;
- oSettings.aaSorting = oData.aaSorting.slice();
- oSettings.saved_aaSorting = oData.aaSorting.slice();
-
- /* Search filtering */
- $.extend( oSettings.oPreviousSearch, oData.oSearch );
- $.extend( true, oSettings.aoPreSearchCols, oData.aoSearchCols );
-
- /* Column visibility state
- * Pass back visibility settings to the init handler, but to do not here override
- * the init object that the user might have passed in
- */
- oInit.saved_aoColumns = [];
- for ( var i=0 ; i<oData.abVisCols.length ; i++ )
- {
- oInit.saved_aoColumns[i] = {};
- oInit.saved_aoColumns[i].bVisible = oData.abVisCols[i];
- }
-
- _fnCallbackFire( oSettings, 'aoStateLoaded', 'stateLoaded', [oSettings, oData] );
-}
-
-
-/**
- * Create a new cookie with a value to store the state of a table
- * @param {string} sName name of the cookie to create
- * @param {string} sValue the value the cookie should take
- * @param {int} iSecs duration of the cookie
- * @param {string} sBaseName sName is made up of the base + file name - this is the base
- * @param {function} fnCallback User definable function to modify the cookie
- * @memberof DataTable#oApi
- */
-function _fnCreateCookie ( sName, sValue, iSecs, sBaseName, fnCallback )
-{
- var date = new Date();
- date.setTime( date.getTime()+(iSecs*1000) );
-
- /*
- * Shocking but true - it would appear IE has major issues with having the path not having
- * a trailing slash on it. We need the cookie to be available based on the path, so we
- * have to append the file name to the cookie name. Appalling. Thanks to vex for adding the
- * patch to use at least some of the path
- */
- var aParts = window.location.pathname.split('/');
- var sNameFile = sName + '_' + aParts.pop().replace(/[\/:]/g,"").toLowerCase();
- var sFullCookie, oData;
-
- if ( fnCallback !== null )
- {
- oData = (typeof $.parseJSON === 'function') ?
- $.parseJSON( sValue ) : eval( '('+sValue+')' );
- sFullCookie = fnCallback( sNameFile, oData, date.toGMTString(),
- aParts.join('/')+"/" );
- }
- else
- {
- sFullCookie = sNameFile + "=" + encodeURIComponent(sValue) +
- "; expires=" + date.toGMTString() +"; path=" + aParts.join('/')+"/";
- }
-
- /* Are we going to go over the cookie limit of 4KiB? If so, try to delete a cookies
- * belonging to DataTables.
- */
- var
- aCookies =document.cookie.split(';'),
- iNewCookieLen = sFullCookie.split(';')[0].length,
- aOldCookies = [];
-
- if ( iNewCookieLen+document.cookie.length+10 > 4096 ) /* Magic 10 for padding */
- {
- for ( var i=0, iLen=aCookies.length ; i<iLen ; i++ )
- {
- if ( aCookies[i].indexOf( sBaseName ) != -1 )
- {
- /* It's a DataTables cookie, so eval it and check the time stamp */
- var aSplitCookie = aCookies[i].split('=');
- try {
- oData = eval( '('+decodeURIComponent(aSplitCookie[1])+')' );
-
- if ( oData && oData.iCreate )
- {
- aOldCookies.push( {
- "name": aSplitCookie[0],
- "time": oData.iCreate
- } );
- }
- }
- catch( e ) {}
- }
- }
-
- // Make sure we delete the oldest ones first
- aOldCookies.sort( function (a, b) {
- return b.time - a.time;
- } );
-
- // Eliminate as many old DataTables cookies as we need to
- while ( iNewCookieLen + document.cookie.length + 10 > 4096 ) {
- if ( aOldCookies.length === 0 ) {
- // Deleted all DT cookies and still not enough space. Can't state save
- return;
- }
-
- var old = aOldCookies.pop();
- document.cookie = old.name+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path="+
- aParts.join('/') + "/";
- }
- }
-
- document.cookie = sFullCookie;
-}
-
-
-/**
- * Read an old cookie to get a cookie with an old table state
- * @param {string} sName name of the cookie to read
- * @returns {string} contents of the cookie - or null if no cookie with that name found
- * @memberof DataTable#oApi
- */
-function _fnReadCookie ( sName )
-{
- var
- aParts = window.location.pathname.split('/'),
- sNameEQ = sName + '_' + aParts[aParts.length-1].replace(/[\/:]/g,"").toLowerCase() + '=',
- sCookieContents = document.cookie.split(';');
-
- for( var i=0 ; i<sCookieContents.length ; i++ )
- {
- var c = sCookieContents[i];
-
- while (c.charAt(0)==' ')
- {
- c = c.substring(1,c.length);
- }
-
- if (c.indexOf(sNameEQ) === 0)
- {
- return decodeURIComponent( c.substring(sNameEQ.length,c.length) );
- }
- }
- return null;
-}
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.support.js b/wqflask/wqflask/static/new/packages/DataTables/src/core/core.support.js
deleted file mode 100644
index a3405607..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/core/core.support.js
+++ /dev/null
@@ -1,346 +0,0 @@
-
-/**
- * Return the settings object for a particular table
- * @param {node} nTable table we are using as a dataTable
- * @returns {object} Settings object - or null if not found
- * @memberof DataTable#oApi
- */
-function _fnSettingsFromNode ( nTable )
-{
- for ( var i=0 ; i<DataTable.settings.length ; i++ )
- {
- if ( DataTable.settings[i].nTable === nTable )
- {
- return DataTable.settings[i];
- }
- }
-
- return null;
-}
-
-
-/**
- * Return an array with the TR nodes for the table
- * @param {object} oSettings dataTables settings object
- * @returns {array} TR array
- * @memberof DataTable#oApi
- */
-function _fnGetTrNodes ( oSettings )
-{
- var aNodes = [];
- var aoData = oSettings.aoData;
- for ( var i=0, iLen=aoData.length ; i<iLen ; i++ )
- {
- if ( aoData[i].nTr !== null )
- {
- aNodes.push( aoData[i].nTr );
- }
- }
- return aNodes;
-}
-
-
-/**
- * Return an flat array with all TD nodes for the table, or row
- * @param {object} oSettings dataTables settings object
- * @param {int} [iIndividualRow] aoData index to get the nodes for - optional
- * if not given then the return array will contain all nodes for the table
- * @returns {array} TD array
- * @memberof DataTable#oApi
- */
-function _fnGetTdNodes ( oSettings, iIndividualRow )
-{
- var anReturn = [];
- var iCorrector;
- var anTds, nTd;
- var iRow, iRows=oSettings.aoData.length,
- iColumn, iColumns, oData, sNodeName, iStart=0, iEnd=iRows;
-
- /* Allow the collection to be limited to just one row */
- if ( iIndividualRow !== undefined )
- {
- iStart = iIndividualRow;
- iEnd = iIndividualRow+1;
- }
-
- for ( iRow=iStart ; iRow<iEnd ; iRow++ )
- {
- oData = oSettings.aoData[iRow];
- if ( oData.nTr !== null )
- {
- /* get the TD child nodes - taking into account text etc nodes */
- anTds = [];
- nTd = oData.nTr.firstChild;
- while ( nTd )
- {
- sNodeName = nTd.nodeName.toLowerCase();
- if ( sNodeName == 'td' || sNodeName == 'th' )
- {
- anTds.push( nTd );
- }
- nTd = nTd.nextSibling;
- }
-
- iCorrector = 0;
- for ( iColumn=0, iColumns=oSettings.aoColumns.length ; iColumn<iColumns ; iColumn++ )
- {
- if ( oSettings.aoColumns[iColumn].bVisible )
- {
- anReturn.push( anTds[iColumn-iCorrector] );
- }
- else
- {
- anReturn.push( oData._anHidden[iColumn] );
- iCorrector++;
- }
- }
- }
- }
-
- return anReturn;
-}
-
-
-/**
- * Log an error message
- * @param {object} oSettings dataTables settings object
- * @param {int} iLevel log error messages, or display them to the user
- * @param {string} sMesg error message
- * @memberof DataTable#oApi
- */
-function _fnLog( oSettings, iLevel, sMesg )
-{
- var sAlert = (oSettings===null) ?
- "DataTables warning: "+sMesg :
- "DataTables warning (table id = '"+oSettings.sTableId+"'): "+sMesg;
-
- if ( iLevel === 0 )
- {
- if ( DataTable.ext.sErrMode == 'alert' )
- {
- alert( sAlert );
- }
- else
- {
- throw new Error(sAlert);
- }
- return;
- }
- else if ( window.console && console.log )
- {
- console.log( sAlert );
- }
-}
-
-
-/**
- * See if a property is defined on one object, if so assign it to the other object
- * @param {object} oRet target object
- * @param {object} oSrc source object
- * @param {string} sName property
- * @param {string} [sMappedName] name to map too - optional, sName used if not given
- * @memberof DataTable#oApi
- */
-function _fnMap( oRet, oSrc, sName, sMappedName )
-{
- if ( sMappedName === undefined )
- {
- sMappedName = sName;
- }
- if ( oSrc[sName] !== undefined )
- {
- oRet[sMappedName] = oSrc[sName];
- }
-}
-
-
-/**
- * Extend objects - very similar to jQuery.extend, but deep copy objects, and shallow
- * copy arrays. The reason we need to do this, is that we don't want to deep copy array
- * init values (such as aaSorting) since the dev wouldn't be able to override them, but
- * we do want to deep copy arrays.
- * @param {object} oOut Object to extend
- * @param {object} oExtender Object from which the properties will be applied to oOut
- * @returns {object} oOut Reference, just for convenience - oOut === the return.
- * @memberof DataTable#oApi
- * @todo This doesn't take account of arrays inside the deep copied objects.
- */
-function _fnExtend( oOut, oExtender )
-{
- var val;
-
- for ( var prop in oExtender )
- {
- if ( oExtender.hasOwnProperty(prop) )
- {
- val = oExtender[prop];
-
- if ( typeof oInit[prop] === 'object' && val !== null && $.isArray(val) === false )
- {
- $.extend( true, oOut[prop], val );
- }
- else
- {
- oOut[prop] = val;
- }
- }
- }
-
- return oOut;
-}
-
-
-/**
- * Bind an event handers to allow a click or return key to activate the callback.
- * This is good for accessibility since a return on the keyboard will have the
- * same effect as a click, if the element has focus.
- * @param {element} n Element to bind the action to
- * @param {object} oData Data object to pass to the triggered function
- * @param {function} fn Callback function for when the event is triggered
- * @memberof DataTable#oApi
- */
-function _fnBindAction( n, oData, fn )
-{
- $(n)
- .bind( 'click.DT', oData, function (e) {
- n.blur(); // Remove focus outline for mouse users
- fn(e);
- } )
- .bind( 'keypress.DT', oData, function (e){
- if ( e.which === 13 ) {
- fn(e);
- } } )
- .bind( 'selectstart.DT', function () {
- /* Take the brutal approach to cancelling text selection */
- return false;
- } );
-}
-
-
-/**
- * Register a callback function. Easily allows a callback function to be added to
- * an array store of callback functions that can then all be called together.
- * @param {object} oSettings dataTables settings object
- * @param {string} sStore Name of the array storage for the callbacks in oSettings
- * @param {function} fn Function to be called back
- * @param {string} sName Identifying name for the callback (i.e. a label)
- * @memberof DataTable#oApi
- */
-function _fnCallbackReg( oSettings, sStore, fn, sName )
-{
- if ( fn )
- {
- oSettings[sStore].push( {
- "fn": fn,
- "sName": sName
- } );
- }
-}
-
-
-/**
- * Fire callback functions and trigger events. Note that the loop over the callback
- * array store is done backwards! Further note that you do not want to fire off triggers
- * in time sensitive applications (for example cell creation) as its slow.
- * @param {object} oSettings dataTables settings object
- * @param {string} sStore Name of the array storage for the callbacks in oSettings
- * @param {string} sTrigger Name of the jQuery custom event to trigger. If null no trigger
- * is fired
- * @param {array} aArgs Array of arguments to pass to the callback function / trigger
- * @memberof DataTable#oApi
- */
-function _fnCallbackFire( oSettings, sStore, sTrigger, aArgs )
-{
- var aoStore = oSettings[sStore];
- var aRet =[];
-
- for ( var i=aoStore.length-1 ; i>=0 ; i-- )
- {
- aRet.push( aoStore[i].fn.apply( oSettings.oInstance, aArgs ) );
- }
-
- if ( sTrigger !== null )
- {
- $(oSettings.oInstance).trigger(sTrigger, aArgs);
- }
-
- return aRet;
-}
-
-
-/**
- * JSON stringify. If JSON.stringify it provided by the browser, json2.js or any other
- * library, then we use that as it is fast, safe and accurate. If the function isn't
- * available then we need to built it ourselves - the inspiration for this function comes
- * from Craig Buckler ( http://www.sitepoint.com/javascript-json-serialization/ ). It is
- * not perfect and absolutely should not be used as a replacement to json2.js - but it does
- * do what we need, without requiring a dependency for DataTables.
- * @param {object} o JSON object to be converted
- * @returns {string} JSON string
- * @memberof DataTable#oApi
- */
-var _fnJsonString = (window.JSON) ? JSON.stringify : function( o )
-{
- /* Not an object or array */
- var sType = typeof o;
- if (sType !== "object" || o === null)
- {
- // simple data type
- if (sType === "string")
- {
- o = '"'+o+'"';
- }
- return o+"";
- }
-
- /* If object or array, need to recurse over it */
- var
- sProp, mValue,
- json = [],
- bArr = $.isArray(o);
-
- for (sProp in o)
- {
- mValue = o[sProp];
- sType = typeof mValue;
-
- if (sType === "string")
- {
- mValue = '"'+mValue+'"';
- }
- else if (sType === "object" && mValue !== null)
- {
- mValue = _fnJsonString(mValue);
- }
-
- json.push((bArr ? "" : '"'+sProp+'":') + mValue);
- }
-
- return (bArr ? "[" : "{") + json + (bArr ? "]" : "}");
-};
-
-
-/**
- * From some browsers (specifically IE6/7) we need special handling to work around browser
- * bugs - this function is used to detect when these workarounds are needed.
- * @param {object} oSettings dataTables settings object
- * @memberof DataTable#oApi
- */
-function _fnBrowserDetect( oSettings )
-{
- /* IE6/7 will oversize a width 100% element inside a scrolling element, to include the
- * width of the scrollbar, while other browsers ensure the inner element is contained
- * without forcing scrolling
- */
- var n = $(
- '<div style="position:absolute; top:0; left:0; height:1px; width:1px; overflow:hidden">'+
- '<div style="position:absolute; top:1px; left:1px; width:100px; overflow:scroll;">'+
- '<div id="DT_BrowserTest" style="width:100%; height:10px;"></div>'+
- '</div>'+
- '</div>')[0];
-
- document.body.appendChild( n );
- oSettings.oBrowser.bScrollOversize = $('#DT_BrowserTest', n)[0].offsetWidth === 100 ? true : false;
- document.body.removeChild( n );
-}
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/ext/ext.classes.js b/wqflask/wqflask/static/new/packages/DataTables/src/ext/ext.classes.js
deleted file mode 100644
index c87ca0c4..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/ext/ext.classes.js
+++ /dev/null
@@ -1,112 +0,0 @@
-
-$.extend( DataTable.ext.oStdClasses, {
- "sTable": "dataTable",
-
- /* Two buttons buttons */
- "sPagePrevEnabled": "paginate_enabled_previous",
- "sPagePrevDisabled": "paginate_disabled_previous",
- "sPageNextEnabled": "paginate_enabled_next",
- "sPageNextDisabled": "paginate_disabled_next",
- "sPageJUINext": "",
- "sPageJUIPrev": "",
-
- /* Full numbers paging buttons */
- "sPageButton": "paginate_button",
- "sPageButtonActive": "paginate_active",
- "sPageButtonStaticDisabled": "paginate_button paginate_button_disabled",
- "sPageFirst": "first",
- "sPagePrevious": "previous",
- "sPageNext": "next",
- "sPageLast": "last",
-
- /* Striping classes */
- "sStripeOdd": "odd",
- "sStripeEven": "even",
-
- /* Empty row */
- "sRowEmpty": "dataTables_empty",
-
- /* Features */
- "sWrapper": "dataTables_wrapper",
- "sFilter": "dataTables_filter",
- "sInfo": "dataTables_info",
- "sPaging": "dataTables_paginate paging_", /* Note that the type is postfixed */
- "sLength": "dataTables_length",
- "sProcessing": "dataTables_processing",
-
- /* Sorting */
- "sSortAsc": "sorting_asc",
- "sSortDesc": "sorting_desc",
- "sSortable": "sorting", /* Sortable in both directions */
- "sSortableAsc": "sorting_asc_disabled",
- "sSortableDesc": "sorting_desc_disabled",
- "sSortableNone": "sorting_disabled",
- "sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */
- "sSortJUIAsc": "",
- "sSortJUIDesc": "",
- "sSortJUI": "",
- "sSortJUIAscAllowed": "",
- "sSortJUIDescAllowed": "",
- "sSortJUIWrapper": "",
- "sSortIcon": "",
-
- /* Scrolling */
- "sScrollWrapper": "dataTables_scroll",
- "sScrollHead": "dataTables_scrollHead",
- "sScrollHeadInner": "dataTables_scrollHeadInner",
- "sScrollBody": "dataTables_scrollBody",
- "sScrollFoot": "dataTables_scrollFoot",
- "sScrollFootInner": "dataTables_scrollFootInner",
-
- /* Misc */
- "sFooterTH": "",
- "sJUIHeader": "",
- "sJUIFooter": ""
-} );
-
-
-$.extend( DataTable.ext.oJUIClasses, DataTable.ext.oStdClasses, {
- /* Two buttons buttons */
- "sPagePrevEnabled": "fg-button ui-button ui-state-default ui-corner-left",
- "sPagePrevDisabled": "fg-button ui-button ui-state-default ui-corner-left ui-state-disabled",
- "sPageNextEnabled": "fg-button ui-button ui-state-default ui-corner-right",
- "sPageNextDisabled": "fg-button ui-button ui-state-default ui-corner-right ui-state-disabled",
- "sPageJUINext": "ui-icon ui-icon-circle-arrow-e",
- "sPageJUIPrev": "ui-icon ui-icon-circle-arrow-w",
-
- /* Full numbers paging buttons */
- "sPageButton": "fg-button ui-button ui-state-default",
- "sPageButtonActive": "fg-button ui-button ui-state-default ui-state-disabled",
- "sPageButtonStaticDisabled": "fg-button ui-button ui-state-default ui-state-disabled",
- "sPageFirst": "first ui-corner-tl ui-corner-bl",
- "sPageLast": "last ui-corner-tr ui-corner-br",
-
- /* Features */
- "sPaging": "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi "+
- "ui-buttonset-multi paging_", /* Note that the type is postfixed */
-
- /* Sorting */
- "sSortAsc": "ui-state-default",
- "sSortDesc": "ui-state-default",
- "sSortable": "ui-state-default",
- "sSortableAsc": "ui-state-default",
- "sSortableDesc": "ui-state-default",
- "sSortableNone": "ui-state-default",
- "sSortJUIAsc": "css_right ui-icon ui-icon-triangle-1-n",
- "sSortJUIDesc": "css_right ui-icon ui-icon-triangle-1-s",
- "sSortJUI": "css_right ui-icon ui-icon-carat-2-n-s",
- "sSortJUIAscAllowed": "css_right ui-icon ui-icon-carat-1-n",
- "sSortJUIDescAllowed": "css_right ui-icon ui-icon-carat-1-s",
- "sSortJUIWrapper": "DataTables_sort_wrapper",
- "sSortIcon": "DataTables_sort_icon",
-
- /* Scrolling */
- "sScrollHead": "dataTables_scrollHead ui-state-default",
- "sScrollFoot": "dataTables_scrollFoot ui-state-default",
-
- /* Misc */
- "sFooterTH": "ui-state-default",
- "sJUIHeader": "fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix",
- "sJUIFooter": "fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix"
-} );
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/ext/ext.paging.js b/wqflask/wqflask/static/new/packages/DataTables/src/ext/ext.paging.js
deleted file mode 100644
index 10f5e6e8..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/ext/ext.paging.js
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Variable: oPagination
- * Purpose:
- * Scope: jQuery.fn.dataTableExt
- */
-$.extend( DataTable.ext.oPagination, {
- /*
- * Variable: two_button
- * Purpose: Standard two button (forward/back) pagination
- * Scope: jQuery.fn.dataTableExt.oPagination
- */
- "two_button": {
- /*
- * Function: oPagination.two_button.fnInit
- * Purpose: Initialise dom elements required for pagination with forward/back buttons only
- * Returns: -
- * Inputs: object:oSettings - dataTables settings object
- * node:nPaging - the DIV which contains this pagination control
- * function:fnCallbackDraw - draw function which must be called on update
- */
- "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
- {
- var oLang = oSettings.oLanguage.oPaginate;
- var oClasses = oSettings.oClasses;
- var fnClickHandler = function ( e ) {
- if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
- {
- fnCallbackDraw( oSettings );
- }
- };
-
- var sAppend = (!oSettings.bJUI) ?
- '<a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sPrevious+'</a>'+
- '<a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sNext+'</a>'
- :
- '<a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="'+oSettings.oClasses.sPageJUIPrev+'"></span></a>'+
- '<a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="'+oSettings.oClasses.sPageJUINext+'"></span></a>';
- $(nPaging).append( sAppend );
-
- var els = $('a', nPaging);
- var nPrevious = els[0],
- nNext = els[1];
-
- oSettings.oApi._fnBindAction( nPrevious, {action: "previous"}, fnClickHandler );
- oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler );
-
- /* ID the first elements only */
- if ( !oSettings.aanFeatures.p )
- {
- nPaging.id = oSettings.sTableId+'_paginate';
- nPrevious.id = oSettings.sTableId+'_previous';
- nNext.id = oSettings.sTableId+'_next';
-
- nPrevious.setAttribute('aria-controls', oSettings.sTableId);
- nNext.setAttribute('aria-controls', oSettings.sTableId);
- }
- },
-
- /*
- * Function: oPagination.two_button.fnUpdate
- * Purpose: Update the two button pagination at the end of the draw
- * Returns: -
- * Inputs: object:oSettings - dataTables settings object
- * function:fnCallbackDraw - draw function to call on page change
- */
- "fnUpdate": function ( oSettings, fnCallbackDraw )
- {
- if ( !oSettings.aanFeatures.p )
- {
- return;
- }
-
- var oClasses = oSettings.oClasses;
- var an = oSettings.aanFeatures.p;
- var nNode;
-
- /* Loop over each instance of the pager */
- for ( var i=0, iLen=an.length ; i<iLen ; i++ )
- {
- nNode = an[i].firstChild;
- if ( nNode )
- {
- /* Previous page */
- nNode.className = ( oSettings._iDisplayStart === 0 ) ?
- oClasses.sPagePrevDisabled : oClasses.sPagePrevEnabled;
-
- /* Next page */
- nNode = nNode.nextSibling;
- nNode.className = ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) ?
- oClasses.sPageNextDisabled : oClasses.sPageNextEnabled;
- }
- }
- }
- },
-
-
- /*
- * Variable: iFullNumbersShowPages
- * Purpose: Change the number of pages which can be seen
- * Scope: jQuery.fn.dataTableExt.oPagination
- */
- "iFullNumbersShowPages": 5,
-
- /*
- * Variable: full_numbers
- * Purpose: Full numbers pagination
- * Scope: jQuery.fn.dataTableExt.oPagination
- */
- "full_numbers": {
- /*
- * Function: oPagination.full_numbers.fnInit
- * Purpose: Initialise dom elements required for pagination with a list of the pages
- * Returns: -
- * Inputs: object:oSettings - dataTables settings object
- * node:nPaging - the DIV which contains this pagination control
- * function:fnCallbackDraw - draw function which must be called on update
- */
- "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
- {
- var oLang = oSettings.oLanguage.oPaginate;
- var oClasses = oSettings.oClasses;
- var fnClickHandler = function ( e ) {
- if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
- {
- fnCallbackDraw( oSettings );
- }
- };
-
- $(nPaging).append(
- '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageFirst+'">'+oLang.sFirst+'</a>'+
- '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPagePrevious+'">'+oLang.sPrevious+'</a>'+
- '<span></span>'+
- '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageNext+'">'+oLang.sNext+'</a>'+
- '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageLast+'">'+oLang.sLast+'</a>'
- );
- var els = $('a', nPaging);
- var nFirst = els[0],
- nPrev = els[1],
- nNext = els[2],
- nLast = els[3];
-
- oSettings.oApi._fnBindAction( nFirst, {action: "first"}, fnClickHandler );
- oSettings.oApi._fnBindAction( nPrev, {action: "previous"}, fnClickHandler );
- oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler );
- oSettings.oApi._fnBindAction( nLast, {action: "last"}, fnClickHandler );
-
- /* ID the first elements only */
- if ( !oSettings.aanFeatures.p )
- {
- nPaging.id = oSettings.sTableId+'_paginate';
- nFirst.id =oSettings.sTableId+'_first';
- nPrev.id =oSettings.sTableId+'_previous';
- nNext.id =oSettings.sTableId+'_next';
- nLast.id =oSettings.sTableId+'_last';
- }
- },
-
- /*
- * Function: oPagination.full_numbers.fnUpdate
- * Purpose: Update the list of page buttons shows
- * Returns: -
- * Inputs: object:oSettings - dataTables settings object
- * function:fnCallbackDraw - draw function to call on page change
- */
- "fnUpdate": function ( oSettings, fnCallbackDraw )
- {
- if ( !oSettings.aanFeatures.p )
- {
- return;
- }
-
- var iPageCount = DataTable.ext.oPagination.iFullNumbersShowPages;
- var iPageCountHalf = Math.floor(iPageCount / 2);
- var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength);
- var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1;
- var sList = "";
- var iStartButton, iEndButton, i, iLen;
- var oClasses = oSettings.oClasses;
- var anButtons, anStatic, nPaginateList, nNode;
- var an = oSettings.aanFeatures.p;
- var fnBind = function (j) {
- oSettings.oApi._fnBindAction( this, {"page": j+iStartButton-1}, function(e) {
- /* Use the information in the element to jump to the required page */
- oSettings.oApi._fnPageChange( oSettings, e.data.page );
- fnCallbackDraw( oSettings );
- e.preventDefault();
- } );
- };
-
- /* Pages calculation */
- if ( oSettings._iDisplayLength === -1 )
- {
- iStartButton = 1;
- iEndButton = 1;
- iCurrentPage = 1;
- }
- else if (iPages < iPageCount)
- {
- iStartButton = 1;
- iEndButton = iPages;
- }
- else if (iCurrentPage <= iPageCountHalf)
- {
- iStartButton = 1;
- iEndButton = iPageCount;
- }
- else if (iCurrentPage >= (iPages - iPageCountHalf))
- {
- iStartButton = iPages - iPageCount + 1;
- iEndButton = iPages;
- }
- else
- {
- iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1;
- iEndButton = iStartButton + iPageCount - 1;
- }
-
-
- /* Build the dynamic list */
- for ( i=iStartButton ; i<=iEndButton ; i++ )
- {
- sList += (iCurrentPage !== i) ?
- '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+'">'+oSettings.fnFormatNumber(i)+'</a>' :
- '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButtonActive+'">'+oSettings.fnFormatNumber(i)+'</a>';
- }
-
- /* Loop over each instance of the pager */
- for ( i=0, iLen=an.length ; i<iLen ; i++ )
- {
- nNode = an[i];
- if ( !nNode.hasChildNodes() )
- {
- continue;
- }
-
- /* Build up the dynamic list first - html and listeners */
- $('span:eq(0)', nNode)
- .html( sList )
- .children('a').each( fnBind );
-
- /* Update the permanent button's classes */
- anButtons = nNode.getElementsByTagName('a');
- anStatic = [
- anButtons[0], anButtons[1],
- anButtons[anButtons.length-2], anButtons[anButtons.length-1]
- ];
-
- $(anStatic).removeClass( oClasses.sPageButton+" "+oClasses.sPageButtonActive+" "+oClasses.sPageButtonStaticDisabled );
- $([anStatic[0], anStatic[1]]).addClass(
- (iCurrentPage==1) ?
- oClasses.sPageButtonStaticDisabled :
- oClasses.sPageButton
- );
- $([anStatic[2], anStatic[3]]).addClass(
- (iPages===0 || iCurrentPage===iPages || oSettings._iDisplayLength===-1) ?
- oClasses.sPageButtonStaticDisabled :
- oClasses.sPageButton
- );
- }
- }
- }
-} );
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/ext/ext.sorting.js b/wqflask/wqflask/static/new/packages/DataTables/src/ext/ext.sorting.js
deleted file mode 100644
index 93ab015b..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/ext/ext.sorting.js
+++ /dev/null
@@ -1,86 +0,0 @@
-
-$.extend( DataTable.ext.oSort, {
- /*
- * text sorting
- */
- "string-pre": function ( a )
- {
- if ( typeof a != 'string' ) {
- a = (a !== null && a.toString) ? a.toString() : '';
- }
- return a.toLowerCase();
- },
-
- "string-asc": function ( x, y )
- {
- return ((x < y) ? -1 : ((x > y) ? 1 : 0));
- },
-
- "string-desc": function ( x, y )
- {
- return ((x < y) ? 1 : ((x > y) ? -1 : 0));
- },
-
-
- /*
- * html sorting (ignore html tags)
- */
- "html-pre": function ( a )
- {
- return a.replace( /<.*?>/g, "" ).toLowerCase();
- },
-
- "html-asc": function ( x, y )
- {
- return ((x < y) ? -1 : ((x > y) ? 1 : 0));
- },
-
- "html-desc": function ( x, y )
- {
- return ((x < y) ? 1 : ((x > y) ? -1 : 0));
- },
-
-
- /*
- * date sorting
- */
- "date-pre": function ( a )
- {
- var x = Date.parse( a );
-
- if ( isNaN(x) || x==="" )
- {
- x = Date.parse( "01/01/1970 00:00:00" );
- }
- return x;
- },
-
- "date-asc": function ( x, y )
- {
- return x - y;
- },
-
- "date-desc": function ( x, y )
- {
- return y - x;
- },
-
-
- /*
- * numerical sorting
- */
- "numeric-pre": function ( a )
- {
- return (a=="-" || a==="") ? 0 : a*1;
- },
-
- "numeric-asc": function ( x, y )
- {
- return x - y;
- },
-
- "numeric-desc": function ( x, y )
- {
- return y - x;
- }
-} );
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/ext/ext.types.js b/wqflask/wqflask/static/new/packages/DataTables/src/ext/ext.types.js
deleted file mode 100644
index 1d67ccc3..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/ext/ext.types.js
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-$.extend( DataTable.ext.aTypes, [
- /*
- * Function: -
- * Purpose: Check to see if a string is numeric
- * Returns: string:'numeric' or null
- * Inputs: mixed:sText - string to check
- */
- function ( sData )
- {
- /* Allow zero length strings as a number */
- if ( typeof sData === 'number' )
- {
- return 'numeric';
- }
- else if ( typeof sData !== 'string' )
- {
- return null;
- }
-
- var sValidFirstChars = "0123456789-";
- var sValidChars = "0123456789.";
- var Char;
- var bDecimal = false;
-
- /* Check for a valid first char (no period and allow negatives) */
- Char = sData.charAt(0);
- if (sValidFirstChars.indexOf(Char) == -1)
- {
- return null;
- }
-
- /* Check all the other characters are valid */
- for ( var i=1 ; i<sData.length ; i++ )
- {
- Char = sData.charAt(i);
- if (sValidChars.indexOf(Char) == -1)
- {
- return null;
- }
-
- /* Only allowed one decimal place... */
- if ( Char == "." )
- {
- if ( bDecimal )
- {
- return null;
- }
- bDecimal = true;
- }
- }
-
- return 'numeric';
- },
-
- /*
- * Function: -
- * Purpose: Check to see if a string is actually a formatted date
- * Returns: string:'date' or null
- * Inputs: string:sText - string to check
- */
- function ( sData )
- {
- var iParse = Date.parse(sData);
- if ( (iParse !== null && !isNaN(iParse)) || (typeof sData === 'string' && sData.length === 0) )
- {
- return 'date';
- }
- return null;
- },
-
- /*
- * Function: -
- * Purpose: Check to see if a string should be treated as an HTML string
- * Returns: string:'html' or null
- * Inputs: string:sText - string to check
- */
- function ( sData )
- {
- if ( typeof sData === 'string' && sData.indexOf('<') != -1 && sData.indexOf('>') != -1 )
- {
- return 'html';
- }
- return null;
- }
-] );
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/model/model.column.js b/wqflask/wqflask/static/new/packages/DataTables/src/model/model.column.js
deleted file mode 100644
index 07c0e910..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/model/model.column.js
+++ /dev/null
@@ -1,263 +0,0 @@
-
-
-
-/**
- * Template object for the column information object in DataTables. This object
- * is held in the settings aoColumns array and contains all the information that
- * DataTables needs about each individual column.
- *
- * Note that this object is related to {@link DataTable.defaults.columns}
- * but this one is the internal data store for DataTables's cache of columns.
- * It should NOT be manipulated outside of DataTables. Any configuration should
- * be done through the initialisation options.
- * @namespace
- */
-DataTable.models.oColumn = {
- /**
- * A list of the columns that sorting should occur on when this column
- * is sorted. That this property is an array allows multi-column sorting
- * to be defined for a column (for example first name / last name columns
- * would benefit from this). The values are integers pointing to the
- * columns to be sorted on (typically it will be a single integer pointing
- * at itself, but that doesn't need to be the case).
- * @type array
- */
- "aDataSort": null,
-
- /**
- * Define the sorting directions that are applied to the column, in sequence
- * as the column is repeatedly sorted upon - i.e. the first value is used
- * as the sorting direction when the column if first sorted (clicked on).
- * Sort it again (click again) and it will move on to the next index.
- * Repeat until loop.
- * @type array
- */
- "asSorting": null,
-
- /**
- * Flag to indicate if the column is searchable, and thus should be included
- * in the filtering or not.
- * @type boolean
- */
- "bSearchable": null,
-
- /**
- * Flag to indicate if the column is sortable or not.
- * @type boolean
- */
- "bSortable": null,
-
- /**
- * <code>Deprecated</code> When using fnRender, you have two options for what
- * to do with the data, and this property serves as the switch. Firstly, you
- * can have the sorting and filtering use the rendered value (true - default),
- * or you can have the sorting and filtering us the original value (false).
- *
- * Please note that this option has now been deprecated and will be removed
- * in the next version of DataTables. Please use mRender / mData rather than
- * fnRender.
- * @type boolean
- * @deprecated
- */
- "bUseRendered": null,
-
- /**
- * Flag to indicate if the column is currently visible in the table or not
- * @type boolean
- */
- "bVisible": null,
-
- /**
- * Flag to indicate to the type detection method if the automatic type
- * detection should be used, or if a column type (sType) has been specified
- * @type boolean
- * @default true
- * @private
- */
- "_bAutoType": true,
-
- /**
- * Developer definable function that is called whenever a cell is created (Ajax source,
- * etc) or processed for input (DOM source). This can be used as a compliment to mRender
- * allowing you to modify the DOM element (add background colour for example) when the
- * element is available.
- * @type function
- * @param {element} nTd The TD node that has been created
- * @param {*} sData The Data for the cell
- * @param {array|object} oData The data for the whole row
- * @param {int} iRow The row index for the aoData data store
- * @default null
- */
- "fnCreatedCell": null,
-
- /**
- * Function to get data from a cell in a column. You should <b>never</b>
- * access data directly through _aData internally in DataTables - always use
- * the method attached to this property. It allows mData to function as
- * required. This function is automatically assigned by the column
- * initialisation method
- * @type function
- * @param {array|object} oData The data array/object for the array
- * (i.e. aoData[]._aData)
- * @param {string} sSpecific The specific data type you want to get -
- * 'display', 'type' 'filter' 'sort'
- * @returns {*} The data for the cell from the given row's data
- * @default null
- */
- "fnGetData": null,
-
- /**
- * <code>Deprecated</code> Custom display function that will be called for the
- * display of each cell in this column.
- *
- * Please note that this option has now been deprecated and will be removed
- * in the next version of DataTables. Please use mRender / mData rather than
- * fnRender.
- * @type function
- * @param {object} o Object with the following parameters:
- * @param {int} o.iDataRow The row in aoData
- * @param {int} o.iDataColumn The column in question
- * @param {array} o.aData The data for the row in question
- * @param {object} o.oSettings The settings object for this DataTables instance
- * @returns {string} The string you which to use in the display
- * @default null
- * @deprecated
- */
- "fnRender": null,
-
- /**
- * Function to set data for a cell in the column. You should <b>never</b>
- * set the data directly to _aData internally in DataTables - always use
- * this method. It allows mData to function as required. This function
- * is automatically assigned by the column initialisation method
- * @type function
- * @param {array|object} oData The data array/object for the array
- * (i.e. aoData[]._aData)
- * @param {*} sValue Value to set
- * @default null
- */
- "fnSetData": null,
-
- /**
- * Property to read the value for the cells in the column from the data
- * source array / object. If null, then the default content is used, if a
- * function is given then the return from the function is used.
- * @type function|int|string|null
- * @default null
- */
- "mData": null,
-
- /**
- * Partner property to mData which is used (only when defined) to get
- * the data - i.e. it is basically the same as mData, but without the
- * 'set' option, and also the data fed to it is the result from mData.
- * This is the rendering method to match the data method of mData.
- * @type function|int|string|null
- * @default null
- */
- "mRender": null,
-
- /**
- * Unique header TH/TD element for this column - this is what the sorting
- * listener is attached to (if sorting is enabled.)
- * @type node
- * @default null
- */
- "nTh": null,
-
- /**
- * Unique footer TH/TD element for this column (if there is one). Not used
- * in DataTables as such, but can be used for plug-ins to reference the
- * footer for each column.
- * @type node
- * @default null
- */
- "nTf": null,
-
- /**
- * The class to apply to all TD elements in the table's TBODY for the column
- * @type string
- * @default null
- */
- "sClass": null,
-
- /**
- * When DataTables calculates the column widths to assign to each column,
- * it finds the longest string in each column and then constructs a
- * temporary table and reads the widths from that. The problem with this
- * is that "mmm" is much wider then "iiii", but the latter is a longer
- * string - thus the calculation can go wrong (doing it properly and putting
- * it into an DOM object and measuring that is horribly(!) slow). Thus as
- * a "work around" we provide this option. It will append its value to the
- * text that is found to be the longest string for the column - i.e. padding.
- * @type string
- */
- "sContentPadding": null,
-
- /**
- * Allows a default value to be given for a column's data, and will be used
- * whenever a null data source is encountered (this can be because mData
- * is set to null, or because the data source itself is null).
- * @type string
- * @default null
- */
- "sDefaultContent": null,
-
- /**
- * Name for the column, allowing reference to the column by name as well as
- * by index (needs a lookup to work by name).
- * @type string
- */
- "sName": null,
-
- /**
- * Custom sorting data type - defines which of the available plug-ins in
- * afnSortData the custom sorting will use - if any is defined.
- * @type string
- * @default std
- */
- "sSortDataType": 'std',
-
- /**
- * Class to be applied to the header element when sorting on this column
- * @type string
- * @default null
- */
- "sSortingClass": null,
-
- /**
- * Class to be applied to the header element when sorting on this column -
- * when jQuery UI theming is used.
- * @type string
- * @default null
- */
- "sSortingClassJUI": null,
-
- /**
- * Title of the column - what is seen in the TH element (nTh).
- * @type string
- */
- "sTitle": null,
-
- /**
- * Column sorting and filtering type
- * @type string
- * @default null
- */
- "sType": null,
-
- /**
- * Width of the column
- * @type string
- * @default null
- */
- "sWidth": null,
-
- /**
- * Width of the column when it was first "encountered"
- * @type string
- * @default null
- */
- "sWidthOrig": null
-};
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/model/model.defaults.columns.js b/wqflask/wqflask/static/new/packages/DataTables/src/model/model.defaults.columns.js
deleted file mode 100644
index 8d56d0e7..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/model/model.defaults.columns.js
+++ /dev/null
@@ -1,759 +0,0 @@
-
-
-/**
- * Column options that can be given to DataTables at initialisation time.
- * @namespace
- */
-DataTable.defaults.columns = {
- /**
- * Allows a column's sorting to take multiple columns into account when
- * doing a sort. For example first name / last name columns make sense to
- * do a multi-column sort over the two columns.
- * @type array
- * @default null <i>Takes the value of the column index automatically</i>
- * @dtopt Columns
- *
- * @example
- * // Using aoColumnDefs
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumnDefs": [
- * { "aDataSort": [ 0, 1 ], "aTargets": [ 0 ] },
- * { "aDataSort": [ 1, 0 ], "aTargets": [ 1 ] },
- * { "aDataSort": [ 2, 3, 4 ], "aTargets": [ 2 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using aoColumns
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumns": [
- * { "aDataSort": [ 0, 1 ] },
- * { "aDataSort": [ 1, 0 ] },
- * { "aDataSort": [ 2, 3, 4 ] },
- * null,
- * null
- * ]
- * } );
- * } );
- */
- "aDataSort": null,
-
-
- /**
- * You can control the default sorting direction, and even alter the behaviour
- * of the sort handler (i.e. only allow ascending sorting etc) using this
- * parameter.
- * @type array
- * @default [ 'asc', 'desc' ]
- * @dtopt Columns
- *
- * @example
- * // Using aoColumnDefs
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumnDefs": [
- * { "asSorting": [ "asc" ], "aTargets": [ 1 ] },
- * { "asSorting": [ "desc", "asc", "asc" ], "aTargets": [ 2 ] },
- * { "asSorting": [ "desc" ], "aTargets": [ 3 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using aoColumns
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumns": [
- * null,
- * { "asSorting": [ "asc" ] },
- * { "asSorting": [ "desc", "asc", "asc" ] },
- * { "asSorting": [ "desc" ] },
- * null
- * ]
- * } );
- * } );
- */
- "asSorting": [ 'asc', 'desc' ],
-
-
- /**
- * Enable or disable filtering on the data in this column.
- * @type boolean
- * @default true
- * @dtopt Columns
- *
- * @example
- * // Using aoColumnDefs
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumnDefs": [
- * { "bSearchable": false, "aTargets": [ 0 ] }
- * ] } );
- * } );
- *
- * @example
- * // Using aoColumns
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumns": [
- * { "bSearchable": false },
- * null,
- * null,
- * null,
- * null
- * ] } );
- * } );
- */
- "bSearchable": true,
-
-
- /**
- * Enable or disable sorting on this column.
- * @type boolean
- * @default true
- * @dtopt Columns
- *
- * @example
- * // Using aoColumnDefs
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumnDefs": [
- * { "bSortable": false, "aTargets": [ 0 ] }
- * ] } );
- * } );
- *
- * @example
- * // Using aoColumns
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumns": [
- * { "bSortable": false },
- * null,
- * null,
- * null,
- * null
- * ] } );
- * } );
- */
- "bSortable": true,
-
-
- /**
- * <code>Deprecated</code> When using fnRender() for a column, you may wish
- * to use the original data (before rendering) for sorting and filtering
- * (the default is to used the rendered data that the user can see). This
- * may be useful for dates etc.
- *
- * Please note that this option has now been deprecated and will be removed
- * in the next version of DataTables. Please use mRender / mData rather than
- * fnRender.
- * @type boolean
- * @default true
- * @dtopt Columns
- * @deprecated
- */
- "bUseRendered": true,
-
-
- /**
- * Enable or disable the display of this column.
- * @type boolean
- * @default true
- * @dtopt Columns
- *
- * @example
- * // Using aoColumnDefs
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumnDefs": [
- * { "bVisible": false, "aTargets": [ 0 ] }
- * ] } );
- * } );
- *
- * @example
- * // Using aoColumns
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumns": [
- * { "bVisible": false },
- * null,
- * null,
- * null,
- * null
- * ] } );
- * } );
- */
- "bVisible": true,
-
-
- /**
- * Developer definable function that is called whenever a cell is created (Ajax source,
- * etc) or processed for input (DOM source). This can be used as a compliment to mRender
- * allowing you to modify the DOM element (add background colour for example) when the
- * element is available.
- * @type function
- * @param {element} nTd The TD node that has been created
- * @param {*} sData The Data for the cell
- * @param {array|object} oData The data for the whole row
- * @param {int} iRow The row index for the aoData data store
- * @param {int} iCol The column index for aoColumns
- * @dtopt Columns
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumnDefs": [ {
- * "aTargets": [3],
- * "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) {
- * if ( sData == "1.7" ) {
- * $(nTd).css('color', 'blue')
- * }
- * }
- * } ]
- * });
- * } );
- */
- "fnCreatedCell": null,
-
-
- /**
- * <code>Deprecated</code> Custom display function that will be called for the
- * display of each cell in this column.
- *
- * Please note that this option has now been deprecated and will be removed
- * in the next version of DataTables. Please use mRender / mData rather than
- * fnRender.
- * @type function
- * @param {object} o Object with the following parameters:
- * @param {int} o.iDataRow The row in aoData
- * @param {int} o.iDataColumn The column in question
- * @param {array} o.aData The data for the row in question
- * @param {object} o.oSettings The settings object for this DataTables instance
- * @param {object} o.mDataProp The data property used for this column
- * @param {*} val The current cell value
- * @returns {string} The string you which to use in the display
- * @dtopt Columns
- * @deprecated
- */
- "fnRender": null,
-
-
- /**
- * The column index (starting from 0!) that you wish a sort to be performed
- * upon when this column is selected for sorting. This can be used for sorting
- * on hidden columns for example.
- * @type int
- * @default -1 <i>Use automatically calculated column index</i>
- * @dtopt Columns
- *
- * @example
- * // Using aoColumnDefs
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumnDefs": [
- * { "iDataSort": 1, "aTargets": [ 0 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using aoColumns
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumns": [
- * { "iDataSort": 1 },
- * null,
- * null,
- * null,
- * null
- * ]
- * } );
- * } );
- */
- "iDataSort": -1,
-
-
- /**
- * This parameter has been replaced by mData in DataTables to ensure naming
- * consistency. mDataProp can still be used, as there is backwards compatibility
- * in DataTables for this option, but it is strongly recommended that you use
- * mData in preference to mDataProp.
- * @name DataTable.defaults.columns.mDataProp
- */
-
-
- /**
- * This property can be used to read data from any JSON data source property,
- * including deeply nested objects / properties. mData can be given in a
- * number of different ways which effect its behaviour:
- * <ul>
- * <li>integer - treated as an array index for the data source. This is the
- * default that DataTables uses (incrementally increased for each column).</li>
- * <li>string - read an object property from the data source. Note that you can
- * use Javascript dotted notation to read deep properties / arrays from the
- * data source.</li>
- * <li>null - the sDefaultContent option will be used for the cell (null
- * by default, so you will need to specify the default content you want -
- * typically an empty string). This can be useful on generated columns such
- * as edit / delete action columns.</li>
- * <li>function - the function given will be executed whenever DataTables
- * needs to set or get the data for a cell in the column. The function
- * takes three parameters:
- * <ul>
- * <li>{array|object} The data source for the row</li>
- * <li>{string} The type call data requested - this will be 'set' when
- * setting data or 'filter', 'display', 'type', 'sort' or undefined when
- * gathering data. Note that when <i>undefined</i> is given for the type
- * DataTables expects to get the raw data for the object back</li>
- * <li>{*} Data to set when the second parameter is 'set'.</li>
- * </ul>
- * The return value from the function is not required when 'set' is the type
- * of call, but otherwise the return is what will be used for the data
- * requested.</li>
- * </ul>
- *
- * Note that prior to DataTables 1.9.2 mData was called mDataProp. The name change
- * reflects the flexibility of this property and is consistent with the naming of
- * mRender. If 'mDataProp' is given, then it will still be used by DataTables, as
- * it automatically maps the old name to the new if required.
- * @type string|int|function|null
- * @default null <i>Use automatically calculated column index</i>
- * @dtopt Columns
- *
- * @example
- * // Read table data from objects
- * $(document).ready( function() {
- * var oTable = $('#example').dataTable( {
- * "sAjaxSource": "sources/deep.txt",
- * "aoColumns": [
- * { "mData": "engine" },
- * { "mData": "browser" },
- * { "mData": "platform.inner" },
- * { "mData": "platform.details.0" },
- * { "mData": "platform.details.1" }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using mData as a function to provide different information for
- * // sorting, filtering and display. In this case, currency (price)
- * $(document).ready( function() {
- * var oTable = $('#example').dataTable( {
- * "aoColumnDefs": [ {
- * "aTargets": [ 0 ],
- * "mData": function ( source, type, val ) {
- * if (type === 'set') {
- * source.price = val;
- * // Store the computed dislay and filter values for efficiency
- * source.price_display = val=="" ? "" : "$"+numberFormat(val);
- * source.price_filter = val=="" ? "" : "$"+numberFormat(val)+" "+val;
- * return;
- * }
- * else if (type === 'display') {
- * return source.price_display;
- * }
- * else if (type === 'filter') {
- * return source.price_filter;
- * }
- * // 'sort', 'type' and undefined all just use the integer
- * return source.price;
- * }
- * } ]
- * } );
- * } );
- */
- "mData": null,
-
-
- /**
- * This property is the rendering partner to mData and it is suggested that
- * when you want to manipulate data for display (including filtering, sorting etc)
- * but not altering the underlying data for the table, use this property. mData
- * can actually do everything this property can and more, but this parameter is
- * easier to use since there is no 'set' option. Like mData is can be given
- * in a number of different ways to effect its behaviour, with the addition of
- * supporting array syntax for easy outputting of arrays (including arrays of
- * objects):
- * <ul>
- * <li>integer - treated as an array index for the data source. This is the
- * default that DataTables uses (incrementally increased for each column).</li>
- * <li>string - read an object property from the data source. Note that you can
- * use Javascript dotted notation to read deep properties / arrays from the
- * data source and also array brackets to indicate that the data reader should
- * loop over the data source array. When characters are given between the array
- * brackets, these characters are used to join the data source array together.
- * For example: "accounts[, ].name" would result in a comma separated list with
- * the 'name' value from the 'accounts' array of objects.</li>
- * <li>function - the function given will be executed whenever DataTables
- * needs to set or get the data for a cell in the column. The function
- * takes three parameters:
- * <ul>
- * <li>{array|object} The data source for the row (based on mData)</li>
- * <li>{string} The type call data requested - this will be 'filter', 'display',
- * 'type' or 'sort'.</li>
- * <li>{array|object} The full data source for the row (not based on mData)</li>
- * </ul>
- * The return value from the function is what will be used for the data
- * requested.</li>
- * </ul>
- * @type string|int|function|null
- * @default null <i>Use mData</i>
- * @dtopt Columns
- *
- * @example
- * // Create a comma separated list from an array of objects
- * $(document).ready( function() {
- * var oTable = $('#example').dataTable( {
- * "sAjaxSource": "sources/deep.txt",
- * "aoColumns": [
- * { "mData": "engine" },
- * { "mData": "browser" },
- * {
- * "mData": "platform",
- * "mRender": "[, ].name"
- * }
- * ]
- * } );
- * } );
- *
- * @example
- * // Use as a function to create a link from the data source
- * $(document).ready( function() {
- * var oTable = $('#example').dataTable( {
- * "aoColumnDefs": [
- * {
- * "aTargets": [ 0 ],
- * "mData": "download_link",
- * "mRender": function ( data, type, full ) {
- * return '<a href="'+data+'">Download</a>';
- * }
- * ]
- * } );
- * } );
- */
- "mRender": null,
-
-
- /**
- * Change the cell type created for the column - either TD cells or TH cells. This
- * can be useful as TH cells have semantic meaning in the table body, allowing them
- * to act as a header for a row (you may wish to add scope='row' to the TH elements).
- * @type string
- * @default td
- * @dtopt Columns
- *
- * @example
- * // Make the first column use TH cells
- * $(document).ready( function() {
- * var oTable = $('#example').dataTable( {
- * "aoColumnDefs": [ {
- * "aTargets": [ 0 ],
- * "sCellType": "th"
- * } ]
- * } );
- * } );
- */
- "sCellType": "td",
-
-
- /**
- * Class to give to each cell in this column.
- * @type string
- * @default <i>Empty string</i>
- * @dtopt Columns
- *
- * @example
- * // Using aoColumnDefs
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumnDefs": [
- * { "sClass": "my_class", "aTargets": [ 0 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using aoColumns
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumns": [
- * { "sClass": "my_class" },
- * null,
- * null,
- * null,
- * null
- * ]
- * } );
- * } );
- */
- "sClass": "",
-
- /**
- * When DataTables calculates the column widths to assign to each column,
- * it finds the longest string in each column and then constructs a
- * temporary table and reads the widths from that. The problem with this
- * is that "mmm" is much wider then "iiii", but the latter is a longer
- * string - thus the calculation can go wrong (doing it properly and putting
- * it into an DOM object and measuring that is horribly(!) slow). Thus as
- * a "work around" we provide this option. It will append its value to the
- * text that is found to be the longest string for the column - i.e. padding.
- * Generally you shouldn't need this, and it is not documented on the
- * general DataTables.net documentation
- * @type string
- * @default <i>Empty string<i>
- * @dtopt Columns
- *
- * @example
- * // Using aoColumns
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumns": [
- * null,
- * null,
- * null,
- * {
- * "sContentPadding": "mmm"
- * }
- * ]
- * } );
- * } );
- */
- "sContentPadding": "",
-
-
- /**
- * Allows a default value to be given for a column's data, and will be used
- * whenever a null data source is encountered (this can be because mData
- * is set to null, or because the data source itself is null).
- * @type string
- * @default null
- * @dtopt Columns
- *
- * @example
- * // Using aoColumnDefs
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumnDefs": [
- * {
- * "mData": null,
- * "sDefaultContent": "Edit",
- * "aTargets": [ -1 ]
- * }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using aoColumns
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumns": [
- * null,
- * null,
- * null,
- * {
- * "mData": null,
- * "sDefaultContent": "Edit"
- * }
- * ]
- * } );
- * } );
- */
- "sDefaultContent": null,
-
-
- /**
- * This parameter is only used in DataTables' server-side processing. It can
- * be exceptionally useful to know what columns are being displayed on the
- * client side, and to map these to database fields. When defined, the names
- * also allow DataTables to reorder information from the server if it comes
- * back in an unexpected order (i.e. if you switch your columns around on the
- * client-side, your server-side code does not also need updating).
- * @type string
- * @default <i>Empty string</i>
- * @dtopt Columns
- *
- * @example
- * // Using aoColumnDefs
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumnDefs": [
- * { "sName": "engine", "aTargets": [ 0 ] },
- * { "sName": "browser", "aTargets": [ 1 ] },
- * { "sName": "platform", "aTargets": [ 2 ] },
- * { "sName": "version", "aTargets": [ 3 ] },
- * { "sName": "grade", "aTargets": [ 4 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using aoColumns
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumns": [
- * { "sName": "engine" },
- * { "sName": "browser" },
- * { "sName": "platform" },
- * { "sName": "version" },
- * { "sName": "grade" }
- * ]
- * } );
- * } );
- */
- "sName": "",
-
-
- /**
- * Defines a data source type for the sorting which can be used to read
- * real-time information from the table (updating the internally cached
- * version) prior to sorting. This allows sorting to occur on user editable
- * elements such as form inputs.
- * @type string
- * @default std
- * @dtopt Columns
- *
- * @example
- * // Using aoColumnDefs
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumnDefs": [
- * { "sSortDataType": "dom-text", "aTargets": [ 2, 3 ] },
- * { "sType": "numeric", "aTargets": [ 3 ] },
- * { "sSortDataType": "dom-select", "aTargets": [ 4 ] },
- * { "sSortDataType": "dom-checkbox", "aTargets": [ 5 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using aoColumns
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumns": [
- * null,
- * null,
- * { "sSortDataType": "dom-text" },
- * { "sSortDataType": "dom-text", "sType": "numeric" },
- * { "sSortDataType": "dom-select" },
- * { "sSortDataType": "dom-checkbox" }
- * ]
- * } );
- * } );
- */
- "sSortDataType": "std",
-
-
- /**
- * The title of this column.
- * @type string
- * @default null <i>Derived from the 'TH' value for this column in the
- * original HTML table.</i>
- * @dtopt Columns
- *
- * @example
- * // Using aoColumnDefs
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumnDefs": [
- * { "sTitle": "My column title", "aTargets": [ 0 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using aoColumns
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumns": [
- * { "sTitle": "My column title" },
- * null,
- * null,
- * null,
- * null
- * ]
- * } );
- * } );
- */
- "sTitle": null,
-
-
- /**
- * The type allows you to specify how the data for this column will be sorted.
- * Four types (string, numeric, date and html (which will strip HTML tags
- * before sorting)) are currently available. Note that only date formats
- * understood by Javascript's Date() object will be accepted as type date. For
- * example: "Mar 26, 2008 5:03 PM". May take the values: 'string', 'numeric',
- * 'date' or 'html' (by default). Further types can be adding through
- * plug-ins.
- * @type string
- * @default null <i>Auto-detected from raw data</i>
- * @dtopt Columns
- *
- * @example
- * // Using aoColumnDefs
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumnDefs": [
- * { "sType": "html", "aTargets": [ 0 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using aoColumns
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumns": [
- * { "sType": "html" },
- * null,
- * null,
- * null,
- * null
- * ]
- * } );
- * } );
- */
- "sType": null,
-
-
- /**
- * Defining the width of the column, this parameter may take any CSS value
- * (3em, 20px etc). DataTables apples 'smart' widths to columns which have not
- * been given a specific width through this interface ensuring that the table
- * remains readable.
- * @type string
- * @default null <i>Automatic</i>
- * @dtopt Columns
- *
- * @example
- * // Using aoColumnDefs
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumnDefs": [
- * { "sWidth": "20%", "aTargets": [ 0 ] }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using aoColumns
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoColumns": [
- * { "sWidth": "20%" },
- * null,
- * null,
- * null,
- * null
- * ]
- * } );
- * } );
- */
- "sWidth": null
-};
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/model/model.defaults.js b/wqflask/wqflask/static/new/packages/DataTables/src/model/model.defaults.js
deleted file mode 100644
index 16ee0d0c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/model/model.defaults.js
+++ /dev/null
@@ -1,1952 +0,0 @@
-
-
-/**
- * Initialisation options that can be given to DataTables at initialisation
- * time.
- * @namespace
- */
-DataTable.defaults = {
- /**
- * An array of data to use for the table, passed in at initialisation which
- * will be used in preference to any data which is already in the DOM. This is
- * particularly useful for constructing tables purely in Javascript, for
- * example with a custom Ajax call.
- * @type array
- * @default null
- * @dtopt Option
- *
- * @example
- * // Using a 2D array data source
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "aaData": [
- * ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],
- * ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],
- * ],
- * "aoColumns": [
- * { "sTitle": "Engine" },
- * { "sTitle": "Browser" },
- * { "sTitle": "Platform" },
- * { "sTitle": "Version" },
- * { "sTitle": "Grade" }
- * ]
- * } );
- * } );
- *
- * @example
- * // Using an array of objects as a data source (mData)
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "aaData": [
- * {
- * "engine": "Trident",
- * "browser": "Internet Explorer 4.0",
- * "platform": "Win 95+",
- * "version": 4,
- * "grade": "X"
- * },
- * {
- * "engine": "Trident",
- * "browser": "Internet Explorer 5.0",
- * "platform": "Win 95+",
- * "version": 5,
- * "grade": "C"
- * }
- * ],
- * "aoColumns": [
- * { "sTitle": "Engine", "mData": "engine" },
- * { "sTitle": "Browser", "mData": "browser" },
- * { "sTitle": "Platform", "mData": "platform" },
- * { "sTitle": "Version", "mData": "version" },
- * { "sTitle": "Grade", "mData": "grade" }
- * ]
- * } );
- * } );
- */
- "aaData": null,
-
-
- /**
- * If sorting is enabled, then DataTables will perform a first pass sort on
- * initialisation. You can define which column(s) the sort is performed upon,
- * and the sorting direction, with this variable. The aaSorting array should
- * contain an array for each column to be sorted initially containing the
- * column's index and a direction string ('asc' or 'desc').
- * @type array
- * @default [[0,'asc']]
- * @dtopt Option
- *
- * @example
- * // Sort by 3rd column first, and then 4th column
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aaSorting": [[2,'asc'], [3,'desc']]
- * } );
- * } );
- *
- * // No initial sorting
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aaSorting": []
- * } );
- * } );
- */
- "aaSorting": [[0,'asc']],
-
-
- /**
- * This parameter is basically identical to the aaSorting parameter, but
- * cannot be overridden by user interaction with the table. What this means
- * is that you could have a column (visible or hidden) which the sorting will
- * always be forced on first - any sorting after that (from the user) will
- * then be performed as required. This can be useful for grouping rows
- * together.
- * @type array
- * @default null
- * @dtopt Option
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aaSortingFixed": [[0,'asc']]
- * } );
- * } )
- */
- "aaSortingFixed": null,
-
-
- /**
- * This parameter allows you to readily specify the entries in the length drop
- * down menu that DataTables shows when pagination is enabled. It can be
- * either a 1D array of options which will be used for both the displayed
- * option and the value, or a 2D array which will use the array in the first
- * position as the value, and the array in the second position as the
- * displayed options (useful for language strings such as 'All').
- * @type array
- * @default [ 10, 25, 50, 100 ]
- * @dtopt Option
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]]
- * } );
- * } );
- *
- * @example
- * // Setting the default display length as well as length menu
- * // This is likely to be wanted if you remove the '10' option which
- * // is the iDisplayLength default.
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "iDisplayLength": 25,
- * "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]]
- * } );
- * } );
- */
- "aLengthMenu": [ 10, 25, 50, 100 ],
-
-
- /**
- * The aoColumns option in the initialisation parameter allows you to define
- * details about the way individual columns behave. For a full list of
- * column options that can be set, please see
- * {@link DataTable.defaults.columns}. Note that if you use aoColumns to
- * define your columns, you must have an entry in the array for every single
- * column that you have in your table (these can be null if you don't which
- * to specify any options).
- * @member
- */
- "aoColumns": null,
-
- /**
- * Very similar to aoColumns, aoColumnDefs allows you to target a specific
- * column, multiple columns, or all columns, using the aTargets property of
- * each object in the array. This allows great flexibility when creating
- * tables, as the aoColumnDefs arrays can be of any length, targeting the
- * columns you specifically want. aoColumnDefs may use any of the column
- * options available: {@link DataTable.defaults.columns}, but it _must_
- * have aTargets defined in each object in the array. Values in the aTargets
- * array may be:
- * <ul>
- * <li>a string - class name will be matched on the TH for the column</li>
- * <li>0 or a positive integer - column index counting from the left</li>
- * <li>a negative integer - column index counting from the right</li>
- * <li>the string "_all" - all columns (i.e. assign a default)</li>
- * </ul>
- * @member
- */
- "aoColumnDefs": null,
-
-
- /**
- * Basically the same as oSearch, this parameter defines the individual column
- * filtering state at initialisation time. The array must be of the same size
- * as the number of columns, and each element be an object with the parameters
- * "sSearch" and "bEscapeRegex" (the latter is optional). 'null' is also
- * accepted and the default will be used.
- * @type array
- * @default []
- * @dtopt Option
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "aoSearchCols": [
- * null,
- * { "sSearch": "My filter" },
- * null,
- * { "sSearch": "^[0-9]", "bEscapeRegex": false }
- * ]
- * } );
- * } )
- */
- "aoSearchCols": [],
-
-
- /**
- * An array of CSS classes that should be applied to displayed rows. This
- * array may be of any length, and DataTables will apply each class
- * sequentially, looping when required.
- * @type array
- * @default null <i>Will take the values determined by the oClasses.sStripe*
- * options</i>
- * @dtopt Option
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "asStripeClasses": [ 'strip1', 'strip2', 'strip3' ]
- * } );
- * } )
- */
- "asStripeClasses": null,
-
-
- /**
- * Enable or disable automatic column width calculation. This can be disabled
- * as an optimisation (it takes some time to calculate the widths) if the
- * tables widths are passed in using aoColumns.
- * @type boolean
- * @default true
- * @dtopt Features
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "bAutoWidth": false
- * } );
- * } );
- */
- "bAutoWidth": true,
-
-
- /**
- * Deferred rendering can provide DataTables with a huge speed boost when you
- * are using an Ajax or JS data source for the table. This option, when set to
- * true, will cause DataTables to defer the creation of the table elements for
- * each row until they are needed for a draw - saving a significant amount of
- * time.
- * @type boolean
- * @default false
- * @dtopt Features
- *
- * @example
- * $(document).ready( function() {
- * var oTable = $('#example').dataTable( {
- * "sAjaxSource": "sources/arrays.txt",
- * "bDeferRender": true
- * } );
- * } );
- */
- "bDeferRender": false,
-
-
- /**
- * Replace a DataTable which matches the given selector and replace it with
- * one which has the properties of the new initialisation object passed. If no
- * table matches the selector, then the new DataTable will be constructed as
- * per normal.
- * @type boolean
- * @default false
- * @dtopt Options
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "sScrollY": "200px",
- * "bPaginate": false
- * } );
- *
- * // Some time later....
- * $('#example').dataTable( {
- * "bFilter": false,
- * "bDestroy": true
- * } );
- * } );
- */
- "bDestroy": false,
-
-
- /**
- * Enable or disable filtering of data. Filtering in DataTables is "smart" in
- * that it allows the end user to input multiple words (space separated) and
- * will match a row containing those words, even if not in the order that was
- * specified (this allow matching across multiple columns). Note that if you
- * wish to use filtering in DataTables this must remain 'true' - to remove the
- * default filtering input box and retain filtering abilities, please use
- * {@link DataTable.defaults.sDom}.
- * @type boolean
- * @default true
- * @dtopt Features
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "bFilter": false
- * } );
- * } );
- */
- "bFilter": true,
-
-
- /**
- * Enable or disable the table information display. This shows information
- * about the data that is currently visible on the page, including information
- * about filtered data if that action is being performed.
- * @type boolean
- * @default true
- * @dtopt Features
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "bInfo": false
- * } );
- * } );
- */
- "bInfo": true,
-
-
- /**
- * Enable jQuery UI ThemeRoller support (required as ThemeRoller requires some
- * slightly different and additional mark-up from what DataTables has
- * traditionally used).
- * @type boolean
- * @default false
- * @dtopt Features
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "bJQueryUI": true
- * } );
- * } );
- */
- "bJQueryUI": false,
-
-
- /**
- * Allows the end user to select the size of a formatted page from a select
- * menu (sizes are 10, 25, 50 and 100). Requires pagination (bPaginate).
- * @type boolean
- * @default true
- * @dtopt Features
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "bLengthChange": false
- * } );
- * } );
- */
- "bLengthChange": true,
-
-
- /**
- * Enable or disable pagination.
- * @type boolean
- * @default true
- * @dtopt Features
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "bPaginate": false
- * } );
- * } );
- */
- "bPaginate": true,
-
-
- /**
- * Enable or disable the display of a 'processing' indicator when the table is
- * being processed (e.g. a sort). This is particularly useful for tables with
- * large amounts of data where it can take a noticeable amount of time to sort
- * the entries.
- * @type boolean
- * @default false
- * @dtopt Features
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "bProcessing": true
- * } );
- * } );
- */
- "bProcessing": false,
-
-
- /**
- * Retrieve the DataTables object for the given selector. Note that if the
- * table has already been initialised, this parameter will cause DataTables
- * to simply return the object that has already been set up - it will not take
- * account of any changes you might have made to the initialisation object
- * passed to DataTables (setting this parameter to true is an acknowledgement
- * that you understand this). bDestroy can be used to reinitialise a table if
- * you need.
- * @type boolean
- * @default false
- * @dtopt Options
- *
- * @example
- * $(document).ready( function() {
- * initTable();
- * tableActions();
- * } );
- *
- * function initTable ()
- * {
- * return $('#example').dataTable( {
- * "sScrollY": "200px",
- * "bPaginate": false,
- * "bRetrieve": true
- * } );
- * }
- *
- * function tableActions ()
- * {
- * var oTable = initTable();
- * // perform API operations with oTable
- * }
- */
- "bRetrieve": false,
-
-
- /**
- * Indicate if DataTables should be allowed to set the padding / margin
- * etc for the scrolling header elements or not. Typically you will want
- * this.
- * @type boolean
- * @default true
- * @dtopt Options
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "bScrollAutoCss": false,
- * "sScrollY": "200px"
- * } );
- * } );
- */
- "bScrollAutoCss": true,
-
-
- /**
- * When vertical (y) scrolling is enabled, DataTables will force the height of
- * the table's viewport to the given height at all times (useful for layout).
- * However, this can look odd when filtering data down to a small data set,
- * and the footer is left "floating" further down. This parameter (when
- * enabled) will cause DataTables to collapse the table's viewport down when
- * the result set will fit within the given Y height.
- * @type boolean
- * @default false
- * @dtopt Options
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "sScrollY": "200",
- * "bScrollCollapse": true
- * } );
- * } );
- */
- "bScrollCollapse": false,
-
-
- /**
- * Enable infinite scrolling for DataTables (to be used in combination with
- * sScrollY). Infinite scrolling means that DataTables will continually load
- * data as a user scrolls through a table, which is very useful for large
- * dataset. This cannot be used with pagination, which is automatically
- * disabled. Note - the Scroller extra for DataTables is recommended in
- * in preference to this option.
- * @type boolean
- * @default false
- * @dtopt Features
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "bScrollInfinite": true,
- * "bScrollCollapse": true,
- * "sScrollY": "200px"
- * } );
- * } );
- */
- "bScrollInfinite": false,
-
-
- /**
- * Configure DataTables to use server-side processing. Note that the
- * sAjaxSource parameter must also be given in order to give DataTables a
- * source to obtain the required data for each draw.
- * @type boolean
- * @default false
- * @dtopt Features
- * @dtopt Server-side
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "bServerSide": true,
- * "sAjaxSource": "xhr.php"
- * } );
- * } );
- */
- "bServerSide": false,
-
-
- /**
- * Enable or disable sorting of columns. Sorting of individual columns can be
- * disabled by the "bSortable" option for each column.
- * @type boolean
- * @default true
- * @dtopt Features
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "bSort": false
- * } );
- * } );
- */
- "bSort": true,
-
-
- /**
- * Allows control over whether DataTables should use the top (true) unique
- * cell that is found for a single column, or the bottom (false - default).
- * This is useful when using complex headers.
- * @type boolean
- * @default false
- * @dtopt Options
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "bSortCellsTop": true
- * } );
- * } );
- */
- "bSortCellsTop": false,
-
-
- /**
- * Enable or disable the addition of the classes 'sorting_1', 'sorting_2' and
- * 'sorting_3' to the columns which are currently being sorted on. This is
- * presented as a feature switch as it can increase processing time (while
- * classes are removed and added) so for large data sets you might want to
- * turn this off.
- * @type boolean
- * @default true
- * @dtopt Features
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "bSortClasses": false
- * } );
- * } );
- */
- "bSortClasses": true,
-
-
- /**
- * Enable or disable state saving. When enabled a cookie will be used to save
- * table display information such as pagination information, display length,
- * filtering and sorting. As such when the end user reloads the page the
- * display display will match what thy had previously set up.
- * @type boolean
- * @default false
- * @dtopt Features
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "bStateSave": true
- * } );
- * } );
- */
- "bStateSave": false,
-
-
- /**
- * Customise the cookie and / or the parameters being stored when using
- * DataTables with state saving enabled. This function is called whenever
- * the cookie is modified, and it expects a fully formed cookie string to be
- * returned. Note that the data object passed in is a Javascript object which
- * must be converted to a string (JSON.stringify for example).
- * @type function
- * @param {string} sName Name of the cookie defined by DataTables
- * @param {object} oData Data to be stored in the cookie
- * @param {string} sExpires Cookie expires string
- * @param {string} sPath Path of the cookie to set
- * @returns {string} Cookie formatted string (which should be encoded by
- * using encodeURIComponent())
- * @dtopt Callbacks
- *
- * @example
- * $(document).ready( function () {
- * $('#example').dataTable( {
- * "fnCookieCallback": function (sName, oData, sExpires, sPath) {
- * // Customise oData or sName or whatever else here
- * return sName + "="+JSON.stringify(oData)+"; expires=" + sExpires +"; path=" + sPath;
- * }
- * } );
- * } );
- */
- "fnCookieCallback": null,
-
-
- /**
- * This function is called when a TR element is created (and all TD child
- * elements have been inserted), or registered if using a DOM source, allowing
- * manipulation of the TR element (adding classes etc).
- * @type function
- * @param {node} nRow "TR" element for the current row
- * @param {array} aData Raw data array for this row
- * @param {int} iDataIndex The index of this row in aoData
- * @dtopt Callbacks
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "fnCreatedRow": function( nRow, aData, iDataIndex ) {
- * // Bold the grade for all 'A' grade browsers
- * if ( aData[4] == "A" )
- * {
- * $('td:eq(4)', nRow).html( '<b>A</b>' );
- * }
- * }
- * } );
- * } );
- */
- "fnCreatedRow": null,
-
-
- /**
- * This function is called on every 'draw' event, and allows you to
- * dynamically modify any aspect you want about the created DOM.
- * @type function
- * @param {object} oSettings DataTables settings object
- * @dtopt Callbacks
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "fnDrawCallback": function( oSettings ) {
- * alert( 'DataTables has redrawn the table' );
- * }
- * } );
- * } );
- */
- "fnDrawCallback": null,
-
-
- /**
- * Identical to fnHeaderCallback() but for the table footer this function
- * allows you to modify the table footer on every 'draw' even.
- * @type function
- * @param {node} nFoot "TR" element for the footer
- * @param {array} aData Full table data (as derived from the original HTML)
- * @param {int} iStart Index for the current display starting point in the
- * display array
- * @param {int} iEnd Index for the current display ending point in the
- * display array
- * @param {array int} aiDisplay Index array to translate the visual position
- * to the full data array
- * @dtopt Callbacks
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "fnFooterCallback": function( nFoot, aData, iStart, iEnd, aiDisplay ) {
- * nFoot.getElementsByTagName('th')[0].innerHTML = "Starting index is "+iStart;
- * }
- * } );
- * } )
- */
- "fnFooterCallback": null,
-
-
- /**
- * When rendering large numbers in the information element for the table
- * (i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers
- * to have a comma separator for the 'thousands' units (e.g. 1 million is
- * rendered as "1,000,000") to help readability for the end user. This
- * function will override the default method DataTables uses.
- * @type function
- * @member
- * @param {int} iIn number to be formatted
- * @returns {string} formatted string for DataTables to show the number
- * @dtopt Callbacks
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "fnFormatNumber": function ( iIn ) {
- * if ( iIn &lt; 1000 ) {
- * return iIn;
- * } else {
- * var
- * s=(iIn+""),
- * a=s.split(""), out="",
- * iLen=s.length;
- *
- * for ( var i=0 ; i&lt;iLen ; i++ ) {
- * if ( i%3 === 0 &amp;&amp; i !== 0 ) {
- * out = "'"+out;
- * }
- * out = a[iLen-i-1]+out;
- * }
- * }
- * return out;
- * };
- * } );
- * } );
- */
- "fnFormatNumber": function ( iIn ) {
- if ( iIn < 1000 )
- {
- // A small optimisation for what is likely to be the majority of use cases
- return iIn;
- }
-
- var s=(iIn+""), a=s.split(""), out="", iLen=s.length;
-
- for ( var i=0 ; i<iLen ; i++ )
- {
- if ( i%3 === 0 && i !== 0 )
- {
- out = this.oLanguage.sInfoThousands+out;
- }
- out = a[iLen-i-1]+out;
- }
- return out;
- },
-
-
- /**
- * This function is called on every 'draw' event, and allows you to
- * dynamically modify the header row. This can be used to calculate and
- * display useful information about the table.
- * @type function
- * @param {node} nHead "TR" element for the header
- * @param {array} aData Full table data (as derived from the original HTML)
- * @param {int} iStart Index for the current display starting point in the
- * display array
- * @param {int} iEnd Index for the current display ending point in the
- * display array
- * @param {array int} aiDisplay Index array to translate the visual position
- * to the full data array
- * @dtopt Callbacks
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "fnHeaderCallback": function( nHead, aData, iStart, iEnd, aiDisplay ) {
- * nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records";
- * }
- * } );
- * } )
- */
- "fnHeaderCallback": null,
-
-
- /**
- * The information element can be used to convey information about the current
- * state of the table. Although the internationalisation options presented by
- * DataTables are quite capable of dealing with most customisations, there may
- * be times where you wish to customise the string further. This callback
- * allows you to do exactly that.
- * @type function
- * @param {object} oSettings DataTables settings object
- * @param {int} iStart Starting position in data for the draw
- * @param {int} iEnd End position in data for the draw
- * @param {int} iMax Total number of rows in the table (regardless of
- * filtering)
- * @param {int} iTotal Total number of rows in the data set, after filtering
- * @param {string} sPre The string that DataTables has formatted using it's
- * own rules
- * @returns {string} The string to be displayed in the information element.
- * @dtopt Callbacks
- *
- * @example
- * $('#example').dataTable( {
- * "fnInfoCallback": function( oSettings, iStart, iEnd, iMax, iTotal, sPre ) {
- * return iStart +" to "+ iEnd;
- * }
- * } );
- */
- "fnInfoCallback": null,
-
-
- /**
- * Called when the table has been initialised. Normally DataTables will
- * initialise sequentially and there will be no need for this function,
- * however, this does not hold true when using external language information
- * since that is obtained using an async XHR call.
- * @type function
- * @param {object} oSettings DataTables settings object
- * @param {object} json The JSON object request from the server - only
- * present if client-side Ajax sourced data is used
- * @dtopt Callbacks
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "fnInitComplete": function(oSettings, json) {
- * alert( 'DataTables has finished its initialisation.' );
- * }
- * } );
- * } )
- */
- "fnInitComplete": null,
-
-
- /**
- * Called at the very start of each table draw and can be used to cancel the
- * draw by returning false, any other return (including undefined) results in
- * the full draw occurring).
- * @type function
- * @param {object} oSettings DataTables settings object
- * @returns {boolean} False will cancel the draw, anything else (including no
- * return) will allow it to complete.
- * @dtopt Callbacks
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "fnPreDrawCallback": function( oSettings ) {
- * if ( $('#test').val() == 1 ) {
- * return false;
- * }
- * }
- * } );
- * } );
- */
- "fnPreDrawCallback": null,
-
-
- /**
- * This function allows you to 'post process' each row after it have been
- * generated for each table draw, but before it is rendered on screen. This
- * function might be used for setting the row class name etc.
- * @type function
- * @param {node} nRow "TR" element for the current row
- * @param {array} aData Raw data array for this row
- * @param {int} iDisplayIndex The display index for the current table draw
- * @param {int} iDisplayIndexFull The index of the data in the full list of
- * rows (after filtering)
- * @dtopt Callbacks
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
- * // Bold the grade for all 'A' grade browsers
- * if ( aData[4] == "A" )
- * {
- * $('td:eq(4)', nRow).html( '<b>A</b>' );
- * }
- * }
- * } );
- * } );
- */
- "fnRowCallback": null,
-
-
- /**
- * This parameter allows you to override the default function which obtains
- * the data from the server ($.getJSON) so something more suitable for your
- * application. For example you could use POST data, or pull information from
- * a Gears or AIR database.
- * @type function
- * @member
- * @param {string} sSource HTTP source to obtain the data from (sAjaxSource)
- * @param {array} aoData A key/value pair object containing the data to send
- * to the server
- * @param {function} fnCallback to be called on completion of the data get
- * process that will draw the data on the page.
- * @param {object} oSettings DataTables settings object
- * @dtopt Callbacks
- * @dtopt Server-side
- *
- * @example
- * // POST data to server
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "bProcessing": true,
- * "bServerSide": true,
- * "sAjaxSource": "xhr.php",
- * "fnServerData": function ( sSource, aoData, fnCallback, oSettings ) {
- * oSettings.jqXHR = $.ajax( {
- * "dataType": 'json',
- * "type": "POST",
- * "url": sSource,
- * "data": aoData,
- * "success": fnCallback
- * } );
- * }
- * } );
- * } );
- */
- "fnServerData": function ( sUrl, aoData, fnCallback, oSettings ) {
- oSettings.jqXHR = $.ajax( {
- "url": sUrl,
- "data": aoData,
- "success": function (json) {
- if ( json.sError ) {
- oSettings.oApi._fnLog( oSettings, 0, json.sError );
- }
-
- $(oSettings.oInstance).trigger('xhr', [oSettings, json]);
- fnCallback( json );
- },
- "dataType": "json",
- "cache": false,
- "type": oSettings.sServerMethod,
- "error": function (xhr, error, thrown) {
- if ( error == "parsererror" ) {
- oSettings.oApi._fnLog( oSettings, 0, "DataTables warning: JSON data from "+
- "server could not be parsed. This is caused by a JSON formatting error." );
- }
- }
- } );
- },
-
-
- /**
- * It is often useful to send extra data to the server when making an Ajax
- * request - for example custom filtering information, and this callback
- * function makes it trivial to send extra information to the server. The
- * passed in parameter is the data set that has been constructed by
- * DataTables, and you can add to this or modify it as you require.
- * @type function
- * @param {array} aoData Data array (array of objects which are name/value
- * pairs) that has been constructed by DataTables and will be sent to the
- * server. In the case of Ajax sourced data with server-side processing
- * this will be an empty array, for server-side processing there will be a
- * significant number of parameters!
- * @returns {undefined} Ensure that you modify the aoData array passed in,
- * as this is passed by reference.
- * @dtopt Callbacks
- * @dtopt Server-side
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "bProcessing": true,
- * "bServerSide": true,
- * "sAjaxSource": "scripts/server_processing.php",
- * "fnServerParams": function ( aoData ) {
- * aoData.push( { "name": "more_data", "value": "my_value" } );
- * }
- * } );
- * } );
- */
- "fnServerParams": null,
-
-
- /**
- * Load the table state. With this function you can define from where, and how, the
- * state of a table is loaded. By default DataTables will load from its state saving
- * cookie, but you might wish to use local storage (HTML5) or a server-side database.
- * @type function
- * @member
- * @param {object} oSettings DataTables settings object
- * @return {object} The DataTables state object to be loaded
- * @dtopt Callbacks
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "bStateSave": true,
- * "fnStateLoad": function (oSettings) {
- * var o;
- *
- * // Send an Ajax request to the server to get the data. Note that
- * // this is a synchronous request.
- * $.ajax( {
- * "url": "/state_load",
- * "async": false,
- * "dataType": "json",
- * "success": function (json) {
- * o = json;
- * }
- * } );
- *
- * return o;
- * }
- * } );
- * } );
- */
- "fnStateLoad": function ( oSettings ) {
- var sData = this.oApi._fnReadCookie( oSettings.sCookiePrefix+oSettings.sInstance );
- var oData;
-
- try {
- oData = (typeof $.parseJSON === 'function') ?
- $.parseJSON(sData) : eval( '('+sData+')' );
- } catch (e) {
- oData = null;
- }
-
- return oData;
- },
-
-
- /**
- * Callback which allows modification of the saved state prior to loading that state.
- * This callback is called when the table is loading state from the stored data, but
- * prior to the settings object being modified by the saved state. Note that for
- * plug-in authors, you should use the 'stateLoadParams' event to load parameters for
- * a plug-in.
- * @type function
- * @param {object} oSettings DataTables settings object
- * @param {object} oData The state object that is to be loaded
- * @dtopt Callbacks
- *
- * @example
- * // Remove a saved filter, so filtering is never loaded
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "bStateSave": true,
- * "fnStateLoadParams": function (oSettings, oData) {
- * oData.oSearch.sSearch = "";
- * }
- * } );
- * } );
- *
- * @example
- * // Disallow state loading by returning false
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "bStateSave": true,
- * "fnStateLoadParams": function (oSettings, oData) {
- * return false;
- * }
- * } );
- * } );
- */
- "fnStateLoadParams": null,
-
-
- /**
- * Callback that is called when the state has been loaded from the state saving method
- * and the DataTables settings object has been modified as a result of the loaded state.
- * @type function
- * @param {object} oSettings DataTables settings object
- * @param {object} oData The state object that was loaded
- * @dtopt Callbacks
- *
- * @example
- * // Show an alert with the filtering value that was saved
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "bStateSave": true,
- * "fnStateLoaded": function (oSettings, oData) {
- * alert( 'Saved filter was: '+oData.oSearch.sSearch );
- * }
- * } );
- * } );
- */
- "fnStateLoaded": null,
-
-
- /**
- * Save the table state. This function allows you to define where and how the state
- * information for the table is stored - by default it will use a cookie, but you
- * might want to use local storage (HTML5) or a server-side database.
- * @type function
- * @member
- * @param {object} oSettings DataTables settings object
- * @param {object} oData The state object to be saved
- * @dtopt Callbacks
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "bStateSave": true,
- * "fnStateSave": function (oSettings, oData) {
- * // Send an Ajax request to the server with the state object
- * $.ajax( {
- * "url": "/state_save",
- * "data": oData,
- * "dataType": "json",
- * "method": "POST"
- * "success": function () {}
- * } );
- * }
- * } );
- * } );
- */
- "fnStateSave": function ( oSettings, oData ) {
- this.oApi._fnCreateCookie(
- oSettings.sCookiePrefix+oSettings.sInstance,
- this.oApi._fnJsonString(oData),
- oSettings.iCookieDuration,
- oSettings.sCookiePrefix,
- oSettings.fnCookieCallback
- );
- },
-
-
- /**
- * Callback which allows modification of the state to be saved. Called when the table
- * has changed state a new state save is required. This method allows modification of
- * the state saving object prior to actually doing the save, including addition or
- * other state properties or modification. Note that for plug-in authors, you should
- * use the 'stateSaveParams' event to save parameters for a plug-in.
- * @type function
- * @param {object} oSettings DataTables settings object
- * @param {object} oData The state object to be saved
- * @dtopt Callbacks
- *
- * @example
- * // Remove a saved filter, so filtering is never saved
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "bStateSave": true,
- * "fnStateSaveParams": function (oSettings, oData) {
- * oData.oSearch.sSearch = "";
- * }
- * } );
- * } );
- */
- "fnStateSaveParams": null,
-
-
- /**
- * Duration of the cookie which is used for storing session information. This
- * value is given in seconds.
- * @type int
- * @default 7200 <i>(2 hours)</i>
- * @dtopt Options
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "iCookieDuration": 60*60*24; // 1 day
- * } );
- * } )
- */
- "iCookieDuration": 7200,
-
-
- /**
- * When enabled DataTables will not make a request to the server for the first
- * page draw - rather it will use the data already on the page (no sorting etc
- * will be applied to it), thus saving on an XHR at load time. iDeferLoading
- * is used to indicate that deferred loading is required, but it is also used
- * to tell DataTables how many records there are in the full table (allowing
- * the information element and pagination to be displayed correctly). In the case
- * where a filtering is applied to the table on initial load, this can be
- * indicated by giving the parameter as an array, where the first element is
- * the number of records available after filtering and the second element is the
- * number of records without filtering (allowing the table information element
- * to be shown correctly).
- * @type int | array
- * @default null
- * @dtopt Options
- *
- * @example
- * // 57 records available in the table, no filtering applied
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "bServerSide": true,
- * "sAjaxSource": "scripts/server_processing.php",
- * "iDeferLoading": 57
- * } );
- * } );
- *
- * @example
- * // 57 records after filtering, 100 without filtering (an initial filter applied)
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "bServerSide": true,
- * "sAjaxSource": "scripts/server_processing.php",
- * "iDeferLoading": [ 57, 100 ],
- * "oSearch": {
- * "sSearch": "my_filter"
- * }
- * } );
- * } );
- */
- "iDeferLoading": null,
-
-
- /**
- * Number of rows to display on a single page when using pagination. If
- * feature enabled (bLengthChange) then the end user will be able to override
- * this to a custom setting using a pop-up menu.
- * @type int
- * @default 10
- * @dtopt Options
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "iDisplayLength": 50
- * } );
- * } )
- */
- "iDisplayLength": 10,
-
-
- /**
- * Define the starting point for data display when using DataTables with
- * pagination. Note that this parameter is the number of records, rather than
- * the page number, so if you have 10 records per page and want to start on
- * the third page, it should be "20".
- * @type int
- * @default 0
- * @dtopt Options
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "iDisplayStart": 20
- * } );
- * } )
- */
- "iDisplayStart": 0,
-
-
- /**
- * The scroll gap is the amount of scrolling that is left to go before
- * DataTables will load the next 'page' of data automatically. You typically
- * want a gap which is big enough that the scrolling will be smooth for the
- * user, while not so large that it will load more data than need.
- * @type int
- * @default 100
- * @dtopt Options
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "bScrollInfinite": true,
- * "bScrollCollapse": true,
- * "sScrollY": "200px",
- * "iScrollLoadGap": 50
- * } );
- * } );
- */
- "iScrollLoadGap": 100,
-
-
- /**
- * By default DataTables allows keyboard navigation of the table (sorting, paging,
- * and filtering) by adding a tabindex attribute to the required elements. This
- * allows you to tab through the controls and press the enter key to activate them.
- * The tabindex is default 0, meaning that the tab follows the flow of the document.
- * You can overrule this using this parameter if you wish. Use a value of -1 to
- * disable built-in keyboard navigation.
- * @type int
- * @default 0
- * @dtopt Options
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "iTabIndex": 1
- * } );
- * } );
- */
- "iTabIndex": 0,
-
-
- /**
- * All strings that DataTables uses in the user interface that it creates
- * are defined in this object, allowing you to modified them individually or
- * completely replace them all as required.
- * @namespace
- */
- "oLanguage": {
- /**
- * Strings that are used for WAI-ARIA labels and controls only (these are not
- * actually visible on the page, but will be read by screenreaders, and thus
- * must be internationalised as well).
- * @namespace
- */
- "oAria": {
- /**
- * ARIA label that is added to the table headers when the column may be
- * sorted ascending by activing the column (click or return when focused).
- * Note that the column header is prefixed to this string.
- * @type string
- * @default : activate to sort column ascending
- * @dtopt Language
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "oAria": {
- * "sSortAscending": " - click/return to sort ascending"
- * }
- * }
- * } );
- * } );
- */
- "sSortAscending": ": activate to sort column ascending",
-
- /**
- * ARIA label that is added to the table headers when the column may be
- * sorted descending by activing the column (click or return when focused).
- * Note that the column header is prefixed to this string.
- * @type string
- * @default : activate to sort column ascending
- * @dtopt Language
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "oAria": {
- * "sSortDescending": " - click/return to sort descending"
- * }
- * }
- * } );
- * } );
- */
- "sSortDescending": ": activate to sort column descending"
- },
-
- /**
- * Pagination string used by DataTables for the two built-in pagination
- * control types ("two_button" and "full_numbers")
- * @namespace
- */
- "oPaginate": {
- /**
- * Text to use when using the 'full_numbers' type of pagination for the
- * button to take the user to the first page.
- * @type string
- * @default First
- * @dtopt Language
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "oPaginate": {
- * "sFirst": "First page"
- * }
- * }
- * } );
- * } );
- */
- "sFirst": "First",
-
-
- /**
- * Text to use when using the 'full_numbers' type of pagination for the
- * button to take the user to the last page.
- * @type string
- * @default Last
- * @dtopt Language
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "oPaginate": {
- * "sLast": "Last page"
- * }
- * }
- * } );
- * } );
- */
- "sLast": "Last",
-
-
- /**
- * Text to use for the 'next' pagination button (to take the user to the
- * next page).
- * @type string
- * @default Next
- * @dtopt Language
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "oPaginate": {
- * "sNext": "Next page"
- * }
- * }
- * } );
- * } );
- */
- "sNext": "Next",
-
-
- /**
- * Text to use for the 'previous' pagination button (to take the user to
- * the previous page).
- * @type string
- * @default Previous
- * @dtopt Language
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "oPaginate": {
- * "sPrevious": "Previous page"
- * }
- * }
- * } );
- * } );
- */
- "sPrevious": "Previous"
- },
-
- /**
- * This string is shown in preference to sZeroRecords when the table is
- * empty of data (regardless of filtering). Note that this is an optional
- * parameter - if it is not given, the value of sZeroRecords will be used
- * instead (either the default or given value).
- * @type string
- * @default No data available in table
- * @dtopt Language
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "sEmptyTable": "No data available in table"
- * }
- * } );
- * } );
- */
- "sEmptyTable": "No data available in table",
-
-
- /**
- * This string gives information to the end user about the information that
- * is current on display on the page. The _START_, _END_ and _TOTAL_
- * variables are all dynamically replaced as the table display updates, and
- * can be freely moved or removed as the language requirements change.
- * @type string
- * @default Showing _START_ to _END_ of _TOTAL_ entries
- * @dtopt Language
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "sInfo": "Got a total of _TOTAL_ entries to show (_START_ to _END_)"
- * }
- * } );
- * } );
- */
- "sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",
-
-
- /**
- * Display information string for when the table is empty. Typically the
- * format of this string should match sInfo.
- * @type string
- * @default Showing 0 to 0 of 0 entries
- * @dtopt Language
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "sInfoEmpty": "No entries to show"
- * }
- * } );
- * } );
- */
- "sInfoEmpty": "Showing 0 to 0 of 0 entries",
-
-
- /**
- * When a user filters the information in a table, this string is appended
- * to the information (sInfo) to give an idea of how strong the filtering
- * is. The variable _MAX_ is dynamically updated.
- * @type string
- * @default (filtered from _MAX_ total entries)
- * @dtopt Language
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "sInfoFiltered": " - filtering from _MAX_ records"
- * }
- * } );
- * } );
- */
- "sInfoFiltered": "(filtered from _MAX_ total entries)",
-
-
- /**
- * If can be useful to append extra information to the info string at times,
- * and this variable does exactly that. This information will be appended to
- * the sInfo (sInfoEmpty and sInfoFiltered in whatever combination they are
- * being used) at all times.
- * @type string
- * @default <i>Empty string</i>
- * @dtopt Language
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "sInfoPostFix": "All records shown are derived from real information."
- * }
- * } );
- * } );
- */
- "sInfoPostFix": "",
-
-
- /**
- * DataTables has a build in number formatter (fnFormatNumber) which is used
- * to format large numbers that are used in the table information. By
- * default a comma is used, but this can be trivially changed to any
- * character you wish with this parameter.
- * @type string
- * @default ,
- * @dtopt Language
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "sInfoThousands": "'"
- * }
- * } );
- * } );
- */
- "sInfoThousands": ",",
-
-
- /**
- * Detail the action that will be taken when the drop down menu for the
- * pagination length option is changed. The '_MENU_' variable is replaced
- * with a default select list of 10, 25, 50 and 100, and can be replaced
- * with a custom select box if required.
- * @type string
- * @default Show _MENU_ entries
- * @dtopt Language
- *
- * @example
- * // Language change only
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "sLengthMenu": "Display _MENU_ records"
- * }
- * } );
- * } );
- *
- * @example
- * // Language and options change
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "sLengthMenu": 'Display <select>'+
- * '<option value="10">10</option>'+
- * '<option value="20">20</option>'+
- * '<option value="30">30</option>'+
- * '<option value="40">40</option>'+
- * '<option value="50">50</option>'+
- * '<option value="-1">All</option>'+
- * '</select> records'
- * }
- * } );
- * } );
- */
- "sLengthMenu": "Show _MENU_ entries",
-
-
- /**
- * When using Ajax sourced data and during the first draw when DataTables is
- * gathering the data, this message is shown in an empty row in the table to
- * indicate to the end user the the data is being loaded. Note that this
- * parameter is not used when loading data by server-side processing, just
- * Ajax sourced data with client-side processing.
- * @type string
- * @default Loading...
- * @dtopt Language
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "sLoadingRecords": "Please wait - loading..."
- * }
- * } );
- * } );
- */
- "sLoadingRecords": "Loading...",
-
-
- /**
- * Text which is displayed when the table is processing a user action
- * (usually a sort command or similar).
- * @type string
- * @default Processing...
- * @dtopt Language
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "sProcessing": "DataTables is currently busy"
- * }
- * } );
- * } );
- */
- "sProcessing": "Processing...",
-
-
- /**
- * Details the actions that will be taken when the user types into the
- * filtering input text box. The variable "_INPUT_", if used in the string,
- * is replaced with the HTML text box for the filtering input allowing
- * control over where it appears in the string. If "_INPUT_" is not given
- * then the input box is appended to the string automatically.
- * @type string
- * @default Search:
- * @dtopt Language
- *
- * @example
- * // Input text box will be appended at the end automatically
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "sSearch": "Filter records:"
- * }
- * } );
- * } );
- *
- * @example
- * // Specify where the filter should appear
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "sSearch": "Apply filter _INPUT_ to table"
- * }
- * } );
- * } );
- */
- "sSearch": "Search:",
-
-
- /**
- * All of the language information can be stored in a file on the
- * server-side, which DataTables will look up if this parameter is passed.
- * It must store the URL of the language file, which is in a JSON format,
- * and the object has the same properties as the oLanguage object in the
- * initialiser object (i.e. the above parameters). Please refer to one of
- * the example language files to see how this works in action.
- * @type string
- * @default <i>Empty string - i.e. disabled</i>
- * @dtopt Language
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "sUrl": "http://www.sprymedia.co.uk/dataTables/lang.txt"
- * }
- * } );
- * } );
- */
- "sUrl": "",
-
-
- /**
- * Text shown inside the table records when the is no information to be
- * displayed after filtering. sEmptyTable is shown when there is simply no
- * information in the table at all (regardless of filtering).
- * @type string
- * @default No matching records found
- * @dtopt Language
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oLanguage": {
- * "sZeroRecords": "No records to display"
- * }
- * } );
- * } );
- */
- "sZeroRecords": "No matching records found"
- },
-
-
- /**
- * This parameter allows you to have define the global filtering state at
- * initialisation time. As an object the "sSearch" parameter must be
- * defined, but all other parameters are optional. When "bRegex" is true,
- * the search string will be treated as a regular expression, when false
- * (default) it will be treated as a straight string. When "bSmart"
- * DataTables will use it's smart filtering methods (to word match at
- * any point in the data), when false this will not be done.
- * @namespace
- * @extends DataTable.models.oSearch
- * @dtopt Options
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "oSearch": {"sSearch": "Initial search"}
- * } );
- * } )
- */
- "oSearch": $.extend( {}, DataTable.models.oSearch ),
-
-
- /**
- * By default DataTables will look for the property 'aaData' when obtaining
- * data from an Ajax source or for server-side processing - this parameter
- * allows that property to be changed. You can use Javascript dotted object
- * notation to get a data source for multiple levels of nesting.
- * @type string
- * @default aaData
- * @dtopt Options
- * @dtopt Server-side
- *
- * @example
- * // Get data from { "data": [...] }
- * $(document).ready( function() {
- * var oTable = $('#example').dataTable( {
- * "sAjaxSource": "sources/data.txt",
- * "sAjaxDataProp": "data"
- * } );
- * } );
- *
- * @example
- * // Get data from { "data": { "inner": [...] } }
- * $(document).ready( function() {
- * var oTable = $('#example').dataTable( {
- * "sAjaxSource": "sources/data.txt",
- * "sAjaxDataProp": "data.inner"
- * } );
- * } );
- */
- "sAjaxDataProp": "aaData",
-
-
- /**
- * You can instruct DataTables to load data from an external source using this
- * parameter (use aData if you want to pass data in you already have). Simply
- * provide a url a JSON object can be obtained from. This object must include
- * the parameter 'aaData' which is the data source for the table.
- * @type string
- * @default null
- * @dtopt Options
- * @dtopt Server-side
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "sAjaxSource": "http://www.sprymedia.co.uk/dataTables/json.php"
- * } );
- * } )
- */
- "sAjaxSource": null,
-
-
- /**
- * This parameter can be used to override the default prefix that DataTables
- * assigns to a cookie when state saving is enabled.
- * @type string
- * @default SpryMedia_DataTables_
- * @dtopt Options
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "sCookiePrefix": "my_datatable_",
- * } );
- * } );
- */
- "sCookiePrefix": "SpryMedia_DataTables_",
-
-
- /**
- * This initialisation variable allows you to specify exactly where in the
- * DOM you want DataTables to inject the various controls it adds to the page
- * (for example you might want the pagination controls at the top of the
- * table). DIV elements (with or without a custom class) can also be added to
- * aid styling. The follow syntax is used:
- * <ul>
- * <li>The following options are allowed:
- * <ul>
- * <li>'l' - Length changing</li
- * <li>'f' - Filtering input</li>
- * <li>'t' - The table!</li>
- * <li>'i' - Information</li>
- * <li>'p' - Pagination</li>
- * <li>'r' - pRocessing</li>
- * </ul>
- * </li>
- * <li>The following constants are allowed:
- * <ul>
- * <li>'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>
- * <li>'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>
- * </ul>
- * </li>
- * <li>The following syntax is expected:
- * <ul>
- * <li>'&lt;' and '&gt;' - div elements</li>
- * <li>'&lt;"class" and '&gt;' - div with a class</li>
- * <li>'&lt;"#id" and '&gt;' - div with an ID</li>
- * </ul>
- * </li>
- * <li>Examples:
- * <ul>
- * <li>'&lt;"wrapper"flipt&gt;'</li>
- * <li>'&lt;lf&lt;t&gt;ip&gt;'</li>
- * </ul>
- * </li>
- * </ul>
- * @type string
- * @default lfrtip <i>(when bJQueryUI is false)</i> <b>or</b>
- * <"H"lfr>t<"F"ip> <i>(when bJQueryUI is true)</i>
- * @dtopt Options
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "sDom": '&lt;"top"i&gt;rt&lt;"bottom"flp&gt;&lt;"clear"&gt;'
- * } );
- * } );
- */
- "sDom": "lfrtip",
-
-
- /**
- * DataTables features two different built-in pagination interaction methods
- * ('two_button' or 'full_numbers') which present different page controls to
- * the end user. Further methods can be added using the API (see below).
- * @type string
- * @default two_button
- * @dtopt Options
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "sPaginationType": "full_numbers"
- * } );
- * } )
- */
- "sPaginationType": "two_button",
-
-
- /**
- * Enable horizontal scrolling. When a table is too wide to fit into a certain
- * layout, or you have a large number of columns in the table, you can enable
- * x-scrolling to show the table in a viewport, which can be scrolled. This
- * property can be any CSS unit, or a number (in which case it will be treated
- * as a pixel measurement).
- * @type string
- * @default <i>blank string - i.e. disabled</i>
- * @dtopt Features
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "sScrollX": "100%",
- * "bScrollCollapse": true
- * } );
- * } );
- */
- "sScrollX": "",
-
-
- /**
- * This property can be used to force a DataTable to use more width than it
- * might otherwise do when x-scrolling is enabled. For example if you have a
- * table which requires to be well spaced, this parameter is useful for
- * "over-sizing" the table, and thus forcing scrolling. This property can by
- * any CSS unit, or a number (in which case it will be treated as a pixel
- * measurement).
- * @type string
- * @default <i>blank string - i.e. disabled</i>
- * @dtopt Options
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "sScrollX": "100%",
- * "sScrollXInner": "110%"
- * } );
- * } );
- */
- "sScrollXInner": "",
-
-
- /**
- * Enable vertical scrolling. Vertical scrolling will constrain the DataTable
- * to the given height, and enable scrolling for any data which overflows the
- * current viewport. This can be used as an alternative to paging to display
- * a lot of data in a small area (although paging and scrolling can both be
- * enabled at the same time). This property can be any CSS unit, or a number
- * (in which case it will be treated as a pixel measurement).
- * @type string
- * @default <i>blank string - i.e. disabled</i>
- * @dtopt Features
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "sScrollY": "200px",
- * "bPaginate": false
- * } );
- * } );
- */
- "sScrollY": "",
-
-
- /**
- * Set the HTTP method that is used to make the Ajax call for server-side
- * processing or Ajax sourced data.
- * @type string
- * @default GET
- * @dtopt Options
- * @dtopt Server-side
- *
- * @example
- * $(document).ready( function() {
- * $('#example').dataTable( {
- * "bServerSide": true,
- * "sAjaxSource": "scripts/post.php",
- * "sServerMethod": "POST"
- * } );
- * } );
- */
- "sServerMethod": "GET"
-};
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/model/model.ext.js b/wqflask/wqflask/static/new/packages/DataTables/src/model/model.ext.js
deleted file mode 100644
index 7a5fba0a..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/model/model.ext.js
+++ /dev/null
@@ -1,528 +0,0 @@
-
-
-/**
- * DataTables extension options and plug-ins. This namespace acts as a collection "area"
- * for plug-ins that can be used to extend the default DataTables behaviour - indeed many
- * of the build in methods use this method to provide their own capabilities (sorting methods
- * for example).
- *
- * Note that this namespace is aliased to jQuery.fn.dataTableExt so it can be readily accessed
- * and modified by plug-ins.
- * @namespace
- */
-DataTable.models.ext = {
- /**
- * Plug-in filtering functions - this method of filtering is complimentary to the default
- * type based filtering, and a lot more comprehensive as it allows you complete control
- * over the filtering logic. Each element in this array is a function (parameters
- * described below) that is called for every row in the table, and your logic decides if
- * it should be included in the filtered data set or not.
- * <ul>
- * <li>
- * Function input parameters:
- * <ul>
- * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li>
- * <li>{array|object} Data for the row to be processed (same as the original format
- * that was passed in as the data source, or an array from a DOM data source</li>
- * <li>{int} Row index in aoData ({@link DataTable.models.oSettings.aoData}), which can
- * be useful to retrieve the TR element if you need DOM interaction.</li>
- * </ul>
- * </li>
- * <li>
- * Function return:
- * <ul>
- * <li>{boolean} Include the row in the filtered result set (true) or not (false)</li>
- * </ul>
- * </il>
- * </ul>
- * @type array
- * @default []
- *
- * @example
- * // The following example shows custom filtering being applied to the fourth column (i.e.
- * // the aData[3] index) based on two input values from the end-user, matching the data in
- * // a certain range.
- * $.fn.dataTableExt.afnFiltering.push(
- * function( oSettings, aData, iDataIndex ) {
- * var iMin = document.getElementById('min').value * 1;
- * var iMax = document.getElementById('max').value * 1;
- * var iVersion = aData[3] == "-" ? 0 : aData[3]*1;
- * if ( iMin == "" && iMax == "" ) {
- * return true;
- * }
- * else if ( iMin == "" && iVersion < iMax ) {
- * return true;
- * }
- * else if ( iMin < iVersion && "" == iMax ) {
- * return true;
- * }
- * else if ( iMin < iVersion && iVersion < iMax ) {
- * return true;
- * }
- * return false;
- * }
- * );
- */
- "afnFiltering": [],
-
-
- /**
- * Plug-in sorting functions - this method of sorting is complimentary to the default type
- * based sorting that DataTables does automatically, allowing much greater control over the
- * the data that is being used to sort a column. This is useful if you want to do sorting
- * based on live data (for example the contents of an 'input' element) rather than just the
- * static string that DataTables knows of. The way these plug-ins work is that you create
- * an array of the values you wish to be sorted for the column in question and then return
- * that array. Which pre-sorting function is run here depends on the sSortDataType parameter
- * that is used for the column (if any). This is the corollary of <i>ofnSearch</i> for sort
- * data.
- * <ul>
- * <li>
- * Function input parameters:
- * <ul>
- * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li>
- * <li>{int} Target column index</li>
- * </ul>
- * </li>
- * <li>
- * Function return:
- * <ul>
- * <li>{array} Data for the column to be sorted upon</li>
- * </ul>
- * </il>
- * </ul>
- *
- * Note that as of v1.9, it is typically preferable to use <i>mData</i> to prepare data for
- * the different uses that DataTables can put the data to. Specifically <i>mData</i> when
- * used as a function will give you a 'type' (sorting, filtering etc) that you can use to
- * prepare the data as required for the different types. As such, this method is deprecated.
- * @type array
- * @default []
- * @deprecated
- *
- * @example
- * // Updating the cached sorting information with user entered values in HTML input elements
- * jQuery.fn.dataTableExt.afnSortData['dom-text'] = function ( oSettings, iColumn )
- * {
- * var aData = [];
- * $( 'td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () {
- * aData.push( this.value );
- * } );
- * return aData;
- * }
- */
- "afnSortData": [],
-
-
- /**
- * Feature plug-ins - This is an array of objects which describe the feature plug-ins that are
- * available to DataTables. These feature plug-ins are accessible through the sDom initialisation
- * option. As such, each feature plug-in must describe a function that is used to initialise
- * itself (fnInit), a character so the feature can be enabled by sDom (cFeature) and the name
- * of the feature (sFeature). Thus the objects attached to this method must provide:
- * <ul>
- * <li>{function} fnInit Initialisation of the plug-in
- * <ul>
- * <li>
- * Function input parameters:
- * <ul>
- * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li>
- * </ul>
- * </li>
- * <li>
- * Function return:
- * <ul>
- * <li>{node|null} The element which contains your feature. Note that the return
- * may also be void if your plug-in does not require to inject any DOM elements
- * into DataTables control (sDom) - for example this might be useful when
- * developing a plug-in which allows table control via keyboard entry.</li>
- * </ul>
- * </il>
- * </ul>
- * </li>
- * <li>{character} cFeature Character that will be matched in sDom - case sensitive</li>
- * <li>{string} sFeature Feature name</li>
- * </ul>
- * @type array
- * @default []
- *
- * @example
- * // How TableTools initialises itself.
- * $.fn.dataTableExt.aoFeatures.push( {
- * "fnInit": function( oSettings ) {
- * return new TableTools( { "oDTSettings": oSettings } );
- * },
- * "cFeature": "T",
- * "sFeature": "TableTools"
- * } );
- */
- "aoFeatures": [],
-
-
- /**
- * Type detection plug-in functions - DataTables utilises types to define how sorting and
- * filtering behave, and types can be either be defined by the developer (sType for the
- * column) or they can be automatically detected by the methods in this array. The functions
- * defined in the array are quite simple, taking a single parameter (the data to analyse)
- * and returning the type if it is a known type, or null otherwise.
- * <ul>
- * <li>
- * Function input parameters:
- * <ul>
- * <li>{*} Data from the column cell to be analysed</li>
- * </ul>
- * </li>
- * <li>
- * Function return:
- * <ul>
- * <li>{string|null} Data type detected, or null if unknown (and thus pass it
- * on to the other type detection functions.</li>
- * </ul>
- * </il>
- * </ul>
- * @type array
- * @default []
- *
- * @example
- * // Currency type detection plug-in:
- * jQuery.fn.dataTableExt.aTypes.push(
- * function ( sData ) {
- * var sValidChars = "0123456789.-";
- * var Char;
- *
- * // Check the numeric part
- * for ( i=1 ; i<sData.length ; i++ ) {
- * Char = sData.charAt(i);
- * if (sValidChars.indexOf(Char) == -1) {
- * return null;
- * }
- * }
- *
- * // Check prefixed by currency
- * if ( sData.charAt(0) == '$' || sData.charAt(0) == '&pound;' ) {
- * return 'currency';
- * }
- * return null;
- * }
- * );
- */
- "aTypes": [],
-
-
- /**
- * Provide a common method for plug-ins to check the version of DataTables being used,
- * in order to ensure compatibility.
- * @type function
- * @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note
- * that the formats "X" and "X.Y" are also acceptable.
- * @returns {boolean} true if this version of DataTables is greater or equal to the
- * required version, or false if this version of DataTales is not suitable
- *
- * @example
- * $(document).ready(function() {
- * var oTable = $('#example').dataTable();
- * alert( oTable.fnVersionCheck( '1.9.0' ) );
- * } );
- */
- "fnVersionCheck": DataTable.fnVersionCheck,
-
-
- /**
- * Index for what 'this' index API functions should use
- * @type int
- * @default 0
- */
- "iApiIndex": 0,
-
-
- /**
- * Pre-processing of filtering data plug-ins - When you assign the sType for a column
- * (or have it automatically detected for you by DataTables or a type detection plug-in),
- * you will typically be using this for custom sorting, but it can also be used to provide
- * custom filtering by allowing you to pre-processing the data and returning the data in
- * the format that should be filtered upon. This is done by adding functions this object
- * with a parameter name which matches the sType for that target column. This is the
- * corollary of <i>afnSortData</i> for filtering data.
- * <ul>
- * <li>
- * Function input parameters:
- * <ul>
- * <li>{*} Data from the column cell to be prepared for filtering</li>
- * </ul>
- * </li>
- * <li>
- * Function return:
- * <ul>
- * <li>{string|null} Formatted string that will be used for the filtering.</li>
- * </ul>
- * </il>
- * </ul>
- *
- * Note that as of v1.9, it is typically preferable to use <i>mData</i> to prepare data for
- * the different uses that DataTables can put the data to. Specifically <i>mData</i> when
- * used as a function will give you a 'type' (sorting, filtering etc) that you can use to
- * prepare the data as required for the different types. As such, this method is deprecated.
- * @type object
- * @default {}
- * @deprecated
- *
- * @example
- * $.fn.dataTableExt.ofnSearch['title-numeric'] = function ( sData ) {
- * return sData.replace(/\n/g," ").replace( /<.*?>/g, "" );
- * }
- */
- "ofnSearch": {},
-
-
- /**
- * Container for all private functions in DataTables so they can be exposed externally
- * @type object
- * @default {}
- */
- "oApi": {},
-
-
- /**
- * Storage for the various classes that DataTables uses
- * @type object
- * @default {}
- */
- "oStdClasses": {},
-
-
- /**
- * Storage for the various classes that DataTables uses - jQuery UI suitable
- * @type object
- * @default {}
- */
- "oJUIClasses": {},
-
-
- /**
- * Pagination plug-in methods - The style and controls of the pagination can significantly
- * impact on how the end user interacts with the data in your table, and DataTables allows
- * the addition of pagination controls by extending this object, which can then be enabled
- * through the <i>sPaginationType</i> initialisation parameter. Each pagination type that
- * is added is an object (the property name of which is what <i>sPaginationType</i> refers
- * to) that has two properties, both methods that are used by DataTables to update the
- * control's state.
- * <ul>
- * <li>
- * fnInit - Initialisation of the paging controls. Called only during initialisation
- * of the table. It is expected that this function will add the required DOM elements
- * to the page for the paging controls to work. The element pointer
- * 'oSettings.aanFeatures.p' array is provided by DataTables to contain the paging
- * controls (note that this is a 2D array to allow for multiple instances of each
- * DataTables DOM element). It is suggested that you add the controls to this element
- * as children
- * <ul>
- * <li>
- * Function input parameters:
- * <ul>
- * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li>
- * <li>{node} Container into which the pagination controls must be inserted</li>
- * <li>{function} Draw callback function - whenever the controls cause a page
- * change, this method must be called to redraw the table.</li>
- * </ul>
- * </li>
- * <li>
- * Function return:
- * <ul>
- * <li>No return required</li>
- * </ul>
- * </il>
- * </ul>
- * </il>
- * <li>
- * fnInit - This function is called whenever the paging status of the table changes and is
- * typically used to update classes and/or text of the paging controls to reflex the new
- * status.
- * <ul>
- * <li>
- * Function input parameters:
- * <ul>
- * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li>
- * <li>{function} Draw callback function - in case you need to redraw the table again
- * or attach new event listeners</li>
- * </ul>
- * </li>
- * <li>
- * Function return:
- * <ul>
- * <li>No return required</li>
- * </ul>
- * </il>
- * </ul>
- * </il>
- * </ul>
- * @type object
- * @default {}
- *
- * @example
- * $.fn.dataTableExt.oPagination.four_button = {
- * "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) {
- * nFirst = document.createElement( 'span' );
- * nPrevious = document.createElement( 'span' );
- * nNext = document.createElement( 'span' );
- * nLast = document.createElement( 'span' );
- *
- * nFirst.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sFirst ) );
- * nPrevious.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sPrevious ) );
- * nNext.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sNext ) );
- * nLast.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sLast ) );
- *
- * nFirst.className = "paginate_button first";
- * nPrevious.className = "paginate_button previous";
- * nNext.className="paginate_button next";
- * nLast.className = "paginate_button last";
- *
- * nPaging.appendChild( nFirst );
- * nPaging.appendChild( nPrevious );
- * nPaging.appendChild( nNext );
- * nPaging.appendChild( nLast );
- *
- * $(nFirst).click( function () {
- * oSettings.oApi._fnPageChange( oSettings, "first" );
- * fnCallbackDraw( oSettings );
- * } );
- *
- * $(nPrevious).click( function() {
- * oSettings.oApi._fnPageChange( oSettings, "previous" );
- * fnCallbackDraw( oSettings );
- * } );
- *
- * $(nNext).click( function() {
- * oSettings.oApi._fnPageChange( oSettings, "next" );
- * fnCallbackDraw( oSettings );
- * } );
- *
- * $(nLast).click( function() {
- * oSettings.oApi._fnPageChange( oSettings, "last" );
- * fnCallbackDraw( oSettings );
- * } );
- *
- * $(nFirst).bind( 'selectstart', function () { return false; } );
- * $(nPrevious).bind( 'selectstart', function () { return false; } );
- * $(nNext).bind( 'selectstart', function () { return false; } );
- * $(nLast).bind( 'selectstart', function () { return false; } );
- * },
- *
- * "fnUpdate": function ( oSettings, fnCallbackDraw ) {
- * if ( !oSettings.aanFeatures.p ) {
- * return;
- * }
- *
- * // Loop over each instance of the pager
- * var an = oSettings.aanFeatures.p;
- * for ( var i=0, iLen=an.length ; i<iLen ; i++ ) {
- * var buttons = an[i].getElementsByTagName('span');
- * if ( oSettings._iDisplayStart === 0 ) {
- * buttons[0].className = "paginate_disabled_previous";
- * buttons[1].className = "paginate_disabled_previous";
- * }
- * else {
- * buttons[0].className = "paginate_enabled_previous";
- * buttons[1].className = "paginate_enabled_previous";
- * }
- *
- * if ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) {
- * buttons[2].className = "paginate_disabled_next";
- * buttons[3].className = "paginate_disabled_next";
- * }
- * else {
- * buttons[2].className = "paginate_enabled_next";
- * buttons[3].className = "paginate_enabled_next";
- * }
- * }
- * }
- * };
- */
- "oPagination": {},
-
-
- /**
- * Sorting plug-in methods - Sorting in DataTables is based on the detected type of the
- * data column (you can add your own type detection functions, or override automatic
- * detection using sType). With this specific type given to the column, DataTables will
- * apply the required sort from the functions in the object. Each sort type must provide
- * two mandatory methods, one each for ascending and descending sorting, and can optionally
- * provide a pre-formatting method that will help speed up sorting by allowing DataTables
- * to pre-format the sort data only once (rather than every time the actual sort functions
- * are run). The two sorting functions are typical Javascript sort methods:
- * <ul>
- * <li>
- * Function input parameters:
- * <ul>
- * <li>{*} Data to compare to the second parameter</li>
- * <li>{*} Data to compare to the first parameter</li>
- * </ul>
- * </li>
- * <li>
- * Function return:
- * <ul>
- * <li>{int} Sorting match: <0 if first parameter should be sorted lower than
- * the second parameter, ===0 if the two parameters are equal and >0 if
- * the first parameter should be sorted height than the second parameter.</li>
- * </ul>
- * </il>
- * </ul>
- * @type object
- * @default {}
- *
- * @example
- * // Case-sensitive string sorting, with no pre-formatting method
- * $.extend( $.fn.dataTableExt.oSort, {
- * "string-case-asc": function(x,y) {
- * return ((x < y) ? -1 : ((x > y) ? 1 : 0));
- * },
- * "string-case-desc": function(x,y) {
- * return ((x < y) ? 1 : ((x > y) ? -1 : 0));
- * }
- * } );
- *
- * @example
- * // Case-insensitive string sorting, with pre-formatting
- * $.extend( $.fn.dataTableExt.oSort, {
- * "string-pre": function(x) {
- * return x.toLowerCase();
- * },
- * "string-asc": function(x,y) {
- * return ((x < y) ? -1 : ((x > y) ? 1 : 0));
- * },
- * "string-desc": function(x,y) {
- * return ((x < y) ? 1 : ((x > y) ? -1 : 0));
- * }
- * } );
- */
- "oSort": {},
-
-
- /**
- * Version string for plug-ins to check compatibility. Allowed format is
- * a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and
- * e are optional
- * @type string
- * @default Version number
- */
- "sVersion": DataTable.version,
-
-
- /**
- * How should DataTables report an error. Can take the value 'alert' or 'throw'
- * @type string
- * @default alert
- */
- "sErrMode": "alert",
-
-
- /**
- * Store information for DataTables to access globally about other instances
- * @namespace
- * @private
- */
- "_oExternConfig": {
- /* int:iNextUnique - next unique number for an instance */
- "iNextUnique": 0
- }
-};
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/model/model.row.js b/wqflask/wqflask/static/new/packages/DataTables/src/model/model.row.js
deleted file mode 100644
index d5097e83..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/model/model.row.js
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-/**
- * Template object for the way in which DataTables holds information about
- * each individual row. This is the object format used for the settings
- * aoData array.
- * @namespace
- */
-DataTable.models.oRow = {
- /**
- * TR element for the row
- * @type node
- * @default null
- */
- "nTr": null,
-
- /**
- * Data object from the original data source for the row. This is either
- * an array if using the traditional form of DataTables, or an object if
- * using mData options. The exact type will depend on the passed in
- * data from the data source, or will be an array if using DOM a data
- * source.
- * @type array|object
- * @default []
- */
- "_aData": [],
-
- /**
- * Sorting data cache - this array is ostensibly the same length as the
- * number of columns (although each index is generated only as it is
- * needed), and holds the data that is used for sorting each column in the
- * row. We do this cache generation at the start of the sort in order that
- * the formatting of the sort data need be done only once for each cell
- * per sort. This array should not be read from or written to by anything
- * other than the master sorting methods.
- * @type array
- * @default []
- * @private
- */
- "_aSortData": [],
-
- /**
- * Array of TD elements that are cached for hidden rows, so they can be
- * reinserted into the table if a column is made visible again (or to act
- * as a store if a column is made hidden). Only hidden columns have a
- * reference in the array. For non-hidden columns the value is either
- * undefined or null.
- * @type array nodes
- * @default []
- * @private
- */
- "_anHidden": [],
-
- /**
- * Cache of the class name that DataTables has applied to the row, so we
- * can quickly look at this variable rather than needing to do a DOM check
- * on className for the nTr property.
- * @type string
- * @default <i>Empty string</i>
- * @private
- */
- "_sRowStripe": ""
-};
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/model/model.search.js b/wqflask/wqflask/static/new/packages/DataTables/src/model/model.search.js
deleted file mode 100644
index 455fa297..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/model/model.search.js
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-/**
- * Template object for the way in which DataTables holds information about
- * search information for the global filter and individual column filters.
- * @namespace
- */
-DataTable.models.oSearch = {
- /**
- * Flag to indicate if the filtering should be case insensitive or not
- * @type boolean
- * @default true
- */
- "bCaseInsensitive": true,
-
- /**
- * Applied search term
- * @type string
- * @default <i>Empty string</i>
- */
- "sSearch": "",
-
- /**
- * Flag to indicate if the search term should be interpreted as a
- * regular expression (true) or not (false) and therefore and special
- * regex characters escaped.
- * @type boolean
- * @default false
- */
- "bRegex": false,
-
- /**
- * Flag to indicate if DataTables is to use its smart filtering or not.
- * @type boolean
- * @default true
- */
- "bSmart": true
-};
-
diff --git a/wqflask/wqflask/static/new/packages/DataTables/src/model/model.settings.js b/wqflask/wqflask/static/new/packages/DataTables/src/model/model.settings.js
deleted file mode 100644
index 733a2ba5..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/src/model/model.settings.js
+++ /dev/null
@@ -1,882 +0,0 @@
-
-
-/**
- * DataTables settings object - this holds all the information needed for a
- * given table, including configuration, data and current application of the
- * table options. DataTables does not have a single instance for each DataTable
- * with the settings attached to that instance, but rather instances of the
- * DataTable "class" are created on-the-fly as needed (typically by a
- * $().dataTable() call) and the settings object is then applied to that
- * instance.
- *
- * Note that this object is related to {@link DataTable.defaults} but this
- * one is the internal data store for DataTables's cache of columns. It should
- * NOT be manipulated outside of DataTables. Any configuration should be done
- * through the initialisation options.
- * @namespace
- * @todo Really should attach the settings object to individual instances so we
- * don't need to create new instances on each $().dataTable() call (if the
- * table already exists). It would also save passing oSettings around and
- * into every single function. However, this is a very significant
- * architecture change for DataTables and will almost certainly break
- * backwards compatibility with older installations. This is something that
- * will be done in 2.0.
- */
-DataTable.models.oSettings = {
- /**
- * Primary features of DataTables and their enablement state.
- * @namespace
- */
- "oFeatures": {
-
- /**
- * Flag to say if DataTables should automatically try to calculate the
- * optimum table and columns widths (true) or not (false).
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bAutoWidth": null,
-
- /**
- * Delay the creation of TR and TD elements until they are actually
- * needed by a driven page draw. This can give a significant speed
- * increase for Ajax source and Javascript source data, but makes no
- * difference at all fro DOM and server-side processing tables.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bDeferRender": null,
-
- /**
- * Enable filtering on the table or not. Note that if this is disabled
- * then there is no filtering at all on the table, including fnFilter.
- * To just remove the filtering input use sDom and remove the 'f' option.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bFilter": null,
-
- /**
- * Table information element (the 'Showing x of y records' div) enable
- * flag.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bInfo": null,
-
- /**
- * Present a user control allowing the end user to change the page size
- * when pagination is enabled.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bLengthChange": null,
-
- /**
- * Pagination enabled or not. Note that if this is disabled then length
- * changing must also be disabled.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bPaginate": null,
-
- /**
- * Processing indicator enable flag whenever DataTables is enacting a
- * user request - typically an Ajax request for server-side processing.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bProcessing": null,
-
- /**
- * Server-side processing enabled flag - when enabled DataTables will
- * get all data from the server for every draw - there is no filtering,
- * sorting or paging done on the client-side.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bServerSide": null,
-
- /**
- * Sorting enablement flag.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bSort": null,
-
- /**
- * Apply a class to the columns which are being sorted to provide a
- * visual highlight or not. This can slow things down when enabled since
- * there is a lot of DOM interaction.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bSortClasses": null,
-
- /**
- * State saving enablement flag.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bStateSave": null
- },
-
-
- /**
- * Scrolling settings for a table.
- * @namespace
- */
- "oScroll": {
- /**
- * Indicate if DataTables should be allowed to set the padding / margin
- * etc for the scrolling header elements or not. Typically you will want
- * this.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bAutoCss": null,
-
- /**
- * When the table is shorter in height than sScrollY, collapse the
- * table container down to the height of the table (when true).
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bCollapse": null,
-
- /**
- * Infinite scrolling enablement flag. Now deprecated in favour of
- * using the Scroller plug-in.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bInfinite": null,
-
- /**
- * Width of the scrollbar for the web-browser's platform. Calculated
- * during table initialisation.
- * @type int
- * @default 0
- */
- "iBarWidth": 0,
-
- /**
- * Space (in pixels) between the bottom of the scrolling container and
- * the bottom of the scrolling viewport before the next page is loaded
- * when using infinite scrolling.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type int
- */
- "iLoadGap": null,
-
- /**
- * Viewport width for horizontal scrolling. Horizontal scrolling is
- * disabled if an empty string.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- */
- "sX": null,
-
- /**
- * Width to expand the table to when using x-scrolling. Typically you
- * should not need to use this.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- * @deprecated
- */
- "sXInner": null,
-
- /**
- * Viewport height for vertical scrolling. Vertical scrolling is disabled
- * if an empty string.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- */
- "sY": null
- },
-
- /**
- * Language information for the table.
- * @namespace
- * @extends DataTable.defaults.oLanguage
- */
- "oLanguage": {
- /**
- * Information callback function. See
- * {@link DataTable.defaults.fnInfoCallback}
- * @type function
- * @default null
- */
- "fnInfoCallback": null
- },
-
- /**
- * Browser support parameters
- * @namespace
- */
- "oBrowser": {
- /**
- * Indicate if the browser incorrectly calculates width:100% inside a
- * scrolling element (IE6/7)
- * @type boolean
- * @default false
- */
- "bScrollOversize": false
- },
-
- /**
- * Array referencing the nodes which are used for the features. The
- * parameters of this object match what is allowed by sDom - i.e.
- * <ul>
- * <li>'l' - Length changing</li>
- * <li>'f' - Filtering input</li>
- * <li>'t' - The table!</li>
- * <li>'i' - Information</li>
- * <li>'p' - Pagination</li>
- * <li>'r' - pRocessing</li>
- * </ul>
- * @type array
- * @default []
- */
- "aanFeatures": [],
-
- /**
- * Store data information - see {@link DataTable.models.oRow} for detailed
- * information.
- * @type array
- * @default []
- */
- "aoData": [],
-
- /**
- * Array of indexes which are in the current display (after filtering etc)
- * @type array
- * @default []
- */
- "aiDisplay": [],
-
- /**
- * Array of indexes for display - no filtering
- * @type array
- * @default []
- */
- "aiDisplayMaster": [],
-
- /**
- * Store information about each column that is in use
- * @type array
- * @default []
- */
- "aoColumns": [],
-
- /**
- * Store information about the table's header
- * @type array
- * @default []
- */
- "aoHeader": [],
-
- /**
- * Store information about the table's footer
- * @type array
- * @default []
- */
- "aoFooter": [],
-
- /**
- * Search data array for regular expression searching
- * @type array
- * @default []
- */
- "asDataSearch": [],
-
- /**
- * Store the applied global search information in case we want to force a
- * research or compare the old search to a new one.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @namespace
- * @extends DataTable.models.oSearch
- */
- "oPreviousSearch": {},
-
- /**
- * Store the applied search for each column - see
- * {@link DataTable.models.oSearch} for the format that is used for the
- * filtering information for each column.
- * @type array
- * @default []
- */
- "aoPreSearchCols": [],
-
- /**
- * Sorting that is applied to the table. Note that the inner arrays are
- * used in the following manner:
- * <ul>
- * <li>Index 0 - column number</li>
- * <li>Index 1 - current sorting direction</li>
- * <li>Index 2 - index of asSorting for this column</li>
- * </ul>
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type array
- * @todo These inner arrays should really be objects
- */
- "aaSorting": null,
-
- /**
- * Sorting that is always applied to the table (i.e. prefixed in front of
- * aaSorting).
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type array|null
- * @default null
- */
- "aaSortingFixed": null,
-
- /**
- * Classes to use for the striping of a table.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type array
- * @default []
- */
- "asStripeClasses": null,
-
- /**
- * If restoring a table - we should restore its striping classes as well
- * @type array
- * @default []
- */
- "asDestroyStripes": [],
-
- /**
- * If restoring a table - we should restore its width
- * @type int
- * @default 0
- */
- "sDestroyWidth": 0,
-
- /**
- * Callback functions array for every time a row is inserted (i.e. on a draw).
- * @type array
- * @default []
- */
- "aoRowCallback": [],
-
- /**
- * Callback functions for the header on each draw.
- * @type array
- * @default []
- */
- "aoHeaderCallback": [],
-
- /**
- * Callback function for the footer on each draw.
- * @type array
- * @default []
- */
- "aoFooterCallback": [],
-
- /**
- * Array of callback functions for draw callback functions
- * @type array
- * @default []
- */
- "aoDrawCallback": [],
-
- /**
- * Array of callback functions for row created function
- * @type array
- * @default []
- */
- "aoRowCreatedCallback": [],
-
- /**
- * Callback functions for just before the table is redrawn. A return of
- * false will be used to cancel the draw.
- * @type array
- * @default []
- */
- "aoPreDrawCallback": [],
-
- /**
- * Callback functions for when the table has been initialised.
- * @type array
- * @default []
- */
- "aoInitComplete": [],
-
-
- /**
- * Callbacks for modifying the settings to be stored for state saving, prior to
- * saving state.
- * @type array
- * @default []
- */
- "aoStateSaveParams": [],
-
- /**
- * Callbacks for modifying the settings that have been stored for state saving
- * prior to using the stored values to restore the state.
- * @type array
- * @default []
- */
- "aoStateLoadParams": [],
-
- /**
- * Callbacks for operating on the settings object once the saved state has been
- * loaded
- * @type array
- * @default []
- */
- "aoStateLoaded": [],
-
- /**
- * Cache the table ID for quick access
- * @type string
- * @default <i>Empty string</i>
- */
- "sTableId": "",
-
- /**
- * The TABLE node for the main table
- * @type node
- * @default null
- */
- "nTable": null,
-
- /**
- * Permanent ref to the thead element
- * @type node
- * @default null
- */
- "nTHead": null,
-
- /**
- * Permanent ref to the tfoot element - if it exists
- * @type node
- * @default null
- */
- "nTFoot": null,
-
- /**
- * Permanent ref to the tbody element
- * @type node
- * @default null
- */
- "nTBody": null,
-
- /**
- * Cache the wrapper node (contains all DataTables controlled elements)
- * @type node
- * @default null
- */
- "nTableWrapper": null,
-
- /**
- * Indicate if when using server-side processing the loading of data
- * should be deferred until the second draw.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- * @default false
- */
- "bDeferLoading": false,
-
- /**
- * Indicate if all required information has been read in
- * @type boolean
- * @default false
- */
- "bInitialised": false,
-
- /**
- * Information about open rows. Each object in the array has the parameters
- * 'nTr' and 'nParent'
- * @type array
- * @default []
- */
- "aoOpenRows": [],
-
- /**
- * Dictate the positioning of DataTables' control elements - see
- * {@link DataTable.model.oInit.sDom}.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- * @default null
- */
- "sDom": null,
-
- /**
- * Which type of pagination should be used.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- * @default two_button
- */
- "sPaginationType": "two_button",
-
- /**
- * The cookie duration (for bStateSave) in seconds.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type int
- * @default 0
- */
- "iCookieDuration": 0,
-
- /**
- * The cookie name prefix.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- * @default <i>Empty string</i>
- */
- "sCookiePrefix": "",
-
- /**
- * Callback function for cookie creation.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type function
- * @default null
- */
- "fnCookieCallback": null,
-
- /**
- * Array of callback functions for state saving. Each array element is an
- * object with the following parameters:
- * <ul>
- * <li>function:fn - function to call. Takes two parameters, oSettings
- * and the JSON string to save that has been thus far created. Returns
- * a JSON string to be inserted into a json object
- * (i.e. '"param": [ 0, 1, 2]')</li>
- * <li>string:sName - name of callback</li>
- * </ul>
- * @type array
- * @default []
- */
- "aoStateSave": [],
-
- /**
- * Array of callback functions for state loading. Each array element is an
- * object with the following parameters:
- * <ul>
- * <li>function:fn - function to call. Takes two parameters, oSettings
- * and the object stored. May return false to cancel state loading</li>
- * <li>string:sName - name of callback</li>
- * </ul>
- * @type array
- * @default []
- */
- "aoStateLoad": [],
-
- /**
- * State that was loaded from the cookie. Useful for back reference
- * @type object
- * @default null
- */
- "oLoadedState": null,
-
- /**
- * Source url for AJAX data for the table.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- * @default null
- */
- "sAjaxSource": null,
-
- /**
- * Property from a given object from which to read the table data from. This
- * can be an empty string (when not server-side processing), in which case
- * it is assumed an an array is given directly.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- */
- "sAjaxDataProp": null,
-
- /**
- * Note if draw should be blocked while getting data
- * @type boolean
- * @default true
- */
- "bAjaxDataGet": true,
-
- /**
- * The last jQuery XHR object that was used for server-side data gathering.
- * This can be used for working with the XHR information in one of the
- * callbacks
- * @type object
- * @default null
- */
- "jqXHR": null,
-
- /**
- * Function to get the server-side data.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type function
- */
- "fnServerData": null,
-
- /**
- * Functions which are called prior to sending an Ajax request so extra
- * parameters can easily be sent to the server
- * @type array
- * @default []
- */
- "aoServerParams": [],
-
- /**
- * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if
- * required).
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type string
- */
- "sServerMethod": null,
-
- /**
- * Format numbers for display.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type function
- */
- "fnFormatNumber": null,
-
- /**
- * List of options that can be used for the user selectable length menu.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type array
- * @default []
- */
- "aLengthMenu": null,
-
- /**
- * Counter for the draws that the table does. Also used as a tracker for
- * server-side processing
- * @type int
- * @default 0
- */
- "iDraw": 0,
-
- /**
- * Indicate if a redraw is being done - useful for Ajax
- * @type boolean
- * @default false
- */
- "bDrawing": false,
-
- /**
- * Draw index (iDraw) of the last error when parsing the returned data
- * @type int
- * @default -1
- */
- "iDrawError": -1,
-
- /**
- * Paging display length
- * @type int
- * @default 10
- */
- "_iDisplayLength": 10,
-
- /**
- * Paging start point - aiDisplay index
- * @type int
- * @default 0
- */
- "_iDisplayStart": 0,
-
- /**
- * Paging end point - aiDisplay index. Use fnDisplayEnd rather than
- * this property to get the end point
- * @type int
- * @default 10
- * @private
- */
- "_iDisplayEnd": 10,
-
- /**
- * Server-side processing - number of records in the result set
- * (i.e. before filtering), Use fnRecordsTotal rather than
- * this property to get the value of the number of records, regardless of
- * the server-side processing setting.
- * @type int
- * @default 0
- * @private
- */
- "_iRecordsTotal": 0,
-
- /**
- * Server-side processing - number of records in the current display set
- * (i.e. after filtering). Use fnRecordsDisplay rather than
- * this property to get the value of the number of records, regardless of
- * the server-side processing setting.
- * @type boolean
- * @default 0
- * @private
- */
- "_iRecordsDisplay": 0,
-
- /**
- * Flag to indicate if jQuery UI marking and classes should be used.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bJUI": null,
-
- /**
- * The classes to use for the table
- * @type object
- * @default {}
- */
- "oClasses": {},
-
- /**
- * Flag attached to the settings object so you can check in the draw
- * callback if filtering has been done in the draw. Deprecated in favour of
- * events.
- * @type boolean
- * @default false
- * @deprecated
- */
- "bFiltered": false,
-
- /**
- * Flag attached to the settings object so you can check in the draw
- * callback if sorting has been done in the draw. Deprecated in favour of
- * events.
- * @type boolean
- * @default false
- * @deprecated
- */
- "bSorted": false,
-
- /**
- * Indicate that if multiple rows are in the header and there is more than
- * one unique cell per column, if the top one (true) or bottom one (false)
- * should be used for sorting / title by DataTables.
- * Note that this parameter will be set by the initialisation routine. To
- * set a default use {@link DataTable.defaults}.
- * @type boolean
- */
- "bSortCellsTop": null,
-
- /**
- * Initialisation object that is used for the table
- * @type object
- * @default null
- */
- "oInit": null,
-
- /**
- * Destroy callback functions - for plug-ins to attach themselves to the
- * destroy so they can clean up markup and events.
- * @type array
- * @default []
- */
- "aoDestroyCallback": [],
-
-
- /**
- * Get the number of records in the current record set, before filtering
- * @type function
- */
- "fnRecordsTotal": function ()
- {
- if ( this.oFeatures.bServerSide ) {
- return parseInt(this._iRecordsTotal, 10);
- } else {
- return this.aiDisplayMaster.length;
- }
- },
-
- /**
- * Get the number of records in the current record set, after filtering
- * @type function
- */
- "fnRecordsDisplay": function ()
- {
- if ( this.oFeatures.bServerSide ) {
- return parseInt(this._iRecordsDisplay, 10);
- } else {
- return this.aiDisplay.length;
- }
- },
-
- /**
- * Set the display end point - aiDisplay index
- * @type function
- * @todo Should do away with _iDisplayEnd and calculate it on-the-fly here
- */
- "fnDisplayEnd": function ()
- {
- if ( this.oFeatures.bServerSide ) {
- if ( this.oFeatures.bPaginate === false || this._iDisplayLength == -1 ) {
- return this._iDisplayStart+this.aiDisplay.length;
- } else {
- return Math.min( this._iDisplayStart+this._iDisplayLength,
- this._iRecordsDisplay );
- }
- } else {
- return this._iDisplayEnd;
- }
- },
-
- /**
- * The DataTables object for this table
- * @type object
- * @default null
- */
- "oInstance": null,
-
- /**
- * Unique identifier for each instance of the DataTables object. If there
- * is an ID on the table node, then it takes that value, otherwise an
- * incrementing internal counter is used.
- * @type string
- * @default null
- */
- "sInstance": null,
-
- /**
- * tabindex attribute value that is added to DataTables control elements, allowing
- * keyboard navigation of the table and its controls.
- */
- "iTabIndex": 0,
-
- /**
- * DIV container for the footer scrolling table if scrolling
- */
- "nScrollHead": null,
-
- /**
- * DIV container for the footer scrolling table if scrolling
- */
- "nScrollFoot": null
-};
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/controller.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/controller.js
deleted file mode 100644
index c0673cb9..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/controller.js
+++ /dev/null
@@ -1,94 +0,0 @@
-var giTotalTestCount = 0;
-var giActiveModule = 0;
-var giModuleTests;
-var giStartTime;
-var giTest;
-var gbStop = false;
-var gtoTest;
-
-function fnTestStart ( sTestInfo )
-{
- gaoTest[ giActiveModule ].iTests++;
- document.getElementById('test_info').innerHTML +=
- (giActiveModule+1)+'.'+(giModuleTests+1)+'. '+sTestInfo+'... ';
- document.getElementById('test_number').innerHTML = giTotalTestCount+1;
- giModuleTests++;
- giTotalTestCount++;
-
- /* Set a timer to catch stalled script */
- gtoTest = setTimeout( function () {
- fnMessage( '<span class="error">WARNING - test script stalled. Likely a JS error</span>' );
- gbStop = true;
- }, 3000 );
-}
-
-function fnTestResult ( bResult )
-{
- clearTimeout( gtoTest );
- if ( bResult )
- {
- fnMessage( 'Passed' );
- }
- else
- {
- fnMessage( '<span class="error">FAILED</span>' );
- gbStop = true;
- fnEnd( false );
- }
-}
-
-function fnUnitStart( iTest )
-{
- if ( !gbStop )
- {
- giModuleTests = 0;
- window.parent.test_arena.location.href =
- (iTest==0?"":"../")+'templates/'+gaoTest[iTest].sTemplate+'.php?scripts='+gaoTest[iTest].sTest;
- giTest = iTest;
- }
-}
-
-function fnStartMessage( sMessage )
-{
- fnMessage( '<br><b>'+gaoTest[giTest].sGroup+' - '+sMessage+'</b>' );
-}
-
-function fnMessage( sMessage )
-{
- var nInfo = document.getElementById('test_info');
- nInfo.innerHTML += sMessage+'<br>';
- nInfo.scrollTop = nInfo.scrollHeight;
-}
-
-function fnUnitComplete()
-{
- if ( giActiveModule < gaoTest.length - 1 )
- {
- fnUnitStart( ++giActiveModule );
- }
- else
- {
- fnEnd( true );
- }
-}
-
-function fnEnd( bSuccess )
-{
- var iEndTime = new Date().getTime();
- var sTime = '<br>This test run took '+parseInt((iEndTime-giStartTime)/1000, 10)+
- ' second(s) to complete.';
-
- if ( bSuccess )
- {
- $('#test_running').html( 'Tests complete. '+giTotalTestCount+' tests were run.'+sTime );
- }
- else
- {
- $('#test_running').html( 'Unit tests failed at test '+giTotalTestCount+'.'+sTime );
- }
-}
-
-$(document).ready( function () {
- giStartTime = new Date().getTime();
- fnUnitStart( giActiveModule );
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/controller.php b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/controller.php
deleted file mode 100644
index 33f751e2..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/controller.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
- header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
- header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
- header( 'Cache-Control: no-store, no-cache, must-revalidate' );
- header( 'Cache-Control: post-check=0, pre-check=0', false );
- header( 'Pragma: no-cache' );
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
- "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8">
- <title>DataTables unit test controller</title>
-
- <style type="text/css" media="screen">
- #controller {
- font: 12px/1.45em "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
- margin: 0;
- padding: 0 0 0 0.5em;
- color: #333;
- background-color: #fff;
- }
-
- #test_info {
- position: absolute;
- top: 0;
- right: 0;
- width: 50%;
- height: 100%;
- font-size: 11px;
- overflow: auto;
- }
-
- .error {
- color: red;
- }
-
- #controller h1 {
- color: #4E6CA3;
- font-size: 18px;
- }
- </style>
-
- <script type="text/javascript" language="javascript" src="../js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8">
- var gaoTest = [
- <?php
- function fnReadDir( &$aReturn, $path )
- {
- $rDir = opendir( $path );
- while ( ($file = readdir($rDir)) !== false )
- {
- if ( $file == "." || $file == ".." || $file == ".DS_Store" )
- {
- continue;
- }
- else if ( is_dir( $path.'/'.$file ) )
- {
- fnReadDir( $aReturn, $path.'/'.$file );
- }
- else
- {
- array_push( $aReturn, $path.'/'.$file );
- }
- }
- closedir($rDir);
- }
-
- /* Get the tests dynamically from the 'tests' directory, and their templates */
- $aFiles = array();
- fnReadDir( $aFiles, "tests" );
-
- for ( $i=0 ; $i<count($aFiles) ; $i++ )
- {
- $sTemplate;
- $fp = fopen( $aFiles[$i], "r" );
- fscanf( $fp, "// DATA_TEMPLATE: %s", $sTemplate );
- fclose( $fp );
-
- $aPath = explode('/', $aFiles[$i]);
-
- echo '{ '.
- '"sTemplate": "'.$sTemplate.'", '.
- '"sTest": "'.$aFiles[$i].'", '.
- '"sGroup": "'.$aPath[1].'"},'."\n";
- }
-
- ?>
- null ];
- gaoTest.pop(); /* No interest in the null */
- </script>
- <script type="text/javascript" language="javascript" src="controller.js"></script>
- </head>
- <body id="controller">
- <h1>DataTables unit testing</h1>
- <div id="test_running">Running test: <span id="test_number"></span></div>
- <div id="test_info">
- <b>Test information:</b><br>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/index.html b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/index.html
deleted file mode 100644
index caab383b..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/index.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
-<html>
- <frameset rows="20%,80%">
- <frame name="controller" id="controller" src="controller.php">
- <frame name="test_arena" id="test_arena">
- </frameset>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/performance/draw.html b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/performance/draw.html
deleted file mode 100644
index 32af1a91..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/performance/draw.html
+++ /dev/null
@@ -1,482 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" />
-
- <title>DataTables example</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready(function() {
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
- var iStart = new Date().getTime();
-
- //console.profile();
- //for ( var i=0, iLen=1000 ; i<iLen ; i++ )
- //{
- // oSettings._iDisplayLength = 100;
- // oTable.oApi._fnCalculateEnd( oSettings );
- // oTable.oApi._fnDraw( oSettings );
- //
- // oSettings._iDisplayLength = 10;
- // oTable.oApi._fnCalculateEnd( oSettings );
- // oTable.oApi._fnDraw( oSettings );
- //}
- //console.profileEnd();
-
- var iEnd = new Date().getTime();
- document.getElementById('output').innerHTML = "Test took "+(iEnd-iStart)+"mS";
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> performance test - draw
- </div>
- <div id="output"></div>
-
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tbody>
- <tr class="gradeX">
- <td>Trident</td>
- <td>Internet
- Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Trident</td>
- <td>Internet
- Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- DataTables &copy; Allan Jardine 2008-2009.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/performance/large.php b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/performance/large.php
deleted file mode 100644
index c4911528..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/performance/large.php
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
- /* MySQL connection */
- include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" ); /* ;-) */
-
- $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) or
- die( 'Could not open connection to server' );
-
- mysql_select_db( $gaSql['db'], $gaSql['link'] ) or
- die( 'Could not select database '. $gaSql['db'] );
-
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" />
-
- <title>DataTables example</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready(function() {
- var oTable = $('#example').dataTable();
- var iStart = new Date().getTime();
-
- //if ( typeof console != 'undefined' ) {
- // console.profile();
- //}
- for ( var i=0 ; i<10 ; i++ )
- {
- var oTable = $('#example').dataTable({"bDestroy": true});
- }
- //if ( typeof console != 'undefined' ) {
- // console.profileEnd();
- //}
-
- //oTable.fnSort( [[ 1, 'asc' ]] );
- //oTable.fnSort( [[ 1, 'asc' ]] );
- //oTable.fnSort( [[ 2, 'asc' ]] );
- //oTable.fnSort( [[ 1, 'asc' ]] );
- //oTable.fnSort( [[ 2, 'asc' ]] );
-
- var iEnd = new Date().getTime();
- document.getElementById('output').innerHTML = "Test took "+(iEnd-iStart)+" mS";
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> performance test - draw
- </div>
- <div id="output"></div>
-
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>id</th>
- <th>name</th>
- <th>phone</th>
- <th>email</th>
- <th>city</th>
- <th>zip</th>
- <th>state</th>
- <th>country</th>
- <th>zip2</th>
- </tr>
- </thead>
- <tbody>
-<?php
- $sQuery = "
- SELECT *
- FROM testData
- LIMIT 2000
- ";
- $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
- while ( $aRow = mysql_fetch_array( $rResult ) )
- {
- echo '<tr>';
- echo '<td><a href="1">'.$aRow['id'].'</a></td>';
- echo '<td>'.$aRow['name'].'</td>';
- echo '<td>'.$aRow['phone'].'</td>';
- echo '<td>'.$aRow['email'].'</td>';
- echo '<td>'.$aRow['city'].'</td>';
- echo '<td>'.$aRow['zip'].'</td>';
- echo '<td>'.$aRow['state'].'</td>';
- echo '<td>'.$aRow['country'].'</td>';
- echo '<td>'.$aRow['zip2'].'</td>';
- echo '</tr>';
- }
-?>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- DataTables &copy; Allan Jardine 2008-2009.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/performance/page.html b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/performance/page.html
deleted file mode 100644
index 77c6c2a5..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/performance/page.html
+++ /dev/null
@@ -1,477 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" />
-
- <title>DataTables example</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready(function() {
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
- var iStart = new Date().getTime();
-
- //for ( var i=0, iLen=100 ; i<iLen ; i++ )
- //{
- console.profile( );
- oTable.fnPageChange( "next" );
- oTable.fnPageChange( "previous" );
- console.profileEnd( );
- //}
-
- var iEnd = new Date().getTime();
- document.getElementById('output').innerHTML = "Test took "+(iEnd-iStart)+"mS";
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> performance test - draw
- </div>
- <div id="output"></div>
-
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tbody>
- <tr class="gradeX">
- <td>Trident</td>
- <td>Internet
- Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Trident</td>
- <td>Internet
- Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- DataTables &copy; Allan Jardine 2008-2009.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/performance/sort.html b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/performance/sort.html
deleted file mode 100644
index d154fb0b..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/performance/sort.html
+++ /dev/null
@@ -1,477 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" />
-
- <title>DataTables example</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready(function() {
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
- var iStart = new Date().getTime();
-
- for ( var i=0, iLen=100 ; i<iLen ; i++ )
- {
- console.profile( );
- oTable.fnSort( [[1, 'asc']] );
- oTable.fnSort( [[0, 'asc']] );
- console.profileEnd( );
- }
-
- var iEnd = new Date().getTime();
- document.getElementById('output').innerHTML = "Test took "+(iEnd-iStart)+"mS";
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> performance test - draw
- </div>
- <div id="output"></div>
-
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tbody>
- <tr class="gradeX">
- <td>Trident</td>
- <td>Internet
- Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Trident</td>
- <td>Internet
- Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- DataTables &copy; Allan Jardine 2008-2009.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/-complex_header.php b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/-complex_header.php
deleted file mode 100644
index 2cdc4250..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/-complex_header.php
+++ /dev/null
@@ -1,469 +0,0 @@
-<?php
- header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
- header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
- header( 'Cache-Control: no-store, no-cache, must-revalidate' );
- header( 'Cache-Control: post-check=0, pre-check=0', false );
- header( 'Pragma: no-cache' );
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" />
-
- <title>DataTables unit testing</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" language="javascript" src="../unit_test.js"></script>
- <?php
- $aScripts = explode( ":", $_GET['scripts'] );
- for ( $i=0 ; $i<count($aScripts) ; $i++ )
- {
- echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n";
- }
- ?>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> unit test template for reading DOM data
- </div>
-
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th rowspan="2" class="bl bt">Rendering engine</th>
- <th colspan="3" class="bl br bt">Browser details</th>
- <th class="br bt">CSS grade</th>
- </tr>
- <tr>
- <th class="bl">Browser</th>
- <th>Platform(s)</th>
- <th class="br">Engine version</th>
- <th class="br bt">CSS grade</th>
- </tr>
- </thead>
- <tbody>
- <tr class="gradeX">
- <td>Trident</td>
- <td>Internet
- Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Trident</td>
- <td>Internet
- Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
-</table>
- </div>
- <div class="spacer"></div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/2512.php b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/2512.php
deleted file mode 100644
index 9ef8e2f0..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/2512.php
+++ /dev/null
@@ -1,464 +0,0 @@
-<?php
- header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
- header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
- header( 'Cache-Control: no-store, no-cache, must-revalidate' );
- header( 'Cache-Control: post-check=0, pre-check=0', false );
- header( 'Pragma: no-cache' );
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" />
-
- <title>DataTables unit testing</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" language="javascript" src="../unit_test.js"></script>
- <?php
- $aScripts = explode( ":", $_GET['scripts'] );
- for ( $i=0 ; $i<count($aScripts) ; $i++ )
- {
- echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n";
- }
- ?>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> unit test template for reading DOM data
- </div>
-
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tbody>
- <tr class="gradeX">
- <td>Trident</td>
- <td>testsearchstring <br>html &amp; entity</td>
- <td>Win 95+</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Trident</td>
- <td>Internet
- Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
-</table>
- </div>
- <div class="spacer"></div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/6776.php b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/6776.php
deleted file mode 100644
index 62defd14..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/6776.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
- header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
- header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
- header( 'Cache-Control: no-store, no-cache, must-revalidate' );
- header( 'Cache-Control: post-check=0, pre-check=0', false );
- header( 'Pragma: no-cache' );
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" />
-
- <title>DataTables unit testing</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" language="javascript" src="../unit_test.js"></script>
- <?php
- $aScripts = explode( ":", $_GET['scripts'] );
- for ( $i=0 ; $i<count($aScripts) ; $i++ )
- {
- echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n";
- }
- ?>
- </head>
- <body id="dt_example">
- <div id="container">
- <div id="demo">
- <h1>Live example</h1>
- <table>
- <thead/>
- <tbody>
- <tr>
- <td>
- <div>
- <table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th width="25%">Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tbody>
- <tr class="odd gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center"> 4</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center"> 4</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center"> 4</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center"> 4</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center"> 4</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center"> 4</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center"> 4</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center"> 4</td>
- <td class="center">X</td>
- </tr>
- </tbody>
- </table>
- </div>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/complex_header_2.php b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/complex_header_2.php
deleted file mode 100644
index 6795dbe3..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/complex_header_2.php
+++ /dev/null
@@ -1,485 +0,0 @@
-<?php
- header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
- header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
- header( 'Cache-Control: no-store, no-cache, must-revalidate' );
- header( 'Cache-Control: post-check=0, pre-check=0', false );
- header( 'Pragma: no-cache' );
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" />
-
- <title>DataTables unit testing</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" language="javascript" src="../unit_test.js"></script>
- <?php
- $aScripts = explode( ":", $_GET['scripts'] );
- for ( $i=0 ; $i<count($aScripts) ; $i++ )
- {
- echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n";
- }
- ?>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> unit test template for reading DOM data
- </div>
-
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th class="bl bt">1</th>
- <th colspan="3" rowspan="2" class="bl br bt">2</th>
- <th class="br bt">3</th>
- </tr>
- <tr>
- <th class="bl br" rowspan="3">4</th>
- <td class="bl br">5</td>
- </tr>
- <tr>
- <th class="bl br" colspan="2">6</th>
- <th class="br" rowspan="3">7</th>
- <th class="br bt" rowspan="3">8</th>
- </tr>
- <tr>
- <th class="bl br">9</th>
- <th class="bl br">10</th>
- </tr>
- <tr>
- <th class="bl br" colspan="2">11</th>
- <th class="bl br">12</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th class="bl bt">1</th>
- <th colspan="3" rowspan="2" class="bl br bt">2</th>
- <th class="br bt">3</th>
- </tr>
- <tr>
- <th class="bl br">4</th>
- <th class="bl br">5</th>
- </tr>
- <tr>
- <th class="bl br" colspan="5">6</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="gradeX">
- <td>Trident</td>
- <td>Internet
- Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Trident</td>
- <td>Internet
- Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/deferred_table.php b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/deferred_table.php
deleted file mode 100644
index d98a4de9..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/deferred_table.php
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
- header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
- header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
- header( 'Cache-Control: no-store, no-cache, must-revalidate' );
- header( 'Cache-Control: post-check=0, pre-check=0', false );
- header( 'Pragma: no-cache' );
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" />
-
- <title>DataTables unit testing</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" language="javascript" src="../unit_test.js"></script>
- <?php
- $aScripts = explode( ":", $_GET['scripts'] );
- for ( $i=0 ; $i<count($aScripts) ; $i++ )
- {
- echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n";
- }
- ?>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> unit test template for reading DOM data
- </div>
-
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tbody>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- </tbody>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
-</table>
- </div>
- <div class="spacer"></div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/dom_data.php b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/dom_data.php
deleted file mode 100644
index b5fed473..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/dom_data.php
+++ /dev/null
@@ -1,465 +0,0 @@
-<?php
- header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
- header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
- header( 'Cache-Control: no-store, no-cache, must-revalidate' );
- header( 'Cache-Control: post-check=0, pre-check=0', false );
- header( 'Pragma: no-cache' );
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" />
-
- <title>DataTables unit testing</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" language="javascript" src="../unit_test.js"></script>
- <?php
- $aScripts = explode( ":", $_GET['scripts'] );
- for ( $i=0 ; $i<count($aScripts) ; $i++ )
- {
- echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n";
- }
- ?>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> unit test template for reading DOM data
- </div>
-
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tbody>
- <tr class="gradeX">
- <td>Trident</td>
- <td>Internet
- Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Trident</td>
- <td>Internet
- Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
-</table>
- </div>
- <div class="spacer"></div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/dom_data_th.php b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/dom_data_th.php
deleted file mode 100644
index 1faf9ab3..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/dom_data_th.php
+++ /dev/null
@@ -1,465 +0,0 @@
-<?php
- header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
- header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
- header( 'Cache-Control: no-store, no-cache, must-revalidate' );
- header( 'Cache-Control: post-check=0, pre-check=0', false );
- header( 'Pragma: no-cache' );
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" />
-
- <title>DataTables unit testing</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" language="javascript" src="../unit_test.js"></script>
- <?php
- $aScripts = explode( ":", $_GET['scripts'] );
- for ( $i=0 ; $i<count($aScripts) ; $i++ )
- {
- echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n";
- }
- ?>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> unit test template for reading DOM data
- </div>
-
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tbody>
- <tr class="gradeX">
- <td>Trident</td>
- <td>Internet
- Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Trident</td>
- <td>Internet
- Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <th>Gecko</th>
- <th>Netscape Navigator 9</th>
- <th>Win 98+ / OSX.2+</th>
- <th class="center">1.8</th>
- <th class="center">A</th>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <th>Mozilla 1.0</th>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
-</table>
- </div>
- <div class="spacer"></div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/dom_data_two_headers.php b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/dom_data_two_headers.php
deleted file mode 100644
index 09093b99..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/dom_data_two_headers.php
+++ /dev/null
@@ -1,472 +0,0 @@
-<?php
- header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
- header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
- header( 'Cache-Control: no-store, no-cache, must-revalidate' );
- header( 'Cache-Control: post-check=0, pre-check=0', false );
- header( 'Pragma: no-cache' );
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" />
-
- <title>DataTables unit testing</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" language="javascript" src="../unit_test.js"></script>
- <?php
- $aScripts = explode( ":", $_GET['scripts'] );
- for ( $i=0 ; $i<count($aScripts) ; $i++ )
- {
- echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n";
- }
- ?>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> unit test template for reading DOM data - with two rows in header
- </div>
-
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tbody>
- <tr class="gradeX">
- <td>Trident</td>
- <td>Internet
- Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Trident</td>
- <td>Internet
- Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
-</table>
- </div>
- <div class="spacer"></div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/dymanic_table.php b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/dymanic_table.php
deleted file mode 100644
index 49606c5f..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/dymanic_table.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
- header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
- header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
- header( 'Cache-Control: no-store, no-cache, must-revalidate' );
- header( 'Cache-Control: post-check=0, pre-check=0', false );
- header( 'Pragma: no-cache' );
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" />
-
- <title>DataTables unit testing</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" language="javascript" src="../unit_test.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready( function () {
- $('#demo').html( '<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"></table>' );
- } );
- </script>
- <?php
- $aScripts = explode( ":", $_GET['scripts'] );
- for ( $i=0 ; $i<count($aScripts) ; $i++ )
- {
- echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n";
- }
- ?>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> dynamic table template
- </div>
-
- <h1>Live example</h1>
- <div id="demo"></div>
- <div class="spacer"></div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/empty_table.php b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/empty_table.php
deleted file mode 100644
index 0647f308..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/empty_table.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
- header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
- header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
- header( 'Cache-Control: no-store, no-cache, must-revalidate' );
- header( 'Cache-Control: post-check=0, pre-check=0', false );
- header( 'Pragma: no-cache' );
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" />
-
- <title>DataTables unit testing</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" language="javascript" src="../unit_test.js"></script>
- <?php
- $aScripts = explode( ":", $_GET['scripts'] );
- for ( $i=0 ; $i<count($aScripts) ; $i++ )
- {
- echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n";
- }
- ?>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> empty table template
- </div>
-
- <h1>Live example</h1>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tbody>
-
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/html_table.php b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/html_table.php
deleted file mode 100644
index 123f54b9..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/html_table.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
- header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
- header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
- header( 'Cache-Control: no-store, no-cache, must-revalidate' );
- header( 'Cache-Control: post-check=0, pre-check=0', false );
- header( 'Pragma: no-cache' );
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" />
-
- <title>DataTables unit testing</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" language="javascript" src="../unit_test.js"></script>
- <?php
- $aScripts = explode( ":", $_GET['scripts'] );
- for ( $i=0 ; $i<count($aScripts) ; $i++ )
- {
- echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n";
- }
- ?>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> table with HTML elements template
- </div>
-
- <h1>Live example</h1>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Reflection</th>
- <th>Link</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>1</td>
- <td><a href="http://www.sprymedia.co.uk/article/DataTables">DataTables</a></td>
- </tr>
- <tr>
- <td>2</td>
- <td><a href="http://www.sprymedia.co.uk/article/Integrity">A link to Integrity</a></td>
- </tr>
- <tr>
- <td>3</td>
- <td><a href="http://www.sprymedia.co.uk/article/Integrity">Integrity</a></td>
- </tr>
- <tr>
- <td>4</td>
- <td>EIntegrity</td>
- </tr>
-</table>
- </div>
- <div class="spacer"></div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/js_data.php b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/js_data.php
deleted file mode 100644
index 61f1852b..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/js_data.php
+++ /dev/null
@@ -1,124 +0,0 @@
-<?php
- header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
- header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
- header( 'Cache-Control: no-store, no-cache, must-revalidate' );
- header( 'Cache-Control: post-check=0, pre-check=0', false );
- header( 'Pragma: no-cache' );
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" />
-
- <title>DataTables unit testing</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" language="javascript" src="../unit_test.js"></script>
- <script type="text/javascript" charset="utf-8">
- /* Make the data source available for testing */
- var gaaData = [
- ['Trident','Internet Explorer 4.0','Win 95+','4','X'],
- ['Trident','Internet Explorer 5.0','Win 95+','5','C'],
- ['Trident','Internet Explorer 5.5','Win 95+','5.5','A'],
- ['Trident','Internet Explorer 6','Win 98+','6','A'],
- ['Trident','Internet Explorer 7','Win XP SP2+','7','A'],
- ['Trident','AOL browser (AOL desktop)','Win XP','6','A'],
- ['Gecko','Firefox 1.0','Win 98+ / OSX.2+','1.7','A'],
- ['Gecko','Firefox 1.5','Win 98+ / OSX.2+','1.8','A'],
- ['Gecko','Firefox 2.0','Win 98+ / OSX.2+','1.8','A'],
- ['Gecko','Firefox 3.0','Win 2k+ / OSX.3+','1.9','A'],
- ['Gecko','Camino 1.0','OSX.2+','1.8','A'],
- ['Gecko','Camino 1.5','OSX.3+','1.8','A'],
- ['Gecko','Netscape 7.2','Win 95+ / Mac OS 8.6-9.2','1.7','A'],
- ['Gecko','Netscape Browser 8','Win 98SE+','1.7','A'],
- ['Gecko','Netscape Navigator 9','Win 98+ / OSX.2+','1.8','A'],
- ['Gecko','Mozilla 1.0','Win 95+ / OSX.1+',1,'A'],
- ['Gecko','Mozilla 1.1','Win 95+ / OSX.1+',1.1,'A'],
- ['Gecko','Mozilla 1.2','Win 95+ / OSX.1+',1.2,'A'],
- ['Gecko','Mozilla 1.3','Win 95+ / OSX.1+',1.3,'A'],
- ['Gecko','Mozilla 1.4','Win 95+ / OSX.1+',1.4,'A'],
- ['Gecko','Mozilla 1.5','Win 95+ / OSX.1+',1.5,'A'],
- ['Gecko','Mozilla 1.6','Win 95+ / OSX.1+',1.6,'A'],
- ['Gecko','Mozilla 1.7','Win 98+ / OSX.1+',1.7,'A'],
- ['Gecko','Mozilla 1.8','Win 98+ / OSX.1+',1.8,'A'],
- ['Gecko','Seamonkey 1.1','Win 98+ / OSX.2+','1.8','A'],
- ['Gecko','Epiphany 2.20','Gnome','1.8','A'],
- ['Webkit','Safari 1.2','OSX.3','125.5','A'],
- ['Webkit','Safari 1.3','OSX.3','312.8','A'],
- ['Webkit','Safari 2.0','OSX.4+','419.3','A'],
- ['Webkit','Safari 3.0','OSX.4+','522.1','A'],
- ['Webkit','OmniWeb 5.5','OSX.4+','420','A'],
- ['Webkit','iPod Touch / iPhone','iPod','420.1','A'],
- ['Webkit','S60','S60','413','A'],
- ['Presto','Opera 7.0','Win 95+ / OSX.1+','-','A'],
- ['Presto','Opera 7.5','Win 95+ / OSX.2+','-','A'],
- ['Presto','Opera 8.0','Win 95+ / OSX.2+','-','A'],
- ['Presto','Opera 8.5','Win 95+ / OSX.2+','-','A'],
- ['Presto','Opera 9.0','Win 95+ / OSX.3+','-','A'],
- ['Presto','Opera 9.2','Win 88+ / OSX.3+','-','A'],
- ['Presto','Opera 9.5','Win 88+ / OSX.3+','-','A'],
- ['Presto','Opera for Wii','Wii','-','A'],
- ['Presto','Nokia N800','N800','-','A'],
- ['Presto','Nintendo DS browser','Nintendo DS','8.5','C/A<sup>1</sup>'],
- ['KHTML','Konqureror 3.1','KDE 3.1','3.1','C'],
- ['KHTML','Konqureror 3.3','KDE 3.3','3.3','A'],
- ['KHTML','Konqureror 3.5','KDE 3.5','3.5','A'],
- ['Tasman','Internet Explorer 4.5','Mac OS 8-9','-','X'],
- ['Tasman','Internet Explorer 5.1','Mac OS 7.6-9','1','C'],
- ['Tasman','Internet Explorer 5.2','Mac OS 8-X','1','C'],
- ['Misc','NetFront 3.1','Embedded devices','-','C'],
- ['Misc','NetFront 3.4','Embedded devices','-','A'],
- ['Misc','Dillo 0.8','Embedded devices','-','X'],
- ['Misc','Links','Text only','-','X'],
- ['Misc','Lynx','Text only','-','X'],
- ['Misc','IE Mobile','Windows Mobile 6','-','C'],
- ['Misc','PSP browser','PSP','-','C'],
- ['Other browsers','All others','-','-','U']
- ];
- </script>
- <?php
- $aScripts = explode( ":", $_GET['scripts'] );
- for ( $i=0 ; $i<count($aScripts) ; $i++ )
- {
- echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n";
- }
- ?>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> unit test template for reading DOM data
- </div>
-
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tbody>
- </tbody>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
-</table>
- </div>
- <div class="spacer"></div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/js_data_mixed_types.php b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/js_data_mixed_types.php
deleted file mode 100644
index 9cdd0aa4..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/js_data_mixed_types.php
+++ /dev/null
@@ -1,124 +0,0 @@
-<?php
- header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
- header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
- header( 'Cache-Control: no-store, no-cache, must-revalidate' );
- header( 'Cache-Control: post-check=0, pre-check=0', false );
- header( 'Pragma: no-cache' );
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" />
-
- <title>DataTables unit testing</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" language="javascript" src="../unit_test.js"></script>
- <script type="text/javascript" charset="utf-8">
- /* Make the data source available for testing */
- var gaaData = [
- ["Trident",null,"Win 95+","4","X"],
- ["Trident","Internet Explorer 5.0","Win 95+","5","C"],
- ["Trident","Internet Explorer 5.5","Win 95+","5.5","A"],
- [null,"Internet Explorer 6","Win 98+","6","A"],
- ["Trident","Internet Explorer 7","Win XP SP2+","7","A"],
- ["Trident","AOL browser (AOL desktop)","Win XP","6","A"],
- ["Gecko","Firefox 1.0","Win 98+ / OSX.2+","1.7","A"],
- ["Gecko","Firefox 1.5","Win 98+ / OSX.2+",null,"A"],
- ["Gecko","Firefox 2.0","Win 98+ / OSX.2+",1.8,"A"],
- ["Gecko","Firefox 3.0","Win 2k+ / OSX.3+","","A"],
- ["Gecko","Camino 1.0","OSX.2+","1.8","A"],
- ["Gecko","Camino 1.5","OSX.3+","1.8","A"],
- ["Gecko","Netscape 7.2","Win 95+ / Mac OS 8.6-9.2","1.7","A"],
- ["Gecko","Netscape Browser 8","Win 98SE+","1.7","A"],
- ["Gecko","Netscape Navigator 9","Win 98+ / OSX.2+","1.8","A"],
- ["Gecko","Mozilla 1.0","Win 95+ / OSX.1+",1,"A"],
- ["Gecko","Mozilla 1.1","Win 95+ / OSX.1+",1.1,"A"],
- ["Gecko",true,"Win 95+ / OSX.1+",1.2,"A"],
- ["Gecko",false,"Win 95+ / OSX.1+",1.3,"A"],
- ["Gecko","Mozilla 1.4","Win 95+ / OSX.1+",1.4,"A"],
- ["Gecko","Mozilla 1.5","Win 95+ / OSX.1+",1.5,"A"],
- ["Gecko","Mozilla 1.6","Win 95+ / OSX.1+",1.6,"A"],
- ["Gecko","Mozilla 1.7","Win 98+ / OSX.1+",1.7,"A"],
- ["Gecko","Mozilla 1.8","Win 98+ / OSX.1+",1.8,"A"],
- ["Gecko","Seamonkey 1.1","Win 98+ / OSX.2+","1.8","A"],
- ["Gecko","Epiphany 2.20","Gnome","1.8","A"],
- ["Webkit","Safari 1.2","OSX.3","125.5","A"],
- ["Webkit","Safari 1.3","OSX.3","312.8","A"],
- ["Webkit","Safari 2.0","OSX.4+","419.3","A"],
- ["Webkit","Safari 3.0","OSX.4+","522.1","A"],
- ["Webkit","OmniWeb 5.5","OSX.4+","420","A"],
- ["Webkit","iPod Touch / iPhone","iPod","420.1","A"],
- ["Webkit","S60","S60","413","A"],
- ["Presto","Opera 7.0","Win 95+ / OSX.1+","-","A"],
- ["Presto","Opera 7.5","Win 95+ / OSX.2+","-","A"],
- ["Presto","Opera 8.0","Win 95+ / OSX.2+","-","A"],
- ["Presto","Opera 8.5","Win 95+ / OSX.2+","-","A"],
- ["Presto","Opera 9.0","Win 95+ / OSX.3+","-","A"],
- ["Presto","Opera 9.2","Win 88+ / OSX.3+","-","A"],
- ["Presto","Opera 9.5","Win 88+ / OSX.3+","-","A"],
- ["Presto","Opera for Wii","Wii","-","A"],
- ["Presto","Nokia N800","N800","-","A"],
- ["Presto","Nintendo DS browser","Nintendo DS","8.5","C/A<sup>1</sup>"],
- ["KHTML","Konqureror 3.1","KDE 3.1","3.1","C"],
- ["KHTML","Konqureror 3.3","KDE 3.3","3.3","A"],
- ["KHTML","Konqureror 3.5","KDE 3.5","3.5","A"],
- ["Tasman","Internet Explorer 4.5","Mac OS 8-9","-","X"],
- ["Tasman","Internet Explorer 5.1","Mac OS 7.6-9","1","C"],
- ["Tasman","Internet Explorer 5.2","Mac OS 8-X","1","C"],
- ["Misc","NetFront 3.1","Embedded devices","-","C"],
- ["Misc","NetFront 3.4","Embedded devices","-","A"],
- ["Misc","Dillo 0.8","Embedded devices","-","X"],
- ["Misc","Links","Text only","-","X"],
- ["Misc","Lynx","Text only","-","X"],
- ["Misc","IE Mobile","Windows Mobile 6","-","C"],
- ["Misc","PSP browser","PSP","-","C"],
- ["Other browsers","All others","-","-","U"]
- ];
- </script>
- <?php
- $aScripts = explode( ":", $_GET['scripts'] );
- for ( $i=0 ; $i<count($aScripts) ; $i++ )
- {
- echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n";
- }
- ?>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> unit test template for reading DOM data
- </div>
-
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tbody>
- </tbody>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
-</table>
- </div>
- <div class="spacer"></div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/two_tables.php b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/two_tables.php
deleted file mode 100644
index 89b2aa03..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/templates/two_tables.php
+++ /dev/null
@@ -1,227 +0,0 @@
-<?php
- header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
- header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
- header( 'Cache-Control: no-store, no-cache, must-revalidate' );
- header( 'Cache-Control: post-check=0, pre-check=0', false );
- header( 'Pragma: no-cache' );
-?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" />
-
- <title>DataTables unit testing</title>
- <style type="text/css" title="currentStyle">
- @import "../../css/demo_page.css";
- @import "../../css/demo_table.css";
- </style>
- <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
- <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
- <script type="text/javascript" language="javascript" src="../unit_test.js"></script>
- <?php
- $aScripts = explode( ":", $_GET['scripts'] );
- for ( $i=0 ; $i<count($aScripts) ; $i++ )
- {
- echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n";
- }
- ?>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- <i>DataTables</i> unit test template for two tables
- </div>
-
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example1">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tbody>
- <tr class="gradeX">
- <td>Trident</td>
- <td>testsearchstring <br>html &amp; entity</td>
- <td>Win 95+</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="gradeC">
- <td>Trident</td>
- <td>Internet
- Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- </tbody>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
-</table>
-
-
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example2">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- </tr>
- </thead>
- <tbody>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- </tr>
- </tbody>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- </tr>
- </tfoot>
-</table>
- </div>
- <div class="spacer"></div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests/1_dom/_zero_config.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests/1_dom/_zero_config.js
deleted file mode 100644
index f98449a8..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests/1_dom/_zero_config.js
+++ /dev/null
@@ -1,437 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "Sanity checks for DataTables with DOM data" );
-
-oTest.fnTest(
- "jQuery.dataTable function",
- null,
- function () { return typeof jQuery().dataTable == "function"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableSettings storage array",
- null,
- function () { return typeof jQuery().dataTableSettings == "object"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableExt plugin object",
- null,
- function () { return typeof jQuery().dataTableExt == "object"; }
-);
-
-$(document).ready( function () {
- $('#example').dataTable();
-
- /* Basic checks */
- oTest.fnTest(
- "Length changing div exists",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnTest(
- "Filtering div exists",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- oTest.fnTest(
- "Information div exists",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- oTest.fnTest(
- "Pagination div exists",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnTest(
- "Processing div is off by default",
- null,
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back on first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records - second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 100 records - first page",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('100').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back to 10 records",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('10').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' back to first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - second time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter increased to 'Win 98'",
- function () { $('#example_filter input').val("Win 98").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter decreased to 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - third time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter removed",
- function () { $('#example_filter input').val("").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
-
- /*
- * Filtering
- */
- oTest.fnTest(
- "Filter 'W' - rows",
- function () {
- /* Reset the table such that the old sorting doesn't mess things up */
- oSession.fnRestore();
- $('#example').dataTable();
- $('#example_filter input').val("W").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "Filter 'W' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Wi'",
- function () { $('#example_filter input').val("Wi").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 reverse",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - maintaing reverse sorting col 1",
- function () { $('#example_filter input').val("Win XP").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3 - reversed",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting col 3 - reversed info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere'",
- function () { $('#example_filter input').val("nothinghere").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() ==
- "No matching records found"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter back to blank and 1st column sorting",
- function () {
- $('#example_filter input').val("").keyup();
- $('#example thead th:eq(0)').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry",
- function () {
- $('#example_filter input').val("Win").keyup();
- $('#example_filter input').val("GeckoWin").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry with space",
- function () {
- $('#example_filter input').val("Gecko Win").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; }
- );
-
-
-
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/-complex_header.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/-complex_header.js
deleted file mode 100644
index b8f10abd..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/-complex_header.js
+++ /dev/null
@@ -1,52 +0,0 @@
-// DATA_TEMPLATE: -complex_header
-oTest.fnStart( "Complex header" );
-
-
-$(document).ready( function () {
- $('#example').dataTable();
-
- oTest.fnTest(
- "Sorting on colspan has no effect",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr td:eq(1)').html() == "Firefox 1.0"; }
- );
-
- oTest.fnTest(
- "Sorting on non-unique TH and first TH has no effect",
- function () { $('#example thead th:eq(2)').click(); },
- function () { return $('#example tbody tr td:eq(1)').html() == "Firefox 1.0"; }
- );
-
- oTest.fnTest(
- "Sorting on non-unique TH and second TH will sort",
- function () { $('#example thead th:eq(6)').click(); },
- function () { return $('#example tbody tr td:eq(4)').html() == "A"; }
- );
-
- oTest.fnTest(
- "Sorting on non-unique TH and second TH will sort - reserve",
- function () { $('#example thead th:eq(6)').click(); },
- function () { return $('#example tbody tr td:eq(4)').html() == "X"; }
- );
-
- oTest.fnTest(
- "Sorting on unique TH will sort",
- function () { $('#example thead th:eq(5)').click(); },
- function () { return $('#example tbody tr td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting on unique TH will sort - reserve",
- function () { $('#example thead th:eq(5)').click(); },
- function () { return $('#example tbody tr td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting on unique rowspan TH will sort",
- function () { $('#example thead th:eq(0)').click(); },
- function () { return $('#example tbody tr td:eq(0)').html() == "Gecko"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/-iDraw.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/-iDraw.js
deleted file mode 100644
index da64689e..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/-iDraw.js
+++ /dev/null
@@ -1,41 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "iDraw - check that iDraw increments for each draw" );
-
-
-$(document).ready( function () {
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "After first draw, iDraw is 1",
- null,
- function () { return oSettings.iDraw == 1; }
- );
-
- oTest.fnTest(
- "After second draw, iDraw is 2",
- function () { oTable.fnDraw() },
- function () { return oSettings.iDraw == 2; }
- );
-
- oTest.fnTest(
- "After sort",
- function () { oTable.fnSort([[1,'asc']]) },
- function () { return oSettings.iDraw == 3; }
- );
-
- oTest.fnTest(
- "After filter",
- function () { oTable.fnFilter('gecko') },
- function () { return oSettings.iDraw == 4; }
- );
-
- oTest.fnTest(
- "After another filter",
- function () { oTable.fnFilter('gec') },
- function () { return oSettings.iDraw == 5; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2512.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2512.js
deleted file mode 100644
index cdc9efbf..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2512.js
+++ /dev/null
@@ -1,17 +0,0 @@
-// DATA_TEMPLATE: 2512
-oTest.fnStart( "Check filtering with BR and HTML entity" );
-
-
-$(document).ready( function () {
- $('#example').dataTable();
-
- /* Basic checks */
- oTest.fnTest(
- "Check filtering",
- function () { $('#example').dataTable().fnFilter('testsearchstring'); },
- function () { return $('#example tbody tr').length == 1; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2530-2.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2530-2.js
deleted file mode 100644
index a772c2cb..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2530-2.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "User given with is left when no scrolling" );
-
-$(document).ready( function () {
- $('#example')[0].style.width = "80%";
- $('#example').dataTable();
-
- oTest.fnTest(
- "Check user width is left",
- null,
- function () { return $('#example').width() == 640; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2530.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2530.js
deleted file mode 100644
index d619d79c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2530.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// DATA_TEMPLATE: dymanic_table
-oTest.fnStart( "2530 - Check width's when dealing with empty strings" );
-
-
-$(document).ready( function () {
- $('#example').dataTable( {
- "aaData": [
- ['','Internet Explorer 4.0','Win 95+','4','X'],
- ['','Internet Explorer 5.0','Win 95+','5','C']
- ],
- "aoColumns": [
- { "sTitle": "", "sWidth": "40px" },
- { "sTitle": "Browser" },
- { "sTitle": "Platform" },
- { "sTitle": "Version", "sClass": "center" },
- { "sTitle": "Grade", "sClass": "center" }
- ]
- } );
-
- /* Basic checks */
- oTest.fnTest(
- "Check calculated widths",
- null,
- function () { return $('#example tbody tr td:eq(0)').width() < 100; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2569.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2569.js
deleted file mode 100644
index 4c19ca53..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2569.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "Destroy with hidden columns" );
-
-$(document).ready( function () {
- $('#example').dataTable( {
- "aoColumnDefs": [
- { "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] },
- { "bVisible": false, "aTargets": [ 3 ] }
- ]
- } );
- $('#example').dataTable().fnDestroy();
-
- oTest.fnTest(
- "Check that the number of columns in table is correct",
- null,
- function () { return $('#example tbody tr:eq(0) td').length == 5; }
- );
-
-
- oTest.fnTest(
- "And with scrolling",
- function () {
- $('#example').dataTable( {
- "sScrollY": 200,
- "aoColumnDefs": [
- { "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] },
- { "bVisible": false, "aTargets": [ 3 ] }
- ]
- } );
- $('#example').dataTable().fnDestroy();
- },
- function () { return $('#example tbody tr:eq(0) td').length == 5; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2600.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2600.js
deleted file mode 100644
index 75ad7338..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2600.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "2600 - Display rewind when changing length" );
-
-$(document).ready( function () {
- $('#example').dataTable();
-
- oTest.fnTest(
- "Info correct on init",
- null,
- function () { return $('#example_info').html() == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Page 2",
- function () { $('#example_next').click(); },
- function () { return $('#example_info').html() == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Page 3",
- function () { $('#example_next').click(); },
- function () { return $('#example_info').html() == "Showing 21 to 30 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Page 4",
- function () { $('#example_next').click(); },
- function () { return $('#example_info').html() == "Showing 31 to 40 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Page 5",
- function () { $('#example_next').click(); },
- function () { return $('#example_info').html() == "Showing 41 to 50 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Rewind",
- function () { $('#example_length select').val('100'); $('#example_length select').change(); },
- function () { return $('#example_info').html() == "Showing 1 to 57 of 57 entries"; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2608.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2608.js
deleted file mode 100644
index fd90d101..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2608.js
+++ /dev/null
@@ -1,54 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "2608 - State saving escaping filters" );
-
-$(document).ready( function () {
- $('#example').dataTable( {
- "bStateSave": true
- } );
-
- oTest.fnTest(
- "Set the filter",
- function () {
- $('#example_filter input').val( '\\s*CVM\\s*$' );
- $('#example_filter input').keyup();
- },
- function () { return $('#example_filter input').val() == '\\s*CVM\\s*$'; }
- );
-
- oTest.fnTest(
- "Destroy the table and remake it - checking the filter was saved",
- function () {
- $('#example').dataTable( {
- "bStateSave": true,
- "bDestroy": true
- } );
- },
- function () { return $('#example_filter input').val() == '\\s*CVM\\s*$'; }
- );
-
- oTest.fnTest(
- "Do it again without state saving and make sure filter is empty",
- function () {
- $('#example').dataTable( {
- "bDestroy": true
- } );
- },
- function () { return $('#example_filter input').val() == ''; }
- );
-
- oTest.fnTest(
- "Clean up",
- function () {
- $('#example').dataTable( {
- "bStateSave": true,
- "bDestroy": true
- } );
- $('#example_filter input').val( '' );
- $('#example_filter input').keyup();
- },
- function () { return $('#example_filter input').val() == ''; }
- );
-
- oTest.fnCookieDestroy( $('#example').dataTable() );
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2635.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2635.js
deleted file mode 100644
index 7cfc38eb..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2635.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "2635 - Hiding column and state saving" );
-
-$(document).ready( function () {
- $('#example').dataTable( {
- "bStateSave": true
- } );
-
- oTest.fnTest(
- "Set the hidden column",
- function () {
- $('#example').dataTable().fnSetColumnVis( 2, false );
- },
- function () { return $('#example thead th').length == 4; }
- );
-
- oTest.fnTest(
- "Destroy the table and remake it - checking one column was removed",
- function () {
- $('#example').dataTable( {
- "bStateSave": true,
- "bDestroy": true
- } );
- },
- function () { return $('#example thead th').length == 4; }
- );
-
- oTest.fnTest(
- "Do it again without state saving and make sure we are back to 5 columns",
- function () {
- $('#example').dataTable( {
- "bDestroy": true
- } );
- },
- function () { return $('#example thead th').length == 5; }
- );
-
- oTest.fnCookieDestroy( $('#example').dataTable() );
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2746-stable-sort.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2746-stable-sort.js
deleted file mode 100644
index 671c0148..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2746-stable-sort.js
+++ /dev/null
@@ -1,199 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "2746 - Stable sorting" );
-
-$(document).ready( function () {
- $('#example').dataTable();
-
- oTest.fnTest(
- "Initial sort",
- null,
- function () {
- var ret =
- $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko' &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == 'Gecko' &&
- $('#example tbody tr:eq(0) td:eq(1)').html() == 'Firefox 1.0' &&
- $('#example tbody tr:eq(1) td:eq(1)').html() == 'Firefox 1.5' &&
- $('#example tbody tr:eq(2) td:eq(1)').html() == 'Firefox 2.0';
- return ret;
- }
- );
-
- oTest.fnTest(
- "Reserve initial sort",
- function () {
- $('#example thead th:eq(0)').click();
- },
- function () {
- var ret =
- $('#example tbody tr:eq(0) td:eq(0)').html() == 'Webkit' &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == 'Webkit' &&
- $('#example tbody tr:eq(0) td:eq(1)').html() == 'Safari 1.2' &&
- $('#example tbody tr:eq(1) td:eq(1)').html() == 'Safari 1.3' &&
- $('#example tbody tr:eq(2) td:eq(1)').html() == 'Safari 2.0';
- return ret;
- }
- );
-
- oTest.fnTest(
- "Reserve to go back to initial sort sort",
- function () {
- $('#example thead th:eq(0)').click();
- },
- function () {
- var ret =
- $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko' &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == 'Gecko' &&
- $('#example tbody tr:eq(0) td:eq(1)').html() == 'Firefox 1.0' &&
- $('#example tbody tr:eq(1) td:eq(1)').html() == 'Firefox 1.5' &&
- $('#example tbody tr:eq(2) td:eq(1)').html() == 'Firefox 2.0';
- return ret;
- }
- );
-
- oTest.fnTest(
- "Reserve initial sort again",
- function () {
- $('#example thead th:eq(0)').click();
- },
- function () {
- var ret =
- $('#example tbody tr:eq(0) td:eq(0)').html() == 'Webkit' &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == 'Webkit' &&
- $('#example tbody tr:eq(0) td:eq(1)').html() == 'Safari 1.2' &&
- $('#example tbody tr:eq(1) td:eq(1)').html() == 'Safari 1.3' &&
- $('#example tbody tr:eq(2) td:eq(1)').html() == 'Safari 2.0';
- return ret;
- }
- );
-
- oTest.fnTest(
- "And once more back to the initial sort",
- function () {
- $('#example thead th:eq(0)').click();
- },
- function () {
- var ret =
- $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko' &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == 'Gecko' &&
- $('#example tbody tr:eq(0) td:eq(1)').html() == 'Firefox 1.0' &&
- $('#example tbody tr:eq(1) td:eq(1)').html() == 'Firefox 1.5' &&
- $('#example tbody tr:eq(2) td:eq(1)').html() == 'Firefox 2.0';
- return ret;
- }
- );
-
- oTest.fnTest(
- "Sort on second column",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () {
- var ret =
- $('#example tbody tr:eq(0) td:eq(0)').html() == 'Other browsers' &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == 'Trident' &&
- $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others' &&
- $('#example tbody tr:eq(1) td:eq(1)').html() == 'AOL browser (AOL desktop)' &&
- $('#example tbody tr:eq(2) td:eq(1)').html() == 'Camino 1.0';
- return ret;
- }
- );
-
- oTest.fnTest(
- "Reserve sort on second column",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () {
- var ret =
- $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko' &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == 'Webkit' &&
- $('#example tbody tr:eq(0) td:eq(1)').html() == 'Seamonkey 1.1' &&
- $('#example tbody tr:eq(1) td:eq(1)').html() == 'Safari 3.0' &&
- $('#example tbody tr:eq(2) td:eq(1)').html() == 'Safari 2.0';
- return ret;
- }
- );
-
- oTest.fnTest(
- "And back to asc sorting on second column",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () {
- var ret =
- $('#example tbody tr:eq(0) td:eq(0)').html() == 'Other browsers' &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == 'Trident' &&
- $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others' &&
- $('#example tbody tr:eq(1) td:eq(1)').html() == 'AOL browser (AOL desktop)' &&
- $('#example tbody tr:eq(2) td:eq(1)').html() == 'Camino 1.0';
- return ret;
- }
- );
-
- oTest.fnTest(
- "Sort on third column, having now sorted on second",
- function () {
- $('#example thead th:eq(2)').click();
- },
- function () {
- var ret =
- $('#example tbody tr:eq(0) td:eq(0)').html() == 'Other browsers' &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == 'Misc' &&
- $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others' &&
- $('#example tbody tr:eq(1) td:eq(1)').html() == 'Dillo 0.8' &&
- $('#example tbody tr:eq(2) td:eq(1)').html() == 'NetFront 3.1';
- return ret;
- }
- );
-
- oTest.fnTest(
- "Reserve sort on third column",
- function () {
- $('#example thead th:eq(2)').click();
- },
- function () {
- var ret =
- $('#example tbody tr:eq(0) td:eq(0)').html() == 'Misc' &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == 'Trident' &&
- $('#example tbody tr:eq(0) td:eq(1)').html() == 'IE Mobile' &&
- $('#example tbody tr:eq(1) td:eq(1)').html() == 'Internet Explorer 7' &&
- $('#example tbody tr:eq(2) td:eq(1)').html() == 'AOL browser (AOL desktop)';
- return ret;
- }
- );
-
- oTest.fnTest(
- "Return sorting on third column to asc",
- function () {
- $('#example thead th:eq(2)').click();
- },
- function () {
- var ret =
- $('#example tbody tr:eq(0) td:eq(0)').html() == 'Other browsers' &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == 'Misc' &&
- $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others' &&
- $('#example tbody tr:eq(1) td:eq(1)').html() == 'Dillo 0.8' &&
- $('#example tbody tr:eq(2) td:eq(1)').html() == 'NetFront 3.1';
- return ret;
- }
- );
-
- oTest.fnTest(
- "Sort on first column having sorted on second then third columns",
- function () {
- $('#example thead th:eq(0)').click();
- },
- function () {
- var ret =
- $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko' &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == 'Gecko' &&
- $('#example tbody tr:eq(0) td:eq(1)').html() == 'Epiphany 2.20' &&
- $('#example tbody tr:eq(1) td:eq(1)').html() == 'Camino 1.0' &&
- $('#example tbody tr:eq(2) td:eq(1)').html() == 'Camino 1.5';
- return ret;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2799.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2799.js
deleted file mode 100644
index 97efa682..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2799.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// DATA_TEMPLATE: two_tables
-oTest.fnStart( "Initialise two tables" );
-
-$(document).ready( function () {
- $('table.display').dataTable();
-
- oTest.fnTest(
- "Check that initialisation was okay",
- null,
- function () { return true; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2840-restore-table-width.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2840-restore-table-width.js
deleted file mode 100644
index 93fbdac8..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2840-restore-table-width.js
+++ /dev/null
@@ -1,19 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "2840 - Restore table width on fnDestroy" );
-
-$(document).ready( function () {
- document.cookie = "";
- $('#example').dataTable( {
- "sScrollX": "100%",
- "sScrollXInner": "110%"
- } );
- $('#example').dataTable().fnDestroy();
-
- oTest.fnTest(
- "Width after destroy",
- null,
- function () { return $('#example').width() == "800"; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2914-state-save-sort.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2914-state-save-sort.js
deleted file mode 100644
index 40083e86..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/2914-state-save-sort.js
+++ /dev/null
@@ -1,39 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "2914 - State saving with an empty array" );
-
-$(document).ready( function () {
- document.cookie = "";
- $('#example').dataTable( {
- "bStateSave": true,
- "aaSorting": []
- } );
-
- oTest.fnTest(
- "No sort",
- null,
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Next page",
- function () {
- $('#example').dataTable().fnPageChange( 'next' );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; }
- );
-
- oTest.fnTest(
- "Destroy the table and remake it - checking we are still on the next page",
- function () {
- $('#example').dataTable( {
- "bStateSave": true,
- "aaSorting": [],
- "bDestroy": true
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; }
- );
-
- oTest.fnCookieDestroy( $('#example').dataTable() );
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/5396-fnUpdate-arrays.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/5396-fnUpdate-arrays.js
deleted file mode 100644
index 70f2251f..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/5396-fnUpdate-arrays.js
+++ /dev/null
@@ -1,103 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "5396 - fnUpdate with 2D arrays for a single row" );
-
-$(document).ready( function () {
- $('#example thead tr').append( '<th>6</th>' );
- $('#example thead tr').append( '<th>7</th>' );
- $('#example thead tr').append( '<th>8</th>' );
- $('#example thead tr').append( '<th>9</th>' );
- $('#example thead tr').append( '<th>10</th>' );
-
- var aDataSet = [
- [
- "1",
- "í™ê¸¸ë™",
- "1154315",
- "etc1",
- [
- [ "test1@daum.net", "2011-03-04" ],
- [ "test1@naver.com", "2009-07-06" ],
- [ "test4@naver.com", ",hide" ],
- [ "test5?@naver.com", "" ]
- ],
- "2011-03-04",
- "show"
- ],
- [
- "2",
- "í™ê¸¸ìˆœ",
- "2154315",
- "etc2",
- [
- [ "test2@daum.net", "2009-09-26" ],
- [ "test2@naver.com", "2009-05-21,hide" ],
- [ "lsb@naver.com", "2010-03-05" ],
- [ "lsb3@naver.com", ",hide" ],
- [ "sooboklee9@daum.net", "2010-03-05" ]
- ],
- "2010-03-05",
- "show"
- ]
-]
-
- var oTable = $('#example').dataTable({
- "aaData": aDataSet,
- "aoColumns": [
- { "mDataProp": "0"},
- { "mDataProp": "1"},
- { "mDataProp": "2"},
- { "mDataProp": "3"},
- { "mDataProp": "4.0.0"},
- { "mDataProp": "4.0.1"},
- { "mDataProp": "4.1.0"},
- { "mDataProp": "4.1.1"},
- { "mDataProp": "5"},
- { "mDataProp": "6"}
- ]
- });
-
-
- oTest.fnTest(
- "Initialisation",
- null,
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').html() == '1';
- }
- );
-
- oTest.fnTest(
- "Update row",
- function () {
- $('#example').dataTable().fnUpdate( [
- "0",
- "í™ê¸¸ìˆœ",
- "2154315",
- "etc2",
- [
- [ "test2@daum.net", "2009-09-26" ],
- [ "test2@naver.com", "2009-05-21,hide" ],
- [ "lsb@naver.com", "2010-03-05" ],
- [ "lsb3@naver.com", ",hide" ],
- [ "sooboklee9@daum.net", "2010-03-05" ]
- ],
- "2010-03-05",
- "show"
- ], 1 );
- },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').html() == '0';
- }
- );
-
- oTest.fnTest(
- "Original row preserved",
- null,
- function () {
- return $('#example tbody tr:eq(1) td:eq(0)').html() == '1';
- }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/5508-xscroll-zero-content.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/5508-xscroll-zero-content.js
deleted file mode 100644
index 5ac7e097..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/5508-xscroll-zero-content.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "5508 - Table container width doesn't change when filtering applied to scrolling table" );
-
-$(document).ready( function () {
- $('#example').dataTable( {
- "sScrollY": "300px",
- "bPaginate": false
- } );
-
- oTest.fnTest(
- "Width of container 800px on init with scroll",
- null,
- function () { return $('div.dataTables_scrollBody').width() == 800; }
- );
-
- oTest.fnTest(
- "Unaltered when filter applied",
- function () { $('#example').dataTable().fnFilter('123'); },
- function () { return $('div.dataTables_scrollBody').width() == 800; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/6776-scrolling-table-grows.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/6776-scrolling-table-grows.js
deleted file mode 100644
index 9d42536f..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/6776-scrolling-table-grows.js
+++ /dev/null
@@ -1,64 +0,0 @@
-// DATA_TEMPLATE: 6776
-oTest.fnStart( "Actions on a scrolling table keep width" );
-
-
-$(document).ready( function () {
- var oTable = $('#example').dataTable( {
- "bFilter": true,
- "bSort": true,
- "sScrollY": "100px",
- "bPaginate": false
- } );
-
- var iWidth = $('div.dataTables_wrapper').width();
-
- oTest.fnTest(
- "First sort has no effect on width",
- function () { $('th:eq(1)').click(); },
- function () { return $('div.dataTables_wrapper').width() == iWidth; }
- );
-
- oTest.fnTest(
- "Second sort has no effect on width",
- function () { $('th:eq(1)').click(); },
- function () { return $('div.dataTables_wrapper').width() == iWidth; }
- );
-
- oTest.fnTest(
- "Third sort has no effect on width",
- function () { $('th:eq(2)').click(); },
- function () { return $('div.dataTables_wrapper').width() == iWidth; }
- );
-
- oTest.fnTest(
- "Filter has no effect on width",
- function () { oTable.fnFilter('i'); },
- function () { return $('div.dataTables_wrapper').width() == iWidth; }
- );
-
- oTest.fnTest(
- "Filter 2 has no effect on width",
- function () { oTable.fnFilter('in'); },
- function () { return $('div.dataTables_wrapper').width() == iWidth; }
- );
-
- oTest.fnTest(
- "No result filter has header and body at same width",
- function () { oTable.fnFilter('xxx'); },
- function () { return $('#example').width() == $('div.dataTables_scrollHeadInner').width(); }
- );
-
- oTest.fnTest(
- "Filter with no results has no effect on width",
- function () { oTable.fnFilter('xxx'); },
- function () { return $('div.dataTables_wrapper').width() == iWidth; }
- );
-
- oTest.fnTest(
- "Filter with no results has table equal to wrapper width",
- function () { oTable.fnFilter('xxx'); },
- function () { return $('div.dataTables_wrapper').width() == $('#example').width(); }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/_zero_config.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/_zero_config.js
deleted file mode 100644
index f98449a8..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/_zero_config.js
+++ /dev/null
@@ -1,437 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "Sanity checks for DataTables with DOM data" );
-
-oTest.fnTest(
- "jQuery.dataTable function",
- null,
- function () { return typeof jQuery().dataTable == "function"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableSettings storage array",
- null,
- function () { return typeof jQuery().dataTableSettings == "object"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableExt plugin object",
- null,
- function () { return typeof jQuery().dataTableExt == "object"; }
-);
-
-$(document).ready( function () {
- $('#example').dataTable();
-
- /* Basic checks */
- oTest.fnTest(
- "Length changing div exists",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnTest(
- "Filtering div exists",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- oTest.fnTest(
- "Information div exists",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- oTest.fnTest(
- "Pagination div exists",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnTest(
- "Processing div is off by default",
- null,
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back on first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records - second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 100 records - first page",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('100').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back to 10 records",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('10').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' back to first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - second time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter increased to 'Win 98'",
- function () { $('#example_filter input').val("Win 98").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter decreased to 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - third time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter removed",
- function () { $('#example_filter input').val("").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
-
- /*
- * Filtering
- */
- oTest.fnTest(
- "Filter 'W' - rows",
- function () {
- /* Reset the table such that the old sorting doesn't mess things up */
- oSession.fnRestore();
- $('#example').dataTable();
- $('#example_filter input').val("W").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "Filter 'W' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Wi'",
- function () { $('#example_filter input').val("Wi").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 reverse",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - maintaing reverse sorting col 1",
- function () { $('#example_filter input').val("Win XP").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3 - reversed",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting col 3 - reversed info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere'",
- function () { $('#example_filter input').val("nothinghere").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() ==
- "No matching records found"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter back to blank and 1st column sorting",
- function () {
- $('#example_filter input').val("").keyup();
- $('#example thead th:eq(0)').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry",
- function () {
- $('#example_filter input').val("Win").keyup();
- $('#example_filter input').val("GeckoWin").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry with space",
- function () {
- $('#example_filter input').val("Gecko Win").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; }
- );
-
-
-
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aaSorting.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aaSorting.js
deleted file mode 100644
index 291f1462..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aaSorting.js
+++ /dev/null
@@ -1,183 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "aaSorting" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Default sorting is single column",
- null,
- function () {
- return oSettings.aaSorting.length == 1 && typeof oSettings.aaSorting[0] == 'object';
- }
- );
-
- oTest.fnTest(
- "Default sorting is first column asc",
- null,
- function () {
- return oSettings.aaSorting[0].length == 3 && oSettings.aaSorting[0][0] == 0 &&
- oSettings.aaSorting[0][1] == 'asc';
- }
- );
-
- oTest.fnTest(
- "Sorting is applied",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
-
- oTest.fnTest(
- "Custom sorting on single string column asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaSorting": [['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
-
- oTest.fnTest(
- "Custom sorting on single string column desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaSorting": [['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
-
- oTest.fnTest(
- "Custom sorting on single int column asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaSorting": [['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
-
- oTest.fnTest(
- "Custom sorting on single int column desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaSorting": [['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
-
- oTest.fnTest(
- "Multi-column sorting (2 column) - string asc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaSorting": [['0','asc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; }
- );
-
- oTest.fnTest(
- "Multi-column sorting (2 column) - string asc / string desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaSorting": [['0','asc'], ['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Multi-column sorting (2 column) - string desc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaSorting": [['0','desc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "iPod Touch / iPhone"; }
- );
-
- oTest.fnTest(
- "Multi-column sorting (2 column) - string desc / string desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaSorting": [['0','desc'], ['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Safari 3.0"; }
- );
-
-
- oTest.fnTest(
- "Multi-column sorting (2 column) - string asc / int asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaSorting": [['0','asc'], ['3','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "1"; }
- );
-
- oTest.fnTest(
- "Multi-column sorting (2 column) - string asc / int desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaSorting": [['0','asc'], ['3','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "1.9"; }
- );
-
- oTest.fnTest(
- "Multi-column sorting (2 column) - string desc / int asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaSorting": [['0','desc'], ['3','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "125.5"; }
- );
-
- oTest.fnTest(
- "Multi-column sorting (2 column) - string desc / int desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaSorting": [['0','desc'], ['3','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Multi-column sorting (3 column) - string asc / int asc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaSorting": [['0','asc'], ['3','asc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody tr:eq(7) td:eq(1)').html() == "Firefox 1.0"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aaSortingFixed.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aaSortingFixed.js
deleted file mode 100644
index 07ce724e..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aaSortingFixed.js
+++ /dev/null
@@ -1,60 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "aaSortingFixed" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "No fixed sorting by default",
- null,
- function () {
- return oSettings.aaSortingFixed == null;
- }
- );
-
-
- oTest.fnTest(
- "Fixed sorting on first column (string/asc) with user sorting on second column (string/asc)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaSortingFixed": [['0','asc']]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; }
- );
-
- oTest.fnTest(
- "Fixed sorting on first column (string/asc) with user sorting on second column (string/desc)",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/asc)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaSortingFixed": [['3','asc']]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/desc)",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "PSP browser"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bSearchable.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bSearchable.js
deleted file mode 100644
index cf2dcf36..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bSearchable.js
+++ /dev/null
@@ -1,67 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "aoColumns.bSeachable" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Columns are searchable by default",
- function () { oTable.fnFilter("Camino"); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html().match(/Camino/); }
- );
-
- oTest.fnTest(
- "Disabling sorting on a column removes it from the global filter",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoColumns": [
- null,
- { "bSearchable": false },
- null,
- null,
- null
- ]
- } );
- oSettings = oTable.fnSettings();
- oTable.fnFilter("Camino");
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnTest(
- "Disabled on one column has no effect on other columns",
- function () { oTable.fnFilter("Webkit"); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; }
- );
-
- oTest.fnTest(
- "Disable filtering on multiple columns",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoColumns": [
- { "bSearchable": false },
- { "bSearchable": false },
- null,
- null,
- null
- ]
- } );
- oSettings = oTable.fnSettings();
- oTable.fnFilter("Webkit");
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnTest(
- "Filter on second disabled column",
- function () { oTable.fnFilter("Camino"); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bSortable.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bSortable.js
deleted file mode 100644
index 5435dad5..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bSortable.js
+++ /dev/null
@@ -1,105 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "aoColumns.bSortable" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "All columns are sortable by default",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Can disable sorting from one column",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aoColumns": [
- null,
- { "bSortable": false },
- null,
- null,
- null
- ]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; }
- );
-
- oTest.fnTest(
- "Disabled column has no sorting class",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") == false; }
- );
-
- oTest.fnTest(
- "Other columns can still sort",
- function () {
- $('#example thead th:eq(4)').click();
- $('#example thead th:eq(4)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; }
- );
-
- oTest.fnTest(
- "Disable sorting on multiple columns - no sorting classes",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aoColumns": [
- null,
- { "bSortable": false },
- null,
- { "bSortable": false },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example thead th:eq(1)').hasClass("sorting") ||
- $('#example thead th:eq(3)').hasClass("sorting")
- return bReturn == false;
- }
- );
-
- oTest.fnTest(
- "Sorting on disabled column 1 has no effect",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; }
- );
-
- oTest.fnTest(
- "Sorting on disabled column 2 has no effect",
- function () {
- $('#example thead th:eq(3)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; }
- );
-
- oTest.fnTest(
- "Second sort on disabled column 2 has no effect",
- function () {
- $('#example thead th:eq(3)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; }
- );
-
- oTest.fnTest(
- "Even with multiple disabled sorting columns other columns can still sort",
- function () {
- $('#example thead th:eq(4)').click();
- $('#example thead th:eq(4)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bUseRendered.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bUseRendered.js
deleted file mode 100644
index 98860c5c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bUseRendered.js
+++ /dev/null
@@ -1,145 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "aoColumns.bUseRendered" );
-
-/* bUseRendered is used to alter sorting data, if false then the original data is used for
- * sorting rather than the rendered data
- */
-
-$(document).ready( function () {
- /* Check the default */
- var mTmp = 0;
-
- var oTable = $('#example').dataTable( {
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( mTmp == 0 ) {
- mTmp++;
- return "aaa";
- } else
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Default for bUseRendered is true - rendered data is used for sorting",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'aaa'; }
- );
-
- oTest.fnTest(
- "When bUseRendered is false, original data is used for sorting",
- function () {
- mTmp = 0;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoColumns": [
- null,
- {
- "bUseRendered": false,
- "fnRender": function (a) {
- if ( mTmp == 0 ) {
- mTmp++;
- return "aaa";
- } else {
- return a.aData[a.iDataColumn];
- }
- }
- },
- null,
- null,
- null
- ]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; }
- );
-
-
- oTest.fnTest(
- "bUseRendered set to false on one columns and true (default) on two others",
- function () {
- mTmp = 0;
- var mTmp2 = 0;
- var mTmp3 = 0;
-
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoColumns": [
- {
- "fnRender": function (a) {
- if ( mTmp == 0 ) {
- mTmp++;
- return "aaa1";
- } else {
- return a.aData[a.iDataColumn];
- }
- }
- },
- {
- "bUseRendered": false,
- "fnRender": function (a) {
- if ( mTmp2 == 0 ) {
- mTmp2++;
- return "aaa2";
- } else {
- return a.aData[a.iDataColumn];
- }
- }
- },
- {
- "fnRender": function (a) {
- if ( mTmp3 == 0 ) {
- mTmp3++;
- return "zzz3";
- } else {
- return a.aData[a.iDataColumn];
- }
- }
- },
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'aaa1'; }
- );
-
- oTest.fnTest(
- "Multi-column rendering - 2nd column sorting",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; }
- );
-
- oTest.fnTest(
- "Multi-column rendering - 3rd column sorting",
- function () {
- $('#example thead th:eq(2)').click();
- $('#example thead th:eq(2)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(2)').html() == 'zzz3'; }
- );
-
- oTest.fnTest(
- "Multi-column rendering - 4th column sorting",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == '-'; }
- );
-
- oTest.fnTest(
- "Multi-column rendering - 5th column sorting",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bVisible.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bVisible.js
deleted file mode 100644
index b158c0b0..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bVisible.js
+++ /dev/null
@@ -1,132 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "aoColumns.bVisible" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "All columns are visible by default",
- null,
- function () { return $('#example tbody tr:eq(0) td').length == 5; }
- );
-
- oTest.fnTest(
- "Can hide one column and it removes td column from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aoColumns": [
- null,
- { "bVisible": false },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 4; }
- );
-
- oTest.fnTest(
- "Can hide one column and it removes thead th column from DOM",
- null,
- function () { return $('#example thead tr:eq(0) th').length == 4; }
- );
-
- oTest.fnTest(
- "Can hide one column and it removes tfoot th column from DOM",
- null,
- function () { return $('#example tfoot tr:eq(0) th').length == 4; }
- );
-
- oTest.fnTest(
- "The correct thead column has been hidden",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Platform(s)" &&
- jqNodes[2].innerHTML == "Engine version" &&
- jqNodes[3].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "The correct tbody column has been hidden",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } );
- },
- function () {
- var jqNodes = $('#example tbody tr:eq(0) td');
- var bReturn =
- jqNodes[0].innerHTML == "Gecko" &&
- jqNodes[1].innerHTML == "Gnome" &&
- jqNodes[2].innerHTML == "1.8" &&
- jqNodes[3].innerHTML == "A";
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "Can hide multiple columns and it removes td column from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aoColumns": [
- null,
- { "bVisible": false },
- { "bVisible": false },
- null,
- { "bVisible": false }
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 2; }
- );
-
- oTest.fnTest(
- "Multiple hide - removes thead th column from DOM",
- null,
- function () { return $('#example thead tr:eq(0) th').length == 2; }
- );
-
- oTest.fnTest(
- "Multiple hide - removes tfoot th column from DOM",
- null,
- function () { return $('#example tfoot tr:eq(0) th').length == 2; }
- );
-
- oTest.fnTest(
- "Multiple hide - the correct thead columns have been hidden",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Engine version"
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Multiple hide - the correct tbody columns have been hidden",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } );
- },
- function () {
- var jqNodes = $('#example tbody tr:eq(0) td');
- var bReturn =
- jqNodes[0].innerHTML == "Gecko" &&
- jqNodes[1].innerHTML == "1"
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bVisible2.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bVisible2.js
deleted file mode 100644
index 015412cc..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.bVisible2.js
+++ /dev/null
@@ -1,268 +0,0 @@
-// DATA_TEMPLATE: complex_header_2
-oTest.fnStart( "aoColumns.bVisible with complex headers" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "All columns are visible by default",
- null,
- function () { return $('#example tbody tr:eq(0) td').length == 5; }
- );
-
- oTest.fnTest(
- "Hide the first column",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aoColumns": [
- { "bVisible": false },
- null,
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 4; }
- );
-
- oTest.fnTest(
- "First cell is '2' - first column hidden",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)').html() == "2"; }
- );
-
- oTest.fnTest(
- "First cell has colspan of 3",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('colspan') == 3; }
- );
-
- oTest.fnTest(
- "First cell has rowspan of 2",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('rowspan') == 2; }
- );
-
- oTest.fnTest(
- "First cell in last column is '11'",
- null,
- function () { return $('#example thead tr:eq(4) th:eq(0)').html() == 11; }
- );
-
- oTest.fnTest(
- "First cell in last column has been truncated to one column",
- null,
- function () { return $('#example thead tr:eq(4) th:eq(0)')[0].getAttribute('colspan') == 1; }
- );
-
-
- oTest.fnTest(
- "Hide the second column",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aoColumns": [
- null,
- { "bVisible": false },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 4; }
- );
-
- oTest.fnTest(
- "First cell is '1' - second column hidden",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)').html() == "1"; }
- );
-
- oTest.fnTest(
- "Second cell is '2' - second column hidden",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(1)').html() == "2"; }
- );
-
- oTest.fnTest(
- "First cell in fourth row is '10' (visibly the first) - second column hidden",
- null,
- function () { return $('#example thead tr:eq(3) th:eq(0)').html() == "10"; }
- );
-
- oTest.fnTest(
- "First cell has colspan of 1",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('colspan') == 1; }
- );
-
- oTest.fnTest(
- "Second cell has colspan of 2",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('colspan') == 2; }
- );
-
- oTest.fnTest(
- "First cell has rowspan of 1",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('rowspan') == 1; }
- );
-
- oTest.fnTest(
- "Second cell has rowspan of 2",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('rowspan') == 2; }
- );
-
- oTest.fnTest(
- "First cell in last column is '11'",
- null,
- function () { return $('#example thead tr:eq(4) th:eq(0)').html() == 11; }
- );
-
- oTest.fnTest(
- "First cell in last column has been truncated to one column",
- null,
- function () { return $('#example thead tr:eq(4) th:eq(0)')[0].getAttribute('colspan') == 1; }
- );
-
-
- oTest.fnTest(
- "Hide the first two columns",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aoColumns": [
- { "bVisible": false },
- { "bVisible": false },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 3; }
- );
-
- oTest.fnTest(
- "First cell is '2' - first two columns hidden",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)').html() == "2"; }
- );
-
- oTest.fnTest(
- "Second cell is '3' - first two columns hidden",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(1)').html() == "3"; }
- );
-
- oTest.fnTest(
- "First cell in third row is '6' - first two columns hidden",
- null,
- function () { return $('#example thead tr:eq(2) th:eq(0)').html() == "6"; }
- );
-
- oTest.fnTest(
- "First cell has colspan of 2",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('colspan') == 2; }
- );
-
- oTest.fnTest(
- "First cell has rowspan of 2",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('rowspan') == 2; }
- );
-
- oTest.fnTest(
- "Second cell has rowspan of 1",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('rowspan') == 1; }
- );
-
- oTest.fnTest(
- "First cell in last column is '12'",
- null,
- function () { return $('#example thead tr:eq(4) th:eq(0)').html() == 12; }
- );
-
-
- oTest.fnTest(
- "Hide the third column",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aoColumns": [
- null,
- null,
- { "bVisible": false },
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 4; }
- );
-
- oTest.fnTest(
- "First cell is '1' - third column hidden",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)').html() == "1"; }
- );
-
- oTest.fnTest(
- "Second cell is '2' - third column hidden",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(1)').html() == "2"; }
- );
-
- oTest.fnTest(
- "First cell (visible second) in third row is '6' - third column hidden",
- null,
- function () { return $('#example thead tr:eq(2) th:eq(0)').html() == "6"; }
- );
-
- oTest.fnTest(
- "Second cell has colspan of 2",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('colspan') == 2; }
- );
-
- oTest.fnTest(
- "Second cell has rowspan of 2",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('rowspan') == 2; }
- );
-
- oTest.fnTest(
- "Third row first cell (second visible) colspan is 1",
- null,
- function () { return $('#example thead tr:eq(2) th:eq(0)')[0].getAttribute('colspan') == 1; }
- );
-
- oTest.fnTest(
- "Third row second cell (third visible) value is 7",
- null,
- function () { return $('#example thead tr:eq(2) th:eq(1)').html() == "7"; }
- );
-
- oTest.fnTest(
- "Third row second cell (third visible) colspan is 1",
- null,
- function () { return $('#example thead tr:eq(2) th:eq(1)')[0].getAttribute('colspan') == 1; }
- );
-
- oTest.fnTest(
- "Third row second cell (third visible) rowspan is 3",
- null,
- function () { return $('#example thead tr:eq(2) th:eq(1)')[0].getAttribute('rowspan') == 3; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.fnRender.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.fnRender.js
deleted file mode 100644
index 11ad1ba8..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.fnRender.js
+++ /dev/null
@@ -1,176 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "aoColumns.fnRender" );
-
-$(document).ready( function () {
- /* Check the default */
- var mTmp = 0;
- var oTable = $('#example').dataTable( {
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- mTmp++;
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Single column - fnRender is called once for each row",
- null,
- function () { return mTmp == 57; }
- );
-
- oTest.fnTest(
- "Confirm that fnRender passes two arguments with four parameters",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoColumns": [
- null,
- { "fnRender": function (a, v) {
- if ( arguments.length != 2 || typeof a.iDataRow=='undefined' ||
- typeof a.iDataColumn=='undefined' || typeof a.aData=='undefined' ||
- typeof a.mDataProp=='undefined' )
- {
- mTmp = false;
- }
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnTest(
- "fnRender iDataColumn is row number",
- function () {
- var iCount = 0;
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( iCount != a.iDataRow )
- {
- mTmp = false;
- }
- iCount++;
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnTest(
- "fnRender iDataColumn is the column",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( a.iDataColumn != 1 )
- {
- mTmp = false;
- }
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnTest(
- "fnRender aData is data array of correct size",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( a.aData.length != 5 )
- {
- mTmp = false;
- }
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnTest(
- "Passed back data is put into the DOM",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- return 'unittest';
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'unittest'; }
- );
-
- oTest.fnTest(
- "Passed back data is put into the DOM",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoColumns": [
- null,
- null,
- { "fnRender": function (a) {
- return 'unittest1';
- } },
- { "fnRender": function (a) {
- return 'unittest2';
- } },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example tbody tr:eq(0) td:eq(2)').html() == 'unittest1' &&
- $('#example tbody tr:eq(0) td:eq(3)').html() == 'unittest2';
- return bReturn; }
- );
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.iDataSort.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.iDataSort.js
deleted file mode 100644
index c41b25f8..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.iDataSort.js
+++ /dev/null
@@ -1,88 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "aoColumns.iDataSort" );
-
-$(document).ready( function () {
- /* Should know that sorting already works by default from other tests, so we can jump
- * right in here
- */
- var oTable = $('#example').dataTable( {
- "aoColumns": [
- null,
- { "iDataSort": 4 },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Sorting on first column is uneffected",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; }
- );
-
- oTest.fnTest(
- "Sorting on second column is the order of the fifth",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
- oTest.fnTest(
- "Reserve sorting on second column uses fifth column as well",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; }
- );
-
- oTest.fnTest(
- "Sorting on 5th column retains it's own sorting",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
-
- oTest.fnTest(
- "Use 2nd col for sorting 5th col and via-versa - no effect on first col sorting",
- function () {
- mTmp = 0;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoColumns": [
- null,
- { "iDataSort": 4 },
- null,
- null,
- { "iDataSort": 1 }
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; }
- );
-
- oTest.fnTest(
- "2nd col sorting uses fifth col",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
- oTest.fnTest(
- "2nd col sorting uses fifth col - reversed",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; }
- );
-
- oTest.fnTest(
- "5th col sorting uses 2nd col",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; }
- );
-
- oTest.fnTest(
- "5th col sorting uses 2nd col - reversed",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'Seamonkey 1.1'; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.sClass.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.sClass.js
deleted file mode 100644
index 7dbad2e5..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.sClass.js
+++ /dev/null
@@ -1,111 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "aoColumns.sClass" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "By default the test class hasn't been applied to the column (sanity!)",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(2)').hasClass('unittest') == false; }
- );
-
- oTest.fnTest(
- "Add a class to a single column - first row",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aoColumns": [
- null,
- null,
- { "sClass": 'unittest' },
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(1) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnTest(
- "Add a class to a single column - third row",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnTest(
- "Add a class to a single column - last row",
- null,
- function () { return $('#example tbody tr:eq(9) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnTest(
- "Add a class to a single column - has not applied to other columns - 1st",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest') == false; }
- );
-
- oTest.fnTest(
- "Add a class to a single column - has not applied to other columns - 5th",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(4)').hasClass('unittest') == false; }
- );
-
- oTest.fnTest(
- "Add a class to a single column - seventh row - second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody tr:eq(6) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnTest(
- "Add a class to a single column - has not applied to header",
- null,
- function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; }
- );
-
- oTest.fnTest(
- "Add a class to a single column - has not applied to footer",
- null,
- function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; }
- );
-
-
- oTest.fnTest(
- "Class defined for multiple columns - first row",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aoColumns": [
- { "sClass": 'unittest2' },
- null,
- null,
- { "sClass": 'unittest1' },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest2') &&
- $('#example tbody tr:eq(8) td:eq(3)').hasClass('unittest1');
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Class defined for multiple columns - has not applied to other columns - 5th 1",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(4)').hasClass('unittest1') == false; }
- );
-
- oTest.fnTest(
- "Class defined for multiple columns - has not applied to other columns - 5th 2",
- null,
- function () { return $('#example tbody tr:eq(6) td:eq(4)').hasClass('unittest2') == false; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.sName.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.sName.js
deleted file mode 100644
index 309fe7f5..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.sName.js
+++ /dev/null
@@ -1,27 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "aoColumns.sName" );
-
-/* This has no effect at all in DOM methods - so we just check that it has applied the name */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aoColumns": [
- null,
- null,
- null,
- { "sName": 'unit test' },
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Names are stored in the columns object",
- null,
- function () { return oSettings.aoColumns[3].sName =="unit test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.sTitle.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.sTitle.js
deleted file mode 100644
index 58adf13f..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.sTitle.js
+++ /dev/null
@@ -1,78 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "aoColumns.sTitle" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Column names are read from the DOM by default",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Browser" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Can set a single column title - and others are read from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aoColumns": [
- null,
- { "sTitle": 'unit test' },
- null,
- null,
- null
- ]
- } );
- },
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "unit test" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Can set multiple column titles",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aoColumns": [
- null,
- { "sTitle": 'unit test 1' },
- null,
- null,
- { "sTitle": 'unit test 2' }
- ]
- } );
- },
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "unit test 1" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "unit test 2";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.sWidth.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.sWidth.js
deleted file mode 100644
index ea146271..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoColumns.sWidth.js
+++ /dev/null
@@ -1,84 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "aoColumns.sWidth" );
-
-/* NOTE - we need to disable the auto width for the majority of these test in order to preform
- * these tests as the auto width will convert the width to a px value. We can do 'non-exact' tests
- * with auto width enabled however to ensure it scales columns as required
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bAutoWidth": false,
- "aoColumns": [
- null,
- { "sWidth": '40%' },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "With auto width disabled the width for one column is appled",
- null,
- function () { return $('#example thead th:eq(1)')[0].style.width == "40%"; }
- );
-
- oTest.fnTest(
- "With auto width disabled the width for one column is appled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bAutoWidth": false,
- "aoColumns": [
- null,
- null,
- { "sWidth": '20%' },
- { "sWidth": '30%' },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example thead th:eq(2)')[0].style.width == "20%" &&
- $('#example thead th:eq(3)')[0].style.width == "30%";
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "With auto width, it will make the smallest column the largest with percentage width given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoColumns": [
- null,
- null,
- null,
- { "sWidth": '40%' },
- null
- ]
- } );
- },
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
-
- if ( a3>a0 && a3>a1 && a3>a2 && a3>a4 )
- return true;
- else
- return false;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoSearchCols.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoSearchCols.js
deleted file mode 100644
index 28300f5e..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/aoSearchCols.js
+++ /dev/null
@@ -1,112 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "aoSearchCols" );
-
-/* We could be here forever testing this one, so we test a limited subset on a couple of colums */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Default should be to have a empty colums array",
- null,
- function () {
- var bReturn =
- oSettings.aoPreSearchCols[0].sSearch == 0 && !oSettings.aoPreSearchCols[0].bRegex &&
- oSettings.aoPreSearchCols[1].sSearch == 0 && !oSettings.aoPreSearchCols[1].bRegex &&
- oSettings.aoPreSearchCols[2].sSearch == 0 && !oSettings.aoPreSearchCols[2].bRegex &&
- oSettings.aoPreSearchCols[3].sSearch == 0 && !oSettings.aoPreSearchCols[3].bRegex &&
- oSettings.aoPreSearchCols[4].sSearch == 0 && !oSettings.aoPreSearchCols[4].bRegex;
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "Search on a single column - no regex statement given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoSearchCols": [
- null,
- { "sSearch": "Mozilla" },
- null,
- { "sSearch": "1" },
- null
- ]
- } );
- },
- function () { return $('#example_info').html() == "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Search on two columns - no regex statement given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoSearchCols": [
- null,
- { "sSearch": "Mozilla" },
- null,
- { "sSearch": "1.5" },
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1.5"; }
- );
-
- oTest.fnTest(
- "Search on single column - escape regex false",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoSearchCols": [
- { "sSearch": ".*ML", "bEscapeRegex": false },
- null,
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example_info').html() == "Showing 1 to 3 of 3 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Search on two columns - escape regex false on first, true on second",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoSearchCols": [
- { "sSearch": ".*ML", "bEscapeRegex": false },
- { "sSearch": "3.3", "bEscapeRegex": true },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Konqureror 3.3"; }
- );
-
- oTest.fnTest(
- "Search on two columns (no records) - escape regex false on first, true on second",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aoSearchCols": [
- { "sSearch": ".*ML", "bEscapeRegex": false },
- { "sSearch": "Allan", "bEscapeRegex": true },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/asStripClasses.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/asStripClasses.js
deleted file mode 100644
index 77fde853..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/asStripClasses.js
+++ /dev/null
@@ -1,106 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "asStripeClasses" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable();
-
- oTest.fnTest(
- "Default row striping is applied",
- null,
- function () {
- return $('#example tbody tr:eq(0)').hasClass('odd') &&
- $('#example tbody tr:eq(1)').hasClass('even') &&
- $('#example tbody tr:eq(2)').hasClass('odd') &&
- $('#example tbody tr:eq(3)').hasClass('even');
- }
- );
-
- oTest.fnTest(
- "Row striping does not effect current classes",
- null,
- function () {
- return $('#example tbody tr:eq(0)').hasClass('gradeA') &&
- $('#example tbody tr:eq(1)').hasClass('gradeA') &&
- $('#example tbody tr:eq(2)').hasClass('gradeA') &&
- $('#example tbody tr:eq(3)').hasClass('gradeA');
- }
- );
-
- oTest.fnTest(
- "Row striping on the second page",
- function () { $('#example_next').click(); },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('odd') &&
- $('#example tbody tr:eq(1)').hasClass('even') &&
- $('#example tbody tr:eq(2)').hasClass('odd') &&
- $('#example tbody tr:eq(3)').hasClass('even');
- }
- );
-
- /* No striping */
- oTest.fnTest(
- "No row striping",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "asStripeClasses": []
- } );
- },
- function () {
- return $('#example tbody tr:eq(0)')[0].className == "gradeA" &&
- $('#example tbody tr:eq(1)')[0].className == "gradeA" &&
- $('#example tbody tr:eq(2)')[0].className == "gradeA" &&
- $('#example tbody tr:eq(3)')[0].className == "gradeA";
- }
- );
-
- /* Custom striping */
- oTest.fnTest(
- "Custom striping [2]",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "asStripeClasses": [ 'test1', 'test2' ]
- } );
- },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test1') &&
- $('#example tbody tr:eq(3)').hasClass('test2');
- }
- );
-
-
- /* long array of striping */
- oTest.fnTest(
- "Custom striping [4]",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "asStripeClasses": [ 'test1', 'test2', 'test3', 'test4' ]
- } );
- },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test3') &&
- $('#example tbody tr:eq(3)').hasClass('test4');
- }
- );
-
- oTest.fnTest(
- "Custom striping is restarted on second page [2]",
- function () { $('#example_next').click(); },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test3') &&
- $('#example tbody tr:eq(3)').hasClass('test4');
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bAutoWidth.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bAutoWidth.js
deleted file mode 100644
index 50c7ea57..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bAutoWidth.js
+++ /dev/null
@@ -1,138 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "bAutoWidth" );
-
-/* It's actually a little tricky to test this. We can't test absolute numbers because
- * different browsers and different platforms will render the width of the columns slightly
- * differently. However, we certainly can test the principle of what should happen (column
- * width doesn't change over pages)
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Auto width is enabled by default",
- null,
- function () { return oSettings.oFeatures.bAutoWidth; }
- );
-
- oTest.fnTest(
- "First column has a width assigned to it",
- null,
- function () { return $('#example thead th:eq(0)').attr('style').match(/width/i); }
- );
-
- /*
- This would seem like a better test - but there appear to be difficulties with tables
- which are bigger (calculated) than there is actually room for. I suspect this is actually
- a bug in datatables
- oTest.fnTest(
- "Check column widths on first page match second page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- console.log( a0, b0, a1, b1, a2, b2, a3, b3 );
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return true;
- else
- return false;
- }
- );
-
- oTest.fnTest(
- "Check column widths on second page match thid page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return true;
- else
- return false;
- }
- );
- */
-
- /* Check can disable */
- oTest.fnTest(
- "Auto width can be disabled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bAutoWidth": false
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bAutoWidth == false; }
- );
-
- oTest.fnTest(
- "First column does not have a width assigned to it",
- null,
- function () { return $('#example thead th:eq(0)').attr('style') == null; }
- );
-
- /*
- oTest.fnTest(
- "Check column widths on first page do not match second page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return false;
- else
- return true;
- }
- );
- */
-
- /* Enable makes no difference */
- oTest.fnTest(
- "Auto width enabled override",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bAutoWidth": true
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bAutoWidth; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bFilter.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bFilter.js
deleted file mode 100644
index 87e37228..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bFilter.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "bFilter" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable();
-
- oTest.fnTest(
- "Filtering div exists by default",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- /* Check can disable */
- oTest.fnTest(
- "Fltering can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bFilter": false
- } );
- },
- function () { return document.getElementById('example_filter') == null; }
- );
-
- /* Enable makes no difference */
- oTest.fnTest(
- "Filtering enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bFilter": true
- } );
- },
- function () { return document.getElementById('example_filter') != null; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bInfiniteScroll.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bInfiniteScroll.js
deleted file mode 100644
index 701e23ab..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bInfiniteScroll.js
+++ /dev/null
@@ -1,130 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "bInfiniteScroll" );
-
-
-$(document).ready( function () {
- var oTable = $('#example').dataTable( {
- "bScrollInfinite": true,
- "sScrollY": "200px"
- } );
-
- oTest.fnTest(
- "10 rows by default",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Info",
- null,
- function () { return $('#example_info').html() == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Get nodes",
- null,
- function () { return $('#example tbody>tr').length == 10; }
- );
-
- oTest.fnWaitTest(
- "Scroll on 20px adds 10 rows",
- function () { $('div.dataTables_scrollBody').scrollTop(20); },
- function () { return $('#example tbody tr').length == 20; }
- );
-
- oTest.fnTest(
- "Info after 20px scroll",
- null,
- function () { return $('#example_info').html() == "Showing 1 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Get nodes after 20px scroll",
- null,
- function () { return $('#example tbody>tr').length == 20; }
- );
-
- oTest.fnTest(
- "Scroll on 10px more results in the same number of rows",
- function () { $('div.dataTables_scrollBody').scrollTop(30); },
- function () { return $('#example tbody tr').length == 20; }
- );
-
- oTest.fnTest(
- "Info after 10 more px scroll",
- null,
- function () { return $('#example_info').html() == "Showing 1 to 20 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Scroll to 240px adds another 10 rows",
- function () { $('div.dataTables_scrollBody').scrollTop(240); },
- function () { return $('#example tbody tr').length == 30; }
- );
-
- oTest.fnTest(
- "Info after 240px scroll",
- null,
- function () { return $('#example_info').html() == "Showing 1 to 30 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Get nodes after 240px scroll",
- null,
- function () { return $('#example tbody>tr').length == 30; }
- );
-
- oTest.fnTest(
- "Filtering will drop back to 10 rows",
- function () {
- $('div.dataTables_scrollBody').scrollTop(0);
- oTable.fnFilter('gec')
- },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Info after filtering",
- null,
- function () { return $('#example_info').html() == "Showing 1 to 10 of 20 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Get nodes after filtering",
- null,
- function () { return $('#example tbody>tr').length == 10; }
- );
-
- oTest.fnWaitTest(
- "Scroll after filtering adds 10",
- function () { $('div.dataTables_scrollBody').scrollTop(20); },
- function () { return $('#example tbody tr').length == 20; }
- );
-
- oTest.fnTest(
- "Get nodes after filtering",
- null,
- function () { return $('#example tbody>tr').length == 20; }
- );
-
- oTest.fnTest(
- "Sorting will drop back to 10 rows",
- function () { oTable.fnSort([[1,'asc']]) },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnWaitTest(
- "Scroll after sorting adds 10",
- function () { $('div.dataTables_scrollBody').scrollTop(20); },
- function () { return $('#example tbody tr').length == 20; }
- );
-
- oTest.fnTest(
- "Get nodes after scrolling",
- null,
- function () { return $('#example tbody>tr').length == 20; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bInfo.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bInfo.js
deleted file mode 100644
index 3c621301..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bInfo.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "bInfo" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable();
-
- oTest.fnTest(
- "Info div exists by default",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- /* Check can disable */
- oTest.fnTest(
- "Info can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bInfo": false
- } );
- },
- function () { return document.getElementById('example_info') == null; }
- );
-
- /* Enable makes no difference */
- oTest.fnTest(
- "Info enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bInfo": true
- } );
- },
- function () { return document.getElementById('example_info') != null; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bJQueryUI.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bJQueryUI.js
deleted file mode 100644
index d3537b15..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bJQueryUI.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "bJQueryUI" );
-
-$(document).ready( function () {
- $('#example').dataTable( {
- "bJQueryUI": true
- } );
-
- oTest.fnTest(
- "Header elements are fully wrapped by DIVs",
- null,
- function () {
- var test = true;
- $('#example thead th').each( function () {
- if ( this.childNodes > 1 ) {
- test = false;
- }
- } );
- return test;
- }
- );
-
- oTest.fnTest(
- "One div for each header element",
- null,
- function () {
- return $('#example thead th div').length == 5;
- }
- );
-
- oTest.fnTest(
- "One span for each header element, nested as child of div",
- null,
- function () {
- return $('#example thead th div>span').length == 5;
- }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bLengthChange.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bLengthChange.js
deleted file mode 100644
index 3087e302..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bLengthChange.js
+++ /dev/null
@@ -1,71 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "bLengthChange" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable();
-
- oTest.fnTest(
- "Length div exists by default",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnTest(
- "Four default options",
- null,
- function () { return $("select[name=example_length] option").length == 4; }
- );
-
- oTest.fnTest(
- "Default options",
- null,
- function () {
- var opts = $("select[name='example_length'] option");
- return opts[0].getAttribute('value') == 10 && opts[1].getAttribute('value') == 25 &&
- opts[2].getAttribute('value') == 50 && opts[3].getAttribute('value') == 100;
- }
- );
-
- oTest.fnTest(
- "Info takes length into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Check can disable */
- oTest.fnTest(
- "Change length can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bLengthChange": false
- } );
- },
- function () { return document.getElementById('example_length') == null; }
- );
-
- oTest.fnTest(
- "Information takes length disabled into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Enable makes no difference */
- oTest.fnTest(
- "Length change enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bLengthChange": true
- } );
- },
- function () { return document.getElementById('example_length') != null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bPaginate.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bPaginate.js
deleted file mode 100644
index cddcb4b4..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bPaginate.js
+++ /dev/null
@@ -1,55 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "bPaginate" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable();
-
- oTest.fnTest(
- "Pagiantion div exists by default",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnTest(
- "Information div takes paging into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Check can disable */
- oTest.fnTest(
- "Pagiantion can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bPaginate": false
- } );
- },
- function () { return document.getElementById('example_paginate') == null; }
- );
-
- oTest.fnTest(
- "Information div takes paging disabled into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 57 of 57 entries"; }
- );
-
- /* Enable makes no difference */
- oTest.fnTest(
- "Pagiantion enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bPaginate": true
- } );
- },
- function () { return document.getElementById('example_paginate') != null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bProcessing.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bProcessing.js
deleted file mode 100644
index cd74aee7..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bProcessing.js
+++ /dev/null
@@ -1,99 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "bProcessing" );
-
-/* It's actually a bit hard to set this one due to the fact that it will only be shown
- * when DataTables is doing some kind of processing. The server-side processing is a bit
- * better to test this than here - so we just the interal functions to enable it and check
- * that it is available
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Processing is off by default",
- null,
- function () { return oSettings.oFeatures.bProcessing == false; }
- );
-
- oTest.fnTest(
- "Processing div is not in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnTest(
- "Processing div cannot be shown",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnTest(
- "Processing div cannot be hidden",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
-
- /* Check can disable */
- oTest.fnTest(
- "Processing can be enabled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bProcessing": true
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bProcessing == true; }
- );
-
- oTest.fnTest(
- "Processing div is in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing'); }
- );
-
- oTest.fnTest(
- "Processing div is hidden by default",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing').style.visibility = "hidden"; }
- );
-
- oTest.fnTest(
- "Processing div can be shown",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing').style.visibility = "visible"; }
- );
-
- oTest.fnTest(
- "Processing div can be hidden",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); },
- function () { return document.getElementById('example_processing').style.visibility = "hidden"; }
- );
-
- /* Enable makes no difference */
- oTest.fnTest(
- "Processing disabled override",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bProcessing": false
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bProcessing == false; }
- );
-
- oTest.fnTest(
- "Processing div is not in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bServerSide.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bServerSide.js
deleted file mode 100644
index f9bdb340..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bServerSide.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "bServerSide" );
-
-/* Not interested in server-side processing here other than to check that it is off */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Server side is off by default",
- null,
- function () { return oSettings.oFeatures.bServerSide == false; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bSort.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bSort.js
deleted file mode 100644
index c24ff31d..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bSort.js
+++ /dev/null
@@ -1,101 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "bSort" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable();
-
- oTest.fnTest(
- "Sorting is on by default",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "Sorting Asc by default class applied",
- null,
- function () { return $('#example thead th:eq(0)').hasClass("sorting_asc"); }
- );
-
- oTest.fnTest(
- "Click on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting class removed from first column",
- null,
- function () { return $('#example thead th:eq(0)').hasClass("sorting_asc") != true; }
- );
-
- oTest.fnTest(
- "Sorting asc class applied to second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc"); }
- );
-
- oTest.fnTest(
- "Reverse on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting acs class removed from second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") != true; }
- );
-
- oTest.fnTest(
- "Sorting desc class applied to second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_desc"); }
- );
-
- /* Check can disable */
- oTest.fnTest(
- "Pagiantion can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bSort": false
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Disabled classes applied",
- null,
- function () { return $('#example thead th:eq(0)').hasClass('sorting_disabled'); }
- );
-
- oTest.fnTest(
- "Click on second column has no effect",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Reverse on second column has no effect",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- /* Enable makes no difference */
- oTest.fnTest(
- "Sorting enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bSort": true
- } );
- },
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bSortCellsTop.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bSortCellsTop.js
deleted file mode 100644
index a0794209..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bSortCellsTop.js
+++ /dev/null
@@ -1,77 +0,0 @@
-// DATA_TEMPLATE: dom_data_two_headers
-oTest.fnStart( "bSortCellsTop" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Sorting class is on the bottom cells by default",
- null,
- function () { return $('#example thead tr:eq(1) th:eq(0)').hasClass('sorting_asc'); }
- );
-
- oTest.fnTest(
- "Sorting is performed on bottom cells",
- function () { return $('#example thead tr:eq(1) th:eq(0)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; }
- );
-
- oTest.fnTest(
- "Sorting class is updated on the bottom cells",
- null,
- function () { return $('#example thead tr:eq(1) th:eq(0)').hasClass('sorting_desc'); }
- );
-
- oTest.fnTest(
- "Clicking on top cells has no effect",
- function () { return $('#example thead tr:eq(0) th:eq(0)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; }
- );
-
- oTest.fnTest(
- "Clicking on another top cell has no effect",
- function () { return $('#example thead tr:eq(0) th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; }
- );
-
-
- oTest.fnTest(
- "Sorting class is on the top cell when bSortCellsTop is true",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bSortCellsTop": true
- } );
- },
- function () { return $('#example thead tr:eq(0) th:eq(0)').hasClass('sorting_asc'); }
- );
-
- oTest.fnTest(
- "Sorting is performed on top cells now",
- function () { return $('#example thead tr:eq(0) th:eq(0)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; }
- );
-
- oTest.fnTest(
- "Sorting class is updated on the top cells",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)').hasClass('sorting_desc'); }
- );
-
- oTest.fnTest(
- "Clicking on bottom cells has no effect",
- function () { return $('#example thead tr:eq(1) th:eq(0)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; }
- );
-
- oTest.fnTest(
- "Clicking on another bottom cell has no effect",
- function () { return $('#example thead tr:eq(1) th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bSortClasses.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bSortClasses.js
deleted file mode 100644
index 47234afb..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/bSortClasses.js
+++ /dev/null
@@ -1,128 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "bSortClasses" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable();
-
- oTest.fnTest(
- "Sorting classes are applied by default",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); }
- );
-
- oTest.fnTest(
- "Sorting classes are applied to all required cells",
- null,
- function () { return $('#example tbody tr:eq(7) td:eq(0)').hasClass('sorting_1'); }
- );
-
- oTest.fnTest(
- "Sorting classes are not applied to non-sorting columns",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_1') == false; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - add column 1",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2');
- }
- );
-
- oTest.fnTest(
- "Sorting multi-column - add column 2",
- function () {
- oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3');
- }
- );
-
- oTest.fnTest(
- "Sorting multi-column - add column 3",
- function () {
- oDispacher.click( $('#example thead th:eq(3)')[0], { 'shift': true } );
- },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') &&
- $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3');
- }
- );
-
- oTest.fnTest(
- "Remove sorting classes on single column sort",
- function () {
- $('#example thead th:eq(4)').click();
- },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false &&
- $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3') == false;
- }
- );
-
- oTest.fnTest(
- "Sorting class 1 was added",
- null,
- function () { return $('#example tbody tr:eq(1) td:eq(4)').hasClass('sorting_1'); }
- );
-
-
- /* Check can disable */
- oTest.fnTest(
- "Sorting classes can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bSortClasses": false
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false; }
- );
-
- oTest.fnTest(
- "Sorting classes disabled - add column 1 - no effect",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false;
- }
- );
-
- oTest.fnTest(
- "Sorting classes disabled - add column 2 - no effect",
- function () {
- oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false;
- }
- );
-
-
- /* Enable makes no difference */
- oTest.fnTest(
- "Sorting classes enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bSortClasses": true
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnCookieCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnCookieCallback.js
deleted file mode 100644
index 813b14b0..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnCookieCallback.js
+++ /dev/null
@@ -1,97 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "Cookie callback" );
-
-
-$(document).ready( function () {
- var mPass;
- /* Note that in order to be fully effective here for saving state, there would need to be a
- * stringify function to serialise the data array
- */
-
- oTest.fnTest(
- "null by default",
- function () {
- $('#example').dataTable();
- },
- function () { return $('#example').dataTable().fnSettings().fnCookieCallback == null; }
- );
-
- oTest.fnTest(
- "Number of arguments",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "bStateSave": true,
- "fnCookieCallback": function (sName, oData, sExpires, sPath) {
- mPass = arguments.length;
- return sName + "=; expires=" + sExpires +"; path=" + sPath;
- }
- } );
- },
- function () { return mPass == 4; }
- );
-
- oTest.fnTest(
- "Name",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "bStateSave": true,
- "fnCookieCallback": function (sName, oData, sExpires, sPath) {
- mPass = sName=="SpryMedia_DataTables_example_dom_data.php";
- return sName + "=; expires=" + sExpires +"; path=" + sPath;
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "Data",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "bStateSave": true,
- "fnCookieCallback": function (sName, oData, sExpires, sPath) {
- mPass = typeof oData.iStart != 'undefined';
- return sName + "=; expires=" + sExpires +"; path=" + sPath;
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "Expires",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "bStateSave": true,
- "fnCookieCallback": function (sName, oData, sExpires, sPath) {
- mPass = typeof sExpires == 'string';
- return sName + "=; expires=" + sExpires +"; path=" + sPath;
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "Path",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "bStateSave": true,
- "fnCookieCallback": function (sName, oData, sExpires, sPath) {
- mPass = sPath.match(/media\/unit_testing\/templates/);
- return sName + "=; expires=" + sExpires +"; path=" + sPath;
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnCookieDestroy( $('#example').dataTable() );
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnCreatedCell.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnCreatedCell.js
deleted file mode 100644
index ee13ad60..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnCreatedCell.js
+++ /dev/null
@@ -1,151 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "fnCreatedCell tests" );
-
-$(document).ready( function () {
- var tmp = 0;
-
- $('#example').dataTable( {
- "aoColumnDefs": [ {
- fnCreatedCell: function () {
- tmp++;
- },
- "aTargets": ["_all"]
- } ]
- } );
-
- oTest.fnTest(
- "Cell created is called once for each cell on init",
- null,
- function () { return tmp===285; }
- );
-
- oTest.fnTest(
- "Created isn't called back on other draws",
- function () { $('#example th:eq(1)').click(); },
- function () { return tmp===285; }
- );
-
- oTest.fnTest(
- "Four arguments for the function",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments.length !== 4 ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ]
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "First argument is a TD element",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[0].nodeName !== "TD" ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ]
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "Second argument is the HTML value",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[1] != $('td').html() ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ]
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "Third argument is the data array",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[2].length !== 5 ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ]
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "Fourth argument is the data source for the row",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[2] !== this.fnSettings().aoData[ arguments[2] ]._aData ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ]
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "Fifth argument is the the col index",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[1] != $('td:eq('+arguments[4]+')', arguments[0].parentNode).html() ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ]
- } );
- },
- function () { return tmp; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnCreatedRow.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnCreatedRow.js
deleted file mode 100644
index c6eb07e4..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnCreatedRow.js
+++ /dev/null
@@ -1,115 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "fnCreatedRow tests" );
-
-$(document).ready( function () {
- var tmp = 0;
-
- $('#example').dataTable( {
- fnCreatedRow: function () {
- tmp++;
- }
- } );
-
- oTest.fnTest(
- "Row created is called once for each row on init",
- null,
- function () { return tmp===57; }
- );
-
- oTest.fnTest(
- "Created isn't called back on other draws",
- function () { $('#example th:eq(1)').click(); },
- function () { return tmp===57; }
- );
-
- oTest.fnTest(
- "Three arguments for the function",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- fnCreatedRow: function () {
- if ( arguments.length !== 3 ) {
- tmp = false;
- }
- }
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "First argument is a TR element",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- fnCreatedRow: function () {
- if ( arguments[0].nodeName !== "TR" ) {
- tmp = false;
- }
- }
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "Second argument is an array with 5 elements",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- fnCreatedRow: function () {
- if ( arguments[1].length !== 5 ) {
- tmp = false;
- }
- }
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "Third argument is the data source for the row",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- fnCreatedRow: function () {
- if ( arguments[1] !== this.fnSettings().aoData[ arguments[2] ]._aData ) {
- tmp = false;
- }
- }
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "TR element is tied to the correct data",
- function () {
- oSession.fnRestore();
- tmp = false;
-
- $('#example').dataTable( {
- fnCreatedRow: function (tr, data, index) {
- if ( data[1] === "Firefox 1.0" ) {
- if ( $('td:eq(3)', tr).html() == "1.7" ) {
- tmp = true;
- }
- }
- }
- } );
- },
- function () { return tmp; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnDeleteRow.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnDeleteRow.js
deleted file mode 100644
index 5d8f6ec6..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnDeleteRow.js
+++ /dev/null
@@ -1,30 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "fnDeleteRow" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Check that the default data is sane",
- null,
- function () { return oSettings.asDataSearch.join(' ').match(/4.0/g).length == 3; }
- );
-
- oTest.fnTest(
- "Remove the first data row, and check that hte search data has been updated",
- function () { oTable.fnDeleteRow( 0 ); },
- function () { return oSettings.asDataSearch.join(' ').match(/4.0/g).length == 2; }
- );
-
- oTest.fnTest(
- "Check that the info element has been updated",
- null,
- function () { return $('#example_info').html() == "Showing 1 to 10 of 56 entries"; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnDrawCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnDrawCallback.js
deleted file mode 100644
index c497c946..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnDrawCallback.js
+++ /dev/null
@@ -1,80 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "fnDrawCallback" );
-
-/* Fairly boring function compared to the others! */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnTest(
- "Default should be null",
- null,
- function () { return oSettings.fnDrawCallback == null; }
- );
-
-
- oTest.fnTest(
- "One argument passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "fnDrawCallback": function ( ) {
- mPass = arguments.length;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
-
- oTest.fnTest(
- "That one argument is the settings object",
- function () {
- oSession.fnRestore();
-
- oTable = $('#example').dataTable( {
- "fnDrawCallback": function ( oSettings ) {
- mPass = oSettings;
- }
- } );
- },
- function () { return oTable.fnSettings() == mPass; }
- );
-
-
- oTest.fnTest(
- "fnRowCallback called once on first draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "fnDrawCallback": function ( ) {
- mPass++;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
- oTest.fnTest(
- "fnRowCallback called once on each draw there after as well",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return mPass == 4; }
- );
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnFilter.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnFilter.js
deleted file mode 100644
index 7e3050ce..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnFilter.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "fnFilter" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- oTable.fnFilter(1);
-
- oTest.fnTest(
- "Filtering with a non-string input is valid",
- null,
- function () { return $('#example_info').html() == "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnFooterCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnFooterCallback.js
deleted file mode 100644
index 10375015..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnFooterCallback.js
+++ /dev/null
@@ -1,227 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "fnFooterCallback" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnTest(
- "Default should be null",
- null,
- function () { return oSettings.fnFooterCallback == null; }
- );
-
-
- oTest.fnTest(
- "Five arguments passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "fnFooterCallback": function ( ) {
- mPass = arguments.length;
- }
- } );
- },
- function () { return mPass == 5; }
- );
-
-
- oTest.fnTest(
- "fnRowCallback called once per draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- mPass++;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
- oTest.fnTest(
- "fnRowCallback called on paging (i.e. another draw)",
- function () { $('#example_next').click(); },
- function () { return mPass == 2; }
- );
-
-
- oTest.fnTest(
- "fnRowCallback allows us to alter row information",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- nFoot.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records";
- }
- } );
- },
- function () { return $('#example tfoot th:eq(0)').html() == "Displaying 10 records"; }
- );
-
-
- oTest.fnTest(
- "Data array has length matching original data",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- if ( aasData.length != 57 )
- {
- mPass = false;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "Data array's column lengths match original data",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- for ( var i=0, iLen=aasData.length ; i<iLen ; i++ )
- {
- if ( aasData[i].length != 5 )
- {
- mPass = false;
- }
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "iStart correct on first page",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- if ( iStart != 0 )
- {
- mPass = false;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "iStart correct on second page",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- if ( iStart == 10 )
- {
- mPass = true;
- }
- }
- } );
- $('#example_next').click();
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "iEnd correct on first page",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- if ( iEnd != 10 )
- {
- mPass = false;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "iEnd correct on second page",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- if ( iEnd == 20 )
- {
- mPass = true;
- }
- }
- } );
- $('#example_next').click();
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "aiDisplay length is full data when not filtered",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- if ( aiDisplay.length == 57 )
- {
- mPass = true;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "aiDisplay length is 9 when filtering on 'Mozilla'",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- oTable = $('#example').dataTable( {
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- if ( aiDisplay.length == 9 )
- {
- mPass = true;
- }
- }
- } );
- oTable.fnFilter( "Mozilla" );
- },
- function () { return mPass; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnHeaderCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnHeaderCallback.js
deleted file mode 100644
index 91a025c7..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnHeaderCallback.js
+++ /dev/null
@@ -1,227 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "fnHeaderCallback" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnTest(
- "Default should be null",
- null,
- function () { return oSettings.fnHeaderCallback == null; }
- );
-
-
- oTest.fnTest(
- "Five arguments passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "fnHeaderCallback": function ( ) {
- mPass = arguments.length;
- }
- } );
- },
- function () { return mPass == 5; }
- );
-
-
- oTest.fnTest(
- "fnRowCallback called once per draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- mPass++;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
- oTest.fnTest(
- "fnRowCallback called on paging (i.e. another draw)",
- function () { $('#example_next').click(); },
- function () { return mPass == 2; }
- );
-
-
- oTest.fnTest(
- "fnRowCallback allows us to alter row information",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records";
- }
- } );
- },
- function () { return $('#example thead th:eq(0)').html() == "Displaying 10 records"; }
- );
-
-
- oTest.fnTest(
- "Data array has length matching original data",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( aasData.length != 57 )
- {
- mPass = false;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "Data array's column lengths match original data",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- for ( var i=0, iLen=aasData.length ; i<iLen ; i++ )
- {
- if ( aasData[i].length != 5 )
- {
- mPass = false;
- }
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "iStart correct on first page",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iStart != 0 )
- {
- mPass = false;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "iStart correct on second page",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iStart == 10 )
- {
- mPass = true;
- }
- }
- } );
- $('#example_next').click();
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "iEnd correct on first page",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iEnd != 10 )
- {
- mPass = false;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "iEnd correct on second page",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iEnd == 20 )
- {
- mPass = true;
- }
- }
- } );
- $('#example_next').click();
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "aiDisplay length is full data when not filtered",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( aiDisplay.length == 57 )
- {
- mPass = true;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "aiDisplay length is 9 when filtering on 'Mozilla'",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- oTable = $('#example').dataTable( {
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( aiDisplay.length == 9 )
- {
- mPass = true;
- }
- }
- } );
- oTable.fnFilter( "Mozilla" );
- },
- function () { return mPass; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnInfoCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnInfoCallback.js
deleted file mode 100644
index 91a74a82..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnInfoCallback.js
+++ /dev/null
@@ -1,115 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "fnInfoCallback checks" );
-
-$(document).ready( function () {
- var mPass;
-
- $('#example').dataTable();
-
- /* Basic checks */
- oTest.fnTest(
- "null by default",
- null,
- function () { return $('#example').dataTable().fnSettings().oLanguage.fnInfoCallback == null; }
- );
-
- oTest.fnTest(
- "Agrument length",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "fnInfoCallback": function( oS, iStart, iEnd, iMax, iTotal, sPre ) {
- mPass = arguments.length;
- return sPre;
- }
- } );
- },
- function () { return mPass == 6; }
- );
-
- oTest.fnTest(
- "Settings first",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "fnInfoCallback": function( oS, iStart, iEnd, iMax, iTotal, sPre ) {
- mPass = (oS == $('#example').dataTable().fnSettings()) ? true : false;
- return sPre;
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "Start arg",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "fnInfoCallback": function( oS, iStart, iEnd, iMax, iTotal, sPre ) {
- return iStart;
- }
- } );
- },
- function () { return $('#example_info').html() == "1"; }
- );
-
- oTest.fnTest(
- "End arg",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "fnInfoCallback": function( oS, iStart, iEnd, iMax, iTotal, sPre ) {
- return iEnd;
- }
- } );
- },
- function () { return $('#example_info').html() == "10"; }
- );
-
- oTest.fnTest(
- "Max arg",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "fnInfoCallback": function( oS, iStart, iEnd, iMax, iTotal, sPre ) {
- return iMax;
- }
- } );
- },
- function () { return $('#example_info').html() == "57"; }
- );
-
- oTest.fnTest(
- "Max arg - filter",
- function () {
- $('#example').dataTable().fnFilter("1.0");
- },
- function () { return $('#example_info').html() == "57"; }
- );
-
- oTest.fnTest(
- "Total arg",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "fnInfoCallback": function( oS, iStart, iEnd, iMax, iTotal, sPre ) {
- return iTotal;
- }
- } );
- },
- function () { return $('#example_info').html() == "57"; }
- );
-
- oTest.fnTest(
- "Total arg - filter",
- function () {
- $('#example').dataTable().fnFilter("1.0");
- },
- function () { return $('#example_info').html() == "3"; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnInitComplete.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnInitComplete.js
deleted file mode 100644
index 3b238290..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnInitComplete.js
+++ /dev/null
@@ -1,94 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "fnInitComplete" );
-
-/* Fairly boring function compared to the others! */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnTest(
- "Default should be null",
- null,
- function () { return oSettings.fnInitComplete == null; }
- );
-
-
- oTest.fnTest(
- "Two arguments passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "fnInitComplete": function ( ) {
- mPass = arguments.length===2 && arguments[1]===undefined;
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "That one argument is the settings object",
- function () {
- oSession.fnRestore();
-
- oTable = $('#example').dataTable( {
- "fnInitComplete": function ( oSettings ) {
- mPass = oSettings;
- }
- } );
- },
- function () { return oTable.fnSettings() == mPass; }
- );
-
-
- oTest.fnTest(
- "fnInitComplete called once on first draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "fnInitComplete": function ( ) {
- mPass++;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
- oTest.fnTest(
- "fnInitComplete never called there after",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return mPass == 1; }
- );
-
-
- oTest.fnWaitTest(
- "10 rows in the table on complete",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "fnInitComplete": function ( ) {
- mPass = $('#example tbody tr').length;
- }
- } );
- },
- function () { return mPass == 10; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnRowCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnRowCallback.js
deleted file mode 100644
index 2f248811..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnRowCallback.js
+++ /dev/null
@@ -1,105 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "fnRowCallback" );
-
-/* Note - fnRowCallback MUST return the first arguments (modified or not) */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnTest(
- "Default should be null",
- null,
- function () { return oSettings.fnRowCallback == null; }
- );
-
-
- oTest.fnTest(
- "Four arguments passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "fnRowCallback": function ( nTr ) {
- mPass = arguments.length;
- return nTr;
- }
- } );
- },
- function () { return mPass == 4; }
- );
-
-
- oTest.fnTest(
- "fnRowCallback called once for each drawn row",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- mPass++;
- return nTr;
- }
- } );
- },
- function () { return mPass == 10; }
- );
-
- oTest.fnTest(
- "fnRowCallback allows us to alter row information",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- $(nTr).addClass('unit_test');
- return nTr;
- }
- } );
- },
- function () { return $('#example tbody tr:eq(1)').hasClass('unit_test'); }
- );
-
- oTest.fnTest(
- "Data array has length matching columns",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- if ( asData.length != 5 )
- mPass = false;
- return nTr;
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "Data array has length matching columns",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- var iCount = 0;
- $('#example').dataTable( {
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- if ( iCount != iDrawIndex )
- mPass = false;
- iCount++;
- return nTr;
- }
- } );
- },
- function () { return mPass; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnSetColumnVis.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnSetColumnVis.js
deleted file mode 100644
index d2733a69..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnSetColumnVis.js
+++ /dev/null
@@ -1,120 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "fnSetColumnVis" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "All columns are visible by default",
- null,
- function () { return $('#example tbody tr:eq(0) td').length == 5; }
- );
-
- oTest.fnTest(
- "Can hide one column and it removes td column from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable();
- $('#example').dataTable().fnSetColumnVis( 1, false );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 4; }
- );
-
- oTest.fnTest(
- "Can hide one column and it removes thead th column from DOM",
- null,
- function () { return $('#example thead tr:eq(0) th').length == 4; }
- );
-
- oTest.fnTest(
- "Can hide one column and it removes tfoot th column from DOM",
- null,
- function () { return $('#example tfoot tr:eq(0) th').length == 4; }
- );
-
- oTest.fnTest(
- "The correct thead column has been hidden",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Platform(s)" &&
- jqNodes[2].innerHTML == "Engine version" &&
- jqNodes[3].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "The correct tbody column has been hidden",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } );
- },
- function () {
- var jqNodes = $('#example tbody tr:eq(0) td');
- var bReturn =
- jqNodes[0].innerHTML == "Gecko" &&
- jqNodes[1].innerHTML == "Gnome" &&
- jqNodes[2].innerHTML == "1.8" &&
- jqNodes[3].innerHTML == "A";
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "Can hide multiple columns and it removes td column from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable();
- $('#example').dataTable().fnSetColumnVis( 1, false );
- $('#example').dataTable().fnSetColumnVis( 2, false );
- $('#example').dataTable().fnSetColumnVis( 4, false );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 2; }
- );
-
- oTest.fnTest(
- "Multiple hide - removes thead th column from DOM",
- null,
- function () { return $('#example thead tr:eq(0) th').length == 2; }
- );
-
- oTest.fnTest(
- "Multiple hide - removes tfoot th column from DOM",
- null,
- function () { return $('#example tfoot tr:eq(0) th').length == 2; }
- );
-
- oTest.fnTest(
- "Multiple hide - the correct thead columns have been hidden",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Engine version"
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Multiple hide - the correct tbody columns have been hidden",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } );
- },
- function () {
- var jqNodes = $('#example tbody tr:eq(0) td');
- var bReturn =
- jqNodes[0].innerHTML == "Gecko" &&
- jqNodes[1].innerHTML == "1"
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnSetColumnVis2.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnSetColumnVis2.js
deleted file mode 100644
index fe795378..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/fnSetColumnVis2.js
+++ /dev/null
@@ -1,236 +0,0 @@
-// DATA_TEMPLATE: complex_header_2
-oTest.fnStart( "fnSetColumnVis with complex headers" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "All columns are visible by default",
- null,
- function () { return $('#example tbody tr:eq(0) td').length == 5; }
- );
-
- oTest.fnTest(
- "Hide the first column",
- function () {
- $('#example').dataTable().fnSetColumnVis( 0, false );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 4; }
- );
-
- oTest.fnTest(
- "First cell is '2' - first column hidden",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)').html() == "2"; }
- );
-
- oTest.fnTest(
- "First cell has colspan of 3",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('colspan') == 3; }
- );
-
- oTest.fnTest(
- "First cell has rowspan of 2",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('rowspan') == 2; }
- );
-
- oTest.fnTest(
- "First cell in last column is '11'",
- null,
- function () { return $('#example thead tr:eq(4) th:eq(0)').html() == 11; }
- );
-
- oTest.fnTest(
- "First cell in last column has been truncated to one column",
- null,
- function () { return $('#example thead tr:eq(4) th:eq(0)')[0].getAttribute('colspan') == 1; }
- );
-
-
- oTest.fnTest(
- "Hide the second column",
- function () {
- $('#example').dataTable().fnSetColumnVis( 0, true );
- $('#example').dataTable().fnSetColumnVis( 1, false );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 4; }
- );
-
- oTest.fnTest(
- "First cell is '1' - second column hidden",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)').html() == "1"; }
- );
-
- oTest.fnTest(
- "Second cell is '2' - second column hidden",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(1)').html() == "2"; }
- );
-
- oTest.fnTest(
- "First cell in fourth row is '10' (visibly the first) - second column hidden",
- null,
- function () { return $('#example thead tr:eq(3) th:eq(0)').html() == "10"; }
- );
-
- oTest.fnTest(
- "First cell has colspan of 1",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('colspan') == 1; }
- );
-
- oTest.fnTest(
- "Second cell has colspan of 2",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('colspan') == 2; }
- );
-
- oTest.fnTest(
- "First cell has rowspan of 1",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('rowspan') == 1; }
- );
-
- oTest.fnTest(
- "Second cell has rowspan of 2",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('rowspan') == 2; }
- );
-
- oTest.fnTest(
- "First cell in last column is '11'",
- null,
- function () { return $('#example thead tr:eq(4) th:eq(0)').html() == 11; }
- );
-
- oTest.fnTest(
- "First cell in last column has been truncated to one column",
- null,
- function () { return $('#example thead tr:eq(4) th:eq(0)')[0].getAttribute('colspan') == 1; }
- );
-
-
- oTest.fnTest(
- "Hide the first two columns",
- function () {
- $('#example').dataTable().fnSetColumnVis( 0, false );
- $('#example').dataTable().fnSetColumnVis( 1, false );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 3; }
- );
-
- oTest.fnTest(
- "First cell is '2' - first two columns hidden",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)').html() == "2"; }
- );
-
- oTest.fnTest(
- "Second cell is '3' - first two columns hidden",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(1)').html() == "3"; }
- );
-
- oTest.fnTest(
- "First cell in third row is '6' - first two columns hidden",
- null,
- function () { return $('#example thead tr:eq(2) th:eq(0)').html() == "6"; }
- );
-
- oTest.fnTest(
- "First cell has colspan of 2",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('colspan') == 2; }
- );
-
- oTest.fnTest(
- "First cell has rowspan of 2",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('rowspan') == 2; }
- );
-
- oTest.fnTest(
- "Second cell has rowspan of 1",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('rowspan') == 1; }
- );
-
- oTest.fnTest(
- "First cell in last column is '12'",
- null,
- function () { return $('#example thead tr:eq(4) th:eq(0)').html() == 12; }
- );
-
-
- oTest.fnTest(
- "Hide the third column",
- function () {
- $('#example').dataTable().fnSetColumnVis( 0, true );
- $('#example').dataTable().fnSetColumnVis( 1, true );
- $('#example').dataTable().fnSetColumnVis( 2, false );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 4; }
- );
-
- oTest.fnTest(
- "First cell is '1' - third column hidden",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(0)').html() == "1"; }
- );
-
- oTest.fnTest(
- "Second cell is '2' - third column hidden",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(1)').html() == "2"; }
- );
-
- oTest.fnTest(
- "First cell (visible second) in third row is '6' - third column hidden",
- null,
- function () { return $('#example thead tr:eq(2) th:eq(0)').html() == "6"; }
- );
-
- oTest.fnTest(
- "Second cell has colspan of 2",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('colspan') == 2; }
- );
-
- oTest.fnTest(
- "Second cell has rowspan of 2",
- null,
- function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('rowspan') == 2; }
- );
-
- oTest.fnTest(
- "Third row first cell (second visible) colspan is 1",
- null,
- function () { return $('#example thead tr:eq(2) th:eq(0)')[0].getAttribute('colspan') == 1; }
- );
-
- oTest.fnTest(
- "Third row second cell (third visible) value is 7",
- null,
- function () { return $('#example thead tr:eq(2) th:eq(1)').html() == "7"; }
- );
-
- oTest.fnTest(
- "Third row second cell (third visible) colspan is 1",
- null,
- function () { return $('#example thead tr:eq(2) th:eq(1)')[0].getAttribute('colspan') == 1; }
- );
-
- oTest.fnTest(
- "Third row second cell (third visible) rowspan is 3",
- null,
- function () { return $('#example thead tr:eq(2) th:eq(1)')[0].getAttribute('rowspan') == 3; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/html-autodetect-sort.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/html-autodetect-sort.js
deleted file mode 100644
index 57964135..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/html-autodetect-sort.js
+++ /dev/null
@@ -1,57 +0,0 @@
-// DATA_TEMPLATE: html_table
-oTest.fnStart( "HTML auto detect" );
-
-$(document).ready( function () {
- var oTable = $('#example').dataTable();
-
- oTest.fnTest(
- "Initial sort",
- null,
- function () {
- var ret =
- $('#example tbody tr:eq(0) td:eq(0)').html() == '1' &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == '2' &&
- $('#example tbody tr:eq(2) td:eq(0)').html() == '3';
- return ret;
- }
- );
-
- oTest.fnTest(
- "HTML sort",
- function () { $('#example thead th:eq(1)').click() },
- function () {
- var ret =
- $('#example tbody tr:eq(0) td:eq(0)').html() == '2' &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == '1' &&
- $('#example tbody tr:eq(2) td:eq(0)').html() == '4';
- return ret;
- }
- );
-
- oTest.fnTest(
- "HTML reverse sort",
- function () { $('#example thead th:eq(1)').click() },
- function () {
- var ret =
- $('#example tbody tr:eq(0) td:eq(0)').html() == '3' &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == '4' &&
- $('#example tbody tr:eq(2) td:eq(0)').html() == '1';
- return ret;
- }
- );
-
- oTest.fnTest(
- "Numeric sort",
- function () { $('#example thead th:eq(0)').click() },
- function () {
- var ret =
- $('#example tbody tr:eq(0) td:eq(0)').html() == '1' &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == '2' &&
- $('#example tbody tr:eq(2) td:eq(0)').html() == '3';
- return ret;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/iDisplayLength.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/iDisplayLength.js
deleted file mode 100644
index d3985659..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/iDisplayLength.js
+++ /dev/null
@@ -1,76 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "iDisplayLength" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable();
-
- oTest.fnTest(
- "Default length is ten",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Select menu shows 10",
- null,
- function () { return $('#example_length select').val() == 10; }
- );
-
-
- oTest.fnTest(
- "Set initial length to 25",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "iDisplayLength": 25
- } );
- },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Select menu shows 25",
- null,
- function () { return $('#example_length select').val() == 25; }
- );
-
-
- oTest.fnTest(
- "Set initial length to 100",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "iDisplayLength": 100
- } );
- },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Select menu shows 25",
- null,
- function () { return $('#example_length select').val() == 100; }
- );
-
-
- oTest.fnTest(
- "Set initial length to 23 (unknown select menu length)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "iDisplayLength": 23
- } );
- },
- function () { return $('#example tbody tr').length == 23; }
- );
-
- oTest.fnTest(
- "Select menu shows 10 (since 23 is unknow)",
- null,
- function () { return $('#example_length select').val() == 10; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.oPaginate.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.oPaginate.js
deleted file mode 100644
index 4b0f235f..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.oPaginate.js
+++ /dev/null
@@ -1,80 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "oLanguage.oPaginate" );
-
-/* Note that the paging language information only has relevence in full numbers */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( { "sPaginationType": "full_numbers" } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "oLanguage.oPaginate defaults",
- null,
- function () {
- var bReturn =
- oSettings.oLanguage.oPaginate.sFirst == "First" &&
- oSettings.oLanguage.oPaginate.sPrevious == "Previous" &&
- oSettings.oLanguage.oPaginate.sNext == "Next" &&
- oSettings.oLanguage.oPaginate.sLast == "Last";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "oLanguage.oPaginate defaults are in the DOM",
- null,
- function () {
- var bReturn =
- $('#example_paginate .first').html() == "First" &&
- $('#example_paginate .previous').html() == "Previous" &&
- $('#example_paginate .next').html() == "Next" &&
- $('#example_paginate .last').html() == "Last";
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "oLanguage.oPaginate can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sPaginationType": "full_numbers",
- "oLanguage": {
- "oPaginate": {
- "sFirst": "unit1",
- "sPrevious": "test2",
- "sNext": "unit3",
- "sLast": "test4"
- }
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var bReturn =
- oSettings.oLanguage.oPaginate.sFirst == "unit1" &&
- oSettings.oLanguage.oPaginate.sPrevious == "test2" &&
- oSettings.oLanguage.oPaginate.sNext == "unit3" &&
- oSettings.oLanguage.oPaginate.sLast == "test4";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "oLanguage.oPaginate definitions are in the DOM",
- null,
- function () {
- var bReturn =
- $('#example_paginate .first').html() == "unit1" &&
- $('#example_paginate .previous').html() == "test2" &&
- $('#example_paginate .next').html() == "unit3" &&
- $('#example_paginate .last').html() == "test4";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sInfo.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sInfo.js
deleted file mode 100644
index 234917c4..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sInfo.js
+++ /dev/null
@@ -1,109 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "oLanguage.sInfo" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Info language is 'Showing _START_ to _END_ of _TOTAL_ entries' by default",
- null,
- function () { return oSettings.oLanguage.sInfo == "Showing _START_ to _END_ of _TOTAL_ entries"; }
- );
-
- oTest.fnTest(
- "Info language default is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; }
- );
-
-
- oTest.fnTest(
- "Info language can be defined - without any macros",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "oLanguage": {
- "sInfo": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sInfo == "unit test"; }
- );
-
- oTest.fnTest(
- "Info language definition is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "unit test"; }
- );
-
- oTest.fnTest(
- "Info language can be defined - with macro _START_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "oLanguage": {
- "sInfo": "unit _START_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 test"; }
- );
-
- oTest.fnTest(
- "Info language can be defined - with macro _END_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "oLanguage": {
- "sInfo": "unit _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 10 test"; }
- );
-
- oTest.fnTest(
- "Info language can be defined - with macro _TOTAL_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "oLanguage": {
- "sInfo": "unit _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 57 test"; }
- );
-
- oTest.fnTest(
- "Info language can be defined - with macros _START_ and _END_",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "oLanguage": {
- "sInfo": "unit _START_ _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 10 test"; }
- );
-
- oTest.fnTest(
- "Info language can be defined - with macros _START_, _END_ and _TOTAL_",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "oLanguage": {
- "sInfo": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 10 57 test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sInfoEmpty.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sInfoEmpty.js
deleted file mode 100644
index adc5cc1f..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sInfoEmpty.js
+++ /dev/null
@@ -1,75 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "oLanguage.sInfoEmpty" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Info empty language is 'Showing 0 to 0 of 0 entries' by default",
- function () { oTable.fnFilter("nothinghere"); },
- function () { return oSettings.oLanguage.sInfoEmpty == "Showing 0 to 0 of 0 entries"; }
- );
-
- oTest.fnTest(
- "Info empty language default is in the DOM",
- null,
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "Showing 0 to 0 of 0 entries";
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "Info empty language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "oLanguage": {
- "sInfoEmpty": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- oTable.fnFilter("nothinghere");
- },
- function () { return oSettings.oLanguage.sInfoEmpty == "unit test"; }
- );
-
- oTest.fnTest(
- "Info empty language default is in the DOM",
- null,
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "unit test";
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "Macro's replaced",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "oLanguage": {
- "sInfoEmpty": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- oTable.fnFilter("nothinghere");
- },
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "unit 1 0 0 test";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sInfoPostFix.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sInfoPostFix.js
deleted file mode 100644
index 920bc80d..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sInfoPostFix.js
+++ /dev/null
@@ -1,73 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "oLanguage.sInfoPostFix" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Info post fix language is '' (blank) by default",
- null,
- function () { return oSettings.oLanguage.sInfoPostFix == ""; }
- );
-
- oTest.fnTest(
- "Width no post fix, the basic info shows",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; }
- );
-
-
- oTest.fnTest(
- "Info post fix language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "oLanguage": {
- "sInfoPostFix": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sInfoPostFix == "unit test"; }
- );
-
- oTest.fnTest(
- "Info empty language default is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit test"; }
- );
-
-
- oTest.fnTest(
- "Macros have no effect in the post fix",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "oLanguage": {
- "sInfoPostFix": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit _START_ _END_ _TOTAL_ test"; }
- );
-
-
- oTest.fnTest(
- "Post fix is applied after fintering info",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "oLanguage": {
- "sInfoPostFix": "unit test"
- }
- } );
- oTable.fnFilter("nothinghere");
- },
- function () { return document.getElementById('example_info').innerHTML = "Showing 0 to 0 of 0 entries unit (filtered from 57 total entries) test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sLengthMenu.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sLengthMenu.js
deleted file mode 100644
index ac513c45..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sLengthMenu.js
+++ /dev/null
@@ -1,106 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "oLanguage.sLengthMenu" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Menu language is 'Show _MENU_ entries' by default",
- null,
- function () { return oSettings.oLanguage.sLengthMenu == "Show _MENU_ entries"; }
- );
-
- oTest.fnTest(
- "_MENU_ macro is replaced by select menu in DOM",
- null,
- function () { return $('select', oSettings.aanFeatures.l[0]).length == 1 }
- );
-
- oTest.fnTest(
- "A label input is used",
- null,
- function () { return $('label', oSettings.aanFeatures.l[0]).length == 1 }
- );
-
- oTest.fnTest(
- "Default is put into DOM",
- null,
- function () {
- var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes;
- var bReturn =
- anChildren[0].nodeValue == "Show " &&
- anChildren[2].nodeValue == " entries";
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "Menu length language can be defined - no _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "oLanguage": {
- "sLengthMenu": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sLengthMenu == "unit test"; }
- );
-
- oTest.fnTest(
- "Menu length language definition is in the DOM",
- null,
- function () {
- return $('label', oSettings.aanFeatures.l[0]).text() == "unit test";
- }
- );
-
-
- oTest.fnTest(
- "Menu length language can be defined - with _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "oLanguage": {
- "sLengthMenu": "unit _MENU_ test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes;
- var bReturn =
- anChildren[0].nodeValue == "unit " &&
- anChildren[2].nodeValue == " test";
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "Only the _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "oLanguage": {
- "sLengthMenu": "_MENU_"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var anChildren = oSettings.aanFeatures.l[0].childNodes;
- var bReturn =
- anChildren.length == 1 &&
- $('select', oSettings.aanFeatures.l[0]).length == 1;
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sProcessing.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sProcessing.js
deleted file mode 100644
index 007b5135..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sProcessing.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "oLanguage.sProcessing" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bProcessing": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Processing language is 'Processing...' by default",
- null,
- function () { return oSettings.oLanguage.sProcessing == "Processing..."; }
- );
-
- oTest.fnTest(
- "Processing language default is in the DOM",
- null,
- function () { return document.getElementById('example_processing').innerHTML = "Processing..."; }
- );
-
-
- oTest.fnTest(
- "Processing language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bProcessing": true,
- "oLanguage": {
- "sProcessing": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sProcessing == "unit test"; }
- );
-
- oTest.fnTest(
- "Processing language definition is in the DOM",
- null,
- function () { return document.getElementById('example_processing').innerHTML = "unit test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sSearch.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sSearch.js
deleted file mode 100644
index 7cb4ba21..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sSearch.js
+++ /dev/null
@@ -1,66 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "oLanguage.sSearch" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Search language is 'Search:' by default",
- null,
- function () { return oSettings.oLanguage.sSearch == "Search:"; }
- );
-
- oTest.fnTest(
- "A label input is used",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).length == 1 }
- );
-
- oTest.fnTest(
- "Search language default is in the DOM",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).text()
- == "Search: "; }
- );
-
-
- oTest.fnTest(
- "Search language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "oLanguage": {
- "sSearch": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sSearch == "unit test"; }
- );
-
- oTest.fnTest(
- "Info language definition is in the DOM",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).text().indexOf('unit test') !== -1; }
- );
-
-
- oTest.fnTest(
- "Blank search has a no (separator) inserted",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "oLanguage": {
- "sSearch": ""
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return document.getElementById('example_filter').childNodes.length == 1; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sUrl.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sUrl.js
deleted file mode 100644
index 5f0d0cf5..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sUrl.js
+++ /dev/null
@@ -1,59 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "oLanguage.sUrl" );
-
-/* Note that we only test the internal storage of language information pulled form a file here
- * as the other language tests will check it goes into the DOM correctly
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "sUrl is blank by default",
- null,
- function () { return oSettings.oLanguage.sUrl == ""; }
- );
-
-
- oTest.fnWaitTest(
- "Loading of German file loads language information",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "oLanguage": {
- "sUrl": "../../../examples/examples_support/de_DE.txt"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var bReturn =
- oSettings.oLanguage.sProcessing == "Bitte warten..." &&
- oSettings.oLanguage.sLengthMenu == "_MENU_ Einträge anzeigen" &&
- oSettings.oLanguage.sZeroRecords == "Keine Einträge vorhanden." &&
- oSettings.oLanguage.sInfo == "_START_ bis _END_ von _TOTAL_ Einträgen" &&
- oSettings.oLanguage.sInfoEmpty == "0 bis 0 von 0 Einträgen" &&
- oSettings.oLanguage.sInfoFiltered == "(gefiltert von _MAX_ Einträgen)" &&
- oSettings.oLanguage.sInfoPostFix == "" &&
- oSettings.oLanguage.sSearch == "Suchen" &&
- oSettings.oLanguage.oPaginate.sFirst == "Erster" &&
- oSettings.oLanguage.oPaginate.sPrevious == "Zurück" &&
- oSettings.oLanguage.oPaginate.sNext == "Nächster" &&
- oSettings.oLanguage.oPaginate.sLast == "Letzter";
-
- return bReturn;
- }
- );
-
- /* One DOM check just to ensure that they go into the DOM */
- oTest.fnTest(
- "Loaded language goes into the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "1 bis 10 von 57 Einträgen"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sZeroRecords.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sZeroRecords.js
deleted file mode 100644
index 3134957c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oLanguage.sZeroRecords.js
+++ /dev/null
@@ -1,45 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "oLanguage.sZeroRecords" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Zero records language is 'No matching records found' by default",
- null,
- function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; }
- );
-
- oTest.fnTest(
- "Text is shown when empty table (after filtering)",
- function () { oTable.fnFilter('nothinghere'); },
- function () { return $('#example tbody tr td')[0].innerHTML == "No matching records found" }
- );
-
-
-
- oTest.fnTest(
- "Zero records language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "oLanguage": {
- "sZeroRecords": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sZeroRecords == "unit test"; }
- );
-
- oTest.fnTest(
- "Text is shown when empty table (after filtering)",
- function () { oTable.fnFilter('nothinghere2'); },
- function () { return $('#example tbody tr td')[0].innerHTML == "unit test" }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oSearch.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oSearch.js
deleted file mode 100644
index 7a96cbf4..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/oSearch.js
+++ /dev/null
@@ -1,101 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "oSearch" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Default values should be blank",
- null,
- function () {
- var bReturn = oSettings.oPreviousSearch.sSearch == "" &&
- !oSettings.oPreviousSearch.bRegex;
- return bReturn;
- }
- );
-
- /* This test might be considered iffy since the full object isn't given, but it's reasonable to
- * expect DataTables to cope with this. It should just assumine regex false
- */
- oTest.fnTest(
- "Search term only in object",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "oSearch": {
- "sSearch": "Mozilla"
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "New search will kill old one",
- function () {
- oTable.fnFilter("Opera");
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; }
- );
-
- oTest.fnTest(
- "Search plain text term and escape regex true",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "oSearch": {
- "sSearch": "DS",
- "bRegex": false
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Nintendo DS browser"; }
- );
-
- oTest.fnTest(
- "Search plain text term and escape regex false",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "oSearch": {
- "sSearch": "Opera",
- "bRegex": true
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; }
- );
-
- oTest.fnTest(
- "Search regex text term and escape regex true",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "oSearch": {
- "sSearch": "1.*",
- "bRegex": false
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnTest(
- "Search regex text term and escape regex false",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "oSearch": {
- "sSearch": "1.*",
- "bRegex": true
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/sAjaxSource.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/sAjaxSource.js
deleted file mode 100644
index dc86ad87..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/sAjaxSource.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "sAjaxSource" );
-
-/* Not interested in ajax source here other than to check it's default */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Server side is off by default",
- null,
- function () { return oSettings.sAjaxSource == null; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/sDom.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/sDom.js
deleted file mode 100644
index 8401ec0a..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/sDom.js
+++ /dev/null
@@ -1,319 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "sDom" );
-
-/* This is going to be brutal on the browser! There is a lot that can be tested here... */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Default DOM varaible",
- null,
- function () { return oSettings.sDom == "lfrtip"; }
- );
-
- oTest.fnTest(
- "Default DOM in document",
- null,
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- nNodes[4] == nInfo &&
- nNodes[5] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Check example 1 in code propagates",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sDom": '<"wrapper"flipt>'
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.sDom == '<"wrapper"flipt>'; }
- );
-
- oTest.fnTest(
- "Check example 1 in DOM",
- null,
- function () {
- var jqNodes = $('#demo div, #demo table');
- var nNodes = [];
-
- /* Strip the paging nodes */
- for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ )
- {
- if ( jqNodes[i].getAttribute('id') != "example_previous" &&
- jqNodes[i].getAttribute('id') != "example_next" )
- {
- nNodes.push( jqNodes[i] );
- }
- }
-
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
- var nCustomWrapper = $('div.wrapper')[0];
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nCustomWrapper &&
- nNodes[2] == nFilter &&
- nNodes[3] == nLength &&
- nNodes[4] == nInfo &&
- nNodes[5] == nPaging &&
- nNodes[6] == nTable;
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Check example 2 in DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sDom": '<lf<t>ip>'
- } );
- },
- function () {
- var jqNodes = $('#demo div, #demo table');
- var nNodes = [];
- var nCustomWrappers = []
-
- /* Strip the paging nodes */
- for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ )
- {
- if ( jqNodes[i].getAttribute('id') != "example_previous" &&
- jqNodes[i].getAttribute('id') != "example_next" )
- {
- nNodes.push( jqNodes[i] );
- }
-
- /* Only the two custom divs don't have class names */
- if ( jqNodes[i].className == "" )
- {
- nCustomWrappers.push( jqNodes[i] );
- }
- }
-
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nCustomWrappers[0] &&
- nNodes[2] == nLength &&
- nNodes[3] == nFilter &&
- nNodes[4] == nCustomWrappers[1] &&
- nNodes[5] == nTable &&
- nNodes[6] == nInfo &&
- nNodes[7] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Check no length element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sDom": 'frtip'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- null == nLength &&
- nNodes[1] == nFilter &&
- nNodes[2] == nTable &&
- nNodes[3] == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Check no filter element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sDom": 'lrtip'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- null == nFilter &&
- nNodes[2] == nTable &&
- nNodes[3] == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- /* Note we don't test for no table as this is not supported (and it would be fairly daft! */
-
- oTest.fnTest(
- "Check no info element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sDom": 'lfrtp'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- null == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Check no paging element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sDom": 'lfrti'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- nNodes[4] == nInfo &&
- null == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Element with an id",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "sDom": '<"#test"lf>rti'
- } );
- },
- function () {
- return $('#test').length == 1;
- }
- );
-
- oTest.fnTest(
- "Element with an id and a class",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "sDom": '<"#test.classTest"lf>rti'
- } );
- },
- function () {
- return ($('#test').length == 1 && $('#test')[0].className == "classTest");
- }
- );
-
- oTest.fnTest(
- "Element with just a class",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "sDom": '<"classTest"lf>rti'
- } );
- },
- function () {
- return ($('div.classTest').length == 1 );
- }
- );
-
- oTest.fnTest(
- "Two elements with an id",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "sDom": '<"#test1"lf>rti<"#test2"lf>'
- } );
- },
- function () {
- return ($('#test1').length == 1 && $('#test2').length == 1);
- }
- );
-
- oTest.fnTest(
- "Two elements with an id and one with a class",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "sDom": '<"#test1"lf>rti<"#test2.classTest"lf>'
- } );
- },
- function () {
- return ($('#test1').length == 1 && $('#test2').length == 1 && $('div.classTest').length == 1);
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/sPaginationType.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/sPaginationType.js
deleted file mode 100644
index 3fea13b7..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/sPaginationType.js
+++ /dev/null
@@ -1,122 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "sPaginationType" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable();
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Check two button paging is the default",
- null,
- function () { return oSettings.sPaginationType == "two_button"; }
- );
-
- oTest.fnTest(
- "Check class is applied",
- null,
- function () { return $('#example_paginate').hasClass('paging_two_button'); }
- );
-
- oTest.fnTest(
- "Two A elements are in the wrapper",
- null,
- function () { return $('#example_paginate a').length == 2; }
- );
-
- oTest.fnTest(
- "We have the previous button",
- null,
- function () { return document.getElementById('example_previous'); }
- );
-
- oTest.fnTest(
- "We have the next button",
- null,
- function () { return document.getElementById('example_next'); }
- );
-
- oTest.fnTest(
- "Previous button is disabled",
- null,
- function () { return $('#example_previous').hasClass('paginate_disabled_previous'); }
- );
-
- oTest.fnTest(
- "Next button is enabled",
- null,
- function () { return $('#example_next').hasClass('paginate_enabled_next'); }
- );
-
- /* Don't test paging - that's done by the zero config test script. */
-
-
- /* Two buttons paging */
- oTest.fnTest(
- "Can enabled full numbers paging",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sPaginationType": "full_numbers"
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.sPaginationType == "full_numbers"; }
- );
-
- oTest.fnTest(
- "Check full numbers class is applied",
- null,
- function () { return $('#example_paginate').hasClass('paging_full_numbers'); }
- );
-
-
- var nFirst, nPrevious, nNext, nLast;
- oTest.fnTest(
- "Jump to last page",
- function () {
- nFirst = $('div.dataTables_paginate a.first');
- nPrevious = $('div.dataTables_paginate a.previous');
- nNext = $('div.dataTables_paginate a.next');
- nLast = $('div.dataTables_paginate a.last');
- nLast.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries";
- }
- );
-
- oTest.fnTest(
- "Go to two pages previous",
- function () {
- nPrevious.click();
- nPrevious.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 31 to 40 of 57 entries";
- }
- );
-
- oTest.fnTest(
- "Next (second last) page",
- function () {
- nNext.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 41 to 50 of 57 entries";
- }
- );
-
- oTest.fnTest(
- "Jump to first page",
- function () {
- nFirst.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries";
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/sScrollXY.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/sScrollXY.js
deleted file mode 100644
index 58991d23..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/sScrollXY.js
+++ /dev/null
@@ -1,63 +0,0 @@
-// DATA_TEMPLATE: dom_data
-oTest.fnStart( "sScrollX / Y" );
-
-
-$(document).ready( function () {
- // Force some x scrolling
- $('body').css('white-space', 'nowrap');
- $('#container').css('width', '400px');
-
- var oTable = $('#example').dataTable( {
- "sScrollX": "100%",
- "sScrollY": "200px",
- "bPaginate": false
- } );
-
- oTest.fnWaitTest(
- "Header follows x-scrolling",
- function () { $('div.dataTables_scrollBody').scrollLeft(20); },
- function () { return $('div.dataTables_scrollHead').scrollLeft() == 20; }
- );
-
- oTest.fnWaitTest(
- "Footer follows x-scrolling",
- null,
- function () { return $('div.dataTables_scrollFoot').scrollLeft() == 20; }
- );
-
- oTest.fnWaitTest(
- "y-scrolling has no effect on header",
- function () { $('div.dataTables_scrollBody').scrollTop(20); },
- function () { return $('div.dataTables_scrollHead').scrollLeft() == 20; }
- );
-
- oTest.fnWaitTest(
- "Filtering results in sets y-scroll back to 0",
- function () { oTable.fnFilter('1') },
- function () { return $('div.dataTables_scrollBody').scrollTop() == 0; }
- );
-
- oTest.fnWaitTest(
- "Filtering has no effect on x-scroll",
- null,
- function () { return $('div.dataTables_scrollBody').scrollLeft() == 20; }
- );
-
- oTest.fnWaitTest(
- "Full x-scroll has header track all the way with it",
- function () {
- $('div.dataTables_scrollBody').scrollLeft(
- $('#example').width() - $('div.dataTables_scrollBody')[0].clientWidth
- );
- },
- function () { return $('div.dataTables_scrollBody').scrollLeft() == $('div.dataTables_scrollHead').scrollLeft(); }
- );
-
- oTest.fnTest(
- "Footer also tracked all the way",
- null,
- function () { return $('div.dataTables_scrollBody').scrollLeft() == $('div.dataTables_scrollFoot').scrollLeft(); }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/th_in_body.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/th_in_body.js
deleted file mode 100644
index 53c241ba..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/th_in_body.js
+++ /dev/null
@@ -1,437 +0,0 @@
-// DATA_TEMPLATE: dom_data_th
-oTest.fnStart( "Sanity checks for DataTables with DOM data and a TH in the body" );
-
-oTest.fnTest(
- "jQuery.dataTable function",
- null,
- function () { return typeof jQuery().dataTable == "function"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableSettings storage array",
- null,
- function () { return typeof jQuery().dataTableSettings == "object"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableExt plugin object",
- null,
- function () { return typeof jQuery().dataTableExt == "object"; }
-);
-
-$(document).ready( function () {
- $('#example').dataTable();
-
- /* Basic checks */
- oTest.fnTest(
- "Length changing div exists",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnTest(
- "Filtering div exists",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- oTest.fnTest(
- "Information div exists",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- oTest.fnTest(
- "Pagination div exists",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnTest(
- "Processing div is off by default",
- null,
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back on first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records - second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 100 records - first page",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('100').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back to 10 records",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('10').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' back to first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - second time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter increased to 'Win 98'",
- function () { $('#example_filter input').val("Win 98").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter decreased to 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - third time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter removed",
- function () { $('#example_filter input').val("").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
-
- /*
- * Filtering
- */
- oTest.fnTest(
- "Filter 'W' - rows",
- function () {
- /* Reset the table such that the old sorting doesn't mess things up */
- oSession.fnRestore();
- $('#example').dataTable();
- $('#example_filter input').val("W").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "Filter 'W' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Wi'",
- function () { $('#example_filter input').val("Wi").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 reverse",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - maintaing reverse sorting col 1",
- function () { $('#example_filter input').val("Win XP").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3 - reversed",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting col 3 - reversed info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere'",
- function () { $('#example_filter input').val("nothinghere").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() ==
- "No matching records found"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter back to blank and 1st column sorting",
- function () {
- $('#example_filter input').val("").keyup();
- $('#example thead th:eq(0)').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry",
- function () {
- $('#example_filter input').val("Win").keyup();
- $('#example_filter input').val("GeckoWin").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry with space",
- function () {
- $('#example_filter input').val("Gecko Win").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; }
- );
-
-
-
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/6872-default-content-missing-props.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/6872-default-content-missing-props.js
deleted file mode 100644
index e9c384d6..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/6872-default-content-missing-props.js
+++ /dev/null
@@ -1,285 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "6872 - mDataProp and sDefaultContent for deep objects" );
-
-$(document).ready( function () {
- var test = false;
-
- $.fn.dataTable.ext.sErrMode = "throw";
-
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Shallow properties
- */
-
- $('#example').dataTable( {
- "aaData": [
- {
- "a": "a",
- "b": "b",
- "c": "c",
- "d": "d",
- "e": "e"
- }
- ],
- "aoColumns": [
- { "mDataProp": "a" },
- { "mDataProp": "b" },
- { "mDataProp": "c" },
- { "mDataProp": "d" },
- { "mDataProp": "e" }
- ]
- } );
-
- oTest.fnTest(
- "Basic initialisation of objects works",
- null,
- function () { return $('#example tbody td:eq(0)').html() === "a"; }
- );
-
- oTest.fnTest(
- "Error when property missing (no default content)",
- function () {
- oSession.fnRestore();
- test = false;
-
- try {
- $('#example').dataTable( {
- "aaData": [
- {
- "a": "a",
- "b": "b",
- "d": "d",
- "e": "e"
- }
- ],
- "aoColumns": [
- { "mDataProp": "a" },
- { "mDataProp": "b" },
- { "mDataProp": "c" },
- { "mDataProp": "d" },
- { "mDataProp": "e" }
- ]
- } );
- } catch (e) {
- test = true;
- }
- },
- function () { return test; }
- );
-
- oTest.fnTest(
- "Default content used for missing prop and no error",
- function () {
- oSession.fnRestore();
-
- $('#example').dataTable( {
- "aaData": [
- {
- "a": "a",
- "b": "b",
- "d": "d",
- "e": "e"
- }
- ],
- "aoColumns": [
- { "mDataProp": "a" },
- { "mDataProp": "b" },
- { "mDataProp": "c", "sDefaultContent": "test" },
- { "mDataProp": "d" },
- { "mDataProp": "e" }
- ]
- } );
- },
- function () { return $('#example tbody td:eq(2)').html() === "test"; }
- );
-
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Deep properties with a single object
- */
-
- oTest.fnTest(
- "Basic test with deep properties",
- function () {
- oSession.fnRestore();
-
- $('#example').dataTable( {
- "aaData": [
- {
- "z": {
- "a": "a",
- "b": "b",
- "c": "c",
- "d": "d",
- "e": "e"
- }
- }
- ],
- "aoColumns": [
- { "mDataProp": "z.a" },
- { "mDataProp": "z.b" },
- { "mDataProp": "z.c" },
- { "mDataProp": "z.d" },
- { "mDataProp": "z.e" }
- ]
- } );
- },
- function () { return $('#example tbody td:eq(0)').html() === "a"; }
- );
-
- oTest.fnTest(
- "Error when property missing on deep get (no default content)",
- function () {
- oSession.fnRestore();
- test = false;
-
- try {
- $('#example').dataTable( {
- "aaData": [
- {
- "z": {
- "a": "a",
- "b": "b",
- "c": "c",
- "e": "e"
- }
- }
- ],
- "aoColumns": [
- { "mDataProp": "z.a" },
- { "mDataProp": "z.b" },
- { "mDataProp": "z.c" },
- { "mDataProp": "z.d" },
- { "mDataProp": "z.e" }
- ]
- } );
- } catch (e) {
- test = true;
- }
- },
- function () { return test; }
- );
-
- oTest.fnTest(
- "Default content used for missing prop on deep get and no error",
- function () {
- oSession.fnRestore();
-
- $('#example').dataTable( {
- "aaData": [
- {
- "z": {
- "a": "a",
- "b": "b",
- "c": "c",
- "e": "e"
- }
- }
- ],
- "aoColumns": [
- { "mDataProp": "z.a" },
- { "mDataProp": "z.b" },
- { "mDataProp": "z.c" },
- { "mDataProp": "z.d", "sDefaultContent": "test" },
- { "mDataProp": "z.e" }
- ]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() === "test"; }
- );
-
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Deep properties with individual objects
- */
-
- oTest.fnTest(
- "Basic test with deep individual properties",
- function () {
- oSession.fnRestore();
-
- $('#example').dataTable( {
- "aaData": [
- {
- "m": { "a": "a" },
- "n": { "b": "b" },
- "o": { "c": "c" },
- "p": { "d": "d" },
- "q": { "e": "e" }
- }
- ],
- "aoColumns": [
- { "mDataProp": "m.a" },
- { "mDataProp": "n.b" },
- { "mDataProp": "o.c" },
- { "mDataProp": "p.d" },
- { "mDataProp": "q.e" }
- ]
- } );
- },
- function () { return $('#example tbody td:eq(0)').html() === "a"; }
- );
-
- oTest.fnTest(
- "Error when property missing on deep individual get (no default content)",
- function () {
- oSession.fnRestore();
- test = false;
-
- try {
- $('#example').dataTable( {
- "aaData": [
- {
- "m": { "a": "a" },
- "n": { "b": "b" },
- "p": { "d": "d" },
- "q": { "e": "e" }
- }
- ],
- "aoColumns": [
- { "mDataProp": "m.a" },
- { "mDataProp": "n.b" },
- { "mDataProp": "o.c" },
- { "mDataProp": "p.d" },
- { "mDataProp": "q.e" }
- ]
- } );
- } catch (e) {
- test = true;
- }
- },
- function () { return test; }
- );
-
- oTest.fnTest(
- "Default content used for missing prop on deep individual get and no error",
- function () {
- oSession.fnRestore();
-
- $('#example').dataTable( {
- "aaData": [
- {
- "m": { "a": "a" },
- "n": { "b": "b" },
- "p": { "d": "d" },
- "q": { "e": "e" }
- }
- ],
- "aoColumns": [
- { "mDataProp": "m.a" },
- { "mDataProp": "n.b" },
- { "mDataProp": "o.c", "sDefaultContent": "test" },
- { "mDataProp": "p.d" },
- { "mDataProp": "q.e" }
- ]
- } );
- },
- function () { return $('#example tbody td:eq(2)').html() === "test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/8549--string-sorting-nonstrings.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/8549--string-sorting-nonstrings.js
deleted file mode 100644
index b3b0320e..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/8549--string-sorting-nonstrings.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "8549 - string sorting non-string types" );
-
-$(document).ready( function () {
- var test = false;
-
- $.fn.dataTable.ext.sErrMode = "throw";
-
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Shallow properties
- */
-
- $('#example').dataTable( {
- "aaData": [
- [ null ],
- [ 5 ],
- [ "1a" ],
- [ new Date(0) ]
- ],
- "aoColumns": [
- { "sTitle": "Test" }
- ]
- } );
-
- oTest.fnTest(
- "Sorting works - first cell is empty",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() === ""; }
- );
-
- oTest.fnTest(
- "Second cell is 1a",
- null,
- function () { return $('#example tbody tr:eq(1) td:eq(0)').html() === "1a"; }
- );
-
- oTest.fnTest(
- "Third cell is 5",
- null,
- function () { return $('#example tbody tr:eq(2) td:eq(0)').html() === "5"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/_zero_config.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/_zero_config.js
deleted file mode 100644
index 58a8d6ae..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/_zero_config.js
+++ /dev/null
@@ -1,440 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "Sanity checks for DataTables with data from JS" );
-
-oTest.fnTest(
- "jQuery.dataTable function",
- null,
- function () { return typeof jQuery().dataTable == "function"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableSettings storage array",
- null,
- function () { return typeof jQuery().dataTableSettings == "object"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableExt plugin object",
- null,
- function () { return typeof jQuery().dataTableExt == "object"; }
-);
-
-$(document).ready( function () {
- var oInit = {
- "aaData": gaaData
- };
- $('#example').dataTable( oInit );
-
- /* Basic checks */
- oTest.fnTest(
- "Length changing div exists",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnTest(
- "Filtering div exists",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- oTest.fnTest(
- "Information div exists",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- oTest.fnTest(
- "Pagination div exists",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnTest(
- "Processing div is off by default",
- null,
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back on first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records - second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 100 records - first page",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('100').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back to 10 records",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('10').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' back to first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - second time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter increased to 'Win 98'",
- function () { $('#example_filter input').val("Win 98").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter decreased to 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - third time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter removed",
- function () { $('#example_filter input').val("").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
-
- /*
- * Filtering
- */
- oTest.fnTest(
- "Filter 'W' - rows",
- function () {
- /* Reset the table such that the old sorting doesn't mess things up */
- oSession.fnRestore();
- $('#example').dataTable( oInit );
- $('#example_filter input').val("W").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "Filter 'W' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Wi'",
- function () { $('#example_filter input').val("Wi").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 reverse",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - maintaing reverse sorting col 1",
- function () { $('#example_filter input').val("Win XP").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3 - reversed",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting col 3 - reversed info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere'",
- function () { $('#example_filter input').val("nothinghere").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() ==
- "No matching records found"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter back to blank and 1st column sorting",
- function () {
- $('#example_filter input').val("").keyup();
- $('#example thead th:eq(0)').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry",
- function () {
- $('#example_filter input').val("Win").keyup();
- $('#example_filter input').val("GeckoWin").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry with space",
- function () {
- $('#example_filter input').val("Gecko Win").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; }
- );
-
-
-
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aaSorting.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aaSorting.js
deleted file mode 100644
index 12b528b7..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aaSorting.js
+++ /dev/null
@@ -1,198 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "aaSorting" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Default sorting is single column",
- null,
- function () {
- return oSettings.aaSorting.length == 1 && typeof oSettings.aaSorting[0] == 'object';
- }
- );
-
- oTest.fnTest(
- "Default sorting is first column asc",
- null,
- function () {
- return oSettings.aaSorting[0].length == 3 && oSettings.aaSorting[0][0] == 0 &&
- oSettings.aaSorting[0][1] == 'asc';
- }
- );
-
- oTest.fnTest(
- "Sorting is applied",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
-
- oTest.fnTest(
- "Custom sorting on single string column asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aaSorting": [['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
-
- oTest.fnTest(
- "Custom sorting on single string column desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aaSorting": [['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
-
- oTest.fnTest(
- "Custom sorting on single int column asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aaSorting": [['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
-
- oTest.fnTest(
- "Custom sorting on single int column desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aaSorting": [['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
-
- oTest.fnTest(
- "Multi-column sorting (2 column) - string asc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aaSorting": [['0','asc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; }
- );
-
- oTest.fnTest(
- "Multi-column sorting (2 column) - string asc / string desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aaSorting": [['0','asc'], ['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Multi-column sorting (2 column) - string desc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aaSorting": [['0','desc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "iPod Touch / iPhone"; }
- );
-
- oTest.fnTest(
- "Multi-column sorting (2 column) - string desc / string desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aaSorting": [['0','desc'], ['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Safari 3.0"; }
- );
-
-
- oTest.fnTest(
- "Multi-column sorting (2 column) - string asc / int asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aaSorting": [['0','asc'], ['3','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "1"; }
- );
-
- oTest.fnTest(
- "Multi-column sorting (2 column) - string asc / int desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aaSorting": [['0','asc'], ['3','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "1.9"; }
- );
-
- oTest.fnTest(
- "Multi-column sorting (2 column) - string desc / int asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aaSorting": [['0','desc'], ['3','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "125.5"; }
- );
-
- oTest.fnTest(
- "Multi-column sorting (2 column) - string desc / int desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aaSorting": [['0','desc'], ['3','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Multi-column sorting (3 column) - string asc / int asc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aaSorting": [['0','asc'], ['3','asc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody tr:eq(7) td:eq(1)').html() == "Firefox 1.0"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aaSortingFixed.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aaSortingFixed.js
deleted file mode 100644
index be5b2f07..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aaSortingFixed.js
+++ /dev/null
@@ -1,64 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "aaSortingFixed" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "No fixed sorting by default",
- null,
- function () {
- return oSettings.aaSortingFixed == null;
- }
- );
-
-
- oTest.fnTest(
- "Fixed sorting on first column (string/asc) with user sorting on second column (string/asc)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aaSortingFixed": [['0','asc']]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; }
- );
-
- oTest.fnTest(
- "Fixed sorting on first column (string/asc) with user sorting on second column (string/desc)",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/asc)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aaSortingFixed": [['3','asc']]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/desc)",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "PSP browser"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.bSearchable.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.bSearchable.js
deleted file mode 100644
index 64ab0e42..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.bSearchable.js
+++ /dev/null
@@ -1,71 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "aoColumns.bSeachable" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Columns are searchable by default",
- function () { oTable.fnFilter("Camino"); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html().match(/Camino/); }
- );
-
- oTest.fnTest(
- "Disabling sorting on a column removes it from the global filter",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- { "bSearchable": false },
- null,
- null,
- null
- ]
- } );
- oSettings = oTable.fnSettings();
- oTable.fnFilter("Camino");
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnTest(
- "Disabled on one column has no effect on other columns",
- function () { oTable.fnFilter("Webkit"); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; }
- );
-
- oTest.fnTest(
- "Disable filtering on multiple columns",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- { "bSearchable": false },
- { "bSearchable": false },
- null,
- null,
- null
- ]
- } );
- oSettings = oTable.fnSettings();
- oTable.fnFilter("Webkit");
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnTest(
- "Filter on second disabled column",
- function () { oTable.fnFilter("Camino"); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.bSortable.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.bSortable.js
deleted file mode 100644
index 47a88281..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.bSortable.js
+++ /dev/null
@@ -1,109 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "aoColumns.bSortable" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "All columns are sortable by default",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Can disable sorting from one column",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- { "bSortable": false },
- null,
- null,
- null
- ]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; }
- );
-
- oTest.fnTest(
- "Disabled column has no sorting class",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") == false; }
- );
-
- oTest.fnTest(
- "Other columns can still sort",
- function () {
- $('#example thead th:eq(4)').click();
- $('#example thead th:eq(4)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; }
- );
-
- oTest.fnTest(
- "Disable sorting on multiple columns - no sorting classes",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- { "bSortable": false },
- null,
- { "bSortable": false },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example thead th:eq(1)').hasClass("sorting") ||
- $('#example thead th:eq(3)').hasClass("sorting")
- return bReturn == false;
- }
- );
-
- oTest.fnTest(
- "Sorting on disabled column 1 has no effect",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; }
- );
-
- oTest.fnTest(
- "Sorting on disabled column 2 has no effect",
- function () {
- $('#example thead th:eq(3)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; }
- );
-
- oTest.fnTest(
- "Second sort on disabled column 2 has no effect",
- function () {
- $('#example thead th:eq(3)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; }
- );
-
- oTest.fnTest(
- "Even with multiple disabled sorting columns other columns can still sort",
- function () {
- $('#example thead th:eq(4)').click();
- $('#example thead th:eq(4)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.bUseRendered.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.bUseRendered.js
deleted file mode 100644
index 068d7656..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.bUseRendered.js
+++ /dev/null
@@ -1,148 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "aoColumns.bUseRendered" );
-
-/* bUseRendered is used to alter sorting data, if false then the original data is used for
- * sorting rather than the rendered data
- */
-
-$(document).ready( function () {
- /* Check the default */
- var mTmp = 0;
-
- var oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( mTmp == 0 ) {
- mTmp++;
- return "aaa";
- } else
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Default for bUseRendered is true - rendered data is used for sorting",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'aaa'; }
- );
-
- oTest.fnTest(
- "When bUseRendered is false, original data is used for sorting",
- function () {
- mTmp = 0;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- {
- "bUseRendered": false,
- "fnRender": function (a) {
- if ( mTmp == 0 ) {
- mTmp++;
- return "aaa";
- } else {
- return a.aData[a.iDataColumn];
- }
- }
- },
- null,
- null,
- null
- ]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; }
- );
-
-
- oTest.fnTest(
- "bUseRendered set to false on one columns and true (default) on two others",
- function () {
- mTmp = 0;
- var mTmp2 = 0;
- var mTmp3 = 0;
-
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- {
- "fnRender": function (a) {
- if ( mTmp == 0 ) {
- mTmp++;
- return "aaa1";
- } else {
- return a.aData[a.iDataColumn];
- }
- }
- },
- {
- "bUseRendered": false,
- "fnRender": function (a) {
- if ( mTmp2 == 0 ) {
- mTmp2++;
- return "aaa2";
- } else {
- return a.aData[a.iDataColumn];
- }
- }
- },
- {
- "fnRender": function (a) {
- if ( mTmp3 == 0 ) {
- mTmp3++;
- return "zzz3";
- } else {
- return a.aData[a.iDataColumn];
- }
- }
- },
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'aaa1'; }
- );
-
- oTest.fnTest(
- "Multi-column rendering - 2nd column sorting",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; }
- );
-
- oTest.fnTest(
- "Multi-column rendering - 3rd column sorting",
- function () {
- $('#example thead th:eq(2)').click();
- $('#example thead th:eq(2)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(2)').html() == 'zzz3'; }
- );
-
- oTest.fnTest(
- "Multi-column rendering - 4th column sorting",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == '-'; }
- );
-
- oTest.fnTest(
- "Multi-column rendering - 5th column sorting",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.bVisible.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.bVisible.js
deleted file mode 100644
index b7c6c745..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.bVisible.js
+++ /dev/null
@@ -1,110 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "aoColumns.bVisible" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "All columns are visible by default",
- null,
- function () { return $('#example tbody tr:eq(0) td').length == 5; }
- );
-
- oTest.fnTest(
- "Can hide one column and it removes td column from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- { "bVisible": false },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 4; }
- );
-
- oTest.fnTest(
- "Can hide one column and it removes thead th column from DOM",
- null,
- function () { return $('#example thead tr:eq(0) th').length == 4; }
- );
-
- oTest.fnTest(
- "Can hide one column and it removes tfoot th column from DOM",
- null,
- function () { return $('#example tfoot tr:eq(0) th').length == 4; }
- );
-
- oTest.fnTest(
- "The correct tbody column has been hidden",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } );
- },
- function () {
- var jqNodes = $('#example tbody tr:eq(0) td');
- var bReturn =
- jqNodes[0].innerHTML == "Gecko" &&
- jqNodes[1].innerHTML == "Gnome" &&
- jqNodes[2].innerHTML == "1.8" &&
- jqNodes[3].innerHTML == "A";
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "Can hide multiple columns and it removes td column from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- { "bVisible": false },
- { "bVisible": false },
- null,
- { "bVisible": false }
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 2; }
- );
-
- oTest.fnTest(
- "Multiple hide - removes thead th column from DOM",
- null,
- function () { return $('#example thead tr:eq(0) th').length == 2; }
- );
-
- oTest.fnTest(
- "Multiple hide - removes tfoot th column from DOM",
- null,
- function () { return $('#example tfoot tr:eq(0) th').length == 2; }
- );
-
- oTest.fnTest(
- "Multiple hide - the correct tbody columns have been hidden",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } );
- },
- function () {
- var jqNodes = $('#example tbody tr:eq(0) td');
- var bReturn =
- jqNodes[0].innerHTML == "Gecko" &&
- jqNodes[1].innerHTML == "1"
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.fnRender.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.fnRender.js
deleted file mode 100644
index 6d868424..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.fnRender.js
+++ /dev/null
@@ -1,156 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "aoColumns.fnRender" );
-
-$(document).ready( function () {
- /* Check the default */
- var mTmp = 0;
- var oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- mTmp++;
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Single column - fnRender is called once for each row",
- null,
- function () { return mTmp == 57; }
- );
-
- oTest.fnTest(
- "Confirm that fnRender passes two arguments with four parameters",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( arguments.length != 2 || typeof a.iDataRow=='undefined' ||
- typeof a.iDataColumn=='undefined' || typeof a.aData=='undefined' ||
- typeof a.mDataProp=='undefined' )
- {
- mTmp = false;
- }
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnTest(
- "fnRender iDataColumn is the column",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( a.iDataColumn != 1 )
- {
- mTmp = false;
- }
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnTest(
- "fnRender aData is data array of correct size",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( a.aData.length != 5 )
- {
- mTmp = false;
- }
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnTest(
- "Passed back data is put into the DOM",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- return 'unittest';
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'unittest'; }
- );
-
- oTest.fnTest(
- "Passed back data is put into the DOM",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- null,
- { "fnRender": function (a) {
- return 'unittest1';
- } },
- { "fnRender": function (a) {
- return 'unittest2';
- } },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example tbody tr:eq(0) td:eq(2)').html() == 'unittest1' &&
- $('#example tbody tr:eq(0) td:eq(3)').html() == 'unittest2';
- return bReturn; }
- );
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.iDataSort.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.iDataSort.js
deleted file mode 100644
index 972cceb3..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.iDataSort.js
+++ /dev/null
@@ -1,90 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "aoColumns.iDataSort" );
-
-$(document).ready( function () {
- /* Should know that sorting already works by default from other tests, so we can jump
- * right in here
- */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- { "iDataSort": 4 },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Sorting on first column is uneffected",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; }
- );
-
- oTest.fnTest(
- "Sorting on second column is the order of the fifth",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
- oTest.fnTest(
- "Reserve sorting on second column uses fifth column as well",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; }
- );
-
- oTest.fnTest(
- "Sorting on 5th column retains it's own sorting",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
-
- oTest.fnTest(
- "Use 2nd col for sorting 5th col and via-versa - no effect on first col sorting",
- function () {
- mTmp = 0;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- { "iDataSort": 4 },
- null,
- null,
- { "iDataSort": 1 }
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; }
- );
-
- oTest.fnTest(
- "2nd col sorting uses fifth col",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
- oTest.fnTest(
- "2nd col sorting uses fifth col - reversed",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; }
- );
-
- oTest.fnTest(
- "5th col sorting uses 2nd col",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; }
- );
-
- oTest.fnTest(
- "5th col sorting uses 2nd col - reversed",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'Seamonkey 1.1'; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.sClass.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.sClass.js
deleted file mode 100644
index de3f4d9e..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.sClass.js
+++ /dev/null
@@ -1,115 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "aoColumns.sClass" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "By default the test class hasn't been applied to the column (sanity!)",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(2)').hasClass('unittest') == false; }
- );
-
- oTest.fnTest(
- "Add a class to a single column - first row",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- null,
- { "sClass": 'unittest' },
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(1) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnTest(
- "Add a class to a single column - third row",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnTest(
- "Add a class to a single column - last row",
- null,
- function () { return $('#example tbody tr:eq(9) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnTest(
- "Add a class to a single column - has not applied to other columns - 1st",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest') == false; }
- );
-
- oTest.fnTest(
- "Add a class to a single column - has not applied to other columns - 5th",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(4)').hasClass('unittest') == false; }
- );
-
- oTest.fnTest(
- "Add a class to a single column - seventh row - second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody tr:eq(6) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnTest(
- "Add a class to a single column - has not applied to header",
- null,
- function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; }
- );
-
- oTest.fnTest(
- "Add a class to a single column - has not applied to footer",
- null,
- function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; }
- );
-
-
- oTest.fnTest(
- "Class defined for multiple columns - first row",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- { "sClass": 'unittest2' },
- null,
- null,
- { "sClass": 'unittest1' },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest2') &&
- $('#example tbody tr:eq(8) td:eq(3)').hasClass('unittest1');
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Class defined for multiple columns - has not applied to other columns - 5th 1",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(4)').hasClass('unittest1') == false; }
- );
-
- oTest.fnTest(
- "Class defined for multiple columns - has not applied to other columns - 5th 2",
- null,
- function () { return $('#example tbody tr:eq(6) td:eq(4)').hasClass('unittest2') == false; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.sName.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.sName.js
deleted file mode 100644
index bd033ef7..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.sName.js
+++ /dev/null
@@ -1,28 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "aoColumns.sName" );
-
-/* This has no effect at all in DOM methods - so we just check that it has applied the name */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- null,
- null,
- { "sName": 'unit test' },
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Names are stored in the columns object",
- null,
- function () { return oSettings.aoColumns[3].sName =="unit test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.sTitle.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.sTitle.js
deleted file mode 100644
index 99dbc1dd..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.sTitle.js
+++ /dev/null
@@ -1,82 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "aoColumns.sTitle" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "If not given, then the columns titles are empty",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Browser" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Can set a single column title - and others are read from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- { "sTitle": 'unit test' },
- null,
- null,
- null
- ]
- } );
- },
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "unit test" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Can set multiple column titles",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- { "sTitle": 'unit test 1' },
- null,
- null,
- { "sTitle": 'unit test 2' }
- ]
- } );
- },
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "unit test 1" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "unit test 2";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.sWidth.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.sWidth.js
deleted file mode 100644
index 086a0e18..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoColumns.sWidth.js
+++ /dev/null
@@ -1,87 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "aoColumns.sWidth" );
-
-/* NOTE - we need to disable the auto width for the majority of these test in order to preform
- * these tests as the auto width will convert the width to a px value. We can do 'non-exact' tests
- * with auto width enabled however to ensure it scales columns as required
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "bAutoWidth": false,
- "aoColumns": [
- null,
- { "sWidth": '40%' },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "With auto width disabled the width for one column is appled",
- null,
- function () { return $('#example thead th:eq(1)')[0].style.width == "40%"; }
- );
-
- oTest.fnTest(
- "With auto width disabled the width for one column is appled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "bAutoWidth": false,
- "aoColumns": [
- null,
- null,
- { "sWidth": '20%' },
- { "sWidth": '30%' },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example thead th:eq(2)')[0].style.width == "20%" &&
- $('#example thead th:eq(3)')[0].style.width == "30%";
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "With auto width, it will make the smallest column the largest with percentage width given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumns": [
- null,
- null,
- null,
- { "sWidth": '40%' },
- null
- ]
- } );
- },
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
-
- if ( a3>a0 && a3>a1 && a3>a2 && a3>a4 )
- return true;
- else
- return false;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoSearchCols.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoSearchCols.js
deleted file mode 100644
index 822b40fe..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/aoSearchCols.js
+++ /dev/null
@@ -1,119 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "aoSearchCols" );
-
-/* We could be here forever testing this one, so we test a limited subset on a couple of colums */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Default should be to have a empty colums array",
- null,
- function () {
- var bReturn =
- oSettings.aoPreSearchCols[0].sSearch == 0 && !oSettings.aoPreSearchCols[0].bRegex &&
- oSettings.aoPreSearchCols[1].sSearch == 0 && !oSettings.aoPreSearchCols[1].bRegex &&
- oSettings.aoPreSearchCols[2].sSearch == 0 && !oSettings.aoPreSearchCols[2].bRegex &&
- oSettings.aoPreSearchCols[3].sSearch == 0 && !oSettings.aoPreSearchCols[3].bRegex &&
- oSettings.aoPreSearchCols[4].sSearch == 0 && !oSettings.aoPreSearchCols[4].bRegex;
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "Search on a single column - no regex statement given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoSearchCols": [
- null,
- { "sSearch": "Mozilla" },
- null,
- { "sSearch": "1" },
- null
- ]
- } );
- },
- function () { return $('#example_info').html() == "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Search on two columns - no regex statement given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoSearchCols": [
- null,
- { "sSearch": "Mozilla" },
- null,
- { "sSearch": "1.5" },
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1.5"; }
- );
-
- oTest.fnTest(
- "Search on single column - escape regex false",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoSearchCols": [
- { "sSearch": ".*ML", "bEscapeRegex": false },
- null,
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example_info').html() == "Showing 1 to 3 of 3 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Search on two columns - escape regex false on first, true on second",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoSearchCols": [
- { "sSearch": ".*ML", "bEscapeRegex": false },
- { "sSearch": "3.3", "bEscapeRegex": true },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Konqureror 3.3"; }
- );
-
- oTest.fnTest(
- "Search on two columns (no records) - escape regex false on first, true on second",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "aoSearchCols": [
- { "sSearch": ".*ML", "bEscapeRegex": false },
- { "sSearch": "Allan", "bEscapeRegex": true },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/asStripClasses.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/asStripClasses.js
deleted file mode 100644
index 71d8d254..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/asStripClasses.js
+++ /dev/null
@@ -1,100 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "asStripeClasses" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "aaData": gaaData
- } );
-
- oTest.fnTest(
- "Default row striping is applied",
- null,
- function () {
- return $('#example tbody tr:eq(0)').hasClass('odd') &&
- $('#example tbody tr:eq(1)').hasClass('even') &&
- $('#example tbody tr:eq(2)').hasClass('odd') &&
- $('#example tbody tr:eq(3)').hasClass('even');
- }
- );
-
- oTest.fnTest(
- "Row striping on the second page",
- function () { $('#example_next').click(); },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('odd') &&
- $('#example tbody tr:eq(1)').hasClass('even') &&
- $('#example tbody tr:eq(2)').hasClass('odd') &&
- $('#example tbody tr:eq(3)').hasClass('even');
- }
- );
-
- /* No striping */
- oTest.fnTest(
- "No row striping",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "asStripeClasses": []
- } );
- },
- function () {
- return $('#example tbody tr:eq(0)')[0].className == "" &&
- $('#example tbody tr:eq(1)')[0].className == "" &&
- $('#example tbody tr:eq(2)')[0].className == "" &&
- $('#example tbody tr:eq(3)')[0].className == "";
- }
- );
-
- /* Custom striping */
- oTest.fnTest(
- "Custom striping [2]",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "asStripeClasses": [ 'test1', 'test2' ]
- } );
- },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test1') &&
- $('#example tbody tr:eq(3)').hasClass('test2');
- }
- );
-
-
- /* long array of striping */
- oTest.fnTest(
- "Custom striping [4]",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "asStripeClasses": [ 'test1', 'test2', 'test3', 'test4' ]
- } );
- },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test3') &&
- $('#example tbody tr:eq(3)').hasClass('test4');
- }
- );
-
- oTest.fnTest(
- "Custom striping is restarted on second page [2]",
- function () { $('#example_next').click(); },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test3') &&
- $('#example tbody tr:eq(3)').hasClass('test4');
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bAutoWidth.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bAutoWidth.js
deleted file mode 100644
index 205deccc..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bAutoWidth.js
+++ /dev/null
@@ -1,142 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "bAutoWidth" );
-
-/* It's actually a little tricky to test this. We can't test absolute numbers because
- * different browsers and different platforms will render the width of the columns slightly
- * differently. However, we certainly can test the principle of what should happen (column
- * width doesn't change over pages)
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Auto width is enabled by default",
- null,
- function () { return oSettings.oFeatures.bAutoWidth; }
- );
-
- oTest.fnTest(
- "First column has a width assigned to it",
- null,
- function () { return $('#example thead th:eq(0)').attr('style').match(/width/i); }
- );
-
- /*
- This would seem like a better test - but there appear to be difficulties with tables
- which are bigger (calculated) than there is actually room for. I suspect this is actually
- a bug in datatables
- oTest.fnTest(
- "Check column widths on first page match second page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- console.log( a0, b0, a1, b1, a2, b2, a3, b3 );
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return true;
- else
- return false;
- }
- );
-
- oTest.fnTest(
- "Check column widths on second page match thid page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return true;
- else
- return false;
- }
- );
- */
-
- /* Check can disable */
- oTest.fnTest(
- "Auto width can be disabled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "bAutoWidth": false
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bAutoWidth == false; }
- );
-
- oTest.fnTest(
- "First column does not have a width assigned to it",
- null,
- function () { return $('#example thead th:eq(0)').attr('style') == null; }
- );
-
- /*
- oTest.fnTest(
- "Check column widths on first page do not match second page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return false;
- else
- return true;
- }
- );
- */
-
- /* Enable makes no difference */
- oTest.fnTest(
- "Auto width enabled override",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "bAutoWidth": true
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bAutoWidth; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bFilter.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bFilter.js
deleted file mode 100644
index a272114a..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bFilter.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "bFilter" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "aaData": gaaData
- } );
-
- oTest.fnTest(
- "Filtering div exists by default",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- /* Check can disable */
- oTest.fnTest(
- "Fltering can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "bFilter": false
- } );
- },
- function () { return document.getElementById('example_filter') == null; }
- );
-
- /* Enable makes no difference */
- oTest.fnTest(
- "Filtering enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "bFilter": true
- } );
- },
- function () { return document.getElementById('example_filter') != null; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bInfo.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bInfo.js
deleted file mode 100644
index 662c92a9..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bInfo.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "bInfo" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "aaData": gaaData
- } );
-
- oTest.fnTest(
- "Info div exists by default",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- /* Check can disable */
- oTest.fnTest(
- "Info can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "bInfo": false
- } );
- },
- function () { return document.getElementById('example_info') == null; }
- );
-
- /* Enable makes no difference */
- oTest.fnTest(
- "Info enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "bInfo": true
- } );
- },
- function () { return document.getElementById('example_info') != null; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bLengthChange.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bLengthChange.js
deleted file mode 100644
index 4e1a8987..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bLengthChange.js
+++ /dev/null
@@ -1,75 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "bLengthChange" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "aaData": gaaData
- } );
-
- oTest.fnTest(
- "Length div exists by default",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnTest(
- "Four default options",
- null,
- function () { return $("select[name=example_length] option").length == 4; }
- );
-
- oTest.fnTest(
- "Default options",
- null,
- function () {
- var opts = $("select[name='example_length'] option");
- return opts[0].getAttribute('value') == 10 && opts[1].getAttribute('value') == 25 &&
- opts[2].getAttribute('value') == 50 && opts[3].getAttribute('value') == 100;
- }
- );
-
- oTest.fnTest(
- "Info takes length into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Check can disable */
- oTest.fnTest(
- "Change length can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "bLengthChange": false
- } );
- },
- function () { return document.getElementById('example_length') == null; }
- );
-
- oTest.fnTest(
- "Information takes length disabled into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Enable makes no difference */
- oTest.fnTest(
- "Length change enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "bLengthChange": true
- } );
- },
- function () { return document.getElementById('example_length') != null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bPaginate.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bPaginate.js
deleted file mode 100644
index 25f0616f..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bPaginate.js
+++ /dev/null
@@ -1,59 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "bPaginate" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "aaData": gaaData
- } );
-
- oTest.fnTest(
- "Pagiantion div exists by default",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnTest(
- "Information div takes paging into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Check can disable */
- oTest.fnTest(
- "Pagiantion can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "bPaginate": false
- } );
- },
- function () { return document.getElementById('example_paginate') == null; }
- );
-
- oTest.fnTest(
- "Information div takes paging disabled into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 57 of 57 entries"; }
- );
-
- /* Enable makes no difference */
- oTest.fnTest(
- "Pagiantion enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "bPaginate": true
- } );
- },
- function () { return document.getElementById('example_paginate') != null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bProcessing.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bProcessing.js
deleted file mode 100644
index 388e70f1..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bProcessing.js
+++ /dev/null
@@ -1,103 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "bProcessing" );
-
-/* It's actually a bit hard to set this one due to the fact that it will only be shown
- * when DataTables is doing some kind of processing. The server-side processing is a bit
- * better to test this than here - so we just the interal functions to enable it and check
- * that it is available
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Processing is off by default",
- null,
- function () { return oSettings.oFeatures.bProcessing == false; }
- );
-
- oTest.fnTest(
- "Processing div is not in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnTest(
- "Processing div cannot be shown",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnTest(
- "Processing div cannot be hidden",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
-
- /* Check can disable */
- oTest.fnTest(
- "Processing can be enabled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "bProcessing": true
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bProcessing == true; }
- );
-
- oTest.fnTest(
- "Processing div is in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing'); }
- );
-
- oTest.fnTest(
- "Processing div is hidden by default",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing').style.visibility = "hidden"; }
- );
-
- oTest.fnTest(
- "Processing div can be shown",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing').style.visibility = "visible"; }
- );
-
- oTest.fnTest(
- "Processing div can be hidden",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); },
- function () { return document.getElementById('example_processing').style.visibility = "hidden"; }
- );
-
- /* Enable makes no difference */
- oTest.fnTest(
- "Processing disabled override",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "bProcessing": false
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bProcessing == false; }
- );
-
- oTest.fnTest(
- "Processing div is not in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bServerSide.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bServerSide.js
deleted file mode 100644
index 15ac8cac..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bServerSide.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "bServerSide" );
-
-/* Not interested in server-side processing here other than to check that it is off */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Server side is off by default",
- null,
- function () { return oSettings.oFeatures.bServerSide == false; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bSort.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bSort.js
deleted file mode 100644
index c2b99891..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bSort.js
+++ /dev/null
@@ -1,99 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "bSort" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "aaData": gaaData
- } );
-
- oTest.fnTest(
- "Sorting is on by default",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "Sorting Asc by default class applied",
- null,
- function () { return $('#example thead th:eq(0)').hasClass("sorting_asc"); }
- );
-
- oTest.fnTest(
- "Click on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting class removed from first column",
- null,
- function () { return $('#example thead th:eq(0)').hasClass("sorting_asc") != true; }
- );
-
- oTest.fnTest(
- "Sorting asc class applied to second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc"); }
- );
-
- oTest.fnTest(
- "Reverse on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting acs class removed from second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") != true; }
- );
-
- oTest.fnTest(
- "Sorting desc class applied to second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_desc"); }
- );
-
- /* Check can disable */
- oTest.fnTest(
- "Pagiantion can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "bSort": false
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Click on second column has no effect",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Reverse on second column has no effect",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- /* Enable makes no difference */
- oTest.fnTest(
- "Sorting enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "bSort": true
- } );
- },
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bSortClasses.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bSortClasses.js
deleted file mode 100644
index 3b200904..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/bSortClasses.js
+++ /dev/null
@@ -1,132 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "bSortClasses" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "aaData": gaaData
- } );
-
- oTest.fnTest(
- "Sorting classes are applied by default",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); }
- );
-
- oTest.fnTest(
- "Sorting classes are applied to all required cells",
- null,
- function () { return $('#example tbody tr:eq(7) td:eq(0)').hasClass('sorting_1'); }
- );
-
- oTest.fnTest(
- "Sorting classes are not applied to non-sorting columns",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_1') == false; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - add column 1",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2');
- }
- );
-
- oTest.fnTest(
- "Sorting multi-column - add column 2",
- function () {
- oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3');
- }
- );
-
- oTest.fnTest(
- "Sorting multi-column - add column 3",
- function () {
- oDispacher.click( $('#example thead th:eq(3)')[0], { 'shift': true } );
- },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') &&
- $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3');
- }
- );
-
- oTest.fnTest(
- "Remove sorting classes on single column sort",
- function () {
- $('#example thead th:eq(4)').click();
- },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false &&
- $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3') == false;
- }
- );
-
- oTest.fnTest(
- "Sorting class 1 was added",
- null,
- function () { return $('#example tbody tr:eq(1) td:eq(4)').hasClass('sorting_1'); }
- );
-
-
- /* Check can disable */
- oTest.fnTest(
- "Sorting classes can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "bSortClasses": false
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false; }
- );
-
- oTest.fnTest(
- "Sorting classes disabled - add column 1 - no effect",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false;
- }
- );
-
- oTest.fnTest(
- "Sorting classes disabled - add column 2 - no effect",
- function () {
- oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false;
- }
- );
-
-
- /* Enable makes no difference */
- oTest.fnTest(
- "Sorting classes enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "bSortClasses": true
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnCreatedCell.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnCreatedCell.js
deleted file mode 100644
index 333f23d5..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnCreatedCell.js
+++ /dev/null
@@ -1,158 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "fnCreatedCell tests" );
-
-$(document).ready( function () {
- var tmp = 0;
-
- $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumnDefs": [ {
- fnCreatedCell: function () {
- tmp++;
- },
- "aTargets": ["_all"]
- } ]
- } );
-
- oTest.fnTest(
- "Cell created is called once for each cell on init",
- null,
- function () { return tmp===285; }
- );
-
- oTest.fnTest(
- "Created isn't called back on other draws",
- function () { $('#example th:eq(1)').click(); },
- function () { return tmp===285; }
- );
-
- oTest.fnTest(
- "Four arguments for the function",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments.length !== 4 ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ]
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "First argument is a TD element",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[0].nodeName !== "TD" ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ]
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "Second argument is the HTML value",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[1] != $('td').html() ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ]
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "Third argument is the data array",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[2].length !== 5 ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ]
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "Fourth argument is the data source for the row",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[2] !== this.fnSettings().aoData[ arguments[2] ]._aData ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ]
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "Fifth argument is the the col index",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- "aaData": gaaData,
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[1] != $('td:eq('+arguments[4]+')', arguments[0].parentNode).html() ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ]
- } );
- },
- function () { return tmp; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnCreatedRow.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnCreatedRow.js
deleted file mode 100644
index 069b3b4e..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnCreatedRow.js
+++ /dev/null
@@ -1,121 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "fnCreatedRow tests" );
-
-$(document).ready( function () {
- var tmp = 0;
-
- $('#example').dataTable( {
- "aaData": gaaData,
- fnCreatedRow: function () {
- tmp++;
- }
- } );
-
- oTest.fnTest(
- "Row created is called once for each row on init",
- null,
- function () { return tmp===57; }
- );
-
- oTest.fnTest(
- "Created isn't called back on other draws",
- function () { $('#example th:eq(1)').click(); },
- function () { return tmp===57; }
- );
-
- oTest.fnTest(
- "Three arguments for the function",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- "aaData": gaaData,
- fnCreatedRow: function () {
- if ( arguments.length !== 3 ) {
- tmp = false;
- }
- }
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "First argument is a TR element",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- "aaData": gaaData,
- fnCreatedRow: function () {
- if ( arguments[0].nodeName !== "TR" ) {
- tmp = false;
- }
- }
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "Second argument is an array with 5 elements",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- "aaData": gaaData,
- fnCreatedRow: function () {
- if ( arguments[1].length !== 5 ) {
- tmp = false;
- }
- }
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "Third argument is the data source for the row",
- function () {
- oSession.fnRestore();
- tmp = true;
-
- $('#example').dataTable( {
- "aaData": gaaData,
- fnCreatedRow: function () {
- if ( arguments[1] !== this.fnSettings().aoData[ arguments[2] ]._aData ) {
- tmp = false;
- }
- }
- } );
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "TR element is tied to the correct data",
- function () {
- oSession.fnRestore();
- tmp = false;
-
- $('#example').dataTable( {
- "aaData": gaaData,
- fnCreatedRow: function (tr, data, index) {
- if ( data[1] === "Firefox 1.0" ) {
- if ( $('td:eq(3)', tr).html() == "1.7" ) {
- tmp = true;
- }
- }
- }
- } );
- },
- function () { return tmp; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnDrawCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnDrawCallback.js
deleted file mode 100644
index fee9da8c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnDrawCallback.js
+++ /dev/null
@@ -1,85 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "fnDrawCallback" );
-
-/* Fairly boring function compared to the others! */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnTest(
- "Default should be null",
- null,
- function () { return oSettings.fnDrawCallback == null; }
- );
-
-
- oTest.fnTest(
- "One argument passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnDrawCallback": function ( ) {
- mPass = arguments.length;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
-
- oTest.fnTest(
- "That one argument is the settings object",
- function () {
- oSession.fnRestore();
-
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "fnDrawCallback": function ( oSettings ) {
- mPass = oSettings;
- }
- } );
- },
- function () { return oTable.fnSettings() == mPass; }
- );
-
-
- oTest.fnTest(
- "fnRowCallback called once on first draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnDrawCallback": function ( ) {
- mPass++;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
- oTest.fnTest(
- "fnRowCallback called once on each draw there after as well",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return mPass == 4; }
- );
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnFooterCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnFooterCallback.js
deleted file mode 100644
index 7e37f565..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnFooterCallback.js
+++ /dev/null
@@ -1,240 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "fnFooterCallback" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnTest(
- "Default should be null",
- null,
- function () { return oSettings.fnFooterCallback == null; }
- );
-
-
- oTest.fnTest(
- "Five arguments passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnFooterCallback": function ( ) {
- mPass = arguments.length;
- }
- } );
- },
- function () { return mPass == 5; }
- );
-
-
- oTest.fnTest(
- "fnRowCallback called once per draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- mPass++;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
- oTest.fnTest(
- "fnRowCallback called on paging (i.e. another draw)",
- function () { $('#example_next').click(); },
- function () { return mPass == 2; }
- );
-
-
- oTest.fnTest(
- "fnRowCallback allows us to alter row information",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- nFoot.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records";
- }
- } );
- },
- function () { return $('#example tfoot th:eq(0)').html() == "Displaying 10 records"; }
- );
-
-
- oTest.fnTest(
- "Data array has length matching original data",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- if ( aasData.length != 57 )
- {
- mPass = false;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "Data array's column lengths match original data",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- for ( var i=0, iLen=aasData.length ; i<iLen ; i++ )
- {
- if ( aasData[i].length != 5 )
- {
- mPass = false;
- }
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "iStart correct on first page",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- if ( iStart != 0 )
- {
- mPass = false;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "iStart correct on second page",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- if ( iStart == 10 )
- {
- mPass = true;
- }
- }
- } );
- $('#example_next').click();
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "iEnd correct on first page",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- if ( iEnd != 10 )
- {
- mPass = false;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "iEnd correct on second page",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- if ( iEnd == 20 )
- {
- mPass = true;
- }
- }
- } );
- $('#example_next').click();
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "aiDisplay length is full data when not filtered",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- if ( aiDisplay.length == 57 )
- {
- mPass = true;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "aiDisplay length is 9 when filtering on 'Mozilla'",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) {
- if ( aiDisplay.length == 9 )
- {
- mPass = true;
- }
- }
- } );
- oTable.fnFilter( "Mozilla" );
- },
- function () { return mPass; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnHeaderCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnHeaderCallback.js
deleted file mode 100644
index 7de6a6ed..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnHeaderCallback.js
+++ /dev/null
@@ -1,240 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "fnHeaderCallback" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnTest(
- "Default should be null",
- null,
- function () { return oSettings.fnHeaderCallback == null; }
- );
-
-
- oTest.fnTest(
- "Five arguments passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnHeaderCallback": function ( ) {
- mPass = arguments.length;
- }
- } );
- },
- function () { return mPass == 5; }
- );
-
-
- oTest.fnTest(
- "fnRowCallback called once per draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- mPass++;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
- oTest.fnTest(
- "fnRowCallback called on paging (i.e. another draw)",
- function () { $('#example_next').click(); },
- function () { return mPass == 2; }
- );
-
-
- oTest.fnTest(
- "fnRowCallback allows us to alter row information",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records";
- }
- } );
- },
- function () { return $('#example thead th:eq(0)').html() == "Displaying 10 records"; }
- );
-
-
- oTest.fnTest(
- "Data array has length matching original data",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( aasData.length != 57 )
- {
- mPass = false;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "Data array's column lengths match original data",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- for ( var i=0, iLen=aasData.length ; i<iLen ; i++ )
- {
- if ( aasData[i].length != 5 )
- {
- mPass = false;
- }
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "iStart correct on first page",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iStart != 0 )
- {
- mPass = false;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "iStart correct on second page",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iStart == 10 )
- {
- mPass = true;
- }
- }
- } );
- $('#example_next').click();
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "iEnd correct on first page",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iEnd != 10 )
- {
- mPass = false;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "iEnd correct on second page",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iEnd == 20 )
- {
- mPass = true;
- }
- }
- } );
- $('#example_next').click();
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "aiDisplay length is full data when not filtered",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( aiDisplay.length == 57 )
- {
- mPass = true;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "aiDisplay length is 9 when filtering on 'Mozilla'",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( aiDisplay.length == 9 )
- {
- mPass = true;
- }
- }
- } );
- oTable.fnFilter( "Mozilla" );
- },
- function () { return mPass; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnInitComplete.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnInitComplete.js
deleted file mode 100644
index c5b33551..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnInitComplete.js
+++ /dev/null
@@ -1,83 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "fnInitComplete" );
-
-/* Fairly boring function compared to the others! */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnTest(
- "Default should be null",
- null,
- function () { return oSettings.fnInitComplete == null; }
- );
-
-
- oTest.fnTest(
- "Two arguments passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnInitComplete": function ( ) {
- mPass = arguments.length===2 && arguments[1]===undefined;
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnTest(
- "That one argument is the settings object",
- function () {
- oSession.fnRestore();
-
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "fnInitComplete": function ( oSettings ) {
- mPass = oSettings;
- }
- } );
- },
- function () { return oTable.fnSettings() == mPass; }
- );
-
-
- oTest.fnTest(
- "fnInitComplete called once on first draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnInitComplete": function ( ) {
- mPass++;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
- oTest.fnTest(
- "fnInitComplete never called there after",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return mPass == 1; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnRowCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnRowCallback.js
deleted file mode 100644
index 2364cfd7..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/fnRowCallback.js
+++ /dev/null
@@ -1,112 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "fnRowCallback" );
-
-/* Note - fnRowCallback MUST return the first arguments (modified or not) */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnTest(
- "Default should be null",
- null,
- function () { return oSettings.fnRowCallback == null; }
- );
-
-
- oTest.fnTest(
- "Four arguments passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnRowCallback": function ( nTr ) {
- mPass = arguments.length;
- return nTr;
- }
- } );
- },
- function () { return mPass == 4; }
- );
-
-
- oTest.fnTest(
- "fnRowCallback called once for each drawn row",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- mPass++;
- return nTr;
- }
- } );
- },
- function () { return mPass == 10; }
- );
-
- oTest.fnTest(
- "fnRowCallback allows us to alter row information",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- $(nTr).addClass('unit_test');
- return nTr;
- }
- } );
- },
- function () { return $('#example tbody tr:eq(1)').hasClass('unit_test'); }
- );
-
- oTest.fnTest(
- "Data array has length matching columns",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- if ( asData.length != 5 )
- mPass = false;
- return nTr;
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "Data array has length matching columns",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- var iCount = 0;
- $('#example').dataTable( {
- "aaData": gaaData,
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- if ( iCount != iDrawIndex )
- mPass = false;
- iCount++;
- return nTr;
- }
- } );
- },
- function () { return mPass; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/iDisplayLength.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/iDisplayLength.js
deleted file mode 100644
index 0afb9bf8..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/iDisplayLength.js
+++ /dev/null
@@ -1,81 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "iDisplayLength" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "aaData": gaaData
- } );
-
- oTest.fnTest(
- "Default length is ten",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Select menu shows 10",
- null,
- function () { return $('#example_length select').val() == 10; }
- );
-
-
- oTest.fnTest(
- "Set initial length to 25",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "iDisplayLength": 25
- } );
- },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Select menu shows 25",
- null,
- function () { return $('#example_length select').val() == 25; }
- );
-
-
- oTest.fnTest(
- "Set initial length to 100",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "iDisplayLength": 100
- } );
- },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Select menu shows 25",
- null,
- function () { return $('#example_length select').val() == 100; }
- );
-
-
- oTest.fnTest(
- "Set initial length to 23 (unknown select menu length)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "iDisplayLength": 23
- } );
- },
- function () { return $('#example tbody tr').length == 23; }
- );
-
- oTest.fnTest(
- "Select menu shows 10 (since 23 is unknow)",
- null,
- function () { return $('#example_length select').val() == 10; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/js_data_mixed_types.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/js_data_mixed_types.js
deleted file mode 100644
index cc71e638..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/js_data_mixed_types.js
+++ /dev/null
@@ -1,392 +0,0 @@
-// DATA_TEMPLATE: js_data_mixed_types
-oTest.fnStart( "Sanity checks for DataTables with data from JS with mixed data types" );
-
-$(document).ready( function () {
- var oInit = {
- "aaData": gaaData
- };
- $('#example').dataTable( oInit );
-
- oTest.fnTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "" &&
- $('#example tbody tr:eq(1) td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == ""; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "true"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == ""; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody tr:eq(1) td:eq(0)').html() == "Gecko" &&
- $('#example tbody tr:eq(1) td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == ""; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Firefox 2.0"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == ""; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == ""; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back on first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records - second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 100 records - first page",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('100').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back to 10 records",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('10').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' back to first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - second time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter increased to 'Win 98'",
- function () { $('#example_filter input').val("Win 98").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter decreased to 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - third time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter removed",
- function () { $('#example_filter input').val("").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
-
- /*
- * Filtering
- */
- oTest.fnTest(
- "Filter 'W' - rows",
- function () {
- /* Reset the table such that the old sorting doesn't mess things up */
- oSession.fnRestore();
- $('#example').dataTable( oInit );
- $('#example_filter input').val("W").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == ""; }
- );
-
- oTest.fnTest(
- "Filter 'W' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Wi'",
- function () { $('#example_filter input').val("Wi").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == ""; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 reverse",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "true"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - maintaing reverse sorting col 1",
- function () { $('#example_filter input').val("Win XP").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "5"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3 - reversed",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting col 3 - reversed info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 5 of 5 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere'",
- function () { $('#example_filter input').val("nothinghere").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() ==
- "No matching records found"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter back to blank and 1st column sorting",
- function () {
- $('#example_filter input').val("").keyup();
- $('#example thead th:eq(0)').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry",
- function () {
- $('#example_filter input').val("Win").keyup();
- $('#example_filter input').val("GeckoWin").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry with space",
- function () {
- $('#example_filter input').val("Gecko Win").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; }
- );
-
-
-
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.oPaginate.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.oPaginate.js
deleted file mode 100644
index 7b6232d7..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.oPaginate.js
+++ /dev/null
@@ -1,84 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "oLanguage.oPaginate" );
-
-/* Note that the paging language information only has relevence in full numbers */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "sPaginationType": "full_numbers"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "oLanguage.oPaginate defaults",
- null,
- function () {
- var bReturn =
- oSettings.oLanguage.oPaginate.sFirst == "First" &&
- oSettings.oLanguage.oPaginate.sPrevious == "Previous" &&
- oSettings.oLanguage.oPaginate.sNext == "Next" &&
- oSettings.oLanguage.oPaginate.sLast == "Last";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "oLanguage.oPaginate defaults are in the DOM",
- null,
- function () {
- var bReturn =
- $('#example_paginate .first').html() == "First" &&
- $('#example_paginate .previous').html() == "Previous" &&
- $('#example_paginate .next').html() == "Next" &&
- $('#example_paginate .last').html() == "Last";
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "oLanguage.oPaginate can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "sPaginationType": "full_numbers",
- "oLanguage": {
- "oPaginate": {
- "sFirst": "unit1",
- "sPrevious": "test2",
- "sNext": "unit3",
- "sLast": "test4"
- }
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var bReturn =
- oSettings.oLanguage.oPaginate.sFirst == "unit1" &&
- oSettings.oLanguage.oPaginate.sPrevious == "test2" &&
- oSettings.oLanguage.oPaginate.sNext == "unit3" &&
- oSettings.oLanguage.oPaginate.sLast == "test4";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "oLanguage.oPaginate definitions are in the DOM",
- null,
- function () {
- var bReturn =
- $('#example_paginate .first').html() == "unit1" &&
- $('#example_paginate .previous').html() == "test2" &&
- $('#example_paginate .next').html() == "unit3" &&
- $('#example_paginate .last').html() == "test4";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sInfo.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sInfo.js
deleted file mode 100644
index 89ece4ff..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sInfo.js
+++ /dev/null
@@ -1,117 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "oLanguage.sInfo" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Info language is 'Showing _START_ to _END_ of _TOTAL_ entries' by default",
- null,
- function () { return oSettings.oLanguage.sInfo == "Showing _START_ to _END_ of _TOTAL_ entries"; }
- );
-
- oTest.fnTest(
- "Info language default is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; }
- );
-
-
- oTest.fnTest(
- "Info language can be defined - without any macros",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sInfo": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sInfo == "unit test"; }
- );
-
- oTest.fnTest(
- "Info language definition is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "unit test"; }
- );
-
- oTest.fnTest(
- "Info language can be defined - with macro _START_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sInfo": "unit _START_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 test"; }
- );
-
- oTest.fnTest(
- "Info language can be defined - with macro _END_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sInfo": "unit _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 10 test"; }
- );
-
- oTest.fnTest(
- "Info language can be defined - with macro _TOTAL_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sInfo": "unit _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 57 test"; }
- );
-
- oTest.fnTest(
- "Info language can be defined - with macros _START_ and _END_",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sInfo": "unit _START_ _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 10 test"; }
- );
-
- oTest.fnTest(
- "Info language can be defined - with macros _START_, _END_ and _TOTAL_",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sInfo": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 10 57 test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sInfoEmpty.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sInfoEmpty.js
deleted file mode 100644
index bcba4f35..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sInfoEmpty.js
+++ /dev/null
@@ -1,79 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "oLanguage.sInfoEmpty" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Info empty language is 'Showing 0 to 0 of 0 entries' by default",
- function () { oTable.fnFilter("nothinghere"); },
- function () { return oSettings.oLanguage.sInfoEmpty == "Showing 0 to 0 of 0 entries"; }
- );
-
- oTest.fnTest(
- "Info empty language default is in the DOM",
- null,
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "Showing 0 to 0 of 0 entries";
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "Info empty language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sInfoEmpty": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- oTable.fnFilter("nothinghere");
- },
- function () { return oSettings.oLanguage.sInfoEmpty == "unit test"; }
- );
-
- oTest.fnTest(
- "Info empty language default is in the DOM",
- null,
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "unit test";
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "Macro's replaced",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sInfoEmpty": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- oTable.fnFilter("nothinghere");
- },
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "unit 1 0 0 test";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sInfoPostFix.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sInfoPostFix.js
deleted file mode 100644
index 66894ed7..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sInfoPostFix.js
+++ /dev/null
@@ -1,78 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "oLanguage.sInfoPostFix" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Info post fix language is '' (blank) by default",
- null,
- function () { return oSettings.oLanguage.sInfoPostFix == ""; }
- );
-
- oTest.fnTest(
- "Width no post fix, the basic info shows",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; }
- );
-
-
- oTest.fnTest(
- "Info post fix language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sInfoPostFix": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sInfoPostFix == "unit test"; }
- );
-
- oTest.fnTest(
- "Info empty language default is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit test"; }
- );
-
-
- oTest.fnTest(
- "Macros have no effect in the post fix",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sInfoPostFix": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit _START_ _END_ _TOTAL_ test"; }
- );
-
-
- oTest.fnTest(
- "Post fix is applied after fintering info",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sInfoPostFix": "unit test"
- }
- } );
- oTable.fnFilter("nothinghere");
- },
- function () { return document.getElementById('example_info').innerHTML = "Showing 0 to 0 of 0 entries unit (filtered from 57 total entries) test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sLengthMenu.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sLengthMenu.js
deleted file mode 100644
index ff4344fa..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sLengthMenu.js
+++ /dev/null
@@ -1,111 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "oLanguage.sLengthMenu" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Menu language is 'Show _MENU_ entries' by default",
- null,
- function () { return oSettings.oLanguage.sLengthMenu == "Show _MENU_ entries"; }
- );
-
- oTest.fnTest(
- "_MENU_ macro is replaced by select menu in DOM",
- null,
- function () { return $('select', oSettings.aanFeatures.l[0]).length == 1 }
- );
-
- oTest.fnTest(
- "A label input is used",
- null,
- function () { return $('label', oSettings.aanFeatures.l[0]).length == 1 }
- );
-
- oTest.fnTest(
- "Default is put into DOM",
- null,
- function () {
- var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes;
- var bReturn =
- anChildren[0].nodeValue == "Show " &&
- anChildren[2].nodeValue == " entries";
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "Menu length language can be defined - no _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sLengthMenu": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sLengthMenu == "unit test"; }
- );
-
- oTest.fnTest(
- "Menu length language definition is in the DOM",
- null,
- function () {
- return $('label', oSettings.aanFeatures.l[0]).text() == "unit test";
- }
- );
-
-
- oTest.fnTest(
- "Menu length language can be defined - with _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sLengthMenu": "unit _MENU_ test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes;
- var bReturn =
- anChildren[0].nodeValue == "unit " &&
- anChildren[2].nodeValue == " test";
- return bReturn;
- }
- );
-
-
- oTest.fnTest(
- "Only the _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sLengthMenu": "_MENU_"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var anChildren = oSettings.aanFeatures.l[0].childNodes;
- var bReturn =
- anChildren.length == 1 &&
- $('select', oSettings.aanFeatures.l[0]).length == 1;
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sProcessing.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sProcessing.js
deleted file mode 100644
index 93e11f74..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sProcessing.js
+++ /dev/null
@@ -1,49 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "oLanguage.sProcessing" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "bProcessing": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Processing language is 'Processing...' by default",
- null,
- function () { return oSettings.oLanguage.sProcessing == "Processing..."; }
- );
-
- oTest.fnTest(
- "Processing language default is in the DOM",
- null,
- function () { return document.getElementById('example_processing').innerHTML = "Processing..."; }
- );
-
-
- oTest.fnTest(
- "Processing language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "bProcessing": true,
- "oLanguage": {
- "sProcessing": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sProcessing == "unit test"; }
- );
-
- oTest.fnTest(
- "Processing language definition is in the DOM",
- null,
- function () { return document.getElementById('example_processing').innerHTML = "unit test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sSearch.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sSearch.js
deleted file mode 100644
index 89007a10..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sSearch.js
+++ /dev/null
@@ -1,70 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "oLanguage.sSearch" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Search language is 'Search:' by default",
- null,
- function () { return oSettings.oLanguage.sSearch == "Search:"; }
- );
-
- oTest.fnTest(
- "A label input is used",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).length == 1 }
- );
-
- oTest.fnTest(
- "Search language default is in the DOM",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).text()
- == "Search: "; }
- );
-
-
- oTest.fnTest(
- "Search language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sSearch": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sSearch == "unit test"; }
- );
-
- oTest.fnTest(
- "Info language definition is in the DOM",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).text().indexOf('unit test') !== -1; }
- );
-
-
- oTest.fnTest(
- "Blank search has a no (separator) inserted",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sSearch": ""
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return document.getElementById('example_filter').childNodes.length == 1; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sUrl.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sUrl.js
deleted file mode 100644
index bed33081..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sUrl.js
+++ /dev/null
@@ -1,62 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "oLanguage.sUrl" );
-
-/* Note that we only test the internal storage of language information pulled form a file here
- * as the other language tests will check it goes into the DOM correctly
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "sUrl is blank by default",
- null,
- function () { return oSettings.oLanguage.sUrl == ""; }
- );
-
-
- oTest.fnWaitTest(
- "Loading of German file loads language information",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sUrl": "../../../examples/examples_support/de_DE.txt"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var bReturn =
- oSettings.oLanguage.sProcessing == "Bitte warten..." &&
- oSettings.oLanguage.sLengthMenu == "_MENU_ Einträge anzeigen" &&
- oSettings.oLanguage.sZeroRecords == "Keine Einträge vorhanden." &&
- oSettings.oLanguage.sInfo == "_START_ bis _END_ von _TOTAL_ Einträgen" &&
- oSettings.oLanguage.sInfoEmpty == "0 bis 0 von 0 Einträgen" &&
- oSettings.oLanguage.sInfoFiltered == "(gefiltert von _MAX_ Einträgen)" &&
- oSettings.oLanguage.sInfoPostFix == "" &&
- oSettings.oLanguage.sSearch == "Suchen" &&
- oSettings.oLanguage.oPaginate.sFirst == "Erster" &&
- oSettings.oLanguage.oPaginate.sPrevious == "Zurück" &&
- oSettings.oLanguage.oPaginate.sNext == "Nächster" &&
- oSettings.oLanguage.oPaginate.sLast == "Letzter";
-
- return bReturn;
- }
- );
-
- /* One DOM check just to ensure that they go into the DOM */
- oTest.fnTest(
- "Loaded language goes into the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "1 bis 10 von 57 Einträgen"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sZeroRecords.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sZeroRecords.js
deleted file mode 100644
index d64c42f5..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oLanguage.sZeroRecords.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "oLanguage.sZeroRecords" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Zero records language is 'No matching records found' by default",
- null,
- function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; }
- );
-
- oTest.fnTest(
- "Text is shown when empty table (after filtering)",
- function () { oTable.fnFilter('nothinghere'); },
- function () { return $('#example tbody tr td')[0].innerHTML == "No matching records found" }
- );
-
-
-
- oTest.fnTest(
- "Zero records language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "oLanguage": {
- "sZeroRecords": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sZeroRecords == "unit test"; }
- );
-
- oTest.fnTest(
- "Text is shown when empty table (after filtering)",
- function () { oTable.fnFilter('nothinghere2'); },
- function () { return $('#example tbody tr td')[0].innerHTML == "unit test" }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oSearch.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oSearch.js
deleted file mode 100644
index 0592dde0..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/oSearch.js
+++ /dev/null
@@ -1,108 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "oSearch" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Default values should be blank",
- null,
- function () {
- var bReturn = oSettings.oPreviousSearch.sSearch == "" &&
- !oSettings.oPreviousSearch.bRegex;
- return bReturn;
- }
- );
-
- /* This test might be considered iffy since the full object isn't given, but it's reasonable to
- * expect DataTables to cope with this. It should just assumine regex false
- */
- oTest.fnTest(
- "Search term only in object",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "oSearch": {
- "sSearch": "Mozilla"
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "New search will kill old one",
- function () {
- oTable.fnFilter("Opera");
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; }
- );
-
- oTest.fnTest(
- "Search plain text term and escape regex true",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "oSearch": {
- "sSearch": "DS",
- "bRegex": false
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Nintendo DS browser"; }
- );
-
- oTest.fnTest(
- "Search plain text term and escape regex false",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "oSearch": {
- "sSearch": "Opera",
- "bRegex": true
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; }
- );
-
- oTest.fnTest(
- "Search regex text term and escape regex true",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "oSearch": {
- "sSearch": "1.*",
- "bRegex": false
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnTest(
- "Search regex text term and escape regex false",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "oSearch": {
- "sSearch": "1.*",
- "bRegex": true
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/sAjaxSource.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/sAjaxSource.js
deleted file mode 100644
index 9ae4e0d7..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/sAjaxSource.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "sAjaxSource" );
-
-/* Not interested in ajax source here other than to check it's default */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Server side is off by default",
- null,
- function () { return oSettings.sAjaxSource == null; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/sDom.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/sDom.js
deleted file mode 100644
index 19e2e98f..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/sDom.js
+++ /dev/null
@@ -1,262 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "sDom" );
-
-/* This is going to be brutal on the browser! There is a lot that can be tested here... */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Default DOM varaible",
- null,
- function () { return oSettings.sDom == "lfrtip"; }
- );
-
- oTest.fnTest(
- "Default DOM in document",
- null,
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- nNodes[4] == nInfo &&
- nNodes[5] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Check example 1 in code propagates",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "sDom": '<"wrapper"flipt>'
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.sDom == '<"wrapper"flipt>'; }
- );
-
- oTest.fnTest(
- "Check example 1 in DOM",
- null,
- function () {
- var jqNodes = $('#demo div, #demo table');
- var nNodes = [];
-
- /* Strip the paging nodes */
- for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ )
- {
- if ( jqNodes[i].getAttribute('id') != "example_previous" &&
- jqNodes[i].getAttribute('id') != "example_next" )
- {
- nNodes.push( jqNodes[i] );
- }
- }
-
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
- var nCustomWrapper = $('div.wrapper')[0];
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nCustomWrapper &&
- nNodes[2] == nFilter &&
- nNodes[3] == nLength &&
- nNodes[4] == nInfo &&
- nNodes[5] == nPaging &&
- nNodes[6] == nTable;
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Check example 2 in DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "sDom": '<lf<t>ip>'
- } );
- },
- function () {
- var jqNodes = $('#demo div, #demo table');
- var nNodes = [];
- var nCustomWrappers = []
-
- /* Strip the paging nodes */
- for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ )
- {
- if ( jqNodes[i].getAttribute('id') != "example_previous" &&
- jqNodes[i].getAttribute('id') != "example_next" )
- {
- nNodes.push( jqNodes[i] );
- }
-
- /* Only the two custom divs don't have class names */
- if ( jqNodes[i].className == "" )
- {
- nCustomWrappers.push( jqNodes[i] );
- }
- }
-
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nCustomWrappers[0] &&
- nNodes[2] == nLength &&
- nNodes[3] == nFilter &&
- nNodes[4] == nCustomWrappers[1] &&
- nNodes[5] == nTable &&
- nNodes[6] == nInfo &&
- nNodes[7] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Check no length element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "sDom": 'frtip'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- null == nLength &&
- nNodes[1] == nFilter &&
- nNodes[2] == nTable &&
- nNodes[3] == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Check no filter element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "sDom": 'lrtip'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- null == nFilter &&
- nNodes[2] == nTable &&
- nNodes[3] == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- /* Note we don't test for no table as this is not supported (and it would be fairly daft! */
-
- oTest.fnTest(
- "Check no info element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "sDom": 'lfrtp'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- null == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "Check no paging element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "aaData": gaaData,
- "sDom": 'lfrti'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- nNodes[4] == nInfo &&
- null == nPaging;
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/sPaginationType.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/sPaginationType.js
deleted file mode 100644
index b57b2017..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/2_js/sPaginationType.js
+++ /dev/null
@@ -1,125 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "sPaginationType" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "aaData": gaaData
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "Check two button paging is the default",
- null,
- function () { return oSettings.sPaginationType == "two_button"; }
- );
-
- oTest.fnTest(
- "Check class is applied",
- null,
- function () { return $('#example_paginate').hasClass('paging_two_button'); }
- );
-
- oTest.fnTest(
- "Two A elements are in the wrapper",
- null,
- function () { return $('#example_paginate a').length == 2; }
- );
-
- oTest.fnTest(
- "We have the previous button",
- null,
- function () { return document.getElementById('example_previous'); }
- );
-
- oTest.fnTest(
- "We have the next button",
- null,
- function () { return document.getElementById('example_next'); }
- );
-
- oTest.fnTest(
- "Previous button is disabled",
- null,
- function () { return $('#example_previous').hasClass('paginate_disabled_previous'); }
- );
-
- oTest.fnTest(
- "Next button is enabled",
- null,
- function () { return $('#example_next').hasClass('paginate_enabled_next'); }
- );
-
- /* Don't test paging - that's done by the zero config test script. */
-
-
- /* Two buttons paging */
- oTest.fnTest(
- "Can enabled full numbers paging",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "aaData": gaaData,
- "sPaginationType": "full_numbers"
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.sPaginationType == "full_numbers"; }
- );
-
- oTest.fnTest(
- "Check full numbers class is applied",
- null,
- function () { return $('#example_paginate').hasClass('paging_full_numbers'); }
- );
-
-
- var nFirst, nPrevious, nNext, nLast;
- oTest.fnTest(
- "Jump to last page",
- function () {
- nFirst = $('div.dataTables_paginate a.first');
- nPrevious = $('div.dataTables_paginate a.previous');
- nNext = $('div.dataTables_paginate a.next');
- nLast = $('div.dataTables_paginate a.last');
- nLast.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries";
- }
- );
-
- oTest.fnTest(
- "Go to two pages previous",
- function () {
- nPrevious.click();
- nPrevious.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 31 to 40 of 57 entries";
- }
- );
-
- oTest.fnTest(
- "Next (second last) page",
- function () {
- nNext.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 41 to 50 of 57 entries";
- }
- );
-
- oTest.fnTest(
- "Jump to first page",
- function () {
- nFirst.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries";
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/_zero_config.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/_zero_config.js
deleted file mode 100644
index 81e24384..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/_zero_config.js
+++ /dev/null
@@ -1,440 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "Sanity checks for DataTables with data from JS" );
-
-oTest.fnTest(
- "jQuery.dataTable function",
- null,
- function () { return typeof jQuery().dataTable == "function"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableSettings storage array",
- null,
- function () { return typeof jQuery().dataTableSettings == "object"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableExt plugin object",
- null,
- function () { return typeof jQuery().dataTableExt == "object"; }
-);
-
-$(document).ready( function () {
- var oInit = {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- };
- $('#example').dataTable( oInit );
-
- /* Basic checks */
- oTest.fnWaitTest(
- "Length changing div exists",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnTest(
- "Filtering div exists",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- oTest.fnTest(
- "Information div exists",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- oTest.fnTest(
- "Pagination div exists",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnTest(
- "Processing div is off by default",
- null,
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnWaitTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back on first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records - second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 100 records - first page",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('100').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back to 10 records",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('10').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' back to first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - second time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter increased to 'Win 98'",
- function () { $('#example_filter input').val("Win 98").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter decreased to 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - third time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter removed",
- function () { $('#example_filter input').val("").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
-
- /*
- * Filtering
- */
- oTest.fnWaitTest(
- "Filter 'W' - rows",
- function () {
- /* Reset the table such that the old sorting doesn't mess things up */
- oSession.fnRestore();
- $('#example').dataTable( oInit );
- $('#example_filter input').val("W").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "Filter 'W' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Wi'",
- function () { $('#example_filter input').val("Wi").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 reverse",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - maintaing reverse sorting col 1",
- function () { $('#example_filter input').val("Win XP").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3 - reversed",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting col 3 - reversed info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere'",
- function () { $('#example_filter input').val("nothinghere").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() ==
- "No matching records found"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter back to blank and 1st column sorting",
- function () {
- $('#example_filter input').val("").keyup();
- $('#example thead th:eq(0)').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry",
- function () {
- $('#example_filter input').val("Win").keyup();
- $('#example_filter input').val("GeckoWin").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry with space",
- function () {
- $('#example_filter input').val("Gecko Win").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; }
- );
-
-
-
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aaSorting.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aaSorting.js
deleted file mode 100644
index d46a558b..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aaSorting.js
+++ /dev/null
@@ -1,198 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aaSorting" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default sorting is single column",
- null,
- function () {
- return oSettings.aaSorting.length == 1 && typeof oSettings.aaSorting[0] == 'object';
- }
- );
-
- oTest.fnWaitTest(
- "Default sorting is first column asc",
- null,
- function () {
- return oSettings.aaSorting[0].length == 3 && oSettings.aaSorting[0][0] == 0 &&
- oSettings.aaSorting[0][1] == 'asc';
- }
- );
-
- oTest.fnWaitTest(
- "Sorting is applied",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
-
- oTest.fnWaitTest(
- "Custom sorting on single string column asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aaSorting": [['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
-
- oTest.fnWaitTest(
- "Custom sorting on single string column desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aaSorting": [['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
-
- oTest.fnWaitTest(
- "Custom sorting on single int column asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aaSorting": [['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
-
- oTest.fnWaitTest(
- "Custom sorting on single int column desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aaSorting": [['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string asc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aaSorting": [['0','asc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string asc / string desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aaSorting": [['0','asc'], ['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string desc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aaSorting": [['0','desc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "iPod Touch / iPhone"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string desc / string desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aaSorting": [['0','desc'], ['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Safari 3.0"; }
- );
-
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string asc / int asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aaSorting": [['0','asc'], ['3','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "1"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string asc / int desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aaSorting": [['0','asc'], ['3','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "1.9"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string desc / int asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aaSorting": [['0','desc'], ['3','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "125.5"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string desc / int desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aaSorting": [['0','desc'], ['3','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (3 column) - string asc / int asc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aaSorting": [['0','asc'], ['3','asc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody tr:eq(7) td:eq(1)').html() == "Firefox 1.0"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aaSortingFixed.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aaSortingFixed.js
deleted file mode 100644
index 6d8c793c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aaSortingFixed.js
+++ /dev/null
@@ -1,67 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aaSortingFixed" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "No fixed sorting by default",
- null,
- function () {
- return oSettings.aaSortingFixed == null;
- }
- );
-
-
- oTest.fnWaitTest(
- "Fixed sorting on first column (string/asc) with user sorting on second column (string/asc)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aaSortingFixed": [['0','asc']],
- "fnInitComplete": function () {
- $('#example thead th:eq(1)').click();
- }
- } );
- //
- },
- function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; }
- );
-
- oTest.fnWaitTest(
- "Fixed sorting on first column (string/asc) with user sorting on second column (string/desc)",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/asc)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aaSortingFixed": [['3','asc']]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/desc)",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "PSP browser"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.bSearchable.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.bSearchable.js
deleted file mode 100644
index 6b227665..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.bSearchable.js
+++ /dev/null
@@ -1,76 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.bSeachable" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Columns are searchable by default",
- function () { oTable.fnFilter("Camino"); },
- function () {
- if ( $('#example tbody tr:eq(0) td:eq(1)')[0] )
- return $('#example tbody tr:eq(0) td:eq(1)').html().match(/Camino/);
- else
- return null;
- }
- );
-
- oTest.fnWaitTest(
- "Disabling sorting on a column removes it from the global filter",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- { "bSearchable": false },
- null,
- null,
- null
- ]
- } );
- oSettings = oTable.fnSettings();
- oTable.fnFilter("Camino");
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnWaitTest(
- "Disabled on one column has no effect on other columns",
- function () { oTable.fnFilter("Webkit"); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; }
- );
-
- oTest.fnWaitTest(
- "Disable filtering on multiple columns",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- { "bSearchable": false },
- { "bSearchable": false },
- null,
- null,
- null
- ]
- } );
- oSettings = oTable.fnSettings();
- oTable.fnFilter("Webkit");
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnWaitTest(
- "Filter on second disabled column",
- function () { oTable.fnFilter("Camino"); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.bSortable.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.bSortable.js
deleted file mode 100644
index 3e059452..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.bSortable.js
+++ /dev/null
@@ -1,109 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.bSortable" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "All columns are sortable by default",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Can disable sorting from one column",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- { "bSortable": false },
- null,
- null,
- null
- ]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; }
- );
-
- oTest.fnWaitTest(
- "Disabled column has no sorting class",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") == false; }
- );
-
- oTest.fnWaitTest(
- "Other columns can still sort",
- function () {
- $('#example thead th:eq(4)').click();
- $('#example thead th:eq(4)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; }
- );
-
- oTest.fnWaitTest(
- "Disable sorting on multiple columns - no sorting classes",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- { "bSortable": false },
- null,
- { "bSortable": false },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example thead th:eq(1)').hasClass("sorting") ||
- $('#example thead th:eq(3)').hasClass("sorting")
- return bReturn == false;
- }
- );
-
- oTest.fnWaitTest(
- "Sorting on disabled column 1 has no effect",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; }
- );
-
- oTest.fnWaitTest(
- "Sorting on disabled column 2 has no effect",
- function () {
- $('#example thead th:eq(3)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; }
- );
-
- oTest.fnWaitTest(
- "Second sort on disabled column 2 has no effect",
- function () {
- $('#example thead th:eq(3)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; }
- );
-
- oTest.fnWaitTest(
- "Even with multiple disabled sorting columns other columns can still sort",
- function () {
- $('#example thead th:eq(4)').click();
- $('#example thead th:eq(4)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.bUseRendered.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.bUseRendered.js
deleted file mode 100644
index 3663b7af..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.bUseRendered.js
+++ /dev/null
@@ -1,148 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.bUseRendered" );
-
-/* bUseRendered is used to alter sorting data, if false then the original data is used for
- * sorting rather than the rendered data
- */
-
-$(document).ready( function () {
- /* Check the default */
- var mTmp = 0;
-
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( mTmp == 0 ) {
- mTmp++;
- return "aaa";
- } else
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default for bUseRendered is true - rendered data is used for sorting",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'aaa'; }
- );
-
- oTest.fnWaitTest(
- "When bUseRendered is false, original data is used for sorting",
- function () {
- mTmp = 0;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- {
- "bUseRendered": false,
- "fnRender": function (a) {
- if ( mTmp == 0 ) {
- mTmp++;
- return "aaa";
- } else {
- return a.aData[a.iDataColumn];
- }
- }
- },
- null,
- null,
- null
- ]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; }
- );
-
-
- oTest.fnWaitTest(
- "bUseRendered set to false on one columns and true (default) on two others",
- function () {
- mTmp = 0;
- var mTmp2 = 0;
- var mTmp3 = 0;
-
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- {
- "fnRender": function (a) {
- if ( mTmp == 0 ) {
- mTmp++;
- return "aaa1";
- } else {
- return a.aData[a.iDataColumn];
- }
- }
- },
- {
- "bUseRendered": false,
- "fnRender": function (a) {
- if ( mTmp2 == 0 ) {
- mTmp2++;
- return "aaa2";
- } else {
- return a.aData[a.iDataColumn];
- }
- }
- },
- {
- "fnRender": function (a) {
- if ( mTmp3 == 0 ) {
- mTmp3++;
- return "zzz3";
- } else {
- return a.aData[a.iDataColumn];
- }
- }
- },
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'aaa1'; }
- );
-
- oTest.fnWaitTest(
- "Multi-column rendering - 2nd column sorting",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; }
- );
-
- oTest.fnWaitTest(
- "Multi-column rendering - 3rd column sorting",
- function () {
- $('#example thead th:eq(2)').click();
- $('#example thead th:eq(2)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(2)').html() == 'zzz3'; }
- );
-
- oTest.fnWaitTest(
- "Multi-column rendering - 4th column sorting",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == '-'; }
- );
-
- oTest.fnWaitTest(
- "Multi-column rendering - 5th column sorting",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.bVisible.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.bVisible.js
deleted file mode 100644
index 093afd22..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.bVisible.js
+++ /dev/null
@@ -1,124 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.bVisible" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "All columns are visible by default",
- null,
- function () { return $('#example tbody tr:eq(0) td').length == 5; }
- );
-
- oTest.fnWaitTest(
- "Can hide one column and it removes td column from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- { "bVisible": false },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 4; }
- );
-
- oTest.fnWaitTest(
- "Can hide one column and it removes thead th column from DOM",
- null,
- function () { return $('#example thead tr:eq(0) th').length == 4; }
- );
-
- oTest.fnWaitTest(
- "The correct thead column has been hidden",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Platform(s)" &&
- jqNodes[2].innerHTML == "Engine version" &&
- jqNodes[3].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "The correct tbody column has been hidden",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } );
- },
- function () {
- var jqNodes = $('#example tbody tr:eq(0) td');
- var bReturn =
- jqNodes[0].innerHTML == "Gecko" &&
- jqNodes[1].innerHTML == "Gnome" &&
- jqNodes[2].innerHTML == "1.8" &&
- jqNodes[3].innerHTML == "A";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Can hide multiple columns and it removes td column from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- { "bVisible": false },
- { "bVisible": false },
- null,
- { "bVisible": false }
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 2; }
- );
-
- oTest.fnWaitTest(
- "Multiple hide - removes thead th column from DOM",
- null,
- function () { return $('#example thead tr:eq(0) th').length == 2; }
- );
-
- oTest.fnWaitTest(
- "Multiple hide - the correct thead columns have been hidden",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Engine version"
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Multiple hide - the correct tbody columns have been hidden",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } );
- },
- function () {
- var jqNodes = $('#example tbody tr:eq(0) td');
- var bReturn =
- jqNodes[0].innerHTML == "Gecko" &&
- jqNodes[1].innerHTML == "1"
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.fnRender.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.fnRender.js
deleted file mode 100644
index f4c0fbac..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.fnRender.js
+++ /dev/null
@@ -1,156 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.fnRender" );
-
-$(document).ready( function () {
- /* Check the default */
- var mTmp = 0;
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- mTmp++;
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Single column - fnRender is called twice for each row",
- null,
- function () { return mTmp == 57; }
- );
-
- oTest.fnWaitTest(
- "Confirm that fnRender passes two arguments with four parameters",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( arguments.length != 2 || typeof a.iDataRow=='undefined' ||
- typeof a.iDataColumn=='undefined' || typeof a.aData=='undefined' ||
- typeof a.mDataProp=='undefined' )
- {
- mTmp = false;
- }
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnWaitTest(
- "fnRender iDataColumn is the column",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( a.iDataColumn != 1 )
- {
- mTmp = false;
- }
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnWaitTest(
- "fnRender aData is data array of correct size",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( a.aData.length != 5 )
- {
- mTmp = false;
- }
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnWaitTest(
- "Passed back data is put into the DOM",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- return 'unittest';
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'unittest'; }
- );
-
- oTest.fnWaitTest(
- "Passed back data is put into the DOM",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- null,
- { "fnRender": function (a) {
- return 'unittest1';
- } },
- { "fnRender": function (a) {
- return 'unittest2';
- } },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example tbody tr:eq(0) td:eq(2)').html() == 'unittest1' &&
- $('#example tbody tr:eq(0) td:eq(3)').html() == 'unittest2';
- return bReturn; }
- );
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.iDataSort.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.iDataSort.js
deleted file mode 100644
index cf507fd2..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.iDataSort.js
+++ /dev/null
@@ -1,90 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.iDataSort" );
-
-$(document).ready( function () {
- /* Should know that sorting already works by default from other tests, so we can jump
- * right in here
- */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- { "iDataSort": 4 },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Sorting on first column is uneffected",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; }
- );
-
- oTest.fnWaitTest(
- "Sorting on second column is the order of the fifth",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
- oTest.fnWaitTest(
- "Reserve sorting on second column uses fifth column as well",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; }
- );
-
- oTest.fnWaitTest(
- "Sorting on 5th column retains it's own sorting",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
-
- oTest.fnWaitTest(
- "Use 2nd col for sorting 5th col and via-versa - no effect on first col sorting",
- function () {
- mTmp = 0;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- { "iDataSort": 4 },
- null,
- null,
- { "iDataSort": 1 }
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; }
- );
-
- oTest.fnWaitTest(
- "2nd col sorting uses fifth col",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
- oTest.fnWaitTest(
- "2nd col sorting uses fifth col - reversed",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; }
- );
-
- oTest.fnWaitTest(
- "5th col sorting uses 2nd col",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; }
- );
-
- oTest.fnWaitTest(
- "5th col sorting uses 2nd col - reversed",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'Seamonkey 1.1'; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.sClass.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.sClass.js
deleted file mode 100644
index 17d9f4da..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.sClass.js
+++ /dev/null
@@ -1,115 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.sClass" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "By default the test class hasn't been applied to the column (sanity!)",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(2)').hasClass('unittest') == false; }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - first row",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- null,
- { "sClass": 'unittest' },
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(1) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - third row",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - last row",
- null,
- function () { return $('#example tbody tr:eq(9) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - has not applied to other columns - 1st",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest') == false; }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - has not applied to other columns - 5th",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(4)').hasClass('unittest') == false; }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - seventh row - second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody tr:eq(6) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - has not applied to header",
- null,
- function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - has not applied to footer",
- null,
- function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; }
- );
-
-
- oTest.fnWaitTest(
- "Class defined for multiple columns - first row",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- { "sClass": 'unittest2' },
- null,
- null,
- { "sClass": 'unittest1' },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest2') &&
- $('#example tbody tr:eq(8) td:eq(3)').hasClass('unittest1');
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Class defined for multiple columns - has not applied to other columns - 5th 1",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(4)').hasClass('unittest1') == false; }
- );
-
- oTest.fnWaitTest(
- "Class defined for multiple columns - has not applied to other columns - 5th 2",
- null,
- function () { return $('#example tbody tr:eq(6) td:eq(4)').hasClass('unittest2') == false; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.sName.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.sName.js
deleted file mode 100644
index f5bcbbe3..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.sName.js
+++ /dev/null
@@ -1,28 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.sName" );
-
-/* This has no effect at all in DOM methods - so we just check that it has applied the name */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- null,
- null,
- { "sName": 'unit test' },
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Names are stored in the columns object",
- null,
- function () { return oSettings.aoColumns[3].sName =="unit test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.sTitle.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.sTitle.js
deleted file mode 100644
index 0a552350..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.sTitle.js
+++ /dev/null
@@ -1,82 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.sTitle" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "If not given, then the columns titles are empty",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Browser" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Can set a single column title - and others are read from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- { "sTitle": 'unit test' },
- null,
- null,
- null
- ]
- } );
- },
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "unit test" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Can set multiple column titles",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- { "sTitle": 'unit test 1' },
- null,
- null,
- { "sTitle": 'unit test 2' }
- ]
- } );
- },
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "unit test 1" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "unit test 2";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.sWidth.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.sWidth.js
deleted file mode 100644
index 46c84217..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoColumns.sWidth.js
+++ /dev/null
@@ -1,87 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.sWidth" );
-
-/* NOTE - we need to disable the auto width for the majority of these test in order to preform
- * these tests as the auto width will convert the width to a px value. We can do 'non-exact' tests
- * with auto width enabled however to ensure it scales columns as required
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bAutoWidth": false,
- "aoColumns": [
- null,
- { "sWidth": '40%' },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "With auto width disabled the width for one column is appled",
- null,
- function () { return $('#example thead th:eq(1)')[0].style.width == "40%"; }
- );
-
- oTest.fnWaitTest(
- "With auto width disabled the width for one column is appled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bAutoWidth": false,
- "aoColumns": [
- null,
- null,
- { "sWidth": '20%' },
- { "sWidth": '30%' },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example thead th:eq(2)')[0].style.width == "20%" &&
- $('#example thead th:eq(3)')[0].style.width == "30%";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "With auto width, it will make the smallest column the largest with percentage width given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumns": [
- null,
- null,
- null,
- { "sWidth": '40%' },
- null
- ]
- } );
- },
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
-
- if ( a3>a0 && a3>a1 && a3>a2 && a3>a4 )
- return true;
- else
- return false;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoSearchCols.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoSearchCols.js
deleted file mode 100644
index 6f96b7b0..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/aoSearchCols.js
+++ /dev/null
@@ -1,119 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoSearchCols" );
-
-/* We could be here forever testing this one, so we test a limited subset on a couple of colums */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default should be to have a empty colums array",
- null,
- function () {
- var bReturn =
- oSettings.aoPreSearchCols[0].sSearch == 0 && !oSettings.aoPreSearchCols[0].bRegex &&
- oSettings.aoPreSearchCols[1].sSearch == 0 && !oSettings.aoPreSearchCols[1].bRegex &&
- oSettings.aoPreSearchCols[2].sSearch == 0 && !oSettings.aoPreSearchCols[2].bRegex &&
- oSettings.aoPreSearchCols[3].sSearch == 0 && !oSettings.aoPreSearchCols[3].bRegex &&
- oSettings.aoPreSearchCols[4].sSearch == 0 && !oSettings.aoPreSearchCols[4].bRegex;
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Search on a single column - no regex statement given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoSearchCols": [
- null,
- { "sSearch": "Mozilla" },
- null,
- { "sSearch": "1" },
- null
- ]
- } );
- },
- function () { return $('#example_info').html() == "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Search on two columns - no regex statement given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoSearchCols": [
- null,
- { "sSearch": "Mozilla" },
- null,
- { "sSearch": "1.5" },
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1.5"; }
- );
-
- oTest.fnWaitTest(
- "Search on single column - escape regex false",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoSearchCols": [
- { "sSearch": ".*ML", "bEscapeRegex": false },
- null,
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example_info').html() == "Showing 1 to 3 of 3 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Search on two columns - escape regex false on first, true on second",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoSearchCols": [
- { "sSearch": ".*ML", "bEscapeRegex": false },
- { "sSearch": "3.3", "bEscapeRegex": true },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Konqureror 3.3"; }
- );
-
- oTest.fnWaitTest(
- "Search on two columns (no records) - escape regex false on first, true on second",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoSearchCols": [
- { "sSearch": ".*ML", "bEscapeRegex": false },
- { "sSearch": "Allan", "bEscapeRegex": true },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/asStripClasses.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/asStripClasses.js
deleted file mode 100644
index 1595a075..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/asStripClasses.js
+++ /dev/null
@@ -1,105 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "asStripeClasses" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
-
- oTest.fnWaitTest(
- "Default row striping is applied",
- null,
- function () {
- return $('#example tbody tr:eq(0)').hasClass('odd') &&
- $('#example tbody tr:eq(1)').hasClass('even') &&
- $('#example tbody tr:eq(2)').hasClass('odd') &&
- $('#example tbody tr:eq(3)').hasClass('even');
- }
- );
-
- oTest.fnWaitTest(
- "Row striping on the second page",
- function () { $('#example_next').click(); },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('odd') &&
- $('#example tbody tr:eq(1)').hasClass('even') &&
- $('#example tbody tr:eq(2)').hasClass('odd') &&
- $('#example tbody tr:eq(3)').hasClass('even');
- }
- );
-
- /* No striping */
- oTest.fnWaitTest(
- "No row striping",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "asStripeClasses": []
- } );
- },
- function () {
- if ( typeof $('#example tbody tr:eq(1)')[0] == 'undefined' )
- {
- /* Use the 'wait for' to allow this to become true */
- return false;
- }
- return $('#example tbody tr:eq(0)')[0].className == "" &&
- $('#example tbody tr:eq(1)')[0].className == "" &&
- $('#example tbody tr:eq(2)')[0].className == "" &&
- $('#example tbody tr:eq(3)')[0].className == "";
- }
- );
-
- /* Custom striping */
- oTest.fnWaitTest(
- "Custom striping [2]",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "asStripeClasses": [ 'test1', 'test2' ]
- } );
- },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test1') &&
- $('#example tbody tr:eq(3)').hasClass('test2');
- }
- );
-
-
- /* long array of striping */
- oTest.fnWaitTest(
- "Custom striping [4]",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "asStripeClasses": [ 'test1', 'test2', 'test3', 'test4' ]
- } );
- },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test3') &&
- $('#example tbody tr:eq(3)').hasClass('test4');
- }
- );
-
- oTest.fnWaitTest(
- "Custom striping is restarted on second page [2]",
- function () { $('#example_next').click(); },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test3') &&
- $('#example tbody tr:eq(3)').hasClass('test4');
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bAutoWidth.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bAutoWidth.js
deleted file mode 100644
index 499fcf48..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bAutoWidth.js
+++ /dev/null
@@ -1,142 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bAutoWidth" );
-
-/* It's actually a little tricky to test this. We can't test absolute numbers because
- * different browsers and different platforms will render the width of the columns slightly
- * differently. However, we certainly can test the principle of what should happen (column
- * width doesn't change over pages)
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Auto width is enabled by default",
- null,
- function () { return oSettings.oFeatures.bAutoWidth; }
- );
-
- oTest.fnWaitTest(
- "First column has a width assigned to it",
- null,
- function () { return $('#example thead th:eq(0)').attr('style').match(/width/i); }
- );
-
- /*
- This would seem like a better test - but there appear to be difficulties with tables
- which are bigger (calculated) than there is actually room for. I suspect this is actually
- a bug in datatables
- oTest.fnWaitTest(
- "Check column widths on first page match second page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- console.log( a0, b0, a1, b1, a2, b2, a3, b3 );
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return true;
- else
- return false;
- }
- );
-
- oTest.fnWaitTest(
- "Check column widths on second page match thid page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return true;
- else
- return false;
- }
- );
- */
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Auto width can be disabled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bAutoWidth": false
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bAutoWidth == false; }
- );
-
- oTest.fnWaitTest(
- "First column does not have a width assigned to it",
- null,
- function () { return $('#example thead th:eq(0)').attr('style') == null; }
- );
-
- /*
- oTest.fnWaitTest(
- "Check column widths on first page do not match second page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return false;
- else
- return true;
- }
- );
- */
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Auto width enabled override",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bAutoWidth": true
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bAutoWidth; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bFilter.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bFilter.js
deleted file mode 100644
index dd85c5e7..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bFilter.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bFilter" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
-
- oTest.fnWaitTest(
- "Filtering div exists by default",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Fltering can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bFilter": false
- } );
- },
- function () { return document.getElementById('example_filter') == null; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Filtering enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bFilter": true
- } );
- },
- function () { return document.getElementById('example_filter') != null; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bInfo.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bInfo.js
deleted file mode 100644
index 1757004e..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bInfo.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bInfo" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
-
- oTest.fnWaitTest(
- "Info div exists by default",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Info can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bInfo": false
- } );
- },
- function () { return document.getElementById('example_info') == null; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Info enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bInfo": true
- } );
- },
- function () { return document.getElementById('example_info') != null; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bLengthChange.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bLengthChange.js
deleted file mode 100644
index 35ca67dc..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bLengthChange.js
+++ /dev/null
@@ -1,75 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bLengthChange" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
-
- oTest.fnWaitTest(
- "Length div exists by default",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnWaitTest(
- "Four default options",
- null,
- function () { return $("select[name=example_length] option").length == 4; }
- );
-
- oTest.fnWaitTest(
- "Default options",
- null,
- function () {
- var opts = $("select[name='example_length'] option");
- return opts[0].getAttribute('value') == 10 && opts[1].getAttribute('value') == 25 &&
- opts[2].getAttribute('value') == 50 && opts[3].getAttribute('value') == 100;
- }
- );
-
- oTest.fnWaitTest(
- "Info takes length into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Change length can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bLengthChange": false
- } );
- },
- function () { return document.getElementById('example_length') == null; }
- );
-
- oTest.fnWaitTest(
- "Information takes length disabled into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Length change enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bLengthChange": true
- } );
- },
- function () { return document.getElementById('example_length') != null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bPaginate.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bPaginate.js
deleted file mode 100644
index bef13db0..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bPaginate.js
+++ /dev/null
@@ -1,59 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bPaginate" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
-
- oTest.fnWaitTest(
- "Pagiantion div exists by default",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnWaitTest(
- "Information div takes paging into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Pagiantion can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bPaginate": false
- } );
- },
- function () { return document.getElementById('example_paginate') == null; }
- );
-
- oTest.fnWaitTest(
- "Information div takes paging disabled into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 57 of 57 entries"; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Pagiantion enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bPaginate": true
- } );
- },
- function () { return document.getElementById('example_paginate') != null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bProcessing.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bProcessing.js
deleted file mode 100644
index 83c76c44..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bProcessing.js
+++ /dev/null
@@ -1,103 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bProcessing" );
-
-/* It's actually a bit hard to set this one due to the fact that it will only be shown
- * when DataTables is doing some kind of processing. The server-side processing is a bit
- * better to test this than here - so we just the interal functions to enable it and check
- * that it is available
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Processing is off by default",
- null,
- function () { return oSettings.oFeatures.bProcessing == false; }
- );
-
- oTest.fnWaitTest(
- "Processing div is not in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnWaitTest(
- "Processing div cannot be shown",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnWaitTest(
- "Processing div cannot be hidden",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Processing can be enabled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bProcessing": true
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bProcessing == true; }
- );
-
- oTest.fnWaitTest(
- "Processing div is in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing'); }
- );
-
- oTest.fnWaitTest(
- "Processing div is hidden by default",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing').style.visibility = "hidden"; }
- );
-
- oTest.fnWaitTest(
- "Processing div can be shown",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing').style.visibility = "visible"; }
- );
-
- oTest.fnWaitTest(
- "Processing div can be hidden",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); },
- function () { return document.getElementById('example_processing').style.visibility = "hidden"; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Processing disabled override",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bProcessing": false
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bProcessing == false; }
- );
-
- oTest.fnWaitTest(
- "Processing div is not in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bServerSide.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bServerSide.js
deleted file mode 100644
index 52779813..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bServerSide.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bServerSide" );
-
-/* Not interested in server-side processing here other than to check that it is off */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Server side is off by default",
- null,
- function () { return oSettings.oFeatures.bServerSide == false; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bSort.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bSort.js
deleted file mode 100644
index 1304c195..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bSort.js
+++ /dev/null
@@ -1,99 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bSort" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
-
- oTest.fnWaitTest(
- "Sorting is on by default",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnWaitTest(
- "Sorting Asc by default class applied",
- null,
- function () { return $('#example thead th:eq(0)').hasClass("sorting_asc"); }
- );
-
- oTest.fnWaitTest(
- "Click on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Sorting class removed from first column",
- null,
- function () { return $('#example thead th:eq(0)').hasClass("sorting_asc") != true; }
- );
-
- oTest.fnWaitTest(
- "Sorting asc class applied to second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc"); }
- );
-
- oTest.fnWaitTest(
- "Reverse on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Sorting acs class removed from second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") != true; }
- );
-
- oTest.fnWaitTest(
- "Sorting desc class applied to second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_desc"); }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Pagiantion can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bSort": false
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- oTest.fnWaitTest(
- "Click on second column has no effect",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- oTest.fnWaitTest(
- "Reverse on second column has no effect",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Sorting enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bSort": true
- } );
- },
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bSortClasses.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bSortClasses.js
deleted file mode 100644
index 22376797..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/bSortClasses.js
+++ /dev/null
@@ -1,132 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bSortClasses" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
-
- oTest.fnWaitTest(
- "Sorting classes are applied by default",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); }
- );
-
- oTest.fnWaitTest(
- "Sorting classes are applied to all required cells",
- null,
- function () { return $('#example tbody tr:eq(7) td:eq(0)').hasClass('sorting_1'); }
- );
-
- oTest.fnWaitTest(
- "Sorting classes are not applied to non-sorting columns",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_1') == false; }
- );
-
- oTest.fnWaitTest(
- "Sorting multi-column - add column 1",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2');
- }
- );
-
- oTest.fnWaitTest(
- "Sorting multi-column - add column 2",
- function () {
- oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3');
- }
- );
-
- oTest.fnWaitTest(
- "Sorting multi-column - add column 3",
- function () {
- oDispacher.click( $('#example thead th:eq(3)')[0], { 'shift': true } );
- },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') &&
- $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3');
- }
- );
-
- oTest.fnWaitTest(
- "Remove sorting classes on single column sort",
- function () {
- $('#example thead th:eq(4)').click();
- },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false &&
- $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3') == false;
- }
- );
-
- oTest.fnWaitTest(
- "Sorting class 1 was added",
- null,
- function () { return $('#example tbody tr:eq(1) td:eq(4)').hasClass('sorting_1'); }
- );
-
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Sorting classes can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bSortClasses": false
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false; }
- );
-
- oTest.fnWaitTest(
- "Sorting classes disabled - add column 1 - no effect",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false;
- }
- );
-
- oTest.fnWaitTest(
- "Sorting classes disabled - add column 2 - no effect",
- function () {
- oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false;
- }
- );
-
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Sorting classes enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bSortClasses": true
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnCreatedCell.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnCreatedCell.js
deleted file mode 100644
index d6aa78b5..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnCreatedCell.js
+++ /dev/null
@@ -1,183 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnCreatedCell tests" );
-
-$(document).ready( function () {
- var tmp = 0;
- var complete = false;
-
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumnDefs": [ {
- fnCreatedCell: function () {
- tmp++;
- },
- "aTargets": ["_all"]
- } ]
- } );
-
- oTest.fnWaitTest(
- "Cell created is called once for each cell on init",
- null,
- function () { return tmp===285; }
- );
-
- oTest.fnTest(
- "Created isn't called back on other draws",
- function () { $('#example th:eq(1)').click(); },
- function () { return tmp===285; }
- );
-
- oTest.fnWaitTest(
- "Four arguments for the function",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments.length !== 4 ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ],
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "First argument is a TD element",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[0].nodeName !== "TD" ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ],
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "Second argument is the HTML value",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[1] != $('td').html() ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ],
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "Third argument is the data array",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[2].length !== 5 ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ],
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "Fourth argument is the data source for the row",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[2] !== this.fnSettings().aoData[ arguments[2] ]._aData ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ],
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "Fifth argument is the the col index",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[1] != $('td:eq('+arguments[4]+')', arguments[0].parentNode).html() ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ],
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnCreatedRow.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnCreatedRow.js
deleted file mode 100644
index 68fa2b2a..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnCreatedRow.js
+++ /dev/null
@@ -1,142 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnCreatedRow tests" );
-
-$(document).ready( function () {
- var tmp = 0;
- var complete = false;
-
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- fnCreatedRow: function () {
- tmp++;
- }
- } );
-
- oTest.fnWaitTest(
- "Row created is called once for each row on init",
- null,
- function () { return tmp===57; }
- );
-
- oTest.fnTest(
- "Created isn't called back on other draws",
- function () { $('#example th:eq(1)').click(); },
- function () { return tmp===57; }
- );
-
- oTest.fnWaitTest(
- "Three arguments for the function",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- fnCreatedRow: function () {
- if ( arguments.length !== 3 ) {
- tmp = false;
- }
- },
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "First argument is a TR element",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- fnCreatedRow: function () {
- if ( arguments[0].nodeName !== "TR" ) {
- tmp = false;
- }
- },
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "Second argument is an array with 5 elements",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- fnCreatedRow: function () {
- if ( arguments[1].length !== 5 ) {
- tmp = false;
- }
- },
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "Third argument is the data source for the row",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- fnCreatedRow: function () {
- if ( arguments[1] !== this.fnSettings().aoData[ arguments[2] ]._aData ) {
- tmp = false;
- }
- },
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "TR element is tied to the correct data",
- function () {
- oSession.fnRestore();
- tmp = false;
- complete = false;
-
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- fnCreatedRow: function (tr, data, index) {
- if ( data[1] === "Firefox 1.0" ) {
- if ( $('td:eq(3)', tr).html() == "1.7" ) {
- tmp = true;
- }
- }
- },
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnDrawCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnDrawCallback.js
deleted file mode 100644
index 1954c17a..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnDrawCallback.js
+++ /dev/null
@@ -1,98 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnDrawCallback" );
-
-/* Fairly boring function compared to the others! */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
- var mPass, bInit;
-
- oTest.fnWaitTest(
- "Default should be null",
- null,
- function () { return oSettings.fnDrawCallback == null; }
- );
-
-
- oTest.fnWaitTest(
- "One argument passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- bInit = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnDrawCallback": function ( ) {
- mPass = arguments.length;
- },
- "fnInitComplete": function () {
- bInit = true;
- }
- } );
- },
- function () { return mPass == 1 && bInit; }
- );
-
-
- oTest.fnWaitTest(
- "That one argument is the settings object",
- function () {
- oSession.fnRestore();
-
- bInit = false;
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnDrawCallback": function ( oSettings ) {
- mPass = oSettings;
- },
- "fnInitComplete": function () {
- bInit = true;
- }
- } );
- },
- function () { return oTable.fnSettings() == mPass && bInit; }
- );
-
-
- /* The draw callback is called once for the init and then when the data is added */
- oTest.fnWaitTest(
- "fnRowCallback called once on first draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- bInit = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnDrawCallback": function ( ) {
- mPass++;
- },
- "fnInitComplete": function () {
- bInit = true;
- }
- } );
- },
- function () { return mPass == 2 && bInit; }
- );
-
- oTest.fnWaitTest(
- "fnRowCallback called once on each draw there after as well",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return mPass == 5; }
- );
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnHeaderCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnHeaderCallback.js
deleted file mode 100644
index c6d3d54b..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnHeaderCallback.js
+++ /dev/null
@@ -1,191 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnHeaderCallback" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
- var mPass, bInit;
-
- oTest.fnWaitTest(
- "Default should be null",
- null,
- function () { return oSettings.fnHeaderCallback == null; }
- );
-
-
- oTest.fnWaitTest(
- "Five arguments passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- bInit = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnHeaderCallback": function ( ) {
- mPass = arguments.length;
- },
- "fnInitComplete": function () {
- bInit = true;
- }
- } );
- },
- function () { return mPass == 5 && bInit; }
- );
-
-
- /* The header callback is called once for the init and then when the data is added */
- oTest.fnWaitTest(
- "fnHeaderCallback called once per draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- bInit = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- mPass++;
- },
- "fnInitComplete": function () {
- bInit = true;
- }
- } );
- },
- function () { return mPass == 2 && bInit; }
- );
-
- oTest.fnWaitTest(
- "fnRowCallback called on paging (i.e. another draw)",
- function () { $('#example_next').click(); },
- function () { return mPass == 3; }
- );
-
-
- oTest.fnWaitTest(
- "fnRowCallback allows us to alter row information",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records";
- }
- } );
- },
- function () { return $('#example thead th:eq(0)').html() == "Displaying 10 records"; }
- );
-
-
- oTest.fnWaitTest(
- "iStart correct on first page",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iStart != 0 )
- {
- mPass = false;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnWaitTest(
- "iStart correct on second page",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iStart == 10 )
- {
- mPass = true;
- }
- },
- "fnInitComplete": function () {
- $('#example_next').click();
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnWaitTest(
- "iEnd correct on second page",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iEnd == 20 )
- {
- mPass = true;
- }
- },
- "fnInitComplete": function () {
- $('#example_next').click();
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnWaitTest(
- "aiDisplay length is full data when not filtered",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( aiDisplay.length == 57 )
- {
- mPass = true;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnWaitTest(
- "aiDisplay length is 9 when filtering on 'Mozilla'",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( aiDisplay.length == 9 )
- {
- mPass = true;
- }
- }
- } );
- oTable.fnFilter( "Mozilla" );
- },
- function () { return mPass; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnInitComplete.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnInitComplete.js
deleted file mode 100644
index bdc7a7a5..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnInitComplete.js
+++ /dev/null
@@ -1,100 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnInitComplete" );
-
-/* Fairly boring function compared to the others! */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnWaitTest(
- "Default should be null",
- null,
- function () { return oSettings.fnInitComplete == null; }
- );
-
-
- oTest.fnWaitTest(
- "Two arguments passed (for Ajax!)",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnInitComplete": function ( ) {
- mPass = arguments.length;
- }
- } );
- },
- function () { return mPass == 2; }
- );
-
-
- oTest.fnWaitTest(
- "That one argument is the settings object",
- function () {
- oSession.fnRestore();
-
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnInitComplete": function ( oSettings ) {
- mPass = oSettings;
- }
- } );
- },
- function () { return oTable.fnSettings() == mPass; }
- );
-
-
- oTest.fnWaitTest(
- "fnInitComplete called once on first draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnInitComplete": function ( ) {
- mPass++;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
- oTest.fnWaitTest(
- "fnInitComplete never called there after",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return mPass == 1; }
- );
-
-
- oTest.fnWaitTest(
- "10 rows in the table on complete",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnInitComplete": function ( ) {
- mPass = $('#example tbody tr').length;
- }
- } );
- },
- function () { return mPass == 10; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnRowCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnRowCallback.js
deleted file mode 100644
index e1c46849..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnRowCallback.js
+++ /dev/null
@@ -1,112 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnRowCallback" );
-
-/* Note - fnRowCallback MUST return the first arguments (modified or not) */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnWaitTest(
- "Default should be null",
- null,
- function () { return oSettings.fnRowCallback == null; }
- );
-
-
- oTest.fnWaitTest(
- "Four arguments passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnRowCallback": function ( nTr ) {
- mPass = arguments.length;
- return nTr;
- }
- } );
- },
- function () { return mPass == 4; }
- );
-
-
- oTest.fnWaitTest(
- "fnRowCallback called once for each drawn row",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- mPass++;
- return nTr;
- }
- } );
- },
- function () { return mPass == 10; }
- );
-
- oTest.fnWaitTest(
- "fnRowCallback allows us to alter row information",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- $(nTr).addClass('unit_test');
- return nTr;
- }
- } );
- },
- function () { return $('#example tbody tr:eq(1)').hasClass('unit_test'); }
- );
-
- oTest.fnWaitTest(
- "Data array has length matching columns",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- if ( asData.length != 5 )
- mPass = false;
- return nTr;
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnWaitTest(
- "Data array has length matching columns",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- var iCount = 0;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- if ( iCount != iDrawIndex )
- mPass = false;
- iCount++;
- return nTr;
- }
- } );
- },
- function () { return mPass; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnServerData.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnServerData.js
deleted file mode 100644
index e9d32065..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/fnServerData.js
+++ /dev/null
@@ -1,64 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnServerData for Ajax sourced data" );
-
-$(document).ready( function () {
- var mPass;
-
- oTest.fnTest(
- "Argument length",
- function () {
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnServerData": function () {
- mPass = arguments.length;
- }
- } );
- },
- function () { return mPass == 4; }
- );
-
- oTest.fnTest(
- "Url",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnServerData": function (sUrl, aoData, fnCallback, oSettings) {
- mPass = sUrl == "../../../examples/ajax/sources/arrays.txt";
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "Data array",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnServerData": function (sUrl, aoData, fnCallback, oSettings) {
- mPass = aoData.length==0;
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "Callback function",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "fnServerData": function (sUrl, aoData, fnCallback, oSettings) {
- mPass = typeof fnCallback == 'function';
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/iDisplayLength.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/iDisplayLength.js
deleted file mode 100644
index ed1c069b..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/iDisplayLength.js
+++ /dev/null
@@ -1,81 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "iDisplayLength" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
-
- oTest.fnWaitTest(
- "Default length is ten",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnWaitTest(
- "Select menu shows 10",
- null,
- function () { return $('#example_length select').val() == 10; }
- );
-
-
- oTest.fnWaitTest(
- "Set initial length to 25",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "iDisplayLength": 25
- } );
- },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnWaitTest(
- "Select menu shows 25",
- null,
- function () { return $('#example_length select').val() == 25; }
- );
-
-
- oTest.fnWaitTest(
- "Set initial length to 100",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "iDisplayLength": 100
- } );
- },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnWaitTest(
- "Select menu shows 25",
- null,
- function () { return $('#example_length select').val() == 100; }
- );
-
-
- oTest.fnWaitTest(
- "Set initial length to 23 (unknown select menu length)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "iDisplayLength": 23
- } );
- },
- function () { return $('#example tbody tr').length == 23; }
- );
-
- oTest.fnWaitTest(
- "Select menu shows 10 (since 23 is unknow)",
- null,
- function () { return $('#example_length select').val() == 10; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.oPaginate.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.oPaginate.js
deleted file mode 100644
index ea2f14a9..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.oPaginate.js
+++ /dev/null
@@ -1,84 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.oPaginate" );
-
-/* Note that the paging language information only has relevence in full numbers */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "sPaginationType": "full_numbers"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "oLanguage.oPaginate defaults",
- null,
- function () {
- var bReturn =
- oSettings.oLanguage.oPaginate.sFirst == "First" &&
- oSettings.oLanguage.oPaginate.sPrevious == "Previous" &&
- oSettings.oLanguage.oPaginate.sNext == "Next" &&
- oSettings.oLanguage.oPaginate.sLast == "Last";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "oLanguage.oPaginate defaults are in the DOM",
- null,
- function () {
- var bReturn =
- $('#example_paginate .first').html() == "First" &&
- $('#example_paginate .previous').html() == "Previous" &&
- $('#example_paginate .next').html() == "Next" &&
- $('#example_paginate .last').html() == "Last";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "oLanguage.oPaginate can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "sPaginationType": "full_numbers",
- "oLanguage": {
- "oPaginate": {
- "sFirst": "unit1",
- "sPrevious": "test2",
- "sNext": "unit3",
- "sLast": "test4"
- }
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var bReturn =
- oSettings.oLanguage.oPaginate.sFirst == "unit1" &&
- oSettings.oLanguage.oPaginate.sPrevious == "test2" &&
- oSettings.oLanguage.oPaginate.sNext == "unit3" &&
- oSettings.oLanguage.oPaginate.sLast == "test4";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "oLanguage.oPaginate definitions are in the DOM",
- null,
- function () {
- var bReturn =
- $('#example_paginate .first').html() == "unit1" &&
- $('#example_paginate .previous').html() == "test2" &&
- $('#example_paginate .next').html() == "unit3" &&
- $('#example_paginate .last').html() == "test4";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sInfo.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sInfo.js
deleted file mode 100644
index b425bf52..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sInfo.js
+++ /dev/null
@@ -1,117 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sInfo" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Info language is 'Showing _START_ to _END_ of _TOTAL_ entries' by default",
- null,
- function () { return oSettings.oLanguage.sInfo == "Showing _START_ to _END_ of _TOTAL_ entries"; }
- );
-
- oTest.fnTest(
- "Info language default is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; }
- );
-
-
- oTest.fnWaitTest(
- "Info language can be defined - without any macros",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sInfo": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sInfo == "unit test"; }
- );
-
- oTest.fnTest(
- "Info language definition is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "unit test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macro _START_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sInfo": "unit _START_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macro _END_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sInfo": "unit _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 10 test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macro _TOTAL_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sInfo": "unit _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 57 test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macros _START_ and _END_",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sInfo": "unit _START_ _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 10 test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macros _START_, _END_ and _TOTAL_",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sInfo": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 10 57 test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoEmpty.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoEmpty.js
deleted file mode 100644
index e6983cdc..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoEmpty.js
+++ /dev/null
@@ -1,79 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sInfoEmpty" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Info empty language is 'Showing 0 to 0 of 0 entries' by default",
- function () { oTable.fnFilter("nothinghere"); },
- function () { return oSettings.oLanguage.sInfoEmpty == "Showing 0 to 0 of 0 entries"; }
- );
-
- oTest.fnTest(
- "Info empty language default is in the DOM",
- null,
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "Showing 0 to 0 of 0 entries";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Info empty language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sInfoEmpty": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- oTable.fnFilter("nothinghere");
- },
- function () { return oSettings.oLanguage.sInfoEmpty == "unit test"; }
- );
-
- oTest.fnTest(
- "Info empty language default is in the DOM",
- null,
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "unit test";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Macro's replaced",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sInfoEmpty": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- oTable.fnFilter("nothinghere");
- },
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "unit 1 0 0 test";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoPostFix.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoPostFix.js
deleted file mode 100644
index 204027d9..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoPostFix.js
+++ /dev/null
@@ -1,78 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sInfoPostFix" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Info post fix language is '' (blank) by default",
- null,
- function () { return oSettings.oLanguage.sInfoPostFix == ""; }
- );
-
- oTest.fnTest(
- "Width no post fix, the basic info shows",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; }
- );
-
-
- oTest.fnWaitTest(
- "Info post fix language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sInfoPostFix": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sInfoPostFix == "unit test"; }
- );
-
- oTest.fnTest(
- "Info empty language default is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit test"; }
- );
-
-
- oTest.fnWaitTest(
- "Macros have no effect in the post fix",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sInfoPostFix": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit _START_ _END_ _TOTAL_ test"; }
- );
-
-
- oTest.fnWaitTest(
- "Post fix is applied after fintering info",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sInfoPostFix": "unit test"
- }
- } );
- oTable.fnFilter("nothinghere");
- },
- function () { return document.getElementById('example_info').innerHTML = "Showing 0 to 0 of 0 entries unit (filtered from 57 total entries) test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sLengthMenu.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sLengthMenu.js
deleted file mode 100644
index 4aec2045..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sLengthMenu.js
+++ /dev/null
@@ -1,111 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sLengthMenu" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Menu language is 'Show _MENU_ entries' by default",
- null,
- function () { return oSettings.oLanguage.sLengthMenu == "Show _MENU_ entries"; }
- );
-
- oTest.fnTest(
- "_MENU_ macro is replaced by select menu in DOM",
- null,
- function () { return $('select', oSettings.aanFeatures.l[0]).length == 1 }
- );
-
- oTest.fnTest(
- "A label input is used",
- null,
- function () { return $('label', oSettings.aanFeatures.l[0]).length == 1 }
- );
-
- oTest.fnTest(
- "Default is put into DOM",
- null,
- function () {
- var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes;
- var bReturn =
- anChildren[0].nodeValue == "Show " &&
- anChildren[2].nodeValue == " entries";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Menu length language can be defined - no _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sLengthMenu": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sLengthMenu == "unit test"; }
- );
-
- oTest.fnTest(
- "Menu length language definition is in the DOM",
- null,
- function () {
- return $('label', oSettings.aanFeatures.l[0]).text() == "unit test";
- }
- );
-
-
- oTest.fnWaitTest(
- "Menu length language can be defined - with _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sLengthMenu": "unit _MENU_ test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes;
- var bReturn =
- anChildren[0].nodeValue == "unit " &&
- anChildren[2].nodeValue == " test";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Only the _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sLengthMenu": "_MENU_"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var anChildren = oSettings.aanFeatures.l[0].childNodes;
- var bReturn =
- anChildren.length == 1 &&
- $('select', oSettings.aanFeatures.l[0]).length == 1;
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sLoadingRecords.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sLoadingRecords.js
deleted file mode 100644
index 0afaa345..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sLoadingRecords.js
+++ /dev/null
@@ -1,65 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sLoadingRecords" );
-
-$(document).ready( function () {
- var tmp = false;
- oTest.fnTest(
- "Default loading text is 'Loading...'",
- function () {
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- tmp = $('#example tbody tr td')[0].innerHTML == "Loading...";
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "Text can be overriden",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "oLanguage": {
- "sLoadingRecords": "unitest"
- },
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- tmp = $('#example tbody tr td')[0].innerHTML == "unitest";
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "When sZeroRecords is given but sLoadingRecords is not, sZeroRecords is used",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "oLanguage": {
- "sZeroRecords": "unitest_sZeroRecords"
- },
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- tmp = $('#example tbody tr td')[0].innerHTML == "unitest_sZeroRecords";
- },
- function () { return tmp; }
- );
-
- oTest.fnTest(
- "sLoadingRecords and sZeroRecords both given",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "oLanguage": {
- "sZeroRecords": "unitest_sZeroRecords2",
- "sLoadingRecords": "unitest2"
- },
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- tmp = $('#example tbody tr td')[0].innerHTML == "unitest2";
- },
- function () { return tmp; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sProcessing.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sProcessing.js
deleted file mode 100644
index 0da7c27c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sProcessing.js
+++ /dev/null
@@ -1,49 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sProcessing" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bProcessing": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Processing language is 'Processing...' by default",
- null,
- function () { return oSettings.oLanguage.sProcessing == "Processing..."; }
- );
-
- oTest.fnTest(
- "Processing language default is in the DOM",
- null,
- function () { return document.getElementById('example_processing').innerHTML = "Processing..."; }
- );
-
-
- oTest.fnWaitTest(
- "Processing language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bProcessing": true,
- "oLanguage": {
- "sProcessing": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sProcessing == "unit test"; }
- );
-
- oTest.fnTest(
- "Processing language definition is in the DOM",
- null,
- function () { return document.getElementById('example_processing').innerHTML = "unit test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sSearch.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sSearch.js
deleted file mode 100644
index ed734e64..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sSearch.js
+++ /dev/null
@@ -1,70 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sSearch" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Search language is 'Search:' by default",
- null,
- function () { return oSettings.oLanguage.sSearch == "Search:"; }
- );
-
- oTest.fnTest(
- "A label input is used",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).length == 1 }
- );
-
- oTest.fnTest(
- "Search language default is in the DOM",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).text()
- == "Search: "; }
- );
-
-
- oTest.fnWaitTest(
- "Search language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sSearch": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sSearch == "unit test"; }
- );
-
- oTest.fnTest(
- "Info language definition is in the DOM",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).text().indexOf('unit test') !== -1; }
- );
-
-
- oTest.fnWaitTest(
- "Blank search has a no space (separator) inserted",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sSearch": ""
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return document.getElementById('example_filter').childNodes.length == 1; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sUrl.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sUrl.js
deleted file mode 100644
index 92ca1387..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sUrl.js
+++ /dev/null
@@ -1,62 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sUrl" );
-
-/* Note that we only test the internal storage of language information pulled form a file here
- * as the other language tests will check it goes into the DOM correctly
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "sUrl is blank by default",
- null,
- function () { return oSettings.oLanguage.sUrl == ""; }
- );
-
-
- oTest.fnWaitTest(
- "Loading of German file loads language information",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sUrl": "../../../examples/examples_support/de_DE.txt"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var bReturn =
- oSettings.oLanguage.sProcessing == "Bitte warten..." &&
- oSettings.oLanguage.sLengthMenu == "_MENU_ Einträge anzeigen" &&
- oSettings.oLanguage.sZeroRecords == "Keine Einträge vorhanden." &&
- oSettings.oLanguage.sInfo == "_START_ bis _END_ von _TOTAL_ Einträgen" &&
- oSettings.oLanguage.sInfoEmpty == "0 bis 0 von 0 Einträgen" &&
- oSettings.oLanguage.sInfoFiltered == "(gefiltert von _MAX_ Einträgen)" &&
- oSettings.oLanguage.sInfoPostFix == "" &&
- oSettings.oLanguage.sSearch == "Suchen" &&
- oSettings.oLanguage.oPaginate.sFirst == "Erster" &&
- oSettings.oLanguage.oPaginate.sPrevious == "Zurück" &&
- oSettings.oLanguage.oPaginate.sNext == "Nächster" &&
- oSettings.oLanguage.oPaginate.sLast == "Letzter";
-
- return bReturn;
- }
- );
-
- /* One DOM check just to ensure that they go into the DOM */
- oTest.fnTest(
- "Loaded language goes into the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "1 bis 10 von 57 Einträgen"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sZeroRecords.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sZeroRecords.js
deleted file mode 100644
index 9d8fd310..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oLanguage.sZeroRecords.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sZeroRecords" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Zero records language is 'No matching records found' by default",
- null,
- function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; }
- );
-
- oTest.fnWaitTest(
- "Text is shown when empty table (after filtering)",
- function () { oTable.fnFilter('nothinghere'); },
- function () { return $('#example tbody tr td')[0].innerHTML == "No matching records found" }
- );
-
-
-
- oTest.fnWaitTest(
- "Zero records language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oLanguage": {
- "sZeroRecords": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sZeroRecords == "unit test"; }
- );
-
- oTest.fnWaitTest(
- "Text is shown when empty table (after filtering)",
- function () { oTable.fnFilter('nothinghere2'); },
- function () { return $('#example tbody tr td')[0].innerHTML == "unit test" }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oSearch.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oSearch.js
deleted file mode 100644
index be1c21ee..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/oSearch.js
+++ /dev/null
@@ -1,108 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oSearch" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default values should be blank",
- null,
- function () {
- var bReturn = oSettings.oPreviousSearch.sSearch == "" &&
- !oSettings.oPreviousSearch.bRegex;
- return bReturn;
- }
- );
-
- /* This test might be considered iffy since the full object isn't given, but it's reasonable to
- * expect DataTables to cope with this. It should just assumine regex false
- */
- oTest.fnWaitTest(
- "Search term only in object",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oSearch": {
- "sSearch": "Mozilla"
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnWaitTest(
- "New search will kill old one",
- function () {
- oTable.fnFilter("Opera");
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; }
- );
-
- oTest.fnWaitTest(
- "Search plain text term and escape regex true",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oSearch": {
- "sSearch": "DS",
- "bRegex": false
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Nintendo DS browser"; }
- );
-
- oTest.fnWaitTest(
- "Search plain text term and escape regex false",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oSearch": {
- "sSearch": "Opera",
- "bRegex": true
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; }
- );
-
- oTest.fnWaitTest(
- "Search regex text term and escape regex true",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oSearch": {
- "sSearch": "1.*",
- "bRegex": false
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnWaitTest(
- "Search regex text term and escape regex false",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "oSearch": {
- "sSearch": "1.*",
- "bRegex": true
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sAjaxDataProp.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sAjaxDataProp.js
deleted file mode 100644
index 983846a0..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sAjaxDataProp.js
+++ /dev/null
@@ -1,139 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "Custom data source property - property given" );
-
-
-$(document).ready( function () {
- var oInit = {
- "sAjaxSource": "../../../examples/ajax/sources/custom_prop.txt",
- "sAjaxDataProp": "demo"
- };
- $('#example').dataTable( oInit );
-
- oTest.fnWaitTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sAjaxDataProp2.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sAjaxDataProp2.js
deleted file mode 100644
index 769afaf6..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sAjaxDataProp2.js
+++ /dev/null
@@ -1,139 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "Custom data source property - array only" );
-
-
-$(document).ready( function () {
- var oInit = {
- "sAjaxSource": "../../../examples/ajax/sources/array_only.txt",
- "sAjaxDataProp": ""
- };
- $('#example').dataTable( oInit );
-
- oTest.fnWaitTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sAjaxSource.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sAjaxSource.js
deleted file mode 100644
index 0d306448..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sAjaxSource.js
+++ /dev/null
@@ -1,22 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "sAjaxSource" );
-
-/* Sanitfy check really - all the other tests blast this */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Server side is off by default",
- null,
- function () {
- return oSettings.sAjaxSource == "../../../examples/ajax/sources/arrays.txt";
- }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sDom.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sDom.js
deleted file mode 100644
index 0c1f41d7..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sDom.js
+++ /dev/null
@@ -1,262 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "sDom" );
-
-/* This is going to be brutal on the browser! There is a lot that can be tested here... */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default DOM varaible",
- null,
- function () { return oSettings.sDom == "lfrtip"; }
- );
-
- oTest.fnWaitTest(
- "Default DOM in document",
- null,
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- nNodes[4] == nInfo &&
- nNodes[5] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check example 1 in code propagates",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "sDom": '<"wrapper"flipt>'
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.sDom == '<"wrapper"flipt>'; }
- );
-
- oTest.fnWaitTest(
- "Check example 1 in DOM",
- null,
- function () {
- var jqNodes = $('#demo div, #demo table');
- var nNodes = [];
-
- /* Strip the paging nodes */
- for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ )
- {
- if ( jqNodes[i].getAttribute('id') != "example_previous" &&
- jqNodes[i].getAttribute('id') != "example_next" )
- {
- nNodes.push( jqNodes[i] );
- }
- }
-
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
- var nCustomWrapper = $('div.wrapper')[0];
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nCustomWrapper &&
- nNodes[2] == nFilter &&
- nNodes[3] == nLength &&
- nNodes[4] == nInfo &&
- nNodes[5] == nPaging &&
- nNodes[6] == nTable;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check example 2 in DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "sDom": '<lf<t>ip>'
- } );
- },
- function () {
- var jqNodes = $('#demo div, #demo table');
- var nNodes = [];
- var nCustomWrappers = []
-
- /* Strip the paging nodes */
- for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ )
- {
- if ( jqNodes[i].getAttribute('id') != "example_previous" &&
- jqNodes[i].getAttribute('id') != "example_next" )
- {
- nNodes.push( jqNodes[i] );
- }
-
- /* Only the two custom divs don't have class names */
- if ( jqNodes[i].className == "" )
- {
- nCustomWrappers.push( jqNodes[i] );
- }
- }
-
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nCustomWrappers[0] &&
- nNodes[2] == nLength &&
- nNodes[3] == nFilter &&
- nNodes[4] == nCustomWrappers[1] &&
- nNodes[5] == nTable &&
- nNodes[6] == nInfo &&
- nNodes[7] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check no length element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "sDom": 'frtip'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- null == nLength &&
- nNodes[1] == nFilter &&
- nNodes[2] == nTable &&
- nNodes[3] == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check no filter element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "sDom": 'lrtip'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- null == nFilter &&
- nNodes[2] == nTable &&
- nNodes[3] == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- /* Note we don't test for no table as this is not supported (and it would be fairly daft! */
-
- oTest.fnWaitTest(
- "Check no info element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "sDom": 'lfrtp'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- null == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check no paging element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "sDom": 'lfrti'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- nNodes[4] == nInfo &&
- null == nPaging;
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sPaginationType.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sPaginationType.js
deleted file mode 100644
index 76b138b1..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/3_ajax/sPaginationType.js
+++ /dev/null
@@ -1,134 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "sPaginationType" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Check two button paging is the default",
- null,
- function () { return oSettings.sPaginationType == "two_button"; }
- );
-
- oTest.fnWaitTest(
- "Check class is applied",
- null,
- function () { return $('#example_paginate').hasClass('paging_two_button'); }
- );
-
- oTest.fnWaitTest(
- "Two A elements are in the wrapper",
- null,
- function () { return $('#example_paginate a').length == 2; }
- );
-
- oTest.fnWaitTest(
- "We have the previous button",
- null,
- function () { return document.getElementById('example_previous'); }
- );
-
- oTest.fnWaitTest(
- "We have the next button",
- null,
- function () { return document.getElementById('example_next'); }
- );
-
- oTest.fnWaitTest(
- "Previous button is disabled",
- null,
- function () { return $('#example_previous').hasClass('paginate_disabled_previous'); }
- );
-
- oTest.fnWaitTest(
- "Next button is enabled",
- null,
- function () { return $('#example_next').hasClass('paginate_enabled_next'); }
- );
-
- /* Don't test paging - that's done by the zero config test script. */
-
-
- /* Two buttons paging */
- var bComplete = false;
- oTest.fnWaitTest(
- "Can enabled full numbers paging",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "sPaginationType": "full_numbers",
- "fnInitComplete": function () {
- bComplete = true;
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- if ( bComplete )
- return oSettings.sPaginationType == "full_numbers";
- else
- return false;
- }
- );
-
- oTest.fnWaitTest(
- "Check full numbers class is applied",
- null,
- function () { return $('#example_paginate').hasClass('paging_full_numbers'); }
- );
-
-
- var nFirst, nPrevious, nNext, nLast;
- oTest.fnWaitTest(
- "Jump to last page",
- function () {
- nFirst = $('div.dataTables_paginate a.first');
- nPrevious = $('div.dataTables_paginate a.previous');
- nNext = $('div.dataTables_paginate a.next');
- nLast = $('div.dataTables_paginate a.last');
- nLast.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries";
- }
- );
-
- oTest.fnWaitTest(
- "Go to two pages previous",
- function () {
- nPrevious.click();
- nPrevious.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 31 to 40 of 57 entries";
- }
- );
-
- oTest.fnWaitTest(
- "Next (second last) page",
- function () {
- nNext.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 41 to 50 of 57 entries";
- }
- );
-
- oTest.fnWaitTest(
- "Jump to first page",
- function () {
- nFirst.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries";
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/-iDraw.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/-iDraw.js
deleted file mode 100644
index 3117113c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/-iDraw.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "iDraw - check that iDraw increments for each draw" );
-
-
-$(document).ready( function () {
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "After first draw, iDraw is 1",
- null,
- function () { return oSettings.iDraw == 1; }
- );
-
- oTest.fnWaitTest(
- "After second draw, iDraw is 2",
- function () { oTable.fnDraw() },
- function () { return oSettings.iDraw == 2; }
- );
-
- oTest.fnWaitTest(
- "After sort",
- function () { oTable.fnSort([[1,'asc']]) },
- function () { return oSettings.iDraw == 3; }
- );
-
- oTest.fnWaitTest(
- "After filter",
- function () { oTable.fnFilter('gecko') },
- function () { return oSettings.iDraw == 4; }
- );
-
- oTest.fnWaitTest(
- "After another filter",
- function () { oTable.fnFilter('gec') },
- function () { return oSettings.iDraw == 5; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/2440.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/2440.js
deleted file mode 100644
index 268a822b..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/2440.js
+++ /dev/null
@@ -1,32 +0,0 @@
-// DATA_TEMPLATE: empty_table
-/*
- * NOTE: There are some differences in this zero config script for server-side
- * processing compared to the other data sources. The main reason for this is the
- * difference in how the server-side processing does it's filtering. Also the
- * sorting state is always reset on each draw.
- */
-oTest.fnStart( "Info element with display all" );
-
-$(document).ready( function () {
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
-
- oTable.fnSettings()._iDisplayLength = -1;
- oTable.oApi._fnCalculateEnd( oTable.fnSettings() );
- oTable.fnDraw();
-
-
- /* Basic checks */
- oTest.fnWaitTest(
- "Check length is correct when -1 length given",
- null,
- function () {
- return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 57 of 57 entries";
- }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/2569.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/2569.js
deleted file mode 100644
index 052d5ed6..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/2569.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "Destroy with hidden columns" );
-
-$(document).ready( function () {
- var mTest;
-
-
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumnDefs": [
- { "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] },
- { "bVisible": false, "aTargets": [ 3 ] }
- ],
- "fnInitComplete": function () {
- this.fnDestroy();
- }
- } );
-
- oTest.fnWaitTest(
- "Check that the number of columns in table is correct",
- null,
- function () { return $('#example tbody tr:eq(0) td').length == 5; }
- );
-
-
- oTest.fnTest(
- "And with scrolling",
- function () {
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "sScrollY": 200,
- "aoColumnDefs": [
- { "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] },
- { "bVisible": false, "aTargets": [ 3 ] }
- ],
- "fnInitComplete": function () {
- this.fnDestroy();
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 5; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/2600.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/2600.js
deleted file mode 100644
index eb13ce3f..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/2600.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "2600 - Display rewind when changing length" );
-
-$(document).ready( function () {
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
-
- oTest.fnWaitTest(
- "Info correct on init",
- null,
- function () { return $('#example_info').html() == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Page 2",
- function () { $('#example_next').click(); },
- function () { return $('#example_info').html() == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Page 3",
- function () { $('#example_next').click(); },
- function () { return $('#example_info').html() == "Showing 21 to 30 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Page 4",
- function () { $('#example_next').click(); },
- function () { return $('#example_info').html() == "Showing 31 to 40 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Page 5",
- function () { $('#example_next').click(); },
- function () { return $('#example_info').html() == "Showing 41 to 50 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Rewind",
- function () { $('#example_length select').val('100'); $('#example_length select').change(); },
- function () { return $('#example_info').html() == "Showing 1 to 57 of 57 entries"; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/_zero_config.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/_zero_config.js
deleted file mode 100644
index fd62a210..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/_zero_config.js
+++ /dev/null
@@ -1,424 +0,0 @@
-// DATA_TEMPLATE: empty_table
-/*
- * NOTE: There are some differences in this zero config script for server-side
- * processing compared to the other data sources. The main reason for this is the
- * difference in how the server-side processing does it's filtering. Also the
- * sorting state is always reset on each draw.
- */
-oTest.fnStart( "Sanity checks for DataTables with data from JS" );
-
-oTest.fnWaitTest(
- "jQuery.dataTable function",
- null,
- function () { return typeof jQuery().dataTable == "function"; }
-);
-
-oTest.fnWaitTest(
- "jQuery.dataTableSettings storage array",
- null,
- function () { return typeof jQuery().dataTableSettings == "object"; }
-);
-
-oTest.fnWaitTest(
- "jQuery.dataTableExt plugin object",
- null,
- function () { return typeof jQuery().dataTableExt == "object"; }
-);
-
-$(document).ready( function () {
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
-
- /* Basic checks */
- oTest.fnWaitTest(
- "Length changing div exists",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnWaitTest(
- "Filtering div exists",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- oTest.fnWaitTest(
- "Information div exists",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- oTest.fnWaitTest(
- "Pagination div exists",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnWaitTest(
- "Processing div is off by default",
- null,
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnWaitTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnWaitTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnWaitTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnWaitTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnWaitTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnWaitTest(
- "Sorting multi-column - sorting first column only",
- function () {
- $('#example thead th:eq(0)').click(); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Firefox 1.0"; return b; }
- );
-
- /* Basic paging */
- oTest.fnWaitTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Mozilla 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.0"; }
- );
-
- oTest.fnWaitTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.0"; }
- );
-
- /* Changing length */
- oTest.fnWaitTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnWaitTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnWaitTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnWaitTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnWaitTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Information on last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Information back on first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Information with 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Information with 25 records - second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Information with 100 records - first page",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('100').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Information back to 10 records",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('10').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Information with filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Information with filter 'Win' second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Information with filter 'Win' last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Information with filter 'Win' back to first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Information with filter 'Win' second page - second time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Information with filter increased to 'Win 98'",
- function () { $('#example_filter input').val("Win 98").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Information with filter decreased to 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Information with filter 'Win' second page - third time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Information with filter removed",
- function () { $('#example_filter input').val("").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
-
- /*
- * Filtering
- */
- oTest.fnWaitTest(
- "Filter 'W' - rows",
- function () {
- $('#example_filter input').val("W").keyup(); },
- function () { return $('#example tbody tr:eq(4) td:eq(1)').html() == "Netscape 7.2"; }
- );
-
- oTest.fnWaitTest(
- "Filter 'W' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Filter 'Wi'",
- function () { $('#example_filter input').val("Wi").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Filter 'Win' - sorting column 1",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; }
- );
-
- oTest.fnWaitTest(
- "Filter 'Win' - sorting column 1 info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Filter 'Win' - sorting column 1 reverse",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Filter 'Win XP' - maintaing reverse sorting col 1",
- function () { $('#example_filter input').val("Win XP").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; }
- );
-
- oTest.fnWaitTest(
- "Filter 'Win XP' - sorting col 3",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "6"; }
- );
-
- /* Note the filtering is different from the DOM since the server doesn't do
- * "smart filtering" like the client side does
- */
- oTest.fnWaitTest(
- "Filter 'Win XP' - sorting col 3 - reversed",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; }
- );
-
- oTest.fnWaitTest(
- "Filter 'Win' - sorting col 3 - reversed info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 2 of 2 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Filter 'nothinghere'",
- function () { $('#example_filter input').val("nothinghere").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() ==
- "No matching records found"; }
- );
-
- oTest.fnWaitTest(
- "Filter 'nothinghere' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Filter back to blank and 1st column sorting",
- function () {
- $('#example_filter input').val("").keyup();
- $('#example thead th:eq(0)').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aaSorting.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aaSorting.js
deleted file mode 100644
index a9e6910e..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aaSorting.js
+++ /dev/null
@@ -1,212 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aaSorting" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default sorting is single column",
- null,
- function () {
- return oSettings.aaSorting.length == 1 && typeof oSettings.aaSorting[0] == 'object';
- }
- );
-
- oTest.fnWaitTest(
- "Default sorting is first column asc",
- null,
- function () {
- return oSettings.aaSorting[0].length == 3 && oSettings.aaSorting[0][0] == 0 &&
- oSettings.aaSorting[0][1] == 'asc';
- }
- );
-
- oTest.fnWaitTest(
- "Sorting is applied",
- null,
- function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.0"; }
- );
-
-
- oTest.fnWaitTest(
- "Custom sorting on single string column asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aaSorting": [['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
-
- oTest.fnWaitTest(
- "Custom sorting on single string column desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aaSorting": [['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
-
- oTest.fnWaitTest(
- "Custom sorting on single int column asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aaSorting": [['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
-
- oTest.fnWaitTest(
- "Custom sorting on single int column desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aaSorting": [['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string asc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aaSorting": [['0','asc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string asc / string desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aaSorting": [['0','asc'], ['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string desc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aaSorting": [['0','desc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "iPod Touch / iPhone"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string desc / string desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aaSorting": [['0','desc'], ['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Safari 3.0"; }
- );
-
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string asc / int asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aaSorting": [['0','asc'], ['3','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "1"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string asc / int desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aaSorting": [['0','asc'], ['3','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "1.9"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string desc / int asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aaSorting": [['0','desc'], ['3','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "125.5"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string desc / int desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aaSorting": [['0','desc'], ['3','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (3 column) - string asc / int asc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aaSorting": [['0','asc'], ['3','asc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody tr:eq(7) td:eq(1)').html() == "Firefox 1.0"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aaSortingFixed.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aaSortingFixed.js
deleted file mode 100644
index f2c40658..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aaSortingFixed.js
+++ /dev/null
@@ -1,67 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aaSortingFixed" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "No fixed sorting by default",
- null,
- function () {
- return oSettings.aaSortingFixed == null;
- }
- );
-
-
- oTest.fnWaitTest(
- "Fixed sorting on first column (string/asc) with user sorting on second column (string/asc)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aaSortingFixed": [['0','asc']]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; }
- );
-
- oTest.fnWaitTest(
- "Fixed sorting on first column (string/asc) with user sorting on second column (string/desc)",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/asc)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aaSortingFixed": [['3','asc']]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/desc)",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "PSP browser"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.bSearchable.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.bSearchable.js
deleted file mode 100644
index 3c45a4e2..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.bSearchable.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.bSeachable" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Columns are searchable by default",
- function () { oTable.fnFilter("Camino"); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Camino 1.0"; }
- );
-
- /* NOT ACTUALLY GOING TO TEST BSEARCHABLE HERE. Reason being is that it requires the server
- * side to alter it's processing, and this information about columns is not actually sent to
- * the server
- */
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.bSortable.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.bSortable.js
deleted file mode 100644
index 4a555f34..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.bSortable.js
+++ /dev/null
@@ -1,112 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.bSortable" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "All columns are sortable by default",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Can disable sorting from one column",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- null,
- { "bSortable": false },
- null,
- null,
- null
- ]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Firefox 1.0"; }
- );
-
- oTest.fnWaitTest(
- "Disabled column has no sorting class",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") == false; }
- );
-
- oTest.fnWaitTest(
- "Other columns can still sort",
- function () {
- $('#example thead th:eq(4)').click();
- $('#example thead th:eq(4)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 4.0"; }
- );
-
- oTest.fnWaitTest(
- "Disable sorting on multiple columns - no sorting classes",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- null,
- { "bSortable": false },
- null,
- { "bSortable": false },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example thead th:eq(1)').hasClass("sorting") ||
- $('#example thead th:eq(3)').hasClass("sorting")
- return bReturn == false;
- }
- );
-
- oTest.fnWaitTest(
- "Sorting on disabled column 1 has no effect",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Firefox 1.0"; }
- );
-
- oTest.fnWaitTest(
- "Sorting on disabled column 2 has no effect",
- function () {
- $('#example thead th:eq(3)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Firefox 1.0"; }
- );
-
- oTest.fnWaitTest(
- "Second sort on disabled column 2 has no effect",
- function () {
- $('#example thead th:eq(3)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Firefox 1.0"; }
- );
-
- oTest.fnWaitTest(
- "Even with multiple disabled sorting columns other columns can still sort",
- function () {
- $('#example thead th:eq(4)').click();
- $('#example thead th:eq(4)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 4.0"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.bUseRendered.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.bUseRendered.js
deleted file mode 100644
index bdc43851..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.bUseRendered.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.bUseRendered" );
-
-/* bUseRendered is used to alter sorting data, if false then the original data is used for
- * sorting rather than the rendered data
- */
-
-$(document).ready( function () {
- /* Check the default */
- var mTmp = 0;
-
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( mTmp == 0 ) {
- mTmp++;
- return "aaa";
- } else
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default for bUseRendered is true - rendered data is used for sorting",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'aaa'; }
- );
-
- /* Limited to what we can do here as the sorting is done on the server side. So stop here. */
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.bVisible.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.bVisible.js
deleted file mode 100644
index 54daef60..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.bVisible.js
+++ /dev/null
@@ -1,123 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.bVisible" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "All columns are visible by default",
- null,
- function () { return $('#example tbody tr:eq(0) td').length == 5; }
- );
-
- oTest.fnWaitTest(
- "Can hide one column and it removes td column from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- null,
- { "bVisible": false },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 4; }
- );
-
- oTest.fnWaitTest(
- "Can hide one column and it removes thead th column from DOM",
- null,
- function () { return $('#example thead tr:eq(0) th').length == 4; }
- );
-
- oTest.fnWaitTest(
- "The correct thead column has been hidden",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Platform(s)" &&
- jqNodes[2].innerHTML == "Engine version" &&
- jqNodes[3].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "The correct tbody column has been hidden",
- null,
- function () {
- var jqNodes = $('#example tbody tr:eq(0) td');
- var bReturn =
- jqNodes[0].innerHTML == "Gecko" &&
- jqNodes[1].innerHTML == "Win 98+ / OSX.2+" &&
- jqNodes[2].innerHTML == "1.7" &&
- jqNodes[3].innerHTML == "A";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Can hide multiple columns and it removes td column from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- null,
- { "bVisible": false },
- { "bVisible": false },
- null,
- { "bVisible": false }
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 2; }
- );
-
- oTest.fnWaitTest(
- "Multiple hide - removes thead th column from DOM",
- null,
- function () { return $('#example thead tr:eq(0) th').length == 2; }
- );
-
- oTest.fnWaitTest(
- "Multiple hide - the correct thead columns have been hidden",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Engine version"
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Multiple hide - the correct tbody columns have been hidden",
- null,
- function () {
- var jqNodes = $('#example tbody tr:eq(0) td');
- var bReturn =
- jqNodes[0].innerHTML == "Gecko" &&
- jqNodes[1].innerHTML == "1.7"
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.fnRender.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.fnRender.js
deleted file mode 100644
index 1d88083e..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.fnRender.js
+++ /dev/null
@@ -1,162 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.fnRender" );
-
-$(document).ready( function () {
- /* Check the default */
- var mTmp = 0;
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- mTmp++;
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Single column - fnRender is called once for each row",
- null,
- function () { return mTmp == 10; }
- );
-
- oTest.fnWaitTest(
- "Confirm that fnRender passes two arguments with four parameters",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( arguments.length != 2 || typeof a.iDataRow=='undefined' ||
- typeof a.iDataColumn=='undefined' || typeof a.aData=='undefined' ||
- typeof a.mDataProp=='undefined' )
- {
- mTmp = false;
- }
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnWaitTest(
- "fnRender iDataColumn is the column",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( a.iDataColumn != 1 )
- {
- mTmp = false;
- }
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnWaitTest(
- "fnRender aData is data array of correct size",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( a.aData.length != 5 )
- {
- mTmp = false;
- }
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnWaitTest(
- "Passed back data is put into the DOM",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- return 'unittest';
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'unittest'; }
- );
-
- oTest.fnWaitTest(
- "Passed back data is put into the DOM",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- null,
- null,
- { "fnRender": function (a) {
- return 'unittest1';
- } },
- { "fnRender": function (a) {
- return 'unittest2';
- } },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example tbody tr:eq(0) td:eq(2)').html() == 'unittest1' &&
- $('#example tbody tr:eq(0) td:eq(3)').html() == 'unittest2';
- return bReturn; }
- );
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.sClass.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.sClass.js
deleted file mode 100644
index b17be722..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.sClass.js
+++ /dev/null
@@ -1,118 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.sClass" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "By default the test class hasn't been applied to the column (sanity!)",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(2)').hasClass('unittest') == false; }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - first row",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- null,
- null,
- { "sClass": 'unittest' },
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(1) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - third row",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - last row",
- null,
- function () { return $('#example tbody tr:eq(9) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - has not applied to other columns - 1st",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest') == false; }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - has not applied to other columns - 5th",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(4)').hasClass('unittest') == false; }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - seventh row - second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody tr:eq(6) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - has not applied to header",
- null,
- function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - has not applied to footer",
- null,
- function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; }
- );
-
-
- oTest.fnWaitTest(
- "Class defined for multiple columns - first row",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- { "sClass": 'unittest2' },
- null,
- null,
- { "sClass": 'unittest1' },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest2') &&
- $('#example tbody tr:eq(8) td:eq(3)').hasClass('unittest1');
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Class defined for multiple columns - has not applied to other columns - 5th 1",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(4)').hasClass('unittest1') == false; }
- );
-
- oTest.fnWaitTest(
- "Class defined for multiple columns - has not applied to other columns - 5th 2",
- null,
- function () { return $('#example tbody tr:eq(6) td:eq(4)').hasClass('unittest2') == false; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.sName.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.sName.js
deleted file mode 100644
index b4fa4654..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.sName.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.sName" );
-
-/* This has no effect at all in DOM methods - so we just check that it has applied the name */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- null,
- null,
- null,
- { "sName": 'unit test' },
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Names are stored in the columns object",
- null,
- function () { return oSettings.aoColumns[3].sName =="unit test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.sTitle.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.sTitle.js
deleted file mode 100644
index f7e24b6c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.sTitle.js
+++ /dev/null
@@ -1,85 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.sTitle" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "If not given, then the columns titles are empty",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Browser" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Can set a single column title - and others are read from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- null,
- { "sTitle": 'unit test' },
- null,
- null,
- null
- ]
- } );
- },
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "unit test" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Can set multiple column titles",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- null,
- { "sTitle": 'unit test 1' },
- null,
- null,
- { "sTitle": 'unit test 2' }
- ]
- } );
- },
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "unit test 1" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "unit test 2";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.sWidth.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.sWidth.js
deleted file mode 100644
index 6f0da688..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoColumns.sWidth.js
+++ /dev/null
@@ -1,90 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.sWidth" );
-
-/* NOTE - we need to disable the auto width for the majority of these test in order to preform
- * these tests as the auto width will convert the width to a px value. We can do 'non-exact' tests
- * with auto width enabled however to ensure it scales columns as required
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bAutoWidth": false,
- "aoColumns": [
- null,
- { "sWidth": '40%' },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "With auto width disabled the width for one column is appled",
- null,
- function () { return $('#example thead th:eq(1)')[0].style.width == "40%"; }
- );
-
- oTest.fnWaitTest(
- "With auto width disabled the width for one column is appled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bAutoWidth": false,
- "aoColumns": [
- null,
- null,
- { "sWidth": '20%' },
- { "sWidth": '30%' },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example thead th:eq(2)')[0].style.width == "20%" &&
- $('#example thead th:eq(3)')[0].style.width == "30%";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "With auto width, it will make the smallest column the largest with percentage width given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumns": [
- null,
- null,
- null,
- { "sWidth": '40%' },
- null
- ]
- } );
- },
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
-
- if ( a3>a0 && a3>a1 && a3>a2 && a3>a4 )
- return true;
- else
- return false;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoSearchCols.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoSearchCols.js
deleted file mode 100644
index 8dce283d..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/aoSearchCols.js
+++ /dev/null
@@ -1,70 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoSearchCols" );
-
-/* We could be here forever testing this one, so we test a limited subset on a couple of colums */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/filter_col.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default should be to have a empty colums array",
- null,
- function () {
- var bReturn =
- oSettings.aoPreSearchCols[0].sSearch == 0 && !oSettings.aoPreSearchCols[0].bRegex &&
- oSettings.aoPreSearchCols[1].sSearch == 0 && !oSettings.aoPreSearchCols[1].bRegex &&
- oSettings.aoPreSearchCols[2].sSearch == 0 && !oSettings.aoPreSearchCols[2].bRegex &&
- oSettings.aoPreSearchCols[3].sSearch == 0 && !oSettings.aoPreSearchCols[3].bRegex &&
- oSettings.aoPreSearchCols[4].sSearch == 0 && !oSettings.aoPreSearchCols[4].bRegex;
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Search on a single column - no regex statement given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/filter_col.php",
- "aoSearchCols": [
- null,
- { "sSearch": "Mozilla" },
- null,
- { "sSearch": "1" },
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1"; }
- );
-
- oTest.fnWaitTest(
- "Search on two columns - no regex statement given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/filter_col.php",
- "aoSearchCols": [
- null,
- { "sSearch": "Mozilla" },
- null,
- { "sSearch": "1.5" },
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1.5"; }
- );
-
- /* No regex escape searches here - would need to be implemented on the server-side */
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/asStripClasses.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/asStripClasses.js
deleted file mode 100644
index 23da5bcd..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/asStripClasses.js
+++ /dev/null
@@ -1,109 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "asStripeClasses" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
-
- oTest.fnWaitTest(
- "Default row striping is applied",
- null,
- function () {
- return $('#example tbody tr:eq(0)').hasClass('odd') &&
- $('#example tbody tr:eq(1)').hasClass('even') &&
- $('#example tbody tr:eq(2)').hasClass('odd') &&
- $('#example tbody tr:eq(3)').hasClass('even');
- }
- );
-
- oTest.fnWaitTest(
- "Row striping on the second page",
- function () { $('#example_next').click(); },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('odd') &&
- $('#example tbody tr:eq(1)').hasClass('even') &&
- $('#example tbody tr:eq(2)').hasClass('odd') &&
- $('#example tbody tr:eq(3)').hasClass('even');
- }
- );
-
- /* No striping */
- oTest.fnWaitTest(
- "No row striping",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "asStripeClasses": []
- } );
- },
- function () {
- if ( typeof $('#example tbody tr:eq(1)')[0] == 'undefined' )
- {
- /* Use the 'wait for' to allow this to become true */
- return false;
- }
- return $('#example tbody tr:eq(0)')[0].className == "" &&
- $('#example tbody tr:eq(1)')[0].className == "" &&
- $('#example tbody tr:eq(2)')[0].className == "" &&
- $('#example tbody tr:eq(3)')[0].className == "";
- }
- );
-
- /* Custom striping */
- oTest.fnWaitTest(
- "Custom striping [2]",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "asStripeClasses": [ 'test1', 'test2' ]
- } );
- },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test1') &&
- $('#example tbody tr:eq(3)').hasClass('test2');
- }
- );
-
-
- /* long array of striping */
- oTest.fnWaitTest(
- "Custom striping [4]",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "asStripeClasses": [ 'test1', 'test2', 'test3', 'test4' ]
- } );
- },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test3') &&
- $('#example tbody tr:eq(3)').hasClass('test4');
- }
- );
-
- oTest.fnWaitTest(
- "Custom striping is restarted on second page [2]",
- function () { $('#example_next').click(); },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test3') &&
- $('#example tbody tr:eq(3)').hasClass('test4');
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bAutoWidth.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bAutoWidth.js
deleted file mode 100644
index ef97d26c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bAutoWidth.js
+++ /dev/null
@@ -1,145 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bAutoWidth" );
-
-/* It's actually a little tricky to test this. We can't test absolute numbers because
- * different browsers and different platforms will render the width of the columns slightly
- * differently. However, we certainly can test the principle of what should happen (column
- * width doesn't change over pages)
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Auto width is enabled by default",
- null,
- function () { return oSettings.oFeatures.bAutoWidth; }
- );
-
- oTest.fnWaitTest(
- "First column has a width assigned to it",
- null,
- function () { return $('#example thead th:eq(0)').attr('style').match(/width/i); }
- );
-
- /*
- This would seem like a better test - but there appear to be difficulties with tables
- which are bigger (calculated) than there is actually room for. I suspect this is actually
- a bug in datatables
- oTest.fnWaitTest(
- "Check column widths on first page match second page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- console.log( a0, b0, a1, b1, a2, b2, a3, b3 );
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return true;
- else
- return false;
- }
- );
-
- oTest.fnWaitTest(
- "Check column widths on second page match thid page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return true;
- else
- return false;
- }
- );
- */
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Auto width can be disabled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bAutoWidth": false
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bAutoWidth == false; }
- );
-
- oTest.fnWaitTest(
- "First column does not have a width assigned to it",
- null,
- function () { return $('#example thead th:eq(0)').attr('style') == null; }
- );
-
- /*
- oTest.fnWaitTest(
- "Check column widths on first page do not match second page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return false;
- else
- return true;
- }
- );
- */
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Auto width enabled override",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bAutoWidth": true
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bAutoWidth; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bFilter.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bFilter.js
deleted file mode 100644
index e4bf1403..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bFilter.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bFilter" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
-
- oTest.fnWaitTest(
- "Filtering div exists by default",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Fltering can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bFilter": false
- } );
- },
- function () { return document.getElementById('example_filter') == null; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Filtering enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bFilter": true
- } );
- },
- function () { return document.getElementById('example_filter') != null; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bInfiniteScroll.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bInfiniteScroll.js
deleted file mode 100644
index 4cafecbe..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bInfiniteScroll.js
+++ /dev/null
@@ -1,168 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bInfiniteScroll" );
-
-
-$(document).ready( function () {
- var oTable = $('#example').dataTable( {
- "bScrollInfinite": true,
- "sScrollY": "200px",
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
-
- oTest.fnWaitTest(
- "10 rows by default",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Info",
- null,
- function () { return $('#example_info').html() == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Get nodes",
- null,
- function () { return $('#example tbody>tr').length == 10; }
- );
-
- oTest.fnTest(
- "Get nodes function",
- null,
- function () { return $('#example').dataTable().fnGetNodes().length == 10; }
- );
-
- oTest.fnWaitTest(
- "Scroll on 20px adds 10 rows",
- function () { $('div.dataTables_scrollBody').scrollTop(20); },
- function () { return $('#example tbody tr').length == 20; }
- );
-
- oTest.fnTest(
- "Info after 20px scroll",
- null,
- function () { return $('#example_info').html() == "Showing 1 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Get nodes after 20px scroll",
- null,
- function () { return $('#example tbody>tr').length == 20; }
- );
-
- oTest.fnTest(
- "Get nodes function after 20px scroll",
- null,
- function () { return $('#example').dataTable().fnGetNodes().length == 20; }
- );
-
- oTest.fnWaitTest(
- "Scroll on 10px more results in the same number of rows",
- function () { $('div.dataTables_scrollBody').scrollTop(30); },
- function () { return $('#example tbody tr').length == 20; }
- );
-
- oTest.fnTest(
- "Info after 10 more px scroll",
- null,
- function () { return $('#example_info').html() == "Showing 1 to 20 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Scroll to 280px adds another 10 rows",
- function () { $('div.dataTables_scrollBody').scrollTop(280); },
- function () { return $('#example tbody tr').length == 30; }
- );
-
- oTest.fnTest(
- "Info after 240px scroll",
- null,
- function () { return $('#example_info').html() == "Showing 1 to 30 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Get nodes after 240px scroll",
- null,
- function () { return $('#example tbody>tr').length == 30; }
- );
-
- oTest.fnTest(
- "Get nodes function after 240px scroll",
- null,
- function () { return $('#example').dataTable().fnGetNodes().length == 30; }
- );
-
- oTest.fnWaitTest(
- "Filtering will drop back to 10 rows",
- function () { oTable.fnFilter('gec') },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Info after filtering",
- null,
- function () { return $('#example_info').html() == "Showing 1 to 10 of 20 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Get nodes after filtering",
- null,
- function () { return $('#example tbody>tr').length == 10; }
- );
-
- oTest.fnTest(
- "Get nodes function after filtering",
- null,
- function () { return $('#example').dataTable().fnGetNodes().length == 10; }
- );
-
- oTest.fnWaitTest(
- "Scroll after filtering adds 10",
- function () { $('div.dataTables_scrollBody').scrollTop(20); },
- function () { return $('#example tbody tr').length == 20; }
- );
-
- oTest.fnWaitTest(
- "Get nodes after filtering",
- null,
- function () { return $('#example tbody>tr').length == 20; }
- );
-
- oTest.fnWaitTest(
- "Get nodes function after filtering",
- null,
- function () { return $('#example').dataTable().fnGetNodes().length == 20; }
- );
-
- oTest.fnWaitTest(
- "Sorting will drop back to 10 rows",
- function () {
- $('div.dataTables_scrollBody').scrollTop(0);
- oTable.fnSort([[1,'asc']])
- },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnWaitTest(
- "Scroll after sorting adds 10",
- function () { $('div.dataTables_scrollBody').scrollTop(20); },
- function () { return $('#example tbody tr').length == 20; }
- );
-
- oTest.fnTest(
- "Get nodes after scrolling",
- null,
- function () { return $('#example tbody>tr').length == 20; }
- );
-
- oTest.fnTest(
- "Get nodes function after scrolling",
- null,
- function () { return $('#example').dataTable().fnGetNodes().length == 20; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bInfo.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bInfo.js
deleted file mode 100644
index de453b3a..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bInfo.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bInfo" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
-
- oTest.fnWaitTest(
- "Info div exists by default",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Info can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bInfo": false
- } );
- },
- function () { return document.getElementById('example_info') == null; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Info enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bInfo": true
- } );
- },
- function () { return document.getElementById('example_info') != null; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bLengthChange.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bLengthChange.js
deleted file mode 100644
index 8e0561c3..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bLengthChange.js
+++ /dev/null
@@ -1,78 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bLengthChange" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
-
- oTest.fnWaitTest(
- "Length div exists by default",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnWaitTest(
- "Four default options",
- null,
- function () { return $("select[name=example_length] option").length == 4; }
- );
-
- oTest.fnWaitTest(
- "Default options",
- null,
- function () {
- var opts = $("select[name='example_length'] option");
- return opts[0].getAttribute('value') == 10 && opts[1].getAttribute('value') == 25 &&
- opts[2].getAttribute('value') == 50 && opts[3].getAttribute('value') == 100;
- }
- );
-
- oTest.fnWaitTest(
- "Info takes length into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Change length can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bLengthChange": false
- } );
- },
- function () { return document.getElementById('example_length') == null; }
- );
-
- oTest.fnWaitTest(
- "Information takes length disabled into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Length change enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bLengthChange": true
- } );
- },
- function () { return document.getElementById('example_length') != null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bPaginate.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bPaginate.js
deleted file mode 100644
index 863dc338..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bPaginate.js
+++ /dev/null
@@ -1,62 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bPaginate" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
-
- oTest.fnWaitTest(
- "Pagiantion div exists by default",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnWaitTest(
- "Information div takes paging into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Pagiantion can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bPaginate": false
- } );
- },
- function () { return document.getElementById('example_paginate') == null; }
- );
-
- oTest.fnWaitTest(
- "Information div takes paging disabled into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 57 of 57 entries"; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Pagiantion enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bPaginate": true
- } );
- },
- function () { return document.getElementById('example_paginate') != null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bProcessing.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bProcessing.js
deleted file mode 100644
index f47124bb..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bProcessing.js
+++ /dev/null
@@ -1,106 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bProcessing" );
-
-/* It's actually a bit hard to set this one due to the fact that it will only be shown
- * when DataTables is doing some kind of processing. The server-side processing is a bit
- * better to test this than here - so we just the interal functions to enable it and check
- * that it is available
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Processing is off by default",
- null,
- function () { return oSettings.oFeatures.bProcessing == false; }
- );
-
- oTest.fnWaitTest(
- "Processing div is not in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnWaitTest(
- "Processing div cannot be shown",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnWaitTest(
- "Processing div cannot be hidden",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Processing can be enabled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bProcessing": true
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bProcessing == true; }
- );
-
- oTest.fnWaitTest(
- "Processing div is in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing'); }
- );
-
- oTest.fnWaitTest(
- "Processing div is hidden by default",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing').style.visibility = "hidden"; }
- );
-
- oTest.fnWaitTest(
- "Processing div can be shown",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing').style.visibility = "visible"; }
- );
-
- oTest.fnWaitTest(
- "Processing div can be hidden",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); },
- function () { return document.getElementById('example_processing').style.visibility = "hidden"; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Processing disabled override",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bProcessing": false
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bProcessing == false; }
- );
-
- oTest.fnWaitTest(
- "Processing div is not in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bServerSide.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bServerSide.js
deleted file mode 100644
index 1dd42ae3..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bServerSide.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bServerSide" );
-
-/* All the other scripts blast the ssp processing */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Server side can be set to on",
- null,
- function () { return oSettings.oFeatures.bServerSide == true; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bSort.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bSort.js
deleted file mode 100644
index 37863066..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bSort.js
+++ /dev/null
@@ -1,102 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bSort" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
-
- oTest.fnWaitTest(
- "Sorting is on by default",
- null,
- function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.0"; }
- );
-
- oTest.fnWaitTest(
- "Sorting Asc by default class applied",
- null,
- function () { return $('#example thead th:eq(0)').hasClass("sorting_asc"); }
- );
-
- oTest.fnWaitTest(
- "Click on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Sorting class removed from first column",
- null,
- function () { return $('#example thead th:eq(0)').hasClass("sorting_asc") != true; }
- );
-
- oTest.fnWaitTest(
- "Sorting asc class applied to second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc"); }
- );
-
- oTest.fnWaitTest(
- "Reverse on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Sorting acs class removed from second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") != true; }
- );
-
- oTest.fnWaitTest(
- "Sorting desc class applied to second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_desc"); }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Pagiantion can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bSort": false
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- oTest.fnWaitTest(
- "Click on second column has no effect",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- oTest.fnWaitTest(
- "Reverse on second column has no effect",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Sorting enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bSort": true
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.0"; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bSortClasses.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bSortClasses.js
deleted file mode 100644
index 9130afee..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/bSortClasses.js
+++ /dev/null
@@ -1,135 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bSortClasses" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
-
- oTest.fnWaitTest(
- "Sorting classes are applied by default",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); }
- );
-
- oTest.fnWaitTest(
- "Sorting classes are applied to all required cells",
- null,
- function () { return $('#example tbody tr:eq(7) td:eq(0)').hasClass('sorting_1'); }
- );
-
- oTest.fnWaitTest(
- "Sorting classes are not applied to non-sorting columns",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_1') == false; }
- );
-
- oTest.fnWaitTest(
- "Sorting multi-column - add column 1",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2');
- }
- );
-
- oTest.fnWaitTest(
- "Sorting multi-column - add column 2",
- function () {
- oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3');
- }
- );
-
- oTest.fnWaitTest(
- "Sorting multi-column - add column 3",
- function () {
- oDispacher.click( $('#example thead th:eq(3)')[0], { 'shift': true } );
- },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') &&
- $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3');
- }
- );
-
- oTest.fnWaitTest(
- "Remove sorting classes on single column sort",
- function () {
- $('#example thead th:eq(4)').click();
- },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false &&
- $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3') == false;
- }
- );
-
- oTest.fnWaitTest(
- "Sorting class 1 was added",
- null,
- function () { return $('#example tbody tr:eq(1) td:eq(4)').hasClass('sorting_1'); }
- );
-
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Sorting classes can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bSortClasses": false
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false; }
- );
-
- oTest.fnWaitTest(
- "Sorting classes disabled - add column 1 - no effect",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false;
- }
- );
-
- oTest.fnWaitTest(
- "Sorting classes disabled - add column 2 - no effect",
- function () {
- oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false;
- }
- );
-
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Sorting classes enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bSortClasses": true
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnCreatedCell.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnCreatedCell.js
deleted file mode 100644
index 04501e08..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnCreatedCell.js
+++ /dev/null
@@ -1,190 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnCreatedCell tests" );
-
-$(document).ready( function () {
- var tmp = 0;
- var complete = false;
-
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumnDefs": [ {
- fnCreatedCell: function () {
- tmp++;
- },
- "aTargets": ["_all"]
- } ]
- } );
-
- oTest.fnWaitTest(
- "Cell created is called once for each cell on init",
- null,
- function () { return tmp===50; }
- );
-
- oTest.fnWaitTest(
- "Created is called back on other draws",
- function () { $('#example th:eq(1)').click(); },
- function () { return tmp===100; }
- );
-
- oTest.fnWaitTest(
- "Four arguments for the function",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments.length !== 4 ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ],
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "First argument is a TD element",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[0].nodeName !== "TD" ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ],
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "Second argument is the HTML value",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[1] != $('td').html() ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ],
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "Third argument is the data array",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[2].length !== 5 ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ],
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "Fourth argument is the data source for the row",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[2] !== this.fnSettings().aoData[ arguments[2] ]._aData ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ],
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "Fifth argument is the the col index",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "aoColumnDefs": [ {
- fnCreatedRow: function () {
- if ( arguments[1] != $('td:eq('+arguments[4]+')', arguments[0].parentNode).html() ) {
- tmp = false;
- }
- },
- "aTargets": ["_all"]
- } ],
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnCreatedRow.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnCreatedRow.js
deleted file mode 100644
index 1baeaac2..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnCreatedRow.js
+++ /dev/null
@@ -1,148 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnCreatedRow tests" );
-
-$(document).ready( function () {
- var tmp = 0;
- var complete = false;
-
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- fnCreatedRow: function () {
- tmp++;
- }
- } );
-
- oTest.fnWaitTest(
- "Row created is called once for each row on init",
- null,
- function () { return tmp===10; }
- );
-
- oTest.fnWaitTest(
- "Created is called back on other draws",
- function () { $('#example th:eq(1)').click(); },
- function () { return tmp===20; }
- );
-
- oTest.fnWaitTest(
- "Three arguments for the function",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- fnCreatedRow: function () {
- if ( arguments.length !== 3 ) {
- tmp = false;
- }
- },
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "First argument is a TR element",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- fnCreatedRow: function () {
- if ( arguments[0].nodeName !== "TR" ) {
- tmp = false;
- }
- },
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "Second argument is an array with 5 elements",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- fnCreatedRow: function () {
- if ( arguments[1].length !== 5 ) {
- tmp = false;
- }
- },
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "Third argument is the data source for the row",
- function () {
- oSession.fnRestore();
- tmp = true;
- complete = false;
-
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- fnCreatedRow: function () {
- if ( arguments[1] !== this.fnSettings().aoData[ arguments[2] ]._aData ) {
- tmp = false;
- }
- },
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
- oTest.fnWaitTest(
- "TR element is tied to the correct data",
- function () {
- oSession.fnRestore();
- tmp = false;
- complete = false;
-
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- fnCreatedRow: function (tr, data, index) {
- if ( data[1] === "Firefox 1.0" ) {
- if ( $('td:eq(3)', tr).html() == "1.7" ) {
- tmp = true;
- }
- }
- },
- fnInitComplete: function () {
- complete = true;
- }
- } );
- },
- function () { return (tmp && complete); }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnDrawCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnDrawCallback.js
deleted file mode 100644
index 8936c161..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnDrawCallback.js
+++ /dev/null
@@ -1,89 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnDrawCallback" );
-
-/* Fairly boring function compared to the others! */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnWaitTest(
- "Default should be null",
- null,
- function () { return oSettings.fnDrawCallback == null; }
- );
-
-
- oTest.fnWaitTest(
- "One argument passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnDrawCallback": function ( ) {
- mPass = arguments.length;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
-
- oTest.fnWaitTest(
- "That one argument is the settings object",
- function () {
- oSession.fnRestore();
-
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnDrawCallback": function ( oSettings ) {
- mPass = oSettings;
- }
- } );
- },
- function () { return oTable.fnSettings() == mPass; }
- );
-
-
- oTest.fnWaitTest(
- "fnRowCallback called once on first draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnDrawCallback": function ( ) {
- mPass++;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
- oTest.fnWaitTest(
- "fnRowCallback called once on each draw there after as well",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return mPass > 1; }
- );
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnHeaderCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnHeaderCallback.js
deleted file mode 100644
index 8c9dc076..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnHeaderCallback.js
+++ /dev/null
@@ -1,191 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnHeaderCallback" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnWaitTest(
- "Default should be null",
- null,
- function () { return oSettings.fnHeaderCallback == null; }
- );
-
-
- oTest.fnWaitTest(
- "Five arguments passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnHeaderCallback": function ( ) {
- mPass = arguments.length;
- }
- } );
- },
- function () { return mPass == 5; }
- );
-
-
- oTest.fnWaitTest(
- "fnRowCallback called once per draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- mPass++;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
- oTest.fnWaitTest(
- "fnRowCallback called on paging (i.e. another draw)",
- function () { $('#example_next').click(); },
- function () { return mPass == 2; }
- );
-
-
- oTest.fnWaitTest(
- "fnRowCallback allows us to alter row information",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records";
- }
- } );
- },
- function () { return $('#example thead th:eq(0)').html() == "Displaying 10 records"; }
- );
-
-
- oTest.fnWaitTest(
- "iStart correct on first page",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iStart != 0 )
- {
- mPass = false;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnWaitTest(
- "iStart correct on second page",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iStart == 0 )
- {
- mPass = true;
- }
- },
- "fnInitComplete": function () {
- $('#example_next').click();
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnWaitTest(
- "iEnd correct on second page",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iEnd == 10 )
- {
- mPass = true;
- }
- },
- "fnInitComplete": function () {
- $('#example_next').click();
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnWaitTest(
- "aiDisplay length is full data when not filtered",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( aiDisplay.length == 10 )
- {
- mPass = true;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnWaitTest(
- "aiDisplay length is 9 when filtering on 'Mozilla'",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( aiDisplay.length == 9 )
- {
- mPass = true;
- }
- }
- } );
- oTable.fnFilter( "Mozilla" );
- },
- function () { return mPass; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnInitComplete.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnInitComplete.js
deleted file mode 100644
index 655b50ec..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnInitComplete.js
+++ /dev/null
@@ -1,89 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnInitComplete" );
-
-/* Fairly boring function compared to the others! */
-
-$(document).ready( function () {
- oTest.fnWaitTest(
- "Two arguments passed",
- function () {
-
- mPass = -1;
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnInitComplete": function ( ) {
- mPass = arguments.length===2 && arguments[1]===undefined;
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnWaitTest(
- "That one argument is the settings object",
- function () {
- oSession.fnRestore();
-
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnInitComplete": function ( oSettings ) {
- mPass = oSettings;
- }
- } );
- },
- function () { console.log( oTable.fnSettings(), mPass );return oTable.fnSettings() === mPass; }
- );
-
-
- oTest.fnWaitTest(
- "fnInitComplete called once on first draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnInitComplete": function ( ) {
- mPass++;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
- oTest.fnWaitTest(
- "fnInitComplete never called there after",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return mPass == 1; }
- );
-
-
- oTest.fnWaitTest(
- "10 rows in the table on complete",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnInitComplete": function ( ) {
- mPass = $('#example tbody tr').length;
- }
- } );
- },
- function () { return mPass == 10; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnRowCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnRowCallback.js
deleted file mode 100644
index d175cfed..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/fnRowCallback.js
+++ /dev/null
@@ -1,118 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnRowCallback" );
-
-/* Note - fnRowCallback MUST return the first arguments (modified or not) */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnWaitTest(
- "Default should be null",
- null,
- function () { return oSettings.fnRowCallback == null; }
- );
-
-
- oTest.fnWaitTest(
- "Four arguments passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnRowCallback": function ( nTr ) {
- mPass = arguments.length;
- return nTr;
- }
- } );
- },
- function () { return mPass == 4; }
- );
-
-
- oTest.fnWaitTest(
- "fnRowCallback called once for each drawn row",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- mPass++;
- return nTr;
- }
- } );
- },
- function () { return mPass == 10; }
- );
-
- oTest.fnWaitTest(
- "fnRowCallback allows us to alter row information",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- $(nTr).addClass('unit_test');
- return nTr;
- }
- } );
- },
- function () { return $('#example tbody tr:eq(1)').hasClass('unit_test'); }
- );
-
- oTest.fnWaitTest(
- "Data array has length matching columns",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- if ( asData.length != 5 )
- mPass = false;
- return nTr;
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnWaitTest(
- "Data array has length matching columns",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- var iCount = 0;
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- if ( iCount != iDrawIndex )
- mPass = false;
- iCount++;
- return nTr;
- }
- } );
- },
- function () { return mPass; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/iDeferLoading.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/iDeferLoading.js
deleted file mode 100644
index 7a9f2ba8..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/iDeferLoading.js
+++ /dev/null
@@ -1,95 +0,0 @@
-// DATA_TEMPLATE: deferred_table
-/*
- */
-oTest.fnStart( "Defer loading tests" );
-
-$(document).ready( function () {
- var gotServerData = false;
-
- $('#example').dataTable( {
- "iDeferLoading": 57,
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "fnServerData": function (url, data, fn) {
- $.ajax( {
- "url": url,
- "data": data,
- "success": function(json) {
- gotServerData = true;
- fn( json );
- },
- "dataType": "json",
- "cache": false
- } );
- }
- } );
-
- oTest.fnWaitTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnWaitTest(
- "No request to the server yet",
- null,
- function () { return !gotServerData; }
- );
-
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Initial data order retained",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnWaitTest(
- "Initial data order retained 2",
- null,
- function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.0"; }
- );
-
- oTest.fnWaitTest(
- "Still no request to the server yet",
- null,
- function () { return !gotServerData; }
- );
-
- oTest.fnWaitTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Now we've had a request",
- null,
- function () { return gotServerData; }
- );
-
- oTest.fnTest(
- "Information after sort",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/iDisplayLength.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/iDisplayLength.js
deleted file mode 100644
index 7a31f7df..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/iDisplayLength.js
+++ /dev/null
@@ -1,85 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "iDisplayLength" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
-
- oTest.fnWaitTest(
- "Default length is ten",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnWaitTest(
- "Select menu shows 10",
- null,
- function () { return $('#example_length select').val() == 10; }
- );
-
-
- oTest.fnWaitTest(
- "Set initial length to 25",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "iDisplayLength": 25
- } );
- },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnWaitTest(
- "Select menu shows 25",
- null,
- function () { return $('#example_length select').val() == 25; }
- );
-
-
- oTest.fnWaitTest(
- "Set initial length to 100",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "iDisplayLength": 100
- } );
- },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnWaitTest(
- "Select menu shows 25",
- null,
- function () { return $('#example_length select').val() == 100; }
- );
-
-
- oTest.fnWaitTest(
- "Set initial length to 23 (unknown select menu length)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "iDisplayLength": 23
- } );
- },
- function () { return $('#example tbody tr').length == 23; }
- );
-
- oTest.fnWaitTest(
- "Select menu shows 10 (since 23 is unknow)",
- null,
- function () { return $('#example_length select').val() == 10; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.oPaginate.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.oPaginate.js
deleted file mode 100644
index c7fc44d4..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.oPaginate.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.oPaginate" );
-
-/* Note that the paging language information only has relevence in full numbers */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "sPaginationType": "full_numbers"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "oLanguage.oPaginate defaults",
- null,
- function () {
- var bReturn =
- oSettings.oLanguage.oPaginate.sFirst == "First" &&
- oSettings.oLanguage.oPaginate.sPrevious == "Previous" &&
- oSettings.oLanguage.oPaginate.sNext == "Next" &&
- oSettings.oLanguage.oPaginate.sLast == "Last";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "oLanguage.oPaginate defaults are in the DOM",
- null,
- function () {
- var bReturn =
- $('#example_paginate .first').html() == "First" &&
- $('#example_paginate .previous').html() == "Previous" &&
- $('#example_paginate .next').html() == "Next" &&
- $('#example_paginate .last').html() == "Last";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "oLanguage.oPaginate can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "sPaginationType": "full_numbers",
- "oLanguage": {
- "oPaginate": {
- "sFirst": "unit1",
- "sPrevious": "test2",
- "sNext": "unit3",
- "sLast": "test4"
- }
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var bReturn =
- oSettings.oLanguage.oPaginate.sFirst == "unit1" &&
- oSettings.oLanguage.oPaginate.sPrevious == "test2" &&
- oSettings.oLanguage.oPaginate.sNext == "unit3" &&
- oSettings.oLanguage.oPaginate.sLast == "test4";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "oLanguage.oPaginate definitions are in the DOM",
- null,
- function () {
- var bReturn =
- $('#example_paginate .first').html() == "unit1" &&
- $('#example_paginate .previous').html() == "test2" &&
- $('#example_paginate .next').html() == "unit3" &&
- $('#example_paginate .last').html() == "test4";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sInfo.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sInfo.js
deleted file mode 100644
index 5f77e9de..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sInfo.js
+++ /dev/null
@@ -1,124 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sInfo" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Info language is 'Showing _START_ to _END_ of _TOTAL_ entries' by default",
- null,
- function () { return oSettings.oLanguage.sInfo == "Showing _START_ to _END_ of _TOTAL_ entries"; }
- );
-
- oTest.fnTest(
- "Info language default is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; }
- );
-
-
- oTest.fnWaitTest(
- "Info language can be defined - without any macros",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sInfo": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sInfo == "unit test"; }
- );
-
- oTest.fnTest(
- "Info language definition is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "unit test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macro _START_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sInfo": "unit _START_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macro _END_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sInfo": "unit _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 10 test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macro _TOTAL_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sInfo": "unit _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 57 test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macros _START_ and _END_",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sInfo": "unit _START_ _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 10 test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macros _START_, _END_ and _TOTAL_",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sInfo": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 10 57 test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoEmpty.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoEmpty.js
deleted file mode 100644
index a4b82c0d..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoEmpty.js
+++ /dev/null
@@ -1,82 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sInfoEmpty" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Info empty language is 'Showing 0 to 0 of 0 entries' by default",
- function () { oTable.fnFilter("nothinghere"); },
- function () { return oSettings.oLanguage.sInfoEmpty == "Showing 0 to 0 of 0 entries"; }
- );
-
- oTest.fnWaitTest(
- "Info empty language default is in the DOM",
- null,
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "Showing 0 to 0 of 0 entries";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Info empty language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sInfoEmpty": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- oTable.fnFilter("nothinghere");
- },
- function () { return oSettings.oLanguage.sInfoEmpty == "unit test"; }
- );
-
- oTest.fnWaitTest(
- "Info empty language default is in the DOM",
- null,
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "unit test";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Macro's replaced",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sInfoEmpty": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- oTable.fnFilter("nothinghere");
- },
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "unit 1 0 0 test";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoPostFix.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoPostFix.js
deleted file mode 100644
index 3f2482d0..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoPostFix.js
+++ /dev/null
@@ -1,82 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sInfoPostFix" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Info post fix language is '' (blank) by default",
- null,
- function () { return oSettings.oLanguage.sInfoPostFix == ""; }
- );
-
- oTest.fnTest(
- "Width no post fix, the basic info shows",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; }
- );
-
-
- oTest.fnWaitTest(
- "Info post fix language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sInfoPostFix": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sInfoPostFix == "unit test"; }
- );
-
- oTest.fnTest(
- "Info empty language default is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit test"; }
- );
-
-
- oTest.fnWaitTest(
- "Macros have no effect in the post fix",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sInfoPostFix": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit _START_ _END_ _TOTAL_ test"; }
- );
-
-
- oTest.fnWaitTest(
- "Post fix is applied after fintering info",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sInfoPostFix": "unit test"
- }
- } );
- oTable.fnFilter("nothinghere");
- },
- function () { return document.getElementById('example_info').innerHTML = "Showing 0 to 0 of 0 entries unit (filtered from 57 total entries) test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sLengthMenu.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sLengthMenu.js
deleted file mode 100644
index 6740bcb5..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sLengthMenu.js
+++ /dev/null
@@ -1,115 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sLengthMenu" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Menu language is 'Show _MENU_ entries' by default",
- null,
- function () { return oSettings.oLanguage.sLengthMenu == "Show _MENU_ entries"; }
- );
-
- oTest.fnTest(
- "_MENU_ macro is replaced by select menu in DOM",
- null,
- function () { return $('select', oSettings.aanFeatures.l[0]).length == 1 }
- );
-
- oTest.fnTest(
- "A label input is used",
- null,
- function () { return $('label', oSettings.aanFeatures.l[0]).length == 1 }
- );
-
- oTest.fnTest(
- "Default is put into DOM",
- null,
- function () {
- var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes;
- var bReturn =
- anChildren[0].nodeValue == "Show " &&
- anChildren[2].nodeValue == " entries";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Menu length language can be defined - no _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sLengthMenu": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sLengthMenu == "unit test"; }
- );
-
- oTest.fnTest(
- "Menu length language definition is in the DOM",
- null,
- function () {
- return $('label', oSettings.aanFeatures.l[0]).text() == "unit test";
- }
- );
-
-
- oTest.fnWaitTest(
- "Menu length language can be defined - with _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sLengthMenu": "unit _MENU_ test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes;
- var bReturn =
- anChildren[0].nodeValue == "unit " &&
- anChildren[2].nodeValue == " test";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Only the _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sLengthMenu": "_MENU_"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var anChildren = oSettings.aanFeatures.l[0].childNodes;
- var bReturn =
- anChildren.length == 1 &&
- $('select', oSettings.aanFeatures.l[0]).length == 1;
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sProcessing.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sProcessing.js
deleted file mode 100644
index fa990668..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sProcessing.js
+++ /dev/null
@@ -1,51 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sProcessing" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bProcessing": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Processing language is 'Processing...' by default",
- null,
- function () { return oSettings.oLanguage.sProcessing == "Processing..."; }
- );
-
- oTest.fnTest(
- "Processing language default is in the DOM",
- null,
- function () { return document.getElementById('example_processing').innerHTML = "Processing..."; }
- );
-
-
- oTest.fnWaitTest(
- "Processing language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "bProcessing": true,
- "oLanguage": {
- "sProcessing": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sProcessing == "unit test"; }
- );
-
- oTest.fnTest(
- "Processing language definition is in the DOM",
- null,
- function () { return document.getElementById('example_processing').innerHTML = "unit test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sSearch.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sSearch.js
deleted file mode 100644
index 0d58836b..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sSearch.js
+++ /dev/null
@@ -1,73 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sSearch" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Search language is 'Search:' by default",
- null,
- function () { return oSettings.oLanguage.sSearch == "Search:"; }
- );
-
- oTest.fnTest(
- "A label input is used",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).length == 1 }
- );
-
- oTest.fnTest(
- "Search language default is in the DOM",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).text()
- == "Search: "; }
- );
-
-
- oTest.fnWaitTest(
- "Search language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sSearch": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sSearch == "unit test"; }
- );
-
- oTest.fnTest(
- "Info language definition is in the DOM",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).text().indexOf('unit test') !== -1; }
- );
-
-
- oTest.fnWaitTest(
- "Blank search has no space (separator) inserted",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sSearch": ""
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return document.getElementById('example_filter').childNodes.length == 1; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sUrl.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sUrl.js
deleted file mode 100644
index d15b0330..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sUrl.js
+++ /dev/null
@@ -1,64 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sUrl" );
-
-/* Note that we only test the internal storage of language information pulled form a file here
- * as the other language tests will check it goes into the DOM correctly
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "sUrl is blank by default",
- null,
- function () { return oSettings.oLanguage.sUrl == ""; }
- );
-
-
- oTest.fnWaitTest(
- "Loading of German file loads language information",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sUrl": "../../../examples/examples_support/de_DE.txt"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var bReturn =
- oSettings.oLanguage.sProcessing == "Bitte warten..." &&
- oSettings.oLanguage.sLengthMenu == "_MENU_ Einträge anzeigen" &&
- oSettings.oLanguage.sZeroRecords == "Keine Einträge vorhanden." &&
- oSettings.oLanguage.sInfo == "_START_ bis _END_ von _TOTAL_ Einträgen" &&
- oSettings.oLanguage.sInfoEmpty == "0 bis 0 von 0 Einträgen" &&
- oSettings.oLanguage.sInfoFiltered == "(gefiltert von _MAX_ Einträgen)" &&
- oSettings.oLanguage.sInfoPostFix == "" &&
- oSettings.oLanguage.sSearch == "Suchen" &&
- oSettings.oLanguage.oPaginate.sFirst == "Erster" &&
- oSettings.oLanguage.oPaginate.sPrevious == "Zurück" &&
- oSettings.oLanguage.oPaginate.sNext == "Nächster" &&
- oSettings.oLanguage.oPaginate.sLast == "Letzter";
-
- return bReturn;
- }
- );
-
- /* One DOM check just to ensure that they go into the DOM */
- oTest.fnTest(
- "Loaded language goes into the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "1 bis 10 von 57 Einträgen"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sZeroRecords.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sZeroRecords.js
deleted file mode 100644
index 78668efe..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oLanguage.sZeroRecords.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sZeroRecords" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Zero records language is 'No matching records found' by default",
- null,
- function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; }
- );
-
- oTest.fnWaitTest(
- "Text is shown when empty table (after filtering)",
- function () { oTable.fnFilter('nothinghere'); },
- function () {
- if ( $('#example tbody tr td').length == 0 )
- return false;
- return $('#example tbody tr td')[0].innerHTML == "No matching records found";
- }
- );
-
-
-
- oTest.fnWaitTest(
- "Zero records language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oLanguage": {
- "sZeroRecords": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sZeroRecords == "unit test"; }
- );
-
- oTest.fnWaitTest(
- "Text is shown when empty table (after filtering)",
- function () { oTable.fnFilter('nothinghere2'); },
- function () {
- if ( $('#example tbody tr td').length == 0 )
- return false;
- return $('#example tbody tr td')[0].innerHTML == "unit test"
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oSearch.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oSearch.js
deleted file mode 100644
index 8d8b0626..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/oSearch.js
+++ /dev/null
@@ -1,100 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oSearch" );
-
-/* Note with my server-side scripts the regex option has no effect - this just runs that down */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default values should be blank",
- null,
- function () {
- var bReturn = oSettings.oPreviousSearch.sSearch == "" &&
- !oSettings.oPreviousSearch.bRegex;
- return bReturn;
- }
- );
-
- /* This test might be considered iffy since the full object isn't given, but it's reasonable to
- * expect DataTables to cope with this. It should just assumine regex false
- */
- oTest.fnWaitTest(
- "Search term only in object",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oSearch": {
- "sSearch": "Mozilla"
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1"; }
- );
-
- oTest.fnWaitTest(
- "New search will kill old one",
- function () {
- oTable.fnFilter("Opera");
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Opera 7.0"; }
- );
-
- oTest.fnWaitTest(
- "Search plain text term and escape regex true",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oSearch": {
- "sSearch": "DS",
- "bRegex": false
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Nintendo DS browser"; }
- );
-
- oTest.fnWaitTest(
- "Search plain text term and escape regex false",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oSearch": {
- "sSearch": "Opera",
- "bRegex": true
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Opera 7.0"; }
- );
-
- oTest.fnWaitTest(
- "Search regex text term and escape regex true",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "oSearch": {
- "sSearch": "1.*",
- "bRegex": false
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/sAjaxDataProp.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/sAjaxDataProp.js
deleted file mode 100644
index e0996103..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/sAjaxDataProp.js
+++ /dev/null
@@ -1,146 +0,0 @@
-// DATA_TEMPLATE: empty_table
-/*
- * NOTE: There are some differences in this zero config script for server-side
- * processing compared to the other data sources. The main reason for this is the
- * difference in how the server-side processing does it's filtering. Also the
- * sorting state is always reset on each draw.
- */
-oTest.fnStart( "Custom data property in returned Ajax" );
-
-$(document).ready( function () {
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/custom_data_property.php",
- "sAjaxDataProp": "test"
- } );
-
- oTest.fnWaitTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnWaitTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnWaitTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnWaitTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnWaitTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnWaitTest(
- "Sorting multi-column - sorting first column only",
- function () {
- $('#example thead th:eq(0)').click(); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Firefox 1.0"; return b; }
- );
-
- /* Basic paging */
- oTest.fnWaitTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Mozilla 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.0"; }
- );
-
- oTest.fnWaitTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.0"; }
- );
-
- /* Changing length */
- oTest.fnWaitTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnWaitTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnWaitTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnWaitTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnWaitTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnWaitTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/sAjaxSource.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/sAjaxSource.js
deleted file mode 100644
index bd6b0421..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/sAjaxSource.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "sAjaxSource" );
-
-/* Sanitfy check really - all the other tests blast this */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Server side is off by default",
- null,
- function () {
- return oSettings.sAjaxSource == "../../../examples/server_side/scripts/server_processing.php";
- }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/sDom.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/sDom.js
deleted file mode 100644
index 5ae7f153..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/sDom.js
+++ /dev/null
@@ -1,269 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "sDom" );
-
-/* This is going to be brutal on the browser! There is a lot that can be tested here... */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default DOM varaible",
- null,
- function () { return oSettings.sDom == "lfrtip"; }
- );
-
- oTest.fnWaitTest(
- "Default DOM in document",
- null,
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- nNodes[4] == nInfo &&
- nNodes[5] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check example 1 in code propagates",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "sDom": '<"wrapper"flipt>'
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.sDom == '<"wrapper"flipt>'; }
- );
-
- oTest.fnWaitTest(
- "Check example 1 in DOM",
- null,
- function () {
- var jqNodes = $('#demo div, #demo table');
- var nNodes = [];
-
- /* Strip the paging nodes */
- for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ )
- {
- if ( jqNodes[i].getAttribute('id') != "example_previous" &&
- jqNodes[i].getAttribute('id') != "example_next" )
- {
- nNodes.push( jqNodes[i] );
- }
- }
-
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
- var nCustomWrapper = $('div.wrapper')[0];
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nCustomWrapper &&
- nNodes[2] == nFilter &&
- nNodes[3] == nLength &&
- nNodes[4] == nInfo &&
- nNodes[5] == nPaging &&
- nNodes[6] == nTable;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check example 2 in DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "sDom": '<lf<t>ip>'
- } );
- },
- function () {
- var jqNodes = $('#demo div, #demo table');
- var nNodes = [];
- var nCustomWrappers = []
-
- /* Strip the paging nodes */
- for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ )
- {
- if ( jqNodes[i].getAttribute('id') != "example_previous" &&
- jqNodes[i].getAttribute('id') != "example_next" )
- {
- nNodes.push( jqNodes[i] );
- }
-
- /* Only the two custom divs don't have class names */
- if ( jqNodes[i].className == "" )
- {
- nCustomWrappers.push( jqNodes[i] );
- }
- }
-
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nCustomWrappers[0] &&
- nNodes[2] == nLength &&
- nNodes[3] == nFilter &&
- nNodes[4] == nCustomWrappers[1] &&
- nNodes[5] == nTable &&
- nNodes[6] == nInfo &&
- nNodes[7] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check no length element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "sDom": 'frtip'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- null == nLength &&
- nNodes[1] == nFilter &&
- nNodes[2] == nTable &&
- nNodes[3] == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check no filter element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "sDom": 'lrtip'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- null == nFilter &&
- nNodes[2] == nTable &&
- nNodes[3] == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- /* Note we don't test for no table as this is not supported (and it would be fairly daft! */
-
- oTest.fnWaitTest(
- "Check no info element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "sDom": 'lfrtp'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- null == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check no paging element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "sDom": 'lfrti'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- nNodes[4] == nInfo &&
- null == nPaging;
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/sPaginationType.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/sPaginationType.js
deleted file mode 100644
index 9b75a7ea..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/4_server-side/sPaginationType.js
+++ /dev/null
@@ -1,138 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "sPaginationType" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Check two button paging is the default",
- null,
- function () { return oSettings.sPaginationType == "two_button"; }
- );
-
- oTest.fnWaitTest(
- "Check class is applied",
- null,
- function () { return $('#example_paginate').hasClass('paging_two_button'); }
- );
-
- oTest.fnWaitTest(
- "Two A elements are in the wrapper",
- null,
- function () { return $('#example_paginate a').length == 2; }
- );
-
- oTest.fnWaitTest(
- "We have the previous button",
- null,
- function () { return document.getElementById('example_previous'); }
- );
-
- oTest.fnWaitTest(
- "We have the next button",
- null,
- function () { return document.getElementById('example_next'); }
- );
-
- oTest.fnWaitTest(
- "Previous button is disabled",
- null,
- function () { return $('#example_previous').hasClass('paginate_disabled_previous'); }
- );
-
- oTest.fnWaitTest(
- "Next button is enabled",
- null,
- function () { return $('#example_next').hasClass('paginate_enabled_next'); }
- );
-
- /* Don't test paging - that's done by the zero config test script. */
-
-
- /* Two buttons paging */
- var bComplete = false;
- oTest.fnWaitTest(
- "Can enabled full numbers paging",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "bServerSide": true,
- "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php",
- "sPaginationType": "full_numbers",
- "fnInitComplete": function () {
- setTimeout( function () {
- bComplete = true;
- }, 500 );
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- if ( bComplete )
- return oSettings.sPaginationType == "full_numbers";
- else
- return false;
- }
- );
-
- oTest.fnWaitTest(
- "Check full numbers class is applied",
- null,
- function () { return $('#example_paginate').hasClass('paging_full_numbers'); }
- );
-
-
- var nFirst, nPrevious, nNext, nLast;
- oTest.fnWaitTest(
- "Jump to last page",
- function () {
- nFirst = $('div.dataTables_paginate a.first');
- nPrevious = $('div.dataTables_paginate a.previous');
- nNext = $('div.dataTables_paginate a.next');
- nLast = $('div.dataTables_paginate a.last');
- nLast.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries";
- }
- );
-
- oTest.fnWaitTest(
- "Go to two pages previous",
- function () {
- nPrevious.click();
- nPrevious.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 31 to 40 of 57 entries";
- }
- );
-
- oTest.fnWaitTest(
- "Next (second last) page",
- function () {
- nNext.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 41 to 50 of 57 entries";
- }
- );
-
- oTest.fnWaitTest(
- "Jump to first page",
- function () {
- nFirst.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries";
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config.js
deleted file mode 100644
index d9c8a9d1..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config.js
+++ /dev/null
@@ -1,847 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "Sanity checks for DataTables with data from JS - Object data source" );
-
-oTest.fnTest(
- "jQuery.dataTable function",
- null,
- function () { return typeof jQuery().dataTable == "function"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableSettings storage array",
- null,
- function () { return typeof jQuery().dataTableSettings == "object"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableExt plugin object",
- null,
- function () { return typeof jQuery().dataTableExt == "object"; }
-);
-
-$(document).ready( function () {
- var oInit = {
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaData": [
- {
- "engine": "Trident",
- "browser": "Internet Explorer 4.0",
- "platform": "Win 95+",
- "version": "4",
- "grade": "X"
- },
- {
- "engine": "Trident",
- "browser": "Internet Explorer 5.0",
- "platform": "Win 95+",
- "version": "5",
- "grade": "C"
- },
- {
- "engine": "Trident",
- "browser": "Internet Explorer 5.5",
- "platform": "Win 95+",
- "version": "5.5",
- "grade": "A"
- },
- {
- "engine": "Trident",
- "browser": "Internet Explorer 6",
- "platform": "Win 98+",
- "version": "6",
- "grade": "A"
- },
- {
- "engine": "Trident",
- "browser": "Internet Explorer 7",
- "platform": "Win XP SP2+",
- "version": "7",
- "grade": "A"
- },
- {
- "engine": "Trident",
- "browser": "AOL browser (AOL desktop)",
- "platform": "Win XP",
- "version": "6",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Firefox 1.0",
- "platform": "Win 98+ / OSX.2+",
- "version": "1.7",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Firefox 1.5",
- "platform": "Win 98+ / OSX.2+",
- "version": "1.8",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Firefox 2.0",
- "platform": "Win 98+ / OSX.2+",
- "version": "1.8",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Firefox 3.0",
- "platform": "Win 2k+ / OSX.3+",
- "version": "1.9",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Camino 1.0",
- "platform": "OSX.2+",
- "version": "1.8",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Camino 1.5",
- "platform": "OSX.3+",
- "version": "1.8",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Netscape 7.2",
- "platform": "Win 95+ / Mac OS 8.6-9.2",
- "version": "1.7",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Netscape Browser 8",
- "platform": "Win 98SE+",
- "version": "1.7",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Netscape Navigator 9",
- "platform": "Win 98+ / OSX.2+",
- "version": "1.8",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.0",
- "platform": "Win 95+ / OSX.1+",
- "version": "1",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.1",
- "platform": "Win 95+ / OSX.1+",
- "version": "1.1",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.2",
- "platform": "Win 95+ / OSX.1+",
- "version": "1.2",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.3",
- "platform": "Win 95+ / OSX.1+",
- "version": "1.3",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.4",
- "platform": "Win 95+ / OSX.1+",
- "version": "1.4",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.5",
- "platform": "Win 95+ / OSX.1+",
- "version": "1.5",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.6",
- "platform": "Win 95+ / OSX.1+",
- "version": "1.6",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.7",
- "platform": "Win 98+ / OSX.1+",
- "version": "1.7",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.8",
- "platform": "Win 98+ / OSX.1+",
- "version": "1.8",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Seamonkey 1.1",
- "platform": "Win 98+ / OSX.2+",
- "version": "1.8",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Epiphany 2.20",
- "platform": "Gnome",
- "version": "1.8",
- "grade": "A"
- },
- {
- "engine": "Webkit",
- "browser": "Safari 1.2",
- "platform": "OSX.3",
- "version": "125.5",
- "grade": "A"
- },
- {
- "engine": "Webkit",
- "browser": "Safari 1.3",
- "platform": "OSX.3",
- "version": "312.8",
- "grade": "A"
- },
- {
- "engine": "Webkit",
- "browser": "Safari 2.0",
- "platform": "OSX.4+",
- "version": "419.3",
- "grade": "A"
- },
- {
- "engine": "Webkit",
- "browser": "Safari 3.0",
- "platform": "OSX.4+",
- "version": "522.1",
- "grade": "A"
- },
- {
- "engine": "Webkit",
- "browser": "OmniWeb 5.5",
- "platform": "OSX.4+",
- "version": "420",
- "grade": "A"
- },
- {
- "engine": "Webkit",
- "browser": "iPod Touch / iPhone",
- "platform": "iPod",
- "version": "420.1",
- "grade": "A"
- },
- {
- "engine": "Webkit",
- "browser": "S60",
- "platform": "S60",
- "version": "413",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Opera 7.0",
- "platform": "Win 95+ / OSX.1+",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Opera 7.5",
- "platform": "Win 95+ / OSX.2+",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Opera 8.0",
- "platform": "Win 95+ / OSX.2+",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Opera 8.5",
- "platform": "Win 95+ / OSX.2+",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Opera 9.0",
- "platform": "Win 95+ / OSX.3+",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Opera 9.2",
- "platform": "Win 88+ / OSX.3+",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Opera 9.5",
- "platform": "Win 88+ / OSX.3+",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Opera for Wii",
- "platform": "Wii",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Nokia N800",
- "platform": "N800",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Nintendo DS browser",
- "platform": "Nintendo DS",
- "version": "8.5",
- "grade": "C/A<sup>1</sup>"
- },
- {
- "engine": "KHTML",
- "browser": "Konqureror 3.1",
- "platform": "KDE 3.1",
- "version": "3.1",
- "grade": "C"
- },
- {
- "engine": "KHTML",
- "browser": "Konqureror 3.3",
- "platform": "KDE 3.3",
- "version": "3.3",
- "grade": "A"
- },
- {
- "engine": "KHTML",
- "browser": "Konqureror 3.5",
- "platform": "KDE 3.5",
- "version": "3.5",
- "grade": "A"
- },
- {
- "engine": "Tasman",
- "browser": "Internet Explorer 4.5",
- "platform": "Mac OS 8-9",
- "version": "-",
- "grade": "X"
- },
- {
- "engine": "Tasman",
- "browser": "Internet Explorer 5.1",
- "platform": "Mac OS 7.6-9",
- "version": "1",
- "grade": "C"
- },
- {
- "engine": "Tasman",
- "browser": "Internet Explorer 5.2",
- "platform": "Mac OS 8-X",
- "version": "1",
- "grade": "C"
- },
- {
- "engine": "Misc",
- "browser": "NetFront 3.1",
- "platform": "Embedded devices",
- "version": "-",
- "grade": "C"
- },
- {
- "engine": "Misc",
- "browser": "NetFront 3.4",
- "platform": "Embedded devices",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Misc",
- "browser": "Dillo 0.8",
- "platform": "Embedded devices",
- "version": "-",
- "grade": "X"
- },
- {
- "engine": "Misc",
- "browser": "Links",
- "platform": "Text only",
- "version": "-",
- "grade": "X"
- },
- {
- "engine": "Misc",
- "browser": "Lynx",
- "platform": "Text only",
- "version": "-",
- "grade": "X"
- },
- {
- "engine": "Misc",
- "browser": "IE Mobile",
- "platform": "Windows Mobile 6",
- "version": "-",
- "grade": "C"
- },
- {
- "engine": "Misc",
- "browser": "PSP browser",
- "platform": "PSP",
- "version": "-",
- "grade": "C"
- },
- {
- "engine": "Other browsers",
- "browser": "All others",
- "platform": "-",
- "version": "-",
- "grade": "U"
- }
-]
- };
- $('#example').dataTable( oInit );
-
- /* Basic checks */
- oTest.fnWaitTest(
- "Length changing div exists",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnTest(
- "Filtering div exists",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- oTest.fnTest(
- "Information div exists",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- oTest.fnTest(
- "Pagination div exists",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnTest(
- "Processing div is off by default",
- null,
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnWaitTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back on first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records - second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 100 records - first page",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('100').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back to 10 records",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('10').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' back to first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - second time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter increased to 'Win 98'",
- function () { $('#example_filter input').val("Win 98").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter decreased to 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - third time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter removed",
- function () { $('#example_filter input').val("").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
-
- /*
- * Filtering
- */
- oTest.fnWaitTest(
- "Filter 'W' - rows",
- function () {
- /* Reset the table such that the old sorting doesn't mess things up */
- oSession.fnRestore();
- $('#example').dataTable( oInit );
- $('#example_filter input').val("W").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "Filter 'W' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Wi'",
- function () { $('#example_filter input').val("Wi").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 reverse",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - maintaing reverse sorting col 1",
- function () { $('#example_filter input').val("Win XP").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3 - reversed",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting col 3 - reversed info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere'",
- function () { $('#example_filter input').val("nothinghere").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() ==
- "No matching records found"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter back to blank and 1st column sorting",
- function () {
- $('#example_filter input').val("").keyup();
- $('#example thead th:eq(0)').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry",
- function () {
- $('#example_filter input').val("Win").keyup();
- $('#example_filter input').val("GeckoWin").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry with space",
- function () {
- $('#example_filter input').val("Gecko Win").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; }
- );
-
-
-
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_arrays_subobjects.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_arrays_subobjects.js
deleted file mode 100644
index eccebb6b..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_arrays_subobjects.js
+++ /dev/null
@@ -1,961 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "Sanity checks for DataTables with data from JS - Array / sub-object data source" );
-
-oTest.fnTest(
- "jQuery.dataTable function",
- null,
- function () { return typeof jQuery().dataTable == "function"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableSettings storage array",
- null,
- function () { return typeof jQuery().dataTableSettings == "object"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableExt plugin object",
- null,
- function () { return typeof jQuery().dataTableExt == "object"; }
-);
-
-$(document).ready( function () {
- var oInit = {
- "aoColumns": [
- null,
- null,
- { "mData": 2 },
- { "mData": "3.version" },
- { "mData": "3.grade" }
- ],
- "aaData": [
- [
- "Trident",
- "Internet Explorer 4.0",
- "Win 95+",
- {
- "version": "4",
- "grade": "X"
- }
- ],
- [
- "Trident",
- "Internet Explorer 5.0",
- "Win 95+",
- {
- "version": "5",
- "grade": "C"
- }
- ],
- [
- "Trident",
- "Internet Explorer 5.5",
- "Win 95+",
- {
- "version": "5.5",
- "grade": "A"
- }
- ],
- [
- "Trident",
- "Internet Explorer 6",
- "Win 98+",
- {
- "version": "6",
- "grade": "A"
- }
- ],
- [
- "Trident",
- "Internet Explorer 7",
- "Win XP SP2+",
- {
- "version": "7",
- "grade": "A"
- }
- ],
- [
- "Trident",
- "AOL browser (AOL desktop)",
- "Win XP",
- {
- "version": "6",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Firefox 1.0",
- "Win 98+ / OSX.2+",
- {
- "version": "1.7",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Firefox 1.5",
- "Win 98+ / OSX.2+",
- {
- "version": "1.8",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Firefox 2.0",
- "Win 98+ / OSX.2+",
- {
- "version": "1.8",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Firefox 3.0",
- "Win 2k+ / OSX.3+",
- {
- "version": "1.9",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Camino 1.0",
- "OSX.2+",
- {
- "version": "1.8",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Camino 1.5",
- "OSX.3+",
- {
- "version": "1.8",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Netscape 7.2",
- "Win 95+ / Mac OS 8.6-9.2",
- {
- "version": "1.7",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Netscape Browser 8",
- "Win 98SE+",
- {
- "version": "1.7",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Netscape Navigator 9",
- "Win 98+ / OSX.2+",
- {
- "version": "1.8",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Mozilla 1.0",
- "Win 95+ / OSX.1+",
- {
- "version": "1",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Mozilla 1.1",
- "Win 95+ / OSX.1+",
- {
- "version": "1.1",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Mozilla 1.2",
- "Win 95+ / OSX.1+",
- {
- "version": "1.2",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Mozilla 1.3",
- "Win 95+ / OSX.1+",
- {
- "version": "1.3",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Mozilla 1.4",
- "Win 95+ / OSX.1+",
- {
- "version": "1.4",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Mozilla 1.5",
- "Win 95+ / OSX.1+",
- {
- "version": "1.5",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Mozilla 1.6",
- "Win 95+ / OSX.1+",
- {
- "version": "1.6",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Mozilla 1.7",
- "Win 98+ / OSX.1+",
- {
- "version": "1.7",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Mozilla 1.8",
- "Win 98+ / OSX.1+",
- {
- "version": "1.8",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Seamonkey 1.1",
- "Win 98+ / OSX.2+",
- {
- "version": "1.8",
- "grade": "A"
- }
- ],
- [
- "Gecko",
- "Epiphany 2.20",
- "Gnome",
- {
- "version": "1.8",
- "grade": "A"
- }
- ],
- [
- "Webkit",
- "Safari 1.2",
- "OSX.3",
- {
- "version": "125.5",
- "grade": "A"
- }
- ],
- [
- "Webkit",
- "Safari 1.3",
- "OSX.3",
- {
- "version": "312.8",
- "grade": "A"
- }
- ],
- [
- "Webkit",
- "Safari 2.0",
- "OSX.4+",
- {
- "version": "419.3",
- "grade": "A"
- }
- ],
- [
- "Webkit",
- "Safari 3.0",
- "OSX.4+",
- {
- "version": "522.1",
- "grade": "A"
- }
- ],
- [
- "Webkit",
- "OmniWeb 5.5",
- "OSX.4+",
- {
- "version": "420",
- "grade": "A"
- }
- ],
- [
- "Webkit",
- "iPod Touch / iPhone",
- "iPod",
- {
- "version": "420.1",
- "grade": "A"
- }
- ],
- [
- "Webkit",
- "S60",
- "S60",
- {
- "version": "413",
- "grade": "A"
- }
- ],
- [
- "Presto",
- "Opera 7.0",
- "Win 95+ / OSX.1+",
- {
- "version": "-",
- "grade": "A"
- }
- ],
- [
- "Presto",
- "Opera 7.5",
- "Win 95+ / OSX.2+",
- {
- "version": "-",
- "grade": "A"
- }
- ],
- [
- "Presto",
- "Opera 8.0",
- "Win 95+ / OSX.2+",
- {
- "version": "-",
- "grade": "A"
- }
- ],
- [
- "Presto",
- "Opera 8.5",
- "Win 95+ / OSX.2+",
- {
- "version": "-",
- "grade": "A"
- }
- ],
- [
- "Presto",
- "Opera 9.0",
- "Win 95+ / OSX.3+",
- {
- "version": "-",
- "grade": "A"
- }
- ],
- [
- "Presto",
- "Opera 9.2",
- "Win 88+ / OSX.3+",
- {
- "version": "-",
- "grade": "A"
- }
- ],
- [
- "Presto",
- "Opera 9.5",
- "Win 88+ / OSX.3+",
- {
- "version": "-",
- "grade": "A"
- }
- ],
- [
- "Presto",
- "Opera for Wii",
- "Wii",
- {
- "version": "-",
- "grade": "A"
- }
- ],
- [
- "Presto",
- "Nokia N800",
- "N800",
- {
- "version": "-",
- "grade": "A"
- }
- ],
- [
- "Presto",
- "Nintendo DS browser",
- "Nintendo DS",
- {
- "version": "8.5",
- "grade": "C/A<sup>1</sup>"
- }
- ],
- [
- "KHTML",
- "Konqureror 3.1",
- "KDE 3.1",
- {
- "version": "3.1",
- "grade": "C"
- }
- ],
- [
- "KHTML",
- "Konqureror 3.3",
- "KDE 3.3",
- {
- "version": "3.3",
- "grade": "A"
- }
- ],
- [
- "KHTML",
- "Konqureror 3.5",
- "KDE 3.5",
- {
- "version": "3.5",
- "grade": "A"
- }
- ],
- [
- "Tasman",
- "Internet Explorer 4.5",
- "Mac OS 8-9",
- {
- "version": "-",
- "grade": "X"
- }
- ],
- [
- "Tasman",
- "Internet Explorer 5.1",
- "Mac OS 7.6-9",
- {
- "version": "1",
- "grade": "C"
- }
- ],
- [
- "Tasman",
- "Internet Explorer 5.2",
- "Mac OS 8-X",
- {
- "version": "1",
- "grade": "C"
- }
- ],
- [
- "Misc",
- "NetFront 3.1",
- "Embedded devices",
- {
- "version": "-",
- "grade": "C"
- }
- ],
- [
- "Misc",
- "NetFront 3.4",
- "Embedded devices",
- {
- "version": "-",
- "grade": "A"
- }
- ],
- [
- "Misc",
- "Dillo 0.8",
- "Embedded devices",
- {
- "version": "-",
- "grade": "X"
- }
- ],
- [
- "Misc",
- "Links",
- "Text only",
- {
- "version": "-",
- "grade": "X"
- }
- ],
- [
- "Misc",
- "Lynx",
- "Text only",
- {
- "version": "-",
- "grade": "X"
- }
- ],
- [
- "Misc",
- "IE Mobile",
- "Windows Mobile 6",
- {
- "version": "-",
- "grade": "C"
- }
- ],
- [
- "Misc",
- "PSP browser",
- "PSP",
- {
- "version": "-",
- "grade": "C"
- }
- ],
- [
- "Other browsers",
- "All others",
- "-",
- {
- "version": "-",
- "grade": "U"
- }
- ]
-]
- };
- $('#example').dataTable( oInit );
-
- /* Basic checks */
- oTest.fnWaitTest(
- "Length changing div exists",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnTest(
- "Filtering div exists",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- oTest.fnTest(
- "Information div exists",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- oTest.fnTest(
- "Pagination div exists",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnTest(
- "Processing div is off by default",
- null,
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnWaitTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back on first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records - second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 100 records - first page",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('100').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back to 10 records",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('10').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' back to first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - second time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter increased to 'Win 98'",
- function () { $('#example_filter input').val("Win 98").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter decreased to 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - third time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter removed",
- function () { $('#example_filter input').val("").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
-
- /*
- * Filtering
- */
- oTest.fnWaitTest(
- "Filter 'W' - rows",
- function () {
- /* Reset the table such that the old sorting doesn't mess things up */
- oSession.fnRestore();
- $('#example').dataTable( oInit );
- $('#example_filter input').val("W").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "Filter 'W' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Wi'",
- function () { $('#example_filter input').val("Wi").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 reverse",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - maintaing reverse sorting col 1",
- function () { $('#example_filter input').val("Win XP").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3 - reversed",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting col 3 - reversed info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere'",
- function () { $('#example_filter input').val("nothinghere").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() ==
- "No matching records found"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter back to blank and 1st column sorting",
- function () {
- $('#example_filter input').val("").keyup();
- $('#example thead th:eq(0)').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry",
- function () {
- $('#example_filter input').val("Win").keyup();
- $('#example_filter input').val("GeckoWin").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry with space",
- function () {
- $('#example_filter input').val("Gecko Win").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; }
- );
-
-
-
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_deep.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_deep.js
deleted file mode 100644
index 86b32a93..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_deep.js
+++ /dev/null
@@ -1,1075 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "Sanity checks for DataTables with data from JS - Deep data source" );
-
-oTest.fnTest(
- "jQuery.dataTable function",
- null,
- function () { return typeof jQuery().dataTable == "function"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableSettings storage array",
- null,
- function () { return typeof jQuery().dataTableSettings == "object"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableExt plugin object",
- null,
- function () { return typeof jQuery().dataTableExt == "object"; }
-);
-
-$(document).ready( function () {
- var oInit = {
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform.inner" },
- { "mData": "platform.details.0" },
- { "mData": "platform.details.1" }
- ],
- "aaData": [
- {
- "engine": "Trident",
- "browser": "Internet Explorer 4.0",
- "platform": {
- "inner": "Win 95+",
- "details": [
- "4",
- "X"
- ]
- }
- },
- {
- "engine": "Trident",
- "browser": "Internet Explorer 5.0",
- "platform": {
- "inner": "Win 95+",
- "details": [
- "5",
- "C"
- ]
- }
- },
- {
- "engine": "Trident",
- "browser": "Internet Explorer 5.5",
- "platform": {
- "inner": "Win 95+",
- "details": [
- "5.5",
- "A"
- ]
- }
- },
- {
- "engine": "Trident",
- "browser": "Internet Explorer 6",
- "platform": {
- "inner": "Win 98+",
- "details": [
- "6",
- "A"
- ]
- }
- },
- {
- "engine": "Trident",
- "browser": "Internet Explorer 7",
- "platform": {
- "inner": "Win XP SP2+",
- "details": [
- "7",
- "A"
- ]
- }
- },
- {
- "engine": "Trident",
- "browser": "AOL browser (AOL desktop)",
- "platform": {
- "inner": "Win XP",
- "details": [
- "6",
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Firefox 1.0",
- "platform": {
- "inner": "Win 98+ / OSX.2+",
- "details": [
- "1.7",
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Firefox 1.5",
- "platform": {
- "inner": "Win 98+ / OSX.2+",
- "details": [
- "1.8",
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Firefox 2.0",
- "platform": {
- "inner": "Win 98+ / OSX.2+",
- "details": [
- "1.8",
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Firefox 3.0",
- "platform": {
- "inner": "Win 2k+ / OSX.3+",
- "details": [
- "1.9",
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Camino 1.0",
- "platform": {
- "inner": "OSX.2+",
- "details": [
- "1.8",
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Camino 1.5",
- "platform": {
- "inner": "OSX.3+",
- "details": [
- "1.8",
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Netscape 7.2",
- "platform": {
- "inner": "Win 95+ / Mac OS 8.6-9.2",
- "details": [
- "1.7",
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Netscape Browser 8",
- "platform": {
- "inner": "Win 98SE+",
- "details": [
- "1.7",
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Netscape Navigator 9",
- "platform": {
- "inner": "Win 98+ / OSX.2+",
- "details": [
- "1.8",
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.0",
- "platform": {
- "inner": "Win 95+ / OSX.1+",
- "details": [
- 1,
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.1",
- "platform": {
- "inner": "Win 95+ / OSX.1+",
- "details": [
- 1.1,
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.2",
- "platform": {
- "inner": "Win 95+ / OSX.1+",
- "details": [
- 1.2,
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.3",
- "platform": {
- "inner": "Win 95+ / OSX.1+",
- "details": [
- 1.3,
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.4",
- "platform": {
- "inner": "Win 95+ / OSX.1+",
- "details": [
- 1.4,
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.5",
- "platform": {
- "inner": "Win 95+ / OSX.1+",
- "details": [
- 1.5,
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.6",
- "platform": {
- "inner": "Win 95+ / OSX.1+",
- "details": [
- 1.6,
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.7",
- "platform": {
- "inner": "Win 98+ / OSX.1+",
- "details": [
- 1.7,
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.8",
- "platform": {
- "inner": "Win 98+ / OSX.1+",
- "details": [
- 1.8,
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Seamonkey 1.1",
- "platform": {
- "inner": "Win 98+ / OSX.2+",
- "details": [
- "1.8",
- "A"
- ]
- }
- },
- {
- "engine": "Gecko",
- "browser": "Epiphany 2.20",
- "platform": {
- "inner": "Gnome",
- "details": [
- "1.8",
- "A"
- ]
- }
- },
- {
- "engine": "Webkit",
- "browser": "Safari 1.2",
- "platform": {
- "inner": "OSX.3",
- "details": [
- "125.5",
- "A"
- ]
- }
- },
- {
- "engine": "Webkit",
- "browser": "Safari 1.3",
- "platform": {
- "inner": "OSX.3",
- "details": [
- "312.8",
- "A"
- ]
- }
- },
- {
- "engine": "Webkit",
- "browser": "Safari 2.0",
- "platform": {
- "inner": "OSX.4+",
- "details": [
- "419.3",
- "A"
- ]
- }
- },
- {
- "engine": "Webkit",
- "browser": "Safari 3.0",
- "platform": {
- "inner": "OSX.4+",
- "details": [
- "522.1",
- "A"
- ]
- }
- },
- {
- "engine": "Webkit",
- "browser": "OmniWeb 5.5",
- "platform": {
- "inner": "OSX.4+",
- "details": [
- "420",
- "A"
- ]
- }
- },
- {
- "engine": "Webkit",
- "browser": "iPod Touch / iPhone",
- "platform": {
- "inner": "iPod",
- "details": [
- "420.1",
- "A"
- ]
- }
- },
- {
- "engine": "Webkit",
- "browser": "S60",
- "platform": {
- "inner": "S60",
- "details": [
- "413",
- "A"
- ]
- }
- },
- {
- "engine": "Presto",
- "browser": "Opera 7.0",
- "platform": {
- "inner": "Win 95+ / OSX.1+",
- "details": [
- "-",
- "A"
- ]
- }
- },
- {
- "engine": "Presto",
- "browser": "Opera 7.5",
- "platform": {
- "inner": "Win 95+ / OSX.2+",
- "details": [
- "-",
- "A"
- ]
- }
- },
- {
- "engine": "Presto",
- "browser": "Opera 8.0",
- "platform": {
- "inner": "Win 95+ / OSX.2+",
- "details": [
- "-",
- "A"
- ]
- }
- },
- {
- "engine": "Presto",
- "browser": "Opera 8.5",
- "platform": {
- "inner": "Win 95+ / OSX.2+",
- "details": [
- "-",
- "A"
- ]
- }
- },
- {
- "engine": "Presto",
- "browser": "Opera 9.0",
- "platform": {
- "inner": "Win 95+ / OSX.3+",
- "details": [
- "-",
- "A"
- ]
- }
- },
- {
- "engine": "Presto",
- "browser": "Opera 9.2",
- "platform": {
- "inner": "Win 88+ / OSX.3+",
- "details": [
- "-",
- "A"
- ]
- }
- },
- {
- "engine": "Presto",
- "browser": "Opera 9.5",
- "platform": {
- "inner": "Win 88+ / OSX.3+",
- "details": [
- "-",
- "A"
- ]
- }
- },
- {
- "engine": "Presto",
- "browser": "Opera for Wii",
- "platform": {
- "inner": "Wii",
- "details": [
- "-",
- "A"
- ]
- }
- },
- {
- "engine": "Presto",
- "browser": "Nokia N800",
- "platform": {
- "inner": "N800",
- "details": [
- "-",
- "A"
- ]
- }
- },
- {
- "engine": "Presto",
- "browser": "Nintendo DS browser",
- "platform": {
- "inner": "Nintendo DS",
- "details": [
- "8.5",
- "C/A<sup>1</sup>"
- ]
- }
- },
- {
- "engine": "KHTML",
- "browser": "Konqureror 3.1",
- "platform": {
- "inner": "KDE 3.1",
- "details": [
- "3.1",
- "C"
- ]
- }
- },
- {
- "engine": "KHTML",
- "browser": "Konqureror 3.3",
- "platform": {
- "inner": "KDE 3.3",
- "details": [
- "3.3",
- "A"
- ]
- }
- },
- {
- "engine": "KHTML",
- "browser": "Konqureror 3.5",
- "platform": {
- "inner": "KDE 3.5",
- "details": [
- "3.5",
- "A"
- ]
- }
- },
- {
- "engine": "Tasman",
- "browser": "Internet Explorer 4.5",
- "platform": {
- "inner": "Mac OS 8-9",
- "details": [
- "-",
- "X"
- ]
- }
- },
- {
- "engine": "Tasman",
- "browser": "Internet Explorer 5.1",
- "platform": {
- "inner": "Mac OS 7.6-9",
- "details": [
- "1",
- "C"
- ]
- }
- },
- {
- "engine": "Tasman",
- "browser": "Internet Explorer 5.2",
- "platform": {
- "inner": "Mac OS 8-X",
- "details": [
- "1",
- "C"
- ]
- }
- },
- {
- "engine": "Misc",
- "browser": "NetFront 3.1",
- "platform": {
- "inner": "Embedded devices",
- "details": [
- "-",
- "C"
- ]
- }
- },
- {
- "engine": "Misc",
- "browser": "NetFront 3.4",
- "platform": {
- "inner": "Embedded devices",
- "details": [
- "-",
- "A"
- ]
- }
- },
- {
- "engine": "Misc",
- "browser": "Dillo 0.8",
- "platform": {
- "inner": "Embedded devices",
- "details": [
- "-",
- "X"
- ]
- }
- },
- {
- "engine": "Misc",
- "browser": "Links",
- "platform": {
- "inner": "Text only",
- "details": [
- "-",
- "X"
- ]
- }
- },
- {
- "engine": "Misc",
- "browser": "Lynx",
- "platform": {
- "inner": "Text only",
- "details": [
- "-",
- "X"
- ]
- }
- },
- {
- "engine": "Misc",
- "browser": "IE Mobile",
- "platform": {
- "inner": "Windows Mobile 6",
- "details": [
- "-",
- "C"
- ]
- }
- },
- {
- "engine": "Misc",
- "browser": "PSP browser",
- "platform": {
- "inner": "PSP",
- "details": [
- "-",
- "C"
- ]
- }
- },
- {
- "engine": "Other browsers",
- "browser": "All others",
- "platform": {
- "inner": "-",
- "details": [
- "-",
- "U"
- ]
- }
- }
-]
- };
- $('#example').dataTable( oInit );
-
- /* Basic checks */
- oTest.fnWaitTest(
- "Length changing div exists",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnTest(
- "Filtering div exists",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- oTest.fnTest(
- "Information div exists",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- oTest.fnTest(
- "Pagination div exists",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnTest(
- "Processing div is off by default",
- null,
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnWaitTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back on first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records - second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 100 records - first page",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('100').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back to 10 records",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('10').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' back to first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - second time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter increased to 'Win 98'",
- function () { $('#example_filter input').val("Win 98").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter decreased to 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - third time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter removed",
- function () { $('#example_filter input').val("").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
-
- /*
- * Filtering
- */
- oTest.fnWaitTest(
- "Filter 'W' - rows",
- function () {
- /* Reset the table such that the old sorting doesn't mess things up */
- oSession.fnRestore();
- $('#example').dataTable( oInit );
- $('#example_filter input').val("W").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "Filter 'W' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Wi'",
- function () { $('#example_filter input').val("Wi").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 reverse",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - maintaing reverse sorting col 1",
- function () { $('#example_filter input').val("Win XP").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3 - reversed",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting col 3 - reversed info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere'",
- function () { $('#example_filter input').val("nothinghere").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() ==
- "No matching records found"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter back to blank and 1st column sorting",
- function () {
- $('#example_filter input').val("").keyup();
- $('#example thead th:eq(0)').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry",
- function () {
- $('#example_filter input').val("Win").keyup();
- $('#example_filter input').val("GeckoWin").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry with space",
- function () {
- $('#example_filter input').val("Gecko Win").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; }
- );
-
-
-
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_null_source.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_null_source.js
deleted file mode 100644
index ffe97791..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_null_source.js
+++ /dev/null
@@ -1,458 +0,0 @@
-// DATA_TEMPLATE: js_data
-oTest.fnStart( "Sanity checks for DataTables with data from JS - Null data source for last column" );
-
-oTest.fnTest(
- "jQuery.dataTable function",
- null,
- function () { return typeof jQuery().dataTable == "function"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableSettings storage array",
- null,
- function () { return typeof jQuery().dataTableSettings == "object"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableExt plugin object",
- null,
- function () { return typeof jQuery().dataTableExt == "object"; }
-);
-
-$(document).ready( function () {
- var oInit = {
- "aoColumns": [
- null,
- null,
- null,
- null,
- { "mData": null }
- ],
- "aaData": gaaData
- };
- $('#example').dataTable( oInit );
-
- /* Basic checks */
- oTest.fnWaitTest(
- "Length changing div exists",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnTest(
- "Filtering div exists",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- oTest.fnTest(
- "Information div exists",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- oTest.fnTest(
- "Pagination div exists",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnTest(
- "Processing div is off by default",
- null,
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnWaitTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnTest(
- "Data in last column is empty",
- null,
- function () { return $('#example tbody td:eq(4)').html() == ""; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
- oTest.fnTest(
- "Data in last column is still empty",
- null,
- function () { return $('#example tbody td:eq(4)').html() == ""; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back on first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records - second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 100 records - first page",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('100').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back to 10 records",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('10').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' back to first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - second time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter increased to 'Win 98'",
- function () { $('#example_filter input').val("Win 98").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter decreased to 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - third time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter removed",
- function () { $('#example_filter input').val("").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
-
- /*
- * Filtering
- */
- oTest.fnWaitTest(
- "Filter 'W' - rows",
- function () {
- /* Reset the table such that the old sorting doesn't mess things up */
- oSession.fnRestore();
- $('#example').dataTable( oInit );
- $('#example_filter input').val("W").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "Filter 'W' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Wi'",
- function () { $('#example_filter input').val("Wi").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 reverse",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - maintaing reverse sorting col 1",
- function () { $('#example_filter input').val("Win XP").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3 - reversed",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting col 3 - reversed info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere'",
- function () { $('#example_filter input').val("nothinghere").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() ==
- "No matching records found"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter back to blank and 1st column sorting",
- function () {
- $('#example_filter input').val("").keyup();
- $('#example thead th:eq(0)').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry",
- function () {
- $('#example_filter input').val("Win").keyup();
- $('#example_filter input').val("GeckoWin").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry with space",
- function () {
- $('#example_filter input').val("Gecko Win").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; }
- );
-
-
-
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects.js
deleted file mode 100644
index d9c8a9d1..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects.js
+++ /dev/null
@@ -1,847 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "Sanity checks for DataTables with data from JS - Object data source" );
-
-oTest.fnTest(
- "jQuery.dataTable function",
- null,
- function () { return typeof jQuery().dataTable == "function"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableSettings storage array",
- null,
- function () { return typeof jQuery().dataTableSettings == "object"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableExt plugin object",
- null,
- function () { return typeof jQuery().dataTableExt == "object"; }
-);
-
-$(document).ready( function () {
- var oInit = {
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaData": [
- {
- "engine": "Trident",
- "browser": "Internet Explorer 4.0",
- "platform": "Win 95+",
- "version": "4",
- "grade": "X"
- },
- {
- "engine": "Trident",
- "browser": "Internet Explorer 5.0",
- "platform": "Win 95+",
- "version": "5",
- "grade": "C"
- },
- {
- "engine": "Trident",
- "browser": "Internet Explorer 5.5",
- "platform": "Win 95+",
- "version": "5.5",
- "grade": "A"
- },
- {
- "engine": "Trident",
- "browser": "Internet Explorer 6",
- "platform": "Win 98+",
- "version": "6",
- "grade": "A"
- },
- {
- "engine": "Trident",
- "browser": "Internet Explorer 7",
- "platform": "Win XP SP2+",
- "version": "7",
- "grade": "A"
- },
- {
- "engine": "Trident",
- "browser": "AOL browser (AOL desktop)",
- "platform": "Win XP",
- "version": "6",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Firefox 1.0",
- "platform": "Win 98+ / OSX.2+",
- "version": "1.7",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Firefox 1.5",
- "platform": "Win 98+ / OSX.2+",
- "version": "1.8",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Firefox 2.0",
- "platform": "Win 98+ / OSX.2+",
- "version": "1.8",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Firefox 3.0",
- "platform": "Win 2k+ / OSX.3+",
- "version": "1.9",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Camino 1.0",
- "platform": "OSX.2+",
- "version": "1.8",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Camino 1.5",
- "platform": "OSX.3+",
- "version": "1.8",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Netscape 7.2",
- "platform": "Win 95+ / Mac OS 8.6-9.2",
- "version": "1.7",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Netscape Browser 8",
- "platform": "Win 98SE+",
- "version": "1.7",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Netscape Navigator 9",
- "platform": "Win 98+ / OSX.2+",
- "version": "1.8",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.0",
- "platform": "Win 95+ / OSX.1+",
- "version": "1",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.1",
- "platform": "Win 95+ / OSX.1+",
- "version": "1.1",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.2",
- "platform": "Win 95+ / OSX.1+",
- "version": "1.2",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.3",
- "platform": "Win 95+ / OSX.1+",
- "version": "1.3",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.4",
- "platform": "Win 95+ / OSX.1+",
- "version": "1.4",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.5",
- "platform": "Win 95+ / OSX.1+",
- "version": "1.5",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.6",
- "platform": "Win 95+ / OSX.1+",
- "version": "1.6",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.7",
- "platform": "Win 98+ / OSX.1+",
- "version": "1.7",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.8",
- "platform": "Win 98+ / OSX.1+",
- "version": "1.8",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Seamonkey 1.1",
- "platform": "Win 98+ / OSX.2+",
- "version": "1.8",
- "grade": "A"
- },
- {
- "engine": "Gecko",
- "browser": "Epiphany 2.20",
- "platform": "Gnome",
- "version": "1.8",
- "grade": "A"
- },
- {
- "engine": "Webkit",
- "browser": "Safari 1.2",
- "platform": "OSX.3",
- "version": "125.5",
- "grade": "A"
- },
- {
- "engine": "Webkit",
- "browser": "Safari 1.3",
- "platform": "OSX.3",
- "version": "312.8",
- "grade": "A"
- },
- {
- "engine": "Webkit",
- "browser": "Safari 2.0",
- "platform": "OSX.4+",
- "version": "419.3",
- "grade": "A"
- },
- {
- "engine": "Webkit",
- "browser": "Safari 3.0",
- "platform": "OSX.4+",
- "version": "522.1",
- "grade": "A"
- },
- {
- "engine": "Webkit",
- "browser": "OmniWeb 5.5",
- "platform": "OSX.4+",
- "version": "420",
- "grade": "A"
- },
- {
- "engine": "Webkit",
- "browser": "iPod Touch / iPhone",
- "platform": "iPod",
- "version": "420.1",
- "grade": "A"
- },
- {
- "engine": "Webkit",
- "browser": "S60",
- "platform": "S60",
- "version": "413",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Opera 7.0",
- "platform": "Win 95+ / OSX.1+",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Opera 7.5",
- "platform": "Win 95+ / OSX.2+",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Opera 8.0",
- "platform": "Win 95+ / OSX.2+",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Opera 8.5",
- "platform": "Win 95+ / OSX.2+",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Opera 9.0",
- "platform": "Win 95+ / OSX.3+",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Opera 9.2",
- "platform": "Win 88+ / OSX.3+",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Opera 9.5",
- "platform": "Win 88+ / OSX.3+",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Opera for Wii",
- "platform": "Wii",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Nokia N800",
- "platform": "N800",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Presto",
- "browser": "Nintendo DS browser",
- "platform": "Nintendo DS",
- "version": "8.5",
- "grade": "C/A<sup>1</sup>"
- },
- {
- "engine": "KHTML",
- "browser": "Konqureror 3.1",
- "platform": "KDE 3.1",
- "version": "3.1",
- "grade": "C"
- },
- {
- "engine": "KHTML",
- "browser": "Konqureror 3.3",
- "platform": "KDE 3.3",
- "version": "3.3",
- "grade": "A"
- },
- {
- "engine": "KHTML",
- "browser": "Konqureror 3.5",
- "platform": "KDE 3.5",
- "version": "3.5",
- "grade": "A"
- },
- {
- "engine": "Tasman",
- "browser": "Internet Explorer 4.5",
- "platform": "Mac OS 8-9",
- "version": "-",
- "grade": "X"
- },
- {
- "engine": "Tasman",
- "browser": "Internet Explorer 5.1",
- "platform": "Mac OS 7.6-9",
- "version": "1",
- "grade": "C"
- },
- {
- "engine": "Tasman",
- "browser": "Internet Explorer 5.2",
- "platform": "Mac OS 8-X",
- "version": "1",
- "grade": "C"
- },
- {
- "engine": "Misc",
- "browser": "NetFront 3.1",
- "platform": "Embedded devices",
- "version": "-",
- "grade": "C"
- },
- {
- "engine": "Misc",
- "browser": "NetFront 3.4",
- "platform": "Embedded devices",
- "version": "-",
- "grade": "A"
- },
- {
- "engine": "Misc",
- "browser": "Dillo 0.8",
- "platform": "Embedded devices",
- "version": "-",
- "grade": "X"
- },
- {
- "engine": "Misc",
- "browser": "Links",
- "platform": "Text only",
- "version": "-",
- "grade": "X"
- },
- {
- "engine": "Misc",
- "browser": "Lynx",
- "platform": "Text only",
- "version": "-",
- "grade": "X"
- },
- {
- "engine": "Misc",
- "browser": "IE Mobile",
- "platform": "Windows Mobile 6",
- "version": "-",
- "grade": "C"
- },
- {
- "engine": "Misc",
- "browser": "PSP browser",
- "platform": "PSP",
- "version": "-",
- "grade": "C"
- },
- {
- "engine": "Other browsers",
- "browser": "All others",
- "platform": "-",
- "version": "-",
- "grade": "U"
- }
-]
- };
- $('#example').dataTable( oInit );
-
- /* Basic checks */
- oTest.fnWaitTest(
- "Length changing div exists",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnTest(
- "Filtering div exists",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- oTest.fnTest(
- "Information div exists",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- oTest.fnTest(
- "Pagination div exists",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnTest(
- "Processing div is off by default",
- null,
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnWaitTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back on first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records - second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 100 records - first page",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('100').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back to 10 records",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('10').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' back to first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - second time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter increased to 'Win 98'",
- function () { $('#example_filter input').val("Win 98").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter decreased to 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - third time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter removed",
- function () { $('#example_filter input').val("").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
-
- /*
- * Filtering
- */
- oTest.fnWaitTest(
- "Filter 'W' - rows",
- function () {
- /* Reset the table such that the old sorting doesn't mess things up */
- oSession.fnRestore();
- $('#example').dataTable( oInit );
- $('#example_filter input').val("W").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "Filter 'W' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Wi'",
- function () { $('#example_filter input').val("Wi").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 reverse",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - maintaing reverse sorting col 1",
- function () { $('#example_filter input').val("Win XP").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3 - reversed",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting col 3 - reversed info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere'",
- function () { $('#example_filter input').val("nothinghere").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() ==
- "No matching records found"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter back to blank and 1st column sorting",
- function () {
- $('#example_filter input').val("").keyup();
- $('#example thead th:eq(0)').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry",
- function () {
- $('#example_filter input').val("Win").keyup();
- $('#example_filter input').val("GeckoWin").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry with space",
- function () {
- $('#example_filter input').val("Gecko Win").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; }
- );
-
-
-
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects_subarrays.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects_subarrays.js
deleted file mode 100644
index 5171bc61..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects_subarrays.js
+++ /dev/null
@@ -1,961 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "Sanity checks for DataTables with data from JS - Object / sub-array data source" );
-
-oTest.fnTest(
- "jQuery.dataTable function",
- null,
- function () { return typeof jQuery().dataTable == "function"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableSettings storage array",
- null,
- function () { return typeof jQuery().dataTableSettings == "object"; }
-);
-
-oTest.fnTest(
- "jQuery.dataTableExt plugin object",
- null,
- function () { return typeof jQuery().dataTableExt == "object"; }
-);
-
-$(document).ready( function () {
- var oInit = {
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "details.0" },
- { "mData": "details.1" }
- ],
- "aaData": [
- {
- "engine": "Trident",
- "browser": "Internet Explorer 4.0",
- "platform": "Win 95+",
- "details": [
- "4",
- "X"
- ]
- },
- {
- "engine": "Trident",
- "browser": "Internet Explorer 5.0",
- "platform": "Win 95+",
- "details": [
- "5",
- "C"
- ]
- },
- {
- "engine": "Trident",
- "browser": "Internet Explorer 5.5",
- "platform": "Win 95+",
- "details": [
- "5.5",
- "A"
- ]
- },
- {
- "engine": "Trident",
- "browser": "Internet Explorer 6",
- "platform": "Win 98+",
- "details": [
- "6",
- "A"
- ]
- },
- {
- "engine": "Trident",
- "browser": "Internet Explorer 7",
- "platform": "Win XP SP2+",
- "details": [
- "7",
- "A"
- ]
- },
- {
- "engine": "Trident",
- "browser": "AOL browser (AOL desktop)",
- "platform": "Win XP",
- "details": [
- "6",
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Firefox 1.0",
- "platform": "Win 98+ / OSX.2+",
- "details": [
- "1.7",
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Firefox 1.5",
- "platform": "Win 98+ / OSX.2+",
- "details": [
- "1.8",
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Firefox 2.0",
- "platform": "Win 98+ / OSX.2+",
- "details": [
- "1.8",
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Firefox 3.0",
- "platform": "Win 2k+ / OSX.3+",
- "details": [
- "1.9",
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Camino 1.0",
- "platform": "OSX.2+",
- "details": [
- "1.8",
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Camino 1.5",
- "platform": "OSX.3+",
- "details": [
- "1.8",
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Netscape 7.2",
- "platform": "Win 95+ / Mac OS 8.6-9.2",
- "details": [
- "1.7",
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Netscape Browser 8",
- "platform": "Win 98SE+",
- "details": [
- "1.7",
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Netscape Navigator 9",
- "platform": "Win 98+ / OSX.2+",
- "details": [
- "1.8",
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.0",
- "platform": "Win 95+ / OSX.1+",
- "details": [
- 1,
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.1",
- "platform": "Win 95+ / OSX.1+",
- "details": [
- 1.1,
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.2",
- "platform": "Win 95+ / OSX.1+",
- "details": [
- 1.2,
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.3",
- "platform": "Win 95+ / OSX.1+",
- "details": [
- 1.3,
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.4",
- "platform": "Win 95+ / OSX.1+",
- "details": [
- 1.4,
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.5",
- "platform": "Win 95+ / OSX.1+",
- "details": [
- 1.5,
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.6",
- "platform": "Win 95+ / OSX.1+",
- "details": [
- 1.6,
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.7",
- "platform": "Win 98+ / OSX.1+",
- "details": [
- 1.7,
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Mozilla 1.8",
- "platform": "Win 98+ / OSX.1+",
- "details": [
- 1.8,
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Seamonkey 1.1",
- "platform": "Win 98+ / OSX.2+",
- "details": [
- "1.8",
- "A"
- ]
- },
- {
- "engine": "Gecko",
- "browser": "Epiphany 2.20",
- "platform": "Gnome",
- "details": [
- "1.8",
- "A"
- ]
- },
- {
- "engine": "Webkit",
- "browser": "Safari 1.2",
- "platform": "OSX.3",
- "details": [
- "125.5",
- "A"
- ]
- },
- {
- "engine": "Webkit",
- "browser": "Safari 1.3",
- "platform": "OSX.3",
- "details": [
- "312.8",
- "A"
- ]
- },
- {
- "engine": "Webkit",
- "browser": "Safari 2.0",
- "platform": "OSX.4+",
- "details": [
- "419.3",
- "A"
- ]
- },
- {
- "engine": "Webkit",
- "browser": "Safari 3.0",
- "platform": "OSX.4+",
- "details": [
- "522.1",
- "A"
- ]
- },
- {
- "engine": "Webkit",
- "browser": "OmniWeb 5.5",
- "platform": "OSX.4+",
- "details": [
- "420",
- "A"
- ]
- },
- {
- "engine": "Webkit",
- "browser": "iPod Touch / iPhone",
- "platform": "iPod",
- "details": [
- "420.1",
- "A"
- ]
- },
- {
- "engine": "Webkit",
- "browser": "S60",
- "platform": "S60",
- "details": [
- "413",
- "A"
- ]
- },
- {
- "engine": "Presto",
- "browser": "Opera 7.0",
- "platform": "Win 95+ / OSX.1+",
- "details": [
- "-",
- "A"
- ]
- },
- {
- "engine": "Presto",
- "browser": "Opera 7.5",
- "platform": "Win 95+ / OSX.2+",
- "details": [
- "-",
- "A"
- ]
- },
- {
- "engine": "Presto",
- "browser": "Opera 8.0",
- "platform": "Win 95+ / OSX.2+",
- "details": [
- "-",
- "A"
- ]
- },
- {
- "engine": "Presto",
- "browser": "Opera 8.5",
- "platform": "Win 95+ / OSX.2+",
- "details": [
- "-",
- "A"
- ]
- },
- {
- "engine": "Presto",
- "browser": "Opera 9.0",
- "platform": "Win 95+ / OSX.3+",
- "details": [
- "-",
- "A"
- ]
- },
- {
- "engine": "Presto",
- "browser": "Opera 9.2",
- "platform": "Win 88+ / OSX.3+",
- "details": [
- "-",
- "A"
- ]
- },
- {
- "engine": "Presto",
- "browser": "Opera 9.5",
- "platform": "Win 88+ / OSX.3+",
- "details": [
- "-",
- "A"
- ]
- },
- {
- "engine": "Presto",
- "browser": "Opera for Wii",
- "platform": "Wii",
- "details": [
- "-",
- "A"
- ]
- },
- {
- "engine": "Presto",
- "browser": "Nokia N800",
- "platform": "N800",
- "details": [
- "-",
- "A"
- ]
- },
- {
- "engine": "Presto",
- "browser": "Nintendo DS browser",
- "platform": "Nintendo DS",
- "details": [
- "8.5",
- "C/A<sup>1</sup>"
- ]
- },
- {
- "engine": "KHTML",
- "browser": "Konqureror 3.1",
- "platform": "KDE 3.1",
- "details": [
- "3.1",
- "C"
- ]
- },
- {
- "engine": "KHTML",
- "browser": "Konqureror 3.3",
- "platform": "KDE 3.3",
- "details": [
- "3.3",
- "A"
- ]
- },
- {
- "engine": "KHTML",
- "browser": "Konqureror 3.5",
- "platform": "KDE 3.5",
- "details": [
- "3.5",
- "A"
- ]
- },
- {
- "engine": "Tasman",
- "browser": "Internet Explorer 4.5",
- "platform": "Mac OS 8-9",
- "details": [
- "-",
- "X"
- ]
- },
- {
- "engine": "Tasman",
- "browser": "Internet Explorer 5.1",
- "platform": "Mac OS 7.6-9",
- "details": [
- "1",
- "C"
- ]
- },
- {
- "engine": "Tasman",
- "browser": "Internet Explorer 5.2",
- "platform": "Mac OS 8-X",
- "details": [
- "1",
- "C"
- ]
- },
- {
- "engine": "Misc",
- "browser": "NetFront 3.1",
- "platform": "Embedded devices",
- "details": [
- "-",
- "C"
- ]
- },
- {
- "engine": "Misc",
- "browser": "NetFront 3.4",
- "platform": "Embedded devices",
- "details": [
- "-",
- "A"
- ]
- },
- {
- "engine": "Misc",
- "browser": "Dillo 0.8",
- "platform": "Embedded devices",
- "details": [
- "-",
- "X"
- ]
- },
- {
- "engine": "Misc",
- "browser": "Links",
- "platform": "Text only",
- "details": [
- "-",
- "X"
- ]
- },
- {
- "engine": "Misc",
- "browser": "Lynx",
- "platform": "Text only",
- "details": [
- "-",
- "X"
- ]
- },
- {
- "engine": "Misc",
- "browser": "IE Mobile",
- "platform": "Windows Mobile 6",
- "details": [
- "-",
- "C"
- ]
- },
- {
- "engine": "Misc",
- "browser": "PSP browser",
- "platform": "PSP",
- "details": [
- "-",
- "C"
- ]
- },
- {
- "engine": "Other browsers",
- "browser": "All others",
- "platform": "-",
- "details": [
- "-",
- "U"
- ]
- }
-]
- };
- $('#example').dataTable( oInit );
-
- /* Basic checks */
- oTest.fnWaitTest(
- "Length changing div exists",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnTest(
- "Filtering div exists",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- oTest.fnTest(
- "Information div exists",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- oTest.fnTest(
- "Pagination div exists",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnTest(
- "Processing div is off by default",
- null,
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnWaitTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back on first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records - second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 100 records - first page",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('100').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back to 10 records",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('10').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' back to first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - second time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter increased to 'Win 98'",
- function () { $('#example_filter input').val("Win 98").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter decreased to 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - third time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter removed",
- function () { $('#example_filter input').val("").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
-
- /*
- * Filtering
- */
- oTest.fnWaitTest(
- "Filter 'W' - rows",
- function () {
- /* Reset the table such that the old sorting doesn't mess things up */
- oSession.fnRestore();
- $('#example').dataTable( oInit );
- $('#example_filter input').val("W").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "Filter 'W' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Wi'",
- function () { $('#example_filter input').val("Wi").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 reverse",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - maintaing reverse sorting col 1",
- function () { $('#example_filter input').val("Win XP").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3 - reversed",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting col 3 - reversed info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere'",
- function () { $('#example_filter input').val("nothinghere").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() ==
- "No matching records found"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter back to blank and 1st column sorting",
- function () {
- $('#example_filter input').val("").keyup();
- $('#example thead th:eq(0)').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry",
- function () {
- $('#example_filter input').val("Win").keyup();
- $('#example_filter input').val("GeckoWin").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry with space",
- function () {
- $('#example_filter input').val("Gecko Win").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; }
- );
-
-
-
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aaSorting.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aaSorting.js
deleted file mode 100644
index 876c6d10..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aaSorting.js
+++ /dev/null
@@ -1,296 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aaSorting" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default sorting is single column",
- null,
- function () {
- return oSettings.aaSorting.length == 1 && typeof oSettings.aaSorting[0] == 'object';
- }
- );
-
- oTest.fnWaitTest(
- "Default sorting is first column asc",
- null,
- function () {
- return oSettings.aaSorting[0].length == 3 && oSettings.aaSorting[0][0] == 0 &&
- oSettings.aaSorting[0][1] == 'asc';
- }
- );
-
- oTest.fnWaitTest(
- "Sorting is applied",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
-
- oTest.fnWaitTest(
- "Custom sorting on single string column asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaSorting": [['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
-
- oTest.fnWaitTest(
- "Custom sorting on single string column desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaSorting": [['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
-
- oTest.fnWaitTest(
- "Custom sorting on single int column asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaSorting": [['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
-
- oTest.fnWaitTest(
- "Custom sorting on single int column desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaSorting": [['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string asc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaSorting": [['0','asc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string asc / string desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaSorting": [['0','asc'], ['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string desc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaSorting": [['0','desc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "iPod Touch / iPhone"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string desc / string desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaSorting": [['0','desc'], ['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Safari 3.0"; }
- );
-
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string asc / int asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaSorting": [['0','asc'], ['3','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "1"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string asc / int desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaSorting": [['0','asc'], ['3','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "1.9"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string desc / int asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaSorting": [['0','desc'], ['3','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "125.5"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string desc / int desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaSorting": [['0','desc'], ['3','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (3 column) - string asc / int asc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaSorting": [['0','asc'], ['3','asc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody tr:eq(7) td:eq(1)').html() == "Firefox 1.0"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aaSortingFixed.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aaSortingFixed.js
deleted file mode 100644
index 287219c1..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aaSortingFixed.js
+++ /dev/null
@@ -1,88 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aaSortingFixed" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "No fixed sorting by default",
- null,
- function () {
- return oSettings.aaSortingFixed == null;
- }
- );
-
-
- oTest.fnWaitTest(
- "Fixed sorting on first column (string/asc) with user sorting on second column (string/asc)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaSortingFixed": [['0','asc']],
- "fnInitComplete": function () {
- $('#example thead th:eq(1)').click();
- }
- } );
- //
- },
- function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; }
- );
-
- oTest.fnWaitTest(
- "Fixed sorting on first column (string/asc) with user sorting on second column (string/desc)",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/asc)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "aaSortingFixed": [['3','asc']]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/desc)",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "PSP browser"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSearchable.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSearchable.js
deleted file mode 100644
index ff68c488..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSearchable.js
+++ /dev/null
@@ -1,83 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.bSeachable" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Columns are searchable by default",
- function () { oTable.fnFilter("Camino"); },
- function () {
- if ( $('#example tbody tr:eq(0) td:eq(1)')[0] )
- return $('#example tbody tr:eq(0) td:eq(1)').html().match(/Camino/);
- else
- return null;
- }
- );
-
- oTest.fnWaitTest(
- "Disabling sorting on a column removes it from the global filter",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser", "bSearchable": false },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- oSettings = oTable.fnSettings();
- oTable.fnFilter("Camino");
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnWaitTest(
- "Disabled on one column has no effect on other columns",
- function () { oTable.fnFilter("Webkit"); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; }
- );
-
- oTest.fnWaitTest(
- "Disable filtering on multiple columns",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine", "bSearchable": false },
- { "mData": "browser", "bSearchable": false },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- oSettings = oTable.fnSettings();
- oTable.fnFilter("Webkit");
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnWaitTest(
- "Filter on second disabled column",
- function () { oTable.fnFilter("Camino"); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSortable.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSortable.js
deleted file mode 100644
index da8104a6..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSortable.js
+++ /dev/null
@@ -1,116 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.bSortable" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "All columns are sortable by default",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Can disable sorting from one column",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser", "bSortable": false },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; }
- );
-
- oTest.fnWaitTest(
- "Disabled column has no sorting class",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") == false; }
- );
-
- oTest.fnWaitTest(
- "Other columns can still sort",
- function () {
- $('#example thead th:eq(4)').click();
- $('#example thead th:eq(4)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; }
- );
-
- oTest.fnWaitTest(
- "Disable sorting on multiple columns - no sorting classes",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser", "bSortable": false },
- { "mData": "platform" },
- { "mData": "version", "bSortable": false },
- { "mData": "grade" }
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example thead th:eq(1)').hasClass("sorting") ||
- $('#example thead th:eq(3)').hasClass("sorting")
- return bReturn == false;
- }
- );
-
- oTest.fnWaitTest(
- "Sorting on disabled column 1 has no effect",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; }
- );
-
- oTest.fnWaitTest(
- "Sorting on disabled column 2 has no effect",
- function () {
- $('#example thead th:eq(3)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; }
- );
-
- oTest.fnWaitTest(
- "Second sort on disabled column 2 has no effect",
- function () {
- $('#example thead th:eq(3)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; }
- );
-
- oTest.fnWaitTest(
- "Even with multiple disabled sorting columns other columns can still sort",
- function () {
- $('#example thead th:eq(4)').click();
- $('#example thead th:eq(4)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bUseRendered.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bUseRendered.js
deleted file mode 100644
index 160e18b0..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bUseRendered.js
+++ /dev/null
@@ -1,155 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.bUseRendered" );
-
-/* bUseRendered is used to alter sorting data, if false then the original data is used for
- * sorting rather than the rendered data
- */
-
-$(document).ready( function () {
- /* Check the default */
- var mTmp = 0;
-
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- {
- "mData": "browser",
- "fnRender": function (a) {
- if ( mTmp == 0 ) {
- mTmp++;
- return "aaa";
- } else
- return a.aData['browser'];
- }
- },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default for bUseRendered is true - rendered data is used for sorting",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'aaa'; }
- );
-
- oTest.fnWaitTest(
- "When bUseRendered is false, original data is used for sorting",
- function () {
- mTmp = 0;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- {
- "mData": "browser",
- "bUseRendered": false,
- "fnRender": function (a) {
- if ( mTmp == 0 ) {
- mTmp++;
- return "aaa";
- } else {
- return a.aData['browser'];
- }
- }
- },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; }
- );
-
-
- oTest.fnWaitTest(
- "bUseRendered set to false on one columns and true (default) on two others",
- function () {
- mTmp = 0;
- var mTmp2 = 0;
- var mTmp3 = 0;
-
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- {
- "mData": "engine",
- "fnRender": function (a) {
- if ( mTmp == 0 ) {
- mTmp++;
- return "aaa1";
- } else {
- return a.aData['engine'];
- }
- }
- },
- {
- "mData": "browser",
- "bUseRendered": false,
- "fnRender": function (a) {
- if ( mTmp2 == 0 ) {
- mTmp2++;
- return "aaa2";
- } else {
- return a.aData['browser'];
- }
- }
- },
- {
- "mData": "platform",
- "fnRender": function (a) {
- if ( mTmp3 == 0 ) {
- mTmp3++;
- return "zzz3";
- } else {
- return a.aData['platform'];
- }
- }
- },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'aaa1'; }
- );
-
- oTest.fnWaitTest(
- "Multi-column rendering - 2nd column sorting",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; }
- );
-
- oTest.fnWaitTest(
- "Multi-column rendering - 3rd column sorting",
- function () {
- $('#example thead th:eq(2)').click();
- $('#example thead th:eq(2)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(2)').html() == 'zzz3'; }
- );
-
- oTest.fnWaitTest(
- "Multi-column rendering - 4th column sorting",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == '-'; }
- );
-
- oTest.fnWaitTest(
- "Multi-column rendering - 5th column sorting",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bVisible.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bVisible.js
deleted file mode 100644
index 831027ce..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bVisible.js
+++ /dev/null
@@ -1,131 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.bVisible" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "All columns are visible by default",
- null,
- function () { return $('#example tbody tr:eq(0) td').length == 5; }
- );
-
- oTest.fnWaitTest(
- "Can hide one column and it removes td column from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser", "bVisible": false },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 4; }
- );
-
- oTest.fnWaitTest(
- "Can hide one column and it removes thead th column from DOM",
- null,
- function () { return $('#example thead tr:eq(0) th').length == 4; }
- );
-
- oTest.fnWaitTest(
- "The correct thead column has been hidden",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Platform(s)" &&
- jqNodes[2].innerHTML == "Engine version" &&
- jqNodes[3].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "The correct tbody column has been hidden",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } );
- },
- function () {
- var jqNodes = $('#example tbody tr:eq(0) td');
- var bReturn =
- jqNodes[0].innerHTML == "Gecko" &&
- jqNodes[1].innerHTML == "Gnome" &&
- jqNodes[2].innerHTML == "1.8" &&
- jqNodes[3].innerHTML == "A";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Can hide multiple columns and it removes td column from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser", "bVisible": false },
- { "mData": "platform", "bVisible": false },
- { "mData": "version" },
- { "mData": "grade", "bVisible": false }
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 2; }
- );
-
- oTest.fnWaitTest(
- "Multiple hide - removes thead th column from DOM",
- null,
- function () { return $('#example thead tr:eq(0) th').length == 2; }
- );
-
- oTest.fnWaitTest(
- "Multiple hide - the correct thead columns have been hidden",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Engine version"
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Multiple hide - the correct tbody columns have been hidden",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } );
- },
- function () {
- var jqNodes = $('#example tbody tr:eq(0) td');
- var bReturn =
- jqNodes[0].innerHTML == "Gecko" &&
- jqNodes[1].innerHTML == "1"
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.fnRender.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.fnRender.js
deleted file mode 100644
index cee101cf..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.fnRender.js
+++ /dev/null
@@ -1,177 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.fnRender" );
-
-$(document).ready( function () {
- /* Check the default */
- var mTmp = 0;
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- {
- "mData": "browser",
- "fnRender": function (a) {
- mTmp++;
- return a.aData['browser'];
- }
- },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Single column - fnRender is called twice for each row",
- null,
- function () { return mTmp == 57; }
- );
-
- oTest.fnWaitTest(
- "Confirm that fnRender passes two arguments with four parameters",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- {
- "fnRender": function (a) {
- if ( arguments.length != 2 || typeof a.iDataRow=='undefined' ||
- typeof a.iDataColumn=='undefined' || typeof a.aData=='undefined' ||
- typeof a.mData=='undefined' )
- {
- mTmp = false;
- }
- return a.aData['browser'];
- },
- "mData": "browser"
- },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnWaitTest(
- "fnRender iDataColumn is the column",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- {
- "mData": "browser",
- "fnRender": function (a) {
- if ( a.iDataColumn != 1 )
- {
- mTmp = false;
- }
- return a.aData['browser'];
- }
- },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnWaitTest(
- "fnRender aData is data array of correct size",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- {
- "mData": "browser",
- "fnRender": function (a) {
- if ( a.aData.length != 5 )
- {
- mTmp = false;
- }
- return a.aData['browser'];
- }
- },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnWaitTest(
- "Passed back data is put into the DOM",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- {
- "mData": "browser",
- "fnRender": function (a) {
- return 'unittest';
- }
- },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'unittest'; }
- );
-
- oTest.fnWaitTest(
- "Passed back data is put into the DOM",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- {
- "mData": "platform",
- "fnRender": function (a) {
- return 'unittest1';
- }
- },
- {
- "mData": "version",
- "fnRender": function (a) {
- return 'unittest2';
- }
- },
- { "mData": "grade" }
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example tbody tr:eq(0) td:eq(2)').html() == 'unittest1' &&
- $('#example tbody tr:eq(0) td:eq(3)').html() == 'unittest2';
- return bReturn; }
- );
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.iDataSort.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.iDataSort.js
deleted file mode 100644
index daf2967c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.iDataSort.js
+++ /dev/null
@@ -1,90 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.iDataSort" );
-
-$(document).ready( function () {
- /* Should know that sorting already works by default from other tests, so we can jump
- * right in here
- */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser", "iDataSort": 4 },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Sorting on first column is uneffected",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; }
- );
-
- oTest.fnWaitTest(
- "Sorting on second column is the order of the fifth",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
- oTest.fnWaitTest(
- "Reserve sorting on second column uses fifth column as well",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; }
- );
-
- oTest.fnWaitTest(
- "Sorting on 5th column retains it's own sorting",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
-
- oTest.fnWaitTest(
- "Use 2nd col for sorting 5th col and via-versa - no effect on first col sorting",
- function () {
- mTmp = 0;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser", "iDataSort": 4 },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade", "iDataSort": 1 }
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; }
- );
-
- oTest.fnWaitTest(
- "2nd col sorting uses fifth col",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
- oTest.fnWaitTest(
- "2nd col sorting uses fifth col - reversed",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; }
- );
-
- oTest.fnWaitTest(
- "5th col sorting uses 2nd col",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; }
- );
-
- oTest.fnWaitTest(
- "5th col sorting uses 2nd col - reversed",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'Seamonkey 1.1'; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sClass.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sClass.js
deleted file mode 100644
index 2958ab6d..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sClass.js
+++ /dev/null
@@ -1,122 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.sClass" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "By default the test class hasn't been applied to the column (sanity!)",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(2)').hasClass('unittest') == false; }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - first row",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform", "sClass": 'unittest' },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(1) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - third row",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - last row",
- null,
- function () { return $('#example tbody tr:eq(9) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - has not applied to other columns - 1st",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest') == false; }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - has not applied to other columns - 5th",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(4)').hasClass('unittest') == false; }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - seventh row - second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody tr:eq(6) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - has not applied to header",
- null,
- function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - has not applied to footer",
- null,
- function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; }
- );
-
-
- oTest.fnWaitTest(
- "Class defined for multiple columns - first row",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine", "sClass": 'unittest2' },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version", "sClass": 'unittest1' },
- { "mData": "grade" }
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest2') &&
- $('#example tbody tr:eq(8) td:eq(3)').hasClass('unittest1');
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Class defined for multiple columns - has not applied to other columns - 5th 1",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(4)').hasClass('unittest1') == false; }
- );
-
- oTest.fnWaitTest(
- "Class defined for multiple columns - has not applied to other columns - 5th 2",
- null,
- function () { return $('#example tbody tr:eq(6) td:eq(4)').hasClass('unittest2') == false; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sName.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sName.js
deleted file mode 100644
index a04686f9..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sName.js
+++ /dev/null
@@ -1,28 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.sName" );
-
-/* This has no effect at all in DOM methods - so we just check that it has applied the name */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version", "sName": 'unit test' },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Names are stored in the columns object",
- null,
- function () { return oSettings.aoColumns[3].sName =="unit test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sTitle.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sTitle.js
deleted file mode 100644
index 0d20b551..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sTitle.js
+++ /dev/null
@@ -1,89 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.sTitle" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "If not given, then the columns titles are empty",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Browser" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Can set a single column title - and others are read from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser", "sTitle": 'unit test' },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- },
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "unit test" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Can set multiple column titles",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser", "sTitle": 'unit test 1' },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade", "sTitle": 'unit test 2' }
- ]
- } );
- },
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "unit test 1" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "unit test 2";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sWidth.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sWidth.js
deleted file mode 100644
index 4cfc0d31..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sWidth.js
+++ /dev/null
@@ -1,87 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.sWidth" );
-
-/* NOTE - we need to disable the auto width for the majority of these test in order to preform
- * these tests as the auto width will convert the width to a px value. We can do 'non-exact' tests
- * with auto width enabled however to ensure it scales columns as required
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "bAutoWidth": false,
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser", "sWidth": '40%' },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "With auto width disabled the width for one column is appled",
- null,
- function () { return $('#example thead th:eq(1)')[0].style.width == "40%"; }
- );
-
- oTest.fnWaitTest(
- "With auto width disabled the width for one column is appled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "bAutoWidth": false,
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform", "sWidth": '20%' },
- { "mData": "version", "sWidth": '30%' },
- { "mData": "grade" }
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example thead th:eq(2)')[0].style.width == "20%" &&
- $('#example thead th:eq(3)')[0].style.width == "30%";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "With auto width, it will make the smallest column the largest with percentage width given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version", "sWidth": '40%' },
- { "mData": "grade" }
- ]
- } );
- },
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
-
- if ( a3>a0 && a3>a1 && a3>a2 && a3>a4 )
- return true;
- else
- return false;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoSearchCols.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoSearchCols.js
deleted file mode 100644
index f89f6d4c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/aoSearchCols.js
+++ /dev/null
@@ -1,161 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoSearchCols" );
-
-/* We could be here forever testing this one, so we test a limited subset on a couple of colums */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default should be to have a empty colums array",
- null,
- function () {
- var bReturn =
- oSettings.aoPreSearchCols[0].sSearch == 0 && !oSettings.aoPreSearchCols[0].bRegex &&
- oSettings.aoPreSearchCols[1].sSearch == 0 && !oSettings.aoPreSearchCols[1].bRegex &&
- oSettings.aoPreSearchCols[2].sSearch == 0 && !oSettings.aoPreSearchCols[2].bRegex &&
- oSettings.aoPreSearchCols[3].sSearch == 0 && !oSettings.aoPreSearchCols[3].bRegex &&
- oSettings.aoPreSearchCols[4].sSearch == 0 && !oSettings.aoPreSearchCols[4].bRegex;
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Search on a single column - no regex statement given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "aoSearchCols": [
- null,
- { "sSearch": "Mozilla" },
- null,
- { "sSearch": "1" },
- null
- ]
- } );
- },
- function () { return $('#example_info').html() == "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Search on two columns - no regex statement given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "aoSearchCols": [
- null,
- { "sSearch": "Mozilla" },
- null,
- { "sSearch": "1.5" },
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1.5"; }
- );
-
- oTest.fnWaitTest(
- "Search on single column - escape regex false",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "aoSearchCols": [
- { "sSearch": ".*ML", "bEscapeRegex": false },
- null,
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example_info').html() == "Showing 1 to 3 of 3 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Search on two columns - escape regex false on first, true on second",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "aoSearchCols": [
- { "sSearch": ".*ML", "bEscapeRegex": false },
- { "sSearch": "3.3", "bEscapeRegex": true },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Konqureror 3.3"; }
- );
-
- oTest.fnWaitTest(
- "Search on two columns (no records) - escape regex false on first, true on second",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "aoSearchCols": [
- { "sSearch": ".*ML", "bEscapeRegex": false },
- { "sSearch": "Allan", "bEscapeRegex": true },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/asStripClasses.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/asStripClasses.js
deleted file mode 100644
index 836350a8..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/asStripClasses.js
+++ /dev/null
@@ -1,133 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "asStripeClasses" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
-
- oTest.fnWaitTest(
- "Default row striping is applied",
- null,
- function () {
- return $('#example tbody tr:eq(0)').hasClass('odd') &&
- $('#example tbody tr:eq(1)').hasClass('even') &&
- $('#example tbody tr:eq(2)').hasClass('odd') &&
- $('#example tbody tr:eq(3)').hasClass('even');
- }
- );
-
- oTest.fnWaitTest(
- "Row striping on the second page",
- function () { $('#example_next').click(); },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('odd') &&
- $('#example tbody tr:eq(1)').hasClass('even') &&
- $('#example tbody tr:eq(2)').hasClass('odd') &&
- $('#example tbody tr:eq(3)').hasClass('even');
- }
- );
-
- /* No striping */
- oTest.fnWaitTest(
- "No row striping",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "asStripeClasses": []
- } );
- },
- function () {
- if ( typeof $('#example tbody tr:eq(1)')[0] == 'undefined' )
- {
- /* Use the 'wait for' to allow this to become true */
- return false;
- }
- return $('#example tbody tr:eq(0)')[0].className == "" &&
- $('#example tbody tr:eq(1)')[0].className == "" &&
- $('#example tbody tr:eq(2)')[0].className == "" &&
- $('#example tbody tr:eq(3)')[0].className == "";
- }
- );
-
- /* Custom striping */
- oTest.fnWaitTest(
- "Custom striping [2]",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "asStripeClasses": [ 'test1', 'test2' ]
- } );
- },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test1') &&
- $('#example tbody tr:eq(3)').hasClass('test2');
- }
- );
-
-
- /* long array of striping */
- oTest.fnWaitTest(
- "Custom striping [4]",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "asStripeClasses": [ 'test1', 'test2', 'test3', 'test4' ]
- } );
- },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test3') &&
- $('#example tbody tr:eq(3)').hasClass('test4');
- }
- );
-
- oTest.fnWaitTest(
- "Custom striping is restarted on second page [2]",
- function () { $('#example_next').click(); },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test3') &&
- $('#example tbody tr:eq(3)').hasClass('test4');
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bAutoWidth.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bAutoWidth.js
deleted file mode 100644
index eccab9f1..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bAutoWidth.js
+++ /dev/null
@@ -1,163 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bAutoWidth" );
-
-/* It's actually a little tricky to test this. We can't test absolute numbers because
- * different browsers and different platforms will render the width of the columns slightly
- * differently. However, we certainly can test the principle of what should happen (column
- * width doesn't change over pages)
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Auto width is enabled by default",
- null,
- function () { return oSettings.oFeatures.bAutoWidth; }
- );
-
- oTest.fnWaitTest(
- "First column has a width assigned to it",
- null,
- function () { return $('#example thead th:eq(0)').attr('style').match(/width/i); }
- );
-
- /*
- This would seem like a better test - but there appear to be difficulties with tables
- which are bigger (calculated) than there is actually room for. I suspect this is actually
- a bug in datatables
- oTest.fnWaitTest(
- "Check column widths on first page match second page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- console.log( a0, b0, a1, b1, a2, b2, a3, b3 );
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return true;
- else
- return false;
- }
- );
-
- oTest.fnWaitTest(
- "Check column widths on second page match thid page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return true;
- else
- return false;
- }
- );
- */
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Auto width can be disabled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bAutoWidth": false
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bAutoWidth == false; }
- );
-
- oTest.fnWaitTest(
- "First column does not have a width assigned to it",
- null,
- function () { return $('#example thead th:eq(0)').attr('style') == null; }
- );
-
- /*
- oTest.fnWaitTest(
- "Check column widths on first page do not match second page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return false;
- else
- return true;
- }
- );
- */
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Auto width enabled override",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bAutoWidth": true
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bAutoWidth; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bFilter.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bFilter.js
deleted file mode 100644
index 09b97302..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bFilter.js
+++ /dev/null
@@ -1,65 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bFilter" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
-
- oTest.fnWaitTest(
- "Filtering div exists by default",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Fltering can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bFilter": false
- } );
- },
- function () { return document.getElementById('example_filter') == null; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Filtering enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bFilter": true
- } );
- },
- function () { return document.getElementById('example_filter') != null; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bInfo.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bInfo.js
deleted file mode 100644
index 8a550d89..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bInfo.js
+++ /dev/null
@@ -1,65 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bInfo" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
-
- oTest.fnWaitTest(
- "Info div exists by default",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Info can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bInfo": false
- } );
- },
- function () { return document.getElementById('example_info') == null; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Info enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bInfo": true
- } );
- },
- function () { return document.getElementById('example_info') != null; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bLengthChange.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bLengthChange.js
deleted file mode 100644
index 4ce3a769..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bLengthChange.js
+++ /dev/null
@@ -1,96 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bLengthChange" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
-
- oTest.fnWaitTest(
- "Length div exists by default",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnWaitTest(
- "Four default options",
- null,
- function () { return $("select[name=example_length] option").length == 4; }
- );
-
- oTest.fnWaitTest(
- "Default options",
- null,
- function () {
- var opts = $("select[name='example_length'] option");
- return opts[0].getAttribute('value') == 10 && opts[1].getAttribute('value') == 25 &&
- opts[2].getAttribute('value') == 50 && opts[3].getAttribute('value') == 100;
- }
- );
-
- oTest.fnWaitTest(
- "Info takes length into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Change length can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bLengthChange": false
- } );
- },
- function () { return document.getElementById('example_length') == null; }
- );
-
- oTest.fnWaitTest(
- "Information takes length disabled into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Length change enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bLengthChange": true
- } );
- },
- function () { return document.getElementById('example_length') != null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bPaginate.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bPaginate.js
deleted file mode 100644
index ef891bd8..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bPaginate.js
+++ /dev/null
@@ -1,80 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bPaginate" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
-
- oTest.fnWaitTest(
- "Pagiantion div exists by default",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnWaitTest(
- "Information div takes paging into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Pagiantion can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bPaginate": false
- } );
- },
- function () { return document.getElementById('example_paginate') == null; }
- );
-
- oTest.fnWaitTest(
- "Information div takes paging disabled into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 57 of 57 entries"; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Pagiantion enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bPaginate": true
- } );
- },
- function () { return document.getElementById('example_paginate') != null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bProcessing.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bProcessing.js
deleted file mode 100644
index a6414265..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bProcessing.js
+++ /dev/null
@@ -1,124 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bProcessing" );
-
-/* It's actually a bit hard to set this one due to the fact that it will only be shown
- * when DataTables is doing some kind of processing. The server-side processing is a bit
- * better to test this than here - so we just the interal functions to enable it and check
- * that it is available
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Processing is off by default",
- null,
- function () { return oSettings.oFeatures.bProcessing == false; }
- );
-
- oTest.fnWaitTest(
- "Processing div is not in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnWaitTest(
- "Processing div cannot be shown",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnWaitTest(
- "Processing div cannot be hidden",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Processing can be enabled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bProcessing": true
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bProcessing == true; }
- );
-
- oTest.fnWaitTest(
- "Processing div is in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing'); }
- );
-
- oTest.fnWaitTest(
- "Processing div is hidden by default",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing').style.visibility = "hidden"; }
- );
-
- oTest.fnWaitTest(
- "Processing div can be shown",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing').style.visibility = "visible"; }
- );
-
- oTest.fnWaitTest(
- "Processing div can be hidden",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); },
- function () { return document.getElementById('example_processing').style.visibility = "hidden"; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Processing disabled override",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bProcessing": false
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bProcessing == false; }
- );
-
- oTest.fnWaitTest(
- "Processing div is not in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bServerSide.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bServerSide.js
deleted file mode 100644
index 53d075e0..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bServerSide.js
+++ /dev/null
@@ -1,27 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bServerSide" );
-
-/* Not interested in server-side processing here other than to check that it is off */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Server side is off by default",
- null,
- function () { return oSettings.oFeatures.bServerSide == false; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bSort.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bSort.js
deleted file mode 100644
index 9bc69a7a..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bSort.js
+++ /dev/null
@@ -1,120 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bSort" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
-
- oTest.fnWaitTest(
- "Sorting is on by default",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnWaitTest(
- "Sorting Asc by default class applied",
- null,
- function () { return $('#example thead th:eq(0)').hasClass("sorting_asc"); }
- );
-
- oTest.fnWaitTest(
- "Click on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Sorting class removed from first column",
- null,
- function () { return $('#example thead th:eq(0)').hasClass("sorting_asc") != true; }
- );
-
- oTest.fnWaitTest(
- "Sorting asc class applied to second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc"); }
- );
-
- oTest.fnWaitTest(
- "Reverse on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Sorting acs class removed from second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") != true; }
- );
-
- oTest.fnWaitTest(
- "Sorting desc class applied to second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_desc"); }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Pagiantion can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bSort": false
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- oTest.fnWaitTest(
- "Click on second column has no effect",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- oTest.fnWaitTest(
- "Reverse on second column has no effect",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Sorting enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bSort": true
- } );
- },
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bSortClasses.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bSortClasses.js
deleted file mode 100644
index 281fc5f8..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/bSortClasses.js
+++ /dev/null
@@ -1,153 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bSortClasses" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
-
- oTest.fnWaitTest(
- "Sorting classes are applied by default",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); }
- );
-
- oTest.fnWaitTest(
- "Sorting classes are applied to all required cells",
- null,
- function () { return $('#example tbody tr:eq(7) td:eq(0)').hasClass('sorting_1'); }
- );
-
- oTest.fnWaitTest(
- "Sorting classes are not applied to non-sorting columns",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_1') == false; }
- );
-
- oTest.fnWaitTest(
- "Sorting multi-column - add column 1",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2');
- }
- );
-
- oTest.fnWaitTest(
- "Sorting multi-column - add column 2",
- function () {
- oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3');
- }
- );
-
- oTest.fnWaitTest(
- "Sorting multi-column - add column 3",
- function () {
- oDispacher.click( $('#example thead th:eq(3)')[0], { 'shift': true } );
- },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') &&
- $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3');
- }
- );
-
- oTest.fnWaitTest(
- "Remove sorting classes on single column sort",
- function () {
- $('#example thead th:eq(4)').click();
- },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false &&
- $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3') == false;
- }
- );
-
- oTest.fnWaitTest(
- "Sorting class 1 was added",
- null,
- function () { return $('#example tbody tr:eq(1) td:eq(4)').hasClass('sorting_1'); }
- );
-
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Sorting classes can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bSortClasses": false
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false; }
- );
-
- oTest.fnWaitTest(
- "Sorting classes disabled - add column 1 - no effect",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false;
- }
- );
-
- oTest.fnWaitTest(
- "Sorting classes disabled - add column 2 - no effect",
- function () {
- oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false;
- }
- );
-
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Sorting classes enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bSortClasses": true
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnDrawCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnDrawCallback.js
deleted file mode 100644
index 05ae7b3f..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnDrawCallback.js
+++ /dev/null
@@ -1,126 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnDrawCallback" );
-
-/* Fairly boring function compared to the others! */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
- var mPass, bInit;
-
- oTest.fnWaitTest(
- "Default should be null",
- null,
- function () { return oSettings.fnDrawCallback == null; }
- );
-
-
- oTest.fnWaitTest(
- "One argument passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- bInit = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnDrawCallback": function ( ) {
- mPass = arguments.length;
- },
- "fnInitComplete": function () {
- bInit = true;
- }
- } );
- },
- function () { return mPass == 1 && bInit; }
- );
-
-
- oTest.fnWaitTest(
- "That one argument is the settings object",
- function () {
- oSession.fnRestore();
-
- bInit = false;
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnDrawCallback": function ( oSettings ) {
- mPass = oSettings;
- },
- "fnInitComplete": function () {
- bInit = true;
- }
- } );
- },
- function () { return oTable.fnSettings() == mPass && bInit; }
- );
-
-
- /* The draw callback is called once for the init and then when the data is added */
- oTest.fnWaitTest(
- "fnRowCallback called once on first draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- bInit = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnDrawCallback": function ( ) {
- mPass++;
- },
- "fnInitComplete": function () {
- bInit = true;
- }
- } );
- },
- function () { return mPass == 2 && bInit; }
- );
-
- oTest.fnWaitTest(
- "fnRowCallback called once on each draw there after as well",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return mPass == 5; }
- );
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnHeaderCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnHeaderCallback.js
deleted file mode 100644
index 8b27bed8..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnHeaderCallback.js
+++ /dev/null
@@ -1,254 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnHeaderCallback" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
- var mPass, bInit;
-
- oTest.fnWaitTest(
- "Default should be null",
- null,
- function () { return oSettings.fnHeaderCallback == null; }
- );
-
-
- oTest.fnWaitTest(
- "Five arguments passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- bInit = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnHeaderCallback": function ( ) {
- mPass = arguments.length;
- },
- "fnInitComplete": function () {
- bInit = true;
- }
- } );
- },
- function () { return mPass == 5 && bInit; }
- );
-
-
- /* The header callback is called once for the init and then when the data is added */
- oTest.fnWaitTest(
- "fnHeaderCallback called once per draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- bInit = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- mPass++;
- },
- "fnInitComplete": function () {
- bInit = true;
- }
- } );
- },
- function () { return mPass == 2 && bInit; }
- );
-
- oTest.fnWaitTest(
- "fnRowCallback called on paging (i.e. another draw)",
- function () { $('#example_next').click(); },
- function () { return mPass == 3; }
- );
-
-
- oTest.fnWaitTest(
- "fnRowCallback allows us to alter row information",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records";
- }
- } );
- },
- function () { return $('#example thead th:eq(0)').html() == "Displaying 10 records"; }
- );
-
-
- oTest.fnWaitTest(
- "iStart correct on first page",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iStart != 0 )
- {
- mPass = false;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnWaitTest(
- "iStart correct on second page",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iStart == 10 )
- {
- mPass = true;
- }
- },
- "fnInitComplete": function () {
- $('#example_next').click();
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnWaitTest(
- "iEnd correct on second page",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iEnd == 20 )
- {
- mPass = true;
- }
- },
- "fnInitComplete": function () {
- $('#example_next').click();
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnWaitTest(
- "aiDisplay length is full data when not filtered",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( aiDisplay.length == 57 )
- {
- mPass = true;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnWaitTest(
- "aiDisplay length is 9 when filtering on 'Mozilla'",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( aiDisplay.length == 9 )
- {
- mPass = true;
- }
- }
- } );
- oTable.fnFilter( "Mozilla" );
- },
- function () { return mPass; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnInitComplete.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnInitComplete.js
deleted file mode 100644
index dd5402f0..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnInitComplete.js
+++ /dev/null
@@ -1,135 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnInitComplete" );
-
-/* Fairly boring function compared to the others! */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnWaitTest(
- "Default should be null",
- null,
- function () { return oSettings.fnInitComplete == null; }
- );
-
-
- oTest.fnWaitTest(
- "Two arguments passed (for Ajax!)",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnInitComplete": function ( ) {
- mPass = arguments.length;
- }
- } );
- },
- function () { return mPass == 2; }
- );
-
-
- oTest.fnWaitTest(
- "That one argument is the settings object",
- function () {
- oSession.fnRestore();
-
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnInitComplete": function ( oSettings ) {
- mPass = oSettings;
- }
- } );
- },
- function () { return oTable.fnSettings() == mPass; }
- );
-
-
- oTest.fnWaitTest(
- "fnInitComplete called once on first draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnInitComplete": function ( ) {
- mPass++;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
- oTest.fnWaitTest(
- "fnInitComplete never called there after",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return mPass == 1; }
- );
-
-
- oTest.fnWaitTest(
- "10 rows in the table on complete",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnInitComplete": function ( ) {
- mPass = $('#example tbody tr').length;
- }
- } );
- },
- function () { return mPass == 10; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnRowCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnRowCallback.js
deleted file mode 100644
index d54e3626..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnRowCallback.js
+++ /dev/null
@@ -1,154 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnRowCallback" );
-
-/* Note - fnRowCallback MUST return the first arguments (modified or not) */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnWaitTest(
- "Default should be null",
- null,
- function () { return oSettings.fnRowCallback == null; }
- );
-
-
- oTest.fnWaitTest(
- "Four arguments passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnRowCallback": function ( nTr ) {
- mPass = arguments.length;
- return nTr;
- }
- } );
- },
- function () { return mPass == 4; }
- );
-
-
- oTest.fnWaitTest(
- "fnRowCallback called once for each drawn row",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- mPass++;
- return nTr;
- }
- } );
- },
- function () { return mPass == 10; }
- );
-
- oTest.fnWaitTest(
- "fnRowCallback allows us to alter row information",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- $(nTr).addClass('unit_test');
- return nTr;
- }
- } );
- },
- function () { return $('#example tbody tr:eq(1)').hasClass('unit_test'); }
- );
-
- oTest.fnWaitTest(
- "Data array has length matching columns",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- if ( asData.length != 5 )
- mPass = false;
- return nTr;
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnWaitTest(
- "Data array has length matching columns",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- var iCount = 0;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- if ( iCount != iDrawIndex )
- mPass = false;
- iCount++;
- return nTr;
- }
- } );
- },
- function () { return mPass; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnServerData.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnServerData.js
deleted file mode 100644
index 207a6f1b..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/fnServerData.js
+++ /dev/null
@@ -1,92 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnServerData for Ajax sourced data" );
-
-$(document).ready( function () {
- var mPass;
-
- oTest.fnTest(
- "Argument length",
- function () {
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnServerData": function () {
- mPass = arguments.length;
- }
- } );
- },
- function () { return mPass == 4; }
- );
-
- oTest.fnTest(
- "Url",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnServerData": function (sUrl, aoData, fnCallback, oSettings) {
- mPass = sUrl == "../../../examples/ajax/sources/objects.txt";
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "Data array",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnServerData": function (sUrl, aoData, fnCallback, oSettings) {
- mPass = aoData.length==0;
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "Callback function",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "fnServerData": function (sUrl, aoData, fnCallback, oSettings) {
- mPass = typeof fnCallback == 'function';
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/iDisplayLength.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/iDisplayLength.js
deleted file mode 100644
index 56983e65..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/iDisplayLength.js
+++ /dev/null
@@ -1,109 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "iDisplayLength" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
-
- oTest.fnWaitTest(
- "Default length is ten",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnWaitTest(
- "Select menu shows 10",
- null,
- function () { return $('#example_length select').val() == 10; }
- );
-
-
- oTest.fnWaitTest(
- "Set initial length to 25",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "iDisplayLength": 25
- } );
- },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnWaitTest(
- "Select menu shows 25",
- null,
- function () { return $('#example_length select').val() == 25; }
- );
-
-
- oTest.fnWaitTest(
- "Set initial length to 100",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "iDisplayLength": 100
- } );
- },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnWaitTest(
- "Select menu shows 25",
- null,
- function () { return $('#example_length select').val() == 100; }
- );
-
-
- oTest.fnWaitTest(
- "Set initial length to 23 (unknown select menu length)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "iDisplayLength": 23
- } );
- },
- function () { return $('#example tbody tr').length == 23; }
- );
-
- oTest.fnWaitTest(
- "Select menu shows 10 (since 23 is unknow)",
- null,
- function () { return $('#example_length select').val() == 10; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.oPaginate.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.oPaginate.js
deleted file mode 100644
index e0c286ac..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.oPaginate.js
+++ /dev/null
@@ -1,98 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.oPaginate" );
-
-/* Note that the paging language information only has relevence in full numbers */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "sPaginationType": "full_numbers"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "oLanguage.oPaginate defaults",
- null,
- function () {
- var bReturn =
- oSettings.oLanguage.oPaginate.sFirst == "First" &&
- oSettings.oLanguage.oPaginate.sPrevious == "Previous" &&
- oSettings.oLanguage.oPaginate.sNext == "Next" &&
- oSettings.oLanguage.oPaginate.sLast == "Last";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "oLanguage.oPaginate defaults are in the DOM",
- null,
- function () {
- var bReturn =
- $('#example_paginate .first').html() == "First" &&
- $('#example_paginate .previous').html() == "Previous" &&
- $('#example_paginate .next').html() == "Next" &&
- $('#example_paginate .last').html() == "Last";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "oLanguage.oPaginate can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "sPaginationType": "full_numbers",
- "oLanguage": {
- "oPaginate": {
- "sFirst": "unit1",
- "sPrevious": "test2",
- "sNext": "unit3",
- "sLast": "test4"
- }
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var bReturn =
- oSettings.oLanguage.oPaginate.sFirst == "unit1" &&
- oSettings.oLanguage.oPaginate.sPrevious == "test2" &&
- oSettings.oLanguage.oPaginate.sNext == "unit3" &&
- oSettings.oLanguage.oPaginate.sLast == "test4";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "oLanguage.oPaginate definitions are in the DOM",
- null,
- function () {
- var bReturn =
- $('#example_paginate .first').html() == "unit1" &&
- $('#example_paginate .previous').html() == "test2" &&
- $('#example_paginate .next').html() == "unit3" &&
- $('#example_paginate .last').html() == "test4";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfo.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfo.js
deleted file mode 100644
index 53d60859..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfo.js
+++ /dev/null
@@ -1,166 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sInfo" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Info language is 'Showing _START_ to _END_ of _TOTAL_ entries' by default",
- null,
- function () { return oSettings.oLanguage.sInfo == "Showing _START_ to _END_ of _TOTAL_ entries"; }
- );
-
- oTest.fnTest(
- "Info language default is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; }
- );
-
-
- oTest.fnWaitTest(
- "Info language can be defined - without any macros",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sInfo": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sInfo == "unit test"; }
- );
-
- oTest.fnTest(
- "Info language definition is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "unit test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macro _START_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sInfo": "unit _START_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macro _END_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sInfo": "unit _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 10 test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macro _TOTAL_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sInfo": "unit _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 57 test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macros _START_ and _END_",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sInfo": "unit _START_ _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 10 test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macros _START_, _END_ and _TOTAL_",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sInfo": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 10 57 test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoEmpty.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoEmpty.js
deleted file mode 100644
index da767fff..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoEmpty.js
+++ /dev/null
@@ -1,100 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sInfoEmpty" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Info empty language is 'Showing 0 to 0 of 0 entries' by default",
- function () { oTable.fnFilter("nothinghere"); },
- function () { return oSettings.oLanguage.sInfoEmpty == "Showing 0 to 0 of 0 entries"; }
- );
-
- oTest.fnTest(
- "Info empty language default is in the DOM",
- null,
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "Showing 0 to 0 of 0 entries";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Info empty language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sInfoEmpty": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- oTable.fnFilter("nothinghere");
- },
- function () { return oSettings.oLanguage.sInfoEmpty == "unit test"; }
- );
-
- oTest.fnTest(
- "Info empty language default is in the DOM",
- null,
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "unit test";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Macro's replaced",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sInfoEmpty": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- oTable.fnFilter("nothinghere");
- },
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "unit 1 0 0 test";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoPostFix.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoPostFix.js
deleted file mode 100644
index 67bbcdc7..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoPostFix.js
+++ /dev/null
@@ -1,106 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sInfoPostFix" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Info post fix language is '' (blank) by default",
- null,
- function () { return oSettings.oLanguage.sInfoPostFix == ""; }
- );
-
- oTest.fnTest(
- "Width no post fix, the basic info shows",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; }
- );
-
-
- oTest.fnWaitTest(
- "Info post fix language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sInfoPostFix": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sInfoPostFix == "unit test"; }
- );
-
- oTest.fnTest(
- "Info empty language default is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit test"; }
- );
-
-
- oTest.fnWaitTest(
- "Macros have no effect in the post fix",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sInfoPostFix": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit _START_ _END_ _TOTAL_ test"; }
- );
-
-
- oTest.fnWaitTest(
- "Post fix is applied after fintering info",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sInfoPostFix": "unit test"
- }
- } );
- oTable.fnFilter("nothinghere");
- },
- function () { return document.getElementById('example_info').innerHTML = "Showing 0 to 0 of 0 entries unit (filtered from 57 total entries) test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sLengthMenu.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sLengthMenu.js
deleted file mode 100644
index a079b2e8..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sLengthMenu.js
+++ /dev/null
@@ -1,139 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sLengthMenu" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Menu language is 'Show _MENU_ entries' by default",
- null,
- function () { return oSettings.oLanguage.sLengthMenu == "Show _MENU_ entries"; }
- );
-
- oTest.fnTest(
- "_MENU_ macro is replaced by select menu in DOM",
- null,
- function () { return $('select', oSettings.aanFeatures.l[0]).length == 1 }
- );
-
- oTest.fnTest(
- "A label input is used",
- null,
- function () { return $('label', oSettings.aanFeatures.l[0]).length == 1 }
- );
-
- oTest.fnTest(
- "Default is put into DOM",
- null,
- function () {
- var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes;
- var bReturn =
- anChildren[0].nodeValue == "Show " &&
- anChildren[2].nodeValue == " entries";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Menu length language can be defined - no _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sLengthMenu": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sLengthMenu == "unit test"; }
- );
-
- oTest.fnTest(
- "Menu length language definition is in the DOM",
- null,
- function () {
- return $('label', oSettings.aanFeatures.l[0]).text() == "unit test";
- }
- );
-
-
- oTest.fnWaitTest(
- "Menu length language can be defined - with _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sLengthMenu": "unit _MENU_ test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes;
- var bReturn =
- anChildren[0].nodeValue == "unit " &&
- anChildren[2].nodeValue == " test";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Only the _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sLengthMenu": "_MENU_"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var anChildren = oSettings.aanFeatures.l[0].childNodes;
- var bReturn =
- anChildren.length == 1 &&
- $('select', oSettings.aanFeatures.l[0]).length == 1;
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sProcessing.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sProcessing.js
deleted file mode 100644
index ec387cf5..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sProcessing.js
+++ /dev/null
@@ -1,63 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sProcessing" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ],
- "bProcessing": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Processing language is 'Processing...' by default",
- null,
- function () { return oSettings.oLanguage.sProcessing == "Processing..."; }
- );
-
- oTest.fnTest(
- "Processing language default is in the DOM",
- null,
- function () { return document.getElementById('example_processing').innerHTML = "Processing..."; }
- );
-
-
- oTest.fnWaitTest(
- "Processing language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "bProcessing": true,
- "oLanguage": {
- "sProcessing": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sProcessing == "unit test"; }
- );
-
- oTest.fnTest(
- "Processing language definition is in the DOM",
- null,
- function () { return document.getElementById('example_processing').innerHTML = "unit test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sSearch.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sSearch.js
deleted file mode 100644
index 316c2961..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sSearch.js
+++ /dev/null
@@ -1,91 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sSearch" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Search language is 'Search:' by default",
- null,
- function () { return oSettings.oLanguage.sSearch == "Search:"; }
- );
-
- oTest.fnTest(
- "A label input is used",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).length == 1 }
- );
-
- oTest.fnTest(
- "Search language default is in the DOM",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).text()
- == "Search: "; }
- );
-
-
- oTest.fnWaitTest(
- "Search language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sSearch": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sSearch == "unit test"; }
- );
-
- oTest.fnTest(
- "Info language definition is in the DOM",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).text().indexOf('unit test') !== -1; }
- );
-
-
- oTest.fnWaitTest(
- "Blank search has a no space (separator) inserted",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sSearch": ""
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return document.getElementById('example_filter').childNodes.length == 1; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sUrl.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sUrl.js
deleted file mode 100644
index 8e8d304a..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sUrl.js
+++ /dev/null
@@ -1,76 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sUrl" );
-
-/* Note that we only test the internal storage of language information pulled form a file here
- * as the other language tests will check it goes into the DOM correctly
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "sUrl is blank by default",
- null,
- function () { return oSettings.oLanguage.sUrl == ""; }
- );
-
-
- oTest.fnWaitTest(
- "Loading of German file loads language information",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sUrl": "../../../examples/examples_support/de_DE.txt"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var bReturn =
- oSettings.oLanguage.sProcessing == "Bitte warten..." &&
- oSettings.oLanguage.sLengthMenu == "_MENU_ Einträge anzeigen" &&
- oSettings.oLanguage.sZeroRecords == "Keine Einträge vorhanden." &&
- oSettings.oLanguage.sInfo == "_START_ bis _END_ von _TOTAL_ Einträgen" &&
- oSettings.oLanguage.sInfoEmpty == "0 bis 0 von 0 Einträgen" &&
- oSettings.oLanguage.sInfoFiltered == "(gefiltert von _MAX_ Einträgen)" &&
- oSettings.oLanguage.sInfoPostFix == "" &&
- oSettings.oLanguage.sSearch == "Suchen" &&
- oSettings.oLanguage.oPaginate.sFirst == "Erster" &&
- oSettings.oLanguage.oPaginate.sPrevious == "Zurück" &&
- oSettings.oLanguage.oPaginate.sNext == "Nächster" &&
- oSettings.oLanguage.oPaginate.sLast == "Letzter";
-
- return bReturn;
- }
- );
-
- /* One DOM check just to ensure that they go into the DOM */
- oTest.fnTest(
- "Loaded language goes into the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "1 bis 10 von 57 Einträgen"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sZeroRecords.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sZeroRecords.js
deleted file mode 100644
index c0f4564b..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sZeroRecords.js
+++ /dev/null
@@ -1,62 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sZeroRecords" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Zero records language is 'No matching records found' by default",
- null,
- function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; }
- );
-
- oTest.fnWaitTest(
- "Text is shown when empty table (after filtering)",
- function () { oTable.fnFilter('nothinghere'); },
- function () { return $('#example tbody tr td')[0].innerHTML == "No matching records found" }
- );
-
-
-
- oTest.fnWaitTest(
- "Zero records language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oLanguage": {
- "sZeroRecords": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sZeroRecords == "unit test"; }
- );
-
- oTest.fnWaitTest(
- "Text is shown when empty table (after filtering)",
- function () { oTable.fnFilter('nothinghere2'); },
- function () { return $('#example tbody tr td')[0].innerHTML == "unit test" }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oSearch.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oSearch.js
deleted file mode 100644
index 42dc3572..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/oSearch.js
+++ /dev/null
@@ -1,150 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oSearch" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default values should be blank",
- null,
- function () {
- var bReturn = oSettings.oPreviousSearch.sSearch == "" &&
- !oSettings.oPreviousSearch.bRegex;
- return bReturn;
- }
- );
-
- /* This test might be considered iffy since the full object isn't given, but it's reasonable to
- * expect DataTables to cope with this. It should just assumine regex false
- */
- oTest.fnWaitTest(
- "Search term only in object",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oSearch": {
- "sSearch": "Mozilla"
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnWaitTest(
- "New search will kill old one",
- function () {
- oTable.fnFilter("Opera");
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; }
- );
-
- oTest.fnWaitTest(
- "Search plain text term and escape regex true",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oSearch": {
- "sSearch": "DS",
- "bRegex": false
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Nintendo DS browser"; }
- );
-
- oTest.fnWaitTest(
- "Search plain text term and escape regex false",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oSearch": {
- "sSearch": "Opera",
- "bRegex": true
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; }
- );
-
- oTest.fnWaitTest(
- "Search regex text term and escape regex true",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oSearch": {
- "sSearch": "1.*",
- "bRegex": false
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnWaitTest(
- "Search regex text term and escape regex false",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "oSearch": {
- "sSearch": "1.*",
- "bRegex": true
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/sAjaxSource.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/sAjaxSource.js
deleted file mode 100644
index 00ae9b3f..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/sAjaxSource.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "sAjaxSource" );
-
-/* Sanitfy check really - all the other tests blast this */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Server side is off by default",
- null,
- function () {
- return oSettings.sAjaxSource == "../../../examples/ajax/sources/objects.txt";
- }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/sDom.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/sDom.js
deleted file mode 100644
index 2486413b..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/sDom.js
+++ /dev/null
@@ -1,311 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "sDom" );
-
-/* This is going to be brutal on the browser! There is a lot that can be tested here... */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default DOM varaible",
- null,
- function () { return oSettings.sDom == "lfrtip"; }
- );
-
- oTest.fnWaitTest(
- "Default DOM in document",
- null,
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- nNodes[4] == nInfo &&
- nNodes[5] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check example 1 in code propagates",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "sDom": '<"wrapper"flipt>'
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.sDom == '<"wrapper"flipt>'; }
- );
-
- oTest.fnWaitTest(
- "Check example 1 in DOM",
- null,
- function () {
- var jqNodes = $('#demo div, #demo table');
- var nNodes = [];
-
- /* Strip the paging nodes */
- for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ )
- {
- if ( jqNodes[i].getAttribute('id') != "example_previous" &&
- jqNodes[i].getAttribute('id') != "example_next" )
- {
- nNodes.push( jqNodes[i] );
- }
- }
-
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
- var nCustomWrapper = $('div.wrapper')[0];
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nCustomWrapper &&
- nNodes[2] == nFilter &&
- nNodes[3] == nLength &&
- nNodes[4] == nInfo &&
- nNodes[5] == nPaging &&
- nNodes[6] == nTable;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check example 2 in DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "sDom": '<lf<t>ip>'
- } );
- },
- function () {
- var jqNodes = $('#demo div, #demo table');
- var nNodes = [];
- var nCustomWrappers = []
-
- /* Strip the paging nodes */
- for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ )
- {
- if ( jqNodes[i].getAttribute('id') != "example_previous" &&
- jqNodes[i].getAttribute('id') != "example_next" )
- {
- nNodes.push( jqNodes[i] );
- }
-
- /* Only the two custom divs don't have class names */
- if ( jqNodes[i].className == "" )
- {
- nCustomWrappers.push( jqNodes[i] );
- }
- }
-
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nCustomWrappers[0] &&
- nNodes[2] == nLength &&
- nNodes[3] == nFilter &&
- nNodes[4] == nCustomWrappers[1] &&
- nNodes[5] == nTable &&
- nNodes[6] == nInfo &&
- nNodes[7] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check no length element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "sDom": 'frtip'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- null == nLength &&
- nNodes[1] == nFilter &&
- nNodes[2] == nTable &&
- nNodes[3] == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check no filter element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "sDom": 'lrtip'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- null == nFilter &&
- nNodes[2] == nTable &&
- nNodes[3] == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- /* Note we don't test for no table as this is not supported (and it would be fairly daft! */
-
- oTest.fnWaitTest(
- "Check no info element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "sDom": 'lfrtp'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- null == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check no paging element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "sDom": 'lfrti'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- nNodes[4] == nInfo &&
- null == nPaging;
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/sPaginationType.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/sPaginationType.js
deleted file mode 100644
index 8bec597c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/5_ajax_objects/sPaginationType.js
+++ /dev/null
@@ -1,148 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "sPaginationType" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumns": [
- { "mData": "engine" },
- { "mData": "browser" },
- { "mData": "platform" },
- { "mData": "version" },
- { "mData": "grade" }
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Check two button paging is the default",
- null,
- function () { return oSettings.sPaginationType == "two_button"; }
- );
-
- oTest.fnWaitTest(
- "Check class is applied",
- null,
- function () { return $('#example_paginate').hasClass('paging_two_button'); }
- );
-
- oTest.fnWaitTest(
- "Two A elements are in the wrapper",
- null,
- function () { return $('#example_paginate a').length == 2; }
- );
-
- oTest.fnWaitTest(
- "We have the previous button",
- null,
- function () { return document.getElementById('example_previous'); }
- );
-
- oTest.fnWaitTest(
- "We have the next button",
- null,
- function () { return document.getElementById('example_next'); }
- );
-
- oTest.fnWaitTest(
- "Previous button is disabled",
- null,
- function () { return $('#example_previous').hasClass('paginate_disabled_previous'); }
- );
-
- oTest.fnWaitTest(
- "Next button is enabled",
- null,
- function () { return $('#example_next').hasClass('paginate_enabled_next'); }
- );
-
- /* Don't test paging - that's done by the zero config test script. */
-
-
- /* Two buttons paging */
- var bComplete = false;
- oTest.fnWaitTest(
- "Can enabled full numbers paging",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/objects.txt",
- "aoColumnDefs": [
- { "mData": "engine", "aTargets": [0] },
- { "mData": "browser", "aTargets": [1] },
- { "mData": "platform", "aTargets": [2] },
- { "mData": "version", "aTargets": [3] },
- { "mData": "grade", "aTargets": [4] }
- ],
- "sPaginationType": "full_numbers",
- "fnInitComplete": function () {
- bComplete = true;
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- if ( bComplete )
- return oSettings.sPaginationType == "full_numbers";
- else
- return false;
- }
- );
-
- oTest.fnWaitTest(
- "Check full numbers class is applied",
- null,
- function () { return $('#example_paginate').hasClass('paging_full_numbers'); }
- );
-
-
- var nFirst, nPrevious, nNext, nLast;
- oTest.fnWaitTest(
- "Jump to last page",
- function () {
- nFirst = $('div.dataTables_paginate a.first');
- nPrevious = $('div.dataTables_paginate a.previous');
- nNext = $('div.dataTables_paginate a.next');
- nLast = $('div.dataTables_paginate a.last');
- nLast.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries";
- }
- );
-
- oTest.fnWaitTest(
- "Go to two pages previous",
- function () {
- nPrevious.click();
- nPrevious.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 31 to 40 of 57 entries";
- }
- );
-
- oTest.fnWaitTest(
- "Next (second last) page",
- function () {
- nNext.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 41 to 50 of 57 entries";
- }
- );
-
- oTest.fnWaitTest(
- "Jump to first page",
- function () {
- nFirst.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries";
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/_zero_config.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/_zero_config.js
deleted file mode 100644
index 52180696..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/_zero_config.js
+++ /dev/null
@@ -1,403 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "Sanity checks for DataTables with delayed DOM creation" );
-
-$(document).ready( function () {
- var oInit = {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- };
- $('#example').dataTable( oInit );
-
- oTest.fnWaitTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnWaitTest(
- "10 TR elements available from fnGetNodes",
- null,
- function () { return $('#example').dataTable().fnGetNodes().length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "14 TR elements available from fnGetNodes after sort",
- null,
- function () { return $('#example').dataTable().fnGetNodes().length == 14; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back on first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 25 records - second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with 100 records - first page",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('100').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information back to 10 records",
- function () {
- $('#example_previous').click();
- $("select[name=example_length]").val('10').change();
- },
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' last page",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' back to first page",
- function () {
- $('#example_previous').click();
- $('#example_previous').click();
- $('#example_previous').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - second time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter increased to 'Win 98'",
- function () { $('#example_filter input').val("Win 98").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter decreased to 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter 'Win' second page - third time",
- function () {
- $('#example_next').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Information with filter removed",
- function () { $('#example_filter input').val("").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
-
- /*
- * Filtering
- */
- oTest.fnWaitTest(
- "Filter 'W' - rows",
- function () {
- /* Reset the table such that the old sorting doesn't mess things up */
- oSession.fnRestore();
- $('#example').dataTable( oInit );
- $('#example_filter input').val("W").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnTest(
- "Filter 'W' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Wi'",
- function () { $('#example_filter input').val("Wi").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win'",
- function () { $('#example_filter input').val("Win").keyup(); },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting column 1 reverse",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - maintaing reverse sorting col 1",
- function () { $('#example_filter input').val("Win XP").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; }
- );
-
- oTest.fnTest(
- "Filter 'Win XP' - sorting col 3 - reversed",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; }
- );
-
- oTest.fnTest(
- "Filter 'Win' - sorting col 3 - reversed info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere'",
- function () { $('#example_filter input').val("nothinghere").keyup(); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() ==
- "No matching records found"; }
- );
-
- oTest.fnTest(
- "Filter 'nothinghere' - info",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Filter back to blank and 1st column sorting",
- function () {
- $('#example_filter input').val("").keyup();
- $('#example thead th:eq(0)').click();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry",
- function () {
- $('#example_filter input').val("Win").keyup();
- $('#example_filter input').val("GeckoWin").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnTest(
- "Prefixing a filter entry with space",
- function () {
- $('#example_filter input').val("Gecko Win").keyup();
- },
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; }
- );
-
-
-
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aaSorting.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aaSorting.js
deleted file mode 100644
index a71b5ebc..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aaSorting.js
+++ /dev/null
@@ -1,212 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aaSorting" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default sorting is single column",
- null,
- function () {
- return oSettings.aaSorting.length == 1 && typeof oSettings.aaSorting[0] == 'object';
- }
- );
-
- oTest.fnWaitTest(
- "Default sorting is first column asc",
- null,
- function () {
- return oSettings.aaSorting[0].length == 3 && oSettings.aaSorting[0][0] == 0 &&
- oSettings.aaSorting[0][1] == 'asc';
- }
- );
-
- oTest.fnWaitTest(
- "Sorting is applied",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
-
- oTest.fnWaitTest(
- "Custom sorting on single string column asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aaSorting": [['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
-
- oTest.fnWaitTest(
- "Custom sorting on single string column desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aaSorting": [['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
-
- oTest.fnWaitTest(
- "Custom sorting on single int column asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aaSorting": [['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
-
- oTest.fnWaitTest(
- "Custom sorting on single int column desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aaSorting": [['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string asc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aaSorting": [['0','asc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string asc / string desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aaSorting": [['0','asc'], ['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string desc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aaSorting": [['0','desc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "iPod Touch / iPhone"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string desc / string desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aaSorting": [['0','desc'], ['1','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(1)').html() == "Safari 3.0"; }
- );
-
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string asc / int asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aaSorting": [['0','asc'], ['3','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "1"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string asc / int desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aaSorting": [['0','asc'], ['3','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "1.9"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string desc / int asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aaSorting": [['0','desc'], ['3','asc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "125.5"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (2 column) - string desc / int desc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aaSorting": [['0','desc'], ['3','desc']]
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnWaitTest(
- "Multi-column sorting (3 column) - string asc / int asc / string asc",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aaSorting": [['0','asc'], ['3','asc'], ['1','asc']]
- } );
- },
- function () { return $('#example tbody tr:eq(7) td:eq(1)').html() == "Firefox 1.0"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aaSortingFixed.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aaSortingFixed.js
deleted file mode 100644
index 7211b288..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aaSortingFixed.js
+++ /dev/null
@@ -1,70 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aaSortingFixed" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "No fixed sorting by default",
- null,
- function () {
- return oSettings.aaSortingFixed == null;
- }
- );
-
-
- oTest.fnWaitTest(
- "Fixed sorting on first column (string/asc) with user sorting on second column (string/asc)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aaSortingFixed": [['0','asc']],
- "fnInitComplete": function () {
- $('#example thead th:eq(1)').click();
- }
- } );
- //
- },
- function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; }
- );
-
- oTest.fnWaitTest(
- "Fixed sorting on first column (string/asc) with user sorting on second column (string/desc)",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/asc)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aaSortingFixed": [['3','asc']]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/desc)",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody td:eq(1)').html() == "PSP browser"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSearchable.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSearchable.js
deleted file mode 100644
index d3baf91e..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSearchable.js
+++ /dev/null
@@ -1,79 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.bSeachable" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Columns are searchable by default",
- function () { oTable.fnFilter("Camino"); },
- function () {
- if ( $('#example tbody tr:eq(0) td:eq(1)')[0] )
- return $('#example tbody tr:eq(0) td:eq(1)').html().match(/Camino/);
- else
- return null;
- }
- );
-
- oTest.fnWaitTest(
- "Disabling sorting on a column removes it from the global filter",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- { "bSearchable": false },
- null,
- null,
- null
- ]
- } );
- oSettings = oTable.fnSettings();
- oTable.fnFilter("Camino");
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnWaitTest(
- "Disabled on one column has no effect on other columns",
- function () { oTable.fnFilter("Webkit"); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; }
- );
-
- oTest.fnWaitTest(
- "Disable filtering on multiple columns",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- { "bSearchable": false },
- { "bSearchable": false },
- null,
- null,
- null
- ]
- } );
- oSettings = oTable.fnSettings();
- oTable.fnFilter("Webkit");
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnWaitTest(
- "Filter on second disabled column",
- function () { oTable.fnFilter("Camino"); },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSortable.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSortable.js
deleted file mode 100644
index f6976fc2..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSortable.js
+++ /dev/null
@@ -1,112 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.bSortable" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "All columns are sortable by default",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Can disable sorting from one column",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- { "bSortable": false },
- null,
- null,
- null
- ]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; }
- );
-
- oTest.fnWaitTest(
- "Disabled column has no sorting class",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") == false; }
- );
-
- oTest.fnWaitTest(
- "Other columns can still sort",
- function () {
- $('#example thead th:eq(4)').click();
- $('#example thead th:eq(4)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; }
- );
-
- oTest.fnWaitTest(
- "Disable sorting on multiple columns - no sorting classes",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- { "bSortable": false },
- null,
- { "bSortable": false },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example thead th:eq(1)').hasClass("sorting") ||
- $('#example thead th:eq(3)').hasClass("sorting")
- return bReturn == false;
- }
- );
-
- oTest.fnWaitTest(
- "Sorting on disabled column 1 has no effect",
- function () {
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; }
- );
-
- oTest.fnWaitTest(
- "Sorting on disabled column 2 has no effect",
- function () {
- $('#example thead th:eq(3)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; }
- );
-
- oTest.fnWaitTest(
- "Second sort on disabled column 2 has no effect",
- function () {
- $('#example thead th:eq(3)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; }
- );
-
- oTest.fnWaitTest(
- "Even with multiple disabled sorting columns other columns can still sort",
- function () {
- $('#example thead th:eq(4)').click();
- $('#example thead th:eq(4)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bUseRendered.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bUseRendered.js
deleted file mode 100644
index fa99b5a7..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bUseRendered.js
+++ /dev/null
@@ -1,151 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.bUseRendered" );
-
-/* bUseRendered is used to alter sorting data, if false then the original data is used for
- * sorting rather than the rendered data
- */
-
-$(document).ready( function () {
- /* Check the default */
- var mTmp = 0;
-
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( a.iDataRow == 0 ) {
- mTmp++;
- return "aaa";
- } else
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default for bUseRendered is true - rendered data is used for sorting",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'aaa'; }
- );
-
- oTest.fnWaitTest(
- "When bUseRendered is false, original data is used for sorting",
- function () {
- mTmp = 0;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- {
- "bUseRendered": false,
- "fnRender": function (a) {
- if ( a.iDataRow == 0 ) {
- mTmp++;
- return "aaa";
- } else {
- return a.aData[a.iDataColumn];
- }
- }
- },
- null,
- null,
- null
- ]
- } );
- $('#example thead th:eq(1)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; }
- );
-
-
- oTest.fnWaitTest(
- "bUseRendered set to false on one columns and true (default) on two others",
- function () {
- mTmp = 0;
- var mTmp2 = 0;
- var mTmp3 = 0;
-
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- {
- "fnRender": function (a) {
- if ( a.iDataRow == 0 ) {
- mTmp++;
- return "aaa1";
- } else {
- return a.aData[a.iDataColumn];
- }
- }
- },
- {
- "bUseRendered": false,
- "fnRender": function (a) {
- if ( a.iDataRow == 0 ) {
- mTmp2++;
- return "aaa2";
- } else {
- return a.aData[a.iDataColumn];
- }
- }
- },
- {
- "fnRender": function (a) {
- if ( a.iDataRow == 0 ) {
- mTmp3++;
- return "zzz3";
- } else {
- return a.aData[a.iDataColumn];
- }
- }
- },
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'aaa1'; }
- );
-
- oTest.fnWaitTest(
- "Multi-column rendering - 2nd column sorting",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; }
- );
-
- oTest.fnWaitTest(
- "Multi-column rendering - 3rd column sorting",
- function () {
- $('#example thead th:eq(2)').click();
- $('#example thead th:eq(2)').click();
- },
- function () { return $('#example tbody tr:eq(0) td:eq(2)').html() == 'zzz3'; }
- );
-
- oTest.fnWaitTest(
- "Multi-column rendering - 4th column sorting",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == '-'; }
- );
-
- oTest.fnWaitTest(
- "Multi-column rendering - 5th column sorting",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bVisible.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bVisible.js
deleted file mode 100644
index 6a4a72c4..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bVisible.js
+++ /dev/null
@@ -1,127 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.bVisible" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "All columns are visible by default",
- null,
- function () { return $('#example tbody tr:eq(0) td').length == 5; }
- );
-
- oTest.fnWaitTest(
- "Can hide one column and it removes td column from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- { "bVisible": false },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 4; }
- );
-
- oTest.fnWaitTest(
- "Can hide one column and it removes thead th column from DOM",
- null,
- function () { return $('#example thead tr:eq(0) th').length == 4; }
- );
-
- oTest.fnWaitTest(
- "The correct thead column has been hidden",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Platform(s)" &&
- jqNodes[2].innerHTML == "Engine version" &&
- jqNodes[3].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "The correct tbody column has been hidden",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } );
- },
- function () {
- var jqNodes = $('#example tbody tr:eq(0) td');
- var bReturn =
- jqNodes[0].innerHTML == "Gecko" &&
- jqNodes[1].innerHTML == "Gnome" &&
- jqNodes[2].innerHTML == "1.8" &&
- jqNodes[3].innerHTML == "A";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Can hide multiple columns and it removes td column from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- { "bVisible": false },
- { "bVisible": false },
- null,
- { "bVisible": false }
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td').length == 2; }
- );
-
- oTest.fnWaitTest(
- "Multiple hide - removes thead th column from DOM",
- null,
- function () { return $('#example thead tr:eq(0) th').length == 2; }
- );
-
- oTest.fnWaitTest(
- "Multiple hide - the correct thead columns have been hidden",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Engine version"
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Multiple hide - the correct tbody columns have been hidden",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } );
- },
- function () {
- var jqNodes = $('#example tbody tr:eq(0) td');
- var bReturn =
- jqNodes[0].innerHTML == "Gecko" &&
- jqNodes[1].innerHTML == "1"
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.fnRender.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.fnRender.js
deleted file mode 100644
index c82981e6..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.fnRender.js
+++ /dev/null
@@ -1,190 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.fnRender" );
-
-$(document).ready( function () {
- /* Check the default */
- var mTmp = 0;
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- mTmp++;
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Single column - fnRender is called once for each row",
- null,
- function () { return mTmp == 57; }
- );
-
- oTest.fnWaitTest(
- "Confirm that fnRender passes two arguments with four parameters",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( arguments.length != 2 || typeof a.iDataRow=='undefined' ||
- typeof a.iDataColumn=='undefined' || typeof a.aData=='undefined' ||
- typeof a.mDataProp=='undefined' )
- {
- mTmp = false;
- }
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnWaitTest(
- "fnRender iDataColumn is row number",
- function () {
- var iCount = 0;
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( iCount != a.iDataRow )
- {
- mTmp = false;
- }
- iCount++;
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnWaitTest(
- "fnRender iDataColumn is the column",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( a.iDataColumn != 1 )
- {
- mTmp = false;
- }
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnWaitTest(
- "fnRender aData is data array of correct size",
- function () {
- mTmp = true;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- if ( a.aData.length != 5 )
- {
- mTmp = false;
- }
- return a.aData[a.iDataColumn];
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return mTmp; }
- );
-
- oTest.fnWaitTest(
- "Passed back data is put into the DOM",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- { "fnRender": function (a) {
- return 'unittest';
- } },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'unittest'; }
- );
-
- oTest.fnWaitTest(
- "Passed back data is put into the DOM",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- null,
- { "fnRender": function (a) {
- return 'unittest1';
- } },
- { "fnRender": function (a) {
- return 'unittest2';
- } },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example tbody tr:eq(0) td:eq(2)').html() == 'unittest1' &&
- $('#example tbody tr:eq(0) td:eq(3)').html() == 'unittest2';
- return bReturn; }
- );
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.iDataSort.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.iDataSort.js
deleted file mode 100644
index 783e3cec..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.iDataSort.js
+++ /dev/null
@@ -1,92 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.iDataSort" );
-
-$(document).ready( function () {
- /* Should know that sorting already works by default from other tests, so we can jump
- * right in here
- */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- { "iDataSort": 4 },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Sorting on first column is uneffected",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; }
- );
-
- oTest.fnWaitTest(
- "Sorting on second column is the order of the fifth",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
- oTest.fnWaitTest(
- "Reserve sorting on second column uses fifth column as well",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; }
- );
-
- oTest.fnWaitTest(
- "Sorting on 5th column retains it's own sorting",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
-
- oTest.fnWaitTest(
- "Use 2nd col for sorting 5th col and via-versa - no effect on first col sorting",
- function () {
- mTmp = 0;
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- { "iDataSort": 4 },
- null,
- null,
- { "iDataSort": 1 }
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; }
- );
-
- oTest.fnWaitTest(
- "2nd col sorting uses fifth col",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; }
- );
-
- oTest.fnWaitTest(
- "2nd col sorting uses fifth col - reversed",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; }
- );
-
- oTest.fnWaitTest(
- "5th col sorting uses 2nd col",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; }
- );
-
- oTest.fnWaitTest(
- "5th col sorting uses 2nd col - reversed",
- function () { $('#example thead th:eq(4)').click(); },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'Seamonkey 1.1'; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sClass.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sClass.js
deleted file mode 100644
index ffbe931e..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sClass.js
+++ /dev/null
@@ -1,118 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.sClass" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "By default the test class hasn't been applied to the column (sanity!)",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(2)').hasClass('unittest') == false; }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - first row",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- null,
- { "sClass": 'unittest' },
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(1) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - third row",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - last row",
- null,
- function () { return $('#example tbody tr:eq(9) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - has not applied to other columns - 1st",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest') == false; }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - has not applied to other columns - 5th",
- null,
- function () { return $('#example tbody tr:eq(3) td:eq(4)').hasClass('unittest') == false; }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - seventh row - second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody tr:eq(6) td:eq(2)').hasClass('unittest'); }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - has not applied to header",
- null,
- function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; }
- );
-
- oTest.fnWaitTest(
- "Add a class to a single column - has not applied to footer",
- null,
- function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; }
- );
-
-
- oTest.fnWaitTest(
- "Class defined for multiple columns - first row",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- { "sClass": 'unittest2' },
- null,
- null,
- { "sClass": 'unittest1' },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest2') &&
- $('#example tbody tr:eq(8) td:eq(3)').hasClass('unittest1');
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Class defined for multiple columns - has not applied to other columns - 5th 1",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(4)').hasClass('unittest1') == false; }
- );
-
- oTest.fnWaitTest(
- "Class defined for multiple columns - has not applied to other columns - 5th 2",
- null,
- function () { return $('#example tbody tr:eq(6) td:eq(4)').hasClass('unittest2') == false; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sName.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sName.js
deleted file mode 100644
index 4e5a17ad..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sName.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.sName" );
-
-/* This has no effect at all in DOM methods - so we just check that it has applied the name */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- null,
- null,
- { "sName": 'unit test' },
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Names are stored in the columns object",
- null,
- function () { return oSettings.aoColumns[3].sName =="unit test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sTitle.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sTitle.js
deleted file mode 100644
index 4561fbe4..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sTitle.js
+++ /dev/null
@@ -1,85 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.sTitle" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "If not given, then the columns titles are empty",
- null,
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "Browser" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Can set a single column title - and others are read from DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- { "sTitle": 'unit test' },
- null,
- null,
- null
- ]
- } );
- },
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "unit test" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "CSS grade";
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Can set multiple column titles",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- { "sTitle": 'unit test 1' },
- null,
- null,
- { "sTitle": 'unit test 2' }
- ]
- } );
- },
- function () {
- var jqNodes = $('#example thead tr:eq(0) th');
- var bReturn =
- jqNodes[0].innerHTML == "Rendering engine" &&
- jqNodes[1].innerHTML == "unit test 1" &&
- jqNodes[2].innerHTML == "Platform(s)" &&
- jqNodes[3].innerHTML == "Engine version" &&
- jqNodes[4].innerHTML == "unit test 2";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sWidth.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sWidth.js
deleted file mode 100644
index 9cb05834..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sWidth.js
+++ /dev/null
@@ -1,90 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoColumns.sWidth" );
-
-/* NOTE - we need to disable the auto width for the majority of these test in order to preform
- * these tests as the auto width will convert the width to a px value. We can do 'non-exact' tests
- * with auto width enabled however to ensure it scales columns as required
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bAutoWidth": false,
- "aoColumns": [
- null,
- { "sWidth": '40%' },
- null,
- null,
- null
- ]
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "With auto width disabled the width for one column is appled",
- null,
- function () { return $('#example thead th:eq(1)')[0].style.width == "40%"; }
- );
-
- oTest.fnWaitTest(
- "With auto width disabled the width for one column is appled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bAutoWidth": false,
- "aoColumns": [
- null,
- null,
- { "sWidth": '20%' },
- { "sWidth": '30%' },
- null
- ]
- } );
- },
- function () {
- var bReturn =
- $('#example thead th:eq(2)')[0].style.width == "20%" &&
- $('#example thead th:eq(3)')[0].style.width == "30%";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "With auto width, it will make the smallest column the largest with percentage width given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoColumns": [
- null,
- null,
- null,
- { "sWidth": '40%' },
- null
- ]
- } );
- },
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
-
- if ( a3>a0 && a3>a1 && a3>a2 && a3>a4 )
- return true;
- else
- return false;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoSearchCols.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoSearchCols.js
deleted file mode 100644
index 083f8817..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/aoSearchCols.js
+++ /dev/null
@@ -1,125 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "aoSearchCols" );
-
-/* We could be here forever testing this one, so we test a limited subset on a couple of colums */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default should be to have a empty colums array",
- null,
- function () {
- var bReturn =
- oSettings.aoPreSearchCols[0].sSearch == 0 && !oSettings.aoPreSearchCols[0].bRegex &&
- oSettings.aoPreSearchCols[1].sSearch == 0 && !oSettings.aoPreSearchCols[1].bRegex &&
- oSettings.aoPreSearchCols[2].sSearch == 0 && !oSettings.aoPreSearchCols[2].bRegex &&
- oSettings.aoPreSearchCols[3].sSearch == 0 && !oSettings.aoPreSearchCols[3].bRegex &&
- oSettings.aoPreSearchCols[4].sSearch == 0 && !oSettings.aoPreSearchCols[4].bRegex;
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Search on a single column - no regex statement given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoSearchCols": [
- null,
- { "sSearch": "Mozilla" },
- null,
- { "sSearch": "1" },
- null
- ]
- } );
- },
- function () { return $('#example_info').html() == "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Search on two columns - no regex statement given",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoSearchCols": [
- null,
- { "sSearch": "Mozilla" },
- null,
- { "sSearch": "1.5" },
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1.5"; }
- );
-
- oTest.fnWaitTest(
- "Search on single column - escape regex false",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoSearchCols": [
- { "sSearch": ".*ML", "bEscapeRegex": false },
- null,
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example_info').html() == "Showing 1 to 3 of 3 entries (filtered from 57 total entries)"; }
- );
-
- oTest.fnWaitTest(
- "Search on two columns - escape regex false on first, true on second",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoSearchCols": [
- { "sSearch": ".*ML", "bEscapeRegex": false },
- { "sSearch": "3.3", "bEscapeRegex": true },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Konqureror 3.3"; }
- );
-
- oTest.fnWaitTest(
- "Search on two columns (no records) - escape regex false on first, true on second",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "aoSearchCols": [
- { "sSearch": ".*ML", "bEscapeRegex": false },
- { "sSearch": "Allan", "bEscapeRegex": true },
- null,
- null,
- null
- ]
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/asStripClasses.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/asStripClasses.js
deleted file mode 100644
index a26b6669..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/asStripClasses.js
+++ /dev/null
@@ -1,109 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "asStripeClasses" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
-
- oTest.fnWaitTest(
- "Default row striping is applied",
- null,
- function () {
- return $('#example tbody tr:eq(0)').hasClass('odd') &&
- $('#example tbody tr:eq(1)').hasClass('even') &&
- $('#example tbody tr:eq(2)').hasClass('odd') &&
- $('#example tbody tr:eq(3)').hasClass('even');
- }
- );
-
- oTest.fnWaitTest(
- "Row striping on the second page",
- function () { $('#example_next').click(); },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('odd') &&
- $('#example tbody tr:eq(1)').hasClass('even') &&
- $('#example tbody tr:eq(2)').hasClass('odd') &&
- $('#example tbody tr:eq(3)').hasClass('even');
- }
- );
-
- /* No striping */
- oTest.fnWaitTest(
- "No row striping",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "asStripeClasses": []
- } );
- },
- function () {
- if ( typeof $('#example tbody tr:eq(1)')[0] == 'undefined' )
- {
- /* Use the 'wait for' to allow this to become true */
- return false;
- }
- return $('#example tbody tr:eq(0)')[0].className == "" &&
- $('#example tbody tr:eq(1)')[0].className == "" &&
- $('#example tbody tr:eq(2)')[0].className == "" &&
- $('#example tbody tr:eq(3)')[0].className == "";
- }
- );
-
- /* Custom striping */
- oTest.fnWaitTest(
- "Custom striping [2]",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "asStripeClasses": [ 'test1', 'test2' ]
- } );
- },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test1') &&
- $('#example tbody tr:eq(3)').hasClass('test2');
- }
- );
-
-
- /* long array of striping */
- oTest.fnWaitTest(
- "Custom striping [4]",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "asStripeClasses": [ 'test1', 'test2', 'test3', 'test4' ]
- } );
- },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test3') &&
- $('#example tbody tr:eq(3)').hasClass('test4');
- }
- );
-
- oTest.fnWaitTest(
- "Custom striping is restarted on second page [2]",
- function () { $('#example_next').click(); },
- function () {
- return $('#example tbody tr:eq(0)').hasClass('test1') &&
- $('#example tbody tr:eq(1)').hasClass('test2') &&
- $('#example tbody tr:eq(2)').hasClass('test3') &&
- $('#example tbody tr:eq(3)').hasClass('test4');
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bAutoWidth.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bAutoWidth.js
deleted file mode 100644
index 477691d2..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bAutoWidth.js
+++ /dev/null
@@ -1,145 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bAutoWidth" );
-
-/* It's actually a little tricky to test this. We can't test absolute numbers because
- * different browsers and different platforms will render the width of the columns slightly
- * differently. However, we certainly can test the principle of what should happen (column
- * width doesn't change over pages)
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Auto width is enabled by default",
- null,
- function () { return oSettings.oFeatures.bAutoWidth; }
- );
-
- oTest.fnWaitTest(
- "First column has a width assigned to it",
- null,
- function () { return $('#example thead th:eq(0)').attr('style').match(/width/i); }
- );
-
- /*
- This would seem like a better test - but there appear to be difficulties with tables
- which are bigger (calculated) than there is actually room for. I suspect this is actually
- a bug in datatables
- oTest.fnWaitTest(
- "Check column widths on first page match second page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- console.log( a0, b0, a1, b1, a2, b2, a3, b3 );
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return true;
- else
- return false;
- }
- );
-
- oTest.fnWaitTest(
- "Check column widths on second page match thid page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return true;
- else
- return false;
- }
- );
- */
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Auto width can be disabled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bAutoWidth": false
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bAutoWidth == false; }
- );
-
- oTest.fnWaitTest(
- "First column does not have a width assigned to it",
- null,
- function () { return $('#example thead th:eq(0)').attr('style') == null; }
- );
-
- /*
- oTest.fnWaitTest(
- "Check column widths on first page do not match second page",
- null,
- function () {
- var anThs = $('#example thead th');
- var a0 = anThs[0].offsetWidth;
- var a1 = anThs[1].offsetWidth;
- var a2 = anThs[2].offsetWidth;
- var a3 = anThs[3].offsetWidth;
- var a4 = anThs[4].offsetWidth;
- $('#example_next').click();
- var b0 = anThs[0].offsetWidth;
- var b1 = anThs[1].offsetWidth;
- var b2 = anThs[2].offsetWidth;
- var b3 = anThs[3].offsetWidth;
- var b4 = anThs[4].offsetWidth;
- if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 )
- return false;
- else
- return true;
- }
- );
- */
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Auto width enabled override",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bAutoWidth": true
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bAutoWidth; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bFilter.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bFilter.js
deleted file mode 100644
index 4ce6f1fc..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bFilter.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bFilter" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
-
- oTest.fnWaitTest(
- "Filtering div exists by default",
- null,
- function () { return document.getElementById('example_filter') != null; }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Fltering can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bFilter": false
- } );
- },
- function () { return document.getElementById('example_filter') == null; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Filtering enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bFilter": true
- } );
- },
- function () { return document.getElementById('example_filter') != null; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bInfo.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bInfo.js
deleted file mode 100644
index b06403cd..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bInfo.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bInfo" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
-
- oTest.fnWaitTest(
- "Info div exists by default",
- null,
- function () { return document.getElementById('example_info') != null; }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Info can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bInfo": false
- } );
- },
- function () { return document.getElementById('example_info') == null; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Info enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bInfo": true
- } );
- },
- function () { return document.getElementById('example_info') != null; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bLengthChange.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bLengthChange.js
deleted file mode 100644
index 197f7923..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bLengthChange.js
+++ /dev/null
@@ -1,78 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bLengthChange" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
-
- oTest.fnWaitTest(
- "Length div exists by default",
- null,
- function () { return document.getElementById('example_length') != null; }
- );
-
- oTest.fnWaitTest(
- "Four default options",
- null,
- function () { return $("select[name=example_length] option").length == 4; }
- );
-
- oTest.fnWaitTest(
- "Default options",
- null,
- function () {
- var opts = $("select[name='example_length'] option");
- return opts[0].getAttribute('value') == 10 && opts[1].getAttribute('value') == 25 &&
- opts[2].getAttribute('value') == 50 && opts[3].getAttribute('value') == 100;
- }
- );
-
- oTest.fnWaitTest(
- "Info takes length into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Change length can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bLengthChange": false
- } );
- },
- function () { return document.getElementById('example_length') == null; }
- );
-
- oTest.fnWaitTest(
- "Information takes length disabled into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Length change enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bLengthChange": true
- } );
- },
- function () { return document.getElementById('example_length') != null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bPaginate.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bPaginate.js
deleted file mode 100644
index e0b112c9..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bPaginate.js
+++ /dev/null
@@ -1,62 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bPaginate" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
-
- oTest.fnWaitTest(
- "Pagiantion div exists by default",
- null,
- function () { return document.getElementById('example_paginate') != null; }
- );
-
- oTest.fnWaitTest(
- "Information div takes paging into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 10 of 57 entries"; }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Pagiantion can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bPaginate": false
- } );
- },
- function () { return document.getElementById('example_paginate') == null; }
- );
-
- oTest.fnWaitTest(
- "Information div takes paging disabled into account",
- null,
- function () { return document.getElementById('example_info').innerHTML ==
- "Showing 1 to 57 of 57 entries"; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Pagiantion enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bPaginate": true
- } );
- },
- function () { return document.getElementById('example_paginate') != null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bProcessing.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bProcessing.js
deleted file mode 100644
index 57b36aaf..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bProcessing.js
+++ /dev/null
@@ -1,106 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bProcessing" );
-
-/* It's actually a bit hard to set this one due to the fact that it will only be shown
- * when DataTables is doing some kind of processing. The server-side processing is a bit
- * better to test this than here - so we just the interal functions to enable it and check
- * that it is available
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Processing is off by default",
- null,
- function () { return oSettings.oFeatures.bProcessing == false; }
- );
-
- oTest.fnWaitTest(
- "Processing div is not in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnWaitTest(
- "Processing div cannot be shown",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
- oTest.fnWaitTest(
- "Processing div cannot be hidden",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Processing can be enabled",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bProcessing": true
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bProcessing == true; }
- );
-
- oTest.fnWaitTest(
- "Processing div is in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing'); }
- );
-
- oTest.fnWaitTest(
- "Processing div is hidden by default",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing').style.visibility = "hidden"; }
- );
-
- oTest.fnWaitTest(
- "Processing div can be shown",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing').style.visibility = "visible"; }
- );
-
- oTest.fnWaitTest(
- "Processing div can be hidden",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); },
- function () { return document.getElementById('example_processing').style.visibility = "hidden"; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Processing disabled override",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bProcessing": false
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oFeatures.bProcessing == false; }
- );
-
- oTest.fnWaitTest(
- "Processing div is not in the DOM",
- function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); },
- function () { return document.getElementById('example_processing') == null; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bServerSide.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bServerSide.js
deleted file mode 100644
index 03f9272c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bServerSide.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bServerSide" );
-
-/* Not interested in server-side processing here other than to check that it is off */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Server side is off by default",
- null,
- function () { return oSettings.oFeatures.bServerSide == false; }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bSort.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bSort.js
deleted file mode 100644
index 2a166e93..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bSort.js
+++ /dev/null
@@ -1,102 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bSort" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
-
- oTest.fnWaitTest(
- "Sorting is on by default",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnWaitTest(
- "Sorting Asc by default class applied",
- null,
- function () { return $('#example thead th:eq(0)').hasClass("sorting_asc"); }
- );
-
- oTest.fnWaitTest(
- "Click on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnWaitTest(
- "Sorting class removed from first column",
- null,
- function () { return $('#example thead th:eq(0)').hasClass("sorting_asc") != true; }
- );
-
- oTest.fnWaitTest(
- "Sorting asc class applied to second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc"); }
- );
-
- oTest.fnWaitTest(
- "Reverse on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnWaitTest(
- "Sorting acs class removed from second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") != true; }
- );
-
- oTest.fnWaitTest(
- "Sorting desc class applied to second column",
- null,
- function () { return $('#example thead th:eq(1)').hasClass("sorting_desc"); }
- );
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Pagiantion can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bSort": false
- } );
- },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- oTest.fnWaitTest(
- "Click on second column has no effect",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- oTest.fnWaitTest(
- "Reverse on second column has no effect",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "4"; }
- );
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Sorting enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bSort": true
- } );
- },
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bSortClasses.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bSortClasses.js
deleted file mode 100644
index 6214d907..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/bSortClasses.js
+++ /dev/null
@@ -1,135 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "bSortClasses" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
-
- oTest.fnWaitTest(
- "Sorting classes are applied by default",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); }
- );
-
- oTest.fnWaitTest(
- "Sorting classes are applied to all required cells",
- null,
- function () { return $('#example tbody tr:eq(7) td:eq(0)').hasClass('sorting_1'); }
- );
-
- oTest.fnWaitTest(
- "Sorting classes are not applied to non-sorting columns",
- null,
- function () { return $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_1') == false; }
- );
-
- oTest.fnWaitTest(
- "Sorting multi-column - add column 1",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2');
- }
- );
-
- oTest.fnWaitTest(
- "Sorting multi-column - add column 2",
- function () {
- oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3');
- }
- );
-
- oTest.fnWaitTest(
- "Sorting multi-column - add column 3",
- function () {
- oDispacher.click( $('#example thead th:eq(3)')[0], { 'shift': true } );
- },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') &&
- $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3');
- }
- );
-
- oTest.fnWaitTest(
- "Remove sorting classes on single column sort",
- function () {
- $('#example thead th:eq(4)').click();
- },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false &&
- $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3') == false;
- }
- );
-
- oTest.fnWaitTest(
- "Sorting class 1 was added",
- null,
- function () { return $('#example tbody tr:eq(1) td:eq(4)').hasClass('sorting_1'); }
- );
-
-
- /* Check can disable */
- oTest.fnWaitTest(
- "Sorting classes can be disabled",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bSortClasses": false
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false; }
- );
-
- oTest.fnWaitTest(
- "Sorting classes disabled - add column 1 - no effect",
- function () {
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false;
- }
- );
-
- oTest.fnWaitTest(
- "Sorting classes disabled - add column 2 - no effect",
- function () {
- oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); },
- function () {
- return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false &&
- $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false &&
- $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false;
- }
- );
-
-
- /* Enable makes no difference */
- oTest.fnWaitTest(
- "Sorting classes enabled override",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bSortClasses": true
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnDrawCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnDrawCallback.js
deleted file mode 100644
index 6fc4df8c..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnDrawCallback.js
+++ /dev/null
@@ -1,102 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnDrawCallback" );
-
-/* Fairly boring function compared to the others! */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
- var mPass, bInit;
-
- oTest.fnWaitTest(
- "Default should be null",
- null,
- function () { return oSettings.fnDrawCallback == null; }
- );
-
-
- oTest.fnWaitTest(
- "One argument passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- bInit = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnDrawCallback": function ( ) {
- mPass = arguments.length;
- },
- "fnInitComplete": function () {
- bInit = true;
- }
- } );
- },
- function () { return mPass == 1 && bInit; }
- );
-
-
- oTest.fnWaitTest(
- "That one argument is the settings object",
- function () {
- oSession.fnRestore();
-
- bInit = false;
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnDrawCallback": function ( oSettings ) {
- mPass = oSettings;
- },
- "fnInitComplete": function () {
- bInit = true;
- }
- } );
- },
- function () { return oTable.fnSettings() == mPass && bInit; }
- );
-
-
- /* The draw callback is called once for the init and then when the data is added */
- oTest.fnWaitTest(
- "fnRowCallback called once on first draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- bInit = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnDrawCallback": function ( ) {
- mPass++;
- },
- "fnInitComplete": function () {
- bInit = true;
- }
- } );
- },
- function () { return mPass == 2 && bInit; }
- );
-
- oTest.fnWaitTest(
- "fnRowCallback called once on each draw there after as well",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return mPass == 5; }
- );
-
-
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnHeaderCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnHeaderCallback.js
deleted file mode 100644
index 89b81908..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnHeaderCallback.js
+++ /dev/null
@@ -1,200 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnHeaderCallback" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
- var mPass, bInit;
-
- oTest.fnWaitTest(
- "Default should be null",
- null,
- function () { return oSettings.fnHeaderCallback == null; }
- );
-
-
- oTest.fnWaitTest(
- "Five arguments passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- bInit = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnHeaderCallback": function ( ) {
- mPass = arguments.length;
- },
- "fnInitComplete": function () {
- bInit = true;
- }
- } );
- },
- function () { return mPass == 5 && bInit; }
- );
-
-
- /* The header callback is called once for the init and then when the data is added */
- oTest.fnWaitTest(
- "fnHeaderCallback called once per draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- bInit = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- mPass++;
- },
- "fnInitComplete": function () {
- bInit = true;
- }
- } );
- },
- function () { return mPass == 2 && bInit; }
- );
-
- oTest.fnWaitTest(
- "fnRowCallback called on paging (i.e. another draw)",
- function () { $('#example_next').click(); },
- function () { return mPass == 3; }
- );
-
-
- oTest.fnWaitTest(
- "fnRowCallback allows us to alter row information",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records";
- }
- } );
- },
- function () { return $('#example thead th:eq(0)').html() == "Displaying 10 records"; }
- );
-
-
- oTest.fnWaitTest(
- "iStart correct on first page",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iStart != 0 )
- {
- mPass = false;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnWaitTest(
- "iStart correct on second page",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iStart == 10 )
- {
- mPass = true;
- }
- },
- "fnInitComplete": function () {
- $('#example_next').click();
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnWaitTest(
- "iEnd correct on second page",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( iEnd == 20 )
- {
- mPass = true;
- }
- },
- "fnInitComplete": function () {
- $('#example_next').click();
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnWaitTest(
- "aiDisplay length is full data when not filtered",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( aiDisplay.length == 57 )
- {
- mPass = true;
- }
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnWaitTest(
- "aiDisplay length is 9 when filtering on 'Mozilla'",
- function () {
- oSession.fnRestore();
-
- mPass = false;
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) {
- if ( aiDisplay.length == 9 )
- {
- mPass = true;
- }
- }
- } );
- oTable.fnFilter( "Mozilla" );
- },
- function () { return mPass; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnInitComplete.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnInitComplete.js
deleted file mode 100644
index d2542a84..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnInitComplete.js
+++ /dev/null
@@ -1,105 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnInitComplete" );
-
-/* Fairly boring function compared to the others! */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnWaitTest(
- "Default should be null",
- null,
- function () { return oSettings.fnInitComplete == null; }
- );
-
-
- oTest.fnWaitTest(
- "Two arguments passed (for Ajax!)",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnInitComplete": function ( ) {
- mPass = arguments.length;
- }
- } );
- },
- function () { return mPass == 2; }
- );
-
-
- oTest.fnWaitTest(
- "That one argument is the settings object",
- function () {
- oSession.fnRestore();
-
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnInitComplete": function ( oSettings ) {
- mPass = oSettings;
- }
- } );
- },
- function () { return oTable.fnSettings() == mPass; }
- );
-
-
- oTest.fnWaitTest(
- "fnInitComplete called once on first draw",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnInitComplete": function ( ) {
- mPass++;
- }
- } );
- },
- function () { return mPass == 1; }
- );
-
- oTest.fnWaitTest(
- "fnInitComplete never called there after",
- function () {
- $('#example_next').click();
- $('#example_next').click();
- $('#example_next').click();
- },
- function () { return mPass == 1; }
- );
-
-
- oTest.fnWaitTest(
- "10 rows in the table on complete",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnInitComplete": function ( ) {
- mPass = $('#example tbody tr').length;
- }
- } );
- },
- function () { return mPass == 10; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnRowCallback.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnRowCallback.js
deleted file mode 100644
index 0a9b4ef9..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnRowCallback.js
+++ /dev/null
@@ -1,118 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnRowCallback" );
-
-/* Note - fnRowCallback MUST return the first arguments (modified or not) */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
- var mPass;
-
- oTest.fnWaitTest(
- "Default should be null",
- null,
- function () { return oSettings.fnRowCallback == null; }
- );
-
-
- oTest.fnWaitTest(
- "Four arguments passed",
- function () {
- oSession.fnRestore();
-
- mPass = -1;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnRowCallback": function ( nTr ) {
- mPass = arguments.length;
- return nTr;
- }
- } );
- },
- function () { return mPass == 4; }
- );
-
-
- oTest.fnWaitTest(
- "fnRowCallback called once for each drawn row",
- function () {
- oSession.fnRestore();
-
- mPass = 0;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- mPass++;
- return nTr;
- }
- } );
- },
- function () { return mPass == 10; }
- );
-
- oTest.fnWaitTest(
- "fnRowCallback allows us to alter row information",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- $(nTr).addClass('unit_test');
- return nTr;
- }
- } );
- },
- function () { return $('#example tbody tr:eq(1)').hasClass('unit_test'); }
- );
-
- oTest.fnWaitTest(
- "Data array has length matching columns",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- if ( asData.length != 5 )
- mPass = false;
- return nTr;
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnWaitTest(
- "Data array has length matching columns",
- function () {
- oSession.fnRestore();
-
- mPass = true;
- var iCount = 0;
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) {
- if ( iCount != iDrawIndex )
- mPass = false;
- iCount++;
- return nTr;
- }
- } );
- },
- function () { return mPass; }
- );
-
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnServerData.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnServerData.js
deleted file mode 100644
index 809e8ba5..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/fnServerData.js
+++ /dev/null
@@ -1,68 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "fnServerData for Ajax sourced data" );
-
-$(document).ready( function () {
- var mPass;
-
- oTest.fnTest(
- "Argument length",
- function () {
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnServerData": function () {
- mPass = arguments.length;
- }
- } );
- },
- function () { return mPass == 4; }
- );
-
- oTest.fnTest(
- "Url",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnServerData": function (sUrl, aoData, fnCallback, oSettings) {
- mPass = sUrl == "../../../examples/ajax/sources/arrays.txt";
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "Data array",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnServerData": function (sUrl, aoData, fnCallback, oSettings) {
- mPass = aoData.length==0;
- }
- } );
- },
- function () { return mPass; }
- );
-
- oTest.fnTest(
- "Callback function",
- function () {
- $('#example').dataTable( {
- "bDestroy": true,
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "fnServerData": function (sUrl, aoData, fnCallback, oSettings) {
- mPass = typeof fnCallback == 'function';
- }
- } );
- },
- function () { return mPass; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/iDisplayLength.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/iDisplayLength.js
deleted file mode 100644
index 6ffb0c06..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/iDisplayLength.js
+++ /dev/null
@@ -1,85 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "iDisplayLength" );
-
-$(document).ready( function () {
- /* Check the default */
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
-
- oTest.fnWaitTest(
- "Default length is ten",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnWaitTest(
- "Select menu shows 10",
- null,
- function () { return $('#example_length select').val() == 10; }
- );
-
-
- oTest.fnWaitTest(
- "Set initial length to 25",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "iDisplayLength": 25
- } );
- },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnWaitTest(
- "Select menu shows 25",
- null,
- function () { return $('#example_length select').val() == 25; }
- );
-
-
- oTest.fnWaitTest(
- "Set initial length to 100",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "iDisplayLength": 100
- } );
- },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnWaitTest(
- "Select menu shows 25",
- null,
- function () { return $('#example_length select').val() == 100; }
- );
-
-
- oTest.fnWaitTest(
- "Set initial length to 23 (unknown select menu length)",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "iDisplayLength": 23
- } );
- },
- function () { return $('#example tbody tr').length == 23; }
- );
-
- oTest.fnWaitTest(
- "Select menu shows 10 (since 23 is unknow)",
- null,
- function () { return $('#example_length select').val() == 10; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.oPaginate.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.oPaginate.js
deleted file mode 100644
index 23cb4c9b..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.oPaginate.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.oPaginate" );
-
-/* Note that the paging language information only has relevence in full numbers */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "sPaginationType": "full_numbers"
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "oLanguage.oPaginate defaults",
- null,
- function () {
- var bReturn =
- oSettings.oLanguage.oPaginate.sFirst == "First" &&
- oSettings.oLanguage.oPaginate.sPrevious == "Previous" &&
- oSettings.oLanguage.oPaginate.sNext == "Next" &&
- oSettings.oLanguage.oPaginate.sLast == "Last";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "oLanguage.oPaginate defaults are in the DOM",
- null,
- function () {
- var bReturn =
- $('#example_paginate .first').html() == "First" &&
- $('#example_paginate .previous').html() == "Previous" &&
- $('#example_paginate .next').html() == "Next" &&
- $('#example_paginate .last').html() == "Last";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "oLanguage.oPaginate can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "sPaginationType": "full_numbers",
- "oLanguage": {
- "oPaginate": {
- "sFirst": "unit1",
- "sPrevious": "test2",
- "sNext": "unit3",
- "sLast": "test4"
- }
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var bReturn =
- oSettings.oLanguage.oPaginate.sFirst == "unit1" &&
- oSettings.oLanguage.oPaginate.sPrevious == "test2" &&
- oSettings.oLanguage.oPaginate.sNext == "unit3" &&
- oSettings.oLanguage.oPaginate.sLast == "test4";
- return bReturn;
- }
- );
-
- oTest.fnTest(
- "oLanguage.oPaginate definitions are in the DOM",
- null,
- function () {
- var bReturn =
- $('#example_paginate .first').html() == "unit1" &&
- $('#example_paginate .previous').html() == "test2" &&
- $('#example_paginate .next').html() == "unit3" &&
- $('#example_paginate .last').html() == "test4";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfo.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfo.js
deleted file mode 100644
index f87a2638..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfo.js
+++ /dev/null
@@ -1,124 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sInfo" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Info language is 'Showing _START_ to _END_ of _TOTAL_ entries' by default",
- null,
- function () { return oSettings.oLanguage.sInfo == "Showing _START_ to _END_ of _TOTAL_ entries"; }
- );
-
- oTest.fnTest(
- "Info language default is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; }
- );
-
-
- oTest.fnWaitTest(
- "Info language can be defined - without any macros",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sInfo": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sInfo == "unit test"; }
- );
-
- oTest.fnTest(
- "Info language definition is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "unit test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macro _START_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sInfo": "unit _START_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macro _END_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sInfo": "unit _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 10 test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macro _TOTAL_ only",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sInfo": "unit _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 57 test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macros _START_ and _END_",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sInfo": "unit _START_ _END_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 10 test"; }
- );
-
- oTest.fnWaitTest(
- "Info language can be defined - with macros _START_, _END_ and _TOTAL_",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sInfo": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "unit 1 10 57 test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoEmpty.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoEmpty.js
deleted file mode 100644
index 411742c4..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoEmpty.js
+++ /dev/null
@@ -1,82 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sInfoEmpty" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Info empty language is 'Showing 0 to 0 of 0 entries' by default",
- function () { oTable.fnFilter("nothinghere"); },
- function () { return oSettings.oLanguage.sInfoEmpty == "Showing 0 to 0 of 0 entries"; }
- );
-
- oTest.fnTest(
- "Info empty language default is in the DOM",
- null,
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "Showing 0 to 0 of 0 entries";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Info empty language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sInfoEmpty": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- oTable.fnFilter("nothinghere");
- },
- function () { return oSettings.oLanguage.sInfoEmpty == "unit test"; }
- );
-
- oTest.fnTest(
- "Info empty language default is in the DOM",
- null,
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "unit test";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Macro's replaced",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sInfoEmpty": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- oTable.fnFilter("nothinghere");
- },
- function () {
- var bReturn = document.getElementById('example_info').innerHTML.replace(
- ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) ==
- "unit 1 0 0 test";
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoPostFix.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoPostFix.js
deleted file mode 100644
index 2073aace..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoPostFix.js
+++ /dev/null
@@ -1,82 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sInfoPostFix" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Info post fix language is '' (blank) by default",
- null,
- function () { return oSettings.oLanguage.sInfoPostFix == ""; }
- );
-
- oTest.fnTest(
- "Width no post fix, the basic info shows",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; }
- );
-
-
- oTest.fnWaitTest(
- "Info post fix language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sInfoPostFix": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sInfoPostFix == "unit test"; }
- );
-
- oTest.fnTest(
- "Info empty language default is in the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit test"; }
- );
-
-
- oTest.fnWaitTest(
- "Macros have no effect in the post fix",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sInfoPostFix": "unit _START_ _END_ _TOTAL_ test"
- }
- } );
- },
- function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit _START_ _END_ _TOTAL_ test"; }
- );
-
-
- oTest.fnWaitTest(
- "Post fix is applied after fintering info",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sInfoPostFix": "unit test"
- }
- } );
- oTable.fnFilter("nothinghere");
- },
- function () { return document.getElementById('example_info').innerHTML = "Showing 0 to 0 of 0 entries unit (filtered from 57 total entries) test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sLengthMenu.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sLengthMenu.js
deleted file mode 100644
index db834ad8..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sLengthMenu.js
+++ /dev/null
@@ -1,115 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sLengthMenu" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Menu language is 'Show _MENU_ entries' by default",
- null,
- function () { return oSettings.oLanguage.sLengthMenu == "Show _MENU_ entries"; }
- );
-
- oTest.fnTest(
- "_MENU_ macro is replaced by select menu in DOM",
- null,
- function () { return $('select', oSettings.aanFeatures.l[0]).length == 1 }
- );
-
- oTest.fnTest(
- "A label input is used",
- null,
- function () { return $('label', oSettings.aanFeatures.l[0]).length == 1 }
- );
-
- oTest.fnTest(
- "Default is put into DOM",
- null,
- function () {
- var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes;
- var bReturn =
- anChildren[0].nodeValue == "Show " &&
- anChildren[2].nodeValue == " entries";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Menu length language can be defined - no _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sLengthMenu": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sLengthMenu == "unit test"; }
- );
-
- oTest.fnTest(
- "Menu length language definition is in the DOM",
- null,
- function () {
- return $('label', oSettings.aanFeatures.l[0]).text() == "unit test";
- }
- );
-
-
- oTest.fnWaitTest(
- "Menu length language can be defined - with _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sLengthMenu": "unit _MENU_ test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes;
- var bReturn =
- anChildren[0].nodeValue == "unit " &&
- anChildren[2].nodeValue == " test";
- return bReturn;
- }
- );
-
-
- oTest.fnWaitTest(
- "Only the _MENU_ macro",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sLengthMenu": "_MENU_"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var anChildren = oSettings.aanFeatures.l[0].childNodes;
- var bReturn =
- anChildren.length == 1 &&
- $('select', oSettings.aanFeatures.l[0]).length == 1;
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sProcessing.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sProcessing.js
deleted file mode 100644
index fcdfd533..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sProcessing.js
+++ /dev/null
@@ -1,51 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sProcessing" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bProcessing": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Processing language is 'Processing...' by default",
- null,
- function () { return oSettings.oLanguage.sProcessing == "Processing..."; }
- );
-
- oTest.fnTest(
- "Processing language default is in the DOM",
- null,
- function () { return document.getElementById('example_processing').innerHTML = "Processing..."; }
- );
-
-
- oTest.fnWaitTest(
- "Processing language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "bProcessing": true,
- "oLanguage": {
- "sProcessing": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sProcessing == "unit test"; }
- );
-
- oTest.fnTest(
- "Processing language definition is in the DOM",
- null,
- function () { return document.getElementById('example_processing').innerHTML = "unit test"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sSearch.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sSearch.js
deleted file mode 100644
index 7bff7495..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sSearch.js
+++ /dev/null
@@ -1,73 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sSearch" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Search language is 'Search:' by default",
- null,
- function () { return oSettings.oLanguage.sSearch == "Search:"; }
- );
-
- oTest.fnTest(
- "A label input is used",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).length == 1 }
- );
-
- oTest.fnTest(
- "Search language default is in the DOM",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).text()
- == "Search: "; }
- );
-
-
- oTest.fnWaitTest(
- "Search language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sSearch": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sSearch == "unit test"; }
- );
-
- oTest.fnTest(
- "Info language definition is in the DOM",
- null,
- function () { return $('label', oSettings.aanFeatures.f[0]).text().indexOf('unit test') !== -1; }
- );
-
-
- oTest.fnWaitTest(
- "Blank search has a no space (separator) inserted",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sSearch": ""
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return document.getElementById('example_filter').childNodes.length == 1; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sUrl.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sUrl.js
deleted file mode 100644
index 59f18eaf..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sUrl.js
+++ /dev/null
@@ -1,64 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sUrl" );
-
-/* Note that we only test the internal storage of language information pulled form a file here
- * as the other language tests will check it goes into the DOM correctly
- */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnTest(
- "sUrl is blank by default",
- null,
- function () { return oSettings.oLanguage.sUrl == ""; }
- );
-
-
- oTest.fnWaitTest(
- "Loading of German file loads language information",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sUrl": "../../../examples/examples_support/de_DE.txt"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- var bReturn =
- oSettings.oLanguage.sProcessing == "Bitte warten..." &&
- oSettings.oLanguage.sLengthMenu == "_MENU_ Einträge anzeigen" &&
- oSettings.oLanguage.sZeroRecords == "Keine Einträge vorhanden." &&
- oSettings.oLanguage.sInfo == "_START_ bis _END_ von _TOTAL_ Einträgen" &&
- oSettings.oLanguage.sInfoEmpty == "0 bis 0 von 0 Einträgen" &&
- oSettings.oLanguage.sInfoFiltered == "(gefiltert von _MAX_ Einträgen)" &&
- oSettings.oLanguage.sInfoPostFix == "" &&
- oSettings.oLanguage.sSearch == "Suchen" &&
- oSettings.oLanguage.oPaginate.sFirst == "Erster" &&
- oSettings.oLanguage.oPaginate.sPrevious == "Zurück" &&
- oSettings.oLanguage.oPaginate.sNext == "Nächster" &&
- oSettings.oLanguage.oPaginate.sLast == "Letzter";
-
- return bReturn;
- }
- );
-
- /* One DOM check just to ensure that they go into the DOM */
- oTest.fnTest(
- "Loaded language goes into the DOM",
- null,
- function () { return document.getElementById('example_info').innerHTML = "1 bis 10 von 57 Einträgen"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sZeroRecords.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sZeroRecords.js
deleted file mode 100644
index 9bc0655e..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sZeroRecords.js
+++ /dev/null
@@ -1,50 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oLanguage.sZeroRecords" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Zero records language is 'No matching records found' by default",
- null,
- function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; }
- );
-
- oTest.fnWaitTest(
- "Text is shown when empty table (after filtering)",
- function () { oTable.fnFilter('nothinghere'); },
- function () { return $('#example tbody tr td')[0].innerHTML == "No matching records found" }
- );
-
-
-
- oTest.fnWaitTest(
- "Zero records language can be defined",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oLanguage": {
- "sZeroRecords": "unit test"
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.oLanguage.sZeroRecords == "unit test"; }
- );
-
- oTest.fnWaitTest(
- "Text is shown when empty table (after filtering)",
- function () { oTable.fnFilter('nothinghere2'); },
- function () { return $('#example tbody tr td')[0].innerHTML == "unit test" }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oSearch.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oSearch.js
deleted file mode 100644
index cb98c342..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/oSearch.js
+++ /dev/null
@@ -1,114 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "oSearch" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default values should be blank",
- null,
- function () {
- var bReturn = oSettings.oPreviousSearch.sSearch == "" &&
- !oSettings.oPreviousSearch.bRegex;
- return bReturn;
- }
- );
-
- /* This test might be considered iffy since the full object isn't given, but it's reasonable to
- * expect DataTables to cope with this. It should just assumine regex false
- */
- oTest.fnWaitTest(
- "Search term only in object",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oSearch": {
- "sSearch": "Mozilla"
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
- oTest.fnWaitTest(
- "New search will kill old one",
- function () {
- oTable.fnFilter("Opera");
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; }
- );
-
- oTest.fnWaitTest(
- "Search plain text term and escape regex true",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oSearch": {
- "sSearch": "DS",
- "bRegex": false
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Nintendo DS browser"; }
- );
-
- oTest.fnWaitTest(
- "Search plain text term and escape regex false",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oSearch": {
- "sSearch": "Opera",
- "bRegex": true
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; }
- );
-
- oTest.fnWaitTest(
- "Search regex text term and escape regex true",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oSearch": {
- "sSearch": "1.*",
- "bRegex": false
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; }
- );
-
- oTest.fnWaitTest(
- "Search regex text term and escape regex false",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "oSearch": {
- "sSearch": "1.*",
- "bRegex": true
- }
- } );
- },
- function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp.js
deleted file mode 100644
index ead02891..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp.js
+++ /dev/null
@@ -1,140 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "Custom data source property - property given" );
-
-
-$(document).ready( function () {
- var oInit = {
- "sAjaxSource": "../../../examples/ajax/sources/custom_prop.txt",
- "bDeferRender": true,
- "sAjaxDataProp": "demo"
- };
- $('#example').dataTable( oInit );
-
- oTest.fnWaitTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp2.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp2.js
deleted file mode 100644
index e76a8fd4..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp2.js
+++ /dev/null
@@ -1,140 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "Custom data source property - array only" );
-
-
-$(document).ready( function () {
- var oInit = {
- "sAjaxSource": "../../../examples/ajax/sources/array_only.txt",
- "bDeferRender": true,
- "sAjaxDataProp": ""
- };
- $('#example').dataTable( oInit );
-
- oTest.fnWaitTest(
- "10 rows shown on the first page",
- null,
- function () { return $('#example tbody tr').length == 10; }
- );
-
- oTest.fnTest(
- "Initial sort occured",
- null,
- function () { return $('#example tbody td:eq(0)').html() == "Gecko"; }
- );
-
- /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */
- oTest.fnTest(
- "Sorting (first click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; }
- );
-
- oTest.fnTest(
- "Sorting (third click) on second column",
- function () { $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Sorting (first click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "-"; }
- );
-
- oTest.fnTest(
- "Sorting (second click) on numeric column",
- function () { $('#example thead th:eq(3)').click(); },
- function () { return $('#example tbody td:eq(3)').html() == "522.1"; }
- );
-
- oTest.fnTest(
- "Sorting multi-column (first click)",
- function () {
- $('#example thead th:eq(0)').click();
- oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); },
- function () { var b =
- $('#example tbody td:eq(0)').html() == "Gecko" &&
- $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; }
- );
-
- oTest.fnTest(
- "Sorting multi-column - sorting second column only",
- function () {
- $('#example thead th:eq(1)').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Basic paging */
- oTest.fnTest(
- "Paging to second page",
- function () { $('#example_next').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; }
- );
-
- oTest.fnTest(
- "Paging to first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- oTest.fnTest(
- "Attempting to page back beyond the first page",
- function () { $('#example_previous').click(); },
- function () { return $('#example tbody td:eq(1)').html() == "All others"; }
- );
-
- /* Changing length */
- oTest.fnTest(
- "Changing table length to 25 records",
- function () { $("select[name=example_length]").val('25').change(); },
- function () { return $('#example tbody tr').length == 25; }
- );
-
- oTest.fnTest(
- "Changing table length to 50 records",
- function () { $("select[name=example_length]").val('50').change(); },
- function () { return $('#example tbody tr').length == 50; }
- );
-
- oTest.fnTest(
- "Changing table length to 100 records",
- function () { $("select[name=example_length]").val('100').change(); },
- function () { return $('#example tbody tr').length == 57; }
- );
-
- oTest.fnTest(
- "Changing table length to 10 records",
- function () { $("select[name=example_length]").val('10').change(); },
- function () { return $('#example tbody tr').length == 10; }
- );
-
- /*
- * Information element
- */
- oTest.fnTest(
- "Information on zero config",
- null,
- function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on second page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; }
- );
-
- oTest.fnTest(
- "Information on third page",
- function () { $('#example_next').click(); },
- function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sAjaxSource.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sAjaxSource.js
deleted file mode 100644
index 9d14e048..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sAjaxSource.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "sAjaxSource" );
-
-/* Sanitfy check really - all the other tests blast this */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Server side is off by default",
- null,
- function () {
- return oSettings.sAjaxSource == "../../../examples/ajax/sources/arrays.txt";
- }
- );
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sDom.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sDom.js
deleted file mode 100644
index f54fd007..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sDom.js
+++ /dev/null
@@ -1,269 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "sDom" );
-
-/* This is going to be brutal on the browser! There is a lot that can be tested here... */
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Default DOM varaible",
- null,
- function () { return oSettings.sDom == "lfrtip"; }
- );
-
- oTest.fnWaitTest(
- "Default DOM in document",
- null,
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- nNodes[4] == nInfo &&
- nNodes[5] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check example 1 in code propagates",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "sDom": '<"wrapper"flipt>'
- } );
- oSettings = oTable.fnSettings();
- },
- function () { return oSettings.sDom == '<"wrapper"flipt>'; }
- );
-
- oTest.fnWaitTest(
- "Check example 1 in DOM",
- null,
- function () {
- var jqNodes = $('#demo div, #demo table');
- var nNodes = [];
-
- /* Strip the paging nodes */
- for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ )
- {
- if ( jqNodes[i].getAttribute('id') != "example_previous" &&
- jqNodes[i].getAttribute('id') != "example_next" )
- {
- nNodes.push( jqNodes[i] );
- }
- }
-
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
- var nCustomWrapper = $('div.wrapper')[0];
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nCustomWrapper &&
- nNodes[2] == nFilter &&
- nNodes[3] == nLength &&
- nNodes[4] == nInfo &&
- nNodes[5] == nPaging &&
- nNodes[6] == nTable;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check example 2 in DOM",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "sDom": '<lf<t>ip>'
- } );
- },
- function () {
- var jqNodes = $('#demo div, #demo table');
- var nNodes = [];
- var nCustomWrappers = []
-
- /* Strip the paging nodes */
- for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ )
- {
- if ( jqNodes[i].getAttribute('id') != "example_previous" &&
- jqNodes[i].getAttribute('id') != "example_next" )
- {
- nNodes.push( jqNodes[i] );
- }
-
- /* Only the two custom divs don't have class names */
- if ( jqNodes[i].className == "" )
- {
- nCustomWrappers.push( jqNodes[i] );
- }
- }
-
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nCustomWrappers[0] &&
- nNodes[2] == nLength &&
- nNodes[3] == nFilter &&
- nNodes[4] == nCustomWrappers[1] &&
- nNodes[5] == nTable &&
- nNodes[6] == nInfo &&
- nNodes[7] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check no length element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "sDom": 'frtip'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- null == nLength &&
- nNodes[1] == nFilter &&
- nNodes[2] == nTable &&
- nNodes[3] == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check no filter element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "sDom": 'lrtip'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- null == nFilter &&
- nNodes[2] == nTable &&
- nNodes[3] == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- /* Note we don't test for no table as this is not supported (and it would be fairly daft! */
-
- oTest.fnWaitTest(
- "Check no info element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "sDom": 'lfrtp'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- null == nInfo &&
- nNodes[4] == nPaging;
- return bReturn;
- }
- );
-
- oTest.fnWaitTest(
- "Check no paging element",
- function () {
- oSession.fnRestore();
- $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "sDom": 'lfrti'
- } );
- },
- function () {
- var nNodes = $('#demo div, #demo table');
- var nWrapper = document.getElementById('example_wrapper');
- var nLength = document.getElementById('example_length');
- var nFilter = document.getElementById('example_filter');
- var nInfo = document.getElementById('example_info');
- var nPaging = document.getElementById('example_paginate');
- var nTable = document.getElementById('example');
-
- var bReturn =
- nNodes[0] == nWrapper &&
- nNodes[1] == nLength &&
- nNodes[2] == nFilter &&
- nNodes[3] == nTable &&
- nNodes[4] == nInfo &&
- null == nPaging;
- return bReturn;
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sPaginationType.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sPaginationType.js
deleted file mode 100644
index 9eed1054..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/sPaginationType.js
+++ /dev/null
@@ -1,136 +0,0 @@
-// DATA_TEMPLATE: empty_table
-oTest.fnStart( "sPaginationType" );
-
-$(document).ready( function () {
- /* Check the default */
- var oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true
- } );
- var oSettings = oTable.fnSettings();
-
- oTest.fnWaitTest(
- "Check two button paging is the default",
- null,
- function () { return oSettings.sPaginationType == "two_button"; }
- );
-
- oTest.fnWaitTest(
- "Check class is applied",
- null,
- function () { return $('#example_paginate').hasClass('paging_two_button'); }
- );
-
- oTest.fnWaitTest(
- "Two A elements are in the wrapper",
- null,
- function () { return $('#example_paginate a').length == 2; }
- );
-
- oTest.fnWaitTest(
- "We have the previous button",
- null,
- function () { return document.getElementById('example_previous'); }
- );
-
- oTest.fnWaitTest(
- "We have the next button",
- null,
- function () { return document.getElementById('example_next'); }
- );
-
- oTest.fnWaitTest(
- "Previous button is disabled",
- null,
- function () { return $('#example_previous').hasClass('paginate_disabled_previous'); }
- );
-
- oTest.fnWaitTest(
- "Next button is enabled",
- null,
- function () { return $('#example_next').hasClass('paginate_enabled_next'); }
- );
-
- /* Don't test paging - that's done by the zero config test script. */
-
-
- /* Two buttons paging */
- var bComplete = false;
- oTest.fnWaitTest(
- "Can enabled full numbers paging",
- function () {
- oSession.fnRestore();
- oTable = $('#example').dataTable( {
- "sAjaxSource": "../../../examples/ajax/sources/arrays.txt",
- "bDeferRender": true,
- "sPaginationType": "full_numbers",
- "fnInitComplete": function () {
- bComplete = true;
- }
- } );
- oSettings = oTable.fnSettings();
- },
- function () {
- if ( bComplete )
- return oSettings.sPaginationType == "full_numbers";
- else
- return false;
- }
- );
-
- oTest.fnWaitTest(
- "Check full numbers class is applied",
- null,
- function () { return $('#example_paginate').hasClass('paging_full_numbers'); }
- );
-
-
- var nFirst, nPrevious, nNext, nLast;
- oTest.fnWaitTest(
- "Jump to last page",
- function () {
- nFirst = $('div.dataTables_paginate a.first');
- nPrevious = $('div.dataTables_paginate a.previous');
- nNext = $('div.dataTables_paginate a.next');
- nLast = $('div.dataTables_paginate a.last');
- nLast.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries";
- }
- );
-
- oTest.fnWaitTest(
- "Go to two pages previous",
- function () {
- nPrevious.click();
- nPrevious.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 31 to 40 of 57 entries";
- }
- );
-
- oTest.fnWaitTest(
- "Next (second last) page",
- function () {
- nNext.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 41 to 50 of 57 entries";
- }
- );
-
- oTest.fnWaitTest(
- "Jump to first page",
- function () {
- nFirst.click();
- },
- function () {
- return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries";
- }
- );
-
-
- oTest.fnComplete();
-} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/unit_test.js b/wqflask/wqflask/static/new/packages/DataTables/unit_testing/unit_test.js
deleted file mode 100644
index d85d7ee2..00000000
--- a/wqflask/wqflask/static/new/packages/DataTables/unit_testing/unit_test.js
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
- * File: unit_test.js
- * Version: 0.0.1
- * CVS: $Id$
- * Description: Unit test framework
- * Author: Allan Jardine (www.sprymedia.co.uk)
- * Created: Sun Mar 8 22:02:49 GMT 2009
- * Modified: $Date$ by $Author$
- * Language: Javascript
- * License: GPL v2 or BSD 3 point style
- * Project: DataTables
- * Contact: allan.jardine@sprymedia.co.uk
- *
- * Copyright 2009 Allan Jardine, all rights reserved.
- *
- * Description:
- * This is a javascript library suitable for use as a unit testing framework. Employing a queuing
- * mechanisim to take account of async events in javascript, this library will communicates with
- * a controller frame (to report individual test status).
- *
- */
-
-
-var oTest = {
- /* Block further tests from occuring - might be end of tests or due to async wait */
- bBlock: false,
-
- /* Number of times to try retesting for a blocking test */
- iReTestLimit: 20,
-
- /* Amount of time to wait between trying for an async test */
- iReTestDelay: 150,
-
- /* End tests - external control */
- bEnd: false,
-
- /* Internal variables */
- _aoQueue: [],
- _iReTest: 0,
- _bFinished: false,
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Recommened public functions
- */
-
- /*
- * Function: fnTest
- * Purpose: Add a test to the queue
- * Returns: -
- * Inputs: string:sMessage - name of the test
- * function:fnTest - function which will be evaludated to get the test result
- */
- "fnTest": function ( sMessage, fnSetup, fnTest )
- {
- this._aoQueue.push( {
- "sMessage": sMessage,
- "fnSetup": fnSetup,
- "fnTest": fnTest,
- "bPoll": false
- } );
- this._fnNext();
- },
-
- /*
- * Function: fnWaitTest
- * Purpose: Add a test to the queue which has a re-test cycle
- * Returns: -
- * Inputs: string:sMessage - name of the test
- * function:fnTest - function which will be evaludated to get the test result
- */
- "fnWaitTest": function ( sMessage, fnSetup, fnTest )
- {
- this._aoQueue.push( {
- "sMessage": sMessage,
- "fnSetup": fnSetup,
- "fnTest": fnTest,
- "bPoll": true
- } );
- this._fnNext();
- },
-
- /*
- * Function: fnStart
- * Purpose: Indicate that this is a new unit and what it is testing (message to end user)
- * Returns: -
- * Inputs: string:sMessage - message to give to the user about this unit
- */
- "fnStart": function ( sMessage )
- {
- window.parent.controller.fnStartMessage( sMessage );
- },
-
- /*
- * Function: fnComplete
- * Purpose: Tell the controller that we are all done here
- * Returns: -
- * Inputs: -
- */
- "fnComplete": function ()
- {
- this._bFinished = true;
- this._fnNext();
- },
-
- /*
- * Function: fnCookieDestroy
- * Purpose: Destroy a cookie of a given name
- * Returns: -
- * Inputs: -
- */
- "fnCookieDestroy": function ( oTable )
- {
- var sName = oTable.fnSettings().sCookiePrefix+oTable.fnSettings().sInstance;
- var aParts = window.location.pathname.split('/');
- var sNameFile = sName + '_' + aParts.pop().replace(/[\/:]/g,"").toLowerCase();
- document.cookie = sNameFile+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path="+
- aParts.join('/') + "/";
- },
-
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Internal functions
- */
-
-
- "_fnReTest": function ( oTestInfo )
- {
- var bResult = oTestInfo.fnTest( );
- if ( bResult )
- {
- /* Test passed on retry */
- this._fnResult( true );
- this._fnNext();
- }
- else
- {
- if ( this._iReTest < this.iReTestLimit )
- {
- this._iReTest++;
- setTimeout( function() {
- oTest._fnReTest( oTestInfo );
- }, this.iReTestDelay );
- }
- else
- {
- this._fnResult( false );
- }
- }
- },
-
- "_fnNext": function ()
- {
- if ( this.bEnd )
- {
- return;
- }
-
- if ( !this.bBlock && this._aoQueue.length > 0 )
- {
- var oNextTest = this._aoQueue.shift();
- window.parent.controller.fnTestStart( oNextTest.sMessage );
- this.bBlock = true;
-
- if ( typeof oNextTest.fnSetup == 'function' )
- {
- oNextTest.fnSetup( );
- }
- var bResult = oNextTest.fnTest( );
- //bResult = false;
-
- if ( oNextTest.bPoll )
- {
- if ( bResult )
- {
- this._fnResult( true );
- this._fnNext();
- }
- else
- {
- _iReTest = 0;
- setTimeout( function() {
- oTest._fnReTest( oNextTest );
- }, this.iReTestDelay );
- }
- }
- else
- {
- this._fnResult( bResult );
- this._fnNext();
- }
- }
- else if ( !this.bBlock && this._aoQueue.length == 0 && this._bFinished )
- {
- window.parent.controller.fnUnitComplete( );
- }
- },
-
- "_fnResult": function ( b )
- {
- window.parent.controller.fnTestResult( b );
- this.bBlock = false;
- if ( !b )
- {
- this.bEnd = true;
- }
- }
-};
-
-
-var oDispacher = {
- "click": function ( nNode, oSpecial )
- {
- var evt = this.fnCreateEvent( 'click', nNode, oSpecial );
- if ( nNode.dispatchEvent )
- nNode.dispatchEvent(evt);
- else
- nNode.fireEvent('onclick', evt);
- },
-
- "change": function ( nNode )
- {
- var evt = this.fnCreateEvent( 'change', nNode );
- if ( nNode.dispatchEvent )
- nNode.dispatchEvent(evt);
- else
- nNode.fireEvent('onchange', evt);
- },
-
-
- /*
- * Function: fnCreateEvent
- * Purpose: Create an event oject based on the type to trigger an event - x-platform
- * Returns: event:evt
- * Inputs: string:sType - type of event
- * node:nTarget - target node of the event
- */
- fnCreateEvent: function( sType, nTarget, oSpecial )
- {
- var evt = null;
- var oTargetPos = this._fnGetPos( nTarget );
- var sTypeGroup = this._fnEventTypeGroup( sType );
- if ( typeof oSpecial == 'undefined' )
- {
- oSpecial = {};
- }
-
- var ctrlKey = false;
- var altKey = false;
- var shiftKey = (typeof oSpecial.shift != 'undefined') ? oSpecial.shift : false;
- var metaKey = false;
- var button = false;
-
- if ( document.createEvent )
- {
- switch ( sTypeGroup )
- {
- case 'mouse':
- evt = document.createEvent( "MouseEvents" );
- evt.initMouseEvent( sType, true, true, window, 0, oTargetPos[0], oTargetPos[1],
- oTargetPos[0], oTargetPos[1], ctrlKey, altKey, shiftKey,
- metaKey, button, null );
- break;
-
- case 'html':
- evt = document.createEvent( "HTMLEvents" );
- evt.initEvent( sType, true, true );
- break;
-
- case 'ui':
- evt = document.createEvent( "UIEvents" );
- evt.initUIEvent( sType, true, true, window, 0 );
- break;
-
- default:
- break;
- }
- }
- else if ( document.createEventObject )
- {
- switch ( sTypeGroup )
- {
- case 'mouse':
- evt = document.createEventObject();
- evt.screenX = oTargetPos[0];
- evt.screenX = oTargetPos[1];
- evt.clientX = oTargetPos[0];
- evt.clientY = oTargetPos[1];
- evt.ctrlKey = ctrlKey;
- evt.altKey = altKey;
- evt.shiftKey = shiftKey;
- evt.metaKey = metaKey;
- evt.button = button;
- evt.relatedTarget = null;
- break;
-
- case 'html':
- /* fall through to basic event object */
-
- case 'ui':
- evt = document.createEventObject();
- break;
-
- default:
- break;
- }
- }
-
- return evt;
- },
-
- /*
- * Function: DesignCore.fnGetPos
- * Purpose: Get the position of an element on the page
- * Returns: array[ 0-int:left, 1-int:top ]
- * Inputs: node:obj - node to analyse
- */
- _fnGetPos: function ( obj )
- {
- var curleft = 0;
- var curtop = 0;
-
- if (obj.offsetParent)
- {
- curleft = obj.offsetLeft;
- curtop = obj.offsetTop;
- while (obj = obj.offsetParent )
- {
- curleft += obj.offsetLeft;
- curtop += obj.offsetTop;
- }
- }
- return [curleft,curtop];
- },
-
-
- /*
- * Function: _fnEventTypeGroup
- * Purpose: Group the event types as per w3c groupings
- * Returns: -
- * Inputs: string:sType
- */
- _fnEventTypeGroup: function ( sType )
- {
- switch ( sType )
- {
- case 'click':
- case 'dblclick':
- case 'mousedown':
- case 'mousemove':
- case 'mouseout':
- case 'mouseover':
- case 'mouseup':
- return 'mouse';
-
- case 'change':
- case 'focus':
- case 'blur':
- case 'select':
- case 'submit':
- return 'html';
-
- case 'keydown':
- case 'keypress':
- case 'keyup':
- case 'load':
- case 'unload':
- return 'ui';
-
- default:
- return 'custom';
- }
- }
-}
-
-
-var oSession = {
- nTable: null,
-
- fnCache: function ()
- {
- this.nTable = document.getElementById('demo').cloneNode(true);
- },
-
- fnRestore: function ()
- {
- while( $.fn.dataTableSettings.length > 0 )
- {
- try {
- $.fn.dataTableSettings[0].oInstance.fnDestroy();
- } catch (e) {
- $.fn.dataTableSettings.splice( 0, 1 );
- }
- }
- //$.fn.dataTableSettings.splice( 0, $.fn.dataTableSettings.length );
- var nDemo = document.getElementById('demo');
- nDemo.innerHTML = "";
- for ( var i=0, iLen=this.nTable.childNodes.length ; i<iLen ; i++ )
- {
- nDemo.appendChild( this.nTable.childNodes[0] );
- }
- this.fnCache();
- }
-}
-
-$(document).ready( function () {
- oSession.fnCache();
-} );
diff --git a/wqflask/wqflask/static/new/packages/noUiSlider/nouislider.css b/wqflask/wqflask/static/new/packages/noUiSlider/nouislider.css
deleted file mode 100644
index d07b87f6..00000000
--- a/wqflask/wqflask/static/new/packages/noUiSlider/nouislider.css
+++ /dev/null
@@ -1,162 +0,0 @@
-
-/* Functional styling;
- * These styles are required for noUiSlider to function.
- * You don't need to change these rules to apply your design.
- */
-.noUi-target,
-.noUi-target * {
--webkit-touch-callout: none;
--webkit-user-select: none;
--ms-touch-action: none;
--ms-user-select: none;
--moz-user-select: none;
--moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.noUi-target {
- position: relative;
- direction: ltr;
-}
-.noUi-base {
- width: 100%;
- height: 100%;
- position: relative;
- z-index: 1; /* Fix 401 */
-}
-.noUi-origin {
- position: absolute;
- right: 0;
- top: 0;
- left: 0;
- bottom: 0;
-}
-.noUi-handle {
- position: relative;
- z-index: 1;
-}
-.noUi-stacking .noUi-handle {
-/* This class is applied to the lower origin when
- its values is > 50%. */
- z-index: 10;
-}
-.noUi-state-tap .noUi-origin {
--webkit-transition: left 0.3s, top 0.3s;
- transition: left 0.3s, top 0.3s;
-}
-.noUi-state-drag * {
- cursor: inherit !important;
-}
-
-/* Painting and performance;
- * Browsers can paint handles in their own layer.
- */
-.noUi-base {
- -webkit-transform: translate3d(0,0,0);
- transform: translate3d(0,0,0);
-}
-
-/* Slider size and handle placement;
- */
-.noUi-horizontal {
- height: 18px;
-}
-.noUi-horizontal .noUi-handle {
- width: 34px;
- height: 28px;
- left: -17px;
- top: -6px;
-}
-.noUi-vertical {
- width: 18px;
-}
-.noUi-vertical .noUi-handle {
- width: 28px;
- height: 34px;
- left: -6px;
- top: -17px;
-}
-
-/* Styling;
- */
-.noUi-background {
- background: #FAFAFA;
- box-shadow: inset 0 1px 1px #f0f0f0;
-}
-.noUi-connect {
- background: #3FB8AF;
- box-shadow: inset 0 0 3px rgba(51,51,51,0.45);
--webkit-transition: background 450ms;
- transition: background 450ms;
-}
-.noUi-origin {
- border-radius: 2px;
-}
-.noUi-target {
- border-radius: 4px;
- border: 1px solid #D3D3D3;
- box-shadow: inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB;
-}
-.noUi-target.noUi-connect {
- box-shadow: inset 0 0 3px rgba(51,51,51,0.45), 0 3px 6px -5px #BBB;
-}
-
-/* Handles and cursors;
- */
-.noUi-dragable {
- cursor: w-resize;
-}
-.noUi-vertical .noUi-dragable {
- cursor: n-resize;
-}
-.noUi-handle {
- border: 1px solid #D9D9D9;
- border-radius: 3px;
- background: #FFF;
- cursor: default;
- box-shadow: inset 0 0 1px #FFF,
- inset 0 1px 7px #EBEBEB,
- 0 3px 6px -3px #BBB;
-}
-.noUi-active {
- box-shadow: inset 0 0 1px #FFF,
- inset 0 1px 7px #DDD,
- 0 3px 6px -3px #BBB;
-}
-
-/* Handle stripes;
- */
-.noUi-handle:before,
-.noUi-handle:after {
- content: "";
- display: block;
- position: absolute;
- height: 14px;
- width: 1px;
- background: #E8E7E6;
- left: 14px;
- top: 6px;
-}
-.noUi-handle:after {
- left: 17px;
-}
-.noUi-vertical .noUi-handle:before,
-.noUi-vertical .noUi-handle:after {
- width: 14px;
- height: 1px;
- left: 6px;
- top: 14px;
-}
-.noUi-vertical .noUi-handle:after {
- top: 17px;
-}
-
-/* Disabled state;
- */
-[disabled].noUi-connect,
-[disabled] .noUi-connect {
- background: #B8B8B8;
-}
-[disabled].noUi-origin,
-[disabled] .noUi-handle {
- cursor: not-allowed;
-}
diff --git a/wqflask/wqflask/static/new/packages/noUiSlider/nouislider.js b/wqflask/wqflask/static/new/packages/noUiSlider/nouislider.js
deleted file mode 100644
index 67ae7549..00000000
--- a/wqflask/wqflask/static/new/packages/noUiSlider/nouislider.js
+++ /dev/null
@@ -1,1629 +0,0 @@
-/*! nouislider - 8.0.2 - 2015-07-06 13:22:09 */
-
-/*jslint browser: true */
-/*jslint white: true */
-
-(function (factory) {
-
- if ( typeof define === 'function' && define.amd ) {
-
- // AMD. Register as an anonymous module.
- define([], factory);
-
- } else if ( typeof exports === 'object' ) {
-
- var fs = require('fs');
-
- // Node/CommonJS
- module.exports = factory();
- module.exports.css = function () {
- return fs.readFileSync(__dirname + '/nouislider.min.css', 'utf8');
- };
-
- } else {
-
- // Browser globals
- window.noUiSlider = factory();
- }
-
-}(function( ){
-
- 'use strict';
-
-
- // Removes duplicates from an array.
- function unique(array) {
- return array.filter(function(a){
- return !this[a] ? this[a] = true : false;
- }, {});
- }
-
- // Round a value to the closest 'to'.
- function closest ( value, to ) {
- return Math.round(value / to) * to;
- }
-
- // Current position of an element relative to the document.
- function offset ( elem ) {
-
- var rect = elem.getBoundingClientRect(),
- doc = elem.ownerDocument,
- win = doc.defaultView || doc.parentWindow,
- docElem = doc.documentElement,
- xOff = win.pageXOffset;
-
- // getBoundingClientRect contains left scroll in Chrome on Android.
- // I haven't found a feature detection that proves this. Worst case
- // scenario on mis-match: the 'tap' feature on horizontal sliders breaks.
- if ( /webkit.*Chrome.*Mobile/i.test(navigator.userAgent) ) {
- xOff = 0;
- }
-
- return {
- top: rect.top + win.pageYOffset - docElem.clientTop,
- left: rect.left + xOff - docElem.clientLeft
- };
- }
-
- // Checks whether a value is numerical.
- function isNumeric ( a ) {
- return typeof a === 'number' && !isNaN( a ) && isFinite( a );
- }
-
- // Rounds a number to 7 supported decimals.
- function accurateNumber( number ) {
- var p = Math.pow(10, 7);
- return Number((Math.round(number*p)/p).toFixed(7));
- }
-
- // Sets a class and removes it after [duration] ms.
- function addClassFor ( element, className, duration ) {
- addClass(element, className);
- setTimeout(function(){
- removeClass(element, className);
- }, duration);
- }
-
- // Limits a value to 0 - 100
- function limit ( a ) {
- return Math.max(Math.min(a, 100), 0);
- }
-
- // Wraps a variable as an array, if it isn't one yet.
- function asArray ( a ) {
- return Array.isArray(a) ? a : [a];
- }
-
- // Counts decimals
- function countDecimals ( numStr ) {
- var pieces = numStr.split(".");
- return pieces.length > 1 ? pieces[1].length : 0;
- }
-
- // http://youmightnotneedjquery.com/#add_class
- function addClass ( el, className ) {
- if ( el.classList ) {
- el.classList.add(className);
- } else {
- el.className += ' ' + className;
- }
- }
-
- // http://youmightnotneedjquery.com/#remove_class
- function removeClass ( el, className ) {
- if ( el.classList ) {
- el.classList.remove(className);
- } else {
- el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
- }
- }
-
- // http://youmightnotneedjquery.com/#has_class
- function hasClass ( el, className ) {
- if ( el.classList ) {
- el.classList.contains(className);
- } else {
- new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className);
- }
- }
-
-
- var
- // Determine the events to bind. IE11 implements pointerEvents without
- // a prefix, which breaks compatibility with the IE10 implementation.
- /** @const */
- actions = window.navigator.pointerEnabled ? {
- start: 'pointerdown',
- move: 'pointermove',
- end: 'pointerup'
- } : window.navigator.msPointerEnabled ? {
- start: 'MSPointerDown',
- move: 'MSPointerMove',
- end: 'MSPointerUp'
- } : {
- start: 'mousedown touchstart',
- move: 'mousemove touchmove',
- end: 'mouseup touchend'
- },
- // Re-usable list of classes;
- /** @const */
- Classes = [
-/* 0 */ 'noUi-target'
-/* 1 */ ,'noUi-base'
-/* 2 */ ,'noUi-origin'
-/* 3 */ ,'noUi-handle'
-/* 4 */ ,'noUi-horizontal'
-/* 5 */ ,'noUi-vertical'
-/* 6 */ ,'noUi-background'
-/* 7 */ ,'noUi-connect'
-/* 8 */ ,'noUi-ltr'
-/* 9 */ ,'noUi-rtl'
-/* 10 */ ,'noUi-dragable'
-/* 11 */ ,''
-/* 12 */ ,'noUi-state-drag'
-/* 13 */ ,''
-/* 14 */ ,'noUi-state-tap'
-/* 15 */ ,'noUi-active'
-/* 16 */ ,''
-/* 17 */ ,'noUi-stacking'
- ];
-
-
-// Value calculation
-
- // Determine the size of a sub-range in relation to a full range.
- function subRangeRatio ( pa, pb ) {
- return (100 / (pb - pa));
- }
-
- // (percentage) How many percent is this value of this range?
- function fromPercentage ( range, value ) {
- return (value * 100) / ( range[1] - range[0] );
- }
-
- // (percentage) Where is this value on this range?
- function toPercentage ( range, value ) {
- return fromPercentage( range, range[0] < 0 ?
- value + Math.abs(range[0]) :
- value - range[0] );
- }
-
- // (value) How much is this percentage on this range?
- function isPercentage ( range, value ) {
- return ((value * ( range[1] - range[0] )) / 100) + range[0];
- }
-
-
-// Range conversion
-
- function getJ ( value, arr ) {
-
- var j = 1;
-
- while ( value >= arr[j] ){
- j += 1;
- }
-
- return j;
- }
-
- // (percentage) Input a value, find where, on a scale of 0-100, it applies.
- function toStepping ( xVal, xPct, value ) {
-
- if ( value >= xVal.slice(-1)[0] ){
- return 100;
- }
-
- var j = getJ( value, xVal ), va, vb, pa, pb;
-
- va = xVal[j-1];
- vb = xVal[j];
- pa = xPct[j-1];
- pb = xPct[j];
-
- return pa + (toPercentage([va, vb], value) / subRangeRatio (pa, pb));
- }
-
- // (value) Input a percentage, find where it is on the specified range.
- function fromStepping ( xVal, xPct, value ) {
-
- // There is no range group that fits 100
- if ( value >= 100 ){
- return xVal.slice(-1)[0];
- }
-
- var j = getJ( value, xPct ), va, vb, pa, pb;
-
- va = xVal[j-1];
- vb = xVal[j];
- pa = xPct[j-1];
- pb = xPct[j];
-
- return isPercentage([va, vb], (value - pa) * subRangeRatio (pa, pb));
- }
-
- // (percentage) Get the step that applies at a certain value.
- function getStep ( xPct, xSteps, snap, value ) {
-
- if ( value === 100 ) {
- return value;
- }
-
- var j = getJ( value, xPct ), a, b;
-
- // If 'snap' is set, steps are used as fixed points on the slider.
- if ( snap ) {
-
- a = xPct[j-1];
- b = xPct[j];
-
- // Find the closest position, a or b.
- if ((value - a) > ((b-a)/2)){
- return b;
- }
-
- return a;
- }
-
- if ( !xSteps[j-1] ){
- return value;
- }
-
- return xPct[j-1] + closest(
- value - xPct[j-1],
- xSteps[j-1]
- );
- }
-
-
-// Entry parsing
-
- function handleEntryPoint ( index, value, that ) {
-
- var percentage;
-
- // Wrap numerical input in an array.
- if ( typeof value === "number" ) {
- value = [value];
- }
-
- // Reject any invalid input, by testing whether value is an array.
- if ( Object.prototype.toString.call( value ) !== '[object Array]' ){
- throw new Error("noUiSlider: 'range' contains invalid value.");
- }
-
- // Covert min/max syntax to 0 and 100.
- if ( index === 'min' ) {
- percentage = 0;
- } else if ( index === 'max' ) {
- percentage = 100;
- } else {
- percentage = parseFloat( index );
- }
-
- // Check for correct input.
- if ( !isNumeric( percentage ) || !isNumeric( value[0] ) ) {
- throw new Error("noUiSlider: 'range' value isn't numeric.");
- }
-
- // Store values.
- that.xPct.push( percentage );
- that.xVal.push( value[0] );
-
- // NaN will evaluate to false too, but to keep
- // logging clear, set step explicitly. Make sure
- // not to override the 'step' setting with false.
- if ( !percentage ) {
- if ( !isNaN( value[1] ) ) {
- that.xSteps[0] = value[1];
- }
- } else {
- that.xSteps.push( isNaN(value[1]) ? false : value[1] );
- }
- }
-
- function handleStepPoint ( i, n, that ) {
-
- // Ignore 'false' stepping.
- if ( !n ) {
- return true;
- }
-
- // Factor to range ratio
- that.xSteps[i] = fromPercentage([
- that.xVal[i]
- ,that.xVal[i+1]
- ], n) / subRangeRatio (
- that.xPct[i],
- that.xPct[i+1] );
- }
-
-
-// Interface
-
- // The interface to Spectrum handles all direction-based
- // conversions, so the above values are unaware.
-
- function Spectrum ( entry, snap, direction, singleStep ) {
-
- this.xPct = [];
- this.xVal = [];
- this.xSteps = [ singleStep || false ];
- this.xNumSteps = [ false ];
-
- this.snap = snap;
- this.direction = direction;
-
- var index, ordered = [ /* [0, 'min'], [1, '50%'], [2, 'max'] */ ];
-
- // Map the object keys to an array.
- for ( index in entry ) {
- if ( entry.hasOwnProperty(index) ) {
- ordered.push([entry[index], index]);
- }
- }
-
- // Sort all entries by value (numeric sort).
- ordered.sort(function(a, b) { return a[0] - b[0]; });
-
- // Convert all entries to subranges.
- for ( index = 0; index < ordered.length; index++ ) {
- handleEntryPoint(ordered[index][1], ordered[index][0], this);
- }
-
- // Store the actual step values.
- // xSteps is sorted in the same order as xPct and xVal.
- this.xNumSteps = this.xSteps.slice(0);
-
- // Convert all numeric steps to the percentage of the subrange they represent.
- for ( index = 0; index < this.xNumSteps.length; index++ ) {
- handleStepPoint(index, this.xNumSteps[index], this);
- }
- }
-
- Spectrum.prototype.getMargin = function ( value ) {
- return this.xPct.length === 2 ? fromPercentage(this.xVal, value) : false;
- };
-
- Spectrum.prototype.toStepping = function ( value ) {
-
- value = toStepping( this.xVal, this.xPct, value );
-
- // Invert the value if this is a right-to-left slider.
- if ( this.direction ) {
- value = 100 - value;
- }
-
- return value;
- };
-
- Spectrum.prototype.fromStepping = function ( value ) {
-
- // Invert the value if this is a right-to-left slider.
- if ( this.direction ) {
- value = 100 - value;
- }
-
- return accurateNumber(fromStepping( this.xVal, this.xPct, value ));
- };
-
- Spectrum.prototype.getStep = function ( value ) {
-
- // Find the proper step for rtl sliders by search in inverse direction.
- // Fixes issue #262.
- if ( this.direction ) {
- value = 100 - value;
- }
-
- value = getStep(this.xPct, this.xSteps, this.snap, value );
-
- if ( this.direction ) {
- value = 100 - value;
- }
-
- return value;
- };
-
- Spectrum.prototype.getApplicableStep = function ( value ) {
-
- // If the value is 100%, return the negative step twice.
- var j = getJ(value, this.xPct), offset = value === 100 ? 2 : 1;
- return [this.xNumSteps[j-2], this.xVal[j-offset], this.xNumSteps[j-offset]];
- };
-
- // Outside testing
- Spectrum.prototype.convert = function ( value ) {
- return this.getStep(this.toStepping(value));
- };
-
-/* Every input option is tested and parsed. This'll prevent
- endless validation in internal methods. These tests are
- structured with an item for every option available. An
- option can be marked as required by setting the 'r' flag.
- The testing function is provided with three arguments:
- - The provided value for the option;
- - A reference to the options object;
- - The name for the option;
-
- The testing function returns false when an error is detected,
- or true when everything is OK. It can also modify the option
- object, to make sure all values can be correctly looped elsewhere. */
-
- var defaultFormatter = { 'to': function( value ){
- return value.toFixed(2);
- }, 'from': Number };
-
- function testStep ( parsed, entry ) {
-
- if ( !isNumeric( entry ) ) {
- throw new Error("noUiSlider: 'step' is not numeric.");
- }
-
- // The step option can still be used to set stepping
- // for linear sliders. Overwritten if set in 'range'.
- parsed.singleStep = entry;
- }
-
- function testRange ( parsed, entry ) {
-
- // Filter incorrect input.
- if ( typeof entry !== 'object' || Array.isArray(entry) ) {
- throw new Error("noUiSlider: 'range' is not an object.");
- }
-
- // Catch missing start or end.
- if ( entry.min === undefined || entry.max === undefined ) {
- throw new Error("noUiSlider: Missing 'min' or 'max' in 'range'.");
- }
-
- parsed.spectrum = new Spectrum(entry, parsed.snap, parsed.dir, parsed.singleStep);
- }
-
- function testStart ( parsed, entry ) {
-
- entry = asArray(entry);
-
- // Validate input. Values aren't tested, as the public .val method
- // will always provide a valid location.
- if ( !Array.isArray( entry ) || !entry.length || entry.length > 2 ) {
- throw new Error("noUiSlider: 'start' option is incorrect.");
- }
-
- // Store the number of handles.
- parsed.handles = entry.length;
-
- // When the slider is initialized, the .val method will
- // be called with the start options.
- parsed.start = entry;
- }
-
- function testSnap ( parsed, entry ) {
-
- // Enforce 100% stepping within subranges.
- parsed.snap = entry;
-
- if ( typeof entry !== 'boolean' ){
- throw new Error("noUiSlider: 'snap' option must be a boolean.");
- }
- }
-
- function testAnimate ( parsed, entry ) {
-
- // Enforce 100% stepping within subranges.
- parsed.animate = entry;
-
- if ( typeof entry !== 'boolean' ){
- throw new Error("noUiSlider: 'animate' option must be a boolean.");
- }
- }
-
- function testConnect ( parsed, entry ) {
-
- if ( entry === 'lower' && parsed.handles === 1 ) {
- parsed.connect = 1;
- } else if ( entry === 'upper' && parsed.handles === 1 ) {
- parsed.connect = 2;
- } else if ( entry === true && parsed.handles === 2 ) {
- parsed.connect = 3;
- } else if ( entry === false ) {
- parsed.connect = 0;
- } else {
- throw new Error("noUiSlider: 'connect' option doesn't match handle count.");
- }
- }
-
- function testOrientation ( parsed, entry ) {
-
- // Set orientation to an a numerical value for easy
- // array selection.
- switch ( entry ){
- case 'horizontal':
- parsed.ort = 0;
- break;
- case 'vertical':
- parsed.ort = 1;
- break;
- default:
- throw new Error("noUiSlider: 'orientation' option is invalid.");
- }
- }
-
- function testMargin ( parsed, entry ) {
-
- if ( !isNumeric(entry) ){
- throw new Error("noUiSlider: 'margin' option must be numeric.");
- }
-
- parsed.margin = parsed.spectrum.getMargin(entry);
-
- if ( !parsed.margin ) {
- throw new Error("noUiSlider: 'margin' option is only supported on linear sliders.");
- }
- }
-
- function testLimit ( parsed, entry ) {
-
- if ( !isNumeric(entry) ){
- throw new Error("noUiSlider: 'limit' option must be numeric.");
- }
-
- parsed.limit = parsed.spectrum.getMargin(entry);
-
- if ( !parsed.limit ) {
- throw new Error("noUiSlider: 'limit' option is only supported on linear sliders.");
- }
- }
-
- function testDirection ( parsed, entry ) {
-
- // Set direction as a numerical value for easy parsing.
- // Invert connection for RTL sliders, so that the proper
- // handles get the connect/background classes.
- switch ( entry ) {
- case 'ltr':
- parsed.dir = 0;
- break;
- case 'rtl':
- parsed.dir = 1;
- parsed.connect = [0,2,1,3][parsed.connect];
- break;
- default:
- throw new Error("noUiSlider: 'direction' option was not recognized.");
- }
- }
-
- function testBehaviour ( parsed, entry ) {
-
- // Make sure the input is a string.
- if ( typeof entry !== 'string' ) {
- throw new Error("noUiSlider: 'behaviour' must be a string containing options.");
- }
-
- // Check if the string contains any keywords.
- // None are required.
- var tap = entry.indexOf('tap') >= 0,
- drag = entry.indexOf('drag') >= 0,
- fixed = entry.indexOf('fixed') >= 0,
- snap = entry.indexOf('snap') >= 0;
-
- parsed.events = {
- tap: tap || snap,
- drag: drag,
- fixed: fixed,
- snap: snap
- };
- }
-
- function testFormat ( parsed, entry ) {
-
- parsed.format = entry;
-
- // Any object with a to and from method is supported.
- if ( typeof entry.to === 'function' && typeof entry.from === 'function' ) {
- return true;
- }
-
- throw new Error( "noUiSlider: 'format' requires 'to' and 'from' methods.");
- }
-
- // Test all developer settings and parse to assumption-safe values.
- function testOptions ( options ) {
-
- var parsed = {
- margin: 0,
- limit: 0,
- animate: true,
- format: defaultFormatter
- }, tests;
-
- // Tests are executed in the order they are presented here.
- tests = {
- 'step': { r: false, t: testStep },
- 'start': { r: true, t: testStart },
- 'connect': { r: true, t: testConnect },
- 'direction': { r: true, t: testDirection },
- 'snap': { r: false, t: testSnap },
- 'animate': { r: false, t: testAnimate },
- 'range': { r: true, t: testRange },
- 'orientation': { r: false, t: testOrientation },
- 'margin': { r: false, t: testMargin },
- 'limit': { r: false, t: testLimit },
- 'behaviour': { r: true, t: testBehaviour },
- 'format': { r: false, t: testFormat }
- };
-
- var defaults = {
- 'connect': false,
- 'direction': 'ltr',
- 'behaviour': 'tap',
- 'orientation': 'horizontal'
- };
-
- // Set defaults where applicable.
- Object.keys(defaults).forEach(function ( name ) {
- if ( options[name] === undefined ) {
- options[name] = defaults[name];
- }
- });
-
- // Run all options through a testing mechanism to ensure correct
- // input. It should be noted that options might get modified to
- // be handled properly. E.g. wrapping integers in arrays.
- Object.keys(tests).forEach(function( name ){
-
- var test = tests[name];
-
- // If the option isn't set, but it is required, throw an error.
- if ( options[name] === undefined ) {
-
- if ( test.r ) {
- throw new Error("noUiSlider: '" + name + "' is required.");
- }
-
- return true;
- }
-
- test.t( parsed, options[name] );
- });
-
- // Forward pips options
- parsed.pips = options.pips;
-
- // Pre-define the styles.
- parsed.style = parsed.ort ? 'top' : 'left';
-
- return parsed;
- }
-
-
- // Delimit proposed values for handle positions.
- function getPositions ( a, b, delimit ) {
-
- // Add movement to current position.
- var c = a + b[0], d = a + b[1];
-
- // Only alter the other position on drag,
- // not on standard sliding.
- if ( delimit ) {
- if ( c < 0 ) {
- d += Math.abs(c);
- }
- if ( d > 100 ) {
- c -= ( d - 100 );
- }
-
- // Limit values to 0 and 100.
- return [limit(c), limit(d)];
- }
-
- return [c,d];
- }
-
- // Provide a clean event with standardized offset values.
- function fixEvent ( e ) {
-
- // Prevent scrolling and panning on touch events, while
- // attempting to slide. The tap event also depends on this.
- e.preventDefault();
-
- // Filter the event to register the type, which can be
- // touch, mouse or pointer. Offset changes need to be
- // made on an event specific basis.
- var touch = e.type.indexOf('touch') === 0,
- mouse = e.type.indexOf('mouse') === 0,
- pointer = e.type.indexOf('pointer') === 0,
- x,y, event = e;
-
- // IE10 implemented pointer events with a prefix;
- if ( e.type.indexOf('MSPointer') === 0 ) {
- pointer = true;
- }
-
- if ( touch ) {
- // noUiSlider supports one movement at a time,
- // so we can select the first 'changedTouch'.
- x = e.changedTouches[0].pageX;
- y = e.changedTouches[0].pageY;
- }
-
- if ( mouse || pointer ) {
- x = e.clientX + window.pageXOffset;
- y = e.clientY + window.pageYOffset;
- }
-
- event.points = [x, y];
- event.cursor = mouse || pointer; // Fix #435
-
- return event;
- }
-
- // Append a handle to the base.
- function addHandle ( direction, index ) {
-
- var origin = document.createElement('div'),
- handle = document.createElement('div'),
- additions = [ '-lower', '-upper' ];
-
- if ( direction ) {
- additions.reverse();
- }
-
- addClass(handle, Classes[3]);
- addClass(handle, Classes[3] + additions[index]);
-
- addClass(origin, Classes[2]);
- origin.appendChild(handle);
-
- return origin;
- }
-
- // Add the proper connection classes.
- function addConnection ( connect, target, handles ) {
-
- // Apply the required connection classes to the elements
- // that need them. Some classes are made up for several
- // segments listed in the class list, to allow easy
- // renaming and provide a minor compression benefit.
- switch ( connect ) {
- case 1: addClass(target, Classes[7]);
- addClass(handles[0], Classes[6]);
- break;
- case 3: addClass(handles[1], Classes[6]);
- /* falls through */
- case 2: addClass(handles[0], Classes[7]);
- /* falls through */
- case 0: addClass(target, Classes[6]);
- break;
- }
- }
-
- // Add handles to the slider base.
- function addHandles ( nrHandles, direction, base ) {
-
- var index, handles = [];
-
- // Append handles.
- for ( index = 0; index < nrHandles; index += 1 ) {
-
- // Keep a list of all added handles.
- handles.push( base.appendChild(addHandle( direction, index )) );
- }
-
- return handles;
- }
-
- // Initialize a single slider.
- function addSlider ( direction, orientation, target ) {
-
- // Apply classes and data to the target.
- addClass(target, Classes[0]);
- addClass(target, Classes[8 + direction]);
- addClass(target, Classes[4 + orientation]);
-
- var div = document.createElement('div');
- addClass(div, Classes[1]);
- target.appendChild(div);
- return div;
- }
-
-
-function closure ( target, options ){
-
- // All variables local to 'closure' are prefixed with 'scope_'
- var scope_Target = target,
- scope_Locations = [-1, -1],
- scope_Base,
- scope_Handles,
- scope_Spectrum = options.spectrum,
- scope_Values = [],
- scope_Events = {};
-
-
- function getGroup ( mode, values, stepped ) {
-
- // Use the range.
- if ( mode === 'range' || mode === 'steps' ) {
- return scope_Spectrum.xVal;
- }
-
- if ( mode === 'count' ) {
-
- // Divide 0 - 100 in 'count' parts.
- var spread = ( 100 / (values-1) ), v, i = 0;
- values = [];
-
- // List these parts and have them handled as 'positions'.
- while ((v=i++*spread) <= 100 ) {
- values.push(v);
- }
-
- mode = 'positions';
- }
-
- if ( mode === 'positions' ) {
-
- // Map all percentages to on-range values.
- return values.map(function( value ){
- return scope_Spectrum.fromStepping( stepped ? scope_Spectrum.getStep( value ) : value );
- });
- }
-
- if ( mode === 'values' ) {
-
- // If the value must be stepped, it needs to be converted to a percentage first.
- if ( stepped ) {
-
- return values.map(function( value ){
-
- // Convert to percentage, apply step, return to value.
- return scope_Spectrum.fromStepping( scope_Spectrum.getStep( scope_Spectrum.toStepping( value ) ) );
- });
-
- }
-
- // Otherwise, we can simply use the values.
- return values;
- }
- }
-
- function generateSpread ( density, mode, group ) {
-
- var originalSpectrumDirection = scope_Spectrum.direction,
- indexes = {},
- firstInRange = scope_Spectrum.xVal[0],
- lastInRange = scope_Spectrum.xVal[scope_Spectrum.xVal.length-1],
- ignoreFirst = false,
- ignoreLast = false,
- prevPct = 0;
-
- // This function loops the spectrum in an ltr linear fashion,
- // while the toStepping method is direction aware. Trick it into
- // believing it is ltr.
- scope_Spectrum.direction = 0;
-
- // Create a copy of the group, sort it and filter away all duplicates.
- group = unique(group.slice().sort(function(a, b){ return a - b; }));
-
- // Make sure the range starts with the first element.
- if ( group[0] !== firstInRange ) {
- group.unshift(firstInRange);
- ignoreFirst = true;
- }
-
- // Likewise for the last one.
- if ( group[group.length - 1] !== lastInRange ) {
- group.push(lastInRange);
- ignoreLast = true;
- }
-
- group.forEach(function ( current, index ) {
-
- // Get the current step and the lower + upper positions.
- var step, i, q,
- low = current,
- high = group[index+1],
- newPct, pctDifference, pctPos, type,
- steps, realSteps, stepsize;
-
- // When using 'steps' mode, use the provided steps.
- // Otherwise, we'll step on to the next subrange.
- if ( mode === 'steps' ) {
- step = scope_Spectrum.xNumSteps[ index ];
- }
-
- // Default to a 'full' step.
- if ( !step ) {
- step = high-low;
- }
-
- // Low can be 0, so test for false. If high is undefined,
- // we are at the last subrange. Index 0 is already handled.
- if ( low === false || high === undefined ) {
- return;
- }
-
- // Find all steps in the subrange.
- for ( i = low; i <= high; i += step ) {
-
- // Get the percentage value for the current step,
- // calculate the size for the subrange.
- newPct = scope_Spectrum.toStepping( i );
- pctDifference = newPct - prevPct;
-
- steps = pctDifference / density;
- realSteps = Math.round(steps);
-
- // This ratio represents the ammount of percentage-space a point indicates.
- // For a density 1 the points/percentage = 1. For density 2, that percentage needs to be re-devided.
- // Round the percentage offset to an even number, then divide by two
- // to spread the offset on both sides of the range.
- stepsize = pctDifference/realSteps;
-
- // Divide all points evenly, adding the correct number to this subrange.
- // Run up to <= so that 100% gets a point, event if ignoreLast is set.
- for ( q = 1; q <= realSteps; q += 1 ) {
-
- // The ratio between the rounded value and the actual size might be ~1% off.
- // Correct the percentage offset by the number of points
- // per subrange. density = 1 will result in 100 points on the
- // full range, 2 for 50, 4 for 25, etc.
- pctPos = prevPct + ( q * stepsize );
- indexes[pctPos.toFixed(5)] = ['x', 0];
- }
-
- // Determine the point type.
- type = (group.indexOf(i) > -1) ? 1 : ( mode === 'steps' ? 2 : 0 );
-
- // Enforce the 'ignoreFirst' option by overwriting the type for 0.
- if ( !index && ignoreFirst ) {
- type = 0;
- }
-
- if ( !(i === high && ignoreLast)) {
- // Mark the 'type' of this point. 0 = plain, 1 = real value, 2 = step value.
- indexes[newPct.toFixed(5)] = [i, type];
- }
-
- // Update the percentage count.
- prevPct = newPct;
- }
- });
-
- // Reset the spectrum.
- scope_Spectrum.direction = originalSpectrumDirection;
-
- return indexes;
- }
-
- function addMarking ( spread, filterFunc, formatter ) {
-
- var style = ['horizontal', 'vertical'][options.ort],
- element = document.createElement('div');
-
- addClass(element, 'noUi-pips');
- addClass(element, 'noUi-pips-' + style);
-
- function getSize( type ){
- return [ '-normal', '-large', '-sub' ][type];
- }
-
- function getTags( offset, source, values ) {
- return 'class="' + source + ' ' +
- source + '-' + style + ' ' +
- source + getSize(values[1]) +
- '" style="' + options.style + ': ' + offset + '%"';
- }
-
- function addSpread ( offset, values ){
-
- if ( scope_Spectrum.direction ) {
- offset = 100 - offset;
- }
-
- // Apply the filter function, if it is set.
- values[1] = (values[1] && filterFunc) ? filterFunc(values[0], values[1]) : values[1];
-
- // Add a marker for every point
- element.innerHTML += '<div ' + getTags(offset, 'noUi-marker', values) + '></div>';
-
- // Values are only appended for points marked '1' or '2'.
- if ( values[1] ) {
- element.innerHTML += '<div '+getTags(offset, 'noUi-value', values)+'>' + formatter.to(values[0]) + '</div>';
- }
- }
-
- // Append all points.
- Object.keys(spread).forEach(function(a){
- addSpread(a, spread[a]);
- });
-
- return element;
- }
-
- function pips ( grid ) {
-
- var mode = grid.mode,
- density = grid.density || 1,
- filter = grid.filter || false,
- values = grid.values || false,
- stepped = grid.stepped || false,
- group = getGroup( mode, values, stepped ),
- spread = generateSpread( density, mode, group ),
- format = grid.format || {
- to: Math.round
- };
-
- return scope_Target.appendChild(addMarking(
- spread,
- filter,
- format
- ));
- }
-
-
- // Shorthand for base dimensions.
- function baseSize ( ) {
- return scope_Base['offset' + ['Width', 'Height'][options.ort]];
- }
-
- // External event handling
- function fireEvent ( event, handleNumber ) {
-
- if ( handleNumber !== undefined ) {
- handleNumber = Math.abs(handleNumber - options.dir);
- }
-
- Object.keys(scope_Events).forEach(function( targetEvent ) {
-
- var eventType = targetEvent.split('.')[0];
-
- if ( event === eventType ) {
- scope_Events[targetEvent].forEach(function( callback ) {
- // .reverse is in place
- // Return values as array, so arg_1[arg_2] is always valid.
- callback( asArray(valueGet()), handleNumber, inSliderOrder(Array.prototype.slice.call(scope_Values)) );
- });
- }
- });
- }
-
- // Returns the input array, respecting the slider direction configuration.
- function inSliderOrder ( values ) {
-
- // If only one handle is used, return a single value.
- if ( values.length === 1 ){
- return values[0];
- }
-
- if ( options.dir ) {
- return values.reverse();
- }
-
- return values;
- }
-
-
- // Handler for attaching events trough a proxy.
- function attach ( events, element, callback, data ) {
-
- // This function can be used to 'filter' events to the slider.
- // element is a node, not a nodeList
-
- var method = function ( e ){
-
- if ( scope_Target.hasAttribute('disabled') ) {
- return false;
- }
-
- // Stop if an active 'tap' transition is taking place.
- if ( hasClass(scope_Target, Classes[14]) ) {
- return false;
- }
-
- e = fixEvent(e);
-
- // Ignore right or middle clicks on start #454
- if ( events === actions.start && e.buttons !== undefined && e.buttons > 1 ) {
- return false;
- }
-
- e.calcPoint = e.points[ options.ort ];
-
- // Call the event handler with the event [ and additional data ].
- callback ( e, data );
-
- }, methods = [];
-
- // Bind a closure on the target for every event type.
- events.split(' ').forEach(function( eventName ){
- element.addEventListener(eventName, method, false);
- methods.push([eventName, method]);
- });
-
- return methods;
- }
-
- // Handle movement on document for handle and range drag.
- function move ( event, data ) {
-
- var handles = data.handles || scope_Handles, positions, state = false,
- proposal = ((event.calcPoint - data.start) * 100) / baseSize(),
- handleNumber = handles[0] === scope_Handles[0] ? 0 : 1, i;
-
- // Calculate relative positions for the handles.
- positions = getPositions( proposal, data.positions, handles.length > 1);
-
- state = setHandle ( handles[0], positions[handleNumber], handles.length === 1 );
-
- if ( handles.length > 1 ) {
-
- state = setHandle ( handles[1], positions[handleNumber?0:1], false ) || state;
-
- if ( state ) {
- // fire for both handles
- for ( i = 0; i < data.handles.length; i++ ) {
- fireEvent('slide', i);
- }
- }
- } else if ( state ) {
- // Fire for a single handle
- fireEvent('slide', handleNumber);
- }
- }
-
- // Unbind move events on document, call callbacks.
- function end ( event, data ) {
-
- // The handle is no longer active, so remove the class.
- var active = scope_Base.getElementsByClassName(Classes[15]),
- handleNumber = data.handles[0] === scope_Handles[0] ? 0 : 1;
-
- if ( active.length ) {
- removeClass(active[0], Classes[15]);
- }
-
- // Remove cursor styles and text-selection events bound to the body.
- if ( event.cursor ) {
- document.body.style.cursor = '';
- document.body.removeEventListener('selectstart', document.body.noUiListener);
- }
-
- var d = document.documentElement;
-
- // Unbind the move and end events, which are added on 'start'.
- d.noUiListeners.forEach(function( c ) {
- d.removeEventListener(c[0], c[1]);
- });
-
- // Remove dragging class.
- removeClass(scope_Target, Classes[12]);
-
- // Fire the change and set events.
- fireEvent('set', handleNumber);
- fireEvent('change', handleNumber);
- }
-
- // Bind move events on document.
- function start ( event, data ) {
-
- var d = document.documentElement;
-
- // Mark the handle as 'active' so it can be styled.
- if ( data.handles.length === 1 ) {
- addClass(data.handles[0].children[0], Classes[15]);
-
- // Support 'disabled' handles
- if ( data.handles[0].hasAttribute('disabled') ) {
- return false;
- }
- }
-
- // A drag should never propagate up to the 'tap' event.
- event.stopPropagation();
-
- // Attach the move and end events.
- var moveEvent = attach(actions.move, d, move, {
- start: event.calcPoint,
- handles: data.handles,
- positions: [
- scope_Locations[0],
- scope_Locations[scope_Handles.length - 1]
- ]
- }), endEvent = attach(actions.end, d, end, {
- handles: data.handles
- });
-
- d.noUiListeners = moveEvent.concat(endEvent);
-
- // Text selection isn't an issue on touch devices,
- // so adding cursor styles can be skipped.
- if ( event.cursor ) {
-
- // Prevent the 'I' cursor and extend the range-drag cursor.
- document.body.style.cursor = getComputedStyle(event.target).cursor;
-
- // Mark the target with a dragging state.
- if ( scope_Handles.length > 1 ) {
- addClass(scope_Target, Classes[12]);
- }
-
- var f = function(){
- return false;
- };
-
- document.body.noUiListener = f;
-
- // Prevent text selection when dragging the handles.
- document.body.addEventListener('selectstart', f, false);
- }
- }
-
- // Move closest handle to tapped location.
- function tap ( event ) {
-
- var location = event.calcPoint, total = 0, handleNumber, to;
-
- // The tap event shouldn't propagate up and cause 'edge' to run.
- event.stopPropagation();
-
- // Add up the handle offsets.
- scope_Handles.forEach(function(a){
- total += offset(a)[ options.style ];
- });
-
- // Find the handle closest to the tapped position.
- handleNumber = ( location < total/2 || scope_Handles.length === 1 ) ? 0 : 1;
-
- location -= offset(scope_Base)[ options.style ];
-
- // Calculate the new position.
- to = ( location * 100 ) / baseSize();
-
- if ( !options.events.snap ) {
- // Flag the slider as it is now in a transitional state.
- // Transition takes 300 ms, so re-enable the slider afterwards.
- addClassFor( scope_Target, Classes[14], 300 );
- }
-
- // Support 'disabled' handles
- if ( scope_Handles[handleNumber].hasAttribute('disabled') ) {
- return false;
- }
-
- // Find the closest handle and calculate the tapped point.
- // The set handle to the new position.
- setHandle( scope_Handles[handleNumber], to );
-
- fireEvent('slide', handleNumber);
- fireEvent('set', handleNumber);
- fireEvent('change', handleNumber);
-
- if ( options.events.snap ) {
- start(event, { handles: [scope_Handles[total]] });
- }
- }
-
- // Attach events to several slider parts.
- function events ( behaviour ) {
-
- var i, drag;
-
- // Attach the standard drag event to the handles.
- if ( !behaviour.fixed ) {
-
- for ( i = 0; i < scope_Handles.length; i += 1 ) {
-
- // These events are only bound to the visual handle
- // element, not the 'real' origin element.
- attach ( actions.start, scope_Handles[i].children[0], start, {
- handles: [ scope_Handles[i] ]
- });
- }
- }
-
- // Attach the tap event to the slider base.
- if ( behaviour.tap ) {
-
- attach ( actions.start, scope_Base, tap, {
- handles: scope_Handles
- });
- }
-
- // Make the range dragable.
- if ( behaviour.drag ){
-
- drag = [scope_Base.getElementsByClassName( Classes[7] )[0]];
- addClass(drag[0], Classes[10]);
-
- // When the range is fixed, the entire range can
- // be dragged by the handles. The handle in the first
- // origin will propagate the start event upward,
- // but it needs to be bound manually on the other.
- if ( behaviour.fixed ) {
- drag.push(scope_Handles[(drag[0] === scope_Handles[0] ? 1 : 0)].children[0]);
- }
-
- drag.forEach(function( element ) {
- attach ( actions.start, element, start, {
- handles: scope_Handles
- });
- });
- }
- }
-
-
- // Test suggested values and apply margin, step.
- function setHandle ( handle, to, noLimitOption ) {
-
- var trigger = handle !== scope_Handles[0] ? 1 : 0,
- lowerMargin = scope_Locations[0] + options.margin,
- upperMargin = scope_Locations[1] - options.margin,
- lowerLimit = scope_Locations[0] + options.limit,
- upperLimit = scope_Locations[1] - options.limit;
-
- // For sliders with multiple handles,
- // limit movement to the other handle.
- // Apply the margin option by adding it to the handle positions.
- if ( scope_Handles.length > 1 ) {
- to = trigger ? Math.max( to, lowerMargin ) : Math.min( to, upperMargin );
- }
-
- // The limit option has the opposite effect, limiting handles to a
- // maximum distance from another. Limit must be > 0, as otherwise
- // handles would be unmoveable. 'noLimitOption' is set to 'false'
- // for the .val() method, except for pass 4/4.
- if ( noLimitOption !== false && options.limit && scope_Handles.length > 1 ) {
- to = trigger ? Math.min ( to, lowerLimit ) : Math.max( to, upperLimit );
- }
-
- // Handle the step option.
- to = scope_Spectrum.getStep( to );
-
- // Limit to 0/100 for .val input, trim anything beyond 7 digits, as
- // JavaScript has some issues in its floating point implementation.
- to = limit(parseFloat(to.toFixed(7)));
-
- // Return false if handle can't move.
- if ( to === scope_Locations[trigger] ) {
- return false;
- }
-
- // Set the handle to the new position.
- handle.style[options.style] = to + '%';
-
- // Force proper handle stacking
- if ( !handle.previousSibling ) {
- removeClass(handle, Classes[17]);
- if ( to > 50 ) {
- addClass(handle, Classes[17]);
- }
- }
-
- // Update locations.
- scope_Locations[trigger] = to;
-
- // Convert the value to the slider stepping/range.
- scope_Values[trigger] = scope_Spectrum.fromStepping( to );
-
- fireEvent('update', trigger);
-
- return true;
- }
-
- // Loop values from value method and apply them.
- function setValues ( count, values ) {
-
- var i, trigger, to;
-
- // With the limit option, we'll need another limiting pass.
- if ( options.limit ) {
- count += 1;
- }
-
- // If there are multiple handles to be set run the setting
- // mechanism twice for the first handle, to make sure it
- // can be bounced of the second one properly.
- for ( i = 0; i < count; i += 1 ) {
-
- trigger = i%2;
-
- // Get the current argument from the array.
- to = values[trigger];
-
- // Setting with null indicates an 'ignore'.
- // Inputting 'false' is invalid.
- if ( to !== null && to !== false ) {
-
- // If a formatted number was passed, attemt to decode it.
- if ( typeof to === 'number' ) {
- to = String(to);
- }
-
- to = options.format.from( to );
-
- // Request an update for all links if the value was invalid.
- // Do so too if setting the handle fails.
- if ( to === false || isNaN(to) || setHandle( scope_Handles[trigger], scope_Spectrum.toStepping( to ), i === (3 - options.dir) ) === false ) {
- fireEvent('update', trigger);
- }
- }
- }
- }
-
- // Set the slider value.
- function valueSet ( input ) {
-
- var count, values = asArray( input ), i;
-
- // The RTL settings is implemented by reversing the front-end,
- // internal mechanisms are the same.
- if ( options.dir && options.handles > 1 ) {
- values.reverse();
- }
-
- // Animation is optional.
- // Make sure the initial values where set before using animated placement.
- if ( options.animate && scope_Locations[0] !== -1 ) {
- addClassFor( scope_Target, Classes[14], 300 );
- }
-
- // Determine how often to set the handles.
- count = scope_Handles.length > 1 ? 3 : 1;
-
- if ( values.length === 1 ) {
- count = 1;
- }
-
- setValues ( count, values );
-
- // Fire the 'set' event for both handles.
- for ( i = 0; i < scope_Handles.length; i++ ) {
- fireEvent('set', i);
- }
- }
-
- // Get the slider value.
- function valueGet ( ) {
-
- var i, retour = [];
-
- // Get the value from all handles.
- for ( i = 0; i < options.handles; i += 1 ){
- retour[i] = options.format.to( scope_Values[i] );
- }
-
- return inSliderOrder( retour );
- }
-
- // Removes classes from the root and empties it.
- function destroy ( ) {
- Classes.forEach(function(cls){
- if ( !cls ) { return; } // Ignore empty classes
- removeClass(scope_Target, cls);
- });
- scope_Target.innerHTML = '';
- delete scope_Target.noUiSlider;
- }
-
- // Get the current step size for the slider.
- function getCurrentStep ( ) {
-
- // Check all locations, map them to their stepping point.
- // Get the step point, then find it in the input list.
- var retour = scope_Locations.map(function( location, index ){
-
- var step = scope_Spectrum.getApplicableStep( location ),
-
- // As per #391, the comparison for the decrement step can have some rounding issues.
- // Round the value to the precision used in the step.
- stepDecimals = countDecimals(String(step[2])),
-
- // Get the current numeric value
- value = scope_Values[index],
-
- // To move the slider 'one step up', the current step value needs to be added.
- // Use null if we are at the maximum slider value.
- increment = location === 100 ? null : step[2],
-
- // Going 'one step down' might put the slider in a different sub-range, so we
- // need to switch between the current or the previous step.
- prev = Number((value - step[2]).toFixed(stepDecimals)),
-
- // If the value fits the step, return the current step value. Otherwise, use the
- // previous step. Return null if the slider is at its minimum value.
- decrement = location === 0 ? null : (prev >= step[1]) ? step[2] : (step[0] || false);
-
- return [decrement, increment];
- });
-
- // Return values in the proper order.
- return inSliderOrder( retour );
- }
-
- // Attach an event to this slider, possibly including a namespace
- function bindEvent ( namespacedEvent, callback ) {
- scope_Events[namespacedEvent] = scope_Events[namespacedEvent] || [];
- scope_Events[namespacedEvent].push(callback);
-
- // If the event bound is 'update,' fire it immediately for all handles.
- if ( namespacedEvent.split('.')[0] === 'update' ) {
- scope_Handles.forEach(function(a, index){
- fireEvent('update', index);
- });
- }
- }
-
- // Undo attachment of event
- function removeEvent ( namespacedEvent ) {
-
- var event = namespacedEvent.split('.')[0],
- namespace = namespacedEvent.substring(event.length);
-
- Object.keys(scope_Events).forEach(function( bind ){
-
- var tEvent = bind.split('.')[0],
- tNamespace = bind.substring(tEvent.length);
-
- if ( (!event || event === tEvent) && (!namespace || namespace === tNamespace) ) {
- delete scope_Events[bind];
- }
- });
- }
-
-
- // Throw an error if the slider was already initialized.
- if ( scope_Target.noUiSlider ) {
- throw new Error('Slider was already initialized.');
- }
-
-
- // Create the base element, initialise HTML and set classes.
- // Add handles and links.
- scope_Base = addSlider( options.dir, options.ort, scope_Target );
- scope_Handles = addHandles( options.handles, options.dir, scope_Base );
-
- // Set the connect classes.
- addConnection ( options.connect, scope_Target, scope_Handles );
-
- // Attach user events.
- events( options.events );
-
- if ( options.pips ) {
- pips(options.pips);
- }
-
- return {
- destroy: destroy,
- steps: getCurrentStep,
- on: bindEvent,
- off: removeEvent,
- get: valueGet,
- set: valueSet
- };
-
-}
-
-
- // Run the standard initializer
- function initialize ( target, originalOptions ) {
-
- if ( !target.nodeName ) {
- throw new Error('noUiSlider.create requires a single element.');
- }
-
- // Test the options and create the slider environment;
- var options = testOptions( originalOptions, target ),
- slider = closure( target, options );
-
- // Use the public value method to set the start values.
- slider.set(options.start);
-
- target.noUiSlider = slider;
- }
-
- // Use an object instead of a function for future expansibility;
- return {
- create: initialize
- };
-
-})); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/noUiSlider/nouislider.pips.css b/wqflask/wqflask/static/new/packages/noUiSlider/nouislider.pips.css
deleted file mode 100644
index d1a93971..00000000
--- a/wqflask/wqflask/static/new/packages/noUiSlider/nouislider.pips.css
+++ /dev/null
@@ -1,98 +0,0 @@
-
-/* Base;
- *
- */
-.noUi-pips,
-.noUi-pips * {
--moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.noUi-pips {
- position: absolute;
- font: 400 12px Arial;
- color: #999;
-}
-
-/* Values;
- *
- */
-.noUi-value {
- width: 40px;
- position: absolute;
- text-align: center;
-}
-.noUi-value-sub {
- color: #ccc;
- font-size: 10px;
-}
-
-/* Markings;
- *
- */
-.noUi-marker {
- position: absolute;
- background: #CCC;
-}
-.noUi-marker-sub {
- background: #AAA;
-}
-.noUi-marker-large {
- background: #AAA;
-}
-
-/* Horizontal layout;
- *
- */
-.noUi-pips-horizontal {
- padding: 10px 0;
- height: 50px;
- top: 100%;
- left: 0;
- width: 100%;
-}
-.noUi-value-horizontal {
- margin-left: -20px;
- padding-top: 20px;
-}
-.noUi-value-horizontal.noUi-value-sub {
- padding-top: 15px;
-}
-
-.noUi-marker-horizontal.noUi-marker {
- margin-left: -1px;
- width: 2px;
- height: 5px;
-}
-.noUi-marker-horizontal.noUi-marker-sub {
- height: 10px;
-}
-.noUi-marker-horizontal.noUi-marker-large {
- height: 15px;
-}
-
-/* Vertical layout;
- *
- */
-.noUi-pips-vertical {
- padding: 0 10px;
- height: 100%;
- top: 0;
- left: 100%;
-}
-.noUi-value-vertical {
- width: 15px;
- margin-left: 20px;
- margin-top: -5px;
-}
-
-.noUi-marker-vertical.noUi-marker {
- width: 5px;
- height: 2px;
- margin-top: -1px;
-}
-.noUi-marker-vertical.noUi-marker-sub {
- width: 10px;
-}
-.noUi-marker-vertical.noUi-marker-large {
- width: 15px;
-}
diff --git a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap-responsive.css b/wqflask/wqflask/static/packages/bootstrap/css/bootstrap-responsive.css
deleted file mode 100644
index c0bba15b..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap-responsive.css
+++ /dev/null
@@ -1,1109 +0,0 @@
-/*!
- * Bootstrap Responsive v2.3.2
- *
- * Copyright 2013 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world by @mdo and @fat.
- */
-
-.clearfix {
- *zoom: 1;
-}
-
-.clearfix:before,
-.clearfix:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.clearfix:after {
- clear: both;
-}
-
-.hide-text {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-
-.input-block-level {
- display: block;
- width: 100%;
- min-height: 30px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-@-ms-viewport {
- width: device-width;
-}
-
-.hidden {
- display: none;
- visibility: hidden;
-}
-
-.visible-phone {
- display: none !important;
-}
-
-.visible-tablet {
- display: none !important;
-}
-
-.hidden-desktop {
- display: none !important;
-}
-
-.visible-desktop {
- display: inherit !important;
-}
-
-@media (min-width: 768px) and (max-width: 979px) {
- .hidden-desktop {
- display: inherit !important;
- }
- .visible-desktop {
- display: none !important ;
- }
- .visible-tablet {
- display: inherit !important;
- }
- .hidden-tablet {
- display: none !important;
- }
-}
-
-@media (max-width: 767px) {
- .hidden-desktop {
- display: inherit !important;
- }
- .visible-desktop {
- display: none !important;
- }
- .visible-phone {
- display: inherit !important;
- }
- .hidden-phone {
- display: none !important;
- }
-}
-
-.visible-print {
- display: none !important;
-}
-
-@media print {
- .visible-print {
- display: inherit !important;
- }
- .hidden-print {
- display: none !important;
- }
-}
-
-@media (min-width: 1200px) {
- .row {
- margin-left: -30px;
- *zoom: 1;
- }
- .row:before,
- .row:after {
- display: table;
- line-height: 0;
- content: "";
- }
- .row:after {
- clear: both;
- }
- [class*="span"] {
- float: left;
- min-height: 1px;
- margin-left: 30px;
- }
- .container,
- .navbar-static-top .container,
- .navbar-fixed-top .container,
- .navbar-fixed-bottom .container {
- width: 1170px;
- }
- .span12 {
- width: 1170px;
- }
- .span11 {
- width: 1070px;
- }
- .span10 {
- width: 970px;
- }
- .span9 {
- width: 870px;
- }
- .span8 {
- width: 770px;
- }
- .span7 {
- width: 670px;
- }
- .span6 {
- width: 570px;
- }
- .span5 {
- width: 470px;
- }
- .span4 {
- width: 370px;
- }
- .span3 {
- width: 270px;
- }
- .span2 {
- width: 170px;
- }
- .span1 {
- width: 70px;
- }
- .offset12 {
- margin-left: 1230px;
- }
- .offset11 {
- margin-left: 1130px;
- }
- .offset10 {
- margin-left: 1030px;
- }
- .offset9 {
- margin-left: 930px;
- }
- .offset8 {
- margin-left: 830px;
- }
- .offset7 {
- margin-left: 730px;
- }
- .offset6 {
- margin-left: 630px;
- }
- .offset5 {
- margin-left: 530px;
- }
- .offset4 {
- margin-left: 430px;
- }
- .offset3 {
- margin-left: 330px;
- }
- .offset2 {
- margin-left: 230px;
- }
- .offset1 {
- margin-left: 130px;
- }
- .row-fluid {
- width: 100%;
- *zoom: 1;
- }
- .row-fluid:before,
- .row-fluid:after {
- display: table;
- line-height: 0;
- content: "";
- }
- .row-fluid:after {
- clear: both;
- }
- .row-fluid [class*="span"] {
- display: block;
- float: left;
- width: 100%;
- min-height: 30px;
- margin-left: 2.564102564102564%;
- *margin-left: 2.5109110747408616%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .row-fluid [class*="span"]:first-child {
- margin-left: 0;
- }
- .row-fluid .controls-row [class*="span"] + [class*="span"] {
- margin-left: 2.564102564102564%;
- }
- .row-fluid .span12 {
- width: 100%;
- *width: 99.94680851063829%;
- }
- .row-fluid .span11 {
- width: 91.45299145299145%;
- *width: 91.39979996362975%;
- }
- .row-fluid .span10 {
- width: 82.90598290598291%;
- *width: 82.8527914166212%;
- }
- .row-fluid .span9 {
- width: 74.35897435897436%;
- *width: 74.30578286961266%;
- }
- .row-fluid .span8 {
- width: 65.81196581196582%;
- *width: 65.75877432260411%;
- }
- .row-fluid .span7 {
- width: 57.26495726495726%;
- *width: 57.21176577559556%;
- }
- .row-fluid .span6 {
- width: 48.717948717948715%;
- *width: 48.664757228587014%;
- }
- .row-fluid .span5 {
- width: 40.17094017094017%;
- *width: 40.11774868157847%;
- }
- .row-fluid .span4 {
- width: 31.623931623931625%;
- *width: 31.570740134569924%;
- }
- .row-fluid .span3 {
- width: 23.076923076923077%;
- *width: 23.023731587561375%;
- }
- .row-fluid .span2 {
- width: 14.52991452991453%;
- *width: 14.476723040552828%;
- }
- .row-fluid .span1 {
- width: 5.982905982905983%;
- *width: 5.929714493544281%;
- }
- .row-fluid .offset12 {
- margin-left: 105.12820512820512%;
- *margin-left: 105.02182214948171%;
- }
- .row-fluid .offset12:first-child {
- margin-left: 102.56410256410257%;
- *margin-left: 102.45771958537915%;
- }
- .row-fluid .offset11 {
- margin-left: 96.58119658119658%;
- *margin-left: 96.47481360247316%;
- }
- .row-fluid .offset11:first-child {
- margin-left: 94.01709401709402%;
- *margin-left: 93.91071103837061%;
- }
- .row-fluid .offset10 {
- margin-left: 88.03418803418803%;
- *margin-left: 87.92780505546462%;
- }
- .row-fluid .offset10:first-child {
- margin-left: 85.47008547008548%;
- *margin-left: 85.36370249136206%;
- }
- .row-fluid .offset9 {
- margin-left: 79.48717948717949%;
- *margin-left: 79.38079650845607%;
- }
- .row-fluid .offset9:first-child {
- margin-left: 76.92307692307693%;
- *margin-left: 76.81669394435352%;
- }
- .row-fluid .offset8 {
- margin-left: 70.94017094017094%;
- *margin-left: 70.83378796144753%;
- }
- .row-fluid .offset8:first-child {
- margin-left: 68.37606837606839%;
- *margin-left: 68.26968539734497%;
- }
- .row-fluid .offset7 {
- margin-left: 62.393162393162385%;
- *margin-left: 62.28677941443899%;
- }
- .row-fluid .offset7:first-child {
- margin-left: 59.82905982905982%;
- *margin-left: 59.72267685033642%;
- }
- .row-fluid .offset6 {
- margin-left: 53.84615384615384%;
- *margin-left: 53.739770867430444%;
- }
- .row-fluid .offset6:first-child {
- margin-left: 51.28205128205128%;
- *margin-left: 51.175668303327875%;
- }
- .row-fluid .offset5 {
- margin-left: 45.299145299145295%;
- *margin-left: 45.1927623204219%;
- }
- .row-fluid .offset5:first-child {
- margin-left: 42.73504273504273%;
- *margin-left: 42.62865975631933%;
- }
- .row-fluid .offset4 {
- margin-left: 36.75213675213675%;
- *margin-left: 36.645753773413354%;
- }
- .row-fluid .offset4:first-child {
- margin-left: 34.18803418803419%;
- *margin-left: 34.081651209310785%;
- }
- .row-fluid .offset3 {
- margin-left: 28.205128205128204%;
- *margin-left: 28.0987452264048%;
- }
- .row-fluid .offset3:first-child {
- margin-left: 25.641025641025642%;
- *margin-left: 25.53464266230224%;
- }
- .row-fluid .offset2 {
- margin-left: 19.65811965811966%;
- *margin-left: 19.551736679396257%;
- }
- .row-fluid .offset2:first-child {
- margin-left: 17.094017094017094%;
- *margin-left: 16.98763411529369%;
- }
- .row-fluid .offset1 {
- margin-left: 11.11111111111111%;
- *margin-left: 11.004728132387708%;
- }
- .row-fluid .offset1:first-child {
- margin-left: 8.547008547008547%;
- *margin-left: 8.440625568285142%;
- }
- input,
- textarea,
- .uneditable-input {
- margin-left: 0;
- }
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: 30px;
- }
- input.span12,
- textarea.span12,
- .uneditable-input.span12 {
- width: 1156px;
- }
- input.span11,
- textarea.span11,
- .uneditable-input.span11 {
- width: 1056px;
- }
- input.span10,
- textarea.span10,
- .uneditable-input.span10 {
- width: 956px;
- }
- input.span9,
- textarea.span9,
- .uneditable-input.span9 {
- width: 856px;
- }
- input.span8,
- textarea.span8,
- .uneditable-input.span8 {
- width: 756px;
- }
- input.span7,
- textarea.span7,
- .uneditable-input.span7 {
- width: 656px;
- }
- input.span6,
- textarea.span6,
- .uneditable-input.span6 {
- width: 556px;
- }
- input.span5,
- textarea.span5,
- .uneditable-input.span5 {
- width: 456px;
- }
- input.span4,
- textarea.span4,
- .uneditable-input.span4 {
- width: 356px;
- }
- input.span3,
- textarea.span3,
- .uneditable-input.span3 {
- width: 256px;
- }
- input.span2,
- textarea.span2,
- .uneditable-input.span2 {
- width: 156px;
- }
- input.span1,
- textarea.span1,
- .uneditable-input.span1 {
- width: 56px;
- }
- .thumbnails {
- margin-left: -30px;
- }
- .thumbnails > li {
- margin-left: 30px;
- }
- .row-fluid .thumbnails {
- margin-left: 0;
- }
-}
-
-@media (min-width: 768px) and (max-width: 979px) {
- .row {
- margin-left: -20px;
- *zoom: 1;
- }
- .row:before,
- .row:after {
- display: table;
- line-height: 0;
- content: "";
- }
- .row:after {
- clear: both;
- }
- [class*="span"] {
- float: left;
- min-height: 1px;
- margin-left: 20px;
- }
- .container,
- .navbar-static-top .container,
- .navbar-fixed-top .container,
- .navbar-fixed-bottom .container {
- width: 724px;
- }
- .span12 {
- width: 724px;
- }
- .span11 {
- width: 662px;
- }
- .span10 {
- width: 600px;
- }
- .span9 {
- width: 538px;
- }
- .span8 {
- width: 476px;
- }
- .span7 {
- width: 414px;
- }
- .span6 {
- width: 352px;
- }
- .span5 {
- width: 290px;
- }
- .span4 {
- width: 228px;
- }
- .span3 {
- width: 166px;
- }
- .span2 {
- width: 104px;
- }
- .span1 {
- width: 42px;
- }
- .offset12 {
- margin-left: 764px;
- }
- .offset11 {
- margin-left: 702px;
- }
- .offset10 {
- margin-left: 640px;
- }
- .offset9 {
- margin-left: 578px;
- }
- .offset8 {
- margin-left: 516px;
- }
- .offset7 {
- margin-left: 454px;
- }
- .offset6 {
- margin-left: 392px;
- }
- .offset5 {
- margin-left: 330px;
- }
- .offset4 {
- margin-left: 268px;
- }
- .offset3 {
- margin-left: 206px;
- }
- .offset2 {
- margin-left: 144px;
- }
- .offset1 {
- margin-left: 82px;
- }
- .row-fluid {
- width: 100%;
- *zoom: 1;
- }
- .row-fluid:before,
- .row-fluid:after {
- display: table;
- line-height: 0;
- content: "";
- }
- .row-fluid:after {
- clear: both;
- }
- .row-fluid [class*="span"] {
- display: block;
- float: left;
- width: 100%;
- min-height: 30px;
- margin-left: 2.7624309392265194%;
- *margin-left: 2.709239449864817%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .row-fluid [class*="span"]:first-child {
- margin-left: 0;
- }
- .row-fluid .controls-row [class*="span"] + [class*="span"] {
- margin-left: 2.7624309392265194%;
- }
- .row-fluid .span12 {
- width: 100%;
- *width: 99.94680851063829%;
- }
- .row-fluid .span11 {
- width: 91.43646408839778%;
- *width: 91.38327259903608%;
- }
- .row-fluid .span10 {
- width: 82.87292817679558%;
- *width: 82.81973668743387%;
- }
- .row-fluid .span9 {
- width: 74.30939226519337%;
- *width: 74.25620077583166%;
- }
- .row-fluid .span8 {
- width: 65.74585635359117%;
- *width: 65.69266486422946%;
- }
- .row-fluid .span7 {
- width: 57.18232044198895%;
- *width: 57.12912895262725%;
- }
- .row-fluid .span6 {
- width: 48.61878453038674%;
- *width: 48.56559304102504%;
- }
- .row-fluid .span5 {
- width: 40.05524861878453%;
- *width: 40.00205712942283%;
- }
- .row-fluid .span4 {
- width: 31.491712707182323%;
- *width: 31.43852121782062%;
- }
- .row-fluid .span3 {
- width: 22.92817679558011%;
- *width: 22.87498530621841%;
- }
- .row-fluid .span2 {
- width: 14.3646408839779%;
- *width: 14.311449394616199%;
- }
- .row-fluid .span1 {
- width: 5.801104972375691%;
- *width: 5.747913483013988%;
- }
- .row-fluid .offset12 {
- margin-left: 105.52486187845304%;
- *margin-left: 105.41847889972962%;
- }
- .row-fluid .offset12:first-child {
- margin-left: 102.76243093922652%;
- *margin-left: 102.6560479605031%;
- }
- .row-fluid .offset11 {
- margin-left: 96.96132596685082%;
- *margin-left: 96.8549429881274%;
- }
- .row-fluid .offset11:first-child {
- margin-left: 94.1988950276243%;
- *margin-left: 94.09251204890089%;
- }
- .row-fluid .offset10 {
- margin-left: 88.39779005524862%;
- *margin-left: 88.2914070765252%;
- }
- .row-fluid .offset10:first-child {
- margin-left: 85.6353591160221%;
- *margin-left: 85.52897613729868%;
- }
- .row-fluid .offset9 {
- margin-left: 79.8342541436464%;
- *margin-left: 79.72787116492299%;
- }
- .row-fluid .offset9:first-child {
- margin-left: 77.07182320441989%;
- *margin-left: 76.96544022569647%;
- }
- .row-fluid .offset8 {
- margin-left: 71.2707182320442%;
- *margin-left: 71.16433525332079%;
- }
- .row-fluid .offset8:first-child {
- margin-left: 68.50828729281768%;
- *margin-left: 68.40190431409427%;
- }
- .row-fluid .offset7 {
- margin-left: 62.70718232044199%;
- *margin-left: 62.600799341718584%;
- }
- .row-fluid .offset7:first-child {
- margin-left: 59.94475138121547%;
- *margin-left: 59.838368402492065%;
- }
- .row-fluid .offset6 {
- margin-left: 54.14364640883978%;
- *margin-left: 54.037263430116376%;
- }
- .row-fluid .offset6:first-child {
- margin-left: 51.38121546961326%;
- *margin-left: 51.27483249088986%;
- }
- .row-fluid .offset5 {
- margin-left: 45.58011049723757%;
- *margin-left: 45.47372751851417%;
- }
- .row-fluid .offset5:first-child {
- margin-left: 42.81767955801105%;
- *margin-left: 42.71129657928765%;
- }
- .row-fluid .offset4 {
- margin-left: 37.01657458563536%;
- *margin-left: 36.91019160691196%;
- }
- .row-fluid .offset4:first-child {
- margin-left: 34.25414364640884%;
- *margin-left: 34.14776066768544%;
- }
- .row-fluid .offset3 {
- margin-left: 28.45303867403315%;
- *margin-left: 28.346655695309746%;
- }
- .row-fluid .offset3:first-child {
- margin-left: 25.69060773480663%;
- *margin-left: 25.584224756083227%;
- }
- .row-fluid .offset2 {
- margin-left: 19.88950276243094%;
- *margin-left: 19.783119783707537%;
- }
- .row-fluid .offset2:first-child {
- margin-left: 17.12707182320442%;
- *margin-left: 17.02068884448102%;
- }
- .row-fluid .offset1 {
- margin-left: 11.32596685082873%;
- *margin-left: 11.219583872105325%;
- }
- .row-fluid .offset1:first-child {
- margin-left: 8.56353591160221%;
- *margin-left: 8.457152932878806%;
- }
- input,
- textarea,
- .uneditable-input {
- margin-left: 0;
- }
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: 20px;
- }
- input.span12,
- textarea.span12,
- .uneditable-input.span12 {
- width: 710px;
- }
- input.span11,
- textarea.span11,
- .uneditable-input.span11 {
- width: 648px;
- }
- input.span10,
- textarea.span10,
- .uneditable-input.span10 {
- width: 586px;
- }
- input.span9,
- textarea.span9,
- .uneditable-input.span9 {
- width: 524px;
- }
- input.span8,
- textarea.span8,
- .uneditable-input.span8 {
- width: 462px;
- }
- input.span7,
- textarea.span7,
- .uneditable-input.span7 {
- width: 400px;
- }
- input.span6,
- textarea.span6,
- .uneditable-input.span6 {
- width: 338px;
- }
- input.span5,
- textarea.span5,
- .uneditable-input.span5 {
- width: 276px;
- }
- input.span4,
- textarea.span4,
- .uneditable-input.span4 {
- width: 214px;
- }
- input.span3,
- textarea.span3,
- .uneditable-input.span3 {
- width: 152px;
- }
- input.span2,
- textarea.span2,
- .uneditable-input.span2 {
- width: 90px;
- }
- input.span1,
- textarea.span1,
- .uneditable-input.span1 {
- width: 28px;
- }
-}
-
-@media (max-width: 767px) {
- body {
- padding-right: 20px;
- padding-left: 20px;
- }
- .navbar-fixed-top,
- .navbar-fixed-bottom,
- .navbar-static-top {
- margin-right: -20px;
- margin-left: -20px;
- }
- .container-fluid {
- padding: 0;
- }
- .dl-horizontal dt {
- float: none;
- width: auto;
- clear: none;
- text-align: left;
- }
- .dl-horizontal dd {
- margin-left: 0;
- }
- .container {
- width: auto;
- }
- .row-fluid {
- width: 100%;
- }
- .row,
- .thumbnails {
- margin-left: 0;
- }
- .thumbnails > li {
- float: none;
- margin-left: 0;
- }
- [class*="span"],
- .uneditable-input[class*="span"],
- .row-fluid [class*="span"] {
- display: block;
- float: none;
- width: 100%;
- margin-left: 0;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .span12,
- .row-fluid .span12 {
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .row-fluid [class*="offset"]:first-child {
- margin-left: 0;
- }
- .input-large,
- .input-xlarge,
- .input-xxlarge,
- input[class*="span"],
- select[class*="span"],
- textarea[class*="span"],
- .uneditable-input {
- display: block;
- width: 100%;
- min-height: 30px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .input-prepend input,
- .input-append input,
- .input-prepend input[class*="span"],
- .input-append input[class*="span"] {
- display: inline-block;
- width: auto;
- }
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: 0;
- }
- .modal {
- position: fixed;
- top: 20px;
- right: 20px;
- left: 20px;
- width: auto;
- margin: 0;
- }
- .modal.fade {
- top: -100px;
- }
- .modal.fade.in {
- top: 20px;
- }
-}
-
-@media (max-width: 480px) {
- .nav-collapse {
- -webkit-transform: translate3d(0, 0, 0);
- }
- .page-header h1 small {
- display: block;
- line-height: 20px;
- }
- input[type="checkbox"],
- input[type="radio"] {
- border: 1px solid #ccc;
- }
- .form-horizontal .control-label {
- float: none;
- width: auto;
- padding-top: 0;
- text-align: left;
- }
- .form-horizontal .controls {
- margin-left: 0;
- }
- .form-horizontal .control-list {
- padding-top: 0;
- }
- .form-horizontal .form-actions {
- padding-right: 10px;
- padding-left: 10px;
- }
- .media .pull-left,
- .media .pull-right {
- display: block;
- float: none;
- margin-bottom: 10px;
- }
- .media-object {
- margin-right: 0;
- margin-left: 0;
- }
- .modal {
- top: 10px;
- right: 10px;
- left: 10px;
- }
- .modal-header .close {
- padding: 10px;
- margin: -10px;
- }
- .carousel-caption {
- position: static;
- }
-}
-
-@media (max-width: 979px) {
- body {
- padding-top: 0;
- }
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- position: static;
- }
- .navbar-fixed-top {
- margin-bottom: 20px;
- }
- .navbar-fixed-bottom {
- margin-top: 20px;
- }
- .navbar-fixed-top .navbar-inner,
- .navbar-fixed-bottom .navbar-inner {
- padding: 5px;
- }
- .navbar .container {
- width: auto;
- padding: 0;
- }
- .navbar .brand {
- padding-right: 10px;
- padding-left: 10px;
- margin: 0 0 0 -5px;
- }
- .nav-collapse {
- clear: both;
- }
- .nav-collapse .nav {
- float: none;
- margin: 0 0 10px;
- }
- .nav-collapse .nav > li {
- float: none;
- }
- .nav-collapse .nav > li > a {
- margin-bottom: 2px;
- }
- .nav-collapse .nav > .divider-vertical {
- display: none;
- }
- .nav-collapse .nav .nav-header {
- color: #777777;
- text-shadow: none;
- }
- .nav-collapse .nav > li > a,
- .nav-collapse .dropdown-menu a {
- padding: 9px 15px;
- font-weight: bold;
- color: #777777;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
- }
- .nav-collapse .btn {
- padding: 4px 10px 4px;
- font-weight: normal;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- }
- .nav-collapse .dropdown-menu li + li a {
- margin-bottom: 2px;
- }
- .nav-collapse .nav > li > a:hover,
- .nav-collapse .nav > li > a:focus,
- .nav-collapse .dropdown-menu a:hover,
- .nav-collapse .dropdown-menu a:focus {
- background-color: #f2f2f2;
- }
- .navbar-inverse .nav-collapse .nav > li > a,
- .navbar-inverse .nav-collapse .dropdown-menu a {
- color: #999999;
- }
- .navbar-inverse .nav-collapse .nav > li > a:hover,
- .navbar-inverse .nav-collapse .nav > li > a:focus,
- .navbar-inverse .nav-collapse .dropdown-menu a:hover,
- .navbar-inverse .nav-collapse .dropdown-menu a:focus {
- background-color: #111111;
- }
- .nav-collapse.in .btn-group {
- padding: 0;
- margin-top: 5px;
- }
- .nav-collapse .dropdown-menu {
- position: static;
- top: auto;
- left: auto;
- display: none;
- float: none;
- max-width: none;
- padding: 0;
- margin: 0 15px;
- background-color: transparent;
- border: none;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
- }
- .nav-collapse .open > .dropdown-menu {
- display: block;
- }
- .nav-collapse .dropdown-menu:before,
- .nav-collapse .dropdown-menu:after {
- display: none;
- }
- .nav-collapse .dropdown-menu .divider {
- display: none;
- }
- .nav-collapse .nav > li > .dropdown-menu:before,
- .nav-collapse .nav > li > .dropdown-menu:after {
- display: none;
- }
- .nav-collapse .navbar-form,
- .nav-collapse .navbar-search {
- float: none;
- padding: 10px 15px;
- margin: 10px 0;
- border-top: 1px solid #f2f2f2;
- border-bottom: 1px solid #f2f2f2;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
- }
- .navbar-inverse .nav-collapse .navbar-form,
- .navbar-inverse .nav-collapse .navbar-search {
- border-top-color: #111111;
- border-bottom-color: #111111;
- }
- .navbar .nav-collapse .nav.pull-right {
- float: none;
- margin-left: 0;
- }
- .nav-collapse,
- .nav-collapse.collapse {
- height: 0;
- overflow: hidden;
- }
- .navbar .btn-navbar {
- display: block;
- }
- .navbar-static .navbar-inner {
- padding-right: 10px;
- padding-left: 10px;
- }
-}
-
-@media (min-width: 980px) {
- .nav-collapse.collapse {
- height: auto !important;
- overflow: visible !important;
- }
-}
diff --git a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap-responsive.min.css b/wqflask/wqflask/static/packages/bootstrap/css/bootstrap-responsive.min.css
deleted file mode 100644
index 96a435be..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap-responsive.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * Bootstrap Responsive v2.3.2
- *
- * Copyright 2013 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world by @mdo and @fat.
- */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
diff --git a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap-theme.css b/wqflask/wqflask/static/packages/bootstrap/css/bootstrap-theme.css
deleted file mode 100644
index b82bd721..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap-theme.css
+++ /dev/null
@@ -1,457 +0,0 @@
-/*!
- * Bootstrap v3.3.0 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-.btn-default,
-.btn-primary,
-.btn-success,
-.btn-info,
-.btn-warning,
-.btn-danger {
- text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
-}
-.btn-default:active,
-.btn-primary:active,
-.btn-success:active,
-.btn-info:active,
-.btn-warning:active,
-.btn-danger:active,
-.btn-default.active,
-.btn-primary.active,
-.btn-success.active,
-.btn-info.active,
-.btn-warning.active,
-.btn-danger.active {
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn-default .badge,
-.btn-primary .badge,
-.btn-success .badge,
-.btn-info .badge,
-.btn-warning .badge,
-.btn-danger .badge {
- text-shadow: none;
-}
-.btn:active,
-.btn.active {
- background-image: none;
-}
-.btn-default {
- text-shadow: 0 1px 0 #fff;
- background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
- background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
- background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #dbdbdb;
- border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus {
- background-color: #e0e0e0;
- background-position: 0 -15px;
-}
-.btn-default:active,
-.btn-default.active {
- background-color: #e0e0e0;
- border-color: #dbdbdb;
-}
-.btn-default:disabled,
-.btn-default[disabled] {
- background-color: #e0e0e0;
- background-image: none;
-}
-.btn-primary {
- background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
- background-image: -o-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#2d6ca2));
- background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #2b669a;
-}
-.btn-primary:hover,
-.btn-primary:focus {
- background-color: #2d6ca2;
- background-position: 0 -15px;
-}
-.btn-primary:active,
-.btn-primary.active {
- background-color: #2d6ca2;
- border-color: #2b669a;
-}
-.btn-primary:disabled,
-.btn-primary[disabled] {
- background-color: #2d6ca2;
- background-image: none;
-}
-.btn-success {
- background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
- background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
- background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #3e8f3e;
-}
-.btn-success:hover,
-.btn-success:focus {
- background-color: #419641;
- background-position: 0 -15px;
-}
-.btn-success:active,
-.btn-success.active {
- background-color: #419641;
- border-color: #3e8f3e;
-}
-.btn-success:disabled,
-.btn-success[disabled] {
- background-color: #419641;
- background-image: none;
-}
-.btn-info {
- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
- background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
- background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #28a4c9;
-}
-.btn-info:hover,
-.btn-info:focus {
- background-color: #2aabd2;
- background-position: 0 -15px;
-}
-.btn-info:active,
-.btn-info.active {
- background-color: #2aabd2;
- border-color: #28a4c9;
-}
-.btn-info:disabled,
-.btn-info[disabled] {
- background-color: #2aabd2;
- background-image: none;
-}
-.btn-warning {
- background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
- background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
- background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #e38d13;
-}
-.btn-warning:hover,
-.btn-warning:focus {
- background-color: #eb9316;
- background-position: 0 -15px;
-}
-.btn-warning:active,
-.btn-warning.active {
- background-color: #eb9316;
- border-color: #e38d13;
-}
-.btn-warning:disabled,
-.btn-warning[disabled] {
- background-color: #eb9316;
- background-image: none;
-}
-.btn-danger {
- background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
- background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
- background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #b92c28;
-}
-.btn-danger:hover,
-.btn-danger:focus {
- background-color: #c12e2a;
- background-position: 0 -15px;
-}
-.btn-danger:active,
-.btn-danger.active {
- background-color: #c12e2a;
- border-color: #b92c28;
-}
-.btn-danger:disabled,
-.btn-danger[disabled] {
- background-color: #c12e2a;
- background-image: none;
-}
-.thumbnail,
-.img-thumbnail {
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
- box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
- background-color: #e8e8e8;
- background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
- background-repeat: repeat-x;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
- background-color: #357ebd;
- background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
- background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));
- background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
- background-repeat: repeat-x;
-}
-.navbar-default {
- background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
- background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
- background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .active > a {
- background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
- background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
- background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
- background-repeat: repeat-x;
- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
- box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
-}
-.navbar-brand,
-.navbar-nav > li > a {
- text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
-}
-.navbar-inverse {
- background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
- background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
- background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .active > a {
- background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
- background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
- background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
- background-repeat: repeat-x;
- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
- box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
-}
-.navbar-inverse .navbar-brand,
-.navbar-inverse .navbar-nav > li > a {
- text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
-}
-.navbar-static-top,
-.navbar-fixed-top,
-.navbar-fixed-bottom {
- border-radius: 0;
-}
-.alert {
- text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
-}
-.alert-success {
- background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
- background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
- background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
- background-repeat: repeat-x;
- border-color: #b2dba1;
-}
-.alert-info {
- background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
- background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
- background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
- background-repeat: repeat-x;
- border-color: #9acfea;
-}
-.alert-warning {
- background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
- background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
- background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
- background-repeat: repeat-x;
- border-color: #f5e79e;
-}
-.alert-danger {
- background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
- background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
- background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
- background-repeat: repeat-x;
- border-color: #dca7a7;
-}
-.progress {
- background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
- background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
- background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar {
- background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
- background-image: -o-linear-gradient(top, #428bca 0%, #3071a9 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3071a9));
- background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-success {
- background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
- background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
- background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-info {
- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
- background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
- background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-warning {
- background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
- background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
- background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-danger {
- background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
- background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
- background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-striped {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.list-group {
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
- box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
- text-shadow: 0 -1px 0 #3071a9;
- background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);
- background-image: -o-linear-gradient(top, #428bca 0%, #3278b3 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3278b3));
- background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
- background-repeat: repeat-x;
- border-color: #3278b3;
-}
-.list-group-item.active .badge,
-.list-group-item.active:hover .badge,
-.list-group-item.active:focus .badge {
- text-shadow: none;
-}
-.panel {
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
- box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-}
-.panel-default > .panel-heading {
- background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-primary > .panel-heading {
- background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
- background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));
- background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-success > .panel-heading {
- background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
- background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
- background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-info > .panel-heading {
- background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
- background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
- background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-warning > .panel-heading {
- background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
- background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
- background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-danger > .panel-heading {
- background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
- background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
- background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
- background-repeat: repeat-x;
-}
-.well {
- background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
- background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
- background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
- background-repeat: repeat-x;
- border-color: #dcdcdc;
- -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
- box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
-}
-/*# sourceMappingURL=bootstrap-theme.css.map */
diff --git a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap-theme.css.map b/wqflask/wqflask/static/packages/bootstrap/css/bootstrap-theme.css.map
deleted file mode 100644
index 1ea032ac..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap-theme.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAcA;;;;;;EAME,0CAAA;ECgDA,6FAAA;EACQ,qFAAA;EC5DT;AFgBC;;;;;;;;;;;;EC2CA,0DAAA;EACQ,kDAAA;EC7CT;AFVD;;;;;;EAiBI,mBAAA;EECH;AFgCC;;EAEE,wBAAA;EE9BH;AFmCD;EGlDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EA+B2C,2BAAA;EAA2B,oBAAA;EExBvE;AFLC;;EAEE,2BAAA;EACA,8BAAA;EEOH;AFJC;;EAEE,2BAAA;EACA,uBAAA;EEMH;AFHC;;EAEE,2BAAA;EACA,wBAAA;EEKH;AFUD;EGnDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EE+BD;AF7BC;;EAEE,2BAAA;EACA,8BAAA;EE+BH;AF5BC;;EAEE,2BAAA;EACA,uBAAA;EE8BH;AF3BC;;EAEE,2BAAA;EACA,wBAAA;EE6BH;AFbD;EGpDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEuDD;AFrDC;;EAEE,2BAAA;EACA,8BAAA;EEuDH;AFpDC;;EAEE,2BAAA;EACA,uBAAA;EEsDH;AFnDC;;EAEE,2BAAA;EACA,wBAAA;EEqDH;AFpCD;EGrDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EE+ED;AF7EC;;EAEE,2BAAA;EACA,8BAAA;EE+EH;AF5EC;;EAEE,2BAAA;EACA,uBAAA;EE8EH;AF3EC;;EAEE,2BAAA;EACA,wBAAA;EE6EH;AF3DD;EGtDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEuGD;AFrGC;;EAEE,2BAAA;EACA,8BAAA;EEuGH;AFpGC;;EAEE,2BAAA;EACA,uBAAA;EEsGH;AFnGC;;EAEE,2BAAA;EACA,wBAAA;EEqGH;AFlFD;EGvDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EE+HD;AF7HC;;EAEE,2BAAA;EACA,8BAAA;EE+HH;AF5HC;;EAEE,2BAAA;EACA,uBAAA;EE8HH;AF3HC;;EAEE,2BAAA;EACA,wBAAA;EE6HH;AFnGD;;ECfE,oDAAA;EACQ,4CAAA;ECsHT;AF9FD;;EGxEI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHuEF,2BAAA;EEoGD;AFlGD;;;EG7EI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH6EF,2BAAA;EEwGD;AF/FD;EG1FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EJ4GA,oBAAA;EC9CA,6FAAA;EACQ,qFAAA;ECoJT;AF1GD;;EG1FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,0DAAA;EACQ,kDAAA;EC8JT;AFvGD;;EAEE,gDAAA;EEyGD;AFrGD;EG7GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EFyOD;AF7GD;;EG7GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,yDAAA;EACQ,iDAAA;ECoLT;AFvHD;;EAYI,2CAAA;EE+GH;AF1GD;;;EAGE,kBAAA;EE4GD;AFnGD;EACE,+CAAA;EC5FA,4FAAA;EACQ,oFAAA;ECkMT;AF3FD;EGvJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH+IF,uBAAA;EEuGD;AFlGD;EGxJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH+IF,uBAAA;EE+GD;AFzGD;EGzJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH+IF,uBAAA;EEuHD;AFhHD;EG1JI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH+IF,uBAAA;EE+HD;AFhHD;EGlKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDqRH;AF7GD;EG5KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED4RH;AFnHD;EG7KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDmSH;AFzHD;EG9KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED0SH;AF/HD;EG/KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDiTH;AFrID;EGhLI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDwTH;AFxID;EGnJI,+MAAA;EACA,0MAAA;EACA,uMAAA;ED8RH;AFpID;EACE,oBAAA;EC/IA,oDAAA;EACQ,4CAAA;ECsRT;AFrID;;;EAGE,+BAAA;EGpME,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHkMF,uBAAA;EE2ID;AFhJD;;;EAQI,mBAAA;EE6IH;AFnID;ECpKE,mDAAA;EACQ,2CAAA;EC0ST;AF7HD;EG7NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED6VH;AFnID;EG9NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDoWH;AFzID;EG/NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED2WH;AF/ID;EGhOI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDkXH;AFrJD;EGjOI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDyXH;AF3JD;EGlOI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDgYH;AF3JD;EGzOI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHuOF,uBAAA;EC5LA,2FAAA;EACQ,mFAAA;EC8VT","file":"bootstrap-theme.css","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &:disabled,\n &[disabled] {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // See https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n",".btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default:disabled,\n.btn-default[disabled] {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);\n background-image: -o-linear-gradient(top, #428bca 0%, #2d6ca2 100%);\n background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #2b669a;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #2d6ca2;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #2d6ca2;\n border-color: #2b669a;\n}\n.btn-primary:disabled,\n.btn-primary[disabled] {\n background-color: #2d6ca2;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success:disabled,\n.btn-success[disabled] {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info:disabled,\n.btn-info[disabled] {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning:disabled,\n.btn-warning[disabled] {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger:disabled,\n.btn-danger[disabled] {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);\n background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%);\n background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);\n background-color: #357ebd;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);\n background-image: -o-linear-gradient(top, #428bca 0%, #3071a9 100%);\n background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #3071a9;\n background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);\n background-image: -o-linear-gradient(top, #428bca 0%, #3278b3 100%);\n background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);\n border-color: #3278b3;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);\n background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%);\n background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap-theme.min.css b/wqflask/wqflask/static/packages/bootstrap/css/bootstrap-theme.min.css
deleted file mode 100644
index 3bbb0506..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap-theme.min.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- * Bootstrap v3.3.0 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-default .badge,.btn-primary .badge,.btn-success .badge,.btn-info .badge,.btn-warning .badge,.btn-danger .badge{text-shadow:none}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-o-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#2d6ca2));background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-primary:disabled,.btn-primary[disabled]{background-color:#2d6ca2;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-o-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3071a9));background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-o-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3278b3));background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);background-repeat:repeat-x;border-color:#3278b3}.list-group-item.active .badge,.list-group-item.active:hover .badge,.list-group-item.active:focus .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css b/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css
deleted file mode 100644
index ead46cef..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css
+++ /dev/null
@@ -1,6392 +0,0 @@
-/*!
- * Bootstrap v3.3.0 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
-html {
- font-family: sans-serif;
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
-}
-body {
- margin: 0;
-}
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
- display: block;
-}
-audio,
-canvas,
-progress,
-video {
- display: inline-block;
- vertical-align: baseline;
-}
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-[hidden],
-template {
- display: none;
-}
-a {
- background-color: transparent;
-}
-a:active,
-a:hover {
- outline: 0;
-}
-abbr[title] {
- border-bottom: 1px dotted;
-}
-b,
-strong {
- font-weight: bold;
-}
-dfn {
- font-style: italic;
-}
-h1 {
- margin: .67em 0;
- font-size: 2em;
-}
-mark {
- color: #000;
- background: #ff0;
-}
-small {
- font-size: 80%;
-}
-sub,
-sup {
- position: relative;
- font-size: 75%;
- line-height: 0;
- vertical-align: baseline;
-}
-sup {
- top: -.5em;
-}
-sub {
- bottom: -.25em;
-}
-img {
- border: 0;
-}
-svg:not(:root) {
- overflow: hidden;
-}
-figure {
- margin: 1em 40px;
-}
-hr {
- height: 0;
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
-}
-pre {
- overflow: auto;
-}
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, monospace;
- font-size: 1em;
-}
-button,
-input,
-optgroup,
-select,
-textarea {
- margin: 0;
- font: inherit;
- color: inherit;
-}
-button {
- overflow: visible;
-}
-button,
-select {
- text-transform: none;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button;
- cursor: pointer;
-}
-button[disabled],
-html input[disabled] {
- cursor: default;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- padding: 0;
- border: 0;
-}
-input {
- line-height: normal;
-}
-input[type="checkbox"],
-input[type="radio"] {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- padding: 0;
-}
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-input[type="search"] {
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
- -webkit-appearance: textfield;
-}
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-fieldset {
- padding: .35em .625em .75em;
- margin: 0 2px;
- border: 1px solid #c0c0c0;
-}
-legend {
- padding: 0;
- border: 0;
-}
-textarea {
- overflow: auto;
-}
-optgroup {
- font-weight: bold;
-}
-table {
- border-spacing: 0;
- border-collapse: collapse;
-}
-td,
-th {
- padding: 0;
-}
-/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
-@media print {
- *,
- *:before,
- *:after {
- color: #000 !important;
- text-shadow: none !important;
- background: transparent !important;
- -webkit-box-shadow: none !important;
- box-shadow: none !important;
- }
- a,
- a:visited {
- text-decoration: underline;
- }
- a[href]:after {
- content: " (" attr(href) ")";
- }
- abbr[title]:after {
- content: " (" attr(title) ")";
- }
- a[href^="#"]:after,
- a[href^="javascript:"]:after {
- content: "";
- }
- pre,
- blockquote {
- border: 1px solid #999;
-
- page-break-inside: avoid;
- }
- thead {
- display: table-header-group;
- }
- tr,
- img {
- page-break-inside: avoid;
- }
- img {
- max-width: 100% !important;
- }
- p,
- h2,
- h3 {
- orphans: 3;
- widows: 3;
- }
- h2,
- h3 {
- page-break-after: avoid;
- }
- select {
- background: #fff !important;
- }
- .navbar {
- display: none;
- }
- .btn > .caret,
- .dropup > .btn > .caret {
- border-top-color: #000 !important;
- }
- .label {
- border: 1px solid #000;
- }
- .table {
- border-collapse: collapse !important;
- }
- .table td,
- .table th {
- background-color: #fff !important;
- }
- .table-bordered th,
- .table-bordered td {
- border: 1px solid #000 !important;
- }
-}
-@font-face {
- font-family: 'Glyphicons Halflings';
-
- src: url('../fonts/glyphicons-halflings-regular.eot');
- src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
-}
-.glyphicon {
- position: relative;
- top: 1px;
- display: inline-block;
- font-family: 'Glyphicons Halflings';
- font-style: normal;
- font-weight: normal;
- line-height: 1;
-
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-.glyphicon-asterisk:before {
- content: "\2a";
-}
-.glyphicon-plus:before {
- content: "\2b";
-}
-.glyphicon-euro:before,
-.glyphicon-eur:before {
- content: "\20ac";
-}
-.glyphicon-minus:before {
- content: "\2212";
-}
-.glyphicon-cloud:before {
- content: "\2601";
-}
-.glyphicon-envelope:before {
- content: "\2709";
-}
-.glyphicon-pencil:before {
- content: "\270f";
-}
-.glyphicon-glass:before {
- content: "\e001";
-}
-.glyphicon-music:before {
- content: "\e002";
-}
-.glyphicon-search:before {
- content: "\e003";
-}
-.glyphicon-heart:before {
- content: "\e005";
-}
-.glyphicon-star:before {
- content: "\e006";
-}
-.glyphicon-star-empty:before {
- content: "\e007";
-}
-.glyphicon-user:before {
- content: "\e008";
-}
-.glyphicon-film:before {
- content: "\e009";
-}
-.glyphicon-th-large:before {
- content: "\e010";
-}
-.glyphicon-th:before {
- content: "\e011";
-}
-.glyphicon-th-list:before {
- content: "\e012";
-}
-.glyphicon-ok:before {
- content: "\e013";
-}
-.glyphicon-remove:before {
- content: "\e014";
-}
-.glyphicon-zoom-in:before {
- content: "\e015";
-}
-.glyphicon-zoom-out:before {
- content: "\e016";
-}
-.glyphicon-off:before {
- content: "\e017";
-}
-.glyphicon-signal:before {
- content: "\e018";
-}
-.glyphicon-cog:before {
- content: "\e019";
-}
-.glyphicon-trash:before {
- content: "\e020";
-}
-.glyphicon-home:before {
- content: "\e021";
-}
-.glyphicon-file:before {
- content: "\e022";
-}
-.glyphicon-time:before {
- content: "\e023";
-}
-.glyphicon-road:before {
- content: "\e024";
-}
-.glyphicon-download-alt:before {
- content: "\e025";
-}
-.glyphicon-download:before {
- content: "\e026";
-}
-.glyphicon-upload:before {
- content: "\e027";
-}
-.glyphicon-inbox:before {
- content: "\e028";
-}
-.glyphicon-play-circle:before {
- content: "\e029";
-}
-.glyphicon-repeat:before {
- content: "\e030";
-}
-.glyphicon-refresh:before {
- content: "\e031";
-}
-.glyphicon-list-alt:before {
- content: "\e032";
-}
-.glyphicon-lock:before {
- content: "\e033";
-}
-.glyphicon-flag:before {
- content: "\e034";
-}
-.glyphicon-headphones:before {
- content: "\e035";
-}
-.glyphicon-volume-off:before {
- content: "\e036";
-}
-.glyphicon-volume-down:before {
- content: "\e037";
-}
-.glyphicon-volume-up:before {
- content: "\e038";
-}
-.glyphicon-qrcode:before {
- content: "\e039";
-}
-.glyphicon-barcode:before {
- content: "\e040";
-}
-.glyphicon-tag:before {
- content: "\e041";
-}
-.glyphicon-tags:before {
- content: "\e042";
-}
-.glyphicon-book:before {
- content: "\e043";
-}
-.glyphicon-bookmark:before {
- content: "\e044";
-}
-.glyphicon-print:before {
- content: "\e045";
-}
-.glyphicon-camera:before {
- content: "\e046";
-}
-.glyphicon-font:before {
- content: "\e047";
-}
-.glyphicon-bold:before {
- content: "\e048";
-}
-.glyphicon-italic:before {
- content: "\e049";
-}
-.glyphicon-text-height:before {
- content: "\e050";
-}
-.glyphicon-text-width:before {
- content: "\e051";
-}
-.glyphicon-align-left:before {
- content: "\e052";
-}
-.glyphicon-align-center:before {
- content: "\e053";
-}
-.glyphicon-align-right:before {
- content: "\e054";
-}
-.glyphicon-align-justify:before {
- content: "\e055";
-}
-.glyphicon-list:before {
- content: "\e056";
-}
-.glyphicon-indent-left:before {
- content: "\e057";
-}
-.glyphicon-indent-right:before {
- content: "\e058";
-}
-.glyphicon-facetime-video:before {
- content: "\e059";
-}
-.glyphicon-picture:before {
- content: "\e060";
-}
-.glyphicon-map-marker:before {
- content: "\e062";
-}
-.glyphicon-adjust:before {
- content: "\e063";
-}
-.glyphicon-tint:before {
- content: "\e064";
-}
-.glyphicon-edit:before {
- content: "\e065";
-}
-.glyphicon-share:before {
- content: "\e066";
-}
-.glyphicon-check:before {
- content: "\e067";
-}
-.glyphicon-move:before {
- content: "\e068";
-}
-.glyphicon-step-backward:before {
- content: "\e069";
-}
-.glyphicon-fast-backward:before {
- content: "\e070";
-}
-.glyphicon-backward:before {
- content: "\e071";
-}
-.glyphicon-play:before {
- content: "\e072";
-}
-.glyphicon-pause:before {
- content: "\e073";
-}
-.glyphicon-stop:before {
- content: "\e074";
-}
-.glyphicon-forward:before {
- content: "\e075";
-}
-.glyphicon-fast-forward:before {
- content: "\e076";
-}
-.glyphicon-step-forward:before {
- content: "\e077";
-}
-.glyphicon-eject:before {
- content: "\e078";
-}
-.glyphicon-chevron-left:before {
- content: "\e079";
-}
-.glyphicon-chevron-right:before {
- content: "\e080";
-}
-.glyphicon-plus-sign:before {
- content: "\e081";
-}
-.glyphicon-minus-sign:before {
- content: "\e082";
-}
-.glyphicon-remove-sign:before {
- content: "\e083";
-}
-.glyphicon-ok-sign:before {
- content: "\e084";
-}
-.glyphicon-question-sign:before {
- content: "\e085";
-}
-.glyphicon-info-sign:before {
- content: "\e086";
-}
-.glyphicon-screenshot:before {
- content: "\e087";
-}
-.glyphicon-remove-circle:before {
- content: "\e088";
-}
-.glyphicon-ok-circle:before {
- content: "\e089";
-}
-.glyphicon-ban-circle:before {
- content: "\e090";
-}
-.glyphicon-arrow-left:before {
- content: "\e091";
-}
-.glyphicon-arrow-right:before {
- content: "\e092";
-}
-.glyphicon-arrow-up:before {
- content: "\e093";
-}
-.glyphicon-arrow-down:before {
- content: "\e094";
-}
-.glyphicon-share-alt:before {
- content: "\e095";
-}
-.glyphicon-resize-full:before {
- content: "\e096";
-}
-.glyphicon-resize-small:before {
- content: "\e097";
-}
-.glyphicon-exclamation-sign:before {
- content: "\e101";
-}
-.glyphicon-gift:before {
- content: "\e102";
-}
-.glyphicon-leaf:before {
- content: "\e103";
-}
-.glyphicon-fire:before {
- content: "\e104";
-}
-.glyphicon-eye-open:before {
- content: "\e105";
-}
-.glyphicon-eye-close:before {
- content: "\e106";
-}
-.glyphicon-warning-sign:before {
- content: "\e107";
-}
-.glyphicon-plane:before {
- content: "\e108";
-}
-.glyphicon-calendar:before {
- content: "\e109";
-}
-.glyphicon-random:before {
- content: "\e110";
-}
-.glyphicon-comment:before {
- content: "\e111";
-}
-.glyphicon-magnet:before {
- content: "\e112";
-}
-.glyphicon-chevron-up:before {
- content: "\e113";
-}
-.glyphicon-chevron-down:before {
- content: "\e114";
-}
-.glyphicon-retweet:before {
- content: "\e115";
-}
-.glyphicon-shopping-cart:before {
- content: "\e116";
-}
-.glyphicon-folder-close:before {
- content: "\e117";
-}
-.glyphicon-folder-open:before {
- content: "\e118";
-}
-.glyphicon-resize-vertical:before {
- content: "\e119";
-}
-.glyphicon-resize-horizontal:before {
- content: "\e120";
-}
-.glyphicon-hdd:before {
- content: "\e121";
-}
-.glyphicon-bullhorn:before {
- content: "\e122";
-}
-.glyphicon-bell:before {
- content: "\e123";
-}
-.glyphicon-certificate:before {
- content: "\e124";
-}
-.glyphicon-thumbs-up:before {
- content: "\e125";
-}
-.glyphicon-thumbs-down:before {
- content: "\e126";
-}
-.glyphicon-hand-right:before {
- content: "\e127";
-}
-.glyphicon-hand-left:before {
- content: "\e128";
-}
-.glyphicon-hand-up:before {
- content: "\e129";
-}
-.glyphicon-hand-down:before {
- content: "\e130";
-}
-.glyphicon-circle-arrow-right:before {
- content: "\e131";
-}
-.glyphicon-circle-arrow-left:before {
- content: "\e132";
-}
-.glyphicon-circle-arrow-up:before {
- content: "\e133";
-}
-.glyphicon-circle-arrow-down:before {
- content: "\e134";
-}
-.glyphicon-globe:before {
- content: "\e135";
-}
-.glyphicon-wrench:before {
- content: "\e136";
-}
-.glyphicon-tasks:before {
- content: "\e137";
-}
-.glyphicon-filter:before {
- content: "\e138";
-}
-.glyphicon-briefcase:before {
- content: "\e139";
-}
-.glyphicon-fullscreen:before {
- content: "\e140";
-}
-.glyphicon-dashboard:before {
- content: "\e141";
-}
-.glyphicon-paperclip:before {
- content: "\e142";
-}
-.glyphicon-heart-empty:before {
- content: "\e143";
-}
-.glyphicon-link:before {
- content: "\e144";
-}
-.glyphicon-phone:before {
- content: "\e145";
-}
-.glyphicon-pushpin:before {
- content: "\e146";
-}
-.glyphicon-usd:before {
- content: "\e148";
-}
-.glyphicon-gbp:before {
- content: "\e149";
-}
-.glyphicon-sort:before {
- content: "\e150";
-}
-.glyphicon-sort-by-alphabet:before {
- content: "\e151";
-}
-.glyphicon-sort-by-alphabet-alt:before {
- content: "\e152";
-}
-.glyphicon-sort-by-order:before {
- content: "\e153";
-}
-.glyphicon-sort-by-order-alt:before {
- content: "\e154";
-}
-.glyphicon-sort-by-attributes:before {
- content: "\e155";
-}
-.glyphicon-sort-by-attributes-alt:before {
- content: "\e156";
-}
-.glyphicon-unchecked:before {
- content: "\e157";
-}
-.glyphicon-expand:before {
- content: "\e158";
-}
-.glyphicon-collapse-down:before {
- content: "\e159";
-}
-.glyphicon-collapse-up:before {
- content: "\e160";
-}
-.glyphicon-log-in:before {
- content: "\e161";
-}
-.glyphicon-flash:before {
- content: "\e162";
-}
-.glyphicon-log-out:before {
- content: "\e163";
-}
-.glyphicon-new-window:before {
- content: "\e164";
-}
-.glyphicon-record:before {
- content: "\e165";
-}
-.glyphicon-save:before {
- content: "\e166";
-}
-.glyphicon-open:before {
- content: "\e167";
-}
-.glyphicon-saved:before {
- content: "\e168";
-}
-.glyphicon-import:before {
- content: "\e169";
-}
-.glyphicon-export:before {
- content: "\e170";
-}
-.glyphicon-send:before {
- content: "\e171";
-}
-.glyphicon-floppy-disk:before {
- content: "\e172";
-}
-.glyphicon-floppy-saved:before {
- content: "\e173";
-}
-.glyphicon-floppy-remove:before {
- content: "\e174";
-}
-.glyphicon-floppy-save:before {
- content: "\e175";
-}
-.glyphicon-floppy-open:before {
- content: "\e176";
-}
-.glyphicon-credit-card:before {
- content: "\e177";
-}
-.glyphicon-transfer:before {
- content: "\e178";
-}
-.glyphicon-cutlery:before {
- content: "\e179";
-}
-.glyphicon-header:before {
- content: "\e180";
-}
-.glyphicon-compressed:before {
- content: "\e181";
-}
-.glyphicon-earphone:before {
- content: "\e182";
-}
-.glyphicon-phone-alt:before {
- content: "\e183";
-}
-.glyphicon-tower:before {
- content: "\e184";
-}
-.glyphicon-stats:before {
- content: "\e185";
-}
-.glyphicon-sd-video:before {
- content: "\e186";
-}
-.glyphicon-hd-video:before {
- content: "\e187";
-}
-.glyphicon-subtitles:before {
- content: "\e188";
-}
-.glyphicon-sound-stereo:before {
- content: "\e189";
-}
-.glyphicon-sound-dolby:before {
- content: "\e190";
-}
-.glyphicon-sound-5-1:before {
- content: "\e191";
-}
-.glyphicon-sound-6-1:before {
- content: "\e192";
-}
-.glyphicon-sound-7-1:before {
- content: "\e193";
-}
-.glyphicon-copyright-mark:before {
- content: "\e194";
-}
-.glyphicon-registration-mark:before {
- content: "\e195";
-}
-.glyphicon-cloud-download:before {
- content: "\e197";
-}
-.glyphicon-cloud-upload:before {
- content: "\e198";
-}
-.glyphicon-tree-conifer:before {
- content: "\e199";
-}
-.glyphicon-tree-deciduous:before {
- content: "\e200";
-}
-* {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-*:before,
-*:after {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-html {
- font-size: 10px;
-
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-body {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 14px;
- line-height: 1.42857143;
- color: #000;
- background-color: #fff;
-}
-input,
-button,
-select,
-textarea {
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
-}
-a {
- color: #3071a9;
- text-decoration: none;
-}
-a:hover,
-a:focus {
- color: #2a6496;
- text-decoration: underline;
-}
-a:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-figure {
- margin: 0;
-}
-img {
- vertical-align: middle;
-}
-.img-responsive,
-.thumbnail > img,
-.thumbnail a > img,
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
- display: block;
- max-width: 100%;
- height: auto;
-}
-.img-rounded {
- border-radius: 6px;
-}
-.img-thumbnail {
- display: inline-block;
- max-width: 100%;
- height: auto;
- padding: 4px;
- line-height: 1.42857143;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 4px;
- -webkit-transition: all .2s ease-in-out;
- -o-transition: all .2s ease-in-out;
- transition: all .2s ease-in-out;
-}
-.img-circle {
- border-radius: 50%;
-}
-hr {
- margin-top: 20px;
- margin-bottom: 20px;
- border: 0;
- border-top: 1px solid #eee;
-}
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- margin: -1px;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- border: 0;
-}
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- margin: 0;
- overflow: visible;
- clip: auto;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
- font-family: inherit;
- font-weight: 500;
- line-height: 1.1;
- color: inherit;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small,
-.h1 small,
-.h2 small,
-.h3 small,
-.h4 small,
-.h5 small,
-.h6 small,
-h1 .small,
-h2 .small,
-h3 .small,
-h4 .small,
-h5 .small,
-h6 .small,
-.h1 .small,
-.h2 .small,
-.h3 .small,
-.h4 .small,
-.h5 .small,
-.h6 .small {
- font-weight: normal;
- line-height: 1;
- color: #777;
-}
-h1,
-.h1,
-h2,
-.h2,
-h3,
-.h3 {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-h1 small,
-.h1 small,
-h2 small,
-.h2 small,
-h3 small,
-.h3 small,
-h1 .small,
-.h1 .small,
-h2 .small,
-.h2 .small,
-h3 .small,
-.h3 .small {
- font-size: 65%;
-}
-h4,
-.h4,
-h5,
-.h5,
-h6,
-.h6 {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-h4 small,
-.h4 small,
-h5 small,
-.h5 small,
-h6 small,
-.h6 small,
-h4 .small,
-.h4 .small,
-h5 .small,
-.h5 .small,
-h6 .small,
-.h6 .small {
- font-size: 75%;
-}
-h1,
-.h1 {
- font-size: 30px;
-}
-h2,
-.h2 {
- font-size: 24px;
-}
-h3,
-.h3 {
- font-size: 18px;
-}
-h4,
-.h4 {
- font-size: 14px;
-}
-h5,
-.h5 {
- font-size: 12px;
-}
-h6,
-.h6 {
- font-size: 10px;
-}
-p {
- margin: 0 0 10px;
-}
-.lead {
- margin-bottom: 20px;
- font-size: 16px;
- font-weight: 300;
- line-height: 1.4;
-}
-@media (min-width: 768px) {
- .lead {
- font-size: 21px;
- }
-}
-small,
-.small {
- font-size: 85%;
-}
-mark,
-.mark {
- padding: .2em;
- background-color: #fcf8e3;
-}
-.text-left {
- text-align: left;
-}
-.text-right {
- text-align: right;
-}
-.text-center {
- text-align: center;
-}
-.text-justify {
- text-align: justify;
-}
-.text-nowrap {
- white-space: nowrap;
-}
-.text-lowercase {
- text-transform: lowercase;
-}
-.text-uppercase {
- text-transform: uppercase;
-}
-.text-capitalize {
- text-transform: capitalize;
-}
-.text-muted {
- color: #777;
-}
-.text-primary {
- color: #428bca;
-}
-a.text-primary:hover {
- color: #3071a9;
-}
-.text-success {
- color: #3c763d;
-}
-a.text-success:hover {
- color: #2b542c;
-}
-.text-info {
- color: #31708f;
-}
-a.text-info:hover {
- color: #245269;
-}
-.text-warning {
- color: #8a6d3b;
-}
-a.text-warning:hover {
- color: #66512c;
-}
-.text-danger {
- color: #a94442;
-}
-a.text-danger:hover {
- color: #843534;
-}
-.bg-primary {
- color: #fff;
- background-color: #428bca;
-}
-a.bg-primary:hover {
- background-color: #3071a9;
-}
-.bg-success {
- background-color: #dff0d8;
-}
-a.bg-success:hover {
- background-color: #c1e2b3;
-}
-.bg-info {
- background-color: #d9edf7;
-}
-a.bg-info:hover {
- background-color: #afd9ee;
-}
-.bg-warning {
- background-color: #fcf8e3;
-}
-a.bg-warning:hover {
- background-color: #f7ecb5;
-}
-.bg-danger {
- background-color: #f2dede;
-}
-a.bg-danger:hover {
- background-color: #e4b9b9;
-}
-.page-header {
- padding-bottom: 9px;
- margin: 10px 0 10px;
- border-bottom: 1px solid #eee;
-}
-ul,
-ol {
- margin-top: 0;
- margin-bottom: 10px;
-}
-ul ul,
-ol ul,
-ul ol,
-ol ol {
- margin-bottom: 0;
-}
-.list-unstyled {
- padding-left: 0;
- list-style: none;
-}
-.list-inline {
- padding-left: 0;
- margin-left: -5px;
- list-style: none;
-}
-.list-inline > li {
- display: inline-block;
- padding-right: 5px;
- padding-left: 5px;
-}
-dl {
- margin-top: 0;
- margin-bottom: 20px;
-}
-dt,
-dd {
- line-height: 1.42857143;
-}
-dt {
- font-weight: bold;
-}
-dd {
- margin-left: 0;
-}
-@media (min-width: 768px) {
- .dl-horizontal dt {
- float: left;
- width: 160px;
- overflow: hidden;
- clear: left;
- text-align: right;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .dl-horizontal dd {
- margin-left: 180px;
- }
-}
-abbr[title],
-abbr[data-original-title] {
- cursor: help;
- border-bottom: 1px dotted #777;
-}
-.initialism {
- font-size: 90%;
- text-transform: uppercase;
-}
-blockquote {
- padding: 10px 20px;
- margin: 0 0 20px;
- font-size: 17.5px;
- border-left: 5px solid #eee;
-}
-blockquote p:last-child,
-blockquote ul:last-child,
-blockquote ol:last-child {
- margin-bottom: 0;
-}
-blockquote footer,
-blockquote small,
-blockquote .small {
- display: block;
- font-size: 80%;
- line-height: 1.42857143;
- color: #777;
-}
-blockquote footer:before,
-blockquote small:before,
-blockquote .small:before {
- content: '\2014 \00A0';
-}
-.blockquote-reverse,
-blockquote.pull-right {
- padding-right: 15px;
- padding-left: 0;
- text-align: right;
- border-right: 5px solid #eee;
- border-left: 0;
-}
-.blockquote-reverse footer:before,
-blockquote.pull-right footer:before,
-.blockquote-reverse small:before,
-blockquote.pull-right small:before,
-.blockquote-reverse .small:before,
-blockquote.pull-right .small:before {
- content: '';
-}
-.blockquote-reverse footer:after,
-blockquote.pull-right footer:after,
-.blockquote-reverse small:after,
-blockquote.pull-right small:after,
-.blockquote-reverse .small:after,
-blockquote.pull-right .small:after {
- content: '\00A0 \2014';
-}
-address {
- margin-bottom: 20px;
- font-style: normal;
- line-height: 1.42857143;
-}
-code,
-kbd,
-pre,
-samp {
- font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
-}
-code {
- padding: 2px 4px;
- font-size: 90%;
- color: #c7254e;
- background-color: #f9f2f4;
- border-radius: 4px;
-}
-kbd {
- padding: 2px 4px;
- font-size: 90%;
- color: #fff;
- background-color: #333;
- border-radius: 3px;
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
-}
-kbd kbd {
- padding: 0;
- font-size: 100%;
- font-weight: bold;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-pre {
- display: block;
- padding: 9.5px;
- margin: 0 0 10px;
- font-size: 13px;
- line-height: 1.42857143;
- color: #333;
- word-break: break-all;
- word-wrap: break-word;
- background-color: #f5f5f5;
- border: 1px solid #ccc;
- border-radius: 4px;
-}
-pre code {
- padding: 0;
- font-size: inherit;
- color: inherit;
- white-space: pre-wrap;
- background-color: transparent;
- border-radius: 0;
-}
-.pre-scrollable {
- max-height: 340px;
- overflow-y: scroll;
-}
-.container {
- padding-right: 15px;
- padding-left: 15px;
-}
-/*
-@media (min-width: 768px) {
- .container {
- width: 750px;
- }
-}
-@media (min-width: 992px) {
- .container {
- width: 970px;
- }
-}
-@media (min-width: 1200px) {
- .container {
- width: 1170px;
- }
-}*/
-
-.container-fluid {
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-
-.row {
- margin-right: -15px;
- margin-left: -15px;
-}
-.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
- position: relative;
- min-height: 1px;
- padding-right: 15px;
- padding-left: 15px;
-}
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
- float: left;
-}
-.col-xs-12 {
- width: 100%;
-}
-.col-xs-11 {
- width: 91.66666667%;
-}
-.col-xs-10 {
- width: 83.33333333%;
-}
-.col-xs-9 {
- width: 75%;
-}
-.col-xs-8 {
- width: 66.66666667%;
-}
-.col-xs-7 {
- width: 58.33333333%;
-}
-.col-xs-6 {
- width: 50%;
-}
-.col-xs-5 {
- width: 41.66666667%;
-}
-.col-xs-4 {
- width: 33.33333333%;
-}
-.col-xs-3 {
- width: 25%;
-}
-.col-xs-2 {
- width: 16.66666667%;
-}
-.col-xs-1 {
- width: 8.33333333%;
-}
-.col-xs-pull-12 {
- right: 100%;
-}
-.col-xs-pull-11 {
- right: 91.66666667%;
-}
-.col-xs-pull-10 {
- right: 83.33333333%;
-}
-.col-xs-pull-9 {
- right: 75%;
-}
-.col-xs-pull-8 {
- right: 66.66666667%;
-}
-.col-xs-pull-7 {
- right: 58.33333333%;
-}
-.col-xs-pull-6 {
- right: 50%;
-}
-.col-xs-pull-5 {
- right: 41.66666667%;
-}
-.col-xs-pull-4 {
- right: 33.33333333%;
-}
-.col-xs-pull-3 {
- right: 25%;
-}
-.col-xs-pull-2 {
- right: 16.66666667%;
-}
-.col-xs-pull-1 {
- right: 8.33333333%;
-}
-.col-xs-pull-0 {
- right: auto;
-}
-.col-xs-push-12 {
- left: 100%;
-}
-.col-xs-push-11 {
- left: 91.66666667%;
-}
-.col-xs-push-10 {
- left: 83.33333333%;
-}
-.col-xs-push-9 {
- left: 75%;
-}
-.col-xs-push-8 {
- left: 66.66666667%;
-}
-.col-xs-push-7 {
- left: 58.33333333%;
-}
-.col-xs-push-6 {
- left: 50%;
-}
-.col-xs-push-5 {
- left: 41.66666667%;
-}
-.col-xs-push-4 {
- left: 33.33333333%;
-}
-.col-xs-push-3 {
- left: 25%;
-}
-.col-xs-push-2 {
- left: 16.66666667%;
-}
-.col-xs-push-1 {
- left: 8.33333333%;
-}
-.col-xs-push-0 {
- left: auto;
-}
-.col-xs-offset-12 {
- margin-left: 100%;
-}
-.col-xs-offset-11 {
- margin-left: 91.66666667%;
-}
-.col-xs-offset-10 {
- margin-left: 83.33333333%;
-}
-.col-xs-offset-9 {
- margin-left: 75%;
-}
-.col-xs-offset-8 {
- margin-left: 66.66666667%;
-}
-.col-xs-offset-7 {
- margin-left: 58.33333333%;
-}
-.col-xs-offset-6 {
- margin-left: 50%;
-}
-.col-xs-offset-5 {
- margin-left: 41.66666667%;
-}
-.col-xs-offset-4 {
- margin-left: 33.33333333%;
-}
-.col-xs-offset-3 {
- margin-left: 25%;
-}
-.col-xs-offset-2 {
- margin-left: 16.66666667%;
-}
-.col-xs-offset-1 {
- margin-left: 8.33333333%;
-}
-.col-xs-offset-0 {
- margin-left: 0;
-}
-
-/*
-@media (min-width: 768px) {
- .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
- float: left;
- }
- .col-sm-12 {
- width: 100%;
- }
- .col-sm-11 {
- width: 91.66666667%;
- }
- .col-sm-10 {
- width: 83.33333333%;
- }
- .col-sm-9 {
- width: 75%;
- }
- .col-sm-8 {
- width: 66.66666667%;
- }
- .col-sm-7 {
- width: 58.33333333%;
- }
- .col-sm-6 {
- width: 50%;
- }
- .col-sm-5 {
- width: 41.66666667%;
- }
- .col-sm-4 {
- width: 33.33333333%;
- }
- .col-sm-3 {
- width: 25%;
- }
- .col-sm-2 {
- width: 16.66666667%;
- }
- .col-sm-1 {
- width: 8.33333333%;
- }
- .col-sm-pull-12 {
- right: 100%;
- }
- .col-sm-pull-11 {
- right: 91.66666667%;
- }
- .col-sm-pull-10 {
- right: 83.33333333%;
- }
- .col-sm-pull-9 {
- right: 75%;
- }
- .col-sm-pull-8 {
- right: 66.66666667%;
- }
- .col-sm-pull-7 {
- right: 58.33333333%;
- }
- .col-sm-pull-6 {
- right: 50%;
- }
- .col-sm-pull-5 {
- right: 41.66666667%;
- }
- .col-sm-pull-4 {
- right: 33.33333333%;
- }
- .col-sm-pull-3 {
- right: 25%;
- }
- .col-sm-pull-2 {
- right: 16.66666667%;
- }
- .col-sm-pull-1 {
- right: 8.33333333%;
- }
- .col-sm-pull-0 {
- right: auto;
- }
- .col-sm-push-12 {
- left: 100%;
- }
- .col-sm-push-11 {
- left: 91.66666667%;
- }
- .col-sm-push-10 {
- left: 83.33333333%;
- }
- .col-sm-push-9 {
- left: 75%;
- }
- .col-sm-push-8 {
- left: 66.66666667%;
- }
- .col-sm-push-7 {
- left: 58.33333333%;
- }
- .col-sm-push-6 {
- left: 50%;
- }
- .col-sm-push-5 {
- left: 41.66666667%;
- }
- .col-sm-push-4 {
- left: 33.33333333%;
- }
- .col-sm-push-3 {
- left: 25%;
- }
- .col-sm-push-2 {
- left: 16.66666667%;
- }
- .col-sm-push-1 {
- left: 8.33333333%;
- }
- .col-sm-push-0 {
- left: auto;
- }
- .col-sm-offset-12 {
- margin-left: 100%;
- }
- .col-sm-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-sm-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-sm-offset-9 {
- margin-left: 75%;
- }
- .col-sm-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-sm-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-sm-offset-6 {
- margin-left: 50%;
- }
- .col-sm-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-sm-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-sm-offset-3 {
- margin-left: 25%;
- }
- .col-sm-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-sm-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-sm-offset-0 {
- margin-left: 0;
- }
-}
-@media (min-width: 992px) {
- .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
- float: left;
- }
- .col-md-12 {
- width: 100%;
- }
- .col-md-11 {
- width: 91.66666667%;
- }
- .col-md-10 {
- width: 83.33333333%;
- }
- .col-md-9 {
- width: 75%;
- }
- .col-md-8 {
- width: 66.66666667%;
- }
- .col-md-7 {
- width: 58.33333333%;
- }
- .col-md-6 {
- width: 50%;
- }
- .col-md-5 {
- width: 41.66666667%;
- }
- .col-md-4 {
- width: 33.33333333%;
- }
- .col-md-3 {
- width: 25%;
- }
- .col-md-2 {
- width: 16.66666667%;
- }
- .col-md-1 {
- width: 8.33333333%;
- }
- .col-md-pull-12 {
- right: 100%;
- }
- .col-md-pull-11 {
- right: 91.66666667%;
- }
- .col-md-pull-10 {
- right: 83.33333333%;
- }
- .col-md-pull-9 {
- right: 75%;
- }
- .col-md-pull-8 {
- right: 66.66666667%;
- }
- .col-md-pull-7 {
- right: 58.33333333%;
- }
- .col-md-pull-6 {
- right: 50%;
- }
- .col-md-pull-5 {
- right: 41.66666667%;
- }
- .col-md-pull-4 {
- right: 33.33333333%;
- }
- .col-md-pull-3 {
- right: 25%;
- }
- .col-md-pull-2 {
- right: 16.66666667%;
- }
- .col-md-pull-1 {
- right: 8.33333333%;
- }
- .col-md-pull-0 {
- right: auto;
- }
- .col-md-push-12 {
- left: 100%;
- }
- .col-md-push-11 {
- left: 91.66666667%;
- }
- .col-md-push-10 {
- left: 83.33333333%;
- }
- .col-md-push-9 {
- left: 75%;
- }
- .col-md-push-8 {
- left: 66.66666667%;
- }
- .col-md-push-7 {
- left: 58.33333333%;
- }
- .col-md-push-6 {
- left: 50%;
- }
- .col-md-push-5 {
- left: 41.66666667%;
- }
- .col-md-push-4 {
- left: 33.33333333%;
- }
- .col-md-push-3 {
- left: 25%;
- }
- .col-md-push-2 {
- left: 16.66666667%;
- }
- .col-md-push-1 {
- left: 8.33333333%;
- }
- .col-md-push-0 {
- left: auto;
- }
- .col-md-offset-12 {
- margin-left: 100%;
- }
- .col-md-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-md-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-md-offset-9 {
- margin-left: 75%;
- }
- .col-md-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-md-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-md-offset-6 {
- margin-left: 50%;
- }
- .col-md-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-md-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-md-offset-3 {
- margin-left: 25%;
- }
- .col-md-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-md-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-md-offset-0 {
- margin-left: 0;
- }
-}
-@media (min-width: 1200px) {
- .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
- float: left;
- }
- .col-lg-12 {
- width: 100%;
- }
- .col-lg-11 {
- width: 91.66666667%;
- }
- .col-lg-10 {
- width: 83.33333333%;
- }
- .col-lg-9 {
- width: 75%;
- }
- .col-lg-8 {
- width: 66.66666667%;
- }
- .col-lg-7 {
- width: 58.33333333%;
- }
- .col-lg-6 {
- width: 50%;
- }
- .col-lg-5 {
- width: 41.66666667%;
- }
- .col-lg-4 {
- width: 33.33333333%;
- }
- .col-lg-3 {
- width: 25%;
- }
- .col-lg-2 {
- width: 16.66666667%;
- }
- .col-lg-1 {
- width: 8.33333333%;
- }
- .col-lg-pull-12 {
- right: 100%;
- }
- .col-lg-pull-11 {
- right: 91.66666667%;
- }
- .col-lg-pull-10 {
- right: 83.33333333%;
- }
- .col-lg-pull-9 {
- right: 75%;
- }
- .col-lg-pull-8 {
- right: 66.66666667%;
- }
- .col-lg-pull-7 {
- right: 58.33333333%;
- }
- .col-lg-pull-6 {
- right: 50%;
- }
- .col-lg-pull-5 {
- right: 41.66666667%;
- }
- .col-lg-pull-4 {
- right: 33.33333333%;
- }
- .col-lg-pull-3 {
- right: 25%;
- }
- .col-lg-pull-2 {
- right: 16.66666667%;
- }
- .col-lg-pull-1 {
- right: 8.33333333%;
- }
- .col-lg-pull-0 {
- right: auto;
- }
- .col-lg-push-12 {
- left: 100%;
- }
- .col-lg-push-11 {
- left: 91.66666667%;
- }
- .col-lg-push-10 {
- left: 83.33333333%;
- }
- .col-lg-push-9 {
- left: 75%;
- }
- .col-lg-push-8 {
- left: 66.66666667%;
- }
- .col-lg-push-7 {
- left: 58.33333333%;
- }
- .col-lg-push-6 {
- left: 50%;
- }
- .col-lg-push-5 {
- left: 41.66666667%;
- }
- .col-lg-push-4 {
- left: 33.33333333%;
- }
- .col-lg-push-3 {
- left: 25%;
- }
- .col-lg-push-2 {
- left: 16.66666667%;
- }
- .col-lg-push-1 {
- left: 8.33333333%;
- }
- .col-lg-push-0 {
- left: auto;
- }
- .col-lg-offset-12 {
- margin-left: 100%;
- }
- .col-lg-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-lg-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-lg-offset-9 {
- margin-left: 75%;
- }
- .col-lg-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-lg-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-lg-offset-6 {
- margin-left: 50%;
- }
- .col-lg-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-lg-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-lg-offset-3 {
- margin-left: 25%;
- }
- .col-lg-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-lg-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-lg-offset-0 {
- margin-left: 0;
- }
-}
-*/
-
-table {
- background-color: transparent;
-}
-caption {
- padding-top: 8px;
- padding-bottom: 8px;
- color: #777;
- text-align: left;
-}
-th {
- text-align: left;
-}
-.table {
- //width: 100%;
- //max-width: 100%;
- margin-bottom: 20px;
-}
-.table > thead > tr > th,
-.table > tbody > tr > th,
-.table > tfoot > tr > th,
-.table > thead > tr > td,
-.table > tbody > tr > td,
-.table > tfoot > tr > td {
- padding: 8px;
- line-height: 1.42857143;
- vertical-align: top;
- border-top: 1px solid #ddd;
-}
-.table > thead > tr > th {
- vertical-align: middle;
- border-bottom: 2px solid #ddd;
-}
-.table > caption + thead > tr:first-child > th,
-.table > colgroup + thead > tr:first-child > th,
-.table > thead:first-child > tr:first-child > th,
-.table > caption + thead > tr:first-child > td,
-.table > colgroup + thead > tr:first-child > td,
-.table > thead:first-child > tr:first-child > td {
- border-top: 0;
-}
-.table > tbody + tbody {
- border-top: 2px solid #ddd;
-}
-.table .table {
- background-color: #fff;
-}
-.table-condensed > thead > tr > th,
-.table-condensed > tbody > tr > th,
-.table-condensed > tfoot > tr > th,
-.table-condensed > thead > tr > td,
-.table-condensed > tbody > tr > td,
-.table-condensed > tfoot > tr > td {
- padding: 5px;
-}
-.table-bordered {
- border: 1px solid #000;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > tbody > tr > th,
-.table-bordered > tfoot > tr > th,
-.table-bordered > thead > tr > td,
-.table-bordered > tbody > tr > td,
-.table-bordered > tfoot > tr > td {
- border: 1px solid #000;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > thead > tr > td {
- border-bottom-width: 2px;
-}
-.table-striped > tbody > tr:nth-child(odd) {
- background-color: #f9f9f9;
-}
-.table-hover > tbody > tr:hover {
- background-color: #f5f5f5;
-}
-table col[class*="col-"] {
- position: static;
- display: table-column;
- float: none;
-}
-table td[class*="col-"],
-table th[class*="col-"] {
- position: static;
- display: table-cell;
- float: none;
-}
-.table > thead > tr > td.active,
-.table > tbody > tr > td.active,
-.table > tfoot > tr > td.active,
-.table > thead > tr > th.active,
-.table > tbody > tr > th.active,
-.table > tfoot > tr > th.active,
-.table > thead > tr.active > td,
-.table > tbody > tr.active > td,
-.table > tfoot > tr.active > td,
-.table > thead > tr.active > th,
-.table > tbody > tr.active > th,
-.table > tfoot > tr.active > th {
- background-color: #f5f5f5;
-}
-.table-hover > tbody > tr > td.active:hover,
-.table-hover > tbody > tr > th.active:hover,
-.table-hover > tbody > tr.active:hover > td,
-.table-hover > tbody > tr:hover > .active,
-.table-hover > tbody > tr.active:hover > th {
- background-color: #e8e8e8;
-}
-.table > thead > tr > td.success,
-.table > tbody > tr > td.success,
-.table > tfoot > tr > td.success,
-.table > thead > tr > th.success,
-.table > tbody > tr > th.success,
-.table > tfoot > tr > th.success,
-.table > thead > tr.success > td,
-.table > tbody > tr.success > td,
-.table > tfoot > tr.success > td,
-.table > thead > tr.success > th,
-.table > tbody > tr.success > th,
-.table > tfoot > tr.success > th {
- background-color: #dff0d8;
-}
-.table-hover > tbody > tr > td.success:hover,
-.table-hover > tbody > tr > th.success:hover,
-.table-hover > tbody > tr.success:hover > td,
-.table-hover > tbody > tr:hover > .success,
-.table-hover > tbody > tr.success:hover > th {
- background-color: #d0e9c6;
-}
-.table > thead > tr > td.info,
-.table > tbody > tr > td.info,
-.table > tfoot > tr > td.info,
-.table > thead > tr > th.info,
-.table > tbody > tr > th.info,
-.table > tfoot > tr > th.info,
-.table > thead > tr.info > td,
-.table > tbody > tr.info > td,
-.table > tfoot > tr.info > td,
-.table > thead > tr.info > th,
-.table > tbody > tr.info > th,
-.table > tfoot > tr.info > th {
- background-color: #d9edf7;
-}
-.table-hover > tbody > tr > td.info:hover,
-.table-hover > tbody > tr > th.info:hover,
-.table-hover > tbody > tr.info:hover > td,
-.table-hover > tbody > tr:hover > .info,
-.table-hover > tbody > tr.info:hover > th {
- background-color: #c4e3f3;
-}
-.table > thead > tr > td.warning,
-.table > tbody > tr > td.warning,
-.table > tfoot > tr > td.warning,
-.table > thead > tr > th.warning,
-.table > tbody > tr > th.warning,
-.table > tfoot > tr > th.warning,
-.table > thead > tr.warning > td,
-.table > tbody > tr.warning > td,
-.table > tfoot > tr.warning > td,
-.table > thead > tr.warning > th,
-.table > tbody > tr.warning > th,
-.table > tfoot > tr.warning > th {
- background-color: #fcf8e3;
-}
-.table-hover > tbody > tr > td.warning:hover,
-.table-hover > tbody > tr > th.warning:hover,
-.table-hover > tbody > tr.warning:hover > td,
-.table-hover > tbody > tr:hover > .warning,
-.table-hover > tbody > tr.warning:hover > th {
- background-color: #faf2cc;
-}
-.table > thead > tr > td.danger,
-.table > tbody > tr > td.danger,
-.table > tfoot > tr > td.danger,
-.table > thead > tr > th.danger,
-.table > tbody > tr > th.danger,
-.table > tfoot > tr > th.danger,
-.table > thead > tr.danger > td,
-.table > tbody > tr.danger > td,
-.table > tfoot > tr.danger > td,
-.table > thead > tr.danger > th,
-.table > tbody > tr.danger > th,
-.table > tfoot > tr.danger > th {
- background-color: #f2dede;
-}
-.table-hover > tbody > tr > td.danger:hover,
-.table-hover > tbody > tr > th.danger:hover,
-.table-hover > tbody > tr.danger:hover > td,
-.table-hover > tbody > tr:hover > .danger,
-.table-hover > tbody > tr.danger:hover > th {
- background-color: #ebcccc;
-}
-.table-responsive {
- min-height: .01%;
- overflow-x: auto;
-}
-@media screen and (max-width: 767px) {
- .table-responsive {
- width: 100%;
- margin-bottom: 15px;
- overflow-y: hidden;
- -ms-overflow-style: -ms-autohiding-scrollbar;
- border: 1px solid #ddd;
- }
- .table-responsive > .table {
- margin-bottom: 0;
- }
- .table-responsive > .table > thead > tr > th,
- .table-responsive > .table > tbody > tr > th,
- .table-responsive > .table > tfoot > tr > th,
- .table-responsive > .table > thead > tr > td,
- .table-responsive > .table > tbody > tr > td,
- .table-responsive > .table > tfoot > tr > td {
- white-space: nowrap;
- }
- .table-responsive > .table-bordered {
- border: 0;
- }
- .table-responsive > .table-bordered > thead > tr > th:first-child,
- .table-responsive > .table-bordered > tbody > tr > th:first-child,
- .table-responsive > .table-bordered > tfoot > tr > th:first-child,
- .table-responsive > .table-bordered > thead > tr > td:first-child,
- .table-responsive > .table-bordered > tbody > tr > td:first-child,
- .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0;
- }
- .table-responsive > .table-bordered > thead > tr > th:last-child,
- .table-responsive > .table-bordered > tbody > tr > th:last-child,
- .table-responsive > .table-bordered > tfoot > tr > th:last-child,
- .table-responsive > .table-bordered > thead > tr > td:last-child,
- .table-responsive > .table-bordered > tbody > tr > td:last-child,
- .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0;
- }
- .table-responsive > .table-bordered > tbody > tr:last-child > th,
- .table-responsive > .table-bordered > tfoot > tr:last-child > th,
- .table-responsive > .table-bordered > tbody > tr:last-child > td,
- .table-responsive > .table-bordered > tfoot > tr:last-child > td {
- border-bottom: 0;
- }
-}
-fieldset {
- min-width: 0;
- padding: 0;
- margin: 0;
- border: 0;
-}
-legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: 20px;
- font-size: 21px;
- line-height: inherit;
- color: #333;
- border: 0;
- border-bottom: 1px solid #e5e5e5;
-}
-label {
- display: inline-block;
- max-width: 100%;
- margin-bottom: 5px;
- font-weight: bold;
-}
-input[type="search"] {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-input[type="radio"],
-input[type="checkbox"] {
- margin: 4px 0 0;
- margin-top: 1px \9;
- line-height: normal;
-}
-input[type="file"] {
- display: block;
-}
-input[type="range"] {
- display: block;
- width: 100%;
-}
-select[multiple],
-select[size] {
- height: auto;
-}
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-output {
- display: block;
- padding-top: 7px;
- font-size: 14px;
- line-height: 1.42857143;
- color: #555;
-}
-.form-control {
- display: block;
- width: 100%;
- height: 34px;
- padding: 6px 12px;
- font-size: 14px;
- line-height: 1.42857143;
- color: #000;
- background-color: #fff;
- background-image: none;
- border: 1px solid #ccc;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
- -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-}
-.form-control:focus {
- border-color: #66afe9;
- outline: 0;
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
- box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
-}
-.form-control::-moz-placeholder {
- color: #999;
- opacity: 1;
-}
-.form-control:-ms-input-placeholder {
- color: #999;
-}
-.form-control::-webkit-input-placeholder {
- color: #999;
-}
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
- cursor: not-allowed;
- background-color: #eee;
- opacity: 1;
-}
-textarea.form-control {
- height: auto;
-}
-input[type="search"] {
- -webkit-appearance: none;
-}
-input[type="date"],
-input[type="time"],
-input[type="datetime-local"],
-input[type="month"] {
- line-height: 34px;
- line-height: 1.42857143 \0;
-}
-input[type="date"].input-sm,
-input[type="time"].input-sm,
-input[type="datetime-local"].input-sm,
-input[type="month"].input-sm {
- line-height: 30px;
- line-height: 1.5 \0;
-}
-input[type="date"].input-lg,
-input[type="time"].input-lg,
-input[type="datetime-local"].input-lg,
-input[type="month"].input-lg {
- line-height: 46px;
- line-height: 1.33 \0;
-}
-_:-ms-fullscreen,
-:root input[type="date"],
-_:-ms-fullscreen,
-:root input[type="time"],
-_:-ms-fullscreen,
-:root input[type="datetime-local"],
-_:-ms-fullscreen,
-:root input[type="month"] {
- line-height: 1.42857143;
-}
-_:-ms-fullscreen.input-sm,
-:root input[type="date"].input-sm,
-_:-ms-fullscreen.input-sm,
-:root input[type="time"].input-sm,
-_:-ms-fullscreen.input-sm,
-:root input[type="datetime-local"].input-sm,
-_:-ms-fullscreen.input-sm,
-:root input[type="month"].input-sm {
- line-height: 1.5;
-}
-_:-ms-fullscreen.input-lg,
-:root input[type="date"].input-lg,
-_:-ms-fullscreen.input-lg,
-:root input[type="time"].input-lg,
-_:-ms-fullscreen.input-lg,
-:root input[type="datetime-local"].input-lg,
-_:-ms-fullscreen.input-lg,
-:root input[type="month"].input-lg {
- line-height: 1.33;
-}
-.form-group {
- margin-bottom: 15px;
-}
-.radio,
-.checkbox {
- position: relative;
- display: block;
- margin-top: 10px;
- margin-bottom: 10px;
-}
-.radio label,
-.checkbox label {
- min-height: 20px;
- padding-left: 20px;
- margin-bottom: 0;
- font-weight: normal;
- cursor: pointer;
-}
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
- position: absolute;
- margin-top: 4px \9;
- margin-left: -20px;
-}
-.radio + .radio,
-.checkbox + .checkbox {
- margin-top: -5px;
-}
-.radio-inline,
-.checkbox-inline {
- display: inline-block;
- padding-left: 20px;
- margin-bottom: 0;
- font-weight: normal;
- vertical-align: middle;
- cursor: pointer;
-}
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
- margin-top: 0;
- margin-left: 10px;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"].disabled,
-input[type="checkbox"].disabled,
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"] {
- cursor: not-allowed;
-}
-.radio-inline.disabled,
-.checkbox-inline.disabled,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox-inline {
- cursor: not-allowed;
-}
-.radio.disabled label,
-.checkbox.disabled label,
-fieldset[disabled] .radio label,
-fieldset[disabled] .checkbox label {
- cursor: not-allowed;
-}
-.form-control-static {
- padding-top: 7px;
- padding-bottom: 7px;
- margin-bottom: 0;
-}
-.form-control-static.input-lg,
-.form-control-static.input-sm {
- padding-right: 0;
- padding-left: 0;
-}
-.input-sm,
-.form-group-sm .form-control {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-select.input-sm,
-select.form-group-sm .form-control {
- height: 30px;
- line-height: 30px;
-}
-textarea.input-sm,
-textarea.form-group-sm .form-control,
-select[multiple].input-sm,
-select[multiple].form-group-sm .form-control {
- height: auto;
-}
-.input-lg,
-.form-group-lg .form-control {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.33;
- border-radius: 6px;
-}
-select.input-lg,
-select.form-group-lg .form-control {
- height: 46px;
- line-height: 46px;
-}
-textarea.input-lg,
-textarea.form-group-lg .form-control,
-select[multiple].input-lg,
-select[multiple].form-group-lg .form-control {
- height: auto;
-}
-.has-feedback {
- position: relative;
-}
-.has-feedback .form-control {
- padding-right: 42.5px;
-}
-.form-control-feedback {
- position: absolute;
- top: 0;
- right: 0;
- z-index: 2;
- display: block;
- width: 34px;
- height: 34px;
- line-height: 34px;
- text-align: center;
- pointer-events: none;
-}
-.input-lg + .form-control-feedback {
- width: 46px;
- height: 46px;
- line-height: 46px;
-}
-.input-sm + .form-control-feedback {
- width: 30px;
- height: 30px;
- line-height: 30px;
-}
-.has-success .help-block,
-.has-success .control-label,
-.has-success .radio,
-.has-success .checkbox,
-.has-success .radio-inline,
-.has-success .checkbox-inline,
-.has-success.radio label,
-.has-success.checkbox label,
-.has-success.radio-inline label,
-.has-success.checkbox-inline label {
- color: #3c763d;
-}
-.has-success .form-control {
- border-color: #3c763d;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-success .form-control:focus {
- border-color: #2b542c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
-}
-.has-success .input-group-addon {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #3c763d;
-}
-.has-success .form-control-feedback {
- color: #3c763d;
-}
-.has-warning .help-block,
-.has-warning .control-label,
-.has-warning .radio,
-.has-warning .checkbox,
-.has-warning .radio-inline,
-.has-warning .checkbox-inline,
-.has-warning.radio label,
-.has-warning.checkbox label,
-.has-warning.radio-inline label,
-.has-warning.checkbox-inline label {
- color: #8a6d3b;
-}
-.has-warning .form-control {
- border-color: #8a6d3b;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-warning .form-control:focus {
- border-color: #66512c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
-}
-.has-warning .input-group-addon {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #8a6d3b;
-}
-.has-warning .form-control-feedback {
- color: #8a6d3b;
-}
-.has-error .help-block,
-.has-error .control-label,
-.has-error .radio,
-.has-error .checkbox,
-.has-error .radio-inline,
-.has-error .checkbox-inline,
-.has-error.radio label,
-.has-error.checkbox label,
-.has-error.radio-inline label,
-.has-error.checkbox-inline label {
- color: #a94442;
-}
-.has-error .form-control {
- border-color: #a94442;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-error .form-control:focus {
- border-color: #843534;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
-}
-.has-error .input-group-addon {
- color: #a94442;
- background-color: #f2dede;
- border-color: #a94442;
-}
-.has-error .form-control-feedback {
- color: #a94442;
-}
-.has-feedback label ~ .form-control-feedback {
- top: 25px;
-}
-.has-feedback label.sr-only ~ .form-control-feedback {
- top: 0;
-}
-.help-block {
- display: block;
- margin-top: 5px;
- margin-bottom: 10px;
- color: #737373;
-}
-@media (min-width: 768px) {
- .form-inline .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
- .form-inline .form-control-static {
- display: inline-block;
- }
- .form-inline .input-group {
- display: inline-table;
- vertical-align: middle;
- }
- .form-inline .input-group .input-group-addon,
- .form-inline .input-group .input-group-btn,
- .form-inline .input-group .form-control {
- width: auto;
- }
- .form-inline .input-group > .form-control {
- width: 100%;
- }
- .form-inline .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio,
- .form-inline .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio label,
- .form-inline .checkbox label {
- padding-left: 0;
- }
- .form-inline .radio input[type="radio"],
- .form-inline .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
- .form-inline .has-feedback .form-control-feedback {
- top: 0;
- }
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
- padding-top: 7px;
- margin-top: 0;
- margin-bottom: 0;
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox {
- min-height: 27px;
-}
-.form-horizontal .form-group {
- margin-right: -15px;
- margin-left: -15px;
-}
-
-.form-horizontal .control-label {
- padding-top: 7px;
- margin-bottom: 0;
- text-align: right;
-}
-
-.form-horizontal .has-feedback .form-control-feedback {
- right: 15px;
-}
-@media (min-width: 768px) {
- .form-horizontal .form-group-lg .control-label {
- padding-top: 14.3px;
- }
-}
-@media (min-width: 768px) {
- .form-horizontal .form-group-sm .control-label {
- padding-top: 6px;
- }
-}
-.btn {
- display: inline-block;
- padding: 6px 12px;
- margin-bottom: 0;
- font-size: 14px;
- font-weight: normal;
- line-height: 1.42857143;
- text-align: center;
- white-space: nowrap;
- vertical-align: middle;
- -ms-touch-action: manipulation;
- touch-action: manipulation;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- background-image: none;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.btn:focus,
-.btn:active:focus,
-.btn.active:focus,
-.btn.focus,
-.btn:active.focus,
-.btn.active.focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-.btn:hover,
-.btn:focus,
-.btn.focus {
- color: #333;
- text-decoration: none;
-}
-.btn:active,
-.btn.active {
- background-image: none;
- outline: 0;
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
- pointer-events: none;
- cursor: not-allowed;
- filter: alpha(opacity=65);
- -webkit-box-shadow: none;
- box-shadow: none;
- opacity: .65;
-}
-.btn-default {
- color: #333;
- background-color: #fff;
- border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus,
-.btn-default.focus,
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
-}
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
- background-image: none;
-}
-.btn-default.disabled,
-.btn-default[disabled],
-fieldset[disabled] .btn-default,
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled.focus,
-.btn-default[disabled].focus,
-fieldset[disabled] .btn-default.focus,
-.btn-default.disabled:active,
-.btn-default[disabled]:active,
-fieldset[disabled] .btn-default:active,
-.btn-default.disabled.active,
-.btn-default[disabled].active,
-fieldset[disabled] .btn-default.active {
- background-color: #fff;
- border-color: #ccc;
-}
-.btn-default .badge {
- color: #fff;
- background-color: #333;
-}
-.btn-primary {
- color: #fff;
- background-color: #369;
- border-color: #357ebd;
-}
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary.focus,
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
- color: #fff;
- background-color: #3071a9;
- border-color: #285e8e;
-}
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
- background-image: none;
-}
-.btn-primary.disabled,
-.btn-primary[disabled],
-fieldset[disabled] .btn-primary,
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled.focus,
-.btn-primary[disabled].focus,
-fieldset[disabled] .btn-primary.focus,
-.btn-primary.disabled:active,
-.btn-primary[disabled]:active,
-fieldset[disabled] .btn-primary:active,
-.btn-primary.disabled.active,
-.btn-primary[disabled].active,
-fieldset[disabled] .btn-primary.active {
- background-color: #428bca;
- border-color: #357ebd;
-}
-.btn-primary .badge {
- color: #428bca;
- background-color: #fff;
-}
-.btn-success {
- color: #fff;
- background-color: #5cb85c;
- border-color: #4cae4c;
-}
-.btn-success:hover,
-.btn-success:focus,
-.btn-success.focus,
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
- color: #fff;
- background-color: #449d44;
- border-color: #398439;
-}
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
- background-image: none;
-}
-.btn-success.disabled,
-.btn-success[disabled],
-fieldset[disabled] .btn-success,
-.btn-success.disabled:hover,
-.btn-success[disabled]:hover,
-fieldset[disabled] .btn-success:hover,
-.btn-success.disabled:focus,
-.btn-success[disabled]:focus,
-fieldset[disabled] .btn-success:focus,
-.btn-success.disabled.focus,
-.btn-success[disabled].focus,
-fieldset[disabled] .btn-success.focus,
-.btn-success.disabled:active,
-.btn-success[disabled]:active,
-fieldset[disabled] .btn-success:active,
-.btn-success.disabled.active,
-.btn-success[disabled].active,
-fieldset[disabled] .btn-success.active {
- background-color: #5cb85c;
- border-color: #4cae4c;
-}
-.btn-success .badge {
- color: #5cb85c;
- background-color: #fff;
-}
-.btn-info {
- color: #fff;
- background-color: #5bc0de;
- border-color: #46b8da;
-}
-.btn-info:hover,
-.btn-info:focus,
-.btn-info.focus,
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
- color: #fff;
- background-color: #31b0d5;
- border-color: #269abc;
-}
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
- background-image: none;
-}
-.btn-info.disabled,
-.btn-info[disabled],
-fieldset[disabled] .btn-info,
-.btn-info.disabled:hover,
-.btn-info[disabled]:hover,
-fieldset[disabled] .btn-info:hover,
-.btn-info.disabled:focus,
-.btn-info[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled.focus,
-.btn-info[disabled].focus,
-fieldset[disabled] .btn-info.focus,
-.btn-info.disabled:active,
-.btn-info[disabled]:active,
-fieldset[disabled] .btn-info:active,
-.btn-info.disabled.active,
-.btn-info[disabled].active,
-fieldset[disabled] .btn-info.active {
- background-color: #5bc0de;
- border-color: #46b8da;
-}
-.btn-info .badge {
- color: #5bc0de;
- background-color: #fff;
-}
-.btn-warning {
- color: #fff;
- background-color: #f0ad4e;
- border-color: #eea236;
-}
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning.focus,
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
- color: #fff;
- background-color: #ec971f;
- border-color: #d58512;
-}
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
- background-image: none;
-}
-.btn-warning.disabled,
-.btn-warning[disabled],
-fieldset[disabled] .btn-warning,
-.btn-warning.disabled:hover,
-.btn-warning[disabled]:hover,
-fieldset[disabled] .btn-warning:hover,
-.btn-warning.disabled:focus,
-.btn-warning[disabled]:focus,
-fieldset[disabled] .btn-warning:focus,
-.btn-warning.disabled.focus,
-.btn-warning[disabled].focus,
-fieldset[disabled] .btn-warning.focus,
-.btn-warning.disabled:active,
-.btn-warning[disabled]:active,
-fieldset[disabled] .btn-warning:active,
-.btn-warning.disabled.active,
-.btn-warning[disabled].active,
-fieldset[disabled] .btn-warning.active {
- background-color: #f0ad4e;
- border-color: #eea236;
-}
-.btn-warning .badge {
- color: #f0ad4e;
- background-color: #fff;
-}
-.btn-danger {
- color: #fff;
- background-color: #d9534f;
- border-color: #d43f3a;
-}
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger.focus,
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
- color: #fff;
- background-color: #c9302c;
- border-color: #ac2925;
-}
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
- background-image: none;
-}
-.btn-danger.disabled,
-.btn-danger[disabled],
-fieldset[disabled] .btn-danger,
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover,
-fieldset[disabled] .btn-danger:hover,
-.btn-danger.disabled:focus,
-.btn-danger[disabled]:focus,
-fieldset[disabled] .btn-danger:focus,
-.btn-danger.disabled.focus,
-.btn-danger[disabled].focus,
-fieldset[disabled] .btn-danger.focus,
-.btn-danger.disabled:active,
-.btn-danger[disabled]:active,
-fieldset[disabled] .btn-danger:active,
-.btn-danger.disabled.active,
-.btn-danger[disabled].active,
-fieldset[disabled] .btn-danger.active {
- background-color: #d9534f;
- border-color: #d43f3a;
-}
-.btn-danger .badge {
- color: #d9534f;
- background-color: #fff;
-}
-.btn-link {
- font-weight: normal;
- color: #428bca;
- border-radius: 0;
-}
-.btn-link,
-.btn-link:active,
-.btn-link.active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
- background-color: transparent;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
- border-color: transparent;
-}
-.btn-link:hover,
-.btn-link:focus {
- color: #2a6496;
- text-decoration: underline;
- background-color: transparent;
-}
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
- color: #777;
- text-decoration: none;
-}
-.btn-lg,
-.btn-group-lg > .btn {
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.33;
- border-radius: 6px;
-}
-.btn-sm,
-.btn-group-sm > .btn {
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-xs,
-.btn-group-xs > .btn {
- padding: 1px 5px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-block {
- display: block;
- width: 100%;
-}
-.btn-block + .btn-block {
- margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
- width: 100%;
-}
-.fade {
- opacity: 0;
- -webkit-transition: opacity .15s linear;
- -o-transition: opacity .15s linear;
- transition: opacity .15s linear;
-}
-.fade.in {
- opacity: 1;
-}
-.collapse {
- display: none;
- visibility: hidden;
-}
-.collapse.in {
- display: block;
- visibility: visible;
-}
-tr.collapse.in {
- display: table-row;
-}
-tbody.collapse.in {
- display: table-row-group;
-}
-.collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition-timing-function: ease;
- -o-transition-timing-function: ease;
- transition-timing-function: ease;
- -webkit-transition-duration: .35s;
- -o-transition-duration: .35s;
- transition-duration: .35s;
- -webkit-transition-property: height, visibility;
- -o-transition-property: height, visibility;
- transition-property: height, visibility;
-}
-.caret {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 2px;
- vertical-align: middle;
- border-top: 4px solid;
- border-right: 4px solid transparent;
- border-left: 4px solid transparent;
-}
-.dropdown {
- position: relative;
-}
-.dropdown-toggle:focus {
- outline: 0;
-}
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 160px;
- padding: 5px 0;
- margin: 2px 0 0;
- font-size: 14px;
- text-align: left;
- list-style: none;
- background-color: #fff;
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, .15);
- border-radius: 4px;
- -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
- box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
-}
-.dropdown-menu.pull-right {
- right: 0;
- left: auto;
-}
-.dropdown-menu .divider {
- height: 1px;
- margin: 9px 0;
- overflow: hidden;
- background-color: #e5e5e5;
-}
-.dropdown-menu > li > a {
- display: block;
- padding: 3px 20px;
- clear: both;
- font-weight: normal;
- line-height: 1.42857143;
- color: #333;
- white-space: nowrap;
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
- color: #262626;
- text-decoration: none;
- background-color: #f5f5f5;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
- color: #fff;
- text-decoration: none;
- background-color: #428bca;
- outline: 0;
-}
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- color: #777;
-}
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- text-decoration: none;
- cursor: not-allowed;
- background-color: transparent;
- background-image: none;
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.open > .dropdown-menu {
- display: block;
-}
-.open > a {
- outline: 0;
-}
-.dropdown-menu-right {
- right: 0;
- left: auto;
-}
-.dropdown-menu-left {
- right: auto;
- left: 0;
-}
-.dropdown-header {
- display: block;
- padding: 3px 20px;
- font-size: 12px;
- line-height: 1.42857143;
- color: #777;
- white-space: nowrap;
-}
-.dropdown-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 990;
-}
-.pull-right > .dropdown-menu {
- right: 0;
- left: auto;
-}
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
- content: "";
- border-top: 0;
- border-bottom: 4px solid;
-}
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-bottom: 1px;
-}
-@media (min-width: 768px) {
- .navbar-right .dropdown-menu {
- right: 0;
- left: auto;
- }
- .navbar-right .dropdown-menu-left {
- right: auto;
- left: 0;
- }
-}
-.btn-group,
-.btn-group-vertical {
- position: relative;
- display: inline-block;
- vertical-align: middle;
-}
-.btn-group > .btn,
-.btn-group-vertical > .btn {
- position: relative;
- float: left;
-}
-.btn-group > .btn:hover,
-.btn-group-vertical > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus,
-.btn-group > .btn:active,
-.btn-group-vertical > .btn:active,
-.btn-group > .btn.active,
-.btn-group-vertical > .btn.active {
- z-index: 2;
-}
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus {
- outline: 0;
-}
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group {
- margin-left: -1px;
-}
-.btn-toolbar {
- margin-left: -5px;
-}
-.btn-toolbar .btn-group,
-.btn-toolbar .input-group {
- float: left;
-}
-.btn-toolbar > .btn,
-.btn-toolbar > .btn-group,
-.btn-toolbar > .input-group {
- margin-left: 5px;
-}
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
- border-radius: 0;
-}
-.btn-group > .btn:first-child {
- margin-left: 0;
-}
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group > .btn-group {
- float: left;
-}
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
-}
-.btn-group > .btn-group:first-child > .btn:last-child,
-.btn-group > .btn-group:first-child > .dropdown-toggle {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-.btn-group > .btn-group:last-child > .btn:first-child {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
- outline: 0;
-}
-.btn-group > .btn + .dropdown-toggle {
- padding-right: 8px;
- padding-left: 8px;
-}
-.btn-group > .btn-lg + .dropdown-toggle {
- padding-right: 12px;
- padding-left: 12px;
-}
-.btn-group.open .dropdown-toggle {
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn-group.open .dropdown-toggle.btn-link {
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.btn .caret {
- margin-left: 0;
-}
-.btn-lg .caret {
- border-width: 5px 5px 0;
- border-bottom-width: 0;
-}
-.dropup .btn-lg .caret {
- border-width: 0 5px 5px;
-}
-.btn-group-vertical > .btn,
-.btn-group-vertical > .btn-group,
-.btn-group-vertical > .btn-group > .btn {
- display: block;
- float: none;
- width: 100%;
- max-width: 100%;
-}
-.btn-group-vertical > .btn-group > .btn {
- float: none;
-}
-.btn-group-vertical > .btn + .btn,
-.btn-group-vertical > .btn + .btn-group,
-.btn-group-vertical > .btn-group + .btn,
-.btn-group-vertical > .btn-group + .btn-group {
- margin-top: -1px;
- margin-left: 0;
-}
-.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
- border-radius: 0;
-}
-.btn-group-vertical > .btn:first-child:not(:last-child) {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn:last-child:not(:first-child) {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- border-bottom-left-radius: 4px;
-}
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
-}
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-.btn-group-justified {
- display: table;
- width: 100%;
- table-layout: fixed;
- border-collapse: separate;
-}
-.btn-group-justified > .btn,
-.btn-group-justified > .btn-group {
- display: table-cell;
- float: none;
- width: 1%;
-}
-.btn-group-justified > .btn-group .btn {
- width: 100%;
-}
-.btn-group-justified > .btn-group .dropdown-menu {
- left: auto;
-}
-[data-toggle="buttons"] > .btn input[type="radio"],
-[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
-[data-toggle="buttons"] > .btn input[type="checkbox"],
-[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
- position: absolute;
- clip: rect(0, 0, 0, 0);
- pointer-events: none;
-}
-.input-group {
- position: relative;
- display: table;
- border-collapse: separate;
-}
-.input-group[class*="col-"] {
- float: none;
- padding-right: 0;
- padding-left: 0;
-}
-.input-group .form-control {
- position: relative;
- z-index: 2;
- float: left;
- width: 100%;
- margin-bottom: 0;
-}
-.input-group-lg > .form-control,
-.input-group-lg > .input-group-addon,
-.input-group-lg > .input-group-btn > .btn {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.33;
- border-radius: 6px;
-}
-select.input-group-lg > .form-control,
-select.input-group-lg > .input-group-addon,
-select.input-group-lg > .input-group-btn > .btn {
- height: 46px;
- line-height: 46px;
-}
-textarea.input-group-lg > .form-control,
-textarea.input-group-lg > .input-group-addon,
-textarea.input-group-lg > .input-group-btn > .btn,
-select[multiple].input-group-lg > .form-control,
-select[multiple].input-group-lg > .input-group-addon,
-select[multiple].input-group-lg > .input-group-btn > .btn {
- height: auto;
-}
-.input-group-sm > .form-control,
-.input-group-sm > .input-group-addon,
-.input-group-sm > .input-group-btn > .btn {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-select.input-group-sm > .form-control,
-select.input-group-sm > .input-group-addon,
-select.input-group-sm > .input-group-btn > .btn {
- height: 30px;
- line-height: 30px;
-}
-textarea.input-group-sm > .form-control,
-textarea.input-group-sm > .input-group-addon,
-textarea.input-group-sm > .input-group-btn > .btn,
-select[multiple].input-group-sm > .form-control,
-select[multiple].input-group-sm > .input-group-addon,
-select[multiple].input-group-sm > .input-group-btn > .btn {
- height: auto;
-}
-.input-group-addon,
-.input-group-btn,
-.input-group .form-control {
- display: table-cell;
-}
-.input-group-addon:not(:first-child):not(:last-child),
-.input-group-btn:not(:first-child):not(:last-child),
-.input-group .form-control:not(:first-child):not(:last-child) {
- border-radius: 0;
-}
-.input-group-addon,
-.input-group-btn {
- width: 1%;
- white-space: nowrap;
- vertical-align: middle;
-}
-.input-group-addon {
- padding: 6px 12px;
- font-size: 14px;
- font-weight: normal;
- line-height: 1;
- color: #555;
- text-align: center;
- background-color: #eee;
- border: 1px solid #ccc;
- border-radius: 4px;
-}
-.input-group-addon.input-sm {
- padding: 5px 10px;
- font-size: 12px;
- border-radius: 3px;
-}
-.input-group-addon.input-lg {
- padding: 10px 16px;
- font-size: 18px;
- border-radius: 6px;
-}
-.input-group-addon input[type="radio"],
-.input-group-addon input[type="checkbox"] {
- margin-top: 0;
-}
-.input-group .form-control:first-child,
-.input-group-addon:first-child,
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group > .btn,
-.input-group-btn:first-child > .dropdown-toggle,
-.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
-.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-.input-group-addon:first-child {
- border-right: 0;
-}
-.input-group .form-control:last-child,
-.input-group-addon:last-child,
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group > .btn,
-.input-group-btn:last-child > .dropdown-toggle,
-.input-group-btn:first-child > .btn:not(:first-child),
-.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-.input-group-addon:last-child {
- border-left: 0;
-}
-.input-group-btn {
- position: relative;
- font-size: 0;
- white-space: nowrap;
-}
-.input-group-btn > .btn {
- position: relative;
-}
-.input-group-btn > .btn + .btn {
- margin-left: -1px;
-}
-.input-group-btn > .btn:hover,
-.input-group-btn > .btn:focus,
-.input-group-btn > .btn:active {
- z-index: 2;
-}
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group {
- margin-right: -1px;
-}
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group {
- margin-left: -1px;
-}
-.nav {
- padding-left: 0;
- margin-bottom: 0;
- list-style: none;
-}
-.nav > li {
- margin-right: 10px;
- position: relative;
- display: block;
-}
-.nav > li > a {
- position: relative;
- display: block;
- padding: 10px 15px;
-}
-.nav > li > a:hover,
-.nav > li > a:focus {
- text-decoration: none;
- background-color: #eee;
-}
-.nav > li.disabled > a {
- color: #777;
-}
-.nav > li.disabled > a:hover,
-.nav > li.disabled > a:focus {
- color: #777;
- text-decoration: none;
- cursor: not-allowed;
- background-color: transparent;
-}
-.nav .open > a,
-.nav .open > a:hover,
-.nav .open > a:focus {
- background-color: #eee;
- border-color: #428bca;
-}
-.nav .nav-divider {
- height: 1px;
- margin: 9px 0;
- overflow: hidden;
- background-color: #e5e5e5;
-}
-.nav > li > a > img {
- max-width: none;
-}
-.nav-tabs {
- border-bottom: 1px solid #ddd;
-}
-.nav-tabs > li {
- float: left;
- margin-bottom: -1px;
-}
-.nav-tabs > li > a {
- margin-right: 2px;
- line-height: 1.42857143;
- border: 1px solid transparent;
- border-radius: 4px 4px 0 0;
-}
-.nav-tabs > li > a:hover {
- border-color: #eee #eee #ddd;
-}
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a:focus {
- color: #555;
- cursor: default;
- background-color: #fff;
- border: 1px solid #ddd;
- border-bottom-color: transparent;
-}
-.nav-tabs.nav-justified {
- width: 100%;
- border-bottom: 0;
-}
-.nav-tabs.nav-justified > li {
- float: none;
-}
-.nav-tabs.nav-justified > li > a {
- margin-bottom: 5px;
- text-align: center;
-}
-.nav-tabs.nav-justified > .dropdown .dropdown-menu {
- top: auto;
- left: auto;
-}
-
- .nav-tabs.nav-justified > li {
- display: table-cell;
- width: 1%;
- }
- .nav-tabs.nav-justified > li > a {
- margin-bottom: 0;
- }
-
-.nav-tabs.nav-justified > li > a {
- margin-right: 0;
- border-radius: 4px;
-}
-.nav-tabs.nav-justified > .active > a,
-.nav-tabs.nav-justified > .active > a:hover,
-.nav-tabs.nav-justified > .active > a:focus {
- border: 1px solid #ddd;
-}
-
- .nav-tabs.nav-justified > li > a {
- border-bottom: 1px solid #ddd;
- border-radius: 4px 4px 0 0;
- }
- .nav-tabs.nav-justified > .active > a,
- .nav-tabs.nav-justified > .active > a:hover,
- .nav-tabs.nav-justified > .active > a:focus {
- border-bottom-color: #fff;
- }
-
-.nav-pills > li {
- float: left;
-}
-.nav-pills > li > a {
- border-radius: 4px;
-}
-.nav-pills > li + li {
- margin-left: 2px;
-}
-.nav-pills > li.active > a,
-.nav-pills > li.active > a:hover,
-.nav-pills > li.active > a:focus {
- color: #fff;
- background-color: #3071a9; /* Tab cell background color */
-}
-.nav-stacked > li {
- float: none;
-}
-.nav-stacked > li + li {
- margin-top: 2px;
- margin-left: 0;
-}
-.nav-justified {
- width: 100%;
-}
-.nav-justified > li {
- float: none;
-}
-.nav-justified > li > a {
- margin-bottom: 5px;
- text-align: center;
-}
-.nav-justified > .dropdown .dropdown-menu {
- top: auto;
- left: auto;
-}
-
- .nav-justified > li {
- display: table-cell;
- width: 1%;
- }
- .nav-justified > li > a {
- margin-bottom: 0;
- }
-
-.nav-tabs-justified {
- border-bottom: 0;
-}
-.nav-tabs-justified > li > a {
- margin-right: 0;
- border-radius: 4px;
-}
-.nav-tabs-justified > .active > a,
-.nav-tabs-justified > .active > a:hover,
-.nav-tabs-justified > .active > a:focus {
- border: 1px solid #ddd;
-}
-
- .nav-tabs-justified > li > a {
- border-bottom: 1px solid #ddd;
- border-radius: 4px 4px 0 0;
- }
- .nav-tabs-justified > .active > a,
- .nav-tabs-justified > .active > a:hover,
- .nav-tabs-justified > .active > a:focus {
- border-bottom-color: #fff;
- }
-
-.tab-content > .tab-pane {
- display: none;
- visibility: hidden;
-}
-.tab-content > .active {
- display: block;
- visibility: visible;
-}
-.nav-tabs .dropdown-menu {
- margin-top: -1px;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-.navbar {
- position: relative;
- min-height: 30px;
- border: 1px solid transparent;
-}
-/*
-@media (min-width: 768px) {
- .navbar {
- border-radius: 4px;
- }
-}
-@media (min-width: 768px) {
- .navbar-header {
- float: left;
- }
-}
-*/
-
-.navbar-collapse {
- padding-right: 15px;
- padding-left: 15px;
- overflow-x: visible;
- -webkit-overflow-scrolling: touch;
- border-top: 1px solid transparent;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
-}
-.navbar-collapse.in {
- overflow-y: auto;
-}
-
-/*
-@media (min-width: 768px) {
- .navbar-collapse {
- width: auto;
- border-top: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- .navbar-collapse.collapse {
- display: block !important;
- height: auto !important;
- padding-bottom: 0;
- overflow: visible !important;
- visibility: visible !important;
- }
- .navbar-collapse.in {
- overflow-y: visible;
- }
- .navbar-fixed-top .navbar-collapse,
- .navbar-static-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- padding-right: 0;
- padding-left: 0;
- }
-}
-*/
-
-.navbar-fixed-top .navbar-collapse,
-.navbar-fixed-bottom .navbar-collapse {
- max-height: 340px;
-}
-@media (max-device-width: 480px) and (orientation: landscape) {
- .navbar-fixed-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- max-height: 200px;
- }
-}
-.container > .navbar-header,
-.container-fluid > .navbar-header,
-.container > .navbar-collapse,
-.container-fluid > .navbar-collapse {
- margin-right: -15px;
- margin-left: -15px;
-}
-@media (min-width: 768px) {
- .container > .navbar-header,
- .container-fluid > .navbar-header,
- .container > .navbar-collapse,
- .container-fluid > .navbar-collapse {
- margin-right: 0;
- margin-left: 0;
- }
-}
-.navbar-static-top {
- z-index: 1000;
- border-width: 0 0 1px;
-}
-@media (min-width: 768px) {
- .navbar-static-top {
- border-radius: 0;
- }
-}
-.navbar-fixed-top,
-.navbar-fixed-bottom {
- position: fixed;
- right: 0;
- left: 0;
- z-index: 1030;
-}
-@media (min-width: 768px) {
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- border-radius: 0;
- }
-}
-.navbar-fixed-top {
- top: 0;
- border-width: 0 0 1px;
-}
-.navbar-fixed-bottom {
- bottom: 0;
- margin-bottom: 0;
- border-width: 1px 0 0;
-}
-.navbar-brand {
- float: left;
- height: 30px;
- padding: 6px 15px;
- font-size: 15px;
- line-height: 18px;
-}
-.navbar-brand:hover,
-.navbar-brand:focus {
- text-decoration: none;
-}
-.navbar-brand > img {
- display: block;
-}
-@media (min-width: 768px) {
- .navbar > .container .navbar-brand,
- .navbar > .container-fluid .navbar-brand {
- margin-left: -15px;
- }
-}
-.navbar-toggle {
- position: relative;
- float: right;
- padding: 9px 10px;
- margin-top: 8px;
- margin-right: 15px;
- margin-bottom: 8px;
- background-color: transparent;
- background-image: none;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.navbar-toggle:focus {
- outline: 0;
-}
-.navbar-toggle .icon-bar {
- display: block;
- width: 22px;
- height: 2px;
- border-radius: 1px;
-}
-.navbar-toggle .icon-bar + .icon-bar {
- margin-top: 4px;
-}
-@media (min-width: 768px) {
- .navbar-toggle {
- display: none;
- }
-}
-.navbar-nav {
- margin: 7.5px -15px;
-}
-.navbar-nav > li > a {
- padding-top: 10px;
- padding-bottom: 10px;
- line-height: 20px;
-}
-
-.navbar-nav>li, .navbar-nav {
-float: left !important;
-}
-
-.navbar-nav.navbar-right:last-child {
-margin-right: -15px !important;
-}
-
-.navbar-right {
-float: right!important;
-}
-
-/*
-@media (max-width: 767px) {
- .navbar-nav .open .dropdown-menu {
- position: static;
- float: none;
- width: auto;
- margin-top: 0;
- background-color: transparent;
- border: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- .navbar-nav .open .dropdown-menu > li > a,
- .navbar-nav .open .dropdown-menu .dropdown-header {
- padding: 5px 15px 5px 25px;
- }
- .navbar-nav .open .dropdown-menu > li > a {
- line-height: 20px;
- }
- .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-nav .open .dropdown-menu > li > a:focus {
- background-image: none;
- }
-}
-
- .navbar-nav {
- float: left;
- margin: 0;
- }
- .navbar-nav > li {
- float: left;
- }
- .navbar-nav > li > a {
- padding-top: 15px;
- padding-bottom: 15px;
- }
-
-.navbar-form {
- padding: 10px 15px;
- margin-top: 8px;
- margin-right: -15px;
- margin-bottom: 8px;
- margin-left: -15px;
- border-top: 1px solid transparent;
- border-bottom: 1px solid transparent;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
-}
-@media (min-width: 768px) {
- .navbar-form .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
- .navbar-form .form-control-static {
- display: inline-block;
- }
- .navbar-form .input-group {
- display: inline-table;
- vertical-align: middle;
- }
- .navbar-form .input-group .input-group-addon,
- .navbar-form .input-group .input-group-btn,
- .navbar-form .input-group .form-control {
- width: auto;
- }
- .navbar-form .input-group > .form-control {
- width: 100%;
- }
- .navbar-form .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .radio,
- .navbar-form .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .radio label,
- .navbar-form .checkbox label {
- padding-left: 0;
- }
- .navbar-form .radio input[type="radio"],
- .navbar-form .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
- .navbar-form .has-feedback .form-control-feedback {
- top: 0;
- }
-}
-@media (max-width: 767px) {
- .navbar-form .form-group {
- margin-bottom: 5px;
- }
- .navbar-form .form-group:last-child {
- margin-bottom: 0;
- }
-}
-@media (min-width: 768px) {
- .navbar-form {
- width: auto;
- padding-top: 0;
- padding-bottom: 0;
- margin-right: 0;
- margin-left: 0;
- border: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
-}
-*/
-
-.navbar-nav > li > .dropdown-menu {
- margin-top: 0;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.navbar-btn {
- margin-top: 8px;
- margin-bottom: 8px;
-}
-.navbar-btn.btn-sm {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-.navbar-btn.btn-xs {
- margin-top: 14px;
- margin-bottom: 14px;
-}
-.navbar-text {
- margin-top: 15px;
- margin-bottom: 15px;
-}
-
-.navbar-text {
- float: left;
- margin-right: 15px;
- margin-left: 15px;
-}
-
-
-.navbar-left {
- float: left !important;
-}
-.navbar-right {
- float: right !important;
- margin-right: -15px;
-}
-.navbar-right ~ .navbar-right {
- margin-right: 0;
-}
-
-.navbar-default {
- background-color: #f8f8f8;
- border-color: #e7e7e7;
-}
-.navbar-default .navbar-brand {
- color: #777;
-}
-.navbar-default .navbar-brand:hover,
-.navbar-default .navbar-brand:focus {
- color: #5e5e5e;
- background-color: transparent;
-}
-.navbar-default .navbar-text {
- color: #777;
-}
-.navbar-default .navbar-nav > li > a {
- color: #777;
-}
-.navbar-default .navbar-nav > li > a:hover,
-.navbar-default .navbar-nav > li > a:focus {
- color: #333;
- background-color: transparent;
-}
-.navbar-default .navbar-nav > .active > a,
-.navbar-default .navbar-nav > .active > a:hover,
-.navbar-default .navbar-nav > .active > a:focus {
- color: #555;
- background-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .disabled > a,
-.navbar-default .navbar-nav > .disabled > a:hover,
-.navbar-default .navbar-nav > .disabled > a:focus {
- color: #ccc;
- background-color: transparent;
-}
-.navbar-default .navbar-toggle {
- border-color: #ddd;
-}
-.navbar-default .navbar-toggle:hover,
-.navbar-default .navbar-toggle:focus {
- background-color: #ddd;
-}
-.navbar-default .navbar-toggle .icon-bar {
- background-color: #888;
-}
-.navbar-default .navbar-collapse,
-.navbar-default .navbar-form {
- border-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:hover,
-.navbar-default .navbar-nav > .open > a:focus {
- color: #555;
- background-color: #e7e7e7;
-}
-@media (max-width: 767px) {
- .navbar-default .navbar-nav .open .dropdown-menu > li > a {
- color: #777;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #333;
- background-color: transparent;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #555;
- background-color: #e7e7e7;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #ccc;
- background-color: transparent;
- }
-}
-.navbar-default .navbar-link {
- color: #777;
-}
-.navbar-default .navbar-link:hover {
- color: #333;
-}
-.navbar-default .btn-link {
- color: #777;
-}
-.navbar-default .btn-link:hover,
-.navbar-default .btn-link:focus {
- color: #333;
-}
-.navbar-default .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-default .btn-link:hover,
-.navbar-default .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-default .btn-link:focus {
- color: #ccc;
-}
-.navbar-inverse {
- background-color: #336699;
- border-color: #080808;
-}
-.navbar-inverse .navbar-brand {
- color: #ffffff;
-}
-.navbar-inverse .navbar-brand:hover,
-.navbar-inverse .navbar-brand:focus {
- color: #ffffff;
- background-color: transparent;
-}
-.navbar-inverse .navbar-text {
- color: #ffffff;
-}
-.navbar-inverse .navbar-nav > li > a {
- color: #ffffff;
-}
-.navbar-inverse .navbar-nav > li > a:hover,
-.navbar-inverse .navbar-nav > li > a:focus {
- color: #ffffff;
- background-color: transparent;
-}
-.navbar-inverse .navbar-nav > .active > a,
-.navbar-inverse .navbar-nav > .active > a:hover,
-.navbar-inverse .navbar-nav > .active > a:focus {
- color: #fff;
- background-color: #080808;
-}
-.navbar-inverse .navbar-nav > .disabled > a,
-.navbar-inverse .navbar-nav > .disabled > a:hover,
-.navbar-inverse .navbar-nav > .disabled > a:focus {
- color: #444;
- background-color: transparent;
-}
-.navbar-inverse .navbar-toggle {
- border-color: #333;
-}
-.navbar-inverse .navbar-toggle:hover,
-.navbar-inverse .navbar-toggle:focus {
- background-color: #333;
-}
-.navbar-inverse .navbar-toggle .icon-bar {
- background-color: #fff;
-}
-.navbar-inverse .navbar-collapse,
-.navbar-inverse .navbar-form {
- border-color: #101010;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .open > a:hover,
-.navbar-inverse .navbar-nav > .open > a:focus {
- color: #fff;
- background-color: #080808;
-}
-@media (max-width: 767px) {
- .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
- border-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
- color: #9d9d9d;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #fff;
- background-color: transparent;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #fff;
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #444;
- background-color: transparent;
- }
-}
-.navbar-inverse .navbar-link {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-link:hover {
- color: #fff;
-}
-.navbar-inverse .btn-link {
- color: #9d9d9d;
-}
-.navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link:focus {
- color: #fff;
-}
-.navbar-inverse .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-inverse .btn-link:focus {
- color: #444;
-}
-.breadcrumb {
- padding: 8px 15px;
- margin-bottom: 20px;
- list-style: none;
- background-color: #f5f5f5;
- border-radius: 4px;
-}
-.breadcrumb > li {
- display: inline-block;
-}
-.breadcrumb > li + li:before {
- padding: 0 5px;
- color: #ccc;
- content: "/\00a0";
-}
-.breadcrumb > .active {
- color: #777;
-}
-.pagination {
- display: inline-block;
- padding-left: 0;
- margin: 20px 0;
- border-radius: 4px;
-}
-.pagination > li {
- display: inline;
-}
-.pagination > li > a,
-.pagination > li > span {
- position: relative;
- float: left;
- padding: 6px 12px;
- margin-left: -1px;
- line-height: 1.42857143;
- color: #428bca;
- text-decoration: none;
- background-color: #fff;
- border: 1px solid #ddd;
-}
-.pagination > li:first-child > a,
-.pagination > li:first-child > span {
- margin-left: 0;
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px;
-}
-.pagination > li:last-child > a,
-.pagination > li:last-child > span {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
-}
-.pagination > li > a:hover,
-.pagination > li > span:hover,
-.pagination > li > a:focus,
-.pagination > li > span:focus {
- color: #2a6496;
- background-color: #eee;
- border-color: #ddd;
-}
-.pagination > .active > a,
-.pagination > .active > span,
-.pagination > .active > a:hover,
-.pagination > .active > span:hover,
-.pagination > .active > a:focus,
-.pagination > .active > span:focus {
- z-index: 2;
- color: #fff;
- cursor: default;
- background-color: #3071a9;
- border-color: #428bca;
-}
-.pagination > .disabled > span,
-.pagination > .disabled > span:hover,
-.pagination > .disabled > span:focus,
-.pagination > .disabled > a,
-.pagination > .disabled > a:hover,
-.pagination > .disabled > a:focus {
- color: #777;
- cursor: not-allowed;
- background-color: #fff;
- border-color: #ddd;
-}
-.pagination-lg > li > a,
-.pagination-lg > li > span {
- padding: 10px 16px;
- font-size: 18px;
-}
-.pagination-lg > li:first-child > a,
-.pagination-lg > li:first-child > span {
- border-top-left-radius: 6px;
- border-bottom-left-radius: 6px;
-}
-.pagination-lg > li:last-child > a,
-.pagination-lg > li:last-child > span {
- border-top-right-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-.pagination-sm > li > a,
-.pagination-sm > li > span {
- padding: 5px 10px;
- font-size: 12px;
-}
-.pagination-sm > li:first-child > a,
-.pagination-sm > li:first-child > span {
- border-top-left-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.pagination-sm > li:last-child > a,
-.pagination-sm > li:last-child > span {
- border-top-right-radius: 3px;
- border-bottom-right-radius: 3px;
-}
-.pager {
- padding-left: 0;
- margin: 20px 0;
- text-align: center;
- list-style: none;
-}
-.pager li {
- display: inline;
-}
-.pager li > a,
-.pager li > span {
- display: inline-block;
- padding: 5px 14px;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 15px;
-}
-.pager li > a:hover,
-.pager li > a:focus {
- text-decoration: none;
- background-color: #eee;
-}
-.pager .next > a,
-.pager .next > span {
- float: right;
-}
-.pager .previous > a,
-.pager .previous > span {
- float: left;
-}
-.pager .disabled > a,
-.pager .disabled > a:hover,
-.pager .disabled > a:focus,
-.pager .disabled > span {
- color: #777;
- cursor: not-allowed;
- background-color: #fff;
-}
-.label {
- display: inline;
- padding: .2em .6em .3em;
- font-size: 75%;
- font-weight: bold;
- line-height: 1;
- color: #fff;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: .25em;
-}
-a.label:hover,
-a.label:focus {
- color: #fff;
- text-decoration: none;
- cursor: pointer;
-}
-.label:empty {
- display: none;
-}
-.btn .label {
- position: relative;
- top: -1px;
-}
-.label-default {
- background-color: #777;
-}
-.label-default[href]:hover,
-.label-default[href]:focus {
- background-color: #5e5e5e;
-}
-.label-primary {
- background-color: #428bca;
-}
-.label-primary[href]:hover,
-.label-primary[href]:focus {
- background-color: #3071a9;
-}
-.label-success {
- background-color: #5cb85c;
-}
-.label-success[href]:hover,
-.label-success[href]:focus {
- background-color: #449d44;
-}
-.label-info {
- background-color: #5bc0de;
-}
-.label-info[href]:hover,
-.label-info[href]:focus {
- background-color: #31b0d5;
-}
-.label-warning {
- background-color: #f0ad4e;
-}
-.label-warning[href]:hover,
-.label-warning[href]:focus {
- background-color: #ec971f;
-}
-.label-danger {
- background-color: #d9534f;
-}
-.label-danger[href]:hover,
-.label-danger[href]:focus {
- background-color: #c9302c;
-}
-.badge {
- display: inline-block;
- min-width: 10px;
- padding: 3px 7px;
- font-size: 12px;
- font-weight: bold;
- line-height: 1;
- color: #fff;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- background-color: #777;
- border-radius: 10px;
-}
-.badge:empty {
- display: none;
-}
-.btn .badge {
- position: relative;
- top: -1px;
-}
-.btn-xs .badge {
- top: 0;
- padding: 1px 5px;
-}
-a.badge:hover,
-a.badge:focus {
- color: #fff;
- text-decoration: none;
- cursor: pointer;
-}
-a.list-group-item.active > .badge,
-.nav-pills > .active > a > .badge {
- color: #3071a9;
- background-color: #fff;
-}
-.nav-pills > li > a > .badge {
- margin-left: 3px;
-}
-.jumbotron {
- margin-bottom: 10px;
- color: inherit;
- background-color: #eee;
-}
-.jumbotron h1,
-.jumbotron .h1 {
- color: inherit;
-}
-.jumbotron p {
- margin-bottom: 15px;
- font-size: 21px;
- font-weight: 200;
-}
-.jumbotron > hr {
- border-top-color: #d5d5d5;
-}
-.container .jumbotron,
-.container-fluid .jumbotron {
- border-radius: 6px;
-}
-.jumbotron .container {
- max-width: 100%;
-}
-
-/*@media screen and (min-width: 768px) {
- .jumbotron {
- padding: 48px 0;
- }
- .container .jumbotron {
- padding-right: 60px;
- padding-left: 60px;
- }
- .jumbotron h1,
- .jumbotron .h1 {
- font-size: 63px;
- }
-}*/
-
-.thumbnail {
- display: block;
- padding: 4px;
- margin-bottom: 20px;
- line-height: 1.42857143;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 4px;
- -webkit-transition: border .2s ease-in-out;
- -o-transition: border .2s ease-in-out;
- transition: border .2s ease-in-out;
-}
-.thumbnail > img,
-.thumbnail a > img {
- margin-right: auto;
- margin-left: auto;
-}
-a.thumbnail:hover,
-a.thumbnail:focus,
-a.thumbnail.active {
- border-color: #428bca;
-}
-.thumbnail .caption {
- padding: 9px;
- color: #333;
-}
-.alert {
- padding: 10px;
- margin-bottom: 5px;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.alert h4 {
- margin-top: 0;
- color: inherit;
-}
-.alert .alert-link {
- font-weight: bold;
-}
-.alert > p,
-.alert > ul {
- margin-bottom: 0;
-}
-.alert > p + p {
- margin-top: 5px;
-}
-.alert-dismissable,
-.alert-dismissible {
- padding-right: 35px;
-}
-.alert-dismissable .close,
-.alert-dismissible .close {
- position: relative;
- top: -2px;
- right: -21px;
- color: inherit;
-}
-.alert-success {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #d6e9c6;
-}
-.alert-success hr {
- border-top-color: #c9e2b3;
-}
-.alert-success .alert-link {
- color: #2b542c;
-}
-.alert-info {
- color: #31708f;
- background-color: #d9edf7;
- border-color: #bce8f1;
-}
-.alert-info hr {
- border-top-color: #a6e1ec;
-}
-.alert-info .alert-link {
- color: #245269;
-}
-.alert-warning {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #faebcc;
-}
-.alert-warning hr {
- border-top-color: #f7e1b5;
-}
-.alert-warning .alert-link {
- color: #66512c;
-}
-.alert-danger {
- color: #a94442;
- background-color: #f2dede;
- border-color: #ebccd1;
-}
-.alert-danger hr {
- border-top-color: #e4b9c0;
-}
-.alert-danger .alert-link {
- color: #843534;
-}
-@-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-@-o-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-@keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-.progress {
- height: 20px;
- margin-bottom: 20px;
- overflow: hidden;
- background-color: #f5f5f5;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
-}
-.progress-bar {
- float: left;
- width: 0;
- height: 100%;
- font-size: 12px;
- line-height: 20px;
- color: #fff;
- text-align: center;
- background-color: #428bca;
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
- -webkit-transition: width .6s ease;
- -o-transition: width .6s ease;
- transition: width .6s ease;
-}
-.progress-striped .progress-bar,
-.progress-bar-striped {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- -webkit-background-size: 40px 40px;
- background-size: 40px 40px;
-}
-.progress.active .progress-bar,
-.progress-bar.active {
- -webkit-animation: progress-bar-stripes 2s linear infinite;
- -o-animation: progress-bar-stripes 2s linear infinite;
- animation: progress-bar-stripes 2s linear infinite;
-}
-.progress-bar-success {
- background-color: #5cb85c;
-}
-.progress-striped .progress-bar-success {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-info {
- background-color: #5bc0de;
-}
-.progress-striped .progress-bar-info {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-warning {
- background-color: #f0ad4e;
-}
-.progress-striped .progress-bar-warning {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-danger {
- background-color: #d9534f;
-}
-.progress-striped .progress-bar-danger {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.media {
- margin-top: 15px;
-}
-.media:first-child {
- margin-top: 0;
-}
-.media-right,
-.media > .pull-right {
- padding-left: 10px;
-}
-.media-left,
-.media > .pull-left {
- padding-right: 10px;
-}
-.media-left,
-.media-right,
-.media-body {
- display: table-cell;
- vertical-align: top;
-}
-.media-middle {
- vertical-align: middle;
-}
-.media-bottom {
- vertical-align: bottom;
-}
-.media-heading {
- margin-top: 0;
- margin-bottom: 5px;
-}
-.media-list {
- padding-left: 0;
- list-style: none;
-}
-.list-group {
- padding-left: 0;
- margin-bottom: 20px;
-}
-.list-group-item {
- position: relative;
- display: block;
- padding: 10px 15px;
- margin-bottom: -1px;
- background-color: #fff;
- border: 1px solid #ddd;
-}
-.list-group-item:first-child {
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
-}
-.list-group-item:last-child {
- margin-bottom: 0;
- border-bottom-right-radius: 4px;
- border-bottom-left-radius: 4px;
-}
-.list-group-item > .badge {
- float: right;
-}
-.list-group-item > .badge + .badge {
- margin-right: 5px;
-}
-a.list-group-item {
- color: #555;
-}
-a.list-group-item .list-group-item-heading {
- color: #333;
-}
-a.list-group-item:hover,
-a.list-group-item:focus {
- color: #555;
- text-decoration: none;
- background-color: #f5f5f5;
-}
-.list-group-item.disabled,
-.list-group-item.disabled:hover,
-.list-group-item.disabled:focus {
- color: #777;
- cursor: not-allowed;
- background-color: #eee;
-}
-.list-group-item.disabled .list-group-item-heading,
-.list-group-item.disabled:hover .list-group-item-heading,
-.list-group-item.disabled:focus .list-group-item-heading {
- color: inherit;
-}
-.list-group-item.disabled .list-group-item-text,
-.list-group-item.disabled:hover .list-group-item-text,
-.list-group-item.disabled:focus .list-group-item-text {
- color: #777;
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
- z-index: 2;
- color: #fff;
- background-color: #428bca;
- border-color: #428bca;
-}
-.list-group-item.active .list-group-item-heading,
-.list-group-item.active:hover .list-group-item-heading,
-.list-group-item.active:focus .list-group-item-heading,
-.list-group-item.active .list-group-item-heading > small,
-.list-group-item.active:hover .list-group-item-heading > small,
-.list-group-item.active:focus .list-group-item-heading > small,
-.list-group-item.active .list-group-item-heading > .small,
-.list-group-item.active:hover .list-group-item-heading > .small,
-.list-group-item.active:focus .list-group-item-heading > .small {
- color: inherit;
-}
-.list-group-item.active .list-group-item-text,
-.list-group-item.active:hover .list-group-item-text,
-.list-group-item.active:focus .list-group-item-text {
- color: #e1edf7;
-}
-.list-group-item-success {
- color: #3c763d;
- background-color: #dff0d8;
-}
-a.list-group-item-success {
- color: #3c763d;
-}
-a.list-group-item-success .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-success:hover,
-a.list-group-item-success:focus {
- color: #3c763d;
- background-color: #d0e9c6;
-}
-a.list-group-item-success.active,
-a.list-group-item-success.active:hover,
-a.list-group-item-success.active:focus {
- color: #fff;
- background-color: #3c763d;
- border-color: #3c763d;
-}
-.list-group-item-info {
- color: #31708f;
- background-color: #d9edf7;
-}
-a.list-group-item-info {
- color: #31708f;
-}
-a.list-group-item-info .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-info:hover,
-a.list-group-item-info:focus {
- color: #31708f;
- background-color: #c4e3f3;
-}
-a.list-group-item-info.active,
-a.list-group-item-info.active:hover,
-a.list-group-item-info.active:focus {
- color: #fff;
- background-color: #31708f;
- border-color: #31708f;
-}
-.list-group-item-warning {
- color: #8a6d3b;
- background-color: #fcf8e3;
-}
-a.list-group-item-warning {
- color: #8a6d3b;
-}
-a.list-group-item-warning .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-warning:hover,
-a.list-group-item-warning:focus {
- color: #8a6d3b;
- background-color: #faf2cc;
-}
-a.list-group-item-warning.active,
-a.list-group-item-warning.active:hover,
-a.list-group-item-warning.active:focus {
- color: #fff;
- background-color: #8a6d3b;
- border-color: #8a6d3b;
-}
-.list-group-item-danger {
- color: #a94442;
- background-color: #f2dede;
-}
-a.list-group-item-danger {
- color: #a94442;
-}
-a.list-group-item-danger .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-danger:hover,
-a.list-group-item-danger:focus {
- color: #a94442;
- background-color: #ebcccc;
-}
-a.list-group-item-danger.active,
-a.list-group-item-danger.active:hover,
-a.list-group-item-danger.active:focus {
- color: #fff;
- background-color: #a94442;
- border-color: #a94442;
-}
-.list-group-item-heading {
- margin-top: 0;
- margin-bottom: 5px;
-}
-.list-group-item-text {
- margin-bottom: 0;
- line-height: 1.3;
-}
-.panel {
- margin-bottom: 20px;
- background-color: #fff;
- border: 1px solid transparent;
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
- box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-}
-.panel-body {
- padding: 15px;
-}
-.panel-heading {
- padding: 10px 15px;
- border-bottom: 1px solid transparent;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
- cursor: pointer;
-}
-.panel-heading > .dropdown .dropdown-toggle {
- color: inherit;
-}
-.panel-title {
- margin-top: 0;
- margin-bottom: 0;
- font-size: 16px;
- color: inherit;
-}
-.panel-title > a {
- color: inherit;
-}
-.panel-footer {
- padding: 10px 15px;
- background-color: #f5f5f5;
- border-top: 1px solid #ddd;
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .list-group,
-.panel > .panel-collapse > .list-group {
- margin-bottom: 0;
-}
-.panel > .list-group .list-group-item,
-.panel > .panel-collapse > .list-group .list-group-item {
- border-width: 1px 0;
- border-radius: 0;
-}
-.panel > .list-group:first-child .list-group-item:first-child,
-.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
- border-top: 0;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel > .list-group:last-child .list-group-item:last-child,
-.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
- border-bottom: 0;
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel-heading + .list-group .list-group-item:first-child {
- border-top-width: 0;
-}
-.list-group + .panel-footer {
- border-top-width: 0;
-}
-.panel > .table,
-.panel > .table-responsive > .table,
-.panel > .panel-collapse > .table {
- margin-bottom: 0;
-}
-.panel > .table caption,
-.panel > .table-responsive > .table caption,
-.panel > .panel-collapse > .table caption {
- padding-right: 15px;
- padding-left: 15px;
-}
-.panel > .table:first-child,
-.panel > .table-responsive:first-child > .table:first-child {
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
- border-top-left-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
- border-top-right-radius: 3px;
-}
-.panel > .table:last-child,
-.panel > .table-responsive:last-child > .table:last-child {
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
- border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
- border-bottom-right-radius: 3px;
-}
-.panel > .panel-body + .table,
-.panel > .panel-body + .table-responsive,
-.panel > .table + .panel-body,
-.panel > .table-responsive + .panel-body {
- border-top: 1px solid #ddd;
-}
-.panel > .table > tbody:first-child > tr:first-child th,
-.panel > .table > tbody:first-child > tr:first-child td {
- border-top: 0;
-}
-.panel > .table-bordered,
-.panel > .table-responsive > .table-bordered {
- border: 0;
-}
-.panel > .table-bordered > thead > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
-.panel > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-bordered > thead > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
-.panel > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-bordered > tfoot > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0;
-}
-.panel > .table-bordered > thead > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
-.panel > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-bordered > thead > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
-.panel > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-bordered > tfoot > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0;
-}
-.panel > .table-bordered > thead > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
-.panel > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-bordered > thead > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
-.panel > .table-bordered > tbody > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
- border-bottom: 0;
-}
-.panel > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-bordered > tfoot > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
- border-bottom: 0;
-}
-.panel > .table-responsive {
- margin-bottom: 0;
- border: 0;
-}
-.panel-group {
- margin-bottom: 20px;
-}
-.panel-group .panel {
- margin-bottom: 0;
- border-radius: 4px;
-}
-.panel-group .panel + .panel {
- margin-top: 5px;
-}
-.panel-group .panel-heading {
- border-bottom: 0;
-}
-.panel-group .panel-heading + .panel-collapse > .panel-body,
-.panel-group .panel-heading + .panel-collapse > .list-group {
- border-top: 1px solid #ddd;
-}
-.panel-group .panel-footer {
- border-top: 0;
-}
-.panel-group .panel-footer + .panel-collapse .panel-body {
- border-bottom: 1px solid #ddd;
-}
-.panel-default {
- border-color: #ddd;
-}
-.panel-default > .panel-heading {
- color: #333;
- background-color: #f5f5f5;
- border-color: #ddd;
-}
-.panel-default > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #ddd;
-}
-.panel-default > .panel-heading .badge {
- color: #f5f5f5;
- background-color: #333;
-}
-.panel-default > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #ddd;
-}
-.panel-primary {
- border-color: #428bca;
-}
-.panel-primary > .panel-heading {
- color: #fff;
- background-color: #428bca;
- border-color: #428bca;
-}
-.panel-primary > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #428bca;
-}
-.panel-primary > .panel-heading .badge {
- color: #428bca;
- background-color: #fff;
-}
-.panel-primary > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #428bca;
-}
-.panel-success {
- border-color: #d6e9c6;
-}
-.panel-success > .panel-heading {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #d6e9c6;
-}
-.panel-success > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #d6e9c6;
-}
-.panel-success > .panel-heading .badge {
- color: #dff0d8;
- background-color: #3c763d;
-}
-.panel-success > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #d6e9c6;
-}
-.panel-info {
- border-color: #bce8f1;
-}
-.panel-info > .panel-heading {
- color: #31708f;
- background-color: #d9edf7;
- border-color: #bce8f1;
-}
-.panel-info > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #bce8f1;
-}
-.panel-info > .panel-heading .badge {
- color: #d9edf7;
- background-color: #31708f;
-}
-.panel-info > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #bce8f1;
-}
-.panel-warning {
- border-color: #faebcc;
-}
-.panel-warning > .panel-heading {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #faebcc;
-}
-.panel-warning > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #faebcc;
-}
-.panel-warning > .panel-heading .badge {
- color: #fcf8e3;
- background-color: #8a6d3b;
-}
-.panel-warning > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #faebcc;
-}
-.panel-danger {
- border-color: #ebccd1;
-}
-.panel-danger > .panel-heading {
- color: #a94442;
- background-color: #f2dede;
- border-color: #ebccd1;
-}
-.panel-danger > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #ebccd1;
-}
-.panel-danger > .panel-heading .badge {
- color: #f2dede;
- background-color: #a94442;
-}
-.panel-danger > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #ebccd1;
-}
-.embed-responsive {
- position: relative;
- display: block;
- height: 0;
- padding: 0;
- overflow: hidden;
-}
-.embed-responsive .embed-responsive-item,
-.embed-responsive iframe,
-.embed-responsive embed,
-.embed-responsive object,
-.embed-responsive video {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 100%;
- border: 0;
-}
-.embed-responsive.embed-responsive-16by9 {
- padding-bottom: 56.25%;
-}
-.embed-responsive.embed-responsive-4by3 {
- padding-bottom: 75%;
-}
-.well {
- min-height: 20px;
- padding: 19px;
- margin-bottom: 20px;
- background-color: #f5f5f5;
- border: 1px solid #e3e3e3;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
-}
-.well blockquote {
- border-color: #ddd;
- border-color: rgba(0, 0, 0, .15);
-}
-.well-lg {
- padding: 24px;
- border-radius: 6px;
-}
-.well-sm {
- padding: 9px;
- border-radius: 3px;
-}
-.close {
- float: right;
- font-size: 21px;
- font-weight: bold;
- line-height: 1;
- color: #000;
- text-shadow: 0 1px 0 #fff;
- filter: alpha(opacity=20);
- opacity: .2;
-}
-.close:hover,
-.close:focus {
- color: #000;
- text-decoration: none;
- cursor: pointer;
- filter: alpha(opacity=50);
- opacity: .5;
-}
-button.close {
- -webkit-appearance: none;
- padding: 0;
- cursor: pointer;
- background: transparent;
- border: 0;
-}
-.modal-open {
- overflow: hidden;
-}
-.modal {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- display: none;
- overflow: hidden;
- -webkit-overflow-scrolling: touch;
- outline: 0;
-}
-.modal.fade .modal-dialog {
- -webkit-transition: -webkit-transform .3s ease-out;
- -o-transition: -o-transform .3s ease-out;
- transition: transform .3s ease-out;
- -webkit-transform: translate(0, -25%);
- -ms-transform: translate(0, -25%);
- -o-transform: translate(0, -25%);
- transform: translate(0, -25%);
-}
-.modal.in .modal-dialog {
- -webkit-transform: translate(0, 0);
- -ms-transform: translate(0, 0);
- -o-transform: translate(0, 0);
- transform: translate(0, 0);
-}
-.modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto;
-}
-.modal-dialog {
- position: relative;
- width: auto;
- margin: 10px;
-}
-.modal-content {
- position: relative;
- background-color: #fff;
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- border: 1px solid #999;
- border: 1px solid rgba(0, 0, 0, .2);
- border-radius: 6px;
- outline: 0;
- -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
- box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
-}
-.modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- background-color: #000;
-}
-.modal-backdrop.fade {
- filter: alpha(opacity=0);
- opacity: 0;
-}
-.modal-backdrop.in {
- filter: alpha(opacity=50);
- opacity: .5;
-}
-.modal-header {
- min-height: 16.42857143px;
- padding: 15px;
- border-bottom: 1px solid #e5e5e5;
-}
-.modal-header .close {
- margin-top: -2px;
-}
-.modal-title {
- margin: 0;
- line-height: 1.42857143;
-}
-.modal-body {
- position: relative;
- padding: 15px;
-}
-.modal-footer {
- padding: 15px;
- text-align: right;
- border-top: 1px solid #e5e5e5;
-}
-.modal-footer .btn + .btn {
- margin-bottom: 0;
- margin-left: 5px;
-}
-.modal-footer .btn-group .btn + .btn {
- margin-left: -1px;
-}
-.modal-footer .btn-block + .btn-block {
- margin-left: 0;
-}
-.modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll;
-}
-@media (min-width: 768px) {
- .modal-dialog {
- width: 600px;
- margin: 30px auto;
- }
- .modal-content {
- -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
- box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
- }
- .modal-sm {
- width: 300px;
- }
-}
-@media (min-width: 992px) {
- .modal-lg {
- width: 900px;
- }
-}
-.tooltip {
- position: absolute;
- z-index: 1070;
- display: block;
- font-size: 12px;
- line-height: 1.4;
- visibility: visible;
- filter: alpha(opacity=0);
- opacity: 0;
-}
-.tooltip.in {
- filter: alpha(opacity=90);
- opacity: .9;
-}
-.tooltip.top {
- padding: 5px 0;
- margin-top: -3px;
-}
-.tooltip.right {
- padding: 0 5px;
- margin-left: 3px;
-}
-.tooltip.bottom {
- padding: 5px 0;
- margin-top: 3px;
-}
-.tooltip.left {
- padding: 0 5px;
- margin-left: -3px;
-}
-.tooltip-inner {
- max-width: 200px;
- padding: 3px 8px;
- color: #fff;
- text-align: center;
- text-decoration: none;
- background-color: #000;
- border-radius: 4px;
-}
-.tooltip-arrow {
- position: absolute;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.tooltip.top .tooltip-arrow {
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
-}
-.tooltip.top-left .tooltip-arrow {
- bottom: 0;
- left: 5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
-}
-.tooltip.top-right .tooltip-arrow {
- right: 5px;
- bottom: 0;
- border-width: 5px 5px 0;
- border-top-color: #000;
-}
-.tooltip.right .tooltip-arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-width: 5px 5px 5px 0;
- border-right-color: #000;
-}
-.tooltip.left .tooltip-arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-width: 5px 0 5px 5px;
- border-left-color: #000;
-}
-.tooltip.bottom .tooltip-arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
-}
-.tooltip.bottom-left .tooltip-arrow {
- top: 0;
- left: 5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
-}
-.tooltip.bottom-right .tooltip-arrow {
- top: 0;
- right: 5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
-}
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1060;
- display: none;
- max-width: 276px;
- padding: 1px;
- font-size: 14px;
- font-weight: normal;
- line-height: 1.42857143;
- text-align: left;
- white-space: normal;
- background-color: #fff;
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, .2);
- border-radius: 6px;
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
- box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
-}
-.popover.top {
- margin-top: -10px;
-}
-.popover.right {
- margin-left: 10px;
-}
-.popover.bottom {
- margin-top: 10px;
-}
-.popover.left {
- margin-left: -10px;
-}
-.popover-title {
- padding: 8px 14px;
- margin: 0;
- font-size: 14px;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- border-radius: 5px 5px 0 0;
-}
-.popover-content {
- padding: 9px 14px;
-}
-.popover > .arrow,
-.popover > .arrow:after {
- position: absolute;
- display: block;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.popover > .arrow {
- border-width: 11px;
-}
-.popover > .arrow:after {
- content: "";
- border-width: 10px;
-}
-.popover.top > .arrow {
- bottom: -11px;
- left: 50%;
- margin-left: -11px;
- border-top-color: #999;
- border-top-color: rgba(0, 0, 0, .25);
- border-bottom-width: 0;
-}
-.popover.top > .arrow:after {
- bottom: 1px;
- margin-left: -10px;
- content: " ";
- border-top-color: #fff;
- border-bottom-width: 0;
-}
-.popover.right > .arrow {
- top: 50%;
- left: -11px;
- margin-top: -11px;
- border-right-color: #999;
- border-right-color: rgba(0, 0, 0, .25);
- border-left-width: 0;
-}
-.popover.right > .arrow:after {
- bottom: -10px;
- left: 1px;
- content: " ";
- border-right-color: #fff;
- border-left-width: 0;
-}
-.popover.bottom > .arrow {
- top: -11px;
- left: 50%;
- margin-left: -11px;
- border-top-width: 0;
- border-bottom-color: #999;
- border-bottom-color: rgba(0, 0, 0, .25);
-}
-.popover.bottom > .arrow:after {
- top: 1px;
- margin-left: -10px;
- content: " ";
- border-top-width: 0;
- border-bottom-color: #fff;
-}
-.popover.left > .arrow {
- top: 50%;
- right: -11px;
- margin-top: -11px;
- border-right-width: 0;
- border-left-color: #999;
- border-left-color: rgba(0, 0, 0, .25);
-}
-.popover.left > .arrow:after {
- right: 1px;
- bottom: -10px;
- content: " ";
- border-right-width: 0;
- border-left-color: #fff;
-}
-.carousel {
- position: relative;
-}
-.carousel-inner {
- position: relative;
- width: 100%;
- overflow: hidden;
-}
-.carousel-inner > .item {
- position: relative;
- display: none;
- -webkit-transition: .6s ease-in-out left;
- -o-transition: .6s ease-in-out left;
- transition: .6s ease-in-out left;
-}
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
- line-height: 1;
-}
-@media all and (transform-3d), (-webkit-transform-3d) {
- .carousel-inner > .item {
- -webkit-transition: -webkit-transform .6s ease-in-out;
- -o-transition: -o-transform .6s ease-in-out;
- transition: transform .6s ease-in-out;
-
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- -webkit-perspective: 1000;
- perspective: 1000;
- }
- .carousel-inner > .item.next,
- .carousel-inner > .item.active.right {
- left: 0;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
- .carousel-inner > .item.prev,
- .carousel-inner > .item.active.left {
- left: 0;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
- .carousel-inner > .item.next.left,
- .carousel-inner > .item.prev.right,
- .carousel-inner > .item.active {
- left: 0;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
-}
-.carousel-inner > .active,
-.carousel-inner > .next,
-.carousel-inner > .prev {
- display: block;
-}
-.carousel-inner > .active {
- left: 0;
-}
-.carousel-inner > .next,
-.carousel-inner > .prev {
- position: absolute;
- top: 0;
- width: 100%;
-}
-.carousel-inner > .next {
- left: 100%;
-}
-.carousel-inner > .prev {
- left: -100%;
-}
-.carousel-inner > .next.left,
-.carousel-inner > .prev.right {
- left: 0;
-}
-.carousel-inner > .active.left {
- left: -100%;
-}
-.carousel-inner > .active.right {
- left: 100%;
-}
-.carousel-control {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- width: 15%;
- font-size: 20px;
- color: #fff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
- filter: alpha(opacity=50);
- opacity: .5;
-}
-.carousel-control.left {
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
- background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
- background-repeat: repeat-x;
-}
-.carousel-control.right {
- right: 0;
- left: auto;
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
- background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
- background-repeat: repeat-x;
-}
-.carousel-control:hover,
-.carousel-control:focus {
- color: #fff;
- text-decoration: none;
- filter: alpha(opacity=90);
- outline: 0;
- opacity: .9;
-}
-.carousel-control .icon-prev,
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-left,
-.carousel-control .glyphicon-chevron-right {
- position: absolute;
- top: 50%;
- z-index: 5;
- display: inline-block;
-}
-.carousel-control .icon-prev,
-.carousel-control .glyphicon-chevron-left {
- left: 50%;
- margin-left: -10px;
-}
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-right {
- right: 50%;
- margin-right: -10px;
-}
-.carousel-control .icon-prev,
-.carousel-control .icon-next {
- width: 20px;
- height: 20px;
- margin-top: -10px;
- font-family: serif;
-}
-.carousel-control .icon-prev:before {
- content: '\2039';
-}
-.carousel-control .icon-next:before {
- content: '\203a';
-}
-.carousel-indicators {
- position: absolute;
- bottom: 10px;
- left: 50%;
- z-index: 15;
- width: 60%;
- padding-left: 0;
- margin-left: -30%;
- text-align: center;
- list-style: none;
-}
-.carousel-indicators li {
- display: inline-block;
- width: 10px;
- height: 10px;
- margin: 1px;
- text-indent: -999px;
- cursor: pointer;
- background-color: #000 \9;
- background-color: rgba(0, 0, 0, 0);
- border: 1px solid #fff;
- border-radius: 10px;
-}
-.carousel-indicators .active {
- width: 12px;
- height: 12px;
- margin: 0;
- background-color: #fff;
-}
-.carousel-caption {
- position: absolute;
- right: 15%;
- bottom: 20px;
- left: 15%;
- z-index: 10;
- padding-top: 20px;
- padding-bottom: 20px;
- color: #fff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
-}
-.carousel-caption .btn {
- text-shadow: none;
-}
-/*
-@media screen and (min-width: 768px) {
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-prev,
- .carousel-control .icon-next {
- width: 30px;
- height: 30px;
- margin-top: -15px;
- font-size: 30px;
- }
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .icon-prev {
- margin-left: -15px;
- }
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-next {
- margin-right: -15px;
- }
- .carousel-caption {
- right: 20%;
- left: 20%;
- padding-bottom: 30px;
- }
- .carousel-indicators {
- bottom: 20px;
- }
-}
-*/
-.clearfix:before,
-.clearfix:after,
-.dl-horizontal dd:before,
-.dl-horizontal dd:after,
-.container:before,
-.container:after,
-.container-fluid:before,
-.container-fluid:after,
-.row:before,
-.row:after,
-.form-horizontal .form-group:before,
-.form-horizontal .form-group:after,
-.btn-toolbar:before,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:before,
-.btn-group-vertical > .btn-group:after,
-.nav:before,
-.nav:after,
-.navbar:before,
-.navbar:after,
-.navbar-header:before,
-.navbar-header:after,
-.navbar-collapse:before,
-.navbar-collapse:after,
-.pager:before,
-.pager:after,
-.panel-body:before,
-.panel-body:after,
-.modal-footer:before,
-.modal-footer:after {
- display: table;
- content: " ";
-}
-.clearfix:after,
-.dl-horizontal dd:after,
-.container:after,
-.container-fluid:after,
-.row:after,
-.form-horizontal .form-group:after,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:after,
-.nav:after,
-.navbar:after,
-.navbar-header:after,
-.navbar-collapse:after,
-.pager:after,
-.panel-body:after,
-.modal-footer:after {
- clear: both;
-}
-.center-block {
- display: block;
- margin-right: auto;
- margin-left: auto;
-}
-.pull-right {
- float: right !important;
-}
-.pull-left {
- float: left !important;
-}
-.hide {
- display: none !important;
-}
-.show {
- display: block !important;
-}
-.invisible {
- visibility: hidden;
-}
-.text-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-.hidden {
- display: none !important;
- visibility: hidden !important;
-}
-.affix {
- position: fixed;
-}
-@-ms-viewport {
- width: device-width;
-}
-.visible-xs,
-.visible-sm,
-.visible-md,
-.visible-lg {
- display: none !important;
-}
-.visible-xs-block,
-.visible-xs-inline,
-.visible-xs-inline-block,
-.visible-sm-block,
-.visible-sm-inline,
-.visible-sm-inline-block,
-.visible-md-block,
-.visible-md-inline,
-.visible-md-inline-block,
-.visible-lg-block,
-.visible-lg-inline,
-.visible-lg-inline-block {
- display: none !important;
-}
-/*
-@media (max-width: 767px) {
- .visible-xs {
- display: block !important;
- }
- table.visible-xs {
- display: table;
- }
- tr.visible-xs {
- display: table-row !important;
- }
- th.visible-xs,
- td.visible-xs {
- display: table-cell !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-block {
- display: block !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-inline {
- display: inline !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm {
- display: block !important;
- }
- table.visible-sm {
- display: table;
- }
- tr.visible-sm {
- display: table-row !important;
- }
- th.visible-sm,
- td.visible-sm {
- display: table-cell !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-block {
- display: block !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-inline {
- display: inline !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md {
- display: block !important;
- }
- table.visible-md {
- display: table;
- }
- tr.visible-md {
- display: table-row !important;
- }
- th.visible-md,
- td.visible-md {
- display: table-cell !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-block {
- display: block !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-inline {
- display: inline !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg {
- display: block !important;
- }
- table.visible-lg {
- display: table;
- }
- tr.visible-lg {
- display: table-row !important;
- }
- th.visible-lg,
- td.visible-lg {
- display: table-cell !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-block {
- display: block !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-inline {
- display: inline !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-inline-block {
- display: inline-block !important;
- }
-}
-@media (max-width: 767px) {
- .hidden-xs {
- display: none !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .hidden-sm {
- display: none !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .hidden-md {
- display: none !important;
- }
-}
-@media (min-width: 1200px) {
- .hidden-lg {
- display: none !important;
- }
-}
-.visible-print {
- display: none !important;
-}
-@media print {
- .visible-print {
- display: block !important;
- }
- table.visible-print {
- display: table;
- }
- tr.visible-print {
- display: table-row !important;
- }
- th.visible-print,
- td.visible-print {
- display: table-cell !important;
- }
-}
-*/
-.visible-print-block {
- display: none !important;
-}
-@media print {
- .visible-print-block {
- display: block !important;
- }
-}
-.visible-print-inline {
- display: none !important;
-}
-@media print {
- .visible-print-inline {
- display: inline !important;
- }
-}
-.visible-print-inline-block {
- display: none !important;
-}
-@media print {
- .visible-print-inline-block {
- display: inline-block !important;
- }
-}
-@media print {
- .hidden-print {
- display: none !important;
- }
-}
-/*# sourceMappingURL=bootstrap.css.map */
diff --git a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css.map b/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css.map
deleted file mode 100644
index fa5546b5..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA,6DAA4D;ACQ5D;EACE,yBAAA;EACA,4BAAA;EACA,gCAAA;EDND;ACaD;EACE,WAAA;EDXD;ACwBD;;;;;;;;;;;;;EAaE,gBAAA;EDtBD;AC8BD;;;;EAIE,uBAAA;EACA,0BAAA;ED5BD;ACoCD;EACE,eAAA;EACA,WAAA;EDlCD;AC0CD;;EAEE,eAAA;EDxCD;ACkDD;EACE,+BAAA;EDhDD;ACuDD;;EAEE,YAAA;EDrDD;AC+DD;EACE,2BAAA;ED7DD;ACoED;;EAEE,mBAAA;EDlED;ACyED;EACE,oBAAA;EDvED;AC+ED;EACE,gBAAA;EACA,kBAAA;ED7ED;ACoFD;EACE,kBAAA;EACA,aAAA;EDlFD;ACyFD;EACE,gBAAA;EDvFD;AC8FD;;EAEE,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,0BAAA;ED5FD;AC+FD;EACE,aAAA;ED7FD;ACgGD;EACE,iBAAA;ED9FD;ACwGD;EACE,WAAA;EDtGD;AC6GD;EACE,kBAAA;ED3GD;ACqHD;EACE,kBAAA;EDnHD;AC0HD;EACE,8BAAA;EACA,iCAAA;UAAA,yBAAA;EACA,WAAA;EDxHD;AC+HD;EACE,gBAAA;ED7HD;ACoID;;;;EAIE,mCAAA;EACA,gBAAA;EDlID;ACoJD;;;;;EAKE,gBAAA;EACA,eAAA;EACA,WAAA;EDlJD;ACyJD;EACE,mBAAA;EDvJD;ACiKD;;EAEE,sBAAA;ED/JD;AC0KD;;;;EAIE,4BAAA;EACA,iBAAA;EDxKD;AC+KD;;EAEE,iBAAA;ED7KD;ACoLD;;EAEE,WAAA;EACA,YAAA;EDlLD;AC0LD;EACE,qBAAA;EDxLD;ACmMD;;EAEE,gCAAA;KAAA,6BAAA;UAAA,wBAAA;EACA,YAAA;EDjMD;AC0MD;;EAEE,cAAA;EDxMD;ACiND;EACE,+BAAA;EACA,8BAAA;EACA,iCAAA;EACA,yBAAA;ED/MD;ACwND;;EAEE,0BAAA;EDtND;AC6ND;EACE,2BAAA;EACA,eAAA;EACA,gCAAA;ED3ND;ACmOD;EACE,WAAA;EACA,YAAA;EDjOD;ACwOD;EACE,gBAAA;EDtOD;AC8OD;EACE,mBAAA;ED5OD;ACsPD;EACE,2BAAA;EACA,mBAAA;EDpPD;ACuPD;;EAEE,YAAA;EDrPD;AACD,sFAAqF;AE1ErF;EAnGI;;;IAGI,oCAAA;IACA,wBAAA;IACA,qCAAA;YAAA,6BAAA;IACA,8BAAA;IFgLL;EE7KC;;IAEI,4BAAA;IF+KL;EE5KC;IACI,8BAAA;IF8KL;EE3KC;IACI,+BAAA;IF6KL;EExKC;;IAEI,aAAA;IF0KL;EEvKC;;IAEI,wBAAA;IACA,0BAAA;IFyKL;EEtKC;IACI,6BAAA;IFwKL;EErKC;;IAEI,0BAAA;IFuKL;EEpKC;IACI,4BAAA;IFsKL;EEnKC;;;IAGI,YAAA;IACA,WAAA;IFqKL;EElKC;;IAEI,yBAAA;IFoKL;EE7JC;IACI,6BAAA;IF+JL;EE3JC;IACI,eAAA;IF6JL;EE3JC;;IAGQ,mCAAA;IF4JT;EEzJC;IACI,wBAAA;IF2JL;EExJC;IACI,sCAAA;IF0JL;EE3JC;;IAKQ,mCAAA;IF0JT;EEvJC;;IAGQ,mCAAA;IFwJT;EACF;AGpPD;EACE,qCAAA;EACA,uDAAA;EACA,6TAAA;EHsPD;AG/OD;EACE,oBAAA;EACA,UAAA;EACA,uBAAA;EACA,qCAAA;EACA,oBAAA;EACA,qBAAA;EACA,gBAAA;EACA,qCAAA;EACA,oCAAA;EHiPD;AG7OmC;EAAW,gBAAA;EHgP9C;AG/OmC;EAAW,gBAAA;EHkP9C;AGhPmC;;EAAW,kBAAA;EHoP9C;AGnPmC;EAAW,kBAAA;EHsP9C;AGrPmC;EAAW,kBAAA;EHwP9C;AGvPmC;EAAW,kBAAA;EH0P9C;AGzPmC;EAAW,kBAAA;EH4P9C;AG3PmC;EAAW,kBAAA;EH8P9C;AG7PmC;EAAW,kBAAA;EHgQ9C;AG/PmC;EAAW,kBAAA;EHkQ9C;AGjQmC;EAAW,kBAAA;EHoQ9C;AGnQmC;EAAW,kBAAA;EHsQ9C;AGrQmC;EAAW,kBAAA;EHwQ9C;AGvQmC;EAAW,kBAAA;EH0Q9C;AGzQmC;EAAW,kBAAA;EH4Q9C;AG3QmC;EAAW,kBAAA;EH8Q9C;AG7QmC;EAAW,kBAAA;EHgR9C;AG/QmC;EAAW,kBAAA;EHkR9C;AGjRmC;EAAW,kBAAA;EHoR9C;AGnRmC;EAAW,kBAAA;EHsR9C;AGrRmC;EAAW,kBAAA;EHwR9C;AGvRmC;EAAW,kBAAA;EH0R9C;AGzRmC;EAAW,kBAAA;EH4R9C;AG3RmC;EAAW,kBAAA;EH8R9C;AG7RmC;EAAW,kBAAA;EHgS9C;AG/RmC;EAAW,kBAAA;EHkS9C;AGjSmC;EAAW,kBAAA;EHoS9C;AGnSmC;EAAW,kBAAA;EHsS9C;AGrSmC;EAAW,kBAAA;EHwS9C;AGvSmC;EAAW,kBAAA;EH0S9C;AGzSmC;EAAW,kBAAA;EH4S9C;AG3SmC;EAAW,kBAAA;EH8S9C;AG7SmC;EAAW,kBAAA;EHgT9C;AG/SmC;EAAW,kBAAA;EHkT9C;AGjTmC;EAAW,kBAAA;EHoT9C;AGnTmC;EAAW,kBAAA;EHsT9C;AGrTmC;EAAW,kBAAA;EHwT9C;AGvTmC;EAAW,kBAAA;EH0T9C;AGzTmC;EAAW,kBAAA;EH4T9C;AG3TmC;EAAW,kBAAA;EH8T9C;AG7TmC;EAAW,kBAAA;EHgU9C;AG/TmC;EAAW,kBAAA;EHkU9C;AGjUmC;EAAW,kBAAA;EHoU9C;AGnUmC;EAAW,kBAAA;EHsU9C;AGrUmC;EAAW,kBAAA;EHwU9C;AGvUmC;EAAW,kBAAA;EH0U9C;AGzUmC;EAAW,kBAAA;EH4U9C;AG3UmC;EAAW,kBAAA;EH8U9C;AG7UmC;EAAW,kBAAA;EHgV9C;AG/UmC;EAAW,kBAAA;EHkV9C;AGjVmC;EAAW,kBAAA;EHoV9C;AGnVmC;EAAW,kBAAA;EHsV9C;AGrVmC;EAAW,kBAAA;EHwV9C;AGvVmC;EAAW,kBAAA;EH0V9C;AGzVmC;EAAW,kBAAA;EH4V9C;AG3VmC;EAAW,kBAAA;EH8V9C;AG7VmC;EAAW,kBAAA;EHgW9C;AG/VmC;EAAW,kBAAA;EHkW9C;AGjWmC;EAAW,kBAAA;EHoW9C;AGnWmC;EAAW,kBAAA;EHsW9C;AGrWmC;EAAW,kBAAA;EHwW9C;AGvWmC;EAAW,kBAAA;EH0W9C;AGzWmC;EAAW,kBAAA;EH4W9C;AG3WmC;EAAW,kBAAA;EH8W9C;AG7WmC;EAAW,kBAAA;EHgX9C;AG/WmC;EAAW,kBAAA;EHkX9C;AGjXmC;EAAW,kBAAA;EHoX9C;AGnXmC;EAAW,kBAAA;EHsX9C;AGrXmC;EAAW,kBAAA;EHwX9C;AGvXmC;EAAW,kBAAA;EH0X9C;AGzXmC;EAAW,kBAAA;EH4X9C;AG3XmC;EAAW,kBAAA;EH8X9C;AG7XmC;EAAW,kBAAA;EHgY9C;AG/XmC;EAAW,kBAAA;EHkY9C;AGjYmC;EAAW,kBAAA;EHoY9C;AGnYmC;EAAW,kBAAA;EHsY9C;AGrYmC;EAAW,kBAAA;EHwY9C;AGvYmC;EAAW,kBAAA;EH0Y9C;AGzYmC;EAAW,kBAAA;EH4Y9C;AG3YmC;EAAW,kBAAA;EH8Y9C;AG7YmC;EAAW,kBAAA;EHgZ9C;AG/YmC;EAAW,kBAAA;EHkZ9C;AGjZmC;EAAW,kBAAA;EHoZ9C;AGnZmC;EAAW,kBAAA;EHsZ9C;AGrZmC;EAAW,kBAAA;EHwZ9C;AGvZmC;EAAW,kBAAA;EH0Z9C;AGzZmC;EAAW,kBAAA;EH4Z9C;AG3ZmC;EAAW,kBAAA;EH8Z9C;AG7ZmC;EAAW,kBAAA;EHga9C;AG/ZmC;EAAW,kBAAA;EHka9C;AGjamC;EAAW,kBAAA;EHoa9C;AGnamC;EAAW,kBAAA;EHsa9C;AGramC;EAAW,kBAAA;EHwa9C;AGvamC;EAAW,kBAAA;EH0a9C;AGzamC;EAAW,kBAAA;EH4a9C;AG3amC;EAAW,kBAAA;EH8a9C;AG7amC;EAAW,kBAAA;EHgb9C;AG/amC;EAAW,kBAAA;EHkb9C;AGjbmC;EAAW,kBAAA;EHob9C;AGnbmC;EAAW,kBAAA;EHsb9C;AGrbmC;EAAW,kBAAA;EHwb9C;AGvbmC;EAAW,kBAAA;EH0b9C;AGzbmC;EAAW,kBAAA;EH4b9C;AG3bmC;EAAW,kBAAA;EH8b9C;AG7bmC;EAAW,kBAAA;EHgc9C;AG/bmC;EAAW,kBAAA;EHkc9C;AGjcmC;EAAW,kBAAA;EHoc9C;AGncmC;EAAW,kBAAA;EHsc9C;AGrcmC;EAAW,kBAAA;EHwc9C;AGvcmC;EAAW,kBAAA;EH0c9C;AGzcmC;EAAW,kBAAA;EH4c9C;AG3cmC;EAAW,kBAAA;EH8c9C;AG7cmC;EAAW,kBAAA;EHgd9C;AG/cmC;EAAW,kBAAA;EHkd9C;AGjdmC;EAAW,kBAAA;EHod9C;AGndmC;EAAW,kBAAA;EHsd9C;AGrdmC;EAAW,kBAAA;EHwd9C;AGvdmC;EAAW,kBAAA;EH0d9C;AGzdmC;EAAW,kBAAA;EH4d9C;AG3dmC;EAAW,kBAAA;EH8d9C;AG7dmC;EAAW,kBAAA;EHge9C;AG/dmC;EAAW,kBAAA;EHke9C;AGjemC;EAAW,kBAAA;EHoe9C;AGnemC;EAAW,kBAAA;EHse9C;AGremC;EAAW,kBAAA;EHwe9C;AGvemC;EAAW,kBAAA;EH0e9C;AGzemC;EAAW,kBAAA;EH4e9C;AG3emC;EAAW,kBAAA;EH8e9C;AG7emC;EAAW,kBAAA;EHgf9C;AG/emC;EAAW,kBAAA;EHkf9C;AGjfmC;EAAW,kBAAA;EHof9C;AGnfmC;EAAW,kBAAA;EHsf9C;AGrfmC;EAAW,kBAAA;EHwf9C;AGvfmC;EAAW,kBAAA;EH0f9C;AGzfmC;EAAW,kBAAA;EH4f9C;AG3fmC;EAAW,kBAAA;EH8f9C;AG7fmC;EAAW,kBAAA;EHggB9C;AG/fmC;EAAW,kBAAA;EHkgB9C;AGjgBmC;EAAW,kBAAA;EHogB9C;AGngBmC;EAAW,kBAAA;EHsgB9C;AGrgBmC;EAAW,kBAAA;EHwgB9C;AGvgBmC;EAAW,kBAAA;EH0gB9C;AGzgBmC;EAAW,kBAAA;EH4gB9C;AG3gBmC;EAAW,kBAAA;EH8gB9C;AG7gBmC;EAAW,kBAAA;EHghB9C;AG/gBmC;EAAW,kBAAA;EHkhB9C;AGjhBmC;EAAW,kBAAA;EHohB9C;AGnhBmC;EAAW,kBAAA;EHshB9C;AGrhBmC;EAAW,kBAAA;EHwhB9C;AGvhBmC;EAAW,kBAAA;EH0hB9C;AGzhBmC;EAAW,kBAAA;EH4hB9C;AG3hBmC;EAAW,kBAAA;EH8hB9C;AG7hBmC;EAAW,kBAAA;EHgiB9C;AG/hBmC;EAAW,kBAAA;EHkiB9C;AGjiBmC;EAAW,kBAAA;EHoiB9C;AGniBmC;EAAW,kBAAA;EHsiB9C;AGriBmC;EAAW,kBAAA;EHwiB9C;AGviBmC;EAAW,kBAAA;EH0iB9C;AGziBmC;EAAW,kBAAA;EH4iB9C;AG3iBmC;EAAW,kBAAA;EH8iB9C;AG7iBmC;EAAW,kBAAA;EHgjB9C;AG/iBmC;EAAW,kBAAA;EHkjB9C;AGjjBmC;EAAW,kBAAA;EHojB9C;AGnjBmC;EAAW,kBAAA;EHsjB9C;AGrjBmC;EAAW,kBAAA;EHwjB9C;AGvjBmC;EAAW,kBAAA;EH0jB9C;AGzjBmC;EAAW,kBAAA;EH4jB9C;AG3jBmC;EAAW,kBAAA;EH8jB9C;AG7jBmC;EAAW,kBAAA;EHgkB9C;AG/jBmC;EAAW,kBAAA;EHkkB9C;AGjkBmC;EAAW,kBAAA;EHokB9C;AGnkBmC;EAAW,kBAAA;EHskB9C;AGrkBmC;EAAW,kBAAA;EHwkB9C;AGvkBmC;EAAW,kBAAA;EH0kB9C;AGzkBmC;EAAW,kBAAA;EH4kB9C;AG3kBmC;EAAW,kBAAA;EH8kB9C;AG7kBmC;EAAW,kBAAA;EHglB9C;AG/kBmC;EAAW,kBAAA;EHklB9C;AGjlBmC;EAAW,kBAAA;EHolB9C;AGnlBmC;EAAW,kBAAA;EHslB9C;AGrlBmC;EAAW,kBAAA;EHwlB9C;AGvlBmC;EAAW,kBAAA;EH0lB9C;AGzlBmC;EAAW,kBAAA;EH4lB9C;AG3lBmC;EAAW,kBAAA;EH8lB9C;AG7lBmC;EAAW,kBAAA;EHgmB9C;AG/lBmC;EAAW,kBAAA;EHkmB9C;AGjmBmC;EAAW,kBAAA;EHomB9C;AGnmBmC;EAAW,kBAAA;EHsmB9C;AGrmBmC;EAAW,kBAAA;EHwmB9C;AGvmBmC;EAAW,kBAAA;EH0mB9C;AGzmBmC;EAAW,kBAAA;EH4mB9C;AG3mBmC;EAAW,kBAAA;EH8mB9C;AG7mBmC;EAAW,kBAAA;EHgnB9C;AG/mBmC;EAAW,kBAAA;EHknB9C;AGjnBmC;EAAW,kBAAA;EHonB9C;AGnnBmC;EAAW,kBAAA;EHsnB9C;AGrnBmC;EAAW,kBAAA;EHwnB9C;AGvnBmC;EAAW,kBAAA;EH0nB9C;AGznBmC;EAAW,kBAAA;EH4nB9C;AG3nBmC;EAAW,kBAAA;EH8nB9C;AI71BD;ECgEE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELgyBT;AI/1BD;;EC6DE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELsyBT;AI71BD;EACE,iBAAA;EACA,+CAAA;EJ+1BD;AI51BD;EACE,6DAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EJ81BD;AI11BD;;;;EAIE,sBAAA;EACA,oBAAA;EACA,sBAAA;EJ41BD;AIt1BD;EACE,gBAAA;EACA,uBAAA;EJw1BD;AIt1BC;;EAEE,gBAAA;EACA,4BAAA;EJw1BH;AIr1BC;EErDA,sBAAA;EAEA,4CAAA;EACA,sBAAA;EN44BD;AI/0BD;EACE,WAAA;EJi1BD;AI30BD;EACE,wBAAA;EJ60BD;AIz0BD;;;;;EGvEE,gBAAA;EACA,iBAAA;EACA,cAAA;EPu5BD;AI70BD;EACE,oBAAA;EJ+0BD;AIz0BD;EACE,cAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EC6FA,0CAAA;EACK,qCAAA;EACG,kCAAA;EEvLR,uBAAA;EACA,iBAAA;EACA,cAAA;EPu6BD;AIz0BD;EACE,oBAAA;EJ20BD;AIr0BD;EACE,kBAAA;EACA,qBAAA;EACA,WAAA;EACA,+BAAA;EJu0BD;AI/zBD;EACE,oBAAA;EACA,YAAA;EACA,aAAA;EACA,cAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,WAAA;EJi0BD;AIzzBC;;EAEE,kBAAA;EACA,aAAA;EACA,cAAA;EACA,WAAA;EACA,mBAAA;EACA,YAAA;EJ2zBH;AQt8BD;;;;;;;;;;;;EAEE,sBAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;ERk9BD;AQv9BD;;;;;;;;;;;;;;;;;;;;;;;;EASI,qBAAA;EACA,gBAAA;EACA,gBAAA;ERw+BH;AQp+BD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERy+BD;AQ7+BD;;;;;;;;;;;;EAQI,gBAAA;ERm/BH;AQh/BD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERq/BD;AQz/BD;;;;;;;;;;;;EAQI,gBAAA;ER+/BH;AQ3/BD;;EAAU,iBAAA;ER+/BT;AQ9/BD;;EAAU,iBAAA;ERkgCT;AQjgCD;;EAAU,iBAAA;ERqgCT;AQpgCD;;EAAU,iBAAA;ERwgCT;AQvgCD;;EAAU,iBAAA;ER2gCT;AQ1gCD;;EAAU,iBAAA;ER8gCT;AQxgCD;EACE,kBAAA;ER0gCD;AQvgCD;EACE,qBAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;ERygCD;AQpgCD;EAAA;IAFI,iBAAA;IR0gCD;EACF;AQlgCD;;EAEE,gBAAA;ERogCD;AQjgCD;;EAEE,2BAAA;EACA,eAAA;ERmgCD;AQ//BD;EAAuB,kBAAA;ERkgCtB;AQjgCD;EAAuB,mBAAA;ERogCtB;AQngCD;EAAuB,oBAAA;ERsgCtB;AQrgCD;EAAuB,qBAAA;ERwgCtB;AQvgCD;EAAuB,qBAAA;ER0gCtB;AQvgCD;EAAuB,2BAAA;ER0gCtB;AQzgCD;EAAuB,2BAAA;ER4gCtB;AQ3gCD;EAAuB,4BAAA;ER8gCtB;AQ3gCD;EACE,gBAAA;ER6gCD;AQ3gCD;ECrGE,gBAAA;ETmnCD;ASlnCC;EACE,gBAAA;ETonCH;AQ9gCD;ECxGE,gBAAA;ETynCD;ASxnCC;EACE,gBAAA;ET0nCH;AQjhCD;EC3GE,gBAAA;ET+nCD;AS9nCC;EACE,gBAAA;ETgoCH;AQphCD;EC9GE,gBAAA;ETqoCD;ASpoCC;EACE,gBAAA;ETsoCH;AQvhCD;ECjHE,gBAAA;ET2oCD;AS1oCC;EACE,gBAAA;ET4oCH;AQthCD;EAGE,aAAA;EE3HA,2BAAA;EVkpCD;AUjpCC;EACE,2BAAA;EVmpCH;AQvhCD;EE9HE,2BAAA;EVwpCD;AUvpCC;EACE,2BAAA;EVypCH;AQ1hCD;EEjIE,2BAAA;EV8pCD;AU7pCC;EACE,2BAAA;EV+pCH;AQ7hCD;EEpIE,2BAAA;EVoqCD;AUnqCC;EACE,2BAAA;EVqqCH;AQhiCD;EEvIE,2BAAA;EV0qCD;AUzqCC;EACE,2BAAA;EV2qCH;AQ9hCD;EACE,qBAAA;EACA,qBAAA;EACA,kCAAA;ERgiCD;AQxhCD;;EAEE,eAAA;EACA,qBAAA;ER0hCD;AQ7hCD;;;;EAMI,kBAAA;ER6hCH;AQthCD;EACE,iBAAA;EACA,kBAAA;ERwhCD;AQphCD;EALE,iBAAA;EACA,kBAAA;EAMA,mBAAA;ERuhCD;AQzhCD;EAKI,uBAAA;EACA,mBAAA;EACA,oBAAA;ERuhCH;AQlhCD;EACE,eAAA;EACA,qBAAA;ERohCD;AQlhCD;;EAEE,yBAAA;ERohCD;AQlhCD;EACE,mBAAA;ERohCD;AQlhCD;EACE,gBAAA;ERohCD;AQ3/BD;EAAA;IAVM,aAAA;IACA,cAAA;IACA,aAAA;IACA,mBAAA;IGtNJ,kBAAA;IACA,yBAAA;IACA,qBAAA;IXguCC;EQrgCH;IAHM,oBAAA;IR2gCH;EACF;AQlgCD;;EAGE,cAAA;EACA,mCAAA;ERmgCD;AQjgCD;EACE,gBAAA;EACA,2BAAA;ERmgCD;AQ//BD;EACE,oBAAA;EACA,kBAAA;EACA,mBAAA;EACA,gCAAA;ERigCD;AQ5/BG;;;EACE,kBAAA;ERggCL;AQ1gCD;;;EAmBI,gBAAA;EACA,gBAAA;EACA,yBAAA;EACA,gBAAA;ER4/BH;AQ1/BG;;;EACE,wBAAA;ER8/BL;AQt/BD;;EAEE,qBAAA;EACA,iBAAA;EACA,iCAAA;EACA,gBAAA;EACA,mBAAA;ERw/BD;AQl/BG;;;;;;EAAW,aAAA;ER0/Bd;AQz/BG;;;;;;EACE,wBAAA;ERggCL;AQ1/BD;EACE,qBAAA;EACA,oBAAA;EACA,yBAAA;ER4/BD;AYlyCD;;;;EAIE,gEAAA;EZoyCD;AYhyCD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EZkyCD;AY9xCD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EACA,wDAAA;UAAA,gDAAA;EZgyCD;AYtyCD;EASI,YAAA;EACA,iBAAA;EACA,mBAAA;EACA,0BAAA;UAAA,kBAAA;EZgyCH;AY3xCD;EACE,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,uBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EZ6xCD;AYxyCD;EAeI,YAAA;EACA,oBAAA;EACA,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,kBAAA;EZ4xCH;AYvxCD;EACE,mBAAA;EACA,oBAAA;EZyxCD;Aan1CD;ECHE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Edy1CD;Aan1CC;EAAA;IAFE,cAAA;Iby1CD;EACF;Aar1CC;EAAA;IAFE,cAAA;Ib21CD;EACF;Aav1CD;EAAA;IAFI,eAAA;Ib61CD;EACF;Aap1CD;ECvBE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Ed82CD;Aaj1CD;ECvBE,oBAAA;EACA,qBAAA;Ed22CD;Ae32CG;EACE,oBAAA;EAEA,iBAAA;EAEA,oBAAA;EACA,qBAAA;Ef22CL;Ae31CG;EACE,aAAA;Ef61CL;Aet1CC;EACE,aAAA;Efw1CH;Aez1CC;EACE,qBAAA;Ef21CH;Ae51CC;EACE,qBAAA;Ef81CH;Ae/1CC;EACE,YAAA;Efi2CH;Ael2CC;EACE,qBAAA;Efo2CH;Aer2CC;EACE,qBAAA;Efu2CH;Aex2CC;EACE,YAAA;Ef02CH;Ae32CC;EACE,qBAAA;Ef62CH;Ae92CC;EACE,qBAAA;Efg3CH;Aej3CC;EACE,YAAA;Efm3CH;Aep3CC;EACE,qBAAA;Efs3CH;Aev3CC;EACE,oBAAA;Efy3CH;Ae32CC;EACE,aAAA;Ef62CH;Ae92CC;EACE,qBAAA;Efg3CH;Aej3CC;EACE,qBAAA;Efm3CH;Aep3CC;EACE,YAAA;Efs3CH;Aev3CC;EACE,qBAAA;Efy3CH;Ae13CC;EACE,qBAAA;Ef43CH;Ae73CC;EACE,YAAA;Ef+3CH;Aeh4CC;EACE,qBAAA;Efk4CH;Aen4CC;EACE,qBAAA;Efq4CH;Aet4CC;EACE,YAAA;Efw4CH;Aez4CC;EACE,qBAAA;Ef24CH;Ae54CC;EACE,oBAAA;Ef84CH;Ae14CC;EACE,aAAA;Ef44CH;Ae55CC;EACE,YAAA;Ef85CH;Ae/5CC;EACE,oBAAA;Efi6CH;Ael6CC;EACE,oBAAA;Efo6CH;Aer6CC;EACE,WAAA;Efu6CH;Aex6CC;EACE,oBAAA;Ef06CH;Ae36CC;EACE,oBAAA;Ef66CH;Ae96CC;EACE,WAAA;Efg7CH;Aej7CC;EACE,oBAAA;Efm7CH;Aep7CC;EACE,oBAAA;Efs7CH;Aev7CC;EACE,WAAA;Efy7CH;Ae17CC;EACE,oBAAA;Ef47CH;Ae77CC;EACE,mBAAA;Ef+7CH;Ae37CC;EACE,YAAA;Ef67CH;Ae/6CC;EACE,mBAAA;Efi7CH;Ael7CC;EACE,2BAAA;Efo7CH;Aer7CC;EACE,2BAAA;Efu7CH;Aex7CC;EACE,kBAAA;Ef07CH;Ae37CC;EACE,2BAAA;Ef67CH;Ae97CC;EACE,2BAAA;Efg8CH;Aej8CC;EACE,kBAAA;Efm8CH;Aep8CC;EACE,2BAAA;Efs8CH;Aev8CC;EACE,2BAAA;Efy8CH;Ae18CC;EACE,kBAAA;Ef48CH;Ae78CC;EACE,2BAAA;Ef+8CH;Aeh9CC;EACE,0BAAA;Efk9CH;Aen9CC;EACE,iBAAA;Efq9CH;Aaz9CD;EE9BI;IACE,aAAA;If0/CH;Een/CD;IACE,aAAA;Ifq/CD;Eet/CD;IACE,qBAAA;Ifw/CD;Eez/CD;IACE,qBAAA;If2/CD;Ee5/CD;IACE,YAAA;If8/CD;Ee//CD;IACE,qBAAA;IfigDD;EelgDD;IACE,qBAAA;IfogDD;EergDD;IACE,YAAA;IfugDD;EexgDD;IACE,qBAAA;If0gDD;Ee3gDD;IACE,qBAAA;If6gDD;Ee9gDD;IACE,YAAA;IfghDD;EejhDD;IACE,qBAAA;IfmhDD;EephDD;IACE,oBAAA;IfshDD;EexgDD;IACE,aAAA;If0gDD;Ee3gDD;IACE,qBAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,YAAA;IfmhDD;EephDD;IACE,qBAAA;IfshDD;EevhDD;IACE,qBAAA;IfyhDD;Ee1hDD;IACE,YAAA;If4hDD;Ee7hDD;IACE,qBAAA;If+hDD;EehiDD;IACE,qBAAA;IfkiDD;EeniDD;IACE,YAAA;IfqiDD;EetiDD;IACE,qBAAA;IfwiDD;EeziDD;IACE,oBAAA;If2iDD;EeviDD;IACE,aAAA;IfyiDD;EezjDD;IACE,YAAA;If2jDD;Ee5jDD;IACE,oBAAA;If8jDD;Ee/jDD;IACE,oBAAA;IfikDD;EelkDD;IACE,WAAA;IfokDD;EerkDD;IACE,oBAAA;IfukDD;EexkDD;IACE,oBAAA;If0kDD;Ee3kDD;IACE,WAAA;If6kDD;Ee9kDD;IACE,oBAAA;IfglDD;EejlDD;IACE,oBAAA;IfmlDD;EeplDD;IACE,WAAA;IfslDD;EevlDD;IACE,oBAAA;IfylDD;Ee1lDD;IACE,mBAAA;If4lDD;EexlDD;IACE,YAAA;If0lDD;Ee5kDD;IACE,mBAAA;If8kDD;Ee/kDD;IACE,2BAAA;IfilDD;EellDD;IACE,2BAAA;IfolDD;EerlDD;IACE,kBAAA;IfulDD;EexlDD;IACE,2BAAA;If0lDD;Ee3lDD;IACE,2BAAA;If6lDD;Ee9lDD;IACE,kBAAA;IfgmDD;EejmDD;IACE,2BAAA;IfmmDD;EepmDD;IACE,2BAAA;IfsmDD;EevmDD;IACE,kBAAA;IfymDD;Ee1mDD;IACE,2BAAA;If4mDD;Ee7mDD;IACE,0BAAA;If+mDD;EehnDD;IACE,iBAAA;IfknDD;EACF;Aa9mDD;EEvCI;IACE,aAAA;IfwpDH;EejpDD;IACE,aAAA;IfmpDD;EeppDD;IACE,qBAAA;IfspDD;EevpDD;IACE,qBAAA;IfypDD;Ee1pDD;IACE,YAAA;If4pDD;Ee7pDD;IACE,qBAAA;If+pDD;EehqDD;IACE,qBAAA;IfkqDD;EenqDD;IACE,YAAA;IfqqDD;EetqDD;IACE,qBAAA;IfwqDD;EezqDD;IACE,qBAAA;If2qDD;Ee5qDD;IACE,YAAA;If8qDD;Ee/qDD;IACE,qBAAA;IfirDD;EelrDD;IACE,oBAAA;IforDD;EetqDD;IACE,aAAA;IfwqDD;EezqDD;IACE,qBAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,YAAA;IfirDD;EelrDD;IACE,qBAAA;IforDD;EerrDD;IACE,qBAAA;IfurDD;EexrDD;IACE,YAAA;If0rDD;Ee3rDD;IACE,qBAAA;If6rDD;Ee9rDD;IACE,qBAAA;IfgsDD;EejsDD;IACE,YAAA;IfmsDD;EepsDD;IACE,qBAAA;IfssDD;EevsDD;IACE,oBAAA;IfysDD;EersDD;IACE,aAAA;IfusDD;EevtDD;IACE,YAAA;IfytDD;Ee1tDD;IACE,oBAAA;If4tDD;Ee7tDD;IACE,oBAAA;If+tDD;EehuDD;IACE,WAAA;IfkuDD;EenuDD;IACE,oBAAA;IfquDD;EetuDD;IACE,oBAAA;IfwuDD;EezuDD;IACE,WAAA;If2uDD;Ee5uDD;IACE,oBAAA;If8uDD;Ee/uDD;IACE,oBAAA;IfivDD;EelvDD;IACE,WAAA;IfovDD;EervDD;IACE,oBAAA;IfuvDD;EexvDD;IACE,mBAAA;If0vDD;EetvDD;IACE,YAAA;IfwvDD;Ee1uDD;IACE,mBAAA;If4uDD;Ee7uDD;IACE,2BAAA;If+uDD;EehvDD;IACE,2BAAA;IfkvDD;EenvDD;IACE,kBAAA;IfqvDD;EetvDD;IACE,2BAAA;IfwvDD;EezvDD;IACE,2BAAA;If2vDD;Ee5vDD;IACE,kBAAA;If8vDD;Ee/vDD;IACE,2BAAA;IfiwDD;EelwDD;IACE,2BAAA;IfowDD;EerwDD;IACE,kBAAA;IfuwDD;EexwDD;IACE,2BAAA;If0wDD;Ee3wDD;IACE,0BAAA;If6wDD;Ee9wDD;IACE,iBAAA;IfgxDD;EACF;AarwDD;EE9CI;IACE,aAAA;IfszDH;Ee/yDD;IACE,aAAA;IfizDD;EelzDD;IACE,qBAAA;IfozDD;EerzDD;IACE,qBAAA;IfuzDD;EexzDD;IACE,YAAA;If0zDD;Ee3zDD;IACE,qBAAA;If6zDD;Ee9zDD;IACE,qBAAA;Ifg0DD;Eej0DD;IACE,YAAA;Ifm0DD;Eep0DD;IACE,qBAAA;Ifs0DD;Eev0DD;IACE,qBAAA;Ify0DD;Ee10DD;IACE,YAAA;If40DD;Ee70DD;IACE,qBAAA;If+0DD;Eeh1DD;IACE,oBAAA;Ifk1DD;Eep0DD;IACE,aAAA;Ifs0DD;Eev0DD;IACE,qBAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,YAAA;If+0DD;Eeh1DD;IACE,qBAAA;Ifk1DD;Een1DD;IACE,qBAAA;Ifq1DD;Eet1DD;IACE,YAAA;Ifw1DD;Eez1DD;IACE,qBAAA;If21DD;Ee51DD;IACE,qBAAA;If81DD;Ee/1DD;IACE,YAAA;Ifi2DD;Eel2DD;IACE,qBAAA;Ifo2DD;Eer2DD;IACE,oBAAA;Ifu2DD;Een2DD;IACE,aAAA;Ifq2DD;Eer3DD;IACE,YAAA;Ifu3DD;Eex3DD;IACE,oBAAA;If03DD;Ee33DD;IACE,oBAAA;If63DD;Ee93DD;IACE,WAAA;Ifg4DD;Eej4DD;IACE,oBAAA;Ifm4DD;Eep4DD;IACE,oBAAA;Ifs4DD;Eev4DD;IACE,WAAA;Ify4DD;Ee14DD;IACE,oBAAA;If44DD;Ee74DD;IACE,oBAAA;If+4DD;Eeh5DD;IACE,WAAA;Ifk5DD;Een5DD;IACE,oBAAA;Ifq5DD;Eet5DD;IACE,mBAAA;Ifw5DD;Eep5DD;IACE,YAAA;Ifs5DD;Eex4DD;IACE,mBAAA;If04DD;Ee34DD;IACE,2BAAA;If64DD;Ee94DD;IACE,2BAAA;Ifg5DD;Eej5DD;IACE,kBAAA;Ifm5DD;Eep5DD;IACE,2BAAA;Ifs5DD;Eev5DD;IACE,2BAAA;Ify5DD;Ee15DD;IACE,kBAAA;If45DD;Ee75DD;IACE,2BAAA;If+5DD;Eeh6DD;IACE,2BAAA;Ifk6DD;Een6DD;IACE,kBAAA;Ifq6DD;Eet6DD;IACE,2BAAA;Ifw6DD;Eez6DD;IACE,0BAAA;If26DD;Ee56DD;IACE,iBAAA;If86DD;EACF;AgBl/DD;EACE,+BAAA;EhBo/DD;AgBl/DD;EACE,kBAAA;EACA,qBAAA;EACA,gBAAA;EACA,kBAAA;EhBo/DD;AgBl/DD;EACE,kBAAA;EhBo/DD;AgB9+DD;EACE,aAAA;EACA,iBAAA;EACA,qBAAA;EhBg/DD;AgBn/DD;;;;;;EAWQ,cAAA;EACA,yBAAA;EACA,qBAAA;EACA,+BAAA;EhBg/DP;AgB9/DD;EAoBI,wBAAA;EACA,kCAAA;EhB6+DH;AgBlgED;;;;;;EA8BQ,eAAA;EhB4+DP;AgB1gED;EAoCI,+BAAA;EhBy+DH;AgB7gED;EAyCI,2BAAA;EhBu+DH;AgBh+DD;;;;;;EAOQ,cAAA;EhBi+DP;AgBt9DD;EACE,2BAAA;EhBw9DD;AgBz9DD;;;;;;EAQQ,2BAAA;EhBy9DP;AgBj+DD;;EAeM,0BAAA;EhBs9DL;AgB58DD;EAEI,2BAAA;EhB68DH;AgBp8DD;EAEI,2BAAA;EhBq8DH;AgB57DD;EACE,kBAAA;EACA,aAAA;EACA,uBAAA;EhB87DD;AgBz7DG;;EACE,kBAAA;EACA,aAAA;EACA,qBAAA;EhB47DL;AiBxkEC;;;;;;;;;;;;EAOI,2BAAA;EjB+kEL;AiBzkEC;;;;;EAMI,2BAAA;EjB0kEL;AiB7lEC;;;;;;;;;;;;EAOI,2BAAA;EjBomEL;AiB9lEC;;;;;EAMI,2BAAA;EjB+lEL;AiBlnEC;;;;;;;;;;;;EAOI,2BAAA;EjBynEL;AiBnnEC;;;;;EAMI,2BAAA;EjBonEL;AiBvoEC;;;;;;;;;;;;EAOI,2BAAA;EjB8oEL;AiBxoEC;;;;;EAMI,2BAAA;EjByoEL;AiB5pEC;;;;;;;;;;;;EAOI,2BAAA;EjBmqEL;AiB7pEC;;;;;EAMI,2BAAA;EjB8pEL;AgB5gED;EACE,kBAAA;EACA,mBAAA;EhB8gED;AgBj9DD;EAAA;IA1DI,aAAA;IACA,qBAAA;IACA,oBAAA;IACA,8CAAA;IACA,2BAAA;IhB+gED;EgBz9DH;IAlDM,kBAAA;IhB8gEH;EgB59DH;;;;;;IAzCY,qBAAA;IhB6gET;EgBp+DH;IAjCM,WAAA;IhBwgEH;EgBv+DH;;;;;;IAxBY,gBAAA;IhBugET;EgB/+DH;;;;;;IApBY,iBAAA;IhB2gET;EgBv/DH;;;;IAPY,kBAAA;IhBogET;EACF;AkB9tED;EACE,YAAA;EACA,WAAA;EACA,WAAA;EAIA,cAAA;ElB6tED;AkB1tED;EACE,gBAAA;EACA,aAAA;EACA,YAAA;EACA,qBAAA;EACA,iBAAA;EACA,sBAAA;EACA,gBAAA;EACA,WAAA;EACA,kCAAA;ElB4tED;AkBztED;EACE,uBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;ElB2tED;AkBhtED;Eb4BE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELurET;AkBhtED;;EAEE,iBAAA;EACA,oBAAA;EACA,qBAAA;ElBktED;AkB9sED;EACE,gBAAA;ElBgtED;AkB5sED;EACE,gBAAA;EACA,aAAA;ElB8sED;AkB1sED;;EAEE,cAAA;ElB4sED;AkBxsED;;;EZxEE,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENoxED;AkBxsED;EACE,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;ElB0sED;AkBhrED;EACE,gBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EACA,wBAAA;EACA,2BAAA;EACA,oBAAA;EbzDA,0DAAA;EACQ,kDAAA;EAyHR,wFAAA;EACK,2EAAA;EACG,wEAAA;ELonET;AmB5vEC;EACE,uBAAA;EACA,YAAA;EdUF,wFAAA;EACQ,gFAAA;ELqvET;AKptEC;EACE,gBAAA;EACA,YAAA;ELstEH;AKptEC;EAA0B,gBAAA;ELutE3B;AKttEC;EAAgC,gBAAA;ELytEjC;AkBxrEC;;;EAGE,qBAAA;EACA,2BAAA;EACA,YAAA;ElB0rEH;AkBtrEC;EACE,cAAA;ElBwrEH;AkB5qED;EACE,0BAAA;ElB8qED;AkBlqED;;;;EAIE,mBAAA;EAEA,4BAAA;ElBmqED;AkBjqEC;;;;EACE,mBAAA;EACA,qBAAA;ElBsqEH;AkBpqEC;;;;EACE,mBAAA;EACA,sBAAA;ElByqEH;AkBpqED;;;;;;;;EAIE,yBAAA;ElB0qED;AkBxqEC;;;;;;;;EACE,kBAAA;ElBirEH;AkB/qEC;;;;;;;;EACE,mBAAA;ElBwrEH;AkB9qED;EACE,qBAAA;ElBgrED;AkBxqED;;EAEE,oBAAA;EACA,gBAAA;EACA,kBAAA;EACA,qBAAA;ElB0qED;AkB/qED;;EAQI,kBAAA;EACA,oBAAA;EACA,kBAAA;EACA,qBAAA;EACA,iBAAA;ElB2qEH;AkBxqED;;;;EAIE,oBAAA;EACA,oBAAA;EACA,oBAAA;ElB0qED;AkBvqED;;EAEE,kBAAA;ElByqED;AkBrqED;;EAEE,uBAAA;EACA,oBAAA;EACA,kBAAA;EACA,wBAAA;EACA,qBAAA;EACA,iBAAA;ElBuqED;AkBrqED;;EAEE,eAAA;EACA,mBAAA;ElBuqED;AkB9pEC;;;;;;EAGE,qBAAA;ElBmqEH;AkB7pEC;;;;EAEE,qBAAA;ElBiqEH;AkB3pEC;;;;EAGI,qBAAA;ElB8pEL;AkBnpED;EAEE,kBAAA;EACA,qBAAA;EAEA,kBAAA;ElBmpED;AkBjpEC;;EAEE,iBAAA;EACA,kBAAA;ElBmpEH;AkBzoED;;EChQE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnB64ED;AmB34EC;;EACE,cAAA;EACA,mBAAA;EnB84EH;AmB34EC;;;;EAEE,cAAA;EnB+4EH;AkBvpED;;ECrQE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,oBAAA;EnBg6ED;AmB95EC;;EACE,cAAA;EACA,mBAAA;EnBi6EH;AmB95EC;;;;EAEE,cAAA;EnBk6EH;AkBhqED;EAEE,oBAAA;ElBiqED;AkBnqED;EAMI,uBAAA;ElBgqEH;AkB5pED;EACE,oBAAA;EACA,QAAA;EACA,UAAA;EACA,YAAA;EACA,gBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,oBAAA;EACA,sBAAA;ElB8pED;AkB5pED;EACE,aAAA;EACA,cAAA;EACA,mBAAA;ElB8pED;AkB5pED;EACE,aAAA;EACA,cAAA;EACA,mBAAA;ElB8pED;AkB1pED;;;;;;;;;;ECrWI,gBAAA;EnB2gFH;AkBtqED;ECjWI,uBAAA;Ed+CF,0DAAA;EACQ,kDAAA;EL49ET;AmB1gFG;EACE,uBAAA;Ed4CJ,2EAAA;EACQ,mEAAA;ELi+ET;AkBhrED;ECvVI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnB0gFH;AkBrrED;ECjVI,gBAAA;EnBygFH;AkBrrED;;;;;;;;;;ECxWI,gBAAA;EnByiFH;AkBjsED;ECpWI,uBAAA;Ed+CF,0DAAA;EACQ,kDAAA;EL0/ET;AmBxiFG;EACE,uBAAA;Ed4CJ,2EAAA;EACQ,mEAAA;EL+/ET;AkB3sED;EC1VI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBwiFH;AkBhtED;ECpVI,gBAAA;EnBuiFH;AkBhtED;;;;;;;;;;EC3WI,gBAAA;EnBukFH;AkB5tED;ECvWI,uBAAA;Ed+CF,0DAAA;EACQ,kDAAA;ELwhFT;AmBtkFG;EACE,uBAAA;Ed4CJ,2EAAA;EACQ,mEAAA;EL6hFT;AkBtuED;EC7VI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBskFH;AkB3uED;ECvVI,gBAAA;EnBqkFH;AkBvuEC;EACG,WAAA;ElByuEJ;AkBvuEC;EACG,QAAA;ElByuEJ;AkB/tED;EACE,gBAAA;EACA,iBAAA;EACA,qBAAA;EACA,gBAAA;ElBiuED;AkB7oED;EAAA;IA/DM,uBAAA;IACA,kBAAA;IACA,wBAAA;IlBgtEH;EkBnpEH;IAxDM,uBAAA;IACA,aAAA;IACA,wBAAA;IlB8sEH;EkBxpEH;IAjDM,uBAAA;IlB4sEH;EkB3pEH;IA7CM,uBAAA;IACA,wBAAA;IlB2sEH;EkB/pEH;;;IAvCQ,aAAA;IlB2sEL;EkBpqEH;IAjCM,aAAA;IlBwsEH;EkBvqEH;IA7BM,kBAAA;IACA,wBAAA;IlBusEH;EkB3qEH;;IApBM,uBAAA;IACA,eAAA;IACA,kBAAA;IACA,wBAAA;IlBmsEH;EkBlrEH;;IAdQ,iBAAA;IlBosEL;EkBtrEH;;IATM,oBAAA;IACA,gBAAA;IlBmsEH;EkB3rEH;IAHM,QAAA;IlBisEH;EACF;AkBvrED;;;;EASI,eAAA;EACA,kBAAA;EACA,kBAAA;ElBorEH;AkB/rED;;EAiBI,kBAAA;ElBkrEH;AkBnsED;EJleE,oBAAA;EACA,qBAAA;EdwqFD;AkBpqEC;EAAA;IANI,mBAAA;IACA,kBAAA;IACA,kBAAA;IlB8qEH;EACF;AkB9sED;EAwCI,aAAA;ElByqEH;AkB5pEC;EAAA;IAHM,qBAAA;IlBmqEL;EACF;AkB1pEC;EAAA;IAHM,kBAAA;IlBiqEL;EACF;AoBpsFD;EACE,uBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,wBAAA;EACA,gCAAA;MAAA,4BAAA;EACA,iBAAA;EACA,wBAAA;EACA,+BAAA;EACA,qBAAA;EC6BA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,oBAAA;EhB4KA,2BAAA;EACG,wBAAA;EACC,uBAAA;EACI,mBAAA;EL+/ET;AoBvsFG;;;;;;EdrBF,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENmuFD;AoB3sFC;;;EAGE,gBAAA;EACA,uBAAA;EpB6sFH;AoB1sFC;;EAEE,YAAA;EACA,wBAAA;Ef2BF,0DAAA;EACQ,kDAAA;ELkrFT;AoB1sFC;;;EAGE,qBAAA;EACA,sBAAA;EE9CF,eAAA;EAGA,2BAAA;EjB8DA,0BAAA;EACQ,kBAAA;EL4rFT;AoBtsFD;ECrDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB8vFD;AqB5vFC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB8vFP;AqB5vFC;;;EAGE,wBAAA;ErB8vFH;AqBzvFG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBuwFT;AoB/uFD;ECnBI,gBAAA;EACA,2BAAA;ErBqwFH;AoBhvFD;ECxDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB2yFD;AqBzyFC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB2yFP;AqBzyFC;;;EAGE,wBAAA;ErB2yFH;AqBtyFG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBozFT;AoBzxFD;ECtBI,gBAAA;EACA,2BAAA;ErBkzFH;AoBzxFD;EC5DE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBw1FD;AqBt1FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBw1FP;AqBt1FC;;;EAGE,wBAAA;ErBw1FH;AqBn1FG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBi2FT;AoBl0FD;EC1BI,gBAAA;EACA,2BAAA;ErB+1FH;AoBl0FD;EChEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBq4FD;AqBn4FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBq4FP;AqBn4FC;;;EAGE,wBAAA;ErBq4FH;AqBh4FG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErB84FT;AoB32FD;EC9BI,gBAAA;EACA,2BAAA;ErB44FH;AoB32FD;ECpEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBk7FD;AqBh7FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBk7FP;AqBh7FC;;;EAGE,wBAAA;ErBk7FH;AqB76FG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErB27FT;AoBp5FD;EClCI,gBAAA;EACA,2BAAA;ErBy7FH;AoBp5FD;ECxEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB+9FD;AqB79FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB+9FP;AqB79FC;;;EAGE,wBAAA;ErB+9FH;AqB19FG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBw+FT;AoB77FD;ECtCI,gBAAA;EACA,2BAAA;ErBs+FH;AoBx7FD;EACE,gBAAA;EACA,qBAAA;EACA,kBAAA;EpB07FD;AoBx7FC;;;;;EAKE,+BAAA;Ef7BF,0BAAA;EACQ,kBAAA;ELw9FT;AoBz7FC;;;;EAIE,2BAAA;EpB27FH;AoBz7FC;;EAEE,gBAAA;EACA,4BAAA;EACA,+BAAA;EpB27FH;AoBv7FG;;;;EAEE,gBAAA;EACA,uBAAA;EpB27FL;AoBl7FD;;EC/EE,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,oBAAA;ErBqgGD;AoBr7FD;;ECnFE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;ErB4gGD;AoBx7FD;;ECvFE,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;ErBmhGD;AoBv7FD;EACE,gBAAA;EACA,aAAA;EpBy7FD;AoBr7FD;EACE,iBAAA;EpBu7FD;AoBh7FC;;;EACE,aAAA;EpBo7FH;AuBxkGD;EACE,YAAA;ElBoLA,0CAAA;EACK,qCAAA;EACG,kCAAA;ELu5FT;AuB3kGC;EACE,YAAA;EvB6kGH;AuBzkGD;EACE,eAAA;EACA,oBAAA;EvB2kGD;AuBzkGC;EAAY,gBAAA;EAAgB,qBAAA;EvB6kG7B;AuB5kGC;EAAY,oBAAA;EvB+kGb;AuB9kGC;EAAY,0BAAA;EvBilGb;AuB9kGD;EACE,oBAAA;EACA,WAAA;EACA,kBAAA;ElBsKA,iDAAA;EACQ,4CAAA;KAAA,yCAAA;EAOR,oCAAA;EACQ,+BAAA;KAAA,4BAAA;EAGR,0CAAA;EACQ,qCAAA;KAAA,kCAAA;ELm6FT;AwB7mGD;EACE,uBAAA;EACA,UAAA;EACA,WAAA;EACA,kBAAA;EACA,wBAAA;EACA,uBAAA;EACA,qCAAA;EACA,oCAAA;ExB+mGD;AwB3mGD;EACE,oBAAA;ExB6mGD;AwBzmGD;EACE,YAAA;ExB2mGD;AwBvmGD;EACE,oBAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,2BAAA;EACA,2BAAA;EACA,uCAAA;EACA,oBAAA;EnBwBA,qDAAA;EACQ,6CAAA;EmBvBR,sCAAA;UAAA,8BAAA;ExB0mGD;AwBrmGC;EACE,UAAA;EACA,YAAA;ExBumGH;AwBhoGD;ECvBE,aAAA;EACA,eAAA;EACA,kBAAA;EACA,2BAAA;EzB0pGD;AwBtoGD;EAmCI,gBAAA;EACA,mBAAA;EACA,aAAA;EACA,qBAAA;EACA,yBAAA;EACA,gBAAA;EACA,qBAAA;ExBsmGH;AwBhmGC;;EAEE,uBAAA;EACA,gBAAA;EACA,2BAAA;ExBkmGH;AwB5lGC;;;EAGE,gBAAA;EACA,uBAAA;EACA,YAAA;EACA,2BAAA;ExB8lGH;AwBrlGC;;;EAGE,gBAAA;ExBulGH;AwBnlGC;;EAEE,uBAAA;EACA,+BAAA;EACA,wBAAA;EEzGF,qEAAA;EF2GE,qBAAA;ExBqlGH;AwBhlGD;EAGI,gBAAA;ExBglGH;AwBnlGD;EAQI,YAAA;ExB8kGH;AwBtkGD;EACE,YAAA;EACA,UAAA;ExBwkGD;AwBhkGD;EACE,SAAA;EACA,aAAA;ExBkkGD;AwB9jGD;EACE,gBAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,qBAAA;ExBgkGD;AwB5jGD;EACE,iBAAA;EACA,SAAA;EACA,UAAA;EACA,WAAA;EACA,QAAA;EACA,cAAA;ExB8jGD;AwB1jGD;EACE,UAAA;EACA,YAAA;ExB4jGD;AwBpjGD;;EAII,eAAA;EACA,0BAAA;EACA,aAAA;ExBojGH;AwB1jGD;;EAUI,WAAA;EACA,cAAA;EACA,oBAAA;ExBojGH;AwB/hGD;EAXE;IAnEA,YAAA;IACA,UAAA;IxBinGC;EwB/iGD;IAzDA,SAAA;IACA,aAAA;IxB2mGC;EACF;A2BzvGD;;EAEE,oBAAA;EACA,uBAAA;EACA,wBAAA;E3B2vGD;A2B/vGD;;EAMI,oBAAA;EACA,aAAA;E3B6vGH;A2B3vGG;;;;;;;;EAIE,YAAA;E3BiwGL;A2B/vGG;;EAEE,YAAA;E3BiwGL;A2B3vGD;;;;EAKI,mBAAA;E3B4vGH;A2BvvGD;EACE,mBAAA;E3ByvGD;A2B1vGD;;EAMI,aAAA;E3BwvGH;A2B9vGD;;;EAWI,kBAAA;E3BwvGH;A2BpvGD;EACE,kBAAA;E3BsvGD;A2BlvGD;EACE,gBAAA;E3BovGD;A2BnvGC;ECrDA,+BAAA;EACG,4BAAA;E5B2yGJ;A2BlvGD;;EClDE,8BAAA;EACG,2BAAA;E5BwyGJ;A2BjvGD;EACE,aAAA;E3BmvGD;A2BjvGD;EACE,kBAAA;E3BmvGD;A2BjvGD;;ECtEE,+BAAA;EACG,4BAAA;E5B2zGJ;A2BhvGD;ECpEE,8BAAA;EACG,2BAAA;E5BuzGJ;A2B/uGD;;EAEE,YAAA;E3BivGD;A2BhuGD;EACE,mBAAA;EACA,oBAAA;E3BkuGD;A2BhuGD;EACE,oBAAA;EACA,qBAAA;E3BkuGD;A2B7tGD;EtBlDE,0DAAA;EACQ,kDAAA;ELkxGT;A2B7tGC;EtBtDA,0BAAA;EACQ,kBAAA;ELsxGT;A2B1tGD;EACE,gBAAA;E3B4tGD;A2BztGD;EACE,yBAAA;EACA,wBAAA;E3B2tGD;A2BxtGD;EACE,yBAAA;E3B0tGD;A2BntGD;;;EAII,gBAAA;EACA,aAAA;EACA,aAAA;EACA,iBAAA;E3BotGH;A2B3tGD;EAcM,aAAA;E3BgtGL;A2B9tGD;;;;EAsBI,kBAAA;EACA,gBAAA;E3B8sGH;A2BzsGC;EACE,kBAAA;E3B2sGH;A2BzsGC;EACE,8BAAA;ECvKF,+BAAA;EACC,8BAAA;E5Bm3GF;A2B1sGC;EACE,gCAAA;ECnLF,4BAAA;EACC,2BAAA;E5Bg4GF;A2B1sGD;EACE,kBAAA;E3B4sGD;A2B1sGD;;EClLE,+BAAA;EACC,8BAAA;E5Bg4GF;A2BzsGD;EChME,4BAAA;EACC,2BAAA;E5B44GF;A2BrsGD;EACE,gBAAA;EACA,aAAA;EACA,qBAAA;EACA,2BAAA;E3BusGD;A2B3sGD;;EAOI,aAAA;EACA,qBAAA;EACA,WAAA;E3BwsGH;A2BjtGD;EAYI,aAAA;E3BwsGH;A2BptGD;EAgBI,YAAA;E3BusGH;A2BtrGD;;;;EAKM,oBAAA;EACA,wBAAA;EACA,sBAAA;E3BurGL;A6Bp6GD;EACE,oBAAA;EACA,gBAAA;EACA,2BAAA;E7Bs6GD;A6Bn6GC;EACE,aAAA;EACA,iBAAA;EACA,kBAAA;E7Bq6GH;A6B96GD;EAeI,oBAAA;EACA,YAAA;EAKA,aAAA;EAEA,aAAA;EACA,kBAAA;E7B65GH;A6Bp5GD;;;EV8BE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,oBAAA;EnB23GD;AmBz3GC;;;EACE,cAAA;EACA,mBAAA;EnB63GH;AmB13GC;;;;;;EAEE,cAAA;EnBg4GH;A6Bt6GD;;;EVyBE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnBk5GD;AmBh5GC;;;EACE,cAAA;EACA,mBAAA;EnBo5GH;AmBj5GC;;;;;;EAEE,cAAA;EnBu5GH;A6Bp7GD;;;EAGE,qBAAA;E7Bs7GD;A6Bp7GC;;;EACE,kBAAA;E7Bw7GH;A6Bp7GD;;EAEE,WAAA;EACA,qBAAA;EACA,wBAAA;E7Bs7GD;A6Bj7GD;EACE,mBAAA;EACA,iBAAA;EACA,qBAAA;EACA,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;E7Bm7GD;A6Bh7GC;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;E7Bk7GH;A6Bh7GC;EACE,oBAAA;EACA,iBAAA;EACA,oBAAA;E7Bk7GH;A6Bt8GD;;EA0BI,eAAA;E7Bg7GH;A6B36GD;;;;;;;EDhGE,+BAAA;EACG,4BAAA;E5BohHJ;A6B56GD;EACE,iBAAA;E7B86GD;A6B56GD;;;;;;;EDpGE,8BAAA;EACG,2BAAA;E5ByhHJ;A6B76GD;EACE,gBAAA;E7B+6GD;A6B16GD;EACE,oBAAA;EAGA,cAAA;EACA,qBAAA;E7B06GD;A6B/6GD;EAUI,oBAAA;E7Bw6GH;A6Bl7GD;EAYM,mBAAA;E7By6GL;A6Bt6GG;;;EAGE,YAAA;E7Bw6GL;A6Bn6GC;;EAGI,oBAAA;E7Bo6GL;A6Bj6GC;;EAGI,mBAAA;E7Bk6GL;A8B5jHD;EACE,kBAAA;EACA,iBAAA;EACA,kBAAA;E9B8jHD;A8BjkHD;EAOI,oBAAA;EACA,gBAAA;E9B6jHH;A8BrkHD;EAWM,oBAAA;EACA,gBAAA;EACA,oBAAA;E9B6jHL;A8B5jHK;;EAEE,uBAAA;EACA,2BAAA;E9B8jHP;A8BzjHG;EACE,gBAAA;E9B2jHL;A8BzjHK;;EAEE,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,qBAAA;E9B2jHP;A8BpjHG;;;EAGE,2BAAA;EACA,uBAAA;E9BsjHL;A8B/lHD;ELHE,aAAA;EACA,eAAA;EACA,kBAAA;EACA,2BAAA;EzBqmHD;A8BrmHD;EA0DI,iBAAA;E9B8iHH;A8BriHD;EACE,kCAAA;E9BuiHD;A8BxiHD;EAGI,aAAA;EAEA,qBAAA;E9BuiHH;A8B5iHD;EASM,mBAAA;EACA,yBAAA;EACA,+BAAA;EACA,4BAAA;E9BsiHL;A8BriHK;EACE,uCAAA;E9BuiHP;A8BjiHK;;;EAGE,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,kCAAA;EACA,iBAAA;E9BmiHP;A8B9hHC;EAqDA,aAAA;EA8BA,kBAAA;E9B+8GD;A8BliHC;EAwDE,aAAA;E9B6+GH;A8BriHC;EA0DI,oBAAA;EACA,oBAAA;E9B8+GL;A8BziHC;EAgEE,WAAA;EACA,YAAA;E9B4+GH;A8Bh+GD;EAAA;IAPM,qBAAA;IACA,WAAA;I9B2+GH;E8Br+GH;IAJQ,kBAAA;I9B4+GL;EACF;A8BtjHC;EAuFE,iBAAA;EACA,oBAAA;E9Bk+GH;A8B1jHC;;;EA8FE,2BAAA;E9Bi+GH;A8Bn9GD;EAAA;IATM,kCAAA;IACA,4BAAA;I9Bg+GH;E8Bx9GH;;;IAHM,8BAAA;I9Bg+GH;EACF;A8BjkHD;EAEI,aAAA;E9BkkHH;A8BpkHD;EAMM,oBAAA;E9BikHL;A8BvkHD;EASM,kBAAA;E9BikHL;A8B5jHK;;;EAGE,gBAAA;EACA,2BAAA;E9B8jHP;A8BtjHD;EAEI,aAAA;E9BujHH;A8BzjHD;EAIM,iBAAA;EACA,gBAAA;E9BwjHL;A8B5iHD;EACE,aAAA;E9B8iHD;A8B/iHD;EAII,aAAA;E9B8iHH;A8BljHD;EAMM,oBAAA;EACA,oBAAA;E9B+iHL;A8BtjHD;EAYI,WAAA;EACA,YAAA;E9B6iHH;A8BjiHD;EAAA;IAPM,qBAAA;IACA,WAAA;I9B4iHH;E8BtiHH;IAJQ,kBAAA;I9B6iHL;EACF;A8BriHD;EACE,kBAAA;E9BuiHD;A8BxiHD;EAKI,iBAAA;EACA,oBAAA;E9BsiHH;A8B5iHD;;;EAYI,2BAAA;E9BqiHH;A8BvhHD;EAAA;IATM,kCAAA;IACA,4BAAA;I9BoiHH;E8B5hHH;;;IAHM,8BAAA;I9BoiHH;EACF;A8B3hHD;EAEI,eAAA;EACA,oBAAA;E9B4hHH;A8B/hHD;EAMI,gBAAA;EACA,qBAAA;E9B4hHH;A8BnhHD;EAEE,kBAAA;EF7OA,4BAAA;EACC,2BAAA;E5BkwHF;A+B5vHD;EACE,oBAAA;EACA,kBAAA;EACA,qBAAA;EACA,+BAAA;E/B8vHD;A+BtvHD;EAAA;IAFI,oBAAA;I/B4vHD;EACF;A+B7uHD;EAAA;IAFI,aAAA;I/BmvHD;EACF;A+BruHD;EACE,qBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mCAAA;EACA,4DAAA;UAAA,oDAAA;EAEA,mCAAA;E/BsuHD;A+BpuHC;EACE,kBAAA;E/BsuHH;A+BzsHD;EAAA;IAzBI,aAAA;IACA,eAAA;IACA,0BAAA;YAAA,kBAAA;I/BsuHD;E+BpuHC;IACE,2BAAA;IACA,gCAAA;IACA,yBAAA;IACA,mBAAA;IACA,8BAAA;I/BsuHH;E+BnuHC;IACE,qBAAA;I/BquHH;E+BhuHC;;;IAGE,iBAAA;IACA,kBAAA;I/BkuHH;EACF;A+B9tHD;;EAGI,mBAAA;E/B+tHH;A+B1tHC;EAAA;;IAFI,mBAAA;I/BiuHH;EACF;A+BxtHD;;;;EAII,qBAAA;EACA,oBAAA;E/B0tHH;A+BptHC;EAAA;;;;IAHI,iBAAA;IACA,gBAAA;I/B8tHH;EACF;A+BltHD;EACE,eAAA;EACA,uBAAA;E/BotHD;A+B/sHD;EAAA;IAFI,kBAAA;I/BqtHD;EACF;A+BjtHD;;EAEE,iBAAA;EACA,UAAA;EACA,SAAA;EACA,eAAA;E/BmtHD;A+B7sHD;EAAA;;IAFI,kBAAA;I/BotHD;EACF;A+BltHD;EACE,QAAA;EACA,uBAAA;E/BotHD;A+BltHD;EACE,WAAA;EACA,kBAAA;EACA,uBAAA;E/BotHD;A+B9sHD;EACE,aAAA;EACA,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,cAAA;E/BgtHD;A+B9sHC;;EAEE,uBAAA;E/BgtHH;A+BztHD;EAaI,gBAAA;E/B+sHH;A+BtsHD;EALI;;IAEE,oBAAA;I/B8sHH;EACF;A+BpsHD;EACE,oBAAA;EACA,cAAA;EACA,oBAAA;EACA,mBAAA;EC/LA,iBAAA;EACA,oBAAA;EDgMA,+BAAA;EACA,wBAAA;EACA,+BAAA;EACA,oBAAA;E/BusHD;A+BnsHC;EACE,YAAA;E/BqsHH;A+BntHD;EAmBI,gBAAA;EACA,aAAA;EACA,aAAA;EACA,oBAAA;E/BmsHH;A+BztHD;EAyBI,iBAAA;E/BmsHH;A+B7rHD;EAAA;IAFI,eAAA;I/BmsHD;EACF;A+B1rHD;EACE,qBAAA;E/B4rHD;A+B7rHD;EAII,mBAAA;EACA,sBAAA;EACA,mBAAA;E/B4rHH;A+BjqHC;EAAA;IArBI,kBAAA;IACA,aAAA;IACA,aAAA;IACA,eAAA;IACA,+BAAA;IACA,WAAA;IACA,0BAAA;YAAA,kBAAA;I/B0rHH;E+B3qHD;;IAZM,4BAAA;I/B2rHL;E+B/qHD;IATM,mBAAA;I/B2rHL;E+B1rHK;;IAEE,wBAAA;I/B4rHP;EACF;A+B1qHD;EAAA;IAXI,aAAA;IACA,WAAA;I/ByrHD;E+B/qHH;IAPM,aAAA;I/ByrHH;E+BlrHH;IALQ,mBAAA;IACA,sBAAA;I/B0rHL;EACF;A+B/qHD;EACE,oBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mCAAA;EACA,sCAAA;E1B/NA,8FAAA;EACQ,sFAAA;E2B/DR,iBAAA;EACA,oBAAA;EhCi9HD;AkB/+GD;EAAA;IA/DM,uBAAA;IACA,kBAAA;IACA,wBAAA;IlBkjHH;EkBr/GH;IAxDM,uBAAA;IACA,aAAA;IACA,wBAAA;IlBgjHH;EkB1/GH;IAjDM,uBAAA;IlB8iHH;EkB7/GH;IA7CM,uBAAA;IACA,wBAAA;IlB6iHH;EkBjgHH;;;IAvCQ,aAAA;IlB6iHL;EkBtgHH;IAjCM,aAAA;IlB0iHH;EkBzgHH;IA7BM,kBAAA;IACA,wBAAA;IlByiHH;EkB7gHH;;IApBM,uBAAA;IACA,eAAA;IACA,kBAAA;IACA,wBAAA;IlBqiHH;EkBphHH;;IAdQ,iBAAA;IlBsiHL;EkBxhHH;;IATM,oBAAA;IACA,gBAAA;IlBqiHH;EkB7hHH;IAHM,QAAA;IlBmiHH;EACF;A+BxtHC;EAAA;IANI,oBAAA;I/BkuHH;E+BhuHG;IACE,kBAAA;I/BkuHL;EACF;A+BjtHD;EAAA;IARI,aAAA;IACA,WAAA;IACA,gBAAA;IACA,iBAAA;IACA,gBAAA;IACA,mBAAA;I1B1PF,0BAAA;IACQ,kBAAA;ILw9HP;EACF;A+BvtHD;EACE,eAAA;EHrUA,4BAAA;EACC,2BAAA;E5B+hIF;A+BvtHD;EHjUE,+BAAA;EACC,8BAAA;E5B2hIF;A+BltHD;EC/UE,iBAAA;EACA,oBAAA;EhCoiID;A+BntHC;EClVA,kBAAA;EACA,qBAAA;EhCwiID;A+BptHC;ECrVA,kBAAA;EACA,qBAAA;EhC4iID;A+B9sHD;EC/VE,kBAAA;EACA,qBAAA;EhCgjID;A+B1sHD;EAAA;IAJI,aAAA;IACA,mBAAA;IACA,oBAAA;I/BktHD;EACF;A+BzrHD;EAZE;IEvWA,wBAAA;IjCgjIC;E+BxsHD;IE3WA,yBAAA;IF6WE,qBAAA;I/B0sHD;E+B5sHD;IAKI,iBAAA;I/B0sHH;EACF;A+BjsHD;EACE,2BAAA;EACA,uBAAA;E/BmsHD;A+BrsHD;EAKI,gBAAA;E/BmsHH;A+BlsHG;;EAEE,gBAAA;EACA,+BAAA;E/BosHL;A+B7sHD;EAcI,gBAAA;E/BksHH;A+BhtHD;EAmBM,gBAAA;E/BgsHL;A+B9rHK;;EAEE,gBAAA;EACA,+BAAA;E/BgsHP;A+B5rHK;;;EAGE,gBAAA;EACA,2BAAA;E/B8rHP;A+B1rHK;;;EAGE,gBAAA;EACA,+BAAA;E/B4rHP;A+BpuHD;EA8CI,uBAAA;E/ByrHH;A+BxrHG;;EAEE,2BAAA;E/B0rHL;A+B3uHD;EAoDM,2BAAA;E/B0rHL;A+B9uHD;;EA0DI,uBAAA;E/BwrHH;A+BjrHK;;;EAGE,2BAAA;EACA,gBAAA;E/BmrHP;A+BlpHC;EAAA;IAzBQ,gBAAA;I/B+qHP;E+B9qHO;;IAEE,gBAAA;IACA,+BAAA;I/BgrHT;E+B5qHO;;;IAGE,gBAAA;IACA,2BAAA;I/B8qHT;E+B1qHO;;;IAGE,gBAAA;IACA,+BAAA;I/B4qHT;EACF;A+B9wHD;EA8GI,gBAAA;E/BmqHH;A+BlqHG;EACE,gBAAA;E/BoqHL;A+BpxHD;EAqHI,gBAAA;E/BkqHH;A+BjqHG;;EAEE,gBAAA;E/BmqHL;A+B/pHK;;;;EAEE,gBAAA;E/BmqHP;A+B3pHD;EACE,2BAAA;EACA,uBAAA;E/B6pHD;A+B/pHD;EAKI,gBAAA;E/B6pHH;A+B5pHG;;EAEE,gBAAA;EACA,+BAAA;E/B8pHL;A+BvqHD;EAcI,gBAAA;E/B4pHH;A+B1qHD;EAmBM,gBAAA;E/B0pHL;A+BxpHK;;EAEE,gBAAA;EACA,+BAAA;E/B0pHP;A+BtpHK;;;EAGE,gBAAA;EACA,2BAAA;E/BwpHP;A+BppHK;;;EAGE,gBAAA;EACA,+BAAA;E/BspHP;A+B9rHD;EA+CI,uBAAA;E/BkpHH;A+BjpHG;;EAEE,2BAAA;E/BmpHL;A+BrsHD;EAqDM,2BAAA;E/BmpHL;A+BxsHD;;EA2DI,uBAAA;E/BipHH;A+B3oHK;;;EAGE,2BAAA;EACA,gBAAA;E/B6oHP;A+BtmHC;EAAA;IA/BQ,uBAAA;I/ByoHP;E+B1mHD;IA5BQ,2BAAA;I/ByoHP;E+B7mHD;IAzBQ,gBAAA;I/ByoHP;E+BxoHO;;IAEE,gBAAA;IACA,+BAAA;I/B0oHT;E+BtoHO;;;IAGE,gBAAA;IACA,2BAAA;I/BwoHT;E+BpoHO;;;IAGE,gBAAA;IACA,+BAAA;I/BsoHT;EACF;A+B9uHD;EA+GI,gBAAA;E/BkoHH;A+BjoHG;EACE,gBAAA;E/BmoHL;A+BpvHD;EAsHI,gBAAA;E/BioHH;A+BhoHG;;EAEE,gBAAA;E/BkoHL;A+B9nHK;;;;EAEE,gBAAA;E/BkoHP;AkC3wID;EACE,mBAAA;EACA,qBAAA;EACA,kBAAA;EACA,2BAAA;EACA,oBAAA;ElC6wID;AkClxID;EAQI,uBAAA;ElC6wIH;AkCrxID;EAWM,mBAAA;EACA,gBAAA;EACA,gBAAA;ElC6wIL;AkC1xID;EAkBI,gBAAA;ElC2wIH;AmC/xID;EACE,uBAAA;EACA,iBAAA;EACA,gBAAA;EACA,oBAAA;EnCiyID;AmCryID;EAOI,iBAAA;EnCiyIH;AmCxyID;;EAUM,oBAAA;EACA,aAAA;EACA,mBAAA;EACA,yBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,mBAAA;EnCkyIL;AmChyIG;;EAGI,gBAAA;EPXN,gCAAA;EACG,6BAAA;E5B6yIJ;AmC/xIG;;EPvBF,iCAAA;EACG,8BAAA;E5B0zIJ;AmC1xIG;;;;EAEE,gBAAA;EACA,2BAAA;EACA,uBAAA;EnC8xIL;AmCxxIG;;;;;;EAGE,YAAA;EACA,gBAAA;EACA,2BAAA;EACA,uBAAA;EACA,iBAAA;EnC6xIL;AmCn1ID;;;;;;EAiEM,gBAAA;EACA,2BAAA;EACA,uBAAA;EACA,qBAAA;EnC0xIL;AmCjxID;;EC1EM,oBAAA;EACA,iBAAA;EpC+1IL;AoC71IG;;ERMF,gCAAA;EACG,6BAAA;E5B21IJ;AoC51IG;;ERRF,iCAAA;EACG,8BAAA;E5Bw2IJ;AmC3xID;;EC/EM,mBAAA;EACA,iBAAA;EpC82IL;AoC52IG;;ERMF,gCAAA;EACG,6BAAA;E5B02IJ;AoC32IG;;ERRF,iCAAA;EACG,8BAAA;E5Bu3IJ;AqC13ID;EACE,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,oBAAA;ErC43ID;AqCh4ID;EAOI,iBAAA;ErC43IH;AqCn4ID;;EAUM,uBAAA;EACA,mBAAA;EACA,2BAAA;EACA,2BAAA;EACA,qBAAA;ErC63IL;AqC34ID;;EAmBM,uBAAA;EACA,2BAAA;ErC43IL;AqCh5ID;;EA2BM,cAAA;ErCy3IL;AqCp5ID;;EAkCM,aAAA;ErCs3IL;AqCx5ID;;;;EA2CM,gBAAA;EACA,2BAAA;EACA,qBAAA;ErCm3IL;AsCj6ID;EACE,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,qBAAA;EACA,0BAAA;EACA,sBAAA;EtCm6ID;AsC/5IG;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;EtCi6IL;AsC55IC;EACE,eAAA;EtC85IH;AsC15IC;EACE,oBAAA;EACA,WAAA;EtC45IH;AsCr5ID;ECtCE,2BAAA;EvC87ID;AuC37IG;;EAEE,2BAAA;EvC67IL;AsCx5ID;EC1CE,2BAAA;EvCq8ID;AuCl8IG;;EAEE,2BAAA;EvCo8IL;AsC35ID;EC9CE,2BAAA;EvC48ID;AuCz8IG;;EAEE,2BAAA;EvC28IL;AsC95ID;EClDE,2BAAA;EvCm9ID;AuCh9IG;;EAEE,2BAAA;EvCk9IL;AsCj6ID;ECtDE,2BAAA;EvC09ID;AuCv9IG;;EAEE,2BAAA;EvCy9IL;AsCp6ID;EC1DE,2BAAA;EvCi+ID;AuC99IG;;EAEE,2BAAA;EvCg+IL;AwCl+ID;EACE,uBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,0BAAA;EACA,qBAAA;EACA,oBAAA;EACA,2BAAA;EACA,qBAAA;ExCo+ID;AwCj+IC;EACE,eAAA;ExCm+IH;AwC/9IC;EACE,oBAAA;EACA,WAAA;ExCi+IH;AwC/9IC;EACE,QAAA;EACA,kBAAA;ExCi+IH;AwC59IG;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;ExC89IL;AwCz9IC;;EAEE,gBAAA;EACA,2BAAA;ExC29IH;AwCz9IC;EACE,kBAAA;ExC29IH;AyC1gJD;EACE,oBAAA;EACA,qBAAA;EACA,gBAAA;EACA,2BAAA;EzC4gJD;AyChhJD;;EAQI,gBAAA;EzC4gJH;AyCphJD;EAWI,qBAAA;EACA,iBAAA;EACA,kBAAA;EzC4gJH;AyCzhJD;EAiBI,2BAAA;EzC2gJH;AyCxgJC;;EAEE,oBAAA;EzC0gJH;AyChiJD;EA0BI,iBAAA;EzCygJH;AyCz/ID;EAAA;IAZI,iBAAA;IzCygJD;EyCvgJC;IACE,oBAAA;IACA,qBAAA;IzCygJH;EyCjgJH;;IAHM,iBAAA;IzCwgJH;EACF;A0C/iJD;EACE,gBAAA;EACA,cAAA;EACA,qBAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;ErCiLA,6CAAA;EACK,wCAAA;EACG,qCAAA;ELi4IT;A0C3jJD;;EAaI,mBAAA;EACA,oBAAA;E1CkjJH;A0C9iJC;;;EAGE,uBAAA;E1CgjJH;A0CrkJD;EA0BI,cAAA;EACA,gBAAA;E1C8iJH;A2CvkJD;EACE,eAAA;EACA,qBAAA;EACA,+BAAA;EACA,oBAAA;E3CykJD;A2C7kJD;EAQI,eAAA;EAEA,gBAAA;E3CukJH;A2CjlJD;EAcI,mBAAA;E3CskJH;A2CplJD;;EAoBI,kBAAA;E3CokJH;A2CxlJD;EAuBI,iBAAA;E3CokJH;A2C5jJD;;EAEE,qBAAA;E3C8jJD;A2ChkJD;;EAMI,oBAAA;EACA,WAAA;EACA,cAAA;EACA,gBAAA;E3C8jJH;A2CtjJD;ECrDE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5C8mJD;A2C3jJD;EChDI,2BAAA;E5C8mJH;A2C9jJD;EC7CI,gBAAA;E5C8mJH;A2C9jJD;ECxDE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5CynJD;A2CnkJD;ECnDI,2BAAA;E5CynJH;A2CtkJD;EChDI,gBAAA;E5CynJH;A2CtkJD;EC3DE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5CooJD;A2C3kJD;ECtDI,2BAAA;E5CooJH;A2C9kJD;ECnDI,gBAAA;E5CooJH;A2C9kJD;EC9DE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5C+oJD;A2CnlJD;ECzDI,2BAAA;E5C+oJH;A2CtlJD;ECtDI,gBAAA;E5C+oJH;A6CjpJD;EACE;IAAQ,6BAAA;I7CopJP;E6CnpJD;IAAQ,0BAAA;I7CspJP;EACF;A6CnpJD;EACE;IAAQ,6BAAA;I7CspJP;E6CrpJD;IAAQ,0BAAA;I7CwpJP;EACF;A6C3pJD;EACE;IAAQ,6BAAA;I7CspJP;E6CrpJD;IAAQ,0BAAA;I7CwpJP;EACF;A6CjpJD;EACE,kBAAA;EACA,cAAA;EACA,qBAAA;EACA,2BAAA;EACA,oBAAA;ExCsCA,wDAAA;EACQ,gDAAA;EL8mJT;A6ChpJD;EACE,aAAA;EACA,WAAA;EACA,cAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2BAAA;ExCyBA,wDAAA;EACQ,gDAAA;EAyHR,qCAAA;EACK,gCAAA;EACG,6BAAA;ELkgJT;A6C7oJD;;ECCI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDAF,oCAAA;UAAA,4BAAA;E7CipJD;A6C1oJD;;ExC5CE,4DAAA;EACK,uDAAA;EACG,oDAAA;EL0rJT;A6CvoJD;EErEE,2BAAA;E/C+sJD;A+C5sJC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9C+pJH;A6C3oJD;EEzEE,2BAAA;E/CutJD;A+CptJC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9CuqJH;A6C/oJD;EE7EE,2BAAA;E/C+tJD;A+C5tJC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9C+qJH;A6CnpJD;EEjFE,2BAAA;E/CuuJD;A+CpuJC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9CurJH;AgD/uJD;EAEE,kBAAA;EhDgvJD;AgD9uJC;EACE,eAAA;EhDgvJH;AgD5uJD;;EAEE,oBAAA;EhD8uJD;AgD3uJD;;EAEE,qBAAA;EhD6uJD;AgD1uJD;;;EAGE,qBAAA;EACA,qBAAA;EhD4uJD;AgDzuJD;EACE,wBAAA;EhD2uJD;AgDxuJD;EACE,wBAAA;EhD0uJD;AgDtuJD;EACE,eAAA;EACA,oBAAA;EhDwuJD;AgDluJD;EACE,iBAAA;EACA,kBAAA;EhDouJD;AiDxwJD;EAEE,qBAAA;EACA,iBAAA;EjDywJD;AiDjwJD;EACE,oBAAA;EACA,gBAAA;EACA,oBAAA;EAEA,qBAAA;EACA,2BAAA;EACA,2BAAA;EjDkwJD;AiD/vJC;ErB3BA,8BAAA;EACC,6BAAA;E5B6xJF;AiDhwJC;EACE,kBAAA;ErBvBF,iCAAA;EACC,gCAAA;E5B0xJF;AiDlxJD;EAoBI,cAAA;EjDiwJH;AiDrxJD;EAuBI,mBAAA;EjDiwJH;AiDvvJD;EACE,gBAAA;EjDyvJD;AiD1vJD;EAII,gBAAA;EjDyvJH;AiDrvJC;;EAEE,uBAAA;EACA,gBAAA;EACA,2BAAA;EjDuvJH;AiDjvJC;;;EAGE,2BAAA;EACA,gBAAA;EACA,qBAAA;EjDmvJH;AiDxvJC;;;EASI,gBAAA;EjDovJL;AiD7vJC;;;EAYI,gBAAA;EjDsvJL;AiDjvJC;;;EAGE,YAAA;EACA,gBAAA;EACA,2BAAA;EACA,uBAAA;EjDmvJH;AiDzvJC;;;;;;;;;EAYI,gBAAA;EjDwvJL;AiDpwJC;;;EAeI,gBAAA;EjD0vJL;AkD91JC;EACE,gBAAA;EACA,2BAAA;ElDg2JH;AkD91JG;EACE,gBAAA;ElDg2JL;AkDj2JG;EAII,gBAAA;ElDg2JP;AkD71JK;;EAEE,gBAAA;EACA,2BAAA;ElD+1JP;AkD71JK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElD+1JP;AkDp3JC;EACE,gBAAA;EACA,2BAAA;ElDs3JH;AkDp3JG;EACE,gBAAA;ElDs3JL;AkDv3JG;EAII,gBAAA;ElDs3JP;AkDn3JK;;EAEE,gBAAA;EACA,2BAAA;ElDq3JP;AkDn3JK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDq3JP;AkD14JC;EACE,gBAAA;EACA,2BAAA;ElD44JH;AkD14JG;EACE,gBAAA;ElD44JL;AkD74JG;EAII,gBAAA;ElD44JP;AkDz4JK;;EAEE,gBAAA;EACA,2BAAA;ElD24JP;AkDz4JK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElD24JP;AkDh6JC;EACE,gBAAA;EACA,2BAAA;ElDk6JH;AkDh6JG;EACE,gBAAA;ElDk6JL;AkDn6JG;EAII,gBAAA;ElDk6JP;AkD/5JK;;EAEE,gBAAA;EACA,2BAAA;ElDi6JP;AkD/5JK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDi6JP;AiD7zJD;EACE,eAAA;EACA,oBAAA;EjD+zJD;AiD7zJD;EACE,kBAAA;EACA,kBAAA;EjD+zJD;AmD37JD;EACE,qBAAA;EACA,2BAAA;EACA,+BAAA;EACA,oBAAA;E9C0DA,mDAAA;EACQ,2CAAA;ELo4JT;AmD17JD;EACE,eAAA;EnD47JD;AmDv7JD;EACE,oBAAA;EACA,sCAAA;EvBpBA,8BAAA;EACC,6BAAA;E5B88JF;AmD77JD;EAMI,gBAAA;EnD07JH;AmDr7JD;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;EnDu7JD;AmD37JD;EAOI,gBAAA;EnDu7JH;AmDl7JD;EACE,oBAAA;EACA,2BAAA;EACA,+BAAA;EvBpCA,iCAAA;EACC,gCAAA;E5By9JF;AmD56JD;;EAGI,kBAAA;EnD66JH;AmDh7JD;;EAMM,qBAAA;EACA,kBAAA;EnD86JL;AmD16JG;;EAEI,eAAA;EvBnEN,8BAAA;EACC,6BAAA;E5Bg/JF;AmDz6JG;;EAEI,kBAAA;EvBlEN,iCAAA;EACC,gCAAA;E5B8+JF;AmDt6JD;EAEI,qBAAA;EnDu6JH;AmDp6JD;EACE,qBAAA;EnDs6JD;AmD95JD;;;EAII,kBAAA;EnD+5JH;AmDn6JD;;;EAOM,oBAAA;EACA,qBAAA;EnDi6JL;AmDz6JD;;EvB/FE,8BAAA;EACC,6BAAA;E5B4gKF;AmD96JD;;;;EAmBQ,6BAAA;EACA,8BAAA;EnDi6JP;AmDr7JD;;;;;;;;EAwBU,6BAAA;EnDu6JT;AmD/7JD;;;;;;;;EA4BU,8BAAA;EnD66JT;AmDz8JD;;EvBvFE,iCAAA;EACC,gCAAA;E5BoiKF;AmD98JD;;;;EAyCQ,gCAAA;EACA,iCAAA;EnD26JP;AmDr9JD;;;;;;;;EA8CU,gCAAA;EnDi7JT;AmD/9JD;;;;;;;;EAkDU,iCAAA;EnDu7JT;AmDz+JD;;;;EA2DI,+BAAA;EnDo7JH;AmD/+JD;;EA+DI,eAAA;EnDo7JH;AmDn/JD;;EAmEI,WAAA;EnDo7JH;AmDv/JD;;;;;;;;;;;;EA0EU,gBAAA;EnD27JT;AmDrgKD;;;;;;;;;;;;EA8EU,iBAAA;EnDq8JT;AmDnhKD;;;;;;;;EAuFU,kBAAA;EnDs8JT;AmD7hKD;;;;;;;;EAgGU,kBAAA;EnDu8JT;AmDviKD;EAsGI,WAAA;EACA,kBAAA;EnDo8JH;AmD17JD;EACE,qBAAA;EnD47JD;AmD77JD;EAKI,kBAAA;EACA,oBAAA;EnD27JH;AmDj8JD;EASM,iBAAA;EnD27JL;AmDp8JD;EAcI,kBAAA;EnDy7JH;AmDv8JD;;EAkBM,+BAAA;EnDy7JL;AmD38JD;EAuBI,eAAA;EnDu7JH;AmD98JD;EAyBM,kCAAA;EnDw7JL;AmDj7JD;EChPE,uBAAA;EpDoqKD;AoDlqKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDoqKH;AoDvqKC;EAMI,2BAAA;EpDoqKL;AoD1qKC;EASI,gBAAA;EACA,2BAAA;EpDoqKL;AoDjqKC;EAEI,8BAAA;EpDkqKL;AmDh8JD;ECnPE,uBAAA;EpDsrKD;AoDprKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDsrKH;AoDzrKC;EAMI,2BAAA;EpDsrKL;AoD5rKC;EASI,gBAAA;EACA,2BAAA;EpDsrKL;AoDnrKC;EAEI,8BAAA;EpDorKL;AmD/8JD;ECtPE,uBAAA;EpDwsKD;AoDtsKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDwsKH;AoD3sKC;EAMI,2BAAA;EpDwsKL;AoD9sKC;EASI,gBAAA;EACA,2BAAA;EpDwsKL;AoDrsKC;EAEI,8BAAA;EpDssKL;AmD99JD;ECzPE,uBAAA;EpD0tKD;AoDxtKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpD0tKH;AoD7tKC;EAMI,2BAAA;EpD0tKL;AoDhuKC;EASI,gBAAA;EACA,2BAAA;EpD0tKL;AoDvtKC;EAEI,8BAAA;EpDwtKL;AmD7+JD;EC5PE,uBAAA;EpD4uKD;AoD1uKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpD4uKH;AoD/uKC;EAMI,2BAAA;EpD4uKL;AoDlvKC;EASI,gBAAA;EACA,2BAAA;EpD4uKL;AoDzuKC;EAEI,8BAAA;EpD0uKL;AmD5/JD;EC/PE,uBAAA;EpD8vKD;AoD5vKC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpD8vKH;AoDjwKC;EAMI,2BAAA;EpD8vKL;AoDpwKC;EASI,gBAAA;EACA,2BAAA;EpD8vKL;AoD3vKC;EAEI,8BAAA;EpD4vKL;AqD5wKD;EACE,oBAAA;EACA,gBAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;ErD8wKD;AqDnxKD;;;;;EAYI,oBAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,cAAA;EACA,aAAA;EACA,WAAA;ErD8wKH;AqD1wKC;EACE,wBAAA;ErD4wKH;AqDxwKC;EACE,qBAAA;ErD0wKH;AsDpyKD;EACE,kBAAA;EACA,eAAA;EACA,qBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EjDwDA,yDAAA;EACQ,iDAAA;EL+uKT;AsD9yKD;EASI,oBAAA;EACA,mCAAA;EtDwyKH;AsDnyKD;EACE,eAAA;EACA,oBAAA;EtDqyKD;AsDnyKD;EACE,cAAA;EACA,oBAAA;EtDqyKD;AuD3zKD;EACE,cAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,8BAAA;EjCRA,cAAA;EAGA,2BAAA;EtBo0KD;AuD5zKC;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;EjCfF,cAAA;EAGA,2BAAA;EtB40KD;AuDzzKC;EACE,YAAA;EACA,iBAAA;EACA,yBAAA;EACA,WAAA;EACA,0BAAA;EvD2zKH;AwD/0KD;EACE,kBAAA;ExDi1KD;AwD70KD;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,mCAAA;EAIA,YAAA;ExD40KD;AwDz0KC;EnD+GA,uCAAA;EACI,mCAAA;EACC,kCAAA;EACG,+BAAA;EAkER,qDAAA;EAEK,2CAAA;EACG,qCAAA;EL4pKT;AwD/0KC;EnD2GA,oCAAA;EACI,gCAAA;EACC,+BAAA;EACG,4BAAA;ELuuKT;AwDn1KD;EACE,oBAAA;EACA,kBAAA;ExDq1KD;AwDj1KD;EACE,oBAAA;EACA,aAAA;EACA,cAAA;ExDm1KD;AwD/0KD;EACE,oBAAA;EACA,2BAAA;EACA,2BAAA;EACA,sCAAA;EACA,oBAAA;EnDaA,kDAAA;EACQ,0CAAA;EmDZR,sCAAA;UAAA,8BAAA;EAEA,YAAA;ExDi1KD;AwD70KD;EACE,iBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,2BAAA;ExD+0KD;AwD70KC;ElCpEA,YAAA;EAGA,0BAAA;EtBk5KD;AwDh1KC;ElCrEA,cAAA;EAGA,2BAAA;EtBs5KD;AwD/0KD;EACE,eAAA;EACA,kCAAA;EACA,2BAAA;ExDi1KD;AwD90KD;EACE,kBAAA;ExDg1KD;AwD50KD;EACE,WAAA;EACA,yBAAA;ExD80KD;AwDz0KD;EACE,oBAAA;EACA,eAAA;ExD20KD;AwDv0KD;EACE,eAAA;EACA,mBAAA;EACA,+BAAA;ExDy0KD;AwD50KD;EAQI,kBAAA;EACA,kBAAA;ExDu0KH;AwDh1KD;EAaI,mBAAA;ExDs0KH;AwDn1KD;EAiBI,gBAAA;ExDq0KH;AwDh0KD;EACE,oBAAA;EACA,cAAA;EACA,aAAA;EACA,cAAA;EACA,kBAAA;ExDk0KD;AwDhzKD;EAZE;IACE,cAAA;IACA,mBAAA;IxD+zKD;EwD7zKD;InDtEA,mDAAA;IACQ,2CAAA;ILs4KP;EwD5zKD;IAAY,cAAA;IxD+zKX;EACF;AwD1zKD;EAFE;IAAY,cAAA;IxDg0KX;EACF;AyD98KD;EACE,oBAAA;EACA,eAAA;EACA,gBAAA;EACA,qBAAA;EACA,iBAAA;EACA,kBAAA;EnCTA,YAAA;EAGA,0BAAA;EtBw9KD;AyD/8KC;EnCZA,cAAA;EAGA,2BAAA;EtB49KD;AyDl9KC;EAAW,kBAAA;EAAmB,gBAAA;EzDs9K/B;AyDr9KC;EAAW,kBAAA;EAAmB,gBAAA;EzDy9K/B;AyDx9KC;EAAW,iBAAA;EAAmB,gBAAA;EzD49K/B;AyD39KC;EAAW,mBAAA;EAAmB,gBAAA;EzD+9K/B;AyD39KD;EACE,kBAAA;EACA,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,uBAAA;EACA,2BAAA;EACA,oBAAA;EzD69KD;AyDz9KD;EACE,oBAAA;EACA,UAAA;EACA,WAAA;EACA,2BAAA;EACA,qBAAA;EzD29KD;AyDx9KC;EACE,WAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,2BAAA;EzD09KH;AyDx9KC;EACE,WAAA;EACA,WAAA;EACA,yBAAA;EACA,2BAAA;EzD09KH;AyDx9KC;EACE,WAAA;EACA,YAAA;EACA,yBAAA;EACA,2BAAA;EzD09KH;AyDx9KC;EACE,UAAA;EACA,SAAA;EACA,kBAAA;EACA,6BAAA;EACA,6BAAA;EzD09KH;AyDx9KC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,6BAAA;EACA,4BAAA;EzD09KH;AyDx9KC;EACE,QAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,8BAAA;EzD09KH;AyDx9KC;EACE,QAAA;EACA,WAAA;EACA,yBAAA;EACA,8BAAA;EzD09KH;AyDx9KC;EACE,QAAA;EACA,YAAA;EACA,yBAAA;EACA,8BAAA;EzD09KH;A0DjjLD;EACE,oBAAA;EACA,QAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,kBAAA;EACA,cAAA;EAEA,iBAAA;EACA,qBAAA;EACA,yBAAA;EACA,kBAAA;EACA,2BAAA;EACA,sCAAA;UAAA,8BAAA;EACA,2BAAA;EACA,sCAAA;EACA,oBAAA;ErD8CA,mDAAA;EACQ,2CAAA;EqD3CR,qBAAA;E1DijLD;A0D9iLC;EAAY,mBAAA;E1DijLb;A0DhjLC;EAAY,mBAAA;E1DmjLb;A0DljLC;EAAY,kBAAA;E1DqjLb;A0DpjLC;EAAY,oBAAA;E1DujLb;A0DpjLD;EACE,WAAA;EACA,mBAAA;EACA,iBAAA;EACA,2BAAA;EACA,kCAAA;EACA,4BAAA;E1DsjLD;A0DnjLD;EACE,mBAAA;E1DqjLD;A0D7iLC;;EAEE,oBAAA;EACA,gBAAA;EACA,UAAA;EACA,WAAA;EACA,2BAAA;EACA,qBAAA;E1D+iLH;A0D5iLD;EACE,oBAAA;E1D8iLD;A0D5iLD;EACE,oBAAA;EACA,aAAA;E1D8iLD;A0D1iLC;EACE,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,2BAAA;EACA,uCAAA;EACA,eAAA;E1D4iLH;A0D3iLG;EACE,cAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,2BAAA;E1D6iLL;A0D1iLC;EACE,UAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,6BAAA;EACA,yCAAA;E1D4iLH;A0D3iLG;EACE,cAAA;EACA,WAAA;EACA,eAAA;EACA,sBAAA;EACA,6BAAA;E1D6iLL;A0D1iLC;EACE,WAAA;EACA,oBAAA;EACA,qBAAA;EACA,8BAAA;EACA,0CAAA;EACA,YAAA;E1D4iLH;A0D3iLG;EACE,cAAA;EACA,UAAA;EACA,oBAAA;EACA,qBAAA;EACA,8BAAA;E1D6iLL;A0DziLC;EACE,UAAA;EACA,cAAA;EACA,mBAAA;EACA,uBAAA;EACA,4BAAA;EACA,wCAAA;E1D2iLH;A0D1iLG;EACE,cAAA;EACA,YAAA;EACA,uBAAA;EACA,4BAAA;EACA,eAAA;E1D4iLL;A2DxqLD;EACE,oBAAA;E3D0qLD;A2DvqLD;EACE,oBAAA;EACA,kBAAA;EACA,aAAA;E3DyqLD;A2D5qLD;EAMI,eAAA;EACA,oBAAA;EtD6KF,2CAAA;EACK,sCAAA;EACG,mCAAA;EL6/KT;A2DnrLD;;EAcM,gBAAA;E3DyqLL;A2D/oLC;EAAA;IArBI,wDAAA;SAAA,8CAAA;YAAA,wCAAA;IACA,qCAAA;YAAA,6BAAA;IACA,2BAAA;YAAA,mBAAA;I3DwqLH;E2DtqLG;;IAEE,4CAAA;YAAA,oCAAA;IACA,SAAA;I3DwqLL;E2DtqLG;;IAEE,6CAAA;YAAA,qCAAA;IACA,SAAA;I3DwqLL;E2DtqLG;;;IAGE,yCAAA;YAAA,iCAAA;IACA,SAAA;I3DwqLL;EACF;A2D9sLD;;;EA6CI,gBAAA;E3DsqLH;A2DntLD;EAiDI,SAAA;E3DqqLH;A2DttLD;;EAsDI,oBAAA;EACA,QAAA;EACA,aAAA;E3DoqLH;A2D5tLD;EA4DI,YAAA;E3DmqLH;A2D/tLD;EA+DI,aAAA;E3DmqLH;A2DluLD;;EAmEI,SAAA;E3DmqLH;A2DtuLD;EAuEI,aAAA;E3DkqLH;A2DzuLD;EA0EI,YAAA;E3DkqLH;A2D1pLD;EACE,oBAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;ErC9FA,cAAA;EAGA,2BAAA;EqC6FA,iBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2CAAA;E3D6pLD;A2DxpLC;EblGE,oGAAA;EACA,+FAAA;EACA,sHAAA;EAAA,gGAAA;EACA,6BAAA;EACA,wHAAA;E9C6vLH;A2D5pLC;EACE,YAAA;EACA,UAAA;EbvGA,oGAAA;EACA,+FAAA;EACA,sHAAA;EAAA,gGAAA;EACA,6BAAA;EACA,wHAAA;E9CswLH;A2D9pLC;;EAEE,YAAA;EACA,gBAAA;EACA,uBAAA;ErCtHF,cAAA;EAGA,2BAAA;EtBqxLD;A2D/rLD;;;;EAsCI,oBAAA;EACA,UAAA;EACA,YAAA;EACA,uBAAA;E3D+pLH;A2DxsLD;;EA6CI,WAAA;EACA,oBAAA;E3D+pLH;A2D7sLD;;EAkDI,YAAA;EACA,qBAAA;E3D+pLH;A2DltLD;;EAuDI,aAAA;EACA,cAAA;EACA,mBAAA;EACA,oBAAA;E3D+pLH;A2D1pLG;EACE,kBAAA;E3D4pLL;A2DxpLG;EACE,kBAAA;E3D0pLL;A2DhpLD;EACE,oBAAA;EACA,cAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;E3DkpLD;A2D3pLD;EAYI,uBAAA;EACA,aAAA;EACA,cAAA;EACA,aAAA;EACA,qBAAA;EACA,2BAAA;EACA,qBAAA;EACA,iBAAA;EAUA,2BAAA;EACA,oCAAA;E3DyoLH;A2DvqLD;EAiCI,WAAA;EACA,aAAA;EACA,cAAA;EACA,2BAAA;E3DyoLH;A2DloLD;EACE,oBAAA;EACA,WAAA;EACA,YAAA;EACA,cAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2CAAA;E3DooLD;A2DnoLC;EACE,mBAAA;E3DqoLH;A2D5lLD;EAhCE;;;;IAKI,aAAA;IACA,cAAA;IACA,mBAAA;IACA,iBAAA;I3D8nLH;E2DtoLD;;IAYI,oBAAA;I3D8nLH;E2D1oLD;;IAgBI,qBAAA;I3D8nLH;E2DznLD;IACE,WAAA;IACA,YAAA;IACA,sBAAA;I3D2nLD;E2DvnLD;IACE,cAAA;I3DynLD;EACF;A4Dr3LC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,cAAA;EACA,gBAAA;E5Dm5LH;A4Dj5LC;;;;;;;;;;;;;;;EACE,aAAA;E5Di6LH;AiCz6LD;E4BRE,gBAAA;EACA,mBAAA;EACA,oBAAA;E7Do7LD;AiC36LD;EACE,yBAAA;EjC66LD;AiC36LD;EACE,wBAAA;EjC66LD;AiCr6LD;EACE,0BAAA;EjCu6LD;AiCr6LD;EACE,2BAAA;EjCu6LD;AiCr6LD;EACE,oBAAA;EjCu6LD;AiCr6LD;E6BzBE,aAAA;EACA,oBAAA;EACA,mBAAA;EACA,+BAAA;EACA,WAAA;E9Di8LD;AiCn6LD;EACE,0BAAA;EACA,+BAAA;EjCq6LD;AiC95LD;EACE,iBAAA;EjCg6LD;A+Dl8LD;EACE,qBAAA;E/Do8LD;A+D97LD;;;;ECdE,0BAAA;EhEk9LD;A+D77LD;;;;;;;;;;;;EAYE,0BAAA;E/D+7LD;A+Dx7LD;EAAA;IChDE,2BAAA;IhE4+LC;EgE3+LD;IAAU,gBAAA;IhE8+LT;EgE7+LD;IAAU,+BAAA;IhEg/LT;EgE/+LD;;IACU,gCAAA;IhEk/LT;EACF;A+Dl8LD;EAAA;IAFI,2BAAA;I/Dw8LD;EACF;A+Dl8LD;EAAA;IAFI,4BAAA;I/Dw8LD;EACF;A+Dl8LD;EAAA;IAFI,kCAAA;I/Dw8LD;EACF;A+Dj8LD;EAAA;ICrEE,2BAAA;IhE0gMC;EgEzgMD;IAAU,gBAAA;IhE4gMT;EgE3gMD;IAAU,+BAAA;IhE8gMT;EgE7gMD;;IACU,gCAAA;IhEghMT;EACF;A+D38LD;EAAA;IAFI,2BAAA;I/Di9LD;EACF;A+D38LD;EAAA;IAFI,4BAAA;I/Di9LD;EACF;A+D38LD;EAAA;IAFI,kCAAA;I/Di9LD;EACF;A+D18LD;EAAA;IC1FE,2BAAA;IhEwiMC;EgEviMD;IAAU,gBAAA;IhE0iMT;EgEziMD;IAAU,+BAAA;IhE4iMT;EgE3iMD;;IACU,gCAAA;IhE8iMT;EACF;A+Dp9LD;EAAA;IAFI,2BAAA;I/D09LD;EACF;A+Dp9LD;EAAA;IAFI,4BAAA;I/D09LD;EACF;A+Dp9LD;EAAA;IAFI,kCAAA;I/D09LD;EACF;A+Dn9LD;EAAA;IC/GE,2BAAA;IhEskMC;EgErkMD;IAAU,gBAAA;IhEwkMT;EgEvkMD;IAAU,+BAAA;IhE0kMT;EgEzkMD;;IACU,gCAAA;IhE4kMT;EACF;A+D79LD;EAAA;IAFI,2BAAA;I/Dm+LD;EACF;A+D79LD;EAAA;IAFI,4BAAA;I/Dm+LD;EACF;A+D79LD;EAAA;IAFI,kCAAA;I/Dm+LD;EACF;A+D59LD;EAAA;IC5HE,0BAAA;IhE4lMC;EACF;A+D59LD;EAAA;ICjIE,0BAAA;IhEimMC;EACF;A+D59LD;EAAA;ICtIE,0BAAA;IhEsmMC;EACF;A+D59LD;EAAA;IC3IE,0BAAA;IhE2mMC;EACF;A+Dz9LD;ECnJE,0BAAA;EhE+mMD;A+Dt9LD;EAAA;ICjKE,2BAAA;IhE2nMC;EgE1nMD;IAAU,gBAAA;IhE6nMT;EgE5nMD;IAAU,+BAAA;IhE+nMT;EgE9nMD;;IACU,gCAAA;IhEioMT;EACF;A+Dp+LD;EACE,0BAAA;E/Ds+LD;A+Dj+LD;EAAA;IAFI,2BAAA;I/Du+LD;EACF;A+Dr+LD;EACE,0BAAA;E/Du+LD;A+Dl+LD;EAAA;IAFI,4BAAA;I/Dw+LD;EACF;A+Dt+LD;EACE,0BAAA;E/Dw+LD;A+Dn+LD;EAAA;IAFI,kCAAA;I/Dy+LD;EACF;A+Dl+LD;EAAA;ICpLE,0BAAA;IhE0pMC;EACF","file":"bootstrap.css","sourcesContent":["/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n select {\n background: #fff !important;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\2a\";\n}\n.glyphicon-plus:before {\n content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #428bca;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #2a6496;\n text-decoration: underline;\n}\na:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #428bca;\n}\na.text-primary:hover {\n color: #3071a9;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #428bca;\n}\na.bg-primary:hover {\n background-color: #3071a9;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #ffffff;\n background-color: #333333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #dddddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #dddddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #dddddd;\n}\n.table .table {\n background-color: #ffffff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-child(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #dddddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #ffffff;\n background-image: none;\n border: 1px solid #cccccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n background-color: #eeeeee;\n opacity: 1;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n line-height: 34px;\n line-height: 1.42857143 \\0;\n}\ninput[type=\"date\"].input-sm,\ninput[type=\"time\"].input-sm,\ninput[type=\"datetime-local\"].input-sm,\ninput[type=\"month\"].input-sm {\n line-height: 30px;\n line-height: 1.5 \\0;\n}\ninput[type=\"date\"].input-lg,\ninput[type=\"time\"].input-lg,\ninput[type=\"datetime-local\"].input-lg,\ninput[type=\"month\"].input-lg {\n line-height: 46px;\n line-height: 1.33 \\0;\n}\n_:-ms-fullscreen,\n:root input[type=\"date\"],\n_:-ms-fullscreen,\n:root input[type=\"time\"],\n_:-ms-fullscreen,\n:root input[type=\"datetime-local\"],\n_:-ms-fullscreen,\n:root input[type=\"month\"] {\n line-height: 1.42857143;\n}\n_:-ms-fullscreen.input-sm,\n:root input[type=\"date\"].input-sm,\n_:-ms-fullscreen.input-sm,\n:root input[type=\"time\"].input-sm,\n_:-ms-fullscreen.input-sm,\n:root input[type=\"datetime-local\"].input-sm,\n_:-ms-fullscreen.input-sm,\n:root input[type=\"month\"].input-sm {\n line-height: 1.5;\n}\n_:-ms-fullscreen.input-lg,\n:root input[type=\"date\"].input-lg,\n_:-ms-fullscreen.input-lg,\n:root input[type=\"time\"].input-lg,\n_:-ms-fullscreen.input-lg,\n:root input[type=\"datetime-local\"].input-lg,\n_:-ms-fullscreen.input-lg,\n:root input[type=\"month\"].input-lg {\n line-height: 1.33;\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm,\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm,\nselect.form-group-sm .form-control {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\ntextarea.form-group-sm .form-control,\nselect[multiple].input-sm,\nselect[multiple].form-group-sm .form-control {\n height: auto;\n}\n.input-lg,\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33;\n border-radius: 6px;\n}\nselect.input-lg,\nselect.form-group-lg .form-control {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\ntextarea.form-group-lg .form-control,\nselect[multiple].input-lg,\nselect[multiple].form-group-lg .form-control {\n height: auto;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 14.3px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n pointer-events: none;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default {\n color: #333333;\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default.focus,\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default .badge {\n color: #ffffff;\n background-color: #333333;\n}\n.btn-primary {\n color: #ffffff;\n background-color: #428bca;\n border-color: #357ebd;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary.focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #ffffff;\n background-color: #3071a9;\n border-color: #285e8e;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #428bca;\n border-color: #357ebd;\n}\n.btn-primary .badge {\n color: #428bca;\n background-color: #ffffff;\n}\n.btn-success {\n color: #ffffff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success.focus,\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #ffffff;\n}\n.btn-info {\n color: #ffffff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info.focus,\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #ffffff;\n}\n.btn-warning {\n color: #ffffff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning.focus,\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #ffffff;\n}\n.btn-danger {\n color: #ffffff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger.focus,\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #ffffff;\n}\n.btn-link {\n color: #428bca;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #2a6496;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n visibility: hidden;\n}\n.collapse.in {\n display: block;\n visibility: visible;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px solid;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #ffffff;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #ffffff;\n text-decoration: none;\n outline: 0;\n background-color: #428bca;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px solid;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 1px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus {\n outline: 0;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-bottom-left-radius: 4px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #428bca;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #dddddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #dddddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #ffffff;\n background-color: #428bca;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n visibility: hidden;\n}\n.tab-content > .active {\n display: block;\n visibility: visible;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n visibility: visible !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #dddddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #dddddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777777;\n}\n.navbar-default .navbar-link:hover {\n color: #333333;\n}\n.navbar-default .btn-link {\n color: #777777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #cccccc;\n}\n.navbar-inverse {\n background-color: #222222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #ffffff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #ffffff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #ffffff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #cccccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #428bca;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n color: #2a6496;\n background-color: #eeeeee;\n border-color: #dddddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #428bca;\n border-color: #428bca;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #ffffff;\n border-color: #dddddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #ffffff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #ffffff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #428bca;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #3071a9;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #ffffff;\n line-height: 1;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #428bca;\n background-color: #ffffff;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding: 30px 15px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding: 48px 0;\n }\n .container .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #428bca;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #ffffff;\n text-align: center;\n background-color: #428bca;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\na.list-group-item {\n color: #555555;\n}\na.list-group-item .list-group-item-heading {\n color: #333333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n text-decoration: none;\n color: #555555;\n background-color: #f5f5f5;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #428bca;\n border-color: #428bca;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #e1edf7;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #ffffff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #dddddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #dddddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #dddddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #dddddd;\n}\n.panel-default {\n border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #dddddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #dddddd;\n}\n.panel-primary {\n border-color: #428bca;\n}\n.panel-primary > .panel-heading {\n color: #ffffff;\n background-color: #428bca;\n border-color: #428bca;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #428bca;\n}\n.panel-primary > .panel-heading .badge {\n color: #428bca;\n background-color: #ffffff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #428bca;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000000;\n text-shadow: 0 1px 0 #ffffff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #ffffff;\n border: 1px solid #999999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: #000000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n min-height: 16.42857143px;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n visibility: visible;\n font-size: 12px;\n line-height: 1.4;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #ffffff;\n text-align: center;\n text-decoration: none;\n background-color: #000000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n left: 5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n right: 5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n left: 5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n right: 5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1.42857143;\n text-align: left;\n background-color: #ffffff;\n background-clip: padding-box;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n white-space: normal;\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #ffffff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #ffffff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #ffffff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #ffffff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n transition: transform 0.6s ease-in-out;\n backface-visibility: hidden;\n perspective: 1000;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #ffffff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #ffffff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #ffffff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -15px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -15px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n visibility: hidden !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n// user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n// (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; // 2\n box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n //\n // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n // Once fixed, we can just straight up remove this.\n select {\n background: #fff !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // See https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-child(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned.\n// As a workaround, we set a pixel line-height that matches the\n// given height of the input. Since this fucks up everything else, we have to\n// appropriately reset it for Internet Explorer and the size variations.\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n line-height: @input-height-base;\n // IE8+ misaligns the text within date inputs, so we reset\n line-height: @line-height-base ~\"\\0\";\n\n &.input-sm {\n line-height: @input-height-small;\n line-height: @line-height-small ~\"\\0\";\n }\n &.input-lg {\n line-height: @input-height-large;\n line-height: @line-height-large ~\"\\0\";\n }\n}\n\n// IE 11 hack to reverse the iOS temporal input hack.\n_:-ms-fullscreen, :root input[type=\"date\"],\n_:-ms-fullscreen, :root input[type=\"time\"],\n_:-ms-fullscreen, :root input[type=\"datetime-local\"],\n_:-ms-fullscreen, :root input[type=\"month\"] {\n line-height: @line-height-base;\n\n &.input-sm {\n line-height: @line-height-small;\n }\n &.input-lg {\n line-height: @line-height-large;\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because <label>s don't inherit their parent's `cursor`.\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n &[disabled],\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n// These classes are used directly on <label>s\n.radio-inline,\n.checkbox-inline {\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n// These classes are used on elements with <label> descendants\n.radio,\n.checkbox {\n &.disabled,\n fieldset[disabled] & {\n label {\n cursor: @cursor-disabled;\n }\n }\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n // Size it appropriately next to real form controls\n padding-top: (@padding-base-vertical + 1);\n padding-bottom: (@padding-base-vertical + 1);\n // Remove default margin from `p`\n margin-bottom: 0;\n\n &.input-lg,\n &.input-sm {\n padding-left: 0;\n padding-right: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm,\n.form-group-sm .form-control {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);\n}\n\n.input-lg,\n.form-group-lg .form-control {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n // Enable absolute positioning\n position: relative;\n\n // Ensure icons don't overlap text\n .form-control {\n padding-right: (@input-height-base * 1.25);\n }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2; // Ensure icon is above input groups\n display: block;\n width: @input-height-base;\n height: @input-height-base;\n line-height: @input-height-base;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n width: @input-height-large;\n height: @input-height-large;\n line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback {\n width: @input-height-small;\n height: @input-height-small;\n line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n// Reposition feedback icon if input has visible label above\n.has-feedback label {\n\n & ~ .form-control-feedback {\n top: (@line-height-computed + 5); // Height of the `label` and its margin\n }\n &.sr-only ~ .form-control-feedback {\n top: 0;\n }\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n display: block; // account for any element using help-block\n margin-top: 5px;\n margin-bottom: 10px;\n color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n // Kick in the inline\n @media (min-width: @screen-sm-min) {\n // Inline-block all the things for \"inline\"\n .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // In navbar-form, allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n // Make static controls behave like regular ones\n .form-control-static {\n display: inline-block;\n }\n\n .input-group {\n display: inline-table;\n vertical-align: middle;\n\n .input-group-addon,\n .input-group-btn,\n .form-control {\n width: auto;\n }\n }\n\n // Input groups need that 100% width though\n .input-group > .form-control {\n width: 100%;\n }\n\n .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match (which also avoids\n // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n .radio,\n .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n\n label {\n padding-left: 0;\n }\n }\n .radio input[type=\"radio\"],\n .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n\n // Re-override the feedback icon.\n .has-feedback .form-control-feedback {\n top: 0;\n }\n }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n // Consistent vertical alignment of radios and checkboxes\n //\n // Labels also get some reset styles, but that is scoped to a media query below.\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n // Account for padding we're adding to ensure the alignment and of help text\n // and other content below items\n .radio,\n .checkbox {\n min-height: (@line-height-computed + (@padding-base-vertical + 1));\n }\n\n // Make form groups behave like rows\n .form-group {\n .make-row();\n }\n\n // Reset spacing and right align labels, but scope to media queries so that\n // labels on narrow viewports stack the same as a default form example.\n @media (min-width: @screen-sm-min) {\n .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n right: (@grid-gutter-width / 2);\n }\n\n // Form group sizes\n //\n // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n // inputs and labels within a `.form-group`.\n .form-group-lg {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: ((@padding-large-vertical * @line-height-large) + 1);\n }\n }\n }\n .form-group-sm {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: (@padding-small-vertical + 1);\n }\n }\n }\n}\n","// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline,\n &.radio label,\n &.checkbox label,\n &.radio-inline label,\n &.checkbox-inline label {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n pointer-events: none; // Future-proof disabling of clicks\n .opacity(.65);\n .box-shadow(none);\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: underline;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n visibility: hidden;\n\n &.in { display: block; visibility: visible; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base solid;\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: @cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base solid;\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 1px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n &:focus {\n // Remove focus outline when dropdown JS adds it after closing the menu\n outline: 0;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n border-top-right-radius: @border-radius-base;\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n border-bottom-left-radius: @border-radius-base;\n .border-top-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @border-radius-base;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: @cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n visibility: hidden;\n }\n > .active {\n display: block;\n visibility: visible;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n visibility: visible !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: @cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: @cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n .btn-xs & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n a.list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding: @jumbotron-padding (@jumbotron-padding / 2);\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding: (@jumbotron-padding * 1.6) 0;\n\n .container & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: (@font-size-base * 4.5);\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n\n // Align badges within list items\n > .badge {\n float: right;\n }\n > .badge + .badge {\n margin-right: 5px;\n }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n color: @list-group-link-hover-color;\n background-color: @list-group-hover-bg;\n }\n}\n\n.list-group-item {\n // Disabled state\n &.disabled,\n &.disabled:hover,\n &.disabled:focus {\n background-color: @list-group-disabled-bg;\n color: @list-group-disabled-color;\n cursor: @cursor-disabled;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-disabled-text-color;\n }\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading,\n .list-group-item-heading > small,\n .list-group-item-heading > .small {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading {\n color: inherit;\n }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: @panel-heading-padding;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: @panel-footer-padding;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group,\n > .panel-collapse > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table,\n > .panel-collapse > .table {\n margin-bottom: 0;\n\n caption {\n padding-left: @panel-body-padding;\n padding-right: @panel-body-padding;\n }\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n border-top-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n border-bottom-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive,\n > .table + .panel-body,\n > .table-responsive + .panel-body {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n\n + .panel-collapse > .panel-body,\n + .panel-collapse > .list-group {\n border-top: 1px solid @panel-inner-border;\n }\n }\n\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse > .panel-body {\n border-top-color: @border;\n }\n .badge {\n color: @heading-bg-color;\n background-color: @heading-text-color;\n }\n }\n & > .panel-footer {\n + .panel-collapse > .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n }\n\n // Modifier class for 16:9 aspect ratio\n &.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n }\n\n // Modifier class for 4:3 aspect ratio\n &.embed-responsive-4by3 {\n padding-bottom: 75%;\n }\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0) }\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n padding: @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n visibility: visible;\n font-size: @font-size-small;\n line-height: 1.4;\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n text-decoration: none;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n // Reset font and text propertes given new insertion method\n font-size: @font-size-base;\n font-weight: normal;\n line-height: @line-height-base;\n text-align: left;\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Overrides for proper insertion\n white-space: normal;\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n &:extend(.img-responsive);\n line-height: 1;\n }\n\n // WebKit CSS3 transforms for supported devices\n @media all and (transform-3d), (-webkit-transform-3d) {\n transition: transform .6s ease-in-out;\n backface-visibility: hidden;\n perspective: 1000;\n\n &.next,\n &.active.right {\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n &.prev,\n &.active.left {\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n &.next.left,\n &.prev.right,\n &.active {\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: @carousel-control-width;\n .opacity(@carousel-control-opacity);\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: 0;\n color: @carousel-control-color;\n text-decoration: none;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n font-family: serif;\n }\n\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: -15px;\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: -15px;\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n","// Center-align a block level element\n\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-xs-block {\n @media (max-width: @screen-xs-max) {\n display: block !important;\n }\n}\n.visible-xs-inline {\n @media (max-width: @screen-xs-max) {\n display: inline !important;\n }\n}\n.visible-xs-inline-block {\n @media (max-width: @screen-xs-max) {\n display: inline-block !important;\n }\n}\n\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-sm-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: block !important;\n }\n}\n.visible-sm-inline {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline !important;\n }\n}\n.visible-sm-inline-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline-block !important;\n }\n}\n\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-md-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: block !important;\n }\n}\n.visible-md-inline {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline !important;\n }\n}\n.visible-md-inline-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline-block !important;\n }\n}\n\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n.visible-lg-block {\n @media (min-width: @screen-lg-min) {\n display: block !important;\n }\n}\n.visible-lg-inline {\n @media (min-width: @screen-lg-min) {\n display: inline !important;\n }\n}\n.visible-lg-inline-block {\n @media (min-width: @screen-lg-min) {\n display: inline-block !important;\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n.visible-print-block {\n display: none !important;\n\n @media print {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n\n @media print {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n\n @media print {\n display: inline-block !important;\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n"]} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.min.css b/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.min.css
deleted file mode 100644
index 2cfcd3a2..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.min.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- * Bootstrap v3.3.0 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:before,:after{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px;line-height:1.5 \0}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px;line-height:1.33 \0}_:-ms-fullscreen,:root input[type=date],_:-ms-fullscreen,:root input[type=time],_:-ms-fullscreen,:root input[type=datetime-local],_:-ms-fullscreen,:root input[type=month]{line-height:1.42857143}_:-ms-fullscreen.input-sm,:root input[type=date].input-sm,_:-ms-fullscreen.input-sm,:root input[type=time].input-sm,_:-ms-fullscreen.input-sm,:root input[type=datetime-local].input-sm,_:-ms-fullscreen.input-sm,:root input[type=month].input-sm{line-height:1.5}_:-ms-fullscreen.input-lg,:root input[type=date].input-lg,_:-ms-fullscreen.input-lg,:root input[type=time].input-lg,_:-ms-fullscreen.input-lg,:root input[type=datetime-local].input-lg,_:-ms-fullscreen.input-lg,:root input[type=month].input-lg{line-height:1.33}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,select.form-group-sm .form-control{height:30px;line-height:30px}textarea.input-sm,textarea.form-group-sm .form-control,select[multiple].input-sm,select[multiple].form-group-sm .form-control{height:auto}.input-lg,.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg,select.form-group-lg .form-control{height:46px;line-height:46px}textarea.input-lg,textarea.form-group-lg .form-control,select[multiple].input-lg,select[multiple].form-group-lg .form-control{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=radio],[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important;visibility:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron{padding-right:5px;padding-left:5px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-right:15px;padding-left:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.next,.carousel-inner>.item.active.right{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/bootstrap/css/docs.css b/wqflask/wqflask/static/packages/bootstrap/css/docs.css
deleted file mode 100644
index 31616821..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/css/docs.css
+++ /dev/null
@@ -1,980 +0,0 @@
-/* Add additional stylesheets below
--------------------------------------------------- */
-/*
- Bootstrap's documentation styles
- Special styles for presenting Bootstrap's documentation and examples
-*/
-
-
-
-/* Body and structure
--------------------------------------------------- */
-
-body {
- position: relative;
- padding-top: 0px;
-}
-
-/* Code in headings */
-h3 code {
- font-size: 14px;
- font-weight: normal;
-}
-
-
-
-/* Tweak navbar brand link to be super sleek
--------------------------------------------------- */
-/*
-body > .navbar {
- font-size: 12px;
- font-weight: bold;
-}
-*/
-
-/* Change the docs' brand */
-
-body > .navbar .navbar-brand {
- padding-right: 20px;
- padding-left: 20px;
- margin-left: 20px;
- float: left;
- font-weight: bold;
- color: #ffffff;
- text-shadow: 0 1px 0 rgba(255,255,255,.1), 0 0 30px rgba(255,255,255,.125);
- -webkit-transition: all .2s linear;
- -moz-transition: all .2s linear;
- transition: all .2s linear;
-}
-
-body > .navbar .brand:hover {
- text-decoration: none;
- text-shadow: 0 1px 0 rgba(255,255,255,.1), 0 0 30px rgba(255,255,255,.4);
-}
-
-
-/* Sections
--------------------------------------------------- */
-
-/* padding for in-page bookmarks and fixed navbar */
-section {
- padding-top: 0px;
-}
-section > .page-header,
-section > .lead {
- color: #5a5a5a;
-}
-section > ul li {
- margin-bottom: 5px;
-}
-
-/* Separators (hr) */
-.bs-docs-separator {
- margin: 40px 0 39px;
-}
-
-/* Faded out hr */
-hr.soften {
- height: 1px;
- margin: 70px 0;
- background-image: -webkit-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0));
- background-image: -moz-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0));
- background-image: -ms-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0));
- background-image: -o-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0));
- border: 0;
-}
-
-
-
-/* Jumbotrons
--------------------------------------------------- */
-
-/* Base class
-------------------------- */
-.jumbotron {
- position: relative;
- padding: 0px 0;
- color: black;
- text-align: left;
- text-shadow: 0 1px 3px rgba(0,0,0,.4), 0 0 30px rgba(0,0,0,.075);
- background: #d5d5d5; /* Old browsers */
-
-}
-.jumbotron h1 {
- font-size: 60px;
- font-weight: bold;
- letter-spacing: -1px;
- line-height: 1;
-}
-.jumbotron p {
- font-size: 20px;
- font-weight: 300;
- line-height: 20px;
- margin-bottom: 10px;
-}
-
-/* Link styles (used on .masthead-links as well) */
-.jumbotron a {
- color: #336699;
- color: rgba(255,255,255,.5);
- -webkit-transition: all .2s ease-in-out;
- -moz-transition: all .2s ease-in-out;
- transition: all .2s ease-in-out;
-}
-.jumbotron a:hover {
- color: #336699;
- text-shadow: 0 0 10px rgba(255,255,255,.25);
-}
-
-/* Download button */
-.masthead .btn {
- padding: 14px 24px;
- font-size: 24px;
- font-weight: 200;
- color: #fff; /* redeclare to override the `.jumbotron a` */
- border: 0;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
- -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25);
- -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25);
- box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25);
- -webkit-transition: none;
- -moz-transition: none;
- transition: none;
-}
-.masthead .btn:hover {
- -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25);
- -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25);
- box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25);
-}
-.masthead .btn:active {
- -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.1);
- -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.1);
- box-shadow: inset 0 2px 4px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.1);
-}
-
-
-/* Pattern overlay
-------------------------- */
-.jumbotron .container {
- position: relative;
- z-index: 2;
-}
-.jumbotron:after {
- content: '';
- display: block;
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- /*background: url(../img/bs-docs-masthead-pattern.png) repeat center center;*/
- opacity: .4;
-}
-
-/* Masthead (docs home)
-------------------------- */
-.masthead {
- padding: 70px 0 80px;
- margin-bottom: 0;
- color: #fff;
-}
-.masthead h1 {
- font-size: 120px;
- line-height: 1;
- letter-spacing: -2px;
-}
-.masthead p {
- font-size: 40px;
- font-weight: 200;
- line-height: 1.25;
-}
-
-/* Textual links in masthead */
-.masthead-links {
- margin: 0;
- list-style: none;
-}
-.masthead-links li {
- display: inline;
- padding: 0 10px;
- color: rgba(255,255,255,.25);
-}
-
-/* Social proof buttons from GitHub & Twitter */
-.bs-docs-social {
- padding: 15px 0;
- text-align: center;
- background-color: #f5f5f5;
- border-top: 1px solid #fff;
- border-bottom: 1px solid #ddd;
-}
-
-/* Quick links on Home */
-.bs-docs-social-buttons {
- margin-left: 0;
- margin-bottom: 0;
- padding-left: 0;
- list-style: none;
-}
-.bs-docs-social-buttons li {
- display: inline-block;
- padding: 5px 8px;
- line-height: 1;
- *display: inline;
- *zoom: 1;
-}
-
-/* Subhead (other pages)
-------------------------- */
-.subhead {
- text-align: left;
- border-bottom: 1px solid #ddd;
-}
-.subhead h1 {
- font-size: 30px;
-}
-.subhead p {
- margin-bottom: 10px;
-}
-.subhead .navbar {
- display: none;
-}
-
-
-
-/* Marketing section of Overview
--------------------------------------------------- */
-
-.marketing {
- text-align: center;
- color: #5a5a5a;
-}
-.marketing h1 {
- margin: 60px 0 10px;
- font-size: 60px;
- font-weight: 200;
- line-height: 1;
- letter-spacing: -1px;
-}
-.marketing h2 {
- font-weight: 200;
- margin-bottom: 5px;
-}
-.marketing p {
- font-size: 16px;
- line-height: 1.5;
-}
-.marketing .marketing-byline {
- margin-bottom: 40px;
- font-size: 20px;
- font-weight: 300;
- line-height: 25px;
- color: #999;
-}
-.marketing img {
- display: block;
- margin: 0 auto 30px;
-}
-
-
-
-/* Footer
--------------------------------------------------- */
-
-.footer {
- padding: 70px 0;
- margin-top: 70px;
- border-top: 1px solid #e5e5e5;
- background-color: #f5f5f5;
-}
-.footer p {
- margin-bottom: 0;
- color: #777;
-}
-.footer-links {
- margin: 10px 0;
-}
-.footer-links li {
- display: inline;
- margin-right: 10px;
-}
-
-
-
-/* Special grid styles
--------------------------------------------------- */
-
-.show-grid {
- margin-top: 10px;
- margin-bottom: 20px;
-}
-.show-grid [class*="span"] {
- background-color: #eee;
- text-align: center;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
- min-height: 40px;
- line-height: 40px;
-}
-.show-grid:hover [class*="span"] {
- background: #ddd;
-}
-.show-grid .show-grid {
- margin-top: 0;
- margin-bottom: 0;
-}
-.show-grid .show-grid [class*="span"] {
- background-color: #ccc;
-}
-
-
-
-/* Mini layout previews
--------------------------------------------------- */
-.mini-layout {
- border: 1px solid #ddd;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
- -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.075);
- -moz-box-shadow: 0 1px 2px rgba(0,0,0,.075);
- box-shadow: 0 1px 2px rgba(0,0,0,.075);
-}
-.mini-layout,
-.mini-layout .mini-layout-body,
-.mini-layout.fluid .mini-layout-sidebar {
- height: 300px;
-}
-.mini-layout {
- margin-bottom: 20px;
- padding: 9px;
-}
-.mini-layout div {
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-.mini-layout .mini-layout-body {
- background-color: #dceaf4;
- margin: 0 auto;
- width: 70%;
-}
-.mini-layout.fluid .mini-layout-sidebar,
-.mini-layout.fluid .mini-layout-header,
-.mini-layout.fluid .mini-layout-body {
- float: left;
-}
-.mini-layout.fluid .mini-layout-sidebar {
- background-color: #bbd8e9;
- width: 20%;
-}
-.mini-layout.fluid .mini-layout-body {
- width: 77.5%;
- margin-left: 2.5%;
-}
-
-
-
-/* Download page
--------------------------------------------------- */
-
-.download .page-header {
- margin-top: 36px;
-}
-.page-header .toggle-all {
- margin-top: 5px;
-}
-
-/* Space out h3s when following a section */
-.download h3 {
- margin-bottom: 5px;
-}
-.download-builder input + h3,
-.download-builder .checkbox + h3 {
- margin-top: 9px;
-}
-
-/* Fields for variables */
-.download-builder input[type=text] {
- margin-bottom: 9px;
- font-family: Menlo, Monaco, "Courier New", monospace;
- font-size: 12px;
- color: #d14;
-}
-.download-builder input[type=text]:focus {
- background-color: #fff;
-}
-
-/* Custom, larger checkbox labels */
-.download .checkbox {
- padding: 6px 10px 6px 25px;
- font-size: 13px;
- line-height: 18px;
- color: #555;
- background-color: #f9f9f9;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
- cursor: pointer;
-}
-.download .checkbox:hover {
- color: #333;
- background-color: #f5f5f5;
-}
-.download .checkbox small {
- font-size: 12px;
- color: #777;
-}
-
-/* Variables section */
-#variables label {
- margin-bottom: 0;
-}
-
-/* Giant download button */
-.download-btn {
- margin: 36px 0 108px;
-}
-#download p,
-#download h4 {
- max-width: 50%;
- margin: 0 auto;
- color: #999;
- text-align: center;
-}
-#download h4 {
- margin-bottom: 0;
-}
-#download p {
- margin-bottom: 18px;
-}
-.download-btn .btn {
- display: block;
- width: auto;
- padding: 19px 24px;
- margin-bottom: 27px;
- font-size: 30px;
- line-height: 1;
- text-align: center;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
-}
-
-
-
-/* Misc
--------------------------------------------------- */
-
-/* Make tables spaced out a bit more */
-h2 + table,
-h3 + table,
-h4 + table,
-h2 + .row {
- margin-top: 5px;
-}
-
-/* Example sites showcase */
-.example-sites {
- xmargin-left: 20px;
-}
-.example-sites img {
- max-width: 100%;
- margin: 0 auto;
-}
-
-.scrollspy-example {
- height: 200px;
- overflow: auto;
- position: relative;
-}
-
-
-/* Fake the :focus state to demo it */
-.focused {
- border-color: rgba(82,168,236,.8);
- -webkit-box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6);
- -moz-box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6);
- box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6);
- outline: 0;
-}
-
-/* For input sizes, make them display block */
-.docs-input-sizes select,
-.docs-input-sizes input[type=text] {
- display: block;
- margin-bottom: 9px;
-}
-
-/* Icons
-------------------------- */
-.the-icons {
- margin-left: 0;
- list-style: none;
-}
-.the-icons li {
- float: left;
- width: 25%;
- line-height: 25px;
-}
-.the-icons i:hover {
- background-color: rgba(255,0,0,.25);
-}
-
-/* Example page
-------------------------- */
-.bootstrap-examples p {
- font-size: 13px;
- line-height: 18px;
-}
-.bootstrap-examples .thumbnail {
- margin-bottom: 9px;
- background-color: #fff;
-}
-
-
-
-/* Bootstrap code examples
--------------------------------------------------- */
-
-/* Base class */
-.bs-docs-example {
- position: relative;
- margin: 15px 0;
- padding: 39px 19px 14px;
- *padding-top: 19px;
- background-color: #fff;
- border: 1px solid #ddd;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-
-
-/* Remove spacing between an example and it's code */
-.bs-docs-example + .prettyprint {
- margin-top: -20px;
- padding-top: 15px;
-}
-
-/* Tweak examples
-------------------------- */
-.bs-docs-example > p:last-child {
- margin-bottom: 0;
-}
-.bs-docs-example .table,
-.bs-docs-example .progress,
-.bs-docs-example .well,
-.bs-docs-example .alert,
-.bs-docs-example .hero-unit,
-.bs-docs-example .pagination,
-.bs-docs-example .navbar,
-.bs-docs-example > .nav,
-.bs-docs-example blockquote {
- margin-bottom: 5px;
-}
-.bs-docs-example .pagination {
- margin-top: 0;
-}
-.bs-navbar-top-example,
-.bs-navbar-bottom-example {
- z-index: 1;
- padding: 0;
- height: 90px;
- overflow: hidden; /* cut the drop shadows off */
-}
-.bs-navbar-top-example .navbar-fixed-top,
-.bs-navbar-bottom-example .navbar-fixed-bottom {
- margin-left: 0;
- margin-right: 0;
-}
-.bs-navbar-top-example {
- -webkit-border-radius: 0 0 4px 4px;
- -moz-border-radius: 0 0 4px 4px;
- border-radius: 0 0 4px 4px;
-}
-.bs-navbar-top-example:after {
- top: auto;
- bottom: -1px;
- -webkit-border-radius: 0 4px 0 4px;
- -moz-border-radius: 0 4px 0 4px;
- border-radius: 0 4px 0 4px;
-}
-.bs-navbar-bottom-example {
- -webkit-border-radius: 4px 4px 0 0;
- -moz-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
-}
-.bs-navbar-bottom-example .navbar {
- margin-bottom: 0;
-}
-form.bs-docs-example {
- padding-bottom: 19px;
-}
-
-/* Images */
-.bs-docs-example-images img {
- margin: 10px;
- display: inline-block;
-}
-
-/* Tooltips */
-.bs-docs-tooltip-examples {
- text-align: center;
- margin: 0 0 10px;
- list-style: none;
-}
-.bs-docs-tooltip-examples li {
- display: inline;
- padding: 0 10px;
-}
-
-/* Popovers */
-.bs-docs-example-popover {
- padding-bottom: 24px;
- background-color: #f9f9f9;
-}
-.bs-docs-example-popover .popover {
- position: relative;
- display: block;
- float: left;
- width: 260px;
- margin: 20px;
-}
-
-
-
-/* Responsive docs
--------------------------------------------------- */
-
-/* Utility classes table
-------------------------- */
-.responsive-utilities th small {
- display: block;
- font-weight: normal;
- color: #999;
-}
-.responsive-utilities tbody th {
- font-weight: normal;
-}
-.responsive-utilities td {
- text-align: center;
-}
-.responsive-utilities td.is-visible {
- color: #468847;
- background-color: #dff0d8 !important;
-}
-.responsive-utilities td.is-hidden {
- color: #ccc;
- background-color: #f9f9f9 !important;
-}
-
-/* Responsive tests
-------------------------- */
-.responsive-utilities-test {
- margin-top: 5px;
- margin-left: 0;
- list-style: none;
- overflow: hidden; /* clear floats */
-}
-.responsive-utilities-test li {
- position: relative;
- float: left;
- width: 25%;
- height: 43px;
- font-size: 14px;
- font-weight: bold;
- line-height: 43px;
- color: #999;
- text-align: center;
- border: 1px solid #ddd;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.responsive-utilities-test li + li {
- margin-left: 10px;
-}
-.responsive-utilities-test span {
- position: absolute;
- top: -1px;
- left: -1px;
- right: -1px;
- bottom: -1px;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.responsive-utilities-test span {
- color: #468847;
- background-color: #dff0d8;
- border: 1px solid #d6e9c6;
-}
-
-
-
-/* Sidenav for Docs
--------------------------------------------------- */
-
-.bs-docs-sidenav {
- width: 228px;
- margin: 30px 0 0;
- padding: 0;
- background-color: #fff;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
- -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.065);
- -moz-box-shadow: 0 1px 4px rgba(0,0,0,.065);
- box-shadow: 0 1px 4px rgba(0,0,0,.065);
-}
-.bs-docs-sidenav > li > a {
- display: block;
- *width: 190px;
- margin: 0 0 -1px;
- padding: 8px 14px;
- border: 1px solid #e5e5e5;
-}
-.bs-docs-sidenav > li:first-child > a {
- -webkit-border-radius: 6px 6px 0 0;
- -moz-border-radius: 6px 6px 0 0;
- border-radius: 6px 6px 0 0;
-}
-.bs-docs-sidenav > li:last-child > a {
- -webkit-border-radius: 0 0 6px 6px;
- -moz-border-radius: 0 0 6px 6px;
- border-radius: 0 0 6px 6px;
-}
-.bs-docs-sidenav > .active > a {
- position: relative;
- z-index: 2;
- padding: 9px 15px;
- border: 0;
- text-shadow: 0 1px 0 rgba(0,0,0,.15);
- -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1);
- -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1);
- box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1);
-}
-/* Chevrons */
-.bs-docs-sidenav .icon-chevron-right {
- float: right;
- margin-top: 2px;
- margin-right: -6px;
- opacity: .25;
-}
-.bs-docs-sidenav > li > a:hover {
- background-color: #f5f5f5;
-}
-.bs-docs-sidenav a:hover .icon-chevron-right {
- opacity: .5;
-}
-.bs-docs-sidenav .active .icon-chevron-right,
-.bs-docs-sidenav .active a:hover .icon-chevron-right {
- background-image: url(../img/glyphicons-halflings-white.png);
- opacity: 1;
-}
-.bs-docs-sidenav.affix {
- top: 40px;
-}
-.bs-docs-sidenav.affix-bottom {
- position: absolute;
- top: auto;
- bottom: 270px;
-}
-
-
-
-
-/* Responsive
--------------------------------------------------- */
-
-/* Desktop large
-------------------------- */
-@media (min-width: 1200px) {
- .bs-docs-container {
- max-width: 970px;
- }
- .bs-docs-sidenav {
- width: 258px;
- }
-}
-
-/* Desktop
-------------------------- */
-@media (max-width: 980px) {
- /* Unfloat brand */
- body > .navbar-fixed-top .brand {
- float: left;
- margin-left: 0;
- padding-left: 10px;
- padding-right: 10px;
- }
-
- /* Inline-block quick links for more spacing */
- .quick-links li {
- display: inline-block;
- margin: 5px;
- }
-
- /* When affixed, space properly */
- .bs-docs-sidenav {
- top: 0;
- margin-top: 30px;
- margin-right: 0;
- }
-}
-
-/* Tablet to desktop
-------------------------- */
-@media (min-width: 768px) and (max-width: 980px) {
- /* Remove any padding from the body */
- body {
- padding-top: 0;
- }
- /* Widen masthead and social buttons to fill body padding */
- .jumbotron {
- margin-top: -20px; /* Offset bottom margin on .navbar */
- }
- /* Adjust sidenav width */
- .bs-docs-sidenav {
- width: 166px;
- margin-top: 20px;
- }
- .bs-docs-sidenav.affix {
- top: 0;
- }
-}
-
-/* Tablet
-------------------------- */
-@media (max-width: 767px) {
- /* Remove any padding from the body */
- body {
- padding-top: 0;
- }
-
- /* Widen masthead and social buttons to fill body padding */
- .jumbotron {
- padding: 40px 20px;
- margin-top: -20px; /* Offset bottom margin on .navbar */
- margin-right: -20px;
- margin-left: -20px;
- }
- .masthead h1 {
- font-size: 90px;
- }
- .masthead p,
- .masthead .btn {
- font-size: 24px;
- }
- .marketing .span4 {
- margin-bottom: 40px;
- }
- .bs-docs-social {
- margin: 0 -20px;
- }
-
- /* Space out the show-grid examples */
- .show-grid [class*="span"] {
- margin-bottom: 5px;
- }
-
- /* Sidenav */
- .bs-docs-sidenav {
- width: auto;
- margin-bottom: 20px;
- }
- .bs-docs-sidenav.affix {
- position: static;
- width: auto;
- top: 0;
- }
-
- /* Unfloat the back to top link in footer */
- .footer {
- margin-left: -20px;
- margin-right: -20px;
- padding-left: 20px;
- padding-right: 20px;
- }
- .footer p {
- margin-bottom: 9px;
- }
-}
-
-/* Landscape phones
-------------------------- */
-@media (max-width: 480px) {
- /* Remove padding above jumbotron */
- body {
- padding-top: 0;
- }
-
- /* Change up some type stuff */
- h2 small {
- display: block;
- }
-
- /* Downsize the jumbotrons */
- .jumbotron h1 {
- font-size: 40px;
- }
- .jumbotron p,
- .jumbotron .btn {
- font-size: 20px;
- }
- .jumbotron .btn {
- display: block;
- margin: 0 auto;
- }
-
- /* center align subhead text like the masthead */
- .subhead h1,
- .subhead p {
- text-align: left;
- }
-
- /* Marketing on home */
- .marketing h1 {
- font-size: 40px;
- }
-
- /* center example sites */
- .example-sites {
- margin-left: 0;
- }
- .example-sites > li {
- float: none;
- display: block;
- max-width: 280px;
- margin: 0 auto 18px;
- text-align: center;
- }
- .example-sites .thumbnail > img {
- max-width: 270px;
- }
-
- /* Do our best to make tables work in narrow viewports */
- table code {
- white-space: normal;
- word-wrap: break-word;
- word-break: break-all;
- }
-
- /* Modal example */
- .modal-example .modal {
- position: relative;
- top: auto;
- right: auto;
- bottom: auto;
- left: auto;
- }
-
- /* Unfloat the back to top in footer to prevent odd text wrapping */
- .footer .pull-right {
- float: none;
- }
-}
diff --git a/wqflask/wqflask/static/packages/bootstrap/css/non-responsive.css b/wqflask/wqflask/static/packages/bootstrap/css/non-responsive.css
deleted file mode 100644
index 36affd72..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/css/non-responsive.css
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Template-specific stuff
- *
- * Customizations just for the template; these are not necessary for anything
- * with disabling the responsiveness.
- */
-
-/* Account for fixed navbar */
-body {
- //min-width: 1200px;
- padding-top: 70px;
- padding-bottom: 30px;
-}
-
-/* Finesse the page header spacing */
-.page-header {
- margin-bottom: 10px;
-}
-.page-header .lead {
- margin-bottom: 10px;
-}
-
-
-/* Non-responsive overrides
- *
- * Utilitze the following CSS to disable the responsive-ness of the container,
- * grid system, and navbar.
- */
-
-/* Reset the container */
-.container {
- width: 100%;
- max-width: none !important;
-}
-
-
-.container .navbar-header,
-.container .navbar-collapse {
- margin-right: 0;
- margin-left: 0;
-}
-
-/* Always float the navbar header */
-.navbar-header {
- float: left;
-}
-
-/* Undo the collapsing navbar */
-.navbar-collapse {
- display: block !important;
- height: auto !important;
- padding-bottom: 0;
- overflow: visible !important;
-}
-
-.navbar-toggle {
- display: none;
-}
-.navbar-collapse {
- border-top: 0;
-}
-
-/* Always apply the floated nav */
-.navbar-nav {
- float: left;
- margin: 0;
-}
-.navbar-nav > li {
- float: left;
-}
-.navbar-nav > li > a {
- padding: 5px;
-}
-
-/* Redeclare since we override the float above */
-.navbar-nav.navbar-right {
- float: right;
-}
-
-/* Undo custom dropdowns */
-.navbar .navbar-nav .open .dropdown-menu {
- position: absolute;
- float: left;
- background-color: #fff;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, .15);
- border-width: 0 1px 1px;
- border-radius: 0 0 4px 4px;
- -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
- box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
-}
-.navbar-default .navbar-nav .open .dropdown-menu > li > a {
- color: #333;
-}
-.navbar .navbar-nav .open .dropdown-menu > li > a:hover,
-.navbar .navbar-nav .open .dropdown-menu > li > a:focus,
-.navbar .navbar-nav .open .dropdown-menu > .active > a,
-.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
-.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #fff !important;
- background-color: #3071a9 !important;
-}
-.navbar .navbar-nav .open .dropdown-menu > .disabled > a,
-.navbar .navbar-nav .open .dropdown-menu > .disabled > a:hover,
-.navbar .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #999 !important;
- background-color: transparent !important;
-} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/bootstrap/fonts/glyphicons-halflings-regular.eot b/wqflask/wqflask/static/packages/bootstrap/fonts/glyphicons-halflings-regular.eot
deleted file mode 100644
index 4a4ca865..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/fonts/glyphicons-halflings-regular.eot
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/bootstrap/fonts/glyphicons-halflings-regular.svg b/wqflask/wqflask/static/packages/bootstrap/fonts/glyphicons-halflings-regular.svg
deleted file mode 100644
index 25691af8..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/fonts/glyphicons-halflings-regular.svg
+++ /dev/null
@@ -1,229 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
-<font-face units-per-em="1200" ascent="960" descent="-240" />
-<missing-glyph horiz-adv-x="500" />
-<glyph />
-<glyph />
-<glyph unicode="&#xd;" />
-<glyph unicode=" " />
-<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
-<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
-<glyph unicode="&#xa0;" />
-<glyph unicode="&#x2000;" horiz-adv-x="652" />
-<glyph unicode="&#x2001;" horiz-adv-x="1304" />
-<glyph unicode="&#x2002;" horiz-adv-x="652" />
-<glyph unicode="&#x2003;" horiz-adv-x="1304" />
-<glyph unicode="&#x2004;" horiz-adv-x="434" />
-<glyph unicode="&#x2005;" horiz-adv-x="326" />
-<glyph unicode="&#x2006;" horiz-adv-x="217" />
-<glyph unicode="&#x2007;" horiz-adv-x="217" />
-<glyph unicode="&#x2008;" horiz-adv-x="163" />
-<glyph unicode="&#x2009;" horiz-adv-x="260" />
-<glyph unicode="&#x200a;" horiz-adv-x="72" />
-<glyph unicode="&#x202f;" horiz-adv-x="260" />
-<glyph unicode="&#x205f;" horiz-adv-x="326" />
-<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
-<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
-<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
-<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
-<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
-<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
-<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
-<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
-<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
-<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
-<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
-<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
-<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
-<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
-<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
-<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
-<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
-<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
-<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
-<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
-<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
-<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
-<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
-<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
-<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
-<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
-<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
-<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
-<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
-<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
-<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
-<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
-<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
-<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
-<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
-<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
-<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
-<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
-<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
-<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
-<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
-<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
-<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
-<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
-<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
-<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
-<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
-<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
-<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
-<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
-<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
-<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
-<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
-<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
-<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
-<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
-<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
-<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
-<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
-<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
-<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
-<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
-<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
-<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
-<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
-<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
-<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
-<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
-<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
-<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
-<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
-<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
-<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
-<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
-<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
-<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
-<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
-<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
-<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
-<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
-<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
-<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
-<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
-<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
-<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
-<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
-<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
-<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
-<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
-<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
-<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
-<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
-<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
-<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
-<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
-<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
-<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
-<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
-<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
-<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
-<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
-<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
-<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
-<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
-<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
-<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
-<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
-<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
-<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
-<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
-<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
-<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
-<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
-<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
-<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
-<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
-<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
-<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
-<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
-<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
-<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
-<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
-<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
-<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
-<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
-<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
-<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
-<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
-<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
-<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
-<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
-<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
-<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
-<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
-<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
-<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
-<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
-<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
-<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
-<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
-<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
-<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
-<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
-<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
-<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
-<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
-<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
-<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
-<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
-<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
-<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
-<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
-<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
-<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
-<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
-<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
-<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
-<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
-<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
-<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
-<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
-<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
-<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
-<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
-<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
-<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
-<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
-<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
-<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
-<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
-<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
-<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
-<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
-<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
-<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
-<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
-<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
-<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
-<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
-<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
-<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
-<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
-<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
-<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
-</font>
-</defs></svg> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/bootstrap/fonts/glyphicons-halflings-regular.ttf b/wqflask/wqflask/static/packages/bootstrap/fonts/glyphicons-halflings-regular.ttf
deleted file mode 100644
index 67fa00bf..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/fonts/glyphicons-halflings-regular.ttf
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/bootstrap/fonts/glyphicons-halflings-regular.woff b/wqflask/wqflask/static/packages/bootstrap/fonts/glyphicons-halflings-regular.woff
deleted file mode 100644
index 8c54182a..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/fonts/glyphicons-halflings-regular.woff
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/bootstrap/img/bs-docs-masthead-pattern.png b/wqflask/wqflask/static/packages/bootstrap/img/bs-docs-masthead-pattern.png
deleted file mode 100644
index 75c46a15..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/img/bs-docs-masthead-pattern.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/bootstrap/img/glyphicons-halflings-white.png b/wqflask/wqflask/static/packages/bootstrap/img/glyphicons-halflings-white.png
deleted file mode 100644
index 3bf6484a..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/img/glyphicons-halflings-white.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/bootstrap/img/glyphicons-halflings.png b/wqflask/wqflask/static/packages/bootstrap/img/glyphicons-halflings.png
deleted file mode 100644
index a9969993..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/img/glyphicons-halflings.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/bootstrap/js/bootstrap.js b/wqflask/wqflask/static/packages/bootstrap/js/bootstrap.js
deleted file mode 100644
index 8dff365f..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/js/bootstrap.js
+++ /dev/null
@@ -1,2276 +0,0 @@
-/*!
- * Bootstrap v3.3.0 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-if (typeof jQuery === 'undefined') {
- throw new Error('Bootstrap\'s JavaScript requires jQuery')
-}
-
-+function ($) {
- var version = $.fn.jquery.split(' ')[0].split('.')
- if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {
- throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher')
- }
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: transition.js v3.3.0
- * http://getbootstrap.com/javascript/#transitions
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
- // ============================================================
-
- function transitionEnd() {
- var el = document.createElement('bootstrap')
-
- var transEndEventNames = {
- WebkitTransition : 'webkitTransitionEnd',
- MozTransition : 'transitionend',
- OTransition : 'oTransitionEnd otransitionend',
- transition : 'transitionend'
- }
-
- for (var name in transEndEventNames) {
- if (el.style[name] !== undefined) {
- return { end: transEndEventNames[name] }
- }
- }
-
- return false // explicit for ie8 ( ._.)
- }
-
- // http://blog.alexmaccaw.com/css-transitions
- $.fn.emulateTransitionEnd = function (duration) {
- var called = false
- var $el = this
- $(this).one('bsTransitionEnd', function () { called = true })
- var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
- setTimeout(callback, duration)
- return this
- }
-
- $(function () {
- $.support.transition = transitionEnd()
-
- if (!$.support.transition) return
-
- $.event.special.bsTransitionEnd = {
- bindType: $.support.transition.end,
- delegateType: $.support.transition.end,
- handle: function (e) {
- if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
- }
- }
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: alert.js v3.3.0
- * http://getbootstrap.com/javascript/#alerts
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // ALERT CLASS DEFINITION
- // ======================
-
- var dismiss = '[data-dismiss="alert"]'
- var Alert = function (el) {
- $(el).on('click', dismiss, this.close)
- }
-
- Alert.VERSION = '3.3.0'
-
- Alert.TRANSITION_DURATION = 150
-
- Alert.prototype.close = function (e) {
- var $this = $(this)
- var selector = $this.attr('data-target')
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
- }
-
- var $parent = $(selector)
-
- if (e) e.preventDefault()
-
- if (!$parent.length) {
- $parent = $this.closest('.alert')
- }
-
- $parent.trigger(e = $.Event('close.bs.alert'))
-
- if (e.isDefaultPrevented()) return
-
- $parent.removeClass('in')
-
- function removeElement() {
- // detach from parent, fire event then clean up data
- $parent.detach().trigger('closed.bs.alert').remove()
- }
-
- $.support.transition && $parent.hasClass('fade') ?
- $parent
- .one('bsTransitionEnd', removeElement)
- .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
- removeElement()
- }
-
-
- // ALERT PLUGIN DEFINITION
- // =======================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.alert')
-
- if (!data) $this.data('bs.alert', (data = new Alert(this)))
- if (typeof option == 'string') data[option].call($this)
- })
- }
-
- var old = $.fn.alert
-
- $.fn.alert = Plugin
- $.fn.alert.Constructor = Alert
-
-
- // ALERT NO CONFLICT
- // =================
-
- $.fn.alert.noConflict = function () {
- $.fn.alert = old
- return this
- }
-
-
- // ALERT DATA-API
- // ==============
-
- $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: button.js v3.3.0
- * http://getbootstrap.com/javascript/#buttons
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // BUTTON PUBLIC CLASS DEFINITION
- // ==============================
-
- var Button = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, Button.DEFAULTS, options)
- this.isLoading = false
- }
-
- Button.VERSION = '3.3.0'
-
- Button.DEFAULTS = {
- loadingText: 'loading...'
- }
-
- Button.prototype.setState = function (state) {
- var d = 'disabled'
- var $el = this.$element
- var val = $el.is('input') ? 'val' : 'html'
- var data = $el.data()
-
- state = state + 'Text'
-
- if (data.resetText == null) $el.data('resetText', $el[val]())
-
- // push to event loop to allow forms to submit
- setTimeout($.proxy(function () {
- $el[val](data[state] == null ? this.options[state] : data[state])
-
- if (state == 'loadingText') {
- this.isLoading = true
- $el.addClass(d).attr(d, d)
- } else if (this.isLoading) {
- this.isLoading = false
- $el.removeClass(d).removeAttr(d)
- }
- }, this), 0)
- }
-
- Button.prototype.toggle = function () {
- var changed = true
- var $parent = this.$element.closest('[data-toggle="buttons"]')
-
- if ($parent.length) {
- var $input = this.$element.find('input')
- if ($input.prop('type') == 'radio') {
- if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
- else $parent.find('.active').removeClass('active')
- }
- if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
- } else {
- this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
- }
-
- if (changed) this.$element.toggleClass('active')
- }
-
-
- // BUTTON PLUGIN DEFINITION
- // ========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.button')
- var options = typeof option == 'object' && option
-
- if (!data) $this.data('bs.button', (data = new Button(this, options)))
-
- if (option == 'toggle') data.toggle()
- else if (option) data.setState(option)
- })
- }
-
- var old = $.fn.button
-
- $.fn.button = Plugin
- $.fn.button.Constructor = Button
-
-
- // BUTTON NO CONFLICT
- // ==================
-
- $.fn.button.noConflict = function () {
- $.fn.button = old
- return this
- }
-
-
- // BUTTON DATA-API
- // ===============
-
- $(document)
- .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
- var $btn = $(e.target)
- if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
- Plugin.call($btn, 'toggle')
- e.preventDefault()
- })
- .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
- $(e.target).closest('.btn').toggleClass('focus', e.type == 'focus')
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: carousel.js v3.3.0
- * http://getbootstrap.com/javascript/#carousel
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // CAROUSEL CLASS DEFINITION
- // =========================
-
- var Carousel = function (element, options) {
- this.$element = $(element)
- this.$indicators = this.$element.find('.carousel-indicators')
- this.options = options
- this.paused =
- this.sliding =
- this.interval =
- this.$active =
- this.$items = null
-
- this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
-
- this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
- .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
- .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
- }
-
- Carousel.VERSION = '3.3.0'
-
- Carousel.TRANSITION_DURATION = 600
-
- Carousel.DEFAULTS = {
- interval: 5000,
- pause: 'hover',
- wrap: true,
- keyboard: true
- }
-
- Carousel.prototype.keydown = function (e) {
- switch (e.which) {
- case 37: this.prev(); break
- case 39: this.next(); break
- default: return
- }
-
- e.preventDefault()
- }
-
- Carousel.prototype.cycle = function (e) {
- e || (this.paused = false)
-
- this.interval && clearInterval(this.interval)
-
- this.options.interval
- && !this.paused
- && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
-
- return this
- }
-
- Carousel.prototype.getItemIndex = function (item) {
- this.$items = item.parent().children('.item')
- return this.$items.index(item || this.$active)
- }
-
- Carousel.prototype.getItemForDirection = function (direction, active) {
- var delta = direction == 'prev' ? -1 : 1
- var activeIndex = this.getItemIndex(active)
- var itemIndex = (activeIndex + delta) % this.$items.length
- return this.$items.eq(itemIndex)
- }
-
- Carousel.prototype.to = function (pos) {
- var that = this
- var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
-
- if (pos > (this.$items.length - 1) || pos < 0) return
-
- if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
- if (activeIndex == pos) return this.pause().cycle()
-
- return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
- }
-
- Carousel.prototype.pause = function (e) {
- e || (this.paused = true)
-
- if (this.$element.find('.next, .prev').length && $.support.transition) {
- this.$element.trigger($.support.transition.end)
- this.cycle(true)
- }
-
- this.interval = clearInterval(this.interval)
-
- return this
- }
-
- Carousel.prototype.next = function () {
- if (this.sliding) return
- return this.slide('next')
- }
-
- Carousel.prototype.prev = function () {
- if (this.sliding) return
- return this.slide('prev')
- }
-
- Carousel.prototype.slide = function (type, next) {
- var $active = this.$element.find('.item.active')
- var $next = next || this.getItemForDirection(type, $active)
- var isCycling = this.interval
- var direction = type == 'next' ? 'left' : 'right'
- var fallback = type == 'next' ? 'first' : 'last'
- var that = this
-
- if (!$next.length) {
- if (!this.options.wrap) return
- $next = this.$element.find('.item')[fallback]()
- }
-
- if ($next.hasClass('active')) return (this.sliding = false)
-
- var relatedTarget = $next[0]
- var slideEvent = $.Event('slide.bs.carousel', {
- relatedTarget: relatedTarget,
- direction: direction
- })
- this.$element.trigger(slideEvent)
- if (slideEvent.isDefaultPrevented()) return
-
- this.sliding = true
-
- isCycling && this.pause()
-
- if (this.$indicators.length) {
- this.$indicators.find('.active').removeClass('active')
- var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
- $nextIndicator && $nextIndicator.addClass('active')
- }
-
- var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
- if ($.support.transition && this.$element.hasClass('slide')) {
- $next.addClass(type)
- $next[0].offsetWidth // force reflow
- $active.addClass(direction)
- $next.addClass(direction)
- $active
- .one('bsTransitionEnd', function () {
- $next.removeClass([type, direction].join(' ')).addClass('active')
- $active.removeClass(['active', direction].join(' '))
- that.sliding = false
- setTimeout(function () {
- that.$element.trigger(slidEvent)
- }, 0)
- })
- .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
- } else {
- $active.removeClass('active')
- $next.addClass('active')
- this.sliding = false
- this.$element.trigger(slidEvent)
- }
-
- isCycling && this.cycle()
-
- return this
- }
-
-
- // CAROUSEL PLUGIN DEFINITION
- // ==========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.carousel')
- var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
- var action = typeof option == 'string' ? option : options.slide
-
- if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
- if (typeof option == 'number') data.to(option)
- else if (action) data[action]()
- else if (options.interval) data.pause().cycle()
- })
- }
-
- var old = $.fn.carousel
-
- $.fn.carousel = Plugin
- $.fn.carousel.Constructor = Carousel
-
-
- // CAROUSEL NO CONFLICT
- // ====================
-
- $.fn.carousel.noConflict = function () {
- $.fn.carousel = old
- return this
- }
-
-
- // CAROUSEL DATA-API
- // =================
-
- var clickHandler = function (e) {
- var href
- var $this = $(this)
- var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
- if (!$target.hasClass('carousel')) return
- var options = $.extend({}, $target.data(), $this.data())
- var slideIndex = $this.attr('data-slide-to')
- if (slideIndex) options.interval = false
-
- Plugin.call($target, options)
-
- if (slideIndex) {
- $target.data('bs.carousel').to(slideIndex)
- }
-
- e.preventDefault()
- }
-
- $(document)
- .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
- .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
-
- $(window).on('load', function () {
- $('[data-ride="carousel"]').each(function () {
- var $carousel = $(this)
- Plugin.call($carousel, $carousel.data())
- })
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: collapse.js v3.3.0
- * http://getbootstrap.com/javascript/#collapse
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // COLLAPSE PUBLIC CLASS DEFINITION
- // ================================
-
- var Collapse = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, Collapse.DEFAULTS, options)
- this.$trigger = $(this.options.trigger).filter('[href="#' + element.id + '"], [data-target="#' + element.id + '"]')
- this.transitioning = null
-
- if (this.options.parent) {
- this.$parent = this.getParent()
- } else {
- this.addAriaAndCollapsedClass(this.$element, this.$trigger)
- }
-
- if (this.options.toggle) this.toggle()
- }
-
- Collapse.VERSION = '3.3.0'
-
- Collapse.TRANSITION_DURATION = 350
-
- Collapse.DEFAULTS = {
- toggle: true,
- trigger: '[data-toggle="collapse"]'
- }
-
- Collapse.prototype.dimension = function () {
- var hasWidth = this.$element.hasClass('width')
- return hasWidth ? 'width' : 'height'
- }
-
- Collapse.prototype.show = function () {
- if (this.transitioning || this.$element.hasClass('in')) return
-
- var activesData
- var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing')
-
- if (actives && actives.length) {
- activesData = actives.data('bs.collapse')
- if (activesData && activesData.transitioning) return
- }
-
- var startEvent = $.Event('show.bs.collapse')
- this.$element.trigger(startEvent)
- if (startEvent.isDefaultPrevented()) return
-
- if (actives && actives.length) {
- Plugin.call(actives, 'hide')
- activesData || actives.data('bs.collapse', null)
- }
-
- var dimension = this.dimension()
-
- this.$element
- .removeClass('collapse')
- .addClass('collapsing')[dimension](0)
- .attr('aria-expanded', true)
-
- this.$trigger
- .removeClass('collapsed')
- .attr('aria-expanded', true)
-
- this.transitioning = 1
-
- var complete = function () {
- this.$element
- .removeClass('collapsing')
- .addClass('collapse in')[dimension]('')
- this.transitioning = 0
- this.$element
- .trigger('shown.bs.collapse')
- }
-
- if (!$.support.transition) return complete.call(this)
-
- var scrollSize = $.camelCase(['scroll', dimension].join('-'))
-
- this.$element
- .one('bsTransitionEnd', $.proxy(complete, this))
- .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
- }
-
- Collapse.prototype.hide = function () {
- if (this.transitioning || !this.$element.hasClass('in')) return
-
- var startEvent = $.Event('hide.bs.collapse')
- this.$element.trigger(startEvent)
- if (startEvent.isDefaultPrevented()) return
-
- var dimension = this.dimension()
-
- this.$element[dimension](this.$element[dimension]())[0].offsetHeight
-
- this.$element
- .addClass('collapsing')
- .removeClass('collapse in')
- .attr('aria-expanded', false)
-
- this.$trigger
- .addClass('collapsed')
- .attr('aria-expanded', false)
-
- this.transitioning = 1
-
- var complete = function () {
- this.transitioning = 0
- this.$element
- .removeClass('collapsing')
- .addClass('collapse')
- .trigger('hidden.bs.collapse')
- }
-
- if (!$.support.transition) return complete.call(this)
-
- this.$element
- [dimension](0)
- .one('bsTransitionEnd', $.proxy(complete, this))
- .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
- }
-
- Collapse.prototype.toggle = function () {
- this[this.$element.hasClass('in') ? 'hide' : 'show']()
- }
-
- Collapse.prototype.getParent = function () {
- return $(this.options.parent)
- .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
- .each($.proxy(function (i, element) {
- var $element = $(element)
- this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
- }, this))
- .end()
- }
-
- Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
- var isOpen = $element.hasClass('in')
-
- $element.attr('aria-expanded', isOpen)
- $trigger
- .toggleClass('collapsed', !isOpen)
- .attr('aria-expanded', isOpen)
- }
-
- function getTargetFromTrigger($trigger) {
- var href
- var target = $trigger.attr('data-target')
- || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
-
- return $(target)
- }
-
-
- // COLLAPSE PLUGIN DEFINITION
- // ==========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.collapse')
- var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
- if (!data && options.toggle && option == 'show') options.toggle = false
- if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.collapse
-
- $.fn.collapse = Plugin
- $.fn.collapse.Constructor = Collapse
-
-
- // COLLAPSE NO CONFLICT
- // ====================
-
- $.fn.collapse.noConflict = function () {
- $.fn.collapse = old
- return this
- }
-
-
- // COLLAPSE DATA-API
- // =================
-
- $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
- var $this = $(this)
-
- if (!$this.attr('data-target')) e.preventDefault()
-
- var $target = getTargetFromTrigger($this)
- var data = $target.data('bs.collapse')
- var option = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this })
-
- Plugin.call($target, option)
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: dropdown.js v3.3.0
- * http://getbootstrap.com/javascript/#dropdowns
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // DROPDOWN CLASS DEFINITION
- // =========================
-
- var backdrop = '.dropdown-backdrop'
- var toggle = '[data-toggle="dropdown"]'
- var Dropdown = function (element) {
- $(element).on('click.bs.dropdown', this.toggle)
- }
-
- Dropdown.VERSION = '3.3.0'
-
- Dropdown.prototype.toggle = function (e) {
- var $this = $(this)
-
- if ($this.is('.disabled, :disabled')) return
-
- var $parent = getParent($this)
- var isActive = $parent.hasClass('open')
-
- clearMenus()
-
- if (!isActive) {
- if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
- // if mobile we use a backdrop because click events don't delegate
- $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
- }
-
- var relatedTarget = { relatedTarget: this }
- $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
-
- if (e.isDefaultPrevented()) return
-
- $this
- .trigger('focus')
- .attr('aria-expanded', 'true')
-
- $parent
- .toggleClass('open')
- .trigger('shown.bs.dropdown', relatedTarget)
- }
-
- return false
- }
-
- Dropdown.prototype.keydown = function (e) {
- if (!/(38|40|27|32)/.test(e.which)) return
-
- var $this = $(this)
-
- e.preventDefault()
- e.stopPropagation()
-
- if ($this.is('.disabled, :disabled')) return
-
- var $parent = getParent($this)
- var isActive = $parent.hasClass('open')
-
- if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {
- if (e.which == 27) $parent.find(toggle).trigger('focus')
- return $this.trigger('click')
- }
-
- var desc = ' li:not(.divider):visible a'
- var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
-
- if (!$items.length) return
-
- var index = $items.index(e.target)
-
- if (e.which == 38 && index > 0) index-- // up
- if (e.which == 40 && index < $items.length - 1) index++ // down
- if (!~index) index = 0
-
- $items.eq(index).trigger('focus')
- }
-
- function clearMenus(e) {
- if (e && e.which === 3) return
- $(backdrop).remove()
- $(toggle).each(function () {
- var $this = $(this)
- var $parent = getParent($this)
- var relatedTarget = { relatedTarget: this }
-
- if (!$parent.hasClass('open')) return
-
- $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
-
- if (e.isDefaultPrevented()) return
-
- $this.attr('aria-expanded', 'false')
- $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
- })
- }
-
- function getParent($this) {
- var selector = $this.attr('data-target')
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
- }
-
- var $parent = selector && $(selector)
-
- return $parent && $parent.length ? $parent : $this.parent()
- }
-
-
- // DROPDOWN PLUGIN DEFINITION
- // ==========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.dropdown')
-
- if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
- if (typeof option == 'string') data[option].call($this)
- })
- }
-
- var old = $.fn.dropdown
-
- $.fn.dropdown = Plugin
- $.fn.dropdown.Constructor = Dropdown
-
-
- // DROPDOWN NO CONFLICT
- // ====================
-
- $.fn.dropdown.noConflict = function () {
- $.fn.dropdown = old
- return this
- }
-
-
- // APPLY TO STANDARD DROPDOWN ELEMENTS
- // ===================================
-
- $(document)
- .on('click.bs.dropdown.data-api', clearMenus)
- .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
- .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
- .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
- .on('keydown.bs.dropdown.data-api', '[role="menu"]', Dropdown.prototype.keydown)
- .on('keydown.bs.dropdown.data-api', '[role="listbox"]', Dropdown.prototype.keydown)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: modal.js v3.3.0
- * http://getbootstrap.com/javascript/#modals
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // MODAL CLASS DEFINITION
- // ======================
-
- var Modal = function (element, options) {
- this.options = options
- this.$body = $(document.body)
- this.$element = $(element)
- this.$backdrop =
- this.isShown = null
- this.scrollbarWidth = 0
-
- if (this.options.remote) {
- this.$element
- .find('.modal-content')
- .load(this.options.remote, $.proxy(function () {
- this.$element.trigger('loaded.bs.modal')
- }, this))
- }
- }
-
- Modal.VERSION = '3.3.0'
-
- Modal.TRANSITION_DURATION = 300
- Modal.BACKDROP_TRANSITION_DURATION = 150
-
- Modal.DEFAULTS = {
- backdrop: true,
- keyboard: true,
- show: true
- }
-
- Modal.prototype.toggle = function (_relatedTarget) {
- return this.isShown ? this.hide() : this.show(_relatedTarget)
- }
-
- Modal.prototype.show = function (_relatedTarget) {
- var that = this
- var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
-
- this.$element.trigger(e)
-
- if (this.isShown || e.isDefaultPrevented()) return
-
- this.isShown = true
-
- this.checkScrollbar()
- this.$body.addClass('modal-open')
-
- this.setScrollbar()
- this.escape()
-
- this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
-
- this.backdrop(function () {
- var transition = $.support.transition && that.$element.hasClass('fade')
-
- if (!that.$element.parent().length) {
- that.$element.appendTo(that.$body) // don't move modals dom position
- }
-
- that.$element
- .show()
- .scrollTop(0)
-
- if (transition) {
- that.$element[0].offsetWidth // force reflow
- }
-
- that.$element
- .addClass('in')
- .attr('aria-hidden', false)
-
- that.enforceFocus()
-
- var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
-
- transition ?
- that.$element.find('.modal-dialog') // wait for modal to slide in
- .one('bsTransitionEnd', function () {
- that.$element.trigger('focus').trigger(e)
- })
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
- that.$element.trigger('focus').trigger(e)
- })
- }
-
- Modal.prototype.hide = function (e) {
- if (e) e.preventDefault()
-
- e = $.Event('hide.bs.modal')
-
- this.$element.trigger(e)
-
- if (!this.isShown || e.isDefaultPrevented()) return
-
- this.isShown = false
-
- this.escape()
-
- $(document).off('focusin.bs.modal')
-
- this.$element
- .removeClass('in')
- .attr('aria-hidden', true)
- .off('click.dismiss.bs.modal')
-
- $.support.transition && this.$element.hasClass('fade') ?
- this.$element
- .one('bsTransitionEnd', $.proxy(this.hideModal, this))
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
- this.hideModal()
- }
-
- Modal.prototype.enforceFocus = function () {
- $(document)
- .off('focusin.bs.modal') // guard against infinite focus loop
- .on('focusin.bs.modal', $.proxy(function (e) {
- if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
- this.$element.trigger('focus')
- }
- }, this))
- }
-
- Modal.prototype.escape = function () {
- if (this.isShown && this.options.keyboard) {
- this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
- e.which == 27 && this.hide()
- }, this))
- } else if (!this.isShown) {
- this.$element.off('keydown.dismiss.bs.modal')
- }
- }
-
- Modal.prototype.hideModal = function () {
- var that = this
- this.$element.hide()
- this.backdrop(function () {
- that.$body.removeClass('modal-open')
- that.resetScrollbar()
- that.$element.trigger('hidden.bs.modal')
- })
- }
-
- Modal.prototype.removeBackdrop = function () {
- this.$backdrop && this.$backdrop.remove()
- this.$backdrop = null
- }
-
- Modal.prototype.backdrop = function (callback) {
- var that = this
- var animate = this.$element.hasClass('fade') ? 'fade' : ''
-
- if (this.isShown && this.options.backdrop) {
- var doAnimate = $.support.transition && animate
-
- this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
- .prependTo(this.$element)
- .on('click.dismiss.bs.modal', $.proxy(function (e) {
- if (e.target !== e.currentTarget) return
- this.options.backdrop == 'static'
- ? this.$element[0].focus.call(this.$element[0])
- : this.hide.call(this)
- }, this))
-
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
-
- this.$backdrop.addClass('in')
-
- if (!callback) return
-
- doAnimate ?
- this.$backdrop
- .one('bsTransitionEnd', callback)
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
- callback()
-
- } else if (!this.isShown && this.$backdrop) {
- this.$backdrop.removeClass('in')
-
- var callbackRemove = function () {
- that.removeBackdrop()
- callback && callback()
- }
- $.support.transition && this.$element.hasClass('fade') ?
- this.$backdrop
- .one('bsTransitionEnd', callbackRemove)
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
- callbackRemove()
-
- } else if (callback) {
- callback()
- }
- }
-
- Modal.prototype.checkScrollbar = function () {
- this.scrollbarWidth = this.measureScrollbar()
- }
-
- Modal.prototype.setScrollbar = function () {
- var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
- if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
- }
-
- Modal.prototype.resetScrollbar = function () {
- this.$body.css('padding-right', '')
- }
-
- Modal.prototype.measureScrollbar = function () { // thx walsh
- if (document.body.clientWidth >= window.innerWidth) return 0
- var scrollDiv = document.createElement('div')
- scrollDiv.className = 'modal-scrollbar-measure'
- this.$body.append(scrollDiv)
- var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
- this.$body[0].removeChild(scrollDiv)
- return scrollbarWidth
- }
-
-
- // MODAL PLUGIN DEFINITION
- // =======================
-
- function Plugin(option, _relatedTarget) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.modal')
- var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
- if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
- if (typeof option == 'string') data[option](_relatedTarget)
- else if (options.show) data.show(_relatedTarget)
- })
- }
-
- var old = $.fn.modal
-
- $.fn.modal = Plugin
- $.fn.modal.Constructor = Modal
-
-
- // MODAL NO CONFLICT
- // =================
-
- $.fn.modal.noConflict = function () {
- $.fn.modal = old
- return this
- }
-
-
- // MODAL DATA-API
- // ==============
-
- $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
- var $this = $(this)
- var href = $this.attr('href')
- var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
- var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
-
- if ($this.is('a')) e.preventDefault()
-
- $target.one('show.bs.modal', function (showEvent) {
- if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
- $target.one('hidden.bs.modal', function () {
- $this.is(':visible') && $this.trigger('focus')
- })
- })
- Plugin.call($target, option, this)
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: tooltip.js v3.3.0
- * http://getbootstrap.com/javascript/#tooltip
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // TOOLTIP PUBLIC CLASS DEFINITION
- // ===============================
-
- var Tooltip = function (element, options) {
- this.type =
- this.options =
- this.enabled =
- this.timeout =
- this.hoverState =
- this.$element = null
-
- this.init('tooltip', element, options)
- }
-
- Tooltip.VERSION = '3.3.0'
-
- Tooltip.TRANSITION_DURATION = 150
-
- Tooltip.DEFAULTS = {
- animation: true,
- placement: 'top',
- selector: false,
- template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
- trigger: 'hover focus',
- title: '',
- delay: 0,
- html: false,
- container: false,
- viewport: {
- selector: 'body',
- padding: 0
- }
- }
-
- Tooltip.prototype.init = function (type, element, options) {
- this.enabled = true
- this.type = type
- this.$element = $(element)
- this.options = this.getOptions(options)
- this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
-
- var triggers = this.options.trigger.split(' ')
-
- for (var i = triggers.length; i--;) {
- var trigger = triggers[i]
-
- if (trigger == 'click') {
- this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
- } else if (trigger != 'manual') {
- var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
- var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
-
- this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
- this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
- }
- }
-
- this.options.selector ?
- (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
- this.fixTitle()
- }
-
- Tooltip.prototype.getDefaults = function () {
- return Tooltip.DEFAULTS
- }
-
- Tooltip.prototype.getOptions = function (options) {
- options = $.extend({}, this.getDefaults(), this.$element.data(), options)
-
- if (options.delay && typeof options.delay == 'number') {
- options.delay = {
- show: options.delay,
- hide: options.delay
- }
- }
-
- return options
- }
-
- Tooltip.prototype.getDelegateOptions = function () {
- var options = {}
- var defaults = this.getDefaults()
-
- this._options && $.each(this._options, function (key, value) {
- if (defaults[key] != value) options[key] = value
- })
-
- return options
- }
-
- Tooltip.prototype.enter = function (obj) {
- var self = obj instanceof this.constructor ?
- obj : $(obj.currentTarget).data('bs.' + this.type)
-
- if (self && self.$tip && self.$tip.is(':visible')) {
- self.hoverState = 'in'
- return
- }
-
- if (!self) {
- self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
- $(obj.currentTarget).data('bs.' + this.type, self)
- }
-
- clearTimeout(self.timeout)
-
- self.hoverState = 'in'
-
- if (!self.options.delay || !self.options.delay.show) return self.show()
-
- self.timeout = setTimeout(function () {
- if (self.hoverState == 'in') self.show()
- }, self.options.delay.show)
- }
-
- Tooltip.prototype.leave = function (obj) {
- var self = obj instanceof this.constructor ?
- obj : $(obj.currentTarget).data('bs.' + this.type)
-
- if (!self) {
- self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
- $(obj.currentTarget).data('bs.' + this.type, self)
- }
-
- clearTimeout(self.timeout)
-
- self.hoverState = 'out'
-
- if (!self.options.delay || !self.options.delay.hide) return self.hide()
-
- self.timeout = setTimeout(function () {
- if (self.hoverState == 'out') self.hide()
- }, self.options.delay.hide)
- }
-
- Tooltip.prototype.show = function () {
- var e = $.Event('show.bs.' + this.type)
-
- if (this.hasContent() && this.enabled) {
- this.$element.trigger(e)
-
- var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
- if (e.isDefaultPrevented() || !inDom) return
- var that = this
-
- var $tip = this.tip()
-
- var tipId = this.getUID(this.type)
-
- this.setContent()
- $tip.attr('id', tipId)
- this.$element.attr('aria-describedby', tipId)
-
- if (this.options.animation) $tip.addClass('fade')
-
- var placement = typeof this.options.placement == 'function' ?
- this.options.placement.call(this, $tip[0], this.$element[0]) :
- this.options.placement
-
- var autoToken = /\s?auto?\s?/i
- var autoPlace = autoToken.test(placement)
- if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
-
- $tip
- .detach()
- .css({ top: 0, left: 0, display: 'block' })
- .addClass(placement)
- .data('bs.' + this.type, this)
-
- this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
-
- var pos = this.getPosition()
- var actualWidth = $tip[0].offsetWidth
- var actualHeight = $tip[0].offsetHeight
-
- if (autoPlace) {
- var orgPlacement = placement
- var $container = this.options.container ? $(this.options.container) : this.$element.parent()
- var containerDim = this.getPosition($container)
-
- placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' :
- placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' :
- placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' :
- placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' :
- placement
-
- $tip
- .removeClass(orgPlacement)
- .addClass(placement)
- }
-
- var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
-
- this.applyPlacement(calculatedOffset, placement)
-
- var complete = function () {
- var prevHoverState = that.hoverState
- that.$element.trigger('shown.bs.' + that.type)
- that.hoverState = null
-
- if (prevHoverState == 'out') that.leave(that)
- }
-
- $.support.transition && this.$tip.hasClass('fade') ?
- $tip
- .one('bsTransitionEnd', complete)
- .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
- complete()
- }
- }
-
- Tooltip.prototype.applyPlacement = function (offset, placement) {
- var $tip = this.tip()
- var width = $tip[0].offsetWidth
- var height = $tip[0].offsetHeight
-
- // manually read margins because getBoundingClientRect includes difference
- var marginTop = parseInt($tip.css('margin-top'), 10)
- var marginLeft = parseInt($tip.css('margin-left'), 10)
-
- // we must check for NaN for ie 8/9
- if (isNaN(marginTop)) marginTop = 0
- if (isNaN(marginLeft)) marginLeft = 0
-
- offset.top = offset.top + marginTop
- offset.left = offset.left + marginLeft
-
- // $.fn.offset doesn't round pixel values
- // so we use setOffset directly with our own function B-0
- $.offset.setOffset($tip[0], $.extend({
- using: function (props) {
- $tip.css({
- top: Math.round(props.top),
- left: Math.round(props.left)
- })
- }
- }, offset), 0)
-
- $tip.addClass('in')
-
- // check to see if placing tip in new offset caused the tip to resize itself
- var actualWidth = $tip[0].offsetWidth
- var actualHeight = $tip[0].offsetHeight
-
- if (placement == 'top' && actualHeight != height) {
- offset.top = offset.top + height - actualHeight
- }
-
- var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
-
- if (delta.left) offset.left += delta.left
- else offset.top += delta.top
-
- var isVertical = /top|bottom/.test(placement)
- var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
- var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
-
- $tip.offset(offset)
- this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
- }
-
- Tooltip.prototype.replaceArrow = function (delta, dimension, isHorizontal) {
- this.arrow()
- .css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
- .css(isHorizontal ? 'top' : 'left', '')
- }
-
- Tooltip.prototype.setContent = function () {
- var $tip = this.tip()
- var title = this.getTitle()
-
- $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
- $tip.removeClass('fade in top bottom left right')
- }
-
- Tooltip.prototype.hide = function (callback) {
- var that = this
- var $tip = this.tip()
- var e = $.Event('hide.bs.' + this.type)
-
- function complete() {
- if (that.hoverState != 'in') $tip.detach()
- that.$element
- .removeAttr('aria-describedby')
- .trigger('hidden.bs.' + that.type)
- callback && callback()
- }
-
- this.$element.trigger(e)
-
- if (e.isDefaultPrevented()) return
-
- $tip.removeClass('in')
-
- $.support.transition && this.$tip.hasClass('fade') ?
- $tip
- .one('bsTransitionEnd', complete)
- .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
- complete()
-
- this.hoverState = null
-
- return this
- }
-
- Tooltip.prototype.fixTitle = function () {
- var $e = this.$element
- if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
- $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
- }
- }
-
- Tooltip.prototype.hasContent = function () {
- return this.getTitle()
- }
-
- Tooltip.prototype.getPosition = function ($element) {
- $element = $element || this.$element
-
- var el = $element[0]
- var isBody = el.tagName == 'BODY'
-
- var elRect = el.getBoundingClientRect()
- if (elRect.width == null) {
- // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
- elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
- }
- var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
- var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
- var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
-
- return $.extend({}, elRect, scroll, outerDims, elOffset)
- }
-
- Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
- return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
- placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
- placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
- /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
-
- }
-
- Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
- var delta = { top: 0, left: 0 }
- if (!this.$viewport) return delta
-
- var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
- var viewportDimensions = this.getPosition(this.$viewport)
-
- if (/right|left/.test(placement)) {
- var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
- var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
- if (topEdgeOffset < viewportDimensions.top) { // top overflow
- delta.top = viewportDimensions.top - topEdgeOffset
- } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
- delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
- }
- } else {
- var leftEdgeOffset = pos.left - viewportPadding
- var rightEdgeOffset = pos.left + viewportPadding + actualWidth
- if (leftEdgeOffset < viewportDimensions.left) { // left overflow
- delta.left = viewportDimensions.left - leftEdgeOffset
- } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
- delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
- }
- }
-
- return delta
- }
-
- Tooltip.prototype.getTitle = function () {
- var title
- var $e = this.$element
- var o = this.options
-
- title = $e.attr('data-original-title')
- || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
-
- return title
- }
-
- Tooltip.prototype.getUID = function (prefix) {
- do prefix += ~~(Math.random() * 1000000)
- while (document.getElementById(prefix))
- return prefix
- }
-
- Tooltip.prototype.tip = function () {
- return (this.$tip = this.$tip || $(this.options.template))
- }
-
- Tooltip.prototype.arrow = function () {
- return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
- }
-
- Tooltip.prototype.enable = function () {
- this.enabled = true
- }
-
- Tooltip.prototype.disable = function () {
- this.enabled = false
- }
-
- Tooltip.prototype.toggleEnabled = function () {
- this.enabled = !this.enabled
- }
-
- Tooltip.prototype.toggle = function (e) {
- var self = this
- if (e) {
- self = $(e.currentTarget).data('bs.' + this.type)
- if (!self) {
- self = new this.constructor(e.currentTarget, this.getDelegateOptions())
- $(e.currentTarget).data('bs.' + this.type, self)
- }
- }
-
- self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
- }
-
- Tooltip.prototype.destroy = function () {
- var that = this
- clearTimeout(this.timeout)
- this.hide(function () {
- that.$element.off('.' + that.type).removeData('bs.' + that.type)
- })
- }
-
-
- // TOOLTIP PLUGIN DEFINITION
- // =========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.tooltip')
- var options = typeof option == 'object' && option
- var selector = options && options.selector
-
- if (!data && option == 'destroy') return
- if (selector) {
- if (!data) $this.data('bs.tooltip', (data = {}))
- if (!data[selector]) data[selector] = new Tooltip(this, options)
- } else {
- if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
- }
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.tooltip
-
- $.fn.tooltip = Plugin
- $.fn.tooltip.Constructor = Tooltip
-
-
- // TOOLTIP NO CONFLICT
- // ===================
-
- $.fn.tooltip.noConflict = function () {
- $.fn.tooltip = old
- return this
- }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: popover.js v3.3.0
- * http://getbootstrap.com/javascript/#popovers
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // POPOVER PUBLIC CLASS DEFINITION
- // ===============================
-
- var Popover = function (element, options) {
- this.init('popover', element, options)
- }
-
- if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
-
- Popover.VERSION = '3.3.0'
-
- Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
- placement: 'right',
- trigger: 'click',
- content: '',
- template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
- })
-
-
- // NOTE: POPOVER EXTENDS tooltip.js
- // ================================
-
- Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
-
- Popover.prototype.constructor = Popover
-
- Popover.prototype.getDefaults = function () {
- return Popover.DEFAULTS
- }
-
- Popover.prototype.setContent = function () {
- var $tip = this.tip()
- var title = this.getTitle()
- var content = this.getContent()
-
- $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
- $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
- this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
- ](content)
-
- $tip.removeClass('fade top bottom left right in')
-
- // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
- // this manually by checking the contents.
- if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
- }
-
- Popover.prototype.hasContent = function () {
- return this.getTitle() || this.getContent()
- }
-
- Popover.prototype.getContent = function () {
- var $e = this.$element
- var o = this.options
-
- return $e.attr('data-content')
- || (typeof o.content == 'function' ?
- o.content.call($e[0]) :
- o.content)
- }
-
- Popover.prototype.arrow = function () {
- return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
- }
-
- Popover.prototype.tip = function () {
- if (!this.$tip) this.$tip = $(this.options.template)
- return this.$tip
- }
-
-
- // POPOVER PLUGIN DEFINITION
- // =========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.popover')
- var options = typeof option == 'object' && option
- var selector = options && options.selector
-
- if (!data && option == 'destroy') return
- if (selector) {
- if (!data) $this.data('bs.popover', (data = {}))
- if (!data[selector]) data[selector] = new Popover(this, options)
- } else {
- if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
- }
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.popover
-
- $.fn.popover = Plugin
- $.fn.popover.Constructor = Popover
-
-
- // POPOVER NO CONFLICT
- // ===================
-
- $.fn.popover.noConflict = function () {
- $.fn.popover = old
- return this
- }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: scrollspy.js v3.3.0
- * http://getbootstrap.com/javascript/#scrollspy
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // SCROLLSPY CLASS DEFINITION
- // ==========================
-
- function ScrollSpy(element, options) {
- var process = $.proxy(this.process, this)
-
- this.$body = $('body')
- this.$scrollElement = $(element).is('body') ? $(window) : $(element)
- this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
- this.selector = (this.options.target || '') + ' .nav li > a'
- this.offsets = []
- this.targets = []
- this.activeTarget = null
- this.scrollHeight = 0
-
- this.$scrollElement.on('scroll.bs.scrollspy', process)
- this.refresh()
- this.process()
- }
-
- ScrollSpy.VERSION = '3.3.0'
-
- ScrollSpy.DEFAULTS = {
- offset: 10
- }
-
- ScrollSpy.prototype.getScrollHeight = function () {
- return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
- }
-
- ScrollSpy.prototype.refresh = function () {
- var offsetMethod = 'offset'
- var offsetBase = 0
-
- if (!$.isWindow(this.$scrollElement[0])) {
- offsetMethod = 'position'
- offsetBase = this.$scrollElement.scrollTop()
- }
-
- this.offsets = []
- this.targets = []
- this.scrollHeight = this.getScrollHeight()
-
- var self = this
-
- this.$body
- .find(this.selector)
- .map(function () {
- var $el = $(this)
- var href = $el.data('target') || $el.attr('href')
- var $href = /^#./.test(href) && $(href)
-
- return ($href
- && $href.length
- && $href.is(':visible')
- && [[$href[offsetMethod]().top + offsetBase, href]]) || null
- })
- .sort(function (a, b) { return a[0] - b[0] })
- .each(function () {
- self.offsets.push(this[0])
- self.targets.push(this[1])
- })
- }
-
- ScrollSpy.prototype.process = function () {
- var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
- var scrollHeight = this.getScrollHeight()
- var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
- var offsets = this.offsets
- var targets = this.targets
- var activeTarget = this.activeTarget
- var i
-
- if (this.scrollHeight != scrollHeight) {
- this.refresh()
- }
-
- if (scrollTop >= maxScroll) {
- return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
- }
-
- if (activeTarget && scrollTop < offsets[0]) {
- this.activeTarget = null
- return this.clear()
- }
-
- for (i = offsets.length; i--;) {
- activeTarget != targets[i]
- && scrollTop >= offsets[i]
- && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
- && this.activate(targets[i])
- }
- }
-
- ScrollSpy.prototype.activate = function (target) {
- this.activeTarget = target
-
- this.clear()
-
- var selector = this.selector +
- '[data-target="' + target + '"],' +
- this.selector + '[href="' + target + '"]'
-
- var active = $(selector)
- .parents('li')
- .addClass('active')
-
- if (active.parent('.dropdown-menu').length) {
- active = active
- .closest('li.dropdown')
- .addClass('active')
- }
-
- active.trigger('activate.bs.scrollspy')
- }
-
- ScrollSpy.prototype.clear = function () {
- $(this.selector)
- .parentsUntil(this.options.target, '.active')
- .removeClass('active')
- }
-
-
- // SCROLLSPY PLUGIN DEFINITION
- // ===========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.scrollspy')
- var options = typeof option == 'object' && option
-
- if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.scrollspy
-
- $.fn.scrollspy = Plugin
- $.fn.scrollspy.Constructor = ScrollSpy
-
-
- // SCROLLSPY NO CONFLICT
- // =====================
-
- $.fn.scrollspy.noConflict = function () {
- $.fn.scrollspy = old
- return this
- }
-
-
- // SCROLLSPY DATA-API
- // ==================
-
- $(window).on('load.bs.scrollspy.data-api', function () {
- $('[data-spy="scroll"]').each(function () {
- var $spy = $(this)
- Plugin.call($spy, $spy.data())
- })
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: tab.js v3.3.0
- * http://getbootstrap.com/javascript/#tabs
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // TAB CLASS DEFINITION
- // ====================
-
- var Tab = function (element) {
- this.element = $(element)
- }
-
- Tab.VERSION = '3.3.0'
-
- Tab.TRANSITION_DURATION = 150
-
- Tab.prototype.show = function () {
- var $this = this.element
- var $ul = $this.closest('ul:not(.dropdown-menu)')
- var selector = $this.data('target')
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
- }
-
- if ($this.parent('li').hasClass('active')) return
-
- var $previous = $ul.find('.active:last a')
- var hideEvent = $.Event('hide.bs.tab', {
- relatedTarget: $this[0]
- })
- var showEvent = $.Event('show.bs.tab', {
- relatedTarget: $previous[0]
- })
-
- $previous.trigger(hideEvent)
- $this.trigger(showEvent)
-
- if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
-
- var $target = $(selector)
-
- this.activate($this.closest('li'), $ul)
- this.activate($target, $target.parent(), function () {
- $previous.trigger({
- type: 'hidden.bs.tab',
- relatedTarget: $this[0]
- })
- $this.trigger({
- type: 'shown.bs.tab',
- relatedTarget: $previous[0]
- })
- })
- }
-
- Tab.prototype.activate = function (element, container, callback) {
- var $active = container.find('> .active')
- var transition = callback
- && $.support.transition
- && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)
-
- function next() {
- $active
- .removeClass('active')
- .find('> .dropdown-menu > .active')
- .removeClass('active')
- .end()
- .find('[data-toggle="tab"]')
- .attr('aria-expanded', false)
-
- element
- .addClass('active')
- .find('[data-toggle="tab"]')
- .attr('aria-expanded', true)
-
- if (transition) {
- element[0].offsetWidth // reflow for transition
- element.addClass('in')
- } else {
- element.removeClass('fade')
- }
-
- if (element.parent('.dropdown-menu')) {
- element
- .closest('li.dropdown')
- .addClass('active')
- .end()
- .find('[data-toggle="tab"]')
- .attr('aria-expanded', true)
- }
-
- callback && callback()
- }
-
- $active.length && transition ?
- $active
- .one('bsTransitionEnd', next)
- .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
- next()
-
- $active.removeClass('in')
- }
-
-
- // TAB PLUGIN DEFINITION
- // =====================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.tab')
-
- if (!data) $this.data('bs.tab', (data = new Tab(this)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.tab
-
- $.fn.tab = Plugin
- $.fn.tab.Constructor = Tab
-
-
- // TAB NO CONFLICT
- // ===============
-
- $.fn.tab.noConflict = function () {
- $.fn.tab = old
- return this
- }
-
-
- // TAB DATA-API
- // ============
-
- var clickHandler = function (e) {
- e.preventDefault()
- Plugin.call($(this), 'show')
- }
-
- $(document)
- .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
- .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: affix.js v3.3.0
- * http://getbootstrap.com/javascript/#affix
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // AFFIX CLASS DEFINITION
- // ======================
-
- var Affix = function (element, options) {
- this.options = $.extend({}, Affix.DEFAULTS, options)
-
- this.$target = $(this.options.target)
- .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
- .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
-
- this.$element = $(element)
- this.affixed =
- this.unpin =
- this.pinnedOffset = null
-
- this.checkPosition()
- }
-
- Affix.VERSION = '3.3.0'
-
- Affix.RESET = 'affix affix-top affix-bottom'
-
- Affix.DEFAULTS = {
- offset: 0,
- target: window
- }
-
- Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
- var scrollTop = this.$target.scrollTop()
- var position = this.$element.offset()
- var targetHeight = this.$target.height()
-
- if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
-
- if (this.affixed == 'bottom') {
- if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
- return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
- }
-
- var initializing = this.affixed == null
- var colliderTop = initializing ? scrollTop : position.top
- var colliderHeight = initializing ? targetHeight : height
-
- if (offsetTop != null && colliderTop <= offsetTop) return 'top'
- if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
-
- return false
- }
-
- Affix.prototype.getPinnedOffset = function () {
- if (this.pinnedOffset) return this.pinnedOffset
- this.$element.removeClass(Affix.RESET).addClass('affix')
- var scrollTop = this.$target.scrollTop()
- var position = this.$element.offset()
- return (this.pinnedOffset = position.top - scrollTop)
- }
-
- Affix.prototype.checkPositionWithEventLoop = function () {
- setTimeout($.proxy(this.checkPosition, this), 1)
- }
-
- Affix.prototype.checkPosition = function () {
- if (!this.$element.is(':visible')) return
-
- var height = this.$element.height()
- var offset = this.options.offset
- var offsetTop = offset.top
- var offsetBottom = offset.bottom
- var scrollHeight = $('body').height()
-
- if (typeof offset != 'object') offsetBottom = offsetTop = offset
- if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
- if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
-
- var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
-
- if (this.affixed != affix) {
- if (this.unpin != null) this.$element.css('top', '')
-
- var affixType = 'affix' + (affix ? '-' + affix : '')
- var e = $.Event(affixType + '.bs.affix')
-
- this.$element.trigger(e)
-
- if (e.isDefaultPrevented()) return
-
- this.affixed = affix
- this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
-
- this.$element
- .removeClass(Affix.RESET)
- .addClass(affixType)
- .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
- }
-
- if (affix == 'bottom') {
- this.$element.offset({
- top: scrollHeight - height - offsetBottom
- })
- }
- }
-
-
- // AFFIX PLUGIN DEFINITION
- // =======================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.affix')
- var options = typeof option == 'object' && option
-
- if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.affix
-
- $.fn.affix = Plugin
- $.fn.affix.Constructor = Affix
-
-
- // AFFIX NO CONFLICT
- // =================
-
- $.fn.affix.noConflict = function () {
- $.fn.affix = old
- return this
- }
-
-
- // AFFIX DATA-API
- // ==============
-
- $(window).on('load', function () {
- $('[data-spy="affix"]').each(function () {
- var $spy = $(this)
- var data = $spy.data()
-
- data.offset = data.offset || {}
-
- if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
- if (data.offsetTop != null) data.offset.top = data.offsetTop
-
- Plugin.call($spy, data)
- })
- })
-
-}(jQuery);
diff --git a/wqflask/wqflask/static/packages/bootstrap/js/bootstrap.min.js b/wqflask/wqflask/static/packages/bootstrap/js/bootstrap.min.js
deleted file mode 100644
index 63866bcb..00000000
--- a/wqflask/wqflask/static/packages/bootstrap/js/bootstrap.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap v3.3.0 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.0",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus","focus"==b.type)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.0",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c="prev"==a?-1:1,d=this.getItemIndex(b),e=(d+c)%this.$items.length;return this.$items.eq(e)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i="next"==b?"first":"last",j=this;if(!f.length){if(!this.options.wrap)return;f=this.$element.find(".item")[i]()}if(f.hasClass("active"))return this.sliding=!1;var k=f[0],l=a.Event("slide.bs.carousel",{relatedTarget:k,direction:h});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var m=a(this.$indicators.children()[this.getItemIndex(f)]);m&&m.addClass("active")}var n=a.Event("slid.bs.carousel",{relatedTarget:k,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),j.sliding=!1,setTimeout(function(){j.$element.trigger(n)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(n)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a(this.options.trigger).filter('[href="#'+b.id+'"], [data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.0",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.find("> .panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.0",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$element.find(".modal-dialog").one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').prependTo(this.$element).on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.checkScrollbar=function(){this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){if(document.body.clientWidth>=window.innerWidth)return 0;var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.tooltip",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.0",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=this.tip(),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.popover",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.0",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)
-}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=i?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a("body").height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/README.md b/wqflask/wqflask/static/packages/colorbox/README.md
deleted file mode 100644
index 693902bb..00000000
--- a/wqflask/wqflask/static/packages/colorbox/README.md
+++ /dev/null
@@ -1,456 +0,0 @@
-## About Colorbox:
-A customizable lightbox plugin for jQuery. See the [project page](http://jacklmoore.com/colorbox/) for documentation and a demonstration, and the [FAQ](http://jacklmoore.com/colorbox/faq/) for solutions and examples to common issues. Released under the [MIT license](http://www.opensource.org/licenses/mit-license.php).
-
-## Translations Welcome
-Send me your language configuration files. See /i18n/jquery.colorbox-de.js as an example.
-
-## Changelog:
-
-### Version 1.4.15 - 2013/4/22
-
-* Added .webp to list of recognized image extensions
-
-### Version 1.4.14 - 2013/4/16
-
-* Added fadeOut property to control the closing fadeOut speed.
-* Removed longdesc attribute for now.
-
-### Version 1.4.13 - 2013/4/11
-
-* Fixed an error involving IE7/IE8 and legacy versions of jQuery
-
-### Version 1.4.12 - 2013/4/9
-
-* Fixed a potential conflict with Twitter Bootstrap default img styles.
-
-### Version 1.4.11 - 2013/4/9
-
-* Added `type='button'` to buttons to prevent accidental form submission
-* Added alt and longdesc attributes to photo content if they are present on the calling element.
-
-### Version 1.4.10 - 2013/4/2
-
-* Better 'old IE' feature detection that fixes an error with jQuery 2.0.0pre.
-
-### Version 1.4.9 - 2013/4/2
-
-* Fixes bug introduced in previous version.
-
-### Version 1.4.8 - 2013/4/2
-
-* Dropped IE6 support.
-* Fixed other issues with $.colorbox.remove.
-
-### Version 1.4.7 - 2013/4/1
-
-* Prevented an error if $.colorbox.remove is called during the transition.
-
-### Version 1.4.6 - 2013/3/19
-
-* Minor change to work around a jQuery 1.4.2 bug for legacy users.
-
-### Version 1.4.5 - 2013/3/10
-
-* Minor change to apply the close and className properties sooner.
-
-### Version 1.4.4 - 2013/3/10
-
-* Fixed an issue with percent-based heights in iOS
-* Fixed an issue with ajax requests being applied at the wrong time.
-
-### Version 1.4.3 - 2013/2/18
-
-* Made image preloading aware of retina settings.
-
-### Version 1.4.2 - 2013/2/18
-
-* Removed $.contains for compatibility with jQuery 1.3.x
-
-### Version 1.4.1 - 2013/2/14
-
-* Ignored left and right arrow keypresses if combined with the alt key.
-
-### Version 1.4.0 - 2013/2/12
-
-* Better accessibility:
- * Replaced div controls with buttons
- * Tabbed navigation confined to modal window
- * Added aria role
-
-### Version 1.3.34 - 2013/2/4
-
-* Updated manifest for plugins.jquery.com
-
-### Version 1.3.33 - 2013/2/4
-
-* Added retina display properties: retinaImage, retinaUrl, retinaSuffix
-* Fixed iframe scrolling on iOS devices.
-
-### Version 1.3.32 - 2013/1/31
-
-* Improved internal event subscribing & fixed event bug introduced in v1.3.21
-
-### Version 1.3.31 - 2013/1/28
-
-* Fixed a size-calculation bug introduced in the previous commit.
-
-### Version 1.3.30 - 2013/1/25
-
-* Delayed border-width calculations until after opening, to avoid a bug in FF when using Colorbox in a hidden iframe.
-
-### Version 1.3.29 - 2013/1/24
-
-* Fixes bug with bubbling delegated events, introduced in the previous commit.
-
-### Version 1.3.28 - 2013/1/24
-
-* Fixed compatibility issue with old versions of jQuery (1.3.2-1.4.2)
-
-### Version 1.3.27 - 2013/1/23
-
-* Added className property.
-
-### Version 1.3.26 - 2013/1/23
-
-* Minor bugfix: clear the onload event handler after photo has loaded.
-
-### Version 1.3.25 - 2013/1/23
-
-* Removed grunt file & added Bower component.json.
-
-### Version 1.3.24 - 2013/1/22
-
-* Added generated files (jquery.colorbox.js / jquery.colorbox-min.js) back to the repository.
-
-### Version 1.3.23 - 2013/1/18
-
-* Minor bugfix for calling Colorbox on empty jQuery collections without a selector.
-
-### Version 1.3.22 - 2013/1/17
-
-* Recommit for plugins.jquery.com
-
-### Version 1.3.21 - 2013/1/15
-Files Changed: *.js
-
-* Fixed compatability issues with jQuery 1.9
-
-### Version 1.3.20 - August 15 2012
-Files Changed:jquery.colorbox.js
-
-* Added temporary workaround for jQuery-UI 1.8 bug (http://bugs.jquery.com/ticket/12273)
-* Added *.jpe extension to the list of image types.
-
-### Version 1.3.19 - December 08 2011
-Files Changed:jquery.colorbox.js, colorbox.css (all)
-
-* Fixed bug related to using the 'fixed' property.
-* Optimized the setup procedure to be more efficient.
-* Removed $.colorbox.init() as it will no longer be needed (will self-init when called).
-* Removed use of $.browser.
-
-### Version 1.3.18 - October 07 2011
-Files Changed:jquery.colorbox.js/jquery.colorbox-min.js, colorbox.css (all) and example 1's controls.png
-
-* Fixed a regression where Flash content displayed in Colorbox would be reloaded if the browser window was resized.
-* Added safety check to make sure that Colorbox's markup is only added to the DOM a single time, even if $.colorbox.init() is called multiple times. This will allow site owners to manually initialize Colorbox if they need it before the DOM has finished loading.
-* Updated the example index.html files to be HTML5 compliant.
-* Changed the slideshow behavior so that it immediately moves to the next slide when the slideshow is started.
-* Minor regex bugfix to allow automatic detection of image URLs that include fragments.
-
-### Version 1.3.17 - May 11 2011
-Files Changed:jquery.colorbox.js/jquery.colorbox-min.js
-
-* Added properties "top", "bottom", "left" and "right" to specify a position relative to the viewport, rather than using the default centering.
-* Added property "data" to specify GET or POST data when using Ajax. Colorbox's ajax functionality is handled by jQuery's .load() method, so the data property works the same way as it does with .load().
-* Added property "fixed" which can provide fixed positioning for Colorbox, rather than absolute positioning. This will allow Colorbox to remain in a fixed position within the visitors viewport, despite scrolling. IE6 support for this was not added, it will continue to use the default absolute positioning.
-* Fixed ClearType problem with IE7.
-* Minor fixes.
-
-### Version 1.3.16 - March 01 2011
-Files Changed:jquery.colorbox.js/jquery.colorbox-min.js, colorbox.css (all) and example 4 background png files
-
-* Better IE related transparency workarounds. IE7 and up now uses the same background image sprite as other browsers.
-* Added error handling for broken image links. A message will be displayed telling the user that the image could not be loaded.
-* Added new property: 'fastIframe' and set it to true by default. Setting to fastIframe:false will delay the loading graphic removal and onComplete event until iframe has completely loaded.
-* Ability to redefine $.colorbox.close (or prev, or next) at any time.
-
-### Version 1.3.15 - October 27 2010
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-
-* Minor fixes for specific cases.
-
-### Version 1.3.14 - October 27 2010
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-
-* In IE6, closing an iframe when using HTTPS no longer generates a security warning.
-
-### Version 1.3.13 - October 22 2010
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-
-* Changed the index.html example files to use YouTube's new embedded link format.
-* By default, Colorbox returns focus to the element it was launched from once it closes. This can now be disabled by setting the 'returnFocus' property to false. Focus was causing problems for some users who had their anchor elements inside animated containers.
-* Minor bug fix involved in using a combination of slideshow and non-slideshow content.
-
-### Version 1.3.12 - October 20 2010
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-
-* Minor bug fix involved in preloading images when using a function as a value for the href property.
-
-### Version 1.3.11 - October 19 2010
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-
-* Fixed the slideshow functionality that broke with 1.3.10
-* The slideshow now respects the loop property.
-
-### Version 1.3.10 - October 16 2010
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-
-* Fixed compatibility with jQuery 1.4.3
-* The 'open' property now accepts a function as a value, like all of the other properties.
-* Preloading now loads the correct href for images when using a dynamic (function) value for the href property.
-* Fixed bug in Safari 3 for Win where Colorbox centered on the document, rather than the visitor's viewport.
-* May have fixed an issue in Opera 10.6+ where Colorbox would rarely/randomly freeze up while switching between photos in a group.
-* Some functionality better encapsulated & minor performance improvements.
-
-### Version 1.3.9 - July 7 2010
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/ all colorbox.css (the core styles)
-
-* Fixed a problem where iframed youtube videos would cause a security alert in IE.
-* More code is event driven now, making the source easier to grasp.
-* Removed some unnecessary style from the core CSS.
-
-### Version 1.3.8 - June 21 2010
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-
-* Fixed a bug in Chrome where it would sometimes render photos at 0 by 0 width and height (behavior introduced in recent update to Chrome).
-* Fixed a bug where the onClosed callback would fire twice (only affected 1.3.7).
-* Fixed a bug in IE7 that existed with some iframed websites that use JS to reposition the viewport caused Colorbox to move out of position.
-* Abstracted the identifiers (HTML ids & classes, and JS plugin name, method, and events) so that the plugin can be easily rebranded.
-* Small changes to improve either code readability or compression.
-
-### Version 1.3.7 - June 13 2010
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/index.html
-
-* $.colorbox can now be used for direct calls and accessing public methods. Example: $.colorbox.close();
-* Resize now accepts 'width', 'innerWidth', 'height' and 'innerHeight'. Example: $.colorbox.resize({width:"100%"})
-* Added option (loop:false) to disable looping in a group.
-* Added options (escKey:false, arrowKey:false) to disable esc-key and arrow-key bindings.
-* Added method for removing Colorbox from a document: $.colorbox.remove();
-* Fixed a bug where iframed URLs would be truncated if they contained an unencoded apostrophe.
-* Now uses the exact href specified on an anchor, rather than the version returned by 'this.href'. This was causing "#example" to be normalized to "http://domain/#example" which interfered with how some users were setting up links to inline content.
-* Changed example documents over to HTML5.
-
-### Version 1.3.6 - Jan 13 2010
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-
-* Small change to make Colorbox compatible with jQuery 1.4
-
-### Version 1.3.5 - December 15 2009
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-
-* Fixed a bug introduced in 1.3.4 with IE7's display of example 2 and 3, and auto-width in Opera.
-* Fixed a bug introduced in 1.3.4 where colorbox could not be launched by triggering an element's click event through JavaScript.
-* Minor refinements.
-
-### Version 1.3.4 - December 5 2009
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-
-* Event delegation is now used for elements that Colorbox is assigned to, rather than individual click events.
-* Additional callbacks have been added to represent other stages of Colorbox's lifecycle. Available callbacks, in order of their execution: onOpen, onLoad, onComplete, onCleanup, onClosed These take place at the same time as the event hooks, but will be better suited than the hooks for targeting specific instances of Colorbox.
-* Ajax content is now immediately added to the DOM to be more compatible if that content contains script tags.
-* Focus is now returned to the calling element on closing.
-* Fixed a bug where maxHeight and maxWidth did not work for non-photo content.
-* Direct calls no longer need 'open:true', it is assumed. Example: `$.colorbox({html:'<p>Hi</p>'});`
-
-### Version 1.3.3 - November 7 2009
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-
-* Changed $.colorbox.element() to return a jQuery object rather the DOM element.
-* jQuery.colorbox-min.js is compressed with Google's Closure Compiler rather than YUI Compressor.
-
-### Version 1.3.2 - October 27 2009
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-
-* Added 'innerWidth' and 'innerHeight' options to allow people to easily set the size dimensions for Colorbox, without having to anticipate the size of the borders and buttons.
-* Renamed 'scrollbars' option to 'scrolling' to be in keeping with the existing HTML attribute. The option now also applies to iframes.
-* Bug fix: In Safari, positioning occassionally incorrect when using '100%' dimensions.
-* Bug fix: In IE6, the background overlay is briefly not full size when first viewing.
-* Bug fix: In Firefox, opening Colorbox causes a split second shift with a small minority of webpage layouts.
-* Simplified code in a few areas.
-
-### Version 1.3.1 - September 16 2009
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/colorbox.css/colorbox-ie.css(removed)
-
-* Removed the IE-only stylesheets and conditional comments for example styles 1 & 4. All CSS is handled by a single CSS file for all examples.
-* Removed user-agent sniffing from the js and replaced it with feature detection. This will allow correct rendering for visitors masking their agent type.
-
-### Version 1.3.0 - September 15 2009
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/colorbox.css
-
-* Added $.colorbox.resize() method to allow Colorbox to resize it's height if it's contents change.
-* Added 'scrollbars' option to allow users to turn off scrollbars when using the resize() method.
-* Renamed the 'resize' option to be less ambiguous. It's now 'scalePhotos'.
-* Renamed the 'cbox_close' event to be less ambiguous. It's now 'cbox_cleanup'. It is the first thing to happen in the close method while the 'cbox_closed' event is the last to happen.
-* Fixed a bug with the slideshow mouseover graphics that appeared after Colorbox is opened a 2nd time.
-* Fixed a bug where ClearType may not work in IE6&7 if using the fade transition.
-* Minor code optimizations to increase compression.
-
-### Version 1.2.9 - August 7 2009
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-
-* Minor change to enable use with $.getScript();
-* Minor change to the timing of the 'cbox_load' event so that it is more useful.
-* Added a direct link to a YouTube video to the examples.
-
-### Version 1.2.8 - August 5 2009
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-
-* Fixed a bug with the overlay in IE6
-* Fixed a bug where left & right keypress events might be prematurely unbound.
-
-### Version 1.2.7 - July 31 2009
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js, example stylesheets and background images (core styles have not changed and the updates will not affect existing user themes / old example themes)
-
-* Code cleanup and reduction, better organization and documentation in the full source.
-* Added ability to use functions in place of static values for Colorbox's options (thanks Ken!).
-* Added an option for straight HTML. Example: `$.colorbox({html:'<p>Howdy</p>', open:true})`
-* Added an event for the beginning of the closing process. This is in addition to the event that already existed for when Colorbox had completely closed. 'cbox_close' and 'cbox_closed' respectively.
-* Fixed a minor bug in IE6 that would cause a brief content shift in the parent document when opening Colorbox.
-* Fixed a minor bug in IE6 that would reveal select elements that had a hidden visibility after closing Colorbox.
-* The 'esc' key is unbound now when Colorbox is not open, to avoid any potential conflicts.
-* Used background sprites for examples 1 & 4. Put IE-only (non-sprite) background images in a separate folder.
-* Example themes 1, 3, & 4 received slight visual tweaks.
-* Optimized pngs for smaller file size.
-* Added slices, grid, and correct sizing to the Adobe Illustrator file, all theme files are now export ready!
-
-### Version 1.2.6 - July 15 2009
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-
-* Fixed a bug with fixed width/height images in Opera 9.64.
-* Fixed a bug with trying to set a value for rel during a direct call to Colorbox. Example: `$.colorbox({rel:'foo', open:true});`
-* Changed how href/rel/title settings are determined to avoid users having to manually update Colorbox settings if they use JavaScript to update any of those attributes, after Colorbox has been defined.
-* Fixed a FF3 bug where the back button was disabled after closing an iframe.
-
-### Version 1.2.5 - June 23 2009
-Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
-
-* Changed the point at which iframe srcs are set (to eliminate the need to refresh the iframe once it has been added to the DOM).
-* Removed unnecessary return values for a very slight code reduction.
-
-### Version 1.2.4 - June 9 2009
-Files Changed: jquery.colorbox.js, jquery.colorbox-min.js
-
-* Fixed an issue where Colorbox may not close completely if it is closed during a transition animation.
-* Minor code reduction.
-
-### Version 1.2.3 - June 4 2009
-* Fixed a png transparency stacking issue in IE.
-* More accurate Ajax auto-sizing if the user was depending on the #cboxLoadedContent ID for CSS styling.
-* Added a public function for returning the current html element that Colorbox is associated with. Example use: var that = $.colorbox.element();
-* Added bicubic scaling for resized images in the original IE7.
-* Removed the IE6 stylesheet and png files from Example 3. It now uses the same png file for the controls that the rest of the browsers use (an alpha transparency PNG8). This example now only has 2 graphics files and 1 stylesheet.
-
-### Version 1.2.2 - May 28 2009
-* Fixed an issue with the 'resize' option.
-
-### Version 1.2.1 - May 28 2009
-* Note: If you are upgrading, update your jquery.colorbox.js and colorbox.css files.
-* Added photo resizing.
-* Added a maximum width and maximum height. Example: {height:800, maxHeight:'100%'}, would allow the box to be a maximum potential height of 800px, instead of a fixed height of 800px. With maxHeight of 100% the height of Colorbox cannot exceed the height of the browser window.
-* Added 'rel' setting to add the ability to set an alternative rel for any Colorbox call. This allows the user to group any combination of elements together for a gallery, or to override an existing rel. attribute so those element are not grouped together, without having to alter their rel in the HTML.
-* Added a 'photo' setting to force Colorbox to display a link as a photo. Use this when automatic photo detection fails (such as using a url like 'photo.php' instead of 'photo.jpg', 'photo.jpg#1', or 'photo.jpg?pic=1')
-* Removed the need to ever create disposable elements to call colorbox on. Colorbox can now be called directly, without being associated with any existing element, by using the following format:
- `$.colorbox({open:true, href:'yourLink.xxx'});`
-* Colorbox settings are now persistent and unique for each element. This allows for extremely flexible options for individual elements. You could use this to create a gallery in which each page in the gallery has different settings. One could be a photo with a fade transition, next could be an inline element with an elastic transition with a set width and height, etc.
-* For user callbacks, 'this' now refers to the element colorbox was opened from.
-* Fixed a minor grouping issue with IE6, when transition type is set to 'none'.
-* Added an Adobe Illustrator file that contains the borders and buttons used in the various examples.
-
-### Version 1.2 - May 13 2009
-* Added a slideshow feature.
-* Added re-positioning on browser resize. If the browser is resized, Colorbox will recenter itself onscreen.
-* Added hooks for key events: cbox_open, cbox_load, cbox_complete, cbox_closed.
-* Fixed an IE transparency-stacking problem, where transparent PNGs would show through to the background overlay.
-* Fixed an IE iframe issue where the ifame might shift up and to the left under certain circumstances.
-* Fixed an IE6 bug where the loading overlay was not at full height.
-* Removed the delay in switching between same-sized gallery content when using transitions.
-* Changed how iframes are loaded to make it more compatible with iframed pages that use DOM dependent JavaScript.
-* Changed how the JS is structured to be better organized and increase compression. Increased documentation.
-* Changed CSS :hover states to a .hover class. This sidesteps a minor IE8 bug with css hover states and allows easier access to hover state user styles from the JavaScript.
-* Changed: elements added to the DOM have new ID's. The naming is more consistent and less likely to cause conflicts with existing website stylesheets. All stylesheets have been updated.
-* Changed the behavior for prev/next links so that Colorbox does not get hung up on broken links. A visitor can now skip through broken or long-loading links by clicking prev/next buttons.
-* Changed the naming of variables in the parameter map to be more concise and intuitive.
-* Removed colorbox.css. Combined the colorbox.css styles with jquery.colorbox.js: the css file was not large enough to warrant being a separate file.
-
-### Version 1.1.6 - April 28 2009
-* Prevented the default action of the next & previous anchors and the left and right keys for gallery mode.
-* Fixed a bug where the title element was being added back to the DOM when closing Colorbox while using inline content.
-* Fixed a bug where IE7 would crash for example 2.
-* Smaller filesize: removed a small amount of unused code and rewrote the HTML injection with less syntax.
-* Added a public method for closing Colorbox: $.colorbox.close(). This will allow iframe users to add an event to close Colorbox without having to create an additional function.
-
-### Version 1.1.5 - April 11 2009
-* Fixed minor issues with exiting Colorbox.
-
-### Version 1.1.4 - April 08 2009
-* Fixed a bug in the fade transition where Colorbox not close completely if instructed to close during the fade-in portion of the transition.
-
-### Version 1.1.3 - April 06 2009
-* Fixed an IE6&7 issue with using Colorbox to display animated GIFs.
-
-### Version 1.1.2 - April 05 2009
-* Added ability to change content when Colorbox is already open.
-* Added vertical photo centering now works for all browsers (this feature previously excluded IE6&7).
-* Added namespacing to the esc-key keydown event for people who want to disable it: "keydown.colorClose"
-* Added 'title' setting to add the ability to set an alternative title for any Colorbox call.
-* Fixed rollover navigation issue with IE8. (Added JS-based rollover state due to a browser-bug.)
-* Fixed an overflow issue for when the fixed width/height is smaller than the size of a photo.
-* Fixed a bug in the fade transition where the border would still come up if Colorbox was closed mid-transition.
-* Switch from JSMin to Yui Compressor for minification. Minified code now under 7KB.
-
-### Version 1.1.1 - March 31 2009
-* More robust image detection regex. Now detects image file types with url fragments and/or query strings.
-* Added 'nofollow' exception to rel grouping.
-* Changed how images are loaded into the DOM to prevent premature size calculation by Colorbox.
-* Added timestamp to iframe name to prevent caching - this was a problem in some browsers if the user had multiple iframes and the visitor left the page and came back, or if they refreshed the page.
-
-### Version 1.1.0 - March 21 2009
-* Animation is now much smoother and less resource intensive.
-* Added support for % sizing.
-* Callback option added.
-* Inline content now preserves JavaScript events, and changes made while Colorbox is open are also preserved.
-* Added 'href' setting to add the ability to set an alternative href for any anchor, or to assign the Colorbox event to non-anchors.
- Example: $('button').colorbox({'href':'process.php'})
- Example: $('a[href='http://msn.com']).colorbox({'href':'http://google.com', iframe:true});
-* Photos are now horizontally centered if they are smaller than the lightbox size. Also vertically centered for browsers newer than IE7.
-* Buttons in the examples are now included in the 'protected zone'. The lightbox will never expand it's borders or buttons beyond an accessible area of the screen.
-* Keypress events don't queue up by holding down the arrow keys.
-* Added option to close Colorbox by clicking on the background overlay.
-* Added 'none' transition setting.
-* Changed 'contentIframe' and 'contentInline' to 'inline' and 'iframe'. Removed 'contentAjax' because it is automatically assumed for non-image file types.
-* Changed 'contentWidth' and 'contentHeight' to 'fixedWidth' and 'fixedHeight'. These sizes now reflect the total size of the lightbox, not just the inner content. This is so users can accurately anticipate % sizes without fear of creating scrollbars.
-* Clicking on a photo will now switch to the next photo in a set.
-* Loading.gif is more stable in it's position.
-* Added a minified version.
-* Code passes JSLint.
-
-### Version 1.0.5 - March 11 2009
-* Redo: Fixed a bug where IE would cut off the bottom portion of a photo, if the photo was larger than the document dimensions.
-
-### Version 1.0.4 - March 10 2009
-* Added an option to allow users to automatically open the lightbox. Example usage: $(".colorbox").colorbox({open:true});
-* Fixed a bug where IE would cut off the bottom portion of a photo, if the photo was larger than the document dimensions.
-
-### Version 1.0.3 - March 09 2009
-* Fixed vertical centering for Safari 3.0.x.
-
-### Version 1.0.2 - March 06 2009
-* Corrected a typo.
-* Changed the content-type check so that it does not assume all links to photos should actually display photos. This allows for Ajax/inline/and iframe calls on anchors linking to picture file types.
-
-### Version 1.0.1 - March 05 2009
-* Fixed keydown events (esc, left arrow, right arrow) for Webkit browsers.
-
-### Version 1.0 - March 03 2009
-* First release
diff --git a/wqflask/wqflask/static/packages/colorbox/colorbox.ai b/wqflask/wqflask/static/packages/colorbox/colorbox.ai
deleted file mode 100644
index 1b51881a..00000000
--- a/wqflask/wqflask/static/packages/colorbox/colorbox.ai
+++ /dev/null
@@ -1,1811 +0,0 @@
-%PDF-1.4 %âãÏÓ
-1 0 obj <</Metadata 2 0 R/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 48282/Subtype/XML/Type/Metadata>>stream
-<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
-<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.2-c063 53.351735, 2008/07/22-18:11:12 ">
- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
- <rdf:Description rdf:about=""
- xmlns:dc="http://purl.org/dc/elements/1.1/">
- <dc:format>application/vnd.adobe.illustrator</dc:format>
- <dc:title>
- <rdf:Alt>
- <rdf:li xml:lang="x-default">colorbox</rdf:li>
- </rdf:Alt>
- </dc:title>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:xmp="http://ns.adobe.com/xap/1.0/"
- xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
- <xmp:CreatorTool>Adobe Illustrator CS4</xmp:CreatorTool>
- <xmp:CreateDate>2009-05-27T04:22:39-04:00</xmp:CreateDate>
- <xmp:ModifyDate>2009-07-30T21:43:35-05:00</xmp:ModifyDate>
- <xmp:MetadataDate>2009-07-30T21:43:35-05:00</xmp:MetadataDate>
- <xmp:Thumbnails>
- <rdf:Alt>
- <rdf:li rdf:parseType="Resource">
- <xmpGImg:width>208</xmpGImg:width>
- <xmpGImg:height>256</xmpGImg:height>
- <xmpGImg:format>JPEG</xmpGImg:format>
- <xmpGImg:image>/9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA&#xA;AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADQAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXYq7FXnn5b+fNd85T6us6W9jHpkiRL6KOzOzl9zzagACdMVZt9U1D/lt/5Jr/AFxV&#xA;gf5ZfmZrHmfzJrei39vBGNIaSNbiEODIYpjFUqzNStK4q9JxV2KuxV2KuxV2KuxV2KuxV2KvG/Pf&#xA;5jfmBY/mDL5Z8twpdMyRNb2/pKzktEHf4jTYbmpxVQ/xJ/zkV/1Y1/4G3/6qYqh9G/ND8zYvPml+&#xA;WvMdtHZSXcsXqwtEgYwyEjkjKSCDQioPXFXueKvBB+aX5r6n5k1HSdAtI717OSX4EiT4Y0fiCzOV&#xA;H44qmH+JP+civ+rGv/A2/wD1UxVd5F/Nbzde6/qVh5lMVnHpcEj3aNGIzG0TANyPgBiqbeU/z18v&#xA;eZdcl0izkZZ2kZLEPEw9aONOTS1pRQTUKCa+OKqdh+fvlm882Dy+kzAycYoLkxsFN16jRtbsCOuy&#xA;lWFVNaVr1VRfnv8AN5/Jt9AmpWLvp1zbyPBexFWrcx7iEx1BFV/aO340VR+r/mFqWj+Sl8x6lYGG&#xA;aOOGS808MrPH6jKHVW2VivLbpX2xVMtC8622vaLFq+lzLPaTKxRuJHxLUMpBoQQRirDfIf5y6x5n&#xA;1DSrWaxhtl1HT7i/dkZmKmC7a2CCoHXjyriqH/5x3/vvNf8AzFQ/rmxV7Lirwb8hv/JkedP+M9z/&#xA;ANRhxV7zirsVdirsVdirsVdirsVdirsVeNSf+tKx/wDMKf8AqDOKvZcVeHfmF/60T5T/AOYO0/6i&#xA;7nFXuOKvDvyS/wDJleb/AJN/1EHFXuOKvCPKoB/O/wA3AioLSgg/OPFWbeXvLflPTby/m0e1gjnl&#xA;n5XRjCnhLxHJVP7O1KqPn1OKtQ+W/KaebH1VLaAa4LZVQhVBWIu9XVRtyZmYM3XtiqC8x+VvI2q6&#xA;79Y19I7m7WzkRbe5c+mkBPxyIhPFH/yx8W3XbFVeXQvK8/km20meQyeX1jgQPJI3xRqylQ7k1AOw&#xA;O+2Kp/bWdpb2iWtpEkNsiCOKKIBVVQOICgbAAbDFWE+SPKfkrTL7TZ9Eu7i4ltrCeCzEtaNbPdM8&#xA;jtVE3EzFR0+XfFVH/nHf++81/wDMVD+ubFXsuKvBvyG/8mR50/4z3P8A1GHFXvOKuxV2KuxV2Kux&#xA;V2KuxV2KuxV4tfgH/nISYHcfUl/6h1xV6LwT+Ufdil5J5sAH/OQPlWgp/o1r0/5ibjFD3/FXg/5T&#xA;gHzt5xqK/vk6/wDGWbFXqnBP5R92KXlnlqJJPzo80xNUI8AU8SVNDFCNitCD7jFDLfL3kW10fUZL&#xA;xLiWQh2MKsduDClHH7RB74qttvIVnD5iGrfWZSqfvEj5GplZmJJbrwoR8Pfvttiqt5q8pyeYJ4Vl&#xA;uBDawRuU4oDJ6zbAlj+xtuBT5+CqM1DRrrUPLf6LnlRJ5I40mljWiAggsVTbw2GKo3SNNg0uwgso&#xA;Gd4oBRWkYsx+k/qG2KpD5W8sajpU1k9y0TC3spraT02J+OS5MwIqo24/jiqS/wDOO/8Afea/+YqH&#xA;9c2KvZcVeDfkN/5Mjzp/xnuf+ow4q95xV2KuxV2KuxV2KuxV2KuxV2KvA/OPmPTvL356y6jqJZbM&#xA;W0cUsiKXKc4AAxUbkA9ab4qyL/ldX5a/9XZv+kW7/wCqWKsFm8z6R5m/PLy5qGkO81lALa19Z0aM&#xA;O6yySEqrgNQeqBuBvXtvir6UxV81eTfOmheWPPHmY6zI8EF5MwjnVHkUNFK54ssYZvi57bYqzv8A&#xA;5XV+Wv8A1dm/6Rbv/qlirFfy41m11v8ANXXtVtAwtbqImHmKMVT04wxHblwrir2LFLsVdirsVdir&#xA;sVeef847/wB95r/5iof1zYoey4q8G/Ib/wAmR50/4z3P/UYcVe84q7FXYq7FXYq7FXYq7FXYq7FU&#xA;p1Dyj5X1G6a7v9Ktbq6cAPNNEjuQooKkiuwGKob/AJV95G/6sNh/0jx/0xVVtfJPlC0uY7m10azg&#xA;uIWDxSxworKw6EEDY4qnWKpHN5F8mTSvLLollJLISzu0EZJYmpJNMVWf8q+8jf8AVhsP+keP+mKo&#xA;rT/KfljTpjNYaXa2sxHEyQxIjFT2qoGKph9Utv8AfS/dirvqlt/vpfuxV31S2/30v3Yq76pbf76X&#xA;7sVd9Utv99L92Ku+qW3++l+7FXj/APzjwQLjzUhNGNzCwU9aVl3pir2XFXg35DD/AJCN5zb9lprk&#xA;q3Yj62emKvecVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVSyfy1oU2&#xA;5soUbpySNUNPCoGKqH+D9B/5ZhiqN03RdK0xOFhaRWwIofSRUJHvxAxVG4q7FXYq7FXYq7FXYq7F&#xA;XYqg9H1jTdZ0u11XTLhLqwvI1mt54yCrI4qP7R2xVL/OHm6x8qaNca1qNrdTabaL6l3NaRiYxJWh&#xA;ZkDB+I7kKaDc7Yq84/6Gu/Kj0DcV1P0AokMv1GTgELcA3KtKc/hr47Yq9J8pea7PzTo1vrNha3UG&#xA;nXiCW0lu41iMsbfZdU5F+LdQSBUbjbFUdrOs6ZoulXWq6pcJa2FlG01zPIaKqIKn5nwHfFUZirsV&#xA;dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir8t7NtVW2nltHmS3gCvcNGzKq8mCK&#xA;TQjck0xV9Tf84pyar5v/AC088eUtS1CZ7GaM2dq8hMpgXULeaOXhyPTYNx6Vr44qxf8A6Fe/OhtP&#xA;Hllv0WNHEwYXv1iSgYOT6/GnPdTTjx+iu+Kss/5y2utV8sfl/wCTPLWnX80diA1vcshMbTixgiSI&#xA;vxPT4i3HpX5DFXyrdvqzW0El28z209XgaRmZGKEoSKkioNRir9SMVdirsVdirsVdirsVdirsVdir&#xA;sVdirsVdirsVdirsVdirsVdirsVfnX5S85aNpmjNFND6bwAGSJAC0xJA5DkRU+IJxV71/wA4TyrN&#xA;a+dJUHFZLq0dR4BhOR0xV9NYq+ZP+c25FjsvJsjCqpdXbMPYLCcVeC+YvOOiXnl4WyQCea4B9KNw&#xA;AYCCRzPGtG8ADv32xV+iuKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvhDQ&#xA;P+cTvzc1nSbbU1gsrGO6jWWKC7uCk3BxyUskaScag9CajuMVfSX/ADjl+TmsflroGpx61cwz6nqs&#xA;8ckkVsWeKOOFWVBzZULMeZJ28MVeu4q8h/5yN/JzWfzK0HS49EuoYNS0qeR0iuSyRSRzqqv8aq5D&#xA;LwUjanXFXzb5h/5xQ/NzRdJudTaCzv4rSNpZobOcvNwQcmKo6R8qDsu57DFX3hirsVdirsVdirsV&#xA;dirsVdirsVdirsVdirsVdirsVdirsVdirsVdir4I0T/nKf8AOHSNKttMi1CC5htIxFFLc26SS8FF&#xA;FDPsWoNqnfxxV9Mf843fnBrf5j+XtSbXIYk1TSZ445Li3UokscysyEoSeLDgwNNumKvX8VePf85J&#xA;fnDrv5ceX9LbQoIX1LVp5I1uLhS6RRwKrOQgK1di60rt12xV80a7/wA5S/m/rGkXWlzahb28F5G0&#xA;M0ltbpHL6bijBX+LjUbVG/hir74xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K&#xA;uxV8lfkx+Uv5Sa1+Wlxd6peLeXGprGupX/NIZbF0kST6vGZAwiPNQGcirg7fCcVZD/zhpbW1sfPd&#xA;tauZLaC/t44HJDFo09dVNRQGoHbFX0pir5q/5zNt7e5/wLb3LcLea+uI5nqFojegGNTsNjiqTfnD&#xA;+T/5PaP+U8OoWF/Hp+oaajrpV7zWaTUHaR5DbycKeqxZyA4HwAb/AAjFX1dirsVdirsVdirsVdir&#xA;sVdirsVdirsVdirsVdirsVdirsVdirsVdir8vLF9eSxu7exFx9Sv1WO8jiDmOUROJEDgCh4uoI8M&#xA;VfRv/OPmm+ffKv5QeePN1gq6dLEgvbFb+BnjuYtPhlkn+Csb7g8UcNTlXFV7f85FfnGvkL/GBuNH&#xA;+r8liFl9RufW9RpjHUn1eAi4rX1a0LfB9rFW/wDnI7SPPnmL8qfJPmbUE/SVwVa61L6hAVhthfQx&#xA;yRfADJJxAXizs1OVOlaYq+br+XX3sbS2vvrP1HT1eOyilDiOISyGVwgIoOTsSfHFX6h4q7FXYq7F&#xA;XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqhNI0nT9I0y10vToEtrGzjWG3gjAVVRBQA&#xA;AUGKq91bW91bS2tzGs1vOjRTROKq6OOLKw7gg0xV45H/AM4lflEmofWfT1BrblU6cbtvq5Tlz9I/&#xA;D6vDlvTnir2SCCG3gjggRYoYlCRRoAqqqiiqoHQAYqhtY0jTtZ0q70rUoFubC9iaC5gcAqyOKEb/&#xA;AIYqjMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs&#xA;VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV&#xA;dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd&#xA;irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi&#xA;rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir&#xA;sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs&#xA;VdirsVdirsVdirqitO/hirsVcSBudsVdirSujEhWBI60NaYq3irsVdirsVdirsVdirsVdirsVdir&#xA;sVdirsVdirsVdirsVdiq2WP1Inj5MnNSvNDRlqKVB33GKpL5U8sy6DbzwyahPf8ArSM49diQlXZv&#xA;hBrQtyq57nfFVlj5WmtvM9zrbalczJPHwWzd6otWZuO/7CcvgHY1xVT82eU5tdmtJI7sWwtg/JeD&#xA;MJQzI3pycXSsZ4bjFU21vTm1LSLuwWT0muomiEtK8eQpWm3TFVawtTaWUFqZpLgwoqGeU8pH4inJ&#xA;j3JxVJvKflmfQ2vDJOswuW5LxBFP3ssm9f8AjLirIMVdirsVdirsVdirsVdirsVdirsVdirsVdir&#xA;sVdirsVdirsVU7o3ItpTaqj3QRjAkrFIzJT4Q7KHIWvUhT8sVYV+VN9+a93pt8fzEsbOyu0uHFj9&#xA;UapaMyyVDgM6hUHERnqVoWq1TiqjomofnBJ+Z+p2urafYxeREgrYXUTn1i3qSek37RaRlH71DRVH&#xA;EjeoZVT/ADT1L807S90lPI9s1xayrINZcQwStDF6sIEsHrSwhp1Vn4Rn4WFSegxVlPnWbzFD5S1e&#xA;Xy2nq6+lrI2lx0VuVwF/dij/AA7t44qi9Bk1qTRbF9cihg1hoUOoRWrM8KzcfjEbMAeNf9s9cVYT&#xA;+UepfmTevrI86JOoikA0717eO3BT61dL8PppHy/crD1r2Pc4q9FxV2KuxV2KuxV2KuxV2KuxV2Ku&#xA;xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux&#xA;V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVQmmkDiOIcpCK09vE4qome+hHO&#xA;ZF9MHcqa0riqMRgyhh3xVvFXYq7FXYq7FXYq7FVOW5ghkhjkfi9w5ihG/wAThGkI/wCAjY4q3PPF&#xA;bwSTzNwiiUvI57KoqTt7YqlekebvLusXLWum3q3M6IZGRVcUQEKT8SgdWGKppJNDEAZHVAenIgV+&#xA;/FWzJGE9QsAlK86ilPGuKujlikFY3VwNiVIIr9GKtLPA7lFkVnFaqCCduu2KpTqnnLyxpdwba/1G&#xA;KG4H2ovidl7/ABBA1PpxVB/8rJ8kf9XWP/gJf+aMVTzTtSsNStVurC4S5t2NBJGaio6g+B9sVS1f&#xA;OnlhtT/Ra36m/wDVNv6HF6+qG4la8adffFU7xV2KuxV2KuxVBqf9ytP+KW/4kuKrtV/4583yH6xi&#xA;qpZ/7zp8hiqtirsVdirsVdirsVdiqFvbH6zc2E3Ph9SnafjSvPlBLDxrUU/vq19sVUfMP/HA1P8A&#xA;5hJ/+TbYq8l/JT/lKrr/AJgZP+T0WKvSPM/6aEMg0uWK3vXdfSmncRp6QQ1XkUk35e21a+2Kooi4&#xA;FoZEAjFWMRk+JFkMYCu1APh9Tlv71xVC6IuuNYn9IzQ3V6FkEklqCE4FgY4+RJ5OFrvXb8SqttDr&#xA;bapcrNc2sun8h+joIUYTxkFd5KmihRy5Cn9MVeIaDpF75m8wpZ+uFuLx3kmuJKt0Bd2I7nFWXa/+&#xA;TtzpmkXWoQamt0bWNpXhaH0qogqxDc33A36Yqj/yMkflrMfI8ALdgvap9QVxVjdt/wCTYP8A22ZP&#xA;+ohsVe9Yq7FVK5mEMTOe2KqKQ3MirJ63HkAeIWvXfrXFVS3lYu8TmrxkAn5iuKqKf8dX/ni3/Elx&#xA;Vdqv/HPm+Q/WMVVbP/eZPkMVVsVdirsVdirsVdirsVQ9zexW81pC4YteSmCIrSgYRSTVapG3GI/T&#xA;iqH8w/8AHA1P/mEn/wCTbYq8l/JT/lKrr/mBk/5PRYq9G83+ZH0Wyku/q0t2ElWJbWBpFkasZcuP&#xA;TSRiB37AVPtlmLHxmrphOXCLR0uozLZSSAPP6aPIFg+KSULEsojj2WrNyoNq5ADemV7IHy55jn1P&#xA;ShffU7mxEglCw3gIb92VHqry+P0zy/a8NttzPJDhNXaISsWssfMc82vX2miwvofqFC19Op+rzfEg&#xA;4KT8PJ/UqnHw+jDLHUQbG6BOzVPGPJ2uxeX/ADJb6hcxNJFDzSaNaBwHUoaVpuK9MqZvQPM35t6B&#xA;eaDfWVjDcPcXcLwL6iKiKJFKsxIZjsDttiqF/Iz+91n/AFbf9cmKsdtv/JsH/tsyf9RDYq96xV2K&#xA;oe+hMtuyDqRiqHi1KKONIpI5A6gKaCo2264qq2il5pZypUSEEA9aAU/hiq1P+Or/AM8W/wCJLiq7&#xA;Vf8AjnzfIfrGKqtn/vMnyGKq2KuxV2KuxV2KuxV2Koe5soria0mcsGs5TPEFpQsYpIaNUHbjKfpx&#xA;VdeWsd3Zz2khIjuI3icrQMFdSppWu++Ksd8r/l5ovlvUJL6xmuZJZIjAyztGy8WZWqOKIa1Qd8VZ&#xA;HJbRSPzNVelOSMVJHgeJFcVd9Vg9IRcfgB5ChIIbx5V5V964q2ltChY0LFxRi5Lkjw+Inb2xVYll&#xA;AjKRyITdFZ2ZR8gSRirFta/Kvytqt9JeuJ7WaYl5hbOqqzHqxV1cAn2xVL/+VKeVf+Wq+/5GQ/8A&#xA;VLFWV+XvLOkeX7RrbTYiiueUsjHlI5HQs3t2HTFUmT8s9Bj8wnXhcXX1v6y15wLx+n6jOXIp6fLj&#xA;U/zYqyWXUbWI0dwDiqn+l7L/AH4MVd+l7L/fgxVb+k9PrXmMVXDVrEdHGKoe0vbe41grGwYiBj9H&#xA;NcVROsMF02dj0AH6xiqrYsGtYyOlBiqvirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqnc&#xA;kiFyOtDiqG0tFayR3UF3LFiRufiIxVF+lF/Iv3DFXelF/Iv3DFXelF/Iv3DFXelF/Iv3DFUPLA0c&#xA;3rwopfiVI6VBNeo+WKqMxuruMwPCscbbOeXKo8OgxVU0tStvw7KSo+QNMVRmKuxV2KuxV2KuxV2K&#xA;uxV2KuxV2KuxV2KuxV2KuxV2KtMoZSD0OKoJrGdaiCZo1JrxFCPxxVr6nf8A/LW/3D+mKu+p3/8A&#xA;y1v9w/pirvqd/wD8tb/cP6Yq76nf/wDLW/3D+mKu+p3/APy1v9w/piraWl6D8VyxHyAxVFwxLEgU&#xA;dsVf/9k=</xmpGImg:image>
- </rdf:li>
- </rdf:Alt>
- </xmp:Thumbnails>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
- xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
- xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#">
- <xmpMM:RenditionClass>default</xmpMM:RenditionClass>
- <xmpMM:OriginalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</xmpMM:OriginalDocumentID>
- <xmpMM:DocumentID>xmp.did:8BC7D877974ADE11BCECCFF09938C3CC</xmpMM:DocumentID>
- <xmpMM:InstanceID>uuid:30267148-672c-4d34-8534-e8cce420f815</xmpMM:InstanceID>
- <xmpMM:History>
- <rdf:Seq>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>converted</stEvt:action>
- <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>saved</stEvt:action>
- <stEvt:instanceID>xmp.iid:D47F11740720681191099C3B601C4548</stEvt:instanceID>
- <stEvt:when>2008-04-17T14:19:21+05:30</stEvt:when>
- <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
- <stEvt:changed>
- <rdf:Bag>
- <rdf:li>/</rdf:li>
- </rdf:Bag>
- </stEvt:changed>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>converted</stEvt:action>
- <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>converted</stEvt:action>
- <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>saved</stEvt:action>
- <stEvt:instanceID>xmp.iid:FD7F11740720681197C1BF14D1759E83</stEvt:instanceID>
- <stEvt:when>2008-05-16T17:01:20-07:00</stEvt:when>
- <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
- <stEvt:changed>
- <rdf:Bag>
- <rdf:li>/</rdf:li>
- </rdf:Bag>
- </stEvt:changed>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>saved</stEvt:action>
- <stEvt:instanceID>xmp.iid:F77F117407206811BC18AC99CBA78E83</stEvt:instanceID>
- <stEvt:when>2008-05-19T18:10:15-07:00</stEvt:when>
- <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
- <stEvt:changed>
- <rdf:Bag>
- <rdf:li>/</rdf:li>
- </rdf:Bag>
- </stEvt:changed>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>converted</stEvt:action>
- <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>saved</stEvt:action>
- <stEvt:instanceID>xmp.iid:FB7F117407206811B628E3BF27C8C41B</stEvt:instanceID>
- <stEvt:when>2008-05-22T14:26:44-07:00</stEvt:when>
- <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
- <stEvt:changed>
- <rdf:Bag>
- <rdf:li>/</rdf:li>
- </rdf:Bag>
- </stEvt:changed>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>converted</stEvt:action>
- <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>saved</stEvt:action>
- <stEvt:instanceID>xmp.iid:08C3BD25102DDD1181B594070CEB88D9</stEvt:instanceID>
- <stEvt:when>2008-05-28T16:51:46-07:00</stEvt:when>
- <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
- <stEvt:changed>
- <rdf:Bag>
- <rdf:li>/</rdf:li>
- </rdf:Bag>
- </stEvt:changed>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>converted</stEvt:action>
- <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>saved</stEvt:action>
- <stEvt:instanceID>xmp.iid:F77F11740720681192B0DFFC927805D7</stEvt:instanceID>
- <stEvt:when>2008-05-30T21:26:38-07:00</stEvt:when>
- <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
- <stEvt:changed>
- <rdf:Bag>
- <rdf:li>/</rdf:li>
- </rdf:Bag>
- </stEvt:changed>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>converted</stEvt:action>
- <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>saved</stEvt:action>
- <stEvt:instanceID>xmp.iid:F87F11740720681192B0DFFC927805D7</stEvt:instanceID>
- <stEvt:when>2008-05-30T21:27-07:00</stEvt:when>
- <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
- <stEvt:changed>
- <rdf:Bag>
- <rdf:li>/</rdf:li>
- </rdf:Bag>
- </stEvt:changed>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>converted</stEvt:action>
- <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>saved</stEvt:action>
- <stEvt:instanceID>xmp.iid:F97F1174072068119098B097FDA39BEF</stEvt:instanceID>
- <stEvt:when>2008-06-02T13:26:10-07:00</stEvt:when>
- <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
- <stEvt:changed>
- <rdf:Bag>
- <rdf:li>/</rdf:li>
- </rdf:Bag>
- </stEvt:changed>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <stEvt:action>saved</stEvt:action>
- <stEvt:instanceID>xmp.iid:8BC7D877974ADE11BCECCFF09938C3CC</stEvt:instanceID>
- <stEvt:when>2009-05-27T04:22:07-04:00</stEvt:when>
- <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
- <stEvt:changed>/</stEvt:changed>
- </rdf:li>
- </rdf:Seq>
- </xmpMM:History>
- <xmpMM:DerivedFrom rdf:parseType="Resource">
- <stRef:instanceID>uuid:32300939-b1c4-8440-b812-b255b7b0d326</stRef:instanceID>
- <stRef:documentID>xmp.did:F97F1174072068119098B097FDA39BEF</stRef:documentID>
- <stRef:originalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</stRef:originalDocumentID>
- <stRef:renditionClass>proof:pdf</stRef:renditionClass>
- </xmpMM:DerivedFrom>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
- <illustrator:StartupProfile>Web</illustrator:StartupProfile>
- <illustrator:Type>Document</illustrator:Type>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
- xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
- xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
- <xmpTPg:NPages>1</xmpTPg:NPages>
- <xmpTPg:HasVisibleTransparency>True</xmpTPg:HasVisibleTransparency>
- <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
- <xmpTPg:MaxPageSize rdf:parseType="Resource">
- <stDim:w>1024.000000</stDim:w>
- <stDim:h>768.000000</stDim:h>
- <stDim:unit>Pixels</stDim:unit>
- </xmpTPg:MaxPageSize>
- <xmpTPg:PlateNames>
- <rdf:Seq>
- <rdf:li>Cyan</rdf:li>
- <rdf:li>Magenta</rdf:li>
- <rdf:li>Yellow</rdf:li>
- <rdf:li>Black</rdf:li>
- </rdf:Seq>
- </xmpTPg:PlateNames>
- <xmpTPg:SwatchGroups>
- <rdf:Seq>
- <rdf:li rdf:parseType="Resource">
- <xmpG:groupName>Default Swatch Group</xmpG:groupName>
- <xmpG:groupType>0</xmpG:groupType>
- <xmpG:Colorants>
- <rdf:Seq>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>White</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>255</xmpG:red>
- <xmpG:green>255</xmpG:green>
- <xmpG:blue>255</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>Black</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>0</xmpG:red>
- <xmpG:green>0</xmpG:green>
- <xmpG:blue>0</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>RGB Red</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>255</xmpG:red>
- <xmpG:green>0</xmpG:green>
- <xmpG:blue>0</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>RGB Yellow</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>255</xmpG:red>
- <xmpG:green>255</xmpG:green>
- <xmpG:blue>0</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>RGB Green</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>0</xmpG:red>
- <xmpG:green>255</xmpG:green>
- <xmpG:blue>0</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>RGB Cyan</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>0</xmpG:red>
- <xmpG:green>255</xmpG:green>
- <xmpG:blue>255</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>RGB Blue</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>0</xmpG:red>
- <xmpG:green>0</xmpG:green>
- <xmpG:blue>255</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>RGB Magenta</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>255</xmpG:red>
- <xmpG:green>0</xmpG:green>
- <xmpG:blue>255</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=193 G=39 B=45</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>193</xmpG:red>
- <xmpG:green>39</xmpG:green>
- <xmpG:blue>45</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=237 G=28 B=36</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>237</xmpG:red>
- <xmpG:green>28</xmpG:green>
- <xmpG:blue>36</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=241 G=90 B=36</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>241</xmpG:red>
- <xmpG:green>90</xmpG:green>
- <xmpG:blue>36</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=247 G=147 B=30</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>247</xmpG:red>
- <xmpG:green>147</xmpG:green>
- <xmpG:blue>30</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=251 G=176 B=59</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>251</xmpG:red>
- <xmpG:green>176</xmpG:green>
- <xmpG:blue>59</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=252 G=238 B=33</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>252</xmpG:red>
- <xmpG:green>238</xmpG:green>
- <xmpG:blue>33</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=217 G=224 B=33</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>217</xmpG:red>
- <xmpG:green>224</xmpG:green>
- <xmpG:blue>33</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=140 G=198 B=63</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>140</xmpG:red>
- <xmpG:green>198</xmpG:green>
- <xmpG:blue>63</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=57 G=181 B=74</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>57</xmpG:red>
- <xmpG:green>181</xmpG:green>
- <xmpG:blue>74</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=0 G=146 B=69</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>0</xmpG:red>
- <xmpG:green>146</xmpG:green>
- <xmpG:blue>69</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=0 G=104 B=55</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>0</xmpG:red>
- <xmpG:green>104</xmpG:green>
- <xmpG:blue>55</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=34 G=181 B=115</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>34</xmpG:red>
- <xmpG:green>181</xmpG:green>
- <xmpG:blue>115</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=0 G=169 B=157</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>0</xmpG:red>
- <xmpG:green>169</xmpG:green>
- <xmpG:blue>157</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=41 G=171 B=226</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>41</xmpG:red>
- <xmpG:green>171</xmpG:green>
- <xmpG:blue>226</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=0 G=113 B=188</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>0</xmpG:red>
- <xmpG:green>113</xmpG:green>
- <xmpG:blue>188</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=46 G=49 B=146</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>46</xmpG:red>
- <xmpG:green>49</xmpG:green>
- <xmpG:blue>146</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=27 G=20 B=100</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>27</xmpG:red>
- <xmpG:green>20</xmpG:green>
- <xmpG:blue>100</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=102 G=45 B=145</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>102</xmpG:red>
- <xmpG:green>45</xmpG:green>
- <xmpG:blue>145</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=147 G=39 B=143</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>147</xmpG:red>
- <xmpG:green>39</xmpG:green>
- <xmpG:blue>143</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=158 G=0 B=93</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>158</xmpG:red>
- <xmpG:green>0</xmpG:green>
- <xmpG:blue>93</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=212 G=20 B=90</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>212</xmpG:red>
- <xmpG:green>20</xmpG:green>
- <xmpG:blue>90</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=237 G=30 B=121</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>237</xmpG:red>
- <xmpG:green>30</xmpG:green>
- <xmpG:blue>121</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=199 G=178 B=153</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>199</xmpG:red>
- <xmpG:green>178</xmpG:green>
- <xmpG:blue>153</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=153 G=134 B=117</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>153</xmpG:red>
- <xmpG:green>134</xmpG:green>
- <xmpG:blue>117</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=115 G=99 B=87</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>115</xmpG:red>
- <xmpG:green>99</xmpG:green>
- <xmpG:blue>87</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=83 G=71 B=65</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>83</xmpG:red>
- <xmpG:green>71</xmpG:green>
- <xmpG:blue>65</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=198 G=156 B=109</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>198</xmpG:red>
- <xmpG:green>156</xmpG:green>
- <xmpG:blue>109</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=166 G=124 B=82</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>166</xmpG:red>
- <xmpG:green>124</xmpG:green>
- <xmpG:blue>82</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=140 G=98 B=57</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>140</xmpG:red>
- <xmpG:green>98</xmpG:green>
- <xmpG:blue>57</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=117 G=76 B=36</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>117</xmpG:red>
- <xmpG:green>76</xmpG:green>
- <xmpG:blue>36</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=96 G=56 B=19</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>96</xmpG:red>
- <xmpG:green>56</xmpG:green>
- <xmpG:blue>19</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=66 G=33 B=11</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>66</xmpG:red>
- <xmpG:green>33</xmpG:green>
- <xmpG:blue>11</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=0 G=0 B=0</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>0</xmpG:red>
- <xmpG:green>0</xmpG:green>
- <xmpG:blue>0</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=26 G=26 B=26</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>26</xmpG:red>
- <xmpG:green>26</xmpG:green>
- <xmpG:blue>26</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=51 G=51 B=51</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>51</xmpG:red>
- <xmpG:green>51</xmpG:green>
- <xmpG:blue>51</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=77 G=77 B=77</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>77</xmpG:red>
- <xmpG:green>77</xmpG:green>
- <xmpG:blue>77</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=102 G=102 B=102</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>102</xmpG:red>
- <xmpG:green>102</xmpG:green>
- <xmpG:blue>102</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=128 G=128 B=128</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>128</xmpG:red>
- <xmpG:green>128</xmpG:green>
- <xmpG:blue>128</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=153 G=153 B=153</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>153</xmpG:red>
- <xmpG:green>153</xmpG:green>
- <xmpG:blue>153</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=179 G=179 B=179</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>179</xmpG:red>
- <xmpG:green>179</xmpG:green>
- <xmpG:blue>179</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=204 G=204 B=204</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>204</xmpG:red>
- <xmpG:green>204</xmpG:green>
- <xmpG:blue>204</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=230 G=230 B=230</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>230</xmpG:red>
- <xmpG:green>230</xmpG:green>
- <xmpG:blue>230</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=242 G=242 B=242</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>242</xmpG:red>
- <xmpG:green>242</xmpG:green>
- <xmpG:blue>242</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=63 G=169 B=245</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>63</xmpG:red>
- <xmpG:green>169</xmpG:green>
- <xmpG:blue>245</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=122 G=201 B=67</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>122</xmpG:red>
- <xmpG:green>201</xmpG:green>
- <xmpG:blue>67</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=255 G=147 B=30</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>255</xmpG:red>
- <xmpG:green>147</xmpG:green>
- <xmpG:blue>30</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=255 G=29 B=37</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>255</xmpG:red>
- <xmpG:green>29</xmpG:green>
- <xmpG:blue>37</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=255 G=123 B=172</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>255</xmpG:red>
- <xmpG:green>123</xmpG:green>
- <xmpG:blue>172</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=189 G=204 B=212</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>189</xmpG:red>
- <xmpG:green>204</xmpG:green>
- <xmpG:blue>212</xmpG:blue>
- </rdf:li>
- <rdf:li rdf:parseType="Resource">
- <xmpG:swatchName>R=138 G=138 B=138 1</xmpG:swatchName>
- <xmpG:mode>RGB</xmpG:mode>
- <xmpG:type>PROCESS</xmpG:type>
- <xmpG:red>138</xmpG:red>
- <xmpG:green>138</xmpG:green>
- <xmpG:blue>138</xmpG:blue>
- </rdf:li>
- </rdf:Seq>
- </xmpG:Colorants>
- </rdf:li>
- </rdf:Seq>
- </xmpTPg:SwatchGroups>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
- <pdf:Producer>Adobe PDF library 9.00</pdf:Producer>
- </rdf:Description>
- </rdf:RDF>
-</x:xmpmeta>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<?xpacket end="w"?>
-endstream endobj 3 0 obj <</Count 1/Kids[155 0 R]/Type/Pages>> endobj 155 0 obj <</ArtBox[0.0 73.0 508.0 701.0]/BleedBox[0.0 0.0 1024.0 768.0]/Contents 156 0 R/Group 157 0 R/LastModified(D:20090730214335-05'00')/MediaBox[0.0 0.0 1024.0 768.0]/Parent 3 0 R/PieceInfo<</Illustrator 158 0 R>>/Resources<</ColorSpace<</DefaultRGB 159 0 R>>/XObject<</Fm0 160 0 R>>>>/Thumb 161 0 R/TrimBox[0.0 0.0 1024.0 768.0]/Type/Page>> endobj 156 0 obj <</Filter/FlateDecode/Length 130>>stream
-H‰ŒÎ-Ã0 †aîSøõìø' ŸÆ‹v€©°ºûƒµ,$’õ‘<à=±FCáb¸Üï·Á8A¯-‚âFÅ{­(V(Ì\Eñ³Ããµ3>¿°Îüå¨IGIykF½µÝS><H‚朗7)dªÞ5×?úLÿè3ý£Ÿö¯ð`
-endstream endobj 157 0 obj <</CS 162 0 R/I false/K false/S/Transparency>> endobj 161 0 obj <</BitsPerComponent 8/ColorSpace 163 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 79/Length 284/Width 106>>stream
-8;Z\ui<k5l%"j!.(Yn<rGVB89DS9W38A;imV+n")c,d,Cr$jiKcnTe_@#q%%4(.C8
-HN;BSQ0K3*YFS=EP`>nRqnec:hag&4%a](-!f93L:A4D\h\gZ/n@lX;HcTPGfEHCj
-Q%6lr1C^ia9#<W0(GV,aU!d`IC%Y0XNP6><b7'6om5]6K!.0N/D61*)F/P7m\Pl,G
-gpGL0adN#/Z594=1XIk%(grE!EB@RojEgmQOd52KE0$6o\NS1_@3+<#Mt:Yj;B;Fb
-IK^@:(iq@&!<@UeLT(~>
-endstream endobj 163 0 obj [/Indexed/DeviceRGB 255 164 0 R] endobj 164 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
-8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
-b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
-E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
-6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
-VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
-PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
-l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
-endstream endobj 160 0 obj <</BBox[-103.108 71.3223 103.108 -71.3213]/Length 854/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 165 0 R>>/ExtGState<</GS0 166 0 R>>/Font<</T1_0 154 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form>>stream
-BT
-/CS0 cs 0 0 0 scn
-/GS0 gs
-/T1_0 1 Tf
-0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 12 0 0 -12 -103.0967 -61.2773 Tm
-[(T)7(his is an A)12(dobe\256 I)-10(llustr)5(a)4(t)6(or\256 F)26(ile tha)4(t w)4(as)]TJ
-0 -1.2 TD
-[(sa)8(v)10(ed without PDF C)11(on)4(t)6(en)4(t)3(.)]TJ
-0 -1.2 TD
-[(T)71(o P)5(lac)6(e or open this \037le in other)]TJ
-0 -1.2 TD
-[(applica)4(tions)11(, it should be r)10(e)-28(-sa)8(v)10(ed fr)10(om)]TJ
-0 -1.2 TD
-[(A)12(dobe I)-10(llustr)5(a)4(t)6(or with the ")3(C)3(r)10(ea)4(t)6(e PDF)]TJ
-0 -1.2 TD
-[(C)11(ompa)4(tible F)26(ile" option tur)-4(ned on. )41(T)7(his)]TJ
-T*
-[(option is in the I)-10(llustr)5(a)4(t)6(or Na)4(tiv)10(e F)31(or)-4(ma)4(t)]TJ
-0 -1.2 TD
-[(Options dialog bo)14(x, which appears when)]TJ
-0 -1.2 TD
-[(sa)8(ving an A)12(dobe I)-10(llustr)5(a)4(t)6(or \037le using the)]TJ
-0 -1.2 TD
-[(S)-3(a)8(v)10(e A)6(s c)6(ommand)10(.)]TJ
-ET
-
-endstream endobj 154 0 obj <</BaseFont/OUPLQW+MyriadPro-Regular/Encoding 167 0 R/FirstChar 31/FontDescriptor 168 0 R/LastChar 174/Subtype/Type1/Type/Font/Widths[523 212 0 337 0 0 0 0 0 0 0 0 0 207 307 207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 612 0 580 666 0 487 0 0 239 0 0 0 0 658 689 532 0 0 493 497 0 0 0 0 0 0 0 0 0 0 0 0 482 569 448 564 501 292 559 555 234 0 0 236 834 555 549 569 0 327 396 331 551 481 736 463 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 419]>> endobj 167 0 obj <</BaseEncoding/WinAnsiEncoding/Differences[31/f_i]/Type/Encoding>> endobj 168 0 obj <</Ascent 952/CapHeight 674/CharSet(/f_i/space/quotedbl/comma/hyphen/period/A/C/D/F/I/N/O/P/S/T/a/b/c/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/v/w/x/registered)/Descent -250/Flags 32/FontBBox[-157 -250 1126 952]/FontFamily(Myriad Pro)/FontFile3 169 0 R/FontName/OUPLQW+MyriadPro-Regular/FontStretch/Normal/FontWeight 400/ItalicAngle 0/StemV 88/Type/FontDescriptor/XHeight 484>> endobj 169 0 obj <</Filter/FlateDecode/Length 3130/Subtype/Type1C>>stream
-H‰|TyPwîffz è$ÒÕD§“î#hD”[-±o!b(/˜a¸@e0‚ §E
-D%"‰g”C ¹Ed=€ñ
-1ÆMÜ}?¬l[[•¿¶ªëõ»ú{ï}¯ëá˜ÐÃq|Ž—Ÿ·ÇWþ‹<©U
-ouÔâíÊà˜ð@µ1ÈrŸáÜl!÷ù
-Ù£¬÷ïß{ˆà¹Ïgµ|6cÔð˜O”ìß«ZÍc‡heöË—;Ø¥Ó´tµ•9,]ºtZ:ÉÖ(¢‚”2ŸC­2B#Û)RGG©µJ…lMx¸lB#S+5Ju¬ÑÉ÷¤UÊù¸,èÌÏ·÷ðÙ‘|Î:'g'[çev²ÿv/SidJ•6D©–ò
-å~ŒgÇ0†Í4Á¬0ì ³Á°/1l‰ æ„c§ó!°R ?a6F=1o,ËÇÊ°Ü—ã øþÖd­I¾É„`³@!º ¿þ!Ú :AÄN"8+¶ï›š›z™^00s6‹2ùÈö£VsQjz÷º çåM‚t!—:é=•J@j£Ð*øV¯$C·(0S9â)bÏ´«o\3eÔÑ’ : ZÁí„ãøÏatØHŸàæä&ª
-… 5X¡°ýqWAÁe¾1×ä>®¶0Ι¿<ȤRên¦vÐðéŸåìÝ»ÏÁD
-xÈÃm·™o‡Kh½Á#ùØv܃:y¾<»žçÖÈ1E[læ!/UXFV #‰çÇm
-óYÉE~ºÂ>¸h¤ ’Ç,Çá<‘r®$­”½¡±-¯(ºÑ.½£m ¾ÂTÊ=Î9Óë}“YË>s1«šžèÜg¿t«¿U¤&óäAV’¤än „ÆY´ Â@×”QšÊþ¸.¼øóÍöÛˆ¨cí*ƒ.wH¯WÜ~Ù^ðh1CÖ—ðû.ŒÜY°‘FŸ:¹Y-îù
-Läì Uå~OéFÿ]^>g/(Irq,÷ú>û Øgià^CÐý©k ÄêºBc!½fvYT p”lä졉ú5ø-Z°Íû°ZÎœó/oÈ¿N¿ÉÈsWH“ÄÈ+cÞVd&]ß´á·Þæòêï™,‚LÈÙ&!RÊô×j¤. ÙøMZRjt$H¾•Þ«,mûðÂ_õ¬äž®O˹õBxœÅà8T>#aE&ìÓèC™!‚l<9"Ê$<ªZ£ûhÀÀd Ö€µëïh¦›Ê/œÕÃONÄø”;u:óTVs¯¨µægz¢iÙ—Hà·Ún«M{<›š›–—'•øòÛÇúðêgÎæ ¥S‡&~M/ZÛ Âßï<Á²D]1{®[”¯ÙïO#‡ùG Ñ‚‰`Ýu³0ï<+i×õ+þ×lõ3¸8ÎÓc3@¡½¸:& b5̬"ç Ù¼X
-ˆÐi{~)™$!x63áú”'(&}÷¹ŸÓÜhg¹1Ì…æ‹H ›ÅÁÙ_šrŽ L Ãi œ‘?Ü Ù»bd[Ý! íëäÙÖøõeh1µšíÔ”ýÒ௤½Éhh¢gù¦šZS5™›_œ]®O÷˜Î"5ä‰ë8Â1×x—ïøûQÞo‰ã½ÕebÁ‰¹éCiçhIW‰Û+ºxæìˆÿ;åÉ6ªcs-rñ»veìö}þŠž,ë*ÿLTüõaÉ¡B·SN X’U°›‚± s¸|½IlgÝF.>Þ—×\ä‘SÇ:.¨|do·Õê¢uAL§VÊÈeï [`lÅÂh¾à'M¨8²’±7°2ŒûÙRVA¤ 
-endstream endobj 166 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 165 0 obj [/ICCBased 170 0 R] endobj 170 0 obj <</Filter/FlateDecode/Length 2574/N 3>>stream
-H‰œ–yTSwÇoÉž•°Ãc [€°5la‘QIBHØADED„ª•2ÖmtFOE.®c­Ö}êÒõ0êè8´׎8GNg¦Óïï÷9÷wïïÝß½÷ó
- 
-V³)gB£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚ó
-€x¯Íú·¶Ò-
-¨ꇆ¡Ðnè÷ÐQètº}MA ï —0Óal»Á¾°ŽSàx ¬‚kà&¸^Á£ð>ø0|>_ƒ'á‡ð,ÂG!"F$H:Rˆ”!z¤éF‘Qd?r 9‹\A&‘GÈ ”ˆrQ ¢áhš‹ÊÑ´íE‡Ñ]èaô4zBgÐ×Á–àE#H ‹*B=¡‹0HØIøˆp†p0MxJ$ùD1„˜D, V›‰½Ä­ÄÄãÄKÄ»ÄY‰dEò"EÒI2’ÔEÚBÚGúŒt™4MzN¦‘Èþär!YKî ’÷?%_&ß#¿¢°(®”0J:EAi¤ôQÆ(Ç()Ó”WT6U@ æP+¨íÔ!ê~êêmêæD ¥eÒÔ´å´!ÚïhŸÓ¦h/èº']B/¢éëèÒÓ¿¢?a0nŒhF!ÃÀXÇØÍ8ÅøšñÜŒkæc&5S˜µ™˜6»lö˜Iaº2c˜K™MÌAæ!æEæ#…åÆ’°d¬VÖë(ëk–Íe‹Øél »—½‡}Ž}ŸCâ¸qâ9
-N'çÎ)Î].ÂuæJ¸rî
-î÷ wšGä xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…EŒ…ÒbÅ~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X[ݱF­=­3­ë­·YŸ±~dó ·‘ÛtÛ´¹i ÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„Æfm“Ž;'_9 œr:œ8Ýq¦:‹ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö
-n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=G</zÁ^Á^j¯­^—¼ Þ¡ÞZïQïBº0FX'Ü+œòáû¤útøŒû<öuñ-ôÝà{Ö÷µ__•ß˜ß-G”,ê}çïé/÷ñ¿ÀHh 8ðm W 2p[àŸƒ¸AiA«‚Ný#8$X¼?øAˆKHIÈ{!7Ä<q†¸Wüy(!46´-ôãÐaÁa†°ƒa†W†ï ¿¿@°@¹`lÁݧYÄŽˆÉH,²$òýÈÉ(Ç(YÔhÔ7ÑÎÑŠèÑ÷b<b*böÅ<Žõ‹ÕÇ~ûL&Y&9‡Ä%ÆuÇMÄsâsã‡ã¿NpJP%ìM˜I JlN<žDHJIÚtCj'•KwKg’C’—%ŸN¡§d§ §|“ꙪO=–§%§mL»½Ðu¡váx:H—¦oL¿“!ȨÉøC&13#s$ó/Y¢¬–¬³ÙÜìâì=ÙOsbsúrnåºçsOæ1óŠòvç=ËËïÏŸ\ä»hÙ¢óÖê‚#…¤Â¼Â…³‹ãoZ<]TÔUt}‰`IÃ’sK­—V-ý¤˜Y,+>TB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%—®K7YV³©fFŸ¢ßY Õ.©=bàá?SŒîÆ•Æ©ºÈº‘ºçõyõ‡Ø Ú† žkï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹­³mzyâò]íÔöÊö?uøuôw|¿"űN»ÎåwW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝ­èþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_p߶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMśΠnßLÝlÜ<9”úO
-¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäüå„æ æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ
-endstream endobj 159 0 obj [/ICCBased 171 0 R] endobj 171 0 obj <</Length 3144/N 3>>stream
-
-
-
-'
-=
-T
-j
-
-ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eŠ¯Õú Ek‘·Ý*QwžÅì;cŠ²Ú*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý#
-#8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<'<e<¤<ã="=a=¡=à> >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·O
-kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ—
-—u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°
-¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäüå„æ æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ
-endstream endobj 158 0 obj <</LastModified(D:20090730214335-05'00')/Private 172 0 R>> endobj 172 0 obj <</AIMetaData 173 0 R/AIPrivateData1 174 0 R/AIPrivateData10 175 0 R/AIPrivateData11 176 0 R/AIPrivateData12 177 0 R/AIPrivateData13 178 0 R/AIPrivateData14 179 0 R/AIPrivateData15 180 0 R/AIPrivateData16 181 0 R/AIPrivateData2 182 0 R/AIPrivateData3 183 0 R/AIPrivateData4 184 0 R/AIPrivateData5 185 0 R/AIPrivateData6 186 0 R/AIPrivateData7 187 0 R/AIPrivateData8 188 0 R/AIPrivateData9 189 0 R/ContainerVersion 9/CreatorVersion 14/NumBlock 16/RoundtripVersion 11>> endobj 173 0 obj <</Length 894>>stream
-%!PS-Adobe-3.0
-%%Creator: Adobe Illustrator(R) 11.0
-%%AI8_CreatorVersion: 14.0.0
-%%For: (Administrator) ()
-%%Title: (colorbox.ai)
-%%CreationDate: 7/30/2009 9:43 PM
-%%Canvassize: 16383
-%%BoundingBox: 0 73 508 701
-%%HiResBoundingBox: 0 73 508 701
-%%DocumentProcessColors: Cyan Magenta Yellow Black
-%AI5_FileFormat 7.0
-%AI3_ColorUsage: Color
-%AI7_ImageSettings: 0
-%%RGBProcessColor: 0 0 0 ([Registration])
-%AI3_TemplateBox: 512.5 383.5 512.5 383.5
-%AI3_TileBox: 116 78 908 690
-%AI3_DocumentPreview: None
-%AI5_ArtSize: 14400 14400
-%AI5_RulerUnits: 6
-%AI9_ColorModel: 1
-%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0
-%AI5_TargetResolution: 800
-%AI5_NumLayers: 1
-%AI9_OpenToView: 93.25 700 8 1780 1006 18 0 0 45 111 1 0 1 1 1 0 1
-%AI5_OpenViewLayers: 7
-%%PageOrigin:0 0
-%AI7_GridSettings: 100 4 100 4 1 0 0.8 0.8 0.8 0.9 0.9 0.9
-%AI9_Flatten: 1
-%AI12_CMSettings: 00.MS
-%%EndComments
-
-endstream endobj 174 0 obj <</Length 6746>>stream
-%%BoundingBox: 0 73 508 701
-%%HiResBoundingBox: 0 73 508 701
-%AI7_Thumbnail: 104 128 8
-%%BeginData: 6616 Hex Bytes
-%0000330000660000990000CC0033000033330033660033990033CC0033FF
-%0066000066330066660066990066CC0066FF009900009933009966009999
-%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
-%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
-%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
-%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
-%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
-%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
-%6666006666336666666666996666CC6666FF669900669933669966669999
-%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
-%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
-%9933009933339933669933999933CC9933FF996600996633996666996699
-%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
-%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
-%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
-%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
-%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
-%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
-%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
-%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
-%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
-%000011111111220000002200000022222222440000004400000044444444
-%550000005500000055555555770000007700000077777777880000008800
-%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
-%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
-%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
-%524C45FDA0FFA8A8A8FFA8FFA8A87DA8A8FD5DFF5227FD06FF7D27A8FD5D
-%FF5252FD06FF52277DFD5DFF5252FD06FF7D27A8FD2AFF7D527D527D527D
-%527D52A8FD04FF7D7D527D527D527D527D7DFFFFFFA8FFA8FFA8FFA8FFA8
-%FFA8FFA8FFFFFFA8FFA8A8A8FF5252FD06FF5227A8FD2AFF522727522752
-%27522752A8FD04FF7D2752275227522752277DFFA852A8A8FF527DA8FF7D
-%52527DFFA852A8CAFFA8525252A85252FD06FF7D27A8FD2AFF5227A8A8FF
-%A8A8A85227A8FD04FF52277DFFA8FFA8FF7D277DA8F82727A85227F87DA8
-%A827F87DFFA82727A8A8A8275252FF5252FD06FF5227A8FD2AFF5252FD06
-%FF7D27A8FD04FF7D27A8FD06FF277DA87D52A8A8A85252A8FF7D52527DFF
-%FF277DA8FFA8525252FF7D52FD06FF7D27A8FD2AFF5252FD06FF7D27A8FD
-%04FF5227A8FD05FF7D277DFFA8A8A8FFA8A8A8FFA8A8A8FF7DFFA8A8A8FF
-%A8A87DA87DFF5252FD06FF5227A8FD2AFF5252FD06FF7D27A8FD04FF7D27
-%A8FD05FFA8277DFFFFA8FFA8FFA8FFA8FFA8FFFFFFA8FFFFFFA8FFA8FFA8
-%FFA85252FD06FF7D27A8FD2AFF5227FFFFFFA8FFFF7DF8A8FD04FF7D277D
-%FFFFFFA8FF7D277DFFA8A8A8FFA8A87DFFA8A87DA87DFFA8A8A8FFA8FF7D
-%7D7DFF5252A8FD05FF52277DFD2AFF527DA8FFA8FFA8FF7D27A8FD04FF7D
-%27A8FFFFA8FFFFA827A8A87D52A8CAA8527DA8FFA87D52A8A8FF527DA8FF
-%A87D7DA8FF5252FD06FF7D27A8FD2AFF5252FFA8FFA8FFFF7DF8A8FD04FF
-%7D27A8FFA8FFA8FFA8277DFF7D7D7DFFA87D7DFFA8A8527D7DFFA87D7DFF
-%A8FF527D7DFF5252FD06FF5227A8FD2AFF5252A8FFA8FFA8FF7D27A8FD04
-%FF7D27A8A8FFA8FFA8A8277DFFFFA8FFA8FFA8FFA8FFFD04A8CAFFA8FFA8
-%FFFD05A85252FD06FF7D27A8FD2AFF5252FFA8FFA8FFA87D27A8FD04FF52
-%27A8FFA8FFA8FF7D277DFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8
-%FFA8FFA8FF5252FD06FF5227A8FD2AFF5252A8FFA8FFA8FF7D27A8FD04FF
-%7D27A8A8FFA8FFA8A8277DFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8
-%FFA8FFA8FFA87D52FD06FF7D27A8FD2AFF5252FFA8FFA8FFFF7D27A8FD04
-%FF5252A8FFA8FFA8FFA8527DFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8
-%FFA8FFA8FFA8FF5252FD06FF5227A8FD2AFF5252A8FFA8FFA8FF5227A8FD
-%04FF7D277DA8FFA8FFA87D277DFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8
-%FFA8FFA8FFA8FFA85252FD06FF7D27A8FD2AFF52FD0927A8FD04FF52FD09
-%2752FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FF5252A8
-%FD05FF52277DFD2AFF7DA87D7D7DA87D7D7DA8A8FD04FFA87DA87D7D7DA8
-%7D7D7DA8FD19FF5252FD06FF7D27A8FD5DFF5252FD06FF5227A8FD5DFF52
-%52FD06FF7D27A8FD5DFF5252A8FFA8FFFFFF5227A8FD5EFFFD09A8FD62FF
-%A8FFA8FDFCFFFDD3FFA87DA87DA87DA8A8FD5AFF52FD05FFA827F827F8F8
-%27FFFFFFA8FFFF7DA8FD53FFF8F82727277DFF52F85252F87DFFA8FD0427
-%F8FD54FFFD05F827FF7DF827F8F87DFF27FD05F8A8FD53FFFD05F827FFFF
-%7D272752FFFF27FD05F8FD54FFF8F827F8F827A8FD07FFF8F8F827F8F8A8
-%FD53FFF8277D522727FD08FF27F8525252F8FD54FFF852277DF827FD08FF
-%F8F852525227A8FD53FFF8275227F827FD08FF27F8275227F8FD54FFFD05
-%F827FD08FFF8F8F827F8F8A8FD53FFFD05F827FD08FF27FD05F8FD54FFFD
-%05F827FD08FF27FD05F8A8FD53FFF827525252A8FD09FFFD0452F8FD54FF
-%7DFD05FFA8FD0CFFA8A8FD53FFA8FD12FF7DFD54FFF827275227A8FD08FF
-%A852272727F8A8FD53FFFD05F827FD08FF27FD05F8FD54FFFD05F827FD08
-%FFFD06F8A8FD53FFF8F852F8F827FD08FF27F82752F8F8FD54FFF87DFF7D
-%F827FD08FFF8277DFF52F8A8FD53FF52FFFFFF52F8FD08FF2727FFFFFF52
-%FD54FFF87DA8A8F827A8FD07FFF8277DFF5227A8FD53FFF8F852F8F827FD
-%08FF27F82752F8F8FD54FFFD05F8277D525252275252A8FD05F827A8FD53
-%FFFD05F827FF27F85252F852FF27FD05F8FD54FFF8272727F8A8FF76F87D
-%52F87DFF7D27F827F8F8A8FD53FF7DFD06FFA827F8F8F8FD07FF52FD5CFF
-%A87D7DA8FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFC
-%FFFDFCFFFDFCFFFDFCFFFD80FFA8FD07FFA8FD53FF7DA8FFFFFF7DA8FFFF
-%FF7D7DFFFFFF7DA8FFFFFFA87DFD52FF52A8FFFFA87D7DFFFFFF7D7DFFFF
-%FF7D7DFFFFFF7D7DFD67FFA8FDFCFFFD26FF277DFFFFA82752FFFFFF2752
-%FFFFFF7D7DFFFFFF2752A8FD50FFA8F827FFFFA8F852FFFFFF2727FFFFFF
-%277DFFFFFF5227FD52FFA8FD09FFA8A8A8FD07FF7DA8FDFCFFFDFCFFFDA2
-%FFA8FFA8FD64FFA8FFA8FFA8FD62FFA8FD05FFA8FD66FFA8FD62FFA8FD04
-%FFA8A8FD60FFA8FD05FFA8FD22FFA8FD04FFA8527D7DFFFFFFA8FFA8FFFF
-%FFA8FFFFFFA8FFA8FFFFA8527D7D7D527D7DFFFFFFA87D52A8FD16FFA8FD
-%05FFA8FD21FFA8FD04FFA87D52A8FFFFA9FD0EFFA8527D527D527D527D7D
-%FFFFA8527DA8FD15FFA8FD05FFA8FD22FFA8FD04FFA852527DFFFFFFA87D
-%A8FFA8FF52A8A8FFA87DA8FF527D527D527D527D527DA8FF7D5252A8FD0C
-%FFA8FFA8FFA8FD05FFA8FD05FFA8FD26FFA87D52A8FFFFFFA97DFFFFFFA8
-%A8A8FFA8FF7DFFA87D527DA8FFFFFF7D7D52FFFFA8527DA8FD0BFFA8FD09
-%FFA8FD05FFA8FD27FFA852527DFFFFFFA8FFA8FFCFFFA8FFFFFFA8FFA8FF
-%52527DFD04FFA8527DA8FF7D5252A8FD0BFFA8A8FFFFFFA8FD05FFA8FD04
-%FFA8A8FD26FFA87D52A8FD04FFA8FD09FFA8FFFF7D527DFD04FFA87D7DFF
-%FFA8527DA8FD0BFFA8FD05FFA8FD09FFA8FD27FFA852527DFFFFFFA8FFA8
-%FFA8FD05FFA8FFCFFF527D7DFD04FFA8527DA8FF7D5252A8FD0BFFA8A8FD
-%09FFA8FD04FFA8A8FD26FFA87D52A8FFFFCFAF53FFA8FFA85AA8FFFFAF53
-%A9FF7D527D7DA8A8A8527D52FFFFA8527DA8FD0DFFA8FFFFFFA8FFFFFFA8
-%FD05FFA8FD22FF7DFD04FFA852527DFFFFFF847EA8FFA8A953A9A8FFA85A
-%A8FFFD07527D527DA8FF7D5252A8FD0CFFA8A8A8FFA8FD05FFA8FD05FFA8
-%FD21FFA8FD04FFA85252A8FD0AFFA8FD06FFA8527D527D527D527D7DFFFF
-%A8527DA8FD15FFA8FD05FFA8FD22FFA8FD05FF7DA8A8FD13FF7DA87DA87D
-%A8A8FFFFFFA8A87DFD17FFA8FD05FFA8FD60FFA8FD05FFA8FD4CFFA8FFA8
-%A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFFD05A8FD04FFA8A8FD60FFA8FD05FF
-%A8FD4CFFA8FD15FFA8FFFFFFA8FFA8FD62FFA8FFA8FFFFFFA8FD4AFFA8FD
-%19FFA8FFA8FD4CFFA8FD68FFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF
-%A8A8A8FFA8A8A8FDD4FFFF
-%%EndData
-
-endstream endobj 175 0 obj <</Filter[/FlateDecode]/Length 15093>>stream
-H‰ìWiw›ÈýþÎyÿoÊxY‹·$Úmy¤Ä±;/{ ZvC“¦QìùõS  ˜VVœ—|˜ã·ºëVUWÝ2ðcië¿ÿYûx$e41;ÇLÅ&Ÿü¼ûºÝzN5,zÿWÓU®S±»ñ`uk
-ñï÷îŒ!à=NV™ (ƒ¿ !Þ 6[ËKˆÏ¯TJ…RrOÈt»~‹T±™a—
-Q¼óÊýÎ $\¥„².ê,BàçTô·³"T½ÁZÕåfÿN¼¼lyM¦n‹“û‘^4 Ê $ô~¸7±æÌ9à¾[öuÚÍÊòAAÉÉ…\Òì
- YêL‹Fé˜^Iµ`Þ× ¯Ä
-hI* U°býðÔ(ÊäŽýG|= Èù¼RÌfsÿoz`ÿø#¢jÃÆã¸U6À½ã9X&Êt>4„xG™¥‚}òpa”:¬lçˆÀ㎠Uˆt´åáN/Ü´‰‘õÃÃ?Bð
-Á_Í0›/$ÉÓ1¼œI2?:YN"¨Át€n‰™ŠM1ý²HÑDš_p¯3Ôû|¢ 6© 
-ñï÷îiBãd-§l~'•)ÐÕìú-RÅJd†MÍb«ºý§‹zDHGüœŠþvV„ª7XïÄ…——-¯ÉÔMÀbqr?Ò«ÄõõçºÃ`Þ9¸tDˆZ\7ô[P©rÌîI…æHC}g¾Ù™ªŽ!:ö}è±ùÛ6ÖtÇ.°M‰ã¦ü½ï rSQ¤ÚÄD‚bp,©A\1ob&3lc.=Ÿß
-ùü^>ö,I‘zóØùü‚”L³(ݘ0<¨Ã¥£Žu?V‡ #ŽáTljÞ©³ùYÖ\'ÚØ΢â±öÕÆÄ$ŸÍe÷ãÏJl¶%B Ï^Þpå…Ã- –àLÖw:gÈ´-ïK½ƒ“u ’7 w¢+¾p'¦Æïv"x%ï±–ºø–KuЦ¨§ß…”Ô3l!sà –Ω5Ë|FÉíÈ;²ïß”› ‡©ñ%f®º†¯¡ZÜ9bð’!ÔvÝèaíœÑ¾Nðßø.è
-«EUDÜ!`{€h•9CC1kÖXÿwOÞ»WGºy¡†™üÜ¥–ÿc~úñ„P¨Œ l9ÄôñiÌ:+©êf­K¥òäù.fÌEÕo-ʸ‹«v:±¡
-ÿà©î)§ÝvKª õÆíÛ¦&5 ï)#>œb±˜UæEeUõÏœd¤ÔáÐÿ£iy¯l<ñ¤lû¬ýS3êð¹HŒFÐךc]u'Sšˆ''¤
-¢‘>#—Ñ]¯ìÇá0Ž…çܧDƒjJ?¿9µ:ÎÝl.à^œó»æ¾>jº¸ BMz'Ëùiƒ\Ö0÷µ†{SÃý% ³Ój9XÒPYIvÓù(fcK>mt” Í_6xTL¬“û1IH0+~YáëÌâJ,Á,®ÀÌö¾Î,ûufJdK²’CT’ULuÅããÊ+45fVˆK¯Lý6ºýøQm¤F ?èJ75úÅûëƒèa©è?ªiªÄÑ°ôº}3ì¨uwO‹÷2 N¨½gÍ1î°md¹’À'Ñe“î|ëe3x·v¥k|xŠ]! p|ÇBª§h-~WÅ„Dè°E£ÚÒGxf‚£Câ1Ž88 ²â]ãwÛ Ê ´ ù¢ð0Âæ’#—Ìù”ÂÒqØ8Ìb®‡
-®©õå³^äi«Åƒ~ñòåÛwånuç2þV?îð}éø¦ñ¾th­5§‘9Ñúp¯Æ§/œZÿýU±BJäõa¿2äÕañˆÈ§õšª´>—ŽŸm\§íê‡Á
-­®5µæ£Êöþõj¹³½bŽx4®9¸Îlªu5ÿ2Sæ>—×öÖ7+Ï·>m–ª¯Uìüõôòlex¤ªèÆýK߬÷[ÃñÕŠ¼‹ŠL_ýt¨8Ó*díÙÆ6Û|ç”[õÏ.Ç¥£³á\S8º|_*›ê†±ù¤}´[4Þ=Ñ‹Å]û_Ö«t=Y‹^‹Z­Š ‚ *aRQëDkÕ:á\m­ÓýŸ$  íûž>çûþð
-X;¶Ò¤\¼9.¢ yô/ïb
-ðÜÆk­¿Ù÷÷Ƹ³„Mã£äèKvþUÝjĺ—û)9Öî„°iƒÞÝæfÁg­7í–ÕóiÑüìÿîµ›{¹þòÍs-š?êËÒ¹t£Ï­;Òëmxʚǡ¿ÝôzÈzs0îÄÑnu¨nY1žhÛÆÕˆöÝ´–údGJ•ü9d,Õ£cy'6,ßÔ<.`áþZÝ¿t¬õ‚MÓt9Ö÷ê\OþgÄ® ¼. ;ì ç­ã\‹ÿdõ'ÅõébÂs­Òç`t.AÿmýØÃ6ÿfúêjaw¤'×û CêêAF™?ªÌdùväÒÖâMÆ3}Pœ>ªó¸HËÓ©ú…ðÖ@ï¾gÔN§™ŸÇ(o•ï{Šž3áj„4-Æ`ï 7W"âËc%e¾« 5%Ó§ïhØ\¿¦Œ˜|VÊáÏ
-Í¥Š<2ÂHÚÒyŸ»
-µf²¿áŸV¹j¡Ãm{ƒ Ì k„:Ú8jkã&8kAž5ÜBr~ž6eˆ§f¤Û"P†v»«>1BX<ƹ hE•¥ç_w¬<•õ=i‘^ó ›*jî,Ôˆ8¯ÎöTÙ$üWH4¶hl»áAÀ{Æ(V¥ìõî—ýí;ESÎÙýâ¥2LŸ{îÉ×"#îÓÁ‹iˆÐçÃÆ!ÏÆ9÷|õÌ»¯¥ù§ÉñjXºƒñ?¨#Í2Å]lè î,‡[
-‡ê‡k9váMü(2€½à×ñrDgdÂÙ,»¸"š®à#43ӪǾêЃ”ê•ax²ëÛñø1V‹ÿÝh™0ïØLŽM4 Ý…õ¥ð€Ðµ^q0ZLx~Ð[c¿q*æŸaattö1@.Ì>B‡ýA ܆qq ·@¾67Ó­êxêˆCrüAØ“—t[lÞÎH#‚ºÆdÃ,=e9•Ð²C胈˜•>ZëošwÞh€Ÿ€‡+Òé
-‡t#1«BY”P¶‡’éÎêz(·;‚oë3ïÂ
-\;7 ê(u†],gùoÍ€Ô³/Ý„Ýi³ÂJÝ[DŽÉq'À½ñŽ¾[ä=W÷à"™êÝ2ò“™ÄØlþ¬£ÐfQâeùÊùj¥´ã´úedíî?›ùm
-³"˜É=²[nV@“Œ¸—KŸK¬üŒ
-kx*y¼ò§Ïú³:âcìFŽÎo:wÇÿS
-‘0&‹^Ü–üˆ3ßFšüS'HÖYlHdªÐZ“1™½å˜ù©Å…ÔIÆJH¦Äˆ±{¬›9Eóg'Ä,iáÛAËi°€´8{XNRy‹Æct<Mh„x”Lt“è ­È·Œh®—
-‹IÒé­ß(rGÞ3I5gbÜŒáXDƒ‚*jÃ؉b2ƒ˜,ºPûðx‘ÝÇKékÔb$”KC1É@ŽarN ý3‡… a³_¾Û"Ø©‰F
-é1Ɖ{çb]„ÝßJÎr¶{É“Ñ,$ËTÍeîs¥JhÝs,´3ð%n,†ªðpKÂQx40Ѓ rü"¡’HYlç/4 tTòœð¡—³"˜ú•nÜ7/ª‘ø™HßXÀòhÏ”K{-O÷Yúšñ9j1Ü&r“ŒëeG"t Š+g‹²%,¡D@oa3 ¥lm¦`èÊl²Ÿ–aÐIª1Ƶ—3ÅLxK&ˆ´ù¸3)yK”Cþ¶ÕŽlÏMìñ=BíðPbúåÙç[ÜH\"‰9]hˆÚi\‹¨ÇG0j¸xÔVåàò²qP
-Ö &0`Ó2е¨O, ¨G ËÓlMB4~b ~à.HÕÐpƒÂ颊òœ’
-—•zmáG‹O§–Y^©=¢©±o;n„çÜ¢Äï,QSÍ4'Ï©øy0ô' È-Š¨È@õíC-˜„"ÿû"|g¸ÎÞZ¦a™à­b/ÃKR¬ŽÕE™D˜í%ç/Ä[[ÿ_D«\—¹çhíK]Ö¬•8ÿ‹ÇˆDÁ1~ïñr7=âºTŠˆá2omòKg"÷ᒫ†D>âDq Ä2ùBEÎ `q#Ùe½µe¢@É Úã¡oͤéìOü ©š‘ûê¯ÓÐè­·¥ÃýàTüwv÷=KÈžÒagc5êÛ•ªþ±uú?©¯}«5uc^©º;…˱qêÄFšÎZI“Kœ@+OÁMnô¿ Òp¡(âFÐ’sé°‡2¾ƒüõ´Ú@•Èªèb6Mª‰øZtïÊépáçöª1ô櫵!S"‰æµø‰²vçùRƒÙÆE1Lå6‹°£Æhb Û;ËS%i˜=>ÄõIK4DI…¢â„A\æ¹"/N»¤6pHâ^ û 
-.—‡áìE"ÅTRœh ¨Un2C¿¦XGLüàuĽÊØçÜøñB"ã?6"òh H™«’ºgöÅð—9ç| °v¢d›á\:U©ºsyº‡€xq¾#“ð‹dŒTŽ i¢s& ¦°SÈÌ’§ÜàK½™:Ñ——9Ìs>5(mDÆKƒT†,ýM‡ŠÌE/={ÈÀÍ2U¤w¬/}Þ¨gB§AÜv‹ ºvR+'ÿüH&rè3ƒ‹WwDUwÀ‚;Pÿ¸Ýu‹Ÿà„ÝFŸ©æ}””ͧ§} 9>6£Ó1¤ê¬ ¯³ö?A#­`RŽ°ô â_iÐŽ>RQg4ž¾HFÜ)ðƒÛ÷”óµ)Ò4ro`Šº€økKNX °’b³„³§râî‡Qa¿z  ›©ûÆ£6Š±Ke`I|Ýìó>HÓ
-íJ}³1lè÷üDï¬6¼³ryV¹¨hRç½ý$T.xÌ/*Ç[ízvúÜ|½) ¾^Õ÷ࣼ°hnNy¯Ïÿ×<ÒùûQõ<#CX®/Nö÷ëg'Õ«Ic8ÜqÂacØUÊ‘>oñÜ4 »ñ}ý´mÇü¸x¸v“ý«_æ®Nƒ·Ù¸#ê2wZ“i+{ô“®=7µ¯ýÌòûý.>—ù±Röô|í иñz8OÏKÖã«3™‚òå±=OÐ+9£´Æ¾Ñ—L»[(îÿ<¶=tJ Ùoa8™}*¯—Žw«wx7˾]² }¹¯¶—ÄÖÊÝÁb}¥/ïæ}kKªöÅý’Í:/1e‡£bëEùh«ñÎz²þ…mo#Œ•{c½æ6w¤Íþ÷0w³'¥ë(_«O7•pÖòãSAhVomV^w×…Ÿ‡›úA­ÆZÆòE$ë—Rù±Æʽb¥p~NÃ,¼ß—ZCi X÷÷‚~ÙžÏY{ÛÛ¼ЇüÔfšânCêøSûL_Ú=ÎZ[Mmù¥læî÷ÃY‹¿ÃXÆ&®Þj6q«Lÿ9,~ g½éìn¼W­n+Û0š‚ÍjÎw/ê%½øÎZÎ<fkÚýM+TÓ_™Ý³Ñ®`å4Nj:§A®nlh-‚õñ¥ ¼\ôC}]Xmë-ÿ0
-4ó ß »õ¯gk<È…ý ëõ×æãœõqÿ¬Wgc¢@ý-6°FÐÄ
-X0–Ø£Æh4ñ4‰(øÿowAAXïò…»¸°ïM{3ã5 ÆÚµMOAåÆþÌÖ—<Uq
-þ¾{ÿ§`qZN‹±ÎúÄðëŒ/êC§8§ÕŸWkiÊðŸ×ë﨎Xœ~ﶡÍ2a8Õ2m8ižFkóçÿè”äæÓé®wTFÌél
-•F«ð OMz´g¦ß’cB²ÚiVô¥Å# T((NPâ}ý·$OÅ>Í/h厊´ýàßj †ÑƒÛ Ó*ÖdZþð«ªVï Á~ˆ>šéTåƒ&§Ÿ…O€Õ{×X¥÷ûˆìv
-7åùðŸÌ܇V\µ9ОýIºY¦ܸ¡ßꘙif!°GÙÇÀþ˜<ê8ñÍlÙWw ëŠÂîáw1ñ—¯(ÚÌ
-
-q›÷Ʊ!'u°MKáôAî7qÒÚš‰Vø¿]¥rJy_”°œ
-^5µ2Oác±µ-b#…—dWF
-¾;g˜p#ÃÒg¤Åt³Ð 1eÍ! ø÷ ËÜxl,¥³Ö¤?[¿á­UÃ.·í=ßô~`5øãyZÏϘâ<ãt ÙˆósNõž`–×êpyœ~!,k7ÍÐ/Éدp)¨/Yî6f£€´–%lÓìCÒN'`žS6–åayÁq:I83
-,¬± «á¾<¼·Õ ,ÓW çÒÆ0kÏ8‚³U­C³Vxø×s°p‰e“†Öà –'|ˆ—1U(E·´v¨:ëq`™Ó­¡~‘Ô,Ñû¾ýѵö8²jih„ #Cƒ¹ð 44¿V†f¸tnh07côžeQ‹ªæœÌás3 ïÉmhÞâÞ$/€gx ¨uÌ u­hLåÇЀœnÃû2wϸ‚ÌÓÐ`ê6Êf Î 6H$nõYFŽch`¿âØZÀjâþ‰´ëWAœþvcú¦Ñ±‡…Là›F‰7Í*$gˆå–_V4,Cx:ó¾@’O–dzߌ‡»ñ0ú€gà¯OÖ½!GÞ´x:I›CŽ=Ç“ï}Ä÷„N;€ò_VL¾'Å-Ç~B¾mýŠI|Ù˜B°7ÜäÈŒ%ð È­³¼²Î°ãÑàé4$K/+,¡)<˜ …”úêâk›ÆµûdÈ™å⻀g©?·µ‡VX‚ÇƧÁqåóx°„.´“±° x^ mð2L,×α´•ƒä0^Ä#b „$¨É–öW@L4‡¾âÅsa*U¿ò}h
-3‹ç,y`‚J¨™(–ùÿø`£í47ÑØúOåâíéíBzTzíBì·t#¯F¹—\GšÇË¥XíAòMkm)Öî¤#a~§BÜ€ÿ(+ý¡2¹œÅ»bGúw&˜zLÝT®ÂƒH¾p•ªŸƒñù.”×—†_9M\'´ª“oZŠ6•[9ü|+¥Â ¯ÎÔ?#é­#%c·éï
-æŸ>­óÊ%Lâ–-åó-S›¡M™^å]´M 5íäüNzµ¶>çˆ&ÜLgû¦yU1Ã1‚“û·m» ð4-]ñ'³/¶Ñª}#ÁÅuâ³Ø)~+[©nڪ̈́ã'‰»÷M™?†” ë'½÷9óW›—ù‰á`_§žx:{oAÊ·ô´UÀIðÏ Wŧÿÿ*e¶ ¯b¼4|—¢­nXñœ=‰è_5[6r«=™n‡Y“´tíÀãçáÖûu©:ÉcÓ¾.²ÍûF±½é& MÝíhMB§SõÈfÊ•Êlk¯Ó$ðV@¡…‚³±P, ]4„¥¥,ÅfSÉÛ3Huv´•£hÌP¨i aÍ “£`ȉÚ9Rè¡Ù¸Õz€‡·VøŒÝÞƒ;‡V@ŸÃXùÛ—L"Tb"®[p·äU†ã|’ÄéÇ´·ïÄ uƒùwî'~ZúP¬³C73Á·À²ï_àbêp‰iîTªVjšMÆ©.ƒð ÔËÜ@tqâ§Åì7ƒu.Qz¼¬1;WÀf´´û5³î—L9^en¸î— [¥r¹µ.è¸iQ[+ﱂûÒlÔHN<oJu߆>úà
-PB÷–?¤OÛWm¹®‚à™âÅÈ…f Pž]TR½¾,]_VüÛ훨â$ðW¶co ¤ÑG_Õ#ìWe+n2À[ýµ£Ù«^6&j\~^«(;(ÕÝ%hÊn´±æ[¸iœÇ%HîøQZ€ˆfI¹û2ùjAãqÄa$ýÙú -;ðŒ«a|[fGЪ~lØ RH‡¢Î0ÕÒLq;O¯†‡©àž5vÊƽÓ
-?Ð<‚U©0³ÃÎ"i«+KßÃß¼àÄö¶ö$ï%ê(+ŠS·Æ $r¤£áÆ&Püàºà3 Pâ( bƒ®
-(ñÚFS1öÝ·n=Zµ÷Û–uNÌ0¹5Ž´@NÃ¥óœöÊ”©5é­2\¿Þ_•‘ØxM^znðÐD ·ùί„áVƒ'Û¢NšB—¸]Ô±)1®€ý”êtÜþ/À
-endstream endobj 176 0 obj <</Filter[/FlateDecode]/Length 17828>>stream
-H‰¬WYWâÌ}¿kÝ„!B2…  ai@Ú¡‘ÿÿUUBÈP_jÙm<óÙ{ŸÁ,Î$¦_Ûh±(£EZ Ñóÿÿ£Õ‹H57ÝÜd/}Õp;µMÚÑÒ
-³1¥ ªu6À˜Âû nÎØ8áF†À VC¥Ñú<€½Ñ{É,YÿèwêeZc¸ž˜›lW´~ÑÅ;ÈëÆX¹ÝÑí6øú¼@Dºÿ–¿ò±NŸ}ÑGƘÈÛÂÒ«º7{ÇK÷Y>(fNŽxËDædõ¯_$Ú4v ‘šÝô@“o\“º½‡½éᣦI«Z£
-¦ÛõŸ¯1P¯ô1øSÀl°îMÄÈŽ€[Cóg3ª¢l@/õ·z-s¡ÓX e³¯Í…Ô!3lÁb1›¬ÆMòVö€{“‡"HQ@Kj±U@¬0®Zò’BX"ÈÐ}à þ÷ý2ÊAÓî L"è¤`Úh!‚°È5iÊôI‚oàI©×šõ‚°hOgŒíö¡ÃcÌŸ¿€j7miÒpp´ö®€{ÚÔëÄ[Æ¡h¬¹hl`Î[Í‹oö” ܘYT£U.¬¬Ux¼A” úlV~ñwΰ‹>+ßã²²‰’¡°K÷V>Èu€|ó ,Ú}Èʦ4uÉÁÊp6pYÙ”¡Z´Ã$Õ :î÷” ¯µ³ëeÁÊ&
-UÙ“•¡I<V6Ù;œ4KVÎ…h[VÖú®§ d4¬œ 1Žý*3‹Ÿ~<þ—ÈÑèQíÍ’adO#éC“G獅½„Jk.ø…{Á®l¾!1.¸a´Ä6šX°z¢¢€sÎiÌ5²¡ ’`Q’?±°ê9{´È…b&´PÜ#¾úŠ4ý¥ C®1ö%@ÕlÙSÚÁ¤ŠKˆQ_ƒ•>QÜpT©®2µ5ßhl¸âU-ð¦×ˆÉ'8Ku­ezÆï¢åTqù#™Ýµõ…$½T[Å
-‡JÎÖ@¿
- çÀ€”)±IïÆ.±ùÅWÆ5Í4LÝòS÷¢ùÅm
-ÃÙ\¬ænIL§hÙZðîoëÅ5Í&…S´l-ð/™Ÿ¸Z«“Ö
-’´fíûlkº©­…°°†y7ñHëaTi ­'S¾srÝ€jÍÿ{•ûRn>(BM‡’¡ýQ¢ëÏ>äu•üÈ3‹·ÅÀ¹rzÑŒ•sÐt…áF§^G.©ÍЭµ¸û%7ê‰k€‰tú†kã-7ºY‡l¤’ÛöÍskÜÃÕ§ÊiD`]¹fjŒ]9GD#0¢ÿÙ¡`u°zï’Z4Ö\Â:c¤ ëÚ±l0¾û±¢å"ð~S> ‰§×°:
-±­Õ m×NÑ憞¿Ö¬ݘç\²èqi7ÜÜ’Sä(DEƒ‡(˜–šm€X°£A¬­¸ý)‘s£k,Ké’›Ä<^k¶†p ÀÊŠÖÝó+y±&+ˆÖN1”ðÎê<4„³çXšø§¸…|ãH¯L}c;‘̲™[-žé¾±Ú½ÝÑA¼Á×ç
-¨Sþ;“oßɕ€ÉÝêK^‡›&àКæ FÉF*3aFk£ 24èt°æ€ìL©{¬½_Õ‰y€àb tP:.¹–ØF#W¤ÜûPʵ[çTÎHpFäO|FAø-S”åâ=mW(Ð'Ím÷l®%0Ú?^-Ú~÷ìØà­Ž$ʉ•;P°r“ÿX¯ÖµÄ‘ ú,L@@D”{ @tÅ뀺¢#¼ÿvw’tº“NàO¾™Ý¡ªºêœS§~÷×¹ÔƇj¹t.õ°©ªn}ùNÁtäl^£œ‚ßm§×ÕP̧Y§Ô¢Lé»íœ¹õœE¡´Ï¬“à‘DZæ€ÚQ¨Iåal­ˆ‹ÇZ0QhD¡FZ裨<uq¦#ùLÃáÉ"yÖqÚ¦<z¡¹=-lo4Så§ûäÖ+C„ùwÆWY¤ša
-¥°WË•`ø4rmPSH¶…ÄÛR-Sx»PákhÔõËÛ…J’M¼§¤ä­®ÐNå»Âþx«"±¡P×oKƒBŒ
-F†#ùn( okM5©»oAM&" 
-—••·è(ô,kgÞZ ”ŠQw?¼g/OHC³ö52ŠÛ6GVÌ|Œ£$¦tGŒá5ŽU`tC%/~ß°í]èNV†‚!}¸{-øVÇÙëû­=Ásf<€Àšb$‹À[ 6b‡¾^h5PÎ*ãÅîz
-ihÀm4èí0½ÀÓF€µÅ·vL¡ m
-_㵕aH¿[‹§§qnå|4NÝÊ ÚÀóT°­dêVÎGE×y•ÅÙzLþÇåãè£o¾×t ‹gŠM>*í'ä6^ÊŒ·¥'A¿X/8ÐÃŽyßX8ZGG%I½d’Ó)#gC~s–‘F”5a«NSÎ7“Ã…à¡«E>š ªHƒ#ùñsT0ü—õ¹ô/¡I ,žnÕñº.¡ú~ðUp…Nª:Wj§Í…¬ªËjñ¬ùܶ˜%T§ 5Í™e½×'óUÕÑÔu™]w·
-ëR œ<Êo}9¼ÊýDI¿WÔÛ:·Êý)õL)Ê>_[õ×ãrö$†²zÙfÅ Çm§åÊM|1º·€#¢<;¬€æšÅ|í~l4ƒÿ®üÈ‘£"—={Úw÷•þýÍÄF‰ôåÛVHƒø»yÎK Š ñðʳº,9íÅ =
-OHâí 7ijuÐf
-w7`(Ph½&Þê¸ïFí­s­zc³Ùð8sU¿û»œbÃÈŒ>.Ͻ¢uËVC@Ä¢¥û/÷h`^…”g´,Ç-³› )Ô4kßE†h™?ò³Ç3ÃU†¥iYŽ¿œ}L½¢)bÞ³°\¤9¸þïêų¶K!Zä_úü‰¥i-ž J v¢¸J}Uú•ú_­¨ÚLÝÒyÍÍ$ _B¤ŸApýåïæi~`çbö/ßú-ý,· Ý(`Ñ¥Áÿ½Ë”/Žœþß"Y¹>/\)ýÉã³(U'ïr¢7ˆ7BG÷¢Å˜Mù‚ë¥qÝÛÞ7D§€Ä&ïm¹¯Ê­iˆM‡ÿ¦Ý72Á“ÉŽÝj3dÐ@Q<ˆÖ^ÑpkÒÉ“¬ ²ƒ~‰¯W)2•±;Ävñ‘£ÁP¿¤PºòmÅP˜éÑk\n$óuls˜:HO½@!´·Î a,RÀsøÑî;«á䣘á„p‹‚4[œ·(Žø^gŸ³á.˜Ûž¸Û¹@–êÞ„åU #Å\ø¥L–˜Fd³íj×4×p6ÈZ[NÁñq”t
-J‡•ód@”¬:è\ªzwÖÞWç.37´ÑêMÓ¢YàJíÑ.¢•ÓÇP´´X¤\¦uØ´©ðRw¿‚Ø*¬Kõ‡•B
-ҘѴϬ“ài' ÐåùYËëð‰×ãÚGP;Ò¹7>vˆ‚íúAã>Ø~z+¯uRuˆ7’zÉt™)*¯…€ÃúdÂQ7Hc½Ÿc<ÒÊ ã §º8Ij½Þ4[÷•áÓ%ëY“‰x­ù)ËY“C
-XÇ(K®ø*‹³õ ‰<–Eì^ÂkÓÅ,Llžéý/Ú7Û~~éÙ6=„Îæ%<ÚxG¨&Ì&/Ôæªb6š†~ô;‚@$ÊKøŠ¹Ã†¹%ÍÍ2Å>4g<¤[ƒ¬­÷ƒ¯Ê€+ôÁsÅpåæ+ôÛ¨çzI+úæ9¢ l /빕I»VR Ô<·öU Wu¯é¦Yî: 6À«@£º3{‡ ”ewÓ£áÏ­¼}&ñ­éT¼Ü,Û0¶ÕEÐ?iö4ŒR¾{E­!Íß0r¿L–ÖÆ ”F ñ$R‚¡ ûAL£йÌ0çèCئŠék÷èܯôšî=44Í*D.=tc MsXy]í±‡Pl ÉõC‹"(¸¦¦­‹,W+Ó·.n|…Dë—ªŽ>BÞ-5¶7x0y6M‚U&€±/i0®K˜Æ³U¬V¹Iðɲ9ÂH†Ì{3]ö¯Xï+ê‰ pÀ$X„Ó
-‹b?š´%$tXýl°–C½o` Çí¨(EÐ;r:l²¦YË6uúâ[-qï rCvsíXÒ€2Êlíƽë‘™xoJ•[Ó‚
-…ˆÐ—gnŽÛH‡Ñ 7W\¨&Íò®‰æƒNk;{ ›ŸËÈ„G±Æ.·¯c¬H§Ý ÷"Vÿs¥”}||[
-ѳHâ/ºÅ¨Ê6›ÐÍã ½ˆ ñ¥f¢Ò~ì=”KÒ×±áÉ?^îÇøhÝ•YЪßb‘=AnúÖn”àƒï˜ >DÍ¿æøâ¦L£‡½Qì†úŽØåñÍkkƒ#¦$nRBË«jVÆw{îÍ- ÂRœa„¨›-“gØ\š4;5ÏìíúæÜ« y nk8"?Î9˜ÜýèÜ §š›¸^Ы‰Ù¼Ú²[e³Í[ÙŸ„S?!BÉÔöc‡H:táÊü¸ý¡‚¾ßlèãþzŠb¥ïǺÛLL¨òot*è³g¹¶Ší—kª –ú£Ýe3Q[˜V÷gpeþkñÝñúÎÏ∗w4wÅö•v}Ó¸ÀŸêáôe¥=hòš‚r%¿¦€¶$­ULˆ ³
-~‘ºœÂhØügÖ) Í}ø‡Þ3¡€Î؆[³ü§à»ˆõBÝØÖÌ4 ü&¹ÌŽÓÝ°¹Ù€•£úM„F40H"ÈŒ‚V¨k
-h?ÓÆ \âå³õ¥›
- ›{"¨rAGÐ&-äR@(š V†óËu›•;–ÌÒ+_P²áæÈ>‹÷O„tÕ ämAÿ +¿-¬|1 ›ÿ`ekà¡X Z»î/XùüMnƒÖþ„•;–¬çf„; ý@BͱòÅP8VÚY.ÍÊG¼íù7¬l˜<°ò…½}¥ý'+Ã=$Ç]ce„°v¤dèæ׬ }5Ö÷òõŠrã£Ê>êðÑØšìXÖ‰&ß7÷M^³‡ÜÜ1ÙÅþfƒÛ)íb‰ûå×Òý6V͘#é“´Ü xf7+no1ÅùÁ Ó*›
-Ø(Õ³iq¦làÛ*÷Ç?ë²w§¿ÌÄZñö ›_˜\{4TràÙDé­…Á{À§˜®È¡‚×°¼#é¥ÁÅ w䟄d¬Kª*uköÕg&Žï@;™ˆ]žêM¹PCÓ"y'iÐtó IH¹ó-’ê×K«»ºI¹ó-ÊÍPô0&)×j&à+¤{Ø=¯ÖþýÉ/z¼f™ih£Zo'ã }:+oƺ6G“owµÞÏ&TáУª”êÇpht°6ØSxû<…2¥`®8…%ø&•Ï;¨÷Êt¹ì[èµ®õZëîkn´¹ß·»–EÏUÁÖõAC£ã8“÷ó…9צAõ+êÒûùb‡ŒS+…¬éDbÝZÌ”¨Ò÷m}¥Vó¡ÒÎl @±ÅA“W …ÌÓ<·|î±{9øí¾Ñ
-m¿Ò¤?g»ø{¼C.H_J¯7Ç3èf{¬jäþ2½‘<¯£¨®Ó«‚“4L׋í /Õç‰%*[h]ÑB¼Ü¬˜} `x(˜s^Ìct¤˜u±Óˆ
- iÔ{ ë\y@‘ÅŸ@±õ,€òg·*øl*ßTi¨>w%Ð|¨ ¹öh •rÏ@ÛY°ƒvô„ntýÅë+¾É諹#¥o"ëÆʺ†&“:ƒ\Ñ+0#Ìù1ÏÅË–;$:ø g­ÔKqÛL÷*:ÐzÁÛÅHÈRJ÷Ü®’’Ããùè€AàbÐ _òvŸu=@–\1¯»ŠŒ9¶ù>•Ò¾¨å\ ¶ôÕGÚ
-èü›•6¹”úzָȢÉ~oí“l*¨úsÐ Ç–òwõ”dë™V˜ïå;ONêE:}¹×–sè95W4êŽ\…Ù
-GÁâ½)~ŒJ-a:àc{!{Päzo$0‡Ñž»A$°Ã/ÖÆç¡_*¾Ã’}óœÞ‰+Æ·è¡3vq#Õ•&YûYl&
-’/bßÂy×Ñ4ç]õY%lää*燩šÅÓŠöÆ'¬ ÓK.ú¬PïUñ¤4µ8TbÖ(úk)|½ÆŸ RáBèò—Òq?MÄ‘«n5J ƒéûcÕ±ª6tI”}£ÉTŠ±ÃÃpή‰p
-å]ŠLg‘ ÙÂE4bŒÀý@|g …Æ/­d¼ÿ&rlzƒSÕµ±ß?]C}£HOO3qåÄQ %?ŠR©*f¹œ±ù„‰)ˤ8jô6ì 4­B4ƒcCXxÍ-Æ,"«Új=hªNïx‘±áŠô9lË='VÜòß!©i¦(»1wyÿ¯¿ *°K©Ï¥¼?«ÃR¥ÑÎô³iŸ‹™eÙ&÷òIȶ+Ât†»%!S)?9³ò%©lC3-5ÕZ
-1oû¤¡»ñ
-M¶°ûk4«5~–t.Ï„IæSWÚYGÐ%W´$¯V«saÚï“|©¢‘R*U Ã¹´;­ÈÙJHÁ(ǯϠ5˜<E6cÊ{“l\14ÇŸŒÚ¨n®Ù
-3Cº¹êæ™ê—ìa6…ð
-a‚o«¬x$–†¨>òJzžq‡'›SS®ØñÎÕÏ…$/-·!ý»‰øþfü…˜^NäñÊK/€“ü,²€æ}"!ˆŠ>ì@nlO˜µpxiÀí«œæ»çc˜JL˜dÕÜCO ´Þ¸`!Ñ
-w 2Æ×™\š±¯vE°Kd’áqô×>){¾ä³ €~XÚÍŽé¢EÊi§_¬V$f` †«whž¦Y{W½=q èµ²Ÿ¶ÎTjK©QZæz–“„
-ª ƒ0(\äµî¦ûÚ-ZÿB;  íiáþzظ‘&ºë ÉÞ)]ÙoT­¡)Æ&ðš ËÉŸ(z¬Tªaá¦^fÆ<+£j*êdäÊɸ?Šè—±X£¶ÓÙêBÊo m=ÐögŸØó´4Ã)ðœ=™&½U͉ÆCb­[ž­‡aƒÃ}ÕÉâs*\0Í Ýa΢‹Äé#¾Á&OpFÙâ;y§3YÊ„…Ú(©äçj—CƉûpeðÌIŒý K~»uµ¸ŽÖž.Òyašåh]Àž» ~TɨÇ÷b¬\†ø…ÎØ2£«ôGêâ»ú u™>„)¾ÎÙlv¼eŠ¬¯Å–Z[Ó6tiG›cæ&µ%ô÷ó¬Cg<ø–dKÆ„è$®;€9ëpÓnÆwN „€
-ÜÊw&ÞF^]0ö™}L诼OT˜ ¡E2n´cu¼ Qgª@¯Ã.ä
-Ð73dxK&~8¨Y€ºÖifÕ–6çzݸ…Yr6à´DÀʉ±Î)YyLsóÜÔ–ô£KÃ2tG»dV8£Å7öèFû h·?ƒ;éº:IuèòtnCí‰*½\[ ×jÝ€®¸Q·˜è`58îüÉ“mÉ#=™•£YµåÙwF}s‹qA]Å°UdönöDmi3…\gÔ5Ãþô„Šl|&0ÈØNíÌ-°×zÿb–qÆÊäüÉÂ÷^
-Ùn@úñï¢ðáŒ&¹~R®ž˜>!§Ò}"±êíxi„ƒL‹sºú¦¢ùæØ؜¥3¨ˆvò8]Q>*ß«êeê¼y§Â>Xµ«@lé (y°ÏëÊL`¥2 ohï¢7{——%âѪ†´Ã†Ú@€#gœP®«7£Œ^4ŒÚ±D{uDßEN‰{9Å-'4x<’ÖiµùPN(Ì1-Ê8­cÏܹ*BõÝÍ©a~vUôC9!²y$­ŸåÄèÔiø‚”ÿ.ª:wsjsB®óFZØÈR^ÞH‹ýaNæ¡´ɉ;ç„úæOQå°ÜÊIë›cZþöÊ÷z#-þפ
-[½Õ_ŸÈ†TËþúÕ¹ªî†óøªo„åÙÜ´{tÉé0/œûMô‹fœ‘U-¯y
-o³‚ÐëȲ3.v¶ú¹ÍIÿD%f%íPÍC§† ABØ £zÜ'Ì Ô\‰æ] ×d…Æ(’ªoáçÝÑ_KóèM‚`ÍŒ´ºW¸‚0A Eí~ZW¸‚0ø´öA+Ùx’½¼!´žJûù´Q¥Bî ‡ Uìlî@‹S*¼~ÂÕ‰Ól­€÷.´WÐ:âj0ÔEa~¤Ï_@ë
-WÿBÀZa‹Ó·¡E¨Ow)+ aºÓ{ÍZ~ª„aÆÐJ°[ù´|® ‹ŸquÐíô8kݧ¬ Bkg2„žä*£[ÐÒULb†ÕE }}n³#Ÿ+T™Òs…5q+YÍŠÅõ7Xö7{˜¾Ã²'Ší=N±—óÍc­ðmŠí*£ìÁ@Ýð?To¤7ßdY|Ú£ðR,„ù.Ë>J±og\A˜ï²ìo(özĽɲý_@w<ôÇ Ê74‰©+\]VÓû ´ìlkÜ3¤XÄFÐò¹zA±1´FŸߥØ[€þ)´–ª!e¡jþ„µîS
-ó´¤Á¯¡u…«k@ÿ€µèû3‡v(RÏÿwæÐp…Xà -±çqCë õF/lDY Õvá´à‘oB«9W ¡õäþ£½Êše–èûDÌ»]@EqDv÷QlÜm7÷]#¾§ûÛohoã̯ïÌ‹ÑteVåÉsN®^q…jóÃ`ÙéýÁ™ÃÆ•c9Œéß›9ÞAà_Aë—3Ç]ʲ½À;þø$kÙäq—²ò„Š<ô_ž9l\¡Óü6ku.?7†¿VCó·fcþŠ«»€ÆK¿€Vôù´¢§þ=Êz |üj°w %’ùÑ£ò¯ õW7üIhMfÀ\½;Íÿ-—Oîk?¥,#—ˆÝ‡Öd~ü$´>àê. ? -Ëø)e½ôŸgïQ£î@ëž×úÝqöÞ,ûŽÓ>;ΔþµÑ‚0ŸgÏhq{lºDæv¶ÎpçÚ@ÜT¹DTìD
-¨–QqU!Î<Sì·ã‘r3Ö†q ÕÅ©J¥™T]þ'$p1¯\*¸ôë_Ek•ÏôcõH`EûÈHIØäÚÙÌÉÉ7ÒbŽ8Ë¿Ëæ=Ñ#lvåäÖZ«£aõ ÔõÀH.b8¥«C
-@v0„dpœà:„ˆ‚“-]ce‹ìú%+3¯IóøPÏMÙ aØ ÅlÅV·ÓGÕÐtÙCÿTTÆ£ü3€“<K¹ŽðXê‹5{ pœâA
-z³
-[t‡èmÿ9ó\RÂèÒf6’ êèAÈî‘Ñ3#¤jžY›)ŠFKÍžr5uÔì
-O„»"U2[‰4k!Po£|5­Úíe`SLr;ëÇ”‰Ö®8(…¨,ÕÎIJ=~¾±[g-M[Á–li§!bþ†ªDŽn98> ,»„³Þôlëk@b L6OÙ¸£¨1W<…(«BÆ¢å³: 6Ó†KåÚ$èõ¼ý·e¤-ˆ^¹=Ê$…ªdö¹¨Îàñ6ðÿŽªJsº´¿zõ9˜Su>½NQLZ.aFö'‚.l[è?Šv{zt]šÍN®±t¡Ï#œn®Ë¹wMÙÓág3VÙ\/§ñ^É^KŸ1‹ôb´àE»vÄ—ÍÅ®—óäúŽ¬éJâu7ŠT{¼oÚ•F¸}’Í6{y‰«hÆàr%/ä”÷!
-ÑSÐJ¾¹â¹ÍZ.âMÕ¨ó6ú8ÜCÅ\ÆU?R•½}8ÈÝ{°…€:ïÓèÒTa=ÞÜV0Ž¹ H+º³3Â÷*¯b¥\ÊáØhÈïq{'ß)àCý àÓüÏfIÕC¨6 œ[Ä­º´XRa`¾Öå-¡"ëMDz‹K7²Á<ŠÆNºÍ9ò,ê½2Û"}ç›@¼b§Ö’inçr(Dµ ÏA½÷t“x¨8¢cc.²BïY 
-a¢ÅèfŽ6ÒèR].LÙ#"€…£»’‹%u¯¯bÛ»§iÆh¾N¥,*³œlµ¿c¬|Xªä¾‚
-‰¾K¦va ÌøìBOÚ ³Vß®úÊÄëGÔ‰|U Χńê7ÄêŇ!ÂÌËÖà„«ž ?è·l‘ë·Äànväu·‹f#è †#y÷IG*
-;{D‚Qä™ÝÁ a@Â:˜P_ïýŽÿŠ ÅZØ*mìŒøþ5’Q_¦VLt_K°m
-—^)ª)æu|nÓ:—Îu¸]c†úñ·B j"رœ×ô/RuÂ\)á…FȪbÉj%„¯½Ô­°2¯:¨Ép¨MM‚>ý‡ûú…¦èÔ·d‚N| ×/kóX=.f‹í·à×/Ì×/a¡‰4¶Óz4MÝüç,ïŒËÆÜž¿¥¿……'©PH»©‰þ¥B¸ùÞ~€Ù°T\‹
-üA`ñluÄÑ­9eÌÿ²^ÝÉ*Aø·Ø*b‰b£K좉=¯]1vôÿßÙÅr“¿x”•ÙÙ™§Ð¶þÕÖ©—?8$“§MÞ<»ËS­È²…
-2y¤cR轚‘Ȫñí1P̧MRÌ¡ž·‹ ßþ‘O
-[D»¡ÏŽ6ßcغxÆ3ä-“-_¦ÛqÒü¸Z~;oä9]ÐÿÙJcì,Ÿc+Š:ËçØJ4ž†Îò9¶ÆÐY>ÇV¢0t–ϱ•úx8ËçØJ47†Îò9¶C§‘³|Ž­Ä²ÄÈY>ÇV¢0¿ñ³´•¸ÓŒœåsl%Cgù[‰•©‘³|Ž­D mè,Ÿc+1­9ËçØÊGÆñ|Ómå±µB„‚‰K$¢šn®¢z¸µVD]]µ>
-‰ý]ËÆËY0.
-j­ÚÅÆǵž¢MoÏ!k&W
-º’Xx½V½w*Œ/Á-:1÷&„¹q»ñÉ"3•˜)ÓÑJ¿Zn0ûö?ìvcZØPžøcz`¶Ì.Ú8zj Õ„hͱ²W ­@›$µž]”þ±åE½ïD½lÖE5÷mZùãÿßR7˜ü°JßšN~|ècƒÉ-K©0„¡¸F3/|£1ö®žTÙ¾DRF;ÝÝ;Rbn‹ã8ø½Ö¶®!ìæ´ãNOÙ«´êI5×>Tª”lQ2>Ü‘HreAš™N““ïä©¿bŽM² ™&3`WiÓZxmG,~59p%]uzåYKãÄgr®€ØÕ2$EìL¨h@?îÈ)FÝÑá!:@Ïñ/» ¬rEûg“ÙN¦+Ô£<ºûùCÑñ>ëj8ttCPNÇLO‘ËÏÚd [˜qaW‡9OÖš ‡6¦Ðé¤,Ó¶0(P8˶%(ýu¡5óŒSsŒ¦ße5k’«¬Òt‘;ÔÅÖÈÖ¼<çyy—ùÞ'ç GÁëýüŠ›õ
-Ne;=à¶æd/OY“=ÁwÐ0²µäÒHTlM´«:óÂÄ!€Ø³žl¸1ˆ~ AnFΤ€fTf«³âUµ>`jJ´* ®Q…¼m´'Ûc2ïÃ*NJ,¨Šs'|›‰žYCÖ·Ÿ'ˆAÐ ,žïÕïa™ûdE(•c/êýåï‹/ æCuTäÍ7åMA1FH&ñYêHn{Éÿ  ¤Óæ S\äPQ
-Ìî0|Áì²
-[«Ùrx /€Nä*\Ä&™âªo§ÕVLô”JÚ»2c]´ÇÛøÔd›‹ÃfâYÿZ, `Vý*A§ðëL½b3£?,1SøÕÔ›x½ ¿yýZ
-PlÄŠ"a©Ÿ»žÄ¶
-ø.9á»ùqZ½âÃœH‰‹”æa ã§$n@ S±Òû´$}tÖ 9šÄŠ.’‹‘ƒ¬ƒã}Ø›”Ã0P‹³inÚl)/·¾EÍ%Êç)"¾‰wÿY€)¼ë@ßœy=ÅuM˜¬‹îë~ i¡x5Éy¾G Ïܶ„i}cA²·… Õ)×MU[U^/mãNÔ΃º.”{u=¡Àÿ^7¸[×´SØ=¨«~®+†Îï¥õ$âËcZ™ý˘ Þ÷/«ña©pÌ)ëßm²ëœÐxêi²Úã´Ú»ààáuë•xœÓâ µÀ¯Ò:æD—÷¿Êé6?Më9¥2ïkcøND¦ß¡@·wÜ÷·#
-‘ÚIü`
-Žà¹ž2…§Öh7}u§¡ŸB077|l‡­5þck¡M»—MqѾ×_[Öµ{}l£ž‘ïõ¾Ã›M¯$ðèÈo´o³ýh߉q²úiŒó}ÂÜêa¾Œ.L×öÅLÝ\ÍmÄ‚Ày{XÔ`ÅGûâAÄb …^H 
-x³­ÙjË´ç¨^aŽé»?ºÈû?tèLoijàW™xö³/[|¶.«Ô:q@Æu?¨û¼Trý‰¿AÊ3˜Âº¥˜
-ãÝŽ`—ë¼ê[ô |g23s »€0¼úíÕµ¤:¶CßoÕüƒÉÑÆ'B·3±OCC“ih‚ÁM°»fÎË|ûh›Øgέº/ª\¶¼-ioIKKŸ
-¦iT›½N~ÈBÚ±Sz§W†õ½ LMµj<^¡'åEš¤>B ×cÁPeïSrNÔ Ö¢pJó´>Ÿ‡’ÈÙPêšK.D”¤=ñ4éZ\ØBÏŠ%VrkóÐlБm›¨gÖK-ü0ZLñ• ÃK6¢)õÎí†7¦“W H4š[‹h‚ý”òŽHù{ESd¦ÀŽprµÄM¼+$¤zKÙîc8ÒöNÒ[—U6‡\DiÊaNɺ©¡·§”fâÃWØÈ4+óã…‹´ôïóÒWÓ*‹b
-†ÆhH¨~ÝÐéDòá8èÐd#1JæëüH­xœUQ¦ÝýÍ×%ûÁý¢q(û‘ƒ° ›ÒÑ3býÉ‚‚F¼®5?—¹5Ð_ÁFøªVž¢FA/Žï°‡È­?âQv ]¹çʯÞºhá4ÏA>/QfKÔ »0NÆêJ³_"¯7!†o»–1*×—ò«ªôµZ%й¿@±9¿[‘U¿Î‹q< ½þ.Ëp_«lS?
--±À§ _ОºöÞºRÎùHèóÍAô¡P[Z6ÚºZE¹´ÛÊv$æ®Ýà,—"¥Ñ—>këìC¥}O­;¹™ÜVßMe+„„2QÖ¥üîI=£€…¼5úÊ–T®»©,ækø¥gp™((ªôµL0ÁS³z%AÒxŠ¬vª*/]¶aÄk%‘¬²‘ÈË:>HË "3pTª´ä:äZÚ2ùThzÛ8Ÿ/z+f󻶲¡z{?G(äascds¥[R•ˆä—¹Èþüøµ©7r–ªºh,xBM$o¿4P*Ž¬žüèeyÕg6ûg)G&
-@o¥jý£‘Œ',©Ú…>Ú]Ò*
- ¢1åÖ±SBmŠD±IÆŽžž²Và~#ºCMr
-Mr“Pv©hÿ¬­öì´`½Ó*_‡2­áÃP)W^½˜ cUÕS'=ª®GLZ&Ÿ<Þg[®ãùtPÚÎS,BöÀ£ö6¯Ï¢IhSp­à9-œ±z.ò0š±Ò¹Ô“_Ør»NêSΙKsµO)öIAK"·Ë¨âÂ`ü5褿Ðñ/@t» º¹òðáBŸE3Ôò eÛû<‰Vz} ZâÇ$â×VŽÚ&]*vMUòǨÐÆÔŸ+¹ÝiŸôÁÒ^ê!f‹c¿,Ô.Ç·xÉ€)JýÑÕ÷ˆÅeïŸM­Z°I’—À“¾2⦀ú¶œz3¥q’w¬·Æ|$r¥ÄÀ™k „Ò”mpoð….7AÍB½¸©§ÛfæÁ1Ú“Öys{8d O=¯]†¤DùÌ:Ë*´å¡©©§¾Møé ,íUËj»>1CuóSE½-Ò‹5”–úÆEPý‚qdhév̇NSn5ZZ£øüü³J÷aòß
-w_ ûËb/ØpLb‹?àtUšg ’8ŒEB³¶gXdˆîÂúƒã³7áíóß
-?7ÿ[8.gáùÇ΀àY’F;ƒ=sãß4MŸ7Íe¯;ƒ}
-)ò‡eiž xGÎÓ$AgaõM†<ÊœÈ2w- )”eÀœ(2–
-endstream endobj 177 0 obj <</Filter[/FlateDecode]/Length 8499>>stream
-H‰ÌW]o\·} ÿÀ2PÓüþhž$(lÀ®QE!(’ì:XI… #õ¿ïÉË{÷ÊÒn‚"Q¼¸{–3Ι™kœTÆ;aev*áL”:¦(’T9†0oŽ>½?>zqþúôþá/Ÿ/>ßÝ^Ü&ì;ú8>Êâä¥øðã£/xŽ2…wYæ’¸)˜NPÆd‘­LQ|·Òz+V*cûwl£Œ>¦m
-à!+œPåïÃéñ‘?-~Á·_C’.ËûSÝ0cVå CLïŽL–:ÇùR“$îbg©?íÒü€§_Ö¯Ç6J“i —ÎÒ6 ² * Ú!‡LÓ^88µn¹â ”„Ð\…7ÒDç& ~|Ñ=aAI•ž<O@Ý­a-È͈i ¥,²B›8‘³Cö›VélVÈzÂ:%Õó’¢=k™¢«Ðþ¯ ¡«©–
-r'Î=¤kaà!¤B:´tqˆ
-Ð70— +ðìŒôê ¨T„P—™YdCJ3o§Hºíšr_GtàˆA7sgƒÔÚ¦ŠÙluÁŒeiµHP5}ö±ìr5å{*óf¶°¨T,X´|°R€ý\Ø+gÿ&)¼¿½½¸¹¾Ÿî/®>_ß>m^‚_­Bò¼R¤%T1hä?Ý-DH‹™=î9 ƒr4h]åÅÄ Î>ajd †–¾Â—˜"‡´,
- Ú€Œ<») €˜ÎË×# ^ÿíîáíõåÝý"ÿý^‚Bò+½~{}±ýñâáþóÉDœ¼9ýþ¯õØÿxwÿ½d߉“Ó«»Ÿ¯ÏO¿ÏçˆèÝÃ×íõùF[ÆÉ zć«]†Í! snó'±ÈÄ„–ÿZœþ‡ê“–
-Ô£üÇjŒAÒá¸×^•ÇM}Œå±/Z|å…ŸP+Yivo”*›ú.+¥êt÷ûó6ø2ü¯*#^PÎô|‹v†ºˆˆs)3Ð)L):.„ZFˆmk
-rI†4‹äaÙ–ÁH¥x°õ2·eÉ;?"†Ã¨Þ*ˆÚb1l U(ƒÿ =-¨HñÖ®à–Áz®nÛÏŽnò5"‘øœQ”i*ôìm
-ži‹Ò"¶ bØ©ûë! (rlÝ…åUâøé ÅŽO­Ä +Ù„eË ÑŠAŠÅ€@üÆ'1Riî¡Õ0çŨ[h5JÃÔ`‘G%w8“¢Ý5Úøôø5R¡¯´1I
-y*ÅÞí§\8lª¡E”§X·ÕHo7N)Wœ‚­ÅÊsOÏô¾ê,×5Ç$0¼ŸšZýðV8 Ž ã`G¥/³5´º.ÏçÐBë= ïVH –*¸öb8S-õ•5>}i J7Ö
-G½yL„·3"¥]®¥îS³ q¤bäÙeM3x?E’éŠ&>H•lº£Ë¼Ÿ2ÉtE› ¤Î‘°AŸ x…’åŠF>H¥0]Ñ)£)•cÙÑ*é•éÚÑ+Ç(v-½Ÿ3¹ì«ÛçN.£¨ü µ!ë ¼ÙIï’Œ›…“ux>_€ç ´®ÓHh¾q¡u*Âè’ÛY=tFn‡©hç8OÌ.ûÓúÇš]Œ5˜ÑRUZƨ~³
-†±^gõ¬\˜¼÷S±0¥V= BœvzV,ŒÍR¬W
-‚Œ7yªRëÄd6•‰ÁÿT$†0j‰B­%¢ž(ÌJŸÝÆé=¯’Ƶú0^ëà iõa÷BŸÙÑÝoéè¸~e%hòÙ?×÷~“Áoðÿä±*Œ¼4FÓY;=Xdº"†’™îˆ„ÁCdB–+Baø ©éŠX˜Äƒä²vÑ{´Óg‹æ™ít–:y%ëfxT&¥E'¤»p&ØE'VpFËÔ w#y^'܃‘e'ü}$þ¼Žº¿ßµæ{`ÏÕFÆTFz }C7 úTø†ô2.oT¬©v™ªMR{éR:•Êe$0$e
-h”‡ÒFÄëÄÌ0êØôœŠ¼P£tæ6 P¥\…Sê‰FŒQÏÃ`Wœa莦¾ iWCÃÜSðûPQ: 戥TCò¦0pcbŸ‡ñ‘¨@Å5Αè›Ç¦<
-’²Óé· ZŽ€iÍ
-ÛÅW‚ú¼›îeË êP®oBê Ov5æ½lÃ<0—³#`ÕßÑL§À³@?9uœ„md‚¨—¤L‡j$ŽsÝ ëuÖ[Á”žê86]^X“Ib¸à©yP ‹·–1cl-¯z =õF„3tårHÓé»´Hæq4,l_®éó‰ê±ÁU®œÉõMÔÛVϱm²EQQÚ€$åš‹ãg[DŠþŠÆØ`”MÃ*è¶w¤Qp—‹‘:‡´t\ `r
-d¹{¸¥gšHLÎË0 Z½Y†¼X‹P]MÇîw‡Œß>÷­Ç¥ÕÂk|¦Öý_ `7 ÐÚr<8Ï…ÁÓ2BT[Sº|Ú¢
-tœJ
-ÄßƘVZ?Ƥi´•áÑ´8˜( „®µ÷>gï}î¹3ç^®3œ¥Î|³×Úß^{½¶‹®«œ sO˜Ïe,¦ÿ›  %>³°!C‘çêƒ0Æà#&4ÉÀ:
-Ö°[«ûgÅB>ž‘¼B±øD*DÕ{Dx²F!c¨}5Že5 †¡®®„·…YI𴃄š†±¦AA‡ þµ ÈIT¬}@$.³4DYK'`Mƒú\V79; !>®„ic®‹\¸™Š<P=> |ò¢¨ˆ‰è8TYƒŠ‹°#Í [+‰Í¾8—"m8ÔÜ Ë+„H,}È? R[ƒã3õ
-CmMÂLM4-˜XF*㊣Y+Sjz¸+‰Sš¡¦‰¨
-~GRJ[vI¨-;êƒ
-ê•;
-KkŽ*+’Ŷâ8Hl_mZÍkß)7–FRl,դؘ^±Ñgç¡Wj¬‹’JcݘTI*Mý… Â[ ˜^LJÁM2fEm77ˆÜ‚ýöÌ,¹Ù“›ÉOÕíÞ-çªæd‘†[Ê#T­Ë$ ¶’K¨™“Mn)ŸP5'£´[Ê©¼‹n¢{άvvo/¾â¼Ðt/‹°(Ê4^¼(Áži¼vµ×x=ßÙÆ[ϤXãmÂmÙÆÛžbQ¬7o7¯×ÿ”-ž²á0Ro‘*E¨ ŒÔ¥@ÇpÈ¡P=HWbZ…j™q™Pªf`¦@F$䬋HÆEÅS iik0“E*Q¡ÚÑHwe
-uß,3ö„8ÖD ¦P'`-˜”²oºˆ:EìI6%ìlz.«›œÝÚO'`ëü6'ëîê¬ë='`]W9‘éž0žË€µ1ÂôÅ?æQü !Ãèå<ŒÑË¡àqΆ2% B`Ä
-àCÄB5A †Bƒp**â™ÀD½šg³ª®ùgÈZ:L9Š <o`L„@'‚‰€RP9Š1lI4Äq
-–qʃÎ&êÕ<›
-ÇE¡Z/à?›¯V;?=úÒèú
-¥‚ˆþ¾íûnÞɲ }r›Ðh É9ãSœÛ¼Pš™Ø<RjDl¾¡Üž¬øÄ曋•’Uq)Y5%·!¥%«f¤dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\n&2ßD<¹ YÝtd¾¹X)Y—›¾Ì7#·!«›y2ߤòYÍ/±F”æ‘ØÌ”æžX>sÉ­Y>?Ïvq˜G¹Å[èh$ wvv.ÌøCgV Vwuu÷ô6žžî®…®NGgWÏ¢¾»ú–åÉÀÒþ%‹{»A'UXؽhÉÀ=÷¯|pphhh•'
-¨åq;}ŒÏO{Æx:¥ÝNpwYšáNÎëóÑ^·¿Ðá|rŸ¢2Œ ëd¾@Iƒ¢Ûéõ”‹Œ; wSê—¦TM½l©ZIô€²ºTÞËËå•ESòEXL™–âU¦^,_ØR±G®(6B1’Ð]vzð¢Ô¶ ®Ðx¦79”I¦Åøø:µSð
-ïášbŽTªÄsðê÷“|ñ$« '¨#e"œµ<žâ®¤•›+ŠðšÅþƒÈ“ Ò«<9>éíÆHï7é z.9–Êí3‰KI±ø>…A·WIâuù¥ÈÐàRÒ>7CæÁW6
-àTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTè<,rÔAJ<,㨳”À©ÐyþS='Á>ÂQ'‚<šêȃUŒt´Á騂=1Ò3Άžçò)c-O9÷ªC8¬³N§«®8ñˆ ôÖë ÆšC0ôzàRôFQORTC(Š¬'LF}™¥ªÚ`ª£[,­mV«µ]ÚZ--TÉP]¥Œ`¨57Y::.–ã8
- °.Gg‡¥É\k(Ž¢Ó›ÌÍív®»'‰F4D£‘pO7goo6›ô:yc]S»#Ž #£)QL«ÅÔèˆ íMuÆ Uze±û…ôäÔÌìÜU s³3S“i¡?h·P&½ì ;¸°01=¿°¸´œÕ°¼´¸0?=!„¹ŽF¢àÐê[:»céékÙ•Õµõ ëk«+ÙkÓéXwgK½AšˆÎHZ=Âä|öúæÖöÎM ;Û[›×³ó“BÃBuÒÄk¨VWxdjaeóÆî^.wKE.··{cseaj$ìj¥jàÔ«ªk¨662:³¸ºµ{{?Ÿ¿£"Ÿß¿½»µº83aÛ¨šê‚£ÁÊES³KkÛ{ûwîi8¸»¿·½¶4›ŠrÖ†r‡8·¼¾“ËÜ áþA>·³¾<'jâÕìÆÍ\þÞíOîÁ½|îæFöª8Pîh÷ ¤¡ãÖJŽ;· #=àiÇìÀìÀìÀìÀìÀìÀìÀìÀŽÿw‡•¡#—¯äÈç Cà¬åŽ¨8·¼¾“ËÜ áþA>·³¾<'F5ŽÔìÒÚöÞþ݃{îîïm¯-ͦÊTY\ÝÚ½½ŸÏßQ‘ÏïßÞÝZ]œ°mTÁ¡«¡Z]á‘©…•Í»{¹Ü-¹ÜÞîÍ•…©‘°«•ªÑÇ1‘´8z„ÉùìõÍ­í›v¶·6¯gç'…‡…4êŽA‡¡¾¥³;–ž¾–]Y][ßа¾¶º’½6Žuw¶Ô$G•žhìàÂÂÄôüÂâÒrVÃòÒâÂüô„æ: }UÁa¢,ö`¿žœš™»ªanvfj2-ôíÊ$;tƺ¦vG0FFS¢˜V!Š©Ñ!:Ú›êŒÒÄÁDô&ss»ëî G¢Ñ Ñh$ÜÓÍÙÛ›Í&½4 8ˆ¡ÖÜdéèt¸XŽã<*€Àº–&s­AÞDƒ©Žjl±´¶Y­Öv@hkµ´4Ru&CuÑ
-¸tÕ'Àéc•¨:„ŠÑ±ÙΊýñLœ$Ã$a õñP^‹_Î$ÆI"J$ÁС·HÂM÷ÂÃ
-ð²E¤{uÀ¯Ó>&Ô6ñBÆ*›C*'I¬äß² ÑLQý3Í%’3Ômàü`
-endstream endobj 178 0 obj <</Filter[/FlateDecode]/Length 15049>>stream
-H‰ì—}lUÀ÷§©6Ì%,_¶4-l»;ß-¨]»v]:0ÛŠe)w]e]·µÛbd ˆ3þá2•1,3Gâ㶠„„@Œòp¢ã5? K`‰Æ@âóœ¯÷¼·wYœÑ¸÷¶ïÇï¾ç¼ÏyÎóÙ1ÖÓÞÖ1ÖÞF‹®ÞéÓ7#›ÚÛöÄ?Rôî‚cMYaXgN ž•TÂ…4\Qü¡ü©ã0Z÷ÙS+QÓ„«BIQ£Tðb‡‡ÂP[B$LZî#„9B“ŽpMhÑ%¯)JD¡«IÍx1ì!A¢U€
-ïTxÁˆ°Šã~\‚hQÎb)‹ì} 1#Ö á$(Í@^†$?0m¹-Ê51ÚzâU
-¡dXKóÇdMÂ\ŽH-XNhÍxcŸè¡Ò5%e#ƒB7Tíî™U~vcàéDp.MjBkZBœ ^ÆX‘Àž£6Î*s"k–éó¤5"•Š³Hjœ
-if) RÔ+(Snwuƒ­Rµ•
-)&ì µà,R·Hδ[ŸeQ/ A¹WƒáIõœ8D¹_´„$`†£ö!Çø$RL,% ¹¬Ï v×@"ʦ‚4B¬ßZx£q„j,,ʆ愩.®‚‚ÖHþÃq¹ív\˜à¨—ÈÁH´N;çõ'ñWëmÝëØåÓª“ðÌI$X 1ùcªt7Êœ›¨¯tUé¿ÉñólRB
-Ê`¢„ÔX6•+$Ä$¨XCô®@>Å|Øóóƒ „@˜åÖD“Àç0ï*Äú Äx¯¥Ü`«vÝw cÇä´¡½mViPŸmmoSE—/û€Ùxë¿~<܆ÉLâ0a)ÖpwAs)‹À›bÁWI\­‚¯Uð}¨
-¾XÕ]òÂ[å]«¼k•w­ò®U޵ʻÿgy×1¶¢wf®r|nrçt}fÑíØÚúìv9r ÷àÁ•}xÚ†§ŽÞ!96095ÑîVNl›œ^WŸ›˜AoÄ6ˆ—£p…¯‡¥H( z‹Æ¨éusˆ?îîË?‹¿øçýŸIO“BÀ—8i:œ(ýõ¹zw!9ooj[pÅŸ«®n6øz²bÑ|Ú9¸~°«vôŽÍî· tÙ{¿yô»÷¯¯ÒåcýôéÓ?|èÎA»ìÚH—ÞùàϽöû³/žüÎ}Û7ÚküøòM~ðÜïþzáí?¾|êØ¡Ý·u:\ ì8ü“WÞºø¯¾óæ‹'ÞûùšÃ‹×ì>òÔ«€ÿñι~|ôÀ(qøš›ïzàøóçþ~áí?¼ô³Çͬ_êßx]Ïø¡ÏŸ=wö…'˜ºã³‹£(+¶:~úÙ3utuY²0 N6ß÷íï½Cãâoº}Ç—öMôÌÓÔ{ë¦5ËækpÁ§8½® ^°ð“k†¯øƒv²jz+Z‰³ôÕÉ–f<€ç*©‚‡—â±èç¹±X†×´X±rçΩ¢kxrzûÄÖF:4ýʼn™¹ÄIä}S“»vMNokäý“³õ-SéùxÕC¿Œ˜úVàèlûÑË×ÀÝ=p·Üam1º™[ÛÁ¹Öý' ÌN‚w‘0uÃð=ÍÚBe…Á&PqˆÔpbTB}€UTäøCùïª^M“ë®òÞÐ@3FEÞáƲ¬>/I–JˆeñQ6‡¾/
- Žpæ‹ FüŠ
-ªTqè&TÃN¸íQ {6\©‹‰ó—N™Á’Ý$qó&©„Á^«0¶bIG©]+=„W<ž’ÕÇŒÖ"k„]',ô‘RÅ`¤cÕŽ<ž[m}kª­Ë4¡]
-§'V¤ŒAYhw!Ð{íÇ.C=±lTùÁcjF|éóããÂ`Í‘ÃHá ¥ÆCeHf(šÛ{ˆ?†§EB¬ƒ–rã¬f˜I„0¡ÂV b0Y6;éOcÄÞÀ½ŽKsm´ê¾f¦~ÙžÐVË»¼¶Ó³(u`½Üñ‚àvAnIE¬[e]«¬û–u±v»ä…ÿ¶Š¸V×*âZE\«ˆkqÿ“"®clEïÌ\ÿäøÜäÎéúÌþ¢Û±µõÙíþrä<îÁƒ+îð´ O½Crl`rj¢;Ý­œØ69½®>;71ƒ Þl/Gá
-_V¥%,E¢ŒPaƒ7`à] ÜÝ—ñÏû£IO“BÀ—8i:œ(ýõ¹zw!)°‘¡¶WðùÈG›Ñk»:ͧ«Ö®\2ÚúFºþ+GŽÜÂÒýÂ%ìÓkÆ:~êÔ‰oíètñªÍ3<òÔ¯~ûÆK§¾·C§§ËGö~â™×ÿ|áÂ[¯Ÿytß­78Êêyõü{ï¿ÿÞŸ~yâëã=Ÿ@Jž~åüÅ>¸xþ×O~câ3Nîå›ö ¿ùË»ïþígûòú¥ ‘ÞÐ7ºûkGþò¹7_{æñƒ£KýÛ®ZLoºëОþÅÉGï]^YÅí~øÁ{;«k럛ÞHWܵús}pÁ¢Zíúùšl»zá|ø_|Ð VMoEsp&ýoö«&DÏ«
-w)‘`A\XÞ¶”LH3¹?ï{Rè|iÚ +‰m!ÄÉdˆÓNgÒtÒ´ ]ˆQQWJպЅ `]‚µh»±bAWR7…¶Ë<çÞsî9÷›)¥
-.$ùùæýž¹ï½çžß繯e, ’¯Çñ£ÔD“6°ø~ P%‡;ñÙG–¶·7‡…•­GÖ/ΣË[O¬_Ùi¸a|¶¹qùòÆÖ¥yüØÆã«6Ûú»à¨å| üÀafpúAöcU=…å|¾= ß®AÞŸΞ3ÃÅýPE§ÞK©/F–l§ìGNï\ ‡…¥¥»×Ö®>zj{g÷†ª8CVÌtu/Aò˜Pþý~8;ùA’z !ÿ‘òB›\tÇR…@b‘Ÿ †À8RD¡B„‰ ¨H…Iã´íY»ˆJâ 8fëúeѺ,‘ìrÔÇÀLÌm-q,4¼ID’w¢p4@GCEߨmHߨÓDß³¼ ¾ëYßÈ ÅÏóјí¢NßøˆCÜd`‘~`¡“GœÆó?%üyê‚>:Eûª¥Þ5Ƀ@p´„5óaÑg;уàä‘Û°èq>b=ˆL–h‹ô¬™ˆ°èApt(YôtH=êE=r„=b ‹±–DÜIT\^ÉqËq# ñ¶Ò=B&9½ CDÕVtBújË{U[æj##êî:–}È…W¿ô* ò?/ sYN)^!BáTôWDeæµÊQ¾sT0&ô˲Ÿ&¡¿Îc:&ßÑ_ŒaLÆwôc?N$o™þ«‹Ö›ÜÑßRôÑäŽþºXd6Iè/"Þ;a¿`C‰¶&5cD~Õ>D~kɹ#¿Õ°Âˆ…üÖ+ôÜ·Þµô#á¾Å+£q÷ç1÷·8ïJ‡Ù^9ò®Ü7÷#KÏ«ò{T
-— qhûd`H`å° ž+‰a?ã‘Ô®T¬FåCºÚ"†Ä, Gje„¼P㯗•‘8‘ø@ÊñšrHCbà/y‰A7´Ô„ê…3œÊðZzY-½U­):¯ØÀŧ=Ñj´Ùßê¸]±•»ö„…kºqÒË"nëõV\ï
-gPwx ÒJC*jc Hr&I°P)¡Áš9²g—H)8£n…²„s•|á2ۖшx•òò½Õ…‚JñèMjé£Jv^à‚%/äiÔu-×¾¼E@6GëæÕâ!í—c¦[tßÉg{µwâ©85ÁóÈ¿áÁM˜júþx„yD?ÿ³(¢0mhtädCCk¹ C‚ˆ©"ÖzÏN4‘rd´Ö²!*hb¬N$$HÅÝäE9x®\õD‘´+ -IM` 8W2„^‚"H9ôVáʤšš
-}×
-k¬Äs ba¨dC=¦_cÑ*$—-çÒü(+ ´Ö%µaarA)1ô*†Ðû&›õ2¤VÙ *Å3+`Ó ¿¬Ç! œL8lL…! ˆ¡°Ú‰é7&i„Fþ¬¾Ø@oB}‘¶Š˜ÈµÚꉀÀ=ZZGs¸ŒïmÛ„ÄcÊlÛ¥Q‹5Y?($.cƒ:bÉ4¾=Îè׬Nš<¸Æ¿8ùåU‹¢¨È*œìÄñå»L
-Âî—÷(JLSR}<ÛJŽ<~U‚
-"dìßÿÌ`†3÷ï ÃÂÁáÌCËü|µü3ØpÌp?¸¾E’b’[ rG iàýq0åoOÖ˜R‡ªú@“Ȫ!„h²ÔÐâ¶id·ÜštA0Q+¯ò£?Ç#!TÅ’^Vô”Þ‰x8£îW䙦Ê,âÚšÎk—Ô,¢ k4‹j”e¬,e+ÒŸÚM¨2‰§®“ë5™ë Âz@^$Ù@b‚\±ÂÝcT2d’*ÂzFƒUô¨ª*Òç¡vênÄ"‹š«óJ‰Áwí»ª54Q' I?Þ‡µ¡FrÆ}6õê¶E£IÒ±&[5_iê¶Å_/+)";q"iqÛRûJ œâ%/K«A7´Ô„êE ï‚P†×BÐËj±è­jMÑy¤cjñiO´mö·:nWÔl¥y¢iFYƺR¶bù©]Ñ„*‰ÚsH…¸r,IÜbK°P)¡Áš9²g—H)H­Ó{ú˜«+̱‚UˆW)/ß[](¨Þ¤˜>ª”aç.XòBžF]ׂpíË‹Ô"f<A¨-µæÕâ!í—c¦[tßÉ»±Â ‹þxœïøPÿöƒ‚y. Š"J… ³nÆÌòVS~¸¹‰”EŽË ìI©AXÙÈ‹$€¨r¡D¼§«&§P¿D²¬³Š\gUÓy‚”÷ª^¤0Ökk)Û¼Óô';°IT° ¢ØTj[VY‹Þ©
-­dYé€íä‘{U‘C˜­>Õ¡Z ÿf¿Úb¬¼ªð<“΃IË%üÜ/µ‡ÿÿ÷kê0S˜iÐ6(:ÁÃÌ™8Ì03‘Ø›@iPR[ÓÆ[}­¶IK|mÚ÷Æ'S›X_äÑú }°Ñq­}]ÿ™À1a€3û|ì½öZk{ío•]¯±GBݳýæz´d*´raCÿv¹¦¦"ö†1€Ø?Æ é{œ$sèFӴб&S"å+æ^†<ž’½@kòt” §–yRø ³•ÉÓÇ7]NYGŽQÄÑ0-ôd­xH]q-r?!á~¤…þùÅ5v²1Gñ^Æ<Æ»K_ÉÔ†S¡ÓÜÉ%Sá€éTÀâ]–"pÏ1ë·β
-Ò™>”ñäs¥Ó,“%Ïõ°Ÿ¿8îRÐ\Ä»“j”L)ëÖè){z—(²kõáÅáL½WêB‹Z†J/‡aiŠÀ%×õÑæ"6‡Ñ`èãžé Io›Ñ4-4¬ÉRèk©kÀ¯‚á“ú¯a¡cS¤=D1çZ¨„N‹‚®!K¦BÓw ½ç`QúW7vqfè½o®i+ZÏ´Ð5¨v‡}èd‡ƒÚ¬4¼1‘€t—(FJ”?•4+\²Î7lXax_Èø9ÊPÏ"³¢½È¾¸gzHˆg±MÓBÚL…¾–ºOœRJǤٗÎ3/9ImBBúÓ:JA”h)«çg†“÷[@Þ8! ,¨DG"ŠD®%0P2™
-´;v[ßBôôâÅ$¥›™n{wQ诫^~ì]ó,Ï÷.“Ù¶íÙ¡¯[lssgßÌÜ@§5×™žYÈvYlßèì„ú~žÆ<;à~Å_›û†DsOg²½+~ÛÝ>Ú™zltv®=ƒìbn/G`„Ûã#’{Ö)Ñ@m{2“Áý
-¿à=
-™ZBT/V:熴“Øib—jûP(æ©ÁŒ =æ+KÐ¥2K汪Úr½ˆ5f@3–:hLæ f¤ k%JKIÌ' HÆ"Ü®€!ªh>E¼H]Ö\%‡“Ù§ÓÈá‡!)–¸?x •8£€”ø
-™‚ˆPts'ô5’"Õ@بAÚ6É~lœh ².P¬ÁZF׉ʒÚOH•좇C\Ñ~ŒòƒÕñ#<§Q•§ÿ$ª<™I0îÆYE6ƒøQ M­ai
-N’éÒL'ƒÔ€°’ý¨²RR‰Kég)ÓpJà•˜¤ ×’ØOÉti¦âŠöSìÝyë¯KæM…KÖUÆŠ¬ïä-U²ÅT?±ˆê‘é²›é~ŠEZ%'Ó•^’éuDoÕ}r1ÑË,™¯ÝϱH+¤Ÿp2¹t(k
-D«.k“ö0Aþ
-fr›ÍX†yEK›²ôÏ0¥Áž@õ}KîžÇm<O'ýñ*áoú¶ö&@`‚‚¾(–Ðþq†ýng¹Ï›KþR¨JþÞµ›·n^s×êÁá½j-·>Úl7‡¶âpç¡é3S_kàYxvþ[%eû™çŸn «Ÿ;ç¿Îzâ¹\èhšÉç_¼xœ ­7_|ÎMÐÇ/\>ÌÕÑï^zv\âP´ž¼ðQŽÃòð™'O8|ààÄÌÄãV†oÙ»‡«åÀà€°þÞ³zã–kzoQõî¿£U¯/Û·Z7n¬•‹º·¥QBôú¨¸Ñ ÌŽ»3•%}Õ˜–ðS˜ˆjd ¸bdjÉÛÝ733êÇó¬ïôÜtæØÐùv{{¶óñ¹8¯t,ãÓcí&αÙöÌ™öxóÑöBÓÍšínQ¶õMMOe‚ ú
-çþþl0k”F’>Áü²¡¸Oœ“Ѐ”¦TfG„j–
-û`?‰ÿ˜PÒ8¤ÔÓÆA7T.
-ºÖ4˜Î9µšç
-Ô6L9?ì@Â1]0‘!Pð¶dP­¹áUD
-…ÙÎ@³ µõÁúŠEr§­íi'÷TÆè,…ˆÖBe)A/¤€Dš‚Nuá
-msÙ09ˆ§~·Ðƒ ódáRAA^ÛµR+ X!‰
-0Ît5i ù«T5i%ž²ÐY:JÏ*‹ûë¨í³k ™Ê¹Á{RŠ\ËÊ tˆ†»’Zý]½6À†¼ð×F‚YGW@GkŠT¹’×q%‚dØ®åE)íñê.²x¤J;¼Wd-/ dá…¤@•+¬Ž+,pEh¼MÑ< eW<RåŠ} .¬¸6†ÜÐÕ*BÙ’×±%lQ&‹g_å"ªHBx-‹ê4®ÝwéÊ~‚’ Nm¹3à^Ž1Beb‡arf,&Y KÔ/† |/r[îtÞh‡ð¼d¡všÂ¸ÚiT¡Bí\[A«¬‚(È[F`5s”Š[ ¥ræÎ-z 6¶¤zg9 X–"@JrãBG3ÉBAÅô Ó™O³K`â~÷ [{ð¨\]¹>UÐoÄTA@[à™tH`DXC1††Ã÷Ìö•@\(ŸÁJeã3ÀaBiçsY@²„W+GaJŒ‹Z@Þ´¹6˜0H¯{¥ ù9^…„¸·¬ß­óœ­ç™X‚W¤2ój‹ØDõS×Mÿa¿zc£8®8#RWQuÁ²l0>ÏÌþ›±CZÿÇ–D8€SÇrûdÌÙØç€U5$iMP©ú!ˆ¶!DUš
-¤©´T5(%Š%ªR’(”Ð’mEèŸDH R«*‘úÞÌìÌìú
-UúéîN»³¿›Ý}óæ½÷û=ÙEPŸIðX$aGÁ¸`¹"D9#yœçÇh*ÿ1Œ Pźò1 Ù$áN’
-Ô¥; b;+FW^r6×7v$§Í‰º^"¦3RPÒ&“–‚†µn8Pß*}Ué«J_UúªÒW•¾þŸôU7ÚÜ6Sî,Ž•‹S¥ü̼×"±üìN5Ú€Ç9<HJÃÓžêÚzÃÑîâd¡Å\µ&Š¥MùÙra1x [‡a„¯Ç %¹˜ËlÁªz#Ô*ømÛo:ÿPÓÕ›ÉÄ àK¤-uÒÎ|9ßâ…¾¿bùPïòe·ü¹ãÎJ7ßCšW-Eë{{²`]ÛèìܘȠëÞóƒ#?~r06.ûÕËg~và‘±~e‚6>òô‰WßýÓÅ7Nýè‰[Ä]ürÓÖ}?}õ¿öá_ÞZ<vp÷õöºwúåÛW¯ÿçß½ÿÆ©#3'á5}»Ÿ~à}tùõ_Ù7L$|×½î?þÚå^ûðÏçýÂÁ™ÁFõÆ»[Çž|íâ勯¿thßäÃßX“˜Ò¼íàñ3¯œ}ñ;Ãm1œŒ<ñßyrsvñëÚõ­½…Ö%žª÷oí[¿ÔƒË¾æÓ»+ÀËj¾ú¥Jð-0NºJã%2Î7š0Ôq7d¢¥“ñè5@ê¬õÖã˜zÍíSS“^C±´³0žE{KfÊ' Þ1Yœž.–&²xgq6¿mÒÌo…WõŠQÌÊÁ ˆI©69ÞW;àj¤Ã€7<B¼ñ[›>Oþë§]D?:sû\òsoÈx
-©‚9TiJ]ÿƹ„ "¼Ê$0”Áqi‚(ò4…¹`0y+c\^Ç’!
- £ e7Âc¡½¶Á¿e¾îÌ
-
-T–`+„v[cM»”¬{ª€ðd7äÊ“æ«? ×Ú-ñ iጟÝN@PÙn§‡é‘T§X8×™ÚÄ+Õ&rò^­_“^ÖV'¤ªSèH_pô*έ1·.O!Çô³Hº<…•ÊS˜”§
-_[ž¨¾fQæV³pˆØ°0¸õ‰WªO<©OŒ†jãÔ–¸±ŸÎ·w´:½#Úˆô`U7gö=J™[D›#mdÖp³b§r[,G²Èm"ëcÝ^D™­ûe6­?š¶&y¾m},‡™È1æº]“uĦ@Ó›™þÍfOeÌ
-ÓÓÀƒÓ1òö0ÝXÒ ©E1c,Ý‚BÊû"ºYU‹¸Sr8vµ¡©4•` ÏŽôLp™mzb±‰rLÑ´ÀŠnÍ"êF B1£$öœGAÉTU²ˆR.Ψ*¨Ò6¹÷’G£d!B‚Ö™ÔÙ˜I¾„J2½èä*ˆC˜)UÊ–L¢\ù؆k6ª;*…úM›D‘V|ë2’ÏÐÓ ê[å©*OUyªÊSUžªòÔÂSu£Ím3åÎâX¹8UÊÏÌ{-ÈÏîTá xœÃƒä.<Mà©®­7í.NZÌU{a¢XÚ”Ÿ-fƒ·
-¢Ð3o_¹þÙgׯüþ¥ï¾.ínÚºžð‡¿}üñ?.½ò·k]Ý1¼û»G~óÖå÷ß=÷âÂp£zÛkè½½üùË¿=uôñá¦Ô*ZxöÙ§wôÔ§×Ö2V.m¡Ù7l|°£> .[•ËݳԓËï¬Y
-þ ˆ®Ò8†ƒ è&^µÑÚ™F»ÁäF<z #k½õ8¦^sûÔÔ¤×Ð_,í,ŒgÑÞÒc…™²ÁI‚wL§§‹¥‰,ÞYœÍo›4ó[áU½bÓ/Að€TF µ1ú1§æ1™ûàj\í¸ð†Gˆ7¾’hÓçIô†&?G
-­×<Xž ½†öö¶±±¹]›¦Êyœœ6„èŒ#ڊ̛撟«vCƨŒPŸDTòÒ^C„G,+ PCÙ„Bˆô'É 8f‚ʤo1@j)ª%wG›YБÌÁõÓ¸8ÖRkD‚Œ)Ë$;¤¦Å” ‰ÄBp‰&b‰€m’qÈ?¢¾âx®´Bª!äI
-0§BoÄÃZá£mÛo:ÿPÓÕ‘›ÉZ˜À#Ò–:ivk-^Hê]~+mßm·WBW6Ô­ZŠÖw ´×.AE~÷ä–\|êðá…mÌ\×Ô²ûúF_\<ùÌtwF×tÌìîô›ï]:¿øüüæz…6 í=tâÜ…®]»záìѽ÷¯–(Ë/;û_ö«.ƪ«
-Ï3 ±BJZ¬á€ —ýö 2w  J¥jÑ †;zaœa(CˆVˆDš¦IM µÖøbª­RÒ§R+øL4þµ¶>ˆ!1­JM+®µ×93M%Ô·¹39³ï7û¬½þ×·{íí÷Þ{û/W~ú­ÎÆÛ倾ô›kï¼ÿþ;×~uþ‘±ÍNïu ¯þõúõ7ÿð‹|õþµ·!º¼=täÔ“/þú?ýþòO­õ§}lß4°ïìO~~é…§¾6´®fÅçOŸ;÷̓÷Ü]·mCgz⋼iqïöûÚw7Áž¥­Ö'g{rÁâÛfƒ·ðÁ„Ø:1Šéàz{ÊW@s¶nÇ«ˆ4ÄaóZ|½P#áË‹õ}““ãEï`wâÐØh˜xhlj:á,âíñîáÃ݉M¼¿{tdÿxÚ¿Ž¨†±ü"‚ ¦f?ÖÔ ,æðí |;y¿³ÚËŠÑ…PD»o¦Ð{×Iœ³º’«‹õ÷OO†Eo_ß–NçØWvONàæº",T Z4N:)íѪ
-ïiJI¼âBàLÀÑÃti±F”zŽ…ãBz§‰÷Gf€²*« "Ât˜×¢DFÃuË2æ'šÆþŽm’Ãý”a›ÄY"”ë¹€Çñ3ÇT0ÑZxÂQ¢&ˆ(­MF:þE©mUß]¸. fb™ÎCL,VUY1T‚™–ÕŠ¨€æ‚ØW–:0 £ËÛ4:ÛRQF¤­;‚C³Úºé똢S¦·R€Ó*õGZ_z¦¥@eKSz¾§ªhÌ;In”ÓßXîg¯bFÖ7;á½ÂÐ.¨$c!xµãJmlÝ"d°A^ ´Î c`’ÚiϬUQÊé@Ëฎ-€`d)¼ÙÂpÍ‘ÏæÓT«,™gÇÑÑÀ¿rÜAùp
-«‹2GÓ1¥ÈF$øÁ'
-"Ðü[x«Â¼ Ã.!CECÅÀÂHc=ÂyÅ£Y’Dñ2úP1å1f}B@‚oPV~ Jˆ Ë£ò÷ wÅôq¾‡)] 3
-o_¶²1°Þl…µ¦ŒõÞÁ{/¯|0³âjH\5ð‹ú6éʇJâ:Ì*w {š/&h·Sû^°\þªÐtLi|F‹ÆˆHl†RUõmŒkNE1,Tž 
-UÖ]-ÙVŠ
- =VÆÜóƒÝp?}VR–¶6<’Ïç(ÝæÒ8K
-¹Ï …ã‹‚ú"ÕNîQ&»LÎÑÛðÑ_k…¶Ö
-}¤#ˆ=¦¬Jå^¤Bf?Ù
-“xt" V¦D‚™¨òÆ
-Vì]¸À½«‹=8¬Šëcî×Q7l:¬ØåH\dj¸ð?ó”mž²ÍS¶yÊ6OÙæ)Û<e›§ló”íÿGÙV ¯ß25ÝßíLw''F¦N¶säè!¿Üó|Ç£qøç
-÷þ矰·LàšýO\~ý­üýÍ?^úöþu\¾ëÄ÷_^ýÝ•‹OŸÜåuX²¹sê©ç.<ÿÌ3ç/<÷ÝSû7ßá¶nðë>~v¦3vò‘ÇûFw`¢Ëú÷M?2¤zzÔБ™©}[ g±¾whh —½;††ÕíNðbS¹Ì¼¬ÜÄ–%>þ‰ÅQÉEKýO"Lˆ­£˜.¥·§Œ4çë6|¸šHؼŸE/TÉêâÓ¸æÅú¾ÉÉñ¢w°;qhl´‰L<465pñöx÷ðáîÄ&Þß=:²<íßG TÃX€ÁrÖ˜å«ê–óøv¾‡¼ßY íeÅèB¨¢Ý7SêAzãêÖ¸¹ihdÐè 47îBiws«˜†žˆ5ÈÒg/ð:ÇB•2§¹ÐLJçÞç2 }’³*ƒˆhôÑÐJ3 ™ßÒöïyP™– M€0ú Ñ,;­k¡I‹ˆ8i@á•°DiÚOe4y× Ý4T~FL––À¨ð £YI|¶<j‘ö\^óÝbµãÕbð‘.&´ð?š‰T‚"Ž¶fbŠª)åíäЋ)R·Óƒ ;=ˆ×"ü¡^~ºLQCÍ\†š( âWY+é»QÈ0"?!üð`#?íJò“í4?ä\ùGlbêùŸ„©g1y(ãiJÖ¸´
-ŒÕ 6U))B<@êé‚'$³¦ÈòóÊN%-»ßfOC”L)(ï4Àn š‰ü„PO'z:ƒÑ®$?ÛÞô[{.g~(™™ k4¶´« #[¢2U½¸2ª–¾š•Ð¤à#Pó^kÞK`ê3Q|îEQ ÚÇ ®•nô1 B¬ ï /­¢òBë;‚µúŽ`2+ŠÏ–G-h›åµ[écÔÎÜÇ€7ëÐëe´S–¡ƒ‡>–ºlØéÁÜÇ¢üÔ‹¨¡f.CsuÉôMˆg¥•‘Fvx°‘LVyéÙn’r®Ü˜ÕÃò?IËbHƒÓ•1ôRµ^BåÐZOõrk^Ž`î1Q~îCÉ¡¤‡e×Óf[% ÷Ìð.ˆµLQù©ù9‚5?'0ÙågÛ›~kÏåÌ[ëa7Ãâx±åp½ß•š!„æ[t¸`nQ¬U1nT$hPU:—Cï—ÈX UJ«ªªà€J¸hâßØ ³—ãÿe¿lv¢(ܵ‰ïÀÆmãŒà€Ë¦iÓÄ0išÆ…iMnúþöþÌŒ?ÐNa ™£Æ{ðÎð1G°„ÞŽ=þPÚÁlRêÇnvsSfx>ÁW߆­4©¢ùiWŠæ?!€'83˜¤~ÍŸÓj×­õ}rvyZŠ`öNÂ뀆Á¬­QÚPÛ…1mE ƒ€Ëþ⫈ÒLJ¡Î­Íïáå…öBÀvøÏ?˜R꥚+½Î‹ LLï˜ Ä„%æ’I½Îàeš³YrîP&1玥ÒQÛÁð·J“Â;æ‚»‚s´à Î fsîÌß8ÇRn‚‘sKùhÖÖ,…ŽJˆ+cÚZä&ÎrÃS.((
-¾_£Χ}¾[éúa÷±/Ìí' CÛótòª„UÉðPÑ[«‘àT›ÏêÏÑs?ÓhßE­1<æ°Ëíïqû½]E©Jät²y™ƒ¼ê®±†IÕ3­;Xw¨]°ý#g×xŽýàÝ Ù'Þ ý㵂ô…×Ò/kÔ„¾ÑN
-„î8+ºkt„¾qªÝÝÝÝÝÝ5.ÂBKòMt­@è®2á  +ña+ýF8È?ðFAè²Ï/dC¼ã
-endstream endobj 179 0 obj <</Filter[/FlateDecode]/Length 5613>>stream
-H‰ì—}LSWǧPÚÞö¶¥-¥€À-Ø®å¥Ð7JyQÞ*¢DEHS+/JZP|¦”eÙÂ6<ËFÍMƒÑ %ã12õq$0§$è24ÆDÍÌþó9÷¶ååT)ƒ{>MÚ{ç{ßs¾ç¾ðò%à=·óréüÃí¹Ó¤ËöÜcò-í-«Ïwåí[]&coéÖ® yû}õv¬›Ç뼉Ò9Þà ÀÚ×hpM¡x9 P1!|…h€Â‹J¥ÑéN£R½€’Ð-.òÀ%4:ƒ‰²Øl€Íf¡LP¡Çb2»ˆJG˜,—Ç|ŸÇå°˜º¨ Q¼hÊæò}ýƒ1
- †Ê2ómlë¹<0tstl||lôæÐÀ垶ƣó3ä¡À"Õ¹ö`1(4” Q&e›­õg;/ ŒŒÞ™˜|ð`râÎèÈÀ¥Î³õVsv’RÀCÁÄfU`ZRMÚ®âšÓíç¯ Þ½?õèñãGS÷ïŽ];ß~º¦xWšF&6£ZïáEg ‚Ãb3rËŽ5uô^¿yçþÃ'O§§Ÿ>yxÿÎÍë½MÇÊr3bÂlº—cqÂ`:}~yÝ™®+ƒ£SO¦Ÿ=þlúÉÔÄèà•®3uåùz]&`#³*O/„ã+ŠŒÏ4ZN6w÷ M>zúìÏ/þ|öôÑäØp_wóI‹13>RäËAœK?«2+ë[z®ŽŒ?x<ýüÅ_½x>ýøÁøÈÕž–úJ£áݪ–æеÕpiå]KÙÅåÊîuíJqùªtéàÒÝƵ;›«wQ—îØ®=\|¹öÔsñ ëâÓÜÅ7ßR\|#zϵ·¯áßôæ+— XNÄâ-…iæ*3ŠänEq²^c=;Ͷª"+Šd¡H5Š(°äJ‰Æ¶ƒ/y4@¥À^s`ÿäšq è&>¹GPD­Š‘k0…Z¾Ëg›
-yŒ&Z©U*¹J ¤ªXЯVêð¿Ç`°2z¦ùh*bä1jÎ9X¡šw*GSãÐÚ›µSkoÆÊUj] 6{ªQ—(Duu3M\;cÒ>Ø>…™S9šj‡vÎ|¶Ev¡ˆ“Ê°Ü=ıØ•l­J+-¨*µT˜­G°8¼/ÿÂ׬Z!ŠÄ8b“ã„ĔˉûTˆÃœÂœaŽdAǬ¤âU>@ŸÕì8–&ë±äê* fߥÿ*’aQ9UÖÒŠXa“&Zö™’õ:Óöý¶"ë¡¢BSfÑ“}”MægŸœ ¯°T`±:e´}vÕøŒñm†o$5±gÄ®!¶dzéEqŽã”¢¥Î
-Ö Ë@‘|ÇVS`*µS(µ˜L;ÓàçÊ-Y|
-°²H…Z«‹OHLÜäFâuZµ"R¶ pY `s¾KÜ$…Æ`ó„A¡²(MÜæÔt}¦!+k»ÉÊ2dêÓS7Çi¢d¡AB›A£Ì· ò¦PÏ/X©ŽOÙš•³'ÏhÚg6ïwfó>“1oONÖÖ”xu¤$ØÇB¨ùü¼é(W,‰Ò&éwäš
-KË+­¶ªêêêCnª²Y+ËK M¹;ôIÚ(I°‹ÒçeŽ/%ÁŠå±)Ûvï+©<ôaíÉ>n8åF>þèd퇇*KöíÞ–+
-8 ó9‹I,%‹ï¡MÉÚ[d9R×ðéÍçZÛÚÿí6ÚÛZÏ5ñiCÝKÑÞ¬mD¨?ŸE,æLàžTÇ7X¦ÚlØ[l;~êóÖ¯:»¿ýîû .\t  Ð÷ß}ÛÝùUë秎ۊ÷6«dÁ¾ÕÓÃ98åù‡Êã¶î.´Õ~r®ã›‹—ûúøÁõeÆ^eàÇþ¾Ë¿é8÷I­­p÷Ö8y¨?¥ÏFŽŽ°}‚¤êäl“åxck×Å~þùÆ­[ÿŹ½ÌEnݺñóðO?\ìjm<n1e'«¥A>ld6rà.Eè2ö¨ihéìí¼ñËد¿Ý½woÂMÜ»w÷·_Ç~¹1ØßÛÙÒPs`O†.B$Ä#w¸÷!
-Éõ߸Íh©ýìë ýC·Ç'&ÿcjê¡Û˜šúã÷ɉñÛCý¾þ¬ÖbÜ–½ÑŸË¤Q÷"pñPh(oƒD•¼ãì—{P×ÀÇyl²IHBB ! " IH@D@+>‚`1<¤ D ÄgÅ¢¶Nµ•Q±^Ñëè@}Lõvt”ªs¯£Su¬ÓÚ‡Ú©Sø[‹´p-×ëé=»y½ê‘Ìì/3a÷ã|çû³g7gËíw>uñ«[Ýw{~íí½O½½¿öÜíî¼õÕÅS‡wm´—ÿ%-!B.BÁ³è±%› Pë3gW­úpï§g¯Þè¼Ósÿ·þQÆÀ@ÿo÷{îtÞ¸zöÓ½®ªš©W+xìa–JMb–yQãÖ¶ŸýcwO_ÿƒ?ÿMƒƒ<èïëéþñëÏO´mm\dÎJÔ(=-ßð·¸DmÊžW÷ÎöŸ]úö§_zû >üà%•>èïýå§o/}v`û;uó²MÑJ ¸É"§%“”Sl]·ãàé/¾ïºÛ7
-1:Äüö«ðÉù¥K×mo;vöÊõ›·»¨ÿ…ìº}óú•³ÇÚ¶¯[Zš?Wùí!vþ²°Øä좚U›[8{ùÚ77nQ¸Ù ··n|síòÙ‡Z7¯ª)ÊNŽ “ù“»qî="(£ Sf–-mjÞsèø™s¯\½FÍÆ͵u»võÊÅsgŽÚÓÜ´´læC”R"@˜;7â…B®ŠKÉ1WÙ×7·¶9ÞqƵ íMðùó®]ð™ŽãGÚ[›×Û«Ì9)q*9ñJá±  “ëª1¤ç—TÛ›6·ìÞàðªß(Ž>°wËæ&{uI~ºAèÏõx=#&جËUZSfAI•mõúMÍ-;wíÞCåÛٞݻv¶4oZ¿ÚVURiÒªä`«ÎôxÕuN¦T‰'gæ•ÕØV¬iÚðÕoºïmhZ³ÂVSV”Ÿ™ŒG*¥C¦Òù‰ðD2L›Òs ç-XXc]b«o°ÛíË(j¨·-±Ö,\0¯07Ý„«1™ˆ‡x¼B’—L&‡/
-UO0¤däÌ2Ï/]`±”Q†Å² t~±yVANFŠa‚:4HÌçSé¶$'“Áæ
-ÄAJU4nHNÍÈÊΑ——O!yy3r³³2R“ x´J$pÙ Ï©tL&¡ÉÊC#4Úx½1)ybÊ$JI™˜œdÔÇk5¡ò@Ÿ”ôœJç5g°9<a€LŽ…G¨51±ZíJÑjcc4êˆpL. ò8l†ß0I—& AùB±T¬Pb¡aaaáÊ…bJE°L*òQ„5‚¤ó¢û1Ù—'ŠÄ©4 £ ¢šT*‹„a3ý†_nOM“ÅæpQŸ/
-lÕÖ*,†¦N«X\VYš–m*Í/«¯´-«¬(Í­\YêhUålç-š[[1£)>Î1\;1Ä%¡Ž\o8¹âÈå<µº¶2Éyœ^YUmu-n0Y YŠ;—)ŽétF,OÀæcz†ƒË&ö­‘çÎFÎ?F,Xù‰dc°˜±8PUE–$î°$,>N‡À–üIãmžçéøzZyÅFl´U_­Û+÷==xO
-Ü`$©Ô{ Iêõ^HÒ[zÏ/ùšzWÏÁ˜6ô¶Úcƨ¡·¥†CÂ3æ ½­32´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<cËð5”üó ¼m4Úž' _+ÉõÆ„ák"ù ½1aèuÉÿ«7& ½(ùœzÞ’|!=ê%_BJO½Ñ–„w=ÏWëö
-UGUì¥m©·¢Ì¢z%ŒóàÅ3ž3“hòÀÇ qöìDGŠ¯¯Ÿ__2óéyDHñc0˜,›„Åb2DæÓòˆBD
-“ÅF8\”G‚r¹›E$úŒ˜Fòe0Ù—Ç÷ŠÅ’€
-©ˆÏa±y~@$)Â5¸qRFN~ásQ‘yNaAîÔTS|Œ*$PÄC˜~žÅˆR 6*”†¨bô)™3fÍ[PñVMmí¢êJKÉ켩“ Úˆ@!Êfx#J±8‰b|¬!5»°¤¢Ö¶|uãÚµo¯¨¯[øæìÜ4£V¥¸,bd)„'
-
-‹6¤æαÔÚ×lØ´eë¶m[›7¿Û¸¬®Ü<#=1&<XÌC<Š9JùK•ê„I¹s+–¬~wËG{öµ}üqûþ¿ílÞ¸fieÑôɺ(LêïY dQ‰‚Çk“²f—/iÜ´cï£ÇNvtœ<~ôà¾6¯µUÌ™–<a|°ŒÌ# ò%!j]Zþ›uooúkÛÑŽœ¿péÒ…óÿìø{û®—¤ë¢B$|RÑ=,&Ç?04Æ”õ?…§—·O[²a×á“ç.^¾|éü©Ã»7.ÞQ‘áa¥«$!ÈÍó##Ð[<ÂR*v¾qù ¬Û}ôÜÕ›wîÝ»{ëêùc{Ö/œØ˜çgg *- òB'¯ˆŒº‰SPriûŒÛœ»~ïÑÓçÏŸ=¾wãü‘+gv”¥;™¨ËŠðrÂuƒOTNÓÌ5,£ºwþú}§¯Ý{úòÍ»wo_=½íôþ óûª3ÃÝÌ5åDùàÁÒ ymK¨œúIK¶¹pûÉ«w?þôþÕ“Ûl]2©>'ÊÓR[(ºÄt¬¼bò›¦®ØyâÊýçï>}ýöíë§w/î_=±sÅ´æüXokEq$]À€WÔµñ‰+l±j÷©ë^}øòýçÏï_?¼ztýôžÕ3Z‹â|lô%àAÒÅ- ¡¤gë_Ü6kÍÞ37¿ùôíç¯_?¿}zóäæ™}kgµ'øÙê)Ip£ëÒ·õK(阽nÿ¹[Oß~þþë÷ï_ß?¿}zëÜþu³;JýlõÑt"YYßÎ?±´cP×md]·ÏX?§³4ÑßN_Í]’]sÖ8ûÙ»/?~ýùóëÇ—wÏnŸ?°~ngiH—$V]I¥sºî ëºC’®ßþü†êÚ@@WYçÜ Xu•ÑF×Á ¨º.Õ5ªkTר®§ À
-endstream endobj 180 0 obj <</Filter[/FlateDecode]/Length 9111>>stream
-H‰ìW{PTׯ^ Ëû©‚d/÷ž{îËq×RŠŽvUZ`Ôšhú°>ÒšêLŒI´1míÃG:£mª‰:¡N3hš«X1>ZGiê3¢ô;÷µ÷.`Bf2Îpavïýöû}¯s¾ßùn]û†ŽŸ¾p­ûî?~ôÅÝîkN?°cC{]yaÁ˜´¸È°áC‡| ®!C‡‡EÆ¥)(,¯D ¢Qƒ¨AÔ ê:vÊŠ:uì›Aµmر¿OTÛWDõ<~Ü£¡ö?ånÛ°P]fTדP©*jýö}G;»®Þºó çÑ£žwn]íê<¶û†67A¥ZP¡‘±©YSÊú׿¨ófÔùΣû^_ïw—M)ÈJ BÑSf׶þäµß½ûѹÏnÞ¾ÿ°§çáýÛ7¯œûè½½¯­k]X6…FÙbS2“Kk–­Ýö›Ãž½|ãó»>|pïó—Ïž<òÛmk[jJ'Ó™©±¶
- ŒKÖÌõ,]µvÓÖí;ßÚ½{×›;^yiÝó˼óJŸÂ¹TJIË@)!F'ŒÈš L-™ãnl{þÇ7mÞ²eóK/®]ÝÞT_=Û%æ™­¨¡4g±ÉécÂÔâʞƖå«V¯Y³ú¹­M‹jªJœžkv¥9‹°Ç§ddçóSfÌ~vþBÏ’ï66~¯Áë^PU6³P Çe¤ÆCV&Wª³0[t|Jú˜<V*œþtyåœêyóªçT>S2sªŒò³3R¢mafWª3ˆ`£2Çå³Â¤§\3f͘6u²ˆ9Yé) 1‘á!WÄÄn³Ç%¥¥gŽËs°/J’(`–ž0>+cDr|tdxèp‹+ÅÙ°ádTL|RÚ¨ÑYÙãsróòòrÇg¡ÒG$'ÄÚm*È‚Òaá‘ö˜øÄä´£Ò3FÎÈ52-%)>ÖÒ¤À
-#ÀôRÝ)Àá!Æ€ôÑpHýªBž€1€Á×—@ú@~5Ä7xegÏhöLwûÝv[õ,»-ÛYÌׂ¤ÂÝê÷¶Ømev[›ÝÆRÎ¥vC•ÃÍÀűÔnÔ¿j7€Xù«^i·aI Aà)–‘iY–©&‹L Y,c
-Kͳ‚
-—EE+&P¢’­2bÊHG¶Æ0\+0µÈn«²Ûd*'—ªž«Üg×8[üÓêý ¾fwËJj"‘M"¤øPvÝ&è€ìZ“U¤¯
-ˆæ9‘"è‰fxX+ı´,’E5Ä)
-ú#¬ÂÍ ›t°Õ¶xQ Š„‡Ê±ŒH,ðV/¼ bDbè «ìeQeÏqÈ4†D9Pâ—ËY_ßÖTá󻉲µ˜yJá”æ§bx C—³"‡ò-q¬hîN.±¯Âܽè›È28 „dàA E¬?˜«§<K4‡”JéX‘Ó°Ú
-iÚ
-!IL:X2™PÌ«#™œX#6küÓzeTª”ž¥¦¿ˆæ\(—!Dˆ¸¡D,¯=˜s•”%F2–©
-Z:N—‰4{”,%Y$NZ„@Ú£–%PŒYó´Äq&3†Àœ­&ƒrÈœÒyºÓˆaÕëÕSã1tô 3ÁyÌU§pÐL·ÇK«Í]ÒàFs0¤[1’¡TŽEh,KÚñH Mh‘‘h Y¸€¥jgÇ:X²+eÊÈ™£·ü@EILƒ˜ªnÒQÆ”C” J’Ù~<%10krè¸ê¿ŽK×@]ªåÔü-"Äåê÷œ0 ¨‚2Ÿ¿Â[ïkñx=*KõW½‚
-¯»q¶nQ£r¦9‹‹ZÜžo³ÿÙE¾–&õ·Ü>ˆ¢Ò¿²Ñ[p­© œ=Ih¤/È–@Þä“lµ@Foét,ð b ó"DÅ‘Ç<!hŽ'T ߌ ËÛÇ:šU(Ó'‚W²Jˆg$Ár£Ó:ˆâÉú]íÔç;¤ÍwpFðÔr;i%ØZ2´¦Á<«òGcŽçÂR‹¡±ÄbUhÀû’Þ¡+‰3*M8T›„̤‰˜ÃB&†]ɱAŽ`¶“9!HˆÖoYð0Ë’Lp-””yZ`§6±°%•¾Yå°QíÄ LŠ26)A²,´ †ae Ò' k¬Q4dEðÂÞ‚>EʤñÊ0‚눬¬¡Á)S  «+S½CpWUs³» zl±Ö2ìx¨ŸÌAUõ½Šaeø¯L_Ä
-Ewp05Àb"žÕ’„#š•Qß&ÈP¡~Á2!1¥% õ"±8î‹Éžì+\†9™ÿ?$3ÆŽ•„¯Ifß#ýð™:+)VÆÊf‡£ÂÒ‡rM“Š€¥•àµI¹V™ÔEu ‰6&LjX€#[aÝT@¢yT€º N"샀)2W!Ò—†G]¢ j`†š¼aªWŽ
-©áÓ’ ÑÒîpÒÌmSmeëêŸêñ:J—â+mCGY¥Bÿ•®Ÿ |©Bý€‹½˜sËZjñ¥¶¡£¬Tp!ì¿C—Ü涵Öv¨µ-µÞZGás3ôƼoÙtT(­r•¦£Ú¶ÍUèP«4%>$¨TGI3øjƒé¨­P“³8´
-€¹£:¼’3%>cÉf_×o®£ð»Qƒ]®"Qx
-)½œ“52•”²ÜAHís>½kN‘R7ãëÃïZêvZ
-oD‡¨bˆ~Е'½‚
-áR®n.M Ñ›µzâË­¯1ù¶÷¼K4×yVKá‡g‚¤$üA•¢2-•ZïÒǘb éRuCM‰–fr*oD_(…LN¥š“¾TSNUìÝ81:=±dŠ_ÂÐS ï*~fnµ(¨Â¶]×ÿeU«N×D,óT+;§kd2 *|¶·ŽÍì‰Oõ³O'A•jL_aG{`‚Šðeˆœ±QÝ,FD–Ñ° A…DB¹èÒª R‹ò‚
-ªáÆ?TPI¨iÑŒ|ÁâT±ãMž¡x19¹ŒÃ¢Ô ‚j¸Ùâ-Ô¡Æo@P!»ÊÍ´ êØ© xAE>H
-{zEµžPw'4•œPr! íN'¹äÑK*6:|v¨ÈKªhÄjõ’Jj!ÐBÓß¾TUT)à^Q­ŸÉ,Õ+*ý]€ý‡8sG/¨üN*mK¥·TÁ Û'¨ZL\¤ ª-Ĺ
-j‘&¨Äœ â0à•ëU-p1ã$Jyn¨¯ä¼¦ bŸà‡Ù×õ9U9!PÀi›Vê!‰X ŸÕ6`z
-ƒ§Û)Au›œOïšSôÐÔ¯Ž>„žú°¶å‡!«THáÅÂ[‚ à9 5ðUxÞ%õi¼”†ÒDaàåŒ*zbÄ«†×zñÄ#…ÔÛnzD­:ß½’°[O\Ÿ(óãÉ‹s—PX…‘ðºÔE"aí±OÔmgË#"fîxqÞˆãZ·h0íÆ%ÿ»W1¹±ÞŒÝ«°Uú¾©0²|”üS…±[ô*¬SSô" ?W}ÜœÛðnÓÞL†ÕQôà5cG÷ ¨iVÿ¹5 ›£š/…
-D~ò§#‹Æ”`ìN‚I(ðŒ2òõr °1ÍHd¥¹|jPȘú«0òNùÅaå}ê ÁVjHMMhP,kíw8Em>Y}ð‚²ƒiërRíd>y ’—,<E,Q…“E€5 ¸)¶ó5ì³<Tõ¥µ¡j›Ž5ˆ‚F¢ª¬¶ÖtංƸePx§Æ\ÜÓ¾žPw'$
-Ê|è-³4XNgsÉm®­m]ÿ³CE^}éZ|­ *[­+-Ô(ƒ¥VãÀû:çÂZ+øZA5”ùäæBä¶ÿ]r››×Zó¡Ö¼Ôz[ýå>‘³?ä?þP ‹ªYî§Úp©¡!mÑžˆ:§n a®Y‡º'¢²Ì‡~°0ðìÍ°Ê,‹C«`%¦ûߧZ³õ˜•1Âìëúuï긧øŽ‘0¥»·õ~ â/ÚjÄEFläN<yúRx" ¾4¥våñèº0•Š: ,uÑiü5'|Jè±ÆËÅXçXÅf³OÙ°SFžÎ¤
-Çä…3Þ]JK7,ÚĆÅm3BíËûp8 „Ìß½³É"]@p8Ì>lñö.:XƒÀ’…¦€‘l븳Ñá°ÏnJp8,>a öY*ÇÝ6Ýáp×Ú¸²mà·Bq˜>Ø9w¿¯'ÔÝ ‹$Òît’KûøcøìP‘Çá8àqÖêpXkUαÊ`©Uq¸â ÷õ3™¥:ÖRaF
-Ñu:2b ]6¦bœá)´\BÛÌ'/FÌ]BØ%kZeÝêÎO›òjËc=ŠÝoN¾|íöÆ UÇî9tV
-±{Ž’AÁs4Y>JîÉÑì=G'À› Ž£S„¢]Êq4
-­~Çèûbtðœ¹iÇ ž£SÞø6MŽÞjãv<Aš,Úý'I³x”æPàQš2òýò,“<“¥;?™ž¥É¢oÀdiv ž¥9ԡƇÓú†c›z°këoýÀؾ$ƒ®_Hîâh;¢¬ æEÍ‘ŸHîÒü³åÇ›1{íÇâzö™Ô¥RߣýŽ5r’1”ç –xrˆÎ—ëÜO¥zô¾-´Þn[ä)¾ ü¬2å\]…fÊf6ú·ãqx[êKÁ»¡Ÿ1l>ò/Û§q$Zü=¾[66CèÜ Ì†#ÛüÂNÙÆÜËñ>yÚzØ·n)ÕùõâJS Ë×ÌcùšÙÕýt^ç׃’%ÇÒÓ­?¾{|v‡Z`½©<þ-káoi´ŽÑEä6Ë>—Ý»6s¶­¢7?«^]¿þç«÷š“¦ªý¿¯_¾u4g–¨i<©Oþö§Ë¿>ÿ¾í~ü9=ûñ/o^_]ã¯?þø» z•ŸÇ@2ºŒOž¾}‹^¼»~1‚Ä‚„`«pñä9>«~¢06‡’üùíËëHq‹?ã2~¾yó/tøáÅ{Üý¿xýÓˆüûwï^ý®^½~óòÝõ8•±ªñgúßûÿýûz–tøóÇo>Œ¿?_;zïG<1!ÆýÒE=ºzûö«®·mc‰¾ð и¡÷ûãÑν¸uá4@ãâæÍ%Vv«H%·iý=Cr—K[Ž©~$2² ¯Ž†Ã™ÙÙ³sVÛz½Ü<ø Á6‹ &ß¾t‚#Òš.·ÓŨĂésIm;­Õv\Sv¦Ï%µÕf3]ŒëÇh{ÉsÇ´× Í~šQõúî–øqDŽÑö r±wõrTbÝA$õä ðkUoO–7‹Õ¨ÄëƒHo²Z¯;Oƒ4¯¦³_¨ÝVóQy¦æ‘è“ûx½®ÿ¿‰õA¤ÇÂìõh~³j¹¼¨>nÏ6ß^¼9•äýGþµO*SEþñª¿LjßÌæÓíôÕ¦šµãþÓ•½_È{!íêÕýB
-;wÁ4ÿ¨†ë,CG7ï¥Ö£TÞÞRuÃÞvjŠ“LR¬ÑQ½xâš–08ïm?¥£¤Þ­£vª¨^tE¥ØxuÉ÷RÜã³:Ò\­ëyUg•eT–QŸ%¹cØqRè]·v–QYFe•eT–QYF=Ö«YFí”QÅÉíÑ V¼ÅGÉðOòâ‹öÿû)t¾àB“þŒ5ËóniUésò"«ûß[ÓŸº{ ÄºÈXÙ³–yb™'²&˼¹²¼Ëò.˻ϑÜ1no@¯&뻬ïHd}—õ]ÖwYß=W}÷œõ“Ü_?i)œÌúé@H7맬Ÿ²~úÉ5úI{+´Íú)ë§Ã™»³~Êú)맬Ÿž­~‚<ºÕO‰hbƒ¥è¥T»|T?õ’èÏé'¡÷ÐOjoý¤™´Leýt ¤;¹Z×óªs}f•uÔÁ¤öÜu”cJ³¬£²Ž:œù;먬£²ŽÊ:êÙê(Vˆ £°lÅýI—"J*ñ'uT¯žPRb/%¥÷WR‚iγ’:ÚÌÖ«m½^n²–ÊZ*k©Ï’ܱrž;a]–RYJО¥T–RYJe)õL¥ÔÝÑ V¼…bb¥²’ZˆR¦H[¥˜7V
- /iÍ,3pVJh)Ö
-@Ä—ÖJ5¨3œã¬ ÊŒ×7ì6P5Ñ«8¢E Ñ"–Œh‹=Ày\$=€œ}:¢ÅfÉf\ÐÄ ¸QÌÐÄ Sª›@Dÿö#42<&h_ŒkZÓqí
-ÑEÎ
-$¬3Mh+–#ÐV,X ­´Õc‘¶z¨£­¸‡~âF'¼"á­Ø5‹}x«zÞzÐ{ñ–¨‘£CÄs(Csˆ@¼\€ ÷Ó–¦Ä0Í Z(*ÓÒÒÀîYÕl9]%¾:m9¦äÿoý€Òj&hKmD-˜Í´ Qa.;¡vùüŒo¿t±®xN!¶Ì€z$M;?zñ)ãèy;4%‰'íÓvÒ”ø«ŸÖoGÒ¶L!1Ë*ß¼&@ Åâ<p>~8¥Cˆ‰Á;C|‹ÖŽÀë£àa•ê1øA¯B\ò3¬”–ñÞsto‡§ˆ… ÏSLƒ†„- F'Ž¿±8ŠýzGU)7¼Yù¤ª±$çû%zÝœ³§šÇ‡¦Ñˆ”5¡]N,JŒSåÍ~x9—çM¹$m½¶1f"EAo¶Òí­ØšùƒMs[ï $'/õÑŠrØP[êL3^ =nÀ¤”ƒ8°'ˆ#F«|÷dZ“”é 4„%ANŠÖì~=Î÷áXî%ÃE„S£pCâ|£ÓI‘îC°˜½½2­)(£™Ín&jÜG\‰¯“Q?Qà'è”a›¡À=è‹ÖŒ¶¦_ƒóÔ_VÕ—KÖÖ§˜\W7‹ëm—|uðo7óíu‡FÛP,¼"@¡0ÇïßœÿxöoìÖäò£|}ùny3«°úÏ她|YPyÏ8£Êª{†ǧë5œLëjüp­½Ñ
-û[Ÿ¡|“ yŠÏÐ{¾_Ï«}2âg„ññÃrƒWÓ-vÿên[m‚瓺ž>´›]ß,çuµê¬DUø™>¶¿ßV}J~þuº¼ ¿OZÛãwxùj1´£¾é»1qú¥“šÌÖ«m½^n |`›Åˆ“o_:ÁiM—Û‹ébTbÁô¹¤¶Ö‹j;®);Óç’Ú‡j³™.Æõc´=ˆäŽ­‘W8þ FYÔë»[âÇ9FÛƒÈqÄÞÕËQ‰5v‘Ô“7À¯U½=YÞ,V£K¬"½Éj½zì< Ò¼šÎ~¡v[ÍG噚D¢Oîãõºþcü>&Ö‘ ³×£ùͪåò¢ú¸=Û|{ñæ|T’÷ù×>©üMùÇ «þ2©}3›O·ÓW›ª mLeïò^H»zu¿ÂÎD0ÍÄ?ªá:ËÐÑÍ{©õ(•··TÝ°·pãÅÉ-´•#…¤Sa%Ù:O éÜ]Q=RŠ±Âjz7­8–xTéÁ²[±°z\б݂N³]‚N±’þÇ+:»¿¢³ÜZ•Ý°ÿäj]Ï«šgA—]tŸ%¹ÿ³_.­mA
-7Š”ßF£è‰F•áÇ{TÚÞ£R¢„âQyèveţģģ^åäö‘ŸƒÁcˆQDJDj:ÀE¤D¤D¤D¤Þ¨H9ã]…Ù… ',N›„œ+ p8ä$­Þõ¡Vè¡Š“áå*:NØÅresÌ}ñV«ÏÝRz"]ÂCóó©€ï£Ë< òÉ7 Dë8q‚³%±H!$õ¥V–*‚‚PùìE\Õ¢ok¬‚œ®¯-ûÎÆãÚµV
-rå“e¦s¤À‰ë¨\5™JB1†¤Àò„ÐB¸*w°«O˜—aCmÙw>0×Nø¶˜c>FËc~5—}\›÷5ʹwCíß¾Cµr±Îµ:f€S_iÌ»÷¦¾x¾ÃC9/^0¼FyCSÿæúá)};¹¹]tùÑâûÍÝÙåÏ_‹{­x`nöQ«/üÙvâ“©
-endstream endobj 181 0 obj <</Filter[/FlateDecode]/Length 2284>>stream
-H‰ìW}lçoœÄI.$$9>Rœ6±ïÃ_G ­!ép’iÒÜ‹}8û.;_€TíP'1P¡ ›öê6UZ©:ÊH¢Jûø±j+$ªTUê¦B›ðÇP+¦R ¦‚ÂÞ;ßï.çp¡-1Òý"Ìù¹çyî÷¼ïs¯Ÿß#èâ®
-Ì7—,LVÆqWù¦#"YÝÕÃ|“Òg5¿ÄrQšGb³SzðÄŒðyÜæÊç‡àù}q˜G|Ç](ȅ΋¥Pà†E¼‹ŠŠ­%9`µZ”1–"k©md·WêÁ^•—•ƒ9 °¸´Ü¾hiõŠÚºººz€¡®¶fÙ’…P™U)°—U,®^¹¶É…á8îV0¤¹qMmU¥ÍZ(FXŠJ+ªêñ§6µ;;»´èìØÜú´·iղʲâÌC
-,ÖòÅõMëÚzB;v&hšQƒNìê'{ƒUUPIæ!E¥öêÆu!æÅý‡†GŽh1|øÀ¾døÇšj–‰¶E+ñ¶ÐàÁ£o?96®ÁØè‰c¯
-½k–”[„2Š,]ûTsðõñSï˜Ô`âÜ™Óïüáp²÷éÆe5a…ª›6…^<:þÏ?ùlú¢ÓSç?:óÎkûÈÖæš
-+_z¥Ä¾ÂÕ¶cÿ§>œúüJ*uMÔ•/¦?:}ì@ÿf¤Ö^"D–Øk±àÎCÇßûäó/¯§Ó7UH§¯ùÅù3'ïêÀê*…Å•uxgbøäÙÏ®\ÿæÖm n}sýÊÔ¹ÑáD'®Ž GÆ&¦Sé[ßÞÑàÛ[éÔôÄغKÑEŸ¼˜Jß¾£}åîÜN_»89~„QEÔ»»>âÚM½ˆ›b„»ÞŒ0#Ì3ÂŒ0#̈!ýžÏ¡33äš
-Ïr‘ùë%ù`þz‡ ›×ãô¡>?ìEQ'A¸Q8¡´!N°·ìu;q¯Ï{ÆÉ‹‰’! ÙpŸ#|DÖ6ÓëVÚp·è$¥ÎÐl&É#g’mnÒ Ë™ÙLféñ’$’iJ6H®E²ÉÕŠ™³ß±l"í*D; [d#`G#Ü»]¸n¹,× s1†&Ù!xo{’ÿà—,x¤’BrViu¼U®T²UV‰vP•AߪÊ@ç"l,)^;íp`càLÇÅ^ a×6ŽÑQ¸I¨v"L
-´¡®¾$Åî¦"¡-ÔP(ã•lý2U£Àfh؃™ª³=ëwûP?ß¡€=F>Ç•ÍK (áå/ü„Á‰ìE¶‘1m#»Q§{F#g·M¿¹Q¿º¹·WÛÜ8ŠÎèmî¿ßÞ41?¡¦$Q—»kÖŽ"t:IQ¼Âª(_iË€œ¹Àx_‹ hgÅ2蔟µqÕ=–Y D<·ò-†¸×Ë·êAO¸ðà¸OÙb~ù_o çáøøpp‘Po `·Ý‹!Â?Px#P®_ØŸ¬Ñç–_S›bú6)8¨—s.”Ï»¶RdvôS±h?'¾£&Û÷Ä"\¿h¹%ó^ÑäÍš†D“«·#ØÓÞ¯ƒ¡½ø¦Ð¶x,L«ÖPˆ5Âü9ÑŽ"!ÀxI™a×F†IH–"¥<`KšÈ»Úiv$ùLr ÿœN&B‰gÕŒÃköÛ€ÆÞDœÍ$¨¾AŽ’Ž(幧ð ÷Çâ–¢¥EYI·ùnh€Ê–4ãön2>(Ýwd|¥3TåG“ É <_‘t¾‹r„šc™x2qU™* ¨ø6ß(‹ŒsÝdÔPa’ëÃRG²QŠ3Ö”¢ëÃRZ‚J&ɨ±~”}ó¢8†"êÃ0÷½Ž”(Ë ð¤"eß¼(ÒÀ²qC… ~yQÔ=vS,ˆÇ¢´¡ÂÞyQžÌV¹^(U™}dxßntÄPJ÷¼(ôžûØÏ°/ßG…w^”‡HÃWÎúÂT<ÞMíåÚ“mÝACEjCšæRÊ÷´"?øÂêÈs;ÔV‡#$G6')š‘•Õ.¤†’^¯Î’´syAFù 5œè)u´ð\¾õøRºøÕ•öVÔ^n‚×H¼à⯀BɃ(¯ÀÝ ìw2
-ÕQ ÝwÒP@:ÍYDá‚`¦ˆÊ“óÖÑÇ°Š5%”)¡L õ@Šs¡˜Ûãó{ÔgJ(SBåÏèmJ(SB™Ê”P©„
-nÿÚ=¡V:$‡(¶¹ž¿üÝ,‹S,d‹&ÉÝLÒ4Ñ5
-endstream endobj 182 0 obj <</Filter[/FlateDecode]/Length 16119>>stream
-H‰ìWkoÛÈý.@ÿaú!@ü!ÚrÈáE>SëÄ°]‹B`,Æa+“%e7ýõ=w†/Éò#Þ¤M»Ò@5CÞ™{:»x.ê÷Å+wÆÙtòâEÜùºnŽ™™f'ËåfµnhêåùbÆé©ð$˜·OþT4«²®Ž™3nW3zÿe¸¸)«²}ùˆ½<¢¥Ër½,°xU/ëæ}ýÛ,/úm!&É×XV?¸ü‡sÍô±tÙÙ©y$¯>å«Uù/< |7pi2ª7Õ¢¬®£ú·cÆ™r™Ç¦¸ Å¿–çÅêÁ'’újsST볦¾*V«˜Nµ:fñç¼b§ù5Vrö·b¹¬eÑ2¿ú'Þ O¼yV. (y“¯™2*‡'îܼün…· €îͼšŸÜ`ê¢X¯qÈ6¿ŽÆ[ÒÁh¼ü弸¶‹¿µ’/‹›Û%€1*x™y êã:ºïÅÉÌcBøLLCW_wGÔ->•Å¯ÇìM]­Na³¾°ØrG2åíüùfY4ïªr³ûfN[UOëE±ÄãÃûÙ27š!†kûÄeÞ\k˜¤^nÖ†2ïÖÞln~Ì?¾h7y{[T—õOæœÚ9ŒÆYÀ„
- —sŸ‰Àì!=h+ÌV‚µ¿­X’A:ÙŠÀ?ƒ=Þ6åuYw‡Só×M¹ŒñLvWÚdŒ¾ºû¶'…ÞëuQuGÎ<>œÏN/hß´ZÄõ á¿2Ô…©+°`Y_·«Ã³›ÛV31‡¹Îš²"ÁÓÉ»ÌÏ–,¾nêÍíIõ¡žN^Zß½lò+<ÉÞ¾ÿGqµ†¶ÃÝŦ\pÁÛ£GD-ó*o˜Y8bíäå'¬ä8³ïae˜{ŠØ¤ø
-x Š¢0ÒQ©ÈUe„“FnäD"âa¦aBH…a¨Ã T>h-C7©BriT':Ö‘ÆCZë
-ñ¡¨ê,»–µþ ‡m}cÙÇlk­;Ø7Øcߌlkllì+[ß·Þ¯ŒƒÞÂ] Hwl,FvvMQ0XÛÚ»³t¸eé¤i7þŠÉ}Å£ÛÙgš¾=‚ÄpƱh_Þ±ÍQÚÆ â©g"Pß(:°mËRâhÐfpÓDÑþ6ט‚¿3¾i
-CÃBj ©!¤ì‚3¤¸–™Ð»è£Á(Ä 0‰¶ñÀ2yLL1q‰ß P©@B¡Ô•H÷Ê÷•ÉC‘Ü—ÉÚÚ±+Œ|“­º²ˆ÷¥aÔǪ-Ž%4và~’Âg[Œÿ„@%
-vŽ¿ù’uÓÄĽó8ˆ»ËEÑsq›z\*öíͽ…"568éý 븱Ùnmtß°¶ÍÐÖÀ˜~ÛÚè¾m½ÛÞøöbëNôW«{wuzÿè‹iH$d,:öjqê®^;üþj=ʆª/¾éK˜â
-‰ºÇW·yw%D–âÉŽ>ä‹ÏK–£t‰T‰„Ù§Ëç'˧¥ÊQ¢y:éDZ%F3Òíßì—MnÝH„÷|‡9@‹,Ö’ÅŸ9Io{1÷_LDdV>ROÝm÷èÍ0É$>²22ò ¾Ýo¸^–(½©¹
-<‡ÍSàªóà‰ðLf O†gÃÓa qF<%\8£]§E¼Ø”+WUѹñä„7z¿Î¬ãsáŽo?ó“ú‘jï…;¾ÿt{¯‡§âÍ€ àEŒ`ö"ÿ4Õ®PwàPÑ¢EÃ
-®lÞ< ás8Ò?s"Ž¦ •Nlô{ |_èkðkøk
- „ï(ì u
-ßAø…Áå†Á‚_,
-.zù‘jR—Š [Ñ.ÙíjªMtçñí:’]òæHì)¸n–óÒ{“ü—5È…/91½øÓ‘ya²äÌUîÜÃÌ"—¦OgyõD)4 ŒëG#Ê·y7Ý›þM¯án_øÄU´pÇûÿןªòUáŽ_ý|ùÁšßë-þ>JÊßFÇþ×F«\±VþÞ ‡œ¿¼Å’ hþΊ¹.þQ×óÇÛ•©ŽÓ¿¦ù£Îóí‰~í}=ÈYKc~yÇ”Ë0óŽ ¬*ów*¸iͼãøƒËŸÓݯºåOF¾ÿç·ß~@ö§Ÿ AË ¯}¼^v®û` ‘IÀ$·X˜+춹±­,3Õ†zôñ„Ó®²ï˜=¡Q0xýçh¸i…³,. ¬ °Ó©³ie­©K(JHÅ0agñ ¥×_`Ïß¾¾¼#ñÈÐÝ?YO|šã:RW¡w…ÌíY`Ÿ¼Æ¨/ÞèÂÄÛ;? È
-„żª¨·)î5E¾Ýc”KþžÄ󞲌‘Ä2¼ég Õ;Ù[­þf›¿Ý®ÕurÚô–£&Ð>4
-§º³TME7ä)¤*ix’vM³MZ½´XèÔ¦­Ó¡-˜1”gkÅÌ·uÓÅšÕæ¾T´R_)£VJV¦±•²Â¯±q~vå£ ÇÏ 5)[-Ä›7§ã8l5Á•†€*Š øpÜ
-µõe]¦.”=¨ßºÙ¥´Ø ÚêU\yVZP'Uh5Ý"hŠ j5ôR,íu>J‡%ÒÔwëS̉MÉbóqÄd¬þl}*FŸˆOÜŠû?ÙÕï¿>¯)žzßn:§Æ±Ÿ¤ñ1Ô}„®k׳tl]»§+ÖTZÅæÅØ\ÙéüÍ7±9G¬äŦ™À+V•>¹ŒNÊKRÀÆCƒh
-K®ŒG&v“¨É©7ys¢ß>ó¹N©ŸSÕ9•ðƒÉOŠHÒ}àuV¯Óz4ë“þ~^¯4“u^J28«ËÏê~R·SúþM§4¾ŸRœPyœ‹Éé'Ñ"Ï Ëà,Š'™žb”` @É„ã½k$ˆÑ4Sšba`@Ëp{âðÁ}3YÞÃ+ÏhÁ(‡¢3U9Ñ,¢÷Ðuè6¶oÖØ4¶eNŸ›>5xk›ÍMŸšÕ7‰æŧÅf…;ã™ï8œ Î…¦½¶-`½¶.«¿Þ[vÖzJõ»s«M4½{çØ7tÆ:çÙúîʶnY§Zt‰Äʽ?ïçiJ Ê4%MÒbÏR–¤˜¢6¥¨½§(ÏPÉ
-Éi¡T#=5§U®ŒË“e¥ìÔºà4\y5Ù÷!Ç»èˆðÐQn9ÉEg¹Xqž5¢mè—Q-¹–>ÊÕ)ÅßáÖ3iœ pwtÒ´_ŒwI¼Ü@KPïª-eìÛÂ}ùr›Wó{ÚuĽuá®ßdöYÉ7œ[2ûî³ÏîŸoOП¢?Éæ[´þq‡]§—íÝÎè¬Ñ+y™…e¯ÙË¡Á·{Ѧg©‰ß¿9á[ùšì/zƇŸ¯ëê¥40ôÓ‹TU<WµHVCd«ÙÓUU¾Rºš/ÏW“'¬b {¡Áyh'RÖ œ5)i-žµ¶Ðú:ÏÒùo®ï‹3,u'W÷âº6URõ办j®®då0éx´,5›†‹˜Áô»G&<•M"”—nk(lÿ¼Q†K€=Ži¤©fÏ»–hñh¸á¡¦_i@‰×DW…·.pÙUŽ»É÷²€(Oz3o§æ•i2pp.ZC•¿7y=Å{j+Òg’veöΪ·xܪÝÑÔaëñÉíÂ]¬N'¹XV¿ÙñU¯ÚP-ú~ÒÙ{tšýOÚl³4°È/×"Y¶¢I]'÷¤±±¼6I“’¨íZ¥•*½˜?6Aäá.)§„‚Æ[%÷ÌÉ…;Ê=ÍAwQsR»ª×(¹îòÑ=ïÞ{ìݵ¾®êéÎ^NøEï!»·‰PØ· =Kê–Í O úuù ÚöùÛoógÓ—uîUg­3ö©ãÌŸ9œN׶Kß,6o}£h›ø&Éš´¢£áœisÜfÌ' œjÛ¢oŠ±OXlˆ×tÙ|=7Ãs+`¶àææÞgx5=Z¾~üi„ÛvíÞ*W…SvO Ù¸w¾ó¸;ä5ª¦¨9J'îYÞ­§3Ëf–Ër0‘QÑ)¬9UÏ^‹§.¸”2×+oYÎÚšzº*NO³ç©ž¤†ÈOGOMð½-ÒRq®š#¥ž‚"÷ZªM¼E⪑"òbBiˆÀ&ÑnPZ¹ª­©#R Él¬"´R-êZ†Éb&™$·Å4Ì4—¯½Ã™}×dÚ¤V§÷ÕgÚ&|vŽÏÎò=û¤Nõ¢«Á“ÐåhœßkjÚ¬Dl[ß |È~+SHèEð:J^¦¯Á*ö²]”d:²ê»½ïz?Úàþø:?tžÀàŽ“Ô׫ˆ‰ôx¹*­^W§šY@›Æ>5jzä5ß*GM¯ÂÓ­Æ[ ¯2†‹:u< ^ò~µ·Úþ êÙ¯–·‘+º7ààÆÀÌF¨ë5;–HÈÎH6YFºc4’t
-ÌR™ÀÜg/ÈÌ•‰3eÒdÆÊ|å:W±N“«ST&S5d®“1‰>GQµa†²¢éš
-/ð
-øçšÆŽâz²øùò…ÆPKDtt½N/ú(+.Ùî<ßßIþØ€
-C\$lK»í1ÄQ.`9ŒåÑîn0ƒ1šŸA+ÅE?¾÷áÓ-×Ì¿sAá¬,ßcLpzàç<¤1¸°£S)â¡)†ÕeI385${0@Àfs7X¬ì
-V†ˆŸFSc, )ÜÈï§uðüZ¾}Qï§ËBÞ, °ÙÕ +»¢q6q{Ôf"wí
-ÏÈw †å¥‘ú,Òʃ£ø› ^ëU[{tklŒ3}œÇUb#‚a Œ%,KLÜ„ /ñ"Õp±H¼Ð/Ü>`0üa;0\5`xk’¨‡xÁ€Wã…“HWâÅQÆZ㛑Øæ$²E jŒh³ˆÄ
-‹Õ¹¶„XÃV–@µÐ9ÕÈa
-žNˆº†©Ðq• [b‘[@YC—Þ ¬`ì„2_S@<ÃÚ´A\-Ä£s_9ïëE˜ÈKgŒ-gìX˜8ñÆÄÃÓˆ(x¸‚ˆÑˆ :GDéxØ#â(&®!¢à¡!â{˜h¨hìÒø¥ábÝá¢0 ⨰LP¸EƲC†îè8áÃW|ìÑ1W ½ìØGu|\"ÄmprÂÊ1ÀÄ 7{ìL 5g˜¸Ñëÿº¢Þ”©ek] ‰íãaÅKÆ;×D »ò1MŽ+x&š –‰ä¢‚è ]ª»D.™l׈†©+0jEí9‰t@_æ Íc!"
-<Î@e:0À¾ˆµÀ­6J¯àçhÎ@uºPî€v ÔkÍÙB;1 8rÌŽ“â™p1Aø8§ï o˜xÃÄ&þ
-!𳄇Œ¹¿žÁÂõ & ì”ÁRMaó¸
-‰ê™HK¶P5W´Ÿ–/ÎJÖhy£dŽö#…CO!QØsêi¤Ô±Ö,É„?‹0îÚSŠ&6’V0ÍøÛ
-?;É.L/^X;HŠ‰Âⓤæ&f¤ÄY¾Œ–|ăN@œèÕ!IÞI¢Y0tYGD’¶V°4Z¿9·vj§ßºŸâµß§sÕrší„¥°¢Ùû)ßr^9}»éÃéÞØ«^cÅËw•+»ùÄéžÝ=±íž~ËŠ§w_^ÛþÍt?™’]‹f6™‘¼…çÙ:øŸxž­ãÿ¹çÙ:øŸö< yp™ô™tšôšt›ô›tœôœtôtžôžtŸš#JJJJ'J/Š=‘<f)=)])}))½)Ý©æ°¢[ì;Æž±kì;ÇÞ±{ìf=dÙGv’½Ôyô“eOÙUö•eoÙ]ö—fÙeö™F'8Ö$tœ=g×ga³,n—~7 ÓA€ö‰ƒîàåáëT+õŠ½B-ßËõkÙVXÑÔÒ½T+äR§×ÜëX+÷’¯„Þ–n¦ÞÓØ;Ûºë{]ïtë¶í=¯}ÇŠºõ¿”  !aéx˜;*2ò¥Ë…ÔÅàÄ,—Å5·6\ìï`ºF-Æ Ž ïK/zƒÅŠ™ñÒÀw•’¯º[ƒiמ~¥]`Æ£¯yœÛ¬÷jëcâuëƒûgÖG„6ˆì–
-µü¦¶r]j+»ª4ov"t.?v#Wf'n•ü»Pª.FVp²Ã$†àHÙ©§°‘rÊ÷"‚M±¦LGˆó$¢¼R;DŠ½XºIìÍ\±r´q4qbáªyÛZ7±m4mmw ­ D6Wi΀òH}¤@R!)‘Ô˜À72¾–yå0a¤t·‘ãˆóTmÂ0s´˜±eYéC„8à*…Z¨§‘Q¡&ò+gs¹Ëõüµ<Só³%,ŽOT~¦¦}ujµB‚Jènb›„À‚PÕ(¤¤…|¡
-OÁñ"5VD†#f
-Ú@žm*Ìê%½*kt
-[š ‘>åt‡÷’#â[Àƒ.‰õUËJÅ»Œ"óÙ¨Ù-Á6·]3Eê#zFù/¹uQo²Ü« Õ^çSK:µ[:u›òß­ðdÅR ãSu9î’ôJ΋›ŒW^Kw¾æºIrSÝ
-lÑ1
-á £J ”¸­£0HtdVü™Ã€Ñµï¡²Ž{¦Æ—VÜY¨Ëj3»7â/°áO˜p°ÀƆ_3á»y|SÕ7U}SÕ?‡ª"DÄ‹w>ÎäÓ#ïrÜ‹½¢ª¯Y¦ªê ³Õøg ·Qù¶ØŸXëÇ'Ä~´áéœF ‘FPi#Ódª„N­ª¯”: ©¿,Djµâ{ ¹f@x‚Å7‚u•bÆ€$»Íj¡Y'D1H¹P-8M9ƒQ³;ºÍn!mç v¢7AüŽ`×,H¥Ò˜ tÊ
-26f[µAÈ9FþÇ~Ùô¸+Qt߀ÿƒ7f6 Q%qð6¢>³¼Õ[4t#Èbz‘™ÿwXEJ”ew’N0+›H`8±,U{ë¿\P¢#ØÊn×1¼'¥N¬l´ {^ð¸ú fLüêÊLŸ¨ :¨™“‘ž6òsz‚”¡D‘p´§(s”H‚£L’’l" –$Äeš”§¨kLu+W^
-™‡:ñ°'"ò°¡<d"¾ÆD¦"»Kö—ÌŲãB† '.}¦ß‘1ïÈ0+mâcOÇ$Σ|lîS­| q'+10±q³ggÈÔ\0ñ“^ÿêMq.—’f„mÚdWÇãŠGÇ»œ‰ÓaÕPžeÕ–#É:é Ó ŒìöiÑXÄÅxíÓŠ±À¨•iç!r‚Dƒú<ÌÍÐfa¬ë 05C’…œ^F¶†
-úíéàÄ„1L®žÑÀ$+Âpæ–30$âú2ËúÂêrz@(ݺ°ŒyU!€[YQÚ5´/²*Œë=HwHÆÉÒû®0Ï/ãü¬þ}q¾wÖ;ê⨎¥Ff¨ÐÑŒ¦F6P½ž¶T2ÆËeV(uF³#ÚP1÷HÕ[jßÐÅW¨ÆFÜ` ;==jéTC¿jºVá#3éã@7{zÚÒÙ†þÖt™{t ¾4Ñ÷@÷= tààÁâe&-ºzèâ¡k‡.ºrè¡ë÷(ë†.²h¤5C— ]1tÁÐõB— ]-X, »ƒríê‰Ú¢¨’£ Ê‚RZTÓÄyTw&îLÜ™¸3ñML4çOዬ¥ÕcÐÖœßx£§>»êlªGj¿þçéáÃÓû¾þŽ¿Û9Æ6ÿ­¥“½•7OÉ_™¶9Wrä{Þ=V®)ö_Ž¿H
-²‡Æ*å:i¥´VR­T/­˜ŽpêvmÔÔ.šó#>€¨uFø®+§†ïÖ<Þô]åú>~R×z5ój7z~üj:Šªª­ë6N‘–‘*°]ëüîJ1]ü?Lu'£§­y—ÛþÆ~Âå~x\9{}\ñ9nËq•G€‘K6Ó'[ ¤‰©Zð;CÊ œ$Ž–äÑ“@’H¤f"—,¸™!©°Á’YxL9.xprŽŒNF†Œùbdt ¡•Ã"Òàhžôvc£apt ŸFÇ”†Gu ­ŒŸ†…-I,›uœô6Ž” C%z …ˆcE 7†KøL D=â áࢌ›8px|,#Ž8x&Òb%q
-qŒ°óË#‘qÆÞ q’©ŽP: Ìc 49C"iM<mªmfbY–y™HAVŒ^'ñ?†ûj^æ™ ;JÜõ)êºsMŠ¸E¼ç—8àïã=|ç€ÞñË€O½ßŒø¾Ã%~añ ÷à%ž g\tx–þÖt™{d‡šéùˆK @Ñ´¸W5dTlT3”Œ¸ÜÐx¨é`Çá–ÉhØ(œqÂ!ò÷–{Ä9[¸k ¯†ÂŠmkÆaGÈ0›N[hmpâv+v¯’Gˆ ›4 åÚ-ÔµµÄDz€ö²ž:YgùzUÝ™¸3qgâÎÄ71Ñœ?<…/ÂFÞGÖý$ï+yÑ×c·Gw ݇t7¢0\Ñ¥­I7(ݦòn%±5n]iÿš¤çcºø ½÷Òÿ^R­€ '$4’®jåAˆX$‰M’ÜÃJFf#Ó‘ùX A¶…~eD)ù&N®‘Bz-HJ”‘’=%{6 ÃrÅ•Œ#%7©€‰IÒ”2±QQp¡ Nýâr/9ì-»½¦H¬[ïú”rÛ‹6)#kÍ¡“e/ÉßÚÏnßS’¸tµè«j?ì:›õ¯{»u7÷—Ÿ.¼ ÷X»|Íb§7G8x~a®ðUOHŽpÕN×]aç — ¬Ñ²;Px˜PÔ#IäõFDÁÄe¯‡bké×Sn8ÛÞ³íB+\Ѧ­)QPp $L”‚ƒ¬îx¸Ó•†yGC/4¨Ò7­g6µg½gÅãe‰ˆ·™ÈTlúW*Ž“‚+^L‹o¥¢¿5)`B=!rQRqËJoÈî'Fø>&Š”pÈ$Í1”Ù &ƒ†TPɬ 4¸C<–\Äyína¤æVfðôÜÑ銮Žt³£‡–œé™§SŽ:3ÑO/]0t V Þ=•57Ô;ª0V;ÖZ]7VY7VWj+•U§J‹ÕÙ+µ<=ÜrÙ]%‡uúæJnµÌõÔšêmÒùI/®ø“__¿bf‚·†ç²<«ã¹;jà©E *ÕYxLC½,usÔ¯£Žžz¨ðBQ õ¶TÝÁ3s.xzèÉDgÊgè“E Ž®uôΣ’€Z&ú¹PfƒŠ,jrtº£ßž®z?¡8(£ Z¸pÐÑÁˆG§b&”»Ð0ƒ’-Švh»Cåµt?á
-_þpOóëóï_>>~yý'}^>}~ÍŸývþ忯¯ÿzy>JMÛÿzz¸þ¹<Ux–îýGÖ”(Ä馯Kñ–¹é(ÈBŽ¥ UŽ“Èñ¶ GYHR¢}’å*Ê€(÷²Ü„¹Isg!OÊúá
-‘n2E¨²ÞYvš$Ôÿs_-¹‘ëHpÿ€>ÈlâŸ\R”tÿ#Mdð#J¥¶Ûváa0J¸,W•©d222¢·jmVi×Ö°¢ÄWC4®´®4¯´¯4°´p`×FF JU$Õ…RRQ©Ç_züÌaHÂýÕ¶ÀV¼¾g)c«œõ$í‘B7’Â姿fþôWˆb¬XMF!Ñ—fF7RþFù|Hˆ”¦¤a­hT GA}µÞ"¿=äxäpˆå"Í3íÎÆ1!Ì$ò]kÊx¹Ä"9
-{/£D- UE®„ð–"~%,1ì€á0U½×¼
-x5…ç §39ŵfœî°¢ž,Âü ;Ô|&¶™‹n3Üø +ö{ùÌݾoÇï~Ö ó?Êsfú/ûðwû¼¡ú7+A¬é §s-—vßmFçSÖŸó¸XÌH“é0Ò F›ØšÍ‚±—Ñ5ýãÑM¥1ôÜŽî+h&`=Ñ}j1X5 µ¤ãvC?¯hÙ„ã¢Û-:_ƒ°ÁV(hË žˆà æ°`œ(ไ̲að¯àšB à2
-œ#QÑ‘Ñ#H#âa„áj`ÅŽ#;¡éÄ”ÈR'¾&”k-€µó*#Ö)x`¯²â"G=‡ŽªÂN›8+=Ø¿È;à«(Å¢ÅÐzooX¬‰G£”øP+ëÔ³
-–Ü%²3ü’øÜ €Q?ò7'ð7>à×?†;gÁ
-$¤™`ÚÚ>Sì¤o}'ØZÒƒ6O:š SHhotÏ&vÒ- él‚´§¬þòù¯Ãfx}~%èþüªD2Ãg¦;½¾™ðîtÿžðnTö.Â…¢mÔõIùü/g€ç?çk¯ô£u ¦v°K&°ƒ“]. Í„ó”›
-°6€·Ìàž
-¼…ð‰B1MpÁ‡bÈa  ´àÐMtÑÇSÌq…ÙýîYPb“lò)¤˜rZÓ'v
-cm‘‰[†oá–]“mLu Öt—ö˜~‘€ÎBV#3#Ö
-RÏàÀ&ü/û嶣6 EÑ÷‘æ_’‹óhrùÿOêÚÛ± ` }iÕX•*†˜ÄÇ>{­žDmé‹ Û¶b.kâµ"}3Ð=û±£b¸líŠí¹Pĉ.ImuÜïèÀ'úpIÑ•)ðDÊG:u ó{úvK÷n8&[z¡ô=Òᾧ߷ôý†£Ä3²Ý6ÅD.Dò!ÀÊ‹–ìh8raa»LpI$aIÓ“8-ÉÓp4+ŽÇÂ6šÈ¦HFñŒN¬Žü:‘dµ8‹í<›Ï"‰Ì€™±¹RÛ;±}£ÖoU›Z‡Ãj\o„„ŠoõþýŠSsj½UýãšßTýûëR÷7ªþ¤îÔzWù§uYùí ¡Kæ'9mªN:4(¨Ìph»ô‡zìµò£Û?ÙUöˆìx,²ãS‘ýÝ‹5cÆÇ°Gí¯¿çÁŒwб/ãÑŒÏî9žñ'ßUÛçe/ã9œmw=Õ˜½È$•I8
-ÑËœô¿|¡1u®Œ[ÁªkÌâ˜&­™¬VŽ°²óÉr#½é6½! 8ö£?™èf0[uµžo;éj­<•'Xx¤<’ž¬=³[΢æc.T+J‹% ’I„¤B“IGlµZ‰*=š~B_OZ´‰Q°I¢©Eœ$2“gÖ%©ÒÉÑ©‹ŽëÆ-Mj·b:’éûË$ÜX¢¤Q)©”dJ:ݼEf‹¥JZu[Õz«g[ê˜Tô¼!´ª–pÙ
-j(VT£‹p6 !º gp6Õ´hžŠd¯tVK­ì©¬©Vó¼KΫ˜ÄrðšY(Y©¬”W( å´)ee©lY‹ÁëpNRÉ»7gÌRIàE€gk‘ÊŽˆ „e$6g‹eÅ‹H-;–2´’Ë™è]õòl—ÆÚQ–˜ŽÍ™ð^Ù¼’Í–b¡›„|$ì'B™VKgÃ&k7ñIò3аÌ+Ç„úhÛ²™:Ê<çG`ƒ<VÊÁ¢j›±xx‹?èªæî‘”ãky{À5Ì8¿5¦Wƒo?;¿=â~0cüÁ>˜ñZã~>†ãÁŒþ²Óûq§žy…óäg̳d½ÌZ¹)åN'-’충HdÈ,ŽY³,Q,’˜õ0ká¸Ao(:˜E0+`Ñ¿"~Yù²ìeÑËŠP&½+bW¤®è\¹,q£ÁYè<¸mvh!´¤)a´Fe˜Ng žl€ÑX-°Z ®…×l!¶ »1h׊9-ý÷—oœ ÝÂn·Ð[ð-ü€ ÁáÂpxó_2ÿEɼW šrßË ˆ5fâ?¬OÂÜǾåõ,u=ðÙ‘sü™ùþ. éûC ácÿÆÛR¿þJºv¨tÏ]ˆÒ#H¿Q†ÜP8H+G
-äá€õÆsÁ†#y;´±šc,Ôé9Ú#GܨCƒ4èì0g¤Aœ7Ì©
-ètn×u
-endstream endobj 183 0 obj <</Filter[/FlateDecode]/Length 17413>>stream
-H‰ì—mk$ÇÇß/Ìw˜7ß ‹~~0!ÐÝÓclÇä0˜ R„Bn“è΄|ûü«º{wVZ݃ï$ÜÒŽz5=]Õ¿þWUTQG³ÑñOˆ>Ƙð“cÁÏë´K"®I&T2É%›|Š)à'§”JZÒšjYe™u60›}v9ä”éZr͵ˆ"aºØb¦]ñ%ÀbÉ…®¥¬e]Ä¢`f±0¿XZÊB×Z%LW[Mu5ÀR-°ºÊUÃì´[ýêÖ0í~?í~7íÄg¾þ—f1@<¶fŸ1óŒédžÛzÆä³&ÎÛ´«ë3öܵ<c¥fìŸ- ™¸6 \EEXÏôrH!†|pÁtPAáW_ýâ‹Ï>ùèƒ÷Þyë×^yé±b„²ºÅ—]rÑçsÖ§rÒ „´àb³M6XoµÖXm••V °Õ,¦à$»`ü´3ÎXcŒ6ÊH#àª]tÖIG´×N[m´ÖJK-èŠcRTVIE”WNYe”VJI%ä:ípXyˆ{Ñüž°/^°/Í›æÏð¨ùÔ¼j~5ÏØ·iïšÉFøؼl~O›¯ÍÛæïð>ÃãæsóZ!ðüà{ó¾ùß"Ðb0¢Àqè‘h±hÑñ@D¦b‚¨p Ì|q•¦Ý/8!—tB´œÅ¥‰œÂ1J9|Ap諨¤õôÏ^Øf5[1 šîå´»¸ú<³å7m]!Ðó1*-"Ýx#T䉤䛨¬¡O)b†nŒ”Þµy¤8]קÏFëÊØí‹ô½ªû›o®oîo÷oûH¾½»ß±oæ¯~Þï¯_ßÞÌw}hö/¦Ý¹Q¸¬æ|Ãûq”j)öÔ s`3ˆK"‹"±J,[*©±H ½ 2Ê$3åÀ^åªð×´åØx"€È@c$+€‘€Ç
-’4È¡†²ÄŠå·ö‘ÚF´ŒÜ,R£[‹ˆQÌ=$'qc¸”
-y—¨‘Õ{S! ™ÛŠ¶P ÄâѺCÛ³¢XÐOf¤±¤=7?†´"Ü\PÑê"°÷¨©±Ô˜KV±¬˜yÁ2ÞЈ÷:¼Ý`
-«hV+ÖV°Æ„µ¬ØQ[‹æVAX2Y…G~%xࣃ§þ*x &a+bP‰„xïp& Ή¹8Ggªà„%D/¼¯A¼?²‘y_ƒšgÛÈÄieÞÝÈ€²neZ#¢È Ütâȧ³…íÄi@Èq6êipj u8â _˜øÂÄ&>ˆ 3_\ånKÅ¥·HŸ³¸tˆhÐ|#ð6ÜD!A+¸µbÆóôäËiwqõÑæ7ô6*4=õìM3~lû¶|Þ–‘ï/Òwöªîo¾}¸¾¹¿Ý¿í#ùöî~?ƾ™¿úy¿¿~}{3ßõ¡9ªÓîì0û”o8zT˜²çf1Û¿o€íEθ3Ó§†5oÖi™4J¥q¯6¶-«Ú_òl+¡{á{Q¸¸¢ÂŠÊªVTQIõ¸ ¢¡T@–šƒÖ$n
-¨%h "5±—Tµ·£1Œ½°ªTþÕA(?+?b‚F½Î"d†
-¡Q
-å^õ‚ˆ‹",–
-#”ü.Oõ=d,AÎPkAØj]!sX> µÞÊÕïÝ24 "‰Iyuƒª! §W}‡-ï4z
-ÛöyÆò;,ÚAÞ£ŒŸq–pìËoñS «ë²8„qHãÇ!C ‡D‘„L²H™ÄùhRyË!—C0‡dѲ9„“¥ó© b³•€h]ê ¬#CŠQv«31d:§¼á¯xèœ8~–éºdj%£ß>éå½­òa6«¢¡!8# Ÿ2Í'Ëi8/§áKöQNY‚Z_·vÒ,Dî EÔÝ-,G‚û;Þç/¥ÖåA–°Ë†{=ÏÝ^>ô{Š;¾&Nå)“<A PÈø™ß¢ð¨"*‚ŒÊ`!å˜vPwâÌ zpÞsOQUê ýŠ|ðT~?Óõ_›‘’ˆè‰åà ê1‡º *4º2{Á¡¯ÜãJÈ€æN×BHþ%ÓUH‹¡±ØXˆ‰ÂùÆF@h RÓAZ£x¡3 QjI`¤€–
-¿Ý‚­yç< ÆR%Y}\z¥Q3Ñ
-ÒkòÌÁ¹ j&Í}í
-|^jõ¶3|ÑTÐg¤öH„«8ßIf`þéë×l_*Þ:È¥«\Â}«¶wÒ~דÜPLÒÊeÌED:]ˆ@QŸJ8Wÿ {5¤‡'huÂ7‚ý^^ñιM~S.³Ë…Ø'¢;ìB{;øÌ»¾ÅæçÃ-bmÿï YìwøçOÿúÇâúêÛÏŸÿöñãß%}ý)=Ð0Åþüéw?Í?×É÷~÷Œ˜íYˆ ‚M5«c¾¡:
-^<Æ¿®xŒ²b2ÜInÁ“á³Zó']oÚè¨4Í’^‹ý@ºíÙ\gºÌîWg ø¢”W¾wÊS÷B3¼†mª6½6?SÁW
-eš§eƒÑC¯%Çab¿®¦ò°ƒ™ÅªªA@è®IÌ„<s`}æÜŠs[E:cî©á!–`@»½¥µæ ÷‹“ê@Öq7ã/9H9‡½¹·`VœÂm:XJrZN-Š´ð½NΛù¡®Å÷6p’
-bLÊ‘³´L&DÛåΠÙX#nÖa&ÈQË¢[í:é6t¨Ôf Zíó˜nµ÷ðî÷(æíÀ©¬:²À„KÃg9ÌŽ¾,y¥SfË{ã–N
-Õ âEPÕ#gkRp·Xýïf‰BPJó0¦©RÖÀÃÙALã~ÑÊ´R
-J÷Û0[òîǘ
-úè ㉠ÊG{€sì·¨¥Öätén‹¡ñWÕ¡Wড়„†„m¤ËŽcy1÷5Øä]*`Α¿1”´¦ï5G)˜‘I1G-G"FªÑˆÃ=ñR s0v¨Ì‘|e×;’È¿ÖØ—ƒº›C‰™­“DcÞyõ<-øWà³À[ ’˜¯µ-4rp¬„±ylæÑÙ‹“jšÎ,˜‹[Ô
--™MÎÀα¼ J`-zYÄ”ÖÆÉþ
-‚˜ÁÐk4›(‡~UÞPïXP|·
-Ï+p,°ÑY¬ºîö6í6æÑÂcú‰£ÛäÿÐ]5i“¦ ìJ*ø·žmÝÿ<„ Uß̦Ÿî´Å‹$!Ûì 1€Wíê`_=JV ‚aaÍéøNkY[4z›®'
-ð/[¯>劰d2ÙÜdn-ÀæÏ L
-ßáü-´$Ó~`Ÿ59e3êÜì¦gw÷ê– ¿ö!ü´ˆ)‚ÀÁÒý*ˆíe7póá}$€µ9wä¼¾x– ” {¯:¨õ¥ ŒÐÇfä ]€\/Ha7 Oy¥ìlõN¥§k¿Æ¢ÛRçhm‚“2û¦^Ç=ÂŒtÍNµ¿µ`ÔGËEø¤M%¦|P8%õ÷Zg€Ïmn"ððC–n·›è<>t]¾×qxçÚèÓ×Nb"Ù6ç?aЊ¸Ôèæ0”[ʆ#"È ž,íБ3`ïÊvï,¹çÂÖ*¡ƒlGKíà‘€±ŒDoÊó§–Xsi~š›`÷}åï6Ä\,ûæïÏkß`xõ>Ìw–}ˆc{þŽ-.Ü{”l„A°tk‰Öú]HË'Êq«SF†.>WiwÕ!r ȶvü~¬íàêe<ÿý=ÒJ6k,$7Õ'±i6Ñoá¢ä\7×\¸P€{S‘´*`'éÚÄòìÈ6ÍÎ×ZJQ4éÍ` ñÁATeC—0-
-·Þé+AÜ•ê%~h±ëÚµªÀ«æ*ô“€™Ṽ!›b@z!(›$ÑÒ~ cm¶ÒQ&îèðc;RîŒ+ÞnÀóO|„=½®6e[œÇËOïMy2ÄÕÜóéf«Ø¡«ÆÝh_¿á·°&ãAÆô¾´¬;{>bTO°ýð!|¥ýʈq3è~mä×`Øôám­KFPÖ&¶°Y©~ûšûX…g]6ÊG䲶ËD¤µxc·JÐìVFÞøOrN*,œ/­Q[ˆs‰}.Û›iÄ’FÏ=[˜3
-é‡A¸¼ôÈܺð=ÖÕ1Àg+ñ¹cÊõbl.qjÞ
-Ðï6‹Ô8¬BÞ¡+³¨ÂújzŸ¡Oê.üZÛ””v=Àž{âmw;Âæ9kËÁ«¸Õ˜ËÀa‘MÒÆ“ÃÚ¤³eÜõíà±-Ä5Ûçu„b Î³àxôàDæŒX5Š&ùØá©Bmáâ Ôêä,5U¨NÞ†Gd¤„0#¬JåU¹Ì;†±¯ûœ` _¶p¾Üx´P7é Ö²þmž…RãkG¶:áέ֋(}PÛ<f„ût:]€Úç:ç~)Ü…Æw.io„Ü_%ˆ‚yòsè¡äˈ!:~$#,©¤¥šW…\už5Sš—ªm<9„’°1k“‡ëb;l·ö­ºô#¼@©Ñ€“,>MÆáéÎÕ°xKûÔíà%•žTV}Ë zëµE„Ò…_æ
- }eæ$=ÒÚϽÚ&%äB·Ï͘êaÐÁ9)Ûpçq#œö.çú_Nhßó°žÉüÁÛ/ÿMÜÐö›q$ƒc²²Ã¤nFõÒR?·˜º# ¹u >c{„5${]¿ëÃiP¯kU’C‚2¬½n„²•5[ƒÝwÀ2èKÎé£k—»>ÇÛêY3‰‘¢4¶v|7R[#Hâ mä*ZÒã
-ÌׯYehF(õ‰À%Ž{Ì)?Õl."Y–­ ¹Ðy;.ñ/ÝÕ×ãÕqCß‘ø¿—H µdÆ3ž?í>¤ÝªUÓTHU!تîÑ"¾}ŽÇÇsovAHh9Ìúz<öñ9Á”È¡9ùá‰5Cê<'Ïj*§—ž%r«y?(×J&²ójyœó GJã¾h®5¬-Ô¤ +ÇêÞh Ä5.;3>g•Ùw»væ ‡Š2\?}NrcØo1Ì3Å«ŸsÀÔŽøœª»
-€E#¤Â°f“TN¿žS«§&sɬš1i#Kôn96ÆFsñ``‹Aî²³Âóõ8™Ë‰+q#~.v4è¯*‡Æ5ÕE°í
-qzâ«À¥5^zsåÜŽµ(;ÄÕb‹o(F_ý¸v¨ƒ‡42¼Çd#‚«½$‹ß%oÿºV¯äxår%o*Iµ$Ó©Æn]ô Ù™×AQaIådtærŠü[7-yG
-Xæ¢FjA4,™{#Ã0]ÌÙ½.G1Öê–&Ù5#@ _2&•F´U3·‘øÅ:=$nwŽÀY*vlçJ2®m–øÞì”üX©×˜zß} ¤©AŸKr0‚I¡‘3 aë ³£FØBü^nq·ÒB^4û½6O¸ƒË9.°ÃL¢Q2›I s ”ì>Õ@ØŪ-Jéì§XN½ë•öp±›]Þ{}KœS€Ö§›P°„V‚«› 4¡^x óI ¡G‰ƒ{Ø1pÙfWiÞS
-¹%!ØZâ%ROåˆSDÀrô͵;M'Á0k‚…Ú¶5Ài«éØ©#¤ºûl³_…lî1Çáaq²Äcf˜¡ˆP]¯¢Å"
-^-}âQ”`­)^LuåâLPL}Ž8;â÷×£x‡»,mïoœMNà
-¼‹0~÷ŠÆ-_AÖî
-^Š°÷RxyÊ.|n‰ñ:² ÍSø
-(W-Õ¯¼½Ñ4U½>³L®è1gÖÌÇ´—µôÐøÃtœƒÒ¢ë—nØN# <lªŒM iY?à9²€%Á‘¢øÌÓù”€Cóåù‡xÆT:[r¹Î›ûx5ýÕh«&9•Ïþbà¸vYB<v‘{‡3x{.ût
-{™dãxœ..ŽŽ° æÞê½ÜdDŽχ÷ÕÎaÔÁkõÕ_?ÿx÷Íû7wïÿwûúã§Ëï {ò§§—¯¿»ûøþöÇË“ïÞ½þpýâ¿×·o±KßýýӇ맗߬S/¾xêÛoxæ÷ö—í4{Ü-ŠžOϬjb› Üì-vYÒõoè;l$ü[l—á‡Û,ÙŠjÝ9"\Ž· ÜÄ‹ß·‹`–_ù…öjG’趹«|‡ íd‹$ø í 8RYpº¡ßÞ ¿Çç*«J£@Ò¨Ó4A°qd,]Ÿ ÚQVÚ-‚3§DýÁ0ÉÀNRð¶Î2ñ`Å\H®”,ßl…EÚ—
-ç$!. C`£Ï´?æf®]]µŽ­6Üÿ —©`X@Ý:I—ÓEÈ·=ý¹qXéAU4–²_Žs>>B@Ó8Õ=%c0\ñ‹ÖAÉA ‡+'¾B ݈‹|ä  ‰, Ç`+-Ò¾t0‘)Á‡A¸¹')sbqѹe€eâ-…?œAd¢(2<´oßðsãÄ6h‰ÈeôuÚ?)ÏÐê{GLÊß½á<ïM)íâtP0…G5¼g>X!Z§óby
-šÂ’m öºíKSûEãÖlð¨8­´mÜdcþ€½el+\Ó˜û8ÚÃøb0ÂÐI5ÛÊ\ÎVvr¦®ït>Æ• ÄS¾h—žè
-曾w¦HëàI!ÌšsÇ´ñõ`…l«˜Æ’‚‚¦±äƒ½²@{« wöÓ{¶â ö‡‚¬s«Â^ós‰¡kæuÔƧÐ÷’ƺ&Ü—Xq8¨ES$®}; taïK}½Ÿ‡U@©¯#—qózXè¢uPr°CR³Oí¾Ñâž—L뙃‚¦±$ƒ½´@ûÒÁDƤ¥#$NŠ§0Œç^ÒFÈ8OW‡E?#ÙõCÏ®`‹p}‡]K2®Øl41ÿ8ñ¦fU–Mß:(_ÁèÀ–ÛEë äà—@p¥|=h!YK6©$M_I8{iö¥ƒê w•h`áVãb̹†Äܳõô,ÄU7ÁÙO·xvûX‡°½w'Ë »,Œ4Ç
-©ën³AS9MÝ…,{]×­Éh#¸s0ÅÑDC›XXÙÛ-YRPÐD–|c°Wæ¬/Lcvy;l½»wñ.ÒSã"b`»íü'ŒkLM3ººÆŠg¶·YR5˳€íI Ĭ´-¦ÏÑ®`H4Ò¼h”ü” ¯}êàUZ^mÚ•ÂÁLbM×Cc½ÆùáHœÅ×U°†íù[KÉ[_˜òúÈ
-}a&
-ÿiqwSºWý±²ë¬0N6[ò™°)r­’¶rêó]QÖ—Zñ8]œžß·ï;ŒLO!õ6ôß?˜i¬©ÆŽõRó®ÿ+Îß~óŠó o98¦ýϯÿáÿÃÿõç?õ¯¿üõë×î½ôß ÿc»œ‰·—ÒªÔ÷Í‚­,ÛÓ”+¶ÛâÅ·ïœ3bÜåœJòc(¿`„¿—'’ÒŸ‡@yí QlÈñî[AÙ–…àˆF
-O8‡Òœö­ƒL³Oì ÄþHÄc}©ÈGCJuðfMlZ?K%ª«‰f
-†n£¬ö¤  ä`"+ŽldqZ^laíŸ9(h"KÂ1ØKsÚ·Ÿ\A‘ÇêU|ÈZÖÉó9& l‰S+ME†(4‘ñræg0@8³ö¤ àIÁÆ­ç÷`Ýwý¼¨ž‚‚¦±äƒ½2§}©ðÁÜ4²ºé>ŠK¬8†|±vI7½5äšáï“(€RûÜ”ŸÁPˆÖi8§  ä`+²Ü%£…B£Éƒg9((9XÂ1ØK ´/>³‚r¼O{MƒT_Ça_x; e _áSÛà£tÐôÍ25=¸ìnÎOÚ
-ÉV8ºù¶ˆci1øM]d¼BŒª@«¾½‚aÊ‹ÖÁƒŸ“ásÊãä´¬QWƒ&üöÒí¥Ãç÷P~JÖ’“„ºˆD¼ÕºôÎö$Ãk$‰Ø‰¦c^¥ŒÏ:J)/NwFà8šIÛYYB3ЗdëÁº”ö-Âú—ß¹þý7/¤ÿ•èZHiáFWѾ¼Â=u²"ƒœêñÆ«œ ¨â{뼞c¨•{7_Á-ª{®Ñ:øXHŽÉEý0-žýœ3=sPP,áJsÚ·æ3×*Ê;•C[ùú¹ñ
-›&¥á7r“•¤v“×e¬=Ê›9÷g0>ÎóŽZ%apœGòúz°B0¢³ýx
-
-šº’o•ë[…O®£p°2Wy—ø¹qx³•EažG´Ä~ê”GmFPÊã¯zWx岞¬ŽIvDŠóÕ•V5Vˆ†/´g
-
-šÂ’o…9í[….£H#Õ¢‹`×5)À„Vª{ÐV¼¥eÈÚѪI\ªî(4‰k›í
-Æ ¯*±Ñ:xRð!SUâÙ¨}=XyùšrH–‚‚Â`ùÆ`¯,ÐÞ*|r­ÜèS¼œTÐXqÂf0†hœÊ5Ÿ¦qÆïÐ4Îy–+˜ÐXª±Ñ:(9ƒâÜM”v‘~å  ‰¬ ‡`/-оtøà2Z¨ã¼÷‹jw‘/ßsä,"ÒݦBGaJP
-,¼~ÐLüÄÍ‹ÖAÉÁ¯BR‰àJ¾ž¬¨¾RÐ4Ö|C°Wæ¬/>³Šò°Â˜/‹×ÔÕUO+žQ—ps¥û\Âcç
- ©›J]WpG
-¹\´žL\…ÑNy~=HÙ'ù¾e  Xº1Ø sÖ[ƒîƒ8àœõØvTv­!scƒ•ž¥ )¯Ö:(åáÿè´unö’ڞ؃‘?{X¾öóæ´Pm±Axä  I, Ç`/-оtøàFr‚
-b 0~n˜¾iH\jíG5ʽJyT3Ð$VK‚q¿áCŸ¬Ž| CVûúz’¢RiWšÀšnöºí­Á'÷AÃ-ÊéåÔB++œr‰‰²ÎŽ4uc 
-Åí]-ÃÔáœRØK±HîŒòÏ+á¹^:m“ä“RÚ0¨SÚJ}¯JzðdŸ95IO×ÕÌ^‡S)Ô+ÏDÌq™Ë½K6¸AuêlÅy¬ím£]À¡A §å+m-=nÐ<VÁ®ØZSÚÇ'3 Ø[Š’³ÂÕÍeà E9öF¸SЯ«;P;¼/çQ\;´ÞŒAñ–Iì0Z£¦ »1lbµÐšr„›ÿC ¯w~à HxJΨ(ÎP¹Uÿ}æŽ{ RÁ¸êE¡i
-Ñ8#e)l+U[ã–BØ
-Z»ŸNG2
-ÛÏMŒÿÔ„Y©ÈwŒ[Ÿ|§¹¿.ìº6â7·!›‰‚Ÿ¡aÈm…åœç­Dkµ'ro—j¾d®˜PÜãFk kЯ!8–‚Tî+âhÑFÒ¯)4Y°+¶ÖíáÃqÆ’/˜*E3Yð4vÑÊ&הط[–C%ªÉõšo”+&$°¶ÓÈÔdÁáF›Û®£½†ƒ›„‰©Å"×J­/Çy˜ð`Ú9*9 Œ‹ô¶Ã #åÊbp»ø ʘCwò!nHíÍ<:])îw§¸‘ý7S>vz­¬£ùœ ™»¬Õ•ZWŽtwàɼ!É
-C’gpÁ{¹dÚR´ÑQ;·‡]§;PŽ×·âª¯¿£õà­AlUÀ'*¯•s±]»Õd슭5G{øð`ây;öMpCÌdÃUá®L×b®òÆ`Šƒ¶:¿±Qz>Ý?mçŸqì#±ÌãWç¿_qnÚîw4[Y¤+¶fãÑù3A¼9V ±UƒÞ‚»Ç­á}äC—‹ö$Þ ÷†÷¼÷¶×Ï°pî´¼5¨µ‚Ûªçh.¨´Mƒê¯vÅÖš£=|x2èG–ßÙ\<Ž±-¯[«½r~ËYž–8f›êré¿PÜz)­¬A ¯A—1¡ÅósÜ40h.ףط¬´‡Oæ½{Ha¿Z4—¶äÏz õ(É9
-¥EªGØ
->"\˜çwl°tÙñ™‚¸Û.
-TwÓ|f}ñÈ.)l´²f0A&Qy-´uL¾ÚW 2ƒ
-vÅ®5£=}x.‰Žo]bä§OO“ }b2Fû–)É)º•¨&GÚJ3V©¬@-G·z9RœA ̸þ¾€j0‹uÅ®-#==x0ŒX‡eèrŠ<nKŒlpow²€kËtm,ÁwbP YN±gÜý^6Z§uX`Ø:ÛÂzßó«¬TY¯/¶ÎíîÂsItpÓÕdý¨ÍbÁ1Ü£œv­I¡Ss Z|Å­ïN£Ô@V`T“ÅGHžÚ‹¯ø¸Üëï ȯb}±µåHɤ·‚+pjC\Hâ­á8#”MjàÉco~ÐÜ[Ô¬ãŠ1B¡d£55Øg;]éµÒâôå6 ª¿"Ø[kŽöðáÁLz?–û°Ž˜ËææN–Ã’åb±«“Õe¢­tœ¿¸“È
-Ü Ùc“OJ¼Ó2æöû êï‹XWlm9ÒÃóè­¯Õ&‘­ê2ìq i¦¤(³Ù:,­gj‡5Ë7rŵõ~Ðxk0Å[ã—Îh‡GmT¼[kŽvóáñDzŸ™vqÃþAâµÇKÎõ ƒ #LÎW˜ÏĬ˸&<ߣ÷ÏëŸFvðœËý’_gPÿ^”®÷F{RÒÀgÒèO¥ÑŸ4ýüVá“’»â.|:<ccâèˆ/S{»0vݹ•]zRœŸ¡6L‡\ÖâJŸ]4¼Ñ:p ŸÇDNu2(-ûBZ5È Iûâ䆵О>ènù«b'‹kŽ \èñþ¼í8–»Î0ð4MÇrU{ÍÆ\½½8m-†cX{ÃJë@Ö ö
->Æq-¬0 ‘±¯TwY¯/¶Î”õtáÉø‰í"&™©#?¼í8v²Øa,·4M»Æ5Û£¢Ùdηb­¬cú‰Wwž>c…iøƒ²JPf½¾Ø3ÚÓ…'Ã'æd’ j3‡N¸9³Åˆ\qÁ’Õ↽Öj1Òe]‹Ç OWZN 6d4•×Â:WãO¯T‹Y¯/¶ÎŒöpáÉô TÏlQê±á|Ds& šåÊqîjêq/¹:P=Æ¢•×b€xh¥u kPÁñ±ƒÐÞKHÝ40È&›`Wl­íéÃäxù9ô”«™,8R …À&·<“ÆWâI†-‘Bs 7xiì°âqIάÐ:5ØU 9ɽËàµðñ\nTE¯+¶ÎŒõpá™:†É6ØBËæ®àxZ±,s”
-‰Ë$î†ÖŠÕ]H [1äõy¦þM{•Iƒ°T&ßGP“ÿw¡
-ȶÍü„Çžb*ÑÜ‹Þô°6ÚúÔÙ¯b~¼/Zc®x“œ¸ÑòÑ>[`LoíZ©Íå84{þ&þSd.©b‹ƒ/t?Öå³èˆNä2IÏ°ä¢
-ïƒK˜Úé"Kgq#µàÿ@ëÀ-:ÜL™Ñ²CfϺõ
-endstream endobj 184 0 obj <</Filter[/FlateDecode]/Length 5796>>stream
-H‰´WKÏ]GÜ[ò8$[‚“y?`eœ "HI„wÈJ ±Äg,Ë,üï©žéžî3'¡\Ž¯ëvêV×Ìô#çГ?Þ¼}þì75¦ûÑr §w9O;ûrèΚZž`w-˜ûÙRˆüa0ävöˆº·Ó÷^¯´d ‹Ap¼§ãJëÎè|Û408Œ` 6©)íÝ0üíù3w–šjé‡;Swe|¾•ð„9$|ˆ-EORMÙãïâsiŘR*“ܹ +Ü¢÷ì1ÈËt(;±¸§Ücú‚‡„¶³¤’¯œÐ9sBÈÅJ!u …%W .E¬›´”öfÁ²7yÜ°‚ðÁ×P !ÎÅT‡ñø“Sv¾†­¡fã¬s)Íßj½%µVðpB\fks-|ù\Ï•A‡“7à27Ÿ¯Á
-Ô†î¨Nô˸ð1Å਄„Š›?êM§‹Nbž
-º‚bËßR\¹†–³•Z7NÇÏ/wÕyÌp’ºÖ·ßgPÝe­l²2ÓãfÀòÖ•˜éJæŽéŽ!ºpo£Yb:
-ô!\W*‰F;ò?_6ÁL‹MáÙÖ—µ¥ƒpÈR"2ÕžùÀi_˜ùÕг—ÁXê\q‘\Ýhd ‹Ap˜ÑÅbay·MƒËbÑ«Á&³Åzwá{ È]2ËQ¡zºã•Kh_ i<ãj/Í·¦'×Ðcc»†Vúíz¥´˜­ŸŠ{zyR„”Êb.›
-²½ÿ OxªÇ•-?ö]ƒê¯—v¸‚mÊ‹öæÃ#AªT1¯U×uYq *¢/fÇól©Yh§Â¤àrõ)ß‚cñm£µàаÇÍ‚êãJÖÞa4»¤Á&XS3´7¹
-Òi'ÙT14uYpHiRˆešG¿õQ4»Ö’—E­¯æ,Á(™qm‚̪+XŠgLhÇ•e´U¿I`py¬Û‡ Ö„íÍ…G.‚¤õœ¯–w]=V<× *àù¥×ÄH ¸2ôÉû{°“=ÎÐ*84(ÃÂ[ªR³”¶—›‚nj±Š]š”!Üøö@¼úøÜ#Úuìv{ÚqLyŒj‘fV/ ȸұâvh N+—ÀŒ[ê6>Å.[ Áéæ¶qs 'åè·_ŸÿÿªSC5ÃyKž/þôü—-‚ Ç{à‡G’ÔYÁ#í
-ß_ Žy%d¹°Ú]èqSÀ ÌrM°¦eho<f%oÉAÛ²V nZ]ÈE`š•ÜpÀÙ€ËÝP{Û‚qýè]i-84è`\çACë‘êÜŒ—¿"Økj†öæÃ#WBkh÷œãfÓBñ@E\z]ðŽ“’’4š–J0àr95ÆÓò­‚¬a1(^üÏ„Í*¤°i`P]fÁ&ئ¼ho><r%åªò+ë®uYð ó@;= †ìQ”{„=(pyTš·àÔrÛhd æœ/EÚ«°R% u“Àà2Yôš`›±°Þ\˜ó6òÅðrâ-£F?‹à¹¹àe¥(§S«UpÙÔÖÔk‚±>”Ö‚$a(\q*Ç•õrÅEƒj4ë½\\ÍlÑî.¬ÝðWýêÕ§Ï_¿ÿáóû~xûéËñ[Â^üñåñÕ·Ÿ?½ÿð÷ãÅ·?½ýøî÷ÿx÷áÇ?¿ýüÓw_>¾{yüzD½úQøšc~Gÿù¯+è÷?ƒ9»“þâ«pÛI;žG”½pÜÒ§ÇÄèÜð¯7¼ä:N cTñTˆQ6±²µnÀq,(Péâ58`”ok´d ¯pm3ÿfÇ“8Ôò–æÏÕZïÚ8µ9šÉEçŽZæc»ÐZÐjûß¾w‰”4Z¥è«Ô1†¢=-CÐw€gôŽb=Óñ4Fy7ÓÖf:˜Ó¸ì A›`Ä o%Ó ![^ÆXJ2æ":çÞgGÈ”cŸ†dJ¿…³LMüo7Ëk)ó´;M‹~úíftªNÏ5¼Ñ×iœ°cAshï³QL°äDæU¿V¸^ ¡ø Ž—ùZJ)¤¡RCÏlOîc%¤3¬nÍÕЕ™ïÕ‘ŽmVÜLˆ¬—äDɾO'µ³éÎ`€ál~Úãɾqa°÷z—)»Q8p¡Õy #8ÁKvý~ø¯ù^P‚aÎ<8g¨—Õ ":ñC`ë|sÿf¿lzÛÖ•0¼?ÀùÞ8‹¦‘»IoVqÜšÔiqw-"¶4©C‘ŽÝ_©'rrMÒ¤\!hcØ#‡gæyË“|ð
-sf.ß+¼Õp!Ý]¾ùûýâ›Ín0©öy–Æ¡HivC}³×v¿g—qxP ;SmÞ‡AÙQã¼£3«›«xV—Ãþa™R3ß7½j.cxä—Ù3Š_)nïý ÏÞ ¬J³oõã{ýaþæÁ; 2­ºkÓý¢Ñ3í;ôK:0.¯€ ËšzßÏM’¹˜™ 6W{äå¼&ÉýþQQÂæú›<ä;v™Óoy9œÖ$íóff|¨Èö›“OG³<IÆFùHž¿;ÌÞ]~eæƒ2#bo¯|7”W?ùû¯‹$ÿÌ÷Š§ß&g”™¯úû¯ý»×ÙdÚÿïùç Bþz{h=ñÑqïŸÕ‚qóáž9 ¤s­ Íç“™}’<Œ bÊB <è÷ö?quÿaöŸÚŒÀ|Ï{S™Õ %aºŒŠÞĪ&Ž“EfN° |ë4Î- UŒ )ãlÁ`PVŒ•ÛkÂÚÂɧ٠Kb2ó›Qhˆ`É‚lÁˆùwÔHhš3ŽD]ùT˜¢\»¾rªRÜVô[Škš¨´œkãh¾â©Æk¹ûrk@Í(RÍ0"¿ ´&*ï¼a3Îœ¤p&á_m‰‘˜ñ¶à¸˜*ª‚ºñTLó¸kÊ
-ŒH@%êvÕ*Î}¨e=:‹D¤õnÁm@Œ…D:² ‡w±˜†ÿa±ß1y¨ãÜbðÝÎÆáÀö™H’Ä4عøŒ ïüLdT]Zk¤Ú8‰¤*^€ÂÔÚ=1®ÍVE)¨Óu){¡ØLè9ÈÈn²•Û^Av3¯z
-›' LB÷ÇõŽM^¦ß&gù3.ê†?ðÞ4Wh ô&Æ̸M µµÐÇàÜÒPÅš2ÎÌÞÁ²Bp¬,2 êk€XÛƒ8ù4;‚$ÀÏ:é©êyˆÑóИ‡@„æ¡9ãHÔÕÐ#ÕûÊ©Jp[ÑÈ©åœ2¾«3)Õ埄Tcndh×kž°$&;à41 ®7!‚¡5Ö2¤ŒÔú®–ÛÊs!“X0qƒRÚÝ’±]¯ùˆ‚¡¯N¼~Ý=4§%Ę‡Ð¢{Àô»óšåï‚h! ^¢Z6ü2ŠR@œ×ÁæŽ$ a‚¦õ-žkLËÝ×;[aî÷:bat¿×1[o[6³ÃÏI
-gþÕÀÌH|o‹‹©¢*ˆ›Ó<îš2À8•­h[pÃf*®—F—(¨j°åÁs­å\3S;Uvpø ê- 3rʸnæ¼öÌáuAÛ}‹ˆ²rt" Z3:OšYÖ§1áØJHÕãGlñ}iæ[=Ÿïñ#–§Í˜¦ #,€«s’´rä,ˆùºÕŽ8¯·ùé=zéo½lÎ_bÖŸM ËÊèþ¨ìÂŒB@¼dFÙÔ¸SÁ„<J$ÜÖ7Ta9ßËæ~w Z³Á!ìMªÂ1,)É΃1l[áÈ®w­Û" ð³nO¨ê
-e q'E˜Ã9Ž¤X`8ò0[ˆ¾S³Û ‹ u›X"Ô‘GÙ 얬(FÞ‘H!,"­íÜœ9Ü flg ¡Ø¨»?~‘4Â=ˆ·É(R×(¼€°àܼ… »µÅGLz¡Q¨tU‚maIH 0daH]¢¸îB­: Â镈·¯u‚&D§)%|Ä0“ÃAs³w„˜ŠkÌP\[ô;`ÐÄ®è¼AÃ@¼Ä Ù™.£(ÄylîH’@v!hŠ˜
-&äùS"ᶾ¡
-ËùîîBw Z³Á!ìMªÂ1,)É΃1l[á–»~BtšRÂGL#6³_O‚sªi¸g¨†Í\žƒ¼ì[©ßó.Žd‚ü©‰xÕSØ<e
-ò¾?†¨wlò2ý69ËŸqQ²O>ÍÆ”3ŒzƲÔÆù…¸IBª1þvhkÕš
--˜H’Ä4Øe>Ì«´D$ ‰ˆ­„ÚV!“Ø8Æ›u§k¿]×Þwº†¸‚N×:]ët­ºöQšwºu­[×\–5ÈŠ´SµNÕž§jݲÖ-kªuª¶+ª6!:M)á#¦ålЉâ
-RŽaIIvÄel‡[n¢jº»6z¥6:ìÚq]umô°®è
-Ø#ë™ÿ{{È
-ÐÐë ½fŽ"‹_
-Kø•S…g,£[ªb‰XÄ +Ã] ³—qß«K[…$Ä(ae‹ƒ°[²F HH‘
-c_7‘¶0™™Ã Ê·–qÖª¬ç÷½ž?4ÿ{=óïؼ6¿Í½fÊü%F^6¶8)!¢FÝò !¢Æ¨ÖªÄÚBkšd²»¿|‘#4Ò=ˆ·E˜&ŒrDâ‚só‚ì>Ô$z¡©­Û­tU‚ma™†`$À…!U´v\oqÝ…Zu „Ó*Oß½•´L…–œ°$&ˆ3¸lN­y½l“UÁa˜uG3ä^”ÚÂ9lfIU8†%%ÙyDÛáV›?‚ ÑiJ ÕgÍm @vëÍ_HÙD’$¦†§êÛ#
-Ä"©ÙM/u]Ÿ·Qj+©#D ̪}jYN7éj¥
-xÍIù1@¤# ²æZ ˜®ÿa±é1y¨ãÜbðÝÎÆá -âÛ’éˆ^ô[5åÖšáH$Uñf…ù£‡$µûÌ¢}Ž¨ØÌé9ÈÈ.•ÓW=…ÍP¦
-ÏXF#uƵZ–°Ë:iؾ†»ö?âË aˆ¢Wñ¡Û®·ºñcu`š–’ ÞÞÒjI„Ø¿f×Ńò2ÉÌÅlmjeËL\BBÁL©yÐP™Y¤Œn ©¶º:ƒÆú›Sí–mcviÁÎ9"-åj¹qpþÊ¡žA‹Û7xŠè9e¬–ÚÖôÊÌÖ?Ÿf…M»/^ËP8xªU#Ó³$öEÒ Õ’
-}
-endstream endobj 185 0 obj <</Filter[/FlateDecode]/Length 4444>>stream
-H‰ì—_oܶÅß ô;ø¥@ Ô±×ŽÓ ûd{k#€cØ´÷¾\‘Z1á’
-EúO>ý•´»¶d_ZÇNÝ¡¶z âõ‘—?ÍpÎgåÌ;Qü²õë?ìZËn¶ÞýøÃxëçë…Ò†‹í$“Š[¡kÅÞÖÎ{íî~YýãnrQÿòç™òö—­©³RÏÛ¢K¦üJ%y@£Ùb))¿½U'úóòWÕ™v&2qÒhfï‘9÷ÏcXQxå
-ç·n–Âñ‰¸”¬:@Ô–ÿú}‡=vøΓ§â”ù¢L…«Ö8ûãEˆ¸Ý$R©éÚŒË4õ…Ø€û“ôfŒºYVÐÇFŽiêÁÓ- 0M˜
-•õa¹Vj*ª¡”¹êFSrž¹R°e€ øà*ÀÀ—¼MY"кµå /ÅfV,Ì%0|R©ðN–2²«yP
-*¹`nݳ†–
- ²´Þíן׈÷ôt˜Z0
-ñø»§Éow’|“ ï2¤"k%U›½p„*ªN
-ÞMEœ&Õýè6ºn¸ÂÛ´4Ëi™FlË£[5ìï×ys4Ò!¼e}Úc£ëqýÀ»G@§‰m¨Z±0ÁÜÖ´©ð^–2ºní° -„œrdêŠÝ
-á:z ¤IöM.¼ËŠ¬•¤“¯›H†V»&L%¢âx”E¨ò§ê4
-Ü|j!]pî†1¹°Ì³gçNJ<™ŽÍ"7Exˆ{
-ÊÔ!½û
-n´Û¥ý⢜ƒ—USÜÓ±oÅÂ\¿´8…9¡Šüf¦Ö,’ZFGò`±`CGqºD î̼TQa0uÅn
-@¹0®ãF¥Ü& ÂáûOwýiðŽØ§#2³Ï"qGÆk^žñÈ„zèÁÐû³Ü¸B‹d®¥-#¶ÁèºbYãí,Ÿê|-·œ ¨ÅŠÂ+dÒ¯…d“åÕîA7ÎŒâÄŠ¯¾,$2gîéé6É©“. yT°¨u¥ÈÅl©©àÞvSi¿¸H»„ šbâ|Úó]Ã67lsÃ67ls±à Û\L½Úæ€9ls›°Í¥–•QY ûÜÿ…¡ßç^ë\×9 lÃ:ñ„Ö¹aÖ¹8×¹ƒÍZç œž¬sÛ£ Xè0ˆøWºÿÃç–!“uØç6aŸ[f‚SËòL&qfʇ\«O½‹aôf'V›Âñ‰¸”¬:´±5åÄí”ù¢L…«÷‚Ô‡#æÅ Ý a@R'ŒàôŠ}›4-Dh.õi /Aªkm?TyÆ^f(S¯‹ÇŠ÷ØJUW·£Œ}7S,ù2ÞZ~dr–Hwón÷ä<7J@–Së¨z±ÆÜ€;rôíT×Ë[„6V?\çiÃZê=ˆj«È7WÇrûÿ)G% ^‘ŒÉ…e.XË&Δx¶›En
-¯}2¶B¯’±CX9€äl j¦Ðk$”'w˘…¶ÞåÇ‘«³ððàB5!°ÚChŒ‘çp(ˆµt2ÅP|‹åó€ ûpÛ”l(Çɺ„w[ÊŦ8Ђ¬£ÕRgu2u¾‚N ~WBÒ–Ê5
-¯›h m
-^íÊOÃŒF¶µ á:FqðEK
-endstream endobj 186 0 obj <</Filter[/FlateDecode]/Length 17759>>stream
-H‰lWÉŽ7¼?àýCm.p'óÚ=ðÉ€OÆèªiy;H‡Áøÿ'r#‹õlKr+œE&s‰Œ<Fíí %?öVó™j¬°z|<;”Oª$få,¥eÆÒIÔôÛz¶ª‚¡•y@;¥Âx<ãhUŒûÙSL †3×^ ¤ÑÀFgn=ù ãL-³qgNý„ZøØÖÏ
-˜ZËŠ J[>ô¢x93n>L&
-€kñÙ¡XjÛqüÈvb¨Á‘æI@8ࡘxMzW=S!v€“4* ߥ$–Ißg'4ä)4Å+§WA÷`𨆴0ûù*µí¦9”Ú6Fïg.šW 1×P(nŒÕ&¯EI˜«¾+ 0L\\ýÚ HsMífœÏˆ€˜G40#?zu²€·+.w0Xµ¬-bQmÚ
-~l\ÈŠ«ØÑ‚ÞõëúóóñöŸç#úïÛŸÏG<¾ûõÛ·Ï_ûrüñßÏ_þúíÛÿŽXèû# Åÿ—JÌöù,=# Q¾Ö?ßþx>JåðüýGÿ‹æ+¥¡µ9*îûú|üÎ÷¿½=??àw8Ã
-p&¢«Ù¦F4f;>}Þ_Úþ×ñÕÁÐQûjäb—”Qc³Ø'Ï . ‹^=3INŸh4£ ]u4Ë}ÉBMé+ö¨Æ˜ÈðX†•u)V€m”6ë/ô h'Äý~7øQÑyA_€h9f+“›ž€´Nf<ºuQGÕÕ¡ÏJJ„Ü„¥]°wob0L»›–¬O@TH+`ÒnF›T”Ì°ˆµbÞ‚Gj¶È¤ ã€'w96£GÁðïNd#éÓ_<™Œ†ÇIæ ÂNÒlĵ‹²±’·Ð ³í7lå*0v£TÞç”S‹þ
-Ph'™ÀÁJ>PrÖª4´ÜÅóÆ]
-‡ÈmI8v ½-ù©…dÈŒ¢$?]AØldLßN6Q*g`œÂÓ/é±(z ~H£6î¹ #ë°F¥„Zm0wÜ sp˜.`y0—uS
-±æ<¯' Ò—3†#«^ˆÚ—þ¨Hª lJH
-VÍ\‹2|X-ðœywePy‰
-)åc–x3¹
-ávS=9j‰ ;‹°z?)•· ‹‚(Â4'D0}‘Òì ›%,Š©€9q8,9íÓ Ê ¯~X£ Ê@ó:ñxà¿
-ƒy3i¯.3pÅ(=ùi$§ULËÕäWè– ²†Ý”^º½†Z¢——ï¸nX0$¯*(ÀÔ½D *9•›1º+ªñJ*Ø•Ö_*
-0ó xq%Qf‘¨ZIIú…75Oâ,(—2B]uä’8)±lÅUy2¾J§´I/-Ùeºj›µÛ«ú3pLÏýf<Û«róÞŠŒ1-OÛcµµ 9qsËÚWéìÂôYC[&pPS9
- ‡8^.eeGßä-"ù~â/‘•#ö—g÷è“LpÝOxí)¡mÁܶ¦wÀ¢ñn¦©÷á¹¾øaðÇ—ÄC‹ÅîÞz•
-¹ æ^Š‹y–¯W*«×Y¾^Óºo¼7@«Ø3‹L¢Ù,8ðL¤²Î›Š¹po@àI){ukÃsBˆ{__AÀš<q=q2Š^/T¹ÑÏÅÕIU—'9Öó…þÒò¾Nþ4ª¼u‘ªf@'öÆÀ+]B×Ùsh‰½»TŽ›m
-HÉTÚG†ÔVëÛlá2„ª¼!®ØÜwS)íTöÑ&}úËÔ¦É7ãÙ]kº®NÜ'ñjÛËØž½m³}ÿ﯊àççã÷çã‡_Ÿü
-G8>}y>ÚñÝ÷ǧÿ3ö·ü
-,/Âñ‹«æDÂðµ$$ñë\HxÉ’‚,1(£¼r-Zº¹Ål`Ö™Œ:ÜÀJÒÐÈ$l†x‹vScùž³åû"”²ª*ä;Ƈª˜B4¼–îÆY„Aó
-¼<dU£cVÒê,üjÙ(-›¥ª±¥4ÓœÕS4U¢1̃Æt"Ô„¸W½ UÝŠ.:èêfíO'–Ž¢ E_ ·(e‚a`Õ¾
-º†¨å?Œ€Ìü-·²ÎDOšqá•C¶¢’s3”ÅA¸õÃÛ¤!>T¬
-•E"”owÙÜtU4Çþ8dOš¤×ÀÃCV¢Ê±'´Ôådû‡ ¢Ò¿dªÎ¨\9#ï^ EçÃyd|9u[´|¯C­EÍ9mÕÜÙu‘]p¡q£‹ŠŽ9€qè^'¤SÛü˜Ó;Hx®Æ¨€îÆ)GÔ¤ÀÅäµ
-‰¥&´ t\ZÖ~pœèLŒË|!˜€Éù™=/?||ùÂ.¯¼¿¿¼»¾Zn/¯n¯ï?-ùd9¥=¢sЧ$j1_ d+ÈÍ.$-äçáwà»1᧞Ü)r; kœZ4“\¤2¶%…•,|NŠË”†¥Ñ&æ ¤… BÏ}½‰–jŸÈ„ê–Ãñï~ëá/kÑ„ÞÌ}éH:¬¯^}x{öøéÝíñÓíÃýåãÓò%ÅÌòö=jøúì½5Ëñáî÷‡?ÿþrùûõr÷pu}²üƒŽ}E?^¾pZF(µ§çUÜÿã[êÿ¼o{ð]üáëû«žî>>üÖ‡ë›Ûûz}¸¼º¹^@=Ëw—÷7×'/ÍrF¯¸ø<Äæwôc~ä7øíWÄ>/aùvùég³\á“ß 5Ââxæýh¸EcÚÈ´A“´p.󇿠pvÅ÷p¦Áàã@€O¾Å©•‘Õ¦'s.ƒ„¿œ88l@ ¯PE¼`±Á+ø¼³ø¤³¸;Zå ««Y•€Žø ÛT
-yžXv©ƒyyEn_
-ãDP>ß ðÎ7u'CéZ“‚}@ú¹‡‚<m{
-‡K¡W›vub˜[&¾ŸÇÎðLþsæð‡E8r~)ÌÜV’3Ƕ•äéO¼²zÑWG×ýY]=÷“SIuÛÿUêŒܸ}ê¯QFcOgT’Á‹ <ŠCAú®îú£8?B6:*‡_ž'gëÊÉ‚ýRCI`g(”LÚ,Ž—iÞ±³§iäïÓö‡ÈÄ*x¢ÇcK5v~Ãì~Aó ¿7ðE1Ùhùú7N7Ð/%`*ýÓÄRçUÈé\\N`3Ðý:È´ÐT’p1„Qä'‹Öb½¤É:=Ïz@[
- Ϲ-”TWò3lTYy)½1%×qµ‘½q㛌U+ñ•.€†qA²a0H•reI¦-&-(–K Î ì,Ç®5JÖx­e‘®ë¾'h;ù<^˜s/ü§|D)L†xµ_¤ëKÊBШC‡)Nù¨äaa@³¥ÐËñ&Sc·*¨²uŠÂ?ºUè`Š“Ø­e@§z~â†^ÑE†7F‰˜k¬`Á©"D‡ks‡”'d¬DFˆY!Ë-×8>]ŒªeFÈŠ
-«!`è¤Ý̲Ae?a€çàö1@bc–yrÏÅÈ=gÞòÉrŠo)žÔì`ë àf¹ûvçÝ` í̾­¢úËiØð4cŽ¨-ñ
-ñئ»D£ñj%ÌOdUJ±€,A—™Ö[P/Àx%·= kÖSˆì!Äà¼Õ þÛv
-:In 8¼˜•8Ä~ÕþUo¾”Ü® PˆÚ<íÀ5ñþ€®2ÞHɱ÷ïalFVjröÓ‹,¡zŽ
-Ë´LœÈ á|áIEÙ qyzš“:¾Šéj7
-)+”Þ’fH°ˆÂÿÏ©Ñö½-D—|ýÙ®:Óˆð›!L¨’‹cŒ@c\€aî¸ÍÓV"P GxÕŸ3Â5 ]t
-\Έ‘­’Â`ÊúS0ÝÂ@o†™‚Ú‡Ét!%Gnÿ&Óp~ÃwÀ¨ AüêÁ<T½˜ç\µ=»+~„+ȹ?-ÆuÚ2¯á3Á((ÙÎ@ûWЦÝ"ƒ•Ü´b²ÎŠç®`Ì]ûp<éy)œÛ%;Õ`öHß ÝùpWPâ´´TÐP„¼ºñNŽ‚ 5›¶5ND8÷9–VÕ>öFD 1‰?‹Gfß éc3ÁNñ@(¶<—“qó•%ùLÜK-m×ï’„3&¿°Ë²Ž¹6@®'%‰³aSPz³µÔ²›‚B.SeHÙ`ê}ô«×f¦€'XUFñ HÉwÀ/31fïP’…ËÑʈó&3
-½æ£°¬Xg¾Õ‚ ÄÜ;‡´ .ß¾DH^2·[±`¬aTÞ`Ür… ²øŠW«
-§ZÈ$;oiÑK¢Ù"D áDs’(–O"%dŽ^é’7JÍ[èàYëþÛ]rU=÷‹;§Ã6ž' a?ïàx€Û/ì×Úæâx×yÜ)š žÅçø蘜¹WoÅ
-Q½AlÓ\» 63l±úãš-±bµÝsxÙ¶=²jñ×l‹lóÂm4"—b2ûÃÑ%/.n´’1©Ç®z”€òš’—Ëø6C¾ý°’$…Ë<oæ§Ý9ü¼aÉ7]î}×^ºîH›ïø°¹óÈ›eT²)ùŽ0›¿ÏÅÁôG2Ú²pÇ(Ñq¤Gæµ)OéL¤©I¸¢œèX‘³íÜ'zw¥Ã§‰ßþýý-?þö2³%Ll›YIÏD¹ú#NeN¾ÕŸË§×bGË“d"×:ªâò|yX+†Öy˜= ÝÆbÉ5\‹Ùj)½,5wƒî7lbýõ3¿¥™ÅOÛ†©â
-” 0ņ@GŠ0èÕØMµ…c¢é„5›ZDÚ*Æ=ËÀ`R…þŒ#€Â.L7‡`߸+ £)’c uõÈEk³:=åè/e[ÜÜVQkOѧ½„iì9”ÎvêŸëÂwJUlm\ >žL§âúOaÞ8¾½gêóq½*Š«(¸v  ö­Õ¶›˜ø#bÖnâäÓˆéÞÄ–6SßsäŽr”5†íáB±ôWÇĵp\6²{éžm`æÓgÅÍ0$Òx.x±ñ\õ†"×Z‹0n»ùÑ¢C à– §iÞ~{jœ±%8 ¶þ؇í~r³{|”³Ažt­èö¾É‘D®k“Zk^·0…<Ù<aÙc^aj¿;ʠץ椗2ùñÖ¢üÒx8±L~ZŸãðš' rk<¯áãaŽñõIÅïzŒ¯Ï4<nß0zÇ~¥`Á†?”%Ò âMÉ,á@Ô‹RöFëÀuRÊ7®Ï¢?ÀQ
-ž8w FÑχÍÚf5¨ê¸Ò aØ×ú+ûô=øÓ¨òxÔMªÚÙôfàÝ.¡ëê=´ÆÄ.S rs©€ŒL_·dÈl º´…Ç°Q}–!žØJ÷RíÒni$zÑAM}ZèÚ꺑x+ñ†í!ÛmÓöKþ?^Áïo¿½¿}÷Óûþ¤Gz|þåým<¾ùöñùŸ_¯ý%Û‹ôø‡ JN2O
-‡¤F㬳‘ld:+Í ÁYKMª&»4IüäKÈù¤.…°ÀC$§þš9lê²raÿšu®›®³™:ë즔B0¾­†
-Ü¡¢;”¦ºŽK¤¡—ÀÑ“ƒ¬1ƒA+b¼Q¬­“_bˆåã*Âe7]iYÞ²¸þ¥1B8ïòßWõšô¸b虿%&`þ›‘,䵊ï
- 2ÊçÒÌd§R]A«¦!r—Û<†-¨´‚>«%ÆiqôRâÜ•¨Ü‹9O•à -âi™ÑŸ ‘ñKXÏ\³ÖˆÇäyÖj‹}BD†©Å/î~Ñ€×Åò¨Z\DVÌ”,W@ýªï€wMÉ"dµ™Øýqzr%IšÿŇLÜpö‡„ª:Nú^40Q§I8(JáçEÝŒðîÅàµzç¶x›‘«Áï@Í•õ8.Ø‹»ÌÓݯÀ•g»Ÿ EŒëqQD«óK'ˆÓdy^œ\—ŽŽ1 ûÀà›?…W¹È©,M²ä
-#éÉÕDœ‹9{£ÐaÞ@ùQ ÀfÅCµ(à°£* ¡“)^åf
-PØ5` (‚µ´UÕHr Èpüï{8$ï̽»rU×6dÍÙY‡CÖõf*"Íw}Wjiyn
-'h<L̨’ 7}æmLÉÀÅ©ϹP’÷2‰zV-ã0‘"Èεn‹ühâ™A&j «ˆèÑK}!gbËØŠWÏF ¸jåû­Åµ³ð AÈÜ*JÞ†èeri2ƒ¯eA
-ÿD`ûUÉÁ9(ÏM¬üÔÍ£.É<¥‡CÔßzs“š²^ñÑF7_0ÚC<X~l~$ze”1‡$!ѪÎT:¥™B†é)‚ƒJÆ­ˆÄ²Þ3niÈä‹Ûø†æ
-Roü”3ƒ!àý¶úIJ9Ÿ ˜Z‹˜PV›¢rñœ#¨§¨$!É&ö óL]0<윢¤ƒv¬ÎpCï@lP¸vÙeÈ\C=hIÀ2}•Í¥$½å@¬ž…’áv°U ¹Tiv†HžÁ„ ²Å„<}̯#BT‘—r¦Qhñ<+{HÉn¡ÏÐÒvó\%)'ovó³=[FÛÌwêŒÖ´TIò4ÖVDPçPAÚsMnú¯ióêô¹©oˆóQ½PƒŽÍR¥òÌPÆC€4²I{Mç'!„¶j ˆa””j X'`{ÒEÛ¼M£ -pÍ“k 5Ñæë–ÒƒzË<… :% àhZæ'»”?Éñ8Ô-Ø$›­ËrZµ7€ ±XL+ Yu5kß7Z]ØL-BÜe-@•ƒj˜Ž>å×e;ND-Ѭí1²m
-Cß°üLÙ‰À”„‡Í®èœ§»)+mzó°é&I™`GÓ%x’åTF%¢“"/‚&¼ÓÑ°1*w{Ræ \KÏaP ³>¨ÞX¯-¸+MÛc³³Ìå¤á!g©«§gÙ>ð4šHD럯K·[‰:ˆÔÚú@KsÚV-¸bdsŽµˆ…àÚ³ª¡ãðµÙ‚ñÓIËFiYcÓ2JÉr”7‚,BÊëÝÙzÊX;ìæty¬íÍö‡X¶¿˜/Àpêi‘[¿û||Ï7?¿xywÿêêüþêÃíîîóôGÂþD?NžTÝøÍˬùù»Û‹7ŸoÞ¸V`³¿¼ºUèéf÷Û/ûûg'fzIg½ûÔ’öÛô¯${ ^Ô@7†Vðíã(@§ÕXé øòŽ¾`Îÿˆßþ ìÓ¦Ÿ¦¿ÿÃL8ëÝk¦ˆZÓDm@’š$5A8ÔåHO'ó‰K™
-% õ¬÷Ê~)‡œ%‹´2ÅÏf½ì}XIÑñ¼3G ˜Í ¾‰e{êY Q#¨x÷3öú;·d_áw<“$xŪãGÖœ¢¡ãf £h±V¹b|VúEldì\u£Mõ [í1›vuþV—ÀÏ¡ùž­q¨6—ã´8 wl›Ž)Ø…_bÜŽ™ k¶ÇCÆÅ'˜mdîXs€ûÅ1£iœs„0ù&Ù83#Aüz«;fÓ­Îßê÷^sÀû­ûaC|ºcË`öKŒ›ã1³qíÃöxÈæ`–ÅlÊ:˜Ü/ÐrÛí*4'ñÆ1˜ÅCÅ°>ë[Ý1›nu>;Üáe0¼ßº6ħ;¶ f¿Ä¸93×>l‡lfM§Ñ¹ƒ2à~ñJV²[D˜‘c0k@sOe¹Õ³éWçÏÚAàe0¼ßº6ħ;¶ f¿Ä¸93›Ö>l‡Œƒùí[M#PIScØ¢é‰yÖ⢠F®Y™ó¤TP–á–@,štÊF¢]`rt°èx ®<êu³ªÁÎ\òÁ‘HJÔ²ª¤l› É{ŸçQ K¢ÚŒ[ ´l2ûâûÚòç¬Ú¶ˆµ›Ò 5U6X†ŒmÛÔ]ÏuæKÉÞë,6¹z J¹ÚÞ
-Ñ0pô…¶Z a¼°4<¨_Ûäæ"b˜„ÚþfÅÛŽûæ[#VL›yšk<¤á]Náà~¡\2µÖ° À1|²ô Kyx†³š_j°ÜŸsŽÍ,¼8[ëGÜËB¬h†Óœ—å –ú0hÍHxÆMaw‘ª¨Y¿L8u°°UudbkÍ4ë@æ¨jòB$8”l›GSÉåÑB2x•d4ói2©¹ž ‡¼Æ‰&™áîYüœó
-´hˆœg ÛU”pÕê! ΔÏU‚ÄF:H©BÙ}4ÎÛ…BC\ßØC)ê;e>Å9´&ð¡ÁðÔ¥þÇpµs+
-®ÈÒUfƒ ®Z…æÓ<×,!ùÕf‰‹kv0ÛÁ…œíf‡KFà|¦âÇ7½ø#ÜS þ¯»ûûýÝíw¿ÿúáîþoŸÝ?›þ@{ÌôbóáÃõrÓíîýõþûWûßd›=4õSÌo÷w;:r0ˆÉ+”‰ªÍ£ ÛxZ¦
-YWžÑ$9xŒWжsÉÉ+ðÏÍåɇi-¢ƒÐú¹.ZÝÒ‘P²{s#L±Ù´%úÛxØ>Åå"ü‡Q°¦-~(2dö4šXÀ¼ø¨bªÓ»ÝZíŠøØ·¡—™»IYˆ³š\×=¤iPZÅD”VÅVt=˜nJí%5ÓA÷æFݯ‡”Z&ÔÒÇn‹ï É´L%úîŸ{ïc´jš{^iÒ˧t˜ç,‹óB£Á+¯ZŽuLš’D£?ÑöÄîcLı¨x¥à•8¥&š»ó½¶‹[žlÚ¨àâäIRÊ9†}ìéÆ$r)!–8Ôó„áh~Ü`eˆBƒÆYKäW 6Ø%Ø:C=ª3„äˆ%냋ýØŸn¶]9,ð™¦}$­2ZˆyÞÚê`Šêï1Cý‚Ã-
-ËØ-@ä‰N"ÚV0i«}R&Áµº
-½®BŸ° ¶:ÓÁ†ÒcþÄVE_Zíà|³Í7ëPulta¿¦iáÖcæ% ÷|þB»á`°­;Ë”9ˆrÑlÉBië Ñg5 £þ€gŸƒ•èÞÄŒyÏÑ¿kM6é“ö¡ÏŠ
-ÄP9½»éßÆO°ÿ/_NW5Ì}þÿ½ùŠ£#Ý#·£ç¦ñ…¢×ž¤Ê`µ£þü”yA•VºÕpv^÷ún3hËVmì 1ï[‘`*ÆÌ%ŸŠúâØ/·Ý6Ž$ ¿ÊÜ°/4ÛçÃ¥i{
-×€ d“k9IA(~ûý»§O53$%Ã’„7‚¦Ø]}¨êªÿËßIâÉÎ9g
-N=jÛ¬œŸ1}ÁdãÃãKæÇ[ÞíÞœdèN"¥d
-ÅI3í\(WÌ;&}®I™!×缩 åÑø]ï×Û5„s_Ãq†›ä^E[‰sãXd ñ5|7ùE³‹î±úÎ2‹æÕ¨lfšl…`iª®B¨e²âéðQ% $t'àM.4ïjFµûѼfy¨uãBœÑ„d´®›Ê.¼ïšs½&§$u{®ÞÎæ\L¨²~V m½ŸÕÐ# ½CAOtv÷L:¨É•EB+Ë¥Ý'¡%
-€`VÝZ
-"™ãìŸ
-àšÔùãV]<~U„C
-ÿt¤¨sÜ…E˜» ùPãÛÚYcW½³#O@Wn:¾Í“Ø¿*Ç¡8Lƃn„ÊùÜÚQÍÚõœ=Ÿw|®ÆÞÒE9_T$åžê¾²}f¿ÍúIļžÞk{À4“ï^ú!÷=k§û™µF˜”“ì)æ±¾ÿ–óïíõýùõr†bŽ óã@F¸—a@¯Pƒ™Š
-1ªÆ-K¥–*¶;®¸>ŽžlÚ³½“uõ§ØÒ^z¨`vâ â„;0Û0H Ç'¥æ‘kÿ µÃ•jëø¨ÖDuê$÷Ìbž‘ð(¦hÿ±–ó M™¡VCÊjá£låºÕd‘ê‚Ì1âJg1®WÓ0§¡Ø“Ó[§.¨Äï:ý®ƒzήÚÀý™{˜[zäb½
-°]T Ì°ÌzóPª«éßË·?èSL1÷í_WÛëÛpñüÛí%´9ÿx¹úùîËru“†ñ©«30ïÍíuÜYãp¼»ŸBaùãífùîëúãö2˜½É¦‹»ËËÕmwÒ®þwû°û*Ü݇ûZdÞ™K;â/øïOØî;ÕýÚýö;ë–˜þálÄ†ëŒ ‰jMÚD¾•8³¥›¾•[ù»¡Úê52Eś¨ pz]‘"Qmž‘‚xM–*¹tßÊîü]wÞxM§Ë SöQï#ÕS–îrq1_[9j+*ª:oøOh¦BÃAçä\7©°
-/Rj¿OòÇ C˜ºéQct¬j¥.e’AÁc
-½.hE®q˜¨¤8w±9 Š“fÚ¹P®˜wLú\“2H®3A$Ø S
-¥ñ»Þ¯!·kì6¾†ã 7+ȽŠª¸ìƱÈâkønò‹fÝcõ5œ!eÍ«QÙÌHÙªÁ ®’¨e²2êðQu $ˆ'êM.4ïjFµûѼfy¨uãB¦Ñg´®›Ê.¼ïšs½&§$u{®ÞΨæ\L¨¼~V!m½ŸÒ#½CFOTtv÷L*:¨É•EG+˥ݧ£%
-€`VâZp
-Zõ‰ôxˆ´Í9Â,&¯Gvë{¡J.4vÄ™Ø՜݄lÈ95oÇj1u32ûýf¼¶32Ð#>5™4¼dàìñiS¬ûq¶œ•öȇ×M]¥¡À Ôæ™›i7‰ év˜Ç÷®vÄc´Á=öƒ¤ò„ räpÊÙ—ÏGP9‚ÊTŽ r•#¨üAÅ¡ÊÚ˜z R2"PbPT-M4fÂ$—vÊ<Æö•¦lu(•ÉŸVD>ïXAî œvÿ\Ð\=V&ë.¾aÝ'†D†‰ÜVLè" Z’¡”ªÈîÆ܆ Ù75û!9WgÍ„u/c;;`'Zz|Úë:Všõ‰?Ï
-Äì²îHÏ_]2SîAP2ÉèÉP
-+³ö#¬ü`Xyu$•#©IåH*GR9’Ê?‘TP4½Óƒ†TVš¬§ŠÝÊÞòš—²JMíPW8FÖÇLȪ¤2ŽŽ×/÷Ùó~Nwìó» Æ();y†UÆê?ä B½ž GÛ:0W…weÇÀò¨e'Àò€e¹ùD¼BÏ$áaí`oj€tu|kÇ ÚÕœ aE›(VåD™µS?ÄÞ¬ë$paÆîCbi1ÝçähŸ$¿[+ŠJ]q1=YÖŽó‰z¾z¯»ìÔÁ.fnu²Ë=öƒô"{®8êÿÐËc]ÿ½èåöv»A;éþs}¾ù¼ša˜oÆ«Ñ×C/ò¥#X %&£àÏvêPQbÚ¡B£M’¢1…÷&•êˆG‡ôf0–å³q þ™à=f&Dò×:â$H÷d¹ÆøÞ«m7Žãˆ~Aþa^ HA´ê{w%O"ã8Nd ü`À zE8 xh:6ÿ>§º«o3»+S±Ô왞ªêºžªf P7Ø/:¨¯àùo˜K:…ÂfL$œ¬lFyj0½0„¾œð
-MðyM…Ø=9®oÊÊ“‘}¯)Ÿ©VZ”ƒ[ý6 ¼¢H~™$"iª{¦Bì>ž ·û˜¥#ÅIˆgÒ$mê°G¾AÝüAb¿èohgÕ[O\-tzHÖ‹_aè¨\å*ÑPH ¬ºå¯×GÕÎ’?€‹ˆMŒlhÉBzéiÌiƒCˆÖ] ¯è>¨0‚†‹½žX«2ÍHÚ‘Ÿw4‹à6Äa9ùqð8æѹ™<YåÙǨô<Ž9ôþ¥­r–ûÊÙë¼·î”Ö)³é2í¹qy…‚ãÆ¥ˆ[Xm\šûg‰®'×púm8ûQtÜâ"b®h„[Þ'.l7+<pŽRÝé”=”I+'ðòÆz‡ŒD9âødÙtªêù_ˆù4ÄÎa4YÍaC¾uNçó´TÚ­AÿÓëÛv:× ô¿„mc™„×Æ ¿¥ëa…
-Ôù› ¶~Å­UŽtÑØ©[ƒº©ƒ°|ŸA~Ÿo½ð+¸šš×«Ù¨\8JÖ9«½‹Ìw"x¤¡™ï(1ˆ‹(`û:ÿÁ¯=wš¨ÚÓuŸ}”nøm‡µÕ2¦ÖsMq i&¯
-,ñ-O<VØGulyâ°o,“8\Ư3eçäÊÎä,&Û¿åj0­jDÅ
-iGQ×ÉÍ&p«ƒ±>àeÇ°–dQ1Õ™4ñ]ANˆhHuV†Áõ¬YU„Û¡(õ¦Lö«2ɹ騕‰‘ªsÔ[j¶^°u©¼.–&a]Ž6å²_•K7=ƒ…7·;2¦“Š+wð&À}&×EAM•›œ| Rç9/ŽL|š x%Þ
-¨|¦KJ|ejÃÒ7à
-‡Õ~&G±Ê 3g+â%66d@¯ÕBˆÕŽŒs`ëZÄkªŠ™¢Í[e+,5©šh¾LG&œcü¾óÀ ÷3}ºÎ³ÑÉ.„»ô!œÐ­` jÇ&g¸SMÞ懈"ÊœšÙnæÆÞPî/X…ÚM´®c1QQÕ9Ö®ÖamGaŠ¼Š˜ #ÂnÚ{²Á×’l8ä©`«dÔFõFÄ ¼çõgß½|uÿðç«ýÃÕÝíÅýãòGÆž½
-\$8‡²uA8!ÙX5Ž¹iÄ8‰…8Šúò±Öƒ¥…ßò§:šéZ¬$GðÄ 7Þ"ÊÝìZuUÖÏAÀ*ˆÌ
-H:ó`€6®Ö3-¸Âßœ¨+í2o«²õ(áð!é–¡®ä]Ð š%Éð©v©ìF;g4IŠDç3×q ¨i•öž¿ •-¡¨÷TS>ìñèsád±6 ØK/Û Eí†RÍæ¾®8õ|-³&í&pÉkoOødv- Ƭ"¶M®ó#IwšJmåfyù%xÎ34lû‹‡‡ËûÛÏywÿðõãûK™jyyvww=º½øþúò‹Ÿ®Þ]þ(ÇôVÔL€îóÀ‚ScgM šþ·‹C?3ilœ‰¹¿|syqýÕf×/üÅ$•Þ^_í/ßî/®1ؾ¸¿z÷÷ËÇ#ãìWM¦¿^^¿_O¥ÿÓHò‹FíÁÔ= ºŸû›EªxiI«Ü±â"ý÷µèDý-RÓÆD£„¨4« ®l_ºC¡ç2M<ÆT™ äòáÔx4ÍhEwÓå]ÀWÙÚfw¶ZËå‹vyÛî;Hè®™”9[k§6€ý
-[ßîZŠ•@IY´/Oâv®çÈ}Ôó¨”b™R¶-õ›¤ê÷€†«©½% !2fÁ-msÐW<¯såÜÐBa˜@ÉC™LY‚ÉÞYâú¦Ž¤6a¶õL1Õ÷|Ÿ¨ÛÛ~éAD÷ЬÏQƒqì×8àã}ëP¬ëH( œŠ·É›jÊ8®fu ã+•¹ÄĘdX7P"‚1 C®†KÀBT11¿¨2NoAÍ©¢Í—DseÓ‹§-ºSI1˜IF}òa­ª >ñL/nÒ;ÞÕ^WØ
-¥²Å«…¶$b?NËøÆä°Uø_»œÆ
-Å”™Ö%ûyá‘Ãy¿÷ÄÂ4*(Ḫ¡Õa<ªìKÎ „Ò£¨Šµ¸qóNäõÓ†+øR"”(È 5ÚÐ
-DL¼ª—p\I#Ú‚Iu‰2±ô¸(¼:¯¯Êê*¿Ø0¼÷`EKñŒ$!.£0 Åí¹Ì{c]s£)L8|n| ¢ãœpbVÀ¨TæߌŠª¸¦òEH£/uÎwwå0xžŸ!ðÁÐéÉ„ƒ9 ña7Ø`ìAœçL^S­‘°!
-ü`
-endstream endobj 187 0 obj <</Filter[/FlateDecode]/Length 14501>>stream
-H‰ÌWÛnÇ}'Àè¤aû^Ýö—r&’2L ˆåîŠÙ€äë,þ}Nõe¦g–ŽhƒbÒÌٞ꺞ª"ïLgIjùNjåĻÃò6vd¤cÜtÊû
-ÛNûÈpQÑ0þñð@Š7éwª8Òg ö±‹1}VàwØSú<cçt¿Sì´4ªàª”h»@1|Ð||~Ï¢lð×?àÿ¯nN϶»7ëÅn½yœoŸÄ·Œiqzñ¸GgÊü}¾Û­¶ßþe³Ý}xúeu,¾á3RœÎ6›ûñ¡Çùíýêí§õrõk9¦öE]®îÖ¿î¶s¾²¨¨3ÞYát'£WÂRGNz¡\•BâÏéåj~ÿ~¾Û®?ó'#±ñê~½X]-æ÷ëÇ»·Ûõòo«§"ú;þë𠊣cqý3^ð™¼ùþqyõôp»¹¯À Š=VèèÇí­8³ûO«ãC)Î8G®;<øtx ÄÙ/üú#?ª¤~{bè¯xú7°ß„ïÅ?þ)Å__æäcK„ÂwÚS²«Áu§-‚Ź%;ÒÄq6‘ß)æÇEÎê4éþWRp2b$¢Ë}éãw¸7b$1•Tpý¥õ=ß<èÕœ,h$î› ³[vSþ3û;ðè§ÇÇùÃj)î¶óåz…d1渜€{;euȯvR‰¥Œï,¨ùÐy mfw‡ÆÀ,íÓÙb/H£ŠIz æg¥èg³ß+Ó§?lv—«Åf»„ž9[_¦×^žŸ]¼-v~ø¸Ù>äßjž"¡—›ÛÕÍÙE¼RW»§ûÕÍ É8Ù=×Ë}—ê/¹´ü›ÎßU7øZŸÒÿ²äx›Þ5!XI^—ìEâ(émƒsŠ©.˜œb± ´3 T¨´ªùØ㮂­X¯q}6–·>C4¾=ƒ+Ÿ’®‘5€£‹|ÐrÚØ3¶û|ßï^–Ùʇcq";)•µ™c`¼±ŽÎª@a/8Æv
-ÿ央/év°¤Õ¹ AjœÔˆà×Å.X2
-y
-ñZáARÐЕÜ&8‘¿L¹\ÚÊk¯ç½‰ìZWÛ êðU0{Ðæ¹/ã¬î>¯î.8Ü­M,ÑËd_=vwzÏ#œ¥<:Ç™ãBM³"±G×7x£k/¶7i0Ÿý…ãø¦q†²^“µq*$*è3'š ÁÒ‹V¢ÃFŽ(ïç[?>×ð q
-,5Ò¡‚Y‡Aáæpcò vß/l˜ÊþzGÚSáüXu¬…N#öà…qŒðEpŠ¿ˆª3ÒR­ƒ˜¸]vMiÆϨ3h:ï½kÀ"×iirØçÑb$µÇª‹J ‡1‹‘ÔÈœÕX…
- ½¾íáÁàFìž^#BœÆf‡ŸÔ—ªoo°£q²:’RÀ¼¡ ÈãaŠƒé´­Q‘:²•Þ`qÈUƒ­IΫ`ïÔ`£Ÿh’*LÄ`Ñ¡HèqBÁ[ëÄH,éÎÅèÇ:T°KQ¸=ܛ֊ÝóÃk„Åb±²”N}éõ­—9»¬…ÖåÍwÆèa‰¬0&gíRŒQAÙdI2õD²¨Óœ½ÌWxôˆÉat>ˆ˜ˆÀ¬Â¢2j…c?§÷R½D‡Œ&ŒTèÁ"¡êÛn,Äîyá5b‚²öʸ“úRÔÕ’†Ë&|6c]çtêµÄ©uÓÀÇ ƒ˜#¥Ôh$„|ö‚×Ìä0L™â±˜UBÜÃQ‰±T¡ò‚بPÀ"aз9ÜÜ‹záUÚ “°”æ†S^ªºZÕËÌ^Õ
-•cG¸•á°Çâô
-ß?Þ‰£Ùìl±øôp¹ÙÍùt•È±ÁJ\/sBê?šS
-ËÞóâèX\ÿœˆèÌ»4»¼YbBØ\ª^äq©3H]LÛ—è Šr9a ¯D•ò4s^%›¨à²Œ·hï1–Æ*&UtãyvQ¹1D_n#“Ë ESLédÛ)˜b„ÓÃü†Ã”f*äv–Dbà³ä:¤.¹ÏóÒ’ÉŠ©Ö×µGvšœÍx’œA :ªd¥ê.äU0Àžó:1Y2>ã2L‡P‡tWÕ“HüYZBΡɦŒ‡Ñéß´èACv9⦡»CI\É_…ÌNŠàH8ì5ìÒYЦCÂÊ%µ.•ò$›âåx¾Oôä±î ™¡h04îTÚ=#@i”8Å„‘;±Ž2E“¸‘›OxîãçnO<ƒÆI+ØXæŸý–›¡K݇ÙʺÂQ/Õ<É—š è#˜W¡©?®ÿ[)$+Ê\ÿ¿°Ù*på¥Ý ¬MiÙ*b•C÷b£ˆK\C’ç$rŸ/…NÒ"º201o©LÓ\¦=±è5Ï@eƒ–UªT†28쎲¤)ߦcb6Œ­^™¤.žHå$„U¼‹TøYÕGB`<3Ï2ü]b°4•AN%½<71WÉŠ§>Ìc˜b2* k™@ƒª  6ƒiÂüóU×bÉmDAþC¿²†¹H*I%=îŽHpXH0,„`l¯q<›`0&ÿ>§>Ô­î{Ù½ã¹c&ñÜZu©T§Îq2‰µj5\²îwŽªÈVšñÆ‹•xZáµÖöĺ uqAÊ´áÙ9
-0ò FƒÙ”n:ˆxˆrsःŠ#ƒ²ba†uÞ›p_dO*v°kàœ)™dEp¿Nµ§Œ]
-S4v„çwÕ\8) ‰×eCªhê;ZÛ°Põ“*Je톚IÈZ“¾€ì£èÑÖyuùº1©Ì„T-º
-Í–Ö7Œv5‡ëR1*…d“%#„
-Çõº¦$u…¨UF¤D
-8œ@Gˆ
-+çg…¤€
-ˆ–‡
-•³zgÊ¢(EFÖ
-©æq°®œYúá FpqMNtrwlAÅtØõ …âÄŠ\\{„¶š ‡‹Q°¬dFêa
-ñN¤^ºc‹®Ú.LXž¦º ?5욊zJg`¦¡}‰¤Š3NFgÛÙÈ—!,)3[ pO.Ù@g
-Ë]'j¦Q/~.4Ø‹!dPLÐ6^„à@!¨T]Í\w» 
-l ŸBâ" T’yñ[!«Ü%çÐp ÿîÒíÊÐåû„>µ}™”•Ý„=²VσJè%Š)”—
-È’$œ“ U—Ø›p„ˆ|J· ¨~ {†ú\„!¹•é'60+„ºÑb!éµ:L¡XX@e_Å45°ÑóSÆqˆRtUÇ´”ˤ“DÔˆp¿ôé¥{c0Ä -‚mÄ ~/}YQ\Ü,%
-'È(é/ÿWF}fsçb6ú}úñdÇ¢Õ ¿óˆ]“±×KÇoÇŒ5®éÜö‚Éãùs3‚§ìÍ?/ãÑ+?ôb@°÷¬­S‘Š
-¢áå ø8_Æö”î!4«Öd,Yº;Y¸M/#ŽnÓúÄq»2®ßjÞæ”^š½]J?¹þ~¾°û´DÐ1(ÏÃhÂjžìÒ\µ8?jªµf#’bŠ£W»pìØê2»­àa¼ö¡ÿZ»°uªóW(ÄÞ×fÜ]<Ù·(7§Ó{öï¾?OÅ—×õtLíÕ¢"æ,òðxŒ›`aŽ RäXʧˆÿY;&RA
-#\[rM Ì ¬z
-?AÞá¿!-ïó!¹’<!8Ì$`gˆ ã‘ÁÁ¶‚ñ0ñÛç«Ãßj©;“–-}ánUïCí:¬ZË8’¡fþjÆs5ü¬»<¬Šc0í`-+²É$AUá–Í^²‹#“Ú Ü¥Æ4Û4£R3×•é ¯ ´™cÜ>­Öc6’¾ˆ×³¶ýD\¼VBm6š¥B¢*È{4æH…+ÕG5ShÂêö2Õì-˜Ãsi¾¸à±ãè¾2·¾¦e¡v¹.Iä¡h0ê¤
-h5íĨ ÓÉ$c?ôf¸dÕoÕ­ã3ñhÅk­ìs×­­È©ä¥
-Ï.QР÷i¢´ZP± /…›C€‡6jðÅMä§4-‡t±vüpö+XQŠdaÈ5µdieIØþþÔf*F!c \”7JÏg^…»ÌÓT«L–£n¼‰ÌÎ.˜OèKníàV²BV1èŠÁÜÑŽ«x]¶7¡Ö㞀êΙzœBEò¾˜Š{ 5²r†YŒÁ8¥BÎÄ Ô¥_1ñ•“B`¡‚ÈÛ°Q(¢j?_·§!öÚÄX^fì}nR•jdÖ® CUtaðØ!?ÑÈw)ÒÔ&¦h4‰çO- VÆV­‡›1™o;j Xºb#Vé»Ágʪˆú/¯HI‘Õz@­Na7La„³E7"»¡k󬕲ëu©§"ع*¦ 3±–ƒ¹ø|­7²Êôe1ÐâÓ­”>·çÎ9NQ¨Ã@jÒæšLmÑBnN#3@ª
-Ùõ¼&)¨[¥Fʨ
-MYxq:t¯2i-N…·œ‰ç5ù"¥V` Ò"”î^$ß]³ô`D*·
-=VQNp¾(€5 «1W8c)ÕŒUçñW2ò&§¶æ>”–ÊikŠB‘‚P+^!ÜŸQì:ªšU¥f¢”l±@d‰.+G0>5½Ôtå6ä¨æšMíz–g¾87ãS”m
-ÝW*.Zfô×µ £Ïµ»ÂÄ›gb/sñÔ©$âE±qŠ÷*k#P›’¨X@¼ ‚~æâ"/£R\„E¢½–$§umM”®¥¯ˆ‡|¤ÚLÁXÓ†q!LŠ„‹ÂÿÆþn*@ž
-¡þ‡qb…£”  $/3}Ô½FxZÁ¥@àì$’šµY3„ í±&z´”mÖ…Áº¶t·ä<Ñ3ôüUp%Ó*»hì†Þ×
-®u£Ô £Y§ÒÿÒ>Í„U^y£¥–]Á‰½J¦Í>£¯U²¬6‘6¶˜‘y]ض̆¬síà E¸¸E§;e:´±R«¿¡æ¸ËLkÃ{DSJ³0rzU‚•-›1‹ð´¤SñIì%˜
-MÍÍ5Íq· ª`ƒ‚
-¿‰ ©óà^¡¬}JÌ‘r©ÄUÁéºìO!5—I™Ù½ð£;æêaP‰ZÊȈú5€R’÷ß”p à)MÉŽˆõÝŠ1)e
-BÛ¶h5QPB(’B„P,¦àJ† 7µË„s[¨Ò²¨ÁÙÓz@Iѽ€ Ž1L(t¢¹bŽsB6 fÊjä¹L/ 9få[×þ
-å×b+8™Õ]ƒFâÀh^2nØubû‹LË3æ9|1S}_ <]@_ïÑŒI¤©'Óa· ‡eâÑR«F§#í~"¾€+M¢¬š A-þ2—¡µ°$”)”–8‡p„Ø›V IMœ¤ÙKe† CH"91ä>œ"o4Wļ5G)rÅü!CÐUºi0Fö6§ÂrS¦ †)7¾”ÅAê#Š¿Äþ¨kahaàfau@ãÀ¾Fb‹¦…ðN*áüXoU/Ž”4Ï‚§¥ßUº{n˜dþ¶ó×
- ôG´Í ÂÂÓÈd‚äÁ<Í™”0ŒÌÁo@7\YŸÊ$Iÿ€ÂD@JrSÄCþ¤!C YÙq]µ’.á@žò<í¹üÊv"29@ÑùÉç_~~çËG1Õe&Ü Å8&ÄÒ½Göä~YüŸFüAÎÙmAý|usÅÜù~8rîÞvá7gOcxñ‡÷¯žz÷ãÕÛÕpþú§7ïWÓɳçÏý&,gréÅ/
-
-ÁAá/JdkHQê®iÞCJÂifˆPwúåm ËŸøö/l¿,eù~ùû?ÂòŠ‹.žY;„Cç9Ð[
-ÞW‹%¢diÿo¶N©n~Þ]ˆöÁŽ¬áâ)÷'rý,èŽ[1úî÷üè{îxò›éõpÁW:çütu}µòœË0&þð¹å/!·$Üâ:EzóÍBœØÅà&3z©1bˆsÖ4-ÆÖ
-å̬;Ø) I’/:¥bFñìÕ(X–FÒÚgdåÐLs5öÁiÈ:/Ò•sKzö[pœuuìÙâŒÔ@PcNv0¼9näKí·(³N¬†Z±4x>#Eªº¦jC½†¤¡Æ§@”m‡¼ö¨n±C/ úº¾‘Q÷BeVcþ.©ñ×y¬d'ýÑeÇ–@Š}ÝnyŒ’ÔÅÑ
-åá ó3kf!zÌ*#˜ËPçi¨¶ÔDq\SwöÊ Ôu#Nˆ =Ý8â¾’ÒƳR¶¡¨€À…“¡j¬—@¨! CÂb€!MdÉN±%,Õ¨‹“sn•ä“ú±ë,íb¯qboÌ‹XBÌÑé1pÑÖ”&q_&Éé‘ä12ýáÕGèô»‰<“¯ß¯~| ¼z½ún³ùi»ýpùâúV¹rN~‡šù—D¾€1tÎý©f”ìÈ4úãÑ÷öìfu²zvsöûþuRø¦ÿÑt-‘v‘ 5‰ùm}H§OË«Q´PŽ
-*Ï;V¯³¨L«aœ]ÑŠ–
- Ô³S_XQ5q7Q/…ùR”ÊÜïmŒLŽœiÿRÅ`~ìÙ aÚüj™'ÿmÞh3}uuuv¹;_½¾9;»Cvx´U”"š0º½M–A Ž…ÔŠ&šƒíïæõ7ñpY öý¤1¥‚â²u
-5Ym.µ’ð³Íص1abJ•ŽY•½tl&rúnçk%¬W´p8ÏaÚDS÷9 ¥~˜4h½—CókL݃°û . eŒƒ²£Ù]M=Òßµ£…! &‘HR *ÚÁå!¥Ç vh\^‹æ t&2½jÌ µhj§Á"H ¯³xZÀ°Ž’Êæ|)
-s[]E`ÃÙågG‡³’Ó£c0%ßÅ}éó¦Á‡t7¿Šðp¤ˆ)~ŽÆŒ
-ar2êîë®°"°fu Òù{ 
-?b
-Òð•uùÏ¥ü4pgË «ø©¸½€f‹ #ð­6ÛO~ëæ¾oEÿ*Y9µV3VÉ[‡®q”’܈6nµ½¾|wýáê|õþÍÙ»Ýêòú|7‡¿‡ ÷e±‡½¥~™l÷
-‹øyñzª"Dñqèʇº¹@W¦ÃÐ5Ø ]¹ÃË}˜+~6æ
-d.Þ;ö§!W=‚\uátA.ïž¹ò£‹ï\ùQÈÅO\ÇðÊ=^ÑŽWü¼Bj«²<€±Ò1–?ÌXîs2În´'=±””vPý÷`,š0ÖÃߺ¹ï[ÿ\Œõ‰¸óvûßÏ‹ÝùÓáN
-Z{ÑŽA $3hG<4óãé³÷¥,"U_ƒ@>±5ТÒR
-òr°ï'ý‹8=¯ñ'Š;¥AC`g õ¡³®ŠíeóR䃃SÈ>8Ç\ì †IxK°¬$ŸCœ—Ä,÷’HVöƒÕÜî{]*SSîþ !nkXÉB"÷¸Ö’Z½+c‰|‹ °7Žl=v/.±‚0S3Î8ÄOÒÖ¥2Y#é{È '¦~Á0¹ê°Óè‰ÓNL“ÐŒ†ZLÂj’ÍÉvVcÿ>¾šìlì ­¦¿Ž ¾íŠÝaÈbê®Õ½ó¹'ˆQl¬ïãÄÞŒ”S7–ÑèóÄ8„;'×h 8Ù§¤šp+[g¤¡ü‹ÄHžhü>fÎÌ+’€¬ün^|z:óðÇYê_Íàê«v~AÚ™’AW!{‘ÎBÞ©0bf=Ø—Î
-±¤á ¥D:‹†$ (I>Ä\ÁøôU5¿ªæŸZ5%Ô.è –FL² MÌ8%Ó¡1²YÔ}¥–…Qv۶υ˜IæKeôJžÛ0ŒŒ0Ør0IEÊ‹ 5Å’K´Å:bÊ®õá‚íÚ‹ Ö»eÛ3ŽEv†er Ëä:úlfœª~3%¬ – óW…h /¡
-Ô|·Ô¤I•`ÄÌd;`q‰lqt±®fÞ”mÇN4÷üö®‘4 ×àçIôH]þ\{ª~É¡ÖAtî$ˆÇä8MŽx›Œ‹Á™úÔn­R™,˘u&Åc•é°@%óáŸæ€XVé&™âË:~ê[7÷|kµ9)÷RײÇþHzÇ8yx&› g-©SOSátˆ¹j‘­ÌIuíŠj–Ð~¬MÄŽÀ±Ç5•Ú”áCûÓZŸÙS•õ b÷ìUvJA¿²ÍË`‰K&×¼NÁ¥^0°ç¢š‚w¸’Ôa8^.²C‰ÿg¿J{ÛƵè÷ùü2@L®Z^?Å]Þt^ÛM0(03[MÜ:’!+É´¿þ’¢K^âlÄq“ÊW$/yyî¹çö|ßò¡¨CTã9Ôgó]õ²¥°+§÷ÎN¥ Ýx:– ñ›Û@}ò}W¥©và_pje¬ëgBÂ
-á/Ã
-ÊÓÕ€RJø&Í1×çž2sîœë¤BOë N-qê”[×oe¿ ŸzF§@C‡xšMu-ô‚µ’½]µ/J»r¢Œ¾“Ù¾2à×wA•*6»‹µ—ìiî’CuY!…4TAe| MÒ¶/Æ!Å­hA7º3”
-ØÆá.ʬG5Ïàž=¤™¸>$-n4*,€t1'}ú`>Â]f(ºÝC"3=”sÐ+fj£‡ú¯±°žÏþŠ>A—ÜW†ìAEh']7‡üdÙé‰@ºùËÀÉc jz7èQ<
-†,'Cs Z6á•Š[ÂZÛsχíR}iŽo¥]7úŠ€ëûñª ®ìúRÚž„«•›qdø¬‰Âh «¨Â^\1â ™V‹è{wð-ÝÕÅÞìÊL¶A2;O&3Ú÷·H<„;úH *$_”PB,Ç¥õ:“fù¥s™´œIˆ9î¯ãWÀkw©K¥ƒáåf/«ÑaÚ%ß6]‹ºJÔÍ!ºjA˜.Ím\¼\¼.´
-jIl¡
-  fÁ‹zdú–eॷzºðÞÔ{-ïÊG½G¶(òŽ%0¿k tK`Á» ½±ÏzÞQèíÀV¡÷jCk…Þç¤UèíЙB盧гn ¬.qç, j¼6ÃWÝ(ίø»Ø‘TJhlèò)f°áÂàQ q>Sôwe
-´ïï~Ú=ÑÑ9yµ˜.j÷æÎ]¥Ý[æxQ»7wîÚíÞ­ôŽÒßO>¦Éa6JòQr¶»[Ø ª¿ÙzñqbÞöÝáøN¿ÆƒBi˜žÆ¤Ÿ]NÏɇ(‰Îâ ¢ig;Ë^ûöU4€‹ÉùhP =NÓñä×$«Ïí¡ e½F}‚Z8¡c¨]ãí8Ê—Nf§ô26ÇÚ5:føóf´Çgaª=÷{FùycíWçQ6H«sb”]£cìqüON^®FûâUíÑ$ΪGy–~‹±·^qû@LóîïGs"¤áRŽù®ã¥ÿQjÍ7›0tñ®×ÜAHëŸëGÐí9ßìÞ|‹Ùà |ÜÑkŸ{qn#¯óÄúVD9òÂsr홯»cÂƜݓs6æ>>7Žù]§HWîêí9N°[Ý#®äÚQ˜@øq¶=bbÇz¼,»·ˆã¼m7èdvsœvïé^wT#ĹÁÊã,!^µ9 -†'}]—)‡4Ò\ú–3u{böNWßû:Àí;í(ÿ>Ž§[/öþ—¤×‰ù¦Ëÿö~’&;dï#ŽC~Åë}ˆƒ«¸|¿÷*½˜hD¿qF3È%ıf«ÍöŠ1¿vO;Ê£Á·›O[Å[?šŽ W<‹'qóe|ƒõ:ui„˜¤ù§xB Í[;° i¶#”üŽ§¯°]I>?ÿ¦d¸…wŸ*)¶÷:þB^’­d»¶ÔŽ^û%1¾ ´Ù;Œ²¼óXýqœ —„bñÌ
-ÍðNPÛyµÂü/>Å«4^Žòy'hN¾#@蛾Mà0´:@c2ß\ÅÉÁphŽo TÅSw©= ëöž§xhüPˆBÐ M!e¡g${hÑ_>|ŽfÝÅÈb³È*7ôÔqõdŽ„9oþ‰—z/ö¥Y¢›ª ~p|=?[–!¯Ò,‰³éŽ‰AmÒvãu/M°1[¶0(v[ÜžYeïx”Wà[ô§8BÎeÑpt9]€ç5‹Í3©7âÛG"Î[eÂ{ªXå0÷M(>σ)Ć)ž SX‰åtÔÜûy5µ8*6;^gé„GÃôºµ—ó3£±ÂªyÁ\H'Ñ(›L_Q®#‘êÂ<PιU©žtÁ»m(§ƒ±ÝNÿ.ÉÉö`š vŠmÚô=O³MËUœåÖB©³ £ì›];uÆtÙÅJ.8_fn1ãïtœ [ÿeA¨çQhOm
-ÃÆ;ÐCÖ/”&<O°@ÿÇ™b
-*Ó/ªß‡()s’é]ü“ÿŽ×."õnPCfV.gXg8Ë¿OÔRõ@ªÐÓEàñ„œ!FA÷)n÷3W‰þi…÷V6½Ž 6EmSÔžd·£ÈÙc·1O˜7 olxãIò†¯¨VQ=Ͻ@˜ʹV\!ežtq{
-É8`™€ä¸W,¡ŽÍ+ÍuÎ/ÈLÅîÁ0¢û%«Ã\RÓ‹RSñÕÿ#¡õç ƒ<äâÙÔ,‡$¢tÎÌ-ÈA”Îz•h×;%JK¨MãAZu- À-{x`8¥ƒ srBªb€å~ ^OxæÛ€
-î9ùå
-¦Àªe´b­X°W,
-endstream endobj 188 0 obj <</Filter[/FlateDecode]/Length 6788>>stream
-H‰ìWkOËýŽÄè/‘@ŠÙ~?®ÅÖ/ÝäÚF‡#˺vØËx–Ìvð¯OUõôÌô.ð#ÉÌŠeèé>]}ªêT5ãìÍõögbœýÆûÈ4{ÉÞ¾ãl¾ ïŽðüooMž–§ì1ÛÞb;ÏUuÜ^Wå.ûãöÖc6yº˜µì1¼šMKƒã&Óbµ˜Áª¶lØOÛ[;óåIÉ~®køÿEµü¸ ;s6éfÀŠ§Íò’Ÿóåǽbq¹ `ÕÕÙ¢†)å«â}I“Æ
-ÉlÕÌhà‘Ü6“óeó)Ö›Ñà‡²‰EÈô½Ä¼h.hˆï¹þŠº¼,"¤…KJ<©®òOªzþC—oÑå·0^\Uí»±4/Þ_Vƒ4Q®EWqI÷K¬WHh%<.¬NÇ?xH¬‰k‡ Mmv¸?ü~}VÏš–Œ_ÑÁ¡__-ëÃ,ê³Gºñi ©vXTeÛ–QtOîoöÎÛ#X¿j›Y~·K}ó IÍ_loÎJàÎßÏmÙ/½'‘E)T¿Í=CPÁ{–mÖ¯9z1eGå|XeEðrl`°F@Že–Žÿ£¬*P§´ÞJgIX†­z¨|ዦ,ë~.(7ÞWH£BÈ—‹aù“ëbXí½²ÖÀ\gƒ°7}”VO««biCàxf„ru£w²Õ/‹3h‹@Ø
-Ή$
-蘢©/#A´:,²Q£Çìà18%RÚ
-Wï(ܤåÖÂÓ Å1ù—áqdÓ ¹æ ‡ÍXp€HèÌO"9¾?tL‘WéþÌBŒ½Ö¤©{²TgLç&颩‚”ÂnšjQ„qƒÌGiy{0ÔâÉc¹@"Q#-nÕÁê˜h©”Cîzgqh¤Õy
-G AT"€£ÜÉZ КHÐÉØX[¤…yŽÂÚHx^b;å’Š )—(•P³磀7’L­]²†ïRzŒ
-=H6˜õ+%Ǽç¡}ƒÛu0†,
-€Úº™2ýKk¢çúüt©,=ä'è"Òéœä7‚{A* ql¹'O3ïcI`xô0R'ÑÉÔAF)õNRȨNV*£•½,ÉÄeà74+ ú†ëµÌjV”}ØÛa¼e%K‘“¤
-µô˜× ZR…AgÍŠKd±ªá–Ãáo yO©4¢
-†¦LtcNI°Ösª26Ž’2i ¯Á?˶PšRÞ¤96/(¤Î<sd3Pé‹kª**+® X\Ñó~„ëLìÏ,ׂpÁCžà ƒ >MõÚ9MÆÐáz4˜ßš³ÖE1õ*?,Ôð¨}mT@,ZI;ʱϰ†
-5
-Ø7­6
-l=¥²V×÷¿)t¸¦n«|ýˆ×†î|LÑ×gó»^²oý¡oH8Ýì0ÞåøB
-ý[.Ml†‡»+Aùßþ¢K-”Æ0€ï!Vc¨C Ð2»ÞöÝ=ntqYçhUs£¦Š Ïx„¶<fS?¢SãàRg"ã}xŶz·Ù÷Šâ
-Fjäÿêiø%¿U~ú8÷¾ý‹…_HZÜÉÇ3%ìÛgξˆ„É„å—ÐçµúÌ/?û(ä£<¤ô>Édþ7~ûD¿“M*ÿ¸©.Á;.’gÎdý²ê=Æ$ä»âÿ¾$ìéjF·4-žæŒÑüNùîÊ»Z+éG!ÈÁüß{yÑ×ò÷››c(yÜõ@4z¿o…ròÃÇÃjÉÓâ§þ‘ÿý;¾*¬Eëâ¿3’=Ñ"7 A|£|È6OYÞ×ÇG%Û¤y*¯úW_“(–µ7ŸøŽÕ^ÜÓïuÅÖµÇYî—vD„µ—ÿæB¿ûU,ó¿
-Â"£̌ùb¶‘’³ü4Ÿx9¬½\eCV¼©kÊ?Wø2aDÕwŠRþxSÿNùn”¿S碌2 žhèWå;tØù99Üè‚äU¬•£¥´Ç3ù‰›U~Ì>™ŸûŸ¾ ô‹«åcÈ„3"Çÿ}¸ÿÌsyúã_®zûUÊrAŸH)’åFÒìæêg%.Ïæßø3oôW ]'i(òŠ”ªáÕ`ž§ªú¸øGÖôøqïŸ,û¶%"ûåæjð˜ÿÕµ[R‹£¸ø {AÈÈJëŽÑdõÇ‹OãŒB²”ò¼ BPš´ôg€Ë„…yÀ.2?3T~V4
-¸{ëx¾§J{ÛE‚oÖÀ¶«´(܈¦t( ¬VdK…ü˜&jx=ÆÙKýTÃ\’à©8n,qšr Ö:Æ\<Ãëh¨Qàå[ÎŒó6ŸÐ4]нœgw‹‡{dó+×Ë×'vüê¡v„D’~FUhÌ6ÙéÔY=/$]9Á(sŽÄRð®mdßbšD1Ì€i)ŠâZÉvI(cØQ‰…«}ô—Zˆ_6 ]×÷’‹
-ÈÕ]2
-÷ ¨=¢±è
-÷ ¨=¢±è
- _> 5
-¼ã쥆ªa.IðT7‚8M9
-Pkc.žáu4Ô(ðr£2ã¼Í¨è½ržÝ-îAͯ4×ÍV”7ÊÈ»'vüê¡v„D’~FUhÌ6ÙéÔY=/$]9Á(wŽÄRð® °äÄ4‰b˜ÓR3ĵ’í’PÆ °£ Wûè/µÃl8º®/î%!«»d
-žf뻤
-H@w‘T.HbÓÒKA“DDv—i饠­h–‘6+-
-¸Át2ò'#ÇslmWì`k`ÛUZŒ€nD
-S:PV#²¥B·PC¯Ç8{©Ÿj˜K<Ç… NSŽÔZǘ‹gx 5
-¼|¬Ì8oó)zÁœgw‹‡{dó+ͽ³å2òz¨]!‘¤ŸQ$³ÍD6B:uVÏ IWE0Ê‚#±¼ëFsûJÓ$ŠaLKQ ÏŽ¶KBƒÈŽJ`Öá_j!ŽÙ°t]_ÝK.B*\Èí]B
-H@{‘T.HbÓÒKA“DDv—i饠­h–‘6+-
-¸Á­7M'Cç”®ÆXì`k`ÛUZŒ€nD
-S:PV#²¥B·PC¯Ç8{©Ÿj˜K<Ç… NSŽÔZǘ‹gx 5
-¼ÜxÍ8oó)zÁœgw‹‡{dó+ͽ³å2òî‰=åƒÎj×AH$égT…Él3‘NÕóBÒ•CŒ2‡àH,ïºÑÆÖ… ¦IÃü—–¢!ž}yÛ%¡ŒAdG%
-0ëè/µ¿lº®/î%!CÈÝ]B
-
-šf2àØ8«¤·‚¶æJ±
-qjQ©nÌõ¼˜¿BÝ'ÝÓó$Ê…<ruÇjÈç5µ;ÏgšÝ+^š†x¶ëÈŽI‡rõ<“ªÈ‘0¦ÜaK ï»Ð\Çx„<
-Bl«¤$zˆm$ûˆ|B`ßJ*\§[ÿ—Y˜]߃{)¤Ï%2º¿
-ª…¹dÞ{‘n‰q6å$@q …üÄãØP“ÀË•G!N-*Õyù¢žóW²û¤{užD¹G®îØñ_7µ;ÏgšÝ+^š†x¶ëÈŽI‡rõ<“ªÈ‘0¦ÜéX¢`S ¹×wÍOFSãyò(±m°’’ègŽefûˆ|BhßJdæ“2ƒ˜2"<îƒhíˆ
-endstream endobj 189 0 obj <</Filter[/FlateDecode]/Length 3958>>stream
-H‰ì—Qoã8Ç߸ï0@q@¸Eã4IÛÛ§¹6)\ƒ¦÷vPd: *K$§í·?ÚÓm­Ä‰h4måŒý0ƒ™6"Eþù;¿_ŠXƒüíÛ?ÿþ·ü/úv:‘ö[ç)RÅð{þ‡}^ÁËÏßNgV/åÂ5X3‘ýeÑŠ?@|¥„Òæ·j{ÉÒ¿Ìÿøù×é§ÿùùö¯â_×Kn—J2ýüó?þxóg_8Ï,˜—7œ~ךmÛœ‹çD³ûebGm÷‘QÝLÆc¥SfƒˆÆ2½
-x…Óçܬ·¢òd)€^Žùf1îÅ ¿Bþ­”ØW"šI³bøFþL+Ç!ˆÒèúîPÆÐè^,ƒÀê€ß\¥â5ÄYàw±PziïSp•[ô]oéj%„Zƒž2cAÿ`[Ö®£Ú€®öl7ˬºÍÓFƒ-›7„Pª)~
-­Fbt‚ ìœŒ‹‡rwÓz´ih¬þŒ.%^4Á8Ä$²yc¹Èb¸b«<2"¥ëio0ôS™¥ô5ªl`Ôõê…ç ÎÐ$M@nxêÅ|„y±7ÖÝò Ï?I2³ûâU¤·žNÚò9¦5ÐÝÌè‰qZ‰¼ÚÖ:¢ÝÁW­¹¥à çyÿ¹csARLŸSÑ流?@LïÄMá*²U4™‘D[ Ã}dT7“ñXi”^ADc™^€áÞ‚vËþW÷¡ªŸ÷`O®IýhÛ)Œ™å«(‡<Y
- ×Ÿc~L“*òN*«™4+†oäÏ´òp‚( ¯rÊÝ‹eXð›ë]cØaÔgE€õ„Z•[ô~‘¥•j zÊŒÅe‚ lY$Ų˳!Ü,³ê6O ¶lÞB©¦øi(´‰Ñu‚²s2.ÊÝMëѦ¡±"‰M01m'*™7†‹,†+¶Ê##Rº.AöCß8•YJ_£ÊÖA
-W‘­¢ÉŒ$Úî#£º™ŒÇJ£ô
-"Ëôì ÷´;Xö¿ºõ}ËÅž\“úѶS3ËWQy²@¯?Çü˜&UäTV3iV ßÈŸiåá8Q^å&”14ºË °:à7׻ưè!Ί
- —¢c~LC+ò-«™4+†oäÏ´q‚(ÿhÆüâ²D\¬ÞŒB'Õ´´íRÖ Ç!ÊÎɸx(—;­G›†ÆJ’+P0N¬Ø²y0‚Òß±[9p
-czamõú{‹ËaO–è¥è˜ÓÔŠ¼SËj&ÍŠáù3­@‡ ŠÃ?›1¿¸C÷7ã†Ð¹ /eßp‚ ìœŒ‹‡r¹Óz´ih¬-)ßV^Šœ,™£(ý»•çóËáYwà]e[9ÐÊV´r •±¶r •“ƒþÙù°×­²kå@+Z9ÐÊV´r •¿„ˆ¢Á`؆çç­hõ@«Z=ÐêV´zà—Õ½þàübpýrz࢕­¨ª ð›k ”ú¬ð»X(½´÷)‰»Ê-zÿpÑJµ=eÇÆ&ðrï:ª èjφp³ÌªÛ<m4زyC[!Ø
-AW~5ao0ôÉ™¥ENH’¬l`Ôíú
-W‘­¢ÉŒ$Úî#£ò®¯ŸŽezv†rí–þ¯nD§Ñå êºçÝKßðr`rMjMÛNaŒ/,®^ou9ìÉR
-¼ý*†iS+C§4g)ÖgÉÒ/Ûüðv¤·NÚò9¦5ÐÝìø™ Z‰¼Ù¶º¢æàÙþà UÿyàsIRL_Sѧ’Z<BFïÄ]árÙrMf¬ÐèpŸÕdš¦Ú ôŠ"š‚›%÷¸· ÝÁ²ÿÝ}蜖ô»Î.ÿ¦7¤Î´íÇô
-Õ–G¾XI W¢g~L3‹gVa¸²kŽ/´òð¢(à;ÚZÝ«eX= ðÌMÓ@ö d¥ °dÛå}Xn-¥Þ€™q[àZÁ%¶,’viòì7/ }W¥[7ï¡Ò3<œj#1úQPöÎR÷QÞnÞŽ6•°)|h’ ÈhÛQͼ3„B–\óu‘Òw‰‚t\…Æ©*súBU·Žõƒz!Ã9ˆsŒ
-ú°Ü2ZJ½3ã¶Àµ‚KlY$íÒäÙn^ú®J ¶nÞB¥gx48ÕFbô¢ ì¥î£¼Ý¼m+a5RøÐ$Ѷ£šyg…,3¸æë*2"¥ïé ¹
-SUæô…ªn ëõB†sçŠ& ßyDÄ|‚¹Û Û€nùDŠ÷¿X”¶ùáíHo;´åsLk¡»Ùñ3´y³muEÍÁ³ýÁ.ªþóÀç’¤˜¾¦¢?N%µx„ŒÞ‰»Âå²åšÌX¡-Ðá>3ªÉ4MµAéE47K(îqoA»ƒeÿ»ûÐù ß%¿ú—Ipvù0½!u¦m§8¦×íŸÉàrouyì‹•z-zæÇ4µXpj†+»æøGñB+Ï!ŠâÏfÌ/nKÄÍê¿qG蔞ÕÖ]ʾá9DAÙ;KÝGyÜy;Ú<6V‚–TX’ bÅÖÍ£Q”áŽ}Ò‡Ò£á þ(=Òš'5ðƒÕÀþw µµ4ºWË(°z$à™ T<Ê—Òø[.µYsð.·(èÃ#Óh)õÌŒ[†·\bËjºªwл=;ÂÍËBßUi£ÁÖÍ;Bx’·'yëËÛ.
-YfpÍ×UdDJß%
-ÒAr§ªÌ]õ‘$uÝ:
-@Öê… ç Î0T³€ü'À
-endstream endobj 162 0 obj [/ICCBased 170 0 R] endobj 190 0 obj <</CreationDate(D:20090527042239-04'00')/Creator(Adobe Illustrator CS4)/ModDate(D:20090730214335-05'00')/Producer(Adobe PDF library 9.00)/Title(colorbox)>> endobj xref
-0 191
-0000000004 65535 f
-0000000016 00000 n
-0000000076 00000 n
-0000048436 00000 n
-0000000005 00000 f
-0000000006 00000 f
-0000000007 00000 f
-0000000008 00000 f
-0000000009 00000 f
-0000000010 00000 f
-0000000011 00000 f
-0000000012 00000 f
-0000000013 00000 f
-0000000014 00000 f
-0000000015 00000 f
-0000000016 00000 f
-0000000017 00000 f
-0000000018 00000 f
-0000000019 00000 f
-0000000020 00000 f
-0000000021 00000 f
-0000000022 00000 f
-0000000023 00000 f
-0000000024 00000 f
-0000000025 00000 f
-0000000026 00000 f
-0000000027 00000 f
-0000000028 00000 f
-0000000029 00000 f
-0000000030 00000 f
-0000000031 00000 f
-0000000032 00000 f
-0000000033 00000 f
-0000000034 00000 f
-0000000035 00000 f
-0000000036 00000 f
-0000000037 00000 f
-0000000038 00000 f
-0000000039 00000 f
-0000000040 00000 f
-0000000041 00000 f
-0000000042 00000 f
-0000000043 00000 f
-0000000044 00000 f
-0000000045 00000 f
-0000000046 00000 f
-0000000047 00000 f
-0000000048 00000 f
-0000000049 00000 f
-0000000050 00000 f
-0000000051 00000 f
-0000000052 00000 f
-0000000053 00000 f
-0000000054 00000 f
-0000000055 00000 f
-0000000056 00000 f
-0000000057 00000 f
-0000000058 00000 f
-0000000059 00000 f
-0000000060 00000 f
-0000000061 00000 f
-0000000062 00000 f
-0000000063 00000 f
-0000000064 00000 f
-0000000065 00000 f
-0000000066 00000 f
-0000000067 00000 f
-0000000068 00000 f
-0000000069 00000 f
-0000000070 00000 f
-0000000071 00000 f
-0000000072 00000 f
-0000000073 00000 f
-0000000074 00000 f
-0000000075 00000 f
-0000000076 00000 f
-0000000077 00000 f
-0000000078 00000 f
-0000000079 00000 f
-0000000080 00000 f
-0000000081 00000 f
-0000000082 00000 f
-0000000083 00000 f
-0000000084 00000 f
-0000000085 00000 f
-0000000086 00000 f
-0000000087 00000 f
-0000000088 00000 f
-0000000089 00000 f
-0000000090 00000 f
-0000000091 00000 f
-0000000092 00000 f
-0000000093 00000 f
-0000000094 00000 f
-0000000095 00000 f
-0000000096 00000 f
-0000000097 00000 f
-0000000098 00000 f
-0000000099 00000 f
-0000000100 00000 f
-0000000101 00000 f
-0000000102 00000 f
-0000000103 00000 f
-0000000104 00000 f
-0000000105 00000 f
-0000000106 00000 f
-0000000107 00000 f
-0000000108 00000 f
-0000000109 00000 f
-0000000110 00000 f
-0000000111 00000 f
-0000000112 00000 f
-0000000113 00000 f
-0000000114 00000 f
-0000000115 00000 f
-0000000117 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000051202 00000 n
-0000048489 00000 n
-0000048844 00000 n
-0000049045 00000 n
-0000061445 00000 n
-0000058207 00000 n
-0000050103 00000 n
-0000049109 00000 n
-0000231123 00000 n
-0000049538 00000 n
-0000049588 00000 n
-0000055520 00000 n
-0000055406 00000 n
-0000051720 00000 n
-0000051805 00000 n
-0000052189 00000 n
-0000055557 00000 n
-0000058244 00000 n
-0000061521 00000 n
-0000062006 00000 n
-0000062952 00000 n
-0000069751 00000 n
-0000084919 00000 n
-0000102822 00000 n
-0000111395 00000 n
-0000126519 00000 n
-0000132206 00000 n
-0000141391 00000 n
-0000143749 00000 n
-0000159943 00000 n
-0000177431 00000 n
-0000183301 00000 n
-0000187819 00000 n
-0000205653 00000 n
-0000220229 00000 n
-0000227091 00000 n
-0000231160 00000 n
-trailer
-<</Size 191/Root 1 0 R/Info 190 0 R/ID[<7EB5FF43BD08164184F35B8300F050C9><E617EB833E197F43BC059F7255614CEE>]>>
-startxref
-231333
-%%EOF
diff --git a/wqflask/wqflask/static/packages/colorbox/colorbox.jquery.json b/wqflask/wqflask/static/packages/colorbox/colorbox.jquery.json
deleted file mode 100644
index 300fa5cd..00000000
--- a/wqflask/wqflask/static/packages/colorbox/colorbox.jquery.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "name": "colorbox",
- "title": "Colorbox",
- "description": "A lightweight customizable lightbox plugin",
- "keywords": [
- "modal",
- "lightbox",
- "window",
- "popup",
- "ui"
- ],
- "version": "1.4.15",
- "author": {
- "name": "Jack Moore",
- "url": "http://www.jacklmoore.com",
- "email": "hello@jacklmoore.com"
- },
- "licenses": [
- {
- "type": "MIT",
- "url": "http://www.opensource.org/licenses/mit-license.php"
- }
- ],
- "homepage": "http://jacklmoore.com/colorbox",
- "demo": "http://jacklmoore.com/colorbox",
- "dependencies": {
- "jquery": ">=1.3.2"
- }
-} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/component.json b/wqflask/wqflask/static/packages/colorbox/component.json
deleted file mode 100644
index 9bf269bb..00000000
--- a/wqflask/wqflask/static/packages/colorbox/component.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "name": "jquery-colorbox",
- "version": "1.4.15",
- "main": "./jquery.colorbox-min.js",
- "dependencies": {
- "jquery": ">=1.3.2"
- }
-} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/content/ajax.html b/wqflask/wqflask/static/packages/colorbox/content/ajax.html
deleted file mode 100644
index e772638a..00000000
--- a/wqflask/wqflask/static/packages/colorbox/content/ajax.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<div id='homer' style="background:url(../content/homer.jpg) right center no-repeat #ececec; height:135px; width:280px; padding:30px 10px;">
- <strong>Homer</strong><br/>
- <em>\noun\</em><br/>
- <strong>1.</strong> American bonehead<br/>
- <strong>2. Pull a Homer-</strong><br/>
- to succeed despite<br/>
- idiocy
-</div>
-<script>
- $('#homer strong').css({color:'red'});
-</script> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/content/daisy.jpg b/wqflask/wqflask/static/packages/colorbox/content/daisy.jpg
deleted file mode 100644
index 2928b193..00000000
--- a/wqflask/wqflask/static/packages/colorbox/content/daisy.jpg
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/content/daisy@2x.jpg b/wqflask/wqflask/static/packages/colorbox/content/daisy@2x.jpg
deleted file mode 100644
index 44f0e605..00000000
--- a/wqflask/wqflask/static/packages/colorbox/content/daisy@2x.jpg
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/content/homer.jpg b/wqflask/wqflask/static/packages/colorbox/content/homer.jpg
deleted file mode 100644
index 87ec76c9..00000000
--- a/wqflask/wqflask/static/packages/colorbox/content/homer.jpg
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/content/marylou.jpg b/wqflask/wqflask/static/packages/colorbox/content/marylou.jpg
deleted file mode 100644
index 4c717d27..00000000
--- a/wqflask/wqflask/static/packages/colorbox/content/marylou.jpg
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/content/ohoopee1.jpg b/wqflask/wqflask/static/packages/colorbox/content/ohoopee1.jpg
deleted file mode 100644
index aae19a3e..00000000
--- a/wqflask/wqflask/static/packages/colorbox/content/ohoopee1.jpg
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/content/ohoopee2.jpg b/wqflask/wqflask/static/packages/colorbox/content/ohoopee2.jpg
deleted file mode 100644
index 20689448..00000000
--- a/wqflask/wqflask/static/packages/colorbox/content/ohoopee2.jpg
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/content/ohoopee3.jpg b/wqflask/wqflask/static/packages/colorbox/content/ohoopee3.jpg
deleted file mode 100644
index 4d64d240..00000000
--- a/wqflask/wqflask/static/packages/colorbox/content/ohoopee3.jpg
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example1/colorbox.css b/wqflask/wqflask/static/packages/colorbox/example1/colorbox.css
deleted file mode 100644
index 1dedd90f..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example1/colorbox.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- Colorbox Core Style:
- The following CSS is consistent between example themes and should not be altered.
-*/
-#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
-#cboxOverlay{position:fixed; width:100%; height:100%;}
-#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
-#cboxContent{position:relative;}
-#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
-#cboxTitle{margin:0;}
-#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
-#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
-.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
-.cboxIframe{width:100%; height:100%; display:block; border:0;}
-#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
-
-/*
- User Style:
- Change the following styles to modify the appearance of Colorbox. They are
- ordered & tabbed in a way that represents the nesting of the generated HTML.
-*/
-#cboxOverlay{background:url(images/overlay.png) repeat 0 0;}
-#colorbox{outline:0;}
- #cboxTopLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px 0;}
- #cboxTopRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px 0;}
- #cboxBottomLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px -29px;}
- #cboxBottomRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px -29px;}
- #cboxMiddleLeft{width:21px; background:url(images/controls.png) left top repeat-y;}
- #cboxMiddleRight{width:21px; background:url(images/controls.png) right top repeat-y;}
- #cboxTopCenter{height:21px; background:url(images/border.png) 0 0 repeat-x;}
- #cboxBottomCenter{height:21px; background:url(images/border.png) 0 -29px repeat-x;}
- #cboxContent{background:#fff; overflow:hidden;}
- .cboxIframe{background:#fff;}
- #cboxError{padding:50px; border:1px solid #ccc;}
- #cboxLoadedContent{margin-bottom:28px;}
- #cboxTitle{position:absolute; bottom:4px; left:0; text-align:center; width:100%; color:#949494;}
- #cboxCurrent{position:absolute; bottom:4px; left:58px; color:#949494;}
- #cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;}
- #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
-
- /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
- #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; }
-
- /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
- #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
-
- #cboxSlideshow{position:absolute; bottom:4px; right:30px; color:#0092ef;}
- #cboxPrevious{position:absolute; bottom:0; left:0; background:url(images/controls.png) no-repeat -75px 0; width:25px; height:25px; text-indent:-9999px;}
- #cboxPrevious:hover{background-position:-75px -25px;}
- #cboxNext{position:absolute; bottom:0; left:27px; background:url(images/controls.png) no-repeat -50px 0; width:25px; height:25px; text-indent:-9999px;}
- #cboxNext:hover{background-position:-50px -25px;}
- #cboxClose{position:absolute; bottom:0; right:0; background:url(images/controls.png) no-repeat -25px 0; width:25px; height:25px; text-indent:-9999px;}
- #cboxClose:hover{background-position:-25px -25px;}
-
-/*
- The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
- when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9.
- See: http://jacklmoore.com/notes/ie-transparency-problems/
-*/
-.cboxIE #cboxTopLeft,
-.cboxIE #cboxTopCenter,
-.cboxIE #cboxTopRight,
-.cboxIE #cboxBottomLeft,
-.cboxIE #cboxBottomCenter,
-.cboxIE #cboxBottomRight,
-.cboxIE #cboxMiddleLeft,
-.cboxIE #cboxMiddleRight {
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
-} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/example1/images/border.png b/wqflask/wqflask/static/packages/colorbox/example1/images/border.png
deleted file mode 100644
index f463a10d..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example1/images/border.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example1/images/controls.png b/wqflask/wqflask/static/packages/colorbox/example1/images/controls.png
deleted file mode 100644
index dcfd6fb9..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example1/images/controls.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example1/images/loading.gif b/wqflask/wqflask/static/packages/colorbox/example1/images/loading.gif
deleted file mode 100644
index b4695d81..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example1/images/loading.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example1/images/loading_background.png b/wqflask/wqflask/static/packages/colorbox/example1/images/loading_background.png
deleted file mode 100644
index 6ae83e69..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example1/images/loading_background.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example1/images/overlay.png b/wqflask/wqflask/static/packages/colorbox/example1/images/overlay.png
deleted file mode 100644
index 53ea98f7..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example1/images/overlay.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example1/index.html b/wqflask/wqflask/static/packages/colorbox/example1/index.html
deleted file mode 100644
index 39a76f67..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example1/index.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta charset='utf-8'/>
- <title>Colorbox Examples</title>
- <style>
- body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
- a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
- h2{font-size:13px; margin:15px 0 0 0;}
- </style>
- <link rel="stylesheet" href="colorbox.css" />
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
- <script src="../jquery.colorbox.js"></script>
- <script>
- $(document).ready(function(){
- //Examples of how to assign the Colorbox event to elements
- $(".group1").colorbox({rel:'group1'});
- $(".group2").colorbox({rel:'group2', transition:"fade"});
- $(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
- $(".group4").colorbox({rel:'group4', slideshow:true});
- $(".ajax").colorbox();
- $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
- $(".vimeo").colorbox({iframe:true, innerWidth:500, innerHeight:409});
- $(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
- $(".inline").colorbox({inline:true, width:"50%"});
- $(".callbacks").colorbox({
- onOpen:function(){ alert('onOpen: colorbox is about to open'); },
- onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
- onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
- onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
- onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
- });
-
- $('.non-retina').colorbox({rel:'group5', transition:'none'})
- $('.retina').colorbox({rel:'group5', transition:'none', retinaImage:true, retinaUrl:true});
-
- //Example of preserving a JavaScript event for inline calls.
- $("#click").click(function(){
- $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
- return false;
- });
- });
- </script>
- </head>
- <body>
- <h1>Colorbox Demonstration</h1>
- <h2>Elastic Transition</h2>
- <p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
- <p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group1" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>Fade Transition</h2>
- <p><a class="group2" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee">Grouped Photo 1</a></p>
- <p><a class="group2" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group2" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>No Transition + fixed width and height (75% of screen size)</h2>
- <p><a class="group3" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
- <p><a class="group3" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group3" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>Slideshow</h2>
- <p><a class="group4" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
- <p><a class="group4" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group4" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>Other Content Types</h2>
- <p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
- <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
- <p><a class='vimeo' href="http://player.vimeo.com/video/2285902" title="R&ouml;yksopp: Remind Me">Flash / Video (Iframe/Direct Link To Vimeo)</a></p>
- <p><a class='iframe' href="http://wikipedia.com">Outside Webpage (Iframe)</a></p>
- <p><a class='inline' href="#inline_content">Inline HTML</a></p>
-
- <h2>Demonstration of using callbacks</h2>
- <p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
-
-
- <h2>Retina Images</h2>
- <p><a class="retina" href="../content/daisy.jpg" title="Retina">Retina</a></p>
- <p><a class="non-retina" href="../content/daisy.jpg" title="Non-Retina">Non-Retina</a></p>
-
- <!-- This contains the hidden content for inline calls -->
- <div style='display:none'>
- <div id='inline_content' style='padding:10px; background:#fff;'>
- <p><strong>This content comes from a hidden element on this page.</strong></p>
- <p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
- <p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
-
- <p><strong>If you try to open a new Colorbox while it is already open, it will update itself with the new content.</strong></p>
- <p>Updating Content Example:<br />
- <a class="ajax" href="../content/ajax.html">Click here to load new content</a></p>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/example2/colorbox.css b/wqflask/wqflask/static/packages/colorbox/example2/colorbox.css
deleted file mode 100644
index b463110f..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example2/colorbox.css
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- Colorbox Core Style:
- The following CSS is consistent between example themes and should not be altered.
-*/
-#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
-#cboxOverlay{position:fixed; width:100%; height:100%;}
-#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
-#cboxContent{position:relative;}
-#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
-#cboxTitle{margin:0;}
-#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
-#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
-.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
-.cboxIframe{width:100%; height:100%; display:block; border:0;}
-#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
-
-/*
- User Style:
- Change the following styles to modify the appearance of Colorbox. They are
- ordered & tabbed in a way that represents the nesting of the generated HTML.
-*/
-#cboxOverlay{background:#fff;}
-#colorbox{outline:0;}
- #cboxContent{margin-top:32px; overflow:visible; background:#000;}
- .cboxIframe{background:#fff;}
- #cboxError{padding:50px; border:1px solid #ccc;}
- #cboxLoadedContent{background:#000; padding:1px;}
- #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
- #cboxLoadingOverlay{background:#000;}
- #cboxTitle{position:absolute; top:-22px; left:0; color:#000;}
- #cboxCurrent{position:absolute; top:-22px; right:205px; text-indent:-9999px;}
-
- /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
- #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; text-indent:-9999px; width:20px; height:20px; position:absolute; top:-20px; background:url(images/controls.png) no-repeat 0 0;}
-
- /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
- #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
-
- #cboxPrevious{background-position:0px 0px; right:44px;}
- #cboxPrevious:hover{background-position:0px -25px;}
- #cboxNext{background-position:-25px 0px; right:22px;}
- #cboxNext:hover{background-position:-25px -25px;}
- #cboxClose{background-position:-50px 0px; right:0;}
- #cboxClose:hover{background-position:-50px -25px;}
- .cboxSlideshow_on #cboxPrevious, .cboxSlideshow_off #cboxPrevious{right:66px;}
- .cboxSlideshow_on #cboxSlideshow{background-position:-75px -25px; right:44px;}
- .cboxSlideshow_on #cboxSlideshow:hover{background-position:-100px -25px;}
- .cboxSlideshow_off #cboxSlideshow{background-position:-100px 0px; right:44px;}
- .cboxSlideshow_off #cboxSlideshow:hover{background-position:-75px -25px;}
diff --git a/wqflask/wqflask/static/packages/colorbox/example2/images/controls.png b/wqflask/wqflask/static/packages/colorbox/example2/images/controls.png
deleted file mode 100644
index 8569b57f..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example2/images/controls.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example2/images/loading.gif b/wqflask/wqflask/static/packages/colorbox/example2/images/loading.gif
deleted file mode 100644
index 19c67bbd..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example2/images/loading.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example2/index.html b/wqflask/wqflask/static/packages/colorbox/example2/index.html
deleted file mode 100644
index 39a76f67..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example2/index.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta charset='utf-8'/>
- <title>Colorbox Examples</title>
- <style>
- body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
- a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
- h2{font-size:13px; margin:15px 0 0 0;}
- </style>
- <link rel="stylesheet" href="colorbox.css" />
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
- <script src="../jquery.colorbox.js"></script>
- <script>
- $(document).ready(function(){
- //Examples of how to assign the Colorbox event to elements
- $(".group1").colorbox({rel:'group1'});
- $(".group2").colorbox({rel:'group2', transition:"fade"});
- $(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
- $(".group4").colorbox({rel:'group4', slideshow:true});
- $(".ajax").colorbox();
- $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
- $(".vimeo").colorbox({iframe:true, innerWidth:500, innerHeight:409});
- $(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
- $(".inline").colorbox({inline:true, width:"50%"});
- $(".callbacks").colorbox({
- onOpen:function(){ alert('onOpen: colorbox is about to open'); },
- onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
- onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
- onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
- onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
- });
-
- $('.non-retina').colorbox({rel:'group5', transition:'none'})
- $('.retina').colorbox({rel:'group5', transition:'none', retinaImage:true, retinaUrl:true});
-
- //Example of preserving a JavaScript event for inline calls.
- $("#click").click(function(){
- $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
- return false;
- });
- });
- </script>
- </head>
- <body>
- <h1>Colorbox Demonstration</h1>
- <h2>Elastic Transition</h2>
- <p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
- <p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group1" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>Fade Transition</h2>
- <p><a class="group2" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee">Grouped Photo 1</a></p>
- <p><a class="group2" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group2" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>No Transition + fixed width and height (75% of screen size)</h2>
- <p><a class="group3" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
- <p><a class="group3" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group3" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>Slideshow</h2>
- <p><a class="group4" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
- <p><a class="group4" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group4" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>Other Content Types</h2>
- <p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
- <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
- <p><a class='vimeo' href="http://player.vimeo.com/video/2285902" title="R&ouml;yksopp: Remind Me">Flash / Video (Iframe/Direct Link To Vimeo)</a></p>
- <p><a class='iframe' href="http://wikipedia.com">Outside Webpage (Iframe)</a></p>
- <p><a class='inline' href="#inline_content">Inline HTML</a></p>
-
- <h2>Demonstration of using callbacks</h2>
- <p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
-
-
- <h2>Retina Images</h2>
- <p><a class="retina" href="../content/daisy.jpg" title="Retina">Retina</a></p>
- <p><a class="non-retina" href="../content/daisy.jpg" title="Non-Retina">Non-Retina</a></p>
-
- <!-- This contains the hidden content for inline calls -->
- <div style='display:none'>
- <div id='inline_content' style='padding:10px; background:#fff;'>
- <p><strong>This content comes from a hidden element on this page.</strong></p>
- <p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
- <p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
-
- <p><strong>If you try to open a new Colorbox while it is already open, it will update itself with the new content.</strong></p>
- <p>Updating Content Example:<br />
- <a class="ajax" href="../content/ajax.html">Click here to load new content</a></p>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/example3/colorbox.css b/wqflask/wqflask/static/packages/colorbox/example3/colorbox.css
deleted file mode 100644
index f12844e1..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example3/colorbox.css
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- Colorbox Core Style:
- The following CSS is consistent between example themes and should not be altered.
-*/
-#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
-#cboxOverlay{position:fixed; width:100%; height:100%;}
-#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
-#cboxContent{position:relative;}
-#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
-#cboxTitle{margin:0;}
-#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
-#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
-.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
-.cboxIframe{width:100%; height:100%; display:block; border:0;}
-#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
-
-/*
- User Style:
- Change the following styles to modify the appearance of Colorbox. They are
- ordered & tabbed in a way that represents the nesting of the generated HTML.
-*/
-#cboxOverlay{background:#000;}
-#colorbox{outline:0;}
- #cboxContent{margin-top:20px;background:#000;}
- .cboxIframe{background:#fff;}
- #cboxError{padding:50px; border:1px solid #ccc;}
- #cboxLoadedContent{border:5px solid #000; background:#fff;}
- #cboxTitle{position:absolute; top:-20px; left:0; color:#ccc;}
- #cboxCurrent{position:absolute; top:-20px; right:0px; color:#ccc;}
- #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
-
- /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
- #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; }
-
- /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
- #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
-
- #cboxSlideshow{position:absolute; top:-20px; right:90px; color:#fff;}
- #cboxPrevious{position:absolute; top:50%; left:5px; margin-top:-32px; background:url(images/controls.png) no-repeat top left; width:28px; height:65px; text-indent:-9999px;}
- #cboxPrevious:hover{background-position:bottom left;}
- #cboxNext{position:absolute; top:50%; right:5px; margin-top:-32px; background:url(images/controls.png) no-repeat top right; width:28px; height:65px; text-indent:-9999px;}
- #cboxNext:hover{background-position:bottom right;}
- #cboxClose{position:absolute; top:5px; right:5px; display:block; background:url(images/controls.png) no-repeat top center; width:38px; height:19px; text-indent:-9999px;}
- #cboxClose:hover{background-position:bottom center;}
diff --git a/wqflask/wqflask/static/packages/colorbox/example3/images/controls.png b/wqflask/wqflask/static/packages/colorbox/example3/images/controls.png
deleted file mode 100644
index e1e97982..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example3/images/controls.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example3/images/loading.gif b/wqflask/wqflask/static/packages/colorbox/example3/images/loading.gif
deleted file mode 100644
index 19c67bbd..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example3/images/loading.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example3/index.html b/wqflask/wqflask/static/packages/colorbox/example3/index.html
deleted file mode 100644
index 39a76f67..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example3/index.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta charset='utf-8'/>
- <title>Colorbox Examples</title>
- <style>
- body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
- a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
- h2{font-size:13px; margin:15px 0 0 0;}
- </style>
- <link rel="stylesheet" href="colorbox.css" />
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
- <script src="../jquery.colorbox.js"></script>
- <script>
- $(document).ready(function(){
- //Examples of how to assign the Colorbox event to elements
- $(".group1").colorbox({rel:'group1'});
- $(".group2").colorbox({rel:'group2', transition:"fade"});
- $(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
- $(".group4").colorbox({rel:'group4', slideshow:true});
- $(".ajax").colorbox();
- $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
- $(".vimeo").colorbox({iframe:true, innerWidth:500, innerHeight:409});
- $(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
- $(".inline").colorbox({inline:true, width:"50%"});
- $(".callbacks").colorbox({
- onOpen:function(){ alert('onOpen: colorbox is about to open'); },
- onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
- onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
- onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
- onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
- });
-
- $('.non-retina').colorbox({rel:'group5', transition:'none'})
- $('.retina').colorbox({rel:'group5', transition:'none', retinaImage:true, retinaUrl:true});
-
- //Example of preserving a JavaScript event for inline calls.
- $("#click").click(function(){
- $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
- return false;
- });
- });
- </script>
- </head>
- <body>
- <h1>Colorbox Demonstration</h1>
- <h2>Elastic Transition</h2>
- <p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
- <p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group1" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>Fade Transition</h2>
- <p><a class="group2" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee">Grouped Photo 1</a></p>
- <p><a class="group2" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group2" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>No Transition + fixed width and height (75% of screen size)</h2>
- <p><a class="group3" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
- <p><a class="group3" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group3" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>Slideshow</h2>
- <p><a class="group4" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
- <p><a class="group4" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group4" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>Other Content Types</h2>
- <p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
- <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
- <p><a class='vimeo' href="http://player.vimeo.com/video/2285902" title="R&ouml;yksopp: Remind Me">Flash / Video (Iframe/Direct Link To Vimeo)</a></p>
- <p><a class='iframe' href="http://wikipedia.com">Outside Webpage (Iframe)</a></p>
- <p><a class='inline' href="#inline_content">Inline HTML</a></p>
-
- <h2>Demonstration of using callbacks</h2>
- <p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
-
-
- <h2>Retina Images</h2>
- <p><a class="retina" href="../content/daisy.jpg" title="Retina">Retina</a></p>
- <p><a class="non-retina" href="../content/daisy.jpg" title="Non-Retina">Non-Retina</a></p>
-
- <!-- This contains the hidden content for inline calls -->
- <div style='display:none'>
- <div id='inline_content' style='padding:10px; background:#fff;'>
- <p><strong>This content comes from a hidden element on this page.</strong></p>
- <p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
- <p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
-
- <p><strong>If you try to open a new Colorbox while it is already open, it will update itself with the new content.</strong></p>
- <p>Updating Content Example:<br />
- <a class="ajax" href="../content/ajax.html">Click here to load new content</a></p>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/example4/colorbox.css b/wqflask/wqflask/static/packages/colorbox/example4/colorbox.css
deleted file mode 100644
index 1a3b899a..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example4/colorbox.css
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- Colorbox Core Style:
- The following CSS is consistent between example themes and should not be altered.
-*/
-#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
-#cboxOverlay{position:fixed; width:100%; height:100%;}
-#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
-#cboxContent{position:relative;}
-#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
-#cboxTitle{margin:0;}
-#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
-#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
-.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
-.cboxIframe{width:100%; height:100%; display:block; border:0;}
-#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
-
-/*
- User Style:
- Change the following styles to modify the appearance of Colorbox. They are
- ordered & tabbed in a way that represents the nesting of the generated HTML.
-*/
-#cboxOverlay{background:#fff;}
-#colorbox{outline:0;}
- #cboxTopLeft{width:25px; height:25px; background:url(images/border1.png) no-repeat 0 0;}
- #cboxTopCenter{height:25px; background:url(images/border1.png) repeat-x 0 -50px;}
- #cboxTopRight{width:25px; height:25px; background:url(images/border1.png) no-repeat -25px 0;}
- #cboxBottomLeft{width:25px; height:25px; background:url(images/border1.png) no-repeat 0 -25px;}
- #cboxBottomCenter{height:25px; background:url(images/border1.png) repeat-x 0 -75px;}
- #cboxBottomRight{width:25px; height:25px; background:url(images/border1.png) no-repeat -25px -25px;}
- #cboxMiddleLeft{width:25px; background:url(images/border2.png) repeat-y 0 0;}
- #cboxMiddleRight{width:25px; background:url(images/border2.png) repeat-y -25px 0;}
- #cboxContent{background:#fff; overflow:hidden;}
- .cboxIframe{background:#fff;}
- #cboxError{padding:50px; border:1px solid #ccc;}
- #cboxLoadedContent{margin-bottom:20px;}
- #cboxTitle{position:absolute; bottom:0px; left:0; text-align:center; width:100%; color:#999;}
- #cboxCurrent{position:absolute; bottom:0px; left:100px; color:#999;}
- #cboxLoadingOverlay{background:#fff url(images/loading.gif) no-repeat 5px 5px;}
-
- /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
- #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; }
-
- /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
- #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
-
- #cboxSlideshow{position:absolute; bottom:0px; right:42px; color:#444;}
- #cboxPrevious{position:absolute; bottom:0px; left:0; color:#444;}
- #cboxNext{position:absolute; bottom:0px; left:63px; color:#444;}
- #cboxClose{position:absolute; bottom:0; right:0; display:block; color:#444;}
-
-/*
- The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
- when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9.
- See: http://jacklmoore.com/notes/ie-transparency-problems/
-*/
-.cboxIE #cboxTopLeft,
-.cboxIE #cboxTopCenter,
-.cboxIE #cboxTopRight,
-.cboxIE #cboxBottomLeft,
-.cboxIE #cboxBottomCenter,
-.cboxIE #cboxBottomRight,
-.cboxIE #cboxMiddleLeft,
-.cboxIE #cboxMiddleRight {
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
-} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/example4/images/border1.png b/wqflask/wqflask/static/packages/colorbox/example4/images/border1.png
deleted file mode 100644
index 0ddc7040..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example4/images/border1.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example4/images/border2.png b/wqflask/wqflask/static/packages/colorbox/example4/images/border2.png
deleted file mode 100644
index aa62a0b7..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example4/images/border2.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example4/images/loading.gif b/wqflask/wqflask/static/packages/colorbox/example4/images/loading.gif
deleted file mode 100644
index 602ce3c3..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example4/images/loading.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example4/index.html b/wqflask/wqflask/static/packages/colorbox/example4/index.html
deleted file mode 100644
index 39a76f67..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example4/index.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta charset='utf-8'/>
- <title>Colorbox Examples</title>
- <style>
- body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
- a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
- h2{font-size:13px; margin:15px 0 0 0;}
- </style>
- <link rel="stylesheet" href="colorbox.css" />
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
- <script src="../jquery.colorbox.js"></script>
- <script>
- $(document).ready(function(){
- //Examples of how to assign the Colorbox event to elements
- $(".group1").colorbox({rel:'group1'});
- $(".group2").colorbox({rel:'group2', transition:"fade"});
- $(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
- $(".group4").colorbox({rel:'group4', slideshow:true});
- $(".ajax").colorbox();
- $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
- $(".vimeo").colorbox({iframe:true, innerWidth:500, innerHeight:409});
- $(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
- $(".inline").colorbox({inline:true, width:"50%"});
- $(".callbacks").colorbox({
- onOpen:function(){ alert('onOpen: colorbox is about to open'); },
- onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
- onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
- onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
- onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
- });
-
- $('.non-retina').colorbox({rel:'group5', transition:'none'})
- $('.retina').colorbox({rel:'group5', transition:'none', retinaImage:true, retinaUrl:true});
-
- //Example of preserving a JavaScript event for inline calls.
- $("#click").click(function(){
- $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
- return false;
- });
- });
- </script>
- </head>
- <body>
- <h1>Colorbox Demonstration</h1>
- <h2>Elastic Transition</h2>
- <p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
- <p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group1" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>Fade Transition</h2>
- <p><a class="group2" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee">Grouped Photo 1</a></p>
- <p><a class="group2" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group2" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>No Transition + fixed width and height (75% of screen size)</h2>
- <p><a class="group3" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
- <p><a class="group3" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group3" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>Slideshow</h2>
- <p><a class="group4" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
- <p><a class="group4" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group4" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>Other Content Types</h2>
- <p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
- <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
- <p><a class='vimeo' href="http://player.vimeo.com/video/2285902" title="R&ouml;yksopp: Remind Me">Flash / Video (Iframe/Direct Link To Vimeo)</a></p>
- <p><a class='iframe' href="http://wikipedia.com">Outside Webpage (Iframe)</a></p>
- <p><a class='inline' href="#inline_content">Inline HTML</a></p>
-
- <h2>Demonstration of using callbacks</h2>
- <p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
-
-
- <h2>Retina Images</h2>
- <p><a class="retina" href="../content/daisy.jpg" title="Retina">Retina</a></p>
- <p><a class="non-retina" href="../content/daisy.jpg" title="Non-Retina">Non-Retina</a></p>
-
- <!-- This contains the hidden content for inline calls -->
- <div style='display:none'>
- <div id='inline_content' style='padding:10px; background:#fff;'>
- <p><strong>This content comes from a hidden element on this page.</strong></p>
- <p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
- <p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
-
- <p><strong>If you try to open a new Colorbox while it is already open, it will update itself with the new content.</strong></p>
- <p>Updating Content Example:<br />
- <a class="ajax" href="../content/ajax.html">Click here to load new content</a></p>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/example5/colorbox.css b/wqflask/wqflask/static/packages/colorbox/example5/colorbox.css
deleted file mode 100644
index fae0adef..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example5/colorbox.css
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- Colorbox Core Style:
- The following CSS is consistent between example themes and should not be altered.
-*/
-#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
-#cboxOverlay{position:fixed; width:100%; height:100%;}
-#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
-#cboxContent{position:relative;}
-#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
-#cboxTitle{margin:0;}
-#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
-#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
-.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
-.cboxIframe{width:100%; height:100%; display:block; border:0;}
-#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
-
-/*
- User Style:
- Change the following styles to modify the appearance of Colorbox. They are
- ordered & tabbed in a way that represents the nesting of the generated HTML.
-*/
-#cboxOverlay{background:#000;}
-#colorbox{outline:0;}
- #cboxTopLeft{width:14px; height:14px; background:url(images/controls.png) no-repeat 0 0;}
- #cboxTopCenter{height:14px; background:url(images/border.png) repeat-x top left;}
- #cboxTopRight{width:14px; height:14px; background:url(images/controls.png) no-repeat -36px 0;}
- #cboxBottomLeft{width:14px; height:43px; background:url(images/controls.png) no-repeat 0 -32px;}
- #cboxBottomCenter{height:43px; background:url(images/border.png) repeat-x bottom left;}
- #cboxBottomRight{width:14px; height:43px; background:url(images/controls.png) no-repeat -36px -32px;}
- #cboxMiddleLeft{width:14px; background:url(images/controls.png) repeat-y -175px 0;}
- #cboxMiddleRight{width:14px; background:url(images/controls.png) repeat-y -211px 0;}
- #cboxContent{background:#fff; overflow:visible;}
- .cboxIframe{background:#fff;}
- #cboxError{padding:50px; border:1px solid #ccc;}
- #cboxLoadedContent{margin-bottom:5px;}
- #cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;}
- #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
- #cboxTitle{position:absolute; bottom:-25px; left:0; text-align:center; width:100%; font-weight:bold; color:#7C7C7C;}
- #cboxCurrent{position:absolute; bottom:-25px; left:58px; font-weight:bold; color:#7C7C7C;}
-
- /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
- #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; position:absolute; bottom:-29px; background:url(images/controls.png) no-repeat 0px 0px; width:23px; height:23px; text-indent:-9999px;}
-
- /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
- #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
-
- #cboxPrevious{left:0px; background-position: -51px -25px;}
- #cboxPrevious:hover{background-position:-51px 0px;}
- #cboxNext{left:27px; background-position:-75px -25px;}
- #cboxNext:hover{background-position:-75px 0px;}
- #cboxClose{right:0; background-position:-100px -25px;}
- #cboxClose:hover{background-position:-100px 0px;}
-
- .cboxSlideshow_on #cboxSlideshow{background-position:-125px 0px; right:27px;}
- .cboxSlideshow_on #cboxSlideshow:hover{background-position:-150px 0px;}
- .cboxSlideshow_off #cboxSlideshow{background-position:-150px -25px; right:27px;}
- .cboxSlideshow_off #cboxSlideshow:hover{background-position:-125px 0px;} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/example5/images/border.png b/wqflask/wqflask/static/packages/colorbox/example5/images/border.png
deleted file mode 100644
index df13bb6d..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example5/images/border.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example5/images/controls.png b/wqflask/wqflask/static/packages/colorbox/example5/images/controls.png
deleted file mode 100644
index 65cfd1dc..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example5/images/controls.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example5/images/loading.gif b/wqflask/wqflask/static/packages/colorbox/example5/images/loading.gif
deleted file mode 100644
index b4695d81..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example5/images/loading.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example5/images/loading_background.png b/wqflask/wqflask/static/packages/colorbox/example5/images/loading_background.png
deleted file mode 100644
index 9de11f46..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example5/images/loading_background.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/colorbox/example5/index.html b/wqflask/wqflask/static/packages/colorbox/example5/index.html
deleted file mode 100644
index 39a76f67..00000000
--- a/wqflask/wqflask/static/packages/colorbox/example5/index.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta charset='utf-8'/>
- <title>Colorbox Examples</title>
- <style>
- body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
- a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
- h2{font-size:13px; margin:15px 0 0 0;}
- </style>
- <link rel="stylesheet" href="colorbox.css" />
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
- <script src="../jquery.colorbox.js"></script>
- <script>
- $(document).ready(function(){
- //Examples of how to assign the Colorbox event to elements
- $(".group1").colorbox({rel:'group1'});
- $(".group2").colorbox({rel:'group2', transition:"fade"});
- $(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
- $(".group4").colorbox({rel:'group4', slideshow:true});
- $(".ajax").colorbox();
- $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
- $(".vimeo").colorbox({iframe:true, innerWidth:500, innerHeight:409});
- $(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
- $(".inline").colorbox({inline:true, width:"50%"});
- $(".callbacks").colorbox({
- onOpen:function(){ alert('onOpen: colorbox is about to open'); },
- onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
- onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
- onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
- onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
- });
-
- $('.non-retina').colorbox({rel:'group5', transition:'none'})
- $('.retina').colorbox({rel:'group5', transition:'none', retinaImage:true, retinaUrl:true});
-
- //Example of preserving a JavaScript event for inline calls.
- $("#click").click(function(){
- $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
- return false;
- });
- });
- </script>
- </head>
- <body>
- <h1>Colorbox Demonstration</h1>
- <h2>Elastic Transition</h2>
- <p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
- <p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group1" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>Fade Transition</h2>
- <p><a class="group2" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee">Grouped Photo 1</a></p>
- <p><a class="group2" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group2" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>No Transition + fixed width and height (75% of screen size)</h2>
- <p><a class="group3" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
- <p><a class="group3" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group3" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>Slideshow</h2>
- <p><a class="group4" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
- <p><a class="group4" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
- <p><a class="group4" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
-
- <h2>Other Content Types</h2>
- <p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
- <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
- <p><a class='vimeo' href="http://player.vimeo.com/video/2285902" title="R&ouml;yksopp: Remind Me">Flash / Video (Iframe/Direct Link To Vimeo)</a></p>
- <p><a class='iframe' href="http://wikipedia.com">Outside Webpage (Iframe)</a></p>
- <p><a class='inline' href="#inline_content">Inline HTML</a></p>
-
- <h2>Demonstration of using callbacks</h2>
- <p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
-
-
- <h2>Retina Images</h2>
- <p><a class="retina" href="../content/daisy.jpg" title="Retina">Retina</a></p>
- <p><a class="non-retina" href="../content/daisy.jpg" title="Non-Retina">Non-Retina</a></p>
-
- <!-- This contains the hidden content for inline calls -->
- <div style='display:none'>
- <div id='inline_content' style='padding:10px; background:#fff;'>
- <p><strong>This content comes from a hidden element on this page.</strong></p>
- <p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
- <p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
-
- <p><strong>If you try to open a new Colorbox while it is already open, it will update itself with the new content.</strong></p>
- <p>Updating Content Example:<br />
- <a class="ajax" href="../content/ajax.html">Click here to load new content</a></p>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-ar.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-ar.js
deleted file mode 100644
index 6c4228cd..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-ar.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Arabic (ar)
- translated by: A.Rhman Sayes
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "الصورة {current} من {total}",
- previous: "السابق",
- next: "التالي",
- close: "إغلاق",
- xhrError: "حدث خطأ أثناء تحميل المحتوى.",
- imgError: "حدث خطأ أثناء تحميل الصورة.",
- slideshowStart: "تشغيل العرض",
- slideshowStop: "إيقا٠العرض"
-});
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-bg b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-bg
deleted file mode 100644
index de7e4a1d..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-bg
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Bulgarian (bg)
- translated by: Marian M.Bida
- site: webmax.bg
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "изображение {current} от {total}",
- previous: "предишна",
- next: "Ñледваща",
- close: "затвори",
- xhrError: "ÐеуÑпешно зареждане на Ñъдържанието.",
- imgError: "ÐеуÑпешно зареждане на изображението.",
- slideshowStart: "пуÑни Ñлайд-шоу",
- slideshowStop: "Ñпри Ñлайд-шоу"
-});
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-cs.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-cs.js
deleted file mode 100644
index feda8059..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-cs.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Czech (cs)
- translated by: Filip Novak
- site: mame.napilno.cz/filip-novak
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "{current}. obrázek z {total}",
- previous: "Předchozí",
- next: "Následující",
- close: "Zavřít",
- xhrError: "Obsah se nepodaÅ™ilo naÄíst.",
- imgError: "Obrázek se nepodaÅ™ilo naÄíst."
-}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-da.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-da.js
deleted file mode 100644
index 676fffed..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-da.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Danish (da)
- translated by: danieljuhl
- site: danieljuhl.dk
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "Billede {current} af {total}",
- previous: "Forrige",
- next: "Næste",
- close: "Luk",
- xhrError: "Indholdet fejlede i indlæsningen.",
- imgError: "Billedet fejlede i indlæsningen.",
- slideshowStart: "Start slideshow",
- slideshowStop: "Stop slideshow"
-});
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-de.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-de.js
deleted file mode 100644
index d489379b..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-de.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: German (de)
- translated by: wallenium
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "Bild {current} von {total}",
- previous: "Zurück",
- next: "Vor",
- close: "Schließen",
- xhrError: "Dieser Inhalt konnte nicht geladen werden.",
- imgError: "Dieses Bild konnte nicht geladen werden.",
- slideshowStart: "Slideshow starten",
- slideshowStop: "Slideshow anhalten"
-}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-es.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-es.js
deleted file mode 100644
index 11296fc9..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-es.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Spanish (es)
- translated by: migolo
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "Imagen {current} de {total}",
- previous: "Anterior",
- next: "Siguiente",
- close: "Cerrar",
- xhrError: "Error en la carga del contenido.",
- imgError: "Error en la carga de la imagen."
-});
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-fa.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-fa.js
deleted file mode 100644
index 32869a4c..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-fa.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Persian (Farsi)
- translated by: Mahdi Jaberzadeh Ansari (MJZSoft)
- site: www.mjzsoft.ir
- email: mahdijaberzadehansari (at) yahoo.co.uk
- Please note : Persian language is right to left like arabic.
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "تصویر {current} از {total}",
- previous: "قبلی",
- next: "بعدی",
- close: "بستن",
- xhrError: "متاسÙانه محتویات مورد نظر قابل نمایش نیست.",
- imgError: "متاسÙانه بارگذاری این عکس با مشکل مواجه شده است.",
- slideshowStart: "آغاز نمایش خودکار",
- slideshowStop: "توق٠نمایش خودکار"
-});
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-fi.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-fi.js
deleted file mode 100644
index ac03fe02..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-fi.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Finnish (fi)
- translated by: Mikko
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "Kuva {current} / {total}",
- previous: "Edellinen",
- next: "Seuraava",
- close: "Sulje",
- xhrError: "Sisällön lataaminen epäonnistui.",
- imgError: "Kuvan lataaminen epäonnistui.",
- slideshowStart: "Aloita kuvaesitys.",
- slideshowStop: "Lopeta kuvaesitys."
-});
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-fr.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-fr.js
deleted file mode 100644
index f76352bd..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-fr.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: French (fr)
- translated by: oaubert
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "image {current} sur {total}",
- previous: "pr&eacute;c&eacute;dente",
- next: "suivante",
- close: "fermer",
- xhrError: "Impossible de charger ce contenu.",
- imgError: "Impossible de charger cette image.",
- slideshowStart: "d&eacute;marrer la pr&eacute;sentation",
- slideshowStop: "arr&ecirc;ter la pr&eacute;sentation"
-});
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-hr.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-hr.js
deleted file mode 100644
index 7eb62bec..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-hr.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Croatian (hr)
- translated by: Mladen Bicanic (base.hr)
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "Slika {current} od {total}",
- previous: "Prethodna",
- next: "Sljedeća",
- close: "Zatvori",
- xhrError: "NeuspjeÅ¡no uÄitavanje sadržaja.",
- imgError: "NeuspjeÅ¡no uÄitavanje slike.",
- slideshowStart: "Pokreni slideshow",
- slideshowStop: "Zaustavi slideshow"
-}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-hu.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-hu.js
deleted file mode 100644
index 72e9d36b..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-hu.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Hungarian (hu)
- translated by: kovadani
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "{current}/{total} kép",
- previous: "Előző",
- next: "Következő",
- close: "Bezár",
- xhrError: "A tartalmat nem sikerült betölteni.",
- imgError: "A képet nem sikerült betölteni.",
- slideshowStart: "Diavetítés indítása",
- slideshowStop: "Diavetítés leállítása"
-}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-it.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-it.js
deleted file mode 100644
index 2a4af645..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-it.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Italian (it)
- translated by: maur8ino
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "Immagine {current} di {total}",
- previous: "Precedente",
- next: "Successiva",
- close: "Chiudi",
- xhrError: "Errore nel caricamento del contenuto.",
- imgError: "Errore nel caricamento dell'immagine.",
- slideshowStart: "Inizia la presentazione",
- slideshowStop: "Termina la presentazione"
-});
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-ja.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-ja.js
deleted file mode 100644
index 5480de33..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-ja.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Japanaese (ja)
- translated by: Hajime Fujimoto
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "{total}枚中{current}枚目",
- previous: "å‰",
- next: "次",
- close: "é–‰ã˜ã‚‹",
- xhrError: "コンテンツã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ",
- imgError: "ç”»åƒã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ",
- slideshowStart: "スライドショー開始",
- slideshowStop: "スライドショー終了"
-});
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-kr.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-kr.js
deleted file mode 100644
index b95702bc..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-kr.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Korean (kr)
- translated by: lunareffect
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "ì´ {total} 중 {current}",
- previous: "ì´ì „",
- next: "다ìŒ",
- close: "닫기",
- xhrError: "컨í…츠를 불러오는 ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.",
- imgError: "ì´ë¯¸ì§€ë¥¼ 불러오는 ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.",
- slideshowStart: "슬ë¼ì´ë“œì‡¼ 시작",
- slideshowStop: "슬ë¼ì´ë“œì‡¼ 중지"
-});
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-lv.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-lv.js
deleted file mode 100644
index e376366b..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-lv.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Latvian (lv)
- translated by: Matiss Roberts Treinis
- site: x0.lv
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "attēls {current} no {total}",
- previous: "iepriekšējais",
- next: "nÄkamais",
- close: "aizvērt",
- xhrError: "NeizdevÄs ielÄdÄ“t saturu.",
- imgError: "NeizdevÄs ielÄdÄ“t attÄ“lu.",
- slideshowStart: "sÄkt slaidrÄdi",
- slideshowStop: "apturÄ“t slaidrÄdi"
-});
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-nl.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-nl.js
deleted file mode 100644
index dfc658ec..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-nl.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Dutch (nl)
- translated by: barryvdh
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "Afbeelding {current} van {total}",
- previous: "Vorige",
- next: "Volgende",
- close: "Sluiten",
- xhrError: "Deze inhoud kan niet geladen worden.",
- imgError: "Deze afbeelding kan niet geladen worden.",
- slideshowStart: "Diashow starten",
- slideshowStop: "Diashow stoppen"
-}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-no.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-no.js
deleted file mode 100644
index 277c5d3f..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-no.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Norwegian (no)
- translated by: lars-erik
- site: markedspartner.no
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "Bilde {current} av {total}",
- previous: "Forrige",
- next: "Neste",
- close: "Lukk",
- xhrError: "Feil ved lasting av innhold.",
- imgError: "Feil ved lasting av bilde.",
- slideshowStart: "Start lysbildefremvisning",
- slideshowStop: "Stopp lysbildefremvisning"
-});
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-pl.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-pl.js
deleted file mode 100644
index 1c04dae1..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-pl.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Polski (pl)
- translated by: Tomasz Wasiński
- site: 2bevisible.pl
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "{current}. obrazek z {total}",
- previous: "Poprzedni",
- next: "Następny",
- close: "Zamknij",
- xhrError: "Nie udało się załadować treści.",
- imgError: "Nie udało się załadować obrazka.",
- slideshowStart: "rozpocznij pokaz slajdów",
- slideshowStop: "zatrzymaj pokaz slajdów"
-}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-pt-br.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-pt-br.js
deleted file mode 100644
index 73e948b7..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-pt-br.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Brazilian Portuguese (pt-br)
- translated by: ReinaldoMT
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "Imagem {current} de {total}",
- previous: "Anterior",
- next: "Próxima",
- close: "Fechar",
- slideshowStart: "iniciar apresentação de slides",
- slideshowStop: "parar apresentação de slides",
- xhrError: "Erro ao carregar o conteúdo.",
- imgError: "Erro ao carregar a imagem."
-}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-ro.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-ro.js
deleted file mode 100644
index 0a461e28..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-ro.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Romanian (ro)
- translated by: shurub3l
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "imagine {current} din {total}",
- previous: "precedenta",
- next: "următoarea",
- close: "închideți",
- xhrError: "Acest conținut nu poate fi încărcat.",
- imgError: "Această imagine nu poate fi încărcată",
- slideshowStart: "începeți prezentarea (slideshow)",
- slideshowStop: "opriți prezentarea (slideshow)"
-}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-ru.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-ru.js
deleted file mode 100644
index 1d88b8cd..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-ru.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Russian (ru)
- translated by: Marfa
- site: themarfa.name
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "изображение {current} из {total}",
- previous: "назад",
- next: "вперёд",
- close: "закрыть",
- xhrError: "Ðе удалоÑÑŒ загрузить Ñодержимое.",
- imgError: "Ðе удалоÑÑŒ загрузить изображение.",
- slideshowStart: "начать Ñлайд-шоу",
- slideshowStop: "оÑтановить Ñлайд-шоу"
-}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-sk.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-sk.js
deleted file mode 100644
index 8ef1c2ec..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-sk.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Slovak (sk)
- translated by: Jaroslav Kostal
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "{current}. obrázok z {total}",
- previous: "Predchádzajúci",
- next: "Následujúci",
- close: "Zatvoriť",
- xhrError: "Obsah sa nepodarilo naÄítaÅ¥.",
- imgError: "Obrázok sa nepodarilo naÄítaÅ¥."
-}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-tr.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-tr.js
deleted file mode 100644
index d467c2ef..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-tr.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Turkish (tr)
- translated by: Caner ÖNCEL
- site: egonomik.com
-
- edited by: Sinan Eldem
- www.sinaneldem.com.tr
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "Görsel {current} / {total}",
- previous: "Önceki",
- next: "Sonraki",
- close: "Kapat",
- xhrError: "İçerik yüklenirken hata meydana geldi.",
- imgError: "Resim yüklenirken hata meydana geldi.",
- slideshowStart: "Slaytı Başlat",
- slideshowStop: "Slaytı Durdur"
-});
diff --git a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-zh-CN.js b/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-zh-CN.js
deleted file mode 100644
index 770d8eac..00000000
--- a/wqflask/wqflask/static/packages/colorbox/i18n/jquery.colorbox-zh-CN.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- jQuery Colorbox language configuration
- language: Chinese Simplified (zh-CN)
- translated by: zhao weiming
-*/
-jQuery.extend(jQuery.colorbox.settings, {
- current: "当å‰å›¾åƒ {current} 总共 {total}",
- previous: "å‰ä¸€é¡µ",
- next: "åŽä¸€é¡µ",
- close: "关闭",
- xhrError: "此内容无法加载",
- imgError: "此图片无法加载",
- slideshowStart: "开始播放幻ç¯ç‰‡",
- slideshowStop: "åœæ­¢æ’­æ”¾å¹»ç¯ç‰‡"
-}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/jquery.colorbox-min.js b/wqflask/wqflask/static/packages/colorbox/jquery.colorbox-min.js
deleted file mode 100644
index 6e79ec37..00000000
--- a/wqflask/wqflask/static/packages/colorbox/jquery.colorbox-min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- jQuery Colorbox v1.4.15 - 2013-04-22
- (c) 2013 Jack Moore - jacklmoore.com/colorbox
- license: http://www.opensource.org/licenses/mit-license.php
-*/
-(function(t,e,i){function o(i,o,n){var r=e.createElement(i);return o&&(r.id=te+o),n&&(r.style.cssText=n),t(r)}function n(){return i.innerHeight?i.innerHeight:t(i).height()}function r(t){var e=H.length,i=(j+t)%e;return 0>i?e+i:i}function h(t,e){return Math.round((/%/.test(t)?("x"===e?E.width():n())/100:1)*parseInt(t,10))}function l(t,e){return t.photo||t.photoRegex.test(e)}function s(t,e){return t.retinaUrl&&i.devicePixelRatio>1?e.replace(t.photoRegex,t.retinaSuffix):e}function a(t){"contains"in x[0]&&!x[0].contains(t.target)&&(t.stopPropagation(),x.focus())}function d(){var e,i=t.data(A,Z);null==i?(_=t.extend({},Y),console&&console.log&&console.log("Error: cboxElement missing settings object")):_=t.extend({},i);for(e in _)t.isFunction(_[e])&&"on"!==e.slice(0,2)&&(_[e]=_[e].call(A));_.rel=_.rel||A.rel||t(A).data("rel")||"nofollow",_.href=_.href||t(A).attr("href"),_.title=_.title||A.title,"string"==typeof _.href&&(_.href=t.trim(_.href))}function c(i,o){t(e).trigger(i),se.trigger(i),t.isFunction(o)&&o.call(A)}function u(){var t,e,i,o,n,r=te+"Slideshow_",h="click."+te;_.slideshow&&H[1]?(e=function(){clearTimeout(t)},i=function(){(_.loop||H[j+1])&&(t=setTimeout(J.next,_.slideshowSpeed))},o=function(){M.html(_.slideshowStop).unbind(h).one(h,n),se.bind(ne,i).bind(oe,e).bind(re,n),x.removeClass(r+"off").addClass(r+"on")},n=function(){e(),se.unbind(ne,i).unbind(oe,e).unbind(re,n),M.html(_.slideshowStart).unbind(h).one(h,function(){J.next(),o()}),x.removeClass(r+"on").addClass(r+"off")},_.slideshowAuto?o():n()):x.removeClass(r+"off "+r+"on")}function f(i){G||(A=i,d(),H=t(A),j=0,"nofollow"!==_.rel&&(H=t("."+ee).filter(function(){var e,i=t.data(this,Z);return i&&(e=t(this).data("rel")||i.rel||this.rel),e===_.rel}),j=H.index(A),-1===j&&(H=H.add(A),j=H.length-1)),g.css({opacity:parseFloat(_.opacity),cursor:_.overlayClose?"pointer":"auto",visibility:"visible"}).show(),V&&x.add(g).removeClass(V),_.className&&x.add(g).addClass(_.className),V=_.className,K.html(_.close).show(),$||($=q=!0,x.css({visibility:"hidden",display:"block"}),W=o(ae,"LoadedContent","width:0; height:0; overflow:hidden").appendTo(v),D=b.height()+k.height()+v.outerHeight(!0)-v.height(),B=C.width()+T.width()+v.outerWidth(!0)-v.width(),N=W.outerHeight(!0),z=W.outerWidth(!0),_.w=h(_.initialWidth,"x"),_.h=h(_.initialHeight,"y"),J.position(),u(),c(ie,_.onOpen),O.add(F).hide(),x.focus(),e.addEventListener&&(e.addEventListener("focus",a,!0),se.one(he,function(){e.removeEventListener("focus",a,!0)})),_.returnFocus&&se.one(he,function(){t(A).focus()})),w())}function p(){!x&&e.body&&(X=!1,E=t(i),x=o(ae).attr({id:Z,"class":t.support.opacity===!1?te+"IE":"",role:"dialog",tabindex:"-1"}).hide(),g=o(ae,"Overlay").hide(),S=o(ae,"LoadingOverlay").add(o(ae,"LoadingGraphic")),y=o(ae,"Wrapper"),v=o(ae,"Content").append(F=o(ae,"Title"),I=o(ae,"Current"),P=t('<button type="button"/>').attr({id:te+"Previous"}),R=t('<button type="button"/>').attr({id:te+"Next"}),M=o("button","Slideshow"),S,K=t('<button type="button"/>').attr({id:te+"Close"})),y.append(o(ae).append(o(ae,"TopLeft"),b=o(ae,"TopCenter"),o(ae,"TopRight")),o(ae,!1,"clear:left").append(C=o(ae,"MiddleLeft"),v,T=o(ae,"MiddleRight")),o(ae,!1,"clear:left").append(o(ae,"BottomLeft"),k=o(ae,"BottomCenter"),o(ae,"BottomRight"))).find("div div").css({"float":"left"}),L=o(ae,!1,"position:absolute; width:9999px; visibility:hidden; display:none"),O=R.add(P).add(I).add(M),t(e.body).append(g,x.append(y,L)))}function m(){function i(t){t.which>1||t.shiftKey||t.altKey||t.metaKey||t.control||(t.preventDefault(),f(this))}return x?(X||(X=!0,R.click(function(){J.next()}),P.click(function(){J.prev()}),K.click(function(){J.close()}),g.click(function(){_.overlayClose&&J.close()}),t(e).bind("keydown."+te,function(t){var e=t.keyCode;$&&_.escKey&&27===e&&(t.preventDefault(),J.close()),$&&_.arrowKey&&H[1]&&!t.altKey&&(37===e?(t.preventDefault(),P.click()):39===e&&(t.preventDefault(),R.click()))}),t.isFunction(t.fn.on)?t(e).on("click."+te,"."+ee,i):t("."+ee).live("click."+te,i)),!0):!1}function w(){var e,n,r,a=J.prep,u=++de;q=!0,U=!1,A=H[j],d(),c(le),c(oe,_.onLoad),_.h=_.height?h(_.height,"y")-N-D:_.innerHeight&&h(_.innerHeight,"y"),_.w=_.width?h(_.width,"x")-z-B:_.innerWidth&&h(_.innerWidth,"x"),_.mw=_.w,_.mh=_.h,_.maxWidth&&(_.mw=h(_.maxWidth,"x")-z-B,_.mw=_.w&&_.w<_.mw?_.w:_.mw),_.maxHeight&&(_.mh=h(_.maxHeight,"y")-N-D,_.mh=_.h&&_.h<_.mh?_.h:_.mh),e=_.href,Q=setTimeout(function(){S.show()},100),_.inline?(r=o(ae).hide().insertBefore(t(e)[0]),se.one(le,function(){r.replaceWith(W.children())}),a(t(e))):_.iframe?a(" "):_.html?a(_.html):l(_,e)?(e=s(_,e),t(U=new Image).addClass(te+"Photo").bind("error",function(){_.title=!1,a(o(ae,"Error").html(_.imgError))}).one("load",function(){var e;u===de&&(U.alt=t(A).attr("alt")||t(A).attr("data-alt")||"",_.retinaImage&&i.devicePixelRatio>1&&(U.height=U.height/i.devicePixelRatio,U.width=U.width/i.devicePixelRatio),_.scalePhotos&&(n=function(){U.height-=U.height*e,U.width-=U.width*e},_.mw&&U.width>_.mw&&(e=(U.width-_.mw)/U.width,n()),_.mh&&U.height>_.mh&&(e=(U.height-_.mh)/U.height,n())),_.h&&(U.style.marginTop=Math.max(_.mh-U.height,0)/2+"px"),H[1]&&(_.loop||H[j+1])&&(U.style.cursor="pointer",U.onclick=function(){J.next()}),U.style.width=U.width+"px",U.style.height=U.height+"px",setTimeout(function(){a(U)},1))}),setTimeout(function(){U.src=e},1)):e&&L.load(e,_.data,function(e,i){u===de&&a("error"===i?o(ae,"Error").html(_.xhrError):t(this).contents())})}var g,x,y,v,b,C,T,k,H,E,W,L,S,F,I,M,R,P,K,O,_,D,B,N,z,A,j,U,$,q,G,Q,J,V,X,Y={transition:"elastic",speed:300,fadeOut:300,width:!1,initialWidth:"600",innerWidth:!1,maxWidth:!1,height:!1,initialHeight:"450",innerHeight:!1,maxHeight:!1,scalePhotos:!0,scrolling:!0,inline:!1,html:!1,iframe:!1,fastIframe:!0,photo:!1,href:!1,title:!1,rel:!1,opacity:.9,preloading:!0,className:!1,retinaImage:!1,retinaUrl:!1,retinaSuffix:"@2x.$1",current:"image {current} of {total}",previous:"previous",next:"next",close:"close",xhrError:"This content failed to load.",imgError:"This image failed to load.",open:!1,returnFocus:!0,reposition:!0,loop:!0,slideshow:!1,slideshowAuto:!0,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",photoRegex:/\.(gif|png|jp(e|g|eg)|bmp|ico|webp)((#|\?).*)?$/i,onOpen:!1,onLoad:!1,onComplete:!1,onCleanup:!1,onClosed:!1,overlayClose:!0,escKey:!0,arrowKey:!0,top:!1,bottom:!1,left:!1,right:!1,fixed:!1,data:void 0},Z="colorbox",te="cbox",ee=te+"Element",ie=te+"_open",oe=te+"_load",ne=te+"_complete",re=te+"_cleanup",he=te+"_closed",le=te+"_purge",se=t("<a/>"),ae="div",de=0;t.colorbox||(t(p),J=t.fn[Z]=t[Z]=function(e,i){var o=this;if(e=e||{},p(),m()){if(t.isFunction(o))o=t("<a/>"),e.open=!0;else if(!o[0])return o;i&&(e.onComplete=i),o.each(function(){t.data(this,Z,t.extend({},t.data(this,Z)||Y,e))}).addClass(ee),(t.isFunction(e.open)&&e.open.call(o)||e.open)&&f(o[0])}return o},J.position=function(t,e){function i(t){b[0].style.width=k[0].style.width=v[0].style.width=parseInt(t.style.width,10)-B+"px",v[0].style.height=C[0].style.height=T[0].style.height=parseInt(t.style.height,10)-D+"px"}var o,r,l,s=0,a=0,d=x.offset();E.unbind("resize."+te),x.css({top:-9e4,left:-9e4}),r=E.scrollTop(),l=E.scrollLeft(),_.fixed?(d.top-=r,d.left-=l,x.css({position:"fixed"})):(s=r,a=l,x.css({position:"absolute"})),a+=_.right!==!1?Math.max(E.width()-_.w-z-B-h(_.right,"x"),0):_.left!==!1?h(_.left,"x"):Math.round(Math.max(E.width()-_.w-z-B,0)/2),s+=_.bottom!==!1?Math.max(n()-_.h-N-D-h(_.bottom,"y"),0):_.top!==!1?h(_.top,"y"):Math.round(Math.max(n()-_.h-N-D,0)/2),x.css({top:d.top,left:d.left,visibility:"visible"}),t=x.width()===_.w+z&&x.height()===_.h+N?0:t||0,y[0].style.width=y[0].style.height="9999px",o={width:_.w+z+B,height:_.h+N+D,top:s,left:a},0===t&&x.css(o),x.dequeue().animate(o,{duration:t,complete:function(){i(this),q=!1,y[0].style.width=_.w+z+B+"px",y[0].style.height=_.h+N+D+"px",_.reposition&&setTimeout(function(){E.bind("resize."+te,J.position)},1),e&&e()},step:function(){i(this)}})},J.resize=function(t){$&&(t=t||{},t.width&&(_.w=h(t.width,"x")-z-B),t.innerWidth&&(_.w=h(t.innerWidth,"x")),W.css({width:_.w}),t.height&&(_.h=h(t.height,"y")-N-D),t.innerHeight&&(_.h=h(t.innerHeight,"y")),t.innerHeight||t.height||(W.css({height:"auto"}),_.h=W.height()),W.css({height:_.h}),J.position("none"===_.transition?0:_.speed))},J.prep=function(e){function i(){return _.w=_.w||W.width(),_.w=_.mw&&_.mw<_.w?_.mw:_.w,_.w}function n(){return _.h=_.h||W.height(),_.h=_.mh&&_.mh<_.h?_.mh:_.h,_.h}if($){var h,a="none"===_.transition?0:_.speed;W.empty().remove(),W=o(ae,"LoadedContent").append(e),W.hide().appendTo(L.show()).css({width:i(),overflow:_.scrolling?"auto":"hidden"}).css({height:n()}).prependTo(v),L.hide(),t(U).css({"float":"none"}),h=function(){function e(){t.support.opacity===!1&&x[0].style.removeAttribute("filter")}var i,n,h=H.length,d="frameBorder",u="allowTransparency";$&&(n=function(){clearTimeout(Q),S.hide(),c(ne,_.onComplete)},F.html(_.title).add(W).show(),h>1?("string"==typeof _.current&&I.html(_.current.replace("{current}",j+1).replace("{total}",h)).show(),R[_.loop||h-1>j?"show":"hide"]().html(_.next),P[_.loop||j?"show":"hide"]().html(_.previous),_.slideshow&&M.show(),_.preloading&&t.each([r(-1),r(1)],function(){var e,i,o=H[this],n=t.data(o,Z);n&&n.href?(e=n.href,t.isFunction(e)&&(e=e.call(o))):e=t(o).attr("href"),e&&l(n,e)&&(e=s(n,e),i=new Image,i.src=e)})):O.hide(),_.iframe?(i=o("iframe")[0],d in i&&(i[d]=0),u in i&&(i[u]="true"),_.scrolling||(i.scrolling="no"),t(i).attr({src:_.href,name:(new Date).getTime(),"class":te+"Iframe",allowFullScreen:!0,webkitAllowFullScreen:!0,mozallowfullscreen:!0}).one("load",n).appendTo(W),se.one(le,function(){i.src="//about:blank"}),_.fastIframe&&t(i).trigger("load")):n(),"fade"===_.transition?x.fadeTo(a,1,e):e())},"fade"===_.transition?x.fadeTo(a,0,function(){J.position(0,h)}):J.position(a,h)}},J.next=function(){!q&&H[1]&&(_.loop||H[j+1])&&(j=r(1),f(H[j]))},J.prev=function(){!q&&H[1]&&(_.loop||j)&&(j=r(-1),f(H[j]))},J.close=function(){$&&!G&&(G=!0,$=!1,c(re,_.onCleanup),E.unbind("."+te),g.fadeTo(_.fadeOut||0,0),x.stop().fadeTo(_.fadeOut||0,0,function(){x.add(g).css({opacity:1,cursor:"auto"}).hide(),c(le),W.empty().remove(),setTimeout(function(){G=!1,c(he,_.onClosed)},1)}))},J.remove=function(){x&&(x.stop(),t.colorbox.close(),x.stop().remove(),g.remove(),G=!1,x=null,t("."+ee).removeData(Z).removeClass(ee),t(e).unbind("click."+te))},J.element=function(){return t(A)},J.settings=Y)})(jQuery,document,window); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/colorbox/jquery.colorbox.js b/wqflask/wqflask/static/packages/colorbox/jquery.colorbox.js
deleted file mode 100644
index 6d08f33f..00000000
--- a/wqflask/wqflask/static/packages/colorbox/jquery.colorbox.js
+++ /dev/null
@@ -1,1026 +0,0 @@
-/*!
- jQuery Colorbox v1.4.15 - 2013-04-22
- (c) 2013 Jack Moore - jacklmoore.com/colorbox
- license: http://www.opensource.org/licenses/mit-license.php
-*/
-(function ($, document, window) {
- var
- // Default settings object.
- // See http://jacklmoore.com/colorbox for details.
- defaults = {
- transition: "elastic",
- speed: 300,
- fadeOut: 300,
- width: false,
- initialWidth: "600",
- innerWidth: false,
- maxWidth: false,
- height: false,
- initialHeight: "450",
- innerHeight: false,
- maxHeight: false,
- scalePhotos: true,
- scrolling: true,
- inline: false,
- html: false,
- iframe: false,
- fastIframe: true,
- photo: false,
- href: false,
- title: false,
- rel: false,
- opacity: 0.9,
- preloading: true,
- className: false,
-
- // alternate image paths for high-res displays
- retinaImage: false,
- retinaUrl: false,
- retinaSuffix: '@2x.$1',
-
- // internationalization
- current: "image {current} of {total}",
- previous: "previous",
- next: "next",
- close: "close",
- xhrError: "This content failed to load.",
- imgError: "This image failed to load.",
-
- open: false,
- returnFocus: true,
- reposition: true,
- loop: true,
- slideshow: false,
- slideshowAuto: true,
- slideshowSpeed: 2500,
- slideshowStart: "start slideshow",
- slideshowStop: "stop slideshow",
- photoRegex: /\.(gif|png|jp(e|g|eg)|bmp|ico|webp)((#|\?).*)?$/i,
-
- onOpen: false,
- onLoad: false,
- onComplete: false,
- onCleanup: false,
- onClosed: false,
- overlayClose: true,
- escKey: true,
- arrowKey: true,
- top: false,
- bottom: false,
- left: false,
- right: false,
- fixed: false,
- data: undefined
- },
-
- // Abstracting the HTML and event identifiers for easy rebranding
- colorbox = 'colorbox',
- prefix = 'cbox',
- boxElement = prefix + 'Element',
-
- // Events
- event_open = prefix + '_open',
- event_load = prefix + '_load',
- event_complete = prefix + '_complete',
- event_cleanup = prefix + '_cleanup',
- event_closed = prefix + '_closed',
- event_purge = prefix + '_purge',
-
- // Cached jQuery Object Variables
- $overlay,
- $box,
- $wrap,
- $content,
- $topBorder,
- $leftBorder,
- $rightBorder,
- $bottomBorder,
- $related,
- $window,
- $loaded,
- $loadingBay,
- $loadingOverlay,
- $title,
- $current,
- $slideshow,
- $next,
- $prev,
- $close,
- $groupControls,
- $events = $('<a/>'),
-
- // Variables for cached values or use across multiple functions
- settings,
- interfaceHeight,
- interfaceWidth,
- loadedHeight,
- loadedWidth,
- element,
- index,
- photo,
- open,
- active,
- closing,
- loadingTimer,
- publicMethod,
- div = "div",
- className,
- requests = 0,
- init;
-
- // ****************
- // HELPER FUNCTIONS
- // ****************
-
- // Convenience function for creating new jQuery objects
- function $tag(tag, id, css) {
- var element = document.createElement(tag);
-
- if (id) {
- element.id = prefix + id;
- }
-
- if (css) {
- element.style.cssText = css;
- }
-
- return $(element);
- }
-
- // Get the window height using innerHeight when available to avoid an issue with iOS
- // http://bugs.jquery.com/ticket/6724
- function winheight() {
- return window.innerHeight ? window.innerHeight : $(window).height();
- }
-
- // Determine the next and previous members in a group.
- function getIndex(increment) {
- var
- max = $related.length,
- newIndex = (index + increment) % max;
-
- return (newIndex < 0) ? max + newIndex : newIndex;
- }
-
- // Convert '%' and 'px' values to integers
- function setSize(size, dimension) {
- return Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : winheight()) / 100) : 1) * parseInt(size, 10));
- }
-
- // Checks an href to see if it is a photo.
- // There is a force photo option (photo: true) for hrefs that cannot be matched by the regex.
- function isImage(settings, url) {
- return settings.photo || settings.photoRegex.test(url);
- }
-
- function retinaUrl(settings, url) {
- return settings.retinaUrl && window.devicePixelRatio > 1 ? url.replace(settings.photoRegex, settings.retinaSuffix) : url;
- }
-
- function trapFocus(e) {
- if ('contains' in $box[0] && !$box[0].contains(e.target)) {
- e.stopPropagation();
- $box.focus();
- }
- }
-
- // Assigns function results to their respective properties
- function makeSettings() {
- var i,
- data = $.data(element, colorbox);
-
- if (data == null) {
- settings = $.extend({}, defaults);
- if (console && console.log) {
- console.log('Error: cboxElement missing settings object');
- }
- } else {
- settings = $.extend({}, data);
- }
-
- for (i in settings) {
- if ($.isFunction(settings[i]) && i.slice(0, 2) !== 'on') { // checks to make sure the function isn't one of the callbacks, they will be handled at the appropriate time.
- settings[i] = settings[i].call(element);
- }
- }
-
- settings.rel = settings.rel || element.rel || $(element).data('rel') || 'nofollow';
- settings.href = settings.href || $(element).attr('href');
- settings.title = settings.title || element.title;
-
- if (typeof settings.href === "string") {
- settings.href = $.trim(settings.href);
- }
- }
-
- function trigger(event, callback) {
- // for external use
- $(document).trigger(event);
-
- // for internal use
- $events.trigger(event);
-
- if ($.isFunction(callback)) {
- callback.call(element);
- }
- }
-
- // Slideshow functionality
- function slideshow() {
- var
- timeOut,
- className = prefix + "Slideshow_",
- click = "click." + prefix,
- clear,
- set,
- start,
- stop;
-
- if (settings.slideshow && $related[1]) {
- clear = function () {
- clearTimeout(timeOut);
- };
-
- set = function () {
- if (settings.loop || $related[index + 1]) {
- timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed);
- }
- };
-
- start = function () {
- $slideshow
- .html(settings.slideshowStop)
- .unbind(click)
- .one(click, stop);
-
- $events
- .bind(event_complete, set)
- .bind(event_load, clear)
- .bind(event_cleanup, stop);
-
- $box.removeClass(className + "off").addClass(className + "on");
- };
-
- stop = function () {
- clear();
-
- $events
- .unbind(event_complete, set)
- .unbind(event_load, clear)
- .unbind(event_cleanup, stop);
-
- $slideshow
- .html(settings.slideshowStart)
- .unbind(click)
- .one(click, function () {
- publicMethod.next();
- start();
- });
-
- $box.removeClass(className + "on").addClass(className + "off");
- };
-
- if (settings.slideshowAuto) {
- start();
- } else {
- stop();
- }
- } else {
- $box.removeClass(className + "off " + className + "on");
- }
- }
-
- function launch(target) {
- if (!closing) {
-
- element = target;
-
- makeSettings();
-
- $related = $(element);
-
- index = 0;
-
- if (settings.rel !== 'nofollow') {
- $related = $('.' + boxElement).filter(function () {
- var data = $.data(this, colorbox),
- relRelated;
-
- if (data) {
- relRelated = $(this).data('rel') || data.rel || this.rel;
- }
-
- return (relRelated === settings.rel);
- });
- index = $related.index(element);
-
- // Check direct calls to Colorbox.
- if (index === -1) {
- $related = $related.add(element);
- index = $related.length - 1;
- }
- }
-
- $overlay.css({
- opacity: parseFloat(settings.opacity),
- cursor: settings.overlayClose ? "pointer" : "auto",
- visibility: 'visible'
- }).show();
-
-
- if (className) {
- $box.add($overlay).removeClass(className);
- }
- if (settings.className) {
- $box.add($overlay).addClass(settings.className);
- }
- className = settings.className;
-
- $close.html(settings.close).show();
-
- if (!open) {
- open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.
-
- // Show colorbox so the sizes can be calculated in older versions of jQuery
- $box.css({visibility:'hidden', display:'block'});
-
- $loaded = $tag(div, 'LoadedContent', 'width:0; height:0; overflow:hidden').appendTo($content);
-
- // Cache values needed for size calculations
- interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();
- interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();
- loadedHeight = $loaded.outerHeight(true);
- loadedWidth = $loaded.outerWidth(true);
-
-
- // Opens inital empty Colorbox prior to content being loaded.
- settings.w = setSize(settings.initialWidth, 'x');
- settings.h = setSize(settings.initialHeight, 'y');
- publicMethod.position();
-
- slideshow();
-
- trigger(event_open, settings.onOpen);
-
- $groupControls.add($title).hide();
-
- $box.focus();
-
- // Confine focus to the modal
- // Uses event capturing that is not supported in IE8-
- if (document.addEventListener) {
-
- document.addEventListener('focus', trapFocus, true);
-
- $events.one(event_closed, function () {
- document.removeEventListener('focus', trapFocus, true);
- });
- }
-
- // Return focus on closing
- if (settings.returnFocus) {
- $events.one(event_closed, function () {
- $(element).focus();
- });
- }
- }
-
- load();
- }
- }
-
- // Colorbox's markup needs to be added to the DOM prior to being called
- // so that the browser will go ahead and load the CSS background images.
- function appendHTML() {
- if (!$box && document.body) {
- init = false;
- $window = $(window);
- $box = $tag(div).attr({
- id: colorbox,
- 'class': $.support.opacity === false ? prefix + 'IE' : '', // class for optional IE8 & lower targeted CSS.
- role: 'dialog',
- tabindex: '-1'
- }).hide();
- $overlay = $tag(div, "Overlay").hide();
- $loadingOverlay = $tag(div, "LoadingOverlay").add($tag(div, "LoadingGraphic"));
- $wrap = $tag(div, "Wrapper");
- $content = $tag(div, "Content").append(
- $title = $tag(div, "Title"),
- $current = $tag(div, "Current"),
- $prev = $('<button type="button"/>').attr({id:prefix+'Previous'}),
- $next = $('<button type="button"/>').attr({id:prefix+'Next'}),
- $slideshow = $tag('button', "Slideshow"),
- $loadingOverlay,
- $close = $('<button type="button"/>').attr({id:prefix+'Close'})
- );
-
- $wrap.append( // The 3x3 Grid that makes up Colorbox
- $tag(div).append(
- $tag(div, "TopLeft"),
- $topBorder = $tag(div, "TopCenter"),
- $tag(div, "TopRight")
- ),
- $tag(div, false, 'clear:left').append(
- $leftBorder = $tag(div, "MiddleLeft"),
- $content,
- $rightBorder = $tag(div, "MiddleRight")
- ),
- $tag(div, false, 'clear:left').append(
- $tag(div, "BottomLeft"),
- $bottomBorder = $tag(div, "BottomCenter"),
- $tag(div, "BottomRight")
- )
- ).find('div div').css({'float': 'left'});
-
- $loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none');
-
- $groupControls = $next.add($prev).add($current).add($slideshow);
-
- $(document.body).append($overlay, $box.append($wrap, $loadingBay));
- }
- }
-
- // Add Colorbox's event bindings
- function addBindings() {
- function clickHandler(e) {
- // ignore non-left-mouse-clicks and clicks modified with ctrl / command, shift, or alt.
- // See: http://jacklmoore.com/notes/click-events/
- if (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey || e.control)) {
- e.preventDefault();
- launch(this);
- }
- }
-
- if ($box) {
- if (!init) {
- init = true;
-
- // Anonymous functions here keep the public method from being cached, thereby allowing them to be redefined on the fly.
- $next.click(function () {
- publicMethod.next();
- });
- $prev.click(function () {
- publicMethod.prev();
- });
- $close.click(function () {
- publicMethod.close();
- });
- $overlay.click(function () {
- if (settings.overlayClose) {
- publicMethod.close();
- }
- });
-
- // Key Bindings
- $(document).bind('keydown.' + prefix, function (e) {
- var key = e.keyCode;
- if (open && settings.escKey && key === 27) {
- e.preventDefault();
- publicMethod.close();
- }
- if (open && settings.arrowKey && $related[1] && !e.altKey) {
- if (key === 37) {
- e.preventDefault();
- $prev.click();
- } else if (key === 39) {
- e.preventDefault();
- $next.click();
- }
- }
- });
-
- if ($.isFunction($.fn.on)) {
- // For jQuery 1.7+
- $(document).on('click.'+prefix, '.'+boxElement, clickHandler);
- } else {
- // For jQuery 1.3.x -> 1.6.x
- // This code is never reached in jQuery 1.9, so do not contact me about 'live' being removed.
- // This is not here for jQuery 1.9, it's here for legacy users.
- $('.'+boxElement).live('click.'+prefix, clickHandler);
- }
- }
- return true;
- }
- return false;
- }
-
- // Don't do anything if Colorbox already exists.
- if ($.colorbox) {
- return;
- }
-
- // Append the HTML when the DOM loads
- $(appendHTML);
-
-
- // ****************
- // PUBLIC FUNCTIONS
- // Usage format: $.colorbox.close();
- // Usage from within an iframe: parent.jQuery.colorbox.close();
- // ****************
-
- publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {
- var $this = this;
-
- options = options || {};
-
- appendHTML();
-
- if (addBindings()) {
- if ($.isFunction($this)) { // assume a call to $.colorbox
- $this = $('<a/>');
- options.open = true;
- } else if (!$this[0]) { // colorbox being applied to empty collection
- return $this;
- }
-
- if (callback) {
- options.onComplete = callback;
- }
-
- $this.each(function () {
- $.data(this, colorbox, $.extend({}, $.data(this, colorbox) || defaults, options));
- }).addClass(boxElement);
-
- if (($.isFunction(options.open) && options.open.call($this)) || options.open) {
- launch($this[0]);
- }
- }
-
- return $this;
- };
-
- publicMethod.position = function (speed, loadedCallback) {
- var
- css,
- top = 0,
- left = 0,
- offset = $box.offset(),
- scrollTop,
- scrollLeft;
-
- $window.unbind('resize.' + prefix);
-
- // remove the modal so that it doesn't influence the document width/height
- $box.css({top: -9e4, left: -9e4});
-
- scrollTop = $window.scrollTop();
- scrollLeft = $window.scrollLeft();
-
- if (settings.fixed) {
- offset.top -= scrollTop;
- offset.left -= scrollLeft;
- $box.css({position: 'fixed'});
- } else {
- top = scrollTop;
- left = scrollLeft;
- $box.css({position: 'absolute'});
- }
-
- // keeps the top and left positions within the browser's viewport.
- if (settings.right !== false) {
- left += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.right, 'x'), 0);
- } else if (settings.left !== false) {
- left += setSize(settings.left, 'x');
- } else {
- left += Math.round(Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2);
- }
-
- if (settings.bottom !== false) {
- top += Math.max(winheight() - settings.h - loadedHeight - interfaceHeight - setSize(settings.bottom, 'y'), 0);
- } else if (settings.top !== false) {
- top += setSize(settings.top, 'y');
- } else {
- top += Math.round(Math.max(winheight() - settings.h - loadedHeight - interfaceHeight, 0) / 2);
- }
-
- $box.css({top: offset.top, left: offset.left, visibility:'visible'});
-
- // setting the speed to 0 to reduce the delay between same-sized content.
- speed = ($box.width() === settings.w + loadedWidth && $box.height() === settings.h + loadedHeight) ? 0 : speed || 0;
-
- // this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,
- // but it has to be shrank down around the size of div#colorbox when it's done. If not,
- // it can invoke an obscure IE bug when using iframes.
- $wrap[0].style.width = $wrap[0].style.height = "9999px";
-
- function modalDimensions(that) {
- $topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = (parseInt(that.style.width,10) - interfaceWidth)+'px';
- $content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = (parseInt(that.style.height,10) - interfaceHeight)+'px';
- }
-
- css = {width: settings.w + loadedWidth + interfaceWidth, height: settings.h + loadedHeight + interfaceHeight, top: top, left: left};
-
- if(speed===0){ // temporary workaround to side-step jQuery-UI 1.8 bug (http://bugs.jquery.com/ticket/12273)
- $box.css(css);
- }
- $box.dequeue().animate(css, {
- duration: speed,
- complete: function () {
- modalDimensions(this);
-
- active = false;
-
- // shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation.
- $wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + "px";
- $wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + "px";
-
- if (settings.reposition) {
- setTimeout(function () { // small delay before binding onresize due to an IE8 bug.
- $window.bind('resize.' + prefix, publicMethod.position);
- }, 1);
- }
-
- if (loadedCallback) {
- loadedCallback();
- }
- },
- step: function () {
- modalDimensions(this);
- }
- });
- };
-
- publicMethod.resize = function (options) {
- if (open) {
- options = options || {};
-
- if (options.width) {
- settings.w = setSize(options.width, 'x') - loadedWidth - interfaceWidth;
- }
- if (options.innerWidth) {
- settings.w = setSize(options.innerWidth, 'x');
- }
- $loaded.css({width: settings.w});
-
- if (options.height) {
- settings.h = setSize(options.height, 'y') - loadedHeight - interfaceHeight;
- }
- if (options.innerHeight) {
- settings.h = setSize(options.innerHeight, 'y');
- }
- if (!options.innerHeight && !options.height) {
- $loaded.css({height: "auto"});
- settings.h = $loaded.height();
- }
- $loaded.css({height: settings.h});
-
- publicMethod.position(settings.transition === "none" ? 0 : settings.speed);
- }
- };
-
- publicMethod.prep = function (object) {
- if (!open) {
- return;
- }
-
- var callback, speed = settings.transition === "none" ? 0 : settings.speed;
-
- $loaded.empty().remove(); // Using empty first may prevent some IE7 issues.
-
- $loaded = $tag(div, 'LoadedContent').append(object);
-
- function getWidth() {
- settings.w = settings.w || $loaded.width();
- settings.w = settings.mw && settings.mw < settings.w ? settings.mw : settings.w;
- return settings.w;
- }
- function getHeight() {
- settings.h = settings.h || $loaded.height();
- settings.h = settings.mh && settings.mh < settings.h ? settings.mh : settings.h;
- return settings.h;
- }
-
- $loaded.hide()
- .appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations.
- .css({width: getWidth(), overflow: settings.scrolling ? 'auto' : 'hidden'})
- .css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height.
- .prependTo($content);
-
- $loadingBay.hide();
-
- // floating the IMG removes the bottom line-height and fixed a problem where IE miscalculates the width of the parent element as 100% of the document width.
-
- $(photo).css({'float': 'none'});
-
- callback = function () {
- var total = $related.length,
- iframe,
- frameBorder = 'frameBorder',
- allowTransparency = 'allowTransparency',
- complete;
-
- if (!open) {
- return;
- }
-
- function removeFilter() { // Needed for IE7 & IE8 in versions of jQuery prior to 1.7.2
- if ($.support.opacity === false) {
- $box[0].style.removeAttribute('filter');
- }
- }
-
- complete = function () {
- clearTimeout(loadingTimer);
- $loadingOverlay.hide();
- trigger(event_complete, settings.onComplete);
- };
-
-
- $title.html(settings.title).add($loaded).show();
-
- if (total > 1) { // handle grouping
- if (typeof settings.current === "string") {
- $current.html(settings.current.replace('{current}', index + 1).replace('{total}', total)).show();
- }
-
- $next[(settings.loop || index < total - 1) ? "show" : "hide"]().html(settings.next);
- $prev[(settings.loop || index) ? "show" : "hide"]().html(settings.previous);
-
- if (settings.slideshow) {
- $slideshow.show();
- }
-
- // Preloads images within a rel group
- if (settings.preloading) {
- $.each([getIndex(-1), getIndex(1)], function(){
- var src,
- img,
- i = $related[this],
- data = $.data(i, colorbox);
-
- if (data && data.href) {
- src = data.href;
- if ($.isFunction(src)) {
- src = src.call(i);
- }
- } else {
- src = $(i).attr('href');
- }
-
- if (src && isImage(data, src)) {
- src = retinaUrl(data, src);
- img = new Image();
- img.src = src;
- }
- });
- }
- } else {
- $groupControls.hide();
- }
-
- if (settings.iframe) {
- iframe = $tag('iframe')[0];
-
- if (frameBorder in iframe) {
- iframe[frameBorder] = 0;
- }
-
- if (allowTransparency in iframe) {
- iframe[allowTransparency] = "true";
- }
-
- if (!settings.scrolling) {
- iframe.scrolling = "no";
- }
-
- $(iframe)
- .attr({
- src: settings.href,
- name: (new Date()).getTime(), // give the iframe a unique name to prevent caching
- 'class': prefix + 'Iframe',
- allowFullScreen : true, // allow HTML5 video to go fullscreen
- webkitAllowFullScreen : true,
- mozallowfullscreen : true
- })
- .one('load', complete)
- .appendTo($loaded);
-
- $events.one(event_purge, function () {
- iframe.src = "//about:blank";
- });
-
- if (settings.fastIframe) {
- $(iframe).trigger('load');
- }
- } else {
- complete();
- }
-
- if (settings.transition === 'fade') {
- $box.fadeTo(speed, 1, removeFilter);
- } else {
- removeFilter();
- }
- };
-
- if (settings.transition === 'fade') {
- $box.fadeTo(speed, 0, function () {
- publicMethod.position(0, callback);
- });
- } else {
- publicMethod.position(speed, callback);
- }
- };
-
- function load () {
- var href, setResize, prep = publicMethod.prep, $inline, request = ++requests;
-
- active = true;
-
- photo = false;
-
- element = $related[index];
-
- makeSettings();
-
- trigger(event_purge);
-
- trigger(event_load, settings.onLoad);
-
- settings.h = settings.height ?
- setSize(settings.height, 'y') - loadedHeight - interfaceHeight :
- settings.innerHeight && setSize(settings.innerHeight, 'y');
-
- settings.w = settings.width ?
- setSize(settings.width, 'x') - loadedWidth - interfaceWidth :
- settings.innerWidth && setSize(settings.innerWidth, 'x');
-
- // Sets the minimum dimensions for use in image scaling
- settings.mw = settings.w;
- settings.mh = settings.h;
-
- // Re-evaluate the minimum width and height based on maxWidth and maxHeight values.
- // If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.
- if (settings.maxWidth) {
- settings.mw = setSize(settings.maxWidth, 'x') - loadedWidth - interfaceWidth;
- settings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;
- }
- if (settings.maxHeight) {
- settings.mh = setSize(settings.maxHeight, 'y') - loadedHeight - interfaceHeight;
- settings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;
- }
-
- href = settings.href;
-
- loadingTimer = setTimeout(function () {
- $loadingOverlay.show();
- }, 100);
-
- if (settings.inline) {
- // Inserts an empty placeholder where inline content is being pulled from.
- // An event is bound to put inline content back when Colorbox closes or loads new content.
- $inline = $tag(div).hide().insertBefore($(href)[0]);
-
- $events.one(event_purge, function () {
- $inline.replaceWith($loaded.children());
- });
-
- prep($(href));
- } else if (settings.iframe) {
- // IFrame element won't be added to the DOM until it is ready to be displayed,
- // to avoid problems with DOM-ready JS that might be trying to run in that iframe.
- prep(" ");
- } else if (settings.html) {
- prep(settings.html);
- } else if (isImage(settings, href)) {
-
- href = retinaUrl(settings, href);
-
- $(photo = new Image())
- .addClass(prefix + 'Photo')
- .bind('error',function () {
- settings.title = false;
- prep($tag(div, 'Error').html(settings.imgError));
- })
- .one('load', function () {
- var percent;
-
- if (request !== requests) {
- return;
- }
-
- photo.alt = $(element).attr('alt') || $(element).attr('data-alt') || '';
-
- if (settings.retinaImage && window.devicePixelRatio > 1) {
- photo.height = photo.height / window.devicePixelRatio;
- photo.width = photo.width / window.devicePixelRatio;
- }
-
- if (settings.scalePhotos) {
- setResize = function () {
- photo.height -= photo.height * percent;
- photo.width -= photo.width * percent;
- };
- if (settings.mw && photo.width > settings.mw) {
- percent = (photo.width - settings.mw) / photo.width;
- setResize();
- }
- if (settings.mh && photo.height > settings.mh) {
- percent = (photo.height - settings.mh) / photo.height;
- setResize();
- }
- }
-
- if (settings.h) {
- photo.style.marginTop = Math.max(settings.mh - photo.height, 0) / 2 + 'px';
- }
-
- if ($related[1] && (settings.loop || $related[index + 1])) {
- photo.style.cursor = 'pointer';
- photo.onclick = function () {
- publicMethod.next();
- };
- }
-
- photo.style.width = photo.width + 'px';
- photo.style.height = photo.height + 'px';
-
- setTimeout(function () { // A pause because Chrome will sometimes report a 0 by 0 size otherwise.
- prep(photo);
- }, 1);
- });
-
- setTimeout(function () { // A pause because Opera 10.6+ will sometimes not run the onload function otherwise.
- photo.src = href;
- }, 1);
- } else if (href) {
- $loadingBay.load(href, settings.data, function (data, status) {
- if (request === requests) {
- prep(status === 'error' ? $tag(div, 'Error').html(settings.xhrError) : $(this).contents());
- }
- });
- }
- }
-
- // Navigates to the next page/image in a set.
- publicMethod.next = function () {
- if (!active && $related[1] && (settings.loop || $related[index + 1])) {
- index = getIndex(1);
- launch($related[index]);
- }
- };
-
- publicMethod.prev = function () {
- if (!active && $related[1] && (settings.loop || index)) {
- index = getIndex(-1);
- launch($related[index]);
- }
- };
-
- // Note: to use this within an iframe use the following format: parent.jQuery.colorbox.close();
- publicMethod.close = function () {
- if (open && !closing) {
-
- closing = true;
-
- open = false;
-
- trigger(event_cleanup, settings.onCleanup);
-
- $window.unbind('.' + prefix);
-
- $overlay.fadeTo(settings.fadeOut || 0, 0);
-
- $box.stop().fadeTo(settings.fadeOut || 0, 0, function () {
-
- $box.add($overlay).css({'opacity': 1, cursor: 'auto'}).hide();
-
- trigger(event_purge);
-
- $loaded.empty().remove(); // Using empty first may prevent some IE7 issues.
-
- setTimeout(function () {
- closing = false;
- trigger(event_closed, settings.onClosed);
- }, 1);
- });
- }
- };
-
- // Removes changes Colorbox made to the document, but does not remove the plugin.
- publicMethod.remove = function () {
- if (!$box) { return; }
-
- $box.stop();
- $.colorbox.close();
- $box.stop().remove();
- $overlay.remove();
- closing = false;
- $box = null;
- $('.' + boxElement)
- .removeData(colorbox)
- .removeClass(boxElement);
-
- $(document).unbind('click.'+prefix);
- };
-
- // A method for fetching the current element Colorbox is referencing.
- // returns a jQuery object.
- publicMethod.element = function () {
- return $(element);
- };
-
- publicMethod.settings = defaults;
-
-}(jQuery, document, window));
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/.gitignore b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/.gitignore
deleted file mode 100644
index 9daa8247..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.DS_Store
-node_modules
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/Cakefile b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/Cakefile
deleted file mode 100644
index 0f91e6ff..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/Cakefile
+++ /dev/null
@@ -1,11 +0,0 @@
-{print} = require 'util'
-{spawn} = require 'child_process'
-
-task 'build', 'Build lib/ from src/', ->
- coffee = spawn 'coffee', ['-c', '-o', 'lib', 'src']
- coffee.stderr.on 'data', (data) ->
- process.stderr.write data.toString()
- coffee.stdout.on 'data', (data) ->
- print data.toString()
- coffee.on 'exit', (code) ->
- callback?() if code is 0
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/LICENSE b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/LICENSE
deleted file mode 100644
index 4dfe9bfb..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2012 Terry Tai, Pragmatic.ly (terry@pragmatic.ly, https://pragmatic.ly/)
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/README.md b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/README.md
deleted file mode 100644
index bc59cc9c..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/README.md
+++ /dev/null
@@ -1,123 +0,0 @@
-Smart Time Ago
-======================
-
-Smart Time Ago is a little jQuery library to update the relative timestamps in your document intelligently. (e.g "3 hours ago").
-
-It's originally built for https://pragmatic.ly/.
-
-It's inspired by another jQuery plugin http://timeago.yarp.com/ but give more flexibility and more intelligently.
-
-Installation
-------------
-
-You can use it as a jQuery plugin.
-
- Just copy the lib/timeago.js or src/timeago.coffee to your project folder then load it after jQuery.
-
-Or if you use node, you can install it from npm.
-
- $ npm install -g smart-time-ago
-
-Why Smart?
--------------
-
-Smart Time Ago will check and update the relative time every 60000 millisecond (60 seconds) in the scope you specify at the beginning. Latter it will check the newest time in your scope then tune the checking time interval to a proper value.
-
-For example, if the newest time in the scope you specify is '2 hours ago'. There is no need to check and update the relative time every 60 seconds. Instead, Smart Time Ago will automaticly make the checking time interval longer to 30 minutes.
-
-Rules:
-
- The newest time is less than 44 minutes, the checking time interval will set to 1 minute.
-
- The newest time is between 44 and 89 minutes, the checking time interval will set to 22 minutes.
-
- The newest time is between 90 minutes and 42 hours, the checking time interval will set to 30 minutes.
-
- The newest time is more than 42 hours, the checking time interval will set to half day.
-
-Usage
-------------
-
-By default Smart Time Ago will keep watching on the time elements with a class of timeago and a ISO8601 timestamp in datatime attribute:
-
- <time class="timeago" datetime="2012-07-18T07:51:50Z">about 8 hours ago</time>
-
-You can initialize the smart-time-ago in global like:
-
- $('body').timeago();
-
-It will watch all your relative time elements by only one TimeAgo instance.
-
-Or you can use it in a specify scope like.
-
- <div class="timeLables">
- <time class="timeago" datetime="2012-07-18T07:51:50Z">about 8 hours ago</time>
- <time class="timeago" datetime="2012-07-18T06:51:50Z">about 9 hours ago</time>
- </div>
-
- $('.timeLables').timeago();
-
-It will create one TimeAgo instance to update the time elements in the div with timeLables class.
-
-However you can also create TimeAgo instance for every time element separately like:
-
- $('.timeago').timeago();
-
-BTW if you need dynamic add the time element to your document without refreshing the page or you want to refresh the timeago manually. You might need call the refresh function to refresh the instance like:
-
- $('.timeago').timeago('refresh');
-
-
-Configuration
---------------
-
-There are some default configuration in Smart Time Ago:
-
- $.fn.timeago.defaults = {
- selector: 'time.timeago',
- attr: 'datetime',
- dir: 'up',
- suffix: 'ago'
- };
-
-The 'time.timeago' is the default selector to watch and update.
-
-The 'datetime' is the default attribute to put the ISO8601 absolute time to parse.
-
-The 'up' in dir means the elements in your scope is display by time desc. which means if the dir sets to 'up'. Smart Time Ago will treat the first element's time as the newest time to adjust the time interval. Oppositely if it set to 'down', Smart Time Ago will treat the last element's time as the newewst time.
-
-
-The 'ago' in 'suffix' means the relative generated by Smart Time Ago will look like '3 hours ago'.
-If you want the text looks like '3 hours from now', you might need change the 'suffix' to 'from now'.
-
-You can change the default configurations by passing the options to
-timeago function when initialize timeago like:
-
- $('.timeago').timeago({selector: 'span.timeago', attr: 'title', dir: 'down', suffix: 'from now'})
-
-
-Gem for Rails
--------------
-Thanks [ashchan](https://github.com/ashchan) for writing the ruby gem:
-[timeago-rails](https://github.com/ashchan/timeago-rails)
-
-If you wanna running Smart Time Ago in Rails, please do check it out.
-
-TODO
------
-
-Thanks very much if you could contribute.
-
-
-Credits
--------
-
-![pragmatic.ly](https://pragmatic.ly/assets/vlogo.png)
-
-Smart Time Ago is maintained and funded by [Pragmatic.ly](https://pragmatic.ly/ "Pragmatic.ly").
-
-Thanks to all the contributors.
-
-Special thanks to [unRob](https://github.com/unRob) for the i18n support.
-
-Copyright (c) 2012 Terry Tai, Pragmatic.ly (terry@pragmatic.ly, https://pragmatic.ly/)
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/bower.json b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/bower.json
deleted file mode 100644
index f7812449..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/bower.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
- "name": "smart-time-ago",
- "version": "0.1.5",
- "title": "jQuery library to update the relative timestamps in your document",
- "description": "jQuery library to update the relative timestamps in your document with flexibility and intelligence.",
- "keywords": [
- "jquery",
- "timeago",
- "time-ago",
- "smart-time-ago"
- ],
- "homepage": "http://pragmaticly.github.com/smart-time-ago",
- "author": {
- "name": "Terry Tai",
- "url": "http://terrytai.com"
- },
- "maintainers": [
- {
- "name": "Terry Tai",
- "url": "http://terrytai.com"
- },
- {
- "name": "Dingding Ye",
- "url": "http://yedingding.com"
- }
- ],
- "repository": {
- "type": "git",
- "url": "git://github.com/pragmaticly/smart-time-ago.git"
- },
- "bugs": "https://github.com/pragmaticly/smart-time-ago/issues",
- "licenses": [
- {
- "type": "MIT",
- "url": "http://www.opensource.org/licenses/MIT"
- }
- ],
- "dependencies": {
- "jquery": ">=1.6"
- },
- "main": [
- "lib/timeago.js",
- "lib/locales/timeago.da.js",
- "lib/locales/timeago.de.js",
- "lib/locales/timeago.en.js",
- "lib/locales/timeago.es.js",
- "lib/locales/timeago.fr.js",
- "lib/locales/timeago.ja.js",
- "lib/locales/timeago.pt-br.js",
- "lib/locales/timeago.zh-cn.js"
- ]
-}
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/index.js b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/index.js
deleted file mode 100644
index aaa219aa..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/index.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('./lib/timeago');
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.da.js b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.da.js
deleted file mode 100644
index c5917bf3..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.da.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Generated by CoffeeScript 1.3.3
-(function() {
-
- $.fn.timeago.defaults.lang = {
- units: {
- second: "sekund",
- seconds: "sekunder",
- minute: "minut",
- minutes: "minutter",
- hour: "time",
- hours: "timer",
- day: "dag",
- days: "dage",
- month: "måned",
- months: "måneder",
- year: "Ã¥r",
- years: "Ã¥r"
- },
- prefixes: {
- lt: "mindre end",
- about: "ca.",
- over: "over",
- almost: "næsten",
- ago: ""
- },
- suffix: " siden"
- };
-
-}).call(this);
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.de.js b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.de.js
deleted file mode 100644
index b30a09d3..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.de.js
+++ /dev/null
@@ -1,28 +0,0 @@
-(function() {
-
- $.fn.timeago.defaults.lang = {
- units: {
- second: "Sekunde",
- seconds: "Sekunden",
- minute: "Minute",
- minutes: "Minuten",
- hour: "Stunde",
- hours: "Stunden",
- day: "Tag",
- days: "Tagen",
- month: "Monat",
- months: "Monaten",
- year: "Jahr",
- years: "Jahren"
- },
- prefixes: {
- lt: "weniger als eine",
- about: "ungefähr",
- over: "über",
- almost: "fast",
- ago: "vor "
- },
- suffix: ""
- };
-
-}).call(this);
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.en.js b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.en.js
deleted file mode 100644
index 8709958b..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.en.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Generated by CoffeeScript 1.3.3
-(function() {
-
- $.fn.timeago.defaults.lang = {
- units: {
- second: "second",
- seconds: "seconds",
- minute: "minute",
- minutes: "minutes",
- hour: "hour",
- hours: "hours",
- day: "day",
- days: "days",
- month: "month",
- months: "months",
- year: "year",
- years: "years"
- },
- prefixes: {
- lt: "less than a",
- about: "about",
- over: "over",
- almost: "almost",
- ago: ""
- },
- suffix: " ago"
- };
-
-}).call(this);
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.es.js b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.es.js
deleted file mode 100644
index dd8c7da2..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.es.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Generated by CoffeeScript 1.3.3
-(function() {
-
- $.fn.timeago.defaults.lang = {
- units: {
- second: "segundo",
- seconds: "segundos",
- minute: "minuto",
- minutes: "minutos",
- hour: "hora",
- hours: "horas",
- day: "día",
- days: "días",
- month: "mes",
- months: "meses",
- year: "año",
- years: "años"
- },
- prefixes: {
- lt: "hace menos de un",
- about: "cerca de",
- over: "poco más de",
- almost: "casi",
- ago: "hace "
- },
- suffix: ""
- };
-
-}).call(this);
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.fr.js b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.fr.js
deleted file mode 100644
index f018c2bf..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.fr.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Generated by CoffeeScript 1.3.3
-(function() {
-
- $.fn.timeago.defaults.lang = {
- units: {
- second: "seconde",
- seconds: "secondes",
- minute: "minute",
- minutes: "minutes",
- hour: "heure",
- hours: "heures",
- day: "jour",
- days: "jours",
- month: "mois",
- months: "mois",
- year: "an",
- years: "ans"
- },
- prefixes: {
- lt: "moins d'un",
- about: "environ",
- over: "plus de ",
- almost: "presque",
- ago: "il y a "
- },
- suffix: ""
- };
-
-}).call(this);
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.ja.js b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.ja.js
deleted file mode 100644
index f7576185..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.ja.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-
- $.fn.timeago.defaults.lang = {
- units: {
- second: "秒",
- seconds: "秒",
- minute: "分",
- minutes: "分",
- hour: "時間",
- hours: "時間",
- day: "æ—¥",
- days: "æ—¥",
- month: "ヶ月",
- months: "ヶ月",
- year: "å¹´",
- years: "å¹´"
- },
- prefixes: {
- lt: "ç´„ 1",
- about: "大体",
- over: "",
- almost: "",
- ago: ""
- },
- suffix: 'å‰'
- };
-
-}).call(this);
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.pt-br.js b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.pt-br.js
deleted file mode 100644
index a233c2e0..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.pt-br.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Generated by CoffeeScript 1.3.3
-(function() {
-
- $.fn.timeago.defaults.lang = {
- units: {
- second: "segundo",
- seconds: "segundos",
- minute: "minuto",
- minutes: "minutos",
- hour: "hora",
- hours: "horas",
- day: "dia",
- days: "dias",
- month: "mês",
- months: "meses",
- year: "ano",
- years: "anos"
- },
- prefixes: {
- lt: "menos de um",
- about: "aproximadamente",
- over: "pouco mais de",
- almost: "quase",
- ago: ""
- },
- suffix: " atrás"
- };
-
-}).call(this);
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.zh-cn.js b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.zh-cn.js
deleted file mode 100644
index 0294f83f..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/locales/timeago.zh-cn.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Generated by CoffeeScript 1.6.1
-(function() {
-
- $.fn.timeago.defaults.lang = {
- units: {
- second: "秒",
- seconds: "秒",
- minute: "分钟",
- minutes: "分钟",
- hour: "å°æ—¶",
- hours: "å°æ—¶",
- day: "天",
- days: "天",
- month: "月",
- months: "月",
- year: "å¹´",
- years: "å¹´"
- },
- prefixes: {
- lt: "ä¸åˆ° 1",
- about: "大约",
- over: "超过",
- almost: "接近",
- ago: ""
- },
- suffix: "之å‰"
- };
-
-}).call(this);
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/timeago.js b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/timeago.js
deleted file mode 100644
index 4e42e60d..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/lib/timeago.js
+++ /dev/null
@@ -1,194 +0,0 @@
-// Copyright 2012, Terry Tai, Pragmatic.ly
-// https://pragmatic.ly/
-// Licensed under the MIT license.
-// https://github.com/pragmaticly/smart-time-ago/blob/master/LICENSE
-//
-// Generated by CoffeeScript 1.5.0
-
-(function() {
- var TimeAgo;
-
- TimeAgo = (function() {
-
- function TimeAgo(element, options) {
- this.startInterval = 60000;
- this.init(element, options);
- }
-
- TimeAgo.prototype.init = function(element, options) {
- this.$element = $(element);
- this.options = $.extend({}, $.fn.timeago.defaults, options);
- this.updateTime();
- return this.startTimer();
- };
-
- TimeAgo.prototype.startTimer = function() {
- var self;
- self = this;
- return this.interval = setInterval((function() {
- return self.refresh();
- }), this.startInterval);
- };
-
- TimeAgo.prototype.stopTimer = function() {
- return clearInterval(this.interval);
- };
-
- TimeAgo.prototype.restartTimer = function() {
- this.stopTimer();
- return this.startTimer();
- };
-
- TimeAgo.prototype.refresh = function() {
- this.updateTime();
- return this.updateInterval();
- };
-
- TimeAgo.prototype.updateTime = function() {
- var self;
- self = this;
- return this.$element.findAndSelf(this.options.selector).each(function() {
- var timeAgoInWords;
- timeAgoInWords = self.timeAgoInWords($(this).attr(self.options.attr));
- return $(this).html(timeAgoInWords);
- });
- };
-
- TimeAgo.prototype.updateInterval = function() {
- var filter, newestTime, newestTimeInMinutes, newestTimeSrc;
- if (this.$element.findAndSelf(this.options.selector).length > 0) {
- if (this.options.dir === "up") {
- filter = ":first";
- } else if (this.options.dir === "down") {
- filter = ":last";
- }
- newestTimeSrc = this.$element.findAndSelf(this.options.selector).filter(filter).attr(this.options.attr);
- newestTime = this.parse(newestTimeSrc);
- newestTimeInMinutes = this.getTimeDistanceInMinutes(newestTime);
- if (newestTimeInMinutes >= 0 && newestTimeInMinutes <= 44 && this.startInterval !== 60000) {
- this.startInterval = 60000;
- return this.restartTimer();
- } else if (newestTimeInMinutes >= 45 && newestTimeInMinutes <= 89 && this.startInterval !== 60000 * 22) {
- this.startInterval = 60000 * 22;
- return this.restartTimer();
- } else if (newestTimeInMinutes >= 90 && newestTimeInMinutes <= 2519 && this.startInterval !== 60000 * 30) {
- this.startInterval = 60000 * 30;
- return this.restartTimer();
- } else if (newestTimeInMinutes >= 2520 && this.startInterval !== 60000 * 60 * 12) {
- this.startInterval = 60000 * 60 * 12;
- return this.restartTimer();
- }
- }
- };
-
- TimeAgo.prototype.timeAgoInWords = function(timeString) {
- var absolutTime;
- absolutTime = this.parse(timeString);
- return "" + this.options.lang.prefixes.ago + (this.distanceOfTimeInWords(absolutTime)) + this.options.lang.suffix;
- };
-
- TimeAgo.prototype.parse = function(iso8601) {
- var timeStr;
- timeStr = $.trim(iso8601);
- timeStr = timeStr.replace(/\.\d\d\d+/, "");
- timeStr = timeStr.replace(/-/, "/").replace(/-/, "/");
- timeStr = timeStr.replace(/T/, " ").replace(/Z/, " UTC");
- timeStr = timeStr.replace(/([\+\-]\d\d)\:?(\d\d)/, " $1$2");
- return new Date(timeStr);
- };
-
- TimeAgo.prototype.getTimeDistanceInMinutes = function(absolutTime) {
- var timeDistance;
- timeDistance = new Date().getTime() - absolutTime.getTime();
- return Math.round((Math.abs(timeDistance) / 1000) / 60);
- };
-
- TimeAgo.prototype.distanceOfTimeInWords = function(absolutTime) {
- var dim;
- dim = this.getTimeDistanceInMinutes(absolutTime);
- if (dim === 0) {
- return "" + this.options.lang.prefixes.lt + " " + this.options.lang.units.minute;
- } else if (dim === 1) {
- return "1 " + this.options.lang.units.minute;
- } else if (dim >= 2 && dim <= 44) {
- return "" + dim + " " + this.options.lang.units.minutes;
- } else if (dim >= 45 && dim <= 89) {
- return "" + this.options.lang.prefixes.about + " 1 " + this.options.lang.units.hour;
- } else if (dim >= 90 && dim <= 1439) {
- return "" + this.options.lang.prefixes.about + " " + (Math.round(dim / 60)) + " " + this.options.lang.units.hours;
- } else if (dim >= 1440 && dim <= 2519) {
- return "1 " + this.options.lang.units.day;
- } else if (dim >= 2520 && dim <= 43199) {
- return "" + (Math.round(dim / 1440)) + " " + this.options.lang.units.days;
- } else if (dim >= 43200 && dim <= 86399) {
- return "" + this.options.lang.prefixes.about + " 1 " + this.options.lang.units.month;
- } else if (dim >= 86400 && dim <= 525599) {
- return "" + (Math.round(dim / 43200)) + " " + this.options.lang.units.months;
- } else if (dim >= 525600 && dim <= 655199) {
- return "" + this.options.lang.prefixes.about + " 1 " + this.options.lang.units.year;
- } else if (dim >= 655200 && dim <= 914399) {
- return "" + this.options.lang.prefixes.over + " 1 " + this.options.lang.units.year;
- } else if (dim >= 914400 && dim <= 1051199) {
- return "" + this.options.lang.prefixes.almost + " 2 " + this.options.lang.units.years;
- } else {
- return "" + this.options.lang.prefixes.about + " " + (Math.round(dim / 525600)) + " " + this.options.lang.units.years;
- }
- };
-
- return TimeAgo;
-
- })();
-
- $.fn.timeago = function(options) {
- if (options == null) {
- options = {};
- }
- return this.each(function() {
- var $this, data;
- $this = $(this);
- data = $this.data("timeago");
- if (!data) {
- return $this.data("timeago", new TimeAgo(this, options));
- } else if (typeof options === 'string') {
- return data[options]();
- }
- });
- };
-
- $.fn.findAndSelf = function(selector) {
- return this.find(selector).add(this.filter(selector));
- };
-
- $.fn.timeago.Constructor = TimeAgo;
-
- $.fn.timeago.defaults = {
- selector: 'time.timeago',
- attr: 'datetime',
- dir: 'up',
- lang: {
- units: {
- second: "second",
- seconds: "seconds",
- minute: "minute",
- minutes: "minutes",
- hour: "hour",
- hours: "hours",
- day: "day",
- days: "days",
- month: "month",
- months: "months",
- year: "year",
- years: "years"
- },
- prefixes: {
- lt: "less than a",
- about: "about",
- over: "over",
- almost: "almost",
- ago: ""
- },
- suffix: ' ago'
- }
- };
-
-}).call(this);
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/package.json b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/package.json
deleted file mode 100644
index be4f957e..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/package.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "smart-time-ago",
- "description": "a simple lib to update the relative time on your page",
- "version": "0.1.5",
- "keywords": ["timeago", "relative", "time"],
- "author": "poshboytl",
- "homepage": "https://pragmatic.ly/",
- "licenses":
- [{
- "type": "MIT",
- "url": "https://github.com/pragmaticly/smart-time-ago/blob/master/LICENSE"
- }],
- "repository": {
- "type" : "git",
- "url": "http://github.com/pragmaticly/smart-time-ago.git"
- },
- "dependencies" : {
- "jquery" : "*"
- },
- "main" : "./index.js"
-}
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.da.coffee b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.da.coffee
deleted file mode 100644
index 851490b1..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.da.coffee
+++ /dev/null
@@ -1,21 +0,0 @@
- $.fn.timeago.defaults.lang =
- units:
- second: "sekund"
- seconds: "sekunder"
- minute: "minut"
- minutes: "minutter"
- hour: "time"
- hours: "timer"
- day: "dag"
- days: "dage"
- month: "måned"
- months: "måneder"
- year: "Ã¥r"
- years: "Ã¥r"
- prefixes:
- lt: "mindre end",
- about: "ca."
- over: "over"
- almost: "næsten"
- ago: ""
- suffix: " siden"
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.de.coffee b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.de.coffee
deleted file mode 100644
index 56757f00..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.de.coffee
+++ /dev/null
@@ -1,21 +0,0 @@
-$.fn.timeago.defaults.lang =
- units:
- second: "Sekunde"
- seconds: "Sekunden"
- minute: "Minute"
- minutes: "Minuten"
- hour: "Stunde"
- hours: "Stunden"
- day: "Tag"
- days: "Tagen"
- month: "Monat"
- months: "Monaten"
- year: "Jahr"
- years: "Jahren"
- prefixes:
- lt: "weniger als eine"
- about: "ungefähr"
- over: "über"
- almost: "fast"
- ago: "vor "
- suffix: ""
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.en.coffee b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.en.coffee
deleted file mode 100644
index 98572fcb..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.en.coffee
+++ /dev/null
@@ -1,21 +0,0 @@
-$.fn.timeago.defaults.lang =
- units:
- second: "second"
- seconds: "seconds"
- minute: "minute"
- minutes: "minutes"
- hour: "hour"
- hours: "hours"
- day: "day"
- days: "days"
- month: "month"
- months: "months"
- year: "year"
- years: "years"
- prefixes:
- lt: "less than a"
- about: "about"
- over: "over"
- almost: "almost"
- ago: ""
- suffix: " ago"
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.es.coffee b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.es.coffee
deleted file mode 100644
index 8dd873fa..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.es.coffee
+++ /dev/null
@@ -1,22 +0,0 @@
-$.fn.timeago.defaults.lang =
- units:
- second: "segundo"
- seconds: "segundos"
- minute: "minuto"
- minutes: "minutos"
- hour: "hora"
- hours: "horas"
- day: "día"
- days: "días"
- month: "mes"
- months: "meses"
- year: "año"
- years: "años"
- prefixes:
- lt: "hace menos de un"
- about: "cerca de"
- over: "poco más de"
- almost: "casi"
- ago: "hace "
- suffix: ""
-
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.fr.coffee b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.fr.coffee
deleted file mode 100644
index fcecdb75..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.fr.coffee
+++ /dev/null
@@ -1,21 +0,0 @@
-$.fn.timeago.defaults.lang =
- units:
- second: "seconde"
- seconds: "secondes"
- minute: "minute"
- minutes: "minutes"
- hour: "heure"
- hours: "heures"
- day: "jour"
- days: "jours"
- month: "mois"
- months: "mois"
- year: "an"
- years: "ans"
- prefixes:
- lt: "moins d'un"
- about: "environ"
- over: "plus de "
- almost: "presque"
- ago: "il y a "
- suffix: ""
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.ja.coffee b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.ja.coffee
deleted file mode 100644
index 14ad8ac0..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.ja.coffee
+++ /dev/null
@@ -1,21 +0,0 @@
-$.fn.timeago.defaults.lang =
- units:
- second: "秒"
- seconds: "秒"
- minute: "分"
- minutes: "分"
- hour: "時間"
- hours: "時間"
- day: "æ—¥"
- days: "æ—¥"
- month: "ヶ月"
- months: "ヶ月"
- year: "å¹´"
- years: "å¹´"
- prefixes:
- lt: "ç´„ 1"
- about: "大体"
- over: ""
- almost: ""
- ago: ""
- suffix: 'å‰'
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.pt-br.coffee b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.pt-br.coffee
deleted file mode 100644
index e1361e69..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.pt-br.coffee
+++ /dev/null
@@ -1,21 +0,0 @@
-$.fn.timeago.defaults.lang =
- units:
- second: "segundo"
- seconds: "segundos"
- minute: "minuto"
- minutes: "minutos"
- hour: "hora"
- hours: "horas"
- day: "dia"
- days: "dias"
- month: "mês"
- months: "meses"
- year: "ano"
- years: "anos"
- prefixes:
- lt: "menos de um"
- about: "aproximadamente"
- over: "pouco mais de"
- almost: "quase"
- ago: ""
- suffix: " atrás"
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.zh-cn.coffee b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.zh-cn.coffee
deleted file mode 100644
index 532678c4..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/timeago.zh-cn.coffee
+++ /dev/null
@@ -1,21 +0,0 @@
-$.fn.timeago.defaults.lang =
- units:
- second: "秒"
- seconds: "秒"
- minute: "分钟"
- minutes: "分钟"
- hour: "å°æ—¶"
- hours: "å°æ—¶"
- day: "天"
- days: "天"
- month: "个月"
- months: "个月"
- year: "å¹´"
- years: "å¹´"
- prefixes:
- lt: "ä¸åˆ° 1"
- about: "大约"
- over: "超过"
- almost: "接近"
- ago: ""
- suffix: "之å‰"
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/timeago.coffee b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/timeago.coffee
deleted file mode 100644
index b57fa866..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/timeago.coffee
+++ /dev/null
@@ -1,152 +0,0 @@
-# Smart Time Ago v0.1.1
-
-# Copyright 2012, Terry Tai, Pragmatic.ly
-# https://pragmatic.ly/
-# Licensed under the MIT license.
-# https://github.com/pragmaticly/smart-time-ago/blob/master/LICENSE
-
-class TimeAgo
-
- constructor: (element, options) ->
- @startInterval = 60000
- @init(element, options)
-
- init: (element, options) ->
- @$element = $(element)
- @options = $.extend({}, $.fn.timeago.defaults, options)
- @updateTime()
- @startTimer()
-
- startTimer: ->
- self = @
- @interval = setInterval ( ->
- self.refresh()
- ), @startInterval
-
- stopTimer: ->
- clearInterval(@interval)
-
- restartTimer: ->
- @stopTimer()
- @startTimer()
-
- refresh: ->
- @updateTime()
- @updateInterval()
-
- updateTime: ->
- self = @
- @$element.findAndSelf(@options.selector).each ->
- timeAgoInWords = self.timeAgoInWords($(this).attr(self.options.attr))
- $(this).html(timeAgoInWords)
-
- updateInterval: ->
- if @$element.findAndSelf(@options.selector).length > 0
- if @options.dir is "up"
- filter = ":first"
- else if @options.dir is "down"
- filter = ":last"
- newestTimeSrc = @$element.findAndSelf(@options.selector).filter(filter).attr(@options.attr)
- newestTime = @parse(newestTimeSrc)
- newestTimeInMinutes = @getTimeDistanceInMinutes(newestTime)
-
- if newestTimeInMinutes >= 0 and newestTimeInMinutes <= 44 and @startInterval != 60000 #1 minute
- @startInterval = 60000
- @restartTimer()
- else if newestTimeInMinutes >= 45 and newestTimeInMinutes <= 89 and @startInterval != 60000 * 22 #22 minutes
- @startInterval = 60000 * 22
- @restartTimer()
- else if newestTimeInMinutes >= 90 and newestTimeInMinutes <= 2519 and @startInterval != 60000 * 30 #half hour
- @startInterval = 60000 * 30
- @restartTimer()
- else if newestTimeInMinutes >= 2520 and @startInterval != 60000 * 60 * 12 #half day
- @startInterval = 60000 * 60 * 12
- @restartTimer()
-
- timeAgoInWords: (timeString) ->
- absolutTime = @parse(timeString)
- "#{@options.lang.prefixes.ago}#{@distanceOfTimeInWords(absolutTime)}#{@options.lang.suffix}"
-
- parse: (iso8601) ->
- timeStr = $.trim(iso8601)
- timeStr = timeStr.replace(/\.\d+/,"")
- timeStr = timeStr.replace(/-/,"/").replace(/-/,"/")
- timeStr = timeStr.replace(/T/," ").replace(/Z/," UTC")
- timeStr = timeStr.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2")
- new Date(timeStr);
-
- getTimeDistanceInMinutes: (absolutTime) ->
- timeDistance = new Date().getTime() - absolutTime.getTime()
- Math.round((Math.abs(timeDistance) / 1000) / 60)
-
- distanceOfTimeInWords: (absolutTime) ->
- #TODO support i18n.
- dim = @getTimeDistanceInMinutes(absolutTime) #distance in minutes
-
- if dim == 0
- "#{ @options.lang.prefixes.lt } #{ @options.lang.units.minute }"
- else if dim == 1
- "1 #{ @options.lang.units.minute }"
- else if dim >= 2 and dim <= 44
- "#{ dim } #{ @options.lang.units.minutes }"
- else if dim >= 45 and dim <= 89
- "#{ @options.lang.prefixes.about } 1 #{ @options.lang.units.hour }"
- else if dim >= 90 and dim <= 1439
- "#{ @options.lang.prefixes.about } #{ Math.round(dim / 60) } #{ @options.lang.units.hours }"
- else if dim >= 1440 and dim <= 2519
- "1 #{ @options.lang.units.day }"
- else if dim >= 2520 and dim <= 43199
- "#{ Math.round(dim / 1440) } #{ @options.lang.units.days }"
- else if dim >= 43200 and dim <= 86399
- "#{ @options.lang.prefixes.about } 1 #{ @options.lang.units.month }"
- else if dim >= 86400 and dim <= 525599 #1 yr
- "#{ Math.round(dim / 43200) } #{ @options.lang.units.months }"
- else if dim >= 525600 and dim <= 655199 #1 yr, 3 months
- "#{ @options.lang.prefixes.about } 1 #{ @options.lang.units.year }"
- else if dim >= 655200 and dim <= 914399 #1 yr, 9 months
- "#{ @options.lang.prefixes.over } 1 #{ @options.lang.units.year }"
- else if dim >= 914400 and dim <= 1051199 #2 yr minus half minute
- "#{ @options.lang.prefixes.almost } 2 #{ @options.lang.units.years }"
- else
- "#{ @options.lang.prefixes.about } #{ Math.round(dim / 525600) } #{ @options.lang.units.years }"
-
-$.fn.timeago = (options = {}) ->
- @each ->
- $this = $(this)
- data = $this.data("timeago")
- if (!data)
- $this.data("timeago", new TimeAgo(this, options))
- else if (typeof options is 'string')
- data[options]()
-
-$.fn.findAndSelf = (selector) ->
- this.find(selector).add(this.filter(selector))
-
-$.fn.timeago.Constructor = TimeAgo
-
-$.fn.timeago.defaults =
- selector: 'time.timeago'
- attr: 'datetime'
- dir: 'up'
- lang:
- units:
- second: "second"
- seconds: "seconds"
- minute: "minute"
- minutes: "minutes"
- hour: "hour"
- hours: "hours"
- day: "day"
- days: "days"
- month: "month"
- months: "months"
- year: "year"
- years: "years"
- prefixes:
- lt: "less than a"
- about: "about"
- over: "over"
- almost: "almost"
- ago: ""
- suffix: ' ago'
-
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/index.html b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/index.html
deleted file mode 100644
index 7426b609..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/index.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Jasmine Test Runner</title>
- <link rel="stylesheet" type="text/css" href="lib/jasmine.css">
- <script type="text/javascript" src="lib/jasmine.js"></script>
- <script type="text/javascript" src="lib/jasmine-html.js"></script>
-
- <script src="lib/jquery.js" type="text/javascript" charset="utf-8"></script>
-
- <script src="../lib/timeago.js" type="text/javascript" charset="utf-8"></script>
- <!-- Optional: for language testing -->
- <!--script src="../lib/timeago.es.js" type="text/javascript" charset="utf-8"></script-->
-
- <script src="specs/timeago_spec.js" type="text/javascript" charset="utf-8"></script>
-</head>
-<body>
-
- <script type="text/javascript">
- (function() {
- var jasmineEnv = jasmine.getEnv();
- jasmineEnv.updateInterval = 1000;
-
- var htmlReporter = new jasmine.HtmlReporter();
-
- jasmineEnv.addReporter(htmlReporter);
-
- jasmineEnv.specFilter = function(spec) {
- return htmlReporter.specFilter(spec);
- };
-
- var currentWindowOnload = window.onload;
-
- window.onload = function() {
- if (currentWindowOnload) {
- currentWindowOnload();
- }
- execJasmine();
- };
-
- function execJasmine() {
- jasmineEnv.execute();
- }
-
- })(); </script>
-</body>
-</html>
-
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/lib/jasmine-html.js b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/lib/jasmine-html.js
deleted file mode 100644
index a0b06394..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/lib/jasmine-html.js
+++ /dev/null
@@ -1,616 +0,0 @@
-jasmine.HtmlReporterHelpers = {};
-
-jasmine.HtmlReporterHelpers.createDom = function(type, attrs, childrenVarArgs) {
- var el = document.createElement(type);
-
- for (var i = 2; i < arguments.length; i++) {
- var child = arguments[i];
-
- if (typeof child === 'string') {
- el.appendChild(document.createTextNode(child));
- } else {
- if (child) {
- el.appendChild(child);
- }
- }
- }
-
- for (var attr in attrs) {
- if (attr == "className") {
- el[attr] = attrs[attr];
- } else {
- el.setAttribute(attr, attrs[attr]);
- }
- }
-
- return el;
-};
-
-jasmine.HtmlReporterHelpers.getSpecStatus = function(child) {
- var results = child.results();
- var status = results.passed() ? 'passed' : 'failed';
- if (results.skipped) {
- status = 'skipped';
- }
-
- return status;
-};
-
-jasmine.HtmlReporterHelpers.appendToSummary = function(child, childElement) {
- var parentDiv = this.dom.summary;
- var parentSuite = (typeof child.parentSuite == 'undefined') ? 'suite' : 'parentSuite';
- var parent = child[parentSuite];
-
- if (parent) {
- if (typeof this.views.suites[parent.id] == 'undefined') {
- this.views.suites[parent.id] = new jasmine.HtmlReporter.SuiteView(parent, this.dom, this.views);
- }
- parentDiv = this.views.suites[parent.id].element;
- }
-
- parentDiv.appendChild(childElement);
-};
-
-
-jasmine.HtmlReporterHelpers.addHelpers = function(ctor) {
- for(var fn in jasmine.HtmlReporterHelpers) {
- ctor.prototype[fn] = jasmine.HtmlReporterHelpers[fn];
- }
-};
-
-jasmine.HtmlReporter = function(_doc) {
- var self = this;
- var doc = _doc || window.document;
-
- var reporterView;
-
- var dom = {};
-
- // Jasmine Reporter Public Interface
- self.logRunningSpecs = false;
-
- self.reportRunnerStarting = function(runner) {
- var specs = runner.specs() || [];
-
- if (specs.length == 0) {
- return;
- }
-
- createReporterDom(runner.env.versionString());
- doc.body.appendChild(dom.reporter);
-
- reporterView = new jasmine.HtmlReporter.ReporterView(dom);
- reporterView.addSpecs(specs, self.specFilter);
- };
-
- self.reportRunnerResults = function(runner) {
- reporterView && reporterView.complete();
- };
-
- self.reportSuiteResults = function(suite) {
- reporterView.suiteComplete(suite);
- };
-
- self.reportSpecStarting = function(spec) {
- if (self.logRunningSpecs) {
- self.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
- }
- };
-
- self.reportSpecResults = function(spec) {
- reporterView.specComplete(spec);
- };
-
- self.log = function() {
- var console = jasmine.getGlobal().console;
- if (console && console.log) {
- if (console.log.apply) {
- console.log.apply(console, arguments);
- } else {
- console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
- }
- }
- };
-
- self.specFilter = function(spec) {
- if (!focusedSpecName()) {
- return true;
- }
-
- return spec.getFullName().indexOf(focusedSpecName()) === 0;
- };
-
- return self;
-
- function focusedSpecName() {
- var specName;
-
- (function memoizeFocusedSpec() {
- if (specName) {
- return;
- }
-
- var paramMap = [];
- var params = doc.location.search.substring(1).split('&');
-
- for (var i = 0; i < params.length; i++) {
- var p = params[i].split('=');
- paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
- }
-
- specName = paramMap.spec;
- })();
-
- return specName;
- }
-
- function createReporterDom(version) {
- dom.reporter = self.createDom('div', { id: 'HTMLReporter', className: 'jasmine_reporter' },
- dom.banner = self.createDom('div', { className: 'banner' },
- self.createDom('span', { className: 'title' }, "Jasmine "),
- self.createDom('span', { className: 'version' }, version)),
-
- dom.symbolSummary = self.createDom('ul', {className: 'symbolSummary'}),
- dom.alert = self.createDom('div', {className: 'alert'}),
- dom.results = self.createDom('div', {className: 'results'},
- dom.summary = self.createDom('div', { className: 'summary' }),
- dom.details = self.createDom('div', { id: 'details' }))
- );
- }
-};
-jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter);jasmine.HtmlReporter.ReporterView = function(dom) {
- this.startedAt = new Date();
- this.runningSpecCount = 0;
- this.completeSpecCount = 0;
- this.passedCount = 0;
- this.failedCount = 0;
- this.skippedCount = 0;
-
- this.createResultsMenu = function() {
- this.resultsMenu = this.createDom('span', {className: 'resultsMenu bar'},
- this.summaryMenuItem = this.createDom('a', {className: 'summaryMenuItem', href: "#"}, '0 specs'),
- ' | ',
- this.detailsMenuItem = this.createDom('a', {className: 'detailsMenuItem', href: "#"}, '0 failing'));
-
- this.summaryMenuItem.onclick = function() {
- dom.reporter.className = dom.reporter.className.replace(/ showDetails/g, '');
- };
-
- this.detailsMenuItem.onclick = function() {
- showDetails();
- };
- };
-
- this.addSpecs = function(specs, specFilter) {
- this.totalSpecCount = specs.length;
-
- this.views = {
- specs: {},
- suites: {}
- };
-
- for (var i = 0; i < specs.length; i++) {
- var spec = specs[i];
- this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom, this.views);
- if (specFilter(spec)) {
- this.runningSpecCount++;
- }
- }
- };
-
- this.specComplete = function(spec) {
- this.completeSpecCount++;
-
- if (isUndefined(this.views.specs[spec.id])) {
- this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom);
- }
-
- var specView = this.views.specs[spec.id];
-
- switch (specView.status()) {
- case 'passed':
- this.passedCount++;
- break;
-
- case 'failed':
- this.failedCount++;
- break;
-
- case 'skipped':
- this.skippedCount++;
- break;
- }
-
- specView.refresh();
- this.refresh();
- };
-
- this.suiteComplete = function(suite) {
- var suiteView = this.views.suites[suite.id];
- if (isUndefined(suiteView)) {
- return;
- }
- suiteView.refresh();
- };
-
- this.refresh = function() {
-
- if (isUndefined(this.resultsMenu)) {
- this.createResultsMenu();
- }
-
- // currently running UI
- if (isUndefined(this.runningAlert)) {
- this.runningAlert = this.createDom('a', {href: "?", className: "runningAlert bar"});
- dom.alert.appendChild(this.runningAlert);
- }
- this.runningAlert.innerHTML = "Running " + this.completeSpecCount + " of " + specPluralizedFor(this.totalSpecCount);
-
- // skipped specs UI
- if (isUndefined(this.skippedAlert)) {
- this.skippedAlert = this.createDom('a', {href: "?", className: "skippedAlert bar"});
- }
-
- this.skippedAlert.innerHTML = "Skipping " + this.skippedCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";
-
- if (this.skippedCount === 1 && isDefined(dom.alert)) {
- dom.alert.appendChild(this.skippedAlert);
- }
-
- // passing specs UI
- if (isUndefined(this.passedAlert)) {
- this.passedAlert = this.createDom('span', {href: "?", className: "passingAlert bar"});
- }
- this.passedAlert.innerHTML = "Passing " + specPluralizedFor(this.passedCount);
-
- // failing specs UI
- if (isUndefined(this.failedAlert)) {
- this.failedAlert = this.createDom('span', {href: "?", className: "failingAlert bar"});
- }
- this.failedAlert.innerHTML = "Failing " + specPluralizedFor(this.failedCount);
-
- if (this.failedCount === 1 && isDefined(dom.alert)) {
- dom.alert.appendChild(this.failedAlert);
- dom.alert.appendChild(this.resultsMenu);
- }
-
- // summary info
- this.summaryMenuItem.innerHTML = "" + specPluralizedFor(this.runningSpecCount);
- this.detailsMenuItem.innerHTML = "" + this.failedCount + " failing";
- };
-
- this.complete = function() {
- dom.alert.removeChild(this.runningAlert);
-
- this.skippedAlert.innerHTML = "Ran " + this.runningSpecCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";
-
- if (this.failedCount === 0) {
- dom.alert.appendChild(this.createDom('span', {className: 'passingAlert bar'}, "Passing " + specPluralizedFor(this.passedCount)));
- } else {
- showDetails();
- }
-
- dom.banner.appendChild(this.createDom('span', {className: 'duration'}, "finished in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s"));
- };
-
- return this;
-
- function showDetails() {
- if (dom.reporter.className.search(/showDetails/) === -1) {
- dom.reporter.className += " showDetails";
- }
- }
-
- function isUndefined(obj) {
- return typeof obj === 'undefined';
- }
-
- function isDefined(obj) {
- return !isUndefined(obj);
- }
-
- function specPluralizedFor(count) {
- var str = count + " spec";
- if (count > 1) {
- str += "s"
- }
- return str;
- }
-
-};
-
-jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.ReporterView);
-
-
-jasmine.HtmlReporter.SpecView = function(spec, dom, views) {
- this.spec = spec;
- this.dom = dom;
- this.views = views;
-
- this.symbol = this.createDom('li', { className: 'pending' });
- this.dom.symbolSummary.appendChild(this.symbol);
-
- this.summary = this.createDom('div', { className: 'specSummary' },
- this.createDom('a', {
- className: 'description',
- href: '?spec=' + encodeURIComponent(this.spec.getFullName()),
- title: this.spec.getFullName()
- }, this.spec.description)
- );
-
- this.detail = this.createDom('div', { className: 'specDetail' },
- this.createDom('a', {
- className: 'description',
- href: '?spec=' + encodeURIComponent(this.spec.getFullName()),
- title: this.spec.getFullName()
- }, this.spec.getFullName())
- );
-};
-
-jasmine.HtmlReporter.SpecView.prototype.status = function() {
- return this.getSpecStatus(this.spec);
-};
-
-jasmine.HtmlReporter.SpecView.prototype.refresh = function() {
- this.symbol.className = this.status();
-
- switch (this.status()) {
- case 'skipped':
- break;
-
- case 'passed':
- this.appendSummaryToSuiteDiv();
- break;
-
- case 'failed':
- this.appendSummaryToSuiteDiv();
- this.appendFailureDetail();
- break;
- }
-};
-
-jasmine.HtmlReporter.SpecView.prototype.appendSummaryToSuiteDiv = function() {
- this.summary.className += ' ' + this.status();
- this.appendToSummary(this.spec, this.summary);
-};
-
-jasmine.HtmlReporter.SpecView.prototype.appendFailureDetail = function() {
- this.detail.className += ' ' + this.status();
-
- var resultItems = this.spec.results().getItems();
- var messagesDiv = this.createDom('div', { className: 'messages' });
-
- for (var i = 0; i < resultItems.length; i++) {
- var result = resultItems[i];
-
- if (result.type == 'log') {
- messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
- } else if (result.type == 'expect' && result.passed && !result.passed()) {
- messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
-
- if (result.trace.stack) {
- messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
- }
- }
- }
-
- if (messagesDiv.childNodes.length > 0) {
- this.detail.appendChild(messagesDiv);
- this.dom.details.appendChild(this.detail);
- }
-};
-
-jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SpecView);jasmine.HtmlReporter.SuiteView = function(suite, dom, views) {
- this.suite = suite;
- this.dom = dom;
- this.views = views;
-
- this.element = this.createDom('div', { className: 'suite' },
- this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(this.suite.getFullName()) }, this.suite.description)
- );
-
- this.appendToSummary(this.suite, this.element);
-};
-
-jasmine.HtmlReporter.SuiteView.prototype.status = function() {
- return this.getSpecStatus(this.suite);
-};
-
-jasmine.HtmlReporter.SuiteView.prototype.refresh = function() {
- this.element.className += " " + this.status();
-};
-
-jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SuiteView);
-
-/* @deprecated Use jasmine.HtmlReporter instead
- */
-jasmine.TrivialReporter = function(doc) {
- this.document = doc || document;
- this.suiteDivs = {};
- this.logRunningSpecs = false;
-};
-
-jasmine.TrivialReporter.prototype.createDom = function(type, attrs, childrenVarArgs) {
- var el = document.createElement(type);
-
- for (var i = 2; i < arguments.length; i++) {
- var child = arguments[i];
-
- if (typeof child === 'string') {
- el.appendChild(document.createTextNode(child));
- } else {
- if (child) { el.appendChild(child); }
- }
- }
-
- for (var attr in attrs) {
- if (attr == "className") {
- el[attr] = attrs[attr];
- } else {
- el.setAttribute(attr, attrs[attr]);
- }
- }
-
- return el;
-};
-
-jasmine.TrivialReporter.prototype.reportRunnerStarting = function(runner) {
- var showPassed, showSkipped;
-
- this.outerDiv = this.createDom('div', { id: 'TrivialReporter', className: 'jasmine_reporter' },
- this.createDom('div', { className: 'banner' },
- this.createDom('div', { className: 'logo' },
- this.createDom('span', { className: 'title' }, "Jasmine"),
- this.createDom('span', { className: 'version' }, runner.env.versionString())),
- this.createDom('div', { className: 'options' },
- "Show ",
- showPassed = this.createDom('input', { id: "__jasmine_TrivialReporter_showPassed__", type: 'checkbox' }),
- this.createDom('label', { "for": "__jasmine_TrivialReporter_showPassed__" }, " passed "),
- showSkipped = this.createDom('input', { id: "__jasmine_TrivialReporter_showSkipped__", type: 'checkbox' }),
- this.createDom('label', { "for": "__jasmine_TrivialReporter_showSkipped__" }, " skipped")
- )
- ),
-
- this.runnerDiv = this.createDom('div', { className: 'runner running' },
- this.createDom('a', { className: 'run_spec', href: '?' }, "run all"),
- this.runnerMessageSpan = this.createDom('span', {}, "Running..."),
- this.finishedAtSpan = this.createDom('span', { className: 'finished-at' }, ""))
- );
-
- this.document.body.appendChild(this.outerDiv);
-
- var suites = runner.suites();
- for (var i = 0; i < suites.length; i++) {
- var suite = suites[i];
- var suiteDiv = this.createDom('div', { className: 'suite' },
- this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"),
- this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description));
- this.suiteDivs[suite.id] = suiteDiv;
- var parentDiv = this.outerDiv;
- if (suite.parentSuite) {
- parentDiv = this.suiteDivs[suite.parentSuite.id];
- }
- parentDiv.appendChild(suiteDiv);
- }
-
- this.startedAt = new Date();
-
- var self = this;
- showPassed.onclick = function(evt) {
- if (showPassed.checked) {
- self.outerDiv.className += ' show-passed';
- } else {
- self.outerDiv.className = self.outerDiv.className.replace(/ show-passed/, '');
- }
- };
-
- showSkipped.onclick = function(evt) {
- if (showSkipped.checked) {
- self.outerDiv.className += ' show-skipped';
- } else {
- self.outerDiv.className = self.outerDiv.className.replace(/ show-skipped/, '');
- }
- };
-};
-
-jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) {
- var results = runner.results();
- var className = (results.failedCount > 0) ? "runner failed" : "runner passed";
- this.runnerDiv.setAttribute("class", className);
- //do it twice for IE
- this.runnerDiv.setAttribute("className", className);
- var specs = runner.specs();
- var specCount = 0;
- for (var i = 0; i < specs.length; i++) {
- if (this.specFilter(specs[i])) {
- specCount++;
- }
- }
- var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s");
- message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s";
- this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild);
-
- this.finishedAtSpan.appendChild(document.createTextNode("Finished at " + new Date().toString()));
-};
-
-jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) {
- var results = suite.results();
- var status = results.passed() ? 'passed' : 'failed';
- if (results.totalCount === 0) { // todo: change this to check results.skipped
- status = 'skipped';
- }
- this.suiteDivs[suite.id].className += " " + status;
-};
-
-jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) {
- if (this.logRunningSpecs) {
- this.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
- }
-};
-
-jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {
- var results = spec.results();
- var status = results.passed() ? 'passed' : 'failed';
- if (results.skipped) {
- status = 'skipped';
- }
- var specDiv = this.createDom('div', { className: 'spec ' + status },
- this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"),
- this.createDom('a', {
- className: 'description',
- href: '?spec=' + encodeURIComponent(spec.getFullName()),
- title: spec.getFullName()
- }, spec.description));
-
-
- var resultItems = results.getItems();
- var messagesDiv = this.createDom('div', { className: 'messages' });
- for (var i = 0; i < resultItems.length; i++) {
- var result = resultItems[i];
-
- if (result.type == 'log') {
- messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
- } else if (result.type == 'expect' && result.passed && !result.passed()) {
- messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
-
- if (result.trace.stack) {
- messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
- }
- }
- }
-
- if (messagesDiv.childNodes.length > 0) {
- specDiv.appendChild(messagesDiv);
- }
-
- this.suiteDivs[spec.suite.id].appendChild(specDiv);
-};
-
-jasmine.TrivialReporter.prototype.log = function() {
- var console = jasmine.getGlobal().console;
- if (console && console.log) {
- if (console.log.apply) {
- console.log.apply(console, arguments);
- } else {
- console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
- }
- }
-};
-
-jasmine.TrivialReporter.prototype.getLocation = function() {
- return this.document.location;
-};
-
-jasmine.TrivialReporter.prototype.specFilter = function(spec) {
- var paramMap = {};
- var params = this.getLocation().search.substring(1).split('&');
- for (var i = 0; i < params.length; i++) {
- var p = params[i].split('=');
- paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
- }
-
- if (!paramMap.spec) {
- return true;
- }
- return spec.getFullName().indexOf(paramMap.spec) === 0;
-};
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/lib/jasmine.css b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/lib/jasmine.css
deleted file mode 100644
index 826e5753..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/lib/jasmine.css
+++ /dev/null
@@ -1,81 +0,0 @@
-body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; }
-
-#HTMLReporter { font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; }
-#HTMLReporter a { text-decoration: none; }
-#HTMLReporter a:hover { text-decoration: underline; }
-#HTMLReporter p, #HTMLReporter h1, #HTMLReporter h2, #HTMLReporter h3, #HTMLReporter h4, #HTMLReporter h5, #HTMLReporter h6 { margin: 0; line-height: 14px; }
-#HTMLReporter .banner, #HTMLReporter .symbolSummary, #HTMLReporter .summary, #HTMLReporter .resultMessage, #HTMLReporter .specDetail .description, #HTMLReporter .alert .bar, #HTMLReporter .stackTrace { padding-left: 9px; padding-right: 9px; }
-#HTMLReporter #jasmine_content { position: fixed; right: 100%; }
-#HTMLReporter .version { color: #aaaaaa; }
-#HTMLReporter .banner { margin-top: 14px; }
-#HTMLReporter .duration { color: #aaaaaa; float: right; }
-#HTMLReporter .symbolSummary { overflow: hidden; *zoom: 1; margin: 14px 0; }
-#HTMLReporter .symbolSummary li { display: block; float: left; height: 7px; width: 14px; margin-bottom: 7px; font-size: 16px; }
-#HTMLReporter .symbolSummary li.passed { font-size: 14px; }
-#HTMLReporter .symbolSummary li.passed:before { color: #5e7d00; content: "\02022"; }
-#HTMLReporter .symbolSummary li.failed { line-height: 9px; }
-#HTMLReporter .symbolSummary li.failed:before { color: #b03911; content: "x"; font-weight: bold; margin-left: -1px; }
-#HTMLReporter .symbolSummary li.skipped { font-size: 14px; }
-#HTMLReporter .symbolSummary li.skipped:before { color: #bababa; content: "\02022"; }
-#HTMLReporter .symbolSummary li.pending { line-height: 11px; }
-#HTMLReporter .symbolSummary li.pending:before { color: #aaaaaa; content: "-"; }
-#HTMLReporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }
-#HTMLReporter .runningAlert { background-color: #666666; }
-#HTMLReporter .skippedAlert { background-color: #aaaaaa; }
-#HTMLReporter .skippedAlert:first-child { background-color: #333333; }
-#HTMLReporter .skippedAlert:hover { text-decoration: none; color: white; text-decoration: underline; }
-#HTMLReporter .passingAlert { background-color: #a6b779; }
-#HTMLReporter .passingAlert:first-child { background-color: #5e7d00; }
-#HTMLReporter .failingAlert { background-color: #cf867e; }
-#HTMLReporter .failingAlert:first-child { background-color: #b03911; }
-#HTMLReporter .results { margin-top: 14px; }
-#HTMLReporter #details { display: none; }
-#HTMLReporter .resultsMenu, #HTMLReporter .resultsMenu a { background-color: #fff; color: #333333; }
-#HTMLReporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; }
-#HTMLReporter.showDetails .summaryMenuItem:hover { text-decoration: underline; }
-#HTMLReporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; }
-#HTMLReporter.showDetails .summary { display: none; }
-#HTMLReporter.showDetails #details { display: block; }
-#HTMLReporter .summaryMenuItem { font-weight: bold; text-decoration: underline; }
-#HTMLReporter .summary { margin-top: 14px; }
-#HTMLReporter .summary .suite .suite, #HTMLReporter .summary .specSummary { margin-left: 14px; }
-#HTMLReporter .summary .specSummary.passed a { color: #5e7d00; }
-#HTMLReporter .summary .specSummary.failed a { color: #b03911; }
-#HTMLReporter .description + .suite { margin-top: 0; }
-#HTMLReporter .suite { margin-top: 14px; }
-#HTMLReporter .suite a { color: #333333; }
-#HTMLReporter #details .specDetail { margin-bottom: 28px; }
-#HTMLReporter #details .specDetail .description { display: block; color: white; background-color: #b03911; }
-#HTMLReporter .resultMessage { padding-top: 14px; color: #333333; }
-#HTMLReporter .resultMessage span.result { display: block; }
-#HTMLReporter .stackTrace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; }
-
-#TrivialReporter { padding: 8px 13px; position: absolute; top: 0; bottom: 0; left: 0; right: 0; overflow-y: scroll; background-color: white; font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif; /*.resultMessage {*/ /*white-space: pre;*/ /*}*/ }
-#TrivialReporter a:visited, #TrivialReporter a { color: #303; }
-#TrivialReporter a:hover, #TrivialReporter a:active { color: blue; }
-#TrivialReporter .run_spec { float: right; padding-right: 5px; font-size: .8em; text-decoration: none; }
-#TrivialReporter .banner { color: #303; background-color: #fef; padding: 5px; }
-#TrivialReporter .logo { float: left; font-size: 1.1em; padding-left: 5px; }
-#TrivialReporter .logo .version { font-size: .6em; padding-left: 1em; }
-#TrivialReporter .runner.running { background-color: yellow; }
-#TrivialReporter .options { text-align: right; font-size: .8em; }
-#TrivialReporter .suite { border: 1px outset gray; margin: 5px 0; padding-left: 1em; }
-#TrivialReporter .suite .suite { margin: 5px; }
-#TrivialReporter .suite.passed { background-color: #dfd; }
-#TrivialReporter .suite.failed { background-color: #fdd; }
-#TrivialReporter .spec { margin: 5px; padding-left: 1em; clear: both; }
-#TrivialReporter .spec.failed, #TrivialReporter .spec.passed, #TrivialReporter .spec.skipped { padding-bottom: 5px; border: 1px solid gray; }
-#TrivialReporter .spec.failed { background-color: #fbb; border-color: red; }
-#TrivialReporter .spec.passed { background-color: #bfb; border-color: green; }
-#TrivialReporter .spec.skipped { background-color: #bbb; }
-#TrivialReporter .messages { border-left: 1px dashed gray; padding-left: 1em; padding-right: 1em; }
-#TrivialReporter .passed { background-color: #cfc; display: none; }
-#TrivialReporter .failed { background-color: #fbb; }
-#TrivialReporter .skipped { color: #777; background-color: #eee; display: none; }
-#TrivialReporter .resultMessage span.result { display: block; line-height: 2em; color: black; }
-#TrivialReporter .resultMessage .mismatch { color: black; }
-#TrivialReporter .stackTrace { white-space: pre; font-size: .8em; margin-left: 10px; max-height: 5em; overflow: auto; border: 1px inset red; padding: 1em; background: #eef; }
-#TrivialReporter .finished-at { padding-left: 1em; font-size: .6em; }
-#TrivialReporter.show-passed .passed, #TrivialReporter.show-skipped .skipped { display: block; }
-#TrivialReporter #jasmine_content { position: fixed; right: 100%; }
-#TrivialReporter .runner { border: 1px solid gray; display: block; margin: 5px 0; padding: 2px 0 2px 10px; }
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/lib/jasmine.js b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/lib/jasmine.js
deleted file mode 100644
index 79d1d4f4..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/lib/jasmine.js
+++ /dev/null
@@ -1,2529 +0,0 @@
-var isCommonJS = typeof window == "undefined";
-
-/**
- * Top level namespace for Jasmine, a lightweight JavaScript BDD/spec/testing framework.
- *
- * @namespace
- */
-var jasmine = {};
-if (isCommonJS) exports.jasmine = jasmine;
-/**
- * @private
- */
-jasmine.unimplementedMethod_ = function() {
- throw new Error("unimplemented method");
-};
-
-/**
- * Use <code>jasmine.undefined</code> instead of <code>undefined</code>, since <code>undefined</code> is just
- * a plain old variable and may be redefined by somebody else.
- *
- * @private
- */
-jasmine.undefined = jasmine.___undefined___;
-
-/**
- * Show diagnostic messages in the console if set to true
- *
- */
-jasmine.VERBOSE = false;
-
-/**
- * Default interval in milliseconds for event loop yields (e.g. to allow network activity or to refresh the screen with the HTML-based runner). Small values here may result in slow test running. Zero means no updates until all tests have completed.
- *
- */
-jasmine.DEFAULT_UPDATE_INTERVAL = 250;
-
-/**
- * Default timeout interval in milliseconds for waitsFor() blocks.
- */
-jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000;
-
-jasmine.getGlobal = function() {
- function getGlobal() {
- return this;
- }
-
- return getGlobal();
-};
-
-/**
- * Allows for bound functions to be compared. Internal use only.
- *
- * @ignore
- * @private
- * @param base {Object} bound 'this' for the function
- * @param name {Function} function to find
- */
-jasmine.bindOriginal_ = function(base, name) {
- var original = base[name];
- if (original.apply) {
- return function() {
- return original.apply(base, arguments);
- };
- } else {
- // IE support
- return jasmine.getGlobal()[name];
- }
-};
-
-jasmine.setTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'setTimeout');
-jasmine.clearTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearTimeout');
-jasmine.setInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'setInterval');
-jasmine.clearInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearInterval');
-
-jasmine.MessageResult = function(values) {
- this.type = 'log';
- this.values = values;
- this.trace = new Error(); // todo: test better
-};
-
-jasmine.MessageResult.prototype.toString = function() {
- var text = "";
- for (var i = 0; i < this.values.length; i++) {
- if (i > 0) text += " ";
- if (jasmine.isString_(this.values[i])) {
- text += this.values[i];
- } else {
- text += jasmine.pp(this.values[i]);
- }
- }
- return text;
-};
-
-jasmine.ExpectationResult = function(params) {
- this.type = 'expect';
- this.matcherName = params.matcherName;
- this.passed_ = params.passed;
- this.expected = params.expected;
- this.actual = params.actual;
- this.message = this.passed_ ? 'Passed.' : params.message;
-
- var trace = (params.trace || new Error(this.message));
- this.trace = this.passed_ ? '' : trace;
-};
-
-jasmine.ExpectationResult.prototype.toString = function () {
- return this.message;
-};
-
-jasmine.ExpectationResult.prototype.passed = function () {
- return this.passed_;
-};
-
-/**
- * Getter for the Jasmine environment. Ensures one gets created
- */
-jasmine.getEnv = function() {
- var env = jasmine.currentEnv_ = jasmine.currentEnv_ || new jasmine.Env();
- return env;
-};
-
-/**
- * @ignore
- * @private
- * @param value
- * @returns {Boolean}
- */
-jasmine.isArray_ = function(value) {
- return jasmine.isA_("Array", value);
-};
-
-/**
- * @ignore
- * @private
- * @param value
- * @returns {Boolean}
- */
-jasmine.isString_ = function(value) {
- return jasmine.isA_("String", value);
-};
-
-/**
- * @ignore
- * @private
- * @param value
- * @returns {Boolean}
- */
-jasmine.isNumber_ = function(value) {
- return jasmine.isA_("Number", value);
-};
-
-/**
- * @ignore
- * @private
- * @param {String} typeName
- * @param value
- * @returns {Boolean}
- */
-jasmine.isA_ = function(typeName, value) {
- return Object.prototype.toString.apply(value) === '[object ' + typeName + ']';
-};
-
-/**
- * Pretty printer for expecations. Takes any object and turns it into a human-readable string.
- *
- * @param value {Object} an object to be outputted
- * @returns {String}
- */
-jasmine.pp = function(value) {
- var stringPrettyPrinter = new jasmine.StringPrettyPrinter();
- stringPrettyPrinter.format(value);
- return stringPrettyPrinter.string;
-};
-
-/**
- * Returns true if the object is a DOM Node.
- *
- * @param {Object} obj object to check
- * @returns {Boolean}
- */
-jasmine.isDomNode = function(obj) {
- return obj.nodeType > 0;
-};
-
-/**
- * Returns a matchable 'generic' object of the class type. For use in expecations of type when values don't matter.
- *
- * @example
- * // don't care about which function is passed in, as long as it's a function
- * expect(mySpy).toHaveBeenCalledWith(jasmine.any(Function));
- *
- * @param {Class} clazz
- * @returns matchable object of the type clazz
- */
-jasmine.any = function(clazz) {
- return new jasmine.Matchers.Any(clazz);
-};
-
-/**
- * Returns a matchable subset of a JSON object. For use in expectations when you don't care about all of the
- * attributes on the object.
- *
- * @example
- * // don't care about any other attributes than foo.
- * expect(mySpy).toHaveBeenCalledWith(jasmine.objectContaining({foo: "bar"});
- *
- * @param sample {Object} sample
- * @returns matchable object for the sample
- */
-jasmine.objectContaining = function (sample) {
- return new jasmine.Matchers.ObjectContaining(sample);
-};
-
-/**
- * Jasmine Spies are test doubles that can act as stubs, spies, fakes or when used in an expecation, mocks.
- *
- * Spies should be created in test setup, before expectations. They can then be checked, using the standard Jasmine
- * expectation syntax. Spies can be checked if they were called or not and what the calling params were.
- *
- * A Spy has the following fields: wasCalled, callCount, mostRecentCall, and argsForCall (see docs).
- *
- * Spies are torn down at the end of every spec.
- *
- * Note: Do <b>not</b> call new jasmine.Spy() directly - a spy must be created using spyOn, jasmine.createSpy or jasmine.createSpyObj.
- *
- * @example
- * // a stub
- * var myStub = jasmine.createSpy('myStub'); // can be used anywhere
- *
- * // spy example
- * var foo = {
- * not: function(bool) { return !bool; }
- * }
- *
- * // actual foo.not will not be called, execution stops
- * spyOn(foo, 'not');
-
- // foo.not spied upon, execution will continue to implementation
- * spyOn(foo, 'not').andCallThrough();
- *
- * // fake example
- * var foo = {
- * not: function(bool) { return !bool; }
- * }
- *
- * // foo.not(val) will return val
- * spyOn(foo, 'not').andCallFake(function(value) {return value;});
- *
- * // mock example
- * foo.not(7 == 7);
- * expect(foo.not).toHaveBeenCalled();
- * expect(foo.not).toHaveBeenCalledWith(true);
- *
- * @constructor
- * @see spyOn, jasmine.createSpy, jasmine.createSpyObj
- * @param {String} name
- */
-jasmine.Spy = function(name) {
- /**
- * The name of the spy, if provided.
- */
- this.identity = name || 'unknown';
- /**
- * Is this Object a spy?
- */
- this.isSpy = true;
- /**
- * The actual function this spy stubs.
- */
- this.plan = function() {
- };
- /**
- * Tracking of the most recent call to the spy.
- * @example
- * var mySpy = jasmine.createSpy('foo');
- * mySpy(1, 2);
- * mySpy.mostRecentCall.args = [1, 2];
- */
- this.mostRecentCall = {};
-
- /**
- * Holds arguments for each call to the spy, indexed by call count
- * @example
- * var mySpy = jasmine.createSpy('foo');
- * mySpy(1, 2);
- * mySpy(7, 8);
- * mySpy.mostRecentCall.args = [7, 8];
- * mySpy.argsForCall[0] = [1, 2];
- * mySpy.argsForCall[1] = [7, 8];
- */
- this.argsForCall = [];
- this.calls = [];
-};
-
-/**
- * Tells a spy to call through to the actual implemenatation.
- *
- * @example
- * var foo = {
- * bar: function() { // do some stuff }
- * }
- *
- * // defining a spy on an existing property: foo.bar
- * spyOn(foo, 'bar').andCallThrough();
- */
-jasmine.Spy.prototype.andCallThrough = function() {
- this.plan = this.originalValue;
- return this;
-};
-
-/**
- * For setting the return value of a spy.
- *
- * @example
- * // defining a spy from scratch: foo() returns 'baz'
- * var foo = jasmine.createSpy('spy on foo').andReturn('baz');
- *
- * // defining a spy on an existing property: foo.bar() returns 'baz'
- * spyOn(foo, 'bar').andReturn('baz');
- *
- * @param {Object} value
- */
-jasmine.Spy.prototype.andReturn = function(value) {
- this.plan = function() {
- return value;
- };
- return this;
-};
-
-/**
- * For throwing an exception when a spy is called.
- *
- * @example
- * // defining a spy from scratch: foo() throws an exception w/ message 'ouch'
- * var foo = jasmine.createSpy('spy on foo').andThrow('baz');
- *
- * // defining a spy on an existing property: foo.bar() throws an exception w/ message 'ouch'
- * spyOn(foo, 'bar').andThrow('baz');
- *
- * @param {String} exceptionMsg
- */
-jasmine.Spy.prototype.andThrow = function(exceptionMsg) {
- this.plan = function() {
- throw exceptionMsg;
- };
- return this;
-};
-
-/**
- * Calls an alternate implementation when a spy is called.
- *
- * @example
- * var baz = function() {
- * // do some stuff, return something
- * }
- * // defining a spy from scratch: foo() calls the function baz
- * var foo = jasmine.createSpy('spy on foo').andCall(baz);
- *
- * // defining a spy on an existing property: foo.bar() calls an anonymnous function
- * spyOn(foo, 'bar').andCall(function() { return 'baz';} );
- *
- * @param {Function} fakeFunc
- */
-jasmine.Spy.prototype.andCallFake = function(fakeFunc) {
- this.plan = fakeFunc;
- return this;
-};
-
-/**
- * Resets all of a spy's the tracking variables so that it can be used again.
- *
- * @example
- * spyOn(foo, 'bar');
- *
- * foo.bar();
- *
- * expect(foo.bar.callCount).toEqual(1);
- *
- * foo.bar.reset();
- *
- * expect(foo.bar.callCount).toEqual(0);
- */
-jasmine.Spy.prototype.reset = function() {
- this.wasCalled = false;
- this.callCount = 0;
- this.argsForCall = [];
- this.calls = [];
- this.mostRecentCall = {};
-};
-
-jasmine.createSpy = function(name) {
-
- var spyObj = function() {
- spyObj.wasCalled = true;
- spyObj.callCount++;
- var args = jasmine.util.argsToArray(arguments);
- spyObj.mostRecentCall.object = this;
- spyObj.mostRecentCall.args = args;
- spyObj.argsForCall.push(args);
- spyObj.calls.push({object: this, args: args});
- return spyObj.plan.apply(this, arguments);
- };
-
- var spy = new jasmine.Spy(name);
-
- for (var prop in spy) {
- spyObj[prop] = spy[prop];
- }
-
- spyObj.reset();
-
- return spyObj;
-};
-
-/**
- * Determines whether an object is a spy.
- *
- * @param {jasmine.Spy|Object} putativeSpy
- * @returns {Boolean}
- */
-jasmine.isSpy = function(putativeSpy) {
- return putativeSpy && putativeSpy.isSpy;
-};
-
-/**
- * Creates a more complicated spy: an Object that has every property a function that is a spy. Used for stubbing something
- * large in one call.
- *
- * @param {String} baseName name of spy class
- * @param {Array} methodNames array of names of methods to make spies
- */
-jasmine.createSpyObj = function(baseName, methodNames) {
- if (!jasmine.isArray_(methodNames) || methodNames.length === 0) {
- throw new Error('createSpyObj requires a non-empty array of method names to create spies for');
- }
- var obj = {};
- for (var i = 0; i < methodNames.length; i++) {
- obj[methodNames[i]] = jasmine.createSpy(baseName + '.' + methodNames[i]);
- }
- return obj;
-};
-
-/**
- * All parameters are pretty-printed and concatenated together, then written to the current spec's output.
- *
- * Be careful not to leave calls to <code>jasmine.log</code> in production code.
- */
-jasmine.log = function() {
- var spec = jasmine.getEnv().currentSpec;
- spec.log.apply(spec, arguments);
-};
-
-/**
- * Function that installs a spy on an existing object's method name. Used within a Spec to create a spy.
- *
- * @example
- * // spy example
- * var foo = {
- * not: function(bool) { return !bool; }
- * }
- * spyOn(foo, 'not'); // actual foo.not will not be called, execution stops
- *
- * @see jasmine.createSpy
- * @param obj
- * @param methodName
- * @returns a Jasmine spy that can be chained with all spy methods
- */
-var spyOn = function(obj, methodName) {
- return jasmine.getEnv().currentSpec.spyOn(obj, methodName);
-};
-if (isCommonJS) exports.spyOn = spyOn;
-
-/**
- * Creates a Jasmine spec that will be added to the current suite.
- *
- * // TODO: pending tests
- *
- * @example
- * it('should be true', function() {
- * expect(true).toEqual(true);
- * });
- *
- * @param {String} desc description of this specification
- * @param {Function} func defines the preconditions and expectations of the spec
- */
-var it = function(desc, func) {
- return jasmine.getEnv().it(desc, func);
-};
-if (isCommonJS) exports.it = it;
-
-/**
- * Creates a <em>disabled</em> Jasmine spec.
- *
- * A convenience method that allows existing specs to be disabled temporarily during development.
- *
- * @param {String} desc description of this specification
- * @param {Function} func defines the preconditions and expectations of the spec
- */
-var xit = function(desc, func) {
- return jasmine.getEnv().xit(desc, func);
-};
-if (isCommonJS) exports.xit = xit;
-
-/**
- * Starts a chain for a Jasmine expectation.
- *
- * It is passed an Object that is the actual value and should chain to one of the many
- * jasmine.Matchers functions.
- *
- * @param {Object} actual Actual value to test against and expected value
- */
-var expect = function(actual) {
- return jasmine.getEnv().currentSpec.expect(actual);
-};
-if (isCommonJS) exports.expect = expect;
-
-/**
- * Defines part of a jasmine spec. Used in cominbination with waits or waitsFor in asynchrnous specs.
- *
- * @param {Function} func Function that defines part of a jasmine spec.
- */
-var runs = function(func) {
- jasmine.getEnv().currentSpec.runs(func);
-};
-if (isCommonJS) exports.runs = runs;
-
-/**
- * Waits a fixed time period before moving to the next block.
- *
- * @deprecated Use waitsFor() instead
- * @param {Number} timeout milliseconds to wait
- */
-var waits = function(timeout) {
- jasmine.getEnv().currentSpec.waits(timeout);
-};
-if (isCommonJS) exports.waits = waits;
-
-/**
- * Waits for the latchFunction to return true before proceeding to the next block.
- *
- * @param {Function} latchFunction
- * @param {String} optional_timeoutMessage
- * @param {Number} optional_timeout
- */
-var waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) {
- jasmine.getEnv().currentSpec.waitsFor.apply(jasmine.getEnv().currentSpec, arguments);
-};
-if (isCommonJS) exports.waitsFor = waitsFor;
-
-/**
- * A function that is called before each spec in a suite.
- *
- * Used for spec setup, including validating assumptions.
- *
- * @param {Function} beforeEachFunction
- */
-var beforeEach = function(beforeEachFunction) {
- jasmine.getEnv().beforeEach(beforeEachFunction);
-};
-if (isCommonJS) exports.beforeEach = beforeEach;
-
-/**
- * A function that is called after each spec in a suite.
- *
- * Used for restoring any state that is hijacked during spec execution.
- *
- * @param {Function} afterEachFunction
- */
-var afterEach = function(afterEachFunction) {
- jasmine.getEnv().afterEach(afterEachFunction);
-};
-if (isCommonJS) exports.afterEach = afterEach;
-
-/**
- * Defines a suite of specifications.
- *
- * Stores the description and all defined specs in the Jasmine environment as one suite of specs. Variables declared
- * are accessible by calls to beforeEach, it, and afterEach. Describe blocks can be nested, allowing for specialization
- * of setup in some tests.
- *
- * @example
- * // TODO: a simple suite
- *
- * // TODO: a simple suite with a nested describe block
- *
- * @param {String} description A string, usually the class under test.
- * @param {Function} specDefinitions function that defines several specs.
- */
-var describe = function(description, specDefinitions) {
- return jasmine.getEnv().describe(description, specDefinitions);
-};
-if (isCommonJS) exports.describe = describe;
-
-/**
- * Disables a suite of specifications. Used to disable some suites in a file, or files, temporarily during development.
- *
- * @param {String} description A string, usually the class under test.
- * @param {Function} specDefinitions function that defines several specs.
- */
-var xdescribe = function(description, specDefinitions) {
- return jasmine.getEnv().xdescribe(description, specDefinitions);
-};
-if (isCommonJS) exports.xdescribe = xdescribe;
-
-
-// Provide the XMLHttpRequest class for IE 5.x-6.x:
-jasmine.XmlHttpRequest = (typeof XMLHttpRequest == "undefined") ? function() {
- function tryIt(f) {
- try {
- return f();
- } catch(e) {
- }
- return null;
- }
-
- var xhr = tryIt(function() {
- return new ActiveXObject("Msxml2.XMLHTTP.6.0");
- }) ||
- tryIt(function() {
- return new ActiveXObject("Msxml2.XMLHTTP.3.0");
- }) ||
- tryIt(function() {
- return new ActiveXObject("Msxml2.XMLHTTP");
- }) ||
- tryIt(function() {
- return new ActiveXObject("Microsoft.XMLHTTP");
- });
-
- if (!xhr) throw new Error("This browser does not support XMLHttpRequest.");
-
- return xhr;
-} : XMLHttpRequest;
-/**
- * @namespace
- */
-jasmine.util = {};
-
-/**
- * Declare that a child class inherit it's prototype from the parent class.
- *
- * @private
- * @param {Function} childClass
- * @param {Function} parentClass
- */
-jasmine.util.inherit = function(childClass, parentClass) {
- /**
- * @private
- */
- var subclass = function() {
- };
- subclass.prototype = parentClass.prototype;
- childClass.prototype = new subclass();
-};
-
-jasmine.util.formatException = function(e) {
- var lineNumber;
- if (e.line) {
- lineNumber = e.line;
- }
- else if (e.lineNumber) {
- lineNumber = e.lineNumber;
- }
-
- var file;
-
- if (e.sourceURL) {
- file = e.sourceURL;
- }
- else if (e.fileName) {
- file = e.fileName;
- }
-
- var message = (e.name && e.message) ? (e.name + ': ' + e.message) : e.toString();
-
- if (file && lineNumber) {
- message += ' in ' + file + ' (line ' + lineNumber + ')';
- }
-
- return message;
-};
-
-jasmine.util.htmlEscape = function(str) {
- if (!str) return str;
- return str.replace(/&/g, '&amp;')
- .replace(/</g, '&lt;')
- .replace(/>/g, '&gt;');
-};
-
-jasmine.util.argsToArray = function(args) {
- var arrayOfArgs = [];
- for (var i = 0; i < args.length; i++) arrayOfArgs.push(args[i]);
- return arrayOfArgs;
-};
-
-jasmine.util.extend = function(destination, source) {
- for (var property in source) destination[property] = source[property];
- return destination;
-};
-
-/**
- * Environment for Jasmine
- *
- * @constructor
- */
-jasmine.Env = function() {
- this.currentSpec = null;
- this.currentSuite = null;
- this.currentRunner_ = new jasmine.Runner(this);
-
- this.reporter = new jasmine.MultiReporter();
-
- this.updateInterval = jasmine.DEFAULT_UPDATE_INTERVAL;
- this.defaultTimeoutInterval = jasmine.DEFAULT_TIMEOUT_INTERVAL;
- this.lastUpdate = 0;
- this.specFilter = function() {
- return true;
- };
-
- this.nextSpecId_ = 0;
- this.nextSuiteId_ = 0;
- this.equalityTesters_ = [];
-
- // wrap matchers
- this.matchersClass = function() {
- jasmine.Matchers.apply(this, arguments);
- };
- jasmine.util.inherit(this.matchersClass, jasmine.Matchers);
-
- jasmine.Matchers.wrapInto_(jasmine.Matchers.prototype, this.matchersClass);
-};
-
-
-jasmine.Env.prototype.setTimeout = jasmine.setTimeout;
-jasmine.Env.prototype.clearTimeout = jasmine.clearTimeout;
-jasmine.Env.prototype.setInterval = jasmine.setInterval;
-jasmine.Env.prototype.clearInterval = jasmine.clearInterval;
-
-/**
- * @returns an object containing jasmine version build info, if set.
- */
-jasmine.Env.prototype.version = function () {
- if (jasmine.version_) {
- return jasmine.version_;
- } else {
- throw new Error('Version not set');
- }
-};
-
-/**
- * @returns string containing jasmine version build info, if set.
- */
-jasmine.Env.prototype.versionString = function() {
- if (!jasmine.version_) {
- return "version unknown";
- }
-
- var version = this.version();
- var versionString = version.major + "." + version.minor + "." + version.build;
- if (version.release_candidate) {
- versionString += ".rc" + version.release_candidate;
- }
- versionString += " revision " + version.revision;
- return versionString;
-};
-
-/**
- * @returns a sequential integer starting at 0
- */
-jasmine.Env.prototype.nextSpecId = function () {
- return this.nextSpecId_++;
-};
-
-/**
- * @returns a sequential integer starting at 0
- */
-jasmine.Env.prototype.nextSuiteId = function () {
- return this.nextSuiteId_++;
-};
-
-/**
- * Register a reporter to receive status updates from Jasmine.
- * @param {jasmine.Reporter} reporter An object which will receive status updates.
- */
-jasmine.Env.prototype.addReporter = function(reporter) {
- this.reporter.addReporter(reporter);
-};
-
-jasmine.Env.prototype.execute = function() {
- this.currentRunner_.execute();
-};
-
-jasmine.Env.prototype.describe = function(description, specDefinitions) {
- var suite = new jasmine.Suite(this, description, specDefinitions, this.currentSuite);
-
- var parentSuite = this.currentSuite;
- if (parentSuite) {
- parentSuite.add(suite);
- } else {
- this.currentRunner_.add(suite);
- }
-
- this.currentSuite = suite;
-
- var declarationError = null;
- try {
- specDefinitions.call(suite);
- } catch(e) {
- declarationError = e;
- }
-
- if (declarationError) {
- this.it("encountered a declaration exception", function() {
- throw declarationError;
- });
- }
-
- this.currentSuite = parentSuite;
-
- return suite;
-};
-
-jasmine.Env.prototype.beforeEach = function(beforeEachFunction) {
- if (this.currentSuite) {
- this.currentSuite.beforeEach(beforeEachFunction);
- } else {
- this.currentRunner_.beforeEach(beforeEachFunction);
- }
-};
-
-jasmine.Env.prototype.currentRunner = function () {
- return this.currentRunner_;
-};
-
-jasmine.Env.prototype.afterEach = function(afterEachFunction) {
- if (this.currentSuite) {
- this.currentSuite.afterEach(afterEachFunction);
- } else {
- this.currentRunner_.afterEach(afterEachFunction);
- }
-
-};
-
-jasmine.Env.prototype.xdescribe = function(desc, specDefinitions) {
- return {
- execute: function() {
- }
- };
-};
-
-jasmine.Env.prototype.it = function(description, func) {
- var spec = new jasmine.Spec(this, this.currentSuite, description);
- this.currentSuite.add(spec);
- this.currentSpec = spec;
-
- if (func) {
- spec.runs(func);
- }
-
- return spec;
-};
-
-jasmine.Env.prototype.xit = function(desc, func) {
- return {
- id: this.nextSpecId(),
- runs: function() {
- }
- };
-};
-
-jasmine.Env.prototype.compareObjects_ = function(a, b, mismatchKeys, mismatchValues) {
- if (a.__Jasmine_been_here_before__ === b && b.__Jasmine_been_here_before__ === a) {
- return true;
- }
-
- a.__Jasmine_been_here_before__ = b;
- b.__Jasmine_been_here_before__ = a;
-
- var hasKey = function(obj, keyName) {
- return obj !== null && obj[keyName] !== jasmine.undefined;
- };
-
- for (var property in b) {
- if (!hasKey(a, property) && hasKey(b, property)) {
- mismatchKeys.push("expected has key '" + property + "', but missing from actual.");
- }
- }
- for (property in a) {
- if (!hasKey(b, property) && hasKey(a, property)) {
- mismatchKeys.push("expected missing key '" + property + "', but present in actual.");
- }
- }
- for (property in b) {
- if (property == '__Jasmine_been_here_before__') continue;
- if (!this.equals_(a[property], b[property], mismatchKeys, mismatchValues)) {
- mismatchValues.push("'" + property + "' was '" + (b[property] ? jasmine.util.htmlEscape(b[property].toString()) : b[property]) + "' in expected, but was '" + (a[property] ? jasmine.util.htmlEscape(a[property].toString()) : a[property]) + "' in actual.");
- }
- }
-
- if (jasmine.isArray_(a) && jasmine.isArray_(b) && a.length != b.length) {
- mismatchValues.push("arrays were not the same length");
- }
-
- delete a.__Jasmine_been_here_before__;
- delete b.__Jasmine_been_here_before__;
- return (mismatchKeys.length === 0 && mismatchValues.length === 0);
-};
-
-jasmine.Env.prototype.equals_ = function(a, b, mismatchKeys, mismatchValues) {
- mismatchKeys = mismatchKeys || [];
- mismatchValues = mismatchValues || [];
-
- for (var i = 0; i < this.equalityTesters_.length; i++) {
- var equalityTester = this.equalityTesters_[i];
- var result = equalityTester(a, b, this, mismatchKeys, mismatchValues);
- if (result !== jasmine.undefined) return result;
- }
-
- if (a === b) return true;
-
- if (a === jasmine.undefined || a === null || b === jasmine.undefined || b === null) {
- return (a == jasmine.undefined && b == jasmine.undefined);
- }
-
- if (jasmine.isDomNode(a) && jasmine.isDomNode(b)) {
- return a === b;
- }
-
- if (a instanceof Date && b instanceof Date) {
- return a.getTime() == b.getTime();
- }
-
- if (a.jasmineMatches) {
- return a.jasmineMatches(b);
- }
-
- if (b.jasmineMatches) {
- return b.jasmineMatches(a);
- }
-
- if (a instanceof jasmine.Matchers.ObjectContaining) {
- return a.matches(b);
- }
-
- if (b instanceof jasmine.Matchers.ObjectContaining) {
- return b.matches(a);
- }
-
- if (jasmine.isString_(a) && jasmine.isString_(b)) {
- return (a == b);
- }
-
- if (jasmine.isNumber_(a) && jasmine.isNumber_(b)) {
- return (a == b);
- }
-
- if (typeof a === "object" && typeof b === "object") {
- return this.compareObjects_(a, b, mismatchKeys, mismatchValues);
- }
-
- //Straight check
- return (a === b);
-};
-
-jasmine.Env.prototype.contains_ = function(haystack, needle) {
- if (jasmine.isArray_(haystack)) {
- for (var i = 0; i < haystack.length; i++) {
- if (this.equals_(haystack[i], needle)) return true;
- }
- return false;
- }
- return haystack.indexOf(needle) >= 0;
-};
-
-jasmine.Env.prototype.addEqualityTester = function(equalityTester) {
- this.equalityTesters_.push(equalityTester);
-};
-/** No-op base class for Jasmine reporters.
- *
- * @constructor
- */
-jasmine.Reporter = function() {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.reportRunnerStarting = function(runner) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.reportRunnerResults = function(runner) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.reportSuiteResults = function(suite) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.reportSpecStarting = function(spec) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.reportSpecResults = function(spec) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.Reporter.prototype.log = function(str) {
-};
-
-/**
- * Blocks are functions with executable code that make up a spec.
- *
- * @constructor
- * @param {jasmine.Env} env
- * @param {Function} func
- * @param {jasmine.Spec} spec
- */
-jasmine.Block = function(env, func, spec) {
- this.env = env;
- this.func = func;
- this.spec = spec;
-};
-
-jasmine.Block.prototype.execute = function(onComplete) {
- try {
- this.func.apply(this.spec);
- } catch (e) {
- this.spec.fail(e);
- }
- onComplete();
-};
-/** JavaScript API reporter.
- *
- * @constructor
- */
-jasmine.JsApiReporter = function() {
- this.started = false;
- this.finished = false;
- this.suites_ = [];
- this.results_ = {};
-};
-
-jasmine.JsApiReporter.prototype.reportRunnerStarting = function(runner) {
- this.started = true;
- var suites = runner.topLevelSuites();
- for (var i = 0; i < suites.length; i++) {
- var suite = suites[i];
- this.suites_.push(this.summarize_(suite));
- }
-};
-
-jasmine.JsApiReporter.prototype.suites = function() {
- return this.suites_;
-};
-
-jasmine.JsApiReporter.prototype.summarize_ = function(suiteOrSpec) {
- var isSuite = suiteOrSpec instanceof jasmine.Suite;
- var summary = {
- id: suiteOrSpec.id,
- name: suiteOrSpec.description,
- type: isSuite ? 'suite' : 'spec',
- children: []
- };
-
- if (isSuite) {
- var children = suiteOrSpec.children();
- for (var i = 0; i < children.length; i++) {
- summary.children.push(this.summarize_(children[i]));
- }
- }
- return summary;
-};
-
-jasmine.JsApiReporter.prototype.results = function() {
- return this.results_;
-};
-
-jasmine.JsApiReporter.prototype.resultsForSpec = function(specId) {
- return this.results_[specId];
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.JsApiReporter.prototype.reportRunnerResults = function(runner) {
- this.finished = true;
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.JsApiReporter.prototype.reportSuiteResults = function(suite) {
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.JsApiReporter.prototype.reportSpecResults = function(spec) {
- this.results_[spec.id] = {
- messages: spec.results().getItems(),
- result: spec.results().failedCount > 0 ? "failed" : "passed"
- };
-};
-
-//noinspection JSUnusedLocalSymbols
-jasmine.JsApiReporter.prototype.log = function(str) {
-};
-
-jasmine.JsApiReporter.prototype.resultsForSpecs = function(specIds){
- var results = {};
- for (var i = 0; i < specIds.length; i++) {
- var specId = specIds[i];
- results[specId] = this.summarizeResult_(this.results_[specId]);
- }
- return results;
-};
-
-jasmine.JsApiReporter.prototype.summarizeResult_ = function(result){
- var summaryMessages = [];
- var messagesLength = result.messages.length;
- for (var messageIndex = 0; messageIndex < messagesLength; messageIndex++) {
- var resultMessage = result.messages[messageIndex];
- summaryMessages.push({
- text: resultMessage.type == 'log' ? resultMessage.toString() : jasmine.undefined,
- passed: resultMessage.passed ? resultMessage.passed() : true,
- type: resultMessage.type,
- message: resultMessage.message,
- trace: {
- stack: resultMessage.passed && !resultMessage.passed() ? resultMessage.trace.stack : jasmine.undefined
- }
- });
- }
-
- return {
- result : result.result,
- messages : summaryMessages
- };
-};
-
-/**
- * @constructor
- * @param {jasmine.Env} env
- * @param actual
- * @param {jasmine.Spec} spec
- */
-jasmine.Matchers = function(env, actual, spec, opt_isNot) {
- this.env = env;
- this.actual = actual;
- this.spec = spec;
- this.isNot = opt_isNot || false;
- this.reportWasCalled_ = false;
-};
-
-// todo: @deprecated as of Jasmine 0.11, remove soon [xw]
-jasmine.Matchers.pp = function(str) {
- throw new Error("jasmine.Matchers.pp() is no longer supported, please use jasmine.pp() instead!");
-};
-
-// todo: @deprecated Deprecated as of Jasmine 0.10. Rewrite your custom matchers to return true or false. [xw]
-jasmine.Matchers.prototype.report = function(result, failing_message, details) {
- throw new Error("As of jasmine 0.11, custom matchers must be implemented differently -- please see jasmine docs");
-};
-
-jasmine.Matchers.wrapInto_ = function(prototype, matchersClass) {
- for (var methodName in prototype) {
- if (methodName == 'report') continue;
- var orig = prototype[methodName];
- matchersClass.prototype[methodName] = jasmine.Matchers.matcherFn_(methodName, orig);
- }
-};
-
-jasmine.Matchers.matcherFn_ = function(matcherName, matcherFunction) {
- return function() {
- var matcherArgs = jasmine.util.argsToArray(arguments);
- var result = matcherFunction.apply(this, arguments);
-
- if (this.isNot) {
- result = !result;
- }
-
- if (this.reportWasCalled_) return result;
-
- var message;
- if (!result) {
- if (this.message) {
- message = this.message.apply(this, arguments);
- if (jasmine.isArray_(message)) {
- message = message[this.isNot ? 1 : 0];
- }
- } else {
- var englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); });
- message = "Expected " + jasmine.pp(this.actual) + (this.isNot ? " not " : " ") + englishyPredicate;
- if (matcherArgs.length > 0) {
- for (var i = 0; i < matcherArgs.length; i++) {
- if (i > 0) message += ",";
- message += " " + jasmine.pp(matcherArgs[i]);
- }
- }
- message += ".";
- }
- }
- var expectationResult = new jasmine.ExpectationResult({
- matcherName: matcherName,
- passed: result,
- expected: matcherArgs.length > 1 ? matcherArgs : matcherArgs[0],
- actual: this.actual,
- message: message
- });
- this.spec.addMatcherResult(expectationResult);
- return jasmine.undefined;
- };
-};
-
-
-
-
-/**
- * toBe: compares the actual to the expected using ===
- * @param expected
- */
-jasmine.Matchers.prototype.toBe = function(expected) {
- return this.actual === expected;
-};
-
-/**
- * toNotBe: compares the actual to the expected using !==
- * @param expected
- * @deprecated as of 1.0. Use not.toBe() instead.
- */
-jasmine.Matchers.prototype.toNotBe = function(expected) {
- return this.actual !== expected;
-};
-
-/**
- * toEqual: compares the actual to the expected using common sense equality. Handles Objects, Arrays, etc.
- *
- * @param expected
- */
-jasmine.Matchers.prototype.toEqual = function(expected) {
- return this.env.equals_(this.actual, expected);
-};
-
-/**
- * toNotEqual: compares the actual to the expected using the ! of jasmine.Matchers.toEqual
- * @param expected
- * @deprecated as of 1.0. Use not.toEqual() instead.
- */
-jasmine.Matchers.prototype.toNotEqual = function(expected) {
- return !this.env.equals_(this.actual, expected);
-};
-
-/**
- * Matcher that compares the actual to the expected using a regular expression. Constructs a RegExp, so takes
- * a pattern or a String.
- *
- * @param expected
- */
-jasmine.Matchers.prototype.toMatch = function(expected) {
- return new RegExp(expected).test(this.actual);
-};
-
-/**
- * Matcher that compares the actual to the expected using the boolean inverse of jasmine.Matchers.toMatch
- * @param expected
- * @deprecated as of 1.0. Use not.toMatch() instead.
- */
-jasmine.Matchers.prototype.toNotMatch = function(expected) {
- return !(new RegExp(expected).test(this.actual));
-};
-
-/**
- * Matcher that compares the actual to jasmine.undefined.
- */
-jasmine.Matchers.prototype.toBeDefined = function() {
- return (this.actual !== jasmine.undefined);
-};
-
-/**
- * Matcher that compares the actual to jasmine.undefined.
- */
-jasmine.Matchers.prototype.toBeUndefined = function() {
- return (this.actual === jasmine.undefined);
-};
-
-/**
- * Matcher that compares the actual to null.
- */
-jasmine.Matchers.prototype.toBeNull = function() {
- return (this.actual === null);
-};
-
-/**
- * Matcher that boolean not-nots the actual.
- */
-jasmine.Matchers.prototype.toBeTruthy = function() {
- return !!this.actual;
-};
-
-
-/**
- * Matcher that boolean nots the actual.
- */
-jasmine.Matchers.prototype.toBeFalsy = function() {
- return !this.actual;
-};
-
-
-/**
- * Matcher that checks to see if the actual, a Jasmine spy, was called.
- */
-jasmine.Matchers.prototype.toHaveBeenCalled = function() {
- if (arguments.length > 0) {
- throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith');
- }
-
- if (!jasmine.isSpy(this.actual)) {
- throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
- }
-
- this.message = function() {
- return [
- "Expected spy " + this.actual.identity + " to have been called.",
- "Expected spy " + this.actual.identity + " not to have been called."
- ];
- };
-
- return this.actual.wasCalled;
-};
-
-/** @deprecated Use expect(xxx).toHaveBeenCalled() instead */
-jasmine.Matchers.prototype.wasCalled = jasmine.Matchers.prototype.toHaveBeenCalled;
-
-/**
- * Matcher that checks to see if the actual, a Jasmine spy, was not called.
- *
- * @deprecated Use expect(xxx).not.toHaveBeenCalled() instead
- */
-jasmine.Matchers.prototype.wasNotCalled = function() {
- if (arguments.length > 0) {
- throw new Error('wasNotCalled does not take arguments');
- }
-
- if (!jasmine.isSpy(this.actual)) {
- throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
- }
-
- this.message = function() {
- return [
- "Expected spy " + this.actual.identity + " to not have been called.",
- "Expected spy " + this.actual.identity + " to have been called."
- ];
- };
-
- return !this.actual.wasCalled;
-};
-
-/**
- * Matcher that checks to see if the actual, a Jasmine spy, was called with a set of parameters.
- *
- * @example
- *
- */
-jasmine.Matchers.prototype.toHaveBeenCalledWith = function() {
- var expectedArgs = jasmine.util.argsToArray(arguments);
- if (!jasmine.isSpy(this.actual)) {
- throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
- }
- this.message = function() {
- if (this.actual.callCount === 0) {
- // todo: what should the failure message for .not.toHaveBeenCalledWith() be? is this right? test better. [xw]
- return [
- "Expected spy " + this.actual.identity + " to have been called with " + jasmine.pp(expectedArgs) + " but it was never called.",
- "Expected spy " + this.actual.identity + " not to have been called with " + jasmine.pp(expectedArgs) + " but it was."
- ];
- } else {
- return [
- "Expected spy " + this.actual.identity + " to have been called with " + jasmine.pp(expectedArgs) + " but was called with " + jasmine.pp(this.actual.argsForCall),
- "Expected spy " + this.actual.identity + " not to have been called with " + jasmine.pp(expectedArgs) + " but was called with " + jasmine.pp(this.actual.argsForCall)
- ];
- }
- };
-
- return this.env.contains_(this.actual.argsForCall, expectedArgs);
-};
-
-/** @deprecated Use expect(xxx).toHaveBeenCalledWith() instead */
-jasmine.Matchers.prototype.wasCalledWith = jasmine.Matchers.prototype.toHaveBeenCalledWith;
-
-/** @deprecated Use expect(xxx).not.toHaveBeenCalledWith() instead */
-jasmine.Matchers.prototype.wasNotCalledWith = function() {
- var expectedArgs = jasmine.util.argsToArray(arguments);
- if (!jasmine.isSpy(this.actual)) {
- throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
- }
-
- this.message = function() {
- return [
- "Expected spy not to have been called with " + jasmine.pp(expectedArgs) + " but it was",
- "Expected spy to have been called with " + jasmine.pp(expectedArgs) + " but it was"
- ];
- };
-
- return !this.env.contains_(this.actual.argsForCall, expectedArgs);
-};
-
-/**
- * Matcher that checks that the expected item is an element in the actual Array.
- *
- * @param {Object} expected
- */
-jasmine.Matchers.prototype.toContain = function(expected) {
- return this.env.contains_(this.actual, expected);
-};
-
-/**
- * Matcher that checks that the expected item is NOT an element in the actual Array.
- *
- * @param {Object} expected
- * @deprecated as of 1.0. Use not.toContain() instead.
- */
-jasmine.Matchers.prototype.toNotContain = function(expected) {
- return !this.env.contains_(this.actual, expected);
-};
-
-jasmine.Matchers.prototype.toBeLessThan = function(expected) {
- return this.actual < expected;
-};
-
-jasmine.Matchers.prototype.toBeGreaterThan = function(expected) {
- return this.actual > expected;
-};
-
-/**
- * Matcher that checks that the expected item is equal to the actual item
- * up to a given level of decimal precision (default 2).
- *
- * @param {Number} expected
- * @param {Number} precision
- */
-jasmine.Matchers.prototype.toBeCloseTo = function(expected, precision) {
- if (!(precision === 0)) {
- precision = precision || 2;
- }
- var multiplier = Math.pow(10, precision);
- var actual = Math.round(this.actual * multiplier);
- expected = Math.round(expected * multiplier);
- return expected == actual;
-};
-
-/**
- * Matcher that checks that the expected exception was thrown by the actual.
- *
- * @param {String} expected
- */
-jasmine.Matchers.prototype.toThrow = function(expected) {
- var result = false;
- var exception;
- if (typeof this.actual != 'function') {
- throw new Error('Actual is not a function');
- }
- try {
- this.actual();
- } catch (e) {
- exception = e;
- }
- if (exception) {
- result = (expected === jasmine.undefined || this.env.equals_(exception.message || exception, expected.message || expected));
- }
-
- var not = this.isNot ? "not " : "";
-
- this.message = function() {
- if (exception && (expected === jasmine.undefined || !this.env.equals_(exception.message || exception, expected.message || expected))) {
- return ["Expected function " + not + "to throw", expected ? expected.message || expected : "an exception", ", but it threw", exception.message || exception].join(' ');
- } else {
- return "Expected function to throw an exception.";
- }
- };
-
- return result;
-};
-
-jasmine.Matchers.Any = function(expectedClass) {
- this.expectedClass = expectedClass;
-};
-
-jasmine.Matchers.Any.prototype.jasmineMatches = function(other) {
- if (this.expectedClass == String) {
- return typeof other == 'string' || other instanceof String;
- }
-
- if (this.expectedClass == Number) {
- return typeof other == 'number' || other instanceof Number;
- }
-
- if (this.expectedClass == Function) {
- return typeof other == 'function' || other instanceof Function;
- }
-
- if (this.expectedClass == Object) {
- return typeof other == 'object';
- }
-
- return other instanceof this.expectedClass;
-};
-
-jasmine.Matchers.Any.prototype.jasmineToString = function() {
- return '<jasmine.any(' + this.expectedClass + ')>';
-};
-
-jasmine.Matchers.ObjectContaining = function (sample) {
- this.sample = sample;
-};
-
-jasmine.Matchers.ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) {
- mismatchKeys = mismatchKeys || [];
- mismatchValues = mismatchValues || [];
-
- var env = jasmine.getEnv();
-
- var hasKey = function(obj, keyName) {
- return obj != null && obj[keyName] !== jasmine.undefined;
- };
-
- for (var property in this.sample) {
- if (!hasKey(other, property) && hasKey(this.sample, property)) {
- mismatchKeys.push("expected has key '" + property + "', but missing from actual.");
- }
- else if (!env.equals_(this.sample[property], other[property], mismatchKeys, mismatchValues)) {
- mismatchValues.push("'" + property + "' was '" + (other[property] ? jasmine.util.htmlEscape(other[property].toString()) : other[property]) + "' in expected, but was '" + (this.sample[property] ? jasmine.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + "' in actual.");
- }
- }
-
- return (mismatchKeys.length === 0 && mismatchValues.length === 0);
-};
-
-jasmine.Matchers.ObjectContaining.prototype.jasmineToString = function () {
- return "<jasmine.objectContaining(" + jasmine.pp(this.sample) + ")>";
-};
-// Mock setTimeout, clearTimeout
-// Contributed by Pivotal Computer Systems, www.pivotalsf.com
-
-jasmine.FakeTimer = function() {
- this.reset();
-
- var self = this;
- self.setTimeout = function(funcToCall, millis) {
- self.timeoutsMade++;
- self.scheduleFunction(self.timeoutsMade, funcToCall, millis, false);
- return self.timeoutsMade;
- };
-
- self.setInterval = function(funcToCall, millis) {
- self.timeoutsMade++;
- self.scheduleFunction(self.timeoutsMade, funcToCall, millis, true);
- return self.timeoutsMade;
- };
-
- self.clearTimeout = function(timeoutKey) {
- self.scheduledFunctions[timeoutKey] = jasmine.undefined;
- };
-
- self.clearInterval = function(timeoutKey) {
- self.scheduledFunctions[timeoutKey] = jasmine.undefined;
- };
-
-};
-
-jasmine.FakeTimer.prototype.reset = function() {
- this.timeoutsMade = 0;
- this.scheduledFunctions = {};
- this.nowMillis = 0;
-};
-
-jasmine.FakeTimer.prototype.tick = function(millis) {
- var oldMillis = this.nowMillis;
- var newMillis = oldMillis + millis;
- this.runFunctionsWithinRange(oldMillis, newMillis);
- this.nowMillis = newMillis;
-};
-
-jasmine.FakeTimer.prototype.runFunctionsWithinRange = function(oldMillis, nowMillis) {
- var scheduledFunc;
- var funcsToRun = [];
- for (var timeoutKey in this.scheduledFunctions) {
- scheduledFunc = this.scheduledFunctions[timeoutKey];
- if (scheduledFunc != jasmine.undefined &&
- scheduledFunc.runAtMillis >= oldMillis &&
- scheduledFunc.runAtMillis <= nowMillis) {
- funcsToRun.push(scheduledFunc);
- this.scheduledFunctions[timeoutKey] = jasmine.undefined;
- }
- }
-
- if (funcsToRun.length > 0) {
- funcsToRun.sort(function(a, b) {
- return a.runAtMillis - b.runAtMillis;
- });
- for (var i = 0; i < funcsToRun.length; ++i) {
- try {
- var funcToRun = funcsToRun[i];
- this.nowMillis = funcToRun.runAtMillis;
- funcToRun.funcToCall();
- if (funcToRun.recurring) {
- this.scheduleFunction(funcToRun.timeoutKey,
- funcToRun.funcToCall,
- funcToRun.millis,
- true);
- }
- } catch(e) {
- }
- }
- this.runFunctionsWithinRange(oldMillis, nowMillis);
- }
-};
-
-jasmine.FakeTimer.prototype.scheduleFunction = function(timeoutKey, funcToCall, millis, recurring) {
- this.scheduledFunctions[timeoutKey] = {
- runAtMillis: this.nowMillis + millis,
- funcToCall: funcToCall,
- recurring: recurring,
- timeoutKey: timeoutKey,
- millis: millis
- };
-};
-
-/**
- * @namespace
- */
-jasmine.Clock = {
- defaultFakeTimer: new jasmine.FakeTimer(),
-
- reset: function() {
- jasmine.Clock.assertInstalled();
- jasmine.Clock.defaultFakeTimer.reset();
- },
-
- tick: function(millis) {
- jasmine.Clock.assertInstalled();
- jasmine.Clock.defaultFakeTimer.tick(millis);
- },
-
- runFunctionsWithinRange: function(oldMillis, nowMillis) {
- jasmine.Clock.defaultFakeTimer.runFunctionsWithinRange(oldMillis, nowMillis);
- },
-
- scheduleFunction: function(timeoutKey, funcToCall, millis, recurring) {
- jasmine.Clock.defaultFakeTimer.scheduleFunction(timeoutKey, funcToCall, millis, recurring);
- },
-
- useMock: function() {
- if (!jasmine.Clock.isInstalled()) {
- var spec = jasmine.getEnv().currentSpec;
- spec.after(jasmine.Clock.uninstallMock);
-
- jasmine.Clock.installMock();
- }
- },
-
- installMock: function() {
- jasmine.Clock.installed = jasmine.Clock.defaultFakeTimer;
- },
-
- uninstallMock: function() {
- jasmine.Clock.assertInstalled();
- jasmine.Clock.installed = jasmine.Clock.real;
- },
-
- real: {
- setTimeout: jasmine.getGlobal().setTimeout,
- clearTimeout: jasmine.getGlobal().clearTimeout,
- setInterval: jasmine.getGlobal().setInterval,
- clearInterval: jasmine.getGlobal().clearInterval
- },
-
- assertInstalled: function() {
- if (!jasmine.Clock.isInstalled()) {
- throw new Error("Mock clock is not installed, use jasmine.Clock.useMock()");
- }
- },
-
- isInstalled: function() {
- return jasmine.Clock.installed == jasmine.Clock.defaultFakeTimer;
- },
-
- installed: null
-};
-jasmine.Clock.installed = jasmine.Clock.real;
-
-//else for IE support
-jasmine.getGlobal().setTimeout = function(funcToCall, millis) {
- if (jasmine.Clock.installed.setTimeout.apply) {
- return jasmine.Clock.installed.setTimeout.apply(this, arguments);
- } else {
- return jasmine.Clock.installed.setTimeout(funcToCall, millis);
- }
-};
-
-jasmine.getGlobal().setInterval = function(funcToCall, millis) {
- if (jasmine.Clock.installed.setInterval.apply) {
- return jasmine.Clock.installed.setInterval.apply(this, arguments);
- } else {
- return jasmine.Clock.installed.setInterval(funcToCall, millis);
- }
-};
-
-jasmine.getGlobal().clearTimeout = function(timeoutKey) {
- if (jasmine.Clock.installed.clearTimeout.apply) {
- return jasmine.Clock.installed.clearTimeout.apply(this, arguments);
- } else {
- return jasmine.Clock.installed.clearTimeout(timeoutKey);
- }
-};
-
-jasmine.getGlobal().clearInterval = function(timeoutKey) {
- if (jasmine.Clock.installed.clearTimeout.apply) {
- return jasmine.Clock.installed.clearInterval.apply(this, arguments);
- } else {
- return jasmine.Clock.installed.clearInterval(timeoutKey);
- }
-};
-
-/**
- * @constructor
- */
-jasmine.MultiReporter = function() {
- this.subReporters_ = [];
-};
-jasmine.util.inherit(jasmine.MultiReporter, jasmine.Reporter);
-
-jasmine.MultiReporter.prototype.addReporter = function(reporter) {
- this.subReporters_.push(reporter);
-};
-
-(function() {
- var functionNames = [
- "reportRunnerStarting",
- "reportRunnerResults",
- "reportSuiteResults",
- "reportSpecStarting",
- "reportSpecResults",
- "log"
- ];
- for (var i = 0; i < functionNames.length; i++) {
- var functionName = functionNames[i];
- jasmine.MultiReporter.prototype[functionName] = (function(functionName) {
- return function() {
- for (var j = 0; j < this.subReporters_.length; j++) {
- var subReporter = this.subReporters_[j];
- if (subReporter[functionName]) {
- subReporter[functionName].apply(subReporter, arguments);
- }
- }
- };
- })(functionName);
- }
-})();
-/**
- * Holds results for a set of Jasmine spec. Allows for the results array to hold another jasmine.NestedResults
- *
- * @constructor
- */
-jasmine.NestedResults = function() {
- /**
- * The total count of results
- */
- this.totalCount = 0;
- /**
- * Number of passed results
- */
- this.passedCount = 0;
- /**
- * Number of failed results
- */
- this.failedCount = 0;
- /**
- * Was this suite/spec skipped?
- */
- this.skipped = false;
- /**
- * @ignore
- */
- this.items_ = [];
-};
-
-/**
- * Roll up the result counts.
- *
- * @param result
- */
-jasmine.NestedResults.prototype.rollupCounts = function(result) {
- this.totalCount += result.totalCount;
- this.passedCount += result.passedCount;
- this.failedCount += result.failedCount;
-};
-
-/**
- * Adds a log message.
- * @param values Array of message parts which will be concatenated later.
- */
-jasmine.NestedResults.prototype.log = function(values) {
- this.items_.push(new jasmine.MessageResult(values));
-};
-
-/**
- * Getter for the results: message & results.
- */
-jasmine.NestedResults.prototype.getItems = function() {
- return this.items_;
-};
-
-/**
- * Adds a result, tracking counts (total, passed, & failed)
- * @param {jasmine.ExpectationResult|jasmine.NestedResults} result
- */
-jasmine.NestedResults.prototype.addResult = function(result) {
- if (result.type != 'log') {
- if (result.items_) {
- this.rollupCounts(result);
- } else {
- this.totalCount++;
- if (result.passed()) {
- this.passedCount++;
- } else {
- this.failedCount++;
- }
- }
- }
- this.items_.push(result);
-};
-
-/**
- * @returns {Boolean} True if <b>everything</b> below passed
- */
-jasmine.NestedResults.prototype.passed = function() {
- return this.passedCount === this.totalCount;
-};
-/**
- * Base class for pretty printing for expectation results.
- */
-jasmine.PrettyPrinter = function() {
- this.ppNestLevel_ = 0;
-};
-
-/**
- * Formats a value in a nice, human-readable string.
- *
- * @param value
- */
-jasmine.PrettyPrinter.prototype.format = function(value) {
- if (this.ppNestLevel_ > 40) {
- throw new Error('jasmine.PrettyPrinter: format() nested too deeply!');
- }
-
- this.ppNestLevel_++;
- try {
- if (value === jasmine.undefined) {
- this.emitScalar('undefined');
- } else if (value === null) {
- this.emitScalar('null');
- } else if (value === jasmine.getGlobal()) {
- this.emitScalar('<global>');
- } else if (value.jasmineToString) {
- this.emitScalar(value.jasmineToString());
- } else if (typeof value === 'string') {
- this.emitString(value);
- } else if (jasmine.isSpy(value)) {
- this.emitScalar("spy on " + value.identity);
- } else if (value instanceof RegExp) {
- this.emitScalar(value.toString());
- } else if (typeof value === 'function') {
- this.emitScalar('Function');
- } else if (typeof value.nodeType === 'number') {
- this.emitScalar('HTMLNode');
- } else if (value instanceof Date) {
- this.emitScalar('Date(' + value + ')');
- } else if (value.__Jasmine_been_here_before__) {
- this.emitScalar('<circular reference: ' + (jasmine.isArray_(value) ? 'Array' : 'Object') + '>');
- } else if (jasmine.isArray_(value) || typeof value == 'object') {
- value.__Jasmine_been_here_before__ = true;
- if (jasmine.isArray_(value)) {
- this.emitArray(value);
- } else {
- this.emitObject(value);
- }
- delete value.__Jasmine_been_here_before__;
- } else {
- this.emitScalar(value.toString());
- }
- } finally {
- this.ppNestLevel_--;
- }
-};
-
-jasmine.PrettyPrinter.prototype.iterateObject = function(obj, fn) {
- for (var property in obj) {
- if (property == '__Jasmine_been_here_before__') continue;
- fn(property, obj.__lookupGetter__ ? (obj.__lookupGetter__(property) !== jasmine.undefined &&
- obj.__lookupGetter__(property) !== null) : false);
- }
-};
-
-jasmine.PrettyPrinter.prototype.emitArray = jasmine.unimplementedMethod_;
-jasmine.PrettyPrinter.prototype.emitObject = jasmine.unimplementedMethod_;
-jasmine.PrettyPrinter.prototype.emitScalar = jasmine.unimplementedMethod_;
-jasmine.PrettyPrinter.prototype.emitString = jasmine.unimplementedMethod_;
-
-jasmine.StringPrettyPrinter = function() {
- jasmine.PrettyPrinter.call(this);
-
- this.string = '';
-};
-jasmine.util.inherit(jasmine.StringPrettyPrinter, jasmine.PrettyPrinter);
-
-jasmine.StringPrettyPrinter.prototype.emitScalar = function(value) {
- this.append(value);
-};
-
-jasmine.StringPrettyPrinter.prototype.emitString = function(value) {
- this.append("'" + value + "'");
-};
-
-jasmine.StringPrettyPrinter.prototype.emitArray = function(array) {
- this.append('[ ');
- for (var i = 0; i < array.length; i++) {
- if (i > 0) {
- this.append(', ');
- }
- this.format(array[i]);
- }
- this.append(' ]');
-};
-
-jasmine.StringPrettyPrinter.prototype.emitObject = function(obj) {
- var self = this;
- this.append('{ ');
- var first = true;
-
- this.iterateObject(obj, function(property, isGetter) {
- if (first) {
- first = false;
- } else {
- self.append(', ');
- }
-
- self.append(property);
- self.append(' : ');
- if (isGetter) {
- self.append('<getter>');
- } else {
- self.format(obj[property]);
- }
- });
-
- this.append(' }');
-};
-
-jasmine.StringPrettyPrinter.prototype.append = function(value) {
- this.string += value;
-};
-jasmine.Queue = function(env) {
- this.env = env;
- this.blocks = [];
- this.running = false;
- this.index = 0;
- this.offset = 0;
- this.abort = false;
-};
-
-jasmine.Queue.prototype.addBefore = function(block) {
- this.blocks.unshift(block);
-};
-
-jasmine.Queue.prototype.add = function(block) {
- this.blocks.push(block);
-};
-
-jasmine.Queue.prototype.insertNext = function(block) {
- this.blocks.splice((this.index + this.offset + 1), 0, block);
- this.offset++;
-};
-
-jasmine.Queue.prototype.start = function(onComplete) {
- this.running = true;
- this.onComplete = onComplete;
- this.next_();
-};
-
-jasmine.Queue.prototype.isRunning = function() {
- return this.running;
-};
-
-jasmine.Queue.LOOP_DONT_RECURSE = true;
-
-jasmine.Queue.prototype.next_ = function() {
- var self = this;
- var goAgain = true;
-
- while (goAgain) {
- goAgain = false;
-
- if (self.index < self.blocks.length && !this.abort) {
- var calledSynchronously = true;
- var completedSynchronously = false;
-
- var onComplete = function () {
- if (jasmine.Queue.LOOP_DONT_RECURSE && calledSynchronously) {
- completedSynchronously = true;
- return;
- }
-
- if (self.blocks[self.index].abort) {
- self.abort = true;
- }
-
- self.offset = 0;
- self.index++;
-
- var now = new Date().getTime();
- if (self.env.updateInterval && now - self.env.lastUpdate > self.env.updateInterval) {
- self.env.lastUpdate = now;
- self.env.setTimeout(function() {
- self.next_();
- }, 0);
- } else {
- if (jasmine.Queue.LOOP_DONT_RECURSE && completedSynchronously) {
- goAgain = true;
- } else {
- self.next_();
- }
- }
- };
- self.blocks[self.index].execute(onComplete);
-
- calledSynchronously = false;
- if (completedSynchronously) {
- onComplete();
- }
-
- } else {
- self.running = false;
- if (self.onComplete) {
- self.onComplete();
- }
- }
- }
-};
-
-jasmine.Queue.prototype.results = function() {
- var results = new jasmine.NestedResults();
- for (var i = 0; i < this.blocks.length; i++) {
- if (this.blocks[i].results) {
- results.addResult(this.blocks[i].results());
- }
- }
- return results;
-};
-
-
-/**
- * Runner
- *
- * @constructor
- * @param {jasmine.Env} env
- */
-jasmine.Runner = function(env) {
- var self = this;
- self.env = env;
- self.queue = new jasmine.Queue(env);
- self.before_ = [];
- self.after_ = [];
- self.suites_ = [];
-};
-
-jasmine.Runner.prototype.execute = function() {
- var self = this;
- if (self.env.reporter.reportRunnerStarting) {
- self.env.reporter.reportRunnerStarting(this);
- }
- self.queue.start(function () {
- self.finishCallback();
- });
-};
-
-jasmine.Runner.prototype.beforeEach = function(beforeEachFunction) {
- beforeEachFunction.typeName = 'beforeEach';
- this.before_.splice(0,0,beforeEachFunction);
-};
-
-jasmine.Runner.prototype.afterEach = function(afterEachFunction) {
- afterEachFunction.typeName = 'afterEach';
- this.after_.splice(0,0,afterEachFunction);
-};
-
-
-jasmine.Runner.prototype.finishCallback = function() {
- this.env.reporter.reportRunnerResults(this);
-};
-
-jasmine.Runner.prototype.addSuite = function(suite) {
- this.suites_.push(suite);
-};
-
-jasmine.Runner.prototype.add = function(block) {
- if (block instanceof jasmine.Suite) {
- this.addSuite(block);
- }
- this.queue.add(block);
-};
-
-jasmine.Runner.prototype.specs = function () {
- var suites = this.suites();
- var specs = [];
- for (var i = 0; i < suites.length; i++) {
- specs = specs.concat(suites[i].specs());
- }
- return specs;
-};
-
-jasmine.Runner.prototype.suites = function() {
- return this.suites_;
-};
-
-jasmine.Runner.prototype.topLevelSuites = function() {
- var topLevelSuites = [];
- for (var i = 0; i < this.suites_.length; i++) {
- if (!this.suites_[i].parentSuite) {
- topLevelSuites.push(this.suites_[i]);
- }
- }
- return topLevelSuites;
-};
-
-jasmine.Runner.prototype.results = function() {
- return this.queue.results();
-};
-/**
- * Internal representation of a Jasmine specification, or test.
- *
- * @constructor
- * @param {jasmine.Env} env
- * @param {jasmine.Suite} suite
- * @param {String} description
- */
-jasmine.Spec = function(env, suite, description) {
- if (!env) {
- throw new Error('jasmine.Env() required');
- }
- if (!suite) {
- throw new Error('jasmine.Suite() required');
- }
- var spec = this;
- spec.id = env.nextSpecId ? env.nextSpecId() : null;
- spec.env = env;
- spec.suite = suite;
- spec.description = description;
- spec.queue = new jasmine.Queue(env);
-
- spec.afterCallbacks = [];
- spec.spies_ = [];
-
- spec.results_ = new jasmine.NestedResults();
- spec.results_.description = description;
- spec.matchersClass = null;
-};
-
-jasmine.Spec.prototype.getFullName = function() {
- return this.suite.getFullName() + ' ' + this.description + '.';
-};
-
-
-jasmine.Spec.prototype.results = function() {
- return this.results_;
-};
-
-/**
- * All parameters are pretty-printed and concatenated together, then written to the spec's output.
- *
- * Be careful not to leave calls to <code>jasmine.log</code> in production code.
- */
-jasmine.Spec.prototype.log = function() {
- return this.results_.log(arguments);
-};
-
-jasmine.Spec.prototype.runs = function (func) {
- var block = new jasmine.Block(this.env, func, this);
- this.addToQueue(block);
- return this;
-};
-
-jasmine.Spec.prototype.addToQueue = function (block) {
- if (this.queue.isRunning()) {
- this.queue.insertNext(block);
- } else {
- this.queue.add(block);
- }
-};
-
-/**
- * @param {jasmine.ExpectationResult} result
- */
-jasmine.Spec.prototype.addMatcherResult = function(result) {
- this.results_.addResult(result);
-};
-
-jasmine.Spec.prototype.expect = function(actual) {
- var positive = new (this.getMatchersClass_())(this.env, actual, this);
- positive.not = new (this.getMatchersClass_())(this.env, actual, this, true);
- return positive;
-};
-
-/**
- * Waits a fixed time period before moving to the next block.
- *
- * @deprecated Use waitsFor() instead
- * @param {Number} timeout milliseconds to wait
- */
-jasmine.Spec.prototype.waits = function(timeout) {
- var waitsFunc = new jasmine.WaitsBlock(this.env, timeout, this);
- this.addToQueue(waitsFunc);
- return this;
-};
-
-/**
- * Waits for the latchFunction to return true before proceeding to the next block.
- *
- * @param {Function} latchFunction
- * @param {String} optional_timeoutMessage
- * @param {Number} optional_timeout
- */
-jasmine.Spec.prototype.waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) {
- var latchFunction_ = null;
- var optional_timeoutMessage_ = null;
- var optional_timeout_ = null;
-
- for (var i = 0; i < arguments.length; i++) {
- var arg = arguments[i];
- switch (typeof arg) {
- case 'function':
- latchFunction_ = arg;
- break;
- case 'string':
- optional_timeoutMessage_ = arg;
- break;
- case 'number':
- optional_timeout_ = arg;
- break;
- }
- }
-
- var waitsForFunc = new jasmine.WaitsForBlock(this.env, optional_timeout_, latchFunction_, optional_timeoutMessage_, this);
- this.addToQueue(waitsForFunc);
- return this;
-};
-
-jasmine.Spec.prototype.fail = function (e) {
- var expectationResult = new jasmine.ExpectationResult({
- passed: false,
- message: e ? jasmine.util.formatException(e) : 'Exception',
- trace: { stack: e.stack }
- });
- this.results_.addResult(expectationResult);
-};
-
-jasmine.Spec.prototype.getMatchersClass_ = function() {
- return this.matchersClass || this.env.matchersClass;
-};
-
-jasmine.Spec.prototype.addMatchers = function(matchersPrototype) {
- var parent = this.getMatchersClass_();
- var newMatchersClass = function() {
- parent.apply(this, arguments);
- };
- jasmine.util.inherit(newMatchersClass, parent);
- jasmine.Matchers.wrapInto_(matchersPrototype, newMatchersClass);
- this.matchersClass = newMatchersClass;
-};
-
-jasmine.Spec.prototype.finishCallback = function() {
- this.env.reporter.reportSpecResults(this);
-};
-
-jasmine.Spec.prototype.finish = function(onComplete) {
- this.removeAllSpies();
- this.finishCallback();
- if (onComplete) {
- onComplete();
- }
-};
-
-jasmine.Spec.prototype.after = function(doAfter) {
- if (this.queue.isRunning()) {
- this.queue.add(new jasmine.Block(this.env, doAfter, this));
- } else {
- this.afterCallbacks.unshift(doAfter);
- }
-};
-
-jasmine.Spec.prototype.execute = function(onComplete) {
- var spec = this;
- if (!spec.env.specFilter(spec)) {
- spec.results_.skipped = true;
- spec.finish(onComplete);
- return;
- }
-
- this.env.reporter.reportSpecStarting(this);
-
- spec.env.currentSpec = spec;
-
- spec.addBeforesAndAftersToQueue();
-
- spec.queue.start(function () {
- spec.finish(onComplete);
- });
-};
-
-jasmine.Spec.prototype.addBeforesAndAftersToQueue = function() {
- var runner = this.env.currentRunner();
- var i;
-
- for (var suite = this.suite; suite; suite = suite.parentSuite) {
- for (i = 0; i < suite.before_.length; i++) {
- this.queue.addBefore(new jasmine.Block(this.env, suite.before_[i], this));
- }
- }
- for (i = 0; i < runner.before_.length; i++) {
- this.queue.addBefore(new jasmine.Block(this.env, runner.before_[i], this));
- }
- for (i = 0; i < this.afterCallbacks.length; i++) {
- this.queue.add(new jasmine.Block(this.env, this.afterCallbacks[i], this));
- }
- for (suite = this.suite; suite; suite = suite.parentSuite) {
- for (i = 0; i < suite.after_.length; i++) {
- this.queue.add(new jasmine.Block(this.env, suite.after_[i], this));
- }
- }
- for (i = 0; i < runner.after_.length; i++) {
- this.queue.add(new jasmine.Block(this.env, runner.after_[i], this));
- }
-};
-
-jasmine.Spec.prototype.explodes = function() {
- throw 'explodes function should not have been called';
-};
-
-jasmine.Spec.prototype.spyOn = function(obj, methodName, ignoreMethodDoesntExist) {
- if (obj == jasmine.undefined) {
- throw "spyOn could not find an object to spy upon for " + methodName + "()";
- }
-
- if (!ignoreMethodDoesntExist && obj[methodName] === jasmine.undefined) {
- throw methodName + '() method does not exist';
- }
-
- if (!ignoreMethodDoesntExist && obj[methodName] && obj[methodName].isSpy) {
- throw new Error(methodName + ' has already been spied upon');
- }
-
- var spyObj = jasmine.createSpy(methodName);
-
- this.spies_.push(spyObj);
- spyObj.baseObj = obj;
- spyObj.methodName = methodName;
- spyObj.originalValue = obj[methodName];
-
- obj[methodName] = spyObj;
-
- return spyObj;
-};
-
-jasmine.Spec.prototype.removeAllSpies = function() {
- for (var i = 0; i < this.spies_.length; i++) {
- var spy = this.spies_[i];
- spy.baseObj[spy.methodName] = spy.originalValue;
- }
- this.spies_ = [];
-};
-
-/**
- * Internal representation of a Jasmine suite.
- *
- * @constructor
- * @param {jasmine.Env} env
- * @param {String} description
- * @param {Function} specDefinitions
- * @param {jasmine.Suite} parentSuite
- */
-jasmine.Suite = function(env, description, specDefinitions, parentSuite) {
- var self = this;
- self.id = env.nextSuiteId ? env.nextSuiteId() : null;
- self.description = description;
- self.queue = new jasmine.Queue(env);
- self.parentSuite = parentSuite;
- self.env = env;
- self.before_ = [];
- self.after_ = [];
- self.children_ = [];
- self.suites_ = [];
- self.specs_ = [];
-};
-
-jasmine.Suite.prototype.getFullName = function() {
- var fullName = this.description;
- for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) {
- fullName = parentSuite.description + ' ' + fullName;
- }
- return fullName;
-};
-
-jasmine.Suite.prototype.finish = function(onComplete) {
- this.env.reporter.reportSuiteResults(this);
- this.finished = true;
- if (typeof(onComplete) == 'function') {
- onComplete();
- }
-};
-
-jasmine.Suite.prototype.beforeEach = function(beforeEachFunction) {
- beforeEachFunction.typeName = 'beforeEach';
- this.before_.unshift(beforeEachFunction);
-};
-
-jasmine.Suite.prototype.afterEach = function(afterEachFunction) {
- afterEachFunction.typeName = 'afterEach';
- this.after_.unshift(afterEachFunction);
-};
-
-jasmine.Suite.prototype.results = function() {
- return this.queue.results();
-};
-
-jasmine.Suite.prototype.add = function(suiteOrSpec) {
- this.children_.push(suiteOrSpec);
- if (suiteOrSpec instanceof jasmine.Suite) {
- this.suites_.push(suiteOrSpec);
- this.env.currentRunner().addSuite(suiteOrSpec);
- } else {
- this.specs_.push(suiteOrSpec);
- }
- this.queue.add(suiteOrSpec);
-};
-
-jasmine.Suite.prototype.specs = function() {
- return this.specs_;
-};
-
-jasmine.Suite.prototype.suites = function() {
- return this.suites_;
-};
-
-jasmine.Suite.prototype.children = function() {
- return this.children_;
-};
-
-jasmine.Suite.prototype.execute = function(onComplete) {
- var self = this;
- this.queue.start(function () {
- self.finish(onComplete);
- });
-};
-jasmine.WaitsBlock = function(env, timeout, spec) {
- this.timeout = timeout;
- jasmine.Block.call(this, env, null, spec);
-};
-
-jasmine.util.inherit(jasmine.WaitsBlock, jasmine.Block);
-
-jasmine.WaitsBlock.prototype.execute = function (onComplete) {
- if (jasmine.VERBOSE) {
- this.env.reporter.log('>> Jasmine waiting for ' + this.timeout + ' ms...');
- }
- this.env.setTimeout(function () {
- onComplete();
- }, this.timeout);
-};
-/**
- * A block which waits for some condition to become true, with timeout.
- *
- * @constructor
- * @extends jasmine.Block
- * @param {jasmine.Env} env The Jasmine environment.
- * @param {Number} timeout The maximum time in milliseconds to wait for the condition to become true.
- * @param {Function} latchFunction A function which returns true when the desired condition has been met.
- * @param {String} message The message to display if the desired condition hasn't been met within the given time period.
- * @param {jasmine.Spec} spec The Jasmine spec.
- */
-jasmine.WaitsForBlock = function(env, timeout, latchFunction, message, spec) {
- this.timeout = timeout || env.defaultTimeoutInterval;
- this.latchFunction = latchFunction;
- this.message = message;
- this.totalTimeSpentWaitingForLatch = 0;
- jasmine.Block.call(this, env, null, spec);
-};
-jasmine.util.inherit(jasmine.WaitsForBlock, jasmine.Block);
-
-jasmine.WaitsForBlock.TIMEOUT_INCREMENT = 10;
-
-jasmine.WaitsForBlock.prototype.execute = function(onComplete) {
- if (jasmine.VERBOSE) {
- this.env.reporter.log('>> Jasmine waiting for ' + (this.message || 'something to happen'));
- }
- var latchFunctionResult;
- try {
- latchFunctionResult = this.latchFunction.apply(this.spec);
- } catch (e) {
- this.spec.fail(e);
- onComplete();
- return;
- }
-
- if (latchFunctionResult) {
- onComplete();
- } else if (this.totalTimeSpentWaitingForLatch >= this.timeout) {
- var message = 'timed out after ' + this.timeout + ' msec waiting for ' + (this.message || 'something to happen');
- this.spec.fail({
- name: 'timeout',
- message: message
- });
-
- this.abort = true;
- onComplete();
- } else {
- this.totalTimeSpentWaitingForLatch += jasmine.WaitsForBlock.TIMEOUT_INCREMENT;
- var self = this;
- this.env.setTimeout(function() {
- self.execute(onComplete);
- }, jasmine.WaitsForBlock.TIMEOUT_INCREMENT);
- }
-};
-
-jasmine.version_= {
- "major": 1,
- "minor": 2,
- "build": 0,
- "revision": 1337005947
-};
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/lib/jquery.js b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/lib/jquery.js
deleted file mode 100644
index 27914ea3..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/lib/jquery.js
+++ /dev/null
@@ -1,9046 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.6.4
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Mon Sep 12 18:54:48 2011 -0400
- */
-(function( window, undefined ) {
-
-// Use the correct document accordingly with window argument (sandbox)
-var document = window.document,
- navigator = window.navigator,
- location = window.location;
-var jQuery = (function() {
-
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- return new jQuery.fn.init( selector, context, rootjQuery );
- },
-
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$,
-
- // A central reference to the root jQuery(document)
- rootjQuery,
-
- // A simple way to check for HTML strings or ID strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-
- // Check if a string has a non-whitespace character in it
- rnotwhite = /\S/,
-
- // Used for trimming whitespace
- trimLeft = /^\s+/,
- trimRight = /\s+$/,
-
- // Check for digits
- rdigit = /\d/,
-
- // Match a standalone tag
- rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
- // JSON RegExp
- rvalidchars = /^[\],:{}\s]*$/,
- rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
- rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
- rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-
- // Useragent RegExp
- rwebkit = /(webkit)[ \/]([\w.]+)/,
- ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
- rmsie = /(msie) ([\w.]+)/,
- rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
-
- // Matches dashed string for camelizing
- rdashAlpha = /-([a-z]|[0-9])/ig,
- rmsPrefix = /^-ms-/,
-
- // Used by jQuery.camelCase as callback to replace()
- fcamelCase = function( all, letter ) {
- return ( letter + "" ).toUpperCase();
- },
-
- // Keep a UserAgent string for use with jQuery.browser
- userAgent = navigator.userAgent,
-
- // For matching the engine and version of the browser
- browserMatch,
-
- // The deferred used on DOM ready
- readyList,
-
- // The ready event handler
- DOMContentLoaded,
-
- // Save a reference to some core methods
- toString = Object.prototype.toString,
- hasOwn = Object.prototype.hasOwnProperty,
- push = Array.prototype.push,
- slice = Array.prototype.slice,
- trim = String.prototype.trim,
- indexOf = Array.prototype.indexOf,
-
- // [[Class]] -> type pairs
- class2type = {};
-
-jQuery.fn = jQuery.prototype = {
- constructor: jQuery,
- init: function( selector, context, rootjQuery ) {
- var match, elem, ret, doc;
-
- // Handle $(""), $(null), or $(undefined)
- if ( !selector ) {
- return this;
- }
-
- // Handle $(DOMElement)
- if ( selector.nodeType ) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
- }
-
- // The body element only exists once, optimize finding it
- if ( selector === "body" && !context && document.body ) {
- this.context = document;
- this[0] = document.body;
- this.selector = selector;
- this.length = 1;
- return this;
- }
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- // Are we dealing with HTML string or an ID?
- if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = quickExpr.exec( selector );
- }
-
- // Verify a match, and that no context was specified for #id
- if ( match && (match[1] || !context) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[1] ) {
- context = context instanceof jQuery ? context[0] : context;
- doc = (context ? context.ownerDocument || context : document);
-
- // If a single string is passed in and it's a single tag
- // just do a createElement and skip the rest
- ret = rsingleTag.exec( selector );
-
- if ( ret ) {
- if ( jQuery.isPlainObject( context ) ) {
- selector = [ document.createElement( ret[1] ) ];
- jQuery.fn.attr.call( selector, context, true );
-
- } else {
- selector = [ doc.createElement( ret[1] ) ];
- }
-
- } else {
- ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
- selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
- }
-
- return jQuery.merge( this, selector );
-
- // HANDLE: $("#id")
- } else {
- elem = document.getElementById( match[2] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id !== match[2] ) {
- return rootjQuery.find( selector );
- }
-
- // Otherwise, we inject the element directly into the jQuery object
- this.length = 1;
- this[0] = elem;
- }
-
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return (context || rootjQuery).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return rootjQuery.ready( selector );
- }
-
- if (selector.selector !== undefined) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray( selector, this );
- },
-
- // Start with an empty selector
- selector: "",
-
- // The current version of jQuery being used
- jquery: "1.6.4",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- // The number of elements contained in the matched element set
- size: function() {
- return this.length;
- },
-
- toArray: function() {
- return slice.call( this, 0 );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num == null ?
-
- // Return a 'clean' array
- this.toArray() :
-
- // Return just the object
- ( num < 0 ? this[ this.length + num ] : this[ num ] );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems, name, selector ) {
- // Build a new jQuery matched element set
- var ret = this.constructor();
-
- if ( jQuery.isArray( elems ) ) {
- push.apply( ret, elems );
-
- } else {
- jQuery.merge( ret, elems );
- }
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
-
- ret.context = this.context;
-
- if ( name === "find" ) {
- ret.selector = this.selector + (this.selector ? " " : "") + selector;
- } else if ( name ) {
- ret.selector = this.selector + "." + name + "(" + selector + ")";
- }
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- // (You can seed the arguments with an array of args, but this is
- // only used internally.)
- each: function( callback, args ) {
- return jQuery.each( this, callback, args );
- },
-
- ready: function( fn ) {
- // Attach the listeners
- jQuery.bindReady();
-
- // Add the callback
- readyList.done( fn );
-
- return this;
- },
-
- eq: function( i ) {
- return i === -1 ?
- this.slice( i ) :
- this.slice( i, +i + 1 );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ),
- "slice", slice.call(arguments).join(",") );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function( elem, i ) {
- return callback.call( elem, i, elem );
- }));
- },
-
- end: function() {
- return this.prevObject || this.constructor(null);
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: [].sort,
- splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
- var options, name, src, copy, copyIsArray, clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
- target = arguments[1] || {};
- // skip the boolean and the target
- i = 2;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
- target = {};
- }
-
- // extend jQuery itself if only one argument is passed
- if ( length === i ) {
- target = this;
- --i;
- }
-
- for ( ; i < length; i++ ) {
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null ) {
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray(src) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject(src) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend({
- noConflict: function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
- },
-
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
- // Either a released hold or an DOMready/load event and not yet ready
- if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( !document.body ) {
- return setTimeout( jQuery.ready, 1 );
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ jQuery ] );
-
- // Trigger any bound ready events
- if ( jQuery.fn.trigger ) {
- jQuery( document ).trigger( "ready" ).unbind( "ready" );
- }
- }
- },
-
- bindReady: function() {
- if ( readyList ) {
- return;
- }
-
- readyList = jQuery._Deferred();
-
- // Catch cases where $(document).ready() is called after the
- // browser event has already occurred.
- if ( document.readyState === "complete" ) {
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- return setTimeout( jQuery.ready, 1 );
- }
-
- // Mozilla, Opera and webkit nightlies currently support this event
- if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", jQuery.ready, false );
-
- // If IE event model is used
- } else if ( document.attachEvent ) {
- // ensure firing before onload,
- // maybe late but safe also for iframes
- document.attachEvent( "onreadystatechange", DOMContentLoaded );
-
- // A fallback to window.onload, that will always work
- window.attachEvent( "onload", jQuery.ready );
-
- // If IE and not a frame
- // continually check to see if the document is ready
- var toplevel = false;
-
- try {
- toplevel = window.frameElement == null;
- } catch(e) {}
-
- if ( document.documentElement.doScroll && toplevel ) {
- doScrollCheck();
- }
- }
- },
-
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return jQuery.type(obj) === "function";
- },
-
- isArray: Array.isArray || function( obj ) {
- return jQuery.type(obj) === "array";
- },
-
- // A crude way of determining if an object is a window
- isWindow: function( obj ) {
- return obj && typeof obj === "object" && "setInterval" in obj;
- },
-
- isNaN: function( obj ) {
- return obj == null || !rdigit.test( obj ) || isNaN( obj );
- },
-
- type: function( obj ) {
- return obj == null ?
- String( obj ) :
- class2type[ toString.call(obj) ] || "object";
- },
-
- isPlainObject: function( obj ) {
- // Must be an Object.
- // Because of IE, we also have to check the presence of the constructor property.
- // Make sure that DOM nodes and window objects don't pass through, as well
- if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- try {
- // Not own constructor property must be Object
- if ( obj.constructor &&
- !hasOwn.call(obj, "constructor") &&
- !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
- return false;
- }
- } catch ( e ) {
- // IE8,9 Will throw exceptions on certain host objects #9897
- return false;
- }
-
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own.
-
- var key;
- for ( key in obj ) {}
-
- return key === undefined || hasOwn.call( obj, key );
- },
-
- isEmptyObject: function( obj ) {
- for ( var name in obj ) {
- return false;
- }
- return true;
- },
-
- error: function( msg ) {
- throw msg;
- },
-
- parseJSON: function( data ) {
- if ( typeof data !== "string" || !data ) {
- return null;
- }
-
- // Make sure leading/trailing whitespace is removed (IE can't handle it)
- data = jQuery.trim( data );
-
- // Attempt to parse using the native JSON parser first
- if ( window.JSON && window.JSON.parse ) {
- return window.JSON.parse( data );
- }
-
- // Make sure the incoming data is actual JSON
- // Logic borrowed from http://json.org/json2.js
- if ( rvalidchars.test( data.replace( rvalidescape, "@" )
- .replace( rvalidtokens, "]" )
- .replace( rvalidbraces, "")) ) {
-
- return (new Function( "return " + data ))();
-
- }
- jQuery.error( "Invalid JSON: " + data );
- },
-
- // Cross-browser xml parsing
- parseXML: function( data ) {
- var xml, tmp;
- try {
- if ( window.DOMParser ) { // Standard
- tmp = new DOMParser();
- xml = tmp.parseFromString( data , "text/xml" );
- } else { // IE
- xml = new ActiveXObject( "Microsoft.XMLDOM" );
- xml.async = "false";
- xml.loadXML( data );
- }
- } catch( e ) {
- xml = undefined;
- }
- if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
- },
-
- noop: function() {},
-
- // Evaluates a script in a global context
- // Workarounds based on findings by Jim Driscoll
- // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
- globalEval: function( data ) {
- if ( data && rnotwhite.test( data ) ) {
- // We use execScript on Internet Explorer
- // We use an anonymous function so that context is window
- // rather than jQuery in Firefox
- ( window.execScript || function( data ) {
- window[ "eval" ].call( window, data );
- } )( data );
- }
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Microsoft forgot to hump their vendor prefix (#9572)
- camelCase: function( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
- },
-
- // args is for internal usage only
- each: function( object, callback, args ) {
- var name, i = 0,
- length = object.length,
- isObj = length === undefined || jQuery.isFunction( object );
-
- if ( args ) {
- if ( isObj ) {
- for ( name in object ) {
- if ( callback.apply( object[ name ], args ) === false ) {
- break;
- }
- }
- } else {
- for ( ; i < length; ) {
- if ( callback.apply( object[ i++ ], args ) === false ) {
- break;
- }
- }
- }
-
- // A special, fast, case for the most common use of each
- } else {
- if ( isObj ) {
- for ( name in object ) {
- if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
- break;
- }
- }
- } else {
- for ( ; i < length; ) {
- if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
- break;
- }
- }
- }
- }
-
- return object;
- },
-
- // Use native String.trim function wherever possible
- trim: trim ?
- function( text ) {
- return text == null ?
- "" :
- trim.call( text );
- } :
-
- // Otherwise use our own trimming functionality
- function( text ) {
- return text == null ?
- "" :
- text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
- },
-
- // results is for internal usage only
- makeArray: function( array, results ) {
- var ret = results || [];
-
- if ( array != null ) {
- // The window, strings (and functions) also have 'length'
- // The extra typeof function check is to prevent crashes
- // in Safari 2 (See: #3039)
- // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
- var type = jQuery.type( array );
-
- if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
- push.call( ret, array );
- } else {
- jQuery.merge( ret, array );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, array ) {
- if ( !array ) {
- return -1;
- }
-
- if ( indexOf ) {
- return indexOf.call( array, elem );
- }
-
- for ( var i = 0, length = array.length; i < length; i++ ) {
- if ( array[ i ] === elem ) {
- return i;
- }
- }
-
- return -1;
- },
-
- merge: function( first, second ) {
- var i = first.length,
- j = 0;
-
- if ( typeof second.length === "number" ) {
- for ( var l = second.length; j < l; j++ ) {
- first[ i++ ] = second[ j ];
- }
-
- } else {
- while ( second[j] !== undefined ) {
- first[ i++ ] = second[ j++ ];
- }
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, inv ) {
- var ret = [], retVal;
- inv = !!inv;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( var i = 0, length = elems.length; i < length; i++ ) {
- retVal = !!callback( elems[ i ], i );
- if ( inv !== retVal ) {
- ret.push( elems[ i ] );
- }
- }
-
- return ret;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var value, key, ret = [],
- i = 0,
- length = elems.length,
- // jquery objects are treated as arrays
- isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
-
- // Go through the array, translating each of the items to their
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( key in elems ) {
- value = callback( elems[ key ], key, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
- }
-
- // Flatten any nested arrays
- return ret.concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- if ( typeof context === "string" ) {
- var tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- var args = slice.call( arguments, 2 ),
- proxy = function() {
- return fn.apply( context, args.concat( slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-
- return proxy;
- },
-
- // Mutifunctional method to get and set values to a collection
- // The value/s can optionally be executed if it's a function
- access: function( elems, key, value, exec, fn, pass ) {
- var length = elems.length;
-
- // Setting many attributes
- if ( typeof key === "object" ) {
- for ( var k in key ) {
- jQuery.access( elems, k, key[k], exec, fn, value );
- }
- return elems;
- }
-
- // Setting one attribute
- if ( value !== undefined ) {
- // Optionally, function values get executed if exec is true
- exec = !pass && exec && jQuery.isFunction(value);
-
- for ( var i = 0; i < length; i++ ) {
- fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
- }
-
- return elems;
- }
-
- // Getting an attribute
- return length ? fn( elems[0], key ) : undefined;
- },
-
- now: function() {
- return (new Date()).getTime();
- },
-
- // Use of jQuery.browser is frowned upon.
- // More details: http://docs.jquery.com/Utilities/jQuery.browser
- uaMatch: function( ua ) {
- ua = ua.toLowerCase();
-
- var match = rwebkit.exec( ua ) ||
- ropera.exec( ua ) ||
- rmsie.exec( ua ) ||
- ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
- [];
-
- return { browser: match[1] || "", version: match[2] || "0" };
- },
-
- sub: function() {
- function jQuerySub( selector, context ) {
- return new jQuerySub.fn.init( selector, context );
- }
- jQuery.extend( true, jQuerySub, this );
- jQuerySub.superclass = this;
- jQuerySub.fn = jQuerySub.prototype = this();
- jQuerySub.fn.constructor = jQuerySub;
- jQuerySub.sub = this.sub;
- jQuerySub.fn.init = function init( selector, context ) {
- if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
- context = jQuerySub( context );
- }
-
- return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
- };
- jQuerySub.fn.init.prototype = jQuerySub.fn;
- var rootjQuerySub = jQuerySub(document);
- return jQuerySub;
- },
-
- browser: {}
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-browserMatch = jQuery.uaMatch( userAgent );
-if ( browserMatch.browser ) {
- jQuery.browser[ browserMatch.browser ] = true;
- jQuery.browser.version = browserMatch.version;
-}
-
-// Deprecated, use jQuery.browser.webkit instead
-if ( jQuery.browser.webkit ) {
- jQuery.browser.safari = true;
-}
-
-// IE doesn't match non-breaking spaces with \s
-if ( rnotwhite.test( "\xA0" ) ) {
- trimLeft = /^[\s\xA0]+/;
- trimRight = /[\s\xA0]+$/;
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-if ( document.addEventListener ) {
- DOMContentLoaded = function() {
- document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
- jQuery.ready();
- };
-
-} else if ( document.attachEvent ) {
- DOMContentLoaded = function() {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( document.readyState === "complete" ) {
- document.detachEvent( "onreadystatechange", DOMContentLoaded );
- jQuery.ready();
- }
- };
-}
-
-// The DOM ready check for Internet Explorer
-function doScrollCheck() {
- if ( jQuery.isReady ) {
- return;
- }
-
- try {
- // If IE is used, use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- document.documentElement.doScroll("left");
- } catch(e) {
- setTimeout( doScrollCheck, 1 );
- return;
- }
-
- // and execute any waiting functions
- jQuery.ready();
-}
-
-return jQuery;
-
-})();
-
-
-var // Promise methods
- promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
- // Static reference to slice
- sliceDeferred = [].slice;
-
-jQuery.extend({
- // Create a simple deferred (one callbacks list)
- _Deferred: function() {
- var // callbacks list
- callbacks = [],
- // stored [ context , args ]
- fired,
- // to avoid firing when already doing so
- firing,
- // flag to know if the deferred has been cancelled
- cancelled,
- // the deferred itself
- deferred = {
-
- // done( f1, f2, ...)
- done: function() {
- if ( !cancelled ) {
- var args = arguments,
- i,
- length,
- elem,
- type,
- _fired;
- if ( fired ) {
- _fired = fired;
- fired = 0;
- }
- for ( i = 0, length = args.length; i < length; i++ ) {
- elem = args[ i ];
- type = jQuery.type( elem );
- if ( type === "array" ) {
- deferred.done.apply( deferred, elem );
- } else if ( type === "function" ) {
- callbacks.push( elem );
- }
- }
- if ( _fired ) {
- deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
- }
- }
- return this;
- },
-
- // resolve with given context and args
- resolveWith: function( context, args ) {
- if ( !cancelled && !fired && !firing ) {
- // make sure args are available (#8421)
- args = args || [];
- firing = 1;
- try {
- while( callbacks[ 0 ] ) {
- callbacks.shift().apply( context, args );
- }
- }
- finally {
- fired = [ context, args ];
- firing = 0;
- }
- }
- return this;
- },
-
- // resolve with this as context and given arguments
- resolve: function() {
- deferred.resolveWith( this, arguments );
- return this;
- },
-
- // Has this deferred been resolved?
- isResolved: function() {
- return !!( firing || fired );
- },
-
- // Cancel
- cancel: function() {
- cancelled = 1;
- callbacks = [];
- return this;
- }
- };
-
- return deferred;
- },
-
- // Full fledged deferred (two callbacks list)
- Deferred: function( func ) {
- var deferred = jQuery._Deferred(),
- failDeferred = jQuery._Deferred(),
- promise;
- // Add errorDeferred methods, then and promise
- jQuery.extend( deferred, {
- then: function( doneCallbacks, failCallbacks ) {
- deferred.done( doneCallbacks ).fail( failCallbacks );
- return this;
- },
- always: function() {
- return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
- },
- fail: failDeferred.done,
- rejectWith: failDeferred.resolveWith,
- reject: failDeferred.resolve,
- isRejected: failDeferred.isResolved,
- pipe: function( fnDone, fnFail ) {
- return jQuery.Deferred(function( newDefer ) {
- jQuery.each( {
- done: [ fnDone, "resolve" ],
- fail: [ fnFail, "reject" ]
- }, function( handler, data ) {
- var fn = data[ 0 ],
- action = data[ 1 ],
- returned;
- if ( jQuery.isFunction( fn ) ) {
- deferred[ handler ](function() {
- returned = fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise().then( newDefer.resolve, newDefer.reject );
- } else {
- newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
- }
- });
- } else {
- deferred[ handler ]( newDefer[ action ] );
- }
- });
- }).promise();
- },
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- if ( obj == null ) {
- if ( promise ) {
- return promise;
- }
- promise = obj = {};
- }
- var i = promiseMethods.length;
- while( i-- ) {
- obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
- }
- return obj;
- }
- });
- // Make sure only one callback list will be used
- deferred.done( failDeferred.cancel ).fail( deferred.cancel );
- // Unexpose cancel
- delete deferred.cancel;
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
- return deferred;
- },
-
- // Deferred helper
- when: function( firstParam ) {
- var args = arguments,
- i = 0,
- length = args.length,
- count = length,
- deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
- firstParam :
- jQuery.Deferred();
- function resolveFunc( i ) {
- return function( value ) {
- args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
- if ( !( --count ) ) {
- // Strange bug in FF4:
- // Values changed onto the arguments object sometimes end up as undefined values
- // outside the $.when method. Cloning the object into a fresh array solves the issue
- deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
- }
- };
- }
- if ( length > 1 ) {
- for( ; i < length; i++ ) {
- if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
- args[ i ].promise().then( resolveFunc(i), deferred.reject );
- } else {
- --count;
- }
- }
- if ( !count ) {
- deferred.resolveWith( deferred, args );
- }
- } else if ( deferred !== firstParam ) {
- deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
- }
- return deferred.promise();
- }
-});
-
-
-
-jQuery.support = (function() {
-
- var div = document.createElement( "div" ),
- documentElement = document.documentElement,
- all,
- a,
- select,
- opt,
- input,
- marginDiv,
- support,
- fragment,
- body,
- testElementParent,
- testElement,
- testElementStyle,
- tds,
- events,
- eventName,
- i,
- isSupported;
-
- // Preliminary tests
- div.setAttribute("className", "t");
- div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-
-
- all = div.getElementsByTagName( "*" );
- a = div.getElementsByTagName( "a" )[ 0 ];
-
- // Can't get basic test support
- if ( !all || !all.length || !a ) {
- return {};
- }
-
- // First batch of supports tests
- select = document.createElement( "select" );
- opt = select.appendChild( document.createElement("option") );
- input = div.getElementsByTagName( "input" )[ 0 ];
-
- support = {
- // IE strips leading whitespace when .innerHTML is used
- leadingWhitespace: ( div.firstChild.nodeType === 3 ),
-
- // Make sure that tbody elements aren't automatically inserted
- // IE will insert them into empty tables
- tbody: !div.getElementsByTagName( "tbody" ).length,
-
- // Make sure that link elements get serialized correctly by innerHTML
- // This requires a wrapper element in IE
- htmlSerialize: !!div.getElementsByTagName( "link" ).length,
-
- // Get the style information from getAttribute
- // (IE uses .cssText instead)
- style: /top/.test( a.getAttribute("style") ),
-
- // Make sure that URLs aren't manipulated
- // (IE normalizes it by default)
- hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
-
- // Make sure that element opacity exists
- // (IE uses filter instead)
- // Use a regex to work around a WebKit issue. See #5145
- opacity: /^0.55$/.test( a.style.opacity ),
-
- // Verify style float existence
- // (IE uses styleFloat instead of cssFloat)
- cssFloat: !!a.style.cssFloat,
-
- // Make sure that if no value is specified for a checkbox
- // that it defaults to "on".
- // (WebKit defaults to "" instead)
- checkOn: ( input.value === "on" ),
-
- // Make sure that a selected-by-default option has a working selected property.
- // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
- optSelected: opt.selected,
-
- // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
- getSetAttribute: div.className !== "t",
-
- // Will be defined later
- submitBubbles: true,
- changeBubbles: true,
- focusinBubbles: false,
- deleteExpando: true,
- noCloneEvent: true,
- inlineBlockNeedsLayout: false,
- shrinkWrapBlocks: false,
- reliableMarginRight: true
- };
-
- // Make sure checked status is properly cloned
- input.checked = true;
- support.noCloneChecked = input.cloneNode( true ).checked;
-
- // Make sure that the options inside disabled selects aren't marked as disabled
- // (WebKit marks them as disabled)
- select.disabled = true;
- support.optDisabled = !opt.disabled;
-
- // Test to see if it's possible to delete an expando from an element
- // Fails in Internet Explorer
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
-
- if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
- div.attachEvent( "onclick", function() {
- // Cloning a node shouldn't copy over any
- // bound event handlers (IE does this)
- support.noCloneEvent = false;
- });
- div.cloneNode( true ).fireEvent( "onclick" );
- }
-
- // Check if a radio maintains it's value
- // after being appended to the DOM
- input = document.createElement("input");
- input.value = "t";
- input.setAttribute("type", "radio");
- support.radioValue = input.value === "t";
-
- input.setAttribute("checked", "checked");
- div.appendChild( input );
- fragment = document.createDocumentFragment();
- fragment.appendChild( div.firstChild );
-
- // WebKit doesn't clone checked state correctly in fragments
- support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- div.innerHTML = "";
-
- // Figure out if the W3C box model works as expected
- div.style.width = div.style.paddingLeft = "1px";
-
- body = document.getElementsByTagName( "body" )[ 0 ];
- // We use our own, invisible, body unless the body is already present
- // in which case we use a div (#9239)
- testElement = document.createElement( body ? "div" : "body" );
- testElementStyle = {
- visibility: "hidden",
- width: 0,
- height: 0,
- border: 0,
- margin: 0,
- background: "none"
- };
- if ( body ) {
- jQuery.extend( testElementStyle, {
- position: "absolute",
- left: "-1000px",
- top: "-1000px"
- });
- }
- for ( i in testElementStyle ) {
- testElement.style[ i ] = testElementStyle[ i ];
- }
- testElement.appendChild( div );
- testElementParent = body || documentElement;
- testElementParent.insertBefore( testElement, testElementParent.firstChild );
-
- // Check if a disconnected checkbox will retain its checked
- // value of true after appended to the DOM (IE6/7)
- support.appendChecked = input.checked;
-
- support.boxModel = div.offsetWidth === 2;
-
- if ( "zoom" in div.style ) {
- // Check if natively block-level elements act like inline-block
- // elements when setting their display to 'inline' and giving
- // them layout
- // (IE < 8 does this)
- div.style.display = "inline";
- div.style.zoom = 1;
- support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
-
- // Check if elements with layout shrink-wrap their children
- // (IE 6 does this)
- div.style.display = "";
- div.innerHTML = "<div style='width:4px;'></div>";
- support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
- }
-
- div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
- tds = div.getElementsByTagName( "td" );
-
- // Check if table cells still have offsetWidth/Height when they are set
- // to display:none and there are still other visible table cells in a
- // table row; if so, offsetWidth/Height are not reliable for use when
- // determining if an element has been hidden directly using
- // display:none (it is still safe to use offsets if a parent element is
- // hidden; don safety goggles and see bug #4512 for more information).
- // (only IE 8 fails this test)
- isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
- tds[ 0 ].style.display = "";
- tds[ 1 ].style.display = "none";
-
- // Check if empty table cells still have offsetWidth/Height
- // (IE < 8 fail this test)
- support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
- div.innerHTML = "";
-
- // Check if div with explicit width and no margin-right incorrectly
- // gets computed margin-right based on width of container. For more
- // info see bug #3333
- // Fails in WebKit before Feb 2011 nightlies
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- if ( document.defaultView && document.defaultView.getComputedStyle ) {
- marginDiv = document.createElement( "div" );
- marginDiv.style.width = "0";
- marginDiv.style.marginRight = "0";
- div.appendChild( marginDiv );
- support.reliableMarginRight =
- ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
- }
-
- // Remove the body element we added
- testElement.innerHTML = "";
- testElementParent.removeChild( testElement );
-
- // Technique from Juriy Zaytsev
- // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
- // We only care about the case where non-standard event systems
- // are used, namely in IE. Short-circuiting here helps us to
- // avoid an eval call (in setAttribute) which can cause CSP
- // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
- if ( div.attachEvent ) {
- for( i in {
- submit: 1,
- change: 1,
- focusin: 1
- } ) {
- eventName = "on" + i;
- isSupported = ( eventName in div );
- if ( !isSupported ) {
- div.setAttribute( eventName, "return;" );
- isSupported = ( typeof div[ eventName ] === "function" );
- }
- support[ i + "Bubbles" ] = isSupported;
- }
- }
-
- // Null connected elements to avoid leaks in IE
- testElement = fragment = select = opt = body = marginDiv = div = input = null;
-
- return support;
-})();
-
-// Keep track of boxModel
-jQuery.boxModel = jQuery.support.boxModel;
-
-
-
-
-var rbrace = /^(?:\{.*\}|\[.*\])$/,
- rmultiDash = /([A-Z])/g;
-
-jQuery.extend({
- cache: {},
-
- // Please use with caution
- uuid: 0,
-
- // Unique for each copy of jQuery on the page
- // Non-digits removed to match rinlinejQuery
- expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
-
- // The following elements throw uncatchable exceptions if you
- // attempt to add expando properties to them.
- noData: {
- "embed": true,
- // Ban all objects except for Flash (which handle expandos)
- "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
- "applet": true
- },
-
- hasData: function( elem ) {
- elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-
- return !!elem && !isEmptyDataObject( elem );
- },
-
- data: function( elem, name, data, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var thisCache, ret,
- internalKey = jQuery.expando,
- getByName = typeof name === "string",
-
- // We have to handle DOM nodes and JS objects differently because IE6-7
- // can't GC object references properly across the DOM-JS boundary
- isNode = elem.nodeType,
-
- // Only DOM nodes need the global jQuery cache; JS object data is
- // attached directly to the object so GC can occur automatically
- cache = isNode ? jQuery.cache : elem,
-
- // Only defining an ID for JS objects if its cache already exists allows
- // the code to shortcut on the same path as a DOM node with no cache
- id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
-
- // Avoid doing any more work than we need to when trying to get data on an
- // object that has no data at all
- if ( (!id || (pvt && id && (cache[ id ] && !cache[ id ][ internalKey ]))) && getByName && data === undefined ) {
- return;
- }
-
- if ( !id ) {
- // Only DOM nodes need a new unique ID for each element since their data
- // ends up in the global cache
- if ( isNode ) {
- elem[ jQuery.expando ] = id = ++jQuery.uuid;
- } else {
- id = jQuery.expando;
- }
- }
-
- if ( !cache[ id ] ) {
- cache[ id ] = {};
-
- // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
- // metadata on plain JS objects when the object is serialized using
- // JSON.stringify
- if ( !isNode ) {
- cache[ id ].toJSON = jQuery.noop;
- }
- }
-
- // An object can be passed to jQuery.data instead of a key/value pair; this gets
- // shallow copied over onto the existing cache
- if ( typeof name === "object" || typeof name === "function" ) {
- if ( pvt ) {
- cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
- } else {
- cache[ id ] = jQuery.extend(cache[ id ], name);
- }
- }
-
- thisCache = cache[ id ];
-
- // Internal jQuery data is stored in a separate object inside the object's data
- // cache in order to avoid key collisions between internal data and user-defined
- // data
- if ( pvt ) {
- if ( !thisCache[ internalKey ] ) {
- thisCache[ internalKey ] = {};
- }
-
- thisCache = thisCache[ internalKey ];
- }
-
- if ( data !== undefined ) {
- thisCache[ jQuery.camelCase( name ) ] = data;
- }
-
- // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
- // not attempt to inspect the internal events object using jQuery.data, as this
- // internal data object is undocumented and subject to change.
- if ( name === "events" && !thisCache[name] ) {
- return thisCache[ internalKey ] && thisCache[ internalKey ].events;
- }
-
- // Check for both converted-to-camel and non-converted data property names
- // If a data property was specified
- if ( getByName ) {
-
- // First Try to find as-is property data
- ret = thisCache[ name ];
-
- // Test for null|undefined property data
- if ( ret == null ) {
-
- // Try to find the camelCased property
- ret = thisCache[ jQuery.camelCase( name ) ];
- }
- } else {
- ret = thisCache;
- }
-
- return ret;
- },
-
- removeData: function( elem, name, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var thisCache,
-
- // Reference to internal data cache key
- internalKey = jQuery.expando,
-
- isNode = elem.nodeType,
-
- // See jQuery.data for more information
- cache = isNode ? jQuery.cache : elem,
-
- // See jQuery.data for more information
- id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
- // If there is already no cache entry for this object, there is no
- // purpose in continuing
- if ( !cache[ id ] ) {
- return;
- }
-
- if ( name ) {
-
- thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
-
- if ( thisCache ) {
-
- // Support interoperable removal of hyphenated or camelcased keys
- if ( !thisCache[ name ] ) {
- name = jQuery.camelCase( name );
- }
-
- delete thisCache[ name ];
-
- // If there is no data left in the cache, we want to continue
- // and let the cache object itself get destroyed
- if ( !isEmptyDataObject(thisCache) ) {
- return;
- }
- }
- }
-
- // See jQuery.data for more information
- if ( pvt ) {
- delete cache[ id ][ internalKey ];
-
- // Don't destroy the parent cache unless the internal data object
- // had been the only thing left in it
- if ( !isEmptyDataObject(cache[ id ]) ) {
- return;
- }
- }
-
- var internalCache = cache[ id ][ internalKey ];
-
- // Browsers that fail expando deletion also refuse to delete expandos on
- // the window, but it will allow it on all other JS objects; other browsers
- // don't care
- // Ensure that `cache` is not a window object #10080
- if ( jQuery.support.deleteExpando || !cache.setInterval ) {
- delete cache[ id ];
- } else {
- cache[ id ] = null;
- }
-
- // We destroyed the entire user cache at once because it's faster than
- // iterating through each key, but we need to continue to persist internal
- // data if it existed
- if ( internalCache ) {
- cache[ id ] = {};
- // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
- // metadata on plain JS objects when the object is serialized using
- // JSON.stringify
- if ( !isNode ) {
- cache[ id ].toJSON = jQuery.noop;
- }
-
- cache[ id ][ internalKey ] = internalCache;
-
- // Otherwise, we need to eliminate the expando on the node to avoid
- // false lookups in the cache for entries that no longer exist
- } else if ( isNode ) {
- // IE does not allow us to delete expando properties from nodes,
- // nor does it have a removeAttribute function on Document nodes;
- // we must handle all of these cases
- if ( jQuery.support.deleteExpando ) {
- delete elem[ jQuery.expando ];
- } else if ( elem.removeAttribute ) {
- elem.removeAttribute( jQuery.expando );
- } else {
- elem[ jQuery.expando ] = null;
- }
- }
- },
-
- // For internal use only.
- _data: function( elem, name, data ) {
- return jQuery.data( elem, name, data, true );
- },
-
- // A method for determining if a DOM node can handle the data expando
- acceptData: function( elem ) {
- if ( elem.nodeName ) {
- var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
-
- if ( match ) {
- return !(match === true || elem.getAttribute("classid") !== match);
- }
- }
-
- return true;
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ) {
- var data = null;
-
- if ( typeof key === "undefined" ) {
- if ( this.length ) {
- data = jQuery.data( this[0] );
-
- if ( this[0].nodeType === 1 ) {
- var attr = this[0].attributes, name;
- for ( var i = 0, l = attr.length; i < l; i++ ) {
- name = attr[i].name;
-
- if ( name.indexOf( "data-" ) === 0 ) {
- name = jQuery.camelCase( name.substring(5) );
-
- dataAttr( this[0], name, data[ name ] );
- }
- }
- }
- }
-
- return data;
-
- } else if ( typeof key === "object" ) {
- return this.each(function() {
- jQuery.data( this, key );
- });
- }
-
- var parts = key.split(".");
- parts[1] = parts[1] ? "." + parts[1] : "";
-
- if ( value === undefined ) {
- data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
-
- // Try to fetch any internally stored data first
- if ( data === undefined && this.length ) {
- data = jQuery.data( this[0], key );
- data = dataAttr( this[0], key, data );
- }
-
- return data === undefined && parts[1] ?
- this.data( parts[0] ) :
- data;
-
- } else {
- return this.each(function() {
- var $this = jQuery( this ),
- args = [ parts[0], value ];
-
- $this.triggerHandler( "setData" + parts[1] + "!", args );
- jQuery.data( this, key, value );
- $this.triggerHandler( "changeData" + parts[1] + "!", args );
- });
- }
- },
-
- removeData: function( key ) {
- return this.each(function() {
- jQuery.removeData( this, key );
- });
- }
-});
-
-function dataAttr( elem, key, data ) {
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
-
- var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = data === "true" ? true :
- data === "false" ? false :
- data === "null" ? null :
- !jQuery.isNaN( data ) ? parseFloat( data ) :
- rbrace.test( data ) ? jQuery.parseJSON( data ) :
- data;
- } catch( e ) {}
-
- // Make sure we set the data so it isn't changed later
- jQuery.data( elem, key, data );
-
- } else {
- data = undefined;
- }
- }
-
- return data;
-}
-
-// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
-// property to be considered empty objects; this property always exists in
-// order to make sure JSON.stringify does not expose internal metadata
-function isEmptyDataObject( obj ) {
- for ( var name in obj ) {
- if ( name !== "toJSON" ) {
- return false;
- }
- }
-
- return true;
-}
-
-
-
-
-function handleQueueMarkDefer( elem, type, src ) {
- var deferDataKey = type + "defer",
- queueDataKey = type + "queue",
- markDataKey = type + "mark",
- defer = jQuery.data( elem, deferDataKey, undefined, true );
- if ( defer &&
- ( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
- ( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
- // Give room for hard-coded callbacks to fire first
- // and eventually mark/queue something else on the element
- setTimeout( function() {
- if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
- !jQuery.data( elem, markDataKey, undefined, true ) ) {
- jQuery.removeData( elem, deferDataKey, true );
- defer.resolve();
- }
- }, 0 );
- }
-}
-
-jQuery.extend({
-
- _mark: function( elem, type ) {
- if ( elem ) {
- type = (type || "fx") + "mark";
- jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
- }
- },
-
- _unmark: function( force, elem, type ) {
- if ( force !== true ) {
- type = elem;
- elem = force;
- force = false;
- }
- if ( elem ) {
- type = type || "fx";
- var key = type + "mark",
- count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
- if ( count ) {
- jQuery.data( elem, key, count, true );
- } else {
- jQuery.removeData( elem, key, true );
- handleQueueMarkDefer( elem, type, "mark" );
- }
- }
- },
-
- queue: function( elem, type, data ) {
- if ( elem ) {
- type = (type || "fx") + "queue";
- var q = jQuery.data( elem, type, undefined, true );
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !q || jQuery.isArray(data) ) {
- q = jQuery.data( elem, type, jQuery.makeArray(data), true );
- } else {
- q.push( data );
- }
- }
- return q || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- fn = queue.shift(),
- defer;
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- }
-
- if ( fn ) {
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift("inprogress");
- }
-
- fn.call(elem, function() {
- jQuery.dequeue(elem, type);
- });
- }
-
- if ( !queue.length ) {
- jQuery.removeData( elem, type + "queue", true );
- handleQueueMarkDefer( elem, type, "queue" );
- }
- }
-});
-
-jQuery.fn.extend({
- queue: function( type, data ) {
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- }
-
- if ( data === undefined ) {
- return jQuery.queue( this[0], type );
- }
- return this.each(function() {
- var queue = jQuery.queue( this, type, data );
-
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
- // Based off of the plugin by Clint Helfers, with permission.
- // http://blindsignals.com/index.php/2009/07/jquery-delay/
- delay: function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
- type = type || "fx";
-
- return this.queue( type, function() {
- var elem = this;
- setTimeout(function() {
- jQuery.dequeue( elem, type );
- }, time );
- });
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, object ) {
- if ( typeof type !== "string" ) {
- object = type;
- type = undefined;
- }
- type = type || "fx";
- var defer = jQuery.Deferred(),
- elements = this,
- i = elements.length,
- count = 1,
- deferDataKey = type + "defer",
- queueDataKey = type + "queue",
- markDataKey = type + "mark",
- tmp;
- function resolve() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- }
- while( i-- ) {
- if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
- ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
- jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
- jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
- count++;
- tmp.done( resolve );
- }
- }
- resolve();
- return defer.promise();
- }
-});
-
-
-
-
-var rclass = /[\n\t\r]/g,
- rspace = /\s+/,
- rreturn = /\r/g,
- rtype = /^(?:button|input)$/i,
- rfocusable = /^(?:button|input|object|select|textarea)$/i,
- rclickable = /^a(?:rea)?$/i,
- rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
- nodeHook, boolHook;
-
-jQuery.fn.extend({
- attr: function( name, value ) {
- return jQuery.access( this, name, value, true, jQuery.attr );
- },
-
- removeAttr: function( name ) {
- return this.each(function() {
- jQuery.removeAttr( this, name );
- });
- },
-
- prop: function( name, value ) {
- return jQuery.access( this, name, value, true, jQuery.prop );
- },
-
- removeProp: function( name ) {
- name = jQuery.propFix[ name ] || name;
- return this.each(function() {
- // try/catch handles cases where IE balks (such as removing a property on window)
- try {
- this[ name ] = undefined;
- delete this[ name ];
- } catch( e ) {}
- });
- },
-
- addClass: function( value ) {
- var classNames, i, l, elem,
- setClass, c, cl;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).addClass( value.call(this, j, this.className) );
- });
- }
-
- if ( value && typeof value === "string" ) {
- classNames = value.split( rspace );
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- elem = this[ i ];
-
- if ( elem.nodeType === 1 ) {
- if ( !elem.className && classNames.length === 1 ) {
- elem.className = value;
-
- } else {
- setClass = " " + elem.className + " ";
-
- for ( c = 0, cl = classNames.length; c < cl; c++ ) {
- if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
- setClass += classNames[ c ] + " ";
- }
- }
- elem.className = jQuery.trim( setClass );
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var classNames, i, l, elem, className, c, cl;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).removeClass( value.call(this, j, this.className) );
- });
- }
-
- if ( (value && typeof value === "string") || value === undefined ) {
- classNames = (value || "").split( rspace );
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- elem = this[ i ];
-
- if ( elem.nodeType === 1 && elem.className ) {
- if ( value ) {
- className = (" " + elem.className + " ").replace( rclass, " " );
- for ( c = 0, cl = classNames.length; c < cl; c++ ) {
- className = className.replace(" " + classNames[ c ] + " ", " ");
- }
- elem.className = jQuery.trim( className );
-
- } else {
- elem.className = "";
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value,
- isBool = typeof stateVal === "boolean";
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( i ) {
- jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
- });
- }
-
- return this.each(function() {
- if ( type === "string" ) {
- // toggle individual class names
- var className,
- i = 0,
- self = jQuery( this ),
- state = stateVal,
- classNames = value.split( rspace );
-
- while ( (className = classNames[ i++ ]) ) {
- // check each className given, space seperated list
- state = isBool ? state : !self.hasClass( className );
- self[ state ? "addClass" : "removeClass" ]( className );
- }
-
- } else if ( type === "undefined" || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- jQuery._data( this, "__className__", this.className );
- }
-
- // toggle whole className
- this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
- }
- });
- },
-
- hasClass: function( selector ) {
- var className = " " + selector + " ";
- for ( var i = 0, l = this.length; i < l; i++ ) {
- if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
- return true;
- }
- }
-
- return false;
- },
-
- val: function( value ) {
- var hooks, ret,
- elem = this[0];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
-
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
- return ret;
- }
-
- ret = elem.value;
-
- return typeof ret === "string" ?
- // handle most common string cases
- ret.replace(rreturn, "") :
- // handle cases where value is null/undef or number
- ret == null ? "" : ret;
- }
-
- return undefined;
- }
-
- var isFunction = jQuery.isFunction( value );
-
- return this.each(function( i ) {
- var self = jQuery(this), val;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call( this, i, self.val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
- } else if ( typeof val === "number" ) {
- val += "";
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map(val, function ( value ) {
- return value == null ? "" : value + "";
- });
- }
-
- hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- });
- }
-});
-
-jQuery.extend({
- valHooks: {
- option: {
- get: function( elem ) {
- // attributes.value is undefined in Blackberry 4.7 but
- // uses .value. See #6932
- var val = elem.attributes.value;
- return !val || val.specified ? elem.value : elem.text;
- }
- },
- select: {
- get: function( elem ) {
- var value,
- index = elem.selectedIndex,
- values = [],
- options = elem.options,
- one = elem.type === "select-one";
-
- // Nothing was selected
- if ( index < 0 ) {
- return null;
- }
-
- // Loop through all the selected options
- for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
- var option = options[ i ];
-
- // Don't return options that are disabled or in a disabled optgroup
- if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
- (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
- if ( one && !values.length && options.length ) {
- return jQuery( options[ index ] ).val();
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var values = jQuery.makeArray( value );
-
- jQuery(elem).find("option").each(function() {
- this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
- });
-
- if ( !values.length ) {
- elem.selectedIndex = -1;
- }
- return values;
- }
- }
- },
-
- attrFn: {
- val: true,
- css: true,
- html: true,
- text: true,
- data: true,
- width: true,
- height: true,
- offset: true
- },
-
- attrFix: {
- // Always normalize to ensure hook usage
- tabindex: "tabIndex"
- },
-
- attr: function( elem, name, value, pass ) {
- var nType = elem.nodeType;
-
- // don't get/set attributes on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return undefined;
- }
-
- if ( pass && name in jQuery.attrFn ) {
- return jQuery( elem )[ name ]( value );
- }
-
- // Fallback to prop when attributes are not supported
- if ( !("getAttribute" in elem) ) {
- return jQuery.prop( elem, name, value );
- }
-
- var ret, hooks,
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- // Normalize the name if needed
- if ( notxml ) {
- name = jQuery.attrFix[ name ] || name;
-
- hooks = jQuery.attrHooks[ name ];
-
- if ( !hooks ) {
- // Use boolHook for boolean attributes
- if ( rboolean.test( name ) ) {
- hooks = boolHook;
-
- // Use nodeHook if available( IE6/7 )
- } else if ( nodeHook ) {
- hooks = nodeHook;
- }
- }
- }
-
- if ( value !== undefined ) {
-
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
- return undefined;
-
- } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- elem.setAttribute( name, "" + value );
- return value;
- }
-
- } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
-
- ret = elem.getAttribute( name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret === null ?
- undefined :
- ret;
- }
- },
-
- removeAttr: function( elem, name ) {
- var propName;
- if ( elem.nodeType === 1 ) {
- name = jQuery.attrFix[ name ] || name;
-
- jQuery.attr( elem, name, "" );
- elem.removeAttribute( name );
-
- // Set corresponding property to false for boolean attributes
- if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
- elem[ propName ] = false;
- }
- }
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- // We can't allow the type property to be changed (since it causes problems in IE)
- if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
- jQuery.error( "type property can't be changed" );
- } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
- // Setting the type on a radio button after the value resets the value in IE6-9
- // Reset value to it's default in case type is set after value
- // This is for element creation
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- },
- // Use the value property for back compat
- // Use the nodeHook for button elements in IE6/7 (#1954)
- value: {
- get: function( elem, name ) {
- if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
- return nodeHook.get( elem, name );
- }
- return name in elem ?
- elem.value :
- null;
- },
- set: function( elem, value, name ) {
- if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
- return nodeHook.set( elem, value, name );
- }
- // Does not return so that setAttribute is also used
- elem.value = value;
- }
- }
- },
-
- propFix: {
- tabindex: "tabIndex",
- readonly: "readOnly",
- "for": "htmlFor",
- "class": "className",
- maxlength: "maxLength",
- cellspacing: "cellSpacing",
- cellpadding: "cellPadding",
- rowspan: "rowSpan",
- colspan: "colSpan",
- usemap: "useMap",
- frameborder: "frameBorder",
- contenteditable: "contentEditable"
- },
-
- prop: function( elem, name, value ) {
- var nType = elem.nodeType;
-
- // don't get/set properties on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return undefined;
- }
-
- var ret, hooks,
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- if ( notxml ) {
- // Fix name and attach hooks
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
-
- if ( value !== undefined ) {
- if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- return (elem[ name ] = value);
- }
-
- } else {
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
- return elem[ name ];
- }
- }
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- var attributeNode = elem.getAttributeNode("tabindex");
-
- return attributeNode && attributeNode.specified ?
- parseInt( attributeNode.value, 10 ) :
- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
- 0 :
- undefined;
- }
- }
- }
-});
-
-// Add the tabindex propHook to attrHooks for back-compat
-jQuery.attrHooks.tabIndex = jQuery.propHooks.tabIndex;
-
-// Hook for boolean attributes
-boolHook = {
- get: function( elem, name ) {
- // Align boolean attributes with corresponding properties
- // Fall back to attribute presence where some booleans are not supported
- var attrNode;
- return jQuery.prop( elem, name ) === true || ( attrNode = elem.getAttributeNode( name ) ) && attrNode.nodeValue !== false ?
- name.toLowerCase() :
- undefined;
- },
- set: function( elem, value, name ) {
- var propName;
- if ( value === false ) {
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else {
- // value is true since we know at this point it's type boolean and not false
- // Set boolean attributes to the same name and set the DOM property
- propName = jQuery.propFix[ name ] || name;
- if ( propName in elem ) {
- // Only set the IDL specifically if it already exists on the element
- elem[ propName ] = true;
- }
-
- elem.setAttribute( name, name.toLowerCase() );
- }
- return name;
- }
-};
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !jQuery.support.getSetAttribute ) {
-
- // Use this for any attribute in IE6/7
- // This fixes almost every IE6/7 issue
- nodeHook = jQuery.valHooks.button = {
- get: function( elem, name ) {
- var ret;
- ret = elem.getAttributeNode( name );
- // Return undefined if nodeValue is empty string
- return ret && ret.nodeValue !== "" ?
- ret.nodeValue :
- undefined;
- },
- set: function( elem, value, name ) {
- // Set the existing or create a new attribute node
- var ret = elem.getAttributeNode( name );
- if ( !ret ) {
- ret = document.createAttribute( name );
- elem.setAttributeNode( ret );
- }
- return (ret.nodeValue = value + "");
- }
- };
-
- // Set width and height to auto instead of 0 on empty string( Bug #8150 )
- // This is for removals
- jQuery.each([ "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
- set: function( elem, value ) {
- if ( value === "" ) {
- elem.setAttribute( name, "auto" );
- return value;
- }
- }
- });
- });
-}
-
-
-// Some attributes require a special call on IE
-if ( !jQuery.support.hrefNormalized ) {
- jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
- get: function( elem ) {
- var ret = elem.getAttribute( name, 2 );
- return ret === null ? undefined : ret;
- }
- });
- });
-}
-
-if ( !jQuery.support.style ) {
- jQuery.attrHooks.style = {
- get: function( elem ) {
- // Return undefined in the case of empty string
- // Normalize to lowercase since IE uppercases css property names
- return elem.style.cssText.toLowerCase() || undefined;
- },
- set: function( elem, value ) {
- return (elem.style.cssText = "" + value);
- }
- };
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
- jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
- get: function( elem ) {
- var parent = elem.parentNode;
-
- if ( parent ) {
- parent.selectedIndex;
-
- // Make sure that it also works with optgroups, see #5701
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- return null;
- }
- });
-}
-
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
- jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- get: function( elem ) {
- // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
- return elem.getAttribute("value") === null ? "on" : elem.value;
- }
- };
- });
-}
-jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
- }
- }
- });
-});
-
-
-
-
-var rnamespaces = /\.(.*)$/,
- rformElems = /^(?:textarea|input|select)$/i,
- rperiod = /\./g,
- rspaces = / /g,
- rescape = /[^\w\s.|`]/g,
- fcleanup = function( nm ) {
- return nm.replace(rescape, "\\$&");
- };
-
-/*
- * A number of helper functions used for managing events.
- * Many of the ideas behind this code originated from
- * Dean Edwards' addEvent library.
- */
-jQuery.event = {
-
- // Bind an event to an element
- // Original by Dean Edwards
- add: function( elem, types, handler, data ) {
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- if ( handler === false ) {
- handler = returnFalse;
- } else if ( !handler ) {
- // Fixes bug #7229. Fix recommended by jdalton
- return;
- }
-
- var handleObjIn, handleObj;
-
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- }
-
- // Make sure that the function being executed has a unique ID
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure
- var elemData = jQuery._data( elem );
-
- // If no elemData is found then we must be trying to bind to one of the
- // banned noData elements
- if ( !elemData ) {
- return;
- }
-
- var events = elemData.events,
- eventHandle = elemData.handle;
-
- if ( !events ) {
- elemData.events = events = {};
- }
-
- if ( !eventHandle ) {
- elemData.handle = eventHandle = function( e ) {
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
- jQuery.event.handle.apply( eventHandle.elem, arguments ) :
- undefined;
- };
- }
-
- // Add elem as a property of the handle function
- // This is to prevent a memory leak with non-native events in IE.
- eventHandle.elem = elem;
-
- // Handle multiple events separated by a space
- // jQuery(...).bind("mouseover mouseout", fn);
- types = types.split(" ");
-
- var type, i = 0, namespaces;
-
- while ( (type = types[ i++ ]) ) {
- handleObj = handleObjIn ?
- jQuery.extend({}, handleObjIn) :
- { handler: handler, data: data };
-
- // Namespaced event handlers
- if ( type.indexOf(".") > -1 ) {
- namespaces = type.split(".");
- type = namespaces.shift();
- handleObj.namespace = namespaces.slice(0).sort().join(".");
-
- } else {
- namespaces = [];
- handleObj.namespace = "";
- }
-
- handleObj.type = type;
- if ( !handleObj.guid ) {
- handleObj.guid = handler.guid;
- }
-
- // Get the current list of functions bound to this event
- var handlers = events[ type ],
- special = jQuery.event.special[ type ] || {};
-
- // Init the event handler queue
- if ( !handlers ) {
- handlers = events[ type ] = [];
-
- // Check for a special event handler
- // Only use addEventListener/attachEvent if the special
- // events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
- // Bind the global event handler to the element
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
-
- } else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add the function to the element's handler list
- handlers.push( handleObj );
-
- // Keep track of which events have been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- // Nullify elem to prevent memory leaks in IE
- elem = null;
- },
-
- global: {},
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, pos ) {
- // don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- if ( handler === false ) {
- handler = returnFalse;
- }
-
- var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
- elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
- events = elemData && elemData.events;
-
- if ( !elemData || !events ) {
- return;
- }
-
- // types is actually an event object here
- if ( types && types.type ) {
- handler = types.handler;
- types = types.type;
- }
-
- // Unbind all events for the element
- if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
- types = types || "";
-
- for ( type in events ) {
- jQuery.event.remove( elem, type + types );
- }
-
- return;
- }
-
- // Handle multiple events separated by a space
- // jQuery(...).unbind("mouseover mouseout", fn);
- types = types.split(" ");
-
- while ( (type = types[ i++ ]) ) {
- origType = type;
- handleObj = null;
- all = type.indexOf(".") < 0;
- namespaces = [];
-
- if ( !all ) {
- // Namespaced event handlers
- namespaces = type.split(".");
- type = namespaces.shift();
-
- namespace = new RegExp("(^|\\.)" +
- jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
- }
-
- eventType = events[ type ];
-
- if ( !eventType ) {
- continue;
- }
-
- if ( !handler ) {
- for ( j = 0; j < eventType.length; j++ ) {
- handleObj = eventType[ j ];
-
- if ( all || namespace.test( handleObj.namespace ) ) {
- jQuery.event.remove( elem, origType, handleObj.handler, j );
- eventType.splice( j--, 1 );
- }
- }
-
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
-
- for ( j = pos || 0; j < eventType.length; j++ ) {
- handleObj = eventType[ j ];
-
- if ( handler.guid === handleObj.guid ) {
- // remove the given handler for the given type
- if ( all || namespace.test( handleObj.namespace ) ) {
- if ( pos == null ) {
- eventType.splice( j--, 1 );
- }
-
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
-
- if ( pos != null ) {
- break;
- }
- }
- }
-
- // remove generic event handler if no more handlers exist
- if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- ret = null;
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- var handle = elemData.handle;
- if ( handle ) {
- handle.elem = null;
- }
-
- delete elemData.events;
- delete elemData.handle;
-
- if ( jQuery.isEmptyObject( elemData ) ) {
- jQuery.removeData( elem, undefined, true );
- }
- }
- },
-
- // Events that are safe to short-circuit if no handlers are attached.
- // Native DOM events should not be added, they may have inline handlers.
- customEvent: {
- "getData": true,
- "setData": true,
- "changeData": true
- },
-
- trigger: function( event, data, elem, onlyHandlers ) {
- // Event object or event type
- var type = event.type || event,
- namespaces = [],
- exclusive;
-
- if ( type.indexOf("!") >= 0 ) {
- // Exclusive events trigger only for the exact event (no namespaces)
- type = type.slice(0, -1);
- exclusive = true;
- }
-
- if ( type.indexOf(".") >= 0 ) {
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split(".");
- type = namespaces.shift();
- namespaces.sort();
- }
-
- if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
- // No jQuery handlers for this event type, and it can't have inline handlers
- return;
- }
-
- // Caller can pass in an Event, Object, or just an event type string
- event = typeof event === "object" ?
- // jQuery.Event object
- event[ jQuery.expando ] ? event :
- // Object literal
- new jQuery.Event( type, event ) :
- // Just the event type (string)
- new jQuery.Event( type );
-
- event.type = type;
- event.exclusive = exclusive;
- event.namespace = namespaces.join(".");
- event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
-
- // triggerHandler() and global events don't bubble or run the default action
- if ( onlyHandlers || !elem ) {
- event.preventDefault();
- event.stopPropagation();
- }
-
- // Handle a global trigger
- if ( !elem ) {
- // TODO: Stop taunting the data cache; remove global events and always attach to document
- jQuery.each( jQuery.cache, function() {
- // internalKey variable is just used to make it easier to find
- // and potentially change this stuff later; currently it just
- // points to jQuery.expando
- var internalKey = jQuery.expando,
- internalCache = this[ internalKey ];
- if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
- jQuery.event.trigger( event, data, internalCache.handle.elem );
- }
- });
- return;
- }
-
- // Don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- event.target = elem;
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data != null ? jQuery.makeArray( data ) : [];
- data.unshift( event );
-
- var cur = elem,
- // IE doesn't like method names with a colon (#3533, #8272)
- ontype = type.indexOf(":") < 0 ? "on" + type : "";
-
- // Fire event on the current element, then bubble up the DOM tree
- do {
- var handle = jQuery._data( cur, "handle" );
-
- event.currentTarget = cur;
- if ( handle ) {
- handle.apply( cur, data );
- }
-
- // Trigger an inline bound script
- if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
- event.result = false;
- event.preventDefault();
- }
-
- // Bubble up to document, then to window
- cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
- } while ( cur && !event.isPropagationStopped() );
-
- // If nobody prevented the default action, do it now
- if ( !event.isDefaultPrevented() ) {
- var old,
- special = jQuery.event.special[ type ] || {};
-
- if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
- !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name name as the event.
- // Can't use an .isFunction)() check here because IE6/7 fails that test.
- // IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
- try {
- if ( ontype && elem[ type ] ) {
- // Don't re-trigger an onFOO event when we call its FOO() method
- old = elem[ ontype ];
-
- if ( old ) {
- elem[ ontype ] = null;
- }
-
- jQuery.event.triggered = type;
- elem[ type ]();
- }
- } catch ( ieError ) {}
-
- if ( old ) {
- elem[ ontype ] = old;
- }
-
- jQuery.event.triggered = undefined;
- }
- }
-
- return event.result;
- },
-
- handle: function( event ) {
- event = jQuery.event.fix( event || window.event );
- // Snapshot the handlers list since a called handler may add/remove events.
- var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
- run_all = !event.exclusive && !event.namespace,
- args = Array.prototype.slice.call( arguments, 0 );
-
- // Use the fix-ed Event rather than the (read-only) native event
- args[0] = event;
- event.currentTarget = this;
-
- for ( var j = 0, l = handlers.length; j < l; j++ ) {
- var handleObj = handlers[ j ];
-
- // Triggered event must 1) be non-exclusive and have no namespace, or
- // 2) have namespace(s) a subset or equal to those in the bound event.
- if ( run_all || event.namespace_re.test( handleObj.namespace ) ) {
- // Pass in a reference to the handler function itself
- // So that we can later remove it
- event.handler = handleObj.handler;
- event.data = handleObj.data;
- event.handleObj = handleObj;
-
- var ret = handleObj.handler.apply( this, args );
-
- if ( ret !== undefined ) {
- event.result = ret;
- if ( ret === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
-
- if ( event.isImmediatePropagationStopped() ) {
- break;
- }
- }
- }
- return event.result;
- },
-
- props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-
- fix: function( event ) {
- if ( event[ jQuery.expando ] ) {
- return event;
- }
-
- // store a copy of the original event object
- // and "clone" to set read-only properties
- var originalEvent = event;
- event = jQuery.Event( originalEvent );
-
- for ( var i = this.props.length, prop; i; ) {
- prop = this.props[ --i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Fix target property, if necessary
- if ( !event.target ) {
- // Fixes #1925 where srcElement might not be defined either
- event.target = event.srcElement || document;
- }
-
- // check if target is a textnode (safari)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && event.fromElement ) {
- event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
- }
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && event.clientX != null ) {
- var eventDocument = event.target.ownerDocument || document,
- doc = eventDocument.documentElement,
- body = eventDocument.body;
-
- event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
- event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
- }
-
- // Add which for key events
- if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
- event.which = event.charCode != null ? event.charCode : event.keyCode;
- }
-
- // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
- if ( !event.metaKey && event.ctrlKey ) {
- event.metaKey = event.ctrlKey;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if ( !event.which && event.button !== undefined ) {
- event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
- }
-
- return event;
- },
-
- // Deprecated, use jQuery.guid instead
- guid: 1E8,
-
- // Deprecated, use jQuery.proxy instead
- proxy: jQuery.proxy,
-
- special: {
- ready: {
- // Make sure the ready event is setup
- setup: jQuery.bindReady,
- teardown: jQuery.noop
- },
-
- live: {
- add: function( handleObj ) {
- jQuery.event.add( this,
- liveConvert( handleObj.origType, handleObj.selector ),
- jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
- },
-
- remove: function( handleObj ) {
- jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
- }
- },
-
- beforeunload: {
- setup: function( data, namespaces, eventHandle ) {
- // We only want to do this special case on windows
- if ( jQuery.isWindow( this ) ) {
- this.onbeforeunload = eventHandle;
- }
- },
-
- teardown: function( namespaces, eventHandle ) {
- if ( this.onbeforeunload === eventHandle ) {
- this.onbeforeunload = null;
- }
- }
- }
- }
-};
-
-jQuery.removeEvent = document.removeEventListener ?
- function( elem, type, handle ) {
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle, false );
- }
- } :
- function( elem, type, handle ) {
- if ( elem.detachEvent ) {
- elem.detachEvent( "on" + type, handle );
- }
- };
-
-jQuery.Event = function( src, props ) {
- // Allow instantiation without the 'new' keyword
- if ( !this.preventDefault ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
- src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // timeStamp is buggy for some events on Firefox(#3843)
- // So we won't rely on the native value
- this.timeStamp = jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-function returnFalse() {
- return false;
-}
-function returnTrue() {
- return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- preventDefault: function() {
- this.isDefaultPrevented = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
-
- // if preventDefault exists run it on the original event
- if ( e.preventDefault ) {
- e.preventDefault();
-
- // otherwise set the returnValue property of the original event to false (IE)
- } else {
- e.returnValue = false;
- }
- },
- stopPropagation: function() {
- this.isPropagationStopped = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
- // if stopPropagation exists run it on the original event
- if ( e.stopPropagation ) {
- e.stopPropagation();
- }
- // otherwise set the cancelBubble property of the original event to true (IE)
- e.cancelBubble = true;
- },
- stopImmediatePropagation: function() {
- this.isImmediatePropagationStopped = returnTrue;
- this.stopPropagation();
- },
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse
-};
-
-// Checks if an event happened on an element within another element
-// Used in jQuery.event.special.mouseenter and mouseleave handlers
-var withinElement = function( event ) {
-
- // Check if mouse(over|out) are still within the same parent element
- var related = event.relatedTarget,
- inside = false,
- eventType = event.type;
-
- event.type = event.data;
-
- if ( related !== this ) {
-
- if ( related ) {
- inside = jQuery.contains( this, related );
- }
-
- if ( !inside ) {
-
- jQuery.event.handle.apply( this, arguments );
-
- event.type = eventType;
- }
- }
-},
-
-// In case of event delegation, we only need to rename the event.type,
-// liveHandler will take care of the rest.
-delegate = function( event ) {
- event.type = event.data;
- jQuery.event.handle.apply( this, arguments );
-};
-
-// Create mouseenter and mouseleave events
-jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- setup: function( data ) {
- jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
- },
- teardown: function( data ) {
- jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
- }
- };
-});
-
-// submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
- jQuery.event.special.submit = {
- setup: function( data, namespaces ) {
- if ( !jQuery.nodeName( this, "form" ) ) {
- jQuery.event.add(this, "click.specialSubmit", function( e ) {
- // Avoid triggering error on non-existent type attribute in IE VML (#7071)
- var elem = e.target,
- type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : "";
-
- if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
- trigger( "submit", this, arguments );
- }
- });
-
- jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
- var elem = e.target,
- type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : "";
-
- if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
- trigger( "submit", this, arguments );
- }
- });
-
- } else {
- return false;
- }
- },
-
- teardown: function( namespaces ) {
- jQuery.event.remove( this, ".specialSubmit" );
- }
- };
-
-}
-
-// change delegation, happens here so we have bind.
-if ( !jQuery.support.changeBubbles ) {
-
- var changeFilters,
-
- getVal = function( elem ) {
- var type = jQuery.nodeName( elem, "input" ) ? elem.type : "",
- val = elem.value;
-
- if ( type === "radio" || type === "checkbox" ) {
- val = elem.checked;
-
- } else if ( type === "select-multiple" ) {
- val = elem.selectedIndex > -1 ?
- jQuery.map( elem.options, function( elem ) {
- return elem.selected;
- }).join("-") :
- "";
-
- } else if ( jQuery.nodeName( elem, "select" ) ) {
- val = elem.selectedIndex;
- }
-
- return val;
- },
-
- testChange = function testChange( e ) {
- var elem = e.target, data, val;
-
- if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
- return;
- }
-
- data = jQuery._data( elem, "_change_data" );
- val = getVal(elem);
-
- // the current data will be also retrieved by beforeactivate
- if ( e.type !== "focusout" || elem.type !== "radio" ) {
- jQuery._data( elem, "_change_data", val );
- }
-
- if ( data === undefined || val === data ) {
- return;
- }
-
- if ( data != null || val ) {
- e.type = "change";
- e.liveFired = undefined;
- jQuery.event.trigger( e, arguments[1], elem );
- }
- };
-
- jQuery.event.special.change = {
- filters: {
- focusout: testChange,
-
- beforedeactivate: testChange,
-
- click: function( e ) {
- var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
-
- if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
- testChange.call( this, e );
- }
- },
-
- // Change has to be called before submit
- // Keydown will be called before keypress, which is used in submit-event delegation
- keydown: function( e ) {
- var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
-
- if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
- (e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
- type === "select-multiple" ) {
- testChange.call( this, e );
- }
- },
-
- // Beforeactivate happens also before the previous element is blurred
- // with this event you can't trigger a change event, but you can store
- // information
- beforeactivate: function( e ) {
- var elem = e.target;
- jQuery._data( elem, "_change_data", getVal(elem) );
- }
- },
-
- setup: function( data, namespaces ) {
- if ( this.type === "file" ) {
- return false;
- }
-
- for ( var type in changeFilters ) {
- jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
- }
-
- return rformElems.test( this.nodeName );
- },
-
- teardown: function( namespaces ) {
- jQuery.event.remove( this, ".specialChange" );
-
- return rformElems.test( this.nodeName );
- }
- };
-
- changeFilters = jQuery.event.special.change.filters;
-
- // Handle when the input is .focus()'d
- changeFilters.focus = changeFilters.beforeactivate;
-}
-
-function trigger( type, elem, args ) {
- // Piggyback on a donor event to simulate a different one.
- // Fake originalEvent to avoid donor's stopPropagation, but if the
- // simulated event prevents default then we do the same on the donor.
- // Don't pass args or remember liveFired; they apply to the donor event.
- var event = jQuery.extend( {}, args[ 0 ] );
- event.type = type;
- event.originalEvent = {};
- event.liveFired = undefined;
- jQuery.event.handle.call( elem, event );
- if ( event.isDefaultPrevented() ) {
- args[ 0 ].preventDefault();
- }
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler while someone wants focusin/focusout
- var attaches = 0;
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- if ( attaches++ === 0 ) {
- document.addEventListener( orig, handler, true );
- }
- },
- teardown: function() {
- if ( --attaches === 0 ) {
- document.removeEventListener( orig, handler, true );
- }
- }
- };
-
- function handler( donor ) {
- // Donor event is always a native one; fix it and switch its type.
- // Let focusin/out handler cancel the donor focus/blur event.
- var e = jQuery.event.fix( donor );
- e.type = fix;
- e.originalEvent = {};
- jQuery.event.trigger( e, null, e.target );
- if ( e.isDefaultPrevented() ) {
- donor.preventDefault();
- }
- }
- });
-}
-
-jQuery.each(["bind", "one"], function( i, name ) {
- jQuery.fn[ name ] = function( type, data, fn ) {
- var handler;
-
- // Handle object literals
- if ( typeof type === "object" ) {
- for ( var key in type ) {
- this[ name ](key, data, type[key], fn);
- }
- return this;
- }
-
- if ( arguments.length === 2 || data === false ) {
- fn = data;
- data = undefined;
- }
-
- if ( name === "one" ) {
- handler = function( event ) {
- jQuery( this ).unbind( event, handler );
- return fn.apply( this, arguments );
- };
- handler.guid = fn.guid || jQuery.guid++;
- } else {
- handler = fn;
- }
-
- if ( type === "unload" && name !== "one" ) {
- this.one( type, data, fn );
-
- } else {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- jQuery.event.add( this[i], type, handler, data );
- }
- }
-
- return this;
- };
-});
-
-jQuery.fn.extend({
- unbind: function( type, fn ) {
- // Handle object literals
- if ( typeof type === "object" && !type.preventDefault ) {
- for ( var key in type ) {
- this.unbind(key, type[key]);
- }
-
- } else {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- jQuery.event.remove( this[i], type, fn );
- }
- }
-
- return this;
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.live( types, data, fn, selector );
- },
-
- undelegate: function( selector, types, fn ) {
- if ( arguments.length === 0 ) {
- return this.unbind( "live" );
-
- } else {
- return this.die( types, null, fn, selector );
- }
- },
-
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
-
- triggerHandler: function( type, data ) {
- if ( this[0] ) {
- return jQuery.event.trigger( type, data, this[0], true );
- }
- },
-
- toggle: function( fn ) {
- // Save reference to arguments for access in closure
- var args = arguments,
- guid = fn.guid || jQuery.guid++,
- i = 0,
- toggler = function( event ) {
- // Figure out which function to execute
- var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
- jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
- // Make sure that clicks stop
- event.preventDefault();
-
- // and execute the function
- return args[ lastToggle ].apply( this, arguments ) || false;
- };
-
- // link all the functions, so any of them can unbind this click handler
- toggler.guid = guid;
- while ( i < args.length ) {
- args[ i++ ].guid = guid;
- }
-
- return this.click( toggler );
- },
-
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- }
-});
-
-var liveMap = {
- focus: "focusin",
- blur: "focusout",
- mouseenter: "mouseover",
- mouseleave: "mouseout"
-};
-
-jQuery.each(["live", "die"], function( i, name ) {
- jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
- var type, i = 0, match, namespaces, preType,
- selector = origSelector || this.selector,
- context = origSelector ? this : jQuery( this.context );
-
- if ( typeof types === "object" && !types.preventDefault ) {
- for ( var key in types ) {
- context[ name ]( key, data, types[key], selector );
- }
-
- return this;
- }
-
- if ( name === "die" && !types &&
- origSelector && origSelector.charAt(0) === "." ) {
-
- context.unbind( origSelector );
-
- return this;
- }
-
- if ( data === false || jQuery.isFunction( data ) ) {
- fn = data || returnFalse;
- data = undefined;
- }
-
- types = (types || "").split(" ");
-
- while ( (type = types[ i++ ]) != null ) {
- match = rnamespaces.exec( type );
- namespaces = "";
-
- if ( match ) {
- namespaces = match[0];
- type = type.replace( rnamespaces, "" );
- }
-
- if ( type === "hover" ) {
- types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
- continue;
- }
-
- preType = type;
-
- if ( liveMap[ type ] ) {
- types.push( liveMap[ type ] + namespaces );
- type = type + namespaces;
-
- } else {
- type = (liveMap[ type ] || type) + namespaces;
- }
-
- if ( name === "live" ) {
- // bind live handler
- for ( var j = 0, l = context.length; j < l; j++ ) {
- jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
- { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
- }
-
- } else {
- // unbind live handler
- context.unbind( "live." + liveConvert( type, selector ), fn );
- }
- }
-
- return this;
- };
-});
-
-function liveHandler( event ) {
- var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
- elems = [],
- selectors = [],
- events = jQuery._data( this, "events" );
-
- // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
- if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
- return;
- }
-
- if ( event.namespace ) {
- namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
- }
-
- event.liveFired = this;
-
- var live = events.live.slice(0);
-
- for ( j = 0; j < live.length; j++ ) {
- handleObj = live[j];
-
- if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
- selectors.push( handleObj.selector );
-
- } else {
- live.splice( j--, 1 );
- }
- }
-
- match = jQuery( event.target ).closest( selectors, event.currentTarget );
-
- for ( i = 0, l = match.length; i < l; i++ ) {
- close = match[i];
-
- for ( j = 0; j < live.length; j++ ) {
- handleObj = live[j];
-
- if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
- elem = close.elem;
- related = null;
-
- // Those two events require additional checking
- if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
- event.type = handleObj.preType;
- related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
-
- // Make sure not to accidentally match a child element with the same selector
- if ( related && jQuery.contains( elem, related ) ) {
- related = elem;
- }
- }
-
- if ( !related || related !== elem ) {
- elems.push({ elem: elem, handleObj: handleObj, level: close.level });
- }
- }
- }
- }
-
- for ( i = 0, l = elems.length; i < l; i++ ) {
- match = elems[i];
-
- if ( maxLevel && match.level > maxLevel ) {
- break;
- }
-
- event.currentTarget = match.elem;
- event.data = match.handleObj.data;
- event.handleObj = match.handleObj;
-
- ret = match.handleObj.origHandler.apply( match.elem, arguments );
-
- if ( ret === false || event.isPropagationStopped() ) {
- maxLevel = match.level;
-
- if ( ret === false ) {
- stop = false;
- }
- if ( event.isImmediatePropagationStopped() ) {
- break;
- }
- }
- }
-
- return stop;
-}
-
-function liveConvert( type, selector ) {
- return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
-}
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup error").split(" "), function( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- if ( fn == null ) {
- fn = data;
- data = null;
- }
-
- return arguments.length > 0 ?
- this.bind( name, data, fn ) :
- this.trigger( name );
- };
-
- if ( jQuery.attrFn ) {
- jQuery.attrFn[ name ] = true;
- }
-});
-
-
-
-/*!
- * Sizzle CSS Selector Engine
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- * More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
- done = 0,
- toString = Object.prototype.toString,
- hasDuplicate = false,
- baseHasDuplicate = true,
- rBackslash = /\\/g,
- rNonWord = /\W/;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-// Thus far that includes Google Chrome.
-[0, 0].sort(function() {
- baseHasDuplicate = false;
- return 0;
-});
-
-var Sizzle = function( selector, context, results, seed ) {
- results = results || [];
- context = context || document;
-
- var origContext = context;
-
- if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
- return [];
- }
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- var m, set, checkSet, extra, ret, cur, pop, i,
- prune = true,
- contextXML = Sizzle.isXML( context ),
- parts = [],
- soFar = selector;
-
- // Reset the position of the chunker regexp (start from head)
- do {
- chunker.exec( "" );
- m = chunker.exec( soFar );
-
- if ( m ) {
- soFar = m[3];
-
- parts.push( m[1] );
-
- if ( m[2] ) {
- extra = m[3];
- break;
- }
- }
- } while ( m );
-
- if ( parts.length > 1 && origPOS.exec( selector ) ) {
-
- if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
- set = posProcess( parts[0] + parts[1], context );
-
- } else {
- set = Expr.relative[ parts[0] ] ?
- [ context ] :
- Sizzle( parts.shift(), context );
-
- while ( parts.length ) {
- selector = parts.shift();
-
- if ( Expr.relative[ selector ] ) {
- selector += parts.shift();
- }
-
- set = posProcess( selector, set );
- }
- }
-
- } else {
- // Take a shortcut and set the context if the root selector is an ID
- // (but not if it'll be faster if the inner selector is an ID)
- if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
- Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-
- ret = Sizzle.find( parts.shift(), context, contextXML );
- context = ret.expr ?
- Sizzle.filter( ret.expr, ret.set )[0] :
- ret.set[0];
- }
-
- if ( context ) {
- ret = seed ?
- { expr: parts.pop(), set: makeArray(seed) } :
- Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-
- set = ret.expr ?
- Sizzle.filter( ret.expr, ret.set ) :
- ret.set;
-
- if ( parts.length > 0 ) {
- checkSet = makeArray( set );
-
- } else {
- prune = false;
- }
-
- while ( parts.length ) {
- cur = parts.pop();
- pop = cur;
-
- if ( !Expr.relative[ cur ] ) {
- cur = "";
- } else {
- pop = parts.pop();
- }
-
- if ( pop == null ) {
- pop = context;
- }
-
- Expr.relative[ cur ]( checkSet, pop, contextXML );
- }
-
- } else {
- checkSet = parts = [];
- }
- }
-
- if ( !checkSet ) {
- checkSet = set;
- }
-
- if ( !checkSet ) {
- Sizzle.error( cur || selector );
- }
-
- if ( toString.call(checkSet) === "[object Array]" ) {
- if ( !prune ) {
- results.push.apply( results, checkSet );
-
- } else if ( context && context.nodeType === 1 ) {
- for ( i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
- results.push( set[i] );
- }
- }
-
- } else {
- for ( i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
- results.push( set[i] );
- }
- }
- }
-
- } else {
- makeArray( checkSet, results );
- }
-
- if ( extra ) {
- Sizzle( extra, origContext, results, seed );
- Sizzle.uniqueSort( results );
- }
-
- return results;
-};
-
-Sizzle.uniqueSort = function( results ) {
- if ( sortOrder ) {
- hasDuplicate = baseHasDuplicate;
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- for ( var i = 1; i < results.length; i++ ) {
- if ( results[i] === results[ i - 1 ] ) {
- results.splice( i--, 1 );
- }
- }
- }
- }
-
- return results;
-};
-
-Sizzle.matches = function( expr, set ) {
- return Sizzle( expr, null, null, set );
-};
-
-Sizzle.matchesSelector = function( node, expr ) {
- return Sizzle( expr, null, null, [node] ).length > 0;
-};
-
-Sizzle.find = function( expr, context, isXML ) {
- var set;
-
- if ( !expr ) {
- return [];
- }
-
- for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
- var match,
- type = Expr.order[i];
-
- if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
- var left = match[1];
- match.splice( 1, 1 );
-
- if ( left.substr( left.length - 1 ) !== "\\" ) {
- match[1] = (match[1] || "").replace( rBackslash, "" );
- set = Expr.find[ type ]( match, context, isXML );
-
- if ( set != null ) {
- expr = expr.replace( Expr.match[ type ], "" );
- break;
- }
- }
- }
- }
-
- if ( !set ) {
- set = typeof context.getElementsByTagName !== "undefined" ?
- context.getElementsByTagName( "*" ) :
- [];
- }
-
- return { set: set, expr: expr };
-};
-
-Sizzle.filter = function( expr, set, inplace, not ) {
- var match, anyFound,
- old = expr,
- result = [],
- curLoop = set,
- isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
- while ( expr && set.length ) {
- for ( var type in Expr.filter ) {
- if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
- var found, item,
- filter = Expr.filter[ type ],
- left = match[1];
-
- anyFound = false;
-
- match.splice(1,1);
-
- if ( left.substr( left.length - 1 ) === "\\" ) {
- continue;
- }
-
- if ( curLoop === result ) {
- result = [];
- }
-
- if ( Expr.preFilter[ type ] ) {
- match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
- if ( !match ) {
- anyFound = found = true;
-
- } else if ( match === true ) {
- continue;
- }
- }
-
- if ( match ) {
- for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
- if ( item ) {
- found = filter( item, match, i, curLoop );
- var pass = not ^ !!found;
-
- if ( inplace && found != null ) {
- if ( pass ) {
- anyFound = true;
-
- } else {
- curLoop[i] = false;
- }
-
- } else if ( pass ) {
- result.push( item );
- anyFound = true;
- }
- }
- }
- }
-
- if ( found !== undefined ) {
- if ( !inplace ) {
- curLoop = result;
- }
-
- expr = expr.replace( Expr.match[ type ], "" );
-
- if ( !anyFound ) {
- return [];
- }
-
- break;
- }
- }
- }
-
- // Improper expression
- if ( expr === old ) {
- if ( anyFound == null ) {
- Sizzle.error( expr );
-
- } else {
- break;
- }
- }
-
- old = expr;
- }
-
- return curLoop;
-};
-
-Sizzle.error = function( msg ) {
- throw "Syntax error, unrecognized expression: " + msg;
-};
-
-var Expr = Sizzle.selectors = {
- order: [ "ID", "NAME", "TAG" ],
-
- match: {
- ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
- CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
- NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
- ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
- TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
- CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
- POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
- PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
- },
-
- leftMatch: {},
-
- attrMap: {
- "class": "className",
- "for": "htmlFor"
- },
-
- attrHandle: {
- href: function( elem ) {
- return elem.getAttribute( "href" );
- },
- type: function( elem ) {
- return elem.getAttribute( "type" );
- }
- },
-
- relative: {
- "+": function(checkSet, part){
- var isPartStr = typeof part === "string",
- isTag = isPartStr && !rNonWord.test( part ),
- isPartStrNotTag = isPartStr && !isTag;
-
- if ( isTag ) {
- part = part.toLowerCase();
- }
-
- for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
- if ( (elem = checkSet[i]) ) {
- while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
- checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
- elem || false :
- elem === part;
- }
- }
-
- if ( isPartStrNotTag ) {
- Sizzle.filter( part, checkSet, true );
- }
- },
-
- ">": function( checkSet, part ) {
- var elem,
- isPartStr = typeof part === "string",
- i = 0,
- l = checkSet.length;
-
- if ( isPartStr && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
-
- for ( ; i < l; i++ ) {
- elem = checkSet[i];
-
- if ( elem ) {
- var parent = elem.parentNode;
- checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
- }
- }
-
- } else {
- for ( ; i < l; i++ ) {
- elem = checkSet[i];
-
- if ( elem ) {
- checkSet[i] = isPartStr ?
- elem.parentNode :
- elem.parentNode === part;
- }
- }
-
- if ( isPartStr ) {
- Sizzle.filter( part, checkSet, true );
- }
- }
- },
-
- "": function(checkSet, part, isXML){
- var nodeCheck,
- doneName = done++,
- checkFn = dirCheck;
-
- if ( typeof part === "string" && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
- nodeCheck = part;
- checkFn = dirNodeCheck;
- }
-
- checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
- },
-
- "~": function( checkSet, part, isXML ) {
- var nodeCheck,
- doneName = done++,
- checkFn = dirCheck;
-
- if ( typeof part === "string" && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
- nodeCheck = part;
- checkFn = dirNodeCheck;
- }
-
- checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
- }
- },
-
- find: {
- ID: function( match, context, isXML ) {
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- return m && m.parentNode ? [m] : [];
- }
- },
-
- NAME: function( match, context ) {
- if ( typeof context.getElementsByName !== "undefined" ) {
- var ret = [],
- results = context.getElementsByName( match[1] );
-
- for ( var i = 0, l = results.length; i < l; i++ ) {
- if ( results[i].getAttribute("name") === match[1] ) {
- ret.push( results[i] );
- }
- }
-
- return ret.length === 0 ? null : ret;
- }
- },
-
- TAG: function( match, context ) {
- if ( typeof context.getElementsByTagName !== "undefined" ) {
- return context.getElementsByTagName( match[1] );
- }
- }
- },
- preFilter: {
- CLASS: function( match, curLoop, inplace, result, not, isXML ) {
- match = " " + match[1].replace( rBackslash, "" ) + " ";
-
- if ( isXML ) {
- return match;
- }
-
- for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
- if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
- if ( !inplace ) {
- result.push( elem );
- }
-
- } else if ( inplace ) {
- curLoop[i] = false;
- }
- }
- }
-
- return false;
- },
-
- ID: function( match ) {
- return match[1].replace( rBackslash, "" );
- },
-
- TAG: function( match, curLoop ) {
- return match[1].replace( rBackslash, "" ).toLowerCase();
- },
-
- CHILD: function( match ) {
- if ( match[1] === "nth" ) {
- if ( !match[2] ) {
- Sizzle.error( match[0] );
- }
-
- match[2] = match[2].replace(/^\+|\s*/g, '');
-
- // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
- var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
- match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
- !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
- // calculate the numbers (first)n+(last) including if they are negative
- match[2] = (test[1] + (test[2] || 1)) - 0;
- match[3] = test[3] - 0;
- }
- else if ( match[2] ) {
- Sizzle.error( match[0] );
- }
-
- // TODO: Move to normal caching system
- match[0] = done++;
-
- return match;
- },
-
- ATTR: function( match, curLoop, inplace, result, not, isXML ) {
- var name = match[1] = match[1].replace( rBackslash, "" );
-
- if ( !isXML && Expr.attrMap[name] ) {
- match[1] = Expr.attrMap[name];
- }
-
- // Handle if an un-quoted value was used
- match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
-
- if ( match[2] === "~=" ) {
- match[4] = " " + match[4] + " ";
- }
-
- return match;
- },
-
- PSEUDO: function( match, curLoop, inplace, result, not ) {
- if ( match[1] === "not" ) {
- // If we're dealing with a complex expression, or a simple one
- if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
- match[3] = Sizzle(match[3], null, null, curLoop);
-
- } else {
- var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-
- if ( !inplace ) {
- result.push.apply( result, ret );
- }
-
- return false;
- }
-
- } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
- return true;
- }
-
- return match;
- },
-
- POS: function( match ) {
- match.unshift( true );
-
- return match;
- }
- },
-
- filters: {
- enabled: function( elem ) {
- return elem.disabled === false && elem.type !== "hidden";
- },
-
- disabled: function( elem ) {
- return elem.disabled === true;
- },
-
- checked: function( elem ) {
- return elem.checked === true;
- },
-
- selected: function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- parent: function( elem ) {
- return !!elem.firstChild;
- },
-
- empty: function( elem ) {
- return !elem.firstChild;
- },
-
- has: function( elem, i, match ) {
- return !!Sizzle( match[3], elem ).length;
- },
-
- header: function( elem ) {
- return (/h\d/i).test( elem.nodeName );
- },
-
- text: function( elem ) {
- var attr = elem.getAttribute( "type" ), type = elem.type;
- // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
- // use getAttribute instead to test this case
- return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
- },
-
- radio: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
- },
-
- checkbox: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
- },
-
- file: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
- },
-
- password: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
- },
-
- submit: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && "submit" === elem.type;
- },
-
- image: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
- },
-
- reset: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && "reset" === elem.type;
- },
-
- button: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && "button" === elem.type || name === "button";
- },
-
- input: function( elem ) {
- return (/input|select|textarea|button/i).test( elem.nodeName );
- },
-
- focus: function( elem ) {
- return elem === elem.ownerDocument.activeElement;
- }
- },
- setFilters: {
- first: function( elem, i ) {
- return i === 0;
- },
-
- last: function( elem, i, match, array ) {
- return i === array.length - 1;
- },
-
- even: function( elem, i ) {
- return i % 2 === 0;
- },
-
- odd: function( elem, i ) {
- return i % 2 === 1;
- },
-
- lt: function( elem, i, match ) {
- return i < match[3] - 0;
- },
-
- gt: function( elem, i, match ) {
- return i > match[3] - 0;
- },
-
- nth: function( elem, i, match ) {
- return match[3] - 0 === i;
- },
-
- eq: function( elem, i, match ) {
- return match[3] - 0 === i;
- }
- },
- filter: {
- PSEUDO: function( elem, match, i, array ) {
- var name = match[1],
- filter = Expr.filters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
-
- } else if ( name === "contains" ) {
- return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
-
- } else if ( name === "not" ) {
- var not = match[3];
-
- for ( var j = 0, l = not.length; j < l; j++ ) {
- if ( not[j] === elem ) {
- return false;
- }
- }
-
- return true;
-
- } else {
- Sizzle.error( name );
- }
- },
-
- CHILD: function( elem, match ) {
- var type = match[1],
- node = elem;
-
- switch ( type ) {
- case "only":
- case "first":
- while ( (node = node.previousSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
-
- if ( type === "first" ) {
- return true;
- }
-
- node = elem;
-
- case "last":
- while ( (node = node.nextSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
-
- return true;
-
- case "nth":
- var first = match[2],
- last = match[3];
-
- if ( first === 1 && last === 0 ) {
- return true;
- }
-
- var doneName = match[0],
- parent = elem.parentNode;
-
- if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
- var count = 0;
-
- for ( node = parent.firstChild; node; node = node.nextSibling ) {
- if ( node.nodeType === 1 ) {
- node.nodeIndex = ++count;
- }
- }
-
- parent.sizcache = doneName;
- }
-
- var diff = elem.nodeIndex - last;
-
- if ( first === 0 ) {
- return diff === 0;
-
- } else {
- return ( diff % first === 0 && diff / first >= 0 );
- }
- }
- },
-
- ID: function( elem, match ) {
- return elem.nodeType === 1 && elem.getAttribute("id") === match;
- },
-
- TAG: function( elem, match ) {
- return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
- },
-
- CLASS: function( elem, match ) {
- return (" " + (elem.className || elem.getAttribute("class")) + " ")
- .indexOf( match ) > -1;
- },
-
- ATTR: function( elem, match ) {
- var name = match[1],
- result = Expr.attrHandle[ name ] ?
- Expr.attrHandle[ name ]( elem ) :
- elem[ name ] != null ?
- elem[ name ] :
- elem.getAttribute( name ),
- value = result + "",
- type = match[2],
- check = match[4];
-
- return result == null ?
- type === "!=" :
- type === "=" ?
- value === check :
- type === "*=" ?
- value.indexOf(check) >= 0 :
- type === "~=" ?
- (" " + value + " ").indexOf(check) >= 0 :
- !check ?
- value && result !== false :
- type === "!=" ?
- value !== check :
- type === "^=" ?
- value.indexOf(check) === 0 :
- type === "$=" ?
- value.substr(value.length - check.length) === check :
- type === "|=" ?
- value === check || value.substr(0, check.length + 1) === check + "-" :
- false;
- },
-
- POS: function( elem, match, i, array ) {
- var name = match[2],
- filter = Expr.setFilters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
- }
- }
- }
-};
-
-var origPOS = Expr.match.POS,
- fescape = function(all, num){
- return "\\" + (num - 0 + 1);
- };
-
-for ( var type in Expr.match ) {
- Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
- Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
-}
-
-var makeArray = function( array, results ) {
- array = Array.prototype.slice.call( array, 0 );
-
- if ( results ) {
- results.push.apply( results, array );
- return results;
- }
-
- return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
- Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch( e ) {
- makeArray = function( array, results ) {
- var i = 0,
- ret = results || [];
-
- if ( toString.call(array) === "[object Array]" ) {
- Array.prototype.push.apply( ret, array );
-
- } else {
- if ( typeof array.length === "number" ) {
- for ( var l = array.length; i < l; i++ ) {
- ret.push( array[i] );
- }
-
- } else {
- for ( ; array[i]; i++ ) {
- ret.push( array[i] );
- }
- }
- }
-
- return ret;
- };
-}
-
-var sortOrder, siblingCheck;
-
-if ( document.documentElement.compareDocumentPosition ) {
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
- return a.compareDocumentPosition ? -1 : 1;
- }
-
- return a.compareDocumentPosition(b) & 4 ? -1 : 1;
- };
-
-} else {
- sortOrder = function( a, b ) {
- // The nodes are identical, we can exit early
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
-
- // Fallback to using sourceIndex (in IE) if it's available on both nodes
- } else if ( a.sourceIndex && b.sourceIndex ) {
- return a.sourceIndex - b.sourceIndex;
- }
-
- var al, bl,
- ap = [],
- bp = [],
- aup = a.parentNode,
- bup = b.parentNode,
- cur = aup;
-
- // If the nodes are siblings (or identical) we can do a quick check
- if ( aup === bup ) {
- return siblingCheck( a, b );
-
- // If no parents were found then the nodes are disconnected
- } else if ( !aup ) {
- return -1;
-
- } else if ( !bup ) {
- return 1;
- }
-
- // Otherwise they're somewhere else in the tree so we need
- // to build up a full list of the parentNodes for comparison
- while ( cur ) {
- ap.unshift( cur );
- cur = cur.parentNode;
- }
-
- cur = bup;
-
- while ( cur ) {
- bp.unshift( cur );
- cur = cur.parentNode;
- }
-
- al = ap.length;
- bl = bp.length;
-
- // Start walking down the tree looking for a discrepancy
- for ( var i = 0; i < al && i < bl; i++ ) {
- if ( ap[i] !== bp[i] ) {
- return siblingCheck( ap[i], bp[i] );
- }
- }
-
- // We ended someplace up the tree so do a sibling check
- return i === al ?
- siblingCheck( a, bp[i], -1 ) :
- siblingCheck( ap[i], b, 1 );
- };
-
- siblingCheck = function( a, b, ret ) {
- if ( a === b ) {
- return ret;
- }
-
- var cur = a.nextSibling;
-
- while ( cur ) {
- if ( cur === b ) {
- return -1;
- }
-
- cur = cur.nextSibling;
- }
-
- return 1;
- };
-}
-
-// Utility function for retreiving the text value of an array of DOM nodes
-Sizzle.getText = function( elems ) {
- var ret = "", elem;
-
- for ( var i = 0; elems[i]; i++ ) {
- elem = elems[i];
-
- // Get the text from text nodes and CDATA nodes
- if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
- ret += elem.nodeValue;
-
- // Traverse everything else, except comment nodes
- } else if ( elem.nodeType !== 8 ) {
- ret += Sizzle.getText( elem.childNodes );
- }
- }
-
- return ret;
-};
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
- // We're going to inject a fake input element with a specified name
- var form = document.createElement("div"),
- id = "script" + (new Date()).getTime(),
- root = document.documentElement;
-
- form.innerHTML = "<a name='" + id + "'/>";
-
- // Inject it into the root element, check its status, and remove it quickly
- root.insertBefore( form, root.firstChild );
-
- // The workaround has to do additional checks after a getElementById
- // Which slows things down for other browsers (hence the branching)
- if ( document.getElementById( id ) ) {
- Expr.find.ID = function( match, context, isXML ) {
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
-
- return m ?
- m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
- [m] :
- undefined :
- [];
- }
- };
-
- Expr.filter.ID = function( elem, match ) {
- var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-
- return elem.nodeType === 1 && node && node.nodeValue === match;
- };
- }
-
- root.removeChild( form );
-
- // release memory in IE
- root = form = null;
-})();
-
-(function(){
- // Check to see if the browser returns only elements
- // when doing getElementsByTagName("*")
-
- // Create a fake element
- var div = document.createElement("div");
- div.appendChild( document.createComment("") );
-
- // Make sure no comments are found
- if ( div.getElementsByTagName("*").length > 0 ) {
- Expr.find.TAG = function( match, context ) {
- var results = context.getElementsByTagName( match[1] );
-
- // Filter out possible comments
- if ( match[1] === "*" ) {
- var tmp = [];
-
- for ( var i = 0; results[i]; i++ ) {
- if ( results[i].nodeType === 1 ) {
- tmp.push( results[i] );
- }
- }
-
- results = tmp;
- }
-
- return results;
- };
- }
-
- // Check to see if an attribute returns normalized href attributes
- div.innerHTML = "<a href='#'></a>";
-
- if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
- div.firstChild.getAttribute("href") !== "#" ) {
-
- Expr.attrHandle.href = function( elem ) {
- return elem.getAttribute( "href", 2 );
- };
- }
-
- // release memory in IE
- div = null;
-})();
-
-if ( document.querySelectorAll ) {
- (function(){
- var oldSizzle = Sizzle,
- div = document.createElement("div"),
- id = "__sizzle__";
-
- div.innerHTML = "<p class='TEST'></p>";
-
- // Safari can't handle uppercase or unicode characters when
- // in quirks mode.
- if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
- return;
- }
-
- Sizzle = function( query, context, extra, seed ) {
- context = context || document;
-
- // Only use querySelectorAll on non-XML documents
- // (ID selectors don't work in non-HTML documents)
- if ( !seed && !Sizzle.isXML(context) ) {
- // See if we find a selector to speed up
- var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
-
- if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
- // Speed-up: Sizzle("TAG")
- if ( match[1] ) {
- return makeArray( context.getElementsByTagName( query ), extra );
-
- // Speed-up: Sizzle(".CLASS")
- } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
- return makeArray( context.getElementsByClassName( match[2] ), extra );
- }
- }
-
- if ( context.nodeType === 9 ) {
- // Speed-up: Sizzle("body")
- // The body element only exists once, optimize finding it
- if ( query === "body" && context.body ) {
- return makeArray( [ context.body ], extra );
-
- // Speed-up: Sizzle("#ID")
- } else if ( match && match[3] ) {
- var elem = context.getElementById( match[3] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id === match[3] ) {
- return makeArray( [ elem ], extra );
- }
-
- } else {
- return makeArray( [], extra );
- }
- }
-
- try {
- return makeArray( context.querySelectorAll(query), extra );
- } catch(qsaError) {}
-
- // qSA works strangely on Element-rooted queries
- // We can work around this by specifying an extra ID on the root
- // and working up from there (Thanks to Andrew Dupont for the technique)
- // IE 8 doesn't work on object elements
- } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- var oldContext = context,
- old = context.getAttribute( "id" ),
- nid = old || id,
- hasParent = context.parentNode,
- relativeHierarchySelector = /^\s*[+~]/.test( query );
-
- if ( !old ) {
- context.setAttribute( "id", nid );
- } else {
- nid = nid.replace( /'/g, "\\$&" );
- }
- if ( relativeHierarchySelector && hasParent ) {
- context = context.parentNode;
- }
-
- try {
- if ( !relativeHierarchySelector || hasParent ) {
- return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
- }
-
- } catch(pseudoError) {
- } finally {
- if ( !old ) {
- oldContext.removeAttribute( "id" );
- }
- }
- }
- }
-
- return oldSizzle(query, context, extra, seed);
- };
-
- for ( var prop in oldSizzle ) {
- Sizzle[ prop ] = oldSizzle[ prop ];
- }
-
- // release memory in IE
- div = null;
- })();
-}
-
-(function(){
- var html = document.documentElement,
- matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
-
- if ( matches ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9 fails this)
- var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
- pseudoWorks = false;
-
- try {
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( document.documentElement, "[test!='']:sizzle" );
-
- } catch( pseudoError ) {
- pseudoWorks = true;
- }
-
- Sizzle.matchesSelector = function( node, expr ) {
- // Make sure that attribute selectors are quoted
- expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
- if ( !Sizzle.isXML( node ) ) {
- try {
- if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
- var ret = matches.call( node, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || !disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9, so check for that
- node.document && node.document.nodeType !== 11 ) {
- return ret;
- }
- }
- } catch(e) {}
- }
-
- return Sizzle(expr, null, null, [node]).length > 0;
- };
- }
-})();
-
-(function(){
- var div = document.createElement("div");
-
- div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
- // Opera can't find a second classname (in 9.6)
- // Also, make sure that getElementsByClassName actually exists
- if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
- return;
- }
-
- // Safari caches class attributes, doesn't catch changes (in 3.2)
- div.lastChild.className = "e";
-
- if ( div.getElementsByClassName("e").length === 1 ) {
- return;
- }
-
- Expr.order.splice(1, 0, "CLASS");
- Expr.find.CLASS = function( match, context, isXML ) {
- if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
- return context.getElementsByClassName(match[1]);
- }
- };
-
- // release memory in IE
- div = null;
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
-
- if ( elem ) {
- var match = false;
-
- elem = elem[dir];
-
- while ( elem ) {
- if ( elem.sizcache === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 && !isXML ){
- elem.sizcache = doneName;
- elem.sizset = i;
- }
-
- if ( elem.nodeName.toLowerCase() === cur ) {
- match = elem;
- break;
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
-
- if ( elem ) {
- var match = false;
-
- elem = elem[dir];
-
- while ( elem ) {
- if ( elem.sizcache === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 ) {
- if ( !isXML ) {
- elem.sizcache = doneName;
- elem.sizset = i;
- }
-
- if ( typeof cur !== "string" ) {
- if ( elem === cur ) {
- match = true;
- break;
- }
-
- } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
- match = elem;
- break;
- }
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-if ( document.documentElement.contains ) {
- Sizzle.contains = function( a, b ) {
- return a !== b && (a.contains ? a.contains(b) : true);
- };
-
-} else if ( document.documentElement.compareDocumentPosition ) {
- Sizzle.contains = function( a, b ) {
- return !!(a.compareDocumentPosition(b) & 16);
- };
-
-} else {
- Sizzle.contains = function() {
- return false;
- };
-}
-
-Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
-
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function( selector, context ) {
- var match,
- tmpSet = [],
- later = "",
- root = context.nodeType ? [context] : context;
-
- // Position selectors must be done after the filter
- // And so must :not(positional) so we move all PSEUDOs to the end
- while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
- later += match[0];
- selector = selector.replace( Expr.match.PSEUDO, "" );
- }
-
- selector = Expr.relative[selector] ? selector + "*" : selector;
-
- for ( var i = 0, l = root.length; i < l; i++ ) {
- Sizzle( selector, root[i], tmpSet );
- }
-
- return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})();
-
-
-var runtil = /Until$/,
- rparentsprev = /^(?:parents|prevUntil|prevAll)/,
- // Note: This RegExp should be improved, or likely pulled from Sizzle
- rmultiselector = /,/,
- isSimple = /^.[^:#\[\.,]*$/,
- slice = Array.prototype.slice,
- POS = jQuery.expr.match.POS,
- // methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.fn.extend({
- find: function( selector ) {
- var self = this,
- i, l;
-
- if ( typeof selector !== "string" ) {
- return jQuery( selector ).filter(function() {
- for ( i = 0, l = self.length; i < l; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- });
- }
-
- var ret = this.pushStack( "", "find", selector ),
- length, n, r;
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- length = ret.length;
- jQuery.find( selector, this[i], ret );
-
- if ( i > 0 ) {
- // Make sure that the results are unique
- for ( n = length; n < ret.length; n++ ) {
- for ( r = 0; r < length; r++ ) {
- if ( ret[r] === ret[n] ) {
- ret.splice(n--, 1);
- break;
- }
- }
- }
- }
- }
-
- return ret;
- },
-
- has: function( target ) {
- var targets = jQuery( target );
- return this.filter(function() {
- for ( var i = 0, l = targets.length; i < l; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
-
- not: function( selector ) {
- return this.pushStack( winnow(this, selector, false), "not", selector);
- },
-
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector, true), "filter", selector );
- },
-
- is: function( selector ) {
- return !!selector && ( typeof selector === "string" ?
- jQuery.filter( selector, this ).length > 0 :
- this.filter( selector ).length > 0 );
- },
-
- closest: function( selectors, context ) {
- var ret = [], i, l, cur = this[0];
-
- // Array
- if ( jQuery.isArray( selectors ) ) {
- var match, selector,
- matches = {},
- level = 1;
-
- if ( cur && selectors.length ) {
- for ( i = 0, l = selectors.length; i < l; i++ ) {
- selector = selectors[i];
-
- if ( !matches[ selector ] ) {
- matches[ selector ] = POS.test( selector ) ?
- jQuery( selector, context || this.context ) :
- selector;
- }
- }
-
- while ( cur && cur.ownerDocument && cur !== context ) {
- for ( selector in matches ) {
- match = matches[ selector ];
-
- if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {
- ret.push({ selector: selector, elem: cur, level: level });
- }
- }
-
- cur = cur.parentNode;
- level++;
- }
- }
-
- return ret;
- }
-
- // String
- var pos = POS.test( selectors ) || typeof selectors !== "string" ?
- jQuery( selectors, context || this.context ) :
- 0;
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- cur = this[i];
-
- while ( cur ) {
- if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
- ret.push( cur );
- break;
-
- } else {
- cur = cur.parentNode;
- if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
- break;
- }
- }
- }
- }
-
- ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
- return this.pushStack( ret, "closest", selectors );
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
- }
-
- // index in selector
- if ( typeof elem === "string" ) {
- return jQuery.inArray( this[0], jQuery( elem ) );
- }
-
- // Locate the position of the desired element
- return jQuery.inArray(
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[0] : elem, this );
- },
-
- add: function( selector, context ) {
- var set = typeof selector === "string" ?
- jQuery( selector, context ) :
- jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
- all = jQuery.merge( this.get(), set );
-
- return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
- all :
- jQuery.unique( all ) );
- },
-
- andSelf: function() {
- return this.add( this.prevObject );
- }
-});
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
- return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return jQuery.dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return jQuery.nth( elem, 2, "nextSibling" );
- },
- prev: function( elem ) {
- return jQuery.nth( elem, 2, "previousSibling" );
- },
- nextAll: function( elem ) {
- return jQuery.dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return jQuery.dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return jQuery.sibling( elem.parentNode.firstChild, elem );
- },
- children: function( elem ) {
- return jQuery.sibling( elem.firstChild );
- },
- contents: function( elem ) {
- return jQuery.nodeName( elem, "iframe" ) ?
- elem.contentDocument || elem.contentWindow.document :
- jQuery.makeArray( elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until ),
- // The variable 'args' was introduced in
- // https://github.com/jquery/jquery/commit/52a0238
- // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
- // http://code.google.com/p/v8/issues/detail?id=1050
- args = slice.call(arguments);
-
- if ( !runtil.test( name ) ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- ret = jQuery.filter( selector, ret );
- }
-
- ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
- if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
- ret = ret.reverse();
- }
-
- return this.pushStack( ret, name, args.join(",") );
- };
-});
-
-jQuery.extend({
- filter: function( expr, elems, not ) {
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 ?
- jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
- jQuery.find.matches(expr, elems);
- },
-
- dir: function( elem, dir, until ) {
- var matched = [],
- cur = elem[ dir ];
-
- while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
- if ( cur.nodeType === 1 ) {
- matched.push( cur );
- }
- cur = cur[dir];
- }
- return matched;
- },
-
- nth: function( cur, result, dir, elem ) {
- result = result || 1;
- var num = 0;
-
- for ( ; cur; cur = cur[dir] ) {
- if ( cur.nodeType === 1 && ++num === result ) {
- break;
- }
- }
-
- return cur;
- },
-
- sibling: function( n, elem ) {
- var r = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- r.push( n );
- }
- }
-
- return r;
- }
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
-
- // Can't pass null or undefined to indexOf in Firefox 4
- // Set to 0 to skip string check
- qualifier = qualifier || 0;
-
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep(elements, function( elem, i ) {
- var retVal = !!qualifier.call( elem, i, elem );
- return retVal === keep;
- });
-
- } else if ( qualifier.nodeType ) {
- return jQuery.grep(elements, function( elem, i ) {
- return (elem === qualifier) === keep;
- });
-
- } else if ( typeof qualifier === "string" ) {
- var filtered = jQuery.grep(elements, function( elem ) {
- return elem.nodeType === 1;
- });
-
- if ( isSimple.test( qualifier ) ) {
- return jQuery.filter(qualifier, filtered, !keep);
- } else {
- qualifier = jQuery.filter( qualifier, filtered );
- }
- }
-
- return jQuery.grep(elements, function( elem, i ) {
- return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
- });
-}
-
-
-
-
-var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
- rleadingWhitespace = /^\s+/,
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
- rtagName = /<([\w:]+)/,
- rtbody = /<tbody/i,
- rhtml = /<|&#?\w+;/,
- rnocache = /<(?:script|object|embed|option|style)/i,
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptType = /\/(java|ecma)script/i,
- rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
- wrapMap = {
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
- legend: [ 1, "<fieldset>", "</fieldset>" ],
- thead: [ 1, "<table>", "</table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
- col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
- area: [ 1, "<map>", "</map>" ],
- _default: [ 0, "", "" ]
- };
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE can't serialize <link> and <script> tags normally
-if ( !jQuery.support.htmlSerialize ) {
- wrapMap._default = [ 1, "div<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
- text: function( text ) {
- if ( jQuery.isFunction(text) ) {
- return this.each(function(i) {
- var self = jQuery( this );
-
- self.text( text.call(this, i, self.text()) );
- });
- }
-
- if ( typeof text !== "object" && text !== undefined ) {
- return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
- }
-
- return jQuery.text( this );
- },
-
- wrapAll: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapAll( html.call(this, i) );
- });
- }
-
- if ( this[0] ) {
- // The elements to wrap the target around
- var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
- if ( this[0].parentNode ) {
- wrap.insertBefore( this[0] );
- }
-
- wrap.map(function() {
- var elem = this;
-
- while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
- elem = elem.firstChild;
- }
-
- return elem;
- }).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapInner( html.call(this, i) );
- });
- }
-
- return this.each(function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- });
- },
-
- wrap: function( html ) {
- return this.each(function() {
- jQuery( this ).wrapAll( html );
- });
- },
-
- unwrap: function() {
- return this.parent().each(function() {
- if ( !jQuery.nodeName( this, "body" ) ) {
- jQuery( this ).replaceWith( this.childNodes );
- }
- }).end();
- },
-
- append: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 ) {
- this.appendChild( elem );
- }
- });
- },
-
- prepend: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 ) {
- this.insertBefore( elem, this.firstChild );
- }
- });
- },
-
- before: function() {
- if ( this[0] && this[0].parentNode ) {
- return this.domManip(arguments, false, function( elem ) {
- this.parentNode.insertBefore( elem, this );
- });
- } else if ( arguments.length ) {
- var set = jQuery(arguments[0]);
- set.push.apply( set, this.toArray() );
- return this.pushStack( set, "before", arguments );
- }
- },
-
- after: function() {
- if ( this[0] && this[0].parentNode ) {
- return this.domManip(arguments, false, function( elem ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- });
- } else if ( arguments.length ) {
- var set = this.pushStack( this, "after", arguments );
- set.push.apply( set, jQuery(arguments[0]).toArray() );
- return set;
- }
- },
-
- // keepData is for internal use only--do not document
- remove: function( selector, keepData ) {
- for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
- if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName("*") );
- jQuery.cleanData( [ elem ] );
- }
-
- if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
- }
- }
- }
-
- return this;
- },
-
- empty: function() {
- for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName("*") );
- }
-
- // Remove any remaining nodes
- while ( elem.firstChild ) {
- elem.removeChild( elem.firstChild );
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map( function () {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- });
- },
-
- html: function( value ) {
- if ( value === undefined ) {
- return this[0] && this[0].nodeType === 1 ?
- this[0].innerHTML.replace(rinlinejQuery, "") :
- null;
-
- // See if we can take a shortcut and just use innerHTML
- } else if ( typeof value === "string" && !rnocache.test( value ) &&
- (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
- !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
-
- value = value.replace(rxhtmlTag, "<$1></$2>");
-
- try {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( this[i].nodeType === 1 ) {
- jQuery.cleanData( this[i].getElementsByTagName("*") );
- this[i].innerHTML = value;
- }
- }
-
- // If using innerHTML throws an exception, use the fallback method
- } catch(e) {
- this.empty().append( value );
- }
-
- } else if ( jQuery.isFunction( value ) ) {
- this.each(function(i){
- var self = jQuery( this );
-
- self.html( value.call(this, i, self.html()) );
- });
-
- } else {
- this.empty().append( value );
- }
-
- return this;
- },
-
- replaceWith: function( value ) {
- if ( this[0] && this[0].parentNode ) {
- // Make sure that the elements are removed from the DOM before they are inserted
- // this can help fix replacing a parent with child elements
- if ( jQuery.isFunction( value ) ) {
- return this.each(function(i) {
- var self = jQuery(this), old = self.html();
- self.replaceWith( value.call( this, i, old ) );
- });
- }
-
- if ( typeof value !== "string" ) {
- value = jQuery( value ).detach();
- }
-
- return this.each(function() {
- var next = this.nextSibling,
- parent = this.parentNode;
-
- jQuery( this ).remove();
-
- if ( next ) {
- jQuery(next).before( value );
- } else {
- jQuery(parent).append( value );
- }
- });
- } else {
- return this.length ?
- this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
- this;
- }
- },
-
- detach: function( selector ) {
- return this.remove( selector, true );
- },
-
- domManip: function( args, table, callback ) {
- var results, first, fragment, parent,
- value = args[0],
- scripts = [];
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
- return this.each(function() {
- jQuery(this).domManip( args, table, callback, true );
- });
- }
-
- if ( jQuery.isFunction(value) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- args[0] = value.call(this, i, table ? self.html() : undefined);
- self.domManip( args, table, callback );
- });
- }
-
- if ( this[0] ) {
- parent = value && value.parentNode;
-
- // If we're in a fragment, just use that instead of building a new one
- if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
- results = { fragment: parent };
-
- } else {
- results = jQuery.buildFragment( args, this, scripts );
- }
-
- fragment = results.fragment;
-
- if ( fragment.childNodes.length === 1 ) {
- first = fragment = fragment.firstChild;
- } else {
- first = fragment.firstChild;
- }
-
- if ( first ) {
- table = table && jQuery.nodeName( first, "tr" );
-
- for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
- callback.call(
- table ?
- root(this[i], first) :
- this[i],
- // Make sure that we do not leak memory by inadvertently discarding
- // the original fragment (which might have attached data) instead of
- // using it; in addition, use the original fragment object for the last
- // item instead of first because it can end up being emptied incorrectly
- // in certain situations (Bug #8070).
- // Fragments from the fragment cache must always be cloned and never used
- // in place.
- results.cacheable || (l > 1 && i < lastIndex) ?
- jQuery.clone( fragment, true, true ) :
- fragment
- );
- }
- }
-
- if ( scripts.length ) {
- jQuery.each( scripts, evalScript );
- }
- }
-
- return this;
- }
-});
-
-function root( elem, cur ) {
- return jQuery.nodeName(elem, "table") ?
- (elem.getElementsByTagName("tbody")[0] ||
- elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
- elem;
-}
-
-function cloneCopyEvent( src, dest ) {
-
- if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
- return;
- }
-
- var internalKey = jQuery.expando,
- oldData = jQuery.data( src ),
- curData = jQuery.data( dest, oldData );
-
- // Switch to use the internal data object, if it exists, for the next
- // stage of data copying
- if ( (oldData = oldData[ internalKey ]) ) {
- var events = oldData.events;
- curData = curData[ internalKey ] = jQuery.extend({}, oldData);
-
- if ( events ) {
- delete curData.handle;
- curData.events = {};
-
- for ( var type in events ) {
- for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
- }
- }
- }
- }
-}
-
-function cloneFixAttributes( src, dest ) {
- var nodeName;
-
- // We do not need to do anything for non-Elements
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- // clearAttributes removes the attributes, which we don't want,
- // but also removes the attachEvent events, which we *do* want
- if ( dest.clearAttributes ) {
- dest.clearAttributes();
- }
-
- // mergeAttributes, in contrast, only merges back on the
- // original attributes, not the events
- if ( dest.mergeAttributes ) {
- dest.mergeAttributes( src );
- }
-
- nodeName = dest.nodeName.toLowerCase();
-
- // IE6-8 fail to clone children inside object elements that use
- // the proprietary classid attribute value (rather than the type
- // attribute) to identify the type of content to display
- if ( nodeName === "object" ) {
- dest.outerHTML = src.outerHTML;
-
- } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
- // IE6-8 fails to persist the checked state of a cloned checkbox
- // or radio button. Worse, IE6-7 fail to give the cloned element
- // a checked appearance if the defaultChecked value isn't also set
- if ( src.checked ) {
- dest.defaultChecked = dest.checked = src.checked;
- }
-
- // IE6-7 get confused and end up setting the value of a cloned
- // checkbox/radio button to an empty string instead of "on"
- if ( dest.value !== src.value ) {
- dest.value = src.value;
- }
-
- // IE6-8 fails to return the selected option to the default selected
- // state when cloning options
- } else if ( nodeName === "option" ) {
- dest.selected = src.defaultSelected;
-
- // IE6-8 fails to set the defaultValue to the correct value when
- // cloning other types of input fields
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
-
- // Event data gets referenced instead of copied if the expando
- // gets copied too
- dest.removeAttribute( jQuery.expando );
-}
-
-jQuery.buildFragment = function( args, nodes, scripts ) {
- var fragment, cacheable, cacheresults, doc;
-
- // nodes may contain either an explicit document object,
- // a jQuery collection or context object.
- // If nodes[0] contains a valid object to assign to doc
- if ( nodes && nodes[0] ) {
- doc = nodes[0].ownerDocument || nodes[0];
- }
-
- // Ensure that an attr object doesn't incorrectly stand in as a document object
- // Chrome and Firefox seem to allow this to occur and will throw exception
- // Fixes #8950
- if ( !doc.createDocumentFragment ) {
- doc = document;
- }
-
- // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
- // Cloning options loses the selected state, so don't cache them
- // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
- // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
- if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
- args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
-
- cacheable = true;
-
- cacheresults = jQuery.fragments[ args[0] ];
- if ( cacheresults && cacheresults !== 1 ) {
- fragment = cacheresults;
- }
- }
-
- if ( !fragment ) {
- fragment = doc.createDocumentFragment();
- jQuery.clean( args, doc, fragment, scripts );
- }
-
- if ( cacheable ) {
- jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
- }
-
- return { fragment: fragment, cacheable: cacheable };
-};
-
-jQuery.fragments = {};
-
-jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var ret = [],
- insert = jQuery( selector ),
- parent = this.length === 1 && this[0].parentNode;
-
- if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
- insert[ original ]( this[0] );
- return this;
-
- } else {
- for ( var i = 0, l = insert.length; i < l; i++ ) {
- var elems = (i > 0 ? this.clone(true) : this).get();
- jQuery( insert[i] )[ original ]( elems );
- ret = ret.concat( elems );
- }
-
- return this.pushStack( ret, name, insert.selector );
- }
- };
-});
-
-function getAll( elem ) {
- if ( "getElementsByTagName" in elem ) {
- return elem.getElementsByTagName( "*" );
-
- } else if ( "querySelectorAll" in elem ) {
- return elem.querySelectorAll( "*" );
-
- } else {
- return [];
- }
-}
-
-// Used in clean, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
- if ( elem.type === "checkbox" || elem.type === "radio" ) {
- elem.defaultChecked = elem.checked;
- }
-}
-// Finds all inputs and passes them to fixDefaultChecked
-function findInputs( elem ) {
- if ( jQuery.nodeName( elem, "input" ) ) {
- fixDefaultChecked( elem );
- } else if ( "getElementsByTagName" in elem ) {
- jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
- }
-}
-
-jQuery.extend({
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var clone = elem.cloneNode(true),
- srcElements,
- destElements,
- i;
-
- if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
- (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
- // IE copies events bound via attachEvent when using cloneNode.
- // Calling detachEvent on the clone will also remove the events
- // from the original. In order to get around this, we use some
- // proprietary methods to clear the events. Thanks to MooTools
- // guys for this hotness.
-
- cloneFixAttributes( elem, clone );
-
- // Using Sizzle here is crazy slow, so we use getElementsByTagName
- // instead
- srcElements = getAll( elem );
- destElements = getAll( clone );
-
- // Weird iteration because IE will replace the length property
- // with an element if you are cloning the body and one of the
- // elements on the page has a name or id of "length"
- for ( i = 0; srcElements[i]; ++i ) {
- // Ensure that the destination node is not null; Fixes #9587
- if ( destElements[i] ) {
- cloneFixAttributes( srcElements[i], destElements[i] );
- }
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- cloneCopyEvent( elem, clone );
-
- if ( deepDataAndEvents ) {
- srcElements = getAll( elem );
- destElements = getAll( clone );
-
- for ( i = 0; srcElements[i]; ++i ) {
- cloneCopyEvent( srcElements[i], destElements[i] );
- }
- }
- }
-
- srcElements = destElements = null;
-
- // Return the cloned set
- return clone;
- },
-
- clean: function( elems, context, fragment, scripts ) {
- var checkScriptType;
-
- context = context || document;
-
- // !context.createElement fails in IE with an error but returns typeof 'object'
- if ( typeof context.createElement === "undefined" ) {
- context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
- }
-
- var ret = [], j;
-
- for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
- if ( typeof elem === "number" ) {
- elem += "";
- }
-
- if ( !elem ) {
- continue;
- }
-
- // Convert html string into DOM nodes
- if ( typeof elem === "string" ) {
- if ( !rhtml.test( elem ) ) {
- elem = context.createTextNode( elem );
- } else {
- // Fix "XHTML"-style tags in all browsers
- elem = elem.replace(rxhtmlTag, "<$1></$2>");
-
- // Trim whitespace, otherwise indexOf won't work as expected
- var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
- wrap = wrapMap[ tag ] || wrapMap._default,
- depth = wrap[0],
- div = context.createElement("div");
-
- // Go to html and back, then peel off extra wrappers
- div.innerHTML = wrap[1] + elem + wrap[2];
-
- // Move to the right depth
- while ( depth-- ) {
- div = div.lastChild;
- }
-
- // Remove IE's autoinserted <tbody> from table fragments
- if ( !jQuery.support.tbody ) {
-
- // String was a <table>, *may* have spurious <tbody>
- var hasBody = rtbody.test(elem),
- tbody = tag === "table" && !hasBody ?
- div.firstChild && div.firstChild.childNodes :
-
- // String was a bare <thead> or <tfoot>
- wrap[1] === "<table>" && !hasBody ?
- div.childNodes :
- [];
-
- for ( j = tbody.length - 1; j >= 0 ; --j ) {
- if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
- tbody[ j ].parentNode.removeChild( tbody[ j ] );
- }
- }
- }
-
- // IE completely kills leading whitespace when innerHTML is used
- if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
- div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
- }
-
- elem = div.childNodes;
- }
- }
-
- // Resets defaultChecked for any radios and checkboxes
- // about to be appended to the DOM in IE 6/7 (#8060)
- var len;
- if ( !jQuery.support.appendChecked ) {
- if ( elem[0] && typeof (len = elem.length) === "number" ) {
- for ( j = 0; j < len; j++ ) {
- findInputs( elem[j] );
- }
- } else {
- findInputs( elem );
- }
- }
-
- if ( elem.nodeType ) {
- ret.push( elem );
- } else {
- ret = jQuery.merge( ret, elem );
- }
- }
-
- if ( fragment ) {
- checkScriptType = function( elem ) {
- return !elem.type || rscriptType.test( elem.type );
- };
- for ( i = 0; ret[i]; i++ ) {
- if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
- scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
-
- } else {
- if ( ret[i].nodeType === 1 ) {
- var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
-
- ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
- }
- fragment.appendChild( ret[i] );
- }
- }
- }
-
- return ret;
- },
-
- cleanData: function( elems ) {
- var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
- deleteExpando = jQuery.support.deleteExpando;
-
- for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
- if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
- continue;
- }
-
- id = elem[ jQuery.expando ];
-
- if ( id ) {
- data = cache[ id ] && cache[ id ][ internalKey ];
-
- if ( data && data.events ) {
- for ( var type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
-
- // Null the DOM reference to avoid IE6/7/8 leak (#7054)
- if ( data.handle ) {
- data.handle.elem = null;
- }
- }
-
- if ( deleteExpando ) {
- delete elem[ jQuery.expando ];
-
- } else if ( elem.removeAttribute ) {
- elem.removeAttribute( jQuery.expando );
- }
-
- delete cache[ id ];
- }
- }
- }
-});
-
-function evalScript( i, elem ) {
- if ( elem.src ) {
- jQuery.ajax({
- url: elem.src,
- async: false,
- dataType: "script"
- });
- } else {
- jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
- }
-
- if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
- }
-}
-
-
-
-
-var ralpha = /alpha\([^)]*\)/i,
- ropacity = /opacity=([^)]*)/,
- // fixed for IE9, see #8346
- rupper = /([A-Z]|^ms)/g,
- rnumpx = /^-?\d+(?:px)?$/i,
- rnum = /^-?\d/,
- rrelNum = /^([\-+])=([\-+.\de]+)/,
-
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssWidth = [ "Left", "Right" ],
- cssHeight = [ "Top", "Bottom" ],
- curCSS,
-
- getComputedStyle,
- currentStyle;
-
-jQuery.fn.css = function( name, value ) {
- // Setting 'undefined' is a no-op
- if ( arguments.length === 2 && value === undefined ) {
- return this;
- }
-
- return jQuery.access( this, name, value, true, function( elem, name, value ) {
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- });
-};
-
-jQuery.extend({
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity", "opacity" );
- return ret === "" ? "1" : ret;
-
- } else {
- return elem.style.opacity;
- }
- }
- }
- },
-
- // Exclude the following css properties to add px
- cssNumber: {
- "fillOpacity": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- // normalize float css property
- "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, origName = jQuery.camelCase( name ),
- style = elem.style, hooks = jQuery.cssHooks[ origName ];
-
- name = jQuery.cssProps[ origName ] || origName;
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // convert relative number strings (+= or -=) to relative numbers. #7345
- if ( type === "string" && (ret = rrelNum.exec( value )) ) {
- value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that NaN and null values aren't set. See: #7116
- if ( value == null || type === "number" && isNaN( value ) ) {
- return;
- }
-
- // If a number was passed in, add 'px' to the (except for certain CSS properties)
- if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
- value += "px";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
- // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
- // Fixes bug #5509
- try {
- style[ name ] = value;
- } catch(e) {}
- }
-
- } else {
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra ) {
- var ret, hooks;
-
- // Make sure that we're working with the right name
- name = jQuery.camelCase( name );
- hooks = jQuery.cssHooks[ name ];
- name = jQuery.cssProps[ name ] || name;
-
- // cssFloat needs a special treatment
- if ( name === "cssFloat" ) {
- name = "float";
- }
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
- return ret;
-
- // Otherwise, if a way to get the computed value exists, use that
- } else if ( curCSS ) {
- return curCSS( elem, name );
- }
- },
-
- // A method for quickly swapping in/out CSS properties to get correct calculations
- swap: function( elem, options, callback ) {
- var old = {};
-
- // Remember the old values, and insert the new ones
- for ( var name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- callback.call( elem );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
- }
-});
-
-// DEPRECATED, Use jQuery.css() instead
-jQuery.curCSS = jQuery.css;
-
-jQuery.each(["height", "width"], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- var val;
-
- if ( computed ) {
- if ( elem.offsetWidth !== 0 ) {
- return getWH( elem, name, extra );
- } else {
- jQuery.swap( elem, cssShow, function() {
- val = getWH( elem, name, extra );
- });
- }
-
- return val;
- }
- },
-
- set: function( elem, value ) {
- if ( rnumpx.test( value ) ) {
- // ignore negative width and height values #1599
- value = parseFloat( value );
-
- if ( value >= 0 ) {
- return value + "px";
- }
-
- } else {
- return value;
- }
- }
- };
-});
-
-if ( !jQuery.support.opacity ) {
- jQuery.cssHooks.opacity = {
- get: function( elem, computed ) {
- // IE uses filters for opacity
- return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
- ( parseFloat( RegExp.$1 ) / 100 ) + "" :
- computed ? "1" : "";
- },
-
- set: function( elem, value ) {
- var style = elem.style,
- currentStyle = elem.currentStyle,
- opacity = jQuery.isNaN( value ) ? "" : "alpha(opacity=" + value * 100 + ")",
- filter = currentStyle && currentStyle.filter || style.filter || "";
-
- // IE has trouble with opacity if it does not have layout
- // Force it by setting the zoom level
- style.zoom = 1;
-
- // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
- if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
-
- // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
- // if "filter:" is present at all, clearType is disabled, we want to avoid this
- // style.removeAttribute is IE Only, but so apparently is this code path...
- style.removeAttribute( "filter" );
-
- // if there there is no filter style applied in a css rule, we are done
- if ( currentStyle && !currentStyle.filter ) {
- return;
- }
- }
-
- // otherwise, set new filter values
- style.filter = ralpha.test( filter ) ?
- filter.replace( ralpha, opacity ) :
- filter + " " + opacity;
- }
- };
-}
-
-jQuery(function() {
- // This hook cannot be added until DOM ready because the support test
- // for it is not run until after DOM ready
- if ( !jQuery.support.reliableMarginRight ) {
- jQuery.cssHooks.marginRight = {
- get: function( elem, computed ) {
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // Work around by temporarily setting element display to inline-block
- var ret;
- jQuery.swap( elem, { "display": "inline-block" }, function() {
- if ( computed ) {
- ret = curCSS( elem, "margin-right", "marginRight" );
- } else {
- ret = elem.style.marginRight;
- }
- });
- return ret;
- }
- };
- }
-});
-
-if ( document.defaultView && document.defaultView.getComputedStyle ) {
- getComputedStyle = function( elem, name ) {
- var ret, defaultView, computedStyle;
-
- name = name.replace( rupper, "-$1" ).toLowerCase();
-
- if ( !(defaultView = elem.ownerDocument.defaultView) ) {
- return undefined;
- }
-
- if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
- ret = computedStyle.getPropertyValue( name );
- if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
- ret = jQuery.style( elem, name );
- }
- }
-
- return ret;
- };
-}
-
-if ( document.documentElement.currentStyle ) {
- currentStyle = function( elem, name ) {
- var left,
- ret = elem.currentStyle && elem.currentStyle[ name ],
- rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
- style = elem.style;
-
- // From the awesome hack by Dean Edwards
- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
- // If we're not dealing with a regular pixel number
- // but a number that has a weird ending, we need to convert it to pixels
- if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
- // Remember the original values
- left = style.left;
-
- // Put in the new values to get a computed value out
- if ( rsLeft ) {
- elem.runtimeStyle.left = elem.currentStyle.left;
- }
- style.left = name === "fontSize" ? "1em" : (ret || 0);
- ret = style.pixelLeft + "px";
-
- // Revert the changed values
- style.left = left;
- if ( rsLeft ) {
- elem.runtimeStyle.left = rsLeft;
- }
- }
-
- return ret === "" ? "auto" : ret;
- };
-}
-
-curCSS = getComputedStyle || currentStyle;
-
-function getWH( elem, name, extra ) {
-
- // Start with offset property
- var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
- which = name === "width" ? cssWidth : cssHeight;
-
- if ( val > 0 ) {
- if ( extra !== "border" ) {
- jQuery.each( which, function() {
- if ( !extra ) {
- val -= parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
- }
- if ( extra === "margin" ) {
- val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
- } else {
- val -= parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
- }
- });
- }
-
- return val + "px";
- }
-
- // Fall back to computed then uncomputed css if necessary
- val = curCSS( elem, name, name );
- if ( val < 0 || val == null ) {
- val = elem.style[ name ] || 0;
- }
- // Normalize "", auto, and prepare for extra
- val = parseFloat( val ) || 0;
-
- // Add padding, border, margin
- if ( extra ) {
- jQuery.each( which, function() {
- val += parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
- if ( extra !== "padding" ) {
- val += parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
- }
- if ( extra === "margin" ) {
- val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
- }
- });
- }
-
- return val + "px";
-}
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.hidden = function( elem ) {
- var width = elem.offsetWidth,
- height = elem.offsetHeight;
-
- return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
- };
-
- jQuery.expr.filters.visible = function( elem ) {
- return !jQuery.expr.filters.hidden( elem );
- };
-}
-
-
-
-
-var r20 = /%20/g,
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rhash = /#.*$/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
- rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
- rquery = /\?/,
- rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
- rselectTextarea = /^(?:select|textarea)/i,
- rspacesAjax = /\s+/,
- rts = /([?&])_=[^&]*/,
- rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
-
- // Keep a copy of the old load method
- _load = jQuery.fn.load,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Document location
- ajaxLocation,
-
- // Document location segments
- ajaxLocParts,
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = ["*/"] + ["*"];
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
- ajaxLocation = location.href;
-} catch( e ) {
- // Use the href attribute of an A element
- // since IE will modify it given document.location
- ajaxLocation = document.createElement( "a" );
- ajaxLocation.href = "";
- ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- if ( jQuery.isFunction( func ) ) {
- var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
- i = 0,
- length = dataTypes.length,
- dataType,
- list,
- placeBefore;
-
- // For each dataType in the dataTypeExpression
- for(; i < length; i++ ) {
- dataType = dataTypes[ i ];
- // We control if we're asked to add before
- // any existing element
- placeBefore = /^\+/.test( dataType );
- if ( placeBefore ) {
- dataType = dataType.substr( 1 ) || "*";
- }
- list = structure[ dataType ] = structure[ dataType ] || [];
- // then we add to the structure accordingly
- list[ placeBefore ? "unshift" : "push" ]( func );
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
- dataType /* internal */, inspected /* internal */ ) {
-
- dataType = dataType || options.dataTypes[ 0 ];
- inspected = inspected || {};
-
- inspected[ dataType ] = true;
-
- var list = structure[ dataType ],
- i = 0,
- length = list ? list.length : 0,
- executeOnly = ( structure === prefilters ),
- selection;
-
- for(; i < length && ( executeOnly || !selection ); i++ ) {
- selection = list[ i ]( options, originalOptions, jqXHR );
- // If we got redirected to another dataType
- // we try there if executing only and not done already
- if ( typeof selection === "string" ) {
- if ( !executeOnly || inspected[ selection ] ) {
- selection = undefined;
- } else {
- options.dataTypes.unshift( selection );
- selection = inspectPrefiltersOrTransports(
- structure, options, originalOptions, jqXHR, selection, inspected );
- }
- }
- }
- // If we're only executing or nothing was selected
- // we try the catchall dataType if not done already
- if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
- selection = inspectPrefiltersOrTransports(
- structure, options, originalOptions, jqXHR, "*", inspected );
- }
- // unnecessary when only executing (prefilters)
- // but it'll be ignored by the caller in that case
- return selection;
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var key, deep,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
- for( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-}
-
-jQuery.fn.extend({
- load: function( url, params, callback ) {
- if ( typeof url !== "string" && _load ) {
- return _load.apply( this, arguments );
-
- // Don't do a request if no elements are being requested
- } else if ( !this.length ) {
- return this;
- }
-
- var off = url.indexOf( " " );
- if ( off >= 0 ) {
- var selector = url.slice( off, url.length );
- url = url.slice( 0, off );
- }
-
- // Default to a GET request
- var type = "GET";
-
- // If the second parameter was provided
- if ( params ) {
- // If it's a function
- if ( jQuery.isFunction( params ) ) {
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( typeof params === "object" ) {
- params = jQuery.param( params, jQuery.ajaxSettings.traditional );
- type = "POST";
- }
- }
-
- var self = this;
-
- // Request the remote document
- jQuery.ajax({
- url: url,
- type: type,
- dataType: "html",
- data: params,
- // Complete callback (responseText is used internally)
- complete: function( jqXHR, status, responseText ) {
- // Store the response as specified by the jqXHR object
- responseText = jqXHR.responseText;
- // If successful, inject the HTML into all the matched elements
- if ( jqXHR.isResolved() ) {
- // #4825: Get the actual response in case
- // a dataFilter is present in ajaxSettings
- jqXHR.done(function( r ) {
- responseText = r;
- });
- // See if a selector was specified
- self.html( selector ?
- // Create a dummy div to hold the results
- jQuery("<div>")
- // inject the contents of the document in, removing the scripts
- // to avoid any 'Permission Denied' errors in IE
- .append(responseText.replace(rscript, ""))
-
- // Locate the specified elements
- .find(selector) :
-
- // If not, just inject the full result
- responseText );
- }
-
- if ( callback ) {
- self.each( callback, [ responseText, status, jqXHR ] );
- }
- }
- });
-
- return this;
- },
-
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
-
- serializeArray: function() {
- return this.map(function(){
- return this.elements ? jQuery.makeArray( this.elements ) : this;
- })
- .filter(function(){
- return this.name && !this.disabled &&
- ( this.checked || rselectTextarea.test( this.nodeName ) ||
- rinput.test( this.type ) );
- })
- .map(function( i, elem ){
- var val = jQuery( this ).val();
-
- return val == null ?
- null :
- jQuery.isArray( val ) ?
- jQuery.map( val, function( val, i ){
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }) :
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }).get();
- }
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
- jQuery.fn[ o ] = function( f ){
- return this.bind( o, f );
- };
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
- // shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- return jQuery.ajax({
- type: method,
- url: url,
- data: data,
- success: callback,
- dataType: type
- });
- };
-});
-
-jQuery.extend({
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- if ( settings ) {
- // Building a settings object
- ajaxExtend( target, jQuery.ajaxSettings );
- } else {
- // Extending ajaxSettings
- settings = target;
- target = jQuery.ajaxSettings;
- }
- ajaxExtend( target, settings );
- return target;
- },
-
- ajaxSettings: {
- url: ajaxLocation,
- isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
- global: true,
- type: "GET",
- contentType: "application/x-www-form-urlencoded",
- processData: true,
- async: true,
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- xml: "application/xml, text/xml",
- html: "text/html",
- text: "text/plain",
- json: "application/json, text/javascript",
- "*": allTypes
- },
-
- contents: {
- xml: /xml/,
- html: /html/,
- json: /json/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText"
- },
-
- // List of data converters
- // 1) key format is "source_type destination_type" (a single space in-between)
- // 2) the catchall symbol "*" can be used for source_type
- converters: {
-
- // Convert anything to text
- "* text": window.String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": jQuery.parseJSON,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- context: true,
- url: true
- }
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
- // Callbacks context
- callbackContext = s.context || s,
- // Context for global events
- // It's the callbackContext if one was provided in the options
- // and if it's a DOM node or a jQuery collection
- globalEventContext = callbackContext !== s &&
- ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
- jQuery( callbackContext ) : jQuery.event,
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery._Deferred(),
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
- // ifModified key
- ifModifiedKey,
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
- // Response headers
- responseHeadersString,
- responseHeaders,
- // transport
- transport,
- // timeout handle
- timeoutTimer,
- // Cross-domain detection vars
- parts,
- // The jqXHR state
- state = 0,
- // To know if global events are to be dispatched
- fireGlobals,
- // Loop variable
- i,
- // Fake xhr
- jqXHR = {
-
- readyState: 0,
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- if ( !state ) {
- var lname = name.toLowerCase();
- name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return state === 2 ? responseHeadersString : null;
- },
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( state === 2 ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while( ( match = rheaders.exec( responseHeadersString ) ) ) {
- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match === undefined ? null : match;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( !state ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- statusText = statusText || "abort";
- if ( transport ) {
- transport.abort( statusText );
- }
- done( 0, statusText );
- return this;
- }
- };
-
- // Callback for when everything is done
- // It is defined here because jslint complains if it is declared
- // at the end of the function (which would be more logical and readable)
- function done( status, nativeStatusText, responses, headers ) {
-
- // Called once
- if ( state === 2 ) {
- return;
- }
-
- // State is "done" now
- state = 2;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- var isSuccess,
- success,
- error,
- statusText = nativeStatusText,
- response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
- lastModified,
- etag;
-
- // If successful, handle type chaining
- if ( status >= 200 && status < 300 || status === 304 ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
-
- if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
- jQuery.lastModified[ ifModifiedKey ] = lastModified;
- }
- if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
- jQuery.etag[ ifModifiedKey ] = etag;
- }
- }
-
- // If not modified
- if ( status === 304 ) {
-
- statusText = "notmodified";
- isSuccess = true;
-
- // If we have data
- } else {
-
- try {
- success = ajaxConvert( s, response );
- statusText = "success";
- isSuccess = true;
- } catch(e) {
- // We have a parsererror
- statusText = "parsererror";
- error = e;
- }
- }
- } else {
- // We extract error from statusText
- // then normalize statusText and status for non-aborts
- error = statusText;
- if( !statusText || status ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = "" + ( nativeStatusText || statusText );
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger( "ajaxStop" );
- }
- }
- }
-
- // Attach deferreds
- deferred.promise( jqXHR );
- jqXHR.success = jqXHR.done;
- jqXHR.error = jqXHR.fail;
- jqXHR.complete = completeDeferred.done;
-
- // Status-dependent callbacks
- jqXHR.statusCode = function( map ) {
- if ( map ) {
- var tmp;
- if ( state < 2 ) {
- for( tmp in map ) {
- statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
- }
- } else {
- tmp = map[ jqXHR.status ];
- jqXHR.then( tmp, tmp );
- }
- }
- return this;
- };
-
- // Remove hash character (#7531: and string promotion)
- // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
- // We also use the url parameter if available
- s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
- // Extract dataTypes list
- s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
-
- // Determine if a cross-domain request is in order
- if ( s.crossDomain == null ) {
- parts = rurl.exec( s.url.toLowerCase() );
- s.crossDomain = !!( parts &&
- ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
- );
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefiler, stop there
- if ( state === 2 ) {
- return false;
- }
-
- // We can fire global events as of now if asked to
- fireGlobals = s.global;
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger( "ajaxStart" );
- }
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // If data is available, append data to url
- if ( s.data ) {
- s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Get ifModifiedKey before adding the anti-cache parameter
- ifModifiedKey = s.url;
-
- // Add anti-cache in url if needed
- if ( s.cache === false ) {
-
- var ts = jQuery.now(),
- // try replacing _= if it is there
- ret = s.url.replace( rts, "$1_=" + ts );
-
- // if nothing was replaced, add timestamp to the end
- s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- ifModifiedKey = ifModifiedKey || s.url;
- if ( jQuery.lastModified[ ifModifiedKey ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
- }
- if ( jQuery.etag[ ifModifiedKey ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
- }
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
- s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
- // Abort if not done already
- jqXHR.abort();
- return false;
-
- }
-
- // Install callbacks on deferreds
- for ( i in { success: 1, error: 1, complete: 1 } ) {
- jqXHR[ i ]( s[ i ] );
- }
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = setTimeout( function(){
- jqXHR.abort( "timeout" );
- }, s.timeout );
- }
-
- try {
- state = 1;
- transport.send( requestHeaders, done );
- } catch (e) {
- // Propagate exception as error if not done
- if ( state < 2 ) {
- done( -1, e );
- // Simply rethrow otherwise
- } else {
- jQuery.error( e );
- }
- }
- }
-
- return jqXHR;
- },
-
- // Serialize an array of form elements or a set of
- // key/values into a query string
- param: function( a, traditional ) {
- var s = [],
- add = function( key, value ) {
- // If value is a function, invoke it and return its value
- value = jQuery.isFunction( value ) ? value() : value;
- s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
- };
-
- // Set traditional to true for jQuery <= 1.3.2 behavior.
- if ( traditional === undefined ) {
- traditional = jQuery.ajaxSettings.traditional;
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- });
-
- } else {
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( var prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" ).replace( r20, "+" );
- }
-});
-
-function buildParams( prefix, obj, traditional, add ) {
- if ( jQuery.isArray( obj ) ) {
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
- // If array item is non-scalar (array or object), encode its
- // numeric index to resolve deserialization ambiguity issues.
- // Note that rack (as of 1.0.0) can't currently deserialize
- // nested arrays properly, and attempting to do so may cause
- // a server error. Possible fixes are to modify rack's
- // deserialization algorithm or to provide an option or flag
- // to force array serialization to be shallow.
- buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
- }
- });
-
- } else if ( !traditional && obj != null && typeof obj === "object" ) {
- // Serialize object item.
- for ( var name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-
-// This is still on the jQuery object... for now
-// Want to move this to jQuery.ajax some day
-jQuery.extend({
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {}
-
-});
-
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
- var contents = s.contents,
- dataTypes = s.dataTypes,
- responseFields = s.responseFields,
- ct,
- type,
- finalDataType,
- firstDataType;
-
- // Fill responseXXX fields
- for( type in responseFields ) {
- if ( type in responses ) {
- jqXHR[ responseFields[type] ] = responses[ type ];
- }
- }
-
- // Remove auto dataType and get content-type in the process
- while( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
-
- // Apply the dataFilter if provided
- if ( s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- var dataTypes = s.dataTypes,
- converters = {},
- i,
- key,
- length = dataTypes.length,
- tmp,
- // Current and previous dataTypes
- current = dataTypes[ 0 ],
- prev,
- // Conversion expression
- conversion,
- // Conversion function
- conv,
- // Conversion functions (transitive conversion)
- conv1,
- conv2;
-
- // For each dataType in the chain
- for( i = 1; i < length; i++ ) {
-
- // Create converters map
- // with lowercased keys
- if ( i === 1 ) {
- for( key in s.converters ) {
- if( typeof key === "string" ) {
- converters[ key.toLowerCase() ] = s.converters[ key ];
- }
- }
- }
-
- // Get the dataTypes
- prev = current;
- current = dataTypes[ i ];
-
- // If current is auto dataType, update it to prev
- if( current === "*" ) {
- current = prev;
- // If no auto and dataTypes are actually different
- } else if ( prev !== "*" && prev !== current ) {
-
- // Get the converter
- conversion = prev + " " + current;
- conv = converters[ conversion ] || converters[ "* " + current ];
-
- // If there is no direct converter, search transitively
- if ( !conv ) {
- conv2 = undefined;
- for( conv1 in converters ) {
- tmp = conv1.split( " " );
- if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
- conv2 = converters[ tmp[1] + " " + current ];
- if ( conv2 ) {
- conv1 = converters[ conv1 ];
- if ( conv1 === true ) {
- conv = conv2;
- } else if ( conv2 === true ) {
- conv = conv1;
- }
- break;
- }
- }
- }
- }
- // If we found no converter, dispatch an error
- if ( !( conv || conv2 ) ) {
- jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
- }
- // If found converter is not an equivalence
- if ( conv !== true ) {
- // Convert with 1 or 2 converters accordingly
- response = conv ? conv( response ) : conv2( conv1(response) );
- }
- }
- }
- return response;
-}
-
-
-
-
-var jsc = jQuery.now(),
- jsre = /(\=)\?(&|$)|\?\?/i;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
- jsonp: "callback",
- jsonpCallback: function() {
- return jQuery.expando + "_" + ( jsc++ );
- }
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
- ( typeof s.data === "string" );
-
- if ( s.dataTypes[ 0 ] === "jsonp" ||
- s.jsonp !== false && ( jsre.test( s.url ) ||
- inspectData && jsre.test( s.data ) ) ) {
-
- var responseContainer,
- jsonpCallback = s.jsonpCallback =
- jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
- previous = window[ jsonpCallback ],
- url = s.url,
- data = s.data,
- replace = "$1" + jsonpCallback + "$2";
-
- if ( s.jsonp !== false ) {
- url = url.replace( jsre, replace );
- if ( s.url === url ) {
- if ( inspectData ) {
- data = data.replace( jsre, replace );
- }
- if ( s.data === data ) {
- // Add callback manually
- url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
- }
- }
- }
-
- s.url = url;
- s.data = data;
-
- // Install callback
- window[ jsonpCallback ] = function( response ) {
- responseContainer = [ response ];
- };
-
- // Clean-up function
- jqXHR.always(function() {
- // Set callback back to previous value
- window[ jsonpCallback ] = previous;
- // Call if it was a function and we have a response
- if ( responseContainer && jQuery.isFunction( previous ) ) {
- window[ jsonpCallback ]( responseContainer[ 0 ] );
- }
- });
-
- // Use data converter to retrieve json after script execution
- s.converters["script json"] = function() {
- if ( !responseContainer ) {
- jQuery.error( jsonpCallback + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Delegate to script
- return "script";
- }
-});
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
- accepts: {
- script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /javascript|ecmascript/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- s.global = false;
- }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
- // This transport only deals with cross domain requests
- if ( s.crossDomain ) {
-
- var script,
- head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
-
- return {
-
- send: function( _, callback ) {
-
- script = document.createElement( "script" );
-
- script.async = "async";
-
- if ( s.scriptCharset ) {
- script.charset = s.scriptCharset;
- }
-
- script.src = s.url;
-
- // Attach handlers for all browsers
- script.onload = script.onreadystatechange = function( _, isAbort ) {
-
- if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
- // Handle memory leak in IE
- script.onload = script.onreadystatechange = null;
-
- // Remove the script
- if ( head && script.parentNode ) {
- head.removeChild( script );
- }
-
- // Dereference the script
- script = undefined;
-
- // Callback if not abort
- if ( !isAbort ) {
- callback( 200, "success" );
- }
- }
- };
- // Use insertBefore instead of appendChild to circumvent an IE6 bug.
- // This arises when a base node is used (#2709 and #4378).
- head.insertBefore( script, head.firstChild );
- },
-
- abort: function() {
- if ( script ) {
- script.onload( 0, 1 );
- }
- }
- };
- }
-});
-
-
-
-
-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
- xhrOnUnloadAbort = window.ActiveXObject ? function() {
- // Abort all pending requests
- for ( var key in xhrCallbacks ) {
- xhrCallbacks[ key ]( 0, 1 );
- }
- } : false,
- xhrId = 0,
- xhrCallbacks;
-
-// Functions to create xhrs
-function createStandardXHR() {
- try {
- return new window.XMLHttpRequest();
- } catch( e ) {}
-}
-
-function createActiveXHR() {
- try {
- return new window.ActiveXObject( "Microsoft.XMLHTTP" );
- } catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
- /* Microsoft failed to properly
- * implement the XMLHttpRequest in IE7 (can't request local files),
- * so we use the ActiveXObject when it is available
- * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
- * we need a fallback.
- */
- function() {
- return !this.isLocal && createStandardXHR() || createActiveXHR();
- } :
- // For all other browsers, use the standard XMLHttpRequest object
- createStandardXHR;
-
-// Determine support properties
-(function( xhr ) {
- jQuery.extend( jQuery.support, {
- ajax: !!xhr,
- cors: !!xhr && ( "withCredentials" in xhr )
- });
-})( jQuery.ajaxSettings.xhr() );
-
-// Create transport if the browser can provide an xhr
-if ( jQuery.support.ajax ) {
-
- jQuery.ajaxTransport(function( s ) {
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( !s.crossDomain || jQuery.support.cors ) {
-
- var callback;
-
- return {
- send: function( headers, complete ) {
-
- // Get a new xhr
- var xhr = s.xhr(),
- handle,
- i;
-
- // Open the socket
- // Passing null username, generates a login popup on Opera (#2865)
- if ( s.username ) {
- xhr.open( s.type, s.url, s.async, s.username, s.password );
- } else {
- xhr.open( s.type, s.url, s.async );
- }
-
- // Apply custom fields if provided
- if ( s.xhrFields ) {
- for ( i in s.xhrFields ) {
- xhr[ i ] = s.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( s.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( s.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !s.crossDomain && !headers["X-Requested-With"] ) {
- headers[ "X-Requested-With" ] = "XMLHttpRequest";
- }
-
- // Need an extra try/catch for cross domain requests in Firefox 3
- try {
- for ( i in headers ) {
- xhr.setRequestHeader( i, headers[ i ] );
- }
- } catch( _ ) {}
-
- // Do send the request
- // This may raise an exception which is actually
- // handled in jQuery.ajax (so no try/catch here)
- xhr.send( ( s.hasContent && s.data ) || null );
-
- // Listener
- callback = function( _, isAbort ) {
-
- var status,
- statusText,
- responseHeaders,
- responses,
- xml;
-
- // Firefox throws exceptions when accessing properties
- // of an xhr when a network error occured
- // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
- try {
-
- // Was never called and is aborted or complete
- if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
- // Only called once
- callback = undefined;
-
- // Do not keep as active anymore
- if ( handle ) {
- xhr.onreadystatechange = jQuery.noop;
- if ( xhrOnUnloadAbort ) {
- delete xhrCallbacks[ handle ];
- }
- }
-
- // If it's an abort
- if ( isAbort ) {
- // Abort it manually if needed
- if ( xhr.readyState !== 4 ) {
- xhr.abort();
- }
- } else {
- status = xhr.status;
- responseHeaders = xhr.getAllResponseHeaders();
- responses = {};
- xml = xhr.responseXML;
-
- // Construct response list
- if ( xml && xml.documentElement /* #4958 */ ) {
- responses.xml = xml;
- }
- responses.text = xhr.responseText;
-
- // Firefox throws an exception when accessing
- // statusText for faulty cross-domain requests
- try {
- statusText = xhr.statusText;
- } catch( e ) {
- // We normalize with Webkit giving an empty statusText
- statusText = "";
- }
-
- // Filter status for non standard behaviors
-
- // If the request is local and we have data: assume a success
- // (success with no data won't get notified, that's the best we
- // can do given current implementations)
- if ( !status && s.isLocal && !s.crossDomain ) {
- status = responses.text ? 200 : 404;
- // IE - #1450: sometimes returns 1223 when it should be 204
- } else if ( status === 1223 ) {
- status = 204;
- }
- }
- }
- } catch( firefoxAccessException ) {
- if ( !isAbort ) {
- complete( -1, firefoxAccessException );
- }
- }
-
- // Call complete if needed
- if ( responses ) {
- complete( status, statusText, responses, responseHeaders );
- }
- };
-
- // if we're in sync mode or it's in cache
- // and has been retrieved directly (IE6 & IE7)
- // we need to manually fire the callback
- if ( !s.async || xhr.readyState === 4 ) {
- callback();
- } else {
- handle = ++xhrId;
- if ( xhrOnUnloadAbort ) {
- // Create the active xhrs callbacks list if needed
- // and attach the unload handler
- if ( !xhrCallbacks ) {
- xhrCallbacks = {};
- jQuery( window ).unload( xhrOnUnloadAbort );
- }
- // Add to list of active xhrs callbacks
- xhrCallbacks[ handle ] = callback;
- }
- xhr.onreadystatechange = callback;
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback(0,1);
- }
- }
- };
- }
- });
-}
-
-
-
-
-var elemdisplay = {},
- iframe, iframeDoc,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
- timerId,
- fxAttrs = [
- // height animations
- [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
- // width animations
- [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
- // opacity animations
- [ "opacity" ]
- ],
- fxNow;
-
-jQuery.fn.extend({
- show: function( speed, easing, callback ) {
- var elem, display;
-
- if ( speed || speed === 0 ) {
- return this.animate( genFx("show", 3), speed, easing, callback);
-
- } else {
- for ( var i = 0, j = this.length; i < j; i++ ) {
- elem = this[i];
-
- if ( elem.style ) {
- display = elem.style.display;
-
- // Reset the inline display of this element to learn if it is
- // being hidden by cascaded rules or not
- if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
- display = elem.style.display = "";
- }
-
- // Set elements which have been overridden with display: none
- // in a stylesheet to whatever the default browser style is
- // for such an element
- if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
- jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
- }
- }
- }
-
- // Set the display of most of the elements in a second loop
- // to avoid the constant reflow
- for ( i = 0; i < j; i++ ) {
- elem = this[i];
-
- if ( elem.style ) {
- display = elem.style.display;
-
- if ( display === "" || display === "none" ) {
- elem.style.display = jQuery._data(elem, "olddisplay") || "";
- }
- }
- }
-
- return this;
- }
- },
-
- hide: function( speed, easing, callback ) {
- if ( speed || speed === 0 ) {
- return this.animate( genFx("hide", 3), speed, easing, callback);
-
- } else {
- for ( var i = 0, j = this.length; i < j; i++ ) {
- if ( this[i].style ) {
- var display = jQuery.css( this[i], "display" );
-
- if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
- jQuery._data( this[i], "olddisplay", display );
- }
- }
- }
-
- // Set the display of the elements in a second loop
- // to avoid the constant reflow
- for ( i = 0; i < j; i++ ) {
- if ( this[i].style ) {
- this[i].style.display = "none";
- }
- }
-
- return this;
- }
- },
-
- // Save the old toggle function
- _toggle: jQuery.fn.toggle,
-
- toggle: function( fn, fn2, callback ) {
- var bool = typeof fn === "boolean";
-
- if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
- this._toggle.apply( this, arguments );
-
- } else if ( fn == null || bool ) {
- this.each(function() {
- var state = bool ? fn : jQuery(this).is(":hidden");
- jQuery(this)[ state ? "show" : "hide" ]();
- });
-
- } else {
- this.animate(genFx("toggle", 3), fn, fn2, callback);
- }
-
- return this;
- },
-
- fadeTo: function( speed, to, easing, callback ) {
- return this.filter(":hidden").css("opacity", 0).show().end()
- .animate({opacity: to}, speed, easing, callback);
- },
-
- animate: function( prop, speed, easing, callback ) {
- var optall = jQuery.speed(speed, easing, callback);
-
- if ( jQuery.isEmptyObject( prop ) ) {
- return this.each( optall.complete, [ false ] );
- }
-
- // Do not change referenced properties as per-property easing will be lost
- prop = jQuery.extend( {}, prop );
-
- return this[ optall.queue === false ? "each" : "queue" ](function() {
- // XXX 'this' does not always have a nodeName when running the
- // test suite
-
- if ( optall.queue === false ) {
- jQuery._mark( this );
- }
-
- var opt = jQuery.extend( {}, optall ),
- isElement = this.nodeType === 1,
- hidden = isElement && jQuery(this).is(":hidden"),
- name, val, p,
- display, e,
- parts, start, end, unit;
-
- // will store per property easing and be used to determine when an animation is complete
- opt.animatedProperties = {};
-
- for ( p in prop ) {
-
- // property name normalization
- name = jQuery.camelCase( p );
- if ( p !== name ) {
- prop[ name ] = prop[ p ];
- delete prop[ p ];
- }
-
- val = prop[ name ];
-
- // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
- if ( jQuery.isArray( val ) ) {
- opt.animatedProperties[ name ] = val[ 1 ];
- val = prop[ name ] = val[ 0 ];
- } else {
- opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
- }
-
- if ( val === "hide" && hidden || val === "show" && !hidden ) {
- return opt.complete.call( this );
- }
-
- if ( isElement && ( name === "height" || name === "width" ) ) {
- // Make sure that nothing sneaks out
- // Record all 3 overflow attributes because IE does not
- // change the overflow attribute when overflowX and
- // overflowY are set to the same value
- opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
-
- // Set display property to inline-block for height/width
- // animations on inline elements that are having width/height
- // animated
- if ( jQuery.css( this, "display" ) === "inline" &&
- jQuery.css( this, "float" ) === "none" ) {
- if ( !jQuery.support.inlineBlockNeedsLayout ) {
- this.style.display = "inline-block";
-
- } else {
- display = defaultDisplay( this.nodeName );
-
- // inline-level elements accept inline-block;
- // block-level elements need to be inline with layout
- if ( display === "inline" ) {
- this.style.display = "inline-block";
-
- } else {
- this.style.display = "inline";
- this.style.zoom = 1;
- }
- }
- }
- }
- }
-
- if ( opt.overflow != null ) {
- this.style.overflow = "hidden";
- }
-
- for ( p in prop ) {
- e = new jQuery.fx( this, opt, p );
- val = prop[ p ];
-
- if ( rfxtypes.test(val) ) {
- e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
-
- } else {
- parts = rfxnum.exec( val );
- start = e.cur();
-
- if ( parts ) {
- end = parseFloat( parts[2] );
- unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
-
- // We need to compute starting value
- if ( unit !== "px" ) {
- jQuery.style( this, p, (end || 1) + unit);
- start = ((end || 1) / e.cur()) * start;
- jQuery.style( this, p, start + unit);
- }
-
- // If a +=/-= token was provided, we're doing a relative animation
- if ( parts[1] ) {
- end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
- }
-
- e.custom( start, end, unit );
-
- } else {
- e.custom( start, val, "" );
- }
- }
- }
-
- // For JS strict compliance
- return true;
- });
- },
-
- stop: function( clearQueue, gotoEnd ) {
- if ( clearQueue ) {
- this.queue([]);
- }
-
- this.each(function() {
- var timers = jQuery.timers,
- i = timers.length;
- // clear marker counters if we know they won't be
- if ( !gotoEnd ) {
- jQuery._unmark( true, this );
- }
- while ( i-- ) {
- if ( timers[i].elem === this ) {
- if (gotoEnd) {
- // force the next step to be the last
- timers[i](true);
- }
-
- timers.splice(i, 1);
- }
- }
- });
-
- // start the next in the queue if the last step wasn't forced
- if ( !gotoEnd ) {
- this.dequeue();
- }
-
- return this;
- }
-
-});
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- setTimeout( clearFxNow, 0 );
- return ( fxNow = jQuery.now() );
-}
-
-function clearFxNow() {
- fxNow = undefined;
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, num ) {
- var obj = {};
-
- jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
- obj[ this ] = type;
- });
-
- return obj;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
- slideDown: genFx("show", 1),
- slideUp: genFx("hide", 1),
- slideToggle: genFx("toggle", 1),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-});
-
-jQuery.extend({
- speed: function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
- };
-
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
- opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
-
- // Queueing
- opt.old = opt.complete;
- opt.complete = function( noUnmark ) {
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue !== false ) {
- jQuery.dequeue( this );
- } else if ( noUnmark !== false ) {
- jQuery._unmark( this );
- }
- };
-
- return opt;
- },
-
- easing: {
- linear: function( p, n, firstNum, diff ) {
- return firstNum + diff * p;
- },
- swing: function( p, n, firstNum, diff ) {
- return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
- }
- },
-
- timers: [],
-
- fx: function( elem, options, prop ) {
- this.options = options;
- this.elem = elem;
- this.prop = prop;
-
- options.orig = options.orig || {};
- }
-
-});
-
-jQuery.fx.prototype = {
- // Simple function for setting a style value
- update: function() {
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
- },
-
- // Get the current size
- cur: function() {
- if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
- return this.elem[ this.prop ];
- }
-
- var parsed,
- r = jQuery.css( this.elem, this.prop );
- // Empty strings, null, undefined and "auto" are converted to 0,
- // complex values such as "rotate(1rad)" are returned as is,
- // simple values such as "10px" are parsed to Float.
- return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
- },
-
- // Start an animation from one number to another
- custom: function( from, to, unit ) {
- var self = this,
- fx = jQuery.fx;
-
- this.startTime = fxNow || createFxNow();
- this.start = from;
- this.end = to;
- this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
- this.now = this.start;
- this.pos = this.state = 0;
-
- function t( gotoEnd ) {
- return self.step(gotoEnd);
- }
-
- t.elem = this.elem;
-
- if ( t() && jQuery.timers.push(t) && !timerId ) {
- timerId = setInterval( fx.tick, fx.interval );
- }
- },
-
- // Simple 'show' function
- show: function() {
- // Remember where we started, so that we can go back to it later
- this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
- this.options.show = true;
-
- // Begin the animation
- // Make sure that we start at a small width/height to avoid any
- // flash of content
- this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
-
- // Start by showing the element
- jQuery( this.elem ).show();
- },
-
- // Simple 'hide' function
- hide: function() {
- // Remember where we started, so that we can go back to it later
- this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
- this.options.hide = true;
-
- // Begin the animation
- this.custom(this.cur(), 0);
- },
-
- // Each step of an animation
- step: function( gotoEnd ) {
- var t = fxNow || createFxNow(),
- done = true,
- elem = this.elem,
- options = this.options,
- i, n;
-
- if ( gotoEnd || t >= options.duration + this.startTime ) {
- this.now = this.end;
- this.pos = this.state = 1;
- this.update();
-
- options.animatedProperties[ this.prop ] = true;
-
- for ( i in options.animatedProperties ) {
- if ( options.animatedProperties[i] !== true ) {
- done = false;
- }
- }
-
- if ( done ) {
- // Reset the overflow
- if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
-
- jQuery.each( [ "", "X", "Y" ], function (index, value) {
- elem.style[ "overflow" + value ] = options.overflow[index];
- });
- }
-
- // Hide the element if the "hide" operation was done
- if ( options.hide ) {
- jQuery(elem).hide();
- }
-
- // Reset the properties, if the item has been hidden or shown
- if ( options.hide || options.show ) {
- for ( var p in options.animatedProperties ) {
- jQuery.style( elem, p, options.orig[p] );
- }
- }
-
- // Execute the complete function
- options.complete.call( elem );
- }
-
- return false;
-
- } else {
- // classical easing cannot be used with an Infinity duration
- if ( options.duration == Infinity ) {
- this.now = t;
- } else {
- n = t - this.startTime;
- this.state = n / options.duration;
-
- // Perform the easing function, defaults to swing
- this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration );
- this.now = this.start + ((this.end - this.start) * this.pos);
- }
- // Perform the next step of the animation
- this.update();
- }
-
- return true;
- }
-};
-
-jQuery.extend( jQuery.fx, {
- tick: function() {
- for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) {
- if ( !timers[i]() ) {
- timers.splice(i--, 1);
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- },
-
- interval: 13,
-
- stop: function() {
- clearInterval( timerId );
- timerId = null;
- },
-
- speeds: {
- slow: 600,
- fast: 200,
- // Default speed
- _default: 400
- },
-
- step: {
- opacity: function( fx ) {
- jQuery.style( fx.elem, "opacity", fx.now );
- },
-
- _default: function( fx ) {
- if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
- fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
- } else {
- fx.elem[ fx.prop ] = fx.now;
- }
- }
- }
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.animated = function( elem ) {
- return jQuery.grep(jQuery.timers, function( fn ) {
- return elem === fn.elem;
- }).length;
- };
-}
-
-// Try to restore the default display value of an element
-function defaultDisplay( nodeName ) {
-
- if ( !elemdisplay[ nodeName ] ) {
-
- var body = document.body,
- elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
- display = elem.css( "display" );
-
- elem.remove();
-
- // If the simple way fails,
- // get element's real default display by attaching it to a temp iframe
- if ( display === "none" || display === "" ) {
- // No iframe to use yet, so create it
- if ( !iframe ) {
- iframe = document.createElement( "iframe" );
- iframe.frameBorder = iframe.width = iframe.height = 0;
- }
-
- body.appendChild( iframe );
-
- // Create a cacheable copy of the iframe document on first call.
- // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
- // document to it; WebKit & Firefox won't allow reusing the iframe document.
- if ( !iframeDoc || !iframe.createElement ) {
- iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
- iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
- iframeDoc.close();
- }
-
- elem = iframeDoc.createElement( nodeName );
-
- iframeDoc.body.appendChild( elem );
-
- display = jQuery.css( elem, "display" );
-
- body.removeChild( iframe );
- }
-
- // Store the correct default display
- elemdisplay[ nodeName ] = display;
- }
-
- return elemdisplay[ nodeName ];
-}
-
-
-
-
-var rtable = /^t(?:able|d|h)$/i,
- rroot = /^(?:body|html)$/i;
-
-if ( "getBoundingClientRect" in document.documentElement ) {
- jQuery.fn.offset = function( options ) {
- var elem = this[0], box;
-
- if ( options ) {
- return this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- if ( !elem || !elem.ownerDocument ) {
- return null;
- }
-
- if ( elem === elem.ownerDocument.body ) {
- return jQuery.offset.bodyOffset( elem );
- }
-
- try {
- box = elem.getBoundingClientRect();
- } catch(e) {}
-
- var doc = elem.ownerDocument,
- docElem = doc.documentElement;
-
- // Make sure we're not dealing with a disconnected DOM node
- if ( !box || !jQuery.contains( docElem, elem ) ) {
- return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
- }
-
- var body = doc.body,
- win = getWindow(doc),
- clientTop = docElem.clientTop || body.clientTop || 0,
- clientLeft = docElem.clientLeft || body.clientLeft || 0,
- scrollTop = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop,
- scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
- top = box.top + scrollTop - clientTop,
- left = box.left + scrollLeft - clientLeft;
-
- return { top: top, left: left };
- };
-
-} else {
- jQuery.fn.offset = function( options ) {
- var elem = this[0];
-
- if ( options ) {
- return this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- if ( !elem || !elem.ownerDocument ) {
- return null;
- }
-
- if ( elem === elem.ownerDocument.body ) {
- return jQuery.offset.bodyOffset( elem );
- }
-
- jQuery.offset.initialize();
-
- var computedStyle,
- offsetParent = elem.offsetParent,
- prevOffsetParent = elem,
- doc = elem.ownerDocument,
- docElem = doc.documentElement,
- body = doc.body,
- defaultView = doc.defaultView,
- prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
- top = elem.offsetTop,
- left = elem.offsetLeft;
-
- while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
- if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
- break;
- }
-
- computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
- top -= elem.scrollTop;
- left -= elem.scrollLeft;
-
- if ( elem === offsetParent ) {
- top += elem.offsetTop;
- left += elem.offsetLeft;
-
- if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
- top += parseFloat( computedStyle.borderTopWidth ) || 0;
- left += parseFloat( computedStyle.borderLeftWidth ) || 0;
- }
-
- prevOffsetParent = offsetParent;
- offsetParent = elem.offsetParent;
- }
-
- if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
- top += parseFloat( computedStyle.borderTopWidth ) || 0;
- left += parseFloat( computedStyle.borderLeftWidth ) || 0;
- }
-
- prevComputedStyle = computedStyle;
- }
-
- if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
- top += body.offsetTop;
- left += body.offsetLeft;
- }
-
- if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
- top += Math.max( docElem.scrollTop, body.scrollTop );
- left += Math.max( docElem.scrollLeft, body.scrollLeft );
- }
-
- return { top: top, left: left };
- };
-}
-
-jQuery.offset = {
- initialize: function() {
- var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
- html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
-
- jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
-
- container.innerHTML = html;
- body.insertBefore( container, body.firstChild );
- innerDiv = container.firstChild;
- checkDiv = innerDiv.firstChild;
- td = innerDiv.nextSibling.firstChild.firstChild;
-
- this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
- this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
-
- checkDiv.style.position = "fixed";
- checkDiv.style.top = "20px";
-
- // safari subtracts parent border width here which is 5px
- this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
- checkDiv.style.position = checkDiv.style.top = "";
-
- innerDiv.style.overflow = "hidden";
- innerDiv.style.position = "relative";
-
- this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
-
- this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
-
- body.removeChild( container );
- jQuery.offset.initialize = jQuery.noop;
- },
-
- bodyOffset: function( body ) {
- var top = body.offsetTop,
- left = body.offsetLeft;
-
- jQuery.offset.initialize();
-
- if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
- top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
- left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
- }
-
- return { top: top, left: left };
- },
-
- setOffset: function( elem, options, i ) {
- var position = jQuery.css( elem, "position" );
-
- // set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- var curElem = jQuery( elem ),
- curOffset = curElem.offset(),
- curCSSTop = jQuery.css( elem, "top" ),
- curCSSLeft = jQuery.css( elem, "left" ),
- calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
- props = {}, curPosition = {}, curTop, curLeft;
-
- // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( jQuery.isFunction( options ) ) {
- options = options.call( elem, i, curOffset );
- }
-
- if (options.top != null) {
- props.top = (options.top - curOffset.top) + curTop;
- }
- if (options.left != null) {
- props.left = (options.left - curOffset.left) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
- } else {
- curElem.css( props );
- }
- }
-};
-
-
-jQuery.fn.extend({
- position: function() {
- if ( !this[0] ) {
- return null;
- }
-
- var elem = this[0],
-
- // Get *real* offsetParent
- offsetParent = this.offsetParent(),
-
- // Get correct offsets
- offset = this.offset(),
- parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
-
- // Subtract element margins
- // note: when an element has margin: auto the offsetLeft and marginLeft
- // are the same in Safari causing offset.left to incorrectly be 0
- offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
- offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
-
- // Add offsetParent borders
- parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
- parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
-
- // Subtract the two offsets
- return {
- top: offset.top - parentOffset.top,
- left: offset.left - parentOffset.left
- };
- },
-
- offsetParent: function() {
- return this.map(function() {
- var offsetParent = this.offsetParent || document.body;
- while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
- offsetParent = offsetParent.offsetParent;
- }
- return offsetParent;
- });
- }
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( ["Left", "Top"], function( i, name ) {
- var method = "scroll" + name;
-
- jQuery.fn[ method ] = function( val ) {
- var elem, win;
-
- if ( val === undefined ) {
- elem = this[ 0 ];
-
- if ( !elem ) {
- return null;
- }
-
- win = getWindow( elem );
-
- // Return the scroll offset
- return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
- jQuery.support.boxModel && win.document.documentElement[ method ] ||
- win.document.body[ method ] :
- elem[ method ];
- }
-
- // Set the scroll offset
- return this.each(function() {
- win = getWindow( this );
-
- if ( win ) {
- win.scrollTo(
- !i ? val : jQuery( win ).scrollLeft(),
- i ? val : jQuery( win ).scrollTop()
- );
-
- } else {
- this[ method ] = val;
- }
- });
- };
-});
-
-function getWindow( elem ) {
- return jQuery.isWindow( elem ) ?
- elem :
- elem.nodeType === 9 ?
- elem.defaultView || elem.parentWindow :
- false;
-}
-
-
-
-
-// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
-jQuery.each([ "Height", "Width" ], function( i, name ) {
-
- var type = name.toLowerCase();
-
- // innerHeight and innerWidth
- jQuery.fn[ "inner" + name ] = function() {
- var elem = this[0];
- return elem && elem.style ?
- parseFloat( jQuery.css( elem, type, "padding" ) ) :
- null;
- };
-
- // outerHeight and outerWidth
- jQuery.fn[ "outer" + name ] = function( margin ) {
- var elem = this[0];
- return elem && elem.style ?
- parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
- null;
- };
-
- jQuery.fn[ type ] = function( size ) {
- // Get window width or height
- var elem = this[0];
- if ( !elem ) {
- return size == null ? null : this;
- }
-
- if ( jQuery.isFunction( size ) ) {
- return this.each(function( i ) {
- var self = jQuery( this );
- self[ type ]( size.call( this, i, self[ type ]() ) );
- });
- }
-
- if ( jQuery.isWindow( elem ) ) {
- // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
- // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
- var docElemProp = elem.document.documentElement[ "client" + name ],
- body = elem.document.body;
- return elem.document.compatMode === "CSS1Compat" && docElemProp ||
- body && body[ "client" + name ] || docElemProp;
-
- // Get document width or height
- } else if ( elem.nodeType === 9 ) {
- // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
- return Math.max(
- elem.documentElement["client" + name],
- elem.body["scroll" + name], elem.documentElement["scroll" + name],
- elem.body["offset" + name], elem.documentElement["offset" + name]
- );
-
- // Get or set width or height on the element
- } else if ( size === undefined ) {
- var orig = jQuery.css( elem, type ),
- ret = parseFloat( orig );
-
- return jQuery.isNaN( ret ) ? orig : ret;
-
- // Set the width or height on the element (default to pixels if value is unitless)
- } else {
- return this.css( type, typeof size === "string" ? size : size + "px" );
- }
- };
-
-});
-
-
-// Expose jQuery to the global object
-window.jQuery = window.$ = jQuery;
-})(window);
diff --git a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/specs/timeago_spec.js b/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/specs/timeago_spec.js
deleted file mode 100644
index 213354d8..00000000
--- a/wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/specs/timeago_spec.js
+++ /dev/null
@@ -1,322 +0,0 @@
-// Smart Time Ago v0.0.2
-
-// Copyright 2012, Terry Tai, Pragmatic.ly
-// https://pragmatic.ly/
-// Licensed under the MIT license.
-// https://github.com/pragmaticly/smart-time-ago/blob/master/LICENSE
-
-describe("TimeAgo", function(){
- beforeEach(function(){
- TimeAgo = $.fn.timeago.Constructor
- timeAgo = new TimeAgo("time.timeago", {})
- });
-
- describe("constructor", function(){
- it("should contain the startInterval", function(){
- expect(timeAgo.startInterval).toEqual(60000);
- });
- });
-
- describe("#init", function(){
- it("should set $element", function(){
- timeAgo.init("time.timeago", {});
- expect(timeAgo.$element).toEqual($("time.timeago"));
- });
-
- it("should load the options", function(){
- spyOn($, 'extend').andReturn("spy");
- timeAgo.init("time.timeago", {});
- expect(timeAgo.options).toEqual("spy");
- });
-
- it("should call updateTime", function(){
- spyOn(timeAgo, 'updateTime');
- timeAgo.init("time.timeago", {});
- expect(timeAgo.updateTime).toHaveBeenCalled();
- });
-
- it("should call startTimer", function(){
- spyOn(timeAgo, "startTimer");
- timeAgo.init("time.time", {});
- expect(timeAgo.startTimer).toHaveBeenCalled();
- });
- });
-
- describe("#startTimer", function(){
- it("should call setInterval", function(){
- spyOn(window, 'setInterval');
- timeAgo.startTimer();
- expect(window.setInterval).toHaveBeenCalled();
- });
-
- it("should set interval", function(){
- spyOn(window, 'setInterval').andReturn("spy");
- timeAgo.startTimer();
- expect(timeAgo.interval).toEqual("spy");
- });
- });
-
- describe("#stopTimer",function(){
- it("should call clearInterval", function(){
- spyOn(window, 'clearInterval');
- timeAgo.stopTimer();
- expect(window.clearInterval).toHaveBeenCalled();
- });
- });
-
- describe("#restartTimer", function(){
- it("should call stopTimer", function(){
- spyOn(timeAgo, 'stopTimer');
- timeAgo.restartTimer();
- expect(timeAgo.stopTimer).toHaveBeenCalled();
- });
-
- it("should call startTimer", function(){
- spyOn(timeAgo, 'startTimer');
- timeAgo.restartTimer();
- expect(timeAgo.startTimer).toHaveBeenCalled();
- });
- });
-
- describe("#updateTime", function(){
- beforeEach(function(){
- timeLabel = $('<time class="timeago" datetime="2012-07-18T07:51:50Z">about 8 hours ago</time>')
- $('body').append(timeLabel)
- timeAgo = new TimeAgo("time.timeago", {selector: 'time.timeago', attr: 'datetime', dir: 'up', suffix: 'ago'});
- });
-
- afterEach(function(){
- timeLabel.remove()
- });
-
- it("should update the relative time in html", function(){
- spyOn(timeAgo, 'timeAgoInWords').andReturn('about 9 hours ago')
- timeAgo.updateTime();
- expect($('time.timeago').first().html()).toEqual("about 9 hours ago")
- });
- });
-
- describe("#updateInterval", function(){
- beforeEach(function(){
- timeLabel = $('<time class="timeago" datetime="2012-07-18T07:51:50Z">about 8 hours ago</time>')
- $('body').append(timeLabel)
- timeAgo = new TimeAgo("time.timeago", {selector: 'time.timeago', attr: 'datetime', dir: 'up', suffix: 'ago'});
- });
-
- afterEach(function(){
- timeLabel.remove()
- });
-
-
- describe("context: newestTimeInMinutes >= 0 and newestTimeInMinutes <= 45 and @startInterval != 60000", function(){
- beforeEach(function(){
- timeAgo.startInterval = 60000 * 22;
- });
-
- it("should update interval to 60000", function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(2);
- timeAgo.updateInterval();
- expect(timeAgo.startInterval).toEqual(60000);
- });
-
- it("should call restartTimer", function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(2);
- spyOn(timeAgo, 'restartTimer');
- timeAgo.updateInterval();
- expect(timeAgo.restartTimer).toHaveBeenCalled();
- });
- });
-
- describe("context: newestTimeInMinutes >= 45 and newestTimeInMinutes <= 89 and @startInterval != 60000 * 30", function(){
- beforeEach(function(){
- timeAgo.startInterval = 60000;
- });
-
- it("should update interval to 1320000", function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(46);
- timeAgo.updateInterval();
- expect(timeAgo.startInterval).toEqual(1320000);
- });
-
- it("should call restartTimer", function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(46);
- spyOn(timeAgo, 'restartTimer');
- timeAgo.updateInterval();
- expect(timeAgo.restartTimer).toHaveBeenCalled();
- });
- });
-
- describe("context: newestTimeInMinutes >= 90 and newestTimeInMinutes <= 2519 and @startInterval != 60000 * 60", function(){
- beforeEach(function(){
- timeAgo.startInterval = 1320000;
- });
-
- it("should update interval to 1800000", function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(90);
- timeAgo.updateInterval();
- expect(timeAgo.startInterval).toEqual(1800000);
- });
-
- it("should call restartTimer", function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(2519);
- spyOn(timeAgo, 'restartTimer');
- timeAgo.updateInterval();
- expect(timeAgo.restartTimer).toHaveBeenCalled();
- });
- });
-
- describe("context: newestTimeInMinutes >= 2520 and @startInterval != 60000 * 60 * 24", function(){
- beforeEach(function(){
- timeAgo.startInterval = 1800000;
- });
-
- it("should update interval to 43200000", function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(2520);
- timeAgo.updateInterval();
- expect(timeAgo.startInterval).toEqual(43200000);
- });
-
- it("should call restartTimer", function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(100000000);
- spyOn(timeAgo, 'restartTimer');
- timeAgo.updateInterval();
- expect(timeAgo.restartTimer).toHaveBeenCalled();
- });
- });
-
- });
-
-
- describe("#parse", function(){
- beforeEach(function(){
- timeStr = "2012-07-18T07:51:50Z";
- result = timeAgo.parse(timeStr);
- });
-
- it("should get the right time", function(){
- expect(result.toUTCString()).toEqual("Wed, 18 Jul 2012 07:51:50 GMT");
- });
- });
-
- describe("distanceOfTimeInWords", function(){
-
- describe("context: dim == 0", function(){
- beforeEach(function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(0);
- });
- it("should return 'less than a minute'", function(){
- expect(timeAgo.distanceOfTimeInWords(new Date())).toEqual("less than a minute");
- });
- });
-
- describe("context: dim == 1", function(){
- beforeEach(function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(1);
- });
- it("should return '1 minute'", function(){
- expect(timeAgo.distanceOfTimeInWords(new Date())).toEqual("1 minute");
- });
- });
-
- describe("context: dim >= 2 and dim <= 44", function(){
- beforeEach(function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(2);
- });
- it("should return '2 minutes'", function(){
- expect(timeAgo.distanceOfTimeInWords(new Date())).toEqual("2 minutes");
- });
- });
-
- describe("context: dim >= 45 and dim <= 89", function(){
- beforeEach(function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(89);
- });
- it("should return 'about 1 hour'", function(){
- expect(timeAgo.distanceOfTimeInWords(new Date())).toEqual("about 1 hour");
- });
- });
-
- describe("context: dim >= 90 and dim <= 1439", function(){
- beforeEach(function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(120);
- });
- it("should return 'about 2 hours'", function(){
- expect(timeAgo.distanceOfTimeInWords(new Date())).toEqual("about 2 hours");
- });
- });
-
- describe("context: dim >= 1440 and dim <= 2519", function(){
- beforeEach(function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(2519);
- });
- it("should return '1 day'", function(){
- expect(timeAgo.distanceOfTimeInWords(new Date())).toEqual("1 day");
- });
- });
-
- describe("context: dim >= 2520 and dim <= 43199", function(){
- beforeEach(function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(2520);
- });
- it("should return '2 days'", function(){
- expect(timeAgo.distanceOfTimeInWords(new Date())).toEqual("2 days");
- });
- });
-
- describe("context: dim >= 43200 and dim <= 86399", function(){
- beforeEach(function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(86399);
- });
- it("should return 'about 1 month'", function(){
- expect(timeAgo.distanceOfTimeInWords(new Date())).toEqual("about 1 month");
- });
- });
-
- describe("context: dim >= 86400 and dim <= 525599", function(){
- beforeEach(function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(525599);
- });
- it("should return '12 months'", function(){
- expect(timeAgo.distanceOfTimeInWords(new Date())).toEqual("12 months");
- });
- });
-
- describe("context: dim >= 525600 and dim <= 655199", function(){
- beforeEach(function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(525600);
- });
- it("should return 'about 1 year'", function(){
- expect(timeAgo.distanceOfTimeInWords(new Date())).toEqual("about 1 year");
- });
- });
-
- describe("context: dim >= 655200 and dim <= 914399", function(){
- beforeEach(function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(655200);
- });
- it("should return 'over 1 year'", function(){
- expect(timeAgo.distanceOfTimeInWords(new Date())).toEqual("over 1 year");
- });
- });
-
- describe("context: dim >= 914400 and dim <= 1051199", function(){
- beforeEach(function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(914400);
- });
- it("should return 'almost 2 years'", function(){
- expect(timeAgo.distanceOfTimeInWords(new Date())).toEqual("almost 2 years");
- });
- });
-
- describe("context: >= 1051200", function(){
- beforeEach(function(){
- spyOn(timeAgo, 'getTimeDistanceInMinutes').andReturn(1051200);
- });
- it("should return 'almost 2 years'", function(){
- expect(timeAgo.distanceOfTimeInWords(new Date())).toEqual("about 2 years");
- });
- });
-
- });
-
-});
diff --git a/wqflask/wqflask/static/packages/purescript_genome_browser/css/purescript-genetics-browser.css b/wqflask/wqflask/static/packages/purescript_genome_browser/css/purescript-genetics-browser.css
deleted file mode 100644
index 135292ac..00000000
--- a/wqflask/wqflask/static/packages/purescript_genome_browser/css/purescript-genetics-browser.css
+++ /dev/null
@@ -1 +0,0 @@
-body,html{max-width:100%;overflow-x:hidden}#browser{position:absolute;margin:0}#info-line{border:1px solid #aaa;padding:2px;position:absolute;right:0;top:1px;min-width:14%;font-size:9pt}#controls{visibility:hidden;position:absolute;top:4px;left:100px;z-index:1000}#controls>button{border:1px solid #aaa;border-radius:2px;padding-left:6px;padding-right:6px;height:23px;min-width:20px}button#scrollRight,button#zoomIn{margin-left:-2px;margin-right:4px}#infoBox{position:absolute;display:inline-block;z-index:10000;visibility:hidden;padding:5px;border:2px solid grey;border-radius:5%;background-color:#fff;min-height:100px;min-width:10px;max-width:80%;margin-top:9.7em;font-family:sans-serif}#infoBox>div{float:left;margin:1em 1.2em}#infoBox>div>p{margin:.1em} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/purescript_genome_browser/js/purescript-genetics-browser.js b/wqflask/wqflask/static/packages/purescript_genome_browser/js/purescript-genetics-browser.js
deleted file mode 100644
index 26fd2d99..00000000
--- a/wqflask/wqflask/static/packages/purescript_genome_browser/js/purescript-genetics-browser.js
+++ /dev/null
@@ -1,659 +0,0 @@
-parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c<t.length;c++)try{f(t[c])}catch(e){i||(i=e)}if(t.length){var l=f(t[t.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=l:"function"==typeof define&&define.amd?define(function(){return l}):n&&(this[n]=l)}if(parcelRequire=f,i)throw i;return f}({"DuPX":[function(require,module,exports) {
-"use strict";exports.buttonEvent=function(t){return function(n){return function(){document.getElementById(t).addEventListener("click",function(t){n()})}}},exports.keydownEvent=function(t){return function(t){return function(){window.addEventListener("keydown",function(n){t(n)()})}}},exports.resizeEvent=function(t){return function(){var n=null;window.addEventListener("resize",function(){n&&clearTimeout(n),n=setTimeout(function(){n=null,t(exports.windowInnerSize())()},250)},!1)}},exports.windowInnerSize=function(){return{width:window.innerWidth,height:window.innerHeight}},exports.setWindow=function(t){return function(n){return function(){window[t]=n}}},exports.setElementContents=function(t){return function(n){return function(){t.innerHTML=n}}};var t="debugDiv";exports.initDebugDiv=function(n){return function(){var e=document.getElementById("browser"),i=document.getElementById(t);return i||(i=document.createElement("div"),e.appendChild(i)),i.id=t,i.style.position="relative",i.style.left="0.0",i.style.top="0.0",i.style["border-radius"]="50%",i.style.width=2*n+"px",i.style.height=2*n+"px",i.style["z-index"]="100",i.style.backgroundColor="red",i.style["pointer-events"]="none",i.style.display="inline-block",i.style.visibility="hidden",i.dataset.radius=n,i}};var n=function(){var n=document.getElementById(t);return n||initDebugDiv(10)()};exports.setDebugDivVisibility=function(t){return function(){n().style.visibility=t}},exports.setDebugDivPoint=function(t){return function(){var e=n(),i=1|e.dataset.radius,r=t.x-i,o=t.y-2*i;e.style.left=r+"px",e.style.top=o+"px"}};
-},{}],"7nyB":[function(require,module,exports) {
-"use strict";exports.arrayApply=function(r){return function(n){for(var t=r.length,e=n.length,a=new Array(t*e),o=0,u=0;u<t;u++)for(var f=r[u],c=0;c<e;c++)a[o++]=f(n[c]);return a}};
-},{}],"/riR":[function(require,module,exports) {
-"use strict";var n=function(n){this.compose=n},o=new n(function(n){return function(o){return function(r){return n(o(r))}}}),r=function(n){return n.compose},t=function(n){return function(o){return function(t){return r(n)(t)(o)}}};module.exports={compose:r,Semigroupoid:n,composeFlipped:t,semigroupoidFn:o};
-},{}],"IAi2":[function(require,module,exports) {
-"use strict";var i=require("../Control.Semigroupoid/index.js"),t=function(i,t){this.Semigroupoid0=i,this.identity=t},n=function(i){return i.identity},e=new t(function(){return i.semigroupoidFn},function(i){return i});module.exports={Category:t,identity:n,categoryFn:e};
-},{"../Control.Semigroupoid/index.js":"/riR"}],"ObQr":[function(require,module,exports) {
-"use strict";var e=!0;module.exports={otherwise:e};
-},{}],"ImXJ":[function(require,module,exports) {
-"use strict";var n=require("../Data.Boolean/index.js"),r=function(n){return function(r){return function(t){return function(u){return n(r(t))(r(u))}}}},t=function(n){return function(r){return function(t){return n(t)(r)}}},u=function(n){return function(r){return n}},e=function(r){return function(t){return function(u){var e,o=t,i=!1;function c(t,e){if(t<=0)return i=!0,e;if(n.otherwise)return o=t-1|0,void(u=r(e));throw new Error("Failed pattern match at Data.Function (line 94, column 3 - line 96, column 37): "+[t.constructor.name,e.constructor.name])}for(;!i;)e=c(o,u);return e}}},o=function(n){return function(r){return r(n)}},i=function(n){return function(r){return n(r)}};module.exports={flip:t,const:u,apply:i,applyFlipped:o,applyN:e,on:r};
-},{"../Data.Boolean/index.js":"ObQr"}],"0GYo":[function(require,module,exports) {
-"use strict";exports.arrayMap=function(r){return function(n){for(var t=n.length,e=new Array(t),a=0;a<t;a++)e[a]=r(n[a]);return e}};
-},{}],"Nqls":[function(require,module,exports) {
-"use strict";exports.unit={};
-},{}],"qgjE":[function(require,module,exports) {
-"use strict";exports.showIntImpl=function(r){return r.toString()},exports.showNumberImpl=function(r){var t=r.toString();return isNaN(t+".0")?t:t+".0"},exports.showCharImpl=function(r){var t=r.charCodeAt(0);if(t<32||127===t){switch(r){case"":return"'\\a'";case"\b":return"'\\b'";case"\f":return"'\\f'";case"\n":return"'\\n'";case"\r":return"'\\r'";case"\t":return"'\\t'";case"\v":return"'\\v'"}return"'\\"+t.toString(10)+"'"}return"'"===r||"\\"===r?"'\\"+r+"'":"'"+r+"'"},exports.showStringImpl=function(r){var t=r.length;return'"'+r.replace(/[\0-\x1F\x7F"\\]/g,function(n,e){switch(n){case'"':case"\\":return"\\"+n;case"":return"\\a";case"\b":return"\\b";case"\f":return"\\f";case"\n":return"\\n";case"\r":return"\\r";case"\t":return"\\t";case"\v":return"\\v"}var u=e+1,c=u<t&&r[u]>="0"&&r[u]<="9"?"\\&":"";return"\\"+n.charCodeAt(0).toString(10)+c})+'"'},exports.showArrayImpl=function(r){return function(t){for(var n=[],e=0,u=t.length;e<u;e++)n[e]=r(t[e]);return"["+n.join(",")+"]"}},exports.cons=function(r){return function(t){return[r].concat(t)}},exports.join=function(r){return function(t){return t.join(r)}};
-},{}],"AvJb":[function(require,module,exports) {
-"use strict";exports.unsafeCoerce=function(e){return e};
-},{}],"4oJQ":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),n=function(){function e(){}return e.value=new e,e}(),r=function(e){this.reflectSymbol=e},t=function(r){return function(t){return e.unsafeCoerce(function(e){return t(e)})({reflectSymbol:function(e){return r}})(n.value)}},u=function(e){return e.reflectSymbol};module.exports={IsSymbol:r,reflectSymbol:u,reifySymbol:t,SProxy:n};
-},{"./foreign.js":"AvJb"}],"CHMS":[function(require,module,exports) {
-"use strict";exports.unsafeHas=function(n){return function(r){return{}.hasOwnProperty.call(r,n)}},exports.unsafeGet=function(n){return function(r){return r[n]}},exports.unsafeSet=function(n){return function(r){return function(t){var e={};for(var u in t)({}).hasOwnProperty.call(t,u)&&(e[u]=t[u]);return e[n]=r,e}}},exports.unsafeDelete=function(n){return function(r){var t={};for(var e in r)e!==n&&{}.hasOwnProperty.call(r,e)&&(t[e]=r[e]);return t}};
-},{}],"KG04":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js");module.exports={unsafeHas:e.unsafeHas,unsafeGet:e.unsafeGet,unsafeSet:e.unsafeSet,unsafeDelete:e.unsafeDelete};
-},{"./foreign.js":"CHMS"}],"XaXP":[function(require,module,exports) {
-"use strict";var e=function(){function e(){}return e.value=new e,e}();module.exports={RLProxy:e};
-},{}],"mFY7":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),e=require("../Data.Symbol/index.js"),r=require("../Record.Unsafe/index.js"),o=require("../Type.Data.RowList/index.js"),t=function(n){this.showRecordFields=n},u=function(n){this.show=n},i=new u(n.showStringImpl),s=new t(function(n){return function(n){return[]}}),w=function(n){return n.showRecordFields},c=function(e){return function(e){return new u(function(r){var t=w(e)(o.RLProxy.value)(r);return 0===t.length?"{}":n.join(" ")(["{",n.join(", ")(t),"}"])})}},h=new u(n.showNumberImpl),l=new u(n.showIntImpl),a=new u(n.showCharImpl),f=new u(function(n){if(n)return"true";if(!n)return"false";throw new Error("Failed pattern match at Data.Show (line 20, column 1 - line 22, column 23): "+[n.constructor.name])}),d=function(n){return n.show},m=function(e){return new u(n.showArrayImpl(d(e)))},R=function(u){return function(i){return function(s){return new t(function(t){return function(t){var c=w(i)(o.RLProxy.value)(t),h=e.reflectSymbol(u)(e.SProxy.value),l=r.unsafeGet(h)(t);return n.cons(n.join(": ")([h,d(s)(l)]))(c)}})}}};module.exports={Show:u,show:d,ShowRecordFields:t,showRecordFields:w,showBoolean:f,showInt:l,showNumber:h,showChar:a,showString:i,showArray:m,showRecord:c,showRecordFieldsNil:s,showRecordFieldsCons:R};
-},{"./foreign.js":"qgjE","../Data.Symbol/index.js":"4oJQ","../Record.Unsafe/index.js":"KG04","../Type.Data.RowList/index.js":"XaXP"}],"NhVk":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),i=require("../Data.Show/index.js"),n=new i.Show(function(e){return"unit"});module.exports={showUnit:n,unit:e.unit};
-},{"./foreign.js":"Nqls","../Data.Show/index.js":"mFY7"}],"+0AE":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Control.Semigroupoid/index.js"),t=require("../Data.Function/index.js"),u=require("../Data.Unit/index.js"),i=function(n){this.map=n},e=function(n){return n.map},o=function(n){return function(r){return function(t){return e(n)(t)(r)}}},c=function(n){return e(n)(t.const(u.unit))},f=function(n){return function(r){return function(u){return e(n)(t.const(u))(r)}}},a=function(n){return function(r){return e(n)(t.const(r))}},s=new i(r.compose(r.semigroupoidFn)),p=new i(n.arrayMap),d=function(n){return function(r){return function(t){return e(n)(function(n){return n(t)})(r)}}};module.exports={Functor:i,map:e,mapFlipped:o,void:c,voidRight:a,voidLeft:f,flap:d,functorFn:s,functorArray:p};
-},{"./foreign.js":"0GYo","../Control.Semigroupoid/index.js":"/riR","../Data.Function/index.js":"ImXJ","../Data.Unit/index.js":"NhVk"}],"QcLv":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Control.Category/index.js"),t=require("../Data.Function/index.js"),u=require("../Data.Functor/index.js"),o=function(n,r){this.Functor0=n,this.apply=r},e=new o(function(){return u.functorFn},function(n){return function(r){return function(t){return n(t)(r(t))}}}),i=new o(function(){return u.functorArray},n.arrayApply),c=function(n){return n.apply},f=function(n){return function(r){return function(o){return c(n)(u.map(n.Functor0())(t.const)(r))(o)}}},p=function(n){return function(o){return function(e){return c(n)(u.map(n.Functor0())(t.const(r.identity(r.categoryFn)))(o))(e)}}},a=function(n){return function(r){return function(t){return function(o){return c(n)(u.map(n.Functor0())(r)(t))(o)}}}},l=function(n){return function(r){return function(t){return function(o){return function(e){return c(n)(c(n)(u.map(n.Functor0())(r)(t))(o))(e)}}}}},y=function(n){return function(r){return function(t){return function(o){return function(e){return function(i){return c(n)(c(n)(c(n)(u.map(n.Functor0())(r)(t))(o))(e))(i)}}}}}},F=function(n){return function(r){return function(t){return function(o){return function(e){return function(i){return function(f){return c(n)(c(n)(c(n)(c(n)(u.map(n.Functor0())(r)(t))(o))(e))(i))(f)}}}}}}};module.exports={Apply:o,apply:c,applyFirst:f,applySecond:p,lift2:a,lift3:l,lift4:y,lift5:F,applyFn:e,applyArray:i};
-},{"./foreign.js":"7nyB","../Control.Category/index.js":"IAi2","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE"}],"qYya":[function(require,module,exports) {
-"use strict";var n=require("../Control.Apply/index.js"),r=require("../Data.Unit/index.js"),t=function(n,r){this.Apply0=n,this.pure=r},e=function(n){return n.pure},u=function(n){return function(t){return function(u){if(!t)return u;if(t)return e(n)(r.unit);throw new Error("Failed pattern match at Control.Applicative (line 62, column 1 - line 62, column 65): "+[t.constructor.name,u.constructor.name])}}},i=function(n){return function(t){return function(u){if(t)return u;if(!t)return e(n)(r.unit);throw new Error("Failed pattern match at Control.Applicative (line 57, column 1 - line 57, column 63): "+[t.constructor.name,u.constructor.name])}}},o=function(r){return function(t){return function(u){return n.apply(r.Apply0())(e(r)(t))(u)}}},c=new t(function(){return n.applyFn},function(n){return function(r){return n}}),p=new t(function(){return n.applyArray},function(n){return[n]});module.exports={Applicative:t,pure:e,liftA1:o,unless:u,when:i,applicativeFn:c,applicativeArray:p};
-},{"../Control.Apply/index.js":"QcLv","../Data.Unit/index.js":"NhVk"}],"S3W+":[function(require,module,exports) {
-"use strict";exports.arrayBind=function(r){return function(t){for(var n=[],e=0,o=r.length;e<o;e++)Array.prototype.push.apply(n,t(r[e]));return n}};
-},{}],"7VcT":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Category/index.js"),i=require("../Data.Function/index.js"),u=function(n){this.discard=n},e=function(n,r){this.Apply0=n,this.bind=r},o=function(n){return n.discard},c=new e(function(){return r.applyFn},function(n){return function(r){return function(t){return r(n(t))(t)}}}),f=new e(function(){return r.applyArray},n.arrayBind),d=function(n){return n.bind},s=function(n){return i.flip(d(n))},a=function(n){return function(r){return function(t){return function(i){return s(n)(r)(t(i))}}}},p=function(n){return function(r){return function(t){return function(i){return d(n)(r(i))(t)}}}},l=new u(function(n){return d(n)}),y=function(n){return function(r){return function(t){return function(i){return d(n)(r)(function(n){return n?t:i})}}}},b=function(n){return function(r){return d(n)(r)(t.identity(t.categoryFn))}};module.exports={Bind:e,bind:d,bindFlipped:s,Discard:u,discard:o,join:b,composeKleisli:p,composeKleisliFlipped:a,ifM:y,bindFn:c,bindArray:f,discardUnit:l};
-},{"./foreign.js":"S3W+","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Data.Function/index.js":"ImXJ"}],"phTL":[function(require,module,exports) {
-"use strict";exports.concatString=function(n){return function(t){return n+t}},exports.concatArray=function(n){return function(t){return 0===n.length?t:0===t.length?n:n.concat(t)}};
-},{}],"bncE":[function(require,module,exports) {
-"use strict";var r=require("../Data.Show/index.js"),n=function(r){return r},o=function(r){return function(r){var n;for(;;)n=void(r=r);return n}(r)},e=new r.Show(o);module.exports={absurd:o,showVoid:e};
-},{"../Data.Show/index.js":"mFY7"}],"EsAJ":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Data.Symbol/index.js"),e=require("../Data.Unit/index.js"),u=require("../Data.Void/index.js"),t=require("../Record.Unsafe/index.js"),i=require("../Type.Data.RowList/index.js"),o=function(n){this.appendRecord=n},c=function(n){this.append=n},f=new c(function(n){return u.absurd}),a=new c(function(n){return function(n){return e.unit}}),s=new c(n.concatString),p=new o(function(n){return function(n){return function(n){return{}}}}),d=new c(n.concatArray),g=function(n){return n.appendRecord},m=function(n){return function(n){return new c(g(n)(i.RLProxy.value))}},R=function(n){return n.append},w=function(n){return new c(function(r){return function(e){return function(u){return R(n)(r(u))(e(u))}}})},x=function(n){return function(e){return function(e){return function(u){return new o(function(o){return function(o){return function(c){var f=g(e)(i.RLProxy.value)(o)(c),a=r.reflectSymbol(n)(r.SProxy.value),s=t.unsafeSet(a),p=t.unsafeGet(a);return s(R(u)(p(o))(p(c)))(f)}}})}}}};module.exports={Semigroup:c,append:R,SemigroupRecord:o,appendRecord:g,semigroupString:s,semigroupUnit:a,semigroupVoid:f,semigroupFn:w,semigroupArray:d,semigroupRecord:m,semigroupRecordNil:p,semigroupRecordCons:x};
-},{"./foreign.js":"phTL","../Data.Symbol/index.js":"4oJQ","../Data.Unit/index.js":"NhVk","../Data.Void/index.js":"bncE","../Record.Unsafe/index.js":"KG04","../Type.Data.RowList/index.js":"XaXP"}],"lN+m":[function(require,module,exports) {
-"use strict";var r=require("../Data.Functor/index.js"),t=require("../Data.Semigroup/index.js"),e=function(r,t){this.Functor0=r,this.alt=t},n=new e(function(){return r.functorArray},t.append(t.semigroupArray)),u=function(r){return r.alt};module.exports={Alt:e,alt:u,altArray:n};
-},{"../Data.Functor/index.js":"+0AE","../Data.Semigroup/index.js":"EsAJ"}],"oMBg":[function(require,module,exports) {
-"use strict";var t=require("../Control.Alt/index.js"),r=function(t,r){this.Alt0=t,this.empty=r},e=new r(function(){return t.altArray},[]),n=function(t){return t.empty};module.exports={Plus:r,empty:n,plusArray:e};
-},{"../Control.Alt/index.js":"lN+m"}],"aHia":[function(require,module,exports) {
-"use strict";var r=require("../Control.Applicative/index.js"),e=require("../Control.Plus/index.js"),t=function(r,e){this.Applicative0=r,this.Plus1=e},i=new t(function(){return r.applicativeArray},function(){return e.plusArray});module.exports={Alternative:t,alternativeArray:i};
-},{"../Control.Applicative/index.js":"qYya","../Control.Plus/index.js":"oMBg"}],"U/Ix":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),i=require("../Control.Bind/index.js"),r=function(n,i){this.Applicative0=n,this.Bind1=i},t=function(r){return function(t){return function(u){return i.bind(r.Bind1())(t)(function(i){return n.when(r.Applicative0())(i)(u)})}}},u=function(r){return function(t){return function(u){return i.bind(r.Bind1())(t)(function(i){return n.unless(r.Applicative0())(i)(u)})}}},e=new r(function(){return n.applicativeFn},function(){return i.bindFn}),c=new r(function(){return n.applicativeArray},function(){return i.bindArray}),o=function(r){return function(t){return function(u){return i.bind(r.Bind1())(u)(function(i){return n.pure(r.Applicative0())(t(i))})}}},f=function(r){return function(t){return function(u){return i.bind(r.Bind1())(t)(function(t){return i.bind(r.Bind1())(u)(function(i){return n.pure(r.Applicative0())(t(i))})})}}};module.exports={Monad:r,liftM1:o,ap:f,whenM:t,unlessM:u,monadFn:e,monadArray:c};
-},{"../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT"}],"IpNh":[function(require,module,exports) {
-"use strict";var t=function(t,n){this.Monad0=t,this.callCC=n},n=function(t){return t.callCC};module.exports={MonadCont:t,callCC:n};
-},{}],"YFBA":[function(require,module,exports) {
-"use strict";exports.arrayExtend=function(n){return function(r){return r.map(function(r,t,e){return n(e.slice(t))})}};
-},{}],"JIoJ":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Control.Category/index.js"),t=require("../Data.Functor/index.js"),e=require("../Data.Semigroup/index.js"),u=function(n,r){this.Functor0=n,this.extend=r},i=function(n){return new u(function(){return t.functorFn},function(r){return function(t){return function(u){return r(function(r){return t(e.append(n)(u)(r))})}}})},o=new u(function(){return t.functorArray},n.arrayExtend),c=function(n){return n.extend},f=function(n){return function(r){return function(t){return c(n)(t)(r)}}},d=function(n){return c(n)(r.identity(r.categoryFn))},a=function(n){return function(r){return function(t){return function(e){return r(c(n)(t)(e))}}}},s=function(n){return function(r){return function(t){return function(e){return t(c(n)(r)(e))}}}};module.exports={Extend:u,extend:c,extendFlipped:f,composeCoKleisli:s,composeCoKleisliFlipped:a,duplicate:d,extendFn:i,extendArray:o};
-},{"./foreign.js":"YFBA","../Control.Category/index.js":"IAi2","../Data.Functor/index.js":"+0AE","../Data.Semigroup/index.js":"EsAJ"}],"kY6E":[function(require,module,exports) {
-"use strict";exports.foldrArray=function(r){return function(n){return function(t){for(var u=n,o=t.length-1;o>=0;o--)u=r(t[o])(u);return u}}},exports.foldlArray=function(r){return function(n){return function(t){for(var u=n,o=t.length,e=0;e<o;e++)u=r(u)(t[e]);return u}}};
-},{}],"h7nC":[function(require,module,exports) {
-"use strict";var r=function(r){return function(e){return r===e}};exports.eqBooleanImpl=r,exports.eqIntImpl=r,exports.eqNumberImpl=r,exports.eqCharImpl=r,exports.eqStringImpl=r,exports.eqArrayImpl=function(r){return function(e){return function(t){if(e===t)return!0;if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(!r(e[n])(t[n]))return!1;return!0}}};
-},{}],"Pq4F":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),e=require("../Data.Symbol/index.js"),r=require("../Record.Unsafe/index.js"),t=require("../Type.Data.RowList/index.js"),u=function(n){this.eqRecord=n},o=function(n){this.eq1=n},i=function(n){this.eq=n},c=new i(function(n){return function(n){return!0}}),q=new i(function(n){return function(n){return!0}}),f=new i(n.eqStringImpl),a=new u(function(n){return function(n){return function(n){return!0}}}),l=function(n){return n.eqRecord},w=function(n){return function(n){return new i(l(n)(t.RLProxy.value))}},s=new i(n.eqNumberImpl),m=new i(n.eqIntImpl),R=new i(n.eqCharImpl),d=new i(n.eqBooleanImpl),y=function(n){return n.eq1},p=function(n){return n.eq},I=function(e){return new i(n.eqArrayImpl(p(e)))},x=new o(function(n){return p(I(n))}),h=function(n){return function(o){return function(o){return function(i){return new u(function(u){return function(u){return function(c){var q=l(n)(t.RLProxy.value)(u)(c),f=e.reflectSymbol(o)(e.SProxy.value),a=r.unsafeGet(f);return p(i)(a(u))(a(c))&&q}}})}}}},v=function(n){return function(e){return function(r){return p(d)(p(n)(e)(r))(!1)}}},E=function(n){return function(e){return function(r){return function(t){return p(d)(y(n)(e)(r)(t))(!1)}}}};module.exports={Eq:i,eq:p,notEq:v,Eq1:o,eq1:y,notEq1:E,EqRecord:u,eqRecord:l,eqBoolean:d,eqInt:m,eqNumber:s,eqChar:R,eqString:f,eqUnit:q,eqVoid:c,eqArray:I,eqRec:w,eq1Array:x,eqRowNil:a,eqRowCons:h};
-},{"./foreign.js":"h7nC","../Data.Symbol/index.js":"4oJQ","../Record.Unsafe/index.js":"KG04","../Type.Data.RowList/index.js":"XaXP"}],"7fWM":[function(require,module,exports) {
-"use strict";exports.boolConj=function(n){return function(o){return n&&o}},exports.boolDisj=function(n){return function(o){return n||o}},exports.boolNot=function(n){return!n};
-},{}],"ukdD":[function(require,module,exports) {
-"use strict";var e=function(){function e(){}return e.value=new e,e}();module.exports={RProxy:e};
-},{}],"paZe":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Data.Symbol/index.js"),t=require("../Data.Unit/index.js"),e=require("../Record.Unsafe/index.js"),u=require("../Type.Data.Row/index.js"),o=require("../Type.Data.RowList/index.js"),i=function(n,r,t,e,u,o){this.conjRecord=n,this.disjRecord=r,this.ffRecord=t,this.impliesRecord=e,this.notRecord=u,this.ttRecord=o},c=function(n,r,t,e,u,o){this.conj=n,this.disj=r,this.ff=t,this.implies=e,this.not=u,this.tt=o},f=function(n){return n.ttRecord},a=function(n){return n.tt},l=function(n){return n.notRecord},s=function(n){return n.not},R=function(n){return n.impliesRecord},y=function(n){return n.implies},d=new c(function(n){return function(n){return t.unit}},function(n){return function(n){return t.unit}},t.unit,function(n){return function(n){return t.unit}},function(n){return t.unit},t.unit),v=new i(function(n){return function(n){return function(n){return{}}}},function(n){return function(n){return function(n){return{}}}},function(n){return function(n){return{}}},function(n){return function(n){return function(n){return{}}}},function(n){return function(n){return{}}},function(n){return function(n){return{}}}),x=function(n){return n.ffRecord},j=function(n){return n.ff},P=function(n){return n.disjRecord},S=function(n){return n.disj},b=new c(n.boolConj,n.boolDisj,!1,function(n){return function(r){return S(b)(s(b)(n))(r)}},n.boolNot,!0),h=function(n){return n.conjRecord},g=function(n){return function(n){return new c(h(n)(o.RLProxy.value),P(n)(o.RLProxy.value),x(n)(o.RLProxy.value)(u.RProxy.value),R(n)(o.RLProxy.value),l(n)(o.RLProxy.value),f(n)(o.RLProxy.value)(u.RProxy.value))}},m=function(n){return n.conj},L=function(n){return new c(function(r){return function(t){return function(e){return m(n)(r(e))(t(e))}}},function(r){return function(t){return function(e){return S(n)(r(e))(t(e))}}},function(r){return j(n)},function(r){return function(t){return function(e){return y(n)(r(e))(t(e))}}},function(r){return function(t){return s(n)(r(t))}},function(r){return a(n)})},p=function(n){return function(t){return function(t){return function(u){return new i(function(i){return function(i){return function(c){var f=h(t)(o.RLProxy.value)(i)(c),a=r.reflectSymbol(n)(r.SProxy.value),l=e.unsafeSet(a),s=e.unsafeGet(a);return l(m(u)(s(i))(s(c)))(f)}}},function(i){return function(i){return function(c){var f=P(t)(o.RLProxy.value)(i)(c),a=r.reflectSymbol(n)(r.SProxy.value),l=e.unsafeSet(a),s=e.unsafeGet(a);return l(S(u)(s(i))(s(c)))(f)}}},function(i){return function(i){var c=x(t)(o.RLProxy.value)(i),f=r.reflectSymbol(n)(r.SProxy.value);return e.unsafeSet(f)(j(u))(c)}},function(i){return function(i){return function(c){var f=R(t)(o.RLProxy.value)(i)(c),a=r.reflectSymbol(n)(r.SProxy.value),l=e.unsafeSet(a),s=e.unsafeGet(a);return l(y(u)(s(i))(s(c)))(f)}}},function(i){return function(i){var c=l(t)(o.RLProxy.value)(i),f=r.reflectSymbol(n)(r.SProxy.value),a=e.unsafeSet(f),R=e.unsafeGet(f);return a(s(u)(R(i)))(c)}},function(i){return function(i){var c=f(t)(o.RLProxy.value)(i),l=r.reflectSymbol(n)(r.SProxy.value);return e.unsafeSet(l)(a(u))(c)}})}}}};module.exports={HeytingAlgebra:c,tt:a,ff:j,implies:y,conj:m,disj:S,not:s,HeytingAlgebraRecord:i,ffRecord:x,ttRecord:f,impliesRecord:R,conjRecord:h,disjRecord:P,notRecord:l,heytingAlgebraBoolean:b,heytingAlgebraUnit:d,heytingAlgebraFunction:L,heytingAlgebraRecord:g,heytingAlgebraRecordNil:v,heytingAlgebraRecordCons:p};
-},{"./foreign.js":"7fWM","../Data.Symbol/index.js":"4oJQ","../Data.Unit/index.js":"NhVk","../Record.Unsafe/index.js":"KG04","../Type.Data.Row/index.js":"ukdD","../Type.Data.RowList/index.js":"XaXP"}],"lD5R":[function(require,module,exports) {
-"use strict";var r=require("../Control.Alternative/index.js"),e=require("../Control.Applicative/index.js"),n=require("../Control.Monad/index.js"),t=require("../Control.Plus/index.js"),i=require("../Data.Unit/index.js"),o=function(r,e){this.Alternative1=r,this.Monad0=e},a=new o(function(){return r.alternativeArray},function(){return n.monadArray}),u=function(r){return function(n){if(n)return e.pure(r.Alternative1().Applicative0())(i.unit);if(!n)return t.empty(r.Alternative1().Plus1());throw new Error("Failed pattern match at Control.MonadZero (line 54, column 1 - line 54, column 52): "+[n.constructor.name])}};module.exports={MonadZero:o,guard:u,monadZeroArray:a};
-},{"../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Monad/index.js":"U/Ix","../Control.Plus/index.js":"oMBg","../Data.Unit/index.js":"NhVk"}],"0C+G":[function(require,module,exports) {
-"use strict";exports.topInt=2147483647,exports.bottomInt=-2147483648,exports.topChar=String.fromCharCode(65535),exports.bottomChar=String.fromCharCode(0),exports.topNumber=Number.POSITIVE_INFINITY,exports.bottomNumber=Number.NEGATIVE_INFINITY;
-},{}],"m7Aq":[function(require,module,exports) {
-"use strict";var r=function(r){return function(n){return function(t){return function(o){return function(e){return o<e?r:o===e?n:t}}}}};exports.ordBooleanImpl=r,exports.ordIntImpl=r,exports.ordNumberImpl=r,exports.ordStringImpl=r,exports.ordCharImpl=r,exports.ordArrayImpl=function(r){return function(n){return function(t){for(var o=0,e=n.length,u=t.length;o<e&&o<u;){var p=n[o],i=t[o],f=r(p)(i);if(0!==f)return f;o++}return e===u?0:e>u?-1:1}}};
-},{}],"5Eun":[function(require,module,exports) {
-"use strict";var n=require("../Data.Eq/index.js"),e=require("../Data.Semigroup/index.js"),r=require("../Data.Show/index.js"),t=function(){function n(){}return n.value=new n,n}(),i=function(){function n(){}return n.value=new n,n}(),o=function(){function n(){}return n.value=new n,n}(),u=new r.Show(function(n){if(n instanceof t)return"LT";if(n instanceof i)return"GT";if(n instanceof o)return"EQ";throw new Error("Failed pattern match at Data.Ordering (line 26, column 1 - line 29, column 17): "+[n.constructor.name])}),a=new e.Semigroup(function(n){return function(e){if(n instanceof t)return t.value;if(n instanceof i)return i.value;if(n instanceof o)return e;throw new Error("Failed pattern match at Data.Ordering (line 21, column 1 - line 24, column 18): "+[n.constructor.name,e.constructor.name])}}),c=function(n){if(n instanceof i)return t.value;if(n instanceof o)return o.value;if(n instanceof t)return i.value;throw new Error("Failed pattern match at Data.Ordering (line 33, column 1 - line 33, column 31): "+[n.constructor.name])},f=new n.Eq(function(n){return function(e){return n instanceof t&&e instanceof t||(n instanceof i&&e instanceof i||n instanceof o&&e instanceof o)}});module.exports={LT:t,GT:i,EQ:o,invert:c,eqOrdering:f,semigroupOrdering:a,showOrdering:u};
-},{"../Data.Eq/index.js":"Pq4F","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"+BUG":[function(require,module,exports) {
-"use strict";exports.intSub=function(n){return function(t){return n-t|0}},exports.numSub=function(n){return function(t){return n-t}};
-},{}],"Vm8y":[function(require,module,exports) {
-"use strict";exports.intAdd=function(n){return function(t){return n+t|0}},exports.intMul=function(n){return function(t){return n*t|0}},exports.numAdd=function(n){return function(t){return n+t}},exports.numMul=function(n){return function(t){return n*t}};
-},{}],"11NF":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Data.Symbol/index.js"),e=require("../Data.Unit/index.js"),u=require("../Record.Unsafe/index.js"),t=require("../Type.Data.Row/index.js"),o=require("../Type.Data.RowList/index.js"),i=function(n,r,e,u){this.addRecord=n,this.mulRecord=r,this.oneRecord=e,this.zeroRecord=u},c=function(n,r,e,u){this.add=n,this.mul=r,this.one=e,this.zero=u},f=function(n){return n.zeroRecord},a=function(n){return n.zero},d=new c(function(n){return function(n){return e.unit}},function(n){return function(n){return e.unit}},e.unit,e.unit),l=new i(function(n){return function(n){return function(n){return{}}}},function(n){return function(n){return function(n){return{}}}},function(n){return function(n){return{}}},function(n){return function(n){return{}}}),s=new c(n.numAdd,n.numMul,1,0),R=new c(n.intAdd,n.intMul,1,0),m=function(n){return n.oneRecord},y=function(n){return n.one},x=function(n){return n.mulRecord},v=function(n){return n.mul},P=function(n){return n.addRecord},S=function(n){return function(n){return new c(P(n)(o.RLProxy.value),x(n)(o.RLProxy.value),m(n)(o.RLProxy.value)(t.RProxy.value),f(n)(o.RLProxy.value)(t.RProxy.value))}},g=function(n){return n.add},w=function(n){return new c(function(r){return function(e){return function(u){return g(n)(r(u))(e(u))}}},function(r){return function(e){return function(u){return v(n)(r(u))(e(u))}}},function(r){return y(n)},function(r){return a(n)})},L=function(n){return function(e){return function(e){return function(c){return new i(function(t){return function(t){return function(i){var f=P(e)(o.RLProxy.value)(t)(i),a=r.reflectSymbol(n)(r.SProxy.value),d=u.unsafeSet(a),l=u.unsafeGet(a);return d(g(c)(l(t))(l(i)))(f)}}},function(t){return function(t){return function(i){var f=x(e)(o.RLProxy.value)(t)(i),a=r.reflectSymbol(n)(r.SProxy.value),d=u.unsafeSet(a),l=u.unsafeGet(a);return d(v(c)(l(t))(l(i)))(f)}}},function(i){return function(i){var f=m(e)(o.RLProxy.value)(t.RProxy.value),a=r.reflectSymbol(n)(r.SProxy.value);return u.unsafeSet(a)(y(c))(f)}},function(i){return function(i){var d=f(e)(o.RLProxy.value)(t.RProxy.value),l=r.reflectSymbol(n)(r.SProxy.value);return u.unsafeSet(l)(a(c))(d)}})}}}};module.exports={Semiring:c,add:g,zero:a,mul:v,one:y,SemiringRecord:i,addRecord:P,mulRecord:x,oneRecord:m,zeroRecord:f,semiringInt:R,semiringNumber:s,semiringFn:w,semiringUnit:d,semiringRecord:S,semiringRecordNil:l,semiringRecordCons:L};
-},{"./foreign.js":"Vm8y","../Data.Symbol/index.js":"4oJQ","../Data.Unit/index.js":"NhVk","../Record.Unsafe/index.js":"KG04","../Type.Data.Row/index.js":"ukdD","../Type.Data.RowList/index.js":"XaXP"}],"E2qH":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Data.Semiring/index.js"),e=require("../Data.Symbol/index.js"),i=require("../Data.Unit/index.js"),u=require("../Record.Unsafe/index.js"),t=require("../Type.Data.RowList/index.js"),o=function(n,r){this.SemiringRecord0=n,this.subRecord=r},c=function(n,r){this.Semiring0=n,this.sub=r},f=function(n){return n.subRecord},s=function(n){return n.sub},g=new c(function(){return r.semiringUnit},function(n){return function(n){return i.unit}}),m=new o(function(){return r.semiringRecordNil},function(n){return function(n){return function(n){return{}}}}),d=function(n){return function(i){return function(c){return function(g){return new o(function(){return r.semiringRecordCons(n)(i)(c.SemiringRecord0())(g.Semiring0())},function(r){return function(r){return function(i){var o=f(c)(t.RLProxy.value)(r)(i),m=e.reflectSymbol(n)(e.SProxy.value),d=u.unsafeSet(m),R=u.unsafeGet(m);return d(s(g)(R(r))(R(i)))(o)}}})}}}},R=function(n){return function(e){return new c(function(){return r.semiringRecord(n)(e.SemiringRecord0())},f(e)(t.RLProxy.value))}},a=new c(function(){return r.semiringNumber},n.numSub),S=new c(function(){return r.semiringInt},n.intSub),b=function(n){return new c(function(){return r.semiringFn(n.Semiring0())},function(r){return function(e){return function(i){return s(n)(r(i))(e(i))}}})},l=function(n){return function(e){return s(n)(r.zero(n.Semiring0()))(e)}};module.exports={Ring:c,sub:s,negate:l,RingRecord:o,subRecord:f,ringInt:S,ringNumber:a,ringUnit:g,ringFn:b,ringRecord:R,ringRecordNil:m,ringRecordCons:d};
-},{"./foreign.js":"+BUG","../Data.Semiring/index.js":"11NF","../Data.Symbol/index.js":"4oJQ","../Data.Unit/index.js":"NhVk","../Record.Unsafe/index.js":"KG04","../Type.Data.RowList/index.js":"XaXP"}],"r4Vb":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Data.Eq/index.js"),e=require("../Data.Ordering/index.js"),t=require("../Data.Ring/index.js"),u=require("../Data.Semiring/index.js"),o=require("../Data.Symbol/index.js"),i=require("../Record.Unsafe/index.js"),c=require("../Type.Data.RowList/index.js"),a=function(n,r){this.EqRecord0=n,this.compareRecord=r},f=function(n,r){this.Eq10=n,this.compare1=r},l=function(n,r){this.Eq0=n,this.compare=r},s=new l(function(){return r.eqVoid},function(n){return function(n){return e.EQ.value}}),d=new l(function(){return r.eqUnit},function(n){return function(n){return e.EQ.value}}),m=new l(function(){return r.eqString},n.ordStringImpl(e.LT.value)(e.EQ.value)(e.GT.value)),T=new a(function(){return r.eqRowNil},function(n){return function(n){return function(n){return e.EQ.value}}}),v=new l(function(){return e.eqOrdering},function(n){return function(r){if(n instanceof e.LT&&r instanceof e.LT)return e.EQ.value;if(n instanceof e.EQ&&r instanceof e.EQ)return e.EQ.value;if(n instanceof e.GT&&r instanceof e.GT)return e.EQ.value;if(n instanceof e.LT)return e.LT.value;if(n instanceof e.EQ&&r instanceof e.LT)return e.GT.value;if(n instanceof e.EQ&&r instanceof e.GT)return e.LT.value;if(n instanceof e.GT)return e.GT.value;throw new Error("Failed pattern match at Data.Ord (line 112, column 1 - line 119, column 21): "+[n.constructor.name,r.constructor.name])}}),E=new l(function(){return r.eqNumber},n.ordNumberImpl(e.LT.value)(e.EQ.value)(e.GT.value)),q=new l(function(){return r.eqInt},n.ordIntImpl(e.LT.value)(e.EQ.value)(e.GT.value)),w=new l(function(){return r.eqChar},n.ordCharImpl(e.LT.value)(e.EQ.value)(e.GT.value)),p=new l(function(){return r.eqBoolean},n.ordBooleanImpl(e.LT.value)(e.EQ.value)(e.GT.value)),h=function(n){return n.compareRecord},g=function(n){return function(e){return new l(function(){return r.eqRec(n)(e.EqRecord0())},h(e)(c.RLProxy.value))}},L=function(n){return n.compare1},Q=function(n){return n.compare},G=function(n){return function(r){return function(e){return function(t){return Q(n)(r(e))(r(t))}}}},R=function(n){return function(r){return function(t){return Q(n)(r)(t)instanceof e.GT}}},O=function(n){return function(r){return function(t){return!(Q(n)(r)(t)instanceof e.LT)}}},x=function(n){return function(r){return function(e){return O(n)(e)(u.zero(r.Semiring0()))?u.one(r.Semiring0()):t.negate(r)(u.one(r.Semiring0()))}}},y=function(n){return function(r){return function(t){return Q(n)(r)(t)instanceof e.LT}}},S=function(n){return function(r){return function(t){return!(Q(n)(r)(t)instanceof e.GT)}}},D=function(n){return function(r){return function(t){var u=Q(n)(r)(t);if(u instanceof e.LT)return t;if(u instanceof e.EQ)return r;if(u instanceof e.GT)return r;throw new Error("Failed pattern match at Data.Ord (line 167, column 3 - line 170, column 12): "+[u.constructor.name])}}},I=function(n){return function(r){return function(t){var u=Q(n)(r)(t);if(u instanceof e.LT)return r;if(u instanceof e.EQ)return r;if(u instanceof e.GT)return t;throw new Error("Failed pattern match at Data.Ord (line 158, column 3 - line 161, column 12): "+[u.constructor.name])}}},j=function(t){return new l(function(){return r.eqArray(t.Eq0())},(u=function(n){return function(r){var u=Q(t)(n)(r);if(u instanceof e.EQ)return 0;if(u instanceof e.LT)return 1;if(u instanceof e.GT)return-1;throw new Error("Failed pattern match at Data.Ord (line 65, column 7 - line 68, column 17): "+[u.constructor.name])}},function(r){return function(e){return Q(q)(0)(n.ordArrayImpl(u)(r)(e))}}));var u},b=new f(function(){return r.eq1Array},function(n){return Q(j(n))}),A=function(n){return function(t){return function(u){return function(f){return new a(function(){return r.eqRowCons(n.EqRecord0())(t)(u)(f.Eq0())},function(t){return function(t){return function(a){var l=o.reflectSymbol(u)(o.SProxy.value),s=Q(f)(i.unsafeGet(l)(t))(i.unsafeGet(l)(a));return r.notEq(e.eqOrdering)(s)(e.EQ.value)?s:h(n)(c.RLProxy.value)(t)(a)}}})}}}},C=function(n){return function(r){return function(e){return function(t){return I(n)(e)(D(n)(r)(t))}}}},N=function(n){return function(r){return function(e){return function(t){return!y(n)(t)(r)&&!R(n)(t)(e)}}}},F=function(n){return function(r){return function(e){return O(n)(e)(u.zero(r.Semiring0()))?e:t.negate(r)(e)}}};module.exports={Ord:l,compare:Q,Ord1:f,compare1:L,lessThan:y,lessThanOrEq:S,greaterThan:R,greaterThanOrEq:O,comparing:G,min:I,max:D,clamp:C,between:N,abs:F,signum:x,OrdRecord:a,compareRecord:h,ordBoolean:p,ordInt:q,ordNumber:E,ordString:m,ordChar:w,ordUnit:d,ordVoid:s,ordArray:j,ordOrdering:v,ord1Array:b,ordRecordNil:T,ordRecordCons:A,ordRecord:g};
-},{"./foreign.js":"m7Aq","../Data.Eq/index.js":"Pq4F","../Data.Ordering/index.js":"5Eun","../Data.Ring/index.js":"E2qH","../Data.Semiring/index.js":"11NF","../Data.Symbol/index.js":"4oJQ","../Record.Unsafe/index.js":"KG04","../Type.Data.RowList/index.js":"XaXP"}],"kcUU":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),t=require("../Data.Ord/index.js"),r=require("../Data.Ordering/index.js"),e=require("../Data.Unit/index.js"),o=function(n,t,r){this.Ord0=n,this.bottom=t,this.top=r},u=function(n){return n.top},d=new o(function(){return t.ordUnit},e.unit,e.unit),i=new o(function(){return t.ordOrdering},r.LT.value,r.GT.value),b=new o(function(){return t.ordNumber},n.bottomNumber,n.topNumber),a=new o(function(){return t.ordInt},n.bottomInt,n.topInt),m=new o(function(){return t.ordChar},n.bottomChar,n.topChar),c=new o(function(){return t.ordBoolean},!1,!0),f=function(n){return n.bottom};module.exports={Bounded:o,bottom:f,top:u,boundedBoolean:c,boundedInt:a,boundedChar:m,boundedOrdering:i,boundedUnit:d,boundedNumber:b};
-},{"./foreign.js":"0C+G","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Unit/index.js":"NhVk"}],"AXkC":[function(require,module,exports) {
-"use strict";var n=require("../Data.Functor/index.js"),r=function(n){this.imap=n},t=new r(function(n){return function(r){return function(r){return n(r)}}}),i=new r(function(n){return function(r){return function(t){return function(i){return n(t(r(i)))}}}}),u=new r(function(n){return function(r){return function(r){return n(r)}}}),e=new r(function(n){return function(r){return function(r){return n(r)}}}),o=new r(function(n){return function(r){return function(r){return n(r)}}}),a=new r(function(n){return function(r){return function(r){return n(r)}}}),c=function(r){return function(t){return function(i){return n.map(r)(t)}}},f=new r(c(n.functorArray)),v=new r(c(n.functorFn)),w=function(n){return n.imap};module.exports={imap:w,Invariant:r,imapF:c,invariantFn:v,invariantArray:f,invariantAdditive:a,invariantConj:o,invariantDisj:e,invariantDual:u,invariantEndo:i,invariantMultiplicative:t};
-},{"../Data.Functor/index.js":"+0AE"}],"8EBw":[function(require,module,exports) {
-"use strict";exports.intDegree=function(t){return Math.min(Math.abs(t),2147483647)},exports.intDiv=function(t){return function(n){return 0===n?0:n>0?Math.floor(t/n):-Math.floor(t/-n)}},exports.intMod=function(t){return function(n){if(0===n)return 0;var r=Math.abs(n);return(t%r+r)%r}},exports.numDiv=function(t){return function(n){return t/n}};
-},{}],"60TQ":[function(require,module,exports) {
-"use strict";var n=require("../Data.Ring/index.js"),t=function(n){this.RingRecord0=n},i=function(n){this.Ring0=n},r=new i(function(){return n.ringUnit}),e=new t(function(){return n.ringRecordNil}),u=function(i){return function(r){return function(e){return function(u){return new t(function(){return n.ringRecordCons(i)(r)(e.RingRecord0())(u.Ring0())})}}}},o=function(t){return function(r){return new i(function(){return n.ringRecord(t)(r.RingRecord0())})}},c=new i(function(){return n.ringNumber}),R=new i(function(){return n.ringInt}),g=function(t){return new i(function(){return n.ringFn(t.Ring0())})};module.exports={CommutativeRing:i,CommutativeRingRecord:t,commutativeRingInt:R,commutativeRingNumber:c,commutativeRingUnit:r,commutativeRingFn:g,commutativeRingRecord:o,commutativeRingRecordNil:e,commutativeRingRecordCons:u};
-},{"../Data.Ring/index.js":"E2qH"}],"2IRB":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),i=require("../Data.CommutativeRing/index.js"),e=require("../Data.Eq/index.js"),t=require("../Data.Semiring/index.js"),r=function(n,i,e,t){this.CommutativeRing0=n,this.degree=i,this.div=e,this.mod=t},u=function(n){return n.mod},o=function(n){return function(i){return function(r){return function(o){var m,g=n,c=i,f=r,a=!1;function d(n,i,r,m){if(e.eq(n)(m)(t.zero(i.CommutativeRing0().Ring0().Semiring0())))return a=!0,r;g=n,c=i,f=m,o=u(i)(r)(m)}for(;!a;)m=d(g,c,f,o);return m}}}},m=new r(function(){return i.commutativeRingNumber},function(n){return 1},n.numDiv,function(n){return function(n){return 0}}),g=new r(function(){return i.commutativeRingInt},n.intDegree,n.intDiv,n.intMod),c=function(n){return n.div},f=function(n){return function(i){return function(r){return function(u){return e.eq(n)(r)(t.zero(i.CommutativeRing0().Ring0().Semiring0()))||e.eq(n)(u)(t.zero(i.CommutativeRing0().Ring0().Semiring0()))?t.zero(i.CommutativeRing0().Ring0().Semiring0()):c(i)(t.mul(i.CommutativeRing0().Ring0().Semiring0())(r)(u))(o(n)(i)(r)(u))}}}},a=function(n){return n.degree};module.exports={EuclideanRing:r,degree:a,div:c,mod:u,gcd:o,lcm:f,euclideanRingInt:g,euclideanRingNumber:m};
-},{"./foreign.js":"8EBw","../Data.CommutativeRing/index.js":"60TQ","../Data.Eq/index.js":"Pq4F","../Data.Semiring/index.js":"11NF"}],"TiEB":[function(require,module,exports) {
-"use strict";var n=require("../Data.Boolean/index.js"),r=require("../Data.EuclideanRing/index.js"),e=require("../Data.Ordering/index.js"),i=require("../Data.Semigroup/index.js"),o=require("../Data.Symbol/index.js"),t=require("../Data.Unit/index.js"),u=require("../Record.Unsafe/index.js"),c=require("../Type.Data.RowList/index.js"),d=function(n,r){this.SemigroupRecord0=n,this.memptyRecord=r},m=function(n,r){this.Semigroup0=n,this.mempty=r},a=new m(function(){return i.semigroupUnit},t.unit),f=new m(function(){return i.semigroupString},""),p=new d(function(){return i.semigroupRecordNil},function(n){return{}}),s=new m(function(){return e.semigroupOrdering},e.EQ.value),g=new m(function(){return i.semigroupArray},[]),l=function(n){return n.memptyRecord},R=function(n){return function(r){return new m(function(){return i.semigroupRecord(n)(r.SemigroupRecord0())},l(r)(c.RLProxy.value))}},S=function(n){return n.mempty},w=function(n){return new m(function(){return i.semigroupFn(n.Semigroup0())},function(r){return S(n)})},y=function(n){return function(r){return function(e){return function(t){return new d(function(){return i.semigroupRecordCons(n)(e)(t.SemigroupRecord0())(r.Semigroup0())},function(e){var i=l(t)(c.RLProxy.value),d=o.reflectSymbol(n)(o.SProxy.value);return u.unsafeSet(d)(S(r))(i)})}}}},x=function(e){return function(o){return function t(u){if(u<=0)return S(e);if(1===u)return o;if(0===r.mod(r.euclideanRingInt)(u)(2)){var c=t(r.div(r.euclideanRingInt)(u)(2));return i.append(e.Semigroup0())(c)(c)}if(n.otherwise)return c=t(r.div(r.euclideanRingInt)(u)(2)),i.append(e.Semigroup0())(c)(i.append(e.Semigroup0())(c)(o));throw new Error("Failed pattern match at Data.Monoid (line 65, column 3 - line 65, column 17): "+[u.constructor.name])}}},h=function(n){return function(r){return function(e){if(r)return e;if(!r)return S(n);throw new Error("Failed pattern match at Data.Monoid (line 73, column 1 - line 73, column 49): "+[r.constructor.name,e.constructor.name])}}};module.exports={Monoid:m,mempty:S,power:x,guard:h,MonoidRecord:d,memptyRecord:l,monoidUnit:a,monoidOrdering:s,monoidFn:w,monoidString:f,monoidArray:g,monoidRecord:R,monoidRecordNil:p,monoidRecordCons:y};
-},{"../Data.Boolean/index.js":"ObQr","../Data.EuclideanRing/index.js":"2IRB","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Symbol/index.js":"4oJQ","../Data.Unit/index.js":"NhVk","../Record.Unsafe/index.js":"KG04","../Type.Data.RowList/index.js":"XaXP"}],"5mN7":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),e=require("../Control.Alternative/index.js"),t=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),o=require("../Control.Category/index.js"),i=require("../Control.Extend/index.js"),a=require("../Control.Monad/index.js"),c=require("../Control.MonadZero/index.js"),f=require("../Control.Plus/index.js"),l=require("../Data.Bounded/index.js"),s=require("../Data.Eq/index.js"),d=require("../Data.Function/index.js"),m=require("../Data.Functor/index.js"),w=require("../Data.Functor.Invariant/index.js"),y=require("../Data.Monoid/index.js"),p=require("../Data.Ord/index.js"),v=require("../Data.Ordering/index.js"),M=require("../Data.Semigroup/index.js"),b=require("../Data.Show/index.js"),q=require("../Data.Unit/index.js"),x=function(){function n(){}return n.value=new n,n}(),h=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),j=function(n){return new b.Show(function(e){if(e instanceof h)return"(Just "+b.show(n)(e.value0)+")";if(e instanceof x)return"Nothing";throw new Error("Failed pattern match at Data.Maybe (line 205, column 1 - line 207, column 28): "+[e.constructor.name])})},D=function(n){return new M.Semigroup(function(e){return function(t){if(e instanceof x)return t;if(t instanceof x)return e;if(e instanceof h&&t instanceof h)return new h(M.append(n)(e.value0)(t.value0));throw new Error("Failed pattern match at Data.Maybe (line 174, column 1 - line 177, column 43): "+[e.constructor.name,t.constructor.name])}})},F=function(e){return function(r){return n.alt(e.Plus1().Alt0())(m.map(e.Plus1().Alt0().Functor0())(h.create)(r))(t.pure(e.Applicative0())(x.value))}},E=function(n){return new y.Monoid(function(){return D(n)},x.value)},A=function(n){return function(e){return function(t){if(t instanceof x)return n(q.unit);if(t instanceof h)return e(t.value0);throw new Error("Failed pattern match at Data.Maybe (line 230, column 1 - line 230, column 62): "+[n.constructor.name,e.constructor.name,t.constructor.name])}}},C=function(n){return function(e){return function(t){if(t instanceof x)return n;if(t instanceof h)return e(t.value0);throw new Error("Failed pattern match at Data.Maybe (line 217, column 1 - line 217, column 51): "+[n.constructor.name,e.constructor.name,t.constructor.name])}}},g=C(!0)(d.const(!1)),O=C(!1)(d.const(!0)),B=new m.Functor(function(n){return function(e){return e instanceof h?new h(n(e.value0)):x.value}}),J=new w.Invariant(w.imapF(B)),P=function(n){return A(n)(o.identity(o.categoryFn))},S=function(n){return C(n)(o.identity(o.categoryFn))},N=function(n){return function(n){if(n instanceof h)return n.value0;throw new Error("Failed pattern match at Data.Maybe (line 268, column 1 - line 268, column 46): "+[n.constructor.name])}},Z=new i.Extend(function(){return B},function(n){return function(e){return e instanceof x?x.value:new h(n(e))}}),I=function(n){return new s.Eq(function(e){return function(t){return e instanceof x&&t instanceof x||e instanceof h&&t instanceof h&&s.eq(n)(e.value0)(t.value0)}})},T=function(n){return new p.Ord(function(){return I(n.Eq0())},function(e){return function(t){if(e instanceof x&&t instanceof x)return v.EQ.value;if(e instanceof x)return v.LT.value;if(t instanceof x)return v.GT.value;if(e instanceof h&&t instanceof h)return p.compare(n)(e.value0)(t.value0);throw new Error("Failed pattern match at Data.Maybe (line 194, column 1 - line 194, column 51): "+[e.constructor.name,t.constructor.name])}})},G=new s.Eq1(function(n){return s.eq(I(n))}),L=new p.Ord1(function(){return G},function(n){return p.compare(T(n))}),Q=function(n){return new l.Bounded(function(){return T(n.Ord0())},x.value,new h(l.top(n)))},U=new r.Apply(function(){return B},function(n){return function(e){if(n instanceof h)return m.map(B)(n.value0)(e);if(n instanceof x)return x.value;throw new Error("Failed pattern match at Data.Maybe (line 67, column 1 - line 69, column 30): "+[n.constructor.name,e.constructor.name])}}),k=new u.Bind(function(){return U},function(n){return function(e){if(n instanceof h)return e(n.value0);if(n instanceof x)return x.value;throw new Error("Failed pattern match at Data.Maybe (line 125, column 1 - line 127, column 28): "+[n.constructor.name,e.constructor.name])}}),z=new t.Applicative(function(){return U},h.create),H=new a.Monad(function(){return z},function(){return k}),K=new n.Alt(function(){return B},function(n){return function(e){return n instanceof x?e:n}}),R=new f.Plus(function(){return K},x.value),V=new e.Alternative(function(){return z},function(){return R}),W=new c.MonadZero(function(){return V},function(){return H});module.exports={Nothing:x,Just:h,maybe:C,"maybe'":A,fromMaybe:S,"fromMaybe'":P,isJust:O,isNothing:g,fromJust:N,optional:F,functorMaybe:B,applyMaybe:U,applicativeMaybe:z,altMaybe:K,plusMaybe:R,alternativeMaybe:V,bindMaybe:k,monadMaybe:H,monadZeroMaybe:W,extendMaybe:Z,invariantMaybe:J,semigroupMaybe:D,monoidMaybe:E,eqMaybe:I,eq1Maybe:G,ordMaybe:T,ord1Maybe:L,boundedMaybe:Q,showMaybe:j};
-},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Extend/index.js":"JIoJ","../Control.Monad/index.js":"U/Ix","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Bounded/index.js":"kcUU","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Functor.Invariant/index.js":"AXkC","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Unit/index.js":"NhVk"}],"U/G5":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),e=require("../Control.Bind/index.js"),t=require("../Control.Monad/index.js"),o=require("../Data.Eq/index.js"),u=require("../Data.Functor/index.js"),i=require("../Data.HeytingAlgebra/index.js"),c=require("../Data.Monoid/index.js"),f=require("../Data.Ord/index.js"),j=require("../Data.Semigroup/index.js"),d=require("../Data.Semiring/index.js"),a=require("../Data.Show/index.js"),s=function(n){return n},C=function(n){return new a.Show(function(r){return"(Conj "+a.show(n)(r)+")"})},p=function(n){return new d.Semiring(function(r){return function(e){return i.conj(n)(r)(e)}},function(r){return function(e){return i.disj(n)(r)(e)}},i.ff(n),i.tt(n))},q=function(n){return new j.Semigroup(function(r){return function(e){return i.conj(n)(r)(e)}})},w=function(n){return n},x=function(n){return new c.Monoid(function(){return q(n)},i.tt(n))},l=new u.Functor(function(n){return function(r){return n(r)}}),m=function(n){return n},g=new o.Eq1(function(n){return o.eq(m(n))}),D=new f.Ord1(function(){return g},function(n){return f.compare(w(n))}),S=function(n){return n},A=new r.Apply(function(){return l},function(n){return function(r){return n(r)}}),h=new e.Bind(function(){return A},function(n){return function(r){return r(n)}}),v=new n.Applicative(function(){return A},s),y=new t.Monad(function(){return v},function(){return h});module.exports={Conj:s,eqConj:m,eq1Conj:g,ordConj:w,ord1Conj:D,boundedConj:S,showConj:C,functorConj:l,applyConj:A,applicativeConj:v,bindConj:h,monadConj:y,semigroupConj:q,monoidConj:x,semiringConj:p};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7"}],"9bR7":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),e=require("../Control.Bind/index.js"),i=require("../Control.Monad/index.js"),t=require("../Data.Eq/index.js"),u=require("../Data.Functor/index.js"),o=require("../Data.HeytingAlgebra/index.js"),c=require("../Data.Monoid/index.js"),s=require("../Data.Ord/index.js"),f=require("../Data.Semigroup/index.js"),j=require("../Data.Semiring/index.js"),d=require("../Data.Show/index.js"),a=function(n){return n},D=function(n){return new d.Show(function(r){return"(Disj "+d.show(n)(r)+")"})},p=function(n){return new j.Semiring(function(r){return function(e){return o.disj(n)(r)(e)}},function(r){return function(e){return o.conj(n)(r)(e)}},o.tt(n),o.ff(n))},q=function(n){return new f.Semigroup(function(r){return function(e){return o.disj(n)(r)(e)}})},w=function(n){return n},x=function(n){return new c.Monoid(function(){return q(n)},o.ff(n))},l=new u.Functor(function(n){return function(r){return n(r)}}),m=function(n){return n},g=new t.Eq1(function(n){return t.eq(m(n))}),S=new s.Ord1(function(){return g},function(n){return s.compare(w(n))}),A=function(n){return n},h=new r.Apply(function(){return l},function(n){return function(r){return n(r)}}),v=new e.Bind(function(){return h},function(n){return function(r){return r(n)}}),y=new n.Applicative(function(){return h},a),C=new i.Monad(function(){return y},function(){return v});module.exports={Disj:a,eqDisj:m,eq1Disj:g,ordDisj:w,ord1Disj:S,boundedDisj:A,showDisj:D,functorDisj:l,applyDisj:h,applicativeDisj:y,bindDisj:v,monadDisj:C,semigroupDisj:q,monoidDisj:x,semiringDisj:p};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7"}],"ULyl":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),e=require("../Control.Monad/index.js"),t=require("../Data.Eq/index.js"),i=require("../Data.Functor/index.js"),o=require("../Data.Monoid/index.js"),a=require("../Data.Ord/index.js"),c=require("../Data.Semigroup/index.js"),d=require("../Data.Show/index.js"),f=function(n){return n},l=function(n){return new d.Show(function(r){return"(Dual "+d.show(n)(r)+")"})},p=function(n){return new c.Semigroup(function(r){return function(u){return c.append(n)(u)(r)}})},D=function(n){return n},s=function(n){return new o.Monoid(function(){return p(n.Semigroup0())},o.mempty(n))},q=new i.Functor(function(n){return function(r){return n(r)}}),w=function(n){return n},x=new t.Eq1(function(n){return t.eq(w(n))}),j=new a.Ord1(function(){return x},function(n){return a.compare(D(n))}),m=function(n){return n},S=new r.Apply(function(){return q},function(n){return function(r){return n(r)}}),g=new u.Bind(function(){return S},function(n){return function(r){return r(n)}}),h=new n.Applicative(function(){return S},f),v=new e.Monad(function(){return h},function(){return g});module.exports={Dual:f,eqDual:w,eq1Dual:x,ordDual:D,ord1Dual:j,boundedDual:m,showDual:l,functorDual:q,applyDual:S,applicativeDual:h,bindDual:g,monadDual:v,semigroupDual:p,monoidDual:s};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"2o47":[function(require,module,exports) {
-"use strict";var n=require("../Control.Category/index.js"),o=require("../Control.Semigroupoid/index.js"),r=require("../Data.Monoid/index.js"),e=require("../Data.Semigroup/index.js"),u=require("../Data.Show/index.js"),i=function(n){return n},t=function(n){return new u.Show(function(o){return"(Endo "+u.show(n)(o)+")"})},d=function(n){return new e.Semigroup(function(r){return function(e){return o.compose(n)(r)(e)}})},c=function(n){return n},s=function(o){return new r.Monoid(function(){return d(o.Semigroupoid0())},n.identity(o))},f=function(n){return n},a=function(n){return n};module.exports={Endo:i,eqEndo:f,ordEndo:c,boundedEndo:a,showEndo:t,semigroupEndo:d,monoidEndo:s};
-},{"../Control.Category/index.js":"IAi2","../Control.Semigroupoid/index.js":"/riR","../Data.Monoid/index.js":"TiEB","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"fHyj":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),i=require("../Control.Bind/index.js"),r=require("../Control.Monad/index.js"),t=require("../Data.Eq/index.js"),u=require("../Data.Functor/index.js"),d=require("../Data.Monoid/index.js"),o=require("../Data.Ord/index.js"),c=require("../Data.Semigroup/index.js"),f=require("../Data.Semiring/index.js"),a=require("../Data.Show/index.js"),v=function(n){return n},A=function(n){return new a.Show(function(e){return"(Additive "+a.show(n)(e)+")"})},p=function(n){return new c.Semigroup(function(e){return function(i){return f.add(n)(e)(i)}})},s=function(n){return n},q=function(n){return new d.Monoid(function(){return p(n)},f.zero(n))},w=new u.Functor(function(n){return function(e){return n(e)}}),x=function(n){return n},j=new t.Eq1(function(n){return t.eq(x(n))}),l=new o.Ord1(function(){return j},function(n){return o.compare(s(n))}),m=function(n){return n},D=new e.Apply(function(){return w},function(n){return function(e){return n(e)}}),S=new i.Bind(function(){return D},function(n){return function(e){return e(n)}}),g=new n.Applicative(function(){return D},v),h=new r.Monad(function(){return g},function(){return S});module.exports={Additive:v,eqAdditive:x,eq1Additive:j,ordAdditive:s,ord1Additive:l,boundedAdditive:m,showAdditive:A,functorAdditive:w,applyAdditive:D,applicativeAdditive:g,bindAdditive:S,monadAdditive:h,semigroupAdditive:p,monoidAdditive:q};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7"}],"y5cd":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),i=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),e=require("../Control.Monad/index.js"),r=require("../Data.Eq/index.js"),u=require("../Data.Functor/index.js"),o=require("../Data.Monoid/index.js"),c=require("../Data.Ord/index.js"),l=require("../Data.Semigroup/index.js"),a=require("../Data.Semiring/index.js"),p=require("../Data.Show/index.js"),d=function(n){return n},f=function(n){return new p.Show(function(i){return"(Multiplicative "+p.show(n)(i)+")"})},v=function(n){return new l.Semigroup(function(i){return function(t){return a.mul(n)(i)(t)}})},M=function(n){return n},s=function(n){return new o.Monoid(function(){return v(n)},a.one(n))},q=new u.Functor(function(n){return function(i){return n(i)}}),w=function(n){return n},x=new r.Eq1(function(n){return r.eq(w(n))}),j=new c.Ord1(function(){return x},function(n){return c.compare(M(n))}),m=function(n){return n},D=new i.Apply(function(){return q},function(n){return function(i){return n(i)}}),S=new t.Bind(function(){return D},function(n){return function(i){return i(n)}}),g=new n.Applicative(function(){return D},d),h=new e.Monad(function(){return g},function(){return S});module.exports={Multiplicative:d,eqMultiplicative:w,eq1Multiplicative:x,ordMultiplicative:M,ord1Multiplicative:j,boundedMultiplicative:m,showMultiplicative:f,functorMultiplicative:q,applyMultiplicative:D,applicativeMultiplicative:g,bindMultiplicative:S,monadMultiplicative:h,semigroupMultiplicative:v,monoidMultiplicative:s};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7"}],"aRYH":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),e=require("../Control.Monad/index.js"),i=require("../Data.Eq/index.js"),u=require("../Data.Functor/index.js"),o=require("../Data.Ord/index.js"),c=require("../Data.Semigroup/index.js"),s=require("../Data.Show/index.js"),f=function(n){return n},d=function(n){return new s.Show(function(r){return"(First "+s.show(n)(r)+")"})},a=new c.Semigroup(function(n){return function(r){return n}}),p=function(n){return n},F=new u.Functor(function(n){return function(r){return n(r)}}),q=function(n){return n},w=new i.Eq1(function(n){return i.eq(q(n))}),l=new o.Ord1(function(){return w},function(n){return o.compare(p(n))}),x=function(n){return n},j=new r.Apply(function(){return F},function(n){return function(r){return n(r)}}),m=new t.Bind(function(){return j},function(n){return function(r){return r(n)}}),D=new n.Applicative(function(){return j},f),h=new e.Monad(function(){return D},function(){return m});module.exports={First:f,eqFirst:q,eq1First:w,ordFirst:p,ord1First:l,boundedFirst:x,showFirst:d,functorFirst:F,applyFirst:j,applicativeFirst:D,bindFirst:m,monadFirst:h,semigroupFirst:a};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"mI/Z":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),e=require("../Control.Monad/index.js"),u=require("../Data.Eq/index.js"),i=require("../Data.Functor/index.js"),o=require("../Data.Ord/index.js"),a=require("../Data.Semigroup/index.js"),c=require("../Data.Show/index.js"),s=function(n){return n},f=function(n){return new c.Show(function(r){return"(Last "+c.show(n)(r)+")"})},d=new a.Semigroup(function(n){return function(n){return n}}),p=function(n){return n},q=new i.Functor(function(n){return function(r){return n(r)}}),L=function(n){return n},w=new u.Eq1(function(n){return u.eq(L(n))}),l=new o.Ord1(function(){return w},function(n){return o.compare(p(n))}),x=function(n){return n},j=new r.Apply(function(){return q},function(n){return function(r){return n(r)}}),m=new t.Bind(function(){return j},function(n){return function(r){return r(n)}}),D=new n.Applicative(function(){return j},s),h=new e.Monad(function(){return D},function(){return m});module.exports={Last:s,eqLast:L,eq1Last:w,ordLast:p,ord1Last:l,boundedLast:x,showLast:f,functorLast:q,applyLast:j,applicativeLast:D,bindLast:m,monadLast:h,semigroupLast:d};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"lz8k":[function(require,module,exports) {
-"use strict";var n=require("../Control.Semigroupoid/index.js"),r=require("../Data.Function/index.js"),t=require("../Data.Functor/index.js"),u=require("../Data.Monoid.Additive/index.js"),e=require("../Data.Monoid.Conj/index.js"),i=require("../Data.Monoid.Disj/index.js"),o=require("../Data.Monoid.Dual/index.js"),c=require("../Data.Monoid.Endo/index.js"),f=require("../Data.Monoid.Multiplicative/index.js"),a=require("../Data.Semigroup.First/index.js"),p=require("../Data.Semigroup.Last/index.js"),d=function(n,r){this.unwrap=n,this.wrap=r},s=function(n){return n.wrap},m=function(n){return n.unwrap},v=function(u){return function(e){return function(i){return function(o){return function(c){return function(c){var f=n.compose(n.semigroupoidFn)(t.map(e)(m(o))),a=r.on(c)(t.map(u)(s(i)));return function(n){return f(a(n))}}}}}}},w=function(n){return function(r){return function(u){return function(e){return function(i){return function(i){var o=t.map(r)(m(e)),c=t.map(n)(s(u));return function(n){return o(i(c(n)))}}}}}}},j=function(t){return function(u){return function(e){return function(e){var i=n.compose(n.semigroupoidFn)(m(u)),o=r.on(e)(s(t));return function(n){return i(o(n))}}}}},D=function(n){return function(r){return function(t){return function(t){var u=m(r),e=s(n);return function(n){return u(t(e(n)))}}}}},l=function(n){return function(r){return m(n)}},F=function(n){return function(r){return function(u){return function(u){var e=t.map(n)(s(r)),i=m(r);return function(n){return e(u(i(n)))}}}}},x=function(u){return function(e){return function(i){return function(o){return function(c){return function(c){var f=n.compose(n.semigroupoidFn)(t.map(e)(s(o))),a=r.on(c)(t.map(u)(m(i)));return function(n){return f(a(n))}}}}}}},q=function(n){return function(r){return function(u){return function(e){return function(i){return function(i){var o=t.map(r)(s(e)),c=t.map(n)(m(u));return function(n){return o(i(c(n)))}}}}}}},y=function(t){return function(u){return function(e){return function(e){var i=n.compose(n.semigroupoidFn)(s(u)),o=r.on(e)(m(t));return function(n){return i(o(n))}}}}},M=function(n){return function(r){return function(t){return function(t){var u=s(r),e=m(n);return function(n){return u(t(e(n)))}}}}},g=function(n){return l(n)},C=new d(function(n){return n},f.Multiplicative),A=new d(function(n){return n},p.Last),E=new d(function(n){return n},a.First),L=new d(function(n){return n},c.Endo),S=new d(function(n){return n},o.Dual),h=new d(function(n){return n},i.Disj),N=new d(function(n){return n},e.Conj),b=new d(function(n){return n},u.Additive),k=function(n){return function(r){return function(u){return function(u){var e=s(r),i=t.map(n)(m(r));return function(n){return e(u(i(n)))}}}}},z=function(n){return function(r){return function(u){return function(e){return function(i){return function(i){var o=t.map(r)(m(e)),c=t.map(n)(s(u));return function(n){return o(i(c(n)))}}}}}}},B=function(n){return function(r){return function(u){return function(e){return function(e){return t.map(n)(m(r))(e(s(u)))}}}}};module.exports={unwrap:m,wrap:s,Newtype:d,un:l,op:g,ala:B,alaF:z,over:M,overF:q,under:D,underF:w,over2:y,overF2:x,under2:j,underF2:v,traverse:F,collect:k,newtypeAdditive:b,newtypeMultiplicative:C,newtypeConj:N,newtypeDisj:h,newtypeDual:S,newtypeEndo:L,newtypeFirst:E,newtypeLast:A};
-},{"../Control.Semigroupoid/index.js":"/riR","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Monoid.Additive/index.js":"fHyj","../Data.Monoid.Conj/index.js":"U/G5","../Data.Monoid.Disj/index.js":"9bR7","../Data.Monoid.Dual/index.js":"ULyl","../Data.Monoid.Endo/index.js":"2o47","../Data.Monoid.Multiplicative/index.js":"y5cd","../Data.Semigroup.First/index.js":"aRYH","../Data.Semigroup.Last/index.js":"mI/Z"}],"eVDl":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),t=require("../Control.Alt/index.js"),r=require("../Control.Applicative/index.js"),u=require("../Control.Apply/index.js"),e=require("../Control.Bind/index.js"),o=require("../Control.Category/index.js"),i=require("../Control.Plus/index.js"),c=require("../Data.Eq/index.js"),f=require("../Data.Function/index.js"),a=require("../Data.Functor/index.js"),l=require("../Data.HeytingAlgebra/index.js"),d=require("../Data.Maybe/index.js"),s=require("../Data.Monoid/index.js"),p=require("../Data.Monoid.Conj/index.js"),m=require("../Data.Monoid.Disj/index.js"),y=require("../Data.Monoid.Dual/index.js"),g=require("../Data.Monoid.Endo/index.js"),w=require("../Data.Newtype/index.js"),D=require("../Data.Ord/index.js"),j=require("../Data.Ordering/index.js"),q=require("../Data.Semigroup/index.js"),h=require("../Data.Semiring/index.js"),v=require("../Data.Unit/index.js"),F=function(n,t,r){this.foldMap=n,this.foldl=t,this.foldr=r},x=function(n){return n.foldr},b=function(n){return function(t){var r=x(n)(function(n){return function(r){return r.elem instanceof d.Just?r:r.pos===t?{elem:new d.Just(n),pos:r.pos}:{pos:r.pos+1|0,elem:r.elem}}})({elem:d.Nothing.value,pos:0});return function(n){return r(n).elem}}},M=function(n){return x(n)(function(n){return function(n){return!1}})(!0)},E=function(n){return function(r){return x(n)(t.alt(r.Alt0()))(i.empty(r))}},A=function(n){return function(r){return function(u){return x(n)((e=t.alt(r.Alt0()),function(n){return e(u(n))}))(i.empty(r));var e}}},J=function(n){return function(t){return function(e){return x(t)((o=u.applySecond(n.Apply0()),function(n){return o(e(n))}))(r.pure(n)(v.unit));var o}}},N=function(n){return function(t){return f.flip(J(n)(t))}},C=function(n){return function(t){return J(n)(t)(o.identity(o.categoryFn))}},S=function(n){return n.foldl},B=function(n){return function(t){var r=S(n)(function(n){return function(r){return n.elem instanceof d.Just?n:n.pos===t?{elem:new d.Just(r),pos:n.pos}:{pos:n.pos+1|0,elem:n.elem}}})({elem:d.Nothing.value,pos:0});return function(n){return r(n).elem}}},O=function(n){return function(t){return function(r){return function(u){return S(n)(function(n){return function(u){return n.init?{init:!1,acc:u}:{init:!1,acc:q.append(t.Semigroup0())(n.acc)(q.append(t.Semigroup0())(r)(u))}}})({init:!0,acc:s.mempty(t)})(u).acc}}}},L=function(n){return function(t){return S(n)(function(n){return function(r){return h.add(t)(h.one(t))(n)}})(h.zero(t))}},_=function(n){return function(t){return S(n)(function(n){return function(r){if(n instanceof d.Nothing)return new d.Just(r);if(n instanceof d.Just)return new d.Just(c.eq(j.eqOrdering)(t(n.value0)(r))(j.GT.value)?n.value0:r);throw new Error("Failed pattern match at Data.Foldable (line 389, column 3 - line 389, column 27): "+[n.constructor.name,r.constructor.name])}})(d.Nothing.value)}},z=function(n){return function(t){return _(t)(D.compare(n))}},T=function(n){return function(t){return S(n)(function(n){return function(r){if(n instanceof d.Nothing)return new d.Just(r);if(n instanceof d.Just)return new d.Just(c.eq(j.eqOrdering)(t(n.value0)(r))(j.LT.value)?n.value0:r);throw new Error("Failed pattern match at Data.Foldable (line 402, column 3 - line 402, column 27): "+[n.constructor.name,r.constructor.name])}})(d.Nothing.value)}},G=function(n){return function(t){return T(t)(D.compare(n))}},H=function(n){return function(t){return S(n)(h.mul(t))(h.one(t))}},P=function(n){return function(t){return S(n)(h.add(t))(h.zero(t))}},R=new F(function(n){return function(n){return function(t){return n(t)}}},function(n){return function(t){return function(r){return n(t)(r)}}},function(n){return function(t){return function(r){return n(r)(t)}}}),U=new F(function(n){return function(t){return function(r){if(r instanceof d.Nothing)return s.mempty(n);if(r instanceof d.Just)return t(r.value0);throw new Error("Failed pattern match at Data.Foldable (line 129, column 1 - line 135, column 27): "+[t.constructor.name,r.constructor.name])}}},function(n){return function(t){return function(r){if(r instanceof d.Nothing)return t;if(r instanceof d.Just)return n(t)(r.value0);throw new Error("Failed pattern match at Data.Foldable (line 129, column 1 - line 135, column 27): "+[n.constructor.name,t.constructor.name,r.constructor.name])}}},function(n){return function(t){return function(r){if(r instanceof d.Nothing)return t;if(r instanceof d.Just)return n(r.value0)(t);throw new Error("Failed pattern match at Data.Foldable (line 129, column 1 - line 135, column 27): "+[n.constructor.name,t.constructor.name,r.constructor.name])}}}),k=new F(function(n){return function(n){return function(t){return n(t)}}},function(n){return function(t){return function(r){return n(t)(r)}}},function(n){return function(t){return function(r){return n(r)(t)}}}),I=new F(function(n){return function(n){return function(t){return n(t)}}},function(n){return function(t){return function(r){return n(t)(r)}}},function(n){return function(t){return function(r){return n(r)(t)}}}),K=new F(function(n){return function(n){return function(t){return n(t)}}},function(n){return function(t){return function(r){return n(t)(r)}}},function(n){return function(t){return function(r){return n(r)(t)}}}),Q=new F(function(n){return function(n){return function(t){return n(t)}}},function(n){return function(t){return function(r){return n(t)(r)}}},function(n){return function(t){return function(r){return n(r)(t)}}}),V=function(n){return function(t){return function(r){return x(n)(function(n){return function(u){return q.append(t.Semigroup0())(r(n))(u)}})(s.mempty(t))}}},W=new F(function(n){return V(W)(n)},n.foldlArray,n.foldrArray),X=function(n){return function(t){return function(r){return S(n)(function(n){return function(u){return q.append(t.Semigroup0())(n)(r(u))}})(s.mempty(t))}}},Y=function(n){return n.foldMap},Z=new F(function(n){return function(t){return function(r){return Y(U)(n)(t)(r)}}},function(n){return function(t){return function(r){return S(U)(n)(t)(r)}}},function(n){return function(t){return function(r){return x(U)(n)(t)(r)}}}),$=new F(function(n){return function(t){return function(r){return Y(U)(n)(t)(r)}}},function(n){return function(t){return function(r){return S(U)(n)(t)(r)}}},function(n){return function(t){return function(r){return x(U)(n)(t)(r)}}}),nn=function(n){return function(t){return function(r){return function(u){return w.unwrap(w.newtypeEndo)(w.unwrap(w.newtypeDual)(Y(n)(y.monoidDual(g.monoidEndo(o.categoryFn)))((e=f.flip(t),function(n){return y.Dual(g.Endo(e(n)))}))(u)))(r);var e}}}},tn=function(n){return function(t){return function(r){return function(u){return w.unwrap(w.newtypeEndo)(Y(n)(g.monoidEndo(o.categoryFn))(function(n){return g.Endo(t(n))})(u))(r)}}}},rn=function(n){return function(t){return function(r){return function(u){return function(e){return w.unwrap(w.newtypeEndo)(Y(n)(g.monoidEndo(o.categoryFn))(function(n){return function(e){return q.append(t)(r)(q.append(t)(u(n))(e))}})(e))(r)}}}}},un=function(n){return function(t){return function(r){return rn(n)(t)(r)(o.identity(o.categoryFn))}}},en=function(n){return function(t){return function(u){return function(o){return S(n)(function(n){return function(r){return e.bind(t.Bind1())(n)(f.flip(u)(r))}})(r.pure(t.Applicative0())(o))}}}},on=function(n){return function(t){return Y(n)(t)(o.identity(o.categoryFn))}},cn=function(n){return function(t){return S(n)(function(n){return function(r){return n instanceof d.Nothing?t(r):n}})(d.Nothing.value)}},fn=function(n){return function(t){return S(n)(function(n){return function(r){return n instanceof d.Nothing&&t(r)?new d.Just(r):n}})(d.Nothing.value)}},an=function(n){return function(t){return w.alaF(a.functorFn)(a.functorFn)(w.newtypeDisj)(w.newtypeDisj)(m.Disj)(Y(n)(m.monoidDisj(t)))}},ln=function(n){return function(t){var r=an(n)(l.heytingAlgebraBoolean),u=c.eq(t);return function(n){return r(u(n))}}},dn=function(n){return function(t){return function(r){var u=l.not(l.heytingAlgebraBoolean),e=ln(n)(t)(r);return function(n){return u(e(n))}}}},sn=function(n){return function(t){return an(n)(t)(o.identity(o.categoryFn))}},pn=function(n){return function(t){return w.alaF(a.functorFn)(a.functorFn)(w.newtypeConj)(w.newtypeConj)(p.Conj)(Y(n)(p.monoidConj(t)))}},mn=function(n){return function(t){return pn(n)(t)(o.identity(o.categoryFn))}};module.exports={Foldable:F,foldr:x,foldl:S,foldMap:Y,foldrDefault:tn,foldlDefault:nn,foldMapDefaultL:X,foldMapDefaultR:V,fold:on,foldM:en,traverse_:J,for_:N,sequence_:C,oneOf:E,oneOfMap:A,intercalate:O,surroundMap:rn,surround:un,and:mn,or:sn,all:pn,any:an,sum:P,product:H,elem:ln,notElem:dn,indexl:B,indexr:b,find:fn,findMap:cn,maximum:z,maximumBy:_,minimum:G,minimumBy:T,null:M,length:L,foldableArray:W,foldableMaybe:U,foldableFirst:Z,foldableLast:$,foldableAdditive:Q,foldableDual:k,foldableDisj:I,foldableConj:K,foldableMultiplicative:R};
-},{"./foreign.js":"kY6E","../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Plus/index.js":"oMBg","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Monoid.Conj/index.js":"U/G5","../Data.Monoid.Disj/index.js":"9bR7","../Data.Monoid.Dual/index.js":"ULyl","../Data.Monoid.Endo/index.js":"2o47","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Unit/index.js":"NhVk"}],"wjQo":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Category/index.js"),u=require("../Data.Foldable/index.js"),e=require("../Data.Function/index.js"),i=require("../Data.Monoid/index.js"),o=require("../Data.Monoid.Conj/index.js"),f=require("../Data.Monoid.Disj/index.js"),c=require("../Data.Monoid.Dual/index.js"),a=require("../Data.Monoid.Endo/index.js"),d=require("../Data.Newtype/index.js"),l=require("../Data.Semigroup/index.js"),p=require("../Data.Unit/index.js"),b=function(n,r,t){this.bifoldMap=n,this.bifoldl=r,this.bifoldr=t},y=function(n){return n.bifoldr},s=function(t){return function(u){return function(e){return function(i){return y(t)((f=r.applySecond(u.Apply0()),function(n){return f(e(n))}))((o=r.applySecond(u.Apply0()),function(n){return o(i(n))}))(n.pure(u)(p.unit));var o,f}}}},D=function(n){return function(r){return function(t){return function(u){return function(e){return s(n)(r)(u)(e)(t)}}}}},j=function(n){return function(r){return s(n)(r)(t.identity(t.categoryFn))(t.identity(t.categoryFn))}},g=function(n){return n.bifoldl},w=function(n){return new b(function(r){return function(t){return function(t){return function(e){return u.foldMap(n)(r)(t)(e)}}}},function(r){return function(r){return function(t){return function(e){return u.foldl(n)(r)(t)(e)}}}},function(r){return function(r){return function(t){return function(e){return u.foldr(n)(r)(t)(e)}}}})},m=function(n){return new b(function(r){return function(t){return function(e){return function(e){return u.foldMap(n)(r)(t)(e)}}}},function(r){return function(t){return function(t){return function(e){return u.foldl(n)(r)(t)(e)}}}},function(r){return function(t){return function(t){return function(e){return u.foldr(n)(r)(t)(e)}}}})},q=function(n){return function(r){return function(t){return function(u){return y(n)((o=l.append(r.Semigroup0()),function(n){return o(t(n))}))((e=l.append(r.Semigroup0()),function(n){return e(u(n))}))(i.mempty(r));var e,o}}}},x=function(n){return function(r){return function(t){return function(u){return g(n)(function(n){return function(u){return l.append(r.Semigroup0())(n)(t(u))}})(function(n){return function(t){return l.append(r.Semigroup0())(n)(u(t))}})(i.mempty(r))}}}},M=function(n){return n.bifoldMap},v=function(n){return new b(function(r){return function(t){return function(u){return function(e){return M(n)(r)(u)(t)(e)}}}},function(r){return function(t){return function(u){return function(e){return g(n)(t)(r)(u)(e)}}}},function(r){return function(t){return function(u){return function(e){return y(n)(t)(r)(u)(e)}}}})},C=function(n){return new b(function(r){return function(t){return function(u){return function(e){return M(n)(r)(t)(u)(e)}}}},function(r){return function(t){return function(u){return function(e){return g(n)(r)(t)(u)(e)}}}},function(r){return function(t){return function(u){return function(e){return y(n)(r)(t)(u)(e)}}}})},E=function(n){return function(r){return function(u){return function(i){return function(o){return d.unwrap(d.newtypeEndo)(d.unwrap(d.newtypeDual)(M(n)(c.monoidDual(a.monoidEndo(t.categoryFn)))((l=e.flip(r),function(n){return c.Dual(a.Endo(l(n)))}))((f=e.flip(u),function(n){return c.Dual(a.Endo(f(n)))}))(o)))(i);var f,l}}}}},F=function(n){return function(r){return function(u){return function(e){return function(i){return d.unwrap(d.newtypeEndo)(M(n)(a.monoidEndo(t.categoryFn))(function(n){return a.Endo(r(n))})(function(n){return a.Endo(u(n))})(i))(e)}}}}},S=function n(r){return function(t){return new b(function(n){return function(u){return function(e){return function(i){return l.append(n.Semigroup0())(M(r)(n)(u)(e)(i.value0))(M(t)(n)(u)(e)(i.value1))}}}},function(u){return function(e){return function(i){return function(o){return E(n(r)(t))(u)(e)(i)(o)}}}},function(u){return function(e){return function(i){return function(o){return F(n(r)(t))(u)(e)(i)(o)}}}})}},A=function(n){return function(r){return M(n)(r)(t.identity(t.categoryFn))(t.identity(t.categoryFn))}},h=function(n){return function(r){return function(t){return function(u){var e=d.unwrap(d.newtypeDisj),i=M(n)(f.monoidDisj(r.HeytingAlgebra0()))(function(n){return f.Disj(t(n))})(function(n){return f.Disj(u(n))});return function(n){return e(i(n))}}}}},_=function(n){return function(r){return function(t){return function(u){var e=d.unwrap(d.newtypeConj),i=M(n)(o.monoidConj(r.HeytingAlgebra0()))(function(n){return o.Conj(t(n))})(function(n){return o.Conj(u(n))});return function(n){return e(i(n))}}}}};module.exports={bifoldMap:M,bifoldl:g,bifoldr:y,Bifoldable:b,bifoldrDefault:F,bifoldlDefault:E,bifoldMapDefaultR:q,bifoldMapDefaultL:x,bifold:A,bitraverse_:s,bifor_:D,bisequence_:j,biany:h,biall:_,bifoldableClown:m,bifoldableJoker:w,bifoldableFlip:v,bifoldableProduct:S,bifoldableWrap:C};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Monoid/index.js":"TiEB","../Data.Monoid.Conj/index.js":"U/G5","../Data.Monoid.Disj/index.js":"9bR7","../Data.Monoid.Dual/index.js":"ULyl","../Data.Monoid.Endo/index.js":"2o47","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Unit/index.js":"NhVk"}],"e2Wc":[function(require,module,exports) {
-"use strict";var t=require("../Control.Category/index.js"),n=function(t){this.bimap=t},r=function(t){return t.bimap},i=function(n){return function(i){return r(n)(i)(t.identity(t.categoryFn))}},e=function(n){return r(n)(t.identity(t.categoryFn))};module.exports={bimap:r,Bifunctor:n,lmap:i,rmap:e};
-},{"../Control.Category/index.js":"IAi2"}],"Sd0N":[function(require,module,exports) {
-"use strict";var i=function(i,t){this.Biapply0=i,this.bipure=t},t=function(i){return i.bipure};module.exports={bipure:t,Biapplicative:i};
-},{}],"X0ga":[function(require,module,exports) {
-"use strict";var n=require("../Control.Category/index.js"),t=require("../Data.Bifunctor/index.js"),i=require("../Data.Function/index.js"),r=function(n,t){this.Bifunctor0=n,this.biapply=t},u=function(n){return n.biapply},e=function(r){return function(e){return function(o){return u(r)(n.identity(n.categoryFn)(t.bimap(r.Bifunctor0())(i.const(n.identity(n.categoryFn)))(i.const(n.identity(n.categoryFn))))(e))(o)}}},o=function(r){return function(e){return function(o){return u(r)(n.identity(n.categoryFn)(t.bimap(r.Bifunctor0())(i.const)(i.const))(e))(o)}}},c=function(i){return function(r){return function(e){return function(o){return function(c){return u(i)(n.identity(n.categoryFn)(t.bimap(i.Bifunctor0())(r)(e))(o))(c)}}}}},f=function(i){return function(r){return function(e){return function(o){return function(c){return function(f){return u(i)(u(i)(n.identity(n.categoryFn)(t.bimap(i.Bifunctor0())(r)(e))(o))(c))(f)}}}}}};module.exports={biapply:u,Biapply:r,biapplyFirst:e,biapplySecond:o,bilift2:c,bilift3:f};
-},{"../Control.Category/index.js":"IAi2","../Data.Bifunctor/index.js":"e2Wc","../Data.Function/index.js":"ImXJ"}],"Wuz6":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),e=require("../Control.Biapplicative/index.js"),t=require("../Control.Biapply/index.js"),u=require("../Data.Bifunctor/index.js"),i=require("../Data.Functor/index.js"),o=require("../Data.Newtype/index.js"),c=require("../Data.Show/index.js"),p=function(n){return n},l=function(n){return new c.Show(function(r){return"(Clown "+c.show(n)(r)+")"})},f=function(n){return n},w=new o.Newtype(function(n){return n},p),a=new i.Functor(function(n){return function(n){return n}}),C=function(n){return n},s=function(n){return new u.Bifunctor(function(r){return function(e){return function(e){return i.map(n)(r)(e)}}})},d=function(n){return new t.Biapply(function(){return s(n.Functor0())},function(e){return function(t){return r.apply(n)(e)(t)}})},q=function(r){return new e.Biapplicative(function(){return d(r.Apply0())},function(e){return function(t){return n.pure(r)(e)}})};module.exports={Clown:p,newtypeClown:w,eqClown:C,ordClown:f,showClown:l,functorClown:a,bifunctorClown:s,biapplyClown:d,biapplicativeClown:q};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Biapplicative/index.js":"Sd0N","../Control.Biapply/index.js":"X0ga","../Data.Bifunctor/index.js":"e2Wc","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Show/index.js":"mFY7"}],"EM73":[function(require,module,exports) {
-"use strict";var n=require("../Control.Biapplicative/index.js"),r=require("../Control.Biapply/index.js"),i=require("../Data.Bifunctor/index.js"),t=require("../Data.Functor/index.js"),e=require("../Data.Newtype/index.js"),u=require("../Data.Show/index.js"),o=function(n){return n},p=function(n){return new u.Show(function(r){return"(Flip "+u.show(n)(r)+")"})},c=function(n){return n},f=new e.Newtype(function(n){return n},o),a=function(n){return new t.Functor(function(r){return function(t){return i.lmap(n)(r)(t)}})},l=function(n){return n},w=function(n){return new i.Bifunctor(function(r){return function(t){return function(e){return i.bimap(n)(t)(r)(e)}}})},F=function(n){return new r.Biapply(function(){return w(n.Bifunctor0())},function(i){return function(t){return r.biapply(n)(i)(t)}})},s=function(r){return new n.Biapplicative(function(){return F(r.Biapply0())},function(i){return function(t){return n.bipure(r)(t)(i)}})};module.exports={Flip:o,newtypeFlip:f,eqFlip:l,ordFlip:c,showFlip:p,functorFlip:a,bifunctorFlip:w,biapplyFlip:F,biapplicativeFlip:s};
-},{"../Control.Biapplicative/index.js":"Sd0N","../Control.Biapply/index.js":"X0ga","../Data.Bifunctor/index.js":"e2Wc","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Show/index.js":"mFY7"}],"O/Oh":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),e=require("../Control.Biapplicative/index.js"),t=require("../Control.Biapply/index.js"),u=require("../Data.Bifunctor/index.js"),i=require("../Data.Functor/index.js"),o=require("../Data.Newtype/index.js"),c=require("../Data.Show/index.js"),p=function(n){return n},f=function(n){return new c.Show(function(r){return"(Joker "+c.show(n)(r)+")"})},a=function(n){return n},l=new o.Newtype(function(n){return n},p),s=function(n){return new i.Functor(function(r){return function(e){return i.map(n)(r)(e)}})},w=function(n){return n},d=function(n){return new u.Bifunctor(function(r){return function(r){return function(e){return i.map(n)(r)(e)}}})},k=function(n){return new t.Biapply(function(){return d(n.Functor0())},function(e){return function(t){return r.apply(n)(e)(t)}})},J=function(r){return new e.Biapplicative(function(){return k(r.Apply0())},function(e){return function(e){return n.pure(r)(e)}})};module.exports={Joker:p,newtypeJoker:l,eqJoker:w,ordJoker:a,showJoker:f,functorJoker:s,bifunctorJoker:d,biapplyJoker:k,biapplicativeJoker:J};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Biapplicative/index.js":"Sd0N","../Control.Biapply/index.js":"X0ga","../Data.Bifunctor/index.js":"e2Wc","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Show/index.js":"mFY7"}],"U+97":[function(require,module,exports) {
-"use strict";var n=require("../Control.Biapplicative/index.js"),u=require("../Control.Biapply/index.js"),r=require("../Data.Bifunctor/index.js"),e=require("../Data.Eq/index.js"),t=require("../Data.Ord/index.js"),i=require("../Data.Ordering/index.js"),o=require("../Data.Show/index.js"),c=function(){function n(n,u){this.value0=n,this.value1=u}return n.create=function(u){return function(r){return new n(u,r)}},n}(),a=function(n){return function(u){return new o.Show(function(r){return"(Product "+o.show(n)(r.value0)+" "+o.show(u)(r.value1)+")"})}},f=function(n){return function(u){return new e.Eq(function(r){return function(t){return e.eq(n)(r.value0)(t.value0)&&e.eq(u)(r.value1)(t.value1)}})}},l=function(n){return function(u){return new t.Ord(function(){return f(n.Eq0())(u.Eq0())},function(r){return function(e){var o=t.compare(n)(r.value0)(e.value0);return o instanceof i.LT?i.LT.value:o instanceof i.GT?i.GT.value:t.compare(u)(r.value1)(e.value1)}})}},p=function(n){return function(u){return new r.Bifunctor(function(e){return function(t){return function(i){return new c(r.bimap(n)(e)(t)(i.value0),r.bimap(u)(e)(t)(i.value1))}}})}},v=function(n){return function(r){return new u.Biapply(function(){return p(n.Bifunctor0())(r.Bifunctor0())},function(e){return function(t){return new c(u.biapply(n)(e.value0)(t.value0),u.biapply(r)(e.value1)(t.value1))}})}},d=function(u){return function(r){return new n.Biapplicative(function(){return v(u.Biapply0())(r.Biapply0())},function(e){return function(t){return new c(n.bipure(u)(e)(t),n.bipure(r)(e)(t))}})}};module.exports={Product:c,eqProduct:f,ordProduct:l,showProduct:a,bifunctorProduct:p,biapplyProduct:v,biapplicativeProduct:d};
-},{"../Control.Biapplicative/index.js":"Sd0N","../Control.Biapply/index.js":"X0ga","../Data.Bifunctor/index.js":"e2Wc","../Data.Eq/index.js":"Pq4F","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Show/index.js":"mFY7"}],"U78Q":[function(require,module,exports) {
-"use strict";var n=require("../Control.Biapplicative/index.js"),r=require("../Control.Biapply/index.js"),t=require("../Data.Bifunctor/index.js"),e=require("../Data.Functor/index.js"),u=require("../Data.Newtype/index.js"),i=require("../Data.Show/index.js"),o=function(n){return n},p=function(n){return new i.Show(function(r){return"(Wrap "+i.show(n)(r)+")"})},a=function(n){return n},c=new u.Newtype(function(n){return n},o),f=function(n){return new e.Functor(function(r){return function(e){return t.rmap(n)(r)(e)}})},w=function(n){return n},l=function(n){return new t.Bifunctor(function(r){return function(e){return function(u){return t.bimap(n)(r)(e)(u)}}})},s=function(n){return new r.Biapply(function(){return l(n.Bifunctor0())},function(t){return function(e){return r.biapply(n)(t)(e)}})},W=function(r){return new n.Biapplicative(function(){return s(r.Biapply0())},function(t){return function(e){return n.bipure(r)(t)(e)}})};module.exports={Wrap:o,newtypeWrap:c,eqWrap:w,ordWrap:a,showWrap:p,functorWrap:f,bifunctorWrap:l,biapplyWrap:s,biapplicativeWrap:W};
-},{"../Control.Biapplicative/index.js":"Sd0N","../Control.Biapply/index.js":"X0ga","../Data.Bifunctor/index.js":"e2Wc","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Show/index.js":"mFY7"}],"oRQn":[function(require,module,exports) {
-"use strict";exports.traverseArrayImpl=function(){function n(n){return[n]}function r(n){return function(r){return[n,r]}}function t(n){return function(r){return function(t){return[n,r,t]}}}function u(n){return function(r){return n.concat(r)}}return function(e){return function(c){return function(o){return function(f){return function(i){return function a(s,l){switch(l-s){case 0:return o([]);case 1:return c(n)(f(i[s]));case 2:return e(c(r)(f(i[s])))(f(i[s+1]));case 3:return e(e(c(t)(f(i[s])))(f(i[s+1])))(f(i[s+2]));default:var h=s+2*Math.floor((l-s)/4);return e(c(u)(a(s,h)))(a(h,l))}}(0,i.length)}}}}}}();
-},{}],"W/l6":[function(require,module,exports) {
-"use strict";var e=require("../Control.Alt/index.js"),n=require("../Control.Alternative/index.js"),r=require("../Control.MonadZero/index.js"),t=require("../Control.Plus/index.js"),i=require("../Data.Maybe/index.js"),o=require("../Data.Monoid/index.js"),u=require("../Data.Newtype/index.js"),a=require("../Data.Semigroup/index.js"),s=require("../Data.Show/index.js"),d=function(e){return e},c=function(e){return new s.Show(function(n){return"First ("+s.show(i.showMaybe(e))(n)+")"})},F=new a.Semigroup(function(e){return function(n){return e instanceof i.Just?e:n}}),y=function(e){return i.ordMaybe(e)},f=i.ord1Maybe,l=new u.Newtype(function(e){return e},d),p=new o.Monoid(function(){return F},i.Nothing.value),b=i.monadMaybe,M=i.invariantMaybe,w=i.functorMaybe,q=i.extendMaybe,x=function(e){return i.eqMaybe(e)},m=i.eq1Maybe,j=function(e){return i.boundedMaybe(e)},v=i.bindMaybe,h=i.applyMaybe,D=i.applicativeMaybe,g=new e.Alt(function(){return w},a.append(F)),A=new t.Plus(function(){return g},o.mempty(p)),C=new n.Alternative(function(){return D},function(){return A}),S=new r.MonadZero(function(){return C},function(){return b});module.exports={First:d,newtypeFirst:l,eqFirst:x,eq1First:m,ordFirst:y,ord1First:f,boundedFirst:j,functorFirst:w,invariantFirst:M,applyFirst:h,applicativeFirst:D,bindFirst:v,monadFirst:b,extendFirst:q,showFirst:c,semigroupFirst:F,monoidFirst:p,altFirst:g,plusFirst:A,alternativeFirst:C,monadZeroFirst:S};
-},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"aQky":[function(require,module,exports) {
-"use strict";var e=require("../Control.Alt/index.js"),n=require("../Control.Alternative/index.js"),t=require("../Control.MonadZero/index.js"),r=require("../Control.Plus/index.js"),a=require("../Data.Maybe/index.js"),o=require("../Data.Monoid/index.js"),i=require("../Data.Newtype/index.js"),u=require("../Data.Semigroup/index.js"),s=require("../Data.Show/index.js"),d=function(e){return e},c=function(e){return new s.Show(function(n){return"(Last "+s.show(a.showMaybe(e))(n)+")"})},l=new u.Semigroup(function(e){return function(n){if(n instanceof a.Just)return n;if(n instanceof a.Nothing)return e;throw new Error("Failed pattern match at Data.Maybe.Last (line 52, column 1 - line 54, column 36): "+[e.constructor.name,n.constructor.name])}}),L=function(e){return a.ordMaybe(e)},f=a.ord1Maybe,y=new i.Newtype(function(e){return e},d),p=new o.Monoid(function(){return l},a.Nothing.value),b=a.monadMaybe,M=a.invariantMaybe,w=a.functorMaybe,m=a.extendMaybe,q=function(e){return a.eqMaybe(e)},x=a.eq1Maybe,h=function(e){return a.boundedMaybe(e)},j=a.bindMaybe,v=a.applyMaybe,D=a.applicativeMaybe,g=new e.Alt(function(){return w},u.append(l)),A=new r.Plus(function(){return g},o.mempty(p)),C=new n.Alternative(function(){return D},function(){return A}),N=new t.MonadZero(function(){return C},function(){return b});module.exports={Last:d,newtypeLast:y,eqLast:q,eq1Last:x,ordLast:L,ord1Last:f,boundedLast:h,functorLast:w,invariantLast:M,applyLast:v,applicativeLast:D,bindLast:j,monadLast:b,extendLast:m,showLast:c,semigroupLast:l,monoidLast:p,altLast:g,plusLast:A,alternativeLast:C,monadZeroLast:N};
-},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"LbSr":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),u=require("../Data.Functor/index.js"),e=function(n){return n},r=function(n){return n},c=function(n){return n},a=function(n){return n},i=new u.Functor(function(n){return function(t){return function(u){var e=c(t)(u);return{accum:e.accum,value:n(e.value)}}}}),o=new u.Functor(function(n){return function(t){return function(u){var e=a(t)(u);return{accum:e.accum,value:n(e.value)}}}}),f=new t.Apply(function(){return i},function(n){return function(t){return function(u){var e=c(t)(u),r=c(n)(e.accum);return{accum:r.accum,value:r.value(e.value)}}}}),l=new t.Apply(function(){return o},function(n){return function(t){return function(u){var e=a(n)(u),r=a(t)(e.accum);return{accum:r.accum,value:e.value(r.value)}}}}),v=new n.Applicative(function(){return f},function(n){return function(t){return{accum:t,value:n}}}),p=new n.Applicative(function(){return l},function(n){return function(t){return{accum:t,value:n}}});module.exports={StateL:r,stateL:a,StateR:e,stateR:c,functorStateL:o,applyStateL:l,applicativeStateL:p,functorStateR:i,applyStateR:f,applicativeStateR:v};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Data.Functor/index.js":"+0AE"}],"n7EE":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),u=require("../Control.Category/index.js"),e=require("../Data.Foldable/index.js"),i=require("../Data.Functor/index.js"),o=require("../Data.Maybe/index.js"),c=require("../Data.Maybe.First/index.js"),a=require("../Data.Maybe.Last/index.js"),f=require("../Data.Monoid.Additive/index.js"),l=require("../Data.Monoid.Conj/index.js"),p=require("../Data.Monoid.Disj/index.js"),s=require("../Data.Monoid.Dual/index.js"),d=require("../Data.Monoid.Multiplicative/index.js"),v=require("../Data.Traversable.Accum.Internal/index.js"),m=function(n,r,t,u){this.Foldable1=n,this.Functor0=r,this.sequence=t,this.traverse=u},y=function(n){return n.traverse},A=new m(function(){return e.foldableMultiplicative},function(){return d.functorMultiplicative},function(n){return function(r){return i.map(n.Apply0().Functor0())(d.Multiplicative)(r)}},function(n){return function(r){return function(t){return i.map(n.Apply0().Functor0())(d.Multiplicative)(r(t))}}}),F=new m(function(){return e.foldableMaybe},function(){return o.functorMaybe},function(n){return function(t){if(t instanceof o.Nothing)return r.pure(n)(o.Nothing.value);if(t instanceof o.Just)return i.map(n.Apply0().Functor0())(o.Just.create)(t.value0);throw new Error("Failed pattern match at Data.Traversable (line 86, column 1 - line 90, column 33): "+[t.constructor.name])}},function(n){return function(t){return function(u){if(u instanceof o.Nothing)return r.pure(n)(o.Nothing.value);if(u instanceof o.Just)return i.map(n.Apply0().Functor0())(o.Just.create)(t(u.value0));throw new Error("Failed pattern match at Data.Traversable (line 86, column 1 - line 90, column 33): "+[t.constructor.name,u.constructor.name])}}}),b=new m(function(){return e.foldableDual},function(){return s.functorDual},function(n){return function(r){return i.map(n.Apply0().Functor0())(s.Dual)(r)}},function(n){return function(r){return function(t){return i.map(n.Apply0().Functor0())(s.Dual)(r(t))}}}),j=new m(function(){return e.foldableDisj},function(){return p.functorDisj},function(n){return function(r){return i.map(n.Apply0().Functor0())(p.Disj)(r)}},function(n){return function(r){return function(t){return i.map(n.Apply0().Functor0())(p.Disj)(r(t))}}}),D=new m(function(){return e.foldableConj},function(){return l.functorConj},function(n){return function(r){return i.map(n.Apply0().Functor0())(l.Conj)(r)}},function(n){return function(r){return function(t){return i.map(n.Apply0().Functor0())(l.Conj)(r(t))}}}),q=new m(function(){return e.foldableAdditive},function(){return f.functorAdditive},function(n){return function(r){return i.map(n.Apply0().Functor0())(f.Additive)(r)}},function(n){return function(r){return function(t){return i.map(n.Apply0().Functor0())(f.Additive)(r(t))}}}),M=function(n){return function(r){return y(n)(r)(u.identity(u.categoryFn))}},x=new m(function(){return e.foldableArray},function(){return i.functorArray},function(n){return M(x)(n)},function(u){return n.traverseArrayImpl(t.apply(u.Apply0()))(i.map(u.Apply0().Functor0()))(r.pure(u))}),w=function(n){return n.sequence},h=new m(function(){return e.foldableFirst},function(){return c.functorFirst},function(n){return function(r){return i.map(n.Apply0().Functor0())(c.First)(w(F)(n)(r))}},function(n){return function(r){return function(t){return i.map(n.Apply0().Functor0())(c.First)(y(F)(n)(r)(t))}}}),C=new m(function(){return e.foldableLast},function(){return a.functorLast},function(n){return function(r){return i.map(n.Apply0().Functor0())(a.Last)(w(F)(n)(r))}},function(n){return function(r){return function(t){return i.map(n.Apply0().Functor0())(a.Last)(y(F)(n)(r)(t))}}}),L=function(n){return function(r){return function(t){return function(u){return w(n)(r)(i.map(n.Functor0())(t)(u))}}}},g=function(n){return function(r){return function(t){return function(u){return v.stateR(y(n)(v.applicativeStateR)(function(n){return function(t){return r(t)(n)}})(u))(t)}}}},J=function(n){return function(r){return function(t){return function(u){return g(n)(function(n){return function(t){var u=r(t)(n);return{accum:u,value:u}}})(t)(u).value}}}},N=function(n){return function(r){return function(t){return function(u){return v.stateL(y(n)(v.applicativeStateL)(function(n){return function(t){return r(t)(n)}})(u))(t)}}}},T=function(n){return function(r){return function(t){return function(u){return N(n)(function(n){return function(t){var u=r(n)(t);return{accum:u,value:u}}})(t)(u).value}}}},R=function(n){return function(r){return function(t){return function(u){return y(r)(n)(u)(t)}}}};module.exports={Traversable:m,traverse:y,sequence:w,traverseDefault:L,sequenceDefault:M,for:R,scanl:T,scanr:J,mapAccumL:N,mapAccumR:g,traversableArray:x,traversableMaybe:F,traversableFirst:h,traversableLast:C,traversableAdditive:q,traversableDual:b,traversableConj:D,traversableDisj:j,traversableMultiplicative:A};
-},{"./foreign.js":"oRQn","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Data.Foldable/index.js":"eVDl","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Maybe.First/index.js":"W/l6","../Data.Maybe.Last/index.js":"aQky","../Data.Monoid.Additive/index.js":"fHyj","../Data.Monoid.Conj/index.js":"U/G5","../Data.Monoid.Disj/index.js":"9bR7","../Data.Monoid.Dual/index.js":"ULyl","../Data.Monoid.Multiplicative/index.js":"y5cd","../Data.Traversable.Accum.Internal/index.js":"LbSr"}],"8nb9":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Category/index.js"),u=require("../Data.Bifoldable/index.js"),e=require("../Data.Bifunctor/index.js"),i=require("../Data.Bifunctor.Clown/index.js"),o=require("../Data.Bifunctor.Flip/index.js"),c=require("../Data.Bifunctor.Joker/index.js"),f=require("../Data.Bifunctor.Product/index.js"),a=require("../Data.Bifunctor.Wrap/index.js"),l=require("../Data.Functor/index.js"),p=require("../Data.Traversable/index.js"),b=function(n,r,t,u){this.Bifoldable1=n,this.Bifunctor0=r,this.bisequence=t,this.bitraverse=u},s=function(n){return n.bitraverse},d=function(r){return function(t){return function(u){return function(e){return s(r)(t)(e)(n.pure(t))(u)}}}},F=function(r){return function(t){return function(u){return s(r)(t)(u)(n.pure(t))}}},v=function(r){return function(t){return function(u){return function(e){return s(r)(t)(n.pure(t))(e)(u)}}}},y=function(r){return function(t){return s(r)(t)(n.pure(t))}},B=function(n){return new b(function(){return u.bifoldableJoker(n.Foldable1())},function(){return c.bifunctorJoker(n.Functor0())},function(r){return function(t){return l.map(r.Apply0().Functor0())(c.Joker)(p.sequence(n)(r)(t))}},function(r){return function(t){return function(t){return function(u){return l.map(r.Apply0().Functor0())(c.Joker)(p.traverse(n)(r)(t)(u))}}}})},q=function(n){return new b(function(){return u.bifoldableClown(n.Foldable1())},function(){return i.bifunctorClown(n.Functor0())},function(r){return function(t){return l.map(r.Apply0().Functor0())(i.Clown)(p.sequence(n)(r)(t))}},function(r){return function(t){return function(u){return function(u){return l.map(r.Apply0().Functor0())(i.Clown)(p.traverse(n)(r)(t)(u))}}}})},A=function(n){return function(r){return s(n)(r)(t.identity(t.categoryFn))(t.identity(t.categoryFn))}},x=function(n){return n.bisequence},j=function(n){return new b(function(){return u.bifoldableFlip(n.Bifoldable1())},function(){return o.bifunctorFlip(n.Bifunctor0())},function(r){return function(t){return l.map(r.Apply0().Functor0())(o.Flip)(x(n)(r)(t))}},function(r){return function(t){return function(u){return function(e){return l.map(r.Apply0().Functor0())(o.Flip)(s(n)(r)(u)(t)(e))}}}})},m=function(n){return function(t){return new b(function(){return u.bifoldableProduct(n.Bifoldable1())(t.Bifoldable1())},function(){return f.bifunctorProduct(n.Bifunctor0())(t.Bifunctor0())},function(u){return function(e){return r.apply(u.Apply0())(l.map(u.Apply0().Functor0())(f.Product.create)(x(n)(u)(e.value0)))(x(t)(u)(e.value1))}},function(u){return function(e){return function(i){return function(o){return r.apply(u.Apply0())(l.map(u.Apply0().Functor0())(f.Product.create)(s(n)(u)(e)(i)(o.value0)))(s(t)(u)(e)(i)(o.value1))}}}})}},w=function(n){return new b(function(){return u.bifoldableWrap(n.Bifoldable1())},function(){return a.bifunctorWrap(n.Bifunctor0())},function(r){return function(t){return l.map(r.Apply0().Functor0())(a.Wrap)(x(n)(r)(t))}},function(r){return function(t){return function(u){return function(e){return l.map(r.Apply0().Functor0())(a.Wrap)(s(n)(r)(t)(u)(e))}}}})},D=function(n){return function(r){return function(t){return function(u){return function(i){return x(n)(r)(e.bimap(n.Bifunctor0())(t)(u)(i))}}}}},C=function(n){return function(r){return function(t){return function(u){return function(e){return s(n)(r)(u)(e)(t)}}}}};module.exports={Bitraversable:b,bitraverse:s,bisequence:x,bitraverseDefault:D,bisequenceDefault:A,ltraverse:F,rtraverse:y,bifor:C,lfor:d,rfor:v,bitraversableClown:q,bitraversableJoker:B,bitraversableFlip:j,bitraversableProduct:m,bitraversableWrap:w};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Data.Bifoldable/index.js":"wjQo","../Data.Bifunctor/index.js":"e2Wc","../Data.Bifunctor.Clown/index.js":"Wuz6","../Data.Bifunctor.Flip/index.js":"EM73","../Data.Bifunctor.Joker/index.js":"O/Oh","../Data.Bifunctor.Product/index.js":"U+97","../Data.Bifunctor.Wrap/index.js":"U78Q","../Data.Functor/index.js":"+0AE","../Data.Traversable/index.js":"n7EE"}],"ZgoH":[function(require,module,exports) {
-"use strict";exports.mapWithIndexArray=function(r){return function(t){for(var n=t.length,e=Array(n),u=0;u<n;u++)e[u]=r(u)(t[u]);return e}};
-},{}],"OHRN":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),t=require("../Data.Function/index.js"),r=require("../Data.Functor/index.js"),i=require("../Data.Maybe/index.js"),u=require("../Data.Maybe.First/index.js"),e=require("../Data.Maybe.Last/index.js"),o=require("../Data.Monoid.Additive/index.js"),a=require("../Data.Monoid.Conj/index.js"),c=require("../Data.Monoid.Disj/index.js"),f=require("../Data.Monoid.Dual/index.js"),d=require("../Data.Monoid.Multiplicative/index.js"),s=require("../Data.Unit/index.js"),x=function(n,t){this.Functor0=n,this.mapWithIndex=t},j=function(n){return n.mapWithIndex},D=function(n){return function(r){return j(n)(t.const(r))}},p=new x(function(){return d.functorMultiplicative},function(n){return r.map(d.functorMultiplicative)(n(s.unit))}),h=new x(function(){return i.functorMaybe},function(n){return r.map(i.functorMaybe)(n(s.unit))}),M=new x(function(){return e.functorLast},function(n){return r.map(e.functorLast)(n(s.unit))}),l=new x(function(){return u.functorFirst},function(n){return r.map(u.functorFirst)(n(s.unit))}),m=new x(function(){return f.functorDual},function(n){return r.map(f.functorDual)(n(s.unit))}),I=new x(function(){return c.functorDisj},function(n){return r.map(c.functorDisj)(n(s.unit))}),W=new x(function(){return a.functorConj},function(n){return r.map(a.functorConj)(n(s.unit))}),q=new x(function(){return r.functorArray},n.mapWithIndexArray),v=new x(function(){return o.functorAdditive},function(n){return r.map(o.functorAdditive)(n(s.unit))});module.exports={FunctorWithIndex:x,mapWithIndex:j,mapDefault:D,functorWithIndexArray:q,functorWithIndexMaybe:h,functorWithIndexFirst:l,functorWithIndexLast:M,functorWithIndexAdditive:v,functorWithIndexDual:m,functorWithIndexConj:W,functorWithIndexDisj:I,functorWithIndexMultiplicative:p};
-},{"./foreign.js":"ZgoH","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Maybe.First/index.js":"W/l6","../Data.Maybe.Last/index.js":"aQky","../Data.Monoid.Additive/index.js":"fHyj","../Data.Monoid.Conj/index.js":"U/G5","../Data.Monoid.Disj/index.js":"9bR7","../Data.Monoid.Dual/index.js":"ULyl","../Data.Monoid.Multiplicative/index.js":"y5cd","../Data.Unit/index.js":"NhVk"}],"9Efi":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),r=require("../Control.Bind/index.js"),u=require("../Control.Category/index.js"),e=require("../Data.Foldable/index.js"),i=require("../Data.Function/index.js"),o=require("../Data.FunctorWithIndex/index.js"),f=require("../Data.Maybe/index.js"),l=require("../Data.Monoid/index.js"),d=require("../Data.Monoid.Conj/index.js"),a=require("../Data.Monoid.Disj/index.js"),c=require("../Data.Monoid.Dual/index.js"),p=require("../Data.Monoid.Endo/index.js"),b=require("../Data.Newtype/index.js"),x=require("../Data.Semigroup/index.js"),s=require("../Data.Unit/index.js"),h=function(){function n(n,t){this.value0=n,this.value1=t}return n.create=function(t){return function(r){return new n(t,r)}},n}(),D=function(n,t,r,u){this.Foldable0=n,this.foldMapWithIndex=t,this.foldlWithIndex=r,this.foldrWithIndex=u},I=function(n){return n.foldrWithIndex},W=function(r){return function(u){return function(e){return I(u)(function(n){var u=t.applySecond(r.Apply0()),i=e(n);return function(n){return u(i(n))}})(n.pure(r)(s.unit))}}},j=function(n){return function(t){return i.flip(W(n)(t))}},M=function(n){return function(t){return I(n)(i.const(t))}},v=function(n){return n.foldlWithIndex},y=function(n){return function(t){return v(n)(i.const(t))}},w=new D(function(){return e.foldableMultiplicative},function(n){return function(t){return e.foldMap(e.foldableMultiplicative)(n)(t(s.unit))}},function(n){return e.foldl(e.foldableMultiplicative)(n(s.unit))},function(n){return e.foldr(e.foldableMultiplicative)(n(s.unit))}),m=new D(function(){return e.foldableMaybe},function(n){return function(t){return e.foldMap(e.foldableMaybe)(n)(t(s.unit))}},function(n){return e.foldl(e.foldableMaybe)(n(s.unit))},function(n){return e.foldr(e.foldableMaybe)(n(s.unit))}),q=new D(function(){return e.foldableLast},function(n){return function(t){return e.foldMap(e.foldableLast)(n)(t(s.unit))}},function(n){return e.foldl(e.foldableLast)(n(s.unit))},function(n){return e.foldr(e.foldableLast)(n(s.unit))}),A=new D(function(){return e.foldableFirst},function(n){return function(t){return e.foldMap(e.foldableFirst)(n)(t(s.unit))}},function(n){return e.foldl(e.foldableFirst)(n(s.unit))},function(n){return e.foldr(e.foldableFirst)(n(s.unit))}),C=new D(function(){return e.foldableDual},function(n){return function(t){return e.foldMap(e.foldableDual)(n)(t(s.unit))}},function(n){return e.foldl(e.foldableDual)(n(s.unit))},function(n){return e.foldr(e.foldableDual)(n(s.unit))}),F=new D(function(){return e.foldableDisj},function(n){return function(t){return e.foldMap(e.foldableDisj)(n)(t(s.unit))}},function(n){return e.foldl(e.foldableDisj)(n(s.unit))},function(n){return e.foldr(e.foldableDisj)(n(s.unit))}),g=new D(function(){return e.foldableConj},function(n){return function(t){return e.foldMap(e.foldableConj)(n)(t(s.unit))}},function(n){return e.foldl(e.foldableConj)(n(s.unit))},function(n){return e.foldr(e.foldableConj)(n(s.unit))}),E=new D(function(){return e.foldableAdditive},function(n){return function(t){return e.foldMap(e.foldableAdditive)(n)(t(s.unit))}},function(n){return e.foldl(e.foldableAdditive)(n(s.unit))},function(n){return e.foldr(e.foldableAdditive)(n(s.unit))}),L=function(t){return function(u){return function(e){return function(o){return v(t)(function(n){return function(t){return function(o){return r.bind(u.Bind1())(t)(i.flip(e(n))(o))}}})(n.pure(u.Applicative0())(o))}}}},S=function(n){return function(t){return function(r){return I(n)(function(n){return function(u){return function(e){return x.append(t.Semigroup0())(r(n)(u))(e)}}})(l.mempty(t))}}},N=new D(function(){return e.foldableArray},function(n){return S(N)(n)},function(n){return function(t){var r=e.foldl(e.foldableArray)(function(t){return function(r){return n(r.value0)(t)(r.value1)}})(t),u=o.mapWithIndex(o.functorWithIndexArray)(h.create);return function(n){return r(u(n))}}},function(n){return function(t){var r=e.foldr(e.foldableArray)(function(t){return function(r){return n(t.value0)(t.value1)(r)}})(t),u=o.mapWithIndex(o.functorWithIndexArray)(h.create);return function(n){return r(u(n))}}}),B=function(n){return function(t){return function(r){return v(n)(function(n){return function(u){return function(e){return x.append(t.Semigroup0())(u)(r(n)(e))}}})(l.mempty(t))}}},_=function(n){return n.foldMapWithIndex},J=function(n){return function(t){return function(r){return function(e){return b.unwrap(b.newtypeEndo)(b.unwrap(b.newtypeDual)(_(n)(c.monoidDual(p.monoidEndo(u.categoryFn)))(function(n){var r=i.flip(t(n));return function(n){return c.Dual(p.Endo(r(n)))}})(e)))(r)}}}},R=function(n){return function(t){return function(r){return function(e){return b.unwrap(b.newtypeEndo)(_(n)(p.monoidEndo(u.categoryFn))(function(n){var r=t(n);return function(n){return p.Endo(r(n))}})(e))(r)}}}},U=function(n){return function(t){return function(r){return function(e){return function(i){return b.unwrap(b.newtypeEndo)(_(n)(p.monoidEndo(u.categoryFn))(function(n){return function(u){return function(i){return x.append(t)(r)(x.append(t)(e(n)(u))(i))}}})(i))(r)}}}}},k=function(n){return function(t){return function(r){return _(n)(t)(i.const(r))}}},z=function(n){return function(t){return v(n)(function(n){return function(r){return function(u){return r instanceof f.Nothing&&t(n)(u)?new f.Just({index:n,value:u}):r}}})(f.Nothing.value)}},G=function(n){return function(t){return function(r){var u=b.unwrap(b.newtypeDisj),e=_(n)(a.monoidDisj(t))(function(n){var t=r(n);return function(n){return a.Disj(t(n))}});return function(n){return u(e(n))}}}},H=function(n){return function(t){return function(r){var u=b.unwrap(b.newtypeConj),e=_(n)(d.monoidConj(t))(function(n){var t=r(n);return function(n){return d.Conj(t(n))}});return function(n){return u(e(n))}}}};module.exports={FoldableWithIndex:D,foldrWithIndex:I,foldlWithIndex:v,foldMapWithIndex:_,foldrWithIndexDefault:R,foldlWithIndexDefault:J,foldMapWithIndexDefaultR:S,foldMapWithIndexDefaultL:B,foldWithIndexM:L,traverseWithIndex_:W,forWithIndex_:j,surroundMapWithIndex:U,allWithIndex:H,anyWithIndex:G,findWithIndex:z,foldrDefault:M,foldlDefault:y,foldMapDefault:k,foldableWithIndexArray:N,foldableWithIndexMaybe:m,foldableWithIndexFirst:A,foldableWithIndexLast:q,foldableWithIndexAdditive:E,foldableWithIndexDual:C,foldableWithIndexDisj:F,foldableWithIndexConj:g,foldableWithIndexMultiplicative:w};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Monoid.Conj/index.js":"U/G5","../Data.Monoid.Disj/index.js":"9bR7","../Data.Monoid.Dual/index.js":"ULyl","../Data.Monoid.Endo/index.js":"2o47","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Unit/index.js":"NhVk"}],"V4EF":[function(require,module,exports) {
-"use strict";var n=require("../Data.FoldableWithIndex/index.js"),t=require("../Data.Function/index.js"),r=require("../Data.FunctorWithIndex/index.js"),e=require("../Data.Traversable/index.js"),u=require("../Data.Traversable.Accum.Internal/index.js"),i=require("../Data.Unit/index.js"),a=function(n,t,r,e){this.FoldableWithIndex1=n,this.FunctorWithIndex0=t,this.Traversable2=r,this.traverseWithIndex=e},c=function(n){return function(t){return function(u){var i=e.sequence(n.Traversable2())(t),a=r.mapWithIndex(n.FunctorWithIndex0())(u);return function(n){return i(a(n))}}}},o=function(n){return n.traverseWithIndex},f=function(n){return function(r){return function(e){return o(n)(r)(t.const(e))}}},l=new a(function(){return n.foldableWithIndexMultiplicative},function(){return r.functorWithIndexMultiplicative},function(){return e.traversableMultiplicative},function(n){return function(t){return e.traverse(e.traversableMultiplicative)(n)(t(i.unit))}}),s=new a(function(){return n.foldableWithIndexMaybe},function(){return r.functorWithIndexMaybe},function(){return e.traversableMaybe},function(n){return function(t){return e.traverse(e.traversableMaybe)(n)(t(i.unit))}}),d=new a(function(){return n.foldableWithIndexLast},function(){return r.functorWithIndexLast},function(){return e.traversableLast},function(n){return function(t){return e.traverse(e.traversableLast)(n)(t(i.unit))}}),v=new a(function(){return n.foldableWithIndexFirst},function(){return r.functorWithIndexFirst},function(){return e.traversableFirst},function(n){return function(t){return e.traverse(e.traversableFirst)(n)(t(i.unit))}}),x=new a(function(){return n.foldableWithIndexDual},function(){return r.functorWithIndexDual},function(){return e.traversableDual},function(n){return function(t){return e.traverse(e.traversableDual)(n)(t(i.unit))}}),b=new a(function(){return n.foldableWithIndexDisj},function(){return r.functorWithIndexDisj},function(){return e.traversableDisj},function(n){return function(t){return e.traverse(e.traversableDisj)(n)(t(i.unit))}}),h=new a(function(){return n.foldableWithIndexConj},function(){return r.functorWithIndexConj},function(){return e.traversableConj},function(n){return function(t){return e.traverse(e.traversableConj)(n)(t(i.unit))}}),I=new a(function(){return n.foldableWithIndexArray},function(){return r.functorWithIndexArray},function(){return e.traversableArray},function(n){return c(I)(n)}),W=new a(function(){return n.foldableWithIndexAdditive},function(){return r.functorWithIndexAdditive},function(){return e.traversableAdditive},function(n){return function(t){return e.traverse(e.traversableAdditive)(n)(t(i.unit))}}),D=function(n){return function(t){return function(r){return function(e){return u.stateR(o(n)(u.applicativeStateR)(function(n){return function(r){return function(e){return t(n)(e)(r)}}})(e))(r)}}}},j=function(n){return function(t){return function(r){return function(e){return D(n)(function(n){return function(r){return function(e){var u=t(n)(e)(r);return{accum:u,value:u}}}})(r)(e).value}}}},p=function(n){return function(t){return function(r){return function(e){return u.stateL(o(n)(u.applicativeStateL)(function(n){return function(r){return function(e){return t(n)(e)(r)}}})(e))(r)}}}},A=function(n){return function(t){return function(r){return function(e){return p(n)(function(n){return function(r){return function(e){var u=t(n)(r)(e);return{accum:u,value:u}}}})(r)(e).value}}}},F=function(n){return function(r){return t.flip(o(r)(n))}};module.exports={TraversableWithIndex:a,traverseWithIndex:o,traverseWithIndexDefault:c,forWithIndex:F,scanlWithIndex:A,mapAccumLWithIndex:p,scanrWithIndex:j,mapAccumRWithIndex:D,traverseDefault:f,traversableWithIndexArray:I,traversableWithIndexMaybe:s,traversableWithIndexFirst:v,traversableWithIndexLast:d,traversableWithIndexAdditive:W,traversableWithIndexDual:x,traversableWithIndexConj:h,traversableWithIndexDisj:b,traversableWithIndexMultiplicative:l};
-},{"../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Traversable/index.js":"n7EE","../Data.Traversable.Accum.Internal/index.js":"LbSr","../Data.Unit/index.js":"NhVk"}],"B2JL":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),t=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),r=require("../Control.Bind/index.js"),u=require("../Control.Extend/index.js"),o=require("../Control.Monad/index.js"),i=require("../Data.Bifoldable/index.js"),a=require("../Data.Bifunctor/index.js"),c=require("../Data.Bitraversable/index.js"),f=require("../Data.Bounded/index.js"),l=require("../Data.Eq/index.js"),s=require("../Data.Foldable/index.js"),m=require("../Data.FoldableWithIndex/index.js"),h=require("../Data.Function/index.js"),d=require("../Data.Functor/index.js"),w=require("../Data.Functor.Invariant/index.js"),p=require("../Data.FunctorWithIndex/index.js"),E=require("../Data.Maybe/index.js"),v=require("../Data.Monoid/index.js"),D=require("../Data.Ord/index.js"),F=require("../Data.Ordering/index.js"),x=require("../Data.Semigroup/index.js"),q=require("../Data.Show/index.js"),b=require("../Data.Traversable/index.js"),j=require("../Data.TraversableWithIndex/index.js"),y=require("../Data.Unit/index.js"),A=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),I=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),B=function(n){return function(t){return new q.Show(function(e){if(e instanceof A)return"(Left "+q.show(n)(e.value0)+")";if(e instanceof I)return"(Right "+q.show(t)(e.value0)+")";throw new Error("Failed pattern match at Data.Either (line 163, column 1 - line 165, column 46): "+[e.constructor.name])})}},g=function(n){return E["maybe'"](function(t){return A.create(n(t))})(I.create)},W=function(n){return E.maybe(new A(n))(I.create)},C=new d.Functor(function(n){return function(t){if(t instanceof A)return new A(t.value0);if(t instanceof I)return new I(n(t.value0));throw new Error("Failed pattern match at Data.Either (line 38, column 1 - line 38, column 52): "+[t.constructor.name])}}),O=new p.FunctorWithIndex(function(){return C},function(n){return d.map(C)(n(y.unit))}),T=new w.Invariant(w.imapF(C)),L=function(n){return function(n){if(n instanceof I)return n.value0;throw new Error("Failed pattern match at Data.Either (line 261, column 1 - line 261, column 52): "+[n.constructor.name])}},M=function(n){return function(n){if(n instanceof A)return n.value0;throw new Error("Failed pattern match at Data.Either (line 256, column 1 - line 256, column 51): "+[n.constructor.name])}},R=new s.Foldable(function(n){return function(t){return function(e){if(e instanceof A)return v.mempty(n);if(e instanceof I)return t(e.value0);throw new Error("Failed pattern match at Data.Either (line 187, column 1 - line 193, column 28): "+[t.constructor.name,e.constructor.name])}}},function(n){return function(t){return function(e){if(e instanceof A)return t;if(e instanceof I)return n(t)(e.value0);throw new Error("Failed pattern match at Data.Either (line 187, column 1 - line 193, column 28): "+[n.constructor.name,t.constructor.name,e.constructor.name])}}},function(n){return function(t){return function(e){if(e instanceof A)return t;if(e instanceof I)return n(e.value0)(t);throw new Error("Failed pattern match at Data.Either (line 187, column 1 - line 193, column 28): "+[n.constructor.name,t.constructor.name,e.constructor.name])}}}),S=new m.FoldableWithIndex(function(){return R},function(n){return function(t){return function(e){if(e instanceof A)return v.mempty(n);if(e instanceof I)return t(y.unit)(e.value0);throw new Error("Failed pattern match at Data.Either (line 195, column 1 - line 201, column 42): "+[t.constructor.name,e.constructor.name])}}},function(n){return function(t){return function(e){if(e instanceof A)return t;if(e instanceof I)return n(y.unit)(t)(e.value0);throw new Error("Failed pattern match at Data.Either (line 195, column 1 - line 201, column 42): "+[n.constructor.name,t.constructor.name,e.constructor.name])}}},function(n){return function(t){return function(e){if(e instanceof A)return t;if(e instanceof I)return n(y.unit)(e.value0)(t);throw new Error("Failed pattern match at Data.Either (line 195, column 1 - line 201, column 42): "+[n.constructor.name,t.constructor.name,e.constructor.name])}}}),G=new b.Traversable(function(){return R},function(){return C},function(n){return function(e){if(e instanceof A)return t.pure(n)(new A(e.value0));if(e instanceof I)return d.map(n.Apply0().Functor0())(I.create)(e.value0);throw new Error("Failed pattern match at Data.Either (line 211, column 1 - line 215, column 36): "+[e.constructor.name])}},function(n){return function(e){return function(r){if(r instanceof A)return t.pure(n)(new A(r.value0));if(r instanceof I)return d.map(n.Apply0().Functor0())(I.create)(e(r.value0));throw new Error("Failed pattern match at Data.Either (line 211, column 1 - line 215, column 36): "+[e.constructor.name,r.constructor.name])}}}),J=new j.TraversableWithIndex(function(){return S},function(){return O},function(){return G},function(n){return function(e){return function(r){if(r instanceof A)return t.pure(n)(new A(r.value0));if(r instanceof I)return d.map(n.Apply0().Functor0())(I.create)(e(y.unit)(r.value0));throw new Error("Failed pattern match at Data.Either (line 217, column 1 - line 219, column 53): "+[e.constructor.name,r.constructor.name])}}}),N=new u.Extend(function(){return C},function(n){return function(t){return t instanceof A?new A(t.value0):new I(n(t))}}),U=function(n){return function(t){return new l.Eq(function(e){return function(r){return e instanceof A&&r instanceof A?l.eq(n)(e.value0)(r.value0):e instanceof I&&r instanceof I&&l.eq(t)(e.value0)(r.value0)}})}},k=function(n){return function(t){return new D.Ord(function(){return U(n.Eq0())(t.Eq0())},function(e){return function(r){if(e instanceof A&&r instanceof A)return D.compare(n)(e.value0)(r.value0);if(e instanceof A)return F.LT.value;if(r instanceof A)return F.GT.value;if(e instanceof I&&r instanceof I)return D.compare(t)(e.value0)(r.value0);throw new Error("Failed pattern match at Data.Either (line 179, column 1 - line 179, column 64): "+[e.constructor.name,r.constructor.name])}})}},z=function(n){return new l.Eq1(function(t){return l.eq(U(n)(t))})},H=function(n){return new D.Ord1(function(){return z(n.Eq0())},function(t){return D.compare(k(n)(t))})},K=function(n){return function(t){return function(e){if(e instanceof A)return n(e.value0);if(e instanceof I)return t(e.value0);throw new Error("Failed pattern match at Data.Either (line 238, column 1 - line 238, column 64): "+[n.constructor.name,t.constructor.name,e.constructor.name])}}},P=K(h.const(E.Nothing.value))(E.Just.create),Q=K(h.const(!0))(h.const(!1)),V=K(h.const(!1))(h.const(!0)),X=function(t){return function(e){return function(r){return n.alt(t)(d.map(t.Functor0())(A.create)(e))(d.map(t.Functor0())(I.create)(r))}}},Y=function(n){return function(t){return new f.Bounded(function(){return k(n.Ord0())(t.Ord0())},new A(f.bottom(n)),new I(f.top(t)))}},Z=new a.Bifunctor(function(n){return function(t){return function(e){if(e instanceof A)return new A(n(e.value0));if(e instanceof I)return new I(t(e.value0));throw new Error("Failed pattern match at Data.Either (line 46, column 1 - line 48, column 36): "+[n.constructor.name,t.constructor.name,e.constructor.name])}}}),$=new i.Bifoldable(function(n){return function(n){return function(t){return function(e){if(e instanceof A)return n(e.value0);if(e instanceof I)return t(e.value0);throw new Error("Failed pattern match at Data.Either (line 203, column 1 - line 209, column 32): "+[n.constructor.name,t.constructor.name,e.constructor.name])}}}},function(n){return function(t){return function(e){return function(r){if(r instanceof A)return n(e)(r.value0);if(r instanceof I)return t(e)(r.value0);throw new Error("Failed pattern match at Data.Either (line 203, column 1 - line 209, column 32): "+[n.constructor.name,t.constructor.name,e.constructor.name,r.constructor.name])}}}},function(n){return function(t){return function(e){return function(r){if(r instanceof A)return n(r.value0)(e);if(r instanceof I)return t(r.value0)(e);throw new Error("Failed pattern match at Data.Either (line 203, column 1 - line 209, column 32): "+[n.constructor.name,t.constructor.name,e.constructor.name,r.constructor.name])}}}}),_=new c.Bitraversable(function(){return $},function(){return Z},function(n){return function(t){if(t instanceof A)return d.map(n.Apply0().Functor0())(A.create)(t.value0);if(t instanceof I)return d.map(n.Apply0().Functor0())(I.create)(t.value0);throw new Error("Failed pattern match at Data.Either (line 221, column 1 - line 225, column 37): "+[t.constructor.name])}},function(n){return function(t){return function(e){return function(r){if(r instanceof A)return d.map(n.Apply0().Functor0())(A.create)(t(r.value0));if(r instanceof I)return d.map(n.Apply0().Functor0())(I.create)(e(r.value0));throw new Error("Failed pattern match at Data.Either (line 221, column 1 - line 225, column 37): "+[t.constructor.name,e.constructor.name,r.constructor.name])}}}}),nn=new e.Apply(function(){return C},function(n){return function(t){if(n instanceof A)return new A(n.value0);if(n instanceof I)return d.map(C)(n.value0)(t);throw new Error("Failed pattern match at Data.Either (line 82, column 1 - line 84, column 30): "+[n.constructor.name,t.constructor.name])}}),tn=new r.Bind(function(){return nn},K(function(n){return function(t){return new A(n)}})(function(n){return function(t){return t(n)}})),en=function(n){return new x.Semigroup(function(t){return function(r){return e.apply(nn)(d.map(C)(x.append(n))(t))(r)}})},rn=new t.Applicative(function(){return nn},I.create),un=new o.Monad(function(){return rn},function(){return tn}),on=new n.Alt(function(){return C},function(n){return function(t){return n instanceof A?t:n}});module.exports={Left:A,Right:I,either:K,choose:X,isLeft:Q,isRight:V,fromLeft:M,fromRight:L,note:W,"note'":g,hush:P,functorEither:C,functorWithIndexEither:O,invariantEither:T,bifunctorEither:Z,applyEither:nn,applicativeEither:rn,altEither:on,bindEither:tn,monadEither:un,extendEither:N,showEither:B,eqEither:U,eq1Either:z,ordEither:k,ord1Either:H,boundedEither:Y,foldableEither:R,foldableWithIndexEither:S,bifoldableEither:$,traversableEither:G,traversableWithIndexEither:J,bitraversableEither:_,semigroupEither:en};
-},{"../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Extend/index.js":"JIoJ","../Control.Monad/index.js":"U/Ix","../Data.Bifoldable/index.js":"wjQo","../Data.Bifunctor/index.js":"e2Wc","../Data.Bitraversable/index.js":"8nb9","../Data.Bounded/index.js":"kcUU","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Functor.Invariant/index.js":"AXkC","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Unit/index.js":"NhVk"}],"bXvE":[function(require,module,exports) {
-"use strict";exports.pureE=function(n){return function(){return n}},exports.bindE=function(n){return function(r){return function(){return r(n())()}}},exports.untilE=function(n){return function(){for(;!n(););return{}}},exports.whileE=function(n){return function(r){return function(){for(;n();)r();return{}}}},exports.forE=function(n){return function(r){return function(t){return function(){for(var u=n;u<r;u++)t(u)()}}}},exports.foreachE=function(n){return function(r){return function(){for(var t=0,u=n.length;t<u;t++)r(n[t])()}}};
-},{}],"oTWB":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),i=require("../Control.Bind/index.js"),t=require("../Control.Monad/index.js"),o=require("../Data.Functor/index.js"),u=require("../Data.Monoid/index.js"),f=require("../Data.Semigroup/index.js"),c=new t.Monad(function(){return d},function(){return p}),p=new i.Bind(function(){return a},e.bindE),a=new r.Apply(function(){return E},t.ap(c)),d=new n.Applicative(function(){return a},e.pureE),E=new o.Functor(n.liftA1(d)),l=function(e){return new f.Semigroup(r.lift2(a)(f.append(e)))},s=function(n){return new u.Monoid(function(){return l(n.Semigroup0())},e.pureE(u.mempty(n)))};module.exports={functorEffect:E,applyEffect:a,applicativeEffect:d,bindEffect:p,monadEffect:c,semigroupEffect:l,monoidEffect:s,untilE:e.untilE,whileE:e.whileE,forE:e.forE,foreachE:e.foreachE};
-},{"./foreign.js":"bXvE","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Semigroup/index.js":"EsAJ"}],"OvLS":[function(require,module,exports) {
-"use strict";exports.showErrorImpl=function(r){return r.stack||r.toString()},exports.error=function(r){return new Error(r)},exports.message=function(r){return r.message},exports.name=function(r){return r.name||"Error"},exports.stackImpl=function(r){return function(t){return function(n){return n.stack?r(n.stack):t}}},exports.throwException=function(r){return function(){throw r}},exports.catchException=function(r){return function(t){return function(){try{return t()}catch(n){return n instanceof Error||"[object Error]"===Object.prototype.toString.call(n)?r(n)():r(new Error(n.toString()))()}}}};
-},{}],"0OCW":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),r=require("../Control.Applicative/index.js"),t=require("../Data.Either/index.js"),i=require("../Data.Functor/index.js"),o=require("../Data.Maybe/index.js"),n=require("../Data.Show/index.js"),a=require("../Effect/index.js"),c=function(o){return e.catchException((n=r.pure(a.applicativeEffect),function(e){return n(t.Left.create(e))}))(i.map(a.functorEffect)(t.Right.create)(o));var n},u=function(r){return e.throwException(e.error(r))},s=e.stackImpl(o.Just.create)(o.Nothing.value),p=new n.Show(e.showErrorImpl);module.exports={stack:s,throw:u,try:c,showError:p,error:e.error,message:e.message,name:e.name,throwException:e.throwException,catchException:e.catchException};
-},{"./foreign.js":"OvLS","../Control.Applicative/index.js":"qYya","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Show/index.js":"mFY7","../Effect/index.js":"oTWB"}],"L8Lk":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Bind/index.js"),t=require("../Data.Either/index.js"),o=require("../Data.Function/index.js"),e=require("../Data.Functor/index.js"),i=require("../Data.Maybe/index.js"),u=require("../Data.Unit/index.js"),a=require("../Effect/index.js"),c=require("../Effect.Exception/index.js"),f=function(n,r){this.Monad0=n,this.throwError=r},d=function(n,r){this.MonadThrow0=n,this.catchError=r},h=function(n){return n.throwError},s=new f(function(){return i.monadMaybe},o.const(i.Nothing.value)),l=new f(function(){return t.monadEither},t.Left.create),w=new f(function(){return a.monadEffect},c.throwException),E=new d(function(){return s},function(n){return function(r){if(n instanceof i.Nothing)return r(u.unit);if(n instanceof i.Just)return new i.Just(n.value0);throw new Error("Failed pattern match at Control.Monad.Error.Class (line 79, column 1 - line 81, column 33): "+[n.constructor.name,r.constructor.name])}}),m=new d(function(){return l},function(n){return function(r){if(n instanceof t.Left)return r(n.value0);if(n instanceof t.Right)return new t.Right(n.value0);throw new Error("Failed pattern match at Control.Monad.Error.Class (line 72, column 1 - line 74, column 35): "+[n.constructor.name,r.constructor.name])}}),M=new d(function(){return w},o.flip(c.catchException)),p=function(n){return n.catchError},x=function(n){return function(r){return function(t){return function(o){return p(n)(t)(function(t){var e=r(t);if(e instanceof i.Nothing)return h(n.MonadThrow0())(t);if(e instanceof i.Just)return o(e.value0);throw new Error("Failed pattern match at Control.Monad.Error.Class (line 57, column 5 - line 59, column 26): "+[e.constructor.name])})}}}},T=function(r){return function(o){return p(r)(e.map(r.MonadThrow0().Monad0().Bind1().Apply0().Functor0())(t.Right.create)(o))((i=n.pure(r.MonadThrow0().Monad0().Applicative0()),function(n){return i(t.Left.create(n))}));var i}},v=function(o){return function(e){return function(i){return function(u){return r.bind(o.MonadThrow0().Monad0().Bind1())(e)(function(e){return r.bind(o.MonadThrow0().Monad0().Bind1())(T(o)(u(e)))(function(u){return r.discard(r.discardUnit)(o.MonadThrow0().Monad0().Bind1())(i(e))(function(){return t.either(h(o.MonadThrow0()))(n.pure(o.MonadThrow0().Monad0().Applicative0()))(u)})})})}}}};module.exports={catchError:p,throwError:h,MonadThrow:f,MonadError:d,catchJust:x,try:T,withResource:v,monadThrowEither:l,monadErrorEither:m,monadThrowMaybe:s,monadErrorMaybe:E,monadThrowEffect:w,monadErrorEffect:M};
-},{"../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Data.Either/index.js":"B2JL","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Unit/index.js":"NhVk","../Effect/index.js":"oTWB","../Effect.Exception/index.js":"0OCW"}],"c2ZJ":[function(require,module,exports) {
-"use strict";var n=require("../Control.Category/index.js"),o=require("../Control.Monad/index.js"),e=require("../Control.Semigroupoid/index.js"),r=require("../Data.Functor/index.js"),t=function(n,o){this.Monad0=n,this.ask=o},i=function(n,o){this.MonadAsk0=n,this.local=o},u=new t(function(){return o.monadFn},n.identity(n.categoryFn)),a=new i(function(){return u},e.composeFlipped(e.semigroupoidFn)),d=function(n){return n.local},s=function(n){return n.ask},c=function(n){return function(o){return r.map(n.Monad0().Bind1().Apply0().Functor0())(o)(s(n))}};module.exports={ask:s,local:d,MonadAsk:t,asks:c,MonadReader:i,monadAskFun:u,monadReaderFun:a};
-},{"../Control.Category/index.js":"IAi2","../Control.Monad/index.js":"U/Ix","../Control.Semigroupoid/index.js":"/riR","../Data.Functor/index.js":"+0AE"}],"U0zO":[function(require,module,exports) {
-"use strict";var t=function(t,e){this.Extend0=t,this.extract=e},e=function(t){return t.extract};module.exports={Comonad:t,extract:e};
-},{}],"fhx3":[function(require,module,exports) {
-"use strict";var n=require("../Data.Bounded/index.js"),e=require("../Data.Monoid/index.js"),r=require("../Data.Newtype/index.js"),t=require("../Data.Ord/index.js"),u=require("../Data.Semigroup/index.js"),o=require("../Data.Show/index.js"),i=function(n){return n},a=function(n){return new o.Show(function(e){return"(Max "+o.show(n)(e)+")"})},c=function(n){return new u.Semigroup(function(e){return function(r){return t.max(n)(e)(r)}})},d=new r.Newtype(function(n){return n},i),x=function(r){return new e.Monoid(function(){return c(r.Ord0())},n.bottom(r))},f=function(n){return n},s=function(n){return new t.Ord(function(){return f(n.Eq0())},function(e){return function(r){return t.compare(n)(e)(r)}})};module.exports={Max:i,newtypeMax:d,eqMax:f,ordMax:s,semigroupMax:c,monoidMax:x,showMax:a};
-},{"../Data.Bounded/index.js":"kcUU","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"X+tn":[function(require,module,exports) {
-"use strict";var n=require("../Data.Bounded/index.js"),e=require("../Data.Monoid/index.js"),r=require("../Data.Newtype/index.js"),i=require("../Data.Ord/index.js"),t=require("../Data.Semigroup/index.js"),u=require("../Data.Show/index.js"),o=function(n){return n},c=function(n){return new u.Show(function(e){return"(Min "+u.show(n)(e)+")"})},d=function(n){return new t.Semigroup(function(e){return function(r){return i.min(n)(e)(r)}})},a=new r.Newtype(function(n){return n},o),f=function(r){return new e.Monoid(function(){return d(r.Ord0())},n.top(r))},s=function(n){return n},w=function(n){return new i.Ord(function(){return s(n.Eq0())},function(e){return function(r){return i.compare(n)(e)(r)}})};module.exports={Min:o,newtypeMin:a,eqMin:s,ordMin:w,semigroupMin:d,monoidMin:f,showMin:c};
-},{"../Data.Bounded/index.js":"kcUU","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"ht+A":[function(require,module,exports) {
-"use strict";var n=require("../Control.Apply/index.js"),t=require("../Control.Category/index.js"),r=require("../Data.Foldable/index.js"),u=require("../Data.Function/index.js"),e=require("../Data.Functor/index.js"),i=require("../Data.Newtype/index.js"),o=require("../Data.Ord.Max/index.js"),f=require("../Data.Ord.Min/index.js"),c=require("../Data.Semigroup/index.js"),a=require("../Data.Unit/index.js"),l=function(n){return n},d=function(n){return n},p=function(n,t,r){this.Foldable0=n,this.fold1=t,this.foldMap1=r},s=function(n){return new c.Semigroup(function(t){return function(r){return l(function(u){return c.append(n)(t(u))(c.append(n)(u)(r(u)))})}})},x=function(t){return new c.Semigroup(function(r){return function(u){return n.applySecond(t)(r)(u)}})},M=function(n){return n},y=function(n){return n},m=function(n){return n.foldMap1},D=function(n){return function(t){return function(r){return function(e){return function(i){return M(m(n)(s(t))(function(n){return l(u.const(e(n)))})(i))(r)}}}}},q=function(n){return function(r){return u.flip(D(n)(r))(t.identity(t.categoryFn))}},F=function(n){return function(t){return i.ala(e.functorFn)(o.newtypeMax)(o.newtypeMax)(o.Max)(m(t)(o.semigroupMax(n)))}},g=function(n){return function(t){return i.ala(e.functorFn)(f.newtypeMin)(f.newtypeMin)(f.Min)(m(t)(f.semigroupMin(n)))}},j=function(n){return function(t){return function(r){return function(u){return e.voidRight(t.Functor0())(a.unit)(y(m(n)(x(t))(function(n){return d(r(n))})(u)))}}}},w=function(n){return function(t){return u.flip(j(n)(t))}},b=function(n){return function(r){return j(n)(r)(t.identity(t.categoryFn))}},v=function(n){return function(r){return m(n)(r)(t.identity(t.categoryFn))}},h=new p(function(){return r.foldableDual},function(n){return v(h)(n)},function(n){return function(n){return function(t){return n(t)}}}),S=new p(function(){return r.foldableMultiplicative},function(n){return v(S)(n)},function(n){return function(n){return function(t){return n(t)}}}),C=function(n){return n.fold1},_=function(n){return function(t){return function(r){return function(u){var i=C(n)(r),o=e.map(t)(u);return function(n){return i(o(n))}}}}};module.exports={Foldable1:p,foldMap1:m,fold1:C,traverse1_:j,for1_:w,sequence1_:b,foldMap1Default:_,fold1Default:v,intercalate:q,intercalateMap:D,maximum:F,minimum:g,foldableDual:h,foldableMultiplicative:S};
-},{"../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Ord.Max/index.js":"fhx3","../Data.Ord.Min/index.js":"X+tn","../Data.Semigroup/index.js":"EsAJ","../Data.Unit/index.js":"NhVk"}],"qkfi":[function(require,module,exports) {
-"use strict";var e=require("../Control.Category/index.js"),r=require("../Data.Functor/index.js"),n=require("../Data.Monoid.Dual/index.js"),t=require("../Data.Monoid.Multiplicative/index.js"),u=require("../Data.Semigroup.Foldable/index.js"),i=require("../Data.Traversable/index.js"),a=function(e,r,n,t){this.Foldable10=e,this.Traversable1=r,this.sequence1=n,this.traverse1=t},o=function(e){return e.traverse1},c=function(r){return function(n){return o(r)(n)(e.identity(e.categoryFn))}},l=new a(function(){return u.foldableDual},function(){return i.traversableDual},function(e){return c(l)(e)},function(e){return function(t){return function(u){return r.map(e.Functor0())(n.Dual)(t(u))}}}),s=new a(function(){return u.foldableMultiplicative},function(){return i.traversableMultiplicative},function(e){return c(s)(e)},function(e){return function(n){return function(u){return r.map(e.Functor0())(t.Multiplicative)(n(u))}}}),f=function(e){return e.sequence1},v=function(e){return function(n){return function(t){return function(u){return f(e)(n)(r.map(e.Traversable1().Functor0())(t)(u))}}}};module.exports={sequence1:f,traverse1:o,Traversable1:a,traverse1Default:v,sequence1Default:c,traversableDual:l,traversableMultiplicative:s};
-},{"../Control.Category/index.js":"IAi2","../Data.Functor/index.js":"+0AE","../Data.Monoid.Dual/index.js":"ULyl","../Data.Monoid.Multiplicative/index.js":"y5cd","../Data.Semigroup.Foldable/index.js":"ht+A","../Data.Traversable/index.js":"n7EE"}],"2OKT":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),t=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),r=require("../Control.Bind/index.js"),u=require("../Control.Comonad/index.js"),i=require("../Control.Extend/index.js"),o=require("../Control.Monad/index.js"),c=require("../Data.Eq/index.js"),d=require("../Data.Foldable/index.js"),f=require("../Data.FoldableWithIndex/index.js"),a=require("../Data.Functor/index.js"),l=require("../Data.Functor.Invariant/index.js"),y=require("../Data.FunctorWithIndex/index.js"),I=require("../Data.Newtype/index.js"),s=require("../Data.Ord/index.js"),x=require("../Data.Semigroup.Foldable/index.js"),p=require("../Data.Semigroup.Traversable/index.js"),w=require("../Data.Show/index.js"),q=require("../Data.Traversable/index.js"),b=require("../Data.TraversableWithIndex/index.js"),j=require("../Data.Unit/index.js"),m=function(n){return n},v=function(n){return new w.Show(function(t){return"(Identity "+w.show(n)(t)+")"})},F=function(n){return n},h=function(n){return n},D=function(n){return n},A=function(n){return n},g=new I.Newtype(function(n){return n},m),C=function(n){return n},W=function(n){return n},T=function(n){return n},E=new a.Functor(function(n){return function(t){return n(t)}}),S=new y.FunctorWithIndex(function(){return E},function(n){return function(t){return n(j.unit)(t)}}),B=new l.Invariant(l.imapF(E)),M=new d.Foldable(function(n){return function(n){return function(t){return n(t)}}},function(n){return function(t){return function(e){return n(t)(e)}}},function(n){return function(t){return function(e){return n(e)(t)}}}),N=new f.FoldableWithIndex(function(){return M},function(n){return function(n){return function(t){return n(j.unit)(t)}}},function(n){return function(t){return function(e){return n(j.unit)(t)(e)}}},function(n){return function(t){return function(e){return n(j.unit)(e)(t)}}}),O=new q.Traversable(function(){return M},function(){return E},function(n){return function(t){return a.map(n.Apply0().Functor0())(m)(t)}},function(n){return function(t){return function(e){return a.map(n.Apply0().Functor0())(m)(t(e))}}}),R=new b.TraversableWithIndex(function(){return N},function(){return S},function(){return O},function(n){return function(t){return function(e){return a.map(n.Apply0().Functor0())(m)(t(j.unit)(e))}}}),z=new x.Foldable1(function(){return M},function(n){return function(n){return n}},function(n){return function(n){return function(t){return n(t)}}}),U=new p.Traversable1(function(){return z},function(){return O},function(n){return function(t){return a.map(n.Functor0())(m)(t)}},function(n){return function(t){return function(e){return a.map(n.Functor0())(m)(t(e))}}}),k=new i.Extend(function(){return E},function(n){return function(t){return n(t)}}),G=function(n){return n},H=function(n){return n},J=new c.Eq1(function(n){return c.eq(H(n))}),K=new s.Ord1(function(){return J},function(n){return s.compare(A(n))}),L=new u.Comonad(function(){return k},function(n){return n}),P=function(n){return n},Q=function(n){return n},V=function(n){return n},X=new e.Apply(function(){return E},function(n){return function(t){return n(t)}}),Y=new r.Bind(function(){return X},function(n){return function(t){return t(n)}}),Z=new t.Applicative(function(){return X},m),$=new o.Monad(function(){return Z},function(){return Y}),_=new n.Alt(function(){return E},function(n){return function(t){return n}});module.exports={Identity:m,newtypeIdentity:g,eqIdentity:H,ordIdentity:A,boundedIdentity:Q,heytingAlgebraIdentity:T,booleanAlgebraIdentity:V,semigroupIdenity:h,monoidIdentity:C,semiringIdentity:F,euclideanRingIdentity:G,ringIdentity:D,commutativeRingIdentity:P,lazyIdentity:W,showIdentity:v,eq1Identity:J,ord1Identity:K,functorIdentity:E,functorWithIndexIdentity:S,invariantIdentity:B,altIdentity:_,applyIdentity:X,applicativeIdentity:Z,bindIdentity:Y,monadIdentity:$,extendIdentity:k,comonadIdentity:L,foldableIdentity:M,foldable1Identity:z,foldableWithIndexIdentity:N,traversableIdentity:O,traversable1Identity:U,traversableWithIndexIdentity:R};
-},{"../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Comonad/index.js":"U0zO","../Control.Extend/index.js":"JIoJ","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Functor/index.js":"+0AE","../Data.Functor.Invariant/index.js":"AXkC","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Semigroup.Foldable/index.js":"ht+A","../Data.Semigroup.Traversable/index.js":"qkfi","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Unit/index.js":"NhVk"}],"bagd":[function(require,module,exports) {
-"use strict";exports.new=function(n){return function(){return{value:n}}},exports.read=function(n){return function(){return n.value}},exports["modify'"]=function(n){return function(t){return function(){var r=n(t.value);return t.value=r.state,r.value}}},exports.write=function(n){return function(t){return function(){return t.value=n,{}}}};
-},{}],"/Jaj":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),r=require("../Data.Functor/index.js"),t=require("../Effect/index.js"),i=function(r){return e["modify'"](function(e){var t=r(e);return{state:t,value:t}})},n=function(e){return function(n){return r.void(t.functorEffect)(i(e)(n))}};module.exports={modify:i,modify_:n,new:e.new,read:e.read,"modify'":e["modify'"],write:e.write};
-},{"./foreign.js":"bagd","../Data.Functor/index.js":"+0AE","../Effect/index.js":"oTWB"}],"UVIy":[function(require,module,exports) {
-"use strict";var n=require("../Control.Bind/index.js"),t=require("../Control.Monad/index.js"),e=require("../Data.Bifunctor/index.js"),r=require("../Data.Either/index.js"),u=require("../Data.Functor/index.js"),o=require("../Data.Identity/index.js"),i=require("../Data.Maybe/index.js"),c=require("../Data.Unit/index.js"),a=require("../Effect/index.js"),f=require("../Effect.Ref/index.js"),l=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),s=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),d=function(n,t){this.Monad0=n,this.tailRecM=t},m=function(n){return n.tailRecM},w=function(n){return function(t){return function(e){return function(r){return m(n)(function(n){return t(n.a)(n.b)})({a:e,b:r})}}}},v=function(n){return function(t){return function(e){return function(r){return function(u){return m(n)(function(n){return t(n.a)(n.b)(n.c)})({a:e,b:r,c:u})}}}}},h=function(n){return function(t){return function(t){var e,r=!1;function u(e){if(!(e instanceof l)){if(e instanceof s)return r=!0,e.value0;throw new Error("Failed pattern match at Control.Monad.Rec.Class (line 91, column 3 - line 91, column 25): "+[e.constructor.name])}t=n(e.value0)}for(;!r;)e=u(t);return e}(n(t))}},R=new d(function(){return i.monadMaybe},function(n){return function(t){return h(function(t){if(t instanceof i.Nothing)return new s(i.Nothing.value);if(t instanceof i.Just&&t.value0 instanceof l)return new l(n(t.value0.value0));if(t instanceof i.Just&&t.value0 instanceof s)return new s(new i.Just(t.value0.value0));throw new Error("Failed pattern match at Control.Monad.Rec.Class (line 127, column 7 - line 127, column 31): "+[t.constructor.name])})(n(t))}}),M=new d(function(){return o.monadIdentity},function(n){var t=h(function(t){return n(t)});return function(n){return o.Identity(t(n))}}),p=new d(function(){return t.monadFn},function(n){return function(t){return function(e){return h(function(t){return n(t)(e)})(t)}}}),C=new d(function(){return r.monadEither},function(n){return function(t){return h(function(t){if(t instanceof r.Left)return new s(new r.Left(t.value0));if(t instanceof r.Right&&t.value0 instanceof l)return new l(n(t.value0.value0));if(t instanceof r.Right&&t.value0 instanceof s)return new s(new r.Right(t.value0.value0));throw new Error("Failed pattern match at Control.Monad.Rec.Class (line 119, column 7 - line 119, column 33): "+[t.constructor.name])})(n(t))}}),E=new d(function(){return a.monadEffect},function(t){return function(e){var r=function(n){if(n instanceof s)return n.value0;throw new Error("Failed pattern match at Control.Monad.Rec.Class (line 111, column 30 - line 111, column 44): "+[n.constructor.name])};return function(){var o=n.bindFlipped(a.bindEffect)(f.new)(t(e))();return function(){for(;!function(){var n=f.read(o)();if(n instanceof l){var e=t(n.value0)();f.write(e)(o)();return!1}if(n instanceof s)return!0;throw new Error("Failed pattern match at Control.Monad.Rec.Class (line 102, column 22 - line 107, column 28): "+[n.constructor.name])}(););}(),u.map(a.functorEffect)(r)(f.read(o))()}}}),F=new u.Functor(function(n){return function(t){if(t instanceof l)return new l(t.value0);if(t instanceof s)return new s(n(t.value0));throw new Error("Failed pattern match at Control.Monad.Rec.Class (line 25, column 1 - line 25, column 48): "+[t.constructor.name])}}),x=function(n){return function(t){return m(n)(function(e){return u.voidRight(n.Monad0().Bind1().Apply0().Functor0())(new l(e))(t)})(c.unit)}},b=new e.Bifunctor(function(n){return function(t){return function(e){if(e instanceof l)return new l(n(e.value0));if(e instanceof s)return new s(t(e.value0));throw new Error("Failed pattern match at Control.Monad.Rec.Class (line 27, column 1 - line 29, column 34): "+[n.constructor.name,t.constructor.name,e.constructor.name])}}});module.exports={Loop:l,Done:s,MonadRec:d,tailRec:h,tailRecM:m,tailRecM2:w,tailRecM3:v,forever:x,functorStep:F,bifunctorStep:b,monadRecIdentity:M,monadRecEffect:E,monadRecFunction:p,monadRecEither:C,monadRecMaybe:R};
-},{"../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Bifunctor/index.js":"e2Wc","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Identity/index.js":"2OKT","../Data.Maybe/index.js":"5mN7","../Data.Unit/index.js":"NhVk","../Effect/index.js":"oTWB","../Effect.Ref/index.js":"/Jaj"}],"y9cE":[function(require,module,exports) {
-"use strict";var n=require("../Data.Unit/index.js"),t=function(n){this.defer=n},r=new t(function(t){return n.unit}),e=new t(function(t){return function(r){return t(n.unit)(r)}}),u=function(n){return n.defer},i=function(n){return function(t){var r=u(n)(function(n){return t(r)});return r}};module.exports={defer:u,Lazy:t,fix:i,lazyFn:e,lazyUnit:r};
-},{"../Data.Unit/index.js":"NhVk"}],"e7y+":[function(require,module,exports) {
-"use strict";var n=require("../Data.HeytingAlgebra/index.js"),e=function(n){this.HeytingAlgebraRecord0=n},r=function(n){this.HeytingAlgebra0=n},o=new r(function(){return n.heytingAlgebraUnit}),t=new e(function(){return n.heytingAlgebraRecordNil}),i=function(r){return function(o){return function(t){return function(i){return new e(function(){return n.heytingAlgebraRecordCons(r)(o)(t.HeytingAlgebraRecord0())(i.HeytingAlgebra0())})}}}},a=function(e){return function(o){return new r(function(){return n.heytingAlgebraRecord(e)(o.HeytingAlgebraRecord0())})}},g=function(e){return new r(function(){return n.heytingAlgebraFunction(e.HeytingAlgebra0())})},l=new r(function(){return n.heytingAlgebraBoolean});module.exports={BooleanAlgebra:r,BooleanAlgebraRecord:e,booleanAlgebraBoolean:l,booleanAlgebraUnit:o,booleanAlgebraFn:g,booleanAlgebraRecord:a,booleanAlgebraRecordNil:t,booleanAlgebraRecordCons:i};
-},{"../Data.HeytingAlgebra/index.js":"paZe"}],"8PTu":[function(require,module,exports) {
-"use strict";var t=require("../Control.Category/index.js"),n=require("../Data.Functor/index.js"),r=require("../Data.Identity/index.js"),u=require("../Data.Newtype/index.js"),e=function(t,n,r){this.Functor0=t,this.collect=n,this.distribute=r},i=new e(function(){return r.functorIdentity},function(t){return function(e){var i,c=n.map(t)((i=u.unwrap(r.newtypeIdentity),function(t){return i(e(t))}));return function(t){return r.Identity(c(t))}}},function(t){var e=n.map(t)(u.unwrap(r.newtypeIdentity));return function(t){return r.Identity(e(t))}}),c=function(t){return t.distribute},o=new e(function(){return n.functorFn},function(t){return function(r){var u=c(o)(t),e=n.map(t)(r);return function(t){return u(e(t))}}},function(t){return function(r){return function(u){return n.map(t)(function(t){return t(u)})(r)}}}),f=function(t){return function(r){return function(u){var e=n.map(t.Functor0())(u),i=c(t)(r);return function(t){return e(i(t))}}}},a=function(t){return function(r){return function(u){var e=c(t)(r),i=n.map(r)(u);return function(t){return e(i(t))}}}},d=function(t){return t.collect},s=function(n){return function(r){return d(n)(r)(t.identity(t.categoryFn))}};module.exports={collect:d,distribute:c,Distributive:e,distributeDefault:s,collectDefault:a,cotraverse:f,distributiveIdentity:i,distributiveFunction:o};
-},{"../Control.Category/index.js":"IAi2","../Data.Functor/index.js":"+0AE","../Data.Identity/index.js":"2OKT","../Data.Newtype/index.js":"lz8k"}],"Uq/R":[function(require,module,exports) {
-"use strict";var t=function(t,n){this.from=t,this.to=n},n=function(t){return t.to},r=new t(function(t){return t},function(t){return t}),o=function(t){return t.from};module.exports={TypeEquals:t,to:n,from:o,refl:r};
-},{}],"II/O":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),u=require("../Control.Biapplicative/index.js"),r=require("../Control.Biapply/index.js"),t=require("../Control.Bind/index.js"),i=require("../Control.Comonad/index.js"),o=require("../Control.Extend/index.js"),a=require("../Control.Lazy/index.js"),l=require("../Control.Monad/index.js"),c=require("../Control.Semigroupoid/index.js"),f=require("../Data.Bifoldable/index.js"),v=require("../Data.Bifunctor/index.js"),p=require("../Data.Bitraversable/index.js"),d=require("../Data.BooleanAlgebra/index.js"),s=require("../Data.Bounded/index.js"),w=require("../Data.CommutativeRing/index.js"),m=require("../Data.Distributive/index.js"),q=require("../Data.Eq/index.js"),x=require("../Data.Foldable/index.js"),b=require("../Data.FoldableWithIndex/index.js"),T=require("../Data.Functor/index.js"),j=require("../Data.Functor.Invariant/index.js"),g=require("../Data.FunctorWithIndex/index.js"),y=require("../Data.HeytingAlgebra/index.js"),D=require("../Data.Maybe/index.js"),F=require("../Data.Maybe.First/index.js"),A=require("../Data.Monoid/index.js"),h=require("../Data.Newtype/index.js"),S=require("../Data.Ord/index.js"),B=require("../Data.Ordering/index.js"),C=require("../Data.Ring/index.js"),I=require("../Data.Semigroup/index.js"),E=require("../Data.Semigroup.Foldable/index.js"),W=require("../Data.Semigroup.Traversable/index.js"),M=require("../Data.Semiring/index.js"),R=require("../Data.Show/index.js"),O=require("../Data.Traversable/index.js"),z=require("../Data.TraversableWithIndex/index.js"),H=require("../Data.Unit/index.js"),L=require("../Type.Equality/index.js"),G=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(u){return new n(e,u)}},n}(),N=function(n){return function(e){return n(e.value0)(e.value1)}},k=function(n){return new G(n.value1,n.value0)},J=function(n){return n.value1},U=function(n){return function(e){return new R.Show(function(u){return"(Tuple "+R.show(n)(u.value0)+" "+R.show(e)(u.value1)+")"})}},K=function(n){return function(e){return new M.Semiring(function(u){return function(r){return new G(M.add(n)(u.value0)(r.value0),M.add(e)(u.value1)(r.value1))}},function(u){return function(r){return new G(M.mul(n)(u.value0)(r.value0),M.mul(e)(u.value1)(r.value1))}},new G(M.one(n),M.one(e)),new G(M.zero(n),M.zero(e)))}},P=new c.Semigroupoid(function(n){return function(e){return new G(e.value0,n.value1)}}),Q=function(n){return function(e){return new I.Semigroup(function(u){return function(r){return new G(I.append(n)(u.value0)(r.value0),I.append(e)(u.value1)(r.value1))}})}},V=function(n){return function(e){return new C.Ring(function(){return K(n.Semiring0())(e.Semiring0())},function(u){return function(r){return new G(C.sub(n)(u.value0)(r.value0),C.sub(e)(u.value1)(r.value1))}})}},X=function(n){return function(e){return new A.Monoid(function(){return Q(n.Semigroup0())(e.Semigroup0())},new G(A.mempty(n),A.mempty(e)))}},Y=function(n){return function(e){return function(u){var r=h.unwrap(F.newtypeFirst),t=x.foldMap(n)(F.monoidFirst)(function(n){return q.eq(e)(u)(n.value0)?new D.Just(n.value1):D.Nothing.value});return function(n){return r(t(n))}}}},Z=function(n){return function(e){return new y.HeytingAlgebra(function(u){return function(r){return new G(y.conj(n)(u.value0)(r.value0),y.conj(e)(u.value1)(r.value1))}},function(u){return function(r){return new G(y.disj(n)(u.value0)(r.value0),y.disj(e)(u.value1)(r.value1))}},new G(y.ff(n),y.ff(e)),function(u){return function(r){return new G(y.implies(n)(u.value0)(r.value0),y.implies(e)(u.value1)(r.value1))}},function(u){return new G(y.not(n)(u.value0),y.not(e)(u.value1))},new G(y.tt(n),y.tt(e)))}},$=new T.Functor(function(n){return function(e){return new G(e.value0,n(e.value1))}}),_=new g.FunctorWithIndex(function(){return $},function(n){return T.map($)(n(H.unit))}),nn=new j.Invariant(j.imapF($)),en=function(n){return n.value0},un=function(n){return function(e){return new a.Lazy(function(u){return new G(a.defer(n)(function(n){return en(u(H.unit))}),a.defer(e)(function(n){return J(u(H.unit))}))})}},rn=new x.Foldable(function(n){return function(n){return function(e){return n(e.value1)}}},function(n){return function(e){return function(u){return n(e)(u.value1)}}},function(n){return function(e){return function(u){return n(u.value1)(e)}}}),tn=new b.FoldableWithIndex(function(){return rn},function(n){return function(n){return function(e){return n(H.unit)(e.value1)}}},function(n){return function(e){return function(u){return n(H.unit)(e)(u.value1)}}},function(n){return function(e){return function(u){return n(H.unit)(u.value1)(e)}}}),on=new O.Traversable(function(){return rn},function(){return $},function(n){return function(e){return T.map(n.Apply0().Functor0())(G.create(e.value0))(e.value1)}},function(n){return function(e){return function(u){return T.map(n.Apply0().Functor0())(G.create(u.value0))(e(u.value1))}}}),an=new z.TraversableWithIndex(function(){return tn},function(){return _},function(){return on},function(n){return function(e){return function(u){return T.map(n.Apply0().Functor0())(G.create(u.value0))(e(H.unit)(u.value1))}}}),ln=new E.Foldable1(function(){return rn},function(n){return function(n){return n.value1}},function(n){return function(n){return function(e){return n(e.value1)}}}),cn=new W.Traversable1(function(){return ln},function(){return on},function(n){return function(e){return T.map(n.Functor0())(G.create(e.value0))(e.value1)}},function(n){return function(e){return function(u){return T.map(n.Functor0())(G.create(u.value0))(e(u.value1))}}}),fn=new o.Extend(function(){return $},function(n){return function(e){return new G(e.value0,n(e))}}),vn=function(n){return function(e){return new q.Eq(function(u){return function(r){return q.eq(n)(u.value0)(r.value0)&&q.eq(e)(u.value1)(r.value1)}})}},pn=function(n){return function(e){return new S.Ord(function(){return vn(n.Eq0())(e.Eq0())},function(u){return function(r){var t=S.compare(n)(u.value0)(r.value0);return t instanceof B.LT?B.LT.value:t instanceof B.GT?B.GT.value:S.compare(e)(u.value1)(r.value1)}})}},dn=function(n){return new q.Eq1(function(e){return q.eq(vn(n)(e))})},sn=function(n){return new S.Ord1(function(){return dn(n.Eq0())},function(e){return S.compare(pn(n)(e))})},wn=function n(e){return new m.Distributive(function(){return $},function(u){return m.collectDefault(n(e))(u)},function(n){var u=G.create(L.from(e)(H.unit)),r=T.map(n)(J);return function(n){return u(r(n))}})},mn=function(n){return function(e){return function(u){return n(new G(e,u))}}},qn=new i.Comonad(function(){return fn},J),xn=function(n){return function(e){return new w.CommutativeRing(function(){return V(n.Ring0())(e.Ring0())})}},bn=function(n){return function(e){return new s.Bounded(function(){return pn(n.Ord0())(e.Ord0())},new G(s.bottom(n),s.bottom(e)),new G(s.top(n),s.top(e)))}},Tn=function(n){return function(e){return new d.BooleanAlgebra(function(){return Z(n.HeytingAlgebra0())(e.HeytingAlgebra0())})}},jn=new v.Bifunctor(function(n){return function(e){return function(u){return new G(n(u.value0),e(u.value1))}}}),gn=new f.Bifoldable(function(n){return function(e){return function(u){return function(r){return I.append(n.Semigroup0())(e(r.value0))(u(r.value1))}}}},function(n){return function(e){return function(u){return function(r){return e(n(u)(r.value0))(r.value1)}}}},function(n){return function(e){return function(u){return function(r){return n(r.value0)(e(r.value1)(u))}}}}),yn=new p.Bitraversable(function(){return gn},function(){return jn},function(n){return function(u){return e.apply(n.Apply0())(T.map(n.Apply0().Functor0())(G.create)(u.value0))(u.value1)}},function(n){return function(u){return function(r){return function(t){return e.apply(n.Apply0())(T.map(n.Apply0().Functor0())(G.create)(u(t.value0)))(r(t.value1))}}}}),Dn=new r.Biapply(function(){return jn},function(n){return function(e){return new G(n.value0(e.value0),n.value1(e.value1))}}),Fn=new u.Biapplicative(function(){return Dn},G.create),An=function(n){return new e.Apply(function(){return $},function(e){return function(u){return new G(I.append(n)(e.value0)(u.value0),e.value1(u.value1))}})},hn=function(n){return new t.Bind(function(){return An(n)},function(e){return function(u){var r=u(e.value1);return new G(I.append(n)(e.value0)(r.value0),r.value1)}})},Sn=function(e){return new n.Applicative(function(){return An(e.Semigroup0())},G.create(A.mempty(e)))},Bn=function(n){return new l.Monad(function(){return Sn(n)},function(){return hn(n.Semigroup0())})};module.exports={Tuple:G,fst:en,snd:J,curry:mn,uncurry:N,swap:k,lookup:Y,showTuple:U,eqTuple:vn,eq1Tuple:dn,ordTuple:pn,ord1Tuple:sn,boundedTuple:bn,semigroupoidTuple:P,semigroupTuple:Q,monoidTuple:X,semiringTuple:K,ringTuple:V,commutativeRingTuple:xn,heytingAlgebraTuple:Z,booleanAlgebraTuple:Tn,functorTuple:$,functorWithIndexTuple:_,invariantTuple:nn,bifunctorTuple:jn,applyTuple:An,biapplyTuple:Dn,applicativeTuple:Sn,biapplicativeTuple:Fn,bindTuple:hn,monadTuple:Bn,extendTuple:fn,comonadTuple:qn,lazyTuple:un,foldableTuple:rn,foldable1Tuple:ln,foldableWithIndexTuple:tn,bifoldableTuple:gn,traversableTuple:on,traversable1Tuple:cn,traversableWithIndexTuple:an,bitraversableTuple:yn,distributiveTuple:wn};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Biapplicative/index.js":"Sd0N","../Control.Biapply/index.js":"X0ga","../Control.Bind/index.js":"7VcT","../Control.Comonad/index.js":"U0zO","../Control.Extend/index.js":"JIoJ","../Control.Lazy/index.js":"y9cE","../Control.Monad/index.js":"U/Ix","../Control.Semigroupoid/index.js":"/riR","../Data.Bifoldable/index.js":"wjQo","../Data.Bifunctor/index.js":"e2Wc","../Data.Bitraversable/index.js":"8nb9","../Data.BooleanAlgebra/index.js":"e7y+","../Data.Bounded/index.js":"kcUU","../Data.CommutativeRing/index.js":"60TQ","../Data.Distributive/index.js":"8PTu","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Functor/index.js":"+0AE","../Data.Functor.Invariant/index.js":"AXkC","../Data.FunctorWithIndex/index.js":"OHRN","../Data.HeytingAlgebra/index.js":"paZe","../Data.Maybe/index.js":"5mN7","../Data.Maybe.First/index.js":"W/l6","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Ring/index.js":"E2qH","../Data.Semigroup/index.js":"EsAJ","../Data.Semigroup.Foldable/index.js":"ht+A","../Data.Semigroup.Traversable/index.js":"qkfi","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Unit/index.js":"NhVk","../Type.Equality/index.js":"Uq/R"}],"u1pL":[function(require,module,exports) {
-"use strict";var n=require("../Data.Tuple/index.js"),t=require("../Data.Unit/index.js"),u=function(n,t){this.Monad0=n,this.state=t},e=function(n){return n.state},r=function(u){return function(r){return e(u)(function(u){return new n.Tuple(t.unit,r)})}},i=function(u){return function(r){return e(u)(function(u){return new n.Tuple(t.unit,r(u))})}},o=function(t){return function(u){return e(t)(function(t){var e=u(t);return new n.Tuple(e,e)})}},f=function(t){return function(u){return e(t)(function(t){return new n.Tuple(u(t),t)})}},c=function(t){return e(t)(function(t){return new n.Tuple(t,t)})};module.exports={state:e,MonadState:u,get:c,gets:f,put:r,modify:o,modify_:i};
-},{"../Data.Tuple/index.js":"II/O","../Data.Unit/index.js":"NhVk"}],"5tIR":[function(require,module,exports) {
-"use strict";var t=function(t){this.lift=t},i=function(t){return t.lift};module.exports={lift:i,MonadTrans:t};
-},{}],"gxgA":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),e=require("../Control.Bind/index.js"),t=require("../Data.Tuple/index.js"),i=function(n,e){this.Monad0=n,this.tell=e},r=function(n,e,t){this.MonadTell0=n,this.listen=e,this.pass=t},u=function(n){return n.tell},l=function(n){return n.pass},o=function(n){return n.listen},a=function(i){return function(r){return function(u){return e.bind(i.MonadTell0().Monad0().Bind1())(o(i)(u))(function(e){return n.pure(i.MonadTell0().Monad0().Applicative0())(new t.Tuple(e.value0,r(e.value1)))})}}},s=function(i){return function(r){return function(u){return l(i)(e.bind(i.MonadTell0().Monad0().Bind1())(u)(function(e){return n.pure(i.MonadTell0().Monad0().Applicative0())(new t.Tuple(e,r))}))}}};module.exports={listen:o,pass:l,tell:u,MonadTell:i,MonadWriter:r,listens:a,censor:s};
-},{"../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Data.Tuple/index.js":"II/O"}],"HkJx":[function(require,module,exports) {
-"use strict";var r=require("../Control.MonadZero/index.js"),o=function(r){this.MonadZero0=r},n=new o(function(){return r.monadZeroArray});module.exports={MonadPlus:o,monadPlusArray:n};
-},{"../Control.MonadZero/index.js":"lD5R"}],"dWtH":[function(require,module,exports) {
-"use strict";var t=require("../Control.Category/index.js"),e=require("../Effect/index.js"),f=function(t,e){this.Monad0=t,this.liftEffect=e},n=new f(function(){return e.monadEffect},t.identity(t.categoryFn)),i=function(t){return t.liftEffect};module.exports={liftEffect:i,MonadEffect:f,monadEffectEffect:n};
-},{"../Control.Category/index.js":"IAi2","../Effect/index.js":"oTWB"}],"gr8B":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),e=require("../Control.Alternative/index.js"),t=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),o=require("../Control.Category/index.js"),i=require("../Control.Monad/index.js"),a=require("../Control.Monad.Cont.Class/index.js"),c=require("../Control.Monad.Error.Class/index.js"),f=require("../Control.Monad.Reader.Class/index.js"),l=require("../Control.Monad.Rec.Class/index.js"),d=require("../Control.Monad.State.Class/index.js"),p=require("../Control.Monad.Trans.Class/index.js"),s=require("../Control.Monad.Writer.Class/index.js"),x=require("../Control.MonadPlus/index.js"),w=require("../Control.MonadZero/index.js"),M=require("../Control.Plus/index.js"),v=require("../Data.Either/index.js"),E=require("../Data.Functor/index.js"),T=require("../Data.Monoid/index.js"),m=require("../Data.Newtype/index.js"),C=require("../Data.Semigroup/index.js"),h=require("../Data.Tuple/index.js"),j=require("../Effect.Class/index.js"),q=function(n){return n},A=function(n){return function(e){return function(t){var r;return q(E.map(n)((r=e,function(n){if(n instanceof v.Right)return new v.Right(n.value0);if(n instanceof v.Left)return new v.Left(r(n.value0));throw new Error("Failed pattern match at Control.Monad.Except.Trans (line 42, column 3 - line 42, column 32): "+[r.constructor.name,n.constructor.name])}))(t))}}},R=function(n){return n},g=new m.Newtype(function(n){return n},q),L=new p.MonadTrans(function(n){return function(e){return u.bind(n.Bind1())(e)(function(e){return t.pure(n.Applicative0())(new v.Right(e))})}}),y=function(n){return function(e){return n(e)}},B=function(n){return new E.Functor(function(e){return y(E.map(n)(E.map(v.functorEither)(e)))})},F=function(n){var e=t.pure(n);return function(n){return q(e(n))}},b=function(n){return new i.Monad(function(){return S(n)},function(){return D(n)})},D=function(n){return new u.Bind(function(){return P(n)},function(e){return function(r){return u.bind(n.Bind1())(e)(v.either((o=t.pure(n.Applicative0()),function(n){return o(v.Left.create(n))}))(function(n){return r(n)}));var o}})},P=function(n){return new r.Apply(function(){return B(n.Bind1().Apply0().Functor0())},i.ap(b(n)))},S=function(n){return new t.Applicative(function(){return P(n)},(e=t.pure(n.Applicative0()),function(n){return q(e(v.Right.create(n)))}));var e},k=function(n){return new f.MonadAsk(function(){return b(n.Monad0())},p.lift(L)(n.Monad0())(f.ask(n)))},W=function(n){return new f.MonadReader(function(){return k(n.MonadAsk0())},function(e){return y(f.local(n)(e))})},Z=function(n){return new a.MonadCont(function(){return b(n.Monad0())},function(e){return q(a.callCC(n)(function(n){return e(function(e){return q(n(new v.Right(e)))})}))})},N=function(n){return new j.MonadEffect(function(){return b(n.Monad0())},(e=p.lift(L)(n.Monad0()),t=j.liftEffect(n),function(n){return e(t(n))}));var e,t},z=function(n){return new l.MonadRec(function(){return b(n.Monad0())},function(e){var r=l.tailRecM(n)(function(r){var o=e(r);return u.bind(n.Monad0().Bind1())(o)(function(e){return t.pure(n.Monad0().Applicative0())(function(){if(e instanceof v.Left)return new l.Done(new v.Left(e.value0));if(e instanceof v.Right&&e.value0 instanceof l.Loop)return new l.Loop(e.value0.value0);if(e instanceof v.Right&&e.value0 instanceof l.Done)return new l.Done(new v.Right(e.value0.value0));throw new Error("Failed pattern match at Control.Monad.Except.Trans (line 74, column 14 - line 77, column 43): "+[e.constructor.name])}())})});return function(n){return q(r(n))}})},G=function(n){return new d.MonadState(function(){return b(n.Monad0())},function(e){return p.lift(L)(n.Monad0())(d.state(n)(e))})},H=function(n){return new s.MonadTell(function(){return b(n.Monad0())},(e=p.lift(L)(n.Monad0()),t=s.tell(n),function(n){return e(t(n))}));var e,t},I=function(n){return new s.MonadWriter(function(){return H(n.MonadTell0())},y(function(e){return u.bind(n.MonadTell0().Monad0().Bind1())(s.listen(n)(e))(function(e){return t.pure(n.MonadTell0().Monad0().Applicative0())(E.map(v.functorEither)(function(n){return new h.Tuple(n,e.value1)})(e.value0))})}),y(function(e){return s.pass(n)(u.bind(n.MonadTell0().Monad0().Bind1())(e)(function(e){return t.pure(n.MonadTell0().Monad0().Applicative0())(function(){if(e instanceof v.Left)return new h.Tuple(new v.Left(e.value0),o.identity(o.categoryFn));if(e instanceof v.Right)return new h.Tuple(new v.Right(e.value0.value0),e.value0.value1);throw new Error("Failed pattern match at Control.Monad.Except.Trans (line 136, column 10 - line 138, column 45): "+[e.constructor.name])}())}))}))},J=function(n){return new c.MonadThrow(function(){return b(n)},(e=t.pure(n.Applicative0()),function(n){return q(e(v.Left.create(n)))}));var e},K=function(n){return new c.MonadError(function(){return J(n)},function(e){return function(r){return u.bind(n.Bind1())(e)(v.either(function(n){return r(n)})((o=t.pure(n.Applicative0()),function(n){return o(v.Right.create(n))})));var o}})},O=function(e){return function(r){return new n.Alt(function(){return B(r.Bind1().Apply0().Functor0())},function(n){return function(o){return u.bind(r.Bind1())(n)(function(n){if(n instanceof v.Right)return t.pure(r.Applicative0())(new v.Right(n.value0));if(n instanceof v.Left)return u.bind(r.Bind1())(o)(function(u){if(u instanceof v.Right)return t.pure(r.Applicative0())(new v.Right(u.value0));if(u instanceof v.Left)return t.pure(r.Applicative0())(new v.Left(C.append(e)(n.value0)(u.value0)));throw new Error("Failed pattern match at Control.Monad.Except.Trans (line 86, column 9 - line 88, column 49): "+[u.constructor.name])});throw new Error("Failed pattern match at Control.Monad.Except.Trans (line 82, column 5 - line 88, column 49): "+[n.constructor.name])})}})}},Q=function(n){return function(e){return new M.Plus(function(){return O(n.Semigroup0())(e)},c.throwError(J(e))(T.mempty(n)))}},U=function(n){return function(t){return new e.Alternative(function(){return S(t)},function(){return Q(n)(t)})}},V=function(n){return function(e){return new w.MonadZero(function(){return U(n)(e)},function(){return b(e)})}},X=function(n){return function(e){return new x.MonadPlus(function(){return V(n)(e)})}};module.exports={ExceptT:q,runExceptT:R,withExceptT:A,mapExceptT:y,except:F,newtypeExceptT:g,functorExceptT:B,applyExceptT:P,applicativeExceptT:S,bindExceptT:D,monadExceptT:b,monadRecExceptT:z,altExceptT:O,plusExceptT:Q,alternativeExceptT:U,monadPlusExceptT:X,monadZeroExceptT:V,monadTransExceptT:L,monadEffectExceptT:N,monadContExceptT:Z,monadThrowExceptT:J,monadErrorExceptT:K,monadAskExceptT:k,monadReaderExceptT:W,monadStateExceptT:G,monadTellExceptT:H,monadWriterExceptT:I};
-},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad/index.js":"U/Ix","../Control.Monad.Cont.Class/index.js":"IpNh","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Reader.Class/index.js":"c2ZJ","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.Trans.Class/index.js":"5tIR","../Control.Monad.Writer.Class/index.js":"gxgA","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Tuple/index.js":"II/O","../Effect.Class/index.js":"dWtH"}],"Fye2":[function(require,module,exports) {
-"use strict";var t=require("../Control.Monad.Except.Trans/index.js"),e=require("../Data.Identity/index.js"),n=require("../Data.Newtype/index.js"),r=t.withExceptT(e.functorIdentity),i=function(){var r=n.unwrap(e.newtypeIdentity);return function(e){return r(t.runExceptT(e))}}(),u=function(r){return t.mapExceptT((i=n.unwrap(e.newtypeIdentity),function(t){return e.Identity(r(i(t)))}));var i};module.exports={runExcept:i,mapExcept:u,withExcept:r};
-},{"../Control.Monad.Except.Trans/index.js":"gr8B","../Data.Identity/index.js":"2OKT","../Data.Newtype/index.js":"lz8k"}],"TZDL":[function(require,module,exports) {
-"use strict";exports.range=function(n){return function(r){for(var t=n>r?-1:1,e=new Array(t*(r-n)+1),u=n,o=0;u!==r;)e[o++]=u,u+=t;return e[o]=u,e}};var n=function(n){return function(r){return n<1?[]:new Array(n).fill(r)}},r=function(n){return function(r){for(var t=[],e=0,u=0;u<n;u++)t[e++]=r;return t}};exports.replicate="function"==typeof Array.prototype.fill?n:r,exports.fromFoldableImpl=function(){function n(n,r){this.head=n,this.tail=r}var r={};function t(r){return function(t){return new n(r,t)}}return function(n){return function(e){return function(n){for(var t=[],e=0,u=n;u!==r;)t[e++]=u.head,u=u.tail;return t}(n(t)(r)(e))}}}(),exports.length=function(n){return n.length},exports.cons=function(n){return function(r){return[n].concat(r)}},exports.snoc=function(n){return function(r){var t=n.slice();return t.push(r),t}},exports["uncons'"]=function(n){return function(r){return function(t){return 0===t.length?n({}):r(t[0])(t.slice(1))}}},exports.indexImpl=function(n){return function(r){return function(t){return function(e){return e<0||e>=t.length?r:n(t[e])}}}},exports.findIndexImpl=function(n){return function(r){return function(t){return function(e){for(var u=0,o=e.length;u<o;u++)if(t(e[u]))return n(u);return r}}}},exports.findLastIndexImpl=function(n){return function(r){return function(t){return function(e){for(var u=e.length-1;u>=0;u--)if(t(e[u]))return n(u);return r}}}},exports._insertAt=function(n){return function(r){return function(t){return function(e){return function(u){if(t<0||t>u.length)return r;var o=u.slice();return o.splice(t,0,e),n(o)}}}}},exports._deleteAt=function(n){return function(r){return function(t){return function(e){if(t<0||t>=e.length)return r;var u=e.slice();return u.splice(t,1),n(u)}}}},exports._updateAt=function(n){return function(r){return function(t){return function(e){return function(u){if(t<0||t>=u.length)return r;var o=u.slice();return o[t]=e,n(o)}}}}},exports.reverse=function(n){return n.slice().reverse()},exports.concat=function(n){if(n.length<=1e4)return Array.prototype.concat.apply([],n);for(var r=[],t=0,e=n.length;t<e;t++)for(var u=n[t],o=0,i=u.length;o<i;o++)r.push(u[o]);return r},exports.filter=function(n){return function(r){return r.filter(n)}},exports.partition=function(n){return function(r){for(var t=[],e=[],u=0;u<r.length;u++){var o=r[u];n(o)?t.push(o):e.push(o)}return{yes:t,no:e}}},exports.sortImpl=function(n){return function(r){return r.slice().sort(function(r,t){return n(r)(t)})}},exports.slice=function(n){return function(r){return function(t){return t.slice(n,r)}}},exports.take=function(n){return function(r){return n<1?[]:r.slice(0,n)}},exports.drop=function(n){return function(r){return n<1?r:r.slice(n)}},exports.zipWith=function(n){return function(r){return function(t){for(var e=r.length<t.length?r.length:t.length,u=new Array(e),o=0;o<e;o++)u[o]=n(r[o])(t[o]);return u}}},exports.unsafeIndexImpl=function(n){return function(r){return n[r]}};
-},{}],"4sh7":[function(require,module,exports) {
-"use strict";exports.map_=function(n){return function(r){return function(){return n(r())}}},exports.pure_=function(n){return function(){return n}},exports.bind_=function(n){return function(r){return function(){return r(n())()}}},exports.run=function(n){return n()},exports.while=function(n){return function(r){return function(){for(;n();)r()}}},exports.for=function(n){return function(r){return function(t){return function(){for(var u=n;u<r;u++)t(u)()}}}},exports.foreach=function(n){return function(r){return function(){for(var t=0,u=n.length;t<u;t++)r(n[t])()}}},exports.new=function(n){return function(){return{value:n}}},exports.read=function(n){return function(){return n.value}},exports["modify'"]=function(n){return function(r){return function(){var t=n(r.value);return r.value=t.state,t.value}}},exports.write=function(n){return function(r){return function(){return r.value=n}}};
-},{}],"Sedc":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),i=require("../Control.Bind/index.js"),t=require("../Control.Monad/index.js"),o=require("../Control.Monad.Rec.Class/index.js"),u=require("../Data.Functor/index.js"),a=require("../Data.Unit/index.js"),c=function(r){return n["modify'"](function(n){var e=r(n);return{state:e,value:e}})},d=new u.Functor(n.map_),l=new t.Monad(function(){return s},function(){return f}),f=new i.Bind(function(){return p},n.bind_),p=new e.Apply(function(){return d},t.ap(l)),s=new r.Applicative(function(){return p},n.pure_),m=new o.MonadRec(function(){return l},function(e){return function(t){var c=function(n){return n instanceof o.Loop},l=function(n){if(n instanceof o.Done)return n.value0;throw new Error("Failed pattern match at Control.Monad.ST.Internal (line 54, column 32 - line 54, column 46): "+[n.constructor.name])};return i.bind(f)(i.bindFlipped(f)(n.new)(e(t)))(function(t){return i.discard(i.discardUnit)(f)(n.while(u.map(d)(c)(n.read(t)))(i.bind(f)(n.read(t))(function(c){if(c instanceof o.Loop)return i.bind(f)(e(c.value0))(function(r){return u.void(d)(n.write(r)(t))});if(c instanceof o.Done)return r.pure(s)(a.unit);throw new Error("Failed pattern match at Control.Monad.ST.Internal (line 46, column 18 - line 50, column 28): "+[c.constructor.name])})))(function(){return u.map(d)(l)(n.read(t))})})}});module.exports={modify:c,functorST:d,applyST:p,applicativeST:s,bindST:f,monadST:l,monadRecST:m,map_:n.map_,pure_:n.pure_,bind_:n.bind_,run:n.run,while:n.while,for:n.for,foreach:n.foreach,new:n.new,read:n.read,"modify'":n["modify'"],write:n.write};
-},{"./foreign.js":"4sh7","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Control.Monad.Rec.Class/index.js":"UVIy","../Data.Functor/index.js":"+0AE","../Data.Unit/index.js":"NhVk"}],"pEQc":[function(require,module,exports) {
-"use strict";exports.empty=function(){return[]},exports.peekImpl=function(n){return function(t){return function(r){return function(u){return function(){return r>=0&&r<u.length?n(u[r]):t}}}}},exports.poke=function(n){return function(t){return function(r){return function(){var u=n>=0&&n<r.length;return u&&(r[n]=t),u}}}},exports.popImpl=function(n){return function(t){return function(r){return function(){return r.length>0?n(r.pop()):t}}}},exports.pushAll=function(n){return function(t){return function(){return t.push.apply(t,n)}}},exports.shiftImpl=function(n){return function(t){return function(r){return function(){return r.length>0?n(r.shift()):t}}}},exports.unshiftAll=function(n){return function(t){return function(){return t.unshift.apply(t,n)}}},exports.splice=function(n){return function(t){return function(r){return function(u){return function(){return u.splice.apply(u,[n,t].concat(r))}}}}},exports.copyImpl=function(n){return function(){return n.slice()}},exports.sortByImpl=function(n){return function(t){return function(){return t.sort(function(t,r){return n(t)(r)})}}},exports.toAssocArray=function(n){return function(){for(var t=n.length,r=new Array(t),u=0;u<t;u++)r[u]={value:n[u],index:u};return r}};
-},{}],"s8si":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Control.Applicative/index.js"),t=require("../Control.Bind/index.js"),e=require("../Control.Monad.ST.Internal/index.js"),u=require("../Data.Maybe/index.js"),i=require("../Data.Ord/index.js"),o=require("../Data.Ordering/index.js"),a=function(r){return n.unshiftAll([r])},c=function(){var n=r.pure(e.applicativeST);return function(r){return n(r)}}(),s=function(){var n=r.pure(e.applicativeST);return function(r){return n(r)}}(),l=n.copyImpl,f=function(n){return function(r){return function(){var t=l(r)();n(t)();return s(t)()}}},p=function(r){return n.sortByImpl(function(n){return function(t){var e=r(n)(t);if(e instanceof o.GT)return 1;if(e instanceof o.EQ)return 0;if(e instanceof o.LT)return-1;throw new Error("Failed pattern match at Data.Array.ST (line 109, column 15 - line 112, column 13): "+[e.constructor.name])}})},h=function(n){return function(r){return p(i.comparing(n)(r))}},m=function(n){return p(i.compare(n))},d=n.shiftImpl(u.Just.create)(u.Nothing.value),A=function(n){return t.bind(e.bindST)(n)(s)()},v=function(r){return n.pushAll([r])},y=n.popImpl(u.Just.create)(u.Nothing.value),T=n.peekImpl(u.Just.create)(u.Nothing.value),g=function(r){return function(t){return function(e){return function(){var i=T(r)(e)();if(i instanceof u.Just)return n.poke(r)(t(i.value0))(e)();if(i instanceof u.Nothing)return!1;throw new Error("Failed pattern match at Data.Array.ST (line 195, column 3 - line 197, column 26): "+[i.constructor.name])}}}},j=n.copyImpl;module.exports={run:A,withArray:f,peek:T,modify:g,pop:y,push:v,shift:d,unshift:a,sort:m,sortBy:p,sortWith:h,freeze:j,thaw:l,unsafeFreeze:s,unsafeThaw:c,empty:n.empty,poke:n.poke,pushAll:n.pushAll,unshiftAll:n.unshiftAll,splice:n.splice,toAssocArray:n.toAssocArray};
-},{"./foreign.js":"pEQc","../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Monad.ST.Internal/index.js":"Sedc","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun"}],"Wi7L":[function(require,module,exports) {
-"use strict";var n=require("../Control.Monad.ST.Internal/index.js"),r=require("../Data.Array.ST/index.js"),t=require("../Data.Function/index.js"),e=require("../Data.Functor/index.js"),u=require("../Data.HeytingAlgebra/index.js"),a=require("../Data.Maybe/index.js"),i=function(){function n(n,r){this.value0=n,this.value1=r}return n.create=function(r){return function(t){return new n(r,t)}},n}(),o=function(r){return function(){var t=n.read(r.value1)();return r.value0(t)}},c=function(r){return function(){var t=n.read(r.value1)();n.modify(function(n){return n+1|0})(r.value1)();return r.value0(t)}},f=function(t){return function(i){return function(f){return function(){for(var l=n.new(!1)();e.map(n.functorST)(u.not(u.heytingAlgebraBoolean))(n.read(l))();)!function(){var u=o(i)();if(u instanceof a.Just&&t(u.value0)){r.push(u.value0)(f)();return e.void(n.functorST)(c(i))()}e.void(n.functorST)(n.write(!0)(l))()}();return{}}}}},l=f(t.const(!0)),s=function(r){return e.map(n.functorST)(i.create(r))(n.new(0))},v=function(r){return function(t){return function(){for(var i=n.new(!1)();e.map(n.functorST)(u.not(u.heytingAlgebraBoolean))(n.read(i))();)!function(){var u=c(r)();if(u instanceof a.Just)return t(u.value0)();if(u instanceof a.Nothing)return e.void(n.functorST)(n.write(!0)(i))();throw new Error("Failed pattern match at Data.Array.ST.Iterator (line 42, column 5 - line 44, column 47): "+[u.constructor.name])}();return{}}}},d=function(){var r=e.map(n.functorST)(a.isNothing);return function(n){return r(o(n))}}();module.exports={iterator:s,iterate:v,next:c,peek:o,exhausted:d,pushWhile:f,pushAll:l};
-},{"../Control.Monad.ST.Internal/index.js":"Sedc","../Data.Array.ST/index.js":"s8si","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Maybe/index.js":"5mN7"}],"v/61":[function(require,module,exports) {
-"use strict";exports.unfoldrArrayImpl=function(r){return function(n){return function(t){return function(u){return function(f){return function(o){for(var e=[],i=o;;){var c=f(i);if(r(c))return e;var a=n(c);e.push(t(a)),i=u(a)}}}}}}};
-},{}],"rpkt":[function(require,module,exports) {
-"use strict";exports.unfoldr1ArrayImpl=function(r){return function(n){return function(t){return function(u){return function(f){return function(o){for(var e=[],i=o;;){var c=f(i);e.push(t(c));var a=u(c);if(r(a))return e;i=n(a)}}}}}}};
-},{}],"S0Nl":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Data.Boolean/index.js"),e=require("../Data.Maybe/index.js"),t=require("../Data.Semigroup.Traversable/index.js"),u=require("../Data.Tuple/index.js"),i=function(n){this.unfoldr1=n},o=function(n){return n.unfoldr1},a=new i(n.unfoldr1ArrayImpl(e.isNothing)(e.fromJust())(u.fst)(u.snd)),f=function(n){return function(t){return function(i){return o(n)(function(n){if(n<=0)return new u.Tuple(i,e.Nothing.value);if(r.otherwise)return new u.Tuple(i,new e.Just(n-1|0));throw new Error("Failed pattern match at Data.Unfoldable1 (line 64, column 5 - line 64, column 39): "+[n.constructor.name])})(t-1|0)}}},l=function(n){return function(r){return function(e){return function(u){return function(i){return t.sequence1(e)(n)(f(r)(u)(i))}}}}},c=function(n){return f(n)(1)},s=function(n){return function(r){return function(t){var i=t>=r?1:-1;return o(n)(function(n){return function(r){var i=r+n|0;return new u.Tuple(r,r===t?e.Nothing.value:new e.Just(i))}}(i))(r)}}};module.exports={Unfoldable1:i,unfoldr1:o,replicate1:f,replicate1A:l,singleton:c,range:s,unfoldable1Array:a};
-},{"./foreign.js":"rpkt","../Data.Boolean/index.js":"ObQr","../Data.Maybe/index.js":"5mN7","../Data.Semigroup.Traversable/index.js":"qkfi","../Data.Tuple/index.js":"II/O"}],"77+Z":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),e=require("../Data.Function/index.js"),r=require("../Data.Functor/index.js"),u=require("../Data.Maybe/index.js"),t=require("../Data.Traversable/index.js"),i=require("../Data.Tuple/index.js"),o=require("../Data.Unfoldable1/index.js"),a=require("../Data.Unit/index.js"),f=function(n,e){this.Unfoldable10=n,this.unfoldr=e},l=function(n){return n.unfoldr},c=new f(function(){return o.unfoldable1Array},n.unfoldrArrayImpl(u.isNothing)(u.fromJust())(i.fst)(i.snd)),s=function(n){return function(e){return function(r){return l(n)(function(n){return n<=0?u.Nothing.value:new u.Just(new i.Tuple(r,n-1|0))})(e)}}},d=function(n){return function(e){return function(r){return function(u){return function(i){return t.sequence(r)(n)(s(e)(u)(i))}}}}},b=function(n){return l(n)(e.const(u.Nothing.value))(a.unit)},p=function(n){return l(n)(function(n){return r.map(u.functorMaybe)(e.flip(i.Tuple.create)(u.Nothing.value))(n)})};module.exports={Unfoldable:f,unfoldr:l,replicate:s,replicateA:d,none:b,fromMaybe:p,unfoldableArray:c};
-},{"./foreign.js":"v/61","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Traversable/index.js":"n7EE","../Data.Tuple/index.js":"II/O","../Data.Unfoldable1/index.js":"S0Nl","../Data.Unit/index.js":"NhVk"}],"4t4C":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Control.Alt/index.js"),t=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),i=require("../Control.Category/index.js"),o=require("../Control.Lazy/index.js"),a=require("../Control.Monad.Rec.Class/index.js"),c=require("../Control.Monad.ST.Internal/index.js"),f=require("../Data.Array.ST/index.js"),l=require("../Data.Array.ST.Iterator/index.js"),s=require("../Data.Boolean/index.js"),p=require("../Data.Eq/index.js"),d=require("../Data.Foldable/index.js"),h=require("../Data.Function/index.js"),m=require("../Data.Functor/index.js"),v=require("../Data.HeytingAlgebra/index.js"),y=require("../Data.Maybe/index.js"),g=require("../Data.Ord/index.js"),A=require("../Data.Ordering/index.js"),q=require("../Data.Semigroup/index.js"),x=require("../Data.Traversable/index.js"),w=require("../Data.Tuple/index.js"),b=require("../Data.Unfoldable/index.js"),F=function(r){return function(t){return function(e){return function(u){return x.sequence(x.traversableArray)(r)(n.zipWith(t)(e)(u))}}}},T=n.zipWith(w.Tuple.create),j=function(n){return function(r){return function(t){return f.withArray(function(t){return d.traverse_(c.applicativeST)(n)(function(n){return f.poke(n.value0)(n.value1)(t)})(r)})(t)()}}},D=n._updateAt(y.Just.create)(y.Nothing.value),J=function(r){return n.unsafeIndexImpl},I=n["uncons'"](h.const(y.Nothing.value))(function(n){return function(r){return new y.Just({head:n,tail:r})}}),N=function(r){return function(t){var e=n.length(t);return b.unfoldr(r)(function(n){if(n<e)return new y.Just(new w.Tuple(J()(t)(n),n+1|0));if(s.otherwise)return y.Nothing.value;throw new Error("Failed pattern match at Data.Array (line 143, column 3 - line 145, column 26): "+[n.constructor.name])})(0)}},z=function(r){return function(t){return n.drop(n.length(t)-r|0)(t)}},E=n["uncons'"](h.const(y.Nothing.value))(function(n){return function(n){return new y.Just(n)}}),S=function(r){return function(t){return n.sortImpl(function(n){return function(t){var e=r(n)(t);if(e instanceof A.GT)return 1;if(e instanceof A.EQ)return 0;if(e instanceof A.LT)return-1;throw new Error("Failed pattern match at Data.Array (line 702, column 15 - line 705, column 13): "+[e.constructor.name])}})(t)}},B=function(n){return function(r){return S(g.comparing(n)(r))}},M=function(n){return function(r){return S(g.compare(n))(r)}},W=function(n){return[n]},C=function(r){return 0===n.length(r)},k=function(n){return function(r){return e=f.empty(),c.foreach(r)(function(r){return function(){var u,i,o=m.map(c.functorST)((u=v.not(v.heytingAlgebraBoolean),i=d.any(d.foldableArray)(v.heytingAlgebraBoolean)(function(t){return n(t)(r)}),function(n){return u(i(n))}))(f.unsafeFreeze(e))();return t.when(c.applicativeST)(o)(m.void(c.functorST)(f.push(r)(e)))()}})(),f.unsafeFreeze(e)();var e}},L=function(n){return k(p.eq(n))},_=function(n){return function(r){return function(t){return function(e){return f.withArray(function(e){return d.traverse_(c.applicativeST)(n)(function(n){return f.modify(n)(t)(e)})(r)})(e)()}}}},O=function(r){return function(t){return n.zipWith(r)(n.range(0)(n.length(t)-1|0))(t)}},R=function(r){return function(t){return function(u){return e.apply(r.Applicative0().Apply0())(m.map(r.Plus1().Alt0().Functor0())(n.cons)(u))(o.defer(t)(function(n){return G(r)(t)(u)}))}}},G=function(n){return function(e){return function(u){return r.alt(n.Plus1().Alt0())(R(n)(e)(u))(t.pure(n.Applicative0())([]))}}},P=n._insertAt(y.Just.create)(y.Nothing.value),Q=function(r){if(C(r))return y.Nothing.value;if(s.otherwise)return new y.Just(n.slice(0)(n.length(r)-1|0)(r));throw new Error("Failed pattern match at Data.Array (line 323, column 1 - line 323, column 45): "+[r.constructor.name])},U=n.indexImpl(y.Just.create)(y.Nothing.value),H=function(r){return U(r)(n.length(r)-1|0)},K=function(n){return e.apply(y.applyMaybe)(m.map(y.functorMaybe)(function(n){return function(r){return{init:n,last:r}}})(Q(n)))(H(n))},V=function(n){return function(r){return function(t){return y.maybe(y.Nothing.value)(function(e){return D(n)(r(e))(t)})(U(t)(n))}}},X=function(r){return function(t){var e=function(n){var e,u=!1;function i(e){var i=U(t)(e);if(i instanceof y.Just)return r(i.value0)?void(n=e+1|0):(u=!0,new y.Just(e));if(i instanceof y.Nothing)return u=!0,y.Nothing.value;throw new Error("Failed pattern match at Data.Array (line 834, column 5 - line 836, column 25): "+[i.constructor.name])}for(;!u;)e=i(n);return e}(0);if(e instanceof y.Just&&0===e.value0)return{init:[],rest:t};if(e instanceof y.Just)return{init:n.slice(0)(e.value0)(t),rest:n.slice(e.value0)(n.length(t))(t)};if(e instanceof y.Nothing)return{init:t,rest:[]};throw new Error("Failed pattern match at Data.Array (line 821, column 3 - line 827, column 30): "+[e.constructor.name])}},Y=function(n){return function(r){return X(n)(r).init}},Z=function(n){return function(){var r=f.empty(),t=f.empty(),e=l.iterator(function(r){return U(n)(r)})();l.iterate(e)(function(n){return function(){return m.void(c.functorST)(f.push(n.value0)(r))(),m.void(c.functorST)(f.push(n.value1)(t))()}})();var u=f.unsafeFreeze(r)(),i=f.unsafeFreeze(t)();return new w.Tuple(u,i)}()},$=function(n){return U(n)(0)},nn=function(n){return function(r){var e,u=S(function(r){return function(t){return n(w.snd(r))(w.snd(t))}})(O(w.Tuple.create)(r)),i=$(u);if(i instanceof y.Nothing)return[];if(i instanceof y.Just)return m.map(m.functorArray)(w.snd)(B(g.ordInt)(w.fst)((e=f.unsafeThaw(W(i.value0))(),c.foreach(u)(function(r){return function(){var u,i,o=m.map(c.functorST)((u=y.fromJust(void 0),i=function(n){return u(H(n))},function(n){return w.snd(i(n))}))(f.unsafeFreeze(e))();return t.when(c.applicativeST)(p.notEq(A.eqOrdering)(n(o)(r.value1))(A.EQ.value))(m.void(c.functorST)(f.push(r)(e)))()}})(),f.unsafeFreeze(e)())));throw new Error("Failed pattern match at Data.Array (line 903, column 17 - line 911, column 29): "+[i.constructor.name])}},rn=function(n){return nn(g.compare(n))},tn=function(n){return function(r){return t=f.empty(),e=l.iterator(function(n){return U(r)(n)})(),l.iterate(e)(function(r){return m.void(c.functorST)(function(){var u=f.empty();f.push(r)(u)(),l.pushWhile(n(r))(e)(u)();var i=f.unsafeFreeze(u)();return f.push(i)(t)()})})(),f.unsafeFreeze(t)();var t,e}},en=function(n){return function(r){return tn(p.eq(n))(r)}},un=function(n){var r=en(n.Eq0()),t=M(n);return function(n){return r(t(n))}},on=function(r){return n.fromFoldableImpl(d.foldr(r))},an=function(r){return function(e){return function(i){return function(o){return a.tailRecM2(r)(function(i){return function(c){if(c>=n.length(o))return t.pure(r.Monad0().Applicative0())(new a.Done(i));if(s.otherwise)return u.bind(r.Monad0().Bind1())(e(i)(J()(o)(c)))(function(n){return t.pure(r.Monad0().Applicative0())(new a.Loop({a:n,b:c+1|0}))});throw new Error("Failed pattern match at Data.Array (line 1101, column 3 - line 1105, column 42): "+[i.constructor.name,c.constructor.name])}})(i)(0)}}}},cn=function r(e){return function(i){return function(o){return n["uncons'"](function(n){return t.pure(e.Applicative0())(o)})(function(n){return function(t){return u.bind(e.Bind1())(i(o)(n))(function(n){return r(e)(i)(n)(t)})}})}}},fn=n.findLastIndexImpl(y.Just.create)(y.Nothing.value),ln=function(n){return function(r){return function(t){var e=y.maybe(0)(function(n){return n+1|0})(fn(function(t){return p.eq(A.eqOrdering)(n(r)(t))(A.GT.value)})(t));return y.fromJust()(P(e)(r)(t))}}},sn=function(n){return ln(g.compare(n))},pn=n.findIndexImpl(y.Just.create)(y.Nothing.value),dn=function(r){return function(t){return function(e){return n.filter(function(n){return y.isJust(pn(r(n))(e))})(t)}}},hn=function(n){return dn(p.eq(n))},mn=function(n){return function(r){return fn(function(t){return p.eq(n)(t)(r)})}},vn=function(n){return function(r){return pn(function(t){return p.eq(n)(t)(r)})}},yn=function(n){return function(r){return X(n)(r).rest}},gn=function(r){return function(t){return n.take(n.length(t)-r|0)(t)}},An=n._deleteAt(y.Just.create)(y.Nothing.value),qn=function(n){return function(r){return function(t){return 0===t.length?[]:y.maybe(t)(function(n){return y.fromJust()(An(n)(t))})(pn(n(r))(t))}}},xn=function(n){return function(r){return function(t){return q.append(q.semigroupArray)(r)(d.foldl(d.foldableArray)(h.flip(qn(n)))(k(n)(t))(r))}}},wn=function(n){return xn(p.eq(n))},bn=function(n){return qn(p.eq(n))},Fn=function(n){return d.foldr(d.foldableArray)(bn(n))},Tn=h.flip(u.bind(u.bindArray)),jn=function(n){return Tn((r=y.maybe([])(W),function(t){return r(n(t))}));var r},Dn=function(n){return function(r){var t=m.map(n.Apply0().Functor0())(jn(function(n){return n.value1?new y.Just(n.value0):y.Nothing.value})),e=x.traverse(x.traversableArray)(n)(function(t){return m.map(n.Apply0().Functor0())(w.Tuple.create(t))(r(t))});return function(n){return t(e(n))}}},Jn=jn(i.identity(i.categoryFn)),In=function(n){return function(r){return function(t){return y.maybe(y.Nothing.value)(function(e){var u=r(e);if(u instanceof y.Nothing)return An(n)(t);if(u instanceof y.Just)return D(n)(u.value0)(t);throw new Error("Failed pattern match at Data.Array (line 544, column 10 - line 546, column 32): "+[u.constructor.name])})(U(t)(n))}}};module.exports={fromFoldable:on,toUnfoldable:N,singleton:W,some:R,many:G,null:C,insert:sn,insertBy:ln,head:$,last:H,tail:E,init:Q,uncons:I,unsnoc:K,index:U,elemIndex:vn,elemLastIndex:mn,findIndex:pn,findLastIndex:fn,insertAt:P,deleteAt:An,updateAt:D,updateAtIndices:j,modifyAt:V,modifyAtIndices:_,alterAt:In,concatMap:Tn,filterA:Dn,mapMaybe:jn,catMaybes:Jn,mapWithIndex:O,sort:M,sortBy:S,sortWith:B,takeEnd:z,takeWhile:Y,dropEnd:gn,dropWhile:yn,span:X,group:en,"group'":un,groupBy:tn,nub:rn,nubEq:L,nubBy:nn,nubByEq:k,union:wn,unionBy:xn,delete:bn,deleteBy:qn,difference:Fn,intersect:hn,intersectBy:dn,zipWithA:F,zip:T,unzip:Z,foldM:cn,foldRecM:an,unsafeIndex:J,range:n.range,replicate:n.replicate,length:n.length,cons:n.cons,snoc:n.snoc,reverse:n.reverse,concat:n.concat,filter:n.filter,partition:n.partition,slice:n.slice,take:n.take,drop:n.drop,zipWith:n.zipWith};
-},{"./foreign.js":"TZDL","../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Lazy/index.js":"y9cE","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.ST.Internal/index.js":"Sedc","../Data.Array.ST/index.js":"s8si","../Data.Array.ST.Iterator/index.js":"Wi7L","../Data.Boolean/index.js":"ObQr","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Traversable/index.js":"n7EE","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z"}],"9xaU":[function(require,module,exports) {
-var define;
-var t,r=function(t){"use strict";var e=1e7,n=7,o=9007199254740992,i=f(o),a=Math.log(o);function u(t,r){return void 0===t?u[0]:void 0!==r?10==+r?H(t):R(t,r):H(t)}function s(t,r){this.value=t,this.sign=r,this.isSmall=!1}function p(t){this.value=t,this.sign=t<0,this.isSmall=!0}function l(t){return-o<t&&t<o}function f(t){return t<1e7?[t]:t<1e14?[t%1e7,Math.floor(t/1e7)]:[t%1e7,Math.floor(t/1e7)%1e7,Math.floor(t/1e14)]}function h(t){v(t);var r=t.length;if(r<4&&P(t,i)<0)switch(r){case 0:return 0;case 1:return t[0];case 2:return t[0]+t[1]*e;default:return t[0]+(t[1]+t[2]*e)*e}return t}function v(t){for(var r=t.length;0===t[--r];);t.length=r+1}function y(t){for(var r=new Array(t),e=-1;++e<t;)r[e]=0;return r}function c(t){return t>0?Math.floor(t):Math.ceil(t)}function g(t,r){var n,o,i=t.length,a=r.length,u=new Array(i),s=0,p=e;for(o=0;o<a;o++)s=(n=t[o]+r[o]+s)>=p?1:0,u[o]=n-s*p;for(;o<i;)s=(n=t[o]+s)===p?1:0,u[o++]=n-s*p;return s>0&&u.push(s),u}function m(t,r){return t.length>=r.length?g(t,r):g(r,t)}function d(t,r){var n,o,i=t.length,a=new Array(i),u=e;for(o=0;o<i;o++)n=t[o]-u+r,r=Math.floor(n/u),a[o]=n-r*u,r+=1;for(;r>0;)a[o++]=r%u,r=Math.floor(r/u);return a}function w(t,r){var n,o,i=t.length,a=r.length,u=new Array(i),s=0,p=e;for(n=0;n<a;n++)(o=t[n]-s-r[n])<0?(o+=p,s=1):s=0,u[n]=o;for(n=a;n<i;n++){if(!((o=t[n]-s)<0)){u[n++]=o;break}o+=p,u[n]=o}for(;n<i;n++)u[n]=t[n];return v(u),u}function b(t,r,n){var o,i,a=t.length,u=new Array(a),l=-r,f=e;for(o=0;o<a;o++)i=t[o]+l,l=Math.floor(i/f),i%=f,u[o]=i<0?i+f:i;return"number"==typeof(u=h(u))?(n&&(u=-u),new p(u)):new s(u,n)}function M(t,r){var n,o,i,a,u=t.length,s=r.length,p=y(u+s),l=e;for(i=0;i<u;++i){a=t[i];for(var f=0;f<s;++f)n=a*r[f]+p[i+f],o=Math.floor(n/l),p[i+f]=n-o*l,p[i+f+1]+=o}return v(p),p}function S(t,r){var n,o,i=t.length,a=new Array(i),u=e,s=0;for(o=0;o<i;o++)n=t[o]*r+s,s=Math.floor(n/u),a[o]=n-s*u;for(;s>0;)a[o++]=s%u,s=Math.floor(s/u);return a}function q(t,r){for(var e=[];r-- >0;)e.push(0);return e.concat(t)}function E(t,r,n){return new s(t<e?S(r,t):M(r,f(t)),n)}function N(t){var r,n,o,i,a=t.length,u=y(a+a),s=e;for(o=0;o<a;o++){i=t[o];for(var p=0;p<a;p++)r=i*t[p]+u[o+p],n=Math.floor(r/s),u[o+p]=r-n*s,u[o+p+1]+=n}return v(u),u}function A(t,r){var n,o,i,a,u=t.length,s=y(u),p=e;for(i=0,n=u-1;n>=0;--n)i=(a=i*p+t[n])-(o=c(a/r))*r,s[n]=0|o;return[s,0|i]}function O(t,r){var n,o,i=H(r),a=t.value,l=i.value;if(0===l)throw new Error("Cannot divide by zero");if(t.isSmall)return i.isSmall?[new p(c(a/l)),new p(a%l)]:[u[0],t];if(i.isSmall){if(1===l)return[t,u[0]];if(-1==l)return[t.negate(),u[0]];var g=Math.abs(l);if(g<e){o=h((n=A(a,g))[0]);var m=n[1];return t.sign&&(m=-m),"number"==typeof o?(t.sign!==i.sign&&(o=-o),[new p(o),new p(m)]):[new s(o,t.sign!==i.sign),new p(m)]}l=f(g)}var d=P(a,l);if(-1===d)return[u[0],t];if(0===d)return[u[t.sign===i.sign?1:-1],u[0]];o=(n=a.length+l.length<=200?function(t,r){var n,o,i,a,u,s,p,l=t.length,f=r.length,v=e,c=y(r.length),g=r[f-1],m=Math.ceil(v/(2*g)),d=S(t,m),w=S(r,m);for(d.length<=l&&d.push(0),w.push(0),g=w[f-1],o=l-f;o>=0;o--){for(n=v-1,d[o+f]!==g&&(n=Math.floor((d[o+f]*v+d[o+f-1])/g)),i=0,a=0,s=w.length,u=0;u<s;u++)i+=n*w[u],p=Math.floor(i/v),a+=d[o+u]-(i-p*v),i=p,a<0?(d[o+u]=a+v,a=-1):(d[o+u]=a,a=0);for(;0!==a;){for(n-=1,i=0,u=0;u<s;u++)(i+=d[o+u]-v+w[u])<0?(d[o+u]=i+v,i=0):(d[o+u]=i,i=1);a+=i}c[o]=n}return d=A(d,m)[0],[h(c),h(d)]}(a,l):function(t,r){for(var n,o,i,a,u,s=t.length,p=r.length,l=[],f=[],y=e;s;)if(f.unshift(t[--s]),v(f),P(f,r)<0)l.push(0);else{i=f[(o=f.length)-1]*y+f[o-2],a=r[p-1]*y+r[p-2],o>p&&(i=(i+1)*y),n=Math.ceil(i/a);do{if(P(u=S(r,n),f)<=0)break;n--}while(n);l.push(n),f=w(f,u)}return l.reverse(),[h(l),h(f)]}(a,l))[0];var b=t.sign!==i.sign,M=n[1],q=t.sign;return"number"==typeof o?(b&&(o=-o),o=new p(o)):o=new s(o,b),"number"==typeof M?(q&&(M=-M),M=new p(M)):M=new s(M,q),[o,M]}function P(t,r){if(t.length!==r.length)return t.length>r.length?1:-1;for(var e=t.length-1;e>=0;e--)if(t[e]!==r[e])return t[e]>r[e]?1:-1;return 0}function x(t){var r=t.abs();return!r.isUnit()&&(!!(r.equals(2)||r.equals(3)||r.equals(5))||!(r.isEven()||r.isDivisibleBy(3)||r.isDivisibleBy(5))&&(!!r.lesser(25)||void 0))}s.prototype=Object.create(u.prototype),p.prototype=Object.create(u.prototype),s.prototype.add=function(t){var r=H(t);if(this.sign!==r.sign)return this.subtract(r.negate());var e=this.value,n=r.value;return r.isSmall?new s(d(e,Math.abs(n)),this.sign):new s(m(e,n),this.sign)},s.prototype.plus=s.prototype.add,p.prototype.add=function(t){var r=H(t),e=this.value;if(e<0!==r.sign)return this.subtract(r.negate());var n=r.value;if(r.isSmall){if(l(e+n))return new p(e+n);n=f(Math.abs(n))}return new s(d(n,Math.abs(e)),e<0)},p.prototype.plus=p.prototype.add,s.prototype.subtract=function(t){var r=H(t);if(this.sign!==r.sign)return this.add(r.negate());var e=this.value,n=r.value;return r.isSmall?b(e,Math.abs(n),this.sign):function(t,r,e){var n;return P(t,r)>=0?n=w(t,r):(n=w(r,t),e=!e),"number"==typeof(n=h(n))?(e&&(n=-n),new p(n)):new s(n,e)}(e,n,this.sign)},s.prototype.minus=s.prototype.subtract,p.prototype.subtract=function(t){var r=H(t),e=this.value;if(e<0!==r.sign)return this.add(r.negate());var n=r.value;return r.isSmall?new p(e-n):b(n,Math.abs(e),e>=0)},p.prototype.minus=p.prototype.subtract,s.prototype.negate=function(){return new s(this.value,!this.sign)},p.prototype.negate=function(){var t=this.sign,r=new p(-this.value);return r.sign=!t,r},s.prototype.abs=function(){return new s(this.value,!1)},p.prototype.abs=function(){return new p(Math.abs(this.value))},s.prototype.multiply=function(t){var r,n,o,i=H(t),a=this.value,p=i.value,l=this.sign!==i.sign;if(i.isSmall){if(0===p)return u[0];if(1===p)return this;if(-1===p)return this.negate();if((r=Math.abs(p))<e)return new s(S(a,r),l);p=f(r)}return n=a.length,o=p.length,new s(-.012*n-.012*o+15e-6*n*o>0?function t(r,e){var n=Math.max(r.length,e.length);if(n<=30)return M(r,e);n=Math.ceil(n/2);var o=r.slice(n),i=r.slice(0,n),a=e.slice(n),u=e.slice(0,n),s=t(i,u),p=t(o,a),l=t(m(i,o),m(u,a)),f=m(m(s,q(w(w(l,s),p),n)),q(p,2*n));return v(f),f}(a,p):M(a,p),l)},s.prototype.times=s.prototype.multiply,p.prototype._multiplyBySmall=function(t){return l(t.value*this.value)?new p(t.value*this.value):E(Math.abs(t.value),f(Math.abs(this.value)),this.sign!==t.sign)},s.prototype._multiplyBySmall=function(t){return 0===t.value?u[0]:1===t.value?this:-1===t.value?this.negate():E(Math.abs(t.value),this.value,this.sign!==t.sign)},p.prototype.multiply=function(t){return H(t)._multiplyBySmall(this)},p.prototype.times=p.prototype.multiply,s.prototype.square=function(){return new s(N(this.value),!1)},p.prototype.square=function(){var t=this.value*this.value;return l(t)?new p(t):new s(N(f(Math.abs(this.value))),!1)},s.prototype.divmod=function(t){var r=O(this,t);return{quotient:r[0],remainder:r[1]}},p.prototype.divmod=s.prototype.divmod,s.prototype.divide=function(t){return O(this,t)[0]},p.prototype.over=p.prototype.divide=s.prototype.over=s.prototype.divide,s.prototype.mod=function(t){return O(this,t)[1]},p.prototype.remainder=p.prototype.mod=s.prototype.remainder=s.prototype.mod,s.prototype.pow=function(t){var r,e,n,o=H(t),i=this.value,a=o.value;if(0===a)return u[1];if(0===i)return u[0];if(1===i)return u[1];if(-1===i)return o.isEven()?u[1]:u[-1];if(o.sign)return u[0];if(!o.isSmall)throw new Error("The exponent "+o.toString()+" is too large.");if(this.isSmall&&l(r=Math.pow(i,a)))return new p(c(r));for(e=this,n=u[1];!0&a&&(n=n.times(e),--a),0!==a;)a/=2,e=e.square();return n},p.prototype.pow=s.prototype.pow,s.prototype.modPow=function(t,r){if(t=H(t),(r=H(r)).isZero())throw new Error("Cannot take modPow with modulus 0");for(var e=u[1],n=this.mod(r);t.isPositive();){if(n.isZero())return u[0];t.isOdd()&&(e=e.multiply(n).mod(r)),t=t.divide(2),n=n.square().mod(r)}return e},p.prototype.modPow=s.prototype.modPow,s.prototype.compareAbs=function(t){var r=H(t),e=this.value,n=r.value;return r.isSmall?1:P(e,n)},p.prototype.compareAbs=function(t){var r=H(t),e=Math.abs(this.value),n=r.value;return r.isSmall?e===(n=Math.abs(n))?0:e>n?1:-1:-1},s.prototype.compare=function(t){if(t===1/0)return-1;if(t===-1/0)return 1;var r=H(t),e=this.value,n=r.value;return this.sign!==r.sign?r.sign?1:-1:r.isSmall?this.sign?-1:1:P(e,n)*(this.sign?-1:1)},s.prototype.compareTo=s.prototype.compare,p.prototype.compare=function(t){if(t===1/0)return-1;if(t===-1/0)return 1;var r=H(t),e=this.value,n=r.value;return r.isSmall?e==n?0:e>n?1:-1:e<0!==r.sign?e<0?-1:1:e<0?1:-1},p.prototype.compareTo=p.prototype.compare,s.prototype.equals=function(t){return 0===this.compare(t)},p.prototype.eq=p.prototype.equals=s.prototype.eq=s.prototype.equals,s.prototype.notEquals=function(t){return 0!==this.compare(t)},p.prototype.neq=p.prototype.notEquals=s.prototype.neq=s.prototype.notEquals,s.prototype.greater=function(t){return this.compare(t)>0},p.prototype.gt=p.prototype.greater=s.prototype.gt=s.prototype.greater,s.prototype.lesser=function(t){return this.compare(t)<0},p.prototype.lt=p.prototype.lesser=s.prototype.lt=s.prototype.lesser,s.prototype.greaterOrEquals=function(t){return this.compare(t)>=0},p.prototype.geq=p.prototype.greaterOrEquals=s.prototype.geq=s.prototype.greaterOrEquals,s.prototype.lesserOrEquals=function(t){return this.compare(t)<=0},p.prototype.leq=p.prototype.lesserOrEquals=s.prototype.leq=s.prototype.lesserOrEquals,s.prototype.isEven=function(){return 0==(1&this.value[0])},p.prototype.isEven=function(){return 0==(1&this.value)},s.prototype.isOdd=function(){return 1==(1&this.value[0])},p.prototype.isOdd=function(){return 1==(1&this.value)},s.prototype.isPositive=function(){return!this.sign},p.prototype.isPositive=function(){return this.value>0},s.prototype.isNegative=function(){return this.sign},p.prototype.isNegative=function(){return this.value<0},s.prototype.isUnit=function(){return!1},p.prototype.isUnit=function(){return 1===Math.abs(this.value)},s.prototype.isZero=function(){return!1},p.prototype.isZero=function(){return 0===this.value},s.prototype.isDivisibleBy=function(t){var r=H(t),e=r.value;return 0!==e&&(1===e||(2===e?this.isEven():this.mod(r).equals(u[0])))},p.prototype.isDivisibleBy=s.prototype.isDivisibleBy,s.prototype.isPrime=function(){var t=x(this);if(void 0!==t)return t;for(var e,n,o,i,a=this.abs(),s=a.prev(),p=[2,3,5,7,11,13,17,19],l=s;l.isEven();)l=l.divide(2);for(o=0;o<p.length;o++)if(!(i=r(p[o]).modPow(l,a)).equals(u[1])&&!i.equals(s)){for(n=!0,e=l;n&&e.lesser(s);e=e.multiply(2))(i=i.square().mod(a)).equals(s)&&(n=!1);if(n)return!1}return!0},p.prototype.isPrime=s.prototype.isPrime,s.prototype.isProbablePrime=function(t){var e=x(this);if(void 0!==e)return e;for(var n=this.abs(),o=void 0===t?5:t,i=0;i<o;i++){if(!r.randBetween(2,n.minus(2)).modPow(n.prev(),n).isUnit())return!1}return!0},p.prototype.isProbablePrime=s.prototype.isProbablePrime,s.prototype.modInv=function(t){for(var e,n,o,i=r.zero,a=r.one,u=H(t),s=this.abs();!s.equals(r.zero);)e=u.divide(s),n=i,o=u,i=a,u=s,a=n.subtract(e.multiply(a)),s=o.subtract(e.multiply(s));if(!u.equals(1))throw new Error(this.toString()+" and "+t.toString()+" are not co-prime");return-1===i.compare(0)&&(i=i.add(t)),this.isNegative()?i.negate():i},p.prototype.modInv=s.prototype.modInv,s.prototype.next=function(){var t=this.value;return this.sign?b(t,1,this.sign):new s(d(t,1),this.sign)},p.prototype.next=function(){var t=this.value;return t+1<o?new p(t+1):new s(i,!1)},s.prototype.prev=function(){var t=this.value;return this.sign?new s(d(t,1),!0):b(t,1,this.sign)},p.prototype.prev=function(){var t=this.value;return t-1>-o?new p(t-1):new s(i,!0)};for(var Z=[1];2*Z[Z.length-1]<=e;)Z.push(2*Z[Z.length-1]);var I=Z.length,B=Z[I-1];function C(t){return("number"==typeof t||"string"==typeof t)&&+Math.abs(t)<=e||t instanceof s&&t.value.length<=1}function J(t,e,n){e=H(e);for(var o=t.isNegative(),i=e.isNegative(),a=o?t.not():t,u=i?e.not():e,s=0,p=0,l=null,f=null,h=[];!a.isZero()||!u.isZero();)s=(l=O(a,B))[1].toJSNumber(),o&&(s=B-1-s),p=(f=O(u,B))[1].toJSNumber(),i&&(p=B-1-p),a=l[0],u=f[0],h.push(n(s,p));for(var v=0!==n(o?1:0,i?1:0)?r(-1):r(0),y=h.length-1;y>=0;y-=1)v=v.multiply(B).add(r(h[y]));return v}s.prototype.shiftLeft=function(t){if(!C(t))throw new Error(String(t)+" is too large for shifting.");if((t=+t)<0)return this.shiftRight(-t);for(var r=this;t>=I;)r=r.multiply(B),t-=I-1;return r.multiply(Z[t])},p.prototype.shiftLeft=s.prototype.shiftLeft,s.prototype.shiftRight=function(t){var r;if(!C(t))throw new Error(String(t)+" is too large for shifting.");if((t=+t)<0)return this.shiftLeft(-t);for(var e=this;t>=I;){if(e.isZero())return e;e=(r=O(e,B))[1].isNegative()?r[0].prev():r[0],t-=I-1}return(r=O(e,Z[t]))[1].isNegative()?r[0].prev():r[0]},p.prototype.shiftRight=s.prototype.shiftRight,s.prototype.not=function(){return this.negate().prev()},p.prototype.not=s.prototype.not,s.prototype.and=function(t){return J(this,t,function(t,r){return t&r})},p.prototype.and=s.prototype.and,s.prototype.or=function(t){return J(this,t,function(t,r){return t|r})},p.prototype.or=s.prototype.or,s.prototype.xor=function(t){return J(this,t,function(t,r){return t^r})},p.prototype.xor=s.prototype.xor;var z=1<<30,j=(e&-e)*(e&-e)|z;function L(t){var r=t.value,n="number"==typeof r?r|z:r[0]+r[1]*e|j;return n&-n}function D(t,r){return t=H(t),r=H(r),t.greater(r)?t:r}function U(t,r){return t=H(t),r=H(r),t.lesser(r)?t:r}function k(t,r){if(t=H(t).abs(),r=H(r).abs(),t.equals(r))return t;if(t.isZero())return r;if(r.isZero())return t;for(var e,n,o=u[1];t.isEven()&&r.isEven();)e=Math.min(L(t),L(r)),t=t.divide(e),r=r.divide(e),o=o.multiply(e);for(;t.isEven();)t=t.divide(L(t));do{for(;r.isEven();)r=r.divide(L(r));t.greater(r)&&(n=r,r=t,t=n),r=r.subtract(t)}while(!r.isZero());return o.isUnit()?t:t.multiply(o)}var R=function(t,r){for(var e=t.length,n=Math.abs(r),o=0;o<e;o++){if("-"!==(l=t[o].toLowerCase())&&/[a-z0-9]/.test(l)){if(/[0-9]/.test(l)&&+l>=n){if("1"===l&&1===n)continue;throw new Error(l+" is not a valid digit in base "+r+".")}if(l.charCodeAt(0)-87>=n)throw new Error(l+" is not a valid digit in base "+r+".")}}if(2<=r&&r<=36&&e<=a/Math.log(r)){var i=parseInt(t,r);if(isNaN(i))throw new Error(l+" is not a valid digit in base "+r+".");return new p(parseInt(t,r))}r=H(r);var u=[],s="-"===t[0];for(o=s?1:0;o<t.length;o++){var l,f=(l=t[o].toLowerCase()).charCodeAt(0);if(48<=f&&f<=57)u.push(H(l));else if(97<=f&&f<=122)u.push(H(l.charCodeAt(0)-87));else{if("<"!==l)throw new Error(l+" is not a valid character");var h=o;do{o++}while(">"!==t[o]);u.push(H(t.slice(h+1,o)))}}return T(u,r,s)};function T(t,r,e){var n,o=u[0],i=u[1];for(n=t.length-1;n>=0;n--)o=o.add(t[n].times(i)),i=i.times(r);return e?o.negate():o}function _(t){return t<=35?"0123456789abcdefghijklmnopqrstuvwxyz".charAt(t):"<"+t+">"}function $(t,e){if((e=r(e)).isZero()){if(t.isZero())return{value:[0],isNegative:!1};throw new Error("Cannot convert nonzero numbers to base 0.")}if(e.equals(-1)){if(t.isZero())return{value:[0],isNegative:!1};if(t.isNegative())return{value:[].concat.apply([],Array.apply(null,Array(-t)).map(Array.prototype.valueOf,[1,0])),isNegative:!1};var n=Array.apply(null,Array(+t-1)).map(Array.prototype.valueOf,[0,1]);return n.unshift([1]),{value:[].concat.apply([],n),isNegative:!1}}var o=!1;if(t.isNegative()&&e.isPositive()&&(o=!0,t=t.abs()),e.equals(1))return t.isZero()?{value:[0],isNegative:!1}:{value:Array.apply(null,Array(+t)).map(Number.prototype.valueOf,1),isNegative:o};for(var i,a=[],u=t;u.isNegative()||u.compareAbs(e)>=0;){i=u.divmod(e),u=i.quotient;var s=i.remainder;s.isNegative()&&(s=e.minus(s).abs(),u=u.next()),a.push(s.toJSNumber())}return a.push(u.toJSNumber()),{value:a.reverse(),isNegative:o}}function F(t,r){var e=$(t,r);return(e.isNegative?"-":"")+e.value.map(_).join("")}function G(t){if(l(+t)){var r=+t;if(r===c(r))return new p(r);throw"Invalid integer: "+t}var e="-"===t[0];e&&(t=t.slice(1));var o=t.split(/e/i);if(o.length>2)throw new Error("Invalid integer: "+o.join("e"));if(2===o.length){var i=o[1];if("+"===i[0]&&(i=i.slice(1)),(i=+i)!==c(i)||!l(i))throw new Error("Invalid integer: "+i+" is not a valid exponent.");var a=o[0],u=a.indexOf(".");if(u>=0&&(i-=a.length-u-1,a=a.slice(0,u)+a.slice(u+1)),i<0)throw new Error("Cannot include negative exponent part for integers");t=a+=new Array(i+1).join("0")}if(!/^([0-9][0-9]*)$/.test(t))throw new Error("Invalid integer: "+t);for(var f=[],h=t.length,y=n,g=h-y;h>0;)f.push(+t.slice(g,h)),(g-=y)<0&&(g=0),h-=y;return v(f),new s(f,e)}function H(t){return"number"==typeof t?function(t){if(l(t)){if(t!==c(t))throw new Error(t+" is not an integer.");return new p(t)}return G(t.toString())}(t):"string"==typeof t?G(t):t}s.prototype.toArray=function(t){return $(this,t)},p.prototype.toArray=function(t){return $(this,t)},s.prototype.toString=function(t){if(void 0===t&&(t=10),10!==t)return F(this,t);for(var r,e=this.value,n=e.length,o=String(e[--n]);--n>=0;)r=String(e[n]),o+="0000000".slice(r.length)+r;return(this.sign?"-":"")+o},p.prototype.toString=function(t){return void 0===t&&(t=10),10!=t?F(this,t):String(this.value)},s.prototype.toJSON=p.prototype.toJSON=function(){return this.toString()},s.prototype.valueOf=function(){return parseInt(this.toString(),10)},s.prototype.toJSNumber=s.prototype.valueOf,p.prototype.valueOf=function(){return this.value},p.prototype.toJSNumber=p.prototype.valueOf;for(var K=0;K<1e3;K++)u[K]=new p(K),K>0&&(u[-K]=new p(-K));return u.one=u[1],u.zero=u[0],u.minusOne=u[-1],u.max=D,u.min=U,u.gcd=k,u.lcm=function(t,r){return t=H(t).abs(),r=H(r).abs(),t.divide(k(t,r)).multiply(r)},u.isInstance=function(t){return t instanceof s||t instanceof p},u.randBetween=function(t,r){var n=U(t=H(t),r=H(r)),o=D(t,r).subtract(n).add(1);if(o.isSmall)return n.add(Math.floor(Math.random()*o));for(var i=[],a=!0,u=o.value.length-1;u>=0;u--){var l=a?o.value[u]:e,f=c(Math.random()*l);i.unshift(f),f<l&&(a=!1)}return i=h(i),n.add("number"==typeof i?new p(i):new s(i,!1))},u.fromArray=function(t,r,e){return T(t.map(H),H(r||10),e)},u}();"undefined"!=typeof module&&module.hasOwnProperty("exports")&&(module.exports=r),"function"==typeof t&&t.amd&&t("big-integer",[],function(){return r});
-},{}],"S0gh":[function(require,module,exports) {
-var n=require("big-integer");function r(n){return n>0?Math.floor(n):Math.ceil(n)}exports["fromBase'"]=function(r){return function(t){return function(u){return function(e){try{var o=n(e,u);return r(o)}catch(i){return t}}}}},exports["fromNumber'"]=function(t){return function(u){return function(e){try{var o=n(r(e));return t(o)}catch(i){return u}}}},exports.fromInt=function(r){return n(r)},exports.toBase=function(n){return function(r){return r.toString(n)}},exports.toNumber=function(n){return n.toJSNumber()},exports.biAdd=function(n){return function(r){return n.add(r)}},exports.biMul=function(n){return function(r){return n.multiply(r)}},exports.biSub=function(n){return function(r){return n.minus(r)}},exports.biMod=function(n){return function(r){return n.mod(r)}},exports.biDiv=function(n){return function(r){return n.divide(r)}},exports.biEquals=function(n){return function(r){return n.equals(r)}},exports.biCompare=function(n){return function(r){return n.compare(r)}},exports.abs=function(n){return n.abs()},exports.even=function(n){return n.isEven()},exports.odd=function(n){return n.isOdd()},exports.prime=function(n){return n.isPrime()},exports.pow=function(n){return function(r){return n.pow(r)}},exports.not=function(n){return n.not()},exports.or=function(n){return function(r){return n.or(r)}},exports.xor=function(n){return function(r){return n.xor(r)}},exports.and=function(n){return function(r){return n.and(r)}},exports.shl=function(n){return function(r){return n.shiftLeft(r)}},exports.shr=function(n){return function(r){return n.shiftRight(r)}},exports.digitsInBase=function(n){return function(r){return r.toArray(n)}};
-},{"big-integer":"9xaU"}],"2lBd":[function(require,module,exports) {
-"use strict";exports.fromNumberImpl=function(r){return function(n){return function(t){return(0|t)===t?r(t):n}}},exports.toNumber=function(r){return r},exports.fromStringAsImpl=function(r){return function(n){return function(t){var u;u=t<11?"[0-"+(t-1).toString()+"]":11===t?"[0-9a]":"[0-9a-"+String.fromCharCode(86+t)+"]";var o=new RegExp("^[\\+\\-]?"+u+"+$","i");return function(u){if(o.test(u)){var e=parseInt(u,t);return(0|e)===e?r(e):n}return n}}}},exports.toStringAs=function(r){return function(n){return n.toString(r)}},exports.quot=function(r){return function(n){return r/n|0}},exports.rem=function(r){return function(n){return r%n}},exports.pow=function(r){return function(n){return 0|Math.pow(r,n)}};
-},{}],"xYq2":[function(require,module,exports) {
-"use strict";var n=require("../Data.Ring/index.js"),i=require("../Data.Semiring/index.js"),r=function(n,i){this.Ring0=n,this.recip=i},e=function(n){return n.recip},t=function(n){return function(r){return function(t){return i.mul(n.Ring0().Semiring0())(r)(e(n)(t))}}},u=function(n){return function(r){return function(t){return i.mul(n.Ring0().Semiring0())(e(n)(t))(r)}}},c=new r(function(){return n.ringNumber},function(n){return 1/n});module.exports={DivisionRing:r,recip:e,leftDiv:u,rightDiv:t,divisionringNumber:c};
-},{"../Data.Ring/index.js":"E2qH","../Data.Semiring/index.js":"11NF"}],"pJ2E":[function(require,module,exports) {
-"use strict";exports.nan=NaN,exports.isNaN=isNaN,exports.infinity=1/0,exports.isFinite=isFinite,exports.readInt=function(t){return function(e){return parseInt(e,t)}},exports.readFloat=parseFloat;
-},{}],"aQlK":[function(require,module,exports) {
-"use strict";var i=require("./foreign.js");module.exports={nan:i.nan,isNaN:i.isNaN,infinity:i.infinity,isFinite:i.isFinite,readInt:i.readInt,readFloat:i.readFloat};
-},{"./foreign.js":"pJ2E"}],"9/+z":[function(require,module,exports) {
-"use strict";exports.abs=Math.abs,exports.acos=Math.acos,exports.asin=Math.asin,exports.atan=Math.atan,exports.atan2=function(t){return function(r){return Math.atan2(t,r)}},exports.ceil=Math.ceil,exports.cos=Math.cos,exports.exp=Math.exp,exports.floor=Math.floor,exports.trunc=Math.trunc||function(t){return t<0?Math.ceil(t):Math.floor(t)},exports.log=Math.log,exports.max=function(t){return function(r){return Math.max(t,r)}},exports.min=function(t){return function(r){return Math.min(t,r)}},exports.pow=function(t){return function(r){return Math.pow(t,r)}},exports.remainder=function(t){return function(r){return t%r}},exports.round=Math.round,exports.sin=Math.sin,exports.sqrt=Math.sqrt,exports.tan=Math.tan,exports.e=Math.E,exports.ln2=Math.LN2,exports.ln10=Math.LN10,exports.log2e=Math.LOG2E,exports.log10e=Math.LOG10E,exports.pi=Math.PI,exports.tau=2*Math.PI,exports.sqrt1_2=Math.SQRT1_2,exports.sqrt2=Math.SQRT2;
-},{}],"Rpaz":[function(require,module,exports) {
-"use strict";var a=require("./foreign.js");module.exports={abs:a.abs,acos:a.acos,asin:a.asin,atan:a.atan,atan2:a.atan2,ceil:a.ceil,cos:a.cos,exp:a.exp,floor:a.floor,log:a.log,max:a.max,min:a.min,pow:a.pow,round:a.round,sin:a.sin,sqrt:a.sqrt,tan:a.tan,trunc:a.trunc,remainder:a.remainder,e:a.e,ln2:a.ln2,ln10:a.ln10,log2e:a.log2e,log10e:a.log10e,pi:a.pi,tau:a.tau,sqrt1_2:a.sqrt1_2,sqrt2:a.sqrt2};
-},{"./foreign.js":"9/+z"}],"xNJb":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),e=require("../Control.Category/index.js"),t=require("../Data.Boolean/index.js"),r=require("../Data.Bounded/index.js"),i=require("../Data.CommutativeRing/index.js"),u=require("../Data.DivisionRing/index.js"),o=require("../Data.Eq/index.js"),a=require("../Data.EuclideanRing/index.js"),c=require("../Data.Maybe/index.js"),f=require("../Data.Ord/index.js"),l=require("../Data.Ordering/index.js"),d=require("../Data.Ring/index.js"),s=require("../Data.Semiring/index.js"),m=require("../Data.Show/index.js"),v=require("../Global/index.js"),w=require("../Math/index.js"),g=function(n){return n},q=function(){function n(){}return n.value=new n,n}(),h=function(){function n(){}return n.value=new n,n}(),D=new m.Show(function(n){if(n instanceof q)return"Even";if(n instanceof h)return"Odd";throw new Error("Failed pattern match at Data.Int (line 112, column 1 - line 114, column 19): "+[n.constructor.name])}),b=function(n){if(n>=2&&n<=36)return new c.Just(n);if(t.otherwise)return c.Nothing.value;throw new Error("Failed pattern match at Data.Int (line 193, column 1 - line 193, column 28): "+[n.constructor.name])},x=function(n){return 0!=(1&n)},y=8,j=16,p=n.fromStringAsImpl(c.Just.create)(c.Nothing.value),E=p(10),I=n.fromNumberImpl(c.Just.create)(c.Nothing.value),R=function(e){if(e===v.infinity)return 0;if(e===-v.infinity)return 0;if(e>=n.toNumber(r.top(r.boundedInt)))return r.top(r.boundedInt);if(e<=n.toNumber(r.bottom(r.boundedInt)))return r.bottom(r.boundedInt);if(t.otherwise)return c.fromMaybe(0)(I(e));throw new Error("Failed pattern match at Data.Int (line 66, column 1 - line 66, column 29): "+[e.constructor.name])},N=function(n){return R(w.round(n))},P=function(n){return R(w.floor(n))},S=function(n){return 0==(1&n)},F=function(n){return S(n)?q.value:h.value},O=new o.Eq(function(n){return function(e){return n instanceof q&&e instanceof q||n instanceof h&&e instanceof h}}),A=new f.Ord(function(){return O},function(n){return function(e){if(n instanceof q&&e instanceof q)return l.EQ.value;if(n instanceof q)return l.LT.value;if(e instanceof q)return l.GT.value;if(n instanceof h&&e instanceof h)return l.EQ.value;throw new Error("Failed pattern match at Data.Int (line 110, column 1 - line 110, column 40): "+[n.constructor.name,e.constructor.name])}}),C=new s.Semiring(function(n){return function(e){return o.eq(O)(n)(e)?q.value:h.value}},function(n){return function(e){return n instanceof h&&e instanceof h?h.value:q.value}},h.value,q.value),B=new d.Ring(function(){return C},s.add(C)),J=new u.DivisionRing(function(){return B},e.identity(e.categoryFn)),M=10,G=new i.CommutativeRing(function(){return B}),Q=new a.EuclideanRing(function(){return G},function(n){if(n instanceof q)return 0;if(n instanceof h)return 1;throw new Error("Failed pattern match at Data.Int (line 132, column 1 - line 136, column 17): "+[n.constructor.name])},function(n){return function(e){return n}},function(n){return function(n){return q.value}}),T=function(n){return R(w.ceil(n))},L=new r.Bounded(function(){return A},q.value,h.value),k=2,z=36;module.exports={fromNumber:I,ceil:T,floor:P,round:N,fromString:E,radix:b,binary:k,octal:y,decimal:M,hexadecimal:j,base36:z,fromStringAs:p,Even:q,Odd:h,parity:F,even:S,odd:x,eqParity:O,ordParity:A,showParity:D,boundedParity:L,semiringParity:C,ringParity:B,commutativeRingParity:G,euclideanRingParity:Q,divisionRingParity:J,toNumber:n.toNumber,toStringAs:n.toStringAs,quot:n.quot,rem:n.rem,pow:n.pow};
-},{"./foreign.js":"2lBd","../Control.Category/index.js":"IAi2","../Data.Boolean/index.js":"ObQr","../Data.Bounded/index.js":"kcUU","../Data.CommutativeRing/index.js":"60TQ","../Data.DivisionRing/index.js":"xYq2","../Data.Eq/index.js":"Pq4F","../Data.EuclideanRing/index.js":"2IRB","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Ring/index.js":"E2qH","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Global/index.js":"aQlK","../Math/index.js":"Rpaz"}],"g11n":[function(require,module,exports) {
-"use strict";exports.fromCharArray=function(n){return n.join("")},exports.toCharArray=function(n){return n.split("")},exports.singleton=function(n){return n},exports._charAt=function(n){return function(t){return function(r){return function(u){return r>=0&&r<u.length?n(u.charAt(r)):t}}}},exports._toChar=function(n){return function(t){return function(r){return 1===r.length?n(r):t}}},exports.length=function(n){return n.length},exports.countPrefix=function(n){return function(t){for(var r=0;r<t.length&&n(t.charAt(r));)r++;return r}},exports._indexOf=function(n){return function(t){return function(r){return function(u){var e=u.indexOf(r);return-1===e?t:n(e)}}}},exports["_indexOf'"]=function(n){return function(t){return function(r){return function(u){return function(e){if(u<0||u>e.length)return t;var o=e.indexOf(r,u);return-1===o?t:n(o)}}}}},exports._lastIndexOf=function(n){return function(t){return function(r){return function(u){var e=u.lastIndexOf(r);return-1===e?t:n(e)}}}},exports["_lastIndexOf'"]=function(n){return function(t){return function(r){return function(u){return function(e){if(u<0||u>e.length)return t;var o=e.lastIndexOf(r,u);return-1===o?t:n(o)}}}}},exports.take=function(n){return function(t){return t.substr(0,n)}},exports.drop=function(n){return function(t){return t.substring(n)}},exports._slice=function(n){return function(t){return function(r){return r.slice(n,t)}}},exports.splitAt=function(n){return function(t){return{before:t.substring(0,n),after:t.substring(n)}}};
-},{}],"iZpG":[function(require,module,exports) {
-"use strict";exports.charAt=function(r){return function(t){if(r>=0&&r<t.length)return t.charAt(r);throw new Error("Data.String.Unsafe.charAt: Invalid index.")}},exports.char=function(r){if(1===r.length)return r.charAt(0);throw new Error("Data.String.Unsafe.char: Expected string of length 1.")};
-},{}],"5UWM":[function(require,module,exports) {
-"use strict";var r=require("./foreign.js");module.exports={char:r.char,charAt:r.charAt};
-},{"./foreign.js":"iZpG"}],"6c6X":[function(require,module,exports) {
-"use strict";var t=require("./foreign.js"),n=require("../Data.Boolean/index.js"),e=require("../Data.Maybe/index.js"),r=require("../Data.String.Unsafe/index.js"),u=function(n){return""===n?e.Nothing.value:new e.Just({head:r.charAt(0)(n),tail:t.drop(1)(n)})},i=t._toChar(e.Just.create)(e.Nothing.value),a=function(n){return function(e){return t.take(t.countPrefix(n)(e))(e)}},o=function(n){return function(e){return t.drop(t.length(e)-n|0)(e)}},c=function(r){return function(u){return function(i){var a=t.length(i),o=function(t){if(t<0)return a+t|0;if(n.otherwise)return t;throw new Error("Failed pattern match at Data.String.CodeUnits (line 314, column 5 - line 315, column 27): "+[t.constructor.name])},c=o(u),f=o(r);return f<0||f>=a||c<0||c>a||f>c?e.Nothing.value:new e.Just(t._slice(r)(u)(i))}}},f=t["_lastIndexOf'"](e.Just.create)(e.Nothing.value),l=t._lastIndexOf(e.Just.create)(e.Nothing.value),s=function(n){return function(r){var u=l(n)(r);return u instanceof e.Just&&u.value0===(t.length(r)-t.length(n)|0)?e.Just.create(t.take(u.value0)(r)):e.Nothing.value}},h=t["_indexOf'"](e.Just.create)(e.Nothing.value),g=t._indexOf(e.Just.create)(e.Nothing.value),d=function(n){return function(r){var u=g(n)(r);return u instanceof e.Just&&0===u.value0?e.Just.create(t.drop(t.length(n))(r)):e.Nothing.value}},v=function(n){return function(e){return t.drop(t.countPrefix(n)(e))(e)}},x=function(n){return function(e){return t.take(t.length(e)-n|0)(e)}},p=function(t){var n=g(t);return function(t){return e.isJust(n(t))}},J=t._charAt(e.Just.create)(e.Nothing.value);module.exports={stripPrefix:d,stripSuffix:s,contains:p,charAt:J,toChar:i,uncons:u,indexOf:g,"indexOf'":h,lastIndexOf:l,"lastIndexOf'":f,takeRight:o,takeWhile:a,dropRight:x,dropWhile:v,slice:c,singleton:t.singleton,fromCharArray:t.fromCharArray,toCharArray:t.toCharArray,length:t.length,countPrefix:t.countPrefix,take:t.take,drop:t.drop,splitAt:t.splitAt};
-},{"./foreign.js":"g11n","../Data.Boolean/index.js":"ObQr","../Data.Maybe/index.js":"5mN7","../Data.String.Unsafe/index.js":"5UWM"}],"B+B2":[function(require,module,exports) {
-"use strict";exports._localeCompare=function(r){return function(n){return function(t){return function(e){return function(o){var u=e.localeCompare(o);return u<0?r:u>0?t:n}}}}},exports.replace=function(r){return function(n){return function(t){return t.replace(r,n)}}},exports.replaceAll=function(r){return function(n){return function(t){return t.replace(new RegExp(r.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"g"),n)}}},exports.split=function(r){return function(n){return n.split(r)}},exports.toLower=function(r){return r.toLowerCase()},exports.toUpper=function(r){return r.toUpperCase()},exports.trim=function(r){return r.trim()},exports.joinWith=function(r){return function(n){return n.join(r)}};
-},{}],"OSrc":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),r=require("../Data.Ordering/index.js"),l=function(e){return""===e},o=e._localeCompare(r.LT.value)(r.EQ.value)(r.GT.value);module.exports={null:l,localeCompare:o,replace:e.replace,replaceAll:e.replaceAll,split:e.split,toLower:e.toLower,toUpper:e.toUpper,trim:e.trim,joinWith:e.joinWith};
-},{"./foreign.js":"B+B2","../Data.Ordering/index.js":"5Eun"}],"Ph6A":[function(require,module,exports) {
-"use strict";var n=require("../Control.Bind/index.js"),r=require("../Data.Eq/index.js"),t=require("../Data.Foldable/index.js"),e=require("../Data.Maybe/index.js"),i=require("../Data.Monoid/index.js"),o=require("../Data.Ord/index.js"),u=require("../Data.Semigroup/index.js"),c=require("../Data.Show/index.js"),a=require("../Data.String.CodeUnits/index.js"),f=require("../Data.String.Common/index.js"),p=require("../Data.Symbol/index.js"),m=function(n){return n},s=function(n){return n},l=function(n){this.nes=n},d=function(n){return f.toUpper(n)},S=function(n){return n},g=function(n){return f.toLower(n)},y=new c.Show(function(n){return"(NonEmptyString.unsafeFromString "+c.show(c.showString)(n)+")"}),E=new c.Show(function(n){return"(NonEmptyReplacement "+c.show(y)(n)+")"}),x=u.semigroupString,N=x,q=function(n){return function(r){return function(t){return f.replaceAll(n)(r)(t)}}},w=function(n){return function(r){return function(t){return f.replace(n)(r)(t)}}},j=function(n){return function(r){return n+r}},h=o.ordString,b=h,D=function(n){return new l(function(r){return p.reflectSymbol(n)(r)})},F=function(n){return n.nes},v=function(n){return new l(function(n){return""})},R=function(n){return function(r){return f.localeCompare(n)(r)}},C=function(n){return function(r){return n(r)}},M=function(n){return function(r){var e=t.intercalate(n.Foldable0())(i.monoidString)(r);return function(n){return m(e(n))}}},U=function(n){return function(r){var e=t.intercalate(n)(i.monoidString)(r);return function(n){return e(n)}}},W=function(n){return function(r){var t=U(n.Foldable0())(r);return function(n){return m(t(n))}}},k=function(n){return""===n?e.Nothing.value:new e.Just(n)},A=function(r){return n.composeKleisliFlipped(e.bindMaybe)(k)(C(a.stripPrefix(r)))},B=function(r){return n.composeKleisliFlipped(e.bindMaybe)(k)(C(a.stripSuffix(r)))},J=function(n){return k(f.trim(n))},K=function(n){var r=e.fromJust(n);return function(n){return r(k(n))}},L=r.eqString,P=L,O=function(n){return C(a.contains(n))},z=function(n){return function(r){return n+r}};module.exports={nes:F,NonEmptyString:m,MakeNonEmpty:l,NonEmptyReplacement:s,fromString:k,unsafeFromString:K,toString:S,appendString:z,prependString:j,stripPrefix:A,stripSuffix:B,contains:O,localeCompare:R,replace:w,replaceAll:q,toLower:g,toUpper:d,trim:J,joinWith:U,join1With:W,joinWith1:M,liftS:C,eqNonEmptyString:L,ordNonEmptyString:h,semigroupNonEmptyString:x,showNonEmptyString:y,makeNonEmptyBad:v,nonEmptyNonEmpty:D,eqNonEmptyReplacement:P,ordNonEmptyReplacement:b,semigroupNonEmptyReplacement:N,showNonEmptyReplacement:E};
-},{"../Control.Bind/index.js":"7VcT","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.String.CodeUnits/index.js":"6c6X","../Data.String.Common/index.js":"OSrc","../Data.Symbol/index.js":"4oJQ"}],"Zx+T":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),e=require("../Data.CommutativeRing/index.js"),r=require("../Data.Eq/index.js"),i=require("../Data.EuclideanRing/index.js"),t=require("../Data.Int/index.js"),o=require("../Data.Maybe/index.js"),u=require("../Data.Ord/index.js"),a=require("../Data.Ordering/index.js"),s=require("../Data.Ring/index.js"),d=require("../Data.Semiring/index.js"),m=require("../Data.Show/index.js"),g=require("../Data.String.NonEmpty.Internal/index.js"),f=n.toBase(10),b=function(e){return function(r){return o.fromJust()(g.fromString(n.toBase(e)(r)))}},c=b(10),q=new m.Show(function(n){return'fromString "'+f(n)+'"'}),B=new d.Semiring(n.biAdd,n.biMul,n.fromInt(1),n.fromInt(0)),l=new s.Ring(function(){return B},n.biSub),v=n.biMod,I=n.biDiv,x=n["fromNumber'"](o.Just.create)(o.Nothing.value),D=n["fromBase'"](o.Just.create)(o.Nothing.value),j=D(10),w=new r.Eq(n.biEquals),S=new u.Ord(function(){return w},function(e){return function(r){var i=n.biCompare(e)(r);return 1===i?a.GT.value:0===i?a.EQ.value:a.LT.value}}),h=new e.CommutativeRing(function(){return l}),N=new i.EuclideanRing(function(){return h},function(e){return t.floor(n.toNumber(n.abs(e)))},function(e){return function(r){return n.biDiv(s.sub(l)(e)(i.mod(N)(e)(r)))(r)}},function(e){return function(r){var i=n.abs(r);return n.biMod(d.add(B)(n.biMod(e)(i))(i))(i)}});module.exports={fromString:j,fromBase:D,fromNumber:x,toString:f,toNonEmptyString:c,"toBase'":b,quot:I,rem:v,eqBigInt:w,ordBigInt:S,showBigInt:q,semiringBigInt:B,ringBigInt:l,commutativeRingBigInt:h,euclideanRingBigInt:N,fromInt:n.fromInt,toBase:n.toBase,digitsInBase:n.digitsInBase,abs:n.abs,even:n.even,odd:n.odd,prime:n.prime,pow:n.pow,not:n.not,or:n.or,xor:n.xor,and:n.and,shl:n.shl,shr:n.shr,toNumber:n.toNumber};
-},{"./foreign.js":"S0gh","../Data.CommutativeRing/index.js":"60TQ","../Data.Eq/index.js":"Pq4F","../Data.EuclideanRing/index.js":"2IRB","../Data.Int/index.js":"xNJb","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Ring/index.js":"E2qH","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.String.NonEmpty.Internal/index.js":"Ph6A"}],"qF8i":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),e=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Category/index.js"),u=require("../Control.Plus/index.js"),o=require("../Data.Eq/index.js"),i=require("../Data.Foldable/index.js"),a=require("../Data.FoldableWithIndex/index.js"),l=require("../Data.Functor/index.js"),c=require("../Data.FunctorWithIndex/index.js"),f=require("../Data.Maybe/index.js"),d=require("../Data.Ord/index.js"),p=require("../Data.Ordering/index.js"),v=require("../Data.Semigroup/index.js"),s=require("../Data.Semigroup.Foldable/index.js"),x=require("../Data.Show/index.js"),q=require("../Data.Traversable/index.js"),m=require("../Data.TraversableWithIndex/index.js"),y=require("../Data.Tuple/index.js"),h=require("../Data.Unfoldable/index.js"),b=require("../Data.Unfoldable1/index.js"),w=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(r){return new n(e,r)}},n}(),j=function(n){return new b.Unfoldable1(function(e){return function(r){return y.uncurry(w.create)(l.map(y.functorTuple)(h.unfoldr(n)(l.map(f.functorMaybe)(e)))(e(r)))}})},E=function(n){return n.value1},F=function(n){return function(e){return new w(e,u.empty(n))}},N=function(n){return function(e){return new x.Show(function(r){return"(NonEmpty "+x.show(n)(r.value0)+" "+x.show(e)(r.value1)+")"})}},D=function(r){return function(t){return n.alt(r.Plus1().Alt0())(e.pure(r.Applicative0())(t.value0))(t.value1)}},I=function(n){return n.value0},W=function(n){return new l.Functor(function(e){return function(r){return new w(e(r.value0),l.map(n)(e)(r.value1))}})},g=function(n){return new c.FunctorWithIndex(function(){return W(n.Functor0())},function(e){return function(r){return new w(e(f.Nothing.value)(r.value0),c.mapWithIndex(n)(function(n){return e(f.Just.create(n))})(r.value1))}})},A=function(n){return function(e){return n(e.value0)(e.value1)}},T=function(n){return function(e){return function(r){return i.foldl(n)(e)(r.value0)(r.value1)}}},C=function(n){return new i.Foldable(function(e){return function(r){return function(t){return v.append(e.Semigroup0())(r(t.value0))(i.foldMap(n)(e)(r)(t.value1))}}},function(e){return function(r){return function(t){return i.foldl(n)(e)(e(r)(t.value0))(t.value1)}}},function(e){return function(r){return function(t){return e(t.value0)(i.foldr(n)(e)(r)(t.value1))}}})},S=function(n){return new a.FoldableWithIndex(function(){return C(n.Foldable0())},function(e){return function(r){return function(t){return v.append(e.Semigroup0())(r(f.Nothing.value)(t.value0))(a.foldMapWithIndex(n)(e)(function(n){return r(f.Just.create(n))})(t.value1))}}},function(e){return function(r){return function(t){return a.foldlWithIndex(n)(function(n){return e(f.Just.create(n))})(e(f.Nothing.value)(r)(t.value0))(t.value1)}}},function(e){return function(r){return function(t){return e(f.Nothing.value)(t.value0)(a.foldrWithIndex(n)(function(n){return e(f.Just.create(n))})(r)(t.value1))}}})},J=function(n){return new q.Traversable(function(){return C(n.Foldable1())},function(){return W(n.Functor0())},function(e){return function(t){return r.apply(e.Apply0())(l.map(e.Apply0().Functor0())(w.create)(t.value0))(q.sequence(n)(e)(t.value1))}},function(e){return function(t){return function(u){return r.apply(e.Apply0())(l.map(e.Apply0().Functor0())(w.create)(t(u.value0)))(q.traverse(n)(e)(t)(u.value1))}}})},M=function(n){return new m.TraversableWithIndex(function(){return S(n.FoldableWithIndex1())},function(){return g(n.FunctorWithIndex0())},function(){return J(n.Traversable2())},function(e){return function(t){return function(u){return r.apply(e.Apply0())(l.map(e.Apply0().Functor0())(w.create)(t(f.Nothing.value)(u.value0)))(m.traverseWithIndex(n)(e)(function(n){return t(f.Just.create(n))})(u.value1))}}})},O=function n(e){return new s.Foldable1(function(){return C(e)},function(r){return s.foldMap1(n(e))(r)(t.identity(t.categoryFn))},function(n){return function(r){return function(t){return i.foldl(e)(function(e){return function(t){return v.append(n)(e)(r(t))}})(r(t.value0))(t.value1)}}})},U=function(n){return function(e){return new o.Eq(function(r){return function(t){return o.eq(e)(r.value0)(t.value0)&&o.eq1(n)(e)(r.value1)(t.value1)}})}},G=function(n){return function(e){return new d.Ord(function(){return U(n.Eq10())(e.Eq0())},function(r){return function(t){var u=d.compare(e)(r.value0)(t.value0);return u instanceof p.LT?p.LT.value:u instanceof p.GT?p.GT.value:d.compare1(n)(e)(r.value1)(t.value1)}})}},L=function(n){return new o.Eq1(function(e){return o.eq(U(n)(e))})},P=function(n){return new d.Ord1(function(){return L(n.Eq10())},function(e){return d.compare(G(n)(e))})};module.exports={NonEmpty:w,singleton:F,foldl1:T,fromNonEmpty:A,oneOf:D,head:I,tail:E,showNonEmpty:N,eqNonEmpty:U,eq1NonEmpty:L,ordNonEmpty:G,ord1NonEmpty:P,functorNonEmpty:W,functorWithIndex:g,foldableNonEmpty:C,foldableWithIndexNonEmpty:S,traversableNonEmpty:J,traversableWithIndexNonEmpty:M,foldable1NonEmpty:O,unfoldable1NonEmpty:j};
-},{"../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Control.Plus/index.js":"oMBg","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Semigroup.Foldable/index.js":"ht+A","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unfoldable1/index.js":"S0Nl"}],"Xxuc":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),e=require("../Control.Alternative/index.js"),t=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),i=require("../Control.Category/index.js"),o=require("../Control.Comonad/index.js"),a=require("../Control.Extend/index.js"),l=require("../Control.Monad/index.js"),c=require("../Control.MonadPlus/index.js"),f=require("../Control.MonadZero/index.js"),v=require("../Control.Plus/index.js"),s=require("../Data.Eq/index.js"),d=require("../Data.Foldable/index.js"),p=require("../Data.FoldableWithIndex/index.js"),m=require("../Data.Function/index.js"),w=require("../Data.Functor/index.js"),y=require("../Data.FunctorWithIndex/index.js"),x=require("../Data.Maybe/index.js"),E=require("../Data.Monoid/index.js"),L=require("../Data.Newtype/index.js"),h=require("../Data.NonEmpty/index.js"),N=require("../Data.Ord/index.js"),b=require("../Data.Ordering/index.js"),q=require("../Data.Semigroup/index.js"),j=require("../Data.Semigroup.Traversable/index.js"),I=require("../Data.Semiring/index.js"),D=require("../Data.Show/index.js"),W=require("../Data.Traversable/index.js"),F=require("../Data.TraversableWithIndex/index.js"),T=require("../Data.Tuple/index.js"),g=require("../Data.Unfoldable/index.js"),C=require("../Data.Unfoldable1/index.js"),A=function(){function n(){}return n.value=new n,n}(),M=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),S=function(n){return n},P=function(n){return new M(n.value0,n.value1)},O=new L.Newtype(function(n){return n},S),U=function(n){return function(e){return new h.NonEmpty(n,new M(e.value0,e.value1))}},B=function(n){var e;return e=A.value,function(t){var r,u=e,i=!1;function o(e,r){return r instanceof M&&r.value1 instanceof M&&r.value1.value1 instanceof M?(u=new M(r,e),void(t=r.value1.value1.value1)):(i=!0,(a=e,function(e){for(var t,r,u,i=a,o=!1;!o;)u=e,t=(r=i)instanceof M&&r.value0 instanceof M&&r.value0.value1 instanceof M&&r.value0.value1.value1 instanceof M?(i=r.value1,void(e=new M(n(r.value0.value0),new M(n(r.value0.value1.value0),new M(n(r.value0.value1.value1.value0),u))))):(o=!0,u);return t})((o=r)instanceof M&&o.value1 instanceof M&&o.value1.value1 instanceof A?new M(n(o.value0),new M(n(o.value1.value0),A.value)):o instanceof M&&o.value1 instanceof A?new M(n(o.value0),A.value):A.value));var o,a}for(;!i;)r=o(u,t);return r}},Z=new w.Functor(B),J=h.functorNonEmpty(Z),Q=new d.Foldable(function(n){return function(e){return d.foldl(Q)(function(t){var r=q.append(n.Semigroup0())(t);return function(n){return r(e(n))}})(E.mempty(n))}},function(n){return function(e){return function(t){var r,u=e,i=!1;function o(e,r){if(r instanceof A)return i=!0,e;if(r instanceof M)return u=n(e)(r.value0),void(t=r.value1);throw new Error("Failed pattern match at Data.List.Types (line 109, column 12 - line 111, column 30): "+[r.constructor.name])}for(;!i;)r=o(u,t);return r}}},function(n){return function(e){var t=d.foldl(Q)(m.flip(M.create))(A.value),r=d.foldl(Q)(m.flip(n))(e);return function(n){return r(t(n))}}}),G=h.foldableNonEmpty(Q),k=new p.FoldableWithIndex(function(){return Q},function(n){return function(e){return p.foldlWithIndex(k)(function(t){return function(r){var u=q.append(n.Semigroup0())(r),i=e(t);return function(n){return u(i(n))}}})(E.mempty(n))}},function(n){return function(e){var t=d.foldl(Q)(function(e){return function(t){return new T.Tuple(e.value0+1|0,n(e.value0)(e.value1)(t))}})(new T.Tuple(0,e));return function(n){return T.snd(t(n))}}},function(n){return function(e){return function(t){var r=d.foldl(Q)(function(n){return function(e){return new T.Tuple(n.value0+1|0,new M(e,n.value1))}})(new T.Tuple(0,A.value))(t);return T.snd(d.foldl(Q)(function(e){return function(t){return new T.Tuple(e.value0-1|0,n(e.value0-1|0)(t)(e.value1))}})(new T.Tuple(r.value0,e))(r.value1))}}}),z=new p.FoldableWithIndex(function(){return G},function(n){return function(e){return function(t){return p.foldMapWithIndex(h.foldableWithIndexNonEmpty(k))(n)((r=x.maybe(0)(I.add(I.semiringInt)(1)),function(n){return e(r(n))}))(t);var r}}},function(n){return function(e){return function(t){return p.foldlWithIndex(h.foldableWithIndexNonEmpty(k))((r=x.maybe(0)(I.add(I.semiringInt)(1)),function(e){return n(r(e))}))(e)(t);var r}}},function(n){return function(e){return function(t){return p.foldrWithIndex(h.foldableWithIndexNonEmpty(k))((r=x.maybe(0)(I.add(I.semiringInt)(1)),function(e){return n(r(e))}))(e)(t);var r}}}),H=new y.FunctorWithIndex(function(){return Z},function(n){return p.foldrWithIndex(k)(function(e){return function(t){return function(r){return new M(n(e)(t),r)}}})(A.value)}),K=new y.FunctorWithIndex(function(){return J},function(n){return function(e){return S(y.mapWithIndex(h.functorWithIndex(H))((t=x.maybe(0)(I.add(I.semiringInt)(1)),function(e){return n(t(e))}))(e));var t}}),R=new q.Semigroup(function(n){return function(e){return d.foldr(Q)(M.create)(e)(n)}}),V=new E.Monoid(function(){return R},A.value),X=new q.Semigroup(function(n){return function(e){return new h.NonEmpty(n.value0,q.append(R)(n.value1)(P(e)))}}),Y=function(n){return new D.Show(function(e){return e instanceof A?"Nil":"("+d.intercalate(Q)(E.monoidString)(" : ")(w.map(Z)(D.show(n))(e))+" : Nil)"})},$=function(n){return new D.Show(function(e){return"(NonEmptyList "+D.show(h.showNonEmpty(n)(Y(n)))(e)+")"})},_=new W.Traversable(function(){return Q},function(){return Z},function(n){return W.traverse(_)(n)(i.identity(i.categoryFn))},function(n){return function(e){var u=w.map(n.Apply0().Functor0())(d.foldl(Q)(m.flip(M.create))(A.value)),i=d.foldl(Q)(function(t){var u=r.lift2(n.Apply0())(m.flip(M.create))(t);return function(n){return u(e(n))}})(t.pure(n)(A.value));return function(n){return u(i(n))}}}),nn=h.traversableNonEmpty(_),en=new F.TraversableWithIndex(function(){return k},function(){return H},function(){return _},function(n){return function(e){var u=d.foldl(Q)(m.flip(M.create))(A.value),i=w.map(n.Apply0().Functor0())(u),o=p.foldlWithIndex(k)(function(t){return function(u){var i=r.lift2(n.Apply0())(m.flip(M.create))(u),o=e(t);return function(n){return i(o(n))}}})(t.pure(n)(A.value));return function(n){return i(o(n))}}}),tn=new F.TraversableWithIndex(function(){return z},function(){return K},function(){return nn},function(n){return function(e){return function(t){return w.map(n.Apply0().Functor0())(S)(F.traverseWithIndex(h.traversableWithIndexNonEmpty(en))(n)((r=x.maybe(0)(I.add(I.semiringInt)(1)),function(n){return e(r(n))}))(t));var r}}}),rn=new C.Unfoldable1(function(n){return function(e){var t;return(t=e,function(e){var r,u=t,i=!1;function o(t,r){var o=n(t);if(o.value1 instanceof x.Just)return u=o.value1.value0,void(e=new M(o.value0,r));if(o.value1 instanceof x.Nothing)return i=!0,d.foldl(Q)(m.flip(M.create))(A.value)(new M(o.value0,r));throw new Error("Failed pattern match at Data.List.Types (line 133, column 22 - line 135, column 61): "+[o.constructor.name])}for(;!i;)r=o(u,e);return r})(A.value)}}),un=new g.Unfoldable(function(){return rn},function(n){return function(e){var t;return(t=e,function(e){var r,u=t,i=!1;function o(t,r){var o=n(t);if(o instanceof x.Nothing)return i=!0,d.foldl(Q)(m.flip(M.create))(A.value)(r);if(o instanceof x.Just)return u=o.value0.value1,void(e=new M(o.value0.value0,r));throw new Error("Failed pattern match at Data.List.Types (line 140, column 22 - line 142, column 52): "+[o.constructor.name])}for(;!i;)r=o(u,e);return r})(A.value)}}),on=h.unfoldable1NonEmpty(un),an=h.foldable1NonEmpty(Q),ln=new a.Extend(function(){return J},function(n){return function(e){return new h.NonEmpty(n(e),d.foldr(Q)(function(e){return function(t){return{val:new M(n(new h.NonEmpty(e,t.acc)),t.val),acc:new M(e,t.acc)}}})({val:A.value,acc:A.value})(e.value1).val)}}),cn=new a.Extend(function(){return Z},function(n){return function(e){if(e instanceof A)return A.value;if(e instanceof M){return new M(n(e),d.foldr(Q)(function(e){return function(t){var r=new M(e,t.acc);return{val:new M(n(r),t.val),acc:r}}})({val:A.value,acc:A.value})(e.value1).val)}throw new Error("Failed pattern match at Data.List.Types (line 180, column 1 - line 187, column 42): "+[n.constructor.name,e.constructor.name])}}),fn=new s.Eq1(function(n){return function(e){return function(t){var r;return(r=e,function(e){return function(t){for(var u,i,o,a,l=r,c=e,f=!1;!f;)i=l,o=c,u=(a=t)?i instanceof A&&o instanceof A?(f=!0,a):i instanceof M&&o instanceof M?(l=i.value1,c=o.value1,void(t=a&&s.eq(n)(o.value0)(i.value0))):(f=!0,!1):(f=!0,!1);return u}})(t)(!0)}}}),vn=function(n){return new s.Eq(s.eq1(fn)(n))},sn=function(n){return h.eqNonEmpty(fn)(n)},dn=new N.Ord1(function(){return fn},function(n){return function(e){return function(t){var r;return(r=e,function(e){var t,u=r,i=!1;function o(t,r){if(t instanceof A&&r instanceof A)return i=!0,b.EQ.value;if(t instanceof A)return i=!0,b.LT.value;if(r instanceof A)return i=!0,b.GT.value;if(t instanceof M&&r instanceof M){var o=N.compare(n)(t.value0)(r.value0);return o instanceof b.EQ?(u=t.value1,void(e=r.value1)):(i=!0,o)}throw new Error("Failed pattern match at Data.List.Types (line 61, column 5 - line 61, column 20): "+[t.constructor.name,r.constructor.name])}for(;!i;)t=o(u,e);return t})(t)}}}),pn=function(n){return new N.Ord(function(){return vn(n.Eq0())},N.compare1(dn)(n))},mn=function(n){return h.ordNonEmpty(dn)(n)},wn=new o.Comonad(function(){return ln},function(n){return n.value0}),yn=new r.Apply(function(){return Z},function(n){return function(e){if(n instanceof A)return A.value;if(n instanceof M)return q.append(R)(w.map(Z)(n.value0)(e))(r.apply(yn)(n.value1)(e));throw new Error("Failed pattern match at Data.List.Types (line 155, column 1 - line 157, column 48): "+[n.constructor.name,e.constructor.name])}}),xn=new r.Apply(function(){return J},function(n){return function(e){return new h.NonEmpty(n.value0(e.value0),q.append(R)(r.apply(yn)(n.value1)(new M(e.value0,A.value)))(r.apply(yn)(new M(n.value0,n.value1))(e.value1)))}}),En=new u.Bind(function(){return yn},function(n){return function(e){if(n instanceof A)return A.value;if(n instanceof M)return q.append(R)(e(n.value0))(u.bind(En)(n.value1)(e));throw new Error("Failed pattern match at Data.List.Types (line 162, column 1 - line 164, column 37): "+[n.constructor.name,e.constructor.name])}}),Ln=new u.Bind(function(){return xn},function(n){return function(e){var t=e(n.value0);return new h.NonEmpty(t.value0,q.append(R)(t.value1)(u.bind(En)(n.value1)(function(n){return P(e(n))})))}}),hn=new t.Applicative(function(){return yn},function(n){return new M(n,A.value)}),Nn=new l.Monad(function(){return hn},function(){return En}),bn=new n.Alt(function(){return J},q.append(X)),qn=new n.Alt(function(){return Z},q.append(R)),jn=new v.Plus(function(){return qn},A.value),In=new e.Alternative(function(){return hn},function(){return jn}),Dn=new f.MonadZero(function(){return In},function(){return Nn}),Wn=new c.MonadPlus(function(){return Dn}),Fn=new t.Applicative(function(){return xn},function(){var n=h.singleton(jn);return function(e){return S(n(e))}}()),Tn=new l.Monad(function(){return Fn},function(){return Ln}),gn=new j.Traversable1(function(){return an},function(){return nn},function(n){return j.traverse1(gn)(n)(i.identity(i.categoryFn))},function(n){return function(e){return function(u){return w.mapFlipped(n.Functor0())(d.foldl(Q)(function(t){var u=r.lift2(n)(m.flip(U))(t);return function(n){return u(e(n))}})(w.map(n.Functor0())(t.pure(Fn))(e(u.value0)))(u.value1))(function(n){return d.foldl(Q)(m.flip(U))(t.pure(Fn)(n.value0))(n.value1)})}}});module.exports={Nil:A,Cons:M,NonEmptyList:S,toList:P,nelCons:U,showList:Y,eqList:vn,eq1List:fn,ordList:pn,ord1List:dn,semigroupList:R,monoidList:V,functorList:Z,functorWithIndexList:H,foldableList:Q,foldableWithIndexList:k,unfoldable1List:rn,unfoldableList:un,traversableList:_,traversableWithIndexList:en,applyList:yn,applicativeList:hn,bindList:En,monadList:Nn,altList:qn,plusList:jn,alternativeList:In,monadZeroList:Dn,monadPlusList:Wn,extendList:cn,newtypeNonEmptyList:O,eqNonEmptyList:sn,ordNonEmptyList:mn,showNonEmptyList:$,functorNonEmptyList:J,applyNonEmptyList:xn,applicativeNonEmptyList:Fn,bindNonEmptyList:Ln,monadNonEmptyList:Tn,altNonEmptyList:bn,extendNonEmptyList:ln,comonadNonEmptyList:wn,semigroupNonEmptyList:X,foldableNonEmptyList:G,traversableNonEmptyList:nn,foldable1NonEmptyList:an,unfoldable1NonEmptyList:on,functorWithIndexNonEmptyList:K,foldableWithIndexNonEmptyList:z,traversableWithIndexNonEmptyList:tn,traversable1NonEmptyList:gn};
-},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Comonad/index.js":"U0zO","../Control.Extend/index.js":"JIoJ","../Control.Monad/index.js":"U/Ix","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.NonEmpty/index.js":"qF8i","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Semigroup.Traversable/index.js":"qkfi","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unfoldable1/index.js":"S0Nl"}],"ezw6":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),e=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),r=require("../Control.Bind/index.js"),u=require("../Control.Category/index.js"),o=require("../Control.Lazy/index.js"),i=require("../Control.Monad.Rec.Class/index.js"),a=require("../Data.Bifunctor/index.js"),c=require("../Data.Boolean/index.js"),l=require("../Data.Eq/index.js"),f=require("../Data.Foldable/index.js"),s=require("../Data.Function/index.js"),v=require("../Data.Functor/index.js"),m=require("../Data.FunctorWithIndex/index.js"),d=require("../Data.HeytingAlgebra/index.js"),w=require("../Data.List.Types/index.js"),p=require("../Data.Maybe/index.js"),C=require("../Data.Newtype/index.js"),h=require("../Data.NonEmpty/index.js"),N=require("../Data.Ord/index.js"),q=require("../Data.Ordering/index.js"),y=require("../Data.Semigroup/index.js"),D=require("../Data.Show/index.js"),L=require("../Data.Traversable/index.js"),b=require("../Data.Tuple/index.js"),x=require("../Data.Unfoldable/index.js"),F=require("../Data.Unit/index.js"),g=function(n){return n},E=function n(e){return function(t){return function(r){return 0===e&&r instanceof w.Cons?new p.Just(new w.Cons(t,r.value1)):r instanceof w.Cons?v.map(p.functorMaybe)(function(n){return new w.Cons(r.value0,n)})(n(e-1|0)(t)(r.value1)):p.Nothing.value}}},j=f.foldr(w.foldableList)(function(n){return function(e){return new b.Tuple(new w.Cons(n.value0,e.value0),new w.Cons(n.value1,e.value1))}})(new b.Tuple(w.Nil.value,w.Nil.value)),A=function(n){if(n instanceof w.Nil)return p.Nothing.value;if(n instanceof w.Cons)return new p.Just({head:n.value0,tail:n.value1});throw new Error("Failed pattern match at Data.List (line 259, column 1 - line 259, column 66): "+[n.constructor.name])},M=function(n){return x.unfoldr(n)(function(n){return v.map(p.functorMaybe)(function(n){return new b.Tuple(n.head,n.tail)})(A(n))})},J=function(n){if(n instanceof w.Nil)return p.Nothing.value;if(n instanceof w.Cons)return new p.Just(n.value1);throw new Error("Failed pattern match at Data.List (line 245, column 1 - line 245, column 43): "+[n.constructor.name])},B=function(n){return function(e){return function(t){return i.tailRecM2(i.monadRecMaybe)(function(e){return function(t){return e instanceof w.Cons&&t instanceof w.Cons&&l.eq(n)(e.value0)(t.value0)?p.Just.create(new i.Loop({a:e.value1,b:t.value1})):e instanceof w.Nil?p.Just.create(new i.Done(t)):p.Nothing.value}})(e)(t)}}},P=function n(e){return function(t){if(t instanceof w.Cons&&e(t.value0)){var r=n(e)(t.value1);return{init:new w.Cons(t.value0,r.init),rest:r.rest}}return{init:w.Nil.value,rest:t}}},T=function(n){return function(e){return f.foldr(w.foldableList)(w.Cons.create)(new w.Cons(e,w.Nil.value))(n)}},I=function(n){return new w.Cons(n,w.Nil.value)},W=function(n){var e=function e(t){return t instanceof w.Cons&&t.value1 instanceof w.Cons?new w.Cons(function e(t){return function(r){if(t instanceof w.Cons&&r instanceof w.Cons){if(l.eq(q.eqOrdering)(n(t.value0)(r.value0))(q.GT.value))return new w.Cons(r.value0,e(t)(r.value1));if(c.otherwise)return new w.Cons(t.value0,e(t.value1)(r))}if(t instanceof w.Nil)return r;if(r instanceof w.Nil)return t;throw new Error("Failed pattern match at Data.List (line 473, column 3 - line 473, column 38): "+[t.constructor.name,r.constructor.name])}}(t.value0)(t.value1.value0),e(t.value1.value1)):t},t=function(e){if(e instanceof w.Cons&&e.value1 instanceof w.Cons){if(l.eq(q.eqOrdering)(n(e.value0)(e.value1.value0))(q.GT.value))return r(e.value1.value0)(I(e.value0))(e.value1.value1);if(c.otherwise)return u(e.value1.value0)(function(n){return new w.Cons(e.value0,n)})(e.value1.value1)}return I(e)},r=function(e){return function(r){return function(u){var o,i,a,c,f=e,s=r,v=!1;for(;!v;)i=f,a=s,o=(c=u)instanceof w.Cons&&l.eq(q.eqOrdering)(n(i)(c.value0))(q.GT.value)?(f=c.value0,s=new w.Cons(i,a),void(u=c.value1)):(v=!0,new w.Cons(new w.Cons(i,a),t(c)));return o}}},u=function(e){return function(r){return function(u){var o,i=e,a=r,c=!1;function f(e,r,o){return o instanceof w.Cons&&l.notEq(q.eqOrdering)(n(e)(o.value0))(q.GT.value)?(i=o.value0,a=function(n){return r(new w.Cons(e,n))},void(u=o.value1)):(c=!0,new w.Cons(r(I(e)),t(o)))}for(;!c;)o=f(i,a,u);return o}}};return function(n){return function(n){var t,r=!1;function u(t){if(t instanceof w.Cons&&t.value1 instanceof w.Nil)return r=!0,t.value0;n=e(t)}for(;!r;)t=u(n);return t}(t(n))}},O=function(n){return function(e){return W(N.compare(n))(e)}},R=function n(e){if(e instanceof w.Nil)return I(w.Nil.value);if(e instanceof w.Cons)return new w.Cons(e,n(e.value1));throw new Error("Failed pattern match at Data.List (line 626, column 1 - line 626, column 43): "+[e.constructor.name])},z=function(n){return new D.Show(function(e){return"(Pattern "+D.show(w.showList(n))(e)+")"})},G=function(){var n;return n=w.Nil.value,function(e){var t,r=n,u=!1;function o(n,t){if(t instanceof w.Nil)return u=!0,n;if(t instanceof w.Cons)return r=new w.Cons(t.value0,n),void(e=t.value1);throw new Error("Failed pattern match at Data.List (line 368, column 3 - line 368, column 19): "+[n.constructor.name,t.constructor.name])}for(;!u;)t=o(r,e);return t}}(),S=function(){var n;return n=w.Nil.value,function(e){return function(t){var r,u=n,o=e,i=!1;function a(n,e,r){if(e<1)return i=!0,G(n);if(r instanceof w.Nil)return i=!0,G(n);if(r instanceof w.Cons)return u=new w.Cons(r.value0,n),o=e-1|0,void(t=r.value1);throw new Error("Failed pattern match at Data.List (line 520, column 3 - line 520, column 35): "+[n.constructor.name,e.constructor.name,r.constructor.name])}for(;!i;)r=a(u,o,t);return r}}}(),k=function(n){var e;return e=w.Nil.value,function(t){for(var r,u,o,i=e,a=!1;!a;)u=i,r=(o=t)instanceof w.Cons&&n(o.value0)?(i=new w.Cons(o.value0,u),void(t=o.value1)):(a=!0,G(u));return r}},U=function(n){var e;return v.map(p.functorMaybe)(function(n){return{init:G(n.revInit),last:n.last}})((e=n,function(n){var t,r=e,u=!1;function o(e,t){if(e instanceof w.Nil)return u=!0,p.Nothing.value;if(e instanceof w.Cons&&e.value1 instanceof w.Nil)return u=!0,new p.Just({revInit:t,last:e.value0});if(e instanceof w.Cons)return r=e.value1,void(n=new w.Cons(e.value0,t));throw new Error("Failed pattern match at Data.List (line 270, column 3 - line 270, column 23): "+[e.constructor.name,t.constructor.name])}for(;!u;)t=o(r,n);return t})(w.Nil.value))},H=function(n){return function(e){return function(t){var r;return G((r=e,function(e){return function(t){var u,o=r,i=e,a=!1;function c(e,r,u){if(e instanceof w.Nil)return a=!0,u;if(r instanceof w.Nil)return a=!0,u;if(e instanceof w.Cons&&r instanceof w.Cons)return o=e.value1,i=r.value1,void(t=new w.Cons(n(e.value0)(r.value0),u));throw new Error("Failed pattern match at Data.List (line 718, column 3 - line 718, column 21): "+[e.constructor.name,r.constructor.name,u.constructor.name])}for(;!a;)u=c(o,i,t);return u}})(t)(w.Nil.value))}}},K=H(b.Tuple.create),Q=function(n){return function(e){return function(t){return function(r){return L.sequence(w.traversableList)(n)(H(e)(t)(r))}}}},V=function(n){return function(e){if(n===e)return I(n);if(c.otherwise){return(t=e,function(n){return function(e){return function(r){var u,o=t,i=n,a=e,l=!1;function f(n,e,t,u){if(n===e)return l=!0,new w.Cons(n,u);if(c.otherwise)return o=n+t|0,i=e,a=t,void(r=new w.Cons(n,u));throw new Error("Failed pattern match at Data.List (line 148, column 3 - line 149, column 65): "+[n.constructor.name,e.constructor.name,t.constructor.name,u.constructor.name])}for(;!l;)u=f(o,i,a,r);return u}}})(n)(n>e?1:-1)(w.Nil.value)}var t;throw new Error("Failed pattern match at Data.List (line 144, column 1 - line 144, column 32): "+[n.constructor.name,e.constructor.name])}},X=function(n){return function(e){return f.foldr(w.foldableList)(function(e){return function(t){return n(e)?{no:t.no,yes:new w.Cons(e,t.yes)}:{no:new w.Cons(e,t.no),yes:t.yes}}})({no:w.Nil.value,yes:w.Nil.value})(e)}},Y=function(n){return n instanceof w.Nil},Z=new C.Newtype(function(n){return n},g),$=m.mapWithIndex(w.functorWithIndexList),_=function(n){var e;return e=w.Nil.value,function(t){var r,u=e,o=!1;function i(e,r){if(r instanceof w.Nil)return o=!0,G(e);if(r instanceof w.Cons){var i=n(r.value0);if(i instanceof p.Nothing)return u=e,void(t=r.value1);if(i instanceof p.Just)return u=new w.Cons(i.value0,e),void(t=r.value1);throw new Error("Failed pattern match at Data.List (line 419, column 5 - line 421, column 32): "+[i.constructor.name])}throw new Error("Failed pattern match at Data.List (line 417, column 3 - line 417, column 27): "+[e.constructor.name,r.constructor.name])}for(;!o;)r=i(u,t);return r}},nn=function(t){return function(u){return function(o){return i.tailRecM(t)(function(c){return r.bind(t.Monad0().Bind1())(n.alt(u.Plus1().Alt0())(v.map(u.Plus1().Alt0().Functor0())(i.Loop.create)(o))(e.pure(u.Applicative0())(new i.Done(F.unit))))(function(n){return e.pure(u.Applicative0())(a.bimap(i.bifunctorStep)(function(n){return new w.Cons(n,c)})(function(n){return G(c)})(n))})})(w.Nil.value)}}},en=function(n){return function(e){return function(r){return t.apply(e.Applicative0().Apply0())(v.map(e.Plus1().Alt0().Functor0())(w.Cons.create)(r))(nn(n)(e)(r))}}},tn=function(n){return function(e){return function(r){return t.apply(n.Applicative0().Apply0())(v.map(n.Plus1().Alt0().Functor0())(w.Cons.create)(r))(o.defer(e)(function(t){return rn(n)(e)(r)}))}}},rn=function(t){return function(r){return function(u){return n.alt(t.Plus1().Alt0())(tn(t)(r)(u))(e.pure(t.Applicative0())(w.Nil.value))}}},un=f.foldl(w.foldableList)(function(n){return function(e){return n+1|0}})(0),on=function(n){var e,t,r=!1;for(;!r;)e=(t=n)instanceof w.Cons&&t.value1 instanceof w.Nil?(r=!0,new p.Just(t.value0)):t instanceof w.Cons?void(n=t.value1):(r=!0,p.Nothing.value);return e},an=function n(e){return function(t){return function(r){if(r instanceof w.Nil)return I(t);if(r instanceof w.Cons)return e(t)(r.value0)instanceof q.GT?new w.Cons(r.value0,n(e)(t)(r.value1)):new w.Cons(t,r);throw new Error("Failed pattern match at Data.List (line 216, column 1 - line 216, column 68): "+[e.constructor.name,t.constructor.name,r.constructor.name])}}},cn=function n(e){return function(t){return function(r){return 0===e?new p.Just(new w.Cons(t,r)):r instanceof w.Cons?v.map(p.functorMaybe)(function(n){return new w.Cons(r.value0,n)})(n(e-1|0)(t)(r.value1)):p.Nothing.value}}},ln=function(n){return an(N.compare(n))},fn=function(n){return v.map(p.functorMaybe)(function(n){return n.init})(U(n))},sn=function(n){return function(e){var t,r=n,u=!1;function o(n,t){if(n instanceof w.Nil)return u=!0,p.Nothing.value;if(n instanceof w.Cons&&0===t)return u=!0,new p.Just(n.value0);if(n instanceof w.Cons)return r=n.value1,void(e=t-1|0);throw new Error("Failed pattern match at Data.List (line 281, column 1 - line 281, column 44): "+[n.constructor.name,t.constructor.name])}for(;!u;)t=o(r,e);return t}},vn=function(n){if(n instanceof w.Nil)return p.Nothing.value;if(n instanceof w.Cons)return new p.Just(n.value0);throw new Error("Failed pattern match at Data.List (line 230, column 1 - line 230, column 22): "+[n.constructor.name])},mn=function n(e){if(e instanceof w.Nil)return w.Nil.value;if(e instanceof w.Cons&&e.value0 instanceof w.Nil)return n(e.value1);if(e instanceof w.Cons&&e.value0 instanceof w.Cons)return new w.Cons(new w.Cons(e.value0.value0,_(vn)(e.value1)),n(new w.Cons(e.value0.value1,_(J)(e.value1))));throw new Error("Failed pattern match at Data.List (line 752, column 1 - line 752, column 54): "+[e.constructor.name])},dn=function n(e){return function(t){if(t instanceof w.Nil)return w.Nil.value;if(t instanceof w.Cons){var r=P(e(t.value0))(t.value1);return new w.Cons(new h.NonEmpty(t.value0,r.init),n(e)(r.rest))}throw new Error("Failed pattern match at Data.List (line 605, column 1 - line 605, column 80): "+[e.constructor.name,t.constructor.name])}},wn=function(n){return dn(l.eq(n))},pn=function(n){var e=wn(n.Eq0()),t=O(n);return function(n){return e(t(n))}},Cn=function(n){return f.foldr(n)(w.Cons.create)(w.Nil.value)},hn=function n(t){return function(u){return function(o){return function(i){if(i instanceof w.Nil)return e.pure(t.Applicative0())(o);if(i instanceof w.Cons)return r.bind(t.Bind1())(u(o)(i.value0))(function(e){return n(t)(u)(e)(i.value1)});throw new Error("Failed pattern match at Data.List (line 763, column 1 - line 763, column 72): "+[u.constructor.name,o.constructor.name,i.constructor.name])}}}},Nn=function(n){var e;return e=0,function(t){var r,u=e,o=!1;function i(e,r){if(r instanceof w.Cons){if(n(r.value0))return o=!0,new p.Just(e);if(c.otherwise)return u=e+1|0,void(t=r.value1)}if(r instanceof w.Nil)return o=!0,p.Nothing.value;throw new Error("Failed pattern match at Data.List (line 301, column 3 - line 301, column 35): "+[e.constructor.name,r.constructor.name])}for(;!o;)r=i(u,t);return r}},qn=function(n){return function(e){return v.map(p.functorMaybe)(function(n){return(un(e)-1|0)-n|0})(Nn(n)(G(e)))}},yn=function n(t){return function(u){return function(o){if(o instanceof w.Nil)return e.pure(t.Applicative0())(w.Nil.value);if(o instanceof w.Cons)return r.bind(t.Bind1())(u(o.value0))(function(i){return r.bind(t.Bind1())(n(t)(u)(o.value1))(function(n){return e.pure(t.Applicative0())(i?new w.Cons(o.value0,n):n)})});throw new Error("Failed pattern match at Data.List (line 403, column 1 - line 403, column 75): "+[u.constructor.name,o.constructor.name])}}},Dn=function(n){var e;return e=w.Nil.value,function(t){var r,u=e,o=!1;function i(e,r){if(r instanceof w.Nil)return o=!0,G(e);if(r instanceof w.Cons){if(n(r.value0))return u=new w.Cons(r.value0,e),void(t=r.value1);if(c.otherwise)return u=e,void(t=r.value1)}throw new Error("Failed pattern match at Data.List (line 390, column 3 - line 390, column 27): "+[e.constructor.name,r.constructor.name])}for(;!o;)r=i(u,t);return r}},Ln=function(n){return function(e){return function(t){return e instanceof w.Nil?w.Nil.value:t instanceof w.Nil?w.Nil.value:Dn(function(e){return f.any(w.foldableList)(d.heytingAlgebraBoolean)(n(e))(t)})(e)}}},bn=function(n){return Ln(l.eq(n))},xn=function n(e){return function(t){if(t instanceof w.Nil)return w.Nil.value;if(t instanceof w.Cons)return new w.Cons(t.value0,n(e)(Dn(function(n){return!e(t.value0)(n)})(t.value1)));throw new Error("Failed pattern match at Data.List (line 644, column 1 - line 644, column 59): "+[e.constructor.name,t.constructor.name])}},Fn=function(n){return xn(l.eq(n))},gn=function(n){return new l.Eq(function(e){return function(t){return l.eq(w.eqList(n))(e)(t)}})},En=function(n){return new N.Ord(function(){return gn(n.Eq0())},function(e){return function(t){return N.compare(w.ordList(n))(e)(t)}})},jn=function(n){return function(e){return qn(function(t){return l.eq(n)(t)(e)})}},An=function(n){return function(e){return Nn(function(t){return l.eq(n)(t)(e)})}},Mn=function(n){return function(e){var t,r=!1;function u(t){if(!(t instanceof w.Cons&&n(t.value0)))return r=!0,t;e=t.value1}for(;!r;)t=u(e);return t}},Jn=function(n){return function(e){return S(un(e)-n|0)(e)}},Bn=function(n){return function(e){var t,r=n,u=!1;function o(n,t){if(n<1)return u=!0,t;if(t instanceof w.Nil)return u=!0,w.Nil.value;if(t instanceof w.Cons)return r=n-1|0,void(e=t.value1);throw new Error("Failed pattern match at Data.List (line 543, column 1 - line 543, column 42): "+[n.constructor.name,t.constructor.name])}for(;!u;)t=o(r,e);return t}},Pn=function(n){return function(e){return function(t){return S(e-n|0)(Bn(n)(t))}}},Tn=function(n){return function(e){return Bn(un(e)-n|0)(e)}},In=function n(e){return function(t){return function(r){if(r instanceof w.Nil)return w.Nil.value;if(r instanceof w.Cons&&e(t)(r.value0))return r.value1;if(r instanceof w.Cons)return new w.Cons(r.value0,n(e)(t)(r.value1));throw new Error("Failed pattern match at Data.List (line 671, column 1 - line 671, column 67): "+[e.constructor.name,t.constructor.name,r.constructor.name])}}},Wn=function(n){return function(e){return function(t){return y.append(w.semigroupList)(e)(f.foldl(w.foldableList)(s.flip(In(n)))(xn(n)(t))(e))}}},On=function(n){return Wn(l.eq(n))},Rn=function n(e){return function(t){return 0===e&&t instanceof w.Cons?new p.Just(t.value1):t instanceof w.Cons?v.map(p.functorMaybe)(function(n){return new w.Cons(t.value0,n)})(n(e-1|0)(t.value1)):p.Nothing.value}},zn=function(n){return In(l.eq(n))},Gn=function(n){return f.foldl(w.foldableList)(s.flip(zn(n)))},Sn=s.flip(r.bind(w.bindList)),kn=function(n){return r.bind(w.bindList)(n)(u.identity(u.categoryFn))},Un=_(u.identity(u.categoryFn)),Hn=function n(e){return function(t){return function(r){return 0===e&&r instanceof w.Cons?p.Just.create(function(){var n=t(r.value0);if(n instanceof p.Nothing)return r.value1;if(n instanceof p.Just)return new w.Cons(n.value0,r.value1);throw new Error("Failed pattern match at Data.List (line 352, column 3 - line 354, column 23): "+[n.constructor.name])}()):r instanceof w.Cons?v.map(p.functorMaybe)(function(n){return new w.Cons(r.value0,n)})(n(e-1|0)(t)(r.value1)):p.Nothing.value}}},Kn=function(n){return function(e){return Hn(n)(function(n){return p.Just.create(e(n))})}};module.exports={toUnfoldable:M,fromFoldable:Cn,singleton:I,range:V,some:tn,someRec:en,many:rn,manyRec:nn,null:Y,length:un,snoc:T,insert:ln,insertBy:an,head:vn,last:on,tail:J,init:fn,uncons:A,unsnoc:U,index:sn,elemIndex:An,elemLastIndex:jn,findIndex:Nn,findLastIndex:qn,insertAt:cn,deleteAt:Rn,updateAt:E,modifyAt:Kn,alterAt:Hn,reverse:G,concat:kn,concatMap:Sn,filter:Dn,filterM:yn,mapMaybe:_,catMaybes:Un,mapWithIndex:$,sort:O,sortBy:W,Pattern:g,stripPrefix:B,slice:Pn,take:S,takeEnd:Tn,takeWhile:k,drop:Bn,dropEnd:Jn,dropWhile:Mn,span:P,group:wn,"group'":pn,groupBy:dn,partition:X,nub:Fn,nubBy:xn,union:On,unionBy:Wn,delete:zn,deleteBy:In,difference:Gn,intersect:bn,intersectBy:Ln,zipWith:H,zipWithA:Q,zip:K,unzip:j,transpose:mn,foldM:hn,eqPattern:gn,ordPattern:En,newtypePattern:Z,showPattern:z};
-},{"../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Lazy/index.js":"y9cE","../Control.Monad.Rec.Class/index.js":"UVIy","../Data.Bifunctor/index.js":"e2Wc","../Data.Boolean/index.js":"ObQr","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.HeytingAlgebra/index.js":"paZe","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.NonEmpty/index.js":"qF8i","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unit/index.js":"NhVk"}],"9xeJ":[function(require,module,exports) {
-"use strict";exports.defer=function(r){var n=null;return function(){return void 0===r?n:(n=r(),r=void 0,n)}},exports.force=function(r){return r()};
-},{}],"aRUE":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),u=require("../Control.Comonad/index.js"),i=require("../Control.Extend/index.js"),o=require("../Control.Lazy/index.js"),f=require("../Control.Monad/index.js"),c=require("../Data.BooleanAlgebra/index.js"),a=require("../Data.Bounded/index.js"),d=require("../Data.CommutativeRing/index.js"),l=require("../Data.Eq/index.js"),s=require("../Data.EuclideanRing/index.js"),p=require("../Data.Foldable/index.js"),y=require("../Data.FoldableWithIndex/index.js"),x=require("../Data.Function/index.js"),m=require("../Data.Functor/index.js"),q=require("../Data.Functor.Invariant/index.js"),g=require("../Data.FunctorWithIndex/index.js"),w=require("../Data.HeytingAlgebra/index.js"),z=require("../Data.Monoid/index.js"),j=require("../Data.Ord/index.js"),L=require("../Data.Ring/index.js"),b=require("../Data.Semigroup/index.js"),D=require("../Data.Semigroup.Foldable/index.js"),v=require("../Data.Semigroup.Traversable/index.js"),F=require("../Data.Semiring/index.js"),h=require("../Data.Show/index.js"),A=require("../Data.Traversable/index.js"),C=require("../Data.TraversableWithIndex/index.js"),I=require("../Data.Unit/index.js"),R=function(r){return new h.Show(function(e){return"(defer \\_ -> "+h.show(r)(n.force(e))+")"})},S=function(r){return new F.Semiring(function(e){return function(t){return n.defer(function(u){return F.add(r)(n.force(e))(n.force(t))})}},function(e){return function(t){return n.defer(function(u){return F.mul(r)(n.force(e))(n.force(t))})}},n.defer(function(n){return F.one(r)}),n.defer(function(n){return F.zero(r)}))},W=function(r){return new b.Semigroup(function(e){return function(t){return n.defer(function(u){return b.append(r)(n.force(e))(n.force(t))})}})},E=function(r){return new L.Ring(function(){return S(r.Semiring0())},function(e){return function(t){return n.defer(function(u){return L.sub(r)(n.force(e))(n.force(t))})}})},B=function(r){return new z.Monoid(function(){return W(r.Semigroup0())},n.defer(function(n){return z.mempty(r)}))},T=new o.Lazy(function(r){return n.defer(function(e){return n.force(r(I.unit))})}),M=new m.Functor(function(r){return function(e){return n.defer(function(t){return r(n.force(e))})}}),O=new g.FunctorWithIndex(function(){return M},function(n){return m.map(M)(n(I.unit))}),H=new q.Invariant(q.imapF(M)),U=new p.Foldable(function(r){return function(r){return function(e){return r(n.force(e))}}},function(r){return function(e){return function(t){return r(e)(n.force(t))}}},function(r){return function(e){return function(t){return r(n.force(t))(e)}}}),_=new y.FoldableWithIndex(function(){return U},function(n){return function(r){return p.foldMap(U)(n)(r(I.unit))}},function(n){return p.foldl(U)(n(I.unit))},function(n){return p.foldr(U)(n(I.unit))}),k=new A.Traversable(function(){return U},function(){return M},function(r){return function(e){return m.map(r.Apply0().Functor0())(function(r){return n.defer(x.const(r))})(n.force(e))}},function(r){return function(e){return function(t){return m.map(r.Apply0().Functor0())(function(r){return n.defer(x.const(r))})(e(n.force(t)))}}}),G=new C.TraversableWithIndex(function(){return _},function(){return O},function(){return k},function(n){return function(r){return A.traverse(k)(n)(r(I.unit))}}),J=new D.Foldable1(function(){return U},function(n){return D.fold1Default(J)(n)},function(r){return function(r){return function(e){return r(n.force(e))}}}),K=new v.Traversable1(function(){return J},function(){return k},function(r){return function(e){return m.map(r.Functor0())(function(r){return n.defer(x.const(r))})(n.force(e))}},function(r){return function(e){return function(t){return m.map(r.Functor0())(function(r){return n.defer(x.const(r))})(e(n.force(t)))}}}),N=new i.Extend(function(){return M},function(r){return function(e){return n.defer(function(n){return r(e)})}}),P=function(r){return new l.Eq(function(e){return function(t){return l.eq(r)(n.force(e))(n.force(t))}})},Q=function(r){return new j.Ord(function(){return P(r.Eq0())},function(e){return function(t){return j.compare(r)(n.force(e))(n.force(t))}})},V=new l.Eq1(function(n){return l.eq(P(n))}),X=new j.Ord1(function(){return V},function(n){return j.compare(Q(n))}),Y=new u.Comonad(function(){return N},n.force),Z=function(n){return new d.CommutativeRing(function(){return E(n.Ring0())})},$=function(r){return new s.EuclideanRing(function(){return Z(r.CommutativeRing0())},(e=s.degree(r),function(r){return e(n.force(r))}),function(e){return function(t){return n.defer(function(u){return s.div(r)(n.force(e))(n.force(t))})}},function(e){return function(t){return n.defer(function(u){return s.mod(r)(n.force(e))(n.force(t))})}});var e},nn=function(r){return new a.Bounded(function(){return Q(r.Ord0())},n.defer(function(n){return a.bottom(r)}),n.defer(function(n){return a.top(r)}))},rn=new e.Apply(function(){return M},function(r){return function(e){return n.defer(function(t){return n.force(r)(n.force(e))})}}),en=new t.Bind(function(){return rn},function(r){return function(e){return n.defer(function(t){return n.force(e(n.force(r)))})}}),tn=function(r){return new w.HeytingAlgebra(function(n){return function(t){return e.apply(rn)(m.map(M)(w.conj(r))(n))(t)}},function(n){return function(t){return e.apply(rn)(m.map(M)(w.disj(r))(n))(t)}},n.defer(function(n){return w.ff(r)}),function(n){return function(t){return e.apply(rn)(m.map(M)(w.implies(r))(n))(t)}},function(n){return m.map(M)(w.not(r))(n)},n.defer(function(n){return w.tt(r)}))},un=function(n){return new c.BooleanAlgebra(function(){return tn(n.HeytingAlgebra0())})},on=new r.Applicative(function(){return rn},function(r){return n.defer(function(n){return r})}),fn=new f.Monad(function(){return on},function(){return en});module.exports={semiringLazy:S,ringLazy:E,commutativeRingLazy:Z,euclideanRingLazy:$,eqLazy:P,eq1Lazy:V,ordLazy:Q,ord1Lazy:X,boundedLazy:nn,semigroupLazy:W,monoidLazy:B,heytingAlgebraLazy:tn,booleanAlgebraLazy:un,functorLazy:M,functorWithIndexLazy:O,foldableLazy:U,foldableWithIndexLazy:_,foldable1Lazy:J,traversableLazy:k,traversableWithIndexLazy:G,traversable1Lazy:K,invariantLazy:H,applyLazy:rn,applicativeLazy:on,bindLazy:en,monadLazy:fn,extendLazy:N,comonadLazy:Y,showLazy:R,lazyLazy:T,defer:n.defer,force:n.force};
-},{"./foreign.js":"9xeJ","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Comonad/index.js":"U0zO","../Control.Extend/index.js":"JIoJ","../Control.Lazy/index.js":"y9cE","../Control.Monad/index.js":"U/Ix","../Data.BooleanAlgebra/index.js":"e7y+","../Data.Bounded/index.js":"kcUU","../Data.CommutativeRing/index.js":"60TQ","../Data.Eq/index.js":"Pq4F","../Data.EuclideanRing/index.js":"2IRB","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Functor.Invariant/index.js":"AXkC","../Data.FunctorWithIndex/index.js":"OHRN","../Data.HeytingAlgebra/index.js":"paZe","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Ring/index.js":"E2qH","../Data.Semigroup/index.js":"EsAJ","../Data.Semigroup.Foldable/index.js":"ht+A","../Data.Semigroup.Traversable/index.js":"qkfi","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Unit/index.js":"NhVk"}],"EJF+":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),t=require("../Control.Alternative/index.js"),e=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),o=require("../Control.Category/index.js"),i=require("../Control.Comonad/index.js"),a=require("../Control.Extend/index.js"),c=require("../Control.Lazy/index.js"),f=require("../Control.Monad/index.js"),l=require("../Control.MonadPlus/index.js"),d=require("../Control.MonadZero/index.js"),s=require("../Control.Plus/index.js"),p=require("../Data.Eq/index.js"),v=require("../Data.Foldable/index.js"),m=require("../Data.FoldableWithIndex/index.js"),y=require("../Data.Function/index.js"),w=require("../Data.Functor/index.js"),L=require("../Data.FunctorWithIndex/index.js"),x=require("../Data.Lazy/index.js"),h=require("../Data.Maybe/index.js"),E=require("../Data.Monoid/index.js"),b=require("../Data.Newtype/index.js"),N=require("../Data.NonEmpty/index.js"),q=require("../Data.Ord/index.js"),j=require("../Data.Ordering/index.js"),I=require("../Data.Semigroup/index.js"),D=require("../Data.Semiring/index.js"),F=require("../Data.Show/index.js"),W=require("../Data.Traversable/index.js"),T=require("../Data.TraversableWithIndex/index.js"),z=require("../Data.Tuple/index.js"),g=require("../Data.Unfoldable/index.js"),A=require("../Data.Unfoldable1/index.js"),C=function(n){return n},M=function(){function n(){}return n.value=new n,n}(),S=function(){function n(n,t){this.value0=n,this.value1=t}return n.create=function(t){return function(e){return new n(t,e)}},n}(),P=function(n){return n},U=C(x.defer(function(n){return M.value})),O=new b.Newtype(function(n){return n},P),B=new b.Newtype(function(n){return n},C),Z=function(){var n=b.unwrap(B);return function(t){return x.force(n(t))}}(),J=new I.Semigroup(function(n){return function(t){return w.map(x.functorLazy)(function(n){if(n instanceof M)return Z(t);if(n instanceof S)return new S(n.value0,I.append(J)(n.value1)(t));throw new Error("Failed pattern match at Data.List.Lazy.Types (line 98, column 5 - line 98, column 21): "+[n.constructor.name])})(b.unwrap(B)(n))}}),Q=function(n){return new F.Show(function(t){return"fromStrict ("+function t(e){if(e instanceof M)return"Nil";if(e instanceof S)return"(Cons "+F.show(n)(e.value0)+" "+t(Z(e.value1))+")";throw new Error("Failed pattern match at Data.List.Lazy.Types (line 64, column 5 - line 64, column 19): "+[e.constructor.name])}(Z(t))+")"})},G=function(n){return new F.Show(function(t){return"(NonEmptyList "+F.show(x.showLazy(N.showNonEmpty(n)(Q(n))))(t)+")"})},k=new E.Monoid(function(){return J},U),H=new c.Lazy(function(n){return C(x.defer(function(t){return Z(n(t))}))}),K=new w.Functor(function(n){return function(t){return w.map(x.functorLazy)(function(t){if(t instanceof M)return M.value;if(t instanceof S)return new S(n(t.value0),w.map(K)(n)(t.value1));throw new Error("Failed pattern match at Data.List.Lazy.Types (line 107, column 5 - line 107, column 17): "+[t.constructor.name])})(b.unwrap(B)(t))}}),R=new w.Functor(function(n){return function(t){return w.map(x.functorLazy)(w.map(N.functorNonEmpty(K))(n))(t)}}),V=new p.Eq1(function(n){return function(t){return function(e){var r;return(r=Z(t),function(t){for(var e,u,o,i=r,a=!1;!a;)o=t,e=(u=i)instanceof M&&o instanceof M?(a=!0,!0):u instanceof S&&o instanceof S&&p.eq(n)(u.value0)(o.value0)?(i=Z(u.value1),void(t=Z(o.value1))):(a=!0,!1);return e})(Z(e))}}}),X=function(n){return new p.Eq(p.eq1(V)(n))},Y=function(n){return x.eqLazy(N.eqNonEmpty(V)(n))},$=new q.Ord1(function(){return V},function(n){return function(t){return function(e){var r;return(r=Z(t),function(t){var e,u=r,o=!1;function i(e,r){if(e instanceof M&&r instanceof M)return o=!0,j.EQ.value;if(e instanceof M)return o=!0,j.LT.value;if(r instanceof M)return o=!0,j.GT.value;if(e instanceof S&&r instanceof S){var i=q.compare(n)(e.value0)(r.value0);return i instanceof j.EQ?(u=Z(e.value1),void(t=Z(r.value1))):(o=!0,i)}throw new Error("Failed pattern match at Data.List.Lazy.Types (line 84, column 5 - line 84, column 20): "+[e.constructor.name,r.constructor.name])}for(;!o;)e=i(u,t);return e})(Z(e))}}}),_=function(n){return new q.Ord(function(){return X(n.Eq0())},q.compare1($)(n))},nn=function(n){return x.ordLazy(N.ordNonEmpty($)(n))},tn=function(n){return function(t){return C(x.defer(function(e){return new S(n,t)}))}},en=new v.Foldable(function(n){return function(t){return v.foldl(en)(function(e){return function(r){return I.append(n.Semigroup0())(e)(t(r))}})(E.mempty(n))}},function(n){return function(t){return function(e){var r,u=t,o=!1;function i(t,r){var i=Z(r);if(i instanceof M)return o=!0,t;if(i instanceof S)return u=n(t)(i.value0),void(e=i.value1);throw new Error("Failed pattern match at Data.List.Lazy.Types (line 122, column 7 - line 124, column 40): "+[i.constructor.name])}for(;!o;)r=i(u,e);return r}}},function(n){return function(t){return function(e){var r=v.foldl(en)(y.flip(tn))(U);return v.foldl(en)(y.flip(n))(t)(r(e))}}}),rn=new a.Extend(function(){return K},function(n){return function(t){var e=Z(t);if(e instanceof M)return U;if(e instanceof S)return tn(n(t))(v.foldr(en)(function(t){return function(e){var r=tn(t)(e.acc);return{val:tn(n(r))(e.val),acc:r}}})({val:U,acc:U})(e.value1).val);throw new Error("Failed pattern match at Data.List.Lazy.Types (line 194, column 5 - line 197, column 55): "+[e.constructor.name])}}),un=new a.Extend(function(){return R},function(n){return function(t){var e=function(t){return function(e){return{val:tn(n(x.defer(function(n){return new N.NonEmpty(t,e.acc)})))(e.val),acc:tn(t)(e.acc)}}},r=x.force(t);return P(x.defer(function(u){return new N.NonEmpty(n(t),v.foldr(en)(e)({val:U,acc:U})(r.value1).val)}))}}),on=new v.Foldable(function(n){return function(t){return function(e){return v.foldMap(N.foldableNonEmpty(en))(n)(t)(x.force(e))}}},function(n){return function(t){return function(e){return v.foldl(N.foldableNonEmpty(en))(n)(t)(x.force(e))}}},function(n){return function(t){return function(e){return v.foldr(N.foldableNonEmpty(en))(n)(t)(x.force(e))}}}),an=new m.FoldableWithIndex(function(){return en},function(n){return function(t){return m.foldlWithIndex(an)(function(e){return function(r){var u=I.append(n.Semigroup0())(r),o=t(e);return function(n){return u(o(n))}}})(E.mempty(n))}},function(n){return function(t){var e=v.foldl(en)(function(t){return function(e){return new z.Tuple(t.value0+1|0,n(t.value0)(t.value1)(e))}})(new z.Tuple(0,t));return function(n){return z.snd(e(n))}}},function(n){return function(t){return function(e){var r=v.foldl(en)(function(n){return function(t){return new z.Tuple(n.value0+1|0,tn(t)(n.value1))}})(new z.Tuple(0,U))(e);return z.snd(v.foldl(en)(function(t){return function(e){return new z.Tuple(t.value0-1|0,n(t.value0-1|0)(e)(t.value1))}})(new z.Tuple(r.value0,t))(r.value1))}}}),cn=new m.FoldableWithIndex(function(){return on},function(n){return function(t){return function(e){return m.foldMapWithIndex(N.foldableWithIndexNonEmpty(an))(n)((r=h.maybe(0)(D.add(D.semiringInt)(1)),function(n){return t(r(n))}))(x.force(e));var r}}},function(n){return function(t){return function(e){return m.foldlWithIndex(N.foldableWithIndexNonEmpty(an))((r=h.maybe(0)(D.add(D.semiringInt)(1)),function(t){return n(r(t))}))(t)(x.force(e));var r}}},function(n){return function(t){return function(e){return m.foldrWithIndex(N.foldableWithIndexNonEmpty(an))((r=h.maybe(0)(D.add(D.semiringInt)(1)),function(t){return n(r(t))}))(t)(x.force(e));var r}}}),fn=new L.FunctorWithIndex(function(){return K},function(n){return m.foldrWithIndex(an)(function(t){return function(e){return function(r){return tn(n(t)(e))(r)}}})(U)}),ln=new L.FunctorWithIndex(function(){return R},function(n){return function(t){return P(x.defer(function(e){return L.mapWithIndex(N.functorWithIndex(fn))((r=h.maybe(0)(D.add(D.semiringInt)(1)),function(t){return n(r(t))}))(x.force(t));var r}))}}),dn=function(n){return c.defer(H)(function(t){var e=x.force(n);return tn(e.value0)(e.value1)})},sn=new I.Semigroup(function(n){return function(t){var e=x.force(n);return x.defer(function(n){return new N.NonEmpty(e.value0,I.append(J)(e.value1)(dn(t)))})}}),pn=new W.Traversable(function(){return en},function(){return K},function(n){return W.traverse(pn)(n)(o.identity(o.categoryFn))},function(n){return function(t){return v.foldr(en)(function(e){return function(u){return r.apply(n.Apply0())(w.map(n.Apply0().Functor0())(tn)(t(e)))(u)}})(e.pure(n)(U))}}),vn=new W.Traversable(function(){return on},function(){return R},function(n){return function(t){return w.map(n.Apply0().Functor0())(function(n){return P(x.defer(function(t){return n}))})(W.sequence(N.traversableNonEmpty(pn))(n)(x.force(t)))}},function(n){return function(t){return function(e){return w.map(n.Apply0().Functor0())(function(n){return P(x.defer(function(t){return n}))})(W.traverse(N.traversableNonEmpty(pn))(n)(t)(x.force(e)))}}}),mn=new T.TraversableWithIndex(function(){return an},function(){return fn},function(){return pn},function(n){return function(t){return m.foldrWithIndex(an)(function(e){return function(u){return function(o){return r.apply(n.Apply0())(w.map(n.Apply0().Functor0())(tn)(t(e)(u)))(o)}}})(e.pure(n)(U))}}),yn=new T.TraversableWithIndex(function(){return cn},function(){return ln},function(){return vn},function(n){return function(t){return function(e){return w.map(n.Apply0().Functor0())(function(n){return P(x.defer(function(t){return n}))})(T.traverseWithIndex(N.traversableWithIndexNonEmpty(mn))(n)((r=h.maybe(0)(D.add(D.semiringInt)(1)),function(n){return t(r(n))}))(x.force(e)));var r}}}),wn=new A.Unfoldable1(function n(t){return function(e){return c.defer(H)(function(r){var u=t(e);if(u.value1 instanceof h.Just)return tn(u.value0)(n(t)(u.value1.value0));if(u.value1 instanceof h.Nothing)return tn(u.value0)(U);throw new Error("Failed pattern match at Data.List.Lazy.Types (line 146, column 28 - line 148, column 33): "+[u.constructor.name])})}}),Ln=new g.Unfoldable(function(){return wn},function n(t){return function(e){return c.defer(H)(function(r){var u=t(e);if(u instanceof h.Nothing)return U;if(u instanceof h.Just)return tn(u.value0.value0)(n(t)(u.value0.value1));throw new Error("Failed pattern match at Data.List.Lazy.Types (line 152, column 28 - line 154, column 39): "+[u.constructor.name])})}}),xn=new A.Unfoldable1(function(n){return function(t){return P(x.defer(function(e){return A.unfoldr1(N.unfoldable1NonEmpty(Ln))(n)(t)}))}}),hn=new i.Comonad(function(){return un},function(n){return N.head(x.force(n))}),En=new f.Monad(function(){return qn},function(){return bn}),bn=new u.Bind(function(){return Nn},function(n){return function(t){return w.map(x.functorLazy)(function(n){if(n instanceof M)return M.value;if(n instanceof S)return Z(I.append(J)(t(n.value0))(u.bind(bn)(n.value1)(t)));throw new Error("Failed pattern match at Data.List.Lazy.Types (line 175, column 5 - line 175, column 17): "+[n.constructor.name])})(b.unwrap(B)(n))}}),Nn=new r.Apply(function(){return K},f.ap(En)),qn=new e.Applicative(function(){return Nn},function(n){return tn(n)(U)}),jn=new r.Apply(function(){return R},function(n){return function(t){var e=x.force(t),u=x.force(n);return x.defer(function(n){return new N.NonEmpty(u.value0(e.value0),I.append(J)(r.apply(Nn)(u.value1)(tn(e.value0)(U)))(r.apply(Nn)(tn(u.value0)(u.value1))(e.value1)))})}}),In=new u.Bind(function(){return jn},function(n){return function(t){var e=x.force(n),r=x.force(b.unwrap(O)(t(e.value0)));return x.defer(function(n){return new N.NonEmpty(r.value0,I.append(J)(r.value1)(u.bind(bn)(e.value1)(function(n){return dn(t(n))})))})}}),Dn=new n.Alt(function(){return R},I.append(sn)),Fn=new n.Alt(function(){return K},I.append(J)),Wn=new s.Plus(function(){return Fn},U),Tn=new t.Alternative(function(){return qn},function(){return Wn}),zn=new d.MonadZero(function(){return Tn},function(){return En}),gn=new l.MonadPlus(function(){return zn}),An=new e.Applicative(function(){return jn},function(n){return x.defer(function(t){return N.singleton(Wn)(n)})}),Cn=new f.Monad(function(){return An},function(){return In});module.exports={List:C,Nil:M,Cons:S,step:Z,nil:U,cons:tn,NonEmptyList:P,toList:dn,newtypeList:B,showList:Q,eqList:X,eq1List:V,ordList:_,ord1List:$,lazyList:H,semigroupList:J,monoidList:k,functorList:K,functorWithIndexList:fn,foldableList:en,foldableWithIndexList:an,unfoldable1List:wn,unfoldableList:Ln,traversableList:pn,traversableWithIndexList:mn,applyList:Nn,applicativeList:qn,bindList:bn,monadList:En,altList:Fn,plusList:Wn,alternativeList:Tn,monadZeroList:zn,monadPlusList:gn,extendList:rn,newtypeNonEmptyList:O,eqNonEmptyList:Y,ordNonEmptyList:nn,showNonEmptyList:G,functorNonEmptyList:R,applyNonEmptyList:jn,applicativeNonEmptyList:An,bindNonEmptyList:In,monadNonEmptyList:Cn,altNonEmptyList:Dn,extendNonEmptyList:un,comonadNonEmptyList:hn,semigroupNonEmptyList:sn,foldableNonEmptyList:on,traversableNonEmptyList:vn,unfoldable1NonEmptyList:xn,functorWithIndexNonEmptyList:ln,foldableWithIndexNonEmptyList:cn,traversableWithIndexNonEmptyList:yn};
-},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Comonad/index.js":"U0zO","../Control.Extend/index.js":"JIoJ","../Control.Lazy/index.js":"y9cE","../Control.Monad/index.js":"U/Ix","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Lazy/index.js":"aRUE","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.NonEmpty/index.js":"qF8i","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unfoldable1/index.js":"S0Nl"}],"sNBV":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),t=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),r=require("../Control.Bind/index.js"),u=require("../Control.Category/index.js"),i=require("../Control.Lazy/index.js"),o=require("../Control.Monad.Rec.Class/index.js"),a=require("../Data.Boolean/index.js"),c=require("../Data.Eq/index.js"),l=require("../Data.Foldable/index.js"),f=require("../Data.Function/index.js"),s=require("../Data.Functor/index.js"),p=require("../Data.HeytingAlgebra/index.js"),m=require("../Data.Lazy/index.js"),v=require("../Data.List.Lazy.Types/index.js"),d=require("../Data.Maybe/index.js"),w=require("../Data.Newtype/index.js"),L=require("../Data.NonEmpty/index.js"),y=require("../Data.Ord/index.js"),h=require("../Data.Ordering/index.js"),z=require("../Data.Semigroup/index.js"),C=require("../Data.Show/index.js"),N=require("../Data.Traversable/index.js"),D=require("../Data.Tuple/index.js"),b=require("../Data.Unfoldable/index.js"),q=function(n){return n},x=function n(t){return function(r){return function(u){return e.apply(m.applyLazy)(s.map(m.functorLazy)(function(e){return function(r){if(e instanceof v.Nil)return v.Nil.value;if(r instanceof v.Nil)return v.Nil.value;if(e instanceof v.Cons&&r instanceof v.Cons)return new v.Cons(t(e.value0)(r.value0),n(t)(e.value1)(r.value1));throw new Error("Failed pattern match at Data.List.Lazy (line 693, column 3 - line 693, column 35): "+[e.constructor.name,r.constructor.name])}})(w.unwrap(v.newtypeList)(r)))(w.unwrap(v.newtypeList)(u))}}},F=function(n){return function(t){return function(e){return function(r){return N.sequence(v.traversableList)(n)(x(t)(e)(r))}}}},E=x(D.Tuple.create),g=function n(t){return function(e){return function(r){var u;return s.map(m.functorLazy)((u=t,function(t){if(t instanceof v.Nil)return v.Nil.value;if(0===u&&t instanceof v.Cons)return new v.Cons(e,t.value1);if(t instanceof v.Cons)return new v.Cons(t.value0,n(u-1|0)(e)(t.value1));throw new Error("Failed pattern match at Data.List.Lazy (line 367, column 3 - line 367, column 17): "+[u.constructor.name,t.constructor.name])}))(w.unwrap(v.newtypeList)(r))}}},j=l.foldr(v.foldableList)(function(n){return function(t){return new D.Tuple(v.cons(n.value0)(t.value0),v.cons(n.value1)(t.value1))}})(new D.Tuple(v.nil,v.nil)),A=function(n){var t=v.step(n);if(t instanceof v.Nil)return d.Nothing.value;if(t instanceof v.Cons)return new d.Just({head:t.value0,tail:t.value1});throw new Error("Failed pattern match at Data.List.Lazy (line 285, column 13 - line 287, column 44): "+[t.constructor.name])},M=function(n){return b.unfoldr(n)(function(n){return s.map(d.functorMaybe)(function(n){return new D.Tuple(n.head,n.tail)})(A(n))})},J=function n(t){var e=s.map(m.functorLazy)(function(e){return e instanceof v.Cons&&t(e.value0)?new v.Cons(e.value0,n(t)(e.value1)):v.Nil.value}),r=w.unwrap(v.newtypeList);return function(n){return v.List(e(r(n)))}},B=function n(t){if(t<=0)return f.const(v.nil);var e,r=s.map(m.functorLazy)((e=t,function(t){if(t instanceof v.Nil)return v.Nil.value;if(t instanceof v.Cons)return new v.Cons(t.value0,n(e-1|0)(t.value1));throw new Error("Failed pattern match at Data.List.Lazy (line 517, column 3 - line 517, column 32): "+[e.constructor.name,t.constructor.name])})),u=w.unwrap(v.newtypeList);return function(n){return v.List(r(u(n)))}},T=function(n){return s.map(d.functorMaybe)(function(n){return n.tail})(A(n))},P=function(n){return function(t){return function(e){return o.tailRecM2(o.monadRecMaybe)(function(t){return function(e){var r=v.step(t);if(r instanceof v.Nil)return d.Just.create(new o.Done(e));if(r instanceof v.Cons){var u=v.step(e);return u instanceof v.Cons&&c.eq(n)(r.value0)(u.value0)?d.Just.create(new o.Loop({a:r.value1,b:u.value1})):d.Nothing.value}throw new Error("Failed pattern match at Data.List.Lazy (line 499, column 21 - line 503, column 19): "+[r.constructor.name])}})(t)(e)}}},I=function n(t){return function(e){var r=A(e);if(r instanceof d.Just&&t(r.value0.head)){var u=n(t)(r.value0.tail);return{init:v.cons(r.value0.head)(u.init),rest:u.rest}}return{init:v.nil,rest:e}}},W=function(n){return function(t){return l.foldr(v.foldableList)(v.cons)(v.cons(t)(v.nil))(n)}},O=function(n){return v.cons(n)(v.nil)},R=function(n){return new C.Show(function(t){return"(Pattern "+C.show(v.showList(n))(t)+")"})},S=function n(t){return function(e){return function(r){return s.map(m.functorLazy)(function(r){if(r instanceof v.Nil)return v.Nil.value;if(r instanceof v.Cons){var u=t(r.value0)(e);return v.Cons.create(u)(n(t)(u)(r.value1))}throw new Error("Failed pattern match at Data.List.Lazy (line 764, column 5 - line 764, column 27): "+[r.constructor.name])})(w.unwrap(v.newtypeList)(r))}}},k=function(n){return i.defer(v.lazyList)(function(t){return l.foldl(v.foldableList)(f.flip(v.cons))(v.nil)(n)})},U=function n(e){return function(u){return function(i){if(u<1)return t.pure(e.Applicative0())(v.nil);if(a.otherwise)return r.bind(e.Bind1())(i)(function(o){return r.bind(e.Bind1())(n(e)(u-1|0)(i))(function(n){return t.pure(e.Applicative0())(v.cons(o)(n))})});throw new Error("Failed pattern match at Data.List.Lazy (line 161, column 1 - line 161, column 62): "+[u.constructor.name,i.constructor.name])}}},G=function(n){return i.fix(v.lazyList)(function(t){return v.cons(n)(t)})},H=function(n){return function(t){return B(n)(G(t))}},K=function(n){return function(t){if(n>t){return b.unfoldr(v.unfoldableList)(function(n){if(n>=t)return new d.Just(new D.Tuple(n,n-1|0));if(a.otherwise)return d.Nothing.value;throw new Error("Failed pattern match at Data.List.Lazy (line 148, column 13 - line 149, column 38): "+[n.constructor.name])})(n)}if(a.otherwise){return b.unfoldr(v.unfoldableList)(function(n){if(n<=t)return new d.Just(new D.Tuple(n,n+1|0));if(a.otherwise)return d.Nothing.value;throw new Error("Failed pattern match at Data.List.Lazy (line 153, column 5 - line 154, column 30): "+[n.constructor.name])})(n)}throw new Error("Failed pattern match at Data.List.Lazy (line 145, column 1 - line 145, column 32): "+[n.constructor.name,t.constructor.name])}},Q=function(n){return l.foldr(v.foldableList)(function(t){return function(e){return n(t)?{yes:v.cons(t)(e.yes),no:e.no}:{yes:e.yes,no:v.cons(t)(e.no)}}})({yes:v.nil,no:v.nil})},V=function(n){return d.isNothing(A(n))},X=new w.Newtype(function(n){return n},q),Y=function n(t){var e=s.map(m.functorLazy)(function(e){var r,u=!1;function i(r){if(r instanceof v.Nil)return u=!0,v.Nil.value;if(r instanceof v.Cons){var i=t(r.value0);if(i instanceof d.Nothing)return void(e=v.step(r.value1));if(i instanceof d.Just)return u=!0,new v.Cons(i.value0,n(t)(r.value1));throw new Error("Failed pattern match at Data.List.Lazy (line 460, column 5 - line 462, column 39): "+[i.constructor.name])}throw new Error("Failed pattern match at Data.List.Lazy (line 458, column 3 - line 458, column 15): "+[r.constructor.name])}for(;!u;)r=i(e);return r}),r=w.unwrap(v.newtypeList);return function(n){return v.List(e(r(n)))}},Z=function(n){return function(t){return function(r){return e.apply(n.Applicative0().Apply0())(s.map(n.Plus1().Alt0().Functor0())(v.cons)(r))(i.defer(t)(function(e){return $(n)(t)(r)}))}}},$=function(e){return function(r){return function(u){return n.alt(e.Plus1().Alt0())(Z(e)(r)(u))(t.pure(e.Applicative0())(v.nil))}}},_=l.foldl(v.foldableList)(function(n){return function(t){return n+1|0}})(0),nn=function(n){return function(n){var t,e=!1;function r(t){if(t instanceof v.Cons){if(V(t.value1))return e=!0,new d.Just(t.value0);if(a.otherwise)return void(n=v.step(t.value1))}return e=!0,d.Nothing.value}for(;!e;)t=r(n);return t}(v.step(n))},tn=function(n){return function(t){return i.fix(v.lazyList)(function(e){return v.cons(t)(s.map(v.functorList)(n)(e))})}},en=function n(t){return function(e){return function(r){if(0===t)return v.cons(e)(r);return s.map(m.functorLazy)(function(r){if(r instanceof v.Nil)return new v.Cons(e,v.nil);if(r instanceof v.Cons)return new v.Cons(r.value0,n(t-1|0)(e)(r.value1));throw new Error("Failed pattern match at Data.List.Lazy (line 340, column 3 - line 340, column 22): "+[r.constructor.name])})(w.unwrap(v.newtypeList)(r))}}},rn=function(n){return function n(t){if(t instanceof v.Cons){if(V(t.value1))return new d.Just(v.nil);if(a.otherwise)return s.map(d.functorMaybe)(v.cons(t.value0))(n(v.step(t.value1)))}return d.Nothing.value}(v.step(n))},un=function(n){var t;return t=v.step(n),function(n){var e,r=t,u=!1;function i(t,e){if(t instanceof v.Nil)return u=!0,d.Nothing.value;if(t instanceof v.Cons&&0===e)return u=!0,new d.Just(t.value0);if(t instanceof v.Cons)return r=v.step(t.value1),void(n=e-1|0);throw new Error("Failed pattern match at Data.List.Lazy (line 299, column 3 - line 299, column 21): "+[t.constructor.name,e.constructor.name])}for(;!u;)e=i(r,n);return e}},on=function(n){return s.map(d.functorMaybe)(function(n){return n.head})(A(n))},an=function n(t){var e=A(t);if(e instanceof d.Nothing)return t;if(e instanceof d.Just){var r=A(e.value0.head);if(r instanceof d.Nothing)return n(e.value0.tail);if(r instanceof d.Just)return v.cons(v.cons(r.value0.head)(Y(on)(e.value0.tail)))(n(v.cons(r.value0.tail)(Y(T)(e.value0.tail))));throw new Error("Failed pattern match at Data.List.Lazy (line 734, column 7 - line 738, column 72): "+[r.constructor.name])}throw new Error("Failed pattern match at Data.List.Lazy (line 730, column 3 - line 738, column 72): "+[e.constructor.name])},cn=function n(t){var e=s.map(m.functorLazy)(function(e){if(e instanceof v.Nil)return v.Nil.value;if(e instanceof v.Cons){var r=I(t(e.value0))(e.value1);return new v.Cons(m.defer(function(n){return new L.NonEmpty(e.value0,r.init)}),n(t)(r.rest))}throw new Error("Failed pattern match at Data.List.Lazy (line 588, column 3 - line 588, column 15): "+[e.constructor.name])}),r=w.unwrap(v.newtypeList);return function(n){return v.List(e(r(n)))}},ln=function(n){return cn(c.eq(n))},fn=function(){var n=t.pure(m.applicativeLazy);return function(t){return v.List(n(t))}}(),sn=function n(t){return function(e){return function(r){return s.map(m.functorLazy)(function(r){if(r instanceof v.Nil)return new v.Cons(e,v.nil);if(r instanceof v.Cons)return t(e)(r.value0)instanceof h.GT?new v.Cons(r.value0,n(t)(e)(r.value1)):new v.Cons(e,fn(r));throw new Error("Failed pattern match at Data.List.Lazy (line 235, column 3 - line 235, column 22): "+[r.constructor.name])})(w.unwrap(v.newtypeList)(r))}}},pn=function(n){return sn(y.compare(n))},mn=function(n){return l.foldr(n)(v.cons)(v.nil)},vn=function(n){return function(t){return function(e){return function r(u){var o=v.step(u);if(o instanceof v.Cons)return i.defer(n)(function(n){return t(o.value0)(r(o.value1))});if(o instanceof v.Nil)return e;throw new Error("Failed pattern match at Data.List.Lazy (line 756, column 13 - line 758, column 15): "+[o.constructor.name])}}}},dn=function n(e){return function(u){return function(i){return function(o){var a=A(o);if(a instanceof d.Nothing)return t.pure(e.Applicative0())(i);if(a instanceof d.Just)return r.bind(e.Bind1())(u(i)(a.value0.head))(function(t){return n(e)(u)(t)(a.value0.tail)});throw new Error("Failed pattern match at Data.List.Lazy (line 747, column 5 - line 750, column 54): "+[a.constructor.name])}}}},wn=function(n){return function e(u){return function(i){return r.bind(d.bindMaybe)(A(i))(function(r){return n(r.head)?t.pure(d.applicativeMaybe)(u):e(u+1|0)(r.tail)})}}(0)},Ln=function(n){return function(t){return s.map(d.functorMaybe)(function(n){return(_(t)-1|0)-n|0})(wn(n)(k(t)))}},yn=function n(e){return function(u){return function(i){var o=A(i);if(o instanceof d.Nothing)return t.pure(e.Applicative0())(v.nil);if(o instanceof d.Just)return r.bind(e.Bind1())(u(o.value0.head))(function(i){return r.bind(e.Bind1())(n(e)(u)(o.value0.tail))(function(n){return t.pure(e.Applicative0())(i?v.cons(o.value0.head)(n):n)})});throw new Error("Failed pattern match at Data.List.Lazy (line 443, column 5 - line 448, column 48): "+[o.constructor.name])}}},hn=function n(t){var e=s.map(m.functorLazy)(function(e){var r,u=!1;function i(r){if(r instanceof v.Nil)return u=!0,v.Nil.value;if(r instanceof v.Cons){if(t(r.value0))return u=!0,new v.Cons(r.value0,n(t)(r.value1));if(a.otherwise)return void(e=v.step(r.value1))}throw new Error("Failed pattern match at Data.List.Lazy (line 428, column 3 - line 428, column 15): "+[r.constructor.name])}for(;!u;)r=i(e);return r}),r=w.unwrap(v.newtypeList);return function(n){return v.List(e(r(n)))}},zn=function(n){return function(t){return function(e){return hn(function(t){return l.any(v.foldableList)(p.heytingAlgebraBoolean)(n(t))(e)})(t)}}},Cn=function(n){return zn(c.eq(n))},Nn=function n(t){var e=s.map(m.functorLazy)(function(e){if(e instanceof v.Nil)return v.Nil.value;if(e instanceof v.Cons)return new v.Cons(e.value0,n(t)(hn(function(n){return!t(e.value0)(n)})(e.value1)));throw new Error("Failed pattern match at Data.List.Lazy (line 621, column 3 - line 621, column 15): "+[e.constructor.name])}),r=w.unwrap(v.newtypeList);return function(n){return v.List(e(r(n)))}},Dn=function(n){return Nn(c.eq(n))},bn=function(n){return new c.Eq(function(t){return function(e){return c.eq(v.eqList(n))(t)(e)}})},qn=function(n){return new y.Ord(function(){return bn(n.Eq0())},function(t){return function(e){return y.compare(v.ordList(n))(t)(e)}})},xn=function(n){return function(t){return Ln(function(e){return c.eq(n)(e)(t)})}},Fn=function(n){return function(t){return wn(function(e){return c.eq(n)(e)(t)})}},En=function(n){return function(t){return function(t){var e,r=!1;function u(e){if(!(e instanceof v.Cons&&n(e.value0)))return r=!0,fn(e);t=v.step(e.value1)}for(;!r;)e=u(t);return e}(v.step(t))}},gn=function(n){var t,e=s.map(m.functorLazy)((t=n,function(n){var e,r=t,u=!1;function i(t,e){if(0===t)return u=!0,e;if(e instanceof v.Nil)return u=!0,v.Nil.value;if(e instanceof v.Cons)return r=t-1|0,void(n=v.step(e.value1));throw new Error("Failed pattern match at Data.List.Lazy (line 536, column 3 - line 536, column 15): "+[t.constructor.name,e.constructor.name])}for(;!u;)e=i(r,n);return e})),r=w.unwrap(v.newtypeList);return function(n){return v.List(e(r(n)))}},jn=function(n){return function(t){return function(e){return B(t-n|0)(gn(n)(e))}}},An=function n(t){return function(e){return function(r){return s.map(m.functorLazy)(function(r){if(r instanceof v.Nil)return v.Nil.value;if(r instanceof v.Cons){if(t(e)(r.value0))return v.step(r.value1);if(a.otherwise)return new v.Cons(r.value0,n(t)(e)(r.value1))}throw new Error("Failed pattern match at Data.List.Lazy (line 650, column 3 - line 650, column 15): "+[r.constructor.name])})(w.unwrap(v.newtypeList)(r))}}},Mn=function(n){return function(t){return function(e){return z.append(v.semigroupList)(t)(l.foldl(v.foldableList)(f.flip(An(n)))(Nn(n)(e))(t))}}},Jn=function(n){return Mn(c.eq(n))},Bn=function n(t){return function(e){var r;return s.map(m.functorLazy)((r=t,function(t){if(t instanceof v.Nil)return v.Nil.value;if(0===r&&t instanceof v.Cons)return v.step(t.value1);if(t instanceof v.Cons)return new v.Cons(t.value0,n(r-1|0)(t.value1));throw new Error("Failed pattern match at Data.List.Lazy (line 353, column 3 - line 353, column 17): "+[r.constructor.name,t.constructor.name])}))(w.unwrap(v.newtypeList)(e))}},Tn=function(n){return An(c.eq(n))},Pn=function(n){return l.foldl(v.foldableList)(f.flip(Tn(n)))},In=function(n){return i.fix(v.lazyList)(function(t){return z.append(v.semigroupList)(n)(t)})},Wn=f.flip(r.bind(v.bindList)),On=function(n){return r.bind(v.bindList)(n)(u.identity(u.categoryFn))},Rn=Y(u.identity(u.categoryFn)),Sn=function n(t){return function(e){return function(r){var u;return s.map(m.functorLazy)((u=t,function(t){if(t instanceof v.Nil)return v.Nil.value;if(0===u&&t instanceof v.Cons){var r=e(t.value0);if(r instanceof d.Nothing)return v.step(t.value1);if(r instanceof d.Just)return new v.Cons(r.value0,t.value1);throw new Error("Failed pattern match at Data.List.Lazy (line 394, column 22 - line 396, column 26): "+[r.constructor.name])}if(t instanceof v.Cons)return new v.Cons(t.value0,n(u-1|0)(e)(t.value1));throw new Error("Failed pattern match at Data.List.Lazy (line 393, column 3 - line 393, column 17): "+[u.constructor.name,t.constructor.name])}))(w.unwrap(v.newtypeList)(r))}}},kn=function(n){return function(t){return Sn(n)(function(n){return d.Just.create(t(n))})}};module.exports={toUnfoldable:M,fromFoldable:mn,singleton:O,range:K,replicate:H,replicateM:U,some:Z,many:$,repeat:G,iterate:tn,cycle:In,null:V,length:_,snoc:W,insert:pn,insertBy:sn,head:on,last:nn,tail:T,init:rn,uncons:A,index:un,elemIndex:Fn,elemLastIndex:xn,findIndex:wn,findLastIndex:Ln,insertAt:en,deleteAt:Bn,updateAt:g,modifyAt:kn,alterAt:Sn,reverse:k,concat:On,concatMap:Wn,filter:hn,filterM:yn,mapMaybe:Y,catMaybes:Rn,Pattern:q,stripPrefix:P,slice:jn,take:B,takeWhile:J,drop:gn,dropWhile:En,span:I,group:ln,groupBy:cn,partition:Q,nub:Dn,nubBy:Nn,union:Jn,unionBy:Mn,delete:Tn,deleteBy:An,difference:Pn,intersect:Cn,intersectBy:zn,zipWith:x,zipWithA:F,zip:E,unzip:j,transpose:an,foldM:dn,foldrLazy:vn,scanrLazy:S,eqPattern:bn,ordPattern:qn,newtypePattern:X,showPattern:R};
-},{"../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Lazy/index.js":"y9cE","../Control.Monad.Rec.Class/index.js":"UVIy","../Data.Boolean/index.js":"ObQr","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Lazy/index.js":"aRUE","../Data.List.Lazy.Types/index.js":"EJF+","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.NonEmpty/index.js":"qF8i","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z"}],"RRDs":[function(require,module,exports) {
-"use strict";var e=require("../Control.Applicative/index.js"),n=require("../Control.Apply/index.js"),u=require("../Control.Category/index.js"),a=require("../Data.Eq/index.js"),t=require("../Data.Foldable/index.js"),l=require("../Data.FoldableWithIndex/index.js"),r=require("../Data.Function/index.js"),v=require("../Data.Functor/index.js"),i=require("../Data.FunctorWithIndex/index.js"),o=require("../Data.HeytingAlgebra/index.js"),c=require("../Data.List/index.js"),f=require("../Data.List.Lazy/index.js"),s=require("../Data.List.Lazy.Types/index.js"),p=require("../Data.List.Types/index.js"),m=require("../Data.Maybe/index.js"),w=require("../Data.Monoid/index.js"),d=require("../Data.Ord/index.js"),h=require("../Data.Ordering/index.js"),y=require("../Data.Semigroup/index.js"),E=require("../Data.Show/index.js"),M=require("../Data.Traversable/index.js"),I=require("../Data.TraversableWithIndex/index.js"),L=require("../Data.Tuple/index.js"),D=require("../Data.Unfoldable/index.js"),F=function(){function e(){}return e.value=new e,e}(),T=function(){function e(e,n,u,a){this.value0=e,this.value1=n,this.value2=u,this.value3=a}return e.create=function(n){return function(u){return function(a){return function(t){return new e(n,u,a,t)}}}},e}(),b=function(){function e(e,n,u,a,t,l,r){this.value0=e,this.value1=n,this.value2=u,this.value3=a,this.value4=t,this.value5=l,this.value6=r}return e.create=function(n){return function(u){return function(a){return function(t){return function(l){return function(r){return function(v){return new e(n,u,a,t,l,r,v)}}}}}}},e}(),g=function(){function e(e,n,u){this.value0=e,this.value1=n,this.value2=u}return e.create=function(n){return function(u){return function(a){return new e(n,u,a)}}},e}(),x=function(){function e(e,n,u){this.value0=e,this.value1=n,this.value2=u}return e.create=function(n){return function(u){return function(a){return new e(n,u,a)}}},e}(),C=function(){function e(e,n,u,a,t,l){this.value0=e,this.value1=n,this.value2=u,this.value3=a,this.value4=t,this.value5=l}return e.create=function(n){return function(u){return function(a){return function(t){return function(l){return function(r){return new e(n,u,a,t,l,r)}}}}}},e}(),q=function(){function e(e,n,u,a,t,l){this.value0=e,this.value1=n,this.value2=u,this.value3=a,this.value4=t,this.value5=l}return e.create=function(n){return function(u){return function(a){return function(t){return function(l){return function(r){return new e(n,u,a,t,l,r)}}}}}},e}(),J=function(){function e(e,n,u,a,t,l){this.value0=e,this.value1=n,this.value2=u,this.value3=a,this.value4=t,this.value5=l}return e.create=function(n){return function(u){return function(a){return function(t){return function(l){return function(r){return new e(n,u,a,t,l,r)}}}}}},e}(),N=function(){function e(e,n,u,a){this.value0=e,this.value1=n,this.value2=u,this.value3=a}return e.create=function(n){return function(u){return function(a){return function(t){return new e(n,u,a,t)}}}},e}(),A=function n(u){if(u instanceof F)return p.Nil.value;if(u instanceof T)return y.append(p.semigroupList)(n(u.value0))(y.append(p.semigroupList)(e.pure(p.applicativeList)(u.value2))(n(u.value3)));if(u instanceof b)return y.append(p.semigroupList)(n(u.value0))(y.append(p.semigroupList)(e.pure(p.applicativeList)(u.value2))(y.append(p.semigroupList)(n(u.value3))(y.append(p.semigroupList)(e.pure(p.applicativeList)(u.value5))(n(u.value6)))));throw new Error("Failed pattern match at Data.Map.Internal (line 612, column 1 - line 612, column 40): "+[u.constructor.name])},k=function e(n){if(n instanceof F)return 0;if(n instanceof T)return(1+e(n.value0)|0)+e(n.value3)|0;if(n instanceof b)return((2+e(n.value0)|0)+e(n.value3)|0)+e(n.value6)|0;throw new Error("Failed pattern match at Data.Map.Internal (line 662, column 1 - line 662, column 35): "+[n.constructor.name])},W=function(e){return function(n){return new T(F.value,e,n,F.value)}},j=function(e){return function(n){return D.unfoldr(e)(function(e){var n,u=!1;function a(n){if(n instanceof p.Nil)return u=!0,m.Nothing.value;if(n instanceof p.Cons){if(n.value0 instanceof F)return void(e=n.value1);if(n.value0 instanceof T&&n.value0.value0 instanceof F&&n.value0.value3 instanceof F)return u=!0,m.Just.create(new L.Tuple(new L.Tuple(n.value0.value1,n.value0.value2),n.value1));if(n.value0 instanceof T&&n.value0.value0 instanceof F)return u=!0,m.Just.create(new L.Tuple(new L.Tuple(n.value0.value1,n.value0.value2),new p.Cons(n.value0.value3,n.value1)));if(n.value0 instanceof T)return void(e=new p.Cons(n.value0.value0,new p.Cons(W(n.value0.value1)(n.value0.value2),new p.Cons(n.value0.value3,n.value1))));if(n.value0 instanceof b)return void(e=new p.Cons(n.value0.value0,new p.Cons(W(n.value0.value1)(n.value0.value2),new p.Cons(n.value0.value3,new p.Cons(W(n.value0.value4)(n.value0.value5),new p.Cons(n.value0.value6,n.value1))))));throw new Error("Failed pattern match at Data.Map.Internal (line 577, column 18 - line 586, column 71): "+[n.value0.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 576, column 3 - line 576, column 19): "+[n.constructor.name])}for(;!u;)n=a(e);return n})(new p.Cons(n,p.Nil.value))}},Q=j(D.unfoldableArray),G=function(e){return function(n){return D.unfoldr(e)(function(e){var n,u=!1;function a(n){if(n instanceof p.Nil)return u=!0,m.Nothing.value;if(n instanceof p.Cons){if(n.value0 instanceof F)return void(e=n.value1);if(n.value0 instanceof T)return u=!0,m.Just.create(new L.Tuple(new L.Tuple(n.value0.value1,n.value0.value2),new p.Cons(n.value0.value0,new p.Cons(n.value0.value3,n.value1))));if(n.value0 instanceof b)return u=!0,m.Just.create(new L.Tuple(new L.Tuple(n.value0.value1,n.value0.value2),new p.Cons(W(n.value0.value4)(n.value0.value5),new p.Cons(n.value0.value0,new p.Cons(n.value0.value3,new p.Cons(n.value0.value6,n.value1))))));throw new Error("Failed pattern match at Data.Map.Internal (line 598, column 18 - line 603, column 77): "+[n.value0.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 597, column 3 - line 597, column 19): "+[n.constructor.name])}for(;!u;)n=a(e);return n})(new p.Cons(n,p.Nil.value))}},S=function e(n){return function(u){return function(a){if(a instanceof F)return"Leaf";if(a instanceof T)return"Two ("+e(n)(u)(a.value0)+") ("+E.show(n)(a.value1)+") ("+E.show(u)(a.value2)+") ("+e(n)(u)(a.value3)+")";if(a instanceof b)return"Three ("+e(n)(u)(a.value0)+") ("+E.show(n)(a.value1)+") ("+E.show(u)(a.value2)+") ("+e(n)(u)(a.value3)+") ("+E.show(n)(a.value4)+") ("+E.show(u)(a.value5)+") ("+e(n)(u)(a.value6)+")";throw new Error("Failed pattern match at Data.Map.Internal (line 153, column 1 - line 153, column 62): "+[a.constructor.name])}}},O=function(e){return function(n){return new E.Show(function(u){return"(fromFoldable "+E.show(E.showArray(L.showTuple(e)(n)))(Q(u))+")"})}},U=function(e){return function(n){var u=d.compare(e);return function e(a){if(a instanceof F)return m.Nothing.value;if(a instanceof T){var t=u(n)(a.value1);if(t instanceof h.EQ)return new m.Just({key:a.value1,value:a.value2});if(t instanceof h.GT)return m.Just.create(m.fromMaybe({key:a.value1,value:a.value2})(e(a.value3)));if(t instanceof h.LT)return e(a.value0);throw new Error("Failed pattern match at Data.Map.Internal (line 225, column 33 - line 228, column 20): "+[t.constructor.name])}if(a instanceof b){var l=u(n)(a.value4);if(l instanceof h.EQ)return new m.Just({key:a.value4,value:a.value5});if(l instanceof h.GT)return m.Just.create(m.fromMaybe({key:a.value4,value:a.value5})(e(a.value6)));if(l instanceof h.LT)return e(new T(a.value0,a.value1,a.value2,a.value3));throw new Error("Failed pattern match at Data.Map.Internal (line 229, column 45 - line 232, column 36): "+[l.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 224, column 5 - line 224, column 22): "+[a.constructor.name])}}},z=function(e){return function(n){var u=d.compare(e);return function e(a){if(a instanceof F)return m.Nothing.value;if(a instanceof T){var t=u(n)(a.value1);if(t instanceof h.EQ)return new m.Just({key:a.value1,value:a.value2});if(t instanceof h.LT)return m.Just.create(m.fromMaybe({key:a.value1,value:a.value2})(e(a.value0)));if(t instanceof h.GT)return e(a.value3);throw new Error("Failed pattern match at Data.Map.Internal (line 259, column 33 - line 262, column 21): "+[t.constructor.name])}if(a instanceof b){var l=u(n)(a.value1);if(l instanceof h.EQ)return new m.Just({key:a.value1,value:a.value2});if(l instanceof h.LT)return m.Just.create(m.fromMaybe({key:a.value1,value:a.value2})(e(a.value0)));if(l instanceof h.GT)return e(new T(a.value3,a.value4,a.value5,a.value6));throw new Error("Failed pattern match at Data.Map.Internal (line 263, column 45 - line 266, column 37): "+[l.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 258, column 5 - line 258, column 22): "+[a.constructor.name])}}},K=function(e){return function(n){var u=d.compare(e);return function(e){var a,t=!1;function l(a){if(a instanceof F)return t=!0,m.Nothing.value;if(a instanceof T){var l=u(n)(a.value1);return l instanceof h.EQ?(t=!0,new m.Just(a.value2)):l instanceof h.LT?void(e=a.value0):void(e=a.value3)}if(a instanceof b){var r=u(n)(a.value1);if(r instanceof h.EQ)return t=!0,new m.Just(a.value2);var v=u(n)(a.value4);return v instanceof h.EQ?(t=!0,new m.Just(a.value5)):r instanceof h.LT?void(e=a.value0):v instanceof h.GT?void(e=a.value6):void(e=a.value3)}throw new Error("Failed pattern match at Data.Map.Internal (line 200, column 5 - line 200, column 22): "+[a.constructor.name])}for(;!t;)a=l(e);return a}}},B=function(e){return function(n){return function(u){return m.isJust(K(e)(n)(u))}}},H=function n(u){if(u instanceof F)return p.Nil.value;if(u instanceof T)return y.append(p.semigroupList)(n(u.value0))(y.append(p.semigroupList)(e.pure(p.applicativeList)(u.value1))(n(u.value3)));if(u instanceof b)return y.append(p.semigroupList)(n(u.value0))(y.append(p.semigroupList)(e.pure(p.applicativeList)(u.value1))(y.append(p.semigroupList)(n(u.value3))(y.append(p.semigroupList)(e.pure(p.applicativeList)(u.value4))(n(u.value6)))));throw new Error("Failed pattern match at Data.Map.Internal (line 606, column 1 - line 606, column 38): "+[u.constructor.name])},V=function(e){return function(n){return function(u){return function(l){return t.all(s.foldableList)(o.heytingAlgebraBoolean)(function(u){return a.eq(m.eqMaybe(n))(K(e)(u.value0)(l))(new m.Just(u.value1))})(j(s.unfoldableList)(u))}}}},P=function(e){return e instanceof F},R=new v.Functor(function(e){return function(n){if(n instanceof F)return F.value;if(n instanceof T)return new T(v.map(R)(e)(n.value0),n.value1,e(n.value2),v.map(R)(e)(n.value3));if(n instanceof b)return new b(v.map(R)(e)(n.value0),n.value1,e(n.value2),v.map(R)(e)(n.value3),n.value4,e(n.value5),v.map(R)(e)(n.value6));throw new Error("Failed pattern match at Data.Map.Internal (line 96, column 1 - line 99, column 110): "+[e.constructor.name,n.constructor.name])}}),X=new i.FunctorWithIndex(function(){return R},function(e){return function(n){if(n instanceof F)return F.value;if(n instanceof T)return new T(i.mapWithIndex(X)(e)(n.value0),n.value1,e(n.value1)(n.value2),i.mapWithIndex(X)(e)(n.value3));if(n instanceof b)return new b(i.mapWithIndex(X)(e)(n.value0),n.value1,e(n.value1)(n.value2),i.mapWithIndex(X)(e)(n.value3),n.value4,e(n.value4)(n.value5),i.mapWithIndex(X)(e)(n.value6));throw new Error("Failed pattern match at Data.Map.Internal (line 101, column 1 - line 104, column 152): "+[e.constructor.name,n.constructor.name])}}),Y=function(e){return function(n){return function(u){var a,t=e,l=n,r=!1;function v(e,n,a){if(n instanceof p.Nil)return r=!0,a;if(n instanceof p.Cons){if(n.value0 instanceof g)return t=e,l=n.value1,void(u=new T(a,n.value0.value0,n.value0.value1,n.value0.value2));if(n.value0 instanceof x)return t=e,l=n.value1,void(u=new T(n.value0.value0,n.value0.value1,n.value0.value2,a));if(n.value0 instanceof C)return t=e,l=n.value1,void(u=new b(a,n.value0.value0,n.value0.value1,n.value0.value2,n.value0.value3,n.value0.value4,n.value0.value5));if(n.value0 instanceof q)return t=e,l=n.value1,void(u=new b(n.value0.value0,n.value0.value1,n.value0.value2,a,n.value0.value3,n.value0.value4,n.value0.value5));if(n.value0 instanceof J)return t=e,l=n.value1,void(u=new b(n.value0.value0,n.value0.value1,n.value0.value2,n.value0.value3,n.value0.value4,n.value0.value5,a));throw new Error("Failed pattern match at Data.Map.Internal (line 418, column 3 - line 423, column 88): "+[n.value0.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 415, column 1 - line 415, column 80): "+[n.constructor.name,a.constructor.name])}for(;!r;)a=v(t,l,u);return a}}},Z=function(e){return function(n){return function(u){var a,t=function(n){return function(u){var a,t=n,l=!1;function r(n,a){if(n instanceof p.Nil)return l=!0,new T(a.value0,a.value1,a.value2,a.value3);if(n instanceof p.Cons){if(n.value0 instanceof g)return l=!0,Y(e)(n.value1)(new b(a.value0,a.value1,a.value2,a.value3,n.value0.value0,n.value0.value1,n.value0.value2));if(n.value0 instanceof x)return l=!0,Y(e)(n.value1)(new b(n.value0.value0,n.value0.value1,n.value0.value2,a.value0,a.value1,a.value2,a.value3));if(n.value0 instanceof C)return t=n.value1,void(u=new N(new T(a.value0,a.value1,a.value2,a.value3),n.value0.value0,n.value0.value1,new T(n.value0.value2,n.value0.value3,n.value0.value4,n.value0.value5)));if(n.value0 instanceof q)return t=n.value1,void(u=new N(new T(n.value0.value0,n.value0.value1,n.value0.value2,a.value0),a.value1,a.value2,new T(a.value3,n.value0.value3,n.value0.value4,n.value0.value5)));if(n.value0 instanceof J)return t=n.value1,void(u=new N(new T(n.value0.value0,n.value0.value1,n.value0.value2,n.value0.value3),n.value0.value4,n.value0.value5,new T(a.value0,a.value1,a.value2,a.value3)));throw new Error("Failed pattern match at Data.Map.Internal (line 454, column 5 - line 459, column 108): "+[n.value0.constructor.name,a.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 451, column 3 - line 451, column 56): "+[n.constructor.name,a.constructor.name])}for(;!l;)a=r(t,u);return a}},l=d.compare(e);return a=p.Nil.value,function(r){var v,i=a,o=!1;function c(a,v){if(v instanceof F)return o=!0,t(a)(new N(F.value,n,u,F.value));if(v instanceof T){var c=l(n)(v.value1);return c instanceof h.EQ?(o=!0,Y(e)(a)(new T(v.value0,n,u,v.value3))):c instanceof h.LT?(i=new p.Cons(new g(v.value1,v.value2,v.value3),a),void(r=v.value0)):(i=new p.Cons(new x(v.value0,v.value1,v.value2),a),void(r=v.value3))}if(v instanceof b){var f=l(n)(v.value1);if(f instanceof h.EQ)return o=!0,Y(e)(a)(new b(v.value0,n,u,v.value3,v.value4,v.value5,v.value6));var s=l(n)(v.value4);return s instanceof h.EQ?(o=!0,Y(e)(a)(new b(v.value0,v.value1,v.value2,v.value3,n,u,v.value6))):f instanceof h.LT?(i=new p.Cons(new C(v.value1,v.value2,v.value3,v.value4,v.value5,v.value6),a),void(r=v.value0)):f instanceof h.GT&&s instanceof h.LT?(i=new p.Cons(new q(v.value0,v.value1,v.value2,v.value4,v.value5,v.value6),a),void(r=v.value3)):(i=new p.Cons(new J(v.value0,v.value1,v.value2,v.value3,v.value4,v.value5),a),void(r=v.value6))}throw new Error("Failed pattern match at Data.Map.Internal (line 434, column 3 - line 434, column 55): "+[a.constructor.name,v.constructor.name])}for(;!o;)v=c(i,r);return v}}}},$=function(e){return function(n){var u,a=function(n){return function(u){var a,t=n,l=!1;function r(n,a){if(n instanceof p.Nil)return l=!0,a;if(n instanceof p.Cons){if(n.value0 instanceof g&&n.value0.value2 instanceof F&&a instanceof F)return l=!0,Y(e)(n.value1)(new T(F.value,n.value0.value0,n.value0.value1,F.value));if(n.value0 instanceof x&&n.value0.value0 instanceof F&&a instanceof F)return l=!0,Y(e)(n.value1)(new T(F.value,n.value0.value1,n.value0.value2,F.value));if(n.value0 instanceof g&&n.value0.value2 instanceof T)return t=n.value1,void(u=new b(a,n.value0.value0,n.value0.value1,n.value0.value2.value0,n.value0.value2.value1,n.value0.value2.value2,n.value0.value2.value3));if(n.value0 instanceof x&&n.value0.value0 instanceof T)return t=n.value1,void(u=new b(n.value0.value0.value0,n.value0.value0.value1,n.value0.value0.value2,n.value0.value0.value3,n.value0.value1,n.value0.value2,a));if(n.value0 instanceof g&&n.value0.value2 instanceof b)return l=!0,Y(e)(n.value1)(new T(new T(a,n.value0.value0,n.value0.value1,n.value0.value2.value0),n.value0.value2.value1,n.value0.value2.value2,new T(n.value0.value2.value3,n.value0.value2.value4,n.value0.value2.value5,n.value0.value2.value6)));if(n.value0 instanceof x&&n.value0.value0 instanceof b)return l=!0,Y(e)(n.value1)(new T(new T(n.value0.value0.value0,n.value0.value0.value1,n.value0.value0.value2,n.value0.value0.value3),n.value0.value0.value4,n.value0.value0.value5,new T(n.value0.value0.value6,n.value0.value1,n.value0.value2,a)));if(n.value0 instanceof C&&n.value0.value2 instanceof F&&n.value0.value5 instanceof F&&a instanceof F)return l=!0,Y(e)(n.value1)(new b(F.value,n.value0.value0,n.value0.value1,F.value,n.value0.value3,n.value0.value4,F.value));if(n.value0 instanceof q&&n.value0.value0 instanceof F&&n.value0.value5 instanceof F&&a instanceof F)return l=!0,Y(e)(n.value1)(new b(F.value,n.value0.value1,n.value0.value2,F.value,n.value0.value3,n.value0.value4,F.value));if(n.value0 instanceof J&&n.value0.value0 instanceof F&&n.value0.value3 instanceof F&&a instanceof F)return l=!0,Y(e)(n.value1)(new b(F.value,n.value0.value1,n.value0.value2,F.value,n.value0.value4,n.value0.value5,F.value));if(n.value0 instanceof C&&n.value0.value2 instanceof T)return l=!0,Y(e)(n.value1)(new T(new b(a,n.value0.value0,n.value0.value1,n.value0.value2.value0,n.value0.value2.value1,n.value0.value2.value2,n.value0.value2.value3),n.value0.value3,n.value0.value4,n.value0.value5));if(n.value0 instanceof q&&n.value0.value0 instanceof T)return l=!0,Y(e)(n.value1)(new T(new b(n.value0.value0.value0,n.value0.value0.value1,n.value0.value0.value2,n.value0.value0.value3,n.value0.value1,n.value0.value2,a),n.value0.value3,n.value0.value4,n.value0.value5));if(n.value0 instanceof q&&n.value0.value5 instanceof T)return l=!0,Y(e)(n.value1)(new T(n.value0.value0,n.value0.value1,n.value0.value2,new b(a,n.value0.value3,n.value0.value4,n.value0.value5.value0,n.value0.value5.value1,n.value0.value5.value2,n.value0.value5.value3)));if(n.value0 instanceof J&&n.value0.value3 instanceof T)return l=!0,Y(e)(n.value1)(new T(n.value0.value0,n.value0.value1,n.value0.value2,new b(n.value0.value3.value0,n.value0.value3.value1,n.value0.value3.value2,n.value0.value3.value3,n.value0.value4,n.value0.value5,a)));if(n.value0 instanceof C&&n.value0.value2 instanceof b)return l=!0,Y(e)(n.value1)(new b(new T(a,n.value0.value0,n.value0.value1,n.value0.value2.value0),n.value0.value2.value1,n.value0.value2.value2,new T(n.value0.value2.value3,n.value0.value2.value4,n.value0.value2.value5,n.value0.value2.value6),n.value0.value3,n.value0.value4,n.value0.value5));if(n.value0 instanceof q&&n.value0.value0 instanceof b)return l=!0,Y(e)(n.value1)(new b(new T(n.value0.value0.value0,n.value0.value0.value1,n.value0.value0.value2,n.value0.value0.value3),n.value0.value0.value4,n.value0.value0.value5,new T(n.value0.value0.value6,n.value0.value1,n.value0.value2,a),n.value0.value3,n.value0.value4,n.value0.value5));if(n.value0 instanceof q&&n.value0.value5 instanceof b)return l=!0,Y(e)(n.value1)(new b(n.value0.value0,n.value0.value1,n.value0.value2,new T(a,n.value0.value3,n.value0.value4,n.value0.value5.value0),n.value0.value5.value1,n.value0.value5.value2,new T(n.value0.value5.value3,n.value0.value5.value4,n.value0.value5.value5,n.value0.value5.value6)));if(n.value0 instanceof J&&n.value0.value3 instanceof b)return l=!0,Y(e)(n.value1)(new b(n.value0.value0,n.value0.value1,n.value0.value2,new T(n.value0.value3.value0,n.value0.value3.value1,n.value0.value3.value2,n.value0.value3.value3),n.value0.value3.value4,n.value0.value3.value5,new T(n.value0.value3.value6,n.value0.value4,n.value0.value5,a)));throw new Error("Failed pattern match at Data.Map.Internal (line 511, column 9 - line 528, column 136): "+[n.value0.constructor.name,a.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 508, column 5 - line 528, column 136): "+[n.constructor.name])}for(;!l;)a=r(t,u);return a}},t=function(e){return function(n){var u,t=e,l=!1;function r(e,u){if(u instanceof T&&u.value0 instanceof F&&u.value3 instanceof F)return l=!0,a(e)(F.value);if(u instanceof T)return t=new p.Cons(new x(u.value0,u.value1,u.value2),e),void(n=u.value3);if(u instanceof b&&u.value0 instanceof F&&u.value3 instanceof F&&u.value6 instanceof F)return l=!0,a(new p.Cons(new x(F.value,u.value1,u.value2),e))(F.value);if(u instanceof b)return t=new p.Cons(new J(u.value0,u.value1,u.value2,u.value3,u.value4,u.value5),e),void(n=u.value6);throw new Error("Failed pattern match at Data.Map.Internal (line 540, column 5 - line 544, column 107): "+[u.constructor.name])}for(;!l;)u=r(t,n);return u}},l=function(e){var n,u=!1;function a(n){if(n instanceof T&&n.value3 instanceof F)return u=!0,{key:n.value1,value:n.value2};if(n instanceof T)e=n.value3;else{if(n instanceof b&&n.value6 instanceof F)return u=!0,{key:n.value4,value:n.value5};if(!(n instanceof b))throw new Error("Failed pattern match at Data.Map.Internal (line 531, column 33 - line 535, column 45): "+[n.constructor.name]);e=n.value6}}for(;!u;)n=a(e);return n},r=d.compare(e);return u=p.Nil.value,function(v){var i,o=u,c=!1;function f(u,i){if(i instanceof F)return c=!0,m.Nothing.value;if(i instanceof T){var f=r(n)(i.value1);if(i.value3 instanceof F&&f instanceof h.EQ)return c=!0,new m.Just(new L.Tuple(i.value2,a(u)(F.value)));if(f instanceof h.EQ){var s=l(i.value0);return c=!0,new m.Just(new L.Tuple(i.value2,t(new p.Cons(new g(s.key,s.value,i.value3),u))(i.value0)))}return f instanceof h.LT?(o=new p.Cons(new g(i.value1,i.value2,i.value3),u),void(v=i.value0)):(o=new p.Cons(new x(i.value0,i.value1,i.value2),u),void(v=i.value3))}if(i instanceof b){var w=i.value0 instanceof F&&i.value3 instanceof F&&i.value6 instanceof F,d=(f=r(n)(i.value4),r(n)(i.value1));return w&&d instanceof h.EQ?(c=!0,new m.Just(new L.Tuple(i.value2,Y(e)(u)(new T(F.value,i.value4,i.value5,F.value))))):w&&f instanceof h.EQ?(c=!0,new m.Just(new L.Tuple(i.value5,Y(e)(u)(new T(F.value,i.value1,i.value2,F.value))))):d instanceof h.EQ?(s=l(i.value0),c=!0,new m.Just(new L.Tuple(i.value2,t(new p.Cons(new C(s.key,s.value,i.value3,i.value4,i.value5,i.value6),u))(i.value0)))):f instanceof h.EQ?(s=l(i.value3),c=!0,new m.Just(new L.Tuple(i.value5,t(new p.Cons(new q(i.value0,i.value1,i.value2,s.key,s.value,i.value6),u))(i.value3)))):d instanceof h.LT?(o=new p.Cons(new C(i.value1,i.value2,i.value3,i.value4,i.value5,i.value6),u),void(v=i.value0)):d instanceof h.GT&&f instanceof h.LT?(o=new p.Cons(new q(i.value0,i.value1,i.value2,i.value4,i.value5,i.value6),u),void(v=i.value3)):(o=new p.Cons(new J(i.value0,i.value1,i.value2,i.value3,i.value4,i.value5),u),void(v=i.value6))}throw new Error("Failed pattern match at Data.Map.Internal (line 481, column 34 - line 504, column 80): "+[i.constructor.name])}for(;!c;)i=f(o,v);return i}}},_=new t.Foldable(function(e){return function(n){return function(u){return t.foldMap(p.foldableList)(e)(n)(A(u))}}},function(e){return function(n){return function(u){return t.foldl(p.foldableList)(e)(n)(A(u))}}},function(e){return function(n){return function(u){return t.foldr(p.foldableList)(e)(n)(A(u))}}}),ee=new M.Traversable(function(){return _},function(){return R},function(e){return M.traverse(ee)(e)(u.identity(u.categoryFn))},function(u){return function(a){return function(t){if(t instanceof F)return e.pure(u)(F.value);if(t instanceof T)return n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(v.map(u.Apply0().Functor0())(T.create)(M.traverse(ee)(u)(a)(t.value0)))(e.pure(u)(t.value1)))(a(t.value2)))(M.traverse(ee)(u)(a)(t.value3));if(t instanceof b)return n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(v.map(u.Apply0().Functor0())(b.create)(M.traverse(ee)(u)(a)(t.value0)))(e.pure(u)(t.value1)))(a(t.value2)))(M.traverse(ee)(u)(a)(t.value3)))(e.pure(u)(t.value4)))(a(t.value5)))(M.traverse(ee)(u)(a)(t.value6));throw new Error("Failed pattern match at Data.Map.Internal (line 119, column 1 - line 134, column 31): "+[a.constructor.name,t.constructor.name])}}}),ne=function(e){return function(n){return function(u){return function(a){return function(t){var l=function(){if(u instanceof m.Just)return function(n){return d.lessThan(e)(n)(u.value0)};if(u instanceof m.Nothing)return r.const(!1);throw new Error("Failed pattern match at Data.Map.Internal (line 319, column 7 - line 323, column 22): "+[u.constructor.name])}(),v=function(){if(a instanceof m.Just)return function(n){return d.greaterThan(e)(n)(a.value0)};if(a instanceof m.Nothing)return r.const(!1);throw new Error("Failed pattern match at Data.Map.Internal (line 326, column 7 - line 330, column 22): "+[a.constructor.name])}(),i=function(){if(u instanceof m.Just&&a instanceof m.Just)return function(n){return d.lessThanOrEq(e)(u.value0)(n)&&d.lessThanOrEq(e)(n)(a.value0)};if(u instanceof m.Just&&a instanceof m.Nothing)return function(n){return d.lessThanOrEq(e)(u.value0)(n)};if(u instanceof m.Nothing&&a instanceof m.Just)return function(n){return d.lessThanOrEq(e)(n)(a.value0)};if(u instanceof m.Nothing&&a instanceof m.Nothing)return r.const(!0);throw new Error("Failed pattern match at Data.Map.Internal (line 333, column 7 - line 341, column 21): "+[u.constructor.name,a.constructor.name])}();return function e(u){if(u instanceof F)return w.mempty(n);if(u instanceof T)return y.append(n.Semigroup0())(l(u.value1)?w.mempty(n):e(u.value0))(y.append(n.Semigroup0())(i(u.value1)?t(u.value1)(u.value2):w.mempty(n))(v(u.value1)?w.mempty(n):e(u.value3)));if(u instanceof b)return y.append(n.Semigroup0())(l(u.value1)?w.mempty(n):e(u.value0))(y.append(n.Semigroup0())(i(u.value1)?t(u.value1)(u.value2):w.mempty(n))(y.append(n.Semigroup0())(l(u.value4)||v(u.value1)?w.mempty(n):e(u.value3))(y.append(n.Semigroup0())(i(u.value4)?t(u.value4)(u.value5):w.mempty(n))(v(u.value4)?w.mempty(n):e(u.value6)))));throw new Error("Failed pattern match at Data.Map.Internal (line 359, column 10 - line 371, column 54): "+[u.constructor.name])}}}}}},ue=function(){var e;return e=m.Nothing.value,function(n){var u,a=e,t=!1;function l(e,u){if(u instanceof F)return t=!0,e;if(u instanceof T)return a=new m.Just({key:u.value1,value:u.value2}),void(n=u.value0);if(u instanceof b)return a=new m.Just({key:u.value1,value:u.value2}),void(n=u.value0);throw new Error("Failed pattern match at Data.Map.Internal (line 297, column 5 - line 297, column 22): "+[e.constructor.name,u.constructor.name])}for(;!t;)u=l(a,n);return u}}(),ae=function(e){return function(n){var u=d.compare(e);return function e(a){if(a instanceof F)return m.Nothing.value;if(a instanceof T){var t=u(n)(a.value1);if(t instanceof h.EQ)return ue(a.value3);if(t instanceof h.LT)return m.Just.create(m.fromMaybe({key:a.value1,value:a.value2})(e(a.value0)));if(t instanceof h.GT)return e(a.value3);throw new Error("Failed pattern match at Data.Map.Internal (line 276, column 33 - line 279, column 21): "+[t.constructor.name])}if(a instanceof b){var l=u(n)(a.value1);if(l instanceof h.EQ)return ue(new T(a.value3,a.value4,a.value5,a.value6));if(l instanceof h.LT)return m.Just.create(m.fromMaybe({key:a.value1,value:a.value2})(e(a.value0)));if(l instanceof h.GT)return e(new T(a.value3,a.value4,a.value5,a.value6));throw new Error("Failed pattern match at Data.Map.Internal (line 280, column 45 - line 283, column 37): "+[l.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 275, column 5 - line 275, column 22): "+[a.constructor.name])}}},te=function(){var e;return e=m.Nothing.value,function(n){var u,a=e,t=!1;function l(e,u){if(u instanceof F)return t=!0,e;if(u instanceof T)return a=new m.Just({key:u.value1,value:u.value2}),void(n=u.value3);if(u instanceof b)return a=new m.Just({key:u.value4,value:u.value5}),void(n=u.value6);throw new Error("Failed pattern match at Data.Map.Internal (line 289, column 5 - line 289, column 22): "+[e.constructor.name,u.constructor.name])}for(;!t;)u=l(a,n);return u}}(),le=function(e){return function(n){var u=d.compare(e);return function e(a){if(a instanceof F)return m.Nothing.value;if(a instanceof T){var t=u(n)(a.value1);if(t instanceof h.EQ)return te(a.value0);if(t instanceof h.GT)return m.Just.create(m.fromMaybe({key:a.value1,value:a.value2})(e(a.value3)));if(t instanceof h.LT)return e(a.value0);throw new Error("Failed pattern match at Data.Map.Internal (line 242, column 33 - line 245, column 20): "+[t.constructor.name])}if(a instanceof b){var l=u(n)(a.value4);if(l instanceof h.EQ)return te(new T(a.value0,a.value1,a.value2,a.value3));if(l instanceof h.GT)return m.Just.create(m.fromMaybe({key:a.value4,value:a.value5})(e(a.value6)));if(l instanceof h.LT)return e(new T(a.value0,a.value1,a.value2,a.value3));throw new Error("Failed pattern match at Data.Map.Internal (line 246, column 45 - line 249, column 36): "+[l.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 241, column 5 - line 241, column 22): "+[a.constructor.name])}}},re=function(e){return function(n){return new a.Eq(function(u){return function(t){return a.eq(a.eqArray(L.eqTuple(e)(n)))(Q(u))(Q(t))}})}},ve=function(e){return function(n){return new d.Ord(function(){return re(e.Eq0())(n.Eq0())},function(u){return function(a){return d.compare(d.ordArray(L.ordTuple(e)(n)))(Q(u))(Q(a))}})}},ie=function(e){return new a.Eq1(function(n){return a.eq(re(e)(n))})},oe=function(e){return new d.Ord1(function(){return ie(e.Eq0())},function(n){return d.compare(ve(e)(n))})},ce=F.value,fe=function(e){return function(n){return t.foldl(n)(function(n){return function(u){return Z(e)(u.value0)(u.value1)(n)}})(ce)}},se=function(e){return function(n){var u=fe(e)(s.foldableList),a=f.filter(L.uncurry(n)),t=j(s.unfoldableList);return function(e){return u(a(t(e)))}}},pe=function(e){return function(n){return se(e)(r.const(n))}},me=function(e){return function(n){return se(e)(function(e){return r.const(n(e))})}},we=function(e){return function(n){return l.foldlWithIndex(n)(function(n){return function(u){return function(a){return Z(e)(n)(a)(u)}}})(ce)}},de=function(e){return function(n){return function(u){return function(a){var t;return(t=j(p.unfoldableList)(u),function(u){return function(a){var l,r=t,v=u,i=!1;function o(u,t,l){if(u instanceof p.Nil)return i=!0,l;if(t instanceof p.Nil)return i=!0,l;if(u instanceof p.Cons&&t instanceof p.Cons){var o=d.compare(e)(u.value0.value0)(t.value0.value0);if(o instanceof h.LT)return r=u.value1,v=t,void(a=l);if(o instanceof h.EQ)return r=u.value1,v=t.value1,void(a=Z(e)(u.value0.value0)(n(u.value0.value1)(t.value0.value1))(l));if(o instanceof h.GT)return r=u,v=t.value1,void(a=l);throw new Error("Failed pattern match at Data.Map.Internal (line 641, column 5 - line 644, column 27): "+[o.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 638, column 3 - line 638, column 17): "+[u.constructor.name,t.constructor.name,l.constructor.name])}for(;!i;)l=o(r,v,a);return l}})(j(p.unfoldableList)(a))(ce)}}}},he=function(e){return de(e)(r.const)},ye=function(e){return function(n){return function(u){return m.maybe(u)(L.snd)($(e)(n)(u))}}},Ee=function(e){return function(n){return function(u){return t.foldl(p.foldableList)(r.flip(ye(e)))(n)(H(u))}}},Me=function(n){return 1===c.length(c.nub(a.eqInt)(function n(u){if(u instanceof F)return e.pure(p.applicativeList)(0);if(u instanceof T)return v.map(p.functorList)(function(e){return e+1|0})(y.append(p.semigroupList)(n(u.value0))(n(u.value3)));if(u instanceof b)return v.map(p.functorList)(function(e){return e+1|0})(y.append(p.semigroupList)(n(u.value0))(y.append(p.semigroupList)(n(u.value3))(n(u.value6))));throw new Error("Failed pattern match at Data.Map.Internal (line 188, column 3 - line 188, column 36): "+[u.constructor.name])}(n)))},Ie=u.identity(u.categoryFn),Le=new l.FoldableWithIndex(function(){return _},function(e){return function(n){return function(u){return t.foldMap(p.foldableList)(e)(L.uncurry(n))(Ie(j(p.unfoldableList)(u)))}}},function(e){return function(n){return function(u){return t.foldl(p.foldableList)((a=r.flip(e),function(e){return L.uncurry(a(e))}))(n)(Ie(j(p.unfoldableList)(u)));var a}}},function(e){return function(n){return function(u){return t.foldr(p.foldableList)(L.uncurry(e))(n)(Ie(j(p.unfoldableList)(u)))}}}),De=function(e){return function(n){return l.foldrWithIndex(Le)(function(u){return function(a){return function(t){return m.maybe(t)(function(n){return Z(e)(u)(n)(t)})(n(u)(a))}}})(ce)}},Fe=function(e){var n=De(e);return function(e){return n(r.const(e))}},Te=new I.TraversableWithIndex(function(){return Le},function(){return X},function(){return ee},function(u){return function(a){return function(t){if(t instanceof F)return e.pure(u)(F.value);if(t instanceof T)return n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(v.map(u.Apply0().Functor0())(T.create)(I.traverseWithIndex(Te)(u)(a)(t.value0)))(e.pure(u)(t.value1)))(a(t.value1)(t.value2)))(I.traverseWithIndex(Te)(u)(a)(t.value3));if(t instanceof b)return n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(v.map(u.Apply0().Functor0())(b.create)(I.traverseWithIndex(Te)(u)(a)(t.value0)))(e.pure(u)(t.value1)))(a(t.value1)(t.value2)))(I.traverseWithIndex(Te)(u)(a)(t.value3)))(e.pure(u)(t.value4)))(a(t.value4)(t.value5)))(I.traverseWithIndex(Te)(u)(a)(t.value6));throw new Error("Failed pattern match at Data.Map.Internal (line 136, column 1 - line 150, column 40): "+[a.constructor.name,t.constructor.name])}}}),be=function(e){return function(n){return function(u){return function(a){var t=n(K(e)(u)(a));if(t instanceof m.Nothing)return ye(e)(u)(a);if(t instanceof m.Just)return Z(e)(u)(t.value0)(a);throw new Error("Failed pattern match at Data.Map.Internal (line 549, column 15 - line 551, column 25): "+[t.constructor.name])}}}},ge=function(e){return function(n){return function(u){return t.foldl(n)(function(n){return function(a){return be(e)(function(e){return function(n){if(n instanceof m.Just)return m.Just.create(u(e)(n.value0));if(n instanceof m.Nothing)return new m.Just(e);throw new Error("Failed pattern match at Data.Map.Internal (line 566, column 3 - line 566, column 38): "+[e.constructor.name,n.constructor.name])}}(a.value1))(a.value0)(n)}})(ce)}}},xe=function(e){return function(n){return function(u){return function(a){return be(e)((t=m.maybe(a)(r.flip(n)(a)),function(e){return m.Just.create(t(e))}))(u);var t}}}},Ce=function(e){return function(n){return function(u){return function(a){return t.foldl(p.foldableList)(function(u){return function(a){return be(e)((t=m.maybe(a.value1)(n(a.value1)),function(e){return m.Just.create(t(e))}))(a.value0)(u);var t}})(a)(j(p.unfoldableList)(u))}}}},qe=function(e){return Ce(e)(r.const)},Je=function(e){return new y.Semigroup(qe(e))},Ne=function(e){return new w.Monoid(function(){return Je(e)},ce)},Ae=function(e){return function(n){return function(u){return ne(e)(Ne(e))(n)(u)(W)}}},ke=function(e){return function(n){return t.foldl(n)(qe(e))(ce)}},We=function(e){return function(n){return function(u){return function(a){return be(e)(m.maybe(m.Nothing.value)(n))(u)(a)}}}};module.exports={showTree:S,empty:ce,isEmpty:P,singleton:W,checkValid:Me,insert:Z,insertWith:xe,lookup:K,lookupLE:U,lookupLT:le,lookupGE:z,lookupGT:ae,findMin:ue,findMax:te,foldSubmap:ne,submap:Ae,fromFoldable:fe,fromFoldableWith:ge,fromFoldableWithIndex:we,toUnfoldable:j,toUnfoldableUnordered:G,delete:ye,pop:$,member:B,alter:be,update:We,keys:H,values:A,union:qe,unionWith:Ce,unions:ke,intersection:he,intersectionWith:de,difference:Ee,isSubmap:V,size:k,filterWithKey:se,filterKeys:me,filter:pe,mapMaybeWithKey:De,mapMaybe:Fe,eq1Map:ie,eqMap:re,ord1Map:oe,ordMap:ve,showMap:O,semigroupMap:Je,monoidMap:Ne,functorMap:R,functorWithIndexMap:X,foldableMap:_,foldableWithIndexMap:Le,traversableMap:ee,traversableWithIndexMap:Te};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.HeytingAlgebra/index.js":"paZe","../Data.List/index.js":"ezw6","../Data.List.Lazy/index.js":"sNBV","../Data.List.Lazy.Types/index.js":"EJF+","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z"}],"jHR9":[function(require,module,exports) {
-"use strict";var t=require("../Control.Alt/index.js"),e=require("../Control.Alternative/index.js"),n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),a=require("../Control.Bind/index.js"),i=require("../Control.Plus/index.js"),u=require("../Data.Array/index.js"),o=require("../Data.Either/index.js"),l=require("../Data.Foldable/index.js"),c=require("../Data.Function/index.js"),f=require("../Data.Functor/index.js"),s=require("../Data.List/index.js"),m=require("../Data.List.Types/index.js"),p=require("../Data.Map.Internal/index.js"),h=require("../Data.Maybe/index.js"),v=require("../Data.Monoid/index.js"),d=require("../Data.Unit/index.js"),w=function(t,e){this.compact=t,this.separate=e},g=function(e){return function(r){return function(a){return l.foldl(r)(function(r){return function(a){if(a instanceof o.Left)return{left:t.alt(e.Plus1().Alt0())(r.left)(n.pure(e.Applicative0())(a.value0)),right:r.right};if(a instanceof o.Right)return{right:t.alt(e.Plus1().Alt0())(r.right)(n.pure(e.Applicative0())(a.value0)),left:r.left};throw new Error("Failed pattern match at Data.Compactable (line 113, column 14 - line 115, column 54): "+[a.constructor.name])}})({left:i.empty(e.Plus1()),right:i.empty(e.Plus1())})}}},b=function(t){return t.separate},y=function(t){return p.toUnfoldable(m.unfoldableList)},D=new w(a.join(h.bindMaybe),function(t){if(t instanceof h.Nothing)return{left:h.Nothing.value,right:h.Nothing.value};if(t instanceof h.Just){if(t.value0 instanceof o.Left)return{left:new h.Just(t.value0.value0),right:h.Nothing.value};if(t.value0 instanceof o.Right)return{left:h.Nothing.value,right:new h.Just(t.value0.value0)};throw new Error("Failed pattern match at Data.Compactable (line 87, column 23 - line 89, column 48): "+[t.value0.constructor.name])}throw new Error("Failed pattern match at Data.Compactable (line 83, column 1 - line 89, column 48): "+[t.constructor.name])}),L=function(t){return new w((r=l.foldr(m.foldableList)(function(e){return function(n){return p.alter(t)(c.const(e.value1))(e.value0)(n)}})(p.empty),a=y(t),function(t){return r(a(t))}),(e=l.foldr(m.foldableList)(function(e){return function(n){if(e.value1 instanceof o.Left)return{left:p.insert(t)(e.value0)(e.value1.value0)(n.left),right:n.right};if(e.value1 instanceof o.Right)return{left:n.left,right:p.insert(t)(e.value0)(e.value1.value0)(n.right)};throw new Error("Failed pattern match at Data.Compactable (line 124, column 44 - line 126, column 63): "+[e.value1.constructor.name])}})({left:p.empty,right:p.empty}),n=y(t),function(t){return e(n(t))}));var e,n,r,a},j=new w(s.catMaybes,function(t){return g(m.alternativeList)(m.foldableList)(j)(t)}),x=function(t){return new w(function(e){if(e instanceof o.Left)return new o.Left(e.value0);if(e instanceof o.Right){if(e.value0 instanceof h.Just)return new o.Right(e.value0.value0);if(e.value0 instanceof h.Nothing)return new o.Left(v.mempty(t));throw new Error("Failed pattern match at Data.Compactable (line 93, column 23 - line 95, column 27): "+[e.value0.constructor.name])}throw new Error("Failed pattern match at Data.Compactable (line 91, column 1 - line 100, column 53): "+[e.constructor.name])},function(e){if(e instanceof o.Left)return{left:new o.Left(e.value0),right:new o.Left(e.value0)};if(e instanceof o.Right){if(e.value0 instanceof o.Left)return{left:new o.Right(e.value0.value0),right:new o.Left(v.mempty(t))};if(e.value0 instanceof o.Right)return{left:new o.Left(v.mempty(t)),right:new o.Right(e.value0.value0)};throw new Error("Failed pattern match at Data.Compactable (line 98, column 24 - line 100, column 53): "+[e.value0.constructor.name])}throw new Error("Failed pattern match at Data.Compactable (line 91, column 1 - line 100, column 53): "+[e.constructor.name])})},q=new w(u.catMaybes,function(t){return g(e.alternativeArray)(l.foldableArray)(q)(t)}),C=function(t){return function(e){var n=b(e),r=f.map(t)(o.note(d.unit));return function(t){return n(r(t)).right}}},E=function(t){return t.compact},A=function(t){return function(e){return function(n){return{left:E(e)(f.map(t)(function(t){return o.hush(function(t){if(t instanceof o.Left)return new o.Right(t.value0);if(t instanceof o.Right)return new o.Left(t.value0);throw new Error("Failed pattern match at Data.Compactable (line 79, column 20 - line 81, column 24): "+[t.constructor.name])}(t))})(n)),right:E(e)(f.map(t)(o.hush)(n))}}}},F=function(t){return function(e){return function(n){var r=E(e),i=a.bind(t)(n);return function(t){return r(i(t))}}}},R=function(t){return function(e){return function(n){var r=b(e),i=a.bind(t)(n);return function(t){return r(i(t))}}}},M=function(t){return function(e){return function(n){var a=E(e),i=r.apply(t)(n);return function(t){return a(i(t))}}}},N=function(t){return function(e){return function(n){var a=b(e),i=r.apply(t)(n);return function(t){return a(i(t))}}}};module.exports={Compactable:w,compact:E,separate:b,compactDefault:C,separateDefault:A,applyMaybe:M,applyEither:N,bindMaybe:F,bindEither:R,compactableMaybe:D,compactableEither:x,compactableArray:q,compactableList:j,compactableMap:L};
-},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Plus/index.js":"oMBg","../Data.Array/index.js":"4t4C","../Data.Either/index.js":"B2JL","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Unit/index.js":"NhVk"}],"6hfS":[function(require,module,exports) {
-"use strict";var t=require("../Control.Bind/index.js"),n=require("../Data.Array/index.js"),e=require("../Data.Compactable/index.js"),r=require("../Data.Either/index.js"),i=require("../Data.Foldable/index.js"),u=require("../Data.Function/index.js"),a=require("../Data.Functor/index.js"),o=require("../Data.HeytingAlgebra/index.js"),l=require("../Data.List/index.js"),f=require("../Data.List.Types/index.js"),c=require("../Data.Map.Internal/index.js"),s=require("../Data.Maybe/index.js"),h=require("../Data.Monoid/index.js"),m=require("../Data.Semigroup/index.js"),p=function(t,n,e,r,i,u){this.Compactable0=t,this.Functor1=n,this.filter=e,this.filterMap=r,this.partition=i,this.partitionMap=u},g=function(t){return function(n){var r=e.separate(t.Compactable0()),i=a.map(t.Functor1())(n);return function(t){return r(i(t))}}},b=function(t){return t.partitionMap},d=function(t){return t.partition},v=function(t){return function(n){return t(n)?new s.Just(n):s.Nothing.value}},w=new p(function(){return e.compactableList},function(){return f.functorList},l.filter,function(t){return l.mapMaybe(t)},function(t){return function(n){return i.foldr(f.foldableList)(function(n){return function(e){return t(n)?{no:e.no,yes:new f.Cons(n,e.yes)}:{no:new f.Cons(n,e.no),yes:e.yes}}})({no:f.Nil.value,yes:f.Nil.value})(n)}},function(t){return function(n){return i.foldr(f.foldableList)(function(n){return function(e){var i=t(n);if(i instanceof r.Left)return{left:new f.Cons(i.value0,e.left),right:e.right};if(i instanceof r.Right)return{left:e.left,right:new f.Cons(i.value0,e.right)};throw new Error("Failed pattern match at Data.Filterable (line 190, column 36 - line 192, column 83): "+[i.constructor.name])}})({left:f.Nil.value,right:f.Nil.value})(n)}}),y=new p(function(){return e.compactableArray},function(){return a.functorArray},n.filter,n.mapMaybe,n.partition,function(t){return i.foldl(i.foldableArray)(function(n){return function(e){var i=t(e);if(i instanceof r.Left)return{left:m.append(m.semigroupArray)(n.left)([i.value0]),right:n.right};if(i instanceof r.Right)return{right:m.append(m.semigroupArray)(n.right)([i.value0]),left:n.left};throw new Error("Failed pattern match at Data.Filterable (line 149, column 16 - line 151, column 50): "+[i.constructor.name])}})({left:[],right:[]})}),D=function(t){return function(n){var r=e.compact(t.Compactable0()),i=a.map(t.Functor1())(n);return function(t){return r(i(t))}}},F=function(t){return t.filterMap},L=function(t){return function(n){return function(e){return{yes:F(t)(v(n))(e),no:F(t)(v(o.not(o.heytingAlgebraFunction(o.heytingAlgebraBoolean))(n)))(e)}}}},M=function(t){return function(n){return function(e){return d(t)(n)(e).yes}}},x=function(t){var n=F(t);return function(t){return n(v(t))}},j=function(t){return t.filter},q=function(t){return function(n){return function(e){return{yes:j(t)(n)(e),no:j(t)(o.not(o.heytingAlgebraFunction(o.heytingAlgebraBoolean))(n))(e)}}}},E=function(t){return function(n){return t(n)?new r.Right(n):new r.Left(n)}},A=function(t){return function(n){return function(e){return b(t)(E(n))(e).right}}},N=function(t){return function(n){return function(e){var r=b(t)(E(n))(e);return{no:r.left,yes:r.right}}}},R=function t(n){return new p(function(){return e.compactableEither(n)},function(){return r.functorEither},function(e){return x(t(n))(e)},function(t){return function(e){if(e instanceof r.Left)return new r.Left(e.value0);if(e instanceof r.Right){var i=t(e.value0);if(i instanceof s.Nothing)return new r.Left(h.mempty(n));if(i instanceof s.Just)return new r.Right(i.value0);throw new Error("Failed pattern match at Data.Filterable (line 180, column 27 - line 182, column 22): "+[i.constructor.name])}throw new Error("Failed pattern match at Data.Filterable (line 171, column 1 - line 184, column 29): "+[t.constructor.name,e.constructor.name])}},function(e){return N(t(n))(e)},function(t){return function(e){if(e instanceof r.Left)return{left:new r.Left(e.value0),right:new r.Left(e.value0)};if(e instanceof r.Right){var i=t(e.value0);if(i instanceof r.Left)return{left:new r.Right(i.value0),right:new r.Left(h.mempty(n))};if(i instanceof r.Right)return{left:new r.Left(h.mempty(n)),right:new r.Right(i.value0)};throw new Error("Failed pattern match at Data.Filterable (line 173, column 30 - line 175, column 53): "+[i.constructor.name])}throw new Error("Failed pattern match at Data.Filterable (line 171, column 1 - line 184, column 29): "+[t.constructor.name,e.constructor.name])}})},C=function t(n){return new p(function(){return e.compactableMap(n)},function(){return c.functorMap},function(e){return x(t(n))(e)},function(t){return function(e){var r=c.toUnfoldable(f.unfoldableList);return i.foldr(f.foldableList)(function(e){return function(r){return c.alter(n)(u.const(t(e.value1)))(e.value0)(r)}})(c.empty)(r(e))}},function(e){return N(t(n))(e)},function(t){return function(e){var u=c.toUnfoldable(f.unfoldableList);return i.foldr(f.foldableList)(function(e){return function(i){var u=t(e.value1);if(u instanceof r.Left)return{left:c.insert(n)(e.value0)(u.value0)(i.left),right:i.right};if(u instanceof r.Right)return{left:i.left,right:c.insert(n)(e.value0)(u.value0)(i.right)};throw new Error("Failed pattern match at Data.Filterable (line 215, column 44 - line 217, column 57): "+[u.constructor.name])}})({left:c.empty,right:c.empty})(u(e))}})},B=new p(function(){return e.compactableMaybe},function(){return s.functorMaybe},function(t){return x(B)(t)},t.bindFlipped(s.bindMaybe),function(t){return N(B)(t)},function(t){return function(n){if(n instanceof s.Nothing)return{left:s.Nothing.value,right:s.Nothing.value};if(n instanceof s.Just){var e=t(n.value0);if(e instanceof r.Left)return{left:new s.Just(e.value0),right:s.Nothing.value};if(e instanceof r.Right)return{left:s.Nothing.value,right:new s.Just(e.value0)};throw new Error("Failed pattern match at Data.Filterable (line 161, column 29 - line 163, column 48): "+[e.constructor.name])}throw new Error("Failed pattern match at Data.Filterable (line 159, column 1 - line 169, column 29): "+[t.constructor.name,n.constructor.name])}}),J=function(t){return F(t)(u.const(s.Nothing.value))};module.exports={Filterable:p,partitionMap:b,partition:d,filterMap:F,filter:j,eitherBool:E,partitionDefault:N,partitionDefaultFilter:q,partitionDefaultFilterMap:L,partitionMapDefault:g,maybeBool:v,filterDefault:x,filterDefaultPartition:M,filterDefaultPartitionMap:A,filterMapDefault:D,cleared:J,filterableArray:y,filterableMaybe:B,filterableEither:R,filterableList:w,filterableMap:C};
-},{"../Control.Bind/index.js":"7VcT","../Data.Array/index.js":"4t4C","../Data.Compactable/index.js":"jHR9","../Data.Either/index.js":"B2JL","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Semigroup/index.js":"EsAJ"}],"AuzG":[function(require,module,exports) {
-"use strict";var n=require("../Data.Maybe/index.js"),t=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),e=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),r=function(){function n(n,t){this.value0=n,this.value1=t}return n.create=function(t){return function(e){return new n(t,e)}},n}(),u=function(){function n(){}return n.value=new n,n}(),o=function(n){return n},i=function(n){return n},c=function(n,t){this.from=n,this.to=t},a=function(n){return n.to},f=new c(function(r){if(r instanceof n.Nothing)return new t(u.value);if(r instanceof n.Just)return new e(r.value0);throw new Error("Failed pattern match at Data.Generic.Rep (line 40, column 1 - line 47, column 49): "+[r.constructor.name])},function(r){if(r instanceof t)return n.Nothing.value;if(r instanceof e)return new n.Just(r.value0);throw new Error("Failed pattern match at Data.Generic.Rep (line 40, column 1 - line 47, column 49): "+[r.constructor.name])}),l=function(n){return n.from};module.exports={Generic:c,to:a,from:l,NoArguments:u,Inl:t,Inr:e,Product:r,Constructor:o,Argument:i,genericMaybe:f};
-},{"../Data.Maybe/index.js":"5mN7"}],"lpst":[function(require,module,exports) {
-"use strict";var n=require("../Data.Foldable/index.js"),e=require("../Data.Generic.Rep/index.js"),r=require("../Data.Monoid/index.js"),t=require("../Data.Semigroup/index.js"),o=require("../Data.Show/index.js"),i=require("../Data.Symbol/index.js"),u=function(n){this.genericShowArgs=n},c=function(n){this["genericShow'"]=n},a=new u(function(n){return[]}),s=function(n){return new u(function(e){return[o.show(n)(e)]})},f=function(n){return n.genericShowArgs},g=function(n){return function(e){return new u(function(r){return t.append(t.semigroupArray)(f(n)(r.value0))(f(e)(r.value1))})}},w=function(e){return function(o){return new c(function(u){var c=i.reflectSymbol(o)(i.SProxy.value),a=f(e)(u);return 0===a.length?c:"("+n.intercalate(n.foldableArray)(r.monoidString)(" ")(t.append(t.semigroupArray)([c])(a))+")"})}},h=function(n){return n["genericShow'"]},S=new c(function(n){return h(S)(n)}),l=function(n){return function(r){return new c(function(t){if(t instanceof e.Inl)return h(n)(t.value0);if(t instanceof e.Inr)return h(r)(t.value0);throw new Error("Failed pattern match at Data.Generic.Rep.Show (line 26, column 1 - line 28, column 40): "+[t.constructor.name])})}},d=function(n){return function(r){return function(t){return h(r)(e.from(n)(t))}}};module.exports={GenericShow:c,"genericShow'":h,genericShow:d,GenericShowArgs:u,genericShowArgs:f,genericShowNoConstructors:S,genericShowArgsNoArguments:a,genericShowSum:l,genericShowArgsProduct:g,genericShowConstructor:w,genericShowArgsArgument:s};
-},{"../Data.Foldable/index.js":"eVDl","../Data.Generic.Rep/index.js":"AuzG","../Data.Monoid/index.js":"TiEB","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Symbol/index.js":"4oJQ"}],"89+t":[function(require,module,exports) {
-"use strict";var n=require("../Data.Functor/index.js"),r=require("../Data.Void/index.js"),t=function(n){this.cmap=n},u=function(n){return n.cmap},e=function(n){return function(r){return function(t){return u(n)(t)(r)}}},i=function(t){return function(e){return function(i){return n.map(e)(r.absurd)(u(t)(r.absurd)(i))}}},c=function(n){return function(r){return function(r){return u(n)(r)}}};module.exports={cmap:u,Contravariant:t,cmapFlipped:e,coerce:i,imapC:c};
-},{"../Data.Functor/index.js":"+0AE","../Data.Void/index.js":"bncE"}],"OmNG":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Semigroupoid/index.js"),e=require("../Data.Bifoldable/index.js"),u=require("../Data.Bifunctor/index.js"),i=require("../Data.Bitraversable/index.js"),o=require("../Data.Eq/index.js"),c=require("../Data.Foldable/index.js"),f=require("../Data.FoldableWithIndex/index.js"),a=require("../Data.Functor/index.js"),s=require("../Data.Functor.Contravariant/index.js"),d=require("../Data.Functor.Invariant/index.js"),l=require("../Data.FunctorWithIndex/index.js"),p=require("../Data.Monoid/index.js"),C=require("../Data.Newtype/index.js"),x=require("../Data.Ord/index.js"),q=require("../Data.Semigroup/index.js"),b=require("../Data.Show/index.js"),w=require("../Data.Traversable/index.js"),m=require("../Data.TraversableWithIndex/index.js"),j=function(n){return n},v=function(n){return new b.Show(function(r){return"(Const "+b.show(n)(r)+")"})},D=function(n){return n},h=new t.Semigroupoid(function(n){return function(n){return n}}),g=function(n){return n},F=function(n){return n},y=function(n){return n},I=new C.Newtype(function(n){return n},j),W=function(n){return n},A=function(n){return n},B=new a.Functor(function(n){return function(n){return n}}),S=new l.FunctorWithIndex(function(){return B},function(n){return function(n){return n}}),T=new d.Invariant(d.imapF(B)),E=new c.Foldable(function(n){return function(r){return function(r){return p.mempty(n)}}},function(n){return function(n){return function(r){return n}}},function(n){return function(n){return function(r){return n}}}),N=new f.FoldableWithIndex(function(){return E},function(n){return function(r){return function(r){return p.mempty(n)}}},function(n){return function(n){return function(r){return n}}},function(n){return function(n){return function(r){return n}}}),O=new w.Traversable(function(){return E},function(){return B},function(r){return function(t){return n.pure(r)(t)}},function(r){return function(t){return function(t){return n.pure(r)(t)}}}),R=new m.TraversableWithIndex(function(){return N},function(){return S},function(){return O},function(r){return function(t){return function(t){return n.pure(r)(t)}}}),M=function(n){return n},k=function(n){return n},z=function(n){return new o.Eq1(function(r){return o.eq(k(n))})},G=function(n){return new x.Ord1(function(){return z(n.Eq0())},function(r){return x.compare(y(n))})},H=new s.Contravariant(function(n){return function(n){return n}}),J=function(n){return n},K=function(n){return n},L=function(n){return n},P=new u.Bifunctor(function(n){return function(r){return function(r){return n(r)}}}),Q=new e.Bifoldable(function(n){return function(n){return function(r){return function(r){return n(r)}}}},function(n){return function(r){return function(r){return function(t){return n(r)(t)}}}},function(n){return function(r){return function(r){return function(t){return n(t)(r)}}}}),U=new i.Bitraversable(function(){return Q},function(){return P},function(n){return function(r){return a.map(n.Apply0().Functor0())(j)(r)}},function(n){return function(r){return function(t){return function(t){return a.map(n.Apply0().Functor0())(j)(r(t))}}}}),V=function(n){return new r.Apply(function(){return B},function(r){return function(t){return q.append(n)(r)(t)}})},X=function(r){return new n.Applicative(function(){return V(r.Semigroup0())},function(n){return p.mempty(r)})};module.exports={Const:j,newtypeConst:I,eqConst:k,eq1Const:z,ordConst:y,ord1Const:G,boundedConst:K,showConst:v,semigroupoidConst:h,semigroupConst:g,monoidConst:W,semiringConst:D,ringConst:F,euclideanRingConst:M,commutativeRingConst:J,heytingAlgebraConst:A,booleanAlgebraConst:L,functorConst:B,bifunctorConst:P,functorWithIndexConst:S,invariantConst:T,contravariantConst:H,applyConst:V,applicativeConst:X,foldableConst:E,foldableWithIndexConst:N,bifoldableConst:Q,traversableConst:O,traversableWithIndexConst:R,bitraversableConst:U};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Semigroupoid/index.js":"/riR","../Data.Bifoldable/index.js":"wjQo","../Data.Bifunctor/index.js":"e2Wc","../Data.Bitraversable/index.js":"8nb9","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Functor/index.js":"+0AE","../Data.Functor.Contravariant/index.js":"89+t","../Data.Functor.Invariant/index.js":"AXkC","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF"}],"0DaD":[function(require,module,exports) {
-"use strict";var n=require("../Control.Category/index.js"),r=require("../Data.Newtype/index.js"),t=function(n){this.dimap=n},u=new t(function(n){return function(r){return function(t){return function(u){return r(t(n(u)))}}}}),e=function(n){return n.dimap},i=function(r){return function(t){return e(r)(t)(n.identity(n.categoryFn))}},o=function(r){return function(t){return e(r)(n.identity(n.categoryFn))(t)}},c=function(n){return function(t){return e(n)(r.wrap(t))(r.unwrap(t))}},f=function(n){return function(t){return function(u){return e(n)(r.unwrap(t))(r.wrap(t))}}},a=function(r){return function(t){return function(u){return o(t)(u)(n.identity(r))}}};module.exports={dimap:e,Profunctor:t,lcmap:i,rmap:o,arr:a,unwrapIso:c,wrapIso:f,profunctorFn:u};
-},{"../Control.Category/index.js":"IAi2","../Data.Newtype/index.js":"lz8k"}],"nkqb":[function(require,module,exports) {
-"use strict";var t=require("../Control.Category/index.js"),n=require("../Control.Semigroupoid/index.js"),r=require("../Data.Either/index.js"),e=require("../Data.Functor/index.js"),i=require("../Data.Profunctor/index.js"),o=function(t,n,r){this.Profunctor0=t,this.left=n,this.right=r},u=function(t){return t.right},c=function(t){return t.left},f=function(t){return function(r){return function(e){return function(i){return n.composeFlipped(t.Semigroupoid0())(c(r)(e))(u(r)(i))}}}},a=function(e){return function(o){return function(u){return function(c){var a=i.dimap(o.Profunctor0())(r.either(t.identity(t.categoryFn))(t.identity(t.categoryFn)))(t.identity(t.categoryFn))(t.identity(e));return n.composeFlipped(e.Semigroupoid0())(f(e)(o)(u)(c))(a)}}}},s=new o(function(){return i.profunctorFn},function(t){return function(n){if(n instanceof r.Left)return r.Left.create(t(n.value0));if(n instanceof r.Right)return new r.Right(n.value0);throw new Error("Failed pattern match at Data.Profunctor.Choice (line 32, column 1 - line 35, column 16): "+[t.constructor.name,n.constructor.name])}},e.map(r.functorEither));module.exports={left:c,right:u,Choice:o,splitChoice:f,fanin:a,choiceFn:s};
-},{"../Control.Category/index.js":"IAi2","../Control.Semigroupoid/index.js":"/riR","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Profunctor/index.js":"0DaD"}],"af4y":[function(require,module,exports) {
-"use strict";var o=require("../Control.Semigroupoid/index.js"),e=require("../Data.Profunctor/index.js"),r=function(o,e){this.Profunctor0=o,this.closed=e},n=new r(function(){return e.profunctorFn},o.compose(o.semigroupoidFn)),t=function(o){return o.closed};module.exports={closed:t,Closed:r,closedFunction:n};
-},{"../Control.Semigroupoid/index.js":"/riR","../Data.Profunctor/index.js":"0DaD"}],"w9p6":[function(require,module,exports) {
-"use strict";var n=require("../Control.Category/index.js"),r=require("../Control.Semigroupoid/index.js"),t=require("../Data.Functor/index.js"),e=require("../Data.Profunctor/index.js"),u=require("../Data.Tuple/index.js"),o=function(n,r,t){this.Profunctor0=n,this.first=r,this.second=t},i=new o(function(){return e.profunctorFn},function(n){return function(r){return new u.Tuple(n(r.value0),r.value1)}},t.map(u.functorTuple)),c=function(n){return n.second},f=function(n){return n.first},s=function(n){return function(t){return function(e){return function(u){return r.composeFlipped(n.Semigroupoid0())(f(t)(e))(c(t)(u))}}}},p=function(t){return function(o){return function(i){return function(c){var f=e.dimap(o.Profunctor0())(n.identity(n.categoryFn))(function(n){return new u.Tuple(n,n)})(n.identity(t));return r.composeFlipped(t.Semigroupoid0())(f)(s(t)(o)(i)(c))}}}};module.exports={first:f,second:c,Strong:o,splitStrong:s,fanout:p,strongFn:i};
-},{"../Control.Category/index.js":"IAi2","../Control.Semigroupoid/index.js":"/riR","../Data.Functor/index.js":"+0AE","../Data.Profunctor/index.js":"0DaD","../Data.Tuple/index.js":"II/O"}],"tj5E":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),r=require("../Control.Alternative/index.js"),t=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),i=require("../Control.Category/index.js"),o=require("../Control.Monad/index.js"),c=require("../Control.MonadPlus/index.js"),a=require("../Control.MonadZero/index.js"),f=require("../Control.Plus/index.js"),l=require("../Control.Semigroupoid/index.js"),p=require("../Data.Distributive/index.js"),d=require("../Data.Either/index.js"),s=require("../Data.Functor/index.js"),v=require("../Data.Functor.Invariant/index.js"),S=require("../Data.Newtype/index.js"),w=require("../Data.Profunctor/index.js"),x=require("../Data.Profunctor.Choice/index.js"),j=require("../Data.Profunctor.Closed/index.js"),q=require("../Data.Profunctor.Strong/index.js"),A=require("../Data.Tuple/index.js"),C=function(n){return n},m=function(n){return new l.Semigroupoid(function(r){return function(t){return function(e){return u.bind(n)(t(e))(r)}}})},y=function(n){return new w.Profunctor(function(r){return function(t){return function(e){var u=s.map(n)(t);return function(n){return u(e(r(n)))}}}})},D=function(n){return new q.Strong(function(){return y(n)},function(r){return function(t){return s.map(n)(function(n){return new A.Tuple(n,t.value1)})(r(t.value0))}},function(r){return function(t){return s.map(n)(A.Tuple.create(t.value0))(r(t.value1))}})},g=new S.Newtype(function(n){return n},C),F=function(n){return new v.Invariant(function(r){return function(t){return function(e){var u=v.imap(n)(r)(t);return function(n){return u(e(n))}}}})},P=function(n){return function(r){return function(t){return n(r(t))}}},h=function(n){return new s.Functor(function(r){return function(t){var e=s.map(n)(r);return function(n){return e(t(n))}}})},b=function n(r){return new p.Distributive(function(){return h(r.Functor0())},function(t){return function(e){var u=p.distribute(n(r))(t),i=s.map(t)(e);return function(n){return u(i(n))}}},function(n){return function(t){return function(e){return p.collect(r)(n)(function(n){return n(e)})(t)}}})},M=function(n){return new j.Closed(function(){return y(n.Functor0())},function(r){return function(t){return p.distribute(n)(s.functorFn)(function(n){return r(t(n))})}})},B=function(n){return new x.Choice(function(){return y(n.Apply0().Functor0())},function(r){return C(d.either((u=s.map(n.Apply0().Functor0())(d.Left.create),function(n){return u(r(n))}))((e=t.pure(n),function(n){return e(d.Right.create(n))})));var e,u},function(r){return C(d.either((u=t.pure(n),function(n){return u(d.Left.create(n))}))((e=s.map(n.Apply0().Functor0())(d.Right.create),function(n){return e(r(n))})));var e,u})},Z=function(n){return new i.Category(function(){return m(n.Bind1())},t.pure(n.Applicative0()))},T=function(n){return new e.Apply(function(){return h(n.Functor0())},function(r){return function(t){return function(u){return e.apply(n)(r(u))(t(u))}}})},I=function(n){return new u.Bind(function(){return T(n.Apply0())},function(r){return function(t){return function(e){return u.bind(n)(r(e))(function(n){return t(n)(e)})}}})},L=function(n){return new t.Applicative(function(){return T(n.Apply0())},function(r){return function(e){return t.pure(n)(r)}})},N=function(n){return new o.Monad(function(){return L(n.Applicative0())},function(){return I(n.Bind1())})},R=function(r){return new n.Alt(function(){return h(r.Functor0())},function(t){return function(e){return function(u){return n.alt(r)(t(u))(e(u))}}})},E=function(n){return new f.Plus(function(){return R(n.Alt0())},function(r){return f.empty(n)})},k=function(n){return new r.Alternative(function(){return L(n.Applicative0())},function(){return E(n.Plus1())})},z=function(n){return new a.MonadZero(function(){return k(n.Alternative1())},function(){return N(n.Monad0())})},G=function(n){return new c.MonadPlus(function(){return z(n.MonadZero0())})};module.exports={Star:C,hoistStar:P,newtypeStar:g,semigroupoidStar:m,categoryStar:Z,functorStar:h,invariantStar:F,applyStar:T,applicativeStar:L,bindStar:I,monadStar:N,altStar:R,plusStar:E,alternativeStar:k,monadZeroStar:z,monadPlusStar:G,distributiveStar:b,profunctorStar:y,strongStar:D,choiceStar:B,closedStar:M};
-},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad/index.js":"U/Ix","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Control.Semigroupoid/index.js":"/riR","../Data.Distributive/index.js":"8PTu","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Functor.Invariant/index.js":"AXkC","../Data.Newtype/index.js":"lz8k","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Choice/index.js":"nkqb","../Data.Profunctor.Closed/index.js":"af4y","../Data.Profunctor.Strong/index.js":"w9p6","../Data.Tuple/index.js":"II/O"}],"i7fd":[function(require,module,exports) {
-"use strict";var n=require("../Data.Functor/index.js"),t=require("../Data.Identity/index.js"),r=require("../Data.Newtype/index.js"),e=require("../Data.Profunctor.Choice/index.js"),i=require("../Data.Profunctor.Star/index.js"),u=require("../Data.Profunctor.Strong/index.js"),o=function(n,t,r){this.Choice1=n,this.Strong0=t,this.wander=r},a=function(n){return new o(function(){return i.choiceStar(n)},function(){return i.strongStar(n.Apply0().Functor0())},function(t){return function(r){return t(n)(r)}})},c=new o(function(){return e.choiceFn},function(){return u.strongFn},function(e){return r.alaF(n.functorFn)(n.functorFn)(t.newtypeIdentity)(t.newtypeIdentity)(t.Identity)(e(t.applicativeIdentity))}),d=function(n){return n.wander};module.exports={wander:d,Wander:o,wanderFunction:c,wanderStar:a};
-},{"../Data.Functor/index.js":"+0AE","../Data.Identity/index.js":"2OKT","../Data.Newtype/index.js":"lz8k","../Data.Profunctor.Choice/index.js":"nkqb","../Data.Profunctor.Star/index.js":"tj5E","../Data.Profunctor.Strong/index.js":"w9p6"}],"FnLc":[function(require,module,exports) {
-"use strict";var t=function(t,n,u){this.Profunctor0=t,this.unleft=n,this.unright=u},n=function(t){return t.unright},u=function(t){return t.unleft};module.exports={unleft:u,unright:n,Cochoice:t};
-},{}],"mj9z":[function(require,module,exports) {
-"use strict";var n=require("../Data.Const/index.js"),r=require("../Data.Either/index.js"),e=require("../Data.Functor/index.js"),t=require("../Data.Lens.Internal.Wander/index.js"),o=require("../Data.Monoid/index.js"),u=require("../Data.Newtype/index.js"),i=require("../Data.Profunctor/index.js"),c=require("../Data.Profunctor.Choice/index.js"),f=require("../Data.Profunctor.Cochoice/index.js"),a=require("../Data.Profunctor.Strong/index.js"),s=require("../Data.Semigroup/index.js"),d=require("../Data.Tuple/index.js"),F=function(n){return n},g=function(n){return s.semigroupFn(n)},p=new i.Profunctor(function(n){return function(r){return function(r){return function(e){return r(n(e))}}}}),x=new a.Strong(function(){return p},function(n){return function(r){return n(d.fst(r))}},function(n){return function(r){return n(d.snd(r))}}),j=new u.Newtype(function(n){return n},F),m=function(n){return o.monoidFn(n)},q=new f.Cochoice(function(){return p},function(n){return function(e){return n(r.Left.create(e))}},function(n){return function(e){return n(r.Right.create(e))}}),w=function(n){return new c.Choice(function(){return p},function(e){return r.either(e)(o.mempty(o.monoidFn(n)))},function(e){return r.either(o.mempty(o.monoidFn(n)))(e)})},D=function(r){return new t.Wander(function(){return w(r)},function(){return x},function(t){return function(o){return u.alaF(e.functorFn)(e.functorFn)(n.newtypeConst)(n.newtypeConst)(n.Const)(t(n.applicativeConst(r)))(o)}})};module.exports={Forget:F,newtypeForget:j,semigroupForget:g,monoidForget:m,profunctorForget:p,choiceForget:w,strongForget:x,cochoiceForget:q,wanderForget:D};
-},{"../Data.Const/index.js":"OmNG","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Lens.Internal.Wander/index.js":"i7fd","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Choice/index.js":"nkqb","../Data.Profunctor.Cochoice/index.js":"FnLc","../Data.Profunctor.Strong/index.js":"w9p6","../Data.Semigroup/index.js":"EsAJ","../Data.Tuple/index.js":"II/O"}],"V4/H":[function(require,module,exports) {
-"use strict";var e=require("../Data.Either/index.js"),n=require("../Data.Lens.Internal.Wander/index.js"),r=require("../Data.Newtype/index.js"),t=require("../Data.Profunctor/index.js"),u=require("../Data.Profunctor.Choice/index.js"),o=require("../Data.Profunctor.Strong/index.js"),c=require("../Data.Tuple/index.js"),i=function(e){return e},a=function(e){return new t.Profunctor(function(n){return function(r){return function(u){return t.dimap(e)(o.second(o.strongFn)(n))(r)(u)}}})},f=function(e){return new o.Strong(function(){return a(e.Profunctor0())},function(n){return i(t.lcmap(e.Profunctor0())(function(e){return new c.Tuple(new c.Tuple(e.value0,e.value1.value0),e.value1.value1)})(o.first(e)(n)))},function(n){return i(t.lcmap(e.Profunctor0())(function(e){return new c.Tuple(e.value1.value0,new c.Tuple(e.value0,e.value1.value1))})(o.second(e)(n)))})},l=new r.Newtype(function(e){return e},i),d=function(n){return new u.Choice(function(){return a(n.Profunctor0())},function(r){return i(t.lcmap(n.Profunctor0())(function(n){return e.either((r=c.Tuple.create(n.value0),function(n){return e.Left.create(r(n))}))(e.Right.create)(n.value1);var r})(u.left(n)(r)))},function(r){return i(t.lcmap(n.Profunctor0())(function(n){return e.either(e.Left.create)((r=c.Tuple.create(n.value0),function(n){return e.Right.create(r(n))}))(n.value1);var r})(u.right(n)(r)))})},v=function(e){return new n.Wander(function(){return d(e.Choice1())},function(){return f(e.Strong0())},function(r){return function(t){return i(n.wander(e)(function(e){return function(n){return function(t){return r(e)((u=c.Tuple.create(t.value0),function(e){return n(u(e))}))(t.value1);var u}}})(t))}})};module.exports={Indexed:i,newtypeIndexed:l,profunctorIndexed:a,strongIndexed:f,choiceIndexed:d,wanderIndexed:v};
-},{"../Data.Either/index.js":"B2JL","../Data.Lens.Internal.Wander/index.js":"i7fd","../Data.Newtype/index.js":"lz8k","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Choice/index.js":"nkqb","../Data.Profunctor.Strong/index.js":"w9p6","../Data.Tuple/index.js":"II/O"}],"OPOX":[function(require,module,exports) {
-"use strict";var n=require("../Control.Category/index.js"),e=require("../Control.Monad.State.Class/index.js"),t=require("../Data.Lens.Internal.Forget/index.js"),r=require("../Data.Lens.Internal.Indexed/index.js"),u=require("../Data.Newtype/index.js"),o=require("../Data.Profunctor.Strong/index.js"),i=function(e){return u.unwrap(t.newtypeForget)(e(n.identity(n.categoryFn)))},a=function(n){return function(e){return i(e)(n)}},c=function(n){return function(t){return e.gets(n)(function(n){return a(n)(t)})}},s=function(n){return function(e){var r=u.unwrap(t.newtypeForget)(e);return function(e){return r(n(e))}}},f=function(e){return function(t){return s(o.fanout(n.categoryFn)(o.strongFn)(i(e))(i(t)))}},d=function(e){return u.unwrap(t.newtypeForget)(e(r.Indexed(n.identity(n.categoryFn))))},g=function(n){return function(t){return e.gets(n)(d(t))}},w=function(n){return s(i(n))};module.exports={viewOn:a,view:i,to:s,takeBoth:f,use:c,iview:d,iuse:g,cloneGetter:w};
-},{"../Control.Category/index.js":"IAi2","../Control.Monad.State.Class/index.js":"u1pL","../Data.Lens.Internal.Forget/index.js":"mj9z","../Data.Lens.Internal.Indexed/index.js":"V4/H","../Data.Newtype/index.js":"lz8k","../Data.Profunctor.Strong/index.js":"w9p6"}],"eUa0":[function(require,module,exports) {
-"use strict";var n=require("../Data.Functor/index.js"),r=require("../Data.Profunctor/index.js"),u=function(){function n(n,r){this.value0=n,this.value1=r}return n.create=function(r){return function(u){return new n(r,u)}},n}(),t=new r.Profunctor(function(n){return function(r){return function(t){return new u(function(r){return t.value0(n(r))},function(n){return r(t.value1(n))})}}}),e=new n.Functor(function(n){return function(r){return new u(r.value0,function(u){return n(r.value1(u))})}});module.exports={Exchange:u,functorExchange:e,profunctorExchange:t};
-},{"../Data.Functor/index.js":"+0AE","../Data.Profunctor/index.js":"0DaD"}],"NfU6":[function(require,module,exports) {
-"use strict";var n=function(n,t,u){this.Profunctor0=n,this.unfirst=t,this.unsecond=u},t=function(n){return n.unsecond},u=function(n){return n.unfirst};module.exports={unfirst:u,unsecond:t,Costrong:n};
-},{}],"IZDD":[function(require,module,exports) {
-"use strict";var n=require("../Data.Newtype/index.js"),r=require("../Data.Profunctor/index.js"),t=require("../Data.Profunctor.Choice/index.js"),u=require("../Data.Profunctor.Cochoice/index.js"),e=require("../Data.Profunctor.Costrong/index.js"),o=require("../Data.Profunctor.Strong/index.js"),c=function(n){return n},i=function(n){return new r.Profunctor(function(t){return function(u){return function(e){var o=r.dimap(n)(u)(t);return function(n){return e(o(n))}}}})},f=function(n){return new e.Costrong(function(){return i(n.Profunctor0())},function(r){var t=o.first(n);return function(n){return r(t(n))}},function(r){var t=o.second(n);return function(n){return r(t(n))}})},a=new n.Newtype(function(n){return n},c),s=function(n){return new o.Strong(function(){return i(n.Profunctor0())},function(r){var t=e.unfirst(n);return function(n){return r(t(n))}},function(r){var t=e.unsecond(n);return function(n){return r(t(n))}})},d=function(n){return new t.Choice(function(){return i(n.Profunctor0())},function(r){var t=u.unleft(n);return function(n){return r(t(n))}},function(r){var t=u.unright(n);return function(n){return r(t(n))}})},v=function(n){return new u.Cochoice(function(){return i(n.Profunctor0())},function(r){var u=t.left(n);return function(n){return r(u(n))}},function(r){var u=t.right(n);return function(n){return r(u(n))}})};module.exports={Re:c,newtypeRe:a,profunctorRe:i,choiceRe:v,cochoiceRe:d,strongRe:f,costrongRe:s};
-},{"../Data.Newtype/index.js":"lz8k","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Choice/index.js":"nkqb","../Data.Profunctor.Cochoice/index.js":"FnLc","../Data.Profunctor.Costrong/index.js":"NfU6","../Data.Profunctor.Strong/index.js":"w9p6"}],"fFCp":[function(require,module,exports) {
-"use strict";var n=require("../Control.Category/index.js"),r=require("../Data.Boolean/index.js"),t=require("../Data.Eq/index.js"),u=require("../Data.Function/index.js"),e=require("../Data.Functor/index.js"),i=require("../Data.Lens.Internal.Exchange/index.js"),o=require("../Data.Lens.Internal.Re/index.js"),c=require("../Data.Maybe/index.js"),f=require("../Data.Newtype/index.js"),a=require("../Data.Profunctor/index.js"),d=require("../Data.Tuple/index.js"),s=function(r){return function(t){var u=r(new i.Exchange(n.identity(n.categoryFn),n.identity(n.categoryFn)));return t(u.value0)(u.value1)}},p=function(n){return s(n)(function(n){return function(r){return function(t){return function(u){return n(t(r(u)))}}}})},l=function(r){return f.unwrap(o.newtypeRe)(r(n.identity(n.categoryFn)))},y=function(n){return function(r){return function(t){return function(u){return a.dimap(t)(n)(r)(u)}}}},m=function(n){return function(r){return function(t){return function(u){return s(t)(function(t){return function(i){return y(e.map(n)(t))(e.map(r)(i))(u)}})}}}},x=function(n){return function(u){return function(e){return y(c.fromMaybe(u))(function(e){if(t.eq(n)(e)(u))return c.Nothing.value;if(r.otherwise)return new c.Just(e);throw new Error("Failed pattern match at Data.Lens.Iso (line 45, column 9 - line 46, column 33): "+[e.constructor.name])})(e)}}},q=function(n){return y(d.uncurry)(d.curry)(n)},j=function(n){return y(u.flip)(u.flip)(n)},D=function(n){return function(r){return function(t){return function(u){return function(e){return s(t)(function(t){return function(i){return s(u)(function(u){return function(o){return y(a.dimap(n)(t)(u))(a.dimap(r)(i)(o))(e)}})}})}}}}},g=function(n){return y(d.curry)(d.uncurry)(n)},w=function(n){return function(r){return s(n)(function(n){return function(t){return function(u){return y(n)(t)(r)(u)}}})}},h=function(n){return function(r){return s(r)(function(r){return function(t){return function(u){return function(e){return function(i){return t(u(a.rmap(n)(r)(e))(i))}}}}})}},F=function(n){return s(n)(function(n){return function(r){return function(t){return function(u){return n(t(r)(u))}}}})};module.exports={iso:y,withIso:s,cloneIso:w,re:l,au:F,auf:h,under:p,non:x,curried:g,uncurried:q,flipped:j,mapping:m,dimapping:D};
-},{"../Control.Category/index.js":"IAi2","../Data.Boolean/index.js":"ObQr","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Lens.Internal.Exchange/index.js":"eUa0","../Data.Lens.Internal.Re/index.js":"IZDD","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.Profunctor/index.js":"0DaD","../Data.Tuple/index.js":"II/O"}],"CiFJ":[function(require,module,exports) {
-"use strict";var e=require("../Data.Lens.Iso/index.js"),r=require("../Data.Newtype/index.js"),n=function(n){return function(t){return function(u){return e.iso(r.unwrap(n))(r.wrap(t))(u)}}};module.exports={_Newtype:n};
-},{"../Data.Lens.Iso/index.js":"fFCp","../Data.Newtype/index.js":"lz8k"}],"ONWB":[function(require,module,exports) {
-"use strict";var o=function(o,e,t,s,n,i){this.Monad0=o,this.chooseBool=e,this.chooseFloat=t,this.chooseInt=s,this.resize=n,this.sized=i},e=function(o){return o.sized},t=function(o){return o.resize},s=function(o){return o.chooseInt},n=function(o){return o.chooseFloat},i=function(o){return o.chooseBool};module.exports={chooseBool:i,chooseFloat:n,chooseInt:s,resize:t,sized:e,MonadGen:o};
-},{}],"s7H0":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),e=require("../Control.Bind/index.js"),t=require("../Control.Monad.Gen.Class/index.js"),r=require("../Control.Monad.Rec.Class/index.js"),u=require("../Data.Boolean/index.js"),i=require("../Data.Foldable/index.js"),o=require("../Data.Function/index.js"),a=require("../Data.Functor/index.js"),c=require("../Data.Maybe/index.js"),l=require("../Data.Monoid.Additive/index.js"),d=require("../Data.Newtype/index.js"),f=require("../Data.Semigroup/index.js"),s=require("../Data.Semigroup.Foldable/index.js"),p=require("../Data.Semiring/index.js"),v=require("../Data.Tuple/index.js"),m=require("../Data.Unfoldable/index.js"),w=require("../Data.Unit/index.js"),M=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),h=function(){function n(){}return n.value=new n,n}(),F=function(n){return n},q=function(n){return n},x=function(i){return function(o){return function(l){return function(d){var f,s,p=function(t){if(t.value1<=0)return n.pure(o.Monad0().Applicative0())(new r.Done(t.value0));if(u.otherwise)return e.bind(o.Monad0().Bind1())(d)(function(e){return n.pure(o.Monad0().Applicative0())(new r.Loop(new v.Tuple(new M(e,t.value0),t.value1-1|0)))});throw new Error("Failed pattern match at Control.Monad.Gen (line 93, column 3 - line 93, column 68): "+[t.constructor.name])};return a.map(o.Monad0().Bind1().Apply0().Functor0())(m.unfoldr(l)(function(n){if(n instanceof h)return c.Nothing.value;if(n instanceof M)return new c.Just(new v.Tuple(n.value0,n.value1));throw new Error("Failed pattern match at Control.Monad.Gen (line 101, column 12 - line 103, column 35): "+[n.constructor.name])}))(t.sized(o)((f=r.tailRecM(i)(p),s=v.Tuple.create(h.value),function(n){return f(s(n))})))}}}},j=new f.Semigroup(function(n){return function(e){return function(t){var r=n(t);return r.value0 instanceof c.Just?e(r.value0.value0):r}}}),D=new f.Semigroup(function(n){return function(e){return function(t){return t<=0?n(t):e(t-1|0)}}}),b=function(n){return function(e){return v.snd(n(e))}},g=function(n){return n},A=function(n){return function(e){return e>=n.value0?new v.Tuple(new c.Just(e-n.value0),n.value1):new v.Tuple(c.Nothing.value,n.value1)}},B=function(n){return function(r){return function(u){var o=d.alaF(a.functorFn)(a.functorFn)(d.newtypeAdditive)(d.newtypeAdditive)(l.Additive)(i.foldMap(r.Foldable0())(l.monoidAdditive(p.semiringNumber)))(v.fst)(u);return e.bind(n.Monad0().Bind1())(t.chooseFloat(n)(0)(o))(b(s.foldMap1(r)(j)(A)(u)))}}},C=function(n){return function(e){return function(t){return r.tailRecM(n)(function(n){return a.mapFlipped(e.Monad0().Bind1().Apply0().Functor0())(t)(function(n){if(n instanceof c.Nothing)return new r.Loop(w.unit);if(n instanceof c.Just)return new r.Done(n.value0);throw new Error("Failed pattern match at Control.Monad.Gen (line 117, column 24 - line 119, column 23): "+[n.constructor.name])})})(w.unit)}}},y=function(n){return function(e){return function(t){return function(r){return C(n)(e)(a.mapFlipped(e.Monad0().Bind1().Apply0().Functor0())(t)(function(n){return r(n)?new c.Just(n):c.Nothing.value}))}}}},T=function(n){return function(r){return function(u){return e.bind(n.Monad0().Bind1())(t.chooseBool(n))(function(n){return n?r:u})}}},N=function(n){return q(o.const(n))},J=function(n){return function(e){return function(t){return g(s.foldMap1(n)(D)(N)(t))(e)}}},S=function(r){return function(u){return function(o){return e.bind(r.Monad0().Bind1())(t.chooseInt(r)(0)(i.length(u.Foldable0())(p.semiringInt)(o)-1|0))(function(e){return n.pure(r.Monad0().Applicative0())(J(u)(e)(o))})}}},G=function(n){return function(r){return function(u){return e.bind(n.Monad0().Bind1())(t.chooseInt(n)(0)(i.length(r.Foldable0())(p.semiringInt)(u)-1|0))(function(n){return J(r)(n)(u)})}}};module.exports={choose:T,oneOf:G,frequency:B,elements:S,unfoldable:x,suchThat:y,filtered:C};
-},{"../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Monad.Gen.Class/index.js":"ONWB","../Control.Monad.Rec.Class/index.js":"UVIy","../Data.Boolean/index.js":"ObQr","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Monoid.Additive/index.js":"fHyj","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Semigroup.Foldable/index.js":"ht+A","../Data.Semiring/index.js":"11NF","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unit/index.js":"NhVk"}],"K4TW":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),r=require("../Control.Bind/index.js"),t=require("../Control.Monad.Gen/index.js"),i=require("../Control.Monad.Gen.Class/index.js"),u=require("../Data.Either/index.js"),o=require("../Data.Functor/index.js"),a=require("../Data.Identity/index.js"),d=require("../Data.Maybe/index.js"),c=require("../Data.NonEmpty/index.js"),p=require("../Data.Ord/index.js"),l=require("../Data.Tuple/index.js"),f=function(n){return e.lift2(n)(l.Tuple.create)},s=function(n){return function(r){return function(u){return function(a){return e.apply(r.Monad0().Bind1().Apply0())(o.map(r.Monad0().Bind1().Apply0().Functor0())(c.NonEmpty.create)(a))(i.resize(r)((d=p.max(p.ordInt)(0),function(n){return d(n-1|0)}))(t.unfoldable(n)(r)(u)(a)));var d}}}},y=function(e){return function(t){return function(u){return r.bind(e.Monad0().Bind1())(i.chooseFloat(e)(0)(1))(function(r){return r<t?o.map(e.Monad0().Bind1().Apply0().Functor0())(d.Just.create)(u):n.pure(e.Monad0().Applicative0())(d.Nothing.value)})}}},x=function(n){return y(n)(.75)},M=function(n){return o.map(n)(a.Identity)},j=function(n){return function(e){return function(t){return function(a){return r.bind(n.Monad0().Bind1())(i.chooseFloat(n)(0)(1))(function(r){return r<e?o.map(n.Monad0().Bind1().Apply0().Functor0())(u.Left.create)(t):o.map(n.Monad0().Bind1().Apply0().Functor0())(u.Right.create)(a)})}}}},q=function(n){return j(n)(.5)};module.exports={genEither:q,"genEither'":j,genIdentity:M,genMaybe:x,"genMaybe'":y,genTuple:f,genNonEmpty:s};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad.Gen/index.js":"s7H0","../Control.Monad.Gen.Class/index.js":"ONWB","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Identity/index.js":"2OKT","../Data.Maybe/index.js":"5mN7","../Data.NonEmpty/index.js":"qF8i","../Data.Ord/index.js":"r4Vb","../Data.Tuple/index.js":"II/O"}],"iQxY":[function(require,module,exports) {
-"use strict";exports.fold1Impl=function(n){return function(r){for(var t=r[0],u=r.length,e=1;e<u;e++)t=n(t)(r[e]);return t}},exports.traverse1Impl=function(){function n(n){this.fn=n}var r={},t=function(n,r){this.head=n,this.tail=r};function u(n){return new t(n,r)}function e(n){return function(r){return new t(n,r)}}function f(n){for(var t=[],u=n;u!==r;)t.push(u.head),u=u.tail;return t}return function(r){return function(t){return function(i){var o=function u(f,o,c){if(0===o)return f;var a=c[o-1];return new n(function(){var n,s;return u((n=a,s=f,r(t(e)(i(n)))(s)),o-1,c)})};return function(r){for(var e=t(u)(i(r[r.length-1])),c=o(e,r.length-1,r);c instanceof n;)c=c.fn();return t(f)(c)}}}}}();
-},{}],"PmFL":[function(require,module,exports) {
-"use strict";var r=require("./foreign.js"),e=require("../Control.Alt/index.js"),a=require("../Control.Applicative/index.js"),n=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),o=require("../Control.Monad/index.js"),i=require("../Data.Eq/index.js"),y=require("../Data.Foldable/index.js"),u=require("../Data.FoldableWithIndex/index.js"),l=require("../Data.Functor/index.js"),d=require("../Data.FunctorWithIndex/index.js"),p=require("../Data.Ord/index.js"),A=require("../Data.Semigroup/index.js"),s=require("../Data.Semigroup.Foldable/index.js"),m=require("../Data.Semigroup.Traversable/index.js"),f=require("../Data.Show/index.js"),x=require("../Data.Traversable/index.js"),q=require("../Data.TraversableWithIndex/index.js"),c=require("../Data.Unfoldable1/index.js"),b=function(r){return r},E=c.unfoldable1Array,N=q.traversableWithIndexArray,j=x.traversableArray,D=function(r){return new f.Show(function(e){return"(NonEmptyArray "+f.show(f.showArray(r))(e)+")"})},h=A.semigroupArray,v=function(r){return p.ordArray(r)},I=p.ord1Array,W=o.monadArray,w=d.functorWithIndexArray,F=l.functorArray,g=u.foldableWithIndexArray,C=y.foldableArray,S=new s.Foldable1(function(){return C},function(e){return r.fold1Impl(A.append(e))},function(r){return s.foldMap1Default(S)(F)(r)}),T=new m.Traversable1(function(){return S},function(){return j},function(r){return m.sequence1Default(T)(r)},function(e){return r.traverse1Impl(n.apply(e))(l.map(e.Functor0()))}),M=function(r){return i.eqArray(r)},B=i.eq1Array,O=t.bindArray,U=n.applyArray,k=a.applicativeArray,z=e.altArray;module.exports={showNonEmptyArray:D,eqNonEmptyArray:M,eq1NonEmptyArray:B,ordNonEmptyArray:v,ord1NonEmptyArray:I,semigroupNonEmptyArray:h,functorNonEmptyArray:F,functorWithIndexNonEmptyArray:w,foldableNonEmptyArray:C,foldableWithIndexNonEmptyArray:g,foldable1NonEmptyArray:S,unfoldable1NonEmptyArray:E,traversableNonEmptyArray:j,traversableWithIndexNonEmptyArray:N,traversable1NonEmptyArray:T,applyNonEmptyArray:U,applicativeNonEmptyArray:k,bindNonEmptyArray:O,monadNonEmptyArray:W,altNonEmptyArray:z};
-},{"./foreign.js":"iQxY","../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Semigroup.Foldable/index.js":"ht+A","../Data.Semigroup.Traversable/index.js":"qkfi","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Unfoldable1/index.js":"S0Nl"}],"ETUV":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js");module.exports={unsafeCoerce:e.unsafeCoerce};
-},{"./foreign.js":"AvJb"}],"eTKN":[function(require,module,exports) {
-"use strict";var n=require("../Control.Bind/index.js"),t=require("../Data.Array/index.js"),r=require("../Data.Array.NonEmpty.Internal/index.js"),e=require("../Data.Bifunctor/index.js"),u=require("../Data.Boolean/index.js"),i=require("../Data.Eq/index.js"),o=require("../Data.Function/index.js"),c=require("../Data.Functor/index.js"),f=require("../Data.Maybe/index.js"),a=require("../Data.NonEmpty/index.js"),d=require("../Data.Ord/index.js"),s=require("../Data.Semigroup/index.js"),l=require("../Data.Tuple/index.js"),p=require("../Data.Unfoldable1/index.js"),y=require("../Unsafe.Coerce/index.js"),m=y.unsafeCoerce,x=y.unsafeCoerce,A=y.unsafeCoerce,b=function(n){return function(r){var e=t.unionBy(n)(A(r));return function(n){return x(e(n))}}},q=function(n){return b(i.eq(n))},v=function(n){return function(t){var r=b(n)(t);return function(n){return r(A(n))}}},h=function(n){return v(i.eq(n))},B=function(){var n=e.bimap(l.bifunctorTuple)(x)(x);return function(r){return n(t.unzip(A(r)))}}(),E=function(n){return function(r){var e=t.updateAt(n)(r);return function(n){return m(e(A(n)))}}},I=function(n){return function(r){return x(t.zip(A(n))(A(r)))}},j=function(n){return function(r){return function(e){return x(t.zipWith(n)(A(r))(A(e)))}}},D=function(n){return function(r){return function(e){return function(u){return m(t.zipWithA(n)(r)(A(e))(A(u)))}}}},g=function(n){return function(r){var e=t.some(n)(r);return function(n){return m(e(n))}}},M=function(n){return function(r){return x(t.snoc(n)(r))}},N=function(n){return function(r){return x(t.snoc(A(n))(r))}},W=function(n){return x(t.singleton(n))},z=function(n){return function(r){return x(t.replicate(d.max(d.ordInt)(1)(n))(r))}},F=function(n){return function(r){return x(t.range(n)(r))}},k=function(n){return function(r){var e=t.modifyAt(n)(r);return function(n){return m(e(A(n)))}}},w=function(n){return function(r){return t.intersectBy(n)(A(r))}},C=function(n){return function(t){var r=w(n)(t);return function(n){return r(A(n))}}},U=function(n){return w(i.eq(n))},L=function(n){return C(i.eq(n))},J=function(n){return function(r){var e=t.insertAt(n)(r);return function(n){return m(e(A(n)))}}},T=function(n){var r=t.fromFoldable(n.Foldable0());return function(n){return x(r(n))}},R=function(n){if(t.length(n)>0)return new f.Just(x(n));if(u.otherwise)return f.Nothing.value;throw new Error("Failed pattern match at Data.Array.NonEmpty (line 134, column 1 - line 134, column 58): "+[n.constructor.name])},O=function(n){var r=t.fromFoldable(n);return function(n){return R(r(n))}},S=function(n){return function(r){return t.difference(n)(A(r))}},G=function(n){return function(r){return x(t.cons(n)(r))}},H=function(n){return G(n.value0)(n.value1)},K=o.flip(n.bind(r.bindNonEmptyArray)),P=function(){var n=c.map(r.functorNonEmptyArray)(A);return function(r){return x(t.concat(A(n(r))))}}(),Q=function(n){return function(t){return x(s.append(s.semigroupArray)(A(n))(t))}},V=function(n){return function(r){var e=t.alterAt(n)(r);return function(n){return e(A(n))}}},X=function(n){var t=f.fromJust();return function(r){return t(n(A(r)))}},Y=X(t.head),Z=X(t.init),$=X(t.last),_=X(t.tail),nn=X(t.uncons),tn=function(n){return t=nn(n),new a.NonEmpty(t.head,t.tail);var t},rn=X(t.unsnoc),en=function(n){return function(t){return n(A(t))}},un=en(t.catMaybes),on=function(n){return function(r){return en(t.delete(n)(r))}},cn=function(n){return en(t.deleteAt(n))},fn=function(n){return function(r){return en(t.deleteBy(n)(r))}},an=function(n){return function(t){return en(S(n)(t))}},dn=function(n){return en(t.drop(n))},sn=function(n){return en(t.dropEnd(n))},ln=function(n){return en(t.dropWhile(n))},pn=function(n){return function(r){return en(t.elemIndex(n)(r))}},yn=function(n){return function(r){return en(t.elemLastIndex(n)(r))}},mn=function(n){return en(t.filter(n))},xn=function(n){return function(r){return en(t.filterA(n)(r))}},An=function(n){return en(t.findIndex(n))},bn=function(n){return en(t.findLastIndex(n))},qn=function(n){return function(r){return function(e){return en(t.foldM(n)(r)(e))}}},vn=function(n){return function(r){return function(e){return en(t.foldRecM(n)(r)(e))}}},hn=en(t.index),Bn=en(t.length),En=function(n){return en(t.mapMaybe(n))},In=function(n){return en(t.partition(n))},jn=function(n){return function(r){return en(t.slice(n)(r))}},Dn=function(n){return en(t.span(n))},gn=function(n){return en(t.take(n))},Mn=function(n){return en(t.takeEnd(n))},Nn=function(n){return en(t.takeWhile(n))},Wn=function(n){return en(t.toUnfoldable(n))},zn=function(n){var t=en(n);return function(n){return x(t(n))}},Fn=function(n){return zn(t.cons(n))},kn=function(n){return function(r){return zn(t.insert(n)(r))}},wn=function(n){return function(r){return zn(t.insertBy(n)(r))}},Cn=function(n){return function(r){return function(e){return zn(t.modifyAtIndices(n)(r)(e))}}},Un=function(n){return zn(t.nub(n))},Ln=function(n){return zn(t.nubBy(n))},Jn=function(n){return zn(t.nubByEq(n))},Tn=function(n){return zn(t.nubEq(n))},Rn=zn(t.reverse),On=function(n){return zn(t.sort(n))},Sn=function(n){return zn(t.sortBy(n))},Gn=function(n){return function(r){return zn(t.sortWith(n)(r))}},Hn=function(n){return function(r){return zn(t.updateAtIndices(n)(r))}},Kn=function(n){return en(t.unsafeIndex(n))},Pn=function(n){return function(t){var r=Bn(t);return p.unfoldr1(n)(function(n){return l.Tuple.create(Kn()(t)(n))(n<(r-1|0)?new f.Just(n+1|0):f.Nothing.value)})(0)}};module.exports={fromArray:R,fromNonEmpty:H,toArray:A,toNonEmpty:tn,fromFoldable:O,fromFoldable1:T,toUnfoldable:Wn,toUnfoldable1:Pn,singleton:W,range:F,replicate:z,some:g,length:Bn,cons:Fn,"cons'":G,snoc:N,"snoc'":M,appendArray:Q,insert:kn,insertBy:wn,head:Y,last:$,tail:_,init:Z,uncons:nn,unsnoc:rn,index:hn,elemIndex:pn,elemLastIndex:yn,findIndex:An,findLastIndex:bn,insertAt:J,deleteAt:cn,updateAt:E,updateAtIndices:Hn,modifyAt:k,modifyAtIndices:Cn,alterAt:V,reverse:Rn,concat:P,concatMap:K,filter:mn,partition:In,filterA:xn,mapMaybe:En,catMaybes:un,sort:On,sortBy:Sn,sortWith:Gn,slice:jn,take:gn,takeEnd:Mn,takeWhile:Nn,drop:dn,dropEnd:sn,dropWhile:ln,span:Dn,nub:Un,nubBy:Ln,nubEq:Tn,nubByEq:Jn,union:h,"union'":q,unionBy:v,"unionBy'":b,delete:on,deleteBy:fn,difference:an,"difference'":S,intersect:L,"intersect'":U,intersectBy:C,"intersectBy'":w,zipWith:j,zipWithA:D,zip:I,unzip:B,foldM:qn,foldRecM:vn,unsafeIndex:Kn};
-},{"../Control.Bind/index.js":"7VcT","../Data.Array/index.js":"4t4C","../Data.Array.NonEmpty.Internal/index.js":"PmFL","../Data.Bifunctor/index.js":"e2Wc","../Data.Boolean/index.js":"ObQr","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.NonEmpty/index.js":"qF8i","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Tuple/index.js":"II/O","../Data.Unfoldable1/index.js":"S0Nl","../Unsafe.Coerce/index.js":"ETUV"}],"Yzse":[function(require,module,exports) {
-"use strict";exports.toCharCode=function(r){return r.charCodeAt(0)},exports.fromCharCode=function(r){return String.fromCharCode(r)};
-},{}],"oOsU":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),t=require("../Control.Apply/index.js"),e=require("../Control.Bind/index.js"),r=require("../Control.MonadZero/index.js"),u=require("../Data.Boolean/index.js"),o=require("../Data.Bounded/index.js"),i=require("../Data.Either/index.js"),a=require("../Data.Eq/index.js"),c=require("../Data.Function/index.js"),f=require("../Data.Functor/index.js"),l=require("../Data.Maybe/index.js"),d=require("../Data.Newtype/index.js"),m=require("../Data.Ord/index.js"),s=require("../Data.Ordering/index.js"),h=require("../Data.Show/index.js"),w=require("../Data.Tuple/index.js"),E=require("../Data.Unfoldable/index.js"),v=require("../Data.Unfoldable1/index.js"),p=require("../Data.Unit/index.js"),b=function(n){return n},g=function(n,t,e){this.Ord0=n,this.pred=t,this.succ=e},J=function(n,t,e,r,u){this.Bounded0=n,this.Enum1=t,this.cardinality=e,this.fromEnum=r,this.toEnum=u},y=function(n){return n.toEnum},D=function(n){return n.succ},T=function(n){return function(e){return v.unfoldr1(e)(t.apply(t.applyFn)(w.Tuple.create)(D(n)))}},C=new h.Show(function(n){return"(Cardinality "+h.show(h.showInt)(n)+")"}),q=function(n){return n.pred},N=m.ordInt,F=new d.Newtype(function(n){return n},b),j=function(n){return n.fromEnum},x=function(n){return function(t){return function(e){return function(r){var u=y(n)(r);if(u instanceof l.Just)return u.value0;if(u instanceof l.Nothing)return r<j(n)(o.bottom(n.Bounded0()))?t:e;throw new Error("Failed pattern match at Data.Enum (line 158, column 33 - line 160, column 62): "+[u.constructor.name])}}}},O=a.eqInt,B=new g(function(){return m.ordUnit},c.const(l.Nothing.value),c.const(l.Nothing.value)),M=function(n){return function(t){return new g(function(){return w.ordTuple(n.Ord0())(t.Enum1().Ord0())},function(e){return l.maybe(f.map(l.functorMaybe)(c.flip(w.Tuple.create)(o.top(t.Bounded0())))(q(n)(e.value0)))((r=w.Tuple.create(e.value0),function(n){return l.Just.create(r(n))}))(q(t.Enum1())(e.value1));var r},function(e){return l.maybe(f.map(l.functorMaybe)(c.flip(w.Tuple.create)(o.bottom(t.Bounded0())))(D(n)(e.value0)))((r=w.Tuple.create(e.value0),function(n){return l.Just.create(r(n))}))(D(t.Enum1())(e.value1));var r})}},I=new g(function(){return m.ordOrdering},function(n){if(n instanceof s.LT)return l.Nothing.value;if(n instanceof s.EQ)return new l.Just(s.LT.value);if(n instanceof s.GT)return new l.Just(s.EQ.value);throw new Error("Failed pattern match at Data.Enum (line 72, column 1 - line 78, column 20): "+[n.constructor.name])},function(n){if(n instanceof s.LT)return new l.Just(s.EQ.value);if(n instanceof s.EQ)return new l.Just(s.GT.value);if(n instanceof s.GT)return l.Nothing.value;throw new Error("Failed pattern match at Data.Enum (line 72, column 1 - line 78, column 20): "+[n.constructor.name])}),L=function(n){return new g(function(){return l.ordMaybe(n.Enum1().Ord0())},function(t){if(t instanceof l.Nothing)return l.Nothing.value;if(t instanceof l.Just)return new l.Just(q(n.Enum1())(t.value0));throw new Error("Failed pattern match at Data.Enum (line 80, column 1 - line 84, column 32): "+[t.constructor.name])},function(t){if(t instanceof l.Nothing)return new l.Just(new l.Just(o.bottom(n.Bounded0())));if(t instanceof l.Just)return f.map(l.functorMaybe)(l.Just.create)(D(n.Enum1())(t.value0));throw new Error("Failed pattern match at Data.Enum (line 80, column 1 - line 84, column 32): "+[t.constructor.name])})},U=new g(function(){return m.ordInt},function(n){return n>o.bottom(o.boundedInt)?new l.Just(n-1|0):l.Nothing.value},function(n){return n<o.top(o.boundedInt)?new l.Just(n+1|0):l.Nothing.value}),Q=function(n){return function(t){var o=function(n){return function(t){return function(u){return function(o){return new w.Tuple(o,e.bind(l.bindMaybe)(n(o))(function(n){return f.voidLeft(l.functorMaybe)(r.guard(l.monadZeroMaybe)(t(n)(u)))(n)}))}}}};return function(e){return function(r){if(a.eq(n.Ord0().Eq0())(e)(r))return v.singleton(t)(e);if(m.lessThan(n.Ord0())(e)(r))return v.unfoldr1(t)(o(D(n))(m.lessThanOrEq(n.Ord0()))(r))(e);if(u.otherwise)return v.unfoldr1(t)(o(q(n))(m.greaterThanOrEq(n.Ord0()))(r))(e);throw new Error("Failed pattern match at Data.Enum (line 183, column 14 - line 187, column 51): "+[e.constructor.name,r.constructor.name])}}}},G=function(n){return function(t){return function(e){return function(r){return function(o){return function(i){var a,c,d,m=j(e)(i),s=j(e)(o),h=j(e)(r);return f.map(t)((c=l.fromJust(),d=y(e),function(n){return c(d(n))}))(E.unfoldr(n)((a=s-h|0,function(n){return function(t){if(t<=n)return new l.Just(new w.Tuple(t,t+a|0));if(u.otherwise)return l.Nothing.value;throw new Error("Failed pattern match at Data.Enum (line 214, column 5 - line 216, column 28): "+[a.constructor.name,n.constructor.name,t.constructor.name])}})(m))(h))}}}}}},R=function(n){return function(t){return new g(function(){return i.ordEither(n.Enum1().Ord0())(t.Enum1().Ord0())},function(e){if(e instanceof i.Left)return l.maybe(l.Nothing.value)(function(n){return l.Just.create(i.Left.create(n))})(q(n.Enum1())(e.value0));if(e instanceof i.Right)return l.maybe(new l.Just(new i.Left(o.top(n.Bounded0()))))(function(n){return l.Just.create(i.Right.create(n))})(q(t.Enum1())(e.value0));throw new Error("Failed pattern match at Data.Enum (line 86, column 1 - line 90, column 69): "+[e.constructor.name])},function(e){if(e instanceof i.Left)return l.maybe(new l.Just(new i.Right(o.bottom(t.Bounded0()))))(function(n){return l.Just.create(i.Left.create(n))})(D(n.Enum1())(e.value0));if(e instanceof i.Right)return l.maybe(l.Nothing.value)(function(n){return l.Just.create(i.Right.create(n))})(D(t.Enum1())(e.value0));throw new Error("Failed pattern match at Data.Enum (line 86, column 1 - line 90, column 69): "+[e.constructor.name])})}},S=new g(function(){return m.ordBoolean},function(n){return n?new l.Just(!1):l.Nothing.value},function(n){return n?l.Nothing.value:new l.Just(!0)}),Z=function(n){return function(e){return v.unfoldr1(e)(t.apply(t.applyFn)(w.Tuple.create)(q(n)))}},A=function(n){return new w.Tuple(n,n)},P=function(n){return function(t){return E.unfoldr(t)((e=f.map(l.functorMaybe)(A),r=q(n),function(n){return e(r(n))}));var e,r}},W=function(n){return function(t){return E.unfoldr(t)((e=f.map(l.functorMaybe)(A),r=D(n),function(n){return e(r(n))}));var e,r}},k=function(n){return function(t){return function(e){var r;return e<0?l.Nothing.value:(r=e,function(n){var e,u=r,o=!1;function i(e,r){if(0===e)return o=!0,new l.Just(r);var i=D(t)(r);if(i instanceof l.Just)return u=e-1|0,void(n=i.value0);if(i instanceof l.Nothing)return o=!0,l.Nothing.value;throw new Error("Failed pattern match at Data.Enum (line 293, column 12 - line 295, column 33): "+[i.constructor.name])}for(;!o;)e=i(u,n);return e})(o.bottom(n))}}},z=function(n){return function(t){return function(e){return n(t(e)+1|0)}}},H=function(n){return function(t){return function(e){return n(t(e)-1|0)}}},K=function(n){var t;return t=0,function(e){var r,u=t,o=!1;function i(t,r){var i=q(n)(r);if(i instanceof l.Just)return u=t+1|0,void(e=i.value0);if(i instanceof l.Nothing)return o=!0,t;throw new Error("Failed pattern match at Data.Enum (line 306, column 5 - line 308, column 19): "+[i.constructor.name])}for(;!o;)r=i(u,e);return r}},V=function(n){return function(t){var e;return b((e=1,function(n){var r,u=e,o=!1;function i(e,r){var i=D(t)(r);if(i instanceof l.Just)return u=e+1|0,void(n=i.value0);if(i instanceof l.Nothing)return o=!0,e;throw new Error("Failed pattern match at Data.Enum (line 273, column 5 - line 275, column 19): "+[i.constructor.name])}for(;!o;)r=i(u,n);return r})(o.bottom(n)))}},X=function(t){return t>=o.bottom(o.boundedInt)&&t<=o.top(o.boundedInt)?new l.Just(n.fromCharCode(t)):l.Nothing.value},Y=new g(function(){return m.ordChar},H(X)(n.toCharCode),z(X)(n.toCharCode)),$=function(n){return n.cardinality},_=new J(function(){return o.boundedUnit},function(){return B},1,c.const(0),function(n){return 0===n?new l.Just(p.unit):l.Nothing.value}),nn=new J(function(){return o.boundedOrdering},function(){return I},3,function(n){if(n instanceof s.LT)return 0;if(n instanceof s.EQ)return 1;if(n instanceof s.GT)return 2;throw new Error("Failed pattern match at Data.Enum (line 137, column 1 - line 145, column 18): "+[n.constructor.name])},function(n){return 0===n?new l.Just(s.LT.value):1===n?new l.Just(s.EQ.value):2===n?new l.Just(s.GT.value):l.Nothing.value}),tn=new J(function(){return o.boundedChar},function(){return Y},n.toCharCode(o.top(o.boundedChar))-n.toCharCode(o.bottom(o.boundedChar))|0,n.toCharCode,X),en=new J(function(){return o.boundedBoolean},function(){return S},2,function(n){if(!n)return 0;if(n)return 1;throw new Error("Failed pattern match at Data.Enum (line 118, column 1 - line 124, column 20): "+[n.constructor.name])},function(n){return 0===n?new l.Just(!1):1===n?new l.Just(!0):l.Nothing.value});module.exports={Enum:g,succ:D,pred:q,BoundedEnum:J,cardinality:$,toEnum:y,fromEnum:j,toEnumWithDefaults:x,Cardinality:b,enumFromTo:Q,enumFromThenTo:G,upFrom:W,upFromIncluding:T,downFrom:P,downFromIncluding:Z,defaultSucc:z,defaultPred:H,defaultCardinality:V,defaultToEnum:k,defaultFromEnum:K,enumBoolean:S,enumInt:U,enumChar:Y,enumUnit:B,enumOrdering:I,enumMaybe:L,enumEither:R,enumTuple:M,boundedEnumBoolean:en,boundedEnumChar:tn,boundedEnumUnit:_,boundedEnumOrdering:nn,newtypeCardinality:F,eqCardinality:O,ordCardinality:N,showCardinality:C};
-},{"./foreign.js":"Yzse","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.MonadZero/index.js":"lD5R","../Data.Boolean/index.js":"ObQr","../Data.Bounded/index.js":"kcUU","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Show/index.js":"mFY7","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unfoldable1/index.js":"S0Nl","../Data.Unit/index.js":"NhVk"}],"EM+K":[function(require,module,exports) {
-"use strict";var n=require("../Data.Array.NonEmpty/index.js"),r=require("../Data.Maybe/index.js"),t=require("../Data.Semigroup.Foldable/index.js"),e=require("../Data.String.CodeUnits/index.js"),u=require("../Data.String.NonEmpty.Internal/index.js"),o=require("../Data.String.Unsafe/index.js"),i=require("../Unsafe.Coerce/index.js"),a=i.unsafeCoerce,f=function(n){return function(r){return a(r+e.singleton(n))}},c=function(n){return a(e.singleton(n))},s=i.unsafeCoerce,l=function(n){var r=s(e.takeWhile(n));return function(n){return u.fromString(r(n))}},h=function(n){var r=e["lastIndexOf'"](n);return function(n){return s(r(n))}},g=function(n){return s(e.lastIndexOf(n))},d=function(n){var r=e["indexOf'"](n);return function(n){return s(r(n))}},m=function(n){return s(e.indexOf(n))},v=i.unsafeCoerce,x=function(n){return e.length(v(n))},p=function(n){return function(r){var t=e.splitAt(n)(v(r));return{before:u.fromString(t.before),after:u.fromString(t.after)}}},y=function(n){return function(t){var u=v(t);return n<1?r.Nothing.value:new r.Just(a(e.take(n)(u)))}},A=function(n){return function(t){var u=v(t);return n<1?r.Nothing.value:new r.Just(a(e.takeRight(n)(u)))}},C=function(n){return e.toChar(v(n))},N=function(n){return e.toCharArray(v(n))},S=function(){var t=r.fromJust();return function(r){return t(n.fromArray(N(r)))}}(),O=function(n){var r=v(n);return{head:o.charAt(0)(r),tail:u.fromString(e.drop(1)(r))}},j=function(n){var r=t.fold1(n)(u.semigroupNonEmptyString);return function(n){return r(n)}},q=function(n){return 0===n.length?r.Nothing.value:new r.Just(a(e.fromCharArray(n)))},J=function(){var t=r.fromJust();return function(r){return t(q(n.toArray(r)))}}(),k=function(n){var r=s(e.dropWhile(n));return function(n){return u.fromString(r(n))}},D=function(n){return function(t){var u=v(t);return n>=e.length(u)?r.Nothing.value:new r.Just(a(e.dropRight(n)(u)))}},b=function(n){return function(t){var u=v(t);return n>=e.length(u)?r.Nothing.value:new r.Just(a(e.drop(n)(u)))}},w=function(n){return s(e.countPrefix(n))},E=function(n){return function(r){return a(e.singleton(n)+r)}},I=function(n){return s(e.charAt(n))};module.exports={fromCharArray:q,fromNonEmptyCharArray:J,singleton:c,cons:E,snoc:f,fromFoldable1:j,toCharArray:N,toNonEmptyCharArray:S,charAt:I,toChar:C,indexOf:m,"indexOf'":d,lastIndexOf:g,"lastIndexOf'":h,uncons:O,length:x,take:y,takeRight:A,takeWhile:l,drop:b,dropRight:D,dropWhile:k,countPrefix:w,splitAt:p};
-},{"../Data.Array.NonEmpty/index.js":"eTKN","../Data.Maybe/index.js":"5mN7","../Data.Semigroup.Foldable/index.js":"ht+A","../Data.String.CodeUnits/index.js":"6c6X","../Data.String.NonEmpty.Internal/index.js":"Ph6A","../Data.String.Unsafe/index.js":"5UWM","../Unsafe.Coerce/index.js":"ETUV"}],"nKWe":[function(require,module,exports) {
-"use strict";var n=require("../Data.Eq/index.js"),e=require("../Data.Newtype/index.js"),t=require("../Data.Ord/index.js"),r=require("../Data.Show/index.js"),u=function(n){return n},o=function(n){return n},i=new r.Show(function(n){return"(Replacement "+r.show(r.showString)(n)+")"}),c=new r.Show(function(n){return"(Pattern "+r.show(r.showString)(n)+")"}),a=new e.Newtype(function(n){return n},u),w=new e.Newtype(function(n){return n},o),f=new n.Eq(function(n){return function(e){return n===e}}),p=new t.Ord(function(){return f},function(n){return function(e){return t.compare(t.ordString)(n)(e)}}),s=new n.Eq(function(n){return function(e){return n===e}}),d=new t.Ord(function(){return s},function(n){return function(e){return t.compare(t.ordString)(n)(e)}});module.exports={Pattern:o,Replacement:u,eqPattern:s,ordPattern:d,newtypePattern:w,showPattern:c,eqReplacement:f,ordReplacement:p,newtypeReplacement:a,showReplacement:i};
-},{"../Data.Eq/index.js":"Pq4F","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Show/index.js":"mFY7"}],"3koD":[function(require,module,exports) {
-"use strict";exports.unsafeUnionFn=function(r,n){var a={};for(var o in n)({}).hasOwnProperty.call(n,o)&&(a[o]=n[o]);for(var t in r)({}).hasOwnProperty.call(r,t)&&(a[t]=r[t]);return a};
-},{}],"cB+g":[function(require,module,exports) {
-"use strict";exports.mkFn0=function(n){return function(){return n({})}},exports.mkFn2=function(n){return function(r,t){return n(r)(t)}},exports.mkFn3=function(n){return function(r,t,u){return n(r)(t)(u)}},exports.mkFn4=function(n){return function(r,t,u,e){return n(r)(t)(u)(e)}},exports.mkFn5=function(n){return function(r,t,u,e,o){return n(r)(t)(u)(e)(o)}},exports.mkFn6=function(n){return function(r,t,u,e,o,c){return n(r)(t)(u)(e)(o)(c)}},exports.mkFn7=function(n){return function(r,t,u,e,o,c,i){return n(r)(t)(u)(e)(o)(c)(i)}},exports.mkFn8=function(n){return function(r,t,u,e,o,c,i,f){return n(r)(t)(u)(e)(o)(c)(i)(f)}},exports.mkFn9=function(n){return function(r,t,u,e,o,c,i,f,s){return n(r)(t)(u)(e)(o)(c)(i)(f)(s)}},exports.mkFn10=function(n){return function(r,t,u,e,o,c,i,f,s,p){return n(r)(t)(u)(e)(o)(c)(i)(f)(s)(p)}},exports.runFn0=function(n){return n()},exports.runFn2=function(n){return function(r){return function(t){return n(r,t)}}},exports.runFn3=function(n){return function(r){return function(t){return function(u){return n(r,t,u)}}}},exports.runFn4=function(n){return function(r){return function(t){return function(u){return function(e){return n(r,t,u,e)}}}}},exports.runFn5=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return n(r,t,u,e,o)}}}}}},exports.runFn6=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(c){return n(r,t,u,e,o,c)}}}}}}},exports.runFn7=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(c){return function(i){return n(r,t,u,e,o,c,i)}}}}}}}},exports.runFn8=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(c){return function(i){return function(f){return n(r,t,u,e,o,c,i,f)}}}}}}}}},exports.runFn9=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(c){return function(i){return function(f){return function(s){return n(r,t,u,e,o,c,i,f,s)}}}}}}}}}},exports.runFn10=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(c){return function(i){return function(f){return function(s){return function(p){return n(r,t,u,e,o,c,i,f,s,p)}}}}}}}}}}};
-},{}],"TowT":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),F=function(n){return n},r=function(n){return n};module.exports={mkFn1:r,runFn1:F,mkFn0:n.mkFn0,mkFn2:n.mkFn2,mkFn3:n.mkFn3,mkFn4:n.mkFn4,mkFn5:n.mkFn5,mkFn6:n.mkFn6,mkFn7:n.mkFn7,mkFn8:n.mkFn8,mkFn9:n.mkFn9,mkFn10:n.mkFn10,runFn0:n.runFn0,runFn2:n.runFn2,runFn3:n.runFn3,runFn4:n.runFn4,runFn5:n.runFn5,runFn6:n.runFn6,runFn7:n.runFn7,runFn8:n.runFn8,runFn9:n.runFn9,runFn10:n.runFn10};
-},{"./foreign.js":"cB+g"}],"WmUk":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),e=require("../Data.Function.Uncurried/index.js"),i=e.runFn2(n.unsafeUnionFn);module.exports={unsafeUnion:i,unsafeUnionFn:n.unsafeUnionFn};
-},{"./foreign.js":"3koD","../Data.Function.Uncurried/index.js":"TowT"}],"0gG4":[function(require,module,exports) {
-"use strict";var n=require("../Data.Eq/index.js"),r=require("../Data.Symbol/index.js"),u=require("../Record.Unsafe/index.js"),t=require("../Record.Unsafe.Union/index.js"),e=require("../Type.Data.RowList/index.js"),i=require("../Unsafe.Coerce/index.js"),o=function(n){this.equalFields=n},f=function(n){return function(n){return function(r){return t.unsafeUnionFn(n,r)}}},c=function(n){return function(t){return function(t){return function(t){return function(e){return function(i){return u.unsafeSet(r.reflectSymbol(n)(t))(e)(i)}}}}}},s=function(n){return i.unsafeCoerce},a=function(n){return function(n){return function(n){return function(r){return t.unsafeUnionFn(n,r)}}}},l=function(n){return function(t){return function(t){return function(t){return function(e){return function(i){return u.unsafeSet(r.reflectSymbol(n)(t))(e)(i)}}}}}},d=function(n){return function(t){return function(t){return function(e){return u.unsafeGet(r.reflectSymbol(n)(t))(e)}}}},q=function(n){return function(r){return function(u){return function(t){return function(e){return function(i){return c(n)(r)(u)(t)(e(d(n)(r)(t)(i)))(i)}}}}}},x=new o(function(n){return function(n){return function(n){return!0}}}),y=function(n){return n.equalFields},m=function(u){return function(t){return function(i){return function(f){return new o(function(o){return function(o){return function(c){var s=d(u)(i)(r.SProxy.value),a=y(f)(e.RLProxy.value);return n.eq(t)(s(o))(s(c))&&a(o)(c)}}})}}}},F=function(n){return function(n){return function(r){return function(u){return y(n)(e.RLProxy.value)(r)(u)}}}},S=function(n){return function(n){return function(n){return function(r){return t.unsafeUnionFn(n,r)}}}},U=function(n){return function(t){return function(t){return function(t){return function(e){return u.unsafeDelete(r.reflectSymbol(n)(t))(e)}}}}},j=function(n){return function(r){return function(u){return function(t){return function(e){return function(i){return function(o){return function(f){return function(c){return l(r)(i)(e)(f)(d(n)(u)(o)(c))(U(n)(t)(u)(o)(c))}}}}}}}}};module.exports={get:d,set:c,modify:q,insert:l,delete:U,rename:j,equal:F,merge:a,union:f,disjointUnion:S,nub:s,EqualFields:o,equalFields:y,equalFieldsCons:m,equalFieldsNil:x};
-},{"../Data.Eq/index.js":"Pq4F","../Data.Symbol/index.js":"4oJQ","../Record.Unsafe/index.js":"KG04","../Record.Unsafe.Union/index.js":"WmUk","../Type.Data.RowList/index.js":"XaXP","../Unsafe.Coerce/index.js":"ETUV"}],"/s47":[function(require,module,exports) {
-"use strict";exports.float32ToInt32=function(r){var t=new ArrayBuffer(4),n=new Float32Array(t),e=new Int32Array(t);return n[0]=r,e[0]};
-},{}],"34Kp":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),t=require("../Control.Alternative/index.js"),e=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),o=require("../Control.Lazy/index.js"),i=require("../Control.Monad/index.js"),a=require("../Control.Monad.Cont.Class/index.js"),c=require("../Control.Monad.Error.Class/index.js"),l=require("../Control.Monad.Reader.Class/index.js"),f=require("../Control.Monad.Rec.Class/index.js"),d=require("../Control.Monad.State.Class/index.js"),s=require("../Control.Monad.Trans.Class/index.js"),p=require("../Control.Monad.Writer.Class/index.js"),T=require("../Control.MonadPlus/index.js"),M=require("../Control.MonadZero/index.js"),v=require("../Control.Plus/index.js"),w=require("../Data.Functor/index.js"),S=require("../Data.Newtype/index.js"),C=require("../Data.Tuple/index.js"),m=require("../Data.Unit/index.js"),x=require("../Effect.Class/index.js"),j=function(n){return n},q=function(n){return function(t){return function(e){return t(n(e))}}},A=function(n){return n},y=new S.Newtype(function(n){return n},j),E=new s.MonadTrans(function(n){return function(t){return function(r){return u.bind(n.Bind1())(t)(function(t){return e.pure(n.Applicative0())(new C.Tuple(t,r))})}}}),h=function(n){return function(t){return function(e){return n(t(e))}}},B=new o.Lazy(function(n){return function(t){return n(m.unit)(t)}}),R=function(n){return new w.Functor(function(t){return function(e){return function(r){return w.map(n)(function(n){return new C.Tuple(t(n.value0),n.value1)})(e(r))}}})},b=function(n){return function(t){return function(e){return w.map(n)(C.snd)(t(e))}}},D=function(n){return function(t){return function(e){return w.map(n)(C.fst)(t(e))}}},P=function(n){return new i.Monad(function(){return L(n)},function(){return F(n)})},F=function(n){return new u.Bind(function(){return k(n)},function(t){return function(e){return function(r){return u.bind(n.Bind1())(t(r))(function(n){return e(n.value0)(n.value1)})}}})},k=function(n){return new r.Apply(function(){return R(n.Bind1().Apply0().Functor0())},i.ap(P(n)))},L=function(n){return new e.Applicative(function(){return k(n)},function(t){return function(r){return e.pure(n.Applicative0())(new C.Tuple(t,r))}})},Z=function(n){return new l.MonadAsk(function(){return P(n.Monad0())},s.lift(E)(n.Monad0())(l.ask(n)))},z=function(n){return new l.MonadReader(function(){return Z(n.MonadAsk0())},(t=l.local(n),function(n){return h(t(n))}));var t},W=function(n){return new a.MonadCont(function(){return P(n.Monad0())},function(t){return function(e){return a.callCC(n)(function(n){return t(function(t){return function(e){return n(new C.Tuple(t,e))}})(e)})}})},N=function(n){return new x.MonadEffect(function(){return P(n.Monad0())},(t=s.lift(E)(n.Monad0()),e=x.liftEffect(n),function(n){return t(e(n))}));var t,e},U=function(n){return new f.MonadRec(function(){return P(n.Monad0())},function(t){return function(r){var o=function(r){var o=t(r.value0);return u.bind(n.Monad0().Bind1())(o(r.value1))(function(t){return e.pure(n.Monad0().Applicative0())(function(){if(t.value0 instanceof f.Loop)return new f.Loop(new C.Tuple(t.value0.value0,t.value1));if(t.value0 instanceof f.Done)return new f.Done(new C.Tuple(t.value0.value0,t.value1));throw new Error("Failed pattern match at Control.Monad.State.Trans (line 87, column 16 - line 89, column 40): "+[t.value0.constructor.name])}())})};return function(t){return f.tailRecM(n)(o)(new C.Tuple(r,t))}}})},g=function(n){return new d.MonadState(function(){return P(n)},function(t){return j((r=e.pure(n.Applicative0()),function(n){return r(t(n))}));var r})},G=function(n){return new p.MonadTell(function(){return P(n.Monad0())},(t=s.lift(E)(n.Monad0()),e=p.tell(n),function(n){return t(e(n))}));var t,e},H=function(n){return new p.MonadWriter(function(){return G(n.MonadTell0())},function(t){return function(r){return u.bind(n.MonadTell0().Monad0().Bind1())(p.listen(n)(t(r)))(function(t){return e.pure(n.MonadTell0().Monad0().Applicative0())(new C.Tuple(new C.Tuple(t.value0.value0,t.value1),t.value0.value1))})}},function(t){return function(r){return p.pass(n)(u.bind(n.MonadTell0().Monad0().Bind1())(t(r))(function(t){return e.pure(n.MonadTell0().Monad0().Applicative0())(new C.Tuple(new C.Tuple(t.value0.value0,t.value1),t.value0.value1))}))}})},I=function(n){return new c.MonadThrow(function(){return P(n.Monad0())},function(t){return s.lift(E)(n.Monad0())(c.throwError(n)(t))})},J=function(n){return new c.MonadError(function(){return I(n.MonadThrow0())},function(t){return function(e){return function(r){return c.catchError(n)(t(r))(function(n){return e(n)(r)})}}})},K=function(t){return function(t){return new n.Alt(function(){return R(t.Functor0())},function(e){return function(r){return function(u){return n.alt(t)(e(u))(r(u))}}})}},O=function(n){return function(t){return new v.Plus(function(){return K(n)(t.Alt0())},function(n){return v.empty(t)})}},Q=function(n){return function(e){return new t.Alternative(function(){return L(n)},function(){return O(n)(e.Plus1())})}},V=function(n){return new M.MonadZero(function(){return Q(n.Monad0())(n.Alternative1())},function(){return P(n.Monad0())})},X=function(n){return new T.MonadPlus(function(){return V(n.MonadZero0())})};module.exports={StateT:j,runStateT:A,evalStateT:D,execStateT:b,mapStateT:h,withStateT:q,newtypeStateT:y,functorStateT:R,applyStateT:k,applicativeStateT:L,altStateT:K,plusStateT:O,alternativeStateT:Q,bindStateT:F,monadStateT:P,monadRecStateT:U,monadZeroStateT:V,monadPlusStateT:X,monadTransStateT:E,lazyStateT:B,monadEffectState:N,monadContStateT:W,monadThrowStateT:I,monadErrorStateT:J,monadAskStateT:Z,monadReaderStateT:z,monadStateStateT:g,monadTellStateT:G,monadWriterStateT:H};
-},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Lazy/index.js":"y9cE","../Control.Monad/index.js":"U/Ix","../Control.Monad.Cont.Class/index.js":"IpNh","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Reader.Class/index.js":"c2ZJ","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.Trans.Class/index.js":"5tIR","../Control.Monad.Writer.Class/index.js":"gxgA","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Tuple/index.js":"II/O","../Data.Unit/index.js":"NhVk","../Effect.Class/index.js":"dWtH"}],"mGZW":[function(require,module,exports) {
-"use strict";var t=require("../Control.Monad.State.Trans/index.js"),e=require("../Data.Identity/index.js"),n=require("../Data.Newtype/index.js"),r=t.withStateT,u=function(t){var r=n.unwrap(e.newtypeIdentity);return function(e){return r(t(e))}},a=function(r){return t.mapStateT((u=n.unwrap(e.newtypeIdentity),function(t){return e.Identity(r(u(t)))}));var u},i=function(t){return function(e){return t(e).value1}},o=function(t){return function(e){return t(e).value0}};module.exports={runState:u,evalState:o,execState:i,mapState:a,withState:r};
-},{"../Control.Monad.State.Trans/index.js":"34Kp","../Data.Identity/index.js":"2OKT","../Data.Newtype/index.js":"lz8k"}],"7S1u":[function(require,module,exports) {
-"use strict";exports.random=Math.random;
-},{}],"V+tx":[function(require,module,exports) {
-"use strict";var r=require("./foreign.js"),n=require("../Data.Functor/index.js"),e=require("../Data.Int/index.js"),t=require("../Effect/index.js"),o=function(n){return function(e){return function(){return r.random()*(e-n)+n}}},u=function(n){return function(t){return function(){var o=r.random(),u=(e.toNumber(t)-e.toNumber(n)+1)*o+e.toNumber(n);return e.floor(u)}}},a=n.map(t.functorEffect)(function(r){return r<.5})(r.random);module.exports={randomInt:u,randomRange:o,randomBool:a,random:r.random};
-},{"./foreign.js":"7S1u","../Data.Functor/index.js":"+0AE","../Data.Int/index.js":"xNJb","../Effect/index.js":"oTWB"}],"1RqQ":[function(require,module,exports) {
-"use strict";var e=require("../Data.Eq/index.js"),r=require("../Data.EuclideanRing/index.js"),n=require("../Data.Functor/index.js"),t=require("../Data.Int/index.js"),u=require("../Data.Maybe/index.js"),i=require("../Data.Ord/index.js"),o=require("../Data.Show/index.js"),d=require("../Effect/index.js"),a=require("../Effect.Random/index.js"),c=require("../Math/index.js"),f=function(e){return e},s=function(e){return e},m=new o.Show(function(e){return"Seed "+o.show(o.showInt)(e)}),q=1,x=2147483647,j=x-1|0,S=function(e){var n;return(n=q,function(e){return function(t){var u=e-n|0,i=r.mod(r.euclideanRingInt)(t)(u);return i<n?i+e|0:i}})(j)(e)},l=n.map(d.functorEffect)(S)(a.randomInt(q)(j)),w=0,b=48271,g=function(e){return function(r){return f(u.fromJust()(t.fromNumber(c.remainder(t.toNumber(b)*t.toNumber(r)+e)(t.toNumber(x)))))}},D=g(t.toNumber(w)),h=new e.Eq(function(e){return function(r){return e===r}}),E=new i.Ord(function(){return h},function(e){return function(r){return i.compare(i.ordInt)(e)(r)}});module.exports={mkSeed:S,unSeed:s,randomSeed:l,lcgA:b,lcgC:w,lcgM:x,lcgNext:D,lcgPerturb:g,eqSeed:h,ordSeed:E,showSeed:m};
-},{"../Data.Eq/index.js":"Pq4F","../Data.EuclideanRing/index.js":"2IRB","../Data.Functor/index.js":"+0AE","../Data.Int/index.js":"xNJb","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Show/index.js":"mFY7","../Effect/index.js":"oTWB","../Effect.Random/index.js":"V+tx","../Math/index.js":"Rpaz"}],"9U+U":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),e=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),r=require("../Control.Bind/index.js"),u=require("../Control.Monad.Gen.Class/index.js"),i=require("../Control.Monad.Rec.Class/index.js"),a=require("../Control.Monad.State/index.js"),o=require("../Control.Monad.State.Class/index.js"),d=require("../Control.Monad.State.Trans/index.js"),c=require("../Data.Array/index.js"),f=require("../Data.Bounded/index.js"),l=require("../Data.Enum/index.js"),s=require("../Data.Foldable/index.js"),m=require("../Data.Functor/index.js"),p=require("../Data.Identity/index.js"),v=require("../Data.Int/index.js"),S=require("../Data.List/index.js"),y=require("../Data.List.Types/index.js"),b=require("../Data.Maybe/index.js"),x=require("../Data.Monoid.Additive/index.js"),w=require("../Data.Newtype/index.js"),q=require("../Data.NonEmpty/index.js"),j=require("../Data.Ord/index.js"),T=require("../Data.Semiring/index.js"),I=require("../Data.Tuple/index.js"),N=require("../Data.Unfoldable/index.js"),D=require("../Data.Unit/index.js"),G=require("../Math/index.js"),M=require("../Random.LCG/index.js"),C=function(n){return n},g=function(n){return n},h=function(n){return a.runState(g(n))},z=function(n){return C(o.state(d.monadStateStateT(p.monadIdentity))(function(e){return h(n(e))(e)}))},A=function(n){return z(function(e){return n(e.size)})},O=function(n){return function(e){return C(o.state(d.monadStateStateT(p.monadIdentity))(function(t){return h(e)({newSeed:n,size:t.size})}))}},E=function(n){return function(e){return C(o.state(d.monadStateStateT(p.monadIdentity))(function(t){return m.map(I.functorTuple)(function(n){return{size:t.size,newSeed:n.newSeed}})(h(e)({newSeed:t.newSeed,size:n}))}))}},L=function(n){return function(t){return function(r){if(t<=0)return e.pure(n.Monad0().Applicative0())(y.Nil.value);return i.tailRecM(n)(function(t){return 0===t.value1?e.pure(n.Monad0().Applicative0())(new i.Done(t.value0)):m.mapFlipped(n.Monad0().Bind1().Apply0().Functor0())(r)(function(n){return new i.Loop(new I.Tuple(new y.Cons(n,t.value0),t.value1-1|0))})})(new I.Tuple(y.Nil.value,t))}}},R=function(n){return C(o.state(d.monadStateStateT(p.monadIdentity))(function(e){return new I.Tuple(function(t){return I.fst(h(n(t))(e))},{newSeed:M.lcgNext(e.newSeed),size:e.size})}))},B=function(e){return function(t){return r.discard(r.discardUnit)(d.bindStateT(p.monadIdentity))(m.void(d.functorStateT(p.functorIdentity))(o.modify(d.monadStateStateT(p.monadIdentity))(function(t){var r={};for(var u in t)({}).hasOwnProperty.call(t,u)&&(r[u]=t[u]);return r.newSeed=M.lcgPerturb(v.toNumber(n.float32ToInt32(e)))(t.newSeed),r})))(function(){return g(t)})}},F=d.monadRecStateT(i.monadRecIdentity),U=d.monadStateT(p.monadIdentity),P=L(F),k=C(o.state(d.monadStateStateT(p.monadIdentity))(function(n){return new I.Tuple(M.unSeed(n.newSeed),function(){var e={};for(var t in n)({}).hasOwnProperty.call(n,t)&&(e[t]=n[t]);return e.newSeed=M.lcgNext(n.newSeed),e}())})),J=d.lazyStateT,Q=d.functorStateT(p.functorIdentity),H=m.map(Q)(function(n){return v.toNumber(n)/v.toNumber(M.lcgM)})(k),K=function(n){return function(e){return m.map(Q)(S.toUnfoldable(N.unfoldableArray))(P(n)(e))}},V=function(n){return a.evalState(g(n))},W=function(n){return function(e){return function(t){return V(K(e)(t))({newSeed:n,size:e})}}},X=function(n){return function(e){return function(){var t=M.randomSeed();return W(t)(n)(e)}}},Y=X(10),Z=function(n){return function(e){var t,r,u=j.min(j.ordNumber)(n)(e),i=j.max(j.ordNumber)(n)(e);return m.map(Q)((t=T.add(T.semiringNumber)(u),r=T.mul(T.semiringNumber)(i-u),function(n){return t(r(n))}))(H)}},$=d.bindStateT(p.monadIdentity),_=function(n){var e=new y.Cons(n.value0,n.value1),t=w.unwrap(w.newtypeAdditive)(s.fold(y.foldableList)(x.monoidAdditive(T.semiringNumber))(m.map(y.functorList)(function(n){return x.Additive(I.fst(n))})(e)));return r.bind($)(Z(0)(t))(function(t){return(r=t,function(n){return function(e){var t,u=r,i=n,a=!1;function o(n,t,r){if(r instanceof y.Nil)return a=!0,t;if(r instanceof y.Cons)return n<=r.value0.value0?(a=!0,r.value0.value1):(u=n-r.value0.value0,i=t,void(e=r.value1));throw new Error("Failed pattern match at Test.QuickCheck.Gen (line 162, column 5 - line 162, column 21): "+[n.constructor.name,t.constructor.name,r.constructor.name])}for(;!a;)t=o(u,i,e);return t}})(I.snd(n.value0))(e);var r})},nn=d.applyStateT(p.monadIdentity),en=function(n){return function(e){var r=v.toNumber(e),u=v.toNumber(n),i=m.map(Q)(v.toNumber)(k),a=t.apply(nn)(m.map(Q)(T.add(T.semiringNumber))(i))(m.map(Q)(T.mul(T.semiringNumber)(2))(i));return m.map(Q)(function(n){return v.floor((e=n,u+G.remainder(e)(r-u+1)));var e})(a)}},tn=function(n){return function(e){return n<=e?en(n)(e):en(e)(n)}},rn=function(n){return A(function(e){return r.bind($)(tn(0)(e))(function(e){return K(e)(n)})})},un=new u.MonadGen(function(){return U},m.map(Q)(function(n){return n<.5})(H),Z,tn,function(n){return function(e){return A(function(t){return E(n(t))(e)})}},A),an=function(n){return r.bind($)(tn(0)(c.length(n.value1)))(function(e){return e<1?n.value0:b.fromMaybe(n.value0)(c.index(n.value1)(e-1|0))})},on=d.applicativeStateT(p.monadIdentity),dn=function(n){return A(function(t){return r.bind($)(tn(0)(t))(function(t){return r.bind($)(n)(function(u){return r.bind($)(K(t-1|0)(n))(function(n){return e.pure(on)(new q.NonEmpty(u,n))})})})})},cn=function(n){return r.bind($)(tn(0)(c.length(n.value1)))(function(t){return e.pure(on)(0===t?n.value0:b.fromMaybe(n.value0)(c.index(n.value1)(t-1|0)))})},fn=function(n){return r.bind($)(tn(l.fromEnum(n)(f.bottom(n.Bounded0())))(l.fromEnum(n)(f.top(n.Bounded0()))))(function(t){return e.pure(on)(b.fromJust()(l.toEnum(n)(t)))})},ln=function(n){return r.bind($)(K(c.length(n))(tn(0)(f.top(f.boundedInt))))(function(t){return e.pure(on)(m.map(m.functorArray)(I.snd)(c.sortBy(j.comparing(j.ordInt)(I.fst))(c.zip(t)(n))))})},sn=function(n){return function(t){return i.tailRecM(F)(function(u){return r.bind($)(n)(function(n){return e.pure(on)(t(n)?new i.Done(n):new i.Loop(D.unit))})})(D.unit)}},mn=d.altStateT(p.monadIdentity)(p.altIdentity);module.exports={unGen:g,repeatable:R,stateful:z,variant:O,suchThat:sn,sized:A,resize:E,choose:Z,chooseInt:tn,oneOf:an,frequency:_,arrayOf:rn,arrayOf1:dn,listOf:P,vectorOf:K,elements:cn,shuffle:ln,runGen:h,evalGen:V,perturbGen:B,uniform:H,sample:W,randomSample:Y,"randomSample'":X,functorGen:Q,applyGen:nn,applicativeGen:on,bindGen:$,monadGen:U,altGen:mn,monadRecGen:F,lazyGen:J,monadGenGen:un};
-},{"./foreign.js":"/s47","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad.Gen.Class/index.js":"ONWB","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.State/index.js":"mGZW","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.State.Trans/index.js":"34Kp","../Data.Array/index.js":"4t4C","../Data.Bounded/index.js":"kcUU","../Data.Enum/index.js":"oOsU","../Data.Foldable/index.js":"eVDl","../Data.Functor/index.js":"+0AE","../Data.Identity/index.js":"2OKT","../Data.Int/index.js":"xNJb","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Monoid.Additive/index.js":"fHyj","../Data.Newtype/index.js":"lz8k","../Data.NonEmpty/index.js":"qF8i","../Data.Ord/index.js":"r4Vb","../Data.Semiring/index.js":"11NF","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unit/index.js":"NhVk","../Math/index.js":"Rpaz","../Random.LCG/index.js":"1RqQ"}],"rKI8":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),e=require("../Control.Bind/index.js"),t=require("../Control.Category/index.js"),u=require("../Control.Monad.Gen.Class/index.js"),i=require("../Control.Monad.Gen.Common/index.js"),a=require("../Data.Array.NonEmpty/index.js"),o=require("../Data.Array.ST/index.js"),c=require("../Data.Bounded/index.js"),f=require("../Data.Either/index.js"),b=require("../Data.Enum/index.js"),p=require("../Data.Foldable/index.js"),y=require("../Data.Function/index.js"),s=require("../Data.Functor/index.js"),m=require("../Data.Generic.Rep/index.js"),d=require("../Data.Identity/index.js"),l=require("../Data.Int/index.js"),w=require("../Data.Lazy/index.js"),G=require("../Data.List.Types/index.js"),h=require("../Data.Maybe/index.js"),x=require("../Data.Newtype/index.js"),j=require("../Data.NonEmpty/index.js"),q=require("../Data.Ordering/index.js"),v=require("../Data.Semigroup/index.js"),A=require("../Data.String.CodeUnits/index.js"),C=require("../Data.String.Common/index.js"),E=require("../Data.String.NonEmpty.CodeUnits/index.js"),g=require("../Data.String.NonEmpty.Internal/index.js"),D=require("../Data.String.Pattern/index.js"),N=require("../Data.Symbol/index.js"),S=require("../Data.Tuple/index.js"),L=require("../Data.Unit/index.js"),I=require("../Record/index.js"),T=require("../Test.QuickCheck.Gen/index.js"),F=require("../Type.Data.RowList/index.js"),R=function(n){this.coarbitrary=n},k=function(n){this.arbitraryRecord=n},P=function(n){this.arbitraryGenericSum=n},Q=function(n){this.arbitrary=n},M=new R(function(n){return t.identity(t.categoryFn)}),O=function(n){return n.coarbitrary},z=function(n){return new R(function(r){return O(n)(r)})},B=function(n){return new R(function(r){return O(n)(r)})},U=function(n){return function(r){return new R(function(e){var t=O(r)(e.value1),u=O(n)(e.value0);return function(n){return t(u(n))}})}},J=function(n){return function(r){return new R(function(e){if(e instanceof m.Inl)return O(n)(e.value0);if(e instanceof m.Inr)return O(r)(e.value0);throw new Error("Failed pattern match at Test.QuickCheck.Arbitrary (line 216, column 1 - line 218, column 38): "+[e.constructor.name])})}},W=function(n){return function(r){return function(e){return function(t){return s.map(T.functorGen)(m.to(n))(O(r)(m.from(n)(e))(s.map(T.functorGen)(m.from(n))(t)))}}}},H=new R(function(n){return T.perturbGen(1)}),K=function(n){return function(r){return new R(function(e){var t=O(r)(e.value1),u=O(n)(e.value0);return function(n){return t(u(n))}})}},V=new R(function(n){if(n instanceof q.LT)return T.perturbGen(1);if(n instanceof q.EQ)return T.perturbGen(2);if(n instanceof q.GT)return T.perturbGen(3);throw new Error("Failed pattern match at Test.QuickCheck.Arbitrary (line 114, column 1 - line 117, column 34): "+[n.constructor.name])}),X=new R(T.perturbGen),Y=function(n){return function(r){return new R(function(e){var t=O(n)(e.value1),u=O(r)(e.value0);return function(n){return t(u(n))}})}},Z=function(n){return new R(function(r){if(r instanceof h.Nothing)return T.perturbGen(1);if(r instanceof h.Just)return O(n)(r.value0);throw new Error("Failed pattern match at Test.QuickCheck.Arbitrary (line 154, column 1 - line 156, column 39): "+[r.constructor.name])})},$=function(n){return new R(p.foldl(G.foldableList)(function(r){return function(e){var t=O(n)(e);return function(n){return r(t(n))}}})(t.identity(t.categoryFn)))},_=function(n){return new R(function(r){return O(Y($(n))(n))(r)})},nn=function(n){return new R(function(r){return O(n)(w.force(r))})},rn=new R(function(n){return T.perturbGen(l.toNumber(n))}),en=function(n){return new R(function(r){return O(n)(r)})},tn=function(n){return function(r){return new R(function(e){if(e instanceof f.Left)return O(n)(e.value0);if(e instanceof f.Right)return O(r)(e.value0);throw new Error("Failed pattern match at Test.QuickCheck.Arbitrary (line 161, column 1 - line 163, column 40): "+[e.constructor.name])})}},un=new R(function(n){return O(rn)(b.fromEnum(b.boundedEnumChar)(n))}),an=new R(function(n){if(n)return T.perturbGen(1);if(!n)return T.perturbGen(2);throw new Error("Failed pattern match at Test.QuickCheck.Arbitrary (line 71, column 1 - line 73, column 37): "+[n.constructor.name])}),on=function(n){return new R(p.foldl(p.foldableArray)(function(r){return function(e){var t=O(n)(e);return function(n){return r(t(n))}}})(t.identity(t.categoryFn)))},cn=function(n){return new R((r=O(on(n)),function(n){return r(a.toArray(n))}));var r},fn=new R(function(n){return O(on(Z(un)))(s.map(s.functorArray)(A.charAt(0))(C.split(x.wrap(D.newtypePattern)(""))(n)))}),bn=new R(function(){var n=O(fn);return function(r){return n(g.toString(r))}}()),pn=new k(function(r){return n.pure(T.applicativeGen)({})}),yn=function(n){return n.arbitraryRecord},sn=function(n){return function(n){return new Q(yn(n)(F.RLProxy.value))}},mn=new Q(n.pure(T.applicativeGen)(m.NoArguments.value)),dn=function(n){return n.arbitraryGenericSum},ln=function(n){return n.arbitrary},wn=function(n){return new Q(s.map(T.functorGen)(m.Argument)(ln(n)))},Gn=function(n){return new Q(s.map(T.functorGen)(m.Constructor)(ln(n)))},hn=function(n){return new Q(s.map(T.functorGen)(d.Identity)(ln(n)))},xn=function(r){return new Q(e.bind(T.bindGen)(ln(r))((t=n.pure(T.applicativeGen),function(n){return t(w.defer(y.const(n)))})));var t},jn=function(n){return new Q(T.sized(function(r){return e.bind(T.bindGen)(T.chooseInt(0)(r))(y.flip(T.listOf)(ln(n)))}))},qn=function(n){return function(e){return new Q(r.apply(T.applyGen)(s.map(T.functorGen)(m.Product.create)(ln(n)))(ln(e)))}},vn=function(r){return function(t){return function(u){return function(i){return function(a){return function(a){return new k(function(o){return e.bind(T.bindGen)(ln(r))(function(r){return e.bind(T.bindGen)(yn(t)(F.RLProxy.value))(function(e){return n.pure(T.applicativeGen)(I.insert(a)(u)(i)(N.SProxy.value)(r)(e))})})})}}}}}},An=function(n){return function(r){return new Q(T.oneOf(new j.NonEmpty(s.map(T.functorGen)(m.Inl.create)(ln(n)),s.map(s.functorArray)(s.map(T.functorGen)(m.Inr.create))(dn(r)))))}},Cn=function(n){return function(r){return s.map(T.functorGen)(m.to(n))(ln(r))}},En=new Q(n.pure(T.applicativeGen)(L.unit)),gn=function(n){return function(e){return new Q(r.apply(T.applyGen)(s.map(T.functorGen)(S.Tuple.create)(ln(n)))(ln(e)))}},Dn=new Q(T.elements(new j.NonEmpty(q.LT.value,[q.EQ.value,q.GT.value]))),Nn=new Q(T.uniform),Sn=function(n){return function(e){return new Q(r.apply(T.applyGen)(s.map(T.functorGen)(j.NonEmpty.create)(ln(e)))(ln(n)))}},Ln=function(n){return new Q(s.map(T.functorGen)(G.NonEmptyList)(ln(Sn(jn(n))(n))))},In=function(n){return new Q(i.genMaybe(T.monadGenGen)(ln(n)))},Tn=new Q(T.chooseInt(-1e6)(1e6)),Fn=function(n){return function(r){return new P(v.append(v.semigroupArray)([s.map(T.functorGen)(m.Inl.create)(ln(n))])(s.map(s.functorArray)(s.map(T.functorGen)(m.Inr.create))(dn(r))))}},Rn=function(n){return new P([ln(Gn(n))])},kn=function(n){return function(r){return new Q(T.repeatable(function(e){return O(n)(e)(ln(r))}))}},Pn=function(n){return function(r){return new Q(i.genEither(T.monadGenGen)(ln(n))(ln(r)))}},Qn=new Q(s.map(T.functorGen)(b.toEnumWithDefaults(b.boundedEnumChar)(c.bottom(c.boundedChar))(c.top(c.boundedChar)))(T.chooseInt(0)(65536))),Mn=new Q(u.chooseBool(T.monadGenGen)),On=function(n){return new Q(T.arrayOf(ln(n)))},zn=function(r){return new Q(e.bind(T.bindGen)(ln(r))(function(t){return e.bind(T.bindGen)(ln(On(r)))(function(r){return n.pure(T.applicativeGen)(h.fromJust()(a.fromArray(function(){var n=o.unsafeThaw(r)();o.push(t)(n)();return o.unsafeFreeze(n)()}())))})}))},Bn=new Q(s.map(T.functorGen)(A.fromCharArray)(ln(On(Qn)))),Un=new Q(r.apply(T.applyGen)(s.map(T.functorGen)(E.cons)(ln(Qn)))(ln(Bn))),Jn=function(n){return function(r){return new R(function(t){return function(u){return e.bind(T.bindGen)(ln(On(n)))(function(n){return O(on(r))(s.map(s.functorArray)(t)(n))(u)})}})}};module.exports={Arbitrary:Q,arbitrary:ln,Coarbitrary:R,coarbitrary:O,genericArbitrary:Cn,genericCoarbitrary:W,ArbitraryGenericSum:P,arbitraryGenericSum:dn,ArbitraryRowList:k,arbitraryRecord:yn,arbBoolean:Mn,coarbBoolean:an,arbNumber:Nn,coarbNumber:X,arbInt:Tn,coarbInt:rn,arbString:Bn,coarbString:fn,arbNonEmptyString:Un,coarbNonEmptyString:bn,arbChar:Qn,coarbChar:un,arbUnit:En,coarbUnit:H,arbOrdering:Dn,coarbOrdering:V,arbArray:On,coarbArray:on,arbNonEmptyArray:zn,coarbNonEmptyArray:cn,arbFunction:kn,coarbFunction:Jn,arbTuple:gn,coarbTuple:K,arbMaybe:In,coarbMaybe:Z,arbEither:Pn,coarbEither:tn,arbitraryList:jn,coarbList:$,arbitraryIdentity:hn,coarbIdentity:en,arbitraryLazy:xn,coarbLazy:nn,arbNonEmpty:Sn,coarbNonEmpty:Y,arbNonEmptyList:Ln,coarbNonEmptyList:_,arbitraryNoArguments:mn,coarbitraryNoArguments:M,arbGenSumSum:Fn,arbGenSumConstructor:Rn,arbitrarySum:An,coarbitrarySum:J,arbitraryProduct:qn,coarbitraryProduct:U,arbitraryConstructor:Gn,coarbitraryConstructor:B,arbitraryArgument:wn,coarbitraryArgument:z,arbitraryRowListNil:pn,arbitraryRowListCons:vn,arbitraryRecordInstance:sn};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad.Gen.Class/index.js":"ONWB","../Control.Monad.Gen.Common/index.js":"K4TW","../Data.Array.NonEmpty/index.js":"eTKN","../Data.Array.ST/index.js":"s8si","../Data.Bounded/index.js":"kcUU","../Data.Either/index.js":"B2JL","../Data.Enum/index.js":"oOsU","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Generic.Rep/index.js":"AuzG","../Data.Identity/index.js":"2OKT","../Data.Int/index.js":"xNJb","../Data.Lazy/index.js":"aRUE","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.NonEmpty/index.js":"qF8i","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.String.CodeUnits/index.js":"6c6X","../Data.String.Common/index.js":"OSrc","../Data.String.NonEmpty.CodeUnits/index.js":"EM+K","../Data.String.NonEmpty.Internal/index.js":"Ph6A","../Data.String.Pattern/index.js":"nKWe","../Data.Symbol/index.js":"4oJQ","../Data.Tuple/index.js":"II/O","../Data.Unit/index.js":"NhVk","../Record/index.js":"0gG4","../Test.QuickCheck.Gen/index.js":"9U+U","../Type.Data.RowList/index.js":"XaXP"}],"PpsX":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),e=require("../Control.Bind/index.js"),u=require("../Control.Monad/index.js"),t=require("../Data.Distributive/index.js"),i=require("../Data.Eq/index.js"),a=require("../Data.Foldable/index.js"),o=require("../Data.Functor/index.js"),c=require("../Data.Monoid/index.js"),l=require("../Data.Ord/index.js"),f=require("../Data.Ordering/index.js"),v=require("../Data.Semigroup/index.js"),p=require("../Data.Show/index.js"),d=require("../Data.Traversable/index.js"),s=require("../Test.QuickCheck.Arbitrary/index.js"),w=require("../Test.QuickCheck.Gen/index.js"),q=function(){function n(n,r){this.value0=n,this.value1=r}return n.create=function(r){return function(e){return new n(r,e)}},n}(),m=function(n){return function(r){return n(r.value0)(r.value1)}},y=function(n){return new q(n.value1,n.value0)},x=function(n){return n.value1},j=function(n){return new p.Show(function(r){return"("+p.show(n)(r.value0)+" ~ "+p.show(n)(r.value1)+")"})},b=function(n){return new v.Semigroup(function(r){return function(e){return new q(v.append(n)(r.value0)(e.value0),v.append(n)(r.value1)(e.value1))}})},P=function(n){return new c.Monoid(function(){return b(n.Semigroup0())},new q(c.mempty(n),c.mempty(n)))},D=new o.Functor(function(n){return function(r){return new q(n(r.value0),n(r.value1))}}),A=function(n){return n.value0},h=new a.Foldable(function(n){return function(r){return function(e){return v.append(n.Semigroup0())(r(e.value0))(r(e.value1))}}},function(n){return function(r){return function(e){return n(n(r)(e.value0))(e.value1)}}},function(n){return function(r){return function(e){return n(e.value0)(n(e.value1)(r))}}}),T=new d.Traversable(function(){return h},function(){return D},function(n){return function(e){return r.apply(n.Apply0())(o.map(n.Apply0().Functor0())(q.create)(e.value0))(e.value1)}},function(n){return function(e){return function(u){return r.apply(n.Apply0())(o.map(n.Apply0().Functor0())(q.create)(e(u.value0)))(e(u.value1))}}}),g=function(n){return new i.Eq(function(r){return function(e){return i.eq(n)(r.value0)(e.value0)&&i.eq(n)(r.value1)(e.value1)}})},C=function(n){return new l.Ord(function(){return g(n.Eq0())},function(r){return function(e){var u=l.compare(n)(r.value0)(e.value0);return u instanceof f.LT?f.LT.value:u instanceof f.GT?f.GT.value:l.compare(n)(r.value1)(e.value1)}})},F=new t.Distributive(function(){return D},function(n){return function(r){return function(e){return new q(o.map(n)(function(n){return A(r(n))})(e),o.map(n)(function(n){return x(r(n))})(e))}}},function(n){return function(r){return new q(o.map(n)(A)(r),o.map(n)(x)(r))}}),S=function(n){return function(r){return function(e){return n(new q(r,e))}}},G=function(n){return new s.Arbitrary(r.apply(w.applyGen)(o.map(w.functorGen)(q.create)(s.arbitrary(n)))(s.arbitrary(n)))},k=new r.Apply(function(){return D},function(n){return function(r){return new q(n.value0(r.value0),n.value1(r.value1))}}),M=new e.Bind(function(){return k},function(n){return function(r){return new q(A(r(n.value0)),x(r(n.value1)))}}),E=new n.Applicative(function(){return k},function(n){return new q(n,n)}),O=new u.Monad(function(){return E},function(){return M});module.exports={Pair:q,fst:A,snd:x,curry:S,uncurry:m,swap:y,eqPair:g,ordPair:C,showPair:j,functorPair:D,applyPair:k,applicativePair:E,bindPair:M,monadPair:O,semigroupPair:b,monoidPair:P,foldablePair:h,traversablePair:T,distributivePair:F,arbitraryPair:G};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Distributive/index.js":"8PTu","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Test.QuickCheck.Arbitrary/index.js":"rKI8","../Test.QuickCheck.Gen/index.js":"9U+U"}],"AnkF":[function(require,module,exports) {
-"use strict";var n=require("../Control.Category/index.js"),e=require("../Data.Eq/index.js"),r=require("../Data.Monoid/index.js"),o=require("../Data.Newtype/index.js"),u=require("../Data.Ord/index.js"),t=require("../Data.Ring/index.js"),i=require("../Data.Semigroup/index.js"),s=require("../Data.Show/index.js"),c=function(n){return n},w=function(n){return n},d=function(n){return n},f=function(n){return n},a=function(n){return n},m=function(n,e){this.fromDuration=n,this.toDuration=e},y=function(n){return n.toDuration},D=new s.Show(function(n){return"(Seconds "+s.show(s.showNumber)(n)+")"}),M=new s.Show(function(n){return"(Minutes "+s.show(s.showNumber)(n)+")"}),h=new s.Show(function(n){return"(Milliseconds "+s.show(s.showNumber)(n)+")"}),p=new s.Show(function(n){return"(Hours "+s.show(s.showNumber)(n)+")"}),N=new s.Show(function(n){return"(Days "+s.show(s.showNumber)(n)+")"}),S=new i.Semigroup(function(n){return function(e){return n+e}}),l=new i.Semigroup(function(n){return function(e){return n+e}}),q=new i.Semigroup(function(n){return function(e){return n+e}}),g=new i.Semigroup(function(n){return function(e){return n+e}}),b=new i.Semigroup(function(n){return function(e){return n+e}}),v=u.ordNumber,x=u.ordNumber,H=u.ordNumber,j=u.ordNumber,C=u.ordNumber,F=new o.Newtype(function(n){return n},c),E=new o.Newtype(function(n){return n},w),O=new o.Newtype(function(n){return n},d),R=new o.Newtype(function(n){return n},f),k=new o.Newtype(function(n){return n},a),z=new r.Monoid(function(){return S},0),A=new r.Monoid(function(){return l},0),B=new r.Monoid(function(){return q},0),G=new r.Monoid(function(){return g},0),I=new r.Monoid(function(){return b},0),J=function(n){return n.fromDuration},K=function(n){var e=y(n),r=o.over(O)(O)(d)(t.negate(t.ringNumber)),u=J(n);return function(n){return e(r(u(n)))}},L=e.eqNumber,P=e.eqNumber,Q=e.eqNumber,T=e.eqNumber,U=e.eqNumber,V=new m(o.over(F)(O)(c)(function(n){return 1e3*n}),o.over(O)(F)(d)(function(n){return n/1e3})),W=new m(o.over(E)(O)(w)(function(n){return 6e4*n}),o.over(O)(E)(d)(function(n){return n/6e4})),X=new m(n.identity(n.categoryFn),n.identity(n.categoryFn)),Y=new m(o.over(R)(O)(f)(function(n){return 36e5*n}),o.over(O)(R)(d)(function(n){return n/36e5})),Z=new m(o.over(k)(O)(a)(function(n){return 864e5*n}),o.over(O)(k)(d)(function(n){return n/864e5})),$=function(n){return function(e){var r=y(e),o=J(n);return function(n){return r(o(n))}}};module.exports={fromDuration:J,toDuration:y,Milliseconds:d,Seconds:c,Minutes:w,Hours:f,Days:a,Duration:m,convertDuration:$,negateDuration:K,newtypeMilliseconds:O,eqMilliseconds:Q,ordMilliseconds:H,semigroupMilliseconds:q,monoidMilliseconds:B,showMilliseconds:h,newtypeSeconds:F,eqSeconds:L,ordSeconds:v,semigroupSeconds:S,monoidSeconds:z,showSeconds:D,newtypeMinutes:E,eqMinutes:P,ordMinutes:x,semigroupMinutes:l,monoidMinutes:A,showMinutes:M,newtypeHours:R,eqHours:T,ordHours:j,semigroupHours:g,monoidHours:G,showHours:p,newtypeDays:k,eqDays:U,ordDays:C,semigroupDays:b,monoidDays:I,showDays:N,durationMilliseconds:X,durationSeconds:V,durationMinutes:W,durationHours:Y,durationDays:Z};
-},{"../Control.Category/index.js":"IAi2","../Data.Eq/index.js":"Pq4F","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Ring/index.js":"E2qH","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"0f5O":[function(require,module,exports) {
-"use strict";exports.unsafePartial=function(t){return t()};
-},{}],"vcP9":[function(require,module,exports) {
-"use strict";exports.crashWith=function(){return function(r){throw new Error(r)}};
-},{}],"HAG3":[function(require,module,exports) {
-"use strict";var r=require("./foreign.js"),t=function(t){return r.crashWith(t)("Partial.crash: partial function")};module.exports={crash:t,crashWith:r.crashWith};
-},{"./foreign.js":"vcP9"}],"aoR+":[function(require,module,exports) {
-"use strict";var r=require("./foreign.js"),n=require("../Partial/index.js"),a=function(n){return function(n){return r.unsafePartial(function(r){return n(r)})}},e=function(a){return r.unsafePartial(function(r){return n.crashWith(r)(a)})};module.exports={unsafePartialBecause:a,unsafeCrashWith:e,unsafePartial:r.unsafePartial};
-},{"./foreign.js":"0f5O","../Partial/index.js":"HAG3"}],"kYoO":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),t=require("../Control.Plus/index.js"),e=require("../Data.Boolean/index.js"),r=require("../Data.List.Types/index.js"),u=require("../Data.Maybe/index.js"),a=require("../Data.Ord/index.js"),o=require("../Data.Ordering/index.js"),i=require("../Data.Symbol/index.js"),c=require("../Partial.Unsafe/index.js"),l=require("../Type.Data.RowList/index.js"),f=function(n){return n},s=function(){function n(){}return n.value=new n,n}(),v=function(n){this.variantTags=n},p={},m={},h=function(n){this.contractWith=n},d=new v(function(n){return r.Nil.value}),C=function(n){return n.variantTags},y=function(n){return function(t){return new v(function(e){return new r.Cons(i.reflectSymbol(t)(i.SProxy.value),C(n)(l.RLProxy.value))})}},w=p,g=function(n){return function(n){return function(n){return p}}},x=m,D=function(n){return function(n){return function(n){return m}}},N=function(n){return function(t){return function(a){var o,i=n,c=t,l=!1;function f(n,t,o){if(t instanceof r.Cons&&o instanceof r.Cons){if(o.value0.cardinality>n){var f=o.value0.toEnum(n);return f instanceof u.Just?(l=!0,u.Just.create({type:t.value0,value:f.value0})):(l=!0,u.Nothing.value)}if(e.otherwise)return i=n-o.value0.cardinality|0,c=t.value1,void(a=o.value1)}return l=!0,u.Nothing.value}for(;!l;)o=f(i,c,a);return o}}},E=function(n){return function(t){var u,a=!1;function o(u){if(u instanceof r.Cons){if(u.value0===n)return a=!0,!0;if(e.otherwise)return void(t=u.value1)}if(u instanceof r.Nil)return a=!0,!1;throw new Error("Failed pattern match at Data.Variant.Internal (line 94, column 8 - line 98, column 18): "+[u.constructor.name])}for(;!a;)u=o(t);return u}},F=function(){var n;return n=0,function(t){var e,u=n,a=!1;function o(n,e){if(e instanceof r.Cons)return u=n+e.value0.cardinality|0,void(t=e.value1);if(e instanceof r.Nil)return a=!0,n;throw new Error("Failed pattern match at Data.Variant.Internal (line 216, column 12 - line 218, column 16): "+[e.constructor.name])}for(;!a;)e=o(u,t);return e}}(),q=function(n){return c.unsafeCrashWith("Data.Variant: impossible `"+n+"`")},V=function(n){return function(t){return function(u){return function(a){var o,i=u,c=!1;function l(u,o){if(u instanceof r.Cons&&o instanceof r.Cons){if(u.value0===t)return c=!0,o.value0;if(e.otherwise)return i=u.value1,void(a=o.value1)}return c=!0,q(n)}for(;!c;)o=l(i,a);return o}}}},k=function(n){return function(t){return function(r){return function(u){if(r.type===u.type)return V("eq")(r.type)(n)(t)(r.value)(u.value);if(e.otherwise)return!1;throw new Error("Failed pattern match at Data.Variant.Internal (line 100, column 1 - line 105, column 12): "+[n.constructor.name,t.constructor.name,r.constructor.name,u.constructor.name])}}}},j=function(n){return function(t){return function(e){return function(r){var u=a.compare(a.ordString)(e.type)(r.type);return u instanceof o.EQ?V("compare")(e.type)(n)(t)(e.value)(r.value):u}}}},J=function(n){return function(t){return function(e){return function(u){return e instanceof r.Cons&&u instanceof r.Cons?{type:e.value0,value:t(u.value0)}:q(n)}}}},T=function(n){var t;return t=0,function(u){return function(a){var o,i=t,c=u,l=!1;function f(t,u,o){if(u instanceof r.Cons&&o instanceof r.Cons){if(u.value0===n.type)return l=!0,t+o.value0.fromEnum(n.value)|0;if(e.otherwise)return i=t+o.value0.cardinality|0,c=u.value1,void(a=o.value1)}return l=!0,q("fromEnum")}for(;!l;)o=f(i,c,a);return o}}},I=function(n){return function(t){return function(e){return function(u){for(var a,o,i,c=e,l=!1;!l;)i=u,a=(o=c)instanceof r.Cons&&o.value1 instanceof r.Nil&&i instanceof r.Cons&&i.value1 instanceof r.Nil?(l=!0,{type:o.value0,value:t(i.value0)}):o instanceof r.Cons&&i instanceof r.Cons?(c=o.value1,void(u=i.value1)):(l=!0,q(n));return a}}}},P=function(n){return function(t){return function(a){return function(o){if(t instanceof r.Cons&&a instanceof r.Cons&&o instanceof r.Cons){if(t.value0===n.type){var i=o.value0.pred(n.value);if(i instanceof u.Nothing)return u.Nothing.value;if(i instanceof u.Just)return u.Just.create({type:n.type,value:i.value0});throw new Error("Failed pattern match at Data.Variant.Internal (line 175, column 11 - line 177, column 69): "+[i.constructor.name])}if(e.otherwise)return(c=t.value0,function(t){return function(a){return function(a){return function(o){return function(i){var l,f=c,s=t,v=a,p=o,m=!1;function h(t,a,o,c,l,h){if(c instanceof r.Cons&&l instanceof r.Cons&&h instanceof r.Cons){if(c.value0===n.type){var d=h.value0.pred(n.value);if(d instanceof u.Nothing)return m=!0,u.Just.create({type:t,value:a.top});if(d instanceof u.Just)return m=!0,u.Just.create({type:n.type,value:d.value0});throw new Error("Failed pattern match at Data.Variant.Internal (line 184, column 11 - line 186, column 69): "+[d.constructor.name])}if(e.otherwise)return f=c.value0,s=l.value0,h.value0,v=c.value1,p=l.value1,void(i=h.value1)}return m=!0,q("pred")}for(;!m;)l=h(f,s,0,v,p,i);return l}}}}})(a.value0)(o.value0)(t.value1)(a.value1)(o.value1)}var c;return q("pred")}}}},b=function(n){return function(t){return function(a){return function(o){var i,c=t,l=a,f=!1;function s(t,a,i){if(t instanceof r.Cons&&a instanceof r.Cons&&i instanceof r.Cons){if(t.value0===n.type){var s=i.value0.succ(n.value);if(s instanceof u.Just)return f=!0,u.Just.create({type:t.value0,value:s.value0});if(s instanceof u.Nothing)return t.value1 instanceof r.Cons&&a.value1 instanceof r.Cons?(f=!0,u.Just.create({type:t.value1.value0,value:a.value1.value0.bottom})):(f=!0,u.Nothing.value);throw new Error("Failed pattern match at Data.Variant.Internal (line 202, column 11 - line 206, column 29): "+[s.constructor.name])}if(e.otherwise)return c=t.value1,l=a.value1,void(o=i.value1)}return f=!0,q("succ")}for(;!f;)i=s(c,l,o);return i}}}},M=function(r){return function(r){return function(r){return new h(function(u){return function(a){return function(o){return function(i){return function(c){if(E(i)(C(r)(l.RLProxy.value)))return n.pure(u.Applicative0())(c);if(e.otherwise)return t.empty(u.Plus1());throw new Error("Failed pattern match at Data.Variant.Internal (line 254, column 1 - line 263, column 24): "+[a.constructor.name,o.constructor.name,i.constructor.name,c.constructor.name])}}}}})}}},L=function(n){return n.contractWith};module.exports={FProxy:s,VariantRep:f,VariantTags:v,variantTags:C,Contractable:h,contractWith:L,VariantMatchCases:p,VariantFMatchCases:m,lookup:V,lookupTag:E,lookupEq:k,lookupOrd:j,lookupLast:I,lookupFirst:J,lookupPred:P,lookupSucc:b,lookupCardinality:F,lookupFromEnum:T,lookupToEnum:N,impossible:q,variantMatchCons:g,variantMatchNil:w,variantFMatchCons:D,variantFMatchNil:x,variantTagsNil:d,variantTagsCons:y,contractWithInstance:M};
-},{"../Control.Applicative/index.js":"qYya","../Control.Plus/index.js":"oMBg","../Data.Boolean/index.js":"ObQr","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Symbol/index.js":"4oJQ","../Partial.Unsafe/index.js":"aoR+","../Type.Data.RowList/index.js":"XaXP"}],"hgdh":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Plus/index.js"),t=require("../Data.Bounded/index.js"),u=require("../Data.Enum/index.js"),e=require("../Data.Eq/index.js"),o=require("../Data.Function/index.js"),i=require("../Data.List.Types/index.js"),a=require("../Data.Ord/index.js"),c=require("../Data.Show/index.js"),f=require("../Data.Symbol/index.js"),s=require("../Data.Variant.Internal/index.js"),l=require("../Partial.Unsafe/index.js"),v=require("../Record.Unsafe/index.js"),d=require("../Type.Data.Row/index.js"),y=require("../Type.Data.RowList/index.js"),x=require("../Unsafe.Coerce/index.js"),p=function(n){return n},w=function(n){this.variantShows=n},m=function(n){this.variantOrds=n},P=function(n){this.variantEqs=n},R=function(n){this.variantBounded=n},V=function(n,r){this.VariantBounded0=n,this.variantBoundedEnums=r},L=function(n){return n.variantShows},q=function(n){return n.variantOrds},h=function(n){return n.variantEqs},E=function(n){return n.variantBoundedEnums},j=function(n){return n.variantBounded},B=function(n){return function(r){return(t={reflectSymbol:o.const(n.type)},function(n){return r(t)(n)})({})(f.SProxy.value)(n.value);var t}},C=new w(function(n){return i.Nil.value}),S=function(n){return function(r){return new w(function(t){return new i.Cons(c.show(r),L(n)(y.RLProxy.value))})}},T=function(n){return function(n){return function(r){return new c.Show(function(t){var u=s.variantTags(n)(y.RLProxy.value),e=L(r)(y.RLProxy.value),o=s.lookup("show")(t.type)(u)(e)(t.value);return"(inj @"+c.show(c.showString)(t.type)+" "+o+")"})}}},b=new m(function(n){return i.Nil.value}),D=function(n){return function(r){return new m(function(t){return new i.Cons(a.compare(r),q(n)(y.RLProxy.value))})}},g=function(n){return function(n){return function(n){return function(n){return function(r){return function(t){return v.unsafeHas(t.type)(n)?v.unsafeGet(t.type)(n)(t.value):r(t)}}}}}},k=function(n){return function(n){return function(r){return function(t){return function(u){return function(e){return e.type===f.reflectSymbol(n)(r)?t(e.value):u(e)}}}}}},N=function(t){return function(u){return function(e){return function(i){return k(t)(u)(i)(n.pure(e.Applicative0()))(o.const(r.empty(e.Plus1())))}}}},O=function(n){return function(n){return function(r){return function(t){return{type:f.reflectSymbol(n)(r),value:t}}}}},U=function(n){return n(function(n){return function(r){return O(r)(n)}})},F=function(n){return x.unsafeCoerce},A=new P(function(n){return i.Nil.value}),W=function(n){return function(r){return new P(function(t){return new i.Cons(e.eq(r),h(n)(y.RLProxy.value))})}},G=function(n){return function(n){return function(r){return new e.Eq(function(t){return function(u){var e=s.variantTags(n)(y.RLProxy.value),o=h(r)(y.RLProxy.value);return s.lookupEq(e)(o)(t)(u)}})}}},H=function(n){return function(r){return function(t){return function(u){return new a.Ord(function(){return G(n)(r)(t)},function(n){return function(t){var e=s.variantTags(r)(y.RLProxy.value),o=q(u)(y.RLProxy.value);return s.lookupOrd(e)(o)(n)(t)}})}}}},I=function(n){return function(r){return function(t){return function(e){return function(o){return new u.Enum(function(){return H(n)(r)(t)(e)},function(n){var t=s.variantTags(r)(y.RLProxy.value),u=E(o)(y.RLProxy.value),e=j(o.VariantBounded0())(y.RLProxy.value);return s.lookupPred(n)(t)(e)(u)},function(n){var t=s.variantTags(r)(y.RLProxy.value),u=E(o)(y.RLProxy.value),e=j(o.VariantBounded0())(y.RLProxy.value);return s.lookupSucc(n)(t)(e)(u)})}}}}},M=function(n){return function(r){return n}},_=function(n){return function(r){return function(t){return s.contractWith(r)(n)(d.RProxy.value)(d.RProxy.value)(t.type)(t)}}},z=function(n){return l.unsafeCrashWith("Data.Variant: pattern match failure ["+n.type+"]")},J=function(n){return function(r){return function(t){return function(u){return g(n)(r)(t)(u)(z)}}}},K=new R(function(n){return i.Nil.value}),Q=new V(function(){return K},function(n){return i.Nil.value}),X=function(n){return function(r){return new R(function(u){var e={top:t.top(r),bottom:t.bottom(r)};return new i.Cons(e,j(n)(y.RLProxy.value))})}},Y=function(n){return function(r){return new V(function(){return X(n.VariantBounded0())(r.Bounded0())},function(t){var e={pred:u.pred(r.Enum1()),succ:u.succ(r.Enum1()),fromEnum:u.fromEnum(r),toEnum:u.toEnum(r),cardinality:u.cardinality(r)};return new i.Cons(e,E(n)(y.RLProxy.value))})}},Z=function(n){return function(r){return function(u){return function(e){return function(o){return new t.Bounded(function(){return H(n)(r)(u)(e)},(i=s.variantTags(r)(y.RLProxy.value),a=j(o)(y.RLProxy.value),s.VariantRep(s.lookupFirst("bottom")(function(n){return n.bottom})(i)(a))),function(){var n=s.variantTags(r)(y.RLProxy.value),t=j(o)(y.RLProxy.value);return s.VariantRep(s.lookupLast("top")(function(n){return n.top})(n)(t))}());var i,a}}}}},$=function(n){return function(r){return function(t){return function(e){return function(o){return new u.BoundedEnum(function(){return Z(n)(r)(t)(e)(o.VariantBounded0())},function(){return I(n)(r)(t)(e)(o)},u.Cardinality(s.lookupCardinality(E(o)(y.RLProxy.value))),function(n){var t=s.variantTags(r)(y.RLProxy.value),u=E(o)(y.RLProxy.value);return s.lookupFromEnum(n)(t)(u)},function(n){var t=s.variantTags(r)(y.RLProxy.value),u=E(o)(y.RLProxy.value);return s.lookupToEnum(n)(t)(u)})}}}}};module.exports={inj:O,prj:N,on:k,onMatch:g,case_:z,match:J,default:M,expand:F,contract:_,Unvariant:p,unvariant:B,revariant:U,VariantEqs:P,variantEqs:h,VariantOrds:m,variantOrds:q,VariantShows:w,variantShows:L,VariantBounded:R,variantBounded:j,VariantBoundedEnums:V,variantBoundedEnums:E,eqVariantNil:A,eqVariantCons:W,eqVariant:G,boundedVariantNil:K,boundedVariantCons:X,boundedVariant:Z,enumVariantNil:Q,enumVariantCons:Y,enumVariant:I,boundedEnumVariant:$,ordVariantNil:b,ordVariantCons:D,ordVariant:H,showVariantNil:C,showVariantCons:S,showVariant:T};
-},{"../Control.Applicative/index.js":"qYya","../Control.Plus/index.js":"oMBg","../Data.Bounded/index.js":"kcUU","../Data.Enum/index.js":"oOsU","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.List.Types/index.js":"Xxuc","../Data.Ord/index.js":"r4Vb","../Data.Show/index.js":"mFY7","../Data.Symbol/index.js":"4oJQ","../Data.Variant.Internal/index.js":"kYoO","../Partial.Unsafe/index.js":"aoR+","../Record.Unsafe/index.js":"KG04","../Type.Data.Row/index.js":"ukdD","../Type.Data.RowList/index.js":"XaXP","../Unsafe.Coerce/index.js":"ETUV"}],"idq0":[function(require,module,exports) {
-"use strict";var n=function(){var n={},r="Pure",e="Throw",t="Catch",u="Sync",i="Async",l="Bind",o="Bracket",f="Fork",c="Sequential",a="Map",s="Apply",_="Alt",h="Cons",w="Resume",p="Release",k="Finalizer",d="Finalized",v="Forked";function m(n,r,e,t){this.tag=n,this._1=r,this._2=e,this._3=t}function b(n){var r=function(r,e,t){return new m(n,r,e,t)};return r.tag=n,r}function g(n){return new m(r,void 0)}function y(n){try{n()}catch(r){setTimeout(function(){throw r},0)}}function A(n,r,e){try{return r(e())}catch(t){return n(t)}}function P(n,r,e){try{return r(e)()}catch(t){return e(n(t))(),g}}var x=function(){var n=1024,r=0,e=0,t=new Array(n),u=!1;function i(){var i;for(u=!0;0!==r;)r--,i=t[e],t[e]=void 0,e=(e+1)%n,i();u=!1}return{isDraining:function(){return u},enqueue:function(l){var o;r===n&&(o=u,i(),u=o),t[(e+r)%n]=l,r++,u||i()}}}();var L=0,S=1,F=2,T=3,R=4,B=5,C=6;function q(n,a,s){var _=0,v=L,b=s,g=null,E=null,M=null,I=null,z=null,D=0,j=0,Y=null,G=!0;function H(s){for(var j,J,K;;)switch(j=null,J=null,K=null,v){case F:v=S,b=M(b),null===I?M=null:(M=I._1,I=I._2);break;case T:n.isLeft(b)?(v=B,g=b,b=null):null===M?v=B:(v=F,b=n.fromRight(b));break;case S:switch(b.tag){case l:M&&(I=new m(h,M,I)),M=b._2,v=S,b=b._1;break;case r:null===M?(v=B,b=n.right(b._1)):(v=F,b=b._1);break;case u:v=T,b=A(n.left,n.right,b._1);break;case i:return v=R,void(b=P(n.left,b._1,function(n){return function(){_===s&&(_++,x.enqueue(function(){_===s+1&&(v=T,b=n,H(_))}))}}));case e:v=B,g=n.left(b._1),b=null;break;case t:z=new m(h,b,null===M?z:new m(h,new m(w,M,I),z,E),E),M=null,I=null,v=S,b=b._1;break;case o:D++,z=new m(h,b,null===M?z:new m(h,new m(w,M,I),z,E),E),M=null,I=null,v=S,b=b._1;break;case f:v=T,j=q(n,a,b._2),a&&a.register(j),b._1&&j.run(),b=n.right(j);break;case c:v=S,b=O(n,a,b._1)}break;case B:if(M=null,I=null,null===z)v=C,b=E||g||b;else switch(j=z._3,K=z._1,z=z._2,K.tag){case t:E&&E!==j&&0===D?v=B:g&&(v=S,b=K._2(n.fromLeft(g)),g=null);break;case w:E&&E!==j&&0===D||g?v=B:(M=K._1,I=K._2,v=F,b=n.fromRight(b));break;case o:D--,null===g&&(J=n.fromRight(b),z=new m(h,new m(p,K._2,J),z,j),(E===j||D>0)&&(v=S,b=K._3(J)));break;case p:z=new m(h,new m(d,b,g),z,E),v=S,b=E&&E!==j&&0===D?K._1.killed(n.fromLeft(E))(K._2):g?K._1.failed(n.fromLeft(g))(K._2):K._1.completed(n.fromRight(b))(K._2),g=null,D++;break;case k:D++,z=new m(h,new m(d,b,g),z,E),v=S,b=K._1;break;case d:D--,v=B,b=K._1,g=K._2}break;case C:for(var N in Y)Y.hasOwnProperty(N)&&(G=G&&Y[N].rethrow,y(Y[N].handler(b)));return Y=null,void(E&&g?setTimeout(function(){throw n.fromLeft(g)},0):n.isLeft(b)&&G&&setTimeout(function(){if(G)throw n.fromLeft(b)},0));case L:v=S;break;case R:return}}function J(n){return function(){if(v===C)return G=G&&n.rethrow,n.handler(b)(),function(){};var r=j++;return(Y=Y||{})[r]=n,function(){null!==Y&&delete Y[r]}}}return{kill:function(r,e){return function(){if(v===C)return e(n.right(void 0))(),function(){};var t=J({rethrow:!1,handler:function(){return e(n.right(void 0))}})();switch(v){case L:E=n.left(r),v=C,b=E,H(_);break;case R:null===E&&(E=n.left(r)),0===D&&(v===R&&(z=new m(h,new m(k,b(r)),z,E)),v=B,b=null,g=null,H(++_));break;default:null===E&&(E=n.left(r)),0===D&&(v=B,b=null,g=null)}return t}},join:function(n){return function(){var r=J({rethrow:!1,handler:n})();return v===L&&H(_),r}},onComplete:J,isSuspended:function(){return v===L},run:function(){v===L&&(x.isDraining()?H(_):x.enqueue(function(){H(_)}))}}}function E(r,e,t,u){var l=0,o={},f=0,c={},w=new Error("[ParAff] Early exit"),p=null,k=n;function d(e,t,u){var i,l,f=t,c=null,w=null,p=0,k={};n:for(;;)switch(i=null,f.tag){case v:if(f._3===n&&(i=o[f._1],k[p++]=i.kill(e,function(n){return function(){0===--p&&u(n)()}})),null===c)break n;f=c._2,null===w?c=null:(c=w._1,w=w._2);break;case a:f=f._2;break;case s:case _:c&&(w=new m(h,c,w)),c=f,f=f._1}if(0===p)u(r.right(void 0))();else for(l=0,i=p;l<i;l++)k[l]=k[l]();return k}function b(e){return function(t){return function(){delete o[e._1],e._3=t,function e(t,i,l){var o,h,k,v,m,b;for(r.isLeft(t)?(o=t,h=null):(h=t,o=null);;){if(k=null,v=null,m=null,b=null,null!==p)return;if(null===i)return void u(o||h)();if(i._3!==n)return;switch(i.tag){case a:null===o?(i._3=r.right(i._1(r.fromRight(h))),h=i._3):i._3=o;break;case s:if(k=i._1._3,v=i._2._3,o){if(i._3=o,m=!0,b=f++,c[b]=d(w,o===k?i._2:i._1,function(){return function(){delete c[b],m?m=!1:null===l?e(o,null,null):e(o,l._1,l._2)}}),m)return void(m=!1)}else{if(k===n||v===n)return;h=r.right(r.fromRight(k)(r.fromRight(v))),i._3=h}break;case _:if(k=i._1._3,v=i._2._3,k===n&&r.isLeft(v)||v===n&&r.isLeft(k))return;if(k!==n&&r.isLeft(k)&&v!==n&&r.isLeft(v))o=h===k?v:k,h=null,i._3=o;else if(i._3=h,m=!0,b=f++,c[b]=d(w,h===k?i._2:i._1,function(){return function(){delete c[b],m?m=!1:null===l?e(h,null,null):e(h,l._1,l._2)}}),m)return void(m=!1)}null===l?i=null:(i=l._1,l=l._2)}}(t,e._2._1,e._2._2)}}}return function(){var u,i,f=S,c=t,w=null,p=null;n:for(;;)switch(u=null,i=null,f){case S:switch(c.tag){case a:w&&(p=new m(h,w,p)),w=new m(a,c._1,n,n),c=c._2;break;case s:w&&(p=new m(h,w,p)),w=new m(s,n,c._2,n),c=c._1;break;case _:w&&(p=new m(h,w,p)),w=new m(_,n,c._2,n),c=c._1;break;default:i=l++,f=B,u=c,c=new m(v,i,new m(h,w,p),n),(u=q(r,e,u)).onComplete({rethrow:!1,handler:b(c)})(),o[i]=u,e&&e.register(u)}break;case B:if(null===w)break n;w._1===n?(w._1=c,f=S,c=w._2,w._2=n):(w._2=c,c=w,null===p?w=null:(w=p._1,p=p._2))}for(k=c,i=0;i<l;i++)o[i].run()}(),function(n){return new m(i,function(e){return function(){return function(n,e){var t;for(var u in p=r.left(n),c)if(c.hasOwnProperty(u))for(u in t=c[u])t.hasOwnProperty(u)&&t[u]();c=null;var l=d(n,k,e);return function(n){return new m(i,function(n){return function(){for(var n in l)l.hasOwnProperty(n)&&l[n]();return g}})}}(n,e)}})}}function O(n,r,e){return new m(i,function(t){return function(){return E(n,r,e,t)}})}return m.EMPTY=n,m.Pure=b(r),m.Throw=b(e),m.Catch=b(t),m.Sync=b(u),m.Async=b(i),m.Bind=b(l),m.Bracket=b(o),m.Fork=b(f),m.Seq=b(c),m.ParMap=b(a),m.ParApply=b(s),m.ParAlt=b(_),m.Fiber=q,m.Supervisor=function(n){var r={},e=0,t=0;return{register:function(n){var u=e++;n.onComplete({rethrow:!0,handler:function(n){return function(){t--,delete r[u]}}}),r[u]=n,t++},isEmpty:function(){return 0===t},killAll:function(i,l){return function(){if(0===t)return l();var o=0,f={};function c(e){f[e]=r[e].kill(i,function(r){return function(){delete f[e],o--,n.isLeft(r)&&n.fromLeft(r)&&setTimeout(function(){throw n.fromLeft(r)},0),0===o&&l()}})()}for(var a in r)r.hasOwnProperty(a)&&(o++,c(a));return r={},e=0,t=0,function(n){return new m(u,function(){for(var n in f)f.hasOwnProperty(n)&&f[n]()})}}}}},m.Scheduler=x,m.nonCanceler=g,m}();exports._pure=n.Pure,exports._throwError=n.Throw,exports._catchError=function(r){return function(e){return n.Catch(r,e)}},exports._map=function(r){return function(e){return e.tag===n.Pure.tag?n.Pure(r(e._1)):n.Bind(e,function(e){return n.Pure(r(e))})}},exports._bind=function(r){return function(e){return n.Bind(r,e)}},exports._fork=function(r){return function(e){return n.Fork(r,e)}},exports._liftEffect=n.Sync,exports._parAffMap=function(r){return function(e){return n.ParMap(r,e)}},exports._parAffApply=function(r){return function(e){return n.ParApply(r,e)}},exports._parAffAlt=function(r){return function(e){return n.ParAlt(r,e)}},exports.makeAff=n.Async,exports.generalBracket=function(r){return function(e){return function(t){return n.Bracket(r,e,t)}}},exports._makeFiber=function(r,e){return function(){return n.Fiber(r,null,e)}},exports._makeSupervisedFiber=function(r,e){return function(){var t=n.Supervisor(r);return{fiber:n.Fiber(r,t,e),supervisor:t}}},exports._killAll=function(n,r,e){return r.killAll(n,e)},exports._delay=function(){return function(r,e){return n.Async(function(t){return function(){var u,i,l=(u=e,i=t(r()),0===u&&"undefined"!=typeof setImmediate?setImmediate(i):setTimeout(i,u));return function(){return n.Sync(function(){return r((n=l,0===e&&"undefined"!=typeof clearImmediate?clearImmediate(n):clearTimeout(n)));var n})}}})}}(),exports._sequential=n.Seq;
-},{}],"XW2d":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),r=require("../Control.Bind/index.js"),u=require("../Control.Monad/index.js"),e=require("../Control.Monad.Cont.Class/index.js"),o=require("../Control.Monad.Reader.Class/index.js"),i=require("../Control.Monad.State.Class/index.js"),c=require("../Control.Monad.Trans.Class/index.js"),f=require("../Data.Function/index.js"),a=require("../Data.Functor/index.js"),d=require("../Data.Newtype/index.js"),s=require("../Effect.Class/index.js"),C=function(n){return n},l=function(n){return function(t){return function(r){return t(n(r))}}},p=function(n){return function(t){return n(t)}},M=new d.Newtype(function(n){return n},C),T=new c.MonadTrans(function(n){return function(t){return function(u){return r.bind(n.Bind1())(t)(u)}}}),w=function(n){return function(t){return function(r){return n(t(r))}}},x=function(n){return new a.Functor(function(n){return function(t){return function(r){return t(function(t){return r(n(t))})}}})},j=function(n){return new t.Apply(function(){return x(n.Functor0())},function(n){return function(t){return function(r){return n(function(n){return t(function(t){return r(n(t))})})}}})},q=function(n){return new r.Bind(function(){return j(n.Apply0())},function(n){return function(t){return function(r){return n(function(n){return t(n)(r)})}}})},A=function(t){return new n.Applicative(function(){return j(t.Apply0())},function(n){return function(t){return t(n)}})},m=function(n){return new u.Monad(function(){return A(n.Applicative0())},function(){return q(n.Bind1())})},v=function(n){return new o.MonadAsk(function(){return m(n.Monad0())},c.lift(T)(n.Monad0())(o.ask(n)))},y=function(n){return new o.MonadReader(function(){return v(n.MonadAsk0())},function(t){return function(u){return function(e){return r.bind(n.MonadAsk0().Monad0().Bind1())(o.ask(n.MonadAsk0()))(function(r){return o.local(n)(t)(u((i=o.local(n)(f.const(r)),function(n){return i(e(n))})));var i})}}})},k=function(n){return new e.MonadCont(function(){return m(n)},function(n){return function(t){return n(function(n){return function(r){return t(n)}})(t)}})},B=function(n){return new s.MonadEffect(function(){return m(n.Monad0())},(t=c.lift(T)(n.Monad0()),r=s.liftEffect(n),function(n){return t(r(n))}));var t,r},E=function(n){return new i.MonadState(function(){return m(n.Monad0())},(t=c.lift(T)(n.Monad0()),r=i.state(n),function(n){return t(r(n))}));var t,r};module.exports={ContT:C,runContT:p,mapContT:w,withContT:l,newtypeContT:M,monadContContT:k,functorContT:x,applyContT:j,applicativeContT:A,bindContT:q,monadContT:m,monadTransContT:T,monadEffectContT:B,monadAskContT:v,monadReaderContT:y,monadStateContT:E};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Control.Monad.Cont.Class/index.js":"IpNh","../Control.Monad.Reader.Class/index.js":"c2ZJ","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.Trans.Class/index.js":"5tIR","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Effect.Class/index.js":"dWtH"}],"UUIS":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),e=require("../Control.Alternative/index.js"),r=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),o=require("../Control.Bind/index.js"),u=require("../Control.Category/index.js"),i=require("../Control.Monad/index.js"),a=require("../Control.Monad.Cont.Class/index.js"),c=require("../Control.Monad.Error.Class/index.js"),l=require("../Control.Monad.Reader.Class/index.js"),f=require("../Control.Monad.Rec.Class/index.js"),d=require("../Control.Monad.State.Class/index.js"),M=require("../Control.Monad.Trans.Class/index.js"),s=require("../Control.Monad.Writer.Class/index.js"),p=require("../Control.MonadPlus/index.js"),w=require("../Control.MonadZero/index.js"),T=require("../Control.Plus/index.js"),y=require("../Data.Functor/index.js"),b=require("../Data.Maybe/index.js"),v=require("../Data.Newtype/index.js"),C=require("../Data.Tuple/index.js"),m=require("../Effect.Class/index.js"),x=function(n){return n},j=function(n){return n},q=new v.Newtype(function(n){return n},x),A=new M.MonadTrans(function(n){var e=i.liftM1(n)(b.Just.create);return function(n){return x(e(n))}}),h=function(n){return function(e){return n(e)}},E=function(n){return new y.Functor(function(e){return function(r){return y.map(n)(y.map(b.functorMaybe)(e))(r)}})},g=function(n){return new i.Monad(function(){return J(n)},function(){return N(n)})},N=function(n){return new o.Bind(function(){return B(n)},function(e){return function(t){return o.bind(n.Bind1())(e)(function(e){if(e instanceof b.Nothing)return r.pure(n.Applicative0())(b.Nothing.value);if(e instanceof b.Just)return t(e.value0);throw new Error("Failed pattern match at Control.Monad.Maybe.Trans (line 54, column 11 - line 56, column 42): "+[e.constructor.name])})}})},B=function(n){return new t.Apply(function(){return E(n.Bind1().Apply0().Functor0())},i.ap(g(n)))},J=function(n){return new r.Applicative(function(){return B(n)},(e=r.pure(n.Applicative0()),function(n){return x(e(b.Just.create(n)))}));var e},F=function(n){return new l.MonadAsk(function(){return g(n.Monad0())},M.lift(A)(n.Monad0())(l.ask(n)))},D=function(n){return new l.MonadReader(function(){return F(n.MonadAsk0())},function(e){return h(l.local(n)(e))})},R=function(n){return new a.MonadCont(function(){return g(n.Monad0())},function(e){return x(a.callCC(n)(function(n){return e(function(e){return x(n(new b.Just(e)))})}))})},P=function(n){return new m.MonadEffect(function(){return g(n.Monad0())},(e=M.lift(A)(n.Monad0()),r=m.liftEffect(n),function(n){return e(r(n))}));var e,r},k=function(n){return new f.MonadRec(function(){return g(n.Monad0())},function(e){var t=f.tailRecM(n)(function(t){var u=e(t);return o.bind(n.Monad0().Bind1())(u)(function(e){return r.pure(n.Monad0().Applicative0())(function(){if(e instanceof b.Nothing)return new f.Done(b.Nothing.value);if(e instanceof b.Just&&e.value0 instanceof f.Loop)return new f.Loop(e.value0.value0);if(e instanceof b.Just&&e.value0 instanceof f.Done)return new f.Done(new b.Just(e.value0.value0));throw new Error("Failed pattern match at Control.Monad.Maybe.Trans (line 84, column 16 - line 87, column 43): "+[e.constructor.name])}())})});return function(n){return x(t(n))}})},S=function(n){return new d.MonadState(function(){return g(n.Monad0())},function(e){return M.lift(A)(n.Monad0())(d.state(n)(e))})},W=function(n){return new s.MonadTell(function(){return g(n.Monad0())},(e=M.lift(A)(n.Monad0()),r=s.tell(n),function(n){return e(r(n))}));var e,r},Z=function(n){return new s.MonadWriter(function(){return W(n.MonadTell0())},h(function(e){return o.bind(n.MonadTell0().Monad0().Bind1())(s.listen(n)(e))(function(e){return r.pure(n.MonadTell0().Monad0().Applicative0())(y.map(b.functorMaybe)(function(n){return new C.Tuple(n,e.value1)})(e.value0))})}),h(function(e){return s.pass(n)(o.bind(n.MonadTell0().Monad0().Bind1())(e)(function(e){return r.pure(n.MonadTell0().Monad0().Applicative0())(function(){if(e instanceof b.Nothing)return new C.Tuple(b.Nothing.value,u.identity(u.categoryFn));if(e instanceof b.Just)return new C.Tuple(new b.Just(e.value0.value0),e.value0.value1);throw new Error("Failed pattern match at Control.Monad.Maybe.Trans (line 121, column 10 - line 123, column 43): "+[e.constructor.name])}())}))}))},L=function(n){return new c.MonadThrow(function(){return g(n.Monad0())},function(e){return M.lift(A)(n.Monad0())(c.throwError(n)(e))})},z=function(n){return new c.MonadError(function(){return L(n.MonadThrow0())},function(e){return function(r){return x(c.catchError(n)(e)(function(n){return r(n)}))}})},G=function(e){return new n.Alt(function(){return E(e.Bind1().Apply0().Functor0())},function(n){return function(t){return o.bind(e.Bind1())(n)(function(n){return n instanceof b.Nothing?t:r.pure(e.Applicative0())(n)})}})},H=function(n){return new T.Plus(function(){return G(n)},r.pure(n.Applicative0())(b.Nothing.value))},I=function(n){return new e.Alternative(function(){return J(n)},function(){return H(n)})},K=function(n){return new w.MonadZero(function(){return I(n)},function(){return g(n)})},O=function(n){return new p.MonadPlus(function(){return K(n)})};module.exports={MaybeT:x,runMaybeT:j,mapMaybeT:h,newtypeMaybeT:q,functorMaybeT:E,applyMaybeT:B,applicativeMaybeT:J,bindMaybeT:N,monadMaybeT:g,monadTransMaybeT:A,altMaybeT:G,plusMaybeT:H,alternativeMaybeT:I,monadPlusMaybeT:O,monadZeroMaybeT:K,monadRecMaybeT:k,monadEffectMaybe:P,monadContMaybeT:R,monadThrowMaybeT:L,monadErrorMaybeT:z,monadAskMaybeT:F,monadReaderMaybeT:D,monadStateMaybeT:S,monadTellMaybeT:W,monadWriterMaybeT:Z};
-},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad/index.js":"U/Ix","../Control.Monad.Cont.Class/index.js":"IpNh","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Reader.Class/index.js":"c2ZJ","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.Trans.Class/index.js":"5tIR","../Control.Monad.Writer.Class/index.js":"gxgA","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.Tuple/index.js":"II/O","../Effect.Class/index.js":"dWtH"}],"uvht":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),r=require("../Control.Alternative/index.js"),e=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),o=require("../Control.Monad/index.js"),i=require("../Control.Monad.Cont.Class/index.js"),a=require("../Control.Monad.Error.Class/index.js"),c=require("../Control.Monad.Reader.Class/index.js"),d=require("../Control.Monad.Rec.Class/index.js"),f=require("../Control.Monad.State.Class/index.js"),l=require("../Control.Monad.Trans.Class/index.js"),s=require("../Control.Monad.Writer.Class/index.js"),p=require("../Control.MonadPlus/index.js"),M=require("../Control.MonadZero/index.js"),T=require("../Control.Plus/index.js"),R=require("../Data.Distributive/index.js"),w=require("../Data.Function/index.js"),C=require("../Data.Functor/index.js"),m=require("../Data.Monoid/index.js"),x=require("../Data.Newtype/index.js"),j=require("../Data.Semigroup/index.js"),q=require("../Effect.Class/index.js"),v=function(n){return n},A=function(n){return function(r){return function(e){return r(n(e))}}},y=function(n){return n},E=new x.Newtype(function(n){return n},v),D=new l.MonadTrans(function(n){return function(n){return v(w.const(n))}}),b=function(n){return function(r){return function(e){return n(r(e))}}},F=function(n){return new C.Functor((r=C.map(n),function(n){return b(r(n))}));var r},h=function n(r){return new R.Distributive(function(){return F(r.Functor0())},function(e){return function(t){var u=R.distribute(n(r))(e),o=C.map(e)(t);return function(n){return u(o(n))}}},function(n){return function(e){return function(t){return R.collect(r)(n)(function(n){return n(t)})(e)}}})},P=function(n){return new t.Apply(function(){return F(n.Functor0())},function(r){return function(e){return function(u){return t.apply(n)(r(u))(e(u))}}})},S=function(n){return new u.Bind(function(){return P(n.Apply0())},function(r){return function(e){return function(t){return u.bind(n)(r(t))(function(n){return e(n)(t)})}}})},g=function(n){return function(r){return new j.Semigroup(t.lift2(P(n))(j.append(r)))}},B=function(n){return new e.Applicative(function(){return P(n.Apply0())},(r=e.pure(n),function(n){return v(w.const(r(n)))}));var r},Z=function(n){return new o.Monad(function(){return B(n.Applicative0())},function(){return S(n.Bind1())})},W=function(n){return new c.MonadAsk(function(){return Z(n)},e.pure(n.Applicative0()))},k=function(n){return new c.MonadReader(function(){return W(n)},A)},N=function(n){return new i.MonadCont(function(){return Z(n.Monad0())},function(r){return function(e){return i.callCC(n)(function(n){return r(function(r){return v(w.const(n(r)))})(e)})}})},z=function(n){return new q.MonadEffect(function(){return Z(n.Monad0())},(r=l.lift(D)(n.Monad0()),e=q.liftEffect(n),function(n){return r(e(n))}));var r,e},G=function(n){return new d.MonadRec(function(){return Z(n.Monad0())},function(r){return function(t){return function(o){return d.tailRecM(n)(function(t){return function(o){var i=r(o);return u.bindFlipped(n.Monad0().Bind1())(e.pure(n.Monad0().Applicative0()))(i(t))}}(o))(t)}}})},H=function(n){return new f.MonadState(function(){return Z(n.Monad0())},(r=l.lift(D)(n.Monad0()),e=f.state(n),function(n){return r(e(n))}));var r,e},I=function(n){return new s.MonadTell(function(){return Z(n.Monad0())},(r=l.lift(D)(n.Monad0()),e=s.tell(n),function(n){return r(e(n))}));var r,e},J=function(n){return new s.MonadWriter(function(){return I(n.MonadTell0())},b(s.listen(n)),b(s.pass(n)))},K=function(n){return new a.MonadThrow(function(){return Z(n.Monad0())},(r=l.lift(D)(n.Monad0()),e=a.throwError(n),function(n){return r(e(n))}));var r,e},L=function(n){return new a.MonadError(function(){return K(n.MonadThrow0())},function(r){return function(e){return function(t){return a.catchError(n)(r(t))(function(n){return e(n)(t)})}}})},O=function(n){return function(r){return new m.Monoid(function(){return g(n.Apply0())(r.Semigroup0())},e.pure(B(n))(m.mempty(r)))}},Q=function(r){return new n.Alt(function(){return F(r.Functor0())},function(e){return function(t){return function(u){return n.alt(r)(e(u))(t(u))}}})},U=function(n){return new T.Plus(function(){return Q(n.Alt0())},w.const(T.empty(n)))},V=function(n){return new r.Alternative(function(){return B(n.Applicative0())},function(){return U(n.Plus1())})},X=function(n){return new M.MonadZero(function(){return V(n.Alternative1())},function(){return Z(n.Monad0())})},Y=function(n){return new p.MonadPlus(function(){return X(n.MonadZero0())})};module.exports={ReaderT:v,runReaderT:y,withReaderT:A,mapReaderT:b,newtypeReaderT:E,functorReaderT:F,applyReaderT:P,applicativeReaderT:B,altReaderT:Q,plusReaderT:U,alternativeReaderT:V,bindReaderT:S,monadReaderT:Z,monadZeroReaderT:X,semigroupReaderT:g,monoidReaderT:O,monadPlusReaderT:Y,monadTransReaderT:D,monadEffectReader:z,monadContReaderT:N,monadThrowReaderT:K,monadErrorReaderT:L,monadAskReaderT:W,monadReaderReaderT:k,monadStateReaderT:H,monadTellReaderT:I,monadWriterReaderT:J,distributiveReaderT:h,monadRecReaderT:G};
-},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Control.Monad.Cont.Class/index.js":"IpNh","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Reader.Class/index.js":"c2ZJ","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.Trans.Class/index.js":"5tIR","../Control.Monad.Writer.Class/index.js":"gxgA","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Distributive/index.js":"8PTu","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Effect.Class/index.js":"dWtH"}],"VAds":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),r=require("../Control.Alternative/index.js"),e=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),o=require("../Control.Monad/index.js"),i=require("../Control.Monad.Cont.Class/index.js"),a=require("../Control.Monad.Error.Class/index.js"),c=require("../Control.Monad.Reader.Class/index.js"),l=require("../Control.Monad.Rec.Class/index.js"),f=require("../Control.Monad.State.Class/index.js"),d=require("../Control.Monad.Trans.Class/index.js"),p=require("../Control.Monad.Writer.Class/index.js"),s=require("../Control.MonadPlus/index.js"),v=require("../Control.MonadZero/index.js"),T=require("../Control.Plus/index.js"),w=require("../Data.Functor/index.js"),M=require("../Data.Monoid/index.js"),m=require("../Data.Newtype/index.js"),C=require("../Data.Semigroup/index.js"),W=require("../Data.Tuple/index.js"),x=require("../Data.Unit/index.js"),j=require("../Effect.Class/index.js"),q=function(n){return n},A=function(n){return n},y=new m.Newtype(function(n){return n},q),E=function(n){return new d.MonadTrans(function(r){return function(t){return u.bind(r.Bind1())(t)(function(t){return e.pure(r.Applicative0())(new W.Tuple(t,M.mempty(n)))})}})},D=function(n){return function(r){return n(r)}},S=function(n){return new w.Functor(function(r){return D(w.map(n)(function(n){return new W.Tuple(r(n.value0),n.value1)}))})},h=function(n){return function(r){return w.map(n)(W.snd)(r)}},B=function(n){return function(r){return new t.Apply(function(){return S(r.Functor0())},function(e){return function(u){return t.apply(r)(w.map(r.Functor0())(function(r){return function(e){return new W.Tuple(r.value0(e.value0),C.append(n)(r.value1)(e.value1))}})(e))(u)}})}},F=function(n){return function(r){return new u.Bind(function(){return B(n)(r.Apply0())},function(e){return function(t){return q(u.bind(r)(e)(function(e){var u=t(e.value0);return w.map(r.Apply0().Functor0())(function(r){return new W.Tuple(r.value0,C.append(n)(e.value1)(r.value1))})(u)}))}})}},R=function(n){return function(r){return new e.Applicative(function(){return B(n.Semigroup0())(r.Apply0())},function(t){return q(e.pure(r)(new W.Tuple(t,M.mempty(n))))})}},b=function(n){return function(r){return new o.Monad(function(){return R(n)(r.Applicative0())},function(){return F(n.Semigroup0())(r.Bind1())})}},P=function(n){return function(r){return new c.MonadAsk(function(){return b(n)(r.Monad0())},d.lift(E(n))(r.Monad0())(c.ask(r)))}},g=function(n){return function(r){return new c.MonadReader(function(){return P(n)(r.MonadAsk0())},function(n){return D(c.local(r)(n))})}},k=function(n){return function(r){return new i.MonadCont(function(){return b(n)(r.Monad0())},function(e){return q(i.callCC(r)(function(r){return e(function(e){return q(r(new W.Tuple(e,M.mempty(n))))})}))})}},Z=function(n){return function(r){return new j.MonadEffect(function(){return b(n)(r.Monad0())},(e=d.lift(E(n))(r.Monad0()),t=j.liftEffect(r),function(n){return e(t(n))}));var e,t}},L=function(n){return function(r){return new l.MonadRec(function(){return b(n)(r.Monad0())},function(t){return function(o){return q(l.tailRecM(r)(function(o){var i=t(o.value0);return u.bind(r.Monad0().Bind1())(i)(function(t){return e.pure(r.Monad0().Applicative0())(function(){if(t.value0 instanceof l.Loop)return new l.Loop(new W.Tuple(t.value0.value0,C.append(n.Semigroup0())(o.value1)(t.value1)));if(t.value0 instanceof l.Done)return new l.Done(new W.Tuple(t.value0.value0,C.append(n.Semigroup0())(o.value1)(t.value1)));throw new Error("Failed pattern match at Control.Monad.Writer.Trans (line 83, column 16 - line 85, column 47): "+[t.value0.constructor.name])}())})})(new W.Tuple(o,M.mempty(n))))}})}},N=function(n){return function(r){return new f.MonadState(function(){return b(n)(r.Monad0())},function(e){return d.lift(E(n))(r.Monad0())(f.state(r)(e))})}},U=function(n){return function(r){return new p.MonadTell(function(){return b(n)(r)},(t=e.pure(r.Applicative0()),u=W.Tuple.create(x.unit),function(n){return q(t(u(n)))}));var t,u}},z=function(n){return function(r){return new p.MonadWriter(function(){return U(n)(r)},function(n){return u.bind(r.Bind1())(n)(function(n){return e.pure(r.Applicative0())(new W.Tuple(new W.Tuple(n.value0,n.value1),n.value1))})},function(n){return u.bind(r.Bind1())(n)(function(n){return e.pure(r.Applicative0())(new W.Tuple(n.value0.value0,n.value0.value1(n.value1)))})})}},G=function(n){return function(r){return new a.MonadThrow(function(){return b(n)(r.Monad0())},function(e){return d.lift(E(n))(r.Monad0())(a.throwError(r)(e))})}},H=function(n){return function(r){return new a.MonadError(function(){return G(n)(r.MonadThrow0())},function(n){return function(e){return q(a.catchError(r)(n)(function(n){return e(n)}))}})}},I=function(r){return new n.Alt(function(){return S(r.Functor0())},function(e){return function(t){return n.alt(r)(e)(t)}})},J=function(n){return new T.Plus(function(){return I(n.Alt0())},T.empty(n))},K=function(n){return function(e){return new r.Alternative(function(){return R(n)(e.Applicative0())},function(){return J(e.Plus1())})}},O=function(n){return function(r){return new v.MonadZero(function(){return K(n)(r.Alternative1())},function(){return b(n)(r.Monad0())})}},Q=function(n){return function(r){return new s.MonadPlus(function(){return O(n)(r.MonadZero0())})}};module.exports={WriterT:q,runWriterT:A,execWriterT:h,mapWriterT:D,newtypeWriterT:y,functorWriterT:S,applyWriterT:B,applicativeWriterT:R,altWriterT:I,plusWriterT:J,alternativeWriterT:K,bindWriterT:F,monadWriterT:b,monadRecWriterT:L,monadZeroWriterT:O,monadPlusWriterT:Q,monadTransWriterT:E,monadEffectWriter:Z,monadContWriterT:k,monadThrowWriterT:G,monadErrorWriterT:H,monadAskWriterT:P,monadReaderWriterT:g,monadStateWriterT:N,monadTellWriterT:U,monadWriterWriterT:z};
-},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Control.Monad.Cont.Class/index.js":"IpNh","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Reader.Class/index.js":"c2ZJ","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.Trans.Class/index.js":"5tIR","../Control.Monad.Writer.Class/index.js":"gxgA","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Tuple/index.js":"II/O","../Data.Unit/index.js":"NhVk","../Effect.Class/index.js":"dWtH"}],"FExJ":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),e=require("../Data.Eq/index.js"),t=require("../Data.Monoid/index.js"),u=require("../Data.Newtype/index.js"),p=require("../Data.Ord/index.js"),o=require("../Data.Semigroup/index.js"),i=require("../Data.Show/index.js"),c=require("../Unsafe.Coerce/index.js"),f=function(n){return n},a=function(n){return n},A=function(n){return n},d=function(n){return new i.Show(function(r){return"(App "+i.show(n)(r)+")"})},s=function(n){return function(e){return new o.Semigroup(function(t){return function(u){return r.lift2(n)(o.append(e))(t)(u)}})}},l=function(n){return n},q=new u.Newtype(function(n){return n},f),w=function(r){return function(e){return new t.Monoid(function(){return s(r.Apply0())(e.Semigroup0())},n.pure(r)(t.mempty(e)))}},m=function(n){return n},x=function(n){return n},h=function(n){return n},j=function(n){return n},y=c.unsafeCoerce,v=c.unsafeCoerce,D=function(n){return function(r){return n(r)}},E=function(n){return n},b=function(n){return n},C=function(n){return n},S=function(n){return n},g=function(n){return n},I=function(n){return function(r){return new e.Eq(function(t){return function(u){return e.eq1(n)(r)(t)(u)}})}},O=function(n){return function(r){return new p.Ord(function(){return I(n.Eq10())(r.Eq0())},function(e){return function(t){return p.compare1(n)(r)(e)(t)}})}},W=function(n){return new e.Eq1(function(r){return e.eq(I(n)(r))})},L=function(n){return new p.Ord1(function(){return W(n.Eq10())},function(r){return p.compare(O(n)(r))})},M=function(n){return n},N=function(n){return n},z=function(n){return n},P=function(n){return n},U=function(n){return n},Z=function(n){return n};module.exports={App:f,hoistApp:D,hoistLiftApp:v,hoistLowerApp:y,newtypeApp:q,eqApp:I,eq1App:W,ordApp:O,ord1App:L,showApp:d,semigroupApp:s,monoidApp:w,functorApp:b,functorWithIndexApp:E,applyApp:z,applicativeApp:P,bindApp:N,monadApp:h,altApp:Z,plusApp:l,alternativeApp:U,monadZeroApp:m,monadPlusApp:x,lazyApp:j,foldableApp:S,traversableApp:A,foldableWithIndexApp:C,traversableWithIndexApp:a,extendApp:g,comonadApp:M};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Data.Eq/index.js":"Pq4F","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Unsafe.Coerce/index.js":"ETUV"}],"z8br":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),r=require("../Control.Alternative/index.js"),t=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),u=require("../Control.Category/index.js"),o=require("../Control.Plus/index.js"),i=require("../Data.Eq/index.js"),c=require("../Data.Foldable/index.js"),f=require("../Data.FoldableWithIndex/index.js"),a=require("../Data.Function/index.js"),p=require("../Data.Functor/index.js"),l=require("../Data.Functor.App/index.js"),d=require("../Data.FunctorWithIndex/index.js"),s=require("../Data.Newtype/index.js"),x=require("../Data.Ord/index.js"),h=require("../Data.Show/index.js"),m=require("../Data.Traversable/index.js"),q=require("../Data.TraversableWithIndex/index.js"),F=require("../Data.Tuple/index.js"),C=function(n){return n},v=function(n){return new h.Show(function(r){return"(Compose "+h.show(n)(r)+")"})},w=new s.Newtype(function(n){return n},C),I=function(n){return function(r){return new p.Functor(function(t){return function(e){return C(p.map(n)(p.map(r)(t))(e))}})}},W=function(n){return function(r){return new d.FunctorWithIndex(function(){return I(n.Functor0())(r.Functor0())},function(t){return function(e){return C(d.mapWithIndex(n)((u=d.mapWithIndex(r),o=F.curry(t),function(n){return u(o(n))}))(e));var u,o}})}},y=function(n){return function(r){return new c.Foldable(function(t){return function(e){return function(u){return c.foldMap(n)(t)(c.foldMap(r)(t)(e))(u)}}},function(t){return function(e){return function(u){return c.foldl(n)(c.foldl(r)(t))(e)(u)}}},function(t){return function(e){return function(u){return c.foldr(n)(a.flip(c.foldr(r)(t)))(e)(u)}}})}},A=function(n){return function(r){return new f.FoldableWithIndex(function(){return y(n.Foldable0())(r.Foldable0())},function(t){return function(e){return function(u){return f.foldMapWithIndex(n)(t)((o=f.foldMapWithIndex(r)(t),i=F.curry(e),function(n){return o(i(n))}))(u);var o,i}}},function(t){return function(e){return function(u){return f.foldlWithIndex(n)((o=f.foldlWithIndex(r),i=F.curry(t),function(n){return o(i(n))}))(e)(u);var o,i}}},function(t){return function(e){return function(u){return f.foldrWithIndex(n)(function(n){return a.flip(f.foldrWithIndex(r)(F.curry(t)(n)))})(e)(u)}}})}},b=function n(r){return function(t){return new m.Traversable(function(){return y(r.Foldable1())(t.Foldable1())},function(){return I(r.Functor0())(t.Functor0())},function(e){return m.traverse(n(r)(t))(e)(u.identity(u.categoryFn))},function(n){return function(e){return function(u){return p.map(n.Apply0().Functor0())(C)(m.traverse(r)(n)(m.traverse(t)(n)(e))(u))}}})}},j=function(n){return function(r){return new q.TraversableWithIndex(function(){return A(n.FoldableWithIndex1())(r.FoldableWithIndex1())},function(){return W(n.FunctorWithIndex0())(r.FunctorWithIndex0())},function(){return b(n.Traversable2())(r.Traversable2())},function(t){return function(e){return function(u){return p.map(t.Apply0().Functor0())(C)(q.traverseWithIndex(n)(t)((o=q.traverseWithIndex(r)(t),i=F.curry(e),function(n){return o(i(n))}))(u));var o,i}}})}},D=function(n){return function(r){return function(t){return new i.Eq(function(e){return function(u){return i.eq1(n)(l.eqApp(r)(t))(l.hoistLiftApp(e))(l.hoistLiftApp(u))}})}}},E=function(n){return function(r){return function(t){return new x.Ord(function(){return D(n.Eq10())(r.Eq10())(t.Eq0())},function(e){return function(u){return x.compare1(n)(l.ordApp(r)(t))(l.hoistLiftApp(e))(l.hoistLiftApp(u))}})}}},T=function(n){return function(r){return new i.Eq1(function(t){return i.eq(D(n)(r)(t))})}},L=function(n){return function(r){return new x.Ord1(function(){return T(n.Eq10())(r.Eq10())},function(t){return x.compare(E(n)(r)(t))})}},M=function(n){return function(r){return function(t){return function(e){return r(p.map(n)(t)(e))}}}},O=function(n){return function(r){return new e.Apply(function(){return I(n.Functor0())(r.Functor0())},function(t){return function(u){return C(e.apply(n)(p.map(n.Functor0())(e.apply(r))(t))(u))}})}},P=function(n){return function(r){return new t.Applicative(function(){return O(n.Apply0())(r.Apply0())},(e=t.pure(n),u=t.pure(r),function(n){return C(e(u(n)))}));var e,u}},g=function(r){return function(t){return new n.Alt(function(){return I(r.Functor0())(t)},function(t){return function(e){return C(n.alt(r)(t)(e))}})}},N=function(n){return function(r){return new o.Plus(function(){return g(n.Alt0())(r)},o.empty(n))}},S=function(n){return function(t){return new r.Alternative(function(){return P(n.Applicative0())(t)},function(){return N(n.Plus1())(t.Apply0().Functor0())})}};module.exports={Compose:C,bihoistCompose:M,newtypeCompose:w,eqCompose:D,eq1Compose:T,ordCompose:E,ord1Compose:L,showCompose:v,functorCompose:I,functorWithIndexCompose:W,applyCompose:O,applicativeCompose:P,foldableCompose:y,foldableWithIndexCompose:A,traversableCompose:b,traversableWithIndexCompose:j,altCompose:g,plusCompose:N,alternativeCompose:S};
-},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Control.Plus/index.js":"oMBg","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Functor.App/index.js":"FExJ","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Tuple/index.js":"II/O"}],"NR5l":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),t=require("../Control.Alternative/index.js"),r=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),i=require("../Control.Bind/index.js"),u=require("../Control.Monad.Cont.Trans/index.js"),o=require("../Control.Monad.Except.Trans/index.js"),a=require("../Control.Monad.Maybe.Trans/index.js"),c=require("../Control.Monad.Reader.Trans/index.js"),f=require("../Control.Monad.Writer.Trans/index.js"),d=require("../Control.Plus/index.js"),l=require("../Data.Either/index.js"),p=require("../Data.Functor/index.js"),s=require("../Data.Functor.Compose/index.js"),C=require("../Data.Maybe/index.js"),M=require("../Data.Newtype/index.js"),v=require("../Data.Unit/index.js"),w=require("../Effect.Class/index.js"),m=require("../Effect.Ref/index.js"),T=function(n){return n},x=function(n,t,r,e){this.Applicative1=n,this.Monad0=t,this.parallel=r,this.sequential=e},q=function(n){return n.sequential},E=function(n){return n.parallel},j=new M.Newtype(function(n){return n},T),P=function(n){return function(t){return new x(function(){return f.applicativeWriterT(n)(t.Applicative1())},function(){return f.monadWriterT(n)(t.Monad0())},f.mapWriterT(E(t)),f.mapWriterT(q(t)))}},A=function(n){return new x(function(){return c.applicativeReaderT(n.Applicative1())},function(){return c.monadReaderT(n.Monad0())},c.mapReaderT(E(n)),c.mapReaderT(q(n)))},h=function(n){return new x(function(){return s.applicativeCompose(n.Applicative1())(C.applicativeMaybe)},function(){return a.monadMaybeT(n.Monad0())},function(t){return E(n)(t)},function(t){return q(n)(t)})},B=function(n){return new x(function(){return s.applicativeCompose(n.Applicative1())(l.applicativeEither)},function(){return o.monadExceptT(n.Monad0())},function(t){return E(n)(t)},function(t){return q(n)(t)})},b=function(n){return new x(function(){return D(n)},function(){return u.monadContT(n.Monad0())},T,function(n){return n})},y=function(n){return new p.Functor(function(t){var r=E(b(n)),e=p.map(u.functorContT(n.Monad0().Bind1().Apply0().Functor0()))(t),i=q(b(n));return function(n){return r(e(i(n)))}})},R=function(n){return new e.Apply(function(){return y(n)},function(t){return function(r){return T(function(e){return i.bind(n.Monad0().Bind1())(w.liftEffect(n)(m.new(C.Nothing.value)))(function(o){return i.bind(n.Monad0().Bind1())(w.liftEffect(n)(m.new(C.Nothing.value)))(function(a){return i.discard(i.discardUnit)(n.Monad0().Bind1())(u.runContT(t)(function(t){return i.bind(n.Monad0().Bind1())(w.liftEffect(n)(m.read(a)))(function(r){if(r instanceof C.Nothing)return w.liftEffect(n)(m.write(new C.Just(t))(o));if(r instanceof C.Just)return e(t(r.value0));throw new Error("Failed pattern match at Control.Parallel.Class (line 71, column 7 - line 73, column 26): "+[r.constructor.name])})}))(function(){return u.runContT(r)(function(t){return i.bind(n.Monad0().Bind1())(w.liftEffect(n)(m.read(o)))(function(r){if(r instanceof C.Nothing)return w.liftEffect(n)(m.write(new C.Just(t))(a));if(r instanceof C.Just)return e(r.value0(t));throw new Error("Failed pattern match at Control.Parallel.Class (line 77, column 7 - line 79, column 26): "+[r.constructor.name])})})})})})})}})},D=function(n){return new r.Applicative(function(){return R(n)},(t=E(b(n)),e=r.pure(u.applicativeContT(n.Monad0().Applicative0())),function(n){return t(e(n))}));var t,e},F=function(t){return new n.Alt(function(){return y(t)},function(n){return function(e){return T(function(o){return i.bind(t.Monad0().Bind1())(w.liftEffect(t)(m.new(!1)))(function(a){return i.discard(i.discardUnit)(t.Monad0().Bind1())(u.runContT(n)(function(n){return i.bind(t.Monad0().Bind1())(w.liftEffect(t)(m.read(a)))(function(e){return e?r.pure(t.Monad0().Applicative0())(v.unit):i.discard(i.discardUnit)(t.Monad0().Bind1())(w.liftEffect(t)(m.write(!0)(a)))(function(){return o(n)})})}))(function(){return u.runContT(e)(function(n){return i.bind(t.Monad0().Bind1())(w.liftEffect(t)(m.read(a)))(function(e){return e?r.pure(t.Monad0().Applicative0())(v.unit):i.discard(i.discardUnit)(t.Monad0().Bind1())(w.liftEffect(t)(m.write(!0)(a)))(function(){return o(n)})})})})})})}})},N=function(n){return new d.Plus(function(){return F(n)},T(function(t){return r.pure(n.Monad0().Applicative0())(v.unit)}))},W=function(n){return new t.Alternative(function(){return D(n)},function(){return N(n)})};module.exports={parallel:E,sequential:q,Parallel:x,ParCont:T,monadParExceptT:B,monadParReaderT:A,monadParWriterT:P,monadParMaybeT:h,newtypeParCont:j,functorParCont:y,applyParCont:R,applicativeParCont:D,altParCont:F,plusParCont:N,alternativeParCont:W,monadParParCont:b};
-},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad.Cont.Trans/index.js":"XW2d","../Control.Monad.Except.Trans/index.js":"gr8B","../Control.Monad.Maybe.Trans/index.js":"UUIS","../Control.Monad.Reader.Trans/index.js":"uvht","../Control.Monad.Writer.Trans/index.js":"VAds","../Control.Plus/index.js":"oMBg","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Functor.Compose/index.js":"z8br","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.Unit/index.js":"NhVk","../Effect.Class/index.js":"dWtH","../Effect.Ref/index.js":"/Jaj"}],"LNK1":[function(require,module,exports) {
-"use strict";var n=require("../Control.Apply/index.js"),r=require("../Control.Category/index.js"),e=require("../Control.Parallel.Class/index.js"),t=require("../Data.Foldable/index.js"),u=require("../Data.Traversable/index.js"),i=function(n){return function(r){return function(u){var i,a=e.sequential(n),l=t.traverse_(n.Applicative1())(r)((i=e.parallel(n),function(n){return i(u(n))}));return function(n){return a(l(n))}}}},a=function(n){return function(r){return function(t){var i,a=e.sequential(n),l=u.traverse(r)(n.Applicative1())((i=e.parallel(n),function(n){return i(t(n))}));return function(n){return a(l(n))}}}},l=function(n){return function(e){return i(n)(e)(r.identity(r.categoryFn))}},o=function(n){return function(e){return a(n)(e)(r.identity(r.categoryFn))}},c=function(n){return function(r){return function(u){return function(i){return function(i){var a,l=e.sequential(n),o=t.oneOfMap(u)(r.Plus1())((a=e.parallel(n),function(n){return a(i(n))}));return function(n){return l(o(n))}}}}}},f=function(n){return function(r){return function(u){return function(i){var a=e.sequential(n),l=t.oneOfMap(u)(r.Plus1())(e.parallel(n));return function(n){return a(l(n))}}}}},p=function(r){return function(t){return function(u){return e.sequential(r)(n.apply(r.Applicative1().Apply0())(e.parallel(r)(t))(e.parallel(r)(u)))}}};module.exports={parApply:p,parTraverse:a,parTraverse_:i,parSequence:o,parSequence_:l,parOneOf:f,parOneOfMap:c};
-},{"../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Control.Parallel.Class/index.js":"NR5l","../Data.Foldable/index.js":"eVDl","../Data.Traversable/index.js":"n7EE"}],"pd0V":[function(require,module,exports) {
-"use strict";exports.unsafePerformEffect=function(e){return e()};
-},{}],"tPW2":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js");module.exports={unsafePerformEffect:e.unsafePerformEffect};
-},{"./foreign.js":"pd0V"}],"I7lu":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),e=require("../Control.Alt/index.js"),r=require("../Control.Alternative/index.js"),t=require("../Control.Applicative/index.js"),u=require("../Control.Apply/index.js"),f=require("../Control.Bind/index.js"),i=require("../Control.Lazy/index.js"),o=require("../Control.Monad/index.js"),c=require("../Control.Monad.Error.Class/index.js"),a=require("../Control.Monad.Rec.Class/index.js"),l=require("../Control.Parallel/index.js"),p=require("../Control.Parallel.Class/index.js"),s=require("../Control.Plus/index.js"),d=require("../Data.Either/index.js"),m=require("../Data.Foldable/index.js"),A=require("../Data.Function/index.js"),w=require("../Data.Functor/index.js"),E=require("../Data.Monoid/index.js"),v=require("../Data.Newtype/index.js"),h=require("../Data.Semigroup/index.js"),q=require("../Data.Unit/index.js"),j=require("../Effect/index.js"),x=require("../Effect.Class/index.js"),y=require("../Effect.Exception/index.js"),C=require("../Effect.Unsafe/index.js"),b=require("../Partial.Unsafe/index.js"),g=require("../Unsafe.Coerce/index.js"),k=function(n){return n},F=function(n){return n},_=function(n){return n},P=n._fork(!1),M=new v.Newtype(function(n){return n},_),S=new w.Functor(n._parAffMap),L=new w.Functor(n._map),R=n._fork(!0),D={isLeft:function(n){if(n instanceof d.Left)return!0;if(n instanceof d.Right)return!1;throw new Error("Failed pattern match at Effect.Aff (line 390, column 12 - line 392, column 20): "+[n.constructor.name])},fromLeft:function(n){if(n instanceof d.Left)return n.value0;if(n instanceof d.Right)return b.unsafeCrashWith("unsafeFromLeft: Right");throw new Error("Failed pattern match at Effect.Aff (line 395, column 20 - line 397, column 54): "+[n.constructor.name])},fromRight:function(n){if(n instanceof d.Right)return n.value0;if(n instanceof d.Left)return b.unsafeCrashWith("unsafeFromRight: Left");throw new Error("Failed pattern match at Effect.Aff (line 400, column 21 - line 402, column 54): "+[n.constructor.name])},left:d.Left.create,right:d.Right.create},B=function(e){return n._makeFiber(D,e)},z=function(n){return function(){var e=B(n)();return e.run(),e}},U=function(){var n=w.void(j.functorEffect);return function(e){return n(z(e))}}(),W=B,N=function(e){return n._delay(d.Right.create,e)},T=function(e){return function(r){return n.generalBracket(e)({killed:A.const(r),failed:A.const(r),completed:A.const(r)})}},G=new u.Apply(function(){return S},n._parAffApply),H=function(n){return new h.Semigroup(u.lift2(G)(h.append(n)))},I=new o.Monad(function(){return O},function(){return J}),J=new f.Bind(function(){return K},n._bind),K=new u.Apply(function(){return L},o.ap(I)),O=new t.Applicative(function(){return K},n._pure),Q=function(e){return function(r){return n.generalBracket(t.pure(O)(q.unit))({killed:function(n){return function(e){return r(n)}},failed:A.const(t.pure(O)),completed:A.const(t.pure(O))})(A.const(e))}},V=function(n){return function(e){return T(t.pure(O)(q.unit))(A.const(n))(A.const(e))}},X=function(n){return T(n)(A.const(t.pure(O)(q.unit)))(t.pure(O))},Y=new i.Lazy(function(n){return f.bind(J)(t.pure(O)(q.unit))(n)}),Z=function(n){return new h.Semigroup(u.lift2(K)(h.append(n)))},$=new x.MonadEffect(function(){return I},n._liftEffect),nn=function(){var n=x.liftEffect($);return function(e){return _(A.const(n(e)))}}(),en=function(e){return n.makeAff(function(n){return w.map(j.functorEffect)(nn)(e.join(n))})},rn=new w.Functor(function(n){return function(e){return C.unsafePerformEffect(B(w.map(L)(n)(en(e))))}}),tn=new u.Apply(function(){return rn},function(n){return function(e){return C.unsafePerformEffect(B(u.apply(K)(en(n))(en(e))))}}),un=new t.Applicative(function(){return tn},function(n){return C.unsafePerformEffect(B(t.pure(O)(n)))}),fn=function(e){return function(r){return f.bind(J)(x.liftEffect($)(r.isSuspended))(function(u){return u?x.liftEffect($)(w.void(j.functorEffect)(r.kill(e,A.const(t.pure(j.applicativeEffect)(q.unit))))):n.makeAff(function(n){return w.map(j.functorEffect)(nn)(r.kill(e,n))})})}},on=function(){var n=A.flip(fn);return function(e){return _(n(e))}}(),cn=new c.MonadThrow(function(){return I},n._throwError),an=new c.MonadError(function(){return cn},n._catchError),ln=c.try(an),pn=function(n){return function(e){return z(f.bindFlipped(J)((r=x.liftEffect($),function(e){return r(n(e))}))(c.try(an)(e)));var r}},sn=function(n){return function(e){return w.void(j.functorEffect)(pn(n)(e))}},dn=function(n){return function(e){return W(f.bindFlipped(J)((r=x.liftEffect($),function(e){return r(n(e))}))(c.try(an)(e)));var r}},mn=new p.Parallel(function(){return An},function(){return I},g.unsafeCoerce,n._sequential),An=new t.Applicative(function(){return G},function(){var n=p.parallel(mn),e=t.pure(O);return function(r){return n(e(r))}}()),wn=function(n){return new E.Monoid(function(){return H(n.Semigroup0())},t.pure(An)(E.mempty(n)))},En=new h.Semigroup(function(n){return function(e){return function(r){return l.parSequence_(mn)(m.foldableArray)([n(r),e(r)])}}}),vn=function(e){var r=y.error("[Aff] Child fiber outlived parent"),u=function(e){return function(r){return n.makeAff(function(u){return n._killAll(e,r.supervisor,u(t.pure(d.applicativeEither)(q.unit)))})}};return n.generalBracket(x.liftEffect($)(function(){var r=n._makeSupervisedFiber(D,e)();return r.fiber.run(),r}))({killed:function(n){return function(e){return l.parSequence_(mn)(m.foldableArray)([fn(n)(e.fiber),u(n)(e)])}},failed:A.const(u(r)),completed:A.const(u(r))})(function(n){return en(n.fiber)})},hn=new a.MonadRec(function(){return I},function(n){return function e(r){return f.bind(J)(n(r))(function(n){if(n instanceof a.Done)return t.pure(O)(n.value0);if(n instanceof a.Loop)return e(n.value0);throw new Error("Failed pattern match at Effect.Aff (line 100, column 7 - line 102, column 22): "+[n.constructor.name])})}}),qn=function(n){return new E.Monoid(function(){return Z(n.Semigroup0())},t.pure(O)(E.mempty(n)))},jn=A.const(t.pure(O)(q.unit)),xn=new E.Monoid(function(){return En},jn),yn=n.makeAff(function(n){return t.pure(j.applicativeEffect)(E.mempty(xn))}),Cn=function(){var n=w.map(L)(A.const(q.unit));return function(e){return n(ln(e))}}(),bn=new e.Alt(function(){return S},n._parAffAlt),gn=new e.Alt(function(){return L},function(n){return function(e){return c.catchError(an)(n)(A.const(e))}}),kn=new s.Plus(function(){return gn},c.throwError(cn)(y.error("Always fails"))),Fn=new s.Plus(function(){return bn},p.parallel(mn)(s.empty(kn))),_n=new r.Alternative(function(){return An},function(){return Fn});module.exports={Canceler:_,launchAff:z,launchAff_:U,launchSuspendedAff:W,runAff:pn,runAff_:sn,runSuspendedAff:dn,forkAff:R,suspendAff:P,supervise:vn,attempt:ln,apathize:Cn,delay:N,never:yn,finally:V,invincible:X,killFiber:fn,joinFiber:en,cancelWith:Q,bracket:T,nonCanceler:jn,effectCanceler:nn,fiberCanceler:on,functorAff:L,applyAff:K,applicativeAff:O,bindAff:J,monadAff:I,semigroupAff:Z,monoidAff:qn,altAff:gn,plusAff:kn,monadRecAff:hn,monadThrowAff:cn,monadErrorAff:an,monadEffectAff:$,lazyAff:Y,functorParAff:S,applyParAff:G,applicativeParAff:An,semigroupParAff:H,monoidParAff:wn,altParAff:bn,plusParAff:Fn,alternativeParAff:_n,parallelAff:mn,functorFiber:rn,applyFiber:tn,applicativeFiber:un,newtypeCanceler:M,semigroupCanceler:En,monoidCanceler:xn,makeAff:n.makeAff,generalBracket:n.generalBracket};
-},{"./foreign.js":"idq0","../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Lazy/index.js":"y9cE","../Control.Monad/index.js":"U/Ix","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Parallel/index.js":"LNK1","../Control.Parallel.Class/index.js":"NR5l","../Control.Plus/index.js":"oMBg","../Data.Either/index.js":"B2JL","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Unit/index.js":"NhVk","../Effect/index.js":"oTWB","../Effect.Class/index.js":"dWtH","../Effect.Exception/index.js":"0OCW","../Effect.Unsafe/index.js":"tPW2","../Partial.Unsafe/index.js":"aoR+","../Unsafe.Coerce/index.js":"ETUV"}],"89Lg":[function(require,module,exports) {
-"use strict";var e=function(){function e(){this.head=null,this.last=null,this.size=0}function n(e,n){this.queue=e,this.value=n,this.next=null,this.prev=null}function t(n){this.draining=!1,this.error=null,this.value=n,this.takes=new e,this.reads=new e,this.puts=new e}var r={};function u(e){try{e()}catch(n){setTimeout(function(){throw n},0)}}function a(e){var n;switch(e.size){case 0:return null;case 1:n=e.head,e.head=null;break;case 2:n=e.last,e.head.next=null,e.last=null;break;default:n=e.last,e.last=n.prev,e.last.next=null}return n.prev=null,n.queue=null,e.size--,n.value}function l(e){var n;switch(e.size){case 0:return null;case 1:n=e.head,e.head=null;break;case 2:n=e.head,e.last.prev=null,e.head=e.last,e.last=null;break;default:n=e.head,e.head=n.next,e.head.prev=null}return n.next=null,n.queue=null,e.size--,n.value}return t.EMPTY=r,t.putLast=function(e,t){var r=new n(e,t);switch(e.size){case 0:e.head=r;break;case 1:r.prev=e.head,e.head.next=r,e.last=r;break;default:r.prev=e.last,e.last.next=r,e.last=r}return e.size++,r},t.takeLast=a,t.takeHead=l,t.deleteCell=function(e){null!==e.queue&&(e.queue.last!==e?e.queue.head!==e?(e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),e.queue.size--,e.queue=null,e.value=null,e.next=null,e.prev=null):l(e.queue):a(e.queue))},t.drainVar=function(e,n){if(!n.draining){var t,a,i,s,o,c=n.puts,f=n.takes,v=n.reads;for(n.draining=!0;;){if(t=null,a=null,i=null,s=n.value,o=v.size,null!==n.error){for(s=e.left(n.error);t=l(c);)u(t.cb(s));for(;a=l(v);)u(a(s));for(;i=l(f);)u(i(s));break}if(s===r&&(t=l(c))&&(n.value=s=t.value),s!==r){for(i=l(f);o--&&(a=l(v));)u(a(e.right(s)));null!==i&&(n.value=r,u(i(e.right(s))))}if(null!==t&&u(t.cb(e.right(void 0))),n.value===r&&0===c.size||n.value!==r&&0===f.size)break}n.draining=!1}},t}();exports.empty=function(){return new e(e.EMPTY)},exports._newVar=function(n){return function(){return new e(n)}},exports._killVar=function(n,t,r){return function(){null===r.error&&(r.error=t,r.value=e.EMPTY,e.drainVar(n,r))}},exports._putVar=function(n,t,r,u){return function(){var a=e.putLast(r.puts,{cb:u,value:t});return e.drainVar(n,r),function(){e.deleteCell(a)}}},exports._takeVar=function(n,t,r){return function(){var u=e.putLast(t.takes,r);return e.drainVar(n,t),function(){e.deleteCell(u)}}},exports._readVar=function(n,t,r){return function(){var u=e.putLast(t.reads,r);return e.drainVar(n,t),function(){e.deleteCell(u)}}},exports._tryPutVar=function(n,t,r){return function(){return r.value===e.EMPTY&&null===r.error&&(r.value=t,e.drainVar(n,r),!0)}},exports._tryTakeVar=function(n,t){return function(){var r=t.value;return r===e.EMPTY?n.nothing:(t.value=e.EMPTY,e.drainVar(n,t),n.just(r))}},exports._tryReadVar=function(n,t){return function(){return t.value===e.EMPTY?n.nothing:n.just(t.value)}},exports._status=function(n,t){return function(){return t.error?n.killed(t.error):t.value===e.EMPTY?n.empty:n.filled(t.value)}};
-},{}],"XiHq":[function(require,module,exports) {
-"use strict";var t=require("./foreign.js"),n=require("../Data.Either/index.js"),e=require("../Data.Maybe/index.js"),r=function(){function t(t){this.value0=t}return t.create=function(n){return new t(n)},t}(),u=function(){function t(t){this.value0=t}return t.create=function(n){return new t(n)},t}(),i=function(){function t(){}return t.value=new t,t}(),a=t._newVar,c=function(t){return t instanceof r},o=function(t){return t instanceof u},f=function(t){return t instanceof i},l={left:n.Left.create,right:n.Right.create,nothing:e.Nothing.value,just:e.Just.create,killed:r.create,filled:u.create,empty:i.value},s=function(n){return function(e){return t._killVar(l,n,e)}},d=function(n){return function(e){return function(r){return t._putVar(l,n,e,r)}}},y=function(n){return function(e){return t._readVar(l,n,e)}},_=function(n){return t._status(l,n)},p=function(n){return function(e){return t._takeVar(l,n,e)}},V=function(n){return function(e){return t._tryPutVar(l,n,e)}},h=function(n){return t._tryReadVar(l,n)},k=function(n){return t._tryTakeVar(l,n)};module.exports={Killed:r,Filled:u,Empty:i,new:a,take:p,tryTake:k,put:d,tryPut:V,read:y,tryRead:h,kill:s,status:_,isEmpty:f,isFilled:o,isKilled:c,empty:t.empty};
-},{"./foreign.js":"89Lg","../Data.Either/index.js":"B2JL","../Data.Maybe/index.js":"5mN7"}],"hACG":[function(require,module,exports) {
-"use strict";var t=require("../Effect.AVar/index.js"),f=require("../Effect.Aff/index.js"),n=require("../Effect.Class/index.js"),e=function(){var e=n.liftEffect(f.monadEffectAff);return function(f){return e(t.tryTake(f))}}(),r=function(){var e=n.liftEffect(f.monadEffectAff);return function(f){return e(t.tryRead(f))}}(),u=function(e){var r=n.liftEffect(f.monadEffectAff),u=t.tryPut(e);return function(t){return r(u(t))}},c=function(n){return f.makeAff(function(e){return function(){var r=t.take(n)(e)();return f.effectCanceler(r)}})},i=function(){var e=n.liftEffect(f.monadEffectAff);return function(f){return e(t.status(f))}}(),a=function(n){return f.makeAff(function(e){return function(){var r=t.read(n)(e)();return f.effectCanceler(r)}})},o=function(n){return function(e){return f.makeAff(function(r){return function(){var u=t.put(n)(e)(r)();return f.effectCanceler(u)}})}},E=function(){var e=n.liftEffect(f.monadEffectAff);return function(f){return e(t.new(f))}}(),l=function(e){var r=n.liftEffect(f.monadEffectAff),u=t.kill(e);return function(t){return r(u(t))}},d=n.liftEffect(f.monadEffectAff)(t.empty);module.exports={new:E,empty:d,status:i,take:c,tryTake:e,put:o,tryPut:u,read:a,tryRead:r,kill:l};
-},{"../Effect.AVar/index.js":"XiHq","../Effect.Aff/index.js":"I7lu","../Effect.Class/index.js":"dWtH"}],"ty16":[function(require,module,exports) {
-"use strict";exports.log=function(n){return function(){return console.log(n),{}}},exports.warn=function(n){return function(){return console.warn(n),{}}},exports.error=function(n){return function(){return console.error(n),{}}},exports.info=function(n){return function(){return console.info(n),{}}},exports.time=function(n){return function(){return console.time(n),{}}},exports.timeEnd=function(n){return function(){return console.timeEnd(n),{}}};
-},{}],"+3bp":[function(require,module,exports) {
-"use strict";var r=require("./foreign.js"),n=require("../Data.Show/index.js"),o=function(o){return function(e){return r.warn(n.show(o)(e))}},e=function(o){return function(e){return r.log(n.show(o)(e))}},t=function(o){return function(e){return r.info(n.show(o)(e))}},i=function(o){return function(e){return r.error(n.show(o)(e))}};module.exports={logShow:e,warnShow:o,errorShow:i,infoShow:t,log:r.log,warn:r.warn,error:r.error,info:r.info,time:r.time,timeEnd:r.timeEnd};
-},{"./foreign.js":"ty16","../Data.Show/index.js":"mFY7"}],"3Dts":[function(require,module,exports) {
-"use strict";var n=require("../Effect.Class/index.js"),r=require("../Effect.Console/index.js"),t=function(t){return function(f){var e=n.liftEffect(t),u=r.warnShow(f);return function(n){return e(u(n))}}},f=function(t){var f=n.liftEffect(t);return function(n){return f(r.warn(n))}},e=function(t){var f=n.liftEffect(t);return function(n){return f(r.timeEnd(n))}},u=function(t){var f=n.liftEffect(t);return function(n){return f(r.time(n))}},o=function(t){return function(f){var e=n.liftEffect(t),u=r.logShow(f);return function(n){return e(u(n))}}},i=function(t){var f=n.liftEffect(t);return function(n){return f(r.log(n))}},c=function(t){return function(f){var e=n.liftEffect(t),u=r.infoShow(f);return function(n){return e(u(n))}}},l=function(t){var f=n.liftEffect(t);return function(n){return f(r.info(n))}},a=function(t){return function(f){var e=n.liftEffect(t),u=r.errorShow(f);return function(n){return e(u(n))}}},E=function(t){var f=n.liftEffect(t);return function(n){return f(r.error(n))}};module.exports={log:i,logShow:o,warn:f,warnShow:t,error:E,errorShow:a,info:l,infoShow:c,time:u,timeEnd:e};
-},{"../Effect.Class/index.js":"dWtH","../Effect.Console/index.js":"+3bp"}],"kKQF":[function(require,module,exports) {
-"use strict";function t(o){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(o)}exports.unsafeToForeign=function(t){return t},exports.unsafeFromForeign=function(t){return t},exports.typeOf=function(o){return t(o)},exports.tagOf=function(t){return Object.prototype.toString.call(t).slice(8,-1)},exports.isNull=function(t){return null===t},exports.isUndefined=function(t){return void 0===t},exports.isArray=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)};
-},{}],"XAY7":[function(require,module,exports) {
-"use strict";var n=require("../Control.Bind/index.js"),t=require("../Control.Category/index.js"),e=require("../Data.Boolean/index.js"),r=require("../Data.Eq/index.js"),u=require("../Data.Function/index.js"),o=require("../Data.Functor/index.js"),i=require("../Data.FunctorWithIndex/index.js"),a=require("../Data.List/index.js"),c=require("../Data.List.Types/index.js"),l=require("../Data.Maybe/index.js"),f=require("../Data.NonEmpty/index.js"),s=require("../Data.Ord/index.js"),m=require("../Data.Semigroup/index.js"),p=require("../Data.Semigroup.Traversable/index.js"),v=require("../Data.Tuple/index.js"),d=require("../Data.Unfoldable/index.js"),y=require("../Partial.Unsafe/index.js"),w=function(n){return function(t){return function(e){return new f.NonEmpty(n(t.value0)(e.value0),a.zipWith(n)(t.value1)(e.value1))}}},h=function(n){return function(t){return function(e){return function(r){return p.sequence1(c.traversable1NonEmptyList)(n.Apply0())(w(t)(e)(r))}}}},E=w(v.Tuple.create),N=function(n){return function(t){return function(e){return function(r){var u=t(new c.Cons(e.value0,e.value1))(new c.Cons(r.value0,r.value1));if(u instanceof c.Cons)return new f.NonEmpty(u.value0,u.value1);if(u instanceof c.Nil)return y.unsafeCrashWith("Impossible: empty list in NonEmptyList "+n);throw new Error("Failed pattern match at Data.List.NonEmpty (line 104, column 3 - line 106, column 81): "+[u.constructor.name])}}}},b=function(n){return function(t){return function(e){var r=t(new c.Cons(e.value0,e.value1));if(r instanceof c.Cons)return new f.NonEmpty(r.value0,r.value1);if(r instanceof c.Nil)return y.unsafeCrashWith("Impossible: empty list in NonEmptyList "+n);throw new Error("Failed pattern match at Data.List.NonEmpty (line 91, column 3 - line 93, column 81): "+[r.constructor.name])}}},L=function(n){return function(t){return function(r){if(0===n)return new l.Just(new f.NonEmpty(t,r.value1));if(e.otherwise)return o.map(l.functorMaybe)(function(n){return c.NonEmptyList((t=n,new f.NonEmpty(r.value0,t)));var t})(a.updateAt(n-1|0)(t)(r.value1));throw new Error("Failed pattern match at Data.List.NonEmpty (line 197, column 1 - line 197, column 75): "+[n.constructor.name,t.constructor.name,r.constructor.name])}}},x=function(n){return new v.Tuple(o.map(c.functorNonEmptyList)(v.fst)(n),o.map(c.functorNonEmptyList)(v.snd)(n))},D=function(n){var t=a.unsnoc(n.value1);if(t instanceof l.Nothing)return{init:c.Nil.value,last:n.value0};if(t instanceof l.Just)return{init:new c.Cons(n.value0,t.value0.init),last:t.value0.last};throw new Error("Failed pattern match at Data.List.NonEmpty (line 159, column 35 - line 161, column 50): "+[t.constructor.name])},g=function(){var n=N("unionBy");return function(t){return n(a.unionBy(t))}}(),q=function(n){return N("union")(a.union(n))},F=function(n){return{head:n.value0,tail:n.value1}},B=function(n){return new c.Cons(n.value0,n.value1)},C=function(n){var t=d.unfoldr(n)(function(n){return o.map(l.functorMaybe)(function(n){return new v.Tuple(n.head,n.tail)})(a.uncons(n))});return function(n){return t(B(n))}},j=function(n){return n.value1},M=function(){var n=b("sortBy");return function(t){return n(a.sortBy(t))}}(),W=function(n){return function(t){return M(s.compare(n))(t)}},I=function(n){return function(t){return new f.NonEmpty(n.value0,a.snoc(n.value1)(t))}},J=function(){var n=f.singleton(c.plusList);return function(t){return c.NonEmptyList(n(t))}}(),A=function(n){return function(t){if(n instanceof c.Cons)return new f.NonEmpty(n.value0,a.snoc(n.value1)(t));if(n instanceof c.Nil)return J(t);throw new Error("Failed pattern match at Data.List.NonEmpty (line 139, column 1 - line 139, column 51): "+[n.constructor.name,t.constructor.name])}},T=b("reverse")(a.reverse),z=function(){var n=b("nubBy");return function(t){return n(a.nubBy(t))}}(),k=function(n){return b("nub")(a.nub(n))},U=function(n){return function(t){return function(r){if(0===n)return new l.Just(new f.NonEmpty(t(r.value0),r.value1));if(e.otherwise)return o.map(l.functorMaybe)(function(n){return c.NonEmptyList((t=n,new f.NonEmpty(r.value0,t)));var t})(a.modifyAt(n-1|0)(t)(r.value1));throw new Error("Failed pattern match at Data.List.NonEmpty (line 202, column 1 - line 202, column 82): "+[n.constructor.name,t.constructor.name,r.constructor.name])}}},S=i.mapWithIndex(c.functorWithIndexNonEmptyList),O=function(n){return function(t){return n(new c.Cons(t.value0,t.value1))}},P=function(n){return O(a.mapMaybe(n))},G=function(n){return O(a.partition(n))},H=function(n){return O(a.span(n))},K=function(n){return O(a.take(n))},Q=function(n){return O(a.takeWhile(n))},R=function(n){return 1+a.length(n.value1)|0},V=function(n){return l.fromMaybe(n.value0)(a.last(n.value1))},X=function(){var n=N("intersectBy");return function(t){return n(a.intersectBy(t))}}(),Y=function(n){return N("intersect")(a.intersect(n))},Z=function(n){return function(t){return function(r){if(0===n)return new l.Just(new f.NonEmpty(t,new c.Cons(r.value0,r.value1)));if(e.otherwise)return o.map(l.functorMaybe)(function(n){return c.NonEmptyList((t=n,new f.NonEmpty(r.value0,t)));var t})(a.insertAt(n-1|0)(t)(r.value1));throw new Error("Failed pattern match at Data.List.NonEmpty (line 192, column 1 - line 192, column 75): "+[n.constructor.name,t.constructor.name,r.constructor.name])}}},$=function(n){return l.maybe(c.Nil.value)(function(t){return new c.Cons(n.value0,t)})(a.init(n.value1))},_=function(n){return function(t){if(0===t)return new l.Just(n.value0);if(e.otherwise)return a.index(n.value1)(t-1|0);throw new Error("Failed pattern match at Data.List.NonEmpty (line 166, column 1 - line 166, column 52): "+[n.constructor.name,t.constructor.name])}},nn=function(n){return n.value0},tn=function(){var n=b("groupBy");return function(t){return n(a.groupBy(t))}}(),en=function(n){return b("group'")(a["group'"](n))},rn=function(n){return b("group")(a.group(n))},un=function(n){if(n instanceof c.Nil)return l.Nothing.value;if(n instanceof c.Cons)return new l.Just(new f.NonEmpty(n.value0,n.value1));throw new Error("Failed pattern match at Data.List.NonEmpty (line 120, column 1 - line 120, column 57): "+[n.constructor.name])},on=function(n){var t=a.fromFoldable(n);return function(n){return un(t(n))}},an=function(t){return function(e){return function(r){return function(u){return n.bind(t.Bind1())(e(r)(u.value0))(function(n){return a.foldM(t)(e)(n)(u.value1)})}}}},cn=function(n){return function(t){var r=a.findLastIndex(n)(t.value1);if(r instanceof l.Just)return new l.Just(r.value0+1|0);if(r instanceof l.Nothing){if(n(t.value0))return new l.Just(0);if(e.otherwise)return l.Nothing.value}throw new Error("Failed pattern match at Data.List.NonEmpty (line 186, column 3 - line 190, column 29): "+[r.constructor.name])}},ln=function(n){return function(t){if(n(t.value0))return new l.Just(0);if(e.otherwise)return o.map(l.functorMaybe)(function(n){return n+1|0})(a.findIndex(n)(t.value1));throw new Error("Failed pattern match at Data.List.NonEmpty (line 179, column 1 - line 179, column 69): "+[n.constructor.name,t.constructor.name])}},fn=function(n){var t=a.filterM(n);return function(n){return O(t(n))}},sn=function(n){return O(a.filter(n))},mn=function(n){return function(t){return cn(function(e){return r.eq(n)(e)(t)})}},pn=function(n){return function(t){return ln(function(e){return r.eq(n)(e)(t)})}},vn=function(n){return O(a.dropWhile(n))},dn=function(n){return O(a.drop(n))},yn=function(n){return function(t){return new f.NonEmpty(n,t)}},wn=function(n){return function(t){return new f.NonEmpty(n,new c.Cons(t.value0,t.value1))}},hn=u.flip(n.bind(c.bindNonEmptyList)),En=function(e){return n.bind(c.bindNonEmptyList)(e)(t.identity(t.categoryFn))},Nn=O(a.catMaybes),bn=function(n){return function(t){return function(e){return new f.NonEmpty(t.value0,m.append(c.semigroupList)(t.value1)(a.fromFoldable(n)(e)))}}};module.exports={toUnfoldable:C,fromFoldable:on,fromList:un,toList:B,singleton:J,length:R,cons:wn,"cons'":yn,snoc:I,"snoc'":A,head:nn,last:V,tail:j,init:$,uncons:F,unsnoc:D,index:_,elemIndex:pn,elemLastIndex:mn,findIndex:ln,findLastIndex:cn,insertAt:Z,updateAt:L,modifyAt:U,reverse:T,concat:En,concatMap:hn,filter:sn,filterM:fn,mapMaybe:P,catMaybes:Nn,appendFoldable:bn,mapWithIndex:S,sort:W,sortBy:M,take:K,takeWhile:Q,drop:dn,dropWhile:vn,span:H,group:rn,"group'":en,groupBy:tn,partition:G,nub:k,nubBy:z,union:q,unionBy:g,intersect:Y,intersectBy:X,zipWith:w,zipWithA:h,zip:E,unzip:x,foldM:an};
-},{"../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Data.Boolean/index.js":"ObQr","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.NonEmpty/index.js":"qF8i","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Semigroup.Traversable/index.js":"qkfi","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Partial.Unsafe/index.js":"aoR+"}],"pu1p":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),n=require("../Control.Applicative/index.js"),r=require("../Control.Monad.Error.Class/index.js"),t=require("../Control.Monad.Except/index.js"),a=require("../Control.Monad.Except.Trans/index.js"),i=require("../Data.Boolean/index.js"),o=require("../Data.Either/index.js"),u=require("../Data.Eq/index.js"),c=require("../Data.Function/index.js"),l=require("../Data.Identity/index.js"),s=require("../Data.Int/index.js"),f=require("../Data.List.NonEmpty/index.js"),d=require("../Data.Maybe/index.js"),v=require("../Data.Ord/index.js"),p=require("../Data.Ordering/index.js"),m=require("../Data.Show/index.js"),h=require("../Data.String.CodeUnits/index.js"),w=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),g=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(r){return new e(n,r)}},e}(),E=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(r){return new e(n,r)}},e}(),T=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(r){return new e(n,r)}},e}(),x=new m.Show(function(e){if(e instanceof w)return"(ForeignError "+m.show(m.showString)(e.value0)+")";if(e instanceof E)return"(ErrorAtIndex "+m.show(m.showInt)(e.value0)+" "+m.show(x)(e.value1)+")";if(e instanceof T)return"(ErrorAtProperty "+m.show(m.showString)(e.value0)+" "+m.show(x)(e.value1)+")";if(e instanceof g)return"(TypeMismatch "+m.show(m.showString)(e.value0)+" "+m.show(m.showString)(e.value1)+")";throw new Error("Failed pattern match at Foreign (line 63, column 1 - line 67, column 89): "+[e.constructor.name])}),F=function e(n){if(n instanceof w)return n.value0;if(n instanceof E)return"Error at array index "+m.show(m.showInt)(n.value0)+": "+e(n.value1);if(n instanceof T)return"Error at property "+m.show(m.showString)(n.value0)+": "+e(n.value1);if(n instanceof g)return"Type mismatch: expected "+n.value0+", found "+n.value1;throw new Error("Failed pattern match at Foreign (line 72, column 1 - line 72, column 45): "+[n.constructor.name])},y=function(r){if(e.isUndefined(r))return n.pure(a.applicativeExceptT(l.monadIdentity))(d.Nothing.value);if(i.otherwise)return n.pure(a.applicativeExceptT(l.monadIdentity))(new d.Just(r));throw new Error("Failed pattern match at Foreign (line 157, column 1 - line 157, column 46): "+[r.constructor.name])},q=function(r){if(e.isNull(r)||e.isUndefined(r))return n.pure(a.applicativeExceptT(l.monadIdentity))(d.Nothing.value);if(i.otherwise)return n.pure(a.applicativeExceptT(l.monadIdentity))(new d.Just(r));throw new Error("Failed pattern match at Foreign (line 162, column 1 - line 162, column 52): "+[r.constructor.name])},I=function(r){if(e.isNull(r))return n.pure(a.applicativeExceptT(l.monadIdentity))(d.Nothing.value);if(i.otherwise)return n.pure(a.applicativeExceptT(l.monadIdentity))(new d.Just(r));throw new Error("Failed pattern match at Foreign (line 152, column 1 - line 152, column 41): "+[r.constructor.name])},j=function(){var e=r.throwError(a.monadThrowExceptT(l.monadIdentity));return function(n){return e(f.singleton(n))}}(),S=function(r){if(e.isArray(r))return n.pure(a.applicativeExceptT(l.monadIdentity))(e.unsafeFromForeign(r));if(i.otherwise)return j(new g("array",e.tagOf(r)));throw new Error("Failed pattern match at Foreign (line 147, column 1 - line 147, column 42): "+[r.constructor.name])},N=function(r){return function(t){if(e.tagOf(t)===r)return n.pure(a.applicativeExceptT(l.monadIdentity))(e.unsafeFromForeign(t));if(i.otherwise)return j(new g(r,e.tagOf(t)));throw new Error("Failed pattern match at Foreign (line 106, column 1 - line 106, column 55): "+[r.constructor.name,t.constructor.name])}},O=N("Boolean"),D=N("Number"),L=function(r){var a,i=o.Left.create(f.singleton(new g("Int",e.tagOf(r)))),u=(a=d.maybe(i)(n.pure(o.applicativeEither)),function(e){return a(s.fromNumber(e))});return t.mapExcept(o.either(c.const(i))(u))(D(r))},A=N("String"),C=function(r){var a,i=o.Left.create(f.singleton(new g("Char",e.tagOf(r)))),u=(a=d.maybe(i)(n.pure(o.applicativeEither)),function(e){return a(h.toChar(e))});return t.mapExcept(o.either(c.const(i))(u))(A(r))},G=new u.Eq(function(e){return function(n){return e instanceof w&&n instanceof w?e.value0===n.value0:e instanceof g&&n instanceof g?e.value0===n.value0&&e.value1===n.value1:e instanceof E&&n instanceof E?e.value0===n.value0&&u.eq(G)(e.value1)(n.value1):e instanceof T&&n instanceof T&&(e.value0===n.value0&&u.eq(G)(e.value1)(n.value1))}}),U=new v.Ord(function(){return G},function(e){return function(n){if(e instanceof w&&n instanceof w)return v.compare(v.ordString)(e.value0)(n.value0);if(e instanceof w)return p.LT.value;if(n instanceof w)return p.GT.value;var r;if(e instanceof g&&n instanceof g)return(r=v.compare(v.ordString)(e.value0)(n.value0))instanceof p.LT?p.LT.value:r instanceof p.GT?p.GT.value:v.compare(v.ordString)(e.value1)(n.value1);if(e instanceof g)return p.LT.value;if(n instanceof g)return p.GT.value;if(e instanceof E&&n instanceof E)return(r=v.compare(v.ordInt)(e.value0)(n.value0))instanceof p.LT?p.LT.value:r instanceof p.GT?p.GT.value:v.compare(U)(e.value1)(n.value1);if(e instanceof E)return p.LT.value;if(n instanceof E)return p.GT.value;if(e instanceof T&&n instanceof T)return(r=v.compare(v.ordString)(e.value0)(n.value0))instanceof p.LT?p.LT.value:r instanceof p.GT?p.GT.value:v.compare(U)(e.value1)(n.value1);throw new Error("Failed pattern match at Foreign (line 61, column 1 - line 61, column 52): "+[e.constructor.name,n.constructor.name])}});module.exports={ForeignError:w,TypeMismatch:g,ErrorAtIndex:E,ErrorAtProperty:T,renderForeignError:F,unsafeReadTagged:N,readString:A,readChar:C,readBoolean:O,readNumber:D,readInt:L,readArray:S,readNull:I,readUndefined:y,readNullOrUndefined:q,fail:j,eqForeignError:G,ordForeignError:U,showForeignError:x,unsafeToForeign:e.unsafeToForeign,unsafeFromForeign:e.unsafeFromForeign,typeOf:e.typeOf,tagOf:e.tagOf,isNull:e.isNull,isUndefined:e.isUndefined,isArray:e.isArray};
-},{"./foreign.js":"kKQF","../Control.Applicative/index.js":"qYya","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Except/index.js":"Fye2","../Control.Monad.Except.Trans/index.js":"gr8B","../Data.Boolean/index.js":"ObQr","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Identity/index.js":"2OKT","../Data.Int/index.js":"xNJb","../Data.List.NonEmpty/index.js":"XAY7","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Show/index.js":"mFY7","../Data.String.CodeUnits/index.js":"6c6X"}],"t65A":[function(require,module,exports) {
-"use strict";var n="function"==typeof Array.from,t="undefined"!=typeof Symbol&&null!=Symbol&&void 0!==Symbol.iterator&&"function"==typeof String.prototype[Symbol.iterator],r="function"==typeof String.prototype.fromCodePoint,o="function"==typeof String.prototype.codePointAt;exports._unsafeCodePointAt0=function(n){return o?function(n){return n.codePointAt(0)}:n},exports._codePointAt=function(n){return function(r){return function(o){return function(e){return function(u){return function(i){var f=i.length;if(u<0||u>=f)return o;if(t)for(var c=i[Symbol.iterator](),a=u;;--a){var p=c.next();if(p.done)return o;if(0===a)return r(e(p.value))}return n(u)(i)}}}}}},exports._countPrefix=function(n){return function(r){return t?function(n){return function(t){for(var o=t[Symbol.iterator](),e=0;;++e){var u=o.next();if(u.done)return e;var i=r(u.value);if(!n(i))return e}}}:n}},exports._fromCodePointArray=function(n){return r?function(t){return t.length<1e4?String.fromCodePoint.apply(String,t):t.map(n).join("")}:function(t){return t.map(n).join("")}},exports._singleton=function(n){return r?String.fromCodePoint:n},exports._take=function(n){return function(r){return t?function(n){for(var t="",o=n[Symbol.iterator](),e=0;e<r;++e){var u=o.next();if(u.done)return t;t+=u.value}return t}:n(r)}},exports._toCodePointArray=function(t){return function(r){return n?function(n){return Array.from(n,r)}:t}};
-},{}],"mAJY":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Data.Array/index.js"),t=require("../Data.Boolean/index.js"),e=require("../Data.Bounded/index.js"),u=require("../Data.Enum/index.js"),o=require("../Data.Eq/index.js"),i=require("../Data.EuclideanRing/index.js"),a=require("../Data.Functor/index.js"),f=require("../Data.Int/index.js"),d=require("../Data.Maybe/index.js"),c=require("../Data.Ord/index.js"),l=require("../Data.Show/index.js"),s=require("../Data.String.CodeUnits/index.js"),m=require("../Data.String.Common/index.js"),h=require("../Data.String.Unsafe/index.js"),v=require("../Data.Tuple/index.js"),x=require("../Data.Unfoldable/index.js"),E=function(n){return n},g=function(n){return function(r){return 65536+((1024*(n-55296|0)|0)+(r-56320|0)|0)|0}},C=new l.Show(function(n){return"(CodePoint 0x"+m.toUpper(f.toStringAs(f.hexadecimal)(n))+")"}),b=function(n){return 56320<=n&&n<=57343},p=function(n){return 55296<=n&&n<=56319},q=function(n){var r=s.length(n);if(0===r)return d.Nothing.value;if(1===r)return new d.Just({head:u.fromEnum(u.boundedEnumChar)(h.charAt(0)(n)),tail:""});var t=u.fromEnum(u.boundedEnumChar)(h.charAt(1)(n)),e=u.fromEnum(u.boundedEnumChar)(h.charAt(0)(n));return p(e)&&b(t)?new d.Just({head:g(e)(t),tail:s.drop(2)(n)}):new d.Just({head:e,tail:s.drop(1)(n)})},w=function(n){return a.map(d.functorMaybe)(function(n){return new v.Tuple(n.head,n.tail)})(q(n))},P=function(n){return x.unfoldr(x.unfoldableArray)(w)(n)},D=function(n){var r=u.fromEnum(u.boundedEnumChar)(h.charAt(0)(n));if(p(r)&&s.length(n)>1){var t=u.fromEnum(u.boundedEnumChar)(h.charAt(1)(n));return b(t)?g(r)(t):r}return r},j=n._unsafeCodePointAt0(D),A=n._toCodePointArray(P)(j),y=function(n){return r.length(A(n))},J=function(n){return function(r){return a.map(d.functorMaybe)(function(n){return y(s.take(n)(r))})(s.lastIndexOf(n)(r))}},O=function(n){return function(r){return a.map(d.functorMaybe)(function(n){return y(s.take(n)(r))})(s.indexOf(n)(r))}},I=function(){var n=u.toEnumWithDefaults(u.boundedEnumChar)(e.bottom(e.boundedChar))(e.top(e.boundedChar));return function(r){return s.singleton(n(r))}}(),S=function(n){if(n<=65535)return I(n);var r=i.div(i.euclideanRingInt)(n-65536|0)(1024)+55296|0,t=i.mod(i.euclideanRingInt)(n-65536|0)(1024)+56320|0;return I(r)+I(t)},k=n._fromCodePointArray(S),_=n._singleton(S),M=function n(r){return function(t){if(r<1)return"";var e=q(t);return e instanceof d.Just?_(e.value0.head)+n(r-1|0)(e.value0.tail):t}},N=n._take(M),B=function(n){return function(r){return function(t){var e=s.length(N(r)(t));return a.map(d.functorMaybe)(function(n){return y(s.take(n)(t))})(s["lastIndexOf'"](n)(e)(t))}}},U=function(n){return function(r){var t=N(n)(r);return{before:t,after:s.drop(s.length(t))(r)}}},F=new o.Eq(function(n){return function(r){return n===r}}),R=new c.Ord(function(){return F},function(n){return function(r){return c.compare(c.ordInt)(n)(r)}}),W=function(n){return function(r){return s.drop(s.length(N(n)(r)))(r)}},T=function(n){return function(r){return function(t){var e=W(r)(t);return a.map(d.functorMaybe)(function(n){return r+y(s.take(n)(e))|0})(s.indexOf(n)(e))}}},z=function(n){return function(r){return function(t){var e,u,o,i,a=n,f=r,c=!1;for(;!c;)u=a,o=t,i=void 0,e=(i=q(f))instanceof d.Just&&u(i.value0.head)?(a=u,f=i.value0.tail,void(t=o+1|0)):(c=!0,o);return e}}},G=function(n){return function(r){return z(n)(r)(0)}},H=n._countPrefix(G)(j),K=function(n){return function(r){return W(H(n)(r))(r)}},L=function(n){return function(r){return N(H(n)(r))(r)}},Q=function(){var n=u.fromEnum(u.boundedEnumChar);return function(r){return E(n(r))}}(),V=function(n){return function(r){var t,e,u,o=n,i=!1;for(;!i;)e=o,u=void 0,t=(u=q(r))instanceof d.Just?0===e?(i=!0,new d.Just(u.value0.head)):(o=e-1|0,void(r=u.value0.tail)):(i=!0,d.Nothing.value);return t}},X=function(r){return function(t){return r<0?d.Nothing.value:0===r&&""===t?d.Nothing.value:0===r?new d.Just(j(t)):n._codePointAt(V)(d.Just.create)(d.Nothing.value)(j)(r)(t)}},Y=new e.Bounded(function(){return R},0,1114111),Z=new u.BoundedEnum(function(){return Y},function(){return $},1114112,function(n){return n},function(n){if(n>=0&&n<=1114111)return new d.Just(n);if(t.otherwise)return d.Nothing.value;throw new Error("Failed pattern match at Data.String.CodePoints (line 63, column 1 - line 68, column 26): "+[n.constructor.name])}),$=new u.Enum(function(){return R},u.defaultPred(u.toEnum(Z))(u.fromEnum(Z)),u.defaultSucc(u.toEnum(Z))(u.fromEnum(Z)));module.exports={codePointFromChar:Q,singleton:_,fromCodePointArray:k,toCodePointArray:A,codePointAt:X,uncons:q,length:y,countPrefix:H,indexOf:O,"indexOf'":T,lastIndexOf:J,"lastIndexOf'":B,take:N,takeWhile:L,drop:W,dropWhile:K,splitAt:U,eqCodePoint:F,ordCodePoint:R,showCodePoint:C,boundedCodePoint:Y,enumCodePoint:$,boundedEnumCodePoint:Z};
-},{"./foreign.js":"t65A","../Data.Array/index.js":"4t4C","../Data.Boolean/index.js":"ObQr","../Data.Bounded/index.js":"kcUU","../Data.Enum/index.js":"oOsU","../Data.Eq/index.js":"Pq4F","../Data.EuclideanRing/index.js":"2IRB","../Data.Functor/index.js":"+0AE","../Data.Int/index.js":"xNJb","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Show/index.js":"mFY7","../Data.String.CodeUnits/index.js":"6c6X","../Data.String.Common/index.js":"OSrc","../Data.String.Unsafe/index.js":"5UWM","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z"}],"rsyP":[function(require,module,exports) {
-"use strict";exports["showRegex'"]=function(n){return""+n},exports["regex'"]=function(n){return function(r){return function(t){return function(e){try{return r(new RegExp(t,e))}catch(u){return n(u.message)}}}}},exports.source=function(n){return n.source},exports["flags'"]=function(n){return{multiline:n.multiline,ignoreCase:n.ignoreCase,global:n.global,sticky:!!n.sticky,unicode:!!n.unicode}},exports.test=function(n){return function(r){var t=n.lastIndex,e=n.test(r);return n.lastIndex=t,e}},exports._match=function(n){return function(r){return function(t){return function(e){var u=e.match(t);if(null==u||0===u.length)return r;for(var o=0;o<u.length;o++)u[o]=null==u[o]?r:n(u[o]);return n(u)}}}},exports.replace=function(n){return function(r){return function(t){return t.replace(n,r)}}},exports["replace'"]=function(n){return function(r){return function(t){return t.replace(n,function(n){return r(n)(Array.prototype.splice.call(arguments,1,arguments.length-3))})}}},exports._search=function(n){return function(r){return function(t){return function(e){var u=e.search(t);return-1===u?r:n(u)}}}},exports.split=function(n){return function(r){return r.split(n)}};
-},{}],"W1/V":[function(require,module,exports) {
-
-"use strict";var e=require("../Control.MonadZero/index.js"),i=require("../Data.Eq/index.js"),n=require("../Data.Functor/index.js"),r=require("../Data.Monoid/index.js"),a=require("../Data.Semigroup/index.js"),o=require("../Data.Show/index.js"),u=require("../Data.String.Common/index.js"),l=function(){function e(e){this.value0=e}return e.create=function(i){return new e(i)},e}(),t=new l({global:!1,ignoreCase:!1,multiline:!1,sticky:!1,unicode:!0}),g=new l({global:!1,ignoreCase:!1,multiline:!1,sticky:!0,unicode:!1}),s=new o.Show(function(r){var o=a.append(a.semigroupArray)([])(a.append(a.semigroupArray)(n.voidLeft(n.functorArray)(e.guard(e.monadZeroArray)(r.value0.global))("global"))(a.append(a.semigroupArray)(n.voidLeft(n.functorArray)(e.guard(e.monadZeroArray)(r.value0.ignoreCase))("ignoreCase"))(a.append(a.semigroupArray)(n.voidLeft(n.functorArray)(e.guard(e.monadZeroArray)(r.value0.multiline))("multiline"))(a.append(a.semigroupArray)(n.voidLeft(n.functorArray)(e.guard(e.monadZeroArray)(r.value0.sticky))("sticky"))(n.voidLeft(n.functorArray)(e.guard(e.monadZeroArray)(r.value0.unicode))("unicode"))))));return i.eq(i.eqArray(i.eqString))(o)([])?"noFlags":"("+u.joinWith(" <> ")(o)+")"}),d=new a.Semigroup(function(e){return function(i){return new l({global:e.value0.global||i.value0.global,ignoreCase:e.value0.ignoreCase||i.value0.ignoreCase,multiline:e.value0.multiline||i.value0.multiline,sticky:e.value0.sticky||i.value0.sticky,unicode:e.value0.unicode||i.value0.unicode})}}),c=new l({global:!1,ignoreCase:!1,multiline:!1,sticky:!1,unicode:!1}),v=new l({global:!1,ignoreCase:!1,multiline:!0,sticky:!1,unicode:!1}),m=new r.Monoid(function(){return d},c),y=new l({global:!1,ignoreCase:!0,multiline:!1,sticky:!1,unicode:!1}),f=new l({global:!0,ignoreCase:!1,multiline:!1,sticky:!1,unicode:!1}),p=new i.Eq(function(e){return function(i){return e.value0.global===i.value0.global&&e.value0.ignoreCase===i.value0.ignoreCase&&e.value0.multiline===i.value0.multiline&&e.value0.sticky===i.value0.sticky&&e.value0.unicode===i.value0.unicode}});module.exports={RegexFlags:l,noFlags:c,global:f,ignoreCase:y,multiline:v,sticky:g,unicode:t,semigroupRegexFlags:d,monoidRegexFlags:m,eqRegexFlags:p,showRegexFlags:s};
-},{"../Control.MonadZero/index.js":"lD5R","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.String.Common/index.js":"OSrc"}],"lBFq":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),t=require("../Data.Either/index.js"),a=require("../Data.Maybe/index.js"),r=require("../Data.Show/index.js"),n=require("../Data.String.CodeUnits/index.js"),i=require("../Data.String.Regex.Flags/index.js"),s=new r.Show(e["showRegex'"]),u=e._search(a.Just.create)(a.Nothing.value),c=function(e){return(e.value0.global?"g":"")+(e.value0.ignoreCase?"i":"")+(e.value0.multiline?"m":"")+(e.value0.sticky?"y":"")+(e.value0.unicode?"u":"")},l=function(a){return function(r){return e["regex'"](t.Left.create)(t.Right.create)(a)(c(r))}},o=function(e){return new i.RegexFlags({global:n.contains("g")(e),ignoreCase:n.contains("i")(e),multiline:n.contains("m")(e),sticky:n.contains("y")(e),unicode:n.contains("u")(e)})},g=e._match(a.Just.create)(a.Nothing.value),x=function(t){return i.RegexFlags.create(e["flags'"](t))};module.exports={regex:l,flags:x,renderFlags:c,parseFlags:o,match:g,search:u,showRegex:s,source:e.source,test:e.test,replace:e.replace,"replace'":e["replace'"],split:e.split};
-},{"./foreign.js":"rsyP","../Data.Either/index.js":"B2JL","../Data.Maybe/index.js":"5mN7","../Data.Show/index.js":"mFY7","../Data.String.CodeUnits/index.js":"6c6X","../Data.String.Regex.Flags/index.js":"W1/V"}],"f3ma":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Bind/index.js"),t=require("../Data.Array.NonEmpty/index.js"),e=require("../Data.Boolean/index.js"),u=require("../Data.Either/index.js"),o=require("../Data.Eq/index.js"),i=require("../Data.Foldable/index.js"),a=require("../Data.Function/index.js"),c=require("../Data.Functor/index.js"),f=require("../Data.Int/index.js"),l=require("../Data.Maybe/index.js"),s=require("../Data.Ord/index.js"),v=require("../Data.Show/index.js"),m=require("../Data.String.CodePoints/index.js"),b=require("../Data.String.Regex/index.js"),h=require("../Math/index.js"),d=function(n){return n},w=function(){function n(){}return n.value=new n,n}(),g=function(){function n(){}return n.value=new n,n}(),p=function(){function n(){}return n.value=new n,n}(),x=function(){function n(){}return n.value=new n,n}(),y=function(){function n(n,r,t,e){this.value0=n,this.value1=r,this.value2=t,this.value3=e}return n.create=function(r){return function(t){return function(e){return function(u){return new n(r,t,e,u)}}}},n}(),q=function(n){return function(r){return h.remainder(h.remainder(n)(r)+r)(r)}},j=function(n){return function(r){return function(t){return function(u){var o=s.clamp(s.ordInt)(0)(255)(n),i=f.toNumber(o)/255,a=s.clamp(s.ordInt)(0)(255)(r),c=f.toNumber(a)/255,l=s.clamp(s.ordInt)(0)(255)(t),v=s.max(s.ordInt)(s.max(s.ordInt)(o)(a))(l),m=s.min(s.ordInt)(s.min(s.ordInt)(o)(a))(l),b=v-m|0,d=f.toNumber(b)/255,w=f.toNumber(v+m|0)/510,g=function(){if(0===b)return 0;if(e.otherwise)return d/(1-h.abs(2*w-1));throw new Error("Failed pattern match at Color (line 157, column 5 - line 158, column 75): "+[])}(),p=f.toNumber(l)/255,x=60*function(n){if(0===n)return 0;if(v===o)return q((c-p)/d)(6);if(v===a)return(p-i)/d+2;if(e.otherwise)return(i-c)/d+4;throw new Error("Failed pattern match at Color (line 148, column 5 - line 148, column 17): "+[n.constructor.name])}(b);return new y(x,g,w,u)}}}},C=function(n){return function(r){return function(t){return j(n)(r)(t)(1)}}},I=function(n){return function(r){return function(t){return function(e){return j(f.round(255*n))(f.round(255*r))(f.round(255*t))(e)}}}},M=function(n){return function(r){return function(t){return I(n)(r)(t)(1)}}},N=function(n){return function(r){return function(t){var u=function(n){if(n<=.0031308)return 12.92*n;if(e.otherwise)return 1.055*h.pow(n)(1/2.4)-.055;throw new Error("Failed pattern match at Color (line 224, column 5 - line 225, column 65): "+[n.constructor.name])},o=u(-.9689*n+1.8758*r+.0415*t),i=u(3.2406*n-1.5372*r-.4986*t),a=u(.0557*n-.204*r+1.057*t);return M(i)(o)(a)}}},E=function(n){return function(r){return function(t){return r+n*(t-r)}}},F=function(n){return function(r){return function(t){var e=[{from:r,to:t},{from:r,to:t+360},{from:r+360,to:t}],u=l.fromJust()(i.minimumBy(i.foldableArray)(s.comparing(s.ordNumber)(function(n){return h.abs(n.to-n.from)}))(e));return E(n)(u.from)(u.to)}}},S=function(n){return function(r){return function(t){var e=h.pi/180,u=t.value1-r.value1,o=t.value2-r.value2,i=(r.value0+120)*e,a=(t.value0+120)*e-i;return function(e){var c=h.pow(r.value2+o*e)(n),f=i+a*e,l=(r.value1+u*e)*c*(1-c),s=c+l*(1.97294*h.cos(f)),v=c+l*(-.29227*h.cos(f)-.90649*h.sin(f)),m=c+l*(-.14861*h.cos(f)+1.78277*h.sin(f)),b=E(e)(r.value3)(t.value3);return I(m)(v)(s)(b)}}}},D=function(n){return function(r){return function(t){return function(e){var u=s.clamp(s.ordNumber)(0)(1)(r),o=s.clamp(s.ordNumber)(0)(1)(t),i=s.clamp(s.ordNumber)(0)(1)(e);return new y(n,u,o,i)}}}},A=function(n){return function(r){return function(t){return function(e){var u=r;if(0===t)return D(n)(u/(2-u))(0)(e);if(0===r&&1===t)return D(n)(0)(1)(e);var o=(2-r)*t,i=(u=r*t/(o<1?o:2-o),o/2);return D(n)(u)(i)(e)}}}},L=function(n){return function(r){return function(t){return A(n)(r)(t)(1)}}},B=function(n){return function(r){return D(r.value0)(r.value1)(r.value2+n)(r.value3)}},H=function(n){return function(r){return D(r.value0+n)(r.value1)(r.value2)(r.value3)}},z=function(n){return function(r){return D(r.value0)(r.value1+n)(r.value2)(r.value3)}},R=function(n){return function(r){return function(t){return D(n)(r)(t)(1)}}},G=R(0)(0)(1),k=function(n){return R(0)(0)(n)},J=function(n){var r=s.clamp(s.ordInt)(0)(16777215)(n),t=r>>8&255,e=255&r;return C(r>>16&255)(t)(e)},O=function(e){var o,i,s=(o=l.fromMaybe(0),i=f.fromStringAs(f.hexadecimal),function(n){return o(i(n))}),v=4===m.length(e),h=u.either(a.const(l.Nothing.value))(l.Just.create),d="([0-9a-f][0-9a-f])",w=v?"([0-9a-f])([0-9a-f])([0-9a-f])":d+(d+d),g=b.regex("^#(?:"+w+")$")(b.parseFlags("i"));return r.bind(l.bindMaybe)(h(g))(function(u){return r.bind(l.bindMaybe)(b.match(u)(e))(function(e){return r.bind(l.bindMaybe)(c.map(l.functorMaybe)(s)(r.join(l.bindMaybe)(t.index(e)(1))))(function(u){return r.bind(l.bindMaybe)(c.map(l.functorMaybe)(s)(r.join(l.bindMaybe)(t.index(e)(2))))(function(o){return r.bind(l.bindMaybe)(c.map(l.functorMaybe)(s)(r.join(l.bindMaybe)(t.index(e)(3))))(function(r){return v?n.pure(l.applicativeMaybe)(C((16*u|0)+u|0)((16*o|0)+o|0)((16*r|0)+r|0)):n.pure(l.applicativeMaybe)(C(u)(o)(r))})})})})})},P=function(n){return z(-n)},V=function(n){return B(-n)},X={xn:.95047,yn:1,zn:1.08883},Y=function(n){return function(r){return function(t){var u=(n+16)/116,o=function(n){if(n>6/29)return h.pow(n)(3);if(e.otherwise)return 6/29*3*(6/29)*(n-4/29);throw new Error("Failed pattern match at Color (line 249, column 5 - line 250, column 64): "+[n.constructor.name])},i=X.xn*o(u+r/500),a=X.yn*o(u),c=X.zn*o(u-t/200);return N(i)(a)(c)}}},Z=function(n){return function(r){return function(t){var e=h.pi/180,u=r*h.sin(t*e),o=r*h.cos(t*e);return Y(n)(o)(u)}}},$=function(n){var r=function(n){return v.show(v.showNumber)(f.toNumber(f.round(100*n))/100)},t=r(100*n.value1)+"%",e=r(100*n.value2)+"%",u=r(n.value0),o=v.show(v.showNumber)(n.value3);return 1===n.value3?"hsl("+u+", "+t+", "+e+")":"hsla("+u+", "+t+", "+e+", "+o+")"},K=H(180),Q=function(n){return 360===n?n:q(n)(360)},T=function(n){return{h:Q(n.value0),s:n.value1,l:n.value2,a:n.value3}},U=function(n){var r=n.value1;if(0===n.value2)return{h:Q(n.value0),s:2*r/(1+r),v:0,a:n.value3};if(0===n.value1&&1===n.value2)return{h:Q(n.value0),s:0,v:1,a:n.value3};var t=n.value1*(n.value2<.5?n.value2:1-n.value2),e=n.value2+t;r=2*t/(n.value2+t);return{h:Q(n.value0),s:r,v:e,a:n.value3}},W=function(n){var r=Q(n.value0)/60,t=(1-h.abs(2*n.value2-1))*n.value1,u=n.value2-t/2,o=t*(1-h.abs(h.remainder(r)(2)-1)),i=function(){if(r<1)return{r:t,g:o,b:0};if(1<=r&&r<2)return{r:o,g:t,b:0};if(2<=r&&r<3)return{r:0,g:t,b:o};if(3<=r&&r<4)return{r:0,g:o,b:t};if(4<=r&&r<5)return{r:o,g:0,b:t};if(e.otherwise)return{r:t,g:0,b:o};throw new Error("Failed pattern match at Color (line 342, column 5 - line 347, column 61): "+[])}();return{r:i.r+u,g:i.g+u,b:i.b+u,a:n.value3}},_=function(n){var r=W(n),t=function(n){if(n<=.03928)return n/12.92;if(e.otherwise)return h.pow((n+.055)/1.055)(2.4);throw new Error("Failed pattern match at Color (line 604, column 9 - line 605, column 61): "+[n.constructor.name])},u=t(r.g);return.2126*t(r.r)+.7152*u+.0722*t(r.b)},nn=function(n){return function(r){var t=_(r),e=_(n);return e>t?(e+.05)/(t+.05):(t+.05)/(e+.05)}},rn=function(n){return function(r){return nn(n)(r)>4.5}},tn=function(n){var r=W(n),t=f.round(255*r.g);return{r:f.round(255*r.r),g:t,b:f.round(255*r.b),a:r.a}},en=function(n){var r=tn(n),t=v.show(v.showInt)(r.g),e=v.show(v.showInt)(r.r),u=v.show(v.showInt)(r.b),o=v.show(v.showNumber)(r.a);return 1===r.a?"rgb("+e+", "+t+", "+u+")":"rgba("+e+", "+t+", "+u+", "+o+")"},un=new o.Eq(function(n){return function(r){var t=tn(r),e=tn(n);return e.r===t.r&&e.g===t.g&&e.b===t.b&&e.a===t.a}}),on=new v.Show(function(n){var r=tn(n);return"rgba "+v.show(v.showInt)(r.r)+" "+v.show(v.showInt)(r.g)+" "+v.show(v.showInt)(r.b)+" "+v.show(v.showNumber)(r.a)}),an=function(n){var r=function(n){var r=f.toStringAs(f.hexadecimal)(n);return 1===m.length(r)?"0"+r:r},t=tn(n);return"#"+(r(t.r)+(r(t.g)+r(t.b)))},cn=function(n){var r=W(n),t=function(n){if(n<=.04045)return n/12.92;if(e.otherwise)return h.pow((n+.055)/1.055)(2.4);throw new Error("Failed pattern match at Color (line 366, column 5 - line 367, column 63): "+[n.constructor.name])},u=t(r.g),o=t(r.r),i=t(r.b);return{x:.4124*o+.3576*u+.1805*i,y:.2126*o+.7152*u+.0722*i,z:.0193*o+.1192*u+.9505*i}},fn=function(n){var r=cn(n),t=h.pow(6/29)(3),u=function(n){if(n>t)return h.pow(n)(1/3);if(e.otherwise)return 1/3*h.pow(29/6)(2)*n+4/29;throw new Error("Failed pattern match at Color (line 384, column 5 - line 385, column 76): "+[n.constructor.name])},o=u(r.y/X.yn),i=116*o-16,a=200*(o-u(r.z/X.zn));return{l:i,a:500*(u(r.x/X.xn)-o),b:a}},ln=function(n){return function(r){var t=function(n){return h.pow(n)(2)},e=fn(r),u=fn(n);return h.sqrt(t(u.l-e.l)+t(u.a-e.a)+t(u.b-e.b))}},sn=function(n){var r=fn(n),t=180/h.pi,e=h.sqrt(r.a*r.a+r.b*r.b),u=q(h.atan2(r.b)(r.a)*t)(360);return{l:r.l,c:e,h:u}},vn=function(n){return function(r){return function(t){return function(e){if(n instanceof g){var u=T(t),o=T(r);return D(F(e)(o.h)(u.h))(E(e)(o.s)(u.s))(E(e)(o.l)(u.l))(E(e)(o.a)(u.a))}if(n instanceof w){u=W(t),o=W(r);return I(E(e)(o.r)(u.r))(E(e)(o.g)(u.g))(E(e)(o.b)(u.b))(E(e)(o.a)(u.a))}if(n instanceof p){u=sn(t),o=sn(r);return Z(E(e)(o.l)(u.l))(E(e)(o.c)(u.c))(F(e)(o.h)(u.h))}if(n instanceof x){u=fn(t),o=fn(r);return Y(E(e)(o.l)(u.l))(E(e)(o.a)(u.a))(E(e)(o.b)(u.b))}throw new Error("Failed pattern match at Color (line 520, column 1 - line 520, column 34): "+[n.constructor.name,r.constructor.name,t.constructor.name,e.constructor.name])}}}},mn=function(n){var r=sn(n);return P(1)(Z(r.l)(0)(0))},bn=function(n){var r=W(n);return(299*r.r+587*r.g+114*r.b)/1e3},hn=function(n){return bn(n)>.5},dn=R(0)(0)(0),wn=function(n){if(hn(n))return dn;if(e.otherwise)return G;throw new Error("Failed pattern match at Color (line 643, column 1 - line 643, column 28): "+[n.constructor.name])};module.exports={RGB:w,HSL:g,LCh:p,Lab:x,rgba:j,rgb:C,"rgba'":I,"rgb'":M,hsla:D,hsl:R,hsva:A,hsv:L,xyz:N,lab:Y,lch:Z,fromHexString:O,fromInt:J,toHSLA:T,toHSVA:U,toRGBA:tn,"toRGBA'":W,toXYZ:cn,toLab:fn,toLCh:sn,toHexString:an,cssStringHSLA:$,cssStringRGBA:en,black:dn,white:G,graytone:k,rotateHue:H,complementary:K,lighten:B,darken:V,saturate:z,desaturate:P,toGray:mn,mix:vn,mixCubehelix:S,brightness:bn,luminance:_,contrast:nn,isLight:hn,isReadable:rn,textColor:wn,distance:ln,showColor:on,eqColor:un};
-},{"../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Data.Array.NonEmpty/index.js":"eTKN","../Data.Boolean/index.js":"ObQr","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Int/index.js":"xNJb","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Show/index.js":"mFY7","../Data.String.CodePoints/index.js":"mAJY","../Data.String.Regex/index.js":"lBFq","../Math/index.js":"Rpaz"}],"rp+n":[function(require,module,exports) {
-"use strict";var r=require("../Color/index.js"),o=r.fromInt(16768e3),n=r.fromInt(3787980),t=r.fromInt(14540253),m=r.fromInt(16728374),e=r.fromInt(11603401),f=r.fromInt(16745755),I=r.fromInt(4036976),l=r.fromInt(7999),a=r.fromInt(8721483),i=r.fromInt(130928),u=r.fromInt(3066944),s=r.fromInt(11184810),v=r.fromInt(15733438),c=r.fromInt(29913),d=r.fromInt(1118481),g=r.fromInt(8379391);module.exports={navy:l,blue:c,aqua:g,teal:n,olive:I,green:u,lime:i,yellow:o,orange:f,red:m,maroon:a,fuchsia:v,purple:e,"black'":d,gray:s,silver:t};
-},{"../Color/index.js":"f3ma"}],"BG0s":[function(require,module,exports) {
-function t(t){return function(o){return function(e){return t.apply(e,[o])}}}exports.toPrecisionNative=t(Number.prototype.toPrecision),exports.toFixedNative=t(Number.prototype.toFixed),exports.toExponentialNative=t(Number.prototype.toExponential),exports.toString=function(t){return t.toString()};
-},{}],"VX77":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),t=require("../Data.Ord/index.js"),e=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),r=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),i=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),u=function(t){if(t instanceof e)return n.toPrecisionNative(t.value0);if(t instanceof r)return n.toFixedNative(t.value0);if(t instanceof i)return n.toExponentialNative(t.value0);throw new Error("Failed pattern match at Data.Number.Format (line 59, column 1 - line 59, column 40): "+[t.constructor.name])},o=function(){var n=t.clamp(t.ordInt)(1)(21);return function(t){return e.create(n(t))}}(),a=function(){var n=t.clamp(t.ordInt)(0)(20);return function(t){return r.create(n(t))}}(),c=function(){var n=t.clamp(t.ordInt)(0)(20);return function(t){return i.create(n(t))}}();module.exports={precision:o,fixed:a,exponential:c,toStringWith:u,toString:n.toString};
-},{"./foreign.js":"BG0s","../Data.Ord/index.js":"r4Vb"}],"KkC9":[function(require,module,exports) {
-"use strict";exports.unsafeCreateElementImpl=function(e,t,n){var o=document.createElement(e);return o.id=t,o.className=n,o},exports.initializeCanvasImpl=function(e,t){e.width=t.width,e.height=t.height;var n=e.getContext("2d");!0===n.imageSmoothingEnabled&&(n.imageSmoothingEnabled=!1)},exports.setElementStyleImpl=function(e,t,n){e.style[t]=n},exports.appendElem=function(e){return function(t){return function(){e.appendChild(t)}}},exports.setContainerStyle=function(e){return function(t){return function(){e.style.position="relative",e.style.border="1px solid black",e.style.display="block",e.style.margin="0",e.style.padding="0",e.style.width=t.width-2+"px",e.style.height=t.height+"px"}}},exports.drawCopies=function(e,t,n,o,i){Math.round(t.width),Math.round(t.height);i.forEach(function(i){o(i)&&n.drawImage(e,Math.floor(i.x-t.width/2),Math.floor(i.y-t.height/2))})},exports.setCanvasTranslation=function(e){return function(t){return function(){t.getContext("2d").setTransform(1,0,0,1,e.x,e.y)}}},exports.elementClickImpl=function(e,t){e.addEventListener("mousedown",function(n){var o=e.getBoundingClientRect(),i=n.clientX-o.left+window.scrollX,r=n.clientY-o.top+window.scrollY;t({x:i,y:r})()})},exports.scrollCanvasImpl=function(e,t,n){var o=e.getContext("2d");o.save(),o.globalCompositeOperation="copy",o.drawImage(t,0,0),o.restore();var i=t.getContext("2d");i.save(),i.globalCompositeOperation="copy",i.setTransform(1,0,0,1,0,0),i.drawImage(e,n.x,n.y),i.restore()},exports.zoomCanvasImpl=function(e,t,n){var o=e.getContext("2d");o.save(),o.globalCompositeOperation="copy",o.drawImage(t,0,0),o.restore();var i=t.getContext("2d"),r=t.width,a=t.height,l=n.left*r,s=(n.right-n.left)*r;i.save(),i.globalCompositeOperation="copy",i.setTransform(1,0,0,1,0,0),i.drawImage(e,l,0,s,a,0,0,r,a),i.restore()},exports.canvasDragImpl=function(e){return function(t){return function(){var n=function(e){var n=e.clientX,o=e.clientY,i=e.clientX,r=e.clientY,a=function(e){t({during:{x:i-e.clientX,y:r-e.clientY}})(),i=e.clientX,r=e.clientY};document.addEventListener("mousemove",a),document.addEventListener("mouseup",function(e){document.removeEventListener("mousemove",a),t({total:{x:e.clientX-n,y:e.clientY-o}})()},{once:!0})};return e.addEventListener("mousedown",n),function(){e.removeEventListener("mousedown",n)}}}},exports.canvasWheelCBImpl=function(e){return function(t){return function(){e.addEventListener("wheel",function(n){n.preventDefault();var o=e.getBoundingClientRect(),i=n.clientX-o.left+window.scrollX,r=n.clientY-o.top+window.scrollY;t({x:i,y:r})(Math.sign(n.deltaY))()})}}};
-},{}],"fCig":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Category/index.js"),e=require("../Data.Either/index.js"),u=require("../Data.Eq/index.js"),i=require("../Data.Foldable/index.js"),o=require("../Data.Function/index.js"),f=require("../Data.Functor/index.js"),c=require("../Data.HeytingAlgebra/index.js"),a=require("../Data.Lens.Internal.Forget/index.js"),p=require("../Data.Lens.Internal.Indexed/index.js"),d=require("../Data.List.Types/index.js"),l=require("../Data.Maybe/index.js"),s=require("../Data.Maybe.First/index.js"),y=require("../Data.Maybe.Last/index.js"),w=require("../Data.Monoid/index.js"),v=require("../Data.Monoid.Additive/index.js"),j=require("../Data.Monoid.Conj/index.js"),D=require("../Data.Monoid.Disj/index.js"),q=require("../Data.Monoid.Dual/index.js"),x=require("../Data.Monoid.Endo/index.js"),g=require("../Data.Monoid.Multiplicative/index.js"),O=require("../Data.Newtype/index.js"),m=require("../Data.Ord/index.js"),F=require("../Data.Profunctor/index.js"),h=require("../Data.Profunctor.Choice/index.js"),M=require("../Data.Semigroup/index.js"),A=require("../Data.Tuple/index.js"),E=require("../Data.Unit/index.js"),C=function(n){return function(r){return function(t){var e,u=(e=l.maybe(w.mempty(n))(function(r){return M.append(n.Semigroup0())(O.unwrap(a.newtypeForget)(t)(r.value0))(u(r.value1))}),function(n){return e(r(n))});return u}}},b=function(n){return function(r){return function(t){return function r(t){return function(e){return 0===t?w.mempty(w.monoidFn(n)):M.append(M.semigroupFn(n.Semigroup0()))(e)(r(t-1|0)(e))}}(r)(t)}}},L=function(n){return function(r){return O.unwrap(a.newtypeForget)(n(p.Indexed(A.uncurry(r))))}},J=function(n){return function(r){return function(t){var e=o.flip(O.unwrap(O.newtypeEndo))(t),u=O.unwrap(O.newtypeDual),i=L(n)(function(n){var t=o.flip(r(n));return function(n){return q.Dual(x.Endo(t(n)))}});return function(n){return e(u(i(n)))}}}},N=function(n){return function(r){return function(t){var e=o.flip(O.unwrap(O.newtypeEndo))(t),u=L(n)(function(n){var t=r(n);return function(n){return x.Endo(t(n))}});return function(n){return e(u(n))}}}},S=function(n){return N(n)(function(n){return function(r){return function(t){return new d.Cons(new A.Tuple(n,r),t)}}})(d.Nil.value)},T=function(t){return function(e){return function(u){return N(e)(function(n){return function(e){return function(i){return r.applySecond(t.Apply0())(f.void(t.Apply0().Functor0())(u(n)(e)))(i)}}})(n.pure(t)(E.unit))}}},I=function(n){var r=T(n);return function(n){return o.flip(r(n))}},P=function(n){return function(r){return N(n)(function(n){return function(t){return l.maybe(r(n)(t)?new l.Just(t):l.Nothing.value)(l.Just.create)}})(l.Nothing.value)}},_=function(n){return function(n){return function(r){var t=O.unwrap(O.newtypeDisj),e=L(n)(function(n){var t=r(n);return function(n){return D.Disj(t(n))}});return function(n){return t(e(n))}}}},B=function(n){return function(n){return function(r){var t=O.unwrap(O.newtypeConj),e=L(n)(function(n){var t=r(n);return function(n){return j.Conj(t(n))}});return function(n){return t(e(n))}}}},H=function(n){return function(r){return function(t){return i.foldMap(r)(n)(t)}}},R=O.under(a.newtypeForget)(a.newtypeForget)(a.Forget),U=function(n){return R(n)(t.identity(t.categoryFn))},k=function(n){return function(r){return function(t){var e,u=o.flip(O.unwrap(O.newtypeEndo))(t),i=O.unwrap(O.newtypeDual),f=R(n)((e=o.flip(r),function(n){return q.Dual(x.Endo(e(n)))}));return function(n){return u(i(f(n)))}}}},z=function(n){return function(r){return function(t){var e=o.flip(O.unwrap(O.newtypeEndo))(t),u=R(n)(function(n){return x.Endo(r(n))});return function(n){return e(u(n))}}}},G=function(n){return function(r){return z(r)(function(r){var t=l.maybe(r)(function(r){return function(t){return m.greaterThan(n)(r)(t)?r:t}}(r));return function(n){return l.Just.create(t(n))}})(l.Nothing.value)}},K=function(n){return function(r){return z(r)(function(r){var t=l.maybe(r)(function(r){return function(t){return m.lessThan(n)(r)(t)?r:t}}(r));return function(n){return l.Just.create(t(n))}})(l.Nothing.value)}},Q=function(n){return z(n)(d.Cons.create)(d.Nil.value)},V=function(n){return function(r){return Q(r)(n)}},W=function(t){return function(e){return function(u){return z(e)(function(n){return function(e){return r.applySecond(t.Apply0())(f.void(t.Apply0().Functor0())(u(n)))(e)}})(n.pure(t)(E.unit))}}},X=function(n){return function(r){var t=O.unwrap(O.newtypeDisj),e=R(r)(o.const(c.tt(n)));return function(n){return t(e(n))}}},Y=function(n){return function(r){var t=O.unwrap(O.newtypeConj),e=R(r)(o.const(c.ff(n)));return function(n){return t(e(n))}}},Z=function(n){var r=O.unwrap(y.newtypeLast),t=R(n)(function(n){return y.Last(l.Just.create(n))});return function(n){return r(t(n))}},$=function(n){var r=O.unwrap(O.newtypeAdditive),t=R(n)(o.const(1));return function(n){return r(t(n))}},nn=function(n){var r=O.unwrap(s.newtypeFirst),t=R(n)(function(n){return s.First(l.Just.create(n))});return function(n){return r(t(n))}},rn=function(n){return function(r){return nn(r)(n)}},tn=function(n){return function(n){var r=O.unwrap(O.newtypeMultiplicative),t=R(n)(g.Multiplicative);return function(n){return r(t(n))}}},en=function(t){return function(e){var u=o.flip(O.unwrap(O.newtypeEndo))(n.pure(t)(E.unit)),i=R(e)(function(n){return function(e){return r.applySecond(t.Apply0())(n)(e)}});return function(n){return u(i(n))}}},un=function(n){return function(n){var r=O.unwrap(O.newtypeAdditive),t=R(n)(v.Additive);return function(n){return r(t(n))}}},on=function(n){var r=O.unwrap(s.newtypeFirst),t=R(n)(function(n){return s.First(l.Just.create(n))});return function(n){return r(t(n))}},fn=function(n){return function(r){return z(n)(function(n){return l.maybe(r(n)?new l.Just(n):l.Nothing.value)(l.Just.create)})(l.Nothing.value)}},cn=function(n){return function(r){var u=F.dimap(n.Profunctor0())(function(n){return r(n)?new e.Right(n):new e.Left(n)})(e.either(t.identity(t.categoryFn))(t.identity(t.categoryFn))),i=h.right(n);return function(n){return u(i(n))}}},an=function(n){return function(n){return function(r){var t=O.unwrap(O.newtypeDisj),e=R(n)(function(n){return D.Disj(r(n))});return function(n){return t(e(n))}}}},pn=function(n){return function(r){return function(t){return an(c.heytingAlgebraBoolean)(r)(function(r){return u.eq(n)(r)(t)})}}},dn=function(n){return function(r){return an(n)(r)(t.identity(t.categoryFn))}},ln=function(n){return function(n){return function(r){var t=O.unwrap(O.newtypeConj),e=R(n)(function(n){return j.Conj(r(n))});return function(n){return t(e(n))}}}},sn=function(n){return function(r){return ln(n)(r)(t.identity(t.categoryFn))}},yn=function(n){return function(r){return function(t){return ln(c.heytingAlgebraBoolean)(r)(function(r){return u.notEq(n)(r)(t)})}}};module.exports={previewOn:rn,toListOfOn:V,preview:nn,foldOf:U,foldMapOf:R,foldrOf:z,foldlOf:k,toListOf:Q,firstOf:on,lastOf:Z,maximumOf:G,minimumOf:K,allOf:ln,anyOf:an,andOf:sn,orOf:dn,elemOf:pn,notElemOf:yn,sumOf:un,productOf:tn,lengthOf:$,findOf:fn,sequenceOf_:en,traverseOf_:W,has:X,"hasn't":Y,replicated:b,filtered:cn,folded:H,unfolded:C,ifoldMapOf:L,ifoldrOf:N,ifoldlOf:J,iallOf:B,ianyOf:_,itoListOf:S,itraverseOf_:T};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Lens.Internal.Forget/index.js":"mj9z","../Data.Lens.Internal.Indexed/index.js":"V4/H","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Maybe.First/index.js":"W/l6","../Data.Maybe.Last/index.js":"aQky","../Data.Monoid/index.js":"TiEB","../Data.Monoid.Additive/index.js":"fHyj","../Data.Monoid.Conj/index.js":"U/G5","../Data.Monoid.Disj/index.js":"9bR7","../Data.Monoid.Dual/index.js":"ULyl","../Data.Monoid.Endo/index.js":"2o47","../Data.Monoid.Multiplicative/index.js":"y5cd","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Choice/index.js":"nkqb","../Data.Semigroup/index.js":"EsAJ","../Data.Tuple/index.js":"II/O","../Data.Unit/index.js":"NhVk"}],"KFxX":[function(require,module,exports) {
-"use strict";var e=require("../Data.Bifunctor/index.js"),r=require("../Data.Either/index.js"),t=require("../Data.Functor/index.js"),n=require("../Data.Profunctor/index.js"),u=require("../Data.Profunctor.Choice/index.js"),i=function(){function e(e,r){this.value0=e,this.value1=r}return e.create=function(r){return function(t){return new e(r,t)}},e}(),c=new n.Profunctor(function(t){return function(n){return function(u){return new i(function(e){return n(u.value0(e))},(c=e.lmap(r.bifunctorEither)(n),function(e){return c(u.value1(t(e)))}));var c}}}),o=new t.Functor(function(t){return function(n){return new i(function(e){return t(n.value0(e))},(u=e.lmap(r.bifunctorEither)(t),function(e){return u(n.value1(e))}));var u}}),a=new u.Choice(function(){return c},function(t){return new i(function(e){return r.Left.create(t.value0(e))},r.either((n=e.lmap(r.bifunctorEither)(r.Left.create),function(e){return n(t.value1(e))}))(function(e){return r.Left.create(r.Right.create(e))}));var n},function(t){return new i(function(e){return r.Right.create(t.value0(e))},r.either(function(e){return r.Left.create(r.Left.create(e))})((n=e.lmap(r.bifunctorEither)(r.Right.create),function(e){return n(t.value1(e))})));var n});module.exports={Market:i,functorMarket:o,profunctorMarket:c,choiceMarket:a};
-},{"../Data.Bifunctor/index.js":"e2Wc","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Choice/index.js":"nkqb"}],"h1YV":[function(require,module,exports) {
-"use strict";var n=require("../Data.Either/index.js"),r=require("../Data.Eq/index.js"),e=require("../Data.Foldable/index.js"),t=require("../Data.Function/index.js"),u=require("../Data.Functor/index.js"),o=require("../Data.Newtype/index.js"),i=require("../Data.Ord/index.js"),c=require("../Data.Profunctor/index.js"),a=require("../Data.Profunctor.Choice/index.js"),f=require("../Data.Profunctor.Closed/index.js"),d=require("../Data.Profunctor.Costrong/index.js"),g=require("../Data.Traversable/index.js"),s=function(n){return n},q=new c.Profunctor(function(n){return function(n){return function(r){return n(r)}}}),l=new d.Costrong(function(){return q},function(n){return n.value0},function(n){return n.value1}),w=new f.Closed(function(){return q},function(n){return t.const(n)}),x=new a.Choice(function(){return q},function(r){return new n.Left(r)},function(r){return new n.Right(r)}),j=new o.Newtype(function(n){return n},s),p=new u.Functor(function(n){return function(r){return n(r)}}),D=new e.Foldable(function(n){return function(n){return function(r){return n(r)}}},function(n){return function(r){return function(e){return n(r)(e)}}},function(n){return function(r){return function(e){return n(e)(r)}}}),T=new g.Traversable(function(){return D},function(){return p},function(n){return function(r){return u.map(n.Apply0().Functor0())(s)(r)}},function(n){return function(r){return function(e){return u.map(n.Apply0().Functor0())(s)(r(e))}}}),C=function(n){return new r.Eq(function(e){return function(t){return r.eq(n)(e)(t)}})},F=function(n){return new i.Ord(function(){return C(n.Eq0())},function(r){return function(e){return i.compare(n)(r)(e)}})},b=new r.Eq1(function(n){return r.eq(C(n))}),v=new i.Ord1(function(){return b},function(n){return i.compare(F(n))});module.exports={Tagged:s,newtypeTagged:j,eqTagged:C,eq1Tagged:b,ordTagged:F,ord1Tagged:v,functorTagged:p,taggedProfunctor:q,taggedChoice:x,taggedCostrong:l,taggedClosed:w,foldableTagged:D,traversableTagged:T};
-},{"../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Choice/index.js":"nkqb","../Data.Profunctor.Closed/index.js":"af4y","../Data.Profunctor.Costrong/index.js":"NfU6","../Data.Traversable/index.js":"n7EE"}],"4AcV":[function(require,module,exports) {
-"use strict";var n=require("../Control.Category/index.js"),r=require("../Control.MonadZero/index.js"),e=require("../Data.Either/index.js"),t=require("../Data.Eq/index.js"),u=require("../Data.Function/index.js"),i=require("../Data.HeytingAlgebra/index.js"),o=require("../Data.Lens.Internal.Market/index.js"),a=require("../Data.Lens.Internal.Tagged/index.js"),c=require("../Data.Maybe/index.js"),f=require("../Data.Newtype/index.js"),s=require("../Data.Profunctor/index.js"),d=require("../Data.Profunctor.Choice/index.js"),g=function(r){return function(t){var u=r(new o.Market(n.identity(n.categoryFn),e.Right.create));return t(u.value0)(u.value1)}},y=f.under(a.newtypeTagged)(a.newtypeTagged)(a.Tagged),q=function(r){return function(t){return function(u){return function(i){return s.dimap(u.Profunctor0())(t)(e.either(n.identity(n.categoryFn))(n.identity(n.categoryFn)))(d.right(u)(s.rmap(u.Profunctor0())(r)(i)))}}}},x=function(n){return function(r){return function(t){return q(n)(function(n){return c.maybe(new e.Left(n))(e.Right.create)(r(n))})(t)}}},j=function(n){return function(e){return function(t){return x(u.const(n))((i=r.guard(c.monadZeroMaybe),function(n){return i(e(n))}))(t);var i}}},l=function(n){return function(r){return function(e){return j(r)(function(e){return t.eq(n)(e)(r)})(e)}}},m=function(n){return g(n)(function(n){return function(n){return n}})},D=function(n){return function(r){var t=e.either(u.const(i.ff(n)))(u.const(i.tt(n))),o=m(r);return function(n){return t(o(n))}}},h=function(n){return function(r){var e=i.not(n),t=D(n)(r);return function(n){return e(t(n))}}},p=function(n){return function(r){return g(n)(function(n){return function(e){return function(t){return q(n)(e)(r)(t)}}})}};module.exports={"prism'":x,prism:q,only:l,nearly:j,review:y,is:D,"isn't":h,matching:m,clonePrism:p,withPrism:g};
-},{"../Control.Category/index.js":"IAi2","../Control.MonadZero/index.js":"lD5R","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.HeytingAlgebra/index.js":"paZe","../Data.Lens.Internal.Market/index.js":"KFxX","../Data.Lens.Internal.Tagged/index.js":"h1YV","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Choice/index.js":"nkqb"}],"kg0W":[function(require,module,exports) {
-"use strict";var n=require("../Data.Profunctor/index.js"),u=require("../Data.Profunctor.Strong/index.js"),r=require("../Data.Tuple/index.js"),e=function(){function n(n,u){this.value0=n,this.value1=u}return n.create=function(u){return function(r){return new n(u,r)}},n}(),t=new n.Profunctor(function(n){return function(u){return function(r){return new e(function(u){return r.value0(n(u))},function(e){var t=r.value1(n(e));return function(n){return u(t(n))}})}}}),o=new u.Strong(function(){return t},function(n){return new e(function(u){return n.value0(u.value0)},function(u){return function(e){return new r.Tuple(n.value1(u.value0)(e),u.value1)}})},function(n){return new e(function(u){return n.value0(u.value1)},function(u){return function(e){return new r.Tuple(u.value0,n.value1(u.value1)(e))}})});module.exports={Shop:e,profunctorShop:t,strongShop:o};
-},{"../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Strong/index.js":"w9p6","../Data.Tuple/index.js":"II/O"}],"hi+g":[function(require,module,exports) {
-"use strict";var n=require("../Control.Category/index.js"),e=require("../Data.Lens.Internal.Indexed/index.js"),r=require("../Data.Lens.Internal.Shop/index.js"),t=require("../Data.Newtype/index.js"),u=require("../Data.Profunctor/index.js"),i=require("../Data.Profunctor.Strong/index.js"),o=require("../Data.Tuple/index.js"),c=function(e){return function(t){var u=e(new r.Shop(n.identity(n.categoryFn),function(n){return function(n){return n}}));return t(u.value0)(u.value1)}},f=function(e){return function(t){var u=e(new r.Shop(n.identity(n.categoryFn),function(n){return function(n){return n}}));return t(u.value0)(u.value1)}},a=function(n){return function(e){return function(r){return u.dimap(e.Profunctor0())(n)(function(n){return n.value1(n.value0)})(i.first(e)(r))}}},d=function(n){return function(e){return function(r){return a(function(r){return new o.Tuple(n(r),function(n){return e(r)(n)})})(r)}}},s=function(n){return function(r){return function(o){return u.dimap(r.Profunctor0())(n)(function(n){return n.value1(n.value0)})(i.first(r)(t.un(e.newtypeIndexed)(e.Indexed)(o)))}}},l=function(n){return function(e){return function(r){return s(function(r){return new o.Tuple(n(r),function(n){return e(r)(n)})})(r)}}},x=function(n){return function(e){return c(n)(function(n){return function(r){return function(t){return d(n)(r)(e)(t)}}})}},p=function(n){return function(e){return f(n)(function(n){return function(r){return function(t){return l(n)(r)(e)(t)}}})}};module.exports={lens:d,"lens'":a,withLens:c,cloneLens:x,ilens:l,"ilens'":s,withIndexedLens:f,cloneIndexedLens:p};
-},{"../Control.Category/index.js":"IAi2","../Data.Lens.Internal.Indexed/index.js":"V4/H","../Data.Lens.Internal.Shop/index.js":"kg0W","../Data.Newtype/index.js":"lz8k","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Strong/index.js":"w9p6","../Data.Tuple/index.js":"II/O"}],"nwoH":[function(require,module,exports) {
-"use strict";var e=require("../Data.Function/index.js"),n=require("../Data.Lens.Lens/index.js"),r=require("../Record/index.js"),t=function(t){return function(u){return function(i){return function(o){return function(s){return n.lens(r.get(t)(u)(o))(e.flip(r.set(t)(u)(i)(o)))(s)}}}}};module.exports={prop:t};
-},{"../Data.Function/index.js":"ImXJ","../Data.Lens.Lens/index.js":"hi+g","../Record/index.js":"0gG4"}],"62zx":[function(require,module,exports) {
-"use strict";var r=require("../Data.Functor/index.js"),e=require("../Data.Map.Internal/index.js"),n=function(){var n=r.void(e.functorMap);return function(r){return n(r)}}();module.exports={keys:n};
-},{"../Data.Functor/index.js":"+0AE","../Data.Map.Internal/index.js":"RRDs"}],"10U2":[function(require,module,exports) {
-"use strict";exports.null=null,exports.nullable=function(l,n,t){return null==l?n:t(l)},exports.notNull=function(l){return l};
-},{}],"YQ8o":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),n=require("../Data.Eq/index.js"),r=require("../Data.Function/index.js"),u=require("../Data.Maybe/index.js"),l=require("../Data.Ord/index.js"),t=require("../Data.Show/index.js"),o=u.maybe(e.null)(e.notNull),a=function(n){return e.nullable(n,u.Nothing.value,u.Just.create)},i=function(e){return new t.Show((n=u.maybe("null")(t.show(e)),function(e){return n(a(e))}));var n},q=function(e){return new n.Eq(r.on(n.eq(u.eqMaybe(e)))(a))},c=function(e){return new l.Ord(function(){return q(e.Eq0())},r.on(l.compare(u.ordMaybe(e)))(a))},b=new n.Eq1(function(e){return n.eq(q(e))}),d=new l.Ord1(function(){return b},function(e){return l.compare(c(e))});module.exports={toMaybe:a,toNullable:o,showNullable:i,eqNullable:q,eq1Nullable:b,ordNullable:c,ord1Nullable:d,null:e.null,notNull:e.notNull};
-},{"./foreign.js":"10U2","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Show/index.js":"mFY7"}],"+Eae":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Bind/index.js"),e=require("../Control.Monad.Rec.Class/index.js"),t=require("../Control.Monad.ST.Internal/index.js"),u=require("../Data.Array/index.js"),i=require("../Data.Array.ST/index.js"),o=require("../Data.Eq/index.js"),f=require("../Data.Foldable/index.js"),c=require("../Data.Function/index.js"),a=require("../Data.Functor/index.js"),d=require("../Data.List/index.js"),l=require("../Data.List.Types/index.js"),s=require("../Data.Map.Internal/index.js"),p=require("../Data.Maybe/index.js"),q=require("../Data.Monoid/index.js"),b=require("../Data.Ord/index.js"),m=require("../Data.Ordering/index.js"),x=require("../Data.Semigroup/index.js"),S=require("../Data.Show/index.js"),j=require("../Data.Unit/index.js"),w=function(n){return n},y=function(n){return function(r){return function(e){return s.union(n)(r)(e)}}},D=function(n){return s.keys(n)},M=function(n){var r=d.toUnfoldable(n);return function(n){return r(D(n))}},h=function(n){return s.size(n)},L=function(n){return s.singleton(n)(j.unit)},v=function(n){return new S.Show(function(r){return"(fromFoldable "+S.show(l.showList(n))(D(r))+")"})},T=function(n){return new x.Semigroup(y(n))},E=function(n){return function(r){return function(e){return s.member(n)(r)(e)}}},F=function(n){return s.isEmpty(n)},g=function(n){return function(r){return function(e){return s.insert(n)(r)(j.unit)(e)}}},k=new f.Foldable(function(n){return function(r){var e=f.foldMap(l.foldableList)(n)(r);return function(n){return e(D(n))}}},function(n){return function(r){var e=f.foldl(l.foldableList)(n)(r);return function(n){return e(D(n))}}},function(n){return function(r){var e=f.foldr(l.foldableList)(n)(r);return function(n){return e(D(n))}}}),C=function(n){return a.map(p.functorMaybe)(function(n){return n.key})(s.findMin(n))},A=function(n){return a.map(p.functorMaybe)(function(n){return n.key})(s.findMax(n))},O=function(n){return function(r){return function(e){return s.filterWithKey(n)(function(n){return function(e){return r(n)}})(e)}}},U=function(n){return new o.Eq(function(r){return function(e){return o.eq(s.eqMap(n)(o.eqUnit))(r)(e)}})},z=function(n){return new b.Ord(function(){return U(n.Eq0())},function(r){return function(e){return b.compare(l.ordList(n))(D(r))(D(e))}})},R=new o.Eq1(function(n){return o.eq(U(n))}),I=new b.Ord1(function(){return R},function(n){return b.compare(z(n))}),V=s.empty,B=function(n){return function(r){return f.foldl(n)(function(n){return function(e){return g(r)(e)(n)}})(V)}},G=function(o){return function(c){return function(a){var d,s=(d=u.fromFoldable(l.foldableList),function(n){return d(D(n))}),p=s(a),q=u.length(p),x=s(c),S=u.length(x);return B(f.foldableArray)(o)(r.bind(t.bindST)(r.bind(t.bindST)(i.empty)(function(r){return e.tailRecM2(t.monadRecST)(function(u){return function(f){if(u<S&&f<q){var c=b.compare(o)(x[u])(p[f]);if(c instanceof m.EQ)return function(){return i.push(x[u])(r)(),new e.Loop({a:u+1|0,b:f+1|0})};if(c instanceof m.LT)return n.pure(t.applicativeST)(new e.Loop({a:u+1|0,b:f}));if(c instanceof m.GT)return n.pure(t.applicativeST)(new e.Loop({a:u,b:f+1|0}));throw new Error("Failed pattern match at Data.Set (line 176, column 12 - line 181, column 43): "+[c.constructor.name])}return n.pure(t.applicativeST)(new e.Done(r))}})(0)(0)}))(i.unsafeFreeze)())}}},K=function(n){return function(r){return f.foldl(k)(function(e){return function(t){return g(n)(r(t))(e)}})(V)}},Q=function(n){return function(r){return f.foldr(k)(function(e){return function(t){return p.maybe(t)(function(r){return g(n)(r)(t)})(r(e))}})(V)}},W=function(n){return new q.Monoid(function(){return T(n)},V)},H=function(n){return function(r){return f.foldl(n)(y(r))(V)}},J=function(n){return function(r){return function(e){return s.delete(n)(r)(e)}}},N=function(n){return function(r){return function(e){return f.foldl(l.foldableList)(c.flip(J(n)))(r)(D(e))}}},P=function(n){return function(r){return function(e){return F(N(n)(r)(e))}}},X=function(n){return function(r){return function(e){return P(n)(r)(e)&&o.notEq(U(n.Eq0()))(r)(e)}}},Y=function(n){return s.checkValid(n)};module.exports={fromFoldable:B,toUnfoldable:M,empty:V,isEmpty:F,singleton:L,map:K,checkValid:Y,insert:g,member:E,delete:J,size:h,findMin:C,findMax:A,union:y,unions:H,difference:N,subset:P,properSubset:X,intersection:G,filter:O,mapMaybe:Q,eqSet:U,eq1Set:R,showSet:v,ordSet:z,ord1Set:I,monoidSet:W,semigroupSet:T,foldableSet:k};
-},{"../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.ST.Internal/index.js":"Sedc","../Data.Array/index.js":"4t4C","../Data.Array.ST/index.js":"s8si","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Unit/index.js":"NhVk"}],"NCVa":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),t=require("../Control.Alternative/index.js"),e=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),i=require("../Control.Category/index.js"),o=require("../Control.Monad/index.js"),a=require("../Control.Monad.Rec.Class/index.js"),c=require("../Control.Monad.Trans.Class/index.js"),f=require("../Control.MonadPlus/index.js"),l=require("../Control.MonadZero/index.js"),p=require("../Control.Plus/index.js"),s=require("../Data.Function/index.js"),d=require("../Data.Functor/index.js"),v=require("../Data.Lazy/index.js"),m=require("../Data.Maybe/index.js"),w=require("../Data.Monoid/index.js"),L=require("../Data.Newtype/index.js"),h=require("../Data.Semigroup/index.js"),y=require("../Data.Tuple/index.js"),M=require("../Data.Unfoldable/index.js"),T=require("../Data.Unfoldable1/index.js"),A=require("../Data.Unit/index.js"),F=require("../Effect.Class/index.js"),C=function(){function n(n,t){this.value0=n,this.value1=t}return n.create=function(t){return function(e){return new n(t,e)}},n}(),b=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),x=function(){function n(){}return n.value=new n,n}(),E=function(n){return n},j=function(n){return function(t){return E(e.pure(n)(new b(t)))}},q=function(n){return function(t){return E(d.map(n)(function(n){return b.create(v.defer(s.const(n)))})(t))}},z=function n(t){return function(e){return function(r){return E(d.map(t.Bind1().Apply0().Functor0())(function(r){if(r instanceof m.Just)return new C(r.value0.value1,v.defer(function(u){return n(t)(e)(r.value0.value0)}));if(r instanceof m.Nothing)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 130, column 3 - line 130, column 60): "+[r.constructor.name])})(e(r)))}}},B=function n(t){return function(r){return u.bind(t.Bind1())(r)(function(r){if(r instanceof C)return e.pure(t.Applicative0())(m.Just.create(new y.Tuple(r.value0,v.force(r.value1))));if(r instanceof b)return n(t)(v.force(r.value0));if(r instanceof x)return e.pure(t.Applicative0())(m.Nothing.value);throw new Error("Failed pattern match at Control.Monad.List.Trans (line 195, column 3 - line 195, column 50): "+[r.constructor.name])})}},g=function(n){return function(t){return d.map(n.Bind1().Apply0().Functor0())(d.map(m.functorMaybe)(y.snd))(B(n)(t))}},D=function(n){return function(t){return function(e){return E(d.map(n)(t)(e))}}},J=function n(t){return function(e){return D(t.Apply0().Functor0())(function(r){if(r instanceof C)return e(r.value0)?new C(r.value0,d.map(v.functorLazy)(n(t)(e))(r.value1)):x.value;if(r instanceof b)return b.create(d.map(v.functorLazy)(n(t)(e))(r.value0));if(r instanceof x)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 154, column 3 - line 154, column 68): "+[r.constructor.name])})}},N=function(n){return function(t){return function(e){return function(r){return z(n)(function(e){return d.map(n.Bind1().Apply0().Functor0())(function(n){if(n instanceof C){var r=t(e.value0)(n.value0);return m.Just.create(new y.Tuple(new y.Tuple(r,v.force(n.value1)),e.value0))}if(n instanceof b)return m.Just.create(new y.Tuple(new y.Tuple(e.value0,v.force(n.value0)),e.value0));if(n instanceof x)return m.Nothing.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 248, column 5 - line 248, column 78): "+[n.constructor.name])})(e.value1)})(new y.Tuple(e,r))}}}},R=function(n){return function(t){return function(r){return E(e.pure(n)(new C(t,r)))}}},P=function(n){return function(t){return function(e){return R(n)(t)(v.defer(s.const(e)))}}},U=function(n){return E(e.pure(n)(x.value))},W=function(n){return function(t){return P(n)(t)(U(n))}},k=function n(t){return function(e){return function(r){if(0===e)return U(t);return D(t.Apply0().Functor0())(function(r){if(r instanceof C)return new C(r.value0,d.map(v.functorLazy)(n(t)(e-1|0))(r.value1));if(r instanceof b)return new b(d.map(v.functorLazy)(n(t)(e))(r.value0));if(r instanceof x)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 147, column 3 - line 147, column 47): "+[r.constructor.name])})(r)}}},S=function n(t){return function(r){return function(i){return function(o){return q(t.Bind1().Apply0().Functor0())(u.bind(t.Bind1())(B(t)(i))(function(i){return u.bind(t.Bind1())(B(t)(o))(function(u){return function(u){return function(i){if(i instanceof m.Nothing)return e.pure(t.Applicative0())(U(t.Applicative0()));if(u instanceof m.Nothing)return e.pure(t.Applicative0())(U(t.Applicative0()));if(u instanceof m.Just&&i instanceof m.Just)return d.map(t.Bind1().Apply0().Functor0())(s.flip(R(t.Applicative0()))(v.defer(function(e){return n(t)(r)(u.value0.value1)(i.value0.value1)})))(r(u.value0.value0)(i.value0.value0));throw new Error("Failed pattern match at Control.Monad.List.Trans (line 260, column 3 - line 260, column 25): "+[u.constructor.name,i.constructor.name])}}(i)(u)})}))}}}},Z=function(n){return function(t){return S(n)(function(r){return function(u){return e.pure(n.Applicative0())(t(r)(u))}})}},Y=new L.Newtype(function(n){return n},E),G=function n(t){return function(e){return D(t)(function(r){if(r instanceof C)return m.fromMaybe(b.create)(d.map(m.functorMaybe)(C.create)(e(r.value0)))(d.map(v.functorLazy)(n(t)(e))(r.value1));if(r instanceof b)return b.create(d.map(v.functorLazy)(n(t)(e))(r.value0));if(r instanceof x)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 183, column 3 - line 183, column 72): "+[r.constructor.name])})}},H=function(n){return function(t){return function(r){return z(n)(function(r){return e.pure(n.Applicative0())(new m.Just(new y.Tuple(t(r),r)))})(r)}}},I=function(n){return H(n)(i.identity(i.categoryFn))},K=function(n){return function(t){return d.map(n.Bind1().Apply0().Functor0())(d.map(m.functorMaybe)(y.fst))(B(n)(t))}},O=function n(t){return new d.Functor(function(e){return D(t)(function(r){if(r instanceof C)return new C(e(r.value0),d.map(v.functorLazy)(d.map(n(t))(e))(r.value1));if(r instanceof b)return new b(d.map(v.functorLazy)(d.map(n(t))(e))(r.value0));if(r instanceof x)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 280, column 5 - line 280, column 48): "+[r.constructor.name])})})},Q=function(n){return function(t){return E(d.map(n.Apply0().Functor0())(s.flip(C.create)(v.defer(function(t){return U(n)})))(t))}},V=new c.MonadTrans(function(n){return Q(n.Applicative0())}),X=function(n){return function(t){return a.tailRecM2(n)(function(r){return function(i){return u.bind(n.Monad0().Bind1())(B(n.Monad0())(i))(function(i){if(i instanceof m.Nothing)return e.pure(n.Monad0().Applicative0())(new a.Done(r));if(i instanceof m.Just)return u.bind(n.Monad0().Bind1())(t(r)(i.value0.value0))(function(t){return e.pure(n.Monad0().Applicative0())(new a.Loop({a:t,b:i.value0.value1}))});throw new Error("Failed pattern match at Control.Monad.List.Trans (line 221, column 5 - line 221, column 45): "+[i.constructor.name])})}})}},$=function(n){return X(n)(function(t){return function(t){return e.pure(n.Monad0().Applicative0())(A.unit)}})(A.unit)},_=function(n){return function(t){return a.tailRecM2(n)(function(r){return function(i){return u.bind(n.Monad0().Bind1())(B(n.Monad0())(i))(function(u){if(u instanceof m.Nothing)return e.pure(n.Monad0().Applicative0())(new a.Done(r));if(u instanceof m.Just)return e.pure(n.Monad0().Applicative0())(new a.Loop({a:t(r)(u.value0.value0),b:u.value0.value1}));throw new Error("Failed pattern match at Control.Monad.List.Trans (line 239, column 7 - line 239, column 47): "+[u.constructor.name])})}})}},nn=function(n){return function(t){return function r(i){return function(o){return u.bind(n.Bind1())(B(n)(o))(function(o){if(o instanceof m.Nothing)return e.pure(n.Applicative0())(i);if(o instanceof m.Just)return u.bind(n.Bind1())(t(i)(o.value0.value0))(s.flip(r)(o.value0.value1));throw new Error("Failed pattern match at Control.Monad.List.Trans (line 212, column 5 - line 212, column 35): "+[o.constructor.name])})}}}},tn=function(n){return nn(n)(function(t){return function(t){return e.pure(n.Applicative0())(A.unit)}})(A.unit)},en=function(n){return function(t){return function r(i){return function(o){return u.bind(n.Bind1())(B(n)(o))(function(u){if(u instanceof m.Nothing)return e.pure(n.Applicative0())(i);if(u instanceof m.Just)return r(t(i)(u.value0.value0))(u.value0.value1);throw new Error("Failed pattern match at Control.Monad.List.Trans (line 229, column 5 - line 229, column 35): "+[u.constructor.name])})}}}},rn=function n(t){return function(e){return D(t)(function(r){if(r instanceof C){var u=d.map(v.functorLazy)(n(t)(e))(r.value1);return e(r.value0)?new C(r.value0,u):new b(u)}if(r instanceof b)return u=d.map(v.functorLazy)(n(t)(e))(r.value0),new b(u);if(r instanceof x)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 176, column 3 - line 176, column 80): "+[r.constructor.name])})}},un=function n(t){return function(e){return D(t.Apply0().Functor0())(function(r){if(r instanceof C)return e(r.value0)?new b(d.map(v.functorLazy)(n(t)(e))(r.value1)):new C(r.value0,r.value1);if(r instanceof b)return b.create(d.map(v.functorLazy)(n(t)(e))(r.value0));if(r instanceof x)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 169, column 3 - line 169, column 70): "+[r.constructor.name])})}},on=function n(t){return function(e){return function(r){if(0===e)return r;return D(t.Apply0().Functor0())(function(r){if(r instanceof C)return new b(d.map(v.functorLazy)(n(t)(e-1|0))(r.value1));if(r instanceof b)return new b(d.map(v.functorLazy)(n(t)(e))(r.value0));if(r instanceof x)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 162, column 3 - line 162, column 44): "+[r.constructor.name])})(r)}}},an=function(n){return function(t){return function(r){return E(e.pure(n)(new C(v.force(t),r)))}}},cn=function(n){return new T.Unfoldable1(function(t){return function(r){return function r(u){if(u.value1 instanceof m.Nothing)return W(n.Applicative0())(u.value0);if(u.value1 instanceof m.Just)return an(n.Applicative0())(e.pure(v.applicativeLazy)(u.value0))(v.defer(function(n){return r(t(u.value1.value0))}));throw new Error("Failed pattern match at Control.Monad.List.Trans (line 294, column 12 - line 296, column 67): "+[u.constructor.name])}(t(r))}})},fn=function(n){return new M.Unfoldable(function(){return cn(n)},function(t){return function(r){return function r(u){if(u instanceof m.Nothing)return U(n.Applicative0());if(u instanceof m.Just)return an(n.Applicative0())(e.pure(v.applicativeLazy)(u.value0.value0))(v.defer(function(n){return r(t(u.value0.value1))}));throw new Error("Failed pattern match at Control.Monad.List.Trans (line 287, column 12 - line 289, column 67): "+[u.constructor.name])}(t(r))}})},ln=function(n){return new h.Semigroup(pn(n))},pn=function(n){return function(t){return function(e){return D(n.Apply0().Functor0())(function(t){if(t instanceof C)return new C(t.value0,d.map(v.functorLazy)(function(t){return h.append(ln(n))(t)(e)})(t.value1));if(t instanceof b)return new b(d.map(v.functorLazy)(function(t){return h.append(ln(n))(t)(e)})(t.value0));if(t instanceof x)return new b(v.defer(s.const(e)));throw new Error("Failed pattern match at Control.Monad.List.Trans (line 106, column 3 - line 106, column 43): "+[t.constructor.name])})(t)}}},sn=function(n){return new w.Monoid(function(){return ln(n)},U(n))},dn=function(n){return G(n)(i.identity(i.categoryFn))},vn=function(n){return new o.Monad(function(){return Ln(n)},function(){return mn(n)})},mn=function n(t){return new u.Bind(function(){return wn(t)},function(e){return function(r){return D(t.Bind1().Apply0().Functor0())(function(e){if(e instanceof C)return new b(d.map(v.functorLazy)(function(i){return h.append(ln(t.Applicative0()))(r(e.value0))(u.bind(n(t))(i)(r))})(e.value1));if(e instanceof b)return new b(d.map(v.functorLazy)(function(e){return u.bind(n(t))(e)(r)})(e.value0));if(e instanceof x)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 306, column 5 - line 308, column 31): "+[e.constructor.name])})(e)}})},wn=function(n){return new r.Apply(function(){return O(n.Bind1().Apply0().Functor0())},o.ap(vn(n)))},Ln=function(n){return new e.Applicative(function(){return wn(n)},W(n.Applicative0()))},hn=function(n){return new F.MonadEffect(function(){return vn(n.Monad0())},(t=c.lift(V)(n.Monad0()),e=F.liftEffect(n),function(n){return t(e(n))}));var t,e},yn=function(t){return new n.Alt(function(){return O(t.Apply0().Functor0())},pn(t))},Mn=function(n){return new p.Plus(function(){return yn(n.Applicative0())},U(n.Applicative0()))},Tn=function(n){return new t.Alternative(function(){return Ln(n)},function(){return Mn(n)})},An=function(n){return new l.MonadZero(function(){return Tn(n)},function(){return vn(n)})},Fn=function(n){return new f.MonadPlus(function(){return An(n)})};module.exports={ListT:E,Yield:C,Skip:b,Done:x,catMaybes:dn,cons:an,drop:on,dropWhile:un,filter:rn,foldl:en,foldlRec:_,"foldl'":nn,"foldlRec'":X,fromEffect:Q,head:K,iterate:H,mapMaybe:G,nil:U,prepend:P,"prepend'":R,repeat:I,runListT:tn,runListTRec:$,scanl:N,singleton:W,tail:g,take:k,takeWhile:J,uncons:B,unfold:z,wrapEffect:q,wrapLazy:j,zipWith:Z,"zipWith'":S,newtypeListT:Y,semigroupListT:ln,monoidListT:sn,functorListT:O,unfoldableListT:fn,unfoldable1ListT:cn,applyListT:wn,applicativeListT:Ln,bindListT:mn,monadListT:vn,monadTransListT:V,altListT:yn,plusListT:Mn,alternativeListT:Tn,monadZeroListT:An,monadPlusListT:Fn,monadEffectListT:hn};
-},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad/index.js":"U/Ix","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.Trans.Class/index.js":"5tIR","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Lazy/index.js":"aRUE","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unfoldable1/index.js":"S0Nl","../Data.Unit/index.js":"NhVk","../Effect.Class/index.js":"dWtH"}],"8Fyn":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),r=require("../Control.Alternative/index.js"),u=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),i=require("../Control.Lazy/index.js"),o=require("../Control.Monad/index.js"),c=require("../Control.Monad.Error.Class/index.js"),a=require("../Control.Monad.Reader.Class/index.js"),f=require("../Control.Monad.Rec.Class/index.js"),l=require("../Control.Monad.State.Class/index.js"),d=require("../Control.Monad.Trans.Class/index.js"),p=require("../Control.Monad.Writer.Class/index.js"),v=require("../Control.Plus/index.js"),s=require("../Data.Functor/index.js"),w=require("../Data.Monoid/index.js"),T=require("../Data.Newtype/index.js"),m=require("../Data.Semigroup/index.js"),R=require("../Data.Tuple/index.js"),S=require("../Data.Unit/index.js"),W=require("../Effect.Class/index.js"),M=function(){function n(n,r,u){this.value0=n,this.value1=r,this.value2=u}return n.create=function(r){return function(u){return function(e){return new n(r,u,e)}}},n}(),A=function(n){return n},x=function(n){return function(r){return function(u){return function(e){return R.uncurry(r)(n(u)(e))}}}},C=function(n){return n},j=new T.Newtype(function(n){return n},A),q=function(n){return new d.MonadTrans(function(r){return function(e){return function(i){return function(i){return t.bind(r.Bind1())(e)(function(e){return u.pure(r.Applicative0())(new M(i,e,w.mempty(n)))})}}}})},y=function(n){return function(r){return function(u){return function(e){return n(r(u)(e))}}}},h=new i.Lazy(function(n){return function(r){return function(u){return n(S.unit)(r)(u)}}}),B=function(n){return new s.Functor(function(r){return function(u){return function(e){return function(t){return s.map(n)(function(n){return new M(n.value0,r(n.value1),n.value2)})(u(e)(t))}}}})},E=function(n){return function(r){return function(e){return function(i){return t.bind(n.Bind1())(r(e)(i))(function(r){return u.pure(n.Applicative0())(new R.Tuple(r.value0,r.value2))})}}}},b=function(n){return function(r){return function(e){return function(i){return t.bind(n.Bind1())(r(e)(i))(function(r){return u.pure(n.Applicative0())(new R.Tuple(r.value1,r.value2))})}}}},F=function(n){return function(r){return new e.Apply(function(){return B(n.Apply0().Functor0())},function(u){return function(e){return function(i){return function(o){return t.bind(n)(u(i)(o))(function(u){return s.mapFlipped(n.Apply0().Functor0())(e(i)(u.value0))(function(n){return new M(n.value0,u.value1(n.value1),m.append(r.Semigroup0())(u.value2)(n.value2))})})}}}})}},D=function(n){return function(r){return new t.Bind(function(){return F(n)(r)},function(u){return function(e){return function(i){return function(o){return t.bind(n)(u(i)(o))(function(u){var t=e(u.value1);return s.mapFlipped(n.Apply0().Functor0())(t(i)(u.value0))(function(n){return new M(n.value0,n.value1,m.append(r.Semigroup0())(u.value2)(n.value2))})})}}}})}},g=function(n){return function(r){return new u.Applicative(function(){return F(n.Bind1())(r)},function(e){return function(t){return function(t){return u.pure(n.Applicative0())(new M(t,e,w.mempty(r)))}}})}},L=function(n){return function(r){return new o.Monad(function(){return g(n)(r)},function(){return D(n.Bind1())(r)})}},z=function(n){return function(r){return new a.MonadAsk(function(){return L(n)(r)},function(e){return function(t){return u.pure(n.Applicative0())(new M(t,e,w.mempty(r)))}})}},P=function(n){return function(r){return new a.MonadReader(function(){return z(n)(r)},function(n){return function(r){return function(u){return function(e){return r(n(u))(e)}}}})}},k=function(n){return function(r){return new W.MonadEffect(function(){return L(r.Monad0())(n)},(u=d.lift(q(n))(r.Monad0()),e=W.liftEffect(r),function(n){return u(e(n))}));var u,e}},N=function(n){return function(r){return new f.MonadRec(function(){return L(n.Monad0())(r)},function(e){return function(i){return function(o){return function(c){return f.tailRecM(n)(function(i){return function(o){var c=e(o.value1);return t.bind(n.Monad0().Bind1())(c(i)(o.value0))(function(e){return u.pure(n.Monad0().Applicative0())(function(){if(e.value1 instanceof f.Loop)return new f.Loop(new M(e.value0,e.value1.value0,m.append(r.Semigroup0())(o.value2)(e.value2)));if(e.value1 instanceof f.Done)return new f.Done(new M(e.value0,e.value1.value0,m.append(r.Semigroup0())(o.value2)(e.value2)));throw new Error("Failed pattern match at Control.Monad.RWS.Trans (line 127, column 16 - line 129, column 68): "+[e.value1.constructor.name])}())})}}(o))(new M(c,i,w.mempty(r)))}}}})}},U=function(n){return function(r){return new l.MonadState(function(){return L(n)(r)},function(e){return function(t){return function(t){var i=e(t);return u.pure(n.Applicative0())(new M(i.value1,i.value0,w.mempty(r)))}}})}},G=function(n){return function(r){return new p.MonadTell(function(){return L(n)(r)},function(r){return function(e){return function(e){return u.pure(n.Applicative0())(new M(e,S.unit,r))}}})}},H=function(n){return function(r){return new p.MonadWriter(function(){return G(n)(r)},function(r){return function(e){return function(i){return t.bind(n.Bind1())(r(e)(i))(function(r){return u.pure(n.Applicative0())(new M(r.value0,new R.Tuple(r.value1,r.value2),r.value2))})}}},function(r){return function(e){return function(i){return t.bind(n.Bind1())(r(e)(i))(function(r){return u.pure(n.Applicative0())(new M(r.value0,r.value1.value0,r.value1.value1(r.value2)))})}}})}},I=function(n){return function(r){return new c.MonadThrow(function(){return L(n.Monad0())(r)},function(u){return d.lift(q(r))(n.Monad0())(c.throwError(n)(u))})}},J=function(n){return function(r){return new c.MonadError(function(){return I(n.MonadThrow0())(r)},function(r){return function(u){return A(function(e){return function(t){return c.catchError(n)(r(e)(t))(function(n){return u(n)(e)(t)})}})}})}},K=function(r){return new n.Alt(function(){return B(r.Functor0())},function(u){return function(e){return A(function(t){return function(i){return n.alt(r)(u(t)(i))(e(t)(i))}})}})},O=function(n){return new v.Plus(function(){return K(n.Alt0())},function(r){return function(r){return v.empty(n)}})},Q=function(n){return function(u){return function(e){return new r.Alternative(function(){return g(e)(n)},function(){return O(u.Plus1())})}}};module.exports={RWSResult:M,RWST:A,runRWST:C,evalRWST:b,execRWST:E,mapRWST:y,withRWST:x,newtypeRWST:j,functorRWST:B,applyRWST:F,altRWST:K,alternativeRWST:Q,bindRWST:D,applicativeRWST:g,monadRWST:L,monadTransRWST:q,lazyRWST:h,monadEffectRWS:k,monadAskRWST:z,monadReaderRWST:P,monadStateRWST:U,monadTellRWST:G,monadWriterRWST:H,monadThrowRWST:I,monadErrorRWST:J,monadRecRWST:N,plusRWST:O};
-},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Lazy/index.js":"y9cE","../Control.Monad/index.js":"U/Ix","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Reader.Class/index.js":"c2ZJ","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.Trans.Class/index.js":"5tIR","../Control.Monad.Writer.Class/index.js":"gxgA","../Control.Plus/index.js":"oMBg","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Tuple/index.js":"II/O","../Data.Unit/index.js":"NhVk","../Effect.Class/index.js":"dWtH"}],"I4H+":[function(require,module,exports) {
-"use strict";var n=require("../Control.Category/index.js"),t=require("../Control.Monad.Cont.Trans/index.js"),r=require("../Control.Monad.Except.Trans/index.js"),e=require("../Control.Monad.List.Trans/index.js"),f=require("../Control.Monad.Maybe.Trans/index.js"),o=require("../Control.Monad.RWS.Trans/index.js"),a=require("../Control.Monad.Reader.Trans/index.js"),d=require("../Control.Monad.State.Trans/index.js"),i=require("../Control.Monad.Trans.Class/index.js"),u=require("../Control.Monad.Writer.Trans/index.js"),c=require("../Effect.Aff/index.js"),s=function(n,t){this.MonadEffect0=n,this.liftAff=t},M=new s(function(){return c.monadEffectAff},n.identity(n.categoryFn)),E=function(n){return n.liftAff},T=function(n){return new s(function(){return t.monadEffectContT(n.MonadEffect0())},(r=i.lift(t.monadTransContT)(n.MonadEffect0().Monad0()),e=E(n),function(n){return r(e(n))}));var r,e},m=function(n){return new s(function(){return r.monadEffectExceptT(n.MonadEffect0())},(t=i.lift(r.monadTransExceptT)(n.MonadEffect0().Monad0()),e=E(n),function(n){return t(e(n))}));var t,e},l=function(n){return new s(function(){return e.monadEffectListT(n.MonadEffect0())},(t=i.lift(e.monadTransListT)(n.MonadEffect0().Monad0()),r=E(n),function(n){return t(r(n))}));var t,r},x=function(n){return new s(function(){return f.monadEffectMaybe(n.MonadEffect0())},(t=i.lift(f.monadTransMaybeT)(n.MonadEffect0().Monad0()),r=E(n),function(n){return t(r(n))}));var t,r},A=function(n){return function(t){return new s(function(){return o.monadEffectRWS(t)(n.MonadEffect0())},(r=i.lift(o.monadTransRWST(t))(n.MonadEffect0().Monad0()),e=E(n),function(n){return r(e(n))}));var r,e}},C=function(n){return new s(function(){return a.monadEffectReader(n.MonadEffect0())},(t=i.lift(a.monadTransReaderT)(n.MonadEffect0().Monad0()),r=E(n),function(n){return t(r(n))}));var t,r},j=function(n){return new s(function(){return d.monadEffectState(n.MonadEffect0())},(t=i.lift(d.monadTransStateT)(n.MonadEffect0().Monad0()),r=E(n),function(n){return t(r(n))}));var t,r},q=function(n){return function(t){return new s(function(){return u.monadEffectWriter(t)(n.MonadEffect0())},(r=i.lift(u.monadTransWriterT(t))(n.MonadEffect0().Monad0()),e=E(n),function(n){return r(e(n))}));var r,e}};module.exports={liftAff:E,MonadAff:s,monadAffAff:M,monadAffContT:T,monadAffExceptT:m,monadAffListT:l,monadAffMaybe:x,monadAffReader:C,monadAffRWS:A,monadAffState:j,monadAffWriter:q};
-},{"../Control.Category/index.js":"IAi2","../Control.Monad.Cont.Trans/index.js":"XW2d","../Control.Monad.Except.Trans/index.js":"gr8B","../Control.Monad.List.Trans/index.js":"NCVa","../Control.Monad.Maybe.Trans/index.js":"UUIS","../Control.Monad.RWS.Trans/index.js":"8Fyn","../Control.Monad.Reader.Trans/index.js":"uvht","../Control.Monad.State.Trans/index.js":"34Kp","../Control.Monad.Trans.Class/index.js":"5tIR","../Control.Monad.Writer.Trans/index.js":"VAds","../Effect.Aff/index.js":"I7lu"}],"ViyF":[function(require,module,exports) {
-"use strict";exports.mkEffectFn1=function(n){return function(t){return n(t)()}},exports.mkEffectFn2=function(n){return function(t,r){return n(t)(r)()}},exports.mkEffectFn3=function(n){return function(t,r,u){return n(t)(r)(u)()}},exports.mkEffectFn4=function(n){return function(t,r,u,e){return n(t)(r)(u)(e)()}},exports.mkEffectFn5=function(n){return function(t,r,u,e,f){return n(t)(r)(u)(e)(f)()}},exports.mkEffectFn6=function(n){return function(t,r,u,e,f,c){return n(t)(r)(u)(e)(f)(c)()}},exports.mkEffectFn7=function(n){return function(t,r,u,e,f,c,o){return n(t)(r)(u)(e)(f)(c)(o)()}},exports.mkEffectFn8=function(n){return function(t,r,u,e,f,c,o,i){return n(t)(r)(u)(e)(f)(c)(o)(i)()}},exports.mkEffectFn9=function(n){return function(t,r,u,e,f,c,o,i,s){return n(t)(r)(u)(e)(f)(c)(o)(i)(s)()}},exports.mkEffectFn10=function(n){return function(t,r,u,e,f,c,o,i,s,p){return n(t)(r)(u)(e)(f)(c)(o)(i)(s)(p)()}},exports.runEffectFn1=function(n){return function(t){return function(){return n(t)}}},exports.runEffectFn2=function(n){return function(t){return function(r){return function(){return n(t,r)}}}},exports.runEffectFn3=function(n){return function(t){return function(r){return function(u){return function(){return n(t,r,u)}}}}},exports.runEffectFn4=function(n){return function(t){return function(r){return function(u){return function(e){return function(){return n(t,r,u,e)}}}}}},exports.runEffectFn5=function(n){return function(t){return function(r){return function(u){return function(e){return function(f){return function(){return n(t,r,u,e,f)}}}}}}},exports.runEffectFn6=function(n){return function(t){return function(r){return function(u){return function(e){return function(f){return function(c){return function(){return n(t,r,u,e,f,c)}}}}}}}},exports.runEffectFn7=function(n){return function(t){return function(r){return function(u){return function(e){return function(f){return function(c){return function(o){return function(){return n(t,r,u,e,f,c,o)}}}}}}}}},exports.runEffectFn8=function(n){return function(t){return function(r){return function(u){return function(e){return function(f){return function(c){return function(o){return function(i){return function(){return n(t,r,u,e,f,c,o,i)}}}}}}}}}},exports.runEffectFn9=function(n){return function(t){return function(r){return function(u){return function(e){return function(f){return function(c){return function(o){return function(i){return function(s){return function(){return n(t,r,u,e,f,c,o,i,s)}}}}}}}}}}},exports.runEffectFn10=function(n){return function(t){return function(r){return function(u){return function(e){return function(f){return function(c){return function(o){return function(i){return function(s){return function(p){return function(){return n(t,r,u,e,f,c,o,i,s,p)}}}}}}}}}}}};
-},{}],"qn3Z":[function(require,module,exports) {
-"use strict";var f=require("./foreign.js");module.exports={mkEffectFn1:f.mkEffectFn1,mkEffectFn2:f.mkEffectFn2,mkEffectFn3:f.mkEffectFn3,mkEffectFn4:f.mkEffectFn4,mkEffectFn5:f.mkEffectFn5,mkEffectFn6:f.mkEffectFn6,mkEffectFn7:f.mkEffectFn7,mkEffectFn8:f.mkEffectFn8,mkEffectFn9:f.mkEffectFn9,mkEffectFn10:f.mkEffectFn10,runEffectFn1:f.runEffectFn1,runEffectFn2:f.runEffectFn2,runEffectFn3:f.runEffectFn3,runEffectFn4:f.runEffectFn4,runEffectFn5:f.runEffectFn5,runEffectFn6:f.runEffectFn6,runEffectFn7:f.runEffectFn7,runEffectFn8:f.runEffectFn8,runEffectFn9:f.runEffectFn9,runEffectFn10:f.runEffectFn10};
-},{"./foreign.js":"ViyF"}],"61ee":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Bind/index.js"),e=require("../Data.Symbol/index.js"),t=require("../Data.Unit/index.js"),i=require("../Effect.Aff/index.js"),u=require("../Effect.Aff.AVar/index.js"),f=require("../Record/index.js"),c=require("../Type.Data.RowList/index.js"),o=require("../Type.Equality/index.js"),a=function(n){this.compile=n},d=function(n){return n.compile},s=function(n){return function(n){return function(r){return d(n)(c.RLProxy.value)(r)}}},l=function(r){return new a(function(e){return function(e){return n.pure(i.applicativeAff)({run:function(r){return n.pure(i.applicativeAff)(t.unit)},last:o.from(r)({})})}})},p=function(t){return function(o){return function(o){return function(s){return function(l){return function(p){return new a(function(a){return function(a){return r.bind(i.bindAff)(d(p)(c.RLProxy.value)(a))(function(c){return r.bind(i.bindAff)(u.empty)(function(d){var p=f.insert(t)(s)(l)(e.SProxy.value)(u.read(d))(c.last);return n.pure(i.applicativeAff)({last:p,run:function(n){return r.discard(r.discardUnit)(i.bindAff)(c.run(n))(function(){var c=f.get(t)(o)(e.SProxy.value)(a(n));return r.bind(i.bindAff)(u.tryTake(d))(function(n){return u.put(c)(d)})})}})})})}})}}}}}};module.exports={compile:d,CacherAff:a,new:s,cacherAffCons:p,cacherAffNil:l};
-},{"../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Data.Symbol/index.js":"4oJQ","../Data.Unit/index.js":"NhVk","../Effect.Aff/index.js":"I7lu","../Effect.Aff.AVar/index.js":"hACG","../Record/index.js":"0gG4","../Type.Data.RowList/index.js":"XaXP","../Type.Equality/index.js":"Uq/R"}],"1Q0x":[function(require,module,exports) {
-"use strict";exports.setContextTranslation=function(t){return function(n){return function(){n.setTransform(1,0,0,1,t.x,t.y)}}};
-},{}],"RCTS":[function(require,module,exports) {
-"use strict";exports.canvasElementToImageSource=function(n){return n},exports.tryLoadImageImpl=function(n){return function(t){return function(r){return function(){var e=new Image;e.src=n,e.addEventListener("load",function(){r(e)()},!1),e.addEventListener("error",function(n){t()},!1)}}}},exports.getCanvasElementByIdImpl=function(n,t,r){return function(){var e=document.getElementById(n);return e&&e instanceof HTMLCanvasElement?t(e):r}},exports.getContext2D=function(n){return function(){return n.getContext("2d")}},exports.getCanvasWidth=function(n){return function(){return n.width}},exports.getCanvasHeight=function(n){return function(){return n.height}},exports.setCanvasWidth=function(n){return function(t){return function(){n.width=t}}},exports.setCanvasHeight=function(n){return function(t){return function(){n.height=t}}},exports.canvasToDataURL=function(n){return function(){return n.toDataURL()}},exports.setLineWidth=function(n){return function(t){return function(){n.lineWidth=t}}},exports.setLineDash=function(n){return function(t){return function(){n.setLineDash(t)}}},exports.setFillStyle=function(n){return function(t){return function(){n.fillStyle=t}}},exports.setStrokeStyle=function(n){return function(t){return function(){n.strokeStyle=t}}},exports.setShadowColor=function(n){return function(t){return function(){n.shadowColor=t}}},exports.setShadowBlur=function(n){return function(t){return function(){n.shadowBlur=t}}},exports.setShadowOffsetX=function(n){return function(t){return function(){n.shadowOffsetX=t}}},exports.setShadowOffsetY=function(n){return function(t){return function(){n.shadowOffsetY=t}}},exports.setMiterLimit=function(n){return function(t){return function(){n.miterLimit=t}}},exports.setLineCapImpl=function(n){return function(t){return function(){n.lineCap=t}}},exports.setLineJoinImpl=function(n){return function(t){return function(){n.lineJoin=t}}},exports.setGlobalCompositeOperationImpl=function(n){return function(t){return function(){n.globalCompositeOperation=t}}},exports.setGlobalAlpha=function(n){return function(t){return function(){n.globalAlpha=t}}},exports.beginPath=function(n){return function(){n.beginPath()}},exports.stroke=function(n){return function(){n.stroke()}},exports.fill=function(n){return function(){n.fill()}},exports.clip=function(n){return function(){n.clip()}},exports.lineTo=function(n){return function(t){return function(r){return function(){n.lineTo(t,r)}}}},exports.moveTo=function(n){return function(t){return function(r){return function(){n.moveTo(t,r)}}}},exports.closePath=function(n){return function(){n.closePath()}},exports.arc=function(n){return function(t){return function(){n.arc(t.x,t.y,t.radius,t.start,t.end)}}},exports.rect=function(n){return function(t){return function(){n.rect(t.x,t.y,t.width,t.height)}}},exports.fillRect=function(n){return function(t){return function(){n.fillRect(t.x,t.y,t.width,t.height)}}},exports.strokeRect=function(n){return function(t){return function(){n.strokeRect(t.x,t.y,t.width,t.height)}}},exports.clearRect=function(n){return function(t){return function(){n.clearRect(t.x,t.y,t.width,t.height)}}},exports.scale=function(n){return function(t){return function(){n.scale(t.scaleX,t.scaleY)}}},exports.rotate=function(n){return function(t){return function(){n.rotate(t)}}},exports.translate=function(n){return function(t){return function(){n.translate(t.translateX,t.translateY)}}},exports.transform=function(n){return function(t){return function(){n.transform(t.m11,t.m12,t.m21,t.m22,t.m31,t.m32)}}},exports.setTransform=function(n){return function(t){return function(){n.setTransform(t.m11,t.m12,t.m21,t.m22,t.m31,t.m32)}}},exports.textAlignImpl=function(n){return function(){return n.textAlign}},exports.setTextAlignImpl=function(n){return function(t){return function(){n.textAlign=t}}},exports.font=function(n){return function(){return n.font}},exports.setFont=function(n){return function(t){return function(){n.font=t}}},exports.fillText=function(n){return function(t){return function(r){return function(e){return function(){n.fillText(t,r,e)}}}}},exports.strokeText=function(n){return function(t){return function(r){return function(e){return function(){n.strokeText(t,r,e)}}}}},exports.measureText=function(n){return function(t){return function(){return n.measureText(t)}}},exports.save=function(n){return function(){n.save()}},exports.restore=function(n){return function(){n.restore()}},exports.imageDataWidth=function(n){return n.width},exports.imageDataHeight=function(n){return n.height},exports.imageDataBuffer=function(n){return n.data},exports.getImageData=function(n){return function(t){return function(r){return function(e){return function(u){return function(){return n.getImageData(t,r,e,u)}}}}}},exports.putImageDataFull=function(n){return function(t){return function(r){return function(e){return function(u){return function(o){return function(i){return function(c){return function(){n.putImageData(t,r,e,u,o,i,c)}}}}}}}}},exports.putImageData=function(n){return function(t){return function(r){return function(e){return function(){n.putImageData(t,r,e)}}}}},exports.createImageData=function(n){return function(t){return function(r){return function(){return n.createImageData(t,r)}}}},exports.createImageDataCopy=function(n){return function(t){return function(){return n.createImageData(t)}}},exports.drawImage=function(n){return function(t){return function(r){return function(e){return function(){n.drawImage(t,r,e)}}}}},exports.drawImageScale=function(n){return function(t){return function(r){return function(e){return function(u){return function(o){return function(){n.drawImage(t,r,e,u,o)}}}}}}},exports.drawImageFull=function(n){return function(t){return function(r){return function(e){return function(u){return function(o){return function(i){return function(c){return function(f){return function(a){return function(){n.drawImage(t,r,e,u,o,i,c,f,a)}}}}}}}}}}},exports.createPatternImpl=function(n){return function(t){return function(r){return function(){return n.createPattern(t,r)}}}},exports.setPatternFillStyle=function(n){return function(t){return function(){n.fillStyle=t}}},exports.createLinearGradient=function(n){return function(t){return function(){return n.createLinearGradient(t.x0,t.y0,t.x1,t.y1)}}},exports.createRadialGradient=function(n){return function(t){return function(){return n.createRadialGradient(t.x0,t.y0,t.r0,t.x1,t.y1,t.r1)}}},exports.addColorStop=function(n){return function(t){return function(r){return function(){n.addColorStop(t,r)}}}},exports.setGradientFillStyle=function(n){return function(t){return function(){n.fillStyle=t}}},exports.quadraticCurveTo=function(n){return function(t){return function(){n.quadraticCurveTo(t.cpx,t.cpy,t.x,t.y)}}},exports.bezierCurveTo=function(n){return function(t){return function(){n.bezierCurveTo(t.cp1x,t.cp1y,t.cp2x,t.cp2y,t.x,t.y)}}};
-},{}],"IZvR":[function(require,module,exports) {
-"use strict";var e=require("../Effect.Exception/index.js"),r=require("../Effect.Unsafe/index.js"),n=function(n){return r.unsafePerformEffect(e.throwException(n))},t=function(r){return n(e.error(r))};module.exports={unsafeThrowException:n,unsafeThrow:t};
-},{"../Effect.Exception/index.js":"0OCW","../Effect.Unsafe/index.js":"tPW2"}],"rm6N":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),e=require("../Control.Apply/index.js"),t=require("../Data.Eq/index.js"),r=require("../Data.Functor/index.js"),i=require("../Data.Maybe/index.js"),a=require("../Data.Show/index.js"),o=require("../Effect/index.js"),u=require("../Effect.Exception.Unsafe/index.js"),c=function(){function n(){}return n.value=new n,n}(),f=function(){function n(){}return n.value=new n,n}(),s=function(){function n(){}return n.value=new n,n}(),l=function(){function n(){}return n.value=new n,n}(),v=function(){function n(){}return n.value=new n,n}(),m=function(){function n(){}return n.value=new n,n}(),h=function(){function n(){}return n.value=new n,n}(),g=function(){function n(){}return n.value=new n,n}(),w=function(){function n(){}return n.value=new n,n}(),p=function(){function n(){}return n.value=new n,n}(),d=function(){function n(){}return n.value=new n,n}(),C=function(){function n(){}return n.value=new n,n}(),S=function(){function n(){}return n.value=new n,n}(),D=function(){function n(){}return n.value=new n,n}(),I=function(){function n(){}return n.value=new n,n}(),L=function(){function n(){}return n.value=new n,n}(),y=function(){function n(){}return n.value=new n,n}(),x=function(){function n(){}return n.value=new n,n}(),T=function(){function n(){}return n.value=new n,n}(),A=function(){function n(){}return n.value=new n,n}(),E=function(){function n(){}return n.value=new n,n}(),R=function(){function n(){}return n.value=new n,n}(),F=function(){function n(){}return n.value=new n,n}(),G=function(){function n(){}return n.value=new n,n}(),O=function(){function n(){}return n.value=new n,n}(),q=function(){function n(){}return n.value=new n,n}(),b=function(){function n(){}return n.value=new n,n}(),k=function(){function n(){}return n.value=new n,n}(),P=function(){function n(){}return n.value=new n,n}(),H=function(){function n(){}return n.value=new n,n}(),B=function(){function n(){}return n.value=new n,n}(),W=function(){function n(){}return n.value=new n,n}(),J=function(){function n(){}return n.value=new n,n}(),j=function(){function n(){}return n.value=new n,n}(),M=function(){function n(){}return n.value=new n,n}(),X=function(){function n(){}return n.value=new n,n}(),N=function(){function n(){}return n.value=new n,n}(),Y=function(){function n(){}return n.value=new n,n}(),U=function(){function n(){}return n.value=new n,n}(),z=function(){function n(){}return n.value=new n,n}(),K=function(){function n(){}return n.value=new n,n}(),Q=function(e){return function(t){return function(){n.save(e)();var r=t();n.restore(e)();return r}}},V=function(e){return function(t){return n.tryLoadImageImpl(e)(t(i.Nothing.value))(function(n){return t(i.Just.create(n))})}},Z=function(e){return r.map(o.functorEffect)(function(n){return"left"===n?c.value:"right"===n?f.value:"center"===n?s.value:"start"===n?l.value:"end"===n?v.value:u.unsafeThrow("invalid TextAlign: "+n)})(n.textAlignImpl(e))},$=function(e){return function(t){return function(){n.beginPath(e)();var r=t();n.stroke(e)();return r}}},_=new a.Show(function(n){if(n instanceof c)return"AlignLeft";if(n instanceof f)return"AlignRight";if(n instanceof s)return"AlignCenter";if(n instanceof l)return"AlignStart";if(n instanceof v)return"AlignEnd";throw new Error("Failed pattern match at Graphics.Canvas (line 489, column 1 - line 494, column 29): "+[n.constructor.name])}),nn=new a.Show(function(n){if(n instanceof m)return"Repeat";if(n instanceof h)return"RepeatX";if(n instanceof g)return"RepeatY";if(n instanceof w)return"NoRepeat";throw new Error("Failed pattern match at Graphics.Canvas (line 599, column 1 - line 603, column 29): "+[n.constructor.name])}),en=new a.Show(function(n){if(n instanceof L)return"SourceOver";if(n instanceof y)return"SourceIn";if(n instanceof x)return"SourceOut";if(n instanceof T)return"SourceAtop";if(n instanceof A)return"DestinationOver";if(n instanceof E)return"DestinationIn";if(n instanceof R)return"DestinationOut";if(n instanceof F)return"DestinationAtop";if(n instanceof G)return"Lighter";if(n instanceof O)return"Copy";if(n instanceof q)return"Xor";if(n instanceof b)return"Multiply";if(n instanceof k)return"Screen";if(n instanceof P)return"Overlay";if(n instanceof H)return"Darken";if(n instanceof B)return"Lighten";if(n instanceof W)return"ColorDodge";if(n instanceof J)return"ColorBurn";if(n instanceof j)return"HardLight";if(n instanceof M)return"SoftLight";if(n instanceof X)return"Difference";if(n instanceof N)return"Exclusion";if(n instanceof Y)return"Hue";if(n instanceof U)return"Saturation";if(n instanceof z)return"Color";if(n instanceof K)return"Luminosity";throw new Error("Failed pattern match at Graphics.Canvas (line 284, column 1 - line 310, column 38): "+[n.constructor.name])}),tn=function(e){return function(t){return n.setTextAlignImpl(e)(function(n){if(n instanceof c)return"left";if(n instanceof f)return"right";if(n instanceof s)return"center";if(n instanceof l)return"start";if(n instanceof v)return"end";throw new Error("Failed pattern match at Graphics.Canvas (line 518, column 5 - line 518, column 32): "+[n.constructor.name])}(t))}},rn=function(e){return function(t){if(t instanceof p)return n.setLineJoinImpl(e)("bevel");if(t instanceof d)return n.setLineJoinImpl(e)("round");if(t instanceof C)return n.setLineJoinImpl(e)("miter");throw new Error("Failed pattern match at Graphics.Canvas (line 247, column 1 - line 247, column 52): "+[e.constructor.name,t.constructor.name])}},an=function(e){return function(t){if(t instanceof S)return n.setLineCapImpl(e)("round");if(t instanceof D)return n.setLineCapImpl(e)("square");if(t instanceof I)return n.setLineCapImpl(e)("butt");throw new Error("Failed pattern match at Graphics.Canvas (line 234, column 1 - line 234, column 50): "+[e.constructor.name,t.constructor.name])}},on=function(e){return function(t){return n.setGlobalCompositeOperationImpl(e)(function(n){if(n instanceof L)return"source-over";if(n instanceof y)return"source-in";if(n instanceof x)return"source-out";if(n instanceof T)return"source-atop";if(n instanceof A)return"destination-over";if(n instanceof E)return"destination-in";if(n instanceof R)return"destination-out";if(n instanceof F)return"destination-atop";if(n instanceof G)return"lighter";if(n instanceof O)return"copy";if(n instanceof q)return"xor";if(n instanceof b)return"multiply";if(n instanceof k)return"screen";if(n instanceof P)return"overlay";if(n instanceof H)return"darken";if(n instanceof B)return"lighten";if(n instanceof W)return"color-dodge";if(n instanceof J)return"color-burn";if(n instanceof j)return"hard-light";if(n instanceof M)return"soft-light";if(n instanceof X)return"difference";if(n instanceof N)return"exclusion";if(n instanceof Y)return"hue";if(n instanceof U)return"saturation";if(n instanceof z)return"color";if(n instanceof K)return"luminosity";throw new Error("Failed pattern match at Graphics.Canvas (line 318, column 5 - line 318, column 45): "+[n.constructor.name])}(t))}},un=function(t){return function(r){return e.applySecond(o.applyEffect)(n.setCanvasHeight(t)(r.height))(n.setCanvasWidth(t)(r.width))}},cn=function(e){return n.getCanvasElementByIdImpl(e,i.Just.create,i.Nothing.value)},fn=function(e){return function(){return{width:n.getCanvasWidth(e)(),height:n.getCanvasHeight(e)()}}},sn=function(e){return function(t){return function(){n.beginPath(e)();var r=t();n.fill(e)();return r}}},ln=new t.Eq(function(n){return function(e){return n instanceof S&&e instanceof S||(n instanceof D&&e instanceof D||n instanceof I&&e instanceof I)}}),vn=function(e){return function(t){return function(r){return n.createPatternImpl(e)(t)(function(n){if(n instanceof m)return"repeat";if(n instanceof h)return"repeat-x";if(n instanceof g)return"repeat-y";if(n instanceof w)return"no-repeat";throw new Error("Failed pattern match at Graphics.Canvas (line 611, column 5 - line 611, column 31): "+[n.constructor.name])}(r))}}};module.exports={SourceOver:L,SourceIn:y,SourceOut:x,SourceAtop:T,DestinationOver:A,DestinationIn:E,DestinationOut:R,DestinationAtop:F,Lighter:G,Copy:O,Xor:q,Multiply:b,Screen:k,Overlay:P,Darken:H,Lighten:B,ColorDodge:W,ColorBurn:J,HardLight:j,SoftLight:M,Difference:X,Exclusion:N,Hue:Y,Saturation:U,Color:z,Luminosity:K,Round:S,Square:D,Butt:I,BevelJoin:p,RoundJoin:d,MiterJoin:C,AlignLeft:c,AlignRight:f,AlignCenter:s,AlignStart:l,AlignEnd:v,Repeat:m,RepeatX:h,RepeatY:g,NoRepeat:w,getCanvasElementById:cn,getCanvasDimensions:fn,setCanvasDimensions:un,setLineCap:an,setLineJoin:rn,setGlobalCompositeOperation:on,strokePath:$,fillPath:sn,textAlign:Z,setTextAlign:tn,withContext:Q,tryLoadImage:V,createPattern:vn,eqLineCap:ln,showComposite:en,showTextAlign:_,showPatternRepeat:nn,getContext2D:n.getContext2D,getCanvasWidth:n.getCanvasWidth,setCanvasWidth:n.setCanvasWidth,getCanvasHeight:n.getCanvasHeight,setCanvasHeight:n.setCanvasHeight,canvasToDataURL:n.canvasToDataURL,setLineWidth:n.setLineWidth,setLineDash:n.setLineDash,setFillStyle:n.setFillStyle,setStrokeStyle:n.setStrokeStyle,setShadowBlur:n.setShadowBlur,setShadowOffsetX:n.setShadowOffsetX,setShadowOffsetY:n.setShadowOffsetY,setShadowColor:n.setShadowColor,setMiterLimit:n.setMiterLimit,setGlobalAlpha:n.setGlobalAlpha,beginPath:n.beginPath,stroke:n.stroke,fill:n.fill,clip:n.clip,lineTo:n.lineTo,moveTo:n.moveTo,closePath:n.closePath,arc:n.arc,rect:n.rect,fillRect:n.fillRect,strokeRect:n.strokeRect,clearRect:n.clearRect,scale:n.scale,rotate:n.rotate,translate:n.translate,transform:n.transform,setTransform:n.setTransform,font:n.font,setFont:n.setFont,fillText:n.fillText,strokeText:n.strokeText,measureText:n.measureText,save:n.save,restore:n.restore,getImageData:n.getImageData,putImageData:n.putImageData,putImageDataFull:n.putImageDataFull,createImageData:n.createImageData,createImageDataCopy:n.createImageDataCopy,imageDataWidth:n.imageDataWidth,imageDataHeight:n.imageDataHeight,imageDataBuffer:n.imageDataBuffer,canvasElementToImageSource:n.canvasElementToImageSource,drawImage:n.drawImage,drawImageScale:n.drawImageScale,drawImageFull:n.drawImageFull,setPatternFillStyle:n.setPatternFillStyle,createLinearGradient:n.createLinearGradient,createRadialGradient:n.createRadialGradient,addColorStop:n.addColorStop,setGradientFillStyle:n.setGradientFillStyle,quadraticCurveTo:n.quadraticCurveTo,bezierCurveTo:n.bezierCurveTo};
-},{"./foreign.js":"RCTS","../Control.Apply/index.js":"QcLv","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Show/index.js":"mFY7","../Effect/index.js":"oTWB","../Effect.Exception.Unsafe/index.js":"IZvR"}],"YWUW":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),e=require("../Data.Eq/index.js"),t=require("../Data.Functor/index.js"),r=require("../Data.Generic.Rep/index.js"),u=require("../Data.Lens.Getter/index.js"),i=require("../Data.Ord/index.js"),a=require("../Data.Ordering/index.js"),o=require("../Data.Symbol/index.js"),f=require("../Data.Unit/index.js"),c=require("../Data.Variant/index.js"),l=require("../Data.Variant.Internal/index.js"),s=require("../Effect/index.js"),v=require("../Effect.Class/index.js"),w=require("../Graphics.Canvas/index.js"),d=require("../Type.Equality/index.js"),h=function(){function n(){}return n.value=new n,n}(),m=function(){function n(){}return n.value=new n,n}(),p=function(){function n(){}return n.value=new n,n}(),I=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),g=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),y=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),x=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),q=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),j=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),b=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),C=function(){function n(n,e,t){this.value0=n,this.value1=e,this.value2=t}return n.create=function(e){return function(t){return function(r){return new n(e,t,r)}}},n}(),S=function(n){var e=n.size.width-n.padding.right-n.padding.left,t={x:0,y:0};return c.onMatch()(l.variantMatchCons(l.variantMatchCons(l.variantMatchCons(l.variantMatchCons(l.variantMatchCons(l.variantMatchCons(l.variantMatchNil)()(d.refl))()(d.refl))()(d.refl))()(d.refl))()(d.refl))()(d.refl))()({full:function(e){return{offset:t,size:n.size}},center:function(t){return{offset:{x:n.padding.left,y:n.padding.top},size:{width:e,height:n.size.height-n.padding.top-n.padding.bottom}}},top:function(r){return{offset:{x:n.padding.left,y:t.y},size:{width:e,height:n.padding.top}}},right:function(e){return{offset:{x:n.size.width-n.padding.right,y:n.padding.top},size:{width:n.padding.right,height:n.size.height-(n.padding.top+n.padding.bottom)}}},bottom:function(t){return{offset:{x:n.padding.left,y:n.size.height-n.padding.bottom},size:{width:e,height:n.padding.bottom}}},left:function(e){return{offset:{y:n.padding.top,x:t.x},size:{width:n.padding.left,height:n.size.height-(n.padding.top+n.padding.bottom)}}}})(c.case_)},T=function(n){var e=S(n);return function(n){return e(n).offset}},L=function(n){var e=S(n);return function(n){return e(n).size}},E=new r.Generic(function(n){if(n instanceof g)return new r.Inl(n.value0);if(n instanceof y)return new r.Inr(new r.Inl(n.value0));if(n instanceof x)return new r.Inr(new r.Inr(new r.Inl(n.value0)));if(n instanceof q)return new r.Inr(new r.Inr(new r.Inr(new r.Inl(n.value0))));if(n instanceof j)return new r.Inr(new r.Inr(new r.Inr(new r.Inr(new r.Inl(n.value0)))));if(n instanceof b)return new r.Inr(new r.Inr(new r.Inr(new r.Inr(new r.Inr(n.value0)))));throw new Error("Failed pattern match at Genetics.Browser.Layer (line 64, column 1 - line 64, column 60): "+[n.constructor.name])},function(n){if(n instanceof r.Inl)return new g(n.value0);if(n instanceof r.Inr&&n.value0 instanceof r.Inl)return new y(n.value0.value0);if(n instanceof r.Inr&&n.value0 instanceof r.Inr&&n.value0.value0 instanceof r.Inl)return new x(n.value0.value0.value0);if(n instanceof r.Inr&&n.value0 instanceof r.Inr&&n.value0.value0 instanceof r.Inr&&n.value0.value0.value0 instanceof r.Inl)return new q(n.value0.value0.value0.value0);if(n instanceof r.Inr&&n.value0 instanceof r.Inr&&n.value0.value0 instanceof r.Inr&&n.value0.value0.value0 instanceof r.Inr&&n.value0.value0.value0.value0 instanceof r.Inl)return new j(n.value0.value0.value0.value0.value0);if(n instanceof r.Inr&&n.value0 instanceof r.Inr&&n.value0.value0 instanceof r.Inr&&n.value0.value0.value0 instanceof r.Inr&&n.value0.value0.value0.value0 instanceof r.Inr)return new b(n.value0.value0.value0.value0.value0);throw new Error("Failed pattern match at Genetics.Browser.Layer (line 64, column 1 - line 64, column 60): "+[n.constructor.name])}),G=new t.Functor(function(n){return function(e){if(e instanceof g)return new g(n(e.value0));if(e instanceof y)return new y(n(e.value0));if(e instanceof x)return new x(n(e.value0));if(e instanceof q)return new q(n(e.value0));if(e instanceof j)return new j(n(e.value0));if(e instanceof b)return new b(n(e.value0));throw new Error("Failed pattern match at Genetics.Browser.Layer (line 63, column 1 - line 63, column 54): "+[e.constructor.name])}}),z=new t.Functor(function(n){return function(e){return new C(e.value0,e.value1,t.map(G)(n)(e.value2))}}),F=new e.Eq(function(n){return function(e){return n instanceof p&&e instanceof p||n instanceof I&&e instanceof I&&n.value0===e.value0}}),D=function(n){return new e.Eq(function(t){return function(r){return t instanceof g&&r instanceof g?e.eq(n)(t.value0)(r.value0):t instanceof y&&r instanceof y?e.eq(n)(t.value0)(r.value0):t instanceof x&&r instanceof x?e.eq(n)(t.value0)(r.value0):t instanceof q&&r instanceof q?e.eq(n)(t.value0)(r.value0):t instanceof j&&r instanceof j?e.eq(n)(t.value0)(r.value0):t instanceof b&&r instanceof b&&e.eq(n)(t.value0)(r.value0)}})},M=function(n){return new i.Ord(function(){return D(n.Eq0())},function(e){return function(t){if(e instanceof g&&t instanceof g)return i.compare(n)(e.value0)(t.value0);if(e instanceof g)return a.LT.value;if(t instanceof g)return a.GT.value;if(e instanceof y&&t instanceof y)return i.compare(n)(e.value0)(t.value0);if(e instanceof y)return a.LT.value;if(t instanceof y)return a.GT.value;if(e instanceof x&&t instanceof x)return i.compare(n)(e.value0)(t.value0);if(e instanceof x)return a.LT.value;if(t instanceof x)return a.GT.value;if(e instanceof q&&t instanceof q)return i.compare(n)(e.value0)(t.value0);if(e instanceof q)return a.LT.value;if(t instanceof q)return a.GT.value;if(e instanceof j&&t instanceof j)return i.compare(n)(e.value0)(t.value0);if(e instanceof j)return a.LT.value;if(t instanceof j)return a.GT.value;if(e instanceof b&&t instanceof b)return i.compare(n)(e.value0)(t.value0);throw new Error("Failed pattern match at Genetics.Browser.Layer (line 62, column 1 - line 62, column 59): "+[e.constructor.name,t.constructor.name])}})},B=o.SProxy.value,P=o.SProxy.value,k=o.SProxy.value,O=o.SProxy.value,N=o.SProxy.value,R=o.SProxy.value,V=function(n){if(n instanceof g)return c.inj()(new o.IsSymbol(function(){return"full"}))(O)(n.value0);if(n instanceof y)return c.inj()(new o.IsSymbol(function(){return"center"}))(N)(n.value0);if(n instanceof x)return c.inj()(new o.IsSymbol(function(){return"top"}))(B)(n.value0);if(n instanceof q)return c.inj()(new o.IsSymbol(function(){return"right"}))(P)(n.value0);if(n instanceof j)return c.inj()(new o.IsSymbol(function(){return"bottom"}))(R)(n.value0);if(n instanceof b)return c.inj()(new o.IsSymbol(function(){return"left"}))(k)(n.value0);throw new Error("Failed pattern match at Genetics.Browser.Layer (line 98, column 10 - line 104, column 30): "+[n.constructor.name])},_=function(n){return{full:S(n)(c.inj()(new o.IsSymbol(function(){return"full"}))(O)(f.unit)),center:S(n)(c.inj()(new o.IsSymbol(function(){return"center"}))(N)(f.unit)),top:S(n)(c.inj()(new o.IsSymbol(function(){return"top"}))(B)(f.unit)),right:S(n)(c.inj()(new o.IsSymbol(function(){return"right"}))(P)(f.unit)),bottom:S(n)(c.inj()(new o.IsSymbol(function(){return"bottom"}))(R)(f.unit)),left:S(n)(c.inj()(new o.IsSymbol(function(){return"left"}))(k)(f.unit))}},U=function(e){return function(r){return function(u){return function(i){return v.liftEffect(e)(function(){var e=w.getContext2D(i)(),a=(_(u),L(u)(V(r.value2))),o=T(u)(V(r.value2));return n.setContextTranslation(o)(e)(),function(){if(r.value1 instanceof p)return f.unit;if(r.value1 instanceof I)return(n={x:-r.value1.value0,y:-r.value1.value0},function(r){return function(){return w.beginPath(e)(),w.moveTo(e)(n.x)(n.y)(),w.lineTo(e)(r.x)(n.y)(),w.lineTo(e)(r.x)(r.y)(),w.lineTo(e)(n.x)(r.y)(),w.clip(e)(),t.void(s.functorEffect)(w.closePath(e))()}})({x:a.width+r.value1.value0,y:a.height+r.value1.value0})();var n;throw new Error("Failed pattern match at Genetics.Browser.Layer (line 203, column 3 - line 207, column 48): "+[r.value1.constructor.name])}(),e})}}}},A=u.to(function(n){if(n instanceof g)return n.value0;if(n instanceof y)return n.value0;if(n instanceof x)return n.value0;if(n instanceof q)return n.value0;if(n instanceof j)return n.value0;if(n instanceof b)return n.value0;throw new Error("Failed pattern match at Genetics.Browser.Layer (line 53, column 17 - line 59, column 18): "+[n.constructor.name])});module.exports={Full:g,Center:y,CTop:x,CRight:q,CBottom:j,CLeft:b,_Component:A,Layer:C,Fixed:h,Scrolling:m,NoMask:p,Masked:I,asSlot:V,slotContext:U,slotOffset:T,slotSize:L,trackSlots:_,eqComponent:D,ordComponent:M,functorComponent:G,genericComponent:E,functorLayer:z,eqLayerMask:F,setContextTranslation:n.setContextTranslation};
-},{"./foreign.js":"1Q0x","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Generic.Rep/index.js":"AuzG","../Data.Lens.Getter/index.js":"OPOX","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Symbol/index.js":"4oJQ","../Data.Unit/index.js":"NhVk","../Data.Variant/index.js":"hgdh","../Data.Variant.Internal/index.js":"kYoO","../Effect/index.js":"oTWB","../Effect.Class/index.js":"dWtH","../Graphics.Canvas/index.js":"rm6N","../Type.Equality/index.js":"Uq/R"}],"fMOI":[function(require,module,exports) {
-"use strict";var e=require("../Control.Alt/index.js"),t=require("../Data.Eq/index.js"),n=require("../Data.Foldable/index.js"),i=require("../Data.Maybe/index.js"),a=require("../Data.Monoid/index.js"),r=require("../Data.Semigroup/index.js"),o=require("../Data.Show/index.js"),u=function(e){return e},l=function(e){return e},s=function(){function e(e,t,n){this.value0=e,this.value1=t,this.value2=n}return e.create=function(t){return function(n){return function(i){return new e(t,n,i)}}},e}(),v={style:i.Nothing.value,variant:new i.Just("small-caps"),weight:i.Nothing.value},g="serif",h=new r.Semigroup(function(t){return function(n){return{style:e.alt(i.altMaybe)(t.style)(n.style),variant:e.alt(i.altMaybe)(t.variant)(n.variant),weight:e.alt(i.altMaybe)(t.weight)(n.weight)}}}),f="sans-serif",c=function(e){return n.intercalate(n.foldableArray)(a.monoidString)(" ")([n.fold(n.foldableMaybe)(a.monoidString)(e.style),n.fold(n.foldableMaybe)(a.monoidString)(e.variant),n.fold(n.foldableMaybe)(a.monoidString)(e.weight)])},w={style:new i.Just("oblique"),variant:i.Nothing.value,weight:i.Nothing.value},d="monospace",q=new a.Monoid(function(){return h},{style:i.Nothing.value,variant:i.Nothing.value,weight:i.Nothing.value}),y={style:i.Nothing.value,variant:i.Nothing.value,weight:new i.Just("lighter")},b={style:new i.Just("italic"),variant:i.Nothing.value,weight:i.Nothing.value},m=function(e){return c(e.value2)+" "+o.show(o.showInt)(e.value1)+"px "+e.value0},N=s.create,p="fantasy",M=new t.Eq(function(e){return function(n){return t.eq(i.eqMaybe(t.eqString))(e.style)(n.style)&&t.eq(i.eqMaybe(t.eqString))(e.variant)(n.variant)&&t.eq(i.eqMaybe(t.eqString))(e.weight)(n.weight)}}),S=new t.Eq(function(e){return function(t){return e===t}}),x=new t.Eq(function(e){return function(n){return t.eq(S)(e.value0)(n.value0)&&e.value1===n.value1&&t.eq(M)(e.value2)(n.value2)}}),F=l,j="cursive",D={style:i.Nothing.value,variant:i.Nothing.value,weight:new i.Just("bolder")},J={style:i.Nothing.value,variant:i.Nothing.value,weight:new i.Just("bold")};module.exports={font:N,fontString:m,serif:g,sansSerif:f,monospace:d,cursive:j,fantasy:p,customFont:F,bold:J,bolder:D,light:y,italic:b,oblique:w,smallCaps:v,eqFont:x,eqFontFamily:S,eqFontOptions:M,semigroupFontOptions:h,monoidFontOptions:q};
-},{"../Control.Alt/index.js":"lN+m","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"0WVi":[function(require,module,exports) {
-"use strict";var e=require("../Color/index.js"),n=require("../Control.Alt/index.js"),t=require("../Control.Applicative/index.js"),u=require("../Data.Eq/index.js"),r=require("../Data.Foldable/index.js"),o=require("../Data.Function/index.js"),i=require("../Data.Functor/index.js"),a=require("../Data.List/index.js"),l=require("../Data.List.Types/index.js"),c=require("../Data.Maybe/index.js"),f=require("../Data.Monoid/index.js"),s=require("../Data.Semigroup/index.js"),v=require("../Data.Symbol/index.js"),h=require("../Data.Unit/index.js"),w=require("../Effect/index.js"),d=require("../Graphics.Canvas/index.js"),q=require("../Graphics.Drawing.Font/index.js"),p=require("../Math/index.js"),b=function(e){return e},m=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),y=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),g=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),x=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),S=function(e){return e},E=function(e){return e},C=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),M=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),N=function(){function e(e,n,t,u,r){this.value0=e,this.value1=n,this.value2=t,this.value3=u,this.value4=r}return e.create=function(n){return function(t){return function(u){return function(r){return function(o){return new e(n,t,u,r,o)}}}}},e}(),j=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),D=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),L=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),F=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),W=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),_=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),R=function(e){return function(n){return L.create({translateX:e,translateY:n})}},X=N.create,Y=function(e){return function(n){return{color:c.Nothing.value,blur:c.Nothing.value,offset:new c.Just({x:e,y:n})}}},J=function(e){return{color:new c.Just(e),blur:c.Nothing.value,offset:c.Nothing.value}},O=function(e){return{color:c.Nothing.value,blur:new c.Just(e),offset:c.Nothing.value}},A=_.create,G=new s.Semigroup(function(e){return function(n){return new x(e instanceof x?s.append(l.semigroupList)(e.value0)(a.singleton(n)):n instanceof x?new l.Cons(e,n.value0):new l.Cons(e,new l.Cons(n,l.Nil.value)))}}),I=new s.Semigroup(function(e){return function(t){return{color:n.alt(c.altMaybe)(e.color)(t.color),blur:n.alt(c.altMaybe)(e.blur)(t.blur),offset:n.alt(c.altMaybe)(e.offset)(t.offset)}}}),T=new s.Semigroup(function(e){return function(t){return{color:n.alt(c.altMaybe)(e.color)(t.color),lineWidth:n.alt(c.altMaybe)(e.lineWidth)(t.lineWidth)}}}),H=new s.Semigroup(function(e){return function(t){return{color:n.alt(c.altMaybe)(e.color)(t.color)}}}),P=new s.Semigroup(function(e){return function(n){return new j(e instanceof j?s.append(l.semigroupList)(e.value0)(a.singleton(n)):n instanceof j?new l.Cons(e,n.value0):new l.Cons(e,new l.Cons(n,l.Nil.value)))}}),k=function(e){return function(n){return D.create({scaleX:e,scaleY:n})}},B=F.create,U=function(n){var u=function e(u){if(u instanceof m&&u.value1 instanceof l.Nil)return t.pure(w.applicativeEffect)(h.unit);if(u instanceof m&&u.value1 instanceof l.Cons)return function(){d.moveTo(n)(u.value1.value0.x)(u.value1.value0.y)();return r.for_(w.applicativeEffect)(l.foldableList)(u.value1.value1)(function(e){return d.lineTo(n)(e.x)(e.y)})(),t.when(w.applicativeEffect)(u.value0)(i.void(w.functorEffect)(d.closePath(n)))()};if(u instanceof y)return i.void(w.functorEffect)(d.rect(n)(u.value0));if(u instanceof g)return i.void(w.functorEffect)(d.arc(n)(u.value0));if(u instanceof x)return r.for_(w.applicativeEffect)(l.foldableList)(u.value0)(e);throw new Error("Failed pattern match at Graphics.Drawing (line 268, column 3 - line 268, column 38): "+[u.constructor.name])},o=function(t){return r.for_(w.applicativeEffect)(r.foldableMaybe)(t.color)(function(t){return d.setFillStyle(n)(e.cssStringHSLA(t))})};return function t(a){if(a instanceof C)return i.void(w.functorEffect)(d.withContext(n)(function(){return o(a.value1)(),d.fillPath(n)(u(a.value0))()}));if(a instanceof M)return i.void(w.functorEffect)(d.withContext(n)(function(){return function(t){return function(){return r.for_(w.applicativeEffect)(r.foldableMaybe)(t.color)(function(t){return d.setStrokeStyle(n)(e.cssStringHSLA(t))})(),r.for_(w.applicativeEffect)(r.foldableMaybe)(t.lineWidth)(function(e){return d.setLineWidth(n)(e)})()}}(a.value1)(),d.strokePath(n)(u(a.value0))()}));if(a instanceof j)return r.for_(w.applicativeEffect)(l.foldableList)(a.value0)(t);if(a instanceof D)return i.void(w.functorEffect)(d.withContext(n)(function(){return d.scale(n)(a.value0)(),t(a.value1)()}));if(a instanceof L)return i.void(w.functorEffect)(d.withContext(n)(function(){return d.translate(n)(a.value0)(),t(a.value1)()}));if(a instanceof F)return i.void(w.functorEffect)(d.withContext(n)(function(){return d.rotate(n)(a.value0)(),t(a.value1)()}));if(a instanceof W)return i.void(w.functorEffect)(d.withContext(n)(function(){return u(a.value0)(),d.clip(n)(),t(a.value1)()}));if(a instanceof _)return i.void(w.functorEffect)(d.withContext(n)(function(){return function(t){return function(){return r.for_(w.applicativeEffect)(r.foldableMaybe)(t.color)(function(t){return d.setShadowColor(n)(e.cssStringHSLA(t))})(),r.for_(w.applicativeEffect)(r.foldableMaybe)(t.blur)(function(e){return d.setShadowBlur(n)(e)})(),r.for_(w.applicativeEffect)(r.foldableMaybe)(t.offset)(function(e){return function(){return d.setShadowOffsetX(n)(e.x)(),d.setShadowOffsetY(n)(e.y)()}})()}}(a.value0)(),t(a.value1)()}));if(a instanceof N)return i.void(w.functorEffect)(d.withContext(n)(function(){return d.setFont(n)(q.fontString(a.value0))(),o(a.value3)(),d.fillText(n)(a.value4)(a.value1)(a.value2)()}));throw new Error("Failed pattern match at Graphics.Drawing (line 221, column 3 - line 224, column 21): "+[a.constructor.name])}},z=function(e){return function(n){return function(t){return function(u){return new y({x:e,y:n,width:t,height:u})}}}},K=function(e){var n=m.create(!1),t=a.fromFoldable(e);return function(e){return n(t(e))}},Q=o.flip(M.create),V=function(e){return{color:new c.Just(e),lineWidth:c.Nothing.value}},Z=new f.Monoid(function(){return G},new x(f.mempty(l.monoidList))),$=new f.Monoid(function(){return I},{color:c.Nothing.value,blur:c.Nothing.value,offset:c.Nothing.value}),ee=new f.Monoid(function(){return T},{color:c.Nothing.value,lineWidth:c.Nothing.value}),ne=new f.Monoid(function(){return H},{color:c.Nothing.value}),te=new f.Monoid(function(){return P},new j(f.mempty(l.monoidList))),ue=function(e){return{color:c.Nothing.value,lineWidth:new c.Just(e)}},re=o.flip(C.create),oe=function(e){return{color:new c.Just(e)}},ie=function(e){return function n(t){return e(t instanceof j?new j(i.map(l.functorList)(n)(t.value0)):t instanceof D?new D(t.value0,n(t.value1)):t instanceof L?new L(t.value0,n(t.value1)):t instanceof F?new F(t.value0,n(t.value1)):t instanceof W?new W(t.value0,n(t.value1)):t instanceof _?new _(t.value0,n(t.value1)):t)}},ae=new u.Eq(function(e){return function(n){return e instanceof m&&n instanceof m?e.value0===n.value0&&u.eq(l.eqList(u.eqRec()(u.eqRowCons(u.eqRowCons(u.eqRowNil)()(new v.IsSymbol(function(){return"y"}))(u.eqNumber))()(new v.IsSymbol(function(){return"x"}))(u.eqNumber))))(e.value1)(n.value1):e instanceof y&&n instanceof y?e.value0.height===n.value0.height&&e.value0.width===n.value0.width&&e.value0.x===n.value0.x&&e.value0.y===n.value0.y:e instanceof g&&n instanceof g?e.value0.end===n.value0.end&&e.value0.radius===n.value0.radius&&e.value0.start===n.value0.start&&e.value0.x===n.value0.x&&e.value0.y===n.value0.y:e instanceof x&&n instanceof x&&u.eq(l.eqList(ae))(e.value0)(n.value0)}}),le=new u.Eq(function(n){return function(t){return u.eq(c.eqMaybe(u.eqNumber))(n.blur)(t.blur)&&u.eq(c.eqMaybe(e.eqColor))(n.color)(t.color)&&u.eq(c.eqMaybe(u.eqRec()(u.eqRowCons(u.eqRowCons(u.eqRowNil)()(new v.IsSymbol(function(){return"y"}))(u.eqNumber))()(new v.IsSymbol(function(){return"x"}))(u.eqNumber))))(n.offset)(t.offset)}}),ce=new u.Eq(function(n){return function(t){return u.eq(c.eqMaybe(e.eqColor))(n.color)(t.color)&&u.eq(c.eqMaybe(u.eqNumber))(n.lineWidth)(t.lineWidth)}}),fe=new u.Eq(function(n){return function(t){return u.eq(c.eqMaybe(e.eqColor))(n.color)(t.color)}}),se=new u.Eq(function(e){return function(n){return e instanceof C&&n instanceof C?u.eq(ae)(e.value0)(n.value0)&&u.eq(fe)(e.value1)(n.value1):e instanceof M&&n instanceof M?u.eq(ae)(e.value0)(n.value0)&&u.eq(ce)(e.value1)(n.value1):e instanceof N&&n instanceof N?u.eq(q.eqFont)(e.value0)(n.value0)&&e.value1===n.value1&&e.value2===n.value2&&u.eq(fe)(e.value3)(n.value3)&&e.value4===n.value4:e instanceof j&&n instanceof j?u.eq(l.eqList(se))(e.value0)(n.value0):e instanceof D&&n instanceof D?e.value0.scaleX===n.value0.scaleX&&e.value0.scaleY===n.value0.scaleY&&u.eq(se)(e.value1)(n.value1):e instanceof L&&n instanceof L?e.value0.translateX===n.value0.translateX&&e.value0.translateY===n.value0.translateY&&u.eq(se)(e.value1)(n.value1):e instanceof F&&n instanceof F?e.value0===n.value0&&u.eq(se)(e.value1)(n.value1):e instanceof W&&n instanceof W?u.eq(ae)(e.value0)(n.value0)&&u.eq(se)(e.value1)(n.value1):e instanceof _&&n instanceof _&&(u.eq(le)(e.value0)(n.value0)&&u.eq(se)(e.value1)(n.value1))}}),ve=function(e){var n=m.create(!0),t=a.fromFoldable(e);return function(e){return n(t(e))}},he=W.create,we=function(e){return function(n){return function(t){return function(u){return function(r){return new g({x:e,y:n,start:t,end:u,radius:r})}}}}},de=function(e){return function(n){return we(e)(n)(0)(2*p.pi)}};module.exports={path:K,closed:ve,rectangle:z,circle:de,arc:we,fillColor:oe,outlineColor:V,lineWidth:ue,shadowOffset:Y,shadowBlur:O,shadowColor:J,shadow:A,filled:re,outlined:Q,clipped:he,scale:k,translate:R,rotate:B,text:X,everywhere:ie,render:U,eqShape:ae,semigroupShape:G,monoidShape:Z,semigroupFillStyle:H,monoidFillStyle:ne,eqFillStyle:fe,semigroupOutlineStyle:T,monoidOutlineStyle:ee,eqOutlineStyle:ce,eqShadow:le,semigroupShadow:I,monoidShadow:$,semigroupDrawing:P,monoidDrawing:te,eqDrawing:se};
-},{"../Color/index.js":"f3ma","../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Semigroup/index.js":"EsAJ","../Data.Symbol/index.js":"4oJQ","../Data.Unit/index.js":"NhVk","../Effect/index.js":"oTWB","../Graphics.Canvas/index.js":"rm6N","../Graphics.Drawing.Font/index.js":"fMOI","../Math/index.js":"Rpaz"}],"QJpD":[function(require,module,exports) {
-"use strict";var t=function(t){return function(n){return n[t]}};exports._namespaceURI=t("namespaceURI"),exports._prefix=t("prefix"),exports.localName=t("localName"),exports.tagName=t("tagName"),exports.id=function(t){return function(){return t.id}},exports.setId=function(t){return function(n){return function(){return n.id=t,{}}}},exports.className=function(t){return function(){return t.className}},exports.setClassName=function(t){return function(n){return function(){return n.className=t,{}}}},exports.getElementsByTagName=function(t){return function(n){return function(){return n.getElementsByTagName(t)}}},exports._getElementsByTagNameNS=function(t){return function(n){return function(r){return function(){return r.getElementsByTagNameNS(t,n)}}}},exports.getElementsByClassName=function(t){return function(n){return function(){return n.getElementsByClassName(t)}}},exports.setAttribute=function(t){return function(n){return function(r){return function(){return r.setAttribute(t,n),{}}}}},exports._getAttribute=function(t){return function(n){return function(){return n.getAttribute(t)}}},exports.hasAttribute=function(t){return function(n){return n.hasAttribute(t)}},exports.removeAttribute=function(t){return function(n){return function(){return n.removeAttribute(t),{}}}},exports.scrollTop=function(t){return function(){return t.scrollTop}},exports.setScrollTop=function(t){return function(n){return function(){return n.scrollTop=t,{}}}},exports.scrollLeft=function(t){return function(){return t.scrollLeft}},exports.setScrollLeft=function(t){return function(n){return function(){return n.scrollLeft=t,{}}}},exports.scrollWidth=function(t){return function(){return t.scrollWidth}},exports.scrollHeight=function(t){return function(){return t.scrollHeight}},exports.clientTop=function(t){return function(){return t.clientTop}},exports.clientLeft=function(t){return function(){return t.clientLeft}},exports.clientWidth=function(t){return function(){return t.clientWidth}},exports.clientHeight=function(t){return function(){return t.clientHeight}};
-},{}],"4K7Y":[function(require,module,exports) {
-"use strict";exports._unsafeReadProtoTagged=function(e,r,t,n){if("undefined"!=typeof window){var o=window[t];return null!=o&&n instanceof o?r(n):e}for(var u=n;null!=u;){var f=Object.getPrototypeOf(u),i=f.constructor.name;if(i===t)return r(n);if("Object"===i)return e;u=f}return e};
-},{}],"fdUh":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),r=require("../Data.Maybe/index.js"),t=function(t){return function(a){return e._unsafeReadProtoTagged(r.Nothing.value,r.Just.create,t,a)}};module.exports={unsafeReadProtoTagged:t};
-},{"./foreign.js":"4K7Y","../Data.Maybe/index.js":"5mN7"}],"S4h2":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),t=require("../Data.Functor/index.js"),o=require("../Data.Nullable/index.js"),r=require("../Effect/index.js"),a=require("../Unsafe.Coerce/index.js"),l=require("../Web.Internal.FFI/index.js"),n=a.unsafeCoerce,s=a.unsafeCoerce,i=a.unsafeCoerce,c=a.unsafeCoerce,u=a.unsafeCoerce,m=function(t){return o.toMaybe(e._prefix(t))},d=function(t){return o.toMaybe(e._namespaceURI(t))},f=function(t){return e._getElementsByTagNameNS(o.toNullable(t))},g=function(a){var l=t.map(r.functorEffect)(o.toMaybe),n=e._getAttribute(a);return function(e){return l(n(e))}},N=l.unsafeReadProtoTagged("Element"),T=l.unsafeReadProtoTagged("Element"),E=l.unsafeReadProtoTagged("Element"),b=l.unsafeReadProtoTagged("Element"),h=l.unsafeReadProtoTagged("Element");module.exports={fromNode:E,fromChildNode:h,fromNonDocumentTypeChildNode:T,fromParentNode:N,fromEventTarget:b,toNode:i,toChildNode:u,toNonDocumentTypeChildNode:s,toParentNode:n,toEventTarget:c,namespaceURI:d,prefix:m,getElementsByTagNameNS:f,getAttribute:g,localName:e.localName,tagName:e.tagName,id:e.id,setId:e.setId,className:e.className,setClassName:e.setClassName,getElementsByTagName:e.getElementsByTagName,getElementsByClassName:e.getElementsByClassName,setAttribute:e.setAttribute,hasAttribute:e.hasAttribute,removeAttribute:e.removeAttribute,scrollTop:e.scrollTop,setScrollTop:e.setScrollTop,scrollLeft:e.scrollLeft,setScrollLeft:e.setScrollLeft,scrollWidth:e.scrollWidth,scrollHeight:e.scrollHeight,clientTop:e.clientTop,clientLeft:e.clientLeft,clientWidth:e.clientWidth,clientHeight:e.clientHeight};
-},{"./foreign.js":"QJpD","../Data.Functor/index.js":"+0AE","../Data.Nullable/index.js":"YQ8o","../Effect/index.js":"oTWB","../Unsafe.Coerce/index.js":"ETUV","../Web.Internal.FFI/index.js":"fdUh"}],"FwXA":[function(require,module,exports) {
-"use strict";var n=function(n){return function(e){return function(){return e[n]}}};exports.nodeTypeIndex=function(n){return n.nodeType},exports.nodeName=function(n){return n.nodeName},exports.baseURI=n("baseURI"),exports._ownerDocument=n("ownerDocument"),exports._parentNode=n("parentNode"),exports._parentElement=n("parentElement"),exports.hasChildNodes=function(n){return function(){return n.hasChildNodes()}},exports.childNodes=n("childNodes"),exports._firstChild=n("firstChild"),exports._lastChild=n("lastChild"),exports._previousSibling=n("previousSibling"),exports._nextSibling=n("nextSibling"),exports._nodeValue=n("nodeValue"),exports.setNodeValue=function(n){return function(e){return function(){return e.nodeValue=n,{}}}},exports.textContent=n("textContent"),exports.setTextContent=function(n){return function(e){return function(){return e.textContent=n,{}}}},exports.normalize=function(n){return function(){return n.normalize(),{}}},exports.clone=function(n){return function(){return n.cloneNode(!1)}},exports.deepClone=function(n){return function(){return n.cloneNode(!0)}},exports.isEqualNode=function(n){return function(e){return function(){return n.isEqualNode(e)}}},exports.compareDocumentPositionBits=function(n){return function(e){return function(){return n.compareDocumentPosition(e)}}},exports.contains=function(n){return function(e){return function(){return n.contains(e)}}},exports._lookupPrefix=function(n){return function(e){return function(){return e.lookupPrefix(n)}}},exports._lookupNamespaceURI=function(n){return function(e){return function(){return e.lookupNamespaceURI(n)}}},exports.isDefaultNamespace=function(n){return function(e){return function(){return e.isDefaultNamespace(n)}}},exports.insertBefore=function(n){return function(e){return function(t){return function(){return t.insertBefore(n,e)}}}},exports.appendChild=function(n){return function(e){return function(){return e.appendChild(n)}}},exports.replaceChild=function(n){return function(e){return function(t){return function(){return t.replaceChild(n,e)}}}},exports.removeChild=function(n){return function(e){return function(){return e.removeChild(n)}}};
-},{}],"vDH/":[function(require,module,exports) {
-"use strict";var n=require("../Data.Bounded/index.js"),e=require("../Data.Enum/index.js"),t=require("../Data.Eq/index.js"),u=require("../Data.Maybe/index.js"),o=require("../Data.Ord/index.js"),i=function(){function n(){}return n.value=new n,n}(),r=function(){function n(){}return n.value=new n,n}(),c=function(){function n(){}return n.value=new n,n}(),f=function(){function n(){}return n.value=new n,n}(),a=function(){function n(){}return n.value=new n,n}(),s=function(){function n(){}return n.value=new n,n}(),d=function(){function n(){}return n.value=new n,n}(),l=function(){function n(){}return n.value=new n,n}(),w=function(){function n(){}return n.value=new n,n}(),v=function(){function n(){}return n.value=new n,n}(),N=function(){function n(){}return n.value=new n,n}(),m=function(){function n(){}return n.value=new n,n}(),J=function(n){return 1===n?new u.Just(i.value):2===n?new u.Just(r.value):3===n?new u.Just(c.value):4===n?new u.Just(f.value):5===n?new u.Just(a.value):6===n?new u.Just(s.value):7===n?new u.Just(d.value):8===n?new u.Just(l.value):9===n?new u.Just(w.value):10===n?new u.Just(v.value):11===n?new u.Just(N.value):12===n?new u.Just(m.value):u.Nothing.value},p=function(n){if(n instanceof i)return 1;if(n instanceof r)return 2;if(n instanceof c)return 3;if(n instanceof f)return 4;if(n instanceof a)return 5;if(n instanceof s)return 6;if(n instanceof d)return 7;if(n instanceof l)return 8;if(n instanceof w)return 9;if(n instanceof v)return 10;if(n instanceof N)return 11;if(n instanceof m)return 12;throw new Error("Failed pattern match at Web.DOM.NodeType (line 54, column 1 - line 54, column 36): "+[n.constructor.name])},y=new t.Eq(function(n){return function(e){return n instanceof i&&e instanceof i||(n instanceof r&&e instanceof r||(n instanceof c&&e instanceof c||(n instanceof f&&e instanceof f||(n instanceof a&&e instanceof a||(n instanceof s&&e instanceof s||(n instanceof d&&e instanceof d||(n instanceof l&&e instanceof l||(n instanceof w&&e instanceof w||(n instanceof v&&e instanceof v||(n instanceof N&&e instanceof N||n instanceof m&&e instanceof m))))))))))}}),D=new o.Ord(function(){return y},function(n){return function(e){return o.compare(o.ordInt)(p(n))(p(e))}}),E=new e.Enum(function(){return D},e.defaultPred(J)(p),e.defaultSucc(J)(p)),T=new n.Bounded(function(){return D},i.value,m.value),q=new e.BoundedEnum(function(){return T},function(){return E},12,p,J);module.exports={ElementNode:i,AttributeNode:r,TextNode:c,CDATASectionNode:f,EntityReferenceNode:a,EntityNode:s,ProcessingInstructionNode:d,CommentNode:l,DocumentNode:w,DocumentTypeNode:v,DocumentFragmentNode:N,NotationNode:m,eqNodeType:y,ordNodeType:D,boundedNodeType:T,enumNodeType:E,boundedEnumNodeType:q};
-},{"../Data.Bounded/index.js":"kcUU","../Data.Enum/index.js":"oOsU","../Data.Eq/index.js":"Pq4F","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb"}],"P+X4":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),n=require("../Data.Enum/index.js"),t=require("../Data.Functor/index.js"),r=require("../Data.Maybe/index.js"),o=require("../Data.Nullable/index.js"),u=require("../Effect/index.js"),a=require("../Unsafe.Coerce/index.js"),i=require("../Web.DOM.NodeType/index.js"),f=require("../Web.Internal.FFI/index.js"),c=a.unsafeCoerce,d=function(){var n=t.map(u.functorEffect)(o.toMaybe);return function(t){return n(e._previousSibling(t))}}(),s=function(){var n=t.map(u.functorEffect)(o.toMaybe);return function(t){return n(e._parentNode(t))}}(),l=function(){var n=t.map(u.functorEffect)(o.toMaybe);return function(t){return n(e._parentElement(t))}}(),p=function(){var n=t.map(u.functorEffect)(o.toMaybe);return function(t){return n(e._ownerDocument(t))}}(),m=function(){var n=t.map(u.functorEffect)(o.toMaybe);return function(t){return n(e._nodeValue(t))}}(),b=function(t){var o=r.fromJust(t),u=n.toEnum(i.boundedEnumNodeType);return function(n){return o(u(e.nodeTypeIndex(n)))}},x=function(){var n=t.map(u.functorEffect)(o.toMaybe);return function(t){return n(e._nextSibling(t))}}(),C=function(n){var r=t.map(u.functorEffect)(o.toMaybe),a=e._lookupPrefix(n);return function(e){return r(a(e))}},E=function(n){var r=t.map(u.functorEffect)(o.toMaybe),a=e._lookupNamespaceURI(n);return function(e){return r(a(e))}},N=function(){var n=t.map(u.functorEffect)(o.toMaybe);return function(t){return n(e._lastChild(t))}}(),v=f.unsafeReadProtoTagged("Node"),y=function(){var n=t.map(u.functorEffect)(o.toMaybe);return function(t){return n(e._firstChild(t))}}();module.exports={fromEventTarget:v,toEventTarget:c,nodeType:b,ownerDocument:p,parentNode:s,parentElement:l,firstChild:y,lastChild:N,previousSibling:d,nextSibling:x,nodeValue:m,lookupPrefix:C,lookupNamespaceURI:E,nodeTypeIndex:e.nodeTypeIndex,nodeName:e.nodeName,baseURI:e.baseURI,hasChildNodes:e.hasChildNodes,childNodes:e.childNodes,setNodeValue:e.setNodeValue,textContent:e.textContent,setTextContent:e.setTextContent,normalize:e.normalize,clone:e.clone,deepClone:e.deepClone,isEqualNode:e.isEqualNode,compareDocumentPositionBits:e.compareDocumentPositionBits,contains:e.contains,isDefaultNamespace:e.isDefaultNamespace,insertBefore:e.insertBefore,appendChild:e.appendChild,replaceChild:e.replaceChild,removeChild:e.removeChild};
-},{"./foreign.js":"FwXA","../Data.Enum/index.js":"oOsU","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Nullable/index.js":"YQ8o","../Effect/index.js":"oTWB","../Unsafe.Coerce/index.js":"ETUV","../Web.DOM.NodeType/index.js":"vDH/","../Web.Internal.FFI/index.js":"fdUh"}],"VVkU":[function(require,module,exports) {
-
-"use strict";var n=require("./foreign.js"),e=require("../Control.Applicative/index.js"),t=require("../Control.Bind/index.js"),r=require("../Control.Monad.Error.Class/index.js"),i=require("../Data.Array/index.js"),o=require("../Data.Either/index.js"),u=require("../Data.Eq/index.js"),a=require("../Data.Filterable/index.js"),f=require("../Data.Foldable/index.js"),c=require("../Data.Function/index.js"),l=require("../Data.Functor/index.js"),s=require("../Data.HeytingAlgebra/index.js"),d=require("../Data.Int/index.js"),p=require("../Data.Lens.Fold/index.js"),m=require("../Data.Lens.Getter/index.js"),v=require("../Data.Lens.Internal.Forget/index.js"),w=require("../Data.Lens.Iso.Newtype/index.js"),E=require("../Data.Lens.Prism/index.js"),h=require("../Data.Lens.Record/index.js"),g=require("../Data.List/index.js"),x=require("../Data.List.Types/index.js"),y=require("../Data.Map/index.js"),b=require("../Data.Map.Internal/index.js"),C=require("../Data.Maybe/index.js"),M=require("../Data.Maybe.First/index.js"),q=require("../Data.Monoid/index.js"),j=require("../Data.Newtype/index.js"),D=require("../Data.Nullable/index.js"),S=require("../Data.Ord/index.js"),F=require("../Data.Pair/index.js"),B=require("../Data.Ring/index.js"),N=require("../Data.Semiring/index.js"),k=require("../Data.Set/index.js"),I=require("../Data.Show/index.js"),L=require("../Data.Symbol/index.js"),T=require("../Data.Time.Duration/index.js"),R=require("../Data.Traversable/index.js"),_=require("../Data.TraversableWithIndex/index.js"),A=require("../Data.Tuple/index.js"),O=require("../Data.Unfoldable/index.js"),G=require("../Data.Unit/index.js"),P=require("../Data.Variant/index.js"),z=require("../Data.Variant.Internal/index.js"),U=require("../Effect/index.js"),W=require("../Effect.Aff/index.js"),J=require("../Effect.Aff.Class/index.js"),H=require("../Effect.Class/index.js"),V=require("../Effect.Exception/index.js"),Z=require("../Effect.Ref/index.js"),K=require("../Effect.Uncurried/index.js"),X=require("../Genetics.Browser.Cacher/index.js"),Y=require("../Genetics.Browser.Layer/index.js"),Q=require("../Graphics.Canvas/index.js"),$=require("../Graphics.Drawing/index.js"),nn=require("../Graphics.Drawing.Font/index.js"),en=require("../Partial.Unsafe/index.js"),tn=require("../Record/index.js"),rn=require("../Type.Equality/index.js"),on=require("../Unsafe.Coerce/index.js"),un=require("../Web.DOM.Element/index.js"),an=require("../Web.DOM.Node/index.js"),fn=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),cn=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),ln=function(){function n(){}return n.value=new n,n}(),sn=function(){function n(){}return n.value=new n,n}(),dn=function(){function n(){}return n.value=new n,n}(),pn=function(){function n(){}return n.value=new n,n}(),mn=function(n){return n},vn=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),wn=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),En=function(n){return n},hn=function(n){return n},gn=function(e){return function(t){return function(){return n.zoomCanvasImpl(e.back,e.front,{left:t.value0,right:t.value1})}}},xn=function(e){return function(t){return function(r){return n.canvasWheelCBImpl(j.unwrap(e)(t).element)(c.const(r))}}},yn=function(e){return function(){return n.unsafeCreateElementImpl(e.elementType,e.id)}},bn=function(e){return function(t){return function(){return n.setCanvasTranslation(e)(t.back)(),n.setCanvasTranslation(e)(t.front)()}}},Cn=K.runEffectFn3(n.setElementStyleImpl),Mn=function(n){return f.traverse_(U.applicativeEffect)(f.foldableArray)(A.uncurry(Cn(n)))},qn=function(n){return Mn(n)},jn=function(n){return Cn(n)},Dn=function(n){return function(e){return jn(n)("z-index")(I.show(I.showInt)(e))}},Sn=function(n){return function(e){return qn(e)([new A.Tuple("position","absolute"),new A.Tuple("top",I.show(I.showNumber)(n.top)+"px"),new A.Tuple("left",I.show(I.showNumber)(n.left)+"px")])}},Fn=function(e){return K.runEffectFn3(n.scrollCanvasImpl)(e.back)(e.front)},Bn=new j.Newtype(function(n){return n},En),Nn=new j.Newtype(function(n){return n},mn),kn=new j.Newtype(function(n){return n},hn),In=14,Ln=nn.fontString(nn.font(nn.sansSerif)(In)(q.mempty(nn.monoidFontOptions))),Tn=function(n){return function(n){return function(e){return function(){var t=Q.withContext(n)(function(){Q.setFont(n)(Ln)();return Q.measureText(n)(e.text)()})(),r=14+t.width/2,i=function(){if(e.gravity instanceof dn)return e.point.x;if(e.gravity instanceof sn)return e.point.x-r;if(e.gravity instanceof pn)return e.point.x+r;throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 694, column 11 - line 697, column 33): "+[e.gravity.constructor.name])}(),o=d.toNumber(In);return{x:i,y:e.point.y-o,width:t.width,height:o}}}}},Rn=function(n){return function(e){return n.x<e.x+e.width&&n.x+n.width>e.x&&n.y<e.y+e.height&&n.height+n.y>e.y}},_n={width:15,height:300},An=function(n){return function(i){return t.bind(W.bindAff)(H.liftEffect(W.monadEffectAff)(Z.read(i.tracks)))(function(t){var i=b.lookup(S.ordString)(n)(t);if(i instanceof C.Just)return e.pure(W.applicativeAff)(i.value0);if(i instanceof C.Nothing)return r.throwError(W.monadThrowAff)(V.error("Could not find track '"+n+"'!"));throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 448, column 3 - line 452, column 55): "+[i.constructor.name])})}},On=function(n){return function(e){return H.liftEffect(n)(Z.read(e.layers))}},Gn=function(n){return function(e){return H.liftEffect(n)(Z.read(e.dimensions))}},Pn=l.map(l.functorFn)(Q.getContext2D)(function(){var n=j.unwrap(Nn);return function(e){return n(e).front}}()),zn=function(n){return function(e){return function(r){return t.bind(n.Monad0().Bind1())(H.liftEffect(n)(Z.read(e.tracks)))(function(e){return R.for(n.Monad0().Applicative0())(b.traversableMap)(e)(r)})}}},Un=function(n){return function(e){var t=l.void(n.Monad0().Bind1().Apply0().Functor0()),r=zn(n)(e);return function(n){return t(r(n))}}},Wn=new u.Eq(function(n){return function(e){return n instanceof sn&&e instanceof sn||(n instanceof dn&&e instanceof dn||n instanceof pn&&e instanceof pn)}}),Jn=function(e){return K.runEffectFn2(n.elementClickImpl)(e)},Hn=function(e){return function(t){return function(){var r=l.map(U.functorEffect)(on.unsafeCoerce)(yn({elementType:"canvas",id:t}))();return n.initializeCanvasImpl(r,e),r}}},Vn=function(e){return function(t){return function(r){return function(){var i=yn({elementType:"div",id:r})();n.setContainerStyle(i)(e)();var o=Hn(_n)("glyphBuffer")(),u=Z.new({size:e,padding:t})();return{layers:Z.new(q.mempty(b.monoidMap(S.ordString)))(),dimensions:u,element:i,glyphBuffer:o}}}}},Zn=function(n){return function(e){return l.void(U.functorEffect)(Q.clearRect(n)({x:0,y:0,width:e.width,height:e.height}))}},Kn=function(e){return function(t){return function(r){return function(i){return function(){var o=Q.getContext2D(e)(),u=_n.width/2,a=_n.height/2;Zn(o)(_n)(),$.render(o)($.translate(u)(a)(i.drawing))();return n.drawCopies(e,_n,t,function(n){return n.x>=r.value0&&n.x<=r.value1},i.points)}}}}},Xn=function(e){return function(t){var r;return n.canvasDragImpl(e)((r=t,function(n){var e=D.toMaybe(n.during);if(e instanceof C.Just)return r(new o.Right(e.value0));if(e instanceof C.Nothing)return r(o.Left.create(C.fromMaybe({x:0,y:0})(D.toMaybe(n.total))));throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 311, column 36 - line 313, column 73): "+[e.constructor.name])}))}},Yn=function(n){return function(t){return function(){Z.read(n.tracks)();return Xn(n.element)(function(n){if(n instanceof o.Left)return e.pure(U.applicativeEffect)(G.unit);if(n instanceof o.Right)return t(n.value0);throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 326, column 40 - line 328, column 20): "+[n.constructor.name])})()}}},Qn=function(n){return function(t){return Xn(n.element)(function(n){if(n instanceof o.Left)return e.pure(U.applicativeEffect)(G.unit);if(n instanceof o.Right)return t(n.value0);throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 335, column 40 - line 337, column 20): "+[n.constructor.name])})}},$n=function(n){return function(e){return H.liftEffect(n)(function(){return{tracks:Z.new(q.mempty(b.monoidMap(S.ordString)))(),element:e}})}},ne=function(n){return function(){bn({x:0,y:0})(n)();var e=Q.getCanvasDimensions(n.back)();return f.for_(U.applicativeEffect)(f.foldableArray)([n.back,n.front])(t.composeKleisliFlipped(U.bindEffect)(c.flip(Zn)(e))(Q.getContext2D))()}},ee=function(n){return function(e){return function(){var t={back:Hn(n)(e+"-buffer")(),front:Hn(n)(e)()};return ne(t)(),t}}},te=function(n){return function(e){return function(){Q.setCanvasDimensions(e.back)(n)(),Q.setCanvasDimensions(e.front)(n)();return ne(e)(),G.unit}}},re=function(n){return function(e){return function(t){return H.liftEffect(n)(function(){if(t instanceof vn)return l.void(U.functorEffect)(Q.setCanvasDimensions(t.value0)(e));if(t instanceof wn)return te(e)(t.value0);throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 594, column 3 - line 596, column 45): "+[t.constructor.name])}())}}},ie=function(e){return function(r){return function(i){return H.liftEffect(e)(function(){return Z.modify_(function(n){return{size:r,padding:n.padding}})(i.dimensions)(),n.setContainerStyle(i.element)(r)(),t.bindFlipped(U.bindEffect)(f.traverse_(U.applicativeEffect)(b.foldableMap)(re(H.monadEffectEffect)(r)))(On(H.monadEffectEffect)(i))()})}}},oe=function(e){return function(t){return n.appendElem(e)(t)}},ue=function(n){return function(e){return f.any(x.foldableList)(s.heytingAlgebraBoolean)(function(n){return!u.eq(u.eqRec()(u.eqRowCons(u.eqRowCons(u.eqRowCons(u.eqRowCons(u.eqRowNil)()(new L.IsSymbol(function(){return"y"}))(u.eqNumber))()(new L.IsSymbol(function(){return"x"}))(u.eqNumber))()(new L.IsSymbol(function(){return"width"}))(u.eqNumber))()(new L.IsSymbol(function(){return"height"}))(u.eqNumber)))(e.rect)(n.rect)&&Rn(e.rect)(n.rect)})(n)?n:new x.Cons(e,n)}},ae=function(n){return function(e){return function(t){var r=a.filter(a.filterableArray)(function(e){return e.point.x<n.value1&&e.point.x+100>n.value0})(i.fromFoldable(x.foldableList)(e));return function(){var e=R.for(U.applicativeEffect)(R.traversableArray)(r)(function(e){return l.map(U.functorEffect)(function(n){return{text:e.text,rect:n}})(Tn(n)(t)(e))})(),i=f.foldl(f.foldableArray)(ue)(q.mempty(x.monoidList))(e);return Q.withContext(t)(function(){Q.setFont(t)(Ln)();return f.for_(U.applicativeEffect)(x.foldableList)(i)(function(n){return Q.fillText(t)(n.text)(n.rect.x-n.rect.width/2)(n.rect.y)})()})()}}}},fe=function(e){return function(t){return function(r){return function(i){return H.liftEffect(e)(function(){return Z.modify_(b.insert(S.ordString)(r)(j.wrap(Bn)(i)))(t.tracks)(),n.appendElem(t.element)(i.element)()})}}}},ce=L.SProxy.value,le=L.SProxy.value,se=L.SProxy.value,de=L.SProxy.value,pe=function(n){return E["prism'"](vn.create)(function(n){if(n instanceof vn)return new C.Just(n.value0);if(n instanceof wn)return C.Nothing.value;throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 769, column 27 - line 771, column 23): "+[n.constructor.name])})(n)},me=function(n){var e=w._Newtype(Bn)(Bn)(n.Profunctor0()),t=h.prop(new L.IsSymbol(function(){return"layers"}))()()(L.SProxy.value)(n);return function(n){return e(t(n))}},ve=m.to(function(n){if(n instanceof vn)return n.value0;if(n instanceof wn)return j.unwrap(Nn)(n.value0).front;throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 759, column 19 - line 761, column 31): "+[n.constructor.name])}),we=function(n){return function(r){return function(i){return function(o){return function(u){return function(a){return t.bind(n.MonadEffect0().Monad0().Bind1())(l.map(n.MonadEffect0().Monad0().Bind1().Apply0().Functor0())(function(n){return n.size})(Gn(n.MonadEffect0())(o)))(function(c){return t.bind(n.MonadEffect0().Monad0().Bind1())(Gn(n.MonadEffect0())(o))(function(s){var d={left:0,top:0},p=function(n){return m.viewOn(a.value2)(Y._Component)(new A.Tuple(n,Y.slotSize(s)(Y.asSlot(a.value2))))};return t.bind(n.MonadEffect0().Monad0().Bind1())(H.liftEffect(n.MonadEffect0())(function(){var n=function(){if(a.value0 instanceof Y.Fixed)return l.map(U.functorEffect)(vn.create)(Hn(c)(u))();if(a.value0 instanceof Y.Scrolling)return l.map(U.functorEffect)(wn.create)(ee(c)(u))();throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 812, column 11 - line 814, column 67): "+[a.value0.constructor.name])}();return Sn(d)(m.viewOn(n)(ve))(),n}))(function(c){var s=j.unwrap(Bn)(o).layers;return t.discard(t.discardUnit)(n.MonadEffect0().Monad0().Bind1())(H.liftEffect(n.MonadEffect0())(function(){return Z.modify_(b.insert(S.ordString)(u)(c))(s)(),oe(j.unwrap(Bn)(o).element)(m.viewOn(c)(ve))()}))(function(){return t.bind(n.MonadEffect0().Monad0().Bind1())(J.liftAff(n)(X.new(r)(i)(p)))(function(r){return e.pure(n.MonadEffect0().Monad0().Applicative0())({drawOnCanvas:function(r){return function(i){return t.bind(n.MonadEffect0().Monad0().Bind1())(On(n.MonadEffect0())(o))(function(c){return t.bind(n.MonadEffect0().Monad0().Bind1())(function(){var t=b.lookup(S.ordString)(u)(c);if(t instanceof C.Nothing)return en.unsafeCrashWith("Tried to render layer '"+u+"', but it did not exist!");if(t instanceof C.Just)return e.pure(n.MonadEffect0().Monad0().Applicative0())(m.viewOn(t.value0)(ve));throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 830, column 16 - line 832, column 53): "+[t.constructor.name])}())(function(u){return t.bind(n.MonadEffect0().Monad0().Bind1())(Gn(n.MonadEffect0())(o))(function(c){return t.bind(n.MonadEffect0().Monad0().Bind1())(Y.slotContext(n.MonadEffect0())(a)(c)(u))(function(u){return t.discard(t.discardUnit)(n.MonadEffect0().Monad0().Bind1())(H.liftEffect(n.MonadEffect0())(Q.withContext(u)(function(){return Y.setContextTranslation(N.zero(N.semiringRecord()(N.semiringRecordCons(new L.IsSymbol(function(){return"x"}))()(N.semiringRecordCons(new L.IsSymbol(function(){return"y"}))()(N.semiringRecordNil)(N.semiringNumber))(N.semiringNumber))))(u)(),l.void(U.functorEffect)(Q.clearRect(u)(tn.merge()()({x:0,y:0})(c.size)))()})))(function(){return t.bind(n.MonadEffect0().Monad0().Bind1())(H.liftEffect(n.MonadEffect0())(Q.translate(u)({translateX:-r.value0,translateY:0})))(function(a){var c=function(e){return H.liftEffect(n.MonadEffect0())(ae(new F.Pair(r.value0,r.value1))(e)(u))},l=function(e){return H.liftEffect(n.MonadEffect0())(f.for_(U.applicativeEffect)(f.foldableArray)(e)(Kn(j.unwrap(Bn)(o).glyphBuffer)(u)(new F.Pair(r.value0,r.value1))))},s=function(e){return H.liftEffect(n.MonadEffect0())($.render(u)(e))},d=function(t){return H.liftEffect(n.MonadEffect0())(e.when(U.applicativeEffect)(t.topLeft.x<=r.value1&&t.bottomRight.x>=r.value0)($.render(u)($.translate(t.topLeft.x)(t.topLeft.y)(t.drawing(G.unit)))))},p=O.unfoldr(x.unfoldableList)(function(n){return g.null(n)?C.Nothing.value:new C.Just(new A.Tuple(g.take(250)(n),g.drop(250)(n)))})(i);return f.for_(n.MonadEffect0().Monad0().Applicative0())(x.foldableList)(p)(function(e){return t.discard(t.discardUnit)(n.MonadEffect0().Monad0().Bind1())(f.for_(n.MonadEffect0().Monad0().Applicative0())(x.foldableList)(e)(function(n){return P.onMatch()(z.variantMatchCons(z.variantMatchCons(z.variantMatchCons(z.variantMatchCons(z.variantMatchNil)()(rn.refl))()(rn.refl))()(rn.refl))()(rn.refl))()({drawing:s,bigDrawing:d,drawingBatch:l,labels:c})(P.case_)(n)}))(function(){return J.liftAff(n)(W.delay(j.wrap(T.newtypeMilliseconds)(.01)))})})})})})})})})}},run:r.run,last:r.last})})})})})})}}}}}},Ee=function(n){return function(e){return function(t){return H.liftEffect(n)(function(){var n=Z.read(e.layers)(),r=y.keys(n);f.length(k.foldableSet)(N.semiringInt)(r);return g.null(g.difference(u.eqString)(t)(g.fromFoldable(k.foldableSet)(r)))?l.void(U.functorEffect)(_.forWithIndex(U.applicativeEffect)(x.traversableWithIndexList)(t)(function(e){return function(t){return f.traverse_(U.applicativeEffect)(f.foldableMaybe)(function(n){return Dn(m.viewOn(n)(ve))(e)})(b.lookup(S.ordString)(t)(n))}}))():en.unsafeCrashWith("Called `zIndexLayers` with an order that did not contain all layers")()})}}},he=function(n){return function(e){var t=w._Newtype(n)(n)(e.Profunctor0()),r=h.prop(new L.IsSymbol(function(){return"element"}))()()(L.SProxy.value)(e);return function(n){return t(r(n))}}},ge=function(n){return function(e){return function(t){return function(r){return H.liftEffect(n)(function(){var n=On(H.monadEffectEffect)(e)();Z.modify_(b.insert(S.ordString)(t)(r))(m.viewOn(e)(me(v.strongForget)))();var i=function(n){return m.viewOn(n)(ve)};return l.void(U.functorEffect)(function(){var o=b.lookup(S.ordString)(t)(n);if(o instanceof C.Just)return an.replaceChild(i(r))(i(o.value0))(m.viewOn(e)(he(Bn)(v.strongForget)));if(o instanceof C.Nothing)return an.appendChild(i(r))(m.viewOn(e)(he(Bn)(v.strongForget)));throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 613, column 10 - line 615, column 95): "+[o.constructor.name])}())()})}}}},xe=function(n){return function(e){return function(t){return H.liftEffect(n)(function(){var n=On(H.monadEffectEffect)(e)();return function(){var r,i=b.lookup(S.ordString)(t)(n);if(i instanceof C.Nothing)return G.unit;if(i instanceof C.Just)return l.void(U.functorEffect)(an.removeChild((r=i.value0,m.viewOn(r)(ve)))(m.viewOn(e)(he(Bn)(v.strongForget))))();throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 628, column 3 - line 630, column 83): "+[i.constructor.name])}(),Z.modify_(b.delete(S.ordString)(t))(m.viewOn(e)(me(v.strongForget)))()})}}},ye=function(n){return function(e){return function(t){return H.liftEffect(n)(function(){var n=Gn(H.monadEffectEffect)(e)(),r=m.viewOn(t)(Y._Component);return Jn(m.viewOn(e)(he(Bn)(v.strongForget)))(function(e){return r((i=e,B.sub(B.ringRecord()(B.ringRecordCons(new L.IsSymbol(function(){return"x"}))()(B.ringRecordCons(new L.IsSymbol(function(){return"y"}))()(B.ringRecordNil)(B.ringNumber))(B.ringNumber)))(i)(Y.slotOffset(n)(Y.asSlot(t)))));var i})()})}}},be=function(e){return function(t){return function(){var r=Gn(H.monadEffectEffect)(e)(),i=m.viewOn(t)(Y._Component);return n.canvasWheelCBImpl(m.viewOn(e)(he(Bn)(v.strongForget)))(function(n){return i((e=n,B.sub(B.ringRecord()(B.ringRecordCons(new L.IsSymbol(function(){return"x"}))()(B.ringRecordCons(new L.IsSymbol(function(){return"y"}))()(B.ringRecordNil)(B.ringNumber))(B.ringNumber)))(e)(Y.slotOffset(r)(Y.asSlot(t)))));var e})()}}},Ce=function(n){return function(r){return function(i){var o=un.toNode(m.viewOn(r)(he(Bn)(v.strongForget)));return t.discard(t.discardUnit)(n.Monad0().Bind1())(H.liftEffect(n)(an.setTextContent("loading")(o)))(function(){return t.bind(n.Monad0().Bind1())(i)(function(r){return t.discard(t.discardUnit)(n.Monad0().Bind1())(H.liftEffect(n)(an.setTextContent("")(o)))(function(){return e.pure(n.Monad0().Applicative0())(r)})})})}}},Me=function(n){return E["prism'"](wn.create)(function(n){if(n instanceof vn)return C.Nothing.value;if(n instanceof wn)return new C.Just(n.value0);throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 765, column 9 - line 765, column 34): "+[n.constructor.name])})(n)},qe=function(n){return function(t){return function(){var r=Z.read(n.layers)(),i=a.filterMap(a.filterableMap(S.ordString))(p.preview(Me(v.choiceForget(M.monoidFirst))))(r);return f.for_(U.applicativeEffect)(b.foldableMap)(i)(function(r){if(t instanceof fn)return function(){var e=l.map(U.functorEffect)(function(n){return Y.trackSlots(n).center.size.width})(Gn(H.monadEffectEffect)(j.wrap(Bn)(n)))();return Fn(r)({x:-t.value0*e,y:0})()};if(t instanceof cn)return gn(r)(t.value0);if(t instanceof ln)return e.pure(U.applicativeEffect)(G.unit);throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 284, column 26 - line 293, column 29): "+[t.constructor.name])})()}}},je=function(n){return function(e){return function(){var t=Z.read(n.layers)(),r=a.filterMap(a.filterableMap(S.ordString))(p.preview(Me(v.choiceForget(M.monoidFirst))))(t);return f.for_(U.applicativeEffect)(b.foldableMap)(r)(function(n){return Fn(n)(e)})()}}};module.exports={LLeft:sn,LCenter:dn,LRight:pn,_drawing:se,_bigDrawing:de,_drawingBatch:le,_labels:ce,newLayer:we,getDimensions:Gn,_Container:he,dragScroll:Yn,dragScrollTrack:Qn,wheelZoom:xn,trackWheel:be,trackClickHandler:ye,trackContainer:Vn,withLoadingIndicator:Ce,setTrackContainerSize:ie,setElementStyle:Cn,browserContainer:$n,addTrack:fe,getTrack:An,forTracks:zn,forTracks_:Un,Scrolling:fn,Zooming:cn,Jump:ln,animateTrack:qe,newtypeBrowserContainer:kn,eqLabelPlace:Wn};
-},{"./foreign.js":"KkC9","../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Monad.Error.Class/index.js":"L8Lk","../Data.Array/index.js":"4t4C","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Filterable/index.js":"6hfS","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Int/index.js":"xNJb","../Data.Lens.Fold/index.js":"fCig","../Data.Lens.Getter/index.js":"OPOX","../Data.Lens.Internal.Forget/index.js":"mj9z","../Data.Lens.Iso.Newtype/index.js":"CiFJ","../Data.Lens.Prism/index.js":"4AcV","../Data.Lens.Record/index.js":"nwoH","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Map/index.js":"62zx","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Maybe.First/index.js":"W/l6","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Nullable/index.js":"YQ8o","../Data.Ord/index.js":"r4Vb","../Data.Pair/index.js":"PpsX","../Data.Ring/index.js":"E2qH","../Data.Semiring/index.js":"11NF","../Data.Set/index.js":"+Eae","../Data.Show/index.js":"mFY7","../Data.Symbol/index.js":"4oJQ","../Data.Time.Duration/index.js":"AnkF","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unit/index.js":"NhVk","../Data.Variant/index.js":"hgdh","../Data.Variant.Internal/index.js":"kYoO","../Effect/index.js":"oTWB","../Effect.Aff/index.js":"I7lu","../Effect.Aff.Class/index.js":"I4H+","../Effect.Class/index.js":"dWtH","../Effect.Exception/index.js":"0OCW","../Effect.Ref/index.js":"/Jaj","../Effect.Uncurried/index.js":"qn3Z","../Genetics.Browser.Cacher/index.js":"61ee","../Genetics.Browser.Layer/index.js":"YWUW","../Graphics.Canvas/index.js":"rm6N","../Graphics.Drawing/index.js":"0WVi","../Graphics.Drawing.Font/index.js":"fMOI","../Partial.Unsafe/index.js":"aoR+","../Record/index.js":"0gG4","../Type.Equality/index.js":"Uq/R","../Unsafe.Coerce/index.js":"ETUV","../Web.DOM.Element/index.js":"S4h2","../Web.DOM.Node/index.js":"P+X4"}],"eqin":[function(require,module,exports) {
-"use strict";exports.unsafeReadPropImpl=function(r,t,e,n){return null==n?r:t(n[e])},exports.unsafeHasOwnProperty=function(r,t){return Object.prototype.hasOwnProperty.call(t,r)},exports.unsafeHasProperty=function(r,t){return r in t};
-},{}],"Ryy1":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),n=require("../Control.Applicative/index.js"),r=require("../Control.Bind/index.js"),t=require("../Control.Monad.Except.Trans/index.js"),i=require("../Data.Function/index.js"),o=require("../Data.Identity/index.js"),u=require("../Foreign/index.js"),d=function(e){this.ix=e},f=function(e,n,r,t){this.errorAt=e,this.hasOwnProperty=n,this.hasProperty=r,this.index=t},a=function(r){return function(i){return e.unsafeReadPropImpl(u.fail(new u.TypeMismatch("object",u.typeOf(i))),n.pure(t.applicativeExceptT(o.monadIdentity)),r,i)}},c=a,p=a,s=function(e){return e.ix},x=function(e){return e.index},l=new d(function(e){return function(n){return function(u){return r.bindFlipped(t.bindExceptT(o.monadIdentity))(i.flip(x(e))(u))(n)}}}),y=new d(function(e){return x(e)}),h=function(n){return function(r){return!u.isNull(r)&&(!u.isUndefined(r)&&(("object"===u.typeOf(r)||"function"===u.typeOf(r))&&e.unsafeHasProperty(n,r)))}},P=function(e){return e.hasProperty},j=function(n){return function(r){return!u.isNull(r)&&(!u.isUndefined(r)&&(("object"===u.typeOf(r)||"function"===u.typeOf(r))&&e.unsafeHasOwnProperty(n,r)))}},w=new f(u.ErrorAtIndex.create,j,h,i.flip(p)),I=new f(u.ErrorAtProperty.create,j,h,i.flip(c)),O=function(e){return e.hasOwnProperty},b=function(e){return e.errorAt};module.exports={Index:f,Indexable:d,readProp:c,readIndex:p,ix:s,index:x,hasProperty:P,hasOwnProperty:O,errorAt:b,indexString:I,indexInt:w,indexableForeign:y,indexableExceptT:l};
-},{"./foreign.js":"eqin","../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Monad.Except.Trans/index.js":"gr8B","../Data.Function/index.js":"ImXJ","../Data.Identity/index.js":"2OKT","../Foreign/index.js":"pu1p"}],"71qG":[function(require,module,exports) {
-"use strict";var e=require("../Control.Applicative/index.js"),r=require("../Control.Monad.Except.Trans/index.js"),n=require("../Data.Boolean/index.js"),t=require("../Data.Identity/index.js"),i=require("../Foreign/index.js"),a=function(e){return"Object"===i.tagOf(e)},o=function(o){if(a(o))return e.pure(r.applicativeExceptT(t.monadIdentity))(i.unsafeFromForeign(o));if(n.otherwise)return i.fail(new i.TypeMismatch("Object",i.tagOf(o)));throw new Error("Failed pattern match at Foreign.Generic.Internal (line 13, column 1 - line 13, column 44): "+[o.constructor.name])};module.exports={isObject:a,readObject:o};
-},{"../Control.Applicative/index.js":"qYya","../Control.Monad.Except.Trans/index.js":"gr8B","../Data.Boolean/index.js":"ObQr","../Data.Identity/index.js":"2OKT","../Foreign/index.js":"pu1p"}],"dhzu":[function(require,module,exports) {
-exports.null=null,exports[void 0]=void 0;
-},{}],"k5yP":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),n=require("../Control.Applicative/index.js"),r=require("../Control.Monad.Except.Trans/index.js"),i=require("../Data.Functor/index.js"),t=require("../Data.Identity/index.js"),u=require("../Data.Maybe/index.js"),d=require("../Foreign/index.js"),a=function(e){return function(a){return d.isNull(a)||d.isUndefined(a)?n.pure(r.applicativeExceptT(t.monadIdentity))(u.Nothing.value):i.map(r.functorExceptT(t.functorIdentity))(u.Just.create)(e(a))}};module.exports={readNullOrUndefined:a,undefined:e[void 0],null:e.null};
-},{"./foreign.js":"dhzu","../Control.Applicative/index.js":"qYya","../Control.Monad.Except.Trans/index.js":"gr8B","../Data.Functor/index.js":"+0AE","../Data.Identity/index.js":"2OKT","../Data.Maybe/index.js":"5mN7","../Foreign/index.js":"pu1p"}],"cO3i":[function(require,module,exports) {
-"use strict";function r(r){return function(n){var t=[];for(var e in n)hasOwnProperty.call(n,e)&&t.push(r(e)(n[e]));return t}}exports._copyST=function(r){return function(){var n={};for(var t in r)hasOwnProperty.call(r,t)&&(n[t]=r[t]);return n}},exports.empty={},exports.runST=function(r){return r()},exports._fmapObject=function(r,n){var t={};for(var e in r)hasOwnProperty.call(r,e)&&(t[e]=n(r[e]));return t},exports._mapWithKey=function(r,n){var t={};for(var e in r)hasOwnProperty.call(r,e)&&(t[e]=n(e)(r[e]));return t},exports._foldM=function(r){return function(n){return function(t){return function(e){var o=t;function u(r){return function(t){return n(t)(r)(e[r])}}for(var i in e)hasOwnProperty.call(e,i)&&(o=r(o)(u(i)));return o}}}},exports._foldSCObject=function(r,n,t,e){var o=n;for(var u in r)if(hasOwnProperty.call(r,u)){var i=t(o)(u)(r[u]),f=e(null)(i);if(null===f)return o;o=f}return o},exports.all=function(r){return function(n){for(var t in n)if(hasOwnProperty.call(n,t)&&!r(t)(n[t]))return!1;return!0}},exports.size=function(r){var n=0;for(var t in r)hasOwnProperty.call(r,t)&&++n;return n},exports._lookup=function(r,n,t,e){return t in e?n(e[t]):r},exports._unsafeDeleteObject=function(r,n){return delete r[n],r},exports._lookupST=function(r,n,t,e){return function(){return t in e?n(e[t]):r}},exports.toArrayWithKey=r,exports.keys=Object.keys||r(function(r){return function(){return r}});
-},{}],"hgKu":[function(require,module,exports) {
-"use strict";exports.new=function(){return{}},exports.peekImpl=function(n){return function(t){return function(r){return function(e){return function(){return{}.hasOwnProperty.call(e,r)?n(e[r]):t}}}}},exports.poke=function(n){return function(t){return function(r){return function(){return r[n]=t,r}}}},exports.delete=function(n){return function(t){return function(){return delete t[n],t}}};
-},{}],"fXGJ":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),r=require("../Data.Maybe/index.js"),t=e.peekImpl(r.Just.create)(r.Nothing.value);module.exports={peek:t,new:e.new,poke:e.poke,delete:e.delete};
-},{"./foreign.js":"hgKu","../Data.Maybe/index.js":"5mN7"}],"jsiz":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),u=require("../Control.Category/index.js"),o=require("../Control.Monad.ST.Internal/index.js"),i=require("../Data.Array/index.js"),c=require("../Data.Eq/index.js"),f=require("../Data.Foldable/index.js"),a=require("../Data.FoldableWithIndex/index.js"),l=require("../Data.Function/index.js"),d=require("../Data.Function.Uncurried/index.js"),p=require("../Data.Functor/index.js"),s=require("../Data.FunctorWithIndex/index.js"),b=require("../Data.Maybe/index.js"),y=require("../Data.Monoid/index.js"),j=require("../Data.Ord/index.js"),m=require("../Data.Semigroup/index.js"),h=require("../Data.Show/index.js"),x=require("../Data.Traversable/index.js"),v=require("../Data.TraversableWithIndex/index.js"),q=require("../Data.Tuple/index.js"),T=require("../Data.Unfoldable/index.js"),S=require("../Foreign.Object.ST/index.js"),w=require("../Unsafe.Coerce/index.js"),F=n.toArrayWithKey(function(n){return function(n){return n}}),W=function(r){var e=i.toUnfoldable(r),t=n.toArrayWithKey(q.Tuple.create);return function(n){return e(t(n))}},A=function(r){var e=i.toUnfoldable(r),t=i.sortWith(j.ordString)(q.fst),u=n.toArrayWithKey(q.Tuple.create);return function(n){return e(t(u(n)))}},O=A(T.unfoldableArray),g=n.toArrayWithKey(q.Tuple.create),D=n._copyST,k=function(r){return function(e){return n.runST(t.bindFlipped(o.bindST)(S.poke(r)(e))(S.new))}},_=function(n){return new h.Show(function(r){return"(fromFoldable "+h.show(h.showArray(q.showTuple(h.showString)(n)))(g(r))+")"})},I=function(r){return function(e){return n.runST(function(){var n=D(e)();r(n)();return n})}},K=d.runFn4(n._lookup)(!1)(l.const(!0)),M=function(r){return function(e){return n._mapWithKey(e,r)}},C=d.runFn4(n._lookup)(b.Nothing.value)(b.Just.create),U=function(r){return function(e){return function(t){return n.all(function(e){return function(u){return n._lookup(!1,c.eq(r)(u),e,t)}})(e)}}},E=n.all(function(n){return function(n){return!1}}),z=function(n){return function(r){return I(S.poke(n)(r))}},N=new p.Functor(function(r){return function(e){return n._fmapObject(e,r)}}),B=new s.FunctorWithIndex(function(){return N},M),J=function(n){return w.unsafeCoerce},H=function(r){return function(e){return function(t){return n.runST(function(){var u=S.new();return f.for_(o.applicativeST)(r)(t)(function(r){return function(){var t=n._lookupST(r.value1,e(r.value1),r.value0,u)();return S.poke(r.value0)(t)(u)()}})(),u})}}},G=function(r){return function(e){return n.runST(function(){var n=S.new();return o.foreach(i.fromFoldable(r)(e))(function(r){return p.void(o.functorST)(S.poke(r.value0)(r.value1)(n))})(),n})}},L=n._copyST,P=function(r){return function(e){return function(t){return n._foldSCObject(t,e,r,b.fromMaybe)}}},Q=function(e){return function(u){return function(o){return n._foldM(t.bind(e.Bind1()))(u)(r.pure(e.Applicative0())(o))}}},R=function(r){return new m.Semigroup(function(e){return function(t){return I(function(u){return Q(o.monadST)(function(e){return function(u){return function(o){return S.poke(u)(n._lookup(o,function(n){return m.append(r)(n)(o)},u,t))(e)}}})(u)(e)})(t)}})},V=function(r){return new y.Monoid(function(){return R(r)},n.empty)},X=function(n){return I(function(r){return Q(o.monadST)(function(n){return function(r){return function(e){return S.poke(r)(e)(n)}}})(r)(n)})},Y=function(r){return f.foldl(r)(X)(n.empty)},Z=n._foldM(l.applyFlipped),$=function(n){return function(r){return Z(function(e){return function(t){return function(u){return m.append(n.Semigroup0())(e)(r(t)(u))}}})(y.mempty(n))}},nn=new f.Foldable(function(n){return function(r){return $(n)(l.const(r))}},function(n){return Z(function(r){return function(e){return n(r)}})},function(n){return function(r){return function(e){return f.foldr(f.foldableArray)(n)(r)(F(e))}}}),rn=new a.FoldableWithIndex(function(){return nn},function(n){return $(n)},function(n){return Z(l.flip(n))},function(r){return function(e){return function(t){return f.foldr(f.foldableArray)(q.uncurry(r))(e)(n.toArrayWithKey(q.Tuple.create)(t))}}}),en=new v.TraversableWithIndex(function(){return rn},function(){return B},function(){return tn},function(t){return function(u){return function(o){return Z(function(n){return function(r){return function(o){return e.apply(t.Apply0())(p.map(t.Apply0().Functor0())(l.flip(z(r)))(n))(u(r)(o))}}})(r.pure(t)(n.empty))(o)}}}),tn=new x.Traversable(function(){return nn},function(){return N},function(n){return x.traverse(tn)(n)(u.identity(u.categoryFn))},function(n){var r=v.traverseWithIndex(en)(n);return function(n){return r(l.const(n))}}),un=function(e){return function(t){var u,i=(u=function(n){return function(t){return function(u){return e(t)(u)?S.poke(t)(u)(n):r.pure(o.applicativeST)(n)}}},function(){var n=S.new();return Q(o.monadST)(u)(n)(t)()});return n.runST(i)}},on=function(n){return un(function(r){return l.const(n(r))})},cn=function(n){return un(l.const(n))},fn=function(n){return new c.Eq(function(r){return function(e){return U(n)(r)(e)&&U(n)(e)(r)}})},an=function(n){return new j.Ord(function(){return fn(n.Eq0())},function(r){return function(e){return j.compare(j.ordArray(q.ordTuple(j.ordString)(n)))(O(r))(O(e))}})},ln=new c.Eq1(function(n){return c.eq(fn(n))}),dn=function(n){return I(S.delete(n))},pn=function(n){return function(r){return p.mapFlipped(b.functorMaybe)(C(n)(r))(function(e){return new q.Tuple(e,dn(n)(r))})}},sn=function(n){return function(r){return function(e){var t=n(C(r)(e));if(t instanceof b.Nothing)return dn(r)(e);if(t instanceof b.Just)return z(r)(t.value0)(e);throw new Error("Failed pattern match at Foreign.Object (line 208, column 15 - line 210, column 25): "+[t.constructor.name])}}},bn=function(n){return function(r){return function(e){return sn(b.maybe(b.Nothing.value)(n))(r)(e)}}};module.exports={isEmpty:E,singleton:k,insert:z,lookup:C,toUnfoldable:W,toAscUnfoldable:A,fromFoldable:G,fromFoldableWith:H,fromHomogeneous:J,delete:dn,pop:pn,member:K,alter:sn,update:bn,mapWithKey:M,filterWithKey:un,filterKeys:on,filter:cn,values:F,union:X,unions:Y,isSubmap:U,fold:Z,foldMap:$,foldM:Q,foldMaybe:P,thawST:D,freezeST:L,functorObject:N,functorWithIndexObject:B,foldableObject:nn,foldableWithIndexObject:rn,traversableObject:tn,traversableWithIndexObject:en,eqObject:fn,eq1Object:ln,ordObject:an,showObject:_,semigroupObject:R,monoidObject:V,empty:n.empty,size:n.size,keys:n.keys,all:n.all,runST:n.runST,toArrayWithKey:n.toArrayWithKey};
-},{"./foreign.js":"cO3i","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad.ST.Internal/index.js":"Sedc","../Data.Array/index.js":"4t4C","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.Function.Uncurried/index.js":"TowT","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Foreign.Object.ST/index.js":"fXGJ","../Unsafe.Coerce/index.js":"ETUV"}],"hJ/N":[function(require,module,exports) {
-"use strict";exports.copyRecord=function(n){var r={};for(var e in n)({}).hasOwnProperty.call(n,e)&&(r[e]=n[e]);return r},exports.unsafeInsert=function(n){return function(r){return function(e){return e[n]=r,e}}},exports.unsafeModify=function(n){return function(r){return function(e){return e[n]=r(e[n]),e}}},exports.unsafeDelete=function(n){return function(r){return delete r[n],r}},exports.unsafeRename=function(n){return function(r){return function(e){return e[r]=e[n],delete e[n],e}}};
-},{}],"VeY4":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Control.Category/index.js"),e=require("../Control.Semigroupoid/index.js"),u=require("../Data.Symbol/index.js"),t=require("../Record.Unsafe.Union/index.js"),o=require("../Unsafe.Coerce/index.js"),i=function(n){return n},f=function(n){return function(n){return function(r){return t.unsafeUnionFn(r,n)}}},c=e.semigroupoidFn,s=function(r){return function(e){return function(t){return function(t){return function(t){return function(t){return function(t){return function(o){return function(i){return n.unsafeRename(u.reflectSymbol(r)(t))(u.reflectSymbol(e)(o))(i)}}}}}}}}},l=function(n){return o.unsafeCoerce},a=function(r){return function(r){return function(r){return function(e){return function(t){return function(o){return n.unsafeModify(u.reflectSymbol(r)(e))(t)(o)}}}}}},d=function(n){return function(n){return function(n){return function(r){return t.unsafeUnionFn(r,n)}}}},m=function(r){return function(r){return function(r){return function(e){return function(t){return function(o){return n.unsafeInsert(u.reflectSymbol(r)(e))(t)(o)}}}}}},y=function(n){return function(n){return function(n){return function(r){return t.unsafeUnionFn(n,r)}}}},b=function(r){return function(e){return function(e){return function(e){return function(t){return n.unsafeDelete(u.reflectSymbol(r)(e))(t)}}}}},g=r.categoryFn,j=function(r){return function(e){return r(n.copyRecord(e))}};module.exports={build:j,insert:m,modify:a,delete:b,rename:s,merge:d,union:f,disjointUnion:y,nub:l,semigroupoidBuilder:c,categoryBuilder:g};
-},{"./foreign.js":"hJ/N","../Control.Category/index.js":"IAi2","../Control.Semigroupoid/index.js":"/riR","../Data.Symbol/index.js":"4oJQ","../Record.Unsafe.Union/index.js":"WmUk","../Unsafe.Coerce/index.js":"ETUV"}],"ZOFT":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),e=require("../Control.Bind/index.js"),u=require("../Control.Monad/index.js"),t=require("../Data.BooleanAlgebra/index.js"),o=require("../Data.Bounded/index.js"),i=require("../Data.CommutativeRing/index.js"),a=require("../Data.Eq/index.js"),c=require("../Data.Functor/index.js"),f=require("../Data.HeytingAlgebra/index.js"),l=require("../Data.Ord/index.js"),v=require("../Data.Ordering/index.js"),x=require("../Data.Ring/index.js"),d=require("../Data.Semigroup/index.js"),y=require("../Data.Semiring/index.js"),g=require("../Data.Show/index.js"),w=function(){function n(){}return n.value=new n,n}(),P=function(){function n(){}return n.value=new n,n}(),s=function(){function n(){}return n.value=new n,n}(),m=new g.Show(function(n){return"Proxy3"}),b=new g.Show(function(n){return"Proxy2"}),q=new g.Show(function(n){return"Proxy"}),p=new y.Semiring(function(n){return function(n){return w.value}},function(n){return function(n){return w.value}},w.value,w.value),A=new y.Semiring(function(n){return function(n){return P.value}},function(n){return function(n){return P.value}},P.value,P.value),j=new y.Semiring(function(n){return function(n){return s.value}},function(n){return function(n){return s.value}},s.value,s.value),D=new d.Semigroup(function(n){return function(n){return w.value}}),S=new d.Semigroup(function(n){return function(n){return P.value}}),R=new d.Semigroup(function(n){return function(n){return s.value}}),h=new x.Ring(function(){return p},function(n){return function(n){return w.value}}),B=new x.Ring(function(){return A},function(n){return function(n){return P.value}}),C=new x.Ring(function(){return j},function(n){return function(n){return s.value}}),E=new f.HeytingAlgebra(function(n){return function(n){return w.value}},function(n){return function(n){return w.value}},w.value,function(n){return function(n){return w.value}},function(n){return w.value},w.value),O=new f.HeytingAlgebra(function(n){return function(n){return P.value}},function(n){return function(n){return P.value}},P.value,function(n){return function(n){return P.value}},function(n){return P.value},P.value),H=new f.HeytingAlgebra(function(n){return function(n){return s.value}},function(n){return function(n){return s.value}},s.value,function(n){return function(n){return s.value}},function(n){return s.value},s.value),Q=new c.Functor(function(n){return function(n){return s.value}}),F=new a.Eq(function(n){return function(n){return!0}}),M=new l.Ord(function(){return F},function(n){return function(n){return v.EQ.value}}),k=new a.Eq(function(n){return function(n){return!0}}),z=new l.Ord(function(){return k},function(n){return function(n){return v.EQ.value}}),G=new a.Eq(function(n){return function(n){return!0}}),I=new l.Ord(function(){return G},function(n){return function(n){return v.EQ.value}}),J=new e.Discard(function(n){return e.bind(n)}),K=new e.Discard(function(n){return e.bind(n)}),L=new e.Discard(function(n){return e.bind(n)}),N=new i.CommutativeRing(function(){return h}),T=new i.CommutativeRing(function(){return B}),U=new i.CommutativeRing(function(){return C}),V=new o.Bounded(function(){return M},w.value,w.value),W=new o.Bounded(function(){return z},P.value,P.value),X=new o.Bounded(function(){return I},s.value,s.value),Y=new t.BooleanAlgebra(function(){return E}),Z=new t.BooleanAlgebra(function(){return O}),$=new t.BooleanAlgebra(function(){return H}),_=new r.Apply(function(){return Q},function(n){return function(n){return s.value}}),nn=new e.Bind(function(){return _},function(n){return function(n){return s.value}}),rn=new n.Applicative(function(){return _},function(n){return s.value}),en=new u.Monad(function(){return rn},function(){return nn});module.exports={Proxy:s,Proxy2:P,Proxy3:w,eqProxy:G,functorProxy:Q,ordProxy:I,applicativeProxy:rn,applyProxy:_,bindProxy:nn,booleanAlgebraProxy:$,boundedProxy:X,commutativeRingProxy:U,discardProxy:L,heytingAlgebraProxy:H,monadProxy:en,ringProxy:C,semigroupProxy:R,semiringProxy:j,showProxy:q,eqProxy2:k,ordProxy2:z,booleanAlgebraProxy2:Z,boundedProxy2:W,commutativeRingProxy2:T,discardProxy2:K,heytingAlgebraProxy2:O,ringProxy2:B,semigroupProxy2:S,semiringProxy2:A,showProxy2:b,eqProxy3:F,ordProxy3:M,booleanAlgebraProxy3:Y,boundedProxy3:V,commutativeRingProxy3:N,discardProxy3:J,heytingAlgebraProxy3:E,ringProxy3:h,semigroupProxy3:D,semiringProxy3:p,showProxy3:m};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.BooleanAlgebra/index.js":"e7y+","../Data.Bounded/index.js":"kcUU","../Data.CommutativeRing/index.js":"60TQ","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Ring/index.js":"E2qH","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7"}],"aDiV":[function(require,module,exports) {
-"use strict";var n=require("../Control.Alt/index.js"),e=require("../Control.Applicative/index.js"),t=require("../Control.Bind/index.js"),r=require("../Control.Category/index.js"),i=require("../Control.Monad.Except/index.js"),o=require("../Control.Monad.Except.Trans/index.js"),u=require("../Control.Semigroupoid/index.js"),c=require("../Data.Array/index.js"),d=require("../Data.Bifunctor/index.js"),a=require("../Data.Either/index.js"),s=require("../Data.Foldable/index.js"),f=require("../Data.Function/index.js"),p=require("../Data.Functor/index.js"),l=require("../Data.Generic.Rep/index.js"),m=require("../Data.Identity/index.js"),g=require("../Data.List/index.js"),E=require("../Data.List.Types/index.js"),x=require("../Data.Maybe/index.js"),y=require("../Data.Monoid/index.js"),w=require("../Data.Newtype/index.js"),v=require("../Data.Semigroup/index.js"),T=require("../Data.Show/index.js"),b=require("../Data.Symbol/index.js"),h=require("../Data.Traversable/index.js"),I=require("../Data.Unfoldable/index.js"),A=require("../Data.Unit/index.js"),F=require("../Data.Void/index.js"),D=require("../Foreign/index.js"),j=require("../Foreign.Generic.Internal/index.js"),q=require("../Foreign.Index/index.js"),S=require("../Foreign.NullOrUndefined/index.js"),N=require("../Foreign.Object/index.js"),O=require("../Record/index.js"),R=require("../Record.Builder/index.js"),C=require("../Type.Data.RowList/index.js"),L=require("../Type.Proxy/index.js"),P=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),W=function(n){this.encodeArgs=n},G=function(n){this.encodeOpts=n},U=function(n){this.decodeArgs=n},B=function(n){this.decodeOpts=n},K=function(n){this.countArgs=n},M=function(n){this.encodeWithOptions=n},J=function(n){this.encodeRecordWithOptions=n},z=function(n){this.encode=n},V=function(n){this.decodeWithOptions=n},k=function(n){this.decodeRecordWithOptions=n},H=function(n){this.decode=n},Q=new z(F.absurd),X=new H(function(n){return o.except(m.applicativeIdentity)(new a.Left(e.pure(E.applicativeNonEmptyList)(new D.ForeignError("Decode: void"))))}),Y=new z(function(n){return D.unsafeToForeign({})}),Z=new H(function(n){return e.pure(o.applicativeExceptT(m.monadIdentity))(A.unit)}),$=new z(D.unsafeToForeign),_=new H(D.readString),nn=new z(D.unsafeToForeign),en=new H(D.readNumber),tn=new z(D.unsafeToForeign),rn=new H(D.readInt),on=new W(function(n){return y.mempty(y.monoidFn(E.monoidList))}),un=new B(function(n){return function(n){return D.fail(new D.ForeignError("No constructors"))}}),cn=new U(function(n){return function(n){return function(t){return t instanceof E.Nil?e.pure(o.applicativeExceptT(m.monadIdentity))({result:l.NoArguments.value,rest:E.Nil.value,next:n}):D.fail(new D.ForeignError("Too many constructor arguments"))}}}),dn=new K(function(n){return new a.Left(l.NoArguments.value)}),an=new K(function(n){return new a.Right(1)}),sn=new z(r.identity(r.categoryFn)),fn=new H(e.pure(o.applicativeExceptT(m.monadIdentity))),pn=function(n){return n.encodeWithOptions},ln=function(n){return new W(function(e){return function(t){return g.singleton(pn(n)(e)(t))}})},mn=function(n){return n.encodeRecordWithOptions},gn=function(n){return function(n){return new M(function(e){var t=mn(n)(C.RLProxy.value)(e);return function(n){return D.unsafeToForeign(t(n))}})}},En=new J(function(n){return function(n){return function(n){return N.empty}}}),xn=function(n){return function(e){return function(t){return function(r){return new J(function(i){return function(i){return function(o){var u=mn(e)(C.RLProxy.value)(i)(o),c=b.reflectSymbol(t)(b.SProxy.value);return N.insert(i.fieldTransform(c))(pn(r)(i)(O.get(t)(n)(b.SProxy.value)(o)))(u)}}})}}}},yn=function(n){return n.encodeOpts},wn=new G(function(n){return function(e){return yn(wn)(n)(e)}}),vn=function(n){return function(e){return new G(function(t){return function(r){if(r instanceof l.Inl)return yn(n)({sumEncoding:t.sumEncoding,unwrapSingleConstructors:!1,unwrapSingleArguments:t.unwrapSingleArguments,fieldTransform:t.fieldTransform})(r.value0);if(r instanceof l.Inr)return yn(e)({sumEncoding:t.sumEncoding,unwrapSingleConstructors:!1,unwrapSingleArguments:t.unwrapSingleArguments,fieldTransform:t.fieldTransform})(r.value0);throw new Error("Failed pattern match at Foreign.Generic.Class (line 351, column 1 - line 355, column 85): "+[t.constructor.name,r.constructor.name])}})}},Tn=function(n){return n.encodeArgs},bn=function(n){return function(e){return new W(function(t){return function(r){return v.append(E.semigroupList)(Tn(n)(t)(r.value0))(Tn(e)(t)(r.value1))}})}},hn=function(n){return function(e){return new G(function(t){return function(r){var i,o,u=(i=g.toUnfoldable(I.unfoldableArray),o=Tn(e)(t),function(n){return 0===(e=i(o(n))).length?x.Nothing.value:1===e.length&&t.unwrapSingleArguments?new x.Just(e[0]):new x.Just(D.unsafeToForeign(e));var e}),c=b.reflectSymbol(n)(b.SProxy.value);return t.unwrapSingleConstructors?x.maybe(D.unsafeToForeign({}))(D.unsafeToForeign)(u(r)):D.unsafeToForeign(N.union(N.singleton(t.sumEncoding.value0.tagFieldName)(D.unsafeToForeign(t.sumEncoding.value0.constructorTagTransform(c))))(x.maybe(N.empty)(N.singleton(t.sumEncoding.value0.contentsFieldName))(u(r))))}})}},In=function(n){return n.encode},An=function(n){return new M(function(e){return In(n)})},Fn=function(n){return new z((e=In(n),t=w.unwrap(m.newtypeIdentity),function(n){return e(t(n))}));var e,t},Dn=function(n){return new z(x.maybe(S.null)(In(n)))},jn=function(n){return new z((e=N.mapWithKey(function(e){return In(n)}),function(n){return D.unsafeToForeign(e(n))}));var e},qn={sumEncoding:new P({tagFieldName:"tag",contentsFieldName:"contents",constructorTagTransform:r.identity(r.categoryFn)}),unwrapSingleConstructors:!1,unwrapSingleArguments:!0,fieldTransform:r.identity(r.categoryFn)},Sn=function(n){return function(e){return new z(pn(gn(n)(e))(qn))}},Nn=function(n){return n.decodeWithOptions},On=function(n){return new U(function(r){return function(u){return function(c){return c instanceof E.Cons?t.bind(o.bindExceptT(m.monadIdentity))(i.mapExcept(d.lmap(a.bifunctorEither)(p.map(E.functorNonEmptyList)(D.ErrorAtIndex.create(u))))(Nn(n)(r)(c.value0)))(function(n){return e.pure(o.applicativeExceptT(m.monadIdentity))({result:n,rest:c.value1,next:u+1|0})}):D.fail(new D.ForeignError("Not enough constructor arguments"))}}})},Rn=function(n){return n.decodeRecordWithOptions},Cn=function(n){return function(n){return new V(function(e){return p.map(p.functorFn)(p.map(o.functorExceptT(m.functorIdentity))(f.flip(R.build)({})))(Rn(n)(C.RLProxy.value)(e))})}},Ln=function(n){return function(e){return new H(Nn(Cn(n)(e))(qn))}},Pn=new k(function(n){return function(n){return function(n){return e.pure(o.applicativeExceptT(m.monadIdentity))(r.identity(R.categoryBuilder))}}}),Wn=function(n){return function(r){return function(c){return function(s){return function(f){return new k(function(l){return function(l){return function(g){return t.bind(o.bindExceptT(m.monadIdentity))(Rn(r)(C.RLProxy.value)(l)(g))(function(r){var x=b.reflectSymbol(c)(b.SProxy.value),y=l.fieldTransform(x);return t.bind(o.bindExceptT(m.monadIdentity))(q.index(q.indexString)(g)(y))(function(g){return t.bind(o.bindExceptT(m.monadIdentity))(i.mapExcept(d.lmap(a.bifunctorEither)(p.map(E.functorNonEmptyList)(D.ErrorAtProperty.create(y))))(Nn(s)(l)(g)))(function(t){return e.pure(o.applicativeExceptT(m.monadIdentity))(u.composeFlipped(R.semigroupoidBuilder)(r)(R.insert(n)(f)(c)(b.SProxy.value)(t)))})})})}}})}}}}},Gn=function(n){return n.decodeOpts},Un=function(e){return function(t){return new B(function(r){return function(i){var u={unwrapSingleConstructors:!1,fieldTransform:r.fieldTransform,sumEncoding:r.sumEncoding,unwrapSingleArguments:r.unwrapSingleArguments};return n.alt(o.altExceptT(E.semigroupNonEmptyList)(m.monadIdentity))(p.map(o.functorExceptT(m.functorIdentity))(l.Inl.create)(Gn(e)(u)(i)))(p.map(o.functorExceptT(m.functorIdentity))(l.Inr.create)(Gn(t)(u)(i)))}})}},Bn=function(n){return n.decodeArgs},Kn=function(n){return function(r){return new U(function(i){return function(u){return function(c){return t.bind(o.bindExceptT(m.monadIdentity))(Bn(n)(i)(u)(c))(function(n){return t.bind(o.bindExceptT(m.monadIdentity))(Bn(r)(i)(n.next)(n.rest))(function(t){return e.pure(o.applicativeExceptT(m.monadIdentity))({result:new l.Product(n.result,t.result),rest:t.rest,next:t.next})})})}}})}},Mn=function(n){return n.decode},Jn=function(n){return new V(function(e){return Mn(n)})},zn=function(n){return new H((e=p.map(o.functorExceptT(m.functorIdentity))(m.Identity),t=Mn(n),function(n){return e(t(n))}));var e,t},Vn=function(n){return new H(S.readNullOrUndefined(Mn(n)))},kn=function(n){return new H(t.composeKleisliFlipped(o.bindExceptT(m.monadIdentity))((e=h.sequence(N.traversableObject)(o.applicativeExceptT(m.monadIdentity)),r=N.mapWithKey(function(e){return Mn(n)}),function(n){return e(r(n))}))(j.readObject));var e,r},Hn=function(n){return n.countArgs},Qn=function(n){return function(e){return new K(function(t){var r=Hn(e)(L.Proxy.value),i=Hn(n)(L.Proxy.value);if(i instanceof a.Left&&r instanceof a.Left)return new a.Left(new l.Product(i.value0,r.value0));if(i instanceof a.Left&&r instanceof a.Right)return new a.Right(r.value0);if(i instanceof a.Right&&r instanceof a.Left)return new a.Right(i.value0);if(i instanceof a.Right&&r instanceof a.Right)return new a.Right(i.value0+r.value0|0);throw new Error("Failed pattern match at Foreign.Generic.Class (line 400, column 5 - line 404, column 40): "+[i.constructor.name,r.constructor.name])})}},Xn=function(n){return function(r){return function(u){return new B(function(c){return function(f){var x=Hn(u)(L.Proxy.value),y=function(n){if(x instanceof a.Left)return e.pure(o.applicativeExceptT(m.monadIdentity))(x.value0);if(x instanceof a.Right&&1===x.value0&&c.unwrapSingleArguments)return t.bind(o.bindExceptT(m.monadIdentity))(Bn(r)(c)(0)(g.singleton(n)))(function(n){return t.discard(t.discardUnit)(o.bindExceptT(m.monadIdentity))(e.unless(o.applicativeExceptT(m.monadIdentity))(g.null(n.rest))(D.fail(new D.ForeignError("Expected a single argument"))))(function(){return e.pure(o.applicativeExceptT(m.monadIdentity))(n.result)})});if(x instanceof a.Right)return t.bind(o.bindExceptT(m.monadIdentity))(D.readArray(n))(function(n){return t.bind(o.bindExceptT(m.monadIdentity))(Bn(r)(c)(0)(g.fromFoldable(s.foldableArray)(n)))(function(n){return t.discard(t.discardUnit)(o.bindExceptT(m.monadIdentity))(e.unless(o.applicativeExceptT(m.monadIdentity))(g.null(n.rest))(D.fail(new D.ForeignError("Expected "+T.show(T.showInt)(x.value0)+" constructor arguments"))))(function(){return e.pure(o.applicativeExceptT(m.monadIdentity))(n.result)})})});throw new Error("Failed pattern match at Foreign.Generic.Class (line 307, column 9 - line 319, column 24): "+[x.constructor.name])},w=b.reflectSymbol(n)(b.SProxy.value);return c.unwrapSingleConstructors?p.map(o.functorExceptT(m.functorIdentity))(l.Constructor)(y(f)):t.bind(o.bindExceptT(m.monadIdentity))(i.mapExcept(d.lmap(a.bifunctorEither)(p.map(E.functorNonEmptyList)(D.ErrorAtProperty.create(c.sumEncoding.value0.tagFieldName))))(t.bind(o.bindExceptT(m.monadIdentity))(t.bind(o.bindExceptT(m.monadIdentity))(q.index(q.indexString)(f)(c.sumEncoding.value0.tagFieldName))(D.readString))(function(n){var r=c.sumEncoding.value0.constructorTagTransform(w);return t.discard(t.discardUnit)(o.bindExceptT(m.monadIdentity))(e.unless(o.applicativeExceptT(m.monadIdentity))(n===r)(D.fail(new D.ForeignError("Expected "+T.show(T.showString)(r)+" tag"))))(function(){return e.pure(o.applicativeExceptT(m.monadIdentity))(n)})})))(function(n){return t.bind(o.bindExceptT(m.monadIdentity))(i.mapExcept(d.lmap(a.bifunctorEither)(p.map(E.functorNonEmptyList)(D.ErrorAtProperty.create(c.sumEncoding.value0.contentsFieldName))))(t.bind(o.bindExceptT(m.monadIdentity))(q.index(q.indexString)(f)(c.sumEncoding.value0.contentsFieldName))(y)))(function(n){return e.pure(o.applicativeExceptT(m.monadIdentity))(n)})})}})}}},Yn=new z(D.unsafeToForeign),Zn=new H(D.readChar),$n=new z(D.unsafeToForeign),_n=new H(D.readBoolean),ne=function(n){return new z((e=p.map(p.functorArray)(In(n)),function(n){return D.unsafeToForeign(e(n))}));var e},ee=function(n){return new H((e=function(e){return function(t){return i.mapExcept(d.lmap(a.bifunctorEither)(p.map(E.functorNonEmptyList)(D.ErrorAtIndex.create(e))))(Mn(n)(t))}},t.composeKleisli(o.bindExceptT(m.monadIdentity))(D.readArray)(function(n){return h.sequence(h.traversableArray)(o.applicativeExceptT(m.monadIdentity))(c.zipWith(e)(c.range(0)(c.length(n)))(n))})));var e};module.exports={countArgs:Hn,decode:Mn,decodeArgs:Bn,decodeOpts:Gn,decodeRecordWithOptions:Rn,decodeWithOptions:Nn,encode:In,encodeArgs:Tn,encodeOpts:yn,encodeRecordWithOptions:mn,encodeWithOptions:pn,TaggedObject:P,defaultOptions:qn,Decode:H,Encode:z,DecodeWithOptions:V,EncodeWithOptions:M,DecodeRecord:k,EncodeRecord:J,GenericDecode:B,GenericEncode:G,GenericDecodeArgs:U,GenericEncodeArgs:W,GenericCountArgs:K,voidDecode:X,unitDecode:Z,foreignDecode:fn,stringDecode:_,charDecode:Zn,booleanDecode:_n,numberDecode:en,intDecode:rn,identityDecode:zn,arrayDecode:ee,maybeDecode:Vn,objectDecode:kn,recordDecode:Ln,voidEncode:Q,unitEncode:Y,foreignEncode:sn,stringEncode:$,charEncode:Yn,booleanEncode:$n,numberEncode:nn,intEncode:tn,identityEncode:Fn,arrayEncode:ne,maybeEncode:Dn,objectEncode:jn,recordEncode:Sn,decodeWithOptionsRecord:Cn,decodeWithOptionsOther:Jn,encodeWithOptionsRecord:gn,encodeWithOptionsOther:An,decodeRecordNil:Pn,encodeRecordNil:En,decodeRecordCons:Wn,encodeRecordCons:xn,genericDecodeNoConstructors:un,genericEncodeNoConstructors:wn,genericDecodeConstructor:Xn,genericEncodeConstructor:hn,genericDecodeSum:Un,genericEncodeSum:vn,genericDecodeArgsNoArguments:cn,genericEncodeArgsNoArguments:on,genericDecodeArgsArgument:On,genericEncodeArgsArgument:ln,genericDecodeArgsProduct:Kn,genericEncodeArgsProduct:bn,genericCountArgsNoArguments:dn,genericCountArgsArgument:an,genericCountArgsProduct:Qn};
-},{"../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad.Except/index.js":"Fye2","../Control.Monad.Except.Trans/index.js":"gr8B","../Control.Semigroupoid/index.js":"/riR","../Data.Array/index.js":"4t4C","../Data.Bifunctor/index.js":"e2Wc","../Data.Either/index.js":"B2JL","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Generic.Rep/index.js":"AuzG","../Data.Identity/index.js":"2OKT","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Symbol/index.js":"4oJQ","../Data.Traversable/index.js":"n7EE","../Data.Unfoldable/index.js":"77+Z","../Data.Unit/index.js":"NhVk","../Data.Void/index.js":"bncE","../Foreign/index.js":"pu1p","../Foreign.Generic.Internal/index.js":"71qG","../Foreign.Index/index.js":"Ryy1","../Foreign.NullOrUndefined/index.js":"k5yP","../Foreign.Object/index.js":"jsiz","../Record/index.js":"0gG4","../Record.Builder/index.js":"VeY4","../Type.Data.RowList/index.js":"XaXP","../Type.Proxy/index.js":"ZOFT"}],"HhmG":[function(require,module,exports) {
-"use strict";var e=require("../Data.CommutativeRing/index.js"),n=require("../Data.DivisionRing/index.js"),r=require("../Data.Eq/index.js"),t=require("../Data.EuclideanRing/index.js"),i=require("../Data.Lens.Getter/index.js"),u=require("../Data.Lens.Iso/index.js"),o=require("../Data.Lens.Iso.Newtype/index.js"),a=require("../Data.Maybe/index.js"),c=require("../Data.Newtype/index.js"),d=require("../Data.Number.Format/index.js"),s=require("../Data.Ord/index.js"),p=require("../Data.Ring/index.js"),w=require("../Data.Semiring/index.js"),f=require("../Data.Show/index.js"),g=require("../Data.String.CodeUnits/index.js"),m=require("../Data.String.Common/index.js"),h=require("../Data.String.Pattern/index.js"),x=require("../Foreign.Generic.Class/index.js"),q=require("../Math/index.js"),l=function(e){return e},D=function(e){return e},N=function(e){return e},j=new f.Show(function(e){return e}),B=new f.Show(function(e){return d.toStringWith(d.fixed(0))(e)+" Bp"}),y=w.semiringNumber,v=p.ringNumber,C=s.ordNumber,I=new c.Newtype(function(e){return e},l),S=new c.Newtype(function(e){return e},D),b=function(e){var n=m.toLower(c.unwrap(S)(e)),r=g.stripPrefix(c.wrap(h.newtypePattern)("chr"))(n);if(r instanceof a.Nothing)return c.wrap(S)("chr"+n);if(r instanceof a.Just)return c.wrap(S)(r.value0);throw new Error("Failed pattern match at Genetics.Browser.Types (line 54, column 6 - line 56, column 27): "+[r.constructor.name])},R=new c.Newtype(function(e){return e},N),L=t.euclideanRingNumber,_=new r.Eq(function(e){return function(n){return b(e)===b(n)}}),E=new s.Ord(function(){return _},function(e){return function(n){var r=b(e),t=b(n);return s.compare(s.ordString)(r)(t)}}),P=r.eqNumber,F=x.stringEncode,G=x.numberEncode,W=n.divisionringNumber,J=x.stringDecode,M=x.numberDecode,O=e.commutativeRingNumber,T=function(e){var n=m.toLower(e),r=g.stripPrefix(c.wrap(h.newtypePattern)("chr"))(n);if(r instanceof a.Nothing)return c.wrap(S)("chr"+n);if(r instanceof a.Just)return c.wrap(S)(r.value0);throw new Error("Failed pattern match at Genetics.Browser.Types (line 47, column 6 - line 49, column 28): "+[r.constructor.name])},U=function(e){return i.to(d.toStringWith(d.precision(e)))},k=function(e){return i.to(d.toStringWith(d.fixed(e)))},z=function(e){return i.to(d.toStringWith(d.exponential(e)))},A=function(e){return u.iso(function(e){return c.wrap(I)(-q.log(e)/q.ln10)})(function(e){return q.pow(10)(-e)})(e)},H=function(e){return o._Newtype(S)(S)(e)},K=function(e){return o._Newtype(R)(R)(e)};module.exports={Bp:N,_Bp:K,ChrId:D,chrId:T,validChrId:b,_ChrId:H,NegLog10:l,_NegLog10:A,_prec:U,_fixed:k,_exp:z,newtypeBp:R,eqBp:P,ordBp:C,semiringBp:y,ringBp:v,divisionRingBp:W,euclideanRingBp:L,commutativeRingBp:O,encodeBp:G,decodeBp:M,showBp:B,newtypeChrId:S,eqChrId:_,ordChrId:E,encodeChrId:F,decodeChrId:J,showChrId:j,newtypeNegLog10:I};
-},{"../Data.CommutativeRing/index.js":"60TQ","../Data.DivisionRing/index.js":"xYq2","../Data.Eq/index.js":"Pq4F","../Data.EuclideanRing/index.js":"2IRB","../Data.Lens.Getter/index.js":"OPOX","../Data.Lens.Iso/index.js":"fFCp","../Data.Lens.Iso.Newtype/index.js":"CiFJ","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.Number.Format/index.js":"VX77","../Data.Ord/index.js":"r4Vb","../Data.Ring/index.js":"E2qH","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.String.CodeUnits/index.js":"6c6X","../Data.String.Common/index.js":"OSrc","../Data.String.Pattern/index.js":"nKWe","../Foreign.Generic.Class/index.js":"aDiV","../Math/index.js":"Rpaz"}],"7rcn":[function(require,module,exports) {
-"use strict";exports.unsafeStringify=function(n){return JSON.stringify(n)},exports.unsafeToFixed=function(n){return function(e){return e.toFixed(n)}},exports.unsafeToExponential=function(n){return function(e){return e.toExponential(n)}},exports.unsafeToPrecision=function(n){return function(e){return e.toPrecision(n)}},exports.unsafeDecodeURI=decodeURI,exports.unsafeEncodeURI=encodeURI,exports.unsafeDecodeURIComponent=decodeURIComponent,exports.unsafeEncodeURIComponent=encodeURIComponent;
-},{}],"qSZP":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js");module.exports={unsafeStringify:e.unsafeStringify,unsafeToFixed:e.unsafeToFixed,unsafeToExponential:e.unsafeToExponential,unsafeToPrecision:e.unsafeToPrecision,unsafeDecodeURI:e.unsafeDecodeURI,unsafeEncodeURI:e.unsafeEncodeURI,unsafeDecodeURIComponent:e.unsafeDecodeURIComponent,unsafeEncodeURIComponent:e.unsafeEncodeURIComponent};
-},{"./foreign.js":"7rcn"}],"7bYH":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),e=require("../Control.Bind/index.js"),r=require("../Control.Monad.Except.Trans/index.js"),i=require("../Data.Array/index.js"),t=require("../Data.BigInt/index.js"),u=require("../Data.Boolean/index.js"),a=require("../Data.Either/index.js"),o=require("../Data.Eq/index.js"),d=require("../Data.EuclideanRing/index.js"),c=require("../Data.Foldable/index.js"),l=require("../Data.Functor/index.js"),s=require("../Data.Generic.Rep/index.js"),f=require("../Data.Identity/index.js"),p=require("../Data.Lens.Getter/index.js"),m=require("../Data.Lens.Internal.Forget/index.js"),g=require("../Data.Lens.Iso.Newtype/index.js"),v=require("../Data.List.Types/index.js"),x=require("../Data.Map.Internal/index.js"),w=require("../Data.Maybe/index.js"),b=require("../Data.Monoid.Additive/index.js"),y=require("../Data.Newtype/index.js"),I=require("../Data.Ord/index.js"),q=require("../Data.Pair/index.js"),h=require("../Data.Ring/index.js"),j=require("../Data.Semiring/index.js"),B=require("../Data.Traversable/index.js"),T=require("../Data.Tuple/index.js"),S=require("../Foreign/index.js"),P=require("../Foreign.Index/index.js"),D=require("../Genetics.Browser.Types/index.js"),F=require("../Global.Unsafe/index.js"),E=function(n){return n},N=function(n){return n},z=function(n){return n},C=function(n){return n},A=function(n){return t.toNumber(n.coordWidth)/n.pixelWidth},W=F.unsafeStringify,M=function(n){return function(e){return t.toNumber(e)*(n.pixelWidth/t.toNumber(n.coordWidth))}},R=function(n){return function(e){return function(r){var i=new q.Pair(I.min(n)(e.value0)(r.value0),I.min(n)(e.value1)(r.value1)),t=new q.Pair(I.max(n)(e.value0)(r.value0),I.max(n)(e.value1)(r.value1));return I.greaterThanOrEq(n)(i.value1)(t.value0)}}},G=function(n){return function(e){return h.sub(n)(e.value1)(e.value0)}},O=function(n){return function(e){var r=I.max(I.ordNumber)(0)(e),i=l.map(q.functorPair)(t.toNumber)(n),u=(G(h.ringNumber)(i)*r-G(h.ringNumber)(i))/2,a=l.map(q.functorPair)(t.fromNumber)(new q.Pair(i.value0-u,i.value1+u));return l.map(q.functorPair)(w.fromJust())(a)}},L=function(n){return function(e){var r=G(t.ringBigInt)(e),i=d.div(t.euclideanRingBigInt)(h.sub(t.ringBigInt)(n)(r))(t.fromInt(2));return new q.Pair(h.sub(t.ringBigInt)(e.value0)(i),j.add(t.semiringBigInt)(e.value1)(i))}},V=function(n){return function(e){var r=l.map(l.functorFn)(w.fromJust())(t.fromNumber)(e*t.toNumber(G(t.ringBigInt)(n)));return l.map(q.functorPair)(function(n){return j.add(t.semiringBigInt)(n)(r)})(n)}},_=function(n){return function(e){var r=G(t.ringBigInt)(e);return{pixelWidth:n.width,coordWidth:r}}},J=function(n){return function(e){return function(r){return function(i){return d.div(n)(h.sub(n.CommutativeRing0().Ring0())(i)(e))(h.sub(n.CommutativeRing0().Ring0())(r)(e))}}}},U=new y.Newtype(function(n){return n},N),k=new y.Newtype(function(n){return n},C),H=function(n){return function(e){return function(r){return function(i){return j.add(n.Semiring0())(j.mul(n.Semiring0())(h.sub(n)(j.one(n.Semiring0()))(i))(e))(j.mul(n.Semiring0())(i)(r))}}}},K=new s.Generic(function(n){return n},function(n){return n}),Q=new l.Functor(function(n){return function(e){return C(l.map(x.functorMap)(l.map(q.functorPair)(n))(e))}}),X=new o.Eq(function(n){return function(e){return o.eq(t.eqBigInt)(n.coordWidth)(e.coordWidth)&&n.pixelWidth===e.pixelWidth}}),Y=new y.Newtype(function(n){return n},z),Z=function(n){return function(e){return function(r){var t,u,a=i.unzip(r);return C(x.fromFoldable(n)(c.foldableArray)(i.zip(a.value0)((t=a.value1,u=B.scanl(B.traversableArray)(function(n){return function(r){return j.add(e)(n)(r)}})(j.zero(e))(t),i.zipWith(q.Pair.create)(i.cons(j.zero(e))(u))(u)))))}}},$=function(i){return e.bind(r.bindExceptT(f.monadIdentity))(S.readArray(i))(function(i){return e.bind(r.bindExceptT(f.monadIdentity))(B.traverse(B.traversableArray)(r.applicativeExceptT(f.monadIdentity))(function(i){return e.bind(r.bindExceptT(f.monadIdentity))(l.map(r.functorExceptT(f.functorIdentity))(y.wrap(D.newtypeChrId))(e.bindFlipped(r.bindExceptT(f.monadIdentity))(S.readString)(P.ix(P.indexableForeign)(P.indexString)(i)("chr"))))(function(u){return e.bind(r.bindExceptT(f.monadIdentity))(e.bindFlipped(r.bindExceptT(f.monadIdentity))((o=r.except(f.applicativeIdentity),d=a.note(n.pure(v.applicativeNonEmptyList)(new S.ForeignError("error parsing size for chr"))),function(n){return o(d(t.fromString(n)))}))(e.bindFlipped(r.bindExceptT(f.monadIdentity))(S.readString)(P.ix(P.indexableForeign)(P.indexString)(i)("size"))))(function(e){return n.pure(r.applicativeExceptT(f.monadIdentity))(new T.Tuple(u,e))});var o,d})})(i))(function(e){return n.pure(r.applicativeExceptT(f.monadIdentity))(Z(D.ordChrId)(t.semiringBigInt)(e))})})},nn=function(n){return function(e){return function(r){return new q.Pair(h.sub(n)(r.value0)(e),j.add(n.Semiring0())(r.value1)(e))}}},en=function(n){return g._Newtype(k)(k)(n.Profunctor0())},rn=function(n){var e=en(m.strongForget),r=p.to(y.alaF(l.functorFn)(l.functorFn)(y.newtypeAdditive)(y.newtypeAdditive)(b.Additive)(c.foldMap(x.foldableMap)(b.monoidAdditive(n.Semiring0())))(G(n)));return function(n){return e(r(n))}},tn=function(n){return function(e){return function(r){var i=p.viewOn(n)(rn(t.ringBigInt)),u=y.unwrap(Y)(r),a=h.sub(t.ringBigInt)(u.value1)(u.value0),o=function(){var n=I.greaterThan(t.ordBigInt)(u.value1)(i),e=I.lessThan(t.ordBigInt)(u.value0)(j.zero(t.semiringBigInt));if(e&&!n)return new q.Pair(j.zero(t.semiringBigInt),a);if(!e&&n)return new q.Pair(h.sub(t.ringBigInt)(i)(a),i);if(e&&n)return new q.Pair(j.zero(t.semiringBigInt),i);if(!e&&!n)return new q.Pair(u.value0,u.value1);throw new Error("Failed pattern match at Genetics.Browser.Coordinates (line 207, column 22 - line 211, column 39): "+[e.constructor.name,n.constructor.name])}();return L(I.min(t.ordBigInt)(i)(I.max(t.ordBigInt)(a)(e)))(new q.Pair(o.value0,o.value1))}}},un=function(n){return function(e){return l.map(x.functorMap)(l.map(q.functorPair)(M(e)))(p.viewOn(n)(en(m.strongForget)))}},an=function(n){return function(e){return function(r){return function(i){return x.filter(n)(function(n){if(I.lessThan(e)(n.value0)(i.value0)&&I.greaterThan(e)(n.value1)(i.value1))return!0;if(I.lessThan(e)(n.value0)(i.value0)&&I.lessThan(e)(n.value1)(i.value0))return!1;if(I.greaterThan(e)(n.value0)(i.value1)&&I.greaterThan(e)(n.value1)(i.value1))return!1;if(u.otherwise)return!0;throw new Error("Failed pattern match at Genetics.Browser.Coordinates (line 167, column 9 - line 171, column 29): "+[n.constructor.name])})(p.viewOn(r)(en(m.strongForget)))}}}},on=function(n){return function(e){return function(r){return function(i){return l.map(x.functorMap)(l.map(q.functorPair)(M(i)))(an(n)(t.ordBigInt)(e)(y.unwrap(Y)(r)))}}}};module.exports={CoordSysView:z,pairSize:G,_TotalSize:rn,normalizeView:tn,aroundPair:nn,normalize:J,scalePairBy:O,scaledSegments:un,"scaledSegments'":on,translatePairBy:V,viewScale:_,xPerPixel:A,_Segments:en,pairsOverlap:R,coordSys:Z,parseCoordSys:$,scaleToScreen:M,newtypeNormalized:U,functorCoordSys:Q,newtypeCoordSys:k,genericCoordSys:K,eqViewScale:X,coordsysviewNewtype:Y};
-},{"../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Monad.Except.Trans/index.js":"gr8B","../Data.Array/index.js":"4t4C","../Data.BigInt/index.js":"Zx+T","../Data.Boolean/index.js":"ObQr","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.EuclideanRing/index.js":"2IRB","../Data.Foldable/index.js":"eVDl","../Data.Functor/index.js":"+0AE","../Data.Generic.Rep/index.js":"AuzG","../Data.Identity/index.js":"2OKT","../Data.Lens.Getter/index.js":"OPOX","../Data.Lens.Internal.Forget/index.js":"mj9z","../Data.Lens.Iso.Newtype/index.js":"CiFJ","../Data.List.Types/index.js":"Xxuc","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Monoid.Additive/index.js":"fHyj","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Pair/index.js":"PpsX","../Data.Ring/index.js":"E2qH","../Data.Semiring/index.js":"11NF","../Data.Traversable/index.js":"n7EE","../Data.Tuple/index.js":"II/O","../Foreign/index.js":"pu1p","../Foreign.Index/index.js":"Ryy1","../Genetics.Browser.Types/index.js":"HhmG","../Global.Unsafe/index.js":"qSZP"}],"BQGe":[function(require,module,exports) {
-exports._parseJSON=JSON.parse,exports._undefined=void 0;
-},{}],"DqNI":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),n=require("../Control.Alt/index.js"),r=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),i=require("../Control.Bind/index.js"),u=require("../Control.Category/index.js"),o=require("../Control.Monad.Except/index.js"),a=require("../Control.Monad.Except.Trans/index.js"),c=require("../Control.Semigroupoid/index.js"),f=require("../Data.Bifunctor/index.js"),d=require("../Data.Boolean/index.js"),l=require("../Data.Either/index.js"),p=require("../Data.Function/index.js"),s=require("../Data.Functor/index.js"),m=require("../Data.Identity/index.js"),y=require("../Data.List.Types/index.js"),x=require("../Data.Maybe/index.js"),w=require("../Data.Nullable/index.js"),g=require("../Data.Semigroup/index.js"),F=require("../Data.Symbol/index.js"),v=require("../Data.Traversable/index.js"),b=require("../Data.TraversableWithIndex/index.js"),E=require("../Data.Variant/index.js"),I=require("../Effect.Exception/index.js"),T=require("../Effect.Uncurried/index.js"),h=require("../Effect.Unsafe/index.js"),j=require("../Foreign/index.js"),q=require("../Foreign.Index/index.js"),S=require("../Foreign.Object/index.js"),N=require("../Global.Unsafe/index.js"),L=require("../Partial.Unsafe/index.js"),P=require("../Record/index.js"),R=require("../Record.Builder/index.js"),D=require("../Type.Data.RowList/index.js"),O=function(e){this.writeVariantImpl=e},V=function(e){this.writeImplFields=e},C=function(e){this.writeImpl=e},W=function(e){this.readVariantImpl=e},A=function(e){this.getFields=e},B=function(e){this.readImpl=e},M=function(e){return e.writeVariantImpl},J=function(e){return e.writeImplFields},K=function(e){return e.writeImpl},U=function(e){var n=K(e);return function(e){return N.unsafeStringify(n(e))}},_=function(e){return function(e){return new C(function(n){return M(e)(D.RLProxy.value)(n)})}},G=new C(j.unsafeToForeign),k=function(e){return new C((n=S.mapWithKey(p.const(K(e))),function(e){return j.unsafeToForeign(n(e))}));var n},z=new C(j.unsafeToForeign),H=function(e){return new C((n=x.maybe(j.unsafeToForeign(w.toNullable(x.Nothing.value)))(K(e)),function(e){return n(w.toMaybe(e))}));var n},Q=new C(j.unsafeToForeign),X=new C(u.identity(u.categoryFn)),Y=new C(j.unsafeToForeign),Z=new C(j.unsafeToForeign),$=function(e){return new C(function(n){return j.unsafeToForeign(s.map(s.functorArray)(K(e))(n))})},ee=function(e){return K(e)},ne=e._undefined,re=function(e){return new C(x.maybe(ne)(K(e)))},te=function(e){return function(e){return new C(function(n){var r=J(e)(D.RLProxy.value)(n);return j.unsafeToForeign(R.build(r)({}))})}},ie=new W(function(e){return function(e){return j.fail(new j.ForeignError("Unable to match any variant member."))}}),ue=function(e){return e.readVariantImpl},oe=new B(j.readString),ae=new B(j.readNumber),ce=new B(j.readInt),fe=function(e){return e.readImpl},de=function(e){return new B((n=fe(e),function(e){return j.isNull(e)||j.isUndefined(e)?r.pure(a.applicativeExceptT(m.monadIdentity))(x.Nothing.value):s.map(a.functorExceptT(m.functorIdentity))(x.Just.create)(n(e))}));var n},le=function(e){return new B(function(n){return o.withExcept(s.map(y.functorNonEmptyList)(function(e){return e instanceof j.TypeMismatch?new j.TypeMismatch("Nullable "+e.value0,e.value1):e}))(i.bindFlipped(a.bindExceptT(m.monadIdentity))(s.map(s.functorFn)(s.map(a.functorExceptT(m.functorIdentity))(w.toNullable))(v.traverse(v.traversableMaybe)(a.applicativeExceptT(m.monadIdentity))(fe(e))))(j.readNull(n)))})},pe=function(e){return new B(i.composeKleisliFlipped(a.bindExceptT(m.monadIdentity))((n=v.sequence(S.traversableObject)(a.applicativeExceptT(m.monadIdentity)),t=S.mapWithKey(p.const(fe(e))),function(e){return n(t(e))}))(function(e){if("Object"===j.tagOf(e))return r.pure(a.applicativeExceptT(m.monadIdentity))(j.unsafeFromForeign(e));if(d.otherwise)return j.fail(new j.TypeMismatch("Object",j.tagOf(e)));throw new Error("Failed pattern match at Simple.JSON (line 188, column 7 - line 188, column 51): "+[e.constructor.name])}));var n,t},se=function(e){return function(e){return new B(function(n){return ue(e)(D.RLProxy.value)(n)})}},me=new B(r.pure(a.applicativeExceptT(m.monadIdentity))),ye=new A(function(e){return function(e){return r.pure(a.applicativeExceptT(m.monadIdentity))(u.identity(R.categoryBuilder))}}),xe=new B(j.readChar),we=new B(j.readBoolean),ge=function(e){return new B(i.composeKleisliFlipped(a.bindExceptT(m.monadIdentity))(b.traverseWithIndex(b.traversableWithIndexArray)(a.applicativeExceptT(m.monadIdentity))(function(n){return function(r){return o.withExcept(s.map(y.functorNonEmptyList)(j.ErrorAtIndex.create(n)))(fe(e)(r))}}))(j.readArray))},Fe=function(e){return fe(e)},ve=function(e){var n=fe(e);return function(e){return o.runExcept(n(e))}},be=function(e){var n=ve(e);return function(e){return n(j.unsafeToForeign(e))}},Ee=function(e){var n=ve(e);return function(e){return l.hush(n(e))}},Ie=function(){var n,t=f.lmap(l.bifunctorEither)((n=r.pure(y.applicativeNonEmptyList),function(e){return n(j.ForeignError.create(I.message(e)))})),i=T.runEffectFn1(e._parseJSON);return function(e){return a.ExceptT(m.Identity(t(h.unsafePerformEffect(I.try(i(e))))))}}(),Te=function(e){var n=i.composeKleisliFlipped(a.bindExceptT(m.monadIdentity))(fe(e))(Ie);return function(e){return o.runExcept(n(e))}},he=function(e){var n=Te(e);return function(e){return l.hush(n(e))}},je=function(e){return i.composeKleisliFlipped(a.bindExceptT(m.monadIdentity))(fe(e))(Ie)},qe=new O(function(e){return function(e){return L.unsafeCrashWith("Variant was not able to be writen row WriteForeign.")}}),Se=new V(function(e){return function(e){return u.identity(R.categoryBuilder)}}),Ne=function(e){return e.getFields},Le=function(e){return function(e){return new B(function(n){return s.map(a.functorExceptT(m.functorIdentity))(p.flip(R.build)({}))(Ne(e)(D.RLProxy.value)(n))})}},Pe=function(e){return function(n){return function(r){return function(t){return new O(function(i){return function(i){return E.on(r)(e)(F.SProxy.value)(function(r){return j.unsafeToForeign({type:F.reflectSymbol(e)(F.SProxy.value),value:K(n)(r)})})(M(t)(D.RLProxy.value))(i)}})}}}},Re=function(e){return function(n){return function(r){return function(t){return function(i){return function(u){return new V(function(o){return function(o){var a=J(r)(D.RLProxy.value)(o),f=K(n)(P.get(e)(t)(F.SProxy.value)(o));return c.compose(R.semigroupoidBuilder)(R.insert(u)(i)(e)(F.SProxy.value)(f))(a)}})}}}}}},De=function(e){return function(n){return function(r){if(n instanceof l.Left&&r instanceof l.Right)return new l.Left(n.value0);if(n instanceof l.Left&&r instanceof l.Left)return new l.Left(g.append(e)(n.value0)(r.value0));if(n instanceof l.Right&&r instanceof l.Left)return new l.Left(r.value0);if(n instanceof l.Right&&r instanceof l.Right)return new l.Right(n.value0(r.value0));throw new Error("Failed pattern match at Simple.JSON (line 232, column 1 - line 232, column 90): "+[n.constructor.name,r.constructor.name])}}},Oe=function(e){return function(n){return function(r){return function(i){return a.ExceptT(t.apply(n.Apply0())(s.map(n.Apply0().Functor0())(De(e))(a.runExceptT(r)))(a.runExceptT(i)))}}}},Ve=function(e){return function(n){return function(t){return function(u){return function(f){return new A(function(d){return function(d){var l=Ne(t)(D.RLProxy.value)(d),p=F.reflectSymbol(e)(F.SProxy.value),x=o.withExcept(s.map(y.functorNonEmptyList)(j.ErrorAtProperty.create(p))),w=i.bind(a.bindExceptT(m.monadIdentity))(x(i.bindFlipped(a.bindExceptT(m.monadIdentity))(fe(n))(q.readProp(p)(d))))(function(n){return r.pure(a.applicativeExceptT(m.monadIdentity))(R.insert(f)(u)(e)(F.SProxy.value)(n))});return Oe(y.semigroupNonEmptyList)(m.applicativeIdentity)(s.map(a.functorExceptT(m.functorIdentity))(c.compose(R.semigroupoidBuilder))(w))(l)}})}}}}},Ce=function(e){return function(t){return function(u){return function(o){return new W(function(c){return function(c){var f=F.reflectSymbol(e)(F.SProxy.value);return n.alt(a.altExceptT(y.semigroupNonEmptyList)(m.monadIdentity))(i.bind(a.bindExceptT(m.monadIdentity))(fe(Le()(Ve(new F.IsSymbol(function(){return"type"}))(oe)(Ve(new F.IsSymbol(function(){return"value"}))(me)(ye)()())()()))(c))(function(n){return n.type===f?i.bind(a.bindExceptT(m.monadIdentity))(fe(t)(n.value))(function(n){return r.pure(a.applicativeExceptT(m.monadIdentity))(E.inj(u)(e)(F.SProxy.value)(n))}):j.fail(j.ForeignError.create("Did not match variant tag "+f))}))(ue(o)(D.RLProxy.value)(c))}})}}}};module.exports={readJSON:Te,"readJSON'":je,readJSON_:he,writeJSON:U,write:ee,read:ve,"read'":Fe,read_:Ee,parseJSON:Ie,undefined:ne,ReadForeign:B,readImpl:fe,ReadForeignFields:A,getFields:Ne,ReadForeignVariant:W,readVariantImpl:ue,WriteForeign:C,writeImpl:K,WriteForeignFields:V,writeImplFields:J,WriteForeignVariant:O,writeVariantImpl:M,readForeign:me,readChar:xe,readNumber:ae,readInt:ce,readString:oe,readBoolean:we,readArray:ge,readMaybe:de,readNullable:le,readObject:pe,readRecord:Le,readFieldsCons:Ve,readFieldsNil:ye,readForeignVariant:se,readVariantNil:ie,readVariantCons:Ce,writeForeignForeign:X,writeForeignString:G,writeForeignInt:Q,writeForeignChar:Y,writeForeignNumber:z,writeForeignBoolean:Z,writeForeignArray:$,writeForeignMaybe:re,writeForeignNullable:H,writeForeignObject:k,recordWriteForeign:te,consWriteForeignFields:Re,nilWriteForeignFields:Se,writeForeignVariant:_,nilWriteForeignVariant:qe,consWriteForeignVariant:Pe};
-},{"./foreign.js":"BQGe","../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad.Except/index.js":"Fye2","../Control.Monad.Except.Trans/index.js":"gr8B","../Control.Semigroupoid/index.js":"/riR","../Data.Bifunctor/index.js":"e2Wc","../Data.Boolean/index.js":"ObQr","../Data.Either/index.js":"B2JL","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Identity/index.js":"2OKT","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Nullable/index.js":"YQ8o","../Data.Semigroup/index.js":"EsAJ","../Data.Symbol/index.js":"4oJQ","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Variant/index.js":"hgdh","../Effect.Exception/index.js":"0OCW","../Effect.Uncurried/index.js":"qn3Z","../Effect.Unsafe/index.js":"tPW2","../Foreign/index.js":"pu1p","../Foreign.Index/index.js":"Ryy1","../Foreign.Object/index.js":"jsiz","../Global.Unsafe/index.js":"qSZP","../Partial.Unsafe/index.js":"aoR+","../Record/index.js":"0gG4","../Record.Builder/index.js":"VeY4","../Type.Data.RowList/index.js":"XaXP"}],"X0te":[function(require,module,exports) {
-"use strict";var e=require("../Color/index.js"),n=require("../Color.Scheme.Clrs/index.js"),r=require("../Control.Applicative/index.js"),t=require("../Control.Bind/index.js"),i=require("../Control.Monad.Except.Trans/index.js"),a=require("../Control.Monad.State/index.js"),o=require("../Control.Monad.State.Class/index.js"),u=require("../Control.Monad.State.Trans/index.js"),d=require("../Data.Array/index.js"),l=require("../Data.BigInt/index.js"),s=require("../Data.Either/index.js"),c=require("../Data.EuclideanRing/index.js"),f=require("../Data.Foldable/index.js"),p=require("../Data.Function/index.js"),m=require("../Data.Functor/index.js"),g=require("../Data.FunctorWithIndex/index.js"),x=require("../Data.HeytingAlgebra/index.js"),h=require("../Data.Identity/index.js"),v=require("../Data.Int/index.js"),w=require("../Data.Lens.Getter/index.js"),y=require("../Data.List/index.js"),S=require("../Data.List.Types/index.js"),b=require("../Data.Map.Internal/index.js"),j=require("../Data.Maybe/index.js"),q=require("../Data.Monoid/index.js"),D=require("../Data.Newtype/index.js"),C=require("../Data.Number.Format/index.js"),I=require("../Data.Ord/index.js"),L=require("../Data.Pair/index.js"),N=require("../Data.Ring/index.js"),F=require("../Data.Semigroup/index.js"),P=require("../Data.Semiring/index.js"),M=require("../Data.Show/index.js"),T=require("../Data.String.CodePoints/index.js"),A=require("../Data.Symbol/index.js"),B=require("../Data.Traversable/index.js"),k=require("../Data.Tuple/index.js"),O=require("../Data.Variant/index.js"),z=require("../Foreign/index.js"),G=require("../Genetics.Browser.Canvas/index.js"),E=require("../Genetics.Browser.Coordinates/index.js"),_=require("../Genetics.Browser.Layer/index.js"),R=require("../Genetics.Browser.Types/index.js"),W=require("../Graphics.Drawing/index.js"),H=require("../Graphics.Drawing.Font/index.js"),U=require("../Math/index.js"),V=require("../Simple.JSON/index.js"),J=function(e){return e},K=function(e){return function(n){return function(r){return function(t){return d.nubBy(p.on(I.compare(I.ordString))(function(e){return e.text}))(d.fromFoldable(e)(m.map(n)(r)(t)))}}}},X=function(e){return function(n){return function(r){return function(t){return function(i){return m.map(b.functorMap)(E.aroundPair(N.ringNumber)(-n.segmentPadding))(E["scaledSegments'"](e)(r)(i)(E.viewScale(t)(i)))}}}}},Q=function(e){return function(n){return function(r){return function(t){return m.map(b.functorMap)(E.aroundPair(N.ringNumber)(-e.segmentPadding))(E.scaledSegments(n)(E.viewScale(r)(t)))}}}},Y=function(e){return function(n){var r=Q(e)(e.coordinateSystem),t=m.map(_.functorComponent)(function(e){return function(n){return e(r(n.value1)(n.value0))(n.value1)}})(n);return new _.Layer(_.Scrolling.value,new _.Masked(5),t)}},Z=t.composeKleisliFlipped(i.bindExceptT(h.monadIdentity))(function(n){return i.except(h.applicativeIdentity)(s.note(r.pure(S.applicativeNonEmptyList)(new z.ForeignError("Could not parse color: expected hex string")))(e.fromHexString(n)))})(z.readString),$=new D.Newtype(function(e){return e},J),ee=new V.ReadForeign(m.map(m.functorFn)(m.map(i.functorExceptT(h.functorIdentity))(D.wrap($)))(Z)),ne=function(e){var n=e.value1.height-E.normalize(c.euclideanRingNumber)(e.value0.threshold.min)(e.value0.threshold.max)(e.value0.threshold.sig)*e.value1.height,r="P = "+w.viewOn(U.pow(10)(-e.value0.threshold.sig))(R._exp(1)),t=F.append(W.semigroupOutlineStyle)(W.outlineColor(D.unwrap($)(e.value0.rulerColor)))(W.lineWidth(2)),i=W.outlined(t)(W.path(f.foldableArray)([{x:-5,y:n},{x:e.value1.width+5,y:n}])),a=H.font(H.sansSerif)(16)(q.mempty(H.monoidFontOptions)),o=W.text(a)(e.value1.width+10)(n-6)(W.fillColor(D.unwrap($)(e.value0.rulerColor)))(r);return{renderables:y.fromFoldable(f.foldableArray)([O.inj()(new A.IsSymbol(function(){return"drawing"}))(G._drawing)(i),O.inj()(new A.IsSymbol(function(){return"drawing"}))(G._drawing)(o)])}},re=function(e){return function(n){return function(t){return function(i){return function(a){return f.foldl(t)(function(t){return function(o){return b.alter(n)((u=o,function(n){return F.append(j.semigroupMaybe(e.Semigroup0()))(r.pure(j.applicativeMaybe)(r.pure(i)(u)))(n)}))(a(o))(t);var u}})(q.mempty(b.monoidMap(n)))}}}}},te=function(e){return _.Layer.create(_.Fixed.value)(_.NoMask.value)(m.map(_.functorComponent)(function(e){return function(n){return{renderables:r.pure(S.applicativeList)(O.inj()(new A.IsSymbol(function(){return"drawing"}))(G._drawing)(e(n.value1)))}}})(e))},ie=function(e){return D.wrap(E.newtypeNormalized)(D.unwrap(R.newtypeBp)(c.div(R.euclideanRingBp)(e.position.value0)(e.frameSize)))},ae=function(n){return function(r){var t=m.map(m.functorArray)(function(e){return v.toNumber(e)/v.toNumber(n.numSteps)})(d.range(0)(n.numSteps)),i=r.width*n.hPad,a=f.foldMap(f.foldableArray)(W.monoidDrawing)(function(t){return W.text(H.font(H.sansSerif)(n.fonts.scaleSize)(q.mempty(H.monoidFontOptions)))(.6*r.width-i)(t*r.height+5)(W.fillColor(e.black))(C.toStringWith(C.fixed(0))((a=n.min+(1-t)*(n.max-n.min),I.min(I.ordNumber)(n.max)(a))));var a})(t),o=W.translate(.4*r.width-i)(.72*r.height)(W.rotate(-U.pi/2)(W.text(H.font(H.sansSerif)(n.fonts.labelSize)(q.mempty(H.monoidFontOptions)))(0)(0)(W.fillColor(e.black))("-log10 (P value)"))),u=7*i,l=W.path(f.foldableArray)([{x:u,y:0},{x:u,y:r.height}]),s=F.append(W.semigroupShape)(l)(f.foldMap(f.foldableArray)(W.monoidShape)(function(e){return(n=8,function(e){return W.path(f.foldableArray)([{x:u-n,y:e},{x:u,y:e}])})(e*r.height);var n})(t)),c=F.append(W.semigroupOutlineStyle)(W.outlineColor(D.unwrap($)(n.color)))(W.lineWidth(2));return F.append(W.semigroupDrawing)(W.outlined(c)(s))(F.append(W.semigroupDrawing)(a)(o))}},oe=function(n){var r=H.font(H.sansSerif)(12)(q.mempty(H.monoidFontOptions)),t=W.text(r)(12)(0)(W.fillColor(e.black))(n.text);return F.append(W.semigroupDrawing)(n.icon)(t)},ue=function(n){return function(r){var t=r.height*n.vPad,i=r.width*n.hPad,a=H.font(H.sansSerif)(n.fontSize)(q.mempty(H.monoidFontOptions)),o=g.mapWithIndex(g.functorWithIndexArray)(function(n){return function(r){return(o=t*v.toNumber(n+1|0),function(n){return W.translate(i)(o)(F.append(W.semigroupDrawing)(n.icon)(W.text(a)(12)(0)(W.fillColor(e.black))(n.text)))})(r);var o}})(n.entries);r.height,f.length(f.foldableArray)(P.semiringNumber)(n.entries);return f.fold(f.foldableArray)(W.monoidDrawing)(o)}},de={color:D.wrap($)(e.black),hPad:.125,numSteps:3,fonts:{labelSize:18,scaleSize:14}},le={hPad:.2,vPad:.2,fontSize:12},se=function(n){return function(r){var t=function(n){return function(t){return function(i){return W.text(H.font(H.sansSerif)(r.fontSize)(q.mempty(H.monoidFontOptions)))(function(e){return function(n){var r=I.min(I.ordNumber)(e.value1)(n.value1),t=I.max(I.ordNumber)(e.value0)(n.value0);return t+(r-t)/2}}(function(e){return function(n){var r=m.map(L.functorPair)(l.toNumber)(D.unwrap(E.coordsysviewNewtype)(n)),t=E.viewScale(e)(n);return m.map(L.functorPair)(function(e){return e/E.xPerPixel(t)})(r)}}(n)(t))(i.value1)-(a=i.value0,.3*v.toNumber(r.fontSize*T.length(M.show(R.showChrId)(a))|0)))(.7*n.height)(W.fillColor(e.black))(M.show(R.showChrId)(i.value0));var a}}};return _.Layer.create(_.Scrolling.value)(new _.Masked(5))(new _.CBottom(function(e){return{renderables:m.map(S.functorList)((r=O.inj()(new A.IsSymbol(function(){return"drawing"}))(G._drawing),i=t(e.value1)(e.value0),function(e){return r(i(e))}))(b.toUnfoldable(S.unfoldableList)(Q(n)(n.coordinateSystem)(e.value1)(e.value0)))};var r,i}))}},ce=function(e){return function(n){return function(i){var d,l;return{renderables:m.map(S.functorList)((d=O.inj()(new A.IsSymbol(function(){return"drawing"}))(G._drawing),l=k.uncurry(function(e){return function(n){return W.filled(W.fillColor(e))(n)}}),function(e){return d(l(e))}))(a.evalState(B.traverse(S.traversableList)(u.applicativeStateT(h.monadIdentity))(function(n){return t.bind(u.bindStateT(h.monadIdentity))(o.get(u.monadStateStateT(h.monadIdentity)))(function(a){return t.discard(t.discardUnit)(u.bindStateT(h.monadIdentity))(o.modify_(u.monadStateStateT(h.monadIdentity))(x.not(x.heytingAlgebraBoolean)))(function(){return r.pure(u.applicativeStateT(h.monadIdentity))(new k.Tuple(D.unwrap($)(a?e.chrBG1:e.chrBG2),W.rectangle(n.value0-e.segmentPadding)(-5)(n.value1-n.value0+2*e.segmentPadding)(i.height+10)))})})})(b.values(n)))(!1))}}}};module.exports={featureNormX:ie,groupToMap:re,pixelSegments:Q,pixelSegmentsOpt:X,trackLikeLayer:Y,fixedUILayer:te,thresholdRuler:ne,chrLabelsLayer:se,chrBackgroundLayer:ce,HexColor:J,parseColor:Z,defaultVScaleConfig:de,drawVScaleInSlot:ae,drawLegendItem:oe,defaultLegendConfig:le,drawLegendInSlot:ue,trackLegend:K,newtypeHexColor:$,readforeignHexColor:ee};
-},{"../Color/index.js":"f3ma","../Color.Scheme.Clrs/index.js":"rp+n","../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Monad.Except.Trans/index.js":"gr8B","../Control.Monad.State/index.js":"mGZW","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.State.Trans/index.js":"34Kp","../Data.Array/index.js":"4t4C","../Data.BigInt/index.js":"Zx+T","../Data.Either/index.js":"B2JL","../Data.EuclideanRing/index.js":"2IRB","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.HeytingAlgebra/index.js":"paZe","../Data.Identity/index.js":"2OKT","../Data.Int/index.js":"xNJb","../Data.Lens.Getter/index.js":"OPOX","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Number.Format/index.js":"VX77","../Data.Ord/index.js":"r4Vb","../Data.Pair/index.js":"PpsX","../Data.Ring/index.js":"E2qH","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.String.CodePoints/index.js":"mAJY","../Data.Symbol/index.js":"4oJQ","../Data.Traversable/index.js":"n7EE","../Data.Tuple/index.js":"II/O","../Data.Variant/index.js":"hgdh","../Foreign/index.js":"pu1p","../Genetics.Browser.Canvas/index.js":"VVkU","../Genetics.Browser.Coordinates/index.js":"7bYH","../Genetics.Browser.Layer/index.js":"YWUW","../Genetics.Browser.Types/index.js":"HhmG","../Graphics.Drawing/index.js":"0WVi","../Graphics.Drawing.Font/index.js":"fMOI","../Math/index.js":"Rpaz","../Simple.JSON/index.js":"DqNI"}],"UG8G":[function(require,module,exports) {
-
-var t,e,n=module.exports={};function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(t===setTimeout)return setTimeout(e,0);if((t===r||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}function u(t){if(e===clearTimeout)return clearTimeout(t);if((e===o||!e)&&clearTimeout)return e=clearTimeout,clearTimeout(t);try{return e(t)}catch(n){try{return e.call(null,t)}catch(n){return e.call(this,t)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:r}catch(n){t=r}try{e="function"==typeof clearTimeout?clearTimeout:o}catch(n){e=o}}();var c,s=[],l=!1,a=-1;function f(){l&&c&&(l=!1,c.length?s=c.concat(s):a=-1,s.length&&h())}function h(){if(!l){var t=i(f);l=!0;for(var e=s.length;e;){for(c=s,s=[];++a<e;)c&&c[a].run();a=-1,e=s.length}c=null,l=!1,u(t)}}function m(t,e){this.fun=t,this.array=e}function p(){}n.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];s.push(new m(t,e)),1!==s.length||l||i(h)},m.prototype.run=function(){this.fun.apply(null,this.array)},n.title="browser",n.env={},n.argv=[],n.version="",n.versions={},n.on=p,n.addListener=p,n.once=p,n.off=p,n.removeListener=p,n.removeAllListeners=p,n.emit=p,n.prependListener=p,n.prependOnceListener=p,n.listeners=function(t){return[]},n.binding=function(t){throw new Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(t){throw new Error("process.chdir is not supported")},n.umask=function(){return 0};
-},{}],"sseR":[function(require,module,exports) {
-var process = require("process");
-var e=require("process");exports._ajax=function(){var r={};return"undefined"==typeof module||!module.require||void 0!==e&&e.versions.electron?(r.newXHR=function(){return new XMLHttpRequest},r.fixupUrl=function(e){return e||"/"},r.getResponse=function(e){return e.response}):(r.newXHR=function(){return new(module.require("xhr2"))},r.fixupUrl=function(e){var r=module.require("url"),t=r.parse(e);return t.protocol=t.protocol||"http:",t.hostname=t.hostname||"localhost",r.format(t)},r.getResponse=function(e){return e.response}),function(e,t){return function(n,o){var u=r.newXHR(),s=r.fixupUrl(t.url);if(u.open(t.method||"GET",s,!0,t.username,t.password),t.headers)try{for(var i,a=0;null!=(i=t.headers[a]);a++)u.setRequestHeader(i.field,i.value)}catch(f){n(f)}var l=function(e){return function(){n(new Error(e+": "+t.method+" "+t.url))}};return u.onerror=l("AJAX request failed"),u.ontimeout=l("AJAX request timed out"),u.onload=function(){o({status:u.status,statusText:u.statusText,headers:u.getAllResponseHeaders().split("\r\n").filter(function(e){return e.length>0}).map(function(r){var t=r.indexOf(":");return e(r.substring(0,t))(r.substring(t+2))}),body:r.getResponse(u)})},u.responseType=t.responseType,u.withCredentials=t.withCredentials,u.send(t.content),function(e,r,t){try{u.abort()}catch(f){return r(f)}return t()}}}}();
-},{"process":"UG8G"}],"PJcd":[function(require,module,exports) {
-"use strict";var t="text/xml",a="text/plain",i="text/html",p="text/csv",e="multipart/form-data",o="image/png",l="image/jpeg",c="image/gif",m="application/xml",n="application/octet-stream",r="application/javascript",x="application/json",g="application/x-www-form-urlencoded";module.exports={applicationFormURLEncoded:g,applicationJSON:x,applicationJavascript:r,applicationOctetStream:n,applicationXML:m,imageGIF:c,imageJPEG:l,imagePNG:o,multipartFormData:e,textCSV:p,textHTML:i,textPlain:a,textXML:t};
-},{}],"TX3z":[function(require,module,exports) {
-"use strict";var n=require("../Data.Maybe/index.js"),e=require("../Data.MediaType.Common/index.js"),t=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),r=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),u=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),i=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),o=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),c=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),a=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),f=function(t){return t instanceof c?new n.Just(e.applicationFormURLEncoded):t instanceof a?new n.Just(e.applicationJSON):n.Nothing.value},s=i.create,l=a.create,d=c.create,w=o.create,m=u.create,v=r.create,h=function(n){return new t(function(e){return e(n)})};module.exports={ArrayView:t,Blob:r,Document:u,String:i,FormData:o,FormURLEncoded:c,Json:a,arrayView:h,blob:v,document:m,string:s,formData:w,formURLEncoded:d,json:l,toMediaType:f};
-},{"../Data.Maybe/index.js":"5mN7","../Data.MediaType.Common/index.js":"PJcd"}],"cjQ0":[function(require,module,exports) {
-"use strict";var e=require("../Data.Eq/index.js"),n=require("../Data.Newtype/index.js"),r=require("../Data.Ord/index.js"),t=require("../Data.Show/index.js"),i=function(e){return e},u=new t.Show(function(e){return"(MediaType "+t.show(t.showString)(e)+")"}),o=new n.Newtype(function(e){return e},i),a=new e.Eq(function(e){return function(n){return e===n}}),d=new r.Ord(function(){return a},function(e){return function(n){return r.compare(r.ordString)(e)(n)}});module.exports={MediaType:i,newtypeMediaType:o,eqMediaType:a,ordMediaType:d,showMediaType:u};
-},{"../Data.Eq/index.js":"Pq4F","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Show/index.js":"mFY7"}],"QBMh":[function(require,module,exports) {
-"use strict";var e=require("../Data.Eq/index.js"),n=require("../Data.MediaType/index.js"),t=require("../Data.Newtype/index.js"),r=require("../Data.Ord/index.js"),a=require("../Data.Ordering/index.js"),u=require("../Data.Show/index.js"),i=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),o=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),c=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),f=function(e){if(e instanceof i)return t.unwrap(n.newtypeMediaType)(e.value0);if(e instanceof o)return t.unwrap(n.newtypeMediaType)(e.value0);if(e instanceof c)return e.value1;throw new Error("Failed pattern match at Affjax.RequestHeader (line 26, column 1 - line 26, column 33): "+[e.constructor.name])},s=new u.Show(function(e){if(e instanceof i)return"(Accept "+u.show(n.showMediaType)(e.value0)+")";if(e instanceof o)return"(ContentType "+u.show(n.showMediaType)(e.value0)+")";if(e instanceof c)return"(RequestHeader "+u.show(u.showString)(e.value0)+" "+u.show(u.showString)(e.value1)+")";throw new Error("Failed pattern match at Affjax.RequestHeader (line 16, column 1 - line 19, column 81): "+[e.constructor.name])}),l=function(e){if(e instanceof i)return"Accept";if(e instanceof o)return"Content-Type";if(e instanceof c)return e.value0;throw new Error("Failed pattern match at Affjax.RequestHeader (line 21, column 1 - line 21, column 32): "+[e.constructor.name])},d=new e.Eq(function(t){return function(r){return t instanceof i&&r instanceof i?e.eq(n.eqMediaType)(t.value0)(r.value0):t instanceof o&&r instanceof o?e.eq(n.eqMediaType)(t.value0)(r.value0):t instanceof c&&r instanceof c&&(t.value0===r.value0&&t.value1===r.value1)}}),v=new r.Ord(function(){return d},function(e){return function(t){if(e instanceof i&&t instanceof i)return r.compare(n.ordMediaType)(e.value0)(t.value0);if(e instanceof i)return a.LT.value;if(t instanceof i)return a.GT.value;if(e instanceof o&&t instanceof o)return r.compare(n.ordMediaType)(e.value0)(t.value0);if(e instanceof o)return a.LT.value;if(t instanceof o)return a.GT.value;if(e instanceof c&&t instanceof c){var u=r.compare(r.ordString)(e.value0)(t.value0);return u instanceof a.LT?a.LT.value:u instanceof a.GT?a.GT.value:r.compare(r.ordString)(e.value1)(t.value1)}throw new Error("Failed pattern match at Affjax.RequestHeader (line 14, column 1 - line 14, column 54): "+[e.constructor.name,t.constructor.name])}});module.exports={Accept:i,ContentType:o,RequestHeader:c,name:l,value:f,eqRequestHeader:d,ordRequestHeader:v,showRequestHeader:s};
-},{"../Data.Eq/index.js":"Pq4F","../Data.MediaType/index.js":"cjQ0","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Show/index.js":"mFY7"}],"QSsR":[function(require,module,exports) {
-"use strict";var n=require("../Control.Category/index.js"),e=require("../Data.Maybe/index.js"),t=require("../Data.MediaType.Common/index.js"),r=require("../Foreign/index.js"),i=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),o=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),u=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),a=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),c=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),f=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),s=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),l=function(n){if(n instanceof o)return"arraybuffer";if(n instanceof u)return"blob";if(n instanceof a)return"document";if(n instanceof c)return"text";if(n instanceof f)return"text";if(n instanceof s)return"";throw new Error("Failed pattern match at Affjax.ResponseFormat (line 46, column 3 - line 52, column 19): "+[n.constructor.name])},y=function(n){return n instanceof c?new e.Just(t.applicationJSON):e.Nothing.value},d=new f(n.identity(n.categoryFn)),w=function(n){return r.renderForeignError(n.value0)},g=new c(n.identity(n.categoryFn)),m=new s(n.identity(n.categoryFn)),p=new a(n.identity(n.categoryFn)),F=new u(n.identity(n.categoryFn)),h=new o(n.identity(n.categoryFn));module.exports={ArrayBuffer:o,Blob:u,Document:a,Json:c,String:f,Ignore:s,arrayBuffer:h,blob:F,document:p,json:g,string:d,ignore:m,toResponseType:l,toMediaType:y,ResponseFormatError:i,printResponseFormatError:w};
-},{"../Control.Category/index.js":"IAi2","../Data.Maybe/index.js":"5mN7","../Data.MediaType.Common/index.js":"PJcd","../Foreign/index.js":"pu1p"}],"ev5/":[function(require,module,exports) {
-"use strict";var e=require("../Data.Eq/index.js"),n=require("../Data.Ord/index.js"),r=require("../Data.Ordering/index.js"),u=require("../Data.Show/index.js"),t=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(r){return new e(n,r)}},e}(),a=function(e){return e.value1},o=new u.Show(function(e){return"(ResponseHeader "+u.show(u.showString)(e.value0)+" "+u.show(u.showString)(e.value1)+")"}),i=function(e){return e.value0},s=new e.Eq(function(e){return function(n){return e.value0===n.value0&&e.value1===n.value1}}),v=new n.Ord(function(){return s},function(e){return function(u){var t=n.compare(n.ordString)(e.value0)(u.value0);return t instanceof r.LT?r.LT.value:t instanceof r.GT?r.GT.value:n.compare(n.ordString)(e.value1)(u.value1)}});module.exports={ResponseHeader:t,name:i,value:a,eqResponseHeader:s,ordResponseHeader:v,showResponseHeader:o};
-},{"../Data.Eq/index.js":"Pq4F","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Show/index.js":"mFY7"}],"fv/y":[function(require,module,exports) {
-"use strict";function r(r){return r}exports.fromBoolean=r,exports.fromNumber=r,exports.fromString=r,exports.fromArray=r,exports.fromObject=r,exports.jsonNull=null,exports.stringify=function(r){return JSON.stringify(r)};var t=Object.prototype.toString,e=Object.keys;function n(r){return"[object Array]"===t.call(r)}exports._caseJson=function(r,e,n,o,f,u,l){return null==l?r():"boolean"==typeof l?e(l):"number"==typeof l?n(l):"string"==typeof l?o(l):"[object Array]"===t.call(l)?f(l):u(l)},exports._compare=function r(t,o,f,u,l){if(null==u)return null==l?t:f;if("boolean"==typeof u)return"boolean"==typeof l?u===l?t:!1===u?f:o:null==l?o:f;if("number"==typeof u)return"number"==typeof l?u===l?t:u<l?f:o:null==l?o:"boolean"==typeof l?o:f;if("string"==typeof u)return"string"==typeof l?u===l?t:u<l?f:o:null==l?o:"boolean"==typeof l?o:"number"==typeof l?o:f;if(n(u)){if(n(l)){for(var i=0;i<Math.min(u.length,l.length);i++){var p=r(t,o,f,u[i],l[i]);if(p!==t)return p}return u.length===l.length?t:u.length<l.length?f:o}return null==l?o:"boolean"==typeof l?o:"number"==typeof l?o:"string"==typeof l?o:f}if(null==l)return o;if("boolean"==typeof l)return o;if("number"==typeof l)return o;if("string"==typeof l)return o;if(n(l))return o;var y=e(u),a=e(l);if(y.length<a.length)return f;if(y.length>a.length)return o;for(var s=y.concat(a).sort(),g=0;g<s.length;g++){var b=s[g];if(void 0===u[b])return f;if(void 0===l[b])return o;var c=r(t,o,f,u[b],l[b]);if(c!==t)return c}return t};
-},{}],"pA4l":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Data.Eq/index.js"),t=require("../Data.Function/index.js"),o=require("../Data.Maybe/index.js"),e=require("../Data.Ord/index.js"),u=require("../Data.Ordering/index.js"),c=require("../Foreign.Object/index.js"),s=function(n){return function(r){return function(t){return t(n)(r)}}},i=s(o.Nothing.value)(o.Just.create),f=n.fromNumber(0),a=n.fromBoolean(!0),m=function(r){return function(t){return n.fromObject(c.singleton(r)(t))}},l=function(r){return n.fromArray([r])},j=n.fromBoolean(!1),b=n.fromString(""),g=n.fromObject(c.empty),J=n.fromArray([]),y=s(!1)(t.const(!0)),O=new e.Ord(function(){return d},function(r){return function(t){return n._compare(u.EQ.value,u.GT.value,u.LT.value,r,t)}}),d=new r.Eq(function(n){return function(t){return r.eq(u.eqOrdering)(e.compare(O)(n)(t))(u.EQ.value)}}),q=new r.Eq(function(n){return function(n){return!0}}),N=new e.Ord(function(){return q},function(n){return function(n){return u.EQ.value}}),A=function(r){return function(o){return function(e){return n._caseJson(t.const(r),t.const(r),t.const(r),o,t.const(r),t.const(r),e)}}},E=y(A),S=i(A),_=function(r){return function(o){return function(e){return n._caseJson(t.const(r),t.const(r),t.const(r),t.const(r),t.const(r),o,e)}}},p=y(_),v=i(_),x=function(r){return function(o){return function(e){return n._caseJson(t.const(r),t.const(r),o,t.const(r),t.const(r),t.const(r),e)}}},B=y(x),D=i(x),w=function(r){return function(o){return function(e){return n._caseJson(o,t.const(r),t.const(r),t.const(r),t.const(r),t.const(r),e)}}},F=y(w),Q=i(w),T=function(r){return function(o){return function(e){return n._caseJson(t.const(r),o,t.const(r),t.const(r),t.const(r),t.const(r),e)}}},h=y(T),G=i(T),L=function(r){return function(o){return function(e){return n._caseJson(t.const(r),t.const(r),t.const(r),t.const(r),o,t.const(r),e)}}},M=y(L),Z=i(L),k=function(r){return function(t){return function(o){return function(e){return function(u){return function(c){return function(s){return n._caseJson(r,t,o,e,u,c,s)}}}}}}};module.exports={caseJson:k,caseJsonNull:w,caseJsonBoolean:T,caseJsonNumber:x,caseJsonString:A,caseJsonArray:L,caseJsonObject:_,isNull:F,isBoolean:h,isNumber:B,isString:E,isArray:M,isObject:p,toNull:Q,toBoolean:G,toNumber:D,toString:S,toArray:Z,toObject:v,jsonTrue:a,jsonFalse:j,jsonZero:f,jsonEmptyString:b,jsonEmptyArray:J,jsonSingletonArray:l,jsonEmptyObject:g,jsonSingletonObject:m,eqJson:d,ordJson:O,fromBoolean:n.fromBoolean,fromNumber:n.fromNumber,fromString:n.fromString,fromArray:n.fromArray,fromObject:n.fromObject,jsonNull:n.jsonNull,stringify:n.stringify};
-},{"./foreign.js":"fv/y","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Foreign.Object/index.js":"jsiz"}],"p7JN":[function(require,module,exports) {
-"use strict";exports._jsonParser=function(r,e,s){try{return e(JSON.parse(s))}catch(t){return r(t.message)}};
-},{}],"QxUV":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),r=require("../Data.Either/index.js"),t=function(t){return e._jsonParser(r.Left.create,r.Right.create,t)};module.exports={jsonParser:t};
-},{"./foreign.js":"p7JN","../Data.Either/index.js":"B2JL"}],"7T8V":[function(require,module,exports) {
-"use strict";var e=require("../Data.Eq/index.js"),r=require("../Data.Functor/index.js"),n=require("../Data.Maybe/index.js"),o=require("../Data.Monoid/index.js"),t=require("../Data.Newtype/index.js"),a=require("../Data.Ord/index.js"),i=require("../Data.Semigroup/index.js"),u=require("../Data.Show/index.js"),d=require("../Data.String.Common/index.js"),s=require("../Data.Tuple/index.js"),c=require("../Global.Unsafe/index.js"),m=function(e){return e},l=function(e){return e},q=new u.Show(function(e){return"(FormURLEncoded "+u.show(u.showArray(s.showTuple(u.showString)(n.showMaybe(u.showString))))(e)+")"}),f=i.semigroupArray,p=a.ordArray(s.ordTuple(a.ordString)(n.ordMaybe(a.ordString))),w=new t.Newtype(function(e){return e},m),y=o.monoidArray,E=m,h=e.eqArray(s.eqTuple(e.eqString)(n.eqMaybe(e.eqString))),U=function(){var e=d.joinWith("&"),o=r.map(r.functorArray)(function(e){if(e.value1 instanceof n.Nothing)return c.unsafeEncodeURIComponent(e.value0);if(e.value1 instanceof n.Just)return c.unsafeEncodeURIComponent(e.value0)+"="+c.unsafeEncodeURIComponent(e.value1.value0);throw new Error("Failed pattern match at Data.FormURLEncoded (line 35, column 18 - line 37, column 90): "+[e.constructor.name])});return function(r){return e(o(l(r)))}}();module.exports={FormURLEncoded:m,fromArray:E,toArray:l,encode:U,newtypeFormUrlEncoded:w,eqFormUrlEncoded:h,ordFormUrlEncoded:p,semigroupFormUrlEncoded:f,monoidFormUrlEncoded:y,showFormUrlEncoded:q};
-},{"../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.String.Common/index.js":"OSrc","../Data.Tuple/index.js":"II/O","../Global.Unsafe/index.js":"qSZP"}],"7p2I":[function(require,module,exports) {
-"use strict";var n=require("../Data.Either/index.js"),e=require("../Data.Eq/index.js"),t=require("../Data.Ord/index.js"),i=require("../Data.Ordering/index.js"),u=require("../Data.Show/index.js"),f=require("../Data.String.Common/index.js"),r=function(){function n(){}return n.value=new n,n}(),a=function(){function n(){}return n.value=new n,n}(),o=function(){function n(){}return n.value=new n,n}(),c=function(){function n(){}return n.value=new n,n}(),s=function(){function n(){}return n.value=new n,n}(),l=function(){function n(){}return n.value=new n,n}(),v=function(){function n(){}return n.value=new n,n}(),T=function(){function n(){}return n.value=new n,n}(),w=function(){function n(){}return n.value=new n,n}(),E=function(){function n(){}return n.value=new n,n}(),L=function(){function n(){}return n.value=new n,n}(),O=function(){function n(){}return n.value=new n,n}(),C=function(){function n(){}return n.value=new n,n}(),P=function(){function n(){}return n.value=new n,n}(),d=function(){function n(){}return n.value=new n,n}(),h=function(){function n(){}return n.value=new n,n}(),m=function(n){return n},G=function(n){return n},D=new u.Show(function(n){if(n instanceof r)return"OPTIONS";if(n instanceof a)return"GET";if(n instanceof o)return"HEAD";if(n instanceof c)return"POST";if(n instanceof s)return"PUT";if(n instanceof l)return"DELETE";if(n instanceof v)return"TRACE";if(n instanceof T)return"CONNECT";if(n instanceof w)return"PROPFIND";if(n instanceof E)return"PROPPATCH";if(n instanceof L)return"MKCOL";if(n instanceof O)return"COPY";if(n instanceof C)return"MOVE";if(n instanceof P)return"LOCK";if(n instanceof d)return"UNLOCK";if(n instanceof h)return"PATCH";throw new Error("Failed pattern match at Data.HTTP.Method (line 40, column 1 - line 56, column 23): "+[n.constructor.name])}),M=new u.Show(function(n){return"(CustomMethod "+u.show(u.showString)(n)+")"}),Q=n.either(u.show(D))(G),N=function(e){var t=f.toUpper(e);return"OPTIONS"===t?new n.Left(r.value):"GET"===t?new n.Left(a.value):"HEAD"===t?new n.Left(o.value):"POST"===t?new n.Left(c.value):"PUT"===t?new n.Left(s.value):"DELETE"===t?new n.Left(l.value):"TRACE"===t?new n.Left(v.value):"CONNECT"===t?new n.Left(T.value):"PROPFIND"===t?new n.Left(w.value):"PROPPATCH"===t?new n.Left(E.value):"MKCOL"===t?new n.Left(L.value):"COPY"===t?new n.Left(O.value):"MOVE"===t?new n.Left(C.value):"LOCK"===t?new n.Left(P.value):"UNLOCK"===t?new n.Left(d.value):"PATCH"===t?new n.Left(h.value):new n.Right(t)},S=new e.Eq(function(n){return function(e){return n instanceof r&&e instanceof r||(n instanceof a&&e instanceof a||(n instanceof o&&e instanceof o||(n instanceof c&&e instanceof c||(n instanceof s&&e instanceof s||(n instanceof l&&e instanceof l||(n instanceof v&&e instanceof v||(n instanceof T&&e instanceof T||(n instanceof w&&e instanceof w||(n instanceof E&&e instanceof E||(n instanceof L&&e instanceof L||(n instanceof O&&e instanceof O||(n instanceof C&&e instanceof C||(n instanceof P&&e instanceof P||(n instanceof d&&e instanceof d||n instanceof h&&e instanceof h))))))))))))))}}),A=new t.Ord(function(){return S},function(n){return function(e){if(n instanceof r&&e instanceof r)return i.EQ.value;if(n instanceof r)return i.LT.value;if(e instanceof r)return i.GT.value;if(n instanceof a&&e instanceof a)return i.EQ.value;if(n instanceof a)return i.LT.value;if(e instanceof a)return i.GT.value;if(n instanceof o&&e instanceof o)return i.EQ.value;if(n instanceof o)return i.LT.value;if(e instanceof o)return i.GT.value;if(n instanceof c&&e instanceof c)return i.EQ.value;if(n instanceof c)return i.LT.value;if(e instanceof c)return i.GT.value;if(n instanceof s&&e instanceof s)return i.EQ.value;if(n instanceof s)return i.LT.value;if(e instanceof s)return i.GT.value;if(n instanceof l&&e instanceof l)return i.EQ.value;if(n instanceof l)return i.LT.value;if(e instanceof l)return i.GT.value;if(n instanceof v&&e instanceof v)return i.EQ.value;if(n instanceof v)return i.LT.value;if(e instanceof v)return i.GT.value;if(n instanceof T&&e instanceof T)return i.EQ.value;if(n instanceof T)return i.LT.value;if(e instanceof T)return i.GT.value;if(n instanceof w&&e instanceof w)return i.EQ.value;if(n instanceof w)return i.LT.value;if(e instanceof w)return i.GT.value;if(n instanceof E&&e instanceof E)return i.EQ.value;if(n instanceof E)return i.LT.value;if(e instanceof E)return i.GT.value;if(n instanceof L&&e instanceof L)return i.EQ.value;if(n instanceof L)return i.LT.value;if(e instanceof L)return i.GT.value;if(n instanceof O&&e instanceof O)return i.EQ.value;if(n instanceof O)return i.LT.value;if(e instanceof O)return i.GT.value;if(n instanceof C&&e instanceof C)return i.EQ.value;if(n instanceof C)return i.LT.value;if(e instanceof C)return i.GT.value;if(n instanceof P&&e instanceof P)return i.EQ.value;if(n instanceof P)return i.LT.value;if(e instanceof P)return i.GT.value;if(n instanceof d&&e instanceof d)return i.EQ.value;if(n instanceof d)return i.LT.value;if(e instanceof d)return i.GT.value;if(n instanceof h&&e instanceof h)return i.EQ.value;throw new Error("Failed pattern match at Data.HTTP.Method (line 38, column 1 - line 38, column 40): "+[n.constructor.name,e.constructor.name])}}),q=new e.Eq(function(n){return function(e){return n===e}}),H=new t.Ord(function(){return q},function(n){return function(e){return t.compare(t.ordString)(n)(e)}});module.exports={OPTIONS:r,GET:a,HEAD:o,POST:c,PUT:s,DELETE:l,TRACE:v,CONNECT:T,PROPFIND:w,PROPPATCH:E,MKCOL:L,COPY:O,MOVE:C,LOCK:P,UNLOCK:d,PATCH:h,unCustomMethod:G,fromString:N,print:Q,eqMethod:S,ordMethod:A,showMethod:D,eqCustomMethod:q,ordCustomMethod:H,showCustomMethod:M};
-},{"../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Show/index.js":"mFY7","../Data.String.Common/index.js":"OSrc"}],"z+2M":[function(require,module,exports) {
-"use strict";var n=require("../Data.Either/index.js"),e=require("../Effect.Aff/index.js"),t=function(n){return n},r=function(n){return n},f=function(t){return e.makeAff(function(r){return function(){var f=t(function(e){return r(n.Left.create(e))()},function(e){return r(n.Right.create(e))()});return function(t){return e.makeAff(function(r){return function(){return f(t,function(e){return r(n.Left.create(e))()},function(e){return r(n.Right.create(e))()}),e.nonCanceler}})}}})};module.exports={EffectFnAff:r,EffectFnCanceler:t,fromEffectFnAff:f};
-},{"../Data.Either/index.js":"B2JL","../Effect.Aff/index.js":"I7lu"}],"IjAr":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),t=require("../Affjax.RequestBody/index.js"),n=require("../Affjax.RequestHeader/index.js"),r=require("../Affjax.ResponseFormat/index.js"),a=require("../Affjax.ResponseHeader/index.js"),u=require("../Control.Applicative/index.js"),o=require("../Control.Bind/index.js"),i=require("../Control.Monad.Error.Class/index.js"),s=require("../Control.Monad.Except/index.js"),f=require("../Control.Monad.Except.Trans/index.js"),d=require("../Control.Parallel/index.js"),c=require("../Data.Argonaut.Core/index.js"),l=require("../Data.Argonaut.Parser/index.js"),m=require("../Data.Array/index.js"),p=require("../Data.Either/index.js"),h=require("../Data.Eq/index.js"),w=require("../Data.Foldable/index.js"),x=require("../Data.FormURLEncoded/index.js"),v=require("../Data.Function/index.js"),A=require("../Data.Functor/index.js"),g=require("../Data.HTTP.Method/index.js"),T=require("../Data.HeytingAlgebra/index.js"),j=require("../Data.Identity/index.js"),y=require("../Data.Int/index.js"),F=require("../Data.List.NonEmpty/index.js"),b=require("../Data.Maybe/index.js"),q=require("../Data.Nullable/index.js"),E=require("../Data.Ord/index.js"),C=require("../Data.Time.Duration/index.js"),R=require("../Data.Unit/index.js"),D=require("../Effect.Aff/index.js"),L=require("../Effect.Aff.Compat/index.js"),N=require("../Effect.Class/index.js"),M=require("../Effect.Exception/index.js"),P=require("../Effect.Ref/index.js"),J=require("../Foreign/index.js"),S=require("../Math/index.js"),B=function(e){return function(t){return function(n){var r=function(t){if(t instanceof p.Left)return p.Left.create(new p.Left(t.value0));if(t instanceof p.Right)return 200===t.value0.status?new p.Right(t.value0):e.shouldRetryWithStatusCode(t.value0.status)?p.Left.create(new p.Right(t.value0)):new p.Right(t.value0);throw new Error("Failed pattern match at Affjax (line 206, column 5 - line 208, column 39): "+[t.constructor.name])};return o.bind(D.bindAff)(N.liftEffect(D.monadEffectAff)(P.new(b.Nothing.value)))(function(a){var s=function a(s){return function(f){return o.bind(D.bindAff)(A.map(D.functorAff)(r)(i.try(D.monadErrorAff)(t(n))))(function(t){if(t instanceof p.Left)return o.discard(o.discardUnit)(D.bindAff)(N.liftEffect(D.monadEffectAff)(P.write(new b.Just(t.value0))(s)))(function(){return o.discard(o.discardUnit)(D.bindAff)(D.delay(e.delayCurve(f)))(function(){return a(s)(f+1|0)})});if(t instanceof p.Right)return u.pure(D.applicativeAff)(t.value0);throw new Error("Failed pattern match at Affjax (line 221, column 7 - line 226, column 32): "+[t.constructor.name])})}}(a);if(e.timeout instanceof b.Nothing)return s(1);if(e.timeout instanceof b.Just)return o.bind(D.bindAff)(d.parOneOf(D.parallelAff)(D.alternativeParAff)(w.foldableArray)(A.functorArray)([A.map(D.functorAff)(b.Just.create)(s(1)),A.voidRight(D.functorAff)(b.Nothing.value)(D.delay(e.timeout.value0))]))(function(e){if(e instanceof b.Nothing)return o.bind(D.bindAff)(N.liftEffect(D.monadEffectAff)(P.read(a)))(function(e){if(e instanceof b.Nothing)return i.throwError(D.monadThrowAff)(M.error("Timeout"));if(e instanceof b.Just)return p.either(i.throwError(D.monadThrowAff))(u.pure(D.applicativeAff))(e.value0);throw new Error("Failed pattern match at Affjax (line 201, column 11 - line 203, column 61): "+[e.constructor.name])});if(e instanceof b.Just)return u.pure(D.applicativeAff)(e.value0);throw new Error("Failed pattern match at Affjax (line 198, column 7 - line 204, column 31): "+[e.constructor.name])});throw new Error("Failed pattern match at Affjax (line 194, column 3 - line 204, column 31): "+[e.timeout.constructor.name])})}}},_=function(i){var d,y=function(){if(i.responseFormat instanceof r.ArrayBuffer)return J.unsafeReadTagged("ArrayBuffer");if(i.responseFormat instanceof r.Blob)return J.unsafeReadTagged("Blob");if(i.responseFormat instanceof r.Document)return J.unsafeReadTagged("Document");if(i.responseFormat instanceof r.Json)return o.composeKleisliFlipped(f.bindExceptT(j.monadIdentity))(function(e){return i.responseFormat.value0(""===(t=e)?u.pure(f.applicativeExceptT(j.monadIdentity))(c.jsonEmptyObject):p.either(function(e){return J.fail(J.ForeignError.create(e))})(u.pure(f.applicativeExceptT(j.monadIdentity)))(l.jsonParser(t)));var t})(J.unsafeReadTagged("String"));if(i.responseFormat instanceof r.String)return J.unsafeReadTagged("String");if(i.responseFormat instanceof r.Ignore)return v.const(i.responseFormat.value0(u.pure(f.applicativeExceptT(j.monadIdentity))(R.unit)));throw new Error("Failed pattern match at Affjax (line 294, column 19 - line 300, column 57): "+[i.responseFormat.constructor.name])}(),E=function(e){return function(t){return e instanceof b.Just&&!w.any(w.foldableArray)(T.heytingAlgebraBoolean)(v.on(h.eq(h.eqString))(n.name)(e.value0))(t)?m.snoc(t)(e.value0):t}},C={method:g.print(i.method),url:i.url,headers:A.map(A.functorArray)(function(e){return{field:n.name(e),value:n.value(e)}})((d=i.content,E(A.map(b.functorMaybe)(n.ContentType.create)(o.bindFlipped(b.bindMaybe)(t.toMediaType)(d)))(E(A.map(b.functorMaybe)(n.Accept.create)(r.toMediaType(i.responseFormat)))(i.headers)))),content:q.toNullable(A.map(b.functorMaybe)(function(e){if(e instanceof t.ArrayView)return e.value0(J.unsafeToForeign);if(e instanceof t.Blob)return J.unsafeToForeign(e.value0);if(e instanceof t.Document)return J.unsafeToForeign(e.value0);if(e instanceof t.String)return J.unsafeToForeign(e.value0);if(e instanceof t.FormData)return J.unsafeToForeign(e.value0);if(e instanceof t.FormURLEncoded)return J.unsafeToForeign(x.encode(e.value0));if(e instanceof t.Json)return J.unsafeToForeign(c.stringify(e.value0));throw new Error("Failed pattern match at Affjax (line 268, column 20 - line 275, column 57): "+[e.constructor.name])})(i.content)),responseType:r.toResponseType(i.responseFormat),username:q.toNullable(i.username),password:q.toNullable(i.password),withCredentials:i.withCredentials};return o.bind(D.bindAff)(L.fromEffectFnAff(e._ajax(a.ResponseHeader.create,C)))(function(e){var t=s.runExcept(y(e.body));if(t instanceof p.Left)return u.pure(D.applicativeAff)({body:new p.Left(new r.ResponseFormatError(F.head(t.value0),e.body)),headers:e.headers,status:e.status,statusText:e.statusText});if(t instanceof p.Right)return u.pure(D.applicativeAff)({body:new p.Right(t.value0),headers:e.headers,status:e.status,statusText:e.statusText});throw new Error("Failed pattern match at Affjax (line 248, column 3 - line 252, column 39): "+[t.constructor.name])})},H={timeout:b.Nothing.value,delayCurve:function(e){return C.Milliseconds(E.max(E.ordNumber)(3e4)(100*S.pow(2)(y.toNumber(e-1|0))))},shouldRetryWithStatusCode:v.const(!1)},I={method:new p.Left(g.GET.value),url:"/",headers:[],content:b.Nothing.value,username:b.Nothing.value,password:b.Nothing.value,withCredentials:!1,responseFormat:r.ignore},U=function(e){return function(t){return _({method:new p.Left(g.DELETE.value),url:t,headers:I.headers,content:I.content,username:I.username,password:I.password,withCredentials:I.withCredentials,responseFormat:e})}},O=function(){var e=A.map(D.functorAff)(function(e){return{body:R.unit,headers:e.headers,status:e.status,statusText:e.statusText}}),t=U(r.ignore);return function(n){return e(t(n))}}(),W=function(e){return function(t){return _({method:I.method,url:t,headers:I.headers,content:I.content,username:I.username,password:I.password,withCredentials:I.withCredentials,responseFormat:e})}},G=function(e){return function(t){return function(n){return _({method:new p.Left(g.PATCH.value),url:t,headers:I.headers,content:new b.Just(n),username:I.username,password:I.password,withCredentials:I.withCredentials,responseFormat:e})}}},K=function(e){var t=A.map(D.functorAff)(function(e){return{body:R.unit,headers:e.headers,status:e.status,statusText:e.statusText}}),n=G(r.ignore)(e);return function(e){return t(n(e))}},V=function(e){return function(t){return function(n){return _({method:new p.Left(g.PATCH.value),url:t,headers:I.headers,content:n,username:I.username,password:I.password,withCredentials:I.withCredentials,responseFormat:e})}}},k=function(e){var t=A.map(D.functorAff)(function(e){return{body:R.unit,headers:e.headers,status:e.status,statusText:e.statusText}}),n=V(r.ignore)(e);return function(e){return t(n(e))}},z=function(e){return function(t){return function(n){return _({method:new p.Left(g.POST.value),url:t,headers:I.headers,content:new b.Just(n),username:I.username,password:I.password,withCredentials:I.withCredentials,responseFormat:e})}}},Q=function(e){var t=A.map(D.functorAff)(function(e){return{body:R.unit,headers:e.headers,status:e.status,statusText:e.statusText}}),n=z(r.ignore)(e);return function(e){return t(n(e))}},X=function(e){return function(t){return function(n){return _({method:new p.Left(g.POST.value),url:t,headers:I.headers,content:n,username:I.username,password:I.password,withCredentials:I.withCredentials,responseFormat:e})}}},Y=function(e){var t=A.map(D.functorAff)(function(e){return{body:R.unit,headers:e.headers,status:e.status,statusText:e.statusText}}),n=X(r.ignore)(e);return function(e){return t(n(e))}},Z=function(e){return function(t){return function(n){return _({method:new p.Left(g.PUT.value),url:t,headers:I.headers,content:new b.Just(n),username:I.username,password:I.password,withCredentials:I.withCredentials,responseFormat:e})}}},$=function(e){var t=A.map(D.functorAff)(function(e){return{body:R.unit,headers:e.headers,status:e.status,statusText:e.statusText}}),n=Z(r.ignore)(e);return function(e){return t(n(e))}},ee=function(e){return function(t){return function(n){return _({method:new p.Left(g.PUT.value),url:t,headers:I.headers,content:n,username:I.username,password:I.password,withCredentials:I.withCredentials,responseFormat:e})}}},te=function(e){var t=A.map(D.functorAff)(function(e){return{body:R.unit,headers:e.headers,status:e.status,statusText:e.statusText}}),n=ee(r.ignore)(e);return function(e){return t(n(e))}};module.exports={defaultRequest:I,request:_,get:W,post:z,post_:Q,"post'":X,"post_'":Y,put:Z,put_:$,"put'":ee,"put_'":te,delete:U,delete_:O,patch:G,patch_:K,"patch'":V,"patch_'":k,defaultRetryPolicy:H,retry:B};
-},{"./foreign.js":"sseR","../Affjax.RequestBody/index.js":"TX3z","../Affjax.RequestHeader/index.js":"QBMh","../Affjax.ResponseFormat/index.js":"QSsR","../Affjax.ResponseHeader/index.js":"ev5/","../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Except/index.js":"Fye2","../Control.Monad.Except.Trans/index.js":"gr8B","../Control.Parallel/index.js":"LNK1","../Data.Argonaut.Core/index.js":"pA4l","../Data.Argonaut.Parser/index.js":"QxUV","../Data.Array/index.js":"4t4C","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FormURLEncoded/index.js":"7T8V","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.HTTP.Method/index.js":"7p2I","../Data.HeytingAlgebra/index.js":"paZe","../Data.Identity/index.js":"2OKT","../Data.Int/index.js":"xNJb","../Data.List.NonEmpty/index.js":"XAY7","../Data.Maybe/index.js":"5mN7","../Data.Nullable/index.js":"YQ8o","../Data.Ord/index.js":"r4Vb","../Data.Time.Duration/index.js":"AnkF","../Data.Unit/index.js":"NhVk","../Effect.Aff/index.js":"I7lu","../Effect.Aff.Compat/index.js":"z+2M","../Effect.Class/index.js":"dWtH","../Effect.Exception/index.js":"0OCW","../Effect.Ref/index.js":"/Jaj","../Foreign/index.js":"pu1p","../Math/index.js":"Rpaz"}],"cxC4":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Data.Array/index.js"),e=require("../Data.Array.NonEmpty/index.js"),t=require("../Data.Eq/index.js"),u=require("../Data.Functor/index.js"),i=require("../Data.Identity/index.js"),o=require("../Data.Lens.Internal.Wander/index.js"),a=require("../Data.Map.Internal/index.js"),c=require("../Data.Maybe/index.js"),f=require("../Data.Set/index.js"),d=require("../Data.Traversable/index.js"),p=require("../Foreign.Object/index.js"),x=function(n){this.ix=n},s=function(n){return n.ix},y=function(r){return new x(function(e){return function(t){return o.wander(t)(function(t){return function(u){var i=n.pure(t),o=f.insert(r)(e);return function(n){return i(o(n))}}})}})},l=new x(function(r){return function(t){return o.wander(t)(function(t){return function(i){return function(o){return c.maybe(n.pure(t)(o))((a=u.map(t.Apply0().Functor0())(function(n){return c.fromMaybe(o)(e.updateAt(r)(n)(o))}),function(n){return a(i(n))}))(e.index(o)(r));var a}}})}}),w=new x(function(n){return function(n){return o.wander(n)(function(n){return d.traverse(d.traversableMaybe)(n)})}}),b=function(r){return new x(function(e){return function(t){return o.wander(t)(function(t){return function(i){return function(o){return c.maybe(n.pure(t)(o))((f=u.map(t.Apply0().Functor0())(function(n){return a.insert(r)(e)(n)(o)}),function(n){return f(i(n))}))(a.lookup(r)(e)(o));var f}}})}})},j=new x(function(n){return function(n){return o.wander(n)(function(n){return d.traverse(i.traversableIdentity)(n)})}}),m=new x(function(r){return function(e){return o.wander(e)(function(e){return function(t){return function(i){return c.maybe(n.pure(e)(i))((o=u.map(e.Apply0().Functor0())(function(n){return p.insert(r)(n)(i)}),function(n){return o(t(n))}))(p.lookup(r)(i));var o}}})}}),q=new x(function(e){return function(t){return o.wander(t)(function(t){return function(i){return function(o){return c.maybe(n.pure(t)(o))((a=u.map(t.Apply0().Functor0())(function(n){return c.fromMaybe(o)(r.updateAt(e)(n)(o))}),function(n){return a(i(n))}))(r.index(o)(e));var a}}})}}),A=function(n){return new x(function(r){return function(e){return o.wander(e)(function(e){return function(i){return function(o){return u.mapFlipped(e.Apply0().Functor0())(i(o(r)))(function(e){return function(u){return t.eq(n)(r)(u)?e:o(u)}})}}})}})};module.exports={Index:x,ix:s,indexArr:A,indexMaybe:w,indexIdentity:j,indexArray:q,indexNonEmptyArray:l,indexSet:y,indexMap:b,indexForeignObject:m};
-},{"../Control.Applicative/index.js":"qYya","../Data.Array/index.js":"4t4C","../Data.Array.NonEmpty/index.js":"eTKN","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Identity/index.js":"2OKT","../Data.Lens.Internal.Wander/index.js":"i7fd","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Set/index.js":"+Eae","../Data.Traversable/index.js":"n7EE","../Foreign.Object/index.js":"jsiz"}],"kMIS":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),t=require("../Data.Either/index.js"),r=require("../Data.Eq/index.js"),u=require("../Data.Foldable/index.js"),i=require("../Data.Function/index.js"),o=require("../Data.Functor/index.js"),c=require("../Data.Monoid/index.js"),a=require("../Data.Newtype/index.js"),f=require("../Data.Ord/index.js"),l=require("../Data.Semigroup/index.js"),p=require("../Data.Show/index.js"),s=require("../Data.Traversable/index.js"),d=function(n){return n},m=function(n){return function(e){return function(r){if(r instanceof t.Left)return n(r.value0);if(r instanceof t.Right)return e(r.value0);throw new Error("Failed pattern match at Data.Validation.Semigroup (line 47, column 1 - line 47, column 77): "+[n.constructor.name,e.constructor.name,r.constructor.name])}}},w=function(n){return n},h=function(n){return function(e){return new p.Show(function(r){if(r instanceof t.Left)return"invalid ("+p.show(n)(r.value0)+")";if(r instanceof t.Right)return"pure ("+p.show(e)(r.value0)+")";throw new Error("Failed pattern match at Data.Validation.Semigroup (line 80, column 10 - line 82, column 55): "+[r.constructor.name])})}},q=new a.Newtype(function(n){return n},d),v=function(n){return n instanceof t.Right},V=function(n){return d(t.Left.create(n))},g=t.functorEither,E=new u.Foldable(function(n){return m(i.const(c.mempty(n)))},function(n){return function(e){return m(i.const(e))(n(e))}},function(n){return function(e){return m(i.const(e))(i.flip(n)(e))}}),x=new s.Traversable(function(){return E},function(){return g},function(e){return m((r=n.pure(e),function(n){return r(d(t.Left.create(n)))}))(o.map(e.Apply0().Functor0())(function(n){return d(t.Right.create(n))}));var r},function(e){return function(r){return m((i=n.pure(e),function(n){return i(d(t.Left.create(n)))}))((u=o.map(e.Apply0().Functor0())(function(n){return d(t.Right.create(n))}),function(n){return u(r(n))}));var u,i}}),D=function(n){return function(e){return new r.Eq(function(u){return function(i){return r.eq(t.eqEither(n)(e))(u)(i)}})}},j=function(n){return function(e){return new f.Ord(function(){return D(n.Eq0())(e.Eq0())},function(r){return function(u){return f.compare(t.ordEither(n)(e))(r)(u)}})}},L=function(n){return new r.Eq1(function(e){return r.eq(D(n)(e))})},y=function(n){return new f.Ord1(function(){return L(n.Eq0())},function(e){return f.compare(j(n)(e))})},F=t.bifunctorEither,R=function(n){return new e.Apply(function(){return g},function(e){return function(r){if(e instanceof t.Left&&r instanceof t.Left)return new t.Left(l.append(n)(e.value0)(r.value0));if(e instanceof t.Left)return new t.Left(e.value0);if(r instanceof t.Left)return new t.Left(r.value0);if(e instanceof t.Right&&r instanceof t.Right)return new t.Right(e.value0(r.value0));throw new Error("Failed pattern match at Data.Validation.Semigroup (line 88, column 1 - line 92, column 54): "+[e.constructor.name,r.constructor.name])}})},b=function(n){return function(t){return new l.Semigroup(e.lift2(R(n))(l.append(t)))}},S=function(e){return new n.Applicative(function(){return R(e)},function(n){return d(t.Right.create(n))})},A=function(e){return function(t){return new c.Monoid(function(){return b(e)(t.Semigroup0())},n.pure(S(e))(c.mempty(t)))}},O=function(n){return function(e){return m(V)(e)(n)}};module.exports={V:d,unV:m,invalid:V,isValid:v,toEither:w,andThen:O,newtypeV:q,eqV:D,eq1V:L,ordV:j,ord1V:y,showV:h,functorV:g,bifunctorV:F,applyV:R,applicativeV:S,semigroupV:b,monoidV:A,foldableV:E,traversableV:x};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE"}],"UuEA":[function(require,module,exports) {
-var process = require("process");
-var e=require("process"),r=require("../Affjax/index.js"),n=require("../Affjax.ResponseFormat/index.js"),t=require("../Control.Applicative/index.js"),i=require("../Control.Apply/index.js"),a=require("../Control.Bind/index.js"),o=require("../Control.Monad.Error.Class/index.js"),u=require("../Control.Monad.Except/index.js"),s=require("../Data.Array/index.js"),d=require("../Data.BigInt/index.js"),p=require("../Data.Either/index.js"),c=require("../Data.Filterable/index.js"),l=require("../Data.Foldable/index.js"),f=require("../Data.Functor/index.js"),m=require("../Data.Int/index.js"),g=require("../Data.Lens.Fold/index.js"),y=require("../Data.Lens.Index/index.js"),b=require("../Data.Lens.Internal.Forget/index.js"),S=require("../Data.List/index.js"),h=require("../Data.List.Types/index.js"),x=require("../Data.Map.Internal/index.js"),w=require("../Data.Maybe/index.js"),E=require("../Data.Maybe.First/index.js"),v=require("../Data.Monoid/index.js"),j=require("../Data.Newtype/index.js"),q=require("../Data.Pair/index.js"),F=require("../Data.String.CodePoints/index.js"),I=require("../Data.String.Common/index.js"),L=require("../Data.String.Pattern/index.js"),C=require("../Data.Symbol/index.js"),N=require("../Data.Time.Duration/index.js"),D=require("../Data.Traversable/index.js"),k=require("../Data.Tuple/index.js"),A=require("../Data.Unfoldable/index.js"),B=require("../Data.Validation.Semigroup/index.js"),V=require("../Effect.Aff/index.js"),M=require("../Effect.Exception/index.js"),P=require("../Foreign/index.js"),T=require("../Genetics.Browser/index.js"),R=require("../Genetics.Browser.Coordinates/index.js"),z=require("../Genetics.Browser.Types/index.js"),G=require("../Simple.JSON/index.js"),J=function(e){var r=m.fromString(e);if(r instanceof w.Nothing)return B.invalid(t.pure(h.applicativeNonEmptyList)("Error parsing int "+e));if(r instanceof w.Just)return t.pure(B.applicativeV(h.semigroupNonEmptyList))(r.value0);throw new Error("Failed pattern match at Genetics.Browser.Bed (line 98, column 14 - line 100, column 20): "+[r.constructor.name])},O=function(){var e=t.pure(B.applicativeV(h.semigroupNonEmptyList)),r=j.wrap(z.newtypeChrId),n=F.drop(3);return function(t){return e(r(n(t)))}}(),U=function(e){var r=d.fromString(e);if(r instanceof w.Nothing)return B.invalid(t.pure(h.applicativeNonEmptyList)("Error parsing int "+e));if(r instanceof w.Just)return t.pure(B.applicativeV(h.semigroupNonEmptyList))(r.value0);throw new Error("Failed pattern match at Genetics.Browser.Bed (line 103, column 17 - line 105, column 20): "+[r.constructor.name])},W=function(e){return D.traverse(D.traversableArray)(B.applicativeV(h.semigroupNonEmptyList))(U)(I.split(j.wrap(L.newtypePattern)(","))(e))},_=function(e){return i.apply(B.applyV(h.semigroupNonEmptyList))(i.apply(B.applyV(h.semigroupNonEmptyList))(i.apply(B.applyV(h.semigroupNonEmptyList))(i.apply(B.applyV(h.semigroupNonEmptyList))(i.apply(B.applyV(h.semigroupNonEmptyList))(i.apply(B.applyV(h.semigroupNonEmptyList))(i.apply(B.applyV(h.semigroupNonEmptyList))(i.apply(B.applyV(h.semigroupNonEmptyList))(f.map(B.functorV)(function(r){return function(n){return function(t){return function(i){return function(a){return function(o){return function(u){return function(s){return function(d){return{chrom:r,chromStart:n,chromEnd:t,score:i,thickStart:a,thickEnd:o,blockCount:u,blockSizes:s,blockStarts:d,geneId:e.geneId,geneName:e.geneName,itemRgb:e.itemRgb,name:e.name,strand:e.strand,tags:e.tags,type:e.type}}}}}}}}}})(O(e.chrom)))(U(e.chromStart)))(U(e.chromEnd)))(J(e.score)))(U(e.thickStart)))(U(e.thickEnd)))(J(e.blockCount)))(W(e.blockSizes)))(W(e.blockStarts))},H=function(e){return function(r){return a.bind(w.bindMaybe)(g.previewOn(e)((n=R._Segments(b.strongForget),i=y.ix(y.indexMap(z.ordChrId))(r.chrom)(b.wanderForget(E.monoidFirst)),function(e){return n(i(e))})))(function(e){var n,i=(n=j.wrap(z.newtypeBp),function(e){return n(d.toNumber(e))}),a=f.map(q.functorPair)(i)(new q.Pair(r.thickStart,r.thickEnd)),o=f.map(q.functorPair)(i)(new q.Pair(r.chromStart,r.chromEnd)),u=i(R.pairSize(d.ringBigInt)(e)),p=s.zipWith(function(e){return function(r){return f.map(q.functorPair)(i)(new q.Pair(e,r))}})(r.blockStarts)(r.blockSizes);return t.pure(w.applicativeMaybe)({position:o,frameSize:u,feature:{thickRange:a,blocks:p,geneId:r.geneId,geneName:r.geneName,chrId:r.chrom}})});var n,i}},K=function(e){return function(r){return a.bind(p.bindEither)(G.read(G.readRecord()(G.readFieldsCons(new C.IsSymbol(function(){return"blockCount"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"blockSizes"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"blockStarts"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"chrom"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"chromEnd"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"chromStart"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"geneId"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"geneName"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"itemRgb"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"name"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"score"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"strand"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"tags"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"thickEnd"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"thickStart"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"type"}))(G.readString)(G.readFieldsNil)()())()())()())()())()())()())()())()())()())()())()())()())()())()())()())()()))(r))(function(r){return a.bind(p.bindEither)(B.unV((n=f.map(h.functorNonEmptyList)(P.ForeignError.create),function(e){return p.Left.create(n(e))}))(t.pure(p.applicativeEither))(_(r)))(function(r){return w.maybe(p.Left.create(t.pure(h.applicativeNonEmptyList)(new P.ForeignError("Error parsing BedFeature"))))(t.pure(p.applicativeEither))(H(e)(r))});var n})}},Q=function(e){return function(i){return a.bind(V.bindAff)(r.get(n.json)(i))(function(r){return a.bind(V.bindAff)(p.either((i=o.throwError(V.monadThrowAff),function(e){return i(M.error(n.printResponseFormatError(e)))}))(t.pure(V.applicativeAff))(r.body))(function(r){var n,i,d=(n=o.throwError(V.monadThrowAff),i=l.foldMap(h.foldableNonEmptyList)(v.monoidString)(function(e){return e+", "}),function(e){return n(M.error(i(e)))});return a.bind(V.bindAff)(function(){var e=u.runExcept(P.readArray(r));if(e instanceof p.Left)return d(f.map(h.functorNonEmptyList)(P.renderForeignError)(e.value0));if(e instanceof p.Right)return t.pure(V.applicativeAff)(e.value0);throw new Error("Failed pattern match at Genetics.Browser.Bed (line 193, column 12 - line 195, column 24): "+[e.constructor.name])}())(function(r){var n=A.unfoldr(h.unfoldableList)(function(e){return S.null(e)?w.Nothing.value:new w.Just(new k.Tuple(S.take(100)(e),S.drop(100)(e)))})(S.fromFoldable(l.foldableArray)(r));return a.bind(V.bindAff)(D.traverse(h.traversableList)(V.applicativeAff)(function(r){return a.discard(a.discardUnit)(V.bindAff)(V.delay(j.wrap(N.newtypeMilliseconds)(.1)))(function(){var n=c.partitionMap(c.filterableList)(K(e))(r);return t.pure(V.applicativeAff)(n.right)})})(n))(function(e){var r=f.map(x.functorMap)(s.fromFoldable(h.foldableList))(T.groupToMap(h.monoidList)(z.ordChrId)(h.foldableList)(h.applicativeList)(function(e){return e.feature.chrId})(S.concat(e)));return t.pure(V.applicativeAff)(r)})})});var i})}};module.exports={validChrId:O,validInt:J,validBigInt:U,validList:W,validLine:_,parseBed:K,bedToFeature:H,getGenes:Q};
-},{"../Affjax/index.js":"IjAr","../Affjax.ResponseFormat/index.js":"QSsR","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Except/index.js":"Fye2","../Data.Array/index.js":"4t4C","../Data.BigInt/index.js":"Zx+T","../Data.Either/index.js":"B2JL","../Data.Filterable/index.js":"6hfS","../Data.Foldable/index.js":"eVDl","../Data.Functor/index.js":"+0AE","../Data.Int/index.js":"xNJb","../Data.Lens.Fold/index.js":"fCig","../Data.Lens.Index/index.js":"cxC4","../Data.Lens.Internal.Forget/index.js":"mj9z","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Maybe.First/index.js":"W/l6","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Pair/index.js":"PpsX","../Data.String.CodePoints/index.js":"mAJY","../Data.String.Common/index.js":"OSrc","../Data.String.Pattern/index.js":"nKWe","../Data.Symbol/index.js":"4oJQ","../Data.Time.Duration/index.js":"AnkF","../Data.Traversable/index.js":"n7EE","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Validation.Semigroup/index.js":"kMIS","../Effect.Aff/index.js":"I7lu","../Effect.Exception/index.js":"0OCW","../Foreign/index.js":"pu1p","../Genetics.Browser/index.js":"X0te","../Genetics.Browser.Coordinates/index.js":"7bYH","../Genetics.Browser.Types/index.js":"HhmG","../Simple.JSON/index.js":"DqNI","process":"UG8G"}],"bDzA":[function(require,module,exports) {
-"use strict";var r=require("../Color/index.js"),g=r.rgb(154)(205)(50),e=r.rgb(255)(255)(0),b=r.rgb(245)(245)(245),l=r.rgb(245)(222)(179),a=r.rgb(238)(130)(238),i=r.rgb(64)(224)(208),o=r.rgb(255)(99)(71),n=r.rgb(216)(191)(216),d=r.rgb(0)(128)(128),t=r.rgb(210)(180)(140),u=r.rgb(70)(130)(180),s=r.rgb(0)(255)(127),m=r.rgb(255)(250)(250),h=r.rgb(112)(128)(144),y=r.rgb(112)(128)(144),k=r.rgb(106)(90)(205),c=r.rgb(135)(206)(235),p=r.rgb(192)(192)(192),w=r.rgb(160)(82)(45),v=r.rgb(255)(245)(238),q=r.rgb(46)(139)(87),f=r.rgb(244)(164)(96),j=r.rgb(250)(128)(114),x=r.rgb(139)(69)(19),z=r.rgb(65)(105)(225),C=r.rgb(188)(143)(143),A=r.rgb(255)(0)(0),B=r.rgb(128)(0)(128),D=r.rgb(176)(224)(230),E=r.rgb(221)(160)(221),F=r.rgb(255)(192)(203),G=r.rgb(205)(133)(63),H=r.rgb(255)(218)(185),I=r.rgb(255)(239)(213),J=r.rgb(219)(112)(147),K=r.rgb(175)(238)(238),L=r.rgb(152)(251)(152),M=r.rgb(238)(232)(170),N=r.rgb(218)(112)(214),O=r.rgb(255)(69)(0),P=r.rgb(255)(165)(0),Q=r.rgb(107)(142)(35),R=r.rgb(128)(128)(0),S=r.rgb(253)(245)(230),T=r.rgb(0)(0)(128),U=r.rgb(255)(222)(173),V=r.rgb(255)(228)(181),W=r.rgb(255)(228)(225),X=r.rgb(245)(255)(250),Y=r.rgb(25)(25)(112),Z=r.rgb(199)(21)(133),$=r.rgb(72)(209)(204),_=r.rgb(0)(250)(154),rr=r.rgb(123)(104)(238),gr=r.rgb(60)(179)(113),er=r.rgb(147)(112)(219),br=r.rgb(186)(85)(211),lr=r.rgb(0)(0)(205),ar=r.rgb(102)(205)(170),ir=r.rgb(128)(0)(0),or=r.rgb(255)(0)(255),nr=r.rgb(250)(240)(230),dr=r.rgb(50)(205)(50),tr=r.rgb(0)(255)(0),ur=r.rgb(255)(255)(224),sr=r.rgb(176)(196)(222),mr=r.rgb(119)(136)(153),hr=r.rgb(119)(136)(153),yr=r.rgb(135)(206)(250),kr=r.rgb(32)(178)(170),cr=r.rgb(255)(160)(122),pr=r.rgb(255)(182)(193),wr=r.rgb(211)(211)(211),vr=r.rgb(144)(238)(144),qr=r.rgb(211)(211)(211),fr=r.rgb(250)(250)(210),jr=r.rgb(224)(255)(255),xr=r.rgb(240)(128)(128),zr=r.rgb(173)(216)(230),Cr=r.rgb(255)(250)(205),Ar=r.rgb(124)(252)(0),Br=r.rgb(255)(240)(245),Dr=r.rgb(230)(230)(250),Er=r.rgb(240)(230)(140),Fr=r.rgb(255)(255)(240),Gr=r.rgb(75)(0)(130),Hr=r.rgb(205)(92)(92),Ir=r.rgb(255)(105)(180),Jr=r.rgb(240)(255)(240),Kr=r.rgb(128)(128)(128),Lr=r.rgb(173)(255)(47),Mr=r.rgb(0)(128)(0),Nr=r.rgb(128)(128)(128),Or=r.rgb(218)(165)(32),Pr=r.rgb(255)(215)(0),Qr=r.rgb(248)(248)(255),Rr=r.rgb(220)(220)(220),Sr=r.rgb(255)(0)(255),Tr=r.rgb(34)(139)(34),Ur=r.rgb(255)(250)(240),Vr=r.rgb(178)(34)(34),Wr=r.rgb(30)(144)(255),Xr=r.rgb(105)(105)(105),Yr=r.rgb(105)(105)(105),Zr=r.rgb(0)(191)(255),$r=r.rgb(255)(20)(147),_r=r.rgb(148)(0)(211),rg=r.rgb(0)(206)(209),gg=r.rgb(47)(79)(79),eg=r.rgb(47)(79)(79),bg=r.rgb(72)(61)(139),lg=r.rgb(143)(188)(143),ag=r.rgb(233)(150)(122),ig=r.rgb(139)(0)(0),og=r.rgb(153)(50)(204),ng=r.rgb(255)(140)(0),dg=r.rgb(85)(107)(47),tg=r.rgb(139)(0)(139),ug=r.rgb(189)(183)(107),sg=r.rgb(169)(169)(169),mg=r.rgb(0)(100)(0),hg=r.rgb(169)(169)(169),yg=r.rgb(184)(134)(11),kg=r.rgb(0)(139)(139),cg=r.rgb(0)(0)(139),pg=r.rgb(0)(255)(255),wg=r.rgb(220)(20)(60),vg=r.rgb(255)(248)(220),qg=r.rgb(100)(149)(237),fg=r.rgb(255)(127)(80),jg=r.rgb(210)(105)(30),xg=r.rgb(127)(255)(0),zg=r.rgb(95)(158)(160),Cg=r.rgb(222)(184)(135),Ag=r.rgb(165)(42)(42),Bg=r.rgb(138)(43)(226),Dg=r.rgb(0)(0)(255),Eg=r.rgb(255)(235)(205),Fg=r.rgb(255)(228)(196),Gg=r.rgb(245)(245)(220),Hg=r.rgb(240)(255)(255),Ig=r.rgb(127)(255)(212),Jg=r.rgb(0)(255)(255),Kg=r.rgb(250)(235)(215),Lg=r.rgb(240)(248)(255);module.exports={aliceblue:Lg,antiquewhite:Kg,aqua:Jg,aquamarine:Ig,azure:Hg,beige:Gg,bisque:Fg,blanchedalmond:Eg,blue:Dg,blueviolet:Bg,brown:Ag,burlywood:Cg,cadetblue:zg,chartreuse:xg,chocolate:jg,coral:fg,cornflowerblue:qg,cornsilk:vg,crimson:wg,cyan:pg,darkblue:cg,darkcyan:kg,darkgoldenrod:yg,darkgray:hg,darkgreen:mg,darkgrey:sg,darkkhaki:ug,darkmagenta:tg,darkolivegreen:dg,darkorange:ng,darkorchid:og,darkred:ig,darksalmon:ag,darkseagreen:lg,darkslateblue:bg,darkslategray:eg,darkslategrey:gg,darkturquoise:rg,darkviolet:_r,deeppink:$r,deepskyblue:Zr,dimgray:Yr,dimgrey:Xr,dodgerblue:Wr,firebrick:Vr,floralwhite:Ur,forestgreen:Tr,fuchsia:Sr,gainsboro:Rr,ghostwhite:Qr,gold:Pr,goldenrod:Or,gray:Nr,green:Mr,greenyellow:Lr,grey:Kr,honeydew:Jr,hotpink:Ir,indianred:Hr,indigo:Gr,ivory:Fr,khaki:Er,lavender:Dr,lavenderblush:Br,lawngreen:Ar,lemonchiffon:Cr,lightblue:zr,lightcoral:xr,lightcyan:jr,lightgoldenrodyellow:fr,lightgray:qr,lightgreen:vr,lightgrey:wr,lightpink:pr,lightsalmon:cr,lightseagreen:kr,lightskyblue:yr,lightslategray:hr,lightslategrey:mr,lightsteelblue:sr,lightyellow:ur,lime:tr,limegreen:dr,linen:nr,magenta:or,maroon:ir,mediumaquamarine:ar,mediumblue:lr,mediumorchid:br,mediumpurple:er,mediumseagreen:gr,mediumslateblue:rr,mediumspringgreen:_,mediumturquoise:$,mediumvioletred:Z,midnightblue:Y,mintcream:X,mistyrose:W,moccasin:V,navajowhite:U,navy:T,oldlace:S,olive:R,olivedrab:Q,orange:P,orangered:O,orchid:N,palegoldenrod:M,palegreen:L,paleturquoise:K,palevioletred:J,papayawhip:I,peachpuff:H,peru:G,pink:F,plum:E,powderblue:D,purple:B,red:A,rosybrown:C,royalblue:z,saddlebrown:x,salmon:j,sandybrown:f,seagreen:q,seashell:v,sienna:w,silver:p,skyblue:c,slateblue:k,slategray:y,slategrey:h,snow:m,springgreen:s,steelblue:u,tan:t,teal:d,thistle:n,tomato:o,turquoise:i,violet:a,wheat:l,whitesmoke:b,yellow:e,yellowgreen:g};
-},{"../Color/index.js":"f3ma"}],"RTVM":[function(require,module,exports) {
-"use strict";var r=require("../Data.Profunctor.Strong/index.js"),t=function(t){return r.second(t)},n=function(t){return r.first(t)};module.exports={_1:n,_2:t};
-},{"../Data.Profunctor.Strong/index.js":"w9p6"}],"3sXk":[function(require,module,exports) {
-"use strict";exports.unsafeKeys=Object.keys||function(e){var r=[];for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&r.push(t);return r};
-},{}],"hcOM":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),i=require("../Control.Applicative/index.js"),n=require("../Control.Monad.Except.Trans/index.js"),r=require("../Data.Boolean/index.js"),t=require("../Data.Identity/index.js"),o=require("../Foreign/index.js"),a=function(a){if(o.isNull(a))return o.fail(new o.TypeMismatch("object","null"));if(o.isUndefined(a))return o.fail(new o.TypeMismatch("object","undefined"));if("object"===o.typeOf(a))return i.pure(n.applicativeExceptT(t.monadIdentity))(e.unsafeKeys(a));if(r.otherwise)return o.fail(new o.TypeMismatch("object",o.typeOf(a)));throw new Error("Failed pattern match at Foreign.Keys (line 15, column 1 - line 15, column 36): "+[a.constructor.name])};module.exports={keys:a};
-},{"./foreign.js":"3sXk","../Control.Applicative/index.js":"qYya","../Control.Monad.Except.Trans/index.js":"gr8B","../Data.Boolean/index.js":"ObQr","../Data.Identity/index.js":"2OKT","../Foreign/index.js":"pu1p"}],"OuXj":[function(require,module,exports) {
-"use strict";exports.pickFn=function(r,t){for(var n={},e=0;e<r.length;e++)n[r[e]]=t[r[e]];return n};
-},{}],"KzZr":[function(require,module,exports) {
-"use strict";var n=require("./foreign.js"),r=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),u=require("../Control.Category/index.js"),t=require("../Control.Semigroupoid/index.js"),o=require("../Data.Array/index.js"),i=require("../Data.Function.Uncurried/index.js"),c=require("../Data.Functor/index.js"),f=require("../Data.List.Types/index.js"),a=require("../Data.Monoid/index.js"),l=require("../Data.Ord/index.js"),d=require("../Data.Ordering/index.js"),s=require("../Data.Symbol/index.js"),p=require("../Data.Tuple/index.js"),y=require("../Record/index.js"),R=require("../Record.Builder/index.js"),x=require("../Type.Data.Row/index.js"),m=require("../Type.Data.RowList/index.js"),v=function(){function n(){}return n.value=new n,n}(),P=function(n){this.zipRecordImpl=n},q=function(n,r){this.Functor0=n,this.sequenceRecordImpl=r},S={},L=function(n){this.compareRecordImpl=n},g=function(n){this.mapRecordBuilder=n},j=function(n){this.keysImpl=n},w=new P(function(n){return function(n){return function(n){return function(n){return u.identity(R.categoryBuilder)}}}}),F=function(n){return n.zipRecordImpl},I=function(n){return function(r){return function(e){return function(u){return function(o){return function(i){return new P(function(c){return function(c){return function(f){return function(f){var a=F(i)(m.RLProxy.value)(c)(m.RLProxy.value)(f),l=new p.Tuple(y.get(n)(r)(s.SProxy.value)(c),y.get(n)(e)(s.SProxy.value)(f)),d=R.insert(u)(o)(n)(s.SProxy.value)(l);return t.compose(R.semigroupoidBuilder)(d)(a)}}}})}}}}}},C=function(n){return function(n){return function(n){return function(r){return function(e){var u=F(n)(m.RLProxy.value)(r)(m.RLProxy.value)(e);return R.build(u)({})}}}}},D=S,B=function(n){return S},k=function(n){return function(r){return function(e){return function(u){return function(t){return new q(function(){return e},function(o){return function(o){var i=y.get(n)(r)(s.SProxy.value)(o);return c.map(e)(R.insert(t)(u)(n)(s.SProxy.value))(i)}})}}}}},T=function(n){return new q(n.Apply0().Functor0,function(e){return function(e){return r.pure(n)(u.identity(R.categoryBuilder))}})},b=function(n){return n.sequenceRecordImpl},h=function(n){return function(r){return function(u){return function(o){return function(i){return function(f){return new q(u.Functor0,function(a){return function(a){var l=b(o)(m.RLProxy.value)(a),d=y.get(n)(r)(s.SProxy.value)(a);return e.apply(u)(c.map(u.Functor0())(function(r){return function(e){return t.compose(R.semigroupoidBuilder)(R.insert(f)(i)(n)(s.SProxy.value)(r))(e)}})(d))(l)}})}}}}}},z=function(n){return function(n){return function(r){var e=b(n)(m.RLProxy.value)(r);return c.map(n.Functor0())(c.flap(c.functorFn)(R.build)({}))(e)}}},N=new L(function(n){return function(n){return function(n){return d.EQ.value}}}),A=new j(function(n){return a.mempty(f.monoidList)}),K=new g(function(n){return function(n){return function(n){return u.identity(R.categoryBuilder)}}}),O=function(n){return n.mapRecordBuilder},E=function(n){return function(r){return function(e){return function(u){return function(o){return new g(function(i){return function(i){return function(c){var f=O(e)(m.RLProxy.value)(i)(c),a=i(y.get(n)(r)(s.SProxy.value)(c)),l=R.insert(o)(u)(n)(s.SProxy.value)(a);return t.compose(R.semigroupoidBuilder)(l)(f)}}})}}}}},M=function(n){return function(n){return function(r){return function(e){var u=O(n)(m.RLProxy.value)(r)(e);return R.build(u)({})}}}},Q=function(n){return n.keysImpl},U=function(n){return function(n){return function(r){return Q(n)(m.RLProxy.value)}}},Z=function(n){return function(n){return function(r){return Q(n)(m.RLProxy.value)}}},G=function(r){return function(r){return function(e){var u=o.fromFoldable(f.foldableList)(Z(r)(e)(x.RProxy.value));return i.runFn2(n.pickFn)(u)}}},H=function(n){return function(r){return new j(function(e){var u=Q(r)(m.RLProxy.value),t=s.reflectSymbol(n)(s.SProxy.value);return new f.Cons(t,u)})}},J=function(n){return n.compareRecordImpl},V=function(n){return function(r){return function(e){return function(u){return new L(function(t){return function(t){return function(o){var i=y.get(n)(e)(s.SProxy.value)(t),c=y.get(n)(e)(s.SProxy.value)(o),f=l.compare(r)(i)(c);return f instanceof d.EQ?J(u)(m.RLProxy.value)(t)(o):f}}})}}}},W=function(n){return function(n){return function(r){return function(e){return J(n)(m.RLProxy.value)(r)(e)}}}};module.exports={compareRecordImpl:J,keysImpl:Q,mapRecordBuilder:O,sequenceRecordImpl:b,zipRecordImpl:F,mapRecord:M,MapRecord:g,ZipRecord:P,zipRecord:C,Keys:j,keys:Z,pick:G,slistKeys:U,SLProxy:v,SListToRowList:S,OrdRecord:L,compareRecord:W,SequenceRecord:q,sequenceRecord:z,mapRecordCons:E,mapRecordNil:K,zipRecordNil:w,zipRecordCons:I,nilKeys:A,consKeys:H,slToRlSNil:D,slToRlSCons:B,ordRecordCons:V,ordRecordNil:N,sequenceRecordSingle:k,sequenceRecordCons:h,sequenceRecordNil:T,pickFn:n.pickFn};
-},{"./foreign.js":"OuXj","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Control.Semigroupoid/index.js":"/riR","../Data.Array/index.js":"4t4C","../Data.Function.Uncurried/index.js":"TowT","../Data.Functor/index.js":"+0AE","../Data.List.Types/index.js":"Xxuc","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Symbol/index.js":"4oJQ","../Data.Tuple/index.js":"II/O","../Record/index.js":"0gG4","../Record.Builder/index.js":"VeY4","../Type.Data.Row/index.js":"ukdD","../Type.Data.RowList/index.js":"XaXP"}],"mKwt":[function(require,module,exports) {
-"use strict";var e=require("../Affjax/index.js"),n=require("../Affjax.ResponseFormat/index.js"),r=require("../Color/index.js"),t=require("../Color.Scheme.Clrs/index.js"),i=require("../Color.Scheme.X11/index.js"),o=require("../Control.Applicative/index.js"),a=require("../Control.Bind/index.js"),u=require("../Control.Category/index.js"),f=require("../Control.Monad.Error.Class/index.js"),d=require("../Control.Monad.Except/index.js"),c=require("../Control.Monad.Except.Trans/index.js"),l=require("../Control.Semigroupoid/index.js"),s=require("../Data.Array/index.js"),p=require("../Data.BigInt/index.js"),m=require("../Data.Boolean/index.js"),b=require("../Data.Either/index.js"),y=require("../Data.Eq/index.js"),w=require("../Data.EuclideanRing/index.js"),g=require("../Data.Filterable/index.js"),h=require("../Data.Foldable/index.js"),v=require("../Data.FoldableWithIndex/index.js"),x=require("../Data.Function/index.js"),A=require("../Data.Functor/index.js"),S=require("../Data.FunctorWithIndex/index.js"),C=require("../Data.Identity/index.js"),I=require("../Data.Lens.Getter/index.js"),j=require("../Data.Lens.Internal.Forget/index.js"),q=require("../Data.Lens.Internal.Re/index.js"),E=require("../Data.Lens.Iso/index.js"),L=require("../Data.Lens.Lens.Tuple/index.js"),F=require("../Data.List/index.js"),B=require("../Data.List.Types/index.js"),D=require("../Data.Map.Internal/index.js"),M=require("../Data.Maybe/index.js"),N=require("../Data.Monoid/index.js"),T=require("../Data.Newtype/index.js"),k=require("../Data.Ord/index.js"),P=require("../Data.Pair/index.js"),G=require("../Data.Profunctor.Strong/index.js"),R=require("../Data.Ring/index.js"),O=require("../Data.Semigroup/index.js"),_=require("../Data.Semiring/index.js"),z=require("../Data.Show/index.js"),U=require("../Data.Symbol/index.js"),W=require("../Data.Traversable/index.js"),K=require("../Data.Tuple/index.js"),H=require("../Data.Unfoldable/index.js"),J=require("../Data.Unit/index.js"),X=require("../Data.Variant/index.js"),V=require("../Effect.Aff/index.js"),Y=require("../Effect.Aff.Class/index.js"),Q=require("../Effect.Class/index.js"),Z=require("../Effect.Class.Console/index.js"),$=require("../Effect.Exception/index.js"),ee=require("../Effect.Ref/index.js"),ne=require("../Foreign/index.js"),re=require("../Foreign.Index/index.js"),te=require("../Foreign.Keys/index.js"),ie=require("../Foreign.Object/index.js"),oe=require("../Genetics.Browser/index.js"),ae=require("../Genetics.Browser.Cacher/index.js"),ue=require("../Genetics.Browser.Canvas/index.js"),fe=require("../Genetics.Browser.Coordinates/index.js"),de=require("../Genetics.Browser.Layer/index.js"),ce=require("../Genetics.Browser.Types/index.js"),le=require("../Graphics.Drawing/index.js"),se=require("../Math/index.js"),pe=require("../Record/index.js"),me=require("../Record.Builder/index.js"),be=require("../Record.Extra/index.js"),ye=require("../Simple.JSON/index.js"),we=require("../Type.Equality/index.js"),ge=function(e){return oe.fixedUILayer(de.CLeft.create(oe.drawVScaleInSlot(e)))},he=function(e){return function(n){return a.bind(M.bindMaybe)(h.minimumBy(h.foldableArray)(x.on(k.compare(k.ordNumber))(function(e){return e.feature.score}))(n))(function(r){var t=fe.aroundPair(ce.ringBp)(e)(r.position),i=g.partition(g.filterableArray)(function(e){return fe.pairsOverlap(ce.ordBp)(e.position)(t)})(n);return o.pure(M.applicativeMaybe)(new K.Tuple({covers:t,y:r.feature.score,elements:i.yes},i.no))})}},ve=function(e){return function(n){var r=ie.lookup(n.field)(e);if(r instanceof M.Nothing)return n.field+": "+n.value;if(r instanceof M.Just)return"<a target='_blank' href='"+n.value+"'>"+r.value0+"</a>";throw new Error("Failed pattern match at Genetics.Browser.Demo (line 253, column 3 - line 258, column 26): "+[r.constructor.name])}},xe=function(e){return function(n){var r="Chr: "+z.show(ce.showChrId)(n.feature.chr),t=M.fromMaybe("SNP: "+n.feature.name)(A.map(M.functorMaybe)(function(e){return"Gene: "+e})(n.feature.gene)),i="Pos: "+z.show(ce.showBp)(n.feature.pos);return O.append(B.semigroupList)(F.fromFoldable(h.foldableArray)([t,r,i]))(A.map(B.functorList)(ve(e))(n.feature.rest))}},Ae=function(e){return function(n){return a.bind(M.bindMaybe)(h.minimumBy(h.foldableArray)(x.on(k.compare(k.ordNumber))(function(e){return e.feature.score}))(n))(function(r){var t=fe.aroundPair(ce.ringBp)(e)(r.position),i=g.partition(g.filterableArray)(function(e){return fe.pairsOverlap(ce.ordBp)(e.position)(t)})(n);return o.pure(M.applicativeMaybe)(new K.Tuple({covers:t,y:r.feature.score,elements:i.yes},i.no))})}},Se=function(e){return function(n){return H.unfoldr(H.unfoldableArray)(Ae(e))(n)}},Ce=function(e){return function(n){return a.bind(c.bindExceptT(C.monadIdentity))(ye["read'"](ye.readRecord()(ye.readFieldsCons(new U.IsSymbol(function(){return"chr"}))(ye.readString)(ye.readFieldsCons(new U.IsSymbol(function(){return"p_wald"}))(ye.readNumber)(ye.readFieldsCons(new U.IsSymbol(function(){return"ps"}))(ye.readNumber)(ye.readFieldsCons(new U.IsSymbol(function(){return"rs"}))(ye.readString)(ye.readFieldsNil)()())()())()())()()))(n))(function(n){var r,t=(r=n.ps,A.map(P.functorPair)(T.wrap(ce.newtypeBp))(new P.Pair(r,r))),i={score:n.p_wald,chrId:T.wrap(ce.newtypeChrId)(n.chr),name:n.rs};return a.bind(c.bindExceptT(C.monadIdentity))(function(){var n=D.lookup(ce.ordChrId)(i.chrId)(I.view(fe._Segments(j.strongForget))(e));if(n instanceof M.Nothing)return f.throwError(c.monadThrowExceptT(C.monadIdentity))(o.pure(B.applicativeNonEmptyList)(new ne.ForeignError("Annotation chr not found in coordinate system!")));if(n instanceof M.Just)return o.pure(c.applicativeExceptT(C.monadIdentity))(ce.Bp(p.toNumber(fe.pairSize(p.ringBigInt)(n.value0))));throw new Error("Failed pattern match at Genetics.Browser.Demo (line 173, column 16 - line 179, column 49): "+[n.constructor.name])}())(function(e){return o.pure(c.applicativeExceptT(C.monadIdentity))({position:t,frameSize:e,feature:i})})})}},Ie=function(e){var n=fe.normalize(w.euclideanRingNumber)(e.min)(e.max),r=T.unwrap(ce.newtypeNegLog10),t=I.view(ce._NegLog10(j.profunctorForget));return function(e){return n(r(t(e)))}},je=function(r){return function(t){return a.bind(V.bindAff)(e.get(n.json)(t))(function(e){return a.discard(a.discardUnit)(V.bindAff)(Q.liftEffect(V.monadEffectAff)(Z.log(Q.monadEffectEffect)(e.body)))(function(){return a.bind(V.bindAff)(b.either((t=f.throwError(V.monadThrowAff),function(e){return t($.error(n.printResponseFormatError(e)))}))(o.pure(V.applicativeAff))(e.body))(function(e){return a.bind(V.bindAff)(function(){var n=d.runExcept(ne.readArray(e));if(n instanceof b.Left)return f.throwError(V.monadThrowAff)($.error("SNP data is not an array"));if(n instanceof b.Right)return o.pure(V.applicativeAff)(n.value0);throw new Error("Failed pattern match at Genetics.Browser.Demo (line 287, column 5 - line 291, column 31): "+[n.constructor.name])}())(function(e){var n,t=g.partitionMap(g.filterableArray)((n=Ce(r),function(e){return d.runExcept(n(e))}))(e);return o.pure(V.applicativeAff)(oe.groupToMap(N.monoidArray)(ce.ordChrId)(h.foldableArray)(o.applicativeArray)(function(e){return e.feature.chrId})(g.filter(g.filterableArray)(function(e){return k.greaterThanOrEq(ce.ordBp)(P.fst(e.position))(T.wrap(ce.newtypeBp)(0))})(t.right)))})});var t})})}},qe=function(e){return A.map(D.functorMap)(g.filter(g.filterableArray)(function(n){return n.feature.score<=I.viewOn(e.sig)(E.re(ce._NegLog10(q.profunctorRe(j.profunctorForget))))}))},Ee=function(e){return function(n){return function(t){var a=fe.pairSize(R.ringNumber)(n),u=function(e){return a*T.unwrap(ce.newtypeBp)(w.div(ce.euclideanRingBp)(e)(t.frameSize))},f=u(R.sub(ce.ringBp)(t.position.value1)(t.position.value0)),d=function(e){var n=A.map(P.functorPair)(u)(e);return le.rectangle(n.value0)(0)(n.value1)(30)},c=function(e){var n=h.foldMap(h.foldableArray)(le.monoidShape)(d)(g.filter(g.filterableArray)(function(e){return function(e){return P.snd(A.map(P.functorPair)(u)(e))}(e)>1})(t.feature.blocks));return O.append(le.semigroupDrawing)(le.outlined(O.append(le.semigroupOutlineStyle)(le.outlineColor(i.darkgrey))(le.lineWidth(1)))(n))(le.filled(le.fillColor(i.lightgrey))(n))};if(f<1)return M.Nothing.value;var l={x:n.value0+fe.pairSize(R.ringNumber)(n)*T.unwrap(fe.newtypeNormalized)(oe.featureNormX(t)),y:.5*e.height},s={x:l.x+f,y:l.y+15};return o.pure(M.applicativeMaybe)({bigDrawing:{drawing:function(e){return O.append(le.semigroupDrawing)((J.unit,n=le.rectangle(1.5)(14)(f-1.5)(2),O.append(le.semigroupDrawing)(le.outlined(O.append(le.semigroupOutlineStyle)(le.outlineColor(r.black))(le.lineWidth(3)))(n))(le.filled(le.fillColor(r.black))(n))))(c(J.unit));var n},topLeft:l,bottomRight:s},label:{text:t.feature.geneName,point:l,gravity:ue.LCenter.value}})}}},Le=function(e){return function(n){return function(n){return function(r){var t,i=D.toUnfoldable(B.unfoldableList)(A.map(D.functorMap)(F.fromFoldable(h.foldableArray))(e)),u=F.concatMap(function(e){return M.fromMaybe(N.mempty(B.monoidList))(a.bind(M.bindMaybe)(D.lookup(ce.ordChrId)(e.value0)(n))(function(n){return o.pure(M.applicativeMaybe)(g.filterMap(g.filterableList)(Ee(r)(n))(e.value1))}))})(i),f=X.inj()(new U.IsSymbol(function(){return"labels"}))(ue._labels)(A.map(B.functorList)(function(e){return e.label})(u)),d=A.map(B.functorList)((t=X.inj()(new U.IsSymbol(function(){return"bigDrawing"}))(ue._bigDrawing),function(e){return t(e.bigDrawing)}))(u);return{renderables:new B.Cons(f,d)}}}}},Fe=function(e){return function(n){var r=e.y-n.y,t=e.x-n.x;return se.sqrt(se.pow(t)(2)+se.pow(r)(2))}},Be=function(e){return function(n){var r,t,i,a=A.map(D.functorMap)(F.fromFoldable(h.foldableArray))(e),f=function(e){return v.foldMapWithIndex(D.foldableWithIndexMap)(B.monoidList)(function(r){return function(t){return h.foldMap(h.foldableMaybe)(B.monoidList)(A.map(B.functorList)(G.fanout(u.categoryFn)(G.strongFn)(u.identity(u.categoryFn))((i=t,function(r){return{x:i.value0+fe.pairSize(R.ringNumber)(i)*T.unwrap(fe.newtypeNormalized)(oe.featureNormX(r)),y:e.height*(1-Ie(n.threshold)(r.feature.score))}}))))(D.lookup(ce.ordChrId)(r)(a));var i}})},d=function(e){return function(r){return function(t){return s.fromFoldable(B.foldableList)(g.filterMap(g.filterableList)(function(e){if(Fe(e.value1)(t)<=n.render.radius+r)return new M.Just(e.value0);if(m.otherwise)return M.Nothing.value;throw new Error("Failed pattern match at Genetics.Browser.Demo (line 546, column 15 - line 546, column 63): "+[e.constructor.name])})(e))}}},c=(r=le.circle(n.render.pixelOffset.x)(n.render.pixelOffset.y)(n.render.radius),t=le.filled(le.fillColor(T.unwrap(oe.newtypeHexColor)(n.render.color.fill)))(r),i=le.outlined(O.append(le.semigroupOutlineStyle)(le.outlineColor(T.unwrap(oe.newtypeHexColor)(n.render.color.outline)))(le.lineWidth(n.render.lineWidth)))(r),O.append(le.semigroupDrawing)(i)(t)),l=function(e){return o.pure(o.applicativeArray)({drawing:c,points:A.map(A.functorArray)(I.view(L._2(j.strongForget)))(s.fromFoldable(B.foldableList)(e))})};return function(e){return function(n){var r=f(n)(e);return{renderables:o.pure(B.applicativeList)(X.inj()(new U.IsSymbol(function(){return"drawingBatch"}))(ue._drawingBatch)(l(r))),hotspots:d(r)}}}}},De=function(e){return Be(e.trackConfig.snps)({threshold:e.browserConfig.threshold,render:e.layerConfig})},Me={radius:3.75,lineWidth:1,color:{outline:T.wrap(oe.newtypeHexColor)(i.darkblue),fill:T.wrap(oe.newtypeHexColor)(i.darkblue)},pixelOffset:{x:0,y:0}},Ne={radius:5.5,outline:T.wrap(oe.newtypeHexColor)(r.black),snpColor:T.wrap(oe.newtypeHexColor)(t.blue),geneColor:T.wrap(oe.newtypeHexColor)(t.red),urls:ie.empty},Te=function(e){return oe.fixedUILayer(de.CRight.create(oe.drawLegendInSlot(e)))},ke=function(e){return function(e){return function(n){return S.mapWithIndex(D.functorWithIndexMap)(function(r){return function(t){return M.fromMaybe([])(a.bind(M.bindMaybe)(D.lookup(ce.ordChrId)(r)(e))(function(e){return a.bind(M.bindMaybe)(D.lookup(ce.ordChrId)(r)(n))(function(n){return a.bind(M.bindMaybe)(A.map(M.functorMaybe)(function(e){return e.frameSize})(s.head(e)))(function(r){var i=w.div(ce.euclideanRingBp)(_.mul(ce.semiringBp)(T.wrap(ce.newtypeBp)(3.75))(r))(T.wrap(ce.newtypeBp)(fe.pairSize(R.ringNumber)(t)));return o.pure(M.applicativeMaybe)(A.map(A.functorArray)(function(e){return{elements:g.filter(g.filterableArray)((r=fe.pairsOverlap(ce.ordBp)(e.covers),function(e){return r(e.position)}))(n),covers:e.covers,y:e.y};var r})(Se(i)(e)))})})}))}})}}},Pe=function(e){return function(n){var r=function(n){return O.append(O.semigroupFn(le.semigroupDrawing))(le.outlined(O.append(le.semigroupOutlineStyle)(le.outlineColor(T.unwrap(oe.newtypeHexColor)(e.outline)))(le.lineWidth(2))))(le.filled(le.fillColor(T.unwrap(oe.newtypeHexColor)(n))))(le.circle(0)(0)(e.radius))};if(n.feature.gene instanceof M.Nothing)return{text:"SNP name",icon:r(e.snpColor)};if(n.feature.gene instanceof M.Just)return{text:"Gene name",icon:r(e.geneColor)};throw new Error("Failed pattern match at Genetics.Browser.Demo (line 409, column 6 - line 411, column 69): "+[n.feature.gene.constructor.name])}},Ge=function(e){return function(n){return function(n){return function(r){var t=s.concat(s.fromFoldable(B.foldableList)(A.map(B.functorList)(s.fromFoldable(e))(D.values(r))));return oe.trackLegend(h.foldableArray)(A.functorArray)(Pe(n))(t)}}}},Re=function(e){return function(n){return function(t){return function(i){return function(u){var f=.06*u.height,d=function(e){var n=e.covers.value0+.5*(e.covers.value1-e.covers.value0),i=s.null(e.elements)?N.mempty(le.monoidDrawing):le.outlined(O.append(le.semigroupOutlineStyle)(le.lineWidth(1.3))(le.outlineColor(r.black)))(le.path(h.foldableArray)([{x:0,y:0},{x:0,y:-f}])),o=le.translate(0)(-f)(h.foldr(h.foldableArray)(function(e){return function(n){return le.translate(0)(-6.5)(O.append(le.semigroupDrawing)(Pe(t)(e).icon)(n))}})(N.mempty(le.monoidDrawing))(e.elements)),a=14*h.length(h.foldableArray)(_.semiringNumber)(e.elements),u={drawing:O.append(le.semigroupDrawing)(i)(o),points:[{x:n,y:e.y}]},d=function(e){var n=f+4.5*h.length(h.foldableArray)(_.semiringNumber)(e.elements),r=e.y-n;return{x:e.covers.value0,y:r,width:14,height:n}}(e),c=d.y>a?{g:ue.LCenter.value,y0:d.y}:{g:ue.LLeft.value,y0:e.y},l=K.snd(h.foldr(h.foldableArray)(function(e){return function(r){return K.Tuple.create(r.value0-8)(new B.Cons({text:M.fromMaybe(e.feature.name)(e.feature.gene),point:{x:n,y:r.value0},gravity:c.g},r.value1))}})(new K.Tuple(c.y0,N.mempty(B.monoidList)))(e.elements));return new K.Tuple([u],l)};return function(r){var t,f=(t=function(r){return S.mapWithIndex(D.functorWithIndexMap)(function(t){return function(i){return M.fromMaybe([])(a.bind(M.bindMaybe)(A.map(M.functorMaybe)((f=T.wrap(ce.newtypeBp),d=fe.pairSize(p.ringBigInt),function(e){return f(p.toNumber(d(e)))}))(D.lookup(ce.ordChrId)(t)(I.viewOn(e)(fe._Segments(j.strongForget)))))(function(e){return a.bind(M.bindMaybe)(D.lookup(ce.ordChrId)(t)(r))(function(r){return o.pure(M.applicativeMaybe)(A.map(A.functorArray)(function(t){return{covers:A.map(P.functorPair)(function(n){return r.value0+fe.pairSize(R.ringNumber)(r)*T.unwrap(ce.newtypeBp)(w.div(ce.euclideanRingBp)(n)(e))})(t.covers),y:u.height*(1-Ie(n)(t.y)),elements:t.elements}})(i))})}));var f,d}})(i)}(r),h.foldMap(D.foldableMap)(K.monoidTuple(N.monoidArray)(B.monoidList))(h.foldMap(h.foldableArray)(K.monoidTuple(N.monoidArray)(B.monoidList))(d))(t));return{drawingBatch:f.value0,labels:f.value1}}}}}}},Oe=function(e){return function(n){return function(r){return function(t){var i=ke(e)(n)(r);return function(n){return function(r){var o=Re(e)(t.threshold)(t.render)(i(n))(r)(n);return{renderables:F.fromFoldable(h.foldableArray)([X.inj()(new U.IsSymbol(function(){return"drawingBatch"}))(ue._drawingBatch)(o.drawingBatch),X.inj()(new U.IsSymbol(function(){return"labels"}))(ue._labels)(o.labels)])}}}}}}},_e=function(e){return function(e){return be.keys()(be.consKeys(new U.IsSymbol(function(){return"chr"}))(be.consKeys(new U.IsSymbol(function(){return"gene"}))(be.consKeys(new U.IsSymbol(function(){return"name"}))(be.consKeys(new U.IsSymbol(function(){return"pos"}))(be.consKeys(new U.IsSymbol(function(){return"url"}))(be.nilKeys))))))(J.unit)}},ze=function(e){return a.bind(c.bindExceptT(C.monadIdentity))(A.map(c.functorExceptT(C.functorIdentity))(F.fromFoldable(h.foldableArray))(te.keys(e)))(function(n){var r=F.difference(y.eqString)(n)(_e(be.consKeys(new U.IsSymbol(function(){return"chr"}))(be.consKeys(new U.IsSymbol(function(){return"gene"}))(be.consKeys(new U.IsSymbol(function(){return"name"}))(be.consKeys(new U.IsSymbol(function(){return"pos"}))(be.consKeys(new U.IsSymbol(function(){return"url"}))(be.nilKeys))))))());return W.for(c.applicativeExceptT(C.monadIdentity))(B.traversableList)(r)(function(n){return A.map(c.functorExceptT(C.functorIdentity))(function(e){return{field:n,value:e}})(re.readProp(n)(e))})})},Ue=function(e){return function(n){return a.bind(c.bindExceptT(C.monadIdentity))(ye["read'"](ye.readRecord()(ye.readFieldsCons(new U.IsSymbol(function(){return"chr"}))(ye.readString)(ye.readFieldsCons(new U.IsSymbol(function(){return"gene"}))(ye.readMaybe(ye.readString))(ye.readFieldsCons(new U.IsSymbol(function(){return"name"}))(ye.readString)(ye.readFieldsCons(new U.IsSymbol(function(){return"pos"}))(ye.readNumber)(ye.readFieldsCons(new U.IsSymbol(function(){return"url"}))(ye.readMaybe(ye.readString))(ye.readFieldsNil)()())()())()())()())()()))(n))(function(r){return a.bind(c.bindExceptT(C.monadIdentity))(ze(n))(function(n){var t,i=me.build(l.composeFlipped(me.semigroupoidBuilder)(me.insert()()(new U.IsSymbol(function(){return"rest"}))(U.SProxy.value)(n))(l.composeFlipped(me.semigroupoidBuilder)(me.modify()()(new U.IsSymbol(function(){return"chr"}))(U.SProxy.value)(ce.ChrId))(me.modify()()(new U.IsSymbol(function(){return"pos"}))(U.SProxy.value)(ce.Bp))))(r),u=(t=i.pos,new P.Pair(t,t));return a.bind(c.bindExceptT(C.monadIdentity))(function(){var n=D.lookup(ce.ordChrId)(i.chr)(I.view(fe._Segments(j.strongForget))(e));if(n instanceof M.Nothing)return f.throwError(c.monadThrowExceptT(C.monadIdentity))(o.pure(B.applicativeNonEmptyList)(new ne.ForeignError("Annotation chr not found in coordinate system!")));if(n instanceof M.Just)return o.pure(c.applicativeExceptT(C.monadIdentity))(ce.Bp(p.toNumber(fe.pairSize(p.ringBigInt)(n.value0))));throw new Error("Failed pattern match at Genetics.Browser.Demo (line 224, column 16 - line 231, column 49): "+[n.constructor.name])}())(function(e){return o.pure(c.applicativeExceptT(C.monadIdentity))({position:u,frameSize:e,feature:i})})})})}},We=function(r){return function(t){return a.bind(V.bindAff)(e.get(n.json)(t))(function(e){return a.bind(V.bindAff)(b.either((t=f.throwError(V.monadThrowAff),function(e){return t($.error(n.printResponseFormatError(e)))}))(o.pure(V.applicativeAff))(e.body))(function(e){return a.bind(V.bindAff)(function(){var n=d.runExcept(ne.readArray(e));if(n instanceof b.Left)return f.throwError(V.monadThrowAff)($.error("Annotations data is not an array"));if(n instanceof b.Right)return o.pure(V.applicativeAff)(n.value0);throw new Error("Failed pattern match at Genetics.Browser.Demo (line 313, column 16 - line 317, column 37): "+[n.constructor.name])}())(function(e){var n,t=g.partitionMap(g.filterableArray)((n=Ue(r),function(e){return d.runExcept(n(e))}))(e);return a.discard(a.discardUnit)(V.bindAff)(Q.liftEffect(V.monadEffectAff)(function(){return Z.log(Q.monadEffectEffect)("Raw annotations array length: "+z.show(z.showInt)(s.length(e)))(),Z.log(Q.monadEffectEffect)("Could not parse "+z.show(z.showInt)(h.length(h.foldableArray)(_.semiringInt)(t.left))+" annotations.")(),Z.log(Q.monadEffectEffect)("Successfully parsed "+z.show(z.showInt)(h.length(h.foldableArray)(_.semiringInt)(t.right))+" annotations.")(),Z.log(Q.monadEffectEffect)(t.right)()}))(function(){return o.pure(V.applicativeAff)(oe.groupToMap(N.monoidArray)(ce.ordChrId)(h.foldableArray)(o.applicativeArray)(function(e){return e.feature.chr})(t.right))})})});var t})}},Ke=function(e){return function(n){return function(n){return function(r){var t={segmentPadding:12,coordinateSystem:e},i=oe.trackLikeLayer(t)(de.Center.create(Le(n.genes)({genes:{}})));return a.bind(V.bindAff)(ue.newLayer(Y.monadAffAff)()(ae.cacherAffCons(new U.IsSymbol(function(){return"renderables"}))()()()()(ae.cacherAffNil(we.refl)))(r)("genes")(i))(function(e){return o.pure(V.applicativeAff)({genes:function(n){return function(r){return a.discard(a.discardUnit)(V.bindAff)(e.run(r))(function(){return a.bind(V.bindAff)(e.last.renderables)(e.drawOnCanvas(n))})}}})})}}}},He=function(e){return function(n){return function(r){var i=me.build(me.merge()()(n.vscale))(n.score),u=qe(n.score)(r.snps),f=pe.insert(new U.IsSymbol(function(){return"entries"}))()()(U.SProxy.value)(Ge(h.foldableArray)(A.functorArray)(n.annotations)(r.annotations))(n.legend),d={segmentPadding:12,coordinateSystem:e},c=oe.trackLikeLayer(d)(de.Center.create(Be(r.snps)({threshold:n.score,render:n.snps}))),l=oe.trackLikeLayer(d)(de.Center.create(Oe(e)(u)(r.annotations)({threshold:n.score,render:n.annotations})));return function(e){return a.bind(V.bindAff)(ue.newLayer(Y.monadAffAff)()(ae.cacherAffCons(new U.IsSymbol(function(){return"renderables"}))()()()()(ae.cacherAffNil(we.refl)))(e)("ruler")(new de.Layer(de.Fixed.value,de.NoMask.value,new de.Center(oe.thresholdRuler))))(function(r){return a.bind(V.bindAff)(ue.newLayer(Y.monadAffAff)()(ae.cacherAffCons(new U.IsSymbol(function(){return"hotspots"}))()()()()(ae.cacherAffCons(new U.IsSymbol(function(){return"renderables"}))()()()()(ae.cacherAffNil(we.refl))))(e)("snps")(c))(function(u){return a.bind(V.bindAff)(ue.newLayer(Y.monadAffAff)()(ae.cacherAffCons(new U.IsSymbol(function(){return"renderables"}))()()()()(ae.cacherAffNil(we.refl)))(e)("annotations")(l))(function(d){return a.bind(V.bindAff)(ue.newLayer(Y.monadAffAff)()(ae.cacherAffCons(new U.IsSymbol(function(){return"renderables"}))()()()()(ae.cacherAffNil(we.refl)))(e)("vscale")(ge(i)))(function(i){return a.bind(V.bindAff)(ue.newLayer(Y.monadAffAff)()(ae.cacherAffCons(new U.IsSymbol(function(){return"renderables"}))()()()()(ae.cacherAffNil(we.refl)))(e)("legend")(Te(f)))(function(e){return a.bind(V.bindAff)(Q.liftEffect(V.monadEffectAff)(ee.new(0)))(function(f){var c,l=a.bind(V.bindAff)(Q.liftEffect(V.monadEffectAff)(ee.read(f)))(function(e){return a.bind(V.bindAff)(u.last.hotspots)(function(n){return o.pure(V.applicativeAff)(function(r){return function(t){return n(r)({x:t.x+e,y:t.y})}})})}),s=(c={rulerColor:T.wrap(oe.newtypeHexColor)(t.red),threshold:n.score},h.traverse_(V.applicativeAff)(h.foldableArray)(function(e){return a.discard(a.discardUnit)(V.bindAff)(e.run(c))(function(){return a.bind(V.bindAff)(e.last.renderables)(e.drawOnCanvas(new P.Pair(0,0)))})})([e,i,r]));return o.pure(V.applicativeAff)({snps:function(e){return function(n){return a.discard(a.discardUnit)(V.bindAff)(Q.liftEffect(V.monadEffectAff)(ee.write(e.value0)(f)))(function(){return a.discard(a.discardUnit)(V.bindAff)(u.run(n))(function(){return a.bind(V.bindAff)(u.last.renderables)(u.drawOnCanvas(e))})})}},annotations:function(e){return function(n){return a.discard(a.discardUnit)(V.bindAff)(d.run(n))(function(){return a.bind(V.bindAff)(d.last.renderables)(d.drawOnCanvas(e))})}},hotspots:l,fixedUI:s})})})})})})})}}}},Je=function(e){return function(n){return function(r){return a.bind(V.bindAff)(ue.newLayer(Y.monadAffAff)()(ae.cacherAffCons(new U.IsSymbol(function(){return"renderables"}))()()()()(ae.cacherAffNil(we.refl)))(r)("chrBackground")(oe.trackLikeLayer(e)(de.Center.create(oe.chrBackgroundLayer({chrBG1:n.chrBG1,chrBG2:n.chrBG2,segmentPadding:e.segmentPadding})))))(function(t){return a.bind(V.bindAff)(ue.newLayer(Y.monadAffAff)()(ae.cacherAffCons(new U.IsSymbol(function(){return"renderables"}))()()()()(ae.cacherAffNil(we.refl)))(r)("chrLabels")(oe.chrLabelsLayer(e)({fontSize:n.chrLabels.fontSize})))(function(e){return o.pure(V.applicativeAff)(function(n){return function(r){return h.traverse_(V.applicativeAff)(h.foldableArray)(function(e){return a.discard(a.discardUnit)(V.bindAff)(e.run(r))(function(){return a.bind(V.bindAff)(e.last.renderables)(e.drawOnCanvas(n))})})([t,e])}})})})}}},Xe=U.SProxy.value,Ve=U.SProxy.value;module.exports={renderGenes:Le,drawGene:Ee,parseSNP:Ce,annotationFields:_e,parseAnnotation:Ue,parseAnnotationRest:ze,showAnnotationField:ve,showAnnotation:xe,getSNPs:je,getAnnotations:We,snpPeak:he,peak1:Ae,peaks:Se,defaultAnnotationsConfig:Ne,annotationLegendEntry:Pe,annotationLegendTest:Ge,normYLogScore:Ie,dist:Fe,filterSig:qe,snpsUI:ge,annotationsUI:Te,defaultSNPConfig:Me,snpLayer:De,renderSNPs:Be,annotationsForScale:ke,renderAnnotationPeaks:Re,renderAnnotations:Oe,_snps:Xe,_annotations:Ve,addChrLayers:Je,addGWASLayers:He,addGeneLayers:Ke};
-},{"../Affjax/index.js":"IjAr","../Affjax.ResponseFormat/index.js":"QSsR","../Color/index.js":"f3ma","../Color.Scheme.Clrs/index.js":"rp+n","../Color.Scheme.X11/index.js":"bDzA","../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Except/index.js":"Fye2","../Control.Monad.Except.Trans/index.js":"gr8B","../Control.Semigroupoid/index.js":"/riR","../Data.Array/index.js":"4t4C","../Data.BigInt/index.js":"Zx+T","../Data.Boolean/index.js":"ObQr","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.EuclideanRing/index.js":"2IRB","../Data.Filterable/index.js":"6hfS","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Identity/index.js":"2OKT","../Data.Lens.Getter/index.js":"OPOX","../Data.Lens.Internal.Forget/index.js":"mj9z","../Data.Lens.Internal.Re/index.js":"IZDD","../Data.Lens.Iso/index.js":"fFCp","../Data.Lens.Lens.Tuple/index.js":"RTVM","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Pair/index.js":"PpsX","../Data.Profunctor.Strong/index.js":"w9p6","../Data.Ring/index.js":"E2qH","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.Symbol/index.js":"4oJQ","../Data.Traversable/index.js":"n7EE","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unit/index.js":"NhVk","../Data.Variant/index.js":"hgdh","../Effect.Aff/index.js":"I7lu","../Effect.Aff.Class/index.js":"I4H+","../Effect.Class/index.js":"dWtH","../Effect.Class.Console/index.js":"3Dts","../Effect.Exception/index.js":"0OCW","../Effect.Ref/index.js":"/Jaj","../Foreign/index.js":"pu1p","../Foreign.Index/index.js":"Ryy1","../Foreign.Keys/index.js":"hcOM","../Foreign.Object/index.js":"jsiz","../Genetics.Browser/index.js":"X0te","../Genetics.Browser.Cacher/index.js":"61ee","../Genetics.Browser.Canvas/index.js":"VVkU","../Genetics.Browser.Coordinates/index.js":"7bYH","../Genetics.Browser.Layer/index.js":"YWUW","../Genetics.Browser.Types/index.js":"HhmG","../Graphics.Drawing/index.js":"0WVi","../Math/index.js":"Rpaz","../Record/index.js":"0gG4","../Record.Builder/index.js":"VeY4","../Record.Extra/index.js":"KzZr","../Simple.JSON/index.js":"DqNI","../Type.Equality/index.js":"Uq/R"}],"HH6s":[function(require,module,exports) {
-"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),u=require("../Data.Foldable/index.js"),e=require("../Data.Functor/index.js"),o=require("../Data.Monoid/index.js"),i=require("../Data.Semigroup/index.js"),f=require("../Data.Symbol/index.js"),c=require("../Effect/index.js"),a=require("../Effect.Aff/index.js"),l=require("../Genetics.Browser.Canvas/index.js"),s=require("../Record/index.js"),d=require("../Type.Data.RowList/index.js"),p=require("../Type.Equality/index.js"),m=function(n){return n},y={},v=function(n){this.buildTrack=n},x=function(n){this.fetchDataImpl=n},g=function(n){this.makeContainersImpl=n},C={},P=function(n){this.getTrackConfigImpl=n},S=function(n){this.getLayerConfigImpl=n},h=function(n){this.getBrowserConfigImpl=n},b={},k={},A=function(n){this.combineFunsImpl=n},w={},R=function(n){this.applyLayerDefImpl=n},I=y,L=function(n){return y},F=function(n){return new v(function(n){return function(n){return function(n){return o.mempty(a.monoidAff(o.monoidRecord()(o.monoidRecordCons(new f.IsSymbol(function(){return"hotspots"}))(a.monoidAff(o.monoidFn(o.monoidFn(o.monoidArray))))()(o.monoidRecordCons(new f.IsSymbol(function(){return"render"}))(o.monoidFn(o.monoidFn(a.monoidAff(o.monoidUnit))))()(o.monoidRecordNil)))))}}})},D=function(r){return new x(function(t){return function(t){return function(t){return n.pure(a.applicativeAff)(p.from(r)({}))}}})},q=function(r){return new g(function(t){return function(t){return function(t){return n.pure(c.applicativeEffect)(p.from(r)({}))}}})},j=function(n){return function(n){return function(n){return function(n){return function(n){return C}}}}},T=function(n){return n.makeContainersImpl},N=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(i){return new g(function(c){return function(c){return function(a){var m=p.from(i)(s.get(n)(t)(f.SProxy.value)(a));return function(){var i=l.trackContainer({width:c,height:m.trackHeight})(m.padding)(f.reflectSymbol(n)(f.SProxy.value))(),y=T(r)(d.RLProxy.value)(c)(s.delete(n)(u)(t)(f.SProxy.value)(p.from(p.refl)(a)))();return s.insert(n)(o)(e)(f.SProxy.value)(i)(y)}}}})}}}}}}},U=function(n){return function(n){return T(n)(d.RLProxy.value)}},E=function(n){return n.getTrackConfigImpl},W=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(i){return function(i){return function(c){return function(c){return function(a){return new P(function(l){return function(d){var m=s.get(n)(o)(p.from(r)(f.SProxy.value))(l),y=s.get(e)(i)(p.from(p.refl)(f.SProxy.value))(m);return s.delete(t)(a)(c)(p.from(u)(f.SProxy.value))(y)}})}}}}}}}}}}},B=function(n){return n.getLayerConfigImpl},M=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(i){return function(c){return function(c){return function(a){return function(a){return function(l){return function(l){return function(d){return new S(function(d){return function(m){return function(m){var y=s.get(n)(i)(p.from(r)(f.SProxy.value))(d),v=s.get(e)(c)(p.from(p.refl)(f.SProxy.value))(y),x=s.get(t)(a)(p.from(u)(f.SProxy.value))(v);return s.get(o)(l)(p.from(p.refl)(f.SProxy.value))(x)}}})}}}}}}}}}}}}}},H=function(n){return n.getBrowserConfigImpl},G=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(o){return function(i){return new h(function(c){var a=s.get(n)(e)(p.from(r)(f.SProxy.value))(c);return s.delete(t)(i)(o)(p.from(u)(f.SProxy.value))(a)})}}}}}}}},z=function(n){return n.fetchDataImpl},J=function(r){return function(e){return function(o){return function(i){return function(c){return function(l){return function(p){return function(m){return new x(function(y){return function(y){return function(v){return t.bind(a.bindAff)(z(m)(d.RLProxy.value)(s.delete(r)(e)(o)(f.SProxy.value)(y))(v))(function(e){return t.bind(a.bindAff)(u.foldMap(u.foldableMaybe)(a.monoidAff(i))(s.get(r)(o)(f.SProxy.value)(y))(s.get(r)(c)(f.SProxy.value)(v)))(function(t){return n.pure(a.applicativeAff)(s.insert(r)(l)(p)(f.SProxy.value)(t)(e))})})}}})}}}}}}}},K=function(n){return function(n){return function(n){return function(r){return function(t){return function(u){return l.withLoadingIndicator(a.monadEffectAff)(r)(z(n)(d.RLProxy.value)(t)(u))}}}}}},O=b,Q=b,V=function(n){return b},X=function(n){return b},Y=k,Z=function(n){return function(n){return function(n){return k}}},$=function(n){return n.combineFunsImpl},_=function(n){return function(n){return function(r){return function(t){return $(n)(d.RLProxy.value)(r)(t)}}}},nn=function(n){return new A(function(r){return function(r){return function(r){return p.from(n)({})}}})},rn=function(n){return function(r){return function(t){return function(u){return function(u){return function(e){return function(o){return new A(function(i){return function(i){return function(c){var a=$(o)(d.RLProxy.value)(s.delete(n)(r)(t)(f.SProxy.value)(i))(c),l=s.get(n)(t)(f.SProxy.value)(i);return s.insert(n)(u)(e)(f.SProxy.value)(l(c))(a)}}})}}}}}}},tn=function(n){return n.buildTrack},un=function(n){return function(n){return function(r){return function(t){return tn(n)(d.RLProxy.value)(r)(t)}}}},en=function(u){return function(o){return function(c){return function(l){return function(m){return new v(function(y){return function(y){return function(v){return t.bind(a.bindAff)(tn(m)(d.RLProxy.value)(s.delete(u)(o)(c)(f.SProxy.value)(y))(v))(function(t){var o=r.apply(a.applyAff)(e.map(a.functorAff)(function(n){return function(r){return function(t){return function(u){return i.append(i.semigroupArray)(n(t)(p.from(l)(u)))(r(t)(u))}}}})(s.get(u)(c)(f.SProxy.value)(y)))(t.hotspots);return n.pure(a.applicativeAff)({render:t.render,hotspots:o})})}}})}}}}},on=function(r){return function(u){return function(e){return function(o){return new v(function(c){return function(c){return function(l){return t.bind(a.bindAff)(tn(o)(d.RLProxy.value)(s.delete(r)(u)(e)(f.SProxy.value)(c))(l))(function(t){return n.pure(a.applicativeAff)({render:i.append(i.semigroupFn(i.semigroupFn(a.semigroupAff(i.semigroupUnit))))(function(n){return function(t){return s.get(r)(e)(f.SProxy.value)(c)(n)(t)}})(t.render),hotspots:t.hotspots})})}}})}}}},fn=function(r){return function(u){return function(e){return function(o){return new v(function(c){return function(c){return function(l){return t.bind(a.bindAff)(tn(o)(d.RLProxy.value)(s.delete(r)(u)(e)(f.SProxy.value)(c))(l))(function(t){return n.pure(a.applicativeAff)({render:i.append(i.semigroupFn(i.semigroupFn(a.semigroupAff(i.semigroupUnit))))(function(n){return function(n){return s.get(r)(e)(f.SProxy.value)(c)}})(t.render),hotspots:t.hotspots})})}}})}}}},cn=function(n){return function(n){return function(n){return function(r){return function(t){return new R(function(u){return function(e){return function(o){return function(i){var f=E(r)(i)(e),c=B(t)(i)(e)(o),a=H(n)(i);return u({browserConfig:a,trackConfig:f,layerConfig:c})}}}})}}}}},an=function(n){return n.applyLayerDefImpl},ln=function(n){return function(n){return function(n){return an(n)}}};module.exports={TrackRecord:v,buildTrack:tn,makeTrack:un,TrackConfig:g,makeContainersImpl:T,makeContainers:U,TrackData:x,fetchDataImpl:z,fetchData:K,CombineFuns:A,combineFunsImpl:$,combineFuns:_,SafeUnion:C,UnionConflict:y,ConflictingList:k,ConflictsWith:b,LayerDef:m,trackRecordRender:on,trackRecordUI:fn,trackRecordHotspots:en,trackRecordNil:F,trackConfigNil:q,trackConfigCons:N,trackDataCons:J,trackDataNil:D,combineFunCons:rn,combineFunNil:nn,conflictsWithNil:O,conflictsWithCons1:X,conflictsWithCons3:Q,conflictsWithCons2:V,conflictingListNil:Y,conflictingListCons:Z,unionConflictFail:L,unionConflictSuccess:I,safeUnion:j};
-},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Data.Foldable/index.js":"eVDl","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Semigroup/index.js":"EsAJ","../Data.Symbol/index.js":"4oJQ","../Effect/index.js":"oTWB","../Effect.Aff/index.js":"I7lu","../Genetics.Browser.Canvas/index.js":"VVkU","../Record/index.js":"0gG4","../Type.Data.RowList/index.js":"XaXP","../Type.Equality/index.js":"Uq/R"}],"nvf7":[function(require,module,exports) {
-"use strict";exports.onTimeout=function(n){return function(t){return function(){var u=null;return{run:function(){u&&clearTimeout(u),u=setTimeout(function(){u=null,t()},n)},cancel:function(){clearTimeout(u)}}}}},exports.onFrame=function(n){return function(){var t=null;return{run:function(){t&&window.cancelAnimationFrame(t),t=window.requestAnimationFrame(function(u){n(),t=null})},cancel:function(){t&&(window.cancelAnimationFrame(t),t=null)}}}};
-},{}],"Tmz+":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),n=require("../Control.Bind/index.js"),r=require("../Control.Category/index.js"),t=require("../Data.BigInt/index.js"),i=require("../Data.Either/index.js"),o=require("../Data.Foldable/index.js"),u=require("../Data.Function/index.js"),a=require("../Data.Lens.Getter/index.js"),c=require("../Data.List.Types/index.js"),s=require("../Data.Monoid/index.js"),f=require("../Data.Newtype/index.js"),l=require("../Data.Ord/index.js"),d=require("../Data.Pair/index.js"),w=require("../Data.Semigroup/index.js"),m=require("../Data.Semiring/index.js"),v=require("../Data.Show/index.js"),p=require("../Effect/index.js"),g=require("../Effect.Class/index.js"),q=require("../Effect.Ref/index.js"),h=require("../Genetics.Browser.Canvas/index.js"),y=require("../Genetics.Browser.Coordinates/index.js"),j=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),x=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),B=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),V=function(e){return f.over(y.coordsysviewNewtype)(y.coordsysviewNewtype)(y.CoordSysView)(function(){if(e instanceof x)return function(n){return y.scalePairBy(n)(e.value0)};if(e instanceof j)return function(n){return y.translatePairBy(n)(e.value0)};if(e instanceof B)return e.value0;throw new Error("Failed pattern match at Genetics.Browser.UI.View (line 58, column 39 - line 61, column 20): "+[e.constructor.name])}())},E=new v.Show(function(e){return e instanceof j?"(Scroll by "+v.show(v.showNumber)(e.value0)+")":e instanceof x?"(Zoom by "+v.show(v.showNumber)(e.value0)+")":"(ModView)"}),D=new w.Semigroup(function(e){return function(n){return e instanceof j&&n instanceof j?new j(e.value0+n.value0):e instanceof x&&n instanceof x?new x(e.value0*n.value0):n}}),I=new s.Monoid(function(){return D},new B(r.identity(r.categoryFn))),S=function(n){return function(r){return function(t){return function(o){return function(u){return function(){var a=q.new(o.position)(),c=q.new(o.velocity)(),f=e.onTimeout(u)(function(){var e=q.read(a)();return t(new i.Left(e))()})(),l=e.onFrame(function(){var e=q.read(c)();q.write(s.mempty(n))(c)();var o=q.read(a)();return q.write(r.step(e)(o))(a)(),t(i.Right.create(r.animate(e)(o)))(),f.run()})(),d=q.read(c);return{update:function(e){return function(){return q.modify_(function(r){return w.append(n.Semigroup0())(r)(e)})(c)(),l.run()}},position:q.read(a),velocity:d}}}}}}},T=function(e){return function(r){return function(f){return function(w){return function(){var v=q.new(s.mempty(c.monoidList))(),E={position:f.initialView,velocity:s.mempty(I)},D=S(I)({step:function(n){var r=y.normalizeView(e)(t.fromInt(2e5)),i=V(n);return function(e){return r(i(e))}},animate:function(n){return function(r){if(n instanceof j)return new h.Scrolling((i=r,function(n){return n<0?l.lessThanOrEq(t.ordBigInt)(i.value0)(m.zero(t.semiringBigInt))?0:n:l.greaterThanOrEq(t.ordBigInt)(i.value1)(a.viewOn(e)(y._TotalSize(t.ringBigInt)))?0:n})(n.value0));var i;if(n instanceof x)return new h.Zooming(function(n){return function(r){var i=(r-1)/2,o=l.lessThanOrEq(t.ordBigInt)(n.value0)(m.zero(t.semiringBigInt))?0:-i,u=l.greaterThanOrEq(t.ordBigInt)(n.value1)(a.viewOn(e)(y._TotalSize(t.ringBigInt)))?1:1+i;return new d.Pair(o,u)}}(r)(n.value0));if(n instanceof B)return h.Jump.value;throw new Error("Failed pattern match at Genetics.Browser.UI.View (line 130, column 24 - line 133, column 29): "+[n.constructor.name])}}})(function(e){if(e instanceof i.Right)return h.forTracks_(g.monadEffectEffect)(w)(u.flip(h.animateTrack)(e.value0));if(e instanceof i.Left)return n.bind(p.bindEffect)(q.read(v))(o.traverse_(p.applicativeEffect)(c.foldableList)(function(n){return n(e.value0)}));throw new Error("Failed pattern match at Genetics.Browser.UI.View (line 151, column 18 - line 153, column 54): "+[e.constructor.name])})(E)(r)();return{updateView:D.update,browserView:D.position,addCallback:function(e){return q.modify_(c.Cons.create(e))(v)}}}}}}};module.exports={ScrollView:j,ZoomView:x,ModView:B,updateViewFold:V,animateDelta:S,browserViewManager:T,showUpdateView:E,semigroupUpdateView:D,monoidUpdateView:I,onTimeout:e.onTimeout,onFrame:e.onFrame};
-},{"./foreign.js":"nvf7","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Data.BigInt/index.js":"Zx+T","../Data.Either/index.js":"B2JL","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Lens.Getter/index.js":"OPOX","../Data.List.Types/index.js":"Xxuc","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Pair/index.js":"PpsX","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Effect/index.js":"oTWB","../Effect.Class/index.js":"dWtH","../Effect.Ref/index.js":"/Jaj","../Genetics.Browser.Canvas/index.js":"VVkU","../Genetics.Browser.Coordinates/index.js":"7bYH"}],"CI3f":[function(require,module,exports) {
-"use strict";var t=function(t){return function(e){return function(){return e[t]}}};exports.url=t("URL"),exports.documentURI=t("documentURI"),exports.origin=t("origin"),exports.compatMode=t("compatMode"),exports.characterSet=t("characterSet"),exports.contentType=t("contentType"),exports._doctype=t("doctype"),exports._documentElement=t("documentElement"),exports.getElementsByTagName=function(t){return function(e){return function(){return e.getElementsByTagName(t)}}},exports._getElementsByTagNameNS=function(t){return function(e){return function(n){return function(){return n.getElementsByTagNameNS(t,e)}}}},exports.getElementsByClassName=function(t){return function(e){return function(){return e.getElementsByClassName(t)}}},exports.createElement=function(t){return function(e){return function(){return e.createElement(t)}}},exports._createElementNS=function(t){return function(e){return function(n){return function(){return n.createElementNS(t,e)}}}},exports.createDocumentFragment=function(t){return function(){return t.createDocumentFragment()}},exports.createTextNode=function(t){return function(e){return function(){return e.createTextNode(t)}}},exports.createComment=function(t){return function(e){return function(){return e.createComment(t)}}},exports.createProcessingInstruction=function(t){return function(e){return function(n){return function(){return n.createProcessingInstruction(t,e)}}}},exports.importNode=function(t){return function(e){return function(n){return function(){return n.importNode(t,e)}}}},exports.adoptNode=function(t){return function(e){return function(){return e.adoptNode(t)}}};
-},{}],"0hiR":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),t=require("../Data.Functor/index.js"),n=require("../Data.Nullable/index.js"),o=require("../Effect/index.js"),r=require("../Unsafe.Coerce/index.js"),a=require("../Web.Internal.FFI/index.js"),c=r.unsafeCoerce,u=r.unsafeCoerce,m=r.unsafeCoerce,d=r.unsafeCoerce,s=function(t){return e._getElementsByTagNameNS(n.toNullable(t))},i=a.unsafeReadProtoTagged("Document"),l=a.unsafeReadProtoTagged("Document"),f=a.unsafeReadProtoTagged("Document"),g=a.unsafeReadProtoTagged("Document"),N=function(){var r=t.map(o.functorEffect)(n.toMaybe);return function(t){return r(e._documentElement(t))}}(),E=function(){var r=t.map(o.functorEffect)(n.toMaybe);return function(t){return r(e._doctype(t))}}(),T=function(t){return e._createElementNS(n.toNullable(t))};module.exports={fromNode:f,fromParentNode:i,fromNonElementParentNode:l,fromEventTarget:g,toNode:m,toParentNode:c,toNonElementParentNode:u,toEventTarget:d,doctype:E,documentElement:N,getElementsByTagNameNS:s,createElementNS:T,url:e.url,documentURI:e.documentURI,origin:e.origin,compatMode:e.compatMode,characterSet:e.characterSet,contentType:e.contentType,getElementsByTagName:e.getElementsByTagName,getElementsByClassName:e.getElementsByClassName,createElement:e.createElement,createDocumentFragment:e.createDocumentFragment,createTextNode:e.createTextNode,createComment:e.createComment,createProcessingInstruction:e.createProcessingInstruction,importNode:e.importNode,adoptNode:e.adoptNode};
-},{"./foreign.js":"CI3f","../Data.Functor/index.js":"+0AE","../Data.Nullable/index.js":"YQ8o","../Effect/index.js":"oTWB","../Unsafe.Coerce/index.js":"ETUV","../Web.Internal.FFI/index.js":"fdUh"}],"9SEv":[function(require,module,exports) {
-"use strict";var e=function(e){return function(t){return function(){return t[e]}}};exports.children=e("children"),exports._firstElementChild=e("firstElementChild"),exports._lastElementChild=e("lastElementChild"),exports.childElementCount=e("childElementCount"),exports._querySelector=function(e){return function(t){return function(){return t.querySelector(e)}}},exports.querySelectorAll=function(e){return function(t){return function(){return t.querySelectorAll(e)}}};
-},{}],"lU5U":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),r=require("../Data.Eq/index.js"),t=require("../Data.Functor/index.js"),n=require("../Data.Newtype/index.js"),u=require("../Data.Nullable/index.js"),i=require("../Data.Ord/index.js"),l=require("../Effect/index.js"),o=function(e){return e},c=function(r){var n=t.map(l.functorEffect)(u.toMaybe),i=e._querySelector(r);return function(e){return n(i(e))}},a=i.ordString,f=new n.Newtype(function(e){return e},o),d=function(){var r=t.map(l.functorEffect)(u.toMaybe);return function(t){return r(e._lastElementChild(t))}}(),q=function(){var r=t.map(l.functorEffect)(u.toMaybe);return function(t){return r(e._firstElementChild(t))}}(),s=r.eqString;module.exports={firstElementChild:q,lastElementChild:d,QuerySelector:o,querySelector:c,eqQuerySelector:s,ordQuerySelector:a,newtypeQuerySelector:f,children:e.children,childElementCount:e.childElementCount,querySelectorAll:e.querySelectorAll};
-},{"./foreign.js":"9SEv","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Nullable/index.js":"YQ8o","../Data.Ord/index.js":"r4Vb","../Effect/index.js":"oTWB"}],"UOgE":[function(require,module,exports) {
-"use strict";exports.window=function(){return window};
-},{}],"UQRJ":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js");module.exports={window:e.window};
-},{"./foreign.js":"UOgE"}],"dln3":[function(require,module,exports) {
-"use strict";exports._body=function(t){return function(){return t.body}},exports._readyState=function(t){return function(){return t.readyState}},exports._activeElement=function(t){return function(){return t.activeElement}},exports._currentScript=function(t){return function(){return t.currentScript}},exports.referrer=function(t){return function(){return t.referrer}},exports.title=function(t){return function(){return t.title}},exports.setTitle=function(t){return function(r){return function(){return r.title=t,{}}}};
-},{}],"v4VO":[function(require,module,exports) {
-"use strict";var n=require("../Data.Eq/index.js"),e=require("../Data.Maybe/index.js"),t=require("../Data.Ord/index.js"),r=require("../Data.Ordering/index.js"),a=require("../Data.Show/index.js"),i=function(){function n(){}return n.value=new n,n}(),o=function(){function n(){}return n.value=new n,n}(),u=function(){function n(){}return n.value=new n,n}(),c=new a.Show(function(n){if(n instanceof i)return"Loading";if(n instanceof o)return"Interactive";if(n instanceof u)return"Complete";throw new Error("Failed pattern match at Web.HTML.HTMLDocument.ReadyState (line 15, column 10 - line 18, column 27): "+[n.constructor.name])}),f=function(n){if(n instanceof i)return"loading";if(n instanceof o)return"interactive";if(n instanceof u)return"complete";throw new Error("Failed pattern match at Web.HTML.HTMLDocument.ReadyState (line 21, column 9 - line 24, column 25): "+[n.constructor.name])},s=function(n){return"loading"===n?new e.Just(i.value):"interactive"===n?new e.Just(o.value):"complete"===n?new e.Just(u.value):e.Nothing.value},l=new n.Eq(function(n){return function(e){return n instanceof i&&e instanceof i||(n instanceof o&&e instanceof o||n instanceof u&&e instanceof u)}}),d=new t.Ord(function(){return l},function(n){return function(e){if(n instanceof i&&e instanceof i)return r.EQ.value;if(n instanceof i)return r.LT.value;if(e instanceof i)return r.GT.value;if(n instanceof o&&e instanceof o)return r.EQ.value;if(n instanceof o)return r.LT.value;if(e instanceof o)return r.GT.value;if(n instanceof u&&e instanceof u)return r.EQ.value;throw new Error("Failed pattern match at Web.HTML.HTMLDocument.ReadyState (line 12, column 1 - line 12, column 48): "+[n.constructor.name,e.constructor.name])}});module.exports={Loading:i,Interactive:o,Complete:u,print:f,parse:s,eqReadyState:l,ordReadyState:d,showReadyState:c};
-},{"../Data.Eq/index.js":"Pq4F","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Show/index.js":"mFY7"}],"EU5r":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),r=require("../Data.Functor/index.js"),t=require("../Data.Maybe/index.js"),n=require("../Data.Nullable/index.js"),o=require("../Effect/index.js"),a=require("../Unsafe.Coerce/index.js"),u=require("../Web.HTML.HTMLDocument.ReadyState/index.js"),f=require("../Web.Internal.FFI/index.js"),c=a.unsafeCoerce,i=a.unsafeCoerce,d=a.unsafeCoerce,s=a.unsafeCoerce,m=a.unsafeCoerce,T=function(){var n,a=r.map(o.functorEffect)((n=t.fromMaybe(u.Loading.value),function(e){return n(u.parse(e))}));return function(r){return a(e._readyState(r))}}(),g=f.unsafeReadProtoTagged("HTMLDocument"),l=f.unsafeReadProtoTagged("HTMLDocument"),M=f.unsafeReadProtoTagged("HTMLDocument"),D=f.unsafeReadProtoTagged("HTMLDocument"),E=f.unsafeReadProtoTagged("HTMLDocument"),b=function(){var t=r.map(o.functorEffect)(n.toMaybe);return function(r){return t(e._currentScript(r))}}(),v=function(){var t=r.map(o.functorEffect)(n.toMaybe);return function(r){return t(e._body(r))}}(),y=function(){var t=r.map(o.functorEffect)(n.toMaybe);return function(r){return t(e._activeElement(r))}}();module.exports={fromDocument:E,fromNode:M,fromParentNode:g,fromNonElementParentNode:l,fromEventTarget:D,toDocument:m,toNode:d,toParentNode:c,toNonElementParentNode:i,toEventTarget:s,body:v,readyState:T,activeElement:y,currentScript:b,referrer:e.referrer,title:e.title,setTitle:e.setTitle};
-},{"./foreign.js":"dln3","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Nullable/index.js":"YQ8o","../Effect/index.js":"oTWB","../Unsafe.Coerce/index.js":"ETUV","../Web.HTML.HTMLDocument.ReadyState/index.js":"v4VO","../Web.Internal.FFI/index.js":"fdUh"}],"qu+f":[function(require,module,exports) {
-"use strict";exports.document=function(n){return function(){return n.document}},exports.navigator=function(n){return function(){return n.navigator}},exports.location=function(n){return function(){return n.location}},exports.history=function(n){return function(){return n.history}},exports.innerWidth=function(n){return function(){return n.innerWidth}},exports.innerHeight=function(n){return function(){return n.innerHeight}},exports.alert=function(n){return function(r){return function(){return r.alert(n),{}}}},exports.confirm=function(n){return function(r){return function(){return r.confirm(n)}}},exports.moveBy=function(n){return function(r){return function(t){return function(){return t.moveBy(n,r),{}}}}},exports.moveTo=function(n){return function(r){return function(t){return function(){return t.moveTo(n,r),{}}}}},exports._open=function(n){return function(r){return function(t){return function(e){return function(){return e.open(n,r,t)}}}}},exports.outerHeight=function(n){return function(){return n.outerHeight}},exports.outerWidth=function(n){return function(){return n.outerWidth}},exports.print=function(n){return function(){return n.print(),{}}},exports._prompt=function(n){return function(r){return function(t){return function(){return t.prompt(n,r)}}}},exports.resizeBy=function(n){return function(r){return function(t){return function(){return t.resizeBy(n,r),{}}}}},exports.resizeTo=function(n){return function(r){return function(t){return function(){return t.resizeTo(n,r),{}}}}},exports.screenX=function(n){return function(){return n.screenX}},exports.screenY=function(n){return function(){return n.screenY}},exports.scroll=function(n){return function(r){return function(t){return function(){return t.scroll(n,r),{}}}}},exports.scrollBy=function(n){return function(r){return function(t){return function(){return t.scrollBy(n,r),{}}}}},exports.scrollX=function(n){return function(){return n.scrollX}},exports.scrollY=function(n){return function(){return n.scrollY}},exports.localStorage=function(n){return function(){return n.localStorage}},exports.sessionStorage=function(n){return function(){return n.sessionStorage}},exports._requestAnimationFrame=function(n){return function(r){return function(){return r.requestAnimationFrame(n)}}},exports._cancelAnimationFrame=function(n){return function(r){return function(){return r.cancelAnimationFrame(n)}}},exports._requestIdleCallback=function(n){return function(r){return function(t){return function(){return t.requestIdleCallback(r,n)}}}},exports._cancelIdleCallback=function(n){return function(r){return function(){return r.cancelIdleCallback(n)}}},exports.parent=function(n){return function(){return n.parent}},exports._opener=function(n){return function(){return n.opener}};
-},{}],"o+50":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),n=require("../Data.Eq/index.js"),r=require("../Data.Functor/index.js"),t=require("../Data.Newtype/index.js"),o=require("../Data.Nullable/index.js"),u=require("../Data.Ord/index.js"),i=require("../Effect/index.js"),c=require("../Unsafe.Coerce/index.js"),a=function(e){return e},f=function(e){return e},l=c.unsafeCoerce,s=function(n){return function(t){var o=r.map(i.functorEffect)(a),u=e._requestIdleCallback(n)(t);return function(e){return o(u(e))}}},m=function(n){var t=r.map(i.functorEffect)(f),o=e._requestAnimationFrame(n);return function(e){return t(o(e))}},d=function(n){return function(t){return function(u){return r.map(i.functorEffect)(o.toMaybe)(e._prompt(n)(t)(u))}}},p=function(n){return function(t){return r.map(i.functorEffect)(o.toMaybe)(e._prompt(n)("")(t))}},q=function(n){return r.map(i.functorEffect)(o.toMaybe)(e._opener(n))},y=function(n){return function(t){return function(u){return function(c){return r.map(i.functorEffect)(o.toMaybe)(e._open(n)(t)(u)(c))}}}},I=new t.Newtype(function(e){return e},a),w=new t.Newtype(function(e){return e},f),b=new n.Eq(function(e){return function(n){return e===n}}),g=new u.Ord(function(){return b},function(e){return function(n){return u.compare(u.ordInt)(e)(n)}}),E=new n.Eq(function(e){return function(n){return e===n}}),h=new u.Ord(function(){return E},function(e){return function(n){return u.compare(u.ordInt)(e)(n)}}),v=function(n){return e._cancelIdleCallback(t.unwrap(I)(n))},C=function(n){return e._cancelAnimationFrame(t.unwrap(w)(n))};module.exports={toEventTarget:l,open:y,prompt:p,promptDefault:d,requestAnimationFrame:m,cancelAnimationFrame:C,requestIdleCallback:s,cancelIdleCallback:v,opener:q,newtypeRequestAnimationFrameId:w,eqRequestAnimationFrameId:E,ordRequestAnimationFrameId:h,newtypeRequestIdleCallbackId:I,eqRequestIdleCallbackId:b,ordRequestIdleCallbackId:g,document:e.document,navigator:e.navigator,location:e.location,history:e.history,innerWidth:e.innerWidth,innerHeight:e.innerHeight,alert:e.alert,confirm:e.confirm,moveBy:e.moveBy,moveTo:e.moveTo,outerHeight:e.outerHeight,outerWidth:e.outerWidth,print:e.print,resizeBy:e.resizeBy,resizeTo:e.resizeTo,screenX:e.screenX,screenY:e.screenY,scroll:e.scroll,scrollBy:e.scrollBy,scrollX:e.scrollX,scrollY:e.scrollY,localStorage:e.localStorage,sessionStorage:e.sessionStorage,parent:e.parent};
-},{"./foreign.js":"qu+f","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Nullable/index.js":"YQ8o","../Data.Ord/index.js":"r4Vb","../Effect/index.js":"oTWB","../Unsafe.Coerce/index.js":"ETUV"}],"MKE0":[function(require,module,exports) {
-"use strict";exports.key=function(t){return t.key},exports.code=function(t){return t.code},exports.locationIndex=function(t){return t.location},exports.ctrlKey=function(t){return t.ctrlKey},exports.shiftKey=function(t){return t.shiftKey},exports.altKey=function(t){return t.altKey},exports.metaKey=function(t){return t.metaKey},exports.repeat=function(t){return t.repeat},exports.isComposing=function(t){return t.isComposing},exports.getModifierState=function(t){return function(e){return function(){return e.getModifierState(t)}}};
-},{}],"o/+T":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),n=require("../Data.Bounded/index.js"),t=require("../Data.Enum/index.js"),r=require("../Data.Eq/index.js"),o=require("../Data.Maybe/index.js"),u=require("../Data.Ord/index.js"),a=require("../Data.Ordering/index.js"),i=require("../Unsafe.Coerce/index.js"),c=require("../Web.Internal.FFI/index.js"),f=function(){function e(){}return e.value=new e,e}(),s=function(){function e(){}return e.value=new e,e}(),d=function(){function e(){}return e.value=new e,e}(),l=function(){function e(){}return e.value=new e,e}(),v=i.unsafeCoerce,m=i.unsafeCoerce,E=function(e){return 0===e?new o.Just(f.value):1===e?new o.Just(s.value):2===e?new o.Just(d.value):3===e?new o.Just(l.value):o.Nothing.value},y=c.unsafeReadProtoTagged("KeyboardEvent"),K=c.unsafeReadProtoTagged("KeyboardEvent"),w=function(e){if(e instanceof f)return 0;if(e instanceof s)return 1;if(e instanceof d)return 2;if(e instanceof l)return 3;throw new Error("Failed pattern match at Web.UIEvent.KeyboardEvent (line 107, column 3 - line 111, column 16): "+[e.constructor.name])},g=new r.Eq(function(e){return function(n){return e instanceof f&&n instanceof f||(e instanceof s&&n instanceof s||(e instanceof d&&n instanceof d||e instanceof l&&n instanceof l))}}),q=new u.Ord(function(){return g},function(e){return function(n){if(e instanceof f&&n instanceof f)return a.EQ.value;if(e instanceof f)return a.LT.value;if(n instanceof f)return a.GT.value;if(e instanceof s&&n instanceof s)return a.EQ.value;if(e instanceof s)return a.LT.value;if(n instanceof s)return a.GT.value;if(e instanceof d&&n instanceof d)return a.EQ.value;if(e instanceof d)return a.LT.value;if(n instanceof d)return a.GT.value;if(e instanceof l&&n instanceof l)return a.EQ.value;throw new Error("Failed pattern match at Web.UIEvent.KeyboardEvent (line 81, column 1 - line 81, column 50): "+[e.constructor.name,n.constructor.name])}}),x=new t.Enum(function(){return q},t.defaultPred(E)(w),t.defaultSucc(E)(w)),L=new n.Bounded(function(){return q},f.value,l.value),b=new t.BoundedEnum(function(){return L},function(){return x},4,w,E),j=function(n){var r=o.fromJust(n),u=t.toEnum(b);return function(n){return r(u(e.locationIndex(n)))}};module.exports={fromUIEvent:y,fromEvent:K,toUIEvent:v,toEvent:m,location:j,Standard:f,Left:s,Right:d,Numpad:l,toEnumKeyLocation:E,fromEnumKeyLocation:w,eqKeyLocation:g,ordKeyLocation:q,boundedKeyLocation:L,enumKeyLocation:x,boundedEnumKeyLocation:b,key:e.key,code:e.code,locationIndex:e.locationIndex,ctrlKey:e.ctrlKey,shiftKey:e.shiftKey,altKey:e.altKey,metaKey:e.metaKey,repeat:e.repeat,isComposing:e.isComposing,getModifierState:e.getModifierState};
-},{"./foreign.js":"MKE0","../Data.Bounded/index.js":"kcUU","../Data.Enum/index.js":"oOsU","../Data.Eq/index.js":"Pq4F","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Unsafe.Coerce/index.js":"ETUV","../Web.Internal.FFI/index.js":"fdUh"}],"JuOH":[function(require,module,exports) {
-"use strict";var e=require("./foreign.js"),n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),i=require("../Control.Monad.Except/index.js"),o=require("../Data.Array/index.js"),a=require("../Data.BigInt/index.js"),u=require("../Data.Either/index.js"),f=require("../Data.Filterable/index.js"),s=require("../Data.Foldable/index.js"),c=require("../Data.Function/index.js"),d=require("../Data.Functor/index.js"),l=require("../Data.Generic.Rep/index.js"),w=require("../Data.Generic.Rep.Show/index.js"),m=require("../Data.Int/index.js"),b=require("../Data.Lens.Getter/index.js"),p=require("../Data.Lens.Internal.Forget/index.js"),S=require("../Data.Lens.Iso.Newtype/index.js"),I=require("../Data.List.Types/index.js"),y=require("../Data.Map.Internal/index.js"),g=require("../Data.Maybe/index.js"),v=require("../Data.Monoid/index.js"),h=require("../Data.Newtype/index.js"),C=require("../Data.Pair/index.js"),E=require("../Data.Semigroup/index.js"),A=require("../Data.Semiring/index.js"),F=require("../Data.Show/index.js"),x=require("../Data.Symbol/index.js"),N=require("../Data.Time.Duration/index.js"),M=require("../Data.Unit/index.js"),j=require("../Data.Variant/index.js"),q=require("../Data.Variant.Internal/index.js"),k=require("../Effect/index.js"),D=require("../Effect.Aff/index.js"),B=require("../Effect.Aff.AVar/index.js"),R=require("../Effect.Class/index.js"),G=require("../Effect.Class.Console/index.js"),U=require("../Effect.Exception/index.js"),L=require("../Effect.Ref/index.js"),z=require("../Foreign/index.js"),H=require("../Genetics.Browser/index.js"),T=require("../Genetics.Browser.Bed/index.js"),V=require("../Genetics.Browser.Canvas/index.js"),P=require("../Genetics.Browser.Coordinates/index.js"),_=require("../Genetics.Browser.Demo/index.js"),J=require("../Genetics.Browser.Layer/index.js"),O=require("../Genetics.Browser.Track/index.js"),W=require("../Genetics.Browser.Types/index.js"),Z=require("../Genetics.Browser.UI.View/index.js"),Q=require("../Math/index.js"),X=require("../Record/index.js"),Y=require("../Simple.JSON/index.js"),K=require("../Type.Equality/index.js"),$=require("../Web.DOM.Document/index.js"),ee=require("../Web.DOM.ParentNode/index.js"),ne=require("../Web.HTML/index.js"),re=require("../Web.HTML.HTMLDocument/index.js"),te=require("../Web.HTML.Window/index.js"),ie=require("../Web.UIEvent.KeyboardEvent/index.js"),oe=function(){function e(){}return e.value=new e,e}(),ae=function(){function e(){}return e.value=new e,e}(),ue=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),fe=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),se=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),ce=function(e){return function(n){return"<"+e+">"+n+"</"+e+">"}},de=function(n){return function(r){if(r instanceof oe)return V.setElementStyle(n)("visibility")("visible");if(r instanceof ae)return V.setElementStyle(n)("visibility")("hidden");if(r instanceof fe)return V.setElementStyle(n)("left")(F.show(F.showInt)(r.value0)+"px");if(r instanceof ue)return V.setElementStyle(n)("top")(F.show(F.showInt)(r.value0)+"px");if(r instanceof se)return e.setElementContents(n)(r.value0);throw new Error("Failed pattern match at Genetics.Browser.UI (line 321, column 3 - line 331, column 33): "+[r.constructor.name])}},le=function(e){var n,r,t,i=s.foldMap(s.foldableArray)(v.monoidString)(ce("p"))(["SNP: "+e.feature.name,"Chr: "+F.show(W.showChrId)(e.feature.chrId),"Pos: "+F.show(W.showBp)(C.fst(e.position)),"-log10: "+b.viewOn(e.feature.score)((n=W._NegLog10(p.profunctorForget),r=S._Newtype(W.newtypeNegLog10)(W.newtypeNegLog10)(p.profunctorForget),t=W._prec(4),function(e){return n(r(t(e)))}))]);return ce("div")(i)},we=function(e){var n=s.length(s.foldableArray)(A.semiringInt)(e);return function(){return G.log(R.monadEffectEffect)("showing "+F.show(F.showInt)(5)+" out of "+F.show(F.showInt)(n)+" clicked glyphs")(),s.for_(k.applicativeEffect)(s.foldableArray)(o.take(5)(e))((r=G.log(R.monadEffectEffect),function(e){return r(e)}))();var r}},me=function(e){return function(n){var r=o.uncons(n.elements);if(r instanceof g.Nothing)return"";if(r instanceof g.Just&&0===r.value0.tail.length)return e(r.value0.head);if(r instanceof g.Just)return ce("div")(ce("p")(F.show(F.showInt)(s.length(s.foldableArray)(A.semiringInt)(r.value0.tail)+1|0)+" annotations"));throw new Error("Failed pattern match at Genetics.Browser.UI (line 241, column 3 - line 246, column 51): "+[r.constructor.name])}},be=function(r){return function(t){return function(i){return e.keydownEvent(r)(function(e){var r=ie.key(e);return"ArrowLeft"===r?i(new Z.ScrollView(-t.scrollMod)):"ArrowRight"===r?i(new Z.ScrollView(t.scrollMod)):n.pure(k.applicativeEffect)(M.unit)})}}},pe="#infoBox",Se=function(){var e=function(){var e=d.map(k.functorEffect)(re.toDocument)(t.bindFlipped(k.bindEffect)(te.document)(ne.window))();return ee.querySelector(h.wrap(ee.newtypeQuerySelector)(pe))($.toParentNode(e))()}();if(e instanceof g.Nothing)return U.throw("Could not find element '#infoBox'")();if(e instanceof g.Just)return de(e.value0);throw new Error("Failed pattern match at Genetics.Browser.UI (line 344, column 3 - line 346, column 41): "+[e.constructor.name])},Ie=new l.Generic(function(e){if(e instanceof oe)return new l.Inl(l.NoArguments.value);if(e instanceof ae)return new l.Inr(new l.Inl(l.NoArguments.value));if(e instanceof ue)return new l.Inr(new l.Inr(new l.Inl(e.value0)));if(e instanceof fe)return new l.Inr(new l.Inr(new l.Inr(new l.Inl(e.value0))));if(e instanceof se)return new l.Inr(new l.Inr(new l.Inr(new l.Inr(e.value0))));throw new Error("Failed pattern match at Genetics.Browser.UI (line 314, column 1 - line 314, column 54): "+[e.constructor.name])},function(e){if(e instanceof l.Inl)return oe.value;if(e instanceof l.Inr&&e.value0 instanceof l.Inl)return ae.value;if(e instanceof l.Inr&&e.value0 instanceof l.Inr&&e.value0.value0 instanceof l.Inl)return new ue(e.value0.value0.value0);if(e instanceof l.Inr&&e.value0 instanceof l.Inr&&e.value0.value0 instanceof l.Inr&&e.value0.value0.value0 instanceof l.Inl)return new fe(e.value0.value0.value0.value0);if(e instanceof l.Inr&&e.value0 instanceof l.Inr&&e.value0.value0 instanceof l.Inr&&e.value0.value0.value0 instanceof l.Inr)return new se(e.value0.value0.value0.value0);throw new Error("Failed pattern match at Genetics.Browser.UI (line 314, column 1 - line 314, column 54): "+[e.constructor.name])}),ye=new F.Show(w.genericShow(Ie)(w.genericShowSum(w.genericShowConstructor(w.genericShowArgsNoArguments)(new x.IsSymbol(function(){return"IBoxShow"})))(w.genericShowSum(w.genericShowConstructor(w.genericShowArgsNoArguments)(new x.IsSymbol(function(){return"IBoxHide"})))(w.genericShowSum(w.genericShowConstructor(w.genericShowArgsArgument(F.showInt))(new x.IsSymbol(function(){return"IBoxSetY"})))(w.genericShowSum(w.genericShowConstructor(w.genericShowArgsArgument(F.showInt))(new x.IsSymbol(function(){return"IBoxSetX"})))(w.genericShowConstructor(w.genericShowArgsArgument(F.showString))(new x.IsSymbol(function(){return"IBoxSetContents"})))))))),ge=function(n){return function(r){return function(){return e.buttonEvent("scrollLeft")(r(new Z.ScrollView(-n.scrollMod)))(),e.buttonEvent("scrollRight")(r(new Z.ScrollView(n.scrollMod)))(),e.buttonEvent("zoomOut")(r(Z.ZoomView.create(1+n.zoomMod)))(),e.buttonEvent("zoomIn")(r(Z.ZoomView.create(1-n.zoomMod)))()}}},ve=ge({scrollMod:.5,zoomMod:1}),he=function(e){var n=g.fromMaybe(e.feature.name)(e.feature.gene),r=function(){if(e.feature.url instanceof g.Nothing)return n;if(e.feature.url instanceof g.Just)return"<a target='_blank' href='"+e.feature.url.value0+"'>"+n+"</a>";throw new Error("Failed pattern match at Genetics.Browser.UI (line 294, column 18 - line 296, column 84): "+[e.feature.url.constructor.name])}();return ce("p")(r)},Ce=function(e){return function(n){var r=g.fromMaybe("Annotated SNP: "+n.feature.name)(d.map(g.functorMaybe)(function(e){return"Gene: "+e})(n.feature.gene)),t=function(){if(n.feature.url instanceof g.Nothing)return r;if(n.feature.url instanceof g.Just)return"<a target='_blank' href='"+n.feature.url.value0+"'>"+r+"</a>";throw new Error("Failed pattern match at Genetics.Browser.UI (line 272, column 18 - line 276, column 40): "+[n.feature.url.constructor.name])}(),i=s.foldMap(s.foldableArray)(v.monoidString)(ce("p"))(E.append(E.semigroupArray)([t])(f.filterMap(f.filterableArray)(e)(o.fromFoldable(I.foldableList)(n.feature.rest))));return ce("div")(i)}},Ee=function(e){return Ce((r=n.pure(g.applicativeMaybe),t=_.showAnnotationField(e),function(e){return r(t(e))}));var r,t},Ae=function(e){return function(n){var r=o.uncons(n.elements);if(r instanceof g.Nothing)return"";if(r instanceof g.Just&&0===r.value0.tail.length)return Ee(e)(r.value0.head);if(r instanceof g.Just)return ce("div")(ce("p")("Annotations:")+s.foldMap(s.foldableArray)(v.monoidString)(he)(n.elements));throw new Error("Failed pattern match at Genetics.Browser.UI (line 254, column 3 - line 259, column 75): "+[r.constructor.name])}},Fe=x.SProxy.value,xe=function(e){return function(r){return function(i){return function(i){return function(o){return function(a){return t.bind(D.bindAff)(B.empty)(function(u){return t.bind(D.bindAff)(B.empty)(function(f){return t.bind(D.bindAff)(O.makeTrack(e)(r)(i)(a))(function(e){var r=c.flip(B.put)(f),i=t.bind(D.bindAff)(B.take(f))(function(f){return t.discard(t.discardUnit)(D.bindAff)(j.match()(q.variantMatchCons(q.variantMatchCons(q.variantMatchNil)()(K.refl))()(K.refl))()({render:function(e){return n.pure(D.applicativeAff)(M.unit)},docResize:function(e){return t.bind(D.bindAff)(d.map(D.functorAff)(function(e){return e.size})(V.getDimensions(D.monadEffectAff)(a)))(function(n){return t.discard(t.discardUnit)(D.bindAff)(V.setTrackContainerSize(D.monadEffectAff)({width:e.width,height:n.height})(a))(function(){return t.discard(t.discardUnit)(D.bindAff)(r(j.inj()(new x.IsSymbol(function(){return"render"}))(Fe)(M.unit)))(function(){return i})})})}})(f))(function(){return t.discard(t.discardUnit)(D.bindAff)(t.bindFlipped(D.bindAff)(s.traverse_(D.applicativeAff)(s.foldableMaybe)(D.killFiber(U.error("Resetting renderer"))))(B.tryTake(u)))(function(){return t.bind(D.bindAff)(R.liftEffect(D.monadEffectAff)(o))(function(n){return t.bind(D.bindAff)(V.getDimensions(D.monadEffectAff)(a))(function(r){var o=J.trackSlots(r).center,a=P.viewScale(o.size)(n),f=d.map(C.functorPair)(P.scaleToScreen(a))(h.unwrap(P.coordsysviewNewtype)(n));return t.bind(D.bindAff)(D.forkAff(e.render(f)(n)))(function(e){return t.discard(t.discardUnit)(D.bindAff)(B.put(e)(u))(function(){return i})})})})})})});return t.bind(D.bindAff)(D.forkAff(i))(function(i){return t.discard(t.discardUnit)(D.bindAff)(r(j.inj()(new x.IsSymbol(function(){return"render"}))(Fe)(M.unit)))(function(){return n.pure(D.applicativeAff)({lastHotspots:e.hotspots,queueCommand:r})})})})})})}}}}}},Ne=x.SProxy.value,Me=function(r){return function(t){return function(i){return R.liftEffect(D.monadEffectAff)(function(){return e.resizeEvent(function(e){return D.launchAff_(i.queueCommand(j.inj()(new x.IsSymbol(function(){return"docResize"}))(Ne)(e)))})(),V.dragScrollTrack(t)(function(e){return n.when(k.applicativeEffect)(Q.abs(e.x)>=1)(function(){var n=d.map(k.functorEffect)(function(e){return J.trackSlots(e).center})(V.getDimensions(R.monadEffectEffect)(t))(),i=Z.ScrollView.create(e.x/n.size.width);return r.updateView(i)()})})()})}}},je=function(e){return function(r){return t.bind(D.bindAff)(R.liftEffect(D.monadEffectAff)(L.read(e)))(function(e){return t.bind(D.bindAff)(V.getTrack("gene")(e.container))(function(i){return t.bind(D.bindAff)(O.fetchData()()(O.trackDataCons(new x.IsSymbol(function(){return"genes"}))()()(y.monoidMap(W.ordChrId))()()()(O.trackDataNil(K.refl)))(i)({genes:T.getGenes(e.coordSys)})(r.urls))(function(o){return t.bind(D.bindAff)(t.bind(D.bindAff)(_.addChrLayers({coordinateSystem:e.coordSys,segmentPadding:12})(r.chrs)(i))(function(a){return t.bind(D.bindAff)(_.addGeneLayers(e.coordSys)(r.tracks.gene)(o)(i))(function(e){return n.pure(D.applicativeAff)(X.merge()()({chrs:a})(e))})}))(function(n){return t.bind(D.bindAff)(xe()(O.trackRecordRender(new x.IsSymbol(function(){return"chrs"}))()()(O.trackRecordRender(new x.IsSymbol(function(){return"genes"}))()()(O.trackRecordNil(K.refl))))(e.coordSys)(n)(e.viewManager.browserView)(i))(function(n){return t.discard(t.discardUnit)(D.bindAff)(Me(e.viewManager)(i)(n))(function(){return R.liftEffect(D.monadEffectAff)(e.viewManager.addCallback(function(e){return D.launchAff_(n.queueCommand(j.inj()(new x.IsSymbol(function(){return"render"}))(Fe)(M.unit)))}))})})})})})})}},qe=function(e){return function(r){return t.bind(D.bindAff)(R.liftEffect(D.monadEffectAff)(L.read(e)))(function(e){return t.bind(D.bindAff)(V.getTrack("gwas")(e.container))(function(i){return t.bind(D.bindAff)(O.fetchData()()(O.trackDataCons(new x.IsSymbol(function(){return"annotations"}))()()(y.monoidMap(W.ordChrId))()()()(O.trackDataCons(new x.IsSymbol(function(){return"snps"}))()()(y.monoidMap(W.ordChrId))()()()(O.trackDataNil(K.refl))))(i)({snps:_.getSNPs(e.coordSys),annotations:_.getAnnotations(e.coordSys)})(r.urls))(function(a){return t.bind(D.bindAff)(t.bind(D.bindAff)(_.addChrLayers({coordinateSystem:e.coordSys,segmentPadding:12})(r.chrs)(i))(function(o){return t.bind(D.bindAff)(_.addGWASLayers(e.coordSys)(r.tracks.gwas)(a)(i))(function(e){return n.pure(D.applicativeAff)(X.merge()()({chrs:o})(e))})}))(function(n){return t.bind(D.bindAff)(xe()(O.trackRecordRender(new x.IsSymbol(function(){return"annotations"}))()()(O.trackRecordRender(new x.IsSymbol(function(){return"chrs"}))()()(O.trackRecordUI(new x.IsSymbol(function(){return"fixedUI"}))()()(O.trackRecordHotspots(new x.IsSymbol(function(){return"hotspots"}))()()(K.refl)(O.trackRecordRender(new x.IsSymbol(function(){return"snps"}))()()(O.trackRecordNil(K.refl)))))))(e.coordSys)(n)(e.viewManager.browserView)(i))(function(n){return t.discard(t.discardUnit)(D.bindAff)(Me(e.viewManager)(i)(n))(function(){return t.discard(t.discardUnit)(D.bindAff)(R.liftEffect(D.monadEffectAff)(e.viewManager.addCallback(function(e){return D.launchAff_(n.queueCommand(j.inj()(new x.IsSymbol(function(){return"render"}))(Fe)(M.unit)))})))(function(){return R.liftEffect(D.monadEffectAff)((u=_.filterSig(r.score)(a.snps),V.trackClickHandler(R.monadEffectEffect)(i)(new J.Center(function(f){return D.launchAff_(t.bind(D.bindAff)(R.liftEffect(D.monadEffectAff)(e.viewManager.browserView))(function(c){return t.bind(D.bindAff)(d.map(D.functorAff)(function(e){return J.trackSlots(e).center})(V.getDimensions(D.monadEffectAff)(i)))(function(i){var d=H.pixelSegments({segmentPadding:12})(e.coordSys)(i.size)(c),l=_.annotationsForScale(e.coordSys)(u)(a.annotations)(d);return t.bind(D.bindAff)(n.lastHotspots)(function(n){var i=n(1)(f);return R.liftEffect(D.monadEffectAff)(function(){var n=o.head(i);if(n instanceof g.Nothing)return e.cmdInfoBox(ae.value);if(n instanceof g.Just)return function(){return e.cmdInfoBox(oe.value)(),e.cmdInfoBox(fe.create(m.round(f.x)))(),e.cmdInfoBox(ue.create(m.round(f.y)))(),e.cmdInfoBox(se.create(le(n.value0)+s.foldMap(s.foldableMaybe)(v.monoidString)(Ae(r.tracks.gwas.annotations.urls))((i=l,function(e){return t.bindFlipped(g.bindMaybe)(s.find(s.foldableArray)(function(n){return P.pairsOverlap(W.ordBp)(n.covers)(e.position)}))(y.lookup(W.ordChrId)(e.feature.chrId)(i))})(n.value0))))();var i};throw new Error("Failed pattern match at Genetics.Browser.UI (line 427, column 15 - line 436, column 57): "+[n.constructor.name])}())})})}))}))));var u})})})})})})})}},ke=function(o){return function(f){return D.launchAff(t.bind(D.bindAff)(R.liftEffect(D.monadEffectAff)(function(){var e=i.runExcept(P.parseCoordSys(o.coordinateSystem));if(e instanceof u.Left)return U.throw(s.foldMap(I.foldableNonEmptyList)(v.monoidString)(function(e){return z.renderForeignError(e)+" "})(e.value0));if(e instanceof u.Right)return n.pure(k.applicativeEffect)(e.value0);throw new Error("Failed pattern match at Genetics.Browser.UI (line 479, column 11 - line 481, column 24): "+[e.constructor.name])}()))(function(i){var u=g.fromMaybe(h.wrap(P.coordsysviewNewtype)(new C.Pair(A.zero(a.semiringBigInt),b.viewOn(i)(P._TotalSize(a.ringBigInt)))))(t.bind(g.bindMaybe)(o.initialChrs)(function(e){return t.bind(g.bindMaybe)(y.lookup(W.ordChrId)(h.wrap(W.newtypeChrId)(e.left))(b.viewOn(i)(P._Segments(p.strongForget))))(function(r){return t.bind(g.bindMaybe)(y.lookup(W.ordChrId)(h.wrap(W.newtypeChrId)(e.right))(b.viewOn(i)(P._Segments(p.strongForget))))(function(e){return n.pure(g.applicativeMaybe)(h.wrap(P.coordsysviewNewtype)(new C.Pair(r.value0,e.value1)))})})}));return t.discard(t.discardUnit)(D.bindAff)(R.liftEffect(D.monadEffectAff)(e.initDebugDiv(1)))(function(){return t.bind(D.bindAff)(R.liftEffect(D.monadEffectAff)(Se))(function(a){return t.bind(D.bindAff)(R.liftEffect(D.monadEffectAff)(Z.browserViewManager(i)(h.wrap(N.newtypeMilliseconds)(200))({initialView:u})(f)))(function(s){return t.bind(D.bindAff)(R.liftEffect(D.monadEffectAff)(L.new({viewManager:s,cmdInfoBox:a,container:f,coordSys:i})))(function(i){return t.discard(t.discardUnit)(D.bindAff)(R.liftEffect(D.monadEffectAff)((a={scrollMod:.1,zoomMod:.15},function(){var n;return ge(a)(function(e){return s.updateView(e)})(),e.buttonEvent("reset")((n=new Z.ModView(c.const(h.unwrap(P.coordsysviewNewtype)(u))),s.updateView(n)))(),be(b.viewOn(f)(V._Container(V.newtypeBrowserContainer)(p.strongForget)))({scrollMod:.075})(function(e){return s.updateView(e)})(),V.wheelZoom(V.newtypeBrowserContainer)(f)(function(e){var n=Z.ZoomView.create(1+.06*e);return s.updateView(n)})()})))(function(){if(o.urls.snps instanceof g.Just)return r.applySecond(D.applyAff)(qe(i)(o))(n.pure(D.applicativeAff)(M.unit));if(o.urls.snps instanceof g.Nothing)return n.pure(D.applicativeAff)(M.unit);throw new Error("Failed pattern match at Genetics.Browser.UI (line 523, column 3 - line 525, column 25): "+[o.urls.snps.constructor.name])});var a})})})})}))}},De=function(i){return function(){var o,a=function(){var e=d.map(k.functorEffect)(re.toDocument)(t.bindFlipped(k.bindEffect)(te.document)(ne.window))();return ee.querySelector(h.wrap(ee.newtypeQuerySelector)("#browser"))($.toParentNode(e))()}();if(a instanceof g.Nothing)return G.log(R.monadEffectEffect)("Could not find element '#browser'")();if(a instanceof g.Just){var f=Y.read(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"chrs"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"chrBG1"}))(H.readforeignHexColor)(Y.readFieldsCons(new x.IsSymbol(function(){return"chrBG2"}))(H.readforeignHexColor)(Y.readFieldsCons(new x.IsSymbol(function(){return"chrLabels"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"fontSize"}))(Y.readInt)(Y.readFieldsNil)()()))(Y.readFieldsNil)()())()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"coordinateSystem"}))(Y.readForeign)(Y.readFieldsCons(new x.IsSymbol(function(){return"initialChrs"}))(Y.readMaybe(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"left"}))(Y.readString)(Y.readFieldsCons(new x.IsSymbol(function(){return"right"}))(Y.readString)(Y.readFieldsNil)()())()())))(Y.readFieldsCons(new x.IsSymbol(function(){return"score"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"max"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"min"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"sig"}))(Y.readNumber)(Y.readFieldsNil)()())()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"tracks"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"gwas"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"annotations"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"geneColor"}))(H.readforeignHexColor)(Y.readFieldsCons(new x.IsSymbol(function(){return"outline"}))(H.readforeignHexColor)(Y.readFieldsCons(new x.IsSymbol(function(){return"radius"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"snpColor"}))(H.readforeignHexColor)(Y.readFieldsCons(new x.IsSymbol(function(){return"urls"}))(Y.readObject(Y.readString))(Y.readFieldsNil)()())()())()())()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"legend"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"fontSize"}))(Y.readInt)(Y.readFieldsCons(new x.IsSymbol(function(){return"hPad"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"vPad"}))(Y.readNumber)(Y.readFieldsNil)()())()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"padding"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"bottom"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"left"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"right"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"top"}))(Y.readNumber)(Y.readFieldsNil)()())()())()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"score"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"max"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"min"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"sig"}))(Y.readNumber)(Y.readFieldsNil)()())()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"snps"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"color"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"fill"}))(H.readforeignHexColor)(Y.readFieldsCons(new x.IsSymbol(function(){return"outline"}))(H.readforeignHexColor)(Y.readFieldsNil)()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"lineWidth"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"pixelOffset"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"x"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"y"}))(Y.readNumber)(Y.readFieldsNil)()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"radius"}))(Y.readNumber)(Y.readFieldsNil)()())()())()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"trackHeight"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"vscale"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"color"}))(H.readforeignHexColor)(Y.readFieldsCons(new x.IsSymbol(function(){return"fonts"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"labelSize"}))(Y.readInt)(Y.readFieldsCons(new x.IsSymbol(function(){return"scaleSize"}))(Y.readInt)(Y.readFieldsNil)()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"hPad"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"numSteps"}))(Y.readInt)(Y.readFieldsNil)()())()())()())()()))(Y.readFieldsNil)()())()())()())()())()())()())()()))(Y.readFieldsNil)()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"urls"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"annotations"}))(Y.readMaybe(Y.readString))(Y.readFieldsCons(new x.IsSymbol(function(){return"genes"}))(Y.readMaybe(Y.readString))(Y.readFieldsCons(new x.IsSymbol(function(){return"snps"}))(Y.readMaybe(Y.readString))(Y.readFieldsNil)()())()())()()))(Y.readFieldsNil)()())()())()())()())()())()()))(i);if(f instanceof u.Left)return e.setElementContents(a.value0)("<p>Error when parsing provided config object:<p>"+s.foldMap(I.foldableNonEmptyList)(v.monoidString)((o=ce("p"),function(e){return o(z.renderForeignError(e))}))(f.value0))();if(f instanceof u.Right){var c=e.windowInnerSize(),l=O.makeContainers()(O.trackConfigCons(new x.IsSymbol(function(){return"gwas"}))(O.trackConfigNil(K.refl))()()()()(K.refl))(c.width)(f.value0.tracks)(),w=V.browserContainer(R.monadEffectEffect)(a.value0)();return function(){if(f.value0.urls.snps instanceof g.Just)return r.applySecond(k.applyEffect)(V.addTrack(R.monadEffectEffect)(w)("gwas")(l.gwas))(n.pure(k.applicativeEffect)(M.unit))();if(f.value0.urls.snps instanceof g.Nothing)return M.unit;throw new Error("Failed pattern match at Genetics.Browser.UI (line 600, column 11 - line 602, column 33): "+[f.value0.urls.snps.constructor.name])}(),G.log(R.monadEffectEffect)(f.value0)(),d.void(k.functorEffect)(ke(f.value0)(w))()}throw new Error("Failed pattern match at Genetics.Browser.UI (line 586, column 7 - line 610, column 33): "+[f.constructor.name])}throw new Error("Failed pattern match at Genetics.Browser.UI (line 582, column 3 - line 610, column 33): "+[a.constructor.name])}};module.exports={_render:Fe,_docResize:Ne,initializeTrack:xe,btnUI:ge,btnUIFixed:ve,keyUI:be,printSNPInfo:we,wrapWith:ce,snpHTML:le,peakHTML:me,annoPeakHTML:Ae,annotationHTML:Ce,annotationHTMLAll:Ee,annotationHTMLShort:he,IBoxShow:oe,IBoxHide:ae,IBoxSetY:ue,IBoxSetX:fe,IBoxSetContents:se,updateInfoBox:de,infoBoxId:pe,initInfoBox:Se,setHandlers:Me,mkGwas:qe,mkGene:je,runBrowser:ke,main:De,genericInfoBoxF:Ie,showInfoBoxF:ye,windowInnerSize:e.windowInnerSize,buttonEvent:e.buttonEvent,keydownEvent:e.keydownEvent,resizeEvent:e.resizeEvent,initDebugDiv:e.initDebugDiv,setDebugDivVisibility:e.setDebugDivVisibility,setDebugDivPoint:e.setDebugDivPoint,setElementContents:e.setElementContents,setWindow:e.setWindow};
-},{"./foreign.js":"DuPX","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad.Except/index.js":"Fye2","../Data.Array/index.js":"4t4C","../Data.BigInt/index.js":"Zx+T","../Data.Either/index.js":"B2JL","../Data.Filterable/index.js":"6hfS","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Generic.Rep/index.js":"AuzG","../Data.Generic.Rep.Show/index.js":"lpst","../Data.Int/index.js":"xNJb","../Data.Lens.Getter/index.js":"OPOX","../Data.Lens.Internal.Forget/index.js":"mj9z","../Data.Lens.Iso.Newtype/index.js":"CiFJ","../Data.List.Types/index.js":"Xxuc","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Pair/index.js":"PpsX","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.Symbol/index.js":"4oJQ","../Data.Time.Duration/index.js":"AnkF","../Data.Unit/index.js":"NhVk","../Data.Variant/index.js":"hgdh","../Data.Variant.Internal/index.js":"kYoO","../Effect/index.js":"oTWB","../Effect.Aff/index.js":"I7lu","../Effect.Aff.AVar/index.js":"hACG","../Effect.Class/index.js":"dWtH","../Effect.Class.Console/index.js":"3Dts","../Effect.Exception/index.js":"0OCW","../Effect.Ref/index.js":"/Jaj","../Foreign/index.js":"pu1p","../Genetics.Browser/index.js":"X0te","../Genetics.Browser.Bed/index.js":"UuEA","../Genetics.Browser.Canvas/index.js":"VVkU","../Genetics.Browser.Coordinates/index.js":"7bYH","../Genetics.Browser.Demo/index.js":"mKwt","../Genetics.Browser.Layer/index.js":"YWUW","../Genetics.Browser.Track/index.js":"HH6s","../Genetics.Browser.Types/index.js":"HhmG","../Genetics.Browser.UI.View/index.js":"Tmz+","../Math/index.js":"Rpaz","../Record/index.js":"0gG4","../Simple.JSON/index.js":"DqNI","../Type.Equality/index.js":"Uq/R","../Web.DOM.Document/index.js":"0hiR","../Web.DOM.ParentNode/index.js":"lU5U","../Web.HTML/index.js":"UQRJ","../Web.HTML.HTMLDocument/index.js":"EU5r","../Web.HTML.Window/index.js":"o+50","../Web.UIEvent.KeyboardEvent/index.js":"o/+T"}],"Focm":[function(require,module,exports) {
-var e=require("./output/Genetics.Browser.UI");window.GenomeBrowser=e;
-},{"./output/Genetics.Browser.UI":"JuOH"}]},{},["Focm"], null) \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/smart-time-ago b/wqflask/wqflask/static/packages/smart-time-ago
deleted file mode 120000
index a572d4b5..00000000
--- a/wqflask/wqflask/static/packages/smart-time-ago
+++ /dev/null
@@ -1 +0,0 @@
-pragmaticly-smart-time-ago-40fa376 \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/underscore/underscore-min.js b/wqflask/wqflask/static/packages/underscore/underscore-min.js
deleted file mode 100644
index c1d9d3ae..00000000
--- a/wqflask/wqflask/static/packages/underscore/underscore-min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,h=e.reduce,v=e.reduceRight,d=e.filter,g=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,_=Object.keys,j=i.bind,w=function(n){return n instanceof w?n:this instanceof w?(this._wrapped=n,void 0):new w(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=w),exports._=w):n._=w,w.VERSION="1.4.4";var A=w.each=w.forEach=function(n,t,e){if(null!=n)if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a in n)if(w.has(n,a)&&t.call(e,n[a],a,n)===r)return};w.map=w.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e[e.length]=t.call(r,n,u,i)}),e)};var O="Reduce of empty array with no initial value";w.reduce=w.foldl=w.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduce===h)return e&&(t=w.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(O);return r},w.reduceRight=w.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduceRight===v)return e&&(t=w.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=w.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(O);return r},w.find=w.detect=function(n,t,r){var e;return E(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},w.filter=w.select=function(n,t,r){var e=[];return null==n?e:d&&n.filter===d?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&(e[e.length]=n)}),e)},w.reject=function(n,t,r){return w.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},w.every=w.all=function(n,t,e){t||(t=w.identity);var u=!0;return null==n?u:g&&n.every===g?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var E=w.some=w.any=function(n,t,e){t||(t=w.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};w.contains=w.include=function(n,t){return null==n?!1:y&&n.indexOf===y?n.indexOf(t)!=-1:E(n,function(n){return n===t})},w.invoke=function(n,t){var r=o.call(arguments,2),e=w.isFunction(t);return w.map(n,function(n){return(e?t:n[t]).apply(n,r)})},w.pluck=function(n,t){return w.map(n,function(n){return n[t]})},w.where=function(n,t,r){return w.isEmpty(t)?r?null:[]:w[r?"find":"filter"](n,function(n){for(var r in t)if(t[r]!==n[r])return!1;return!0})},w.findWhere=function(n,t){return w.where(n,t,!0)},w.max=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.max.apply(Math,n);if(!t&&w.isEmpty(n))return-1/0;var e={computed:-1/0,value:-1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a>=e.computed&&(e={value:n,computed:a})}),e.value},w.min=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.min.apply(Math,n);if(!t&&w.isEmpty(n))return 1/0;var e={computed:1/0,value:1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;e.computed>a&&(e={value:n,computed:a})}),e.value},w.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=w.random(r++),e[r-1]=e[t],e[t]=n}),e};var k=function(n){return w.isFunction(n)?n:function(t){return t[n]}};w.sortBy=function(n,t,r){var e=k(t);return w.pluck(w.map(n,function(n,t,u){return{value:n,index:t,criteria:e.call(r,n,t,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index<t.index?-1:1}),"value")};var F=function(n,t,r,e){var u={},i=k(t||w.identity);return A(n,function(t,a){var o=i.call(r,t,a,n);e(u,o,t)}),u};w.groupBy=function(n,t,r){return F(n,t,r,function(n,t,r){(w.has(n,t)?n[t]:n[t]=[]).push(r)})},w.countBy=function(n,t,r){return F(n,t,r,function(n,t){w.has(n,t)||(n[t]=0),n[t]++})},w.sortedIndex=function(n,t,r,e){r=null==r?w.identity:k(r);for(var u=r.call(e,t),i=0,a=n.length;a>i;){var o=i+a>>>1;u>r.call(e,n[o])?i=o+1:a=o}return i},w.toArray=function(n){return n?w.isArray(n)?o.call(n):n.length===+n.length?w.map(n,w.identity):w.values(n):[]},w.size=function(n){return null==n?0:n.length===+n.length?n.length:w.keys(n).length},w.first=w.head=w.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:o.call(n,0,t)},w.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},w.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},w.rest=w.tail=w.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},w.compact=function(n){return w.filter(n,w.identity)};var R=function(n,t,r){return A(n,function(n){w.isArray(n)?t?a.apply(r,n):R(n,t,r):r.push(n)}),r};w.flatten=function(n,t){return R(n,t,[])},w.without=function(n){return w.difference(n,o.call(arguments,1))},w.uniq=w.unique=function(n,t,r,e){w.isFunction(t)&&(e=r,r=t,t=!1);var u=r?w.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:w.contains(a,r))||(a.push(r),i.push(n[e]))}),i},w.union=function(){return w.uniq(c.apply(e,arguments))},w.intersection=function(n){var t=o.call(arguments,1);return w.filter(w.uniq(n),function(n){return w.every(t,function(t){return w.indexOf(t,n)>=0})})},w.difference=function(n){var t=c.apply(e,o.call(arguments,1));return w.filter(n,function(n){return!w.contains(t,n)})},w.zip=function(){for(var n=o.call(arguments),t=w.max(w.pluck(n,"length")),r=Array(t),e=0;t>e;e++)r[e]=w.pluck(n,""+e);return r},w.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},w.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=w.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},w.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},w.range=function(n,t,r){1>=arguments.length&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=Array(e);e>u;)i[u++]=n,n+=r;return i},w.bind=function(n,t){if(n.bind===j&&j)return j.apply(n,o.call(arguments,1));var r=o.call(arguments,2);return function(){return n.apply(t,r.concat(o.call(arguments)))}},w.partial=function(n){var t=o.call(arguments,1);return function(){return n.apply(this,t.concat(o.call(arguments)))}},w.bindAll=function(n){var t=o.call(arguments,1);return 0===t.length&&(t=w.functions(n)),A(t,function(t){n[t]=w.bind(n[t],n)}),n},w.memoize=function(n,t){var r={};return t||(t=w.identity),function(){var e=t.apply(this,arguments);return w.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},w.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},w.defer=function(n){return w.delay.apply(w,[n,1].concat(o.call(arguments,1)))},w.throttle=function(n,t){var r,e,u,i,a=0,o=function(){a=new Date,u=null,i=n.apply(r,e)};return function(){var c=new Date,l=t-(c-a);return r=this,e=arguments,0>=l?(clearTimeout(u),u=null,a=c,i=n.apply(r,e)):u||(u=setTimeout(o,l)),i}},w.debounce=function(n,t,r){var e,u;return function(){var i=this,a=arguments,o=function(){e=null,r||(u=n.apply(i,a))},c=r&&!e;return clearTimeout(e),e=setTimeout(o,t),c&&(u=n.apply(i,a)),u}},w.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},w.wrap=function(n,t){return function(){var r=[n];return a.apply(r,arguments),t.apply(this,r)}},w.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},w.after=function(n,t){return 0>=n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},w.keys=_||function(n){if(n!==Object(n))throw new TypeError("Invalid object");var t=[];for(var r in n)w.has(n,r)&&(t[t.length]=r);return t},w.values=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push(n[r]);return t},w.pairs=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push([r,n[r]]);return t},w.invert=function(n){var t={};for(var r in n)w.has(n,r)&&(t[n[r]]=r);return t},w.functions=w.methods=function(n){var t=[];for(var r in n)w.isFunction(n[r])&&t.push(r);return t.sort()},w.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},w.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},w.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)w.contains(r,u)||(t[u]=n[u]);return t},w.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)null==n[r]&&(n[r]=t[r])}),n},w.clone=function(n){return w.isObject(n)?w.isArray(n)?n.slice():w.extend({},n):n},w.tap=function(n,t){return t(n),n};var I=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof w&&(n=n._wrapped),t instanceof w&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==t+"";case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;r.push(n),e.push(t);var a=0,o=!0;if("[object Array]"==u){if(a=n.length,o=a==t.length)for(;a--&&(o=I(n[a],t[a],r,e)););}else{var c=n.constructor,f=t.constructor;if(c!==f&&!(w.isFunction(c)&&c instanceof c&&w.isFunction(f)&&f instanceof f))return!1;for(var s in n)if(w.has(n,s)&&(a++,!(o=w.has(t,s)&&I(n[s],t[s],r,e))))break;if(o){for(s in t)if(w.has(t,s)&&!a--)break;o=!a}}return r.pop(),e.pop(),o};w.isEqual=function(n,t){return I(n,t,[],[])},w.isEmpty=function(n){if(null==n)return!0;if(w.isArray(n)||w.isString(n))return 0===n.length;for(var t in n)if(w.has(n,t))return!1;return!0},w.isElement=function(n){return!(!n||1!==n.nodeType)},w.isArray=x||function(n){return"[object Array]"==l.call(n)},w.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){w["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),w.isArguments(arguments)||(w.isArguments=function(n){return!(!n||!w.has(n,"callee"))}),"function"!=typeof/./&&(w.isFunction=function(n){return"function"==typeof n}),w.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},w.isNaN=function(n){return w.isNumber(n)&&n!=+n},w.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},w.isNull=function(n){return null===n},w.isUndefined=function(n){return n===void 0},w.has=function(n,t){return f.call(n,t)},w.noConflict=function(){return n._=t,this},w.identity=function(n){return n},w.times=function(n,t,r){for(var e=Array(n),u=0;n>u;u++)e[u]=t.call(r,u);return e},w.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))};var M={escape:{"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","/":"&#x2F;"}};M.unescape=w.invert(M.escape);var S={escape:RegExp("["+w.keys(M.escape).join("")+"]","g"),unescape:RegExp("("+w.keys(M.unescape).join("|")+")","g")};w.each(["escape","unescape"],function(n){w[n]=function(t){return null==t?"":(""+t).replace(S[n],function(t){return M[n][t]})}}),w.result=function(n,t){if(null==n)return null;var r=n[t];return w.isFunction(r)?r.call(n):r},w.mixin=function(n){A(w.functions(n),function(t){var r=w[t]=n[t];w.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),D.call(this,r.apply(w,n))}})};var N=0;w.uniqueId=function(n){var t=++N+"";return n?n+t:t},w.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var T=/(.)^/,q={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},B=/\\|'|\r|\n|\t|\u2028|\u2029/g;w.template=function(n,t,r){var e;r=w.defaults({},r,w.templateSettings);var u=RegExp([(r.escape||T).source,(r.interpolate||T).source,(r.evaluate||T).source].join("|")+"|$","g"),i=0,a="__p+='";n.replace(u,function(t,r,e,u,o){return a+=n.slice(i,o).replace(B,function(n){return"\\"+q[n]}),r&&(a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(a+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),u&&(a+="';\n"+u+"\n__p+='"),i=o+t.length,t}),a+="';\n",r.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{e=Function(r.variable||"obj","_",a)}catch(o){throw o.source=a,o}if(t)return e(t,w);var c=function(n){return e.call(this,n,w)};return c.source="function("+(r.variable||"obj")+"){\n"+a+"}",c},w.chain=function(n){return w(n).chain()};var D=function(n){return this._chain?w(n).chain():n};w.mixin(w),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];w.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],D.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];w.prototype[n]=function(){return D.call(this,t.apply(this._wrapped,arguments))}}),w.extend(w.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this); \ No newline at end of file
diff --git a/wqflask/wqflask/submit_bnw.py b/wqflask/wqflask/submit_bnw.py
index 59e60dfd..a0e84c8c 100644
--- a/wqflask/wqflask/submit_bnw.py
+++ b/wqflask/wqflask/submit_bnw.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
from base.trait import GeneralTrait
from base import data_set
from utility import helper_functions
@@ -8,4 +6,4 @@ import utility.logger
logger = utility.logger.getLogger(__name__ )
def get_bnw_input(start_vars):
- logger.debug("BNW VARS:", start_vars) \ No newline at end of file
+ logger.debug("BNW VARS:", start_vars)
diff --git a/wqflask/wqflask/templates/admin/change_resource_owner.html b/wqflask/wqflask/templates/admin/change_resource_owner.html
new file mode 100644
index 00000000..ae9409b0
--- /dev/null
+++ b/wqflask/wqflask/templates/admin/change_resource_owner.html
@@ -0,0 +1,116 @@
+{% extends "base.html" %}
+{% block title %}Resource Manager{% endblock %}
+{% block css %}
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
+{% endblock %}
+{% block content %}
+<!-- Start of body -->
+ <div class="container">
+ <div class="page-header">
+ <h1>Search for user to assign ownership to:</h1>
+ </div>
+ <form id="change_owner_form" action="/resources/change_owner" method="POST">
+ <input type="hidden" name="resource_id" value="{{ resource_id }}">
+ <div style="min-width: 600px; max-width: 800px;">
+ <fieldset>
+ <div class="form-horizontal" style="width: 900px;">
+ <div style="margin-bottom: 30px;">
+ <h2>Search for user by either name or e-mail:</h2>
+ </div>
+ <div class="form-group" style="padding-left: 20px;">
+ <label for="user_name" class="col-xs-3" style="float: left; font-size: 18px;">User's Name:</label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ <input name="user_name" type="text" value="">
+ </div>
+ </div>
+ <div class="form-group" style="padding-left: 20px;">
+ <label for="user_email" class="col-xs-3" style="float: left; font-size: 18px;">User's E-mail:</label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ <input name="user_email" type="text" value="">
+ </div>
+ </div>
+ <div class="form-group" style="padding-left: 20px;">
+ <label class="col-xs-3" style="float: left; font-size: 18px;"></label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ <button type="button" id="find_users" class="btn btn-primary">Search</button>
+ <button style="margin-left: 20px; display: none;" type="submit" id="submit_new_owner" class="btn btn-success">Assign Ownership to Selected User</button>
+ </div>
+ </div>
+ </div>
+ </fieldset>
+ <hr>
+ <div id="user_results">
+ </div>
+ </div>
+ </form>
+ </div>
+
+<!-- End of body -->
+
+{% endblock %}
+
+{% block js %}
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
+
+ <script language="javascript">
+ $('#find_users').click(function() {
+ $.ajax({
+ method: "POST",
+ url: "/search_for_users",
+ data: {
+ user_name: $('input[name=user_name]').val(),
+ user_email: $('input[name=user_email]').val()
+ },
+ success: populate_users
+ });
+ })
+
+ populate_users = function(json_user_list){
+ var user_list = JSON.parse(json_user_list)
+
+ var the_html = ""
+ if (user_list.length > 0){
+ the_html += "<table id='users_table' style='padding-top: 10px; width: 100%;' class='table-hover table-striped cell-border'>";
+ the_html += "<thead><tr><th></th><th>Index</th><th>Name</th><th>E-mail Address</th><th>Organization</th></tr></thead>";
+ the_html += "<tbody>";
+ for (_i = 0, _len = user_list.length; _i < _len; _i++) {
+ this_user = user_list[_i]
+ the_html += "<tr>";
+ the_html += "<td align='center' class='select_user'><input type='radio' name='new_owner' value='" + this_user.user_id + "'></td>";
+ the_html += "<td>" + (_i + 1).toString() + "</td>"
+ if ("full_name" in this_user) {
+ the_html += "<td>" + this_user.full_name + "</td>";
+ } else {
+ the_html += "<td>N/A</td>"
+ }
+ if ("email_address" in this_user) {
+ the_html += "<td>" + this_user.email_address + "</td>";
+ } else {
+ the_html += "<td>N/A</td>"
+ }
+ if ("organization" in this_user) {
+ the_html += "<td>" + this_user.organization + "</td>";
+ } else {
+ the_html += "<td>N/A</td>"
+ }
+ the_html += "</tr>"
+ }
+ the_html += "</tbody>";
+ the_html += "</table>";
+ } else {
+ the_html = "<span>No users were found matching the entered criteria.</span>"
+ }
+
+ $('#user_results').html(the_html)
+ if (user_list.length > 0){
+ $('#users_table').dataTable({
+ 'order': [[1, "asc" ]],
+ 'sDom': 'tr'
+ });
+ $('input[name=select_user]:eq(0)').prop("checked", true)
+ $('#submit_new_owner').css("display", "inline-block")
+ }
+ }
+ </script>
+{% endblock %}
diff --git a/wqflask/wqflask/templates/admin/create_group.html b/wqflask/wqflask/templates/admin/create_group.html
new file mode 100644
index 00000000..21ef5653
--- /dev/null
+++ b/wqflask/wqflask/templates/admin/create_group.html
@@ -0,0 +1,89 @@
+{% extends "base.html" %}
+{% block title %}Group Manager{% endblock %}
+{% block content %}
+<!-- Start of body -->
+ <div class="container">
+ <div class="page-header">
+ <h1>Create Group</h1>
+ </div>
+ <form action="/groups/create" method="POST">
+ <input type="hidden" name="admin_emails_to_add" value="">
+ <input type="hidden" name="member_emails_to_add" value="">
+ <fieldset>
+ <div class="form-horizontal" style="width: 900px; margin-bottom: 50px;">
+ <div class="form-group" style="padding-left: 20px;">
+ <label for="group_name" class="col-xs-3" style="float: left; font-size: 18px;">Group Name:</label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ <div class="col-xs-12">
+ <input name="group_name" type="text" style="width:100%;"></input>
+ </div>
+ </div>
+ </div>
+ <div class="form-group" style="padding-left: 20px;">
+ <label for="user_email" class="col-xs-3" style="float: left; font-size: 18px;">Add User Email:</label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ <div class="col-xs-12">
+ <input name="user_email" type="text" style="width:100%;"></input>
+ </div>
+ </div>
+ </div>
+ <div class="form-group" style="padding-left: 20px;">
+ <label class="col-xs-3"></label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ <div class="col-xs-6">
+ <button type="button" id="add_to_admins" class="btn btn-default">Add to Admins</button>
+ </div>
+ <div class="col-xs-6">
+ <button type="button" id="add_to_members" class="btn btn-default">Add to Members</button>
+ </div>
+ </div>
+ </div>
+ <div class="form-group" style="padding-left: 20px;">
+ <label class="col-xs-3" style="font-size: 18px;">Members to be added:</label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ <div class="col-xs-6">
+ <textarea rows="8" cols="60" readonly placeholder="No users added" style="overflow-y: scroll; resize: none; width: 200px;" class="added_admins"></textarea>
+ </div>
+ <div class="col-xs-6">
+ <textarea rows="8" cols="60" readonly placeholder="No users added" style="overflow-y: scroll; resize: none; width: 200px;" class="added_members"></textarea>
+ </div>
+ </div>
+ </div>
+ <div class="form-group" style="padding-left: 20px;">
+ <label class="col-xs-3"></label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ <div class="col-xs-6">
+ <button type="button" id="clear_admins" class="btn btn-default">Clear</button>
+ </div>
+ <div class="col-xs-6">
+ <button type="button" id="clear_members" class="btn btn-default">Clear</button>
+ </div>
+ </div>
+ </div>
+ <div class="form-group" style="padding-left: 20px;">
+ <label for="create_group" class="col-xs-3" style="float: left; font-size: 18px;"></label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ <div class="col-xs-6">
+ <button type="submit" id="create_group" class="btn btn-primary">Create Group</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </fieldset>
+ </form>
+ </div>
+
+
+
+<!-- End of body -->
+
+{% endblock %}
+
+{% block js %}
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/group_manager.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script>
+
+ <script type="text/javascript" charset="utf-8">
+ </script>
+{% endblock %}
diff --git a/wqflask/wqflask/templates/admin/group_manager.html b/wqflask/wqflask/templates/admin/group_manager.html
index ac5c1350..c0b99e75 100644
--- a/wqflask/wqflask/templates/admin/group_manager.html
+++ b/wqflask/wqflask/templates/admin/group_manager.html
@@ -1,18 +1,36 @@
{% extends "base.html" %}
{% block title %}Group Manager{% endblock %}
+{% block css %}
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css') }}" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
+{% endblock %}
{% block content %}
<!-- Start of body -->
- {{ header("List of groups", "" )}}
-
<div class="container">
<div class="page-header">
<h1>Manage Groups</h1>
+ {% if admin_groups|length != 0 or member_groups|length != 0 %}
+ <div style="display: inline;">
+ <button type="button" id="create_group" class="btn btn-primary" data-url="/groups/create">Create Group</button>
+ <button type="button" id="remove_groups" class="btn btn-primary" data-url="/groups/remove">Remove Selected Groups</button>
+ </div>
+ {% endif %}
</div>
- <form action="/manage/groups" method="POST">
- <div class="container" style="margin-bottom: 30px;">
- <div><h3>Admin Groups</h3></div>
+ <form id="groups_form" action="/groups/manage" method="POST">
+ <input type="hidden" name="selected_group_ids" value="">
+ <div style="min-width: 800px; max-width: 1000px;">
+ {% if admin_groups|length == 0 and member_groups|length == 0 %}
+ <h4>You currently aren't a member or admin of any groups.</h4>
+ <br>
+ <button type="button" id="create_group" class="btn btn-primary" data-url="/groups/create">Create a new group</button>
+ {% else %}
+ <div style="margin-top: 20px;"><h2>Admin Groups</h2></div>
<hr>
- <table id="admin_groups" class="table table-hover">
+ {% if admin_groups|length == 0 %}
+ <h4>You currently aren't the administrator of any groups.</h4>
+ {% else %}
+ <table id="admin_groups" class="table-hover table-striped cell-border" style="float: left;">
<thead>
<tr>
<th></th>
@@ -21,27 +39,33 @@
<th># Members</th>
<th>Created</th>
<th>Last Changed</th>
+ <th>Group ID</th>
</tr>
</thead>
<tbody>
{% for group in admin_groups %}
<tr>
- <td><input type="checkbox" name="read" value="{{ group.id }}"></td>
- <td>{{ loop.index }}</td>
- <td>{{ group.name }}</td>
- <td>{{ group.admins|length + group.users|length }}</td>
+ <td><input type="checkbox" name="group_id" value="{{ group.id }}"></td>
+ <td align="right">{{ loop.index }}</td>
+ <td><a href="/groups/view?id={{ group.id }}">{{ group.name }}</a></td>
+ <td align="right">{{ group.admins|length + group.members|length }}</td>
<td>{{ group.created_timestamp }}</td>
<td>{{ group.changed_timestamp }}</td>
+ <td>{{ group.id }}</td>
</tr>
{% endfor %}
</tbody>
</table>
+ {% endif %}
</div>
<hr>
- <div class="container">
- <div><h3>User Groups</h3></div>
+ <div style="min-width: 800px; max-width: 1000px;">
+ <div><h2>User Groups</h2></div>
<hr>
- <table id="user_groups" class="table table-hover">
+ {% if member_groups|length == 0 %}
+ <h4>You currently aren't a member of any groups.</h4>
+ {% else %}
+ <table id="member_groups" class="table-hover table-striped cell-border" style="float: left;">
<thead>
<tr>
<th></th>
@@ -53,66 +77,63 @@
</tr>
</thead>
<tbody>
- {% for group in user_groups %}
+ {% for group in member_groups %}
<tr>
<td><input type="checkbox" name="read" value="{{ group.id }}"></td>
<td>{{ loop.index }}</td>
<td>{{ group.name }}</td>
- <td>{{ group.admins|length + group.users|length }}</td>
+ <td>{{ group.admins|length + group.members|length }}</td>
<td>{{ group.created_timestamp }}</td>
<td>{{ group.changed_timestamp }}</td>
</tr>
{% endfor %}
</tbody>
</table>
+ {% endif %}
+ {% endif %}
</div>
</form>
</div>
-
-
<!-- End of body -->
{% endblock %}
{% block js %}
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
-
<script type="text/javascript" charset="utf-8">
$(document).ready( function () {
- $('#admin_groups, #user_groups').dataTable( {
- "drawCallback": function( settings ) {
- $('#admin_groups tr').click(function(event) {
- if (event.target.type !== 'checkbox') {
- $(':checkbox', this).trigger('click');
- }
- });
- },
- "columns": [
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" }
- ],
- "columnDefs": [ {
- "targets": 0,
- "orderable": false
- } ],
- "order": [[1, "asc" ]],
- "sDom": "Ztr",
- "iDisplayLength": -1,
- "autoWidth": true,
- "bDeferRender": true,
- "bSortClasses": false,
- "paging": false,
- "orderClasses": true
- } );
+ {% if admin_groups|length != 0 %}
+ $('#admin_groups').dataTable({
+ 'sDom': 'tr'
+ });
+ {% endif %}
+ {% if member_groups|length != 0 %}
+ $('#member_groups').dataTable({
+ 'sDom': 'tr'
+ });
+ {% endif %}
+ submit_special = function(url) {
+ $("#groups_form").attr("action", url);
+ return $("#groups_form").submit();
+ };
+
+ $("#create_group").on("click", function() {
+ url = $(this).data("url")
+ return submit_special(url)
+ });
+
+ $("#remove_groups").on("click", function() {
+ url = $(this).data("url")
+ groups = []
+ $("input[name=group_id]:checked").each(function() {
+ groups.push($(this).val());
+ });
+ groups_string = groups.join(":")
+ $("input[name=selected_group_ids]").val(groups_string)
+ return submit_special(url)
+ });
});
</script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/admin/ind_user_manager.html b/wqflask/wqflask/templates/admin/ind_user_manager.html
index e859b442..b821e5d5 100644
--- a/wqflask/wqflask/templates/admin/ind_user_manager.html
+++ b/wqflask/wqflask/templates/admin/ind_user_manager.html
@@ -103,7 +103,7 @@
{% block js %}
- <script type="text/javascript" src="/static/packages/smart-time-ago/lib/timeago.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/timeago.min.js') }}"></script>
<script>
$('body').timeago();
</script>
diff --git a/wqflask/wqflask/templates/admin/manage_resource.html b/wqflask/wqflask/templates/admin/manage_resource.html
new file mode 100644
index 00000000..33a37594
--- /dev/null
+++ b/wqflask/wqflask/templates/admin/manage_resource.html
@@ -0,0 +1,108 @@
+{% extends "base.html" %}
+{% block title %}Resource Manager{% endblock %}
+{% block css %}
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
+{% endblock %}
+{% block content %}
+<!-- Start of body -->
+ <div class="container">
+ {{ flash_me() }}
+ <div class="page-header" style="display: inline-block;">
+ <h1>Resource Manager</h1>
+ <h3>{% if owner_name is not none %}Current Owner: {{ owner_name }}{% endif %} {% if admin_status == "owner" %}<button id="change_owner" class="btn btn-danger" data-url="/resources/change_owner" style="margin-left: 20px;">Change Owner</button>{% endif %}</h3>
+ </div>
+ <form id="manage_resource" action="/resources/manage" method="POST">
+ <input type="hidden" name="resource_id" value="{{ resource_id }}">
+ <div style="min-width: 600px; max-width: 800px;">
+ <fieldset>
+ <div class="form-horizontal" style="width: 900px; margin-bottom: 50px;">
+ <div class="form-group" style="padding-left: 20px;">
+ <label for="group_name" class="col-xs-3" style="float: left; font-size: 18px;">Resource Name:</label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ {{ resource_info.name }}
+ </div>
+ </div>
+ {% if admin_status == "owner" %}
+ <div class="form-group" style="padding-left: 20px;">
+ <label for="user_email" class="col-xs-3" style="float: left; font-size: 18px;">Open to Public:</label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ <label class="radio-inline">
+ <input type="radio" name="open_to_public" value="True" {% if default_mask != 'no-access' %}checked{% endif %}>
+ Yes
+ </label>
+ <label class="radio-inline">
+ <input type="radio" name="open_to_public" value="False" {% if default_mask == 'no-access' %}checked{% endif %}>
+ No
+ </label>
+ </div>
+ </div>
+ <div class="form-group" style="padding-left: 20px;">
+ <label class="col-xs-3" style="float: left; font-size: 18px;"></label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ <button id="save_changes" class="btn btn-primary" data-url="/resources/change_default_privileges">Save Changes</button>
+ </div>
+ </div>
+ {% endif %}
+ </div>
+ </fieldset>
+ </div>
+ {% if admin_status == "owner" or admin_status == "edit-admins" or admin_status == "edit-access" %}
+ <div style="min-width: 600px; max-width: 800px;">
+ <hr>
+ <button id="add_group_to_resource" class="btn btn-primary" style="margin-bottom: 30px;" data-url="/resources/add_group">Add Group</button>
+ <br>
+ {% if group_masks|length > 0 %}
+ <h2>Current Group Permissions</h2>
+ <hr>
+ <table id="groups_table" class="table-hover table-striped cell-border">
+ <thead>
+ <tr>
+ <th>Name</th>
+ <th>Data</th>
+ <th>Metadata</th>
+ <th>Admin</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for key, value in group_masks.items() %}
+ <tr>
+ <td>{{ value.name }}</td>
+ <td>{{ value.data }}</td>
+ <td>{{ value.metadata }}</td>
+ <td>{{ value.admin }}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ {% else %}
+ <h3>No groups are currently added to this resource.</h3>
+ {% endif %}
+ </div>
+ {% endif %}
+ </form>
+ </div>
+
+
+
+<!-- End of body -->
+
+{% endblock %}
+
+{% block js %}
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
+
+ <script type="text/javascript" charset="utf-8">
+ $('#add_group_to_resource, #save_changes, #change_owner').click(function(){
+ url = $(this).data("url");
+ $('#manage_resource').attr("action", url)
+ $('#manage_resource').submit()
+ })
+
+ {% if group_masks|length > 0 %}
+ $('#groups_table').dataTable({
+ 'sDom': 'tr',
+ });
+ {% endif %}
+ </script>
+{% endblock %}
diff --git a/wqflask/wqflask/templates/admin/manage_user.html b/wqflask/wqflask/templates/admin/manage_user.html
new file mode 100644
index 00000000..3ef90b90
--- /dev/null
+++ b/wqflask/wqflask/templates/admin/manage_user.html
@@ -0,0 +1,79 @@
+{% extends "base.html" %}
+{% block title %}View and Edit Group{% endblock %}
+{% block css %}
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css') }}" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
+{% endblock %}
+{% block content %}
+<!-- Start of body -->
+ <div class="container">
+ {% if 'full_name' in user_details %}
+ <div class="page-header">
+ <h1>User details for: {{ user_details.full_name }}</h1>
+ </div>
+ {% endif %}
+ <form id="user_form" action="/user/manage" method="POST">
+ <div class="row">
+ <div id="user_info_div" class="col-xs-8" style="margin-right: 30px; min-width: 800px; max-width: 1000px;">
+ <div class="form-horizontal">
+ <div class="form-group">
+ <label for="email_address" style="text-align: left;" class="col-xs-2">Email Address:</label>
+ <div style="margin-left: 20px; text-align: left;" class="col-xs-2 controls">
+ <span id="email_address">{% if 'email_address' in user_details %}{{ user_details.email_address }}{% else %}N/A{% endif %}</span>
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="full_name" style="text-align: left;" class="col-xs-2">User Name:</label>
+ <div style="margin-left: 20px; text-align: left;" class="col-xs-2 controls">
+ <span id="full_name" class="old_user_attribute">{% if 'full_name' in user_details %}{{ user_details.full_name }}{% else %}N/A{% endif %}</span>
+ <input type="text" name="new_full_name" style="display: none; width: 500px;" class="form-control new_user_attribute" placeholder="{% if 'full_name' in user_details %}{{ user_details.full_name }}{% else %}N/A{% endif %}">
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="organization" style="text-align: left;" class="col-xs-2">Organization:</label>
+ <div style="margin-left: 20px; text-align: left;" class="col-xs-2 controls">
+ <span id="organization" class="old_user_attribute">{% if 'organization' in user_details %}{{ user_details.organization }}{% else %}N/A{% endif %}</span>
+ <input type="text" name="new_organization" style="display: none; width: 500px;" class="form-control new_user_attribute" placeholder="{% if 'organization' in user_details %}{{ user_details.organization }}{% else %}N/A{% endif %}">
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="change_user_details" style="text-align: left;" class="col-xs-2"></label>
+ <div style="margin-left: 20px; text-align: left;" class="col-xs-2 controls">
+ <input type="button" id="change_user_details" value="Change Details">
+ <input type="button" id="save_changes" value="Save Changes" style="display: none;">
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </form>
+ </div>
+
+<!-- End of body -->
+
+{% endblock %}
+
+{% block js %}
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
+
+ <script type="text/javascript" charset="utf-8">
+ $(document).ready( function () {
+ $('#change_user_details').click(function(){
+ $('.new_user_attribute').css("display", "inline-block");
+ $('.old_user_attribute').css("display", "none");
+ $('#change_user_details').css("display", "none");
+ $('#save_changes').css("display", "inline-block");
+ });
+
+ $('#save_changes').click(function(){
+ $('.new_user_attribute').each(function(){
+ if ($(this).val() == ""){
+ $(this).val($(this).attr("placeholder"))
+ }
+ });
+ $('#user_form').submit();
+ });
+ });
+ </script>
+{% endblock %}
diff --git a/wqflask/wqflask/templates/admin/search_for_groups.html b/wqflask/wqflask/templates/admin/search_for_groups.html
new file mode 100644
index 00000000..0e1ec720
--- /dev/null
+++ b/wqflask/wqflask/templates/admin/search_for_groups.html
@@ -0,0 +1,134 @@
+{% extends "base.html" %}
+{% block title %}Resource Manager{% endblock %}
+{% block css %}
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
+{% endblock %}
+{% block content %}
+<!-- Start of body -->
+ <div class="container">
+ <div class="page-header">
+ <h1>Find Groups</h1>
+ </div>
+ <form id="add_group" action="/resources/add_group" method="POST">
+ <input type="hidden" name="resource_id" value="{{ resource_id }}">
+ <div style="min-width: 600px; max-width: 800px;">
+ <fieldset>
+ <div class="form-horizontal" style="width: 900px;">
+ <div style="margin-bottom: 30px;">
+ <h2>Search by:</h2>
+ </div>
+ <div class="form-group" style="padding-left: 20px;">
+ <label for="group_name" class="col-xs-3" style="float: left; font-size: 18px;">Group ID:</label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ <input name="group_id" type="text" value="">
+ </div>
+ </div>
+ <div class="form-group" style="padding-left: 20px;">
+ <label for="group_name" class="col-xs-3" style="float: left; font-size: 18px;">Group Name:</label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ <input name="group_name" type="text" value="">
+ </div>
+ </div>
+ <div class="form-group" style="padding-left: 20px;">
+ <label for="user_name" class="col-xs-3" style="float: left; font-size: 18px;">User Name:</label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ <input name="user_name" type="text" value="">
+ </div>
+ </div>
+ <div class="form-group" style="padding-left: 20px;">
+ <label for="user_email" class="col-xs-3" style="float: left; font-size: 18px;">User E-mail:</label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ <input name="user_email" type="text" value="">
+ </div>
+ </div>
+ <div class="form-group" style="padding-left: 20px;">
+ <label class="col-xs-3" style="float: left; font-size: 18px;"></label>
+ <div class="controls input-append col-xs-9" style="display: flex; padding-left: 20px; float: left;">
+ <button type="button" id="find_groups" class="btn btn-primary">Search</button>
+ <button style="margin-left: 20px; display: none;" type="submit" id="submit_group" class="btn btn-success">Add Privileges for Selected Group</button>
+ </div>
+ </div>
+ </div>
+ </fieldset>
+ <hr>
+ <div id="group_results">
+ </div>
+ </div>
+ </form>
+ </div>
+
+<!-- End of body -->
+
+{% endblock %}
+
+{% block js %}
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/group_manager.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
+
+ <script type="text/javascript" charset="utf-8">
+
+ $('#find_groups').click(function() {
+ $.ajax({
+ method: "POST",
+ url: "/search_for_groups",
+ data: {
+ group_id: $('input[name=group_id]').val(),
+ group_name: $('input[name=group_name]').val(),
+ user_name: $('input[name=user_name]').val(),
+ user_email: $('input[name=user_email]').val()
+ },
+ success: populate_groups
+ });
+ })
+
+ populate_groups = function(json_group_list){
+ console.log(json_group_list)
+ var group_list = JSON.parse(json_group_list)
+
+ var the_html = ""
+ if (group_list.length > 0){
+ the_html += "<table id='groups_table' style='padding-top: 10px; width: 100%;' class='table-hover table-striped cell-border'>";
+ the_html += "<thead><tr><th></th><th>Index</th><th>Name</th><th># Admins</th><th># Members</th></tr></thead>";
+ the_html += "<tbody>";
+ for (_i = 0, _len = group_list.length; _i < _len; _i++) {
+ this_group = group_list[_i]
+ the_html += "<tr>";
+ the_html += "<td align='center' class='select_group'><input type='radio' name='selected_group' value='" + this_group.id + "'></td>";
+ the_html += "<td>" + (_i + 1).toString() + "</td>"
+ if ("name" in this_group) {
+ the_html += "<td>" + this_group.name + "</td>";
+ } else {
+ the_html += "<td>N/A</td>"
+ }
+ if ("admins" in this_group) {
+ the_html += "<td>" + this_group.admins.length + "</td>";
+ } else {
+ the_html += "<td>0</td>"
+ }
+ if ("members" in this_group) {
+ the_html += "<td>" + this_group.members.length + "</td>";
+ } else {
+ the_html += "<td>0</td>"
+ }
+ the_html += "</tr>"
+ }
+ the_html += "</tbody>";
+ the_html += "</table>";
+ } else {
+ the_html = "<span>No groups were found matching the entered criteria.</span>"
+ }
+
+ $('#group_results').html(the_html)
+ if (group_list.length > 0){
+ $('#groups_table').dataTable({
+ 'order': [[1, "asc" ]],
+ 'sDom': 'tr'
+ });
+ $('input[name=selected_group]:eq(0)').prop("checked", true)
+ $('#submit_group').css("display", "inline-block")
+ }
+ }
+ </script>
+{% endblock %}
diff --git a/wqflask/wqflask/templates/admin/set_group_privileges.html b/wqflask/wqflask/templates/admin/set_group_privileges.html
new file mode 100644
index 00000000..04842453
--- /dev/null
+++ b/wqflask/wqflask/templates/admin/set_group_privileges.html
@@ -0,0 +1,102 @@
+{% extends "base.html" %}
+{% block title %}Set Group Privileges{% endblock %}
+{% block css %}
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css') }}" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
+{% endblock %}
+{% block content %}
+<!-- Start of body -->
+ <div class="container">
+ <h1>Group Privileges</h1>
+ <br>
+ <form id="set_group_privileges" action="/resources/add_group" method="POST">
+ <input type="hidden" name="resource_id" value="{{ resource_id }}">
+ <input type="hidden" name="group_id" value="{{ group_id }}">
+ <div style="min-width: 600px; max-width: 800px;">
+ <button type="submit" class="btn btn-primary" style="margin-bottom: 10px;">Add Group</button>
+ <hr>
+ <h2>Data and Metadata Privileges</h2>
+ <table id="data_privileges_table" class="table-hover table-striped cell-border" style="float: left;">
+ <thead>
+ <tr>
+ <th></th>
+ <th>No-Access</th>
+ <th>View</th>
+ <th>Edit</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Data:</td>
+ {% if 'data' in default_privileges %}
+ <td align="center" style="padding: 0px;"><input type="radio" name="data_privilege" VALUE="no-access" {% if default_privileges.data == "no-access" %}checked{% endif %}></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="data_privilege" VALUE="view" {% if default_privileges.data == "view" %}checked{% endif %}></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="data_privilege" VALUE="edit" {% if default_privileges.data == "edit" %}checked{% endif %}></td>
+ {% else %}
+ <td align="center" style="padding: 0px;"><input type="radio" name="data_privilege" VALUE="no-access" checked></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="data_privilege" VALUE="view"></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="data_privilege" VALUE="edit"></td>
+ {% endif %}
+ </tr>
+ <tr>
+ <td>Metadata:</td>
+ {% if 'metadata' in default_privileges %}
+ <td align="center" style="padding: 0px;"><input type="radio" name="metadata_privilege" VALUE="no-access" {% if default_privileges.metadata == "no-access" %}checked{% endif %}></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="metadata_privilege" VALUE="view" {% if default_privileges.metadata == "view" %}checked{% endif %}></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="metadata_privilege" VALUE="edit" {% if default_privileges.metadata[-1] == "edit" %}checked{% endif %}></td>
+ {% else %}
+ <td align="center" style="padding: 0px;"><input type="radio" name="metadata_privilege" VALUE="no-access" checked></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="metadata_privilege" VALUE="view"></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="metadata_privilege" VALUE="edit"></td>
+ {% endif %}
+ </tr>
+ </tbody>
+ </table>
+ <hr>
+ <h2>Admin Privileges</h2>
+ <table id="admin_privileges_table" class="table-hover table-striped cell-border" style="float: left;">
+ <thead>
+ <tr>
+ <th></th>
+ <th>Not Admin</th>
+ <th>Edit Access</th>
+ <th>Edit Admins</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Admin:</td>
+ {% if 'admin' in default_privileges %}
+ <td align="center" style="padding: 0px;"><input type="radio" name="admin_privilege" VALUE="not-admin" {% if default_privileges.admin == "not-admin" %}checked{% endif %}></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="admin_privilege" VALUE="edit-access" {% if default_privileges.admin == "edit-access" %}checked{% endif %}></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="admin_privilege" VALUE="edit-admins" {% if default_privileges.admin == "edit-admins" %}checked{% endif %}></td>
+ {% else %}
+ <td align="center" style="padding: 0px;"><input type="radio" name="admin_privilege" VALUE="not-admin" checked></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="admin_privilege" VALUE="edit-access"></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="admin_privilege" VALUE="edit-admins"></td>
+ {% endif %}
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </form>
+ </div>
+
+<!-- End of body -->
+
+{% endblock %}
+
+{% block js %}
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
+ <script>
+ $('#data_privileges_table').dataTable({
+ 'sDom': 'tr',
+ 'bSort': false
+ });
+ $('#admin_privileges_table').dataTable({
+ 'sDom': 'tr',
+ 'bSort': false
+ });
+ </script>
+{% endblock %}
diff --git a/wqflask/wqflask/templates/admin/view_group.html b/wqflask/wqflask/templates/admin/view_group.html
new file mode 100644
index 00000000..26692fe8
--- /dev/null
+++ b/wqflask/wqflask/templates/admin/view_group.html
@@ -0,0 +1,247 @@
+{% extends "base.html" %}
+{% block title %}View and Edit Group{% endblock %}
+{% block css %}
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css') }}" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
+{% endblock %}
+{% block content %}
+<!-- Start of body -->
+ <div class="container">
+ <div class="page-header">
+ <h1>
+ <span id="group_name">{{ group_info.name }}</span>
+ <input type="text" name="new_group_name" style="font-size: 20px; display: none; width: 500px;" class="form-control" placeholder="{{ group_info.name }}">
+ <button class="btn btn-default" style="display: inline;" id="change_group_name">Change Group Name</button>
+ </h1>
+ {% if user_is_admin == true %}
+ <div style="display: inline;">
+ <button type="button" id="remove_users" class="btn btn-danger" data-url="/groups/remove_users">Remove Selected Users from Group</button>
+ </div>
+ {% endif %}
+ </div>
+ <form id="group_form" action="/groups/view" method="POST">
+ <input type="hidden" name="group_id" value="{{ group_info.id }}">
+ <input type="hidden" name="selected_admin_ids" value="">
+ <input type="hidden" name="selected_member_ids" value="">
+ <div class="row">
+ <div id="groups_div" class="col-xs-6" style="margin-right: 30px; min-width: 600px; max-width: 800px;">
+ <div>
+ <div style="margin-top: 20px;"><h2>Admins</h2></div>
+ <hr>
+ <table id="group_admins" class="table-hover table-striped cell-border" style="float: left;">
+ <thead>
+ <tr>
+ <th></th>
+ <th>Index</th>
+ <th>Name</th>
+ <th>Email Address</th>
+ <th>Organization</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for admin in admins %}
+ <tr>
+ <td style="text-align: center; padding: 0px 10px 2px 10px;"><input type="checkbox" name="admin_id" value="{{ admin.user_id }}"></td>
+ <td align="right">{{ loop.index }}</td>
+ <td>{% if 'full_name' in admin %}{{ admin.full_name }}{% elif 'name' in admin %}{{ admin.name }}{% else %}N/A{% endif %}</td>
+ <td>{% if 'email_address' in admin %}{{ admin.email_address }}{% else %}N/A{% endif %}</td>
+ <td>{% if 'organization' in admin %}{{ admin.organization }}{% else %}N/A{% endif %}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ {% if user_is_admin == true %}
+ <div style="margin-top: 20px;">
+ <span>E-mail of user to add to admins (multiple e-mails can be added separated by commas):</span>
+ <input type="text" size="60" name="admin_emails_to_add" placeholder="Enter E-mail(s)" value="">
+ </div>
+ <div style="margin-bottom: 30px; margin-top: 20px;">
+ <button type="button" id="add_admins" class="btn btn-primary" data-usertype="admin" data-url="/groups/add_admins">Add Admin(s)</button>
+ </div>
+ {% endif %}
+ </div>
+ <hr>
+ <div>
+ {% if members|length > 0 %}
+ <div><h2>Members</h2></div>
+ <hr>
+ <table id="group_members" class="table-hover table-striped cell-border" style="float: left;">
+ <thead>
+ <tr>
+ <th></th>
+ <th>Index</th>
+ <th>Name</th>
+ <th>Email Address</th>
+ <th>Organization</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for member in members %}
+ <tr>
+ <td style="text-align: center; padding: 0px 10px 2px 10px;"><input type="checkbox" name="member_id" value="{{ member.user_id }}"></td>
+ <td align="right">{{ loop.index }}</td>
+ <td>{% if 'full_name' in member %}{{ member.full_name }}{% elif 'name' in admin %}{{ admin.name }}{% else %}N/A{% endif %}</td>
+ <td>{% if 'email_address' in member %}{{ member.email_address }}{% else %}N/A{% endif %}</td>
+ <td>{% if 'organization' in member %}{{ member.organization }}{% else %}N/A{% endif %}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ {% if user_is_admin == true %}
+ <div style="margin-top: 20px;">
+ <span>E-mail of user to add to members (multiple e-mails can be added separated by commas):</span>
+ <input type="text" size="60" name="member_emails_to_add" placeholder="Enter E-mail(s)" value="">
+ </div>
+ <div style="margin-bottom: 30px; margin-top: 20px;">
+ <button type="button" id="add_members" class="btn btn-primary" data-usertype="member" data-url="/groups/add_members">Add Member(s)</button>
+ </div>
+ {% endif %}
+ {% else %}
+ There are currently no members in this group.
+ {% if user_is_admin == true %}
+ <div style="margin-top: 20px;">
+ <span>E-mail of user to add to members (multiple e-mails can be added separated by commas):</span>
+ <input type="text" size="60" name="member_emails_to_add" placeholder="Enter E-mail(s)" value="">
+ </div>
+ <div style="margin-bottom: 30px; margin-top: 20px;">
+ <button type="button" id="add_members" class="btn btn-primary" data-usertype="member" data-url="/groups/add_members">Add Member(s)</button>
+ </div>
+ {% endif %}
+ {% endif %}
+ </div>
+ </div>
+ <div id="resources_div" class="col-xs-6" style="border-left: 1px solid #eee; margin-right: 30px; min-width: 600px; max-width: 800px;">
+ <div style="margin-top: 20px;"><h2>Resources</h2></div>
+ <hr>
+ {% if resources|length > 0 %}
+ <table id="resources" class="table-hover table-striped cell-border" style="float: left;">
+ <thead>
+ <tr>
+ <th>Index</th>
+ <th>Name</th>
+ <th>Data</th>
+ <th>Metadata</th>
+ <th>Admin</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for resource in resources %}
+ <tr>
+ <td align="right">{{ loop.index }}</td>
+ <td>{% if 'name' in resource %}<a href="/resources/manage?resource_id={{ resource.id }}">{{ resource.name }}</a>{% else %}N/A{% endif %}</td>
+ <td>{% if 'data' in resource %}{{ resource.data }}{% else %}N/A{% endif %}</td>
+ <td>{% if 'metadata' in resource %}{{ resource.metadata }}{% else %}N/A{% endif %}</td>
+ <td>{% if 'admin' in resource %}{{ resource.admin }}{% else %}N/A{% endif %}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ {% else %}
+ There are currently no resources associated with this group.
+ {% endif %}
+ </div>
+ </div>
+ </form>
+ </div>
+
+<!-- End of body -->
+
+{% endblock %}
+
+{% block js %}
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
+
+ <script type="text/javascript" charset="utf-8">
+ $(document).ready( function () {
+ $('#group_admins').dataTable({
+ 'order': [[1, "asc" ]],
+ 'columns': [
+ { "type": "natural", "width": "25px"},
+ { "type": "natural", "width": "30px" },
+ { "type": "natural", "width": "150px" },
+ { "type": "natural" },
+ { "type": "natural" }
+ ],
+ 'sDom': 'tr'
+ });
+ {% if members|length > 0 %}
+ $('#group_members').dataTable({
+ 'order': [[1, "asc" ]],
+ 'columns': [
+ { "type": "natural", "width": "25px"},
+ { "type": "natural", "width": "30px" },
+ { "type": "natural", "width": "150px" },
+ { "type": "natural" },
+ { "type": "natural" }
+ ],
+ 'sDom': 'tr'
+ });
+ {% endif %}
+ {% if resources|length > 0 %}
+ $('#resources').dataTable({
+ 'order': [[0, "asc" ]],
+ 'columns': [
+ { "type": "natural", "width": "30px" },
+ { "type": "natural", "width": "150px" },
+ { "type": "natural" },
+ { "type": "natural" },
+ { "type": "natural" }
+ ],
+ 'sDom': 'tr'
+ });
+ {% endif %}
+
+ $('#resources_div').css('height', $('#groups_div').css('height'))
+
+ submit_special = function(url) {
+ $("#group_form").attr("action", url);
+ return $("#group_form").submit();
+ };
+
+ $("#remove_users").on("click", function() {
+ url = $(this).data("url");
+ admins = [];
+ $("input[name=admin_id]:checked").each(function() {
+ admins.push($(this).val());
+ });
+ admins_string = admins.join(":")
+ $("input[name=selected_admin_ids]").val(admins_string)
+
+ members = [];
+ $("input[name=member_id]:checked").each(function() {
+ members.push($(this).val());
+ });
+ members_string = members.join(":")
+ $("input[name=selected_member_ids]").val(members_string)
+ return submit_special(url)
+ });
+
+ $("#add_admins, #add_members").on("click", function() {
+ url = $(this).data("url");
+ return submit_special(url)
+ });
+
+ $("#change_group_name").on("click", function() {
+ if ($('input[name=new_group_name]').css('display') == 'none') {
+ $('input[name=new_group_name]').css('display', 'inline');
+ $('#group_name').css('display', 'none');
+ } else {
+ new_name = $('input[name=new_group_name]').val()
+ $.ajax({
+ type: "POST",
+ url: "/groups/change_name",
+ data: {
+ group_id: $('input[name=group_id]').val(),
+ new_name: new_name
+ }
+ });
+ $('input[name=new_group_name]').css('display', 'none');
+ $('input[name=group_name]').val(new_name);
+ $('#group_name').text(new_name)
+ $('#group_name').css('display', 'inline');
+ }
+ });
+ });
+ </script>
+{% endblock %}
diff --git a/wqflask/wqflask/templates/base.html b/wqflask/wqflask/templates/base.html
index 07c1b48e..ccb2ac5a 100644
--- a/wqflask/wqflask/templates/base.html
+++ b/wqflask/wqflask/templates/base.html
@@ -4,27 +4,43 @@
<head>
<meta charset="utf-8">
- <title>{% block title %}{% endblock %}</title>
+
+ <title>{% block title %}{% endblock %} GeneNetwork 2</title>
+
<meta name="description" content="">
<meta name="author" content="">
+ <script type="text/javascript">
+ var pageLoadStart = Date.now();
+ </script>
<link rel="icon" type="image/png" sizes="64x64" href="/static/new/images/CITGLogo.png">
<link rel="apple-touch-icon" type="image/png" sizes="64x64" href="/static/new/images/CITGLogo.png">
- <link REL="stylesheet" TYPE="text/css" href="/static/packages/bootstrap/css/bootstrap.css" />
- <link REL="stylesheet" TYPE="text/css" href="/static/packages/bootstrap/css/non-responsive.css" />
- <link REL="stylesheet" TYPE="text/css" href="/static/packages/bootstrap/css/docs.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/colorbox/example4/colorbox.css" />
+ <link REL="stylesheet" TYPE="text/css" href="{{ url_for('css', filename='bootstrap/css/bootstrap.css') }}" />
+ <link REL="stylesheet" TYPE="text/css" href="/static/new/css/bootstrap-custom.css" />
+ <link REL="stylesheet" TYPE="text/css" href="/static/new/css/non-responsive.css" />
+ <link REL="stylesheet" TYPE="text/css" href="/static/new/css/docs.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/colorbox.css" />
<!--<link rel="stylesheet" type="text/css" href="/static/new/css/main.css" />-->
<link rel="stylesheet" type="text/css" href="/static/new/css/parsley.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/broken_links.css" />
+
{% block css %}
{% endblock %}
+ <style>
+ table.dataTable thead .sorting_asc {
+ background-image: url({{ url_for("js", filename="DataTables/images/sort_asc_disabled.png") }});
+ }
+ table.dataTable thead .sorting_desc {
+ background-image: url({{ url_for("js", filename="DataTables/images/sort_desc_disabled.png") }});
+ }
+ </style>
</head>
<body style="width: 100%">
<!-- Navbar ================================================== -->
- <div class="navbar navbar-inverse navbar-static-top pull-left" role="navigation" style="width: 100%; min-width: 770px; white-space: nowrap;">
+ <div class="navbar navbar-inverse navbar-static-top pull-left" role="navigation" style="width: 100%; min-width: 850px; white-space: nowrap;">
<!--<div class="navbar navbar-default" style="width: 100%; white-space: nowrap;">-->
<div class="container-fluid" style="width: 100%;">
<!-- Brand and toggle get grouped for better mobile display -->
@@ -51,13 +67,14 @@
<li class="">
<a href="/help" class="dropdow-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Help <span class="caret"></a>
<ul class="dropdown-menu">
- <li><a href="/references">References</a></li>
+ <li><a href="{{ url_for('references_blueprint.references') }}">References</a></li>
<li><a href="/tutorials">Tutorials/Primers</a></li>
- <li><a href="http://gn1.genenetwork.org/glossary.html">Glossary of Term</a></li>
+ <li><a href="{{ url_for('glossary_blueprint.glossary') }}">Glossary of Term</a></li>
<li><a href="http://gn1.genenetwork.org/faq.html">FAQ</a></li>
- <li><a href="/policies">Policies</a></li>
- <li><a href="/links">Links</a></li>
- <li><a href="/environments">Environments</a></li>
+ <li><a href="{{ url_for('policies_blueprint.policies') }}">Policies</a></li>
+ <li><a href="{{ url_for('links_blueprint.links') }}">Links</a></li>
+ <li><a href="{{ url_for('facilities_blueprint.facilities') }}">Facilities</a></li>
+ <li><a href="{{ url_for('environments_blueprint.environments') }}">Environments</a></li>
<li><a href="/news">GN1 News</a></li>
</ul>
</li>
@@ -65,11 +82,11 @@
<a href="/help" class="dropdow-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Tools <span class="caret"></a>
<ul class="dropdown-menu">
<li><a href="/snp_browser">Variant Browser</a></li>
- <li><a href="http://bnw.genenetwork.org/BNW/sourcecodes/home.php">Bayesian Network Webserver</a></li>
+ <li><a href="http://bnw.genenetwork.org/sourcecodes/home.php">Bayesian Network Webserver</a></li>
<li><a href="https://systems-genetics.org/">Systems Genetics PheWAS</a></li>
- <li><a href="http://ucscbrowser.genenetwork.org/">Genome Browser</a></li>
+ <li><span class="broken_link" href="http://ucscbrowser.genenetwork.org/">Genome Browser</span></li>
<li><a href="http://power.genenetwork.org">BXD Power Calculator</a></li>
- <li><a href="httP://datafiles.genenetwork.org">Interplanetary File System</a></li>
+ <li><a href="http://datafiles.genenetwork.org">Interplanetary File System</a></li>
</ul>
</li>
{% if g.user_session %}
@@ -94,6 +111,15 @@
<a id="login_in" href="/n/login">Sign in</a>
{% endif %}
</li>
+ {% if g.user_session.logged_in %}
+ <li class="">
+ <a href="/edit_account_settings" class="dropdow-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">User Account Settings<span class="caret"></a>
+ <ul class="dropdown-menu">
+ <li><a id="manage_user" title="User Options" href="/user/manage">User Options</a></li>
+ <li><a id="manage_groups" title="Manage Groups" href="/groups/manage">Manage Groups</a></li>
+ </ul>
+ </li>
+ {% endif %}
{% endif %}
<!--
<li style="margin-left: 20px;">
@@ -137,9 +163,10 @@
<a href="http://www.senresearch.org">Saunak Sen</a>,
<a href="mailto:zachary.a.sloan@gmail.com">Zachary Sloan</a>,
<a href="mailto:acenteno@uthsc.edu">Arthur Centeno</a>,
- and <a href="mailto:cfische7@uthsc.edu">Christian Fischer</a>.
+ <a href="mailto:cfische7@uthsc.edu">Christian Fischer</a>
+ and <a href="mailto:bonfacemunyoki@gmail.com">Bonface Munyoki</a>.
</p>
- <p>Design and code by Pjotr Prins, Zach Sloan, Arthur Centeno, Christan Fischer, Danny Arends, Sam Ockman, Lei Yan, Xiaodong Zhou, Christian Fernandez,
+ <p>Design and code by Pjotr Prins, Zach Sloan, Arthur Centeno, Christan Fischer, Bonface Munyoki, Danny Arends, Sam Ockman, Lei Yan, Xiaodong Zhou, Christian Fernandez,
Ning Liu, Rudi Alberts, Elissa Chesler, Sujoy Roy, Evan G. Williams, Alexander G. Williams, Kenneth Manly, Jintao Wang, Robert W. Williams, and
<!--<a href="http://genenetwork.org/credit.html">colleagues</a>.</p>-->
<a href="/credits">colleagues</a>.</p>
@@ -172,7 +199,7 @@
(P20-DA 21131, 2001-2012)
</li>
<li>
- NCI <a href="http://emice.nci.nih.gov/">MMHCC</a> (U01CA105417), NCRR, <a href="http://www.birncommunity.org/">BIRN</a>, (U24 RR021760)
+ NCI <a href="http://emice.nci.nih.gov/">MMHCC</a> (U01CA105417), NCRR, <span class="broken_link test" href="http://www.birncommunity.org/">BIRN</span>, (U24 RR021760)
</li>
</UL>
<!--</p>-->
@@ -180,10 +207,11 @@
<a href="http://joss.theoj.org/papers/10.21105/joss.00025"><img src="https://camo.githubusercontent.com/846b750f582ae8f1d0b4f7e8fee78bed705c88ba/687474703a2f2f6a6f73732e7468656f6a2e6f72672f7061706572732f31302e32313130352f6a6f73732e30303032352f7374617475732e737667" alt="JOSS" data-canonical-src="http://joss.theoj.org/papers/10.21105/joss.00025/status.svg" style="max-width:100%;"></a>
</p>
<p>
- Development and source code on <a href="https://github.com/genenetwork/">github</a> with <a href="https://github.com/genenetwork/genenetwork2/issues">issue tracker</a> and <a href="https://github.com/genenetwork/genenetwork2/blob/master/README.md">documentation</a>. Join the <a href="http://listserv.uthsc.edu/mailman/listinfo/genenetwork-dev">mailing list</a> and find us on <a href="https://webchat.freenode.net/">IRC</a> (#genenetwork channel).
+ Development and source code on <a href="https://github.com/genenetwork/">github</a> with <a href="https://github.com/genenetwork/genenetwork2/issues">issue tracker</a> and <a href="https://github.com/genenetwork/genenetwork2/blob/master/README.md">documentation</a>. Join the <span class="broken_link" href="http://listserv.uthsc.edu/mailman/listinfo/genenetwork-dev">mailing list</span> and find us on <a href="https://webchat.freenode.net/">IRC</a> (#genenetwork channel).
{% if version: %}
<p><small>GeneNetwork {{ version }}</small></p>
{% endif %}
+ <p> It took the server {{ g.request_time() }} seconds to process this page.</p>
</div>
<div class="col-xs-2">
@@ -213,8 +241,8 @@
<!--</div>-->
</div>
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
- <script src="/static/packages/bootstrap/js/bootstrap.min.js"></script>
+ <script src="{{ url_for('js', filename='jquery/jquery.min.js') }}" type="text/javascript"></script>
+ <script src="{{ url_for('js', filename='bootstrap/js/bootstrap.min.js') }}" type="text/javascript"></script>
<script>
//http://stackoverflow.com/questions/11521763/bootstrap-scrollspy-not-working
var $window = $(window)
@@ -225,18 +253,24 @@
}
})
</script>
- <script src="/static/new/js_external/jquery.cookie.js"></script>
- <script type="text/javascript" src="/static/new/js_external/json2.js"></script>
- <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js" type="text/javascript"></script>
+ <script src="{{ url_for('js', filename='jquery-cookie/jquery.cookie.js') }}" type="text/javascript"></script>
+ <script src="{{ url_for('js', filename='jquery-ui/jquery-ui.min.js') }}" type="text/javascript"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/colorbox/jquery.colorbox.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='colorbox/jquery.colorbox-min.js') }}"></script>
<!--<script type="text/javascript" src="/static/new/javascript/login.js"></script>-->
- <script type="text/javascript" src="/static/new/js_external/parsley.min.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/parsley.min.js') }}"></script>
+
{% block js %}
{% endblock %}
-
+ <script type="text/javascript">
+ document.addEventListener('DOMContentLoaded', function() {
+ let timeToLoad = document.createElement("p");
+ timeToLoad.innerHTML = "It took your browser " + ((Date.now() - pageLoadStart)/1000) + " second(s) to render this page";
+ document.querySelector("footer .row .col-xs-6").appendChild(timeToLoad);
+ });
+ </script>
</body>
</html>
diff --git a/wqflask/wqflask/templates/collections/add.html b/wqflask/wqflask/templates/collections/add.html
index 825dfb84..b4e5385b 100644
--- a/wqflask/wqflask/templates/collections/add.html
+++ b/wqflask/wqflask/templates/collections/add.html
@@ -5,7 +5,7 @@
or add to an existing collection.</p>
</div>
<div class="modal-body" style="margin-left: 20px;">
- <form action="/collections/new" data-validate="parsley" id="add_form">
+ <form action="/collections/new" target="_blank" data-validate="parsley" id="add_form">
{% if traits is defined %}
<input type="hidden" name="traits" value="{{ traits }}" />
{% else %}
@@ -50,4 +50,7 @@
<script>
$('#add_form').parsley();
+ $('#add_form').on('submit', function(){
+ parent.jQuery.colorbox.close();
+ });
</script>
diff --git a/wqflask/wqflask/templates/collections/list.html b/wqflask/wqflask/templates/collections/list.html
index c8705c7d..0ab54878 100644
--- a/wqflask/wqflask/templates/collections/list.html
+++ b/wqflask/wqflask/templates/collections/list.html
@@ -2,7 +2,7 @@
{% block title %}Your Collections{% endblock %}
{% block css %}
<link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
- <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.bootstrap.css" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('js', filename='DataTablesExtensions/buttonsBootstrap/css/buttons.bootstrap.css') }}" />
<link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
{% endblock %}
{% block content %}
@@ -42,6 +42,7 @@
<tbody>
{% for uc in collections %}
+ {% if uc.num_members > 0 %}
<tr class="collection_line">
<td align="center" style="padding: 0px;"><INPUT TYPE="checkbox" NAME="collection" class="checkbox trait_checkbox" VALUE="{{ uc.id }}"></td>
<td align="right">{{ loop.index }}
@@ -50,6 +51,7 @@
<td>{{ uc.changed_timestamp }}</td>
<td align="right">{{ uc.num_members }}</td>
</tr>
+ {% endif %}
{% endfor %}
</tbody>
</table>
@@ -64,19 +66,25 @@
{% endblock %}
{% block js %}
- <script type="text/javascript" src="/static/packages/smart-time-ago/lib/timeago.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/timeago.min.js') }}"></script>
<script type="text/javascript" src="/static/new/javascript/search_results.js"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.buttons.min.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jszip/jszip.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/buttons/js/dataTables.buttons.min.js') }}"></script>
<script>
$('#trait_table').dataTable( {
"drawCallback": function( settings ) {
$('#trait_table tr').click(function(event) {
- if (event.target.type !== 'checkbox') {
- $(':checkbox', this).trigger('click');
- }
+ if (event.target.type !== 'checkbox' && event.target.tagName.toLowerCase() !== 'a') {
+ var obj =$(this).find('input');
+ obj.prop('checked', !obj.is(':checked'));
+ }
+ if ($(this).hasClass("selected") && event.target.tagName.toLowerCase() !== 'a'){
+ $(this).removeClass("selected")
+ } else if (event.target.tagName.toLowerCase() !== 'a') {
+ $(this).addClass("selected")
+ }
});
},
"buttons": [ 'copy', 'csv', 'excel' ],
diff --git a/wqflask/wqflask/templates/collections/not_logged_in.html b/wqflask/wqflask/templates/collections/not_logged_in.html
index a4c8747e..49b0e07d 100644
--- a/wqflask/wqflask/templates/collections/not_logged_in.html
+++ b/wqflask/wqflask/templates/collections/not_logged_in.html
@@ -5,7 +5,7 @@
{{ header("Not logged in") }}
- <div id "collections_holder" class="container">
+ <div id="collections_holder" class="container">
<div class="page-header">
<h1>Please log in in order to use this feature.</h1>
</div>
@@ -16,7 +16,7 @@
{% endblock %}
{% block js %}
- <script type="text/javascript" src="/static/packages/smart-time-ago/lib/timeago.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/timeago.min.js') }}"></script>
<script>
$('body').timeago();
</script>
diff --git a/wqflask/wqflask/templates/collections/view.html b/wqflask/wqflask/templates/collections/view.html
index 60a1a081..8d5e3616 100644
--- a/wqflask/wqflask/templates/collections/view.html
+++ b/wqflask/wqflask/templates/collections/view.html
@@ -2,13 +2,14 @@
{% block title %}View Collection{% endblock %}
{% block css %}
<link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
- <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.dataTables.css">
+ <link rel="stylesheet" type="text/css" href="{{ url_for('js', filename='DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css') }}">
<link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/trait_list.css" />
{% endblock %}
{% block content %}
<!-- Start of body -->
- <div class="container" style="min-width: 2050px;">
+ <div class="container">
<h1>
<span id="collection_name">{{ uc.name }}</span>
<input type="text" name="new_collection_name" style="font-size: 20px; display: none; width: 500px;" class="form-control" placeholder="{{ uc.name }}">
@@ -16,9 +17,7 @@
</h1>
<h3>This collection has {{ '{}'.format(numify(trait_obs|count, "record", "records")) }}</h3>
- <!--<hr style="height: 1px; background-color: #A9A9A9;">-->
-
- <div>
+ <div class="tool-button-container">
<form id="collection_form" action="/delete" method="post">
<input type="hidden" name="uc_id" id="uc_id" value="{{ uc.id }}" />
<input type="hidden" name="collection_name" id="collection_name" value="{{ collection_name }}" />
@@ -29,64 +28,33 @@
{{ this_trait.name }}:{{ this_trait.dataset.name }}:{{ data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name)) }},
{% endfor %}" >
- <button id="corr_matrix" class="btn btn-primary submit_special" data-url="/corr_matrix" title="Correlation Matrix" >
- Correlations
- </button>
-
- <button id="network_graph" class="btn btn-primary submit_special" data-url="/network_graph" title="Network Graph" >
- Networks
- </button>
-
- <button id="send_to_webgestalt" class="btn btn-primary submit_special" data-url="/webgestalt_page" title="WebGestalt" >
- WebGestalt
- </button>
-
- <button id="send_to_geneweaver" class="btn btn-primary submit_special" data-url="/geneweaver_page" title="GeneWeaver" >
- GeneWeaver
- </button>
-
- <button id="send_to_bnw" class="btn btn-primary submit_special" data-url="/bnw_page" title="Bayesian Network" >
- BNW
- </button>
-
- <button id="wgcna_setup" class="btn btn-primary submit_special" data-url="/wgcna_setup" title="WGCNA Analysis" >
- WGCNA
- </button>
-
- <button id="ctl_setup" class="btn btn-primary submit_special" data-url="/ctl_setup" title="CTL Analysis" >
- CTL Maps
- </button>
-
- <button id="heatmap" class="btn btn-primary submit_special" data-url="/heatmap" title="Heatmap" >
- MultiMap
- </button>
-
- <button id="comp_bar_chart" class="btn btn-primary submit_special" data-url="/comparison_bar_chart" title="Comparison Bar Chart" >
- Comparison Bar Chart
- </button>
+ {% include 'tool_buttons.html' %}
</form>
</div>
<div>
<br />
- <form id="export_form" method="POST" action="/export_traits_csv">
- <button class="btn btn-default" id="select_all" type="button"><span class="glyphicon glyphicon-ok"></span> Select All</button>
- <button class="btn" id="add" disabled="disabled" type="button"><i class="icon-plus-sign"></i> Copy</button>
- <input type="hidden" name="database_name" id="database_name" value="None">
- <input type="hidden" name="export_data" id="export_data" value="">
- <input type="hidden" name="file_name" id="file_name" value="collection_table">
- <button class="btn btn-default" id="export_traits">Download CSV</button>
- <input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline; padding-bottom: 9px;" placeholder="Search Table For ...">
- <input type="text" id="select_top" class="form-control" style="width: 200px; display: inline; padding-bottom: 9px;" placeholder="Select Top ...">
- <button class="btn btn-default" id="deselect_all" type="button"><span class="glyphicon glyphicon-remove"></span> Deselect</button>
- <button class="btn btn-danger" id="remove" disabled="disabled" type="button"><i class="icon-minus-sign"></i> Delete Rows</button>
- <button id="delete" class="btn btn-danger submit_special" data-url="/collections/delete" title="Delete this collection" > Delete Collection</button>
- </form>
+ <div class="collection-table-options">
+ <form id="export_form" method="POST" action="/export_traits_csv">
+ <button class="btn btn-default" id="select_all" type="button"><span class="glyphicon glyphicon-ok"></span> Select All</button>
+ <button class="btn btn-default" id="invert" type="button"><span class="glyphicon glyphicon-ok"></span> Invert</button>
+ <button class="btn btn-success" id="add" type="button" disabled><i class="icon-plus-sign"></i> Copy</button>
+ <input type="hidden" name="database_name" id="database_name" value="None">
+ <input type="hidden" name="export_data" id="export_data" value="">
+ <input type="hidden" name="file_name" id="file_name" value="collection_table">
+ <button class="btn btn-default" id="export_traits">Download</button>
+ <input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline; padding-bottom: 9px;" placeholder="Search Table For ...">
+ <input type="text" id="select_top" class="form-control" style="width: 200px; display: inline; padding-bottom: 9px;" placeholder="Select Top ...">
+ <button class="btn btn-default" id="deselect_all" type="button"><span class="glyphicon glyphicon-remove"></span> Deselect</button>
+ <button id="remove" class="btn btn-danger" data-url="/collections/remove" type="button" disabled><i class="icon-minus-sign"></i> Delete Rows</button>
+ <button id="delete" class="btn btn-danger submit_special" data-url="/collections/delete" title="Delete this collection" > Delete Collection</button>
+ </form>
+ </div>
<div style="margin-top: 10px; margin-bottom: 5px;">
<b>Show/Hide Columns:</b>
</div>
- <div>
+ <div style="min-width: 1500px;">
<table class="table-hover table-striped cell-border" id='trait_table' style="float: left;">
<thead>
<tr>
@@ -98,19 +66,16 @@
<th data-export="Description">Description</th>
<th data-export="Location">Location</th>
<th data-export="Mean">Mean</th>
- <th data-export="Max LRS">Max LRS <a href="http://genenetwork.org//glossary.html#L" target="_blank"><sup>?</sup></a></th>
- <th data-export="Max LRS Location">Max LRS Location</th>
- <th data-export="Add. Eff.">Additive Effect <a href="http://genenetwork.org//glossary.html#A" target="_blank"><sup>?</sup></a></th>
+ <th data-export="Max LRS">High P <a href="{{ url_for('glossary_blueprint.glossary') }}#L" target="_blank"><sup style="font-size: small; color: #FF0000;"> ?</sup></a></th>
+ <th data-export="Peak Location">Peak Location</th>
+ <th data-export="Add. Eff.">Effect Size <a href="{{ url_for('glossary_blueprint.glossary') }}#A" target="_blank"><sup style="font-size: small; color: #FF0000;"> ?</sup></a></th>
</tr>
</thead>
<tbody>
{% for this_trait in trait_obs %}
<TR id="trait:{{ this_trait.name }}:{{ this_trait.dataset.name }}">
- <TD align="center" style="padding: 0px;">
- <INPUT TYPE="checkbox" NAME="searchResult" class="checkbox trait_checkbox"
- VALUE="{{ data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name)) }}">
- </TD>
+ <TD align="center" style="padding: 0px;"><INPUT TYPE="checkbox" NAME="searchResult" class="checkbox trait_checkbox" VALUE="{{ data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name)) }}"></TD>
<TD data-export="{{ loop.index }}" align="right">{{ loop.index }}</TD>
<TD title="{{ this_trait.dataset.fullname }}" data-export="{{ this_trait.dataset.fullname }}">{{ this_trait.dataset.fullname }}</TD>
<TD data-export="{{ this_trait.name }}">
@@ -143,7 +108,7 @@
<TD data-export="{{ this_trait.LRS_score_repr }}" align="right">N/A</TD>
{% endif %}
<TD data-export="{{ this_trait.LRS_location_repr }}">{{ this_trait.LRS_location_repr }}</TD>
- {% if this_trait.additive|float > 0 %}
+ {% if this_trait.additive|float != 0 %}
<TD data-export="{{ this_trait.additive }}" align="right">{{ '%0.3f' % this_trait.additive|float }}</TD>
{% else %}
<TD data-export="{{ this_trait.additive }}" align="right">N/A</TD>
@@ -163,45 +128,51 @@
{% endblock %}
{% block js %}
- <script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/md5.min.js"></script>
- <script type="text/javascript" src="/static/new/javascript/search_results.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jszip/jszip.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/md5.min.js') }}"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colResize.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colReorder.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.buttons.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/buttons.colVis.min.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/colResize/dataTables.colResize.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/colReorder/js/dataTables.colReorder.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/buttons/js/dataTables.buttons.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/buttons/js/buttons.colVis.min.js') }}"></script>
+ <script type="text/javascript" src="/static/new/javascript/search_results.js"></script>
<script language="javascript" type="text/javascript">
$(document).ready( function () {
-
- $('#trait_table tr').click(function(event) {
- if (event.target.type !== 'checkbox') {
- $(':checkbox', this).trigger('click');
- }
- });
-
- console.time("Creating table");
$('#trait_table').dataTable( {
+ 'drawCallback': function( settings ) {
+ $('#trait_table tr').off().on("click", function(event) {
+ if (event.target.type !== 'checkbox' && event.target.tagName.toLowerCase() !== 'a') {
+ var obj =$(this).find('input');
+ obj.prop('checked', !obj.is(':checked'));
+ }
+ if ($(this).hasClass("selected") && event.target.tagName.toLowerCase() !== 'a'){
+ $(this).removeClass("selected")
+ } else if (event.target.tagName.toLowerCase() !== 'a') {
+ $(this).addClass("selected")
+ }
+ change_buttons()
+ });
+ },
"columns": [
- { "type": "natural", "width": 10 },
+ {
+ "orderDataType": "dom-checkbox",
+ "orderSequence": [ "desc", "asc"],
+ "width": 10
+ },
{ "type": "natural", "width": 50 },
{ "type": "natural" },
- { "type": "natural", "width": 120 },
+ { 'type': "natural-minus-na", "width": 120 },
{ "type": "natural" },
{ "type": "natural" },
- { "type": "natural", "width": 130 },
- { "type": "natural", "width": 35 },
- { "type": "natural", "width": 35 },
- { "type": "natural", "width": 130 },
- { "type": "natural" }
+ { "type": "natural", "width": 125 },
+ { "type": "natural", "width": 60 },
+ { "type": "natural", "width": 60 },
+ { "type": "natural", "width": 125 },
+ { "type": "natural", "width": 85 }
],
- "columnDefs": [ {
- "targets": 0,
- "orderable": false
- } ],
"order": [[1, "asc" ]],
buttons: [
{
@@ -218,7 +189,7 @@
"paging": false,
"orderClasses": true
} );
- console.timeEnd("Creating table");
+
submit_special = function(url) {
$("#collection_form").attr("action", url);
@@ -230,6 +201,16 @@
return submit_special(url)
});
+ $("#remove").on("click", function() {
+ url = $(this).data("url")
+ traits = $("#trait_table input:checked").map(function() {
+ return $(this).val();
+ }).get();
+ $("#trait_list").val(traits)
+
+ return submit_special(url)
+ });
+
$("#change_collection_name").on("click", function() {
if ($('input[name=new_collection_name]').css('display') == 'none') {
$('input[name=new_collection_name]').css('display', 'inline');
diff --git a/wqflask/wqflask/templates/comparison_bar_chart.html b/wqflask/wqflask/templates/comparison_bar_chart.html
index dc74ddb2..d77e0515 100644
--- a/wqflask/wqflask/templates/comparison_bar_chart.html
+++ b/wqflask/wqflask/templates/comparison_bar_chart.html
@@ -1,7 +1,7 @@
{% extends "base.html" %}
{% block title %}Comparison Bar Chart{% endblock %}
{% block css %}
- <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='d3-tip/d3-tip.css') }}" />
<link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />
{% endblock %}
{% block content %} <!-- Start of body -->
@@ -28,11 +28,11 @@
js_data = {{ js_data | safe }}
</script>
- <script language="javascript" type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='d3js/d3.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='d3-tip/d3-tip.js') }}"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
- <script type="text/javascript" src="/static/new/js_external/plotly-latest.min.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='plotly/plotly.min.js') }}"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/comparison_bar_chart.js"></script>
{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/templates/corr_scatterplot.html b/wqflask/wqflask/templates/corr_scatterplot.html
index 5877e367..f44350ab 100644
--- a/wqflask/wqflask/templates/corr_scatterplot.html
+++ b/wqflask/wqflask/templates/corr_scatterplot.html
@@ -3,8 +3,8 @@
{% block css %}
<link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
<link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />
- <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />
- <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/nvd3/1.8.5/nv.d3.min.css">
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='d3-tip/d3-tip.css') }}" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='nvd3/nv.d3.min.css') }}">
<link rel="stylesheet" type="text/css" href="/static/new/css/corr_scatter_plot.css" />
{% endblock %}
@@ -81,9 +81,9 @@
<div id="cofactor_color_selector" style="margin-bottom: 10px; display:none;">
<hr>
<b>Cofactor Color Range:</b>
- <input class="chartupdatedata" name="color2" type="hidden" id="cocolorfrom" value="#D9D9D9">
+ <input class="chartupdatedata" name="color2" type="hidden" id="cocolorfrom" value="#0000FF">
<button class="chartupdatedata jscolor {valueElement: 'cocolorfrom'}">Low</button>
- <input class="chartupdatedata" name="color1" type="hidden" id="cocolorto" value="#000000">
+ <input class="chartupdatedata" name="color1" type="hidden" id="cocolorto" value="#FF0000">
<button class="chartupdatedata jscolor {valueElement: 'cocolorto'}">High</button>
<hr>
</div>
@@ -118,58 +118,22 @@
{% endif %}
<ul class="nav nav-tabs">
- <li class="active">
+ <li {% if method == 'pearson' %}class="active"{% endif %}>
<a href="#tp1" data-toggle="tab">Pearson</a>
</li>
- <li>
+ <li {% if method == 'spearman' %}class="active"{% endif %}>
<a href="#tp2" data-toggle="tab">Spearman Rank</a>
</li>
</ul>
<div class="tab-content" style="min-width: 800px;">
- <div class="tab-pane active" id="tp1">
+ <div class="tab-pane {% if method == 'pearson' %}active{% endif %}" id="tp1">
<br>
<div id="scatterplot2"></div>
<br>
- <div class="row" style="min-width: 700px; overflow: hidden;">
- <div style="float: left;">
- <table class="table table-hover table-striped table-bordered" style="width: 80%; margin-left: 60px; text-align: right;">
- <thead>
- <tr><th style="text-align: right;">Statistic</th><th style="text-align: right;">Value</th></tr>
- </thead>
- <tbody>
- <tr>
- <td>Number</td>
- <td>{{jsdata.num_overlap}}</td>
- </tr>
- <tr>
- <td>Slope</td>
- <td>{{ jsdata.slope_string }}</td>
- </tr>
- <tr>
- <td>Intercept</td>
- <td>{{'%0.3f' % jsdata.intercept}}</td>
- </tr>
- <tr>
- <td>r value</td>
- <td>{{'%0.3f' % jsdata.r_value}}</td>
- </tr>
- <tr>
- <td>P value</td>
- <td>{% if jsdata.p_value < 0.001 %}{{'%0.3e' % jsdata.p_value}}{% else %}{{'%0.3f' % jsdata.p_value}}{% endif %}</td>
- </tr>
- <tr>
- <td style="text-align: left;" colspan="2">
- Regression Line
- <br>
- y = {{ jsdata.slope_string }} * x {% if jsdata.intercept < 0 %}- {{'%0.3f' % (jsdata.intercept * -1)}}{% else %}+ {{'%0.3f' % jsdata.intercept}}{% endif %}
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- <div style="margin-left: 50px; min-width: 300px; float: left;">
+ <div style="min-width: 700px; overflow: hidden;">
+ <div style="margin-left: 50px; min-width: 300px;">
{% if trait_1.dataset.type == "ProbeSet" %}
<div>
X axis:
@@ -240,15 +204,7 @@
</div>
{% endif %}
</div>
- </div>
- </div>
-
- <div class="tab-pane" id="tp2">
- <br>
- <div id="srscatterplot2"></div>
- <br>
- <div class="row" style="min-width: 700px; overflow: hidden;">
- <div style="float: left;">
+ <div style="float: left; margin-top:30px;">
<table class="table table-hover table-striped table-bordered" style="width: 80%; margin-left: 60px; text-align: right;">
<thead>
<tr><th style="text-align: right;">Statistic</th><th style="text-align: right;">Value</th></tr>
@@ -260,31 +216,39 @@
</tr>
<tr>
<td>Slope</td>
- <td>{{ jsdata.srslope_string }}</td>
+ <td>{{ jsdata.slope_string }}</td>
</tr>
<tr>
<td>Intercept</td>
- <td>{{'%0.3f' % jsdata.srintercept}}</td>
+ <td>{{'%0.3f' % jsdata.intercept}}</td>
</tr>
<tr>
<td>r value</td>
- <td>{{'%0.3f' % jsdata.srr_value}}</td>
+ <td>{{'%0.3f' % jsdata.r_value}}</td>
</tr>
- <tr>
+ <tr>
<td>P value</td>
- <td>{% if jsdata.srp_value < 0.001 %}{{'%0.3e' % jsdata.srp_value}}{% else %}{{'%0.3f' % jsdata.srp_value}}{% endif %}</td>
+ <td>{% if jsdata.p_value < 0.001 %}{{'%0.3e' % jsdata.p_value}}{% else %}{{'%0.3f' % jsdata.p_value}}{% endif %}</td>
</tr>
<tr>
<td style="text-align: left;" colspan="2">
Regression Line
<br>
- y = {{ jsdata.srslope_string }} * x {% if jsdata.srintercept < 0 %}- {{'%0.3f' % (jsdata.srintercept * -1)}}{% else %}+ {{'%0.3f' % jsdata.srintercept}}{% endif %}
+ y = {{ jsdata.slope_string }} * x {% if jsdata.intercept < 0 %}- {{'%0.3f' % (jsdata.intercept * -1)}}{% else %}+ {{'%0.3f' % jsdata.intercept}}{% endif %}
</td>
</tr>
</tbody>
</table>
+ </div>
</div>
- <div style="margin-left: 50px; min-width: 300px; float: left;">
+ </div>
+
+ <div class="tab-pane {% if method == 'spearman' %}active{% endif %}" id="tp2">
+ <br>
+ <div id="srscatterplot2"></div>
+ <br>
+ <div class="row" style="min-width: 700px; overflow: hidden;">
+ <div style="margin-left: 50px; min-width: 300px;">
{% if trait_1.dataset.type == "ProbeSet" %}
<div>
X axis:
@@ -335,6 +299,42 @@
</div>
{% endif %}
</div>
+ <div style="float: left; margin-top: 30px;">
+ <table class="table table-hover table-striped table-bordered" style="width: 80%; margin-left: 60px; text-align: right;">
+ <thead>
+ <tr><th style="text-align: right;">Statistic</th><th style="text-align: right;">Value</th></tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Number</td>
+ <td>{{jsdata.num_overlap}}</td>
+ </tr>
+ <tr>
+ <td>Slope</td>
+ <td>{{ jsdata.srslope_string }}</td>
+ </tr>
+ <tr>
+ <td>Intercept</td>
+ <td>{{'%0.3f' % jsdata.srintercept}}</td>
+ </tr>
+ <tr>
+ <td>r value</td>
+ <td>{{'%0.3f' % jsdata.srr_value}}</td>
+ </tr>
+ <tr>
+ <td>P value</td>
+ <td>{% if jsdata.srp_value < 0.001 %}{{'%0.3e' % jsdata.srp_value}}{% else %}{{'%0.3f' % jsdata.srp_value}}{% endif %}</td>
+ </tr>
+ <tr>
+ <td style="text-align: left;" colspan="2">
+ Regression Line
+ <br>
+ y = {{ jsdata.srslope_string }} * x {% if jsdata.srintercept < 0 %}- {{'%0.3f' % (jsdata.srintercept * -1)}}{% else %}+ {{'%0.3f' % jsdata.srintercept}}{% endif %}
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
</div>
</div>
@@ -346,14 +346,14 @@
<script>
js_data = {{ js_data | safe }};
</script>
- <script language="javascript" type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/jscolor.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='d3js/d3.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='d3-tip/d3-tip.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jscolor/jscolor.js') }}"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script>
<!--<script language="javascript" type="text/javascript" src="/static/new/javascript/get_traits_from_collection.js"></script>-->
- <script type="text/javascript" src="/static/new/js_external/plotly-latest.min.js"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='plotly/plotly.min.js') }}"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/draw_corr_scatterplot.js"></script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/correlation_matrix.html b/wqflask/wqflask/templates/correlation_matrix.html
index cb9fb815..8275f1dd 100644
--- a/wqflask/wqflask/templates/correlation_matrix.html
+++ b/wqflask/wqflask/templates/correlation_matrix.html
@@ -1,10 +1,11 @@
{% extends "base.html" %}
+{% block title %}Correlation Matrix{% endblock %}
{% block css %}
<link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
<link rel="stylesheet" type="text/css" href="/static/new/css/corr_matrix.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />
- <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='d3-tip/d3-tip.css') }}" />
{% endblock %}
{% block content %}
@@ -32,11 +33,12 @@
{% endfor %}
</tr>
{% for trait in traits %}
+ {% set outer_loop = loop.index %}
<tr>
<td align="center"><input type="checkbox" class="checkbox" style="margin-left: 3px; margin-right: 1px;"></td>
<td align="right" style="padding-right: 4px;" >
<a href="/show_trait?trait_id={{ trait.name }}&dataset={{ trait.dataset.name }}"><font style="font-size: 14px; font-style: Bold;"><b>Trait {{ loop.index }}: {{ trait.dataset.name }}&nbsp;&nbsp;{{ trait.name }}</b></font></a>
- <div class="shortName" style="display:none">{% if trait.dataset.type == "ProbeSet" %}Gene Symbol: {{ trait.symbol }}{% elif trait.dataset.type == "Publish" %}Trait Symbol: {{ trait.post_publication_abbreviation }}{% elif trait.dataset.type == "Geno" %}Genotype{% endif %} </div>
+ <div class="shortName">{% if trait.dataset.type == "ProbeSet" %}Gene Symbol: {{ trait.symbol }}{% elif trait.dataset.type == "Publish" %}Trait Symbol: {{ trait.post_publication_abbreviation }}{% elif trait.dataset.type == "Geno" %}Genotype{% endif %} </div>
<div class="verboseName" style="display: none;">
{% if trait.dataset.type == "ProbeSet" %}
<div>{{ trait.symbol }} on Chr {{ trait.chr }} @ {{ trait.mb }} Mb</div><div>{{ trait.description }}</div><div>{{ trait.probe_target_description }}</div>
@@ -51,7 +53,11 @@
{% if result[0].name == trait.name and result[0].dataset == trait.dataset %}
<td nowrap="ON" align="center" bgcolor="#cccccc" style="padding: 3px; line-height: 1.1;"><a href="/show_trait?trait_id={{ trait.name }}&dataset={{ trait.dataset.name }}"><font style="font-size: 12px; color: #3071a9; font-weight: bold;" ><em>n</em><br>{{ result[2] }}</font></a></td>
{% else %}
- <td nowrap="ON" align="middle" class="corr_cell" style="padding: 3px; line-height: 1.1;"><a href="/corr_scatter_plot?dataset_1={{ trait.dataset.name }}&dataset_2={{ result[0].dataset.name }}&trait_1={{ trait.name }}&trait_2={{ result[0].name }}"><font style="font-size: 12px; color: #3071a9; font-weight: bold;" ><span class="corr_value">{{ '%0.2f' % result[1] }}</span><br>{{ result[2] }}</font></a></td>
+ {% if result[1] == 0 %}
+ <td nowrap="ON" align="middle" bgcolor="#eeeeee" style="padding: 3px; line-height: 1.1;">N/A</td>
+ {% else %}
+ <td nowrap="ON" align="middle" class="corr_cell" style="padding: 3px; line-height: 1.1;"><a href="/corr_scatter_plot?method={% if loop.index > outer_loop %}spearman{% else %}pearson{% endif %}&dataset_1={% if trait.dataset.name == 'Temp' %}Temp_{{ trait.dataset.group.name }}{% else %}{{ trait.dataset.name }}{% endif %}&dataset_2={% if result[0].dataset.name == 'Temp' %}Temp_{{ result[0].dataset.group.name }}{% else %}{{ result[0].dataset.name }}{% endif %}&trait_1={{ trait.name }}&trait_2={{ result[0].name }}"><font style="font-size: 12px; color: #3071a9; font-weight: bold;" ><span class="corr_value">{{ '%0.2f' % result[1] }}</span><br>{{ result[2] }}</font></a></td>
+ {% endif %}
{% endif %}
{% endfor %}
</tr>
@@ -59,6 +65,12 @@
</tbody>
</table>
<br>
+<form method="post" target="_blank" action="/export_corr_matrix" id="matrix_export_form">
+ <input type="hidden" name="export_filepath" value="{{ export_filepath }}">
+ <input type="hidden" name="export_filename" value="{{ export_filename }}">
+ <button class="btn btn-default" id="export">Download <span class="glyphicon glyphicon-download"></span></button>
+</form>
+<br>
{% if pca_works == "True" %}
<h2>PCA Traits</h2>
<div style="margin-bottom: 20px; overflow:hidden;">
@@ -84,7 +96,7 @@
<br>
<button class="btn btn-default" id="select_all"><span class="glyphicon glyphicon-ok"></span> Select All</button>
<button class="btn btn-default" id="deselect_all"><span class="glyphicon glyphicon-remove"></span> Deselect All</button>
-<button class="btn btn-default" id="add" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
+<button class="btn btn-success" id="add" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
</div>
<h2>Factor Loadings Plot</h2>
<div id="loadings_plot" style="margin-top: 20px; margin-bottom: 20px; width: 980px; border-style: solid; border-width: 1px;"></div>
@@ -127,12 +139,12 @@
loadings = {{ loadings_array | safe }}
</script>
- <script type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
- <script type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/md5.min.js"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='d3js/d3.min.js') }}"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='d3-tip/d3-tip.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/md5.min.js') }}"></script>
<script type="text/javascript" src="/static/new/javascript/panelutil.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/chroma.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='chroma/chroma.min.js') }}"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/loadings_plot.js"></script>
<script type="text/javascript" src="/static/new/javascript/create_corr_matrix.js"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
@@ -168,6 +180,14 @@
"paging": false,
"orderClasses": true
} );
+
+ export_corr_matrix = function() {
+ $('#matrix_export_form').attr('action', '/export_corr_matrix');
+ return $('#matrix_export_form').submit();
+ }
+
+ $('#export').click(export_corr_matrix);
+
</script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/correlation_page.html b/wqflask/wqflask/templates/correlation_page.html
index 1c84239c..a9a3e1a0 100644
--- a/wqflask/wqflask/templates/correlation_page.html
+++ b/wqflask/wqflask/templates/correlation_page.html
@@ -1,26 +1,30 @@
{% extends "base.html" %}
+{% block title %}Correlation Results{% endblock %}
{% block css %}
<link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
- <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.bootstrap.css" />
- <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.dataTables.css">
+ <link rel="stylesheet" type="text/css" href="{{ url_for('js', filename='DataTablesExtensions/buttonsBootstrap/css/buttons.bootstrap.css') }}" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('js', filename='DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css') }}">
+ <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css">
+ <link rel="stylesheet" type="text/css" href="/static/new/css/trait_list.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
{% endblock %}
{% block content %}
- <div class="container" style="min-width: 1250px;">
+ <div class="container">
<div class="page-header">
<h1>Correlation Table</h1>
<h2>Trait: {{ this_trait.name }}
<hr style="height: 1px; background-color: #A9A9A9;">
</div>
-
- <p>Values of record {{ this_trait.name }} in the <a href="http://genenetwork.org/webqtl/main.py?FormID=sharinginfo&{% if dataset.accession_id != 'None' %}GN_AccessionId={{ dataset.accession_id }}{% else %}InfoPageName={{ dataset.name }}{% endif %}">{{ dataset.fullname }}</a>
- dataset were compared to all records in the <a href="http://genenetwork.org/webqtl/main.py?FormID=sharinginfo&{% if target_dataset.accession_id != 'None' %}GN_AccessionId={{ target_dataset.accession_id }}{% else %}InfoPageName={{ target_dataset.name }}{% endif %}">{{ target_dataset.fullname }}</a>
- dataset. The top {{ return_number }} correlations ranked by the {{ formatted_corr_type }} are displayed.
- You can resort this list by clicking the headers. Select the Record ID to open the trait data
- and analysis page.
- </p>
-
- <div>
+ <div style="max-width: 100%;">
+ <p>Values of record {{ this_trait.name }} in the <a href="http://genenetwork.org/webqtl/main.py?FormID=sharinginfo&{% if dataset.accession_id != 'None' %}GN_AccessionId={{ dataset.accession_id }}{% else %}InfoPageName={{ dataset.name }}{% endif %}">{{ dataset.fullname }}</a>
+ dataset were compared to all records in the <a href="http://genenetwork.org/webqtl/main.py?FormID=sharinginfo&{% if target_dataset.accession_id != 'None' %}GN_AccessionId={{ target_dataset.accession_id }}{% else %}InfoPageName={{ target_dataset.name }}{% endif %}">{{ target_dataset.fullname }}</a>
+ dataset. The top {{ return_number }} correlations ranked by the {{ formatted_corr_type }} are displayed.
+ You can resort this list by clicking the headers. Select the Record ID to open the trait data
+ and analysis page.
+ </p>
+ </div>
+ <div style="min-width: 950px;">
<form id="correlation_form" target="_blank" action="/corr_matrix" method="post">
<input type="hidden" name="tool_used" value="" />
<input type="hidden" name="form_url" value="" />
@@ -28,66 +32,33 @@
{% for this_trait in trait_list %}
{{ this_trait.name }}:{{ this_trait.dataset }},
{% endfor %}" >
-
- <button id="corr_matrix" class="btn btn-primary submit_special" data-url="/corr_matrix" title="Correlation Matrix" >
- Correlations
- </button>
-
- <button id="network_graph" class="btn btn-primary submit_special" data-url="/network_graph" title="Network Graph" >
- Networks
- </button>
-
- <button id="send_to_webgestalt" class="btn btn-primary submit_special" data-url="/webgestalt_page" title="WebGestalt" >
- WebGestalt
- </button>
-
- <button id="send_to_geneweaver" class="btn btn-primary submit_special" data-url="/geneweaver_page" title="GeneWeaver" >
- GeneWeaver
- </button>
-
- <button id="send_to_bnw" class="btn btn-primary submit_special" data-url="/bnw_page" title="Bayesian Network" >
- BNW
- </button>
-
- <button id="wgcna_setup" class="btn btn-primary submit_special" data-url="/wgcna_setup" title="WGCNA Analysis" >
- WGCNA
- </button>
-
- <button id="ctl_setup" class="btn btn-primary submit_special" data-url="/ctl_setup" title="CTL Analysis" >
- CTL Maps
- </button>
-
- <button id="heatmap" class="btn btn-primary submit_special" data-url="/heatmap" title="Heatmap" >
- MultiMap
- </button>
-
- <button id="comp_bar_chart" class="btn btn-primary submit_special" data-url="/comparison_bar_chart" title="Comparison Bar Chart" >
- Comparison Bar Chart
- </button>
-
+ {% include 'tool_buttons.html' %}
</form>
</div>
<br />
- <div>
+ <div style="min-width: 900px;">
<form id="export_form" method="POST" action="/export_traits_csv">
<button class="btn btn-default" id="select_all" type="button"><span class="glyphicon glyphicon-ok"></span> Select All</button>
- <button class="btn btn-default" id="add" type="button" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
+ <button class="btn btn-default" id="invert" type="button"><span class="glyphicon glyphicon-adjust"></span> Invert</button>
+ <button class="btn btn-success" id="add" type="button" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
<input type="hidden" name="database_name" id="database_name" value="None">
<input type="hidden" name="export_data" id="export_data" value="">
<input type="hidden" name="file_name" id="file_name" value="{{ this_trait.name }}_{{ dataset.name }}_correlation">
- <button class="btn btn-default" id="export_traits">Download CSV</button>
<input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline;" placeholder="Search Table For ...">
<input type="text" id="select_top" class="form-control" style="width: 200px; display: inline;" placeholder="Select Top ...">
<button class="btn btn-default" id="deselect_all" type="button"><span class="glyphicon glyphicon-remove"></span> Deselect</button>
<button id="redraw" class="btn btn-default" type="button">Reset Columns</button>
</form>
<br />
+ <div id="export_options" style="float: left;"></div>
{% if target_dataset.type != "Publish" %}
<br />
- <button id="more_options" class="btn btn-primary">More Options...</button>
+ <div style="float: left; clear: left; margin-top: 10px; margin-bottom: 20px;">
+ <button id="more_options" class="btn btn-primary">More Options...</button>
+ </div>
<br />
<br />
- <div id="filter_options" style="display: none;">
+ <div id="filter_options" style="display: none; float: left; clear: left;">
<span style="border: 1px dashed #999999; padding: 8px; background-color: #ddf; font-size: 12px;">
<button id="select_traits" class="btn btn-primary" style="font-size: 12px; padding: 2px 3px;">Select Traits</button> with r >
<input type="text" name="r_greater_select" value="-1.0" size="6" maxlength="10">
@@ -110,11 +81,38 @@
</div>
{% endif %}
</div>
- <div style="margin-bottom: 5px;">
- <b>Show/Hide Columns:</b>
+ <div class="show-hide-container" style="float: left; clear: left;">
+ <b>Show/Hide Columns:</b>
+ <br>
+ {% if target_dataset.type == 'ProbeSet' %}
+ <button class="toggle-vis" data-column="3">Symbol</button>
+ <button class="toggle-vis" data-column="4">Description</button>
+ <button class="toggle-vis" data-column="5">Location</button>
+ <button class="toggle-vis" data-column="6">Mean</button>
+ <button class="toggle-vis" data-column="7">Peak LOD</button>
+ <button class="toggle-vis" data-column="8">Peak Location</button>
+ <button class="toggle-vis" data-column="9">Effect Size</button>
+ {% elif target_dataset.type == 'Publish' %}
+ <button class="toggle-vis" data-column="3">Abbreviation</button>
+ <button class="toggle-vis" data-column="4">Description</button>
+ <button class="toggle-vis" data-column="5">Mean</button>
+ <button class="toggle-vis" data-column="6">Authors</button>
+ <button class="toggle-vis" data-column="7">Year</button>
+ <button class="toggle-vis" data-column="8">Sample {% if corr_method == 'pearson' %}r{% else %}rho{% endif %}</button>
+ <button class="toggle-vis" data-column="9">N</button>
+ <button class="toggle-vis" data-column="10">Sample p({% if corr_method == 'pearson' %}r{% else %}rho{% endif %})</button>
+ <button class="toggle-vis" data-column="11">Peak LOD</button>
+ <button class="toggle-vis" data-column="12">Peak Location</button>
+ <button class="toggle-vis" data-column="13">Effect Size</button>
+ {% else %}
+ <button class="toggle-vis" data-column="3">Location</button>
+ <button class="toggle-vis" data-column="4">Sample {% if corr_method == 'pearson' %}r{% else %}rho{% endif %}</button>
+ <button class="toggle-vis" data-column="5">N</button>
+ <button class="toggle-vis" data-column="6">Sample p({% if corr_method == 'pearson' %}r{% else %}rho{% endif %})</button>
+ {% endif %}
</div>
- <div style="width: {% if target_dataset.type == "ProbeSet" %}1600px{% elif target_dataset.type == "Publish" %}1400px{% else %}800px{% endif %};">
- <table id="trait_table" class="display dataTable nowrap" style="font-size: 12px; float: left;">
+ <div style="width: 100%; {% if target_dataset.type == "ProbeSet" %}min-width: 1700px;{% elif target_dataset.type == "Publish" %}min-width: 1600px;{% else %}width: 650px;{% endif %}">
+ <table id="trait_table" class="table-hover table-striped cell-border" style="float: left;">
<thead>
<tr>
<th></th>
@@ -125,68 +123,7 @@
</thead>
<tbody>
- {% for trait in correlation_results %}
- <tr>
- <td><INPUT TYPE="checkbox" NAME="searchResult" class="checkbox trait_checkbox" style="padding-right: 0px;" VALUE="{{ data_hmac('{}:{}'.format(trait.name, trait.dataset.name)) }}"></td>
- <td data-export="{{ loop.index }}" style="padding-left: 8px; padding-right: 0px; padding-top: 4px; align: right;">{{ loop.index }}</td>
- <td data-export="{{ trait.name }}">
- <a href="{{ url_for('show_trait_page',
- trait_id = trait.name,
- dataset = trait.dataset.name
- )}}">
- {{ trait.name }}
- </a>
- </td>
- {% if target_dataset.type == 'ProbeSet' %}
- <td data-export="{{ trait.symbol }}">{{ trait.symbol }}</td>
- <td data-export="{{ trait.description_display }}">{{ trait.description_display }}</TD>
- <td data-export="{{ trait.location_repr }}" style="white-space: nowrap;">{{ trait.location_repr }}</td>
- <td data-export="{{ '%0.3f' % trait.mean|float }}" align="right">{{ '%0.3f' % trait.mean|float }}</td>
- <td data-export="{{ '%0.3f'|format(trait.sample_r) }} align="right"><a target="_blank" href="corr_scatter_plot?dataset_1={{dataset.name}}&dataset_2={{trait.dataset.name}}&trait_1={{this_trait.name}}&trait_2={{trait.name}}">{{ '%0.3f'|format(trait.sample_r) }}</a></td>
- <td data-export="{{ trait.num_overlap }}" align="right">{{ trait.num_overlap }}</td>
- <td data-export="{{ '%0.3e'|format(trait.sample_p) }}" align="right">{{ '%0.3e'|format(trait.sample_p) }}</td>
- {% if trait.lit_corr == "" or trait.lit_corr == 0.000 %}
- <td data-export="--" align="right">--</td>
- {% else %}
- <td data-export="{{ '%0.3f'|format(trait.lit_corr) }}" align="right">{{ '%0.3f'|format(trait.lit_corr) }}</td>
- {% endif %}
- {% if trait.tissue_corr == "" or trait.tissue_corr == 0.000 %}
- <td data-export="--" align="right">--</td>
- <td data-export="--" align="right">--</td>
- {% else %}
- <td data-export="{{ '%0.3f'|format(trait.tissue_corr) }}" align="right">{{ '%0.3f'|format(trait.tissue_corr) }}</td>
- <td data-export="{{ '%0.3e'|format(trait.tissue_pvalue) }}" align="right">{{ '%0.3e'|format(trait.tissue_pvalue) }}</td>
- {% endif %}
- <td data-export={% if trait.LRS_score_repr != "N/A" %}"{{ '%0.1f' % trait.LRS_score_repr|float }}"{% else %}"N/A"{% endif %} align="right">{% if trait.LRS_score_repr != "N/A" %}{{ '%0.1f' % trait.LRS_score_repr|float }}{% else %}N/A{% endif %}</td>
- <td data-export="{{ trait.LRS_location_repr }}" align="right">{{ trait.LRS_location_repr }}</td>
- <td data-export={% if trait.additive != "" %}"{{ '%0.3f' % trait.additive|float }}"{% else %}"N/A"{% endif %} align="right">{% if trait.additive != "" %}{{ '%0.3f' % trait.additive|float }}{% else %}N/A{% endif %}</td>
- {% elif target_dataset.type == "Publish" %}
- {% if trait.abbreviation %}
- <TD title="{{ trait.abbreviation }}" data-export="{{ trait.abbreviation }}">{% if trait.abbreviation|length > 20 %}{{ trait.abbreviation[:20] }}...{% else %}{{ trait.abbreviation }}{% endif %}</TD>
- {% else %}
- <TD data-export="N/A">N/A</TD>
- {% endif %}
- <td data-export="{{ trait.description_display }}">{% if trait.description_display|length > 50 %}{{ trait.description_display[:50] }}...{% else %}{{ trait.description_display }}{% endif %}</td>
- <td data-export="{{ trait.authors }}">{{ trait.authors }}</td>
- <td data-export="{{ trait.pubmed_text }}">
- <a href="{{ trait.pubmed_link }}">
- {{ trait.pubmed_text }}
- </a>
- </td>
- <td data-export="{{ '%0.3f'|format(trait.sample_r) }}" align="right"><a target="_blank" href="corr_scatter_plot?dataset_1={{dataset.name}}&dataset_2={{trait.dataset.name}}&trait_1={{this_trait.name}}&trait_2={{trait.name}}">{{ '%0.3f'|format(trait.sample_r) }}</a></td>
- <td data-export="{{ trait.num_overlap }}" align="right">{{ trait.num_overlap }}</td>
- <td data-export="{{ '%0.3e'|format(trait.sample_p) }}" align="right">{{ '%0.3e'|format(trait.sample_p) }}</td>
- <td data-export="{{ trait.LRS_score_repr }}" align="right">{{ trait.LRS_score_repr }}</td>
- <td data-export="{{ trait.LRS_location_repr }}" align="right">{{ trait.LRS_location_repr }}</td>
- <td data-export={% if trait.additive != "" %}"{{ '%0.3f' % trait.additive|float }}"{% else %}"N/A"{% endif %} align="right">{% if trait.additive != "" %}{{ '%0.3f' % trait.additive|float }}{% else %}N/A{% endif %}</td>
- {% elif target_dataset.type == "Geno" %}
- <td data-export="{{ trait.location_repr }}" align="right">{{ trait.location_repr }}</TD>
- <td data-export="{{ '%0.3f'|format(trait.sample_r) }}" align="right"><a target="_blank" href="corr_scatter_plot?dataset_1={{dataset.name}}&dataset_2={{trait.dataset.name}}&trait_1={{this_trait.name}}&trait_2={{trait.name}}">{{ '%0.3f'|format(trait.sample_r) }}</a></td>
- <td data-export="{{ trait.num_overlap }}" align="right">{{ trait.num_overlap }}</td>
- <td data-export="{{ '%0.3e'|format(trait.sample_p) }}" align="right">{{ '%0.3e'|format(trait.sample_p) }}</td>
- {% endif %}
- </tr>
- {% endfor %}
+ <td colspan="100%" align="center"><br><b><font size="15">Loading...</font></b><br></td>
</tbody>
</table>
</div>
@@ -194,23 +131,25 @@
{% endblock %}
{% block js %}
- <!--<script type="text/javascript" src="/static/new/js_external/md5.min.js"></script>-->
+ <script type="text/javascript" src="{{ url_for('js', filename='js_alt/md5.min.js') }}"></script>
<script type="text/javascript" src="/static/new/javascript/search_results.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
-
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jszip/jszip.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.buttons.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/buttons.colVis.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/buttons/js/dataTables.buttons.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/buttons/js/buttons.html5.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/scroller/js/dataTables.scroller.min.js') }}"></script>
+
<script type="text/javascript" charset="utf-8">
var table_json = {{ json_results | safe }}
</script>
<script type="text/javascript" charset="utf-8">
-
$.fn.dataTable.ext.order['dom-innertext'] = function (settings, col) {
return this.api().column(col, { order: 'index' }).nodes().map(function (td, i) {
return Math.abs(parseFloat($('a', td).text()));
@@ -284,205 +223,351 @@
{% endif %}
$(document).ready( function () {
-
- $('#trait_table tr').click(function(event) {
- if (event.target.type !== 'checkbox') {
- $(':checkbox', this).trigger('click');
- }
- });
-
- function change_buttons() {
- buttons = ["#add", "#remove"];
- num_checked = $('.trait_checkbox:checked').length;
- if (num_checked === 0) {
- for (_i = 0, _len = buttons.length; _i < _len; _i++) {
- button = buttons[_i];
- $(button).prop("disabled", true);
- }
- } else {
- for (_j = 0, _len2 = buttons.length; _j < _len2; _j++) {
- button = buttons[_j];
- $(button).prop("disabled", false);
- }
- }
- if ($(this).is(":checked")) {
- if (!$(this).closest('tr').hasClass('selected')) {
- $(this).closest('tr').addClass('selected')
- }
- }
- else {
- if ($(this).closest('tr').hasClass('selected')) {
- $(this).closest('tr').removeClass('selected')
- }
- }
- }
-
- console.time("Creating table");
-
- {% if target_dataset.type == "ProbeSet" %}
table_conf = {
- "drawCallback": function( settings ) {
- $('#trait_table tr').click(function(event) {
- if (event.target.type !== 'checkbox') {
- $(':checkbox', this).trigger('click');
- }
- });
- $('.trait_checkbox:checkbox').on("change", change_buttons);
- },
buttons: [
- {
- extend: 'columnsToggle',
- columns: function( idx, data, node ) {
- if (idx != 0) {
- return true;
- } else {
- return false;
- }
- },
- postfixButtons: [ 'colvisRestore' ]
+ {
+ extend: 'csvHtml5',
+ text: 'Download <span class="glyphicon glyphicon-download"></span>',
+ className: 'btn btn-default',
+ exportOptions: {
+ columns: 'th:not(:first-child)'
}
+ }
+ ],
+ 'drawCallback': function( settings ) {
+ $('#trait_table tr').off().on("click", function(event) {
+ if (event.target.type !== 'checkbox' && event.target.tagName.toLowerCase() !== 'a') {
+ var obj =$(this).find('input');
+ obj.prop('checked', !obj.is(':checked'));
+ }
+ if ($(this).hasClass("selected") && event.target.tagName.toLowerCase() !== 'a'){
+ $(this).removeClass("selected")
+ } else if (event.target.tagName.toLowerCase() !== 'a') {
+ $(this).addClass("selected")
+ }
+ change_buttons()
+ });
+ },
+ "data": table_json,
+ "columns": [
+ {
+ 'data': null,
+ 'width': "25px",
+ 'orderDataType': "dom-checkbox",
+ 'orderSequence': [ "desc", "asc"],
+ 'render': function(data, type, row, meta) {
+ return '<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + data.hmac + '">'
+ }
+ },
+ {
+ 'title': "Index",
+ 'type': "natural",
+ 'width': "30px",
+ 'data': "index"
+ },
+ {
+ 'title': "Record",
+ 'type': "natural-minus-na",
+ 'data': null,
+ 'width': "60px",
+ 'render': function(data, type, row, meta) {
+ return '<a target="_blank" href="/show_trait?trait_id=' + data.trait_id + '&dataset=' + data.dataset + '">' + data.trait_id + '</a>'
+ }
+ }{% if target_dataset.type == 'ProbeSet' %},
+ {
+ 'title': "Symbol",
+ 'type': "natural",
+ 'width': "120px",
+ 'data': "symbol"
+ },
+ {
+ 'title': "Description",
+ 'type': "natural",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ try {
+ return decodeURIComponent(escape(data.description))
+ } catch(err){
+ return escape(data.description)
+ }
+ }
+ },
+ {
+ 'title': "Location",
+ 'type': "natural-minus-na",
+ 'width': "125px",
+ 'data': "location"
+ },
+ {
+ 'title': "Mean",
+ 'type': "natural-minus-na",
+ 'width': "40px",
+ 'data': "mean",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Sample {% if corr_method == 'pearson' %}r{% else %}rho{% endif %}",
+ 'type': "natural-minus-na",
+ 'width': "40px",
+ 'data': null,
+ 'orderSequence': [ "desc", "asc"],
+ 'render': function(data, type, row, meta) {
+ if (data.sample_r != "N/A") {
+ return "<a target\"_blank\" href=\"corr_scatter_plot?method={% if corr_method == 'spearman' %}spearman{% else %}pearson{% endif %}&dataset_1={% if dataset.name == 'Temp' %}Temp_{{ dataset.group.name }}{% else %}{{ dataset.name }}{% endif %}&dataset_2=" + data.dataset + "&trait_1={{ this_trait.name }}&trait_2=" + data.trait_id + "\">" + data.sample_r + "</a>"
+ } else {
+ return data.sample_r
+ }
+ }
+ },
+ {
+ 'title': "N",
+ 'type': "natural-minus-na",
+ 'width': "40px",
+ 'data': "num_overlap",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Sample p({% if corr_method == 'pearson' %}r{% else %}rho{% endif %})",
+ 'type': "scientific",
+ 'width': "65px",
+ 'data': "sample_p",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Lit {% if corr_method == 'pearson' %}r{% else %}rho{% endif %}",
+ 'type': "natural-minus-na",
+ 'width': "40px",
+ 'data': "lit_corr",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Tissue {% if corr_method == 'pearson' %}r{% else %}rho{% endif %}",
+ 'type': "natural-minus-na",
+ 'width': "40px",
+ 'data': "tissue_corr",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Tissue p({% if corr_method == 'pearson' %}r{% else %}rho{% endif %})",
+ 'type': "natural-minus-na",
+ 'width': "40px",
+ 'data': "tissue_pvalue",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Peak <a href=\"{{ url_for('glossary_blueprint.glossary') }}#LRS\" target=\"_blank\" style=\"color: white;\">&nbsp;<i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a>LOD",
+ 'type': "natural-minus-na",
+ 'data': "lod_score",
+ 'width': "60px",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Peak Location",
+ 'type': "natural-minus-na",
+ 'width': "125px",
+ 'data': "lrs_location"
+ },
+ {
+ 'title': "Effect Size<a href=\"http://gn1.genenetwork.org/glossary.html#A\" target=\"_blank\" style=\"color: white;\">&nbsp;<i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a>",
+ 'type': "natural-minus-na",
+ 'data': "additive",
+ 'width': "85px",
+ 'orderSequence': [ "desc", "asc"]
+ }{% elif target_dataset.type == 'Publish' %},
+ {
+ 'title': "Abbreviation",
+ 'type': "natural",
+ 'width': "200px",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ try {
+ return decodeURIComponent(escape(data.abbreviation_display))
+ } catch(err){
+ return data.abbreviation_display
+ }
+ }
+ },
+ {
+ 'title': "Description",
+ 'type': "natural",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ try {
+ return decodeURIComponent(escape(data.description))
+ } catch(err){
+ return data.description
+ }
+ }
+ },
+ {
+ 'title': "Mean",
+ 'type': "natural-minus-na",
+ 'width': "40px",
+ 'data': "mean",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Authors",
+ 'type': "natural",
+ 'width': "400px",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ try {
+ return decodeURIComponent(escape(data.authors_display))
+ } catch(err){
+ return data.authors_display
+ }
+ }
+ },
+ {
+ 'title': "Year",
+ 'type': "natural-minus-na",
+ 'data': null,
+ 'width': "80px",
+ 'render': function(data, type, row, meta) {
+ if (data.pubmed_id != "N/A"){
+ return '<a href="' + data.pubmed_link + '">' + data.pubmed_text + '</a>'
+ } else {
+ return data.pubmed_text
+ }
+ },
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Sample {% if corr_method == 'pearson' %}r{% else %}rho{% endif %}",
+ 'type': "natural-minus-na",
+ 'width': "40px",
+ 'data': null,
+ 'orderSequence': [ "desc", "asc"],
+ 'render': function(data, type, row, meta) {
+ if (data.sample_r != "N/A") {
+ return "<a target\"_blank\" href=\"corr_scatter_plot?method={% if corr_method == 'spearman' %}spearman{% else %}pearson{% endif %}&dataset_1={% if dataset.name == 'Temp' %}Temp_{{ dataset.group.name }}{% else %}{{ dataset.name }}{% endif %}&dataset_2=" + data.dataset + "&trait_1={{ this_trait.name }}&trait_2=" + data.trait_id + "\">" + data.sample_r + "</a>"
+ } else {
+ return data.sample_r
+ }
+ }
+ },
+ {
+ 'title': "N",
+ 'type': "natural-minus-na",
+ 'width': "40px",
+ 'data': "num_overlap",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Sample p({% if corr_method == 'pearson' %}r{% else %}rho{% endif %})",
+ 'type': "scientific",
+ 'width': "65px",
+ 'data': "sample_p",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Peak <a href=\"{{ url_for('glossary_blueprint.glossary') }}#LRS\" target=\"_blank\" style=\"color: white;\">&nbsp;<i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a>LOD",
+ 'type': "natural-minus-na",
+ 'data': "lod_score",
+ 'width': "60px",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Peak Location",
+ 'type': "natural-minus-na",
+ 'width': "125px",
+ 'data': "lrs_location"
+ },
+ {
+ 'title': "Effect Size<a href=\"http://gn1.genenetwork.org/glossary.html#A\" target=\"_blank\" style=\"color: white;\">&nbsp;<i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a>",
+ 'type': "natural-minus-na",
+ 'data': "additive",
+ 'width': "85px",
+ 'orderSequence': [ "desc", "asc"]
+ }{% elif target_dataset.type == 'Geno' %},
+ {
+ 'title': "Location",
+ 'type': "natural-minus-na",
+ 'width': "120px",
+ 'data': "location"
+ },
+ {
+ 'title': "Sample {% if corr_method == 'pearson' %}r{% else %}rho{% endif %}",
+ 'type': "natural-minus-na",
+ 'width': "40px",
+ 'data': null,
+ 'orderSequence': [ "desc", "asc"],
+ 'render': function(data, type, row, meta) {
+ if (data.sample_r != "N/A") {
+ return "<a target\"_blank\" href=\"corr_scatter_plot?method={% if corr_method == 'spearman' %}spearman{% else %}pearson{% endif %}&dataset_1={% if dataset.name == 'Temp' %}Temp_{{ dataset.group.name }}{% else %}{{ dataset.name }}{% endif %}&dataset_2=" + data.dataset + "&trait_1={{ this_trait.name }}&trait_2=" + data.trait_id + "\">" + data.sample_r + "</a>"
+ } else {
+ return data.sample_r
+ }
+ }
+ },
+ {
+ 'title': "N",
+ 'type': "natural-minus-na",
+ 'width': "40px",
+ 'data': "num_overlap",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Sample p({% if corr_method == 'pearson' %}r{% else %}rho{% endif %})",
+ 'type': "scientific",
+ 'width': "65px",
+ 'data': "sample_p",
+ 'orderSequence': [ "desc", "asc"]
+ }{% endif %}
],
"columnDefs": [ {
"targets": 0,
"orderable": false
} ],
- "columns": [
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural", "width": "15%" },
- { "type": "natural" },
- { "type": "natural" },
- { "orderDataType": "dom-innertext", 'orderSequence': [ "desc", "asc"] },
- { "type": "natural" },
- { "type": "scientific" },
- { "type": "numeric-html", 'orderSequence': [ "desc", "asc"] },
- { "type": "numeric-html", 'orderSequence': [ "desc", "asc"] },
- { "type": "scientific" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" }
- ],
- "createdRow": function ( row, data, index ) {
- $('td', row).eq(4).attr('title', $('td', row).eq(4).text());
- if ($('td', row).eq(4).text().length > 40) {
- $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 40));
- $('td', row).eq(4).text($('td', row).eq(4).text() + '...')
- }
- },
+ {% if target_dataset.type == 'Geno' %}
+ "order": [[6, "asc" ]],
+ {% elif target_dataset.type == 'Publish' %}
+ "order": [[10, "asc" ]],
+ {% else %}
"order": [[9, "asc" ]],
- "sDom": "Btir",
- "iDisplayLength": -1,
- "autoWidth": false,
- "deferRender": true,
+ {% endif %}
+ "sDom": "itir",
+ "autoWidth": true,
"bSortClasses": false,
- "paging": false,
- "orderClasses": true
+ "scrollY": "100vh",
+ "scroller": true,
+ "scrollCollapse": true
}
- {% elif target_dataset.type == "Publish" %}
- table_conf = {
- "drawCallback": function( settings ) {
- $('#trait_table tr').click(function(event) {
- if (event.target.type !== 'checkbox') {
- $(':checkbox', this).trigger('click');
- }
- });
- $('.trait_checkbox:checkbox').on("change", change_buttons);
- },
- "buttons": [
- {
- extend: 'columnsToggle',
- columns: function( idx, data, node ) {
- if (idx != 0) {
- return true;
- } else {
- return false;
- }
- },
- postfixButtons: [ 'colvisRestore' ]
- }
- ],
- "columnDefs": [
- { "targets": 0, "orderable": false }
- ],
- "columns": [
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural", "width": "20%" },
- { "type": "natural", "width": "12%" },
- { "orderDataType": "dom-innertext" },
- { "orderDataType": "dom-innertext", 'orderSequence': [ "desc", "asc"] },
- { "type": "natural" },
- { "type": "scientific" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" }
- ],
- "createdRow": function ( row, data, index ) {
- $('td', row).eq(3).attr('title', $('td', row).eq(3).text());
- if ($('td', row).eq(3).text().length > 50) {
- $('td', row).eq(3).text($('td', row).eq(3).text().substring(0, 50));
- $('td', row).eq(3).text($('td', row).eq(3).text() + '...')
- }
- $('td', row).eq(4).attr('title', $('td', row).eq(4).text());
- if ($('td', row).eq(4).text().length > 40) {
- $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 40));
- $('td', row).eq(4).text($('td', row).eq(4).text() + '...')
- }
- },
- "order": [[9, "asc" ]],
- "sDom": "Btir",
- "iDisplayLength": -1,
- "autoWidth": false,
- "deferRender": true,
- "bSortClasses": false,
- "paging": false,
- "orderClasses": true,
- }
- {% elif target_dataset.type == "Geno" %}
- table_conf = {
- "paging": false,
- buttons: [
- {
- extend: 'columnsToggle',
- columns: function( idx, data, node ) {
- if (idx != 0) {
- return true;
- } else {
- return false;
- }
- },
- postfixButtons: [ 'colvisRestore' ]
- }
- ],
- "columnDefs": [
- { "targets": 0, "orderable": false }
- ],
- "columns": [
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "orderDataType": "dom-innertext", 'orderSequence': [ "desc", "asc"] },
- { "type": "natural" },
- { "type": "scientific" }
- ],
- "order": [[6, "asc" ]],
- "sDom": "Btir",
- "autoWidth": false,
- "bDeferRender": true,
- "scrollY": "800px",
- "scrollCollapse": false
- }
- {% endif %}
+ trait_table = $('#trait_table').DataTable(table_conf);
+
+ trait_table.buttons().container().appendTo('#export_options')
- the_table = $('#trait_table').DataTable(table_conf);
+ $('.buttons-csv').removeClass('dt-button')
- console.timeEnd("Creating table");
+ trait_table.on( 'order.dt search.dt draw.dt', function () {
+ trait_table.column(1, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {
+ cell.innerHTML = i+1;
+ } );
+ } ).draw();
+
+ $('.toggle-vis').on('click', function (e) {
+ e.preventDefault();
+
+ // Get the column API object
+ var column = trait_table.column( $(this).attr('data-column') );
+
+ // Toggle the visibility
+ column.visible( ! column.visible() );
+
+ if (column.visible()){
+ $(this).removeClass("active");
+ } else {
+ $(this).addClass("active");
+ }
+ } );
+
+ $('#redraw').on('click', function (e) {
+ e.preventDefault();
+ trait_table.columns().visible( true );
+ $('.toggle-vis.active').removeClass('active');
+ });
submit_special = function(url) {
$("#correlation_form").attr("action", url);
@@ -500,7 +585,7 @@
$("#select_traits").click(function() {
console.log("redrawing")
- the_table.draw();
+ trait_table.draw();
});
});
</script>
diff --git a/wqflask/wqflask/templates/credits.html b/wqflask/wqflask/templates/credits.html
index 95c424cc..bcb37c48 100644
--- a/wqflask/wqflask/templates/credits.html
+++ b/wqflask/wqflask/templates/credits.html
@@ -31,8 +31,8 @@
<UL>
<LI><A HREF="http://www.nervenet.org/people/lulu_cv.html">Lu Lu</A>
<LI> <A HREF="http://www.jax.org/news/archives/2009/chesler.html">Elissa J. Chesler</A>
- <LI><a href="http://www.ohsu.edu/som-BehNeuro/Faculty/Crabbe.html">John C Crabbe</a>, OHSU
- <LI><a href="http://www.ohsu.edu/som-BehNeuro/Faculty/Belknap.html">John K Belknap</a>, OHSU
+ <LI><span class="broken-link" href="http://www.ohsu.edu/som-BehNeuro/Faculty/Crabbe.html">John C Crabbe</span>, OHSU
+ <LI><span class="broken-link" href="http://www.ohsu.edu/som-BehNeuro/Faculty/Belknap.html">John K Belknap</span>, OHSU
<LI>Mary-Kathleen Sullivan
<LI>Emily English
<LI>Byron Jones
diff --git a/wqflask/wqflask/templates/ctl_results.html b/wqflask/wqflask/templates/ctl_results.html
index 0108d93a..1c31b499 100644
--- a/wqflask/wqflask/templates/ctl_results.html
+++ b/wqflask/wqflask/templates/ctl_results.html
@@ -1,8 +1,8 @@
{% extends "base.html" %}
{% block css %}
<link rel="stylesheet" type="text/css" href="/static/new/css/network_graph.css" />
- <link rel="stylesheet" type="text/css" href="/js/cytoscape-panzoom/cytoscape.js-panzoom.css" />
- <link rel="stylesheet" type="text/css" href="http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0/jquery.qtip.css">
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='cytoscape-panzoom/cytoscape.js-panzoom.css') }}">
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='qtip2/jquery.qtip.min.css') }}">
<style>
/* The Cytoscape Web container must have its dimensions set. */
html, body { height: 100%; width: 100%; padding: 0; margin: 0; }
@@ -64,21 +64,14 @@
gn2_url = "{{ gn2_url | safe }}"
</script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script>
- <script language="javascript" type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0/jquery.qtip.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
- <script language="javascript" type="text/javascript" src="/js/cytoscape/cytoscape.min.js"></script>
- <script language="javascript" type="text/javascript" src="/js/cytoscape-panzoom/cytoscape-panzoom.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='qtip2/jquery.qtip.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='cytoscape/cytoscape.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='cytoscape-panzoom/cytoscape-panzoom.js') }}"></script>
<!-- should be using cytoscape-popper for tips, see docs -->
- <script language="javascript" type="text/javascript" src="/js/cytoscape-qtip/cytoscape-qtip.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='cytoscape-qtip/cytoscape-qtip.js') }}"></script>
- <!--
- Loads flash - who wants that?
- <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/min/AC_OETags.min.js"></script>
- Disabled because it is standard JS now:
- <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/min/json2.min.js"></script>
-t>
- -->
<script language="javascript" type="text/javascript" src="/static/new/javascript/ctl_graph.js"></script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/data_sharing.html b/wqflask/wqflask/templates/data_sharing.html
index 366e2075..cca498ec 100644
--- a/wqflask/wqflask/templates/data_sharing.html
+++ b/wqflask/wqflask/templates/data_sharing.html
@@ -82,9 +82,9 @@
<P>The entire procedure can be reapplied once the initial outlier data sets have been eliminated to detect any remaining outlier data sets.
-<P><A HREF="http://www.datadesk.com/products/data_analysis/datadesk/" target="_empty" class="normalsize">DataDesk</A> was used to examine the statistical quality of the probe level (CEL) data after step 5 below. DataDesk allows the rapid detection of subsets of probes that are particularly sensitive to still unknown factors in array processing. Arrays can then be categorized at the probe level into "reaction classes." A reaction class is a group of arrays for which the expression of essentially all probes are colinear over the full range of log2 values. A single but large group of arrays (n = 32) processed in essentially the identical manner by a single operator can produce arrays belonging to as many as four different reaction classes. Reaction classes are NOT related to strain, age, sex, treatment, or any known biological parameter (technical replicates can belong to different reaction classes). We do not yet understand the technical origins of reaction classes. The number of probes that contribute to the definition of reaction classes is quite small (<10% of all probes). We have categorized all arrays in this data set into one of 5 reaction classes. These have then been treated as if they were separate batches. Probes in these data type "batches" have been aligned to a common mean as described below.
+<P><span class="broken_link" HREF="http://www.datadesk.com/products/data_analysis/datadesk/" target="_empty" class="normalsize">DataDesk</span> was used to examine the statistical quality of the probe level (CEL) data after step 5 below. DataDesk allows the rapid detection of subsets of probes that are particularly sensitive to still unknown factors in array processing. Arrays can then be categorized at the probe level into "reaction classes." A reaction class is a group of arrays for which the expression of essentially all probes are colinear over the full range of log2 values. A single but large group of arrays (n = 32) processed in essentially the identical manner by a single operator can produce arrays belonging to as many as four different reaction classes. Reaction classes are NOT related to strain, age, sex, treatment, or any known biological parameter (technical replicates can belong to different reaction classes). We do not yet understand the technical origins of reaction classes. The number of probes that contribute to the definition of reaction classes is quite small (<10% of all probes). We have categorized all arrays in this data set into one of 5 reaction classes. These have then been treated as if they were separate batches. Probes in these data type "batches" have been aligned to a common mean as described below.
-<P><B>Probe (cell) level data from the CEL file: </B>These CEL values produced by <a href="http://www.affymetrix.com/support/technical/product_updates/gcos_download.affx" target="_blank" class="normalsize">GCOS</a> are 75% quantiles from a set of 91 pixel values per cell.
+<P><B>Probe (cell) level data from the CEL file: </B>These CEL values produced by <span href="http://www.affymetrix.com/support/technical/product_updates/gcos_download.affx" target="_blank" class="normalsize broken_link">GCOS</span> are 75% quantiles from a set of 91 pixel values per cell.
<OL>
<LI>We added an offset of 1.0 unit to each cell signal to ensure that all values could be logged without generating negative values. We then computed the log base 2 of each cell.
@@ -122,7 +122,7 @@
<LI>Lu Lu, M.D. <!--Tissue acquisition, RNA processing, experimental design-->
<BR>Grant Support: NIH U01AA13499, U24AA13513
-<LI><A HREF="http://www.salk.edu/faculty/faculty/details.php?id=23" target="_empty" class="normalsize">Fred H. Gage, Ph.D.</A> <!--$10,000 contribution -->
+<LI><span HREF="http://www.salk.edu/faculty/faculty/details.php?id=23" target="_empty" class="broken_link normalsize">Fred H. Gage, Ph.D.</span> <!--$10,000 contribution -->
<BR>Grant Support: Lookout Foundation
<LI>Dan Goldowitz, Ph.D. <!--$30,000 contribution -->
@@ -134,7 +134,7 @@
<LI>Shirlean Goodwin, Ph.D. <!--All array processing-->
<BR>Grant Support: NIAAA INIA U01AA013515
-<LI><A HREF="http://www.bccn-berlin.de/ResearchGroups/Kempermann" target="_empty" class="normalsize">Gerd Kempermann, M.D.</A> <!--$30,000 contribution -->
+<LI><span HREF="http://www.bccn-berlin.de/ResearchGroups/Kempermann" class="broken_link normalsize">Gerd Kempermann, M.D.</span> <!--$30,000 contribution -->
<BR>Grant Support: The <A HREF="http://www.volkswagen-stiftung.de/" target="_empty" class="normalsize">Volkswagen Foundation</A> Grant on Permissive and Persistent Factors in Neurogenesis in the Adult Central Nervous System
<BR>Humboldt-Universitat Berlin
<BR>Universitatsklinikum Charite
@@ -174,10 +174,10 @@
</UL>
</P><br><br></td></tr>
<tr><td><span style="font-size:115%;font-weight:bold;">Experiment Type:</span></td></tr>
- <tr><td> <P>Pooled RNA samples (usually one pool of male hippocampii and one pool of female hippocampii) were prepared using standard protocols. Samples were processed using a total of 206 Affymetrix GeneChip Mouse Expression 430 2.0 short oligomer arrays (MOE430 2.0 or M430v2; see GEO platform ID <A HREF="http://www.ncbi.nlm.nih.gov/projects/geo/query/acc.cgi?acc=GPL1261" target="_empty" class="normalsize">GPL1261</A>), of which 201 passed quality control and error checking. This particular data set was processed using the <a href="http://odin.mdacc.tmc.edu/~zhangli/PerfectMatch/" target="_blank" class="normalsize">PDNN</a> protocol. To simplify comparisons among transforms, PDNN values of each array were adjusted to an average of 8 units and a standard deviation of 2 units.
+ <tr><td> <P>Pooled RNA samples (usually one pool of male hippocampii and one pool of female hippocampii) were prepared using standard protocols. Samples were processed using a total of 206 Affymetrix GeneChip Mouse Expression 430 2.0 short oligomer arrays (MOE430 2.0 or M430v2; see GEO platform ID <A HREF="http://www.ncbi.nlm.nih.gov/projects/geo/query/acc.cgi?acc=GPL1261" target="_empty" class="normalsize">GPL1261</A>), of which 201 passed quality control and error checking. This particular data set was processed using the <span href="http://odin.mdacc.tmc.edu/~zhangli/PerfectMatch/" target="_blank" class="broken_link normalsize">PDNN</span> protocol. To simplify comparisons among transforms, PDNN values of each array were adjusted to an average of 8 units and a standard deviation of 2 units.
<br><br></td></tr>
<tr><td><span style="font-size:115%;font-weight:bold;">Overall Design:</span></td></tr>
- <tr><td> <P>Pooled RNA samples (usually one pool of male hippocampii and one pool of female hippocampii) were prepared using standard protocols. Samples were processed using a total of 206 Affymetrix GeneChip Mouse Expression 430 2.0 short oligomer arrays (MOE430 2.0 or M430v2; see GEO platform ID <A HREF="http://www.ncbi.nlm.nih.gov/projects/geo/query/acc.cgi?acc=GPL1261" target="_empty" class="normalsize">GPL1261</A>), of which 201 passed quality control and error checking. This particular data set was processed using the <a href="http://odin.mdacc.tmc.edu/~zhangli/PerfectMatch/" target="_blank" class="normalsize">PDNN</a> protocol. To simplify comparisons among transforms, PDNN values of each array were adjusted to an average of 8 units and a standard deviation of 2 units.
+ <tr><td> <P>Pooled RNA samples (usually one pool of male hippocampii and one pool of female hippocampii) were prepared using standard protocols. Samples were processed using a total of 206 Affymetrix GeneChip Mouse Expression 430 2.0 short oligomer arrays (MOE430 2.0 or M430v2; see GEO platform ID <A HREF="http://www.ncbi.nlm.nih.gov/projects/geo/query/acc.cgi?acc=GPL1261" target="_empty" class="normalsize">GPL1261</A>), of which 201 passed quality control and error checking. This particular data set was processed using the <span href="http://odin.mdacc.tmc.edu/~zhangli/PerfectMatch/" target="_blank" class="broken_link normalsize">PDNN</span> protocol. To simplify comparisons among transforms, PDNN values of each array were adjusted to an average of 8 units and a standard deviation of 2 units.
<br><br></td></tr>
<tr><td><span style="font-size:115%;font-weight:bold;">Contributor:</span></td></tr>
<tr><td> <UL>
@@ -189,7 +189,7 @@
<LI>Lu Lu, M.D. <!--Tissue acquisition, RNA processing, experimental design-->
<BR>Grant Support: NIH U01AA13499, U24AA13513
-<LI><A HREF="http://www.salk.edu/faculty/faculty/details.php?id=23" target="_empty" class="normalsize">Fred H. Gage, Ph.D.</A> <!--$10,000 contribution -->
+<LI><span HREF="http://www.salk.edu/faculty/faculty/details.php?id=23" target="_empty" class="broken_link normalsize">Fred H. Gage, Ph.D.</span> <!--$10,000 contribution -->
<BR>Grant Support: Lookout Foundation
<LI>Dan Goldowitz, Ph.D. <!--$30,000 contribution -->
@@ -201,7 +201,7 @@
<LI>Shirlean Goodwin, Ph.D. <!--All array processing-->
<BR>Grant Support: NIAAA INIA U01AA013515
-<LI><A HREF="http://www.bccn-berlin.de/ResearchGroups/Kempermann" target="_empty" class="normalsize">Gerd Kempermann, M.D.</A> <!--$30,000 contribution -->
+<LI><span HREF="http://www.bccn-berlin.de/ResearchGroups/Kempermann" class="broken_link normalsize">Gerd Kempermann, M.D.</span> <!--$30,000 contribution -->
<BR>Grant Support: The <A HREF="http://www.volkswagen-stiftung.de/" target="_empty" class="normalsize">Volkswagen Foundation</A> Grant on Permissive and Persistent Factors in Neurogenesis in the Adult Central Nervous System
<BR>Humboldt-Universitat Berlin
<BR>Universitatsklinikum Charite
@@ -241,7 +241,7 @@
</UL><br><br></td></tr>
<tr><td><span style="font-size:115%;font-weight:bold;">Citation:</span></td></tr>
<tr><td>
-<P>Please cite: Overall RW, Kempermann G, Peirce J, Lu L, Goldowitz D, Gage FH, Goodwin S, Smit AB, Airey DC, Rosen GD, Schalkwyk LC, Sutter TR, Nowakowski RS, Whatley S, Williams RW (<a href="http://frontiersin.org/neurogenomics/paper/pending/0/815/" target="_blank" class="normalsize">2009</a>) Genetics of the hippocampal transcriptome in mice: a systematic survey and online neurogenomic resource. Front. Neurogen. 1:3 <A href="http://frontiersin.org/neurogenomics/paper/pending/0/815/" target="_blank" class="smallsize"><I>Full Text HTML</I></A> doi:10.3389/neuro.15.003.2009
+<P>Please cite: Overall RW, Kempermann G, Peirce J, Lu L, Goldowitz D, Gage FH, Goodwin S, Smit AB, Airey DC, Rosen GD, Schalkwyk LC, Sutter TR, Nowakowski RS, Whatley S, Williams RW (<span class="broken_link" href="http://frontiersin.org/neurogenomics/paper/pending/0/815/" target="_blank" class="normalsize">2009</span>) Genetics of the hippocampal transcriptome in mice: a systematic survey and online neurogenomic resource. Front. Neurogen. 1:3 <span href="http://frontiersin.org/neurogenomics/paper/pending/0/815/" target="_blank" class="broken_link smallsize"><I>Full Text HTML</I></A> doi:10.3389/neuro.15.003.2009
<br><br></td></tr>
<tr><td><span style="font-size:115%;font-weight:bold;">Submission Date:</span></td></tr>
diff --git a/wqflask/wqflask/templates/docedit.html b/wqflask/wqflask/templates/docedit.html
index b87c5b41..50bb96c0 100644
--- a/wqflask/wqflask/templates/docedit.html
+++ b/wqflask/wqflask/templates/docedit.html
@@ -16,7 +16,7 @@
{{content|safe}}
</textarea>
<button class="submit_changes" style="margin-top: 20px;">Submit Changes</button>
- <script src="/static/packages/ckeditor/ckeditor.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='ckeditor/ckeditor.js') }}"></script>
<script type="text/javascript">
CKEDITOR.replace('ckcontent', {
height: '650px',
diff --git a/wqflask/wqflask/templates/email/verification.txt b/wqflask/wqflask/templates/email/verification.txt
deleted file mode 100644
index 76149a3a..00000000
--- a/wqflask/wqflask/templates/email/verification.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Thank you for signing up for GeneNetwork.
-
-We need to verify your email address.
-
-To do that please click the following link, or cut and paste it into your browser window:
-
-{{ url_for_hmac("verify_email", code = verification_code, _external=True )}}
diff --git a/wqflask/wqflask/templates/environment.html b/wqflask/wqflask/templates/environment.html
new file mode 100644
index 00000000..89e805ce
--- /dev/null
+++ b/wqflask/wqflask/templates/environment.html
@@ -0,0 +1,160 @@
+{% extends "base.html" %}
+
+{% block title %}Glossary{% endblock %}
+
+{% block css %}
+<link rel="stylesheet" type="text/css" href="/static/new/css/markdown.css" />
+{% endblock %}
+
+{% block content %}
+
+<div id="markdown" class="container">
+
+ <div class="cls-table-style">{{ rendered_markdown|safe }} </div>
+</div>
+
+{% if svg_data %}
+
+<div class="graph-legend">
+ <h1>Chord dependency Graph of Genenetwork2</h1>
+ Graph generated from <a href="http://git.genenetwork.org/guix-bioinformatics/guix-bioinformatics/src/branch/master/gn/packages/genenetwork.scm">genenetwork.scm</a>. You can zoom in and out within the bounding box.
+</div>
+
+<div id="guix-graph"></div>
+
+<!-- Display the svg graph -->
+
+<div id="guix-svg-graph">
+ <h1>The dependency graph is shown below</h1>
+
+ <p>To explore this image SVG you may want to open it in new browser page and zoom in. Or use an SVG viewing application.</p>
+
+ <img alt="Dependency graph of the tools needed to build python3-genenetwork2" src="{{url_for('environments_blueprint.svg_graph')}}"/>
+</div>
+{% endif %}
+
+{% endblock %}
+
+{% block js %}
+
+{% if svg_data %}
+<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='d3js/d3.min.js') }}"></script>
+<script type="text/javascript">
+ {{ svg_data|safe }}
+ // based on http://bl.ocks.org/mbostock/1046712 under GPLv3
+ // Adapted from: https://elephly.net/graph.html
+ var outerRadius = (nodeArray.length * 10) / 2,
+ innerRadius = outerRadius - 100,
+ width = outerRadius * 2,
+ height = outerRadius * 2,
+ colors = d3.scale.category20c(),
+ matrix = [];
+
+ function neighborsOf (node) {
+ return links.filter(function (e) {
+ return e.source === node;
+ }).map(function (e) {
+ return e.target;
+ });
+ }
+
+ function zoomed () {
+ zoomer.attr("transform",
+ "translate(" + d3.event.translate + ")" +
+ "scale(" + d3.event.scale + ")");
+ }
+
+ function fade (opacity, root) {
+ return function (g, i) {
+ root.selectAll("g path.chord")
+ .filter(function (d) {
+ return d.source.index != i && d.target.index != i;
+ })
+ .transition()
+ .style("opacity", opacity);
+ };
+ }
+
+ // Now that we have all nodes in an object we can replace each reference
+ // with the actual node object.
+ links.forEach(function (link) {
+ link.target = nodes[link.target];
+ link.source = nodes[link.source];
+ });
+
+ // Construct a square matrix for package dependencies
+ nodeArray.forEach(function (d, index, arr) {
+ var source = index,
+ row = matrix[source];
+ if (!row) {
+ row = matrix[source] = [];
+ for (var i = -1; ++i < arr.length;) row[i] = 0;
+ }
+ neighborsOf(d).forEach(function (d) { row[d.index]++; });
+ });
+
+ // chord layout
+ var chord = d3.layout.chord()
+ .padding(0.01)
+ .sortSubgroups(d3.descending)
+ .sortChords(d3.descending)
+ .matrix(matrix);
+
+ var arc = d3.svg.arc()
+ .innerRadius(innerRadius)
+ .outerRadius(innerRadius + 20);
+
+ var zoom = d3.behavior.zoom()
+ .scaleExtent([0.1, 10])
+ .on("zoom", zoomed);
+
+ var svg = d3.select("#guix-graph").append("svg")
+ .attr("width", "100%")
+ .attr("height", "100%")
+ .attr('viewBox','0 0 '+Math.min(width,height)+' '+Math.min(width,height))
+ .attr('preserveAspectRatio','xMinYMin')
+ .call(zoom);
+
+ var zoomer = svg.append("g");
+
+ var container = zoomer.append("g")
+ .attr("transform", "translate(" + outerRadius + "," + outerRadius + ")");
+
+ // Group for arcs and labels
+ var g = container.selectAll(".group")
+ .data(chord.groups)
+ .enter().append("g")
+ .attr("class", "group")
+ .on("mouseout", fade(1, container))
+ .on("mouseover", fade(0.1, container));
+
+ // Draw one segment per package
+ g.append("path")
+ .style("fill", function (d) { return colors(d.index); })
+ .style("stroke", function (d) { return colors(d.index); })
+ .attr("d", arc);
+
+ // Add circular labels
+ g.append("text")
+ .each(function (d) { d.angle = (d.startAngle + d.endAngle) / 2; })
+ .attr("dy", ".35em")
+ .attr("transform", function (d) {
+ return "rotate(" + (d.angle * 180 / Math.PI - 90) + ")"
+ + "translate(" + (innerRadius + 26) + ")"
+ + (d.angle > Math.PI ? "rotate(180)" : "");
+ })
+ .style("text-anchor", function (d) { return d.angle > Math.PI ? "end" : null; })
+ .text(function (d) { return nodeArray[d.index].label; });
+
+ // Draw chords from source to target; color by source.
+ container.selectAll(".chord")
+ .data(chord.chords)
+ .enter().append("path")
+ .attr("class", "chord")
+ .style("stroke", function (d) { return d3.rgb(colors(d.source.index)).darker(); })
+ .style("fill", function (d) { return colors(d.source.index); })
+ .attr("d", d3.svg.chord().radius(innerRadius));
+</script>
+{% endif %}
+
+{% endblock %}
diff --git a/wqflask/wqflask/templates/environments.html b/wqflask/wqflask/templates/environments.html
deleted file mode 100644
index 5ef91a95..00000000
--- a/wqflask/wqflask/templates/environments.html
+++ /dev/null
@@ -1,83 +0,0 @@
-{% extends "base.html" %}
-
-{% block title %}Environments{% endblock %}
-
-{% block content %}
-<div class="container">
- <h3>System Properties</h3>
- <table class="table table-bordered table-striped table-hover" style="width: 800px;">
- <tbody>
- <tr><td colspan="4">Operating System</td></tr>
- <tr>
- <td style="text-align: right;">Ubuntu</td>
- <td>12.04.5 LTS 64-bit</td>
- <td><a target="_blank" href="http://www.ubuntu.com/">http://www.ubuntu.com/</a></td>
- <td>Free software licenses (mainly GPL)</td>
- </tr>
- <tr><td colspan="4">Database</td></tr>
- <tr>
- <td style="text-align: right;">MySQL</td>
- <td>5.5.40</td>
- <td><a target="_blank" href="http://www.mysql.com/">http://www.mysql.com/</a></td>
- <td>GPL (version 2) or proprietary</td>
- </tr>
- <tr><td colspan="4">Python</td></tr>
- <tr>
- <td style="text-align: right;">Python</td>
- <td>2.7.3</td>
- <td><a target="_blank" href="http://www.python.org/">http://www.python.org/</a></td>
- <td>Python Software Foundation License</td>
- </tr>
- <tr>
- <td style="text-align: right;">Flask</td>
- <td>0.9</td>
- <td><a target="_blank" href="http://flask.pocoo.org/">http://flask.pocoo.org/</a></td>
- <td>BSD</td>
- </tr>
- <tr>
- <td style="text-align: right;">Jinja2</td>
- <td>2.6</td>
- <td><a target="_blank" href="http://jinja.pocoo.org/">http://jinja.pocoo.org/</a></td>
- <td>BSD</td>
- </tr>
- <tr>
- <td style="text-align: right;">NumPy</td>
- <td>1.7.0</td>
- <td><a target="_blank" href="http://www.numpy.org/">http://www.numpy.org/</a></td>
- <td>BSD-new</td>
- </tr>
- <tr>
- <td style="text-align: right;">SciPy</td>
- <td>0.11.0</td>
- <td><a target="_blank" href="http://www.scipy.org/">http://www.scipy.org/</a></td>
- <td>BSD-new</td>
- </tr>
- <tr><td colspan="4">JavaScript / CSS</td></tr>
- <tr>
- <td style="text-align: right;">jQuery</td>
- <td>1.10.2</td>
- <td><a target="_blank" href="http://jquery.com/">http://jquery.com/</a></td>
- <td>MIT</td>
- </tr>
- <tr>
- <td style="text-align: right;">Bootstrap</td>
- <td>2.3.1</td>
- <td><a target="_blank" href="http://getbootstrap.com/">http://getbootstrap.com/</a></td>
- <td>MIT License (Apache License 2.0 prior to 3.1.0)</td>
- </tr>
- <tr>
- <td style="text-align: right;">DataTables</td>
- <td>1.9.4</td>
- <td><a target="_blank" href="http://www.datatables.net/">http://www.datatables.net/</a></td>
- <td>MIT</td>
- </tr>
- <tr>
- <td style="text-align: right;">CKEditor</td>
- <td>4.4.5</td>
- <td><a target="_blank" href="http://ckeditor.com/">http://ckeditor.com/</a></td>
- <td>GPL, LGPL and MPL</td>
- </tr>
- </tbody>
- </table>
-</div>
-{% endblock %}
diff --git a/wqflask/wqflask/templates/facilities.html b/wqflask/wqflask/templates/facilities.html
new file mode 100644
index 00000000..56b127f9
--- /dev/null
+++ b/wqflask/wqflask/templates/facilities.html
@@ -0,0 +1,24 @@
+{% extends "base.html" %}
+
+{% block title %}Facilities{% endblock %}
+
+{% block css %}
+<link rel="stylesheet" type="text/css" href="/static/new/css/markdown.css" />
+{% endblock %}
+
+{% block content %}
+
+ <div class="github-btn-container">
+ <div class="github-btn">
+ <a href="https://github.com/genenetwork/gn-docs/blob/master/general/help/facilities.md">
+ Edit Text
+ <img src="/static/images/edit.png">
+ </a>
+ </div>
+</div>
+<div id="markdown" class="container">
+ {{ rendered_markdown|safe }}
+
+</div>
+
+{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/templates/glossary.html b/wqflask/wqflask/templates/glossary.html
new file mode 100644
index 00000000..aaee7c5a
--- /dev/null
+++ b/wqflask/wqflask/templates/glossary.html
@@ -0,0 +1,23 @@
+{% extends "base.html" %}
+
+{% block title %}Glossary{% endblock %}
+
+{% block css %}
+<link rel="stylesheet" type="text/css" href="/static/new/css/markdown.css" />
+{% endblock %}
+
+{% block content %}
+
+<div class="github-btn-container">
+ <div class="github-btn">
+ <a href="https://github.com/genenetwork/gn-docs/blob/master/general/glossary/glossary.md">
+ Edit Text
+ <img src="/static/images/edit.png">
+ </a>
+ </div>
+</div>
+<div id="markdown" class="container">
+
+ {{ rendered_markdown|safe }}
+</div>
+{% endblock %}
diff --git a/wqflask/wqflask/templates/gsearch_gene.html b/wqflask/wqflask/templates/gsearch_gene.html
index 8c261eec..6fd0abe8 100644
--- a/wqflask/wqflask/templates/gsearch_gene.html
+++ b/wqflask/wqflask/templates/gsearch_gene.html
@@ -20,7 +20,7 @@
<button class="btn btn-default" id="select_all"><span class="glyphicon glyphicon-ok"></span> Select All</button>
<button class="btn btn-default" id="deselect_all"><span class="glyphicon glyphicon-remove"></span> Deselect All</button>
<button class="btn btn-default" id="invert"><span class="glyphicon glyphicon-resize-vertical"></span> Invert</button>
- <button class="btn btn-default" id="add" disabled ><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
+ <button class="btn btn-success" id="add" disabled ><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
<input type="text" id="searchbox" class="form-control" style="width: 180px; display: inline;" placeholder="Search This Table For ...">
<input type="text" id="select_top" class="form-control" style="width: 120px; display: inline;" placeholder="Select Top ...">
<form id="export_form" method="POST" action="/export_traits_csv" style="display: inline;">
@@ -46,33 +46,19 @@
{% endblock %}
{% block js %}
- <script language="javascript" type="text/javascript" src="/static/new/js_external/md5.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/javascript/search_results.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/md5.min.js') }}"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colReorder.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colResize.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jszip/jszip.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/colReorder/js/dataTables.colReorder.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/colResize/dataTables.colResize.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/search_results.js"></script>
<script type='text/javascript'>
var the_rows = {{ trait_list|safe }};
</script>
<script type="text/javascript" charset="utf-8">
- $.fn.dataTable.ext.order['dom-checkbox'] = function ( settings, col )
- {
- return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
- return $('input', td).prop('checked') ? '1' : '0';
- } );
- };
-
- $.fn.dataTable.ext.order['dom-inner-text'] = function ( settings, col )
- {
- return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
- return $(td).text();
- } );
- }
-
$(document).ready( function () {
$('#trait_table tr').click(function(event) {
@@ -218,41 +204,42 @@
},
{
'title': "Location",
- 'type': "natural",
+ 'type': "natural-minus-na",
'width': "100px",
'data': "location_repr"
},
{
'title': "Mean",
- 'type': "natural",
+ 'type': "natural-minus-na",
'data': "mean",
'orderSequence': [ "desc", "asc"]
},
{
- 'title': "Max<br>LRS<a href=\"http://genenetwork.org//glossary.html#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
- 'type': "natural",
+ 'title': "Max<br>LRS<a href=\"{{ url_for('glossary_blueprint.glossary') }}#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
+ 'type': "natural-minus-na",
'data': "LRS_score_repr",
'orderSequence': [ "desc", "asc"]
},
{
'title': "Max LRS<br>Location",
- 'type': "natural",
+ 'type': "natural-minus-na",
'width': "100px",
'data': "max_lrs_text"
},
{
- 'title': "Additive<br>Effect<a href=\"http://genenetwork.org//glossary.html#A\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
- 'type': "natural",
+ 'title': "Additive<br>Effect<a href=\"{{ url_for('glossary_blueprint.glossary') }}#A\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
+ 'type': "natural-minus-na",
'width': "50px",
'data': "additive",
'orderSequence': [ "desc", "asc"]
}
],
'order': [[1, "asc" ]],
- 'sDom': "tir",
+ 'sDom': "pitirp",
'autoWidth': true,
- 'deferRender': true,
- 'paging': false,
+ 'iDisplayLength': 500,
+ 'deferRender': false,
+ 'paging': true,
'orderClasses': true,
'processing': true,
'language': {
@@ -275,9 +262,9 @@
'<th>Description</th>' +
'<th>Location</th>' +
'<th>Mean</th>' +
- '<th>Max LRS <a href="http://genenetwork.org//glossary.html#LRS" target="_blank" style="color: white;"><sup>?</sup></a></th>' +
+ '<th>Max LRS <a href="{{ url_for('glossary_blueprint.glossary') }}#LRS" target="_blank" style="color: white;"><sup>?</sup></a></th>' +
'<th>Max LRS Location</th>' +
- '<th>Additive Effect <a href="http://genenetwork.org//glossary.html#A" target="_blank" style="color: white;"><sup>?</sup></a></th>' +
+ '<th>Additive Effect <a href="{{ url_for('glossary_blueprint.glossary') }}#A" target="_blank" style="color: white;"><sup>?</sup></a></th>' +
'</tr>' +
'</tfoot>'
);
diff --git a/wqflask/wqflask/templates/gsearch_pheno.html b/wqflask/wqflask/templates/gsearch_pheno.html
index 05b2f988..987b51a7 100644
--- a/wqflask/wqflask/templates/gsearch_pheno.html
+++ b/wqflask/wqflask/templates/gsearch_pheno.html
@@ -20,7 +20,7 @@
<button class="btn btn-default" id="select_all"><span class="glyphicon glyphicon-ok"></span> Select All</button>
<button class="btn btn-default" id="deselect_all"><span class="glyphicon glyphicon-remove"></span> Deselect All</button>
<button class="btn btn-default" id="invert"><span class="glyphicon glyphicon-resize-vertical"></span> Invert</button>
- <button class="btn btn-default" id="add" disabled ><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
+ <button class="btn btn-success" id="add" disabled ><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
<input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline;" placeholder="Search This Table For ...">
<input type="text" id="select_top" class="form-control" style="width: 200px; display: inline;" placeholder="Select Top ...">
<form id="export_form" method="POST" action="/export_traits_csv" style="display: inline;">
@@ -31,7 +31,7 @@
</form>
<br />
<br />
- <div style="width: 100%;">
+ <div style="min-width: 2000px; width: 100%;">
<table id="trait_table" class="table-hover table-striped cell-border" style="float: left;">
<tbody>
<td colspan="100%" align="center"><br><b><font size="15">Loading...</font></b><br></td>
@@ -46,33 +46,19 @@
{% endblock %}
{% block js %}
- <script language="javascript" type="text/javascript" src="/static/new/js_external/md5.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/javascript/search_results.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/md5.min.js') }}"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colReorder.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colResize.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jszip/jszip.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/colReorder/js/dataTables.colReorder.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/colResize/dataTables.colResize.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/search_results.js"></script>
<script type='text/javascript'>
var the_rows = {{ trait_list|safe }};
</script>
<script type="text/javascript" charset="utf-8">
- $.fn.dataTable.ext.order['dom-checkbox'] = function ( settings, col )
- {
- return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
- return $('input', td).prop('checked') ? '1' : '0';
- } );
- };
-
- $.fn.dataTable.ext.order['dom-inner-text'] = function ( settings, col )
- {
- return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
- return $(td).text();
- } );
- }
-
$(document).ready( function () {
$('#trait_table tr').click(function(event) {
@@ -131,6 +117,7 @@
$('td', row).eq(6).text($('td', row).eq(6).text().substring(0, 150));
$('td', row).eq(6).text($('td', row).eq(6).text() + '...')
}
+ $('td', row).eq(6).attr("align", "right");
$('td', row).slice(8,11).attr("align", "right");
$('td', row).eq(1).attr('data-export', $('td', row).eq(1).text());
$('td', row).eq(2).attr('data-export', $('td', row).eq(2).text());
@@ -172,6 +159,7 @@
'title': "Record",
'type': "natural",
'data': null,
+ 'orderDataType': "dom-inner-text",
'render': function(data, type, row, meta) {
return '<a target="_blank" href="/show_trait?trait_id=' + data.name + '&dataset=' + data.dataset + '">' + data.display_name + '</a>'
}
@@ -191,7 +179,7 @@
},
{
'title': "Mean",
- 'type': "natural",
+ 'type': "natural-minus-na",
'width': "10%",
'data': "mean"
},
@@ -218,7 +206,7 @@
},
{
'title': "Year",
- 'type': "natural",
+ 'type': "natural-minus-na",
'data': null,
'orderDataType': "dom-inner-text",
'render': function(data, type, row, meta) {
@@ -231,29 +219,30 @@
'orderSequence': [ "desc", "asc"]
},
{
- 'title': "Max LRS<a href=\"http://genenetwork.org//glossary.html#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
- 'type': "natural",
+ 'title': "Max LRS<a href=\"{{ url_for('glossary_blueprint.glossary') }}#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
+ 'type': "natural-minus-na",
'data': "LRS_score_repr",
'orderSequence': [ "desc", "asc"]
},
{
'title': "Max LRS Location",
- 'type': "natural",
+ 'type': "natural-minus-na",
'width': "10%",
'data': "max_lrs_text"
},
{
- 'title': "Additive Effect<a href=\"http://genenetwork.org//glossary.html#A\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
- 'type': "natural",
+ 'title': "Additive Effect<a href=\"{{ url_for('glossary_blueprint.glossary') }}#A\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
+ 'type': "natural-minus-na",
'data': "additive",
'orderSequence': [ "desc", "asc"]
}
],
'order': [[1, "asc" ]],
- 'sDom': "tir",
+ 'sDom': "pitirp",
'autoWidth': false,
- 'deferRender': true,
- 'paging': false,
+ 'deferRender': false,
+ 'iDisplayLength': 500,
+ 'paging': true,
'orderClasses': true,
'processing': true,
'language': {
diff --git a/wqflask/wqflask/templates/heatmap.html b/wqflask/wqflask/templates/heatmap.html
index 275ff1ba..92754266 100644
--- a/wqflask/wqflask/templates/heatmap.html
+++ b/wqflask/wqflask/templates/heatmap.html
@@ -1,7 +1,7 @@
{% extends "base.html" %}
{% block title %}Heatmap{% endblock %}
{% block css %}
- <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='d3-tip/d3-tip.css') }}" />
<link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />
{% endblock %}
{% block content %} <!-- Start of body -->
@@ -32,13 +32,13 @@
js_data = {{ js_data | safe }}
</script>
- <script language="javascript" type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='d3js/d3.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='d3-tip/d3-tip.js') }}"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/lodheatmap.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/lod_chart.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/curvechart.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/iplotMScanone_noeff.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script>
{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/templates/index_page.html b/wqflask/wqflask/templates/index_page.html
index f8720d39..31846f87 100644
--- a/wqflask/wqflask/templates/index_page.html
+++ b/wqflask/wqflask/templates/index_page.html
@@ -140,7 +140,7 @@
chromosome 1 between 25 and 30 Mb.</li>
<li><b>MEAN=(15 16) LRS=(23 46)</b> in the <b>Combined</b> field finds
- highly expressed genes (15 to 16 log2 units) AND with peak <a href="http://www.genenetwork.org/glossary.html#L">LRS</a>
+ highly expressed genes (15 to 16 log2 units) AND with peak <a href="{{ url_for('glossary_blueprint.glossary') }}#L">LRS</a>
linkage between 23 and 46.</li>
<li><b>RANGE=(1.5 2.5)</b> in the <b>Any</b> field finds traits with values with a specified fold-range (minimum = 1).
@@ -157,12 +157,12 @@
<a href="http://amigo.geneontology.org/amigo/medial_search?q=GO%3A0045202">Gene Ontology</a>.</li>
<li><b>GO:0045202 LRS=(9 99 Chr4 122 155) cisLRS=(9 999 10)</b>
- finds synapse-associated genes with <a href="http://www.genenetwork.org/glossary.html#E">
+ finds synapse-associated genes with <a href="{{ url_for('glossary_blueprint.glossary') }}#E">
cis eQTL</a> on Chr 4 from 122 and 155 Mb with LRS scores
between 9 and 999.</li>
<li><b>RIF=diabetes LRS=(9 999 Chr2 100 105) transLRS=(9 999 10)</b>
- finds diabetes-associated transcripts with peak <a href="http://www.genenetwork.org/glossary.html#E">
+ finds diabetes-associated transcripts with peak <a href="{{ url_for('glossary_blueprint.glossary') }}#E">
trans eQTLs</a> on Chr 2 between 100 and 105 Mb with LRS
scores between 9 and 999.</li>
</ul>
@@ -203,14 +203,13 @@
</div>
<h3>Websites affiliated with GeneNetwork</h3>
<ul>
- <li><a href="http://ucscbrowser.genenetwork.org/">Genome
- browser</a> at UTHSC</li>
+ <li><span class="broken_link" href="http://ucscbrowser.genenetwork.org/">Genome Browser</span> at UTHSC</li>
<li><a href="http://galaxy.genenetwork.org/">Galaxy</a> at
UTHSC</li>
- <li>GeneNetwork 1 at <a href="http://ec2.genenetwork.org/">Amazon
- Cloud (EC2)</a></li>
+ <li>GeneNetwork 1 at <span class="broken_link" href="http://ec2.genenetwork.org/">Amazon
+ Cloud (EC2)</span></li>
<li>GeneNetwork 1 Source Code at <a href="http://sourceforge.net/projects/genenetwork/">SourceForge</a></li>
@@ -220,7 +219,7 @@
<ul>
<li><a href="http://gn1.genenetwork.org/">Main GN1 site at UTHSC</a> (main site)</li>
- <li><a href="http://genenetwork.helmholtz-hzi.de/">Germany at the HZI</a></li>
+ <li><span class="broken_link" href="http://genenetwork.helmholtz-hzi.de/">Germany at the HZI</span></li>
<li><a href="http://genenetwork.org/">Memphis at the U of M</a></li>
</ul>
</section>
diff --git a/wqflask/wqflask/templates/index_page_orig.html b/wqflask/wqflask/templates/index_page_orig.html
index 06b71f53..7f82b35c 100755
--- a/wqflask/wqflask/templates/index_page_orig.html
+++ b/wqflask/wqflask/templates/index_page_orig.html
@@ -17,13 +17,13 @@
</header>
-->
- <div class="container-fluid" style="min-width: 1200px;">
+ <div class="container-fluid" style="min-width: 1210px;">
{{ flash_me() }}
<div class="row" style="width: 100%;">
- <div class="col-xs-5" style="min-width: 530px; max-width: 550px;">
+ <div class="col-xs-4" style="margin-right:50px; min-width: 530px; max-width: 550px;">
<section id="search">
<div>
<h1>Select and search</h1>
@@ -43,11 +43,14 @@
<div class="form-group">
<label for="group" class="col-xs-1 control-label" style="width: 65px !important;">Group:</label>
- <div class="col-xs-10 controls input-append" style="padding-left: 20px;">
+ <div class="col-xs-10 controls input-append" style="display: flex; padding-left: 20px;">
<div class="col-9">
<select name="group" id="group" class="form-control" style="width: 340px !important;"><option>Loading...</option></select>
<i class="icon-question-sign"></i>
</div>
+ <div class="col-3" style="margin-left: 10px;">
+ <button type="button" id="group_info" class="btn btn-primary form-control" style="width: 50px !important;">Info</button>
+ </div>
</div>
</div>
@@ -58,7 +61,7 @@
<select name="type" id="type" class="form-control" style="width: 340px !important;"><option>Loading...</option></select>
</div>
<div class="col-3" style="margin-left: 10px;">
- <button type="button" id="dataset_info" class="btn btn-primary form-control" style="width: 75px !important;">Info</button>
+ <button type="button" id="dataset_info" class="btn btn-primary form-control" style="width: 50px !important;">Info</button>
</div>
</div>
</div>
@@ -84,7 +87,7 @@
<label for="or_search" class="col-xs-1 control-label" style="padding-left: 0px; padding-right: 0px; width: 65px !important;">Get Any:</label>
<div class="col-xs-10 controls" style="padding-left: 20px;">
<div class="col-8">
- <textarea onkeydown="pressed(event)" name="search_terms_or" rows="1" class="form-control search-query" style="max-width: 550px; width: 450px !important;" id="or_search"></textarea>
+ <textarea onkeydown="pressed(event)" name="search_terms_or" rows="1" class="form-control search-query" style="resize: vertical; max-width: 550px; width: 450px !important;" id="or_search"></textarea>
</div>
</div>
</div>
@@ -105,7 +108,7 @@
<label for="and_search" class="col-xs-1 control-label" style="padding-left: 0px; padding-right: 0px; width: 65px !important;">Combined:</label>
<div class="col-xs-10 controls" style="padding-left: 20px;">
<div class="col-8">
- <textarea onkeydown="pressed(event)" name="search_terms_and" rows="1" class="form-control search-query" style="max-width: 550px; width: 450px !important;" id="and_search"></textarea>
+ <textarea onkeydown="pressed(event)" name="search_terms_and" rows="1" class="form-control search-query" style="resize: vertical; max-width: 550px; width: 450px !important;" id="and_search"></textarea>
</div>
</div>
</div>
@@ -177,20 +180,20 @@
Gene Ontology</a>.</li>
<li><b>RIF=diabetes LRS=(9 999 Chr2 100 105) transLRS=(9 999 10)</b>
- finds diabetes-associated transcripts with peak <a href="http://gn1.genenetwork.org/glossary.html#E">
+ finds diabetes-associated transcripts with peak <a href="{{ url_for('glossary_blueprint.glossary') }}#E">
trans eQTLs</a> on Chr 2 between 100 and 105 Mb with LRS
scores between 9 and 999.</li>
</ul>
</section>
</div>
- <div style="padding-left:80px" class="col-xs-4" style="width: 600px !important;">
+ <div class="col-xs-4" style="width: 600px !important;">
<section id="affiliates">
<div class="page-header">
<h1>Affiliates</h1>
<ul>
<li><b><a href="http://gn1.genenetwork.org">GeneNetwork 1</a> at UTHSC</b></li>
- <li><a href="http://ucscbrowser.genenetwork.org/">Genome Browser</a> at UTHSC</li>
+ <li><span class="broken_link" href="http://ucscbrowser.genenetwork.org/">Genome Browser</span> at UTHSC</li>
<li><a href="https://systems-genetics.org/">Systems Genetics</a> at EPFL</li>
<li><a href="http://bnw.genenetwork.org/">Bayesian Network Web Server</a> at UTHSC</li>
<li><a href="https://www.geneweaver.org/">GeneWeaver</a></li>
@@ -260,7 +263,7 @@
<h3>GeneNetwork v1:</h3>
<ul>
<li><a href="http://gn1.genenetwork.org/">Main website</a> at UTHSC</li>
- <li><a href="http://artemis.uthsc.edu/">Time Machine</a>: Full GN versions from 2009 to 2016 (mm9)</li>
+ <li><span class="broken_link" href="http://artemis.uthsc.edu/">Time Machine</span>: Full GN versions from 2009 to 2016 (mm9)</li>
Cloud (EC2)</a></li>
</ul>
<script type="text/javascript" src="//rf.revolvermaps.com/0/0/8.js?i=526mdlpknyd&amp;m=0&amp;c=ff0000&amp;cr1=ffffff&amp;f=arial&amp;l=33" async="async"></script>
@@ -326,7 +329,7 @@
}
</script>
- <script type="text/javascript" src="/twitter/js/twitterFetcher_min.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='javascript-twitter-post-fetcher/js/twitterFetcher_min.js') }}"></script>
<script type="text/javascript">
var configProfile = {
diff --git a/wqflask/wqflask/templates/info_page.html b/wqflask/wqflask/templates/info_page.html
new file mode 100644
index 00000000..d8b7d74c
--- /dev/null
+++ b/wqflask/wqflask/templates/info_page.html
@@ -0,0 +1,92 @@
+{% extends "base.html" %}
+{% block title %}Policies{% endblock %}
+{% block content %}
+
+<h1 id="parent-fieldname-title">Data Set Group: {{ info.dataset_name }}
+<!--<a href="/infoshare/manager/member-studies-edit.html?DatasetId=%s"><img src="/images/modify.gif" alt="modify this page" border="0" valign="middle"></a>-->
+<span style="color:red;">{{ info.info_page_name }}</span>
+</h1>
+<table border="0" width="100%">
+<tr>
+<td valign="top" width="50%">
+<table name="info_table" cellSpacing=0 cellPadding=5 width=100% border=0>
+ <tr><td><b>Data Set:</b> {{ info.info_file_title }} <!--<a href="/infoshare/manager/member-infofile-edit.html?GN_AccesionId=%s"><img src="/images/modify.gif" alt="modify this page" border="0" valign="middle"></a>--></td></tr>
+ <tr><td><b>GN Accession:</b> GN{{ gn_accession_id }}</td></tr>
+ <tr><td><b>GEO Series:</b> <a href="http://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc={{ info.geo_series }}" target="_blank">{{ info.geo_series }}</a></td></tr>
+ <tr><td><b>Title:</b> {{ info.publication_title }}</td></tr>
+ <tr><td><b>Organism:</b> <a href="http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id={{ info.taxonomy_id }}" target="_blank">{{ info.menu_name }}</a></td></tr>
+ <tr><td><b>Group:</b> {{ info.group_name }}</td></tr>
+ <tr><td><b>Tissue:</b> {{ info.tissue_name }}</td></tr>
+ <tr><td><b>Dataset Status:</b> {{ info.dataset_status_name }}</td></tr>
+ <tr><td><b>Platforms:</b> <a href="http://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc={{ info.geo_platform }}" target="_blank">{{ info.gene_chip_name }}</a></td></tr>
+ <tr><td><b>Normalization:</b> {{ info.avg_method_name }}</td></tr>
+</table>
+</td>
+<td valign="top" width="50%">
+<table border="0" width="100%">
+ <tr>
+ <td><b>Contact Information</b></td>
+ </tr>
+ <tr>
+ <td>
+ {{ info.investigator_first_name }} {{ info.inveestigator_last_name }}<br>
+ {{ info.organization_name }} <br>
+ {{ info.investigator_address }}<br>
+ {{ info.investigator_city }}, {{ info.investigator_state }} {{ info.investigator_zipcode }} {{ info.investigator_country }}<br>
+ Tel. {{ info.investigator_phone }}<br>
+ {{ info.investigator_email }}<br>
+ <a href="{{ info.investigator_url }}" target="_blank">Website</a>
+ </td>
+ </tr>
+
+<tr>
+ <td><b>Download datasets and supplementary data files</b></td>
+</tr>
+<tr>
+ <td>
+ <ul style="line-height: 160%">
+ {% for file in filelist %}
+ <li><a href="http://datafiles.genenetwork.org/download/GN{{ gn_accession_id }}/{{ file[0] }}">{{ file[0] }} ({{ file[2] }})</a></li>
+ {% endfor %}
+ </ul>
+ </td>
+</tr>
+
+<tr><td>
+</td></tr>
+
+</table>
+</td>
+</tr>
+</table>
+<HR>
+<p>
+<table name="info_table" width="100%" border="0" cellpadding="5" cellspacing="0">
+<tr><td><span style="font-size:115%%;font-weight:bold;">Specifics of this Data Set:</span></td></tr>
+ <tr><td> {{ info.specifics|safe }}<br><br></td></tr>
+<tr><td><span style="font-size:115%%;font-weight:bold;">Summary:</span></td></tr>
+ <tr><td> {{ info.dataset_summary|safe }}<br><br></td></tr>
+<tr><td><span style="font-size:115%; font-weight:bold;">About the cases used to generate this set of data:</span></td></tr>
+ <tr><td> {{ info.about_cases|safe }}<br><br></td></tr>
+<tr><td><span style="font-size:115%; font-weight:bold;">About the tissue used to generate this set of data:</span></td></tr>
+ <tr><td> {{ info.about_tissue|safe }}<br><br></td></tr>
+ <tr><td><span style="font-size:115%; font-weight:bold;">About the array platform:</span></td></tr>
+ <tr><td> {{ info.about_platform|safe }}<br><br></td></tr>
+<tr><td><span style="font-size:115%; font-weight:bold;">About data values and data processing:</span></td></tr>
+ <tr><td> {{ info.about_data_processing|safe }}<br><br></td></tr>
+<tr><td><span style="font-size:115%; font-weight:bold;">Notes:</span></td></tr>
+ <tr><td> {{ info.notes|safe }}<br><br></td></tr>
+<tr><td><span style="font-size:115%; font-weight:bold;">Experiment Type:</span></td></tr>
+ <tr><td> {{ info.experiment_design|safe }}<br><br></td></tr>
+<tr><td><span style="font-size:115%; font-weight:bold;">Contributor:</span></td></tr>
+ <tr><td> {{ info.contributors|safe }}<br><br></td></tr>
+<tr><td><span style="font-size:115%; font-weight:bold;">Citation:</span></td></tr>
+ <tr><td> {{ info.citation|safe }}<br><br></td></tr>
+<tr><td><span style="font-size:115%; font-weight:bold;">Data source acknowledgment:</span></td></tr>
+ <tr><td> {{ info.acknowledgement|safe }}<br><br></td></tr>
+<tr><td><span style="font-size:115%; font-weight:bold;">Study Id:</span></td></tr>
+ <tr><td> {{ info.dataset_id }}<br><br></td></tr>
+</table>
+</p>
+
+{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/templates/links.html b/wqflask/wqflask/templates/links.html
index 6ff7fc6c..6e91adae 100644
--- a/wqflask/wqflask/templates/links.html
+++ b/wqflask/wqflask/templates/links.html
@@ -1,451 +1,24 @@
{% extends "base.html" %}
-{% block title %}Links{% endblock %}
-{% block content %}
-
-<Table width= "100%" cellSpacing=0 cellPadding=5><TR>
- <!-- Body Start from Here -->
- <TD vAlign=top width="100%" height=200>
-
-
-<P class="title">Links for Exploring Networks of Genes and Phenotypes </P>
-
-
-<Blockquote class="subtitle">GeneNetwork and WebQTL have integrated links to the following resources</Blockquote>
-<Blockquote>
-<Blockquote>GN PARTNERS, DEVELOPMENT SITES, AND MIRRORS</Blockquote>
-<UL>
-<LI><a href="http://genenetwork.helmholtz-hzi.de">German Helmholtz Foundation GeneNetwork</a> at the <A HREF="http://www.helmholtz-hzi.de/en/" target="_empty">Helmholtz Centre for Infection Research (HZI)</A>, Braunschweig Germany, in the <a href="hzi.de/en/research/research_groups/experimental_mouse_genetics/experimental_mouse_genetics/team/" target="_empty">research group</A> of Dr. Klaus Schughart.
-
-<LI><a href="http://genenetwork.epfl.ch" target="_empty">Swiss GeneNetwork</A> in the Laboratory of Integrative Systems Physiology lead by Dr. Johan Auwerx at the EPFL in Lausanne (initiated Nov 9, 2009)
-
-<LI><a href="http://www.genenetwork.waimr.uwa.edu.au">Australian GeneNetwork</a> mirror and development sites, Centre for Diabetes Research, University of Western Australia, in the research group of Dr. Grant Morahan <!--was http://130.95.9.19/--> (initiated May 2007)
-
-<LI><a href="http://webqtl.bic.nus.edu.sg/">Singapore GeneNetwork</a> mirror site at the National University of Singapore, Bioinformatics Center, Dr. Mark De Silva (initiated Oct 2009)
-
-<LI><a href="http://gn.genetics.ucla.edu" target="_empty">California GeneNetwork</A> mirror site in the Department of Genetics, University of California at Los Angeles, in the research group of Dr. A. Jake Lusis (initiated Aug 2008)
-
-<LI><a href="http://gnat.versailles.inra.fr/" target="_empty">INRA IJPB, Versailles</A> mirror site in the VAST lab of Dr. Olivier Loudet, Plant Breeding and Genetics Unit (initiated Dec 2008)
-
-
-<LI><a href="http://xzhou3.memphis.edu/" target="_empty">University of Memphis</A> mirror sites in the Bioinformatics Program and research group of Drs. Ramin Homayouni and Mohammed Yazin (initiated June 2009)
-
-<LI><a href="http://www.computablegenomix.com/">Computable Genomix </a> and the <A HREF="https://grits.eecs.utk.edu/sgo/sgo.html" target="_empty">Semantic Gene Organizer</A> systems are the source of GeneNetwork literature correlation data sets.
-
-<BR><BR><BR>
-<LI><a href="http://genenetwork.org/share/annotations/">Custom Microarray Annotation Files</a> used by GeneNetwork
-</UL>
-</Blockquote>
-
-<BR>
-
-<Blockquote class="subtitle">KEY RESOURCES CONNECTED WITH GENENETWORK</Blockquote>
-<Blockquote>
-<UL>
-<LI><a href="http://mus.well.ox.ac.uk/mouse/HS/" target="_empty">Wellcome Trust Oxford Mouse Resource Portal</a>
-<LI><a href="http://www.sanger.ac.uk/mouseportal/" target="_empty">WTSI Mouse Resource Portal</a>
-
-<LI><a href="http://www.sanger.ac.uk/cgi-bin/modelorgs/mousegenomes/lookseq/index.pl?show=1:10000000-10000000,paired_pileup&win=100&lane=129S1.bam&width=700" target="_empty">Sanger Mouse Sequencing Portal</a> (David Adams and colleagues)
-
-<LI><a href="http://www.grissom.gr/stranger/StRAnGER.php" target="_empty">StRAnGER</a> Gene Ontology and KEGG pathway analyzer
-
-<LI><a href="http://phenogen.ucdenver.edu/PhenoGen/index.jsp" target="_empty">PhenoGen Informatics</a>
-<LI><a href="http://www.brain-map.org/welcome.do" target="_empty">The Allen Mouse Brain Atlas</a>
-<LI><a href="http://amigo.geneontology.org/cgi-bin/amigo/go.cgi" target="_empty">AmiGO</a>
-<LI><a href="http://syndb.cbi.pku.edu.cn/" target="_empty">Synapse DB</a>
-<LI><a href="https://www.pantherdb.org" target="_empty">ABI Panther</a>
-<LI><a href="http://biogps.gnf.org" target="_empty">BioGPS</A> <font>and its predecessor </font> <a href="http://symatlas.gnf.org/SymAtlas/" target="_empty">SymAtlas</A>
-<LI><a href="http://mouse.perlegen.com/mouse/download.html
-" target="_empty">Perlegen/NIEHS Mouse Sequence Data</A>
-<LI><a href="http://www.ontologicaldiscovery.org/" target="_empty">Ontological Discovery Environment</a>
-<LI><a href="https://shad.eecs.utk.edu/sgo/sgo.html" target="_empty">Semantic Gene Organizer</a>
-<LI><a href="http://genome.ucsc.edu/" target="_empty">UCSC Genome Browser</A> and <a href="http://genome.brc.mcw.edu/" target="_empty">mirror</A>
-<LI><a href="http://www.ensembl.org/Mus_musculus/index.html" target="_empty">Ensembl</A>
-<LI><a href="http://www.ncbi.nlm.nih.gov/gquery/gquery.fcgi?itool=toolbar" target="_empty">NCBI</A>
-<LI><a href="http://phenome.jax.org/pub-cgi/phenome/mpdcgi?rtn=docs/home" target="_empty">Mouse Phenome Database</A> and the <a href="http://phenome.jax.org/pub-cgi/phenome/mpdcgi?rtn=snps/list_pre" target="_empty">MPP SNP Browser</A>
-<LI><a href="http://bioinfo.vanderbilt.edu/webgestalt/" target="_empty">WebGestalt</A>
-<LI><a href="http://grappa.eecs.utk.edu" target="_empty">GrAPPA</A> Clique-based clustering tool
-</UL>
-</Blockquote>
-
-<BR>
-<Blockquote class="subtitle">Resources for Analysis of Single Genes, SNPs, mRNAs, and Proteins</Blockquote>
-<Blockquote>
-<Blockquote>
-<a href="http://harvester.fzk.de/harvester/" target="_empty">Harvester</a> retrieves summary data on any one of 57,000 proteins from several bioinformatic resources.
-<SMALL>[Added Dec 22, 2004; last site review Sept 19, 2008 by RWW.]</SMALL>
-</Blockquote>
-
-<Blockquote>
-<a href="http://mus.well.ox.ac.uk/cgi/gscan/wwwqtl.cgi" target="_empty">GSCAN</a>: the Oxford Wellcome Trust Genome Viewer retrieves mapping data for many mouse experimental mapping populations including the Heterogenous Stock, the Pre-Collaborative Cross mice, and Mouse Diversity Panel.
-<SMALL>[Added Oct 13, 2010; last site review Oct 13, 2010 by RWW.]</SMALL>
-</Blockquote>
-
-
-
-
-<Blockquote>
-<a href="http://nif-apps-stage.neuinfo.org/nif/nifgwt.html" target="_empty">NIF</a>: The Neuroscience Information Framework retrieves summary from a wide variety of neuroscience and bioinformatic resources.
-<SMALL>[Added Dec 3, 2009; last site review Dec 3, 2009 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://genomics.senescence.info/" target="_empty">Genomics of aging resources</a>. A collection of databases and tools designed to help researchers understand the genetics of human ageing through a combination of functional genomics and evolutionary biology.
-<SMALL>[Added Feb 28, 2010; last site review Feb 28, 2010 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.hgmd.cf.ac.uk/ac/index.php" target="_empty">Human Disease Gene Database</a> from Cardiff (requires log in)
-<SMALL>[Added Nov 5, 2009; last site review Nov 5, 2009 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.snp-nexus.org/" target="_empty">SNPnexus</a> database of human SNPs is designed to simplify and assist in the selection of functionally relevant SNPs for large-scale genotyping studies of multifactorial disorders.<SMALL>[Added Jan 15, 2010; last site review Jan 15, 2010 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.snpedia.com/index.php/SNPedia" target="_empty">SNPedia</a> is a wiki investigating human genetics. We share information about the effects of variations in DNA, citing peer-reviewed scientific publications. It is used by Promethease to analyze and help explain your DNA.<SMALL>[Added Jan 15, 2010; last site review Jan 15, 2010 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="https://www.genoglyphix.com/ggx_browser/search/
-" target="_empty">Genoglyphix Browser</a> includes extensive data on human copy number variants as well as maps of low copy number repeat regions.
-<SMALL>[Added Nov 5, 2009; last site review Nov 5, 2009 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.hprd.org/query" target="_empty">Human Protein Reference DB</a>: a manually curated resource with data on 20,000 proteins. Very effective interface and rich data.
-<SMALL>[Added Oct 30, 2005; last site review Sept 19, 2008 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://xmap.picr.man.ac.uk" target="_empty">x:map</a> is a terrific visual display tool for exploring Affymetrix Exon array data sets for mouse and human transcriptomes.
-<SMALL>[Added April 18, 2008; last site review Sept 19, 2008 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.pdg.cnb.uam.es/UniPub/iHOP/" target="_empty">iHOP</a> retrieves PubMed sentences that report interactions between a reference gene and associate genes and proteins. It allows the assembly of complex graphs that plot the literature interactions of genes. Effective interface for humans and machines.
-<SMALL>[Added Dec 25, 2004; last site review Sept 19, 2008 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.proteinatlas.org/" target="_empty">Human Protein Atlas</a> displays expression and localization of proteins in a large variety of normal human tissues and cancer cells as high resolution images of immunohistochemically stained tissues and cell lines.
-<SMALL>[Added Sept 22, 2007; last site review Sept 22, 2007 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.gopubmed.com/" target="_empty">GoPubMed</a> is a simple tool that searches PubMed and sorts the results by GO and MeSH terms.
-<SMALL>[Added July 5, 2007 by RWW; last site review Sept 19, 2008 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.ncbi.nih.gov/IEB/Research/Acembly/index.html?human" target="_empty">AceView</a> and the <a href="http://www.ebi.ac.uk/astd/main.html" target="_empty">Alternative Splicing and Transcript Diversity database</A> provide excellent resources for systematic information about the many alternative transcripts produced from single genes.
-<SMALL>[Added Jan 1, 2005; last site review Sept 19, 2008 by RWW.]</SMALL>
-</Blockquote>
-
-<Blockquote>
-<a href="http://www.informatics.jax.org/menus/allsearch_menu.shtml" target="_empty">MGI</a> and <a href="http://rgd.mcw.edu/tool-entry.shtml" target="_empty">RGD</a> are reference sites for mouse and rat genetics, respectively.
-<SMALL>[Added Dec 22, 2004; last site review Sept 19, 2008 by RWW.]</SMALL>
-</Blockquote>
-
-
-<Blockquote>
-<a href="http://www.dsi.univ-paris5.fr/genatlas/" target="_empty">GenAtlas</a> provides summary data for approximately 19300 human genes and has a useful link that will fetch 10 Kb of upstream sequence for promoter analysis.
-[Added Jan 9, 2005; last site review Sept 19, 2008 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://polly.wustl.edu/promolign/main.html" target="_empty">PromoLign</a> aligns homologous regions of mouse and human promoters and highlights SNPs and transcription factor binding sites. Check the quick tutorial to see how to extract key data. This site requires an SVG plugin that may not be supported by some browsers and operating systems.
-[Added May 10, 2005; FAILED: last site review Sept 19, 2008 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://gai.nci.nih.gov/cgi-bin/GeneViewer.cgi?" target="_empty">CGAP SNP Viewer</a> allows users to view SNPs in the context of transcripts, ORFs and protein motifs for either human or mouse genes. Try the <I>Ahr</I> gene in mouse as an example.
-<SMALL>[Added April 10, 2006; last site review Sept 19, 2008 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://syndb.cbi.pku.edu.cn/" target="_empty">Synapse Database</a> (SynDB) is a comprehensive database of genes and proteins associated with the neuronal or neuromuscular synapse. Many <B>Trait Data and Analysis</B> pages provide links to SynDB.
-<SMALL>[Added May 29, 2005; last site review Sept 19, 2008 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://crb118.med.upenn.edu/syn/dev/syndb/main.php" target="_empty">Synapse Database</a> at University of Pennsylvania is a comprehensive database of roughly 200 genes and proteins associated with the synapse.
-<SMALL>[Added Nov 26, 2006; last site review Sept 19, 2008 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://biosingapore.org/index.php/Databases_and_tools" target="_empty">Singapore</a> Bio Databases and Tool.
-<SMALL>[Added Dec 22, 2004; Dragon Genome Explorer site FAILED last site review, changed link; Sept 19, 2008 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
- <a href="http://mutdb.org/AnnoSNP/" target="_empty" >MutDB</a> and <a href="http://www.snps3d.org/modules.php?name=Search&op=advanced%20search" target="_empty">SNPs3D</a> provide great data on functional SNPs in human genes. To analyze the functional impact of non-synonymous SNPs you will also find <a href="http://snpanalyzer.uthsc.edu/" target="_empty" >SNP Analyzer</a> useful because it evaluates SNP impact in terms of the whole protein structural context.
-<SMALL>[Added Dec 22, 2004; last site review Sept 19, 2008 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://moult.umbi.umd.edu/mouse2004/modules.php?name=Targets" target="_empty" >Alternative Splicing</a> Project provides great summaries and output graphs on splice variants in human, mouse, and Drosophila.
-<SMALL>[Added Nov 8, 2005; last site review Sept 19, 2008 by RWW.]</SMALL>
-</Blockquote>
-</Blockquote>
-
-<BR>
-
-<Blockquote class="subtitle">Resources on Imprinting and Parental Origin Effects</Blockquote>
-<Blockquote>
-<Blockquote>
-<a href="http://www.geneimprint.org/site/genes-by-species" target="_empty">Geneimprint</a> is a portal into the burgeoning field of genomic imprinting, collecting relevant articles and reviews, press reports, video and audio lectures, and genetic information
-<SMALL>[Added June 23, 2010 by RWW; last site review June 23, 2010 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://igc.otago.ac.nz/Search.html" target="_empty">Catalogue of Parent of Origin Effects</a> provides a list of imprinted and putatively imprinted genes with commentary by Ian Morison (University of Otago, New Zealand). Database was last updated in 2008.
-<SMALL>[Added June 23, 2010 by RWW; last site review June 23, 2010 by RWW.]</SMALL>
-</Blockquote>
-</Blockquote>
-
-<BR>
-
-<Blockquote class="subtitle">Resources for the Spatial Analysis of Gene and Protein Expression</Blockquote>
-<Blockquote>
-<Blockquote>
-<a href="http://bioinformatics.ubc.ca/resources/links_directory/?subcategory_id=101
-" target="_empty">UBC Bioinformatic and Gene Expression Links</a> is a very extensive and well curated collection of on-line resources for the analysis of biological data sets.
-<SMALL>[Added May 24, 2007 by RWW; last site review Sept 19, 2008 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-The <a href="http://mamep.molgen.mpg.de/mamep/search.php?searchtype=simple" target="_empty">mamep GeneExpression Links</a> image database of whole-mounted in situ hybridization of mid-gestation mouse embryos. Try entering the symbol <I>Ptch1</I>.
-<SMALL>[Added May 28, 2007 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-The <a href="http://www.genes2cognition.org/genetics.html" target="_empty">Genes to Cognition</a> databases have a focus on proteins expressed in several key cellular compartments related to synpase function.
-<SMALL>[Added Aug 9, 2007 by RWW.]</SMALL>
-</Blockquote>
-
-<Blockquote>
-<a href="http://www.cdtdb.brain.riken.jp/CDT/CDTSearch.jsp" target="_empty">Cerebellar Development Transcriptome Database</a>. Expression data for the mouse cerebellum, both microarray and in situ.
-<SMALL>[Added Sept 1, 2010; last site review Sept 1, 2010 by RWW.]</SMALL>
-</Blockquote>
-
-
-<Blockquote>
-Several excellent resources can be used to explore patterns of gene expression primarily in C57BL/6J mice. This strain is one of the parents of the BXD, AXB/BXA, BXH, and CXB genetic reference populations that are key resources in the Gene Network and its companion site, the <a href="http://www.mbl.org" target="_empty" >Mouse Brain Library</A>.
-<UL>
-<LI><a href="http://www.stjudebgem.org/web/search/keyword/searchByKeyWordForm.php" target="_empty">BGEM</a> and <a href="http://www.ncbi.nlm.nih.gov/projects/gensat/" target="_empty">GENSAT</a> provide images of gene expression in brains of embryos, neonates, and adult mice (roughly 2008 genes as of July 2005).
-<BR>
-<BR>
-<LI><a href="http://www.genepaint.org/Frameset.html" target="_empty">GenePaint</a> and <a href="http://www.geneatlas.org/gene/search/searchgene.jsp" target="_empty">GeneAtlas</a> are companion sites that also provide expression data in embryos, neonates, and adults at high spatial resolution. GeneAtlas has excellent but slow image searching and matching capabilities.
-<BR>
-<BR>
-<LI><a href="http://www.brain-map.org/index.jsp" target="_empty">Allen Brain Atlas</a> has expression data for ~12000 transcripts (adult males in the sagittal plane).
-<BR>
-<BR>
-<LI><a href="http://genex.hgu.mrc.ac.uk/Emage/database/emageIntro.html" target="_empty">EMAP</a> (Edinburgh Mouse Atlas Project) provides data on expression of ~800 genes during development (in situ, immunohistochemistry, and reporter knock-in expression patterns). Most data are from wholemounts between Theiler stages 11 and 20 (embryonic days E7 to E13). EMAP can be used as a Java WebStart application.
-<BR>
-<BR>
-<LI><a href="http://www.mouseatlas.org/data/mouse/project_tissue_view" target="_empty">Mouse Atlas of Gene Expression</a> is a massive SAGE library. The Atlas has quantified the normal state for many tissues by determining the number and identity of genes expressed throughout development. The scope of the project encompasses multiple stages of development of C57BL/6J mouse, from the single cell zygote to the adult, and includes an extensive initial collection of 200 tissues. DiscoverySpace is a WebStart application for use with The Mouse Atlas of Gene Expression.
-<BR>
-<BR>
-<LI><a href="http://mahoney.chip.org/mahoney/database.html" target="_empty">Mahoney</a> Center maintains a rich image collection for ~1000 transcription factors expressed in brain (developmental stages, coronal plane).
-<SMALL>[Added Dec 22, 2004; sites reviewed last on Sept 26, 2005 by RWW.]</SMALL>
-<BR>
-<BR>
-</UL>
-</Blockquote>
-</Blockquote>
-
-<BR>
-
-<Blockquote class="subtitle">Resources for the Analysis of Sets and Networks of Transcripts, Genes, Proteins, and SNPs</Blockquote>
-<Blockquote>
-<Blockquote>
-<a href="http://www.genemania.org/full.jsf" target="_empty">GeneMANIA</a> helps you predict the function of your favourite genes and gene sets. Powerful and fast computational methods and a great use of Cytoscape Web. (<A HREF="http://nar.oxfordjournals.org/cgi/content/full/38/suppl_2/W214" target="_empty">2010 PDF</A>).
-<SMALL>[Added July 1, 2010; last site review Aug 8, 2010 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://toppgene.cchmc.org/" target="_empty">ToppGene Suite</a> A one-stop portal for gene list enrichment analysis and candidate gene prioritization based on functional annotations and protein interactions network
-<SMALL>[Added Jan 16, 2010; last site review Jan 16, 2010 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.wikipathways.org/index.php/WikiPathways" target="_empty">WikiPathways</a> (WGCNA) is an open, public platform dedicated to the curation of biological pathways by and for the scientific community.
-<SMALL>[Added Nov 12, 2009; last site review Nov 12, 2009 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.pathwaycommons.org/pc/" target="_empty">Pathway Commons</a> (WGCNA) is a search tool to find and visualize public biological pathway information. This site collates from several major sites.
-<SMALL>[Added Nov 12, 2009; last site review Nov 12, 2009 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.sanger.ac.uk/cgi-bin/modelorgs/mousegenomes/snps.pl" target="_empty">Sanger Mouse Genome Project SNP Finder</a> provides access to SNP and indels generated by sequencing 17 strains of mice (plus C57BL/6J). Marvelous.
-<SMALL>[Added Nov 18, 2009; last site review Nov 18, 2009 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.genetics.ucla.edu/labs/horvath/CoexpressionNetwork/" target="_empty">Weighted Gene Coexpression Network Analysis</a> (WGCNA) is a collection of R functions to perform weighted correlation network analysis that includes functions for network construction, module detection, gene selection, calculations of topological properties, data simulation, visualization, and interfacing with external software. See the recent paper on <A HREF="http://www.biomedcentral.com/1471-2105/9/559">WGCNA</A>.
-<SMALL>[Added Aug 21, 2009; last site review Aug 21, 2009 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.genome.jp/" target="_empty">GenomeNet</a> is a terrific site for the analysis of molecular networks. Download the very effective <a href="http://www.genome.jp/download/" target="_empty">KegArray</A> 0.2.6beta package (May 2005) for exploratory data analysis of microarray data set. This package is as good as most commerical software and includes with built-in linkage to the KEGG databases. Versions are available for Mac OS X and Windows.
-<SMALL>[Added Jan 3, 2005; last site review Aug 5, 2005 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.bioinf.ebc.ee/EP/EP/" target="_empty">Expression Profiler at http://ep.ebi.ac.uk/</a> is a set of tools for clustering, analysis and visualization of gene expression and other genomic data. Tools in the Expression Profiler allow you to perform cluster analysis, pattern discovery, pattern visualization, study and search Gene Ontology categories, generate sequence logos, extract regulatory sequences, study protein interactions, as well as to link analysis results to external tools and databases.
-<SMALL>[Added May 20, 2008; last site review May 20, 2008 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.thebiogrid.org/" target="_empty">BioGRID</a>: the Biological General Repository for Interaction Datasets is a freely accessible database of protein and genetic interactions from Mt. Sinai, Toronto.
-<SMALL>[Added July 28, 2007; last site review July 28, 2007 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://cismols.cchmc.org/" target="_empty">CisMols Analyzer</a> at Cincinnati Children's Hospital (Aronow and colleagues) is a server and database for the analysis of cis element co-occurences in the promoters of a list of genes. The <a href="http://polydoms.cchmc.org/polydoms/" target="_empty">PolyDoms Analyzer</a> is a tool for scanning through gene lists for those members of a pathway, ontolog, or disease that contain potentially harmful protein-coding SNPs. <a href="http://genometrafac.cchmc.org/" target="_empty">GenomeTraFaC</a> is a comparative genomics-based resource for initial characterization of gene models and the identification of putative cis-regulatory regions of RefSeq Gene Orthologs.
-<SMALL>[Added Sept 23, 2006; last site review Sept 23, 2006 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://compbio.uthsc.edu/miRSNP/" target="_empty">PolymiRTS</a> database that searches for microRNA (miRNA) targets in transcripts that overlap SNPs. This database will also search for genes with associated phenotype variants that may have variants in miRNA target sequence (Yan Cui, Lei Bao and colleagues).
- <SMALL>[Added Sept 23, 2006; last site review Sept 23, 2006 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.broad.mit.edu/gsea/msigdb/msigdb_index.html" target="_empty">MSigDB</a>: The Molecular Signature Database is part of the Broad Institute Gene Set Enrichment Analysis suite. MSigDB contains large numbers of static and partly annotated sets of genes/transcripts. Registration is not actually required to download data sets.
- <SMALL>[Added Jan 18, 2007; last site review Jan 18, 2007 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://inia.uchsc.edu/INIA/index.jsp" target="_empty">C-INIA</a> MAGIC-B microarray knowledgebase from the Department of Pharmacology, University of Colorado, Denver, part of the NIAAA INIA project. Extensive public and privated brain array data sets in a powerful analytic web environment.
- <SMALL>[Added May 31, 2007 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.genmapp.org/introduction.asp" target="_empty">GenMAPP 2.0</a> (2004), the Gene Map Annotation and Pathway Prolifer, is a free Windows application (simple registration required) with which you can visualize expression and other genomic data sets on maps of biological pathways. Very flexible suite of programs that you can also use to make custom gene annotation maps (and more).
-<SMALL>[Added Aug 5, 2005; last site review Aug 5, 2005 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://bind.ca/" target="_empty">BIND</a> and <a href="http://string.embl.de/" target="_empty">STRING</a> and <a href="http://www.ebi.ac.uk/intact/index.jsp" target="_empty">IntAct</a> are great sites that provide access to well curated data on protein-protein interactions. BIND and IntAct focus on experimentally verified interactions whereas STRING and preBIND incorporate inferred interaction based on other data types, including gene expression. Links to BIND and STRING have been added to the Trait Data and Analysis forms on the GeneNetwork BETA site.
-<SMALL>[Added Aug 21, 2005; last site reviews Aug 27, 2005 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://ai.stanford.edu/~erans/cancer/index.html" target="_empty">Microarray Module Maps</a> is a great site that databases a large number of coexpression modules defined using many cancer array studies.
-<SMALL>[Added Aug 26, 2005; last site review Aug 26, 2005 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.geneontology.org/GO.tools.microarray.shtml" target="_empty">The Gene Ontology Consortium</a> maintains a well annotated list of open resources for the analysis of large expression data sets and gene ontologies. Note that there are several different lists, each with valuable links.
-<SMALL>[Added July 15, 2005; last site review July 15, 2005 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.prioritizer.nl/" target="_empty">Prioritizer</a>: Prioritizer is a stand-alone Java program that uses a functional human gene network, available at <a href="http://www.genenetwork.nl" target="_empty">www.genenetwork.nl</a>, to prioritize positional candidate genes that reside within susceptibility loci, by assuming that real disease genes, residing within different loci are functionally closely related within the gene network.</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.bioinformatics.ic.ac.uk/eqtl/" target="_empty">eQTL Explorer</a> is a Java WebStart application that has also been designed for the calculation and display of QTL maps for large rat data sets, particuarly those generated using the HXB strains. Locations of QTLs for both mRNA traits and conventional physiological traits are displayed on chromosome ideograms. High precision QTL maps can also be generated. A password is required to gain access to the primary data files.
-<SMALL>[Added January 7, 2006; last site review Jan 7, 2006 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://cliquego.uthsc.edu/" target="_empty">Clique-GO Analysis</a> is a novel tool for extracting cliques of coregulated transcripts. The current data requires Affymetrix U74Av2 probe set IDs as input. Try "103370_at" (the gene <I>Lin7c</I>) as an example.
-<SMALL>[Added Jan 4, 2005; last site review Jan 4, 2005 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.bioinformatics.ubc.ca/pavlidis/lab/software.html" target="_empty">Gemma and ErmineJ</a> are powerful resources for analysis and metaanalysis of gene expression data sets at UBC. Pavlidis and colleagues also provide updated <A HREF="http://bioinformatics.ubc.ca/microannots/
-">GO data</A> for common microarray platforms.
-<SMALL>[Added Jan 4, 2005; last site review June 7, 2007 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.cytoscape.org/index.php" target="_empty">Cytoscape</a> is one of several <a href="http://sbml.org/index.psp" target="_empty">SBML</a>-compatible open source programs for visualizing molecular interaction networks and overlaying these networks with gene expression profiles and other data sets to generate and test specific hypotheses.
-<SMALL>[Added Jan 5, 2005; last site review Jan 5, 2005 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://cgap.nci.nih.gov/Pathways/Pathway_Searcher" target="_empty">Pathway Searcher</a> provides fast access to gene/protein interaction pathways. An intuitive interface.
-<SMALL>[Added Dec 30, 2004; last site review Dec 30, 2004 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://genome.ucsc.edu/cgi-bin/hgNear" target="_empty">Gene Sorter</a> is a tool for generating and sorting sets of genes using a wide variety of information integrated into UCSC's Genome Brower.
-<SMALL>[Added Dec 31, 2004; last site review Dec 31, 2004 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.cisreg.ca/cgi-bin/oPOSSUM/opossum" target="_empty">oPPOSUM</a> is a tool for finding over-represented transcription factor binding sites in lists of mouse and human genes. It handles about 100 out of greater than 600 TFBSs.
-<SMALL>[Added Jan 27, 2005; last site review Nov 21, 2005 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://motif.genome.jp/" target="_empty">MOTIF</a> and <a href="http://www.dbi.tju.edu/dbi/tools/paint/index.php?op=FnetBuilder" target="_empty">PAINT</a> search for motifs in submitted sequences or lists of genes. Paint makes use of the TRANSFAC Pro database.
-<SMALL>[Added Dec 22, 2004; last site review Dec 25, 2004 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://arrowsmith.psych.uic.edu/arrowsmith_uic/index.html" target="_empty">Arrowsmith</a> provides a fast way to evaluate known interactions or common mechanisms between two genes or proteins. It carries out a sophisticated comparison of the current PubMed database.
-<SMALL>[Added Dec 22, 2004; last site review June 7, 2007 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.chilibot.net/" target="_empty">Chilibot</a> applies natural-language processing to the PubMed database to hunt for directed relationships among pairs or sets of genes, proteins, and keywords. <SMALL>[Added Dec 30, 2004; last site review Aug 13, 2009 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-Mouse Imprinting Resources:
-<a href="http://www.mgu.har.mrc.ac.uk/research/imprinting" target="_empty">The Harwell Mouse Imprinting Resource</a>,
-<a href="http://www.geneimprint.com/" target="_empty">Duke University - Jirtle's Laboratory</a>,
-<a href="http://fantom2.gsc.riken.go.jp/imprinting/" target="_empty">RIKEN Candidate Imprinted Transcript Maps</a>, and
-<a href="http://igc.otago.ac.nz/home.html">Imprinted Gene Catalogue - University of Otago</a>.
-<SMALL>[Added Oct 20, 2006; last site review Oct 20, 2006 by RWW.]</SMALL>
-</Blockquote>
-</Blockquote>
-
-<BR>
-
-<Blockquote class="subtitle">Resources for the Analysis of Phenotypes in Genetic Reference Populations</Blockquote>
-<Blockquote>
-<Blockquote>
-<a href="http://www.mbl.org/NewMBL_MySQL/tmbl.php" target="_empty">MBL</a> is a extensive image database of brain sections from genetic reference populations of mice, including the BXD, AXB, CXB, BXH strains included in WebQTL. The MBL is a companion database of WebQTL.
-<SMALL>[Added Dec 22, 2004; last site review Aug 6, 2005 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://snp.ucsd.edu/mouse/" target="_empty">MPAD</a> Mouse Phenome Association Database v 1.0, by Eleazar Eskin and Hyun Min Kang. This resource performs genome-wide association mapping. Phenotype data sets are derived from the Mouse Phenome Project set of standard mouse strains. The permutation procedures account for the genetic relations among these strains and provide much more appropriate genome-wide significance thresholds than previous mouse association mapping methods.
-<SMALL>[Added Nov 19, 2006; last site review Nov 19, 2006 by RWW. Link broken June 2007 probably due to move from UCSD to UCLA; check with EE.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://gscan.well.ox.ac.uk/gs/wwwqtl.cgi#" target="_empty">GScan</a> at the Wellcome Trust, Oxford, is a sophisticated viewer and analysis tool with which to explore the genetic control of diverse phenotypes (including array data) generated using heterogeneous stock mice (Flint, Mott, and colleagues).
-<SMALL>[Added May 28, 2007 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://phenome.jax.org/pub-cgi/phenome/mpdcgi?rtn=docs/home" target="_empty">Phenome Project</a> provides access to a wide variety of phenotype data many common and wild inbred strains of mice.
-<SMALL>[Added Dec 22, 2004; last site review Dec 25, 2004 by RWW.]</SMALL>
-</Blockquote>
-</Blockquote>
-
-<BR>
-
-<Blockquote class="subtitle">QTL Mapping Resources</Blockquote>
-<Blockquote>
-<Blockquote>
-<a href="http://compbio.uthsc.edu/QSB/" target="_empty">QSB</a>: QSB is a stand-alone JAVA program with a sophisticated GUI developed for genetical genomics or systems genetics, an emerging field that combines quantitative genetics and genomics. QSB stands for QTL mapping, Sequence polymorphism analysis (or SNP analysis) and Bayesian network analysis. QSB takes marker and array data from a segregating population as input and identifies significant QTLs and then evaluated networks of candidate genes associated with these QTLs.
-<SMALL>[Added July 29, 2005; last site review Jan 7, 2006 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://omicspace.riken.jp/PosMed" target="_empty">Positional Medline (PosMed)</A> is a knowledge-based ranking system of candidate genes within QTL intervals for human, mouse, rat, Arabidopsis, and rice.
-<SMALL>[Added Nov 4, 2009; last site review Nov 4, 2009 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote><a href="http://omicspace.riken.jp" target="_empty">Genome - Phenome Superbrain Project</a> integrates various databases to build a comprehensive computerized encyclopedia of omic sciences in several species, including mouse, rat, human, and arabidopsis, etc. The goal is to evolve this intelligent system into a form of artificial intelligence that can solve a researcher's problems by exploiting a vast amount of information accumulated in documents and published data ranging from genomes to phenomes. <SMALL>[Added Sept 13, 2007; last site review Sept12, 2007 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://qtlreaper.sourceforge.net/" target="_empty">QTL Reaper</a> is software, written in C and compiled as a Python module, for rapidly scanning microarray expression data for QTLs. It is essentially the batch-oriented version of WebQTL. It requires, as input, expression data from members of a set of recombinant inbred lines and genotype information for the same lines. It searches for an association between each expression trait and all genotypes and evaluates that association by a permutation test. For the permutation test, it performs only as many permutations as are necessary to define the empirical P-value to a reasonable precision. It also performs bootstrap resampling to estimate the confidence region for the location of a putative QTL.
-<SMALL>[Added Jan 27, 2005; last site review Jan 27, 2005 by KFM.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://ibi.zju.edu.cn/software/qtlnetwork/" target="_empty">QTLNetwork 2.0</a> is a software package ofr mapping QTLs with epistatic and GXE interaction effects in experimental populations including double-haploid, recombinant inbred, backcross, F2, IF2 and BxFy populations. The program provides graphical presentations of QTL mapping results. The software is programmed by C++ programming language under Microsoft Visual C++ 6.0 environment. It works with Microsoft Windows operating systems, including Windows 95/98, NT, 2000, XP, 2003server. A new version of QTLNetwork is under developing, and its functions will be extended to include linkage group construction and marker-assisted virtual breeding.<SMALL>[Added June 21, 2007.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.broad.mit.edu/personal/claire/MouseHapMap/Inbred.htm" target="_empty">MouseHapMap</a> project genotypes from Mark Daly and colleagues. Approximately 140,000 SNPs across 49 strains. Updated Feb 2006.used to explore the Oxford Wellcome Heterogeneous stock QTL mapping project population. It currently includes mapping data for 100+ phenotypes typed across 2000 animals and 13,000 SNPs.
-<SMALL>[Added May 10, 2006; last site review May 10, 2006 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-A valuable list of <a href="http://www.stat.wisc.edu/%7Eyandell/qtl/software/" target="_empty">Software for QTL Data Analysis</a> and <B>Gene Expression Microarray Software</B> is managed by Brian Yandell at University of Wisconsin.
-<SMALL>[Added May 16, 2006; last site review May 16, 2006 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://gscan.well.ox.ac.uk/gs/wwwqtl.cgi" target="_empty">GSCAN DB</a> is a browser used to explore the Oxford Wellcome Heterogeneous stock QTL mapping project population. It currently includes mapping data for 100+ phenotypes typed across 2000 animals and 13,000 SNPs.
-<SMALL>[Added May 10, 2006; last site review May 10, 2006 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://www.well.ox.ac.uk/mouse/INBREDS/" target="_empty">The Wellcome Trust-CTC SNP Data Set</a> consists of high density SNP data for approximately 490 strains of mice at 13,377 SNPs. These data fiels were processed slightly to generate many of the mouse mapping files used in WebQTL.
-<SMALL>[Added Sept 27, 2005; last site review Sept 27, 2005 by RWW.]</SMALL>
-</Blockquote>
-<Blockquote>
-<a href="http://mouse.perlegen.com/mouse/summary_reports.html" target="_empty">The NIEHS-Perlegen Mouse Strain Resequencing Project</a> provides links to SNP data for up to 15 strains of mice. Very high density data for many chromosomes. These data are integrated to some extent in the GeneNetwork.
-<SMALL>[Added Sept 25, 2005; last site review Sept 25, 2005 by RWW.]</SMALL>
-</Blockquote>
-</Blockquote>
+{% block title %}Links{% endblock %}
-<BR>
+{% block css %}
+<link rel="stylesheet" type="text/css" href="/static/new/css/markdown.css" />
+{% endblock %}
-<Blockquote class="subtitle">Affymetrix Array Annotation Resources</Blockquote>
-<Blockquote>
-<Blockquote>
-<a href="http://research.stowers-institute.org/efg/ScientificSoftware/Applications/Affy/Annotations/" target="_empty">Affy MOE430A and MOE430B Annotation</a> files are explained more clearly that Affymetrix has ever done by Earl F Glynn at the Stowers Institute. (efg@stowers-insitute.org).
-<SMALL>[Added July 17, 2006; last site review June 7, 2007 by RWW. This Oct 7, 2005 file caused Grace Wheeler's Mac internet connection to break.]</SMALL>
-</Blockquote>
-</Blockquote>
+{% block content %}
-<BR>
+<div class="github-btn-container">
+ <div class="github-btn ">
+ <a href="https://github.com/genenetwork/gn-docs/blob/master/general/links/links.md">
+ Edit Text
+ <img src="/static/images/edit.png">
+ </a>
+ </div>
+</div>
-<Blockquote class="subtitle">Information about this HTML page: </Blockquote>
-<Blockquote>
-<Blockquote><P><P>This text originally generated by RWW, Dec 21, 2004. Updated by EJC, Feb 27, 2005; by RWW, July 15, Sept 25.
-<P>Management of GeneNetwork access and trait <A HREF="http://www.genenetwork.org/manager.html">pages</A>.
-</Blockquote>
-</Blockquote>
-
- </TD>
- </TR></TABLE>
+<div id="markdown" class="container">
+ {{ rendered_markdown|safe }}
-{% endblock %}
+</div>
+{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/templates/loading.html b/wqflask/wqflask/templates/loading.html
index 49bcbff7..926f258d 100644
--- a/wqflask/wqflask/templates/loading.html
+++ b/wqflask/wqflask/templates/loading.html
@@ -1,7 +1,8 @@
<title>Loading {{ start_vars.tool_used }} Results</title>
-<link REL="stylesheet" TYPE="text/css" href="/static/packages/bootstrap/css/bootstrap.css" />
+<link REL="stylesheet" TYPE="text/css" href="{{ url_for('css', filename='bootstrap/css/bootstrap.css') }}" />
+<link REL="stylesheet" TYPE="text/css" href="/static/new/css/bootstrap-custom.css" />
<form method="post" action="" name="loading_form" id="loading_form" class="form-horizontal">
- {% for key, value in start_vars.iteritems() %}
+ {% for key, value in start_vars.items() %}
<input type="hidden" name="{{ key }}" value="{{ value }}">
{% endfor %}
<div class="container">
@@ -11,7 +12,7 @@
{% if start_vars.tool_used == "Mapping" %}
<h1>Computing the Maps</h1>
<br>
- <i>n</i> = {{ start_vars.num_vals }}
+ <i>n</i> = {{ start_vars.n_samples }}
<br>
Method = {% if start_vars.method == "gemma" %}GEMMA{% else %}{{ start_vars.method }}{% endif %}
<br>
@@ -38,10 +39,10 @@
</div>
</div>
</form>
-<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
-<script src="/static/packages/bootstrap/js/bootstrap.min.js"></script>
+<script src="{{ url_for('js', filename='jquery/jquery.min.js') }}" type="text/javascript"></script>
+<script src="{{ url_for('js', filename='bootstrap/js/bootstrap.min.js') }}" type="text/javascript"></script>
<script type="text/javascript">
$("#loading_form").attr("action", "{{ start_vars.form_url }}");
setTimeout(function(){ $("#loading_form").submit()}, 350);
-</script> \ No newline at end of file
+</script>
diff --git a/wqflask/wqflask/templates/mapping_results.html b/wqflask/wqflask/templates/mapping_results.html
index b4429b46..c08b21ef 100644
--- a/wqflask/wqflask/templates/mapping_results.html
+++ b/wqflask/wqflask/templates/mapping_results.html
@@ -2,11 +2,12 @@
{% block title %}Mapping Results{% endblock %}
{% block css %}
<link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
- <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
+
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
- <link rel="stylesheet" type="text/css" href="/static/packages/purescript_genome_browser/css/purescript-genetics-browser.css" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='purescript-genome-browser/css/purescript-genetics-browser.css') }}" />
<link rel="stylesheet" type="text/css" href="/static/new/css/marker_regression.css" />
+ <link rel="stylesheet" type="text/css" href="static/new/css/show_trait.css" />
{% endblock %}
{% from "base_macro.html" import header %}
@@ -31,17 +32,18 @@
{% endif %}
<input type="hidden" name="results_path" value="{{ mapping_results_path }}">
<input type="hidden" name="method" value="{{ mapping_method }}">
- <input type="hidden" name="samples" value="{{ samples|join(",") }}">
- {% for sample in samples %}
- <input type="hidden" name="value:{{ sample }}" value="{{ vals[loop.index - 1] }}">
- {% endfor %}
- <input type="hidden" name="num_vals" value="{{ n_samples }}">
+ <input type="hidden" name="sample_vals" value="{{ sample_vals }}">
+ <input type="hidden" name="n_samples" value="{{ n_samples }}">
<input type="hidden" name="maf" value="{{ maf }}">
<input type="hidden" name="use_loco" value="{{ use_loco }}">
<input type="hidden" name="selected_chr" value="{{ selectedChr }}">
<input type="hidden" name="manhattan_plot" value="{{ manhattan_plot }}">
+ {% if manhattan_plot == True %}
+ <input type="hidden" name="color_scheme" value="alternating">
+ {% endif %}
<input type="hidden" name="num_perm" value="{{ nperm }}">
- <input type="hidden" name="perm_results" value="">
+ <input type="hidden" name="perm_info" value="">
+ <input type="hidden" name="perm_strata" value="{{ perm_strata }}">
<input type="hidden" name="num_bootstrap" value="{{ nboot }}">
<input type="hidden" name="do_control" value="{{ doControl }}">
<input type="hidden" name="control_marker" value="{{ controlLocus }}">
@@ -54,7 +56,7 @@
<input type="hidden" name="wanted_inputs" value="">
<input type="hidden" name="form_url" value="/run_mapping">
- <div class="container">
+ <div class="container" style="min-width: 1400px;">
<div class="col-xs-5">
<h2>Map Viewer: Whole Genome</h2><br>
<b>Population:</b> {{ dataset.group.species|capitalize }} {{ dataset.group.name }}<br>
@@ -76,7 +78,7 @@
<table>
<tr>
<td><b>Chr:&nbsp;</b></td>
- <td>
+ <td style="padding: 5px;">
<select name="chromosomes" size="1">
{% for chr in ChrList %}
<option value="{{ chr[1] }}" {% if (chr[1] + 1) == selectedChr %}selected{% endif %}>{{ chr[0] }}</option>
@@ -86,7 +88,7 @@
</td>
</tr>
<tr>
- <td><b>View:&nbsp;</b></td>
+ <td ><b>View:&nbsp;</b></td>
<td style="padding: 5px;">
<input type="text" name="startMb" size="7" value="{% if startMb != -1 %}{{ startMb }}{% endif %}"> to <input type="text" name="endMb" size="7" value="{% if endMb != -1 %}{{ endMb }}{% endif %}">
</td>
@@ -98,7 +100,7 @@
<input type="radio" name="LRSCheck" value="LRS" {% if LRS_LOD == "LRS" %}checked{% endif %}>LRS
</label>
<label class="radio-inline">
- <input type="radio" name="LRSCheck" value="{% if LRS_LOD == "-log(p)" %}-log(p){% else %}LOD{% endif %}" {% if LRS_LOD == "LOD" or LRS_LOD == "-log(p)" %}checked{% endif %}>{% if LRS_LOD == "-log(p)" %}-log(p){% else %}LOD{% endif %}
+ <input type="radio" name="LRSCheck" value="{% if LRS_LOD == "-logP" %}-logP{% else %}LOD{% endif %}" {% if LRS_LOD == "LOD" or LRS_LOD == "-logP" %}checked{% endif %}>{% if LRS_LOD == "-logP" %}-logP{% else %}LOD{% endif %}
</label>
<a href="http://genenetwork.org/glossary.html#LOD" target="_blank">
<sup style="color:#f00"> ?</sup>
@@ -113,11 +115,31 @@
</tr>
<tr>
<td><b>Width:&nbsp;</b></td>
- <td>
+ <td style="padding: 5px;">
<input type="text" name="graphWidth" value="{% if graphWidth is defined %}{{ graphWidth }}{% else %}1600{% endif %}" size="5"><span style="font-size: 12px;"> pixels (minimum=900)</span>
</td>
</tr>
</table>
+ {% if manhattan_plot == True and selectedChr == -1 %}
+ <table style="margin-top: 10px;">
+ <tr>
+ <td>
+ <b>Manhattan Plot Color Scheme:&nbsp;</b>
+ </td>
+ <td>
+ <select id="color_scheme">
+ <option value="alternating" {% if color_scheme == "alternating" %}selected{% endif %}>Alternating</option>
+ <option value="varied" {% if color_scheme == "varied" %}selected{% endif %}>Varied by Chr</option>
+ <option value="single" {% if color_scheme == "single" %}selected{% endif %}>Single Color</option>
+ </select>
+ </td>
+ <td>
+ <input name="manhattan_single_color" type="hidden" id="point_color" value={% if manhattan_single_color %}{{ manhattan_single_color }}{% else %}"#D9D9D9"{% endif %}>
+ <button style="display: none; margin-left: 5px;" id="point_color_picker" class="jscolor {valueElement: 'point_color'}">Choose Color</button>
+ </td>
+ </tr>
+ </table>
+ {% endif %}
</div>
<div class="col-xs-4" style="padding: 0px;">
{% if (mapping_method == "reaper" or mapping_method == "rqtl_geno") and nperm > 0 %}
@@ -224,74 +246,64 @@
<button class="btn btn-default" id="select_all"><span class="glyphicon glyphicon-ok"></span> Select All</button>
<button class="btn btn-default" id="deselect_all"><span class="glyphicon glyphicon-remove"></span> Deselect All</button>
<button class="btn btn-default" id="invert"><span class="glyphicon glyphicon-resize-vertical"></span> Invert</button>
- <button class="btn btn-default" id="add" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
+ {% if geno_db_exists == "True" %}<button class="btn btn-success" id="add" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button>{% endif %}
<br />
<br />
- <div id="table_container" style="width:{% if 'additive' in trimmed_markers[0] %}500{% else %}470{% endif %}px;">
- <table id="trait_table" class="table-hover table-striped cell-border dataTable no-footer">
- <thead>
- <tr>
- <th></th>
- <th>Row</th>
- <th>Marker</th>
- <th>{{ LRS_LOD }}</th>
- <th>Chr</th>
- {% if plotScale != "physic" %}
- <th>cM</th>
- {% else %}
- <th align="right">Mb</th>
- {% endif %}
- {% if 'additive' in trimmed_markers[0] %}
- <th>Add Eff</th>
- {% endif %}
- {% if 'dominance' in trimmed_markers[0] and dataset.group.genetic_type != "riset" %}
- <th>Dom Eff</th>
- {% endif %}
- </tr>
- </thead>
- <tbody>
- {% for marker in trimmed_markers %}
- <tr>
- <td align="center" style="padding: 1px 0px 1px 0px;">
- <input type="checkbox" name="selectCheck"
- class="checkbox trait_checkbox"
- value="{{ data_hmac('{}:{}Geno'.format(marker.name, dataset.group.name)) }}">
- </td>
- <td align="right">{{ loop.index }}</td>
- <td>{% if geno_db_exists == "True" %}<a href="/show_trait?trait_id={{ marker.name }}&dataset={{ dataset.group.name }}Geno">{{ marker.name }}</a>{% else %}{{ marker.name }}{% endif %}</td>
- {% if LRS_LOD == "LOD" or LRS_LOD == "-log(p)" %}
- {% if 'lod_score' in marker %}
- <td align="right">{{ '%0.2f' | format(marker.lod_score|float) }}</td>
- {% else %}
- <td align="right">{{ '%0.2f' | format(marker.lrs_value|float / 4.61) }}</td>
- {% endif %}
- {% else %}
- {% if 'lod_score' in marker %}
- <td align="right">{{ '%0.2f' | format(marker.lod_score|float * 4.61) }}</td>
- {% else %}
- <td align="right">{{ '%0.2f' | format(marker.lrs_value|float) }}</td>
- {% endif %}
- {% endif %}
- <td align="right">{{marker.chr}}</td>
- {% if plotScale != "physic" %}
- {% if 'cM' in marker %}
- <td align="right">{{ '%0.3f' | format(marker.cM|float) }}</td>
- {% else %}
- <td align="right">{{ '%0.3f' | format(marker.Mb|float) }}</td>
- {% endif %}
- {% else %}
- <td align="right">{{ '%0.6f' | format(marker.Mb|float) }}</td>
- {% endif %}
- {% if 'additive' in marker %}
- <td align="right">{{ '%0.3f' | format(marker.additive|float) }}</td>
- {% endif %}
- {% if 'dominance' in marker and dataset.group.genetic_type != "riset" %}
- <td align="right">{{ '%0.2f' | format(marker.dominance|float) }}</td>
- {% endif %}
- </tr>
- {% endfor %}
- </tbody>
- </table>
+ <div id="table_container" style="width:{% if 'additive' in trimmed_markers[0] %}600{% else %}550{% endif %}px;">
+ <table id="trait_table" class="table-hover table-striped cell-border dataTable no-footer">
+ <thead>
+ <tr>
+ <th></th>
+ <th>Row</th>
+ <th>Marker</th>
+ {% if LRS_LOD == "-logP" %}
+ <th><div style="text-align: right;">–logP</div></th>
+ {% else %}
+ <th><div style="text-align: right;">{{ LRS_LOD }}</div></th>
+ {% endif %}
+ <th><div style="text-align: right;">Position ({% if plotScale == "physic" %}Mb{% else %}cM{% endif %})</div></th>
+ {% if 'additive' in trimmed_markers[0] %}
+ <th><div style="text-align: right;">Add Eff</div></th>
+ {% endif %}
+ {% if 'dominance' in trimmed_markers[0] and dataset.group.genetic_type != "riset" %}
+ <th><div style="text-align: right;">Dom Eff</div></th>
+ {% endif %}
+ </tr>
+ </thead>
+ <tbody>
+ {% for marker in trimmed_markers %}
+ <tr>
+ <td align="center" style="padding: 1px 0px 1px 0px;">
+ <input type="checkbox" name="selectCheck"
+ class="checkbox trait_checkbox"
+ value="{{ data_hmac('{}:{}Geno'.format(marker.name, dataset.group.name)) }}">
+ </td>
+ <td align="right">{{ loop.index }}</td>
+ <td>{% if geno_db_exists == "True" %}<a href="/show_trait?trait_id={{ marker.name }}&dataset={{ dataset.group.name }}Geno">{{ marker.name }}</a>{% else %}{{ marker.name }}{% endif %}</td>
+ {% if LRS_LOD == "LOD" or LRS_LOD == "-logP" %}
+ {% if 'lod_score' in marker %}
+ <td align="right">{{ '%0.2f' | format(marker.lod_score|float) }}</td>
+ {% else %}
+ <td align="right">{{ '%0.2f' | format(marker.lrs_value|float / 4.61) }}</td>
+ {% endif %}
+ {% else %}
+ {% if 'lod_score' in marker %}
+ <td align="right">{{ '%0.2f' | format(marker.lod_score|float * 4.61) }}</td>
+ {% else %}
+ <td align="right">{{ '%0.2f' | format(marker.lrs_value|float) }}</td>
+ {% endif %}
+ {% endif %}
+ <td align="right">{{ marker.display_pos }}</td>
+ {% if 'additive' in marker %}
+ <td align="right">{{ '%0.3f' | format(marker.additive|float) }}</td>
+ {% endif %}
+ {% if 'dominance' in marker and dataset.group.genetic_type != "riset" %}
+ <td align="right">{{ '%0.2f' | format(marker.dominance|float) }}</td>
+ {% endif %}
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
</div>
</div>
{% elif selectedChr != -1 and plotScale =="physic" and (dataset.group.species == 'mouse' or dataset.group.species == 'rat') %}
@@ -331,17 +343,22 @@
{% block js %}
- <script type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
- <script type="text/javascript" src="/static/new/js_external/underscore-min.js"></script>
- <script type="text/javascript" src="/static/new/js_external/underscore.string.min.js"></script>
- <script type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
- <script type="text/javascript" src="/static/new/js_external/plotly-latest.min.js"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='d3js/d3.min.js') }}"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='js_alt/md5.min.js') }}"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='underscore-string/underscore.string.min.js') }}"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='d3-tip/d3-tip.js') }}"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='plotly/plotly.min.js') }}"></script>
+ {% if manhattan_plot == True and selectedChr == -1 %}
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jscolor/jscolor.js') }}"></script>
+
+ {% endif %}
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
<script language="javascript" type="text/javascript" src="https://cdn.datatables.net/buttons/1.0.0/js/dataTables.buttons.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.scientific.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/purescript_genome_browser/js/purescript-genetics-browser.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/scientific.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='purescript-genome-browser/js/purescript-genetics-browser.js') }}"></script>
<script>
js_data = {{ js_data | safe }}
@@ -355,13 +372,28 @@
<script type="text/javascript" charset="utf-8">
$(document).ready( function () {
console.time("Creating table");
+
{% if selectedChr == -1 %}
$('#trait_table').DataTable( {
+ "drawCallback": function( settings ) {
+ $('#trait_table tr').off().on("click", function(event) {
+ if (event.target.type !== 'checkbox' && event.target.tagName.toLowerCase() !== 'a') {
+ var obj =$(this).find('input');
+ obj.prop('checked', !obj.is(':checked'));
+ }
+ if ($(this).hasClass("selected") && event.target.tagName.toLowerCase() !== 'a'){
+ $(this).removeClass("selected")
+ } else if (event.target.tagName.toLowerCase() !== 'a') {
+ $(this).addClass("selected")
+ }
+
+ {% if geno_db_exists == "True" %}change_buttons(check_node=1){% endif %}
+ });
+ },
"columns": [
{ "type": "natural", "width": "5%" },
{ "type": "natural", "width": "8%" },
- { "type": "natural", "width": "25%" },
- { "type": "natural" },
+ { "type": "natural", "width": "20%" },
{ "type": "natural" },
{ "type": "natural" }{% if 'additive' in qtlresults[0] %},
{ "type": "natural" }{% endif %}{% if 'dominance' in qtlresults[0] and dataset.group.genetic_type != "riset" %},
@@ -371,8 +403,11 @@
"targets": 0,
"orderable": false
} ],
+ "language": {
+ "info": "Showing from _START_ to _END_ of " + js_data.total_markers + " records",
+ },
"order": [[1, "asc" ]],
- "sDom": "RZtir",
+ "sDom": "iRZtir",
"iDisplayLength": -1,
"autoWidth": false,
"deferRender": true,
@@ -382,6 +417,19 @@
} );
{% elif selectedChr != -1 and plotScale =="physic" and (dataset.group.species == 'mouse' or dataset.group.species == 'rat') %}
$('#trait_table').dataTable( {
+ "drawCallback": function( settings ) {
+ $('#trait_table tr').off().on("click", function(event) {
+ if (event.target.type !== 'checkbox' && event.target.tagName.toLowerCase() !== 'a') {
+ var obj =$(this).find('input');
+ obj.prop('checked', !obj.is(':checked'));
+ }
+ if ($(this).hasClass("selected") && event.target.tagName.toLowerCase() !== 'a'){
+ $(this).removeClass("selected")
+ } else if (event.target.tagName.toLowerCase() !== 'a') {
+ $(this).addClass("selected")
+ }
+ });
+ },
"createdRow": function ( row, data, index ) {
$('td', row).eq(1).attr("align", "right");
$('td', row).eq(3).attr("align", "right");
@@ -393,16 +441,16 @@
$('td', row).eq(9).attr("align", "right");
},
"columns": [
- { "bSortable": false},
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
+ { "orderDataType": "dom-checkbox" },
+ { "type": "natural"},
+ { "type": "natural" , "orderDataType": "dom-inner-text" },
+ { "type": "natural" , "orderDataType": "dom-inner-text" },
+ { "type": "natural" , "orderDataType": "dom-inner-text" },
{ "type": "natural" },
{ "type": "natural" },
+ { "type": "natural-minus-na" },
+ { "type": "natural-minus-na" },
+ { "type": "natural-minus-na" , "orderDataType": "dom-inner-text" },
{ "type": "natural" }
],
"columnDefs": [ {
@@ -430,11 +478,11 @@
});
- var mapping_input_list = ['temp_uuid', 'trait_id', 'dataset', 'tool_used', 'form_url', 'method', 'transform', 'trimmed_markers', 'selected_chr', 'chromosomes', 'mapping_scale',
+ var mapping_input_list = ['temp_uuid', 'trait_id', 'dataset', 'tool_used', 'form_url', 'method', 'transform', 'trimmed_markers', 'selected_chr', 'chromosomes', 'mapping_scale', 'sample_vals',
'score_type', 'suggestive', 'significant', 'num_perm', 'permCheck', 'perm_output', 'perm_strata', 'categorical_vars', 'num_bootstrap', 'bootCheck', 'bootstrap_results',
- 'LRSCheck', 'covariates', 'maf', 'use_loco', 'manhattan_plot', 'control_marker', 'control_marker_db', 'do_control', 'genofile',
+ 'LRSCheck', 'covariates', 'maf', 'use_loco', 'manhattan_plot', 'color_scheme', 'manhattan_single_color', 'control_marker', 'control_marker_db', 'do_control', 'genofile',
'pair_scan', 'startMb', 'endMb', 'graphWidth', 'lrsMax', 'additiveCheck', 'showSNP', 'showGenes', 'viewLegend', 'haplotypeAnalystCheck',
- 'mapmethod_rqtl_geno', 'mapmodel_rqtl_geno', 'temp_trait', 'group', 'species', 'reaper_version', 'primary_samples', 'num_vals']
+ 'mapmethod_rqtl_geno', 'mapmodel_rqtl_geno', 'temp_trait', 'group', 'species', 'reaper_version', 'primary_samples', 'n_samples']
$('input[name=wanted_inputs]').val(mapping_input_list.join(","));
@@ -443,7 +491,7 @@
$('input[name=chr_mb_list]').val(chr_mb_list)
$('#marker_regression_form').attr('action', '/loading');
- return $('#marker_regression_form').submit();
+ $('#marker_regression_form').submit();
};
rangeView = function(this_chr, start_mb, end_mb) {
@@ -453,24 +501,49 @@
//$('input[name=mb_range]').val(start_mb + "," + end_mb)
$('#marker_regression_form').attr('action', '/loading');
- return $('#marker_regression_form').submit();
+ $('#marker_regression_form').submit();
};
remap = function() {
$('input[name=selected_chr]').val($('select[name=chromosomes]').val());
+ $('input[name=color_scheme]').val($('select#color_scheme').val());
$('#marker_regression_form').attr('action', '/loading');
return $('#marker_regression_form').submit();
};
+ {% if manhattan_plot == True and selectedChr == -1 %}
+ $('#color_scheme').change(function(){
+ if ($(this).val() == "single"){
+ $('#point_color_picker').show();
+ } else {
+ $('#point_color_picker').hide();
+ }
+ });
+ {% endif %}
+
{% if mapping_method != "gemma" and mapping_method != "plink" %}
$('#download_perm').click(function(){
- var num_perm, perm_data;
- num_perm = js_data.num_perm
- perm_data = js_data.perm_results
- json_perm_data = JSON.stringify(perm_data);
- $('input[name=perm_results]').val(json_perm_data);
- $('#marker_regression_form').attr('action', '/export_perm_data');
- return $('#marker_regression_form').submit();
+ perm_info_dict = {
+ perm_data: js_data.perm_results,
+ num_perm: "{{ nperm }}",
+ trait_name: "{{ this_trait.display_name }}",
+ trait_description: `{{ this_trait.description_display }}`,
+ cofactors: "{{ covariates }}",
+ n_samples: {{ n_samples }},
+ n_genotypes: {{ qtl_results|length }},
+ {% if genofile_string is defined %}
+ genofile: "{{ genofile_string }}",
+ {% else %}
+ genofile: "",
+ {% endif %}
+ units_linkage: "{{ LRS_LOD }}",
+ strat_cofactors: js_data.categorical_vars
+ }
+ json_perm_data = JSON.stringify(perm_info_dict);
+
+ $('input[name=perm_info]').val(json_perm_data);
+ $('#marker_regression_form').attr('action', '/export_perm_data');
+ return $('#marker_regression_form').submit();
});
modebar_options = {
diff --git a/wqflask/wqflask/templates/network_graph.html b/wqflask/wqflask/templates/network_graph.html
index 25af7bb1..cff69ac8 100644
--- a/wqflask/wqflask/templates/network_graph.html
+++ b/wqflask/wqflask/templates/network_graph.html
@@ -1,8 +1,8 @@
{% extends "base.html" %}
{% block css %}
<link rel="stylesheet" type="text/css" href="/static/new/css/network_graph.css" />
- <link rel="stylesheet" type="text/css" href="/js/cytoscape-panzoom/cytoscape.js-panzoom.css" />
- <link rel="stylesheet" type="text/css" href="http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0/jquery.qtip.css">
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='cytoscape-panzoom/cytoscape.js-panzoom.css') }}">
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='qtip2/jquery.qtip.min.css') }}">
<style>
/* The Cytoscape Web container must have its dimensions set. */
html, body { height: 100%; width: 100%; padding: 0; margin: 0; }
@@ -139,23 +139,14 @@
elements_list = {{ elements | safe }}
gn2_url = "{{ gn2_url | safe }}"
</script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='qtip2/jquery.qtip.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script>
- <script language="javascript" type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0/jquery.qtip.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
-
- <script language="javascript" type="text/javascript" src="/js/cytoscape/cytoscape.min.js"></script>
- <script language="javascript" type="text/javascript" src="/js/cytoscape-panzoom/cytoscape-panzoom.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='cytoscape/cytoscape.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='cytoscape-panzoom/cytoscape-panzoom.js') }}"></script>
<!-- should be using cytoscape-popper for tips, see docs -->
- <script language="javascript" type="text/javascript" src="/js/cytoscape-qtip/cytoscape-qtip.js"></script>
-
- <!--
- Loads flash - who wants that?
- <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/min/AC_OETags.min.js"></script>
- Disabled because it is standard JS now:
- <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/min/json2.min.js"></script>
- -->
-
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='cytoscape-qtip/cytoscape-qtip.js') }}"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/network_graph.js"></script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/new_security/forgot_password.html b/wqflask/wqflask/templates/new_security/forgot_password.html
index a981b6bd..e5c42a45 100644
--- a/wqflask/wqflask/templates/new_security/forgot_password.html
+++ b/wqflask/wqflask/templates/new_security/forgot_password.html
@@ -48,8 +48,6 @@
{% endblock %}
{% block js %}
- <!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>-->
-
{% include "new_security/_scripts.html" %}
{% endblock %}
diff --git a/wqflask/wqflask/templates/new_security/forgot_password_step2.html b/wqflask/wqflask/templates/new_security/forgot_password_step2.html
index e32ef753..b4bf41c7 100644
--- a/wqflask/wqflask/templates/new_security/forgot_password_step2.html
+++ b/wqflask/wqflask/templates/new_security/forgot_password_step2.html
@@ -20,9 +20,7 @@
{% endblock %}
{% block js %}
- <!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>-->
-
{% include "new_security/_scripts.html" %}
- <script type="text/javascript" src="/static/new/js_external/zxcvbn/zxcvbn-async.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='zxcvbn/zxcvbn.js') }}"></script>
<script type="text/javascript" src="/static/new/javascript/password_strength.js"></script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/new_security/login_user.html b/wqflask/wqflask/templates/new_security/login_user.html
index 80fed82a..095036f0 100644
--- a/wqflask/wqflask/templates/new_security/login_user.html
+++ b/wqflask/wqflask/templates/new_security/login_user.html
@@ -114,8 +114,6 @@ label.error,div.error{
{% endblock %}
{% block js %}
- <!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>-->
-
<!-- Disable plugin, see https://github.com/genenetwork/genenetwork2/issues/310
<script type="text/javascript" src="/static/new/packages/ValidationPlugin/dist/jquery.validate.min.js"></script>
diff --git a/wqflask/wqflask/templates/new_security/not_authenticated.html b/wqflask/wqflask/templates/new_security/not_authenticated.html
new file mode 100644
index 00000000..ea688346
--- /dev/null
+++ b/wqflask/wqflask/templates/new_security/not_authenticated.html
@@ -0,0 +1,11 @@
+{% extends "base.html" %}
+{% block title %}Authentication Needed{% endblock %}
+{% block content %}
+ <div class="container">
+ <div class="page-header">
+ <h3>You lack the permissions to view these data.</h3>
+ </div>
+ <p>Please contact the data's owner or GN administrators if you believe you should have access to these data.</p>
+ </div>
+
+{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/templates/new_security/password_reset.html b/wqflask/wqflask/templates/new_security/password_reset.html
index cda1e477..684c12b1 100644
--- a/wqflask/wqflask/templates/new_security/password_reset.html
+++ b/wqflask/wqflask/templates/new_security/password_reset.html
@@ -72,9 +72,8 @@
{% endblock %}
{% block js %}
- <!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>-->
{% include "new_security/_scripts.html" %}
- <script type="text/javascript" src="/static/new/js_external/zxcvbn/zxcvbn-async.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='zxcvbn/zxcvbn.js') }}"></script>
<script type="text/javascript" src="/static/new/javascript/password_strength.js"></script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/new_security/register_user.html b/wqflask/wqflask/templates/new_security/register_user.html
index da74090c..3ae4488b 100644
--- a/wqflask/wqflask/templates/new_security/register_user.html
+++ b/wqflask/wqflask/templates/new_security/register_user.html
@@ -99,9 +99,8 @@
{% endblock %}
{% block js %}
- <!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>-->
{% include "new_security/_scripts.html" %}
- <script type="text/javascript" src="/static/new/js_external/zxcvbn/zxcvbn-async.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='zxcvbn/zxcvbn.js') }}"></script>
<script type="text/javascript" src="/static/new/javascript/password_strength.js"></script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/new_security/registered.html b/wqflask/wqflask/templates/new_security/registered.html
index 349cbdd4..f2f58ec1 100644
--- a/wqflask/wqflask/templates/new_security/registered.html
+++ b/wqflask/wqflask/templates/new_security/registered.html
@@ -18,9 +18,8 @@
{% endblock %}
{% block js %}
- <!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>-->
{% include "new_security/_scripts.html" %}
- <script type="text/javascript" src="/static/new/js_external/zxcvbn/zxcvbn-async.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='zxcvbn/zxcvbn.js') }}"></script>
<script type="text/javascript" src="/static/new/javascript/password_strength.js"></script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/new_security/thank_you.html b/wqflask/wqflask/templates/new_security/thank_you.html
index 290961e6..0ff7ee8d 100644
--- a/wqflask/wqflask/templates/new_security/thank_you.html
+++ b/wqflask/wqflask/templates/new_security/thank_you.html
@@ -18,9 +18,7 @@
{% endblock %}
{% block js %}
- <!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>-->
-
{% include "new_security/_scripts.html" %}
- <script type="text/javascript" src="/static/new/js_external/zxcvbn/zxcvbn-async.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='zxcvbn/zxcvbn.js') }}"></script>
<script type="text/javascript" src="/static/new/javascript/password_strength.js"></script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/new_security/verification_still_needed.html b/wqflask/wqflask/templates/new_security/verification_still_needed.html
index 817fa963..dc0f9e68 100644
--- a/wqflask/wqflask/templates/new_security/verification_still_needed.html
+++ b/wqflask/wqflask/templates/new_security/verification_still_needed.html
@@ -21,9 +21,7 @@
{% endblock %}
{% block js %}
- <!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>-->
-
{% include "new_security/_scripts.html" %}
- <script type="text/javascript" src="/static/new/js_external/zxcvbn/zxcvbn-async.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='zxcvbn/zxcvbn.js') }}"></script>
<script type="text/javascript" src="/static/new/javascript/password_strength.js"></script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/pair_scan_results.html b/wqflask/wqflask/templates/pair_scan_results.html
index b13b393f..fb825b90 100644
--- a/wqflask/wqflask/templates/pair_scan_results.html
+++ b/wqflask/wqflask/templates/pair_scan_results.html
@@ -2,9 +2,7 @@
{% block title %}Pair Scan{% endblock %}
{% block css %}
<link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
- <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />
- <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='d3-tip/d3-tip.css') }}" />
<link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />
{% endblock %}
@@ -62,13 +60,11 @@
{% block js %}
- <script language="javascript" type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='d3js/d3.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='d3-tip/d3-tip.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.js') }}"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.scientific.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/DT_bootstrap/DT_bootstrap.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/scientific.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script>
{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/templates/policies.html b/wqflask/wqflask/templates/policies.html
index 83b6b3c0..e36c9e08 100644
--- a/wqflask/wqflask/templates/policies.html
+++ b/wqflask/wqflask/templates/policies.html
@@ -1,18 +1,23 @@
{% extends "base.html" %}
-{% block title %}Policies{% endblock %}
+
+{% block title %}Links{% endblock %}
+
+{% block css %}
+<link rel="stylesheet" type="text/css" href="/static/new/css/markdown.css" />
+{% endblock %}
+
{% block content %}
-<Table width= "100%" cellSpacing=0 cellPadding=5><TR>
-<!-- Body Start from Here -->
-<TD valign="top" height="200" width="100%">
- <P class="title">WebQTL Conditions of Use</P>
- <UL>
- <LI><A HREF="conditionsofUse.html">WebQTL Usage Conditions and Limitations</A><P></P>
- <LI><A HREF="dataSharing.html">WebQTL Data Sharing Policy</A><P></P>
- <LI><A HREF="statusandContact.html">Status and investigators to contact on data use and publication</A><P></P>
- </UL>
- <P></P>
-</TD>
-</TR></TABLE>
+ <div class="github-btn-container">
+ <div class="github-btn ">
+ <a href="https://github.com/genenetwork/gn-docs/blob/master/general/policies/policies.md">
+ Edit Text
+ <img src="/static/images/edit.png">
+ </a>
+ </div>
+</div>
+<div id="markdown" class="container">
+ {{ rendered_markdown|safe }}
+</div>
{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/templates/reference.html b/wqflask/wqflask/templates/reference.html
deleted file mode 100644
index d95d22e3..00000000
--- a/wqflask/wqflask/templates/reference.html
+++ /dev/null
@@ -1,1497 +0,0 @@
-{% extends "base.html" %}
-{% block title %}References{% endblock %}
-{% block content %}
-
-<h2>&nbsp;Papers and References to GeneNetwork</A></h2>
-
-<BLOCKQUOTE>
-
-<left>
-<a href="#New">Highlighted References</a> |
-<a href="#Key">Key References</a> |
-<a href="#Background">Background References</a> |
-</left>
-
-<BR> <BR>
-<left>
-<a href="#2020">2020</a> |
-<a href="#2019">2019</a> |
-<a href="#2018">2018</a> |
-<a href="#2017">2017</a> |
-<a href="#2016">2016</a> |
-<a href="#2015">2015</a> |
-<a href="#2014">2014</a> |
-<a href="#2013">2013</a> |
-<a href="#2012">2012</a> |
-<a href="#2011">2011</a> |
-<a href="#2010">2010</a> |
-<a href="#2009">2009</a> |
-<a href="#2008">2008</a> |
-<a href="#2007">2007</a> |
-<a href="#2006">2006</a> |
-<a href="#2005">2005</a> |
-<a href="#2004">2004</a> |
-<a href="#2003">2003</a> |
-</left>
-</BLOCKQUOTE>
-
-<DIR>
- <A HREF="https://scholar.google.com/scholar?as_q=&as_epq=&as_oq=webqtl+%22genenetwork%22&as_eq=&as_occt=any&as_sauthors=&as_publication=&as_ylo=&as_yhi=&btnG=&hl=en&as_sdt=0%2C5"target="_blank" class="fwn">Google Scholar</A> search for <I> "genenetwork" OR "webqtl" </I> generated:
-<OL>
-<LI>1430 hits on 2016/09/08
-<LI>1730 hits on 2017/10/17
-<LI>2020 hits on 2019/05/13)
-</OL>
-
-<A HREF="https://scholar.google.com/scholar?as_q=&as_epq=&as_oq=genenetwork.org&as_eq=&as_occt=any&as_sauthors=&as_publication=&as_ylo=&as_yhi=&btnG=&hl=en&as_sdt=0%2C5"target="_blank" class="fwn">Google Scholar</A> search for <I> "genenetwork.org" </I> generated:
-
-<OL>
-<LI>1030 hits on 2019/05/13
-<LI> 105 hits from 2018/01/01 to 2019/05/13
-</OL>
-
-</DIR>
-
-
-<BLOCKQUOTE>
- <A NAME="New" class="subtitle">Highlighted References</A>
-<BLOCKQUOTE style="font-size: 14px;">
-
-<B><I>Please send us citations to articles that we may have missed.</I></B>
-
-<OL>
-
-<LI> Mulligan MK, Mozhui K, Prins P, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27933521" target="_blank" class="fwn">2017</A>) GeneNetwork: A Toolbox for Systems Genetics. In <I>Systems Genetics</I>, Methods in Molecular Biology 1488:75-120
-[An updated primer in using GeneNetwork for molecular analysis of mouse and human cohorts.]
-<SMALL><A HREF="/images/upload/Mulligan_How_To_Use_GeneNetwork_2017_v1.pdf" target="_blank" class="fwn">PDF version</A>
-</SMALL>
-<BR>
-<BR>
-
-<LI> Williams RW, Williams EG (<A HREF="/images/upload/Williams_ResourcesSystemsGenetics_MethodsMolBio_2016.pdf" target="_blank" class="fwn"" target="_blank" class="fwn">2017</A>) Resources for Systems Genetics. In <I>Systems Genetics</I>, Methods in Molecular Biology 1488:3-29.
-[This review is intended to help you when making the hard choices about types of resources to use in system genetic studies. The short answer: embrace diversity in your resources. The computational barriers to joint analysis are now minimal.]
-<SMALL><A HREF="/images/upload/Williams_ResourcesSystemsGenetics_MethodsMolBio_2016.pdf" target="_blank" class="fwn">PDF version</A>
-</SMALL>
-<BR>
-<BR>
-
-<LI> Williams RW (<A HREF="http://journal.frontiersin.org/article/10.3389/neuro.01.016.2009/full" target="_blank" class="fwn">2009</A>) Herding cats: the sociology of data integration. Frontier in Neuroscience 3(2):154-6.
-[An short but amusing commentary on predictive (someday perhaps even precision) medicine and how to get there using genetic reference populations such as the BXD and Collaborative Cross families.]
-<SMALL><A HREF="http://journal.frontiersin.org/article/10.3389/neuro.01.016.2009/full" target="_blank" class="fwn">PDF version</A>
-</SMALL>
-<BR>
-<BR>
-
-
-<LI>
-Pinelli M, Carissimo A, Cutillo L, Lai CH, Mutarelli M, Moretti MN, Singh MV, Karali M, Carrella D, Pizzo M, Russo F, Ferrari S, Ponzin D, Angelini C, Banfi S, di Bernardo D (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27235414" target="_blank" class="fwn">2016</A>) An atlas of gene expression and gene co-regulation in the human retina.Nucleic Acids Res. 2016 Jul 8;44(12):5773-84
-<SMALL><A HREF="http://retina.tigem.it" target="_blank" class="fwn">RETINA database</A>, and see the <A HREF="/images/upload/Pinelli_diBerardo_2016_AtlasHumanRetina.pdf" target="_blank" class="fwn">PDF</A>. These data are now in GeneNetwork (Species = Human, Group = Retina).
-</SMALL>
-
-<BR>
-<BR>
-
-
-<LI>
-Williams EG, Wu Y, Pooja J, Dubuis S, Blattmann P, Argmann CA, Houten SM, Amariuta T, Wolski W, Zamboni N, Aebersold R, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27284200" target="_blank" class="fwn">2016</A>) Systems proteomics and trans-omic integration illuminate new mechanisms in mitochondrial function. Science 352(6291):aad0189
-<SMALL><A HREF="http://science.sciencemag.org/content/352/6291/aad0189.full" target="_blank" class="fwn">HTML version</A>, <A HREF="/images/upload/WilliamsEG_Auwerx_Systems_Science-2016.pdf " target="_blank" class="fwn">PDF</A>
-</SMALL>
-<BR>
-<BR>
-
-
-
-<LI>
-Sloan Z, Arends D, Broman KW, Centeno A, Furlotte N, Nijveen H, Yan L, Zhou X, Williams RW, Prins P (2016) GenetNetwork: framework for web-based genetics. The Journal of Open Source Software http://joss.theoj.org/papers/10.21105/joss.00025 (http://dx.doi.org/10.21105/joss.00025)
-<SMALL><A HREF="http://joss.theoj.org/papers/10.21105/joss.00025" target="_blank" class="fwn">HTML version</A>
-</SMALL>
-<BR>
-<BR>
-
-<LI>Alam G, Miller DB, O'Callaghan JP, Lu L, Williams RW, Jones BC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27182044" target="_blank" class="fwn">2016</A>) MPTP neurotoxicity is highly concordant between the sexes among BXD recombinant inbred mouse strains. Neurotoxicology in press
-<SMALL><A HREF="/images/upload/Alam_Jones_MPTP_Neurotox_2016.pdf" target="_blank" class="fwn">PDF version</A>
-</SMALL>
-<BR>
-<BR>
-
-
-<LI>Merkwirth C, Jovaisaite V, Durieux J, Matilainen O, Jordan SD, Quiros PM, Steffen KK, Williams EG, Mouchiroud L, Tronnes SU, Murillo V, Wolff SC, Shaw RJ, Auwerx J, Dillin A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27133168" target="_blank" class="fwn">2016</A>) Two conserved histone demethylases regulate mitochondrial stress-induced longevity. Cell 165:1209-1223
-<BR>
-<BR>
-
-
-<LI> Wang X, Pandey AK, Mulligan MK, Williams EG, Mozhui K, Li Z, Jovaisaite V, Quarles LD, Xiao Z, Huang J, Capra JA, Chen Z, Taylor WL, Bastarache L, Niu X, Pollard KS, Ciobanu DC, Reznik AO, Tishkov AV, Zhulin IB, Peng J, Nelson SF, Denny JC, Auwerx J, Lu L, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26833085" target="_blank" class="fwn">2016</A>). Joint mouse-human phenome-wide association to test gene function and disease risk. Nature Communications 7:10464
-[Best reference on the BXD family of strains and the wide range of phenotypes that have been generated over the past 40 years.]
-
-<SMALL><A HREF="/images/upload/Wang_PheWas_NatComm_2016.pdf" target="_blank" class="fwn">PDF version</A> and the
-
-<A HREF="/images/upload/Wang_SupplementalTables_NatComm_2016.xlsx" target="_blank" class="fwn">Supplementary Tables in one Excel file</A>
-</SMALL>
-
-<BR>
-<BR>
-
-
-<LI> Xue Y, Li J, Yan L, Lu L, Liao FF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26092713" target="_blank" class="fwn">2015</A>) Genetic variability to diet-induced hippocampal dysfunction in BXD recombinant inbred (RI) mouse strains. Behav Brain Res 292:83-94
-<BR>
-<BR>
-
-<LI>Chaum E, Winborn CS, Bhattacharya S (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25963977" target="_blank" class="fwn">2015</A>) Multilayered genetic and omics dissection of mitochondrial activity in a mouse reference population. Mamm Genome 26:210-221
-<BR>
-<BR>
-
-<LI>Cheng Q, Seltzer Z, Sima C, Lakschevitz FS, Glogauer M. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25942439" target="_blank" class="fwn">2015</A>) Quantitative Trait Loci and Candidate Genes for Neutrophil Recruitment in Sterile Inflammation Mapped in AXB-BXA Recombinant Inbred Mice. PLoS One 10:e0124117
-<BR>
-<BR>
-
-<LI>Scott RE, Ghule PN, Stein JL, Stein GS (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25215496" target="_blank" class="fwn">2015</A>) Cell cycle gene expression networks discovered using systems biology: Significance in carcinogenesis. J Cell Physiol 230:2533-42
-<BR>
-<BR>
-
-<LI> Williams EG, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26140590" target="_blank" class="fwn">2015</A>) The convergence of systems and reductionist approaches in complex trait analysis. Cell 162:23-32.
-<BR>
-<BR>
-
-<LI>Wu Y, Williams EG, Dubuis S, Mottis A, Jovaisaite V, Houten SM, Argmann CA, Faridi P, Wolski W, Kutalik Z, Zamboni N, Auwerx J, Aebersold R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25215496" target="_blank" class="fwn">2014</A>) Multilayered genetic and omics dissection of mitochondrial activity in a mouse reference population. Cell 158:1415-1430
-<BR>
-<BR>
-
-<LI>
-Hayes SK, Hager R, Grencis RK (2014) Sex-dependent genetics effects on immune responses to parasitic nematodes. BMC Genomics 15:193
-<BR>
-<BR>
-
-<LI>Harenza JL, Muldoon PP, De Biasi M, Damaj MI, Miles MF (2014) Genetic variation within the Chrna7 gene modulates nicotine reward-like phenotypes in mice. Genes Brain Behav 13:213-225
-<BR>
-<BR>
-
-
-<LI>
-Ye R, Carneiro AM, Airey D, Sanders-Bush E, Williams RW, Lu L, Wang J, Zhang B, Blakely RD (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24102824" target="_blank" class="fwn">2014</A>) Evaluation of heritable determinants of blood and brain serotonin homeostasis using recombinant inbred mice. Genes Brain Behav. 13:247-260
-
-<BR>
-<BR>
-<LI>
-Houtkooper RH, Mouchiroud L, Ryu D, Moullan N, Katsyuba E, Knott G, Williams RW, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23698443" target="_blank" class="fwn">2013</A>) Mitonuclear protein imbalance as a conserved longevity mechanism. Nature 497:451-457 <A HREF="/images/upload/Houtkooper_Williams_Auwerx_Nature_2013.pdf" target="_blank" class="fwn">PDF version</A>
-
-<BR>
-<BR>
-
-</OL>
-
-</Blockquote>
-
-
-
-
-
-
-
-
-
-
-
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="Key" class="subtitle">Key References</A>
-<BLOCKQUOTE >
-
-<P>The first section lists key technical papers that are appropriate references when citing GeneNetwork and WebQTL. The second section lists publications and other resources that have made use of GeneNetwork.<P>
-
-</Blockquote>
-<OL>
-
-
-<LI> Mulligan MK, Mozhui K, Prins P, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26092713" target="_blank" class="fwn">2016</A>) GeneNetwork – A toolbox for systems genetics. In <I>Systems Genetics</I>, Methods in Molecular Biology; Schughart K, Williams RW eds.; Humana Press, in press
-[This is a currently the most comprehensive protocol and guide (20 Mb) for GeneNetwork.]
-<SMALL><A HREF="/images/upload/Mulligan_How_To_Use_GeneNetwork_2016_v1.pdf" target="_blank" class="fwn">PDF version</A></SMALL>
-
-
-<LI>
-Williams RW, Mulligan MK (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23195314" target="_blank" class="fwn">2012</A>) Genetic and molecular network analysis of behavior. Int Rev Neurobiol. 104:135-57. [Explains the use of GeneNetwork in behavioral neurogenetics]
-<SMALL><A HREF="/images/upload/Williams_Mulligan_Bioinformatics of Brain Short 2012.pdf" target="_blank" class="fwn">PDF version</A>
-</SMALL>
-
-<LI> Williams EG, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26140590" target="_blank" class="fwn">2015</A>) The convergence of systems and reductionist approaches in complex trait analysis. Cell 162:23-32. [Research into the genetic and environmental factors behind complex trait variation has traditionally been segregated into distinct scientific camps. The reductionist approach aims to decrypt phenotypic variability bit by bit, founded on the underlying hypothesis that genome-to-phenome relations are largely constructed from the additive effects of their molecular players. In contrast, the systems approach aims to examine large-scale interactions of many components simultaneously, on the premise that interactions in gene networks can be both linear and non-linear. Both approaches are complementary, and they are becoming increasingly intertwined due to developments in gene editing tools, omics technologies, and population resources. Together, these strategies are beginning to drive the next era in complex trait research, paving the way to improve agriculture and toward more personalized medicine.] <SMALL><A HREF="/images/upload/WilliamsEG_Auwerx_Cell2015.pdf" target="_blank" class="fwn">PDF version</A>
-</SMALL>
-
-<LI>
-Wang J, Williams RW, Manly KF (<a href="http://journals.humanapress.com/ArticleDetail.pasp?issn=1539-2791&acode=NI:1:4:299" target="_blank" class="fwn">2003</a>) WebQTL: Web-based complex trait analysis. Neuroinformatics 1: 299-308 <A href="http://www.genenetwork.org/pdf/webqtl.pdf" class="fwn"><I>Full Text PDF Version</I></A>. [A good technical reference to WebQTL and GeneNetwork]
-<LI>
-Williams RW, Gu J, Qi S, Lu L (<a href="http://journals.humanapress.com/ArticleDetail.pasp?issn=1539-2791&acode=NI:1:4:299" target="_blank" class="fwn">2003</a>) The genetic structure of recombinant inbred mice: high-resolution consensus maps for complex trait analysis. Genome Biology 2(11)<A href="http://genomebiology.com/content/2/11/RESEARCH0046" class="fwn"><I>Full Text Version</I></A>. [A detailed analysis of the genetics of recombinant inbred strains]
-<LI>
-Chesler EJ, Wang J, Lu L, Qu Y, Manly KF, Williams RW (<a href="http://journals.humanapress.com/ArticleDetail.pasp?issn=1539-2791&acode=NI:1:4:343" target="_blank" class="fwn">2003</a>) Genetic correlates of gene expression in recombinant inbred strains: a relational model to explore for neurobehavioral phenotypes. Neuroinformatics 1: 343-357. <A href="http://www.nervenet.org/pdf/Genetic_Correlation_webQTL.pdf" class="fwn"><I>Full Text PDF Version</I></A>. [Best reference regarding interpretation of genetic correlations.]
-<LI>
-Chesler EJ, Lu L, Wang J, Williams RW, Manly KF (<a href="http://www.nature.com/cgi-taf/DynaPage.taf?file=/neuro/journal/v7/n5/full/nn0504-485.html" target="_blank" class="fwn">2004</a>) WebQTL: rapid exploratory analysis of gene expression and genetic networks for brain and behavior. Nature Neuroscience 7: 485-486. <A href="http://www.genenetwork.org/pdf/nn0504-485.pdf" class="fwn"><I>Full Text PDF Version</I></A> [A short review]
-<LI>
-Chesler EJ, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15474587" target="_blank" class="fwn">2004</a>) Brain gene expression: genomics and genetics. International Review of Neurobiology 60:59-95. (<I>DNA Arrays in Neurobiology</I>, edited by MF Miles, Elsevier, Amsterdam). [A longer discussion, both statistical and conceptual, on the genetic analysis of gene expression and relations to higher order behavioral phenotypes]</A>
-<LI>
-Bystrykh L, Weersing E, Dontje B, Sutton S, Pletcher MT, Wiltshire T, Su AI, Vellenga E, Wang J, Manly KF, Lu L, Chesler EJ, Alberts R, Jansen RC, Williams RW, Cooke M, de Haan G (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15711547" target="_blank" class="fwn">2005</A>) Uncovering regulatory pathways affecting hematopoietic stem cell function using "genetical genomics." Nature Genetics 37:225-232. [Please cite this article if you have used the GNF-Groningen hematopoietic stem cell data set.]
-<LI>
-Chesler EJ, Lu L, Shou S, Qu Y, Gu J, Wang J, Hsu HC, Mountz JD, Baldwin N, Langston MA, Threadgill DW, Manly KF, Williams RW (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15711545" target="_blank" class="fwn">2005</A>) Complex trait analysis of gene expression uncovers polygenic and pleiotropic networks that modulate nervous system function. Nature Genetics 37: 233-242. [Please cite this article if you have used one of the UTHSC brain data sets.]
-<LI>
-Damerval C, Maurice A, Josse JM, de Vienne D (<A HREF="http://www.genetics.org/cgi/content/abstract/137/1/289" class="fwn" target="_blank">1994</A>) Quantitative trait loci underlying gene product variation: a novel perspective for analyzing regulation of genome expression. Genetics 137: 289-301 <A href="http://www.genetics.org/cgi/reprint/137/1/289" class="fwn" target="_blank"><I>Full Text PDF Version</I></A> [The first published paper on system genetics. Impressive; before its time.]
-
-<Blockquote><SMALL>[Damerval et al., 1994 abstract] A methodology to dissect the genetic architecture of quantitative variation of numerous gene products simultaneously is proposed. For each individual of a segregating progeny, proteins extracted from a given organ are separated using two-dimensional electrophoresis, and their amounts are estimated with a computer-assisted system for spot quantification. Provided a complete genetic map is available, statistical procedures allow determination of the number, effects and chromosomal locations of factors controlling the amounts of individual proteins. This approach was applied to anonymous proteins of etiolated coleoptiles of maize, in an F(2) progeny between two distant lines. The genetic map included both restriction fragment length polymorphism and protein markers. Minimum estimates of one to five unlinked regulatory factors were found for 42 of the 72 proteins analyzed, with a large diversity of effects. Dominance and epistasis interactions were involved in the control of 38% and 14% of the 72 proteins, respectively. Such a methodology might help understanding the architecture of regulatory networks and the possible adaptive or phenotypic significance of the polymorphism of the genes involved.
-</SMALL></Blockquote>
-
-<LI>
-Grisham W, Schottler NA, Valli-Marill J, Beck L, Beatty J (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20516355" target="_blank" class="fwn" >2010</a>) Teaching bioinformatics and neuroinformatics by using free web-based tools. CBE--Life Sciences Education 9: 98-107 <A href="http://www.lifescied.org/content/9/2/98.full.pdf+html" target="_blank" class="fwn" ><I>Full Text PDF Version</I></A>
-<BR><SMALL> A terrific introduction to a wide range of bioinformatic resources, including GeneNetwork, that have been assembled as a coherent teaching module. A detailed student/instructor’s manual, PDFs of handouts, PowerPoint slides, and sample exams are available for free at <A HREF="http://mdcune.psych.ucla.edu/modules/bioinformatics" target="_blank" class="fwn" >http://mdcune.psych.ucla.edu/modules/bioinformatics</A>.
-
-<BR><B>Youtube videos of Dr. William Grisham teaching neurogenetics at UCLA</B>:
-<BR><A HREF="http://www.youtube.com/watch?v=5UniEc_pzs0" target="_blank" class="fwn" >Part 1</A>
-<BR><A HREF="http://www.youtube.com/watch?v=zjdOWC7zxt0" target="_blank" class="fwn" >Part 2</A>
-<BR><A HREF="http://www.youtube.com/watch?v=caC0YGhDoo8" target="_blank" class="fwn" >Part 3</A>
-<BR><A HREF="http://www.youtube.com/watch?v=eTzIcM3aspM" target="_blank" class="fwn">Part 4</A>
-<BR><A HREF="http://www.youtube.com/watch?v=Dnq7w4RIAXI" target="_blank" class="fwn">Part 5</A>
-</SMALL>
-<BR>
-<BR>
-<LI>
-Grisham W (<a href="http://www.funjournal.org/downloads/200981/grisham81.pdf" target="_blank" class="fwn">2009</a>) Modular digitial course in undergraduate neuroscience education (MDCUNE): A website offering free digital tools for neuroscience educators. Journal of Undergraduate Neuroscience Education 8:A26-A31 <A href="http://www.funjournal.org/downloads/200981/grisham81.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<BR><SMALL>
-An excellent example of how resources such as GeneNetwork and the Mouse Brain Library can be used in class room labs.
-</SMALL>
-<LI>
-H&uuml;bner N, Wallace CA, Zimdahl H, Petretto E, Schulz H, Maciver F, Mueller M, Hummel O, Monti J, Zidek V, Musilova A, Kren V, Causton H, Game L, Born G, Schmidt S, Muller A, Cook SA, Kurtz TW, Whittaker J, Pravenec M, Aitman TJ (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15711544" target="_blank" class="fwn">2005</A>) Integrated transcriptional profiling and linkage analysis for identification of genes underlying disease. Nature Genetics 37: 243-253. [Please cite this article if you have used one of the rat HXB kidney or peritoneal fat data sets.]
-<LI>
-Kang HM, Ye C, Eskin E (2008) Accurate discovery of expression quantitative trait loci under confounding from spurious and genuine regulatory hotspots. Genetics 180:1909-1925
-<A href="http://www.genetics.org/cgi/content/abstract/genetics.108.094201v1" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>. [An important method that can greatly improve the ability to resolve true genetic interactions in expression genetic studies.]
-<LI>
-Ljungberg K, Holmgren S, Carlborg O (<A HREF="http://bioinformatics.oupjournals.org/cgi/content/abstract/bth175?ijkey=21Pp0pgOuBL6Q&keytype=ref" class="fwn" target="_blank">2004</A>) Simultaneous search for multiple QTL using the global optimization algorithm DIRECT. Bioinformatics 20:1887-1895. [Please review and cite this article if you have exploited the DIRECT pair-scan tool and output graphs in WebQTL.]
-<LI>
-Manly KF, Wang J, Williams RW (<A HREF="http://genomebiology.com/2005/6/3/R27" class="fwn" target="_blank">2005</A>) Weighting by heritability for detection of quantitative trait loci with microarray estimates of gene expression. Genome Biology 6: R27 <A href="http://genomebiology.com/2005/6/3/R27" class="fwn" target="_blank"><I>Full Text HTML and PDF Version</I></A>. [Please cite this article if you have used one of the HWT (Heritability Weighted Transform) data sets.]
-<LI>
-Manly K, Williams RW (2001) WEBQTL—WWW service for mapping quantitative trait loci. International Mouse Genome Conference 15: 74. [First published abstract on WebQTL, presented Oct 2001, Edinburgh; also see <A HREF="http://www.complextrait.org/archive/2002/HTML/manly.html" class="fwn" target="_blank">2002</A> CTC abstract]
-<LI>
-Taylor BA, Heiniger HJ, Meier H (<A HREf="http://www.ncbi.nlm.nih.gov/pubmed/4719448">1973</A>) Genetic analysis of resistance to cadmium-induced teticular damage in mice. Proc Soc Exp Biol Med 143:629-33 [This is one of the first full paper on the use of recombinant inbred strains in biomedical research and the first paper to use BXD lines of mice. The <I>cdm</I> locus that they mapped to distal Chr 3 was subsequently defined as the <I>Slc38a8</I> metal testicular metal ion transporter. <A HREF="/images/upload/Taylor_1973.pdf"> Full text</A>
-<LI>
-Webster JA, Gibbs JR, Clarke J, Ray M, Zhang W, Holmans P, Rohrer K, Zhao A, Marlowe L, Kaleem M, McCorquodale DS 3rd, Cuello C, Leung D, Bryden L, Nath P, Zismann VL, Joshipura K, Huentelman MJ, Hu-Lince D, Coon KD, Craig DW, Pearson JV; NACC-Neuropathology Group, Heward CB, Reiman EM, Stephan D, Hardy J, Myers AJ (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed/19361613" class="fwn" target="_blank">2009</A>) Genetic control of human brain transcript expression in Alzheimer disease. Am J Hum Genet 84:445-58. [Please review and cite this article if you have used the HUMAN data set by Myers and colleagues in GeneNetwork.]
-<LI>
-Williams RW, Shou S, Lu L, Wang J, Manly KF, Hsu HC, Mountz J, Threadgill DW (<A HREF="http://www.complextrait.org/ctc2002/williams.html" class="fwn" target="_blank">2002</A>) Genomic analysis of transcriptional networks: combining microarrays with complex trait analysis. Complex Trait Consortium 1 [One of the first published abstracts on system genetic analysis of microarray data sets, presented May 2002.]
-<LI>
-Zhang B, Schmoyer D, Kirov S, Snoddy J (<a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=14975175" target="_blank" class="fwn">2004</a>) GOTree Machine (GOTM): a web-based platform for interpreting sets of interesting genes using Gene Ontology hierarchies. BMC Bioinformatics 5:16. [This reference describes GOTM--the predecessor of WebGestalt that is now used to analyze sets of covarying transcripts.]
-
-</OL>
-</Blockquote>
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2019" class="subtitle"">GeneNetwork (2019) </A> (not complete)
-<BLOCKQUOTE>
-
-</Blockquote>
-<OL>
-
-<LI>
-Théberge ET, Baker JA, Dubose C, Boyle JK, Balce K, Goldowitz D, Hamre KM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/30589433" target="_blank" class="fwn">2019</A>) Genetic influences on the amount of cell death in the neural tube of BXD mice exposed to acute ethanol at midgestation. Alcohol Clin Exp Res 43:439-452
-<LI>
-Roy S, Zaman KI, Williams RW, Homayouni R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/30871457" target="_blank" class="fwn">2019</A>) Evaluation of Sirtuin-3 probe quality and co-expressed genes using literature cohesion. BMC Bioinformatics 20(Suppl 2):104
-
-
-</OL>
-</Blockquote>
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2018" class="subtitle"">GeneNetwork (2018) </A> (not complete)
-<BLOCKQUOTE>
-
-</Blockquote>
-<OL>
-
-<LI>Ashbrook DG, Mulligan MK, Williams RW Post-genomic behavioral genetics: From revolution to routine (<A HREF="https://ncbi.nlm.nih.gov/pubmed/29193773" target="_blank" class="fwn">2018</A>) Genes Brain Behav 17:e12441
-<LI>
-de Vries M, Faiz A, Woldhuis RR, Postma DS, de Jong TV, Sin DD, Bossé Y, Nickle DC, Guryev V, Timens W, van den Berge M, Brandsma CA (<A HREF="https://ncbi.nlm.nih.gov/pubmed/29212667" target="_blank" class="fwn">2018</A>) Lung tissue gene-expression signature for the ageing lung in COPD. Thorax 73:609-617
-<LI>
-Diessler S, Jan M, Emmenegger Y, Guex N, Middleton B, Skene DJ, Ibberson M, Burdet F, Götz L, Pagni M, Sankar M, Liechti R, Hor CN, Xenarios I, Franken P (<A HREF="https://ncbi.nlm.nih.gov/pubmed/30091978" target="_blank" class="fwn">2018</A>) A systems genetics resource and analysis of sleep regulation in the mouse. PLoS Biology 16(8):e2005750
-<LI>
-King R, Struebing FL, Li Y, Wang J, Koch AA, Cooke Bailey JN, Gharahkhani P; International Glaucoma Genetics Consortium; NEIGHBORHOOD Consortium, MacGregor S, Allingham RR, Hauser MA, Wiggs JL, Geisert EE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/29370175" target="_blank" class="fwn">2018</A>) Genomic locus modulating corneal thickness in the mouse identifies POU6F2 as a potential risk of developing glaucoma. PLoS Genet 14:e1007145
-<LI>
-Lu Y, Zhou D, King R, Zhu S, Simpson CL, Jones BC, Zhang W, Geisert EE, Lu L (<A HREF="https://ncbi.nlm.nih.gov/pubmed/30619460" target="_blank" class="fwn">2018</A>) The genetic dissection of Myo7a gene expression in the retinas of BXD mice. Mol Vis 24:115-126
-<LI>
-Struebing FL, King R, Li Y, Cooke Bailey JN; NEIGHBORHOOD consortium, Wiggs JL, Geisert EE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/29421330" target="_blank" class="fwn">2018</A>) Genomic loci modulating retinal ganglion cell death following elevated IOP in the mouse. Exp Eye Res 169:61-67
-
-
-</OL>
-</Blockquote>
-
-
-
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2017" class="subtitle"">GeneNetwork (2017) </A> (not complete)
-<BLOCKQUOTE>
-
-</Blockquote>
-<OL>
-
-<LI>
-Baker JA, Li J, Zhou D, Yang M, Cook MN, Jones BC, Mulligan MK, Hamre KM, Lu L (<A HREF="https://ncbi.nlm.nih.gov/pubmed/28027852" target="_blank" class="fwn">2017</A>) Analyses of differentially expressed genes after exposure to acute stress, acute ethanol, or a combination of both in mice. Alcohol 58:139-151
-<LI>
-Baud A, Mulligan MK, Casale FP, Ingels JF, Bohl CJ, Callebert J, Launay JM, Krohn J, Legarra A, Williams RW, Stegle O (<A HREF="https://ncbi.nlm.nih.gov/pubmed/28121987" target="_blank" class="fwn">2017</A>) Genetic variation in the social environment contributes to health and disease. PLoS Genet 13(1):e1006498
-<LI>Brockmann GA, Arends D, Heise S, Dogan A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27933540" target="_blank" class="fwn">2017</A>) Systems genetics of obesity. Methods Mol Biol. 2017;1488:481-497
-<LI>
-Grisham W, Brumberg JC, Gilbert T, Lanyon L, Williams RW, Olivo R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/29371844" target="_blank" class="fwn">2017</A>) Teaching with Big Data: Report from the 2016 Society for Neuroscience Teaching Workshop. J Undergrad Neurosci Educ 16:A68-A76
-<LI>
-
-Jones BC, Jellen LC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27933539" target="_blank" class="fwn">2017</A>) Systems genetics analysis of iron and its regulation in brain and periphery. Methods Mol Biol 1488:467-480
-<LI>
-Lopez MF, Miles MF, Williams RW, Becker HC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27793543" target="_blank" class="fwn">2017</A>) Variable effects of chronic intermittent ethanol exposure on ethanol drinking in a genetically diverse mouse cohort. Alcohol 58:73-82
-<LI>
-Parker CC, Dickson PE, Philip VM, Thomas M, Chesler EJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/28398643" target="_blank" class="fwn">2017</A>) Curr Protoc Neurosci 79:8.39.1-8.39.20
-<LI>
-Porcu P, O'Buckley TK, Lopez MF, Becker HC, Miles MF, Williams RW, Morrow AL (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27884493" target="_blank" class="fwn">2017</A>) Initial genetic dissection of serum neuroactive steroids following chronic intermittent ethanol across BXD mouse strains. Alcohol 58:107-125
-<LI>
-Rinker JA, Fulmer DB, Trantham-Davidson H, Smith ML, Williams RW, Lopez MF, Randall PK, Chandler LJ, Miles MF, Becker HC, Mulholland PJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27884493" target="_blank" class="fwn">2017</A>) Differential potassium channel gene regulation in BXD mice reveals novel targets for pharmacogenetic therapies to reduce heavy alcohol drinking. Alcohol 58:33-45
-<LI>
-van der Vaart AD, Wolstenholme JT, Smith ML, Harris GM, Lopez MF, Wolen AR, Becker HC, Williams RW, Miles MF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27838001" target="_blank" class="fwn">2017</A>) The allostatic impact of chronic ethanol on gene expression: A genetic analysis of chronic intermittent ethanol treatment in the BXD cohort. Alcohol 58:93-106
-
-
-</OL>
-</Blockquote>
-
-
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2016" class="subtitle"">GeneNetwork (2016) </A>
-<BLOCKQUOTE>
-
-</Blockquote>
-<OL>
-
-<LI>
-Alam G, Miller DB, O'Callaghan JP, Lu L, Williams RW, Jones BC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27182044" target="_blank" class="fwn">2016</A>) MPTP neurotoxicity is highly concordant between the sexes among BXD recombinant inbred mouse strains. Neurotoxicology 55:40-7
-<LI>
-Chintalapudi SR, Wang X, Li H, Lau YH, Williams RW, Jablonski MM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27881906" target="_blank" class="fwn">2016</A>) Genetic and immunohistochemical analysis of HSPA5 in mouse and human retinas. Molecular Vision 22:1318-1331
-<LI>
-Lu H, Lu L, Williams RW, Jablonski MM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27011731" target="_blank" class="fwn">2016</A>) Iris transillumination defect and its gene modulators do not correlate with intraocular pressure in the BXD family of mice. Molecular Vision 22:224-233
-<LI>
-Merkwirth C, Jovaisaite V, Durieux J, Matilainen O, Jordan SD, Quiros PM, Steffen KK, Williams EG, Mouchiroud L, Tronnes SU, Murillo V, Wolff SC, Shaw RJ, Auwerx J, Dillin A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27133168" target="_blank" class="fwn">2016</A>) Two conserved histone demethylases regulate mitochondrial stress-induced longevity. Cell 165:1209-1223
-<LI>
-Neuner SM, Garfinkel BP, Wilmott LA, Ignatowska-Jankowska BM, Citri A, Orly J, Lu L, Overall RW, Mulligan MK, Kempermann G, Williams RW, O'Connell KM, Kaczorowski CC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27460150" target="_blank" class="fwn">2016</A>) Systems genetics identifies Hp1bp3 as a novel modulator of cognitive aging. Neurobiol Aging 46:58-67
-<LI>
-Shi X, Walter NA, Harkness JH, Neve KA, Williams RW, Lu L, Belknap JK, Eshleman AJ, Phillips TJ, Janowsky A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27031617" target="_blank" class="fwn">2016</A>) Genetic polymorphisms affect mouse and human Trace Amine-Associated Receptor 1 function. PLoS One 11(3):e0152581
-<LI>
-Schultz NG, Ingels J, Hillhouse A, Wardwell K, Chang PL, Cheverud JM, Lutz C, Lu L, Williams RW, Dean MD (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26935419" target="_blank" class="fwn">2016</A>) The genetic basis of baculum size and shape variation in mice. G3 (Bethesda) 6(5):1141-1151
-<LI>
-Sloan Z, Arends D, Broman KW, Centeno A, Furlotte N, Nijveen H, Yan L, Zhou X, Williams RW, Prins P (2016) GenetNetwork: framework for web-based genetics. The Journal of Open Source Software http://joss.theoj.org/papers/10.21105/joss.00025 (http://dx.doi.org/10.21105/joss.00025)
-<LI>
-Wang X, Pandey AK, Mulligan MK, Williams EG, Mozhui K, Li Z, Jovaisaite V, Quarles LD, Xiao Z, Huang J, Capra JA, Chen Z, Taylor WL, Bastarache L, Niu X, Pollard KS, Ciobanu DC, Reznik AO, Tishkov AV, Zhulin IB, Peng J, Nelson SF, Denny JC, Auwerx J, Lu L, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26833085" target="_blank" class="fwn">2016</A>) Joint mouse-human phenome-wide association to test gene function and disease risk. Nat Commun 7:10464
- <LI>
-Williams EG, Wu Y, Jha P, Dubuis S, Blattmann P, Argmann CA, Houten SM, Amariuta T, Wolski W, Zamboni N, Aebersold R, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27284200" target="_blank" class="fwn">2016</A>) Systems proteomics of liver mitochondria function. Science 352(6291):aad0189
-
-
-
-</OL>
-</Blockquote>
-
-
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2015" class="subtitle"">GeneNetwork (2015) </A>
-<BLOCKQUOTE>
-
-</Blockquote>
-<OL>
-
-<LI>
-Ashbrook DG, Gini B, Hager R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26701914" target="_blank" class="fwn">2015</A>) Genetic variation in offspring indirectly influences the quality of maternal behaviour in mice. eLIFE 4:e11814
-<LI>
-Ashbrook DG, Williams RW, Lu L, Hager R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26190982" target="_blank" class="fwn">2015</A>) A cross-species genetic analysis identifies candidate genes for mouse anxiety and human bipolar disorder. Frontiers in Behavioral Neuroscience 9:171
-<LI>
-Chaum E, Winborn CS, Bhattacharya S (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25963977" target="_blank" class="fwn">2015</A>) Genomic regulation of senescence and innate immunity signaling in the retinal pigment epithelium. Mammalian Genome 26:210-221 <A HREF="/images/upload/ChaumMammGenome2015.pdf"> Full text</A>
-<LI>
-Cheng Q, Seltzer Z, Sima C, Lakschevitz FS, Glogauer M (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25608512" target="_blank" class="fwn">2015</A>) Quantitative trait loci and candidate genes for neutrophil recruitment in sterile inflammation mapped in AXB-BXA recombinant inbred mice. PLoS One 10:e0124117
-<LI>
-Cook MN, Baker JA, Heldt SA, Williams RW, Hamre KM, Lu L (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25991709" target="_blank" class="fwn">2015</A>) Identification of candidate genes that underlie the QTL on chromosome 1 that mediates genetic differences in stress-ethanol interactions. Physiol Genomics 47:308-317
-<LI>
-Delprato A, Bonheur B, Algéo MP, Rosay P, Lu L, Williams RW, Crusio WE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26449520" target="_blank" class="fwn">2015</A>) Systems genetic analysis of hippocampal neuroanatomy and spatial learning in mice. Genes Brain Behav 14(8):591-606
-<LI>
-Ferguson B, Ram R, Handoko HY, Mukhopadhyay P, Muller HK, Soyer HP, Morahan G, Walker GJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25088201" target="_blank" class="fwn">2015</A>) Melanoma susceptibility as a complex trait: genetic variation controls all stages of tumor progression. Oncogene 34:2879-86
-<LI>
-King R, Lu L, Williams RW, Geisert EE. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26604663" target="_blank" class="fwn">2015</A>) Transcriptome networks in the mouse retina: An exon level BXD RI database. Mol Vis 21:1235-1251
-<LI>
-Lee J, Seol MY, Jeong S, Kwon HJ, Lee CR, Ku CR, Kang SW, Jeong JJ, Shin DY, Nam KH, Lee EJ, Chung WY, Jo YS (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25942439" target="_blank" class="fwn">2015</A>) KSR1 is coordinately regulated with Notch signaling and oxidative phosphorylation in thyroid cancer. J Mol Endocrinol 54:115-124
-<LI>
-Padula AE, Griffin WC 3rd, Lopez MF, Nimitvilai S, Cannady R, McGuier NS, Chesler EJ, Miles MF, Williams RW, Randall PK, Woodward JJ, Becker HC, Mulholland PJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25942439" target="_blank" class="fwn">2015</A>) KCNN genes that encode small-conductance Ca(2+)-activated K(+) channels influence alcohol and drug addiction. Neuropsychopharmacology 40:1928-1939
-<LI>
-Scott RE, Ghule PN, Stein JL, Stein GS (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25662840" target="_blank" class="fwn">2015</A>) Cell cycle gene expression networks discovered using systems biology: Significance in carcinogenesis. J Cell Physiol 230:2533-42
-<LI>
-Shea CJ, Carhuatanta KA, Wagner J, Bechmann N, Moore R, Herman JP, Jankord R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26079812" target="_blank" class="fwn">2015</A>) Variable impact of chronic stress on spatial learning and memory in BXD mice. Physiol Behav. 150:69-77 <A HREF="http://www.sciencedirect.com/science/article/pii/S0031938415003583"> Full text</A>
-<LI>
-Xue Y, Li J, Yan L, Lu L, Liao FF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26092713" target="_blank" class="fwn">2015</A>) Genetic variability to diet-induced hippocampal dysfunction in BXD recombinant inbred (RI) mouse strains. Behav Brain Res 292:83-94
-<LI>
-Williams EG, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26140590" target="_blank" class="fwn">2015</A>) The convergence of systems and reductionist approaches in complex trait analysis. Cell 162:23-32. <SMALL><A HREF="/images/upload/WilliamsEG_Auwerx_Cell2015.pdf" target="_blank" class="fwn">PDF version</A></SMALL>
-
-
-</OL>
-</Blockquote>
-
-
-
-
-
-
-
-
-
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2014" class="subtitle"">GeneNetwork (2014) </A>
-<BLOCKQUOTE>
-
-</Blockquote>
-<OL>
-
-
-<LI>
-Ashbrook GN, Delprato A, Grellmann C, Klein M, Wetzel R, Overall RW, Badea A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/get" target="_blank" class="fwn">2014</A>) Transcript co-variance with Nestin in two mouse genetic reference populations identifies Lef1 as a novel candidate regulator of neural precursor cell proliferation in the adult hippocampus. Frontiers in Neuroscience in press
-<LI>
-Ashbrook DG, Williams RW, Lu L, Stein JL, Hibar DP, Nichols TE, Medland SE, Thompson PM, Hager R. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25280473" target="_blank" class="fwn">2014</A>) Joint genetic analysis of hippocampal size in mouse and human identifies a novel gene linked to neurodegenerative disease. BMC Genomics 15:850
-<LI>
-Carhuatanta KA, Shea CJ, Herman JP, Jankord R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25374516" target="_blank" class="fwn">2014</A>) Unique genetic loci identified for emotional behavior in control and chronic stress conditions. Front Behav Neurosci 8:341
-<LI>
-Emery FD, Parvathareddy J, Pandey AK, Cui Y, Williams RW, Miller MA (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24687986" target="_blank" class="fwn">2014</A>) Genetic control of weight loss during pneumonic Burkholderia pseudomallei infection. Pathog Dis 71:249-264
-<LI>
-Goldowitz D, Lussier AA, Boyle JK, Wong K, Lattimer SL, Dubose C, Lu L, Kobor MS, Hamre KM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25076964" target="_blank" class="fwn">2014</A>) Molecular pathways underpinning ethanol-induced neurodegeneration. Front Genet 5:203
-<LI>
-Graybeal C, Bachu M, Mozhui K, Saksida LM, Bussey TJ, Sagalyn E, Williams RW, Holmes A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24586288" target="_blank" class="fwn">2014</A>) Strains and stressors: an analysis of touchscreen learning in genetically diverse mouse strains. PLoS One 9(2):e87745
-<LI>
-Hall RA, Liebe R, Hochrath K, Kazakov A, Alberts R, Laufs U, Böhm M, Fischer HP, Williams RW, Schughart K, Weber SN, Lammert F (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24586654" target="_blank" class="fwn">2014</A>) Systems genetics of liver fibrosis: Identification of fibrogenic and expression quantitative trait loci in the BXD murine reference population.PLoS One 9(2):e89279
-<LI>
-Harenza JL, Muldoon PP, Biasi MD, Imad Damaj M, Miles MF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24289814" target="_blank" class="fwn">2014</A>) Genetic variation within the Chrna7 gene modulates nicotine reward-like phenotypes in mice. Genes, Brain & Behavior 13:213-225
-<LI>
-Hayes SK, Hager R, Grencis RK (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24628794" target="_blank" class="fwn">2014</A>) Sex-dependent genetics effects on immune responses to parasitic nematodes. BMC Genomics 15:193
-<LI>
-Huang Y, Zhu X, Wang L, Liu X, Lu L, Gu W, Jiao Y (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25133246" target="_blank" class="fwn">2014</A>) Genome wide analysis of sex difference in gene expression profiles of bone formations using sfx mice and BXD RI strains. ScientificWorldJournal 2014:584910
-<LI>
-Hasenfuss SC, Bakiri L, Thomsen MK, Williams EG, Auwerx J, Wagner EF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24411941" target="_blank" class="fwn">2014</A>) Regulation of steatohepatitis and PPARγ signaling by distinct AP-1 dimers. Cell Metab. 2014 Jan 7;19(1):84-95.
-<LI>
-Jones BC, O'Callaghan JP, Lu L, Williams RW, Alam G, Miller DB (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25192776" target="_blank" class="fwn">2014</A>) Genetic correlational analysis reveals no association between MPP+ and the severity of striatal dopaminergic damage following MPTP treatment in BXD mouse strains. Neurotoxicol Teratol pii: S0892-0362(14)00159-7
-<LI>
-Keeley PW, Whitney IE, Madsen NR, St John AJ, Borhanian S, Leong SA, Williams RW, Reese BE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24954025" target="_blank" class="fwn">2014</A>) Independent genomic control of neuronal number across retinal cell types. Dev Cell 30:103-109
-<LI>
-Keeley PW, Zhou C, Lu L, Williams RW, Melmed S, Reese BE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24927528" target="_blank" class="fwn">2014</A>) Pituitary tumor-transforming gene 1 regulates the patterning of retinal mosaics. Proc Natl Acad Sci USA 111:9295-
-<LI>
-Kweon KH, Lee CR, Jung SJ, Ban EJ, Kang SW, Jeong JJ, Nam KH, Jo YS, Lee J, Chung WY (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25109285" target="_blank" class="fwn">2014</A>) Sirt1 induction confers resistance to etoposide-induced genotoxic apoptosis in thyroid cancers. Int J Oncol 45:2065-2075
-<LI>
-Loos M, Mueller T, Gouwenberg Y, Wijnands R, van der Loo RJ, Birchmeier C, Smit AB, Spijker S (<A HREF="/images/upload/Loos_Spijker_Nrg3Impulsive_BioPsch_2014.pdf" target="_blank" class="fwn">2014</A>) Neuregulin-3 in the mouse medial prefrontal cortex regulates impulsive action. Biol Psychiatry 76:648-655
-<LI>
-Lotan A, Fenckova M, Fralten J, Alttoa A, Dixson L, Williams RW, van der Voet M (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25414627" target="_blank" class="fwn">2014</A>) Neuroinformatic analyses of common and distinct genetic components associate with major neuropsychiatric disorders. Frontiers in Neuroscience 8:331
-<LI>
-McLachlan SM, Aliesky H, Banuelos B, Magana J, Williams RW, Rapoport B. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25051451" target="_blank" class="fwn">2014</A>) Immunoglobulin heavy chain variable region and major histocompatibility region genes are linked to induced graves' disease in females from two very large families of recombinant inbred mice. Endocrinology 155:4094-4103
-<LI>
-McLachlan SM, Hamidi S, Aliesky H, Williams RW, Rapoport B (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24564389" target="_blank" class="fwn">2014</A>) Sex, genetics and the control of thyroxine and thyrotropin in mice. Thyroid 24:1080-1087
-<LI>
-Muldoon PP, Jackson KJ, Perez E, Harenza JL, Molas S, Rais B, Anwar H, Zaveri NT, Maldonado R, Maskos U, McIntosh JM, Dierssen M, Miles MF, Chen X, De Biasi M, Damaj MI (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24750073" target="_blank" class="fwn">2014</A>) The alpha3beta4* nicotinic ACh receptor subtype mediates physical dependence to morphine: mouse and human studies. Br J Pharmacol 171:3845-3857
-<Li>
-Nguyen C, Baten A, Morahan G (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24647628" target="_blank" class="fwn">2014</A>) Comparison of sequence variants in transcriptomic control regions across 17 mouse genomes. Database (Oxford): bau020. doi: 10.1093/database/bau020
-<LI>
-Pandey AK, Lu L, Wang X, Homayouni R, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24523945" target="_blank" class="fwn">2014</A>) Functionally enigmatic genes: a case study of the brain ignorome. PLoS One 9(2):e88889
-<LI>
-Pandey AK, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25172476" target="_blank" class="fwn">2014</A>) Genetics of gene expression in CNS. Int Rev Neurobiol 116:195-231
-<LI>
-Pietrzykowski A, Spijker S (<A HREF="https://ncbi.nlm.nih.gov/pubmed/get" target="_blank" class="fwn">2014</A>) Impulsivity and comorbid traits: a multi-step approach for finding putative responsible microRNAs in the amygdala. Frontiers in Neuroscience in press
-<LI>
-Pirinen E, Cantó C, Jo YS, Morato L, Zhang H, Menzies KJ, Williams EG, Mouchiroud L, Moullan N, Hagberg C, Li W, Timmers S, Imhof R, Verbeek J, Pujol A, van Loon B, Viscomi C, Zeviani M, Schrauwen P, Sauve AA, Schoonjans K, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24770626" target="_blank" class="fwn">2014</A>) Pharmacological inhibition of poly(ADP-ribose) polymerases improves fitness and mitochondrial function in skeletal muscle. Cell Metab 19:1034-1041
-<LI>
-Poon A, Goldowitz D (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24640950" target="_blank" class="fwn">2014</A>) Identification of genetic loci that modulate cell proliferation in the adult rostral migratory stream using the expanded panel of BXD mice. BMC Genomics 15:206
-<LI>
-Porcu P, Morrow AL (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24770626" target="_blank" class="fwn">2014</A>) Divergent neuroactive steroid responses to stress and ethanol in rat and mouse strains: Relevance for human studies. Psychopharmacology (Berl) 231:3257-3272
-<LI>
-Ram R, Mehta M, Balmer L, Gatti DM, Morahan G (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25236450" target="_blank" class="fwn">2014</A>)
-Rapid identification of major-effect genes using the collaborative cross. Genetics 198:75-86
-PMID: 25236450
-<LI>
-Ryu D, Jo YS, Lo Sasso G, Stein S, Zhang H, Perino A, Lee JU, Zeviani M, Romand R, Hottiger MO, Schoonjans K, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25200183" target="_blank" class="fwn">2014</A>) A SIRT7-dependent acetylation switch of GABPβ1 controls mitochondrial function. Cell Metab in press
-<LI>
-Thompson RL, Williams RW, Kotb M, Sawtell NM. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24651695" target="_blank" class="fwn">2014</A>) A forward phenotypically driven unbiased genetic analysis of host genes that moderate herpes simplex virus virulence and stromal keratitis in mice. PLoS One 9(3):e92342
-<LI>
-Toth LA, Trammell RA, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24535895" target="_blank" class="fwn">2014</A>) Mapping complex traits using families of recombinant inbred strains: an overview and example of mapping susceptibility to Candida albicans induced illness phenotypes. Pathog Dis 71:234-248
-<LI>
-Unger EL, Jones BC, Bianco LE, Allen RP, Earley CJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24406439" target="_blank" class="fwn">2014</A>) Diurnal variations in brain iron concentrations in BXD RI mice. Neuroscience 263:54-59
-<LI>
-van de Lagemaat LN, Nijhof B, Bosch DG, Kohansal-Nodehi M, Keerthikumar S, Heimel JA (<A HREF="https://ncbi.nlm.nih.gov/pubmed/get" target="_blank" class="fwn">2014</A>) Age-related decreased inhibitory versus excitatory gene expression in the adult autistic brain. Frontiers in Neuroscience in press
-<LI>
-Vied CM, Freudenberg F, Wang Y, Raposo AA, Feng D, Nowakowski RS (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25191221" target="_blank" class="fwn">2014</A>) A multi-resource data integration approach: identification of candidate genes regulating cell proliferation during neocortical development. Frontiers in Neuroscience 8:257
-<LI>
-Wang L, Lu W, Zhang L, Huang Y, Scheib R, Liu X, Myers L, Lu L, Farber CR, Liu G, Wang CY, Deng H, Williams RW, Wang Y, Gu W, Jiao (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24416236" target="_blank" class="fwn">2014</A>) Trps1 differentially modulates the bone mineral density between male and female mice and its polymorphism associates with BMD differently between women and men. PLoS One 9(1):e84485
-<LI>
-Wu Y, Williams EG, Dubuis S, Mottis A, Jovaisaite V, Houten SM, Argmann CA, Faridi P, Wolski W, Kutalik Z, Zamboni N, Auwerx J, Aebersold R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25215496" target="_blank" class="fwn">2014</A>) Multilayered genetic and omics dissection of mitochondrial activity in a mouse reference population. Cell 158:1415-1430
-<LI>
-Williams EG, Mouchiroud L, Frochaux M, Pandey A, Andreux PA, Deplancke B, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25255223" target="_blank" class="fwn">2014</A>) An evolutionarily conserved role for the aryl hydrocarbon receptor in the regulation of movement. PLoS Genet 10:e1004673
-<LI>
-Ye R, Carneiro AM, Airey D, Sanders-Bush E, Williams RW, Lu L, Wang J, Zhang B, Blakely RD (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24102824" target="_blank" class="fwn">2014</A>) Evaluation of heritable determinants of blood and brain serotonin homeostasis using recombinant inbred mice. Genes Brain Behav. 13:247-260
-
-
-</OL>
-</Blockquote>
-
-
-
-
-
-
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2013" class="subtitle"">GeneNetwork (2013) </A>
-<BLOCKQUOTE>
-
-</Blockquote>
-<OL>
-
-<LI>
-Bhandari P, Hill JS, Farris SP, Costin B, Martin I, Chan CL, Alaimo JT, Bettinger JC, Davies AG, Miles MF, Grotewiel M (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22239914" target="_blank" class="fwn">2013</A>) Chloride intracellular channels modulate acute ethanol behaviors in Drosophila, Caenorhabditis elegans and mice. Genes, Brain & Behavior 11:387-97
-<LI>
-Cheng Y, Gaughan J, Midic U, Han Z, Liang CG, Patel BG, Latham KE (<A HREF="http://www.genetics.org/content/193/3/877.long" target="_blank" class="fwn">2013</A>) Systems genetics implicates cytoskeletal genes in oocyte control of cloned embryo quality. Genetics 193:877-896 <A HREF="/images/upload/Cheng_Latham_2013.pdf" target="_blank" class="fwn">PDF version</A>
-<LI>
-Dogan A, Lasch P, Neuschl C, Millrose MK, Alberts R, Schughart K, Naumann D, Brockmann GA. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23758785" target="_blank" class="fwn">2013</A>) ATR-FTIR spectroscopy reveals genomic loci regulating the tissue response in high fat diet fed BXD recombinant inbred mouse strains. BMC Genomics 14:386
-<LI>
-DuBose CS, Chesler EJ, Goldowitz D, Hamre KM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23289978" target="_blank" class="fwn">2013</A>) Use of the expanded panel of BXD mice narrow QTL regions in ethanol-induced locomotor activation and motor incoordination. Alcohol Clin Exp Res 37:170-83
-<LI>
-Farris SP, Miles MF (<A HREF="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0082435" target="_blank" class="fwn">2013</A>) Fyn-dependent gene networks in acute ethanol sensitivity. PLoS One 8:e82435
-<LI>
-Houtkooper RH, Mouchiroud L, Ryu D, Moullan N, Katsyuba E, Knott G, Williams RW, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23698443" target="_blank" class="fwn">2013</A>) Mitonuclear protein imbalance as a conserved longevity mechanism. Nature 497:451-457 <A HREF="/images/upload/Houtkooper_Williams_Auwerx_Nature_2013.pdf" target="_blank" class="fwn">PDF version</A>
-<LI>
-Huang Y, Wang L, Bennett B, Williams RW, Wang YJ, Gu WK, Jiao Y (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24085430" target="_blank" class="fwn">2013</A>) Potential role of Atp5g3 in epigenetic regulation of alcohol preference or obesity from a mouse genomic perspective. Genet Mol Res 12:3662-3674
-<LI>
-Jellen LC, Lu L, Wang X, Unger EL, Earley CJ, Allen RP, Williams RW, Jones BC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23911809" target="_blank" class="fwn">2013</A>) Iron deficiency alters expression of dopamine-related genes in the ventral midbrain in mice. Neuroscience 252:13-23
-<LI>
-Jiao Y, Chen H, Yan J, Wang L, Huang Y, Liu X, Williams RW, Lu L, Wang Y, Gu W (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23665904" target="_blank" class="fwn">2013</A>) Genome-wide gene expression profiles in antioxidant pathways and their potential sex differences and connections to vitamin C in mice. Int J Mol Sci 14:10042-62
-<LI>
-Jones BC, Miller DB, O'Callaghan JP, Lu L, Unger EL, Alam G, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23558233" target="_blank" class="fwn">2013</A>) Systems analysis of genetic variation in MPTP neurotoxicity in mice. Neurotoxicology 37C:26-34
-<LI>
-Liebe R, Hall RA, Williams RW, Dooley S, Lammert F (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23943854" target="_blank" class="fwn">2013</A>) Systems genetics of hepatocellular damage in vivo and in vitro: identification of a critical network on chromosome 11 in mouse. Physiological Genomics 45:931-939
-<LI>
-Lindblom RP, Aeinehband S, Parso R, Strom M, Al Nimer F, Zhang XM, Domingues CA, Flytzani S, Siez M, Piehl F (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23558233" target="_blank" class="fwn">2013</A>) Genetic variability in the rat Aplec C-type lectin gene cluster regulates lymphocyte trafficking and motor neuron survival after traumatic nerve root injury. Journal of Neuroinflammation 10:60
-<LI>
-Mulligan MK, Dubose C, Yue J, Miles MF, Lu L, Hamre KM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23847651" target="_blank" class="fwn">2013</A>) Expression, covariation, and genetic regulation of miRNA biogenesis genes in brain supports their role in addiction, psychiatric disorders, and disease. Frontiers in Genetics 4:126
-<LI>
-Swaminathan S, Lu H, Williams RW, Lu L, Jablonski MM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23582180" target="_blank" class="fwn">2013</A>) Genetic modulation of the iris transillumination defect: a systems genetics analysis using the expanded family of BXD glaucoma strains. Pigment Cell Melanoma Research 26:487-98
-<LI>
-Templeton JP, Wang X, Freeman NE, Ma Z, Lu A, Hejtmancik F, Geisert EE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23978599" target="_blank" class="fwn">2013</A>) A crystallin gene network in the mouse retina. Exp Eye Res. 116C:129-140
-<LI>
-Templeton JP, Freeman NE, Nickerson JM, Jablonski MM, Rex TS, Williams RW, Geisert EE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23493296" target="_blank" class="fwn">2013</A>) Innate immune network in the retina activated by optic nerve crush. Invest Ophthalmol Vis Sci. 54:2599-606
-<LI>
-Vanderlinden LA, Saba LM, Kechris K, Miles MF, Hoffman PL, Tabakoff B (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23894363" target="_blank" class="fwn">2013</A>) Whole brain and brain regional coexpression network interactions associated with predisposition to alcohol consumption. PLoS One 8:e68878.
-
-
-
-
-</OL>
-</Blockquote>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2012" class="subtitle"">GeneNetwork (2012) </A>
-<BLOCKQUOTE>
-
-</Blockquote>
-<OL>
-
-<LI>
-Alberts R, Chen H, Pommerenke C, Smit AB, Spijker S, Williams RW, Geffers R, Bruder D, Schughart K (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22182475" target="_blank" class="fwn">2011</A>) Expression QTL mapping in regulatory and helper T cells from the BXD family of strains reveals novel cell-specific genes, gene-gene interactions and candidate genes for auto-immune disease. BMC Genomics 12:610 <A HREF="http://www.biomedcentral.com/content/pdf/1471-2164-12-610.pdf" target="_blank" class="fwn">PDF version</A>
-<LI>
-Andreux PA, Williams EG, Koutnikova H, Houtkooper RH, Champy MF, Henry H, Schoonjana K, Williams RW, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Systems genetics of metabolism: the use of the BXD murine reference panel for multiscalar integration of traits. Cell 150:1287-1299
-<LI>
-Boughter JD Jr, Mulligan MK, St John SJ, Tokita K, Lu L, Heck DH, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Genetic control of a central pattern generator: Rhythmic oromotor movement in mice Is controlled by a major locus near Atp1a2. PLoS One 7:e38169. <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0038169" target="_blank" class="fwn"><I>Full Text version</I> </A>
-<LI>
-Bubier JA, Chesler EJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22422471" target="_blank" class="fwn">2012</A>) Accelerating discovery for complex neurological and behavioral disorders through systems genetics and integrative genomics in the laboratory mouse. Neurotherapeutics 9:338-348 <A href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3325414/" target="_blank" class="fwn"><I>Full Text version</I> </A>
-<LI>
-Bryant CD, Kole LA, Guido MA, Sokoloff G, Palmer AA (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Congenic dissection of a major QTL for methamphetamine sensitivity implicates epistasis. Genes, Brain and Behavior 11:623-632 <A href="/images/upload/Bryant_Palmer2012.pdf" target="_blank" class="fwn"><I>PDF version</I> </A>
-<LI>
-Downing C, Balderrama-Durbin C, Kimball A, Biers J, Wright H, Gilliam D, Johnson TE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22413943" target="_blank" class="fwn">2012</A>) Quantitative trait locus mapping for ethanol teratogenesis in BXD recombinant inbred mice. Alcohol Clin Exp Res. 36:1340-1354
-<LI>
-Durrant C, Swertz MA, Alberts R, Arends D, Möller S, Mott R, Prins P, van der Velde KJ, Jansen RC, Schughart K.(<A HREF="https://ncbi.nlm.nih.gov/pubmed/22396485" target="_blank" class="fwn">2012</A>) Bioinformatics tools and database resources for systems genetics analysis in mice--a short review and an evaluation of future needs. Brief Bioinform 13:135-142 <A HREF="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3294237/" target="_blank" class="fwn">HTML version</A>
-<LI>
-Gini B, Hager R (2012) Recombinant inbred systems can advance research in behavioral ecology. Front. Gene. 3:198 <A HREF="http://www.frontiersin.org/Genetic_Architecture/10.3389/fgene.2012.00198/fullf" target="_blank" class="fwn"><I>Full Text version</I> </A>
-<LI>
-Hager R, Lu L, Rosen GD, Williams RW. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23011133" target="_blank" class="fwn">2012</A>) Genetic architecture supports mosaic brain evolution and independent brain-body size regulation. Nature Communications 3:1079 <A HREF="/images/upload/Hager_Mosaic_NatComm_2012.pdf" target="_blank" class="fwn">PDF version</A> <A href="http://www.nature.com/ncomms/journal/v3/n9/full/ncomms2086.html" target="_blank" class="fwn"><I>Full Text version</I> </A>
-<LI>
-Jellen LC, Unger EL, Lu L, Williams RW, Rousseau S, Wang X, Earley CJ, Allen RP, Miles MF, Jones BC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22457016" target="_blank" class="fwn">2012</A>) Systems genetic analysis of the effects of iron deficiency in mouse brain. Neurogenetics 13:147-157
-<LI>
-McKnite AM, Perez-Munoz ME, Lu L, Williams EG, Brewer S, Andreux PA, Bastiaansen JW, Wang X, Kachman SD, Auwerx J, Williams RW, Benson AK, Peterson DA, Ciobanu DC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22723961" target="_blank" class="fwn">2012</A>) Murine gut microbiota is defined by host genetics and modulates variation of metabolic traits. PLoS One 7:e39191 <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0039191" target="_blank" class="fwn"><I>Full Text version</I> </A>
-<LI>
-Mulligan MK, Wang X, Adler AL, Mozhui K, Lu L, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Complex control of GABA(A) receptor subunit mRNA expression: variation, covariation, and genetic regulation. PLoS One 7:e34586 <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0034586" target="_blank" class="fwn"><I>Full Text version</I> </A>
-<LI>
-Newbury AJ, Rosen GD (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22666227" target="_blank" class="fwn">2012</A>) Genetic, morphometric, and behavioral factors linked to the midsagittal area of the corpus callosum. Frontiers in Genetics 3:91
-<BR><SMALL> <A HREF="http://www.frontiersin.org/Journal/DownloadFile.ashx?pdf=1&FileId=%204774&articleId=%2027108&Version=%201&ContentTypeId=21&FileName=%20fgene-03-00091.pdf" target="_blank" class="fwn">PDF version</A><A href="http://www.frontiersin.org/Neurogenomics/10.3389/fgene.2012.00091/full" target="_blank" class="fwn"><I>Full Text version</I> </A>
-</SMALL>
-
-
-<LI>
-Parker CC, Cheng R, Sokoloff G, Palmer AA (<A HREF="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3368015/" target="_blank" class="fwn">2012</A>) Genome-wide association for methamphetamine sensitivity in an advanced intercross mouse line. Genes, Brain & Behavior 11:52-61
-
-<LI>
-Reinius B, Johansson MM, Radomska KJ, Morrow EH, Pandey GK, Kanduri C, Sandberg R, Williams RW, Jazin E (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23140559" target="_blank" class="fwn">2012</A>) Abundance of female-biased and paucity of male-biased somatically expressed genes on the mouse X-chromosome. BMC Genomics 13:607
-<LI>
-Rietman ML, Sommeijer JP; Neuro-Bsik Mouse Phenomics Consortium, Levelt CN, Heimel JA (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22347157" target="_blank" class="fwn">2012</A>) Candidate genes in ocular dominance plasticity. Frontiers in Neuroscience 6:11 <A href="http://www.frontiersin.org/Journal/DownloadFile.ashx?pdf=1&FileId=%202788&articleId=%2014498&Version=%201&ContentTypeId=21&FileName=%20fnins-06-00011.pdf" target="_blank" class="fwn"><I>PDF version</I> </A>
-<LI>
-Talishinsky A, Rosen GD (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Systems genetics of the lateral septal nucleus in mouse: Heritability, genetic control, and covariation with behavioral and morphological traits. PLoS One 7: e44236
-<SMALL><A HREF="http://www.plosone.org/article/fetchObjectAttachment.action;jsessionid=FD5CD26B1104BCD693F22ABD746ED332?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0038169&representation=PDF" target="_blank" class="fwn">PDF version</A><A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0044236" target="_blank" class="fwn"><I>Full Text version</I> </A>
-</SMALL>
-<LI>
-Williams RW, Mulligan MK (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23195314" target="_blank" class="fwn">2012</A>) Genetic and molecular network analysis of behavior. Int Rev Neurobiol. 104:135-57
-<SMALL><A HREF="/images/upload/Williams_Mulligan_Bioinformatics of Brain Short 2012.pdf" target="_blank" class="fwn">PDF version</A>
-</SMALL>
-<LI>
-Wolen AR, Phillips CA, Langston MA, Vorster PJ, Bruce NA, York TP, Williams RW, Miles MF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22511924" target="_blank" class="fwn">2012</A>) Genetic dissection of acute ethanol responsive gene networks in prefrontal cortex: Functional and mechanistic implications. PLoS One 7:e33575
-<LI>
-Yin L, Unger EL, Jellen LC, Earley CJ, Allen RP, Tomaszewicz A, Fleet JC, Jones BC. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22461179" target="_blank" class="fwn">2012</A>) Systems genetic analysis of multivariate response to iron deficiency in mice. Am J Physiol Regul Integr Comp Physiol 302:R1282-96
-<SMALL><A HREF="/images/upload/Yin_Jones_2012.pdf" target="_blank" class="fwn">PDF version</A>
-</SMALL>
-<LI>
-Ziebarth JD, Cook MN, Wang X, Williams RW, Lu L, Cui Y (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Treatment- and population-dependent activity patterns of behavioral and expression QTLs. PLoS One 7:e31805.
-<SMALL><A HREF="http://www.plosone.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0031805&representation=PDF" target="_blank" class="fwn">PDF version</A><A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0031805" target="_blank" class="fwn"><I>Full Text version</I> </A>
-<LI>
-Zumbrun EE, Abdeltawab NF, Bloomfield HA, Chance TB, Nichols DK, Harrison PE, Kotb M, Nalca A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23207275" target="_blank" class="fwn">2012</A>) Development of a murine model for aerosolized ebolavirus infection using a panel of recombinant inbred mice. Viruses. 2012 Dec 3;4(12):3468-3493
-
-
-</SMALL>
-
-
-
-
-
-
-
-
-</OL>
-</Blockquote>
-
-
-
-
-
-
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2011" class="subtitle"">GeneNetwork (2011) </A>
-<BLOCKQUOTE>
-
-</Blockquote>
-<OL>
-
-
-
-<LI>
-Alberts R, Lu L, Williams RW, Schughart K. (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21535883" target="_blank" class="fwn" >2011</a>) Genome-wide analysis of the mouse lung transcriptome reveals novel molecular gene interaction networks and cell-specific expression signatures. Respir Res 12:61 <A href="http://respiratory-research.com/content/12/1/61" target="_blank" class="fwn"><I>Full Text version</I> </A>
-<LI>
-Alberts R, Chen H, Pommerenke C, Smit AB, Spijker S, Williams RW, Geffers R, Bruder D, Schughart K (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22182475" target="_blank" class="fwn">2011</A>) Expression QTL mapping in regulatory and helper T cells from the BXD family of strains reveals novel cell-specific genes, gene-gene interactions and candidate genes for auto-immune disease. BMC Genomics 12:610 <A href="http://www.biomedcentral.com/1471-2164/12/610/abstract" target="_blank" class="fwn"><I>Full Text version</I> </A>
-<LI>
-Di Curzio DL, Goldowitz D (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21347846" target="_blank" class="fwn" >2011</a>) The genetic basis of adrenal gland weight and structure in BXD recombinant inbred mice. Mammalian Genome 22:209–234 <A href="/images/upload/DiCurzio_Goldowitz-2011_BXDAdrenals.pdf" target="_blank" class="fwn"><I>Full Text PDF version</I> </A>
-<LI>
-Gatti DM, Lu L, Williams RW, Sun W, Wright FA, Threadgill DW, Rusyn I (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21616085" target="_blank" class="fwn" >2011</a>) MicroRNA expression in the livers of inbred mice. Mutation Research 714:126-133
-<LI>
-Gibson JN, Jellen LC, Unger EL, Morahan G, Mehta M, Earley CJ, Allen RP, Lu L, Jones BC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21732193" target="_blank" class="fwn" >2011</a>) Genetic analysis of iron-deficiency effects on the mouse spleen. Mammalian Genome 22:556-62
-<LI>
-Hakvoort TB, Moerland PD, Frijters R, Sokolovic A, Labruyère WT, Vermeulen JL, Ver Loren van Themaat E, Breit TM, Wittink FR, van Kampen AH, Verhoeven AJ, Lamers WH, Sokolovic M (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21393243" target="_blank" class="fwn" >2011</a>) Interorgan coordination of the murine adaptive response to fasting. J Biol Chem 286:16332-43
-<LI>
-Freeman NE, Templeton JP, Orr WE, Lu L, Williams RW, Geisert EE (2011) Genetic networks in the mouse retina: Growth Associated Protein 43 and Phosphate Tensin Homology network. Molecular Vision 17:1355-1372 <A HREF="http://www.molvis.org/molvis/v17/a153/" target="_blank" style="font-size: 14px;" ><I>Full Text HTML</I> </A> and <A HREF="http://www.molvis.org/molvis/v17/a153/mv-v17-a153-freeman.pdf" target="_blank" class="fwn" ><I>PDF </I> </A> versions
-<LI>
-Jablonski MM, Freeman NE, Orr WE, Templeton JP, Lu L, Williams RW, Geisert EE (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20882406" target="_blank" class="fwn">2011</a>) Genetic pathways regulating glutamate levels in retinal Müller cells. Neurochem Res 36:594-603
-<LI>
-Jackson KJ, Chen X, Miles MF, Harenza J, Damaj MI (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21796100" target="_blank" class="fwn">2011</a>) The neuropeptide galanin and variants in the <I>GalR1</I> gene are associated with nicotine dependence. Neuropsychopharmacology 36:2339-2348
-<LI>
-Jansen R, Timmerman J, Loos M, Spijker S, van Ooyen A, Brussaard AB, Mansvelder HD, The Neuro-Bsik Mouse Phenomics Consortium; Smit AB, de Gunst M, Linkenhaer-Hansen K (<a href="http://www.ncbi.nlm.nih.gov/pubmed/22066001" target="_blank" class="fwn">2011</a>) Novel candidate genes associated with hippocampal oscillations. PLoS One 6:e26586.
-<A HREF="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0026586" target="_blank" class="fwn"><I>HTML</I></A> and <A HREF="http://www.plosone.org/article/fetchObjectAttachment.action;jsessionid=A7B78346B150E8D613FCBE4DEFBD7155?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0026586&representation=PDF" target="_blank" class="fwn"><I>PDF</I></A> versions
-<LI>
-Jiao Y, Jiao F, Yan J, Xiong Q, Shriner D, Hasty K, Stuart J, Gu W (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21414240" target="_blank" class="fwn">2011</a>) Identifying a major locus that regulates spontaneous arthritis in IL-1ra-deficient mice and analysis of potential candidates. Genet Res (Camb) 18:1-9
-<LI>
-Krebs J, Römer D, Overall RW, Fabel K. Babu H, Brandt M, Williams RW, Jessberger S, Kempermann G (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21398278" target="_blank" class="fwn">2011</a>)) Adult hippocampal neurogenesis and plasticity in the infrapyramidal bundle of the mossy fiber projection: II. Genetic covariance and identification of Nos1 as a linking candidate gene. Frontiers in Neuroscience 5:106
-<A HREF="http://www.nature.com/tp/journal/v1/n7/pdf/tp201124a.pdf" target="_blank" class="fwn"><I>PDF</I> </A> version
-<A HREF="/images/upload/Jansen_2011_PLoSONE.pdf" target="_blank" class="fwn"><I>PDF</I></A>
-<LI>
-Krebs J, Römer B, Overall RW, Fabel K, Babu H, Brandt MD, Williams RW, Jessberger S, Kempermann G (<A HREF="https://ncbi.nlm.nih.gov/pubmed/21960957" target="_blank" class="fwn">2011</A>) Adult hippocampal neurogenesis and plasticity in the infrapyramidal bundle of the mossy fiber projection: II. Genetic covariation and identification of <I>Nos1</I> as linking candidate gene. Frontiers in Neuroscience 5:106
-<A HREF="http://www.frontiersin.org/Journal/DownloadFile.ashx?pdf=1&FileId=%202584&articleId=%2011569&Version=%201&ContentTypeId=21&FileName=%20fnins-05-00106.pdf" target="_blank" class="fwn"><I>PDF</I> </A> version
-<LI>
-Laughlin RE, Grant TL, Williams RW, Jentsch JD (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21392734" target="_blank" class="fwn">2011</a>) Genetic dissection of behavioral flexibility: reversal learning in mice. Biological Psychiatry 69:1109-1116
-<LI>
-Lu H, Wang X, Pullen M, Guan H, Chen H, Sahu S, Zhang B, Chen H, Williams RW, Geisert EE, Lu L, Jablonski MM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21398278" target="_blank" class="fwn">2011</a>) Genetic dissection of the Gpnmb network in the eye. Invest Ophthalmol Vis Sci. 52:4132-4142
-<LI>
-McLachlan SM, Aliesky HA, Chen CR, Williams RW, Rapoport B (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21738647" target="_blank" class="fwn">2011</a>) Exceptional Hyperthyroidism and a role for both major histocompatibility class I and class II genes in a murine model of Graves' disease. PLoS One 6:e21378
-<LI>
-McLachlan SM, Lu L, Aliesky HA, Williams RW, Rapoport B (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21209025" target="_blank" class="fwn">2011</a>) Distinct genetic signatures for variability in total and free serum thyroxine levels in four sets of recombinant inbred mice. Endocrinology 152:1172-9
-<LI>
-McCall RD (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21384758" target="_blank" class="fwn">2011</a>) HPNS seizure risk: a role for the Golgi-associated retrograde protein complex? Undersea Hyperb Med. 38:3-9
-<LI>
-Moscou MJ, Lauter N, Steffenson B, Wise RP (<A HREF="https://ncbi.nlm.nih.gov/pubmed/21829384" target="_blank" class="fwn">2011</A>) Quantitative and qualitative stem rust resistance factors in barley are associated with transcriptional suppression of defense regulons. PLoS Genet 7:e1002208
-<BR><A HREF="http://www.plosgenetics.org/article/info%3Adoi%2F10.1371%2Fjournal.pgen.1002208" target="_blank" class="fwn">PDF version</A>
-<LI>
-Mozhui K, Wang X, Chen J, Mulligan MK, Li Z, Ingles J, Chen X, Lu L and Williams RW (2011) Genetic regulation of Nrxn1 expression: an integrative cross-species analysis of schizophrenia candidate genes. Transl Psychiatry 1: e25; doi:10.1038/tp.2011.24.
-<A HREF="http://www.nature.com/tp/journal/v1/n7/pdf/tp201124a.pdf" target="_blank" class="fwn"><I>PDF</I> </A> version
-<LI>
-Porcu P, O'Buckley TK, Song SC, Harenza JL, Lu L, Wang X, Williams RW, Miles MF, Morrow AL (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21494628" class="fwn">2010</a>) Genetic analysis of the neurosteroid deoxycorticosterone and its relation to alcohol phenotypes: Identification of QTLs and downstream gene regulation. PLoS One 6:e18405 <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0018405" target="_blank" class="fwn" ><I>Full Text HTML</I> </A> and <A href="/images/upload/Porcu_Morrow_2011.pdf" target="_blank" class="fwn" ><I>PDF </I> </A> versions
-<LI>
-Sutcliffe JG, Hedlund PB, Thomas EA, Bloom FE, Hilbush BS (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21374699" target="_blank" class="fwn">2011</a>) Peripheral reduction of β-amyloid is sufficient to reduce brain β-amyloid: implications for Alzheimer's disease. J Neurosci Res. 2011 Jun;89(6):808-14. doi: 10.1002/jnr.22603
-<A HREF="http://onlinelibrary.wiley.com/store/10.1002/jnr.22603/asset/22603_ftp.pdf?v=1&t=h88szz5k&s=096cf28488dc3b3b5e62b2f74c2f9b67e8b02747" target="_blank" class="fwn"><I>PDF</I> </A> version
-
-<LI>
-Suwanwela J, Farber CR, Haung B, Song B, Pan C, Lyon KM, Lusis AJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20954177" target="_blank" class="fwn">2011</a>) Systems genetics analysis of mouse chondrocyte differentiation. Journal of Bone and Mineral Research 26:74-760
-<A HREF="/images/upload/Suwanwela_Lusis_2011.pdf" target="_blank" class="fwn"><I>PDF</I> </A> version
-<LI>Tan T (<A HREF="http://www.genengnews.com/best-of-the-web/genenetwork/2581/" target="_blank" class="fwn">2011</A>) GeneNetwork: Best of the Web. Genetics Engineering & Biotechnology News 31(3)
-<LI>
-Whitney IE, Raven MA, Lu L, Williams RW, Reese BE (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21330668" target="_blank" class="fwn" >2011</a>) A QTL on chromosome 10 modulates cone photoreceptor number in the mouse retina. Invest Ophthalmol Vis Sci. 52:3228-36
-<LI>
-Whitney IE, Raven MA, Ciobanu DC, Poché RA, Ding Q, Elshatory Y, Gan L, Williams RW, Reese BE (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21576457" target="_blank" class="fwn" >2011</a>) Genetic modulation of horizontal cell number in the mouse retina. Proc Natl Acad Sci USA 108:9697-702
-<LI>
-Yadav JS, Pradhan S, Kapoor R, Bangar H, Burzynski BB, Prows DR, Levin L (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21628518" target="_blank" class="fwn" >2011</a>) Multigenic control and sex-bias in host susceptibility to spore-induced pulmonary anthrax in mice. Infect Immun in press.
-<LI>
-Yamamoto H, Williams EG, Mouchiroud L, Cantó C, Fan W, Downes M, Héligon C, Barish GD, Desvergne B, Evans RM, Schoonjans K, Auwerx J (2011) NCoR1 is a conserved physiological modulator of muscle mass and oxidative function. Cell 147:827-39
-
-
-
-</OL>
-</Blockquote>
-
-
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2010" class="subtitle"">GeneNetwork (2010) </A>
-<BLOCKQUOTE>
-
-</Blockquote>
-<OL>
-
-<LI>
-Alberts R, Schughart K (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20950438" target="_blank" class="fwn" >2010</a>) QTLminer: identifying genes regulating quantitative traits. BMC Bioinformatics 11:516. <A href="http://www.biomedcentral.com/1471-2105/11/516" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A>
-<LI>
-Ciobanu DC, Lu L, Mozhui K, Wang X, Morris JA, Taylor WL, Dietz K, Simon P, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19884314" target="_blank" class="fwn">2010</a>) Detection, validation, and downstream analysis of allelic variation in gene expression. Genetics 184: 119-128 <A href="http://www.genetics.org/cgi/reprint/184/1/119" target="_blank" class="fwn"><I>Full Text PDF</I></A>
-<LI>
-Downing C, Marks MJ, Larson C, Johnson TE (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20657349" target="_blank" class="fwn">2010</a>) The metabotropic glutamate receptor subtype 5 mediates sensitivity to the sedative properties of ethanol. Pharmacogenet Genomics 20:553-64
-<LI>
-Gatti DM, Zhao N, Chesler EJ, Bradford BU, Shabalin AA, Yordanova R, Lu L, Rusyn I (2010) Sex-specific gene expression in the BXD mouse liver. Physiol Genomics 42:456-68
-<A href="/images/upload/Gatti_2010PhysiolGenomics.pdf" class="fwn" target="_blank"><I>Full Text PDF Version</I></A>
-<LI>
-Grisham W, Schottler NA, Valli-Marill J, Beck L, Beatty J (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20516355" target="_blank" class="fwn" >2010</a>) Teaching bioinformatics and neuroinformatics by using free web-based tools. CBE--Life Sciences Education 9: 98-107 <A href="/images/upload/Grisham_CBE_2010.pdf" target="_blank" class="fwn" ><I>Full Text PDF Version</I></A>
-<LI>
-Hoffman PL, Bennett B, Saba LM, Bhave SV, Carosone-Link PJ, Hornbaker CK, Kechris KJ, Williams RW, Tabakoff B <a href="http://www.ncbi.nlm.nih.gov/pubmed/21054686" target="_blank" class="fwn" >2010</a> Using the Phenogen website for 'in silico' analysis of morphine-induced analgesia: identifying candidate genes. Addiction Biology, doi: 10.1111/j.1369-1600.2010.00254.x
-<LI>
-Li D, Mulligan MK, Wang X, Miles MF, Lu L, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20808911" target="_blank" class="fwn">2010</a>) A transposon in <I>Comt</I> generates mRNA variants and causes widespread expression and behavioral differences among mice. PLoS One. 2010 Aug 17;5(8):e12181. <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0012181" target="_blank" class="fwn"><I>Full Text HTML and PDF Versions</I></A>
-<LI>
-Lionikas A, Carlborg O, Lu L; Peirce JL, Williams RW, Yu F, Vogler GP, McClearn GE, Blizard DA <a href="http://www.ncbi.nlm.nih.gov/pubmed/20233743" target="_blank" class="fwn" >2010</a> Genomic analysis of variation in hindlimb musculature of mice from the C57BL/6J and DBA/2J lineage. Journal of Heredity 2010; doi: 10.1093/jhered/esq023. <A href="http://http://jhered.oxfordjournals.org/cgi/reprint/esq023?ijkey=BbuUGMafKrjFO5f&keytype=ref" class="fwn" target="_blank"><I>Full Text PDF Version</I></A>
-<LI>
-Loguercio S, Overall RW, Michaelson JJ, Wiltshire T, Pletcher MT, Miller BH, Walker JR, Kempermann G, Su AI, Beyer A <a href="http://www.ncbi.nlm.nih.gov/pubmed/21085707" target="_blank" class="fwn" >2010</a> Integrative analysis of low- and high-resolution eQTL. PLoS One 5(11):e13920 <A href="http://www.plosone.org/article/fetchObjectAttachment.action;jsessionid=C93DEB44991B6401001E7585AC4C4393.ambra02?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0013920&representation=PDF" class="fwn" target="_blank"><I>Full Text PDF Version</I></A>
-<LI>
-Lynch RM, Naswa S, Rogers Jr GL, Kanla SA, Das S, Chesler EJ, Saxton AM, Langston MA, Voy, BH (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20179155" target="_blank" class="fwn" >2010</a>) Identifying genetic loci and spleen gene coexpression networks underlying immunophenotypes in the BXD recombinant inbred mice. Physiological Genomics 41:244-253 <A href="/images/upload/BXD_immunophenotypes_2010.pdf" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A>
-<LI>Lynch RM (<a href="http://trace.tennessee.edu/utk_graddiss/727" target="_blank" class="fwn" >2010</a>) A systems genetics approach to the characterization of differential low dose radiation responses in the BXD recombinant inbred mice. PhD diss., University of Tennessee <a href="http://trace.tennessee.edu/utk_graddiss/727" target="_blank" class="fwn" >http://trace.tennessee.edu/utk_graddiss/727</a>
-<LI>
-Malkki HA, Donga LA, de Groot SE, Battaglia FP; NeuroBSIK Mouse Phenomics Consortium, Pennartz CM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21119771" target="_blank" class="fwn" >2010</a>) Appetitive operant conditioning in mice: heritability and dissociability of training stages. Front Behav Neuroscience 4:171 <A href="/images/upload/BXD_immunophenotypes_2010.pdf" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A>
-<LI>
-Mulligan MK, Lu L, Overall RW, Kempermann G, Rogers GL, Langston MA, Williams RW (<a href="http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=5510847" target="_blank" class="fwn" >2010</a>) Genetic analysis of BDNF expression cliques and adult neurogenesis in the hippocampus. Biomedical Sciences and Engineering Conference (BSEC) DOI: 10.1109/BSEC.2010.5510848 <A href="/images/upload/BDNF_Clique_Apr13.pdf" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A>
-<LI>
-Peidis P, Giannakouros T, Burow ME, Williams RW, Scott RE (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20184719" target="_blank" class="fwn" >2010</a>) Systems genetics analyses predict a transcription role for P2P-R: molecular confirmation that P2P-R is a transcriptional co-repressor. BMC Systems Biology 4:14 <A href="http://www.biomedcentral.com/content/pdf/1752-0509-4-14.pdf" target="_blank" class="fwn" ><I>Full Text PDF version</I> and </A>
-<LI>
-Philip VM, Duvvuru S, Gomero B, Ansah TA, Blaha CD, Cook MN, Hamre KM, Laviviere WR, Matthews DB, Mittleman G, Goldowitz D, Chesler EJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19958391" target="_blank" class="fwn">2010</a>) High-throughput behavioral phenotyping in the expanded panel of BXD recombinant inbred strains. Genes, Brain and Behavior 8:129-159 <A href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2855868/" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Reinius B, Shi C, Hengshuo L, Sandhu KS, Radomska KJ, Rosen GD, Lu L, Kullander K, Williams RW, Jazin E. (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21047393" target="_blank" class="fwn">2010</a>) Female-biased expression of long non-coding RNAs in domains that escape X-inactivation in mouse. BMC Genomics. 2010 Nov 3;11:614 <A href="http://www.biomedcentral.com/1471-2164/11/614" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Rulten SL, Ripley TL, Hunt CL, Stephens DN, Mayne LV (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16594979" target="_blank" class="fwn">2010</a>) Sp1 and NFkappaB pathways are regulated in brain in response to acute and chronic ethanol. Genes, Brain and Behavior 5:257-73. <A href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2855868/" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Suwanwela J, Farber CR, Haung BL, Song B, Pan C, Lyons KM, Lusis AJ (<a href=""/images/upload/Suwanwela-1.JBMR.10.pdf" target="_blank" class="fwn" >2010</a>) Systems genetics analysis of mouse chondrocyte differentiation. JBMR, in press <A href="/images/upload/Suwanwela-1.JBMR.10.pdf" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A>
-<LI>
-Wang X, Chen Y, Wang X, Lu L. (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20054728" target="_blank" class="fwn" >2010</a>) Genetic regulatory network analysis for <I>App</I> based on genetical genomics approach. Exp Aging Res 36:79-93
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</OL>
-</Blockquote>
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2009" class="subtitle"">GeneNetwork (2009) </A>
-<BLOCKQUOTE>
-
-</Blockquote>
-<OL>
-
-<LI>
-Badea A, Johnson GA, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19349225" target="_blank" class="fwn">2009</a>) Genetic dissection of the mouse brain using high-field magnetic resonance microscopy. Neuroimaging 45:1067-79
-<LI>
-Boon AC, deBeauchamp J, Hollmann A, Luke J, Kotb M, Rowe S, Finkelstein D, Neale G, Lu L, Williams RW, Webby RJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19706712" target="_blank" class="fwn">2009</a>) Host genetic variation affects resistance to infection with a highly pathogenic H5N1 influenza A virus in mice. J Virol 83:10417-26 PMID: 19706712 <A HREF="http://www.genenetwork.org/images/upload/Boon_H5N1_2009.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Brigman JL, Mathur P, Lu L, Williams RW, Holmes A (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18830130" target="_blank" class="fwn">2009</a>) Genetic relationship between anxiety- and fear-related behaviors in BXD recombinant inbred mice. Behavioral Pharmacology 20:204-209
-<A href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=18830130" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>,
-<LI>
-Carneiro AM, Airey DC, Thompson B, Zhu CB, Lu L, Chesler EJ, Erikson KM, Blakely RD (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19179283" target="_blank" class="fwn">2009</a>) Functional coding variation in recombinant inbred mouse lines reveals multiple serotonin transporter-associated phenotypes. Proc Natl Acad Sci USA 106:2047-2052
-<A href="http://www.pnas.org/content/early/2009/01/28/0809449106" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>,
-<A href="http://www.pnas.org/content/early/2009/01/28/0809449106.full.pdf+html" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Cowley MJ, Cotsapas CJ, Williams RB, Chan EK, Pulvers JN, Liu MY, Luo OJ, Nott DJ, Little PF (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19424753" target="_blank" class="fwn">2009</a>) Intra- and inter-individual genetic differences in gene expression. Mamm Genome 20:281-295
-<A href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2690833/?tool=pubmed" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Davies MN, Lawn S, Whatley S, Fernandes C, Williams RW, Schalkwyk LC (<a href="http://frontiersin.org/neurogenomics/paper/10.3389/neuro.15/002.2009/" target="_blank" class="fwn">2009</a>) To what extent is blood a reasonable surrogate for brain gene expression studies: estimation from mouse hippocampus and spleen. Front. Neurogen. 1:2. doi:10.3389/neuro.15.002.2009
-<LI>
-Foreman JE, Lionikas A, Lang DH, Gyekis JP, Krishnan M, Sharkey NA, Gerhard GS, Grant MD, Vogler GP, Mack HA, Stout JT, Griffith JW, Lakoski JM, Hofer SM, McClearn GE, Vandenbergh DJ, Blizard DA (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19671078" target="_blank" class="fwn">2009</a>) Genetic architecture for hole-board behaviors across substantial time intervals in young, middle-aged and old mice. Genes Brain Behav 8:714-27
-<LI>
-Gaglani SM, Lu L, Williams RW, Rosen GD (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19426526" target="_blank" class="fwn">2009</a>) The genetic control of neocortex volume and covariation with patterns of gene expression in mice. BMC Neuroscience 10:44
-<A href="http://www.biomedcentral.com/1471-2202/10/44" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>,
-<A href="http://www.biomedcentral.com/content/pdf/1471-2202-10-44.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Gatti DM, Harrill AH, Wright FA, Threadgill DW, Rusyn I. (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19609828" target="_blank" class="fwn">2009</a>) Replication and narrowing of gene expression quantitative trait loci using inbred mice. Mamm Genome 20:437-46.
-<LI>
-Geisert EE, Lu L, Freeman-Anderson ME, Wang X, Gu W, Jiao Y, Williams RW (<A HREF="http://www.molvis.org/molvis/v15/a185" target="_blank" class="fwn">2009</A>) Gene expression landscape of the mammalian eye: A global survey and database of mRNAs of 103 strains of mice. <I>Molecular Vision</I> 15:1730-1763 PMID:19727342 <A href="http://www.molvis.org/molvis/v15/a185" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>,
-<A HREF="http://www.molvis.org/molvis/v15/a185/mv-v15-a185-geisert.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Grisham W (<a href="http://www.funjournal.org/downloads/200981/grisham81.pdf" target="_blank" class="fwn">2009</a>) Modular digitial course in undergraduate neuroscience education (MDCUNE): A website offering free digital tools for neuroscience educators. Journal of Undergraduate Neuroscience Education 8:A26-A31 <A href="http://www.funjournal.org/downloads/200981/grisham81.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<BR><SMALL>
-An excellent example of how resources such as GeneNetwork and the Mouse Brain Library can be used in class room labs.
-</SMALL>
-<LI>
-Jellen LC, Beard JL, Jones BC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19393285" target="_blank" class="fwn">2009</a>) Systems genetics analysis of iron regulation. Biochemie in press.
-19393285
-<LI>
-Koutnikova H, Markku L, Lu L, Combe R, Paananen J, Kuulasmaa T, Kuusisto J, Häring H, Hansen T, Pedersen,O, Smith U, Hanefel M, Williams RW, Auwerx J (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19662162" target="_blank" class="fwn">2009</a>) Identification of UBP1 as a critical blood pressure determinant. PLoS Genetics 5:e1000591
-<A href="http://www.plosgenetics.org/article/info%3Adoi%2F10.1371%2Fjournal.pgen.1000591" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>,
-<A HREF="http://www.plosgenetics.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.pgen.1000591&representation=PDF" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Michaelson JJ, Loguercio S, Beyer A (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19303049" target="_blank" class="fwn">2009</a>) Detection and interpretation of expression quantitative trait loci (eQTL). Methods 48:265-276
-<A href="http://www.sciencedirect.com/science?_ob=ArticleURL&_udi=B6WN5-4VVXSVN-2&_user=10&_rdoc=1&_fmt=&_orig=search&_sort=d&_docanchor=&view=c&_searchStrId=1065487428&_rerunOrigin=google&_acct=C000050221&_version=1&_urlVersion=0&_userid=10&md5=df0a2763fb94c714825793af492de045" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Overall RW, Kempermann G, Peirce J, Lu L, Goldowitz D, Gage FH, Goodwin S, Smit AB, Airey DC, Rosen GD, Schalkwyk LC, Sutter TR, Nowakowski RS, Whatley S, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20582282" target="_blank" class="fwn">2009</a>) Genetics of the hippocampal transcriptome in mice: a systematic survey and online neurogenomic resource. Frontiers in Neuroscience 3:55
-<A href="http://www.frontiersin.org/neurogenomics/10.3389/neuro.15.003.2009/full" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>,
-<A HREF="javascript:__doPostBack('ctl00$ContentAreaRightMenu$ArchiveRightMenu$lnkPDF','')" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Overton JD, Adams GS, McCall RD, Kinsey ST (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19100334" target="_blank" class="fwn">2009</a>)High energy phosphate concentrations and AMPK phosphorylation in skeletal muscle from mice with inherited differences in hypoxic exercise tolerance. Comp Biochem Physiol A Mol Integr Physiol 152:478-85
-<LI>
-Philip VM, Duvvuru S, Gomero B, Ansah TA, Blaha CD, Cook MN, Hamre KM, Laviviere WR, Matthews DB, Mittleman G, Goldowitz D, Chesler EJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19958391" target="_blank" class="fwn">2009</a>) High-throughput behavioral phenotyping in the expanded panel of BXD recombinant inbred strains. Genes, Brain and Behavior 8:in press PMID: 19958391 <A href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2855868/" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Ruden DM, Chen L, Possidente D, Possidente B, Rasouli P, Wang L, Lu X, Garfinkel MD, Hirsch HV, Page GP (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19737576" target="_blank" class="fwn">2009</a>) Genetical toxicogenomics in Drosophila identifies master-modulatory loci that are regulated by developmental exposure to lead. Neurotoxicology 30:898-914
-<LI>
-Rosen GL, Pung C, Owens C, Caplow J, Kim H, Lu L, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19191878" target="_blank" class="fwn">2009</a>) Genetic modulation of striatal volume in BXD recombinant inbred mice. Genes, Brain & Behavior 8:296-308
-<LI>
-Saccone SF, Bierut LJ, Chesler EJ, Kalivas PW, Lerman C, Saccone NL, Uhl GR, Li CY, Philip VM, Edenberg HJ, Sherry ST, Feolo M, Moyzis RK, Rutter JL (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19381300" target="_blank" class="fwn">2009</a>) Supplementing high-density SNP microarrays for additional coverage of disease-related genes: addiction as a paradigm. PLoS ONE 4:e5225. <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0005225" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>,
-<A HREF=http://www.plosone.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0005225&representation=PDF" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>. [Supplementary table 1 provides links to many transcripts and genes, some of which were mined from an analysis of GeneNetwork data sets.]
-<LI>
-Silva GL, Junta CM, Sakamoto-Hojo ET, Donadi EA, Louzada-Junior P, Passos GA (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19758195" target="_blank" class="fwn">2009</a>) Genetic susceptibility loci in rheumatoid arthritis establish transcriptional regulatory networks with other genes. Ann N Y Acad Sci 1173:521-37
-<LI>
-Tapocik JD, Letwin N, Mayo CL, Frank B, Luu T, Achinike O, House C, Williams R, Elmer GI, Lee NH (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19386926" target="_blank" class="fwn">2009</a>) Identification of candidate genes and gene networks specifically associated with analgesic tolerance to morphine. J Neurosci 2:5295-307 <A href="http://www.jneurosci.org/cgi/content/full/29/16/5295" target="_blank" class="fwn"><I>Full Text HTML</I></A>
-<LI>
-Thomas C, Gioiello A, Noriega L, Strehle A, Oury J, Rizzo G, Macchiarulo A, Yamamoto H, Mataki C, Pruzanski M, Pellicciari R, Auwerx J, Schoonjans K (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19723493" target="_blank" class="fwn">2009</a>) TGR5-mediated bile acid sensing controls glucose homeostasis. Cell Metab 10:167-77
-<A href="http://www.genenetwork.org/images/upload/Thomas_Auwerx_2009.pdf" target="_blank" class="fwn"><I>Full Text PDF</I></A>
-<LI>
-Webb BT, McClay JL, Vargas-Irwin C, York TP, van den Oord EJCG (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19723493" target="_blank" class="fwn">2009</a>) In silico whole genome association scan for murine prepulse inhibition. PLoS ONE 4: e5246. doi:10.1371/journal.pone.0005246
-<A href="http://www.plosone.org/article/info:doi%2F10.1371%2Fjournal.pone.0005246" target="_blank" class="fwn"><I>Full Text HTML</I></A>,
-<A href="http://www.plosone.org/article/fetchObjectAttachment.action;jsessionid=18CBF1DF825C97C45A98D0256635C650?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0005246&representation=PDF" target="_blank" class="fwn"><I>Full Text HTML</I></A>
-<LI>
-Weng J, Symons MN, Singh SM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19107586" target="_blank" class="fwn">2009</a>) Studies on syntaxin 12 and alcohol preference involving C57BL/6J and DBA/2J strains of mice. Behav Genet. 39:183-191
-<A href="http://www.iovs.org/cgi/content/abstract/50/5/1996" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Whitney IE, Raven MA, Ciobanu DC, Williams RW, Reese BE (<a href="http://www.iovs.org/cgi/content/abstract/50/5/1996" target="_blank" class="fwn">2009</a>) Multiple genes on chromosome 7 regulate dopaminergic amacrine cell number in the mouse. Investigative Ophthalmology & Visual Science 50:1996-2003.
-<A href="http://www.iovs.org/cgi/content/abstract/50/5/1996" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>.
-<LI>
-Wu S, Lusis AJ, Drake TA (<a href="http://www.jlr.org/cgi/reprint/R800067-JLR200v1.pdf" target="_blank" class="fwn">2009</a>) A systems-based framework for understanding complex metabolic and cardiovascular disorders. Journal of Lipid Research, in press <A href="http://www.jlr.org/cgi/reprint/R800067-JLR200v1.pdf" target="_blank" class="fwn"><I>Full Text PDF</I></A>
-<LI>
-Zheng QY, Ding D, Yu H, Salvi RJ, Johnson KR (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18280008" target="_blank" class="fwn">2009</a>) A locus on distal chromosome 10 (<I>ahl4</I>) affecting age-related hearing loss in A/J mice. Neurobiol Aging. 2009 Oct;30(10):1693-705.
-
-</OL>
-</Blockquote>
-
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2008" class="subtitle"">GeneNetwork (2008) </A>
-<BLOCKQUOTE>
-
-</Blockquote>
-<OL>
-<LI>
-Abdeltawab NF, Aziz RK, Kansal R, Rowe SL, Su Y, Gardner L, Brannen C, Nooh MM, Attia RR, Abdelsamed HA, Taylor WL, Williams RW, Kotb M (2008) An unbiased systems genetics approach to mapping genetic loci modulating susceptibility to severe streptococcal sepsis. PLoS Pathogens 4:e1000042
-<A href="http://www.plospathogens.org/article/info%3Adoi%2F10.1371%2Fjournal.ppat.1000042" target="_blank" class="fwn"><I>Full Text HTML Version</I>,
-<A href="http://www.plospathogens.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.ppat.1000042&representation=PDF" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-
-<LI>
-Bertrand L, Fan Y, Nissanov J, Rioux L (2008) Genetic regulation of the anatomy of the olfactory bulb. Society for Neuroscience <A HREF="http://www.sfn.org/skins/main/pdf/abstracts/am2008/poster_presentations/tuesday_pm.pdf" target="_blank" class="fwn">2008</A>
-
-<!--
-Abstract: Development of the nervous system results from an interaction between environmental and genetic factors. Neurodevelopmental diseases with a strong genetic etiology like schizophrenia and autism are associated with functional and structural abnormalities in various areas of the brain, including the olfactory system. Because these diseases are characterized by numerous subjective symptoms, research has begun to identify objectively measurable symptomatology; these quantitative traits are called endophenotypes. One such trait associated with schizophrenia is abnormality of the olfactory bulb (OB). We sought to model the structural aspect of OB abnormalities by examining strain variability of OB volumes in mice. Through the analysis of parental strains, C57BL/6J (B6) and DBA/2J (D2), as well as 35 BXD recombinant inbred strains, mapping of a quantitative trait locus (QTL) associated with OB variability could be the first step in the identification of potential genes correlated with this
-olfactory endophenotype. Our study was conducted entirely in silico through the use of the Mouse Brain Library (www.mbl.org), imaging analysis softwares (NIH Object Image, Skill Image and Matlab), and a web-based QTL analysis tool (www.webqtl.org). 4 um/pixel images of sectioned mouse brains (300 um apart) were downloaded from the MBL website. The sample included 11 B6, 8 D2, and 157 BXDs mice. The OB consists of concentric layers: olfactory nerve, glomerular, plexiform, mitral cell and granule cell layers. The main OB and its layers were delineated and their volume was estimated using Cavalieri formula. Results show that B6 main OB volume is larger than that of D2. While the olfactory neuron and glomerular layers are larger in B6, the external plexiform and granular layers are larger in D2. This suggests that the development of the various OB layers is modulated by different genes. Residual volumes were calculated by removal of variance attributed to age and sex. Using the web-based QTL analysis tool, main OB volume was mapped to a significant linkage peak on chromosome 16. This QTL contains genes controlling the development of the main OB and potential candidate genes for schizophrenia. Determination of QTLs for individual layers is in progress.
--->
-
-
-<LI>
-Bhoumik A, Singha N, O'Connell MJ, Ronai ZA (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18397884" target="_blank" class="fwn">2008</a>) Regulation of TIP60 by ATF2 modulates ATM activation. J Biol Chem 283:17605-14
-<A href="http://www.jbc.org/content/283/25/17605.long" target="_blank" class="fwn"><I>Full Text HTML Version</I>, <http://www.jbc.org/content/early/2008/04/08/jbc.M802030200.full.pdf
-" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-
-
-
-<LI>
-Bjork K, Rimondini R, Hansson AC, Terasmaa A, Hyytiä P, Heilig M, Sommer WH (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18367649" target="_blank" class="fwn">2008</a>) Modulation of voluntary ethanol consumption by beta-arrestin 2. FASEB J 22:2552-60
-<A href="http://www.fasebj.org/cgi/content/full/22/7/2552" target="_blank" class="fwn"><I>Full Text HTML Version</I>,
-<A href="http://www.fasebj.org/cgi/reprint/22/7/2552.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Boone EM, Hawks BW, Li W, Garlow SJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18199428" target="_blank" class="fwn">2008</a>) Genetic regulation of hypothalamic cocaine and amphetamine-regulated transcript (CART) in BxD inbred mice. Brain Res 1194:1-7
-<LI>
-Crawford NP, Alsarraj J, Lukes L, Walker RC, Officewala JS, Yang HH, Lee MP, Ozato K, Hunter KW (2008) Bromodomain 4 activation predicts breast cancer survival. Proc Natl Acad Sci USA 105:6380-6385
-<A href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=18427120" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Crawford NP, Walker RC, Lukes L, Officewala JS, Williams RW, Hunter KW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18301994
-" target="_blank" class="fwn">2008</a>) The Diasporin Pathway: a tumor progression-related transcriptional network that predicts breast cancer survival. Clin Exp Metastasis 25:357-69
-<A href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=18301994" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Danciger M, Ogando D, Yang H, Matthes MT, Yu N, Ahern K, Yasumura D, Williams RW, Lavail MM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18344445
-" target="_blank" class="fwn">2008</a>) Genetic modifiers of retinal degeneration in the <I>rd3</I> mouse. Invest Ophthalmol Vis Sci 49:2863-2869
-<A href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=18344445" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Druka A, Druka I, Centeno AG, Li H, Sun Z, Thomas WT, Bonar N, Steffenson BJ, Ullrich SE, Kleinhofs A, Wise RP, Close TJ, Potokina E, Luo Z, Wagner C, Schweizer GF, Marshall DF, Kearsey MJ, Williams RW, Waugh R (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19017390
-" target="_blank" class="fwn">2008</a>) Towards systems genetic analyses in barley: Integration of phenotypic, expression and genotype data into GeneNetwork. BMC Genet 9:73
-<A href="http://www.biomedcentral.com/1471-2156/9/73" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Dykstra B, de Haan G (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18008087
-" target="_blank" class="fwn">2008</a>) Hematopoietic stem cell aging and self-renewal. Cell Tissue Res 331:91-101
-<LI>
-Ferrara CT, Wang P, Neta EC, Stevenes RD, Bain JR, Wenner BR, Ilkayeva OR, Keller MP, Blasiole DA, Kendziorski C, Yandell BS, Newgard CB, Attie AD (2008) Genetic networks of liver metabolism revealed by integration of metabolic and transcriptional profiling. PLoS Genetics 4: e1000034. doi:10.1371/journal.pgen.1000034
-<A href="http://www.plosgenetics.org/article/info%3Adoi%2F10.1371%2Fjournal.pgen.1000034" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Gerrits A, Dykstra B, Otten M, Bystrykh L, de Haan G (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18560825
-" target="_blank" class="fwn">2008</a>) Combining transcriptional profiling and genetic linkage analysis to uncover gene networks operating in hematopoietic stem cells and their progeny. Immunogenetics. 60:411-22.
-<LI>
-Grieve IC, Dickens NJ, Pravenec M, Kren V, Hubner N, Cook SA, Aitman TJ, Petretto E, Mangion J (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19112506" target="_blank" class="fwn">2008</a>) Genome-wide co-expression analysis in multiple tissues. PLoS One. 3:e4033. PMID: 19706712 <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0004033" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>,
-<A HREF="http://www.plosone.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0004033&representation=PDF" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Hall R, Hillebrandt S, Hochrath K, Gruenhage F, Weber S, Schwartz S, Yildiz Y , Sauerbruch T, Lammert F (2008) BXD recombinant inbred mouse lines–a genetic reference population for dissection of the complex genetics of liver fibrosis. Zeitschrift fur Gastroenterologie 46:in press
-<A href="http://www.thieme-connect.com/ejournals/abstract/zfg/doi/10.1055/s-2008-1037508" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Han B, Altman NS, Mong JA, Klein LC, Pfaff DW, Vandenbergh DJ (2008) Comparing quantitative trait loci and gene expression data. Advances in Bioinformatics, doi:10.1155/2008/719818.
-<A href="http://hindawi.com/RecentlyAcceptedArticlePDF.aspx?journal=ABI&number=719818" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> and <A href="http://www.hindawi.com/journals/abi/2008/719818.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Hayat Y, Yang J, Xu HM, Zhu J (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19067460
-" target="_blank" class="fwn">2008</a>) Influence of outliers on QTL mapping for complex traits. J Zhejiang Univ Sci B. 9:931-7
-<LI>
-Heimel JA, Hermans JM, Sommeijer JP; Neuro-Bsik Mouse Phenomics consortium, Levelt CN (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18700840
-" target="_blank" class="fwn">2008</a>) Genetic control of experience-dependent plasticity in the visual cortex. Genes Brain Behav 7:915-23.
-<A href="http://www.genenetwork.org/images/upload/Heimel_2008_BXDVisualCortex.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Jan TA, Lu L, Li CX, Williams RW, Waters RS (<a href="http://www.biomedcentral.com/1471-2202/9/3" target="_blank" class="fwn">2008</a>) Genetic analysis of posterior medial barrel subfield (PMBSF) size in somatosensory cortex (SI) in recombinant inbred strains of mice. BMC Neuroscience 9:3
-<A href="http://www.biomedcentral.com/content/pdf/1471-2202-9-3.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Johnson KR, Longo-Guessa C, Gagnona LH, Yub H, Zhengb QY (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18662770" target="_blank" class="fwn">2008</a>) A locus on distal chromosome 11 (<I>ahl8</I>) and its interaction with <I>Cdh23 ahl</I> underlie the early onset, age-related hearing loss of DBA/2J mice. Genomics 92:219-225
-<LI>
-Jones LC, Beard JL, Jones BC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18189309
-" target="_blank" class="fwn">2008</a>) Genetic analysis reveals polygenic influences on iron, copper, and zinc in mouse hippocampus with neurobiological implications. Hippocampus 18:398-410
-<A href="images/upload/Jones_2008_Hippocampus.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Jones LC, Earley CJ, Allen RP, Jones BC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18189309
-" target="_blank" class="fwn">2008</a>) Of mice and men, periodic limb movements and iron: how the human genome informs the mouse genome. Genes, Brain and Behavior 7:513-514.
-<A href="/images/upload/Jones_OfMiceandMen.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Kang HM, Ye C, Eskin E (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18791227
-" target="_blank" class="fwn">2008</a>) Accurate discovery of expression quantitative trait loci under confounding from spurious and genuine regulatory hotspots. Genetics doi:10.1534/genetics.108.094201
-<A href="http://www.genetics.org/cgi/content/abstract/genetics.108.094201v1" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>. [An important method that can greatly improve the ability to resolve true genetic interactions in expression genetic studies.]
-<LI>
-Kadarmideen HN (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19045837
-" target="_blank" class="fwn">2008</a>) Genetical systems biology in livestock: Application to gonadotrophin releasing hormone and reproduction. IET Systems Biology 2:423-441
-<A href="/images/upload/Kadarmideen_2008.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Kerns RT, Miles MF (2008) Microarray analysis of ethanol-induced changes in gene expression. Alcohol: Methods and Protocols. In: Methods in Molecular Biology 447:395-410
-<A href="http://www.springerprotocols.com/Abstract/doi/10.1007/978-1-59745-242-7_26" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Kotb M, Fathey N, Aziz R, Rowe S, Williams RW, Lu L (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18972751" target="_blank" class="fwn">2008</a>) Unbiased forward genetics and systems biology approaches to understanding how gene-environment interactions work to predict susceptibility and outcomes of infections. Novartis Found Symp 293:156-165; discussion pp 165-167, 181-183
-<LI>
-Loos M (2008) The PhenoTyper automated home cage environment as a high throughput tool to detect behavioral abnormalities in mutant mice. Proceeding of Measuring Behavior (Maastricht, The Netherlands, Aug 26-29, 2008).
-<A href="http://www.neurobsik.nl/Loos_2008.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Loudet O, Michael TP, Burger BT, Le Metté C, Mockler TC, Weigel D, Chory J (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18971337
-" target="_blank" class="fwn">2008</a>) A zinc knuckle protein that negatively controls morning-specific growth in Arabidopsis thaliana. Proc Natl Acad Sci USA 105:17193-8
-<A href="http://www.pnas.org/content/105/44/17193.long" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>, and <A href="http://www.pnas.org/content/suppl/2008/10/29/0807264105.DCSupplemental/0807264105SI.pdf" target="_blank" class="fwn"><I>Full Text Supplement</I></A>
-<LI>
-Lu L, Wei L, Peirce JL, Wang X, Zhou J, Homayouni R, Williams RW, Airey DC (2008) Using gene expression databases for classical trait QTL candidate gene discovery in the BXD recombinant inbred genetic reference population: mouse forebrain weight. BMC Genomics 9:444
-<A href="http://www.biomedcentral.com/1471-2164/9/444" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>, and <A href="http://www.biomedcentral.com/content/pdf/1471-2164-9-444.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Macedo C, Magalhaes DA, Tonani M, Marques MC, Junta CM, Passos GA (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18597059" target="_blank" class="fwn">2008</a>) Genes that code for T cell signaling proteins establish transcriptional regulatory networks during thymus ontogeny.
-Mol Cell Biochem 318:63-71
-<LI>
-Morahan G, Peeva V, Munish M, Williams R (2008) Systems genetics can provide new insights in to immune regulation and autoimmunity. Journal of Autoimmunity 31:233-236.
-<A href="http://www.genenetwork.org/images/upload/Morahan_2008.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Mozhui RT, Ciobanu DC, Schikorski T, Wang XS, Lu L, Williams RW (2008) Dissection of a QTL hotspot on mouse distal chromosome 1 that modulates neurobehavioral phenotypes and gene expression. PLoS Genetics 4: e1000260. doi:10.1371/journal.pgen.1000260
-<A href="http://www.plosgenetics.org/article/info:doi%2F10.1371%2Fjournal.pgen.1000260" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-New J, Kendall W, Huang J, Chesler E (<a href="http://www.computer.org/portal/web/csdl/doi/10.1109/TVCG.2008.61" target="_blank" class="fwn">2008</a>) Dynamic visualization of coexpression in systems genetics data. IEEE Trans Visualization & Computer Graphics 14:1081-1095.
-<LI>
-Pravenec M, Petretto E (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18541997" target="_blank" class="fwn">2008</a>) Insight into the genetics of hypertension, a core component of the metabolic syndrome.
-Genes and cell metabolism. Curr Opin Clin Nutr Metab Care 11:393-397
-<A href="http://www.plosgenetics.org/article/info:doi%2F10.1371%2Fjournal.pgen.1000260" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Pritchard M, Reeves RH, Dierssen M, Patterson D, Gardiner KJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18544929" target="_blank" class="fwn">2008</a>) Down syndrome and the genes of human chromosome 21: current knowledge and future potentials. Cytogenetics and Genome Research 121:67-77
-<LI>
-Reiner DJ, Jan TA, Boughter JD Jr, Li CX, Lu L, Williams RW, Waters RS (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18653645" target="_blank" class="fwn">2008</a>) Genetic analysis of tongue size and taste papillae number and size in recombinant inbred strains of mice. Chemical Senses 33:693-707
-<LI>
-Swertz MA, Tesson BM, Scheltema RA, Vera G, Jansen RC (2008) MOLGENIS for genetical genomics. Chapter 5. MGG: a customizable software infrastructure for genetical genomics.
-<A href="http://dissertations.ub.rug.nl/FILES/faculties/science/2008/m.a.swertz/05_c5.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Williams RW, Lu L (<a href="http://pubs.niaaa.nih.gov/publications/arh313/275-277.pdf" target="_blank" class="fwn">2008</a>) Integrative genetic analysis of alcohol dependence using the GeneNetwork web resources. In Pathways to Alcohol Dependence: Alcohol Research & Health 31:275-277
-<A href="http://pubs.niaaa.nih.gov/publications/arh313/275-277.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Woo JH, Zheng T, Kim JH (<a href="http://inderscience.metapress.com/app/home/contribution.asp?referrer=parent&backto=issue,7,8;journal,3,6;linkingpublicationresults,1:121101,1" target="_blank" class="fwn">2008</a>) DACE: Differential Allelic Co-Expression test for estimating regulatory associations of SNP and biological pathway. International Journal of Functional Informatics and Personalised Medicine 1:407-418
-<LI>
-Yang RJ, Mozhui K, Karlsson RM, Cameron HA, Williams RW, Holmes A (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18185497" target="_blank" class="fwn">2008</a>) Variation in mouse basolateral amygdala volume is associated with differences in stress reactivity and fear learning. Neuropsychopharmacology. 33:2595-604
-<A href="http://www.nature.com/npp/journal/v33/n11/full/1301665a.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>,
-<A href="<A href="http://www.nature.com/npp/journal/v33/n11/pdf/1301665a.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Zhang Y, Maksakova IA, Gagnier L , van de Lagemaat LN, Mager DL (2008) Genome-wide assessments reveal extremely high levels of polymorphism of two active families of mouse endogenous retroviral elements. PLoS Genet 4(2): e1000007. doi:10.1371/journal.pgen.1000007
-<A href="http://www.plosgenetics.org/article/info%3Adoi%2F10.1371%2Fjournal.pgen.1000007" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-
-</OL>
-</Blockquote>
-
-
-
-
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2007" class="subtitle"">GeneNetwork (2007) </A>
-<BLOCKQUOTE>
-
-</Blockquote>
-
-<OL>
-<LI>
-Aziz RK, Kansal R, Abdeltawab NF, Rowe SL, Su Y, Carrigan D, Nooh MM, Attia RR, Brannen C, Gardner LA, Lu L, Williams RW, Kotb M (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17525705" target="_blank" class="fwn">2007</a>) Susceptibility to severe Streptococcal sepsis: use of a large set of isogenic mouse lines to study genetic and environmental factors. Genes and Immunity 8:404-415
-<LI>
-Bao L, Peirce JL, Zhou M, Li H, Goldowitz D, Williams RW, Lu L, Cui Y (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17428815" target="_blank" class="fwn">2007</a>) An integrative genomics strategy for systematic characterization of genetic loci modulating phenotypes. Hum Mol Genet 16:1381-1390
-<LI>
-Bao L, Zhou M, Wu L, Lu L, Goldowitz D, Williams RW, Cui Y (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17099235" target="_blank" class="fwn">2007</a>) PolymiRTS Database: linking polymorphisms in microRNA target sites with complex traits. Nucleic Acids Res. 35(Database issue):D51-54
-<A href="http://nar.oxfordjournals.org/cgi/reprint/35/suppl_1/D51" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>,
-<A href="http://nar.oxfordjournals.org/cgi/content/full/35/suppl_1/D51" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Benhamou JP, Rizzetto M, Reichen J, Rodés J (<a href="http://books.google.com/books?id=taE276KCyecC&dq=genenetwork+webqtl" target="_blank" class="fwn">2007</a>) Textbook of hepatology: from basic science to clinical practice. Blackwell Publishing, p. <a href="http://books.google.com/books?id=taE276KCyecC&pg=PA379&lpg=PA379&dq=genenetwork+webqtl&source=web&ots=2CjGbbDh3B&sig=tXdbQ7KAGOyxOee9TECF40GXyywl" target="_blank" class="fwn">379</a>), ISBN 1405127414
-<LI>
-Bennett B, Downing C, Carosone-Link P, Ponicsan H, Ruf C, Johnson TE (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17250610" target="_blank" class="fwn">2007</a>) Quantitative trait locus mapping for acute functional tolerance to ethanol in the L x S recombinant inbred panel. Alcohol Clin Exp Res. 31:200-208. [Phenotype data described in this paper are accessible in GeneNetwork in the LXS Phenotype database; ID numbers 10126, 10127, 10132, 10134, 10138, and 10139 (select Species=MOUSE, Group=LXS, Type=PHENOTYPES and search the ALL field with the term "functional" or just enter the ID numbers above.]
-<LI>
-Cervino ACL, Darvasi A, Fallah Mi, Mader CC, Tsinoremas NF (<a href="http://www.genetics.org/cgi/content/full/175/1/321" target="_blank" class="fwn">2007</a>) An integrated in silico gene mapping strategy in inbred mice. Genetics 175:321-333
-<A href="http://www.genetics.org/cgi/reprint/175/1/321" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Chesler EJ (<a href="http://www3.interscience.wiley.com/cgi-bin/summary/114171173/SUMMARY" target="_blank" class="fwn">2007</a>) Bioinformatics of behavior. In Neurobehavioral Genetics, ed Jones BC, Mormede P
-CRC Press ISBN 084931903X InterScience
-<a href="http://books.google.com/books?id=ZNYE-FcvYloC&pg=PA102&lpg=PA102&dq=genenetwork+webqtl&source=web&ots=q3RfjmnLjt&sig=sDjpfmvzdx2lKigtJKqbb-H8Di8&hl=en&sa=X&oi=book_result&resnum=3&ct=result#PPA95,M1" target="_blank" class="fwn">95-114</a>), ISBN 1405127414
-<LI>
-Chesler EJ (<a href="http://www3.interscience.wiley.com/cgi-bin/summary/114171173/SUMMARY" target="_blank" class="fwn">2007</a>) Combining quantitative trait and gene-expression data. In Bioinformatics of Geneticists, ed Barnes MR, Wiley InterScience
-<LI>
-Coppin H, Darnaud V, Kautz L, Meynard D, Aubry M, Mosser J, Martinez M, Roth MP (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17945001" target="_blank" class="fwn">2007</a>) Gene expression profiling of Hfe-/- liver and duodenum in mouse strains with differing susceptibilities to iron loading: identification of transcriptional regulatory targets of Hfe and potential hemochromatosis modifiers. Genome Biology 8:R221
-<A href="http://www.plosgenetics.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.pgen.0030214&representation=PDF" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>,
-<A href="http://genomebiology.com/2007/8/10/R221" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Crawford NP, Qian X, Ziogas A, Papageorge AG, Boersma BJ, Walker RC, Lukes L, Rowe WL, Zhang J, Ambs S, Lowy DR, Anton-Culver H, Hunter KW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18081427" target="_blank" class="fwn">2007</a>) Rrp1b, a new candidate susceptibility gene for breast cancer progression and metastasis. PLoS Genetics 3: e214
-<A href="http://www.plosgenetics.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.pgen.0030214&representation=PDF" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>,
-<A href="http://www.plosgenetics.org/article/info:doi/10.1371/journal.pgen.0030214" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Dong H, Martin MV, Colvin J, Ali Z, Wang L, Lu L, Williams RW, Rosen GD, Csernansky JG, Cheverud JM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17406662" target="_blank" class="fwn">2007</a>) Quantitative trait loci linked to thalamus and cortex gray matter volumes in BXD recombinant inbred mice. Heredity 99:62-69
-<LI>
-Fox JG, Barthold SW, Davisson MT, Newcomer CE (<a href="http://books.google.com/books?id=vnRpW-gI9JMC" target="_blank" class="fwn">2007</a>) The mouse in biomedical research. (2nd ed). Academic Press, p. 530.
-<LI>
-French L, Pavlidis P (<a href="http://bib.oxfordjournals.org/cgi/content/abstract/8/6/446" target="_blank" class="fwn">2007</a>) Informatics in neuroscience. Briefings in Bioinformatics 8:446-456
-<LI>
-Gatti D, Maki A, Chesler EJ, Kirova R, Kosyk O, Lu L, Manly KF, Williams RW, Perkins A, Langston MA, Threadgill DW, Rusyn I (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17542012" target="_blank" class="fwn">2007</a>) Genome-level analysis of genetic regulation of liver gene expression networks. Hepatology 46:548-557
- <A href="/images/upload/Gatti_Rusyn_2007.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Grice DE, Reenila I, Mannisto PT, Brooks Ai, Smith GG, Golden GT, Buxbaum JD, Berrettini WH (2007) Transcriptional profiling of C57 and DBA strains of mice in the absence and presence of morphine. BMC Genomics 8:76
-<A href="http://www.biomedcentral.com/content/pdf/1471-2164-8-76.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>,
-<A href="http://www.biomedcentral.com/1471-2164/8/76" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Hancock JM, Mallon AM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/18192320" target="_blank" class="fwn">2007</a>) Phenobabelomics--mouse phenotype data resources. Brief Funct Genomic Proteomic 6:292-301
-<LI>
-Hawes JJ, Tuskan RG, Reilly KM (<a href="http://www.ingentaconnect.com/content/klu/10048/2007/00000008/00000002/00000078;jsessionid=1m2u56h1a4lj2.alice" target="_blank" class="fwn">2007</a>) <I>Nf1</I> expression is dependent on strain background: implications for tumor suppressor haploinsufficiency studies. Neurogenetics 8: 121-130. [Nf1 expression in whole brain (INIA data set) and in striatum (Rosen data set) was used to catalyze a detailed study of the degree of NPcis (Nf1 + Trp53) haploinsufficiency. Email: kreilly@ncifcrf.gov]
-<LI>
-Hofstetter JR, Svihla-Jones DA, Mayeda AR (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17974007" target="_blank" class="fwn">2007</a>) A QTL on mouse chromosome 12 for the genetic variance in free-running circadian period between inbred strains of mice. J Circadian Rhythms 5:7
-<A href="http://www.jcircadianrhythms.com/content/pdf/1740-3391-5-7.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>,
-<A href="http://www.jcircadianrhythms.com/content/5/1/7" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Hsu HC, Lu L, Yi N, Van Zant G, Williams RW, Mountz JD (<a href="http://books.google.com/books?id=fbTsCdQv7cEC&dq=genenetwork+webqtl&source=gbs_summary_s&cad=0" target="_blank" class="fwn">2007</a>) Quantitative trait locus mapping in aging systems. In: Methods in Molecular Biology (Vol 371). Biological Aging: Methods and Protocols, ed Tollefsbol TO, Humana Press, Inc., Netlibrary, Springer
-<A href="http://books.google.com/books?id=fbTsCdQv7cEC&pg=RA4-PA332&lpg=RA4-PA332&dq=genenetwork+webqtl&source=web&ots=PawLDYAUam&sig=hOHsKDfumr3U-ZEUtT7Ag6gJAYg&hl=en&sa=X&oi=book_result&resnum=9&ct=result#PRA4-PA321,M1" target="_blank" class="fwn"><I>Google Book Search</I></A>
-<LI>
-Jawad M, Giotopoulos G, Fitch S, Cole C, Plumb M, Talbot CJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17185011" target="_blank" class="fwn">2007</a>) Mouse bone marrow and peripheral blood erythroid cell counts are regulated by different autosomal genetic loci. Blood Cells Mol Disease 38:69-77
-<LI>
-Jessberger S, Gage FH (<a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=1800354" target="_blank" class="fwn">2007</a>) ZOOMING IN: a new high-resolution gene expression atlas of the brain. Mol Syst Biol. 3:75
-<LI>
-Jones BC, Beard JL, Gibson JN, Unger EL, Allen RP, McCarthy KA, Earley CJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17475678" target="_blank" class="fwn">2007</a>) Systems genetic analysis of peripheral iron parameters in the mouse. American Journal of Physiology Regul Integr Comp Physiol 293: R116-124
-<A href="http://ajpregu.physiology.org/cgi/content/full/293/1/R116" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>, and see <A href="http://www.genenetwork.org/images/upload/Jones et al 1999 Pharmacogenetics3-0.pdf" target="_blank" class="fwn"><I>full text of Jones et al., 1999.</I></A>
-<LI>
-Jones BC and Mormede JP (2007) Neurobehavioral genetics: methods and applications. (<a href="http://books.google.com/books?id=P85FPhRKFVMC&pg=PA102&lpg=PA102&dq=genenetwork+webqtl&source=web&ots=-qg3S-C0xQ&sig=HoOCQpZrV3i45I0vPfDb3PfDMvY" target="_blank" class="fwn">2007</a>)" CRC Press, Taylor & Francis Group, Boca Raton, Florida, p. 102, ISBN 084931903X
-<LI>
-Kadarmideen HN, Reverter A (2007) Combined genetic, genomic and transcriptomic methods in the analysis of animal traits. CABI Review: Perspectives in Agriculture, Veterinary Science, Nutrition and Natural Resources 2: No. 042 (16 pp)
-<A href="/images/upload/Kadarmideen_Reverter_2007.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Korostynski M, Piechota M, Kaminska D, Solecki W. Przewlocki R (<a href="http://genomebiology.com/2007/8/6/R128" target="_blank" class="fwn">2007</a>) Morphine effects on striatal transcriptome in mice. Genome Biology 8:R128
-<LI>
-Lad HV, Liu L, Payá-Cano JL, Fernandes C, Schalkwyk LC (<a href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1998875/?tool=pubmed" target="_blank" class="fwn">2007</a>) Quantitative traits for the tail suspension test: automation, optimization, and BXD RI mapping. Mamm Genome. 2007 Jul;18(6-7):482-91
-<A href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1998875/?tool=pubmed" target="_blank" class="fwn"><I>Full Text PubMed Central version</I></A>
-<LI>
-Liang Y, Jansen M, Aronow B, Geiger H, Van Zant G (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17220891" target="_blank" class="fwn">2007</a>) The quantitative trait gene latexin influences the size of the hematopoietic stem cell population in mice. Nature Genetics 39:141-142 (doi: 10.1038/ng1938). [Using the BXD mouse strains, Liang, Van Zant and colleagues, demonstrate that sequence variants in <I>Lxn</I> modulate cell cycling kinetics of bone marrow stem cells. High expression of <I>Lxn</I> mRNA and protein is associated with the C57BL/6J allele and with lower proliferative activity. The authors made good use of the <A HREF="http://www.genenetwork.org/dbdoc/HC_U_0304_R.html" class="fwn" target="_blank" >BXD Hematopoietic Stem Cell</A> data set and <I>Lxn</I> Affymetrix probe set 96065_at. Figures 1 and 5 were generated using GeneNetwork.]
-<LI>
-Llamas B, Bélanger S, Picard S, Deschepper CF (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17566079" target="_blank" class="fwn">2007</a>) Cardiac mass and cardiomyocyte size are governed by different genetic loci on either autosomes or chromosome Y in recombinant inbred mice. Physiol Genomics 31:176-82
-<LI>
-Meng PH, Macquet A, Loudet O, Marion-Poll A, North HM (<a href="http://mplant.oxfordjournals.org/cgi/content/full/ssm014v1" target="_blank" class="fwn">2007</a>) Analysis of natural allelic variation controlling Arabidopsis thaliana seed germinability in response to cold and dark: identification of three major quantitative trait loci. Molecular Plant, doi:10.1093/mp/ssm014
-<LI>
-Mouse Phenotype Database Integration Consortium (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17436037" target="_blank" class="fwn">2007</a>) Integration of mouse phenome data resources. Mammalian Genome, 18:157-163.
-<A href="http://www.har.mrc.ac.uk/research/bioinformatics/publications/Preprint1.pdf" target="_blank" class="fwn"><I>PDF Preprint Version</I></A>
-<LI>
-Miyairi I, Tatireddigari VR, Mahdi OS, Rose LA, Belland RJ, Lu L, Williams RW, Byrne GI (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17641048" target="_blank" class="fwn">2007</a>) The p47 GTPases Iigp2 and Irgb10 regulate innate immunity and inflammation to murine Chlamydia psittaci. J Immunol 179:1814-1824
-<LI>
-Mozhui K, Hamre KM, Holmes A, Lu L, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17131200" target="_blank" class="fwn">2007</a>) Genetic and structural analysis of the basolateral amygdala complex in BXD recombinant inbred mice. Behav Genet. 37:223-243
-<A href="http://www.genenetwork.org/images/upload/Mozhui_et_al_2007.doc" target="_blank" class="fwn"><I>Full Text MS Word Version (authors' copy)</I></A>
-<LI>
-Peirce JL, Broman KW, Lu L, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17400728" target="_blank" class="fwn">2007</a>) A simple method for combining genetic mapping data from multiple crosses and experimental designs. PLoS ONE 2:e1036
-<A href="http://www.plosone.org/article/fetchObjectAttachment.action;jsessionid=009B2741B48AC1CB94E68107E714A1B0?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0001036&representation=PDF" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>,
-<A href="http://www.plosone.org/article/info:doi%2F10.1371%2Fjournal.pone.0001036" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Pérez-Enciso M, Quevedo JR, Bahamonde A (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17352813" target="_blank" class="fwn">2007</a>) Genetical genomics: use all data. BMC Genomics 8:69.
-<A href="http://www.biomedcentral.com/content/pdf/1471-2164-8-69.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>,
-<A href="http://www.biomedcentral.com/1471-2164/8/69" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Rosen GD, Bai J, Wang Y, Fiondella CG, Threlkeld SW, LoTurco JJ, Galaburda AM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17218481" target="_blank" class="fwn">2007</a>) Disruption of neuronal migration by RNAi of Dyx1c1 results in neocortical and hippocampal malformations. Cereb Cortex 17:2562-72.
-<A href="http://cercor.oxfordjournals.org/cgi/reprint/bhl162v1.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>,
-<LI>
-Rosen GD, Chesler EJ, Manly KF, Williams RW (2007) An informatics approach to systems neurogenetics. Methods Mol Biol 401:287-303
-<LI>
-Sunkin SM, Hohmann JG (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17911164" target="_blank" class="fwn">2007</a>) Insights from spatially mapped gene expression in the mouse brain. Human Molecular Genetics 16: R209-219
-<A href="http://hmg.oxfordjournals.org/cgi/reprint/16/R2/R209.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>,
-<A href="http://hmg.oxfordjournals.org/cgi/content/full/16/R2/R209" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Swertz MA, Jansen RC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17297480" target="_blank" class="fwn">2007</a>) Beyond standardization: dynamic software infrastructure for systems biology. Nature Reviews Genetics:235-243
-<LI>
-Taylor M, Valdar W, Kumar A, Flint J, Mott R (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17400728" target="_blank" class="fwn">2007</a>) Management, presentation and interpretation of genome scans using GSCANDB. Bioinformatics 23:1545-1549
-<A href="http://bioinformatics.oxfordjournals.org/cgi/reprint/23/12/1545" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>,
-<A href="http://bioinformatics.oxfordjournals.org/cgi/content/full/23/12/1545" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Vazquez-Chona F, Lu L, Williams RW, Geisert EE (2007) Genetic influences on retinal gene expression and wound healing. Gene Regulation and Systems Biology 1:327-348
-<A href="/images/upload/Vazquez2007.pdf" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-von Rohr P, Friberg M, Kadarmideen HN (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17688316" target="_blank" class="fwn">2007</a>) Prediction of transcription factor binding sites using results from genetical genomics investigations. Journal of Bioinformatics and Computational Biology 5:773-793
-<A href="/images/upload/vonRohr_etal_2007.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Wan X, Pavlidis P (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17917127" target="_blank" class="fwn">2007</a>) Sharing and reusing gene expression profiling data in neuroscience. Neuroinformatics 5:161-75.
-<A href="http://www.bioinformatics.ubc.ca/pavlidis/lab/reuse/walkthrough.pdf" target="_blank" class="fwn"><I>HTML example of using GEMMA and GeneNetwork</I></A>.
-<LI>
-Zou W, Aylor DL, Zeng ZB (<a href="http://www.biomedcentral.com/1471-2105/8/7" target="_blank" class="fwn">2007</a>) eQTL Viewer: visualizing how sequence variation affects genome-wide transcription. BMC Bioinformatics 8:7.
-<A href="http://www.biomedcentral.com/content/pdf/1471-2105-8-7.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>,
-<A href="http://www.biomedcentral.com/1471-2105/8/7" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>.
-</OL>
-
-</Blockquote>
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2006" class="subtitle"">GeneNetwork (2006) </A>
-<BLOCKQUOTE>
-
-</Blockquote>
-
-<OL>
-<LI>
-Aliesky HA, Pichurin PN, Chen CR, Williams RW, Rapoport B, McLachlan SM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16543368" class="fwn">2006</a>) Probing the genetic basis for thyrotropin receptor antibodies and hyperthyroidism in immunized CXB recombinant inbred mice. Endocrinology 147:2789-800.
-<A href="http://endo.endojournals.org/cgi/reprint/147/6/2789.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>,
-<A href="http://endo.endojournals.org/cgi/content/full/147/6/2789" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>.
-<LI>
-Bao L, Wei L, Peirce JL, Homayouni R, Li H, Zhou M, Chen H, Lu L, Williams RW, Pfeffer LM, Goldowitz D, Cui Y (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16783639" class="fwn">2006</a>) Combining gene expression QTL mapping and phenotypic spectrum analysis to uncover gene regulatory relationships. Mammalian Genome 17:575-583
-<A href="http://www.springerlink.com/content/v32720xj70343812/fulltext.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>,
-<A href="http://www.springerlink.com/content/v32720xj70343812/fulltext.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>.
-<LI>
-Beatty J, Laughlin RE (<a href="http://www.biomedcentral.com/1471-2202/7/16" class="fwn">2006</a>) Genomic regulation of natural variation in cortical and noncortical brain volume. BMC Neuroscience 7:16 [This mapping study made use of both the <A HREF="www.mbl.org" target="_blank" class="fwn">Mouse Brain Libray</A> online collection of sections of BXD brains and GeneNetwork/WebQTL.]
-<LI>
-Bennett B, Carosone-Link P, Zahniser NR, Johnson TE (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids=16803863&query_hl=2&itool=pubmed_docsum" target="_blank" class="fwn">2006</a>) Confirmation and fine mapping of ethanol sensitivity quantitative trait loci, and candidate gene testing in the LXS recombinant inbred mice. J Pharmacol Exp Ther 319:299-307 (doi: 10.1038/ng1938)
-<A href="http://jpet.aspetjournals.org/cgi/reprint/319/1/299.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Bennett B, Downing C, Parker C, Johnson TE (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16730093" target="_blank" class="fwn">2006</a>) Mouse genetic models in alcohol research. Trends Genet 22:367-74
-<LI>
-Cervino ACL, Darvasi A, Fallahi M, Mader CC, Tsinoremas NF (2006) An integrated in silico gene mapping strategy in inbred mice (<a href="http://www.genetics.org/cgi/content/full/175/1/321" target="_blank" class="fwn">2006</a>) Genetics 175:321-333
-<LI>
-Chesler EJ, Langston MA (<a href="http://www.springerlink.com/content/ut638ph1845x1768/" target="_blank" class="fwn">2006</a>) Combinatorial genetic regulatory network analysis tools for high throughput transcriptomic data. In: Lecture Notes in Computer Science. Springer, Heidelberg, Vol. 4023: 150-165.
-<LI>
-De Haro L, Panda S(<a href="http://www.ncbi.nlm.nih.gov/pubmed/17107940" target="_blank" class="fwn">2006</a>) Systems biology of circadian rhythms: an outlook. Journal of Biological Rhythms 21:507
-<A href="http://jbr.sagepub.com/cgi/reprint/21/6/507.pdf " target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Jones LC, McCarthy KA, Beard JL, Keen CL, Jones BC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16910173" target="_blank" class="fwn">2006</a>) Quantitative genetic analysis of brain copper and zinc in BXD recombinant inbred mice. Nutritional Neuroscience 9:81-92 [This paper includes a large data set consisting of 16 traits related to copper and zinc metabolism in the CNS that is part of the Mouse BXD Phenotype database in GeneNetwork. The entire data set can be found by entering the search term "Jones LC" in the ALL search field.]
-<LI>
-Kadarmideen HN, Janss LLG (<a href="http://www.ncbi.nlm.nih.gov//pubmed/17132818" class="fwn" target="_blank" >2006</a>) Population and systems genetics analyses of cortisol in pigs divergently selected for stress. Physiological Genomics 29:57-65 <A href="http://physiolgenomics.physiology.org/cgi/reprint/29/1/57?ck=nck" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, <A href="http://physiolgenomics.physiology.org/cgi/content/full/29/1/57?ck=nck" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>. [One of several great papers in a freely available (open) Special Issue of Mammalian Genome devoted to QTLs, Expression and Complex Trait Analysis. This study makes great use of the BXD INIA Brain mRNA M430 PDNN data set and GeneNetwork/WebQTL.]
-<LI>
-Kadarmideen HN, von Rohr, P, Janss LLG (<a href="http://www.ncbi.nlm.nih.gov//pubmed/16783637" class="fwn" target="_blank" >2006</a>) From genetical genomics to systems genetics: potential applications in quantitative genomics and animal breeding. Mammalian Genome 17:548-564 <A href="http://www.springerlink.com/media/788y661n1l5tvhac6eet/contributions/4/4/2/5/4425640024004428.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, <A href="http://www.springerlink.com/media/12d237nvvh7krwan8q9x/contributions/4/4/2/5/4425640024004428_html/fulltext.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>. [One of several great papers in a freely available (open) Special Issue of Mammalian Genome devoted to QTLs, Expression and Complex Trait Analysis. This study makes great use of the BXD INIA Brain mRNA M430 PDNN data set and GeneNetwork/WebQTL.]
-<LI>
-Kamminga LM, Bystrykh LV, de Boer A, Houwer S, Douma J, Weersing E, Dontje B, de Haan G (<A HREF="http://www.ncbi.nlm.nih.gov//pubmed/16293602" target="_blank" class="fwn">2006</A>) The Polycomb group gene Ezh2 prevents hematopoietic stem cell exhaustion. Blood 107:2170-2179
-<A href="http://bloodjournal.hematologylibrary.org/cgi/reprint/2005-09-3585v1.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Keeley MB, Wood MA, Isiegas C, Stein J, Hellman K, Hannenhalli S, Abel T (<a href="http://www.learnmem.org/cgi/reprint/13/2/135.pdf?ck=nck" class="fwn" target="_blank>2006</A>) Differential transcriptional response to nonassociative and associative components of classical fear conditioning in the amygdala and hippocampus. Learning and Memory 13:135-142103:780-785.
-<LI>
-Kempermann G, Chesler EJ, Lu L, Williams RW, Gage FH (<a href="http://www.pnas.org/cgi/content/full/103/3/780" class="fwn" target="_blank>2006</A>) Natural variation and genetic covariance in adult hippocampal neurogenesis. Proceedings of the National Academy of Science 103:780-785.
-<LI>
-Korostynski M, Kaminska-Chowaniec D, Piechota M, Przewlocki R (<a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=1553451" target="_blank" class="fwn">2006</a>) Gene expression profiling in the striatum of inbred mouse strains with distinct opioid-related phenotypes. BMC Genomics 7: 146 (doi: 10.1186/1471-2164-7-146). <A href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=1553451" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>. [A combination of data sources including the Rosen HBP Striatum data set used to study opioid-related traits. Their <a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=1553451&rendertype=figure&id=F3" target="_blank" class="fwn">Fig 3C</a> and <a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=1553451&rendertype=figure&id=F5" target="_blank" class="fwn">Fig 5</a> take good advantage of GeneNetwork and WebQTL output graphs.]
-<LI>
-Lan H, Chen M, Flowers JB, Yandell BS, Stapleton DS, Mata CM, Mui ET, Flowers MT, Schueler KL, Manly KF, Williams RW, Kendziorski C, Attie A (<a href="http://genetics.plosjournals.org/perlserv/?request=get-document&doi=10.1371/journal.pgen.0020006" target="_blank" class="fwn">2006</a>) Combined expression trait correlations and expression quantitative trait locus mapping. PLoS Genetics 2:e6 [Please cite this work if you make use of the B6BTBRF2 liver transcriptome data.]
-<LI>
-Liu Y, Li J, Sam L, Goh CS, Gerstein M, Lussier YA (<a href="http://compbiol.plosjournals.org/perlserv/?request=get-document&doi=10.1371/journal.pcbi.0020159" target="_blank" class="fwn">2006</a>) An integrative genomic approach to uncover molecular mechanisms of prokaryotic traits. PLoS Computional Biology 2:e159
-<LI>
-Loney KD, Uddin RK, Singh SM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16433728" target="_blank" class="fwn">2006</a>) Analysis of metallothionein brain gene expression in relation to ethanol preference in mice using cosegregation and gene knockouts. Alcohol Clin Exp Res 30:15-25
-<LI>
-Martin MV, Dong H, Vallera D, Lee D, Lu L, Williams RW, Rosen GD, Cheverud JM, Csernansky JG (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids=17081266&query_hl=1&itool=pubmed_docsum" target="_blank" class="fwn">2006</a>) Independent quantitative trait loci influence ventral and dorsal hippocampal volume in recombinant inbred strains of mice. Gene, Brain and Behavior 5:614-623.
-<LI>
-van Os R, Ausema A, Noach EJ, van Pelt K, Dontje BJ, Vellenga E, de Haan G (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16371023" target="_blank" class="fwn">2006</a>) Identification of quantitative trait loci regulating haematopoietic parameters in B6AKRF2 mice. British Journal of Haematolology 132:80-90.
-<LI>
-Peirce JL, Li H, Wang J, Manly KF, Hitzemann RJ, Belknap JK, Rosen GD, Goodwin S, Sutter TR, Williams RW, Lu L (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=Abstract&list_uids=16783644&query_hl=1&itool=pubmed_docsum" class="fwn">2006</a>) How replicable are mRNA expression QTL? Mammalian Genome 17:643-656. <A href="http://www.springerlink.com/content/a23g75163p624324/fulltext.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, <A href="http://www.springerlink.com/content/a23g75163p624324/fulltext.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>. [An important paper in which four matched expression data sets (whole brain and striatum) generated using both recombinant inbred and F2 intercrosses were directly compared.]
-<LI>
-Ponomarev I, Maiya R, Harnett MT, Schafer GL, Ryabinin AE, Blednov YA, Morikawa H, Boehm SL 2nd, Homanics GE, Berman AE, Lodowski KH, Bergeson SE, Harris RA (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16783644" class="fwn">2006</a>) Transcriptional signatures of cellular plasticity in mice lacking the alpha1 subunit of GABAA receptors. J Neurosci 26:5673-83
-<A href="http://www.jneurosci.org/cgi/reprint/26/21/5673.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>,
-<A href="http://www.jneurosci.org/cgi/content/full/26/21/5673" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Radcliffe RA, Lee MJ, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=Abstract&list_uids=16783639&query_hl=1&itool=pubmed_docsum" class="fwn">2006</a>) Prediction of cis-QTLs in a pair of inbred mouse strains with the use of expression and haplotype data from public databases. Mammalian Genome 17:629-642 <A href="http://www.springerlink.com/content/3u641hgk642221r6/fulltext.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, <A href="http://www.springerlink.com/content/3u641hgk642221r6/fulltext.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Rulten SL, Ripley TL, Hunt CL, Stephens DN, Mayne LV (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids=16594979&query_hl=2&itool=pubmed_docsum" target="_blank" class="fwn">2006</a>) Sp1 and NFkappaB pathways are regulated in brain in response to acute and chronic ethanol. Genes Brain Behav 5:257-273 [This study exploited the original GeneNetwork Affymetrix U74Av2 brain data set to validate a set of transcripts modulated by ethanol treatment.]
-<LI>
-Saba L, Bhave SV, Grahame N, Bice P, Lapadat R, Belknap J, Hoffman PL, Tabakoff B (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids=16783646&query_hl=8&itool=pubmed_docsum" class="fwn">2006</a>) Candidate genes and their regulatory elements: alcohol preference and tolerance. Mammalian Genome 17:669-688 <A href="http://www.springerlink.com/content/224237686jx80v61/fulltext.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, <A href="http://www.springerlink.com/content/224237686jx80v61/fulltext.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> [A lovely paper describing results of a whole brain BXD study involving males from 30 strains (four individual arrays (not pooled) per strain). The data described in this study have been made accessible from GeneNetwork.]
-<LI>
-Shifman S, Bell JT, Copley BR, Taylor M, Williams RW, Mott R, Flint J (<A HREF="http://biology.plosjournals.org/perlserv/?request=get-document&doi=10.1371/journal.pbio.0040395" target="_blank" class="fwn">2006</A>) A high resolution single nucleotide polymorphism genetic map of the mouse genome. PLoS Biology 4:2227-2237 <A HREF="http://biology.plosjournals.org/archive/1545-7885/4/12/pdf/10.1371_journal.pbio.0040395-L.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> [A comprehensive analysis of recombination rates using several populations of mice, including most major genetic reference populations.]
-<LI>
-van Os R, Ausema A, Noach EJ, van Pelt K, Dontje BJ, Vellenga E, de Haan G (<a href="http://www.blackwell-synergy.com/doi/abs/10.1111/j.1365-2141.2005.05835.x" class="fwn">2006</a>) Identification of quantitative trait loci regulating haematopoietic parameters in B6AKRF2 mice. British Journal of Haematology 132:80-90
-<LI>
-Veenstra-VanderWeele J, Qaadir A, Palmer AA, Cook EH Jr, de Wit H. (<a href="http://www.ncbi.nlm.nih.gov/pubmed/16237383" class="fwn">2006</a>) Association between the casein kinase 1 epsilon gene region and subjective response to D-amphetamine. Neuropsychopharmacology 31:1056-1063 <A href="http://www.nature.com/npp/journal/v31/n5/full/1300936a.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A> [This mapping study made use of GeneNetwork/WebQTL to show that "the region that contains Csnk1e was also found to contain a QTL for MA sensitivity, and complementary data from WebQTL (Chesler et al, 2005) showed that this same region of mouse chromosome 15 influenced Csnk1e transcript abundance, indicating the presence of a cis-acting eQTL."]
-<LI>
-Voy BH, Scharff JA, Perkins AD, Saxton AM, Borate B, Chesler EJ, Branstetter LK, Langston MA (<a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=16854212" target="_blank" class="fwn">2006</a>) Extracting gene networks for low-dose radiation using graph theoretical algorithms. PLoS Computational Biology 2:e89. [A paper that introduces the use of cliques in analyzing microarray data sets. One of the GeneNetwork databases (BXD Hematopoietic Stem Cells) was used to follow up on a strong candidate gene, Tubby-like protein 4 <I>Tulp4</I>) that may have a role in immune function.
-<LI>
-Williams RH, Cotsapas CJ, Cowley MJ, Chan E, Nott DJ, Little PF (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=Abstract&list_uids=16874319&query_hl=3&itool=pubmed_docsum" target="_blank" class="fwn">2006</a>) Normalization procedures and detection of linkage signal in genetical-genomics experiments. Nature Genetics 38:855-856. [A set of letters to the editor by Rohan Williams and colleagues, Chesler and colleagues, and Petretto and colleagues. All three letters highlight some of the technical challenges of analyzing expression data in a genetic context and point to the need for great care and attention to normalization methods. Well worth reviewing. Normalization is still very much an art, and it is quite likely that no one normalization procedure will be optimal for all different research questions. The old adage: "different horses for different courses" is likley to apply.]
-<LI>
-Williams RW (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=Abstract&list_uids=16783631&query_hl=1&itool=pubmed_docsum" class="fwn">2006</a>) Expression genetics and the phenotype revolution. Mammalian Genome 17:496-502 <A href="http://www.springerlink.com/content/921734n56j08400n/fulltext.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>, <A href="http://www.springerlink.com/content/921734n56j08400n/fulltext.html" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>. [My take on where systems genetics may take us in the next few years.]
-
-</OL>
-
-
-
-
-
-
-
-
-
-
-</Blockquote>
-
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2005" class="subtitle"">GeneNetwork (2005) </A>
-<BLOCKQUOTE>
-
-</Blockquote>
-<OL>
-<LI>Alberts R, Terpstra P, Bystrykh LV, de Haan G, Jansen RC (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed&dopt=Abstract&list_uids=15711547&query_hl=10" target="_blank" class="fwn">2005</A>) A statistical multiprobe model for analyzing cis and trans genes in genetical genomics experiments with short-oligonucleotide arrays Genetics 171:1437-1439
-<LI>Alberts R, Fu J, Swertz MA, Lubbers LA, Albers CJ, Jansen RC (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed/15975223" target="_blank" class="fwn">2005</A>) Combining microarrays and genetic analysis. Brief Bioinform. 6:135-145
-<A href="http://bib.oxfordjournals.org/cgi/reprint/6/2/135.pdf" target="_blank" class="fwn"><I> Full text PDF version</I></A>
-<LI>
-Bystrykh L, Weersing E, Dontje B, Sutton S, Pletcher MT, Wiltshire T, Su AI, Vellenga E, Wang J, Manly KF, Lu L, Chesler EJ, Alberts R, Jansen RC, Williams RW, Cooke M, de Haan G (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed/15711547" target="_blank" class="fwn">2005</A>) Uncovering regulatory pathways affecting hematopoietic stem cell function using “genetical genomics." Nature Genetics, 37:225-232
-<LI>
-Chesler EJ, Lu L, Shou S, Qu Y, Gu J, Wang J, Hsu HC, Mountz JD, Baldwin N, Langston MA, Threadgill DW, Manly KF, Williams RW (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15711545&query_hl=10" target="_blank" class="fwn">2005</A>) Genetic dissection of gene expression reveals polygenic and pleiotropic networks modulating brain structure and function. Nature Genetics 37: 233-242
-<LI>
-Flaherty L, Herron B, Symula D (<A HREF="http://www.genome.org/cgi/content/abstract/15/12/1741" target="_blank" class="fwn">2005</A>) Genome Research 15:1741-1745 <A href="http://www.genome.org/cgi/reprint/15/12/1741.pdf" target="_blank" class="fwn"><I> Full text PDF version</I></A>
-<LI>
-Garlow SJ, Boone E, Li W, Owens MJ, Nemeroff CB (<A HREF="http://endo.endojournals.org/cgi/content/abstract/146/5/2362" target="_blank" class="fwn">2005</A>) Genetic analysis of hypothalamic corticotropin-releasing factor system. Endocrinology 146: 2362-2368
-<LI>
-Gammie SC, Hasen NS, Awad TA, Auger AP, Jessen HM, Panksepp JB, Bronikowski AM (<A HREF="http://www.eeob.iastate.edu/faculty/BronikoA/annespdfs/MBres.pdf" target="_blank" class="fwn">2005</A>) Gene array profiling of large hypothalamic CNS regions in lactating and randomly cycling virgin mice. Molecular Brain Research 139: 201-211
-<LI>
-Kerns RT, Ravindranathan A, Hassan S, Cage MP, York T, Williams RW, Miles MF (<A HREF="http://www.jneurosci.org/cgi/content/full/25/9/2255" target="_blank" class="fwn">2005</A>) Ethanol-responsive brain region expression networks: implications for behavioral responses to acute ethanol in DBA/2J versus C57BL/6J mice. Journal of Neuroscience 25: 2255-2266 [<A HREF="http://www.brainchip.vcu.edu/kerns_apptable1.pdf" target="_blank" class="fwn">www.brainchip.vcu.edu/kerns_apptable1.pdf</A> for a complete table of modulated transcripts.]
-<LI>
-Li HQ, Lu L, Manly KF, Wang J, Zhou M, Williams RW, Cui Y (<A HREF="http://hmg.oupjournals.org/cgi/content/abstract/ddi124v1" target="_blank" class="fwn">2005</A>) Inferring gene transcriptional modulatory relations: a genetical genomics approach. Human Molecular Genetics 14: 1119-1125
-<LI>
-Li J, Burmeister M (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids=16244315&query_hl=5&itool=pubmed_docsum" target="_blank" class="fwn">2005</A>) Genetical genomics: combining genetics with gene expression analysis. Human Molecular Genetics 14:163-169.
- [<A href="/images/upload/Li_Burmeister_2005.pdf" target="_blank" class="fwn"><I> Full text PDF version</I></A>]
-
-<LI>
-Lozier JN, Tayebi N, Zhang P (<A HREF="http://www.bloodjournal.org/cgi/content/abstract/" target="_blank" class="fwn">2005</A>) Mapping of genes that control the antibody response to human factor IX in mice. Blood 105: 1029-1035
-<LI>
-MacLaren EJ, Sikela JM (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids=16205357&query_hl=3&itool=pubmed_docsum" target="_blank" class="fwn">2005</A>) Cerebellar gene expression profiling and eQTL analysis in inbred mouse strains selected for ethanol sensitivity. Alcoholism: Clinical and Experimental Research 29: 1568-1579.
-<A HREF="http://www.alcoholism-cer.com/pt/re/alcoholism/abstract.00000374-200509000-00002.htm;jsessionid=HBGNJpQldfCKvpYr6XLCzW3fF4YT1mzCVTXGcCMNYCL6N4WlDLlK!901085598!181195628!8091!-1" target="_blank" class="fwn"><I>HTML</I></A> and
-<A HREF="http://www.alcoholism-cer.com/pt/re/alcoholism/pdfhandler.00000374-200509000-00002.pdf;jsessionid=HBGNJpQldfCKvpYr6XLCzW3fF4YT1mzCVTXGcCMNYCL6N4WlDLlK!901085598!181195628!8091!-1" target="_blank" class="fwn"><I>PDF</I> reprints.</A>
-<LI>
-Matthews B, Bhave SV, Belknap JK, Brittingham C, Chesler EJ, Hitzemann RJ, Hoffman PL, Lu L, McWeeney S, Miles MR, Tabakoff B, Williams RW (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids=16205371&query_hl=1&itool=pubmed_docsum" target="_blank" class="fwn">2005</A>) Complex genetics of interactions of alcohol and CNS function and behavior. Alcoholism: Clinical and Experimental Research 29:1706-1719
-<LI>
-Mountz JD, Yang P, Wu Q, Zhou J, Tousson A, Fitzgerald A, Allen J, Wang X, Cartner S, Grizzle WE, Yi N, Lu L, Williams RW, Hsu HC (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15683449&query_hl=4" target="_blank" class="fwn">2005</A>) Genetic segregation of spontaneous erosive arthritis and generalized autoimmune disease in BXD2 recombinant inbred strain of mice. Scadinavian Journal of Immunology 61:1-11
-<A href="/images/upload/Mountz2005.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<LI>
-Li CX, Wei X, Lu L, Peirce JL, Wiliams RW, Waters RS (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=16338823&query_hl=12&itool=pubmed_docsum" target="_blank" class="fwn">2005</A>) Genetic analysis of barrel field size in the first somatosensory area (S1) in inbred and recombinant inbred strains of mice. Somatosensory and Motor Research 22:141-150
-<LI>
-Palmer AA, Verbitsky M, Suresh R, Kamen HM, Reed CI, Li N, Burkhart-Kasch S, McKinnon CS, Belknap JK, Gilliam TC, Phillips TJ (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed/16104378" target="_blank" class="fwn">2005</A>) Gene expression differences in mice divergently selected for methamphetamine sensitivity. Mammalian Genome 16:291-305
-<LI>
-Pravenec M, Kren V (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed/15728137" target="_blank" class="fwn">2005</A>) Genetic analysis of complex cardiovascular traits in the spontaneously hypertensive rat. Exp Physiol 90:273-276
-<A href="http://ep.physoc.org/cgi/reprint/90/3/273.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>,
-<A href="http://ep.physoc.org/cgi/content/full/90/3/273" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Scott RE, White-Grindley E, Ruley HE, Chesler EJ, Williams RW (<A HREF="http://www3.interscience.wiley.com/cgi-bin/fulltext/109860478/HTMLSTART" target="_blank" class="fwn">2005</A>) P2P-R expression is genetically coregulated with components of the translation machinery and with PUM2, a translational repressor that associates with the P2P-R mRNA. Journal of Cellular Physiology 204:99-105 <A href="http://www3.interscience.wiley.com/cgi-bin/fulltext/109860478/HTMLSTART" target="_blank" class="fwn"><I> Full text HTML version</I></A>
-<LI>
-Vazquez-Chona FR, Khan AN, Chan CK, Moore AN, Dash PK, Rosario Hernandez R, Lu L, Chesler EJ, Manly KF, Williams RW, Geisert Jr EE (<A HREF="http://www.molvis.org/molvis/v11/a115/" target="_blank" class="fwn">2005</A>) Genetic networks controlling retinal injury. Molecular Vision 11:958-970
-<LI>
-Yang H, Crawford N, Lukes L, Finney R, Lancaster M, Hunter KW (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed/15728137" target="_blank" class="fwn">2005</A>) Metastasis predictive signature profiles pre-exist in normal tissues. Clin Exp Metastasis 22:593-603
-<A href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=16475030" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-
-
-
-</OL>
-</Blockquote>
-
-
-
-
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2004" class="subtitle"">GeneNetwork (2004) </A>
-<BLOCKQUOTE>
-
-</Blockquote>
-<OL>
-<LI>Baldwin NE, Chesler EJ, Kirov S, Langston MA, Snoddy JR, Williams RW, Zhang B (2004) Computational, integrative and comparative methods for the elucidation of genetic co-expression networks. Journal of Biomedicine and Biotechnology 2:172-180
-<A HREF="http://www.pubmedcentral.gov/articlerender.fcgi?tool=pubmed&pubmedid=16046823" target="_blank" class="fwn"><I>HTML</I></A> and
-<A HREF="http://www.pubmedcentral.nih.gov/picrender.fcgi?artid=1184052&blobtype=pdf" target="_blank" class="fwn"><I>PDF</I> reprints.</A>
-<LI>
-Carlborg O, De Koning DJ, Chesler EJ, Manly KM, Williams RW, Haley CS (<A HREF="http://bioinformatics.oupjournals.org/cgi/content/abstract/bti241v1" target="_blank" class="fwn">2004</A>) Methological aspects of the genetic dissection of gene expression. Bioinformatics 10:1093
-<LI>
-Chesler EJ, Williams RW (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15474587&query_hl=10" target="_blank" class="fwn">2004</A>) Brain gene expression: genomics and genetics. International Review of Neurobiology 60:59-95
-<LI>
-Fernandes K, Paya-Cano JL, Sluyter F, D'Souza U, Plomin R, Schalkwyk LC (<A HREF="http://www.blackwell-synergy.com/links/doi" target="_blank" class="fwn">2004</A>) Hippocampal gene expression profiling across eight mouse inbred strains: towards understanding the molecular basis for behaviour. European Journal of Neuroscience 19:2576-2582
-<A href="http://www.bloodjournal.org/cgi/content/full/104/2/374" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Henckaerts E, Langer JC, Hans-Willem Snoeck HW (2004) Quantitative genetic variation in the hematopoietic stem cell and progenitor cell compartment and in lifespan are closely linked at multiple loci in BXD recombinant inbred mice. Blood 104:374-379 <A href="http://www.bloodjournal.org/cgi/content/full/104/2/374" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Hitzemann R, Reed C, Malmanger B, Lawler M, Hitzemann B, Cunningham B, McWeeney S, Belknap J, Harrington C, Buck K, Phillips T, Crabbe J (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15597075" target="_blank" class="fwn">2004</a>) On the integration of alcohol-related quantitative trait loci and gene expression analyses. Alcoholism: Clinical and Experimental Research 28:1437-1448 [Please cite this paper is you plan to use the B6D2F2 OHSU data set.]
-<LI>
-Maiya RP (<a href="http://64.233.179.104/search?q=cache:3ajOyi3RpywJ:www.lib.utexas.edu/etd/d/2004/maiyar34683/maiyar34683.pdf+webqtl&hl=en" target="_blank" class="fwn">2004</a>) Regulation of dopamine transporter: a role for ethanol and protein interactions. Dissertation, University of Texas, Austin
-<LI>
-Orth AP, Batalow S, Perrone M, Chanda SK (<a href="http://www.ashley-pub.com/doi/abs/10.1517/14728222.8.6.587" target="_blank" class="fwn">2004</a>) The promise of genomics to identify novel therapeutic targets. Expert Opion of Therapeutic Targets 8:587-596
-<LI>
-Pomp D, Allan MF, Wesolowski SR (<a href="http://www.animal-science.org/cgi/content/full/82/13_suppl/E300" target="_blank" class="fwn">2004</a>) Quantitative genomics: Exploring the genetic architecture of complex trait predisposition. J Anim Sci 82:E300-E312
-<A href="http://jas.fass.org/cgi/reprint/82/13_suppl/E300.pdf" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<LI>
-Ponomarev I, Schafer GL, Blednov YA, Williams RW, Iver VR, Harris A (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed/15544578" target="_blank" class="fwn">2004</A>) Convergent analysis of cDNA and short oligomer microarrays, mouse null mutant, and bioinformatics resources to study complex traits. Genes, Brain and Behavior 3:360-368
-<LI>
-Simon P, Schott K, Williams RW, Schaeffel F (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15610169" target="_blank" class="fwn">2004</A>) Post-translational regulation of the immediate early gene EGR1 by light in the mouse retina. European Journal of Neuroscience 20:3371-3377
-<LI>
-Zareparsi S, Hero A, Zack DJ, Williams RW, Swaroop A (<A HREF="http://www.iovs.org/cgi/content/full/45/8/2457" target="_blank" class="fwn">2004</A>) Seeing the unseen: microarray-based gene expression profiling in vision. Investigative Ophthalmology and Visual Science 45:2457-2462 <A href="http://www.iovs.org/cgi/content/full/45/8/2457" target="_blank" class="fwn"><I> Full text HTML version</I></A>
-</OL
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</Blockquote>
-
-
-
-
-
-<BLOCKQUOTE style="font-size: 14px;">
- <A NAME="2003" class="subtitle"">GeneNetwork (2003) </A>
-<BLOCKQUOTE>
-
-</Blockquote>
-
-<OL>
-<LI>
-Bolivar V, Flaherty L (2003) A region on chromosome 15 controls intersession habituation in mice. Journal of Neuroscience 23: 9435-9438 <A href="http://www.jneurosci.org/cgi/content/full/23/28/9435" target="_blank" class="fwn"><I> Full Text HTML and PDF Versions</I></A>
-<LI>
-Jones BC, Reed CL, Hitzemann R, Wiesinger JA, McCarthy KA, Buwen JP, Beard JL <A HREF="http://www.ncbi.nlm.nih.gov/pubmed/14744041" target="_blank" class="fwn">2003</A>) Quantitative genetic analysis of ventral midbrain and liver iron in BXD recombinant inbred mice. Nutr Neuroscience 6:369-77
-<A href="images/upload/Jones_2003_NN1203.pdf" target="_blank" class="fwn"><I> Full Text PDF Version</I></A>
-
-<LI>
-Hitzemann R, Hitzemann B, Rivera S, Gatley J, Thanos P, Shou S, Lu L, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/12543998" target="_blank" class="fwn">2003</a>) Dopamine D2 receptor binding, Drd2 expression and the number of dopamine neurons in the BXD recombinant inbred series: genetic relationships to alcohol and other drug associated phenotypes. Alcoholism: Clinical and Experimental Research 27:1-11
-<!-- <A href="http://www.alcoholism-cer.com/pt/re/alcoholism/abstract.00000374-200301000-00002.htm;jsessionid=Bd5vCAYkgweCpQQfVUDL32NyFP8vi8xbCG1JwnOLMdUZFaIgvgU5!1564676086!-949856032!9001!-1
-" target="_blank" class="fwn"><I> Full Text HTML and PDF Versions</I></A>
--->
-<LI>
-Hitzemann R, Malmanger B, Reed C, Lawler M, Hitzemann B, Coulombe S, Buck K, Rademacher B, Walter N, Polyakov Y, Sikela J, Williams RW, Flint J, Talbot C (<a href="http://www.ncbi.nlm.nih.gov/pubmed/14722723" target="_blank" class="fwn">2003</a>) A strategy for integration of QTL, gene expression, and sequence analyses. Mammalian Genome 14:733-747
-<LI>
-Lionikas A, Blizard DA, Vandenbergh DJ, Glover MG, Stout JT, Vogler GP, McClearn GE, Larsson L (<a href="http://physiolgenomics.physiology.org/cgi/content/full/16/1/141" target="_blank" class="fwn">2003</a>) Genetic architecture of fast- and slow-twitch skeletal muscle weight in 200-day-old mice of the C57BL/6J and DBA/2J lineage. Physiological Genomics 16:141-152
-<LI>
-Peirce J, Chesler EJ, Williams RW, Lu L (2003) Genetic architecture of the mouse hippocampus: identification of gene loci with regional effects. Genes, Brain and Behavior 2:238–252
-<A href="images/upload/Peirce_Lu_2003.pdf" target="_blank" class="fwn"><I> Full Text PDF Version</I></A>
-<LI>
-Rosen GD, La Porte NT, Diechtiareff B, Pung, CJ, Nissanov J, Gustafson C, Bertrand L, Gefen S, Fan Y, Tretiak OJ, Manly KF, Parks MR, Williams AG, Connolly MT, Capra JA, Williams RW (2003) Informatics center for mouse genomics: the dissection of complex traits of the nervous system. Neuroinformatics 1:327–342
-<A href="images/upload/Rosen_2003.pdf" target="_blank" class="fwn"><I> Full Text PDF Version</I></A>
-
-</OL>
-
-</Blockquote>
-
-<Blockquote class="fwn"><A NAME="Background" class="subtitle">Background references on inbred strains and other key resources</A>
-
-<Blockquote style="font-size: 14px;">
-Williams RW, Gu J, Qi S, Lu L (<a href="https://ncbi.nlm.nih.gov/pubmed/11737945" class="fwn" target="_blank">2001</a>) The genetic structure of recombinant inbred mice: high-resolution consensus maps for complex trait analysis. Genome Biology 2:46.1–46.18 <A href="http://genomebiology.com/content/2/11/RESEARCH0046" target="_blank" class="fwn"><I> Full Text HTML and PDF Version</I></A>. [General background on recombinant inbred strains.]
-</Blockquote>
-
-<Blockquote style="font-size: 14px;">
-Peirce JL, Lu L, Gu J, Silver LM, Williams RW (<a href="http://www.biomedcentral.com/1471-2156/5/7" target="_blank" class="fwn">2004</a>) A new set of BXD recombinant inbred lines from advanced intercross populations in mice. BMC Genetics 5:7 <A href="http://www.genenetwork.org/pdf/Peirce_and_Lu_2004.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>. [Background on the expanded set of BXD strains.]
-</Blockquote>
-
-<Blockquote style="font-size: 14px;">
-Williams RW, Bennett B, Lu L, Gu J, DeFries JC, Carosone-Link PJ, Rikke BA, Belknap JK, Johnson TE (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15457343" target="_blank" class="fwn">2004</a>) Genetic structure of the LXS panel of recombinant inbred mouse strains: a powerful resource for complex trait analysis. Mammalian Genome 15:637-647 [Background on origins and the genetic structure large panel of LXS strains. Please cite this paper is you have used LXS data sets.]
-</Blockquote>
-
-<Blockquote style="font-size: 14px;">
-Grubb SC, Churchill GA, Bogue MA (<a href="http://www.ncbi.nlm.nih.gov/pubmed/15130929" target="_blank" class="fwn">2004</a>) A collaborative database of inbred mouse strain characteristics. Bioinformatics 20:2857-2859 [One of two key papers on the Mouse Phenome Project and database at The Jackson Laboratory. The mouse diversity panel (MDP) is a superset of strains that are part of the Phenome Project. <a href="http://bioinformatics.oxfordjournals.org/cgi/reprint/20/16/2857" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>.]
-</Blockquote>
-
-<Blockquote style="font-size: 14px;">
-Bogue MA, Grubb SC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/15619963" target="_blank" class="fwn">2004</a>) The mouse phenome project. Genetica 122:71-74 [One of two key papers on the Mouse Phenome Project and database at The Jackson Laboratory. The mouse diversity panel (MDP) is a superset of strains that are part of the Phenome Project. Please contact Dr. Molly Bogue for information on the Phenome Project: mollyb@jax.org]
-</Blockquote>
-
-<Blockquote style="font-size: 14px;">
-Frazer KA, Eskin E, Kang HM, Bogue MA, Hinds DA, Beilharz EJ, Gupta RV, Montgomery J, Morenzoni MM, Nilsen GB, Pethiyagoda CL, Stuve LL, Johnson FM, Daly MJ, Wade CM, Cox DR (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17660834" target="_blank" class="fwn">2007</a>) A sequence-based variation map of 8.27 million SNPs in inbred mouse strains. Nature 448, 1050-3
-</Blockquote>
-
-
-<Blockquote style="font-size: 14px;">
-Loudet O, Chaillou S, Camilleri C, Bouchez D, Daniel-Vedele F (<A HREF="http://www.inra.fr/qtlat/BayxSha/Loudet2002.pdf" target="_blank" class="fwn">2002</A>) Bay-0 x Shahdara recombinant inbred line population: a powerful tool for the genetic dissection of complex traits in Arabidopsis. Theoretical and Applied Genetics 104:1173-1184 <A HREF="http://www.inra.fr/qtlat/BayxSha/Loudet2002.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> [Please cite this paper is you have used the BXS Arabidopsis data sets.]
-</Blockquote>
-
-<Blockquote style="font-size: 14px;">
-Jirout M, Krenova D, Kren V, Breen L, Pravenec M, Schork NJ, Printz MP (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=12925886&query_hl=3" target="_blank" class="fwn">2003</A>) A new framework marker-based linkage map and SDPs for the rat HXB/BXH strain set. expression differences in mice diverently selected for methamphetamine sensitivity. Mammalian Genome 14: 537-546
-</Blockquote>
-
-<Blockquote style="font-size: 14px;">
-Shifman S, Bell JT, Copley BR, Taylor M, Williams RW, Mott R, Flint J (<A HREF="http://biology.plosjournals.org/perlserv/?request=get-document&doi=10.1371/journal.pbio.0040395" target="_blank" class="fwn">2006</A>) A high resolution single nucleotide polymorphism genetic map of the mouse genome. PLoS Biology 4:2227-2237 <A HREF="http://biology.plosjournals.org/archive/1545-7885/4/12/pdf/10.1371_journal.pbio.0040395-L.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> [A comprehensive analysis of recombination rates using several populations of mice, including most major GRPs.]
-</Blockquote>
-
-
-</Blockquote>
-<Blockquote class="subtitle">Information about this HTML page:</P> </Blockquote>
-<Blockquote style="font-size: 14px;">
-<Blockquote ><P><P>This text originally generated by RWW, April 2003. Updated by RWW, Oct 15, Dec 17, 2004; RWW Jan 19, 2005; EJC Mar 9; RWW Mar 29, Apr 15; RWW Jan 7, 2006, Jan 21, July 26, Aug 26, 2006s; May 2007; Feb 2008; March 19 2008
-</P></Blockquote>
-
- </Blockquote>
- <P></P>
-
-
-
-{% endblock %}
diff --git a/wqflask/wqflask/templates/references.html b/wqflask/wqflask/templates/references.html
new file mode 100644
index 00000000..04e60361
--- /dev/null
+++ b/wqflask/wqflask/templates/references.html
@@ -0,0 +1,19 @@
+{% extends "base.html" %}
+{% block title %}Reference{% endblock %}
+{% block css %}
+<link rel="stylesheet" type="text/css" href="/static/new/css/markdown.css" />
+{% endblock %}
+{% block content %}
+<div class="github-btn-container">
+ <div class="github-btn">
+ <a href="https://github.com/genenetwork/gn-docs/blob/master/general/references/references.md">
+ Edit Text
+ <img src="/static/images/edit.png">
+ </a>
+ </div>
+</div>
+<div id="markdown" class="container">
+ {{ rendered_markdown|safe }}
+</div>
+
+{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/templates/search_result_page.html b/wqflask/wqflask/templates/search_result_page.html
index 3dfae3dd..e7a7bc51 100644
--- a/wqflask/wqflask/templates/search_result_page.html
+++ b/wqflask/wqflask/templates/search_result_page.html
@@ -2,17 +2,20 @@
{% block title %}Search Results{% endblock %}
{% block css %}
<link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
- <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/scroller.dataTables.min.css">
- <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.dataTables.css">
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='fontawesome/css/font-awesome.min.css') }}" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('js', filename='DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css') }}">
+ <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css">
<link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
+ <link rel="stylesheet" type="text/css" href="static/new/css/trait_list.css" />
{% endblock %}
{% block content %}
<!-- Start of body -->
- <div style="padding-left: 10px;>
+ <div style="padding-left: 10px;">
<input type="hidden" name="uc_id" id="uc_id" value="{{ uc_id }}">
<div style="padding-top: 10px; padding-bottom: 10px; font-size: 16px;">
<!-- Need to customize text more for other types of searches -->
+
<p><b>Search Results:</b> We searched <a href="http://genenetwork.org/webqtl/main.py?FormID=sharinginfo&{% if dataset.accession_id != 'None' %}GN_AccessionId={{ dataset.accession_id }}{% else %}InfoPageName={{ dataset.name }}{% endif %}">{{ dataset.fullname }}</a>
to find all records
{% if go_term is not none %}
@@ -39,16 +42,17 @@
{% elif word.search_term|length == 5 %}
with <u>{{ word.key|upper }}</u> between <strong>{{ word.search_term[0] }}</strong> and <strong>{{ word.search_term[1] }}</strong> on chromosome <strong>{{ word.search_term[2] }}</strong> between <strong>{{ word.search_term[3] }}</strong> and <strong>{{ word.search_term[4] }}</strong> Mb{% if loop.last %}.{% else %} and {% endif %}
{% endif %}
- {% elif word.key|lower == "position" %}
- with <u>target genes</u> on chromosome <strong>{% if word.search_term[0].split('chr')|length > 1 %}{{ word.search_term[0].split('chr')[1] }}{% elif word.search_term[0].split('CHR')|length > 1 %}{{ word.search_term[0].split('CHR')[1] }}{% else %}{{ word.search_term[0] }}{% endif %}</strong> between <strong>{{ word.search_term[1] }}</strong> and <strong>{{ word.search_term[2] }}</strong> Mb{% if loop.last %}.{% else %} and {% endif %}
+ {% elif word.key|lower == "position" or word.key|lower == "mb" %}
+ with <u>target genes</u> on chromosome <strong>{% if (word.search_term[0]|lower).split('chr')|length > 1 %}{{ (word.search_term[0]|lower).split('chr')[1] }}{% else %}{{ word.search_term[0] }}{% endif %}</strong> between <strong>{{ word.search_term[1] }}</strong> and <strong>{{ word.search_term[2] }}</strong> Mb{% if loop.last %}.{% else %} and {% endif %}
{% else %}
- {% if word.search_term[0] == "*" %} in the dataset.{% else %}{% if loop.first %}that match:<br>{% endif %}<b>"{{ word.search_term[0] }}"</b>{% if loop.last %}{% else %} and {% endif %}{% endif %}
+ {% if word.search_term[0] == "*" %} in the dataset.{% else %}{% if loop.first %}that match:<br>{% endif %}<b>{{ word.search_term[0] }}</b>{% if loop.last %}{% else %} and {% endif %}{% endif %}
{% endif %}
{% endfor %}
{% endif %}
<br>
- {{ results|count }} records are shown below.
+ A total of {{ results|count }} records were found.
</p>
+
{% if go_term is not none %}
<p><b>The associated genes include:</b><br><br>{% for word in search_terms %}{{ word.search_term[0] }}{% endfor %}</p>
{% endif %}
@@ -58,7 +62,9 @@
<!--<hr style="height: 1px; background-color: #A9A9A9;">-->
</div>
-
+ {% if too_many_results %}
+ <p>Your search generated over 50000 results. Please modify your search to generate 50000 or fewer matches.</p>
+ {% else %}
<div style="min-width: 950px;">
<form id="trait_submission_form" target="_blank" action="/corr_matrix" method="post">
<input type="hidden" name="tool_used" value="" />
@@ -68,42 +74,7 @@
{{ this_trait.name }}:{{ this_trait.dataset }},
{% endfor %}" >
-
- <button id="corr_matrix" class="btn btn-primary submit_special" data-url="/corr_matrix" title="Correlation Matrix" >
- Correlations
- </button>
-
- <button id="network_graph" class="btn btn-primary submit_special" data-url="/network_graph" title="Network Graph" >
- Networks
- </button>
-
- <button id="send_to_webgestalt" class="btn btn-primary submit_special" data-url="/webgestalt_page" title="WebGestalt" >
- WebGestalt
- </button>
-
- <button id="send_to_geneweaver" class="btn btn-primary submit_special" data-url="/geneweaver_page" title="GeneWeaver" >
- GeneWeaver
- </button>
-
- <button id="send_to_bnw" class="btn btn-primary submit_special" data-url="/bnw_page" title="Bayesian Network" >
- BNW
- </button>
-
- <button id="wgcna_setup" class="btn btn-primary submit_special" data-url="/wgcna_setup" title="WGCNA Analysis" >
- WGCNA
- </button>
-
- <button id="ctl_setup" class="btn btn-primary submit_special" data-url="/ctl_setup" title="CTL Analysis" >
- CTL Maps
- </button>
-
- <button id="heatmap" class="btn btn-primary submit_special" data-url="/heatmap" title="Heatmap" >
- MultiMap
- </button>
-
- <button id="comp_bar_chart" class="btn btn-primary submit_special" data-url="/comparison_bar_chart" title="Comparison Bar Chart" >
- Comparison Bar Chart
- </button>
+ {% include 'tool_buttons.html' %}
</form>
</div>
@@ -122,22 +93,38 @@
{% endif %}
<input type="hidden" name="export_data" id="export_data" value="">
<button class="btn btn-default" id="select_all" type="button"><span class="glyphicon glyphicon-ok"></span> Select</button>
- <button class="btn btn-default" id="add" type="button" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
- <button class="btn btn-default" id="export_traits">Download CSV</button>
+ <button class="btn btn-default" id="invert" type="button"><span class="glyphicon glyphicon-adjust"></span> Invert</button>
+ <button class="btn btn-success" id="add" type="button" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
+ <button class="btn btn-default" id="export_traits">Download <span class="glyphicon glyphicon-download"></span></button>
<input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline;" placeholder="Search This Table For ...">
<input type="text" id="select_top" class="form-control" style="width: 200px; display: inline;" placeholder="Select Top ...">
<button class="btn btn-default" id="deselect_all" type="button"><span class="glyphicon glyphicon-remove"></span> Deselect</button>
</div>
</form>
- <br />
{% if dataset.type != 'Geno' %}
- <br />
- <div style="margin-bottom: 5px;">
+ <div class="show-hide-container">
<b>Show/Hide Columns:</b>
+ <br>
+ {% if dataset.type == 'ProbeSet' %}
+ <button class="toggle-vis" data-column="3">Symbol</button>
+ <button class="toggle-vis" data-column="4">Description</button>
+ <button class="toggle-vis" data-column="5">Location</button>
+ <button class="toggle-vis" data-column="6">Mean</button>
+ <button class="toggle-vis" data-column="7">Peak LOD</button>
+ <button class="toggle-vis" data-column="8">Peak Location</button>
+ <button class="toggle-vis" data-column="9">Effect Size</button>
+ {% elif dataset.type == 'Publish' %}
+ <button class="toggle-vis" data-column="3">Description</button>
+ <button class="toggle-vis" data-column="4">Mean</button>
+ <button class="toggle-vis" data-column="5">Authors</button>
+ <button class="toggle-vis" data-column="6">Year</button>
+ <button class="toggle-vis" data-column="7">Peak LOD</button>
+ <button class="toggle-vis" data-column="8">Peak Location</button>
+ <button class="toggle-vis" data-column="9">Effect Size</button>
+ {% endif %}
</div>
{% endif %}
- <!--<div id="table_container" style="min-width: {% if dataset.type == 'ProbeSet' or dataset.type == 'Publish' %}2000{% else %}380{% endif %}px;">-->
- <div id="table_container">
+ <div id="table_container" {% if dataset.type == 'ProbeSet' or dataset.type == 'Publish' %}style="min-width: 1500px; max-width:100%;"{% endif %}>
<table class="table-hover table-striped cell-border" id='trait_table' style="float: left; width: {% if dataset.type == 'Geno' %}380px{% else %}100%{% endif %};">
<tbody>
<td colspan="100%" align="center"><br><b><font size="15">Loading...</font></b><br></td>
@@ -145,6 +132,7 @@
</table>
</div>
</div>
+ {% endif %}
</div>
<div id="myModal"></div>
@@ -154,81 +142,50 @@
{% endblock %}
{% block js %}
- <script language="javascript" type="text/javascript" src="/static/new/js_external/md5.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/javascript/search_results.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/md5.min.js') }}"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.buttons.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/buttons.colVis.min.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/scroller/js/dataTables.scroller.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jszip/jszip.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/buttons/js/dataTables.buttons.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/buttons/js/buttons.colVis.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js"></script>
+
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/search_results.js"></script>
<script type='text/javascript'>
var trait_list = {{ trait_list|safe }};
</script>
<script type="text/javascript" charset="utf-8">
-
- $.fn.dataTable.ext.order['dom-checkbox'] = function ( settings, col )
- {
- return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
- return $('input', td).prop('checked') ? '1' : '0';
- } );
- };
-
- $.fn.dataTable.ext.order['dom-inner-text'] = function ( settings, col )
- {
- return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
- return $(td).text();
- } );
- }
-
$(document).ready( function () {
-
- $('#trait_table tr').click(function(event) {
- if (event.target.type !== 'checkbox') {
- $(':checkbox', this).trigger('click');
- }
- });
- function change_buttons() {
- buttons = ["#add", "#remove"];
- num_checked = $('.trait_checkbox:checked').length;
- if (num_checked === 0) {
- for (_i = 0, _len = buttons.length; _i < _len; _i++) {
- button = buttons[_i];
- $(button).prop("disabled", true);
- }
- } else {
- for (_j = 0, _len2 = buttons.length; _j < _len2; _j++) {
- button = buttons[_j];
- $(button).prop("disabled", false);
- }
- }
- //});
- if ($(this).is(":checked")) {
- if (!$(this).closest('tr').hasClass('selected')) {
- $(this).closest('tr').addClass('selected')
- }
+ var getParams = function(url) {
+ let parser = document.createElement('a');
+ parser.href = url;
+ let params = parser.search.substring(1);
+ if(params.length > 0) {
+ return ('?'+params);
}
- else {
- if ($(this).closest('tr').hasClass('selected')) {
- $(this).closest('tr').removeClass('selected')
- }
- }
- }
+ return params;
+ };
- console.time("Creating table");
//ZS: Need to make sort by symbol, also need to make sure blank symbol fields at the bottom and symbols starting with numbers below letters
-
- $('#trait_table').DataTable( {
+ trait_table = $('#trait_table').DataTable( {
'drawCallback': function( settings ) {
- $('#trait_table tr').click(function(event) {
- if (event.target.type !== 'checkbox' && event.target.tagName.toLowerCase() !== 'a') {
- $(':checkbox', this).trigger('click');
- }
- });
- $('.trait_checkbox:checkbox').on("change", change_buttons);
+ $('#trait_table tr').off().on("click", function(event) {
+ if (event.target.type !== 'checkbox' && event.target.tagName.toLowerCase() !== 'a') {
+ var obj =$(this).find('input');
+ obj.prop('checked', !obj.is(':checked'));
+ }
+ if ($(this).hasClass("selected") && event.target.tagName.toLowerCase() !== 'a'){
+ $(this).removeClass("selected")
+ } else if (event.target.tagName.toLowerCase() !== 'a') {
+ $(this).addClass("selected")
+ }
+ change_buttons()
+ });
},
'createdRow': function ( row, data, index ) {
$('td', row).eq(0).attr("style", "text-align: center; padding: 0px 10px 2px 10px;");
@@ -272,7 +229,7 @@
'data': null,
'width': "25px",
'orderDataType': "dom-checkbox",
- 'orderSequence': [ "desc", "asc"],
+ 'orderable': false,
'render': function(data, type, row, meta) {
return '<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + data.hmac + '">'
}
@@ -285,10 +242,9 @@
},
{
'title': "Record",
- 'type': "natural",
+ 'type': "natural-minus-na",
'data': null,
'width': "60px",
- 'orderDataType': "dom-inner-text",
'render': function(data, type, row, meta) {
return '<a target="_blank" href="/show_trait?trait_id=' + data.name + '&dataset=' + data.dataset + '">' + data.display_name + '</a>'
}
@@ -302,7 +258,6 @@
{
'title': "Description",
'type': "natural",
- 'width': "500px",
'data': null,
'render': function(data, type, row, meta) {
try {
@@ -313,36 +268,36 @@
}
},
{
- 'title': "Location",
- 'type': "natural",
- 'width': "120px",
+ 'title': "<div style='text-align: right;'>Location</div>",
+ 'type': "natural-minus-na",
+ 'width': "125px",
'data': "location"
},
{
- 'title': "Mean",
- 'type': "natural",
- 'width': "40px",
+ 'title': "<div style='text-align: right;'>Mean</div>",
+ 'type': "natural-minus-na",
+ 'width': "30px",
'data': "mean",
'orderSequence': [ "desc", "asc"]
},
{
- 'title': "Max LRS<a href=\"http://genenetwork.org//glossary.html#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
- 'type': "natural",
- 'data': "lrs_score",
- 'width': "80px",
+ 'title': "<div style='text-align: right;'>Peak <a href=\"{{ url_for('glossary_blueprint.glossary') }}#LRS\" target=\"_blank\" style=\"color: white;\">&nbsp;<i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a></div><div style='text-align: right;'>LOD&ensp;&emsp;</div>",
+ 'type': "natural-minus-na",
+ 'data': "lod_score",
+ 'width': "60px",
'orderSequence': [ "desc", "asc"]
},
{
- 'title': "Max LRS Location",
- 'type': "natural",
- 'width': "150px",
+ 'title': "<div style='text-align: right;'>Peak Location</div>",
+ 'type': "natural-minus-na",
+ 'width': "125px",
'data': "lrs_location"
},
{
- 'title': "Additive Effect<a href=\"http://genenetwork.org//glossary.html#A\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
- 'type': "natural",
+ 'title': "<div style='text-align: right;'>Effect <a href=\"{{ url_for('glossary_blueprint.glossary') }}#A\" target=\"_blank\" style=\"color: white;\">&nbsp;<i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a></div><div style='text-align: right;'>Size&ensp;&emsp;</div>",
+ 'type': "natural-minus-na",
'data': "additive",
- 'width': "120px",
+ 'width': "60px",
'orderSequence': [ "desc", "asc"]
}{% elif dataset.type == 'Publish' %},
{
@@ -359,16 +314,16 @@
}
},
{
- 'title': "Mean",
- 'type': "natural",
- 'width': "110px",
+ 'title': "<div style='text-align: right;'>Mean</div>",
+ 'type': "natural-minus-na",
+ 'width': "30px",
'data': "mean",
'orderSequence': [ "desc", "asc"]
},
{
'title': "Authors",
'type': "natural",
- 'width': "500px",
+ 'width': "300px",
'data': null,
'render': function(data, type, row, meta) {
author_list = data.authors.split(",")
@@ -377,19 +332,14 @@
} else{
author_string = data.authors
}
- try {
- return decodeURIComponent(escape(author_string))
- } catch(err){
- return author_string
- }
+ return author_string
}
},
{
- 'title': "Year",
- 'type': "natural",
- 'orderDataType': "dom-inner-text",
+ 'title': "<div style='text-align: right;'>Year</div>",
+ 'type': "natural-minus-na",
'data': null,
- 'width': "80px",
+ 'width': "25px",
'render': function(data, type, row, meta) {
if (data.pubmed_id != "N/A"){
return '<a href="' + data.pubmed_link + '">' + data.pubmed_text + '</a>'
@@ -400,63 +350,64 @@
'orderSequence': [ "desc", "asc"]
},
{
- 'title': "Max LRS<a href=\"http://genenetwork.org//glossary.html#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
- 'type': "natural",
- 'data': "lrs_score",
- 'width': "80px",
+ 'title': "<div style='text-align: right;'>Peak <a href=\"{{ url_for('glossary_blueprint.glossary') }}#LRS\" target=\"_blank\" style=\"color: white;\">&nbsp;<i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a></div><div style='text-align: right;'>LOD&ensp;&emsp;</div>",
+ 'type': "natural-minus-na",
+ 'data': "lod_score",
+ 'width': "60px",
'orderSequence': [ "desc", "asc"]
},
{
- 'title': "Max LRS Location",
- 'type': "natural",
- 'width': "150px",
+ 'title': "<div style='text-align: right;'>Peak Location</div>",
+ 'type': "natural-minus-na",
+ 'width': "120px",
'data': "lrs_location"
},
{
- 'title': "Additive Effect<a href=\"http://genenetwork.org//glossary.html#A\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
- 'type': "natural",
- 'width': "120px",
+ 'title': "<div style='text-align: right;'>Effect <a href=\"{{ url_for('glossary_blueprint.glossary') }}#A\" target=\"_blank\" style=\"color: white;\">&nbsp;<i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a></div><div style='text-align: right;'>Size&ensp;&emsp;</div>",
+ 'type': "natural-minus-na",
+ 'width': "60px",
'data': "additive",
'orderSequence': [ "desc", "asc"]
}{% elif dataset.type == 'Geno' %},
{
- 'title': "Location",
- 'type': "natural",
- 'width': "140px",
+ 'title': "<div style='text-align: right;'>Location</div>",
+ 'type': "natural-minus-na",
+ 'width': "120px",
'data': "location"
}{% endif %}
],
"order": [[1, "asc" ]],
- {% if dataset.type != 'Geno' %}
- buttons: [
- {
- extend: 'columnsToggle',
- columns: function( idx, data, node ) {
- if (idx != 0) {
- return true;
- } else {
- return false;
- }
- },
- postfixButtons: [ 'colvisRestore' ]
- }
- ],
- 'sDom': "Bitir",
+ 'sDom': "iti",
+ "autoWidth": true,
+ "bSortClasses": false,
+ {% if trait_list|length > 20 %}
+ "scrollY": "100vh",
+ "scroller": true,
+ "scrollCollapse": true
{% else %}
- 'sDom': "itir",
+ "iDisplayLength": -1
{% endif %}
- 'deferRender': true,
- 'paging': false,
- 'orderClasses': true,
- 'processing': true,
- 'language': {
- 'loadingRecords': '&nbsp;',
- 'processing': 'Loading...'
- }
} );
- console.timeEnd("Creating table");
-
+ trait_table.draw(); //ZS: This makes the table adjust its height properly on initial load
+
+ $('.toggle-vis').on( 'click', function (e) {
+ e.preventDefault();
+
+ // Get the column API object
+ var column = trait_table.column( $(this).attr('data-column') );
+
+ // Toggle the visibility
+ column.visible( ! column.visible() );
+
+ if (column.visible()){
+ $(this).removeClass("active");
+ } else {
+ $(this).addClass("active");
+ }
+ } );
+
+
$('#redraw').click(function() {
var table = $('#trait_table').DataTable();
table.colReorder.reset()
@@ -469,4 +420,4 @@
});
</script>
-{% endblock %}
+{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/templates/set_group_privileges.html b/wqflask/wqflask/templates/set_group_privileges.html
new file mode 100644
index 00000000..a0a53292
--- /dev/null
+++ b/wqflask/wqflask/templates/set_group_privileges.html
@@ -0,0 +1,77 @@
+{% extends "base.html" %}
+{% block title %}Set Group Privileges{% endblock %}
+{% block css %}
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTablesExtensions/buttonStyles/css/buttons.dataTables.min.css') }}" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
+{% endblock %}
+{% block content %}
+<!-- Start of body -->
+ <div class="container">
+ <h1>Group Privileges</h1>
+ <br>
+ <form id="set_group_privileges">
+ <input type="hidden" name="resource_id" value="{{ resource_id }}">
+ <div style="min-width: 600px; max-width: 800px;">
+ <button type="submit" class="btn btn-primary" style="margin-bottom: 40px;">Add Group</button>
+ <hr>
+ <h2>Data and Metadata Privileges</h2>
+ <table id="data_privileges_table" class="table-hover table-striped cell-border" style="float: left;">
+ <thead>
+ <tr>
+ <th></th>
+ <th>No-Access</th>
+ <th>View</th>
+ <th>Edit</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Data:</td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="data_privilege" VALUE="no-access" checked></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="data_privilege" VALUE="view"></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="data_privilege" VALUE="edit"></td>
+ </tr>
+ <tr>
+ <td>Metadata:</td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="metadata_privilege" VALUE="no-access" checked></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="metadata_privilege" VALUE="view"></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="metadata_privilege" VALUE="edit"></td>
+ </tr>
+ </tbody>
+ </table>
+ <hr>
+ <h2>Admin Privileges</h2>
+ <table id="admin_privileges_table" class="table-hover table-striped cell-border" style="float: left;">
+ <thead>
+ <tr>
+ <th></th>
+ <th>Not Admin</th>
+ <th>Edit Access</th>
+ <th>Edit Admins</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Admin:</td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="admin_privilege" VALUE="not-admin" checked></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="admin_privilege" VALUE="edit-access"></td>
+ <td align="center" style="padding: 0px;"><input type="radio" name="admin_privilege" VALUE="edit-admins"></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </form>
+ </div>
+
+<!-- End of body -->
+
+{% endblock %}
+
+{% block js %}
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
+ <script>
+ $('#data_privileges_table').dataTable();
+ $('#admin_privileges_table').dataTable();
+ </script>
+{% endblock %}
diff --git a/wqflask/wqflask/templates/show_trait.html b/wqflask/wqflask/templates/show_trait.html
index 7380d198..09ecb7b6 100644
--- a/wqflask/wqflask/templates/show_trait.html
+++ b/wqflask/wqflask/templates/show_trait.html
@@ -5,10 +5,10 @@
<link rel="stylesheet" type="text/css" href="/static/new/css/box_plot.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/prob_plot.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/scatter-matrix.css" />
- <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='d3-tip/d3-tip.css') }}" />
<link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
- <link rel="stylesheet" type="text/css" href="/static/new/packages/noUiSlider/nouislider.css" />
- <link rel="stylesheet" type="text/css" href="/static/new/packages/noUiSlider/nouislider.pips.css" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='nouislider/nouislider.min.css') }}" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/trait_list.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
{% endblock %}
@@ -21,8 +21,7 @@
{% endif %}
</div>
- <form method="post" action="" target="_blank" name="trait_page" id="trait_data_form"
- class="form-horizontal">
+ <form method="post" action="" target="_blank" name="trait_page" id="trait_data_form" class="form-horizontal">
<div id="hidden_inputs">
<input type="hidden" name="trait_hmac" value="{{ data_hmac('{}:{}'.format(this_trait.name, dataset.name)) }}">
{% for key in hddn %}
@@ -37,8 +36,9 @@
<input type="hidden" name="genofile" value="">
<input type="hidden" name="covariates" value="">
<input type="hidden" name="transform" value="">
+ <input type="hidden" name="sample_vals" value="">
- <div class="container" style="min-width: 1450px;">
+ <div class="container showtrait-main-div">
<div class="panel-group" id="accordion">
<div class="panel panel-default">
<div class="panel-heading" data-toggle="collapse" data-parent="#accordion" data-target="#collapseOne" aria-expanded="true">
@@ -74,7 +74,7 @@
<div class="panel-body">
{% include 'show_trait_transform_and_filter.html' %}
</div>
- <div id="transform_alert_placeholder"><div id="transform_alert" style="display: none;"class="alert alert-success outlier-alert"><a class="close" data-dismiss="alert">�</a><span>Because there are some values between 0 and 1, log2 and log10 transforms will add 1 to each value.</span></div></div>
+ <div id="transform_alert_placeholder"><div id="transform_alert" style="display: none;"class="alert alert-success outlier-alert"><a href="#" class="close" data-dismiss="alert">�</a><span>Because there are some values between 0 and 1, log2 and log10 transforms will add 1 to each value.</span></div></div>
</div>
</div>
<div class="panel panel-default">
@@ -130,13 +130,13 @@
$('.collapse').collapse()
</script>
- <script type="text/javascript" src="https://d3js.org/d3.v3.min.js"></script>
- <script type="text/javascript" src="/static/new/js_external/underscore-min.js"></script>
- <script type="text/javascript" src="/static/new/js_external/underscore.string.min.js"></script>
- <script type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
- <script type="text/javascript" src="/static/new/js_external/jstat.min.js"></script>
- <script type="text/javascript" src="/static/new/js_external/shapiro-wilk.js"></script>
- <script type="text/javascript" src="/static/new/js_external/plotly-latest.min.js"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='d3js/d3.min.js') }}"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='js_alt/underscore.min.js') }}"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='underscore-string/underscore.string.min.js') }}"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='d3-tip/d3-tip.js') }}"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='js_alt/jstat.min.js') }}"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='shapiro-wilk/shapiro-wilk.js') }}"></script>
+ <script type="text/javascript" src="{{ url_for('js', filename='plotly/plotly.min.js') }}"></script>
<script type="text/javascript" src="/static/new/javascript/colorbrewer.js"></script>
<script type="text/javascript" src="/static/new/javascript/stats.js"></script>
@@ -144,15 +144,17 @@
<script type="text/javascript" src="/static/new/javascript/plotly_probability_plot.js"></script>
<script type="text/javascript" src="/static/new/javascript/compare_traits_scatterplot.js"></script>
+
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/scientific.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/scroller/2.0.3/js/dataTables.scroller.min.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='nouislider/nouislider.js') }}"></script>
+ <script type="text/javascript" src="/static/new/javascript/initialize_show_trait_tables.js"></script>
<script type="text/javascript" src="/static/new/javascript/show_trait_mapping_tools.js"></script>
<script type="text/javascript" src="/static/new/javascript/show_trait.js"></script>
<script type="text/javascript" src="/static/new/javascript/validation.js"></script>
-
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.scientific.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/noUiSlider/nouislider.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/javascript/get_covariates_from_collection.js"></script>
+ <script type="text/javascript" src="/static/new/javascript/get_covariates_from_collection.js"></script>
<script type="text/javascript" charset="utf-8">
@@ -209,162 +211,6 @@
}
});
- //ZS: This variable is just created to get the column position of the first case attribute, since it's needed to set the row classes in createdRow for the DataTable
- {% if sample_groups[0].attributes|length > 0 %}
- {% if sample_groups[0].se_exists() %}
- {% if has_num_cases %}
- attribute_start_pos = 6
- {% else %}
- attribute_start_pos = 5
- {% endif %}
- {% else %}
- {% if has_num_cases %}
- attribute_start_pos = 4
- {% else %}
- attribute_start_pos = 3
- {% endif %}
- {% endif %}
- {% endif %}
-
- var primary_table = $('#samples_primary').DataTable( {
- 'initComplete': function(settings, json) {
- $('.edit_sample_value').change(function() {
- edit_data_change();
- });
- },
- 'createdRow': function ( row, data, index ) {
- $(row).attr('id', "Primary_" + data.this_id)
- $(row).addClass("value_se");
- if (data.outlier) {
- $(row).addClass("outlier");
- }
- $('td', row).eq(0).attr("align", "center");
- $('td', row).eq(0).attr("style", "padding: 2px 0px 0px 2px;");
- $('td', row).eq(1).addClass("column_name-Index")
- $('td', row).eq(1).attr("align", "right");
- $('td', row).eq(1).attr("style", "padding: 2px 4px 0px 2px;");
- $('td', row).eq(2).addClass("column_name-Sample")
- $('td', row).eq(3).addClass("column_name-Value")
- $('td', row).eq(3).attr("style", "text-align: right; padding-top: 2px; padding-bottom: 0px;");
- {% if sample_groups[0].se_exists() %}
- $('td', row).eq(4).attr("align", "center");
- $('td', row).eq(4).attr("style", "padding-left: 2px; padding-right: 2px;");
- $('td', row).eq(5).addClass("column_name-SE")
- $('td', row).eq(5).attr("style", "text-align: right; padding-top: 2px; padding-bottom: 0px;");
- {% if has_num_cases %}
- $('td', row).eq(6).addClass("column_name-num_cases")
- $('td', row).eq(6).attr("style", "text-align: right; padding-top: 2px; padding-bottom: 0px;");
- {% endif %} {% else %} {% if has_num_cases %}
- $('td', row).eq(4).addClass("column_name-num_cases")
- $('td', row).eq(4).attr("style", "text-align: right; padding-top: 2px; padding-bottom: 0px;");
- {% endif %} {% endif %}
- {% if sample_groups[0].attributes|length > 0 %}
- {% for attribute in sample_groups[0].attributes|sort() %}
- $('td', row).eq(attribute_start_pos + {{ loop.index }}).addClass("column_name-{{ sample_groups[0].attributes[attribute].name }}")
- $('td', row).eq(attribute_start_pos + {{ loop.index }}).attr("style", "text-align: {{ sample_groups[0].attributes[attribute].alignment }}; padding-top: 2px; padding-bottom: 0px;")
- {% endfor %}
- {% endif %}
- },
- 'data': js_data['sample_lists'][0],
- 'columns': [
- {
- 'data': null,
- 'orderDataType': "dom-checkbox",
- 'searchable' : false,
- 'render': function(data, type, row, meta) {
- return '<input type="checkbox" name="searchResult" style="min-height: 20px;" class="checkbox edit_sample_checkbox" value="">'
- }
- },
- {
- 'title': "ID",
- 'type': "natural",
- 'searchable' : false,
- 'data': "this_id"
- },
- {
- 'title': "Sample",
- 'type': "natural",
- 'data': null,
- 'render': function(data, type, row, meta) {
- return '<span class="edit_sample_sample_name">' + data.name + '</span>'
- }
- },
- {
- 'title': "<div style='text-align: right;'>Value</div>",
- 'orderDataType': "dom-input",
- 'type': "cust-txt",
- 'data': null,
- 'render': function(data, type, row, meta) {
- if (data.value == null) {
- return '<input type="text" data-value="x" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_value" value="x" size=6 maxlength=6>'
- } else {
- return '<input type="text" data-value="' + data.value.toFixed(3) + '" data-qnorm="' + js_data['qnorm_values'][0][parseInt(data.this_id) - 1] + '" data-zscore="' + js_data['zscore_values'][0][parseInt(data.this_id) - 1] + '" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_value" value="' + data.value.toFixed(3) + '" size=6 maxlength=6>'
- }
- }
- }{% if sample_groups[0].se_exists() %},
- {
- 'bSortable': false,
- 'type': "natural",
- 'data': null,
- 'searchable' : false,
- 'render': function(data, type, row, meta) {
- return '±'
- }
- },
- {
- 'title': "<div style='text-align: right;'>SE</div>",
- 'orderDataType': "dom-input",
- 'type': "cust-txt",
- 'data': null,
- 'render': function(data, type, row, meta) {
- if (data.variance == null) {
- return '<input type="text" data-value="x" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_se" value="x" size=6 maxlength=6>'
- } else {
- return '<input type="text" data-value="' + data.variance.toFixed(3) + '" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_se" value="' + data.variance.toFixed(3) + '" size=6 maxlength=6>'
- }
- }
- }{% endif %}{% if has_num_cases %},
- {
- 'title': "<div style='text-align: right;'>N</div>",
- 'orderDataType': "dom-input",
- 'type': "cust-txt",
- 'data': null,
- 'render': function(data, type, row, meta) {
- if (data.num_cases == null || data.num_cases == undefined) {
- return '<input type="text" data-value="x" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_num_cases" value="x" size=4 maxlength=4>'
- } else {
- return '<input type="text" data-value="' + data.num_cases + '" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_num_cases" value="' + data.num_cases + '" size=4 maxlength=4>'
- }
- }
- }{% endif %}{% if sample_groups[0].attributes|length > 0 %}{% for attribute in sample_groups[0].attributes|sort() %},
- {
- 'title': "<div style='text-align: {{ sample_groups[0].attributes[attribute].alignment }}'>{{ sample_groups[0].attributes[attribute].name }}</div>",
- 'type': "natural",
- 'data': null,
- 'render': function(data, type, row, meta) {
- if (data.extra_attributes['{{ sample_groups[0].attributes[attribute].name }}'] != null && data.extra_attributes['{{ sample_groups[0].attributes[attribute].name }}'] != undefined){
- return data.extra_attributes['{{ sample_groups[0].attributes[attribute].name }}']
- } else {
- return ""
- }
- }
- }{% endfor %}{% endif %}
- ],
- 'order': [[1, "asc"]],
- 'sDom': "Ztr",
- 'autoWidth': true,
- 'deferRender': true,
- 'paging': false,
- 'orderClasses': true,
- 'scrollY': "600px",
- 'scrollCollapse': false,
- 'processing': true,
- 'language': {
- 'loadingRecords': '&nbsp;',
- 'processing': 'Loading...'
- }
- } );
-
primary_table.on( 'order.dt search.dt draw.dt', function () {
primary_table.column(1, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {
cell.innerHTML = i+1;
@@ -375,146 +221,34 @@
primary_table.search($(this).val()).draw();
} );
- {% if sample_groups|length != 1 %}
- var other_table = $('#samples_other').DataTable( {
- 'initComplete': function(settings, json) {
- $('.edit_sample_value').change(function() {
- edit_data_change();
- });
- },
- 'createdRow': function ( row, data, index ) {
- $(row).attr('id', "Other_" + data.this_id)
- $(row).addClass("value_se");
- if (data.outlier) {
- $(row).addClass("outlier");
- }
- $('td', row).eq(0).attr("align", "center");
- $('td', row).eq(0).attr("style", "padding: 2px 0px 0px 2px;");
- $('td', row).eq(1).addClass("column_name-Index")
- $('td', row).eq(1).attr("align", "right");
- $('td', row).eq(1).attr("style", "padding: 2px 4px 0px 2px;");
- $('td', row).eq(2).addClass("column_name-Sample")
- $('td', row).eq(3).addClass("column_name-Value")
- $('td', row).eq(3).attr("style", "text-align: right; padding-top: 2px; padding-bottom: 0px;");
- {% if sample_groups[1].se_exists() %}
- $('td', row).eq(4).attr("align", "center");
- $('td', row).eq(4).attr("style", "padding-left: 2px; padding-right: 2px;");
- $('td', row).eq(5).addClass("column_name-SE")
- $('td', row).eq(5).attr("style", "text-align: right; padding-top: 2px; padding-bottom: 0px;");
- {% if has_num_cases %}
- $('td', row).eq(6).addClass("column_name-num_cases")
- $('td', row).eq(6).attr("style", "text-align: right; padding-top: 2px; padding-bottom: 0px;");
- {% endif %} {% else %} {% if has_num_cases %}
- $('td', row).eq(4).addClass("column_name-num_cases")
- $('td', row).eq(4).attr("style", "text-align: right; padding-top: 2px; padding-bottom: 0px;");
- {% endif %} {% endif %}
- {% if sample_groups[1].attributes|length > 0 %}
- {% for attribute in sample_groups[1].attributes|sort() %}
- $('td', row).eq(attribute_start_pos + {{ loop.index }}).addClass("column_name-{{ sample_groups[1].attributes[attribute].name }}")
- $('td', row).eq(attribute_start_pos + {{ loop.index }}).attr("style", "text-align: {{ sample_groups[1].attributes[attribute].alignment }}; padding-top: 2px; padding-bottom: 0px;")
- {% endfor %}
- {% endif %}
- },
- 'data': js_data['sample_lists'][1],
- 'columns': [
- {
- 'data': null,
- 'orderDataType': "dom-checkbox",
- 'searchable' : false,
- 'render': function(data, type, row, meta) {
- return '<input type="checkbox" name="searchResult" style="min-height: 20px;" class="checkbox edit_sample_checkbox" value="">'
- }
- },
- {
- 'title': "ID",
- 'type': "natural",
- 'data': "this_id",
- 'searchable' : false
- },
- {
- 'title': "Sample",
- 'type': "natural",
- 'data': null,
- 'render': function(data, type, row, meta) {
- return '<span class="edit_sample_sample_name">' + data.name + '</span>'
- }
- },
- {
- 'title': "<div style='text-align: right;'>Value</div>",
- 'orderDataType': "dom-input",
- 'type': "cust-txt",
- 'data': null,
- 'render': function(data, type, row, meta) {
- if (data.value == null) {
- return '<input type="text" data-value="x" data-qnorm="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_value" value="x" size=6 maxlength=6>'
- } else {
- return '<input type="text" data-value="' + data.value.toFixed(3) + '" data-qnorm="' + js_data['qnorm_values'][1][parseInt(data.this_id)] + '" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_value" value="' + data.value.toFixed(3) + '" size=6 maxlength=6>'
- }
- }
- }{% if sample_groups[1].se_exists() %},
- {
- 'bSortable': false,
- 'type': "natural",
- 'data': null,
- 'searchable' : false,
- 'render': function(data, type, row, meta) {
- return '±'
- }
- },
- {
- 'title': "<div style='text-align: right;'>SE</div>",
- 'orderDataType': "dom-input",
- 'type': "cust-txt",
- 'data': null,
- 'render': function(data, type, row, meta) {
- if (data.variance == null) {
- return '<input type="text" data-value="x" data-qnorm="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_se" value="x" size=6 maxlength=6>'
- } else {
- return '<input type="text" data-value="' + data.variance.toFixed(3) + '" data-qnorm="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_se" value="' + data.variance.toFixed(3) + '" size=6 maxlength=6>'
- }
- }
- }{% endif %}{% if has_num_cases %},
- {
- 'title': "<div style='text-align: right;'>N</div>",
- 'orderDataType': "dom-input",
- 'type': "cust-txt",
- 'data': null,
- 'render': function(data, type, row, meta) {
- if (data.num_cases == null) {
- return '<input type="text" data-value="x" data-qnorm="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_num_cases" value="x" size=4 maxlength=4>'
- } else {
- return '<input type="text" data-value="' + data.num_cases + '" data-qnorm="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_num_cases" value="' + data.num_cases + '" size=4 maxlength=4>'
- }
- }
- }{% endif %}{% if sample_groups[1].attributes|length > 0 %}{% for attribute in sample_groups[1].attributes|sort() %},
- {
- 'title': "<div style='text-align: {{ sample_groups[1].attributes[attribute].alignment }}'>{{ sample_groups[1].attributes[attribute].name }}</div>",
- 'type': "natural",
- 'data': null,
- 'render': function(data, type, row, meta) {
- if (data.extra_attributes['{{ sample_groups[1].attributes[attribute].name }}'] != null && data.extra_attributes['{{ sample_groups[1].attributes[attribute].name }}'] != undefined){
- return data.extra_attributes['{{ sample_groups[1].attributes[attribute].name }}']
+ $('.toggle-vis').on('click', function (e) {
+ e.preventDefault();
+
+ function toggle_column(column) {
+ //ZS: Toggle column visibility
+ column.visible( ! column.visible() );
+ if (column.visible()){
+ $(this).removeClass("active");
} else {
- return ""
+ $(this).addClass("active");
}
- }
- }{% endfor %}{% endif %}
- ],
- 'order': [[1, "asc"]],
- 'sDom': "Ztr",
- 'autoWidth': true,
- 'deferRender': true,
- 'paging': false,
- 'orderClasses': true,
- 'scrollY': "600px",
- 'scrollCollapse': false,
- 'processing': true,
- 'language': {
- 'loadingRecords': '&nbsp;',
- 'processing': 'Loading...'
- }
+ }
+
+ // Get the column API object
+ var target_cols = $(this).attr('data-column').split(",")
+ for (let i = 0; i < target_cols.length; i++){
+ console.log("THE COL:", target_cols[i])
+ var column = primary_table.column( target_cols[i] );
+ toggle_column(column);
+
+ {% if sample_groups|length != 1 %}
+ var column2 = other_table.column( target_cols[i] );
+ toggle_column(column2);
+ {% endif %}
+ }
} );
+ {% if sample_groups|length != 1 %}
$('#other_searchbox').on( 'keyup', function () {
other_table.search($(this).val()).draw();
} );
diff --git a/wqflask/wqflask/templates/show_trait_calculate_correlations.html b/wqflask/wqflask/templates/show_trait_calculate_correlations.html
index 297d62ce..50803978 100644
--- a/wqflask/wqflask/templates/show_trait_calculate_correlations.html
+++ b/wqflask/wqflask/templates/show_trait_calculate_correlations.html
@@ -1,7 +1,7 @@
-<div>
- <div class="col-xs-7">
- <div style="padding: 20px" class="form-horizontal">
-
+<div class="row correlation-main">
+ <div class="col-xs-3 correlation-options">
+ <div class="form-horizontal section-form-div">
+
<div class="form-group">
<label for="corr_type" class="col-xs-2 control-label">Method</label>
<div class="col-xs-3 controls">
@@ -12,37 +12,37 @@
</select>
</div>
</div>
-
+
<div class="form-group">
<label for="corr_dataset" class="col-xs-2 control-label">Database</label>
<div class="col-xs-10 controls">
<select name="corr_dataset" class="form-control">
{% for tissue in corr_tools.dataset_menu %}
{% if tissue.tissue %}
- <optgroup label="{{ tissue.tissue }} ------">
+ <optgroup label="{{ tissue.tissue }} ------">
{% endif %}
{% for dataset in tissue.datasets %}
- <option value="{{ dataset[1] }}"
- {% if corr_tools.dataset_menu_selected == dataset[1] %}
- selected
- {% endif %}>
- {{ dataset[0] }}
- </option>
+ <option data-type="{% if tissue.tissue %}mrna_assay{% elif dataset[1][-4:] == 'Geno' %}geno{% else %}pheno{% endif %}" value="{{ dataset[1] }}"
+ {% if corr_tools.dataset_menu_selected == dataset[1] %}
+ selected
+ {% endif %}>
+ {{ dataset[0] }}
+ </option>
{% endfor %}
{% if tissue.tissue %}
- </optgroup>
+ </optgroup>
{% endif %}
{% endfor %}
</select>
</div>
</div>
-
+
<div class="form-group">
- <label for="corr_return_results" class="col-xs-2 control-label">Return</label>
- <div class="col-xs-3 controls">
+ <label for="corr_return_results" class="col-xs-2 control-label">Limit to</label>
+ <div class="col-xs-4 controls">
<select name="corr_return_results" class="form-control">
{% for return_result in corr_tools.return_results_menu %}
- <option value="{{ return_result }}"
+ <option value="{{ return_result }}"
{% if corr_tools.return_results_menu_selected == return_result %}
selected
{% endif %}>
@@ -52,10 +52,10 @@
</select>
</div>
</div>
-
+
<div class="form-group">
<label for="corr_samples_group" class="col-xs-2 control-label">Samples</label>
- <div class="col-xs-3 controls">
+ <div class="col-xs-4 controls">
<select name="corr_samples_group" class="form-control">
{% for group, pretty_group in sample_group_types.items() %}
<option value="{{ group }}">{{ pretty_group }}</option>
@@ -63,10 +63,10 @@
</select>
</div>
</div>
-
+
<div id="corr_sample_method" class="form-group">
<label for="corr_sample_method" class="col-xs-2 control-label">Type</label>
- <div class="col-xs-3 controls">
+ <div class="col-xs-4 controls">
<select name="corr_sample_method" class="form-control">
<option value="pearson">Pearson</option>
<option value="spearman">Spearman Rank</option>
@@ -74,78 +74,84 @@
</select>
</div>
</div>
- {% if dataset.type != "Publish" %}
- <div class="form-group">
+ <div id="min_expr_filter" class="form-group" style="display: {% if dataset.type != 'Geno' %}block{% else %}none{% endif %};">
<label class="col-xs-2 control-label">Min Expr</label>
- <div class="col-xs-3 controls">
- <input name="min_expr" value="" type="text" class="form-control" style="width: 50px;">
+ <div class="col-xs-4 controls">
+ <input name="min_expr" value="" type="text" class="form-control min-expr-field">
</div>
</div>
<div class="form-group">
- <label class="col-xs-2 control-label">Location</label>
- <div class="col-xs-5 controls">
- <span>
- Chr: <input name="loc_chr" value="" type="text" class="form-control" style="width: 50px; display: inline;">&nbsp;&nbsp;&nbsp;
- Mb: <input name="min_loc_mb" value="" type="text" class="form-control" style="width: 50px; display: inline;"> &nbsp;to&nbsp; <input name="max_loc_mb" value="" type="text" class="form-control" style="width: 50px; display: inline;">
- </span>
- <br>
- </div>
- </div>
- {% endif %}
- <div class="form-group">
- <label class="col-xs-2 control-label">Range</label>
- <div class="col-xs-5 controls">
- <input name="p_range_lower" value="" type="hidden">
- <input name="p_range_upper" value="" type="hidden">
- <span style="display: inline;">
- <div id="p_range_slider" style="width: 200px;"></div>
- <span style="font: 400 12px Arial; color: #888; display: inline; margin: 25px 0; width: 20px;" id="p_range_lower"></span>
- <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
- <span style="font: 400 12px Arial; color: #888; display: inline; margin: 15px 0; width: 20px;" id="p_range_upper"></span>
- </span>
- </div>
- </div>
-
- <div class="form-group">
- <label for="corr_sample_method" class="col-xs-2 control-label"></label>
- <div class="col-xs-3 controls">
- <button class="btn corr_compute submit_special btn-success" data-url="/corr_compute" title="Compute Correlation">
- <i class="icon-ok-circle icon-white"></i> Compute
- </button>
+ <label for="location_type" class="col-xs-2 control-label">Location Type</label>
+ <div class="col-xs-4 controls">
+ <select name="location_type" class="form-control">
+ <option value="gene" {% if dataset.type == 'Publish' %}disabled{% endif %}>Gene</option>
+ <option value="highest_lod">Highest LOD</option>
+ </select>
</div>
</div>
+ <div id="location_filter" class="form-group">
+ <label class="col-xs-2 control-label">Location</label>
+ <div class="col-xs-6 controls">
+ <span>
+ Chr: <input name="loc_chr" value="" type="text" class="form-control corr-location">&nbsp;&nbsp;&nbsp;
+ Mb: <input name="min_loc_mb" value="" type="text" class="form-control corr-location"> &nbsp;to&nbsp; <input name="max_loc_mb" value="" type="text" class="form-control corr-location">
+ </span>
+ <br>
+ </div>
+ </div>
+ <div class="form-group">
+ <label class="col-xs-2 control-label">Range</label>
+ <div class="col-xs-5 controls">
+ <input name="p_range_lower" value="" type="hidden">
+ <input name="p_range_upper" value="" type="hidden">
+ <span class="inline-div">
+ <div id="p_range_slider" class="p-range-slider"></div>
+ <span id="p_range_lower" class="p-range-lower"></span>
+ <span id="p_range_upper" class="p-range-upper"></span>
+ </span>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="corr_sample_method" class="col-xs-2 control-label"></label>
+ <div class="col-xs-3 controls">
+ <input type="button" class="btn corr_compute submit_special btn-success" data-url="/corr_compute" title="Compute Correlation" value="Compute">
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="col-xs-4">
+ <div class="section-form-div">
+ <span id="sample_r_desc" class="correlation_desc">
+ The <a href="http://genenetwork.org/correlationAnnotation.html#genetic_r">Sample Correlation</a>
+ is computed
+ between trait data and any
+ other traits in the sample database selected above. Use
+ <a href="{{ url_for('glossary_blueprint.glossary') }}#Correlations">Spearman
+ Rank</a>
+ when the sample size is small (&lt;20) or when there are influential outliers.
+ </span>
+ <span id="lit_r_desc" style="display: none;" class="correlation_desc">
+ The <a href="http://genenetwork.org/correlationAnnotation.html#literatureCorr">Literature Correlation</a>
+ (Lit r) between
+ this gene and all other genes is computed<br>
+ using the <span class="broken_link" href="https://grits.eecs.utk.edu/sgo/sgo.html">
+ Semantic Gene Organizer</span>
+ and human, rat, and mouse data from PubMed.
+ Values are ranked by Lit r, but Sample r and Tissue r are also displayed.<br>
+ <a href="http://genenetwork.org/glossary.html#Literature">More on using Lit r</a>
+ </span>
+ <span id="tissue_r_desc" style="display: none;" class="correlation_desc">
+ The <a href="http://genenetwork.org/webqtl/main.py?FormID=tissueCorrelation">Tissue Correlation</a>
+ (Tissue r)
+ estimates the similarity of expression of two genes
+ or transcripts across different cells, tissues, or organs
+ (<a href="http://genenetwork.org/correlationAnnotation.html#tissueCorr">glossary</a>).
+ Tissue correlations
+ are generated by analyzing expression in multiple samples usually taken from single cases.<br>
+ <strong>Pearson</strong> and <strong>Spearman Rank</strong> correlations have been
+ computed for all pairs of genes using data from mouse samples.<br>
+ </span>
+ </div>
</div>
- </div>
- <div class="col-xs-5">
- <span id="sample_r_desc" class="correlation_desc fs12">
- The <a href="http://genenetwork.org/correlationAnnotation.html#genetic_r">Sample Correlation</a>
- is computed
- between trait data and any
- other traits in the sample database selected above. Use
- <a href="http://www.genenetwork.org/glossary.html#Correlations">Spearman
- Rank</a>
- when the sample size is small (&lt;20) or when there are influential outliers.
- </span>
- <span id="lit_r_desc" style="display: none;" class="correlation_desc fs12">
- The <a href="http://genenetwork.org/correlationAnnotation.html#literatureCorr">Literature Correlation</a>
- (Lit r) between
- this gene and all other genes is computed<br>
- using the <a href="https://grits.eecs.utk.edu/sgo/sgo.html">
- Semantic Gene Organizer</a>
- and human, rat, and mouse data from PubMed.
- Values are ranked by Lit r, but Sample r and Tissue r are also displayed.<br>
- <a href="http://genenetwork.org/glossary.html#Literature">More on using Lit r</a>
- </span>
- <span id="tissue_r_desc" style="display: none;" class="correlation_desc fs12">
- The <a href="http://genenetwork.org/webqtl/main.py?FormID=tissueCorrelation">Tissue Correlation</a>
- (Tissue r)
- estimates the similarity of expression of two genes
- or transcripts across different cells, tissues, or organs
- (<a href="http://genenetwork.org/correlationAnnotation.html#tissueCorr">glossary</a>).
- Tissue correlations
- are generated by analyzing expression in multiple samples usually taken from single cases.<br>
- <strong>Pearson</strong> and <strong>Spearman Rank</strong> correlations have been
- computed for all pairs of genes using data from mouse samples.<br>
- </span>
- </div>
-</div> \ No newline at end of file
+ </div> \ No newline at end of file
diff --git a/wqflask/wqflask/templates/show_trait_details.html b/wqflask/wqflask/templates/show_trait_details.html
index 878b6ced..d2999eef 100644
--- a/wqflask/wqflask/templates/show_trait_details.html
+++ b/wqflask/wqflask/templates/show_trait_details.html
@@ -1,20 +1,20 @@
<table class="table">
<tr>
- <td width="150px"><b>Group</b></td>
+ <td><b>Group</b></td>
<td>{{ this_trait.dataset.group.species[0]|upper }}{{ this_trait.dataset.group.species[1:] }}: {{ this_trait.dataset.group.name }} group</td>
</tr>
{% if this_trait.dataset.type == 'Publish' %}
<tr>
<td><b>Phenotype</b></td>
- <td><div style="width:40%;">{{ this_trait.description_fmt }}</div></td>
+ <td><div>{{ this_trait.description_fmt }}</div></td>
</tr>
<tr>
<td><b>Authors</b></td>
- <td><div style="width:40%;">{{ this_trait.authors }}</div></td>
+ <td><div>{{ this_trait.authors }}</div></td>
</tr>
<tr>
<td><b>Title</b></td>
- <td><div style="width:40%;">{{ this_trait.title }}</div></td>
+ <td><div>{{ this_trait.title }}</div></td>
</tr>
<tr>
<td><b>Journal</b></td>
@@ -213,41 +213,30 @@
{% endif %}
</table>
-<div style="margin-bottom:15px;" class="btn-toolbar">
+<div class="btn-toolbar">
<div class="btn-group">
- <a href="#redirect">
- <button type="button" id="add_to_collection" class="btn btn-primary" title="Add to collection">Add</button>
- </a>
+ <button type="button" id="add_to_collection" class="btn btn-success" title="Add to Collection">Add</button>
{% if this_trait.dataset.type == 'ProbeSet' or this_trait.dataset.type == 'Geno' %}
{% if this_trait.symbol != None %}
- <a target="_blank" href="http://gn1.genenetwork.org/webqtl/main.py?cmd=sch&amp;gene={{ this_trait.symbol }}&amp;alias=1&amp;species={{ dataset.group.species }}">
- <button type="button" class="btn btn-default" title="Find similar expression data">Find</button>
- </a>
+ <button type="button" class="btn btn-default" title="Find similar expression data" onclick="window.open('http://gn1.genenetwork.org/webqtl/main.py?cmd=sch&amp;gene={{ this_trait.symbol }}&amp;alias=1&amp;species={{ dataset.group.species }}', '_blank')">Find</button>
{% endif %}
{% if UCSC_BLAT_URL != "" %}
- <a target="_blank" href="{{ UCSC_BLAT_URL }}">
- <button type="button" class="btn btn-default" title="Check probe locations at UCSC">Verify</button>
- </a>
+ <button type="button" class="btn btn-default" title="Check probe locations at UCSC" onclick="window.open('{{ UCSC_BLAT_URL }}', '_blank')">Verify</button>
{% endif %}
{% if this_trait.symbol != None %}
- <a target="_blank" href="http://gn1.genenetwork.org/webqtl/main.py?FormID=geneWiki&symbol={{ this_trait.symbol }}">
- <button type="button" class="btn btn-default" title="Write or review comments about this gene">GeneWiki</button>
- </a>
+ <button type="button" class="btn btn-default" title="Write or review comments about this gene" onclick="window.open('http://gn1.genenetwork.org/webqtl/main.py?FormID=geneWiki&symbol={{ this_trait.symbol }}', '_blank')">GeneWiki</button>
{% if dataset.group.species == "mouse" or dataset.group.species == "rat" %}
- <a href="./snp_browser?first_run=true&species={{ dataset.group.species }}&gene_name={{ this_trait.symbol }}&limit_strains=on">
- <button type="button" class="btn btn-default" title="View SNPs and Indels">SNPs</button>
- </a>
+ <button type="button" class="btn btn-default" title="View SNPs and Indels" onclick="window.open('/snp_browser?first_run=true&species={{ dataset.group.species }}&gene_name={{ this_trait.symbol }}&limit_strains=on', '_blank')">SNPs</button>
{% endif %}
{% endif %}
{% if show_probes == "True" %}
- <a target="_blank" href="http://gn1.genenetwork.org/webqtl/main.py?FormID=showProbeInfo&database={{ this_trait.dataset.name }}&ProbeSetID={{ this_trait.name }}&CellID={{ this_trait.cellid }}&RISet={{ dataset.group.name }}&incparentsf1=ON">
- <button type="button" class="btn btn-default" title="Check sequence of probes">Probes</button>
- </a>
+ <button type="button" class="btn btn-default" title="Check sequence of probes" onclick="window.open('http://gn1.genenetwork.org/webqtl/main.py?FormID=showProbeInfo&database={{ this_trait.dataset.name }}&ProbeSetID={{ this_trait.name }}&CellID={{ this_trait.cellid }}&RISet={{ dataset.group.name }}&incparentsf1=ON', '_blank')">Probes</button>
{% endif %}
{% endif %}
- <a target="_blank" href="http://gn1.genenetwork.org/webqtl/main.py?cmd=show&db={{ this_trait.dataset.name }}&probeset={{ this_trait.name }}">
- <button type="button" id="view_in_gn1" class="btn btn-primary" title="View Trait in GN1">View in GN1</button>
- </a>
+ <button type="button" id="view_in_gn1" class="btn btn-primary" title="View Trait in GN1" onclick="window.open('http://gn1.genenetwork.org/webqtl/main.py?cmd=show&db={{ this_trait.dataset.name }}&probeset={{ this_trait.name }}', '_blank')">Go to GN1</button>
+ {% if admin_status == "owner" or admin_status == "edit-admins" or admin_status == "edit-access" %}
+ <button type="button" id="edit_resource" class="btn btn-success" title="Edit Resource" onclick="window.open('./resources/manage?resource_id={{ resource_id }}', '_blank')">Edit</button>
+ {% endif %}
</div>
</div>
diff --git a/wqflask/wqflask/templates/show_trait_edit_data.html b/wqflask/wqflask/templates/show_trait_edit_data.html
index 05a2be73..0d34bebc 100644
--- a/wqflask/wqflask/templates/show_trait_edit_data.html
+++ b/wqflask/wqflask/templates/show_trait_edit_data.html
@@ -1,44 +1,71 @@
<div>
{% for sample_type in sample_groups %}
- <div style="padding-bottom: 10px;">
- <div style="display: inline; height: 40px;">
- <input type="text" id="{{ sample_type.sample_group_type }}_searchbox" class="form-control" style="width: 200px; display: inline; float: left; vertical-align: top;" placeholder="Search This Table For ...">
+ <div class="sample-table-container">
+ {% if loop.index == 1 and (sample_groups[0].se_exists or has_num_cases or sample_groups[0].attributes|length > 0) %}
+ <b>Show/Hide Columns:</b>
+ <br>
+ {% if sample_groups[0].se_exists %}
+ <button class="toggle-vis" data-column="4,5">SE</button>
+ {% if has_num_cases %}
+ <button class="toggle-vis" data-column="6">N</button>
+ {% set attr_start_pos = 7 %}
+ {% else %}
+ {% set attr_start_pos = 6 %}
+ {% endif %}
+ {% else %}
+ {% if has_num_cases %}
+ <button class="toggle-vis" data-column="4">N</button>
+ {% set attr_start_pos = 5 %}
+ {% else %}
+ {% set attr_start_pos = 4 %}
+ {% endif %}
+ {% endif %}
+ {% if sample_groups[0].attributes %}
+ {% for attribute in sample_groups[0].attributes %}
+ <button class="toggle-vis" data-column="{{ loop.index + attr_start_pos - 1 }}">{{ sample_groups[0].attributes[attribute].name }}</button>
+ {% endfor %}
+ {% endif %}
+ <br>
+ <br>
+ {% endif %}
+ <div class="sample-table-search-container">
+ <input type="text" id="{{ sample_type.sample_group_type }}_searchbox" class="form-control sample-table-search" placeholder="Search This Table For ...">
</div>
- <div style="padding-left: 10px; display: inline;">
- <input type="button" class="btn btn-default export" value="Export">
+ <div class="sample-table-export-container">
+ <button class="btn btn-default export">Export <span class="glyphicon glyphicon-download-alt"></span></button>
<select class="select optional span2 export_format">
<option value="excel">Excel</option>
<option value="csv">CSV</option>
</select>
<input type="button" class="btn btn-success reset" value="Reset">
</div>
- </div>
- <div id="export_code" style="width: 600px; display: none;">
- <pre style="padding-top: 0px; padding-bottom: 0px; height: 150px;">
- <code>
-# read into R
-trait <- read.csv("{{ this_trait.display_name}}.csv", header = TRUE, comment.char = "#")
+ <div id="export_code" class="export-code-container">
+ <pre class="export-code_field">
+ <code>
+ # read into R
+ trait <- read.csv("{{ this_trait.display_name}}.csv", header = TRUE, comment.char = "#")
-# read into python
-import pandas as pd
-trait = pd.read_csv("{{ this_trait.display_name}}.csv", header = 0, comment = "#")
- </code>
- </pre>
+ # read into python
+ import pandas as pd
+ trait = pd.read_csv("{{ this_trait.display_name}}.csv", header = 0, comment = "#")
+ </code>
+ </pre>
+ </div>
</div>
- {% set outer_loop = loop %}
- <div class="sample_group" style="width:{{ trait_table_width }};">
- <div style="position: relative;">
- <div style="display: inline;"><h3 style="float: left;">{{ sample_type.header }}<span name="transform_text"></span></h3>
- </div>
- <div id="table_container">
- <table class="table-hover table-striped cell-border" id="samples_{{ sample_type.sample_group_type }}" style="float: left; width:100%;">
- <tbody>
- <td colspan="100%" align="center"><br><b><font size="15">Loading...</font></b><br></td>
- </tbody>
- </table>
- </div>
+ {% set outer_loop = loop %}
+ <div class="sample_group" style="width:{{ trait_table_width }};">
+ <div style="position: relative;">
+ <div class="inline-div"><h3 style="float: left;">{{ sample_type.header }}<span name="transform_text"></span></h3></div>
</div>
- <br>
+ <div id="table_container">
+ <table class="table-hover table-striped cell-border sample-table" id="samples_{{ sample_type.sample_group_type }}">
+ <tbody>
+ <td colspan="100%" align="center"><br><b><font size="15">Loading...</font></b><br></td>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <br>
{% endfor %}
<input type="hidden" name="Default_Name">
</div>
diff --git a/wqflask/wqflask/templates/show_trait_mapping_tools.html b/wqflask/wqflask/templates/show_trait_mapping_tools.html
index a2416ced..c3575454 100755
--- a/wqflask/wqflask/templates/show_trait_mapping_tools.html
+++ b/wqflask/wqflask/templates/show_trait_mapping_tools.html
@@ -1,38 +1,35 @@
-<div>
+<div class="row mapping-main">
{% if dataset.group.mapping_names|length > 0 %}
- <div class="col-xs-3" style="min-width: 400px;">
+ <div class="col-xs-2 mapping-options">
<div class="tabbable"> <!-- Only required for left/right tabs -->
<ul class="nav nav-pills">
{% for mapping_method in dataset.group.mapping_names %}
{% if mapping_method == "GEMMA" %}
- <li class="gemma_tab mapping_tab {% if dataset.group.mapping_id == '1' or dataset.group.mapping_id == '2' %}active{% endif %}">
+ <li class="gemma-tab mapping-tab {% if dataset.group.mapping_id == '1' or dataset.group.mapping_id == '2' %}active{% endif %}">
<a href="#gemma" data-toggle="tab">GEMMA</a>
</li>
{% elif mapping_method == "R/qtl" %}
- <li class="rqtl_geno_tab mapping_tab {% if dataset.group.mapping_id == '3' %}active{% endif %}">
+ <li class="rqtl-geno-tab mapping-tab {% if dataset.group.mapping_id == '3' %}active{% endif %}">
<a href="#rqtl_geno" data-toggle="tab">R/qtl</a>
</li>
{% elif mapping_method == "QTLReaper" %}
- <li class="reaper_tab mapping_tab">
+ <li class="reaper-tab mapping-tab">
<a href="#interval_mapping" data-toggle="tab">Haley-Knott Regression</a>
</li>
{% endif %}
{% endfor %}
- <!--<li>
- <a href="#pair_scan" data-toggle="tab">Pair Scan</a>
- </li>-->
</ul>
<div class="tab-content">
{% for mapping_method in dataset.group.mapping_names %}
{% if mapping_method == "GEMMA" %}
<div class="tab-pane {% if dataset.group.mapping_id == '1' or dataset.group.mapping_id == '2' %}active{% endif %}" id="gemma">
- <div style="padding-top: 20px;" class="form-horizontal">
+ <div class="form-horizontal section-form-div">
<div class="mapping_method_fields form-group">
- <label for="chr_select" style="text-align: right;" class="col-xs-3 control-label">Chromosome</label>
- <div style="margin-left:20px;" class="col-xs-2 controls">
- <select id="chr_gemma" class="form-control" style="width: 80px;">
+ <label for="chr_select" class="col-xs-3 control-label">Chromosome</label>
+ <div class="col-xs-2 controls">
+ <select id="chr_gemma" class="form-control chr-select">
{% for item in chr_list %}
<option value="{{ item[1] }}">{{ item[0] }}</option>
{% endfor %}
@@ -41,8 +38,8 @@
</div>
{% if genofiles and genofiles|length>0 %}
<div class="mapping_method_fields form-group">
- <label for="genofiles" style="text-align: right;" class="col-xs-3 control-label">Genotypes</label>
- <div style="margin-left:20px;" class="col-xs-4 controls">
+ <label for="genofiles" class="col-xs-3 control-label">Genotypes</label>
+ <div class="col-xs-8 controls">
<select id="genofile_gemma" class="form-control">
{% for item in genofiles %}
<option value="{{item['location']}}:{{item['title']}}">{{item['title']}}</option>
@@ -52,14 +49,14 @@
</div>
{% endif %}
<div class="mapping_method_fields form-group">
- <label for="maf_gemma" style="text-align: right;" class="col-xs-3 control-label">MAF >=</label>
- <div style="margin-left:20px;" class="col-xs-4 controls">
- <input name="maf_gemma" value="{{ maf }}" type="text" class="form-control" style="width: 80px;">
+ <label for="maf_gemma" class="col-xs-3 control-label">MAF >=</label>
+ <div class="col-xs-4 controls">
+ <input name="maf_gemma" value="{{ maf }}" type="text" class="form-control maf-select">
</div>
</div>
<div class="mapping_method_fields form-group">
- <label style="text-align: right;" class="col-xs-3 control-label">Use LOCO</label>
- <div style="margin-left:20px;" class="col-xs-6 controls">
+ <label class="col-xs-3 control-label">Use LOCO</label>
+ <div class="col-xs-6 controls">
<label class="radio-inline">
<input type="radio" name="use_loco" value="True" checked="">
Yes
@@ -71,48 +68,43 @@
</div>
</div>
<div class="mapping_method_fields form-group">
- <div class="col-xs-3" style="text-align: right;">
- <label class="control-label">Covariates</label>
- <font size="2">Select covariate(s) from a collection</font>
- </div>
- <div style="margin-left:20px;" class="col-xs-7">
+ <label class="col-xs-3 control-label">Covariates<br><span class="covar-text">Select covariate(s) from a collection</span></label>
+ <div class="col-xs-8 covar-options">
{% if g.user_session.num_collections < 1 %}
No collections available. Please add traits to a collection to use them as covariates.
{% else %}
- <div style="margin-bottom: 10px;">
- <button type="button" id="select_covariates" class="btn btn-default" style="width: 80px; padding-right: 10px;">Select</button>
- <button type="button" id="remove_covariates" class="btn btn-default" style="width: 80px;">Remove</button>
+ <div class="select-covar-div">
+ <button type="button" class="btn btn-default select-covar-button select_covariates">Select</button>
+ <button type="button" class="btn btn-default select-covar-button remove_covariates">Remove</button>
</div>
- <textarea rows="3" cols="50" readonly placeholder="No covariates selected" style="overflow-y: scroll; resize: none; width: 200px;" class="selected_covariates"></textarea>
+ <textarea rows="3" cols="50" readonly placeholder="No covariates selected" class="selected-covariates"></textarea>
{% endif %}
</div>
</div>
<div class="mapping_method_fields form-group">
<label class="col-xs-3 control-label"></label>
- <div style="margin-left:20px;" class="col-xs-6">
- <button id="gemma_compute" class="btn submit_special btn-success" data-url="/marker_regression" title="Compute Marker Regression">
- Compute
- </button>
+ <div class="col-xs-6">
+ <button id="gemma_compute" class="btn submit_special btn-success" data-url="/marker_regression" title="Compute Marker Regression" value="Compute">Compute</button>
</div>
</div>
</div>
</div>
{% elif mapping_method == "QTLReaper" %}
<div class="tab-pane" id="interval_mapping">
- <div style="margin-top: 20px" class="form-horizontal">
+ <div class="form-horizontal section-form-div">
<div class="mapping_method_fields form-group">
- <label for="reaper_version" style="text-align: right;" class="col-xs-3 control-label">Version<sup><a title="'New' is the new qtlreaper implementation written in RUST by Christian Fischer. 'Original' corresponds to the original version written in C.">?</a></sup></label>
- <div style="margin-left:20px;" class="col-xs-3 controls">
- <select name="reaper_version" class="form-control" style="width: 80px;">
+ <label for="reaper_version" class="col-xs-3 control-label">Version<sup><a href="https://github.com/chfi/rust-qtlreaper" target="_blank" title="'New' is the new qtlreaper implementation written in RUST by Christian Fischer. 'Original' corresponds to the original version written in C.">?</a></sup></label>
+ <div class="col-xs-3 controls">
+ <select name="reaper_version" class="form-control reaper-ver-select">
<option value="new">New</option>
<option value="original">Original</option>
</select>
</div>
</div>
<div class="mapping_method_fields form-group">
- <label for="chr_select" style="text-align: right;" class="col-xs-3 control-label">Chromosome</label>
- <div style="margin-left:20px;" class="col-xs-2 controls">
- <select id="chr_reaper" class="form-control" style="width: 80px;">
+ <label for="chr_select" class="col-xs-3 control-label">Chromosome</label>
+ <div class="col-xs-2 controls">
+ <select id="chr_reaper" class="form-control chr-select">
{% for item in chr_list %}
<option value="{{ item[1] }}">{{ item[0] }}</option>
{% endfor %}
@@ -121,9 +113,9 @@
</div>
{% if genofiles and genofiles|length>0 %}
<div class="mapping_method_fields form-group">
- <label for="scale_select" style="text-align: right;" class="col-xs-3 control-label">Map Scale</label>
- <div style="margin-left:20px;" class="col-xs-2 controls">
- <select id="scale_reaper" class="form-control" style="width: 80px;">
+ <label for="scale_select" class="col-xs-3 control-label">Map Scale</label>
+ <div class="col-xs-2 controls">
+ <select id="scale_reaper" class="form-control scale-select">
{% for item in scales_in_geno[genofiles[0]['location']] %}
<option value="{{ item[0] }}">{{ item[1] }}</option>
{% endfor %}
@@ -131,8 +123,8 @@
</div>
</div>
<div class="mapping_method_fields form-group">
- <label style="text-align: right;" for="genofiles" class="col-xs-3 control-label">Genotypes</label>
- <div style="margin-left:20px;" class="col-xs-4 controls">
+ <label for="genofiles" class="col-xs-3 control-label">Genotypes</label>
+ <div class="col-xs-4 controls">
<select id="genofile_reaper" class="form-control">
{% for item in genofiles %}
<option value="{{item['location']}}:{{item['title']}}">{{item['title']}}</option>
@@ -140,95 +132,73 @@
</select>
</div>
</div>
- {% endif %}
- <div class="mapping_method_fields form-group">
- <label style="text-align: right;" for="mapping_permutations" class="col-xs-3 control-label">Permutations</label>
- <div style="margin-left:20px;" class="col-xs-4 controls">
- <input name="num_perm_reaper" value="2000" type="text" class="form-control">
- </div>
- </div>
+ {% else %}
<div class="mapping_method_fields form-group">
- <label style="text-align: right;" for="mapping_bootstraps" class="col-xs-3 control-label">Bootstraps</label>
- <div style="margin-left:20px;" class="col-xs-4 controls">
- <input name="num_bootstrap" value="2000" type="text" class="form-control">
+ <label for="scale_select" class="col-xs-3 control-label">Map Scale</label>
+ <div class="col-xs-2 controls">
+ <select id="scale_reaper" class="form-control scale-select">
+ {% for item in scales_in_geno[dataset.group.name + ".geno"] %}
+ <option value="{{ item[0] }}">{{ item[1] }}</option>
+ {% endfor %}
+ </select>
</div>
</div>
+ {% endif %}
<div class="mapping_method_fields form-group">
- <label style="text-align: right;" for="control_for" class="col-xs-3 control-label">Control&nbsp;for<br>Cofactors</label>
- <div style="margin-left:20px;" class="col-xs-6 controls">
- {% if dataset.type == 'ProbeSet' and this_trait.locus_chr != "" %}
- <input name="control_reaper" value="{{ nearest_marker }}" type="text" style="width: 160px; display: inline-block;" class="form-control" />
- {% else %}
- <input name="control_reaper" value="" type="text" style="display: inline-block; padding-right: 10px;" class="form-control" />
- {% endif %}
- <input type="radio" name="do_control_reaper" value="true"> Yes&nbsp;&nbsp;<input type="radio" name="do_control_reaper" value="false" checked="" style="margin-left: 10px;"> No</span>
- <!--
- <label class="radio-inline">
- <input type="radio" name="do_control_reaper" value="true">
- Yes
- </label>
- <label class="radio-inline">
- <input type="radio" name="do_control_reaper" value="false" checked="">
- No
- </label>
- -->
+ <label for="mapping_permutations" class="col-xs-3 control-label">Permutations</label>
+ <div class="col-xs-4 controls">
+ <input name="num_perm_reaper" value="2000" type="text" class="form-control">
</div>
</div>
-
-<!--
<div class="mapping_method_fields form-group">
- <label for="mapping_bootstraps" class="col-xs-3 control-label" title="Bootstrapping Resamples">Bootstrap Test (n=2000)</label>
+ <label for="mapping_bootstraps" class="col-xs-3 control-label">Bootstraps</label>
<div class="col-xs-4 controls">
- <label>
- <input type="checkbox" name="bootCheck" id="bootCheck"> Bootstrap Test (n=2000)
- </label>
+ <input name="num_bootstrap" value="2000" type="text" class="form-control">
</div>
</div>
-
<div class="mapping_method_fields form-group">
- <label style="text-align:left;" class="col-xs-12 control-label">Display Additive Effect</label>
- <div class="col-xs-12 controls" id="display_additive_effect">
+ <label for="control_for" class="col-xs-3 control-label">Control&nbsp;for<br>Cofactors</label>
+ <div class="col-xs-6 controls">
+ <input name="control_reaper" value="{% if dataset.type == 'ProbeSet' and this_trait.locus_chr != '' %}{{ nearest_marker }}{% endif %}" type="text" class="form-control cofactor-input" />
+ <br>
<label class="radio-inline">
- <input type="radio" name="display_additive" id="display_additive" value="yes" checked="">
- Yes
+ <input type="radio" name="do_control_reaper" value="true">
+ Yes
</label>
<label class="radio-inline">
- <input type="radio" name="display_additive" id="display_additive" value="no">
- No
+ <input type="radio" name="do_control_reaper" value="false" checked="">
+ No
</label>
</div>
</div>
--->
<div class="mapping_method_fields form-group">
- <label style="text-align: right;" class="col-xs-3 control-label">Interval Map</label>
- <div style="margin-left:20px;" class="col-xs-6 controls">
+ <label class="col-xs-3 control-label">Interval Map</label>
+ <div class="col-xs-6 controls">
<label class="radio-inline">
- <input type="radio" name="manhattan_plot_reaper" value="False" checked="">
+ <input type="radio" name="manhattan_plot_reaper" value="false" checked="">
Yes
</label>
<label class="radio-inline">
- <input type="radio" name="manhattan_plot_reaper" value="True">
+ <input type="radio" name="manhattan_plot_reaper" value="true">
No
</label>
</div>
</div>
<div class="mapping_method_fields form-group">
<label class="col-xs-3 control-label"></label>
- <div style="margin-left:20px;" class="col-xs-6">
- <button id="interval_mapping_compute" class="btn submit_special btn-success" data-url="/marker_regression" title="Compute Interval Mapping">
- Compute
- </button>
+ <div class="col-xs-6">
+ <button id="interval_mapping_compute" class="btn submit_special btn-success" data-url="/marker_regression" title="Compute Interval Mapping" value="Compute">Compute</button>
</div>
</div>
</div>
</div>
{% elif mapping_method == "R/qtl" %}
<div class="tab-pane {% if dataset.group.mapping_id == '3' %}active{% endif %}" id="rqtl_geno">
- <div style="margin-top: 20px" class="form-horizontal">
+ <div class="form-horizontal section-form-div">
<div class="mapping_method_fields form-group">
- <label for="chr_select" style="text-align: right;" class="col-xs-3 control-label">Chromosome</label>
- <div style="margin-left:20px;" class="col-xs-2 controls">
- <select id="chr_rqtl_geno" class="form-control" style="width: 80px;">
+ <label for="chr_select" class="col-xs-3 control-label">Chromosome</label>
+ <div class="col-xs-2 controls">
+ <select id="chr_rqtl_geno" class="form-control chr-select">
{% for item in chr_list %}
<option value="{{ item[1] }}">{{ item[0] }}</option>
{% endfor %}
@@ -237,9 +207,9 @@
</div>
{% if genofiles and genofiles|length > 0 %}
<div class="mapping_method_fields form-group">
- <label for="scale_select" style="text-align: right;" class="col-xs-3 control-label">Map Scale</label>
- <div style="margin-left:20px;" class="col-xs-2 controls">
- <select id="scale_rqtl_geno" class="form-control" style="width: 80px;">
+ <label for="scale_select" class="col-xs-3 control-label">Map Scale</label>
+ <div class="col-xs-2 controls">
+ <select id="scale_rqtl_geno" class="form-control scale-select">
{% for item in scales_in_geno[genofiles[0]['location']] %}
<option value="{{ item[0] }}">{{ item[1] }}</option>
{% endfor %}
@@ -247,8 +217,8 @@
</div>
</div>
<div class="mapping_method_fields form-group">
- <label style="text-align:right;" for="genofiles" class="col-xs-3 control-label">Genotypes</label>
- <div style="margin-left:20px;" class="col-xs-4 controls">
+ <label for="genofiles" class="col-xs-3 control-label">Genotypes</label>
+ <div class="col-xs-4 controls">
<select id="genofile_rqtl_geno" class="form-control">
{% for item in genofiles %}
<option value="{{item['location']}}:{{item['title']}}">{{item['title']}}</option>
@@ -258,15 +228,15 @@
</div>
{% endif %}
<div class="mapping_method_fields form-group">
- <label style="text-align:right;" for="mapping_permutations" class="col-xs-3 control-label">Permutations</label>
- <div style="margin-left:20px;" class="col-xs-4 controls">
+ <label for="mapping_permutations" class="col-xs-3 control-label">Permutations</label>
+ <div class="col-xs-4 controls">
<input name="num_perm_rqtl_geno" value="200" type="text" class="form-control">
</div>
</div>
{% if sample_groups[0].attributes|length > 0 %}
<div class="mapping_method_fields form-group">
- <label style="text-align:right;" class="col-xs-3 control-label">Stratified</label>
- <div style="margin-left:20px;" class="col-xs-6 controls">
+ <label class="col-xs-3 control-label">Stratified</label>
+ <div class="col-xs-6 controls">
<label class="radio-inline">
<input type="radio" name="perm_strata" value="True" checked="">
Yes
@@ -279,27 +249,23 @@
</div>
{% endif %}
<div class="mapping_method_fields form-group">
- <label style="text-align:right;" for="control_for" class="col-xs-3 control-label">Control&nbsp;for</label>
- <div style="margin-left:20px;" class="col-xs-6 controls">
- {% if dataset.type == 'ProbeSet' and this_trait.locus_chr != "" %}
- <input name="control_rqtl_geno" value="{{ nearest_marker }}" type="text" style="width: 160px;" class="form-control" />
- {% else %}
- <input name="control_rqtl_geno" value="" type="text" class="form-control" />
- {% endif %}
- <label class="radio-inline">
- <input type="radio" name="do_control_rqtl" value="true">
- Yes
- </label>
- <label class="radio-inline">
- <input type="radio" name="do_control_rqtl" value="false" checked="">
- No
- </label>
+ <label for="control_for" class="col-xs-3 control-label">Control&nbsp;for</label>
+ <div class="col-xs-6 controls">
+ <input name="control_rqtl_geno" value="{% if dataset.type == 'ProbeSet' and this_trait.locus_chr != '' %}{{ nearest_marker }}{% endif %}" type="text" class="form-control cofactor-input" />
+ <label class="radio-inline">
+ <input type="radio" name="do_control_rqtl" value="true">
+ Yes
+ </label>
+ <label class="radio-inline">
+ <input type="radio" name="do_control_rqtl" value="false" checked="">
+ No
+ </label>
</div>
</div>
<div class="mapping_method_fields form-group">
- <label style="text-align:right;" for="mapmodel_rqtl_geno" class="col-xs-3 control-label">Model</label>
- <div style="margin-left:20px;" class="col-xs-4 controls">
+ <label for="mapmodel_rqtl_geno" class="col-xs-3 control-label">Model</label>
+ <div class="col-xs-4 controls">
<select id="mapmodel_rqtl_geno" name="mapmodel_rqtl_geno" class="form-control">
<option value="normal">Normal</option>
{% if binary == "true" %}<option value="binary">Binary</option>{% endif %}
@@ -310,8 +276,8 @@
</div>
<div class="mapping_method_fields form-group">
- <label style="text-align:right;" for="mapmethod_rqtl_geno" class="col-xs-3 control-label">Method</label>
- <div style="margin-left:20px;" class="col-xs-6 controls">
+ <label for="mapmethod_rqtl_geno" class="col-xs-3 control-label">Method</label>
+ <div class="col-xs-6 controls">
<select id="mapmethod_rqtl_geno" name="mapmethod_rqtl_geno" class="form-control">
<option value="hk" selected>Haley-Knott</option>
<option value="ehk">Extended Haley-Knott</option>
@@ -322,8 +288,8 @@
</div>
</div>
<div id="missing_geno_div" class="mapping_method_fields form-group" style="display: none;">
- <label style="text-align:right;" for="missing_genotypes" class="col-xs-3 control-label"></label>
- <div style="margin-left:20px;" class="col-xs-6 controls">
+ <label for="missing_genotypes" class="col-xs-3 control-label"></label>
+ <div class="col-xs-6 controls">
<select id="missing_genotype" name="missing_genotypes" class="form-control">
<option value="mr">Remove Samples w/o Genotypes</option>
<option value="mr-imp">Single Imputation</option>
@@ -331,25 +297,9 @@
</select>
</div>
</div>
-
- <!--
- <div class="mapping_method_fields form-group">
- <label style="text-align:left;" class="col-xs-12 control-label">Pair Scan</label>
- <div class="col-xs-12 controls">
- <label class="radio-inline">
- <input type="radio" name="pair_scan" value="true">
- Yes
- </label>
- <label class="radio-inline">
- <input type="radio" name="pair_scan" value="false" checked="">
- No
- </label>
- </div>
- </div>
- -->
<div class="mapping_method_fields form-group">
- <label style="text-align:right;" class="col-xs-3 control-label">Manhattan<br>Plot</label>
- <div style="margin-left:20px;" class="col-xs-6 controls">
+ <label class="col-xs-3 control-label">Manhattan<br>Plot</label>
+ <div class="col-xs-6 controls">
<label class="radio-inline">
<input type="radio" name="manhattan_plot_rqtl" value="True">
Yes
@@ -361,28 +311,23 @@
</div>
</div>
<div class="mapping_method_fields form-group">
- <div class="col-xs-3" style="text-align: right;">
- <label class="control-label">Covariates</label>
- <font size="2">Select covariate(s) from a collection</font>
- </div>
- <div style="margin-left:20px;" class="col-xs-7">
- {% if g.user_session.num_collections < 1 %}
- No collections available. Please add traits to a collection to use them as covariates.
- {% else %}
- <div style="margin-bottom: 10px;">
- <button type="button" class="btn btn-default select_covariates" style="width: 80px; padding-right: 10px;">Select</button>
- <button type="button" class="btn btn-default remove_covariates" style="width: 80px;">Remove</button>
- </div>
- <textarea rows="3" cols="50" readonly placeholder="No covariates selected" style="overflow-y: scroll; resize: none; width: 200px;" class="selected_covariates"></textarea>
- {% endif %}
+ <label class="col-xs-3 control-label">Covariates<br><span class="covar-text">Select covariate(s) from a collection</span></label>
+ <div class="col-xs-8 covar-options">
+ {% if g.user_session.num_collections < 1 %}
+ No collections available. Please add traits to a collection to use them as covariates.
+ {% else %}
+ <div class="select-covar-div">
+ <button type="button" class="btn btn-default select-covar-button select_covariates">Select</button>
+ <button type="button" class="btn btn-default select-covar-button remove_covariates">Remove</button>
</div>
+ <textarea rows="3" cols="50" readonly placeholder="No covariates selected" class="selected-covariates"></textarea>
+ {% endif %}
+ </div>
</div>
<div class="mapping_method_fields form-group">
<label class="col-xs-3 control-label"></label>
- <div style="margin-left:20px;" class="col-xs-6">
- <button id="rqtl_geno_compute" class="btn submit_special btn-success" data-url="/marker_regression" title="Compute Interval Mapping">
- Compute
- </button>
+ <div class="col-xs-6 controls">
+ <button id="rqtl_geno_compute" class="btn submit_special btn-success" data-url="/marker_regression" title="Compute Marker Regression" value="Compute">Compute</button>
</div>
</div>
</div>
@@ -392,23 +337,25 @@
</div>
</div>
</div>
- <div class="col-xs-7">
- <dl style="width: 500px;">
- {% for mapping_method in dataset.group.mapping_names %}
- {% if mapping_method == "GEMMA" %}
- <dt style="padding-top: 20px;">GEMMA</dt>
- <dd>Maps traits with correction for kinship among samples using a linear mixed model method, and also allows users to fit multiple covariates such as sex, age, treatment, and genetic markers (<a href="https://www.ncbi.nlm.nih.gov/pubmed/24531419">PMID: 2453419</a>, and <a href="https://github.com/genetics-statistics/GEMMA"> GitHub code</a>). GEMMA incorporates the Leave One Chromosome Out (LOCO) method to ensure that the correction for kinship does not remove useful genetic variance near each marker. Markers can be filtered to include only those with minor allele frequencies (MAF) above a threshold. The default MAF is 0.05.</dd>
- {% elif mapping_method == "R/qtl" %}
- <dt style="margin-top: 20px;">R/qtl (version 1.44.9</dt>
- <dd>The original R/qtl mapping package that supports classic experimental crosses including 4-parent F2 intercrosses (e.g., NIA ITP UM-HET3). R/qtl is ideal for populations that do not have complex kinship or admixture (<a href="https://www.ncbi.nlm.nih.gov/pubmed/12724300">PMID: 12724300</a>). Both R/qtl as implemented here, and R/qtl2 (<a href="https://www.ncbi.nlm.nih.gov/pubmed/30591514">PMID: 30591514</a>) are available as <a href="https://kbroman.org/pages/software.html">R suites</a>.</dd>
- {% elif mapping_method == "QTLReaper" %}
- <dt style="margin-top: 20px;">Haley-Knott Regression</dt>
- <dd>Fast linear mapping method (<a href="https://www.ncbi.nlm.nih.gov/pubmed/16718932">PMID 16718932</a>) works well with F2 intercrosses and backcrosses, but that is not recommended for complex or admixed populations (e.g., GWAS or heterogeneous stock studies) or for advanced intercrosses, recombinant inbred families, or diallel crosses. Interactive plots in GeneNetwork have relied on the fast HK mapping for two decades and we still use this method for mapping omics data sets and computing genome-wide permutation threshold (<a href="https://github.com/pjotrp/QTLReaper">QTL Reaper code</a>).</dd>
- {% endif %}
- {% endfor %}
- </dl>
- <div class="rqtl_description" style="padding-top: 40px; display: none;">
- More information on R/qtl mapping models and methods can be found <a href="http://www.rqtl.org/tutorials/rqtltour.pdf">here</a>.
+ <div class="col-xs-6">
+ <div class="section-form-div">
+ <dl>
+ {% for mapping_method in dataset.group.mapping_names %}
+ {% if mapping_method == "GEMMA" %}
+ <dt>GEMMA</dt>
+ <dd>Maps traits with correction for kinship among samples using a linear mixed model method, and also allows users to fit multiple covariates such as sex, age, treatment, and genetic markers (<a href="https://www.ncbi.nlm.nih.gov/pubmed/24531419">PMID: 2453419</a>, and <a href="https://github.com/genetics-statistics/GEMMA"> GitHub code</a>). GEMMA incorporates the Leave One Chromosome Out (LOCO) method to ensure that the correction for kinship does not remove useful genetic variance near each marker. Markers can be filtered to include only those with minor allele frequencies (MAF) above a threshold. The default MAF is 0.05.</dd>
+ {% elif mapping_method == "R/qtl" %}
+ <dt class="map-method-text">R/qtl (version 1.44.9</dt>
+ <dd>The original R/qtl mapping package that supports classic experimental crosses including 4-parent F2 intercrosses (e.g., NIA ITP UM-HET3). R/qtl is ideal for populations that do not have complex kinship or admixture (<a href="https://www.ncbi.nlm.nih.gov/pubmed/12724300">PMID: 12724300</a>). Both R/qtl as implemented here, and R/qtl2 (<a href="https://www.ncbi.nlm.nih.gov/pubmed/30591514">PMID: 30591514</a>) are available as <span class="broken-link" href="https://kbroman.org/pages/software.html">R suites</span>.</dd>
+ {% elif mapping_method == "QTLReaper" %}
+ <dt class="map-method-text">Haley-Knott Regression</dt>
+ <dd>Fast linear mapping method (<a href="https://www.ncbi.nlm.nih.gov/pubmed/16718932">PMID 16718932</a>) works well with F2 intercrosses and backcrosses, but that is not recommended for complex or admixed populations (e.g., GWAS or heterogeneous stock studies) or for advanced intercrosses, recombinant inbred families, or diallel crosses. Interactive plots in GeneNetwork have relied on the fast HK mapping for two decades and we still use this method for mapping omics data sets and computing genome-wide permutation threshold (<a href="https://github.com/pjotrp/QTLReaper">QTL Reaper code</a>).</dd>
+ {% endif %}
+ {% endfor %}
+ </dl>
+ <div class="rqtl-description">
+ More information on R/qtl mapping models and methods can be found <a href="http://www.rqtl.org/tutorials/rqtltour.pdf">here</a>.
+ </div>
</div>
</div>
<div id="mapping_result_holder_wrapper" style="display:none;">
@@ -417,4 +364,4 @@
{% else %}
Mapping options are disabled for data not matched with genotypes.
{% endif %}
-</div>
+</div> \ No newline at end of file
diff --git a/wqflask/wqflask/templates/show_trait_statistics.html b/wqflask/wqflask/templates/show_trait_statistics.html
index 974081d3..865959b1 100644
--- a/wqflask/wqflask/templates/show_trait_statistics.html
+++ b/wqflask/wqflask/templates/show_trait_statistics.html
@@ -1,146 +1,121 @@
<div>
- <div class="tabbable"> <!-- Only required for left/right tabs -->
- <ul class="nav nav-pills">
- <li class="active">
- <a href="#stats_tab" data-toggle="tab">Basic Statistics</a>
- </li>
- <li>
- <a href="#histogram_tab" class="histogram_tab" data-toggle="tab">Histogram</a>
- </li>
- {% if num_values < 256 %}
- <li>
- <a href="#bar_chart_tab" class="bar_chart_tab" data-toggle="tab">Bar Chart</a>
- </li>
- {% endif %}
- <li>
- <a href="#probability_plot" class="prob_plot_tab" data-toggle="tab">Probability Plot</a>
- </li>
- <li>
- <a href="#box_plot_tab" class="box_plot_tab" data-toggle="tab">Box Plot</a>
- </li>
- <li>
- <a href="#violin_plot_tab" class="violin_plot_tab" data-toggle="tab">Violin Plot</a>
- </li>
- <li>
- <a href="#scatterplot_matrix" data-toggle="tab">Scatterplot Matrix</a>
- </li>
- </ul>
-
- <div class="tab-content">
- <div class="tab-pane active" id="stats_tab">
- <div style="padding: 20px;" class="form-horizontal">
- <table id="stats_table" style="width: {{ stats_table_width }}px; float: left;" class="table table-hover table-striped table-bordered"></table>
- </div>
- </div>
- <div class="tab-pane" id="histogram_tab">
- <div style="padding: 20px" class="form-horizontal">
- {% if sample_groups|length != 1 %}
- <select class="histogram_samples_group">
- {% for group, pretty_group in sample_group_types.items() %}
- <option value="{{ group }}">{{ pretty_group }}</option>
- {% endfor %}
- </select>
- <br><br>
- {% endif %}
- <div id="histogram_container">
- <div id="histogram" class="barchart"></div>
- </div>
- </div>
+ <div class="tabbable"> <!-- Only required for left/right tabs -->
+ <ul class="nav nav-pills">
+ <li class="active">
+ <a href="#stats_tab" data-toggle="tab">Basic Statistics</a>
+ </li>
+ <li>
+ <a href="#histogram_tab" class="histogram_tab" data-toggle="tab">Histogram</a>
+ </li>
+ {% if num_values < 256 %}
+ <li>
+ <a href="#bar_chart_tab" class="bar_chart_tab" data-toggle="tab">Bar Chart</a>
+ </li>
+ {% endif %}
+ <li>
+ <a href="#probability_plot" class="prob_plot_tab" data-toggle="tab">Probability Plot</a>
+ </li>
+ <li>
+ <a href="#box_plot_tab" class="box_plot_tab" data-toggle="tab">Box Plot</a>
+ </li>
+ <li>
+ <a href="#violin_plot_tab" class="violin_plot_tab" data-toggle="tab">Violin Plot</a>
+ </li>
+ </ul>
+ <div class="tab-content">
+ <div class="tab-pane active" id="stats_tab">
+ <div class="form-horizontal section-form-div">
+ <table id="stats_table" style="width: {{ stats_table_width }}px;" class="table table-hover table-striped table-bordered left-float"></table>
</div>
- {% if num_values < 256 %}
- <div class="tab-pane" id="bar_chart_tab">
- <div style="padding: 20px" class="form-horizontal">
- {% if sample_groups|length != 1 %}
- <select class="bar_chart_samples_group">
- {% for group, pretty_group in sample_group_types.items() %}
- <option value="{{ group }}">{{ pretty_group }}</option>
- {% endfor %}
- </select>
- {% endif %}
- {% if sample_groups[0].attributes %}
- <div class="input-append">
- <select id="color_attribute" size="1">
- <option value="None">None</option>
- {% for attribute in sample_groups[0].attributes %}
- <option value="{{ sample_groups[0].attributes[attribute].name.replace(' ', '_') }}">
- {{ sample_groups[0].attributes[attribute].name }}</option>
- {% endfor %}
- </select>
- </div>
- {% endif %}
- <div id="update_bar_chart" class="btn-group" style="margin-bottom: 5px;">
- <button type="button" class="btn btn-default sort_by_name" value="name">
- <i class="icon-resize-horizontal"></i> Sort By Name
- </button>
- <button type="button" class="btn btn-default sort_by_value" value="value">
- <i class="icon-signal"></i> Sort By Value
- </button>
- </div>
- <div class="btn-group">
- <button type="button" class="btn btn-default" id="color_by_trait">
- <i class="icon-tint"></i> Color by Trait
- </button>
- </div>
- <div id="bar_chart_container">
- <div id="bar_chart"></div>
- </div>
+ </div>
+ <div class="tab-pane" id="histogram_tab">
+ <div class="form-horizontal section-form-div">
+ {% if sample_groups|length != 1 %}
+ Select Group:
+ <select class="histogram_samples_group">
+ {% for group, pretty_group in sample_group_types.items() %}
+ <option value="{{ group }}">{{ pretty_group }}</option>
+ {% endfor %}
+ </select>
+ <br><br>
+ {% endif %}
+ <div id="histogram_container">
+ <div id="histogram" class="barchart"></div>
</div>
</div>
- {% endif %}
- <div class="tab-pane" id="probability_plot">
- <div style="padding: 20px" class="form-horizontal">
- {% if sample_groups|length != 1 %}
- Select Group:
- <select class="prob_plot_samples_group">
- {% for group, pretty_group in sample_group_types.items() %}
- <option value="{{ group }}">{{ pretty_group }}</option>
+ </div>
+ {% if num_values < 256 %}
+ <div class="tab-pane" id="bar_chart_tab">
+ <div class="form-horizontal section-form-div">
+ {% if sample_groups|length != 1 %}
+ Select Group:
+ <select class="bar_chart_samples_group">
+ {% for group, pretty_group in sample_group_types.items() %}
+ <option value="{{ group }}">{{ pretty_group }}</option>
+ {% endfor %}
+ </select>
+ {% endif %}
+ {% if sample_groups[0].attributes %}
+ <div class="input-append">
+ <select id="color_attribute" size="1">
+ <option value="None">None</option>
+ {% for attribute in sample_groups[0].attributes %}
+ <option value="{{ sample_groups[0].attributes[attribute].name.replace(' ', '_') }}">
+ {{ sample_groups[0].attributes[attribute].name }}</option>
{% endfor %}
</select>
- <br>
- <br>
- {% endif %}
-
- <div id="prob_plot_container">
- <div id="prob_plot_div"></div>
- </div>
- <div id="shapiro_wilk_text"></div>
- <div>
- More about <a href="http://en.wikipedia.org/wiki/Normal_probability_plot">Normal Probability Plots</a> and more
- about interpreting these plots from the <a href="http://genenetwork.org/glossary.html#normal_probability">glossary</a>
- </div>
-
</div>
-
- </div>
- <div class="tab-pane" id="box_plot_tab">
- <div id="box_plot_container">
- <div id="box_plot"></div>
+ {% endif %}
+ <div id="update_bar_chart" class="btn-group">
+ <button type="button" class="btn btn-default sort_by_name" value="name">
+ <i class="icon-resize-horizontal"></i> Sort By Name
+ </button>
+ <button type="button" class="btn btn-default sort_by_value" value="value">
+ <i class="icon-signal"></i> Sort By Value
+ </button>
</div>
- </div>
- <div class="tab-pane" id="violin_plot_tab">
- <div id="violin_plot_container">
- <div id="violin_plot"></div>
+ <div id="bar_chart_container">
+ <div id="bar_chart"></div>
</div>
</div>
- <div class="tab-pane" id="scatterplot_matrix">
-
- <div style="margin-bottom:40px;" class="btn-group">
- <button type="button" class="btn btn-default" id="select_compare_trait">
- <i class="icon-th-large"></i> Select Traits
- </button>
- <button type="button" class="btn btn-default" id="clear_compare_trait">
- <i class="icon-trash"></i> Clear
- </button>
+ </div>
+ {% endif %}
+ <div class="tab-pane" id="probability_plot">
+ <div class="form-horizontal section-form-div">
+ {% if sample_groups|length != 1 %}
+ Select Group:
+ <select class="prob_plot_samples_group">
+ {% for group, pretty_group in sample_group_types.items() %}
+ <option value="{{ group }}">{{ pretty_group }}</option>
+ {% endfor %}
+ </select>
+ <br>
+ <br>
+ {% endif %}
+
+ <div id="prob_plot_container">
+ <div id="prob_plot_div"></div>
</div>
- <div id="scatterplot_container">
- <div id="comparison_scatterplot" class="qtlcharts"></div>
+ <div id="shapiro_wilk_text"></div>
+ <div>
+ More about <a href="http://en.wikipedia.org/wiki/Normal_probability_plot">Normal Probability Plots</a> and more
+ about interpreting these plots from the <a href="http://genenetwork.org/glossary.html#normal_probability">glossary</a>
</div>
</div>
</div>
+ <div class="tab-pane" id="box_plot_tab">
+ <div id="box_plot_container">
+ <div id="box_plot"></div>
+ </div>
+ </div>
+ <div class="tab-pane" id="violin_plot_tab">
+ <div id="violin_plot_container">
+ <div id="violin_plot"></div>
+ </div>
+ </div>
</div>
- <!--</div>-->
+ </div>
<div id="collections_holder_wrapper" style="display:none;">
<div id="collections_holder"></div>
</div>
-
</div>
diff --git a/wqflask/wqflask/templates/show_trait_transform_and_filter.html b/wqflask/wqflask/templates/show_trait_transform_and_filter.html
index b4118b04..b70ca590 100644
--- a/wqflask/wqflask/templates/show_trait_transform_and_filter.html
+++ b/wqflask/wqflask/templates/show_trait_transform_and_filter.html
@@ -1,83 +1,119 @@
<div>
- <div class="form-horizontal">
- <p>Edit or delete values in the Trait Data boxes, and use the
- <strong>Reset</strong> option as
- needed.
- </p>
-
- <div id="blockMenuSpan" class="input-append" style="margin-bottom: 10px;">
- <label for="remove_samples_field">Block samples by index:</label>
- <input type="text" id="remove_samples_field" placeholder="Example: 3, 5-10, 12">
- <select id="block_group" size="1">
- <option value="primary">
- {{ sample_group_types['samples_primary'] }}
- </option>
- <option value="other">
- {{ sample_group_types['samples_other'] }}
- </option>
- </select>
- <input type="button" id="block_by_index" class="btn btn-danger" value="Block">
- </div>
- <div id="remove_samples_invalid" class="alert alert-error" style="display:none;">
- Please check that your input is formatted correctly, e.g. <strong>3, 5-10, 12</strong>
- </div>
- {% if sample_groups[0].attributes %}
- <div class="input-append" style="margin-top:10px; margin-bottom:10px;">
- <label for="exclude_menu">Block samples by group:</label>
- <select id="exclude_menu" size=1>
- {% for attribute in sample_groups[0].attributes %}
- <option value="{{ sample_groups[0].attributes[attribute].name.replace(' ', '_') }}">
- {{ sample_groups[0].attributes[attribute].name }}</option>
- {% endfor %}
- </select>
- <select id="attribute_values" size=1>
- </select>
- <input type="button" id="exclude_group" class="btn" value="Block">
- </div>
- {% endif %}
- <div>
- <input type="button" id="hide_no_value" class="btn btn-default" value="Hide No Value">
- <input type="button" id="block_outliers" class="btn btn-default" value="Block Outliers">
- <input type="button" class="btn btn-success reset" value="Reset">
- <span class="input-append">
- <input type="button" class="btn btn-default export" value="Export">
- <select class="select optional span2 export_format">
- <option value="excel">Excel</option>
- <option value="csv">CSV</option>
- </select>
- </span>
- <br>
- <div style="margin-top:10px;">
- <input type="button" id="normalize" class="btn btn-success" value="Normalize">
- <select id="norm_method" class="select optional span2">
- {% if negative_vals_exist == "false" %}
- <option value="log2">Log2</option>
- <option value="log10">Log10</option>
- {% endif %}
- <option value="zscore">Z-score</option>
- <option value="qnorm">Quantile</option>
- <option value="sqrt">Square Root</option>
- <option value="invert">Invert +/-</option>
- </select>
- </div>
- <!--
- {% if sample_groups[0].sample_qnorm is not none %}
- <input type="button" id="qnorm" class="btn btn-default" value="Quantile Normalize">
- {% endif %}
- -->
- </div>
- <br>
+ <div class="form-horizontal">
+ <p>Edit or delete values in the Trait Data boxes, and use the
+ <strong>Reset</strong> option as
+ needed.
+ </p>
+ <div id="blockMenuSpan" class="input-append block-div">
+ <label for="remove_samples_field">Block samples by index:</label>
+ <input type="text" id="remove_samples_field" placeholder="Example: 3, 5-10, 12">
+ <select id="block_group" size="1">
+ <option value="primary">
+ {{ sample_group_types['samples_primary'] }}
+ </option>
+ <option value="other">
+ {{ sample_group_types['samples_other'] }}
+ </option>
+ </select>
+ <input type="button" id="block_by_index" class="btn btn-danger" value="Block">
+ </div>
+ <div id="remove_samples_invalid" class="alert alert-error" style="display:none;">
+ Please check that your input is formatted correctly, e.g. <strong>3, 5-10, 12</strong>
+ </div>
+ {% if sample_groups[0].attributes %}
+ <div class="input-append block-div-2">
+ <label for="exclude_column">Block samples by group:</label>
+ <select id="exclude_column" size=1>
+ {% for attribute in sample_groups[0].attributes %}
+ {% if sample_groups[0].attributes[attribute].distinct_values|length <= 10 %}
+ <option value="{{ loop.index }}">
+ {{ sample_groups[0].attributes[attribute].name }}
+ </option>
+ {% endif %}
+ {% endfor %}
+ </select>
+ <select id="attribute_values" size=1>
+ </select>
+ <select id="exclude_by_attr_group" size="1">
+ <option value="primary">
+ {{ sample_group_types['samples_primary'] }}
+ </option>
+ <option value="other">
+ {{ sample_group_types['samples_other'] }}
+ </option>
+ </select>
+ <input type="button" id="exclude_by_attr" class="btn btn-danger" value="Block">
+ </div>
+ {% endif %}
+ <div id="filterMenuSpan" class="input-append block-div-2">
+ <label for="filter_samples_field">Filter samples by {% if not sample_groups[0].attributes %}value{% endif %} </label>
+ {% if sample_groups[0].attributes %}
+ <select id="filter_column">
+ <option value="value">Value</option>
+ {% if js_data.se_exists %}
+ <option value="stderr">SE</option>
+ {% endif %}
+ {% for attribute in sample_groups[0].attributes %}
- <div>
- <p>Outliers highlighted in
- <strong style="background-color:orange;">orange</strong>
- can be hidden using
- the <strong>Hide Outliers</strong> button.
- </p>
+ <option value="{{ loop.index }}">
+ {{ sample_groups[0].attributes[attribute].name }}
+ </option>
- <p>Samples with no value (x) can be hidden by clicking
- <strong>Hide No Value</strong> button.
- </p>
- </div>
+ {% endfor %}
+ </select>
+ {% endif %}
+ <select id="filter_logic" size="1">
+ <option value="greater_than">></option>
+ <option value="less_than"><</option>
+ <option value="greater_or_equal">≥</option>
+ <option value="less_or_equal">≤</option>
+ </select>
+ <input type="text" id="filter_value" placeholder="Example: 3, 10, 15">
+ <select id="filter_group" size="1">
+ <option value="primary">
+ {{ sample_group_types['samples_primary'] }}
+ </option>
+ <option value="other">
+ {{ sample_group_types['samples_other'] }}
+ </option>
+ </select>
+ <input type="button" id="filter_by_value" class="btn btn-danger" value="Filter">
+ </div>
+ <div>
+ <input data-active="false" type="button" id="hide_no_value" class="btn btn-default" value="Hide No Value">
+ <input type="button" id="block_outliers" class="btn btn-default" value="Block Outliers">
+ <input type="button" class="btn btn-success reset" value="Reset">
+ <span class="input-append">
+ <input type="button" class="btn btn-default export" value="Export">
+ <select class="select optional span2 export_format">
+ <option value="excel">Excel</option>
+ <option value="csv">CSV</option>
+ </select>
+ </span>
+ <br>
+ <div class="normalize-div">
+ <input type="button" id="normalize" class="btn btn-success" value="Normalize">
+ <select id="norm_method" class="select optional span2">
+ {% if negative_vals_exist == "false" %}
+ <option value="log2">Log2</option>
+ <option value="log10">Log10</option>
+ <option value="sqrt">Square Root</option>
+ {% endif %}
+ <option value="zscore">Z-score</option>
+ <option value="qnorm">Quantile</option>
+ <option value="invert">Invert +/-</option>
+ </select>
+ </div>
</div>
+ </div>
+ <br>
+ <div>
+ <p>Outliers highlighted in
+ <strong style="background-color:orange;">orange</strong>
+ can be hidden using
+ the <strong>Hide Outliers</strong> button.
+ </p>
+
+ <p>Samples with no value (x) can be hidden by clicking<strong>Hide No Value</strong> button.</p>
+ </div>
</div> \ No newline at end of file
diff --git a/wqflask/wqflask/templates/snp_browser.html b/wqflask/wqflask/templates/snp_browser.html
index 88cb4d31..b9aea570 100644
--- a/wqflask/wqflask/templates/snp_browser.html
+++ b/wqflask/wqflask/templates/snp_browser.html
@@ -1,7 +1,7 @@
{% extends "base.html" %}
{% block css %}
<link rel="stylesheet" type="text/css" href="{{ url_for('css', filename='DataTables/css/jquery.dataTables.css') }}" />
- <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.bootstrap.css" />
+ <link rel="stylesheet" type="text/css" href="{{ url_for('js', filename='DataTablesExtensions/buttonsBootstrap/css/buttons.bootstrap.css') }}" />
<link rel="stylesheet" type="text/css" href="/static/new/css/typeahead-bootstrap.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/snp_browser.css" />
{% endblock %}
@@ -15,7 +15,7 @@
<input type="hidden" name="first_run" value="{{ first_run }}">
<input type="hidden" name="chosen_strains_mouse" value="{{ chosen_strains_mouse|join(",") }}">
<input type="hidden" name="chosen_strains_rat" value="{{ chosen_strains_rat|join(",") }}">
- <div class="col-xs-4" style="padding-left: 0px;">
+ <div class="col-xs-4" style="width: 260px; padding-left: 30px; padding-right: 0px;">
<div class="form-group row" style="margin-bottom: 5px;">
<label for="snp_or_indel" style="text-align: right;" class="col-xs-4 col-form-label"><b>Type:</b></label>
<div class="col-xs-8">
@@ -74,7 +74,7 @@
</div>
</div>
</div>
- <div class="col-xs-4" style="padding-left: 0px;">
+ <div class="col-xs-4" style="width: 310px; padding-left: 0px; padding-right: 20px;">
<div class="form-group row" style="margin-bottom: 10px;">
<label for="strains" style="text-align: right;" class="col-xs-4 col-form-label"><b>Strains:</b></label>
<div class="col-xs-8">
@@ -107,8 +107,14 @@
</div>
</div>
</div>
+ <div class="form-group row">
+ <label class="col-xs-4 col-form-label"></label>
+ <div class="col-xs-8" style="margin-top: 65px;">
+ <input class="btn btn-primary" type="button" name="export_csv" value="Export to CSV">
+ </div>
+ </div>
</div>
- <div class="col-xs-4" style="padding-left: 20px;">
+ <div class="col-xs-4" style="width: 310px; padding-left: 20px;">
<div class="form-group row" style="margin-bottom: 5px;">
<label for="domain" style="text-align: right;" class="col-xs-4 col-form-label"><b>Domain:</b></label>
<div class="col-xs-8">
@@ -182,24 +188,21 @@
</div>
<div style="margin-top: 20px;">
- {% if filtered_results is defined %}
- {% if filtered_results|length > limit_number %}
- There are more than 10000 results. Consider limiting your search to a smaller range.
- {% else %}
+ {% if table_rows is defined %}
<table class="dataTable cell-border nowrap" id="results_table" style="float: left;">
<thead>
<tr>
<th></th>
{% if header_fields|length == 2 %}
{% for header in header_fields[0] %}
- <th data-export="{{ header }}">{{ header }}</th>
+ <th data-export="{{ header }}" name="{{ header }}">{{ header }}</th>
{% endfor %}
{% for strain in header_fields[1] %}
- <th data-export="{{ strain }}" style="align: center; text-align: center; line-height: 15px;">{% for letter in strain %}<div style="transform: rotate(90deg);">{{ letter }}</div>{% endfor %}</th>
+ <th data-export="{{ strain }}" name="{{ strain }}" style="align: center; text-align: center; line-height: 12px;">{% for letter in strain|reverse %}<div style="transform: rotate(270deg);">{{ letter }}</div>{% endfor %}</th>
{% endfor %}
{% else %}
{% for header in header_fields %}
- <th data-export="{{ header }}">{{ header }}</th>
+ <th data-export="{{ header }}" name="{{ header }}">{{ header }}</th>
{% endfor %}
{% endif %}
</tr>
@@ -208,26 +211,37 @@
<td colspan="100%" align="center"><br><b><font size="15">Loading...</font></b><br></td>
</tbody>
</table>
- {% endif %}
{% endif %}
</div>
</div>
{% endblock %}
{% block js %}
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/typeahead.bundle.js"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='typeahead/typeahead.bundle.js') }}"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/typeahead_rn6.json"></script>
<script type='text/javascript'>
- var json_rows = {{ table_rows|safe }};
var empty_columns = {{ empty_columns|safe }};
+
+ var remain_field_count = 15 - {{ empty_field_count|safe }};
+ var total_field_count = 15 - {{ empty_field_count|safe }} + {{ allele_list|safe|length }};
</script>
<script language="javascript">
+ var getParams = function(url) {
+ let parser = document.createElement('a');
+ parser.href = url;
+ let params = parser.search.substring(1);
+ if(params.length > 0) {
+ return ('?'+params);
+ }
+ return params;
+ };
+
var substringMatcher = function(strs) {
return function findMatches(q, cb) {
var matches, substringRegex;
@@ -260,19 +274,20 @@
source: substringMatcher(rat_genes)
});
- {% if filtered_results is defined %}
+ {% if table_rows is defined %}
$("#results_table").DataTable( {
- 'data': json_rows,
{% if variant_type == "SNP" %}
'columns': [
{
'data': null,
+ 'className': 'dt-body-center',
'orderable': false,
'render': function(data, type, row, meta) {
- return '<input type="checkbox" name="trait_check">'
+ return '<input type="checkbox" class="checkbox" id="variant_checkbox" onchange="onVarinatCheck(this)" name="trait_check">'
}
}, {
- 'data': 'index'
+ 'data': 'index',
+ 'className': 'dt-body-right'
}, {
'data': null,
'render': function(data, type, row, meta) {
@@ -283,27 +298,30 @@
}
}
}, {
- 'data': 'chr'
+ 'data': 'chr',
+ 'className': 'dt-body-center'
}, {
- 'data': 'mb_formatted'
+ 'data': 'mb_formatted',
+ 'className': 'dt-body-right'
}, {
'data': 'alleles'
}, {% if empty_columns['snp_source'] == "true" %}{
'data': null,
'render': function(data, type, row, meta) {
if (data.snp_source == "Sanger/UCLA") {
- return '<a href="' + data.source_urls[0] + '">Sanger</a><a href="' + data.source_urls[1] + '">UCLA</a>'
+ return '<a href="' + data.source_urls[0] + '">Sanger</a>, <a href="' + data.source_urls[1] + '">UCLA</a>'
} else {
return data.snp_source
}
}
}, {% endif %} {% if empty_columns['conservation_score'] == "true" %}{
- 'data': 'conservation_score'
+ 'data': 'conservation_score',
+ 'className': 'dt-body-right'
}, {% endif %} {% if empty_columns['gene_name'] == "true" %}{
'data': null,
'render': function(data, type, row, meta) {
if (data.gene_name != "") {
- return '<i>' + data.gene_name + '</i><br><a href="' + data.gene_link + '">NCBI</a>'
+ return '<i>' + data.gene_name + '</i>, <a href="' + data.gene_link + '">NCBI</a>'
} else {
return data.gene_name
}
@@ -330,6 +348,7 @@
}, {% endif %} {% for item in allele_list %} {
'data': null,
'orderable': false,
+ 'className': 'dt-body-center',
'render': function(data, type, row, meta) {
if (typeof data.allele_value_list[{{ loop.index - 1 }}][0] !== "undefined") {
return data.allele_value_list[{{ loop.index - 1 }}][0]
@@ -339,12 +358,9 @@
}
}{% if loop.index < allele_list|length %},{% endif %}{% endfor %}
],
- 'createdRow': function( row, data, dataIndex) {
- $('td', row).eq(0).attr("style", "text-align: center; padding: 4px 10px 2px 10px;");
- $('td', row).eq(1).attr("align", "right");
- for (i = {{ 15 - empty_field_count }}; i < ({{ 15 - empty_field_count }} + {{ allele_list|length }}); i++) {
+ 'createdRow': function(row, data, dataIndex) {
+ for (i = remain_field_count; i < total_field_count; i++) {
var this_allele = $('td', row).eq(i).text();
- $('td', row).eq(i).attr("style", "text-align: center; padding: 4px 10px 2px 10px;");
switch (this_allele) {
case "A":
$('td', row).eq(i).addClass('A_allele_color');
@@ -380,24 +396,29 @@
{
'data': null,
'render': function(data, type, row, meta) {
- return '<input type="checkbox" name="trait_check">'
+ return '<input type="checkbox" class="checkbox" id="variant_checkbox" onchange="onVarinatCheck(this)" name="trait_check">'
}
}, {
- 'data': 'index'
+ 'data': 'index',
+ 'className': 'dt-body-right'
}, {
'data': 'indel_name'
}, {
'data': 'indel_type'
}, {
- 'data': 'indel_chr'
+ 'data': 'indel_chr',
+ 'className': 'dt-body-center'
}, {
- 'data': 'indel_mb_s'
+ 'data': 'indel_mb_s',
+ 'className': 'dt-body-right'
}, {
- 'data': 'indel_mb_e'
+ 'data': 'indel_mb_e',
+ 'className': 'dt-body-right'
}, {
'data': 'indel_strand'
}, {
- 'data': 'indel_size'
+ 'data': 'indel_size',
+ 'className': 'dt-body-right'
}, {
'data': 'indel_sequence'
}, {
@@ -406,16 +427,29 @@
],
{% endif %}
'order': [[1, "asc" ]],
- 'sDom': "rti",
- 'iDisplayLength': -1,
- 'processing': true,
- 'language': {
- 'loadingRecords': '&nbsp;',
- 'processing': 'Loading...'
+ 'sDom': "rtip",
+ 'iDisplayLength': 100,
+ 'bServerSide': true,
+ 'sAjaxSource': '/snp_browser_table'+getParams(window.location.href),
+ 'infoCallback': function(settings, start, end, max, total, pre) {
+ return "Showing " + start + " to " + (start + this.api().data().length - 1) + " of " + total + " entries";
}
});
{% endif %}
+ function onVarinatCheck(checkboxElem) {
+ if (checkboxElem.checked) {
+ if (!checkboxElem.parentElement.parentElement.classList.contains('selected')) {
+ checkboxElem.parentElement.parentElement.classList.add('selected')
+ }
+ }
+ else {
+ if (checkboxElem.parentElement.parentElement.classList.contains('selected')) {
+ checkboxElem.parentElement.parentElement.classList.remove('selected')
+ }
+ }
+ }
+
$("#species_select").change(function() {
this_species = $(this).val();
$("#strain_select").empty()
@@ -509,6 +543,40 @@
});
$("input[name=chosen_strains]").val(strain_list.join(","));
});
+
+
+
+ $("input[name=export_csv]").click(function() {
+ var csv = [];
+ var rows = document.querySelectorAll("table tr");
+
+ var headers = [];
+ var col_header = rows[0].querySelectorAll("th");
+ for(let i = 1; i < col_header.length; i++) {
+ headers.push(col_header[i].getAttribute("name"));
+ }
+ csv.push(headers.join(","));
+
+ for (let i = 1; i < rows.length; i++) {
+ var row = [], cols = rows[i].querySelectorAll("td");
+ var checkBox = rows[i].querySelector("input");
+
+ if(checkBox.checked == true) {
+ for (let j = 1; j < cols.length; j++)
+ row.push(cols[j].innerText);
+
+ csv.push(row.join(","));
+ }
+ }
+
+ var csvFile = new Blob([csv.join("\n")], {type: "text/csv"});
+ var downloadLink = document.createElement("a");
+ downloadLink.download = "variant_data.csv";
+ downloadLink.href = window.URL.createObjectURL(csvFile);
+ downloadLink.style.display = "none";
+ document.body.appendChild(downloadLink);
+ downloadLink.click();
+ });
</script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/tool_buttons.html b/wqflask/wqflask/templates/tool_buttons.html
new file mode 100644
index 00000000..5b2dbf3d
--- /dev/null
+++ b/wqflask/wqflask/templates/tool_buttons.html
@@ -0,0 +1,35 @@
+<button id="corr_matrix" class="btn btn-primary submit_special" data-url="/corr_matrix" title="Correlation Matrix" >
+ Correlations
+</button>
+
+<button id="network_graph" class="btn btn-primary submit_special" data-url="/network_graph" title="Network Graph" >
+ Networks
+</button>
+
+<button id="send_to_webgestalt" class="btn btn-primary submit_special" data-url="/webgestalt_page" title="WebGestalt" >
+ WebGestalt
+</button>
+
+<button id="send_to_geneweaver" class="btn btn-primary submit_special" data-url="/geneweaver_page" title="GeneWeaver" >
+ GeneWeaver
+</button>
+
+<button id="send_to_bnw" class="btn btn-primary submit_special" data-url="/bnw_page" title="Bayesian network software for causal modeling and reasoning, with an intuitive interface to incorporate biological knowledge and a complete pipeline from data to model to prediction" >
+ BNW
+</button>
+
+<button id="wgcna_setup" class="btn btn-primary submit_special" data-url="/wgcna_setup" title="WGCNA Analysis" >
+ WGCNA
+</button>
+
+<button id="ctl_setup" class="btn btn-primary submit_special" data-url="/ctl_setup" title="CTL Analysis" >
+ CTL Maps
+</button>
+
+<button id="heatmap" class="btn btn-primary submit_special" data-url="/heatmap" title="Heatmap" >
+ MultiMap
+</button>
+
+<button id="comp_bar_chart" class="btn btn-primary submit_special" data-url="/comparison_bar_chart" title="Comparison Bar Chart" >
+ Comparison Bar Chart
+</button> \ No newline at end of file
diff --git a/wqflask/wqflask/templates/tutorials.html b/wqflask/wqflask/templates/tutorials.html
index e2b559ca..ce5d0e3d 100644
--- a/wqflask/wqflask/templates/tutorials.html
+++ b/wqflask/wqflask/templates/tutorials.html
@@ -16,3 +16,4 @@
</TR></TABLE>
{% endblock %}
+
diff --git a/wqflask/wqflask/update_search_results.py b/wqflask/wqflask/update_search_results.py
index 68bea9d6..672f95b1 100644
--- a/wqflask/wqflask/update_search_results.py
+++ b/wqflask/wqflask/update_search_results.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import json
from flask import Flask, g
diff --git a/wqflask/wqflask/user_login.py b/wqflask/wqflask/user_login.py
index edd272c2..b6e7973f 100644
--- a/wqflask/wqflask/user_login.py
+++ b/wqflask/wqflask/user_login.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division, absolute_import
-
import os
import hashlib
import datetime
@@ -12,9 +10,6 @@ import requests
import simplejson as json
-import redis # used for collections
-Redis = redis.StrictRedis()
-
from flask import (Flask, g, render_template, url_for, request, make_response,
redirect, flash, abort)
@@ -23,13 +18,14 @@ from wqflask import pbkdf2
from wqflask.user_session import UserSession
from utility import hmac
-from utility.redis_tools import is_redis_available, get_user_id, get_user_by_unique_column, set_user_attribute, save_user, save_verification_code, check_verification_code, get_user_collections, save_collections
+from utility.redis_tools import is_redis_available, get_redis_conn, get_user_id, get_user_by_unique_column, set_user_attribute, save_user, save_verification_code, check_verification_code, get_user_collections, save_collections
+Redis = get_redis_conn()
from utility.logger import getLogger
logger = getLogger(__name__)
from smtplib import SMTP
-from utility.tools import SMTP_CONNECT, SMTP_USERNAME, SMTP_PASSWORD, LOG_SQL_ALCHEMY
+from utility.tools import SMTP_CONNECT, SMTP_USERNAME, SMTP_PASSWORD, LOG_SQL_ALCHEMY, GN2_BRANCH_URL
THREE_DAYS = 60 * 60 * 24 * 3
@@ -41,15 +37,17 @@ def basic_info():
ip_address = request.remote_addr,
user_agent = request.headers.get('User-Agent'))
-def encode_password(pass_gen_fields, unencrypted_password):
- hashfunc = getattr(hashlib, pass_gen_fields['hashfunc'])
- salt = base64.b64decode(pass_gen_fields['salt'])
+def encode_password(pass_gen_fields, unencrypted_password):
+ if isinstance(pass_gen_fields['salt'], bytes):
+ salt = pass_gen_fields['salt']
+ else:
+ salt = bytes(pass_gen_fields['salt'], "utf-8")
encrypted_password = pbkdf2.pbkdf2_hex(str(unencrypted_password),
- pass_gen_fields['salt'],
- pass_gen_fields['iterations'],
- pass_gen_fields['keylength'],
- hashfunc)
+ salt,
+ pass_gen_fields['iterations'],
+ pass_gen_fields['keylength'],
+ pass_gen_fields['hashfunc'])
pass_gen_fields.pop("unencrypted_password", None)
pass_gen_fields["password"] = encrypted_password
@@ -127,7 +125,7 @@ def send_email(toaddr, msg, fromaddr="no-reply@genenetwork.org"):
server.quit()
logger.info("Successfully sent email to "+toaddr)
-def send_verification_email(user_details, template_name = "email/verification.txt", key_prefix = "verification_code", subject = "GeneNetwork email verification"):
+def send_verification_email(user_details, template_name = "email/user_verification.txt", key_prefix = "verification_code", subject = "GeneNetwork e-mail verification"):
verification_code = str(uuid.uuid4())
key = key_prefix + ":" + verification_code
@@ -141,6 +139,27 @@ def send_verification_email(user_details, template_name = "email/verification.tx
send_email(recipient, subject, body)
return {"recipient": recipient, "subject": subject, "body": body}
+def send_invitation_email(user_email, temp_password, template_name = "email/user_invitation.txt", subject = "You've been added to a GeneNetwork user group"):
+ recipient = user_email
+ body = render_template(template_name, temp_password)
+ send_email(recipient, subject, body)
+ return {"recipient": recipient, "subject": subject, "body": body}
+
+@app.route("/manage/verify_email")
+def verify_email():
+ if 'code' in request.args:
+ user_details = check_verification_code(request.args['code'])
+ if user_details:
+ # As long as they have access to the email account
+ # We might as well log them in
+ session_id_signed = get_signed_session_id(user_details)
+ flash("Thank you for logging in {}.".format(user_details['full_name']), "alert-success")
+ response = make_response(redirect(url_for('index_page', import_collections = import_col, anon_id = anon_id)))
+ response.set_cookie(UserSession.user_cookie_name, session_id_signed, max_age=None)
+ return response
+ else:
+ flash("Invalid code: Password reset code does not exist or might have expired!", "error")
+
@app.route("/n/login", methods=('GET', 'POST'))
def login():
params = request.form if request.form else request.args
@@ -180,7 +199,7 @@ def login():
if user_details:
submitted_password = params['password']
pwfields = user_details['password']
- if type(pwfields) is str:
+ if isinstance(pwfields, str):
pwfields = json.loads(pwfields)
encrypted_pass_fields = encode_password(pwfields, submitted_password)
password_match = pbkdf2.safe_str_cmp(encrypted_pass_fields['password'], pwfields['password'])
@@ -204,7 +223,7 @@ def login():
response.set_cookie(UserSession.user_cookie_name, session_id_signed, max_age=None)
return response
else:
- email_ob = send_verification_email(user_details)
+ email_ob = send_verification_email(user_details, template_name = "email/user_verification.txt")
return render_template("newsecurity/verification_still_needed.html", subject=email_ob['subject'])
else: # Incorrect password
#ZS: It previously seemed to store that there was an incorrect log-in attempt here, but it did so in the MySQL DB so this might need to be reproduced with Redis
@@ -224,7 +243,7 @@ def github_oauth2():
}
result = requests.post("https://github.com/login/oauth/access_token", json=data)
- result_dict = {arr[0]:arr[1] for arr in [tok.split("=") for tok in [token.encode("utf-8") for token in result.text.split("&")]]}
+ result_dict = {arr[0]:arr[1] for arr in [tok.split("=") for tok in result.text.split("&")]}
github_user = get_github_user_details(result_dict["access_token"])
@@ -262,9 +281,11 @@ def orcid_oauth2():
data = {
"client_id": ORCID_CLIENT_ID,
"client_secret": ORCID_CLIENT_SECRET,
- "grant_type": "authorization_code",
+ "grant_type": "authorization_code",
+ "redirect_uri": GN2_BRANCH_URL + "n/login/orcid_oauth2",
"code": code
}
+
result = requests.post(ORCID_TOKEN_URL, data=data)
result_dict = json.loads(result.text.encode("utf-8"))
@@ -313,8 +334,8 @@ def forgot_password():
return render_template("new_security/forgot_password.html", errors=errors)
def send_forgot_password_email(verification_email):
- from email.MIMEMultipart import MIMEMultipart
- from email.MIMEText import MIMEText
+ from email.mime.multipart import MIMEMultipart
+ from email.mime.text import MIMEText
template_name = "email/forgot_password.txt"
key_prefix = "forgot_password_code"
@@ -374,16 +395,13 @@ def password_reset():
hmac = request.args.get('hm')
if verification_code:
- user_email = check_verification_code(verification_code)
- if user_email:
- user_details = get_user_by_unique_column('email_address', user_email)
- if user_details:
- return render_template(
- "new_security/password_reset.html", user_encode=user_details["email_address"])
- else:
- flash("Invalid code: User no longer exists!", "error")
+ user_details = check_verification_code(verification_code)
+ if user_details:
+ return render_template(
+ "new_security/password_reset.html", user_encode=user_details["email_address"])
else:
flash("Invalid code: Password reset code does not exist or might have expired!", "error")
+ return redirect(url_for("login"))
else:
return redirect(url_for("login"))
@@ -394,6 +412,7 @@ def password_reset_step2():
errors = []
user_email = request.form['user_encode']
+ user_id = get_user_id("email_address", user_email)
password = request.form['password']
encoded_password = set_password(password)
@@ -401,9 +420,7 @@ def password_reset_step2():
set_user_attribute(user_id, "password", encoded_password)
flash("Password changed successfully. You can now sign in.", "alert-info")
- response = make_response(redirect(url_for('login')))
-
- return response
+ return redirect(url_for('login'))
def register_user(params):
thank_you_mode = False
@@ -438,7 +455,9 @@ def register_user(params):
user_details['confirmed'] = 1
user_details['registration_info'] = basic_info()
- save_user(user_details, user_details['user_id'])
+
+ if len(errors) == 0:
+ save_user(user_details, user_details['user_id'])
return errors
@@ -461,4 +480,4 @@ def register():
@app.errorhandler(401)
def unauthorized(error):
- return redirect(url_for('login')) \ No newline at end of file
+ return redirect(url_for('login'))
diff --git a/wqflask/wqflask/user_manager.py b/wqflask/wqflask/user_manager.py
index a871e91a..7b25b68e 100644
--- a/wqflask/wqflask/user_manager.py
+++ b/wqflask/wqflask/user_manager.py
@@ -1,53 +1,63 @@
-from __future__ import print_function, division, absolute_import
-
import os
import hashlib
import datetime
import time
-import logging
import uuid
-import hashlib
import hmac
import base64
-import urlparse
-
+import redis # used for collections
import simplejson as json
+import requests
-#from redis import StrictRedis
-import redis # used for collections
-Redis = redis.StrictRedis()
+from base.data_set import create_datasets_list
-from flask import (Flask, g, render_template, url_for, request, make_response,
- redirect, flash, abort)
+from flask import g
+from flask import render_template
+from flask import url_for
+from flask import request
+from flask import make_response
+from flask import redirect
+from flask import flash
from wqflask import app
-from pprint import pformat as pf
-
-from wqflask import pbkdf2 # password hashing
+from wqflask import pbkdf2 # password hashing
from wqflask.database import db_session
from wqflask import model
-from utility import Bunch, Struct, after
+from smtplib import SMTP
+
+from pprint import pformat as pf
-import logging
+from utility import Bunch
+from utility import Struct
from utility.logger import getLogger
-logger = getLogger(__name__)
-from base.data_set import create_datasets_list
+from utility.redis_tools import get_user_id
+from utility.redis_tools import get_user_by_unique_column
+from utility.redis_tools import set_user_attribute
+from utility.redis_tools import save_user
+from utility.redis_tools import save_verification_code
+from utility.redis_tools import check_verification_code
+from utility.redis_tools import get_user_collections
+from utility.redis_tools import save_collections
-import requests
+from utility.tools import SMTP_CONNECT
+from utility.tools import SMTP_USERNAME
+from utility.tools import SMTP_PASSWORD
-from utility.redis_tools import get_user_id, get_user_by_unique_column, set_user_attribute, save_user, save_verification_code, check_verification_code, get_user_collections, save_collections
-from smtplib import SMTP
-from utility.tools import SMTP_CONNECT, SMTP_USERNAME, SMTP_PASSWORD, LOG_SQL_ALCHEMY
+logger = getLogger(__name__)
+
+
+Redis = redis.StrictRedis()
THREE_DAYS = 60 * 60 * 24 * 3
-#THREE_DAYS = 45
+
def timestamp():
return datetime.datetime.utcnow().isoformat()
+
class AnonUser(object):
"""Anonymous user handling"""
cookie_name = 'anon_user_v1'
@@ -230,29 +240,10 @@ class UserSession(object):
return len(self.user_collections)
-###
-# ZS: This is currently not used, but I'm leaving it here commented out because the old "set superuser" code (at the bottom of this file) used it
-###
-# @property
-# def user_ob(self):
-# """Actual sqlalchemy record"""
-# # Only look it up once if needed, then store it
-# # raise "OBSOLETE: use ElasticSearch instead"
-# try:
-# if LOG_SQL_ALCHEMY:
-# logging.getLogger('sqlalchemy.pool').setLevel(logging.DEBUG)
-#
-# # Already did this before
-# return self.db_object
-# except AttributeError:
-# # Doesn't exist so we'll create it
-# self.db_object = model.User.query.get(self.user_id)
-# return self.db_object
-
def add_collection(self, collection_name, traits):
"""Add collection into ElasticSearch"""
- collection_dict = {'id': unicode(uuid.uuid4()),
+ collection_dict = {'id': str(uuid.uuid4()),
'name': collection_name,
'created_timestamp': datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
'changed_timestamp': datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
@@ -867,7 +858,7 @@ def forgot_password_submit():
email_address = params['email_address']
next_page = None
if email_address != "":
- logger.debug("Wants to send password E-mail to ",email_address)
+ logger.debug("Wants to send password E-mail to ", email_address)
user_details = get_user_by_unique_column("email_address", email_address)
if user_details:
ForgotPasswordEmail(user_details["email_address"])
diff --git a/wqflask/wqflask/user_session.py b/wqflask/wqflask/user_session.py
index 50419146..c5a577df 100644
--- a/wqflask/wqflask/user_session.py
+++ b/wqflask/wqflask/user_session.py
@@ -1,15 +1,9 @@
-from __future__ import print_function, division, absolute_import
-
import datetime
import time
import uuid
import simplejson as json
-import redis # used for collections
-Redis = redis.StrictRedis()
-
-
from flask import (Flask, g, render_template, url_for, request, make_response,
redirect, flash, abort)
@@ -17,7 +11,8 @@ from wqflask import app
from utility import hmac
#from utility.elasticsearch_tools import get_elasticsearch_connection
-from utility.redis_tools import get_user_id, get_user_by_unique_column, get_user_collections, save_collections
+from utility.redis_tools import get_redis_conn, get_user_id, get_user_by_unique_column, set_user_attribute, get_user_collections, save_collections
+Redis = get_redis_conn()
from utility.logger import getLogger
logger = getLogger(__name__)
@@ -29,6 +24,11 @@ THIRTY_DAYS = 60 * 60 * 24 * 30
def get_user_session():
logger.info("@app.before_request get_session")
g.user_session = UserSession()
+ #ZS: I think this should solve the issue of deleting the cookie and redirecting to the home page when a user's session has expired
+ if not g.user_session:
+ response = make_response(redirect(url_for('login')))
+ response.set_cookie('session_id_v2', '', expires=0)
+ return response
@app.after_request
def set_user_session(response):
@@ -37,7 +37,6 @@ def set_user_session(response):
response.set_cookie(g.user_session.cookie_name, g.user_session.cookie)
return response
-
def verify_cookie(cookie):
the_uuid, separator, the_signature = cookie.partition(':')
assert len(the_uuid) == 36, "Is session_id a uuid?"
@@ -52,6 +51,18 @@ def create_signed_cookie():
logger.debug("uuid_signed:", uuid_signed)
return the_uuid, uuid_signed
+@app.route("/user/manage", methods=('GET','POST'))
+def manage_user():
+ params = request.form if request.form else request.args
+ if 'new_full_name' in params:
+ set_user_attribute(g.user_session.user_id, 'full_name', params['new_full_name'])
+ if 'new_organization' in params:
+ set_user_attribute(g.user_session.user_id, 'organization', params['new_organization'])
+
+ user_details = get_user_by_unique_column("user_id", g.user_session.user_id)
+
+ return render_template("admin/manage_user.html", user_details = user_details)
+
class UserSession(object):
"""Logged in user handling"""
@@ -88,14 +99,11 @@ class UserSession(object):
user_id = str(uuid.uuid4()))
Redis.hmset(self.redis_key, self.record)
Redis.expire(self.redis_key, THIRTY_DAYS)
- response = make_response(redirect(url_for('login')))
- response.set_cookie(self.user_cookie_name, '', expires=0)
########### Grrr...this won't work because of the way flask handles cookies
# Delete the cookie
flash("Due to inactivity your session has expired. If you'd like please login again.")
- return response
- #return
+ return None
else:
self.record = dict(login_time = time.time(),
user_type = "anon",
@@ -113,16 +121,18 @@ class UserSession(object):
if Redis.ttl(self.redis_key) < session_time:
# (Almost) everytime the user does something we extend the session_id in Redis...
- logger.debug("Extending ttl...")
Redis.expire(self.redis_key, session_time)
@property
def user_id(self):
"""Shortcut to the user_id"""
- if 'user_id' not in self.record:
- self.record['user_id'] = str(uuid.uuid4())
+ if b'user_id' not in self.record:
+ self.record[b'user_id'] = str(uuid.uuid4())
- return self.record['user_id']
+ try:
+ return self.record[b'user_id'].decode("utf-8")
+ except:
+ return self.record[b'user_id']
@property
def redis_user_id(self):
@@ -169,12 +179,12 @@ class UserSession(object):
def num_collections(self):
"""Number of user's collections"""
- return len(self.user_collections)
+ return len([item for item in self.user_collections if item['num_members'] > 0])
def add_collection(self, collection_name, traits):
"""Add collection into Redis"""
- collection_dict = {'id': unicode(uuid.uuid4()),
+ collection_dict = {'id': str(uuid.uuid4()),
'name': collection_name,
'created_timestamp': datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
'changed_timestamp': datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index 938570f3..2c0ba586 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -1,8 +1,4 @@
-# -*- coding: utf-8 -*-
-#
-# Main routing table for GN2
-
-from __future__ import absolute_import, division, print_function
+"""Main routing table for GN2"""
import traceback # for error page
import os # for error gifs
@@ -11,34 +7,34 @@ import datetime # for errors
import time # for errors
import sys
import csv
+import simplejson as json
+import yaml
import xlsxwriter
-import StringIO # Todo: Use cStringIO?
+import io # Todo: Use cStringIO?
+
+from zipfile import ZipFile, ZIP_DEFLATED
import gc
import numpy as np
-
-import cPickle as pickle
+import pickle as pickle
import uuid
-import simplejson as json
-import yaml
-
-#Switching from Redis to StrictRedis; might cause some issues
-import redis
-Redis = redis.StrictRedis()
-
import flask
import base64
import array
import sqlalchemy
from wqflask import app
-from flask import g, Response, request, make_response, render_template, send_from_directory, jsonify, redirect
+from flask import g, Response, request, make_response, render_template, send_from_directory, jsonify, redirect, url_for, send_file
+
+from wqflask import group_manager
+from wqflask import resource_manager
from wqflask import search_results
from wqflask import export_traits
from wqflask import gsearch
from wqflask import update_search_results
from wqflask import docs
from wqflask import news
+from wqflask import server_side
from wqflask.submit_bnw import get_bnw_input
from base.data_set import create_dataset, DataSet # Used by YAML in marker_regression
from wqflask.show_trait import show_trait
@@ -55,20 +51,25 @@ from wqflask.correlation import corr_scatter_plot
from wqflask.wgcna import wgcna_analysis
from wqflask.ctl import ctl_analysis
from wqflask.snp_browser import snp_browser
-#from wqflask.trait_submission import submit_trait
+from wqflask.search_results import SearchResultPage
+from wqflask.export_traits import export_search_results_csv
+from wqflask.gsearch import GSearch
+from wqflask.update_search_results import GSearch as UpdateGSearch
+from wqflask.docs import Docs, update_text
+from wqflask.db_info import InfoPage
from utility import temp_data
-from utility.tools import SQL_URI,TEMPDIR,USE_REDIS,USE_GN_SERVER,GN_SERVER_URL,GN_VERSION,JS_TWITTER_POST_FETCHER_PATH,JS_GUIX_PATH, CSS_PATH
+from utility.tools import SQL_URI, TEMPDIR, USE_REDIS, USE_GN_SERVER, GN_SERVER_URL, GN_VERSION, JS_TWITTER_POST_FETCHER_PATH, JS_GUIX_PATH, CSS_PATH
from utility.helper_functions import get_species_groups
+from utility.authentication_tools import check_resource_availability
+from utility.redis_tools import get_redis_conn
+Redis = get_redis_conn()
-from base.webqtlConfig import GENERATED_IMAGE_DIR
+from base.webqtlConfig import GENERATED_IMAGE_DIR, DEFAULT_PRIVILEGES
from utility.benchmark import Bench
from pprint import pformat as pf
-from wqflask import user_login
-from wqflask import user_session
-
from wqflask import collect
from wqflask.database import db_session
@@ -83,10 +84,32 @@ def connect_db():
logger.info("@app.before_request connect_db")
db = getattr(g, '_database', None)
if db is None:
- logger.debug("Get new database connector")
g.db = g._database = sqlalchemy.create_engine(SQL_URI, encoding="latin1")
logger.debug(g.db)
+@app.before_request
+def check_access_permissions():
+ logger.debug("@app.before_request check_access_permissions")
+ available = True
+ if 'dataset' in request.args:
+ permissions = DEFAULT_PRIVILEGES
+ if request.args['dataset'] != "Temp":
+ dataset = create_dataset(request.args['dataset'])
+
+ if dataset.type == "Temp":
+ permissions = DEFAULT_PRIVILEGES
+ elif 'trait_id' in request.args:
+ permissions = check_resource_availability(dataset, request.args['trait_id'])
+ elif dataset.type != "Publish":
+ permissions = check_resource_availability(dataset)
+
+ if type(permissions['data']) is list:
+ if 'view' not in permissions['data']:
+ return redirect(url_for("no_access_page"))
+ else:
+ if permissions['data'] == 'no-access':
+ return redirect(url_for("no_access_page"))
+
@app.teardown_appcontext
def shutdown_session(exception=None):
db = getattr(g, '_database', None)
@@ -114,12 +137,16 @@ def handle_bad_request(e):
list = [fn for fn in os.listdir("./wqflask/static/gif/error") if fn.endswith(".gif") ]
animation = random.choice(list)
- resp = make_response(render_template("error.html",message=err_msg,stack=formatted_lines,error_image=animation,version=GN_VERSION))
+ resp = make_response(render_template("error.html", message=err_msg, stack=formatted_lines, error_image=animation, version=GN_VERSION))
# logger.error("Set cookie %s with %s" % (err_msg, animation))
- resp.set_cookie(err_msg[:32],animation)
+ resp.set_cookie(err_msg[:32], animation)
return resp
+@app.route("/authentication_needed")
+def no_access_page():
+ return render_template("new_security/not_authenticated.html")
+
@app.route("/")
def index_page():
logger.info("Sending index_page")
@@ -147,18 +174,29 @@ def tmp_page(img_path):
logger.info("initial_start_vars:", initial_start_vars)
imgfile = open(GENERATED_IMAGE_DIR + img_path, 'rb')
imgdata = imgfile.read()
- imgB64 = imgdata.encode("base64")
+ imgB64 = base64.b64encode(imgdata)
bytesarray = array.array('B', imgB64)
return render_template("show_image.html",
img_base64 = bytesarray )
+
@app.route("/js/<path:filename>")
def js(filename):
- return send_from_directory(JS_GUIX_PATH, filename)
+ js_path = JS_GUIX_PATH
+ name = filename
+ if 'js_alt/' in filename:
+ js_path = js_path.replace('genenetwork2/javascript', 'javascript')
+ name = name.replace('js_alt/', '')
+ return send_from_directory(js_path, name)
@app.route("/css/<path:filename>")
def css(filename):
- return send_from_directory(CSS_PATH, filename)
+ js_path = JS_GUIX_PATH
+ name = filename
+ if 'js_alt/' in filename:
+ js_path = js_path.replace('genenetwork2/javascript', 'javascript')
+ name = name.replace('js_alt/', '')
+ return send_from_directory(js_path, name)
@app.route("/twitter/<path:filename>")
def twitter(filename):
@@ -181,12 +219,10 @@ def search_page():
logger.info("Skipping Redis cache (USE_REDIS=False)")
logger.info("request.args is", request.args)
- the_search = search_results.SearchResultPage(request.args)
+ the_search = SearchResultPage(request.args)
result = the_search.__dict__
valid_search = result['search_term_exists']
- logger.debugf("result", result)
-
if USE_REDIS and valid_search:
Redis.set(key, pickle.dumps(result, pickle.HIGHEST_PROTOCOL))
Redis.expire(key, 60*60)
@@ -196,10 +232,30 @@ def search_page():
else:
return render_template("search_error.html")
+@app.route("/search_table", methods=('GET',))
+def search_page_table():
+ logger.info("in search_page table")
+ logger.info(request.url)
+
+ logger.info("request.args is", request.args)
+ the_search = search_results.SearchResultPage(request.args)
+
+ logger.info(type(the_search.trait_list))
+ logger.info(the_search.trait_list)
+
+ current_page = server_side.ServerSideTable(
+ len(the_search.trait_list),
+ the_search.trait_list,
+ the_search.header_data_names,
+ request.args,
+ ).get_page()
+
+ return flask.jsonify(current_page)
+
@app.route("/gsearch", methods=('GET',))
def gsearchact():
logger.info(request.url)
- result = gsearch.GSearch(request.args).__dict__
+ result = GSearch(request.args).__dict__
type = request.args['type']
if type == "gene":
return render_template("gsearch_gene.html", **result)
@@ -210,7 +266,7 @@ def gsearchact():
def gsearch_updating():
logger.info("REQUEST ARGS:", request.values)
logger.info(request.url)
- result = update_search_results.GSearch(request.args).__dict__
+ result = UpdateGSearch(request.args).__dict__
return result['results']
# type = request.args['type']
# if type == "gene":
@@ -223,7 +279,7 @@ def docedit():
logger.info(request.url)
try:
if g.user_session.record['user_email_address'] == "zachary.a.sloan@gmail.com" or g.user_session.record['user_email_address'] == "labwilliams@gmail.com":
- doc = docs.Docs(request.args['entry'], request.args)
+ doc = Docs(request.args['entry'], request.args)
return render_template("docedit.html", **doc.__dict__)
else:
return "You shouldn't be here!"
@@ -234,12 +290,12 @@ def docedit():
@app.route('/generated/<filename>')
def generated_file(filename):
logger.info(request.url)
- return send_from_directory(GENERATED_IMAGE_DIR,filename)
+ return send_from_directory(GENERATED_IMAGE_DIR, filename)
@app.route("/help")
def help():
logger.info(request.url)
- doc = docs.Docs("help", request.args)
+ doc = Docs("help", request.args)
return render_template("docs.html", **doc.__dict__)
@app.route("/wgcna_setup", methods=('POST',))
@@ -274,54 +330,33 @@ def ctl_results():
@app.route("/news")
def news():
- doc = docs.Docs("news", request.args)
+ doc = Docs("news", request.args)
return render_template("docs.html", **doc.__dict__)
-@app.route("/references")
-def references():
- doc = docs.Docs("references", request.args)
- return render_template("docs.html", **doc.__dict__)
- #return render_template("reference.html")
@app.route("/intro")
def intro():
- doc = docs.Docs("intro", request.args)
+ doc = Docs("intro", request.args)
return render_template("docs.html", **doc.__dict__)
-@app.route("/policies")
-def policies():
- doc = docs.Docs("policies", request.args)
- #return render_template("policies.html")
- return render_template("docs.html", **doc.__dict__)
-@app.route("/links")
-def links():
- #doc = docs.Docs("links", request.args)
- #return render_template("docs.html", **doc.__dict__)
- return render_template("links.html")
@app.route("/tutorials")
def tutorials():
- #doc = docs.Docs("links", request.args)
+ #doc = Docs("links", request.args)
#return render_template("docs.html", **doc.__dict__)
return render_template("tutorials.html")
@app.route("/credits")
def credits():
- #doc = docs.Docs("links", request.args)
+ #doc = Docs("links", request.args)
#return render_template("docs.html", **doc.__dict__)
return render_template("credits.html")
-@app.route("/environments")
-def environments():
- doc = docs.Docs("environments", request.args)
- return render_template("docs.html", **doc.__dict__)
- #return render_template("environments.html", **doc.__dict__)
-
@app.route("/update_text", methods=('POST',))
def update_page():
- docs.update_text(request.form)
- doc = docs.Docs(request.form['entry_type'], request.form)
+ update_text(request.form)
+ doc = Docs(request.form['entry_type'], request.form)
return render_template("docs.html", **doc.__dict__)
@app.route("/submit_trait")
@@ -336,7 +371,7 @@ def create_temp_trait():
#template_vars = submit_trait.SubmitTrait(request.form)
- doc = docs.Docs("links")
+ doc = Docs("links")
return render_template("links.html", **doc.__dict__)
#return render_template("show_trait.html", **template_vars.__dict__)
@@ -350,7 +385,7 @@ def export_trait_excel():
logger.info("sample_data - type: %s -- size: %s" % (type(sample_data), len(sample_data)))
- buff = StringIO.StringIO()
+ buff = io.BytesIO()
workbook = xlsxwriter.Workbook(buff, {'in_memory': True})
worksheet = workbook.add_worksheet()
for i, row in enumerate(sample_data):
@@ -374,7 +409,7 @@ def export_trait_csv():
logger.info("sample_data - type: %s -- size: %s" % (type(sample_data), len(sample_data)))
- buff = StringIO.StringIO()
+ buff = io.StringIO()
writer = csv.writer(buff)
for row in sample_data:
writer.writerow(row)
@@ -391,35 +426,66 @@ def export_traits_csv():
logger.info("In export_traits_csv")
logger.info("request.form:", request.form)
logger.info(request.url)
- csv_data, file_name = export_traits.export_search_results_csv(request.form)
+ file_list = export_search_results_csv(request.form)
- return Response(csv_data,
- mimetype='text/csv',
- headers={"Content-Disposition":"attachment;filename=" + file_name + ".csv"})
+ if len(file_list) > 1:
+ now = datetime.datetime.now()
+ time_str = now.strftime('%H:%M_%d%B%Y')
+ filename = "export_{}".format(time_str)
+ memory_file = io.StringIO()
+ with ZipFile(memory_file, mode='w', compression=ZIP_DEFLATED) as zf:
+ for the_file in file_list:
+ zf.writestr(the_file[0], the_file[1])
+
+ memory_file.seek(0)
+
+ return send_file(memory_file, attachment_filename=filename + ".zip", as_attachment=True)
+ else:
+ return Response(file_list[0][1],
+ mimetype='text/csv',
+ headers={"Content-Disposition":"attachment;filename=" + file_list[0][0]})
@app.route('/export_perm_data', methods=('POST',))
def export_perm_data():
"""CSV file consisting of the permutation data for the mapping results"""
logger.info(request.url)
- num_perm = float(request.form['num_perm'])
- perm_data = json.loads(request.form['perm_results'])
-
- buff = StringIO.StringIO()
+ perm_info = json.loads(request.form['perm_info'])
+
+ now = datetime.datetime.now()
+ time_str = now.strftime('%H:%M_%d%B%Y')
+
+ file_name = "Permutation_" + perm_info['num_perm'] + "_" + perm_info['trait_name'] + "_" + time_str
+
+ the_rows = [
+ ["#Permutation Test"],
+ ["#File_name: " + file_name],
+ ["#Metadata: From GeneNetwork.org"],
+ ["#Trait_ID: " + perm_info['trait_name']],
+ ["#Trait_description: " + perm_info['trait_description']],
+ ["#N_permutations: " + str(perm_info['num_perm'])],
+ ["#Cofactors: " + perm_info['cofactors']],
+ ["#N_cases: " + str(perm_info['n_samples'])],
+ ["#N_genotypes: " + str(perm_info['n_genotypes'])],
+ ["#Genotype_file: " + perm_info['genofile']],
+ ["#Units_linkage: " + perm_info['units_linkage']],
+ ["#Permutation_stratified_by: " + ", ".join([ str(cofactor) for cofactor in perm_info['strat_cofactors']])],
+ ["#RESULTS_1: Suggestive LRS(p=0.63) = " + str(np.percentile(np.array(perm_info['perm_data']), 67))],
+ ["#RESULTS_2: Significant LRS(p=0.05) = " + str(np.percentile(np.array(perm_info['perm_data']), 95))],
+ ["#RESULTS_3: Highly Significant LRS(p=0.01) = " + str(np.percentile(np.array(perm_info['perm_data']), 99))],
+ ["#Comment: Results sorted from low to high peak linkage"]
+ ]
+
+ buff = io.StringIO()
writer = csv.writer(buff)
- writer.writerow(["Suggestive LRS (p=0.63) = " + str(np.percentile(np.array(perm_data), 67))])
- writer.writerow(["Significant LRS (p=0.05) = " + str(np.percentile(np.array(perm_data), 95))])
- writer.writerow(["Highly Significant LRS (p=0.01) = " + str(np.percentile(np.array(perm_data), 99))])
- writer.writerow("")
- writer.writerow([str(num_perm) + " Permutations"])
- writer.writerow("")
- for item in perm_data:
+ writer.writerows(the_rows)
+ for item in perm_info['perm_data']:
writer.writerow([item])
csv_data = buff.getvalue()
buff.close()
return Response(csv_data,
mimetype='text/csv',
- headers={"Content-Disposition":"attachment;filename=perm_data.csv"})
+ headers={"Content-Disposition":"attachment;filename=" + file_name + ".csv"})
@app.route("/show_temp_trait", methods=('POST',))
def show_temp_trait_page():
@@ -482,7 +548,7 @@ def heatmap_page():
result = template_vars.__dict__
- for item in template_vars.__dict__.keys():
+ for item in list(template_vars.__dict__.keys()):
logger.info(" ---**--- {}: {}".format(type(template_vars.__dict__[item]), item))
pickled_result = pickle.dumps(result, pickle.HIGHEST_PROTOCOL)
@@ -582,18 +648,22 @@ def loading_page():
logger.info(request.url)
initial_start_vars = request.form
start_vars_container = {}
- num_vals = 0 #ZS: So it can be displayed on loading page
+ n_samples = 0 #ZS: So it can be displayed on loading page
if 'wanted_inputs' in initial_start_vars:
wanted = initial_start_vars['wanted_inputs'].split(",")
start_vars = {}
- for key, value in initial_start_vars.iteritems():
- if key in wanted or key.startswith(('value:')):
+ for key, value in list(initial_start_vars.items()):
+ if key in wanted:
start_vars[key] = value
- if 'num_vals' in start_vars:
- num_vals = int(start_vars['num_vals'])
+ if 'n_samples' in start_vars:
+ n_samples = int(start_vars['n_samples'])
else:
- dataset = create_dataset(start_vars['dataset'])
+ sample_vals_dict = json.loads(start_vars['sample_vals'])
+ if 'group' in start_vars:
+ dataset = create_dataset(start_vars['dataset'], group_name = start_vars['group'])
+ else:
+ dataset = create_dataset(start_vars['dataset'])
genofile_samplelist = []
samples = start_vars['primary_samples'].split(",")
if 'genofile' in start_vars:
@@ -605,11 +675,11 @@ def loading_page():
samples = genofile_samples
for sample in samples:
- value = start_vars.get('value:' + sample)
- if value != "x":
- num_vals += 1
+ if sample in sample_vals_dict:
+ if sample_vals_dict[sample] != "x":
+ n_samples += 1
- start_vars['num_vals'] = num_vals
+ start_vars['n_samples'] = n_samples
start_vars['wanted_inputs'] = initial_start_vars['wanted_inputs']
start_vars_container['start_vars'] = start_vars
@@ -623,7 +693,6 @@ def loading_page():
@app.route("/run_mapping", methods=('POST',))
def mapping_results_page():
initial_start_vars = request.form
- #logger.debug("Mapping called with initial_start_vars:", initial_start_vars.items())
logger.info(request.url)
temp_uuid = initial_start_vars['temp_uuid']
wanted = (
@@ -633,6 +702,7 @@ def mapping_results_page():
'species',
'samples',
'vals',
+ 'sample_vals',
'first_run',
'output_files',
'geno_db_exists',
@@ -660,6 +730,8 @@ def mapping_results_page():
'maf',
'use_loco',
'manhattan_plot',
+ 'color_scheme',
+ 'manhattan_single_color',
'control_marker',
'control_marker_db',
'do_control',
@@ -679,18 +751,16 @@ def mapping_results_page():
'mapmodel_rqtl_geno',
'temp_trait',
'reaper_version',
- 'num_vals',
+ 'n_samples',
'transform'
)
start_vars = {}
- for key, value in initial_start_vars.iteritems():
- if key in wanted or key.startswith(('value:')):
+ for key, value in list(initial_start_vars.items()):
+ if key in wanted:
start_vars[key] = value
- #logger.debug("Mapping called with start_vars:", start_vars)
version = "v3"
key = "mapping_results:{}:".format(version) + json.dumps(start_vars, sort_keys=True)
- #logger.info("key is:", pf(key))
with Bench("Loading cache"):
result = None # Just for testing
#result = Redis.get(key)
@@ -712,10 +782,9 @@ def mapping_results_page():
rendered_template = render_template("mapping_error.html")
return rendered_template
except:
- rendered_template = render_template("mapping_error.html")
- return rendered_template
+ rendered_template = render_template("mapping_error.html")
+ return rendered_template
- #if template_vars.mapping_method != "gemma" and template_vars.mapping_method != "plink":
template_vars.js_data = json.dumps(template_vars.js_data,
default=json_default_handler,
indent=" ")
@@ -730,16 +799,12 @@ def mapping_results_page():
logger.info("initial_start_vars:", initial_start_vars)
imgfile = open(TEMPDIR + img_path, 'rb')
imgdata = imgfile.read()
- imgB64 = imgdata.encode("base64")
+ imgB64 = base64.b64encode(imgdata)
bytesarray = array.array('B', imgB64)
result['pair_scan_array'] = bytesarray
rendered_template = render_template("pair_scan_results.html", **result)
else:
gn1_template_vars = display_mapping_results.DisplayMappingResults(result).__dict__
- #pickled_result = pickle.dumps(result, pickle.HIGHEST_PROTOCOL)
- #logger.info("pickled result length:", len(pickled_result))
- #Redis.set(key, pickled_result)
- #Redis.expire(key, 1*60)
with Bench("Rendering template"):
#if (gn1_template_vars['mapping_method'] == "gemma") or (gn1_template_vars['mapping_method'] == "plink"):
@@ -760,6 +825,17 @@ def export_mapping_results():
return response
+@app.route("/export_corr_matrix", methods = ('POST',))
+def export_corr_matrix():
+ file_path = request.form.get("export_filepath")
+ file_name = request.form.get("export_filename")
+ results_csv = open(file_path, "r").read()
+ response = Response(results_csv,
+ mimetype='text/csv',
+ headers={"Content-Disposition":"attachment;filename=" + file_name + ".csv"})
+
+ return response
+
@app.route("/export", methods = ('POST',))
def export():
logger.info("request.form:", request.form)
@@ -840,12 +916,37 @@ def snp_browser_page():
return render_template("snp_browser.html", **template_vars.__dict__)
+@app.route("/db_info", methods=('GET',))
+def db_info_page():
+ template_vars = InfoPage(request.args)
+
+ return render_template("info_page.html", **template_vars.__dict__)
+
+@app.route("/snp_browser_table", methods=('GET',))
+def snp_browser_table():
+ logger.info(request.url)
+ snp_table_data = snp_browser.SnpBrowser(request.args)
+ current_page = server_side.ServerSideTable(
+ snp_table_data.rows_count,
+ snp_table_data.table_rows,
+ snp_table_data.header_data_names,
+ request.args,
+ ).get_page()
+
+ return flask.jsonify(current_page)
+
@app.route("/tutorial/WebQTLTour", methods=('GET',))
def tutorial_page():
#ZS: Currently just links to GN1
logger.info(request.url)
return redirect("http://gn1.genenetwork.org/tutorial/WebQTLTour/")
+@app.route("/tutorial/security", methods=('GET',))
+def security_tutorial_page():
+ #ZS: Currently just links to GN1
+ logger.info(request.url)
+ return render_template("admin/security_help.html")
+
@app.route("/submit_bnw", methods=('POST',))
def submit_bnw():
logger.info(request.url)
@@ -870,8 +971,6 @@ def browser_inputs():
return flask.jsonify(file_contents)
-
-
##########################################################################
def json_default_handler(obj):
@@ -880,8 +979,8 @@ def json_default_handler(obj):
if hasattr(obj, 'isoformat'):
return obj.isoformat()
# Handle integer keys for dictionaries
- elif isinstance(obj, int):
- return str(int)
+ elif isinstance(obj, int) or isinstance(obj, uuid.UUID):
+ return str(obj)
# Handle custom objects
if hasattr(obj, '__dict__'):
return obj.__dict__
@@ -889,5 +988,5 @@ def json_default_handler(obj):
# logger.info("Not going to serialize Dataset")
# return None
else:
- raise TypeError, 'Object of type %s with value of %s is not JSON serializable' % (
- type(obj), repr(obj))
+ raise TypeError('Object of type %s with value of %s is not JSON serializable' % (
+ type(obj), repr(obj)))
diff --git a/wqflask/wqflask/wgcna/wgcna_analysis.py b/wqflask/wqflask/wgcna/wgcna_analysis.py
index 880a1cb2..6bf75216 100644
--- a/wqflask/wqflask/wgcna/wgcna_analysis.py
+++ b/wqflask/wqflask/wgcna/wgcna_analysis.py
@@ -1,128 +1,161 @@
-# WGCNA analysis for GN2
-# Author / Maintainer: Danny Arends <Danny.Arends@gmail.com>
+"""
+WGCNA analysis for GN2
+
+Author / Maintainer: Danny Arends <Danny.Arends@gmail.com>
+"""
+import base64
import sys
-from numpy import *
-import scipy as sp # SciPy
import rpy2.robjects as ro # R Objects
import rpy2.rinterface as ri
+from array import array as arr
+from numpy import *
from base.webqtlConfig import GENERATED_IMAGE_DIR
-from utility import webqtlUtil # Random number for the image
-
-import base64
-import array
+from rpy2.robjects.packages import importr
+from utility import webqtlUtil # Random number for the image
from utility import helper_functions
-from rpy2.robjects.packages import importr
utils = importr("utils")
-## Get pointers to some common R functions
-r_library = ro.r["library"] # Map the library function
-r_options = ro.r["options"] # Map the options function
-r_read_csv = ro.r["read.csv"] # Map the read.csv function
-r_dim = ro.r["dim"] # Map the dim function
-r_c = ro.r["c"] # Map the c function
-r_cat = ro.r["cat"] # Map the cat function
-r_paste = ro.r["paste"] # Map the paste function
-r_unlist = ro.r["unlist"] # Map the unlist function
-r_unique = ro.r["unique"] # Map the unique function
-r_length = ro.r["length"] # Map the length function
-r_unlist = ro.r["unlist"] # Map the unlist function
-r_list = ro.r.list # Map the list function
-r_matrix = ro.r.matrix # Map the matrix function
-r_seq = ro.r["seq"] # Map the seq function
-r_table = ro.r["table"] # Map the table function
-r_names = ro.r["names"] # Map the names function
-r_sink = ro.r["sink"] # Map the sink function
-r_is_NA = ro.r["is.na"] # Map the is.na function
-r_file = ro.r["file"] # Map the file function
-r_png = ro.r["png"] # Map the png function for plotting
-r_dev_off = ro.r["dev.off"] # Map the dev.off function
+# Get pointers to some common R functions
+r_library = ro.r["library"] # Map the library function
+r_options = ro.r["options"] # Map the options function
+r_read_csv = ro.r["read.csv"] # Map the read.csv function
+r_dim = ro.r["dim"] # Map the dim function
+r_c = ro.r["c"] # Map the c function
+r_cat = ro.r["cat"] # Map the cat function
+r_paste = ro.r["paste"] # Map the paste function
+r_unlist = ro.r["unlist"] # Map the unlist function
+r_unique = ro.r["unique"] # Map the unique function
+r_length = ro.r["length"] # Map the length function
+r_unlist = ro.r["unlist"] # Map the unlist function
+r_list = ro.r.list # Map the list function
+r_matrix = ro.r.matrix # Map the matrix function
+r_seq = ro.r["seq"] # Map the seq function
+r_table = ro.r["table"] # Map the table function
+r_names = ro.r["names"] # Map the names function
+r_sink = ro.r["sink"] # Map the sink function
+r_is_NA = ro.r["is.na"] # Map the is.na function
+r_file = ro.r["file"] # Map the file function
+r_png = ro.r["png"] # Map the png function for plotting
+r_dev_off = ro.r["dev.off"] # Map the dev.off function
+
class WGCNA(object):
def __init__(self):
+ # To log output from stdout/stderr to a file add `r_sink(log)`
print("Initialization of WGCNA")
- #log = r_file("/tmp/genenetwork_wcgna.log", open = "wt")
- #r_sink(log) # Uncomment the r_sink() commands to log output from stdout/stderr to a file
- #r_sink(log, type = "message")
- r_library("WGCNA") # Load WGCNA - Should only be done once, since it is quite expensive
- r_options(stringsAsFactors = False)
+
+ # Load WGCNA - Should only be done once, since it is quite expensive
+ r_library("WGCNA")
+ r_options(stringsAsFactors=False)
print("Initialization of WGCNA done, package loaded in R session")
- self.r_enableWGCNAThreads = ro.r["enableWGCNAThreads"] # Map the enableWGCNAThreads function
- self.r_pickSoftThreshold = ro.r["pickSoftThreshold"] # Map the pickSoftThreshold function
- self.r_blockwiseModules = ro.r["blockwiseModules"] # Map the blockwiseModules function
- self.r_labels2colors = ro.r["labels2colors"] # Map the labels2colors function
- self.r_plotDendroAndColors = ro.r["plotDendroAndColors"] # Map the plotDendroAndColors function
+ # Map the enableWGCNAThreads function
+ self.r_enableWGCNAThreads = ro.r["enableWGCNAThreads"]
+ # Map the pickSoftThreshold function
+ self.r_pickSoftThreshold = ro.r["pickSoftThreshold"]
+ # Map the blockwiseModules function
+ self.r_blockwiseModules = ro.r["blockwiseModules"]
+ # Map the labels2colors function
+ self.r_labels2colors = ro.r["labels2colors"]
+ # Map the plotDendroAndColors function
+ self.r_plotDendroAndColors = ro.r["plotDendroAndColors"]
print("Obtained pointers to WGCNA functions")
def run_analysis(self, requestform):
print("Starting WGCNA analysis on dataset")
- self.r_enableWGCNAThreads() # Enable multi threading
- self.trait_db_list = [trait.strip() for trait in requestform['trait_list'].split(',')]
- print("Retrieved phenotype data from database", requestform['trait_list'])
+ # Enable multi threading
+ self.r_enableWGCNAThreads()
+ self.trait_db_list = [trait.strip()
+ for trait in requestform['trait_list'].split(',')]
+ print(("Retrieved phenotype data from database",
+ requestform['trait_list']))
helper_functions.get_trait_db_obs(self, self.trait_db_list)
- self.input = {} # self.input contains the phenotype values we need to send to R
- strains = [] # All the strains we have data for (contains duplicates)
- traits = [] # All the traits we have data for (should not contain duplicates)
+ # self.input contains the phenotype values we need to send to R
+ self.input = {}
+ # All the strains we have data for (contains duplicates)
+ strains = []
+ # All the traits we have data for (should not contain duplicates)
+ traits = []
for trait in self.trait_list:
traits.append(trait[0].name)
self.input[trait[0].name] = {}
for strain in trait[0].data:
strains.append(strain)
- self.input[trait[0].name][strain] = trait[0].data[strain].value
+ self.input[trait[0].name][strain] = trait[0].data[strain].value
# Transfer the load data from python to R
- uStrainsR = r_unique(ro.Vector(strains)) # Unique strains in R vector
+ # Unique strains in R vector
+ uStrainsR = r_unique(ro.Vector(strains))
uTraitsR = r_unique(ro.Vector(traits)) # Unique traits in R vector
r_cat("The number of unique strains:", r_length(uStrainsR), "\n")
r_cat("The number of unique traits:", r_length(uTraitsR), "\n")
- # rM is the datamatrix holding all the data in R /rows = strains columns = traits
- rM = ro.r.matrix(ri.NA_Real, nrow=r_length(uStrainsR), ncol=r_length(uTraitsR), dimnames = r_list(uStrainsR, uTraitsR))
+ # rM is the datamatrix holding all the data in
+ # R /rows = strains columns = traits
+ rM = ro.r.matrix(ri.NA_Real, nrow=r_length(uStrainsR), ncol=r_length(
+ uTraitsR), dimnames=r_list(uStrainsR, uTraitsR))
for t in uTraitsR:
- trait = t[0] # R uses vectors every single element is a vector
+ # R uses vectors every single element is a vector
+ trait = t[0]
for s in uStrainsR:
- strain = s[0] # R uses vectors every single element is a vector
- #DEBUG: print(trait, strain, " in python: ", self.input[trait].get(strain), "in R:", rM.rx(strain,trait)[0])
- rM.rx[strain, trait] = self.input[trait].get(strain) # Update the matrix location
+ # R uses vectors every single element is a vector
+ strain = s[0]
+ rM.rx[strain, trait] = self.input[trait].get(
+ strain) # Update the matrix location
sys.stdout.flush()
self.results = {}
- self.results['nphe'] = r_length(uTraitsR)[0] # Number of phenotypes/traits
- self.results['nstr'] = r_length(uStrainsR)[0] # Number of strains
+ # Number of phenotypes/traits
+ self.results['nphe'] = r_length(uTraitsR)[0]
+ self.results['nstr'] = r_length(
+ uStrainsR)[0] # Number of strains
self.results['phenotypes'] = uTraitsR # Traits used
- self.results['strains'] = uStrainsR # Strains used in the analysis
- self.results['requestform'] = requestform # Store the user specified parameters for the output page
+ # Strains used in the analysis
+ self.results['strains'] = uStrainsR
+ # Store the user specified parameters for the output page
+ self.results['requestform'] = requestform
- # Calculate soft threshold if the user specified the SoftThreshold variable
+ # Calculate soft threshold if the user specified the
+ # SoftThreshold variable
if requestform.get('SoftThresholds') is not None:
- powers = [int(threshold.strip()) for threshold in requestform['SoftThresholds'].rstrip().split(",")]
- rpow = r_unlist(r_c(powers))
- print "SoftThresholds: {} == {}".format(powers, rpow)
- self.sft = self.r_pickSoftThreshold(rM, powerVector = rpow, verbose = 5)
-
- print "PowerEstimate: {}".format(self.sft[0])
- self.results['PowerEstimate'] = self.sft[0]
- if self.sft[0][0] is ri.NA_Integer:
- print "No power is suitable for the analysis, just use 1"
- self.results['Power'] = 1 # No power could be estimated
- else:
- self.results['Power'] = self.sft[0][0] # Use the estimated power
+ powers = [int(threshold.strip())
+ for threshold in requestform['SoftThresholds'].rstrip().split(",")]
+ rpow = r_unlist(r_c(powers))
+ print(("SoftThresholds: {} == {}".format(powers, rpow)))
+ self.sft = self.r_pickSoftThreshold(
+ rM, powerVector=rpow, verbose=5)
+
+ print(("PowerEstimate: {}".format(self.sft[0])))
+ self.results['PowerEstimate'] = self.sft[0]
+ if self.sft[0][0] is ri.NA_Integer:
+ print("No power is suitable for the analysis, just use 1")
+ # No power could be estimated
+ self.results['Power'] = 1
+ else:
+ # Use the estimated power
+ self.results['Power'] = self.sft[0][0]
else:
- # The user clicked a button, so no soft threshold selection
- self.results['Power'] = requestform.get('Power') # Use the power value the user gives
+ # The user clicked a button, so no soft threshold selection
+ # Use the power value the user gives
+ self.results['Power'] = requestform.get('Power')
# Create the block wise modules using WGCNA
- network = self.r_blockwiseModules(rM, power = self.results['Power'], TOMType = requestform['TOMtype'], minModuleSize = requestform['MinModuleSize'], verbose = 3)
+ network = self.r_blockwiseModules(
+ rM,
+ power=self.results['Power'],
+ TOMType=requestform['TOMtype'],
+ minModuleSize=requestform['MinModuleSize'],
+ verbose=3)
# Save the network for the GUI
self.results['network'] = network
# How many modules and how many gene per module ?
- print "WGCNA found {} modules".format(r_table(network[1]))
+ print(("WGCNA found {} modules".format(r_table(network[1]))))
self.results['nmod'] = r_length(r_table(network[1]))[0]
# The iconic WCGNA plot of the modules in the hanging tree
@@ -130,27 +163,27 @@ class WGCNA(object):
self.results['imgloc'] = GENERATED_IMAGE_DIR + self.results['imgurl']
r_png(self.results['imgloc'], width=1000, height=600, type='cairo-png')
mergedColors = self.r_labels2colors(network[1])
- self.r_plotDendroAndColors(network[5][0], mergedColors, "Module colors", dendroLabels = False, hang = 0.03, addGuide = True, guideHang = 0.05)
+ self.r_plotDendroAndColors(network[5][0], mergedColors,
+ "Module colors", dendroLabels=False,
+ hang=0.03, addGuide=True, guideHang=0.05)
r_dev_off()
sys.stdout.flush()
def render_image(self, results):
- print("pre-loading imgage results:", self.results['imgloc'])
+ print(("pre-loading imgage results:", self.results['imgloc']))
imgfile = open(self.results['imgloc'], 'rb')
imgdata = imgfile.read()
- imgB64 = imgdata.encode("base64")
- bytesarray = array.array('B', imgB64)
+ imgB64 = base64.b64encode(imgdata)
+ bytesarray = arr('B', imgB64)
self.results['imgdata'] = bytesarray
def process_results(self, results):
print("Processing WGCNA output")
template_vars = {}
template_vars["input"] = self.input
- template_vars["powers"] = self.sft[1:] # Results from the soft threshold analysis
+ # Results from the soft threshold analysis
+ template_vars["powers"] = self.sft[1:]
template_vars["results"] = self.results
self.render_image(results)
sys.stdout.flush()
- #r_sink(type = "message") # This restores R output to the stdout/stderr
- #r_sink() # We should end the Rpy session more or less
return(dict(template_vars))
-